ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCmluZGV4IDEzN2VmODUuLmI0NjdjM2IgMTAwNjQ0Ci0tLSBhL0FuZHJvaWQubWsKKysrIGIvQW5kcm9pZC5tawpAQCAtMjYxLDcgKzI2MSw3IEBACiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JQXBwbGljYXRpb25Ub2tlbi5haWRsIFwKIAljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lBcHBUcmFuc2l0aW9uQW5pbWF0aW9uU3BlY3NGdXR1cmUuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JQXNzZXRBdGxhcy5haWRsIFwKLQljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsIFwKKwljb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrZWRTdGFja0xpc3RlbmVyLmFpZGwgXAogCWNvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSUdyYXBoaWNzU3RhdHMuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JSW5wdXRGaWx0ZXIuYWlkbCBcCiAJY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JSW5wdXRGaWx0ZXJIb3N0LmFpZGwgXApAQCAtMzA4LDcgKzMwOCw3IEBACiAJY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RleHRzZXJ2aWNlL0lTcGVsbENoZWNrZXJTZXNzaW9uTGlzdGVuZXIuYWlkbCBcCiAJY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RleHRzZXJ2aWNlL0lUZXh0U2VydmljZXNNYW5hZ2VyLmFpZGwgXAogCWNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZXh0c2VydmljZS9JVGV4dFNlcnZpY2VzU2Vzc2lvbkxpc3RlbmVyLmFpZGwgXAotCWNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbkhvbGRlci5haWRsIFwKKwljb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25zLmFpZGwgXAogCWNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lJbnB1dENvbnRleHQuYWlkbCBcCiAJY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSUlucHV0Q29udGV4dENhbGxiYWNrLmFpZGwgXAogCWNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lJbnB1dE1ldGhvZC5haWRsIFwKQEAgLTM0MSwxMCArMzQxLDEyIEBACiAJbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lBdWRpb1JvdXRlc09ic2VydmVyLmFpZGwgXAogCW1lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JTWVkaWFIVFRQQ29ubmVjdGlvbi5haWRsIFwKIAltZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSU1lZGlhSFRUUFNlcnZpY2UuYWlkbCBcCisJbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lNZWRpYVJlc291cmNlTW9uaXRvci5haWRsIFwKIAltZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSU1lZGlhUm91dGVyQ2xpZW50LmFpZGwgXAogCW1lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JTWVkaWFSb3V0ZXJTZXJ2aWNlLmFpZGwgXAogCW1lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JTWVkaWFTY2FubmVyTGlzdGVuZXIuYWlkbCBcCiAJbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lNZWRpYVNjYW5uZXJTZXJ2aWNlLmFpZGwgXAorCW1lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlci5haWRsIFwKIAltZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSVJlbW90ZURpc3BsYXlDYWxsYmFjay5haWRsIFwKIAltZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSVJlbW90ZURpc3BsYXlQcm92aWRlci5haWRsIFwKIAltZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSVJlbW90ZVZvbHVtZUNvbnRyb2xsZXIuYWlkbCBcCkBAIC00MjEsNyArNDIzLDkgQEAKIAljb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvSVFTVGlsZVNlcnZpY2UuYWlkbCBcCiAKICMgRlJBTUVXT1JLU19CQVNFX0pBVkFfU1JDX0RJUlMgY29tZXMgZnJvbSBidWlsZC9jb3JlL3BhdGhtYXAubWsKLUxPQ0FMX0FJRExfSU5DTFVERVMgKz0gJChGUkFNRVdPUktTX0JBU0VfSkFWQV9TUkNfRElSUykKK0xPQ0FMX0FJRExfSU5DTFVERVMgKz0gXAorICAgICAgJChGUkFNRVdPUktTX0JBU0VfSkFWQV9TUkNfRElSUykgXAorICAgICAgZnJhbWV3b3Jrcy9uYXRpdmUvYWlkbC9iaW5kZXIKIAogTE9DQUxfSU5URVJNRURJQVRFX1NPVVJDRVMgOj0gXAogCQkJJChmcmFtZXdvcmtfcmVzX3NvdXJjZV9wYXRoKS9hbmRyb2lkL1IuamF2YSBcCkBAIC00OTgsNiArNTAyLDcgQEAKIAlmcmFtZXdvcmtzL2Jhc2UvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1BvaW50Ri5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL1JlY3RGLmFpZGwgXAogCWZyYW1ld29ya3MvYmFzZS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvUmVjdC5haWRsIFwKKwlmcmFtZXdvcmtzL2Jhc2UvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb24uYWlkbCBcCiAJZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0F1dGhlbnRpY2F0b3JEZXNjcmlwdGlvbi5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudC5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL1N5c3RlbVVwZGF0ZVBvbGljeS5haWRsIFwKQEAgLTUyMCw3ICs1MjUsNiBAQAogCWZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxVdWlkLmFpZGwgXAogCWZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvY29yZS9qYXZhL2FuZHJvaWQvb3MvUmVzdWx0UmVjZWl2ZXIuYWlkbCBcCi0JZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlLmFpZGwgXAogCWZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Xb3JrU291cmNlLmFpZGwgXAogCWZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Ecm9wQm94TWFuYWdlci5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvY29yZS9qYXZhL2FuZHJvaWQvb3MvQnVuZGxlLmFpZGwgXApAQCAtNjI4LDYgKzYzMiw3IEBACiAJZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhEZXZpY2UuYWlkbCBcCiAJZnJhbWV3b3Jrcy9iYXNlL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL0N1cnNvcldpbmRvdy5haWRsIFwKIAlmcmFtZXdvcmtzL2Jhc2UvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGUuYWlkbCBcCisJZnJhbWV3b3Jrcy9uYXRpdmUvYWlkbC9iaW5kZXIvYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZS5haWRsIFwKIAogZ2VuIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvZnJhbWV3b3JrLmFpZGwKICQoZ2VuKTogUFJJVkFURV9TUkNfRklMRVMgOj0gJChhaWRsX2ZpbGVzKQpkaWZmIC0tZ2l0IGEvYXBpL2N1cnJlbnQudHh0IGIvYXBpL2N1cnJlbnQudHh0CmluZGV4IDE2NWQ5NDAuLjUxMDA4YzEgMTAwNjQ0Ci0tLSBhL2FwaS9jdXJyZW50LnR4dAorKysgYi9hcGkvY3VycmVudC50eHQKQEAgLTY3LDcgKzY3LDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRFVNUCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRFVNUCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYUEFORF9TVEFUVVNfQkFSID0gImFuZHJvaWQucGVybWlzc2lvbi5FWFBBTkRfU1RBVFVTX0JBUiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZBQ1RPUllfVEVTVCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRkFDVE9SWV9URVNUIjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkxBU0hMSUdIVCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRkxBU0hMSUdIVCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEdFVF9BQ0NPVU5UUyA9ICJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX0FDQ09VTlRTX1BSSVZJTEVHRUQgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkdFVF9BQ0NPVU5UU19QUklWSUxFR0VEIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX1BBQ0tBR0VfU0laRSA9ICJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX1BBQ0tBR0VfU0laRSI7CkBAIC0zMzUsNiArMzM0LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYWxlbmRhclZpZXdTaG93biA9IDE2ODQzNTk2OyAvLyAweDEwMTAzNGMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYWxlbmRhclZpZXdTdHlsZSA9IDE2ODQzNjEzOyAvLyAweDEwMTAzNWQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYW5Db250cm9sTWFnbmlmaWNhdGlvbiA9IDE2ODQ0MDQwOyAvLyAweDEwMTA1MDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYW5QZXJmb3JtR2VzdHVyZXMgPSAxNjg0NDA0NjsgLy8gMHgxMDEwNTBlCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FuUmVxdWVzdEVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eSA9IDE2ODQzNzM2OyAvLyAweDEwMTAzZDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzID0gMTY4NDM3Mzc7IC8vIDB4MTAxMDNkOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uTW9kZSA9IDE2ODQzNzM1OyAvLyAweDEwMTAzZDcKQEAgLTUyNCw2ICs1MjQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4cGFuZGFibGVMaXN0Vmlld1N0eWxlID0gMTY4NDI4NjM7IC8vIDB4MTAxMDA2ZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4cGFuZGFibGVMaXN0Vmlld1doaXRlU3R5bGUgPSAxNjg0MzQ0NjsgLy8gMHgxMDEwMmI2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXhwb3J0ZWQgPSAxNjg0Mjc2ODsgLy8gMHgxMDEwMDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXh0ZXJuYWxTZXJ2aWNlID0gMTY4NDQwNDc7IC8vIDB4MTAxMDUwZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4dHJhVGVuc2lvbiA9IDE2ODQzMzcxOyAvLyAweDEwMTAyNmIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHRyYWN0TmF0aXZlTGlicyA9IDE2ODQ0MDEwOyAvLyAweDEwMTA0ZWEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBmYWN0b3IgPSAxNjg0MzIxOTsgLy8gMHgxMDEwMWQzCkBAIC03MjgsNiArNzI5LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYWJlbCA9IDE2ODQyNzUzOyAvLyAweDEwMTAwMDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYWJlbEZvciA9IDE2ODQzNzE4OyAvLyAweDEwMTAzYzYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYWJlbFRleHRTaXplID0gMTY4NDMzMTc7IC8vIDB4MTAxMDIzNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhbmd1YWdlVGFnID0gMTY4NDQwNDE7IC8vIDB4MTAxMDUwOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhcmdlSGVhcCA9IDE2ODQzNjEwOyAvLyAweDEwMTAzNWEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYXJnZVNjcmVlbnMgPSAxNjg0MzM5ODsgLy8gMHgxMDEwMjg2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFyZ2VzdFdpZHRoTGltaXREcCA9IDE2ODQzNjIyOyAvLyAweDEwMTAzNjYKQEAgLTkyNCw2ICs5MjYsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgcGhvbmVOdW1iZXIgPSAxNjg0MzExMTsgLy8gMHgxMDEwMTY3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGl2b3RYID0gMTY4NDMxODk7IC8vIDB4MTAxMDFiNQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHBpdm90WSA9IDE2ODQzMTkwOyAvLyAweDEwMTAxYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb2ludGVyU2hhcGUgPSAxNjg0NDA0MjsgLy8gMHgxMDEwNTBhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcG9wdXBBbmltYXRpb25TdHlsZSA9IDE2ODQzNDY1OyAvLyAweDEwMTAyYzkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb3B1cEJhY2tncm91bmQgPSAxNjg0MzEyNjsgLy8gMHgxMDEwMTc2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcG9wdXBDaGFyYWN0ZXJzID0gMTY4NDMzMzI7IC8vIDB4MTAxMDI0NApAQCAtMTI4Nyw2ICsxMjkwLDkgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aHVtYlRpbnQgPSAxNjg0Mzg4OTsgLy8gMHgxMDEwNDcxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGh1bWJUaW50TW9kZSA9IDE2ODQzODkwOyAvLyAweDEwMTA0NzIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aHVtYm5haWwgPSAxNjg0MzQyOTsgLy8gMHgxMDEwMmE1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlja01hcmsgPSAxNjg0NDA0MzsgLy8gMHgxMDEwNTBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlja01hcmtUaW50ID0gMTY4NDQwNDQ7IC8vIDB4MTAxMDUwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRpY2tNYXJrVGludE1vZGUgPSAxNjg0NDA0NTsgLy8gMHgxMDEwNTBkCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlsZU1vZGUgPSAxNjg0MzI2NTsgLy8gMHgxMDEwMjAxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlsZU1vZGVYID0gMTY4NDM4OTU7IC8vIDB4MTAxMDQ3NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRpbGVNb2RlWSA9IDE2ODQzODk2OyAvLyAweDEwMTA0NzgKQEAgLTIxMTIsMjIgKzIxMTgsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX0xpZ2h0X1BhbmVsID0gMTY5NzM5MTQ7IC8vIDB4MTAzMDA1YQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX0xpZ2h0X1dhbGxwYXBlclNldHRpbmdzID0gMTY5NzM5MjI7IC8vIDB4MTAzMDA2MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsID0gMTY5NzQzNzI7IC8vIDB4MTAzMDIyNAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0ID0gMTY5NzQ1NTI7IC8vIDB4MTAzMDJkOAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU1MzsgLy8gMHgxMDMwMmQ5Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nID0gMTY5NzQ1NTQ7IC8vIDB4MTAzMDJkYQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ1doZW5MYXJnZSA9IDE2OTc0NTYwOyAvLyAweDEwMzAyZTAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dXaGVuTGFyZ2VfRGFya0FjdGlvbkJhciA9IDE2OTc0NTY4OyAvLyAweDEwMzAyZTgKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIgPSAxNjk3NDU2MTsgLy8gMHgxMDMwMmUxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX0FsZXJ0ID0gMTY5NzQ1NTU7IC8vIDB4MTAzMDJkYgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ19NaW5XaWR0aCA9IDE2OTc0NTU2OyAvLyAweDEwMzAyZGMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dfTm9BY3Rpb25CYXIgPSAxNjk3NDU1NzsgLy8gMHgxMDMwMmRkCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoID0gMTY5NzQ1NTg7IC8vIDB4MTAzMDJkZQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ19QcmVzZW50YXRpb24gPSAxNjk3NDU1OTsgLy8gMHgxMDMwMmRmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfTm9BY3Rpb25CYXIgPSAxNjk3NDU2MjsgLy8gMHgxMDMwMmUyCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfTm9BY3Rpb25CYXJfRnVsbHNjcmVlbiA9IDE2OTc0NTYzOyAvLyAweDEwMzAyZTMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiA9IDE2OTc0NTY0OyAvLyAweDEwMzAyZTQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhcl9UcmFuc2x1Y2VudERlY29yID0gMTY5NzQ1NjU7IC8vIDB4MTAzMDJlNQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X1BhbmVsID0gMTY5NzQ1NjY7IC8vIDB4MTAzMDJlNgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RpYWxvZyA9IDE2OTc0MzczOyAvLyAweDEwMzAyMjUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EaWFsb2dXaGVuTGFyZ2UgPSAxNjk3NDM3OTsgLy8gMHgxMDMwMjJiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyID0gMTY5NzQzODA7IC8vIDB4MTAzMDIyYwpAQCAtMjE0MSw3ICsyMTMxLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EYXJrQWN0aW9uQmFyID0gMTY5NzQzOTI7IC8vIDB4MTAzMDIzOAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZyA9IDE2OTc0MzkzOyAvLyAweDEwMzAyMzkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2UgPSAxNjk3NDM5OTsgLy8gMHgxMDMwMjNmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU2NzsgLy8gMHgxMDMwMmU3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU1MjsgLy8gMHgxMDMwMmQ4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyID0gMTY5NzQ0MDA7IC8vIDB4MTAzMDI0MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ19BbGVydCA9IDE2OTc0Mzk0OyAvLyAweDEwMzAyM2EKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dfTWluV2lkdGggPSAxNjk3NDM5NTsgLy8gMHgxMDMwMjNiCkBAIC0yNTYyLDYgKzI1NTIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TY3JvbGxWaWV3ID0gMTY5NzQ0NjI7IC8vIDB4MTAzMDI3ZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWFyY2hWaWV3ID0gMTY5NzQ0NjM7IC8vIDB4MTAzMDI3ZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWVrQmFyID0gMTY5NzQ0NjQ7IC8vIDB4MTAzMDI4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWVrQmFyX0Rpc2NyZXRlID0gMTY5NzQ1NTM7IC8vIDB4MTAzMDJkOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWdtZW50ZWRCdXR0b24gPSAxNjk3NDQ2NTsgLy8gMHgxMDMwMjgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NwaW5uZXIgPSAxNjk3NDQ2NzsgLy8gMHgxMDMwMjgzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NwaW5uZXJfVW5kZXJsaW5lZCA9IDE2OTc0NDY4OyAvLyAweDEwMzAyODQKQEAgLTI2MjEsNiArMjYxMiw3IEBACiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIEFjY2Vzc2liaWxpdHlTZXJ2aWNlIGV4dGVuZHMgYW5kcm9pZC5hcHAuU2VydmljZSB7CiAgICAgY3RvciBwdWJsaWMgQWNjZXNzaWJpbGl0eVNlcnZpY2UoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gZGlzcGF0Y2hHZXN0dXJlKGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uLCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdlc3R1cmVSZXN1bHRDYWxsYmFjaywgYW5kcm9pZC5vcy5IYW5kbGVyKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kRm9jdXMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UuTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIgZ2V0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbyBnZXRSb290SW5BY3RpdmVXaW5kb3coKTsKQEAgLTI2NjAsNiArMjY1MiwxMiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX01FVEFfREFUQSA9ICJhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlIjsKICAgfQogCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQWNjZXNzaWJpbGl0eVNlcnZpY2UuR2VzdHVyZVJlc3VsdENhbGxiYWNrIHsKKyAgICBjdG9yIHB1YmxpYyBBY2Nlc3NpYmlsaXR5U2VydmljZS5HZXN0dXJlUmVzdWx0Q2FsbGJhY2soKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYW5jZWxsZWQoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlZChhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbik7CisgIH0KKwogICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLk1hZ25pZmljYXRpb25Db250cm9sbGVyIHsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZS5NYWduaWZpY2F0aW9uQ29udHJvbGxlci5Pbk1hZ25pZmljYXRpb25DaGFuZ2VkTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlLk1hZ25pZmljYXRpb25Db250cm9sbGVyLk9uTWFnbmlmaWNhdGlvbkNoYW5nZWRMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKQEAgLTI2OTIsNiArMjY5MCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGxvYWREZXNjcmlwdGlvbihhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTiA9IDE2OyAvLyAweDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUEVSRk9STV9HRVNUVVJFUyA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUkVRVUVTVF9FTkhBTkNFRF9XRUJfQUNDRVNTSUJJTElUWSA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfRklMVEVSX0tFWV9FVkVOVFMgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX0NBTl9SRVFVRVNUX1RPVUNIX0VYUExPUkFUSU9OID0gMjsgLy8gMHgyCkBAIC0yNzE4LDYgKzI3MTcsMzAgQEAKICAgICBmaWVsZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIHBhY2thZ2VOYW1lczsKICAgfQogCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBHZXN0dXJlRGVzY3JpcHRpb24geworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZUNsaWNrKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbiBjcmVhdGVMb25nQ2xpY2soaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZVBpbmNoKGludCwgaW50LCBpbnQsIGludCwgZmxvYXQsIGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZVN3aXBlKGludCwgaW50LCBpbnQsIGludCwgbG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbi5TdHJva2VEZXNjcmlwdGlvbiBnZXRTdHJva2UoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTdHJva2VDb3VudCgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBNQVhfR0VTVFVSRV9EVVJBVElPTl9NUyA9IDYwMDAwTDsgLy8gMHhlYTYwTAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9TVFJPS0VfQ09VTlQgPSAxMDsgLy8gMHhhCisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEdlc3R1cmVEZXNjcmlwdGlvbi5CdWlsZGVyIHsKKyAgICBjdG9yIHB1YmxpYyBHZXN0dXJlRGVzY3JpcHRpb24uQnVpbGRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24uQnVpbGRlciBhZGRTdHJva2UoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24uU3Ryb2tlRGVzY3JpcHRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24gYnVpbGQoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR2VzdHVyZURlc2NyaXB0aW9uLlN0cm9rZURlc2NyaXB0aW9uIHsKKyAgICBjdG9yIHB1YmxpYyBHZXN0dXJlRGVzY3JpcHRpb24uU3Ryb2tlRGVzY3JpcHRpb24oYW5kcm9pZC5ncmFwaGljcy5QYXRoLCBsb25nLCBsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0RHVyYXRpb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCBnZXRQYXRoKCk7CisgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFN0YXJ0VGltZSgpOworICB9CisKIH0KIAogcGFja2FnZSBhbmRyb2lkLmFjY291bnRzIHsKQEAgLTI3MjgsMTUgKzI3NTEsMTIgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGFkZEFjY291bnRGcm9tQ3JlZGVudGlhbHMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLm9zLkJ1bmRsZSBjb25maXJtQ3JlZGVudGlhbHMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLm9zLkJ1bmRsZSBlZGl0UHJvcGVydGllcyhhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGphdmEubGFuZy5TdHJpbmcpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZmluaXNoU2Vzc2lvbihhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBY2NvdW50Q3JlZGVudGlhbHNGb3JDbG9uaW5nKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50KSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBY2NvdW50UmVtb3ZhbEFsbG93ZWQoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQub3MuQnVuZGxlIGdldEF1dGhUb2tlbihhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0QXV0aFRva2VuTGFiZWwoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLm9zLklCaW5kZXIgZ2V0SUJpbmRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5vcy5CdW5kbGUgaGFzRmVhdHVyZXMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmdbXSkgdGhyb3dzIGFuZHJvaWQuYWNjb3VudHMuTmV0d29ya0Vycm9yRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgc3RhcnRBZGRBY2NvdW50U2Vzc2lvbihhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSwgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIHN0YXJ0VXBkYXRlQ3JlZGVudGlhbHNTZXNzaW9uKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSkgdGhyb3dzIGFuZHJvaWQuYWNjb3VudHMuTmV0d29ya0Vycm9yRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5vcy5CdW5kbGUgdXBkYXRlQ3JlZGVudGlhbHMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9DVVNUT01fVE9LRU5fRVhQSVJZID0gImFuZHJvaWQuYWNjb3VudHMuZXhwaXJ5IjsKICAgfQpAQCAtMjc3NCw3ICsyNzk0LDYgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgY2xlYXJQYXNzd29yZChhbmRyb2lkLmFjY291bnRzLkFjY291bnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckZ1dHVyZTxhbmRyb2lkLm9zLkJ1bmRsZT4gY29uZmlybUNyZWRlbnRpYWxzKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgYW5kcm9pZC5vcy5CdW5kbGUsIGFuZHJvaWQuYXBwLkFjdGl2aXR5LCBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8YW5kcm9pZC5vcy5CdW5kbGU+LCBhbmRyb2lkLm9zLkhhbmRsZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckZ1dHVyZTxhbmRyb2lkLm9zLkJ1bmRsZT4gZWRpdFByb3BlcnRpZXMoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5hcHAuQWN0aXZpdHksIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJDYWxsYmFjazxhbmRyb2lkLm9zLkJ1bmRsZT4sIGFuZHJvaWQub3MuSGFuZGxlcik7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyRnV0dXJlPGFuZHJvaWQub3MuQnVuZGxlPiBmaW5pc2hTZXNzaW9uKGFuZHJvaWQub3MuQnVuZGxlLCBhbmRyb2lkLmFwcC5BY3Rpdml0eSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckNhbGxiYWNrPGFuZHJvaWQub3MuQnVuZGxlPiwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyIGdldChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRbXSBnZXRBY2NvdW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50W10gZ2V0QWNjb3VudHNCeVR5cGUoamF2YS5sYW5nLlN0cmluZyk7CkBAIC0yODAyLDggKzI4MjEsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBdXRoVG9rZW4oYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGFzc3dvcmQoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VXNlckRhdGEoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJGdXR1cmU8YW5kcm9pZC5vcy5CdW5kbGU+IHN0YXJ0QWRkQWNjb3VudFNlc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5hcHAuQWN0aXZpdHksIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJDYWxsYmFjazxhbmRyb2lkLm9zLkJ1bmRsZT4sIGFuZHJvaWQub3MuSGFuZGxlcik7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyRnV0dXJlPGFuZHJvaWQub3MuQnVuZGxlPiBzdGFydFVwZGF0ZUNyZWRlbnRpYWxzU2Vzc2lvbihhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBhbmRyb2lkLmFwcC5BY3Rpdml0eSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckNhbGxiYWNrPGFuZHJvaWQub3MuQnVuZGxlPiwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJGdXR1cmU8YW5kcm9pZC5vcy5CdW5kbGU+IHVwZGF0ZUNyZWRlbnRpYWxzKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUsIGFuZHJvaWQuYXBwLkFjdGl2aXR5LCBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8YW5kcm9pZC5vcy5CdW5kbGU+LCBhbmRyb2lkLm9zLkhhbmRsZXIpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fQVVUSEVOVElDQVRPUl9JTlRFTlQgPSAiYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFVVEhFTlRJQ0FUT1JfQVRUUklCVVRFU19OQU1FID0gImFjY291bnQtYXV0aGVudGljYXRvciI7CkBAIC0yODIwLDggKzI4MzcsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9BVVRIRU5USUNBVE9SX1JFU1BPTlNFID0gImFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9NQU5BR0VSX1JFU1BPTlNFID0gImFjY291bnRNYW5hZ2VyUmVzcG9uc2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9OQU1FID0gImF1dGhBY2NvdW50IjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX0FDQ09VTlRfU0VTU0lPTl9CVU5ETEUgPSAiYWNjb3VudFNlc3Npb25CdW5kbGUiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9TVEFUVVNfVE9LRU4gPSAiYWNjb3VudFN0YXR1c1Rva2VuIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX0FDQ09VTlRfVFlQRSA9ICJhY2NvdW50VHlwZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BTkRST0lEX1BBQ0tBR0VfTkFNRSA9ICJhbmRyb2lkUGFja2FnZU5hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQVVUSEVOVElDQVRPUl9UWVBFUyA9ICJhdXRoZW50aWNhdG9yX3R5cGVzIjsKQEAgLTMzNzIsNiArMzM4Nyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVG91Y2hFdmVudChhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFRyYWNrYmFsbEV2ZW50KGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGR1bXAoamF2YS5sYW5nLlN0cmluZywgamF2YS5pby5GaWxlRGVzY3JpcHRvciwgamF2YS5pby5QcmludFdyaXRlciwgamF2YS5sYW5nLlN0cmluZ1tdKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXcgZmluZFZpZXdCeUlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZpbmlzaCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmaW5pc2hBY3Rpdml0eShpbnQpOwpAQCAtMzQ4Miw2ICszNDk4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25QcmVwYXJlUGFuZWwoaW50LCBhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblByb3ZpZGVBc3Npc3RDb250ZW50KGFuZHJvaWQuYXBwLmFzc2lzdC5Bc3Npc3RDb250ZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25Qcm92aWRlQXNzaXN0RGF0YShhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5Vcmkgb25Qcm92aWRlUmVmZXJyZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25SZXF1ZXN0UGVybWlzc2lvbnNSZXN1bHQoaW50LCBqYXZhLmxhbmcuU3RyaW5nW10sIGludFtdKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25SZXN0YXJ0KCk7CkBAIC0zNTE3LDYgKzM1MzQsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlSW5zdGFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGRlcHJlY2F0ZWQgdm9pZCByZW1vdmVEaWFsb2coaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVwb3J0RnVsbHlEcmF3bigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9ucyByZXF1ZXN0RHJvcFBlcm1pc3Npb25zKGFuZHJvaWQudmlldy5EcmFnRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbnMoamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0VmlzaWJsZUJlaGluZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVxdWVzdFdpbmRvd0ZlYXR1cmUoaW50KTsKQEAgLTM1NTEsNiArMzU2OSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc2V0VGl0bGVDb2xvcihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRWb2x1bWVDb250cm9sU3RyZWFtKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZyTW9kZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvdWxkU2hvd1JlcXVlc3RQZXJtaXNzaW9uUmF0aW9uYWxlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRVcFJlY3JlYXRlVGFzayhhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvd0Fzc2lzdChhbmRyb2lkLm9zLkJ1bmRsZSk7CkBAIC0zNjUwLDYgKzM2NjksOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgIH0KIAorICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIEFjdGl2aXR5TWFuYWdlci5CdWdyZXBvcnRNb2RlIGltcGxlbWVudHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbiB7CisgIH0KKwogICBwdWJsaWMgc3RhdGljIGNsYXNzIEFjdGl2aXR5TWFuYWdlci5NZW1vcnlJbmZvIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBBY3Rpdml0eU1hbmFnZXIuTWVtb3J5SW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKQEAgLTQwOTMsMTEgKzQxMTUsMTQgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBEYXRlUGlja2VyRGlhbG9nIGV4dGVuZHMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cgaW1wbGVtZW50cyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLk9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyLCBpbnQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25EYXRlQ2hhbmdlZChhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25EYXRlU2V0TGlzdGVuZXIoYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50LCBpbnQsIGludCk7CiAgIH0KIApAQCAtNDE1OCw2ICs0MTgzLDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25QYW5lbENsb3NlZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25QcmVwYXJlT3B0aW9uc01lbnUoYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblByZXBhcmVQYW5lbChpbnQsIGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuTWVudSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgb25TYXZlSW5zdGFuY2VTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZChhbmRyb2lkLnZpZXcuU2VhcmNoRXZlbnQpOwpAQCAtNDIzNyw3ICs0MjYzLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0lEID0gIl9pZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MQVNUX01PRElGSUVEX1RJTUVTVEFNUCA9ICJsYXN0X21vZGlmaWVkX3RpbWVzdGFtcCI7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MT0NBTF9GSUxFTkFNRSA9ICJsb2NhbF9maWxlbmFtZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX1VSSSA9ICJsb2NhbF91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFQUk9WSURFUl9VUkkgPSAibWVkaWFwcm92aWRlcl91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFfVFlQRSA9ICJtZWRpYV90eXBlIjsKQEAgLTQ4NDksNiArNDg3NSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTID0gImFuZHJvaWQucHJvZ3Jlc3MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19JTkRFVEVSTUlOQVRFID0gImFuZHJvaWQucHJvZ3Jlc3NJbmRldGVybWluYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1NfTUFYID0gImFuZHJvaWQucHJvZ3Jlc3NNYXgiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSA9ICJhbmRyb2lkLnJlbW90ZUlucHV0SGlzdG9yeSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfQ0hST05PTUVURVIgPSAiYW5kcm9pZC5zaG93Q2hyb25vbWV0ZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9TSE9XX1dIRU4gPSAiYW5kcm9pZC5zaG93V2hlbiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NNQUxMX0lDT04gPSAiYW5kcm9pZC5pY29uIjsKQEAgLTUwMTUsNiArNTA0Miw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcmlvcml0eShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHJvZ3Jlc3MoaW50LCBpbnQsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHVibGljVmVyc2lvbihhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UmVtb3RlSW5wdXRIaXN0b3J5KGphdmEubGFuZy5DaGFyU2VxdWVuY2VbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTaG93V2hlbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNtYWxsSWNvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCwgaW50KTsKQEAgLTUyMDQsNiArNTIzMiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhbGxTZW5kZXJzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlDYXRlZ29yaWVzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlNZXNzYWdlU2VuZGVyczsKQEAgLTU2NTYsOCArNTY4NSwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBwZWVrRmFzdERyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNlbmRXYWxscGFwZXJDb21tYW5kKGFuZHJvaWQub3MuSUJpbmRlciwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCwgYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCaXRtYXAoYW5kcm9pZC5ncmFwaGljcy5CaXRtYXApIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRCaXRtYXAoYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAsIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCwgYm9vbGVhbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJlc291cmNlKGludCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3RyZWFtKGphdmEuaW8uSW5wdXRTdHJlYW0sIGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCwgYm9vbGVhbikgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlck9mZnNldFN0ZXBzKGZsb2F0LCBmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFdhbGxwYXBlck9mZnNldHMoYW5kcm9pZC5vcy5JQmluZGVyLCBmbG9hdCwgZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdWdnZXN0RGVzaXJlZERpbWVuc2lvbnMoaW50LCBpbnQpOwpAQCAtNTc1MSwxOCArNTc4MiwyMyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEFjY291bnRUeXBlc1dpdGhNYW5hZ2VtZW50RGlzYWJsZWQoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lPiBnZXRBY3RpdmVBZG1pbnMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRBdXRvVGltZVJlcXVpcmVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEJsdWV0b290aENvbnRhY3RTaGFyaW5nRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRDYW1lcmFEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENlcnRJbnN0YWxsZXJQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKSB0aHJvd3MgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuU3RyaW5nPiBnZXRDcm9zc1Byb2ZpbGVXaWRnZXRQcm92aWRlcnMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEN1cnJlbnRGYWlsZWRQYXNzd29yZEF0dGVtcHRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGJ5dGVbXT4gZ2V0SW5zdGFsbGVkQ2FDZXJ0cyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldE1heGltdW1UaW1lVG9Mb2NrKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UGFja2FnZVN1c3BlbmRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VyIGdldFBhcmVudFByb2ZpbGVJbnN0YW5jZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFBhc3N3b3JkRXhwaXJhdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFBhc3N3b3JkRXhwaXJhdGlvblRpbWVvdXQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhc3N3b3JkSGlzdG9yeUxlbmd0aChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CkBAIC01NzgwLDYgKzU4MTYsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLlN0cmluZz4gZ2V0UGVybWl0dGVkQWNjZXNzaWJpbGl0eVNlcnZpY2VzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IGdldFBlcm1pdHRlZElucHV0TWV0aG9kcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFNjcmVlbkNhcHR1cmVEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRTdG9yYWdlRW5jcnlwdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3RvcmFnZUVuY3J5cHRpb25TdGF0dXMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmFkbWluLlN5c3RlbVVwZGF0ZVBvbGljeSBnZXRTeXN0ZW1VcGRhdGVQb2xpY3koKTsKQEAgLTU3OTMsNiArNTgzMCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQWN0aXZlUGFzc3dvcmRTdWZmaWNpZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQWRtaW5BY3RpdmUoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FwcGxpY2F0aW9uSGlkZGVuKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDYWxsZXJBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZU93bmVyQXBwKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0xvY2tUYXNrUGVybWl0dGVkKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc01hc3RlclZvbHVtZU11dGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKQEAgLTU4MDAsNiArNTgzOCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUHJvdmlzaW9uaW5nQWxsb3dlZChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVbmluc3RhbGxCbG9ja2VkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgbG9ja05vdygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWJvb3QoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZW1vdmVBY3RpdmVBZG1pbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbW92ZUNyb3NzUHJvZmlsZVdpZGdldFByb3ZpZGVyKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlS2V5UGFpcihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CkBAIC01ODA4LDE5ICs1ODQ3LDIzIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFjY291bnRNYW5hZ2VtZW50RGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRBcHBsaWNhdGlvbkhpZGRlbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXV0b1RpbWVSZXF1aXJlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJsdWV0b290aENvbnRhY3RTaGFyaW5nRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDYW1lcmFEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENlcnRJbnN0YWxsZXJQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRHbG9iYWxTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0S2V5Z3VhcmREaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEtleWd1YXJkRGlzYWJsZWRGZWF0dXJlcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TG9ja1Rhc2tQYWNrYWdlcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb25nU3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXN0ZXJWb2x1bWVNdXRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtVGltZVRvTG9jayhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgbG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldFBhY2thZ2VTdXNwZW5kZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZEV4cGlyYXRpb25UaW1lb3V0KGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBsb25nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZE1pbmltdW1MZW5ndGgoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CkBAIC01ODQxLDYgKzU4ODQsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZXN0cmljdGlvbnNQcm92aWRlcihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTY3JlZW5DYXB0dXJlRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTZWN1cmVTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldFN0YXR1c0JhckRpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGludCBzZXRTdG9yYWdlRW5jcnlwdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN5c3RlbVVwZGF0ZVBvbGljeShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYW5kcm9pZC5hcHAuYWRtaW4uU3lzdGVtVXBkYXRlUG9saWN5KTsKQEAgLTYxMTksNiArNjE2Myw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEJhY2tvZmZQb2xpY3koKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuUGVyc2lzdGFibGVCdW5kbGUgZ2V0RXh0cmFzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEZsZXhNaWxsaXMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRJbml0aWFsQmFja29mZk1pbGxpcygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRJbnRlcnZhbE1pbGxpcygpOwpAQCAtNjEzNiw2ICs2MTgxLDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvPiBDUkVBVE9SOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBERUZBVUxUX0lOSVRJQUxfQkFDS09GRl9NSUxMSVMgPSAzMDAwMEw7IC8vIDB4NzUzMEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYX0JBQ0tPRkZfREVMQVlfTUlMTElTID0gMTgwMDAwMDBMOyAvLyAweDExMmE4ODBMCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9GTEVYX01JTExJUyA9IDMwMDAwMEw7IC8vIDB4NDkzZTBMCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9QRVJJT0RfTUlMTElTID0gMzYwMDAwMEw7IC8vIDB4MzZlZTgwTAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVFlQRV9BTlkgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX1RZUEVfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVFlQRV9VTk1FVEVSRUQgPSAyOyAvLyAweDIKQEAgLTYxNDksNiArNjE5Niw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldE1pbmltdW1MYXRlbmN5KGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRPdmVycmlkZURlYWRsaW5lKGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRQZXJpb2RpYyhsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0UGVyaW9kaWMobG9uZywgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldFBlcnNpc3RlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0UmVxdWlyZWROZXR3b3JrVHlwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRSZXF1aXJlc0NoYXJnaW5nKGJvb2xlYW4pOwpAQCAtNjIwOSw2ICs2MjU3LDggQEAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBOZXR3b3JrU3RhdHMuQnVja2V0IHsKICAgICBjdG9yIHB1YmxpYyBOZXR3b3JrU3RhdHMuQnVja2V0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEVuZFRpbWVTdGFtcCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1ldGVyaW5nKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Um9hbWluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRSeEJ5dGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFJ4UGFja2V0cygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRTdGFydFRpbWVTdGFtcCgpOwpAQCAtNjIxNiw2ICs2MjY2LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFR4Qnl0ZXMoKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0VHhQYWNrZXRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VWlkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVURVJJTkdfQUxMID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVRFUklOR19ERUZBVUxUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVURVJJTkdfTUVURVJFRCA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQU1JTkdfQUxMID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FNSU5HX0RFRkFVTFQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FNSU5HX1JPQU1JTkcgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9BTEwgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0RFRkFVTFQgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9GT1JFR1JPVU5EID0gMjsgLy8gMHgyCkBAIC03NTY2LDExICs3NjIyLDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRGF0YVRvUGlwZShhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yLCBhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBUKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IGltcGxlbWVudHMgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uPikgdGhyb3dzIGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgYnVsa0luc2VydChhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGNhbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBjYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVsZXRlKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyIGdldExvY2FsQ29udGVudFByb3ZpZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U3RyZWFtVHlwZXMoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CkBAIC03NTg0LDcgKzc2NDEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpIHRocm93cyBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gcmVsZWFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIHVuY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZShhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgfQpAQCAtNzc4MCw4ICs3ODM3LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBjaGVja1VyaVBlcm1pc3Npb24oYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBjbGVhcldhbGxwYXBlcigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KGFuZHJvaWQudmlldy5EaXNwbGF5KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZVBhY2thZ2VDb250ZXh0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gZGF0YWJhc2VMaXN0KCk7CkBAIC03ODM3LDggKzc4OTMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgZGVwcmVjYXRlZCBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1IZWlnaHQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgaW50IGdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtV2lkdGgoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgZ3JhbnRVcmlQZXJtaXNzaW9uKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQubmV0LlVyaSwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkU3RvcmFnZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1Jlc3RyaWN0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGludFtdKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheSBvYnRhaW5TdHlsZWRBdHRyaWJ1dGVzKGludCwgaW50W10pIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTc5NzAsOCArODAyNSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgY2xlYXJXYWxscGFwZXIoKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNvbmZpZ3VyYXRpb25Db250ZXh0KGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbik7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDcmVkZW50aWFsRW5jcnlwdGVkQ29udGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEZXZpY2VFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEaXNwbGF5Q29udGV4dChhbmRyb2lkLnZpZXcuRGlzcGxheSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVQYWNrYWdlQ29udGV4dChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGRhdGFiYXNlTGlzdCgpOwpAQCAtODAyMSw4ICs4MDc1LDcgQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgaW50IGdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtSGVpZ2h0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm5ldC5VcmksIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEuaW8uRmlsZUlucHV0U3RyZWFtIG9wZW5GaWxlSW5wdXQoamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIG9wZW5GaWxlT3V0cHV0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5KTsKQEAgLTg0OTAsNiArODU0Myw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9FWENMVURFX0ZST01fUkVDRU5UUyA9IDgzODg2MDg7IC8vIDB4ODAwMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9GT1JXQVJEX1JFU1VMVCA9IDMzNTU0NDMyOyAvLyAweDIwMDAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0xBVU5DSEVEX0ZST01fSElTVE9SWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9MQVVOQ0hfVE9fU0lERSA9IDQwOTY7IC8vIDB4MTAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSyA9IDEzNDIxNzcyODsgLy8gMHg4MDAwMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQgPSA1MjQyODg7IC8vIDB4ODAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX05FV19UQVNLID0gMjY4NDM1NDU2OyAvLyAweDEwMDAwMDAwCkBAIC05MDAxLDYgKzkwNTUsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUxXQVlTX1JFVEFJTl9UQVNLX1NUQVRFID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BVVRPX1JFTU9WRV9GUk9NX1JFQ0VOVFMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0NMRUFSX1RBU0tfT05fTEFVTkNIID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FTkFCTEVfVlJfTU9ERSA9IDMyNzY4OyAvLyAweDgwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0VYQ0xVREVfRlJPTV9SRUNFTlRTID0gMzI7IC8vIDB4MjAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTklTSF9PTl9DTE9TRV9TWVNURU1fRElBTE9HUyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTklTSF9PTl9UQVNLX0xBVU5DSCA9IDI7IC8vIDB4MgpAQCAtOTA5Niw2ICs5MTUxLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NDUkVFTl9ERU5TSVRJRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NNQUxMX1NDUkVFTlMgPSA1MTI7IC8vIDB4MjAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19YTEFSR0VfU0NSRUVOUyA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VTUEVOREVEID0gMTA3Mzc0MTgyNDsgLy8gMHg0MDAwMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1lTVEVNID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19URVNUX09OTFkgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19VUERBVEVEX1NZU1RFTV9BUFAgPSAxMjg7IC8vIDB4ODAKQEAgLTk0MjksOCArOTQ4NSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREZWZhdWx0QWN0aXZpdHlJY29uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERyYXdhYmxlKGphdmEubGFuZy5TdHJpbmcsIGludCwgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBieXRlW10gZ2V0RXBoZW1lcmFsQ29va2llKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0RXBoZW1lcmFsQ29va2llTWF4U2l6ZUJ5dGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvPiBnZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZyk7CkBAIC05NDQwLDggKzk0OTQsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0TmFtZUZvclVpZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvIGdldFBhY2thZ2VBcmNoaXZlSW5mbyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50W10gZ2V0UGFja2FnZUdpZHMoamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnRbXSBnZXRQYWNrYWdlR2lkcyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluc3RhbGxlciBnZXRQYWNrYWdlSW5zdGFsbGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGFja2FnZVVpZChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZ1tdIGdldFBhY2thZ2VzRm9yVWlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8+IGdldFBhY2thZ2VzSG9sZGluZ1Blcm1pc3Npb25zKGphdmEubGFuZy5TdHJpbmdbXSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5wbS5QZXJtaXNzaW9uR3JvdXBJbmZvIGdldFBlcm1pc3Npb25Hcm91cEluZm8oamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTk0NjIsNyArOTUxOCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldFVzZXJCYWRnZWRMYWJlbChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlciBnZXRYbWwoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzU3lzdGVtRmVhdHVyZShqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Blcm1pc3Npb25SZXZva2VkQnlQb2xpY3koamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU2FmZU1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoYW5kcm9pZC5jb250ZW50LkludGVudCwgaW50KTsKQEAgLTk0ODAsNyArOTUzNSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm8gcmVzb2x2ZVNlcnZpY2UoYW5kcm9pZC5jb250ZW50LkludGVudCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0QXBwbGljYXRpb25FbmFibGVkU2V0dGluZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQsIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHNldEVwaGVtZXJhbENvb2tpZShieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRJbnN0YWxsZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgdmVyaWZ5UGVuZGluZ0luc3RhbGwoaW50LCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQgPSAwOyAvLyAweDAKQEAgLTk1MTIsNiArOTU2Niw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfQ09OTkVDVElPTl9TRVJWSUNFID0gImFuZHJvaWQuc29mdHdhcmUuY29ubmVjdGlvbnNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTlNVTUVSX0lSID0gImFuZHJvaWQuaGFyZHdhcmUuY29uc3VtZXJpciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfREVWSUNFX0FETUlOID0gImFuZHJvaWQuc29mdHdhcmUuZGV2aWNlX2FkbWluIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9FVEhFUk5FVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmV0aGVybmV0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0ggPSAiYW5kcm9pZC5oYXJkd2FyZS5mYWtldG91Y2giOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0RJU1RJTkNUID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guZGlzdGluY3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0ZBS0VUT1VDSF9NVUxUSVRPVUNIX0pBWlpIQU5EID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoLm11bHRpdG91Y2guamF6emhhbmQiOwpAQCAtOTUzMyw2ICs5NTg4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9ORkMgPSAiYW5kcm9pZC5oYXJkd2FyZS5uZmMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX05GQ19IT1NUX0NBUkRfRU1VTEFUSU9OID0gImFuZHJvaWQuaGFyZHdhcmUubmZjLmhjZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfT1BFTkdMRVNfRVhURU5TSU9OX1BBQ0sgPSAiYW5kcm9pZC5oYXJkd2FyZS5vcGVuZ2xlcy5hZXAiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1BJQ1RVUkVfSU5fUElDVFVSRSA9ICJhbmRyb2lkLnNvZnR3YXJlLnBpY3R1cmVfaW5fcGljdHVyZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfUFJJTlRJTkcgPSAiYW5kcm9pZC5zb2Z0d2FyZS5wcmludCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfU0NSRUVOX0xBTkRTQ0FQRSA9ICJhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5sYW5kc2NhcGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1NDUkVFTl9QT1JUUkFJVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5wb3J0cmFpdCI7CkBAIC05NTYyLDE1ICs5NjE4LDE1IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVVNCX0FDQ0VTU09SWSA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5hY2Nlc3NvcnkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9IT1NUID0gImFuZHJvaWQuaGFyZHdhcmUudXNiLmhvc3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1ZFUklGSUVEX0JPT1QgPSAiYW5kcm9pZC5zb2Z0d2FyZS52ZXJpZmllZF9ib290IjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WUl9NT0RFID0gImFuZHJvaWQuc29mdHdhcmUudnIubW9kZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0FUQ0ggPSAiYW5kcm9pZC5oYXJkd2FyZS50eXBlLndhdGNoIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XRUJWSUVXID0gImFuZHJvaWQuc29mdHdhcmUud2VidmlldyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0lGSSA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRklfRElSRUNUID0gImFuZHJvaWQuaGFyZHdhcmUud2lmaS5kaXJlY3QiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9BQ1RJVklUSUVTID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0NPTkZJR1VSQVRJT05TID0gMTYzODQ7IC8vIDB4NDAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9ESVNBQkxFRF9DT01QT05FTlRTID0gNTEyOyAvLyAweDIwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0VOQ1JZUFRJT05fVU5BV0FSRV9DT01QT05FTlRTID0gMjYyMTQ0OyAvLyAweDQwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgaW50IEdFVF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0dJRFMgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0lOU1RSVU1FTlRBVElPTiA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0lOVEVOVF9GSUxURVJTID0gMzI7IC8vIDB4MjAKQEAgLTk1ODIsMTAgKzk2MzgsMTcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfU0VSVklDRVMgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMgPSAxMDI0OyAvLyAweDQwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9TSUdOQVRVUkVTID0gNjQ7IC8vIDB4NDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgaW50IEdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDgxOTI7IC8vIDB4MjAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOUyA9IDIwNDg7IC8vIDB4ODAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfQUxMID0gMTMxMDcyOyAvLyAweDIwMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfREVGQVVMVF9PTkxZID0gNjU1MzY7IC8vIDB4MTAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTID0gNTEyOyAvLyAweDIwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyA9IDMyNzY4OyAvLyAweDgwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFID0gNTI0Mjg4OyAvLyAweDgwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSA9IDc4NjQzMjsgLy8gMHhjMDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRSA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX1NZU1RFTV9PTkxZID0gMTA0ODU3NjsgLy8gMHgxMDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDgxOTI7IC8vIDB4MjAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBNQVhJTVVNX1ZFUklGSUNBVElPTl9USU1FT1VUID0gMzYwMDAwMEw7IC8vIDB4MzZlZTgwTAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUk1JU1NJT05fREVOSUVEID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0dSQU5URUQgPSAwOyAvLyAweDAKQEAgLTk5NjgsNiArMTAwMzEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRRdWFudGl0eVN0cmluZyhpbnQsIGludCwgamF2YS5sYW5nLk9iamVjdC4uLikgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRRdWFudGl0eVN0cmluZyhpbnQsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRRdWFudGl0eVRleHQoaW50LCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5Mb2NhbGUgZ2V0UmVzb2x2ZWRMb2NhbGUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UmVzb3VyY2VFbnRyeU5hbWUoaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFJlc291cmNlTmFtZShpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UmVzb3VyY2VQYWNrYWdlTmFtZShpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTEwNTk5LDYgKzEwNjYzLDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VmVyc2lvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZShqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlcywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKTsKICAgICBtZXRob2QgcHVibGljIGludCB1cGRhdGVXaXRoT25Db25mbGljdChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlcywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB2YWxpZGF0ZVNxbChqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4geWllbGRJZkNvbnRlbmRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiB5aWVsZElmQ29udGVuZGVkU2FmZWx5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHlpZWxkSWZDb250ZW5kZWRTYWZlbHkobG9uZyk7CkBAIC0xMDgzMyw3ICsxMDg5OCw3IEBACiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBzdGF0dXNDb2RlOwogICB9CiAKLSAgcHVibGljIGNsYXNzIERybU1hbmFnZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCBpbXBsZW1lbnRzIGphdmEubGFuZy5BdXRvQ2xvc2VhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBEcm1NYW5hZ2VyQ2xpZW50KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUluZm8gYWNxdWlyZURybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGFjcXVpcmVSaWdodHMoYW5kcm9pZC5kcm0uRHJtSW5mb1JlcXVlc3QpOwpAQCAtMTA4NDMsNiArMTA5MDgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhhbmRyb2lkLm5ldC5VcmksIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1Db252ZXJ0ZWRTdGF0dXMgY2xvc2VDb252ZXJ0U2Vzc2lvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtQ29udmVydGVkU3RhdHVzIGNvbnZlcnREYXRhKGludCwgYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRBdmFpbGFibGVEcm1FbmdpbmVzKCk7CkBAIC0xMDg1Niw3ICsxMDkyMiw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE9yaWdpbmFsTWltZVR5cGUoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGludCBvcGVuQ29udmVydFNlc3Npb24oamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcHJvY2Vzc0RybUluZm8oYW5kcm9pZC5kcm0uRHJtSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlQWxsUmlnaHRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlUmlnaHRzKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZVJpZ2h0cyhhbmRyb2lkLm5ldC5VcmkpOwpAQCAtMTEyNjAsMTQgKzExMzI2LDE0IEBACiAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgewogICAgIGN0b3IgcHVibGljIEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0Q2FuY2VsRGVjb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgcmVxdWVzdENhbmNlbERlY29kZSgpOwogICAgIGZpZWxkIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCBpbkJpdG1hcDsKICAgICBmaWVsZCBwdWJsaWMgaW50IGluRGVuc2l0eTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkRpdGhlcjsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluRGl0aGVyOwogICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5JbnB1dFNoYXJlYWJsZTsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbkp1c3REZWNvZGVCb3VuZHM7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5NdXRhYmxlOwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZDsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAuQ29uZmlnIGluUHJlZmVycmVkQ29uZmlnOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluUHJlbXVsdGlwbGllZDsKICAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluUHVyZ2VhYmxlOwpAQCAtMTEyNzYsNyArMTEzNDIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBpbnQgaW5TY3JlZW5EZW5zaXR5OwogICAgIGZpZWxkIHB1YmxpYyBpbnQgaW5UYXJnZXREZW5zaXR5OwogICAgIGZpZWxkIHB1YmxpYyBieXRlW10gaW5UZW1wU3RvcmFnZTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBtQ2FuY2VsOworICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gbUNhbmNlbDsKICAgICBmaWVsZCBwdWJsaWMgaW50IG91dEhlaWdodDsKICAgICBmaWVsZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBvdXRNaW1lVHlwZTsKICAgICBmaWVsZCBwdWJsaWMgaW50IG91dFdpZHRoOwpAQCAtMTI3MTUsNiArMTI3ODEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB1bnNjaGVkdWxlRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSwgamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQURESU5HX01PREVfTkVTVCA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9TVEFDSyA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOREVGSU5FRF9JTlNFVCA9IC0yMTQ3NDgzNjQ4OyAvLyAweDgwMDAwMDAwCiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTGV2ZWxMaXN0RHJhd2FibGUgZXh0ZW5kcyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlQ29udGFpbmVyIHsKQEAgLTE4MjM2LDcgKzE4MzAzLDYgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldENhbm9uaWNhbElEKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW5bXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RFNUU2F2aW5ncygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUgZ2V0RGVmYXVsdCgpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGludCBnZXREZWZhdWx0VGltZVpvbmVUeXBlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKGphdmEudXRpbC5Mb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXREaXNwbGF5TmFtZShhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwpAQCAtMTgyNjAsOCArMTgzMjYsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpbkRheWxpZ2h0VGltZShqYXZhLnV0aWwuRGF0ZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRnJvemVuKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9ic2VydmVzRGF5bGlnaHRUaW1lKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlRpbWVab25lKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0VGltZVpvbmVUeXBlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldElEKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRSYXdPZmZzZXQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gdXNlRGF5bGlnaHRUaW1lKCk7CkBAIC0xODI3NCw4ICsxODMzOCw2IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfQ09NTU9OTFlfVVNFRCA9IDY7IC8vIDB4NgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0dFTkVSSUMgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9HTVQgPSA0OyAvLyAweDQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FWk9ORV9JQ1UgPSAwOyAvLyAweDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FWk9ORV9KREsgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUgVU5LTk9XTl9aT05FOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBVTktOT1dOX1pPTkVfSUQgPSAiRXRjL1Vua25vd24iOwogICB9CkBAIC0xODM3MSw4ICsxODQzMyw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRWYXJpYW50KGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1JpZ2h0VG9MZWZ0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlIG1pbmltaXplU3VidGFncyhhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZS5DYXRlZ29yeSwgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSBzZXRLZXl3b3JkVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBzZXRLZXl3b3JkVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvTGFuZ3VhZ2VUYWcoKTsKQEAgLTIwNzM3LDYgKzIwNzk3LDcgQEAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBNZWRpYVJvdXRlci5Sb3V0ZUluZm8gewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUNhdGVnb3J5IGdldENhdGVnb3J5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldERlc2NyaXB0aW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGV2aWNlVHlwZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS5NZWRpYVJvdXRlci5Sb3V0ZUdyb3VwIGdldEdyb3VwKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEljb25EcmF3YWJsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXROYW1lKCk7CkBAIC0yMDc1NSw2ICsyMDgxNiwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0U2V0Vm9sdW1lKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlcXVlc3RVcGRhdGVWb2x1bWUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGFnKGphdmEubGFuZy5PYmplY3QpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX0JMVUVUT09USCA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX1NQRUFLRVIgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9UViA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX1VOS05PV04gPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19UWVBFX0xPQ0FMID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVFlQRV9SRU1PVEUgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19WT0xVTUVfRklYRUQgPSAwOyAvLyAweDAKQEAgLTIyMzYxLDYgKzIyNDI2LDI0IEBACiAgICAgY3RvciBwdWJsaWMgTXRwQ29uc3RhbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fic3RyYWN0T2JqZWN0KGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVNTT0NJQVRJT05fVFlQRV9HRU5FUklDX0ZPTERFUiA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0NBTkNFTF9UUkFOU0FDVElPTiA9IDE2Mzg1OyAvLyAweDQwMDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQVBUVVJFX0NPTVBMRVRFID0gMTYzOTc7IC8vIDB4NDAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9JTkZPX0NIQU5HRUQgPSAxNjM5MjsgLy8gMHg0MDA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1BST1BfQ0hBTkdFRCA9IDE2MzkwOyAvLyAweDQwMDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfUkVTRVQgPSAxNjM5NTsgLy8gMHg0MDBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX0FEREVEID0gMTYzODY7IC8vIDB4NDAwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9JTkZPX0NIQU5HRUQgPSAxNjM5MTsgLy8gMHg0MDA3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfQ0hBTkdFRCA9IDUxMjAxOyAvLyAweGM4MDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUFJPUF9ERVNDX0NIQU5HRUQgPSA1MTIwMjsgLy8gMHhjODAyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFRkVSRU5DRVNfQ0hBTkdFRCA9IDUxMjAzOyAvLyAweGM4MDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUkVNT1ZFRCA9IDE2Mzg3OyAvLyAweDQwMDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9SRVFVRVNUX09CSkVDVF9UUkFOU0ZFUiA9IDE2MzkzOyAvLyAweDQwMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SQUdFX0lORk9fQ0hBTkdFRCA9IDE2Mzk2OyAvLyAweDQwMGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9BRERFRCA9IDE2Mzg4OyAvLyAweDQwMDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9GVUxMID0gMTYzOTQ7IC8vIDB4NDAwYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NUT1JFX1JFTU9WRUQgPSAxNjM4OTsgLy8gMHg0MDA1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfVU5ERUZJTkVEID0gMTYzODQ7IC8vIDB4NDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOUkVQT1JURURfU1RBVFVTID0gMTYzOTg7IC8vIDB4NDAwZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF8zR1BfQ09OVEFJTkVSID0gNDc0OTI7IC8vIDB4Yjk4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9BQUMgPSA0NzM2MzsgLy8gMHhiOTAzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX0FCU1RSQUNUX0FVRElPX0FMQlVNID0gNDc2MTk7IC8vIDB4YmEwMwpAQCAtMjI0MTcsNiArMjI1MDAsNDEgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfV01WID0gNDc0ODk7IC8vIDB4Yjk4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9XUExfUExBWUxJU1QgPSA0NzYzMjsgLy8gMHhiYTEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX1hNTF9ET0NVTUVOVCA9IDQ3NzQ2OyAvLyAweGJhODIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fQ0xPU0VfU0VTU0lPTiA9IDQwOTk7IC8vIDB4MTAwMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9DT1BZX09CSkVDVCA9IDQxMjI7IC8vIDB4MTAxYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9ERUxFVEVfT0JKRUNUID0gNDEwNzsgLy8gMHgxMDBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0ZPUk1BVF9TVE9SRSA9IDQxMTE7IC8vIDB4MTAwZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfREVWSUNFX0lORk8gPSA0MDk3OyAvLyAweDEwMDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9QUk9QX0RFU0MgPSA0MTE2OyAvLyAweDEwMTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9QUk9QX1ZBTFVFID0gNDExNzsgLy8gMHgxMDE1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9OVU1fT0JKRUNUUyA9IDQxMDI7IC8vIDB4MTAwNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUID0gNDEwNTsgLy8gMHgxMDA5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfSEFORExFUyA9IDQxMDM7IC8vIDB4MTAwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX0lORk8gPSA0MTA0OyAvLyAweDEwMDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QU19TVVBQT1JURUQgPSAzODkxMzsgLy8gMHg5ODAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUFJPUF9ERVNDID0gMzg5MTQ7IC8vIDB4OTgwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX1BST1BfVkFMVUUgPSAzODkxNTsgLy8gMHg5ODAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUkVGRVJFTkNFUyA9IDM4OTI4OyAvLyAweDk4MTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX1BBUlRJQUxfT0JKRUNUID0gNDEyMzsgLy8gMHgxMDFiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lORk8gPSA0MTAxOyAvLyAweDEwMDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX1NUT1JBR0VfSV9EUyA9IDQxMDA7IC8vIDB4MTAwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfVEhVTUIgPSA0MTA2OyAvLyAweDEwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fSU5JVElBVEVfQ0FQVFVSRSA9IDQxMTA7IC8vIDB4MTAwZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9JTklUSUFURV9PUEVOX0NBUFRVUkUgPSA0MTI0OyAvLyAweDEwMWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fTU9WRV9PQkpFQ1QgPSA0MTIxOyAvLyAweDEwMTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fT1BFTl9TRVNTSU9OID0gNDA5ODsgLy8gMHgxMDAyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1BPV0VSX0RPV04gPSA0MTE1OyAvLyAweDEwMTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fUkVTRVRfREVWSUNFID0gNDExMjsgLy8gMHgxMDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1JFU0VUX0RFVklDRV9QUk9QX1ZBTFVFID0gNDExOTsgLy8gMHgxMDE3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFTEZfVEVTVCA9IDQxMTM7IC8vIDB4MTAxMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRU5EX09CSkVDVCA9IDQxMDk7IC8vIDB4MTAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRU5EX09CSkVDVF9JTkZPID0gNDEwODsgLy8gMHgxMDBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDQxMTg7IC8vIDB4MTAxNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfT0JKRUNUX1BST1BfVkFMVUUgPSAzODkxNjsgLy8gMHg5ODA0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFVF9PQkpFQ1RfUFJPVEVDVElPTiA9IDQxMTQ7IC8vIDB4MTAxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfT0JKRUNUX1JFRkVSRU5DRVMgPSAzODkyOTsgLy8gMHg5ODExCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NLSVAgPSAzODk0NDsgLy8gMHg5ODIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1RFUk1JTkFURV9PUEVOX0NBUFRVUkUgPSA0MTIwOyAvLyAweDEwMTgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9URUNUSU9OX1NUQVRVU19OT05FID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPVEVDVElPTl9TVEFUVVNfTk9OX1RSQU5TRkVSQUJMRV9EQVRBID0gMzI3NzE7IC8vIDB4ODAwMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1RFQ1RJT05fU1RBVFVTX1JFQURfT05MWSA9IDMyNzY5OyAvLyAweDgwMDEKQEAgLTIyNDM0LDYgKzIyNTUyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGludFtdIGdldE9iamVjdEhhbmRsZXMoaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm10cC5NdHBPYmplY3RJbmZvIGdldE9iamVjdEluZm8oaW50KTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UGFyZW50KGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFydGlhbE9iamVjdChpbnQsIGludCwgaW50LCBieXRlW10pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRTdG9yYWdlSWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludFtdIGdldFN0b3JhZ2VJZHMoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubXRwLk10cFN0b3JhZ2VJbmZvIGdldFN0b3JhZ2VJbmZvKGludCk7CkBAIC0yMjQ0OSwzMSArMjI1NjgsMjMgQEAKICAgcHVibGljIGNsYXNzIE10cERldmljZUluZm8gewogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXRNYW51ZmFjdHVyZXIoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0TW9kZWwoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGludFtdIGdldE9wZXJhdGlvbnNTdXBwb3J0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0U2VyaWFsTnVtYmVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldFZlcnNpb24oKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBNdHBFdmVudCB7CiAgICAgY3RvciBwdWJsaWMgTXRwRXZlbnQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXREZXZpY2VQcm9wQ29kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEV2ZW50Q29kZSgpOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0NBTkNFTF9UUkFOU0FDVElPTiA9IDE2Mzg1OyAvLyAweDQwMDEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQVBUVVJFX0NPTVBMRVRFID0gMTYzOTc7IC8vIDB4NDAwZAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9JTkZPX0NIQU5HRUQgPSAxNjM5MjsgLy8gMHg0MDA4Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1BST1BfQ0hBTkdFRCA9IDE2MzkwOyAvLyAweDQwMDYKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfUkVTRVQgPSAxNjM5NTsgLy8gMHg0MDBiCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX0FEREVEID0gMTYzODY7IC8vIDB4NDAwMgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9JTkZPX0NIQU5HRUQgPSAxNjM5MTsgLy8gMHg0MDA3Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfQ0hBTkdFRCA9IDUxMjAxOyAvLyAweGM4MDEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUFJPUF9ERVNDX0NIQU5HRUQgPSA1MTIwMjsgLy8gMHhjODAyCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFRkVSRU5DRVNfQ0hBTkdFRCA9IDUxMjAzOyAvLyAweGM4MDMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUkVNT1ZFRCA9IDE2Mzg3OyAvLyAweDQwMDMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9SRVFVRVNUX09CSkVDVF9UUkFOU0ZFUiA9IDE2MzkzOyAvLyAweDQwMDkKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SQUdFX0lORk9fQ0hBTkdFRCA9IDE2Mzk2OyAvLyAweDQwMGMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9BRERFRCA9IDE2Mzg4OyAvLyAweDQwMDQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9GVUxMID0gMTYzOTQ7IC8vIDB4NDAwYQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NUT1JFX1JFTU9WRUQgPSAxNjM4OTsgLy8gMHg0MDA1Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfVU5ERUZJTkVEID0gMTYzODQ7IC8vIDB4NDAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOUkVQT1JURURfU1RBVFVTID0gMTYzOTg7IC8vIDB4NDAwZQorICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE9iamVjdEZvcm1hdENvZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRPYmplY3RIYW5kbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRPYmplY3RQcm9wQ29kZSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhcmFtZXRlcjEoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQYXJhbWV0ZXIyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyMygpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0b3JhZ2VJZCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFRyYW5zYWN0aW9uSWQoKTsKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBNdHBPYmplY3RJbmZvIHsKQEAgLTI2ODQ2LDEyICsyNjk1NywyODUgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25NZXNzYWdlKGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CiAgIH0KIAorICBwdWJsaWMgY2xhc3MgR0xFUzMyIGV4dGVuZHMgYW5kcm9pZC5vcGVuZ2wuR0xFUzMxIHsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQmxlbmRCYXJyaWVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZWkoaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRXF1YXRpb25pKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQmxlbmRGdW5jU2VwYXJhdGVpKGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQmxlbmRGdW5jaShpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQ29sb3JNYXNraShpbnQsIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4sIGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xDb3B5SW1hZ2VTdWJEYXRhKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayhhbmRyb2lkLm9wZW5nbC5HTEVTMzIuRGVidWdQcm9jKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChpbnQsIGludCwgaW50LCBpbnQsIGludFtdLCBpbnQsIGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlSW5zZXJ0KGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGlzYWJsZWkoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4KGludCwgaW50LCBpbnQsIGphdmEubmlvLkJ1ZmZlciwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4KGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEVuYWJsZWkoaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUoaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2coaW50LCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGJ5dGVbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2coaW50LCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uQnl0ZUJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZ1tdIGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgaW50W10sIGludCwgaW50W10sIGludCwgaW50W10sIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZ1tdIGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnbEdldE9iamVjdExhYmVsKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdsR2V0T2JqZWN0UHRyTGFiZWwobG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgbG9uZyBnbEdldFBvaW50ZXJ2KGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KGludCwgaW50LCBpbnQsIGZsb2F0W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtZnYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uRmxvYXRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWl2KGludCwgaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWl2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEdldG5Vbmlmb3JtdWl2KGludCwgaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2xJc0VuYWJsZWRpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsTWluU2FtcGxlU2hhZGluZyhmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE9iamVjdExhYmVsKGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xPYmplY3RQdHJMYWJlbChsb25nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUGF0Y2hQYXJhbWV0ZXJpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUG9wRGVidWdHcm91cCgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveChmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xQdXNoRGVidWdHcm91cChpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUmVhZG5QaXhlbHMoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4QnVmZmVyKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhCdWZmZXJSYW5nZShpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFN0b3JhZ2UzRE11bHRpc2FtcGxlKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGJvb2xlYW4pOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0JVRkZFUiA9IDMzNTA0OyAvLyAweDgyZTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DTEFNUF9UT19CT1JERVIgPSAzMzA2OTsgLy8gMHg4MTJkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09MT1JCVVJOID0gMzc1MzA7IC8vIDB4OTI5YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SRE9ER0UgPSAzNzUyOTsgLy8gMHg5Mjk5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTAgPSAzNzgxOTsgLy8gMHg5M2JiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NSA9IDM3ODE2OyAvLyAweDkzYjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg2ID0gMzc4MTc7IC8vIDB4OTNiOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDggPSAzNzgxODsgLy8gMHg5M2JhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTAgPSAzNzgyMDsgLy8gMHg5M2JjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTIgPSAzNzgyMTsgLy8gMHg5M2JkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0ID0gMzc4MDg7IC8vIDB4OTNiMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NCA9IDM3ODA5OyAvLyAweDkzYjEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ181eDUgPSAzNzgxMDsgLy8gMHg5M2IyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1ID0gMzc4MTE7IC8vIDB4OTNiMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NiA9IDM3ODEyOyAvLyAweDkzYjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDUgPSAzNzgxMzsgLy8gMHg5M2I1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg2ID0gMzc4MTQ7IC8vIDB4OTNiNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OCA9IDM3ODE1OyAvLyAweDkzYjcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDEwID0gMzc4NTE7IC8vIDB4OTNkYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NSA9IDM3ODQ4OyAvLyAweDkzZDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDYgPSAzNzg0OTsgLy8gMHg5M2Q5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg4ID0gMzc4NTA7IC8vIDB4OTNkYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTAgPSAzNzg1MjsgLy8gMHg5M2RjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMiA9IDM3ODUzOyAvLyAweDkzZGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzR4NCA9IDM3ODQwOyAvLyAweDkzZDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NCA9IDM3ODQxOyAvLyAweDkzZDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzV4NSA9IDM3ODQyOyAvLyAweDkzZDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NSA9IDM3ODQzOyAvLyAweDkzZDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzZ4NiA9IDM3ODQ0OyAvLyAweDkzZDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NSA9IDM3ODQ1OyAvLyAweDkzZDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4NiA9IDM3ODQ2OyAvLyAweDkzZDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzh4OCA9IDM3ODQ3OyAvLyAweDkzZDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdTID0gMzMzMTA7IC8vIDB4ODIxZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfUk9CVVNUX0FDQ0VTU19CSVQgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0xPU1QgPSAxMjg3OyAvLyAweDUwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RBUktFTiA9IDM3NTI3OyAvLyAweDkyOTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19DQUxMQkFDS19GVU5DVElPTiA9IDMzMzQ4OyAvLyAweDgyNDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNID0gMzMzNDk7IC8vIDB4ODI0NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIID0gMzMzODk7IC8vIDB4ODI2ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyA9IDM3MTg5OyAvLyAweDkxNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdFX0xFTkdUSCA9IDMzMzQ3OyAvLyAweDgyNDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19PVVRQVVQgPSAzNzYwMDsgLy8gMHg5MmUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfT1VUUFVUX1NZTkNIUk9OT1VTID0gMzMzNDY7IC8vIDB4ODI0MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggPSAzNzE5MDsgLy8gMHg5MTQ2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTE9XID0gMzcxOTI7IC8vIDB4OTE0OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSA9IDM3MTkxOyAvLyAweDkxNDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gPSAzMzM4NzsgLy8gMHg4MjZiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX0FQSSA9IDMzMzUwOyAvLyAweDgyNDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gPSAzMzM1NDsgLy8gMHg4MjRhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX09USEVSID0gMzMzNTU7IC8vIDB4ODI0YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9TSEFERVJfQ09NUElMRVIgPSAzMzM1MjsgLy8gMHg4MjQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX1RISVJEX1BBUlRZID0gMzMzNTM7IC8vIDB4ODI0OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNID0gMzMzNTE7IC8vIDB4ODI0NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiA9IDMzMzU3OyAvLyAweDgyNGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX0VSUk9SID0gMzMzNTY7IC8vIDB4ODI0YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfTUFSS0VSID0gMzMzODQ7IC8vIDB4ODI2OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfT1RIRVIgPSAzMzM2MTsgLy8gMHg4MjUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QRVJGT1JNQU5DRSA9IDMzMzYwOyAvLyAweDgyNTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BPUF9HUk9VUCA9IDMzMzg2OyAvLyAweDgyNmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BPUlRBQklMSVRZID0gMzMzNTk7IC8vIDB4ODI0ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCA9IDMzMzg1OyAvLyAweDgyNjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiA9IDMzMzU4OyAvLyAweDgyNGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ESUZGRVJFTkNFID0gMzc1MzQ7IC8vIDB4OTI5ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0VYQ0xVU0lPTiA9IDM3NTM2OyAvLyAweDkyYTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GSVJTVF9WRVJURVhfQ09OVkVOVElPTiA9IDM2NDI5OyAvLyAweDhlNGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFDVElPTkFMX0VWRU4gPSAzNjQ3NjsgLy8gMHg4ZTdjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBQ1RJT05BTF9PREQgPSAzNjQ3NTsgLy8gMHg4ZTdiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVRfQklUUyA9IDM2NDQ1OyAvLyAweDhlNWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0xBWUVSRUQgPSAzNjI2MzsgLy8gMHg4ZGE3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfREVGQVVMVF9MQVlFUlMgPSAzNzY1MDsgLy8gMHg5MzEyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9MQVlFUl9UQVJHRVRTID0gMzYyNjQ7IC8vIDB4OGRhOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX0lOUFVUX1RZUEUgPSAzNTA5NTsgLy8gMHg4OTE3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfT1VUUFVUX1RZUEUgPSAzNTA5NjsgLy8gMHg4OTE4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSID0gMzYzMTM7IC8vIDB4OGRkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUl9CSVQgPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgPSAzNDk0MzsgLy8gMHg4ODdmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfVkVSVElDRVNfT1VUID0gMzUwOTQ7IC8vIDB4ODkxNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dVSUxUWV9DT05URVhUX1JFU0VUID0gMzMzNjM7IC8vIDB4ODI1MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hBUkRMSUdIVCA9IDM3NTMxOyAvLyAweDkyOWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IU0xfQ09MT1IgPSAzNzU1MTsgLy8gMHg5MmFmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0hVRSA9IDM3NTQ5OyAvLyAweDkyYWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IU0xfTFVNSU5PU0lUWSA9IDM3NTUyOyAvLyAweDkyYjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IU0xfU0FUVVJBVElPTiA9IDM3NTUwOyAvLyAweDkyYWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTUFHRV9CVUZGRVIgPSAzNjk0NTsgLy8gMHg5MDUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk0ODsgLy8gMHg5MDU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5OT0NFTlRfQ09OVEVYVF9SRVNFVCA9IDMzMzY0OyAvLyAweDgyNTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfSU1BR0VfQlVGRkVSID0gMzY5NTY7IC8vIDB4OTA1YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTU5OyAvLyAweDkwNWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMyOyAvLyAweDkxMGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfU0FNUExFUl9CVUZGRVIgPSAzNjMwNDsgLy8gMHg4ZGQwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3ODsgLy8gMHg5MDBlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSVNPTElORVMgPSAzNjQ3NDsgLy8gMHg4ZTdhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSVNfUEVSX1BBVENIID0gMzc2MDc7IC8vIDB4OTJlNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBU1RfVkVSVEVYX0NPTlZFTlRJT04gPSAzNjQzMDsgLy8gMHg4ZTRlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTEFZRVJfUFJPVk9LSU5HX1ZFUlRFWCA9IDMzMzc0OyAvLyAweDgyNWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSUdIVEVOID0gMzc1Mjg7IC8vIDB4OTI5OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVTX0FESkFDRU5DWSA9IDEwOyAvLyAweGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSU5FX1NUUklQX0FESkFDRU5DWSA9IDExOyAvLyAweGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVQgPSAzMzM2MjsgLy8gMHg4MjUyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX0dFT01FVFJZX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM1Mzc4OyAvLyAweDhhMzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfQ09NQklORURfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2MzgyOyAvLyAweDhlMWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfQ09NQklORURfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2MzgzOyAvLyAweDhlMWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQVEggPSAzMzM4ODsgLy8gMHg4MjZjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyA9IDM3MTg4OyAvLyAweDkxNDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfREVCVUdfTUVTU0FHRV9MRU5HVEggPSAzNzE4NzsgLy8gMHg5MTQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUID0gMzY0NDQ7IC8vIDB4OGU1YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFNRUJVRkZFUl9MQVlFUlMgPSAzNzY1NTsgLy8gMHg5MzE3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg5OyAvLyAweDkyZDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfQVRPTUlDX0NPVU5URVJfQlVGRkVSUyA9IDM3NTgzOyAvLyAweDkyY2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfSU1BR0VfVU5JRk9STVMgPSAzNzA2OTsgLy8gMHg5MGNkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0lOUFVUX0NPTVBPTkVOVFMgPSAzNzE1NTsgLy8gMHg5MTIzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX09VVFBVVF9DT01QT05FTlRTID0gMzcxNTY7IC8vIDB4OTEyNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfVkVSVElDRVMgPSAzNjMyMDsgLy8gMHg4ZGUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OUyA9IDM2NDQyOyAvLyAweDhlNWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfU0hBREVSX1NUT1JBR0VfQkxPQ0tTID0gMzcwNzk7IC8vIDB4OTBkNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzU4ODE7IC8vIDB4OGMyOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2MzIxOyAvLyAweDhkZTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVU5JRk9STV9CTE9DS1MgPSAzNTM3MjsgLy8gMHg4YTJjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2MzE5OyAvLyAweDhkZGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfTEFCRUxfTEVOR1RIID0gMzM1MTI7IC8vIDB4ODJlOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9QQVRDSF9WRVJUSUNFUyA9IDM2NDc3OyAvLyAweDhlN2QKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg3OyAvLyAweDkyZDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MTsgLy8gMHg5MmNkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9JTUFHRV9VTklGT1JNUyA9IDM3MDY3OyAvLyAweDkwY2IKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX0lOUFVUX0NPTVBPTkVOVFMgPSAzNDkyNDsgLy8gMHg4ODZjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDgzOyAvLyAweDhlODMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDgwOyAvLyAweDkwZDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNjQ4MTsgLy8gMHg4ZTgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDg1OyAvLyAweDhlODUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQkxPQ0tTID0gMzY0ODk7IC8vIDB4OGU4OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTID0gMzY0Nzk7IC8vIDB4OGU3ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJTID0gMzc1ODg7IC8vIDB4OTJkNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJfQlVGRkVSUyA9IDM3NTgyOyAvLyAweDkyY2UKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0lNQUdFX1VOSUZPUk1TID0gMzcwNjg7IC8vIDB4OTBjYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU5QVVRfQ09NUE9ORU5UUyA9IDM0OTI1OyAvLyAweDg4NmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX09VVFBVVF9DT01QT05FTlRTID0gMzY0ODY7IC8vIDB4OGU4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fU0hBREVSX1NUT1JBR0VfQkxPQ0tTID0gMzcwODE7IC8vIDB4OTBkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM2NDgyOyAvLyAweDhlODIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQkxPQ0tTID0gMzY0OTA7IC8vIDB4OGU4YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTID0gMzY0ODA7IC8vIDB4OGU4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0dFTl9MRVZFTCA9IDM2NDc4OyAvLyAweDhlN2UKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19QQVRDSF9DT01QT05FTlRTID0gMzY0ODQ7IC8vIDB4OGU4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVhUVVJFX0JVRkZFUl9TSVpFID0gMzU4ODM7IC8vIDB4OGMyYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCA9IDM2NDQzOyAvLyAweDhlNWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NSU5fU0FNUExFX1NIQURJTkdfVkFMVUUgPSAzNTg5NTsgLy8gMHg4YzM3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElQTFkgPSAzNzUyNDsgLy8gMHg5Mjk0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9HUkFOVUxBUklUWSA9IDM3NzYyOyAvLyAweDkzODIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NVUxUSVNBTVBMRV9MSU5FX1dJRFRIX1JBTkdFID0gMzc3NjE7IC8vIDB4OTM4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX05PX1JFU0VUX05PVElGSUNBVElPTiA9IDMzMzc3OyAvLyAweDgyNjEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9PVkVSTEFZID0gMzc1MjY7IC8vIDB4OTI5NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIRVMgPSAxNDsgLy8gMHhlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUEFUQ0hfVkVSVElDRVMgPSAzNjQ2NjsgLy8gMHg4ZTcyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFU19HRU5FUkFURUQgPSAzNTk3NTsgLy8gMHg4Yzg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFX0JPVU5ESU5HX0JPWCA9IDM3NTY2OyAvLyAweDkyYmUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QUklNSVRJVkVfUkVTVEFSVF9GT1JfUEFUQ0hFU19TVVBQT1JURUQgPSAzMzMxMzsgLy8gMHg4MjIxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJPR1JBTSA9IDMzNTA2OyAvLyAweDgyZTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QUk9HUkFNX1BJUEVMSU5FID0gMzM1MDg7IC8vIDB4ODJlNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVQURTID0gNzsgLy8gMHg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUVVFUlkgPSAzMzUwNzsgLy8gMHg4MmUzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVGRVJFTkNFRF9CWV9HRU9NRVRSWV9TSEFERVIgPSAzNzY0MTsgLy8gMHg5MzA5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVGRVJFTkNFRF9CWV9URVNTX0NPTlRST0xfU0hBREVSID0gMzc2Mzk7IC8vIDB4OTMwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19FVkFMVUFUSU9OX1NIQURFUiA9IDM3NjQwOyAvLyAweDkzMDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1kgPSAzMzM2NjsgLy8gMHg4MjU2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUiA9IDMzNTEwOyAvLyAweDgyZTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMzE7IC8vIDB4OTEwYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQlVGRkVSID0gMzYyOTA7IC8vIDB4OGRjMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3NjsgLy8gMHg5MDBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl9DVUJFX01BUF9BUlJBWV9TSEFET1cgPSAzNjg3NzsgLy8gMHg5MDBkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFX1NIQURJTkcgPSAzNTg5NDsgLy8gMHg4YzM2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0NSRUVOID0gMzc1MjU7IC8vIDB4OTI5NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NIQURFUiA9IDMzNTA1OyAvLyAweDgyZTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TT0ZUTElHSFQgPSAzNzUzMjsgLy8gMHg5MjljCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU1RBQ0tfT1ZFUkZMT1cgPSAxMjgzOyAvLyAweDUwMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX1VOREVSRkxPVyA9IDEyODQ7IC8vIDB4NTA0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX09VVFBVVF9WRVJUSUNFUyA9IDM2NDY5OyAvLyAweDhlNzUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfU0hBREVSID0gMzY0ODg7IC8vIDB4OGU4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9TSEFERVJfQklUID0gODsgLy8gMHg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUiA9IDM2NDg3OyAvLyAweDhlODcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0VWQUxVQVRJT05fU0hBREVSX0JJVCA9IDE2OyAvLyAweDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fTU9ERSA9IDM2NDcwOyAvLyAweDhlNzYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9QT0lOVF9NT0RFID0gMzY0NzM7IC8vIDB4OGU3OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1NQQUNJTkcgPSAzNjQ3MTsgLy8gMHg4ZTc3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fVkVSVEVYX09SREVSID0gMzY0NzI7IC8vIDB4OGU3OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEyMjsgLy8gMHg5MTAyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CSU5ESU5HXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMjU7IC8vIDB4OTEwNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19CVUZGRVIgPSAzNTg4NDsgLy8gMHg4YzJjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQX0FSUkFZID0gMzY4NzQ7IC8vIDB4OTAwYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SID0gNDEwMDsgLy8gMHgxMDA0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVIgPSAzNTg4MjsgLy8gMHg4YzJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfQklORElORyA9IDM1ODgyOyAvLyAweDhjMmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9EQVRBX1NUT1JFX0JJTkRJTkcgPSAzNTg4NTsgLy8gMHg4YzJkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfT0ZGU0VUID0gMzcyNzc7IC8vIDB4OTE5ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVF9BTElHTk1FTlQgPSAzNzI3OTsgLy8gMHg5MTlmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfU0laRSA9IDM3Mjc4OyAvLyAweDkxOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0NVQkVfTUFQX0FSUkFZID0gMzY4NzM7IC8vIDB4OTAwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFU19BREpBQ0VOQ1kgPSAxMjsgLy8gMHhjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVFJJQU5HTEVfU1RSSVBfQURKQUNFTkNZID0gMTM7IC8vIDB4ZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOREVGSU5FRF9WRVJURVggPSAzMzM3NjsgLy8gMHg4MjYwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5LTk9XTl9DT05URVhUX1JFU0VUID0gMzMzNjU7IC8vIDB4ODI1NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9CVUZGRVIgPSAzNjk2NzsgLy8gMHg5MDY3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NzA7IC8vIDB4OTA2YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMzM7IC8vIDB4OTEwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0JVRkZFUiA9IDM2MzEyOyAvLyAweDhkZDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFX01BUF9BUlJBWSA9IDM2ODc5OyAvLyAweDkwMGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9WRVJURVhfQVJSQVkgPSAzMjg4NDsgLy8gMHg4MDc0CisgIH0KKworICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBHTEVTMzIuRGVidWdQcm9jIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25NZXNzYWdlKGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgIH0KKwogICBwdWJsaWMgY2xhc3MgR0xFeGNlcHRpb24gZXh0ZW5kcyBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbiB7CiAgICAgY3RvciBwdWJsaWMgR0xFeGNlcHRpb24oaW50KTsKICAgICBjdG9yIHB1YmxpYyBHTEV4Y2VwdGlvbihpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKLSAgcHVibGljIGNsYXNzIEdMU3VyZmFjZVZpZXcgZXh0ZW5kcyBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXcgaW1wbGVtZW50cyBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlci5DYWxsYmFjayB7CisgIHB1YmxpYyBjbGFzcyBHTFN1cmZhY2VWaWV3IGV4dGVuZHMgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3IGltcGxlbWVudHMgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2syIHsKICAgICBjdG9yIHB1YmxpYyBHTFN1cmZhY2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHB1YmxpYyBHTFN1cmZhY2VWaWV3KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREZWJ1Z0ZsYWdzKCk7CkBAIC0yNjg3NSw2ICsyNzI1OSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc3VyZmFjZVJlZHJhd05lZWRlZChhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcik7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfQ0hFQ0tfR0xfRVJST1IgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUJVR19MT0dfR0xfQ0FMTFMgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRU5ERVJNT0RFX0NPTlRJTlVPVVNMWSA9IDE7IC8vIDB4MQpAQCAtMjgwOTYsOSArMjg0ODEsMTMgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNTeXN0ZW1Vc2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVXNlckFHb2F0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVXNlclJ1bm5pbmcoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZExvY2tlZChhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kTG9ja2VkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZExvY2tlZChhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRVbmxvY2tlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRVbmxvY2tlZChhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nT3JTdG9wcGluZyhhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJVbmxvY2tlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJVbmxvY2tlZChhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHNldFJlc3RyaWN0aW9uc0NoYWxsZW5nZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzZXRVc2VyUmVzdHJpY3Rpb24oamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc2V0VXNlclJlc3RyaWN0aW9ucyhhbmRyb2lkLm9zLkJ1bmRsZSk7CkBAIC0yODExNiw2ICsyODUwNSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0NPTkZJR19XSUZJID0gIm5vX2NvbmZpZ193aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfQ1JFQVRFX1dJTkRPV1MgPSAibm9fY3JlYXRlX3dpbmRvd3MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19DUk9TU19QUk9GSUxFX0NPUFlfUEFTVEUgPSAibm9fY3Jvc3NfcHJvZmlsZV9jb3B5X3Bhc3RlIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfREFUQV9ST0FNSU5HID0gIm5vX2RhdGFfcm9hbWluZyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0RFQlVHR0lOR19GRUFUVVJFUyA9ICJub19kZWJ1Z2dpbmdfZmVhdHVyZXMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19GQUNUT1JZX1JFU0VUID0gIm5vX2ZhY3RvcnlfcmVzZXQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19GVU4gPSAibm9fZnVuIjsKQEAgLTI4ODYxLDYgKzI5MjUxLDkgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8gYnVpbGQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRDYXBhYmlsaXRpZXMoYW5kcm9pZC5wcmludC5QcmludGVyQ2FwYWJpbGl0aWVzSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRJY29uUmVzb3VyY2VJZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEluZm9JbnRlbnQoYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRTdGF0dXMoaW50KTsKICAgfQpAQCAtMjg4ODEsNiArMjkyNzQsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50c2VydmljZSB7CiAKKyAgcHVibGljIGNsYXNzIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sgeworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbik7CisgIH0KKwogICBwdWJsaWMgZmluYWwgY2xhc3MgUHJpbnREb2N1bWVudCB7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yIGdldERhdGEoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnREb2N1bWVudEluZm8gZ2V0SW5mbygpOwpAQCAtMjg5MzYsNiArMjkzMzMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0Rlc3Ryb3llZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1ByaW50ZXJEaXNjb3ZlcnlTdGFydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRGVzdHJveSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlcXVlc3RDdXN0b21QcmludGVySWNvbihhbmRyb2lkLnByaW50LlByaW50ZXJJZCwgYW5kcm9pZC5wcmludHNlcnZpY2UuQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyRGlzY292ZXJ5KGphdmEudXRpbC5MaXN0PGFuZHJvaWQucHJpbnQuUHJpbnRlcklkPik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhhbmRyb2lkLnByaW50LlByaW50ZXJJZCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJEaXNjb3ZlcnkoKTsKQEAgLTI5MzA0LDYgKzI5NzAyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VPQ09ERURfTE9DQVRJT04gPSAiZ2VvY29kZWRfbG9jYXRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09NSU5HX1RZUEUgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTElNSVRfUEFSQU1fS0VZID0gImxpbWl0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVNTRURfVFlQRSA9IDM7IC8vIDB4MwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBORVcgPSAibmV3IjsKQEAgLTMwNDc0LDcgKzMwODczLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX01JTUVfVFlQRSA9ICJtaW1lX3R5cGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fU0laRSA9ICJfc2l6ZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9TVU1NQVJZID0gInN1bW1hcnkiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVJDSElWRSA9IDIwNDg7IC8vIDB4ODAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BUkNISVZFID0gMTAyNDsgLy8gMHg0MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RJUl9QUkVGRVJTX0dSSUQgPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRElSX1BSRUZFUlNfTEFTVF9NT0RJRklFRCA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19ESVJfU1VQUE9SVFNfQ1JFQVRFID0gODsgLy8gMHg4CkBAIC0zMDQ4Myw5ICszMDg4Miw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19NT1ZFID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfUkVOQU1FID0gNjQ7IC8vIDB4NDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1RIVU1CTkFJTCA9IDE7IC8vIDB4MQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfVFlQRURfRE9DVU1FTlQgPSA1MTI7IC8vIDB4MjAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19XUklURSA9IDI7IC8vIDB4MgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfVklSVFVBTF9ET0NVTUVOVCA9IDEwMjQ7IC8vIDB4NDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19WSVJUVUFMX0RPQ1VNRU5UID0gNTEyOyAvLyAweDIwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBNSU1FX1RZUEVfRElSID0gInZuZC5hbmRyb2lkLmRvY3VtZW50L2RpcmVjdG9yeSI7CiAgIH0KIApAQCAtMzA5MTIsNiArMzEzMTAsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9BTExfQVBQTElDQVRJT05TX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUFOQUdFX0FMTF9BUFBMSUNBVElPTlNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0FQUExJQ0FUSU9OU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9BUFBMSUNBVElPTlNfU0VUVElOR1MiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0RFRkFVTFRfQVBQU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX09WRVJMQVlfUEVSTUlTU0lPTiA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfT1ZFUkxBWV9QRVJNSVNTSU9OIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9XUklURV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfV1JJVEVfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUVNT1JZX0NBUkRfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NRU1PUllfQ0FSRF9TRVRUSU5HUyI7CkBAIC0zMDkyOCw2ICszMTMyNyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TRUFSQ0hfU0VUVElOR1MgPSAiYW5kcm9pZC5zZWFyY2guYWN0aW9uLlNFQVJDSF9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TRUNVUklUWV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNFQ1VSSVRZX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuU0VUVElOR1MiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU0hPV19BRE1JTl9TVVBQT1JUX0RFVEFJTFMgPSAiYW5kcm9pZC5zZXR0aW5ncy5TSE9XX0FETUlOX1NVUFBPUlRfREVUQUlMUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TSE9XX1JFR1VMQVRPUllfSU5GTyA9ICJhbmRyb2lkLnNldHRpbmdzLlNIT1dfUkVHVUxBVE9SWV9JTkZPIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NPVU5EX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuU09VTkRfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU1lOQ19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNZTkNfU0VUVElOR1MiOwpAQCAtMzA5NzQsNiArMzEzNzQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBVVRPX1RJTUUgPSAiYXV0b190aW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQVVUT19USU1FX1pPTkUgPSAiYXV0b190aW1lX3pvbmUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBCTFVFVE9PVEhfT04gPSAiYmx1ZXRvb3RoX29uIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09OVEFDVF9NRVRBREFUQV9TWU5DID0gImNvbnRhY3RfbWV0YWRhdGFfc3luYyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgQ09OVEVOVF9VUkk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERBVEFfUk9BTUlORyA9ICJkYXRhX3JvYW1pbmciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBERUJVR19BUFAgPSAiZGVidWdfYXBwIjsKQEAgLTMxNTczLDYgKzMxOTc0LDcgQEAKIAogICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFZvaWNlbWFpbENvbnRyYWN0LlN0YXR1cyBpbXBsZW1lbnRzIGFuZHJvaWQucHJvdmlkZXIuQmFzZUNvbHVtbnMgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQubmV0LlVyaSBidWlsZFNvdXJjZVVyaShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldFF1b3RhKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50SGFuZGxlLCBpbnQsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTkZJR1VSQVRJT05fU1RBVEUgPSAiY29uZmlndXJhdGlvbl9zdGF0ZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHVVJBVElPTl9TVEFURV9DQU5fQkVfQ09ORklHVVJFRCA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTkZJR1VSQVRJT05fU1RBVEVfTk9UX0NPTkZJR1VSRUQgPSAxOyAvLyAweDEKQEAgLTMxNTg5LDYgKzMxOTkxLDkgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RJRklDQVRJT05fQ0hBTk5FTF9TVEFURV9PSyA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FID0gInBob25lX2FjY291bnRfY29tcG9uZW50X25hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0lEID0gInBob25lX2FjY291bnRfaWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBRVU9UQV9PQ0NVUElFRCA9ICJxdW90YV9vY2N1cGllZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFFVT1RBX1RPVEFMID0gInF1b3RhX3RvdGFsIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVU9UQV9VTkFWQUlMQUJMRSA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFVFRJTkdTX1VSSSA9ICJzZXR0aW5nc191cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTT1VSQ0VfUEFDS0FHRSA9ICJzb3VyY2VfcGFja2FnZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFZPSUNFTUFJTF9BQ0NFU1NfVVJJID0gInZvaWNlbWFpbF9hY2Nlc3NfdXJpIjsKQEAgLTMxNjA1LDYgKzMyMDEwLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSEFTX0NPTlRFTlQgPSAiaGFzX2NvbnRlbnQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBJU19SRUFEID0gImlzX3JlYWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBJVEVNX1RZUEUgPSAidm5kLmFuZHJvaWQuY3Vyc29yLml0ZW0vdm9pY2VtYWlsIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTUlNRV9UWVBFID0gIm1pbWVfdHlwZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE5VTUJFUiA9ICJudW1iZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBQSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FID0gInN1YnNjcmlwdGlvbl9jb21wb25lbnRfbmFtZSI7CkBAIC0zMjc5Niw2ICszMzIwMiw3IEBACiAgIHB1YmxpYyBjbGFzcyBOZXR3b3JrU2VjdXJpdHlQb2xpY3kgewogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuc2VjdXJpdHkuTmV0d29ya1NlY3VyaXR5UG9saWN5IGdldEluc3RhbmNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoamF2YS5sYW5nLlN0cmluZyk7CiAgIH0KIAogfQpAQCAtMzMwOTAsNiArMzM0OTcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbk1lbnVPcGVuZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUGFuZWxDbG9zZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uUHJlcGFyZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LlZpZXcsIGFuZHJvaWQudmlldy5NZW51KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4sIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25XYWtlVXAoKTsKQEAgLTMzMjEwLDcgKzMzNjE4LDkgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fTElTVEVORVJfQ0FOQ0VMX0FMTCA9IDExOyAvLyAweGIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fUEFDS0FHRV9CQU5ORUQgPSA3OyAvLyAweDcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fUEFDS0FHRV9DSEFOR0VEID0gNTsgLy8gMHg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1RPUElDX0JBTk5FRCA9IDE0OyAvLyAweGUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fVVNFUl9TVE9QUEVEID0gNjsgLy8gMHg2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFUlZJQ0VfSU5URVJGQUNFID0gImFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZSI7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5BZGp1c3RtZW50IHsKQEAgLTMzMjM5LDcgKzMzNjQ5LDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uUmVtb3ZlZChhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLlN0YXR1c0Jhck5vdGlmaWNhdGlvbiwgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZ01hcCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RJbnRlcnJ1cHRpb25GaWx0ZXIoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcmVxdWVzdExpc3RlbmVySGludHMoaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlcXVlc3RSZWJpbmQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcmVxdWVzdFVuYmluZCgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Nob3duKGphdmEubGFuZy5TdHJpbmdbXSk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENBVEVHT1JZX1ZSX05PVElGSUNBVElPTlMgPSAiYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkudnIubm90aWZpY2F0aW9ucyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElOVF9IT1NUX0RJU0FCTEVfRUZGRUNUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVEVSUlVQVElPTl9GSUxURVJfQUxBUk1TID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJSVVBUSU9OX0ZJTFRFUl9BTEwgPSAxOyAvLyAweDEKQEAgLTMzMjQ5LDYgKzMzNjYyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04gPSA0OyAvLyAweDQKICAgfQogCiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcgewpAQCAtMzMyNjAsMTEgKzMzNjc0LDExIEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBbWJpZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG1hdGNoZXNJbnRlcnJ1cHRpb25GaWx0ZXIoKTsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0RFRkFVTFQgPSAwOyAvLyAweDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0hJR0ggPSAxOyAvLyAweDEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0xPVyA9IC0xOyAvLyAweGZmZmZmZmZmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9NQVggPSAyOyAvLyAweDIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX05PTkUgPSAtMjsgLy8gMHhmZmZmZmZmZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfREVGQVVMVCA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfSElHSCA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTE9XID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9NQVggPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX05PTkUgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX1VOU1BFQ0lGSUVEID0gLTEwMDA7IC8vIDB4ZmZmZmZjMTgKICAgfQogCkBAIC0zMzMwNSwyNSArMzM3MTksMzcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24gZ2V0SWNvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRMYWJlbCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbnRlbnREZXNjcmlwdGlvbihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SWNvbihhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMYWJlbChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3RhdGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdXBkYXRlVGlsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZT4gQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9BQ1RJVkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9JTkFDVElWRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VOQVZBSUxBQkxFID0gMDsgLy8gMHgwCiAgIH0KIAogICBwdWJsaWMgY2xhc3MgVGlsZVNlcnZpY2UgZXh0ZW5kcyBhbmRyb2lkLmFwcC5TZXJ2aWNlIHsKICAgICBjdG9yIHB1YmxpYyBUaWxlU2VydmljZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZSBnZXRRc1RpbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNMb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTZWN1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuSUJpbmRlciBvbkJpbmQoYW5kcm9pZC5jb250ZW50LkludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25TdGFydExpc3RlbmluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgb25UaWxlQWRkZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBvblRpbGVBZGRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRpbGVSZW1vdmVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXF1ZXN0TGlzdGVuaW5nU3RhdGUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2hvd0RpYWxvZyhhbmRyb2lkLmFwcC5EaWFsb2cpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzdGFydEFjdGl2aXR5QW5kQ29sbGFwc2UoYW5kcm9pZC5jb250ZW50LkludGVudCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHVubG9ja0FuZFJ1bihqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fUVNfVElMRSA9ICJhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5hY3Rpb24uUVNfVElMRSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX0FDVElWRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9QQVNTSVZFID0gMTsgLy8gMHgxCiAgIH0KIAogfQpAQCAtMzQ1ODQsNiArMzUwMTAsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX0dFTkVSSUNfQ09ORkVSRU5DRSA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX0hJR0hfREVGX0FVRElPID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XSUZJID0gODsgLy8gMHg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfV09SS19DQUxMID0gMzI7IC8vIDB4MjAKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBDYWxsQXVkaW9TdGF0ZSBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CkBAIC0zNDg5Nyw2ICszNTMyNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9QTEFDRV9FTUVSR0VOQ1lfQ0FMTFMgPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfU0lNX1NVQlNDUklQVElPTiA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfVklERU9fQ0FMTElORyA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfVklERU9fQ0FMTElOR19SRUxJRVNfT05fUFJFU0VOQ0UgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50PiBDUkVBVE9SOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9DQUxMX1NVQkpFQ1RfQ0hBUkFDVEVSX0VOQ09ESU5HID0gImFuZHJvaWQudGVsZWNvbS5leHRyYS5DQUxMX1NVQkpFQ1RfQ0hBUkFDVEVSX0VOQ09ESU5HIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfQ0FMTF9TVUJKRUNUX01BWF9MRU5HVEggPSAiYW5kcm9pZC50ZWxlY29tLmV4dHJhLkNBTExfU1VCSkVDVF9NQVhfTEVOR1RIIjsKQEAgLTM1NzI3LDYgKzM2MTU1LDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U3Vic2NyaWJlcklkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZvaWNlTWFpbEFscGhhVGFnKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZvaWNlTWFpbE51bWJlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5uZXQuVXJpIGdldFZvaWNlbWFpbFJpbmd0b25lVXJpKGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnRIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNDYXJyaWVyUHJpdmlsZWdlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNJY2NDYXJkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGljY0Nsb3NlTG9naWNhbENoYW5uZWwoaW50KTsKQEAgLTM1NzM5LDYgKzM2MTY4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNTbXNDYXBhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVHR5TW9kZVN1cHBvcnRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1ZvaWNlQ2FwYWJsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1ZvaWNlbWFpbFZpYnJhdGlvbkVuYWJsZWQoYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudEhhbmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzV29ybGRQaG9uZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBsaXN0ZW4oYW5kcm9pZC50ZWxlcGhvbnkuUGhvbmVTdGF0ZUxpc3RlbmVyLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBzZW5kRW52ZWxvcGVXaXRoU3RhdHVzKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtMzYyNTAsOCArMzY2ODAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrVXJpUGVybWlzc2lvbihhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbGVhcldhbGxwYXBlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KGFuZHJvaWQudmlldy5EaXNwbGF5KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZVBhY2thZ2VDb250ZXh0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZGF0YWJhc2VMaXN0KCk7CkBAIC0zNjMwMCw4ICszNjcyOSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1IZWlnaHQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm5ldC5VcmksIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEuaW8uRmlsZUlucHV0U3RyZWFtIG9wZW5GaWxlSW5wdXQoamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIG9wZW5GaWxlT3V0cHV0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5KTsKQEAgLTM2NDIzLDEwICszNjg1MSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREcmF3YWJsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwotICAgIG1ldGhvZCBwdWJsaWMgYnl0ZVtdIGdldEVwaGVtZXJhbENvb2tpZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbz4gZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEluc3RhbGxlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtMzY0MzUsOCArMzY4NjAsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQgZ2V0TGVhbmJhY2tMYXVuY2hJbnRlbnRGb3JQYWNrYWdlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lRm9yVWlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkcyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGludFtdIGdldFBhY2thZ2VHaWRzKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyIGdldFBhY2thZ2VJbnN0YWxsZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQYWNrYWdlVWlkKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0UGFja2FnZXNGb3JVaWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbz4gZ2V0UGFja2FnZXNIb2xkaW5nUGVybWlzc2lvbnMoamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnBtLlBlcm1pc3Npb25Hcm91cEluZm8gZ2V0UGVybWlzc2lvbkdyb3VwSW5mbyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtMzY0NTcsNyArMzY4ODQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRVc2VyQmFkZ2VkTGFiZWwoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXIgZ2V0WG1sKGphdmEubGFuZy5TdHJpbmcsIGludCwgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc1N5c3RlbUZlYXR1cmUoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRXBoZW1lcmFsQXBwbGljYXRpb24oKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNQZXJtaXNzaW9uUmV2b2tlZEJ5UG9saWN5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1NhZmVNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKGFuZHJvaWQuY29udGVudC5JbnRlbnQsIGludCk7CkBAIC0zNjQ3NSw4ICszNjkwMSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm8gcmVzb2x2ZVNlcnZpY2UoYW5kcm9pZC5jb250ZW50LkludGVudCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXBwbGljYXRpb25FbmFibGVkU2V0dGluZyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudEVuYWJsZWRTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQsIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RXBoZW1lcmFsQ29va2llKGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEluc3RhbGxlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB2ZXJpZnlQZW5kaW5nSW5zdGFsbChpbnQsIGludCk7CiAgIH0KQEAgLTM4NzA3LDcgKzM5MTMxLDkgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnV0aWwuTG9jYWxlTGlzdCBnZXRFbXB0eUxvY2FsZUxpc3QoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5Mb2NhbGUgZ2V0Rmlyc3RNYXRjaChqYXZhLmxhbmcuU3RyaW5nW10pOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxvY2FsZSBnZXRQcmltYXJ5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgaW5kZXhPZihqYXZhLnV0aWwuTG9jYWxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNFbXB0eSgpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLnV0aWwuTG9jYWxlTGlzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgc2l6ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyB0b0xhbmd1YWdlVGFncygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwpAQCAtMzg4NjUsNyArMzkyOTEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZGlnaXRzQW5kUGx1c09ubHkoamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXIpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gRE9NQUlOX05BTUU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBFTUFJTF9BRERSRVNTOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHT09EX0lSSV9DSEFSID0gImEtekEtWjAtOVx1MDBhMC1cdWQ3ZmZcdWY5MDAtXHVmZGNmXHVmZGYwLVx1ZmZlZiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgR09PRF9JUklfQ0hBUiA9ICJhLXpBLVowLTlcdTAwYTAtXHVkN2ZmXHVmOTAwLVx1ZmRjZlx1ZmRmMC1cdWZmZWYiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gSVBfQUREUkVTUzsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIFBIT05FOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBUT1BfTEVWRUxfRE9NQUlOOwpAQCAtMzkyOTYsNyArMzk3MjIsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEFjdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhIGdldENsaXBEYXRhKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ2xpcERlc2NyaXB0aW9uIGdldENsaXBEZXNjcmlwdGlvbigpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9uSG9sZGVyIGdldERyb3BQZXJtaXNzaW9uSG9sZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGdldExvY2FsU3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRYKCk7CkBAIC0zOTMxMSwxMiArMzk3MzYsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LkRyYWdFdmVudD4gQ1JFQVRPUjsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBEcm9wUGVybWlzc2lvbkhvbGRlciBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7Ci0gICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBncmFudCgpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXZva2UoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudmlldy5Ecm9wUGVybWlzc2lvbkhvbGRlcj4gQ1JFQVRPUjsKKyAgcHVibGljIGZpbmFsIGNsYXNzIERyb3BQZXJtaXNzaW9ucyB7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2UoKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBGb2N1c0ZpbmRlciB7CkBAIC0zOTk3NCw2ICs0MDM5NSwyNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdGFydFRyYWNraW5nKGFuZHJvaWQudmlldy5LZXlFdmVudCwgamF2YS5sYW5nLk9iamVjdCk7CiAgIH0KIAorICBwdWJsaWMgZmluYWwgY2xhc3MgS2V5Ym9hcmRTaG9ydGN1dEdyb3VwIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKKyAgICBjdG9yIHB1YmxpYyBLZXlib2FyZFNob3J0Y3V0R3JvdXAoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSwgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRJbmZvPik7CisgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRTaG9ydGN1dEdyb3VwKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRJdGVtKGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0SW5mbyk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRJbmZvPiBnZXRJdGVtcygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRMYWJlbCgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4gQ1JFQVRPUjsKKyAgfQorCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBLZXlib2FyZFNob3J0Y3V0SW5mbyBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CisgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRTaG9ydGN1dEluZm8oamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSwgY2hhciwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBjaGFyIGdldEJhc2VDaGFyYWN0ZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0TGFiZWwoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRNb2RpZmllcnMoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0SW5mbz4gQ1JFQVRPUjsKKyAgfQorCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMYXlvdXRJbmZsYXRlciB7CiAgICAgY3RvciBwcm90ZWN0ZWQgTGF5b3V0SW5mbGF0ZXIoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIGN0b3IgcHJvdGVjdGVkIExheW91dEluZmxhdGVyKGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlciwgYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwpAQCAtNDAyNDIsNiArNDA2ODQsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfTFRSSUdHRVIgPSAxNzsgLy8gMHgxMQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfT1JJRU5UQVRJT04gPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1BSRVNTVVJFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SRUxBVElWRV9YID0gMjc7IC8vIDB4MWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JFTEFUSVZFX1kgPSAyODsgLy8gMHgxYwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUlRSSUdHRVIgPSAxODsgLy8gMHgxMgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUlVEREVSID0gMjA7IC8vIDB4MTQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JYID0gMTI7IC8vIDB4YwpAQCAtNDAzMjgsNiArNDA3NzIsMzggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUklFTlRBVElPTl9VTktOT1dOID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgfQogCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBQb2ludGVySWNvbiBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uIGNyZWF0ZUN1c3RvbUljb24oYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAsIGZsb2F0LCBmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudmlldy5Qb2ludGVySWNvbiBnZXRTeXN0ZW1JY29uKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudmlldy5Qb2ludGVySWNvbiBsb2FkQ3VzdG9tSWNvbihhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcywgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudmlldy5Qb2ludGVySWNvbj4gQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9BTElBUyA9IDEwMTA7IC8vIDB4M2YyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQUxMX1NDUk9MTCA9IDEwMTM7IC8vIDB4M2Y1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQVJST1cgPSAxMDAwOyAvLyAweDNlOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0NFTEwgPSAxMDA2OyAvLyAweDNlZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0NPTlRFWFRfTUVOVSA9IDEwMDE7IC8vIDB4M2U5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQ09QWSA9IDEwMTE7IC8vIDB4M2YzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQ1JPU1NIQUlSID0gMTAwNzsgLy8gMHgzZWYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9ERUZBVUxUID0gMTAwMDsgLy8gMHgzZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9HUkFCID0gMTAyMDsgLy8gMHgzZmMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9HUkFCQklORyA9IDEwMjE7IC8vIDB4M2ZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfSEFORCA9IDEwMDI7IC8vIDB4M2VhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfSEVMUCA9IDEwMDM7IC8vIDB4M2ViCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfSE9SSVpPTlRBTF9ET1VCTEVfQVJST1cgPSAxMDE0OyAvLyAweDNmNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX05PX0RST1AgPSAxMDEyOyAvLyAweDNmNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX05VTEwgPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9URVhUID0gMTAwODsgLy8gMHgzZjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9UT1BfTEVGVF9ESUFHT05BTF9ET1VCTEVfQVJST1cgPSAxMDE3OyAvLyAweDNmOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1RPUF9SSUdIVF9ESUFHT05BTF9ET1VCTEVfQVJST1cgPSAxMDE2OyAvLyAweDNmOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1ZFUlRJQ0FMX0RPVUJMRV9BUlJPVyA9IDEwMTU7IC8vIDB4M2Y3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfVkVSVElDQUxfVEVYVCA9IDEwMDk7IC8vIDB4M2YxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfV0FJVCA9IDEwMDQ7IC8vIDB4M2VjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfWk9PTV9JTiA9IDEwMTg7IC8vIDB4M2ZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfWk9PTV9PVVQgPSAxMDE5OyAvLyAweDNmYgorICB9CisKICAgcHVibGljIGNsYXNzIFNjYWxlR2VzdHVyZURldGVjdG9yIHsKICAgICBjdG9yIHB1YmxpYyBTY2FsZUdlc3R1cmVEZXRlY3RvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC52aWV3LlNjYWxlR2VzdHVyZURldGVjdG9yLk9uU2NhbGVHZXN0dXJlTGlzdGVuZXIpOwogICAgIGN0b3IgcHVibGljIFNjYWxlR2VzdHVyZURldGVjdG9yKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnZpZXcuU2NhbGVHZXN0dXJlRGV0ZWN0b3IuT25TY2FsZUdlc3R1cmVMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKQEAgLTQwNjg3LDYgKzQxMTYzLDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5WaWV3UGFyZW50IGdldFBhcmVudEZvckFjY2Vzc2liaWxpdHkoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFBpdm90WCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmxvYXQgZ2V0UGl2b3RZKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24gZ2V0UG9pbnRlckljb24oYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50LCBmbG9hdCwgZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnQgZ2V0UmlnaHQoKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIGZsb2F0IGdldFJpZ2h0RmFkaW5nRWRnZVN0cmVuZ3RoKCk7CkBAIC00MDc0Myw2ICs0MTIyMCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc05lc3RlZFNjcm9sbGluZ1BhcmVudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNPbkNsaWNrTGlzdGVuZXJzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc092ZXJsYXBwaW5nUmVuZGVyaW5nKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc1BvaW50ZXJDYXB0dXJlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc1RyYW5zaWVudFN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc1dpbmRvd0ZvY3VzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXcgaW5mbGF0ZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50LCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwKTsKQEAgLTQwODY5LDYgKzQxMzQ3LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgcG9zdE9uQW5pbWF0aW9uKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHBvc3RPbkFuaW1hdGlvbkRlbGF5ZWQoamF2YS5sYW5nLlJ1bm5hYmxlLCBsb25nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVmcmVzaERyYXdhYmxlU3RhdGUoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVsZWFzZVBvaW50ZXJDYXB0dXJlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbW92ZUNhbGxiYWNrcyhqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZW1vdmVPbkF0dGFjaFN0YXRlQ2hhbmdlTGlzdGVuZXIoYW5kcm9pZC52aWV3LlZpZXcuT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlT25MYXlvdXRDaGFuZ2VMaXN0ZW5lcihhbmRyb2lkLnZpZXcuVmlldy5PbkxheW91dENoYW5nZUxpc3RlbmVyKTsKQEAgLTQwOTY5LDYgKzQxNDQ4LDggQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGFkZGluZ1JlbGF0aXZlKGludCwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBpdm90WChmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBpdm90WShmbG9hdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBvaW50ZXJDYXB0dXJlKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBvaW50ZXJJY29uKGFuZHJvaWQudmlldy5Qb2ludGVySWNvbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFByZXNzZWQoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJpZ2h0KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJvdGF0aW9uKGZsb2F0KTsKQEAgLTQxODM2LDYgKzQyMzE3LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q29udGVudFZpZXcoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q29udGVudFZpZXcoYW5kcm9pZC52aWV3LlZpZXcpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDb250ZW50VmlldyhhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREZWNvckNhcHRpb25TaGFkZShpbnQpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBzZXREZWZhdWx0V2luZG93Rm9ybWF0KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldERpbUFtb3VudChmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEVsZXZhdGlvbihmbG9hdCk7CkBAIC00MTg1Niw2ICs0MjMzOCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFDb250cm9sbGVyKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmF2aWdhdGlvbkJhckNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJlZW50ZXJUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UmVzaXppbmdDYXB0aW9uRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyKGFuZHJvaWQudmlldy5XaW5kb3cuUmVzdHJpY3RlZENhcHRpb25BcmVhTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZXR1cm5UcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hhcmVkRWxlbWVudEVudGVyVHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNoYXJlZEVsZW1lbnRFeGl0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CkBAIC00MTg4NCw2ICs0MjM2OCw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRha2VLZXlFdmVudHMoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRha2VTdXJmYWNlKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyLkNhbGxiYWNrMik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRvZ2dsZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LktleUV2ZW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0FVVE8gPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0RBUksgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0xJR0hUID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBERUZBVUxUX0ZFQVRVUkVTID0gNjU7IC8vIDB4NDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVIgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVJfT1ZFUkxBWSA9IDk7IC8vIDB4OQpAQCAtNDE5MzAsNiArNDI0MTcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBvbk1lbnVPcGVuZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uUGFuZWxDbG9zZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIG9uUHJlcGFyZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LlZpZXcsIGFuZHJvaWQudmlldy5NZW51KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4sIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25XaW5kb3dBdHRyaWJ1dGVzQ2hhbmdlZChhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMpOwpAQCAtNDE5MzgsNiArNDI0MjYsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlIG9uV2luZG93U3RhcnRpbmdBY3Rpb25Nb2RlKGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlLkNhbGxiYWNrLCBpbnQpOwogICB9CiAKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgV2luZG93LlJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25SZXN0cmljdGVkQ2FwdGlvbkFyZWFDaGFuZ2VkKGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCk7CisgIH0KKwogICBwdWJsaWMgZmluYWwgY2xhc3MgV2luZG93QW5pbWF0aW9uRnJhbWVTdGF0cyBleHRlbmRzIGFuZHJvaWQudmlldy5GcmFtZVN0YXRzIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CkBAIC00MzIwMiw3ICs0MzY5NCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEV4dHJhVmFsdWUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RXh0cmFWYWx1ZU9mKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEljb25SZXNJZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMb2NhbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TGFuZ3VhZ2VUYWcoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBnZXRMb2NhbGUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE5hbWVSZXNJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FzY2lpQ2FwYWJsZSgpOwpAQCAtNDMyMTcsNiArNDM3MTAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZSBidWlsZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldElzQXNjaWlDYXBhYmxlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldElzQXV4aWxpYXJ5KGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldExhbmd1YWdlVGFnKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldE92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGUuSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRTdWJ0eXBlRXh0cmFWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGUuSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRTdWJ0eXBlSWNvblJlc0lkKGludCk7CkBAIC00MzI4MCw3ICs0Mzc3NCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RXh0cmFWYWx1ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFeHRyYVZhbHVlT2YoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMYW5ndWFnZVRhZygpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE5hbWVSZXNJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LnRleHRzZXJ2aWNlLlNwZWxsQ2hlY2tlclN1YnR5cGU+IENSRUFUT1I7CkBAIC00MzY4Myw3ICs0NDE3OCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIHZvaWQgc2V0RW5hYmxlU21vb3RoVHJhbnNpdGlvbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RmFudGFzeUZvbnRGYW1pbHkoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0R2VvbG9jYXRpb25EYXRhYmFzZVBhdGgoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIHZvaWQgc2V0R2VvbG9jYXRpb25EYXRhYmFzZVBhdGgoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEdlb2xvY2F0aW9uRW5hYmxlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SmF2YVNjcmlwdEVuYWJsZWQoYm9vbGVhbik7CkBAIC00NDEyNSwxMiArNDQ2MjAsMTggQEAKICAgICBtZXRob2QgcHVibGljIGludCBnZXRUaHVtYk9mZnNldCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCBnZXRUaHVtYlRpbnRMaXN0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSBnZXRUaHVtYlRpbnRNb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldFRpY2tNYXJrKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IGdldFRpY2tNYXJrVGludExpc3QoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlIGdldFRpY2tNYXJrVGludE1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0S2V5UHJvZ3Jlc3NJbmNyZW1lbnQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3BsaXRUcmFjayhib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGh1bWIoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRodW1iT2Zmc2V0KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRodW1iVGludExpc3QoYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRodW1iVGludE1vZGUoYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaWNrTWFyayhhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGlja01hcmtUaW50TGlzdChhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGlja01hcmtUaW50TW9kZShhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSk7CiAgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzU3Bpbm5lciBleHRlbmRzIGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3IHsKQEAgLTQ5MDc4LDYgKzQ5NTc5LDggQEAKICAgcHVibGljIGNsYXNzIEludGVybmFsRXJyb3IgZXh0ZW5kcyBqYXZhLmxhbmcuVmlydHVhbE1hY2hpbmVFcnJvciB7CiAgICAgY3RvciBwdWJsaWMgSW50ZXJuYWxFcnJvcigpOwogICAgIGN0b3IgcHVibGljIEludGVybmFsRXJyb3IoamF2YS5sYW5nLlN0cmluZyk7CisgICAgY3RvciBwdWJsaWMgSW50ZXJuYWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKTsKKyAgICBjdG9yIHB1YmxpYyBJbnRlcm5hbEVycm9yKGphdmEubGFuZy5UaHJvd2FibGUpOwogICB9CiAKICAgcHVibGljIGNsYXNzIEludGVycnVwdGVkRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CkBAIC00OTg1MCw2ICs1MDM1Myw4IEBACiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBWaXJ0dWFsTWFjaGluZUVycm9yIGV4dGVuZHMgamF2YS5sYW5nLkVycm9yIHsKICAgICBjdG9yIHB1YmxpYyBWaXJ0dWFsTWFjaGluZUVycm9yKCk7CiAgICAgY3RvciBwdWJsaWMgVmlydHVhbE1hY2hpbmVFcnJvcihqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBjdG9yIHB1YmxpYyBWaXJ0dWFsTWFjaGluZUVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpOworICAgIGN0b3IgcHVibGljIFZpcnR1YWxNYWNoaW5lRXJyb3IoamF2YS5sYW5nLlRocm93YWJsZSk7CiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgVm9pZCB7CkBAIC01MzU5Miw2ICs1NDA5Nyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQnVpbGRlciBnZXRJbnN0YW5jZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuTm9TdWNoUHJvdmlkZXJFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQnVpbGRlciBnZXRJbnN0YW5jZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyKSB0aHJvd3MgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyIGdldFByb3ZpZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhDaGVja2VyIGdldFJldm9jYXRpb25DaGVja2VyKCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgQ2VydFBhdGhCdWlsZGVyRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5zZWN1cml0eS5HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb24gewpAQCAtNTM2MDksNiArNTQxMTUsMTMgQEAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIENlcnRQYXRoQnVpbGRlclNwaSB7CiAgICAgY3RvciBwdWJsaWMgQ2VydFBhdGhCdWlsZGVyU3BpKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhCdWlsZGVyUmVzdWx0IGVuZ2luZUJ1aWxkKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhCdWlsZGVyRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhDaGVja2VyIGVuZ2luZUdldFJldm9jYXRpb25DaGVja2VyKCk7CisgIH0KKworICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIENlcnRQYXRoQ2hlY2tlciB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNoZWNrKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZSkgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdChib29sZWFuKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0ZvcndhcmRDaGVja2luZ1N1cHBvcnRlZCgpOwogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBDZXJ0UGF0aFBhcmFtZXRlcnMgaW1wbGVtZW50cyBqYXZhLmxhbmcuQ2xvbmVhYmxlIHsKQEAgLTUzNjIzLDYgKzU0MTM2LDcgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3IgZ2V0SW5zdGFuY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5Lk5vU3VjaFByb3ZpZGVyRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvciBnZXRJbnN0YW5jZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyKSB0aHJvd3MgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyIGdldFByb3ZpZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhDaGVja2VyIGdldFJldm9jYXRpb25DaGVja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQgdmFsaWRhdGUoamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoLCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhQYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247CiAgIH0KIApAQCAtNTM2NTksNiArNTQxNzMsNyBAQAogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDZXJ0UGF0aFZhbGlkYXRvclNwaSB7CiAgICAgY3RvciBwdWJsaWMgQ2VydFBhdGhWYWxpZGF0b3JTcGkoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aENoZWNrZXIgZW5naW5lR2V0UmV2b2NhdGlvbkNoZWNrZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvclJlc3VsdCBlbmdpbmVWYWxpZGF0ZShqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGgsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsKICAgfQogCkBAIC01MzgxNyw5ICs1NDMzMiwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoIGdldENlcnRQYXRoKCk7CiAgIH0KIAotICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUEtJWENlcnRQYXRoQ2hlY2tlciBpbXBsZW1lbnRzIGphdmEubGFuZy5DbG9uZWFibGUgeworICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUEtJWENlcnRQYXRoQ2hlY2tlciBpbXBsZW1lbnRzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aENoZWNrZXIgamF2YS5sYW5nLkNsb25lYWJsZSB7CiAgICAgY3RvciBwcm90ZWN0ZWQgUEtJWENlcnRQYXRoQ2hlY2tlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjaGVjayhqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGUsIGphdmEudXRpbC5Db2xsZWN0aW9uPGphdmEubGFuZy5TdHJpbmc+KSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjaGVjayhqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGUpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGNsb25lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuU2V0PGphdmEubGFuZy5TdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgaW5pdChib29sZWFuKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOwpAQCAtNTM4NzksNiArNTQzOTUsMzAgQEAKICAgICBlbnVtX2NvbnN0YW50IHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZWFzb24gVU5SRUNPR05JWkVEX0NSSVRfRVhUOwogICB9CiAKKyAgcHVibGljIGFic3RyYWN0IGNsYXNzIFBLSVhSZXZvY2F0aW9uQ2hlY2tlciBleHRlbmRzIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYQ2VydFBhdGhDaGVja2VyIHsKKyAgICBjdG9yIHByb3RlY3RlZCBQS0lYUmV2b2NhdGlvbkNoZWNrZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEuc2VjdXJpdHkuY2VydC5FeHRlbnNpb24+IGdldE9jc3BFeHRlbnNpb25zKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLm5ldC5VUkkgZ2V0T2NzcFJlc3BvbmRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZSBnZXRPY3NwUmVzcG9uZGVyQ2VydCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLk1hcDxqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlLCBieXRlW10+IGdldE9jc3BSZXNwb25zZXMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5TZXQ8amF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24+IGdldE9wdGlvbnMoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbj4gZ2V0U29mdEZhaWxFeGNlcHRpb25zKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9jc3BFeHRlbnNpb25zKGphdmEudXRpbC5MaXN0PGphdmEuc2VjdXJpdHkuY2VydC5FeHRlbnNpb24+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T2NzcFJlc3BvbmRlcihqYXZhLm5ldC5VUkkpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPY3NwUmVzcG9uZGVyQ2VydChqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T2NzcFJlc3BvbnNlcyhqYXZhLnV0aWwuTWFwPGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGUsIGJ5dGVbXT4pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPcHRpb25zKGphdmEudXRpbC5TZXQ8amF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24+KTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiBleHRlbmRzIGphdmEubGFuZy5FbnVtIHsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiB2YWx1ZU9mKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uW10gdmFsdWVzKCk7CisgICAgZW51bV9jb25zdGFudCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIE5PX0ZBTExCQUNLOworICAgIGVudW1fY29uc3RhbnQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiBPTkxZX0VORF9FTlRJVFk7CisgICAgZW51bV9jb25zdGFudCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIFBSRUZFUl9DUkxTOworICAgIGVudW1fY29uc3RhbnQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiBTT0ZUX0ZBSUw7CisgIH0KKwogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIFBvbGljeU5vZGUgewogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkl0ZXJhdG9yPD8gZXh0ZW5kcyBqYXZhLnNlY3VyaXR5LmNlcnQuUG9saWN5Tm9kZT4gZ2V0Q2hpbGRyZW4oKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXREZXB0aCgpOwpAQCAtNTQwMzgsNiArNTQ1NzgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YXguc2VjdXJpdHkuYXV0aC54NTAwLlg1MDBQcmluY2lwYWwgZ2V0U3ViamVjdFg1MDBQcmluY2lwYWwoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJ5dGVbXSBnZXRUQlNDZXJ0aWZpY2F0ZSgpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFbmNvZGluZ0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRWZXJzaW9uKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHZlcmlmeShqYXZhLnNlY3VyaXR5LlB1YmxpY0tleSwgamF2YS5zZWN1cml0eS5Qcm92aWRlcikgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5JbnZhbGlkS2V5RXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5TaWduYXR1cmVFeGNlcHRpb247CiAgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIFg1MDlFeHRlbnNpb24gewpAQCAtNTkzNjYsOCArNTk5MDcsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ0J1ZmZlciBhcHBlbmRUYWlsKGphdmEubGFuZy5TdHJpbmdCdWZmZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGVuZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGVuZChpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBncm91cCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBncm91cChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdyb3VwQ291bnQoKTsKQEAgLTU5Mzk1LDggKzU5OTM2LDggQEAKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBQYXR0ZXJuIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm5TeW50YXhFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGZsYWdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwucmVnZXguTWF0Y2hlciBtYXRjaGVyKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKQEAgLTU5NDExLDYgKzU5OTUyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSVRFUkFMID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNVUxUSUxJTkUgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFX0NBU0UgPSA2NDsgLy8gMHg0MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSUNPREVfQ0hBUkFDVEVSX0NMQVNTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSVhfTElORVMgPSAxOyAvLyAweDEKICAgfQogCmRpZmYgLS1naXQgYS9hcGkvcmVtb3ZlZC50eHQgYi9hcGkvcmVtb3ZlZC50eHQKaW5kZXggZjEyZTYxZS4uNmI3OTYxZSAxMDA2NDQKLS0tIGEvYXBpL3JlbW92ZWQudHh0CisrKyBiL2FwaS9yZW1vdmVkLnR4dApAQCAtMTk5LDYgKzE5OSwxNSBAQAogCiB9CiAKK3BhY2thZ2UgYW5kcm9pZC50ZXN0Lm1vY2sgeworCisgIHB1YmxpYyBjbGFzcyBNb2NrUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIgeworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcsIGludCk7CisgIH0KKworfQorCiBwYWNrYWdlIGFuZHJvaWQudGV4dC5mb3JtYXQgewogCiAgIHB1YmxpYyBjbGFzcyBEYXRlRm9ybWF0IHsKZGlmZiAtLWdpdCBhL2FwaS9zeXN0ZW0tY3VycmVudC50eHQgYi9hcGkvc3lzdGVtLWN1cnJlbnQudHh0CmluZGV4IDViZjVjMjAuLmIzZDMxYmIgMTAwNjQ0Ci0tLSBhL2FwaS9zeXN0ZW0tY3VycmVudC50eHQKKysrIGIvYXBpL3N5c3RlbS1jdXJyZW50LnR4dApAQCAtOTMsNyArOTMsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBEVU1QID0gImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhQQU5EX1NUQVRVU19CQVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkVYUEFORF9TVEFUVVNfQkFSIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkFDVE9SWV9URVNUID0gImFuZHJvaWQucGVybWlzc2lvbi5GQUNUT1JZX1RFU1QiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGTEFTSExJR0hUID0gImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRk9SQ0VfQkFDSyA9ICJhbmRyb2lkLnBlcm1pc3Npb24uRk9SQ0VfQkFDSyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZPUkNFX1NUT1BfUEFDS0FHRVMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkZPUkNFX1NUT1BfUEFDS0FHRVMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfQUNDT1VOVFMgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkdFVF9BQ0NPVU5UUyI7CkBAIC0yMTUsNiArMjE0LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU1RBVFVTX0JBUiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uU1RBVFVTX0JBUiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNUT1BfQVBQX1NXSVRDSEVTID0gImFuZHJvaWQucGVybWlzc2lvbi5TVE9QX0FQUF9TV0lUQ0hFUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNZU1RFTV9BTEVSVF9XSU5ET1cgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNZU1RFTV9BTEVSVF9XSU5ET1ciOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBURVRIRVJfUFJJVklMRUdFRCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uVEVUSEVSX1BSSVZJTEVHRUQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBUUkFOU01JVF9JUiA9ICJhbmRyb2lkLnBlcm1pc3Npb24uVFJBTlNNSVRfSVIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBUVl9JTlBVVF9IQVJEV0FSRSA9ICJhbmRyb2lkLnBlcm1pc3Npb24uVFZfSU5QVVRfSEFSRFdBUkUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBVTklOU1RBTExfU0hPUlRDVVQgPSAiY29tLmFuZHJvaWQubGF1bmNoZXIucGVybWlzc2lvbi5VTklOU1RBTExfU0hPUlRDVVQiOwpAQCAtNDI5LDYgKzQyOSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FsZW5kYXJWaWV3U2hvd24gPSAxNjg0MzU5NjsgLy8gMHgxMDEwMzRjCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FsZW5kYXJWaWV3U3R5bGUgPSAxNjg0MzYxMzsgLy8gMHgxMDEwMzVkCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FuQ29udHJvbE1hZ25pZmljYXRpb24gPSAxNjg0NDA0MDsgLy8gMHgxMDEwNTA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FuUGVyZm9ybUdlc3R1cmVzID0gMTY4NDQwNDY7IC8vIDB4MTAxMDUwZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkgPSAxNjg0MzczNjsgLy8gMHgxMDEwM2Q4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyA9IDE2ODQzNzM3OyAvLyAweDEwMTAzZDkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYW5SZXF1ZXN0VG91Y2hFeHBsb3JhdGlvbk1vZGUgPSAxNjg0MzczNTsgLy8gMHgxMDEwM2Q3CkBAIC02MTgsNiArNjE5LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHBhbmRhYmxlTGlzdFZpZXdTdHlsZSA9IDE2ODQyODYzOyAvLyAweDEwMTAwNmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHBhbmRhYmxlTGlzdFZpZXdXaGl0ZVN0eWxlID0gMTY4NDM0NDY7IC8vIDB4MTAxMDJiNgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4cG9ydGVkID0gMTY4NDI3Njg7IC8vIDB4MTAxMDAxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4dGVybmFsU2VydmljZSA9IDE2ODQ0MDQ3OyAvLyAweDEwMTA1MGYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHRyYVRlbnNpb24gPSAxNjg0MzM3MTsgLy8gMHgxMDEwMjZiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXh0cmFjdE5hdGl2ZUxpYnMgPSAxNjg0NDAxMDsgLy8gMHgxMDEwNGVhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZmFjdG9yID0gMTY4NDMyMTk7IC8vIDB4MTAxMDFkMwpAQCAtODIyLDYgKzgyNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFiZWwgPSAxNjg0Mjc1MzsgLy8gMHgxMDEwMDAxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFiZWxGb3IgPSAxNjg0MzcxODsgLy8gMHgxMDEwM2M2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFiZWxUZXh0U2l6ZSA9IDE2ODQzMzE3OyAvLyAweDEwMTAyMzUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYW5ndWFnZVRhZyA9IDE2ODQ0MDQxOyAvLyAweDEwMTA1MDkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYXJnZUhlYXAgPSAxNjg0MzYxMDsgLy8gMHgxMDEwMzVhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFyZ2VTY3JlZW5zID0gMTY4NDMzOTg7IC8vIDB4MTAxMDI4NgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhcmdlc3RXaWR0aExpbWl0RHAgPSAxNjg0MzYyMjsgLy8gMHgxMDEwMzY2CkBAIC0xMDE4LDYgKzEwMjEsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgcGhvbmVOdW1iZXIgPSAxNjg0MzExMTsgLy8gMHgxMDEwMTY3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGl2b3RYID0gMTY4NDMxODk7IC8vIDB4MTAxMDFiNQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHBpdm90WSA9IDE2ODQzMTkwOyAvLyAweDEwMTAxYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb2ludGVyU2hhcGUgPSAxNjg0NDA0MjsgLy8gMHgxMDEwNTBhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcG9wdXBBbmltYXRpb25TdHlsZSA9IDE2ODQzNDY1OyAvLyAweDEwMTAyYzkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb3B1cEJhY2tncm91bmQgPSAxNjg0MzEyNjsgLy8gMHgxMDEwMTc2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcG9wdXBDaGFyYWN0ZXJzID0gMTY4NDMzMzI7IC8vIDB4MTAxMDI0NApAQCAtMTM4NSw2ICsxMzg5LDkgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aHVtYlRpbnQgPSAxNjg0Mzg4OTsgLy8gMHgxMDEwNDcxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGh1bWJUaW50TW9kZSA9IDE2ODQzODkwOyAvLyAweDEwMTA0NzIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aHVtYm5haWwgPSAxNjg0MzQyOTsgLy8gMHgxMDEwMmE1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlja01hcmsgPSAxNjg0NDA0MzsgLy8gMHgxMDEwNTBiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlja01hcmtUaW50ID0gMTY4NDQwNDQ7IC8vIDB4MTAxMDUwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRpY2tNYXJrVGludE1vZGUgPSAxNjg0NDA0NTsgLy8gMHgxMDEwNTBkCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlsZU1vZGUgPSAxNjg0MzI2NTsgLy8gMHgxMDEwMjAxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlsZU1vZGVYID0gMTY4NDM4OTU7IC8vIDB4MTAxMDQ3NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRpbGVNb2RlWSA9IDE2ODQzODk2OyAvLyAweDEwMTA0NzgKQEAgLTIyMTMsMjIgKzIyMjAsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX0xpZ2h0X1BhbmVsID0gMTY5NzM5MTQ7IC8vIDB4MTAzMDA1YQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX0xpZ2h0X1dhbGxwYXBlclNldHRpbmdzID0gMTY5NzM5MjI7IC8vIDB4MTAzMDA2MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsID0gMTY5NzQzNzI7IC8vIDB4MTAzMDIyNAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0ID0gMTY5NzQ1NTI7IC8vIDB4MTAzMDJkOAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU1MzsgLy8gMHgxMDMwMmQ5Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nID0gMTY5NzQ1NTQ7IC8vIDB4MTAzMDJkYQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ1doZW5MYXJnZSA9IDE2OTc0NTYwOyAvLyAweDEwMzAyZTAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dXaGVuTGFyZ2VfRGFya0FjdGlvbkJhciA9IDE2OTc0NTY4OyAvLyAweDEwMzAyZTgKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIgPSAxNjk3NDU2MTsgLy8gMHgxMDMwMmUxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX0FsZXJ0ID0gMTY5NzQ1NTU7IC8vIDB4MTAzMDJkYgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ19NaW5XaWR0aCA9IDE2OTc0NTU2OyAvLyAweDEwMzAyZGMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dfTm9BY3Rpb25CYXIgPSAxNjk3NDU1NzsgLy8gMHgxMDMwMmRkCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX05vQWN0aW9uQmFyX01pbldpZHRoID0gMTY5NzQ1NTg7IC8vIDB4MTAzMDJkZQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ19QcmVzZW50YXRpb24gPSAxNjk3NDU1OTsgLy8gMHgxMDMwMmRmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfTm9BY3Rpb25CYXIgPSAxNjk3NDU2MjsgLy8gMHgxMDMwMmUyCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfTm9BY3Rpb25CYXJfRnVsbHNjcmVlbiA9IDE2OTc0NTYzOyAvLyAweDEwMzAyZTMKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhcl9PdmVyc2NhbiA9IDE2OTc0NTY0OyAvLyAweDEwMzAyZTQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhcl9UcmFuc2x1Y2VudERlY29yID0gMTY5NzQ1NjU7IC8vIDB4MTAzMDJlNQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X1BhbmVsID0gMTY5NzQ1NjY7IC8vIDB4MTAzMDJlNgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RpYWxvZyA9IDE2OTc0MzczOyAvLyAweDEwMzAyMjUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EaWFsb2dXaGVuTGFyZ2UgPSAxNjk3NDM3OTsgLy8gMHgxMDMwMjJiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyID0gMTY5NzQzODA7IC8vIDB4MTAzMDIyYwpAQCAtMjI0Miw3ICsyMjMzLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EYXJrQWN0aW9uQmFyID0gMTY5NzQzOTI7IC8vIDB4MTAzMDIzOAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZyA9IDE2OTc0MzkzOyAvLyAweDEwMzAyMzkKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2UgPSAxNjk3NDM5OTsgLy8gMHgxMDMwMjNmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU2NzsgLy8gMHgxMDMwMmU3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX0RhcmtBY3Rpb25CYXIgPSAxNjk3NDU1MjsgLy8gMHgxMDMwMmQ4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nV2hlbkxhcmdlX05vQWN0aW9uQmFyID0gMTY5NzQ0MDA7IC8vIDB4MTAzMDI0MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ19BbGVydCA9IDE2OTc0Mzk0OyAvLyAweDEwMzAyM2EKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dfTWluV2lkdGggPSAxNjk3NDM5NTsgLy8gMHgxMDMwMjNiCkBAIC0yNjYzLDYgKzI2NTQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TY3JvbGxWaWV3ID0gMTY5NzQ0NjI7IC8vIDB4MTAzMDI3ZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWFyY2hWaWV3ID0gMTY5NzQ0NjM7IC8vIDB4MTAzMDI3ZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWVrQmFyID0gMTY5NzQ0NjQ7IC8vIDB4MTAzMDI4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWVrQmFyX0Rpc2NyZXRlID0gMTY5NzQ1NTM7IC8vIDB4MTAzMDJkOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdpZGdldF9NYXRlcmlhbF9TZWdtZW50ZWRCdXR0b24gPSAxNjk3NDQ2NTsgLy8gMHgxMDMwMjgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NwaW5uZXIgPSAxNjk3NDQ2NzsgLy8gMHgxMDMwMjgzCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NwaW5uZXJfVW5kZXJsaW5lZCA9IDE2OTc0NDY4OyAvLyAweDEwMzAyODQKQEAgLTI3MjIsNiArMjcxNCw3IEBACiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIEFjY2Vzc2liaWxpdHlTZXJ2aWNlIGV4dGVuZHMgYW5kcm9pZC5hcHAuU2VydmljZSB7CiAgICAgY3RvciBwdWJsaWMgQWNjZXNzaWJpbGl0eVNlcnZpY2UoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gZGlzcGF0Y2hHZXN0dXJlKGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uLCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdlc3R1cmVSZXN1bHRDYWxsYmFjaywgYW5kcm9pZC5vcy5IYW5kbGVyKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbyBmaW5kRm9jdXMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UuTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIgZ2V0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlOb2RlSW5mbyBnZXRSb290SW5BY3RpdmVXaW5kb3coKTsKQEAgLTI3NjEsNiArMjc1NCwxMiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX01FVEFfREFUQSA9ICJhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlIjsKICAgfQogCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQWNjZXNzaWJpbGl0eVNlcnZpY2UuR2VzdHVyZVJlc3VsdENhbGxiYWNrIHsKKyAgICBjdG9yIHB1YmxpYyBBY2Nlc3NpYmlsaXR5U2VydmljZS5HZXN0dXJlUmVzdWx0Q2FsbGJhY2soKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25DYW5jZWxsZWQoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlZChhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbik7CisgIH0KKwogICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLk1hZ25pZmljYXRpb25Db250cm9sbGVyIHsKICAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkTGlzdGVuZXIoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZS5NYWduaWZpY2F0aW9uQ29udHJvbGxlci5Pbk1hZ25pZmljYXRpb25DaGFuZ2VkTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlLk1hZ25pZmljYXRpb25Db250cm9sbGVyLk9uTWFnbmlmaWNhdGlvbkNoYW5nZWRMaXN0ZW5lciwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKQEAgLTI3OTMsNiArMjc5Miw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGxvYWREZXNjcmlwdGlvbihhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTiA9IDE2OyAvLyAweDEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUEVSRk9STV9HRVNUVVJFUyA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUkVRVUVTVF9FTkhBTkNFRF9XRUJfQUNDRVNTSUJJTElUWSA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfRklMVEVSX0tFWV9FVkVOVFMgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX0NBTl9SRVFVRVNUX1RPVUNIX0VYUExPUkFUSU9OID0gMjsgLy8gMHgyCkBAIC0yODE5LDYgKzI4MTksMzAgQEAKICAgICBmaWVsZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIHBhY2thZ2VOYW1lczsKICAgfQogCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBHZXN0dXJlRGVzY3JpcHRpb24geworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZUNsaWNrKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbiBjcmVhdGVMb25nQ2xpY2soaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZVBpbmNoKGludCwgaW50LCBpbnQsIGludCwgZmxvYXQsIGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZVN3aXBlKGludCwgaW50LCBpbnQsIGludCwgbG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbi5TdHJva2VEZXNjcmlwdGlvbiBnZXRTdHJva2UoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTdHJva2VDb3VudCgpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBNQVhfR0VTVFVSRV9EVVJBVElPTl9NUyA9IDYwMDAwTDsgLy8gMHhlYTYwTAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9TVFJPS0VfQ09VTlQgPSAxMDsgLy8gMHhhCisgIH0KKworICBwdWJsaWMgc3RhdGljIGNsYXNzIEdlc3R1cmVEZXNjcmlwdGlvbi5CdWlsZGVyIHsKKyAgICBjdG9yIHB1YmxpYyBHZXN0dXJlRGVzY3JpcHRpb24uQnVpbGRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24uQnVpbGRlciBhZGRTdHJva2UoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24uU3Ryb2tlRGVzY3JpcHRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24gYnVpbGQoKTsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR2VzdHVyZURlc2NyaXB0aW9uLlN0cm9rZURlc2NyaXB0aW9uIHsKKyAgICBjdG9yIHB1YmxpYyBHZXN0dXJlRGVzY3JpcHRpb24uU3Ryb2tlRGVzY3JpcHRpb24oYW5kcm9pZC5ncmFwaGljcy5QYXRoLCBsb25nLCBsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0RHVyYXRpb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUGF0aCBnZXRQYXRoKCk7CisgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFN0YXJ0VGltZSgpOworICB9CisKIH0KIAogcGFja2FnZSBhbmRyb2lkLmFjY291bnRzIHsKQEAgLTM0NzUsNiArMzQ5OSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVG91Y2hFdmVudChhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFRyYWNrYmFsbEV2ZW50KGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGR1bXAoamF2YS5sYW5nLlN0cmluZywgamF2YS5pby5GaWxlRGVzY3JpcHRvciwgamF2YS5pby5QcmludFdyaXRlciwgamF2YS5sYW5nLlN0cmluZ1tdKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXcgZmluZFZpZXdCeUlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZpbmlzaCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBmaW5pc2hBY3Rpdml0eShpbnQpOwpAQCAtMzU4Nyw2ICszNjEyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25QcmVwYXJlUGFuZWwoaW50LCBhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblByb3ZpZGVBc3Npc3RDb250ZW50KGFuZHJvaWQuYXBwLmFzc2lzdC5Bc3Npc3RDb250ZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25Qcm92aWRlQXNzaXN0RGF0YShhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5Vcmkgb25Qcm92aWRlUmVmZXJyZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25SZXF1ZXN0UGVybWlzc2lvbnNSZXN1bHQoaW50LCBqYXZhLmxhbmcuU3RyaW5nW10sIGludFtdKTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgb25SZXN0YXJ0KCk7CkBAIC0zNjIyLDYgKzM2NDgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlSW5zdGFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGRlcHJlY2F0ZWQgdm9pZCByZW1vdmVEaWFsb2coaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVwb3J0RnVsbHlEcmF3bigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9ucyByZXF1ZXN0RHJvcFBlcm1pc3Npb25zKGFuZHJvaWQudmlldy5EcmFnRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0UGVybWlzc2lvbnMoamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0VmlzaWJsZUJlaGluZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gcmVxdWVzdFdpbmRvd0ZlYXR1cmUoaW50KTsKQEAgLTM2NTYsNiArMzY4Myw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc2V0VGl0bGVDb2xvcihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRWb2x1bWVDb250cm9sU3RyZWFtKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZyTW9kZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvdWxkU2hvd1JlcXVlc3RQZXJtaXNzaW9uUmF0aW9uYWxlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRVcFJlY3JlYXRlVGFzayhhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2hvd0Fzc2lzdChhbmRyb2lkLm9zLkJ1bmRsZSk7CkBAIC0zNzYxLDYgKzM3ODksOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdGFydEFjdGl2aXR5KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgIH0KIAorICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIEFjdGl2aXR5TWFuYWdlci5CdWdyZXBvcnRNb2RlIGltcGxlbWVudHMgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbiB7CisgIH0KKwogICBwdWJsaWMgc3RhdGljIGNsYXNzIEFjdGl2aXR5TWFuYWdlci5NZW1vcnlJbmZvIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBjdG9yIHB1YmxpYyBBY3Rpdml0eU1hbmFnZXIuTWVtb3J5SW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKQEAgLTQyMTMsMTEgKzQyNDQsMTQgQEAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBEYXRlUGlja2VyRGlhbG9nIGV4dGVuZHMgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2cgaW1wbGVtZW50cyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLk9uRGF0ZUNoYW5nZWRMaXN0ZW5lciBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciB7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgY3RvciBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyLCBpbnQsIGludCwgaW50KTsKICAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25EYXRlQ2hhbmdlZChhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyLCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25EYXRlU2V0TGlzdGVuZXIoYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGUoaW50LCBpbnQsIGludCk7CiAgIH0KIApAQCAtNDI3OCw2ICs0MzEyLDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25QYW5lbENsb3NlZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25QcmVwYXJlT3B0aW9uc01lbnUoYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblByZXBhcmVQYW5lbChpbnQsIGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuTWVudSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoYW5kcm9pZC5vcy5CdW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgb25TYXZlSW5zdGFuY2VTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZChhbmRyb2lkLnZpZXcuU2VhcmNoRXZlbnQpOwpAQCAtNDM1Nyw3ICs0MzkyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0RFU0NSSVBUSU9OID0gImRlc2NyaXB0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0lEID0gIl9pZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MQVNUX01PRElGSUVEX1RJTUVTVEFNUCA9ICJsYXN0X21vZGlmaWVkX3RpbWVzdGFtcCI7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9MT0NBTF9GSUxFTkFNRSA9ICJsb2NhbF9maWxlbmFtZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX1VSSSA9ICJsb2NhbF91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFQUk9WSURFUl9VUkkgPSAibWVkaWFwcm92aWRlcl91cmkiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTUVESUFfVFlQRSA9ICJtZWRpYV90eXBlIjsKQEAgLTQ5NjksNiArNTAwNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTID0gImFuZHJvaWQucHJvZ3Jlc3MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19JTkRFVEVSTUlOQVRFID0gImFuZHJvaWQucHJvZ3Jlc3NJbmRldGVybWluYXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1NfTUFYID0gImFuZHJvaWQucHJvZ3Jlc3NNYXgiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSA9ICJhbmRyb2lkLnJlbW90ZUlucHV0SGlzdG9yeSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfQ0hST05PTUVURVIgPSAiYW5kcm9pZC5zaG93Q2hyb25vbWV0ZXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9TSE9XX1dIRU4gPSAiYW5kcm9pZC5zaG93V2hlbiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NNQUxMX0lDT04gPSAiYW5kcm9pZC5pY29uIjsKQEAgLTUxMzUsNiArNTE3MSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcmlvcml0eShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHJvZ3Jlc3MoaW50LCBpbnQsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UHVibGljVmVyc2lvbihhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0UmVtb3RlSW5wdXRIaXN0b3J5KGphdmEubGFuZy5DaGFyU2VxdWVuY2VbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTaG93V2hlbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNtYWxsSWNvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCwgaW50KTsKQEAgLTUzMjQsNiArNTM2MSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhbGxTZW5kZXJzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlDYXRlZ29yaWVzOwogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgcHJpb3JpdHlNZXNzYWdlU2VuZGVyczsKQEAgLTU3NzcsMTAgKzU4MTUsMTIgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgcGVla0Zhc3REcmF3YWJsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZW5kV2FsbHBhcGVyQ29tbWFuZChhbmRyb2lkLm9zLklCaW5kZXIsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQsIGFuZHJvaWQub3MuQnVuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Qml0bWFwKGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Qml0bWFwKGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwLCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QsIGJvb2xlYW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXREaXNwbGF5T2Zmc2V0KGFuZHJvaWQub3MuSUJpbmRlciwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXREaXNwbGF5UGFkZGluZyhhbmRyb2lkLmdyYXBoaWNzLlJlY3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZXNvdXJjZShpbnQpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTdHJlYW0oamF2YS5pby5JbnB1dFN0cmVhbSkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN0cmVhbShqYXZhLmlvLklucHV0U3RyZWFtLCBhbmRyb2lkLmdyYXBoaWNzLlJlY3QsIGJvb2xlYW4pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRXYWxscGFwZXJDb21wb25lbnQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRXYWxscGFwZXJPZmZzZXRTdGVwcyhmbG9hdCwgZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRXYWxscGFwZXJPZmZzZXRzKGFuZHJvaWQub3MuSUJpbmRlciwgZmxvYXQsIGZsb2F0KTsKQEAgLTU4NzYsMTEgKzU5MTYsMTMgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRBY2NvdW50VHlwZXNXaXRoTWFuYWdlbWVudERpc2FibGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZT4gZ2V0QWN0aXZlQWRtaW5zKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0QXV0b1RpbWVSZXF1aXJlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRCbHVldG9vdGhDb250YWN0U2hhcmluZ0Rpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Q2FtZXJhRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDZXJ0SW5zdGFsbGVyUGFja2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSkgdGhyb3dzIGphdmEubGFuZy5TZWN1cml0eUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ2FsbGVySWREaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLlN0cmluZz4gZ2V0Q3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXJzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDdXJyZW50RmFpbGVkUGFzc3dvcmRBdHRlbXB0cygpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGdldERldmljZUluaXRpYWxpemVyQXBwKCk7CkBAIC01ODg5LDggKzU5MzEsMTEgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGV2aWNlT3duZXJMb2NrU2NyZWVuSW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8Ynl0ZVtdPiBnZXRJbnN0YWxsZWRDYUNlcnRzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0TWF4aW11bVRpbWVUb0xvY2soYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRQYWNrYWdlU3VzcGVuZGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXIgZ2V0UGFyZW50UHJvZmlsZUluc3RhbmNlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UGFzc3dvcmRFeHBpcmF0aW9uKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UGFzc3dvcmRFeHBpcmF0aW9uVGltZW91dChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKQEAgLTU5MTIsNiArNTk1Nyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSBnZXRQcm9maWxlT3duZXIoKSB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UHJvZmlsZU93bmVyTmFtZUFzVXNlcihpbnQpIHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRTY3JlZW5DYXB0dXJlRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0U3RvcmFnZUVuY3J5cHRpb24oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0b3JhZ2VFbmNyeXB0aW9uU3RhdHVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5hZG1pbi5TeXN0ZW1VcGRhdGVQb2xpY3kgZ2V0U3lzdGVtVXBkYXRlUG9saWN5KCk7CkBAIC01OTI1LDYgKzU5NzEsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FjdGl2ZVBhc3N3b3JkU3VmZmljaWVudCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FkbWluQWN0aXZlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBcHBsaWNhdGlvbkhpZGRlbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2FsbGVyQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VPd25lckFwcChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNMb2NrVGFza1Blcm1pdHRlZChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNNYXN0ZXJWb2x1bWVNdXRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CkBAIC01OTMzLDYgKzU5ODAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VuaW5zdGFsbEJsb2NrZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBsb2NrTm93KCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG5vdGlmeVBlbmRpbmdTeXN0ZW1VcGRhdGUobG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlYm9vdChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZUFjdGl2ZUFkbWluKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZW1vdmVLZXlQYWlyKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTU5NDIsMTkgKzU5OTAsMjMgQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBzZXRBY3RpdmVQcm9maWxlT3duZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRBcHBsaWNhdGlvbkhpZGRlbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXV0b1RpbWVSZXF1aXJlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJsdWV0b290aENvbnRhY3RTaGFyaW5nRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDYW1lcmFEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENlcnRJbnN0YWxsZXJQYWNrYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRHbG9iYWxTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0S2V5Z3VhcmREaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEtleWd1YXJkRGlzYWJsZWRGZWF0dXJlcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TG9ja1Rhc2tQYWNrYWdlcyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb25nU3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXN0ZXJWb2x1bWVNdXRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRNYXhpbXVtVGltZVRvTG9jayhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgbG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldFBhY2thZ2VTdXNwZW5kZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZEV4cGlyYXRpb25UaW1lb3V0KGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBsb25nKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZE1pbmltdW1MZW5ndGgoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CkBAIC01OTc1LDYgKzYwMjcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZXN0cmljdGlvbnNQcm92aWRlcihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTY3JlZW5DYXB0dXJlRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTZWN1cmVTZXR0aW5nKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldFN0YXR1c0JhckRpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGludCBzZXRTdG9yYWdlRW5jcnlwdGlvbihhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFN5c3RlbVVwZGF0ZVBvbGljeShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYW5kcm9pZC5hcHAuYWRtaW4uU3lzdGVtVXBkYXRlUG9saWN5KTsKQEAgLTYzMzMsNiArNjM4Niw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEJhY2tvZmZQb2xpY3koKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuUGVyc2lzdGFibGVCdW5kbGUgZ2V0RXh0cmFzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEZsZXhNaWxsaXMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRJbml0aWFsQmFja29mZk1pbGxpcygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRJbnRlcnZhbE1pbGxpcygpOwpAQCAtNjM1MCw2ICs2NDA0LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvPiBDUkVBVE9SOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBERUZBVUxUX0lOSVRJQUxfQkFDS09GRl9NSUxMSVMgPSAzMDAwMEw7IC8vIDB4NzUzMEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYX0JBQ0tPRkZfREVMQVlfTUlMTElTID0gMTgwMDAwMDBMOyAvLyAweDExMmE4ODBMCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9GTEVYX01JTExJUyA9IDMwMDAwMEw7IC8vIDB4NDkzZTBMCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9QRVJJT0RfTUlMTElTID0gMzYwMDAwMEw7IC8vIDB4MzZlZTgwTAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVFlQRV9BTlkgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX1RZUEVfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVFlQRV9VTk1FVEVSRUQgPSAyOyAvLyAweDIKQEAgLTYzNjMsNiArNjQxOSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldE1pbmltdW1MYXRlbmN5KGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRPdmVycmlkZURlYWRsaW5lKGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRQZXJpb2RpYyhsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0UGVyaW9kaWMobG9uZywgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldFBlcnNpc3RlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0UmVxdWlyZWROZXR3b3JrVHlwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRSZXF1aXJlc0NoYXJnaW5nKGJvb2xlYW4pOwpAQCAtNjQyMyw2ICs2NDgwLDggQEAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBOZXR3b3JrU3RhdHMuQnVja2V0IHsKICAgICBjdG9yIHB1YmxpYyBOZXR3b3JrU3RhdHMuQnVja2V0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEVuZFRpbWVTdGFtcCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1ldGVyaW5nKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Um9hbWluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRSeEJ5dGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFJ4UGFja2V0cygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRTdGFydFRpbWVTdGFtcCgpOwpAQCAtNjQzMCw2ICs2NDg5LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFR4Qnl0ZXMoKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0VHhQYWNrZXRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VWlkKCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVURVJJTkdfQUxMID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVRFUklOR19ERUZBVUxUID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVURVJJTkdfTUVURVJFRCA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQU1JTkdfQUxMID0gLTE7IC8vIDB4ZmZmZmZmZmYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FNSU5HX0RFRkFVTFQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBST0FNSU5HX1JPQU1JTkcgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9BTEwgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0RFRkFVTFQgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9GT1JFR1JPVU5EID0gMjsgLy8gMHgyCkBAIC03ODA5LDExICs3ODc0LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHdyaXRlRGF0YVRvUGlwZShhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yLCBhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBUKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgeworICBwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IGltcGxlbWVudHMgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlclJlc3VsdFtdIGFwcGx5QmF0Y2goamF2YS51dGlsLkFycmF5TGlzdDxhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyT3BlcmF0aW9uPikgdGhyb3dzIGFuZHJvaWQuY29udGVudC5PcGVyYXRpb25BcHBsaWNhdGlvbkV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgYnVsa0luc2VydChhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGNhbGwoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQubmV0LlVyaSBjYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsb3NlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVsZXRlKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyIGdldExvY2FsQ29udGVudFByb3ZpZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0U3RyZWFtVHlwZXMoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CkBAIC03ODI3LDcgKzc4OTMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yIG9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpIHRocm93cyBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvciBxdWVyeShhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmdbXSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZWxlYXNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gcmVsZWFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIHVuY2Fub25pY2FsaXplKGFuZHJvaWQubmV0LlVyaSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZShhbmRyb2lkLm5ldC5VcmksIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgfQpAQCAtODAyNCw4ICs4MDkwLDggQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBjaGVja1VyaVBlcm1pc3Npb24oYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBjbGVhcldhbGxwYXBlcigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGlzcGxheUNvbnRleHQoYW5kcm9pZC52aWV3LkRpc3BsYXkpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSBkYXRhYmFzZUxpc3QoKTsKQEAgLTgwODEsOCArODE0Nyw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bUhlaWdodCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgZGVwcmVjYXRlZCBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1XaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBncmFudFVyaVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5uZXQuVXJpLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNSZXN0cmljdGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXkgb2J0YWluU3R5bGVkQXR0cmlidXRlcyhpbnRbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXkgb2J0YWluU3R5bGVkQXR0cmlidXRlcyhpbnQsIGludFtdKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CkBAIC04MjIyLDggKzgyODgsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrVXJpUGVybWlzc2lvbihhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIGNsZWFyV2FsbHBhcGVyKCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dChhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb24pOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkQ29udGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEaXNwbGF5Q29udGV4dChhbmRyb2lkLnZpZXcuRGlzcGxheSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVQYWNrYWdlQ29udGV4dChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGRhdGFiYXNlTGlzdCgpOwpAQCAtODI3Myw4ICs4MzM5LDggQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgaW50IGdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtSGVpZ2h0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm5ldC5VcmksIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkU3RvcmFnZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlSW5wdXRTdHJlYW0gb3BlbkZpbGVJbnB1dChqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0gb3BlbkZpbGVPdXRwdXQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZSBvcGVuT3JDcmVhdGVEYXRhYmFzZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlLkN1cnNvckZhY3RvcnkpOwpAQCAtODY5OSw2ICs4NzY1LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWFRSQV9ET0NLX1NUQVRFX1VORE9DS0VEID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX0RPTlRfS0lMTF9BUFAgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuRE9OVF9LSUxMX0FQUCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX0VNQUlMID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLkVNQUlMIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfRVBIRU1FUkFMX0ZBSUxVUkUgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuRVBIRU1FUkFMX0ZBSUxVUkUiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9FUEhFTUVSQUxfU1VDQ0VTUyA9ICJhbmRyb2lkLmludGVudC5leHRyYS5FUEhFTUVSQUxfU1VDQ0VTUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX0hUTUxfVEVYVCA9ICJhbmRyb2lkLmludGVudC5leHRyYS5IVE1MX1RFWFQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9JTklUSUFMX0lOVEVOVFMgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuSU5JVElBTF9JTlRFTlRTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfSU5TVEFMTEVSX1BBQ0tBR0VfTkFNRSA9ICJhbmRyb2lkLmludGVudC5leHRyYS5JTlNUQUxMRVJfUEFDS0FHRV9OQU1FIjsKQEAgLTg3NTIsNiArODgyMCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9FWENMVURFX0ZST01fUkVDRU5UUyA9IDgzODg2MDg7IC8vIDB4ODAwMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9GT1JXQVJEX1JFU1VMVCA9IDMzNTU0NDMyOyAvLyAweDIwMDAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0xBVU5DSEVEX0ZST01fSElTVE9SWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9MQVVOQ0hfVE9fU0lERSA9IDQwOTY7IC8vIDB4MTAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSyA9IDEzNDIxNzcyODsgLy8gMHg4MDAwMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQgPSA1MjQyODg7IC8vIDB4ODAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX05FV19UQVNLID0gMjY4NDM1NDU2OyAvLyAweDEwMDAwMDAwCkBAIC05MjYzLDYgKzkzMzIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUxXQVlTX1JFVEFJTl9UQVNLX1NUQVRFID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BVVRPX1JFTU9WRV9GUk9NX1JFQ0VOVFMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0NMRUFSX1RBU0tfT05fTEFVTkNIID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FTkFCTEVfVlJfTU9ERSA9IDMyNzY4OyAvLyAweDgwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0VYQ0xVREVfRlJPTV9SRUNFTlRTID0gMzI7IC8vIDB4MjAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTklTSF9PTl9DTE9TRV9TWVNURU1fRElBTE9HUyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTklTSF9PTl9UQVNLX0xBVU5DSCA9IDI7IC8vIDB4MgpAQCAtOTM1OCw2ICs5NDI4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NDUkVFTl9ERU5TSVRJRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NNQUxMX1NDUkVFTlMgPSA1MTI7IC8vIDB4MjAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19YTEFSR0VfU0NSRUVOUyA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VTUEVOREVEID0gMTA3Mzc0MTgyNDsgLy8gMHg0MDAwMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1lTVEVNID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19URVNUX09OTFkgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19VUERBVEVEX1NZU1RFTV9BUFAgPSAxMjg7IC8vIDB4ODAKQEAgLTk0NDcsNiArOTUxOCwxOCBAQAogICAgIGZpZWxkIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBUQUcgPSAiQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyI7CiAgIH0KIAorICBwdWJsaWMgZmluYWwgY2xhc3MgRXBoZW1lcmFsUmVzb2x2ZUluZm8gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIGN0b3IgcHVibGljIEVwaGVtZXJhbFJlc29sdmVJbmZvKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcj4pOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIGJ5dGVbXSBnZXREaWdlc3RCeXRlcygpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERpZ2VzdFByZWZpeCgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcj4gZ2V0RmlsdGVycygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRQYWNrYWdlTmFtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5jb250ZW50LnBtLkVwaGVtZXJhbFJlc29sdmVJbmZvPiBDUkVBVE9SOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTSEFfQUxHT1JJVEhNID0gIlNIQS0yNTYiOworICB9CisKICAgcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVHcm91cEluZm8gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIGN0b3IgcHVibGljIEZlYXR1cmVHcm91cEluZm8oKTsKICAgICBjdG9yIHB1YmxpYyBGZWF0dXJlR3JvdXBJbmZvKGFuZHJvaWQuY29udGVudC5wbS5GZWF0dXJlR3JvdXBJbmZvKTsKQEAgLTk1MzEsMTIgKzk2MTQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblBhY2thZ2VzVW5hdmFpbGFibGUoamF2YS5sYW5nLlN0cmluZ1tdLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUsIGJvb2xlYW4pOwogICB9CiAKLSAgcHVibGljIGNsYXNzIE1hbmlmZXN0RGlnZXN0IGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKLSAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q+IENSRUFUT1I7Ci0gIH0KLQogICBwdWJsaWMgY2xhc3MgUGFja2FnZUluZm8gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIGN0b3IgcHVibGljIFBhY2thZ2VJbmZvKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwpAQCAtOTY0NSw3ICs5NzIyLDYgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXBwTGFiZWwoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEFwcFBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRHcmFudGVkUnVudGltZVBlcm1pc3Npb25zKGphdmEubGFuZy5TdHJpbmdbXSk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEluc3RhbGxGbGFnc1F1aWNrKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEluc3RhbGxMb2NhdGlvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPcmlnaW5hdGluZ1VpZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPcmlnaW5hdGluZ1VyaShhbmRyb2lkLm5ldC5VcmkpOwpAQCAtOTcxOSw4ICs5Nzk1LDYgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0RHJhd2FibGUoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJ5dGVbXSBnZXRFcGhlbWVyYWxDb29raWUoKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRFcGhlbWVyYWxDb29raWVNYXhTaXplQnl0ZXMoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8+IGdldEluc3RhbGxlZEFwcGxpY2F0aW9ucyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlcyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXRJbnN0YWxsZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTk3MzAsOCArOTgwNCwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lRm9yVWlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8gZ2V0UGFja2FnZUFyY2hpdmVJbmZvKGphdmEubGFuZy5TdHJpbmcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnRbXSBnZXRQYWNrYWdlR2lkcyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludFtdIGdldFBhY2thZ2VHaWRzKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyIGdldFBhY2thZ2VJbnN0YWxsZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRQYWNrYWdlVWlkKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0UGFja2FnZXNGb3JVaWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbz4gZ2V0UGFja2FnZXNIb2xkaW5nUGVybWlzc2lvbnMoamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBlcm1pc3Npb25GbGFncyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwpAQCAtOTc1NCw3ICs5ODMwLDYgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXIgZ2V0WG1sKGphdmEubGFuZy5TdHJpbmcsIGludCwgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGdyYW50UnVudGltZVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzU3lzdGVtRmVhdHVyZShqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1Blcm1pc3Npb25SZXZva2VkQnlQb2xpY3koamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU2FmZU1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoYW5kcm9pZC5jb250ZW50LkludGVudCwgaW50KTsKQEAgLTk3NzQsNyArOTg0OSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJldm9rZVJ1bnRpbWVQZXJtaXNzaW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuVXNlckhhbmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEFwcGxpY2F0aW9uRW5hYmxlZFNldHRpbmcoamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50LCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVwZGF0ZVBlcm1pc3Npb25GbGFncyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgdmVyaWZ5SW50ZW50RmlsdGVyKGludCwgaW50LCBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuU3RyaW5nPik7CkBAIC05ODExLDYgKzk4ODUsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTk5FQ1RJT05fU0VSVklDRSA9ICJhbmRyb2lkLnNvZnR3YXJlLmNvbm5lY3Rpb25zZXJ2aWNlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9DT05TVU1FUl9JUiA9ICJhbmRyb2lkLmhhcmR3YXJlLmNvbnN1bWVyaXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0RFVklDRV9BRE1JTiA9ICJhbmRyb2lkLnNvZnR3YXJlLmRldmljZV9hZG1pbiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfRVRIRVJORVQgPSAiYW5kcm9pZC5oYXJkd2FyZS5ldGhlcm5ldCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfRkFLRVRPVUNIID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0hfTVVMVElUT1VDSF9ESVNUSU5DVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmZha2V0b3VjaC5tdWx0aXRvdWNoLmRpc3RpbmN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0hfTVVMVElUT1VDSF9KQVpaSEFORCA9ICJhbmRyb2lkLmhhcmR3YXJlLmZha2V0b3VjaC5tdWx0aXRvdWNoLmphenpoYW5kIjsKQEAgLTk4MzIsNiArOTkwNyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfTkZDID0gImFuZHJvaWQuaGFyZHdhcmUubmZjIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9ORkNfSE9TVF9DQVJEX0VNVUxBVElPTiA9ICJhbmRyb2lkLmhhcmR3YXJlLm5mYy5oY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX09QRU5HTEVTX0VYVEVOU0lPTl9QQUNLID0gImFuZHJvaWQuaGFyZHdhcmUub3BlbmdsZXMuYWVwIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9QSUNUVVJFX0lOX1BJQ1RVUkUgPSAiYW5kcm9pZC5zb2Z0d2FyZS5waWN0dXJlX2luX3BpY3R1cmUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1BSSU5USU5HID0gImFuZHJvaWQuc29mdHdhcmUucHJpbnQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1NDUkVFTl9MQU5EU0NBUEUgPSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ubGFuZHNjYXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9TQ1JFRU5fUE9SVFJBSVQgPSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ucG9ydHJhaXQiOwpAQCAtOTg2MSwxNSArOTkzNywxNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9BQ0NFU1NPUlkgPSAiYW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9VU0JfSE9TVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WRVJJRklFRF9CT09UID0gImFuZHJvaWQuc29mdHdhcmUudmVyaWZpZWRfYm9vdCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dBVENIID0gImFuZHJvaWQuaGFyZHdhcmUudHlwZS53YXRjaCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0VCVklFVyA9ICJhbmRyb2lkLnNvZnR3YXJlLndlYnZpZXciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRkkgPSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XSUZJX0RJUkVDVCA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkuZGlyZWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQUNUSVZJVElFUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9DT05GSUdVUkFUSU9OUyA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUyA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSA1MTI7IC8vIDB4MjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlNUUlVNRU5UQVRJT04gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRFTlRfRklMVEVSUyA9IDMyOyAvLyAweDIwCkBAIC05ODgxLDcgKzk5NTcsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9TRVJWSUNFUyA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9TSEFSRURfTElCUkFSWV9GSUxFUyA9IDEwMjQ7IC8vIDB4NDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NJR05BVFVSRVMgPSA2NDsgLy8gMHg0MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDgxOTI7IC8vIDB4MjAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gODE5MjsgLy8gMHgyMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TID0gMjA0ODsgLy8gMHg4MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9BTFJFQURZX0VYSVNUUyA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfQ09ORkxJQ1RJTkdfUFJPVklERVIgPSAtMTM7IC8vIDB4ZmZmZmZmZjMKQEAgLTk5MjIsNiArOTk5OCwxMyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfUEVSTUlTU0lPTl9GTEFHUyA9IDI1NTsgLy8gMHhmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDEzMTA3MjsgLy8gMHgyMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSA9IDY1NTM2OyAvLyAweDEwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSA3ODY0MzI7IC8vIDB4YzAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAyNjIxNDQ7IC8vIDB4NDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9TWVNURU1fT05MWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9WRVJJRklDQVRJT05fVElNRU9VVCA9IDM2MDAwMDBMOyAvLyAweDM2ZWU4MEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSTUlTU0lPTl9HUkFOVEVEID0gMDsgLy8gMHgwCkBAIC0xMDMxMSw2ICsxMDM5NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFF1YW50aXR5U3RyaW5nKGludCwgaW50LCBqYXZhLmxhbmcuT2JqZWN0Li4uKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFF1YW50aXR5U3RyaW5nKGludCwgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldFF1YW50aXR5VGV4dChpbnQsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxvY2FsZSBnZXRSZXNvbHZlZExvY2FsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRSZXNvdXJjZUVudHJ5TmFtZShpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UmVzb3VyY2VOYW1lKGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRSZXNvdXJjZVBhY2thZ2VOYW1lKGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtMTA5NDIsNiArMTEwMjYsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRWZXJzaW9uKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgdXBkYXRlKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHVwZGF0ZVdpdGhPbkNvbmZsaWN0KGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHZhbGlkYXRlU3FsKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiB5aWVsZElmQ29udGVuZGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHlpZWxkSWZDb250ZW5kZWRTYWZlbHkoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4geWllbGRJZkNvbnRlbmRlZFNhZmVseShsb25nKTsKQEAgLTExMTc2LDcgKzExMjYxLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgaW50IHN0YXR1c0NvZGU7CiAgIH0KIAotICBwdWJsaWMgY2xhc3MgRHJtTWFuYWdlckNsaWVudCB7CisgIHB1YmxpYyBjbGFzcyBEcm1NYW5hZ2VyQ2xpZW50IGltcGxlbWVudHMgamF2YS5sYW5nLkF1dG9DbG9zZWFibGUgewogICAgIGN0b3IgcHVibGljIERybU1hbmFnZXJDbGllbnQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtSW5mbyBhY3F1aXJlRHJtSW5mbyhhbmRyb2lkLmRybS5Ecm1JbmZvUmVxdWVzdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgYWNxdWlyZVJpZ2h0cyhhbmRyb2lkLmRybS5Ecm1JbmZvUmVxdWVzdCk7CkBAIC0xMTE4Niw2ICsxMTI3MSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoYW5kcm9pZC5uZXQuVXJpKTsKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGFuZHJvaWQubmV0LlVyaSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY2xvc2UoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUNvbnZlcnRlZFN0YXR1cyBjbG9zZUNvbnZlcnRTZXNzaW9uKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1Db252ZXJ0ZWRTdGF0dXMgY29udmVydERhdGEoaW50LCBieXRlW10pOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldEF2YWlsYWJsZURybUVuZ2luZXMoKTsKQEAgLTExMTk5LDcgKzExMjg1LDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0T3JpZ2luYWxNaW1lVHlwZShhbmRyb2lkLm5ldC5VcmkpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IG9wZW5Db252ZXJ0U2Vzc2lvbihqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGludCBwcm9jZXNzRHJtSW5mbyhhbmRyb2lkLmRybS5Ecm1JbmZvKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgcmVsZWFzZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHJlbGVhc2UoKTsKICAgICBtZXRob2QgcHVibGljIGludCByZW1vdmVBbGxSaWdodHMoKTsKICAgICBtZXRob2QgcHVibGljIGludCByZW1vdmVSaWdodHMoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgcmVtb3ZlUmlnaHRzKGFuZHJvaWQubmV0LlVyaSk7CkBAIC0xMTYwMywxNCArMTE2ODksMTQgQEAKIAogICBwdWJsaWMgc3RhdGljIGNsYXNzIEJpdG1hcEZhY3RvcnkuT3B0aW9ucyB7CiAgICAgY3RvciBwdWJsaWMgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlcXVlc3RDYW5jZWxEZWNvZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCByZXF1ZXN0Q2FuY2VsRGVjb2RlKCk7CiAgICAgZmllbGQgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwIGluQml0bWFwOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgaW5EZW5zaXR5OwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluRGl0aGVyOworICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5EaXRoZXI7CiAgICAgZmllbGQgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpbklucHV0U2hhcmVhYmxlOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluSnVzdERlY29kZUJvdW5kczsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpbk11dGFibGU7Ci0gICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5QcmVmZXJRdWFsaXR5T3ZlclNwZWVkOworICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5QcmVmZXJRdWFsaXR5T3ZlclNwZWVkOwogICAgIGZpZWxkIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcC5Db25maWcgaW5QcmVmZXJyZWRDb25maWc7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5QcmVtdWx0aXBsaWVkOwogICAgIGZpZWxkIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaW5QdXJnZWFibGU7CkBAIC0xMTYxOSw3ICsxMTcwNSw3IEBACiAgICAgZmllbGQgcHVibGljIGludCBpblNjcmVlbkRlbnNpdHk7CiAgICAgZmllbGQgcHVibGljIGludCBpblRhcmdldERlbnNpdHk7CiAgICAgZmllbGQgcHVibGljIGJ5dGVbXSBpblRlbXBTdG9yYWdlOwotICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIG1DYW5jZWw7CisgICAgZmllbGQgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBtQ2FuY2VsOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgb3V0SGVpZ2h0OwogICAgIGZpZWxkIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIG91dE1pbWVUeXBlOwogICAgIGZpZWxkIHB1YmxpYyBpbnQgb3V0V2lkdGg7CkBAIC0xMzA1OCw2ICsxMzE0NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVuc2NoZWR1bGVEcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlLCBqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBRERJTkdfTU9ERV9ORVNUID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFERElOR19NT0RFX1NUQUNLID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5ERUZJTkVEX0lOU0VUID0gLTIxNDc0ODM2NDg7IC8vIDB4ODAwMDAwMDAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBMZXZlbExpc3REcmF3YWJsZSBleHRlbmRzIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGVDb250YWluZXIgewpAQCAtMTkyMDYsNyArMTkyOTMsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2Fub25pY2FsSUQoamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbltdKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXREU1RTYXZpbmdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBnZXREZWZhdWx0KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRUaW1lWm9uZVR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoamF2YS51dGlsLkxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7CkBAIC0xOTIzMCw4ICsxOTMxNiw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGluRGF5bGlnaHRUaW1lKGphdmEudXRpbC5EYXRlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNGcm96ZW4oKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb2JzZXJ2ZXNEYXlsaWdodFRpbWUoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVGltZVpvbmUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRUaW1lWm9uZVR5cGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SUQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldFJhd09mZnNldChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB1c2VEYXlsaWdodFRpbWUoKTsKQEAgLTE5MjQ0LDggKzE5MzI4LDYgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9DT01NT05MWV9VU0VEID0gNjsgLy8gMHg2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfR0VORVJJQyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0dNVCA9IDQ7IC8vIDB4NAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0lDVSA9IDA7IC8vIDB4MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTUVaT05FX0pESyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSBVTktOT1dOX1pPTkU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFVOS05PV05fWk9ORV9JRCA9ICJFdGMvVW5rbm93biI7CiAgIH0KQEAgLTE5MzQxLDggKzE5NDIzLDYgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFZhcmlhbnQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUmlnaHRUb0xlZnQoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUgbWluaW1pemVTdWJ0YWdzKGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlLkNhdGVnb3J5LCBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLmxhbmcuU3RyaW5nIHNldEtleXdvcmRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9MYW5ndWFnZVRhZygpOwpAQCAtMjIwMjYsNiArMjIxMDYsNyBAQAogICBwdWJsaWMgc3RhdGljIGNsYXNzIE1lZGlhUm91dGVyLlJvdXRlSW5mbyB7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlQ2F0ZWdvcnkgZ2V0Q2F0ZWdvcnkoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0RGVzY3JpcHRpb24oKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXREZXZpY2VUeXBlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm1lZGlhLk1lZGlhUm91dGVyLlJvdXRlR3JvdXAgZ2V0R3JvdXAoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0SWNvbkRyYXdhYmxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldE5hbWUoKTsKQEAgLTIyMDQ0LDYgKzIyMTI1LDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlcXVlc3RTZXRWb2x1bWUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVxdWVzdFVwZGF0ZVZvbHVtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUYWcoamF2YS5sYW5nLk9iamVjdCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfQkxVRVRPT1RIID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfU1BFQUtFUiA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX1RWID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfVU5LTk9XTiA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1RZUEVfTE9DQUwgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZQkFDS19UWVBFX1JFTU9URSA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1ZPTFVNRV9GSVhFRCA9IDA7IC8vIDB4MApAQCAtMjM3NzQsNiArMjM4NTksNyBAQAogCiAgIHB1YmxpYyBjbGFzcyBUdlN0cmVhbUNvbmZpZyBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEZsYWdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0R2VuZXJhdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heEhlaWdodCgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heFdpZHRoKCk7CkBAIC0yMzc4MSw2ICsyMzg2Nyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VHlwZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5tZWRpYS50di5UdlN0cmVhbUNvbmZpZz4gQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX01BU0tfU0lHTkFMX0RFVEVDVElPTiA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUkVBTV9UWVBFX0JVRkZFUl9QUk9EVUNFUiA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUUkVBTV9UWVBFX0lOREVQRU5ERU5UX1ZJREVPX1NPVVJDRSA9IDE7IC8vIDB4MQogICB9CkBAIC0yMzc4OCw2ICsyMzg3NSw3IEBACiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVHZTdHJlYW1Db25maWcuQnVpbGRlciB7CiAgICAgY3RvciBwdWJsaWMgVHZTdHJlYW1Db25maWcuQnVpbGRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS50di5UdlN0cmVhbUNvbmZpZyBidWlsZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS50di5UdlN0cmVhbUNvbmZpZy5CdWlsZGVyIGZsYWdzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm1lZGlhLnR2LlR2U3RyZWFtQ29uZmlnLkJ1aWxkZXIgZ2VuZXJhdGlvbihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS50di5UdlN0cmVhbUNvbmZpZy5CdWlsZGVyIG1heEhlaWdodChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tZWRpYS50di5UdlN0cmVhbUNvbmZpZy5CdWlsZGVyIG1heFdpZHRoKGludCk7CkBAIC0yMzg5Myw2ICsyMzk4MSwyNCBAQAogICAgIGN0b3IgcHVibGljIE10cENvbnN0YW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBYnN0cmFjdE9iamVjdChpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTU09DSUFUSU9OX1RZUEVfR0VORVJJQ19GT0xERVIgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQU5DRUxfVFJBTlNBQ1RJT04gPSAxNjM4NTsgLy8gMHg0MDAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FQVFVSRV9DT01QTEVURSA9IDE2Mzk3OyAvLyAweDQwMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMTYzOTI7IC8vIDB4NDAwOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQgPSAxNjM5MDsgLy8gMHg0MDA2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMTYzOTU7IC8vIDB4NDAwYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9BRERFRCA9IDE2Mzg2OyAvLyAweDQwMDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfSU5GT19DSEFOR0VEID0gMTYzOTE7IC8vIDB4NDAwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0NIQU5HRUQgPSA1MTIwMTsgLy8gMHhjODAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VEID0gNTEyMDI7IC8vIDB4YzgwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQgPSA1MTIwMzsgLy8gMHhjODAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFTU9WRUQgPSAxNjM4NzsgLy8gMHg0MDAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUkVRVUVTVF9PQkpFQ1RfVFJBTlNGRVIgPSAxNjM5MzsgLy8gMHg0MDA5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQgPSAxNjM5NjsgLy8gMHg0MDBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfQURERUQgPSAxNjM4ODsgLy8gMHg0MDA0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfRlVMTCA9IDE2Mzk0OyAvLyAweDQwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMTYzODk7IC8vIDB4NDAwNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOREVGSU5FRCA9IDE2Mzg0OyAvLyAweDQwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyA9IDE2Mzk4OyAvLyAweDQwMGUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfM0dQX0NPTlRBSU5FUiA9IDQ3NDkyOyAvLyAweGI5ODQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfQUFDID0gNDczNjM7IC8vIDB4YjkwMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9BQlNUUkFDVF9BVURJT19BTEJVTSA9IDQ3NjE5OyAvLyAweGJhMDMKQEAgLTIzOTQ5LDYgKzI0MDU1LDQxIEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX1dNViA9IDQ3NDg5OyAvLyAweGI5ODEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfV1BMX1BMQVlMSVNUID0gNDc2MzI7IC8vIDB4YmExMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9YTUxfRE9DVU1FTlQgPSA0Nzc0NjsgLy8gMHhiYTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0NMT1NFX1NFU1NJT04gPSA0MDk5OyAvLyAweDEwMDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fQ09QWV9PQkpFQ1QgPSA0MTIyOyAvLyAweDEwMWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fREVMRVRFX09CSkVDVCA9IDQxMDc7IC8vIDB4MTAwYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9GT1JNQVRfU1RPUkUgPSA0MTExOyAvLyAweDEwMGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9JTkZPID0gNDA5NzsgLy8gMHgxMDAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9ERVZJQ0VfUFJPUF9ERVNDID0gNDExNjsgLy8gMHgxMDE0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDQxMTc7IC8vIDB4MTAxNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfTlVNX09CSkVDVFMgPSA0MTAyOyAvLyAweDEwMDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVCA9IDQxMDU7IC8vIDB4MTAwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX0hBTkRMRVMgPSA0MTAzOyAvLyAweDEwMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9JTkZPID0gNDEwNDsgLy8gMHgxMDA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUFJPUFNfU1VQUE9SVEVEID0gMzg5MTM7IC8vIDB4OTgwMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX1BST1BfREVTQyA9IDM4OTE0OyAvLyAweDk4MDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QX1ZBTFVFID0gMzg5MTU7IC8vIDB4OTgwMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX1JFRkVSRU5DRVMgPSAzODkyODsgLy8gMHg5ODEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9QQVJUSUFMX09CSkVDVCA9IDQxMjM7IC8vIDB4MTAxYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfU1RPUkFHRV9JTkZPID0gNDEwMTsgLy8gMHgxMDA1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lfRFMgPSA0MTAwOyAvLyAweDEwMDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX1RIVU1CID0gNDEwNjsgLy8gMHgxMDBhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0lOSVRJQVRFX0NBUFRVUkUgPSA0MTEwOyAvLyAweDEwMGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fSU5JVElBVEVfT1BFTl9DQVBUVVJFID0gNDEyNDsgLy8gMHgxMDFjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX01PVkVfT0JKRUNUID0gNDEyMTsgLy8gMHgxMDE5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX09QRU5fU0VTU0lPTiA9IDQwOTg7IC8vIDB4MTAwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9QT1dFUl9ET1dOID0gNDExNTsgLy8gMHgxMDEzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1JFU0VUX0RFVklDRSA9IDQxMTI7IC8vIDB4MTAxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9SRVNFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDQxMTk7IC8vIDB4MTAxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRUxGX1RFU1QgPSA0MTEzOyAvLyAweDEwMTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VORF9PQkpFQ1QgPSA0MTA5OyAvLyAweDEwMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VORF9PQkpFQ1RfSU5GTyA9IDQxMDg7IC8vIDB4MTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfREVWSUNFX1BST1BfVkFMVUUgPSA0MTE4OyAvLyAweDEwMTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VUX09CSkVDVF9QUk9QX1ZBTFVFID0gMzg5MTY7IC8vIDB4OTgwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfT0JKRUNUX1BST1RFQ1RJT04gPSA0MTE0OyAvLyAweDEwMTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VUX09CSkVDVF9SRUZFUkVOQ0VTID0gMzg5Mjk7IC8vIDB4OTgxMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TS0lQID0gMzg5NDQ7IC8vIDB4OTgyMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9URVJNSU5BVEVfT1BFTl9DQVBUVVJFID0gNDEyMDsgLy8gMHgxMDE4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPVEVDVElPTl9TVEFUVVNfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1RFQ1RJT05fU1RBVFVTX05PTl9UUkFOU0ZFUkFCTEVfREFUQSA9IDMyNzcxOyAvLyAweDgwMDMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9URUNUSU9OX1NUQVRVU19SRUFEX09OTFkgPSAzMjc2OTsgLy8gMHg4MDAxCkBAIC0yMzk2Niw2ICsyNDEwNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRPYmplY3RIYW5kbGVzKGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tdHAuTXRwT2JqZWN0SW5mbyBnZXRPYmplY3RJbmZvKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFBhcmVudChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhcnRpYWxPYmplY3QoaW50LCBpbnQsIGludCwgYnl0ZVtdKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0U3RvcmFnZUlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRTdG9yYWdlSWRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm10cC5NdHBTdG9yYWdlSW5mbyBnZXRTdG9yYWdlSW5mbyhpbnQpOwpAQCAtMjM5ODEsMzEgKzI0MTIzLDIzIEBACiAgIHB1YmxpYyBjbGFzcyBNdHBEZXZpY2VJbmZvIHsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0TWFudWZhY3R1cmVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldE1vZGVsKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnRbXSBnZXRPcGVyYXRpb25zU3VwcG9ydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldFNlcmlhbE51bWJlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXRWZXJzaW9uKCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTXRwRXZlbnQgewogICAgIGN0b3IgcHVibGljIE10cEV2ZW50KCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGV2aWNlUHJvcENvZGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRFdmVudENvZGUoKTsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQU5DRUxfVFJBTlNBQ1RJT04gPSAxNjM4NTsgLy8gMHg0MDAxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FQVFVSRV9DT01QTEVURSA9IDE2Mzk3OyAvLyAweDQwMGQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMTYzOTI7IC8vIDB4NDAwOAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQgPSAxNjM5MDsgLy8gMHg0MDA2Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMTYzOTU7IC8vIDB4NDAwYgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9BRERFRCA9IDE2Mzg2OyAvLyAweDQwMDIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfSU5GT19DSEFOR0VEID0gMTYzOTE7IC8vIDB4NDAwNwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0NIQU5HRUQgPSA1MTIwMTsgLy8gMHhjODAxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VEID0gNTEyMDI7IC8vIDB4YzgwMgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQgPSA1MTIwMzsgLy8gMHhjODAzCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFTU9WRUQgPSAxNjM4NzsgLy8gMHg0MDAzCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUkVRVUVTVF9PQkpFQ1RfVFJBTlNGRVIgPSAxNjM5MzsgLy8gMHg0MDA5Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQgPSAxNjM5NjsgLy8gMHg0MDBjCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfQURERUQgPSAxNjM4ODsgLy8gMHg0MDA0Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfRlVMTCA9IDE2Mzk0OyAvLyAweDQwMGEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMTYzODk7IC8vIDB4NDAwNQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOREVGSU5FRCA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyA9IDE2Mzk4OyAvLyAweDQwMGUKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRPYmplY3RGb3JtYXRDb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T2JqZWN0SGFuZGxlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T2JqZWN0UHJvcENvZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQYXJhbWV0ZXIxKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyMigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhcmFtZXRlcjMoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTdG9yYWdlSWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklkKCk7CiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgTXRwT2JqZWN0SW5mbyB7CkBAIC0yNDA4Niw2ICsyNDIyMCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5OZXR3b3JrW10gZ2V0QWxsTmV0d29ya3MoKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBnZXRCYWNrZ3JvdW5kRGF0YVNldHRpbmcoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubmV0Lk5ldHdvcmsgZ2V0Qm91bmROZXR3b3JrRm9yUHJvY2VzcygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRDYXB0aXZlUG9ydGFsU2VydmVyVXJsKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5Qcm94eUluZm8gZ2V0RGVmYXVsdFByb3h5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllcyBnZXRMaW5rUHJvcGVydGllcyhhbmRyb2lkLm5ldC5OZXR3b3JrKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXMgZ2V0TmV0d29ya0NhcGFiaWxpdGllcyhhbmRyb2lkLm5ldC5OZXR3b3JrKTsKQEAgLTI1NzI4LDcgKzI1ODYzLDYgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgaW50IGJhbmQ7CiAgICAgZmllbGQgcHVibGljIGFuZHJvaWQubmV0LndpZmkuV2lmaVNjYW5uZXIuQ2hhbm5lbFNwZWNbXSBjaGFubmVsczsKLSAgICBmaWVsZCBwdWJsaWMgaW50IGV4cG9uZW50OwogICAgIGZpZWxkIHB1YmxpYyBpbnQgbWF4UGVyaW9kSW5NczsKICAgICBmaWVsZCBwdWJsaWMgaW50IG1heFNjYW5zVG9DYWNoZTsKICAgICBmaWVsZCBwdWJsaWMgaW50IG51bUJzc2lkc1BlclNjYW47CkBAIC0yODgyMywxMiArMjg5NTcsMjg1IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIGFuZHJvaWQub3BlbmdsLkdMRVMzMSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kQmFycmllcigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaShpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY2koaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbENvbG9yTWFza2koaW50LCBib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQ29weUltYWdlU3ViRGF0YShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2soYW5kcm9pZC5vcGVuZ2wuR0xFUzMyLkRlYnVnUHJvYyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woaW50LCBpbnQsIGludCwgaW50LCBpbnRbXSwgaW50LCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERpc2FibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xFbmFibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBieXRlW10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkJ5dGVCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1cygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2xHZXRPYmplY3RMYWJlbChpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnbEdldE9iamVjdFB0ckxhYmVsKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGxvbmcgZ2xHZXRQb2ludGVydihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1mdihpbnQsIGludCwgaW50LCBmbG9hdFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkZsb2F0QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm11aXYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGdsSXNFbmFibGVkaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xPYmplY3RMYWJlbChpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBhdGNoUGFyYW1ldGVyaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBvcERlYnVnR3JvdXAoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHJpbWl0aXZlQm91bmRpbmdCb3goZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHVzaERlYnVnR3JvdXAoaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFJlYWRuUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleEJ1ZmZlcihpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sZWFuKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9CVUZGRVIgPSAzMzUwNDsgLy8gMHg4MmUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ0xBTVBfVE9fQk9SREVSID0gMzMwNjk7IC8vIDB4ODEyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiA9IDM3NTMwOyAvLyAweDkyOWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT0xPUkRPREdFID0gMzc1Mjk7IC8vIDB4OTI5OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwID0gMzc4MTk7IC8vIDB4OTNiYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgPSAzNzgxNjsgLy8gMHg5M2I4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NiA9IDM3ODE3OyAvLyAweDkzYjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4ID0gMzc4MTg7IC8vIDB4OTNiYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwID0gMzc4MjA7IC8vIDB4OTNiYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyID0gMzc4MjE7IC8vIDB4OTNiZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCA9IDM3ODA4OyAvLyAweDkzYjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ181eDQgPSAzNzgwOTsgLy8gMHg5M2IxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1ID0gMzc4MTA7IC8vIDB4OTNiMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSA9IDM3ODExOyAvLyAweDkzYjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDYgPSAzNzgxMjsgLy8gMHg5M2I0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1ID0gMzc4MTM7IC8vIDB4OTNiNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiA9IDM3ODE0OyAvLyAweDkzYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDggPSAzNzgxNTsgLy8gMHg5M2I3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMCA9IDM3ODUxOyAvLyAweDkzZGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDUgPSAzNzg0ODsgLy8gMHg5M2Q4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2ID0gMzc4NDk7IC8vIDB4OTNkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCA9IDM3ODUwOyAvLyAweDkzZGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwID0gMzc4NTI7IC8vIDB4OTNkYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgPSAzNzg1MzsgLy8gMHg5M2RkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDQgPSAzNzg0MDsgLy8gMHg5M2QwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDQgPSAzNzg0MTsgLy8gMHg5M2QxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDUgPSAzNzg0MjsgLy8gMHg5M2QyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDUgPSAzNzg0MzsgLy8gMHg5M2QzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDYgPSAzNzg0NDsgLy8gMHg5M2Q0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDUgPSAzNzg0NTsgLy8gMHg5M2Q1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDYgPSAzNzg0NjsgLy8gMHg5M2Q2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDggPSAzNzg0NzsgLy8gMHg5M2Q3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHUyA9IDMzMzEwOyAvLyAweDgyMWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHX1JPQlVTVF9BQ0NFU1NfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9MT1NUID0gMTI4NzsgLy8gMHg1MDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9EQVJLRU4gPSAzNzUyNzsgLy8gMHg5Mjk3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfRlVOQ1RJT04gPSAzMzM0ODsgLy8gMHg4MjQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfVVNFUl9QQVJBTSA9IDMzMzQ5OyAvLyAweDgyNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCA9IDMzMzg5OyAvLyAweDgyNmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4OTsgLy8gMHg5MTQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfTkVYVF9MT0dHRURfTUVTU0FHRV9MRU5HVEggPSAzMzM0NzsgLy8gMHg4MjQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfT1VUUFVUID0gMzc2MDA7IC8vIDB4OTJlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyA9IDMzMzQ2OyAvLyAweDgyNDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9ISUdIID0gMzcxOTA7IC8vIDB4OTE0NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyA9IDM3MTkyOyAvLyAweDkxNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9NRURJVU0gPSAzNzE5MTsgLy8gMHg5MTQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTk9USUZJQ0FUSU9OID0gMzMzODc7IC8vIDB4ODI2YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgPSAzMzM1MDsgLy8gMHg4MjQ2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX0FQUExJQ0FUSU9OID0gMzMzNTQ7IC8vIDB4ODI0YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiA9IDMzMzU1OyAvLyAweDgyNGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfU0hBREVSX0NPTVBJTEVSID0gMzMzNTI7IC8vIDB4ODI0OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSA9IDMzMzUzOyAvLyAweDgyNDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZU1RFTSA9IDMzMzUxOyAvLyAweDgyNDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgPSAzMzM1NzsgLy8gMHg4MjRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9FUlJPUiA9IDMzMzU2OyAvLyAweDgyNGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX01BUktFUiA9IDMzMzg0OyAvLyAweDgyNjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX09USEVSID0gMzMzNjE7IC8vIDB4ODI1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgPSAzMzM2MDsgLy8gMHg4MjUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1BfR1JPVVAgPSAzMzM4NjsgLy8gMHg4MjZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1JUQUJJTElUWSA9IDMzMzU5OyAvLyAweDgyNGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BVU0hfR1JPVVAgPSAzMzM4NTsgLy8gMHg4MjY5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9VTkRFRklORURfQkVIQVZJT1IgPSAzMzM1ODsgLy8gMHg4MjRlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRElGRkVSRU5DRSA9IDM3NTM0OyAvLyAweDkyOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9FWENMVVNJT04gPSAzNzUzNjsgLy8gMHg5MmEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRklSU1RfVkVSVEVYX0NPTlZFTlRJT04gPSAzNjQyOTsgLy8gMHg4ZTRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBQ1RJT05BTF9FVkVOID0gMzY0NzY7IC8vIDB4OGU3YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REID0gMzY0NzU7IC8vIDB4OGU3YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgPSAzNjQ0NTsgLy8gMHg4ZTVkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9MQVlFUkVEID0gMzYyNjM7IC8vIDB4OGRhNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTID0gMzc2NTA7IC8vIDB4OTMxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyA9IDM2MjY0OyAvLyAweDhkYTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9JTlBVVF9UWVBFID0gMzUwOTU7IC8vIDB4ODkxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFID0gMzUwOTY7IC8vIDB4ODkxOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiA9IDM2MzEzOyAvLyAweDhkZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TID0gMzQ5NDM7IC8vIDB4ODg3ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCA9IDM1MDk0OyAvLyAweDg5MTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HVUlMVFlfQ09OVEVYVF9SRVNFVCA9IDMzMzYzOyAvLyAweDgyNTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IQVJETElHSFQgPSAzNzUzMTsgLy8gMHg5MjliCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0NPTE9SID0gMzc1NTE7IC8vIDB4OTJhZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgPSAzNzU0OTsgLy8gMHg5MmFkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0xVTUlOT1NJVFkgPSAzNzU1MjsgLy8gMHg5MmIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX1NBVFVSQVRJT04gPSAzNzU1MDsgLy8gMHg5MmFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU1BR0VfQlVGRkVSID0gMzY5NDU7IC8vIDB4OTA1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NDg7IC8vIDB4OTA1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgPSAzMzM2NDsgLy8gMHg4MjU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX0lNQUdFX0JVRkZFUiA9IDM2OTU2OyAvLyAweDkwNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk1OTsgLy8gMHg5MDVmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMjsgLy8gMHg5MTBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfQlVGRkVSID0gMzYzMDQ7IC8vIDB4OGRkMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4Nzg7IC8vIDB4OTAwZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTID0gMzY0NzQ7IC8vIDB4OGU3YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCA9IDM3NjA3OyAvLyAweDkyZTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MQVNUX1ZFUlRFWF9DT05WRU5USU9OID0gMzY0MzA7IC8vIDB4OGU0ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggPSAzMzM3NDsgLy8gMHg4MjVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElHSFRFTiA9IDM3NTI4OyAvLyAweDkyOTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSU5FU19BREpBQ0VOQ1kgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElORV9TVFJJUF9BREpBQ0VOQ1kgPSAxMTsgLy8gMHhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTE9TRV9DT05URVhUX09OX1JFU0VUID0gMzMzNjI7IC8vIDB4ODI1MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNTM3ODsgLy8gMHg4YTMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MjsgLy8gMHg4ZTFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MzsgLy8gMHg4ZTFmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIID0gMzMzODg7IC8vIDB4ODI2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4ODsgLy8gMHg5MTQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX01FU1NBR0VfTEVOR1RIID0gMzcxODc7IC8vIDB4OTE0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCA9IDM2NDQ0OyAvLyAweDhlNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfRlJBTUVCVUZGRVJfTEFZRVJTID0gMzc2NTU7IC8vIDB4OTMxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4OTsgLy8gMHg5MmQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MzsgLy8gMHg5MmNmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0lNQUdFX1VOSUZPUk1TID0gMzcwNjk7IC8vIDB4OTBjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTID0gMzcxNTU7IC8vIDB4OTEyMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyA9IDM3MTU2OyAvLyAweDkxMjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfT1VUUFVUX1ZFUlRJQ0VTID0gMzYzMjA7IC8vIDB4OGRlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgPSAzNjQ0MjsgLy8gMHg4ZTVhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDc5OyAvLyAweDkwZDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM1ODgxOyAvLyAweDhjMjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjMyMTsgLy8gMHg4ZGUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQkxPQ0tTID0gMzUzNzI7IC8vIDB4OGEyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjMxOTsgLy8gMHg4ZGRmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0xBQkVMX0xFTkdUSCA9IDMzNTEyOyAvLyAweDgyZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfUEFUQ0hfVkVSVElDRVMgPSAzNjQ3NzsgLy8gMHg4ZTdkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4NzsgLy8gMHg5MmQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODE7IC8vIDB4OTJjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgPSAzNzA2NzsgLy8gMHg5MGNiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9JTlBVVF9DT01QT05FTlRTID0gMzQ5MjQ7IC8vIDB4ODg2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4MzsgLy8gMHg4ZTgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA4MDsgLy8gMHg5MGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzY0ODE7IC8vIDB4OGU4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4NTsgLy8gMHg4ZTg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0JMT0NLUyA9IDM2NDg5OyAvLyAweDhlODkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDc5OyAvLyAweDhlN2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg4OyAvLyAweDkyZDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MjsgLy8gMHg5MmNlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTUFHRV9VTklGT1JNUyA9IDM3MDY4OyAvLyAweDkwY2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0lOUFVUX0NPTVBPTkVOVFMgPSAzNDkyNTsgLy8gMHg4ODZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDg2OyAvLyAweDhlODYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDgxOyAvLyAweDkwZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNjQ4MjsgLy8gMHg4ZTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0JMT0NLUyA9IDM2NDkwOyAvLyAweDhlOGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDgwOyAvLyAweDhlODAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19HRU5fTEVWRUwgPSAzNjQ3ODsgLy8gMHg4ZTdlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfUEFUQ0hfQ09NUE9ORU5UUyA9IDM2NDg0OyAvLyAweDhlODQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVYVFVSRV9CVUZGRVJfU0laRSA9IDM1ODgzOyAvLyAweDhjMmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NSU5fRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVQgPSAzNjQ0MzsgLy8gMHg4ZTViCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUlOX1NBTVBMRV9TSEFESU5HX1ZBTFVFID0gMzU4OTU7IC8vIDB4OGMzNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZID0gMzc1MjQ7IC8vIDB4OTI5NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgPSAzNzc2MjsgLy8gMHg5MzgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9SQU5HRSA9IDM3NzYxOyAvLyAweDkzODEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9OT19SRVNFVF9OT1RJRklDQVRJT04gPSAzMzM3NzsgLy8gMHg4MjYxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfT1ZFUkxBWSA9IDM3NTI2OyAvLyAweDkyOTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QQVRDSEVTID0gMTQ7IC8vIDB4ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTID0gMzY0NjY7IC8vIDB4OGU3MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEID0gMzU5NzU7IC8vIDB4OGM4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggPSAzNzU2NjsgLy8gMHg5MmJlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRk9SX1BBVENIRVNfU1VQUE9SVEVEID0gMzMzMTM7IC8vIDB4ODIyMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gPSAzMzUwNjsgLy8gMHg4MmUyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJPR1JBTV9QSVBFTElORSA9IDMzNTA4OyAvLyAweDgyZTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9RVUFEUyA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZID0gMzM1MDc7IC8vIDB4ODJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSID0gMzc2NDE7IC8vIDB4OTMwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiA9IDM3NjM5OyAvLyAweDkzMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNzY0MDsgLy8gMHg5MzA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZID0gMzMzNjY7IC8vIDB4ODI1NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgPSAzMzUxMDsgLy8gMHg4MmU2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMxOyAvLyAweDkxMGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0JVRkZFUiA9IDM2MjkwOyAvLyAweDhkYzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4NzY7IC8vIDB4OTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XID0gMzY4Nzc7IC8vIDB4OTAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HID0gMzU4OTQ7IC8vIDB4OGMzNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiA9IDM3NTI1OyAvLyAweDkyOTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TSEFERVIgPSAzMzUwNTsgLy8gMHg4MmUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU09GVExJR0hUID0gMzc1MzI7IC8vIDB4OTI5YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XID0gMTI4MzsgLy8gMHg1MDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TVEFDS19VTkRFUkZMT1cgPSAxMjg0OyAvLyAweDUwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgPSAzNjQ2OTsgLy8gMHg4ZTc1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUiA9IDM2NDg4OyAvLyAweDhlODgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfU0hBREVSX0JJVCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNjQ4NzsgLy8gMHg4ZTg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9CSVQgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgPSAzNjQ3MDsgLy8gMHg4ZTc2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fUE9JTlRfTU9ERSA9IDM2NDczOyAvLyAweDhlNzkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9TUEFDSU5HID0gMzY0NzE7IC8vIDB4OGU3NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiA9IDM2NDcyOyAvLyAweDhlNzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMjI7IC8vIDB4OTEwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTI1OyAvLyAweDkxMDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfQlVGRkVSID0gMzU4ODQ7IC8vIDB4OGMyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSA9IDM2ODc0OyAvLyAweDkwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUiA9IDQxMDA7IC8vIDB4MTAwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSID0gMzU4ODI7IC8vIDB4OGMyYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgPSAzNTg4MjsgLy8gMHg4YzJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfREFUQV9TVE9SRV9CSU5ESU5HID0gMzU4ODU7IC8vIDB4OGMyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCA9IDM3Mjc3OyAvLyAweDkxOWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMzcyNzk7IC8vIDB4OTE5ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgPSAzNzI3ODsgLy8gMHg5MTllCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9BUlJBWSA9IDM2ODczOyAvLyAweDkwMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9UUklBTkdMRVNfQURKQUNFTkNZID0gMTI7IC8vIDB4YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSA9IDEzOyAvLyAweGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTkRFRklORURfVkVSVEVYID0gMzMzNzY7IC8vIDB4ODI2MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDMzMzY1OyAvLyAweDgyNTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfSU1BR0VfQlVGRkVSID0gMzY5Njc7IC8vIDB4OTA2NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTcwOyAvLyAweDkwNmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMzOyAvLyAweDkxMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9CVUZGRVIgPSAzNjMxMjsgLy8gMHg4ZGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3OTsgLy8gMHg5MDBmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVkVSVEVYX0FSUkFZID0gMzI4ODQ7IC8vIDB4ODA3NAorICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgR0xFUzMyLkRlYnVnUHJvYyB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICB9CisKICAgcHVibGljIGNsYXNzIEdMRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gewogICAgIGN0b3IgcHVibGljIEdMRXhjZXB0aW9uKGludCk7CiAgICAgY3RvciBwdWJsaWMgR0xFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBHTFN1cmZhY2VWaWV3IGV4dGVuZHMgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3IGltcGxlbWVudHMgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgeworICBwdWJsaWMgY2xhc3MgR0xTdXJmYWNlVmlldyBleHRlbmRzIGFuZHJvaWQudmlldy5TdXJmYWNlVmlldyBpbXBsZW1lbnRzIGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyLkNhbGxiYWNrMiB7CiAgICAgY3RvciBwdWJsaWMgR0xTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgR0xTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGVidWdGbGFncygpOwpAQCAtMjg4NTIsNiArMjkyNTksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlciwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1cmZhY2VSZWRyYXdOZWVkZWQoYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQlVHX0NIRUNLX0dMX0VSUk9SID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfTE9HX0dMX0NBTExTID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVOREVSTU9ERV9DT05USU5VT1VTTFkgPSAxOyAvLyAweDEKQEAgLTMwMDg2LDkgKzMwNDk0LDEzIEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzU3lzdGVtVXNlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJBR29hdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nKGFuZHJvaWQub3MuVXNlckhhbmRsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRMb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZFVubG9ja2VkKGFuZHJvaWQub3MuVXNlckhhbmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZExvY2tlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRMb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ09yU3RvcHBpbmcoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyVW5sb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyVW5sb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBzZXRSZXN0cmljdGlvbnNDaGFsbGVuZ2UoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc2V0VXNlclJlc3RyaWN0aW9uKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHNldFVzZXJSZXN0cmljdGlvbnMoYW5kcm9pZC5vcy5CdW5kbGUpOwpAQCAtMzAxMDYsNiArMzA1MTgsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19DT05GSUdfV0lGSSA9ICJub19jb25maWdfd2lmaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0NSRUFURV9XSU5ET1dTID0gIm5vX2NyZWF0ZV93aW5kb3dzIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfQ1JPU1NfUFJPRklMRV9DT1BZX1BBU1RFID0gIm5vX2Nyb3NzX3Byb2ZpbGVfY29weV9wYXN0ZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0RBVEFfUk9BTUlORyA9ICJub19kYXRhX3JvYW1pbmciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19ERUJVR0dJTkdfRkVBVFVSRVMgPSAibm9fZGVidWdnaW5nX2ZlYXR1cmVzIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfRkFDVE9SWV9SRVNFVCA9ICJub19mYWN0b3J5X3Jlc2V0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfRlVOID0gIm5vX2Z1biI7CkBAIC0zMDg1MSw2ICszMTI2NCw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvIGJ1aWxkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0Q2FwYWJpbGl0aWVzKGFuZHJvaWQucHJpbnQuUHJpbnRlckNhcGFiaWxpdGllc0luZm8pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldERlc2NyaXB0aW9uKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEhhc0N1c3RvbVByaW50ZXJJY29uKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SWNvblJlc291cmNlSWQoaW50KTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRJbmZvSW50ZW50KGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldE5hbWUoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0U3RhdHVzKGludCk7CiAgIH0KQEAgLTMwODcxLDYgKzMxMjg3LDEwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2UgewogCisgIHB1YmxpYyBjbGFzcyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrIHsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25DdXN0b21QcmludGVySWNvbkxvYWRlZChhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24pOworICB9CisKICAgcHVibGljIGZpbmFsIGNsYXNzIFByaW50RG9jdW1lbnQgewogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvciBnZXREYXRhKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKTsKQEAgLTMwOTI2LDYgKzMxMzQ2LDcgQEAKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEZXN0cm95ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNQcmludGVyRGlzY292ZXJ5U3RhcnRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkRlc3Ryb3koKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25SZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oYW5kcm9pZC5wcmludC5QcmludGVySWQsIGFuZHJvaWQucHJpbnRzZXJ2aWNlLkN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2spOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnByaW50LlByaW50ZXJJZD4pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoYW5kcm9pZC5wcmludC5QcmludGVySWQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0b3BQcmludGVyRGlzY292ZXJ5KCk7CkBAIC0zMTI5NCw2ICszMTcxNSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEdFT0NPREVEX0xPQ0FUSU9OID0gImdlb2NvZGVkX2xvY2F0aW9uIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkNPTUlOR19UWVBFID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElTX1JFQUQgPSAiaXNfcmVhZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExBU1RfTU9ESUZJRUQgPSAibGFzdF9tb2RpZmllZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExJTUlUX1BBUkFNX0tFWSA9ICJsaW1pdCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlTU0VEX1RZUEUgPSAzOyAvLyAweDMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTkVXID0gIm5ldyI7CkBAIC0zMjQ5NCw3ICszMjkxNiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9NSU1FX1RZUEUgPSAibWltZV90eXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX1NJWkUgPSAiX3NpemUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fU1VNTUFSWSA9ICJzdW1tYXJ5IjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FSQ0hJVkUgPSAyMDQ4OyAvLyAweDgwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVJDSElWRSA9IDEwMjQ7IC8vIDB4NDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19ESVJfUFJFRkVSU19HUklEID0gMTY7IC8vIDB4MTAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RJUl9QUkVGRVJTX0xBU1RfTU9ESUZJRUQgPSAzMjsgLy8gMHgyMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRElSX1NVUFBPUlRTX0NSRUFURSA9IDg7IC8vIDB4OApAQCAtMzI1MDMsOSArMzI5MjUsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfTU9WRSA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1JFTkFNRSA9IDY0OyAvLyAweDQwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19USFVNQk5BSUwgPSAxOyAvLyAweDEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1RZUEVEX0RPQ1VNRU5UID0gNTEyOyAvLyAweDIwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfV1JJVEUgPSAyOyAvLyAweDIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1ZJUlRVQUxfRE9DVU1FTlQgPSAxMDI0OyAvLyAweDQwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfVklSVFVBTF9ET0NVTUVOVCA9IDUxMjsgLy8gMHgyMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTUlNRV9UWVBFX0RJUiA9ICJ2bmQuYW5kcm9pZC5kb2N1bWVudC9kaXJlY3RvcnkiOwogICB9CiAKQEAgLTMzMDM0LDYgKzMzNDU1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX0xPQ0FUSU9OX1NPVVJDRV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLkxPQ0FUSU9OX1NPVVJDRV9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfQUxMX0FQUExJQ0FUSU9OU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9BTExfQVBQTElDQVRJT05TX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9BUFBMSUNBVElPTlNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfQVBQTElDQVRJT05TX1NFVFRJTkdTIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9PVkVSTEFZX1BFUk1JU1NJT04gPSAiYW5kcm9pZC5zZXR0aW5ncy5hY3Rpb24uTUFOQUdFX09WRVJMQVlfUEVSTUlTU0lPTiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9NQU5BR0VfV1JJVEVfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5hY3Rpb24uTUFOQUdFX1dSSVRFX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01FTU9SWV9DQVJEX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUVNT1JZX0NBUkRfU0VUVElOR1MiOwpAQCAtMzMwNTAsNiArMzM0NzIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU0VBUkNIX1NFVFRJTkdTID0gImFuZHJvaWQuc2VhcmNoLmFjdGlvbi5TRUFSQ0hfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU0VDVVJJVFlfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5TRUNVUklUWV9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNFVFRJTkdTIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NIT1dfQURNSU5fU1VQUE9SVF9ERVRBSUxTID0gImFuZHJvaWQuc2V0dGluZ3MuU0hPV19BRE1JTl9TVVBQT1JUX0RFVEFJTFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU0hPV19SRUdVTEFUT1JZX0lORk8gPSAiYW5kcm9pZC5zZXR0aW5ncy5TSE9XX1JFR1VMQVRPUllfSU5GTyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TT1VORF9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNPVU5EX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NZTkNfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5TWU5DX1NFVFRJTkdTIjsKQEAgLTMzMDk2LDYgKzMzNTE5LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQVVUT19USU1FID0gImF1dG9fdGltZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFVVE9fVElNRV9aT05FID0gImF1dG9fdGltZV96b25lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQkxVRVRPT1RIX09OID0gImJsdWV0b290aF9vbiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTlRBQ1RfTUVUQURBVEFfU1lOQyA9ICJjb250YWN0X21ldGFkYXRhX3N5bmMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIENPTlRFTlRfVVJJOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBEQVRBX1JPQU1JTkcgPSAiZGF0YV9yb2FtaW5nIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgREVCVUdfQVBQID0gImRlYnVnX2FwcCI7CkBAIC0zMzY5Niw2ICszNDEyMCw3IEBACiAKICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBWb2ljZW1haWxDb250cmFjdC5TdGF0dXMgaW1wbGVtZW50cyBhbmRyb2lkLnByb3ZpZGVyLkJhc2VDb2x1bW5zIHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLm5ldC5VcmkgYnVpbGRTb3VyY2VVcmkoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRRdW90YShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudEhhbmRsZSwgaW50LCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT05GSUdVUkFUSU9OX1NUQVRFID0gImNvbmZpZ3VyYXRpb25fc3RhdGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTkZJR1VSQVRJT05fU1RBVEVfQ0FOX0JFX0NPTkZJR1VSRUQgPSAyOyAvLyAweDIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05GSUdVUkFUSU9OX1NUQVRFX05PVF9DT05GSUdVUkVEID0gMTsgLy8gMHgxCkBAIC0zMzcxMiw2ICszNDEzNyw5IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZJQ0FUSU9OX0NIQU5ORUxfU1RBVEVfT0sgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSA9ICJwaG9uZV9hY2NvdW50X2NvbXBvbmVudF9uYW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9JRCA9ICJwaG9uZV9hY2NvdW50X2lkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUVVPVEFfT0NDVVBJRUQgPSAicXVvdGFfb2NjdXBpZWQiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBRVU9UQV9UT1RBTCA9ICJxdW90YV90b3RhbCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVPVEFfVU5BVkFJTEFCTEUgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVRUSU5HU19VUkkgPSAic2V0dGluZ3NfdXJpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU09VUkNFX1BBQ0tBR0UgPSAic291cmNlX3BhY2thZ2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBWT0lDRU1BSUxfQUNDRVNTX1VSSSA9ICJ2b2ljZW1haWxfYWNjZXNzX3VyaSI7CkBAIC0zMzcyOCw2ICszNDE1Niw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEhBU19DT05URU5UID0gImhhc19jb250ZW50IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVRFTV9UWVBFID0gInZuZC5hbmRyb2lkLmN1cnNvci5pdGVtL3ZvaWNlbWFpbCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIExBU1RfTU9ESUZJRUQgPSAibGFzdF9tb2RpZmllZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIE1JTUVfVFlQRSA9ICJtaW1lX3R5cGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBOVU1CRVIgPSAibnVtYmVyIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUEhPTkVfQUNDT1VOVF9DT01QT05FTlRfTkFNRSA9ICJzdWJzY3JpcHRpb25fY29tcG9uZW50X25hbWUiOwpAQCAtMzQ5MTksNiArMzUzNDgsNyBAQAogICBwdWJsaWMgY2xhc3MgTmV0d29ya1NlY3VyaXR5UG9saWN5IHsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnNlY3VyaXR5Lk5ldHdvcmtTZWN1cml0eVBvbGljeSBnZXRJbnN0YW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKIH0KQEAgLTM1MjEzLDYgKzM1NjQzLDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25NZW51T3BlbmVkKGludCwgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblBhbmVsQ2xvc2VkKGludCwgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblByZXBhcmVQYW5lbChpbnQsIGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuTWVudSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uU2VhcmNoUmVxdWVzdGVkKGFuZHJvaWQudmlldy5TZWFyY2hFdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uU2VhcmNoUmVxdWVzdGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uV2FrZVVwKCk7CkBAIC0zNTMzMyw3ICszNTc2NCw5IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX0xJU1RFTkVSX0NBTkNFTF9BTEwgPSAxMTsgLy8gMHhiCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1BBQ0tBR0VfQkFOTkVEID0gNzsgLy8gMHg3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1BBQ0tBR0VfQ0hBTkdFRCA9IDU7IC8vIDB4NQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9UT1BJQ19CQU5ORUQgPSAxNDsgLy8gMHhlCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVBU09OX1VTRVJfU1RPUFBFRCA9IDY7IC8vIDB4NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRSA9ICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UiOwogICB9CiAKICAgcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuQWRqdXN0bWVudCB7CkBAIC0zNTM2NSw5ICszNTc5OCwxMiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWdpc3RlckFzU3lzdGVtU2VydmljZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0SW50ZXJydXB0aW9uRmlsdGVyKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RMaXN0ZW5lckhpbnRzKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXF1ZXN0UmViaW5kKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RVbmJpbmQoKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldE5vdGlmaWNhdGlvbnNTaG93bihqYXZhLmxhbmcuU3RyaW5nW10pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRPbk5vdGlmaWNhdGlvblBvc3RlZFRyaW0oaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdW5yZWdpc3RlckFzU3lzdGVtU2VydmljZSgpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FURUdPUllfVlJfTk9USUZJQ0FUSU9OUyA9ICJhbmRyb2lkLmludGVudC5jYXRlZ29yeS52ci5ub3RpZmljYXRpb25zIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBISU5UX0hPU1RfRElTQUJMRV9FRkZFQ1RTID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJSVVBUSU9OX0ZJTFRFUl9BTEFSTVMgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFUlJVUFRJT05fRklMVEVSX0FMTCA9IDE7IC8vIDB4MQpAQCAtMzUzNzcsNiArMzU4MTMsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRSA9ICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfTElHSFRTID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSyA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSSU1fRlVMTCA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSSU1fTElHSFQgPSAxOyAvLyAweDEKICAgfQpAQCAtMzUzOTAsMTEgKzM1ODI3LDExIEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBbWJpZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG1hdGNoZXNJbnRlcnJ1cHRpb25GaWx0ZXIoKTsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0RFRkFVTFQgPSAwOyAvLyAweDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0hJR0ggPSAxOyAvLyAweDEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0xPVyA9IC0xOyAvLyAweGZmZmZmZmZmCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9NQVggPSAyOyAvLyAweDIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX05PTkUgPSAtMjsgLy8gMHhmZmZmZmZmZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfREVGQVVMVCA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfSElHSCA9IDM7IC8vIDB4MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTE9XID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9NQVggPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX05PTkUgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX1VOU1BFQ0lGSUVEID0gLTEwMDA7IC8vIDB4ZmZmZmZjMTgKICAgfQogCkBAIC0zNTQ2MCwyNSArMzU4OTcsMzggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24gZ2V0SWNvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRMYWJlbCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENvbnRlbnREZXNjcmlwdGlvbihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SWNvbihhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMYWJlbChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3RhdGUoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdXBkYXRlVGlsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZT4gQ1JFQVRPUjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9BQ1RJVkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFURV9JTkFDVElWRSA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VOQVZBSUxBQkxFID0gMDsgLy8gMHgwCiAgIH0KIAogICBwdWJsaWMgY2xhc3MgVGlsZVNlcnZpY2UgZXh0ZW5kcyBhbmRyb2lkLmFwcC5TZXJ2aWNlIHsKICAgICBjdG9yIHB1YmxpYyBUaWxlU2VydmljZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZSBnZXRRc1RpbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNMb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNTZWN1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuSUJpbmRlciBvbkJpbmQoYW5kcm9pZC5jb250ZW50LkludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ2xpY2soKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25TdGFydExpc3RlbmluZygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgb25UaWxlQWRkZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBvblRpbGVBZGRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRpbGVSZW1vdmVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXF1ZXN0TGlzdGVuaW5nU3RhdGUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0U3RhdHVzSWNvbihhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb24sIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzaG93RGlhbG9nKGFuZHJvaWQuYXBwLkRpYWxvZyk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHN0YXJ0QWN0aXZpdHlBbmRDb2xsYXBzZShhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgdW5sb2NrQW5kUnVuKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9RU19USUxFID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmFjdGlvbi5RU19USUxFIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfQUNUSVZFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX1BBU1NJVkUgPSAxOyAvLyAweDEKICAgfQogCiB9CkBAIC0zNjc4Miw2ICszNzIzMiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfR0VORVJJQ19DT05GRVJFTkNFID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfSElHSF9ERUZfQVVESU8gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1dJRkkgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XT1JLX0NBTEwgPSAzMjsgLy8gMHgyMAogICB9CiAKICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBkZXByZWNhdGVkIGNsYXNzIENhbGwuTGlzdGVuZXIgZXh0ZW5kcyBhbmRyb2lkLnRlbGVjb20uQ2FsbC5DYWxsYmFjayB7CkBAIC0zNzEzMSw2ICszNzU4Miw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9QTEFDRV9FTUVSR0VOQ1lfQ0FMTFMgPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfU0lNX1NVQlNDUklQVElPTiA9IDQ7IC8vIDB4NAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfVklERU9fQ0FMTElORyA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfVklERU9fQ0FMTElOR19SRUxJRVNfT05fUFJFU0VOQ0UgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50PiBDUkVBVE9SOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9DQUxMX1NVQkpFQ1RfQ0hBUkFDVEVSX0VOQ09ESU5HID0gImFuZHJvaWQudGVsZWNvbS5leHRyYS5DQUxMX1NVQkpFQ1RfQ0hBUkFDVEVSX0VOQ09ESU5HIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfQ0FMTF9TVUJKRUNUX01BWF9MRU5HVEggPSAiYW5kcm9pZC50ZWxlY29tLmV4dHJhLkNBTExfU1VCSkVDVF9NQVhfTEVOR1RIIjsKQEAgLTM3NDg1LDYgKzM3OTM3LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1NVUFBPUlRfU1dBUF9BRlRFUl9NRVJHRV9CT09MID0gInN1cHBvcnRfc3dhcF9hZnRlcl9tZXJnZV9ib29sIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1VTRV9IRkFfRk9SX1BST1ZJU0lPTklOR19CT09MID0gInVzZV9oZmFfZm9yX3Byb3Zpc2lvbmluZ19ib29sIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1VTRV9PVEFTUF9GT1JfUFJPVklTSU9OSU5HX0JPT0wgPSAidXNlX290YXNwX2Zvcl9wcm92aXNpb25pbmdfYm9vbCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9VU0VfUkNTX1BSRVNFTkNFX0JPT0wgPSAidXNlX3Jjc19wcmVzZW5jZV9ib29sIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1ZPSUNFTUFJTF9OT1RJRklDQVRJT05fUEVSU0lTVEVOVF9CT09MID0gInZvaWNlbWFpbF9ub3RpZmljYXRpb25fcGVyc2lzdGVudF9ib29sIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1ZPSUNFX1BSSVZBQ1lfRElTQUJMRV9VSV9CT09MID0gInZvaWNlX3ByaXZhY3lfZGlzYWJsZV91aV9ib29sIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX1ZPTFRFX1JFUExBQ0VNRU5UX1JBVF9JTlQgPSAidm9sdGVfcmVwbGFjZW1lbnRfcmF0X2ludCI7CkBAIC0zODAxNSw2ICszODQ2OCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFN1YnNjcmliZXJJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRWb2ljZU1haWxBbHBoYVRhZygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRWb2ljZU1haWxOdW1iZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubmV0LlVyaSBnZXRWb2ljZW1haWxSaW5ndG9uZVVyaShhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50SGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFuZGxlUGluTW1pKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYW5kbGVQaW5NbWlGb3JTdWJzY3JpYmVyKGludCwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc0NhcnJpZXJQcml2aWxlZ2VzKCk7CkBAIC0zODAzNiw2ICszODQ5MCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVHR5TW9kZVN1cHBvcnRlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1ZpZGVvQ2FsbGluZ0VuYWJsZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNWb2ljZUNhcGFibGUoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNWb2ljZW1haWxWaWJyYXRpb25FbmFibGVkKGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnRIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1dvcmxkUGhvbmUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgbGlzdGVuKGFuZHJvaWQudGVsZXBob255LlBob25lU3RhdGVMaXN0ZW5lciwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gbmVlZHNPdGFTZXJ2aWNlUHJvdmlzaW9uaW5nKCk7CkBAIC0zODU3Myw4ICszOTAyOCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsZWFyV2FsbHBhcGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dChhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb24pOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkQ29udGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEaXNwbGF5Q29udGV4dChhbmRyb2lkLnZpZXcuRGlzcGxheSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVQYWNrYWdlQ29udGV4dChqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGRhdGFiYXNlTGlzdCgpOwpAQCAtMzg2MjMsOCArMzkwNzgsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtSGVpZ2h0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1XaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBncmFudFVyaVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5uZXQuVXJpLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEuaW8uRmlsZUlucHV0U3RyZWFtIG9wZW5GaWxlSW5wdXQoamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIG9wZW5GaWxlT3V0cHV0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5KTsKQEAgLTM4NzQ5LDEwICszOTIwNCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREcmF3YWJsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwotICAgIG1ldGhvZCBwdWJsaWMgYnl0ZVtdIGdldEVwaGVtZXJhbENvb2tpZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbz4gZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEluc3RhbGxlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtMzg3NjEsOCArMzkyMTMsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQgZ2V0TGVhbmJhY2tMYXVuY2hJbnRlbnRGb3JQYWNrYWdlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lRm9yVWlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkcyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGludFtdIGdldFBhY2thZ2VHaWRzKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyIGdldFBhY2thZ2VJbnN0YWxsZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQYWNrYWdlVWlkKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0UGFja2FnZXNGb3JVaWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbz4gZ2V0UGFja2FnZXNIb2xkaW5nUGVybWlzc2lvbnMoamF2YS5sYW5nLlN0cmluZ1tdLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBlcm1pc3Npb25GbGFncyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwpAQCAtMzg3ODUsNyArMzkyMzksNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlciBnZXRYbWwoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZ3JhbnRSdW50aW1lUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNTeXN0ZW1GZWF0dXJlKGphdmEubGFuZy5TdHJpbmcpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0VwaGVtZXJhbEFwcGxpY2F0aW9uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUGVybWlzc2lvblJldm9rZWRCeVBvbGljeShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNTYWZlTW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBpbnQpOwpAQCAtMzg4MDUsOCArMzkyNTgsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXZva2VSdW50aW1lUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvbkVuYWJsZWRTZXR0aW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHVwZGF0ZVBlcm1pc3Npb25GbGFncyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdmVyaWZ5SW50ZW50RmlsdGVyKGludCwgaW50LCBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuU3RyaW5nPik7CkBAIC00MTAzOSw3ICs0MTQ5MCw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC51dGlsLkxvY2FsZUxpc3QgZ2V0RW1wdHlMb2NhbGVMaXN0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTG9jYWxlIGdldEZpcnN0TWF0Y2goamF2YS5sYW5nLlN0cmluZ1tdKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5Mb2NhbGUgZ2V0UHJpbWFyeSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGluZGV4T2YoamF2YS51dGlsLkxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC51dGlsLkxvY2FsZUxpc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHNpemUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgdG9MYW5ndWFnZVRhZ3MoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKQEAgLTQxMTk3LDcgKzQxNjUwLDcgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGRpZ2l0c0FuZFBsdXNPbmx5KGphdmEudXRpbC5yZWdleC5NYXRjaGVyKTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIERPTUFJTl9OQU1FOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gRU1BSUxfQUREUkVTUzsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR09PRF9JUklfQ0hBUiA9ICJhLXpBLVowLTlcdTAwYTAtXHVkN2ZmXHVmOTAwLVx1ZmRjZlx1ZmRmMC1cdWZmZWYiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIEdPT0RfSVJJX0NIQVIgPSAiYS16QS1aMC05XHUwMGEwLVx1ZDdmZlx1ZjkwMC1cdWZkY2ZcdWZkZjAtXHVmZmVmIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIElQX0FERFJFU1M7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBQSE9ORTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gVE9QX0xFVkVMX0RPTUFJTjsKQEAgLTQxNjI4LDcgKzQyMDgxLDYgQEAKICAgICBtZXRob2QgcHVibGljIGludCBnZXRBY3Rpb24oKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5DbGlwRGF0YSBnZXRDbGlwRGF0YSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNsaXBEZXNjcmlwdGlvbiBnZXRDbGlwRGVzY3JpcHRpb24oKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5Ecm9wUGVybWlzc2lvbkhvbGRlciBnZXREcm9wUGVybWlzc2lvbkhvbGRlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBnZXRMb2NhbFN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmxvYXQgZ2V0WCgpOwpAQCAtNDE2NDMsMTIgKzQyMDk1LDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudmlldy5EcmFnRXZlbnQ+IENSRUFUT1I7CiAgIH0KIAotICBwdWJsaWMgY2xhc3MgRHJvcFBlcm1pc3Npb25Ib2xkZXIgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewotICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgZ3JhbnQoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgcmV2b2tlKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25Ib2xkZXI+IENSRUFUT1I7CisgIHB1YmxpYyBmaW5hbCBjbGFzcyBEcm9wUGVybWlzc2lvbnMgeworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlKCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgRm9jdXNGaW5kZXIgewpAQCAtNDIzMDYsNiArNDI3NTQsMjcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc3RhcnRUcmFja2luZyhhbmRyb2lkLnZpZXcuS2V5RXZlbnQsIGphdmEubGFuZy5PYmplY3QpOwogICB9CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIEtleWJvYXJkU2hvcnRjdXRHcm91cCBpbXBsZW1lbnRzIGFuZHJvaWQub3MuUGFyY2VsYWJsZSB7CisgICAgY3RvciBwdWJsaWMgS2V5Ym9hcmRTaG9ydGN1dEdyb3VwKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0SW5mbz4pOworICAgIGN0b3IgcHVibGljIEtleWJvYXJkU2hvcnRjdXRHcm91cChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgYWRkSXRlbShhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm8pOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0SW5mbz4gZ2V0SXRlbXMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0TGFiZWwoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA+IENSRUFUT1I7CisgIH0KKworICBwdWJsaWMgZmluYWwgY2xhc3MgS2V5Ym9hcmRTaG9ydGN1dEluZm8gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIGN0b3IgcHVibGljIEtleWJvYXJkU2hvcnRjdXRJbmZvKGphdmEubGFuZy5DaGFyU2VxdWVuY2UsIGNoYXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOworICAgIG1ldGhvZCBwdWJsaWMgY2hhciBnZXRCYXNlQ2hhcmFjdGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldExhYmVsKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TW9kaWZpZXJzKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm8+IENSRUFUT1I7CisgIH0KKwogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGF5b3V0SW5mbGF0ZXIgewogICAgIGN0b3IgcHJvdGVjdGVkIExheW91dEluZmxhdGVyKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBjdG9yIHByb3RlY3RlZCBMYXlvdXRJbmZsYXRlcihhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXIsIGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKQEAgLTQyNTc0LDYgKzQzMDQzLDggQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX0xUUklHR0VSID0gMTc7IC8vIDB4MTEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX09SSUVOVEFUSU9OID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19QUkVTU1VSRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWCA9IDI3OyAvLyAweDFiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SRUxBVElWRV9ZID0gMjg7IC8vIDB4MWMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JUUklHR0VSID0gMTg7IC8vIDB4MTIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JVRERFUiA9IDIwOyAvLyAweDE0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SWCA9IDEyOyAvLyAweGMKQEAgLTQyNjYwLDYgKzQzMTMxLDM4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1JJRU5UQVRJT05fVU5LTk9XTiA9IC0xOyAvLyAweGZmZmZmZmZmCiAgIH0KIAorICBwdWJsaWMgZmluYWwgY2xhc3MgUG9pbnRlckljb24gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudmlldy5Qb2ludGVySWNvbiBjcmVhdGVDdXN0b21JY29uKGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwLCBmbG9hdCwgZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24gZ2V0U3lzdGVtSWNvbihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24gbG9hZEN1c3RvbUljb24oYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcuUG9pbnRlckljb24+IENSRUFUT1I7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQUxJQVMgPSAxMDEwOyAvLyAweDNmMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0FMTF9TQ1JPTEwgPSAxMDEzOyAvLyAweDNmNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0FSUk9XID0gMTAwMDsgLy8gMHgzZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9DRUxMID0gMTAwNjsgLy8gMHgzZWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9DT05URVhUX01FTlUgPSAxMDAxOyAvLyAweDNlOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0NPUFkgPSAxMDExOyAvLyAweDNmMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0NST1NTSEFJUiA9IDEwMDc7IC8vIDB4M2VmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfREVGQVVMVCA9IDEwMDA7IC8vIDB4M2U4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfR1JBQiA9IDEwMjA7IC8vIDB4M2ZjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfR1JBQkJJTkcgPSAxMDIxOyAvLyAweDNmZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0hBTkQgPSAxMDAyOyAvLyAweDNlYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0hFTFAgPSAxMDAzOyAvLyAweDNlYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0hPUklaT05UQUxfRE9VQkxFX0FSUk9XID0gMTAxNDsgLy8gMHgzZjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9OT19EUk9QID0gMTAxMjsgLy8gMHgzZjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9OVUxMID0gMDsgLy8gMHgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfVEVYVCA9IDEwMDg7IC8vIDB4M2YwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfVE9QX0xFRlRfRElBR09OQUxfRE9VQkxFX0FSUk9XID0gMTAxNzsgLy8gMHgzZjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9UT1BfUklHSFRfRElBR09OQUxfRE9VQkxFX0FSUk9XID0gMTAxNjsgLy8gMHgzZjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9WRVJUSUNBTF9ET1VCTEVfQVJST1cgPSAxMDE1OyAvLyAweDNmNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1ZFUlRJQ0FMX1RFWFQgPSAxMDA5OyAvLyAweDNmMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1dBSVQgPSAxMDA0OyAvLyAweDNlYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1pPT01fSU4gPSAxMDE4OyAvLyAweDNmYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1pPT01fT1VUID0gMTAxOTsgLy8gMHgzZmIKKyAgfQorCiAgIHB1YmxpYyBjbGFzcyBTY2FsZUdlc3R1cmVEZXRlY3RvciB7CiAgICAgY3RvciBwdWJsaWMgU2NhbGVHZXN0dXJlRGV0ZWN0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudmlldy5TY2FsZUdlc3R1cmVEZXRlY3Rvci5PblNjYWxlR2VzdHVyZUxpc3RlbmVyKTsKICAgICBjdG9yIHB1YmxpYyBTY2FsZUdlc3R1cmVEZXRlY3RvcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC52aWV3LlNjYWxlR2VzdHVyZURldGVjdG9yLk9uU2NhbGVHZXN0dXJlTGlzdGVuZXIsIGFuZHJvaWQub3MuSGFuZGxlcik7CkBAIC00MzAxOSw2ICs0MzUyMiw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlld1BhcmVudCBnZXRQYXJlbnRGb3JBY2Nlc3NpYmlsaXR5KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFgoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFBpdm90WSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uIGdldFBvaW50ZXJJY29uKGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCwgZmxvYXQsIGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzIGdldFJlc291cmNlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgaW50IGdldFJpZ2h0KCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCBmbG9hdCBnZXRSaWdodEZhZGluZ0VkZ2VTdHJlbmd0aCgpOwpAQCAtNDMwNzUsNiArNDM1NzksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNOZXN0ZWRTY3JvbGxpbmdQYXJlbnQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzT25DbGlja0xpc3RlbmVycygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNQb2ludGVyQ2FwdHVyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNUcmFuc2llbnRTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBoYXNXaW5kb3dGb2N1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudmlldy5WaWV3IGluZmxhdGUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCwgYW5kcm9pZC52aWV3LlZpZXdHcm91cCk7CkBAIC00MzIwMSw2ICs0MzcwNiw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHBvc3RPbkFuaW1hdGlvbihqYXZhLmxhbmcuUnVubmFibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwb3N0T25BbmltYXRpb25EZWxheWVkKGphdmEubGFuZy5SdW5uYWJsZSwgbG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlZnJlc2hEcmF3YWJsZVN0YXRlKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZW1vdmVDYWxsYmFja3MoamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVtb3ZlT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyKGFuZHJvaWQudmlldy5WaWV3Lk9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZU9uTGF5b3V0Q2hhbmdlTGlzdGVuZXIoYW5kcm9pZC52aWV3LlZpZXcuT25MYXlvdXRDaGFuZ2VMaXN0ZW5lcik7CkBAIC00MzMwMSw2ICs0MzgwNyw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBhZGRpbmdSZWxhdGl2ZShpbnQsIGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQaXZvdFgoZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQaXZvdFkoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQb2ludGVyQ2FwdHVyZSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQb2ludGVySWNvbihhbmRyb2lkLnZpZXcuUG9pbnRlckljb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQcmVzc2VkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXRSaWdodChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSb3RhdGlvbihmbG9hdCk7CkBAIC00NDE2OCw2ICs0NDY3Niw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbnRlbnRWaWV3KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbnRlbnRWaWV3KGFuZHJvaWQudmlldy5WaWV3KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Q29udGVudFZpZXcoYW5kcm9pZC52aWV3LlZpZXcsIGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RGVjb3JDYXB0aW9uU2hhZGUoaW50KTsKICAgICBtZXRob2QgcHJvdGVjdGVkIHZvaWQgc2V0RGVmYXVsdFdpbmRvd0Zvcm1hdChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXREaW1BbW91bnQoZmxvYXQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXREaXNhYmxlV2FsbHBhcGVyVG91Y2hFdmVudHMoYm9vbGVhbik7CkBAIC00NDE4OSw2ICs0NDY5OCw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1lZGlhQ29udHJvbGxlcihhbmRyb2lkLm1lZGlhLnNlc3Npb24uTWVkaWFDb250cm9sbGVyKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0TmF2aWdhdGlvbkJhckNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJlZW50ZXJUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UmVzaXppbmdDYXB0aW9uRHJhd2FibGUoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyKGFuZHJvaWQudmlldy5XaW5kb3cuUmVzdHJpY3RlZENhcHRpb25BcmVhTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRSZXR1cm5UcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hhcmVkRWxlbWVudEVudGVyVHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNoYXJlZEVsZW1lbnRFeGl0VHJhbnNpdGlvbihhbmRyb2lkLnRyYW5zaXRpb24uVHJhbnNpdGlvbik7CkBAIC00NDIxNyw2ICs0NDcyOCw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRha2VLZXlFdmVudHMoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRha2VTdXJmYWNlKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyLkNhbGxiYWNrMik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHRvZ2dsZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LktleUV2ZW50KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0FVVE8gPSAwOyAvLyAweDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0RBUksgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0xJR0hUID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBERUZBVUxUX0ZFQVRVUkVTID0gNjU7IC8vIDB4NDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVIgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGRUFUVVJFX0FDVElPTl9CQVJfT1ZFUkxBWSA9IDk7IC8vIDB4OQpAQCAtNDQyNjMsNiArNDQ3NzcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBvbk1lbnVPcGVuZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uUGFuZWxDbG9zZWQoaW50LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIG9uUHJlcGFyZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LlZpZXcsIGFuZHJvaWQudmlldy5NZW51KTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4sIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gb25TZWFyY2hSZXF1ZXN0ZWQoYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25XaW5kb3dBdHRyaWJ1dGVzQ2hhbmdlZChhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMpOwpAQCAtNDQyNzEsNiArNDQ3ODYsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlIG9uV2luZG93U3RhcnRpbmdBY3Rpb25Nb2RlKGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlLkNhbGxiYWNrLCBpbnQpOwogICB9CiAKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgV2luZG93LlJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25SZXN0cmljdGVkQ2FwdGlvbkFyZWFDaGFuZ2VkKGFuZHJvaWQuZ3JhcGhpY3MuUmVjdCk7CisgIH0KKwogICBwdWJsaWMgZmluYWwgY2xhc3MgV2luZG93QW5pbWF0aW9uRnJhbWVTdGF0cyBleHRlbmRzIGFuZHJvaWQudmlldy5GcmFtZVN0YXRzIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CkBAIC00NTUzNyw3ICs0NjA1Niw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEV4dHJhVmFsdWUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RXh0cmFWYWx1ZU9mKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldEljb25SZXNJZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMb2NhbGUoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TGFuZ3VhZ2VUYWcoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBnZXRMb2NhbGUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE5hbWVSZXNJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FzY2lpQ2FwYWJsZSgpOwpAQCAtNDU1NTIsNiArNDYwNzIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZSBidWlsZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldElzQXNjaWlDYXBhYmxlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldElzQXV4aWxpYXJ5KGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldExhbmd1YWdlVGFnKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldE92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGUuSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRTdWJ0eXBlRXh0cmFWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFN1YnR5cGUuSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRTdWJ0eXBlSWNvblJlc0lkKGludCk7CkBAIC00NTYxNSw3ICs0NjEzNiw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldERpc3BsYXlOYW1lKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RXh0cmFWYWx1ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFeHRyYVZhbHVlT2YoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMYW5ndWFnZVRhZygpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE5hbWVSZXNJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LnRleHRzZXJ2aWNlLlNwZWxsQ2hlY2tlclN1YnR5cGU+IENSRUFUT1I7CkBAIC00NjA4Niw3ICs0NjYwOCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIHZvaWQgc2V0RW5hYmxlU21vb3RoVHJhbnNpdGlvbihib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RmFudGFzeUZvbnRGYW1pbHkoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0R2VvbG9jYXRpb25EYXRhYmFzZVBhdGgoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIHZvaWQgc2V0R2VvbG9jYXRpb25EYXRhYmFzZVBhdGgoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEdlb2xvY2F0aW9uRW5hYmxlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SmF2YVNjcmlwdEVuYWJsZWQoYm9vbGVhbik7CkBAIC00NjQ1Miw4ICs0Njk3NCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvIGdldExvYWRlZFBhY2thZ2VJbmZvKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRXZWJWaWV3UGFja2FnZU5hbWUoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgbG9hZFdlYlZpZXdOYXRpdmVMaWJyYXJ5RnJvbVBhY2thZ2UoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBvbldlYlZpZXdVcGRhdGVJbnN0YWxsZWQoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIHByZXBhcmVXZWJWaWV3SW5aeWdvdGUoKTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0hST01JVU1fV0VCVklFV19WTVNJWkVfU0laRV9QUk9QRVJUWSA9ICJwZXJzaXN0LnN5cy53ZWJ2aWV3LnZtc2l6ZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElCTE9BRF9BRERSRVNTX1NQQUNFX05PVF9SRVNFUlZFRCA9IDI7IC8vIDB4MgpAQCAtNDY0NjIsNyArNDY5ODIsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfRkFJTEVEX1RPX0xPQURfTElCUkFSWSA9IDY7IC8vIDB4NgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfRkFJTEVEX1RPX09QRU5fUkVMUk9fRklMRSA9IDU7IC8vIDB4NQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfRkFJTEVEX1dBSVRJTkdfRk9SX1JFTFJPID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElCTE9BRF9GQUlMRURfV0FJVElOR19GT1JfV0VCVklFV19SRUFTT05fVU5LTk9XTiA9IDk7IC8vIDB4OQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfU1VDQ0VTUyA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfV0VCVklFV19CRUlOR19SRVBMQUNFRCA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfV1JPTkdfUEFDS0FHRV9OQU1FID0gMTsgLy8gMHgxCiAgIH0KIApAQCAtNDY3NzMsMTIgKzQ3Mjk1LDE4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0VGh1bWJPZmZzZXQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QgZ2V0VGh1bWJUaW50TGlzdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUgZ2V0VGh1bWJUaW50TW9kZSgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRUaWNrTWFyaygpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCBnZXRUaWNrTWFya1RpbnRMaXN0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSBnZXRUaWNrTWFya1RpbnRNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEtleVByb2dyZXNzSW5jcmVtZW50KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNwbGl0VHJhY2soYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRodW1iKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaHVtYk9mZnNldChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaHVtYlRpbnRMaXN0KGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaHVtYlRpbnRNb2RlKGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGlja01hcmsoYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRpY2tNYXJrVGludExpc3QoYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRpY2tNYXJrVGludE1vZGUoYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUpOwogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIEFic1NwaW5uZXIgZXh0ZW5kcyBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldyB7CkBAIC01MTcyNiw2ICs1MjI1NCw4IEBACiAgIHB1YmxpYyBjbGFzcyBJbnRlcm5hbEVycm9yIGV4dGVuZHMgamF2YS5sYW5nLlZpcnR1YWxNYWNoaW5lRXJyb3IgewogICAgIGN0b3IgcHVibGljIEludGVybmFsRXJyb3IoKTsKICAgICBjdG9yIHB1YmxpYyBJbnRlcm5hbEVycm9yKGphdmEubGFuZy5TdHJpbmcpOworICAgIGN0b3IgcHVibGljIEludGVybmFsRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSk7CisgICAgY3RvciBwdWJsaWMgSW50ZXJuYWxFcnJvcihqYXZhLmxhbmcuVGhyb3dhYmxlKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleHRlbmRzIGphdmEubGFuZy5FeGNlcHRpb24gewpAQCAtNTI0OTgsNiArNTMwMjgsOCBAQAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVmlydHVhbE1hY2hpbmVFcnJvciBleHRlbmRzIGphdmEubGFuZy5FcnJvciB7CiAgICAgY3RvciBwdWJsaWMgVmlydHVhbE1hY2hpbmVFcnJvcigpOwogICAgIGN0b3IgcHVibGljIFZpcnR1YWxNYWNoaW5lRXJyb3IoamF2YS5sYW5nLlN0cmluZyk7CisgICAgY3RvciBwdWJsaWMgVmlydHVhbE1hY2hpbmVFcnJvcihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKTsKKyAgICBjdG9yIHB1YmxpYyBWaXJ0dWFsTWFjaGluZUVycm9yKGphdmEubGFuZy5UaHJvd2FibGUpOwogICB9CiAKICAgcHVibGljIGZpbmFsIGNsYXNzIFZvaWQgewpAQCAtNTYyNDAsNiArNTY3NzIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aEJ1aWxkZXIgZ2V0SW5zdGFuY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5Lk5vU3VjaFByb3ZpZGVyRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aEJ1aWxkZXIgZ2V0SW5zdGFuY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5zZWN1cml0eS5Qcm92aWRlcikgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5zZWN1cml0eS5Qcm92aWRlciBnZXRQcm92aWRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQ2hlY2tlciBnZXRSZXZvY2F0aW9uQ2hlY2tlcigpOwogICB9CiAKICAgcHVibGljIGNsYXNzIENlcnRQYXRoQnVpbGRlckV4Y2VwdGlvbiBleHRlbmRzIGphdmEuc2VjdXJpdHkuR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIHsKQEAgLTU2MjU3LDYgKzU2NzkwLDEzIEBACiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDZXJ0UGF0aEJ1aWxkZXJTcGkgewogICAgIGN0b3IgcHVibGljIENlcnRQYXRoQnVpbGRlclNwaSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQnVpbGRlclJlc3VsdCBlbmdpbmVCdWlsZChqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhQYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQnVpbGRlckV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5JbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQ2hlY2tlciBlbmdpbmVHZXRSZXZvY2F0aW9uQ2hlY2tlcigpOworICB9CisKKyAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBDZXJ0UGF0aENoZWNrZXIgeworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjaGVjayhqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGUpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXQoYm9vbGVhbikgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNGb3J3YXJkQ2hlY2tpbmdTdXBwb3J0ZWQoKTsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgQ2VydFBhdGhQYXJhbWV0ZXJzIGltcGxlbWVudHMgamF2YS5sYW5nLkNsb25lYWJsZSB7CkBAIC01NjI3MSw2ICs1NjgxMSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yIGdldEluc3RhbmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5Ob1N1Y2hQcm92aWRlckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3IgZ2V0SW5zdGFuY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5zZWN1cml0eS5Qcm92aWRlcikgdGhyb3dzIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5zZWN1cml0eS5Qcm92aWRlciBnZXRQcm92aWRlcigpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQ2hlY2tlciBnZXRSZXZvY2F0aW9uQ2hlY2tlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yUmVzdWx0IHZhbGlkYXRlKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aCwgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoUGFyYW1ldGVycykgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5JbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uOwogICB9CiAKQEAgLTU2MzA3LDYgKzU2ODQ4LDcgQEAKIAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2VydFBhdGhWYWxpZGF0b3JTcGkgewogICAgIGN0b3IgcHVibGljIENlcnRQYXRoVmFsaWRhdG9yU3BpKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhDaGVja2VyIGVuZ2luZUdldFJldm9jYXRpb25DaGVja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JSZXN1bHQgZW5naW5lVmFsaWRhdGUoamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoLCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhQYXJhbWV0ZXJzKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5LkludmFsaWRBbGdvcml0aG1QYXJhbWV0ZXJFeGNlcHRpb247CiAgIH0KIApAQCAtNTY0NjUsOSArNTcwMDcsMTAgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aCBnZXRDZXJ0UGF0aCgpOwogICB9CiAKLSAgcHVibGljIGFic3RyYWN0IGNsYXNzIFBLSVhDZXJ0UGF0aENoZWNrZXIgaW1wbGVtZW50cyBqYXZhLmxhbmcuQ2xvbmVhYmxlIHsKKyAgcHVibGljIGFic3RyYWN0IGNsYXNzIFBLSVhDZXJ0UGF0aENoZWNrZXIgaW1wbGVtZW50cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhDaGVja2VyIGphdmEubGFuZy5DbG9uZWFibGUgewogICAgIGN0b3IgcHJvdGVjdGVkIFBLSVhDZXJ0UGF0aENoZWNrZXIoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgY2hlY2soamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbjxqYXZhLmxhbmcuU3RyaW5nPikgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY2hlY2soamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBjbG9uZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLlNldDxqYXZhLmxhbmcuU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluaXQoYm9vbGVhbikgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKQEAgLTU2NTI3LDYgKzU3MDcwLDMwIEBACiAgICAgZW51bV9jb25zdGFudCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmVhc29uIFVOUkVDT0dOSVpFRF9DUklUX0VYVDsKICAgfQogCisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQS0lYUmV2b2NhdGlvbkNoZWNrZXIgZXh0ZW5kcyBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWENlcnRQYXRoQ2hlY2tlciB7CisgICAgY3RvciBwcm90ZWN0ZWQgUEtJWFJldm9jYXRpb25DaGVja2VyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxqYXZhLnNlY3VyaXR5LmNlcnQuRXh0ZW5zaW9uPiBnZXRPY3NwRXh0ZW5zaW9ucygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5uZXQuVVJJIGdldE9jc3BSZXNwb25kZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGUgZ2V0T2NzcFJlc3BvbmRlckNlcnQoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5NYXA8amF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZSwgYnl0ZVtdPiBnZXRPY3NwUmVzcG9uc2VzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuU2V0PGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uPiBnZXRPcHRpb25zKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuTGlzdDxqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24+IGdldFNvZnRGYWlsRXhjZXB0aW9ucygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPY3NwRXh0ZW5zaW9ucyhqYXZhLnV0aWwuTGlzdDxqYXZhLnNlY3VyaXR5LmNlcnQuRXh0ZW5zaW9uPik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9jc3BSZXNwb25kZXIoamF2YS5uZXQuVVJJKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T2NzcFJlc3BvbmRlckNlcnQoamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9jc3BSZXNwb25zZXMoamF2YS51dGlsLk1hcDxqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlLCBieXRlW10+KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T3B0aW9ucyhqYXZhLnV0aWwuU2V0PGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uPik7CisgIH0KKworICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gZXh0ZW5kcyBqYXZhLmxhbmcuRW51bSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gdmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbltdIHZhbHVlcygpOworICAgIGVudW1fY29uc3RhbnQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiBOT19GQUxMQkFDSzsKKyAgICBlbnVtX2NvbnN0YW50IHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gT05MWV9FTkRfRU5USVRZOworICAgIGVudW1fY29uc3RhbnQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbiBQUkVGRVJfQ1JMUzsKKyAgICBlbnVtX2NvbnN0YW50IHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gU09GVF9GQUlMOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBQb2xpY3lOb2RlIHsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5JdGVyYXRvcjw/IGV4dGVuZHMgamF2YS5zZWN1cml0eS5jZXJ0LlBvbGljeU5vZGU+IGdldENoaWxkcmVuKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0RGVwdGgoKTsKQEAgLTU2Njg2LDYgKzU3MjUzLDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmF4LnNlY3VyaXR5LmF1dGgueDUwMC5YNTAwUHJpbmNpcGFsIGdldFN1YmplY3RYNTAwUHJpbmNpcGFsKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBieXRlW10gZ2V0VEJTQ2VydGlmaWNhdGUoKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRW5jb2RpbmdFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VmVyc2lvbigpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB2ZXJpZnkoamF2YS5zZWN1cml0eS5QdWJsaWNLZXksIGphdmEuc2VjdXJpdHkuUHJvdmlkZXIpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGVFeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuSW52YWxpZEtleUV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuU2lnbmF0dXJlRXhjZXB0aW9uOwogICB9CiAKICAgcHVibGljIGFic3RyYWN0IGludGVyZmFjZSBYNTA5RXh0ZW5zaW9uIHsKQEAgLTYyMDE0LDggKzYyNTgyLDggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdCdWZmZXIgYXBwZW5kVGFpbChqYXZhLmxhbmcuU3RyaW5nQnVmZmVyKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBlbmQoaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ3JvdXAoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCBncm91cENvdW50KCk7CkBAIC02MjA0Myw4ICs2MjYxMSw4IEBACiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgUGF0dGVybiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuU3ludGF4RXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBmbGFncygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXIgbWF0Y2hlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoZXMoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CkBAIC02MjA1OSw2ICs2MjYyNyw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElURVJBTCA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVVMVElMSU5FID0gODsgLy8gMHg4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JQ09ERV9DQVNFID0gNjQ7IC8vIDB4NDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklDT0RFX0NIQVJBQ1RFUl9DTEFTUyA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTklYX0xJTkVTID0gMTsgLy8gMHgxCiAgIH0KIApkaWZmIC0tZ2l0IGEvYXBpL3N5c3RlbS1yZW1vdmVkLnR4dCBiL2FwaS9zeXN0ZW0tcmVtb3ZlZC50eHQKaW5kZXggNjQyZDJhOC4uOTBhNWRjNyAxMDA2NDQKLS0tIGEvYXBpL3N5c3RlbS1yZW1vdmVkLnR4dAorKysgYi9hcGkvc3lzdGVtLXJlbW92ZWQudHh0CkBAIC0xOTAsNiArMTkwLDE1IEBACiAKIH0KIAorcGFja2FnZSBhbmRyb2lkLnRlc3QubW9jayB7CisKKyAgcHVibGljIGNsYXNzIE1vY2tQYWNrYWdlTWFuYWdlciBleHRlbmRzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlciB7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgaW50KTsKKyAgfQorCit9CisKIHBhY2thZ2UgYW5kcm9pZC50ZXh0LmZvcm1hdCB7CiAKICAgcHVibGljIGNsYXNzIERhdGVGb3JtYXQgewpkaWZmIC0tZ2l0IGEvYXBpL3Rlc3QtY3VycmVudC50eHQgYi9hcGkvdGVzdC1jdXJyZW50LnR4dAppbmRleCAzOWVkY2ViLi4xMjI5ZmY2IDEwMDY0NAotLS0gYS9hcGkvdGVzdC1jdXJyZW50LnR4dAorKysgYi9hcGkvdGVzdC1jdXJyZW50LnR4dApAQCAtNjcsNyArNjcsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBEVU1QID0gImFuZHJvaWQucGVybWlzc2lvbi5EVU1QIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhQQU5EX1NUQVRVU19CQVIgPSAiYW5kcm9pZC5wZXJtaXNzaW9uLkVYUEFORF9TVEFUVVNfQkFSIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkFDVE9SWV9URVNUID0gImFuZHJvaWQucGVybWlzc2lvbi5GQUNUT1JZX1RFU1QiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGTEFTSExJR0hUID0gImFuZHJvaWQucGVybWlzc2lvbi5GTEFTSExJR0hUIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VUX0FDQ09VTlRTID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQUNDT1VOVFMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfQUNDT1VOVFNfUFJJVklMRUdFRCA9ICJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FDQ09VTlRTX1BSSVZJTEVHRUQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBHRVRfUEFDS0FHRV9TSVpFID0gImFuZHJvaWQucGVybWlzc2lvbi5HRVRfUEFDS0FHRV9TSVpFIjsKQEAgLTMzNSw2ICszMzQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhbGVuZGFyVmlld1Nob3duID0gMTY4NDM1OTY7IC8vIDB4MTAxMDM0YwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhbGVuZGFyVmlld1N0eWxlID0gMTY4NDM2MTM7IC8vIDB4MTAxMDM1ZAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhbkNvbnRyb2xNYWduaWZpY2F0aW9uID0gMTY4NDQwNDA7IC8vIDB4MTAxMDUwOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhblBlcmZvcm1HZXN0dXJlcyA9IDE2ODQ0MDQ2OyAvLyAweDEwMTA1MGUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBjYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5ID0gMTY4NDM3MzY7IC8vIDB4MTAxMDNkOAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGNhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMgPSAxNjg0MzczNzsgLy8gMHgxMDEwM2Q5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb25Nb2RlID0gMTY4NDM3MzU7IC8vIDB4MTAxMDNkNwpAQCAtNTI0LDYgKzUyNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXhwYW5kYWJsZUxpc3RWaWV3U3R5bGUgPSAxNjg0Mjg2MzsgLy8gMHgxMDEwMDZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXhwYW5kYWJsZUxpc3RWaWV3V2hpdGVTdHlsZSA9IDE2ODQzNDQ2OyAvLyAweDEwMTAyYjYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHBvcnRlZCA9IDE2ODQyNzY4OyAvLyAweDEwMTAwMTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBleHRlcm5hbFNlcnZpY2UgPSAxNjg0NDA0NzsgLy8gMHgxMDEwNTBmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgZXh0cmFUZW5zaW9uID0gMTY4NDMzNzE7IC8vIDB4MTAxMDI2YgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGV4dHJhY3ROYXRpdmVMaWJzID0gMTY4NDQwMTA7IC8vIDB4MTAxMDRlYQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGZhY3RvciA9IDE2ODQzMjE5OyAvLyAweDEwMTAxZDMKQEAgLTcyOCw2ICs3MjksNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhYmVsID0gMTY4NDI3NTM7IC8vIDB4MTAxMDAwMQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhYmVsRm9yID0gMTY4NDM3MTg7IC8vIDB4MTAxMDNjNgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhYmVsVGV4dFNpemUgPSAxNjg0MzMxNzsgLy8gMHgxMDEwMjM1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFuZ3VhZ2VUYWcgPSAxNjg0NDA0MTsgLy8gMHgxMDEwNTA5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgbGFyZ2VIZWFwID0gMTY4NDM2MTA7IC8vIDB4MTAxMDM1YQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IGxhcmdlU2NyZWVucyA9IDE2ODQzMzk4OyAvLyAweDEwMTAyODYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBsYXJnZXN0V2lkdGhMaW1pdERwID0gMTY4NDM2MjI7IC8vIDB4MTAxMDM2NgpAQCAtOTI0LDYgKzkyNiw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBwaG9uZU51bWJlciA9IDE2ODQzMTExOyAvLyAweDEwMTAxNjcKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwaXZvdFggPSAxNjg0MzE4OTsgLy8gMHgxMDEwMWI1CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGl2b3RZID0gMTY4NDMxOTA7IC8vIDB4MTAxMDFiNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHBvaW50ZXJTaGFwZSA9IDE2ODQ0MDQyOyAvLyAweDEwMTA1MGEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb3B1cEFuaW1hdGlvblN0eWxlID0gMTY4NDM0NjU7IC8vIDB4MTAxMDJjOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHBvcHVwQmFja2dyb3VuZCA9IDE2ODQzMTI2OyAvLyAweDEwMTAxNzYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBwb3B1cENoYXJhY3RlcnMgPSAxNjg0MzMzMjsgLy8gMHgxMDEwMjQ0CkBAIC0xMjg3LDYgKzEyOTAsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRodW1iVGludCA9IDE2ODQzODg5OyAvLyAweDEwMTA0NzEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aHVtYlRpbnRNb2RlID0gMTY4NDM4OTA7IC8vIDB4MTAxMDQ3MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IHRodW1ibmFpbCA9IDE2ODQzNDI5OyAvLyAweDEwMTAyYTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aWNrTWFyayA9IDE2ODQ0MDQzOyAvLyAweDEwMTA1MGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aWNrTWFya1RpbnQgPSAxNjg0NDA0NDsgLy8gMHgxMDEwNTBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlja01hcmtUaW50TW9kZSA9IDE2ODQ0MDQ1OyAvLyAweDEwMTA1MGQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aWxlTW9kZSA9IDE2ODQzMjY1OyAvLyAweDEwMTAyMDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCB0aWxlTW9kZVggPSAxNjg0Mzg5NTsgLy8gMHgxMDEwNDc3CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgdGlsZU1vZGVZID0gMTY4NDM4OTY7IC8vIDB4MTAxMDQ3OApAQCAtMjExMiwyMiArMjExOCw2IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTGlnaHRfUGFuZWwgPSAxNjk3MzkxNDsgLy8gMHgxMDMwMDVhCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTGlnaHRfV2FsbHBhcGVyU2V0dGluZ3MgPSAxNjk3MzkyMjsgLy8gMHgxMDMwMDYyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWwgPSAxNjk3NDM3MjsgLy8gMHgxMDMwMjI0Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHQgPSAxNjk3NDU1MjsgLy8gMHgxMDMwMmQ4Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGFya0FjdGlvbkJhciA9IDE2OTc0NTUzOyAvLyAweDEwMzAyZDkKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2cgPSAxNjk3NDU1NDsgLy8gMHgxMDMwMmRhCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nV2hlbkxhcmdlID0gMTY5NzQ1NjA7IC8vIDB4MTAzMDJlMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ1doZW5MYXJnZV9EYXJrQWN0aW9uQmFyID0gMTY5NzQ1Njg7IC8vIDB4MTAzMDJlOAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ1doZW5MYXJnZV9Ob0FjdGlvbkJhciA9IDE2OTc0NTYxOyAvLyAweDEwMzAyZTEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dfQWxlcnQgPSAxNjk3NDU1NTsgLy8gMHgxMDMwMmRiCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX01pbldpZHRoID0gMTY5NzQ1NTY7IC8vIDB4MTAzMDJkYwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RpYWxvZ19Ob0FjdGlvbkJhciA9IDE2OTc0NTU3OyAvLyAweDEwMzAyZGQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9EaWFsb2dfTm9BY3Rpb25CYXJfTWluV2lkdGggPSAxNjk3NDU1ODsgLy8gMHgxMDMwMmRlCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGlhbG9nX1ByZXNlbnRhdGlvbiA9IDE2OTc0NTU5OyAvLyAweDEwMzAyZGYKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhciA9IDE2OTc0NTYyOyAvLyAweDEwMzAyZTIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EYXlOaWdodF9Ob0FjdGlvbkJhcl9GdWxsc2NyZWVuID0gMTY5NzQ1NjM7IC8vIDB4MTAzMDJlMwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X05vQWN0aW9uQmFyX092ZXJzY2FuID0gMTY5NzQ1NjQ7IC8vIDB4MTAzMDJlNAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X05vQWN0aW9uQmFyX1RyYW5zbHVjZW50RGVjb3IgPSAxNjk3NDU2NTsgLy8gMHgxMDMwMmU1Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfUGFuZWwgPSAxNjk3NDU2NjsgLy8gMHgxMDMwMmU2CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfRGlhbG9nID0gMTY5NzQzNzM7IC8vIDB4MTAzMDIyNQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0RpYWxvZ1doZW5MYXJnZSA9IDE2OTc0Mzc5OyAvLyAweDEwMzAyMmIKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIgPSAxNjk3NDM4MDsgLy8gMHgxMDMwMjJjCkBAIC0yMTQxLDcgKzIxMzEsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RhcmtBY3Rpb25CYXIgPSAxNjk3NDM5MjsgLy8gMHgxMDMwMjM4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nID0gMTY5NzQzOTM7IC8vIDB4MTAzMDIzOQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ1doZW5MYXJnZSA9IDE2OTc0Mzk5OyAvLyAweDEwMzAyM2YKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfRGFya0FjdGlvbkJhciA9IDE2OTc0NTY3OyAvLyAweDEwMzAyZTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfRGFya0FjdGlvbkJhciA9IDE2OTc0NTUyOyAvLyAweDEwMzAyZDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUaGVtZV9NYXRlcmlhbF9MaWdodF9EaWFsb2dXaGVuTGFyZ2VfTm9BY3Rpb25CYXIgPSAxNjk3NDQwMDsgLy8gMHgxMDMwMjQwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVGhlbWVfTWF0ZXJpYWxfTGlnaHRfRGlhbG9nX0FsZXJ0ID0gMTY5NzQzOTQ7IC8vIDB4MTAzMDIzYQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRoZW1lX01hdGVyaWFsX0xpZ2h0X0RpYWxvZ19NaW5XaWR0aCA9IDE2OTc0Mzk1OyAvLyAweDEwMzAyM2IKQEAgLTI1NjIsNiArMjU1Miw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1Njcm9sbFZpZXcgPSAxNjk3NDQ2MjsgLy8gMHgxMDMwMjdlCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NlYXJjaFZpZXcgPSAxNjk3NDQ2MzsgLy8gMHgxMDMwMjdmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NlZWtCYXIgPSAxNjk3NDQ2NDsgLy8gMHgxMDMwMjgwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NlZWtCYXJfRGlzY3JldGUgPSAxNjk3NDU1MzsgLy8gMHgxMDMwMmQ5CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV2lkZ2V0X01hdGVyaWFsX1NlZ21lbnRlZEJ1dHRvbiA9IDE2OTc0NDY1OyAvLyAweDEwMzAyODEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfTWF0ZXJpYWxfU3Bpbm5lciA9IDE2OTc0NDY3OyAvLyAweDEwMzAyODMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXaWRnZXRfTWF0ZXJpYWxfU3Bpbm5lcl9VbmRlcmxpbmVkID0gMTY5NzQ0Njg7IC8vIDB4MTAzMDI4NApAQCAtMjYyMSw2ICsyNjEyLDcgQEAKIAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWNjZXNzaWJpbGl0eVNlcnZpY2UgZXh0ZW5kcyBhbmRyb2lkLmFwcC5TZXJ2aWNlIHsKICAgICBjdG9yIHB1YmxpYyBBY2Nlc3NpYmlsaXR5U2VydmljZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBkaXNwYXRjaEdlc3R1cmUoYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24sIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UuR2VzdHVyZVJlc3VsdENhbGxiYWNrLCBhbmRyb2lkLm9zLkhhbmRsZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGZpbmRGb2N1cyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5BY2Nlc3NpYmlsaXR5U2VydmljZS5NYWduaWZpY2F0aW9uQ29udHJvbGxlciBnZXRNYWduaWZpY2F0aW9uQ29udHJvbGxlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU5vZGVJbmZvIGdldFJvb3RJbkFjdGl2ZVdpbmRvdygpOwpAQCAtMjY2MCw2ICsyNjUyLDEyIEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNFUlZJQ0VfTUVUQV9EQVRBID0gImFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UiOwogICB9CiAKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBY2Nlc3NpYmlsaXR5U2VydmljZS5HZXN0dXJlUmVzdWx0Q2FsbGJhY2sgeworICAgIGN0b3IgcHVibGljIEFjY2Vzc2liaWxpdHlTZXJ2aWNlLkdlc3R1cmVSZXN1bHRDYWxsYmFjaygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkNhbmNlbGxlZChhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uQ29tcGxldGVkKGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uKTsKKyAgfQorCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgQWNjZXNzaWJpbGl0eVNlcnZpY2UuTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIgewogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBhZGRMaXN0ZW5lcihhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlLk1hZ25pZmljYXRpb25Db250cm9sbGVyLk9uTWFnbmlmaWNhdGlvbkNoYW5nZWRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UuTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuT25NYWduaWZpY2F0aW9uQ2hhbmdlZExpc3RlbmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIpOwpAQCAtMjY5Miw2ICsyNjkwLDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgbG9hZERlc2NyaXB0aW9uKGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fQ09OVFJPTF9NQUdOSUZJQ0FUSU9OID0gMTY7IC8vIDB4MTAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTID0gMzI7IC8vIDB4MjAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX0NBTl9SRVFVRVNUX0VOSEFOQ0VEX1dFQl9BQ0NFU1NJQklMSVRZID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUkVRVUVTVF9GSUxURVJfS0VZX0VWRU5UUyA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfVE9VQ0hfRVhQTE9SQVRJT04gPSAyOyAvLyAweDIKQEAgLTI3MTgsNiArMjcxNywzMCBAQAogICAgIGZpZWxkIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gcGFja2FnZU5hbWVzOwogICB9CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIEdlc3R1cmVEZXNjcmlwdGlvbiB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlQ2xpY2soaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uIGNyZWF0ZUxvbmdDbGljayhpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlUGluY2goaW50LCBpbnQsIGludCwgaW50LCBmbG9hdCwgbG9uZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5HZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlU3dpcGUoaW50LCBpbnQsIGludCwgaW50LCBsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uLlN0cm9rZURlc2NyaXB0aW9uIGdldFN0cm9rZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFN0cm9rZUNvdW50KCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1BWF9HRVNUVVJFX0RVUkFUSU9OX01TID0gNjAwMDBMOyAvLyAweGVhNjBMCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NUUk9LRV9DT1VOVCA9IDEwOyAvLyAweGEKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgY2xhc3MgR2VzdHVyZURlc2NyaXB0aW9uLkJ1aWxkZXIgeworICAgIGN0b3IgcHVibGljIEdlc3R1cmVEZXNjcmlwdGlvbi5CdWlsZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbi5CdWlsZGVyIGFkZFN0cm9rZShhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbi5TdHJva2VEZXNjcmlwdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkdlc3R1cmVEZXNjcmlwdGlvbiBidWlsZCgpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBHZXN0dXJlRGVzY3JpcHRpb24uU3Ryb2tlRGVzY3JpcHRpb24geworICAgIGN0b3IgcHVibGljIEdlc3R1cmVEZXNjcmlwdGlvbi5TdHJva2VEZXNjcmlwdGlvbihhbmRyb2lkLmdyYXBoaWNzLlBhdGgsIGxvbmcsIGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXREdXJhdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5QYXRoIGdldFBhdGgoKTsKKyAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0U3RhcnRUaW1lKCk7CisgIH0KKwogfQogCiBwYWNrYWdlIGFuZHJvaWQuYWNjb3VudHMgewpAQCAtMjcyOCwxNSArMjc1MSwxMiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgYWRkQWNjb3VudEZyb21DcmVkZW50aWFscyhhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQub3MuQnVuZGxlIGNvbmZpcm1DcmVkZW50aWFscyhhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQub3MuQnVuZGxlIGVkaXRQcm9wZXJ0aWVzKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBmaW5pc2hTZXNzaW9uKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGdldEFjY291bnRDcmVkZW50aWFsc0ZvckNsb25pbmcoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQub3MuQnVuZGxlIGdldEFjY291bnRSZW1vdmFsQWxsb3dlZChhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCkgdGhyb3dzIGFuZHJvaWQuYWNjb3VudHMuTmV0d29ya0Vycm9yRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0QXV0aFRva2VuKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSkgdGhyb3dzIGFuZHJvaWQuYWNjb3VudHMuTmV0d29ya0Vycm9yRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLlN0cmluZyBnZXRBdXRoVG9rZW5MYWJlbChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGFuZHJvaWQub3MuSUJpbmRlciBnZXRJQmluZGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLm9zLkJ1bmRsZSBoYXNGZWF0dXJlcyhhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZ1tdKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBzdGFydEFkZEFjY291bnRTZXNzaW9uKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZ1tdLCBhbmRyb2lkLm9zLkJ1bmRsZSkgdGhyb3dzIGFuZHJvaWQuYWNjb3VudHMuTmV0d29ya0Vycm9yRXhjZXB0aW9uOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgc3RhcnRVcGRhdGVDcmVkZW50aWFsc1Nlc3Npb24oYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKSB0aHJvd3MgYW5kcm9pZC5hY2NvdW50cy5OZXR3b3JrRXJyb3JFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLm9zLkJ1bmRsZSB1cGRhdGVDcmVkZW50aWFscyhhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UsIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUpIHRocm93cyBhbmRyb2lkLmFjY291bnRzLk5ldHdvcmtFcnJvckV4Y2VwdGlvbjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX0NVU1RPTV9UT0tFTl9FWFBJUlkgPSAiYW5kcm9pZC5hY2NvdW50cy5leHBpcnkiOwogICB9CkBAIC0yNzc0LDcgKzI3OTQsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbGVhclBhc3N3b3JkKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyRnV0dXJlPGFuZHJvaWQub3MuQnVuZGxlPiBjb25maXJtQ3JlZGVudGlhbHMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5hcHAuQWN0aXZpdHksIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJDYWxsYmFjazxhbmRyb2lkLm9zLkJ1bmRsZT4sIGFuZHJvaWQub3MuSGFuZGxlcik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyRnV0dXJlPGFuZHJvaWQub3MuQnVuZGxlPiBlZGl0UHJvcGVydGllcyhqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLmFwcC5BY3Rpdml0eSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckNhbGxiYWNrPGFuZHJvaWQub3MuQnVuZGxlPiwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJGdXR1cmU8YW5kcm9pZC5vcy5CdW5kbGU+IGZpbmlzaFNlc3Npb24oYW5kcm9pZC5vcy5CdW5kbGUsIGFuZHJvaWQuYXBwLkFjdGl2aXR5LCBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8YW5kcm9pZC5vcy5CdW5kbGU+LCBhbmRyb2lkLm9zLkhhbmRsZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXIgZ2V0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudFtdIGdldEFjY291bnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFjY291bnRzLkFjY291bnRbXSBnZXRBY2NvdW50c0J5VHlwZShqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTI4MDIsOCArMjgyMSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEF1dGhUb2tlbihhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZChhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRVc2VyRGF0YShhbmRyb2lkLmFjY291bnRzLkFjY291bnQsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckZ1dHVyZTxhbmRyb2lkLm9zLkJ1bmRsZT4gc3RhcnRBZGRBY2NvdW50U2Vzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10sIGFuZHJvaWQub3MuQnVuZGxlLCBhbmRyb2lkLmFwcC5BY3Rpdml0eSwgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckNhbGxiYWNrPGFuZHJvaWQub3MuQnVuZGxlPiwgYW5kcm9pZC5vcy5IYW5kbGVyKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJGdXR1cmU8YW5kcm9pZC5vcy5CdW5kbGU+IHN0YXJ0VXBkYXRlQ3JlZGVudGlhbHNTZXNzaW9uKGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudCwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUsIGFuZHJvaWQuYXBwLkFjdGl2aXR5LCBhbmRyb2lkLmFjY291bnRzLkFjY291bnRNYW5hZ2VyQ2FsbGJhY2s8YW5kcm9pZC5vcy5CdW5kbGU+LCBhbmRyb2lkLm9zLkhhbmRsZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlckZ1dHVyZTxhbmRyb2lkLm9zLkJ1bmRsZT4gdXBkYXRlQ3JlZGVudGlhbHMoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSwgYW5kcm9pZC5hcHAuQWN0aXZpdHksIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJDYWxsYmFjazxhbmRyb2lkLm9zLkJ1bmRsZT4sIGFuZHJvaWQub3MuSGFuZGxlcik7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9BVVRIRU5USUNBVE9SX0lOVEVOVCA9ICJhbmRyb2lkLmFjY291bnRzLkFjY291bnRBdXRoZW50aWNhdG9yIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQVVUSEVOVElDQVRPUl9BVFRSSUJVVEVTX05BTUUgPSAiYWNjb3VudC1hdXRoZW50aWNhdG9yIjsKQEAgLTI4MjAsOCArMjgzNyw2IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BQ0NPVU5UX0FVVEhFTlRJQ0FUT1JfUkVTUE9OU0UgPSAiYWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BQ0NPVU5UX01BTkFHRVJfUkVTUE9OU0UgPSAiYWNjb3VudE1hbmFnZXJSZXNwb25zZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BQ0NPVU5UX05BTUUgPSAiYXV0aEFjY291bnQiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9TRVNTSU9OX0JVTkRMRSA9ICJhY2NvdW50U2Vzc2lvbkJ1bmRsZSI7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BQ0NPVU5UX1NUQVRVU19UT0tFTiA9ICJhY2NvdW50U3RhdHVzVG9rZW4iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBLRVlfQUNDT1VOVF9UWVBFID0gImFjY291bnRUeXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgS0VZX0FORFJPSURfUEFDS0FHRV9OQU1FID0gImFuZHJvaWRQYWNrYWdlTmFtZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEtFWV9BVVRIRU5USUNBVE9SX1RZUEVTID0gImF1dGhlbnRpY2F0b3JfdHlwZXMiOwpAQCAtMzM3Miw2ICszMzg3LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZGlzcGF0Y2hUb3VjaEV2ZW50KGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGRpc3BhdGNoVHJhY2tiYWxsRXZlbnQoYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZHVtcChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yLCBqYXZhLmlvLlByaW50V3JpdGVyLCBqYXZhLmxhbmcuU3RyaW5nW10pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmVNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuVmlldyBmaW5kVmlld0J5SWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZmluaXNoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGZpbmlzaEFjdGl2aXR5KGludCk7CkBAIC0zNDgyLDYgKzM0OTgsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblByZXBhcmVQYW5lbChpbnQsIGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUFzc2lzdENvbnRlbnQoYW5kcm9pZC5hcHAuYXNzaXN0LkFzc2lzdENvbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblByb3ZpZGVBc3Npc3REYXRhKGFuZHJvaWQub3MuQnVuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4sIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubmV0LlVyaSBvblByb3ZpZGVSZWZlcnJlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlcXVlc3RQZXJtaXNzaW9uc1Jlc3VsdChpbnQsIGphdmEubGFuZy5TdHJpbmdbXSwgaW50W10pOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgdm9pZCBvblJlc3RhcnQoKTsKQEAgLTM1MTcsNiArMzUzNCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbGVhc2VJbnN0YW5jZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgZGVwcmVjYXRlZCB2b2lkIHJlbW92ZURpYWxvZyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXBvcnRGdWxseURyYXduKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoYW5kcm9pZC52aWV3LkRyYWdFdmVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RQZXJtaXNzaW9ucyhqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlcXVlc3RWaXNpYmxlQmVoaW5kKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiByZXF1ZXN0V2luZG93RmVhdHVyZShpbnQpOwpAQCAtMzU1MSw2ICszNTY5LDcgQEAKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBzZXRUaXRsZUNvbG9yKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZpc2libGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHNldFZvbHVtZUNvbnRyb2xTdHJlYW0oaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG91bGRTaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNob3VsZFVwUmVjcmVhdGVUYXNrKGFuZHJvaWQuY29udGVudC5JbnRlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzaG93QXNzaXN0KGFuZHJvaWQub3MuQnVuZGxlKTsKQEAgLTM2NTAsNiArMzY2OSw5IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN0YXJ0QWN0aXZpdHkoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuY29udGVudC5JbnRlbnQsIGFuZHJvaWQub3MuQnVuZGxlKTsKICAgfQogCisgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQWN0aXZpdHlNYW5hZ2VyLkJ1Z3JlcG9ydE1vZGUgaW1wbGVtZW50cyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uIHsKKyAgfQorCiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQWN0aXZpdHlNYW5hZ2VyLk1lbW9yeUluZm8gaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIGN0b3IgcHVibGljIEFjdGl2aXR5TWFuYWdlci5NZW1vcnlJbmZvKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpOwpAQCAtNDA5MywxMSArNDExNSwxNCBAQAogICB9CiAKICAgcHVibGljIGNsYXNzIERhdGVQaWNrZXJEaWFsb2cgZXh0ZW5kcyBhbmRyb2lkLmFwcC5BbGVydERpYWxvZyBpbXBsZW1lbnRzIGFuZHJvaWQud2lkZ2V0LkRhdGVQaWNrZXIuT25EYXRlQ2hhbmdlZExpc3RlbmVyIGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIHsKKyAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKKyAgICBjdG9yIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXJEaWFsb2coYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQuYXBwLkRhdGVQaWNrZXJEaWFsb2cuT25EYXRlU2V0TGlzdGVuZXIsIGludCwgaW50LCBpbnQpOwogICAgIGN0b3IgcHVibGljIERhdGVQaWNrZXJEaWFsb2coYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCwgYW5kcm9pZC5hcHAuRGF0ZVBpY2tlckRpYWxvZy5PbkRhdGVTZXRMaXN0ZW5lciwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyIGdldERhdGVQaWNrZXIoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbGljayhhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKGFuZHJvaWQud2lkZ2V0LkRhdGVQaWNrZXIsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPbkRhdGVTZXRMaXN0ZW5lcihhbmRyb2lkLmFwcC5EYXRlUGlja2VyRGlhbG9nLk9uRGF0ZVNldExpc3RlbmVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQsIGludCwgaW50KTsKICAgfQogCkBAIC00MTU4LDYgKzQxODMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblBhbmVsQ2xvc2VkKGludCwgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblByZXBhcmVPcHRpb25zTWVudShhbmRyb2lkLnZpZXcuTWVudSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uUHJlcGFyZVBhbmVsKGludCwgYW5kcm9pZC52aWV3LlZpZXcsIGFuZHJvaWQudmlldy5NZW51KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoamF2YS51dGlsLkxpc3Q8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cD4sIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLkJ1bmRsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uU2VhcmNoUmVxdWVzdGVkKGFuZHJvaWQudmlldy5TZWFyY2hFdmVudCk7CkBAIC00MjM3LDcgKzQyNjMsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fREVTQ1JJUFRJT04gPSAiZGVzY3JpcHRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fSUQgPSAiX2lkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xBU1RfTU9ESUZJRURfVElNRVNUQU1QID0gImxhc3RfbW9kaWZpZWRfdGltZXN0YW1wIjsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX0xPQ0FMX0ZJTEVOQU1FID0gImxvY2FsX2ZpbGVuYW1lIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTE9DQUxfRklMRU5BTUUgPSAibG9jYWxfZmlsZW5hbWUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fTE9DQUxfVVJJID0gImxvY2FsX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9NRURJQVBST1ZJREVSX1VSSSA9ICJtZWRpYXByb3ZpZGVyX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9NRURJQV9UWVBFID0gIm1lZGlhX3R5cGUiOwpAQCAtNDg0OSw2ICs0ODc1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfUFJPR1JFU1MgPSAiYW5kcm9pZC5wcm9ncmVzcyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1BST0dSRVNTX0lOREVURVJNSU5BVEUgPSAiYW5kcm9pZC5wcm9ncmVzc0luZGV0ZXJtaW5hdGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9QUk9HUkVTU19NQVggPSAiYW5kcm9pZC5wcm9ncmVzc01heCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1JFTU9URV9JTlBVVF9ISVNUT1JZID0gImFuZHJvaWQucmVtb3RlSW5wdXRIaXN0b3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfU0hPV19DSFJPTk9NRVRFUiA9ICJhbmRyb2lkLnNob3dDaHJvbm9tZXRlciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX1NIT1dfV0hFTiA9ICJhbmRyb2lkLnNob3dXaGVuIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRVhUUkFfU01BTExfSUNPTiA9ICJhbmRyb2lkLmljb24iOwpAQCAtNTAxNSw2ICs1MDQyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFByaW9yaXR5KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQcm9ncmVzcyhpbnQsIGludCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRQdWJsaWNWZXJzaW9uKGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRSZW1vdGVJbnB1dEhpc3RvcnkoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZVtdKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyIHNldFNob3dXaGVuKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkJ1aWxkZXIgc2V0U21hbGxJY29uKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlciBzZXRTbWFsbEljb24oaW50LCBpbnQpOwpAQCAtNTIwNCw2ICs1MjMyLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVFNfVU5TRVQgPSAtMTsgLy8gMHhmZmZmZmZmZgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04gPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgZmluYWwgaW50IHByaW9yaXR5Q2FsbFNlbmRlcnM7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eUNhdGVnb3JpZXM7CiAgICAgZmllbGQgcHVibGljIGZpbmFsIGludCBwcmlvcml0eU1lc3NhZ2VTZW5kZXJzOwpAQCAtNTUwNyw4ICs1NTM2LDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuV2luZG93QW5pbWF0aW9uRnJhbWVTdGF0cyBnZXRXaW5kb3dBbmltYXRpb25GcmFtZVN0YXRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuV2luZG93Q29udGVudEZyYW1lU3RhdHMgZ2V0V2luZG93Q29udGVudEZyYW1lU3RhdHMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlXaW5kb3dJbmZvPiBnZXRXaW5kb3dzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdyYW50UnVudGltZVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaW5qZWN0SW5wdXRFdmVudChhbmRyb2lkLnZpZXcuSW5wdXRFdmVudCwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBib29sZWFuIHBlcmZvcm1HbG9iYWxBY3Rpb24oaW50KTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmV2b2tlUnVudGltZVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T25BY2Nlc3NpYmlsaXR5RXZlbnRMaXN0ZW5lcihhbmRyb2lkLmFwcC5VaUF1dG9tYXRpb24uT25BY2Nlc3NpYmlsaXR5RXZlbnRMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldFJvdGF0aW9uKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJ1bkFzTW9ua2V5KGJvb2xlYW4pOwpAQCAtNTY1Niw4ICs1Njg3LDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIHBlZWtGYXN0RHJhd2FibGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2VuZFdhbGxwYXBlckNvbW1hbmQoYW5kcm9pZC5vcy5JQmluZGVyLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50LCBhbmRyb2lkLm9zLkJ1bmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJpdG1hcChhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEJpdG1hcChhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LCBib29sZWFuKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UmVzb3VyY2UoaW50KSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3RyZWFtKGphdmEuaW8uSW5wdXRTdHJlYW0pIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTdHJlYW0oamF2YS5pby5JbnB1dFN0cmVhbSwgYW5kcm9pZC5ncmFwaGljcy5SZWN0LCBib29sZWFuKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0V2FsbHBhcGVyT2Zmc2V0U3RlcHMoZmxvYXQsIGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0V2FsbHBhcGVyT2Zmc2V0cyhhbmRyb2lkLm9zLklCaW5kZXIsIGZsb2F0LCBmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1Z2dlc3REZXNpcmVkRGltZW5zaW9ucyhpbnQsIGludCk7CkBAIC01NzUxLDE4ICs1Nzg0LDIzIEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0QWNjb3VudFR5cGVzV2l0aE1hbmFnZW1lbnREaXNhYmxlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU+IGdldEFjdGl2ZUFkbWlucygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldEF1dG9UaW1lUmVxdWlyZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0Qmx1ZXRvb3RoQ29udGFjdFNoYXJpbmdEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldENhbWVyYURpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Q2VydEluc3RhbGxlclBhY2thZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpIHRocm93cyBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldENyb3NzUHJvZmlsZUNhbGxlcklkRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRDcm9zc1Byb2ZpbGVDb250YWN0c1NlYXJjaERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGphdmEubGFuZy5TdHJpbmc+IGdldENyb3NzUHJvZmlsZVdpZGdldFByb3ZpZGVycyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0Q3VycmVudEZhaWxlZFBhc3N3b3JkQXR0ZW1wdHMoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGV2aWNlT3duZXJMb2NrU2NyZWVuSW5mbygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8Ynl0ZVtdPiBnZXRJbnN0YWxsZWRDYUNlcnRzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0TWF4aW11bVRpbWVUb0xvY2soYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRQYWNrYWdlU3VzcGVuZGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXIgZ2V0UGFyZW50UHJvZmlsZUluc3RhbmNlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UGFzc3dvcmRFeHBpcmF0aW9uKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UGFzc3dvcmRFeHBpcmF0aW9uVGltZW91dChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKQEAgLTU3ODAsNiArNTgxOCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxqYXZhLmxhbmcuU3RyaW5nPiBnZXRQZXJtaXR0ZWRBY2Nlc3NpYmlsaXR5U2VydmljZXMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5sYW5nLlN0cmluZz4gZ2V0UGVybWl0dGVkSW5wdXRNZXRob2RzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZ2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGdldFN0b3JhZ2VFbmNyeXB0aW9uKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRTdG9yYWdlRW5jcnlwdGlvblN0YXR1cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuYWRtaW4uU3lzdGVtVXBkYXRlUG9saWN5IGdldFN5c3RlbVVwZGF0ZVBvbGljeSgpOwpAQCAtNTc5Myw2ICs1ODMyLDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBY3RpdmVQYXNzd29yZFN1ZmZpY2llbnQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNBZG1pbkFjdGl2ZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQXBwbGljYXRpb25IaWRkZW4oYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0NhbGxlckFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRGV2aWNlT3duZXJBcHAoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzTG9ja1Rhc2tQZXJtaXR0ZWQoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzTWFzdGVyVm9sdW1lTXV0ZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwpAQCAtNTgwMCw2ICs1ODQwLDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNQcm92aXNpb25pbmdBbGxvd2VkKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VuaW5zdGFsbEJsb2NrZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBsb2NrTm93KCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlYm9vdChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZUFjdGl2ZUFkbWluKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiByZW1vdmVLZXlQYWlyKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKQEAgLTU4MDgsMTkgKzU4NDksMjMgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QWNjb3VudE1hbmFnZW1lbnREaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHNldEFwcGxpY2F0aW9uSGlkZGVuKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBdXRvVGltZVJlcXVpcmVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Qmx1ZXRvb3RoQ29udGFjdFNoYXJpbmdEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENhbWVyYURpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q2VydEluc3RhbGxlclBhY2thZ2UoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldENyb3NzUHJvZmlsZUNhbGxlcklkRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRDcm9zc1Byb2ZpbGVDb250YWN0c1NlYXJjaERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RGV2aWNlT3duZXJMb2NrU2NyZWVuSW5mbyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldEdsb2JhbFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRLZXlndWFyZERpc2FibGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRMb2NrVGFza1BhY2thZ2VzKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExvbmdTdXBwb3J0TWVzc2FnZShhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1hc3RlclZvbHVtZU11dGVkKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWF4aW11bUZhaWxlZFBhc3N3b3Jkc0ZvcldpcGUoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE1heGltdW1UaW1lVG9Mb2NrKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBsb25nKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgamF2YS5sYW5nLlN0cmluZywgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkRXhwaXJhdGlvblRpbWVvdXQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZEhpc3RvcnlMZW5ndGgoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkTWluaW11bUxlbmd0aChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50KTsKQEAgLTU4NDEsNiArNTg4Niw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJlc3RyaWN0aW9uc1Byb3ZpZGVyKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNjcmVlbkNhcHR1cmVEaXNhYmxlZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFNlY3VyZVNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0U3RhdHVzQmFyRGlzYWJsZWQoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHNldFN0b3JhZ2VFbmNyeXB0aW9uKGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U3lzdGVtVXBkYXRlUG9saWN5KGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lLCBhbmRyb2lkLmFwcC5hZG1pbi5TeXN0ZW1VcGRhdGVQb2xpY3kpOwpAQCAtNjExOSw2ICs2MTY1LDcgQEAKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0QmFja29mZlBvbGljeSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5QZXJzaXN0YWJsZUJ1bmRsZSBnZXRFeHRyYXMoKTsKKyAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0RmxleE1pbGxpcygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldElkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEluaXRpYWxCYWNrb2ZmTWlsbGlzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldEludGVydmFsTWlsbGlzKCk7CkBAIC02MTM2LDYgKzYxODMsOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC5hcHAuam9iLkpvYkluZm8+IENSRUFUT1I7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIERFRkFVTFRfSU5JVElBTF9CQUNLT0ZGX01JTExJUyA9IDMwMDAwTDsgLy8gMHg3NTMwTAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBNQVhfQkFDS09GRl9ERUxBWV9NSUxMSVMgPSAxODAwMDAwMEw7IC8vIDB4MTEyYTg4MEwKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUlOX0ZMRVhfTUlMTElTID0gMzAwMDAwTDsgLy8gMHg0OTNlMEwKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUlOX1BFUklPRF9NSUxMSVMgPSAzNjAwMDAwTDsgLy8gMHgzNmVlODBMCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19UWVBFX0FOWSA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVFlQRV9OT05FID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTkVUV09SS19UWVBFX1VOTUVURVJFRCA9IDI7IC8vIDB4MgpAQCAtNjE0OSw2ICs2MTk4LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0TWluaW11bUxhdGVuY3kobG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldE92ZXJyaWRlRGVhZGxpbmUobG9uZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldFBlcmlvZGljKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRQZXJpb2RpYyhsb25nLCBsb25nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuYXBwLmpvYi5Kb2JJbmZvLkJ1aWxkZXIgc2V0UGVyc2lzdGVkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBzZXRSZXF1aXJlZE5ldHdvcmtUeXBlKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmFwcC5qb2IuSm9iSW5mby5CdWlsZGVyIHNldFJlcXVpcmVzQ2hhcmdpbmcoYm9vbGVhbik7CkBAIC02MjA5LDYgKzYyNTksOCBAQAogICBwdWJsaWMgc3RhdGljIGNsYXNzIE5ldHdvcmtTdGF0cy5CdWNrZXQgewogICAgIGN0b3IgcHVibGljIE5ldHdvcmtTdGF0cy5CdWNrZXQoKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0RW5kVGltZVN0YW1wKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TWV0ZXJpbmcoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRSb2FtaW5nKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFJ4Qnl0ZXMoKTsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0UnhQYWNrZXRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFN0YXJ0VGltZVN0YW1wKCk7CkBAIC02MjE2LDYgKzYyNjgsMTIgQEAKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0VHhCeXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgbG9uZyBnZXRUeFBhY2tldHMoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRVaWQoKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVRFUklOR19BTEwgPSAtMTsgLy8gMHhmZmZmZmZmZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FVEVSSU5HX0RFRkFVTFQgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVRFUklOR19NRVRFUkVEID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9BTUlOR19BTEwgPSAtMTsgLy8gMHhmZmZmZmZmZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQU1JTkdfREVGQVVMVCA9IDE7IC8vIDB4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQU1JTkdfUk9BTUlORyA9IDI7IC8vIDB4MgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0FMTCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfREVGQVVMVCA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0ZPUkVHUk9VTkQgPSAyOyAvLyAweDIKQEAgLTc1NjYsMTEgKzc2MjQsMTIgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgd3JpdGVEYXRhVG9QaXBlKGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3IsIGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5CdW5kbGUsIFQpOwogICB9CiAKLSAgcHVibGljIGNsYXNzIENvbnRlbnRQcm92aWRlckNsaWVudCB7CisgIHB1YmxpYyBjbGFzcyBDb250ZW50UHJvdmlkZXJDbGllbnQgaW1wbGVtZW50cyBqYXZhLmxhbmcuQXV0b0Nsb3NlYWJsZSB7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyUmVzdWx0W10gYXBwbHlCYXRjaChqYXZhLnV0aWwuQXJyYXlMaXN0PGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJPcGVyYXRpb24+KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50Lk9wZXJhdGlvbkFwcGxpY2F0aW9uRXhjZXB0aW9uLCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBidWxrSW5zZXJ0KGFuZHJvaWQubmV0LlVyaSwgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXNbXSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5CdW5kbGUgY2FsbChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm9zLkJ1bmRsZSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5uZXQuVXJpIGNhbm9uaWNhbGl6ZShhbmRyb2lkLm5ldC5VcmkpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgY2xvc2UoKTsKICAgICBtZXRob2QgcHVibGljIGludCBkZWxldGUoYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10pIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXIgZ2V0TG9jYWxDb250ZW50UHJvdmlkZXIoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRTdHJlYW1UeXBlcyhhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKQEAgLTc1ODQsNyArNzY0Myw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0RmlsZURlc2NyaXB0b3Igb3BlblR5cGVkQXNzZXRGaWxlRGVzY3JpcHRvcihhbmRyb2lkLm5ldC5VcmksIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQnVuZGxlLCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbCkgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yIHF1ZXJ5KGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10sIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yIHF1ZXJ5KGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZ1tdLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nW10sIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIHJlbGVhc2UoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiByZWxlYXNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgdW5jYW5vbmljYWxpemUoYW5kcm9pZC5uZXQuVXJpKSB0aHJvd3MgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgdXBkYXRlKGFuZHJvaWQubmV0LlVyaSwgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXMsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICB9CkBAIC03NjY2LDYgKzc3MjUsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5QZXJpb2RpY1N5bmM+IGdldFBlcmlvZGljU3luY3MoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5VcmlQZXJtaXNzaW9uPiBnZXRQZXJzaXN0ZWRVcmlQZXJtaXNzaW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFN0cmVhbVR5cGVzKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZ1tdIGdldFN5bmNBZGFwdGVyUGFja2FnZXNGb3JBdXRob3JpdHlBc1VzZXIoamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuU3luY0FkYXB0ZXJUeXBlW10gZ2V0U3luY0FkYXB0ZXJUeXBlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0U3luY0F1dG9tYXRpY2FsbHkoYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0VHlwZShhbmRyb2lkLm5ldC5VcmkpOwpAQCAtNzc4MCw4ICs3ODQwLDcgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBjaGVja1VyaVBlcm1pc3Npb24oYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBjbGVhcldhbGxwYXBlcigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KGFuZHJvaWQudmlldy5EaXNwbGF5KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZVBhY2thZ2VDb250ZXh0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nW10gZGF0YWJhc2VMaXN0KCk7CkBAIC03ODMzLDEyICs3ODkyLDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldFN5c3RlbVNlcnZpY2VOYW1lKGphdmEubGFuZy5DbGFzczw/Pik7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldFRleHQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLlRoZW1lIGdldFRoZW1lKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VXNlcklkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0V2FsbHBhcGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBkZXByZWNhdGVkIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bUhlaWdodCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgZGVwcmVjYXRlZCBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1XaWR0aCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBncmFudFVyaVBlcm1pc3Npb24oamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5uZXQuVXJpLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKTsKLSAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzUmVzdHJpY3RlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50W10pOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5IG9idGFpblN0eWxlZEF0dHJpYnV0ZXMoaW50LCBpbnRbXSkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtNzk3MCw4ICs4MDI5LDcgQEAKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1VyaVBlcm1pc3Npb24oYW5kcm9pZC5uZXQuVXJpLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgdm9pZCBjbGVhcldhbGxwYXBlcigpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ29uZmlndXJhdGlvbkNvbnRleHQoYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uKTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKLSAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZURpc3BsYXlDb250ZXh0KGFuZHJvaWQudmlldy5EaXNwbGF5KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5Db250ZXh0IGNyZWF0ZVBhY2thZ2VDb250ZXh0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZGF0YWJhc2VMaXN0KCk7CkBAIC04MDE3LDEyICs4MDc1LDEyIEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuT2JqZWN0IGdldFN5c3RlbVNlcnZpY2UoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFN5c3RlbVNlcnZpY2VOYW1lKGphdmEubGFuZy5DbGFzczw/Pik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5UaGVtZSBnZXRUaGVtZSgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFVzZXJJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldFdhbGxwYXBlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1IZWlnaHQoKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgaW50IGdldFdhbGxwYXBlckRlc2lyZWRNaW5pbXVtV2lkdGgoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgZ3JhbnRVcmlQZXJtaXNzaW9uKGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQubmV0LlVyaSwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkU3RvcmFnZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlSW5wdXRTdHJlYW0gb3BlbkZpbGVJbnB1dChqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0gb3BlbkZpbGVPdXRwdXQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZSBvcGVuT3JDcmVhdGVEYXRhYmFzZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlLkN1cnNvckZhY3RvcnkpOwpAQCAtODQ5MCw2ICs4NTQ4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTID0gODM4ODYwODsgLy8gMHg4MDAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0ZPUldBUkRfUkVTVUxUID0gMzM1NTQ0MzI7IC8vIDB4MjAwMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUNUSVZJVFlfTEFVTkNIRURfRlJPTV9ISVNUT1JZID0gMTA0ODU3NjsgLy8gMHgxMDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0xBVU5DSF9UT19TSURFID0gNDA5NjsgLy8gMHgxMDAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLID0gMTM0MjE3NzI4OyAvLyAweDgwMDAwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCA9IDUyNDI4ODsgLy8gMHg4MDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgPSAyNjg0MzU0NTY7IC8vIDB4MTAwMDAwMDAKQEAgLTkwMDEsNiArOTA2MCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BTFdBWVNfUkVUQUlOX1RBU0tfU1RBVEUgPSA4OyAvLyAweDgKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FVVE9fUkVNT1ZFX0ZST01fUkVDRU5UUyA9IDgxOTI7IC8vIDB4MjAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ0xFQVJfVEFTS19PTl9MQVVOQ0ggPSA0OyAvLyAweDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0VOQUJMRV9WUl9NT0RFID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRVhDTFVERV9GUk9NX1JFQ0VOVFMgPSAzMjsgLy8gMHgyMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOSVNIX09OX0NMT1NFX1NZU1RFTV9ESUFMT0dTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOSVNIX09OX1RBU0tfTEFVTkNIID0gMjsgLy8gMHgyCkBAIC05MDY4LDYgKzkxMjgsOCBAQAogICAgIGN0b3IgcHVibGljIEFwcGxpY2F0aW9uSW5mbyhhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGR1bXAoYW5kcm9pZC51dGlsLlByaW50ZXIsIGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1ByaXZpbGVnZWRBcHAoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNTeXN0ZW1BcHAoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgbG9hZERlc2NyaXB0aW9uKGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcik7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvPiBDUkVBVE9SOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUxMT1dfQkFDS1VQID0gMzI3Njg7IC8vIDB4ODAwMApAQCAtOTA5Niw2ICs5MTU4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NDUkVFTl9ERU5TSVRJRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1NNQUxMX1NDUkVFTlMgPSA1MTI7IC8vIDB4MjAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19YTEFSR0VfU0NSRUVOUyA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VTUEVOREVEID0gMTA3Mzc0MTgyNDsgLy8gMHg0MDAwMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1lTVEVNID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19URVNUX09OTFkgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19VUERBVEVEX1NZU1RFTV9BUFAgPSAxMjg7IC8vIDB4ODAKQEAgLTk0MjgsOSArOTQ5MSw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXREcmF3YWJsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYnl0ZVtdIGdldEVwaGVtZXJhbENvb2tpZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbz4gZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldEluc3RhbGxlclBhY2thZ2VOYW1lKGphdmEubGFuZy5TdHJpbmcpOwpAQCAtOTQ0MCw4ICs5NTAyLDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWVGb3JVaWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbyBnZXRQYWNrYWdlQXJjaGl2ZUluZm8oamF2YS5sYW5nLlN0cmluZywgaW50KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGludFtdIGdldFBhY2thZ2VHaWRzKGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50W10gZ2V0UGFja2FnZUdpZHMoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbnN0YWxsZXIgZ2V0UGFja2FnZUluc3RhbGxlcigpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBhY2thZ2VVaWQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEubGFuZy5TdHJpbmdbXSBnZXRQYWNrYWdlc0ZvclVpZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvPiBnZXRQYWNrYWdlc0hvbGRpbmdQZXJtaXNzaW9ucyhqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBhbmRyb2lkLmNvbnRlbnQucG0uUGVybWlzc2lvbkdyb3VwSW5mbyBnZXRQZXJtaXNzaW9uR3JvdXBJbmZvKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CkBAIC05NDYyLDcgKzk1MjYsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRVc2VyQmFkZ2VkTGFiZWwoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSwgYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGFuZHJvaWQuY29udGVudC5yZXMuWG1sUmVzb3VyY2VQYXJzZXIgZ2V0WG1sKGphdmEubGFuZy5TdHJpbmcsIGludCwgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc1N5c3RlbUZlYXR1cmUoamF2YS5sYW5nLlN0cmluZyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRXBoZW1lcmFsQXBwbGljYXRpb24oKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNQZXJtaXNzaW9uUmV2b2tlZEJ5UG9saWN5KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1NhZmVNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKGFuZHJvaWQuY29udGVudC5JbnRlbnQsIGludCk7CkBAIC05NDgwLDcgKzk1NDMsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKGFuZHJvaWQuY29udGVudC5JbnRlbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldEFwcGxpY2F0aW9uRW5hYmxlZFNldHRpbmcoamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSwgaW50LCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHZlcmlmeVBlbmRpbmdJbnN0YWxsKGludCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01QT05FTlRfRU5BQkxFRF9TVEFURV9ERUZBVUxUID0gMDsgLy8gMHgwCkBAIC05NTEyLDYgKzk1NzQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0NPTk5FQ1RJT05fU0VSVklDRSA9ICJhbmRyb2lkLnNvZnR3YXJlLmNvbm5lY3Rpb25zZXJ2aWNlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9DT05TVU1FUl9JUiA9ICJhbmRyb2lkLmhhcmR3YXJlLmNvbnN1bWVyaXIiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX0RFVklDRV9BRE1JTiA9ICJhbmRyb2lkLnNvZnR3YXJlLmRldmljZV9hZG1pbiI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfRVRIRVJORVQgPSAiYW5kcm9pZC5oYXJkd2FyZS5ldGhlcm5ldCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfRkFLRVRPVUNIID0gImFuZHJvaWQuaGFyZHdhcmUuZmFrZXRvdWNoIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0hfTVVMVElUT1VDSF9ESVNUSU5DVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmZha2V0b3VjaC5tdWx0aXRvdWNoLmRpc3RpbmN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9GQUtFVE9VQ0hfTVVMVElUT1VDSF9KQVpaSEFORCA9ICJhbmRyb2lkLmhhcmR3YXJlLmZha2V0b3VjaC5tdWx0aXRvdWNoLmphenpoYW5kIjsKQEAgLTk1MzMsNiArOTU5Niw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfTkZDID0gImFuZHJvaWQuaGFyZHdhcmUubmZjIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9ORkNfSE9TVF9DQVJEX0VNVUxBVElPTiA9ICJhbmRyb2lkLmhhcmR3YXJlLm5mYy5oY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX09QRU5HTEVTX0VYVEVOU0lPTl9QQUNLID0gImFuZHJvaWQuaGFyZHdhcmUub3BlbmdsZXMuYWVwIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9QSUNUVVJFX0lOX1BJQ1RVUkUgPSAiYW5kcm9pZC5zb2Z0d2FyZS5waWN0dXJlX2luX3BpY3R1cmUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1BSSU5USU5HID0gImFuZHJvaWQuc29mdHdhcmUucHJpbnQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1NDUkVFTl9MQU5EU0NBUEUgPSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ubGFuZHNjYXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9TQ1JFRU5fUE9SVFJBSVQgPSAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ucG9ydHJhaXQiOwpAQCAtOTU2MiwxNSArOTYyNiwxNSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1VTQl9BQ0NFU1NPUlkgPSAiYW5kcm9pZC5oYXJkd2FyZS51c2IuYWNjZXNzb3J5IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9VU0JfSE9TVCA9ICJhbmRyb2lkLmhhcmR3YXJlLnVzYi5ob3N0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9WRVJJRklFRF9CT09UID0gImFuZHJvaWQuc29mdHdhcmUudmVyaWZpZWRfYm9vdCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dBVENIID0gImFuZHJvaWQuaGFyZHdhcmUudHlwZS53YXRjaCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEZFQVRVUkVfV0VCVklFVyA9ICJhbmRyb2lkLnNvZnR3YXJlLndlYnZpZXciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBGRUFUVVJFX1dJRkkgPSAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRkVBVFVSRV9XSUZJX0RJUkVDVCA9ICJhbmRyb2lkLmhhcmR3YXJlLndpZmkuZGlyZWN0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQUNUSVZJVElFUyA9IDE7IC8vIDB4MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9DT05GSUdVUkFUSU9OUyA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUyA9IDI2MjE0NDsgLy8gMHg0MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBpbnQgR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMgPSA1MTI7IC8vIDB4MjAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMzI3Njg7IC8vIDB4ODAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlNUUlVNRU5UQVRJT04gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9JTlRFTlRfRklMVEVSUyA9IDMyOyAvLyAweDIwCkBAIC05NTgyLDEwICs5NjQ2LDE3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NFUlZJQ0VTID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTID0gMTAyNDsgLy8gMHg0MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfU0lHTkFUVVJFUyA9IDY0OyAvLyAweDQwCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gODE5MjsgLy8gMHgyMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGludCBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMgPSAyMDQ4OyAvLyAweDgwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0FMTCA9IDEzMTA3MjsgLy8gMHgyMDAwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0RFRkFVTFRfT05MWSA9IDY1NTM2OyAvLyAweDEwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDUxMjsgLy8gMHgyMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMgPSAzMjc2ODsgLy8gMHg4MDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSA9IDUyNDI4ODsgLy8gMHg4MDAwMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSA3ODY0MzI7IC8vIDB4YzAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgPSAyNjIxNDQ7IC8vIDB4NDAwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9TWVNURU1fT05MWSA9IDEwNDg1NzY7IC8vIDB4MTAwMDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMgPSA4MTkyOyAvLyAweDIwMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgTUFYSU1VTV9WRVJJRklDQVRJT05fVElNRU9VVCA9IDM2MDAwMDBMOyAvLyAweDM2ZWU4MEwKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOyAvLyAweGZmZmZmZmZmCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEVSTUlTU0lPTl9HUkFOVEVEID0gMDsgLy8gMHgwCkBAIC05OTY4LDYgKzEwMDM5LDcgQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UXVhbnRpdHlTdHJpbmcoaW50LCBpbnQsIGphdmEubGFuZy5PYmplY3QuLi4pIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0UXVhbnRpdHlTdHJpbmcoaW50LCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0UXVhbnRpdHlUZXh0KGludCwgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTG9jYWxlIGdldFJlc29sdmVkTG9jYWxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFJlc291cmNlRW50cnlOYW1lKGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRSZXNvdXJjZU5hbWUoaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldFJlc291cmNlUGFja2FnZU5hbWUoaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb247CkBAIC0xMDU5OSw2ICsxMDY3MSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFZlcnNpb24oaW50KTsKICAgICBtZXRob2QgcHVibGljIGludCB1cGRhdGUoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXMsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgdXBkYXRlV2l0aE9uQ29uZmxpY3QoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXMsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmdbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgdmFsaWRhdGVTcWwoamF2YS5sYW5nLlN0cmluZywgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIHlpZWxkSWZDb250ZW5kZWQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4geWllbGRJZkNvbnRlbmRlZFNhZmVseSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiB5aWVsZElmQ29udGVuZGVkU2FmZWx5KGxvbmcpOwpAQCAtMTA4MzMsNyArMTA5MDYsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBmaW5hbCBpbnQgc3RhdHVzQ29kZTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBEcm1NYW5hZ2VyQ2xpZW50IHsKKyAgcHVibGljIGNsYXNzIERybU1hbmFnZXJDbGllbnQgaW1wbGVtZW50cyBqYXZhLmxhbmcuQXV0b0Nsb3NlYWJsZSB7CiAgICAgY3RvciBwdWJsaWMgRHJtTWFuYWdlckNsaWVudChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmRybS5Ecm1JbmZvIGFjcXVpcmVEcm1JbmZvKGFuZHJvaWQuZHJtLkRybUluZm9SZXF1ZXN0KTsKICAgICBtZXRob2QgcHVibGljIGludCBhY3F1aXJlUmlnaHRzKGFuZHJvaWQuZHJtLkRybUluZm9SZXF1ZXN0KTsKQEAgLTEwODQzLDYgKzEwOTE2LDcgQEAKICAgICBtZXRob2QgcHVibGljIGludCBjaGVja1JpZ2h0c1N0YXR1cyhhbmRyb2lkLm5ldC5VcmkpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGNoZWNrUmlnaHRzU3RhdHVzKGphdmEubGFuZy5TdHJpbmcsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tSaWdodHNTdGF0dXMoYW5kcm9pZC5uZXQuVXJpLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBjbG9zZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kcm0uRHJtQ29udmVydGVkU3RhdHVzIGNsb3NlQ29udmVydFNlc3Npb24oaW50KTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZHJtLkRybUNvbnZlcnRlZFN0YXR1cyBjb252ZXJ0RGF0YShpbnQsIGJ5dGVbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nW10gZ2V0QXZhaWxhYmxlRHJtRW5naW5lcygpOwpAQCAtMTA4NTYsNyArMTA5MzAsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRPcmlnaW5hbE1pbWVUeXBlKGFuZHJvaWQubmV0LlVyaSk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgb3BlbkNvbnZlcnRTZXNzaW9uKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHByb2Nlc3NEcm1JbmZvKGFuZHJvaWQuZHJtLkRybUluZm8pOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgcmVsZWFzZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZUFsbFJpZ2h0cygpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IHJlbW92ZVJpZ2h0cyhqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGludCByZW1vdmVSaWdodHMoYW5kcm9pZC5uZXQuVXJpKTsKQEAgLTExMjYwLDE0ICsxMTMzNCwxNCBAQAogCiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQml0bWFwRmFjdG9yeS5PcHRpb25zIHsKICAgICBjdG9yIHB1YmxpYyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICBtZXRob2QgcHVibGljIHZvaWQgcmVxdWVzdENhbmNlbERlY29kZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHJlcXVlc3RDYW5jZWxEZWNvZGUoKTsKICAgICBmaWVsZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXAgaW5CaXRtYXA7CiAgICAgZmllbGQgcHVibGljIGludCBpbkRlbnNpdHk7Ci0gICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5EaXRoZXI7CisgICAgZmllbGQgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpbkRpdGhlcjsKICAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGluSW5wdXRTaGFyZWFibGU7CiAgICAgZmllbGQgcHVibGljIGJvb2xlYW4gaW5KdXN0RGVjb2RlQm91bmRzOwogICAgIGZpZWxkIHB1YmxpYyBib29sZWFuIGluTXV0YWJsZTsKLSAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpblByZWZlclF1YWxpdHlPdmVyU3BlZWQ7CisgICAgZmllbGQgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpblByZWZlclF1YWxpdHlPdmVyU3BlZWQ7CiAgICAgZmllbGQgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwLkNvbmZpZyBpblByZWZlcnJlZENvbmZpZzsKICAgICBmaWVsZCBwdWJsaWMgYm9vbGVhbiBpblByZW11bHRpcGxpZWQ7CiAgICAgZmllbGQgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpblB1cmdlYWJsZTsKQEAgLTExMjc2LDcgKzExMzUwLDcgQEAKICAgICBmaWVsZCBwdWJsaWMgaW50IGluU2NyZWVuRGVuc2l0eTsKICAgICBmaWVsZCBwdWJsaWMgaW50IGluVGFyZ2V0RGVuc2l0eTsKICAgICBmaWVsZCBwdWJsaWMgYnl0ZVtdIGluVGVtcFN0b3JhZ2U7Ci0gICAgZmllbGQgcHVibGljIGJvb2xlYW4gbUNhbmNlbDsKKyAgICBmaWVsZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIG1DYW5jZWw7CiAgICAgZmllbGQgcHVibGljIGludCBvdXRIZWlnaHQ7CiAgICAgZmllbGQgcHVibGljIGphdmEubGFuZy5TdHJpbmcgb3V0TWltZVR5cGU7CiAgICAgZmllbGQgcHVibGljIGludCBvdXRXaWR0aDsKQEAgLTEyNzE1LDYgKzEyNzg5LDcgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgdW5zY2hlZHVsZURyYXdhYmxlKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUsIGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUEFERElOR19NT0RFX05FU1QgPSAwOyAvLyAweDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQURESU5HX01PREVfU1RBQ0sgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTkRFRklORURfSU5TRVQgPSAtMjE0NzQ4MzY0ODsgLy8gMHg4MDAwMDAwMAogICB9CiAKICAgcHVibGljIGNsYXNzIExldmVsTGlzdERyYXdhYmxlIGV4dGVuZHMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZUNvbnRhaW5lciB7CkBAIC0xODIzNiw3ICsxODMxMSw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnZXRDYW5vbmljYWxJRChqYXZhLmxhbmcuU3RyaW5nLCBib29sZWFuW10pOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERTVFNhdmluZ3MoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLmljdS51dGlsLlRpbWVab25lIGdldERlZmF1bHQoKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2V0RGVmYXVsdFRpbWVab25lVHlwZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXREaXNwbGF5TmFtZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXREaXNwbGF5TmFtZShqYXZhLnV0aWwuTG9jYWxlKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0RGlzcGxheU5hbWUoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlKTsKQEAgLTE4MjYwLDggKzE4MzM0LDYgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaW5EYXlsaWdodFRpbWUoamF2YS51dGlsLkRhdGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0Zyb3plbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvYnNlcnZlc0RheWxpZ2h0VGltZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHQoYW5kcm9pZC5pY3UudXRpbC5UaW1lWm9uZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdFRpbWVab25lVHlwZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJRChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0UmF3T2Zmc2V0KGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHVzZURheWxpZ2h0VGltZSgpOwpAQCAtMTgyNzQsOCArMTgzNDYsNiBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0NPTU1PTkxZX1VTRUQgPSA2OyAvLyAweDYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9SVF9HRU5FUklDID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0hPUlRfR01UID0gNDsgLy8gMHg0Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElNRVpPTkVfSUNVID0gMDsgLy8gMHgwCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElNRVpPTkVfSkRLID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLmljdS51dGlsLlRpbWVab25lIFVOS05PV05fWk9ORTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgVU5LTk9XTl9aT05FX0lEID0gIkV0Yy9Vbmtub3duIjsKICAgfQpAQCAtMTgzNzEsOCArMTg0NDEsNiBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2V0VmFyaWFudChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNSaWdodFRvTGVmdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSBtaW5pbWl6ZVN1YnRhZ3MoYW5kcm9pZC5pY3UudXRpbC5VTG9jYWxlKTsKLSAgICBtZXRob2QgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0RGVmYXVsdChhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUuQ2F0ZWdvcnksIGFuZHJvaWQuaWN1LnV0aWwuVUxvY2FsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmljdS51dGlsLlVMb2NhbGUgc2V0S2V5d29yZFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgc2V0S2V5d29yZFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyB0b0xhbmd1YWdlVGFnKCk7CkBAIC0yMDczNyw2ICsyMDgwNSw3IEBACiAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWVkaWFSb3V0ZXIuUm91dGVJbmZvIHsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVDYXRlZ29yeSBnZXRDYXRlZ29yeSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXREZXNjcmlwdGlvbigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldERldmljZVR5cGUoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQubWVkaWEuTWVkaWFSb3V0ZXIuUm91dGVHcm91cCBnZXRHcm91cCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZSBnZXRJY29uRHJhd2FibGUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0TmFtZSgpOwpAQCAtMjA3NTUsNiArMjA4MjQsMTAgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgcmVxdWVzdFNldFZvbHVtZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZXF1ZXN0VXBkYXRlVm9sdW1lKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRhZyhqYXZhLmxhbmcuT2JqZWN0KTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9CTFVFVE9PVEggPSAzOyAvLyAweDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9TUEVBS0VSID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfVFYgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9VTktOT1dOID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVFlQRV9MT0NBTCA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBMQVlCQUNLX1RZUEVfUkVNT1RFID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUExBWUJBQ0tfVk9MVU1FX0ZJWEVEID0gMDsgLy8gMHgwCkBAIC0yMjM2MSw2ICsyMjQzNCwyNCBAQAogICAgIGN0b3IgcHVibGljIE10cENvbnN0YW50cygpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBYnN0cmFjdE9iamVjdChpbnQpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTU09DSUFUSU9OX1RZUEVfR0VORVJJQ19GT0xERVIgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQU5DRUxfVFJBTlNBQ1RJT04gPSAxNjM4NTsgLy8gMHg0MDAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FQVFVSRV9DT01QTEVURSA9IDE2Mzk3OyAvLyAweDQwMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMTYzOTI7IC8vIDB4NDAwOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQgPSAxNjM5MDsgLy8gMHg0MDA2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMTYzOTU7IC8vIDB4NDAwYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9BRERFRCA9IDE2Mzg2OyAvLyAweDQwMDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfSU5GT19DSEFOR0VEID0gMTYzOTE7IC8vIDB4NDAwNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0NIQU5HRUQgPSA1MTIwMTsgLy8gMHhjODAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VEID0gNTEyMDI7IC8vIDB4YzgwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQgPSA1MTIwMzsgLy8gMHhjODAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFTU9WRUQgPSAxNjM4NzsgLy8gMHg0MDAzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUkVRVUVTVF9PQkpFQ1RfVFJBTlNGRVIgPSAxNjM5MzsgLy8gMHg0MDA5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQgPSAxNjM5NjsgLy8gMHg0MDBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfQURERUQgPSAxNjM4ODsgLy8gMHg0MDA0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfRlVMTCA9IDE2Mzk0OyAvLyAweDQwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMTYzODk7IC8vIDB4NDAwNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOREVGSU5FRCA9IDE2Mzg0OyAvLyAweDQwMDAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyA9IDE2Mzk4OyAvLyAweDQwMGUKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfM0dQX0NPTlRBSU5FUiA9IDQ3NDkyOyAvLyAweGI5ODQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfQUFDID0gNDczNjM7IC8vIDB4YjkwMwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9BQlNUUkFDVF9BVURJT19BTEJVTSA9IDQ3NjE5OyAvLyAweGJhMDMKQEAgLTIyNDE3LDYgKzIyNTA4LDQxIEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRk9STUFUX1dNViA9IDQ3NDg5OyAvLyAweGI5ODEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGT1JNQVRfV1BMX1BMQVlMSVNUID0gNDc2MzI7IC8vIDB4YmExMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZPUk1BVF9YTUxfRE9DVU1FTlQgPSA0Nzc0NjsgLy8gMHhiYTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0NMT1NFX1NFU1NJT04gPSA0MDk5OyAvLyAweDEwMDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fQ09QWV9PQkpFQ1QgPSA0MTIyOyAvLyAweDEwMWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fREVMRVRFX09CSkVDVCA9IDQxMDc7IC8vIDB4MTAwYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9GT1JNQVRfU1RPUkUgPSA0MTExOyAvLyAweDEwMGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9JTkZPID0gNDA5NzsgLy8gMHgxMDAxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9ERVZJQ0VfUFJPUF9ERVNDID0gNDExNjsgLy8gMHgxMDE0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDQxMTc7IC8vIDB4MTAxNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfTlVNX09CSkVDVFMgPSA0MTAyOyAvLyAweDEwMDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVCA9IDQxMDU7IC8vIDB4MTAwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX0hBTkRMRVMgPSA0MTAzOyAvLyAweDEwMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9JTkZPID0gNDEwNDsgLy8gMHgxMDA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUFJPUFNfU1VQUE9SVEVEID0gMzg5MTM7IC8vIDB4OTgwMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX1BST1BfREVTQyA9IDM4OTE0OyAvLyAweDk4MDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QX1ZBTFVFID0gMzg5MTU7IC8vIDB4OTgwMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfT0JKRUNUX1JFRkVSRU5DRVMgPSAzODkyODsgLy8gMHg5ODEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9QQVJUSUFMX09CSkVDVCA9IDQxMjM7IC8vIDB4MTAxYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfU1RPUkFHRV9JTkZPID0gNDEwMTsgLy8gMHgxMDA1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lfRFMgPSA0MTAwOyAvLyAweDEwMDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX1RIVU1CID0gNDEwNjsgLy8gMHgxMDBhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0lOSVRJQVRFX0NBUFRVUkUgPSA0MTEwOyAvLyAweDEwMGUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fSU5JVElBVEVfT1BFTl9DQVBUVVJFID0gNDEyNDsgLy8gMHgxMDFjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX01PVkVfT0JKRUNUID0gNDEyMTsgLy8gMHgxMDE5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX09QRU5fU0VTU0lPTiA9IDQwOTg7IC8vIDB4MTAwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9QT1dFUl9ET1dOID0gNDExNTsgLy8gMHgxMDEzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1JFU0VUX0RFVklDRSA9IDQxMTI7IC8vIDB4MTAxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9SRVNFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDQxMTk7IC8vIDB4MTAxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRUxGX1RFU1QgPSA0MTEzOyAvLyAweDEwMTEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VORF9PQkpFQ1QgPSA0MTA5OyAvLyAweDEwMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VORF9PQkpFQ1RfSU5GTyA9IDQxMDg7IC8vIDB4MTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfREVWSUNFX1BST1BfVkFMVUUgPSA0MTE4OyAvLyAweDEwMTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VUX09CSkVDVF9QUk9QX1ZBTFVFID0gMzg5MTY7IC8vIDB4OTgwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfT0JKRUNUX1BST1RFQ1RJT04gPSA0MTE0OyAvLyAweDEwMTIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fU0VUX09CSkVDVF9SRUZFUkVOQ0VTID0gMzg5Mjk7IC8vIDB4OTgxMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TS0lQID0gMzg5NDQ7IC8vIDB4OTgyMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9URVJNSU5BVEVfT1BFTl9DQVBUVVJFID0gNDEyMDsgLy8gMHgxMDE4CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPVEVDVElPTl9TVEFUVVNfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1RFQ1RJT05fU1RBVFVTX05PTl9UUkFOU0ZFUkFCTEVfREFUQSA9IDMyNzcxOyAvLyAweDgwMDMKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9URUNUSU9OX1NUQVRVU19SRUFEX09OTFkgPSAzMjc2OTsgLy8gMHg4MDAxCkBAIC0yMjQzNCw2ICsyMjU2MCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRPYmplY3RIYW5kbGVzKGludCwgaW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5tdHAuTXRwT2JqZWN0SW5mbyBnZXRPYmplY3RJbmZvKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBsb25nIGdldFBhcmVudChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhcnRpYWxPYmplY3QoaW50LCBpbnQsIGludCwgYnl0ZVtdKSB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGxvbmcgZ2V0U3RvcmFnZUlkKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnRbXSBnZXRTdG9yYWdlSWRzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm10cC5NdHBTdG9yYWdlSW5mbyBnZXRTdG9yYWdlSW5mbyhpbnQpOwpAQCAtMjI0NDksMzEgKzIyNTc2LDIzIEBACiAgIHB1YmxpYyBjbGFzcyBNdHBEZXZpY2VJbmZvIHsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgZ2V0TWFudWZhY3R1cmVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldE1vZGVsKCk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBpbnRbXSBnZXRPcGVyYXRpb25zU3VwcG9ydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIGdldFNlcmlhbE51bWJlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBnZXRWZXJzaW9uKCk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgTXRwRXZlbnQgewogICAgIGN0b3IgcHVibGljIE10cEV2ZW50KCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGV2aWNlUHJvcENvZGUoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRFdmVudENvZGUoKTsKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9DQU5DRUxfVFJBTlNBQ1RJT04gPSAxNjM4NTsgLy8gMHg0MDAxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FQVFVSRV9DT01QTEVURSA9IDE2Mzk3OyAvLyAweDQwMGQKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMTYzOTI7IC8vIDB4NDAwOAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQgPSAxNjM5MDsgLy8gMHg0MDA2Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMTYzOTU7IC8vIDB4NDAwYgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9BRERFRCA9IDE2Mzg2OyAvLyAweDQwMDIKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfSU5GT19DSEFOR0VEID0gMTYzOTE7IC8vIDB4NDAwNwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0NIQU5HRUQgPSA1MTIwMTsgLy8gMHhjODAxCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VEID0gNTEyMDI7IC8vIDB4YzgwMgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQgPSA1MTIwMzsgLy8gMHhjODAzCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFTU9WRUQgPSAxNjM4NzsgLy8gMHg0MDAzCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUkVRVUVTVF9PQkpFQ1RfVFJBTlNGRVIgPSAxNjM5MzsgLy8gMHg0MDA5Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQgPSAxNjM5NjsgLy8gMHg0MDBjCi0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfQURERUQgPSAxNjM4ODsgLy8gMHg0MDA0Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfRlVMTCA9IDE2Mzk0OyAvLyAweDQwMGEKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMTYzODk7IC8vIDB4NDAwNQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOREVGSU5FRCA9IDE2Mzg0OyAvLyAweDQwMDAKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyA9IDE2Mzk4OyAvLyAweDQwMGUKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRPYmplY3RGb3JtYXRDb2RlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T2JqZWN0SGFuZGxlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0T2JqZWN0UHJvcENvZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRQYXJhbWV0ZXIxKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyMigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhcmFtZXRlcjMoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRTdG9yYWdlSWQoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklkKCk7CiAgIH0KIAogICBwdWJsaWMgZmluYWwgY2xhc3MgTXRwT2JqZWN0SW5mbyB7CkBAIC0yNjg0NiwxMiArMjY5NjUsMjg1IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOwogICB9CiAKKyAgcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIGFuZHJvaWQub3BlbmdsLkdMRVMzMSB7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kQmFycmllcigpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpKGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xCbGVuZEVxdWF0aW9uaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaShpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbEJsZW5kRnVuY2koaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbENvbG9yTWFza2koaW50LCBib29sZWFuLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsQ29weUltYWdlU3ViRGF0YShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2soYW5kcm9pZC5vcGVuZ2wuR0xFUzMyLkRlYnVnUHJvYyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woaW50LCBpbnQsIGludCwgaW50LCBpbnRbXSwgaW50LCBib29sZWFuKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbChpbnQsIGludCwgaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERpc2FibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRHJhd0VsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBqYXZhLm5pby5CdWZmZXIsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleChpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xFbmFibGVpKGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKGludCwgaW50LCBpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBpbnRbXSwgaW50LCBieXRlW10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKGludCwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkJ5dGVCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmdbXSBnbEdldERlYnVnTWVzc2FnZUxvZyhpbnQsIGphdmEubmlvLkludEJ1ZmZlciwgamF2YS5uaW8uSW50QnVmZmVyLCBqYXZhLm5pby5JbnRCdWZmZXIsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgaW50IGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1cygpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEubGFuZy5TdHJpbmcgZ2xHZXRPYmplY3RMYWJlbChpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5sYW5nLlN0cmluZyBnbEdldE9iamVjdFB0ckxhYmVsKGxvbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGxvbmcgZ2xHZXRQb2ludGVydihpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdihpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1mdihpbnQsIGludCwgaW50LCBmbG9hdFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KGludCwgaW50LCBpbnQsIGphdmEubmlvLkZsb2F0QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm1pdihpbnQsIGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdihpbnQsIGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsR2V0blVuaWZvcm11aXYoaW50LCBpbnQsIGludCwgamF2YS5uaW8uSW50QnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBib29sZWFuIGdsSXNFbmFibGVkaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcoZmxvYXQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xPYmplY3RMYWJlbChpbnQsIGludCwgaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZywgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBhdGNoUGFyYW1ldGVyaShpbnQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFBvcERlYnVnR3JvdXAoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHJpbWl0aXZlQm91bmRpbmdCb3goZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsUHVzaERlYnVnR3JvdXAoaW50LCBpbnQsIGludCwgamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFJlYWRuUGl4ZWxzKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5uaW8uQnVmZmVyKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdihpbnQsIGludCwgaW50W10sIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBpbnRbXSwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleEJ1ZmZlcihpbnQsIGludCwgaW50KTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYoaW50LCBpbnQsIGphdmEubmlvLkludEJ1ZmZlcik7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBnbFRleFBhcmFtZXRlckl1aXYoaW50LCBpbnQsIGludFtdLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KGludCwgaW50LCBqYXZhLm5pby5JbnRCdWZmZXIpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBib29sZWFuKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9CVUZGRVIgPSAzMzUwNDsgLy8gMHg4MmUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ0xBTVBfVE9fQk9SREVSID0gMzMwNjk7IC8vIDB4ODEyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiA9IDM3NTMwOyAvLyAweDkyOWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT0xPUkRPREdFID0gMzc1Mjk7IC8vIDB4OTI5OQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwID0gMzc4MTk7IC8vIDB4OTNiYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgPSAzNzgxNjsgLy8gMHg5M2I4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NiA9IDM3ODE3OyAvLyAweDkzYjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ18xMHg4ID0gMzc4MTg7IC8vIDB4OTNiYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwID0gMzc4MjA7IC8vIDB4OTNiYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyID0gMzc4MjE7IC8vIDB4OTNiZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCA9IDM3ODA4OyAvLyAweDkzYjAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ181eDQgPSAzNzgwOTsgLy8gMHg5M2IxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg1ID0gMzc4MTA7IC8vIDB4OTNiMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSA9IDM3ODExOyAvLyAweDkzYjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ182eDYgPSAzNzgxMjsgLy8gMHg5M2I0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1ID0gMzc4MTM7IC8vIDB4OTNiNQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiA9IDM3ODE0OyAvLyAweDkzYjYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1JHQkFfQVNUQ184eDggPSAzNzgxNTsgLy8gMHg5M2I3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMCA9IDM3ODUxOyAvLyAweDkzZGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEweDUgPSAzNzg0ODsgLy8gMHg5M2Q4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2ID0gMzc4NDk7IC8vIDB4OTNkOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCA9IDM3ODUwOyAvLyAweDkzZGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9BU1RDXzEyeDEwID0gMzc4NTI7IC8vIDB4OTNkYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgPSAzNzg1MzsgLy8gMHg5M2RkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDQgPSAzNzg0MDsgLy8gMHg5M2QwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDQgPSAzNzg0MTsgLy8gMHg5M2QxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDUgPSAzNzg0MjsgLy8gMHg5M2QyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDUgPSAzNzg0MzsgLy8gMHg5M2QzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDYgPSAzNzg0NDsgLy8gMHg5M2Q0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDUgPSAzNzg0NTsgLy8gMHg5M2Q1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDYgPSAzNzg0NjsgLy8gMHg5M2Q2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDggPSAzNzg0NzsgLy8gMHg5M2Q3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHUyA9IDMzMzEwOyAvLyAweDgyMWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9GTEFHX1JPQlVTVF9BQ0NFU1NfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfQ09OVEVYVF9MT1NUID0gMTI4NzsgLy8gMHg1MDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9EQVJLRU4gPSAzNzUyNzsgLy8gMHg5Mjk3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfRlVOQ1RJT04gPSAzMzM0ODsgLy8gMHg4MjQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfQ0FMTEJBQ0tfVVNFUl9QQVJBTSA9IDMzMzQ5OyAvLyAweDgyNDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCA9IDMzMzg5OyAvLyAweDgyNmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4OTsgLy8gMHg5MTQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfTkVYVF9MT0dHRURfTUVTU0FHRV9MRU5HVEggPSAzMzM0NzsgLy8gMHg4MjQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfT1VUUFVUID0gMzc2MDA7IC8vIDB4OTJlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyA9IDMzMzQ2OyAvLyAweDgyNDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9ISUdIID0gMzcxOTA7IC8vIDB4OTE0NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyA9IDM3MTkyOyAvLyAweDkxNDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TRVZFUklUWV9NRURJVU0gPSAzNzE5MTsgLy8gMHg5MTQ3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU0VWRVJJVFlfTk9USUZJQ0FUSU9OID0gMzMzODc7IC8vIDB4ODI2YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgPSAzMzM1MDsgLy8gMHg4MjQ2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfU09VUkNFX0FQUExJQ0FUSU9OID0gMzMzNTQ7IC8vIDB4ODI0YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiA9IDMzMzU1OyAvLyAweDgyNGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfU0hBREVSX0NPTVBJTEVSID0gMzMzNTI7IC8vIDB4ODI0OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSA9IDMzMzUzOyAvLyAweDgyNDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZU1RFTSA9IDMzMzUxOyAvLyAweDgyNDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgPSAzMzM1NzsgLy8gMHg4MjRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9FUlJPUiA9IDMzMzU2OyAvLyAweDgyNGMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX01BUktFUiA9IDMzMzg0OyAvLyAweDgyNjgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX09USEVSID0gMzMzNjE7IC8vIDB4ODI1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgPSAzMzM2MDsgLy8gMHg4MjUwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1BfR1JPVVAgPSAzMzM4NjsgLy8gMHg4MjZhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9QT1JUQUJJTElUWSA9IDMzMzU5OyAvLyAweDgyNGYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9ERUJVR19UWVBFX1BVU0hfR1JPVVAgPSAzMzM4NTsgLy8gMHg4MjY5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfREVCVUdfVFlQRV9VTkRFRklORURfQkVIQVZJT1IgPSAzMzM1ODsgLy8gMHg4MjRlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRElGRkVSRU5DRSA9IDM3NTM0OyAvLyAweDkyOWUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9FWENMVVNJT04gPSAzNzUzNjsgLy8gMHg5MmEwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRklSU1RfVkVSVEVYX0NPTlZFTlRJT04gPSAzNjQyOTsgLy8gMHg4ZTRkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBQ1RJT05BTF9FVkVOID0gMzY0NzY7IC8vIDB4OGU3YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REID0gMzY0NzU7IC8vIDB4OGU3YgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgPSAzNjQ0NTsgLy8gMHg4ZTVkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9MQVlFUkVEID0gMzYyNjM7IC8vIDB4OGRhNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTID0gMzc2NTA7IC8vIDB4OTMxMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyA9IDM2MjY0OyAvLyAweDhkYTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9JTlBVVF9UWVBFID0gMzUwOTU7IC8vIDB4ODkxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFID0gMzUwOTY7IC8vIDB4ODkxOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiA9IDM2MzEzOyAvLyAweDhkZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUID0gNDsgLy8gMHg0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfR0VPTUVUUllfU0hBREVSX0lOVk9DQVRJT05TID0gMzQ5NDM7IC8vIDB4ODg3ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCA9IDM1MDk0OyAvLyAweDg5MTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HVUlMVFlfQ09OVEVYVF9SRVNFVCA9IDMzMzYzOyAvLyAweDgyNTMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9IQVJETElHSFQgPSAzNzUzMTsgLy8gMHg5MjliCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0NPTE9SID0gMzc1NTE7IC8vIDB4OTJhZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgPSAzNzU0OTsgLy8gMHg5MmFkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX0xVTUlOT1NJVFkgPSAzNzU1MjsgLy8gMHg5MmIwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSFNMX1NBVFVSQVRJT04gPSAzNzU1MDsgLy8gMHg5MmFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU1BR0VfQlVGRkVSID0gMzY5NDU7IC8vIDB4OTA1MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZID0gMzY5NDg7IC8vIDB4OTA1NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgPSAzMzM2NDsgLy8gMHg4MjU0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX0lNQUdFX0JVRkZFUiA9IDM2OTU2OyAvLyAweDkwNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9JTlRfSU1BR0VfQ1VCRV9NQVBfQVJSQVkgPSAzNjk1OTsgLy8gMHg5MDVmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgPSAzNzEzMjsgLy8gMHg5MTBjCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfSU5UX1NBTVBMRVJfQlVGRkVSID0gMzYzMDQ7IC8vIDB4OGRkMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4Nzg7IC8vIDB4OTAwZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTID0gMzY0NzQ7IC8vIDB4OGU3YQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCA9IDM3NjA3OyAvLyAweDkyZTcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MQVNUX1ZFUlRFWF9DT05WRU5USU9OID0gMzY0MzA7IC8vIDB4OGU0ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggPSAzMzM3NDsgLy8gMHg4MjVlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElHSFRFTiA9IDM3NTI4OyAvLyAweDkyOTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9MSU5FU19BREpBQ0VOQ1kgPSAxMDsgLy8gMHhhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTElORV9TVFJJUF9BREpBQ0VOQ1kgPSAxMTsgLy8gMHhiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTE9TRV9DT05URVhUX09OX1JFU0VUID0gMzMzNjI7IC8vIDB4ODI1MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNTM3ODsgLy8gMHg4YTMyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfQ09OVFJPTF9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MjsgLy8gMHg4ZTFlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0NPTUJJTkVEX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjM4MzsgLy8gMHg4ZTFmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIID0gMzMzODg7IC8vIDB4ODI2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgPSAzNzE4ODsgLy8gMHg5MTQ0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0RFQlVHX01FU1NBR0VfTEVOR1RIID0gMzcxODc7IC8vIDB4OTE0MworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCA9IDM2NDQ0OyAvLyAweDhlNWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfRlJBTUVCVUZGRVJfTEFZRVJTID0gMzc2NTU7IC8vIDB4OTMxNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4OTsgLy8gMHg5MmQ1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MzsgLy8gMHg5MmNmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX0lNQUdFX1VOSUZPUk1TID0gMzcwNjk7IC8vIDB4OTBjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTID0gMzcxNTU7IC8vIDB4OTEyMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyA9IDM3MTU2OyAvLyAweDkxMjQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfT1VUUFVUX1ZFUlRJQ0VTID0gMzYzMjA7IC8vIDB4OGRlMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgPSAzNjQ0MjsgLy8gMHg4ZTVhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDc5OyAvLyAweDkwZDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDM1ODgxOyAvLyAweDhjMjkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfR0VPTUVUUllfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjMyMTsgLy8gMHg4ZGUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0dFT01FVFJZX1VOSUZPUk1fQkxPQ0tTID0gMzUzNzI7IC8vIDB4OGEyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgPSAzNjMxOTsgLy8gMHg4ZGRmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX0xBQkVMX0xFTkdUSCA9IDMzNTEyOyAvLyAweDgyZTgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfUEFUQ0hfVkVSVElDRVMgPSAzNjQ3NzsgLy8gMHg4ZTdkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUlMgPSAzNzU4NzsgLy8gMHg5MmQzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTID0gMzc1ODE7IC8vIDB4OTJjZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgPSAzNzA2NzsgLy8gMHg5MGNiCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9JTlBVVF9DT01QT05FTlRTID0gMzQ5MjQ7IC8vIDB4ODg2YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4MzsgLy8gMHg4ZTgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9TSEFERVJfU1RPUkFHRV9CTE9DS1MgPSAzNzA4MDsgLy8gMHg5MGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMzY0ODE7IC8vIDB4OGU4MQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgPSAzNjQ4NTsgLy8gMHg4ZTg1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfQ09OVFJPTF9VTklGT1JNX0JMT0NLUyA9IDM2NDg5OyAvLyAweDhlODkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19DT05UUk9MX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDc5OyAvLyAweDhlN2YKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSUyA9IDM3NTg4OyAvLyAweDkyZDQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0FUT01JQ19DT1VOVEVSX0JVRkZFUlMgPSAzNzU4MjsgLy8gMHg5MmNlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9JTUFHRV9VTklGT1JNUyA9IDM3MDY4OyAvLyAweDkwY2MKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX0lOUFVUX0NPTVBPTkVOVFMgPSAzNDkyNTsgLy8gMHg4ODZkCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9PVVRQVVRfQ09NUE9ORU5UUyA9IDM2NDg2OyAvLyAweDhlODYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9TVE9SQUdFX0JMT0NLUyA9IDM3MDgxOyAvLyAweDkwZDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAzNjQ4MjsgLy8gMHg4ZTgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfRVZBTFVBVElPTl9VTklGT1JNX0JMT0NLUyA9IDM2NDkwOyAvLyAweDhlOGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19FVkFMVUFUSU9OX1VOSUZPUk1fQ09NUE9ORU5UUyA9IDM2NDgwOyAvLyAweDhlODAKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVTU19HRU5fTEVWRUwgPSAzNjQ3ODsgLy8gMHg4ZTdlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUFYX1RFU1NfUEFUQ0hfQ09NUE9ORU5UUyA9IDM2NDg0OyAvLyAweDhlODQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NQVhfVEVYVFVSRV9CVUZGRVJfU0laRSA9IDM1ODgzOyAvLyAweDhjMmIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9NSU5fRlJBR01FTlRfSU5URVJQT0xBVElPTl9PRkZTRVQgPSAzNjQ0MzsgLy8gMHg4ZTViCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTUlOX1NBTVBMRV9TSEFESU5HX1ZBTFVFID0gMzU4OTU7IC8vIDB4OGMzNworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZID0gMzc1MjQ7IC8vIDB4OTI5NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgPSAzNzc2MjsgLy8gMHg5MzgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfTVVMVElTQU1QTEVfTElORV9XSURUSF9SQU5HRSA9IDM3NzYxOyAvLyAweDkzODEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9OT19SRVNFVF9OT1RJRklDQVRJT04gPSAzMzM3NzsgLy8gMHg4MjYxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfT1ZFUkxBWSA9IDM3NTI2OyAvLyAweDkyOTYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9QQVRDSEVTID0gMTQ7IC8vIDB4ZQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTID0gMzY0NjY7IC8vIDB4OGU3MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEID0gMzU5NzU7IC8vIDB4OGM4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggPSAzNzU2NjsgLy8gMHg5MmJlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRk9SX1BBVENIRVNfU1VQUE9SVEVEID0gMzMzMTM7IC8vIDB4ODIyMQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gPSAzMzUwNjsgLy8gMHg4MmUyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUFJPR1JBTV9QSVBFTElORSA9IDMzNTA4OyAvLyAweDgyZTQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9RVUFEUyA9IDc7IC8vIDB4NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZID0gMzM1MDc7IC8vIDB4ODJlMworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSID0gMzc2NDE7IC8vIDB4OTMwOQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiA9IDM3NjM5OyAvLyAweDkzMDcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9SRUZFUkVOQ0VEX0JZX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNzY0MDsgLy8gMHg5MzA4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZID0gMzMzNjY7IC8vIDB4ODI1NgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgPSAzMzUxMDsgLy8gMHg4MmU2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMxOyAvLyAweDkxMGIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0JVRkZFUiA9IDM2MjkwOyAvLyAweDhkYzIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZID0gMzY4NzY7IC8vIDB4OTAwYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XID0gMzY4Nzc7IC8vIDB4OTAwZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HID0gMzU4OTQ7IC8vIDB4OGMzNgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiA9IDM3NTI1OyAvLyAweDkyOTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TSEFERVIgPSAzMzUwNTsgLy8gMHg4MmUxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfU09GVExJR0hUID0gMzc1MzI7IC8vIDB4OTI5YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XID0gMTI4MzsgLy8gMHg1MDMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9TVEFDS19VTkRFUkZMT1cgPSAxMjg0OyAvLyAweDUwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgPSAzNjQ2OTsgLy8gMHg4ZTc1CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUiA9IDM2NDg4OyAvLyAweDhlODgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0NPTlRST0xfU0hBREVSX0JJVCA9IDg7IC8vIDB4OAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgPSAzNjQ4NzsgLy8gMHg4ZTg3CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19FVkFMVUFUSU9OX1NIQURFUl9CSVQgPSAxNjsgLy8gMHgxMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgPSAzNjQ3MDsgLy8gMHg4ZTc2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19HRU5fUE9JTlRfTU9ERSA9IDM2NDczOyAvLyAweDhlNzkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVNTX0dFTl9TUEFDSU5HID0gMzY0NzE7IC8vIDB4OGU3NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiA9IDM2NDcyOyAvLyAweDhlNzgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFXzJEX01VTFRJU0FNUExFX0FSUkFZID0gMzcxMjI7IC8vIDB4OTEwMgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTI1OyAvLyAweDkxMDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JJTkRJTkdfQlVGRkVSID0gMzU4ODQ7IC8vIDB4OGMyYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSA9IDM2ODc0OyAvLyAweDkwMGEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUiA9IDQxMDA7IC8vIDB4MTAwNAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSID0gMzU4ODI7IC8vIDB4OGMyYQorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgPSAzNTg4MjsgLy8gMHg4YzJhCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9CVUZGRVJfREFUQV9TVE9SRV9CSU5ESU5HID0gMzU4ODU7IC8vIDB4OGMyZAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCA9IDM3Mjc3OyAvLyAweDkxOWQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9URVhUVVJFX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UID0gMzcyNzk7IC8vIDB4OTE5ZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgPSAzNzI3ODsgLy8gMHg5MTllCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVYVFVSRV9DVUJFX01BUF9BUlJBWSA9IDM2ODczOyAvLyAweDkwMDkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9UUklBTkdMRVNfQURKQUNFTkNZID0gMTI7IC8vIDB4YworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSA9IDEzOyAvLyAweGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTkRFRklORURfVkVSVEVYID0gMzMzNzY7IC8vIDB4ODI2MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCA9IDMzMzY1OyAvLyAweDgyNTUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfSU1BR0VfQlVGRkVSID0gMzY5Njc7IC8vIDB4OTA2NworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSA9IDM2OTcwOyAvLyAweDkwNmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9NVUxUSVNBTVBMRV9BUlJBWSA9IDM3MTMzOyAvLyAweDkxMGQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9CVUZGRVIgPSAzNjMxMjsgLy8gMHg4ZGQ4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgPSAzNjg3OTsgLy8gMHg5MDBmCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVkVSVEVYX0FSUkFZID0gMzI4ODQ7IC8vIDB4ODA3NAorICB9CisKKyAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBpbnRlcmZhY2UgR0xFUzMyLkRlYnVnUHJvYyB7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTWVzc2FnZShpbnQsIGludCwgaW50LCBpbnQsIGphdmEubGFuZy5TdHJpbmcpOworICB9CisKICAgcHVibGljIGNsYXNzIEdMRXhjZXB0aW9uIGV4dGVuZHMgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24gewogICAgIGN0b3IgcHVibGljIEdMRXhjZXB0aW9uKGludCk7CiAgICAgY3RvciBwdWJsaWMgR0xFeGNlcHRpb24oaW50LCBqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCi0gIHB1YmxpYyBjbGFzcyBHTFN1cmZhY2VWaWV3IGV4dGVuZHMgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3IGltcGxlbWVudHMgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgeworICBwdWJsaWMgY2xhc3MgR0xTdXJmYWNlVmlldyBleHRlbmRzIGFuZHJvaWQudmlldy5TdXJmYWNlVmlldyBpbXBsZW1lbnRzIGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyLkNhbGxiYWNrMiB7CiAgICAgY3RvciBwdWJsaWMgR0xTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwdWJsaWMgR0xTdXJmYWNlVmlldyhhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RGVidWdGbGFncygpOwpAQCAtMjY4NzUsNiArMjcyNjcsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlciwgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN1cmZhY2VSZWRyYXdOZWVkZWQoYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIpOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQlVHX0NIRUNLX0dMX0VSUk9SID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVCVUdfTE9HX0dMX0NBTExTID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVOREVSTU9ERV9DT05USU5VT1VTTFkgPSAxOyAvLyAweDEKQEAgLTI4MDc1LDYgKzI4NDY4LDcgQEAKICAgcHVibGljIGZpbmFsIGNsYXNzIFVzZXJIYW5kbGUgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIGN0b3IgcHVibGljIFVzZXJIYW5kbGUoYW5kcm9pZC5vcy5QYXJjZWwpOwogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBpbnQgZ2V0QXBwSWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLm9zLlVzZXJIYW5kbGUgcmVhZEZyb21QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlVzZXJIYW5kbGUsIGFuZHJvaWQub3MuUGFyY2VsKTsKQEAgLTI4MDk2LDkgKzI4NDkwLDEzIEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzU3lzdGVtVXNlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJBR29hdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nKGFuZHJvaWQub3MuVXNlckhhbmRsZSk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRMb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZFVubG9ja2VkKGFuZHJvaWQub3MuVXNlckhhbmRsZSk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZExvY2tlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRMb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ09yU3RvcHBpbmcoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyVW5sb2NrZWQoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNVc2VyVW5sb2NrZWQoYW5kcm9pZC5vcy5Vc2VySGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgYm9vbGVhbiBzZXRSZXN0cmljdGlvbnNDaGFsbGVuZ2UoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIHZvaWQgc2V0VXNlclJlc3RyaWN0aW9uKGphdmEubGFuZy5TdHJpbmcsIGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCB2b2lkIHNldFVzZXJSZXN0cmljdGlvbnMoYW5kcm9pZC5vcy5CdW5kbGUpOwpAQCAtMjgxMTYsNiArMjg1MTQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19DT05GSUdfV0lGSSA9ICJub19jb25maWdfd2lmaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0NSRUFURV9XSU5ET1dTID0gIm5vX2NyZWF0ZV93aW5kb3dzIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfQ1JPU1NfUFJPRklMRV9DT1BZX1BBU1RFID0gIm5vX2Nyb3NzX3Byb2ZpbGVfY29weV9wYXN0ZSI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERJU0FMTE9XX0RBVEFfUk9BTUlORyA9ICJub19kYXRhX3JvYW1pbmciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBESVNBTExPV19ERUJVR0dJTkdfRkVBVFVSRVMgPSAibm9fZGVidWdnaW5nX2ZlYXR1cmVzIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfRkFDVE9SWV9SRVNFVCA9ICJub19mYWN0b3J5X3Jlc2V0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgRElTQUxMT1dfRlVOID0gIm5vX2Z1biI7CkBAIC0yODg1MCw2ICsyOTI0OSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJZCBnZXRJZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXROYW1lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3RhdHVzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGxvYWRJY29uKGFuZHJvaWQuY29udGVudC5Db250ZXh0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8+IENSRUFUT1I7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0JVU1kgPSAyOyAvLyAweDIKQEAgLTI4ODYzLDYgKzI5MjYzLDkgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8gYnVpbGQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRDYXBhYmlsaXRpZXMoYW5kcm9pZC5wcmludC5QcmludGVyQ2FwYWJpbGl0aWVzSW5mbyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRJY29uUmVzb3VyY2VJZChpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyIHNldEluZm9JbnRlbnQoYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIgc2V0TmFtZShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciBzZXRTdGF0dXMoaW50KTsKICAgfQpAQCAtMjg4ODMsNiArMjkyODYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50c2VydmljZSB7CiAKKyAgcHVibGljIGNsYXNzIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sgeworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbik7CisgIH0KKwogICBwdWJsaWMgZmluYWwgY2xhc3MgUHJpbnREb2N1bWVudCB7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yIGdldERhdGEoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQucHJpbnQuUHJpbnREb2N1bWVudEluZm8gZ2V0SW5mbygpOwpAQCAtMjg5MzgsNiArMjkzNDUsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0Rlc3Ryb3llZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1ByaW50ZXJEaXNjb3ZlcnlTdGFydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRGVzdHJveSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblJlcXVlc3RDdXN0b21QcmludGVySWNvbihhbmRyb2lkLnByaW50LlByaW50ZXJJZCwgYW5kcm9pZC5wcmludHNlcnZpY2UuQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyRGlzY292ZXJ5KGphdmEudXRpbC5MaXN0PGFuZHJvaWQucHJpbnQuUHJpbnRlcklkPik7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhhbmRyb2lkLnByaW50LlByaW50ZXJJZCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJEaXNjb3ZlcnkoKTsKQEAgLTI5MzA2LDYgKzI5NzE0LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgR0VPQ09ERURfTE9DQVRJT04gPSAiZ2VvY29kZWRfbG9jYXRpb24iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09NSU5HX1RZUEUgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgSVNfUkVBRCA9ICJpc19yZWFkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTElNSVRfUEFSQU1fS0VZID0gImxpbWl0IjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVNTRURfVFlQRSA9IDM7IC8vIDB4MwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBORVcgPSAibmV3IjsKQEAgLTMwNDc2LDcgKzMwODg1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09MVU1OX01JTUVfVFlQRSA9ICJtaW1lX3R5cGUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBDT0xVTU5fU0laRSA9ICJfc2l6ZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIENPTFVNTl9TVU1NQVJZID0gInN1bW1hcnkiOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVJDSElWRSA9IDIwNDg7IC8vIDB4ODAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BUkNISVZFID0gMTAyNDsgLy8gMHg0MDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RJUl9QUkVGRVJTX0dSSUQgPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRElSX1BSRUZFUlNfTEFTVF9NT0RJRklFRCA9IDMyOyAvLyAweDIwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19ESVJfU1VQUE9SVFNfQ1JFQVRFID0gODsgLy8gMHg4CkBAIC0zMDQ4NSw5ICszMDg5NCw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19NT1ZFID0gMjU2OyAvLyAweDEwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfUkVOQU1FID0gNjQ7IC8vIDB4NDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1RIVU1CTkFJTCA9IDE7IC8vIDB4MQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfVFlQRURfRE9DVU1FTlQgPSA1MTI7IC8vIDB4MjAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19XUklURSA9IDI7IC8vIDB4MgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfVklSVFVBTF9ET0NVTUVOVCA9IDEwMjQ7IC8vIDB4NDAwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19WSVJUVUFMX0RPQ1VNRU5UID0gNTEyOyAvLyAweDIwMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBNSU1FX1RZUEVfRElSID0gInZuZC5hbmRyb2lkLmRvY3VtZW50L2RpcmVjdG9yeSI7CiAgIH0KIApAQCAtMzA5MTQsNiArMzEzMjIsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTE9DQVRJT05fU09VUkNFX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9BTExfQVBQTElDQVRJT05TX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuTUFOQUdFX0FMTF9BUFBMSUNBVElPTlNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0FQUExJQ0FUSU9OU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9BUFBMSUNBVElPTlNfU0VUVElOR1MiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX0RFRkFVTFRfQVBQU19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLk1BTkFHRV9ERUZBVUxUX0FQUFNfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUFOQUdFX09WRVJMQVlfUEVSTUlTU0lPTiA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfT1ZFUkxBWV9QRVJNSVNTSU9OIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX01BTkFHRV9XUklURV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLmFjdGlvbi5NQU5BR0VfV1JJVEVfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fTUVNT1JZX0NBUkRfU0VUVElOR1MgPSAiYW5kcm9pZC5zZXR0aW5ncy5NRU1PUllfQ0FSRF9TRVRUSU5HUyI7CkBAIC0zMDkzMCw2ICszMTMzOSw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TRUFSQ0hfU0VUVElOR1MgPSAiYW5kcm9pZC5zZWFyY2guYWN0aW9uLlNFQVJDSF9TRVRUSU5HUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TRUNVUklUWV9TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNFQ1VSSVRZX1NFVFRJTkdTIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuU0VUVElOR1MiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU0hPV19BRE1JTl9TVVBQT1JUX0RFVEFJTFMgPSAiYW5kcm9pZC5zZXR0aW5ncy5TSE9XX0FETUlOX1NVUFBPUlRfREVUQUlMUyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9TSE9XX1JFR1VMQVRPUllfSU5GTyA9ICJhbmRyb2lkLnNldHRpbmdzLlNIT1dfUkVHVUxBVE9SWV9JTkZPIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQUNUSU9OX1NPVU5EX1NFVFRJTkdTID0gImFuZHJvaWQuc2V0dGluZ3MuU09VTkRfU0VUVElOR1MiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBQ1RJT05fU1lOQ19TRVRUSU5HUyA9ICJhbmRyb2lkLnNldHRpbmdzLlNZTkNfU0VUVElOR1MiOwpAQCAtMzA5NzYsNiArMzEzODYsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBBVVRPX1RJTUUgPSAiYXV0b190aW1lIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQVVUT19USU1FX1pPTkUgPSAiYXV0b190aW1lX3pvbmUiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBCTFVFVE9PVEhfT04gPSAiYmx1ZXRvb3RoX29uIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09OVEFDVF9NRVRBREFUQV9TWU5DID0gImNvbnRhY3RfbWV0YWRhdGFfc3luYyI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm5ldC5VcmkgQ09OVEVOVF9VUkk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIERBVEFfUk9BTUlORyA9ICJkYXRhX3JvYW1pbmciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBERUJVR19BUFAgPSAiZGVidWdfYXBwIjsKQEAgLTMxMDg0LDYgKzMxNDk1LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBUVFNfVVNFX0RFRkFVTFRTID0gInR0c191c2VfZGVmYXVsdHMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIFVTQl9NQVNTX1NUT1JBR0VfRU5BQkxFRCA9ICJ1c2JfbWFzc19zdG9yYWdlX2VuYWJsZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIFVTRV9HT09HTEVfTUFJTCA9ICJ1c2VfZ29vZ2xlX21haWwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBWT0lDRV9JTlRFUkFDVElPTl9TRVJWSUNFID0gInZvaWNlX2ludGVyYWN0aW9uX3NlcnZpY2UiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIFdJRklfTUFYX0RIQ1BfUkVUUllfQ09VTlQgPSAid2lmaV9tYXhfZGhjcF9yZXRyeV9jb3VudCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgV0lGSV9NT0JJTEVfREFUQV9UUkFOU0lUSU9OX1dBS0VMT0NLX1RJTUVPVVRfTVMgPSAid2lmaV9tb2JpbGVfZGF0YV90cmFuc2l0aW9uX3dha2Vsb2NrX3RpbWVvdXRfbXMiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIFdJRklfTkVUV09SS1NfQVZBSUxBQkxFX05PVElGSUNBVElPTl9PTiA9ICJ3aWZpX25ldHdvcmtzX2F2YWlsYWJsZV9ub3RpZmljYXRpb25fb24iOwpAQCAtMzE0NjcsNiArMzE4NzksNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9TTVNfT1VUX09GX01FTU9SWSA9IDM7IC8vIDB4MwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9TTVNfVU5TVVBQT1JURUQgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0lNX0ZVTExfQUNUSU9OID0gImFuZHJvaWQucHJvdmlkZXIuVGVsZXBob255LlNJTV9GVUxMIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU01TX0NBUlJJRVJfUFJPVklTSU9OX0FDVElPTiA9ICJhbmRyb2lkLnByb3ZpZGVyLlRlbGVwaG9ueS5TTVNfQ0FSUklFUl9QUk9WSVNJT04iOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTTVNfQ0JfUkVDRUlWRURfQUNUSU9OID0gImFuZHJvaWQucHJvdmlkZXIuVGVsZXBob255LlNNU19DQl9SRUNFSVZFRCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNNU19ERUxJVkVSX0FDVElPTiA9ICJhbmRyb2lkLnByb3ZpZGVyLlRlbGVwaG9ueS5TTVNfREVMSVZFUiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNNU19FTUVSR0VOQ1lfQ0JfUkVDRUlWRURfQUNUSU9OID0gImFuZHJvaWQucHJvdmlkZXIuVGVsZXBob255LlNNU19FTUVSR0VOQ1lfQ0JfUkVDRUlWRUQiOwpAQCAtMzE1NzUsNiArMzE5ODgsNyBAQAogCiAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVm9pY2VtYWlsQ29udHJhY3QuU3RhdHVzIGltcGxlbWVudHMgYW5kcm9pZC5wcm92aWRlci5CYXNlQ29sdW1ucyB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5uZXQuVXJpIGJ1aWxkU291cmNlVXJpKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIHZvaWQgc2V0UXVvdGEoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnRIYW5kbGUsIGludCwgaW50KTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ09ORklHVVJBVElPTl9TVEFURSA9ICJjb25maWd1cmF0aW9uX3N0YXRlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT05GSUdVUkFUSU9OX1NUQVRFX0NBTl9CRV9DT05GSUdVUkVEID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09ORklHVVJBVElPTl9TVEFURV9OT1RfQ09ORklHVVJFRCA9IDE7IC8vIDB4MQpAQCAtMzE1OTEsNiArMzIwMDUsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVElGSUNBVElPTl9DSEFOTkVMX1NUQVRFX09LID0gMDsgLy8gMHgwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUgPSAicGhvbmVfYWNjb3VudF9jb21wb25lbnRfbmFtZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfSUQgPSAicGhvbmVfYWNjb3VudF9pZCI7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFFVT1RBX09DQ1VQSUVEID0gInF1b3RhX29jY3VwaWVkIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgUVVPVEFfVE9UQUwgPSAicXVvdGFfdG90YWwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFVT1RBX1VOQVZBSUxBQkxFID0gLTE7IC8vIDB4ZmZmZmZmZmYKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VUVElOR1NfVVJJID0gInNldHRpbmdzX3VyaSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFNPVVJDRV9QQUNLQUdFID0gInNvdXJjZV9wYWNrYWdlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgVk9JQ0VNQUlMX0FDQ0VTU19VUkkgPSAidm9pY2VtYWlsX2FjY2Vzc191cmkiOwpAQCAtMzE2MDcsNiArMzIwMjQsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBIQVNfQ09OVEVOVCA9ICJoYXNfY29udGVudCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElTX1JFQUQgPSAiaXNfcmVhZCI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIElURU1fVFlQRSA9ICJ2bmQuYW5kcm9pZC5jdXJzb3IuaXRlbS92b2ljZW1haWwiOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBMQVNUX01PRElGSUVEID0gImxhc3RfbW9kaWZpZWQiOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBNSU1FX1RZUEUgPSAibWltZV90eXBlIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgTlVNQkVSID0gIm51bWJlciI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIFBIT05FX0FDQ09VTlRfQ09NUE9ORU5UX05BTUUgPSAic3Vic2NyaXB0aW9uX2NvbXBvbmVudF9uYW1lIjsKQEAgLTMyNzk4LDYgKzMzMjE2LDcgQEAKICAgcHVibGljIGNsYXNzIE5ldHdvcmtTZWN1cml0eVBvbGljeSB7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC5zZWN1cml0eS5OZXR3b3JrU2VjdXJpdHlQb2xpY3kgZ2V0SW5zdGFuY2UoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChqYXZhLmxhbmcuU3RyaW5nKTsKICAgfQogCiB9CkBAIC0zMzA5Miw2ICszMzUxMSw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIG9uTWVudU9wZW5lZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25QYW5lbENsb3NlZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gb25QcmVwYXJlUGFuZWwoaW50LCBhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3Lk1lbnUpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblByb3ZpZGVLZXlib2FyZFNob3J0Y3V0cyhqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiwgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZChhbmRyb2lkLnZpZXcuU2VhcmNoRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvbldha2VVcCgpOwpAQCAtMzMyMTIsNyArMzM2MzIsOSBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9MSVNURU5FUl9DQU5DRUxfQUxMID0gMTE7IC8vIDB4YgogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9QQUNLQUdFX0JBTk5FRCA9IDc7IC8vIDB4NwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9QQUNLQUdFX0NIQU5HRUQgPSA1OyAvLyAweDUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fVE9QSUNfQkFOTkVEID0gMTQ7IC8vIDB4ZQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9VU0VSX1NUT1BQRUQgPSA2OyAvLyAweDYKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UgPSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlIjsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLkFkanVzdG1lbnQgewpAQCAtMzMyNDEsNyArMzM2NjMsMTAgQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25SZW1vdmVkKGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uU3RhdHVzQmFyTm90aWZpY2F0aW9uLCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nTWFwKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgcmVxdWVzdEludGVycnVwdGlvbkZpbHRlcihpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0TGlzdGVuZXJIaW50cyhpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgcmVxdWVzdFJlYmluZChhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCByZXF1ZXN0VW5iaW5kKCkgdGhyb3dzIGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzZXROb3RpZmljYXRpb25zU2hvd24oamF2YS5sYW5nLlN0cmluZ1tdKTsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEubGFuZy5TdHJpbmcgQ0FURUdPUllfVlJfTk9USUZJQ0FUSU9OUyA9ICJhbmRyb2lkLmludGVudC5jYXRlZ29yeS52ci5ub3RpZmljYXRpb25zIjsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBISU5UX0hPU1RfRElTQUJMRV9FRkZFQ1RTID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URVJSVVBUSU9OX0ZJTFRFUl9BTEFSTVMgPSA0OyAvLyAweDQKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFUlJVUFRJT05fRklMVEVSX0FMTCA9IDE7IC8vIDB4MQpAQCAtMzMyNTEsNiArMzM2NzYsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBTRVJWSUNFX0lOVEVSRkFDRSA9ICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfTElHSFRTID0gMTsgLy8gMHgxCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSyA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiA9IDQ7IC8vIDB4NAogICB9CiAKICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZyB7CkBAIC0zMzI2MiwxMSArMzM2ODgsMTEgQEAKICAgICBtZXRob2QgcHVibGljIGludCBnZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cygpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0FtYmllbnQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gbWF0Y2hlc0ludGVycnVwdGlvbkZpbHRlcigpOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfREVGQVVMVCA9IDA7IC8vIDB4MAotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfSElHSCA9IDE7IC8vIDB4MQotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTE9XID0gLTE7IC8vIDB4ZmZmZmZmZmYKLSAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX01BWCA9IDI7IC8vIDB4MgotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTk9ORSA9IC0yOyAvLyAweGZmZmZmZmZlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9ERUZBVUxUID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9ISUdIID0gMzsgLy8gMHgzCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9MT1cgPSAxOyAvLyAweDEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX01BWCA9IDQ7IC8vIDB4NAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTk9ORSA9IDA7IC8vIDB4MAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfVU5TUEVDSUZJRUQgPSAtMTAwMDsgLy8gMHhmZmZmZmMxOAogICB9CiAKQEAgLTMzMzA3LDI1ICszMzczMywzNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRDb250ZW50RGVzY3JpcHRpb24oKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbiBnZXRJY29uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldExhYmVsKCk7CisgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0U3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29udGVudERlc2NyaXB0aW9uKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRJY29uKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldExhYmVsKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTdGF0ZShpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB1cGRhdGVUaWxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlPiBDUkVBVE9SOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0FDVElWRSA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0lOQUNUSVZFID0gMTsgLy8gMHgxCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfVU5BVkFJTEFCTEUgPSAwOyAvLyAweDAKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBUaWxlU2VydmljZSBleHRlbmRzIGFuZHJvaWQuYXBwLlNlcnZpY2UgewogICAgIGN0b3IgcHVibGljIFRpbGVTZXJ2aWNlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlIGdldFFzVGlsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0xvY2tlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc1NlY3VyZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5vcy5JQmluZGVyIG9uQmluZChhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgb25DbGljaygpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uU3RvcExpc3RlbmluZygpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBvblRpbGVBZGRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IG9uVGlsZUFkZGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIG9uVGlsZVJlbW92ZWQoKTsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBmaW5hbCB2b2lkIHJlcXVlc3RMaXN0ZW5pbmdTdGF0ZShhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCwgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUpOwogICAgIG1ldGhvZCBwdWJsaWMgZmluYWwgdm9pZCBzaG93RGlhbG9nKGFuZHJvaWQuYXBwLkRpYWxvZyk7CisgICAgbWV0aG9kIHB1YmxpYyBmaW5hbCB2b2lkIHN0YXJ0QWN0aXZpdHlBbmRDb2xsYXBzZShhbmRyb2lkLmNvbnRlbnQuSW50ZW50KTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgdW5sb2NrQW5kUnVuKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEFDVElPTl9RU19USUxFID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmFjdGlvbi5RU19USUxFIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSUxFX01PREVfQUNUSVZFID0gMjsgLy8gMHgyCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX1BBU1NJVkUgPSAxOyAvLyAweDEKICAgfQogCiB9CkBAIC0zNDU4Niw2ICszNTAyNCw3IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfR0VORVJJQ19DT05GRVJFTkNFID0gMjsgLy8gMHgyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfSElHSF9ERUZfQVVESU8gPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX1dJRkkgPSA4OyAvLyAweDgKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9XT1JLX0NBTEwgPSAzMjsgLy8gMHgyMAogICB9CiAKICAgcHVibGljIGZpbmFsIGNsYXNzIENhbGxBdWRpb1N0YXRlIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKQEAgLTM0ODk5LDYgKzM1MzM4LDcgQEAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX1BMQUNFX0VNRVJHRU5DWV9DQUxMUyA9IDE2OyAvLyAweDEwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9TSU1fU1VCU0NSSVBUSU9OID0gNDsgLy8gMHg0CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9WSURFT19DQUxMSU5HID0gODsgLy8gMHg4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9WSURFT19DQUxMSU5HX1JFTElFU19PTl9QUkVTRU5DRSA9IDI1NjsgLy8gMHgxMDAKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGFuZHJvaWQub3MuUGFyY2VsYWJsZS5DcmVhdG9yPGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnQ+IENSRUFUT1I7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEVYVFJBX0NBTExfU1VCSkVDVF9DSEFSQUNURVJfRU5DT0RJTkcgPSAiYW5kcm9pZC50ZWxlY29tLmV4dHJhLkNBTExfU1VCSkVDVF9DSEFSQUNURVJfRU5DT0RJTkciOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBFWFRSQV9DQUxMX1NVQkpFQ1RfTUFYX0xFTkdUSCA9ICJhbmRyb2lkLnRlbGVjb20uZXh0cmEuQ0FMTF9TVUJKRUNUX01BWF9MRU5HVEgiOwpAQCAtMzU3MjksNiArMzYxNjksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTdWJzY3JpYmVySWQoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Vm9pY2VNYWlsQWxwaGFUYWcoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0Vm9pY2VNYWlsTnVtYmVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLm5ldC5VcmkgZ2V0Vm9pY2VtYWlsUmluZ3RvbmVVcmkoYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudEhhbmRsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc0NhcnJpZXJQcml2aWxlZ2VzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc0ljY0NhcmQoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaWNjQ2xvc2VMb2dpY2FsQ2hhbm5lbChpbnQpOwpAQCAtMzU3NDEsNiArMzYxODIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1Ntc0NhcGFibGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNUdHlNb2RlU3VwcG9ydGVkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVm9pY2VDYXBhYmxlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzVm9pY2VtYWlsVmlicmF0aW9uRW5hYmxlZChhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50SGFuZGxlKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNXb3JsZFBob25lKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGxpc3RlbihhbmRyb2lkLnRlbGVwaG9ueS5QaG9uZVN0YXRlTGlzdGVuZXIsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHNlbmRFbnZlbG9wZVdpdGhTdGF0dXMoamF2YS5sYW5nLlN0cmluZyk7CkBAIC0zNjI1Miw4ICszNjY5NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgY2hlY2tVcmlQZXJtaXNzaW9uKGFuZHJvaWQubmV0LlVyaSwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNsZWFyV2FsbHBhcGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVDb25maWd1cmF0aW9uQ29udGV4dChhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb24pOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoYW5kcm9pZC5jb250ZW50LkNvbnRleHQpOwotICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkQ29udGV4dChhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBjcmVhdGVEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlRGlzcGxheUNvbnRleHQoYW5kcm9pZC52aWV3LkRpc3BsYXkpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQgY3JlYXRlUGFja2FnZUNvbnRleHQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBkYXRhYmFzZUxpc3QoKTsKQEAgLTM2Mjk4LDEyICszNjczOSwxMiBAQAogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBnZXRTeXN0ZW1TZXJ2aWNlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRTeXN0ZW1TZXJ2aWNlTmFtZShqYXZhLmxhbmcuQ2xhc3M8Pz4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuVGhlbWUgZ2V0VGhlbWUoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBnZXRVc2VySWQoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0V2FsbHBhcGVyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0V2FsbHBhcGVyRGVzaXJlZE1pbmltdW1IZWlnaHQoKTsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRXYWxscGFwZXJEZXNpcmVkTWluaW11bVdpZHRoKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbihqYXZhLmxhbmcuU3RyaW5nLCBhbmRyb2lkLm5ldC5VcmksIGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEuaW8uRmlsZUlucHV0U3RyZWFtIG9wZW5GaWxlSW5wdXQoamF2YS5sYW5nLlN0cmluZykgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIG9wZW5GaWxlT3V0cHV0KGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRGF0YWJhc2Ugb3Blbk9yQ3JlYXRlRGF0YWJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZS5TUUxpdGVEYXRhYmFzZS5DdXJzb3JGYWN0b3J5KTsKQEAgLTM2NDI1LDEwICszNjg2Niw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldEFwcGxpY2F0aW9uTG9nbyhqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGludCBnZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERlZmF1bHRBY3Rpdml0eUljb24oKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlIGdldERyYXdhYmxlKGphdmEubGFuZy5TdHJpbmcsIGludCwgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbyk7Ci0gICAgbWV0aG9kIHB1YmxpYyBieXRlW10gZ2V0RXBoZW1lcmFsQ29va2llKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0RXBoZW1lcmFsQ29va2llTWF4U2l6ZUJ5dGVzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvPiBnZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50KTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZyk7CkBAIC0zNjQzNyw4ICszNjg3NiwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LkludGVudCBnZXRMZWFuYmFja0xhdW5jaEludGVudEZvclBhY2thZ2UoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldE5hbWVGb3JVaWQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGludFtdIGdldFBhY2thZ2VHaWRzKGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgaW50W10gZ2V0UGFja2FnZUdpZHMoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbnN0YWxsZXIgZ2V0UGFja2FnZUluc3RhbGxlcigpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmdbXSBnZXRQYWNrYWdlc0ZvclVpZChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8YW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvPiBnZXRQYWNrYWdlc0hvbGRpbmdQZXJtaXNzaW9ucyhqYXZhLmxhbmcuU3RyaW5nW10sIGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGVybWlzc2lvbkdyb3VwSW5mbyBnZXRQZXJtaXNzaW9uR3JvdXBJbmZvKGphdmEubGFuZy5TdHJpbmcsIGludCkgdGhyb3dzIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CkBAIC0zNjQ1OSw3ICszNjkwMCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldFVzZXJCYWRnZWRMYWJlbChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBhbmRyb2lkLm9zLlVzZXJIYW5kbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlciBnZXRYbWwoamF2YS5sYW5nLlN0cmluZywgaW50LCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzU3lzdGVtRmVhdHVyZShqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc1Blcm1pc3Npb25SZXZva2VkQnlQb2xpY3koamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzU2FmZU1vZGUoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5MaXN0PGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoYW5kcm9pZC5jb250ZW50LkludGVudCwgaW50KTsKQEAgLTM2NDc3LDggKzM2OTE3LDYgQEAKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbyByZXNvbHZlU2VydmljZShhbmRyb2lkLmNvbnRlbnQuSW50ZW50LCBpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvbkVuYWJsZWRTZXR0aW5nKGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Q29tcG9uZW50RW5hYmxlZFNldHRpbmcoYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWUsIGludCwgaW50KTsKLSAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOwotICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0SW5zdGFsbGVyUGFja2FnZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHZlcmlmeVBlbmRpbmdJbnN0YWxsKGludCwgaW50KTsKICAgfQpAQCAtMzg3MDksNyArMzkxNDcsOSBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGFuZHJvaWQudXRpbC5Mb2NhbGVMaXN0IGdldEVtcHR5TG9jYWxlTGlzdCgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxvY2FsZSBnZXRGaXJzdE1hdGNoKGphdmEubGFuZy5TdHJpbmdbXSk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTG9jYWxlIGdldFByaW1hcnkoKTsKKyAgICBtZXRob2QgcHVibGljIGludCBpbmRleE9mKGphdmEudXRpbC5Mb2NhbGUpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXREZWZhdWx0KGFuZHJvaWQudXRpbC5Mb2NhbGVMaXN0KTsKICAgICBtZXRob2QgcHVibGljIGludCBzaXplKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIHRvTGFuZ3VhZ2VUYWdzKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CkBAIC0zODg2Nyw3ICszOTMwNyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5sYW5nLlN0cmluZyBkaWdpdHNBbmRQbHVzT25seShqYXZhLnV0aWwucmVnZXguTWF0Y2hlcik7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBET01BSU5fTkFNRTsKICAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIEVNQUlMX0FERFJFU1M7Ci0gICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLmxhbmcuU3RyaW5nIEdPT0RfSVJJX0NIQVIgPSAiYS16QS1aMC05XHUwMGEwLVx1ZDdmZlx1ZjkwMC1cdWZkY2ZcdWZkZjAtXHVmZmVmIjsKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBHT09EX0lSSV9DSEFSID0gImEtekEtWjAtOVx1MDBhMC1cdWQ3ZmZcdWY5MDAtXHVmZGNmXHVmZGYwLVx1ZmZlZiI7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBJUF9BRERSRVNTOwogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gUEhPTkU7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBkZXByZWNhdGVkIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIFRPUF9MRVZFTF9ET01BSU47CkBAIC0zOTI5OCw3ICszOTczOCw2IEBACiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0QWN0aW9uKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGEgZ2V0Q2xpcERhdGEoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5DbGlwRGVzY3JpcHRpb24gZ2V0Q2xpcERlc2NyaXB0aW9uKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25Ib2xkZXIgZ2V0RHJvcFBlcm1pc3Npb25Ib2xkZXIoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5PYmplY3QgZ2V0TG9jYWxTdGF0ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBnZXRSZXN1bHQoKTsKICAgICBtZXRob2QgcHVibGljIGZsb2F0IGdldFgoKTsKQEAgLTM5MzEzLDEyICszOTc1Miw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcuRHJhZ0V2ZW50PiBDUkVBVE9SOwogICB9CiAKLSAgcHVibGljIGNsYXNzIERyb3BQZXJtaXNzaW9uSG9sZGVyIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKLSAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIGdyYW50KCk7Ci0gICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJldm9rZSgpOwotICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOwotICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9uSG9sZGVyPiBDUkVBVE9SOworICBwdWJsaWMgZmluYWwgY2xhc3MgRHJvcFBlcm1pc3Npb25zIHsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgcmVsZWFzZSgpOwogICB9CiAKICAgcHVibGljIGNsYXNzIEZvY3VzRmluZGVyIHsKQEAgLTM5OTc2LDYgKzQwNDExLDI3IEBACiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHN0YXJ0VHJhY2tpbmcoYW5kcm9pZC52aWV3LktleUV2ZW50LCBqYXZhLmxhbmcuT2JqZWN0KTsKICAgfQogCisgIHB1YmxpYyBmaW5hbCBjbGFzcyBLZXlib2FyZFNob3J0Y3V0R3JvdXAgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgeworICAgIGN0b3IgcHVibGljIEtleWJvYXJkU2hvcnRjdXRHcm91cChqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm8+KTsKKyAgICBjdG9yIHB1YmxpYyBLZXlib2FyZFNob3J0Y3V0R3JvdXAoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGFkZEl0ZW0oYW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRJbmZvKTsKKyAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm8+IGdldEl0ZW1zKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuQ2hhclNlcXVlbmNlIGdldExhYmVsKCk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiBDUkVBVE9SOworICB9CisKKyAgcHVibGljIGZpbmFsIGNsYXNzIEtleWJvYXJkU2hvcnRjdXRJbmZvIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKKyAgICBjdG9yIHB1YmxpYyBLZXlib2FyZFNob3J0Y3V0SW5mbyhqYXZhLmxhbmcuQ2hhclNlcXVlbmNlLCBjaGFyLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKKyAgICBtZXRob2QgcHVibGljIGNoYXIgZ2V0QmFzZUNoYXJhY3RlcigpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSBnZXRMYWJlbCgpOworICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldE1vZGlmaWVycygpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRJbmZvPiBDUkVBVE9SOworICB9CisKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIExheW91dEluZmxhdGVyIHsKICAgICBjdG9yIHByb3RlY3RlZCBMYXlvdXRJbmZsYXRlcihhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CiAgICAgY3RvciBwcm90ZWN0ZWQgTGF5b3V0SW5mbGF0ZXIoYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyLCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCk7CkBAIC00MDI0NCw2ICs0MDcwMCw4IEBACiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19MVFJJR0dFUiA9IDE3OyAvLyAweDExCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19PUklFTlRBVElPTiA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUFJFU1NVUkUgPSAyOyAvLyAweDIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBWElTX1JFTEFUSVZFX1ggPSAyNzsgLy8gMHgxYgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWSA9IDI4OyAvLyAweDFjCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SVFJJR0dFUiA9IDE4OyAvLyAweDEyCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19SVURERVIgPSAyMDsgLy8gMHgxNAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUlggPSAxMjsgLy8gMHhjCkBAIC00MDMzMCw2ICs0MDc4OCwzOCBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9SSUVOVEFUSU9OX1VOS05PV04gPSAtMTsgLy8gMHhmZmZmZmZmZgogICB9CiAKKyAgcHVibGljIGZpbmFsIGNsYXNzIFBvaW50ZXJJY29uIGltcGxlbWVudHMgYW5kcm9pZC5vcy5QYXJjZWxhYmxlIHsKKyAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24gY3JlYXRlQ3VzdG9tSWNvbihhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcCwgZmxvYXQsIGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uIGdldFN5c3RlbUljb24oYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uIGxvYWRDdXN0b21JY29uKGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLCBpbnQpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKGFuZHJvaWQub3MuUGFyY2VsLCBpbnQpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgYW5kcm9pZC5vcy5QYXJjZWxhYmxlLkNyZWF0b3I8YW5kcm9pZC52aWV3LlBvaW50ZXJJY29uPiBDUkVBVE9SOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0FMSUFTID0gMTAxMDsgLy8gMHgzZjIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9BTExfU0NST0xMID0gMTAxMzsgLy8gMHgzZjUKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9BUlJPVyA9IDEwMDA7IC8vIDB4M2U4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQ0VMTCA9IDEwMDY7IC8vIDB4M2VlCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQ09OVEVYVF9NRU5VID0gMTAwMTsgLy8gMHgzZTkKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9DT1BZID0gMTAxMTsgLy8gMHgzZjMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9DUk9TU0hBSVIgPSAxMDA3OyAvLyAweDNlZgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0RFRkFVTFQgPSAxMDAwOyAvLyAweDNlOAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0dSQUIgPSAxMDIwOyAvLyAweDNmYworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0dSQUJCSU5HID0gMTAyMTsgLy8gMHgzZmQKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9IQU5EID0gMTAwMjsgLy8gMHgzZWEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9IRUxQID0gMTAwMzsgLy8gMHgzZWIKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9IT1JJWk9OVEFMX0RPVUJMRV9BUlJPVyA9IDEwMTQ7IC8vIDB4M2Y2CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfTk9fRFJPUCA9IDEwMTI7IC8vIDB4M2Y0CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfTlVMTCA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1RFWFQgPSAxMDA4OyAvLyAweDNmMAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX1RPUF9MRUZUX0RJQUdPTkFMX0RPVUJMRV9BUlJPVyA9IDEwMTc7IC8vIDB4M2Y5CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfVE9QX1JJR0hUX0RJQUdPTkFMX0RPVUJMRV9BUlJPVyA9IDEwMTY7IC8vIDB4M2Y4CisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfVkVSVElDQUxfRE9VQkxFX0FSUk9XID0gMTAxNTsgLy8gMHgzZjcKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9WRVJUSUNBTF9URVhUID0gMTAwOTsgLy8gMHgzZjEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9XQUlUID0gMTAwNDsgLy8gMHgzZWMKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9aT09NX0lOID0gMTAxODsgLy8gMHgzZmEKKyAgICBmaWVsZCBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVFlMRV9aT09NX09VVCA9IDEwMTk7IC8vIDB4M2ZiCisgIH0KKwogICBwdWJsaWMgY2xhc3MgU2NhbGVHZXN0dXJlRGV0ZWN0b3IgewogICAgIGN0b3IgcHVibGljIFNjYWxlR2VzdHVyZURldGVjdG9yKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnZpZXcuU2NhbGVHZXN0dXJlRGV0ZWN0b3IuT25TY2FsZUdlc3R1cmVMaXN0ZW5lcik7CiAgICAgY3RvciBwdWJsaWMgU2NhbGVHZXN0dXJlRGV0ZWN0b3IoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGFuZHJvaWQudmlldy5TY2FsZUdlc3R1cmVEZXRlY3Rvci5PblNjYWxlR2VzdHVyZUxpc3RlbmVyLCBhbmRyb2lkLm9zLkhhbmRsZXIpOwpAQCAtNDA2ODksNiArNDExNzksNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQgZ2V0UGFyZW50Rm9yQWNjZXNzaWJpbGl0eSgpOwogICAgIG1ldGhvZCBwdWJsaWMgZmxvYXQgZ2V0UGl2b3RYKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFkoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQudmlldy5Qb2ludGVySWNvbiBnZXRQb2ludGVySWNvbihhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQsIGZsb2F0LCBmbG9hdCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcyBnZXRSZXNvdXJjZXMoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGludCBnZXRSaWdodCgpOwogICAgIG1ldGhvZCBwcm90ZWN0ZWQgZmxvYXQgZ2V0UmlnaHRGYWRpbmdFZGdlU3RyZW5ndGgoKTsKQEAgLTQwNzQ1LDYgKzQxMjM2LDcgQEAKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzTmVzdGVkU2Nyb2xsaW5nUGFyZW50KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGhhc09uQ2xpY2tMaXN0ZW5lcnMoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKTsKKyAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNpZW50U3RhdGUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gaGFzV2luZG93Rm9jdXMoKTsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlldyBpbmZsYXRlKGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBpbnQsIGFuZHJvaWQudmlldy5WaWV3R3JvdXApOwpAQCAtNDA4NzEsNiArNDEzNjMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBwb3N0T25BbmltYXRpb24oamF2YS5sYW5nLlJ1bm5hYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgcG9zdE9uQW5pbWF0aW9uRGVsYXllZChqYXZhLmxhbmcuUnVubmFibGUsIGxvbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWZyZXNoRHJhd2FibGVTdGF0ZSgpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZWxlYXNlUG9pbnRlckNhcHR1cmUoKTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gcmVtb3ZlQ2FsbGJhY2tzKGphdmEubGFuZy5SdW5uYWJsZSk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHJlbW92ZU9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lcihhbmRyb2lkLnZpZXcuVmlldy5PbkF0dGFjaFN0YXRlQ2hhbmdlTGlzdGVuZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCByZW1vdmVPbkxheW91dENoYW5nZUxpc3RlbmVyKGFuZHJvaWQudmlldy5WaWV3Lk9uTGF5b3V0Q2hhbmdlTGlzdGVuZXIpOwpAQCAtNDA5NzEsNiArNDE0NjQsOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRQYWRkaW5nUmVsYXRpdmUoaW50LCBpbnQsIGludCwgaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UGl2b3RZKGZsb2F0KTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckNhcHR1cmUoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UG9pbnRlckljb24oYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UHJlc3NlZChib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0UmlnaHQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0Um90YXRpb24oZmxvYXQpOwpAQCAtNDE4MzgsNiArNDIzMzMsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDb250ZW50VmlldyhpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRDb250ZW50VmlldyhhbmRyb2lkLnZpZXcuVmlldyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldENvbnRlbnRWaWV3KGFuZHJvaWQudmlldy5WaWV3LCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtcyk7CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldERlY29yQ2FwdGlvblNoYWRlKGludCk7CiAgICAgbWV0aG9kIHByb3RlY3RlZCB2b2lkIHNldERlZmF1bHRXaW5kb3dGb3JtYXQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RGltQW1vdW50KGZsb2F0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0RWxldmF0aW9uKGZsb2F0KTsKQEAgLTQxODU4LDYgKzQyMzU0LDggQEAKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0TWVkaWFDb250cm9sbGVyKGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYUNvbnRyb2xsZXIpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXROYXZpZ2F0aW9uQmFyQ29sb3IoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0UmVlbnRlclRyYW5zaXRpb24oYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRSZXNpemluZ0NhcHRpb25EcmF3YWJsZShhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIHZvaWQgc2V0UmVzdHJpY3RlZENhcHRpb25BcmVhTGlzdGVuZXIoYW5kcm9pZC52aWV3LldpbmRvdy5SZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lcik7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFJldHVyblRyYW5zaXRpb24oYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb24pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTaGFyZWRFbGVtZW50RW50ZXJUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0U2hhcmVkRWxlbWVudEV4aXRUcmFuc2l0aW9uKGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uKTsKQEAgLTQxODg2LDYgKzQyMzg0LDkgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgdGFrZUtleUV2ZW50cyhib29sZWFuKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgdGFrZVN1cmZhY2UoYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXIuQ2FsbGJhY2syKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgdG9nZ2xlUGFuZWwoaW50LCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQpOworICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQ09SX0NBUFRJT05fU0hBREVfQVVUTyA9IDA7IC8vIDB4MAorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQ09SX0NBUFRJT05fU0hBREVfREFSSyA9IDI7IC8vIDB4MgorICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQ09SX0NBUFRJT05fU0hBREVfTElHSFQgPSAxOyAvLyAweDEKICAgICBmaWVsZCBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGRlcHJlY2F0ZWQgaW50IERFRkFVTFRfRkVBVFVSRVMgPSA2NTsgLy8gMHg0MQogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQUNUSU9OX0JBUiA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfQUNUSU9OX0JBUl9PVkVSTEFZID0gOTsgLy8gMHg5CkBAIC00MTkzMiw2ICs0MjQzMyw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIG9uTWVudU9wZW5lZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgb25QYW5lbENsb3NlZChpbnQsIGFuZHJvaWQudmlldy5NZW51KTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gb25QcmVwYXJlUGFuZWwoaW50LCBhbmRyb2lkLnZpZXcuVmlldywgYW5kcm9pZC52aWV3Lk1lbnUpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblByb3ZpZGVLZXlib2FyZFNob3J0Y3V0cyhqYXZhLnV0aWwuTGlzdDxhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiwgYW5kcm9pZC52aWV3Lk1lbnUpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBvblNlYXJjaFJlcXVlc3RlZChhbmRyb2lkLnZpZXcuU2VhcmNoRXZlbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbldpbmRvd0F0dHJpYnV0ZXNDaGFuZ2VkKGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyk7CkBAIC00MTk0MCw2ICs0MjQ0MiwxMCBAQAogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGUgb25XaW5kb3dTdGFydGluZ0FjdGlvbk1vZGUoYW5kcm9pZC52aWV3LkFjdGlvbk1vZGUuQ2FsbGJhY2ssIGludCk7CiAgIH0KIAorICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGludGVyZmFjZSBXaW5kb3cuUmVzdHJpY3RlZENhcHRpb25BcmVhTGlzdGVuZXIgeworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblJlc3RyaWN0ZWRDYXB0aW9uQXJlYUNoYW5nZWQoYW5kcm9pZC5ncmFwaGljcy5SZWN0KTsKKyAgfQorCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBXaW5kb3dBbmltYXRpb25GcmFtZVN0YXRzIGV4dGVuZHMgYW5kcm9pZC52aWV3LkZyYW1lU3RhdHMgaW1wbGVtZW50cyBhbmRyb2lkLm9zLlBhcmNlbGFibGUgewogICAgIG1ldGhvZCBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChhbmRyb2lkLm9zLlBhcmNlbCwgaW50KTsKQEAgLTQzMjA0LDcgKzQzNzEwLDggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0RXh0cmFWYWx1ZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFeHRyYVZhbHVlT2YoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0SWNvblJlc0lkKCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRMYW5ndWFnZVRhZygpOworICAgIG1ldGhvZCBwdWJsaWMgZGVwcmVjYXRlZCBqYXZhLmxhbmcuU3RyaW5nIGdldExvY2FsZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRNb2RlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TmFtZVJlc0lkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGlzQXNjaWlDYXBhYmxlKCk7CkBAIC00MzIxOSw2ICs0MzcyNiw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlIGJ1aWxkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlLklucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXIgc2V0SXNBc2NpaUNhcGFibGUoYm9vbGVhbik7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlLklucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXIgc2V0SXNBdXhpbGlhcnkoYm9vbGVhbik7CisgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlLklucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXIgc2V0TGFuZ3VhZ2VUYWcoamF2YS5sYW5nLlN0cmluZyk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlLklucHV0TWV0aG9kU3VidHlwZUJ1aWxkZXIgc2V0T3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldFN1YnR5cGVFeHRyYVZhbHVlKGphdmEubGFuZy5TdHJpbmcpOwogICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kU3VidHlwZS5JbnB1dE1ldGhvZFN1YnR5cGVCdWlsZGVyIHNldFN1YnR5cGVJY29uUmVzSWQoaW50KTsKQEAgLTQzMjgyLDcgKzQzNzkwLDggQEAKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5DaGFyU2VxdWVuY2UgZ2V0RGlzcGxheU5hbWUoYW5kcm9pZC5jb250ZW50LkNvbnRleHQsIGphdmEubGFuZy5TdHJpbmcsIGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm8pOwogICAgIG1ldGhvZCBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBnZXRFeHRyYVZhbHVlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldEV4dHJhVmFsdWVPZihqYXZhLmxhbmcuU3RyaW5nKTsKLSAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5TdHJpbmcgZ2V0TG9jYWxlKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdldExhbmd1YWdlVGFnKCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGphdmEubGFuZy5TdHJpbmcgZ2V0TG9jYWxlKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ2V0TmFtZVJlc0lkKCk7CiAgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoYW5kcm9pZC5vcy5QYXJjZWwsIGludCk7CiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBhbmRyb2lkLm9zLlBhcmNlbGFibGUuQ3JlYXRvcjxhbmRyb2lkLnZpZXcudGV4dHNlcnZpY2UuU3BlbGxDaGVja2VyU3VidHlwZT4gQ1JFQVRPUjsKQEAgLTQzNjg1LDcgKzQ0MTk0LDcgQEAKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBzZXRFbmFibGVTbW9vdGhUcmFuc2l0aW9uKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRGYW50YXN5Rm9udEZhbWlseShqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0Rml4ZWRGb250RmFtaWx5KGphdmEubGFuZy5TdHJpbmcpOwotICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRHZW9sb2NhdGlvbkRhdGFiYXNlUGF0aChqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGRlcHJlY2F0ZWQgdm9pZCBzZXRHZW9sb2NhdGlvbkRhdGFiYXNlUGF0aChqYXZhLmxhbmcuU3RyaW5nKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0R2VvbG9jYXRpb25FbmFibGVkKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRKYXZhU2NyaXB0RW5hYmxlZChib29sZWFuKTsKQEAgLTQ0MTI3LDEyICs0NDYzNiwxOCBAQAogICAgIG1ldGhvZCBwdWJsaWMgaW50IGdldFRodW1iT2Zmc2V0KCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IGdldFRodW1iVGludExpc3QoKTsKICAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlIGdldFRodW1iVGludE1vZGUoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUgZ2V0VGlja01hcmsoKTsKKyAgICBtZXRob2QgcHVibGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QgZ2V0VGlja01hcmtUaW50TGlzdCgpOworICAgIG1ldGhvZCBwdWJsaWMgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmLk1vZGUgZ2V0VGlja01hcmtUaW50TW9kZSgpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRLZXlQcm9ncmVzc0luY3JlbWVudChpbnQpOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRTcGxpdFRyYWNrKGJvb2xlYW4pOwogICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaHVtYihhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlKTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGh1bWJPZmZzZXQoaW50KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGh1bWJUaW50TGlzdChhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0KTsKICAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0VGh1bWJUaW50TW9kZShhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmYuTW9kZSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldFRpY2tNYXJrKGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGUpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaWNrTWFya1RpbnRMaXN0KGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRUaWNrTWFya1RpbnRNb2RlKGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZi5Nb2RlKTsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnNTcGlubmVyIGV4dGVuZHMgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcgewpAQCAtNDkwODAsNiArNDk1OTUsOCBAQAogICBwdWJsaWMgY2xhc3MgSW50ZXJuYWxFcnJvciBleHRlbmRzIGphdmEubGFuZy5WaXJ0dWFsTWFjaGluZUVycm9yIHsKICAgICBjdG9yIHB1YmxpYyBJbnRlcm5hbEVycm9yKCk7CiAgICAgY3RvciBwdWJsaWMgSW50ZXJuYWxFcnJvcihqYXZhLmxhbmcuU3RyaW5nKTsKKyAgICBjdG9yIHB1YmxpYyBJbnRlcm5hbEVycm9yKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpOworICAgIGN0b3IgcHVibGljIEludGVybmFsRXJyb3IoamF2YS5sYW5nLlRocm93YWJsZSk7CiAgIH0KIAogICBwdWJsaWMgY2xhc3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gZXh0ZW5kcyBqYXZhLmxhbmcuRXhjZXB0aW9uIHsKQEAgLTQ5ODUyLDYgKzUwMzY5LDggQEAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIFZpcnR1YWxNYWNoaW5lRXJyb3IgZXh0ZW5kcyBqYXZhLmxhbmcuRXJyb3IgewogICAgIGN0b3IgcHVibGljIFZpcnR1YWxNYWNoaW5lRXJyb3IoKTsKICAgICBjdG9yIHB1YmxpYyBWaXJ0dWFsTWFjaGluZUVycm9yKGphdmEubGFuZy5TdHJpbmcpOworICAgIGN0b3IgcHVibGljIFZpcnR1YWxNYWNoaW5lRXJyb3IoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSk7CisgICAgY3RvciBwdWJsaWMgVmlydHVhbE1hY2hpbmVFcnJvcihqYXZhLmxhbmcuVGhyb3dhYmxlKTsKICAgfQogCiAgIHB1YmxpYyBmaW5hbCBjbGFzcyBWb2lkIHsKQEAgLTUzNTk0LDYgKzU0MTEzLDcgQEAKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhCdWlsZGVyIGdldEluc3RhbmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIHRocm93cyBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5Ob1N1Y2hQcm92aWRlckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhCdWlsZGVyIGdldEluc3RhbmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEuc2VjdXJpdHkuUHJvdmlkZXIpIHRocm93cyBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEuc2VjdXJpdHkuUHJvdmlkZXIgZ2V0UHJvdmlkZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aENoZWNrZXIgZ2V0UmV2b2NhdGlvbkNoZWNrZXIoKTsKICAgfQogCiAgIHB1YmxpYyBjbGFzcyBDZXJ0UGF0aEJ1aWxkZXJFeGNlcHRpb24gZXh0ZW5kcyBqYXZhLnNlY3VyaXR5LkdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiB7CkBAIC01MzYxMSw2ICs1NDEzMSwxMyBAQAogICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2VydFBhdGhCdWlsZGVyU3BpIHsKICAgICBjdG9yIHB1YmxpYyBDZXJ0UGF0aEJ1aWxkZXJTcGkoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aEJ1aWxkZXJSZXN1bHQgZW5naW5lQnVpbGQoamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoUGFyYW1ldGVycykgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aEJ1aWxkZXJFeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsKKyAgICBtZXRob2QgcHVibGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aENoZWNrZXIgZW5naW5lR2V0UmV2b2NhdGlvbkNoZWNrZXIoKTsKKyAgfQorCisgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgQ2VydFBhdGhDaGVja2VyIHsKKyAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IHZvaWQgY2hlY2soamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbml0KGJvb2xlYW4pIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRm9yd2FyZENoZWNraW5nU3VwcG9ydGVkKCk7CiAgIH0KIAogICBwdWJsaWMgYWJzdHJhY3QgaW50ZXJmYWNlIENlcnRQYXRoUGFyYW1ldGVycyBpbXBsZW1lbnRzIGphdmEubGFuZy5DbG9uZWFibGUgewpAQCAtNTM2MjUsNiArNTQxNTIsNyBAQAogICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvciBnZXRJbnN0YW5jZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSB0aHJvd3MgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuTm9TdWNoUHJvdmlkZXJFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yIGdldEluc3RhbmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEuc2VjdXJpdHkuUHJvdmlkZXIpIHRocm93cyBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEuc2VjdXJpdHkuUHJvdmlkZXIgZ2V0UHJvdmlkZXIoKTsKKyAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aENoZWNrZXIgZ2V0UmV2b2NhdGlvbkNoZWNrZXIoKTsKICAgICBtZXRob2QgcHVibGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvclJlc3VsdCB2YWxpZGF0ZShqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGgsIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFBhcmFtZXRlcnMpIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuSW52YWxpZEFsZ29yaXRobVBhcmFtZXRlckV4Y2VwdGlvbjsKICAgfQogCkBAIC01MzY2MSw2ICs1NDE4OSw3IEBACiAKICAgcHVibGljIGFic3RyYWN0IGNsYXNzIENlcnRQYXRoVmFsaWRhdG9yU3BpIHsKICAgICBjdG9yIHB1YmxpYyBDZXJ0UGF0aFZhbGlkYXRvclNwaSgpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQ2hlY2tlciBlbmdpbmVHZXRSZXZvY2F0aW9uQ2hlY2tlcigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yUmVzdWx0IGVuZ2luZVZhbGlkYXRlKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aCwgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoUGFyYW1ldGVycykgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbiwgamF2YS5zZWN1cml0eS5JbnZhbGlkQWxnb3JpdGhtUGFyYW1ldGVyRXhjZXB0aW9uOwogICB9CiAKQEAgLTUzODE5LDkgKzU0MzQ4LDEwIEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGggZ2V0Q2VydFBhdGgoKTsKICAgfQogCi0gIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQS0lYQ2VydFBhdGhDaGVja2VyIGltcGxlbWVudHMgamF2YS5sYW5nLkNsb25lYWJsZSB7CisgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBQS0lYQ2VydFBhdGhDaGVja2VyIGltcGxlbWVudHMgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoQ2hlY2tlciBqYXZhLmxhbmcuQ2xvbmVhYmxlIHsKICAgICBjdG9yIHByb3RlY3RlZCBQS0lYQ2VydFBhdGhDaGVja2VyKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNoZWNrKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZSwgamF2YS51dGlsLkNvbGxlY3Rpb248amF2YS5sYW5nLlN0cmluZz4pIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb247CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIGNoZWNrKGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZSkgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIGphdmEubGFuZy5PYmplY3QgY2xvbmUoKTsKICAgICBtZXRob2QgcHVibGljIGFic3RyYWN0IGphdmEudXRpbC5TZXQ8amF2YS5sYW5nLlN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbml0KGJvb2xlYW4pIHRocm93cyBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhWYWxpZGF0b3JFeGNlcHRpb247CkBAIC01Mzg4MSw2ICs1NDQxMSwzMCBAQAogICAgIGVudW1fY29uc3RhbnQgcHVibGljIHN0YXRpYyBmaW5hbCBqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJlYXNvbiBVTlJFQ09HTklaRURfQ1JJVF9FWFQ7CiAgIH0KIAorICBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgUEtJWFJldm9jYXRpb25DaGVja2VyIGV4dGVuZHMgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhDZXJ0UGF0aENoZWNrZXIgeworICAgIGN0b3IgcHJvdGVjdGVkIFBLSVhSZXZvY2F0aW9uQ2hlY2tlcigpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLkxpc3Q8amF2YS5zZWN1cml0eS5jZXJ0LkV4dGVuc2lvbj4gZ2V0T2NzcEV4dGVuc2lvbnMoKTsKKyAgICBtZXRob2QgcHVibGljIGphdmEubmV0LlVSSSBnZXRPY3NwUmVzcG9uZGVyKCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlIGdldE9jc3BSZXNwb25kZXJDZXJ0KCk7CisgICAgbWV0aG9kIHB1YmxpYyBqYXZhLnV0aWwuTWFwPGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGUsIGJ5dGVbXT4gZ2V0T2NzcFJlc3BvbnNlcygpOworICAgIG1ldGhvZCBwdWJsaWMgamF2YS51dGlsLlNldDxqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbj4gZ2V0T3B0aW9ucygpOworICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgamF2YS51dGlsLkxpc3Q8amF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uPiBnZXRTb2Z0RmFpbEV4Y2VwdGlvbnMoKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgc2V0T2NzcEV4dGVuc2lvbnMoamF2YS51dGlsLkxpc3Q8amF2YS5zZWN1cml0eS5jZXJ0LkV4dGVuc2lvbj4pOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPY3NwUmVzcG9uZGVyKGphdmEubmV0LlVSSSk7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9jc3BSZXNwb25kZXJDZXJ0KGphdmEuc2VjdXJpdHkuY2VydC5YNTA5Q2VydGlmaWNhdGUpOworICAgIG1ldGhvZCBwdWJsaWMgdm9pZCBzZXRPY3NwUmVzcG9uc2VzKGphdmEudXRpbC5NYXA8amF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZSwgYnl0ZVtdPik7CisgICAgbWV0aG9kIHB1YmxpYyB2b2lkIHNldE9wdGlvbnMoamF2YS51dGlsLlNldDxqYXZhLnNlY3VyaXR5LmNlcnQuUEtJWFJldm9jYXRpb25DaGVja2VyLk9wdGlvbj4pOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBQS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIGV4dGVuZHMgamF2YS5sYW5nLkVudW0geworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIHZhbHVlT2YoamF2YS5sYW5nLlN0cmluZyk7CisgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb25bXSB2YWx1ZXMoKTsKKyAgICBlbnVtX2NvbnN0YW50IHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gTk9fRkFMTEJBQ0s7CisgICAgZW51bV9jb25zdGFudCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIE9OTFlfRU5EX0VOVElUWTsKKyAgICBlbnVtX2NvbnN0YW50IHB1YmxpYyBzdGF0aWMgZmluYWwgamF2YS5zZWN1cml0eS5jZXJ0LlBLSVhSZXZvY2F0aW9uQ2hlY2tlci5PcHRpb24gUFJFRkVSX0NSTFM7CisgICAgZW51bV9jb25zdGFudCBwdWJsaWMgc3RhdGljIGZpbmFsIGphdmEuc2VjdXJpdHkuY2VydC5QS0lYUmV2b2NhdGlvbkNoZWNrZXIuT3B0aW9uIFNPRlRfRkFJTDsKKyAgfQorCiAgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgUG9saWN5Tm9kZSB7CiAgICAgbWV0aG9kIHB1YmxpYyBhYnN0cmFjdCBqYXZhLnV0aWwuSXRlcmF0b3I8PyBleHRlbmRzIGphdmEuc2VjdXJpdHkuY2VydC5Qb2xpY3lOb2RlPiBnZXRDaGlsZHJlbigpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldERlcHRoKCk7CkBAIC01NDA0MCw2ICs1NDU5NCw3IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZheC5zZWN1cml0eS5hdXRoLng1MDAuWDUwMFByaW5jaXBhbCBnZXRTdWJqZWN0WDUwMFByaW5jaXBhbCgpOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgYnl0ZVtdIGdldFRCU0NlcnRpZmljYXRlKCkgdGhyb3dzIGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uOwogICAgIG1ldGhvZCBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFZlcnNpb24oKTsKKyAgICBtZXRob2QgcHVibGljIHZvaWQgdmVyaWZ5KGphdmEuc2VjdXJpdHkuUHVibGljS2V5LCBqYXZhLnNlY3VyaXR5LlByb3ZpZGVyKSB0aHJvd3MgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5LkludmFsaWRLZXlFeGNlcHRpb24sIGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uLCBqYXZhLnNlY3VyaXR5LlNpZ25hdHVyZUV4Y2VwdGlvbjsKICAgfQogCiAgIHB1YmxpYyBhYnN0cmFjdCBpbnRlcmZhY2UgWDUwOUV4dGVuc2lvbiB7CkBAIC01OTM2OCw4ICs1OTkyMyw4IEBACiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nQnVmZmVyIGFwcGVuZFRhaWwoamF2YS5sYW5nLlN0cmluZ0J1ZmZlcik7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZW5kKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZW5kKGludCk7Ci0gICAgbWV0aG9kIHB1YmxpYyBib29sZWFuIGZpbmQoaW50KTsKICAgICBtZXRob2QgcHVibGljIGJvb2xlYW4gZmluZCgpOworICAgIG1ldGhvZCBwdWJsaWMgYm9vbGVhbiBmaW5kKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdyb3VwKCk7CiAgICAgbWV0aG9kIHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIGdyb3VwKGludCk7CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZ3JvdXBDb3VudCgpOwpAQCAtNTkzOTcsOCArNTk5NTIsOCBAQAogICB9CiAKICAgcHVibGljIGZpbmFsIGNsYXNzIFBhdHRlcm4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm4gY29tcGlsZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIHRocm93cyBqYXZhLnV0aWwucmVnZXguUGF0dGVyblN5bnRheEV4Y2VwdGlvbjsKICAgICBtZXRob2QgcHVibGljIHN0YXRpYyBqYXZhLnV0aWwucmVnZXguUGF0dGVybiBjb21waWxlKGphdmEubGFuZy5TdHJpbmcpOworICAgIG1ldGhvZCBwdWJsaWMgc3RhdGljIGphdmEudXRpbC5yZWdleC5QYXR0ZXJuIGNvbXBpbGUoamF2YS5sYW5nLlN0cmluZywgaW50KSB0aHJvd3MgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm5TeW50YXhFeGNlcHRpb247CiAgICAgbWV0aG9kIHB1YmxpYyBpbnQgZmxhZ3MoKTsKICAgICBtZXRob2QgcHVibGljIGphdmEudXRpbC5yZWdleC5NYXRjaGVyIG1hdGNoZXIoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSk7CiAgICAgbWV0aG9kIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtYXRjaGVzKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5DaGFyU2VxdWVuY2UpOwpAQCAtNTk0MTMsNiArNTk5NjgsNyBAQAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJVEVSQUwgPSAxNjsgLy8gMHgxMAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1VTFRJTElORSA9IDg7IC8vIDB4OAogICAgIGZpZWxkIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOSUNPREVfQ0FTRSA9IDY0OyAvLyAweDQwCisgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JQ09ERV9DSEFSQUNURVJfQ0xBU1MgPSAyNTY7IC8vIDB4MTAwCiAgICAgZmllbGQgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JWF9MSU5FUyA9IDE7IC8vIDB4MQogICB9CiAKZGlmZiAtLWdpdCBhL2FwaS90ZXN0LXJlbW92ZWQudHh0IGIvYXBpL3Rlc3QtcmVtb3ZlZC50eHQKaW5kZXggZjEyZTYxZS4uNmI3OTYxZSAxMDA2NDQKLS0tIGEvYXBpL3Rlc3QtcmVtb3ZlZC50eHQKKysrIGIvYXBpL3Rlc3QtcmVtb3ZlZC50eHQKQEAgLTE5OSw2ICsxOTksMTUgQEAKIAogfQogCitwYWNrYWdlIGFuZHJvaWQudGVzdC5tb2NrIHsKKworICBwdWJsaWMgY2xhc3MgTW9ja1BhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyIHsKKyAgICBtZXRob2QgcHVibGljIGRlcHJlY2F0ZWQgamF2YS5sYW5nLlN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGludCk7CisgICAgbWV0aG9kIHB1YmxpYyBkZXByZWNhdGVkIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQpOworICB9CisKK30KKwogcGFja2FnZSBhbmRyb2lkLnRleHQuZm9ybWF0IHsKIAogICBwdWJsaWMgY2xhc3MgRGF0ZUZvcm1hdCB7CmRpZmYgLS1naXQgYS9jbWRzL2FtL3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9hbS9BbS5qYXZhIGIvY21kcy9hbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvYW0vQW0uamF2YQppbmRleCA0ZjdhMTA5Li43MmU4YzNiIDEwMDY0NAotLS0gYS9jbWRzL2FtL3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9hbS9BbS5qYXZhCisrKyBiL2NtZHMvYW0vc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL2FtL0FtLmphdmEKQEAgLTE1OSw2ICsxNTksNyBAQAogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgc3RhcnQgPERJU1BMQVlfSUQ+IDxJTlRFTlQ+XG4iICsKICAgICAgICAgICAgICAgICAiICAgICAgIGFtIHN0YWNrIG1vdmV0YXNrIDxUQVNLX0lEPiA8U1RBQ0tfSUQ+IFt0cnVlfGZhbHNlXVxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayByZXNpemUgPFNUQUNLX0lEPiA8TEVGVCxUT1AsUklHSFQsQk9UVE9NPlxuIiArCisgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayByZXNpemUtZG9ja2VkLXN0YWNrIDxMRUZULFRPUCxSSUdIVCxCT1RUT00+IFs8VEFTS19MRUZULFRBU0tfVE9QLFRBU0tfUklHSFQsVEFTS19CT1RUT00+XVxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBzaXplLWRvY2tlZC1zdGFjay10ZXN0OiA8U1RFUF9TSVpFPiA8bHx0fHJ8Yj4gW0RFTEFZX01TXVxuIiArCiAgICAgICAgICAgICAgICAgIiAgICAgICBhbSBzdGFjayBtb3ZlLXRvcC1hY3Rpdml0eS10by1waW5uZWQtc3RhY2s6IDxTVEFDS19JRD4gPExFRlQsVE9QLFJJR0hULEJPVFRPTT5cbiIgKwogICAgICAgICAgICAgICAgICIgICAgICAgYW0gc3RhY2sgcG9zaXRpb250YXNrIDxUQVNLX0lEPiA8U1RBQ0tfSUQ+IDxQT1NJVElPTj5cbiIgKwpAQCAtMjk5LDcgKzMwMCwxMSBAQAogICAgICAgICAgICAgICAgICJhbSBzdGFjayBtb3ZldGFzazogbW92ZSA8VEFTS19JRD4gZnJvbSBpdHMgY3VycmVudCBzdGFjayB0byB0aGUgdG9wICh0cnVlKSBvciIgKwogICAgICAgICAgICAgICAgICIgICBib3R0b20gKGZhbHNlKSBvZiA8U1RBQ0tfSUQ+LlxuIiArCiAgICAgICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAgICAgImFtIHN0YWNrIHJlc2l6ZTogY2hhbmdlIDxTVEFDS19JRD4gc2l6ZSBhbmQgcG9zaXRpb24gdG8gPExFRlQsVE9QLFJJR0hULEJPVFRPTT4uIiArCisgICAgICAgICAgICAgICAgImFtIHN0YWNrIHJlc2l6ZTogY2hhbmdlIDxTVEFDS19JRD4gc2l6ZSBhbmQgcG9zaXRpb24gdG8gPExFRlQsVE9QLFJJR0hULEJPVFRPTT4uXG4iICsKKyAgICAgICAgICAgICAgICAiXG4iICsKKyAgICAgICAgICAgICAgICAiYW0gc3RhY2sgcmVzaXplLWRvY2tlZC1zdGFjazogY2hhbmdlIGRvY2tlZCBzdGFjayB0byA8TEVGVCxUT1AsUklHSFQsQk9UVE9NPlxuIiArCisgICAgICAgICAgICAgICAgIiAgIGFuZCBzdXBwbHlpbmcgdGVtcG9yYXJ5IGRpZmZlcmVudCB0YXNrIGJvdW5kcyBpbmRpY2F0ZWQgYnlcbiIgKworICAgICAgICAgICAgICAgICIgICA8VEFTS19MRUZULFRPUCxSSUdIVCxCT1RUT00+XG4iICsKICAgICAgICAgICAgICAgICAiXG4iICsKICAgICAgICAgICAgICAgICAiYW0gc3RhY2sgc2l6ZS1kb2NrZWQtc3RhY2stdGVzdDogdGVzdCBjb21tYW5kIGZvciBzaXppbmcgZG9ja2VkIHN0YWNrIGJ5XG4iICsKICAgICAgICAgICAgICAgICAiICAgPFNURVBfU0laRT4gaW5jcmVtZW50cyBmcm9tIHRoZSBzaWRlIDxsPmVmdCwgPHQ+b3AsIDxyPmlnaHQsIG9yIDxiPm90dG9tXG4iICsKQEAgLTEwNzUsMTYgKzEwODAsMTYgQEAKIAogICAgIHByaXZhdGUgdm9pZCBydW5CdWdSZXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIG9wdDsKLSAgICAgICAgYm9vbGVhbiBwcm9ncmVzcyA9IGZhbHNlOworICAgICAgICBpbnQgYnVncmVwb3J0VHlwZSA9IEFjdGl2aXR5TWFuYWdlci5CVUdSRVBPUlRfT1BUSU9OX0ZVTEw7CiAgICAgICAgIHdoaWxlICgob3B0PW5leHRPcHRpb24oKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG9wdC5lcXVhbHMoIi0tcHJvZ3Jlc3MiKSkgewotICAgICAgICAgICAgICAgIHByb2dyZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBidWdyZXBvcnRUeXBlID0gQWN0aXZpdHlNYW5hZ2VyLkJVR1JFUE9SVF9PUFRJT05fSU5URVJBQ1RJVkU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IFVua25vd24gb3B0aW9uOiAiICsgb3B0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbUFtLnJlcXVlc3RCdWdSZXBvcnQocHJvZ3Jlc3MpOworICAgICAgICBtQW0ucmVxdWVzdEJ1Z1JlcG9ydChidWdyZXBvcnRUeXBlKTsKICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJZb3VyIGxvdmVseSBidWcgcmVwb3J0IGlzIGJlaW5nIGNyZWF0ZWQ7IHBsZWFzZSBiZSBwYXRpZW50LiIpOwogICAgIH0KIApAQCAtMTY4Myw2ICsxNjg4LDkgQEAKICAgICAgICAgICAgIGNhc2UgInJlc2l6ZSI6CiAgICAgICAgICAgICAgICAgcnVuU3RhY2tSZXNpemUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInJlc2l6ZS1kb2NrZWQtc3RhY2siOgorICAgICAgICAgICAgICAgIHJ1blN0YWNrUmVzaXplRG9ja2VkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICJwb3NpdGlvbnRhc2siOgogICAgICAgICAgICAgICAgIHJ1blN0YWNrUG9zaXRpb25UYXNrKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzUxLDYgKzE3NTksMjAgQEAKICAgICAgICAgcmVzaXplU3RhY2soc3RhY2tJZCwgYm91bmRzLCAwKTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgcnVuU3RhY2tSZXNpemVEb2NrZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSBnZXRCb3VuZHMoKTsKKyAgICAgICAgZmluYWwgUmVjdCB0YXNrQm91bmRzID0gZ2V0Qm91bmRzKCk7CisgICAgICAgIGlmIChib3VuZHMgPT0gbnVsbCB8fCB0YXNrQm91bmRzID09IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiRXJyb3I6IGludmFsaWQgaW5wdXQgYm91bmRzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1BbS5yZXNpemVEb2NrZWRTdGFjayhib3VuZHMsIHRhc2tCb3VuZHMsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgc2hvd0Vycm9yKCJFcnJvcjogcmVzaXppbmcgZG9ja2VkIHN0YWNrICIgKyBlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMsIGludCBkZWxheU1zKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGJvdW5kcyA9PSBudWxsKSB7CiAgICAgICAgICAgICBzaG93RXJyb3IoIkVycm9yOiBpbnZhbGlkIGlucHV0IGJvdW5kcyIpOwpkaWZmIC0tZ2l0IGEvY21kcy9wbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvcG0vUG0uamF2YSBiL2NtZHMvcG0vc3JjL2NvbS9hbmRyb2lkL2NvbW1hbmRzL3BtL1BtLmphdmEKaW5kZXggYWQxYjNiNS4uMjQ0NDlkNCAxMDA2NDQKLS0tIGEvY21kcy9wbS9zcmMvY29tL2FuZHJvaWQvY29tbWFuZHMvcG0vUG0uamF2YQorKysgYi9jbWRzL3BtL3NyYy9jb20vYW5kcm9pZC9jb21tYW5kcy9wbS9QbS5qYXZhCkBAIC0zNzYsNiArMzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIT0gUGFja2FnZUluc3RhbGxlci5TVEFUVVNfU1VDQ0VTUykgewogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIHRyeSB7CkBAIC01OTEsNyArNTkyLDYgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGYWlsdXJlIFsiCiAgICAgICAgICAgICAgICAgICAgICAgICArIHJlc3VsdC5nZXRTdHJpbmdFeHRyYShQYWNrYWdlSW5zdGFsbGVyLkVYVFJBX1NUQVRVU19NRVNTQUdFKSArICJdIik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGYWlsdXJlIGRldGFpbHM6ICIgKyByZXN1bHQuZ2V0RXh0cmFzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICAgICAgfSBmaW5hbGx5IHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZS5qYXZhCmluZGV4IDQ2OGMxNDUuLjMyOTNjMjYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0FjY2Vzc2liaWxpdHlTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2UuamF2YQpAQCAtMTYsMTEgKzE2LDEzIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZTsKIAoraW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuR2VzdHVyZURlc2NyaXB0aW9uLk1vdGlvbkV2ZW50R2VuZXJhdG9yOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVnaW9uOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0yOSw4ICszMSwxMSBAQAogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VySW1wbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CkBAIC00MSwxMCArNDYsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkhhbmRsZXJDYWxsZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuU29tZUFyZ3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIAogLyoqCiAgKiBBbiBhY2Nlc3NpYmlsaXR5IHNlcnZpY2UgcnVucyBpbiB0aGUgYmFja2dyb3VuZCBhbmQgcmVjZWl2ZXMgY2FsbGJhY2tzIGJ5IHRoZSBzeXN0ZW0KQEAgLTM3Niw2ICszNzgsNyBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbktleUV2ZW50KEtleUV2ZW50IGV2ZW50KTsKICAgICAgICAgcHVibGljIHZvaWQgb25NYWduaWZpY2F0aW9uQ2hhbmdlZChATm9uTnVsbCBSZWdpb24gcmVnaW9uLAogICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlLCBmbG9hdCBjZW50ZXJYLCBmbG9hdCBjZW50ZXJZKTsKKyAgICAgICAgcHVibGljIHZvaWQgb25QZXJmb3JtR2VzdHVyZVJlc3VsdChpbnQgc2VxdWVuY2UsIGJvb2xlYW4gY29tcGxldGVkU3VjY2Vzc2Z1bGx5KTsKICAgICB9CiAKICAgICBwcml2YXRlIGludCBtQ29ubmVjdGlvbklkOwpAQCAtMzg4LDYgKzM5MSwxMiBAQAogCiAgICAgcHJpdmF0ZSBNYWduaWZpY2F0aW9uQ29udHJvbGxlciBtTWFnbmlmaWNhdGlvbkNvbnRyb2xsZXI7CiAKKyAgICBwcml2YXRlIGludCBtR2VzdHVyZVN0YXR1c0NhbGxiYWNrU2VxdWVuY2U7CisKKyAgICBwcml2YXRlIFNwYXJzZUFycmF5PEdlc3R1cmVSZXN1bHRDYWxsYmFja0luZm8+IG1HZXN0dXJlU3RhdHVzQ2FsbGJhY2tJbmZvczsKKworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NrID0gbmV3IE9iamVjdCgpOworCiAgICAgLyoqCiAgICAgICogQ2FsbGJhY2sgZm9yIHtAbGluayBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnR9cy4KICAgICAgKgpAQCAtNTUxLDYgKzU2MCw4OCBAQAogICAgICAgICByZXR1cm4gbU1hZ25pZmljYXRpb25Db250cm9sbGVyOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIERpc3BhdGNoIGEgZ2VzdHVyZSB0byB0aGUgdG91Y2ggc2NyZWVuLiBBbnkgZ2VzdHVyZXMgY3VycmVudGx5IGluIHByb2dyZXNzLCB3aGV0aGVyIGZyb20KKyAgICAgKiB0aGUgdXNlciwgdGhpcyBzZXJ2aWNlLCBvciBhbm90aGVyIHNlcnZpY2UsIHdpbGwgYmUgY2FuY2VsbGVkLgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW4gb3JkZXIgdG8gZGlzcGF0Y2ggZ2VzdHVyZXMsIHlvdXIgc2VydmljZQorICAgICAqIG11c3QgZGVjbGFyZSB0aGUgY2FwYWJpbGl0eSBieSBzZXR0aW5nIHRoZQorICAgICAqIHtAbGluayBhbmRyb2lkLlIuc3R5bGVhYmxlI0FjY2Vzc2liaWxpdHlTZXJ2aWNlX2NhblBlcmZvcm1HZXN0dXJlc30KKyAgICAgKiBwcm9wZXJ0eSBpbiBpdHMgbWV0YS1kYXRhLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCisgICAgICoge0BsaW5rICNTRVJWSUNFX01FVEFfREFUQX0uCisgICAgICoKKyAgICAgKiBAcGFyYW0gZ2VzdHVyZSBUaGUgZ2VzdHVyZSB0byBkaXNwYXRjaAorICAgICAqIEBwYXJhbSBjYWxsYmFjayBUaGUgb2JqZWN0IHRvIGNhbGwgYmFjayB3aGVuIHRoZSBzdGF0dXMgb2YgdGhlIGdlc3R1cmUgaXMga25vd24uIElmCisgICAgICoge0Bjb2RlIG51bGx9LCBubyBzdGF0dXMgaXMgcmVwb3J0ZWQuCisgICAgICogQHBhcmFtIGhhbmRsZXIgVGhlIGhhbmRsZXIgb24gd2hpY2ggdG8gY2FsbCBiYWNrIHRoZSB7QGNvZGUgY2FsbGJhY2t9IG9iamVjdC4gSWYKKyAgICAgKiB7QGNvZGUgbnVsbH0sIHRoZSBvYmplY3QgaXMgY2FsbGVkIGJhY2sgb24gdGhlIHNlcnZpY2UncyBtYWluIHRocmVhZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBnZXN0dXJlIGlzIGRpc3BhdGNoZWQsIHtAY29kZSBmYWxzZX0gaWYgbm90LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGRpc3BhdGNoR2VzdHVyZShATm9uTnVsbCBHZXN0dXJlRGVzY3JpcHRpb24gZ2VzdHVyZSwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBHZXN0dXJlUmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICBATnVsbGFibGUgSGFuZGxlciBoYW5kbGVyKSB7CisgICAgICAgIGZpbmFsIElBY2Nlc3NpYmlsaXR5U2VydmljZUNvbm5lY3Rpb24gY29ubmVjdGlvbiA9CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ2xpZW50LmdldEluc3RhbmNlKCkuZ2V0Q29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1Db25uZWN0aW9uSWQpOworICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgTGlzdDxNb3Rpb25FdmVudD4gZXZlbnRzID0gTW90aW9uRXZlbnRHZW5lcmF0b3IuZ2V0TW90aW9uRXZlbnRzRnJvbUdlc3R1cmVEZXNjcmlwdGlvbigKKyAgICAgICAgICAgICAgICBnZXN0dXJlLCAxMDApOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uc2VuZE1vdGlvbkV2ZW50cygrK21HZXN0dXJlU3RhdHVzQ2FsbGJhY2tTZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxlZExpc3RTbGljZTw+KGV2ZW50cykpOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtR2VzdHVyZVN0YXR1c0NhbGxiYWNrSW5mb3MgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUdlc3R1cmVTdGF0dXNDYWxsYmFja0luZm9zID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBHZXN0dXJlUmVzdWx0Q2FsbGJhY2tJbmZvIGNhbGxiYWNrSW5mbyA9IG5ldyBHZXN0dXJlUmVzdWx0Q2FsbGJhY2tJbmZvKGdlc3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssIGhhbmRsZXIpOworICAgICAgICAgICAgICAgICAgICBtR2VzdHVyZVN0YXR1c0NhbGxiYWNrSW5mb3MucHV0KG1HZXN0dXJlU3RhdHVzQ2FsbGJhY2tTZXF1ZW5jZSwgY2FsbGJhY2tJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24ocmUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgb25QZXJmb3JtR2VzdHVyZVJlc3VsdChpbnQgc2VxdWVuY2UsIGZpbmFsIGJvb2xlYW4gY29tcGxldGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgIGlmIChtR2VzdHVyZVN0YXR1c0NhbGxiYWNrSW5mb3MgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEdlc3R1cmVSZXN1bHRDYWxsYmFja0luZm8gY2FsbGJhY2tJbmZvOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBjYWxsYmFja0luZm8gPSBtR2VzdHVyZVN0YXR1c0NhbGxiYWNrSW5mb3MuZ2V0KHNlcXVlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBHZXN0dXJlUmVzdWx0Q2FsbGJhY2tJbmZvIGZpbmFsQ2FsbGJhY2tJbmZvID0gY2FsbGJhY2tJbmZvOworICAgICAgICBpZiAoKGNhbGxiYWNrSW5mbyAhPSBudWxsKSAmJiAoY2FsbGJhY2tJbmZvLmdlc3R1cmVEZXNjcmlwdGlvbiAhPSBudWxsKQorICAgICAgICAgICAgICAgICYmIChjYWxsYmFja0luZm8uY2FsbGJhY2sgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIGlmIChjYWxsYmFja0luZm8uaGFuZGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLmhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxDYWxsYmFja0luZm8uY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vbkNvbXBsZXRlZChmaW5hbENhbGxiYWNrSW5mby5nZXN0dXJlRGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbENhbGxiYWNrSW5mby5jYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm9uQ2FuY2VsbGVkKGZpbmFsQ2FsbGJhY2tJbmZvLmdlc3R1cmVEZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29tcGxldGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmZvLmNhbGxiYWNrLm9uQ29tcGxldGVkKGNhbGxiYWNrSW5mby5nZXN0dXJlRGVzY3JpcHRpb24pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0luZm8uY2FsbGJhY2sub25DYW5jZWxsZWQoY2FsbGJhY2tJbmZvLmdlc3R1cmVEZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgb25NYWduaWZpY2F0aW9uQ2hhbmdlZChATm9uTnVsbCBSZWdpb24gcmVnaW9uLCBmbG9hdCBzY2FsZSwKICAgICAgICAgICAgIGZsb2F0IGNlbnRlclgsIGZsb2F0IGNlbnRlclkpIHsKICAgICAgICAgaWYgKG1NYWduaWZpY2F0aW9uQ29udHJvbGxlciAhPSBudWxsKSB7CkBAIC0xMDgyLDYgKzExNzMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGUsIGZsb2F0IGNlbnRlclgsIGZsb2F0IGNlbnRlclkpIHsKICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5U2VydmljZS50aGlzLm9uTWFnbmlmaWNhdGlvbkNoYW5nZWQocmVnaW9uLCBzY2FsZSwgY2VudGVyWCwgY2VudGVyWSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25QZXJmb3JtR2VzdHVyZVJlc3VsdChpbnQgc2VxdWVuY2UsIGJvb2xlYW4gY29tcGxldGVkU3VjY2Vzc2Z1bGx5KSB7CisgICAgICAgICAgICAgICAgQWNjZXNzaWJpbGl0eVNlcnZpY2UudGhpcy5vblBlcmZvcm1HZXN0dXJlUmVzdWx0KHNlcXVlbmNlLCBjb21wbGV0ZWRTdWNjZXNzZnVsbHkpOworICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTExMDAsNiArMTE5Niw3IEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBET19DTEVBUl9BQ0NFU1NJQklMSVRZX0NBQ0hFID0gNTsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERPX09OX0tFWV9FVkVOVCA9IDY7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBET19PTl9NQUdOSUZJQ0FUSU9OX0NIQU5HRUQgPSA3OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRE9fR0VTVFVSRV9DT01QTEVURSA9IDg7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyQ2FsbGVyIG1DYWxsZXI7CiAKQEAgLTExNTgsNiArMTI1NSwxMiBAQAogICAgICAgICAgICAgbUNhbGxlci5zZW5kTWVzc2FnZShtZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUGVyZm9ybUdlc3R1cmVSZXN1bHQoaW50IHNlcXVlbmNlLCBib29sZWFuIHN1Y2Nlc3NmdWxseSkgeworICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbUNhbGxlci5vYnRhaW5NZXNzYWdlSUkoRE9fR0VTVFVSRV9DT01QTEVURSwgc2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NmdWxseSA/IDEgOiAwKTsKKyAgICAgICAgICAgIG1DYWxsZXIuc2VuZE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgZXhlY3V0ZU1lc3NhZ2UoTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2Uud2hhdCkgewpAQCAtMTI0Miw5ICsxMzQ1LDQ3IEBACiAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vbk1hZ25pZmljYXRpb25DaGFuZ2VkKHJlZ2lvbiwgc2NhbGUsIGNlbnRlclgsIGNlbnRlclkpOwogICAgICAgICAgICAgICAgIH0gcmV0dXJuOwogCisgICAgICAgICAgICAgICAgY2FzZSBET19HRVNUVVJFX0NPTVBMRVRFOiB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3VjY2Vzc2Z1bGx5ID0gbWVzc2FnZS5hcmcyID09IDE7CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFjay5vblBlcmZvcm1HZXN0dXJlUmVzdWx0KG1lc3NhZ2UuYXJnMSwgc3VjY2Vzc2Z1bGx5KTsKKyAgICAgICAgICAgICAgICB9IHJldHVybjsKKwogICAgICAgICAgICAgICAgIGRlZmF1bHQgOgogICAgICAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiVW5rbm93biBtZXNzYWdlIHR5cGUgIiArIG1lc3NhZ2Uud2hhdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGFzcyB1c2VkIHRvIHJlcG9ydCBzdGF0dXMgb2YgZGlzcGF0Y2hlZCBnZXN0dXJlcworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgR2VzdHVyZVJlc3VsdENhbGxiYWNrIHsKKyAgICAgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5CisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBnZXN0dXJlRGVzY3JpcHRpb24gVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBnZXN0dXJlIHRoYXQgY29tcGxldGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25Db21wbGV0ZWQoR2VzdHVyZURlc2NyaXB0aW9uIGdlc3R1cmVEZXNjcmlwdGlvbikgeworICAgICAgICB9CisKKyAgICAgICAgLyoqIENhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIHdhcyBjYW5jZWxsZWQKKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGdlc3R1cmVEZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGdlc3R1cmUgdGhhdCB3YXMgY2FuY2VsbGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25DYW5jZWxsZWQoR2VzdHVyZURlc2NyaXB0aW9uIGdlc3R1cmVEZXNjcmlwdGlvbikgeworICAgICAgICB9CisgICAgfQorCisgICAgLyogT2JqZWN0IHRvIGtlZXAgdHJhY2sgb2YgZ2VzdHVyZSByZXN1bHQgY2FsbGJhY2tzICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgR2VzdHVyZVJlc3VsdENhbGxiYWNrSW5mbyB7CisgICAgICAgIEdlc3R1cmVEZXNjcmlwdGlvbiBnZXN0dXJlRGVzY3JpcHRpb247CisgICAgICAgIEdlc3R1cmVSZXN1bHRDYWxsYmFjayBjYWxsYmFjazsKKyAgICAgICAgSGFuZGxlciBoYW5kbGVyOworCisgICAgICAgIEdlc3R1cmVSZXN1bHRDYWxsYmFja0luZm8oR2VzdHVyZURlc2NyaXB0aW9uIGdlc3R1cmVEZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICBHZXN0dXJlUmVzdWx0Q2FsbGJhY2sgY2FsbGJhY2ssIEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICAgICAgdGhpcy5nZXN0dXJlRGVzY3JpcHRpb24gPSBnZXN0dXJlRGVzY3JpcHRpb247CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uamF2YQppbmRleCAyYzk4ZmVmLi4wNzliZGZjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uamF2YQpAQCAtMTEwLDYgKzExMCwxMiBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTiA9IDB4MDAwMDAwMTA7CiAKKyAgICAvKioKKyAgICAgKiBDYXBhYmlsaXR5OiBUaGlzIGFjY2Vzc2liaWxpdHkgc2VydmljZSBjYW4gcGVyZm9ybSBnZXN0dXJlcy4KKyAgICAgKiBAc2VlIGFuZHJvaWQuUi5zdHlsZWFibGUjQWNjZXNzaWJpbGl0eVNlcnZpY2VfY2FuUGVyZm9ybUdlc3R1cmVzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9DQU5fUEVSRk9STV9HRVNUVVJFUyA9IDB4MDAwMDAwMjA7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTcGFyc2VBcnJheTxDYXBhYmlsaXR5SW5mbz4gc0F2YWlsYWJsZUNhcGFiaWxpdHlJbmZvcyA9CiAgICAgICAgICAgICBuZXcgU3BhcnNlQXJyYXk8Q2FwYWJpbGl0eUluZm8+KCk7CiAgICAgc3RhdGljIHsKQEAgLTEzMyw2ICsxMzksMTAgQEAKICAgICAgICAgICAgICAgICBuZXcgQ2FwYWJpbGl0eUluZm8oQ0FQQUJJTElUWV9DQU5fQ09OVFJPTF9NQUdOSUZJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbikpOworICAgICAgICBzQXZhaWxhYmxlQ2FwYWJpbGl0eUluZm9zLnB1dChDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTLAorICAgICAgICAgICAgICAgIG5ldyBDYXBhYmlsaXR5SW5mbyhDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTLAorICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5jYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzKSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNzYsMTIgKzI4Niw3IEBACiAgICAgLyoqCiAgICAgICogVGhpcyBmbGFnIHJlcXVlc3RzIGZyb20gdGhlIHN5c3RlbSB0byBmaWx0ZXIga2V5IGV2ZW50cy4gSWYgdGhpcyBmbGFnCiAgICAgICogaXMgc2V0IHRoZSBhY2Nlc3NpYmlsaXR5IHNlcnZpY2Ugd2lsbCByZWNlaXZlIHRoZSBrZXkgZXZlbnRzIGJlZm9yZQotICAgICAqIGFwcGxpY2F0aW9ucyBhbGxvd2luZyBpdCBpbXBsZW1lbnQgZ2xvYmFsIHNob3J0Y3V0cy4gU2V0dGluZyB0aGlzIGZsYWcKLSAgICAgKiBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGlzIHNlcnZpY2Ugd2lsbCBmaWx0ZXIga2V5IGV2ZW50cyBzaW5jZSBvbmx5Ci0gICAgICogb25lIHNlcnZpY2UgY2FuIGRvIHNvIGF0IGFueSBnaXZlbiB0aW1lLiBUaGlzIGF2b2lkcyB1c2VyIGNvbmZ1c2lvbiBkdWUKLSAgICAgKiB0byBiZWhhdmlvciBjaGFuZ2UgaW4gY2FzZSBkaWZmZXJlbnQga2V5IGZpbHRlcmluZyBzZXJ2aWNlcyBhcmUgZW5hYmxlZC4KLSAgICAgKiBJZiB0aGVyZSBpcyBhbHJlYWR5IGFub3RoZXIga2V5IGZpbHRlcmluZyBzZXJ2aWNlIGVuYWJsZWQsIHRoaXMgb25lIHdpbGwKLSAgICAgKiBub3QgcmVjZWl2ZSBrZXkgZXZlbnRzLgorICAgICAqIGFwcGxpY2F0aW9ucyBhbGxvd2luZyBpdCBpbXBsZW1lbnQgZ2xvYmFsIHNob3J0Y3V0cy4KICAgICAgKiA8cD4KICAgICAgKiBTZXJ2aWNlcyB0aGF0IHdhbnQgdG8gc2V0IHRoaXMgZmxhZyBoYXZlIHRvIGRlY2xhcmUgdGhpcyBjYXBhYmlsaXR5CiAgICAgICogaW4gdGhlaXIgbWV0YS1kYXRhIGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZSB7QGxpbmsgYW5kcm9pZC5SLmF0dHIKQEAgLTUxNiw2ICs1MjEsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgLkFjY2Vzc2liaWxpdHlTZXJ2aWNlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uLCBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICBtQ2FwYWJpbGl0aWVzIHw9IENBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhc0F0dHJpYnV0ZXMuZ2V0Qm9vbGVhbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZQorICAgICAgICAgICAgICAgICAgICAuQWNjZXNzaWJpbGl0eVNlcnZpY2VfY2FuUGVyZm9ybUdlc3R1cmVzLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBtQ2FwYWJpbGl0aWVzIHw9IENBUEFCSUxJVFlfQ0FOX1BFUkZPUk1fR0VTVFVSRVM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBUeXBlZFZhbHVlIHBlZWtlZFZhbHVlID0gYXNBdHRyaWJ1dGVzLnBlZWtWYWx1ZSgKICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQWNjZXNzaWJpbGl0eVNlcnZpY2VfZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgaWYgKHBlZWtlZFZhbHVlICE9IG51bGwpIHsKQEAgLTYxNiw2ICs2MjUsOCBAQAogICAgICAqIEBzZWUgI0NBUEFCSUxJVFlfQ0FOX1JFUVVFU1RfVE9VQ0hfRVhQTE9SQVRJT04KICAgICAgKiBAc2VlICNDQVBBQklMSVRZX0NBTl9SRVFVRVNUX0VOSEFOQ0VEX1dFQl9BQ0NFU1NJQklMSVRZCiAgICAgICogQHNlZSAjQ0FQQUJJTElUWV9GSUxURVJfS0VZX0VWRU5UUworICAgICAqIEBzZWUgI0NBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTgorICAgICAqIEBzZWUgI0NBUEFCSUxJVFlfQ0FOX1BFUkZPUk1fR0VTVFVSRVMKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGdldENhcGFiaWxpdGllcygpIHsKICAgICAgICAgcmV0dXJuIG1DYXBhYmlsaXRpZXM7CkBAIC02MzEsNiArNjQyLDggQEAKICAgICAgKiBAc2VlICNDQVBBQklMSVRZX0NBTl9SRVFVRVNUX1RPVUNIX0VYUExPUkFUSU9OCiAgICAgICogQHNlZSAjQ0FQQUJJTElUWV9DQU5fUkVRVUVTVF9FTkhBTkNFRF9XRUJfQUNDRVNTSUJJTElUWQogICAgICAqIEBzZWUgI0NBUEFCSUxJVFlfRklMVEVSX0tFWV9FVkVOVFMKKyAgICAgKiBAc2VlICNDQVBBQklMSVRZX0NBTl9DT05UUk9MX01BR05JRklDQVRJT04KKyAgICAgKiBAc2VlICNDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtOTMzLDYgKzk0Niw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJDQVBBQklMSVRZX0NBTl9GSUxURVJfS0VZX0VWRU5UUyI7CiAgICAgICAgICAgICBjYXNlIENBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTjoKICAgICAgICAgICAgICAgICByZXR1cm4gIkNBUEFCSUxJVFlfQ0FOX0NPTlRST0xfTUFHTklGSUNBVElPTiI7CisgICAgICAgICAgICBjYXNlIENBUEFCSUxJVFlfQ0FOX1BFUkZPUk1fR0VTVFVSRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTIjsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9HZXN0dXJlRGVzY3JpcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFhYmNmCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvR2VzdHVyZURlc2NyaXB0aW9uLmphdmEKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2U7CisKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50UmFuZ2U7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aE1lYXN1cmU7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudC5Qb2ludGVyQ29vcmRzOworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudC5Qb2ludGVyUHJvcGVydGllczsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0NvbmZpZ3VyYXRpb247CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQWNjZXNzaWJpbGl0eSBzZXJ2aWNlcyB3aXRoIHRoZQorICoge0BsaW5rIGFuZHJvaWQuUi5zdHlsZWFibGUjQWNjZXNzaWJpbGl0eVNlcnZpY2VfY2FuUGVyZm9ybUdlc3R1cmVzfSBwcm9wZXJ0eSBjYW4gZGlzcGF0Y2gKKyAqIGdlc3R1cmVzLiBUaGlzIGNsYXNzIGRlc2NyaWJlcyB0aG9zZSBnZXN0dXJlcy4gR2VzdHVyZXMgYXJlIG1hZGUgdXAgb2Ygb25lIG9yIG1vcmUgc3Ryb2tlcy4KKyAqIEdlc3R1cmVzIGFyZSBpbW11dGFibGU7IHVzZSB0aGUge0Bjb2RlIGNyZWF0ZX0gbWV0aG9kcyB0byBnZXQgY29tbW9uIGdlc3R1cmUsIG9yIGEKKyAqIHtAY29kZSBCdWlsZGVyfSB0byBjcmVhdGUgYSBuZXcgb25lLgorICogPHA+CisgKiBTcGF0aWFsIGRpbWVuc2lvbnMgdGhyb3VnaG91dCBhcmUgaW4gc2NyZWVuIHBpeGVscy4gVGltZSBpcyBtZWFzdXJlZCBpbiBtaWxsaXNlY29uZHMuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBHZXN0dXJlRGVzY3JpcHRpb24geworICAgIC8qKiBHZXN0dXJlcyBtYXkgY29udGFpbiBubyBtb3JlIHRoYW4gdGhpcyBtYW55IHN0cm9rZXMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVhfU1RST0tFX0NPVU5UID0gMTA7CisKKyAgICAvKioKKyAgICAgKiBVcHBlciBib3VuZCBvbiB0b3RhbCBnZXN0dXJlIGR1cmF0aW9uLiBOZWFybHkgYWxsIGdlc3R1cmVzIHdpbGwgYmUgbXVjaCBzaG9ydGVyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBNQVhfR0VTVFVSRV9EVVJBVElPTl9NUyA9IDYwICogMTAwMDsKKworICAgIHByaXZhdGUgZmluYWwgTGlzdDxTdHJva2VEZXNjcmlwdGlvbj4gbVN0cm9rZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVRlbXBQb3MgPSBuZXcgZmxvYXRbMl07CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBkZXNjcmlwdGlvbiBvZiBhIGNsaWNrIGdlc3R1cmUKKyAgICAgKgorICAgICAqIEBwYXJhbSB4IFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2suIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSB5IFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2suIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqCisgICAgICogQHJldHVybiBBIGRlc2NyaXB0aW9uIG9mIGEgY2xpY2sgYXQgKHgsIHkpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBHZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlQ2xpY2soQEludFJhbmdlKGZyb20gPSAwKSBpbnQgeCwKKyAgICAgICAgICAgIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IHkpIHsKKyAgICAgICAgUGF0aCBjbGlja1BhdGggPSBuZXcgUGF0aCgpOworICAgICAgICBjbGlja1BhdGgubW92ZVRvKHgsIHkpOworICAgICAgICBjbGlja1BhdGgubGluZVRvKHggKyAxLCB5KTsKKyAgICAgICAgcmV0dXJuIG5ldyBHZXN0dXJlRGVzY3JpcHRpb24oCisgICAgICAgICAgICAgICAgbmV3IFN0cm9rZURlc2NyaXB0aW9uKGNsaWNrUGF0aCwgMCwgVmlld0NvbmZpZ3VyYXRpb24uZ2V0VGFwVGltZW91dCgpKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgZGVzY3JpcHRpb24gb2YgYSBsb25nIGNsaWNrIGdlc3R1cmUKKyAgICAgKgorICAgICAqIEBwYXJhbSB4IFRoZSB4IGNvb3JkaW5hdGUgdG8gY2xpY2suIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSB5IFRoZSB5IGNvb3JkaW5hdGUgdG8gY2xpY2suIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqCisgICAgICogQHJldHVybiBBIGRlc2NyaXB0aW9uIG9mIGEgY2xpY2sgYXQgKHgsIHkpCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBHZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlTG9uZ0NsaWNrKEBJbnRSYW5nZShmcm9tID0gMCkgaW50IHgsCisgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDApIGludCB5KSB7CisgICAgICAgIFBhdGggY2xpY2tQYXRoID0gbmV3IFBhdGgoKTsKKyAgICAgICAgY2xpY2tQYXRoLm1vdmVUbyh4LCB5KTsKKyAgICAgICAgY2xpY2tQYXRoLmxpbmVUbyh4ICsgMSwgeSk7CisgICAgICAgIGludCBsb25nUHJlc3NUaW1lID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0TG9uZ1ByZXNzVGltZW91dCgpOworICAgICAgICByZXR1cm4gbmV3IEdlc3R1cmVEZXNjcmlwdGlvbigKKyAgICAgICAgICAgICAgICBuZXcgU3Ryb2tlRGVzY3JpcHRpb24oY2xpY2tQYXRoLCAwLCBsb25nUHJlc3NUaW1lICsgKGxvbmdQcmVzc1RpbWUgLyAyKSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIGRlc2NyaXB0aW9uIG9mIGEgc3dpcGUgZ2VzdHVyZQorICAgICAqCisgICAgICogQHBhcmFtIHN0YXJ0WCBUaGUgeCBjb29yZGluYXRlIG9mIHRoZSBzdGFydGluZyBwb2ludC4gTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICogQHBhcmFtIHN0YXJ0WSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBzdGFydGluZyBwb2ludC4gTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICogQHBhcmFtIGVuZFggVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgZW5kaW5nIHBvaW50LiBNdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAgICAgKiBAcGFyYW0gZW5kWSBUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBlbmRpbmcgcG9pbnQuIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSBkdXJhdGlvbiBUaGUgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byBjb21wbGV0ZSB0aGUgZ2VzdHVyZS4gTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgZGVzY3JpcHRpb24gb2YgYSBzd2lwZSBmcm9tICh7QGNvZGUgc3RhcnRYfSwge0Bjb2RlIHN0YXJ0WX0pIHRvCisgICAgICogKHtAY29kZSBlbmRYfSwge0Bjb2RlIGVuZFl9KSB0aGF0IHRha2VzIHtAY29kZSBkdXJhdGlvbn0gbWlsbGlzZWNvbmRzLiBSZXR1cm5zIHtAY29kZSBudWxsfQorICAgICAqIGlmIHRoZSBwYXRoIHNwZWNpZmllZCBmb3IgdGhlIHN3aXBlIGlzIGludmFsaWQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBHZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlU3dpcGUoQEludFJhbmdlKGZyb20gPSAwKSBpbnQgc3RhcnRYLAorICAgICAgICAgICAgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgc3RhcnRZLAorICAgICAgICAgICAgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZW5kWCwKKyAgICAgICAgICAgIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGVuZFksCisgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDAsIHRvID0gTUFYX0dFU1RVUkVfRFVSQVRJT05fTVMpIGxvbmcgZHVyYXRpb24pIHsKKyAgICAgICAgUGF0aCBzd2lwZVBhdGggPSBuZXcgUGF0aCgpOworICAgICAgICBzd2lwZVBhdGgubW92ZVRvKHN0YXJ0WCwgc3RhcnRZKTsKKyAgICAgICAgc3dpcGVQYXRoLmxpbmVUbyhlbmRYLCBlbmRZKTsKKyAgICAgICAgcmV0dXJuIG5ldyBHZXN0dXJlRGVzY3JpcHRpb24obmV3IFN0cm9rZURlc2NyaXB0aW9uKHN3aXBlUGF0aCwgMCwgZHVyYXRpb24pKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBkZXNjcmlwdGlvbiBmb3IgYSBwaW5jaCAob3Igem9vbSkgZ2VzdHVyZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjZW50ZXJYIFRoZSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgcGluY2guIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSBjZW50ZXJZIFRoZSB5IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRlciBvZiB0aGUgcGluY2guIE11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSBzdGFydFNwYWNpbmcgVGhlIHNwYWNpbmcgb2YgdGhlIHRvdWNoIHBvaW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBnZXN0dXJlLiBNdXN0IG5vdAorICAgICAqIGJlIG5lZ2F0aXZlLgorICAgICAqIEBwYXJhbSBlbmRTcGFjaW5nIFRoZSBzcGFjaW5nIG9mIHRoZSB0b3VjaCBwb2ludHMgYXQgdGhlIGVuZCBvZiB0aGUgZ2VzdHVyZS4gTXVzdCBub3QgYmUKKyAgICAgKiBuZWdhdGl2ZS4KKyAgICAgKiBAcGFyYW0gb3JpZW50YXRpb24gVGhlIGFuZ2xlLCBpbiBkZWdyZWVzLCBvZiB0aGUgZ2VzdHVyZS4gMCByZXByZXNlbnRzIGEgaG9yaXpvbnRhbCBwaW5jaAorICAgICAqIEBwYXJhbSBkdXJhdGlvbiBUaGUgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCB0byBjb21wbGV0ZSB0aGUgZ2VzdHVyZS4gTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIEEgZGVzY3JpcHRpb24gb2YgYSBwaW5jaCBjZW50ZXJlZCBhdCAoe2NvZGUgY2VudGVyWH0sIHtAY29kZSBjZW50ZXJZfSkgdGhhdCBzdGFydHMKKyAgICAgKiB3aXRoIHRoZSB0b3VjaCBwb2ludHMgc3BhY2VkIGJ5IHtAY29kZSBzdGFydFNwYWNpbmd9IGFuZCBlbmRzIHdpdGggdGhlbSBzcGFjZWQgYnkKKyAgICAgKiB7QGNvZGUgZW5kU3BhY2luZ30gdGhhdCBsYXN0cyB7QGNvZGUgZHVyYXRpb259IG1zLiBSZXR1cm5zIHtAY29kZSBudWxsfSBpZiBlaXRoZXIgcGF0aAorICAgICAqIHNwZWNpZmllZCBmb3IgdGhlIHBpbmNoIGlzIGludmFsaWQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBHZXN0dXJlRGVzY3JpcHRpb24gY3JlYXRlUGluY2goQEludFJhbmdlKGZyb20gPSAwKSBpbnQgY2VudGVyWCwKKyAgICAgICAgICAgIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGNlbnRlclksCisgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDApIGludCBzdGFydFNwYWNpbmcsCisgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDApIGludCBlbmRTcGFjaW5nLAorICAgICAgICAgICAgZmxvYXQgb3JpZW50YXRpb24sCisgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDAsIHRvID0gTUFYX0dFU1RVUkVfRFVSQVRJT05fTVMpIGxvbmcgZHVyYXRpb24pIHsKKyAgICAgICAgaWYgKChzdGFydFNwYWNpbmcgPCAwKSB8fCAoZW5kU3BhY2luZyA8IDApKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQaW5jaCBzcGFjaW5nIGNhbm5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICB9CisgICAgICAgIGZsb2F0W10gc3RhcnRQb2ludDEgPSBuZXcgZmxvYXRbMl07CisgICAgICAgIGZsb2F0W10gZW5kUG9pbnQxID0gbmV3IGZsb2F0WzJdOworICAgICAgICBmbG9hdFtdIHN0YXJ0UG9pbnQyID0gbmV3IGZsb2F0WzJdOworICAgICAgICBmbG9hdFtdIGVuZFBvaW50MiA9IG5ldyBmbG9hdFsyXTsKKworICAgICAgICAvKiBCdWlsZCBwb2ludHMgZm9yIGEgaG9yaXpvbnRhbCBnZXN0dXJlIGNlbnRlcmVkIGF0IHRoZSBvcmlnaW4gKi8KKyAgICAgICAgc3RhcnRQb2ludDFbMF0gPSBzdGFydFNwYWNpbmcgLyAyOworICAgICAgICBzdGFydFBvaW50MVsxXSA9IDA7CisgICAgICAgIGVuZFBvaW50MVswXSA9IGVuZFNwYWNpbmcgLyAyOworICAgICAgICBlbmRQb2ludDFbMV0gPSAwOworICAgICAgICBzdGFydFBvaW50MlswXSA9IC1zdGFydFNwYWNpbmcgLyAyOworICAgICAgICBzdGFydFBvaW50MlsxXSA9IDA7CisgICAgICAgIGVuZFBvaW50MlswXSA9IC1lbmRTcGFjaW5nIC8gMjsKKyAgICAgICAgZW5kUG9pbnQyWzFdID0gMDsKKworICAgICAgICAvKiBSb3RhdGUgYW5kIHRyYW5zbGF0ZSB0aGUgcG9pbnRzICovCisgICAgICAgIE1hdHJpeCBtYXRyaXggPSBuZXcgTWF0cml4KCk7CisgICAgICAgIG1hdHJpeC5zZXRSb3RhdGUob3JpZW50YXRpb24pOworICAgICAgICBtYXRyaXgucG9zdFRyYW5zbGF0ZShjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICAgICAgbWF0cml4Lm1hcFBvaW50cyhzdGFydFBvaW50MSk7CisgICAgICAgIG1hdHJpeC5tYXBQb2ludHMoZW5kUG9pbnQxKTsKKyAgICAgICAgbWF0cml4Lm1hcFBvaW50cyhzdGFydFBvaW50Mik7CisgICAgICAgIG1hdHJpeC5tYXBQb2ludHMoZW5kUG9pbnQyKTsKKworICAgICAgICBQYXRoIHBhdGgxID0gbmV3IFBhdGgoKTsKKyAgICAgICAgcGF0aDEubW92ZVRvKHN0YXJ0UG9pbnQxWzBdLCBzdGFydFBvaW50MVsxXSk7CisgICAgICAgIHBhdGgxLmxpbmVUbyhlbmRQb2ludDFbMF0sIGVuZFBvaW50MVsxXSk7CisgICAgICAgIFBhdGggcGF0aDIgPSBuZXcgUGF0aCgpOworICAgICAgICBwYXRoMi5tb3ZlVG8oc3RhcnRQb2ludDJbMF0sIHN0YXJ0UG9pbnQyWzFdKTsKKyAgICAgICAgcGF0aDIubGluZVRvKGVuZFBvaW50MlswXSwgZW5kUG9pbnQyWzFdKTsKKworICAgICAgICByZXR1cm4gbmV3IEdlc3R1cmVEZXNjcmlwdGlvbihBcnJheXMuYXNMaXN0KAorICAgICAgICAgICAgICAgIG5ldyBTdHJva2VEZXNjcmlwdGlvbihwYXRoMSwgMCwgZHVyYXRpb24pLAorICAgICAgICAgICAgICAgIG5ldyBTdHJva2VEZXNjcmlwdGlvbihwYXRoMiwgMCwgZHVyYXRpb24pKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBHZXN0dXJlRGVzY3JpcHRpb24oKSB7fQorCisgICAgcHJpdmF0ZSBHZXN0dXJlRGVzY3JpcHRpb24oTGlzdDxTdHJva2VEZXNjcmlwdGlvbj4gc3Ryb2tlcykgeworICAgICAgICBtU3Ryb2tlcy5hZGRBbGwoc3Ryb2tlcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBHZXN0dXJlRGVzY3JpcHRpb24oU3Ryb2tlRGVzY3JpcHRpb24gc3Ryb2tlKSB7CisgICAgICAgIG1TdHJva2VzLmFkZChzdHJva2UpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbnVtYmVyIG9mIHN0cm9rZSBpbiB0aGUgZ2VzdHVyZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIG51bWJlciBvZiBzdHJva2VzIGluIHRoaXMgZ2VzdHVyZQorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0U3Ryb2tlQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtU3Ryb2tlcy5zaXplKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVhZCBhIHN0cm9rZSBmcm9tIHRoZSBnZXN0dXJlCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBzdHJva2UKKyAgICAgKgorICAgICAqIEByZXR1cm4gQSBkZXNjcmlwdGlvbiBvZiB0aGUgc3Ryb2tlLgorICAgICAqLworICAgIHB1YmxpYyBTdHJva2VEZXNjcmlwdGlvbiBnZXRTdHJva2UoQEludFJhbmdlKGZyb20gPSAwKSBpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1TdHJva2VzLmdldChpbmRleCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBzbWFsbGVzdCBrZXkgcG9pbnQgKHdoZXJlIGEgcGF0aCBzdGFydHMgb3IgZW5kcykgdGhhdCBpcyBhdCBsZWFzdCBhIHNwZWNpZmllZAorICAgICAqIG9mZnNldAorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG1pbmltdW0gc3RhcnQgdGltZQorICAgICAqIEByZXR1cm4gVGhlIG5leHQga2V5IHRpbWUgdGhhdCBpcyBhdCBsZWFzdCB0aGUgb2Zmc2V0IG9yIC0xIGlmIG9uZSBjYW4ndCBiZSBmb3VuZAorICAgICAqLworICAgIHByaXZhdGUgbG9uZyBnZXROZXh0S2V5UG9pbnRBdExlYXN0KGxvbmcgb2Zmc2V0KSB7CisgICAgICAgIGxvbmcgbmV4dEtleVBvaW50ID0gTG9uZy5NQVhfVkFMVUU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVN0cm9rZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGxvbmcgdGhpc1N0YXJ0VGltZSA9IG1TdHJva2VzLmdldChpKS5tU3RhcnRUaW1lOworICAgICAgICAgICAgaWYgKCh0aGlzU3RhcnRUaW1lIDwgbmV4dEtleVBvaW50KSAmJiAodGhpc1N0YXJ0VGltZSA+PSBvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgbmV4dEtleVBvaW50ID0gdGhpc1N0YXJ0VGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvbmcgdGhpc0VuZFRpbWUgPSBtU3Ryb2tlcy5nZXQoaSkubUVuZFRpbWU7CisgICAgICAgICAgICBpZiAoKHRoaXNFbmRUaW1lIDwgbmV4dEtleVBvaW50KSAmJiAodGhpc0VuZFRpbWUgPj0gb2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIG5leHRLZXlQb2ludCA9IHRoaXNFbmRUaW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAobmV4dEtleVBvaW50ID09IExvbmcuTUFYX1ZBTFVFKSA/IC0xTCA6IG5leHRLZXlQb2ludDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHBvaW50cyB0aGF0IGNvcnJlc3BvbmQgdG8gYSBwYXJ0aWN1bGFyIG1vbWVudCBpbiB0aW1lLgorICAgICAqIEBwYXJhbSB0aW1lIFRoZSB0aW1lIG9mIGludGVyZXN0CisgICAgICogQHBhcmFtIHRvdWNoUG9pbnRzIEFuIGFycmF5IHRvIGhvbGQgdGhlIGN1cnJlbnQgdG91Y2ggcG9pbnRzLiBNdXN0IGJlIHByZWFsbG9jYXRlZCB0byBhdAorICAgICAqIGxlYXN0IHRoZSBudW1iZXIgb2YgcGF0aHMgaW4gdGhlIGdlc3R1cmUgdG8gcHJldmVudCBnb2luZyBvdXQgb2YgYm91bmRzCisgICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHBvaW50cyBmb3VuZCwgYW5kIHRodXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzZXQgaW4gZWFjaCBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgaW50IGdldFBvaW50c0ZvclRpbWUobG9uZyB0aW1lLCBUb3VjaFBvaW50W10gdG91Y2hQb2ludHMpIHsKKyAgICAgICAgaW50IG51bVBvaW50c0ZvdW5kID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU3Ryb2tlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgU3Ryb2tlRGVzY3JpcHRpb24gc3Ryb2tlRGVzY3JpcHRpb24gPSBtU3Ryb2tlcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAoc3Ryb2tlRGVzY3JpcHRpb24uaGFzUG9pbnRGb3JUaW1lKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgdG91Y2hQb2ludHNbbnVtUG9pbnRzRm91bmRdLm1QYXRoSW5kZXggPSBpOworICAgICAgICAgICAgICAgIHRvdWNoUG9pbnRzW251bVBvaW50c0ZvdW5kXS5tSXNTdGFydE9mUGF0aCA9ICh0aW1lID09IHN0cm9rZURlc2NyaXB0aW9uLm1TdGFydFRpbWUpOworICAgICAgICAgICAgICAgIHRvdWNoUG9pbnRzW251bVBvaW50c0ZvdW5kXS5tSXNFbmRPZlBhdGggPSAodGltZSA9PSBzdHJva2VEZXNjcmlwdGlvbi5tRW5kVGltZSk7CisgICAgICAgICAgICAgICAgc3Ryb2tlRGVzY3JpcHRpb24uZ2V0UG9zRm9yVGltZSh0aW1lLCBtVGVtcFBvcyk7CisgICAgICAgICAgICAgICAgdG91Y2hQb2ludHNbbnVtUG9pbnRzRm91bmRdLm1YID0gTWF0aC5yb3VuZChtVGVtcFBvc1swXSk7CisgICAgICAgICAgICAgICAgdG91Y2hQb2ludHNbbnVtUG9pbnRzRm91bmRdLm1ZID0gTWF0aC5yb3VuZChtVGVtcFBvc1sxXSk7CisgICAgICAgICAgICAgICAgbnVtUG9pbnRzRm91bmQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVtUG9pbnRzRm91bmQ7CisgICAgfQorCisgICAgLy8gVG90YWwgZHVyYXRpb24gYXNzdW1lcyB0aGF0IHRoZSBnZXN0dXJlIHN0YXJ0cyBhdCAwOyB3YWl0aW5nIGFyb3VuZCB0byBzdGFydCBhIGdlc3R1cmUKKyAgICAvLyBjb3VudHMgYWdhaW5zdCB0b3RhbCBkdXJhdGlvbgorICAgIHByaXZhdGUgc3RhdGljIGxvbmcgZ2V0VG90YWxEdXJhdGlvbihMaXN0PFN0cm9rZURlc2NyaXB0aW9uPiBwYXRocykgeworICAgICAgICBsb25nIGxhdGVzdEVuZCA9IExvbmcuTUlOX1ZBTFVFOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGhzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBTdHJva2VEZXNjcmlwdGlvbiBwYXRoID0gcGF0aHMuZ2V0KGkpOworICAgICAgICAgICAgbGF0ZXN0RW5kID0gTWF0aC5tYXgobGF0ZXN0RW5kLCBwYXRoLm1FbmRUaW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTWF0aC5tYXgobGF0ZXN0RW5kLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCdWlsZGVyIGZvciBhIHtAY29kZSBHZXN0dXJlRGVzY3JpcHRpb259CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKKworICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8U3Ryb2tlRGVzY3JpcHRpb24+IG1TdHJva2VzID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFkZCBhIHN0cm9rZSB0byB0aGUgZ2VzdHVyZSBkZXNjcmlwdGlvbi4gVXAgdG8ge0Bjb2RlIE1BWF9TVFJPS0VfQ09VTlR9IHBhdGhzIG1heSBiZQorICAgICAgICAgKiBhZGRlZCB0byBhIGdlc3R1cmUsIGFuZCB0aGUgdG90YWwgZ2VzdHVyZSBkdXJhdGlvbiAoZWFybGllc3QgcGF0aCBzdGFydCB0aW1lIHRvIGxhdGVzdCBwYXRoCisgICAgICAgICAqIGVuZCB0aW1lKSBtYXkgbm90IGV4Y2VlZCB7QGNvZGUgTUFYX0dFU1RVUkVfRFVSQVRJT05fTVN9LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc3Ryb2tlRGVzY3JpcHRpb24gdGhlIHN0cm9rZSB0byBhZGQuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gdGhpcworICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkU3Ryb2tlKEBOb25OdWxsIFN0cm9rZURlc2NyaXB0aW9uIHN0cm9rZURlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBpZiAobVN0cm9rZXMuc2l6ZSgpID49IE1BWF9TVFJPS0VfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdGluZyB0byBhZGQgdG9vIG1hbnkgc3Ryb2tlcyB0byBhIGdlc3R1cmUiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0cm9rZXMuYWRkKHN0cm9rZURlc2NyaXB0aW9uKTsKKworICAgICAgICAgICAgaWYgKGdldFRvdGFsRHVyYXRpb24obVN0cm9rZXMpID4gTUFYX0dFU1RVUkVfRFVSQVRJT05fTVMpIHsKKyAgICAgICAgICAgICAgICBtU3Ryb2tlcy5yZW1vdmUoc3Ryb2tlRGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJHZXN0dXJlIHdvdWxkIGV4Y2VlZCBtYXhpbXVtIGR1cmF0aW9uIHdpdGggbmV3IHN0cm9rZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgR2VzdHVyZURlc2NyaXB0aW9uIGJ1aWxkKCkgeworICAgICAgICAgICAgaWYgKG1TdHJva2VzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkdlc3R1cmVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3Ryb2tlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IEdlc3R1cmVEZXNjcmlwdGlvbihtU3Ryb2tlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbW11dGFibGUgZGVzY3JpcHRpb24gb2Ygc3Ryb2tlIHRoYXQgY2FuIGJlIHBhcnQgb2YgYSBnZXN0dXJlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3Ryb2tlRGVzY3JpcHRpb24geworICAgICAgICBQYXRoIG1QYXRoOworICAgICAgICBsb25nIG1TdGFydFRpbWU7CisgICAgICAgIGxvbmcgbUVuZFRpbWU7CisgICAgICAgIHByaXZhdGUgZmxvYXQgbVRpbWVUb0xlbmd0aENvbnZlcnNpb247CisgICAgICAgIHByaXZhdGUgUGF0aE1lYXN1cmUgbVBhdGhNZWFzdXJlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB0byBmb2xsb3cuIE11c3QgaGF2ZSBleGFjdGx5IG9uZSBjb250b3VyLCBhbmQgdGhhdCBjb250b3VyIG11c3QKKyAgICAgICAgICogaGF2ZSBub256ZXJvIGxlbmd0aC4gVGhlIGJvdW5kcyBvZiB0aGUgcGF0aCBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAgICAgICAgICogQHBhcmFtIHN0YXJ0VGltZSBUaGUgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCBmcm9tIHRoZSB0aW1lIHRoZSBnZXN0dXJlIHN0YXJ0cyB0byB0aGUKKyAgICAgICAgICogdGltZSB0aGUgc3Ryb2tlIHNob3VsZCBzdGFydC4gTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICAgICAqIEBwYXJhbSBkdXJhdGlvbiBUaGUgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcywgdGhlIHN0cm9rZSB0YWtlcyB0byB0cmF2ZXJzZSB0aGUgcGF0aC4KKyAgICAgICAgICogTXVzdCBub3QgYmUgbmVnYXRpdmUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgU3Ryb2tlRGVzY3JpcHRpb24oQE5vbk51bGwgUGF0aCBwYXRoLAorICAgICAgICAgICAgICAgIEBJbnRSYW5nZShmcm9tID0gMCwgdG8gPSBNQVhfR0VTVFVSRV9EVVJBVElPTl9NUykgbG9uZyBzdGFydFRpbWUsCisgICAgICAgICAgICAgICAgQEludFJhbmdlKGZyb20gPSAwLCB0byA9IE1BWF9HRVNUVVJFX0RVUkFUSU9OX01TKSBsb25nIGR1cmF0aW9uKSB7CisgICAgICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkR1cmF0aW9uIG11c3QgYmUgcG9zaXRpdmUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGFydFRpbWUgPCAwKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3RhcnQgdGltZSBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUmVjdEYgYm91bmRzID0gbmV3IFJlY3RGKCk7CisgICAgICAgICAgICBwYXRoLmNvbXB1dGVCb3VuZHMoYm91bmRzLCBmYWxzZSAvKiB1bnVzZWQgKi8pOworICAgICAgICAgICAgaWYgKChib3VuZHMuYm90dG9tIDwgMCkgfHwgKGJvdW5kcy50b3AgPCAwKSB8fCAoYm91bmRzLnJpZ2h0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgfHwgKGJvdW5kcy5sZWZ0IDwgMCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXRoIGJvdW5kcyBtdXN0IG5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVBhdGggPSBuZXcgUGF0aChwYXRoKTsKKyAgICAgICAgICAgIG1QYXRoTWVhc3VyZSA9IG5ldyBQYXRoTWVhc3VyZShwYXRoLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAobVBhdGhNZWFzdXJlLmdldExlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJQYXRoIGhhcyB6ZXJvIGxlbmd0aCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1QYXRoTWVhc3VyZS5uZXh0Q29udG91cigpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUGF0aCBoYXMgbW9yZSB0aGFuIG9uZSBjb250b3VyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ2FsbGluZyBuZXh0Q29udG91ciBoYXMgbW92ZWQgbVBhdGhNZWFzdXJlIG9mZiB0aGUgZmlyc3QgY29udG91ciwgd2hpY2ggaXMgdGhlIG9ubHkKKyAgICAgICAgICAgICAqIG9uZSB3ZSBjYXJlIGFib3V0LiBTZXQgdGhlIHBhdGggYWdhaW4gdG8gZ28gYmFjayB0byB0aGUgZmlyc3QgY29udG91ci4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgbVBhdGhNZWFzdXJlLnNldFBhdGgocGF0aCwgZmFsc2UpOworICAgICAgICAgICAgbVN0YXJ0VGltZSA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIG1FbmRUaW1lID0gc3RhcnRUaW1lICsgZHVyYXRpb247CisgICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7CisgICAgICAgICAgICAgICAgbVRpbWVUb0xlbmd0aENvbnZlcnNpb24gPSBnZXRMZW5ndGgoKSAvIGR1cmF0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHJpZXZlIGEgY29weSBvZiB0aGUgcGF0aCBmb3IgdGhpcyBzdHJva2UKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBBIGNvcHkgb2YgdGhlIHBhdGgKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBQYXRoIGdldFBhdGgoKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFBhdGgobVBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgc3Ryb2tlJ3Mgc3RhcnQgdGltZQorICAgICAgICAgKgorICAgICAgICAgKiBAcmV0dXJuIHRoZSBzdGFydCB0aW1lIGZvciB0aGlzIHN0cm9rZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBsb25nIGdldFN0YXJ0VGltZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtU3RhcnRUaW1lOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEdldCB0aGUgc3Ryb2tlJ3MgZHVyYXRpb24KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0aGUgZHVyYXRpb24gZm9yIHRoaXMgc3Ryb2tlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgbG9uZyBnZXREdXJhdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBtRW5kVGltZSAtIG1TdGFydFRpbWU7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBnZXRMZW5ndGgoKSB7CisgICAgICAgICAgICByZXR1cm4gbVBhdGhNZWFzdXJlLmdldExlbmd0aCgpOworICAgICAgICB9CisKKyAgICAgICAgLyogQXNzdW1lcyBoYXNQb2ludEZvclRpbWUgcmV0dXJucyB0cnVlICovCisgICAgICAgIGJvb2xlYW4gZ2V0UG9zRm9yVGltZShsb25nIHRpbWUsIGZsb2F0W10gcG9zKSB7CisgICAgICAgICAgICBpZiAodGltZSA9PSBtRW5kVGltZSkgeworICAgICAgICAgICAgICAgIC8vIENsb3NlIHRvIHRoZSBlbmQgdGltZSwgcm91bmRvZmYgY2FuIGJlIGEgcHJvYmxlbQorICAgICAgICAgICAgICAgIHJldHVybiBtUGF0aE1lYXN1cmUuZ2V0UG9zVGFuKGdldExlbmd0aCgpLCBwb3MsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmxvYXQgbGVuZ3RoID0gbVRpbWVUb0xlbmd0aENvbnZlcnNpb24gKiAoKGZsb2F0KSAodGltZSAtIG1TdGFydFRpbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBtUGF0aE1lYXN1cmUuZ2V0UG9zVGFuKGxlbmd0aCwgcG9zLCBudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gaGFzUG9pbnRGb3JUaW1lKGxvbmcgdGltZSkgeworICAgICAgICAgICAgcmV0dXJuICgodGltZSA+PSBtU3RhcnRUaW1lKSAmJiAodGltZSA8PSBtRW5kVGltZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVG91Y2hQb2ludCB7CisgICAgICAgIGludCBtUGF0aEluZGV4OworICAgICAgICBib29sZWFuIG1Jc1N0YXJ0T2ZQYXRoOworICAgICAgICBib29sZWFuIG1Jc0VuZE9mUGF0aDsKKyAgICAgICAgZmxvYXQgbVg7CisgICAgICAgIGZsb2F0IG1ZOworCisgICAgICAgIHZvaWQgY29weUZyb20oVG91Y2hQb2ludCBvdGhlcikgeworICAgICAgICAgICAgbVBhdGhJbmRleCA9IG90aGVyLm1QYXRoSW5kZXg7CisgICAgICAgICAgICBtSXNTdGFydE9mUGF0aCA9IG90aGVyLm1Jc1N0YXJ0T2ZQYXRoOworICAgICAgICAgICAgbUlzRW5kT2ZQYXRoID0gb3RoZXIubUlzRW5kT2ZQYXRoOworICAgICAgICAgICAgbVggPSBvdGhlci5tWDsKKyAgICAgICAgICAgIG1ZID0gb3RoZXIubVk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDbGFzcyB0byBjb252ZXJ0IGEgR2VzdHVyZURlc2NyaXB0aW9uIHRvIGEgc2VyaWVzIG9mIE1vdGlvbkV2ZW50cy4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgTW90aW9uRXZlbnRHZW5lcmF0b3IgeworICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RhbnRzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbGwgTW90aW9uRXZlbnRzCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfTUVUQV9TVEFURSA9IDA7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVkVOVF9CVVRUT05fU1RBVEUgPSAwOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX0lEID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0VER0VfRkxBR1MgPSAwOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU09VUkNFID0gSW5wdXREZXZpY2UuU09VUkNFX1RPVUNIU0NSRUVOOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfRkxBR1MgPSAwOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBFVkVOVF9YX1BSRUNJU0lPTiA9IDE7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IEVWRU5UX1lfUFJFQ0lTSU9OID0gMTsKKworICAgICAgICAvKiBMYXppbHktY3JlYXRlZCBzY3JhdGNoIG1lbW9yeSBmb3IgcHJvY2Vzc2luZyB0b3VjaGVzICovCisgICAgICAgIHByaXZhdGUgc3RhdGljIFRvdWNoUG9pbnRbXSBzQ3VycmVudFRvdWNoUG9pbnRzOworICAgICAgICBwcml2YXRlIHN0YXRpYyBUb3VjaFBvaW50W10gc0xhc3RUb3VjaFBvaW50czsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgUG9pbnRlckNvb3Jkc1tdIHNQb2ludGVyQ29vcmRzOworICAgICAgICBwcml2YXRlIHN0YXRpYyBQb2ludGVyUHJvcGVydGllc1tdIHNQb2ludGVyUHJvcHM7CisKKyAgICAgICAgc3RhdGljIExpc3Q8TW90aW9uRXZlbnQ+IGdldE1vdGlvbkV2ZW50c0Zyb21HZXN0dXJlRGVzY3JpcHRpb24oCisgICAgICAgICAgICAgICAgR2VzdHVyZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBpbnQgc2FtcGxlVGltZU1zKSB7CisgICAgICAgICAgICBmaW5hbCBMaXN0PE1vdGlvbkV2ZW50PiBtb3Rpb25FdmVudHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICAgICAgLy8gUG9pbnQgZGF0YSBhdCBlYWNoIHRpbWUgd2UgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yCisgICAgICAgICAgICBmaW5hbCBUb3VjaFBvaW50W10gY3VycmVudFRvdWNoUG9pbnRzID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFRvdWNoUG9pbnRzKGRlc2NyaXB0aW9uLmdldFN0cm9rZUNvdW50KCkpOworICAgICAgICAgICAgLy8gUG9pbnQgZGF0YSBzZW50IGluIGxhc3QgdG91Y2ggZXZlbnQKKyAgICAgICAgICAgIGludCBsYXN0VG91Y2hQb2ludFNpemUgPSAwOworICAgICAgICAgICAgZmluYWwgVG91Y2hQb2ludFtdIGxhc3RUb3VjaFBvaW50cyA9CisgICAgICAgICAgICAgICAgICAgIGdldExhc3RUb3VjaFBvaW50cyhkZXNjcmlwdGlvbi5nZXRTdHJva2VDb3VudCgpKTsKKworICAgICAgICAgICAgLyogTG9vcCB0aHJvdWdoIGVhY2ggdGltZSBzbGljZSB3aGVyZSB0aGVyZSBhcmUgdG91Y2ggcG9pbnRzICovCisgICAgICAgICAgICBsb25nIHRpbWVTaW5jZUdlc3R1cmVTdGFydCA9IDA7CisgICAgICAgICAgICBsb25nIG5leHRLZXlQb2ludFRpbWUgPSBkZXNjcmlwdGlvbi5nZXROZXh0S2V5UG9pbnRBdExlYXN0KHRpbWVTaW5jZUdlc3R1cmVTdGFydCk7CisgICAgICAgICAgICB3aGlsZSAobmV4dEtleVBvaW50VGltZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgdGltZVNpbmNlR2VzdHVyZVN0YXJ0ID0gKGxhc3RUb3VjaFBvaW50U2l6ZSA9PSAwKSA/IG5leHRLZXlQb2ludFRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIDogTWF0aC5taW4obmV4dEtleVBvaW50VGltZSwgdGltZVNpbmNlR2VzdHVyZVN0YXJ0ICsgc2FtcGxlVGltZU1zKTsKKyAgICAgICAgICAgICAgICBpbnQgY3VycmVudFRvdWNoUG9pbnRTaXplID0gZGVzY3JpcHRpb24uZ2V0UG9pbnRzRm9yVGltZSh0aW1lU2luY2VHZXN0dXJlU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG91Y2hQb2ludHMpOworCisgICAgICAgICAgICAgICAgYXBwZW5kTW92ZUV2ZW50SWZOZWVkZWQobW90aW9uRXZlbnRzLCBsYXN0VG91Y2hQb2ludHMsIGxhc3RUb3VjaFBvaW50U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUb3VjaFBvaW50cywgY3VycmVudFRvdWNoUG9pbnRTaXplLCB0aW1lU2luY2VHZXN0dXJlU3RhcnQpOworICAgICAgICAgICAgICAgIGxhc3RUb3VjaFBvaW50U2l6ZSA9IGFwcGVuZFVwRXZlbnRzKG1vdGlvbkV2ZW50cywgbGFzdFRvdWNoUG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRTaXplLCBjdXJyZW50VG91Y2hQb2ludHMsIGN1cnJlbnRUb3VjaFBvaW50U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVTaW5jZUdlc3R1cmVTdGFydCk7CisgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRTaXplID0gYXBwZW5kRG93bkV2ZW50cyhtb3Rpb25FdmVudHMsIGxhc3RUb3VjaFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RUb3VjaFBvaW50U2l6ZSwgY3VycmVudFRvdWNoUG9pbnRzLCBjdXJyZW50VG91Y2hQb2ludFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU2luY2VHZXN0dXJlU3RhcnQpOworCisgICAgICAgICAgICAgICAgLyogTW92ZSB0byBuZXh0IHRpbWUgc2xpY2UgKi8KKyAgICAgICAgICAgICAgICBuZXh0S2V5UG9pbnRUaW1lID0gZGVzY3JpcHRpb24uZ2V0TmV4dEtleVBvaW50QXRMZWFzdCh0aW1lU2luY2VHZXN0dXJlU3RhcnQgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtb3Rpb25FdmVudHM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBUb3VjaFBvaW50W10gZ2V0Q3VycmVudFRvdWNoUG9pbnRzKGludCByZXF1aXJlZENhcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAoKHNDdXJyZW50VG91Y2hQb2ludHMgPT0gbnVsbCkgfHwgKHNDdXJyZW50VG91Y2hQb2ludHMubGVuZ3RoIDwgcmVxdWlyZWRDYXBhY2l0eSkpIHsKKyAgICAgICAgICAgICAgICBzQ3VycmVudFRvdWNoUG9pbnRzID0gbmV3IFRvdWNoUG9pbnRbcmVxdWlyZWRDYXBhY2l0eV07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXF1aXJlZENhcGFjaXR5OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc0N1cnJlbnRUb3VjaFBvaW50c1tpXSA9IG5ldyBUb3VjaFBvaW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNDdXJyZW50VG91Y2hQb2ludHM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBUb3VjaFBvaW50W10gZ2V0TGFzdFRvdWNoUG9pbnRzKGludCByZXF1aXJlZENhcGFjaXR5KSB7CisgICAgICAgICAgICBpZiAoKHNMYXN0VG91Y2hQb2ludHMgPT0gbnVsbCkgfHwgKHNMYXN0VG91Y2hQb2ludHMubGVuZ3RoIDwgcmVxdWlyZWRDYXBhY2l0eSkpIHsKKyAgICAgICAgICAgICAgICBzTGFzdFRvdWNoUG9pbnRzID0gbmV3IFRvdWNoUG9pbnRbcmVxdWlyZWRDYXBhY2l0eV07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXF1aXJlZENhcGFjaXR5OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc0xhc3RUb3VjaFBvaW50c1tpXSA9IG5ldyBUb3VjaFBvaW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNMYXN0VG91Y2hQb2ludHM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBQb2ludGVyQ29vcmRzW10gZ2V0UG9pbnRlckNvb3JkcyhpbnQgcmVxdWlyZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgaWYgKChzUG9pbnRlckNvb3JkcyA9PSBudWxsKSB8fCAoc1BvaW50ZXJDb29yZHMubGVuZ3RoIDwgcmVxdWlyZWRDYXBhY2l0eSkpIHsKKyAgICAgICAgICAgICAgICBzUG9pbnRlckNvb3JkcyA9IG5ldyBQb2ludGVyQ29vcmRzW3JlcXVpcmVkQ2FwYWNpdHldOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWlyZWRDYXBhY2l0eTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNQb2ludGVyQ29vcmRzW2ldID0gbmV3IFBvaW50ZXJDb29yZHMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc1BvaW50ZXJDb29yZHM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBQb2ludGVyUHJvcGVydGllc1tdIGdldFBvaW50ZXJQcm9wcyhpbnQgcmVxdWlyZWRDYXBhY2l0eSkgeworICAgICAgICAgICAgaWYgKChzUG9pbnRlclByb3BzID09IG51bGwpIHx8IChzUG9pbnRlclByb3BzLmxlbmd0aCA8IHJlcXVpcmVkQ2FwYWNpdHkpKSB7CisgICAgICAgICAgICAgICAgc1BvaW50ZXJQcm9wcyA9IG5ldyBQb2ludGVyUHJvcGVydGllc1tyZXF1aXJlZENhcGFjaXR5XTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlcXVpcmVkQ2FwYWNpdHk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBzUG9pbnRlclByb3BzW2ldID0gbmV3IFBvaW50ZXJQcm9wZXJ0aWVzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHNQb2ludGVyUHJvcHM7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGVuZE1vdmVFdmVudElmTmVlZGVkKExpc3Q8TW90aW9uRXZlbnQ+IG1vdGlvbkV2ZW50cywKKyAgICAgICAgICAgICAgICBUb3VjaFBvaW50W10gbGFzdFRvdWNoUG9pbnRzLCBpbnQgbGFzdFRvdWNoUG9pbnRzU2l6ZSwKKyAgICAgICAgICAgICAgICBUb3VjaFBvaW50W10gY3VycmVudFRvdWNoUG9pbnRzLCBpbnQgY3VycmVudFRvdWNoUG9pbnRzU2l6ZSwgbG9uZyBjdXJyZW50VGltZSkgeworICAgICAgICAgICAgLyogTG9vayBmb3IgcG9pbnRlcnMgdGhhdCBoYXZlIG1vdmVkICovCisgICAgICAgICAgICBib29sZWFuIG1vdmVGb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJyZW50VG91Y2hQb2ludHNTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgbGFzdFBvaW50c0luZGV4ID0gZmluZFBvaW50QnlQYXRoSW5kZXgobGFzdFRvdWNoUG9pbnRzLCBsYXN0VG91Y2hQb2ludHNTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRvdWNoUG9pbnRzW2ldLm1QYXRoSW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChsYXN0UG9pbnRzSW5kZXggPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBtb3ZlRm91bmQgfD0gKGxhc3RUb3VjaFBvaW50c1tsYXN0UG9pbnRzSW5kZXhdLm1YICE9IGN1cnJlbnRUb3VjaFBvaW50c1tpXS5tWCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAobGFzdFRvdWNoUG9pbnRzW2xhc3RQb2ludHNJbmRleF0ubVkgIT0gY3VycmVudFRvdWNoUG9pbnRzW2ldLm1ZKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRzW2xhc3RQb2ludHNJbmRleF0uY29weUZyb20oY3VycmVudFRvdWNoUG9pbnRzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtb3ZlRm91bmQpIHsKKyAgICAgICAgICAgICAgICBsb25nIGRvd25UaW1lID0gbW90aW9uRXZlbnRzLmdldChtb3Rpb25FdmVudHMuc2l6ZSgpIC0gMSkuZ2V0RG93blRpbWUoKTsKKyAgICAgICAgICAgICAgICBtb3Rpb25FdmVudHMuYWRkKG9idGFpbk1vdGlvbkV2ZW50KGRvd25UaW1lLCBjdXJyZW50VGltZSwgTW90aW9uRXZlbnQuQUNUSU9OX01PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VG91Y2hQb2ludHMsIGxhc3RUb3VjaFBvaW50c1NpemUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIGludCBhcHBlbmRVcEV2ZW50cyhMaXN0PE1vdGlvbkV2ZW50PiBtb3Rpb25FdmVudHMsCisgICAgICAgICAgICAgICAgVG91Y2hQb2ludFtdIGxhc3RUb3VjaFBvaW50cywgaW50IGxhc3RUb3VjaFBvaW50c1NpemUsCisgICAgICAgICAgICAgICAgVG91Y2hQb2ludFtdIGN1cnJlbnRUb3VjaFBvaW50cywgaW50IGN1cnJlbnRUb3VjaFBvaW50c1NpemUsIGxvbmcgY3VycmVudFRpbWUpIHsKKyAgICAgICAgICAgIC8qIExvb2sgZm9yIGEgcG9pbnRlciBhdCB0aGUgZW5kIG9mIGl0cyBwYXRoICovCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1cnJlbnRUb3VjaFBvaW50c1NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VG91Y2hQb2ludHNbaV0ubUlzRW5kT2ZQYXRoKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBpbmRleE9mVXBFdmVudCA9IGZpbmRQb2ludEJ5UGF0aEluZGV4KGxhc3RUb3VjaFBvaW50cywgbGFzdFRvdWNoUG9pbnRzU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG91Y2hQb2ludHNbaV0ubVBhdGhJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE9mVXBFdmVudCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTaG91bGQgbm90IGhhcHBlbgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxvbmcgZG93blRpbWUgPSBtb3Rpb25FdmVudHMuZ2V0KG1vdGlvbkV2ZW50cy5zaXplKCkgLSAxKS5nZXREb3duVGltZSgpOworICAgICAgICAgICAgICAgICAgICBpbnQgYWN0aW9uID0gKGxhc3RUb3VjaFBvaW50c1NpemUgPT0gMSkgPyBNb3Rpb25FdmVudC5BQ1RJT05fVVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQOworICAgICAgICAgICAgICAgICAgICBhY3Rpb24gfD0gaW5kZXhPZlVwRXZlbnQgPDwgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfU0hJRlQ7CisgICAgICAgICAgICAgICAgICAgIG1vdGlvbkV2ZW50cy5hZGQob2J0YWluTW90aW9uRXZlbnQoZG93blRpbWUsIGN1cnJlbnRUaW1lLCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRzLCBsYXN0VG91Y2hQb2ludHNTaXplKSk7CisgICAgICAgICAgICAgICAgICAgIC8qIFJlbW92ZSB0aGlzIHBvaW50IGZyb20gbGFzdFRvdWNoUG9pbnRzICovCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBpbmRleE9mVXBFdmVudDsgaiA8IGxhc3RUb3VjaFBvaW50c1NpemUgLSAxOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RUb3VjaFBvaW50c1tqXS5jb3B5RnJvbShsYXN0VG91Y2hQb2ludHNbaisxXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRzU2l6ZS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsYXN0VG91Y2hQb2ludHNTaXplOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGFwcGVuZERvd25FdmVudHMoTGlzdDxNb3Rpb25FdmVudD4gbW90aW9uRXZlbnRzLAorICAgICAgICAgICAgICAgIFRvdWNoUG9pbnRbXSBsYXN0VG91Y2hQb2ludHMsIGludCBsYXN0VG91Y2hQb2ludHNTaXplLAorICAgICAgICAgICAgICAgIFRvdWNoUG9pbnRbXSBjdXJyZW50VG91Y2hQb2ludHMsIGludCBjdXJyZW50VG91Y2hQb2ludHNTaXplLCBsb25nIGN1cnJlbnRUaW1lKSB7CisgICAgICAgICAgICAvKiBMb29rIGZvciBhIHBvaW50ZXIgdGhhdCBpcyBqdXN0IHN0YXJ0aW5nICovCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN1cnJlbnRUb3VjaFBvaW50c1NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VG91Y2hQb2ludHNbaV0ubUlzU3RhcnRPZlBhdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQWRkIHRoZSBwb2ludCB0byBsYXN0IGNvb3JkcyBhbmQgdXNlIHRoZSBuZXcgYXJyYXkgdG8gZ2VuZXJhdGUgdGhlIGV2ZW50ICovCisgICAgICAgICAgICAgICAgICAgIGxhc3RUb3VjaFBvaW50c1tsYXN0VG91Y2hQb2ludHNTaXplKytdLmNvcHlGcm9tKGN1cnJlbnRUb3VjaFBvaW50c1tpXSk7CisgICAgICAgICAgICAgICAgICAgIGludCBhY3Rpb24gPSAobGFzdFRvdWNoUG9pbnRzU2l6ZSA9PSAxKSA/IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9ET1dOOworICAgICAgICAgICAgICAgICAgICBsb25nIGRvd25UaW1lID0gKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTikgPyBjdXJyZW50VGltZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW90aW9uRXZlbnRzLmdldChtb3Rpb25FdmVudHMuc2l6ZSgpIC0gMSkuZ2V0RG93blRpbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uIHw9IGkgPDwgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfU0hJRlQ7CisgICAgICAgICAgICAgICAgICAgIG1vdGlvbkV2ZW50cy5hZGQob2J0YWluTW90aW9uRXZlbnQoZG93blRpbWUsIGN1cnJlbnRUaW1lLCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvdWNoUG9pbnRzLCBsYXN0VG91Y2hQb2ludHNTaXplKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxhc3RUb3VjaFBvaW50c1NpemU7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBNb3Rpb25FdmVudCBvYnRhaW5Nb3Rpb25FdmVudChsb25nIGRvd25UaW1lLCBsb25nIGV2ZW50VGltZSwgaW50IGFjdGlvbiwKKyAgICAgICAgICAgICAgICBUb3VjaFBvaW50W10gdG91Y2hQb2ludHMsIGludCB0b3VjaFBvaW50c1NpemUpIHsKKyAgICAgICAgICAgIFBvaW50ZXJDb29yZHNbXSBwb2ludGVyQ29vcmRzID0gZ2V0UG9pbnRlckNvb3Jkcyh0b3VjaFBvaW50c1NpemUpOworICAgICAgICAgICAgUG9pbnRlclByb3BlcnRpZXNbXSBwb2ludGVyUHJvcGVydGllcyA9IGdldFBvaW50ZXJQcm9wcyh0b3VjaFBvaW50c1NpemUpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3VjaFBvaW50c1NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIHBvaW50ZXJQcm9wZXJ0aWVzW2ldLmlkID0gdG91Y2hQb2ludHNbaV0ubVBhdGhJbmRleDsKKyAgICAgICAgICAgICAgICBwb2ludGVyUHJvcGVydGllc1tpXS50b29sVHlwZSA9IE1vdGlvbkV2ZW50LlRPT0xfVFlQRV9VTktOT1dOOworICAgICAgICAgICAgICAgIHBvaW50ZXJDb29yZHNbaV0uY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBwb2ludGVyQ29vcmRzW2ldLnByZXNzdXJlID0gMS4wZjsKKyAgICAgICAgICAgICAgICBwb2ludGVyQ29vcmRzW2ldLnNpemUgPSAxLjBmOworICAgICAgICAgICAgICAgIHBvaW50ZXJDb29yZHNbaV0ueCA9IHRvdWNoUG9pbnRzW2ldLm1YOworICAgICAgICAgICAgICAgIHBvaW50ZXJDb29yZHNbaV0ueSA9IHRvdWNoUG9pbnRzW2ldLm1ZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE1vdGlvbkV2ZW50Lm9idGFpbihkb3duVGltZSwgZXZlbnRUaW1lLCBhY3Rpb24sIHRvdWNoUG9pbnRzU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRlclByb3BlcnRpZXMsIHBvaW50ZXJDb29yZHMsIEVWRU5UX01FVEFfU1RBVEUsIEVWRU5UX0JVVFRPTl9TVEFURSwKKyAgICAgICAgICAgICAgICAgICAgRVZFTlRfWF9QUkVDSVNJT04sIEVWRU5UX1lfUFJFQ0lTSU9OLCBFVkVOVF9ERVZJQ0VfSUQsIEVWRU5UX0VER0VfRkxBR1MsCisgICAgICAgICAgICAgICAgICAgIEVWRU5UX1NPVVJDRSwgRVZFTlRfRkxBR1MpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGZpbmRQb2ludEJ5UGF0aEluZGV4KFRvdWNoUG9pbnRbXSB0b3VjaFBvaW50cywgaW50IHRvdWNoUG9pbnRzU2l6ZSwKKyAgICAgICAgICAgICAgICBpbnQgcGF0aEluZGV4KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdWNoUG9pbnRzU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHRvdWNoUG9pbnRzW2ldLm1QYXRoSW5kZXggPT0gcGF0aEluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0lBY2Nlc3NpYmlsaXR5U2VydmljZUNsaWVudC5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2xpZW50LmFpZGwKaW5kZXggMTU2NjZiZi4uNjI4MDU0MiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2xpZW50LmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2xpZW50LmFpZGwKQEAgLTQyLDQgKzQyLDYgQEAKICAgICB2b2lkIG9uS2V5RXZlbnQoaW4gS2V5RXZlbnQgZXZlbnQsIGludCBzZXF1ZW5jZSk7CiAKICAgICB2b2lkIG9uTWFnbmlmaWNhdGlvbkNoYW5nZWQoaW4gUmVnaW9uIHJlZ2lvbiwgZmxvYXQgc2NhbGUsIGZsb2F0IGNlbnRlclgsIGZsb2F0IGNlbnRlclkpOworCisgICAgdm9pZCBvblBlcmZvcm1HZXN0dXJlUmVzdWx0KGludCBzZXF1ZW5jZSwgYm9vbGVhbiBjb21wbGV0ZWRTdWNjZXNzZnVsbHkpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ29ubmVjdGlvbi5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ29ubmVjdGlvbi5haWRsCmluZGV4IDZhYzUwYmQuLmE2NWI4N2IgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY2Vzc2liaWxpdHlzZXJ2aWNlL0lBY2Nlc3NpYmlsaXR5U2VydmljZUNvbm5lY3Rpb24uYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9JQWNjZXNzaWJpbGl0eVNlcnZpY2VDb25uZWN0aW9uLmFpZGwKQEAgLTE2LDEwICsxNiwxMiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2U7CiAKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWdpb247CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1hZ25pZmljYXRpb25TcGVjOworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5Tm9kZUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuSUFjY2Vzc2liaWxpdHlJbnRlcmFjdGlvbkNvbm5lY3Rpb25DYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5V2luZG93SW5mbzsKQEAgLTc5LDQgKzgxLDYgQEAKICAgICAgICAgYm9vbGVhbiBhbmltYXRlKTsKIAogICAgIHZvaWQgc2V0TWFnbmlmaWNhdGlvbkNhbGxiYWNrRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOworCisgICAgdm9pZCBzZW5kTW90aW9uRXZlbnRzKGludCBzZXF1ZW5jZSwgaW4gUGFyY2VsZWRMaXN0U2xpY2UgZXZlbnRzKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0Fic3RyYWN0QWNjb3VudEF1dGhlbnRpY2F0b3IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0Fic3RyYWN0QWNjb3VudEF1dGhlbnRpY2F0b3IuamF2YQppbmRleCBhMzEyZTNmLi42OTBlNjc0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BYnN0cmFjdEFjY291bnRBdXRoZW50aWNhdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWJzdHJhY3RBY2NvdW50QXV0aGVudGljYXRvci5qYXZhCkBAIC0yNSw2ICsyNSw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CkBAIC03NjIsNyArNzYzLDkgQEAKICAgICAgKiBAdGhyb3dzIE5ldHdvcmtFcnJvckV4Y2VwdGlvbiBpZiB0aGUgYXV0aGVudGljYXRvciBjb3VsZCBub3QgaG9ub3IgdGhlCiAgICAgICogICAgICAgICAgICAgcmVxdWVzdCBkdWUgdG8gYSBuZXR3b3JrIGVycm9yCiAgICAgICogQHNlZSAjZmluaXNoU2Vzc2lvbihBY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlLCBTdHJpbmcsIEJ1bmRsZSkKKyAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgQnVuZGxlIHN0YXJ0QWRkQWNjb3VudFNlc3Npb24oCiAgICAgICAgICAgICBmaW5hbCBBY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlIHJlc3BvbnNlLAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRUeXBlLApAQCAtODE4LDcgKzgyMSw5IEBACiAgICAgICogQHRocm93cyBOZXR3b3JrRXJyb3JFeGNlcHRpb24gaWYgdGhlIGF1dGhlbnRpY2F0b3IgY291bGQgbm90IGhvbm9yIHRoZQogICAgICAqICAgICAgICAgICAgIHJlcXVlc3QgZHVlIHRvIGEgbmV0d29yayBlcnJvcgogICAgICAqIEBzZWUgI2ZpbmlzaFNlc3Npb24oQWNjb3VudEF1dGhlbnRpY2F0b3JSZXNwb25zZSwgU3RyaW5nLCBCdW5kbGUpCisgICAgICogQGhpZGUKICAgICAgKi8KKyAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIEJ1bmRsZSBzdGFydFVwZGF0ZUNyZWRlbnRpYWxzU2Vzc2lvbigKICAgICAgICAgICAgIGZpbmFsIEFjY291bnRBdXRoZW50aWNhdG9yUmVzcG9uc2UgcmVzcG9uc2UsCiAgICAgICAgICAgICBmaW5hbCBBY2NvdW50IGFjY291bnQsCkBAIC04NzAsNyArODc1LDkgQEAKICAgICAgKiAgICAgICAgIDwvdWw+CiAgICAgICogQHRocm93cyBOZXR3b3JrRXJyb3JFeGNlcHRpb24KICAgICAgKiBAc2VlICNzdGFydEFkZEFjY291bnRTZXNzaW9uIGFuZCAjc3RhcnRVcGRhdGVDcmVkZW50aWFsc1Nlc3Npb24KKyAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgQnVuZGxlIGZpbmlzaFNlc3Npb24oCiAgICAgICAgICAgICBmaW5hbCBBY2NvdW50QXV0aGVudGljYXRvclJlc3BvbnNlIHJlc3BvbnNlLAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRUeXBlLApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FjY291bnRzL0FjY291bnRNYW5hZ2VyLmphdmEKaW5kZXggYWRhMWFjMi4uMjQ0OWVlNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYWNjb3VudHMvQWNjb3VudE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hY2NvdW50cy9BY2NvdW50TWFuYWdlci5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlJlcXVpcmVzUGVybWlzc2lvbjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2l6ZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3lzdGVtQXBpOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKQEAgLTI0NCwxNCArMjQ1LDE4IEBACiAgICAgICogQnVuZGxlIGtleSB1c2VkIGZvciBhIHtAbGluayBCdW5kbGV9IGluIHJlc3VsdCBmcm9tCiAgICAgICoge0BsaW5rICNzdGFydEFkZEFjY291bnRTZXNzaW9ufSBhbmQgZnJpZW5kcyB3aGljaCByZXR1cm5zIHNlc3Npb24gZGF0YQogICAgICAqIGZvciBpbnN0YWxsaW5nIGFuIGFjY291bnQgbGF0ZXIuCisgICAgICogQGhpZGUKICAgICAgKi8KKyAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0FDQ09VTlRfU0VTU0lPTl9CVU5ETEUgPSAiYWNjb3VudFNlc3Npb25CdW5kbGUiOwogCiAgICAgLyoqCiAgICAgICogQnVuZGxlIGtleSB1c2VkIGZvciB0aGUge0BsaW5rIFN0cmluZ30gYWNjb3VudCBzdGF0dXMgdG9rZW4gaW4gcmVzdWx0CiAgICAgICogZnJvbSB7QGxpbmsgI3N0YXJ0QWRkQWNjb3VudFNlc3Npb259IGFuZCBmcmllbmRzIHdoaWNoIHJldHVybnMKICAgICAgKiBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgYWNjb3VudC4KKyAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQUNDT1VOVF9TVEFUVVNfVE9LRU4gPSAiYWNjb3VudFN0YXR1c1Rva2VuIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9BVVRIRU5USUNBVE9SX0lOVEVOVCA9CkBAIC0yNjY3LDcgKzI2NzIsOSBAQAogICAgICAqICAgICAgICAgdHJvdWJsZQogICAgICAqICAgICAgICAgPC91bD4KICAgICAgKiBAc2VlICNmaW5pc2hTZXNzaW9uCisgICAgICogQGhpZGUKICAgICAgKi8KKyAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIEFjY291bnRNYW5hZ2VyRnV0dXJlPEJ1bmRsZT4gc3RhcnRBZGRBY2NvdW50U2Vzc2lvbigKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhY2NvdW50VHlwZSwKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBhdXRoVG9rZW5UeXBlLApAQCAtMjc0OSw3ICsyNzU2LDkgQEAKICAgICAgKiAgICAgICAgIHRyb3VibGUKICAgICAgKiAgICAgICAgIDwvdWw+CiAgICAgICogQHNlZSAjZmluaXNoU2Vzc2lvbgorICAgICAqIEBoaWRlCiAgICAgICovCisgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBBY2NvdW50TWFuYWdlckZ1dHVyZTxCdW5kbGU+IHN0YXJ0VXBkYXRlQ3JlZGVudGlhbHNTZXNzaW9uKAogICAgICAgICAgICAgZmluYWwgQWNjb3VudCBhY2NvdW50LAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF1dGhUb2tlblR5cGUsCkBAIC0yODE4LDcgKzI4MjcsOSBAQAogICAgICAqICAgICAgICAgdHJvdWJsZQogICAgICAqICAgICAgICAgPC91bD4KICAgICAgKiBAc2VlICNzdGFydEFkZEFjY291bnRTZXNzaW9uIGFuZCAjc3RhcnRVcGRhdGVDcmVkZW50aWFsc1Nlc3Npb24KKyAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgQWNjb3VudE1hbmFnZXJGdXR1cmU8QnVuZGxlPiBmaW5pc2hTZXNzaW9uKAogICAgICAgICAgICAgZmluYWwgQnVuZGxlIHNlc3Npb25CdW5kbGUsCiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eSwKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FuaW1hdGlvbi9Qcm9wZXJ0eVZhbHVlc0hvbGRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyLmphdmEKaW5kZXggODkyOGU5OS4uZTk5M2NjYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5pbWF0aW9uL1Byb3BlcnR5VmFsdWVzSG9sZGVyLmphdmEKQEAgLTg2MSwyMiArODYxLDIzIEBACiAgICAgICAgIGlmIChtUHJvcGVydHkgIT0gbnVsbCkgewogICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY29udmVydEJhY2sobVByb3BlcnR5LmdldCh0YXJnZXQpKTsKICAgICAgICAgICAgIGtmLnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG1HZXR0ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIENsYXNzIHRhcmdldENsYXNzID0gdGFyZ2V0LmdldENsYXNzKCk7Ci0gICAgICAgICAgICAgICAgc2V0dXBHZXR0ZXIodGFyZ2V0Q2xhc3MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAobUdldHRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgbG9nZ2VkIHRoZSBlcnJvciAtIGp1c3QgcmV0dXJuIHRvIGF2b2lkIE5QRQotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIENsYXNzIHRhcmdldENsYXNzID0gdGFyZ2V0LmdldENsYXNzKCk7CisgICAgICAgICAgICAgICAgICAgIHNldHVwR2V0dGVyKHRhcmdldENsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1HZXR0ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBsb2dnZWQgdGhlIGVycm9yIC0ganVzdCByZXR1cm4gdG8gYXZvaWQgTlBFCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gY29udmVydEJhY2sobUdldHRlci5pbnZva2UodGFyZ2V0KSk7CisgICAgICAgICAgICAgICAga2Yuc2V0VmFsdWUodmFsdWUpOworICAgICAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoIlByb3BlcnR5VmFsdWVzSG9sZGVyIiwgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy5lKCJQcm9wZXJ0eVZhbHVlc0hvbGRlciIsIGUudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBjb252ZXJ0QmFjayhtR2V0dGVyLmludm9rZSh0YXJnZXQpKTsKLSAgICAgICAgICAgIGtmLnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZSgiUHJvcGVydHlWYWx1ZXNIb2xkZXIiLCBlLnRvU3RyaW5nKCkpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKCJQcm9wZXJ0eVZhbHVlc0hvbGRlciIsIGUudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vQXBwSWRJbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vQXBwSWRJbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTgzOGRkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9BcHBJZEludC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYW5ub3RhdGlvbjsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5GSUVMRDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuTUVUSE9EOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5QQVJBTUVURVI7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5TT1VSQ0U7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCisvKioKKyAqIERlbm90ZXMgdGhhdCB0aGUgYW5ub3RhdGVkIGVsZW1lbnQgaXMgYSBtdWx0aS11c2VyIGFwcGxpY2F0aW9uIElELiBUaGlzIGlzCisgKiA8ZW0+bm90PC9lbT4gdGhlIHNhbWUgYXMgYSBVSUQuCisgKgorICogQGhpZGUKKyAqLworQFJldGVudGlvbihTT1VSQ0UpCitAVGFyZ2V0KHtNRVRIT0QsIFBBUkFNRVRFUiwgRklFTER9KQorcHVibGljIEBpbnRlcmZhY2UgQXBwSWRJbnQgeworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYW5ub3RhdGlvbi9Vc2VySWRJbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vVXNlcklkSW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5Y2UyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2Fubm90YXRpb24vVXNlcklkSW50LmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hbm5vdGF0aW9uOworCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLkZJRUxEOworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5NRVRIT0Q7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLlBBUkFNRVRFUjsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5LlNPVVJDRTsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5UYXJnZXQ7CisKKy8qKgorICogRGVub3RlcyB0aGF0IHRoZSBhbm5vdGF0ZWQgZWxlbWVudCBpcyBhIG11bHRpLXVzZXIgdXNlciBJRC4gVGhpcyBpcworICogPGVtPm5vdDwvZW0+IHRoZSBzYW1lIGFzIGEgVUlELgorICoKKyAqIEBoaWRlCisgKi8KK0BSZXRlbnRpb24oU09VUkNFKQorQFRhcmdldCh7TUVUSE9ELCBQQVJBTUVURVIsIEZJRUxEfSkKK3B1YmxpYyBAaW50ZXJmYWNlIFVzZXJJZEludCB7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aW9uQmFyLmphdmEKaW5kZXggNzJmOGM3Ny4uNmZjMGQ3NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGlvbkJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpb25CYXIuamF2YQpAQCAtMzEsOSArMzEsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3RGVidWc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0hpZXJhcmNoeUVuY29kZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5TcGlubmVyQWRhcHRlcjsKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CkBAIC0xMDcxLDYgKzEwNzMsNjYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBBdHRlbXB0cyB0byBtb3ZlIGZvY3VzIHRvIHRoZSBBY3Rpb25CYXIgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBjb250YWluIHRoZSBmb2N1cy4KKyAgICAgKgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGZvY3VzIGNoYW5nZXMgb3Ige0Bjb2RlIGZhbHNlfSBpZiBmb2N1cyBkb2Vzbid0IGNoYW5nZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHJlcXVlc3RGb2N1cygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIHJlcXVlc3RGb2N1cyB0aGF0IHRha2VzIGluIHRoZSBUb29sYmFyIGFuZCBtb3ZlcyBmb2N1cworICAgICAqIHRvIHRoZSBjb250ZW50cy4gVGhpcyBtYWtlcyB0aGUgVmlld0dyb3VwcyBjb250YWluaW5nIHRoZSB0b29sYmFyIGFsbG93IGZvY3VzIHdoaWxlIGl0IHN0YXlzCisgICAgICogaW4gdGhlIEFjdGlvbkJhciBhbmQgdGhlbiBwcmV2ZW50cyBpdCBhZ2FpbiBvbmNlIGl0IGxlYXZlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSB2aWV3R3JvdXAgVGhlIHRvb2xiYXIgVmlld0dyb3VwCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZm9jdXMgY2hhbmdlcyBvciB7QGNvZGUgZmFsc2V9IGlmIGZvY3VzIGRvZXNuJ3QgY2hhbmdlLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHJvdGVjdGVkIGJvb2xlYW4gcmVxdWVzdEZvY3VzKFZpZXdHcm91cCB2aWV3R3JvdXApIHsKKyAgICAgICAgaWYgKHZpZXdHcm91cCAhPSBudWxsICYmICF2aWV3R3JvdXAuaGFzRm9jdXMoKSkgeworICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHRvb2xiYXIgPSB2aWV3R3JvdXAuZ2V0VG91Y2hzY3JlZW5CbG9ja3NGb2N1cygpID8gdmlld0dyb3VwIDogbnVsbDsKKyAgICAgICAgICAgIFZpZXdQYXJlbnQgcGFyZW50ID0gdmlld0dyb3VwLmdldFBhcmVudCgpOworICAgICAgICAgICAgVmlld0dyb3VwIGNvbnRhaW5lciA9IG51bGw7CisgICAgICAgICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwgJiYgcGFyZW50IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHZnUGFyZW50ID0gKFZpZXdHcm91cCkgcGFyZW50OworICAgICAgICAgICAgICAgIGlmICh2Z1BhcmVudC5nZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gdmdQYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJlbnQgPSB2Z1BhcmVudC5nZXRQYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b29sYmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0b29sYmFyLnNldFRvdWNoc2NyZWVuQmxvY2tzRm9jdXMoZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmlld0dyb3VwLnJlcXVlc3RGb2N1cygpOworICAgICAgICAgICAgZmluYWwgVmlldyBmb2N1c2VkID0gdmlld0dyb3VwLmZpbmRGb2N1cygpOworICAgICAgICAgICAgaWYgKGZvY3VzZWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZvY3VzZWQuc2V0T25Gb2N1c0NoYW5nZUxpc3RlbmVyKG5ldyBGb2xsb3dPdXRPZkFjdGlvbkJhcih2aWV3R3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsIHRvb2xiYXIpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9vbGJhciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRvb2xiYXIuc2V0VG91Y2hzY3JlZW5CbG9ja3NGb2N1cyh0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCiAgICAgICogTGlzdGVuZXIgaW50ZXJmYWNlIGZvciBBY3Rpb25CYXIgbmF2aWdhdGlvbiBldmVudHMuCiAgICAgICoKICAgICAgKiBAZGVwcmVjYXRlZCBBY3Rpb24gYmFyIG5hdmlnYXRpb24gbW9kZXMgYXJlIGRlcHJlY2F0ZWQgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgaW5saW5lCkBAIC0xMzg4LDQgKzE0NTAsNDMgQEAKICAgICAgICAgICAgIGVuY29kZXIuYWRkUHJvcGVydHkoImdyYXZpdHkiLCBncmF2aXR5KTsKICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYWNrcyB0aGUgZm9jdXNlZCBWaWV3IHVudGlsIGl0IGxlYXZlcyB0aGUgQWN0aW9uQmFyLCB0aGVuIGl0IHJlc2V0cyB0aGUKKyAgICAgKiB0b3VjaHNjcmVlbkJsb2Nrc0ZvY3VzIHZhbHVlLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvbGxvd091dE9mQWN0aW9uQmFyIGltcGxlbWVudHMgT25Gb2N1c0NoYW5nZUxpc3RlbmVyLCBSdW5uYWJsZSB7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Gb2N1c1Jvb3Q7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Db250YWluZXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgVmlld0dyb3VwIG1Ub29sYmFyOworCisgICAgICAgIHB1YmxpYyBGb2xsb3dPdXRPZkFjdGlvbkJhcihWaWV3R3JvdXAgZm9jdXNSb290LCBWaWV3R3JvdXAgY29udGFpbmVyLCBWaWV3R3JvdXAgdG9vbGJhcikgeworICAgICAgICAgICAgbUNvbnRhaW5lciA9IGNvbnRhaW5lcjsKKyAgICAgICAgICAgIG1Ub29sYmFyID0gdG9vbGJhcjsKKyAgICAgICAgICAgIG1Gb2N1c1Jvb3QgPSBmb2N1c1Jvb3Q7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Gb2N1c0NoYW5nZShWaWV3IHYsIGJvb2xlYW4gaGFzRm9jdXMpIHsKKyAgICAgICAgICAgIGlmICghaGFzRm9jdXMpIHsKKyAgICAgICAgICAgICAgICB2LnNldE9uRm9jdXNDaGFuZ2VMaXN0ZW5lcihudWxsKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGZvY3VzZWQgPSBtRm9jdXNSb290LmZpbmRGb2N1cygpOworICAgICAgICAgICAgICAgIGlmIChmb2N1c2VkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9jdXNlZC5zZXRPbkZvY3VzQ2hhbmdlTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbUZvY3VzUm9vdC5wb3N0KHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBpZiAobUNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUNvbnRhaW5lci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1Ub29sYmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVG9vbGJhci5zZXRUb3VjaHNjcmVlbkJsb2Nrc0ZvY3VzKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQppbmRleCA5M2M2YmVmLi5lMzEyNTk2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHkuamF2YQpAQCAtMzEsNiArMzEsOCBAQAogaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlN1cGVyTm90Q2FsbGVkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9uczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93LldpbmRvd0NvbnRyb2xsZXJDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub29sYmFyOwogCkBAIC02MCw3ICs2Miw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwpAQCAtNzAsNiArNzIsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CitpbXBvcnQgYW5kcm9pZC5vcy5QZXJzaXN0YWJsZUJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlN0cmljdE1vZGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwpAQCAtNzcsMjMgKzgwLDI4IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uYWJsZVN0cmluZ0J1aWxkZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnRleHQubWV0aG9kLlRleHRLZXlMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnRyYW5zaXRpb24uU2NlbmU7CitpbXBvcnQgYW5kcm9pZC50cmFuc2l0aW9uLlRyYW5zaXRpb25NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QcmludFdyaXRlclByaW50ZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudXRpbC5TdXBlck5vdENhbGxlZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuQWN0aW9uTW9kZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dFRoZW1lV3JhcHBlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ3JlYXRlQ29udGV4dE1lbnVMaXN0ZW5lcjsKQEAgLTEwMiwxMCArMTEwLDE3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Um9vdEltcGw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93LldpbmRvd0NvbnRyb2xsZXJDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9vbGJhcjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JVm9pY2VJbnRlcmFjdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5Ub29sYmFyQWN0aW9uQmFyOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5XaW5kb3dEZWNvckFjdGlvbkJhcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CkBAIC0xMTUsNiArMTMwLDggQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuQ2hhcmFjdGVyLk1JTl9WQUxVRTsKKwogLyoqCiAgKiBBbiBhY3Rpdml0eSBpcyBhIHNpbmdsZSwgZm9jdXNlZCB0aGluZyB0aGF0IHRoZSB1c2VyIGNhbiBkby4gIEFsbW9zdCBhbGwKICAqIGFjdGl2aXRpZXMgaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciwgc28gdGhlIEFjdGl2aXR5IGNsYXNzIHRha2VzIGNhcmUgb2YKQEAgLTgxNiw2ICs4MzMsNyBAQAogICAgIFNoYXJlZEVsZW1lbnRDYWxsYmFjayBtRXhpdFRyYW5zaXRpb25MaXN0ZW5lciA9IFNoYXJlZEVsZW1lbnRDYWxsYmFjay5OVUxMX0NBTExCQUNLOwogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNDdXJyZW50UGVybWlzc2lvbnNSZXF1ZXN0OworICAgIHByaXZhdGUgYm9vbGVhbiBtRWF0S2V5VXBFdmVudDsKIAogICAgIC8qKiBSZXR1cm4gdGhlIGludGVudCB0aGF0IHN0YXJ0ZWQgdGhpcyBhY3Rpdml0eS4gKi8KICAgICBwdWJsaWMgSW50ZW50IGdldEludGVudCgpIHsKQEAgLTE1OTIsNiArMTYxMCwzMCBAQAogICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUFzc2lzdENvbnRlbnQoQXNzaXN0Q29udGVudCBvdXRDb250ZW50KSB7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoTGlzdDxLZXlib2FyZFNob3J0Y3V0R3JvdXA+IGRhdGEsIE1lbnUgbWVudSkgeworICAgICAgICBpZiAobWVudSA9PSBudWxsKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEtleWJvYXJkU2hvcnRjdXRHcm91cCBncm91cCA9IG51bGw7CisgICAgICAgIGludCBtZW51U2l6ZSA9IG1lbnUuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lbnVTaXplOyArK2kpIHsKKyAgICAgICAgICAgIGZpbmFsIE1lbnVJdGVtIGl0ZW0gPSBtZW51LmdldEl0ZW0oaSk7CisgICAgICAgICAgICBmaW5hbCBDaGFyU2VxdWVuY2UgdGl0bGUgPSBpdGVtLmdldFRpdGxlKCk7CisgICAgICAgICAgICBmaW5hbCBjaGFyIGFscGhhU2hvcnRjdXQgPSBpdGVtLmdldEFscGhhYmV0aWNTaG9ydGN1dCgpOworICAgICAgICAgICAgaWYgKHRpdGxlICE9IG51bGwgJiYgYWxwaGFTaG9ydGN1dCAhPSBNSU5fVkFMVUUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBncm91cCA9IG5ldyBLZXlib2FyZFNob3J0Y3V0R3JvdXAobnVsbCAvKiBubyBsYWJlbCAqLyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdyb3VwLmFkZEl0ZW0obmV3IEtleWJvYXJkU2hvcnRjdXRJbmZvKAorICAgICAgICAgICAgICAgICAgICB0aXRsZSwgYWxwaGFTaG9ydGN1dCwgS2V5RXZlbnQuTUVUQV9DVFJMX09OKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdyb3VwICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEuYWRkKGdyb3VwKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIEFzayB0byBoYXZlIHRoZSBjdXJyZW50IGFzc2lzdGFudCBzaG93biB0byB0aGUgdXNlci4gIFRoaXMgb25seSB3b3JrcyBpZiB0aGUgY2FsbGluZwogICAgICAqIGFjdGl2aXR5IGlzIHRoZSBjdXJyZW50IGZvcmVncm91bmQgYWN0aXZpdHkuICBJdCBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nCkBAIC0xNzAwLDYgKzE3NDIsMTAgQEAKICAgICAgICAgICAgIG1TZWFyY2hNYW5hZ2VyLnN0b3BTZWFyY2goKTsKICAgICAgICAgfQogCisgICAgICAgIGlmIChtQWN0aW9uQmFyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1BY3Rpb25CYXIub25EZXN0cm95KCk7CisgICAgICAgIH0KKwogICAgICAgICBnZXRBcHBsaWNhdGlvbigpLmRpc3BhdGNoQWN0aXZpdHlEZXN0cm95ZWQodGhpcyk7CiAgICAgfQogCkBAIC0xNzMzLDkgKzE3NzksMTMgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBtdWx0aVdpbmRvd01vZGUgVHJ1ZSBpZiB0aGUgYWN0aXZpdHkgaXMgaW4gbXVsdGktd2luZG93IG1vZGUuCiAgICAgICovCisgICAgQENhbGxTdXBlcgogICAgIHB1YmxpYyB2b2lkIG9uTXVsdGlXaW5kb3dNb2RlQ2hhbmdlZChib29sZWFuIG11bHRpV2luZG93TW9kZSkgewogICAgICAgICBpZiAoREVCVUdfTElGRUNZQ0xFKSBTbG9nLnYoVEFHLAogICAgICAgICAgICAgICAgICJvbk11bHRpV2luZG93TW9kZUNoYW5nZWQgIiArIHRoaXMgKyAiOiAiICsgbXVsdGlXaW5kb3dNb2RlKTsKKyAgICAgICAgaWYgKG1XaW5kb3cgIT0gbnVsbCkgeworICAgICAgICAgICAgbVdpbmRvdy5vbk11bHRpV2luZG93TW9kZUNoYW5nZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTc3OCw2ICsxODI4LDE3IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUHV0cyB0aGUgYWN0aXZpdHkgaW4gcGljdHVyZS1pbi1waWN0dXJlIG1vZGUuCisgICAgICogQHNlZSBhbmRyb2lkLlIuYXR0ciNzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBlbnRlclBpY3R1cmVJblBpY3R1cmVNb2RlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5lbnRlclBpY3R1cmVJblBpY3R1cmVNb2RlKG1Ub2tlbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDYWxsZWQgYnkgdGhlIHN5c3RlbSB3aGVuIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdoaWxlIHlvdXIKICAgICAgKiBhY3Rpdml0eSBpcyBydW5uaW5nLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCA8ZW0+b25seTwvZW0+IGJlIGNhbGxlZCBpZgogICAgICAqIHlvdSBoYXZlIHNlbGVjdGVkIGNvbmZpZ3VyYXRpb25zIHlvdSB3b3VsZCBsaWtlIHRvIGhhbmRsZSB3aXRoIHRoZQpAQCAtMjE5MCwxNCArMjI1MSwyMiBAQAogICAgICAqIEBwYXJhbSB0b29sYmFyIFRvb2xiYXIgdG8gc2V0IGFzIHRoZSBBY3Rpdml0eSdzIGFjdGlvbiBiYXIKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRBY3Rpb25CYXIoQE51bGxhYmxlIFRvb2xiYXIgdG9vbGJhcikgewotICAgICAgICBpZiAoZ2V0QWN0aW9uQmFyKCkgaW5zdGFuY2VvZiBXaW5kb3dEZWNvckFjdGlvbkJhcikgeworICAgICAgICBmaW5hbCBBY3Rpb25CYXIgYWIgPSBnZXRBY3Rpb25CYXIoKTsKKyAgICAgICAgaWYgKGFiIGluc3RhbmNlb2YgV2luZG93RGVjb3JBY3Rpb25CYXIpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlRoaXMgQWN0aXZpdHkgYWxyZWFkeSBoYXMgYW4gYWN0aW9uIGJhciBzdXBwbGllZCAiICsKICAgICAgICAgICAgICAgICAgICAgImJ5IHRoZSB3aW5kb3cgZGVjb3IuIERvIG5vdCByZXF1ZXN0IFdpbmRvdy5GRUFUVVJFX0FDVElPTl9CQVIgYW5kIHNldCAiICsKICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQ6d2luZG93QWN0aW9uQmFyIHRvIGZhbHNlIGluIHlvdXIgdGhlbWUgdG8gdXNlIGEgVG9vbGJhciBpbnN0ZWFkLiIpOwogICAgICAgICB9Ci0gICAgICAgIC8vIENsZWFyIG91dCB0aGUgTWVudUluZmxhdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHZhbGlkIGZvciB0aGUgbmV3IEFjdGlvbiBCYXIKKworICAgICAgICAvLyBJZiB3ZSByZWFjaCBoZXJlIHRoZW4gd2UncmUgc2V0dGluZyBhIG5ldyBhY3Rpb24gYmFyCisgICAgICAgIC8vIEZpcnN0IGNsZWFyIG91dCB0aGUgTWVudUluZmxhdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIHZhbGlkIGZvciB0aGUgbmV3IEFjdGlvbiBCYXIKICAgICAgICAgbU1lbnVJbmZsYXRlciA9IG51bGw7CiAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhY3Rpb24gYmFyIGN1cnJlbnRseSwgZGVzdHJveSBpdAorICAgICAgICBpZiAoYWIgIT0gbnVsbCkgeworICAgICAgICAgICAgYWIub25EZXN0cm95KCk7CisgICAgICAgIH0KKwogICAgICAgICBUb29sYmFyQWN0aW9uQmFyIHRiYWIgPSBuZXcgVG9vbGJhckFjdGlvbkJhcih0b29sYmFyLCBnZXRUaXRsZSgpLCB0aGlzKTsKICAgICAgICAgbUFjdGlvbkJhciA9IHRiYWI7CiAgICAgICAgIG1XaW5kb3cuc2V0Q2FsbGJhY2sodGJhYi5nZXRXcmFwcGVkV2luZG93Q2FsbGJhY2soKSk7CkBAIC0yNzc3LDE3ICsyODQ2LDE1IEBACiAKIAogICAgIC8qKgotICAgICAqIENhbGxlZCB0byBtb3ZlIHRoZSB3aW5kb3cgYW5kIGl0cyBhY3Rpdml0eS90YXNrIHRvIGEgZGlmZmVyZW50IHN0YWNrIGNvbnRhaW5lci4KLSAgICAgKiBGb3IgZXhhbXBsZSwgYSB3aW5kb3cgY2FuIG1vdmUgYmV0d2VlbgotICAgICAqIHtAbGluayBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZCNGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRH0gc3RhY2sgYW5kCi0gICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkI0ZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRH0gc3RhY2suCisgICAgICogTW92ZXMgdGhlIGFjdGl2aXR5IGZyb20KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQjRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEfSB0bworICAgICAqIHtAbGluayBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZCNGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRH0gc3RhY2suCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc3RhY2tJZCBzdGFjayBJZCB0byBjaGFuZ2UgdG8uCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjaGFuZ2VXaW5kb3dTdGFjayhpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkubW92ZUFjdGl2aXR5VG9TdGFjayhtVG9rZW4sIHN0YWNrSWQpOworICAgIHB1YmxpYyB2b2lkIGV4aXRGcmVlZm9ybU1vZGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5leGl0RnJlZWZvcm1Nb2RlKG1Ub2tlbik7CiAgICAgfQogCiAgICAgLyoqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhY2sgSWQgZm9yIHRoZSB3aW5kb3cuCkBAIC0yODEyLDkgKzI4NzksMjQgQEAKIAogICAgICAgICAvLyBMZXQgYWN0aW9uIGJhcnMgb3BlbiBtZW51cyBpbiByZXNwb25zZSB0byB0aGUgbWVudSBrZXkgcHJpb3JpdGl6ZWQgb3ZlcgogICAgICAgICAvLyB0aGUgd2luZG93IGhhbmRsaW5nIGl0Ci0gICAgICAgIGlmIChldmVudC5nZXRLZXlDb2RlKCkgPT0gS2V5RXZlbnQuS0VZQ09ERV9NRU5VICYmCisgICAgICAgIGZpbmFsIGludCBrZXlDb2RlID0gZXZlbnQuZ2V0S2V5Q29kZSgpOworICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX01FTlUgJiYKICAgICAgICAgICAgICAgICBtQWN0aW9uQmFyICE9IG51bGwgJiYgbUFjdGlvbkJhci5vbk1lbnVLZXlFdmVudChldmVudCkpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmlzQ3RybFByZXNzZWQoKSAmJgorICAgICAgICAgICAgICAgIGV2ZW50LmdldFVuaWNvZGVDaGFyKGV2ZW50LmdldE1ldGFTdGF0ZSgpICYgfktleUV2ZW50Lk1FVEFfQ1RSTF9NQVNLKSA9PSAnPCcpIHsKKyAgICAgICAgICAgIC8vIENhcHR1cmUgdGhlIENvbnRyb2wtPCBhbmQgc2VuZCBmb2N1cyB0byB0aGUgQWN0aW9uQmFyCisgICAgICAgICAgICBmaW5hbCBpbnQgYWN0aW9uID0gZXZlbnQuZ2V0QWN0aW9uKCk7CisgICAgICAgICAgICBpZiAoYWN0aW9uID09IEtleUV2ZW50LkFDVElPTl9ET1dOKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQWN0aW9uQmFyIGFjdGlvbkJhciA9IGdldEFjdGlvbkJhcigpOworICAgICAgICAgICAgICAgIGlmIChhY3Rpb25CYXIgIT0gbnVsbCAmJiBhY3Rpb25CYXIuaXNTaG93aW5nKCkgJiYgYWN0aW9uQmFyLnJlcXVlc3RGb2N1cygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1FYXRLZXlVcEV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gS2V5RXZlbnQuQUNUSU9OX1VQICYmIG1FYXRLZXlVcEV2ZW50KSB7CisgICAgICAgICAgICAgICAgbUVhdEtleVVwRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIFdpbmRvdyB3aW4gPSBnZXRXaW5kb3coKTsKQEAgLTUyODUsOCArNTM2Nyw3IEBACiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gaXNUYXNrUm9vdCgpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpCi0gICAgICAgICAgICAgICAgLmdldFRhc2tGb3JBY3Rpdml0eShtVG9rZW4sIHRydWUpID49IDA7CisgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5nZXRUYXNrRm9yQWN0aXZpdHkobVRva2VuLCB0cnVlKSA+PSAwOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC02MDA3LDYgKzYwODgsMjIgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBFbmFibGUgb3IgZGlzYWJsZSB2aXJ0dWFsIHJlYWxpdHkgKFZSKSBtb2RlLgorICAgICAqCisgICAgICogPHA+VlIgbW9kZSBpcyBhIGhpbnQgdG8gQW5kcm9pZCBzeXN0ZW0gc2VydmljZXMgdG8gc3dpdGNoIHRvIG1vZGVzIG9wdGltaXplZCBmb3IKKyAgICAgKiBoaWdoLXBlcmZvcm1hbmNlIHN0ZXJlb3Njb3BpYyByZW5kZXJpbmcuPC9wPgorICAgICAqCisgICAgICogQHBhcmFtIGVuYWJsZWQge0Bjb2RlIHRydWV9IHRvIGVuYWJsZSB0aGlzIG1vZGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5zZXRWck1vZGUobVRva2VuLCBlbmFibGVkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIHBhc3MKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIFN0YXJ0IGFuIGFjdGlvbiBtb2RlIG9mIHRoZSBkZWZhdWx0IHR5cGUge0BsaW5rIEFjdGlvbk1vZGUjVFlQRV9QUklNQVJZfS4KICAgICAgKgogICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayB0aGF0IHdpbGwgbWFuYWdlIGxpZmVjeWNsZSBldmVudHMgZm9yIHRoaXMgYWN0aW9uIG1vZGUKQEAgLTYyODksNiArNjM4NiwyMSBAQAogICAgICAgICBtQWN0aXZpdHlUcmFuc2l0aW9uU3RhdGUuc3RhcnRQb3N0cG9uZWRFbnRlclRyYW5zaXRpb24oKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUge0BsaW5rIERyb3BQZXJtaXNzaW9uc30gb2JqZWN0IGJvdW5kIHRvIHRoaXMgYWN0aXZpdHkgYW5kIGNvbnRyb2xsaW5nIHRoZSBhY2Nlc3MKKyAgICAgKiBwZXJtaXNzaW9ucyBmb3IgY29udGVudCBVUklzIGFzc29jaWF0ZWQgd2l0aCB0aGUge0BsaW5rIERyYWdFdmVudH0uCisgICAgICogQHBhcmFtIGV2ZW50IERyYWcgZXZlbnQKKyAgICAgKiBAcmV0dXJuIFRoZSBEcm9wUGVybWlzc2lvbnMgb2JqZWN0IHVzZWQgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhlIGNvbnRlbnQgVVJJcy4gTnVsbCBpZgorICAgICAqIG5vIGNvbnRlbnQgVVJJcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCBvciBpZiBwZXJtaXNzaW9ucyBjb3VsZCBub3QgYmUgZ3JhbnRlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgRHJvcFBlcm1pc3Npb25zIHJlcXVlc3REcm9wUGVybWlzc2lvbnMoRHJhZ0V2ZW50IGV2ZW50KSB7CisgICAgICAgIERyb3BQZXJtaXNzaW9ucyBkcm9wUGVybWlzc2lvbnMgPSBEcm9wUGVybWlzc2lvbnMub2J0YWluKGV2ZW50KTsKKyAgICAgICAgaWYgKGRyb3BQZXJtaXNzaW9ucyAhPSBudWxsICYmIGRyb3BQZXJtaXNzaW9ucy50YWtlKGdldEFjdGl2aXR5VG9rZW4oKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBkcm9wUGVybWlzc2lvbnM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIEludGVybmFsIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGZpbmFsIHZvaWQgc2V0UGFyZW50KEFjdGl2aXR5IHBhcmVudCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlci5qYXZhCmluZGV4IDgxZmUyM2MuLjIxNzVhOWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgYW5kcm9pZC5hcHA7CiAKIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5SZXF1aXJlc1Blcm1pc3Npb247CkBAIC0zNiwxMCArMzcsMTIgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5VcmlQZXJtaXNzaW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkNvbmZpZ3VyYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZURhdGFPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKQEAgLTU5LDEyICs2MiwxNSBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2l6ZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKKwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFNlcmlhbGl6ZXI7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCkBAIC03OSw2ICs4NSwzNiBAQAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CiAKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgQEludERlZih7CisgICAgICAgICAgICBCVUdSRVBPUlRfT1BUSU9OX0ZVTEwsCisgICAgICAgICAgICBCVUdSRVBPUlRfT1BUSU9OX0lOVEVSQUNUSVZFLAorICAgICAgICAgICAgQlVHUkVQT1JUX09QVElPTl9SRU1PVEUKKyAgICB9KQorICAgIC8qKgorICAgICAqIERlZmluZXMgYWNjZXB0YWJsZSB0eXBlcyBvZiBidWdyZXBvcnRzLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEBpbnRlcmZhY2UgQnVncmVwb3J0TW9kZSB7fQorICAgIC8qKgorICAgICAqIFRha2VzIGEgYnVncmVwb3J0IHdpdGhvdXQgdXNlciBpbnRlcmZlcmVuY2UgKGFuZCBoZW5jZSBjYXVzaW5nIGxlc3MKKyAgICAgKiBpbnRlcmZlcmVuY2UgdG8gdGhlIHN5c3RlbSksIGJ1dCBpbmNsdWRlcyBhbGwgc2VjdGlvbnMuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVUdSRVBPUlRfT1BUSU9OX0ZVTEwgPSAwOworICAgIC8qKgorICAgICAqIEFsbG93cyB1c2VyIHRvIG1vbml0b3IgcHJvZ3Jlc3MgYW5kIGVudGVyIGFkZGl0aW9uYWwgZGF0YTsgbWlnaHQgbm90IGluY2x1ZGUgYWxsCisgICAgICogc2VjdGlvbnMuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVUdSRVBPUlRfT1BUSU9OX0lOVEVSQUNUSVZFID0gMTsKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIGJ1Z3JlcG9ydCByZXF1ZXN0ZWQgcmVtb3RlbHkgYnkgYWRtaW5pc3RyYXRvciBvZiB0aGUgRGV2aWNlIE93bmVyIGFwcCwKKyAgICAgKiBub3QgdGhlIGRldmljZSdzIHVzZXIuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVUdSRVBPUlRfT1BUSU9OX1JFTU9URSA9IDI7CisKICAgICAvKioKICAgICAgKiA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL21hbmlmZXN0L21ldGEtZGF0YS1lbGVtZW50Lmh0bWwiPntAY29kZQogICAgICAqIDxtZXRhLWRhdGE+fTwvYT4gbmFtZSBmb3IgYSAnaG9tZScgQWN0aXZpdHkgdGhhdCBkZWNsYXJlcyBhIHBhY2thZ2UgdGhhdCBpcyB0byBiZQpAQCAtNDg1LDEyICs1MjEsOSBAQAogICAgICAgICAgICAgcmV0dXJuIHN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOwogICAgICAgICB9CiAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBib3VuZHMgc2hvdWxkIHBlcnNpc3QgYWNyb3NzIHBvd2VyIGN5Y2xlcy4KLSAgICAgICAgICovCisgICAgICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRhc2sgYm91bmRzIHNob3VsZCBwZXJzaXN0IGFjcm9zcyBwb3dlciBjeWNsZXMuICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBwZXJzaXN0VGFza0JvdW5kcyhpbnQgc3RhY2tJZCkgewotICAgICAgICAgICAgcmV0dXJuIGlzU3RhdGljU3RhY2soc3RhY2tJZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCAhPSBET0NLRURfU1RBQ0tfSUQgJiYgc3RhY2tJZCAhPSBQSU5ORURfU1RBQ0tfSUQ7CisgICAgICAgICAgICByZXR1cm4gc3RhY2tJZCA9PSBGUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTU2MSwxMSArNTk0LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBhcHBsaWNhdGlvbiB3aW5kb3dzIGluIHRoaXMgc3RhY2sgc2hvdWxkIGJlIGRpc3BsYXllZCBhYm92ZSBhbGwKLSAgICAgICAgICogb3RoZXIgYXBwbGljYXRpb24gd2luZG93cywgaW5jbHVkaW5nIGR1cmluZyB0aGUgYW5pbWF0aW9uLgorICAgICAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRvcCB0YXNrIGluIHRoZSB0YXNrIGlzIGFsbG93ZWQgdG8gcmV0dXJuIGhvbWUgd2hlbiBmaW5pc2hlZCBhbmQKKyAgICAgICAgICogdGhlcmUgYXJlIG90aGVyIHRhc2tzIGluIHRoZSBzdGFjay4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBzaG91bGRJbmNyZWFzZUFwcGxpY2F0aW9uV2luZG93TGF5ZXIoaW50IHN0YWNrSWQpIHsKLSAgICAgICAgICAgIHJldHVybiBzdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCB8fCBzdGFja0lkID09IERPQ0tFRF9TVEFDS19JRDsKKyAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGFsbG93VG9wVGFza1RvUmV0dXJuSG9tZShpbnQgc3RhY2tJZCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YWNrSWQgIT0gUElOTkVEX1NUQUNLX0lEOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjQ4LDYgKzEyODEsMTggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUNFTlRfSUdOT1JFX0hPTUVfU1RBQ0tfVEFTS1MgPSAweDAwMDg7CiAKICAgICAvKioKKyAgICAgKiBJZ25vcmVzIGFsbCB0YXNrcyB0aGF0IGFyZSBvbiB0aGUgZG9ja2VkIHN0YWNrLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDRU5UX0lOR09SRV9ET0NLRURfU1RBQ0tfVEFTS1MgPSAweDAwMTA7CisKKyAgICAvKioKKyAgICAgKiBJZ25vcmVzIGFsbCB0YXNrcyB0aGF0IGFyZSBvbiB0aGUgcGlubmVkIHN0YWNrLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVDRU5UX0lOR09SRV9QSU5ORURfU1RBQ0tfVEFTS1MgPSAweDAwMjA7CisKKyAgICAvKioKICAgICAgKiA8cD48L3A+UmV0dXJuIGEgbGlzdCBvZiB0aGUgdGFza3MgdGhhdCB0aGUgdXNlciBoYXMgcmVjZW50bHkgbGF1bmNoZWQsIHdpdGgKICAgICAgKiB0aGUgbW9zdCByZWNlbnQgYmVpbmcgZmlyc3QgYW5kIG9sZGVyIG9uZXMgYWZ0ZXIgaW4gb3JkZXIuCiAgICAgICoKQEAgLTIyNTUsNiArMjMwMCw0NSBAQAogICAgICAgICByZXR1cm4gY2xlYXJBcHBsaWNhdGlvblVzZXJEYXRhKG1Db250ZXh0LmdldFBhY2thZ2VOYW1lKCksIG51bGwpOwogICAgIH0KIAorCisgICAgLyoqCisgICAgICogUGVybWl0cyBhbiBhcHBsaWNhdGlvbiB0byBnZXQgdGhlIHBlcnNpc3RlbnQgVVJJIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gYW5vdGhlci4KKyAgICAgKgorICAgICAqIDxwPlR5cGljYWxseSBjYWxsZWQgYnkgU2V0dGluZ3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgYXBwbGljYXRpb24gdG8gbG9vayBmb3IgdGhlIGdyYW50ZWQgcGVybWlzc2lvbnMKKyAgICAgKiBAcmV0dXJuIGxpc3Qgb2YgZ3JhbnRlZCBVUkkgcGVybWlzc2lvbnMKKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIFBhcmNlbGVkTGlzdFNsaWNlPFVyaVBlcm1pc3Npb24+IGdldEdyYW50ZWRVcmlQZXJtaXNzaW9ucyhTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmdldEdyYW50ZWRVcmlQZXJtaXNzaW9ucyhwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkbid0IGdldCBncmFudGVkIFVSSSBwZXJtaXNzaW9ucyBmb3IgOiIgKyBwYWNrYWdlTmFtZSwgZSk7CisgICAgICAgICAgICByZXR1cm4gUGFyY2VsZWRMaXN0U2xpY2UuZW1wdHlMaXN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQZXJtaXRzIGFuIGFwcGxpY2F0aW9uIHRvIGNsZWFyIHRoZSBwZXJzaXN0ZW50IFVSSSBwZXJtaXNzaW9ucyBncmFudGVkIHRvIGFub3RoZXIuCisgICAgICoKKyAgICAgKiA8cD5UeXBpY2FsbHkgY2FsbGVkIGJ5IFNldHRpbmdzLgorICAgICAqCisgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIGFwcGxpY2F0aW9uIHRvIGNsZWFyIGl0cyBncmFudGVkIHBlcm1pc3Npb25zCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyR3JhbnRlZFVyaVBlcm1pc3Npb25zKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5jbGVhckdyYW50ZWRVcmlQZXJtaXNzaW9ucyhwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkbid0IGNsZWFyIGdyYW50ZWQgVVJJIHBlcm1pc3Npb25zIGZvciA6IiArIHBhY2thZ2VOYW1lLCBlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIEluZm9ybWF0aW9uIHlvdSBjYW4gcmV0cmlldmUgYWJvdXQgYW55IHByb2Nlc3NlcyB0aGF0IGFyZSBpbiBhbiBlcnJvciBjb25kaXRpb24uCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmphdmEKaW5kZXggZjMyNDJhNy4uNjI0MTMxZSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5TWFuYWdlck5hdGl2ZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU1hbmFnZXJOYXRpdmUuamF2YQpAQCAtMzMyLDEwICszMzIsOSBAQAogICAgICAgICB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGZpbmFsIGludCB0YXNrSWQgPSBkYXRhLnJlYWRJbnQoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBsYXVuY2hTdGFja0lkID0gZGF0YS5yZWFkSW50KCk7CiAgICAgICAgICAgICBmaW5hbCBCdW5kbGUgb3B0aW9ucyA9CiAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVhZEludCgpID09IDAgPyBudWxsIDogQnVuZGxlLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKTsKLSAgICAgICAgICAgIGZpbmFsIGludCByZXN1bHQgPSBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza0lkLCBsYXVuY2hTdGFja0lkLCBvcHRpb25zKTsKKyAgICAgICAgICAgIGZpbmFsIGludCByZXN1bHQgPSBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza0lkLCBvcHRpb25zKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlSW50KHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU3MSw2ICs1NzAsMTQgQEAKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBBQ1RJVklUWV9SRUxBVU5DSEVEX1RSQU5TQUNUSU9OOiB7CisgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIElCaW5kZXIgdG9rZW4gPSBkYXRhLnJlYWRTdHJvbmdCaW5kZXIoKTsKKyAgICAgICAgICAgIGFjdGl2aXR5UmVsYXVuY2hlZCh0b2tlbik7CisgICAgICAgICAgICByZXBseS53cml0ZU5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR0VUX0NBTExJTkdfUEFDS0FHRV9UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBJQmluZGVyIHRva2VuID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CkBAIC03ODYsNiArNzkzLDM5IEBACiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgUkVTSVpFX0RPQ0tFRF9TVEFDS19UUkFOU0FDVElPTjogeworICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGhhc0JvdW5kcyA9IGRhdGEucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBSZWN0IGJvdW5kcyA9IG51bGw7CisgICAgICAgICAgICBpZiAoaGFzQm91bmRzKSB7CisgICAgICAgICAgICAgICAgYm91bmRzID0gUmVjdC5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGhhc1RlbXBEb2NrZWRUYXNrQm91bmRzID0gZGF0YS5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIFJlY3QgdGVtcERvY2tlZFRhc2tCb3VuZHMgPSBudWxsOworICAgICAgICAgICAgaWYgKGhhc1RlbXBEb2NrZWRUYXNrQm91bmRzKSB7CisgICAgICAgICAgICAgICAgdGVtcERvY2tlZFRhc2tCb3VuZHMgPSBSZWN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzVGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyA9IGRhdGEucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBSZWN0IHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMgPSBudWxsOworICAgICAgICAgICAgaWYgKGhhc1RlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMpIHsKKyAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzID0gUmVjdC5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGhhc1RlbXBPdGhlclRhc2tCb3VuZHMgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrQm91bmRzID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChoYXNUZW1wT3RoZXJUYXNrQm91bmRzKSB7CisgICAgICAgICAgICAgICAgdGVtcE90aGVyVGFza0JvdW5kcyA9IFJlY3QuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNUZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMgPSBudWxsOworICAgICAgICAgICAgaWYgKGhhc1RlbXBPdGhlclRhc2tJbnNldEJvdW5kcykgeworICAgICAgICAgICAgICAgIHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcyA9IFJlY3QuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzaXplRG9ja2VkU3RhY2soYm91bmRzLCB0ZW1wRG9ja2VkVGFza0JvdW5kcywgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgdGVtcE90aGVyVGFza0JvdW5kcywgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzKTsKKyAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQT1NJVElPTl9UQVNLX0lOX1NUQUNLX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgICAgIGludCB0YXNrSWQgPSBkYXRhLnJlYWRJbnQoKTsKQEAgLTEzNjgsNiArMTQwOCwyNiBAQAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdFVF9HUkFOVEVEX1VSSV9QRVJNSVNTSU9OU19UUkFOU0FDVElPTjogeworICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBkYXRhLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBkYXRhLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGZpbmFsIFBhcmNlbGVkTGlzdFNsaWNlPFVyaVBlcm1pc3Npb24+IHBlcm1zID0gZ2V0R3JhbnRlZFVyaVBlcm1pc3Npb25zKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICB1c2VySWQpOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcGVybXMud3JpdGVUb1BhcmNlbChyZXBseSwgUGFyY2VsYWJsZS5QQVJDRUxBQkxFX1dSSVRFX1JFVFVSTl9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQ0xFQVJfR1JBTlRFRF9VUklfUEVSTUlTU0lPTlNfVFJBTlNBQ1RJT046IHsKKyAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gZGF0YS5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gZGF0YS5yZWFkSW50KCk7CisgICAgICAgICAgICBjbGVhckdyYW50ZWRVcmlQZXJtaXNzaW9ucyhwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBTSE9XX1dBSVRJTkdfRk9SX0RFQlVHR0VSX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgICAgIElCaW5kZXIgYiA9IGRhdGEucmVhZFN0cm9uZ0JpbmRlcigpOwpAQCAtMTU1OCw2ICsxNjE4LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgS0lMTF9QQUNLQUdFX0RFUEVOREVOVFNfVFJBTlNBQ1RJT046IHsKKyAgICAgICAgICAgIGRhdGEuZW5mb3JjZUludGVyZmFjZShJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gZGF0YS5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBpbnQgdXNlcklkID0gZGF0YS5yZWFkSW50KCk7CisgICAgICAgICAgICBraWxsUGFja2FnZURlcGVuZGVudHMocGFja2FnZU5hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICByZXBseS53cml0ZU5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgRk9SQ0VfU1RPUF9QQUNLQUdFX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKICAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGRhdGEucmVhZFN0cmluZygpOwpAQCAtMTgzNiw2ICsxOTA1LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgR0VUX1VSSV9QRVJNSVNTSU9OX09XTkVSX0ZPUl9BQ1RJVklUWV9UUkFOU0FDVElPTjogeworICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgICAgICBJQmluZGVyIGFjdGl2aXR5VG9rZW4gPSBkYXRhLnJlYWRTdHJvbmdCaW5kZXIoKTsKKyAgICAgICAgICAgIElCaW5kZXIgcGVybSA9IGdldFVyaVBlcm1pc3Npb25Pd25lckZvckFjdGl2aXR5KGFjdGl2aXR5VG9rZW4pOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcmVwbHkud3JpdGVTdHJvbmdCaW5kZXIocGVybSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR1JBTlRfVVJJX1BFUk1JU1NJT05fRlJPTV9PV05FUl9UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBJQmluZGVyIG93bmVyID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CkBAIC0yMjI4LDggKzIzMDYsOCBAQAogCiAgICAgICAgIGNhc2UgUkVRVUVTVF9CVUdfUkVQT1JUX1RSQU5TQUNUSU9OOiB7CiAgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKLSAgICAgICAgICAgIGJvb2xlYW4gcHJvZ3Jlc3MgPSBkYXRhLnJlYWRJbnQoKSAhPSAwOwotICAgICAgICAgICAgcmVxdWVzdEJ1Z1JlcG9ydChwcm9ncmVzcyk7CisgICAgICAgICAgICBpbnQgYnVncmVwb3J0VHlwZSA9IGRhdGEucmVhZEludCgpOworICAgICAgICAgICAgcmVxdWVzdEJ1Z1JlcG9ydChidWdyZXBvcnRUeXBlKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNjk0LDExICsyNzcyLDEwIEBACiAgICAgICAgICAgICByZXBseS53cml0ZUludChzdGFja0lkKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgTU9WRV9BQ1RJVklUWV9UT19TVEFDS19UUkFOU0FDVElPTjogeworICAgICAgICBjYXNlIEVYSVRfRlJFRUZPUk1fTU9ERV9UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBJQmluZGVyIHRva2VuID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7Ci0gICAgICAgICAgICBpbnQgc3RhY2tJZCA9IGRhdGEucmVhZEludCgpOwotICAgICAgICAgICAgbW92ZUFjdGl2aXR5VG9TdGFjayh0b2tlbiwgc3RhY2tJZCk7CisgICAgICAgICAgICBleGl0RnJlZWZvcm1Nb2RlKHRva2VuKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNzE4LDEwICsyNzk1LDEwIEBACiAgICAgICAgICAgICByZXBseS53cml0ZU5vRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBjYXNlIFJFTU9WRV9TVEFDS19UUkFOU0FDVElPTjogeworICAgICAgICBjYXNlIE1PVkVfVEFTS1NfVE9fRlVMTFNDUkVFTl9TVEFDS19UUkFOU0FDVElPTjogewogICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CiAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IGRhdGEucmVhZEludCgpOwotICAgICAgICAgICAgcmVtb3ZlU3RhY2soc3RhY2tJZCk7CisgICAgICAgICAgICBtb3ZlVGFza3NUb0Z1bGxzY3JlZW5TdGFjayhzdGFja0lkKTsKICAgICAgICAgICAgIHJlcGx5LndyaXRlTm9FeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0yNzUwLDYgKzI4MjcsMjEgQEAKICAgICAgICAgICAgIHJlcGx5LndyaXRlSW50KHBpcE1vZGUgPyAxIDogMCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQorICAgICAgICBjYXNlIEVOVEVSX1BJQ1RVUkVfSU5fUElDVFVSRV9NT0RFX1RSQU5TQUNUSU9OOiB7CisgICAgICAgICAgICBkYXRhLmVuZm9yY2VJbnRlcmZhY2UoSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIGZpbmFsIElCaW5kZXIgdG9rZW4gPSBkYXRhLnJlYWRTdHJvbmdCaW5kZXIoKTsKKyAgICAgICAgICAgIGVudGVyUGljdHVyZUluUGljdHVyZU1vZGUodG9rZW4pOworICAgICAgICAgICAgcmVwbHkud3JpdGVOb0V4Y2VwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTRVRfVlJfTU9ERV9UUkFOU0FDVElPTjogeworICAgICAgICAgICAgZGF0YS5lbmZvcmNlSW50ZXJmYWNlKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgICAgICBmaW5hbCBJQmluZGVyIHRva2VuID0gZGF0YS5yZWFkU3Ryb25nQmluZGVyKCk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGVuYWJsZSA9IGRhdGEucmVhZEludCgpID09IDE7CisgICAgICAgICAgICBzZXRWck1vZGUodG9rZW4sIGVuYWJsZSk7CisgICAgICAgICAgICByZXBseS53cml0ZU5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHN1cGVyLm9uVHJhbnNhY3QoY29kZSwgZGF0YSwgcmVwbHksIGZsYWdzKTsKQEAgLTMwNTUsMTMgKzMxNDcsMTIgQEAKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQgIT0gMDsKICAgICB9Ci0gICAgcHVibGljIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBvcHRpb25zKQorICAgIHB1YmxpYyBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKGludCB0YXNrSWQsIEJ1bmRsZSBvcHRpb25zKQogICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwogICAgICAgICBkYXRhLndyaXRlSW50KHRhc2tJZCk7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQobGF1bmNoU3RhY2tJZCk7CiAgICAgICAgIGlmIChvcHRpb25zID09IG51bGwpIHsKICAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMzQ5LDYgKzM0NDAsMTcgQEAKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKICAgICB9CisgICAgcHVibGljIHZvaWQgYWN0aXZpdHlSZWxhdW5jaGVkKElCaW5kZXIgdG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKHRva2VuKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChBQ1RJVklUWV9SRUxBVU5DSEVEX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICB9CiAgICAgcHVibGljIFN0cmluZyBnZXRDYWxsaW5nUGFja2FnZShJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKQEAgLTM2NTksNiArMzc2MSw1MCBAQAogICAgICAgICByZXBseS5yZWN5Y2xlKCk7CiAgICAgfQogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlc2l6ZURvY2tlZFN0YWNrKFJlY3QgZG9ja2VkQm91bmRzLCBSZWN0IHRlbXBEb2NrZWRUYXNrQm91bmRzLAorICAgICAgICAgICAgUmVjdCB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzLAorICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrQm91bmRzLCBSZWN0IHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcykKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICB7CisgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICBpZiAoZG9ja2VkQm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMSk7CisgICAgICAgICAgICBkb2NrZWRCb3VuZHMud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRlbXBEb2NrZWRUYXNrQm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMSk7CisgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0JvdW5kcy53cml0ZVRvUGFyY2VsKGRhdGEsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YS53cml0ZUludCgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcy53cml0ZVRvUGFyY2VsKGRhdGEsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YS53cml0ZUludCgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcE90aGVyVGFza0JvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkYXRhLndyaXRlSW50KDEpOworICAgICAgICAgICAgdGVtcE90aGVyVGFza0JvdW5kcy53cml0ZVRvUGFyY2VsKGRhdGEsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGF0YS53cml0ZUludCgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGVtcE90aGVyVGFza0luc2V0Qm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMSk7CisgICAgICAgICAgICB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMud3JpdGVUb1BhcmNlbChkYXRhLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChSRVNJWkVfRE9DS0VEX1NUQUNLX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICB9CisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFjayhpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKQEAgLTQ0ODUsNiArNDYzMSw3IEBACiAgICAgICAgIGRhdGEud3JpdGVJbnQoaW5jb21pbmcgPyAxIDogMCk7CiAgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoR0VUX1BFUlNJU1RFRF9VUklfUEVSTUlTU0lPTlNfVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKICAgICAgICAgcmVwbHkucmVhZEV4Y2VwdGlvbigpOworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICAgICAgZmluYWwgUGFyY2VsZWRMaXN0U2xpY2U8VXJpUGVybWlzc2lvbj4gcGVybXMgPSBQYXJjZWxlZExpc3RTbGljZS5DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoCiAgICAgICAgICAgICAgICAgcmVwbHkpOwogICAgICAgICBkYXRhLnJlY3ljbGUoKTsKQEAgLTQ0OTIsNiArNDYzOSwzNyBAQAogICAgICAgICByZXR1cm4gcGVybXM7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFBhcmNlbGVkTGlzdFNsaWNlPFVyaVBlcm1pc3Npb24+IGdldEdyYW50ZWRVcmlQZXJtaXNzaW9ucyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgIGRhdGEud3JpdGVTdHJpbmcocGFja2FnZU5hbWUpOworICAgICAgICBkYXRhLndyaXRlSW50KHVzZXJJZCk7CisgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoR0VUX0dSQU5URURfVVJJX1BFUk1JU1NJT05TX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisgICAgICAgIGZpbmFsIFBhcmNlbGVkTGlzdFNsaWNlPFVyaVBlcm1pc3Npb24+IHBlcm1zID0gUGFyY2VsZWRMaXN0U2xpY2UuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKAorICAgICAgICAgICAgICAgIHJlcGx5KTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICAgICAgcmV0dXJuIHBlcm1zOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNsZWFyR3JhbnRlZFVyaVBlcm1pc3Npb25zKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICBkYXRhLndyaXRlU3RyaW5nKHBhY2thZ2VOYW1lKTsKKyAgICAgICAgZGF0YS53cml0ZUludCh1c2VySWQpOworICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KENMRUFSX0dSQU5URURfVVJJX1BFUk1JU1NJT05TX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzaG93V2FpdGluZ0ZvckRlYnVnZ2VyKElBcHBsaWNhdGlvblRocmVhZCB3aG8sIGJvb2xlYW4gd2FpdGluZykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKQEAgLTQ3MzYsNiArNDkxNCwxOCBAQAogICAgICAgICByZXBseS5yZWN5Y2xlKCk7CiAgICAgfQogCisgICAgcHVibGljIHZvaWQga2lsbFBhY2thZ2VEZXBlbmRlbnRzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOworICAgICAgICBkYXRhLndyaXRlU3RyaW5nKHBhY2thZ2VOYW1lKTsKKyAgICAgICAgZGF0YS53cml0ZUludCh1c2VySWQpOworICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KEtJTExfUEFDS0FHRV9ERVBFTkRFTlRTX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBmb3JjZVN0b3BQYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CkBAIC01MDg1LDYgKzUyNzUsMTkgQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKKyAgICBwdWJsaWMgSUJpbmRlciBnZXRVcmlQZXJtaXNzaW9uT3duZXJGb3JBY3Rpdml0eShJQmluZGVyIGFjdGl2aXR5VG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgUGFyY2VsIHJlcGx5ID0gUGFyY2VsLm9idGFpbigpOworICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUFjdGl2aXR5TWFuYWdlci5kZXNjcmlwdG9yKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihhY3Rpdml0eVRva2VuKTsKKyAgICAgICAgbVJlbW90ZS50cmFuc2FjdChHRVRfVVJJX1BFUk1JU1NJT05fT1dORVJfRk9SX0FDVElWSVRZX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgSUJpbmRlciByZXMgPSByZXBseS5yZWFkU3Ryb25nQmluZGVyKCk7CisgICAgICAgIGRhdGEucmVjeWNsZSgpOworICAgICAgICByZXBseS5yZWN5Y2xlKCk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZ3JhbnRVcmlQZXJtaXNzaW9uRnJvbU93bmVyKElCaW5kZXIgb3duZXIsIGludCBmcm9tVWlkLCBTdHJpbmcgdGFyZ2V0UGtnLAogICAgICAgICAgICAgVXJpIHVyaSwgaW50IG1vZGUsIGludCBzb3VyY2VVc2VySWQsIGludCB0YXJnZXRVc2VySWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBQYXJjZWwgZGF0YSA9IFBhcmNlbC5vYnRhaW4oKTsKQEAgLTU2MTcsMTEgKzU4MjAsMTIgQEAKICAgICAgICAgcmVwbHkucmVjeWNsZSgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RCdWdSZXBvcnQoYm9vbGVhbiBwcm9ncmVzcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgcmVxdWVzdEJ1Z1JlcG9ydChAQWN0aXZpdHlNYW5hZ2VyLkJ1Z3JlcG9ydE1vZGUgaW50IGJ1Z3JlcG9ydFR5cGUpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQocHJvZ3Jlc3MgPyAxIDogMCk7CisgICAgICAgIGRhdGEud3JpdGVJbnQoYnVncmVwb3J0VHlwZSk7CiAgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoUkVRVUVTVF9CVUdfUkVQT1JUX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CiAgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CkBAIC01ODY4LDYgKzYwNzIsMTggQEAKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRWck1vZGUoSUJpbmRlciB0b2tlbiwgYm9vbGVhbiBlbmFibGVkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIodG9rZW4pOworICAgICAgICBkYXRhLndyaXRlSW50KGVuYWJsZWQgPyAxIDogMCk7CisgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoU0VUX1ZSX01PREVfVFJBTlNBQ1RJT04sIGRhdGEsIHJlcGx5LCAwKTsKKyAgICAgICAgcmVwbHkucmVhZEV4Y2VwdGlvbigpOworICAgICAgICBkYXRhLnJlY3ljbGUoKTsKKyAgICAgICAgcmVwbHkucmVjeWNsZSgpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJQWN0aXZpdHlDb250YWluZXIgY3JlYXRlU3RhY2tPbkRpc3BsYXkoaW50IGRpc3BsYXlJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOwpAQCAtNjI5MywxMyArNjUwOSwxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG1vdmVBY3Rpdml0eVRvU3RhY2soSUJpbmRlciB0b2tlbiwgaW50IHN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIGV4aXRGcmVlZm9ybU1vZGUoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIFBhcmNlbCBkYXRhID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBQYXJjZWwgcmVwbHkgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQWN0aXZpdHlNYW5hZ2VyLmRlc2NyaXB0b3IpOwogICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKHRva2VuKTsKLSAgICAgICAgZGF0YS53cml0ZUludChzdGFja0lkKTsKLSAgICAgICAgbVJlbW90ZS50cmFuc2FjdChNT1ZFX0FDVElWSVRZX1RPX1NUQUNLX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIG1SZW1vdGUudHJhbnNhY3QoRVhJVF9GUkVFRk9STV9NT0RFX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CiAgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKICAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CiAgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKQEAgLTYzNTgsMTIgKzY1NzMsMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVTdGFjayhpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgbW92ZVRhc2tzVG9GdWxsc2NyZWVuU3RhY2soaW50IGZyb21TdGFja0lkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CiAgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7Ci0gICAgICAgIGRhdGEud3JpdGVJbnQoc3RhY2tJZCk7Ci0gICAgICAgIG1SZW1vdGUudHJhbnNhY3QoUkVNT1ZFX1NUQUNLX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIGRhdGEud3JpdGVJbnQoZnJvbVN0YWNrSWQpOworICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KE1PVkVfVEFTS1NfVE9fRlVMTFNDUkVFTl9TVEFDS19UUkFOU0FDVElPTiwgZGF0YSwgcmVwbHksIDApOwogICAgICAgICByZXBseS5yZWFkRXhjZXB0aW9uKCk7CiAgICAgICAgIGRhdGEucmVjeWNsZSgpOwogICAgICAgICByZXBseS5yZWN5Y2xlKCk7CkBAIC02NDEyLDUgKzY2MjcsMTcgQEAKICAgICAgICAgcmV0dXJuIHBpcE1vZGU7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZShJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgUGFyY2VsIGRhdGEgPSBQYXJjZWwub2J0YWluKCk7CisgICAgICAgIFBhcmNlbCByZXBseSA9IFBhcmNlbC5vYnRhaW4oKTsKKyAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBY3Rpdml0eU1hbmFnZXIuZGVzY3JpcHRvcik7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIodG9rZW4pOworICAgICAgICBtUmVtb3RlLnRyYW5zYWN0KEVOVEVSX1BJQ1RVUkVfSU5fUElDVFVSRV9NT0RFX1RSQU5TQUNUSU9OLCBkYXRhLCByZXBseSwgMCk7CisgICAgICAgIHJlcGx5LnJlYWRFeGNlcHRpb24oKTsKKyAgICAgICAgZGF0YS5yZWN5Y2xlKCk7CisgICAgICAgIHJlcGx5LnJlY3ljbGUoKTsKKyAgICB9CisKICAgICBwcml2YXRlIElCaW5kZXIgbVJlbW90ZTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eU9wdGlvbnMuamF2YQppbmRleCBjZWUxYWE1Li5lNTk2YTY4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlPcHRpb25zLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5T3B0aW9ucy5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5ET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfVE9QX09SX0xFRlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLklOVkFMSURfU1RBQ0tfSUQ7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwpAQCAtNjcsNyArNjgsOCBAQAogICAgICAqIFRoZSBib3VuZHMgKHdpbmRvdyBzaXplKSB0aGF0IHRoZSBhY3Rpdml0eSBzaG91bGQgYmUgbGF1bmNoZWQgaW4uIFNldCB0byBudWxsIGV4cGxpY2l0bHkgZm9yCiAgICAgICogZnVsbCBzY3JlZW4uIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kLCBwcmV2aW91cyBib3VuZHMgd2lsbCBiZSBwcmVzZXJ2ZWQuCiAgICAgICogTk9URTogVGhpcyB2YWx1ZSBpcyBpZ25vcmVkIG9uIGRldmljZXMgdGhhdCBkb24ndCBoYXZlCi0gICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlciNGRUFUVVJFX0ZSRUVGT1JNX1dJTkRPV19NQU5BR0VNRU5UfSBlbmFibGVkLgorICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIjRkVBVFVSRV9GUkVFRk9STV9XSU5ET1dfTUFOQUdFTUVOVH0gb3IKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyI0ZFQVRVUkVfUElDVFVSRV9JTl9QSUNUVVJFfSBlbmFibGVkLgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0xBVU5DSF9CT1VORFMgPSAiYW5kcm9pZDphY3Rpdml0eS5sYXVuY2hCb3VuZHMiOwpAQCAtMTQ1LDYgKzE0NywxMiBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfQU5JTV9TUEVDUyA9ICJhbmRyb2lkOmFjdGl2aXR5LmFuaW1TcGVjcyI7CiAKICAgICAvKioKKyAgICAgKiBUaGUgc3RhY2sgaWQgdGhlIGFjdGl2aXR5IHNob3VsZCBiZSBsYXVuY2hlZCBpbnRvLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9MQVVOQ0hfU1RBQ0tfSUQgPSAiYW5kcm9pZC5hY3Rpdml0eS5sYXVuY2hTdGFja0lkIjsKKworICAgIC8qKgogICAgICAqIFdoZXJlIHRoZSBkb2NrZWQgc3RhY2sgc2hvdWxkIGJlIHBvc2l0aW9uZWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTIxNSw2ICsyMjMsNyBAQAogICAgIHByaXZhdGUgaW50IG1SZXN1bHRDb2RlOwogICAgIHByaXZhdGUgaW50IG1FeGl0Q29vcmRpbmF0b3JJbmRleDsKICAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgbVVzYWdlVGltZVJlcG9ydDsKKyAgICBwcml2YXRlIGludCBtTGF1bmNoU3RhY2tJZCA9IElOVkFMSURfU1RBQ0tfSUQ7CiAgICAgcHJpdmF0ZSBpbnQgbURvY2tDcmVhdGVNb2RlID0gRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZUOwogICAgIHByaXZhdGUgQXBwVHJhbnNpdGlvbkFuaW1hdGlvblNwZWMgbUFuaW1TcGVjc1tdOwogCkBAIC03NTQsNiArNzYzLDcgQEAKICAgICAgICAgICAgICAgICBtRXhpdENvb3JkaW5hdG9ySW5kZXggPSBvcHRzLmdldEludChLRVlfRVhJVF9DT09SRElOQVRPUl9JTkRFWCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgbUxhdW5jaFN0YWNrSWQgPSBvcHRzLmdldEludChLRVlfTEFVTkNIX1NUQUNLX0lELCBJTlZBTElEX1NUQUNLX0lEKTsKICAgICAgICAgbURvY2tDcmVhdGVNb2RlID0gb3B0cy5nZXRJbnQoS0VZX0RPQ0tfQ1JFQVRFX01PREUsIERPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVCk7CiAgICAgICAgIGlmIChvcHRzLmNvbnRhaW5zS2V5KEtFWV9BTklNX1NQRUNTKSkgewogICAgICAgICAgICAgUGFyY2VsYWJsZVtdIHNwZWNzID0gb3B0cy5nZXRQYXJjZWxhYmxlQXJyYXkoS0VZX0FOSU1fU1BFQ1MpOwpAQCAtOTAxLDcgKzkxMSwxOSBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RG9ja0NyZWF0ZU1vZGUoKSB7IHJldHVybiBtRG9ja0NyZWF0ZU1vZGU7IH0KKyAgICBwdWJsaWMgaW50IGdldExhdW5jaFN0YWNrSWQoKSB7CisgICAgICAgIHJldHVybiBtTGF1bmNoU3RhY2tJZDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRMYXVuY2hTdGFja0lkKGludCBsYXVuY2hTdGFja0lkKSB7CisgICAgICAgIG1MYXVuY2hTdGFja0lkID0gbGF1bmNoU3RhY2tJZDsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgaW50IGdldERvY2tDcmVhdGVNb2RlKCkgeworICAgICAgICByZXR1cm4gbURvY2tDcmVhdGVNb2RlOworICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyB2b2lkIHNldERvY2tDcmVhdGVNb2RlKGludCBkb2NrQ3JlYXRlTW9kZSkgewpAQCAtMTA0OSw2ICsxMDcxLDcgQEAKICAgICAgICAgICAgICAgICBiLnB1dEludChLRVlfRVhJVF9DT09SRElOQVRPUl9JTkRFWCwgbUV4aXRDb29yZGluYXRvckluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBiLnB1dEludChLRVlfTEFVTkNIX1NUQUNLX0lELCBtTGF1bmNoU3RhY2tJZCk7CiAgICAgICAgIGIucHV0SW50KEtFWV9ET0NLX0NSRUFURV9NT0RFLCBtRG9ja0NyZWF0ZU1vZGUpOwogICAgICAgICBpZiAobUFuaW1TcGVjcyAhPSBudWxsKSB7CiAgICAgICAgICAgICBiLnB1dFBhcmNlbGFibGVBcnJheShLRVlfQU5JTV9TUEVDUywgbUFuaW1TcGVjcyk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUaHJlYWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eVRocmVhZC5qYXZhCmluZGV4IGYzNTM5ZmYuLjRlNTVjODkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eVRocmVhZC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BY3Rpdml0eVRocmVhZC5qYXZhCkBAIC0xMDEsNiArMTAxLDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbDsKIGltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRDYWNoZURpcjsKIGltcG9ydCBhbmRyb2lkLnNlY3VyaXR5LmtleXN0b3JlLkFuZHJvaWRLZXlTdG9yZVByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQuc3lzdGVtLk9zOworaW1wb3J0IGFuZHJvaWQuc3lzdGVtLk9zQ29uc3RhbnRzOworaW1wb3J0IGFuZHJvaWQuc3lzdGVtLkVycm5vRXhjZXB0aW9uOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JVm9pY2VJbnRlcmFjdG9yOwpAQCAtMTIzLDYgKzEyNiw3IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS50ZXh0LkRhdGVGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtODE5LDQzICs4MjMsNiBAQAogCiAgICAgICAgICAgICBzZXRDb3JlU2V0dGluZ3MoY29yZVNldHRpbmdzKTsKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFR3byBwb3NzaWJsZSBpbmRpY2F0aW9ucyB0aGF0IHRoaXMgcGFja2FnZSBjb3VsZCBiZQotICAgICAgICAgICAgICogc2hhcmluZyBpdHMgcnVudGltZSB3aXRoIG90aGVyIHBhY2thZ2VzOgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIDEuKSB0aGUgc2hhcmVkVXNlcklkIGF0dHJpYnV0ZSBpcyBzZXQgaW4gdGhlIG1hbmlmZXN0LAotICAgICAgICAgICAgICogICAgIGluZGljYXRpbmcgYSByZXF1ZXN0IHRvIHNoYXJlIGEgVk0gd2l0aCBvdGhlcgotICAgICAgICAgICAgICogICAgIHBhY2thZ2VzIHdpdGggdGhlIHNhbWUgc2hhcmVkVXNlcklkLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIDIuKSB0aGUgYXBwbGljYXRpb24gZWxlbWVudCBvZiB0aGUgbWFuaWZlc3QgaGFzIGFuCi0gICAgICAgICAgICAgKiAgICAgYXR0cmlidXRlIHNwZWNpZnlpbmcgYSBub24tZGVmYXVsdCBwcm9jZXNzIG5hbWUsCi0gICAgICAgICAgICAgKiAgICAgaW5kaWNhdGluZyB0aGUgZGVzaXJlIHRvIHJ1biBpbiBhbm90aGVyIHBhY2thZ2VzIFZNLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIElmIHNoYXJpbmcgaXMgZW5hYmxlZCB3ZSBkbyBub3QgaGF2ZSBhIHVuaXF1ZSBhcHBsaWNhdGlvbgotICAgICAgICAgICAgICogaW4gYSBwcm9jZXNzIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlbHkgb24gdGhlIHBhY2thZ2UKLSAgICAgICAgICAgICAqIG5hbWUgaW5zaWRlIHRoZSBydW50aW1lLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBJUGFja2FnZU1hbmFnZXIgcG0gPSBnZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICAgICAgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvIHBpID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcGkgPSBwbS5nZXRQYWNrYWdlSW5mbyhhcHBJbmZvLnBhY2thZ2VOYW1lLCAwLCBVc2VySGFuZGxlLm15VXNlcklkKCkpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChwaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBzaGFyZWRVc2VySWRTZXQgPSAocGkuc2hhcmVkVXNlcklkICE9IG51bGwpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gcHJvY2Vzc05hbWVOb3REZWZhdWx0ID0KLSAgICAgICAgICAgICAgICAocGkuYXBwbGljYXRpb25JbmZvICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgIWFwcEluZm8ucGFja2FnZU5hbWUuZXF1YWxzKHBpLmFwcGxpY2F0aW9uSW5mby5wcm9jZXNzTmFtZSkpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gc2hhcmFibGUgPSAoc2hhcmVkVXNlcklkU2V0IHx8IHByb2Nlc3NOYW1lTm90RGVmYXVsdCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSBWTVJ1bnRpbWUgYWJvdXQgdGhlIGFwcGxpY2F0aW9uLCB1bmxlc3MgaXQgaXMgc2hhcmVkCi0gICAgICAgICAgICAgICAgLy8gaW5zaWRlIGEgcHJvY2Vzcy4KLSAgICAgICAgICAgICAgICBpZiAoIXNoYXJhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZNUnVudGltZS5yZWdpc3RlckFwcEluZm8oYXBwSW5mby5wYWNrYWdlTmFtZSwgYXBwSW5mby5kYXRhRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBJbmZvLnByb2Nlc3NOYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIEFwcEJpbmREYXRhIGRhdGEgPSBuZXcgQXBwQmluZERhdGEoKTsKICAgICAgICAgICAgIGRhdGEucHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZTsKICAgICAgICAgICAgIGRhdGEuYXBwSW5mbyA9IGFwcEluZm87CkBAIC0xODQ4LDcgKzE4MTUsOSBAQAogICAgICAgICBBcHBsaWNhdGlvbkluZm8gYWkgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgYWkgPSBnZXRQYWNrYWdlTWFuYWdlcigpLmdldEFwcGxpY2F0aW9uSW5mbyhwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKKyAgICAgICAgICAgICAgICAgICAgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIElnbm9yZQogICAgICAgICB9CkBAIC0yMDQ2LDcgKzIwMTUsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPTkVfQ09VTlRfQ09MVU1OX0hFQURFUiA9ICIlMjFzICU4cyI7CiAKICAgICAvLyBGb3JtYXR0aW5nIGZvciBjaGVja2luIHNlcnZpY2UgLSB1cGRhdGUgdmVyc2lvbiBpZiByb3cgZm9ybWF0IGNoYW5nZXMKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUNUSVZJVFlfVEhSRUFEX0NIRUNLSU5fVkVSU0lPTiA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDVElWSVRZX1RIUkVBRF9DSEVDS0lOX1ZFUlNJT04gPSA0OwogCiAgICAgc3RhdGljIHZvaWQgcHJpbnRSb3coUHJpbnRXcml0ZXIgcHcsIFN0cmluZyBmb3JtYXQsIE9iamVjdC4uLm9ianMpIHsKICAgICAgICAgcHcucHJpbnRsbihTdHJpbmcuZm9ybWF0KGZvcm1hdCwgb2JqcykpOwpAQCAtMjEyMiw2ICsyMDkxLDI1IEBACiAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLm90aGVyUHJpdmF0ZUNsZWFuKTsgcHcucHJpbnQoJywnKTsKICAgICAgICAgICAgIHB3LnByaW50KG1lbUluZm8uZ2V0VG90YWxQcml2YXRlQ2xlYW4oKSk7IHB3LnByaW50KCcsJyk7CiAKKyAgICAgICAgICAgIC8vIEhlYXAgaW5mbyAtIHN3YXBwZWQgb3V0CisgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLm5hdGl2ZVN3YXBwZWRPdXQpOyBwdy5wcmludCgnLCcpOworICAgICAgICAgICAgcHcucHJpbnQobWVtSW5mby5kYWx2aWtTd2FwcGVkT3V0KTsgcHcucHJpbnQoJywnKTsKKyAgICAgICAgICAgIHB3LnByaW50KG1lbUluZm8ub3RoZXJTd2FwcGVkT3V0KTsgcHcucHJpbnQoJywnKTsKKyAgICAgICAgICAgIHB3LnByaW50KG1lbUluZm8uZ2V0VG90YWxTd2FwcGVkT3V0KCkpOyBwdy5wcmludCgnLCcpOworCisgICAgICAgICAgICAvLyBIZWFwIGluZm8gLSBzd2FwcGVkIG91dCBwc3MKKyAgICAgICAgICAgIGlmIChtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MpIHsKKyAgICAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLm5hdGl2ZVN3YXBwZWRPdXRQc3MpOyBwdy5wcmludCgnLCcpOworICAgICAgICAgICAgICAgIHB3LnByaW50KG1lbUluZm8uZGFsdmlrU3dhcHBlZE91dFBzcyk7IHB3LnByaW50KCcsJyk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQobWVtSW5mby5vdGhlclN3YXBwZWRPdXRQc3MpOyBwdy5wcmludCgnLCcpOworICAgICAgICAgICAgICAgIHB3LnByaW50KG1lbUluZm8uZ2V0VG90YWxTd2FwcGVkT3V0UHNzKCkpOyBwdy5wcmludCgnLCcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiTi9BLCIpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCJOL0EsIik7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIk4vQSwiKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiTi9BLCIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBIZWFwIGluZm8gLSBvdGhlciBhcmVhcwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPERlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTOyBpKyspIHsKICAgICAgICAgICAgICAgICBwdy5wcmludChEZWJ1Zy5NZW1vcnlJbmZvLmdldE90aGVyTGFiZWwoaSkpOyBwdy5wcmludCgnLCcpOwpAQCAtMjEzMSw2ICsyMTE5LDEyIEBACiAgICAgICAgICAgICAgICAgcHcucHJpbnQobWVtSW5mby5nZXRPdGhlclNoYXJlZENsZWFuKGkpKTsgcHcucHJpbnQoJywnKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLmdldE90aGVyUHJpdmF0ZURpcnR5KGkpKTsgcHcucHJpbnQoJywnKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLmdldE90aGVyUHJpdmF0ZUNsZWFuKGkpKTsgcHcucHJpbnQoJywnKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLmdldE90aGVyU3dhcHBlZE91dChpKSk7IHB3LnByaW50KCcsJyk7CisgICAgICAgICAgICAgICAgaWYgKG1lbUluZm8uaGFzU3dhcHBlZE91dFBzcykgeworICAgICAgICAgICAgICAgICAgICBwdy5wcmludChtZW1JbmZvLmdldE90aGVyU3dhcHBlZE91dFBzcyhpKSk7IHB3LnByaW50KCcsJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIk4vQSwiKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIxMzgsMzUgKzIxMzIsNDQgQEAKICAgICAgICAgaWYgKCFkdW1wU3VtbWFyeU9ubHkpIHsKICAgICAgICAgICAgIGlmIChkdW1wRnVsbEluZm8pIHsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9GVUxMX0NPTFVNTiwgIiIsICJQc3MiLCAiUHNzIiwgIlNoYXJlZCIsICJQcml2YXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJTaGFyZWQiLCAiUHJpdmF0ZSIsICJTd2FwcGVkIiwgIkhlYXAiLCAiSGVhcCIsICJIZWFwIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiU2hhcmVkIiwgIlByaXZhdGUiLCBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyAiU3dhcFBzcyIgOiAiU3dhcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiSGVhcCIsICJIZWFwIiwgIkhlYXAiKTsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9GVUxMX0NPTFVNTiwgIiIsICJUb3RhbCIsICJDbGVhbiIsICJEaXJ0eSIsICJEaXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW4iLCAiQ2xlYW4iLCAiRGlydHkiLCAiU2l6ZSIsICJBbGxvYyIsICJGcmVlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW4iLCAiQ2xlYW4iLCAiRGlydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUiLCAiQWxsb2MiLCAiRnJlZSIpOwogICAgICAgICAgICAgICAgIHByaW50Um93KHB3LCBIRUFQX0ZVTExfQ09MVU1OLCAiIiwgIi0tLS0tLSIsICItLS0tLS0iLCAiLS0tLS0tIiwgIi0tLS0tLSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiLS0tLS0tIiwgIi0tLS0tLSIsICItLS0tLS0iLCAiLS0tLS0tIiwgIi0tLS0tLSIsICItLS0tLS0iKTsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9GVUxMX0NPTFVNTiwgIk5hdGl2ZSBIZWFwIiwgbWVtSW5mby5uYXRpdmVQc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLm5hdGl2ZVN3YXBwYWJsZVBzcywgbWVtSW5mby5uYXRpdmVTaGFyZWREaXJ0eSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8ubmF0aXZlUHJpdmF0ZURpcnR5LCBtZW1JbmZvLm5hdGl2ZVNoYXJlZENsZWFuLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5uYXRpdmVQcml2YXRlQ2xlYW4sIG1lbUluZm8ubmF0aXZlU3dhcHBlZE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8ubmF0aXZlUHJpdmF0ZUNsZWFuLCBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPworICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5uYXRpdmVTd2FwcGVkT3V0IDogbWVtSW5mby5uYXRpdmVTd2FwcGVkT3V0UHNzLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlTWF4LCBuYXRpdmVBbGxvY2F0ZWQsIG5hdGl2ZUZyZWUpOwogICAgICAgICAgICAgICAgIHByaW50Um93KHB3LCBIRUFQX0ZVTExfQ09MVU1OLCAiRGFsdmlrIEhlYXAiLCBtZW1JbmZvLmRhbHZpa1BzcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZGFsdmlrU3dhcHBhYmxlUHNzLCBtZW1JbmZvLmRhbHZpa1NoYXJlZERpcnR5LAogICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5kYWx2aWtQcml2YXRlRGlydHksIG1lbUluZm8uZGFsdmlrU2hhcmVkQ2xlYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmRhbHZpa1ByaXZhdGVDbGVhbiwgbWVtSW5mby5kYWx2aWtTd2FwcGVkT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5kYWx2aWtQcml2YXRlQ2xlYW4sIG1lbUluZm8uaGFzU3dhcHBlZE91dFBzcyA/CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmRhbHZpa1N3YXBwZWRPdXQgOiBtZW1JbmZvLmRhbHZpa1N3YXBwZWRPdXRQc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBkYWx2aWtNYXgsIGRhbHZpa0FsbG9jYXRlZCwgZGFsdmlrRnJlZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHByaW50Um93KHB3LCBIRUFQX0NPTFVNTiwgIiIsICJQc3MiLCAiUHJpdmF0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSIsICJTd2FwcGVkIiwgIkhlYXAiLCAiSGVhcCIsICJIZWFwIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiUHJpdmF0ZSIsIG1lbUluZm8uaGFzU3dhcHBlZE91dFBzcyA/ICJTd2FwUHNzIiA6ICJTd2FwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJIZWFwIiwgIkhlYXAiLCAiSGVhcCIpOwogICAgICAgICAgICAgICAgIHByaW50Um93KHB3LCBIRUFQX0NPTFVNTiwgIiIsICJUb3RhbCIsICJEaXJ0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xlYW4iLCAiRGlydHkiLCAiU2l6ZSIsICJBbGxvYyIsICJGcmVlIik7CiAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfQ09MVU1OLCAiIiwgIi0tLS0tLSIsICItLS0tLS0iLCAiLS0tLS0tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICItLS0tLS0iLCAiLS0tLS0tIiwgIi0tLS0tLSIsICItLS0tLS0iLCAiLS0tLS0tIik7CiAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfQ09MVU1OLCAiTmF0aXZlIEhlYXAiLCBtZW1JbmZvLm5hdGl2ZVBzcywKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8ubmF0aXZlUHJpdmF0ZURpcnR5LAotICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5uYXRpdmVQcml2YXRlQ2xlYW4sIG1lbUluZm8ubmF0aXZlU3dhcHBlZE91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8ubmF0aXZlUHJpdmF0ZUNsZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5oYXNTd2FwcGVkT3V0UHNzID8gbWVtSW5mby5uYXRpdmVTd2FwcGVkT3V0UHNzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8ubmF0aXZlU3dhcHBlZE91dCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU1heCwgbmF0aXZlQWxsb2NhdGVkLCBuYXRpdmVGcmVlKTsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9DT0xVTU4sICJEYWx2aWsgSGVhcCIsIG1lbUluZm8uZGFsdmlrUHNzLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5kYWx2aWtQcml2YXRlRGlydHksCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmRhbHZpa1ByaXZhdGVDbGVhbiwgbWVtSW5mby5kYWx2aWtTd2FwcGVkT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5kYWx2aWtQcml2YXRlQ2xlYW4sCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBtZW1JbmZvLmRhbHZpa1N3YXBwZWRPdXRQc3MgOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5kYWx2aWtTd2FwcGVkT3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgZGFsdmlrTWF4LCBkYWx2aWtBbGxvY2F0ZWQsIGRhbHZpa0ZyZWUpOwogICAgICAgICAgICAgfQogCkBAIC0yMTc3LDYgKzIxODAsNyBAQAogICAgICAgICAgICAgaW50IG90aGVyU2hhcmVkQ2xlYW4gPSBtZW1JbmZvLm90aGVyU2hhcmVkQ2xlYW47CiAgICAgICAgICAgICBpbnQgb3RoZXJQcml2YXRlQ2xlYW4gPSBtZW1JbmZvLm90aGVyUHJpdmF0ZUNsZWFuOwogICAgICAgICAgICAgaW50IG90aGVyU3dhcHBlZE91dCA9IG1lbUluZm8ub3RoZXJTd2FwcGVkT3V0OworICAgICAgICAgICAgaW50IG90aGVyU3dhcHBlZE91dFBzcyA9IG1lbUluZm8ub3RoZXJTd2FwcGVkT3V0UHNzOwogCiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8RGVidWcuTWVtb3J5SW5mby5OVU1fT1RIRVJfU1RBVFM7IGkrKykgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBteVBzcyA9IG1lbUluZm8uZ2V0T3RoZXJQc3MoaSk7CkBAIC0yMTg2LDE2ICsyMTkwLDIyIEBACiAgICAgICAgICAgICAgICAgZmluYWwgaW50IG15U2hhcmVkQ2xlYW4gPSBtZW1JbmZvLmdldE90aGVyU2hhcmVkQ2xlYW4oaSk7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IG15UHJpdmF0ZUNsZWFuID0gbWVtSW5mby5nZXRPdGhlclByaXZhdGVDbGVhbihpKTsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbXlTd2FwcGVkT3V0ID0gbWVtSW5mby5nZXRPdGhlclN3YXBwZWRPdXQoaSk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG15U3dhcHBlZE91dFBzcyA9IG1lbUluZm8uZ2V0T3RoZXJTd2FwcGVkT3V0UHNzKGkpOwogICAgICAgICAgICAgICAgIGlmIChteVBzcyAhPSAwIHx8IG15U2hhcmVkRGlydHkgIT0gMCB8fCBteVByaXZhdGVEaXJ0eSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBteVNoYXJlZENsZWFuICE9IDAgfHwgbXlQcml2YXRlQ2xlYW4gIT0gMCB8fCBteVN3YXBwZWRPdXQgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfHwgbXlTaGFyZWRDbGVhbiAhPSAwIHx8IG15UHJpdmF0ZUNsZWFuICE9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBteVN3YXBwZWRPdXRQc3MgOiBteVN3YXBwZWRPdXQpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bXBGdWxsSW5mbykgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfRlVMTF9DT0xVTU4sIERlYnVnLk1lbW9yeUluZm8uZ2V0T3RoZXJMYWJlbChpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlQc3MsIG15U3dhcHBhYmxlUHNzLCBteVNoYXJlZERpcnR5LCBteVByaXZhdGVEaXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTaGFyZWRDbGVhbiwgbXlQcml2YXRlQ2xlYW4sIG15U3dhcHBlZE91dCwgIiIsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U2hhcmVkQ2xlYW4sIG15UHJpdmF0ZUNsZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBteVN3YXBwZWRPdXRQc3MgOiBteVN3YXBwZWRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIiwgIiIpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfQ09MVU1OLCBEZWJ1Zy5NZW1vcnlJbmZvLmdldE90aGVyTGFiZWwoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UHNzLCBteVByaXZhdGVEaXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlQcml2YXRlQ2xlYW4sIG15U3dhcHBlZE91dCwgIiIsICIiLCAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UHJpdmF0ZUNsZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBteVN3YXBwZWRPdXRQc3MgOiBteVN3YXBwZWRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiLCAiIiwgIiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG90aGVyUHNzIC09IG15UHNzOwogICAgICAgICAgICAgICAgICAgICBvdGhlclN3YXBwYWJsZVBzcyAtPSBteVN3YXBwYWJsZVBzczsKQEAgLTIyMDQsMjYgKzIyMTQsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgb3RoZXJTaGFyZWRDbGVhbiAtPSBteVNoYXJlZENsZWFuOwogICAgICAgICAgICAgICAgICAgICBvdGhlclByaXZhdGVDbGVhbiAtPSBteVByaXZhdGVDbGVhbjsKICAgICAgICAgICAgICAgICAgICAgb3RoZXJTd2FwcGVkT3V0IC09IG15U3dhcHBlZE91dDsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJTd2FwcGVkT3V0UHNzIC09IG15U3dhcHBlZE91dFBzczsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChkdW1wRnVsbEluZm8pIHsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9GVUxMX0NPTFVNTiwgIlVua25vd24iLCBvdGhlclBzcywgb3RoZXJTd2FwcGFibGVQc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlclNoYXJlZERpcnR5LCBvdGhlclByaXZhdGVEaXJ0eSwgb3RoZXJTaGFyZWRDbGVhbiwgb3RoZXJQcml2YXRlQ2xlYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBvdGhlclN3YXBwZWRPdXQsICIiLCAiIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5oYXNTd2FwcGVkT3V0UHNzID8gb3RoZXJTd2FwcGVkT3V0UHNzIDogb3RoZXJTd2FwcGVkT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIiIsICIiLCAiIik7CiAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfRlVMTF9DT0xVTU4sICJUT1RBTCIsIG1lbUluZm8uZ2V0VG90YWxQc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZ2V0VG90YWxTd2FwcGFibGVQc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZ2V0VG90YWxTaGFyZWREaXJ0eSgpLCBtZW1JbmZvLmdldFRvdGFsUHJpdmF0ZURpcnR5KCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmdldFRvdGFsU2hhcmVkQ2xlYW4oKSwgbWVtSW5mby5nZXRUb3RhbFByaXZhdGVDbGVhbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5nZXRUb3RhbFN3YXBwZWRPdXQoKSwgbmF0aXZlTWF4K2RhbHZpa01heCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUFsbG9jYXRlZCtkYWx2aWtBbGxvY2F0ZWQsIG5hdGl2ZUZyZWUrZGFsdmlrRnJlZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBtZW1JbmZvLmdldFRvdGFsU3dhcHBlZE91dCgpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZ2V0VG90YWxTd2FwcGVkT3V0UHNzKCksCisgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXgrZGFsdmlrTWF4LCBuYXRpdmVBbGxvY2F0ZWQrZGFsdmlrQWxsb2NhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRnJlZStkYWx2aWtGcmVlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfQ09MVU1OLCAiVW5rbm93biIsIG90aGVyUHNzLAotICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJQcml2YXRlRGlydHksIG90aGVyUHJpdmF0ZUNsZWFuLCBvdGhlclN3YXBwZWRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlclByaXZhdGVEaXJ0eSwgb3RoZXJQcml2YXRlQ2xlYW4sCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBvdGhlclN3YXBwZWRPdXRQc3MgOiBvdGhlclN3YXBwZWRPdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIsICIiKTsKICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9DT0xVTU4sICJUT1RBTCIsIG1lbUluZm8uZ2V0VG90YWxQc3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZ2V0VG90YWxQcml2YXRlRGlydHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uZ2V0VG90YWxQcml2YXRlQ2xlYW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbUluZm8uaGFzU3dhcHBlZE91dFBzcyA/IG1lbUluZm8uZ2V0VG90YWxTd2FwcGVkT3V0UHNzKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5nZXRUb3RhbFN3YXBwZWRPdXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU1heCtkYWx2aWtNYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVBbGxvY2F0ZWQrZGFsdmlrQWxsb2NhdGVkLCBuYXRpdmVGcmVlK2RhbHZpa0ZyZWUpOwpAQCAtMjI0MiwxNiArMjI1OCwyMiBAQAogICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbXlTaGFyZWRDbGVhbiA9IG1lbUluZm8uZ2V0T3RoZXJTaGFyZWRDbGVhbihpKTsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG15UHJpdmF0ZUNsZWFuID0gbWVtSW5mby5nZXRPdGhlclByaXZhdGVDbGVhbihpKTsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG15U3dhcHBlZE91dCA9IG1lbUluZm8uZ2V0T3RoZXJTd2FwcGVkT3V0KGkpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbXlTd2FwcGVkT3V0UHNzID0gbWVtSW5mby5nZXRPdGhlclN3YXBwZWRPdXRQc3MoaSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChteVBzcyAhPSAwIHx8IG15U2hhcmVkRGlydHkgIT0gMCB8fCBteVByaXZhdGVEaXJ0eSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbXlTaGFyZWRDbGVhbiAhPSAwIHx8IG15UHJpdmF0ZUNsZWFuICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBteVNoYXJlZENsZWFuICE9IDAgfHwgbXlQcml2YXRlQ2xlYW4gIT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBteVN3YXBwZWRPdXRQc3MgOiBteVN3YXBwZWRPdXQpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkdW1wRnVsbEluZm8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludFJvdyhwdywgSEVBUF9GVUxMX0NPTFVNTiwgRGVidWcuTWVtb3J5SW5mby5nZXRPdGhlckxhYmVsKGkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlQc3MsIG15U3dhcHBhYmxlUHNzLCBteVNoYXJlZERpcnR5LCBteVByaXZhdGVEaXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15U2hhcmVkQ2xlYW4sIG15UHJpdmF0ZUNsZWFuLCBteVN3YXBwZWRPdXQsICIiLCAiIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlTaGFyZWRDbGVhbiwgbXlQcml2YXRlQ2xlYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1JbmZvLmhhc1N3YXBwZWRPdXRQc3MgPyBteVN3YXBwZWRPdXRQc3MgOiBteVN3YXBwZWRPdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwgIiIsICIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRSb3cocHcsIEhFQVBfQ09MVU1OLCBEZWJ1Zy5NZW1vcnlJbmZvLmdldE90aGVyTGFiZWwoaSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVBzcywgbXlQcml2YXRlRGlydHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVByaXZhdGVDbGVhbiwgbXlTd2FwcGVkT3V0LCAiIiwgIiIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15UHJpdmF0ZUNsZWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtSW5mby5oYXNTd2FwcGVkT3V0UHNzID8gbXlTd2FwcGVkT3V0UHNzIDogbXlTd2FwcGVkT3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsICIiLCAiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0yMjc3LDkgKzIyOTksMTUgQEAKICAgICAgICAgcHJpbnRSb3cocHcsIE9ORV9DT1VOVF9DT0xVTU4sCiAgICAgICAgICAgICAiU3lzdGVtOiIsIG1lbUluZm8uZ2V0U3VtbWFyeVN5c3RlbSgpKTsKICAgICAgICAgcHcucHJpbnRsbigiICIpOwotICAgICAgICBwcmludFJvdyhwdywgVFdPX0NPVU5UX0NPTFVNTlMsCi0gICAgICAgICAgICAiVE9UQUw6IiwgbWVtSW5mby5nZXRTdW1tYXJ5VG90YWxQc3MoKSwKLSAgICAgICAgICAgICJUT1RBTCBTV0FQIChLQik6IiwgbWVtSW5mby5nZXRTdW1tYXJ5VG90YWxTd2FwKCkpOworICAgICAgICBpZiAobWVtSW5mby5oYXNTd2FwcGVkT3V0UHNzKSB7CisgICAgICAgICAgICBwcmludFJvdyhwdywgVFdPX0NPVU5UX0NPTFVNTlMsCisgICAgICAgICAgICAgICAgIlRPVEFMOiIsIG1lbUluZm8uZ2V0U3VtbWFyeVRvdGFsUHNzKCksCisgICAgICAgICAgICAgICAgIlRPVEFMIFNXQVAgUFNTOiIsIG1lbUluZm8uZ2V0U3VtbWFyeVRvdGFsU3dhcFBzcygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50Um93KHB3LCBUV09fQ09VTlRfQ09MVU1OUywKKyAgICAgICAgICAgICAgICAiVE9UQUw6IiwgbWVtSW5mby5nZXRTdW1tYXJ5VG90YWxQc3MoKSwKKyAgICAgICAgICAgICAgICAiVE9UQUwgU1dBUCAoS0IpOiIsIG1lbUluZm8uZ2V0U3VtbWFyeVRvdGFsU3dhcCgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyT25BY3Rpdml0eVBhdXNlZExpc3RlbmVyKEFjdGl2aXR5IGFjdGl2aXR5LApAQCAtNDE1NSw2ICs0MTgzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5wZW5kaW5nSW50ZW50cyA9IHBlbmRpbmdOZXdJbnRlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggcmVsYXVuY2ggcmVxdWVzdCwgYWN0aXZpdHkgbWFuYWdlciBleHBlY3RzIGFuIGFuc3dlcgorICAgICAgICAgICAgICAgICAgICBpZiAoIXIub25seUxvY2FsUmVxdWVzdCAmJiBmcm9tU2VydmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuYWN0aXZpdHlSZWxhdW5jaGVkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00MjY5LDYgKzQzMDYsMTMgQEAKICAgICAgICAgQWN0aXZpdHlDbGllbnRSZWNvcmQgciA9IG1BY3Rpdml0aWVzLmdldCh0bXAudG9rZW4pOwogICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBRywgIkhhbmRsaW5nIHJlbGF1bmNoIG9mICIgKyByKTsKICAgICAgICAgaWYgKHIgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCF0bXAub25seUxvY2FsUmVxdWVzdCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuYWN0aXZpdHlSZWxhdW5jaGVkKHRtcC50b2tlbik7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN5c3RlbSBwcm9jZXNzIGhhcyBkaWVkLCBpdCdzIGdhbWUgb3ZlciBmb3IgZXZlcnlvbmUuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTQzMTQsNiArNDM1OCwxNCBAQAogICAgICAgICByLm92ZXJyaWRlQ29uZmlnID0gdG1wLm92ZXJyaWRlQ29uZmlnOwogCiAgICAgICAgIGhhbmRsZUxhdW5jaEFjdGl2aXR5KHIsIGN1cnJlbnRJbnRlbnQpOworCisgICAgICAgIGlmICghdG1wLm9ubHlMb2NhbFJlcXVlc3QpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5hY3Rpdml0eVJlbGF1bmNoZWQoci50b2tlbik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzeXN0ZW0gcHJvY2VzcyBoYXMgZGllZCwgaXQncyBnYW1lIG92ZXIgZm9yIGV2ZXJ5b25lLgorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNhbGxDYWxsQWN0aXZpdHlPblNhdmVJbnN0YW5jZVN0YXRlKEFjdGl2aXR5Q2xpZW50UmVjb3JkIHIpIHsKQEAgLTQzOTksMTAgKzQ0NTEsMTQgQEAKICAgICAgICAgICAgIC8vIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQKICAgICAgICAgICAgIGludCBkaWZmID0gYWN0aXZpdHkubUN1cnJlbnRDb25maWcuZGlmZihjb25maWcpOwogICAgICAgICAgICAgaWYgKGRpZmYgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aXZpdHkgZG9lc24ndCBoYW5kbGUgYW55IG9mIHRoZSBjb25maWcgY2hhbmdlcwotICAgICAgICAgICAgICAgIC8vIHRoZW4gZG9uJ3QgYm90aGVyIGNhbGxpbmcgb25Db25maWd1cmF0aW9uQ2hhbmdlZCBhcyB3ZSdyZQotICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIGRlc3Ryb3kgaXQuCi0gICAgICAgICAgICAgICAgaWYgKCh+YWN0aXZpdHkubUFjdGl2aXR5SW5mby5nZXRSZWFsQ29uZmlnQ2hhbmdlZCgpICYgZGlmZikgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aXZpdHkgZG9lc24ndCBoYW5kbGUgYW55IG9mIHRoZSBjb25maWcgY2hhbmdlcyB0aGVuIGRvbid0IGJvdGhlcgorICAgICAgICAgICAgICAgIC8vIGNhbGxpbmcgb25Db25maWd1cmF0aW9uQ2hhbmdlZCBhcyB3ZSdyZSBnb2luZyB0byBkZXN0cm95IGl0LgorICAgICAgICAgICAgICAgIC8vIEV4Y2VwdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VkIG9uIHRoZSBhY3Rpdml0eSBtYW5hZ2VyIHNpZGUsCisgICAgICAgICAgICAgICAgLy8gYnV0IHdhc24ndCBiaWcgZW5vdWdoIHRvIGNhdXNlIGEgcmVzb3VyY2UgY2hhbmdlIHNvIHRoZSBhY3Rpdml0eSB3YXNuJ3QgZGVzdHJveWVkLgorICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzdGlsbCB3YW50IHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYWN0aXZpdHkgYnV0IG5vdAorICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBpdCB0byB0aGUgYXBwLgorICAgICAgICAgICAgICAgIGlmICgofmFjdGl2aXR5Lm1BY3Rpdml0eUluZm8uZ2V0UmVhbENvbmZpZ0NoYW5nZWQoKSAmIGRpZmYpID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFyZXBvcnRUb0FjdGl2aXR5KSB7CiAgICAgICAgICAgICAgICAgICAgIHNob3VsZENoYW5nZUNvbmZpZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDY2Myw2ICs0NzE5LDg3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldHVwSml0UHJvZmlsZVN1cHBvcnQoTG9hZGVkQXBrIGxvYWRlZEFwaywgRmlsZSBjYWNoZURpcikgeworICAgICAgICBmaW5hbCBBcHBsaWNhdGlvbkluZm8gYXBwSW5mbyA9IGxvYWRlZEFway5nZXRBcHBsaWNhdGlvbkluZm8oKTsKKyAgICAgICAgaWYgKGlzU2hhcmluZ1J1bnRpbWUoYXBwSW5mbykpIHsKKyAgICAgICAgICAgIC8vIElmIHNoYXJpbmcgaXMgZW5hYmxlZCB3ZSBkbyBub3QgaGF2ZSBhIHVuaXF1ZSBhcHBsaWNhdGlvbgorICAgICAgICAgICAgLy8gaW4gYSBwcm9jZXNzIGFuZCB0aGVyZWZvcmUgY2Fubm90IHJlbHkgb24gdGhlIHBhY2thZ2UKKyAgICAgICAgICAgIC8vIG5hbWUgaW5zaWRlIHRoZSBydW50aW1lLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBjb2RlUGF0aHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgaWYgKChhcHBJbmZvLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfSEFTX0NPREUpICE9IDApIHsKKyAgICAgICAgICAgIGNvZGVQYXRocy5hZGQoYXBwSW5mby5zb3VyY2VEaXIpOworICAgICAgICB9CisgICAgICAgIGlmIChhcHBJbmZvLnNwbGl0U291cmNlRGlycyAhPSBudWxsKSB7CisgICAgICAgICAgICBDb2xsZWN0aW9ucy5hZGRBbGwoY29kZVBhdGhzLCBhcHBJbmZvLnNwbGl0U291cmNlRGlycyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29kZVBhdGhzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGNvZGUgcGF0aHMgdGhlcmUncyBubyBuZWVkIHRvIHNldHVwIGEgcHJvZmlsZSBmaWxlIGFuZCByZWdpc3RlciB3aXRoCisgICAgICAgICAgICAvLyB0aGUgcnVudGltZSwKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCBhbiBleHRlbnNpb24gdG8gdGhlIGZpbGUgbmFtZSB0byBiZXR0ZXIgcmV2ZWFsIGl0cyBpbnRlbmRlZCB1c2UuCisgICAgICAgIC8vIEtlZXAgaW4gc3luYyB3aXRoIEJhY2tncm91bmREZXhPcHRTZXJ2aWNlLgorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvZmlsZUV4dGVuc2lvbiA9ICIucHJvZiI7CisgICAgICAgIGZpbmFsIEZpbGUgcHJvZmlsZUZpbGUgPSBuZXcgRmlsZShjYWNoZURpciwgbG9hZGVkQXBrLm1QYWNrYWdlTmFtZSArIHByb2ZpbGVFeHRlbnNpb24pOworICAgICAgICBpZiAoIXByb2ZpbGVGaWxlLmV4aXN0cygpKSB7CisgICAgICAgICAgICBGaWxlRGVzY3JpcHRvciBmZCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBwZXJtaXNzaW9ucyA9IDA2MDA7ICAvLyByZWFkLXdyaXRlIGZvciB1c2VyLgorICAgICAgICAgICAgICAgIGZkID0gT3Mub3Blbihwcm9maWxlRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSwgT3NDb25zdGFudHMuT19DUkVBVCwgcGVybWlzc2lvbnMpOworICAgICAgICAgICAgICAgIE9zLmZjaG1vZChmZCwgcGVybWlzc2lvbnMpOworICAgICAgICAgICAgICAgIE9zLmZjaG93bihmZCwgYXBwSW5mby51aWQsIGFwcEluZm8udWlkKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEVycm5vRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gY3JlYXRlIGppdCBwcm9maWxlIGZpbGUgIiArIHByb2ZpbGVGaWxlLCBlKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBPcy51bmxpbmsocHJvZmlsZUZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEVycm5vRXhjZXB0aW9uIHVubGlua0VycikgeworICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJVbmFibGUgdG8gdW5saW5rIGppdCBwcm9maWxlIGZpbGUgIiArIHByb2ZpbGVGaWxlLCB1bmxpbmtFcnIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KGZkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFZNUnVudGltZS5yZWdpc3RlckFwcEluZm8ocHJvZmlsZUZpbGUuZ2V0QWJzb2x1dGVQYXRoKCksIGFwcEluZm8uZGF0YURpciwKKyAgICAgICAgICAgICAgICBjb2RlUGF0aHMudG9BcnJheShuZXcgU3RyaW5nW2NvZGVQYXRocy5zaXplKCldKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUd28gcG9zc2libGUgaW5kaWNhdGlvbnMgdGhhdCB0aGlzIHBhY2thZ2UgY291bGQgYmUKKyAgICAgKiBzaGFyaW5nIGl0cyBydW50aW1lIHdpdGggb3RoZXIgcGFja2FnZXM6CisgICAgICoKKyAgICAgKiAxKSB0aGUgc2hhcmVkVXNlcklkIGF0dHJpYnV0ZSBpcyBzZXQgaW4gdGhlIG1hbmlmZXN0LAorICAgICAqICAgIGluZGljYXRpbmcgYSByZXF1ZXN0IHRvIHNoYXJlIGEgVk0gd2l0aCBvdGhlcgorICAgICAqICAgIHBhY2thZ2VzIHdpdGggdGhlIHNhbWUgc2hhcmVkVXNlcklkLgorICAgICAqCisgICAgICogMikgdGhlIGFwcGxpY2F0aW9uIGVsZW1lbnQgb2YgdGhlIG1hbmlmZXN0IGhhcyBhbgorICAgICAqICAgIGF0dHJpYnV0ZSBzcGVjaWZ5aW5nIGEgbm9uLWRlZmF1bHQgcHJvY2VzcyBuYW1lLAorICAgICAqICAgIGluZGljYXRpbmcgdGhlIGRlc2lyZSB0byBydW4gaW4gYW5vdGhlciBwYWNrYWdlcyBWTS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU2hhcmluZ1J1bnRpbWUoQXBwbGljYXRpb25JbmZvIGFwcEluZm8pIHsKKyAgICAgICAgSVBhY2thZ2VNYW5hZ2VyIHBtID0gZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgICAgICAgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvIHBpID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBpID0gcG0uZ2V0UGFja2FnZUluZm8oYXBwSW5mby5wYWNrYWdlTmFtZSwgMCwgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICBpZiAocGkgIT0gbnVsbCkgeworICAgICAgICAgICAgYm9vbGVhbiBzaGFyZWRVc2VySWRTZXQgPSAocGkuc2hhcmVkVXNlcklkICE9IG51bGwpOworICAgICAgICAgICAgYm9vbGVhbiBwcm9jZXNzTmFtZU5vdERlZmF1bHQgPSAocGkuYXBwbGljYXRpb25JbmZvICE9IG51bGwpICYmCisgICAgICAgICAgICAgICAgICAgICFhcHBJbmZvLnBhY2thZ2VOYW1lLmVxdWFscyhwaS5hcHBsaWNhdGlvbkluZm8ucHJvY2Vzc05hbWUpOworICAgICAgICAgICAgYm9vbGVhbiBzaGFyYWJsZSA9IHNoYXJlZFVzZXJJZFNldCB8fCBwcm9jZXNzTmFtZU5vdERlZmF1bHQ7CisgICAgICAgICAgICByZXR1cm4gc2hhcmFibGU7CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UgY291bGRuJ3QgZ2V0IGluZm9ybWF0aW9uIGZvciB0aGUgcGFja2FnZS4gQmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZQorICAgICAgICAvLyBpdCdzIHNoYXJpbmcgdGhlIHJ1bnRpbWUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVEZWZhdWx0RGVuc2l0eSgpIHsKICAgICAgICAgaWYgKG1DdXJEZWZhdWx0RGlzcGxheURwaSAhPSBDb25maWd1cmF0aW9uLkRFTlNJVFlfRFBJX1VOREVGSU5FRAogICAgICAgICAgICAgICAgICYmIG1DdXJEZWZhdWx0RGlzcGxheURwaSAhPSBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFVklDRQpAQCAtNDg2NiwxMiArNTAwMywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiZHVlIHRvIG1pc3NpbmcgY2FjaGUgZGlyZWN0b3J5Iik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFVzZSBjb2RlQ2FjaGVEaXIgdG8gc3RvcmUgZ2VuZXJhdGVkL2NvbXBpbGVkIGdyYXBoaWNzIGNvZGUKKyAgICAgICAgICAgIC8vIFVzZSBjb2RlQ2FjaGVEaXIgdG8gc3RvcmUgZ2VuZXJhdGVkL2NvbXBpbGVkIGdyYXBoaWNzIGNvZGUgYW5kIGppdCBwcm9maWxpbmcgZGF0YS4KICAgICAgICAgICAgIGZpbmFsIEZpbGUgY29kZUNhY2hlRGlyID0gYXBwQ29udGV4dC5nZXRDb2RlQ2FjaGVEaXIoKTsKICAgICAgICAgICAgIGlmIChjb2RlQ2FjaGVEaXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHNldHVwR3JhcGhpY3NTdXBwb3J0KGRhdGEuaW5mbywgY29kZUNhY2hlRGlyKTsKKyAgICAgICAgICAgICAgICBzZXR1cEppdFByb2ZpbGVTdXBwb3J0KGRhdGEuaW5mbywgY29kZUNhY2hlRGlyKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5hYmxlIHRvIHNldHVwR3JhcGhpY3NTdXBwb3J0IGR1ZSB0byBtaXNzaW5nIGNvZGUtY2FjaGUgZGlyZWN0b3J5Iik7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5hYmxlIHRvIHNldHVwR3JhcGhpY3NTdXBwb3J0IGFuZCBzZXR1cEppdFByb2ZpbGVTdXBwb3J0ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgImR1ZSB0byBtaXNzaW5nIGNvZGUtY2FjaGUgZGlyZWN0b3J5Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FjdGl2aXR5VHJhbnNpdGlvblN0YXRlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUcmFuc2l0aW9uU3RhdGUuamF2YQppbmRleCAzODU2MmRhLi5iZjBiZDc5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUcmFuc2l0aW9uU3RhdGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQWN0aXZpdHlUcmFuc2l0aW9uU3RhdGUuamF2YQpAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0RW50ZXIoKSB7Ci0gICAgICAgIGlmIChtRW50ZXJBY3Rpdml0eU9wdGlvbnMuaXNSZXR1cm5pbmcoKSkgeworICAgICAgICBpZiAobUVudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmlzUmV0dXJuaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChtRXhpdGluZ1RvVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUVudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLnZpZXdJbnN0YW5jZXNSZWFkeShtRXhpdGluZ0Zyb20sIG1FeGl0aW5nVG8sCiAgICAgICAgICAgICAgICAgICAgICAgICBtRXhpdGluZ1RvVmlldyk7CkBAIC0yMzgsNiArMjM4LDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkgewogICAgICAgICByZXN0b3JlRXhpdGVkVmlld3MoKTsKKyAgICAgICAgcmVzdG9yZVJlZW50ZXJpbmdWaWV3cygpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGNsZWFyKCkgewpAQCAtMjU4LDYgKzI1OSwxNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHJlc3RvcmVSZWVudGVyaW5nVmlld3MoKSB7CisgICAgICAgIGlmIChtRW50ZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3IgIT0gbnVsbCAmJiBtRW50ZXJUcmFuc2l0aW9uQ29vcmRpbmF0b3IuaXNSZXR1cm5pbmcoKSkgeworICAgICAgICAgICAgbUVudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmZvcmNlVmlld3NUb0FwcGVhcigpOworICAgICAgICAgICAgbUV4aXRpbmdGcm9tID0gbnVsbDsKKyAgICAgICAgICAgIG1FeGl0aW5nVG8gPSBudWxsOworICAgICAgICAgICAgbUV4aXRpbmdUb1ZpZXcgPSBudWxsOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIGJvb2xlYW4gc3RhcnRFeGl0QmFja1RyYW5zaXRpb24oZmluYWwgQWN0aXZpdHkgYWN0aXZpdHkpIHsKICAgICAgICAgaWYgKG1FbnRlcmluZ05hbWVzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkxvYWRlcnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvbkxvYWRlcnMuamF2YQppbmRleCA0MTNjMzY5Li43ZDBkMWI0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25Mb2FkZXJzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uTG9hZGVycy5qYXZhCkBAIC0yNyw3ICsyNyw4IEBACiAgICAgICAgIHJldHVybiBnQXBwbGljYXRpb25Mb2FkZXJzOwogICAgIH0KIAotICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcihTdHJpbmcgemlwLCBTdHJpbmcgbGliUGF0aCwgQ2xhc3NMb2FkZXIgcGFyZW50KQorICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcihTdHJpbmcgemlwLCBib29sZWFuIGlzQnVuZGxlZCwgU3RyaW5nIGxpYnJhcnlTZWFyY2hQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGlicmFyeVBlcm1pdHRlZFBhdGgsIENsYXNzTG9hZGVyIHBhcmVudCkKICAgICB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaXMgaXMgdGhlIHBhcmVudCB3ZSB1c2UgaWYgdGhleSBwYXNzICJudWxsIiBpbi4gIEluIHRoZW9yeQpAQCAtNTUsNyArNTYsOCBAQAogICAgIAogICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIsIHppcCk7CiAgICAgICAgICAgICAgICAgUGF0aENsYXNzTG9hZGVyIHBhdGhDbGFzc2xvYWRlciA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBQYXRoQ2xhc3NMb2FkZXIoemlwLCBsaWJQYXRoLCBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICBuZXcgUGF0aENsYXNzTG9hZGVyKHppcCwgaXNCdW5kbGVkLCBsaWJyYXJ5U2VhcmNoUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5UGVybWl0dGVkUGF0aCwgcGFyZW50KTsKICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUik7CiAKICAgICAgICAgICAgICAgICBtTG9hZGVycy5wdXQoemlwLCBwYXRoQ2xhc3Nsb2FkZXIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9BcHBsaWNhdGlvblBhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggNDYwZTY4Yy4uMGFmY2E5ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0FwcGxpY2F0aW9uUGFja2FnZU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQXBwbGljYXRpb25QYWNrYWdlTWFuYWdlci5qYXZhCkBAIC00Miw3ICs0Miw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkluc3RydW1lbnRhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLktleVNldDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSXRlbUluZm87CkBAIC0yMTQsMTAgKzIxMywxNSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkcyhTdHJpbmcgcGFja2FnZU5hbWUpCisgICAgcHVibGljIGludFtdIGdldFBhY2thZ2VHaWRzKFN0cmluZyBwYWNrYWdlTmFtZSkgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBnZXRQYWNrYWdlR2lkcyhwYWNrYWdlTmFtZSwgMCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludFtdIGdldFBhY2thZ2VHaWRzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnRbXSBnaWRzID0gbVBNLmdldFBhY2thZ2VHaWRzKHBhY2thZ2VOYW1lLCBtQ29udGV4dC5nZXRVc2VySWQoKSk7CisgICAgICAgICAgICBpbnRbXSBnaWRzID0gbVBNLmdldFBhY2thZ2VHaWRzKHBhY2thZ2VOYW1lLCBmbGFncywgbUNvbnRleHQuZ2V0VXNlcklkKCkpOwogICAgICAgICAgICAgaWYgKGdpZHMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBnaWRzOwogICAgICAgICAgICAgfQpAQCAtMjI5LDEwICsyMzMsMjAgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkKKyAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICByZXR1cm4gZ2V0UGFja2FnZVVpZEFzVXNlcihwYWNrYWdlTmFtZSwgZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWRBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGdldFBhY2thZ2VVaWRBc1VzZXIocGFja2FnZU5hbWUsIDAsIHVzZXJJZCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRQYWNrYWdlVWlkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgdWlkID0gbVBNLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgaW50IHVpZCA9IG1QTS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCBmbGFncywgdXNlcklkKTsKICAgICAgICAgICAgIGlmICh1aWQgPj0gMCkgewogICAgICAgICAgICAgICAgIHJldHVybiB1aWQ7CiAgICAgICAgICAgICB9CkBAIC0zMDAsOCArMzE0LDE0IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEFwcGxpY2F0aW9uSW5mbyBnZXRBcHBsaWNhdGlvbkluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MpCiAgICAgICAgICAgICB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGdldEFwcGxpY2F0aW9uSW5mb0FzVXNlcihwYWNrYWdlTmFtZSwgZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQXBwbGljYXRpb25JbmZvIGdldEFwcGxpY2F0aW9uSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkKKyAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICB0cnkgewotICAgICAgICAgICAgQXBwbGljYXRpb25JbmZvIGFpID0gbVBNLmdldEFwcGxpY2F0aW9uSW5mbyhwYWNrYWdlTmFtZSwgZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhaSA9IG1QTS5nZXRBcHBsaWNhdGlvbkluZm8ocGFja2FnZU5hbWUsIGZsYWdzLCB1c2VySWQpOwogICAgICAgICAgICAgaWYgKGFpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2suIENhbGxlcnMgbXVzdCB1c2UKICAgICAgICAgICAgICAgICAvLyBjcmVhdGVQYWNrYWdlQ29udGV4dChwYWNrYWdlTmFtZSkuZ2V0QXBwbGljYXRpb25JbmZvKCkgdG8KQEAgLTMzOCw3ICszNTgsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQWN0aXZpdHlJbmZvIGdldEFjdGl2aXR5SW5mbyhDb21wb25lbnROYW1lIGNsYXNzTmFtZSwgaW50IGZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CkBAIC01OTEsMTIgKzYxMCwxMiBAQAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBMaXN0PFBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlcyhpbnQgZmxhZ3MpIHsKLSAgICAgICAgcmV0dXJuIGdldEluc3RhbGxlZFBhY2thZ2VzKGZsYWdzLCBtQ29udGV4dC5nZXRVc2VySWQoKSk7CisgICAgICAgIHJldHVybiBnZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcihmbGFncywgbUNvbnRleHQuZ2V0VXNlcklkKCkpOwogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFBhY2thZ2VJbmZvPiBnZXRJbnN0YWxsZWRQYWNrYWdlcyhpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXNBc1VzZXIoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQYXJjZWxlZExpc3RTbGljZTxQYWNrYWdlSW5mbz4gc2xpY2UgPSBtUE0uZ2V0SW5zdGFsbGVkUGFja2FnZXMoZmxhZ3MsIHVzZXJJZCk7CiAgICAgICAgICAgICByZXR1cm4gc2xpY2UuZ2V0TGlzdCgpOwpAQCAtNzgwLDcgKzc5OSw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzQXNVc2VyKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1QTS5xdWVyeUludGVudFJlY2VpdmVycygKICAgICAgICAgICAgICAgICBpbnRlbnQsCkBAIC03OTQsNyArODEzLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKGludGVudCwgZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzQXNVc2VyKGludGVudCwgZmxhZ3MsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTExNTUsOCArMTE3NCwxMCBAQAogICAgICAgICB0aHJvdyBuZXcgTmFtZU5vdEZvdW5kRXhjZXB0aW9uKCJQYWNrYWdlICIgKyBhcHBQYWNrYWdlTmFtZSArICIgZG9lc24ndCBleGlzdCIpOwogICAgIH0KIAotICAgIGludCBtQ2FjaGVkU2FmZU1vZGUgPSAtMTsKLSAgICBAT3ZlcnJpZGUgcHVibGljIGJvb2xlYW4gaXNTYWZlTW9kZSgpIHsKKyAgICB2b2xhdGlsZSBpbnQgbUNhY2hlZFNhZmVNb2RlID0gLTE7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NhZmVNb2RlKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKG1DYWNoZWRTYWZlTW9kZSA8IDApIHsKICAgICAgICAgICAgICAgICBtQ2FjaGVkU2FmZU1vZGUgPSBtUE0uaXNTYWZlTW9kZSgpID8gMSA6IDA7CkBAIC0xNDIxLDcgKzE0NDIsNyBAQAogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxQYWNrYWdlKFVyaSBwYWNrYWdlVVJJLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSkgewogICAgICAgICBmaW5hbCBWZXJpZmljYXRpb25QYXJhbXMgdmVyaWZpY2F0aW9uUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhudWxsLCBudWxsLAotICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQsIG51bGwpOworICAgICAgICAgICAgICAgIG51bGwsIFZlcmlmaWNhdGlvblBhcmFtcy5OT19VSUQpOwogICAgICAgICBpbnN0YWxsQ29tbW9uKHBhY2thZ2VVUkksIG5ldyBMZWdhY3lQYWNrYWdlSW5zdGFsbE9ic2VydmVyKG9ic2VydmVyKSwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgaW5zdGFsbGVyUGFja2FnZU5hbWUsIHZlcmlmaWNhdGlvblBhcmFtcywgbnVsbCwgbUNvbnRleHQuZ2V0VXNlcklkKCkpOwogICAgIH0KQEAgLTE0MjksOSArMTQ1MCw5IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwKICAgICAgICAgICAgIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLCBVcmkgdmVyaWZpY2F0aW9uVVJJLAotICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgeworICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CiAgICAgICAgIGZpbmFsIFZlcmlmaWNhdGlvblBhcmFtcyB2ZXJpZmljYXRpb25QYXJhbXMgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKHZlcmlmaWNhdGlvblVSSSwgbnVsbCwKLSAgICAgICAgICAgICAgICBudWxsLCBWZXJpZmljYXRpb25QYXJhbXMuTk9fVUlELCBtYW5pZmVzdERpZ2VzdCk7CisgICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCk7CiAgICAgICAgIGluc3RhbGxDb21tb24ocGFja2FnZVVSSSwgbmV3IExlZ2FjeVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIob2JzZXJ2ZXIpLCBmbGFncywKICAgICAgICAgICAgICAgICBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgdmVyaWZpY2F0aW9uUGFyYW1zLCBlbmNyeXB0aW9uUGFyYW1zLCBtQ29udGV4dC5nZXRVc2VySWQoKSk7CiAgICAgfQpAQCAtMTQ1NSw3ICsxNDc2LDcgQEAKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZUFzVXNlcihVcmkgcGFja2FnZVVSSSwgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGZpbmFsIFZlcmlmaWNhdGlvblBhcmFtcyB2ZXJpZmljYXRpb25QYXJhbXMgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKG51bGwsIG51bGwsCi0gICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCwgbnVsbCk7CisgICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCk7CiAgICAgICAgIGluc3RhbGxDb21tb24ocGFja2FnZVVSSSwgb2JzZXJ2ZXIsIGZsYWdzLCBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgdmVyaWZpY2F0aW9uUGFyYW1zLCBudWxsLAogICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgfQpAQCAtMTQ2MywxMCArMTQ4NCwxMCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGluc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbihVcmkgcGFja2FnZVVSSSwKICAgICAgICAgICAgIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAotICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsCisgICAgICAgICAgICBVcmkgdmVyaWZpY2F0aW9uVVJJLAogICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CiAgICAgICAgIGZpbmFsIFZlcmlmaWNhdGlvblBhcmFtcyB2ZXJpZmljYXRpb25QYXJhbXMgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKHZlcmlmaWNhdGlvblVSSSwgbnVsbCwKLSAgICAgICAgICAgICAgICBudWxsLCBWZXJpZmljYXRpb25QYXJhbXMuTk9fVUlELCBtYW5pZmVzdERpZ2VzdCk7CisgICAgICAgICAgICAgICAgbnVsbCwgVmVyaWZpY2F0aW9uUGFyYW1zLk5PX1VJRCk7CiAgICAgICAgIGluc3RhbGxDb21tb24ocGFja2FnZVVSSSwgb2JzZXJ2ZXIsIGZsYWdzLCBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgdmVyaWZpY2F0aW9uUGFyYW1zLAogICAgICAgICAgICAgICAgIGVuY3J5cHRpb25QYXJhbXMsIG1Db250ZXh0LmdldFVzZXJJZCgpKTsKICAgICB9CkBAIC0xNTQ3LDcgKzE1NjgsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1QTS5nZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMocGFja2FnZU5hbWUsIHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0xNTU3LDcgKzE1NzgsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBzdGF0dXMsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiB1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXNBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3RhdHVzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVBNLnVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1cyhwYWNrYWdlTmFtZSwgc3RhdHVzLCB1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMTU4Nyw3ICsxNjA4LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVBNLmdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUodXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTE1OTcsNyArMTYxOCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1QTS5zZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKHBhY2thZ2VOYW1lLCB1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMTg1OCw3ICsxODc5LDE3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUsCisgICAgcHVibGljIGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gc3VzcGVuZGVkLCBpbnQgdXNlcklkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbVBNLnNldFBhY2thZ2VTdXNwZW5kZWRBc1VzZXIocGFja2FnZU5hbWUsIHN1c3BlbmRlZCwgdXNlcklkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4hCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGdldFBhY2thZ2VTaXplSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlLAogICAgICAgICAgICAgSVBhY2thZ2VTdGF0c09ic2VydmVyIG9ic2VydmVyKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtUE0uZ2V0UGFja2FnZVNpemVJbmZvKHBhY2thZ2VOYW1lLCB1c2VySGFuZGxlLCBvYnNlcnZlcik7CkBAIC0xOTA1LDcgKzE5MzYsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGFkZFByZWZlcnJlZEFjdGl2aXR5KEludGVudEZpbHRlciBmaWx0ZXIsIGludCBtYXRjaCwKKyAgICBwdWJsaWMgdm9pZCBhZGRQcmVmZXJyZWRBY3Rpdml0eUFzVXNlcihJbnRlbnRGaWx0ZXIgZmlsdGVyLCBpbnQgbWF0Y2gsCiAgICAgICAgICAgICBDb21wb25lbnROYW1lW10gc2V0LCBDb21wb25lbnROYW1lIGFjdGl2aXR5LCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtUE0uYWRkUHJlZmVycmVkQWN0aXZpdHkoZmlsdGVyLCBtYXRjaCwgc2V0LCBhY3Rpdml0eSwgdXNlcklkKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9CYWNrU3RhY2tSZWNvcmQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9CYWNrU3RhY2tSZWNvcmQuamF2YQppbmRleCA5ODRhMTg2Li5hMTQ3Y2M4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQmFja1N0YWNrUmVjb3JkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0JhY2tTdGFja1JlY29yZC5qYXZhCkBAIC03MTksNyArNzE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnQgZiA9IG9wLmZyYWdtZW50OwogICAgICAgICAgICAgICAgICAgICBpbnQgY29udGFpbmVySWQgPSBmLm1Db250YWluZXJJZDsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1NYW5hZ2VyLm1BZGRlZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1NYW5hZ2VyLm1BZGRlZC5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1NYW5hZ2VyLm1BZGRlZC5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50IG9sZCA9IG1NYW5hZ2VyLm1BZGRlZC5nZXQoaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZyYWdtZW50TWFuYWdlckltcGwuREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYoVEFHLApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0Jyb2FkY2FzdE9wdGlvbnMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ccm9hZGNhc3RPcHRpb25zLmphdmEKaW5kZXggMWYzNzhkYS4uMTc1Yjk3OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0Jyb2FkY2FzdE9wdGlvbnMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQnJvYWRjYXN0T3B0aW9ucy5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGFuZHJvaWQuYXBwOwogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogCiAvKioKQEAgLTI4LDE1ICsyOSwyOCBAQAogQFN5c3RlbUFwaQogcHVibGljIGNsYXNzIEJyb2FkY2FzdE9wdGlvbnMgewogICAgIHByaXZhdGUgbG9uZyBtVGVtcG9yYXJ5QXBwV2hpdGVsaXN0RHVyYXRpb247CisgICAgcHJpdmF0ZSBpbnQgbU1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCA9IDA7CisgICAgcHJpdmF0ZSBpbnQgbU1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCA9IEJ1aWxkLlZFUlNJT05fQ09ERVMuQ1VSX0RFVkVMT1BNRU5UOwogCiAgICAgLyoqCiAgICAgICogSG93IGxvbmcgdG8gdGVtcG9yYXJpbHkgcHV0IGFuIGFwcCBvbiB0aGUgcG93ZXIgd2hpdGVsaXN0IHdoZW4gZXhlY3V0aW5nIHRoaXMgYnJvYWRjYXN0CiAgICAgICogdG8gaXQuCi0gICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVEVNUE9SQVJZX0FQUF9XSElURUxJU1RfRFVSQVRJT04KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9URU1QT1JBUllfQVBQX1dISVRFTElTVF9EVVJBVElPTgogICAgICAgICAgICAgPSAiYW5kcm9pZDpicm9hZGNhc3QudGVtcG9yYXJ5QXBwV2hpdGVsaXN0RHVyYXRpb24iOwogCisgICAgLyoqCisgICAgICogQ29ycmVzcG9uZHMgdG8ge0BsaW5rICNzZXRNaW5NYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWx9LgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX01JTl9NQU5JRkVTVF9SRUNFSVZFUl9BUElfTEVWRUwKKyAgICAgICAgICAgID0gImFuZHJvaWQ6YnJvYWRjYXN0Lm1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCI7CisKKyAgICAvKioKKyAgICAgKiBDb3JyZXNwb25kcyB0byB7QGxpbmsgI3NldE1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbH0uCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTUFYX01BTklGRVNUX1JFQ0VJVkVSX0FQSV9MRVZFTAorICAgICAgICAgICAgPSAiYW5kcm9pZDpicm9hZGNhc3QubWF4TWFuaWZlc3RSZWNlaXZlckFwaUxldmVsIjsKKwogICAgIHB1YmxpYyBzdGF0aWMgQnJvYWRjYXN0T3B0aW9ucyBtYWtlQmFzaWMoKSB7CiAgICAgICAgIEJyb2FkY2FzdE9wdGlvbnMgb3B0cyA9IG5ldyBCcm9hZGNhc3RPcHRpb25zKCk7CiAgICAgICAgIHJldHVybiBvcHRzOwpAQCAtNDgsNiArNjIsOSBAQAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBCcm9hZGNhc3RPcHRpb25zKEJ1bmRsZSBvcHRzKSB7CiAgICAgICAgIG1UZW1wb3JhcnlBcHBXaGl0ZWxpc3REdXJhdGlvbiA9IG9wdHMuZ2V0TG9uZyhLRVlfVEVNUE9SQVJZX0FQUF9XSElURUxJU1RfRFVSQVRJT04pOworICAgICAgICBtTWluTWFuaWZlc3RSZWNlaXZlckFwaUxldmVsID0gb3B0cy5nZXRJbnQoS0VZX01JTl9NQU5JRkVTVF9SRUNFSVZFUl9BUElfTEVWRUwsIDApOworICAgICAgICBtTWF4TWFuaWZlc3RSZWNlaXZlckFwaUxldmVsID0gb3B0cy5nZXRJbnQoS0VZX01BWF9NQU5JRkVTVF9SRUNFSVZFUl9BUElfTEVWRUwsCisgICAgICAgICAgICAgICAgQnVpbGQuVkVSU0lPTl9DT0RFUy5DVVJfREVWRUxPUE1FTlQpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNjgsMTAgKzg1LDQ2IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0IHRoZSBtaW5pbXVtIHRhcmdldCBBUEkgbGV2ZWwgb2YgcmVjZWl2ZXJzIG9mIHRoZSBicm9hZGNhc3QuICBJZiBhbiBhcHBsaWNhdGlvbgorICAgICAqIGlzIHRhcmdldGluZyBhbiBBUEkgbGV2ZWwgbGVzcyB0aGFuIHRoaXMsIHRoZSBicm9hZGNhc3Qgd2lsbCBub3QgYmUgZGVsaXZlcmVkIHRvCisgICAgICogdGhlbS4gIFRoaXMgb25seSBhcHBsaWVzIHRvIHJlY2VpdmVycyBkZWNsYXJlZCBpbiB0aGUgYXBwJ3MgQW5kcm9pZE1hbmlmZXN0LnhtbC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbChpbnQgYXBpTGV2ZWwpIHsKKyAgICAgICAgbU1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCA9IGFwaUxldmVsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB7QGxpbmsgI3NldE1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbH0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCgpIHsKKyAgICAgICAgcmV0dXJuIG1NaW5NYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWw7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBtYXhpbXVtIHRhcmdldCBBUEkgbGV2ZWwgb2YgcmVjZWl2ZXJzIG9mIHRoZSBicm9hZGNhc3QuICBJZiBhbiBhcHBsaWNhdGlvbgorICAgICAqIGlzIHRhcmdldGluZyBhbiBBUEkgbGV2ZWwgZ3JlYXRlciB0aGFuIHRoaXMsIHRoZSBicm9hZGNhc3Qgd2lsbCBub3QgYmUgZGVsaXZlcmVkIHRvCisgICAgICogdGhlbS4gIFRoaXMgb25seSBhcHBsaWVzIHRvIHJlY2VpdmVycyBkZWNsYXJlZCBpbiB0aGUgYXBwJ3MgQW5kcm9pZE1hbmlmZXN0LnhtbC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbChpbnQgYXBpTGV2ZWwpIHsKKyAgICAgICAgbU1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCA9IGFwaUxldmVsOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB7QGxpbmsgI3NldE1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbH0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCgpIHsKKyAgICAgICAgcmV0dXJuIG1NYXhNYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWw7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY3JlYXRlZCBvcHRpb25zIGFzIGEgQnVuZGxlLCB3aGljaCBjYW4gYmUgcGFzc2VkIHRvCiAgICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5Db250ZXh0I3NlbmRCcm9hZGNhc3QoYW5kcm9pZC5jb250ZW50LkludGVudCkKICAgICAgKiBDb250ZXh0LnNlbmRCcm9hZGNhc3QoSW50ZW50KX0gYW5kIHJlbGF0ZWQgbWV0aG9kcy4KLSAgICAgKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIEJ1bmRsZSBpcyBzdGlsbCBvd25lZCBieSB0aGUgQWN0aXZpdHlPcHRpb25zCisgICAgICogTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBCdW5kbGUgaXMgc3RpbGwgb3duZWQgYnkgdGhlIEJyb2FkY2FzdE9wdGlvbnMKICAgICAgKiBvYmplY3Q7IHlvdSBtdXN0IG5vdCBtb2RpZnkgaXQsIGJ1dCBjYW4gc3VwcGx5IGl0IHRvIHRoZSBzZW5kQnJvYWRjYXN0CiAgICAgICogbWV0aG9kcyB0aGF0IHRha2UgYW4gb3B0aW9ucyBCdW5kbGUuCiAgICAgICovCkBAIC04MCw2ICsxMzMsMTIgQEAKICAgICAgICAgaWYgKG1UZW1wb3JhcnlBcHBXaGl0ZWxpc3REdXJhdGlvbiA+IDApIHsKICAgICAgICAgICAgIGIucHV0TG9uZyhLRVlfVEVNUE9SQVJZX0FQUF9XSElURUxJU1RfRFVSQVRJT04sIG1UZW1wb3JhcnlBcHBXaGl0ZWxpc3REdXJhdGlvbik7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG1NaW5NYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWwgIT0gMCkgeworICAgICAgICAgICAgYi5wdXRJbnQoS0VZX01JTl9NQU5JRkVTVF9SRUNFSVZFUl9BUElfTEVWRUwsIG1NaW5NYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWwpOworICAgICAgICB9CisgICAgICAgIGlmIChtTWF4TWFuaWZlc3RSZWNlaXZlckFwaUxldmVsICE9IEJ1aWxkLlZFUlNJT05fQ09ERVMuQ1VSX0RFVkVMT1BNRU5UKSB7CisgICAgICAgICAgICBiLnB1dEludChLRVlfTUFYX01BTklGRVNUX1JFQ0VJVkVSX0FQSV9MRVZFTCwgbU1heE1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGIuaXNFbXB0eSgpID8gbnVsbCA6IGI7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0NvbnRleHRJbXBsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQ29udGV4dEltcGwuamF2YQppbmRleCAzNmU5OGY5Li5mYWIzNzQwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQ29udGV4dEltcGwuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvQ29udGV4dEltcGwuamF2YQpAQCAtNjEsNiArNjEsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5JTW91bnRTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZFJ1bnRpbWVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CkBAIC0xMDkyLDcgKzEwOTMsMjMgQEAKICAgICAgICAgICAgIGludGVudC5wcmVwYXJlVG9MZWF2ZVByb2Nlc3MoKTsKICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuYnJvYWRjYXN0SW50ZW50KAogICAgICAgICAgICAgICAgIG1NYWluVGhyZWFkLmdldEFwcGxpY2F0aW9uVGhyZWFkKCksIGludGVudCwgcmVzb2x2ZWRUeXBlLCBudWxsLAotICAgICAgICAgICAgICAgIEFjdGl2aXR5LlJFU1VMVF9PSywgbnVsbCwgbnVsbCwgbnVsbCwgQXBwT3BzTWFuYWdlci5PUF9OT05FLCBudWxsLCBmYWxzZSwgdHJ1ZSwgdXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIEFjdGl2aXR5LlJFU1VMVF9PSywgbnVsbCwgbnVsbCwgbnVsbCwgQXBwT3BzTWFuYWdlci5PUF9OT05FLCBudWxsLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgdXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWx1cmUgZnJvbSBzeXN0ZW0iLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUgPSBpbnRlbnQucmVzb2x2ZVR5cGVJZk5lZWRlZChnZXRDb250ZW50UmVzb2x2ZXIoKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnRlbnQucHJlcGFyZVRvTGVhdmVQcm9jZXNzKCk7CisgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmJyb2FkY2FzdEludGVudCgKKyAgICAgICAgICAgICAgICBtTWFpblRocmVhZC5nZXRBcHBsaWNhdGlvblRocmVhZCgpLCBpbnRlbnQsIHJlc29sdmVkVHlwZSwgbnVsbCwKKyAgICAgICAgICAgICAgICBBY3Rpdml0eS5SRVNVTFRfT0ssIG51bGwsIG51bGwsIG51bGwsIEFwcE9wc01hbmFnZXIuT1BfTk9ORSwgb3B0aW9ucywgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgdXNlci5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWx1cmUgZnJvbSBzeXN0ZW0iLCBlKTsKICAgICAgICAgfQpAQCAtMTc0NCwxNyArMTc2MSwxNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGZpbmFsIGludCBmbGFncyA9IChtRmxhZ3MgJiB+Q29udGV4dC5DT05URVhUX1NUT1JBR0VfQ1JFREVOVElBTF9FTkNSWVBURUQpCi0gICAgICAgICAgICAgICAgfCBDb250ZXh0LkNPTlRFWFRfU1RPUkFHRV9ERVZJQ0VfRU5DUllQVEVEOworICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCkgeworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSAobUZsYWdzICYgfkNvbnRleHQuQ09OVEVYVF9DUkVERU5USUFMX0VOQ1JZUFRFRF9TVE9SQUdFKQorICAgICAgICAgICAgICAgIHwgQ29udGV4dC5DT05URVhUX0RFVklDRV9FTkNSWVBURURfU1RPUkFHRTsKICAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0SW1wbCh0aGlzLCBtTWFpblRocmVhZCwgbVBhY2thZ2VJbmZvLCBtQWN0aXZpdHlUb2tlbiwKICAgICAgICAgICAgICAgICBtVXNlciwgZmxhZ3MsIG1EaXNwbGF5LCBudWxsLCBEaXNwbGF5LklOVkFMSURfRElTUExBWSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIGZpbmFsIGludCBmbGFncyA9IChtRmxhZ3MgJiB+Q29udGV4dC5DT05URVhUX1NUT1JBR0VfREVWSUNFX0VOQ1JZUFRFRCkKLSAgICAgICAgICAgICAgICB8IENvbnRleHQuQ09OVEVYVF9TVE9SQUdFX0NSRURFTlRJQUxfRU5DUllQVEVEOworICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpIHsKKyAgICAgICAgZmluYWwgaW50IGZsYWdzID0gKG1GbGFncyAmIH5Db250ZXh0LkNPTlRFWFRfREVWSUNFX0VOQ1JZUFRFRF9TVE9SQUdFKQorICAgICAgICAgICAgICAgIHwgQ29udGV4dC5DT05URVhUX0NSRURFTlRJQUxfRU5DUllQVEVEX1NUT1JBR0U7CiAgICAgICAgIHJldHVybiBuZXcgQ29udGV4dEltcGwodGhpcywgbU1haW5UaHJlYWQsIG1QYWNrYWdlSW5mbywgbUFjdGl2aXR5VG9rZW4sCiAgICAgICAgICAgICAgICAgbVVzZXIsIGZsYWdzLCBtRGlzcGxheSwgbnVsbCwgRGlzcGxheS5JTlZBTElEX0RJU1BMQVkpOwogICAgIH0KQEAgLTE3NjUsMTMgKzE3ODIsMTMgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpIHsKLSAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBDb250ZXh0LkNPTlRFWFRfU1RPUkFHRV9ERVZJQ0VfRU5DUllQVEVEKSAhPSAwOworICAgIHB1YmxpYyBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkU3RvcmFnZSgpIHsKKyAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBDb250ZXh0LkNPTlRFWFRfREVWSUNFX0VOQ1JZUFRFRF9TVE9SQUdFKSAhPSAwOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpIHsKLSAgICAgICAgcmV0dXJuIChtRmxhZ3MgJiBDb250ZXh0LkNPTlRFWFRfU1RPUkFHRV9DUkVERU5USUFMX0VOQ1JZUFRFRCkgIT0gMDsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlKCkgeworICAgICAgICByZXR1cm4gKG1GbGFncyAmIENvbnRleHQuQ09OVEVYVF9DUkVERU5USUFMX0VOQ1JZUFRFRF9TVE9SQUdFKSAhPSAwOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTc4MSwxMyArMTc5OCwxMiBAQAogCiAgICAgcHJpdmF0ZSBGaWxlIGdldERhdGFEaXJGaWxlKCkgewogICAgICAgICBpZiAobVBhY2thZ2VJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKSkgeworICAgICAgICAgICAgaWYgKGlzQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2UoKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBtUGFja2FnZUluZm8uZ2V0Q3JlZGVudGlhbEVuY3J5cHRlZERhdGFEaXJGaWxlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzRGV2aWNlRW5jcnlwdGVkKCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVBhY2thZ2VJbmZvLmdldERldmljZUVuY3J5cHRlZERhdGFEaXJGaWxlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3JhZ2UgbG9jYXRpb24gaXMgbmVpdGhlciBjcmVkZW50aWFsIG5vciBkZXZpY2UgZW5jcnlwdGVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYWNrYWdlSW5mby5nZXREYXRhRGlyRmlsZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3Qgc3VwcG9ydGVkIGluIHN5c3RlbSBjb250ZXh0Iik7CkBAIC0xODQwLDE1ICsxODU2LDEzIEBACiAKICAgICAgICAgLy8gSWYgY3JlYXRvciBkaWRuJ3Qgc3BlY2lmeSB3aGljaCBzdG9yYWdlIHRvIHVzZSwgdXNlIHRoZSBkZWZhdWx0CiAgICAgICAgIC8vIGxvY2F0aW9uIGZvciBhcHBsaWNhdGlvbi4KLSAgICAgICAgaWYgKChmbGFncyAmIENvbnRleHQuQ09OVEVYVF9TVE9SQUdFX01BU0spID09IDApIHsKKyAgICAgICAgaWYgKChmbGFncyAmIChDb250ZXh0LkNPTlRFWFRfQ1JFREVOVElBTF9FTkNSWVBURURfU1RPUkFHRQorICAgICAgICAgICAgICAgIHwgQ29udGV4dC5DT05URVhUX0RFVklDRV9FTkNSWVBURURfU1RPUkFHRSkpID09IDApIHsKICAgICAgICAgICAgIGZpbmFsIEZpbGUgZGF0YURpciA9IHBhY2thZ2VJbmZvLmdldERhdGFEaXJGaWxlKCk7CiAgICAgICAgICAgICBpZiAoT2JqZWN0cy5lcXVhbHMoZGF0YURpciwgcGFja2FnZUluZm8uZ2V0Q3JlZGVudGlhbEVuY3J5cHRlZERhdGFEaXJGaWxlKCkpKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gQ29udGV4dC5DT05URVhUX1NUT1JBR0VfQ1JFREVOVElBTF9FTkNSWVBURUQ7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gQ29udGV4dC5DT05URVhUX0NSRURFTlRJQUxfRU5DUllQVEVEX1NUT1JBR0U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKE9iamVjdHMuZXF1YWxzKGRhdGFEaXIsIHBhY2thZ2VJbmZvLmdldERldmljZUVuY3J5cHRlZERhdGFEaXJGaWxlKCkpKSB7Ci0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gQ29udGV4dC5DT05URVhUX1NUT1JBR0VfREVWSUNFX0VOQ1JZUFRFRDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU3RvcmFnZSBsb2NhdGlvbiAiICsgZGF0YURpcgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGRvZXNuJ3QgbWF0Y2ggZWl0aGVyIGNyZWRlbnRpYWwgb3IgZGV2aWNlIGVuY3J5cHRlZCBzdG9yYWdlIik7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gQ29udGV4dC5DT05URVhUX0RFVklDRV9FTkNSWVBURURfU1RPUkFHRTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RhdGVQaWNrZXJEaWFsb2cuamF2YQppbmRleCAzZmJiZGZmLi44ZDdmMzQ3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGF0ZVBpY2tlckRpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9EYXRlUGlja2VyRGlhbG9nLmphdmEKQEAgLTE2LDYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLmFwcDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3R5bGVSZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcjsKQEAgLTM1LDk1ICszOCwxMjYgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBkaWFsb2cgY29udGFpbmluZyBhbiB7QGxpbmsgYW5kcm9pZC53aWRnZXQuRGF0ZVBpY2tlcn0uCi0gKgotICogPHA+U2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+UGlja2VyczwvYT4KLSAqIGd1aWRlLjwvcD4KKyAqIDxwPgorICogU2VlIHRoZSA8YSBocmVmPSJ7QGRvY1Jvb3R9Z3VpZGUvdG9waWNzL3VpL2NvbnRyb2xzL3BpY2tlcnMuaHRtbCI+UGlja2VyczwvYT4KKyAqIGd1aWRlLgogICovCiBwdWJsaWMgY2xhc3MgRGF0ZVBpY2tlckRpYWxvZyBleHRlbmRzIEFsZXJ0RGlhbG9nIGltcGxlbWVudHMgT25DbGlja0xpc3RlbmVyLAogICAgICAgICBPbkRhdGVDaGFuZ2VkTGlzdGVuZXIgewotCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFlFQVIgPSAieWVhciI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PTlRIID0gIm1vbnRoIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFZID0gImRheSI7CiAKICAgICBwcml2YXRlIGZpbmFsIERhdGVQaWNrZXIgbURhdGVQaWNrZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPbkRhdGVTZXRMaXN0ZW5lciBtRGF0ZVNldExpc3RlbmVyOwogICAgIHByaXZhdGUgZmluYWwgQ2FsZW5kYXIgbUNhbGVuZGFyOwogCisgICAgcHJpdmF0ZSBPbkRhdGVTZXRMaXN0ZW5lciBtRGF0ZVNldExpc3RlbmVyOworCiAgICAgcHJpdmF0ZSBib29sZWFuIG1UaXRsZU5lZWRzVXBkYXRlID0gdHJ1ZTsKIAogICAgIC8qKgotICAgICAqIFRoZSBjYWxsYmFjayB1c2VkIHRvIGluZGljYXRlIHRoZSB1c2VyIGlzIGRvbmUgZmlsbGluZyBpbiB0aGUgZGF0ZS4KKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGUgcGlja2VyIGRpYWxvZyBmb3IgdGhlIGN1cnJlbnQgZGF0ZSB1c2luZyB0aGUgcGFyZW50CisgICAgICogY29udGV4dCdzIGRlZmF1bHQgZGF0ZSBwaWNrZXIgZGlhbG9nIHRoZW1lLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgdGhlIHBhcmVudCBjb250ZXh0CiAgICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBPbkRhdGVTZXRMaXN0ZW5lciB7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxpc3RlbmVyLgotICAgICAgICAgKiBAcGFyYW0geWVhciBUaGUgeWVhciB0aGF0IHdhcyBzZXQuCi0gICAgICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgbW9udGggdGhhdCB3YXMgc2V0ICgwLTExKSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAgKiAgd2l0aCB7QGxpbmsgamF2YS51dGlsLkNhbGVuZGFyfS4KLSAgICAgICAgICogQHBhcmFtIGRheU9mTW9udGggVGhlIGRheSBvZiB0aGUgbW9udGggdGhhdCB3YXMgc2V0LgotICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBvbkRhdGVTZXQoRGF0ZVBpY2tlciB2aWV3LCBpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCk7CisgICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgMCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdGhlIGRpYWxvZyBpcyB0byBydW4gaW4uCi0gICAgICogQHBhcmFtIGNhbGxCYWNrIEhvdyB0aGUgcGFyZW50IGlzIG5vdGlmaWVkIHRoYXQgdGhlIGRhdGUgaXMgc2V0LgotICAgICAqIEBwYXJhbSB5ZWFyIFRoZSBpbml0aWFsIHllYXIgb2YgdGhlIGRpYWxvZy4KLSAgICAgKiBAcGFyYW0gbW9udGhPZlllYXIgVGhlIGluaXRpYWwgbW9udGggb2YgdGhlIGRpYWxvZy4KLSAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBUaGUgaW5pdGlhbCBkYXkgb2YgdGhlIGRpYWxvZy4KKyAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGUgcGlja2VyIGRpYWxvZyBmb3IgdGhlIGN1cnJlbnQgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IHRoZSBwYXJlbnQgY29udGV4dAorICAgICAqIEBwYXJhbSB0aGVtZVJlc0lkIHRoZSByZXNvdXJjZSBJRCBvZiB0aGUgdGhlbWUgYWdhaW5zdCB3aGljaCB0byBpbmZsYXRlCisgICAgICogICAgICAgICAgICAgICAgICAgdGhpcyBkaWFsb2csIG9yIHtAY29kZSAwfSB0byB1c2UgdGhlIHBhcmVudAorICAgICAqICAgICAgICAgICAgICAgICAgIHtAY29kZSBjb250ZXh0fSdzIGRlZmF1bHQgYWxlcnQgZGlhbG9nIHRoZW1lCiAgICAgICovCi0gICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQ29udGV4dCBjb250ZXh0LAotICAgICAgICAgICAgT25EYXRlU2V0TGlzdGVuZXIgY2FsbEJhY2ssCi0gICAgICAgICAgICBpbnQgeWVhciwKLSAgICAgICAgICAgIGludCBtb250aE9mWWVhciwKLSAgICAgICAgICAgIGludCBkYXlPZk1vbnRoKSB7Ci0gICAgICAgIHRoaXMoY29udGV4dCwgMCwgY2FsbEJhY2ssIHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IHJlc29sdmVEaWFsb2dUaGVtZShDb250ZXh0IGNvbnRleHQsIGludCByZXNpZCkgewotICAgICAgICBpZiAocmVzaWQgPT0gMCkgewotICAgICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSA9IG5ldyBUeXBlZFZhbHVlKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShSLmF0dHIuZGF0ZVBpY2tlckRpYWxvZ1RoZW1lLCBvdXRWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gb3V0VmFsdWUucmVzb3VyY2VJZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiByZXNpZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRoZSBkaWFsb2cgaXMgdG8gcnVuIGluLgotICAgICAqIEBwYXJhbSB0aGVtZSB0aGUgdGhlbWUgdG8gYXBwbHkgdG8gdGhpcyBkaWFsb2cKLSAgICAgKiBAcGFyYW0gbGlzdGVuZXIgSG93IHRoZSBwYXJlbnQgaXMgbm90aWZpZWQgdGhhdCB0aGUgZGF0ZSBpcyBzZXQuCi0gICAgICogQHBhcmFtIHllYXIgVGhlIGluaXRpYWwgeWVhciBvZiB0aGUgZGlhbG9nLgotICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgaW5pdGlhbCBtb250aCBvZiB0aGUgZGlhbG9nLgotICAgICAqIEBwYXJhbSBkYXlPZk1vbnRoIFRoZSBpbml0aWFsIGRheSBvZiB0aGUgZGlhbG9nLgotICAgICAqLwotICAgIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKENvbnRleHQgY29udGV4dCwgaW50IHRoZW1lLCBPbkRhdGVTZXRMaXN0ZW5lciBsaXN0ZW5lciwgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGhPZlllYXIsIGludCBkYXlPZk1vbnRoKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIHJlc29sdmVEaWFsb2dUaGVtZShjb250ZXh0LCB0aGVtZSkpOwotCi0gICAgICAgIG1EYXRlU2V0TGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgbUNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICBwdWJsaWMgRGF0ZVBpY2tlckRpYWxvZyhDb250ZXh0IGNvbnRleHQsIEBTdHlsZVJlcyBpbnQgdGhlbWVSZXNJZCkgeworICAgICAgICBzdXBlcihjb250ZXh0LCByZXNvbHZlRGlhbG9nVGhlbWUoY29udGV4dCwgdGhlbWVSZXNJZCkpOwogCiAgICAgICAgIGZpbmFsIENvbnRleHQgdGhlbWVDb250ZXh0ID0gZ2V0Q29udGV4dCgpOwogICAgICAgICBmaW5hbCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20odGhlbWVDb250ZXh0KTsKICAgICAgICAgZmluYWwgVmlldyB2aWV3ID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5kYXRlX3BpY2tlcl9kaWFsb2csIG51bGwpOwogICAgICAgICBzZXRWaWV3KHZpZXcpOworCiAgICAgICAgIHNldEJ1dHRvbihCVVRUT05fUE9TSVRJVkUsIHRoZW1lQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcub2spLCB0aGlzKTsKICAgICAgICAgc2V0QnV0dG9uKEJVVFRPTl9ORUdBVElWRSwgdGhlbWVDb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5jYW5jZWwpLCB0aGlzKTsKICAgICAgICAgc2V0QnV0dG9uUGFuZWxMYXlvdXRIaW50KExBWU9VVF9ISU5UX1NJREUpOwogCisgICAgICAgIG1DYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7CisKKyAgICAgICAgZmluYWwgaW50IHllYXIgPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOworICAgICAgICBmaW5hbCBpbnQgbW9udGhPZlllYXIgPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKTsKKyAgICAgICAgZmluYWwgaW50IGRheU9mTW9udGggPSBtQ2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7CiAgICAgICAgIG1EYXRlUGlja2VyID0gKERhdGVQaWNrZXIpIHZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZGF0ZVBpY2tlcik7CiAgICAgICAgIG1EYXRlUGlja2VyLmluaXQoeWVhciwgbW9udGhPZlllYXIsIGRheU9mTW9udGgsIHRoaXMpOwogICAgICAgICBtRGF0ZVBpY2tlci5zZXRWYWxpZGF0aW9uQ2FsbGJhY2sobVZhbGlkYXRpb25DYWxsYmFjayk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIG5ldyBkYXRlIHBpY2tlciBkaWFsb2cgZm9yIHRoZSBzcGVjaWZpZWQgZGF0ZSB1c2luZyB0aGUgcGFyZW50CisgICAgICogY29udGV4dCdzIGRlZmF1bHQgZGF0ZSBwaWNrZXIgZGlhbG9nIHRoZW1lLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgdGhlIHBhcmVudCBjb250ZXh0CisgICAgICogQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBjYWxsIHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgZGF0ZQorICAgICAqIEBwYXJhbSB5ZWFyIHRoZSBpbml0aWFsbHkgc2VsZWN0ZWQgeWVhcgorICAgICAqIEBwYXJhbSBtb250aCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIG1vbnRoICgwLTExIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyI01PTlRIfSkKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIGRheSBvZiBtb250aCAoMS0zMSwgZGVwZW5kaW5nCisgICAgICogICAgICAgICAgICAgICAgICAgb24gbW9udGgpCisgICAgICovCisgICAgcHVibGljIERhdGVQaWNrZXJEaWFsb2coQE51bGxhYmxlIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE9uRGF0ZVNldExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCAwLCBsaXN0ZW5lciwgeWVhciwgbW9udGgsIGRheU9mTW9udGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBuZXcgZGF0ZSBwaWNrZXIgZGlhbG9nIGZvciB0aGUgc3BlY2lmaWVkIGRhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCB0aGUgcGFyZW50IGNvbnRleHQKKyAgICAgKiBAcGFyYW0gdGhlbWVSZXNJZCB0aGUgcmVzb3VyY2UgSUQgb2YgdGhlIHRoZW1lIGFnYWluc3Qgd2hpY2ggdG8gaW5mbGF0ZQorICAgICAqICAgICAgICAgICAgICAgICAgIHRoaXMgZGlhbG9nLCBvciB7QGNvZGUgMH0gdG8gdXNlIHRoZSBwYXJlbnQKKyAgICAgKiAgICAgICAgICAgICAgICAgICB7QGNvZGUgY29udGV4dH0ncyBkZWZhdWx0IGFsZXJ0IGRpYWxvZyB0aGVtZQorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gY2FsbCB3aGVuIHRoZSB1c2VyIHNldHMgdGhlIGRhdGUKKyAgICAgKiBAcGFyYW0geWVhciB0aGUgaW5pdGlhbGx5IHNlbGVjdGVkIHllYXIKKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIGluaXRpYWxseSBzZWxlY3RlZCBtb250aCAoMC0xMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICogICAgICAgICAgICAgIHtAbGluayBDYWxlbmRhciNNT05USH0pCisgICAgICogQHBhcmFtIGRheU9mTW9udGggdGhlIGluaXRpYWxseSBzZWxlY3RlZCBkYXkgb2YgbW9udGggKDEtMzEsIGRlcGVuZGluZworICAgICAqICAgICAgICAgICAgICAgICAgIG9uIG1vbnRoKQorICAgICAqLworICAgIHB1YmxpYyBEYXRlUGlja2VyRGlhbG9nKEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQFN0eWxlUmVzIGludCB0aGVtZVJlc0lkLAorICAgICAgICAgICAgQE51bGxhYmxlIE9uRGF0ZVNldExpc3RlbmVyIGxpc3RlbmVyLCBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5T2ZNb250aCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIHRoZW1lUmVzSWQpOworCisgICAgICAgIG1EYXRlU2V0TGlzdGVuZXIgPSBsaXN0ZW5lcjsKKworICAgICAgICBtRGF0ZVBpY2tlci51cGRhdGVEYXRlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IHJlc29sdmVEaWFsb2dUaGVtZShATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBTdHlsZVJlcyBpbnQgdGhlbWVSZXNJZCkgeworICAgICAgICBpZiAodGhlbWVSZXNJZCA9PSAwKSB7CisgICAgICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIG91dFZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKKyAgICAgICAgICAgIGNvbnRleHQuZ2V0VGhlbWUoKS5yZXNvbHZlQXR0cmlidXRlKFIuYXR0ci5kYXRlUGlja2VyRGlhbG9nVGhlbWUsIG91dFZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBvdXRWYWx1ZS5yZXNvdXJjZUlkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHRoZW1lUmVzSWQ7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKERhdGVQaWNrZXIgdmlldywgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkgewotICAgICAgICBtRGF0ZVBpY2tlci5pbml0KHllYXIsIG1vbnRoLCBkYXksIHRoaXMpOwotICAgICAgICB1cGRhdGVUaXRsZSh5ZWFyLCBtb250aCwgZGF5KTsKKyAgICBwdWJsaWMgdm9pZCBvbkRhdGVDaGFuZ2VkKERhdGVQaWNrZXIgdmlldywgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheU9mTW9udGgpIHsKKyAgICAgICAgbURhdGVQaWNrZXIuaW5pdCh5ZWFyLCBtb250aCwgZGF5T2ZNb250aCwgdGhpcyk7CisgICAgICAgIHVwZGF0ZVRpdGxlKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBsaXN0ZW5lciB0byBjYWxsIHdoZW4gdGhlIHVzZXIgc2V0cyB0aGUgZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gY2FsbCB3aGVuIHRoZSB1c2VyIHNldHMgdGhlIGRhdGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRPbkRhdGVTZXRMaXN0ZW5lcihATnVsbGFibGUgT25EYXRlU2V0TGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgbURhdGVTZXRMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQ1LDEwICsxNzksMTEgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB7QGxpbmsgRGF0ZVBpY2tlcn0gY29udGFpbmVkIGluIHRoaXMgZGlhbG9nLgorICAgICAqIFJldHVybnMgdGhlIHtAbGluayBEYXRlUGlja2VyfSBjb250YWluZWQgaW4gdGhpcyBkaWFsb2cuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBjYWxlbmRhciB2aWV3LgorICAgICAqIEByZXR1cm4gdGhlIGRhdGUgcGlja2VyCiAgICAgICovCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgRGF0ZVBpY2tlciBnZXREYXRlUGlja2VyKCkgewogICAgICAgICByZXR1cm4gbURhdGVQaWNrZXI7CiAgICAgfQpAQCAtMTU2LDIwICsxOTEsMjIgQEAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGRhdGUuCiAgICAgICoKLSAgICAgKiBAcGFyYW0geWVhciBUaGUgZGF0ZSB5ZWFyLgotICAgICAqIEBwYXJhbSBtb250aE9mWWVhciBUaGUgZGF0ZSBtb250aC4KLSAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCBUaGUgZGF0ZSBkYXkgb2YgbW9udGguCisgICAgICogQHBhcmFtIHllYXIgdGhlIHllYXIKKyAgICAgKiBAcGFyYW0gbW9udGggdGhlIG1vbnRoICgwLTExIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgICAgKiAgICAgICAgICAgICAge0BsaW5rIENhbGVuZGFyI01PTlRIfSkKKyAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aGUgZGF5IG9mIG1vbnRoICgxLTMxLCBkZXBlbmRpbmcgb24gbW9udGgpCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgdXBkYXRlRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoT2ZZZWFyLCBpbnQgZGF5T2ZNb250aCkgewotICAgICAgICBtRGF0ZVBpY2tlci51cGRhdGVEYXRlKHllYXIsIG1vbnRoT2ZZZWFyLCBkYXlPZk1vbnRoKTsKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CisgICAgICAgIG1EYXRlUGlja2VyLnVwZGF0ZURhdGUoeWVhciwgbW9udGgsIGRheU9mTW9udGgpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUaXRsZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSB7CisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRpdGxlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CiAgICAgICAgIGlmICghbURhdGVQaWNrZXIuZ2V0Q2FsZW5kYXJWaWV3U2hvd24oKSkgewogICAgICAgICAgICAgbUNhbGVuZGFyLnNldChDYWxlbmRhci5ZRUFSLCB5ZWFyKTsKICAgICAgICAgICAgIG1DYWxlbmRhci5zZXQoQ2FsZW5kYXIuTU9OVEgsIG1vbnRoKTsKLSAgICAgICAgICAgIG1DYWxlbmRhci5zZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXkpOwotICAgICAgICAgICAgU3RyaW5nIHRpdGxlID0gRGF0ZVV0aWxzLmZvcm1hdERhdGVUaW1lKG1Db250ZXh0LAorICAgICAgICAgICAgbUNhbGVuZGFyLnNldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgsIGRheU9mTW9udGgpOworCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUobUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgIG1DYWxlbmRhci5nZXRUaW1lSW5NaWxsaXMoKSwKICAgICAgICAgICAgICAgICAgICAgRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUKICAgICAgICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfV0VFS0RBWQpAQCAtMTc3LDEyICsyMTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgfCBEYXRlVXRpbHMuRk9STUFUX0FCQlJFVl9NT05USAogICAgICAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfQUJCUkVWX1dFRUtEQVkpOwogICAgICAgICAgICAgc2V0VGl0bGUodGl0bGUpOworCiAgICAgICAgICAgICBtVGl0bGVOZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobVRpdGxlTmVlZHNVcGRhdGUpIHsKLSAgICAgICAgICAgICAgICBtVGl0bGVOZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHNldFRpdGxlKFIuc3RyaW5nLmRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobVRpdGxlTmVlZHNVcGRhdGUpIHsKKyAgICAgICAgICAgIHNldFRpdGxlKFIuc3RyaW5nLmRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSk7CisKKyAgICAgICAgICAgIG1UaXRsZU5lZWRzVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIxMyw0ICsyNTAsMTkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH07CisKKyAgICAvKioKKyAgICAgKiBUaGUgbGlzdGVuZXIgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdXNlciBoYXMgZmluaXNoZWQgc2VsZWN0aW5nIGEgZGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50ZXJmYWNlIE9uRGF0ZVNldExpc3RlbmVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIEBwYXJhbSB2aWV3IHRoZSBwaWNrZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaWFsb2cKKyAgICAgICAgICogQHBhcmFtIHllYXIgdGhlIHNlbGVjdGVkIHllYXIKKyAgICAgICAgICogQHBhcmFtIG1vbnRoIHRoZSBzZWxlY3RlZCBtb250aCAoMC0xMSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICAgICAqICAgICAgICAgICAgICB7QGxpbmsgQ2FsZW5kYXIjTU9OVEh9KQorICAgICAgICAgKiBAcGFyYW0gZGF5T2ZNb250aCB0aCBzZWxlY3RlZCBkYXkgb2YgdGhlIG1vbnRoICgxLTMxLCBkZXBlbmRpbmcgb24KKyAgICAgICAgICogICAgICAgICAgICAgICAgICAgbW9udGgpCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uRGF0ZVNldChEYXRlUGlja2VyIHZpZXcsIGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGlhbG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRGlhbG9nLmphdmEKaW5kZXggNmU4ZTJjNC4uNzk0NjFiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0RpYWxvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9EaWFsb2cuamF2YQpAQCAtMjEsOSArMjEsOCBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JZFJlczsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTGF5b3V0UmVzOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdHJpbmdSZXM7Ci0KIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN0cmluZ1JlczsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3R5bGVSZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CkBAIC00NCwxMSArNDMsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dFRoZW1lV3JhcHBlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ3JlYXRlQ29udGV4dE1lbnVMaXN0ZW5lcjsKQEAgLTYwLDggKzU5LDEwIEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5XaW5kb3dEZWNvckFjdGlvbkJhcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogQmFzZSBjbGFzcyBmb3IgRGlhbG9ncy4KQEAgLTEwODEsNiArMTA4MiwxMyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIHtAaW5oZXJpdERvY30KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVLZXlib2FyZFNob3J0Y3V0cyhMaXN0PEtleWJvYXJkU2hvcnRjdXRHcm91cD4gZGF0YSwgTWVudSBtZW51KSB7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgYWN0aXZpdHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGlhbG9nLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgYWN0aXZpdHkuCiAgICAgICovCiAgICAgcHJpdmF0ZSBDb21wb25lbnROYW1lIGdldEFzc29jaWF0ZWRBY3Rpdml0eSgpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Eb3dubG9hZE1hbmFnZXIuamF2YQppbmRleCBmYjBlNzliLi5lZDRiYjI4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRG93bmxvYWRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0Rvd25sb2FkTWFuYWdlci5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrUG9saWN5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb3dubG9hZHM7CkBAIC0xMDUsOCArMTA2LDE3IEBACiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ09MVU1OX0xPQ0FMX1VSSSA9ICJsb2NhbF91cmkiOwogCiAgICAgLyoqCi0gICAgICogVGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHdoZXJlIHRoZSBkb3dubG9hZCBpcyBzdG9yZWQuCisgICAgICogUGF0aCB0byB0aGUgZG93bmxvYWRlZCBmaWxlIG9uIGRpc2suCisgICAgICogPHA+CisgICAgICogTm90ZSB0aGF0IGFwcHMgbWF5IG5vdCBoYXZlIGZpbGVzeXN0ZW0gcGVybWlzc2lvbnMgdG8gZGlyZWN0bHkgYWNjZXNzCisgICAgICogdGhpcyBwYXRoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBvcGVuIHRoaXMgcGF0aCBkaXJlY3RseSwgYXBwcyBzaG91bGQgdXNlCisgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuRmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfSB0byBnYWluIGFjY2Vzcy4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIGFwcHMgc2hvdWxkIHRyYW5zaXRpb24gdG8gdXNpbmcKKyAgICAgKiAgICAgICAgICAgICB7QGxpbmsgQ29udGVudFJlc29sdmVyI29wZW5GaWxlRGVzY3JpcHRvcihVcmksIFN0cmluZyl9CisgICAgICogICAgICAgICAgICAgaW5zdGVhZC4KICAgICAgKi8KKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIENPTFVNTl9MT0NBTF9GSUxFTkFNRSA9ICJsb2NhbF9maWxlbmFtZSI7CiAKICAgICAvKioKQEAgLTkwOCwxNiArOTE4LDIyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIENvbnRlbnRSZXNvbHZlciBtUmVzb2x2ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgQ29udGVudFJlc29sdmVyIG1SZXNvbHZlcjsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7CisKICAgICBwcml2YXRlIFVyaSBtQmFzZVVyaSA9IERvd25sb2Fkcy5JbXBsLkNPTlRFTlRfVVJJOworICAgIHByaXZhdGUgYm9vbGVhbiBtQWNjZXNzRmlsZW5hbWU7CiAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBEb3dubG9hZE1hbmFnZXIoQ29udGVudFJlc29sdmVyIHJlc29sdmVyLCBTdHJpbmcgcGFja2FnZU5hbWUpIHsKLSAgICAgICAgbVJlc29sdmVyID0gcmVzb2x2ZXI7Ci0gICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOworICAgIHB1YmxpYyBEb3dubG9hZE1hbmFnZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIG1SZXNvbHZlciA9IGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgIG1QYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKKworICAgICAgICAvLyBDYWxsZXJzIGNhbiBhY2Nlc3MgZmlsZW5hbWUgY29sdW1ucyB3aGVuIHRhcmdldGluZyBvbGQgcGxhdGZvcm0KKyAgICAgICAgLy8gdmVyc2lvbnM7IG90aGVyd2lzZSB3ZSB0aHJvdyB0ZWxsaW5nIHRoZW0gaXQncyBkZXByZWNhdGVkLgorICAgICAgICBtQWNjZXNzRmlsZW5hbWUgPSBjb250ZXh0LmdldEFwcGxpY2F0aW9uSW5mbygpLnRhcmdldFNka1ZlcnNpb24gPCBCdWlsZC5WRVJTSU9OX0NPREVTLk47CiAgICAgfQogCiAgICAgLyoqCkBAIC05MzMsNiArOTQ5LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyB2b2lkIHNldEFjY2Vzc0ZpbGVuYW1lKGJvb2xlYW4gYWNjZXNzRmlsZW5hbWUpIHsKKyAgICAgICAgbUFjY2Vzc0ZpbGVuYW1lID0gYWNjZXNzRmlsZW5hbWU7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogRW5xdWV1ZSBhIG5ldyBkb3dubG9hZC4gIFRoZSBkb3dubG9hZCB3aWxsIHN0YXJ0IGF1dG9tYXRpY2FsbHkgb25jZSB0aGUgZG93bmxvYWQgbWFuYWdlciBpcwogICAgICAqIHJlYWR5IHRvIGV4ZWN1dGUgaXQgYW5kIGNvbm5lY3Rpdml0eSBpcyBhdmFpbGFibGUuCkBAIC05OTcsNyArMTAxOCw3IEBACiAgICAgICAgIGlmICh1bmRlcmx5aW5nQ3Vyc29yID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yVHJhbnNsYXRvcih1bmRlcmx5aW5nQ3Vyc29yLCBtQmFzZVVyaSk7CisgICAgICAgIHJldHVybiBuZXcgQ3Vyc29yVHJhbnNsYXRvcih1bmRlcmx5aW5nQ3Vyc29yLCBtQmFzZVVyaSwgbUFjY2Vzc0ZpbGVuYW1lKTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyNjUsMTEgKzEyODYsMTMgQEAKICAgICAgKiB1bmRlcmx5aW5nIGRhdGEuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ3Vyc29yVHJhbnNsYXRvciBleHRlbmRzIEN1cnNvcldyYXBwZXIgewotICAgICAgICBwcml2YXRlIFVyaSBtQmFzZVVyaTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbUJhc2VVcmk7CisgICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtQWNjZXNzRmlsZW5hbWU7CiAKLSAgICAgICAgcHVibGljIEN1cnNvclRyYW5zbGF0b3IoQ3Vyc29yIGN1cnNvciwgVXJpIGJhc2VVcmkpIHsKKyAgICAgICAgcHVibGljIEN1cnNvclRyYW5zbGF0b3IoQ3Vyc29yIGN1cnNvciwgVXJpIGJhc2VVcmksIGJvb2xlYW4gYWNjZXNzRmlsZW5hbWUpIHsKICAgICAgICAgICAgIHN1cGVyKGN1cnNvcik7CiAgICAgICAgICAgICBtQmFzZVVyaSA9IGJhc2VVcmk7CisgICAgICAgICAgICBtQWNjZXNzRmlsZW5hbWUgPSBhY2Nlc3NGaWxlbmFtZTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTI5MCw4ICsxMzEzLDE5IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGludCBjb2x1bW5JbmRleCkgewotICAgICAgICAgICAgcmV0dXJuIChnZXRDb2x1bW5OYW1lKGNvbHVtbkluZGV4KS5lcXVhbHMoQ09MVU1OX0xPQ0FMX1VSSSkpID8gZ2V0TG9jYWxVcmkoKSA6Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyLmdldFN0cmluZyhjb2x1bW5JbmRleCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29sdW1uTmFtZSA9IGdldENvbHVtbk5hbWUoY29sdW1uSW5kZXgpOworICAgICAgICAgICAgc3dpdGNoIChjb2x1bW5OYW1lKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fTE9DQUxfVVJJOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TG9jYWxVcmkoKTsKKyAgICAgICAgICAgICAgICBjYXNlIENPTFVNTl9MT0NBTF9GSUxFTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtQWNjZXNzRmlsZW5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDT0xVTU5fTE9DQUxfRklMRU5BTUUgaXMgZGVwcmVjYXRlZDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHVzZSBDb250ZW50UmVzb2x2ZXIub3BlbkZpbGVEZXNjcmlwdG9yKCkgaW5zdGVhZCIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFN0cmluZyhjb2x1bW5JbmRleCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRMb2NhbFVyaSgpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9FbnRlclRyYW5zaXRpb25Db29yZGluYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKaW5kZXggMjBmMzQ5NS4uZmU5Y2M4MCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0VudGVyVHJhbnNpdGlvbkNvb3JkaW5hdG9yLmphdmEKQEAgLTMwLDcgKzMwLDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXBPdmVybGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3VHJlZU9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3VHJlZU9ic2VydmVyLk9uUHJlRHJhd0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIApAQCAtNTYsNiArNTgsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBtQXJlVmlld3NSZWFkeTsKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzVmlld3NUcmFuc2l0aW9uU3RhcnRlZDsKICAgICBwcml2YXRlIFRyYW5zaXRpb24gbUVudGVyVmlld3NUcmFuc2l0aW9uOworICAgIHByaXZhdGUgT25QcmVEcmF3TGlzdGVuZXIgbVZpZXdzUmVhZHlMaXN0ZW5lcjsKIAogICAgIHB1YmxpYyBFbnRlclRyYW5zaXRpb25Db29yZGluYXRvcihBY3Rpdml0eSBhY3Rpdml0eSwgUmVzdWx0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCiAgICAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBzaGFyZWRFbGVtZW50TmFtZXMsIGJvb2xlYW4gaXNSZXR1cm5pbmcpIHsKQEAgLTEzNywxNSArMTQwLDE2IEBACiAgICAgICAgICAgICAgICAgKHNoYXJlZEVsZW1lbnRzLmlzRW1wdHkoKSB8fCAhc2hhcmVkRWxlbWVudHMudmFsdWVBdCgwKS5pc0xheW91dFJlcXVlc3RlZCgpKSkpIHsKICAgICAgICAgICAgIHZpZXdzUmVhZHkoc2hhcmVkRWxlbWVudHMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVjb3IuZ2V0Vmlld1RyZWVPYnNlcnZlcigpCi0gICAgICAgICAgICAgICAgICAgIC5hZGRPblByZURyYXdMaXN0ZW5lcihuZXcgVmlld1RyZWVPYnNlcnZlci5PblByZURyYXdMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVEcmF3KCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29yLmdldFZpZXdUcmVlT2JzZXJ2ZXIoKS5yZW1vdmVPblByZURyYXdMaXN0ZW5lcih0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3c1JlYWR5KHNoYXJlZEVsZW1lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBtVmlld3NSZWFkeUxpc3RlbmVyID0gbmV3IFZpZXdUcmVlT2JzZXJ2ZXIuT25QcmVEcmF3TGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVEcmF3KCkgeworICAgICAgICAgICAgICAgICAgICBtVmlld3NSZWFkeUxpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgZGVjb3IuZ2V0Vmlld1RyZWVPYnNlcnZlcigpLnJlbW92ZU9uUHJlRHJhd0xpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgICAgICAgICB2aWV3c1JlYWR5KHNoYXJlZEVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGRlY29yLmdldFZpZXdUcmVlT2JzZXJ2ZXIoKS5hZGRPblByZURyYXdMaXN0ZW5lcihtVmlld3NSZWFkeUxpc3RlbmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQwLDYgKzI0NCw1MCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogVGhpcyBpcyBjYWxsZWQgb25SZXN1bWUuIElmIGFuIEFjdGl2aXR5IGlzIHJlc3VtaW5nIGFuZCB0aGUgdHJhbnNpdGlvbnMKKyAgICAgKiBoYXZlbid0IHN0YXJ0ZWQgeWV0LCBmb3JjZSB0aGUgdmlld3MgdG8gYXBwZWFyLiBUaGlzIGlzIGxpa2VseSB0byBiZQorICAgICAqIGNhdXNlZCBieSB0aGUgdG9wIEFjdGl2aXR5IGZpbmlzaGluZyBiZWZvcmUgdGhlIHRyYW5zaXRpb25zIHN0YXJ0ZWQuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBjYW4gZmluaXNoIGFueSB0cmFuc2l0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQsIGJ1dCB3ZQorICAgICAqIHNob3VsZCBjYW5jZWwgYW55IHBlbmRpbmcgdHJhbnNpdGlvbiBhbmQganVzdCBicmluZyB0aG9zZSBWaWV3cyB2aXNpYmxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGZvcmNlVmlld3NUb0FwcGVhcigpIHsKKyAgICAgICAgaWYgKCFtSXNSZXR1cm5pbmcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1Jc1JlYWR5Rm9yVHJhbnNpdGlvbikgeworICAgICAgICAgICAgbUlzUmVhZHlGb3JUcmFuc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIGZpbmFsIFZpZXdHcm91cCBkZWNvciA9IGdldERlY29yKCk7CisgICAgICAgICAgICBpZiAoZGVjb3IgIT0gbnVsbCAmJiBtVmlld3NSZWFkeUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkZWNvci5nZXRWaWV3VHJlZU9ic2VydmVyKCkucmVtb3ZlT25QcmVEcmF3TGlzdGVuZXIobVZpZXdzUmVhZHlMaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgbVZpZXdzUmVhZHlMaXN0ZW5lciA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaG93Vmlld3MobVRyYW5zaXRpb25pbmdWaWV3cywgdHJ1ZSk7CisgICAgICAgICAgICBtU2hhcmVkRWxlbWVudHMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1BbGxTaGFyZWRFbGVtZW50TmFtZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1UcmFuc2l0aW9uaW5nVmlld3MuY2xlYXIoKTsKKyAgICAgICAgICAgIG1Jc1JlYWR5Rm9yVHJhbnNpdGlvbiA9IHRydWU7CisgICAgICAgICAgICB2aWV3c1RyYW5zaXRpb25Db21wbGV0ZSgpOworICAgICAgICAgICAgc2hhcmVkRWxlbWVudFRyYW5zaXRpb25Db21wbGV0ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFtU2hhcmVkRWxlbWVudFRyYW5zaXRpb25TdGFydGVkKSB7CisgICAgICAgICAgICAgICAgbW92ZVNoYXJlZEVsZW1lbnRzRnJvbU92ZXJsYXkoKTsKKyAgICAgICAgICAgICAgICBtU2hhcmVkRWxlbWVudFRyYW5zaXRpb25TdGFydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzaG93Vmlld3MobVNoYXJlZEVsZW1lbnRzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBtU2hhcmVkRWxlbWVudHMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBzaGFyZWRFbGVtZW50VHJhbnNpdGlvbkNvbXBsZXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1Jc1ZpZXdzVHJhbnNpdGlvblN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICBtSXNWaWV3c1RyYW5zaXRpb25TdGFydGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzaG93Vmlld3MobVRyYW5zaXRpb25pbmdWaWV3cywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgbVRyYW5zaXRpb25pbmdWaWV3cy5jbGVhcigpOworICAgICAgICAgICAgICAgIHZpZXdzVHJhbnNpdGlvbkNvbXBsZXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYW5jZWxQZW5kaW5nVHJhbnNpdGlvbnMoKTsKKyAgICAgICAgfQorICAgICAgICBtQXJlVmlld3NSZWFkeSA9IHRydWU7CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbCgpIHsKICAgICAgICAgaWYgKCFtSXNDYW5jZWxlZCkgewogICAgICAgICAgICAgbUlzQ2FuY2VsZWQgPSB0cnVlOwpAQCAtNTAwLDYgKzU0OCwxMCBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uVHJhbnNpdGlvbnNDb21wbGV0ZSgpIHsKICAgICAgICAgbW92ZVNoYXJlZEVsZW1lbnRzRnJvbU92ZXJsYXkoKTsKKyAgICAgICAgZmluYWwgVmlld0dyb3VwIGRlY29yVmlldyA9IGdldERlY29yKCk7CisgICAgICAgIGlmIChkZWNvclZpZXcgIT0gbnVsbCkgeworICAgICAgICAgICAgZGVjb3JWaWV3LnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfV0lORE9XX0NPTlRFTlRfQ0hBTkdFRCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2hhcmVkRWxlbWVudFRyYW5zaXRpb25TdGFydGVkKCkgewpAQCAtNjU0LDUgKzcwNiw0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnQuamF2YQppbmRleCBhNzNhZDA5Li5lMTYzYjFjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnQuamF2YQpAQCAtNDA5LDkgKzQwOSw2IEBACiAgICAgLy8gSWYgc2V0IHRoaXMgZnJhZ21lbnQgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGl0cyBhY3Rpdml0eS4KICAgICBib29sZWFuIG1SZW1vdmluZzsKIAotICAgIC8vIFRydWUgaWYgdGhlIGZyYWdtZW50IGlzIGluIHRoZSByZXN1bWVkIHN0YXRlLgotICAgIGJvb2xlYW4gbVJlc3VtZWQ7Ci0KICAgICAvLyBTZXQgdG8gdHJ1ZSBpZiB0aGlzIGZyYWdtZW50IHdhcyBpbnN0YW50aWF0ZWQgZnJvbSBhIGxheW91dCBmaWxlLgogICAgIGJvb2xlYW4gbUZyb21MYXlvdXQ7CiAKQEAgLTkyOCw3ICs5MjUsNyBAQAogICAgICAqIGZvciB0aGUgZHVyYXRpb24gb2Yge0BsaW5rICNvblJlc3VtZSgpfSBhbmQge0BsaW5rICNvblBhdXNlKCl9IGFzIHdlbGwuCiAgICAgICovCiAgICAgZmluYWwgcHVibGljIGJvb2xlYW4gaXNSZXN1bWVkKCkgewotICAgICAgICByZXR1cm4gbVJlc3VtZWQ7CisgICAgICAgIHJldHVybiBtU3RhdGUgPj0gUkVTVU1FRDsKICAgICB9CiAKICAgICAvKioKQEAgLTE2MzAsNyArMTYyNyw2IEBACiAgICAgICAgIG1XaG8gPSBudWxsOwogICAgICAgICBtQWRkZWQgPSBmYWxzZTsKICAgICAgICAgbVJlbW92aW5nID0gZmFsc2U7Ci0gICAgICAgIG1SZXN1bWVkID0gZmFsc2U7CiAgICAgICAgIG1Gcm9tTGF5b3V0ID0gZmFsc2U7CiAgICAgICAgIG1JbkxheW91dCA9IGZhbHNlOwogICAgICAgICBtUmVzdG9yZWQgPSBmYWxzZTsKQEAgLTIxMTMsNyArMjEwOSw2IEBACiAgICAgICAgIHdyaXRlci5wcmludCgiIG1CYWNrU3RhY2tOZXN0aW5nPSIpOyB3cml0ZXIucHJpbnRsbihtQmFja1N0YWNrTmVzdGluZyk7CiAgICAgICAgIHdyaXRlci5wcmludChwcmVmaXgpOyB3cml0ZXIucHJpbnQoIm1BZGRlZD0iKTsgd3JpdGVyLnByaW50KG1BZGRlZCk7CiAgICAgICAgIHdyaXRlci5wcmludCgiIG1SZW1vdmluZz0iKTsgd3JpdGVyLnByaW50KG1SZW1vdmluZyk7Ci0gICAgICAgIHdyaXRlci5wcmludCgiIG1SZXN1bWVkPSIpOyB3cml0ZXIucHJpbnQobVJlc3VtZWQpOwogICAgICAgICB3cml0ZXIucHJpbnQoIiBtRnJvbUxheW91dD0iKTsgd3JpdGVyLnByaW50KG1Gcm9tTGF5b3V0KTsKICAgICAgICAgd3JpdGVyLnByaW50KCIgbUluTGF5b3V0PSIpOyB3cml0ZXIucHJpbnRsbihtSW5MYXlvdXQpOwogICAgICAgICB3cml0ZXIucHJpbnQocHJlZml4KTsgd3JpdGVyLnByaW50KCJtSGlkZGVuPSIpOyB3cml0ZXIucHJpbnQobUhpZGRlbik7CkBAIC0yMjA4LDYgKzIyMDMsNyBAQAogICAgICAgICBpZiAobUNoaWxkRnJhZ21lbnRNYW5hZ2VyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1DaGlsZEZyYWdtZW50TWFuYWdlci5ub3RlU3RhdGVOb3RTYXZlZCgpOwogICAgICAgICB9CisgICAgICAgIG1TdGF0ZSA9IENSRUFURUQ7CiAgICAgICAgIG1DYWxsZWQgPSBmYWxzZTsKICAgICAgICAgb25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKICAgICAgICAgaWYgKCFtQ2FsbGVkKSB7CkBAIC0yMjM4LDYgKzIyMzQsNyBAQAogICAgICAgICBpZiAobUNoaWxkRnJhZ21lbnRNYW5hZ2VyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1DaGlsZEZyYWdtZW50TWFuYWdlci5ub3RlU3RhdGVOb3RTYXZlZCgpOwogICAgICAgICB9CisgICAgICAgIG1TdGF0ZSA9IEFDVElWSVRZX0NSRUFURUQ7CiAgICAgICAgIG1DYWxsZWQgPSBmYWxzZTsKICAgICAgICAgb25BY3Rpdml0eUNyZWF0ZWQoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKICAgICAgICAgaWYgKCFtQ2FsbGVkKSB7CkBAIC0yMjU0LDYgKzIyNTEsNyBAQAogICAgICAgICAgICAgbUNoaWxkRnJhZ21lbnRNYW5hZ2VyLm5vdGVTdGF0ZU5vdFNhdmVkKCk7CiAgICAgICAgICAgICBtQ2hpbGRGcmFnbWVudE1hbmFnZXIuZXhlY1BlbmRpbmdBY3Rpb25zKCk7CiAgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gU1RBUlRFRDsKICAgICAgICAgbUNhbGxlZCA9IGZhbHNlOwogICAgICAgICBvblN0YXJ0KCk7CiAgICAgICAgIGlmICghbUNhbGxlZCkgewpAQCAtMjI3Myw2ICsyMjcxLDcgQEAKICAgICAgICAgICAgIG1DaGlsZEZyYWdtZW50TWFuYWdlci5ub3RlU3RhdGVOb3RTYXZlZCgpOwogICAgICAgICAgICAgbUNoaWxkRnJhZ21lbnRNYW5hZ2VyLmV4ZWNQZW5kaW5nQWN0aW9ucygpOwogICAgICAgICB9CisgICAgICAgIG1TdGF0ZSA9IFJFU1VNRUQ7CiAgICAgICAgIG1DYWxsZWQgPSBmYWxzZTsKICAgICAgICAgb25SZXN1bWUoKTsKICAgICAgICAgaWYgKCFtQ2FsbGVkKSB7CkBAIC0yMzg5LDYgKzIzODgsNyBAQAogICAgICAgICBpZiAobUNoaWxkRnJhZ21lbnRNYW5hZ2VyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1DaGlsZEZyYWdtZW50TWFuYWdlci5kaXNwYXRjaFBhdXNlKCk7CiAgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gU1RBUlRFRDsKICAgICAgICAgbUNhbGxlZCA9IGZhbHNlOwogICAgICAgICBvblBhdXNlKCk7CiAgICAgICAgIGlmICghbUNhbGxlZCkgewpAQCAtMjQwMSw2ICsyNDAxLDcgQEAKICAgICAgICAgaWYgKG1DaGlsZEZyYWdtZW50TWFuYWdlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQ2hpbGRGcmFnbWVudE1hbmFnZXIuZGlzcGF0Y2hTdG9wKCk7CiAgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gU1RPUFBFRDsKICAgICAgICAgbUNhbGxlZCA9IGZhbHNlOwogICAgICAgICBvblN0b3AoKTsKICAgICAgICAgaWYgKCFtQ2FsbGVkKSB7CkBAIC0yNDI4LDYgKzI0MjksNyBAQAogICAgICAgICBpZiAobUNoaWxkRnJhZ21lbnRNYW5hZ2VyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1DaGlsZEZyYWdtZW50TWFuYWdlci5kaXNwYXRjaERlc3Ryb3lWaWV3KCk7CiAgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gQ1JFQVRFRDsKICAgICAgICAgbUNhbGxlZCA9IGZhbHNlOwogICAgICAgICBvbkRlc3Ryb3lWaWV3KCk7CiAgICAgICAgIGlmICghbUNhbGxlZCkgewpAQCAtMjQ0Myw2ICsyNDQ1LDcgQEAKICAgICAgICAgaWYgKG1DaGlsZEZyYWdtZW50TWFuYWdlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQ2hpbGRGcmFnbWVudE1hbmFnZXIuZGlzcGF0Y2hEZXN0cm95KCk7CiAgICAgICAgIH0KKyAgICAgICAgbVN0YXRlID0gSU5JVElBTElaSU5HOwogICAgICAgICBtQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgIG9uRGVzdHJveSgpOwogICAgICAgICBpZiAoIW1DYWxsZWQpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9GcmFnbWVudE1hbmFnZXIuamF2YQppbmRleCA2OTZjY2RiLi44NGFlMDlkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvRnJhZ21lbnRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0ZyYWdtZW50TWFuYWdlci5qYXZhCkBAIC0xMDA0LDcgKzEwMDQsNiBAQAogICAgICAgICAgICAgICAgIGNhc2UgRnJhZ21lbnQuU1RBUlRFRDoKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YXRlID4gRnJhZ21lbnQuU1RBUlRFRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJtb3ZldG8gUkVTVU1FRDogIiArIGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZi5tUmVzdW1lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBmLnBlcmZvcm1SZXN1bWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCByaWQgb2YgdGhpcyBpbiBjYXNlIHdlIHNhdmVkIGl0IGFuZCBuZXZlciBuZWVkZWQgaXQuCiAgICAgICAgICAgICAgICAgICAgICAgICBmLm1TYXZlZEZyYWdtZW50U3RhdGUgPSBudWxsOwpAQCAtMTAxNyw3ICsxMDE2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YXRlIDwgRnJhZ21lbnQuUkVTVU1FRCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJtb3ZlZnJvbSBSRVNVTUVEOiAiICsgZik7CiAgICAgICAgICAgICAgICAgICAgICAgICBmLnBlcmZvcm1QYXVzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZi5tUmVzdW1lZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBGcmFnbWVudC5TVEFSVEVEOgogICAgICAgICAgICAgICAgICAgICBpZiAobmV3U3RhdGUgPCBGcmFnbWVudC5TVEFSVEVEKSB7CkBAIC0xMDk2LDYgKzEwOTQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAibW92ZWZyb20gQ1JFQVRFRDogIiArIGYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZi5tUmV0YWluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYucGVyZm9ybURlc3Ryb3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm1TdGF0ZSA9IEZyYWdtZW50LklOSVRJQUxJWklORzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm1DYWxsZWQgPSBmYWxzZTsKQEAgLTExMTksNyArMTExOSwxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmLm1TdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICBpZiAoZi5tU3RhdGUgIT0gbmV3U3RhdGUpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIm1vdmVUb1N0YXRlOiBGcmFnbWVudCBzdGF0ZSBmb3IgIiArIGYgKyAiIG5vdCB1cGRhdGVkIGlubGluZTsgIgorICAgICAgICAgICAgICAgICAgICArICJleHBlY3RlZCBzdGF0ZSAiICsgbmV3U3RhdGUgKyAiIGZvdW5kICIgKyBmLm1TdGF0ZSk7CisgICAgICAgICAgICBmLm1TdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQgbW92ZVRvU3RhdGUoRnJhZ21lbnQgZikgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBY3Rpdml0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JQWN0aXZpdHlNYW5hZ2VyLmphdmEKaW5kZXggMjJhMmQ2NC4uMWFlOTFhNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lBY3Rpdml0eU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSUFjdGl2aXR5TWFuYWdlci5qYXZhCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICBpbnQgdXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TmV4dE1hdGNoaW5nQWN0aXZpdHkoSUJpbmRlciBjYWxsaW5nQWN0aXZpdHksCiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBCdW5kbGUgb3B0aW9ucykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKLSAgICBwdWJsaWMgaW50IHN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhpbnQgdGFza0lkLCBpbnQgbGF1bmNoU3RhY2tJZCwgQnVuZGxlIG9wdGlvbnMpCisgICAgcHVibGljIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoaW50IHRhc2tJZCwgQnVuZGxlIG9wdGlvbnMpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBib29sZWFuIGZpbmlzaEFjdGl2aXR5KElCaW5kZXIgdG9rZW4sIGludCBjb2RlLCBJbnRlbnQgZGF0YSwgaW50IGZpbmlzaFRhc2spCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwpAQCAtMTIyLDYgKzEyMiw3IEBACiAgICAgICAgICAgICBQZXJzaXN0YWJsZUJ1bmRsZSBwZXJzaXN0ZW50U3RhdGUsIENoYXJTZXF1ZW5jZSBkZXNjcmlwdGlvbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgdm9pZCBhY3Rpdml0eVNsZXB0KElCaW5kZXIgdG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgYWN0aXZpdHlEZXN0cm95ZWQoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgdm9pZCBhY3Rpdml0eVJlbGF1bmNoZWQoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKICAgICBwdWJsaWMgdm9pZCByZXBvcnRTaXplQ29uZmlndXJhdGlvbnMoSUJpbmRlciB0b2tlbiwgaW50W10gaG9yaXpvbnRhbFNpemVDb25maWd1cmF0aW9uLAogICAgICAgICAgICAgaW50W10gdmVydGljYWxTaXplQ29uZmlndXJhdGlvbnMsIGludFtdIHNtYWxsZXN0V2lkdGhDb25maWd1cmF0aW9ucykKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC0xNDUsNyArMTQ2LDMxIEBACiAgICAgcHVibGljIHZvaWQgbW92ZVRhc2tUb0RvY2tlZFN0YWNrKGludCB0YXNrSWQsIGludCBjcmVhdGVNb2RlLCBib29sZWFuIHRvVG9wLCBib29sZWFuIGFuaW1hdGUsCiAgICAgICAgICAgICBSZWN0IGluaXRpYWxCb3VuZHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIGJvb2xlYW4gbW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247Ci0gICAgcHVibGljIHZvaWQgcmVzaXplU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzLCBib29sZWFuIGFsbG93UmVzaXplSW5Eb2NrZWRNb2RlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVN0YWNrKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcywgYm9vbGVhbiBhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSkKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKKyAgICAvKioKKyAgICAgKiBSZXNpemVzIHRoZSBkb2NrZWQgc3RhY2ssIGFuZCBhbGwgb3RoZXIgc3RhY2tzIGFzIHRoZSByZXN1bHQgb2YgdGhlIGRvY2sgc3RhY2sgYm91bmRzIGNoYW5nZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkb2NrZWRCb3VuZHMgVGhlIGJvdW5kcyBmb3IgdGhlIGRvY2tlZCBzdGFjay4KKyAgICAgKiBAcGFyYW0gdGVtcERvY2tlZFRhc2tCb3VuZHMgVGhlIHRlbXBvcmFyeSBib3VuZHMgZm9yIHRoZSB0YXNrcyBpbiB0aGUgZG9ja2VkIHN0YWNrLCB3aGljaAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhY2sgYm91bmRzIHRvIGFsbG93IG1vcmUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxleGliaWxpdHkgd2hpbGUgcmVzaXppbmcsIG9yIHtAY29kZSBudWxsfSBpZiB0aGV5IHNob3VsZCBiZSB0aGUKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyB0aGUgc3RhY2sgYm91bmRzLgorICAgICAqIEBwYXJhbSB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzIFRoZSB0ZW1wb3JhcnkgYm91bmRzIGZvciB0aGUgdGFza3MgdG8gY2FsY3VsYXRlIHRoZSBpbnNldHMuCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbiByZXNpemluZywgd2UgdXN1YWxseSAiZnJlZXplIiB0aGUgbGF5b3V0IG9mIGEgdGFzay4gVG8KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2hpZXZlIHRoYXQsIHdlIGFsc28gbmVlZCB0byAiZnJlZXplIiB0aGUgaW5zZXRzLCB3aGljaAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHMgYWNoaWV2ZWQgYnkgY2hhbmdpbmcgdGFzayBib3VuZHMgYnV0IG5vdCBib3VuZHMgdXNlZAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNhbGN1bGF0ZSB0aGUgaW5zZXRzIGluIHRoaXMgdHJhbnNpZW50IHN0YXRlCisgICAgICogQHBhcmFtIHRlbXBPdGhlclRhc2tCb3VuZHMgVGhlIHRlbXBvcmFyeSBib3VuZHMgZm9yIHRoZSB0YXNrcyBpbiBhbGwgb3RoZXIgc3RhY2tzLCBvcgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtAY29kZSBudWxsfSBpZiB0aGV5IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgc3RhY2sgYm91bmRzLgorICAgICAqIEBwYXJhbSB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMgTGlrZSB7QGNvZGUgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kc30sIGJ1dCBmb3IgdGhlIG90aGVyCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3MuCisgICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXNpemVEb2NrZWRTdGFjayhSZWN0IGRvY2tlZEJvdW5kcywgUmVjdCB0ZW1wRG9ja2VkVGFza0JvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcywKKyAgICAgICAgICAgIFJlY3QgdGVtcE90aGVyVGFza0JvdW5kcywgUmVjdCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFjayhpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyBMaXN0PFN0YWNrSW5mbz4gZ2V0QWxsU3RhY2tJbmZvcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIFN0YWNrSW5mbyBnZXRTdGFja0luZm8oaW50IHN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC0yNTEsNiArMjc2LDE1IEBACiAgICAgcHVibGljIFBhcmNlbGVkTGlzdFNsaWNlPFVyaVBlcm1pc3Npb24+IGdldFBlcnNpc3RlZFVyaVBlcm1pc3Npb25zKAogICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lLCBib29sZWFuIGluY29taW5nKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCisgICAgLy8gR2V0cyB0aGUgVVJJIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gYW4gYXJiaXRyYXJ5IHBhY2thZ2UuCisgICAgLy8gTk9URTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBnZXRQZXJzaXN0ZWRVcmlQZXJtaXNzaW9ucygpLCB3aGljaCByZXR1cm5zIHRoZSBVUklzIHRoZSBwYWNrYWdlCisgICAgLy8gZ3JhbnRlZCB0byBhbm90aGVyIHBhY2thZ2VzIChpbnN0ZWFkIG9mIHRob3NlIGdyYW50ZWQgdG8gaXQpLgorICAgIHB1YmxpYyBQYXJjZWxlZExpc3RTbGljZTxVcmlQZXJtaXNzaW9uPiBnZXRHcmFudGVkVXJpUGVybWlzc2lvbnMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKQorICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKworICAgIC8vIENsZWFycyB0aGUgVVJJIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gYW4gYXJiaXRyYXJ5IHBhY2thZ2UuCisgICAgcHVibGljIHZvaWQgY2xlYXJHcmFudGVkVXJpUGVybWlzc2lvbnMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworCiAgICAgcHVibGljIHZvaWQgc2hvd1dhaXRpbmdGb3JEZWJ1Z2dlcihJQXBwbGljYXRpb25UaHJlYWQgd2hvLCBib29sZWFuIHdhaXRpbmcpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCkBAIC0yNTksNiArMjkzLDcgQEAKICAgICBwdWJsaWMgdm9pZCBraWxsQmFja2dyb3VuZFByb2Nlc3NlcyhmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpCiAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIGtpbGxBbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgdm9pZCBraWxsUGFja2FnZURlcGVuZGVudHMoZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIGZvcmNlU3RvcFBhY2thZ2UoZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgLy8gTm90ZTogcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBhbGxvdyBhcHBsaWNhdGlvbnMgYWNjZXNzIHRvIHRoZXNlLgpAQCAtMzYyLDYgKzM5Nyw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRQcm92aWRlck1pbWVUeXBlKFVyaSB1cmksIGludCB1c2VySWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgSUJpbmRlciBuZXdVcmlQZXJtaXNzaW9uT3duZXIoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIElCaW5kZXIgZ2V0VXJpUGVybWlzc2lvbk93bmVyRm9yQWN0aXZpdHkoSUJpbmRlciBhY3Rpdml0eVRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIGdyYW50VXJpUGVybWlzc2lvbkZyb21Pd25lcihJQmluZGVyIG93bmVyLCBpbnQgZnJvbVVpZCwgU3RyaW5nIHRhcmdldFBrZywKICAgICAgICAgICAgIFVyaSB1cmksIGludCBtb2RlLCBpbnQgc291cmNlVXNlcklkLCBpbnQgdGFyZ2V0VXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIHB1YmxpYyB2b2lkIHJldm9rZVVyaVBlcm1pc3Npb25Gcm9tT3duZXIoSUJpbmRlciBvd25lciwgVXJpIHVyaSwKQEAgLTQzNyw3ICs0NzMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVXNlclN3aXRjaE9ic2VydmVyKElVc2VyU3dpdGNoT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAgICAgcHVibGljIHZvaWQgdW5yZWdpc3RlclVzZXJTd2l0Y2hPYnNlcnZlcihJVXNlclN3aXRjaE9ic2VydmVyIG9ic2VydmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCi0gICAgcHVibGljIHZvaWQgcmVxdWVzdEJ1Z1JlcG9ydChib29sZWFuIHByb2dyZXNzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RCdWdSZXBvcnQoaW50IGJ1Z3JlcG9ydFR5cGUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgbG9uZyBpbnB1dERpc3BhdGNoaW5nVGltZWRPdXQoaW50IHBpZCwgYm9vbGVhbiBhYm92ZVN5c3RlbSwgU3RyaW5nIHJlYXNvbikKICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb247CkBAIC01MzcsMTEgKzU3MywxMSBAQAogICAgIHB1YmxpYyBib29sZWFuIHN0b3BCaW5kZXJUcmFja2luZ0FuZER1bXAoUGFyY2VsRmlsZURlc2NyaXB0b3IgZmQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFjdGl2aXR5U3RhY2tJZChJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwotICAgIHB1YmxpYyB2b2lkIG1vdmVBY3Rpdml0eVRvU3RhY2soSUJpbmRlciB0b2tlbiwgaW50IHN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisgICAgcHVibGljIHZvaWQgZXhpdEZyZWVmb3JtTW9kZShJQmluZGVyIHRva2VuKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogCiAgICAgcHVibGljIHZvaWQgc3VwcHJlc3NSZXNpemVDb25maWdDaGFuZ2VzKGJvb2xlYW4gc3VwcHJlc3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVTdGFjayhpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgdm9pZCBtb3ZlVGFza3NUb0Z1bGxzY3JlZW5TdGFjayhpbnQgZnJvbVN0YWNrSWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKICAgICBwdWJsaWMgaW50IGdldEFwcFN0YXJ0TW9kZShpbnQgdWlkLCBTdHJpbmcgcGFja2FnZU5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CiAKQEAgLTU0OSw2ICs1ODUsMTAgQEAKIAogICAgIHB1YmxpYyBib29sZWFuIGluUGljdHVyZUluUGljdHVyZU1vZGUoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAorICAgIHB1YmxpYyB2b2lkIGVudGVyUGljdHVyZUluUGljdHVyZU1vZGUoSUJpbmRlciB0b2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKworICAgIHB1YmxpYyB2b2lkIHNldFZyTW9kZShJQmluZGVyIHRva2VuLCBib29sZWFuIGVuYWJsZWQpIHRocm93cyBSZW1vdGVFeGNlcHRpb247CisKICAgICAvKgogICAgICAqIFByaXZhdGUgbm9uLUJpbmRlciBpbnRlcmZhY2VzCiAgICAgICovCkBAIC05MDIsMTQgKzk0MiwyMiBAQAogICAgIGludCBTVE9QX0JJTkRFUl9UUkFDS0lOR19BTkRfRFVNUF9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM0MTsKICAgICBpbnQgUE9TSVRJT05fVEFTS19JTl9TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM0MjsKICAgICBpbnQgR0VUX0FDVElWSVRZX1NUQUNLX0lEX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzQzOwotICAgIGludCBNT1ZFX0FDVElWSVRZX1RPX1NUQUNLX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzQ0OworICAgIGludCBFWElUX0ZSRUVGT1JNX01PREVfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNDQ7CiAgICAgaW50IFJFUE9SVF9TSVpFX0NPTkZJR1VSQVRJT05TID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzQ1OwogICAgIGludCBNT1ZFX1RBU0tfVE9fRE9DS0VEX1NUQUNLX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzQ2OwogICAgIGludCBTVVBQUkVTU19SRVNJWkVfQ09ORklHX0NIQU5HRVNfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNDc7Ci0gICAgaW50IFJFTU9WRV9TVEFDS19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM0ODsKKyAgICBpbnQgTU9WRV9UQVNLU19UT19GVUxMU0NSRUVOX1NUQUNLX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzQ4OwogICAgIGludCBNT1ZFX1RPUF9BQ1RJVklUWV9UT19QSU5ORURfU1RBQ0tfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNDk7CiAgICAgaW50IEdFVF9BUFBfU1RBUlRfTU9ERV9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM1MDsKICAgICBpbnQgVU5MT0NLX1VTRVJfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNTE7CiAgICAgaW50IElOX01VTFRJX1dJTkRPV19NT0RFX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzUyOwogICAgIGludCBJTl9QSUNUVVJFX0lOX1BJQ1RVUkVfTU9ERV9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM1MzsKKyAgICBpbnQgS0lMTF9QQUNLQUdFX0RFUEVOREVOVFNfVFJBTlNBQ1RJT04gPSBJQmluZGVyLkZJUlNUX0NBTExfVFJBTlNBQ1RJT04gKyAzNTQ7CisgICAgaW50IEVOVEVSX1BJQ1RVUkVfSU5fUElDVFVSRV9NT0RFX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU1OworICAgIGludCBBQ1RJVklUWV9SRUxBVU5DSEVEX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU2OworICAgIGludCBHRVRfVVJJX1BFUk1JU1NJT05fT1dORVJfRk9SX0FDVElWSVRZX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU3OworICAgIGludCBSRVNJWkVfRE9DS0VEX1NUQUNLX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzU4OworICAgIGludCBTRVRfVlJfTU9ERV9UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM1OTsKKyAgICBpbnQgR0VUX0dSQU5URURfVVJJX1BFUk1JU1NJT05TX1RSQU5TQUNUSU9OID0gSUJpbmRlci5GSVJTVF9DQUxMX1RSQU5TQUNUSU9OICsgMzYwOworICAgIGludCBDTEVBUl9HUkFOVEVEX1VSSV9QRVJNSVNTSU9OU19UUkFOU0FDVElPTiA9IElCaW5kZXIuRklSU1RfQ0FMTF9UUkFOU0FDVElPTiArIDM2MTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JTm90aWZpY2F0aW9uTWFuYWdlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKaW5kZXggMTM2YjgxMC4uNjMzZjY5OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lOb3RpZmljYXRpb25NYW5hZ2VyLmFpZGwKQEAgLTU0LDYgKzU0LDggQEAKICAgICBpbnQgZ2V0VG9waWNQcmlvcml0eShTdHJpbmcgcGtnLCBpbnQgdWlkLCBpbiBOb3RpZmljYXRpb24uVG9waWMgdG9waWMpOwogICAgIHZvaWQgc2V0VG9waWNJbXBvcnRhbmNlKFN0cmluZyBwa2csIGludCB1aWQsIGluIE5vdGlmaWNhdGlvbi5Ub3BpYyB0b3BpYywgaW50IGltcG9ydGFuY2UpOwogICAgIGludCBnZXRUb3BpY0ltcG9ydGFuY2UoU3RyaW5nIHBrZywgaW50IHVpZCwgaW4gTm90aWZpY2F0aW9uLlRvcGljIHRvcGljKTsKKyAgICB2b2lkIHNldEFwcEltcG9ydGFuY2UoU3RyaW5nIHBrZywgaW50IHVpZCwgaW50IGltcG9ydGFuY2UpOworICAgIGJvb2xlYW4gZG9lc0FwcFVzZVRvcGljcyhTdHJpbmcgcGtnLCBpbnQgdWlkKTsKIAogICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gY2FsbGVycyBoYXZlIGJlZW4gbWlncmF0ZWQgdG8gdGhlIGVxdWl2YWxlbnQKICAgICAvLyBJTm90aWZpY2F0aW9uTGlzdGVuZXIgbWV0aG9kLgpAQCAtNjYsNiArNjgsOSBAQAogICAgIHZvaWQgY2FuY2VsTm90aWZpY2F0aW9uRnJvbUxpc3RlbmVyKGluIElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgU3RyaW5nIHBrZywgU3RyaW5nIHRhZywgaW50IGlkKTsKICAgICB2b2lkIGNhbmNlbE5vdGlmaWNhdGlvbnNGcm9tTGlzdGVuZXIoaW4gSU5vdGlmaWNhdGlvbkxpc3RlbmVyIHRva2VuLCBpbiBTdHJpbmdbXSBrZXlzKTsKIAorICAgIHZvaWQgcmVxdWVzdEJpbmRMaXN0ZW5lcihpbiBDb21wb25lbnROYW1lIGNvbXBvbmVudCk7CisgICAgdm9pZCByZXF1ZXN0VW5iaW5kTGlzdGVuZXIoaW4gSU5vdGlmaWNhdGlvbkxpc3RlbmVyIHRva2VuKTsKKwogICAgIHZvaWQgc2V0Tm90aWZpY2F0aW9uc1Nob3duRnJvbUxpc3RlbmVyKGluIElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgaW4gU3RyaW5nW10ga2V5cyk7CiAKICAgICBQYXJjZWxlZExpc3RTbGljZSBnZXRBY3RpdmVOb3RpZmljYXRpb25zRnJvbUxpc3RlbmVyKGluIElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgaW4gU3RyaW5nW10ga2V5cywgaW50IHRyaW0pOwpAQCAtNzYsNiArODEsOCBAQAogICAgIHZvaWQgc2V0T25Ob3RpZmljYXRpb25Qb3N0ZWRUcmltRnJvbUxpc3RlbmVyKGluIElOb3RpZmljYXRpb25MaXN0ZW5lciB0b2tlbiwgaW50IHRyaW0pOwogICAgIHZvaWQgc2V0SW50ZXJydXB0aW9uRmlsdGVyKFN0cmluZyBwa2csIGludCBpbnRlcnJ1cHRpb25GaWx0ZXIpOwogCisgICAgdm9pZCBzZXRJbXBvcnRhbmNlRnJvbUFzc2lzdGFudChpbiBJTm90aWZpY2F0aW9uTGlzdGVuZXIgdG9rZW4sIFN0cmluZyBrZXksIGludCBpbXBvcnRhbmNlLCBDaGFyU2VxdWVuY2UgZXhwbGFuYXRpb24pOworCiAgICAgQ29tcG9uZW50TmFtZSBnZXRFZmZlY3RzU3VwcHJlc3NvcigpOwogICAgIGJvb2xlYW4gbWF0Y2hlc0NhbGxGaWx0ZXIoaW4gQnVuZGxlIGV4dHJhcyk7CiAgICAgYm9vbGVhbiBpc1N5c3RlbUNvbmRpdGlvblByb3ZpZGVyRW5hYmxlZChTdHJpbmcgcGF0aCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSVRhc2tTdGFja0xpc3RlbmVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvSVRhc2tTdGFja0xpc3RlbmVyLmFpZGwKaW5kZXggNGIwOTM1Yy4uNTYwZTIyYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0lUYXNrU3RhY2tMaXN0ZW5lci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9JVGFza1N0YWNrTGlzdGVuZXIuYWlkbApAQCAtMTgsNSArMTgsOSBAQAogCiAvKiogQGhpZGUgKi8KIG9uZXdheSBpbnRlcmZhY2UgSVRhc2tTdGFja0xpc3RlbmVyIHsKKyAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIHRoZSBzdGF0ZSBvZiB0YXNrcyBpbiBhIHN0YWNrLiAqLwogICAgIHZvaWQgb25UYXNrU3RhY2tDaGFuZ2VkKCk7CisKKyAgICAvKiogQ2FsbGVkIHdoZW5ldmVyIGFuIEFjdGl2aXR5IGlzIG1vdmVkIHRvIHRoZSBwaW5uZWQgc3RhY2sgZnJvbSBhbm90aGVyIHN0YWNrLiAqLworICAgIHZvaWQgb25BY3Rpdml0eVBpbm5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0tleWd1YXJkTWFuYWdlci5qYXZhCmluZGV4IDIzZTRkOTcuLjM5MTA2NTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9LZXlndWFyZE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvS2V5Z3VhcmRNYW5hZ2VyLmphdmEKQEAgLTIxLDExICsyMSwxNCBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLnRydXN0LklUcnVzdE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuSVVzZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JT25LZXlndWFyZEV4aXRSZXN1bHQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CkBAIC00MCw2ICs0Myw3IEBACiBwdWJsaWMgY2xhc3MgS2V5Z3VhcmRNYW5hZ2VyIHsKICAgICBwcml2YXRlIElXaW5kb3dNYW5hZ2VyIG1XTTsKICAgICBwcml2YXRlIElUcnVzdE1hbmFnZXIgbVRydXN0TWFuYWdlcjsKKyAgICBwcml2YXRlIElVc2VyTWFuYWdlciBtVXNlck1hbmFnZXI7CiAKICAgICAvKioKICAgICAgKiBJbnRlbnQgdXNlZCB0byBwcm9tcHQgdXNlciBmb3IgZGV2aWNlIGNyZWRlbnRpYWxzLgpAQCAtNDksNiArNTMsMTMgQEAKICAgICAgICAgICAgICJhbmRyb2lkLmFwcC5hY3Rpb24uQ09ORklSTV9ERVZJQ0VfQ1JFREVOVElBTCI7CiAKICAgICAvKioKKyAgICAgKiBJbnRlbnQgdXNlZCB0byBwcm9tcHQgdXNlciBmb3IgZGV2aWNlIGNyZWRlbnRpYWxzLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0NPTkZJUk1fREVWSUNFX0NSRURFTlRJQUxfV0lUSF9VU0VSID0KKyAgICAgICAgICAgICJhbmRyb2lkLmFwcC5hY3Rpb24uQ09ORklSTV9ERVZJQ0VfQ1JFREVOVElBTF9XSVRIX1VTRVIiOworCisgICAgLyoqCiAgICAgICogQSBDaGFyU2VxdWVuY2UgZGlhbG9nIHRpdGxlIHRvIHNob3cgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIHdpdGggYQogICAgICAqIHtAbGluayAjQUNUSU9OX0NPTkZJUk1fREVWSUNFX0NSRURFTlRJQUx9LgogICAgICAqIEBoaWRlCkBAIC03MSw3ICs4Miw3IEBACiAgICAgICogQHJldHVybiB0aGUgaW50ZW50IGZvciBsYXVuY2hpbmcgdGhlIGFjdGl2aXR5IG9yIG51bGwgaWYgbm8gcGFzc3dvcmQgaXMgcmVxdWlyZWQuCiAgICAgICoqLwogICAgIHB1YmxpYyBJbnRlbnQgY3JlYXRlQ29uZmlybURldmljZUNyZWRlbnRpYWxJbnRlbnQoQ2hhclNlcXVlbmNlIHRpdGxlLCBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgaWYgKCFpc0tleWd1YXJkU2VjdXJlKCkpIHJldHVybiBudWxsOworICAgICAgICBpZiAoIWlzRGV2aWNlU2VjdXJlKCkpIHJldHVybiBudWxsOwogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChBQ1RJT05fQ09ORklSTV9ERVZJQ0VfQ1JFREVOVElBTCk7CiAgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9USVRMRSwgdGl0bGUpOwogICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfREVTQ1JJUFRJT04sIGRlc2NyaXB0aW9uKTsKQEAgLTgxLDYgKzkyLDI4IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogR2V0IGFuIGludGVudCB0byBwcm9tcHQgdGhlIHVzZXIgdG8gY29uZmlybSBjcmVkZW50aWFscyAocGluLCBwYXR0ZXJuIG9yIHBhc3N3b3JkKQorICAgICAqIGZvciB0aGUgZ2l2ZW4gdXNlci4gVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBsYXVuY2ggdGhpcyBhY3Rpdml0eSB1c2luZworICAgICAqIHtAbGluayBhbmRyb2lkLmFwcC5BY3Rpdml0eSNzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KEludGVudCwgaW50KX0gYW5kIGNoZWNrIGZvcgorICAgICAqIHtAbGluayBhbmRyb2lkLmFwcC5BY3Rpdml0eSNSRVNVTFRfT0t9IGlmIHRoZSB1c2VyIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMgdGhlIGNoYWxsZW5nZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIGludGVudCBmb3IgbGF1bmNoaW5nIHRoZSBhY3Rpdml0eSBvciBudWxsIGlmIG5vIHBhc3N3b3JkIGlzIHJlcXVpcmVkLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgSW50ZW50IGNyZWF0ZUNvbmZpcm1EZXZpY2VDcmVkZW50aWFsSW50ZW50KAorICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHRpdGxlLCBDaGFyU2VxdWVuY2UgZGVzY3JpcHRpb24sIGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFpc0RldmljZVNlY3VyZSh1c2VySWQpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX0NPTkZJUk1fREVWSUNFX0NSRURFTlRJQUxfV0lUSF9VU0VSKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX1RJVExFLCB0aXRsZSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9ERVNDUklQVElPTiwgZGVzY3JpcHRpb24pOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSUQsIHVzZXJJZCk7CisgICAgICAgIC8vIEZvciBzZWN1cml0eSByZWFzb25zLCBvbmx5IGFsbG93IHRoaXMgdG8gY29tZSBmcm9tIHN5c3RlbSBzZXR0aW5ncy4KKyAgICAgICAgaW50ZW50LnNldFBhY2thZ2UoImNvbS5hbmRyb2lkLnNldHRpbmdzIik7CisgICAgICAgIHJldHVybiBpbnRlbnQ7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMjRkxBR19ESVNNSVNTX0tFWUdVQVJEfQogICAgICAqIGFuZC9vciB7QGxpbmsgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zI0ZMQUdfU0hPV19XSEVOX0xPQ0tFRH0KICAgICAgKiBpbnN0ZWFkOyB0aGlzIGFsbG93cyB5b3UgdG8gc2VhbWxlc3NseSBoaWRlIHRoZSBrZXlndWFyZCBhcyB5b3VyIGFwcGxpY2F0aW9uCkBAIC0xNjIsNiArMTk1LDggQEAKICAgICAgICAgbVdNID0gV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpOwogICAgICAgICBtVHJ1c3RNYW5hZ2VyID0gSVRydXN0TWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAogICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5UUlVTVF9TRVJWSUNFKSk7CisgICAgICAgIG1Vc2VyTWFuYWdlciA9IElVc2VyTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5VU0VSX1NFUlZJQ0UpKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Mb2FkZWRBcGsuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Mb2FkZWRBcGsuamF2YQppbmRleCA4OTE1NThmLi44NTViMjFlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTG9hZGVkQXBrLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL0xvYWRlZEFway5qYXZhCkBAIC0zNjYsNyArMzY2LDI0IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGliID0gVGV4dFV0aWxzLmpvaW4oRmlsZS5wYXRoU2VwYXJhdG9yLCBsaWJQYXRocyk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxpYnJhcnlQZXJtaXR0ZWRQYXRoID0gbUFwcERpciArIEZpbGUucGF0aFNlcGFyYXRvciArIG1EYXRhRGlyOworICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNCdW5kbGVkQXBwID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAobUFwcGxpY2F0aW9uSW5mby5pc1N5c3RlbUFwcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlzQnVuZGxlZEFwcCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBwYXRoIHRvIHN5c3RlbSBsaWJyYXJpZXMgdG8gbGliUGF0aHM7CisgICAgICAgICAgICAgICAgICAgIC8vIEFjY2VzcyB0byBzeXN0ZW0gbGlicyBzaG91bGQgYmUgbGltaXRlZAorICAgICAgICAgICAgICAgICAgICAvLyB0byBidW5kbGVkIGFwcGxpY2F0aW9uczsgdGhpcyBpcyB3aHkgdXBkYXRlZAorICAgICAgICAgICAgICAgICAgICAvLyBzeXN0ZW0gYXBwcyBhcmUgbm90IGluY2x1ZGVkLgorICAgICAgICAgICAgICAgICAgICBsaWJQYXRocy5hZGQoU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmxpYnJhcnkucGF0aCIpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBncmFudCBidW5kbGVkIGFwcHMgYWNjZXNzIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGxpYnJhcmllcyBsb2NhdGVkIGluIHN1YmRpcmVjdG9yaWVzIG9mIC9zeXN0ZW0vbGliCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlQZXJtaXR0ZWRQYXRoICs9IEZpbGUucGF0aFNlcGFyYXRvciArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5saWJyYXJ5LnBhdGgiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGlicmFyeVNlYXJjaFBhdGggPSBUZXh0VXRpbHMuam9pbihGaWxlLnBhdGhTZXBhcmF0b3IsIGxpYlBhdGhzKTsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogV2l0aCBhbGwgdGhlIGNvbWJpbmF0aW9uIGRvbmUgKGlmIG5lY2Vzc2FyeSwgYWN0dWFsbHkKQEAgLTM3NCwxNCArMzkxLDE1IEBACiAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICBpZiAoQWN0aXZpdHlUaHJlYWQubG9jYWxMT0dWKQotICAgICAgICAgICAgICAgICAgICBTbG9nLnYoQWN0aXZpdHlUaHJlYWQuVEFHLCAiQ2xhc3MgcGF0aDogIiArIHppcCArICIsIEpOSSBwYXRoOiAiICsgbGliKTsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy52KEFjdGl2aXR5VGhyZWFkLlRBRywgIkNsYXNzIHBhdGg6ICIgKyB6aXAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIEpOSSBwYXRoOiAiICsgbGlicmFyeVNlYXJjaFBhdGgpOwogCiAgICAgICAgICAgICAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSBsb2dnaW5nIG9mIGRpc2sgcmVhZHMgb24gdGhlIExvb3BlciB0aHJlYWQKICAgICAgICAgICAgICAgICAvLyBhcyB0aGlzIGlzIGVhcmx5IGFuZCBuZWNlc3NhcnkuCiAgICAgICAgICAgICAgICAgU3RyaWN0TW9kZS5UaHJlYWRQb2xpY3kgb2xkUG9saWN5ID0gU3RyaWN0TW9kZS5hbGxvd1RocmVhZERpc2tSZWFkcygpOwogCi0gICAgICAgICAgICAgICAgbUNsYXNzTG9hZGVyID0gQXBwbGljYXRpb25Mb2FkZXJzLmdldERlZmF1bHQoKS5nZXRDbGFzc0xvYWRlcih6aXAsIGxpYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1CYXNlQ2xhc3NMb2FkZXIpOworICAgICAgICAgICAgICAgIG1DbGFzc0xvYWRlciA9IEFwcGxpY2F0aW9uTG9hZGVycy5nZXREZWZhdWx0KCkuZ2V0Q2xhc3NMb2FkZXIoemlwLCBpc0J1bmRsZWRBcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5U2VhcmNoUGF0aCwgbGlicmFyeVBlcm1pdHRlZFBhdGgsIG1CYXNlQ2xhc3NMb2FkZXIpOwogCiAgICAgICAgICAgICAgICAgU3RyaWN0TW9kZS5zZXRUaHJlYWRQb2xpY3kob2xkUG9saWN5KTsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTmF0aXZlQWN0aXZpdHkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9OYXRpdmVBY3Rpdml0eS5qYXZhCmluZGV4IDEzNzAwMDAuLmFhMTRjYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9OYXRpdmVBY3Rpdml0eS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9OYXRpdmVBY3Rpdml0eS5qYXZhCkBAIC0zNSw2ICszNSw4IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kTWFuYWdlcjsKIAoraW1wb3J0IGRhbHZpay5zeXN0ZW0uQmFzZURleENsYXNzTG9hZGVyOworCiBpbXBvcnQgamF2YS5pby5GaWxlOwogCiAvKioKQEAgLTkzLDcgKzk1LDkgQEAKICAgICAKICAgICBwcml2YXRlIG5hdGl2ZSBsb25nIGxvYWROYXRpdmVDb2RlKFN0cmluZyBwYXRoLCBTdHJpbmcgZnVuY25hbWUsIE1lc3NhZ2VRdWV1ZSBxdWV1ZSwKICAgICAgICAgICAgIFN0cmluZyBpbnRlcm5hbERhdGFQYXRoLCBTdHJpbmcgb2JiUGF0aCwgU3RyaW5nIGV4dGVybmFsRGF0YVBhdGgsIGludCBzZGtWZXJzaW9uLAotICAgICAgICAgICAgQXNzZXRNYW5hZ2VyIGFzc2V0TWdyLCBieXRlW10gc2F2ZWRTdGF0ZSk7CisgICAgICAgICAgICBBc3NldE1hbmFnZXIgYXNzZXRNZ3IsIGJ5dGVbXSBzYXZlZFN0YXRlLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciwgU3RyaW5nIGxpYnJhcnlQYXRoLAorICAgICAgICAgICAgU3RyaW5nIGlzb2xhdGlvblBhdGgpOworICAgIHByaXZhdGUgbmF0aXZlIFN0cmluZyBnZXREbEVycm9yKCk7CiAgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCB1bmxvYWROYXRpdmVDb2RlKGxvbmcgaGFuZGxlKTsKICAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG9uU3RhcnROYXRpdmUobG9uZyBoYW5kbGUpOwogICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgb25SZXN1bWVOYXRpdmUobG9uZyBoYW5kbGUpOwpAQCAtMTU3LDE1ICsxNjEsMTAgQEAKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBnZXR0aW5nIGFjdGl2aXR5IGluZm8iLCBlKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHBhdGggPSBudWxsOwotICAgICAgICAKLSAgICAgICAgRmlsZSBsaWJyYXJ5RmlsZSA9IG5ldyBGaWxlKGFpLmFwcGxpY2F0aW9uSW5mby5uYXRpdmVMaWJyYXJ5RGlyLAotICAgICAgICAgICAgICAgIFN5c3RlbS5tYXBMaWJyYXJ5TmFtZShsaWJuYW1lKSk7Ci0gICAgICAgIGlmIChsaWJyYXJ5RmlsZS5leGlzdHMoKSkgewotICAgICAgICAgICAgcGF0aCA9IGxpYnJhcnlGaWxlLmdldFBhdGgoKTsKLSAgICAgICAgfQotICAgICAgICAKKworICAgICAgICBCYXNlRGV4Q2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIgPSAoQmFzZURleENsYXNzTG9hZGVyKSBnZXRDbGFzc0xvYWRlcigpOworICAgICAgICBTdHJpbmcgcGF0aCA9IGNsYXNzTG9hZGVyLmZpbmRMaWJyYXJ5KGxpYm5hbWUpOworCiAgICAgICAgIGlmIChwYXRoID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIG5hdGl2ZSBsaWJyYXJ5OiAiICsgbGlibmFtZSk7CiAgICAgICAgIH0KQEAgLTE3NiwxMCArMTc1LDEzIEBACiAgICAgICAgIG1OYXRpdmVIYW5kbGUgPSBsb2FkTmF0aXZlQ29kZShwYXRoLCBmdW5jbmFtZSwgTG9vcGVyLm15UXVldWUoKSwKICAgICAgICAgICAgICAgICBnZXRBYnNvbHV0ZVBhdGgoZ2V0RmlsZXNEaXIoKSksIGdldEFic29sdXRlUGF0aChnZXRPYmJEaXIoKSksCiAgICAgICAgICAgICAgICAgZ2V0QWJzb2x1dGVQYXRoKGdldEV4dGVybmFsRmlsZXNEaXIobnVsbCkpLAotICAgICAgICAgICAgICAgIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCwgZ2V0QXNzZXRzKCksIG5hdGl2ZVNhdmVkU3RhdGUpOworICAgICAgICAgICAgICAgIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCwgZ2V0QXNzZXRzKCksIG5hdGl2ZVNhdmVkU3RhdGUsCisgICAgICAgICAgICAgICAgY2xhc3NMb2FkZXIsIGNsYXNzTG9hZGVyLmdldExkTGlicmFyeVBhdGgoKSwKKyAgICAgICAgICAgICAgICBjbGFzc0xvYWRlci5nZXRMaWJyYXJ5UGVybWl0dGVkUGF0aCgpKTsKIAogICAgICAgICBpZiAobU5hdGl2ZUhhbmRsZSA9PSAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmFibGUgdG8gbG9hZCBuYXRpdmUgbGlicmFyeTogIiArIHBhdGgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc2F0aXNmaWVkTGlua0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGxvYWQgbmF0aXZlIGxpYnJhcnkgXCIiICsgcGF0aCArICJcIjogIiArIGdldERsRXJyb3IoKSk7CiAgICAgICAgIH0KICAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uLmphdmEKaW5kZXggMDk5YTVmZS4uYTM5MmFiZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb24uamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5Ob3RpZmljYXRpb25IZWFkZXJWaWV3OwpAQCAtNjQsNiArNjUsNyBAQAogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIEEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGhvdyBhIHBlcnNpc3RlbnQgbm90aWZpY2F0aW9uIGlzIHRvIGJlIHByZXNlbnRlZCB0bwpAQCAtMTQzLDYgKzE0NSwxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfQ0hBUlNFUVVFTkNFX0xFTkdUSCA9IDUgKiAxMDI0OwogCiAgICAgLyoqCisgICAgICogTWF4aW11bSBlbnRyaWVzIG9mIHJlcGx5IHRleHQgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgQnVpbGRlciBhbmQgZnJpZW5kcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1JFUExZX0hJU1RPUlkgPSA1OworCisgICAgLyoqCiAgICAgICogQSB0aW1lc3RhbXAgcmVsYXRlZCB0byB0aGlzIG5vdGlmaWNhdGlvbiwgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4KICAgICAgKgogICAgICAqIERlZmF1bHQgdmFsdWU6IHtAbGluayBTeXN0ZW0jY3VycmVudFRpbWVNaWxsaXMoKSBOb3d9LgpAQCAtNzQzLDYgKzc1MCwxMiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NVQl9URVhUID0gImFuZHJvaWQuc3ViVGV4dCI7CiAKICAgICAvKioKKyAgICAgKiB7QGxpbmsgI2V4dHJhc30ga2V5OiB0aGlzIGlzIHRoZSByZW1vdGUgaW5wdXQgaGlzdG9yeSwgYXMgc3VwcGxpZWQgdG8KKyAgICAgKiB7QGxpbmsgQnVpbGRlciNzZXRSZW1vdGVJbnB1dEhpc3RvcnkoQ2hhclNlcXVlbmNlW10pfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSA9ICJhbmRyb2lkLnJlbW90ZUlucHV0SGlzdG9yeSI7CisKKyAgICAvKioKICAgICAgKiB7QGxpbmsgI2V4dHJhc30ga2V5OiB0aGlzIGlzIGEgc21hbGwgcGllY2Ugb2YgYWRkaXRpb25hbCB0ZXh0IGFzIHN1cHBsaWVkIHRvCiAgICAgICoge0BsaW5rIEJ1aWxkZXIjc2V0Q29udGVudEluZm8oQ2hhclNlcXVlbmNlKX0uCiAgICAgICovCkBAIC0xNjkzLDExICsxNzA2LDIxIEBACiAgICAgICAgIGJpZ0NvbnRlbnRWaWV3ID0gbnVsbDsKICAgICAgICAgaGVhZHNVcENvbnRlbnRWaWV3ID0gbnVsbDsKICAgICAgICAgbUxhcmdlSWNvbiA9IG51bGw7Ci0gICAgICAgIGlmIChleHRyYXMgIT0gbnVsbCkgewotICAgICAgICAgICAgZXh0cmFzLnJlbW92ZShOb3RpZmljYXRpb24uRVhUUkFfTEFSR0VfSUNPTik7Ci0gICAgICAgICAgICBleHRyYXMucmVtb3ZlKE5vdGlmaWNhdGlvbi5FWFRSQV9MQVJHRV9JQ09OX0JJRyk7Ci0gICAgICAgICAgICBleHRyYXMucmVtb3ZlKE5vdGlmaWNhdGlvbi5FWFRSQV9QSUNUVVJFKTsKLSAgICAgICAgICAgIGV4dHJhcy5yZW1vdmUoTm90aWZpY2F0aW9uLkVYVFJBX0JJR19URVhUKTsKKyAgICAgICAgaWYgKGV4dHJhcyAhPSBudWxsICYmICFleHRyYXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlzZXQgPSBleHRyYXMua2V5U2V0KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IGtleXNldC5zaXplKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBrZXlzID0ga2V5c2V0LnRvQXJyYXkobmV3IFN0cmluZ1tOXSk7CisgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGtleSA9IGtleXNbaV07CisgICAgICAgICAgICAgICAgZmluYWwgT2JqZWN0IG9iaiA9IGV4dHJhcy5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgKCAgb2JqIGluc3RhbmNlb2YgUGFyY2VsYWJsZQorICAgICAgICAgICAgICAgICAgICB8fCBvYmogaW5zdGFuY2VvZiBQYXJjZWxhYmxlW10KKyAgICAgICAgICAgICAgICAgICAgfHwgb2JqIGluc3RhbmNlb2YgU3BhcnNlQXJyYXkKKyAgICAgICAgICAgICAgICAgICAgfHwgb2JqIGluc3RhbmNlb2YgQXJyYXlMaXN0KSkgeworICAgICAgICAgICAgICAgICAgICBleHRyYXMucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzEyLDYgKzIzMzUsMzQgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBTZXQgdGhlIHJlbW90ZSBpbnB1dCBoaXN0b3J5LgorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gdGhlIG1vc3QgcmVjZW50IGlucHV0cyB0aGF0IGhhdmUgYmVlbiBzZW50CisgICAgICAgICAqIHRocm91Z2ggYSB7QGxpbmsgUmVtb3RlSW5wdXR9IG9mIHRoaXMgTm90aWZpY2F0aW9uIGFuZCBjbGVhcmVkIG9uY2UgdGhlIGl0IGlzIG5vCisgICAgICAgICAqIGxvbmdlciByZWxldmFudCAoZS5nLiBmb3IgY2hhdCBub3RpZmljYXRpb25zIG9uY2UgdGhlIG90aGVyIHBhcnR5IGhhcyByZXNwb25kZWQpLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgbW9zdCByZWNlbnQgaW5wdXQgbXVzdCBiZSBzdG9yZWQgYXQgdGhlIDAgaW5kZXgsIHRoZSBzZWNvbmQgbW9zdCByZWNlbnQgYXQgdGhlCisgICAgICAgICAqIDEgaW5kZXgsIGV0Yy4gTm90ZSB0aGF0IHRoZSBzeXN0ZW0gd2lsbCBsaW1pdCBib3RoIGhvdyBmYXIgYmFjayB0aGUgaW5wdXRzIHdpbGwgYmUgc2hvd24KKyAgICAgICAgICogYW5kIGhvdyBtdWNoIG9mIGVhY2ggaW5kaXZpZHVhbCBpbnB1dCBpcyBzaG93bi4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+Tm90ZTogVGhlIHJlcGx5IHRleHQgd2lsbCBvbmx5IGJlIHNob3duIG9uIG5vdGlmaWNhdGlvbnMgdGhhdCBoYXZlIGxlYXN0IG9uZSBhY3Rpb24KKyAgICAgICAgICogd2l0aCBhIHtAY29kZSBSZW1vdGVJbnB1dH0uPC9wPgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UmVtb3RlSW5wdXRIaXN0b3J5KENoYXJTZXF1ZW5jZVtdIHRleHQpIHsKKyAgICAgICAgICAgIGlmICh0ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtTi5leHRyYXMucHV0Q2hhclNlcXVlbmNlQXJyYXkoRVhUUkFfUkVNT1RFX0lOUFVUX0hJU1RPUlksIG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IE1hdGgubWluKE1BWF9SRVBMWV9ISVNUT1JZLCB0ZXh0Lmxlbmd0aCk7CisgICAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlW10gc2FmZSA9IG5ldyBDaGFyU2VxdWVuY2VbTl07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgc2FmZVtpXSA9IHNhZmVDaGFyU2VxdWVuY2UodGV4dFtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1OLmV4dHJhcy5wdXRDaGFyU2VxdWVuY2VBcnJheShFWFRSQV9SRU1PVEVfSU5QVVRfSElTVE9SWSwgc2FmZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgogICAgICAgICAgKiBTZXQgdGhlIGxhcmdlIG51bWJlciBhdCB0aGUgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBub3RpZmljYXRpb24uICBUaGlzIGlzCiAgICAgICAgICAqIGVxdWl2YWxlbnQgdG8gc2V0Q29udGVudEluZm8sIGFsdGhvdWdoIGl0IG1pZ2h0IHNob3cgdGhlIG51bWJlciBpbiBhIGRpZmZlcmVudAogICAgICAgICAgKiBmb250IHNpemUgZm9yIHJlYWRhYmlsaXR5LgpAQCAtMjk4OSw2ICszMDQwLDcgQEAKICAgICAgICAgICAgIHJlc2V0Tm90aWZpY2F0aW9uSGVhZGVyKGNvbnRlbnRWaWV3KTsKICAgICAgICAgICAgIHJlc2V0Q29udGVudE1hcmdpbnMoY29udGVudFZpZXcpOwogICAgICAgICAgICAgY29udGVudFZpZXcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5yaWdodF9pY29uLCBWaWV3LkdPTkUpOworICAgICAgICAgICAgY29udGVudFZpZXcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC50aXRsZSwgVmlldy5HT05FKTsKICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFRleHRWaWV3VGV4dChSLmlkLnRpdGxlLCBudWxsKTsKICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFRleHRWaWV3VGV4dChSLmlkLnRleHQsIG51bGwpOwogICAgICAgICAgICAgY29udGVudFZpZXcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5saW5lMywgVmlldy5HT05FKTsKQEAgLTMwMzUsNiArMzA4Nyw3IEBACiAgICAgICAgICAgICBiaW5kTm90aWZpY2F0aW9uSGVhZGVyKGNvbnRlbnRWaWV3KTsKICAgICAgICAgICAgIGJpbmRMYXJnZUljb24oY29udGVudFZpZXcpOwogICAgICAgICAgICAgaWYgKGV4LmdldENoYXJTZXF1ZW5jZShFWFRSQV9USVRMRSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFZpZXdWaXNpYmlsaXR5KFIuaWQudGl0bGUsIFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICAgICAgY29udGVudFZpZXcuc2V0VGV4dFZpZXdUZXh0KFIuaWQudGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzTGVnYWN5VGV4dChleC5nZXRDaGFyU2VxdWVuY2UoRVhUUkFfVElUTEUpKSk7CiAgICAgICAgICAgICB9CkBAIC0zMDUzLDEwICszMTA2LDI2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBOb3RlIGdldFN0YW5kYXJkVmlldyBtYXkgaGlkZSBsaW5lIDMgYWdhaW4uCiAgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLmxpbmUzLCBzaG93TGluZTMgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LkdPTkUpOworICAgICAgICAgICAgc2V0Q29udGVudE1pbkhlaWdodChjb250ZW50Vmlldywgc2hvd1Byb2dyZXNzIHx8IG1OLm1MYXJnZUljb24gIT0gbnVsbCk7CiAKICAgICAgICAgICAgIHJldHVybiBjb250ZW50VmlldzsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBAcGFyYW0gcmVtb3RlVmlldyB0aGUgcmVtb3RlIHZpZXcgdG8gdXBkYXRlIHRoZSBtaW5oZWlnaHQgaW4KKyAgICAgICAgICogQHBhcmFtIGhhc01pbkhlaWdodCBkb2VzIGl0IGhhdmUgYSBtaW1IZWlnaHQKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgc2V0Q29udGVudE1pbkhlaWdodChSZW1vdGVWaWV3cyByZW1vdGVWaWV3LCBib29sZWFuIGhhc01pbkhlaWdodCkgeworICAgICAgICAgICAgaW50IG1pbkhlaWdodCA9IDA7CisgICAgICAgICAgICBpZiAoaGFzTWluSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBzZXQgdGhlIG1pbkhlaWdodCBvZiB0aGUgbm90aWZpY2F0aW9uCisgICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW90ZVZpZXcuc2V0SW50KFIuaWQubm90aWZpY2F0aW9uX21haW5fY29sdW1uLCAic2V0TWluaW11bUhlaWdodCIsIG1pbkhlaWdodCk7CisgICAgICAgIH0KKwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGFuZGxlUHJvZ3Jlc3NCYXIoYm9vbGVhbiBoYXNQcm9ncmVzcywgUmVtb3RlVmlld3MgY29udGVudFZpZXcsIEJ1bmRsZSBleCkgewogICAgICAgICAgICAgZmluYWwgaW50IG1heCA9IGV4LmdldEludChFWFRSQV9QUk9HUkVTU19NQVgsIDApOwogICAgICAgICAgICAgZmluYWwgaW50IHByb2dyZXNzID0gZXguZ2V0SW50KEVYVFJBX1BST0dSRVNTLCAwKTsKQEAgLTMyMDIsNiArMzI3MSwxNCBAQAogICAgICAgICBwcml2YXRlIHZvaWQgcmVzZXRTdGFuZGFyZFRlbXBsYXRlV2l0aEFjdGlvbnMoUmVtb3RlVmlld3MgYmlnKSB7CiAgICAgICAgICAgICBiaWcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5hY3Rpb25zLCBWaWV3LkdPTkUpOwogICAgICAgICAgICAgYmlnLnJlbW92ZUFsbFZpZXdzKFIuaWQuYWN0aW9ucyk7CisKKyAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV9jb250YWluZXIsIFZpZXcuR09ORSk7CisgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMSwgbnVsbCk7CisKKyAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eShSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzIsIFZpZXcuR09ORSk7CisgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMiwgbnVsbCk7CisgICAgICAgICAgICBiaWcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8zLCBWaWV3LkdPTkUpOworICAgICAgICAgICAgYmlnLnNldFRleHRWaWV3VGV4dChSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzMsIG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBSZW1vdGVWaWV3cyBhcHBseVN0YW5kYXJkVGVtcGxhdGVXaXRoQWN0aW9ucyhpbnQgbGF5b3V0SWQpIHsKQEAgLTMyMDksMTggKzMyODYsNjIgQEAKIAogICAgICAgICAgICAgcmVzZXRTdGFuZGFyZFRlbXBsYXRlV2l0aEFjdGlvbnMoYmlnKTsKIAorICAgICAgICAgICAgYm9vbGVhbiB2YWxpZFJlbW90ZUlucHV0ID0gZmFsc2U7CisKICAgICAgICAgICAgIGludCBOID0gbUFjdGlvbnMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKE4gPiAwKSB7CiAgICAgICAgICAgICAgICAgYmlnLnNldFZpZXdWaXNpYmlsaXR5KFIuaWQuYWN0aW9ucywgVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgICAgICBpZiAoTj5NQVhfQUNUSU9OX0JVVFRPTlMpIE49TUFYX0FDVElPTl9CVVRUT05TOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVtb3RlVmlld3MgYnV0dG9uID0gZ2VuZXJhdGVBY3Rpb25CdXR0b24obUFjdGlvbnMuZ2V0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgQWN0aW9uIGFjdGlvbiA9IG1BY3Rpb25zLmdldChpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsaWRSZW1vdGVJbnB1dCB8PSBoYXNWYWxpZFJlbW90ZUlucHV0KGFjdGlvbik7CisKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgUmVtb3RlVmlld3MgYnV0dG9uID0gZ2VuZXJhdGVBY3Rpb25CdXR0b24oYWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYmlnLmFkZFZpZXcoUi5pZC5hY3Rpb25zLCBidXR0b24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ2hhclNlcXVlbmNlW10gcmVwbHlUZXh0ID0gbU4uZXh0cmFzLmdldENoYXJTZXF1ZW5jZUFycmF5KEVYVFJBX1JFTU9URV9JTlBVVF9ISVNUT1JZKTsKKyAgICAgICAgICAgIGlmICh2YWxpZFJlbW90ZUlucHV0ICYmIHJlcGx5VGV4dCAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIHJlcGx5VGV4dC5sZW5ndGggPiAwICYmICFUZXh0VXRpbHMuaXNFbXB0eShyZXBseVRleHRbMF0pKSB7CisgICAgICAgICAgICAgICAgYmlnLnNldFZpZXdWaXNpYmlsaXR5KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciwgVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMSwgcmVwbHlUZXh0WzBdKTsKKworICAgICAgICAgICAgICAgIGlmIChyZXBseVRleHQubGVuZ3RoID4gMSAmJiAhVGV4dFV0aWxzLmlzRW1wdHkocmVwbHlUZXh0WzFdKSkgeworICAgICAgICAgICAgICAgICAgICBiaWcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8yLCBWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgICAgICAgICBiaWcuc2V0VGV4dFZpZXdUZXh0KFIuaWQubm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMiwgcmVwbHlUZXh0WzFdKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmVwbHlUZXh0Lmxlbmd0aCA+IDIgJiYgIVRleHRVdGlscy5pc0VtcHR5KHJlcGx5VGV4dFsyXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpZy5zZXRWaWV3VmlzaWJpbGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5pZC5ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8zLCBWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgICAgICAgICAgICAgYmlnLnNldFRleHRWaWV3VGV4dChSLmlkLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzMsIHJlcGx5VGV4dFsyXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBiaWc7CiAgICAgICAgIH0KIAorICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGFzVmFsaWRSZW1vdGVJbnB1dChBY3Rpb24gYWN0aW9uKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoYWN0aW9uLnRpdGxlKSB8fCBhY3Rpb24uYWN0aW9uSW50ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBXZWlyZCBhY3Rpb25zCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZW1vdGVJbnB1dFtdIHJlbW90ZUlucHV0cyA9IGFjdGlvbi5nZXRSZW1vdGVJbnB1dHMoKTsKKyAgICAgICAgICAgIGlmIChyZW1vdGVJbnB1dHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChSZW1vdGVJbnB1dCByIDogcmVtb3RlSW5wdXRzKSB7CisgICAgICAgICAgICAgICAgQ2hhclNlcXVlbmNlW10gY2hvaWNlcyA9IHIuZ2V0Q2hvaWNlcygpOworICAgICAgICAgICAgICAgIGlmIChyLmdldEFsbG93RnJlZUZvcm1JbnB1dCgpIHx8IChjaG9pY2VzICE9IG51bGwgJiYgY2hvaWNlcy5sZW5ndGggIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIENvbnN0cnVjdCBhIFJlbW90ZVZpZXdzIGZvciB0aGUgZmluYWwgMVUgbm90aWZpY2F0aW9uIGxheW91dC4gSW4gb3JkZXI6CiAgICAgICAgICAqICAgMS4gQ3VzdG9tIGNvbnRlbnRWaWV3IGZyb20gdGhlIGNhbGxlcgpAQCAtMzMwMCw2ICszNDIxLDM3IEBACiAgICAgICAgICAgICByZXR1cm4gYXBwbHlTdGFuZGFyZFRlbXBsYXRlV2l0aEFjdGlvbnMoZ2V0QmlnQmFzZUxheW91dFJlc291cmNlKCkpOwogICAgICAgICB9CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIENvbnN0cnVjdCBhIFJlbW90ZVZpZXdzIGZvciB0aGUgZGlzcGxheSBpbiBwdWJsaWMgY29udGV4dHMgbGlrZSBvbiB0aGUgbG9ja3NjcmVlbi4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBSZW1vdGVWaWV3cyBtYWtlUHVibGljQ29udGVudFZpZXcoKSB7CisgICAgICAgICAgICBpZiAobU4ucHVibGljVmVyc2lvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQnVpbGRlciBidWlsZGVyID0gcmVjb3ZlckJ1aWxkZXIobUNvbnRleHQsIG1OLnB1YmxpY1ZlcnNpb24pOworICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyLm1ha2VDb250ZW50VmlldygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQnVuZGxlIHNhdmVkQnVuZGxlID0gbU4uZXh0cmFzOworICAgICAgICAgICAgU3R5bGUgc3R5bGUgPSBtU3R5bGU7CisgICAgICAgICAgICBtU3R5bGUgPSBudWxsOworICAgICAgICAgICAgSWNvbiBsYXJnZUljb24gPSBtTi5tTGFyZ2VJY29uOworICAgICAgICAgICAgbU4ubUxhcmdlSWNvbiA9IG51bGw7CisgICAgICAgICAgICBCdW5kbGUgcHVibGljRXh0cmFzID0gbmV3IEJ1bmRsZSgpOworICAgICAgICAgICAgcHVibGljRXh0cmFzLnB1dEJvb2xlYW4oRVhUUkFfU0hPV19XSEVOLAorICAgICAgICAgICAgICAgICAgICBzYXZlZEJ1bmRsZS5nZXRCb29sZWFuKEVYVFJBX1NIT1dfV0hFTikpOworICAgICAgICAgICAgcHVibGljRXh0cmFzLnB1dEJvb2xlYW4oRVhUUkFfU0hPV19DSFJPTk9NRVRFUiwKKyAgICAgICAgICAgICAgICAgICAgc2F2ZWRCdW5kbGUuZ2V0Qm9vbGVhbihFWFRSQV9TSE9XX0NIUk9OT01FVEVSKSk7CisgICAgICAgICAgICBwdWJsaWNFeHRyYXMucHV0Q2hhclNlcXVlbmNlKEVYVFJBX1RJVExFLAorICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcubm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0KSk7CisgICAgICAgICAgICBtTi5leHRyYXMgPSBwdWJsaWNFeHRyYXM7CisgICAgICAgICAgICBmaW5hbCBSZW1vdGVWaWV3cyBwdWJsaWNWaWV3ID0gYXBwbHlTdGFuZGFyZFRlbXBsYXRlKGdldEJhc2VMYXlvdXRSZXNvdXJjZSgpKTsKKyAgICAgICAgICAgIG1OLmV4dHJhcyA9IHNhdmVkQnVuZGxlOworICAgICAgICAgICAgbU4ubUxhcmdlSWNvbiA9IGxhcmdlSWNvbjsKKyAgICAgICAgICAgIG1TdHlsZSA9IHN0eWxlOworICAgICAgICAgICAgcmV0dXJuIHB1YmxpY1ZpZXc7CisgICAgICAgIH0KKworCiAKICAgICAgICAgcHJpdmF0ZSBSZW1vdGVWaWV3cyBnZW5lcmF0ZUFjdGlvbkJ1dHRvbihBY3Rpb24gYWN0aW9uKSB7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHRvbWJzdG9uZSA9IChhY3Rpb24uYWN0aW9uSW50ZW50ID09IG51bGwpOwpAQCAtMzMxOCw3ICszNDcwLDYgQEAKICAgICAgICAgICAgIGlmIChtTi5jb2xvciAhPSBDT0xPUl9ERUZBVUxUKSB7CiAgICAgICAgICAgICAgICAgYnV0dG9uLnNldFRleHRDb2xvcihSLmlkLmFjdGlvbjAsIG1OLmNvbG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByb2Nlc3NMZWdhY3lBY3Rpb24oYWN0aW9uLCBidXR0b24pOwogICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbjsKICAgICAgICAgfQogCkBAIC0zMzMwLDE0ICszNDgxLDYgQEAKICAgICAgICAgICAgIHJldHVybiBnZXRDb2xvclV0aWwoKSAhPSBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NMZWdhY3lBY3Rpb24oQWN0aW9uIGFjdGlvbiwgUmVtb3RlVmlld3MgYnV0dG9uKSB7Ci0gICAgICAgICAgICBpZiAoIWlzTGVnYWN5KCkgfHwgZ2V0Q29sb3JVdGlsKCkuaXNHcmF5c2NhbGVJY29uKG1Db250ZXh0LCBhY3Rpb24uZ2V0SWNvbigpKSkgewotICAgICAgICAgICAgICAgIGJ1dHRvbi5zZXRUZXh0Vmlld0NvbXBvdW5kRHJhd2FibGVzUmVsYXRpdmVDb2xvckZpbHRlcihSLmlkLmFjdGlvbjAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRDb2xvcihSLmNvbG9yLm5vdGlmaWNhdGlvbl9hY3Rpb25fY29sb3JfZmlsdGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRlckR1ZmYuTW9kZS5NVUxUSVBMWSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBwcm9jZXNzTGVnYWN5VGV4dChDaGFyU2VxdWVuY2UgY2hhclNlcXVlbmNlKSB7CiAgICAgICAgICAgICBpZiAoaXNMZWdhY3koKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xvclV0aWwoKS5pbnZlcnRDaGFyU2VxdWVuY2VDb2xvcnMoY2hhclNlcXVlbmNlKTsKQEAgLTM3OTgsMTIgKzM5NDEsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFRleHRWaWV3VGV4dChSLmlkLnRleHQsIG1CdWlsZGVyLnByb2Nlc3NMZWdhY3lUZXh0KG1TdW1tYXJ5VGV4dCkpOwogICAgICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFZpZXdWaXNpYmlsaXR5KFIuaWQubGluZTMsIFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgaW1hZ2VNaW5IZWlnaHQgPSBtQnVpbGRlci5tQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgICAgIFIuZGltZW4ubm90aWZpY2F0aW9uX2JpZ19waWN0dXJlX2NvbnRlbnRfbWluX2hlaWdodF93aXRoX3BpY3R1cmUpOwotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHNwYWNlIGZvciB0aGUgcmlnaHQgaW1hZ2UsIHNvIHdlJ3JlIGVuZm9yY2luZyBhIG1pbmhlaWdodCBpZiB0aGVyZQotICAgICAgICAgICAgLy8gaXMgYSBwaWN0dXJlLgotICAgICAgICAgICAgaW50IG1pbkhlaWdodCA9IChtQnVpbGRlci5tTi5tTGFyZ2VJY29uID09IG51bGwpID8gMCA6IGltYWdlTWluSGVpZ2h0OwotICAgICAgICAgICAgY29udGVudFZpZXcuc2V0SW50KFIuaWQubm90aWZpY2F0aW9uX21haW5fY29sdW1uLCAic2V0TWluaW11bUhlaWdodCIsIG1pbkhlaWdodCk7CisgICAgICAgICAgICBtQnVpbGRlci5zZXRDb250ZW50TWluSGVpZ2h0KGNvbnRlbnRWaWV3LCBtQnVpbGRlci5tTi5tTGFyZ2VJY29uICE9IG51bGwpOwogCiAgICAgICAgICAgICBpZiAobUJpZ0xhcmdlSWNvblNldCkgewogICAgICAgICAgICAgICAgIG1CdWlsZGVyLm1OLm1MYXJnZUljb24gPSBvbGRMYXJnZUljb247CkBAIC0zODcwLDggKzQwMDgsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQmlnVGV4dFN0eWxlIGV4dGVuZHMgU3R5bGUgewogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTElORVMgPSAxMzsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVTX0NPTlNVTUVEX0JZX0FDVElPTlMgPSAzOwotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORVNfQ09OU1VNRURfQllfU1VNTUFSWSA9IDI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FU19DT05TVU1FRF9CWV9BQ1RJT05TID0gNDsKIAogICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtQmlnVGV4dDsKIApAQCAtMzk0MSw4ICs0MDc4LDEwIEBACiAKICAgICAgICAgICAgIG1CdWlsZGVyLmdldEFsbEV4dHJhcygpLnB1dENoYXJTZXF1ZW5jZShFWFRSQV9URVhULCBvbGRCdWlsZGVyQ29udGVudFRleHQpOwogCi0gICAgICAgICAgICBjb250ZW50Vmlldy5zZXRUZXh0Vmlld1RleHQoUi5pZC5iaWdfdGV4dCwgbUJ1aWxkZXIucHJvY2Vzc0xlZ2FjeVRleHQobUJpZ1RleHQpKTsKLSAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldFZpZXdWaXNpYmlsaXR5KFIuaWQuYmlnX3RleHQsIFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICBDaGFyU2VxdWVuY2UgYmlnVGV4dFRleHQgPSBtQnVpbGRlci5wcm9jZXNzTGVnYWN5VGV4dChtQmlnVGV4dCk7CisgICAgICAgICAgICBjb250ZW50Vmlldy5zZXRUZXh0Vmlld1RleHQoUi5pZC5iaWdfdGV4dCwgYmlnVGV4dFRleHQpOworICAgICAgICAgICAgY29udGVudFZpZXcuc2V0Vmlld1Zpc2liaWxpdHkoUi5pZC5iaWdfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgVGV4dFV0aWxzLmlzRW1wdHkoYmlnVGV4dFRleHQpID8gVmlldy5HT05FIDogVmlldy5WSVNJQkxFKTsKICAgICAgICAgICAgIGNvbnRlbnRWaWV3LnNldEludChSLmlkLmJpZ190ZXh0LCAic2V0TWF4TGluZXMiLCBjYWxjdWxhdGVNYXhMaW5lcygpKTsKIAogICAgICAgICAgICAgbUJ1aWxkZXIuYWRkUHJvZmlsZUJhZGdlKGNvbnRlbnRWaWV3LCBSLmlkLnByb2ZpbGVfYmFkZ2VfbGFyZ2VfdGVtcGxhdGUpOwpAQCAtMzk1NSwxNCArNDA5NCw5IEBACiAgICAgICAgIHByaXZhdGUgaW50IGNhbGN1bGF0ZU1heExpbmVzKCkgewogICAgICAgICAgICAgaW50IGxpbmVDb3VudCA9IE1BWF9MSU5FUzsKICAgICAgICAgICAgIGJvb2xlYW4gaGFzQWN0aW9ucyA9IG1CdWlsZGVyLm1BY3Rpb25zLnNpemUoKSA+IDA7Ci0gICAgICAgICAgICBib29sZWFuIGhhc1N1bW1hcnkgPSAobVN1bW1hcnlUZXh0U2V0ID8gbVN1bW1hcnlUZXh0Ci0gICAgICAgICAgICAgICAgICAgIDogbUJ1aWxkZXIuZ2V0QWxsRXh0cmFzKCkuZ2V0Q2hhclNlcXVlbmNlKEVYVFJBX1NVQl9URVhUKSkgIT0gbnVsbDsKICAgICAgICAgICAgIGlmIChoYXNBY3Rpb25zKSB7CiAgICAgICAgICAgICAgICAgbGluZUNvdW50IC09IExJTkVTX0NPTlNVTUVEX0JZX0FDVElPTlM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzU3VtbWFyeSkgewotICAgICAgICAgICAgICAgIGxpbmVDb3VudCAtPSBMSU5FU19DT05TVU1FRF9CWV9TVU1NQVJZOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGxpbmVDb3VudDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25NYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvTm90aWZpY2F0aW9uTWFuYWdlci5qYXZhCmluZGV4IDg5NjEwZTkuLjlhM2M4MjAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9Ob3RpZmljYXRpb25NYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL05vdGlmaWNhdGlvbk1hbmFnZXIuamF2YQpAQCAtMTI4LDYgKzEyOCwxNCBAQAogICAgICAgICAgICAgPSAiYW5kcm9pZC5hcHAuYWN0aW9uLklOVEVSUlVQVElPTl9GSUxURVJfQ0hBTkdFRCI7CiAKICAgICAvKioKKyAgICAgKiBJbnRlbnQgdGhhdCBpcyBicm9hZGNhc3Qgd2hlbiB0aGUgc3RhdGUgb2YgZ2V0Q3VycmVudEludGVycnVwdGlvbkZpbHRlcigpIGNoYW5nZXMuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAU2RrQ29uc3RhbnQoU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlLkJST0FEQ0FTVF9JTlRFTlRfQUNUSU9OKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9JTlRFUlJVUFRJT05fRklMVEVSX0NIQU5HRURfSU5URVJOQUwKKyAgICAgICAgICAgID0gImFuZHJvaWQuYXBwLmFjdGlvbi5JTlRFUlJVUFRJT05fRklMVEVSX0NIQU5HRURfSU5URVJOQUwiOworCisgICAgLyoqCiAgICAgICoge0BsaW5rICNnZXRDdXJyZW50SW50ZXJydXB0aW9uRmlsdGVyKCkgSW50ZXJydXB0aW9uIGZpbHRlcn0gY29uc3RhbnQgLQogICAgICAqICAgICBOb3JtYWwgaW50ZXJydXB0aW9uIGZpbHRlci4KICAgICAgKi8KQEAgLTYyOSwxMCArNjM3LDEyIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUU19VTlNFVCA9IC0xOwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMgPSAxIDw8IDA7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgPSAxIDw8IDE7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiA9IDEgPDwgMjsKIAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBBTExfU1VQUFJFU1NFRF9FRkZFQ1RTID0gewogICAgICAgICAgICAgICAgIFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUywKICAgICAgICAgICAgICAgICBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLLAorICAgICAgICAgICAgICAgIFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTiwKICAgICAgICAgfTsKIAogICAgICAgICAvKioKQEAgLTc0Miw2ICs3NTIsNyBAQAogICAgICAgICAgICAgc3dpdGNoIChlZmZlY3QpIHsKICAgICAgICAgICAgICAgICBjYXNlIFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUzogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFMiOwogICAgICAgICAgICAgICAgIGNhc2UgU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSzogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9QRUVLIjsKKyAgICAgICAgICAgICAgICBjYXNlIFNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTjogcmV0dXJuICJTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04iOwogICAgICAgICAgICAgICAgIGNhc2UgU1VQUFJFU1NFRF9FRkZFQ1RTX1VOU0VUOiByZXR1cm4gIlNVUFBSRVNTRURfRUZGRUNUU19VTlNFVCI7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICJVTktOT1dOXyIgKyBlZmZlY3Q7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU3RhdHVzQmFyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1N0YXR1c0Jhck1hbmFnZXIuamF2YQppbmRleCA1ZThhZDY4Li5iODk5MTE2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU3RhdHVzQmFyTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TdGF0dXNCYXJNYW5hZ2VyLmphdmEKQEAgLTE4MCwxMCArMTgwLDE3IEBACiAgICAgICogRXhwYW5kIHRoZSBzZXR0aW5ncyBwYW5lbC4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBleHBhbmRTZXR0aW5nc1BhbmVsKCkgeworICAgICAgICBleHBhbmRTZXR0aW5nc1BhbmVsKG51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEV4cGFuZCB0aGUgc2V0dGluZ3MgcGFuZWwgYW5kIG9wZW4gYSBzdWJQYW5lbCwgcGFzcyBudWxsIHRvIGp1c3Qgb3BlbiB0aGUgc2V0dGluZ3MgcGFuZWwuCisgICAgICovCisgICAgcHVibGljIHZvaWQgZXhwYW5kU2V0dGluZ3NQYW5lbChTdHJpbmcgc3ViUGFuZWwpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIElTdGF0dXNCYXJTZXJ2aWNlIHN2YyA9IGdldFNlcnZpY2UoKTsKICAgICAgICAgICAgIGlmIChzdmMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN2Yy5leHBhbmRTZXR0aW5nc1BhbmVsKCk7CisgICAgICAgICAgICAgICAgc3ZjLmV4cGFuZFNldHRpbmdzUGFuZWwoc3ViUGFuZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIC8vIHN5c3RlbSBwcm9jZXNzIGlzIGRlYWQgYW55d2F5LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1N5c3RlbVNlcnZpY2VSZWdpc3RyeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1N5c3RlbVNlcnZpY2VSZWdpc3RyeS5qYXZhCmluZGV4IDI4OGEyY2IuLjg5ZDUyZjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9TeXN0ZW1TZXJ2aWNlUmVnaXN0cnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvU3lzdGVtU2VydmljZVJlZ2lzdHJ5LmphdmEKQEAgLTI0Nyw3ICsyNDcsNyBAQAogICAgICAgICAgICAgICAgIG5ldyBDYWNoZWRTZXJ2aWNlRmV0Y2hlcjxEb3dubG9hZE1hbmFnZXI+KCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgRG93bmxvYWRNYW5hZ2VyIGNyZWF0ZVNlcnZpY2UoQ29udGV4dEltcGwgY3R4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3dubG9hZE1hbmFnZXIoY3R4LmdldENvbnRlbnRSZXNvbHZlcigpLCBjdHguZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEb3dubG9hZE1hbmFnZXIoY3R4KTsKICAgICAgICAgICAgIH19KTsKIAogICAgICAgICByZWdpc3RlclNlcnZpY2UoQ29udGV4dC5CQVRURVJZX1NFUlZJQ0UsIEJhdHRlcnlNYW5hZ2VyLmNsYXNzLApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1VpQXV0b21hdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1VpQXV0b21hdGlvbi5qYXZhCmluZGV4IGY3ODQ4ZjkuLmRjZTJlNTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9VaUF1dG9tYXRpb24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uLmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLklBY2Nlc3NpYmlsaXR5U2VydmljZUNsaWVudDsKIGltcG9ydCBhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLklBY2Nlc3NpYmlsaXR5U2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKQEAgLTg1Niw2ICs4NTcsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KKyAgICBAVGVzdEFwaQogICAgIHB1YmxpYyBib29sZWFuIGdyYW50UnVudGltZVBlcm1pc3Npb24oU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgcGVybWlzc2lvbiwKICAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlckhhbmRsZSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CkBAIC04ODQsNiArODg2LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCisgICAgQFRlc3RBcGkKICAgICBwdWJsaWMgYm9vbGVhbiByZXZva2VSdW50aW1lUGVybWlzc2lvbihTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBwZXJtaXNzaW9uLAogICAgICAgICAgICAgVXNlckhhbmRsZSB1c2VySGFuZGxlKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKQEAgLTEwMjgsNiArMTAzMSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGUsIGZsb2F0IGNlbnRlclgsIGZsb2F0IGNlbnRlclkpIHsKICAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGVyZm9ybUdlc3R1cmVSZXN1bHQoaW50IHNlcXVlbmNlLCBib29sZWFuIGNvbXBsZXRlZFN1Y2Nlc3NmdWxseSkgeworICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL1dhbGxwYXBlck1hbmFnZXIuamF2YQppbmRleCAyMmU3OWI2Li41YjViYmE0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvV2FsbHBhcGVyTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9XYWxscGFwZXJNYW5hZ2VyLmphdmEKQEAgLTUyLDYgKzUyLDggQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsOwogCitpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOworCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKQEAgLTMwOSwxMSArMzExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoT3V0T2ZNZW1vcnlFcnJvciBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCBkZWNvZGUgZmlsZSIsIGUpOwogICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoZmQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTMyMSw3ICszMTksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcHJpdmF0ZSBCaXRtYXAgZ2V0RGVmYXVsdFdhbGxwYXBlckxvY2tlZChDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gb3BlbkRlZmF1bHRXYWxscGFwZXIoY29udGV4dCk7CiAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkgewpAQCAtMzMxLDExICszMjksNyBAQAogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE91dE9mTWVtb3J5RXJyb3IgZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJDYW4ndCBkZWNvZGUgc3RyZWFtIiwgZSk7CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZQotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KGlzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTczOCwzMCArNzMyLDY1IEBACiAgICAgICAgICAgICAgICAgICAgIGZvcyA9IG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VPdXRwdXRTdHJlYW0oZmQpOwogICAgICAgICAgICAgICAgICAgICBzZXRXYWxscGFwZXIocmVzb3VyY2VzLm9wZW5SYXdSZXNvdXJjZShyZXNpZCksIGZvcyk7CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseShmb3MpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIElnbm9yZQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHN5c3RlbSB3YWxscGFwZXIgdG8gYSBiaXRtYXAuICBUaGUgZ2l2ZW4gYml0bWFwIGlzCiAgICAgICogY29udmVydGVkIHRvIGEgUE5HIGFuZCBzdG9yZWQgYXMgdGhlIHdhbGxwYXBlci4gIE9uIHN1Y2Nlc3MsIHRoZSBpbnRlbnQKICAgICAgKiB7QGxpbmsgSW50ZW50I0FDVElPTl9XQUxMUEFQRVJfQ0hBTkdFRH0gaXMgYnJvYWRjYXN0LgogICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICoge0BsaW5rICNzZXRCaXRtYXAoQml0bWFwLCBSZWN0LCBib29sZWFuKX0gYW5kIHBhc3Npbmcge0Bjb2RlIG51bGx9IGZvciB0aGUKKyAgICAgKiB7QGNvZGUgdmlzaWJsZUNyb3B9IHJlY3RhbmdsZSBhbmQge0Bjb2RlIHRydWV9IGZvciB0aGUge0Bjb2RlIGFsbG93QmFja3VwfQorICAgICAqIHBhcmFtZXRlci4KKyAgICAgKgogICAgICAqIDxwPlRoaXMgbWV0aG9kIHJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gaG9sZCB0aGUgcGVybWlzc2lvbgogICAgICAqIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jU0VUX1dBTExQQVBFUn0uCiAgICAgICoKICAgICAgKiBAcGFyYW0gYml0bWFwIFRoZSBiaXRtYXAgdG8gc2F2ZS4KICAgICAgKgotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzIHJldmVydGluZyB0byB0aGUgYnVpbHQtaW4KLSAgICAgKiB3YWxscGFwZXIuCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgd2FsbHBhcGVyCisgICAgICogICAgIHRvIHRoZSBwcm92aWRlZCBpbWFnZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRCaXRtYXAoQml0bWFwIGJpdG1hcCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc2V0Qml0bWFwKGJpdG1hcCwgbnVsbCwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHN5c3RlbSB3YWxscGFwZXIgdG8gYSBiaXRtYXAsIHNwZWNpZnlpbmcgYSBoaW50IGFib3V0CisgICAgICogd2hpY2ggc3VicmVjdGFuZ2xlIG9mIHRoZSBmdWxsIGltYWdlIGlzIHRvIGJlIHZpc2libGUuICBUaGUgT1Mgd2lsbCB0aGVuCisgICAgICogdHJ5IHRvIGJlc3QgcHJlc2VudCB0aGUgZ2l2ZW4gcG9ydGlvbiBvZiB0aGUgZnVsbCBpbWFnZSBhcyB0aGUgc3RhdGljIHN5c3RlbQorICAgICAqIHdhbGxwYXBlciBpbWFnZS4gIE9uIHN1Y2Nlc3MsIHRoZSBpbnRlbnQKKyAgICAgKiB7QGxpbmsgSW50ZW50I0FDVElPTl9XQUxMUEFQRVJfQ0hBTkdFRH0gaXMgYnJvYWRjYXN0LgorICAgICAqCisgICAgICogPHA+UGFzc2luZyB7QGNvZGUgbnVsbH0gYXMgdGhlIHtAY29kZSB2aXNpYmxlSGludH0gcGFyYW1ldGVyIGlzIGVxdWl2YWxlbnQgdG8KKyAgICAgKiBwYXNzaW5nICgwLCAwLCB7QGNvZGUgZnVsbEltYWdlLmdldFdpZHRoKCl9LCB7QGNvZGUgZnVsbEltYWdlLmdldEhlaWdodCgpfSkuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1NFVF9XQUxMUEFQRVJ9LgorICAgICAqCisgICAgICogQHBhcmFtIGZ1bGxJbWFnZSBBIGJpdG1hcCB0aGF0IHdpbGwgc3VwcGx5IHRoZSB3YWxscGFwZXIgaW1hZ2VyeS4gCisgICAgICogQHBhcmFtIHZpc2libGVDcm9wSGludCBUaGUgcmVjdGFuZ3VsYXIgc3VicmVnaW9uIG9mIHtAY29kZSBmdWxsSW1hZ2V9IHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgIGRpc3BsYXllZCBhcyB3YWxscGFwZXIuICBQYXNzaW5nIHtAY29kZSBudWxsfSBmb3IgdGhpcyBwYXJhbWV0ZXIgbWVhbnMgdGhhdAorICAgICAqICAgICB0aGUgZnVsbCBpbWFnZSBzaG91bGQgYmUgZGlzcGxheWVkIGlmIHBvc3NpYmxlIGdpdmVuIHRoZSBpbWFnZSdzIGFuZCBkZXZpY2UncworICAgICAqICAgICBhc3BlY3QgcmF0aW9zLCBldGMuIAorICAgICAqIEBwYXJhbSBhbGxvd0JhY2t1cCB7QGNvZGUgdHJ1ZX0gaWYgdGhlIE9TIGlzIHBlcm1pdHRlZCB0byBiYWNrIHVwIHRoaXMgd2FsbHBhcGVyCisgICAgICogICAgIGltYWdlIGZvciByZXN0b3JlIHRvIGEgZnV0dXJlIGRldmljZTsge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICoKKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IHRoZSB3YWxscGFwZXIKKyAgICAgKiAgICAgdG8gdGhlIHByb3ZpZGVkIGltYWdlLgorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSB7QGNvZGUgdmlzaWJsZUNyb3BIaW50fSByZWN0YW5nbGUgaXMKKyAgICAgKiAgICAgZW1wdHkgb3IgaW52YWxpZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRCaXRtYXAoQml0bWFwIGZ1bGxJbWFnZSwgUmVjdCB2aXNpYmxlQ3JvcEhpbnQsIGJvb2xlYW4gYWxsb3dCYWNrdXApCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2YWxpZGF0ZVJlY3QodmlzaWJsZUNyb3BIaW50KTsKICAgICAgICAgaWYgKHNHbG9iYWxzLm1TZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIldhbGxwYXBlclNlcnZpY2Ugbm90IHJ1bm5pbmciKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc3NSwxNyArODA0LDIxIEBACiAgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGZvcyA9IG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VPdXRwdXRTdHJlYW0oZmQpOwotICAgICAgICAgICAgICAgIGJpdG1hcC5jb21wcmVzcyhCaXRtYXAuQ29tcHJlc3NGb3JtYXQuUE5HLCA5MCwgZm9zKTsKKyAgICAgICAgICAgICAgICBmdWxsSW1hZ2UuY29tcHJlc3MoQml0bWFwLkNvbXByZXNzRm9ybWF0LlBORywgOTAsIGZvcyk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIGlmIChmb3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoZm9zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIElnbm9yZQogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHZhbGlkYXRlUmVjdChSZWN0IHJlY3QpIHsKKyAgICAgICAgaWYgKHJlY3QgIT0gbnVsbCAmJiByZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidmlzaWJsZUNyb3AgcmVjdGFuZ2xlIG11c3QgYmUgdmFsaWQgYW5kIG5vbi1lbXB0eSIpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ2hhbmdlIHRoZSBjdXJyZW50IHN5c3RlbSB3YWxscGFwZXIgdG8gYSBzcGVjaWZpYyBieXRlIHN0cmVhbS4gIFRoZQogICAgICAqIGdpdmUgSW5wdXRTdHJlYW0gaXMgY29waWVkIGludG8gcGVyc2lzdGVudCBzdG9yYWdlIGFuZCB3aWxsIG5vdyBiZQpAQCAtNzkzLDE1ICs4MjYsNjAgQEAKICAgICAgKiBpbWFnZS4gIE9uIHN1Y2Nlc3MsIHRoZSBpbnRlbnQge0BsaW5rIEludGVudCNBQ1RJT05fV0FMTFBBUEVSX0NIQU5HRUR9CiAgICAgICogaXMgYnJvYWRjYXN0LgogICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgICoge0BsaW5rICNzZXRTdHJlYW0oSW5wdXRTdHJlYW0sIFJlY3QsIGJvb2xlYW4pfSBhbmQgcGFzc2luZyB7QGNvZGUgbnVsbH0gZm9yIHRoZQorICAgICAqIHtAY29kZSB2aXNpYmxlQ3JvcH0gcmVjdGFuZ2xlIGFuZCB7QGNvZGUgdHJ1ZX0gZm9yIHRoZSB7QGNvZGUgYWxsb3dCYWNrdXB9CisgICAgICogcGFyYW1ldGVyLgorICAgICAqCiAgICAgICogPHA+VGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBob2xkIHRoZSBwZXJtaXNzaW9uCiAgICAgICoge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNTRVRfV0FMTFBBUEVSfS4KICAgICAgKgotICAgICAqIEBwYXJhbSBkYXRhIEEgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIHJhdyBkYXRhIHRvIGluc3RhbGwgYXMgYSB3YWxscGFwZXIuCisgICAgICogQHBhcmFtIGJpdG1hcERhdGEgQSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmF3IGRhdGEgdG8gaW5zdGFsbCBhcyBhIHdhbGxwYXBlci4KICAgICAgKgotICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzIHJldmVydGluZyB0byB0aGUgYnVpbHQtaW4KLSAgICAgKiB3YWxscGFwZXIuCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBlcnJvciBvY2N1cnMgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgd2FsbHBhcGVyCisgICAgICogICAgIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBpbWFnZSBkYXRhLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFN0cmVhbShJbnB1dFN0cmVhbSBkYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHNldFN0cmVhbShJbnB1dFN0cmVhbSBiaXRtYXBEYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBzZXRTdHJlYW0oYml0bWFwRGF0YSwgbnVsbCwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFdhbGxwYXBlcihJbnB1dFN0cmVhbSBkYXRhLCBGaWxlT3V0cHV0U3RyZWFtIGZvcykKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVszMjc2OF07CisgICAgICAgIGludCBhbXQ7CisgICAgICAgIHdoaWxlICgoYW10PWRhdGEucmVhZChidWZmZXIpKSA+IDApIHsKKyAgICAgICAgICAgIGZvcy53cml0ZShidWZmZXIsIDAsIGFtdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGFuZ2UgdGhlIGN1cnJlbnQgc3lzdGVtIHdhbGxwYXBlciB0byBhIHNwZWNpZmljIGJ5dGUgc3RyZWFtLCBzcGVjaWZ5aW5nIGEKKyAgICAgKiBoaW50IGFib3V0IHdoaWNoIHN1YnJlY3RhbmdsZSBvZiB0aGUgZnVsbCBpbWFnZSBpcyB0byBiZSB2aXNpYmxlLiAgVGhlIE9TIHdpbGwKKyAgICAgKiB0aGVuIHRyeSB0byBiZXN0IHByZXNlbnQgdGhlIGdpdmVuIHBvcnRpb24gb2YgdGhlIGZ1bGwgaW1hZ2UgYXMgdGhlIHN0YXRpYyBzeXN0ZW0KKyAgICAgKiB3YWxscGFwZXIgaW1hZ2UuICBUaGUgZGF0YSBmcm9tIHRoZSBnaXZlbiBJbnB1dFN0cmVhbSBpcyBjb3BpZWQgaW50byBwZXJzaXN0ZW50CisgICAgICogc3RvcmFnZSBhbmQgd2lsbCB0aGVuIGJlIHVzZWQgYXMgdGhlIHN5c3RlbSB3YWxscGFwZXIuICBDdXJyZW50bHkgdGhlIGRhdGEgbXVzdAorICAgICAqIGJlIGVpdGhlciBhIEpQRUcgb3IgUE5HIGltYWdlLiAgT24gc3VjY2VzcywgdGhlIGludGVudAorICAgICAqIHtAbGluayBJbnRlbnQjQUNUSU9OX1dBTExQQVBFUl9DSEFOR0VEfSBpcyBicm9hZGNhc3QuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGhvbGQgdGhlIHBlcm1pc3Npb24KKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1NFVF9XQUxMUEFQRVJ9LgorICAgICAqCisgICAgICogQHBhcmFtIGJpdG1hcERhdGEgQSBzdHJlYW0gY29udGFpbmluZyB0aGUgcmF3IGRhdGEgdG8gaW5zdGFsbCBhcyBhIHdhbGxwYXBlci4KKyAgICAgKiBAcGFyYW0gdmlzaWJsZUNyb3BIaW50IFRoZSByZWN0YW5ndWxhciBzdWJyZWdpb24gb2YgdGhlIHN0cmVhbWVkIGltYWdlIHRoYXQgc2hvdWxkIGJlCisgICAgICogICAgIGRpc3BsYXllZCBhcyB3YWxscGFwZXIuICBQYXNzaW5nIHtAY29kZSBudWxsfSBmb3IgdGhpcyBwYXJhbWV0ZXIgbWVhbnMgdGhhdAorICAgICAqICAgICB0aGUgZnVsbCBpbWFnZSBzaG91bGQgYmUgZGlzcGxheWVkIGlmIHBvc3NpYmxlIGdpdmVuIHRoZSBpbWFnZSdzIGFuZCBkZXZpY2UncworICAgICAqICAgICBhc3BlY3QgcmF0aW9zLCBldGMuCisgICAgICogQHBhcmFtIGFsbG93QmFja3VwIHtAY29kZSB0cnVlfSBpZiB0aGUgT1MgaXMgcGVybWl0dGVkIHRvIGJhY2sgdXAgdGhpcyB3YWxscGFwZXIKKyAgICAgKiAgICAgaW1hZ2UgZm9yIHJlc3RvcmUgdG8gYSBmdXR1cmUgZGV2aWNlOyB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gSWYgYW4gZXJyb3Igb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlIHdhbGxwYXBlcgorICAgICAqICAgICBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW1hZ2UgZGF0YS4KKyAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUge0Bjb2RlIHZpc2libGVDcm9wSGludH0gcmVjdGFuZ2xlIGlzCisgICAgICogICAgIGVtcHR5IG9yIGludmFsaWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U3RyZWFtKElucHV0U3RyZWFtIGJpdG1hcERhdGEsIFJlY3QgdmlzaWJsZUNyb3BIaW50LCBib29sZWFuIGFsbG93QmFja3VwKQorICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgdmFsaWRhdGVSZWN0KHZpc2libGVDcm9wSGludCk7CiAgICAgICAgIGlmIChzR2xvYmFscy5tU2VydmljZSA9PSBudWxsKSB7CiAgICAgICAgICAgICBMb2cudyhUQUcsICJXYWxscGFwZXJTZXJ2aWNlIG5vdCBydW5uaW5nIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC04MTUsMjYgKzg5MywxNSBAQAogICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBmb3MgPSBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlT3V0cHV0U3RyZWFtKGZkKTsKLSAgICAgICAgICAgICAgICBzZXRXYWxscGFwZXIoZGF0YSwgZm9zKTsKKyAgICAgICAgICAgICAgICBzZXRXYWxscGFwZXIoYml0bWFwRGF0YSwgZm9zKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseShmb3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgLy8gSWdub3JlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc2V0V2FsbHBhcGVyKElucHV0U3RyZWFtIGRhdGEsIEZpbGVPdXRwdXRTdHJlYW0gZm9zKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzMyNzY4XTsKLSAgICAgICAgaW50IGFtdDsKLSAgICAgICAgd2hpbGUgKChhbXQ9ZGF0YS5yZWFkKGJ1ZmZlcikpID4gMCkgewotICAgICAgICAgICAgZm9zLndyaXRlKGJ1ZmZlciwgMCwgYW10KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8qKgogICAgICAqIFJldHVybiB3aGV0aGVyIGFueSB1c2VycyBhcmUgY3VycmVudGx5IHNldCB0byB1c2UgdGhlIHdhbGxwYXBlcgogICAgICAqIHdpdGggdGhlIGdpdmVuIHJlc291cmNlIElELiAgVGhhdCBpcywgdGhlaXIgd2FsbHBhcGVyIGhhcyBiZWVuCkBAIC05MTUsOCArOTgyLDggQEAKICAgICAgKiB0aGUgc2l6ZSBvZiB0aGVpciB3b3Jrc3BhY2UuCiAgICAgICoKICAgICAgKiA8cD5Ob3RlIGRldmVsb3BlcnMsIHdobyBkb24ndCBzZWVtIHRvIGJlIHJlYWRpbmcgdGhpcy4gIFRoaXMgaXMKLSAgICAgKiBmb3IgPGVtPmhvbWUgc2NyZWVuczwvZW0+IHRvIHRlbGwgd2hhdCBzaXplIHdhbGxwYXBlciB0aGV5IHdvdWxkIGxpa2UuCi0gICAgICogTm9ib2R5IGVsc2Ugc2hvdWxkIGJlIGNhbGxpbmcgdGhpcyEgIENlcnRhaW5seSBub3Qgb3RoZXIgbm9uLWhvbWUtc2NyZWVuCisgICAgICogZm9yIDxlbT5ob21lIGFwcHM8L2VtPiB0byB0ZWxsIHdoYXQgc2l6ZSB3YWxscGFwZXIgdGhleSB3b3VsZCBsaWtlLgorICAgICAqIE5vYm9keSBlbHNlIHNob3VsZCBiZSBjYWxsaW5nIHRoaXMhICBDZXJ0YWlubHkgbm90IG90aGVyIG5vbi1ob21lCiAgICAgICogYXBwcyB0aGF0IGNoYW5nZSB0aGUgd2FsbHBhcGVyLiAgVGhvc2UgYXBwcyBhcmUgc3VwcG9zZWQgdG8KICAgICAgKiA8Yj5yZXRyaWV2ZTwvYj4gdGhlIHN1Z2dlc3RlZCBzaXplIHNvIHRoZXkgY2FuIGNvbnN0cnVjdCBhIHdhbGxwYXBlcgogICAgICAqIHRoYXQgbWF0Y2hlcyBpdC4KQEAgLTEwNTMsMTEgKzExMjAsMTEgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjdXJyZW50IHdhbGxwYXBlciB3aXRoaW4gYW55IGxhcmdlciBzcGFjZSwgd2hlbgorICAgICAqIFNldCB0aGUgZGlzcGxheSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB3YWxscGFwZXIgd2l0aGluIGFueSBsYXJnZXIgc3BhY2UsIHdoZW4KICAgICAgKiB0aGF0IHdhbGxwYXBlciBpcyB2aXNpYmxlIGJlaGluZCB0aGUgZ2l2ZW4gd2luZG93LiAgVGhlIFggYW5kIFkgb2Zmc2V0cwogICAgICAqIGFyZSBmbG9hdGluZyBwb2ludCBudW1iZXJzIHJhbmdpbmcgZnJvbSAwIHRvIDEsIHJlcHJlc2VudGluZyB3aGVyZSB0aGUKICAgICAgKiB3YWxscGFwZXIgc2hvdWxkIGJlIHBvc2l0aW9uZWQgd2l0aGluIHRoZSBzY3JlZW4gc3BhY2UuICBUaGVzZSBvbmx5Ci0gICAgICogbWFrZSBzZW5zZSB3aGVuIHRoZSB3YWxscGFwZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHNjcmVlbi4KKyAgICAgKiBtYWtlIHNlbnNlIHdoZW4gdGhlIHdhbGxwYXBlciBpcyBsYXJnZXIgdGhhbiB0aGUgZGlzcGxheS4KICAgICAgKiAKICAgICAgKiBAcGFyYW0gd2luZG93VG9rZW4gVGhlIHdpbmRvdyB3aG8gdGhlc2Ugb2Zmc2V0cyBzaG91bGQgYmUgYXNzb2NpYXRlZAogICAgICAqIHdpdGgsIGFzIHJldHVybmVkIGJ5IHtAbGluayBhbmRyb2lkLnZpZXcuVmlldyNnZXRXaW5kb3dUb2tlbigpCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0RldmljZVBvbGljeU1hbmFnZXIuamF2YQppbmRleCA2YjkwMGE4Li5iZWJjOGNmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvYWRtaW4vRGV2aWNlUG9saWN5TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9hZG1pbi9EZXZpY2VQb2xpY3lNYW5hZ2VyLmphdmEKQEAgLTQwLDggKzQwLDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Db250YWN0c0NvbnRyYWN0LkRpcmVjdG9yeTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQuc2VjdXJpdHkuQ3JlZGVudGlhbHM7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnJlc3RyaWN0aW9ucy5SZXN0cmljdGlvbnNSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpAQCAtNTYsMTQgKzU2LDE0IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldFNvY2tldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuUHJveHk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlGYWN0b3J5OworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmF0ZUtleTsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGU7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRpZmljYXRlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0aWZpY2F0ZUZhY3Rvcnk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuUEtDUzhFbmNvZGVkS2V5U3BlYzsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuSW52YWxpZEtleVNwZWNFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5zcGVjLlBLQ1M4RW5jb2RlZEtleVNwZWM7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC04OCwxNCArODgsMTUgQEAKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIElEZXZpY2VQb2xpY3lNYW5hZ2VyIG1TZXJ2aWNlOworICAgIHByaXZhdGUgYm9vbGVhbiBtUGFyZW50SW5zdGFuY2U7CiAKLSAgICAvLyBUT0RPIFVzZSBpdCBldmVyeXdoZXJlLgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UgPQogICAgICAgICAgICAgIkZhaWxlZCB0byB0YWxrIHdpdGggZGV2aWNlIHBvbGljeSBtYW5hZ2VyIHNlcnZpY2UiOwogCi0gICAgcHJpdmF0ZSBEZXZpY2VQb2xpY3lNYW5hZ2VyKENvbnRleHQgY29udGV4dCkgeworICAgIHByaXZhdGUgRGV2aWNlUG9saWN5TWFuYWdlcihDb250ZXh0IGNvbnRleHQsIGJvb2xlYW4gcGFyZW50SW5zdGFuY2UpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBJRGV2aWNlUG9saWN5TWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0LkRFVklDRV9QT0xJQ1lfU0VSVklDRSkpKTsKKyAgICAgICAgbVBhcmVudEluc3RhbmNlID0gcGFyZW50SW5zdGFuY2U7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCkBAIC0xMDcsNyArMTA4LDcgQEAKIAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBzdGF0aWMgRGV2aWNlUG9saWN5TWFuYWdlciBjcmVhdGUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIERldmljZVBvbGljeU1hbmFnZXIgbWUgPSBuZXcgRGV2aWNlUG9saWN5TWFuYWdlcihjb250ZXh0KTsKKyAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlciBtZSA9IG5ldyBEZXZpY2VQb2xpY3lNYW5hZ2VyKGNvbnRleHQsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIG1lLm1TZXJ2aWNlICE9IG51bGwgPyBtZSA6IG51bGw7CiAgICAgfQogCkBAIC0xNjcsNyArMTY4LDcgQEAKICAgICAgKiBBY3Rpdml0eSBhY3Rpb246IFN0YXJ0cyB0aGUgcHJvdmlzaW9uaW5nIGZsb3cgd2hpY2ggc2V0cyB1cCBhIG1hbmFnZWQgdXNlci4KICAgICAgKgogICAgICAqIDxwPlRoaXMgaW50ZW50IHdpbGwgdHlwaWNhbGx5IGJlIHNlbnQgYnkgYSBtb2JpbGUgZGV2aWNlIG1hbmFnZW1lbnQgYXBwbGljYXRpb24gKE1ETSkuCi0gICAgICogUHJvdmlzaW9uaW5nIGNvbmZpZ3VyZXMgdGhlIGN1cnJlbnQgdXNlciBhcyBtYW5hZ2VkIHVzZXIgYW5kIHNldHMgdGhlIE1ETSBhcyB0aGUgcHJvZmlsZQorICAgICAqIFByb3Zpc2lvbmluZyBjb25maWd1cmVzIHRoZSB1c2VyIGFzIG1hbmFnZWQgdXNlciBhbmQgc2V0cyB0aGUgTURNIGFzIHRoZSBwcm9maWxlCiAgICAgICogb3duZXIgd2hvIGhhcyBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgdXNlci4gUHJvdmlzaW9uaW5nIGNhbiBvbmx5IGhhcHBlbiBiZWZvcmUgdXNlciBzZXR1cCBoYXMKICAgICAgKiBiZWVuIGNvbXBsZXRlZC4gVXNlIHtAbGluayAjaXNQcm92aXNpb25pbmdBbGxvd2VkKFN0cmluZyl9IHRvIGNoZWNrIGlmIHByb3Zpc2lvbmluZyBpcwogICAgICAqIGFsbG93ZWQuCkBAIC02MTksNiArNjIwLDIxIEBACiAgICAgICAgICAgICAiYW5kcm9pZC5hcHAuZXh0cmEuUFJPVklTSU9OSU5HX0xPR09fVVJJIjsKIAogICAgIC8qKgorICAgICAqIEEgYm9vbGVhbiBleHRyYSBpbmRpY2F0aW5nIGlmIHVzZXIgc2V0dXAgc2hvdWxkIGJlIHNraXBwZWQsIGZvciB3aGVuIHByb3Zpc2lvbmluZyBpcyBzdGFydGVkCisgICAgICogZHVyaW5nIHNldHVwLXdpemFyZC4KKyAgICAgKgorICAgICAqIDxwPklmIHVuc3BlY2lmaWVkLCBkZWZhdWx0cyB0byB7QGNvZGUgdHJ1ZX0gdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIGluCisgICAgICoge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNNfSBhbmQgZWFybGllci4KKyAgICAgKgorICAgICAqIDxwPlVzZSBpbiBhbiBpbnRlbnQgd2l0aCBhY3Rpb24ge0BsaW5rICNBQ1RJT05fUFJPVklTSU9OX01BTkFHRURfUFJPRklMRX0sCisgICAgICoge0BsaW5rICNBQ1RJT05fUFJPVklTSU9OX01BTkFHRURfREVWSUNFfSBvciB7QGxpbmsgI0FDVElPTl9QUk9WSVNJT05fTUFOQUdFRF9VU0VSfS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUFJPVklTSU9OSU5HX1NLSVBfVVNFUl9TRVRVUCA9CisgICAgICAgICAgICAiYW5kcm9pZC5hcHAuZXh0cmEuUFJPVklTSU9OSU5HX1NLSVBfVVNFUl9TRVRVUCI7CisKKyAgICAvKioKICAgICAgKiBUaGlzIE1JTUUgdHlwZSBpcyB1c2VkIGZvciBzdGFydGluZyB0aGUgRGV2aWNlIE93bmVyIHByb3Zpc2lvbmluZy4KICAgICAgKgogICAgICAqIDxwPkR1cmluZyBkZXZpY2Ugb3duZXIgcHJvdmlzaW9uaW5nIGEgZGV2aWNlIGFkbWluIGFwcCBpcyBzZXQgYXMgdGhlIG93bmVyIG9mIHRoZSBkZXZpY2UuCkBAIC04NDEsNyArODU3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzQWRtaW5BY3RpdmUoYWRtaW4sIHVzZXJJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1Niw3ICs4NzIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaXNSZW1vdmluZ0FkbWluKGFkbWluLCB1c2VySWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04ODEsNyArODk3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldEFjdGl2ZUFkbWlucyh1c2VySWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTg5Nyw3ICs5MTMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UucGFja2FnZUhhc0FjdGl2ZUFkbWlucyhwYWNrYWdlTmFtZSwgbXlVc2VySWQoKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTkxNCw3ICs5MzAsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5yZW1vdmVBY3RpdmVBZG1pbihhZG1pbiwgbXlVc2VySWQoKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtOTMzLDcgKzk0OSwyMyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaGFzR3JhbnRlZFBvbGljeShhZG1pbiwgdXNlc1BvbGljeSwgbXlVc2VySWQoKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFByb2ZpbGUgQ2hhbGxlbmdlIGlzIGF2YWlsYWJsZSB0byB1c2UgZm9yIHRoZSBnaXZlbiBwcm9maWxlIHVzZXIuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlQWxsb3dlZChpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VBbGxvd2VkKHVzZXJIYW5kbGUpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAzMiw5ICsxMDY0LDkgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZFF1YWxpdHkoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgaW50IHF1YWxpdHkpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UGFzc3dvcmRRdWFsaXR5KGFkbWluLCBxdWFsaXR5KTsKKyAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZFF1YWxpdHkoYWRtaW4sIHF1YWxpdHksIG1QYXJlbnRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTA1Myw5ICsxMDg1LDkgQEAKICAgICBwdWJsaWMgaW50IGdldFBhc3N3b3JkUXVhbGl0eShATnVsbGFibGUgQ29tcG9uZW50TmFtZSBhZG1pbiwgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBhc3N3b3JkUXVhbGl0eShhZG1pbiwgdXNlckhhbmRsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBhc3N3b3JkUXVhbGl0eShhZG1pbiwgdXNlckhhbmRsZSwgbVBhcmVudEluc3RhbmNlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIFBBU1NXT1JEX1FVQUxJVFlfVU5TUEVDSUZJRUQ7CkBAIC0xMDg3LDcgKzExMTksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZE1pbmltdW1MZW5ndGgoYWRtaW4sIGxlbmd0aCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTEwOCw3ICsxMTQwLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBhc3N3b3JkTWluaW11bUxlbmd0aChhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTE0MSw3ICsxMTczLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UGFzc3dvcmRNaW5pbXVtVXBwZXJDYXNlKGFkbWluLCBsZW5ndGgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTExNjksNyArMTIwMSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYXNzd29yZE1pbmltdW1VcHBlckNhc2UoYWRtaW4sIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKQEAgLTEyMDIsNyArMTIzNCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFBhc3N3b3JkTWluaW11bUxvd2VyQ2FzZShhZG1pbiwgbGVuZ3RoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjMwLDcgKzEyNjIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UGFzc3dvcmRNaW5pbXVtTG93ZXJDYXNlKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMjYyLDcgKzEyOTQsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZE1pbmltdW1MZXR0ZXJzKGFkbWluLCBsZW5ndGgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyODgsNyArMTMyMCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYXNzd29yZE1pbmltdW1MZXR0ZXJzKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzIwLDcgKzEzNTIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZE1pbmltdW1OdW1lcmljKGFkbWluLCBsZW5ndGgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEzNDcsNyArMTM3OSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYXNzd29yZE1pbmltdW1OdW1lcmljKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMzc5LDcgKzE0MTEsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZE1pbmltdW1TeW1ib2xzKGFkbWluLCBsZW5ndGgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE0MDUsNyArMTQzNyw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYXNzd29yZE1pbmltdW1TeW1ib2xzKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDM3LDcgKzE0NjksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRQYXNzd29yZE1pbmltdW1Ob25MZXR0ZXIoYWRtaW4sIGxlbmd0aCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTQ2NCw3ICsxNDk2LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBhc3N3b3JkTWluaW11bU5vbkxldHRlcihhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQ5Nyw3ICsxNTI5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFkbWluLCBsZW5ndGgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE1MjksNyArMTU2MSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFBhc3N3b3JkRXhwaXJhdGlvblRpbWVvdXQoYWRtaW4sIHRpbWVvdXQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE1NDgsNyArMTU4MCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYXNzd29yZEV4cGlyYXRpb25UaW1lb3V0KGFkbWluLCBteVVzZXJJZCgpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTY5LDcgKzE2MDEsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UGFzc3dvcmRFeHBpcmF0aW9uKGFkbWluLCBteVVzZXJJZCgpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTkyLDcgKzE2MjQsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UGFzc3dvcmRIaXN0b3J5TGVuZ3RoKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjIzLDkgKzE2NTUsOSBAQAogICAgIHB1YmxpYyBib29sZWFuIGlzQWN0aXZlUGFzc3dvcmRTdWZmaWNpZW50KCkgewogICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaXNBY3RpdmVQYXNzd29yZFN1ZmZpY2llbnQobXlVc2VySWQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzQWN0aXZlUGFzc3dvcmRTdWZmaWNpZW50KG15VXNlcklkKCksIG1QYXJlbnRJbnN0YW5jZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2NDQsNyArMTY3Niw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRDdXJyZW50RmFpbGVkUGFzc3dvcmRBdHRlbXB0cyhteVVzZXJJZCgpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTY2MSw3ICsxNjkzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldERvTm90QXNrQ3JlZGVudGlhbHNPbkJvb3QoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGNhbGwgZ2V0RG9Ob3RBc2tDcmVkZW50aWFsc09uQm9vdCgpIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE2OTEsNyArMTcyMyw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldE1heGltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlKGFkbWluLCBudW0pOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE3MTMsNyArMTc0NSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRNYXhpbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTczMSw3ICsxNzYzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFByb2ZpbGVXaXRoTWluaW11bUZhaWxlZFBhc3N3b3Jkc0ZvcldpcGUodXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBVc2VySGFuZGxlLlVTRVJfTlVMTDsKQEAgLTE3OTIsMTEgKzE4MjQsMTQgQEAKICAgICAgKiBub3QgYWNjZXB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgY29uc3RyYWludHMgb3IgaWYgdGhlIHVzZXIgaGFzIG5vdCBiZWVuIGRlY3J5cHRlZCB5ZXQuCiAgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gcmVzZXRQYXNzd29yZChTdHJpbmcgcGFzc3dvcmQsIGludCBmbGFncykgeworICAgICAgICBpZiAobVBhcmVudEluc3RhbmNlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIlJlc2V0IHBhc3N3b3JkIGRvZXMgbm90IHdvcmsgYWNyb3NzIHByb2ZpbGVzLiIpOworICAgICAgICB9CiAgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5yZXNldFBhc3N3b3JkKHBhc3N3b3JkLCBmbGFncyk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MjAsNyArMTg1NSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldE1heGltdW1UaW1lVG9Mb2NrKGFkbWluLCB0aW1lTXMpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE4NDMsNyArMTg3OCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRNYXhpbXVtVGltZVRvTG9jayhhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTg2Miw3ICsxODk3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2UubG9ja05vdygpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE4OTksNyArMTkzNCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLndpcGVEYXRhKGZsYWdzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTY5LDcgKzIwMDQsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0R2xvYmFsUHJveHkoYWRtaW4sIGhvc3RTcGVjLCBleGNsU3BlYyk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTk5Nyw3ICsyMDMyLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UmVjb21tZW5kZWRHbG9iYWxQcm94eShhZG1pbiwgcHJveHlJbmZvKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDEzLDcgKzIwNDgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0R2xvYmFsUHJveHlBZG1pbihteVVzZXJJZCgpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0yMTQzLDcgKzIxNzgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0U3RvcmFnZUVuY3J5cHRpb24oYWRtaW4sIGVuY3J5cHQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gRU5DUllQVElPTl9TVEFUVVNfVU5TVVBQT1JURUQ7CkBAIC0yMTYzLDcgKzIxOTgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0U3RvcmFnZUVuY3J5cHRpb24oYWRtaW4sIG15VXNlcklkKCkpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTk4LDcgKzIyMzMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0U3RvcmFnZUVuY3J5cHRpb25TdGF0dXModXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBFTkNSWVBUSU9OX1NUQVRVU19VTlNVUFBPUlRFRDsKQEAgLTIyMTksNyArMjI1NCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pbnN0YWxsQ2FDZXJ0KGFkbWluLCBjZXJ0QnVmZmVyKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI0MCw3ICsyMjc1LDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKENlcnRpZmljYXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gcGFyc2UgY2VydGlmaWNhdGUiLCBlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMjY4LDcgKzIzMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2VydHM7CkBAIC0yMjg3LDcgKzIzMjIsNyBAQAogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnVuaW5zdGFsbENhQ2VydHMoYWRtaW4sIG5ldyBUcnVzdGVkQ2VydGlmaWNhdGVTdG9yZSgpLnVzZXJBbGlhc2VzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIC50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgcmUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzA1LDcgKzIzNDAsNyBAQAogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmVuZm9yY2VDYW5NYW5hZ2VDYUNlcnRzKGFkbWluKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q2FDZXJ0QWxpYXMoY2VydEJ1ZmZlcikgIT0gbnVsbDsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgcmUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiBjZSkgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBwYXJzZSBjZXJ0aWZpY2F0ZSIsIGNlKTsKICAgICAgICAgICAgIH0KQEAgLTIzMzMsNyArMjM2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIC5nZXRLZXlTcGVjKHByaXZLZXksIFBLQ1M4RW5jb2RlZEtleVNwZWMuY2xhc3MpLmdldEVuY29kZWQoKTsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pbnN0YWxsS2V5UGFpcihhZG1pbiwgcGtjczhLZXksIHBlbUNlcnQsIGFsaWFzKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiB8IEludmFsaWRLZXlTcGVjRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBvYnRhaW4gcHJpdmF0ZSBrZXkgbWF0ZXJpYWwiLCBlKTsKICAgICAgICAgfSBjYXRjaCAoQ2VydGlmaWNhdGVFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CkBAIC0yMzkxLDE0ICsyNDI2LDE0IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldENlcnRJbnN0YWxsZXJQYWNrYWdlKGFkbWluLCBpbnN0YWxsZXJQYWNrYWdlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgYnkgYSBwcm9maWxlIG93bmVyIG9yIGRldmljZSBvd25lciB0byByZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgaW5zdGFsbGVyIGZvciB0aGUKLSAgICAgKiBjdXJyZW50IHVzZXIuIG51bGwgaWYgbm9uZSBpcyBzZXQuCisgICAgICogdXNlci4gbnVsbCBpZiBub25lIGlzIHNldC4KICAgICAgKgogICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KICAgICAgKiBAcmV0dXJuIFRoZSBwYWNrYWdlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZGVsZWdhdGVkIGNlcnRpZmljYXRlIGluc3RhbGxlciwgb3Ige0Bjb2RlIG51bGx9CkBAIC0yNDA5LDcgKzI0NDQsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0Q2VydEluc3RhbGxlclBhY2thZ2UoYWRtaW4pOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTI0MzQsMTQgKzI0NjksMTQgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Q2FtZXJhRGlzYWJsZWQoYWRtaW4sIGRpc2FibGVkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhlIGRldmljZSdzIGNhbWVyYXMgaGF2ZSBiZWVuIGRpc2FibGVkIGZvciB0aGlzIHVzZXIsCi0gICAgICogZWl0aGVyIGJ5IHRoZSBjdXJyZW50IGFkbWluLCBpZiBzcGVjaWZpZWQsIG9yIGFsbCBhZG1pbnMuCisgICAgICogZWl0aGVyIGJ5IHRoZSBjYWxsaW5nIGFkbWluLCBpZiBzcGVjaWZpZWQsIG9yIGFsbCBhZG1pbnMuCiAgICAgICogQHBhcmFtIGFkbWluIFRoZSBuYW1lIG9mIHRoZSBhZG1pbiBjb21wb25lbnQgdG8gY2hlY2ssIG9yIHtAY29kZSBudWxsfSB0byBjaGVjayB3aGV0aGVyIGFueSBhZG1pbnMKICAgICAgKiBoYXZlIGRpc2FibGVkIHRoZSBjYW1lcmEKICAgICAgKi8KQEAgLTI0NTUsNyArMjQ5MCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRDYW1lcmFEaXNhYmxlZChhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0OTIsMTMgKzI1MjcsMTMgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKGFkbWluLCBkaXNhYmxlZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHNjcmVlbiBjYXB0dXJlIGhhcyBiZWVuIGRpc2FibGVkIGJ5IHRoZSBjdXJyZW50CisgICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHNjcmVlbiBjYXB0dXJlIGhhcyBiZWVuIGRpc2FibGVkIGJ5IHRoZSBjYWxsaW5nCiAgICAgICogYWRtaW4sIGlmIHNwZWNpZmllZCwgb3IgYWxsIGFkbWlucy4KICAgICAgKiBAcGFyYW0gYWRtaW4gVGhlIG5hbWUgb2YgdGhlIGFkbWluIGNvbXBvbmVudCB0byBjaGVjaywgb3Ige0Bjb2RlIG51bGx9IHRvIGNoZWNrIHdoZXRoZXIgYW55IGFkbWlucwogICAgICAqIGhhdmUgZGlzYWJsZWQgc2NyZWVuIGNhcHR1cmUuCkBAIC0yNTEzLDcgKzI1NDgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0U2NyZWVuQ2FwdHVyZURpc2FibGVkKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjUzNiw3ICsyNTcxLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0QXV0b1RpbWVSZXF1aXJlZChhZG1pbiwgcmVxdWlyZWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI1NDksNyArMjU4NCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRBdXRvVGltZVJlcXVpcmVkKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1OTAsMTMgKzI2MjUsMTMgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFkbWluLCB3aGljaCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGZlYXR1cmVzIGhhdmUgYmVlbiBkaXNhYmxlZCBpbiBrZXlndWFyZCBlaXRoZXIgYnkgdGhlIGN1cnJlbnQKKyAgICAgKiBEZXRlcm1pbmUgd2hldGhlciBvciBub3QgZmVhdHVyZXMgaGF2ZSBiZWVuIGRpc2FibGVkIGluIGtleWd1YXJkIGVpdGhlciBieSB0aGUgY2FsbGluZwogICAgICAqIGFkbWluLCBpZiBzcGVjaWZpZWQsIG9yIGFsbCBhZG1pbnMuCiAgICAgICogQHBhcmFtIGFkbWluIFRoZSBuYW1lIG9mIHRoZSBhZG1pbiBjb21wb25lbnQgdG8gY2hlY2ssIG9yIHtAY29kZSBudWxsfSB0byBjaGVjayB3aGV0aGVyIGFueSBhZG1pbnMKICAgICAgKiBoYXZlIGRpc2FibGVkIGZlYXR1cmVzIGluIGtleWd1YXJkLgpAQCAtMjYxMyw3ICsyNjQ4LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldEtleWd1YXJkRGlzYWJsZWRGZWF0dXJlcyhhZG1pbiwgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBLRVlHVUFSRF9ESVNBQkxFX0ZFQVRVUkVTX05PTkU7CkBAIC0yNjI4LDcgKzI2NjMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRBY3RpdmVBZG1pbihwb2xpY3lSZWNlaXZlciwgcmVmcmVzaGluZywgdXNlckhhbmRsZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjY1OSwxMCArMjY5NCw3IEBACiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBuZXcgRGV2aWNlQWRtaW5JbmZvKG1Db250ZXh0LCByaSk7Ci0gICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiVW5hYmxlIHRvIHBhcnNlIGRldmljZSBwb2xpY3kgIiArIGNuLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gcGFyc2UgZGV2aWNlIHBvbGljeSAiICsgY24sIGUpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KQEAgLTI2NzYsNyArMjcwOCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmdldFJlbW92ZVdhcm5pbmcoYWRtaW4sIHJlc3VsdCwgbXlVc2VySWQoKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjY5MSw3ICsyNzIzLDcgQEAKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRBY3RpdmVQYXNzd29yZFN0YXRlKHF1YWxpdHksIGxlbmd0aCwgbGV0dGVycywgdXBwZXJjYXNlLCBsb3dlcmNhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJzLCBzeW1ib2xzLCBub25sZXR0ZXIsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3MDQsNyArMjczNiw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnJlcG9ydEZhaWxlZFBhc3N3b3JkQXR0ZW1wdCh1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzE3LDcgKzI3NDksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5yZXBvcnRTdWNjZXNzZnVsUGFzc3dvcmRBdHRlbXB0KHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NzAsNyArMjgwMiw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5zZXREZXZpY2VPd25lcih3aG8sIG93bmVyTmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBzZXQgZGV2aWNlIG93bmVyIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yODUyLDcgKzI4ODQsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0RGV2aWNlT3duZXJDb21wb25lbnQoY2FsbGluZ1VzZXJPbmx5KTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMjg3MSw3ICsyOTAzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldERldmljZU93bmVyVXNlcklkKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gVXNlckhhbmRsZS5VU0VSX05VTEw7CkBAIC0yODkxLDcgKzI5MjMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5jbGVhckRldmljZU93bmVyKHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBjbGVhciBkZXZpY2Ugb3duZXIiKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjkzMyw3ICsyOTY1LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldERldmljZU93bmVyTmFtZSgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0yOTg2LDcgKzMwMTgsNiBAQAogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldEFjdGl2ZUFkbWluKGFkbWluLCBmYWxzZSwgbXlVc2VySWQpOwogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5zZXRQcm9maWxlT3duZXIoYWRtaW4sIG93bmVyTmFtZSwgbXlVc2VySWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHNldCBwcm9maWxlIG93bmVyICIgKyByZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bGRuJ3Qgc2V0IHByb2ZpbGUgb3duZXIuIiwgcmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDA4LDcgKzMwMzksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5jbGVhclByb2ZpbGVPd25lcihhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2xlYXIgcHJvZmlsZSBvd25lciAiICsgYWRtaW4gKyByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMwMjIsNyArMzA1Myw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5oYXNVc2VyU2V0dXBDb21wbGV0ZWQoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBjaGVjayB3aGV0aGVyIHVzZXIgc2V0dXAgaGFzIGNvbXBsZXRlZCIpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zMDUzLDcgKzMwODQsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0UHJvZmlsZU93bmVyKGFkbWluLCBvd25lck5hbWUsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHNldCBwcm9maWxlIG93bmVyIiwgcmUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ291bGRuJ3Qgc2V0IHByb2ZpbGUgb3duZXIuIiwgcmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDY1LDYgKzMwOTYsOCBAQAogICAgICAqCiAgICAgICogPHA+SWYgdGhlIGRldmljZSBvd25lciBpbmZvcm1hdGlvbiBpcyB7QGNvZGUgbnVsbH0gb3IgZW1wdHkgdGhlbiB0aGUgZGV2aWNlIG93bmVyIGluZm8gaXMKICAgICAgKiBjbGVhcmVkIGFuZCB0aGUgdXNlciBvd25lciBpbmZvIGlzIHNob3duIG9uIHRoZSBsb2NrIHNjcmVlbiBpZiBpdCBpcyBzZXQuCisgICAgICogPHA+SWYgdGhlIGRldmljZSBvd25lciBpbmZvcm1hdGlvbiBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VzIHRoZW4gdGhlIG1lc3NhZ2Ugb24gdGhlIGxvY2sKKyAgICAgKiBzY3JlZW4gd2lsbCBiZSBibGFuayBhbmQgdGhlIHVzZXIgd2lsbCBub3QgYmUgYWxsb3dlZCB0byBjaGFuZ2UgaXQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gYWRtaW4gVGhlIG5hbWUgb2YgdGhlIGFkbWluIGNvbXBvbmVudCB0byBjaGVjay4KICAgICAgKiBAcGFyYW0gaW5mbyBEZXZpY2Ugb3duZXIgaW5mb3JtYXRpb24gd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQgaW5zdGVhZCBvZiB0aGUgdXNlcgpAQCAtMzA3Niw3ICszMTA5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oYWRtaW4sIGluZm8pOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMDkwLDEzICszMTIzLDU1IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXREZXZpY2VPd25lckxvY2tTY3JlZW5JbmZvKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIC8qKgorICAgICAqIENhbGxlZCBieSBkZXZpY2Ugb3IgcHJvZmlsZSBvd25lcnMgZm9yIHNldHRpbmcgdGhlIHBhY2thZ2Ugc3VzcGVuZGVkIGZvciB0aGlzIHVzZXIuCisgICAgICogQSBzdXNwZW5kZWQgcGFja2FnZSB3aWxsIG5vdCBiZSBzdGFydGVkIGJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIsIGl0cyBub3RpZmljYXRpb25zIHdpbGwKKyAgICAgKiBiZSBoaWRkZW4gYW5kIGl0IHdpbGwgbm90IHNob3cgdXAgaW4gcmVjZW50cy4gVGhlIHBhY2thZ2UgbXVzdCBhbHJlYWR5IGJlIGluc3RhbGxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBUaGUgbmFtZSBvZiB0aGUgYWRtaW4gY29tcG9uZW50IHRvIGNoZWNrLgorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHAgdG8gc3VzcGVuZCBvciB1bnN1c3BlbmQuCisgICAgICogQHBhcmFtIHN1c3BlbmRlZCBJZiBzZXQgdG8ge0Bjb2RlIHRydWV9IHRoYW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBzdXNwZW5kZWQsIGlmIHNldCB0bworICAgICAqIHtAY29kZSBmYWxzZX0gdGhlIHBhY2thZ2Ugd2lsbCBiZSB1bnN1c3BlbmRlZC4KKyAgICAgKiBAcmV0dXJuIGJvb2xlYW4ge0Bjb2RlIHRydWV9IGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWxseSBwZXJmb3JtZWQsIHtAY29kZSBmYWxzZX0KKyAgICAgKiBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZChATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLCBTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICBib29sZWFuIHN1c3BlbmRlZCkgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0UGFja2FnZVN1c3BlbmRlZChhZG1pbiwgcGFja2FnZU5hbWUsIHN1c3BlbmRlZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGRldmljZSBvciBwcm9maWxlIG93bmVycyB0byBkZXRlcm1pbmUgaWYgYSBwYWNrYWdlIGlzIHN1c3BlbmRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gcmV0cmlldmUgdGhlIHN1c3BlbmRlZCBzdGF0dXMgb2YuCisgICAgICogQHJldHVybiBib29sZWFuIHtAY29kZSB0cnVlfSBpZiB0aGUgcGFja2FnZSBpcyBzdXNwZW5kZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGdldFBhY2thZ2VTdXNwZW5kZWQoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQYWNrYWdlU3VzcGVuZGVkKGFkbWluLCBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgogICAgICAqIFNldHMgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIHByb2ZpbGUuIEEgcHJvZmlsZSBzaG91bGQgYmUgZW5hYmxlZCBvbmx5IG9uY2UgaXQgaXMgcmVhZHkgdG8KICAgICAgKiBiZSB1c2VkLiBPbmx5IHRoZSBwcm9maWxlIG93bmVyIGNhbiBjYWxsIHRoaXMuCiAgICAgICoKQEAgLTMxMDksNyArMzE4NCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFByb2ZpbGVFbmFibGVkKGFkbWluKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMwLDE0ICszMjA1LDE0IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFByb2ZpbGVOYW1lKGFkbWluLCBwcm9maWxlTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVXNlZCB0byBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIHBhY2thZ2UgaXMgcmVnaXN0ZXJlZCBhcyB0aGUgcHJvZmlsZSBvd25lciBmb3IgdGhlCi0gICAgICogY3VycmVudCB1c2VyLiBBIHByb2ZpbGUgb3duZXIgaXMgYSBzcGVjaWFsIGRldmljZSBhZG1pbiB0aGF0IGhhcyBhZGRpdGlvbmFsIHByaXZpbGVnZXMKKyAgICAgKiB1c2VyLiBBIHByb2ZpbGUgb3duZXIgaXMgYSBzcGVjaWFsIGRldmljZSBhZG1pbiB0aGF0IGhhcyBhZGRpdGlvbmFsIHByaXZpbGVnZXMKICAgICAgKiB3aXRoaW4gdGhlIHByb2ZpbGUuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIHRvIGNvbXBhcmUgd2l0aCB0aGUgcmVnaXN0ZXJlZCBwcm9maWxlIG93bmVyLgpAQCAtMzE1MSw3ICszMjI2LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcHJvZmlsZU93bmVyICE9IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICYmIHByb2ZpbGVPd25lci5nZXRQYWNrYWdlTmFtZSgpLmVxdWFscyhwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2hlY2sgcHJvZmlsZSBvd25lciIpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE3Nyw3ICszMjUyLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFByb2ZpbGVPd25lcih1c2VySWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGdldCBwcm9maWxlIG93bmVyIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3RlZCBwcm9maWxlIG93bmVyIGZvciBpbnZhbGlkIHVzZXJJZCIsIHJlKTsKICAgICAgICAgICAgIH0KQEAgLTMxOTYsNyArMzI3MSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQcm9maWxlT3duZXJOYW1lKFByb2Nlc3MubXlVc2VySGFuZGxlKCkuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBnZXQgcHJvZmlsZSBvd25lciIpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0ZWQgcHJvZmlsZSBvd25lciBmb3IgaW52YWxpZCB1c2VySWQiLCByZSk7CiAgICAgICAgICAgICB9CkBAIC0zMjE3LDcgKzMyOTIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UHJvZmlsZU93bmVyTmFtZSh1c2VySWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGdldCBwcm9maWxlIG93bmVyIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3RlZCBwcm9maWxlIG93bmVyIGZvciBpbnZhbGlkIHVzZXJJZCIsIHJlKTsKICAgICAgICAgICAgIH0KQEAgLTMyNDgsNyArMzMyMyw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmFkZFBlcnNpc3RlbnRQcmVmZXJyZWRBY3Rpdml0eShhZG1pbiwgZmlsdGVyLCBhY3Rpdml0eSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzI2OSwxNCArMzM0NCw3NSBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5jbGVhclBhY2thZ2VQZXJzaXN0ZW50UHJlZmVycmVkQWN0aXZpdGllcyhhZG1pbiwgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbGxlZCBieSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIHRvIHNldCB0aGUgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciBhIGdpdmVuIHRhcmdldAotICAgICAqIGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHByb2ZpbGUuCisgICAgICogQ2FsbGVkIGJ5IGEgcHJvZmlsZSBvd25lciBvciBkZXZpY2Ugb3duZXIgdG8gZ3JhbnQgcGVybWlzc2lvbiB0byBhIHBhY2thZ2UgdG8gbWFuYWdlCisgICAgICogYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciB0aGUgY2FsbGluZyB1c2VyIHZpYSB7QGxpbmsgI3NldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zfSBhbmQKKyAgICAgKiB7QGxpbmsgI2dldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zfS4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIHBlcm1pc3Npb24gaXMgcGVyc2lzdGVudCB1bnRpbCBpdCBpcyBsYXRlciBjbGVhcmVkIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2Qgd2l0aCBhCisgICAgICoge0Bjb2RlIG51bGx9IHZhbHVlIG9yIHVuaW5zdGFsbGluZyB0aGUgbWFuYWdpbmcgcGFja2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIHBhY2thZ2UgbmFtZSB3aGljaCB3aWxsIGJlIGdpdmVuIGFjY2VzcyB0byBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMKKyAgICAgKiBBUElzLiBJZiB7QGNvZGUgbnVsbH0gaXMgZ2l2ZW4gdGhlIGN1cnJlbnQgcGFja2FnZSB3aWxsIGJlIGNsZWFyZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYWRtaW4sIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGEgcHJvZmlsZSBvd25lciBvciBkZXZpY2Ugb3duZXIgdG8gcmV0cmlldmUgdGhlIGFwcGxpY2F0aW9uIHJlc3RyaWN0aW9ucyBtYW5hZ2luZworICAgICAqIHBhY2thZ2UgZm9yIHRoZSBjdXJyZW50IHVzZXIsIG9yIHtAY29kZSBudWxsfSBpZiBub25lIGlzIHNldC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcmV0dXJuIFRoZSBwYWNrYWdlIG5hbWUgYWxsb3dlZCB0byBtYW5hZ2UgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIG9uIHRoZSBjdXJyZW50IHVzZXIsIG9yCisgICAgICoge0Bjb2RlIG51bGx9IGlmIG5vbmUgaXMgc2V0LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbikgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYWRtaW4pOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGNhbGxpbmcgcGFja2FnZSBoYXMgYmVlbiBncmFudGVkIHBlcm1pc3Npb24gdmlhCisgICAgICoge0BsaW5rICNzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZX0gdG8gbWFuYWdlIGFwcGxpY2F0aW9uCisgICAgICogcmVzdHJpY3Rpb25zIGZvciB0aGUgY2FsbGluZyB1c2VyLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ2FsbGVyQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pc0NhbGxlckFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciBhIGdpdmVuIHRhcmdldCBhcHBsaWNhdGlvbiBydW5uaW5nIGluIHRoZSBjYWxsaW5nIHVzZXIuCisgICAgICoKKyAgICAgKiA8cD5UaGUgY2FsbGVyIG11c3QgYmUgYSBwcm9maWxlIG9yIGRldmljZSBvd25lciBvbiB0aGF0IHVzZXIsIG9yIHRoZSBwYWNrYWdlIGFsbG93ZWQgdG8KKyAgICAgKiBtYW5hZ2UgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIHZpYSB7QGxpbmsgI3NldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlfTsKKyAgICAgKiBvdGhlcndpc2UgYSBzZWN1cml0eSBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCiAgICAgICoKICAgICAgKiA8cD5UaGUgcHJvdmlkZWQge0BsaW5rIEJ1bmRsZX0gY29uc2lzdHMgb2Yga2V5LXZhbHVlIHBhaXJzLCB3aGVyZSB0aGUgdHlwZXMgb2YgdmFsdWVzIG1heSBiZToKICAgICAgKiA8dWw+CkBAIC0zMjg2LDMwICszNDIyLDMxIEBACiAgICAgICogPGxpPkZyb20ge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNNfSwge0Bjb2RlIEJ1bmRsZX0gb3Ige0Bjb2RlIEJ1bmRsZVtdfQogICAgICAqIDwvdWw+CiAgICAgICoKLSAgICAgKiA8cD5UaGUgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGFyZSBvbmx5IG1hZGUgdmlzaWJsZSB0byB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uIGFuZCB0aGUKLSAgICAgKiBwcm9maWxlIG9yIGRldmljZSBvd25lci4KLSAgICAgKgogICAgICAqIDxwPklmIHRoZSByZXN0cmljdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgeWV0LCBidXQgbWF5IGJlIGFwcGxpZWQgaW4gdGhlIG5lYXIgZnV0dXJlLAotICAgICAqIHRoZSBhZG1pbiBjYW4gbm90aWZ5IHRoZSB0YXJnZXQgYXBwbGljYXRpb24gb2YgdGhhdCBieSBhZGRpbmcKKyAgICAgKiB0aGUgY2FsbGVyIGNhbiBub3RpZnkgdGhlIHRhcmdldCBhcHBsaWNhdGlvbiBvZiB0aGF0IGJ5IGFkZGluZwogICAgICAqIHtAbGluayBVc2VyTWFuYWdlciNLRVlfUkVTVFJJQ1RJT05TX1BFTkRJTkd9IHRvIHRoZSBzZXR0aW5ncyBwYXJhbWV0ZXIuCiAgICAgICoKLSAgICAgKiA8cD5UaGUgY2FsbGluZyBkZXZpY2UgYWRtaW4gbXVzdCBiZSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyOyBpZiBpdCBpcyBub3QsIGEgc2VjdXJpdHkKLSAgICAgKiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisgICAgICogPHA+VGhlIGFwcGxpY2F0aW9uIHJlc3RyaWN0aW9ucyBhcmUgb25seSBtYWRlIHZpc2libGUgdG8gdGhlIHRhcmdldCBhcHBsaWNhdGlvbiB2aWEKKyAgICAgKiB7QGxpbmsgVXNlck1hbmFnZXIjZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoU3RyaW5nKX0sIGluIGFkZGl0aW9uIHRvIHRoZSBwcm9maWxlIG9yCisgICAgICogZGV2aWNlIG93bmVyLCBhbmQgdGhlIGFwcGxpY2F0aW9uIHJlc3RyaWN0aW9ucyBtYW5hZ2luZyBwYWNrYWdlIHZpYQorICAgICAqIHtAbGluayAjZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnN9LgogICAgICAqCi0gICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aCwgb3IKKyAgICAgKiB7QGNvZGUgbnVsbH0gaWYgY2FsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgbWFuYWdpbmcgcGFja2FnZS4KICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gdXBkYXRlIHJlc3RyaWN0ZWQgc2V0dGluZ3MgZm9yLgogICAgICAqIEBwYXJhbSBzZXR0aW5ncyBBIHtAbGluayBCdW5kbGV9IHRvIGJlIHBhcnNlZCBieSB0aGUgcmVjZWl2aW5nIGFwcGxpY2F0aW9uLCBjb252ZXlpbmcgYSBuZXcKICAgICAgKiBzZXQgb2YgYWN0aXZlIHJlc3RyaWN0aW9ucy4KICAgICAgKgorICAgICAqIEBzZWUgI3NldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlCiAgICAgICogQHNlZSBVc2VyTWFuYWdlciNLRVlfUkVTVFJJQ1RJT05TX1BFTkRJTkcKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLCBTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgcHVibGljIHZvaWQgc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoQE51bGxhYmxlIENvbXBvbmVudE5hbWUgYWRtaW4sIFN0cmluZyBwYWNrYWdlTmFtZSwKICAgICAgICAgICAgIEJ1bmRsZSBzZXR0aW5ncykgewogICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhhZG1pbiwgcGFja2FnZU5hbWUsIHNldHRpbmdzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzM5LDcgKzM0NzYsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRUcnVzdEFnZW50Q29uZmlndXJhdGlvbihhZG1pbiwgdGFyZ2V0LCBjb25maWd1cmF0aW9uKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzcwLDcgKzM1MDcsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0VHJ1c3RBZ2VudENvbmZpZ3VyYXRpb24oYWRtaW4sIGFnZW50LCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8UGVyc2lzdGFibGVCdW5kbGU+KCk7IC8vIGVtcHR5IGxpc3QKQEAgLTMzOTEsNyArMzUyOCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldENyb3NzUHJvZmlsZUNhbGxlcklkRGlzYWJsZWQoYWRtaW4sIGRpc2FibGVkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDEwLDcgKzM1NDcsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0Q3Jvc3NQcm9maWxlQ2FsbGVySWREaXNhYmxlZChhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MjcsMTQgKzM1NjQsNzQgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldENyb3NzUHJvZmlsZUNhbGxlcklkRGlzYWJsZWRGb3JVc2VyKHVzZXJIYW5kbGUuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFN0YXJ0IFF1aWNrIENvbnRhY3Qgb24gdGhlIG1hbmFnZWQgcHJvZmlsZSBmb3IgdGhlIGN1cnJlbnQgdXNlciwgaWYgdGhlIHBvbGljeSBhbGxvd3MuCisgICAgICogQ2FsbGVkIGJ5IGEgcHJvZmlsZSBvd25lciBvZiBhIG1hbmFnZWQgcHJvZmlsZSB0byBzZXQgd2hldGhlciBjb250YWN0cyBzZWFyY2ggZnJvbQorICAgICAqIHRoZSBtYW5hZ2VkIHByb2ZpbGUgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFyZW50IHByb2ZpbGUsIGZvciBpbmNvbWluZyBjYWxscy4KKyAgICAgKgorICAgICAqIDxwPlRoZSBjYWxsaW5nIGRldmljZSBhZG1pbiBtdXN0IGJlIGEgcHJvZmlsZSBvd25lci4gSWYgaXQgaXMgbm90LCBhCisgICAgICogc2VjdXJpdHkgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorICAgICAqCisgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEBwYXJhbSBkaXNhYmxlZCBJZiB0cnVlIGNvbnRhY3RzIHNlYXJjaCBpbiB0aGUgbWFuYWdlZCBwcm9maWxlIGlzIG5vdCBkaXNwbGF5ZWQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLAorICAgICAgICAgICAgYm9vbGVhbiBkaXNhYmxlZCkgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRDcm9zc1Byb2ZpbGVDb250YWN0c1NlYXJjaERpc2FibGVkKGFkbWluLCBkaXNhYmxlZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSBhIHByb2ZpbGUgb3duZXIgb2YgYSBtYW5hZ2VkIHByb2ZpbGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGNvbnRhY3RzIHNlYXJjaAorICAgICAqIGhhcyBiZWVuIGRpc2FibGVkLgorICAgICAqCisgICAgICogPHA+VGhlIGNhbGxpbmcgZGV2aWNlIGFkbWluIG11c3QgYmUgYSBwcm9maWxlIG93bmVyLiBJZiBpdCBpcyBub3QsIGEKKyAgICAgKiBzZWN1cml0eSBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZChATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRDcm9zc1Byb2ZpbGVDb250YWN0c1NlYXJjaERpc2FibGVkKGFkbWluKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCBjb250YWN0cyBzZWFyY2ggaGFzIGJlZW4gZGlzYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSBUaGUgdXNlciBmb3Igd2hvbSB0byBjaGVjayB0aGUgY29udGFjdHMgc2VhcmNoIHBlcm1pc3Npb24KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGdldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoQE5vbk51bGwgVXNlckhhbmRsZSB1c2VySGFuZGxlKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZQorICAgICAgICAgICAgICAgICAgICAgICAgLmdldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWRGb3JVc2VyKHVzZXJIYW5kbGUuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydCBRdWljayBDb250YWN0IG9uIHRoZSBtYW5hZ2VkIHByb2ZpbGUgZm9yIHRoZSB1c2VyLCBpZiB0aGUgcG9saWN5IGFsbG93cy4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHN0YXJ0TWFuYWdlZFF1aWNrQ29udGFjdChTdHJpbmcgYWN0dWFsTG9va3VwS2V5LCBsb25nIGFjdHVhbENvbnRhY3RJZCwKQEAgLTM0NDQsMTMgKzM2NDEsMTMgQEAKICAgICAgICAgICAgICAgICBtU2VydmljZS5zdGFydE1hbmFnZWRRdWlja0NvbnRhY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxMb29rdXBLZXksIGFjdHVhbENvbnRhY3RJZCwgZGlyZWN0b3J5SWQsIG9yaWdpbmFsSW50ZW50KTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTdGFydCBRdWljayBDb250YWN0IG9uIHRoZSBtYW5hZ2VkIHByb2ZpbGUgZm9yIHRoZSBjdXJyZW50IHVzZXIsIGlmIHRoZSBwb2xpY3kgYWxsb3dzLgorICAgICAqIFN0YXJ0IFF1aWNrIENvbnRhY3Qgb24gdGhlIG1hbmFnZWQgcHJvZmlsZSBmb3IgdGhlIHVzZXIsIGlmIHRoZSBwb2xpY3kgYWxsb3dzLgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc3RhcnRNYW5hZ2VkUXVpY2tDb250YWN0KFN0cmluZyBhY3R1YWxMb29rdXBLZXksIGxvbmcgYWN0dWFsQ29udGFjdElkLApAQCAtMzQ3OCw3ICszNjc1LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Qmx1ZXRvb3RoQ29udGFjdFNoYXJpbmdEaXNhYmxlZChhZG1pbiwgZGlzYWJsZWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM1MDAsNyArMzY5Nyw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRCbHVldG9vdGhDb250YWN0U2hhcmluZ0Rpc2FibGVkKGFkbWluKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTIwLDcgKzM3MTcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRCbHVldG9vdGhDb250YWN0U2hhcmluZ0Rpc2FibGVkRm9yVXNlcih1c2VySGFuZGxlCiAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTQyLDcgKzM3MzksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5hZGRDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXIoYWRtaW4sIGZpbHRlciwgZmxhZ3MpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM1NTgsNyArMzc1NSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmNsZWFyQ3Jvc3NQcm9maWxlSW50ZW50RmlsdGVycyhhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzU5MCw3ICszNzg3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldFBlcm1pdHRlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlcyhhZG1pbiwgcGFja2FnZU5hbWVzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYxMCw3ICszODA3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBlcm1pdHRlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlcyhhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMzYzNCw3ICszODMxLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBlcm1pdHRlZEFjY2Vzc2liaWxpdHlTZXJ2aWNlc0ZvclVzZXIodXNlcklkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0zNjY4LDcgKzM4NjUsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0UGVybWl0dGVkSW5wdXRNZXRob2RzKGFkbWluLCBwYWNrYWdlTmFtZXMpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjg5LDcgKzM4ODYsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UGVybWl0dGVkSW5wdXRNZXRob2RzKGFkbWluKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0zNjk3LDcgKzM4OTQsNyBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgbGlzdCBvZiBpbnB1dCBtZXRob2RzIHBlcm1pdHRlZCBieSB0aGUgZGV2aWNlIG9yIHByb2ZpbGVzCi0gICAgICogb3duZXJzIG9mIHRoZSBjdXJyZW50IHVzZXIuCisgICAgICogb3duZXJzIG9mIHRoZSBjdXJyZW50IHVzZXIuICAoKk5vdCogY2FsbGluZyB1c2VyLCBkdWUgdG8gYSBsaW1pdGF0aW9uIGluIElucHV0TWV0aG9kTWFuYWdlci4pCiAgICAgICoKICAgICAgKiA8cD5OdWxsIG1lYW5zIGFsbCBpbnB1dCBtZXRob2RzIGFyZSBhbGxvd2VkLCBpZiBhIG5vbi1udWxsIGxpc3QgaXMgcmV0dXJuZWQKICAgICAgKiBpdCB3aWxsIGNvbnRhaW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgcGVybWl0dGVkIGxpc3RzIGZvciBhbnkgZGV2aWNlIG9yIHByb2ZpbGUKQEAgLTM3MTIsNyArMzkwOSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRQZXJtaXR0ZWRJbnB1dE1ldGhvZHNGb3JDdXJyZW50VXNlcigpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTM3MzIsNyArMzkyOSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRLZWVwVW5pbnN0YWxsZWRQYWNrYWdlcyhhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMzc1NSw3ICszOTUyLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0S2VlcFVuaW5zdGFsbGVkUGFja2FnZXMoYWRtaW4sIHBhY2thZ2VOYW1lcyk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzc3OSw3ICszOTc2LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5jcmVhdGVVc2VyKGFkbWluLCBuYW1lKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgY3JlYXRlIGEgdXNlciIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMzgxOCw3ICs0MDE1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5jcmVhdGVBbmRJbml0aWFsaXplVXNlcihhZG1pbiwgbmFtZSwgb3duZXJOYW1lLCBwcm9maWxlT3duZXJDb21wb25lbnQsCiAgICAgICAgICAgICAgICAgICAgIGFkbWluRXh0cmFzKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgY3JlYXRlIGEgdXNlciIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtMzgzNSw3ICs0MDMyLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5yZW1vdmVVc2VyKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgcmVtb3ZlIHVzZXIgIiwgcmUpOworICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4NTMsMzAgKzQwNTAsMzQgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5zd2l0Y2hVc2VyKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3Qgc3dpdGNoIHVzZXIgIiwgcmUpOworICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhbGxlZCBieSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIHRvIGdldCB0aGUgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciBhIGdpdmVuIHRhcmdldAotICAgICAqIGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIHByb2ZpbGUuCisgICAgICogUmV0cmlldmVzIHRoZSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgZm9yIGEgZ2l2ZW4gdGFyZ2V0IGFwcGxpY2F0aW9uIHJ1bm5pbmcgaW4gdGhlIGNhbGxpbmcKKyAgICAgKiB1c2VyLgogICAgICAqCi0gICAgICogPHA+VGhlIGNhbGxpbmcgZGV2aWNlIGFkbWluIG11c3QgYmUgYSBwcm9maWxlIG9yIGRldmljZSBvd25lcjsgaWYgaXQgaXMgbm90LCBhIHNlY3VyaXR5Ci0gICAgICogZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgorICAgICAqIDxwPlRoZSBjYWxsZXIgbXVzdCBiZSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIG9uIHRoYXQgdXNlciwgb3IgdGhlIHBhY2thZ2UgYWxsb3dlZCB0bworICAgICAqIG1hbmFnZSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgdmlhIHtAbGluayAjc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2V9OworICAgICAqIG90aGVyd2lzZSBhIHNlY3VyaXR5IGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KICAgICAgKgotICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGgsIG9yCisgICAgICoge0Bjb2RlIG51bGx9IGlmIGNhbGxlZCBieSB0aGUgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIG1hbmFnaW5nIHBhY2thZ2UuCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIGZldGNoIHJlc3RyaWN0ZWQgc2V0dGluZ3Mgb2YuCiAgICAgICogQHJldHVybiB7QGxpbmsgQnVuZGxlfSBvZiBzZXR0aW5ncyBjb3JyZXNwb25kaW5nIHRvIHdoYXQgd2FzIHNldCBsYXN0IHRpbWUKICAgICAgKiB7QGxpbmsgRGV2aWNlUG9saWN5TWFuYWdlciNzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc30gd2FzIGNhbGxlZCwgb3IgYW4gZW1wdHkge0BsaW5rIEJ1bmRsZX0KICAgICAgKiBpZiBubyByZXN0cmljdGlvbnMgaGF2ZSBiZWVuIHNldC4KKyAgICAgKgorICAgICAqIEBzZWUge0BsaW5rICNzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZX0KICAgICAgKi8KLSAgICBwdWJsaWMgQnVuZGxlIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKEBOb25OdWxsIENvbXBvbmVudE5hbWUgYWRtaW4sIFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgIHB1YmxpYyBCdW5kbGUgZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoQE51bGxhYmxlIENvbXBvbmVudE5hbWUgYWRtaW4sIFN0cmluZyBwYWNrYWdlTmFtZSkgewogICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoYWRtaW4sIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0zODk4LDcgKzQwOTksNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRVc2VyUmVzdHJpY3Rpb24oYWRtaW4sIGtleSwgdHJ1ZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzkxOSw3ICs0MTIwLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0VXNlclJlc3RyaWN0aW9uKGFkbWluLCBrZXksIGZhbHNlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTQ2LDcgKzQxNDcsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXQgPSBtU2VydmljZS5nZXRVc2VyUmVzdHJpY3Rpb25zKGFkbWluLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJldCA9PSBudWxsID8gbmV3IEJ1bmRsZSgpIDogcmV0OwpAQCAtMzk2OCw3ICs0MTY5LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldEFwcGxpY2F0aW9uSGlkZGVuKGFkbWluLCBwYWNrYWdlTmFtZSwgaGlkZGVuKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk4Niw3ICs0MTg3LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzQXBwbGljYXRpb25IaWRkZW4oYWRtaW4sIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk5NywxNCArNDE5OCwxNCBAQAogICAgICAqIHdoZW4gdGhlIHVzZXIgd2FzIGluaXRpYWxpemVkLgogICAgICAqCiAgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgcGFja2FnZSB0byBiZSByZS1lbmFibGVkIGluIHRoZSBjdXJyZW50IHByb2ZpbGUuCisgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBwYWNrYWdlIHRvIGJlIHJlLWVuYWJsZWQgaW4gdGhlIGNhbGxpbmcgcHJvZmlsZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBlbmFibGVTeXN0ZW1BcHAoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgU3RyaW5nIHBhY2thZ2VOYW1lKSB7CiAgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmVuYWJsZVN5c3RlbUFwcChhZG1pbiwgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gaW5zdGFsbCBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQwMTUsNyArNDIxNiw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgICogQHBhcmFtIGludGVudCBBbiBpbnRlbnQgbWF0Y2hpbmcgdGhlIGFwcChzKSB0byBiZSBpbnN0YWxsZWQuIEFsbCBhcHBzIHRoYXQgcmVzb2x2ZSBmb3IgdGhpcwotICAgICAqICAgICAgICAgICAgICAgaW50ZW50IHdpbGwgYmUgcmUtZW5hYmxlZCBpbiB0aGUgY3VycmVudCBwcm9maWxlLgorICAgICAqICAgICAgICAgICAgICAgaW50ZW50IHdpbGwgYmUgcmUtZW5hYmxlZCBpbiB0aGUgY2FsbGluZyBwcm9maWxlLgogICAgICAqIEByZXR1cm4gaW50IFRoZSBudW1iZXIgb2YgYWN0aXZpdGllcyB0aGF0IG1hdGNoZWQgdGhlIGludGVudCBhbmQgd2VyZSBpbnN0YWxsZWQuCiAgICAgICovCiAgICAgcHVibGljIGludCBlbmFibGVTeXN0ZW1BcHAoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgSW50ZW50IGludGVudCkgewpAQCAtNDAyMyw3ICs0MjI0LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmVuYWJsZVN5c3RlbUFwcFdpdGhJbnRlbnQoYWRtaW4sIGludGVudCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBpbnN0YWxsIHBhY2thZ2VzIG1hdGNoaW5nIGZpbHRlcjogIiArIGludGVudCk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtNDAzOSw2ICs0MjQwLDEwIEBACiAgICAgICogPHA+V2hlbiBhY2NvdW50IG1hbmFnZW1lbnQgaXMgZGlzYWJsZWQgZm9yIGFuIGFjY291bnQgdHlwZSwgYWRkaW5nIG9yIHJlbW92aW5nIGFuIGFjY291bnQKICAgICAgKiBvZiB0aGF0IHR5cGUgd2lsbCBub3QgYmUgcG9zc2libGUuCiAgICAgICoKKyAgICAgKiA8cD5Gcm9tIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTn0gdGhlIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIGNhbiBzdGlsbCB1c2UKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50TWFuYWdlcn0gQVBJcyB0byBhZGQgb3IgcmVtb3ZlIGFjY291bnRzIHdoZW4gYWNjb3VudAorICAgICAqIG1hbmFnZW1lbnQgZm9yIGEgc3BlY2lmaWMgdHlwZSBpcyBkaXNhYmxlZC4KKyAgICAgKgogICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KICAgICAgKiBAcGFyYW0gYWNjb3VudFR5cGUgRm9yIHdoaWNoIGFjY291bnQgbWFuYWdlbWVudCBpcyBkaXNhYmxlZCBvciBlbmFibGVkLgogICAgICAqIEBwYXJhbSBkaXNhYmxlZCBUaGUgYm9vbGVhbiBpbmRpY2F0aW5nIHRoYXQgYWNjb3VudCBtYW5hZ2VtZW50IHdpbGwgYmUgZGlzYWJsZWQgKHRydWUpIG9yCkBAIC00MDUwLDcgKzQyNTUsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRBY2NvdW50TWFuYWdlbWVudERpc2FibGVkKGFkbWluLCBhY2NvdW50VHlwZSwgZGlzYWJsZWQpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQwNzgsNyArNDI4Myw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRBY2NvdW50VHlwZXNXaXRoTWFuYWdlbWVudERpc2FibGVkQXNVc2VyKHVzZXJJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQxMDksNyArNDMxNCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldExvY2tUYXNrUGFja2FnZXMoYWRtaW4sIHBhY2thZ2VzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00MTI1LDcgKzQzMzAsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0TG9ja1Rhc2tQYWNrYWdlcyhhZG1pbik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNDE0MSw3ICs0MzQ2LDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzTG9ja1Rhc2tQZXJtaXR0ZWQocGtnKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE4OCw3ICs0MzkzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0R2xvYmFsU2V0dGluZyhhZG1pbiwgc2V0dGluZywgdmFsdWUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyMTYsNyArNDQyMSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFNlY3VyZVNldHRpbmcoYWRtaW4sIHNldHRpbmcsIHZhbHVlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00MjM3LDcgKzQ0NDIsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRSZXN0cmljdGlvbnNQcm92aWRlcihhZG1pbiwgcHJvdmlkZXIpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHNldCBwZXJtaXNzaW9uIHByb3ZpZGVyIG9uIGRldmljZSBwb2xpY3kgc2VydmljZSIpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00MjUzLDcgKzQ0NTgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRNYXN0ZXJWb2x1bWVNdXRlZChhZG1pbiwgb24pOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHNldE1hc3Rlck11dGUgb24gZGV2aWNlIHBvbGljeSBzZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyNjksNyArNDQ3NCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pc01hc3RlclZvbHVtZU11dGVkKGFkbWluKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBnZXQgaXNNYXN0ZXJNdXRlIG9uIGRldmljZSBwb2xpY3kgc2VydmljZSIpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDI4OSwxMyArNDQ5NCwxMyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRVbmluc3RhbGxCbG9ja2VkKGFkbWluLCBwYWNrYWdlTmFtZSwgdW5pbnN0YWxsQmxvY2tlZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2FsbCBibG9jayB1bmluc3RhbGwgb24gZGV2aWNlIHBvbGljeSBzZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgdXNlciBoYXMgYmVlbiBibG9ja2VkIGJ5IGRldmljZSBwb2xpY3kgZnJvbSB1bmluc3RhbGxpbmcgYSBwYWNrYWdlLgorICAgICAqIENoZWNrIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGJlZW4gYmxvY2tlZCBieSBkZXZpY2UgcG9saWN5IGZyb20gdW5pbnN0YWxsaW5nIGEgcGFja2FnZS4KICAgICAgKiBSZXF1aXJlcyB0aGUgY2FsbGVyIHRvIGJlIHRoZSBwcm9maWxlIG93bmVyIGlmIGNoZWNraW5nIGEgc3BlY2lmaWMgYWRtaW4ncyBwb2xpY3kuCiAgICAgICogPHA+CiAgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBTdGFydGluZyBmcm9tIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTE9MTElQT1BfTVIxfSwgdGhlCkBAIC00MzEzLDcgKzQ1MTgsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaXNVbmluc3RhbGxCbG9ja2VkKGFkbWluLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2FsbCBibG9jayB1bmluc3RhbGwgb24gZGV2aWNlIHBvbGljeSBzZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzQxLDcgKzQ1NDYsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuYWRkQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIoYWRtaW4sIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIGNhbGxpbmcgYWRkQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzY4LDcgKzQ1NzMsNyBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UucmVtb3ZlQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIoYWRtaW4sIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIGNhbGxpbmcgcmVtb3ZlQ3Jvc3NQcm9maWxlV2lkZ2V0UHJvdmlkZXIiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00MzkyLDE0ICs0NTk3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlcnM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRXJyb3IgY2FsbGluZyBnZXRDcm9zc1Byb2ZpbGVXaWRnZXRQcm92aWRlcnMiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHByb2ZpbGUgb3IgZGV2aWNlIG93bmVycyB0byBzZXQgdGhlIGN1cnJlbnQgdXNlcidzIHBob3RvLgorICAgICAqIENhbGxlZCBieSBwcm9maWxlIG9yIGRldmljZSBvd25lcnMgdG8gc2V0IHRoZSB1c2VyJ3MgcGhvdG8uCiAgICAgICoKICAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCiAgICAgICogQHBhcmFtIGljb24gdGhlIGJpdG1hcCB0byBzZXQgYXMgdGhlIHBob3RvLgpAQCAtNDQwOCw3ICs0NjEzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFVzZXJJY29uKGFkbWluLCBpY29uKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3Qgc2V0IHRoZSB1c2VyIGljb24gIiwgcmUpOworICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDQyOCw3ICs0NjMzLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0U3lzdGVtVXBkYXRlUG9saWN5KGFkbWluLCBwb2xpY3kpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRXJyb3IgY2FsbGluZyBzZXRTeXN0ZW1VcGRhdGVQb2xpY3kiLCByZSk7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ0NDMsNyArNDY0OCw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRTeXN0ZW1VcGRhdGVQb2xpY3koKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIGNhbGxpbmcgZ2V0U3lzdGVtVXBkYXRlUG9saWN5IiwgcmUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC00NDY3LDcgKzQ2NzIsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldEtleWd1YXJkRGlzYWJsZWQoYWRtaW4sIGRpc2FibGVkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC00NDg3LDcgKzQ2OTIsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnNldFN0YXR1c0JhckRpc2FibGVkKGFkbWluLCBkaXNhYmxlZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCByZSk7CisgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDUwNyw3ICs0NzEyLDcgQEAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2Uubm90aWZ5UGVuZGluZ1N5c3RlbVVwZGF0ZSh1cGRhdGVSZWNlaXZlZFRpbWUpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGQgbm90IG5vdGlmeSBkZXZpY2Ugb3duZXIgYWJvdXQgcGVuZGluZyBzeXN0ZW0gdXBkYXRlIiwgcmUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00NTMzLDcgKzQ3MzgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UGVybWlzc2lvblBvbGljeShhZG1pbiwgcG9saWN5KTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ1ODQsNyArNDc4OSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2Uuc2V0UGVybWlzc2lvbkdyYW50U3RhdGUoYWRtaW4sIHBhY2thZ2VOYW1lLCBwZXJtaXNzaW9uLCBncmFudFN0YXRlKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC00NjExLDcgKzQ4MTYsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFBlcm1pc3Npb25HcmFudFN0YXRlKGFkbWluLCBwYWNrYWdlTmFtZSwgcGVybWlzc2lvbik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCByZSk7CisgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgcmV0dXJuIFBFUk1JU1NJT05fR1JBTlRfU1RBVEVfREVGQVVMVDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ2MzAsNyArNDgzNSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuaXNQcm92aXNpb25pbmdBbGxvd2VkKGFjdGlvbik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewotICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRhbGtpbmcgd2l0aCBkZXZpY2UgcG9saWN5IHNlcnZpY2UiLCByZSk7CisgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDY0Nyw3ICs0ODUyLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pc01hbmFnZWRQcm9maWxlKGFkbWluKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdGFsa2luZyB3aXRoIGRldmljZSBwb2xpY3kgc2VydmljZSIsIHJlKTsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC00NjYzLDcgKzQ4NjgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzU3lzdGVtT25seVVzZXIoYWRtaW4pOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgcmUpOworICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ2ODAsNyArNDg4NSwxNjIgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRXaWZpTWFjQWRkcmVzcygpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0YWxraW5nIHdpdGggZGV2aWNlIHBvbGljeSBzZXJ2aWNlIiwgcmUpOworICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIHJlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGRldmljZSBvd25lciB0byByZWJvb3QgdGhlIGRldmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZWJvb3QoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2UucmVib290KGFkbWluKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgcmUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGEgZGV2aWNlIGFkbWluIHRvIHNldCB0aGUgc2hvcnQgc3VwcG9ydCBtZXNzYWdlLiBUaGlzIHdpbGwKKyAgICAgKiBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgaW4gc2V0dGluZ3Mgc2NyZWVucyB3aGVyZSBmdW50aW9uYWxpdHkgaGFzCisgICAgICogYmVlbiBkaXNhYmxlZCBieSB0aGUgYWRtaW4uCisgICAgICoKKyAgICAgKiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgbGltaXRlZCB0byBhIHNob3J0IHN0YXRlbWVudCBzdWNoIGFzCisgICAgICogIlRoaXMgc2V0dGluZyBpcyBkaXNhYmxlZCBieSB5b3VyIGFkbWluaXN0cmF0b3IuIENvbnRhY3Qgc29tZW9uZUBleGFtcGxlLmNvbQorICAgICAqICBmb3Igc3VwcG9ydC4iCisgICAgICogSWYgdGhlIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gMjAwIGNoYXJhY3RlcnMgaXQgbWF5IGJlIHRydW5jYXRlZC4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldExvbmdTdXBwb3J0TWVzc2FnZQorICAgICAqCisgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEBwYXJhbSBtZXNzYWdlIFNob3J0IG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGluIHNldHRpbmdzIG9yIG51bGwgdG8KKyAgICAgKiAgICAgICAgY2xlYXIgdGhlIGV4aXN0aW5nIG1lc3NhZ2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLAorICAgICAgICAgICAgQE51bGxhYmxlIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFNob3J0U3VwcG9ydE1lc3NhZ2UoYWRtaW4sIG1lc3NhZ2UpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIFJFTU9URV9FWENFUFRJT05fTUVTU0FHRSwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgYnkgYSBkZXZpY2UgYWRtaW4gdG8gZ2V0IHRoZSBzaG9ydCBzdXBwb3J0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICogQHJldHVybiBUaGUgbWVzc2FnZSBzZXQgYnkge0BsaW5rICNzZXRTaG9ydFN1cHBvcnRNZXNzYWdlKENvbXBvbmVudE5hbWUsIFN0cmluZyl9CisgICAgICogICAgICAgICBvciBudWxsIGlmIG5vIG1lc3NhZ2UgaGFzIGJlZW4gc2V0LgorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSBhIGRldmljZSBhZG1pbiB0byBzZXQgdGhlIGxvbmcgc3VwcG9ydCBtZXNzYWdlLiBUaGlzIHdpbGwKKyAgICAgKiBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIgaW4gdGhlIGRldmljZSBhZG1pbmlzdGF0b3JzIHNldHRpbmdzIHNjcmVlbi4KKyAgICAgKgorICAgICAqIEBzZWUgI3NldFNob3J0U3VwcG9ydE1lc3NhZ2UKKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gbWVzc2FnZSBMb25nIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyIGluIHNldHRpbmdzIG9yIG51bGwgdG8KKyAgICAgKiAgICAgICAgY2xlYXIgdGhlIGV4aXN0aW5nIG1lc3NhZ2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKEBOb25OdWxsIENvbXBvbmVudE5hbWUgYWRtaW4sCisgICAgICAgICAgICBATnVsbGFibGUgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluLCBtZXNzYWdlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IGEgZGV2aWNlIGFkbWluIHRvIGdldCB0aGUgbG9uZyBzdXBwb3J0IG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWRtaW4gV2hpY2gge0BsaW5rIERldmljZUFkbWluUmVjZWl2ZXJ9IHRoaXMgcmVxdWVzdCBpcyBhc3NvY2lhdGVkIHdpdGguCisgICAgICogQHJldHVybiBUaGUgbWVzc2FnZSBzZXQgYnkge0BsaW5rICNzZXRMb25nU3VwcG9ydE1lc3NhZ2UoQ29tcG9uZW50TmFtZSwgU3RyaW5nKX0KKyAgICAgKiAgICAgICAgIG9yIG51bGwgaWYgbm8gbWVzc2FnZSBoYXMgYmVlbiBzZXQuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbikgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgc3lzdGVtIHRvIGdldCB0aGUgc2hvcnQgc3VwcG9ydCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIGFkbWluIFdoaWNoIHtAbGluayBEZXZpY2VBZG1pblJlY2VpdmVyfSB0aGlzIHJlcXVlc3QgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAqIEBwYXJhbSB1c2VySGFuZGxlIHVzZXIgaWQgdGhlIGFkbWluIGlzIHJ1bm5pbmcgYXMuCisgICAgICogQHJldHVybiBUaGUgbWVzc2FnZSBzZXQgYnkge0BsaW5rICNzZXRTaG9ydFN1cHBvcnRNZXNzYWdlKENvbXBvbmVudE5hbWUsIFN0cmluZyl9CisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbiwgaW50IHVzZXJIYW5kbGUpIHsKKyAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCBSRU1PVEVfRVhDRVBUSU9OX01FU1NBR0UsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworCisgICAgLyoqCisgICAgICogQ2FsbGVkIGJ5IHRoZSBzeXN0ZW0gdG8gZ2V0IHRoZSBsb25nIHN1cHBvcnQgbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhZG1pbiBXaGljaCB7QGxpbmsgRGV2aWNlQWRtaW5SZWNlaXZlcn0gdGhpcyByZXF1ZXN0IGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSB1c2VyIGlkIHRoZSBhZG1pbiBpcyBydW5uaW5nIGFzLgorICAgICAqIEByZXR1cm4gVGhlIG1lc3NhZ2Ugc2V0IGJ5IHtAbGluayAjc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKENvbXBvbmVudE5hbWUsIFN0cmluZyl9CisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihATm9uTnVsbCBDb21wb25lbnROYW1lIGFkbWluLCBpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbiwgdXNlckhhbmRsZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPYnRhaW5zIGEge0BsaW5rIERldmljZVBvbGljeU1hbmFnZXJ9IHdob3NlIGNhbGxzIGFjdCBvbiB0aGUgcGFyZW50IHByb2ZpbGUuCisgICAgICoKKyAgICAgKiA8cD4gTm90ZSBvbmx5IHNvbWUgbWV0aG9kcyB3aWxsIHdvcmsgb24gdGhlIHBhcmVudCBNYW5hZ2VyLgorICAgICAqCisgICAgICogQHJldHVybiBhIG5ldyBpbnN0YW5jZSBvZiB7QGxpbmsgRGV2aWNlUG9saWN5TWFuYWdlcn0gdGhhdCBhY3RzIG9uIHRoZSBwYXJlbnQgcHJvZmlsZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRGV2aWNlUG9saWN5TWFuYWdlciBnZXRQYXJlbnRQcm9maWxlSW5zdGFuY2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSBhZG1pbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKCFtU2VydmljZS5pc01hbmFnZWRQcm9maWxlKGFkbWluKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiVGhlIGN1cnJlbnQgdXNlciBkb2VzIG5vdCBoYXZlIGEgcGFyZW50IHByb2ZpbGUuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IERldmljZVBvbGljeU1hbmFnZXIobUNvbnRleHQsIHRydWUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgUkVNT1RFX0VYQ0VQVElPTl9NRVNTQUdFLCByZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9hZG1pbi9JRGV2aWNlUG9saWN5TWFuYWdlci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0lEZXZpY2VQb2xpY3lNYW5hZ2VyLmFpZGwKaW5kZXggMTcwOGVlMy4uOTk1Y2UwMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0lEZXZpY2VQb2xpY3lNYW5hZ2VyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2FkbWluL0lEZXZpY2VQb2xpY3lNYW5hZ2VyLmFpZGwKQEAgLTM1LDggKzM1LDggQEAKICAqIHtAaGlkZX0KICAqLwogaW50ZXJmYWNlIElEZXZpY2VQb2xpY3lNYW5hZ2VyIHsKLSAgICB2b2lkIHNldFBhc3N3b3JkUXVhbGl0eShpbiBDb21wb25lbnROYW1lIHdobywgaW50IHF1YWxpdHkpOwotICAgIGludCBnZXRQYXNzd29yZFF1YWxpdHkoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlKTsKKyAgICB2b2lkIHNldFBhc3N3b3JkUXVhbGl0eShpbiBDb21wb25lbnROYW1lIHdobywgaW50IHF1YWxpdHksIGJvb2xlYW4gcGFyZW50KTsKKyAgICBpbnQgZ2V0UGFzc3dvcmRRdWFsaXR5KGluIENvbXBvbmVudE5hbWUgd2hvLCBpbnQgdXNlckhhbmRsZSwgYm9vbGVhbiBwYXJlbnQpOwogCiAgICAgdm9pZCBzZXRQYXNzd29yZE1pbmltdW1MZW5ndGgoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGludCBsZW5ndGgpOwogICAgIGludCBnZXRQYXNzd29yZE1pbmltdW1MZW5ndGgoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlKTsKQEAgLTY3LDcgKzY3LDcgQEAKIAogICAgIGxvbmcgZ2V0UGFzc3dvcmRFeHBpcmF0aW9uKGluIENvbXBvbmVudE5hbWUgd2hvLCBpbnQgdXNlckhhbmRsZSk7CiAKLSAgICBib29sZWFuIGlzQWN0aXZlUGFzc3dvcmRTdWZmaWNpZW50KGludCB1c2VySGFuZGxlKTsKKyAgICBib29sZWFuIGlzQWN0aXZlUGFzc3dvcmRTdWZmaWNpZW50KGludCB1c2VySGFuZGxlLCBib29sZWFuIHBhcmVudCk7CiAgICAgaW50IGdldEN1cnJlbnRGYWlsZWRQYXNzd29yZEF0dGVtcHRzKGludCB1c2VySGFuZGxlKTsKICAgICBpbnQgZ2V0UHJvZmlsZVdpdGhNaW5pbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZShpbnQgdXNlckhhbmRsZSk7CiAKQEAgLTEzMCw2ICsxMzAsOSBAQAogICAgIGJvb2xlYW4gc2V0RGV2aWNlT3duZXJMb2NrU2NyZWVuSW5mbyhpbiBDb21wb25lbnROYW1lIHdobywgU3RyaW5nIGRldmljZU93bmVySW5mbyk7CiAgICAgU3RyaW5nIGdldERldmljZU93bmVyTG9ja1NjcmVlbkluZm8oKTsKIAorICAgIGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZChpbiBDb21wb25lbnROYW1lIGFkbWluLCBTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gc3VzcGVuZGVkKTsKKyAgICBib29sZWFuIGdldFBhY2thZ2VTdXNwZW5kZWQoaW4gQ29tcG9uZW50TmFtZSBhZG1pbiwgU3RyaW5nIHBhY2thZ2VOYW1lKTsKKwogICAgIGJvb2xlYW4gaW5zdGFsbENhQ2VydChpbiBDb21wb25lbnROYW1lIGFkbWluLCBpbiBieXRlW10gY2VydEJ1ZmZlcik7CiAgICAgdm9pZCB1bmluc3RhbGxDYUNlcnRzKGluIENvbXBvbmVudE5hbWUgYWRtaW4sIGluIFN0cmluZ1tdIGFsaWFzZXMpOwogICAgIHZvaWQgZW5mb3JjZUNhbk1hbmFnZUNhQ2VydHMoaW4gQ29tcG9uZW50TmFtZSBhZG1pbik7CkBAIC0xNDYsNiArMTQ5LDkgQEAKIAogICAgIHZvaWQgc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGluIFN0cmluZyBwYWNrYWdlTmFtZSwgaW4gQnVuZGxlIHNldHRpbmdzKTsKICAgICBCdW5kbGUgZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGluIFN0cmluZyBwYWNrYWdlTmFtZSk7CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZShpbiBDb21wb25lbnROYW1lIGFkbWluLCBpbiBTdHJpbmcgcGFja2FnZU5hbWUpOworICAgIFN0cmluZyBnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZShpbiBDb21wb25lbnROYW1lIGFkbWluKTsKKyAgICBib29sZWFuIGlzQ2FsbGVyQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoKTsKIAogICAgIHZvaWQgc2V0UmVzdHJpY3Rpb25zUHJvdmlkZXIoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGluIENvbXBvbmVudE5hbWUgcHJvdmlkZXIpOwogICAgIENvbXBvbmVudE5hbWUgZ2V0UmVzdHJpY3Rpb25zUHJvdmlkZXIoaW50IHVzZXJIYW5kbGUpOwpAQCAtMTk2LDYgKzIwMiw5IEBACiAgICAgdm9pZCBzZXRDcm9zc1Byb2ZpbGVDYWxsZXJJZERpc2FibGVkKGluIENvbXBvbmVudE5hbWUgd2hvLCBib29sZWFuIGRpc2FibGVkKTsKICAgICBib29sZWFuIGdldENyb3NzUHJvZmlsZUNhbGxlcklkRGlzYWJsZWQoaW4gQ29tcG9uZW50TmFtZSB3aG8pOwogICAgIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ2FsbGVySWREaXNhYmxlZEZvclVzZXIoaW50IHVzZXJJZCk7CisgICAgdm9pZCBzZXRDcm9zc1Byb2ZpbGVDb250YWN0c1NlYXJjaERpc2FibGVkKGluIENvbXBvbmVudE5hbWUgd2hvLCBib29sZWFuIGRpc2FibGVkKTsKKyAgICBib29sZWFuIGdldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoaW4gQ29tcG9uZW50TmFtZSB3aG8pOworICAgIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZEZvclVzZXIoaW50IHVzZXJJZCk7CiAgICAgdm9pZCBzdGFydE1hbmFnZWRRdWlja0NvbnRhY3QoU3RyaW5nIGxvb2t1cEtleSwgbG9uZyBjb250YWN0SWQsIGxvbmcgZGlyZWN0b3J5SWQsIGluIEludGVudCBvcmlnaW5hbEludGVudCk7CiAKICAgICB2b2lkIHNldEJsdWV0b290aENvbnRhY3RTaGFyaW5nRGlzYWJsZWQoaW4gQ29tcG9uZW50TmFtZSB3aG8sIGJvb2xlYW4gZGlzYWJsZWQpOwpAQCAtMjM4LDQgKzI0NywxNSBAQAogICAgIGJvb2xlYW4gaXNNYW5hZ2VkUHJvZmlsZShpbiBDb21wb25lbnROYW1lIGFkbWluKTsKICAgICBib29sZWFuIGlzU3lzdGVtT25seVVzZXIoaW4gQ29tcG9uZW50TmFtZSBhZG1pbik7CiAgICAgU3RyaW5nIGdldFdpZmlNYWNBZGRyZXNzKCk7CisgICAgdm9pZCByZWJvb3QoaW4gQ29tcG9uZW50TmFtZSBhZG1pbik7CisKKyAgICB2b2lkIHNldFNob3J0U3VwcG9ydE1lc3NhZ2UoaW4gQ29tcG9uZW50TmFtZSBhZG1pbiwgaW4gU3RyaW5nIG1lc3NhZ2UpOworICAgIFN0cmluZyBnZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGluIENvbXBvbmVudE5hbWUgYWRtaW4pOworICAgIHZvaWQgc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGluIENvbXBvbmVudE5hbWUgYWRtaW4sIGluIFN0cmluZyBtZXNzYWdlKTsKKyAgICBTdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGluIENvbXBvbmVudE5hbWUgYWRtaW4pOworCisgICAgU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGluIENvbXBvbmVudE5hbWUgYWRtaW4sIGludCB1c2VySGFuZGxlKTsKKyAgICBTdHJpbmcgZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihpbiBDb21wb25lbnROYW1lIGFkbWluLCBpbnQgdXNlckhhbmRsZSk7CisKKyAgICBib29sZWFuIGlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlQWxsb3dlZChpbnQgdXNlckhhbmRsZSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvam9iL0pvYkluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9qb2IvSm9iSW5mby5qYXZhCmluZGV4IDBkOWU3NzguLmI4OTk3MTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9qb2IvSm9iSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9qb2IvSm9iSW5mby5qYXZhCkBAIC02NCw2ICs2NCwxMSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBQ0tPRkZfUE9MSUNZX0VYUE9ORU5USUFMID0gMTsKIAorICAgIC8qIE1pbmltdW0gaW50ZXJ2YWwgZm9yIGEgcGVyaW9kaWMgam9iLCBpbiBtaWxsaXNlY29uZHMuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9QRVJJT0RfTUlMTElTID0gNjAgKiA2MCAqIDEwMDBMOyAgIC8vIDYwIG1pbnV0ZXMKKyAgICAvKiBNaW5pbXVtIGZsZXggZm9yIGEgcGVyaW9kaWMgam9iLCBpbiBtaWxsaXNlY29uZHMuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9GTEVYX01JTExJUyA9IDUgKiA2MCAqIDEwMDBMOyAvLyA1IG1pbnV0ZXMKKwogICAgIC8qKgogICAgICAqIERlZmF1bHQgdHlwZSBvZiBiYWNrb2ZmLgogICAgICAqIEBoaWRlCkBAIC04Myw2ICs4OCw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzUGVyaW9kaWM7CiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzUGVyc2lzdGVkOwogICAgIHByaXZhdGUgZmluYWwgbG9uZyBpbnRlcnZhbE1pbGxpczsKKyAgICBwcml2YXRlIGZpbmFsIGxvbmcgZmxleE1pbGxpczsKICAgICBwcml2YXRlIGZpbmFsIGxvbmcgaW5pdGlhbEJhY2tvZmZNaWxsaXM7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgYmFja29mZlBvbGljeTsKIApAQCAtMTY1LDcgKzE3MSwxNyBAQAogICAgICAqIGpvYiBkb2VzIG5vdCByZWN1ciBwZXJpb2RpY2FsbHkuCiAgICAgICovCiAgICAgcHVibGljIGxvbmcgZ2V0SW50ZXJ2YWxNaWxsaXMoKSB7Ci0gICAgICAgIHJldHVybiBpbnRlcnZhbE1pbGxpczsKKyAgICAgICAgcmV0dXJuIGludGVydmFsTWlsbGlzID49IE1JTl9QRVJJT0RfTUlMTElTID8gaW50ZXJ2YWxNaWxsaXMgOiBNSU5fUEVSSU9EX01JTExJUzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGbGV4IHRpbWUgZm9yIHRoaXMgam9iLiBPbmx5IHZhbGlkIGlmIHRoaXMgaXMgYSBwZXJpb2RpYyBqb2IuCisgICAgICovCisgICAgcHVibGljIGxvbmcgZ2V0RmxleE1pbGxpcygpIHsKKyAgICAgICAgbG9uZyBpbnRlcnZhbCA9IGdldEludGVydmFsTWlsbGlzKCk7CisgICAgICAgIGxvbmcgcGVyY2VudENsYW1wID0gNSAqIGludGVydmFsIC8gMTAwOworICAgICAgICBsb25nIGNsYW1wZWRGbGV4ID0gTWF0aC5tYXgoZmxleE1pbGxpcywgTWF0aC5tYXgocGVyY2VudENsYW1wLCBNSU5fRkxFWF9NSUxMSVMpKTsKKyAgICAgICAgcmV0dXJuIGNsYW1wZWRGbGV4IDw9IGludGVydmFsID8gY2xhbXBlZEZsZXggOiBpbnRlcnZhbDsKICAgICB9CiAKICAgICAvKioKQEAgLTIxNiw2ICsyMzIsNyBAQAogICAgICAgICBpc1BlcmlvZGljID0gaW4ucmVhZEludCgpID09IDE7CiAgICAgICAgIGlzUGVyc2lzdGVkID0gaW4ucmVhZEludCgpID09IDE7CiAgICAgICAgIGludGVydmFsTWlsbGlzID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgZmxleE1pbGxpcyA9IGluLnJlYWRMb25nKCk7CiAgICAgICAgIGluaXRpYWxCYWNrb2ZmTWlsbGlzID0gaW4ucmVhZExvbmcoKTsKICAgICAgICAgYmFja29mZlBvbGljeSA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgaGFzRWFybHlDb25zdHJhaW50ID0gaW4ucmVhZEludCgpID09IDE7CkBAIC0yMzQsNiArMjUxLDcgQEAKICAgICAgICAgaXNQZXJpb2RpYyA9IGIubUlzUGVyaW9kaWM7CiAgICAgICAgIGlzUGVyc2lzdGVkID0gYi5tSXNQZXJzaXN0ZWQ7CiAgICAgICAgIGludGVydmFsTWlsbGlzID0gYi5tSW50ZXJ2YWxNaWxsaXM7CisgICAgICAgIGZsZXhNaWxsaXMgPSBiLm1GbGV4TWlsbGlzOwogICAgICAgICBpbml0aWFsQmFja29mZk1pbGxpcyA9IGIubUluaXRpYWxCYWNrb2ZmTWlsbGlzOwogICAgICAgICBiYWNrb2ZmUG9saWN5ID0gYi5tQmFja29mZlBvbGljeTsKICAgICAgICAgaGFzRWFybHlDb25zdHJhaW50ID0gYi5tSGFzRWFybHlDb25zdHJhaW50OwpAQCAtMjU4LDYgKzI3Niw3IEBACiAgICAgICAgIG91dC53cml0ZUludChpc1BlcmlvZGljID8gMSA6IDApOwogICAgICAgICBvdXQud3JpdGVJbnQoaXNQZXJzaXN0ZWQgPyAxIDogMCk7CiAgICAgICAgIG91dC53cml0ZUxvbmcoaW50ZXJ2YWxNaWxsaXMpOworICAgICAgICBvdXQud3JpdGVMb25nKGZsZXhNaWxsaXMpOwogICAgICAgICBvdXQud3JpdGVMb25nKGluaXRpYWxCYWNrb2ZmTWlsbGlzKTsKICAgICAgICAgb3V0LndyaXRlSW50KGJhY2tvZmZQb2xpY3kpOwogICAgICAgICBvdXQud3JpdGVJbnQoaGFzRWFybHlDb25zdHJhaW50ID8gMSA6IDApOwpAQCAtMjk5LDYgKzMxOCw3IEBACiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzRWFybHlDb25zdHJhaW50OwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc0xhdGVDb25zdHJhaW50OwogICAgICAgICBwcml2YXRlIGxvbmcgbUludGVydmFsTWlsbGlzOworICAgICAgICBwcml2YXRlIGxvbmcgbUZsZXhNaWxsaXM7CiAgICAgICAgIC8vIEJhY2stb2ZmIHBhcmFtZXRlcnMuCiAgICAgICAgIHByaXZhdGUgbG9uZyBtSW5pdGlhbEJhY2tvZmZNaWxsaXMgPSBERUZBVUxUX0lOSVRJQUxfQkFDS09GRl9NSUxMSVM7CiAgICAgICAgIHByaXZhdGUgaW50IG1CYWNrb2ZmUG9saWN5ID0gREVGQVVMVF9CQUNLT0ZGX1BPTElDWTsKQEAgLTM3Myw4ICszOTMsMjEgQEAKICAgICAgICAgICogQHBhcmFtIGludGVydmFsTWlsbGlzIE1pbGxpc2Vjb25kIGludGVydmFsIGZvciB3aGljaCB0aGlzIGpvYiB3aWxsIHJlcGVhdC4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFBlcmlvZGljKGxvbmcgaW50ZXJ2YWxNaWxsaXMpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRQZXJpb2RpYyhpbnRlcnZhbE1pbGxpcywgaW50ZXJ2YWxNaWxsaXMpOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNwZWNpZnkgdGhhdCB0aGlzIGpvYiBzaG91bGQgcmVjdXIgd2l0aCB0aGUgcHJvdmlkZWQgaW50ZXJ2YWwgYW5kIGZsZXguIFRoZSBqb2IgY2FuCisgICAgICAgICAqIGV4ZWN1dGUgYXQgYW55IHRpbWUgaW4gYSB3aW5kb3cgb2YgZmxleCBsZW5ndGggYXQgdGhlIGVuZCBvZiB0aGUgcGVyaW9kLgorICAgICAgICAgKiBAcGFyYW0gaW50ZXJ2YWxNaWxsaXMgTWlsbGlzZWNvbmQgaW50ZXJ2YWwgZm9yIHdoaWNoIHRoaXMgam9iIHdpbGwgcmVwZWF0LgorICAgICAgICAgKiBAcGFyYW0gZmxleE1pbGxpcyBNaWxsaXNlY29uZCBmbGV4IGZvciB0aGlzIGpvYi4gRmxleCBpcyBjbGFtcGVkIHRvIGJlIGF0IGxlYXN0CisgICAgICAgICAqICAgICAgICAgICAgICAgICAgIHtAbGluayAjTUlOX0ZMRVhfTUlMTElTfSBvciA1IHBlcmNlbnQgb2YgdGhlIHBlcmlvZCwgd2hpY2hldmVyIGlzCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgIGhpZ2hlci4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFBlcmlvZGljKGxvbmcgaW50ZXJ2YWxNaWxsaXMsIGxvbmcgZmxleE1pbGxpcykgewogICAgICAgICAgICAgbUlzUGVyaW9kaWMgPSB0cnVlOwogICAgICAgICAgICAgbUludGVydmFsTWlsbGlzID0gaW50ZXJ2YWxNaWxsaXM7CisgICAgICAgICAgICBtRmxleE1pbGxpcyA9IGZsZXhNaWxsaXM7CiAgICAgICAgICAgICBtSGFzRWFybHlDb25zdHJhaW50ID0gbUhhc0xhdGVDb25zdHJhaW50ID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvam9iL0pvYlNjaGVkdWxlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL2pvYi9Kb2JTY2hlZHVsZXIuamF2YQppbmRleCBhMWMxMWYzLi42ZTk2ZGE1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9hcHAvam9iL0pvYlNjaGVkdWxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC9qb2IvSm9iU2NoZWR1bGVyLmphdmEKQEAgLTUwLDE4ICs1MCwxNSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU1VMVF9GQUlMVVJFID0gMDsKICAgICAvKioKLSAgICAgKiBSZXR1cm5lZCBmcm9tIHtAbGluayAjc2NoZWR1bGUoSm9iSW5mbyl9IGlmIHRoaXMgYXBwbGljYXRpb24gaGFzIG1hZGUgdG9vIG1hbnkgcmVxdWVzdHMgZm9yCi0gICAgICogd29yayBvdmVyIHRvbyBzaG9ydCBhIHRpbWUuCisgICAgICogUmV0dXJuZWQgZnJvbSB7QGxpbmsgI3NjaGVkdWxlKEpvYkluZm8pfSBpZiB0aGlzIGpvYiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgc2NoZWR1bGVkLgogICAgICAqLwotICAgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeS4KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVNVTFRfU1VDQ0VTUyA9IDE7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0gam9iIFRoZSBqb2IgeW91IHdpc2ggc2NoZWR1bGVkLiBTZWUKICAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuam9iLkpvYkluZm8uQnVpbGRlciBKb2JJbmZvLkJ1aWxkZXJ9IGZvciBtb3JlIGRldGFpbCBvbiB0aGUgc29ydHMgb2Ygam9icwogICAgICAqIHlvdSBjYW4gc2NoZWR1bGUuCi0gICAgICogQHJldHVybiBJZiA+MCwgdGhpcyBpbnQgcmV0dXJucyB0aGUgam9iSWQgb2YgdGhlIHN1Y2Nlc3NmdWxseSBzY2hlZHVsZWQgam9iLgotICAgICAqIE90aGVyd2lzZSB5b3UgaGF2ZSB0byBjb21wYXJlIHRoZSByZXR1cm4gdmFsdWUgdG8gdGhlIGVycm9yIGNvZGVzIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KKyAgICAgKiBAcmV0dXJuIEFuIGludCByZXByZXNlbnRpbmcgKHtAbGluayAjUkVTVUxUX1NVQ0NFU1N9IG9yIHtAbGluayAjUkVTVUxUX0ZBSUxVUkV9KS4KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgaW50IHNjaGVkdWxlKEpvYkluZm8gam9iKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0cy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0cy5qYXZhCmluZGV4IGVmMDhlYjkuLjVmOTdjOWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzLmphdmEKQEAgLTEyMSwxMiArMTIxLDEyIEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWNrZXQgewogICAgICAgICAvKioKLSAgICAgICAgICogQ29tYmluZWQgdXNhZ2UgYWNyb3NzIGFsbCBvdGhlciBzdGF0ZXMuCisgICAgICAgICAqIENvbWJpbmVkIHVzYWdlIGFjcm9zcyBhbGwgc3RhdGVzLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfQUxMID0gLTE7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFVzYWdlIG5vdCBhY2NvdW50ZWQgaW4gYW55IG90aGVyIHN0YXRlcy4KKyAgICAgICAgICogVXNhZ2Ugbm90IGFjY291bnRlZCBmb3IgaW4gYW55IG90aGVyIHN0YXRlLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfREVGQVVMVCA9IDB4MTsKIApAQCAtMTUwLDggKzE1MCw0MCBAQAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVUlEX1RFVEhFUklORyA9IFRyYWZmaWNTdGF0cy5VSURfVEVUSEVSSU5HOwogCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb21iaW5lZCB1c2FnZSBhY3Jvc3MgYWxsIG1ldGVyaW5nIHN0YXRlcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1FVEVSSU5HX0FMTCA9IC0xOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2FnZSBub3QgYWNjb3VudGVkIGZvciBpbiBhbnkgb3RoZXIgbWV0ZXJpbmcgc3RhdGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRVRFUklOR19ERUZBVUxUID0gMHgxOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBNZXRlcmVkIHVzYWdlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUVURVJJTkdfTUVURVJFRCA9IDB4MjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ29tYmluZWQgdXNhZ2UgYWNyb3NzIGFsbCByb2FtaW5nIHN0YXRlcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJPQU1JTkdfQUxMID0gLTE7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVzYWdlIG5vdCBhY2NvdW50ZWQgZm9yIGluIGFueSBvdGhlciByb2FtaW5nIHN0YXRlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9BTUlOR19ERUZBVUxUID0gMHgxOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBSb2FtaW5nIHVzYWdlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUk9BTUlOR19ST0FNSU5HID0gMHgyOworCiAgICAgICAgIHByaXZhdGUgaW50IG1VaWQ7CiAgICAgICAgIHByaXZhdGUgaW50IG1TdGF0ZTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbU1ldGVyaW5nOworICAgICAgICBwcml2YXRlIGludCBtUm9hbWluZzsKICAgICAgICAgcHJpdmF0ZSBsb25nIG1CZWdpblRpbWVTdGFtcDsKICAgICAgICAgcHJpdmF0ZSBsb25nIG1FbmRUaW1lU3RhbXA7CiAgICAgICAgIHByaXZhdGUgbG9uZyBtUnhCeXRlczsKQEAgLTIwNiw2ICsyMzgsMzAgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBNZXRlcmluZyBzdGF0ZS4gT25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOjxwLz4KKyAgICAgICAgICogPHVsPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNNRVRFUklOR19BTEx9PC9saT4KKyAgICAgICAgICogPGxpPntAbGluayAjTUVURVJJTkdfREVGQVVMVH08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNNRVRFUklOR19NRVRFUkVEfTwvbGk+CisgICAgICAgICAqIDwvdWw+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldE1ldGVyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIG1NZXRlcmluZzsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSb2FtaW5nIHN0YXRlLiBPbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6PHAvPgorICAgICAgICAgKiA8dWw+CisgICAgICAgICAqIDxsaT57QGxpbmsgI1JPQU1JTkdfQUxMfTwvbGk+CisgICAgICAgICAqIDxsaT57QGxpbmsgI1JPQU1JTkdfREVGQVVMVH08L2xpPgorICAgICAgICAgKiA8bGk+e0BsaW5rICNST0FNSU5HX1JPQU1JTkd9PC9saT4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Um9hbWluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBtUm9hbWluZzsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgogICAgICAgICAgKiBTdGFydCB0aW1lc3RhbXAgb2YgdGhlIGJ1Y2tldCdzIHRpbWUgaW50ZXJ2YWwuIERlZmluZWQgaW4gdGVybXMgb2YgIlVuaXggdGltZSIsIHNlZQogICAgICAgICAgKiB7QGxpbmsgamF2YS5sYW5nLlN5c3RlbSNjdXJyZW50VGltZU1pbGxpc30uCiAgICAgICAgICAqIEByZXR1cm4gU3RhcnQgb2YgaW50ZXJ2YWwuCkBAIC0zOTgsNiArNDU0LDkgQEAKICAgICBwcml2YXRlIHZvaWQgZmlsbEJ1Y2tldEZyb21TdW1tYXJ5RW50cnkoQnVja2V0IGJ1Y2tldE91dCkgewogICAgICAgICBidWNrZXRPdXQubVVpZCA9IEJ1Y2tldC5jb252ZXJ0VWlkKG1SZWN5Y2xlZFN1bW1hcnlFbnRyeS51aWQpOwogICAgICAgICBidWNrZXRPdXQubVN0YXRlID0gQnVja2V0LmNvbnZlcnRTdGF0ZShtUmVjeWNsZWRTdW1tYXJ5RW50cnkuc2V0KTsKKyAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IG1ldGVyaW5nL3JvYW1pbmcgdHJhY2tpbmcuCisgICAgICAgIGJ1Y2tldE91dC5tTWV0ZXJpbmcgPSBCdWNrZXQuTUVURVJJTkdfQUxMOworICAgICAgICBidWNrZXRPdXQubVJvYW1pbmcgPSBCdWNrZXQuUk9BTUlOR19BTEw7CiAgICAgICAgIGJ1Y2tldE91dC5tQmVnaW5UaW1lU3RhbXAgPSBtU3RhcnRUaW1lU3RhbXA7CiAgICAgICAgIGJ1Y2tldE91dC5tRW5kVGltZVN0YW1wID0gbUVuZFRpbWVTdGFtcDsKICAgICAgICAgYnVja2V0T3V0Lm1SeEJ5dGVzID0gbVJlY3ljbGVkU3VtbWFyeUVudHJ5LnJ4Qnl0ZXM7CkBAIC00NDQsNiArNTAzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1SZWN5Y2xlZEhpc3RvcnlFbnRyeSk7CiAgICAgICAgICAgICAgICAgYnVja2V0T3V0Lm1VaWQgPSBCdWNrZXQuY29udmVydFVpZChnZXRVaWQoKSk7CiAgICAgICAgICAgICAgICAgYnVja2V0T3V0Lm1TdGF0ZSA9IEJ1Y2tldC5TVEFURV9BTEw7CisgICAgICAgICAgICAgICAgYnVja2V0T3V0Lm1NZXRlcmluZyA9IEJ1Y2tldC5NRVRFUklOR19BTEw7CisgICAgICAgICAgICAgICAgYnVja2V0T3V0Lm1Sb2FtaW5nID0gQnVja2V0LlJPQU1JTkdfQUxMOwogICAgICAgICAgICAgICAgIGJ1Y2tldE91dC5tQmVnaW5UaW1lU3RhbXAgPSBtUmVjeWNsZWRIaXN0b3J5RW50cnkuYnVja2V0U3RhcnQ7CiAgICAgICAgICAgICAgICAgYnVja2V0T3V0Lm1FbmRUaW1lU3RhbXAgPSBtUmVjeWNsZWRIaXN0b3J5RW50cnkuYnVja2V0U3RhcnQgKwogICAgICAgICAgICAgICAgICAgICAgICAgbVJlY3ljbGVkSGlzdG9yeUVudHJ5LmJ1Y2tldER1cmF0aW9uOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0c01hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2FwcC91c2FnZS9OZXR3b3JrU3RhdHNNYW5hZ2VyLmphdmEKaW5kZXggMjg4NmNkYS4uMGZjZTdhOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYXBwL3VzYWdlL05ldHdvcmtTdGF0c01hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9hcHAvdXNhZ2UvTmV0d29ya1N0YXRzTWFuYWdlci5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSWRlbnRpdHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1RlbXBsYXRlOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIApAQCAtMjksMTAgKzMwLDkgQEAKICAqIGRpc2NyZXRlIGJpbnMgb2YgdGltZSBjYWxsZWQgJ0J1Y2tldHMnLiBTZWUge0BsaW5rIE5ldHdvcmtTdGF0cy5CdWNrZXR9IGZvciBkZXRhaWxzLgogICogPHAgLz4KICAqIFF1ZXJpZXMgY2FuIGRlZmluZSBhIHRpbWUgaW50ZXJ2YWwgaW4gdGhlIGZvcm0gb2Ygc3RhcnQgYW5kIGVuZCB0aW1lc3RhbXBzIChMb25nLk1JTl9WQUxVRSBhbmQKLSAqIExvbmcuTUFYX1ZBTFVFIGNhbiBiZSB1c2VkIHRvIHNpbXVsYXRlIG9wZW4gZW5kZWQgaW50ZXJ2YWxzKS4gQWxsIHF1ZXJpZXMgKGV4Y2VwdAotICoge0BsaW5rICNxdWVyeVN1bW1hcnlGb3JEZXZpY2V9KSBjb2xsZWN0IG9ubHkgbmV0d29yayB1c2FnZSBvZiBhcHBzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSB1c2VyCi0gKiBhcyB0aGUgY2xpZW50LiBJbiBhZGRpdGlvbiB0ZXRoZXJpbmcgdXNhZ2UsIHVzYWdlIGJ5IHJlbW92ZWQgdXNlcnMgYW5kIGFwcHMsIGFuZCB1c2FnZSBieSBzeXN0ZW0KLSAqIGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIHJlc3VsdHMuCisgKiBMb25nLk1BWF9WQUxVRSBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSBvcGVuIGVuZGVkIGludGVydmFscykuIEJ5IGRlZmF1bHQsIGFwcHMgY2FuIG9ubHkgb2J0YWluCisgKiBkYXRhIGFib3V0IHRoZW1zZWx2ZXMuIFNlZSB0aGUgYmVsb3cgbm90ZSBmb3Igc3BlY2lhbCBjYXNlcyBpbiB3aGljaCBhcHBzIGNhbiBvYnRhaW4gZGF0YSBhYm91dAorICogb3RoZXIgYXBwbGljYXRpb25zLgogICogPGgzPgogICogU3VtbWFyeSBxdWVyaWVzCiAgKiA8L2gzPgpAQCAtNTEsMTMgKzUxLDIwIEBACiAgKiBtdWx0aXBsZSBidWNrZXRzIGZvciBhIHBhcnRpY3VsYXIga2V5IGJ1dCBhbGwgQnVja2V0J3Mgc3RhdGUgaXMgZ29pbmcgdG8gYmUKICAqIHtAbGluayBOZXR3b3JrU3RhdHMuQnVja2V0I1NUQVRFX0FMTH0uCiAgKiA8cCAvPgotICogPGI+Tk9URTo8L2I+IFRoaXMgQVBJIHJlcXVpcmVzIHRoZSBwZXJtaXNzaW9uCisgKiA8Yj5OT1RFOjwvYj4gQWNjZXNzaW5nIHN0YXRzIGZvciBhcHBzIG90aGVyIHRoYW4gdGhlIGNhbGxpbmcgYXBwIHJlcXVpcmVzIHRoZSBwZXJtaXNzaW9uCiAgKiB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI1BBQ0tBR0VfVVNBR0VfU1RBVFN9LCB3aGljaCBpcyBhIHN5c3RlbS1sZXZlbCBwZXJtaXNzaW9uIGFuZAogICogd2lsbCBub3QgYmUgZ3JhbnRlZCB0byB0aGlyZC1wYXJ0eSBhcHBzLiBIb3dldmVyLCBkZWNsYXJpbmcgdGhlIHBlcm1pc3Npb24gaW1wbGllcyBpbnRlbnRpb24gdG8KICAqIHVzZSB0aGUgQVBJIGFuZCB0aGUgdXNlciBvZiB0aGUgZGV2aWNlIGNhbiBncmFudCBwZXJtaXNzaW9uIHRocm91Z2ggdGhlIFNldHRpbmdzIGFwcGxpY2F0aW9uLgogICogUHJvZmlsZSBvd25lciBhcHBzIGFyZSBhdXRvbWF0aWNhbGx5IGdyYW50ZWQgcGVybWlzc2lvbiB0byBxdWVyeSBkYXRhIG9uIHRoZSBwcm9maWxlIHRoZXkgbWFuYWdlCi0gKiAodGhhdCBpcywgZm9yIGFueSBxdWVyeSBleGNlcHQge0BsaW5rICNxdWVyeVN1bW1hcnlGb3JEZXZpY2V9KS4gRGV2aWNlIG93bmVyIGFwcHMgbGlrZXdpc2UgZ2V0Ci0gKiBhY2Nlc3MgdG8gdXNhZ2UgZGF0YSBvZiB0aGUgcHJpbWFyeSB1c2VyLgorICogKHRoYXQgaXMsIGZvciBhbnkgcXVlcnkgZXhjZXB0IHtAbGluayAjcXVlcnlTdW1tYXJ5Rm9yRGV2aWNlfSkuIERldmljZSBvd25lciBhcHBzIGFuZCBjYXJyaWVyLQorICogcHJpdmlsZWdlZCBhcHBzIGxpa2V3aXNlIGdldCBhY2Nlc3MgdG8gdXNhZ2UgZGF0YSBmb3IgYWxsIHVzZXJzIG9uIHRoZSBkZXZpY2UuCisgKiA8cCAvPgorICogSW4gYWRkaXRpb24gdG8gdGV0aGVyaW5nIHVzYWdlLCB1c2FnZSBieSByZW1vdmVkIHVzZXJzIGFuZCBhcHBzLCBhbmQgdXNhZ2UgYnkgdGhlIHN5c3RlbQorICogaXMgYWxzbyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0cyBmb3IgY2FsbGVycyB3aXRoIG9uZSBvZiB0aGVzZSBoaWdoZXIgbGV2ZWxzIG9mIGFjY2Vzcy4KKyAqIDxwIC8+CisgKiA8Yj5OT1RFOjwvYj4gUHJpb3IgdG8gQVBJIGxldmVsIHtAdmFsdWUgQnVpbGQuVkVSU0lPTl9DT0RFUyNOfSwgYWxsIGNhbGxzIHRvIHRoZXNlIEFQSXMgcmVxdWlyZWQKKyAqIHRoZSBhYm92ZSBwZXJtaXNzaW9uLCBldmVuIHRvIGFjY2VzcyBhbiBhcHAncyBvd24gZGF0YSB1c2FnZSwgYW5kIGNhcnJpZXItcHJpdmlsZWdlZCBhcHBzIHdlcmUKKyAqIG5vdCBpbmNsdWRlZC4KICAqLwogcHVibGljIGNsYXNzIE5ldHdvcmtTdGF0c01hbmFnZXIgewogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiTmV0d29ya1N0YXRzTWFuYWdlciI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEFkYXB0ZXIuamF2YQppbmRleCAzZThhNTFlLi5lYjRjYjkxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoQWRhcHRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhBZGFwdGVyLmphdmEKQEAgLTIxNjUsNyArMjE2NSw3IEBACiAgICAgQERlcHJlY2F0ZWQKICAgICBAUmVxdWlyZXNQZXJtaXNzaW9uKE1hbmlmZXN0LnBlcm1pc3Npb24uQkxVRVRPT1RIX0FETUlOKQogICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0TGVTY2FuKGZpbmFsIFVVSURbXSBzZXJ2aWNlVXVpZHMsIGZpbmFsIExlU2NhbkNhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInN0YXJ0TGVTY2FuKCk6ICIgKyBzZXJ2aWNlVXVpZHMpOworICAgICAgICBpZiAoREJHKSBMb2cuZChUQUcsICJzdGFydExlU2NhbigpOiAiICsgQXJyYXlzLnRvU3RyaW5nKHNlcnZpY2VVdWlkcykpOwogICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKERCRykgTG9nLmUoVEFHLCAic3RhcnRMZVNjYW46IG51bGwgY2FsbGJhY2siKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhIZWFkc2V0Q2xpZW50Q2FsbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsLmphdmEKaW5kZXggN2I1YTA0NS4uMDAyZjYzZiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsLmphdmEKQEAgLTE5LDYgKzE5LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKK2ltcG9ydCBqYXZhLnV0aWwuVVVJRDsKKwogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBzaW5nbGUgY2FsbCwgaXRzIHN0YXRlIGFuZCBwcm9wZXJ0aWVzLgogICogSXQgaW1wbGVtZW50cyB7QGxpbmsgUGFyY2VsYWJsZX0gZm9yIGludGVyLXByb2Nlc3MgbWVzc2FnZSBwYXNzaW5nLgpAQCAtNjcsMTQgKzY5LDIxIEBACiAgICAgcHJpdmF0ZSBTdHJpbmcgbU51bWJlcjsKICAgICBwcml2YXRlIGJvb2xlYW4gbU11bHRpUGFydHk7CiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1PdXRnb2luZzsKKyAgICBwcml2YXRlIGZpbmFsIFVVSUQgbVVVSUQ7CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIEJsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsIGluc3RhbmNlLgogICAgICAqLwogICAgIHB1YmxpYyBCbHVldG9vdGhIZWFkc2V0Q2xpZW50Q2FsbChCbHVldG9vdGhEZXZpY2UgZGV2aWNlLCBpbnQgaWQsIGludCBzdGF0ZSwgU3RyaW5nIG51bWJlciwKICAgICAgICAgICAgIGJvb2xlYW4gbXVsdGlQYXJ0eSwgYm9vbGVhbiBvdXRnb2luZykgeworICAgICAgICB0aGlzKGRldmljZSwgaWQsIFVVSUQucmFuZG9tVVVJRCgpLCBzdGF0ZSwgbnVtYmVyLCBtdWx0aVBhcnR5LCBvdXRnb2luZyk7CisgICAgfQorCisgICAgcHVibGljIEJsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsKEJsdWV0b290aERldmljZSBkZXZpY2UsIGludCBpZCwgVVVJRCB1dWlkLCBpbnQgc3RhdGUsCisgICAgICAgICAgICBTdHJpbmcgbnVtYmVyLCBib29sZWFuIG11bHRpUGFydHksIGJvb2xlYW4gb3V0Z29pbmcpIHsKICAgICAgICAgbURldmljZSA9IGRldmljZTsKICAgICAgICAgbUlkID0gaWQ7CisgICAgICAgIG1VVUlEID0gdXVpZDsKICAgICAgICAgbVN0YXRlID0gc3RhdGU7CiAgICAgICAgIG1OdW1iZXIgPSBudW1iZXIgIT0gbnVsbCA/IG51bWJlciA6ICIiOwogICAgICAgICBtTXVsdGlQYXJ0eSA9IG11bHRpUGFydHk7CkBAIC0xMzQsNiArMTQzLDE2IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogR2V0cyBjYWxsJ3MgVVVJRC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gY2FsbCB1dWlkCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgVVVJRCBnZXRVVUlEKCkgeworICAgICAgICByZXR1cm4gbVVVSUQ7CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0cyBjYWxsJ3MgY3VycmVudCBzdGF0ZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gc3RhdGUgb2YgdGhpcyBwYXJ0aWN1bGFyIHBob25lIGNhbGwuCkBAIC0xNzIsMTAgKzE5MSwxNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiB0b1N0cmluZyhmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhib29sZWFuIGxvZ2dhYmxlKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJCbHVldG9vdGhIZWFkc2V0Q2xpZW50Q2FsbHttRGV2aWNlOiAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobURldmljZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxvZ2dhYmxlID8gbURldmljZS5oYXNoQ29kZSgpIDogbURldmljZSk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIG1JZDogIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1JZCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIG1VVUlEOiAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobVVVSUQpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBtU3RhdGU6ICIpOwogICAgICAgICBzd2l0Y2ggKG1TdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBDQUxMX1NUQVRFX0FDVElWRTogYnVpbGRlci5hcHBlbmQoIkFDVElWRSIpOyBicmVhazsKQEAgLTE4OSw3ICsyMTQsNyBAQAogICAgICAgICAgICAgZGVmYXVsdDogYnVpbGRlci5hcHBlbmQobVN0YXRlKTsgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgbU51bWJlcjogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1OdW1iZXIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChsb2dnYWJsZSA/IG1OdW1iZXIuaGFzaENvZGUoKSA6IG1OdW1iZXIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBtTXVsdGlQYXJ0eTogIik7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1NdWx0aVBhcnR5KTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgbU91dGdvaW5nOiAiKTsKQEAgLTIwNiw4ICsyMzEsOCBAQAogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyBCbHVldG9vdGhIZWFkc2V0Q2xpZW50Q2FsbCBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJsdWV0b290aEhlYWRzZXRDbGllbnRDYWxsKChCbHVldG9vdGhEZXZpY2UpaW4ucmVhZFBhcmNlbGFibGUobnVsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4ucmVhZEludCgpLCBpbi5yZWFkSW50KCksIGluLnJlYWRTdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi5yZWFkSW50KCkgPT0gMSwgaW4ucmVhZEludCgpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluLnJlYWRJbnQoKSwgVVVJRC5mcm9tU3RyaW5nKGluLnJlYWRTdHJpbmcoKSksIGluLnJlYWRJbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi5yZWFkU3RyaW5nKCksIGluLnJlYWRJbnQoKSA9PSAxLCBpbi5yZWFkSW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMjAsNiArMjQ1LDcgQEAKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBvdXQsIGludCBmbGFncykgewogICAgICAgICBvdXQud3JpdGVQYXJjZWxhYmxlKG1EZXZpY2UsIDApOwogICAgICAgICBvdXQud3JpdGVJbnQobUlkKTsKKyAgICAgICAgb3V0LndyaXRlU3RyaW5nKG1VVUlELnRvU3RyaW5nKCkpOwogICAgICAgICBvdXQud3JpdGVJbnQobVN0YXRlKTsKICAgICAgICAgb3V0LndyaXRlU3RyaW5nKG1OdW1iZXIpOwogICAgICAgICBvdXQud3JpdGVJbnQobU11bHRpUGFydHkgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9ibHVldG9vdGgvQmx1ZXRvb3RoU29ja2V0LmphdmEKaW5kZXggZmI4MWZkMS4uYWUxMmM4OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvYmx1ZXRvb3RoL0JsdWV0b290aFNvY2tldC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2JsdWV0b290aC9CbHVldG9vdGhTb2NrZXQuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiBpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTG9jYWxTb2NrZXQ7CkBAIC0yMzQsOSArMjM1LDkgQEAKICAgICAgICAgQmx1ZXRvb3RoU29ja2V0IGFzID0gbmV3IEJsdWV0b290aFNvY2tldCh0aGlzKTsKICAgICAgICAgYXMubVNvY2tldFN0YXRlID0gU29ja2V0U3RhdGUuQ09OTkVDVEVEOwogICAgICAgICBGaWxlRGVzY3JpcHRvcltdIGZkcyA9IG1Tb2NrZXQuZ2V0QW5jaWxsYXJ5RmlsZURlc2NyaXB0b3JzKCk7Ci0gICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInNvY2tldCBmZCBwYXNzZWQgYnkgc3RhY2sgIGZkczogIiArIGZkcyk7CisgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgInNvY2tldCBmZCBwYXNzZWQgYnkgc3RhY2sgZmRzOiAiICsgQXJyYXlzLnRvU3RyaW5nKGZkcykpOwogICAgICAgICBpZihmZHMgPT0gbnVsbCB8fCBmZHMubGVuZ3RoICE9IDEpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgInNvY2tldCBmZCBwYXNzZWQgZnJvbSBzdGFjayBmYWlsZWQsIGZkczogIiArIGZkcyk7CisgICAgICAgICAgICBMb2cuZShUQUcsICJzb2NrZXQgZmQgcGFzc2VkIGZyb20gc3RhY2sgZmFpbGVkLCBmZHM6ICIgKyBBcnJheXMudG9TdHJpbmcoZmRzKSk7CiAgICAgICAgICAgICBhcy5jbG9zZSgpOwogICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJidCBzb2NrZXQgYWNlcHQgZmFpbGVkIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGEuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ2xpcERhdGEuamF2YQppbmRleCBjOTM0ZThkLi4wYjgwZjhhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NsaXBEYXRhLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9DbGlwRGF0YS5qYXZhCkBAIC0zNiw2ICszNiw3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogUmVwcmVzZW50YXRpb24gb2YgYSBjbGlwcGVkIGRhdGEgb24gdGhlIGNsaXBib2FyZC4KQEAgLTkxNCw2ICs5MTUsMjcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIGNvbGxlY3RVcmlzKExpc3Q8VXJpPiBvdXQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtSXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIENsaXBEYXRhLkl0ZW0gaXRlbSA9IGdldEl0ZW1BdChpKTsKKworICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VXJpKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG91dC5hZGQoaXRlbS5nZXRVcmkoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBpdGVtLmdldEludGVudCgpOworICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGludGVudC5nZXREYXRhKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBvdXQuYWRkKGludGVudC5nZXREYXRhKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW50ZW50LmdldENsaXBEYXRhKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0Q2xpcERhdGEoKS5jb2xsZWN0VXJpcyhvdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXIuamF2YQppbmRleCBiYTljZjdjLi4xYzNmNDVjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyLmphdmEKQEAgLTUyLDYgKzUyLDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogCiAvKioKICAqIENvbnRlbnQgcHJvdmlkZXJzIGFyZSBvbmUgb2YgdGhlIHByaW1hcnkgYnVpbGRpbmcgYmxvY2tzIG9mIEFuZHJvaWQgYXBwbGljYXRpb25zLCBwcm92aWRpbmcKQEAgLTE4NTQsNyArMTg1NSw3IEBACiAgICAgICAgICAgICBpZiAobUF1dGhvcml0eSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBtQXV0aG9yaXR5OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9IG1BdXRob3JpdGllczsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9IEFycmF5cy50b1N0cmluZyhtQXV0aG9yaXRpZXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKG1lc3NhZ2UpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UHJvdmlkZXJDbGllbnQuamF2YQppbmRleCBkMTI1OTVmLi40MTM1NDg3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRQcm92aWRlckNsaWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFByb3ZpZGVyQ2xpZW50LmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Bc3NldEZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Jvc3NQcm9jZXNzQ3Vyc29yV3JhcHBlcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CkBAIC0zMiwyNyArMzMsMzQgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKIAogaW1wb3J0IGRhbHZpay5zeXN0ZW0uQ2xvc2VHdWFyZDsKIAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CiAKIC8qKgotICogVGhlIHB1YmxpYyBpbnRlcmZhY2Ugb2JqZWN0IHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIHtAbGluayBDb250ZW50UHJvdmlkZXJ9LiBUaGlzIGlzIG9idGFpbmVkIGJ5Ci0gKiBjYWxsaW5nIHtAbGluayBDb250ZW50UmVzb2x2ZXIjYWNxdWlyZUNvbnRlbnRQcm92aWRlckNsaWVudH0uIFRoaXMgb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQKLSAqIHVzaW5nIHtAbGluayAjcmVsZWFzZX0gaW4gb3JkZXIgdG8gaW5kaWNhdGUgdG8gdGhlIHN5c3RlbSB0aGF0IHRoZSB7QGxpbmsgQ29udGVudFByb3ZpZGVyfSBpcwotICogbm8gbG9uZ2VyIG5lZWRlZCBhbmQgY2FuIGJlIGtpbGxlZCB0byBmcmVlIHVwIHJlc291cmNlcy4KLSAqCi0gKiA8cD5Ob3RlIHRoYXQgeW91IHNob3VsZCBnZW5lcmFsbHkgY3JlYXRlIGEgbmV3IENvbnRlbnRQcm92aWRlckNsaWVudCBpbnN0YW5jZQotICogZm9yIGVhY2ggdGhyZWFkIHRoYXQgd2lsbCBiZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMuICBVbmxpa2UKKyAqIFRoZSBwdWJsaWMgaW50ZXJmYWNlIG9iamVjdCB1c2VkIHRvIGludGVyYWN0IHdpdGggYSBzcGVjaWZpYworICoge0BsaW5rIENvbnRlbnRQcm92aWRlcn0uCisgKiA8cD4KKyAqIEluc3RhbmNlcyBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZworICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNhY3F1aXJlQ29udGVudFByb3ZpZGVyQ2xpZW50fSBvcgorICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNhY3F1aXJlVW5zdGFibGVDb250ZW50UHJvdmlkZXJDbGllbnR9LiBJbnN0YW5jZXMgbXVzdAorICogYmUgcmVsZWFzZWQgdXNpbmcge0BsaW5rICNjbG9zZSgpfSBpbiBvcmRlciB0byBpbmRpY2F0ZSB0byB0aGUgc3lzdGVtIHRoYXQKKyAqIHRoZSB1bmRlcmx5aW5nIHtAbGluayBDb250ZW50UHJvdmlkZXJ9IGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kIGNhbiBiZSBraWxsZWQKKyAqIHRvIGZyZWUgdXAgcmVzb3VyY2VzLgorICogPHA+CisgKiBOb3RlIHRoYXQgeW91IHNob3VsZCBnZW5lcmFsbHkgY3JlYXRlIGEgbmV3IENvbnRlbnRQcm92aWRlckNsaWVudCBpbnN0YW5jZQorICogZm9yIGVhY2ggdGhyZWFkIHRoYXQgd2lsbCBiZSBwZXJmb3JtaW5nIG9wZXJhdGlvbnMuIFVubGlrZQogICoge0BsaW5rIENvbnRlbnRSZXNvbHZlcn0sIHRoZSBtZXRob2RzIGhlcmUgc3VjaCBhcyB7QGxpbmsgI3F1ZXJ5fSBhbmQKLSAqIHtAbGluayAjb3BlbkZpbGV9IGFyZSBub3QgdGhyZWFkIHNhZmUgLS0geW91IG11c3Qgbm90IGNhbGwKLSAqIHtAbGluayAjcmVsZWFzZSgpfSBvbiB0aGUgQ29udGVudFByb3ZpZGVyQ2xpZW50IHRob3NlIGNhbGxzIGFyZSBtYWRlIGZyb20KLSAqIHVudGlsIHlvdSBhcmUgZmluaXNoZWQgd2l0aCB0aGUgZGF0YSB0aGV5IGhhdmUgcmV0dXJuZWQuCisgKiB7QGxpbmsgI29wZW5GaWxlfSBhcmUgbm90IHRocmVhZCBzYWZlIC0tIHlvdSBtdXN0IG5vdCBjYWxsIHtAbGluayAjY2xvc2UoKX0KKyAqIG9uIHRoZSBDb250ZW50UHJvdmlkZXJDbGllbnQgdGhvc2UgY2FsbHMgYXJlIG1hZGUgZnJvbSB1bnRpbCB5b3UgYXJlIGZpbmlzaGVkCisgKiB3aXRoIHRoZSBkYXRhIHRoZXkgaGF2ZSByZXR1cm5lZC4KICAqLwotcHVibGljIGNsYXNzIENvbnRlbnRQcm92aWRlckNsaWVudCB7CitwdWJsaWMgY2xhc3MgQ29udGVudFByb3ZpZGVyQ2xpZW50IGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb250ZW50UHJvdmlkZXJDbGllbnQiOwogCiAgICAgQEd1YXJkZWRCeSgiQ29udGVudFByb3ZpZGVyQ2xpZW50LmNsYXNzIikKQEAgLTYzLDIyICs3MSwyMyBAQAogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVN0YWJsZTsKIAotICAgIHByaXZhdGUgZmluYWwgQ2xvc2VHdWFyZCBtR3VhcmQgPSBDbG9zZUd1YXJkLmdldCgpOworICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtQ2xvc2VkID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKKyAgICBwcml2YXRlIGZpbmFsIENsb3NlR3VhcmQgbUNsb3NlR3VhcmQgPSBDbG9zZUd1YXJkLmdldCgpOwogCiAgICAgcHJpdmF0ZSBsb25nIG1BbnJUaW1lb3V0OwogICAgIHByaXZhdGUgTm90UmVzcG9uZGluZ1J1bm5hYmxlIG1BbnJSdW5uYWJsZTsKIAotICAgIHByaXZhdGUgYm9vbGVhbiBtUmVsZWFzZWQ7Ci0KICAgICAvKioge0BoaWRlfSAqLwotICAgIENvbnRlbnRQcm92aWRlckNsaWVudCgKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBwdWJsaWMgQ29udGVudFByb3ZpZGVyQ2xpZW50KAogICAgICAgICAgICAgQ29udGVudFJlc29sdmVyIGNvbnRlbnRSZXNvbHZlciwgSUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIsIGJvb2xlYW4gc3RhYmxlKSB7CiAgICAgICAgIG1Db250ZW50UmVzb2x2ZXIgPSBjb250ZW50UmVzb2x2ZXI7CiAgICAgICAgIG1Db250ZW50UHJvdmlkZXIgPSBjb250ZW50UHJvdmlkZXI7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IGNvbnRlbnRSZXNvbHZlci5tUGFja2FnZU5hbWU7CisKICAgICAgICAgbVN0YWJsZSA9IHN0YWJsZTsKIAotICAgICAgICBtR3VhcmQub3BlbigicmVsZWFzZSIpOworICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJjbG9zZSIpOwogICAgIH0KIAogICAgIC8qKiB7QGhpZGV9ICovCkBAIC0xMzMsOCArMTQyLDE5IEBACiAgICAgICAgICAgICAgICAgcmVtb3RlQ2FuY2VsbGF0aW9uU2lnbmFsID0gbUNvbnRlbnRQcm92aWRlci5jcmVhdGVDYW5jZWxsYXRpb25TaWduYWwoKTsKICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb25TaWduYWwuc2V0UmVtb3RlKHJlbW90ZUNhbmNlbGxhdGlvblNpZ25hbCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbUNvbnRlbnRQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIHVybCwgcHJvamVjdGlvbiwgc2VsZWN0aW9uLCBzZWxlY3Rpb25BcmdzLAotICAgICAgICAgICAgICAgICAgICBzb3J0T3JkZXIsIHJlbW90ZUNhbmNlbGxhdGlvblNpZ25hbCk7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbUNvbnRlbnRQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIHVybCwgcHJvamVjdGlvbiwgc2VsZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25BcmdzLCBzb3J0T3JkZXIsIHJlbW90ZUNhbmNlbGxhdGlvblNpZ25hbCk7CisgICAgICAgICAgICBpZiAoY3Vyc29yID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCJjb20uZ29vZ2xlLmFuZHJvaWQuZ21zIi5lcXVhbHMobVBhY2thZ2VOYW1lKQorICAgICAgICAgICAgICAgICAgICB8fCAiY29tLmdvb2dsZS5hbmRyb2lkLnN5bmNhZGFwdGVycy5jb250YWN0cyIuZXF1YWxzKG1QYWNrYWdlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGV5J3JlIGNhc3RpbmcgdG8gYSBjb25jcmV0ZSBzdWJjbGFzcywgc2lnaAorICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ3Vyc29yV3JhcHBlcklubmVyKGN1cnNvcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKERlYWRPYmplY3RFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgaWYgKCFtU3RhYmxlKSB7CiAgICAgICAgICAgICAgICAgbUNvbnRlbnRSZXNvbHZlci51bnN0YWJsZVByb3ZpZGVyRGllZChtQ29udGVudFByb3ZpZGVyKTsKQEAgLTQ0NiwyOSArNDY2LDQyIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2FsbCB0aGlzIHRvIGluZGljYXRlIHRvIHRoZSBzeXN0ZW0gdGhhdCB0aGUgYXNzb2NpYXRlZCB7QGxpbmsgQ29udGVudFByb3ZpZGVyfSBpcyBubwotICAgICAqIGxvbmdlciBuZWVkZWQgYnkgdGhpcyB7QGxpbmsgQ29udGVudFByb3ZpZGVyQ2xpZW50fS4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyB3YXMgcmVsZWFzZSwgZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgcmVsZWFzZWQKKyAgICAgKiBDbG9zZXMgdGhpcyBjbGllbnQgY29ubmVjdGlvbiwgaW5kaWNhdGluZyB0byB0aGUgc3lzdGVtIHRoYXQgdGhlCisgICAgICogdW5kZXJseWluZyB7QGxpbmsgQ29udGVudFByb3ZpZGVyfSBpcyBubyBsb25nZXIgbmVlZGVkLgogICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBjbG9zZUludGVybmFsKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNjbG9zZSgpfS4KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBib29sZWFuIHJlbGVhc2UoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgaWYgKG1SZWxlYXNlZCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgcmVsZWFzZWQiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZWxlYXNlZCA9IHRydWU7Ci0gICAgICAgICAgICBtR3VhcmQuY2xvc2UoKTsKKyAgICAgICAgcmV0dXJuIGNsb3NlSW50ZXJuYWwoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gY2xvc2VJbnRlcm5hbCgpIHsKKyAgICAgICAgbUNsb3NlR3VhcmQuY2xvc2UoKTsKKyAgICAgICAgaWYgKG1DbG9zZWQuY29tcGFyZUFuZFNldChmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgIGlmIChtU3RhYmxlKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1Db250ZW50UmVzb2x2ZXIucmVsZWFzZVByb3ZpZGVyKG1Db250ZW50UHJvdmlkZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbUNvbnRlbnRSZXNvbHZlci5yZWxlYXNlVW5zdGFibGVQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7Ci0gICAgICAgIGlmIChtR3VhcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUd1YXJkLndhcm5JZk9wZW4oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1DbG9zZUd1YXJkLndhcm5JZk9wZW4oKTsKKyAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBzdXBlci5maW5hbGl6ZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01MDIsNCArNTM1LDI5IEBACiAgICAgICAgICAgICBtQ29udGVudFJlc29sdmVyLmFwcE5vdFJlc3BvbmRpbmdWaWFQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQ3Vyc29yV3JhcHBlcklubmVyIGV4dGVuZHMgQ3Jvc3NQcm9jZXNzQ3Vyc29yV3JhcHBlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ2xvc2VHdWFyZCBtQ2xvc2VHdWFyZCA9IENsb3NlR3VhcmQuZ2V0KCk7CisKKyAgICAgICAgQ3Vyc29yV3JhcHBlcklubmVyKEN1cnNvciBjdXJzb3IpIHsKKyAgICAgICAgICAgIHN1cGVyKGN1cnNvcik7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJjbG9zZSIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICAgICAgbUNsb3NlR3VhcmQuY2xvc2UoKTsKKyAgICAgICAgICAgIHN1cGVyLmNsb3NlKCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgICAgIGNsb3NlKCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZW50UmVzb2x2ZXIuamF2YQppbmRleCA5ZDBlYmMyLi42ODRhODVlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRlbnRSZXNvbHZlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGVudFJlc29sdmVyLmphdmEKQEAgLTIwLDYgKzIwLDggQEAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlJlcXVpcmVzUGVybWlzc2lvbjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGVzdEFwaTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVXNlcklkSW50OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eVRocmVhZDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwpAQCAtNDcsMTEgKzQ5LDExIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKLWltcG9ydCBkYWx2aWsuc3lzdGVtLkNsb3NlR3VhcmQ7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOwogCitpbXBvcnQgZGFsdmlrLnN5c3RlbS5DbG9zZUd1YXJkOworCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtNTksOSArNjEsOSBAQAogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKIAogLyoqCiAgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGFwcGxpY2F0aW9ucyBhY2Nlc3MgdG8gdGhlIGNvbnRlbnQgbW9kZWwuCkBAIC01MTQsOCArNTE2LDkgQEAKICAgICAgICAgICAgIG1heWJlTG9nUXVlcnlUb0V2ZW50TG9nKGR1cmF0aW9uTWlsbGlzLCB1cmksIHByb2plY3Rpb24sIHNlbGVjdGlvbiwgc29ydE9yZGVyKTsKIAogICAgICAgICAgICAgLy8gV3JhcCB0aGUgY3Vyc29yIG9iamVjdCBpbnRvIEN1cnNvcldyYXBwZXJJbm5lciBvYmplY3QuCi0gICAgICAgICAgICBDdXJzb3JXcmFwcGVySW5uZXIgd3JhcHBlciA9IG5ldyBDdXJzb3JXcmFwcGVySW5uZXIocUN1cnNvciwKLSAgICAgICAgICAgICAgICAgICAgc3RhYmxlUHJvdmlkZXIgIT0gbnVsbCA/IHN0YWJsZVByb3ZpZGVyIDogYWNxdWlyZVByb3ZpZGVyKHVyaSkpOworICAgICAgICAgICAgZmluYWwgSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciA9IChzdGFibGVQcm92aWRlciAhPSBudWxsKSA/IHN0YWJsZVByb3ZpZGVyCisgICAgICAgICAgICAgICAgICAgIDogYWNxdWlyZVByb3ZpZGVyKHVyaSk7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3JXcmFwcGVySW5uZXIgd3JhcHBlciA9IG5ldyBDdXJzb3JXcmFwcGVySW5uZXIocUN1cnNvciwgcHJvdmlkZXIpOwogICAgICAgICAgICAgc3RhYmxlUHJvdmlkZXIgPSBudWxsOwogICAgICAgICAgICAgcUN1cnNvciA9IG51bGw7CiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKQEAgLTE2MDksNyArMTYxMiw3IEBACiAKICAgICAvKiogQGhpZGUgLSBkZXNpZ25hdGVkIHVzZXIgdmVyc2lvbiAqLwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlZ2lzdGVyQ29udGVudE9ic2VydmVyKFVyaSB1cmksIGJvb2xlYW4gbm90aWZ5Rm9yRGVzY2VuZGVudHMsCi0gICAgICAgICAgICBDb250ZW50T2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgICAgICBDb250ZW50T2JzZXJ2ZXIgb2JzZXJ2ZXIsIEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdldENvbnRlbnRTZXJ2aWNlKCkucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIodXJpLCBub3RpZnlGb3JEZXNjZW5kZW50cywKICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZ2V0Q29udGVudE9ic2VydmVyKCksIHVzZXJIYW5kbGUpOwpAQCAtMTY4Myw3ICsxNjg2LDcgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZShVcmkgdXJpLCBDb250ZW50T2JzZXJ2ZXIgb2JzZXJ2ZXIsIGJvb2xlYW4gc3luY1RvTmV0d29yaywKLSAgICAgICAgICAgIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgICAgICBAVXNlcklkSW50IGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLm5vdGlmeUNoYW5nZSgKICAgICAgICAgICAgICAgICAgICAgdXJpLCBvYnNlcnZlciA9PSBudWxsID8gbnVsbCA6IG9ic2VydmVyLmdldENvbnRlbnRPYnNlcnZlcigpLApAQCAtMTgyNCw3ICsxODI3LDcgQEAKICAgICAgKiBAc2VlICNyZXF1ZXN0U3luYyhBY2NvdW50LCBTdHJpbmcsIEJ1bmRsZSkKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXF1ZXN0U3luY0FzVXNlcihBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRob3JpdHksIGludCB1c2VySWQsCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHJlcXVlc3RTeW5jQXNVc2VyKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgQFVzZXJJZEludCBpbnQgdXNlcklkLAogICAgICAgICAgICAgQnVuZGxlIGV4dHJhcykgewogICAgICAgICBpZiAoZXh0cmFzID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk11c3Qgc3BlY2lmeSBleHRyYXMuIik7CkBAIC0xOTIxLDcgKzE5MjQsNyBAQAogICAgICAqIEBzZWUgI2NhbmNlbFN5bmMoQWNjb3VudCwgU3RyaW5nKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNhbmNlbFN5bmNBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIHN0YXRpYyB2b2lkIGNhbmNlbFN5bmNBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBAVXNlcklkSW50IGludCB1c2VySWQpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdldENvbnRlbnRTZXJ2aWNlKCkuY2FuY2VsU3luY0FzVXNlcihhY2NvdW50LCBhdXRob3JpdHksIG51bGwsIHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0xOTQ0LDcgKzE5NDcsNyBAQAogICAgICAqIEBzZWUgI2dldFN5bmNBZGFwdGVyVHlwZXMoKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTeW5jQWRhcHRlclR5cGVbXSBnZXRTeW5jQWRhcHRlclR5cGVzQXNVc2VyKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgc3RhdGljIFN5bmNBZGFwdGVyVHlwZVtdIGdldFN5bmNBZGFwdGVyVHlwZXNBc1VzZXIoQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRTeW5jQWRhcHRlclR5cGVzQXNVc2VyKHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0xOTU2LDggKzE5NTksOSBAQAogICAgICAqIEBoaWRlCiAgICAgICogUmV0dXJucyB0aGUgcGFja2FnZSBuYW1lcyBvZiBzeW5jYWRhcHRlcnMgdGhhdCBtYXRjaCBhIGdpdmVuIHVzZXIgYW5kIGF1dGhvcml0eS4KICAgICAgKi8KKyAgICBAVGVzdEFwaQogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gZ2V0U3luY0FkYXB0ZXJQYWNrYWdlc0ZvckF1dGhvcml0eUFzVXNlcihTdHJpbmcgYXV0aG9yaXR5LAotICAgICAgICAgICAgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRTeW5jQWRhcHRlclBhY2thZ2VzRm9yQXV0aG9yaXR5QXNVc2VyKGF1dGhvcml0eSwgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTE5ODcsNyArMTk5MSw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0U3luY0F1dG9tYXRpY2FsbHlBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LAotICAgICAgICAgICAgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRTeW5jQXV0b21hdGljYWxseUFzVXNlcihhY2NvdW50LCBhdXRob3JpdHksIHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0yMDEzLDcgKzIwMTcsNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFN5bmNBdXRvbWF0aWNhbGx5QXNVc2VyKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgYm9vbGVhbiBzeW5jLAotICAgICAgICAgICAgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBnZXRDb250ZW50U2VydmljZSgpLnNldFN5bmNBdXRvbWF0aWNhbGx5QXNVc2VyKGFjY291bnQsIGF1dGhvcml0eSwgc3luYywgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTIxNzIsNyArMjE3Niw4IEBACiAgICAgICogQHNlZSAjZ2V0SXNTeW5jYWJsZShBY2NvdW50LCBTdHJpbmcpCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRJc1N5bmNhYmxlQXNVc2VyKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldElzU3luY2FibGVBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LAorICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRJc1N5bmNhYmxlQXNVc2VyKGFjY291bnQsIGF1dGhvcml0eSwgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTIyMTUsNyArMjIyMCw3IEBACiAgICAgICogQHNlZSAjZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHkoKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGdldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5QXNVc2VyKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0TWFzdGVyU3luY0F1dG9tYXRpY2FsbHlBc1VzZXIoQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5nZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseUFzVXNlcih1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMjIzOSw3ICsyMjQ0LDcgQEAKICAgICAgKiBAc2VlICNzZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseShib29sZWFuKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1hc3RlclN5bmNBdXRvbWF0aWNhbGx5QXNVc2VyKGJvb2xlYW4gc3luYywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseUFzVXNlcihib29sZWFuIHN5bmMsIEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ2V0Q29udGVudFNlcnZpY2UoKS5zZXRNYXN0ZXJTeW5jQXV0b21hdGljYWxseUFzVXNlcihzeW5jLCB1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMjMxOSw3ICsyMzI0LDcgQEAKICAgICAgKiBAc2VlICNnZXRDdXJyZW50U3luY3MoKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBMaXN0PFN5bmNJbmZvPiBnZXRDdXJyZW50U3luY3NBc1VzZXIoaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxTeW5jSW5mbz4gZ2V0Q3VycmVudFN5bmNzQXNVc2VyKEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0Q3VycmVudFN5bmNzQXNVc2VyKHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0yMzQ3LDcgKzIzNTIsNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBTeW5jU3RhdHVzSW5mbyBnZXRTeW5jU3RhdHVzQXNVc2VyKEFjY291bnQgYWNjb3VudCwgU3RyaW5nIGF1dGhvcml0eSwKLSAgICAgICAgICAgIGludCB1c2VySWQpIHsKKyAgICAgICAgICAgIEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGdldENvbnRlbnRTZXJ2aWNlKCkuZ2V0U3luY1N0YXR1c0FzVXNlcihhY2NvdW50LCBhdXRob3JpdHksIG51bGwsIHVzZXJJZCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0yMzcxLDcgKzIzNzYsOCBAQAogICAgICAqIEBzZWUgI3JlcXVlc3RTeW5jKEFjY291bnQsIFN0cmluZywgQnVuZGxlKQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY1BlbmRpbmdBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3luY1BlbmRpbmdBc1VzZXIoQWNjb3VudCBhY2NvdW50LCBTdHJpbmcgYXV0aG9yaXR5LAorICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udGVudFNlcnZpY2UoKS5pc1N5bmNQZW5kaW5nQXNVc2VyKGFjY291bnQsIGF1dGhvcml0eSwgbnVsbCwgdXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTI1MDMsNDEgKzI1MDksMzEgQEAKIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQ3Vyc29yV3JhcHBlcklubmVyIGV4dGVuZHMgQ3Jvc3NQcm9jZXNzQ3Vyc29yV3JhcHBlciB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgSUNvbnRlbnRQcm92aWRlciBtQ29udGVudFByb3ZpZGVyOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUc9IkN1cnNvcldyYXBwZXJJbm5lciI7CisgICAgICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtUHJvdmlkZXJSZWxlYXNlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Qcm92aWRlclJlbGVhc2VkOwogCi0gICAgICAgIEN1cnNvcldyYXBwZXJJbm5lcihDdXJzb3IgY3Vyc29yLCBJQ29udGVudFByb3ZpZGVyIGljcCkgeworICAgICAgICBDdXJzb3JXcmFwcGVySW5uZXIoQ3Vyc29yIGN1cnNvciwgSUNvbnRlbnRQcm92aWRlciBjb250ZW50UHJvdmlkZXIpIHsKICAgICAgICAgICAgIHN1cGVyKGN1cnNvcik7Ci0gICAgICAgICAgICBtQ29udGVudFByb3ZpZGVyID0gaWNwOworICAgICAgICAgICAgbUNvbnRlbnRQcm92aWRlciA9IGNvbnRlbnRQcm92aWRlcjsKICAgICAgICAgICAgIG1DbG9zZUd1YXJkLm9wZW4oImNsb3NlIik7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOwogICAgICAgICAgICAgc3VwZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci50aGlzLnJlbGVhc2VQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgIG1Qcm92aWRlclJlbGVhc2VkID0gdHJ1ZTsKIAotICAgICAgICAgICAgaWYgKG1DbG9zZUd1YXJkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgICAgICAgICAgaWYgKG1Qcm92aWRlclJlbGVhc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICAgICAgQ29udGVudFJlc29sdmVyLnRoaXMucmVsZWFzZVByb3ZpZGVyKG1Db250ZW50UHJvdmlkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChtQ2xvc2VHdWFyZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1DbG9zZUd1YXJkLndhcm5JZk9wZW4oKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1Qcm92aWRlclJlbGVhc2VkICYmIG1Db250ZW50UHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCB3ZSBhcmUgdXNpbmcgQ2xvc2VHdWFyZCwgbG9nIHRoaXMgYW55d2F5IHNvIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgLy8gYXBwbGljYXRpb24gZGV2ZWxvcGVycyBhbHdheXMgc2VlIHRoZSBtZXNzYWdlIGluIHRoZSBsb2cuCi0gICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkN1cnNvciBmaW5hbGl6ZWQgd2l0aG91dCBwcmlvciBjbG9zZSgpIik7Ci0gICAgICAgICAgICAgICAgICAgIENvbnRlbnRSZXNvbHZlci50aGlzLnJlbGVhc2VQcm92aWRlcihtQ29udGVudFByb3ZpZGVyKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgICAgICB9CkBAIC0yNTQ2LDcgKzI1NDIsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQYXJjZWxGaWxlRGVzY3JpcHRvcklubmVyIGV4dGVuZHMgUGFyY2VsRmlsZURlc2NyaXB0b3IgewogICAgICAgICBwcml2YXRlIGZpbmFsIElDb250ZW50UHJvdmlkZXIgbUNvbnRlbnRQcm92aWRlcjsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Qcm92aWRlclJlbGVhc2VkOworICAgICAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbVByb3ZpZGVyUmVsZWFzZWQgPSBuZXcgQXRvbWljQm9vbGVhbigpOwogCiAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9ySW5uZXIoUGFyY2VsRmlsZURlc2NyaXB0b3IgcGZkLCBJQ29udGVudFByb3ZpZGVyIGljcCkgewogICAgICAgICAgICAgc3VwZXIocGZkKTsKQEAgLTI1NTUsOSArMjU1MSw4IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VSZXNvdXJjZXMoKSB7Ci0gICAgICAgICAgICBpZiAoIW1Qcm92aWRlclJlbGVhc2VkKSB7CisgICAgICAgICAgICBpZiAobVByb3ZpZGVyUmVsZWFzZWQuY29tcGFyZUFuZFNldChmYWxzZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIudGhpcy5yZWxlYXNlUHJvdmlkZXIobUNvbnRlbnRQcm92aWRlcik7Ci0gICAgICAgICAgICAgICAgbVByb3ZpZGVyUmVsZWFzZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjU4NCw3ICsyNTc5LDkgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIElDb250ZW50U2VydmljZSBzQ29udGVudFNlcnZpY2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworCiAgICAgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ29udGVudFJlc29sdmVyIjsKIAogICAgIC8qKiBAaGlkZSAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQppbmRleCAxZjdmZDlkLi5lOWQ4M2ViIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHQuamF2YQpAQCAtMzAsNiArMzAsOCBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdHlsZVJlczsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3R5bGVhYmxlUmVzOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlVzZXJJZEludDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkFzc2V0TWFuYWdlcjsKQEAgLTUzLDggKzU1LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuTWVkaWFTdG9yZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5QWRqdXN0bWVudHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlBZGp1c3RtZW50czsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0RlYnVnOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogCkBAIC0zMjYsMTAgKzMyOCwzOSBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJJTkRfTk9UX1ZJU0lCTEUgPSAweDQwMDAwMDAwOwogCi0gICAgLyoqIFJldHVybiBhbiBBc3NldE1hbmFnZXIgaW5zdGFuY2UgZm9yIHlvdXIgYXBwbGljYXRpb24ncyBwYWNrYWdlLiAqLworICAgIC8qKgorICAgICAqIEZsYWcgZm9yIHtAbGluayAjYmluZFNlcnZpY2V9OiBUaGUgc2VydmljZSBiZWluZyBib3VuZCBpcyBhbgorICAgICAqIHtAbGluayBhbmRyb2lkLlIuYXR0ciNpc29sYXRlZFByb2Nlc3MgaXNvbGF0ZWR9LAorICAgICAqIHtAbGluayBhbmRyb2lkLlIuYXR0ciNleHRlcm5hbFNlcnZpY2UgZXh0ZXJuYWx9IHNlcnZpY2UuICBUaGlzIGJpbmRzIHRoZSBzZXJ2aWNlIGludG8gdGhlCisgICAgICogY2FsbGluZyBhcHBsaWNhdGlvbidzIHBhY2thZ2UsIHJhdGhlciB0aGFuIHRoZSBwYWNrYWdlIGluIHdoaWNoIHRoZSBzZXJ2aWNlIGlzIGRlY2xhcmVkLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQklORF9FWFRFUk5BTF9TRVJWSUNFID0gMHg4MDAwMDAwMDsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gQXNzZXRNYW5hZ2VyIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24ncyBwYWNrYWdlLgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4KKyAgICAgKiBhbiBBc3NldE1hbmFnZXIgaW5zdGFuY2UgdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIFJlc291cmNlcyBpbnN0YW5jZQorICAgICAqIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0UmVzb3VyY2VzKCl9LiBGb3IgZXhhbXBsZSwgdGhleSBzaG91bGQgc2hhcmUgdGhlCisgICAgICogc2FtZSB7QGxpbmsgQ29uZmlndXJhdGlvbn0gb2JqZWN0LgorICAgICAqCisgICAgICogQHJldHVybiBhbiBBc3NldE1hbmFnZXIgaW5zdGFuY2UgZm9yIHRoZSBhcHBsaWNhdGlvbidzIHBhY2thZ2UKKyAgICAgKiBAc2VlICNnZXRSZXNvdXJjZXMoKQorICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBBc3NldE1hbmFnZXIgZ2V0QXNzZXRzKCk7CiAKLSAgICAvKiogUmV0dXJuIGEgUmVzb3VyY2VzIGluc3RhbmNlIGZvciB5b3VyIGFwcGxpY2F0aW9uJ3MgcGFja2FnZS4gKi8KKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgUmVzb3VyY2VzIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24ncyBwYWNrYWdlLgorICAgICAqIDxwPgorICAgICAqIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4KKyAgICAgKiBhIFJlc291cmNlcyBpbnN0YW5jZSB0aGF0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgQXNzZXRNYW5hZ2VyIGluc3RhbmNlCisgICAgICogcmV0dXJuZWQgYnkge0BsaW5rICNnZXRBc3NldHMoKX0uIEZvciBleGFtcGxlLCB0aGV5IHNob3VsZCBzaGFyZSB0aGUKKyAgICAgKiBzYW1lIHtAbGluayBDb25maWd1cmF0aW9ufSBvYmplY3QuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGEgUmVzb3VyY2VzIGluc3RhbmNlIGZvciB0aGUgYXBwbGljYXRpb24ncyBwYWNrYWdlCisgICAgICogQHNlZSAjZ2V0QXNzZXRzKCkKKyAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgUmVzb3VyY2VzIGdldFJlc291cmNlcygpOwogCiAgICAgLyoqIFJldHVybiBQYWNrYWdlTWFuYWdlciBpbnN0YW5jZSB0byBmaW5kIGdsb2JhbCBwYWNrYWdlIGluZm9ybWF0aW9uLiAqLwpAQCAtMjExNiw2ICsyMTQ3LDE0IEBACiAgICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIpOwogCiAgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKiBUaGlzIGlzIGp1c3QgaGVyZSBmb3Igc2VuZGluZyBDT05ORUNUSVZJVFlfQUNUSU9OLgorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihAUmVxdWlyZXNQZXJtaXNzaW9uIEludGVudCBpbnRlbnQsCisgICAgICAgICAgICBVc2VySGFuZGxlIHVzZXIsIEJ1bmRsZSBvcHRpb25zKTsKKworICAgIC8qKgogICAgICAqIDxwPlZlcnNpb24gb2YKICAgICAgKiB7QGxpbmsgI3NlbmRTdGlja3lPcmRlcmVkQnJvYWRjYXN0KEludGVudCwgQnJvYWRjYXN0UmVjZWl2ZXIsIEhhbmRsZXIsIGludCwgU3RyaW5nLCBCdW5kbGUpfQogICAgICAqIHRoYXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZQpAQCAtMzg3MCw3ICszOTA5LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVEVYVF9TVE9SQUdFX0RFVklDRV9FTkNSWVBURUQgPSAweDAwMDAwMDA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTlRFWFRfREVWSUNFX0VOQ1JZUFRFRF9TVE9SQUdFID0gMHgwMDAwMDAwODsKIAogICAgIC8qKgogICAgICAqIEZsYWcgZm9yIHVzZSB3aXRoIHtAbGluayAjY3JlYXRlUGFja2FnZUNvbnRleHR9OiBwb2ludCBhbGwgZmlsZSBBUElzIGF0CkBAIC0zODc4LDExICszOTE3LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVEVYVF9TVE9SQUdFX0NSRURFTlRJQUxfRU5DUllQVEVEID0gMHgwMDAwMDAxMDsKLQotICAgIC8qKiB7QGhpZGV9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVEVYVF9TVE9SQUdFX01BU0sgPSBDT05URVhUX1NUT1JBR0VfREVWSUNFX0VOQ1JZUFRFRAotICAgICAgICAgICAgfCBDT05URVhUX1NUT1JBR0VfQ1JFREVOVElBTF9FTkNSWVBURUQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ09OVEVYVF9DUkVERU5USUFMX0VOQ1JZUFRFRF9TVE9SQUdFID0gMHgwMDAwMDAxMDsKIAogICAgIC8qKgogICAgICAqIEBoaWRlIFVzZWQgdG8gaW5kaWNhdGUgd2Ugc2hvdWxkIHRlbGwgdGhlIGFjdGl2aXR5IG1hbmFnZXIgYWJvdXQgdGhlIHByb2Nlc3MKQEAgLTM5NDMsNyArMzk3OCw4IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0VXNlcklkKCk7CisgICAgQFRlc3RBcGkKKyAgICBwdWJsaWMgYWJzdHJhY3QgQFVzZXJJZEludCBpbnQgZ2V0VXNlcklkKCk7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBuZXcgQ29udGV4dCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IENvbnRleHQgYnV0IHdob3NlIHJlc291cmNlcwpAQCAtMzk4NywxOSArNDAyMywyNiBAQAogICAgICAqIFJldHVybiBhIG5ldyBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgQ29udGV4dCBidXQgd2hvc2Ugc3RvcmFnZQogICAgICAqIEFQSXMgYXJlIGJhY2tlZCBieSBkZXZpY2UtZW5jcnlwdGVkIHN0b3JhZ2UuCiAgICAgICogPHA+Ci0gICAgICogRGF0YSBzdG9yZWQgaW4gZGV2aWNlLWVuY3J5cHRlZCBzdG9yYWdlIGlzIHR5cGljYWxseSBlbmNyeXB0ZWQgd2l0aCBhCi0gICAgICoga2V5IHRpZWQgdG8gdGhlIHBoeXNpY2FsIGRldmljZSwgYW5kIHRoZXkgY2FuIGJlIGFjY2Vzc2VkIHdoZW5ldmVyIHRoZQotICAgICAqIGRldmljZSBoYXMgYm9vdGVkIHN1Y2Nlc3NmdWxseSwgYm90aCA8ZW0+YmVmb3JlIGFuZCBhZnRlcjwvZW0+IHRoZSB1c2VyCi0gICAgICogaGFzIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYSBsb2NrIHBhdHRlcm4gb3IgUElOKS4KKyAgICAgKiBEYXRhIHN0b3JlZCBpbiBkZXZpY2UtZW5jcnlwdGVkIHN0b3JhZ2UgaXMgdHlwaWNhbGx5IGVuY3J5cHRlZCB3aXRoIGEga2V5CisgICAgICogdGllZCB0byB0aGUgcGh5c2ljYWwgZGV2aWNlLCBhbmQgaXQgY2FuIGJlIGFjY2Vzc2VkIHdoZW4gdGhlIGRldmljZSBoYXMKKyAgICAgKiBib290ZWQgc3VjY2Vzc2Z1bGx5LCBib3RoIDxlbT5iZWZvcmUgYW5kIGFmdGVyPC9lbT4gdGhlIHVzZXIgaGFzCisgICAgICogYXV0aGVudGljYXRlZCB3aXRoIHRoZWlyIGNyZWRlbnRpYWxzIChzdWNoIGFzIGEgbG9jayBwYXR0ZXJuIG9yIFBJTikuCisgICAgICogQmVjYXVzZSBkZXZpY2UtZW5jcnlwdGVkIGRhdGEgaXMgYXZhaWxhYmxlIGJlZm9yZSB1c2VyIGF1dGhlbnRpY2F0aW9uLAorICAgICAqIHlvdSBzaG91bGQgY2FyZWZ1bGx5IGNvbnNpZGVyIHdoYXQgZGF0YSB5b3Ugc3RvcmUgdXNpbmcgdGhpcyBDb250ZXh0LgorICAgICAqIDxwPgorICAgICAqIElmIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIHN0b3JlCisgICAgICogZGV2aWNlLWVuY3J5cHRlZCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgZGF0YSB1c2luZyBkaWZmZXJlbnQga2V5cywgdGhlbgorICAgICAqIGJvdGggc3RvcmFnZSBhcmVhcyB3aWxsIGJlY29tZSBhdmFpbGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhleSByZW1haW4KKyAgICAgKiB0d28gZGlzdGluY3Qgc3RvcmFnZSBhcmVhcywgYW5kIG9ubHkgdGhlIHdpbmRvdyBvZiBhdmFpbGFiaWxpdHkgY2hhbmdlcy4KICAgICAgKiA8cD4KICAgICAgKiBFYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhIENvbnRleHQgb2JqZWN0OwogICAgICAqIENvbnRleHQgb2JqZWN0cyBhcmUgbm90IHNoYXJlZCwgaG93ZXZlciBjb21tb24gc3RhdGUgKENsYXNzTG9hZGVyLCBvdGhlcgogICAgICAqIFJlc291cmNlcyBmb3IgdGhlIHNhbWUgY29uZmlndXJhdGlvbikgbWF5IGJlIHNvIHRoZSBDb250ZXh0IGl0c2VsZiBjYW4gYmUKICAgICAgKiBmYWlybHkgbGlnaHR3ZWlnaHQuCiAgICAgICoKLSAgICAgKiBAc2VlICNpc0RldmljZUVuY3J5cHRlZCgpCisgICAgICogQHNlZSAjaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBjcmVhdGVEZXZpY2VFbmNyeXB0ZWRDb250ZXh0KENvbnRleHQgY29udGV4dCk7CisgICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIG5ldyBDb250ZXh0IG9iamVjdCBmb3IgdGhlIGN1cnJlbnQgQ29udGV4dCBidXQgd2hvc2Ugc3RvcmFnZQpAQCAtNDAxMCwxNCArNDA1MywyMSBAQAogICAgICAqIDxlbT5vbmx5IGFmdGVyPC9lbT4gdGhlIHVzZXIgaGFzIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYQogICAgICAqIGxvY2sgcGF0dGVybiBvciBQSU4pLgogICAgICAqIDxwPgorICAgICAqIElmIHRoZSB1bmRlcmx5aW5nIGRldmljZSBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIHN0b3JlCisgICAgICogZGV2aWNlLWVuY3J5cHRlZCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgZGF0YSB1c2luZyBkaWZmZXJlbnQga2V5cywgdGhlbgorICAgICAqIGJvdGggc3RvcmFnZSBhcmVhcyB3aWxsIGJlY29tZSBhdmFpbGFibGUgYXQgdGhlIHNhbWUgdGltZS4gVGhleSByZW1haW4KKyAgICAgKiB0d28gZGlzdGluY3Qgc3RvcmFnZSBhcmVhcywgYW5kIG9ubHkgdGhlIHdpbmRvdyBvZiBhdmFpbGFiaWxpdHkgY2hhbmdlcy4KKyAgICAgKiA8cD4KICAgICAgKiBFYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiBhIENvbnRleHQgb2JqZWN0OwogICAgICAqIENvbnRleHQgb2JqZWN0cyBhcmUgbm90IHNoYXJlZCwgaG93ZXZlciBjb21tb24gc3RhdGUgKENsYXNzTG9hZGVyLCBvdGhlcgogICAgICAqIFJlc291cmNlcyBmb3IgdGhlIHNhbWUgY29uZmlndXJhdGlvbikgbWF5IGJlIHNvIHRoZSBDb250ZXh0IGl0c2VsZiBjYW4gYmUKICAgICAgKiBmYWlybHkgbGlnaHR3ZWlnaHQuCiAgICAgICoKLSAgICAgKiBAc2VlICNpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKQorICAgICAqIEBzZWUgI2lzQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2UoKQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoQ29udGV4dCBjb250ZXh0KTsKKyAgICBAU3lzdGVtQXBpCisgICAgcHVibGljIGFic3RyYWN0IENvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCk7CiAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBkaXNwbGF5IGFkanVzdG1lbnRzIGhvbGRlciBmb3IgdGhpcyBjb250ZXh0LiAgVGhpcyBpbmZvcm1hdGlvbgpAQCAtNDA0NSwxNSArNDA5NSwxNyBAQAogICAgICAqIEluZGljYXRlcyBpZiB0aGUgc3RvcmFnZSBBUElzIG9mIHRoaXMgQ29udGV4dCBhcmUgYmFja2VkIGJ5CiAgICAgICogZGV2aWNlLWVuY3J5cHRlZCBzdG9yYWdlLgogICAgICAqCi0gICAgICogQHNlZSAjY3JlYXRlRGV2aWNlRW5jcnlwdGVkQ29udGV4dChDb250ZXh0KQorICAgICAqIEBzZWUgI2NyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpOworICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRGV2aWNlRW5jcnlwdGVkU3RvcmFnZSgpOwogCiAgICAgLyoqCiAgICAgICogSW5kaWNhdGVzIGlmIHRoZSBzdG9yYWdlIEFQSXMgb2YgdGhpcyBDb250ZXh0IGFyZSBiYWNrZWQgYnkKICAgICAgKiBjcmVkZW50aWFsLWVuY3J5cHRlZCBzdG9yYWdlLgogICAgICAqCi0gICAgICogQHNlZSAjY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoQ29udGV4dCkKKyAgICAgKiBAc2VlICNjcmVhdGVDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkKCk7CisgICAgQFN5c3RlbUFwaQorICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2UoKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvQ29udGV4dFdyYXBwZXIuamF2YQppbmRleCA3M2QwZGRjLi5jOTlkZGM4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0NvbnRleHRXcmFwcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9Db250ZXh0V3JhcHBlci5qYXZhCkBAIC04Miw4ICs4Miw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFJlc291cmNlcyBnZXRSZXNvdXJjZXMoKQotICAgIHsKKyAgICBwdWJsaWMgUmVzb3VyY2VzIGdldFJlc291cmNlcygpIHsKICAgICAgICAgcmV0dXJuIG1CYXNlLmdldFJlc291cmNlcygpOwogICAgIH0KIApAQCAtNTM2LDYgKzUzNSwxMyBAQAogICAgICAgICBtQmFzZS5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgdXNlcik7CiAgICAgfQogCisgICAgLyoqIEBoaWRlICovCisgICAgQE92ZXJyaWRlCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgdm9pZCBzZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsIFVzZXJIYW5kbGUgdXNlciwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgbUJhc2Uuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIHVzZXIsIG9wdGlvbnMpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIHZvaWQgc2VuZFN0aWNreU9yZGVyZWRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwKQEAgLTc5MiwyMiArNzk4LDI2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkQ29udGV4dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG1CYXNlLmNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoY29udGV4dCk7CisgICAgcHVibGljIENvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBtQmFzZS5jcmVhdGVEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpOworICAgIH0KKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgQFN5c3RlbUFwaQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIG1CYXNlLmNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KENvbnRleHQgY29udGV4dCkgewotICAgICAgICByZXR1cm4gbUJhc2UuY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoY29udGV4dCk7CisgICAgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCkgeworICAgICAgICByZXR1cm4gbUJhc2UuaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCk7CiAgICAgfQogCisgICAgLyoqIHtAaGlkZX0gKi8KKyAgICBAU3lzdGVtQXBpCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQmFzZS5pc0RldmljZUVuY3J5cHRlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1CYXNlLmlzQ3JlZGVudGlhbEVuY3J5cHRlZCgpOworICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2UoKSB7CisgICAgICAgIHJldHVybiBtQmFzZS5pc0NyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvSW50ZW50LmphdmEKaW5kZXggYTI3ZDFjYi4uNTE5ZTVhMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9JbnRlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L0ludGVudC5qYXZhCkBAIC0zMDM0LDYgKzMwMzQsMjQgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fR0xPQkFMX0JVVFRPTiA9ICJhbmRyb2lkLmludGVudC5hY3Rpb24uR0xPQkFMX0JVVFRPTiI7CiAKICAgICAvKioKKyAgICAgKiBCcm9hZGNhc3QgQWN0aW9uOiBTZW50IHdoZW4gbWVkaWEgcmVzb3VyY2UgaXMgZ3JhbnRlZC4KKyAgICAgKiA8cD4KKyAgICAgKiB7QGxpbmsgI0VYVFJBX1BBQ0tBR0VTfSBzcGVjaWZpZXMgdGhlIHBhY2thZ2VzIG9uIHRoZSBwcm9jZXNzIGhvbGRpbmcgdGhlIG1lZGlhIHJlc291cmNlCisgICAgICogZ3JhbnRlZC4KKyAgICAgKiA8L3A+CisgICAgICogPHAgY2xhc3M9Im5vdGUiPgorICAgICAqIFRoaXMgaXMgYSBwcm90ZWN0ZWQgaW50ZW50IHRoYXQgY2FuIG9ubHkgYmUgc2VudCBieSB0aGUgc3lzdGVtLgorICAgICAqIDwvcD4KKyAgICAgKiA8cCBjbGFzcz0ibm90ZSI+CisgICAgICogVGhpcyByZXF1aXJlcyB0aGUgUkVDRUlWRV9NRURJQV9SRVNPVVJDRV9VU0FHRSBwZXJtaXNzaW9uLgorICAgICAqIDwvcD4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX01FRElBX1JFU09VUkNFX0dSQU5URUQgPQorICAgICAgICAgICAgImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9SRVNPVVJDRV9HUkFOVEVEIjsKKworICAgIC8qKgogICAgICAqIEFjdGl2aXR5IEFjdGlvbjogQWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IGFuZCByZXR1cm4gb25lIG9yIG1vcmUgZXhpc3RpbmcKICAgICAgKiBkb2N1bWVudHMuIFdoZW4gaW52b2tlZCwgdGhlIHN5c3RlbSB3aWxsIGRpc3BsYXkgdGhlIHZhcmlvdXMKICAgICAgKiB7QGxpbmsgRG9jdW1lbnRzUHJvdmlkZXJ9IGluc3RhbmNlcyBpbnN0YWxsZWQgb24gdGhlIGRldmljZSwgbGV0dGluZyB0aGUKQEAgLTM2MDQsNiArMzYyMiwxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1VTRVJfSUQgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuVVNFUl9JRCI7CiAKICAgICAvKioKKyAgICAgKiBBbiBpbnQgcmVwcmVzZW50aW5nIHRoZSB0YXNrIGlkIHRvIGJlIHJldHJpZXZlZC4gVGhpcyBpcyB1c2VkIHdoZW4gYSBsYXVuY2ggZnJvbSByZWNlbnRzIGlzCisgICAgICogaW50ZXJjZXB0ZWQgYnkgYW5vdGhlciBhY3Rpb24gc3VjaCBhcyBjcmVkZW50aWFscyBjb25maXJtYXRpb24gdG8gcmVtZW1iZXIgd2hpY2ggdGFzayBzaG91bGQKKyAgICAgKiBiZSByZXN1bWVkIHdoZW4gY29tcGxldGUuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1RBU0tfSUQgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuVEFTS19JRCI7CisKKyAgICAvKioKICAgICAgKiBBbiBJbnRlbnRbXSBkZXNjcmliaW5nIGFkZGl0aW9uYWwsIGFsdGVybmF0ZSBjaG9pY2VzIHlvdSB3b3VsZCBsaWtlIHNob3duIHdpdGgKICAgICAgKiB7QGxpbmsgI0FDVElPTl9DSE9PU0VSfS4KICAgICAgKgpAQCAtMzY4Nyw2ICszNzE0LDIwIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSU5JVElBTF9JTlRFTlRTID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLklOSVRJQUxfSU5URU5UUyI7CiAKICAgICAvKioKKyAgICAgKiBBIHtAbGluayBJbnRlbnRTZW5kZXJ9IHRvIHN0YXJ0IGFmdGVyIGVwaGVtZXJhbCBpbnN0YWxsYXRpb24gc3VjY2Vzcy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTeXN0ZW1BcGkKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9FUEhFTUVSQUxfU1VDQ0VTUyA9ICJhbmRyb2lkLmludGVudC5leHRyYS5FUEhFTUVSQUxfU1VDQ0VTUyI7CisKKyAgICAvKioKKyAgICAgKiBBIHtAbGluayBJbnRlbnRTZW5kZXJ9IHRvIHN0YXJ0IGFmdGVyIGVwaGVtZXJhbCBpbnN0YWxsYXRpb24gZmFpbHVyZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTeXN0ZW1BcGkKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9FUEhFTUVSQUxfRkFJTFVSRSA9ICJhbmRyb2lkLmludGVudC5leHRyYS5FUEhFTUVSQUxfRkFJTFVSRSI7CisKKyAgICAvKioKICAgICAgKiBBIEJ1bmRsZSBmb3JtaW5nIGEgbWFwcGluZyBvZiBwb3RlbnRpYWwgdGFyZ2V0IHBhY2thZ2UgbmFtZXMgdG8gZGlmZmVyZW50IGV4dHJhcyBCdW5kbGVzCiAgICAgICogdG8gYWRkIHRvIHRoZSBkZWZhdWx0IGludGVudCBleHRyYXMgaW4ge0BsaW5rICNFWFRSQV9JTlRFTlR9IHdoZW4gdXNlZCB3aXRoCiAgICAgICoge0BsaW5rICNBQ1RJT05fQ0hPT1NFUn0uIEVhY2gga2V5IHNob3VsZCBiZSBhIHBhY2thZ2UgbmFtZS4gVGhlIHBhY2thZ2UgbmVlZCBub3QKQEAgLTQwNTQsNiArNDA5NSwzNCBAQAogICAgICAqIE9wdGlvbmFsIGJvb2xlYW4gZXh0cmEgaW5kaWNhdGluZyB3aGV0aGVyIHF1aWV0IG1vZGUgaGFzIGJlZW4gc3dpdGNoZWQgb24gb3Igb2ZmLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1FVSUVUX01PREUgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuUVVJRVRfTU9ERSI7CisKKyAgICAvKioKKyAgICAgKiBVc2VkIGFzIGFuIGludCBleHRyYSBmaWVsZCBpbiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkludGVudCNBQ1RJT05fTUVESUFfUkVTT1VSQ0VfR1JBTlRFRH0KKyAgICAgKiBpbnRlbnRzIHRvIHNwZWNpZnkgdGhlIHJlc291cmNlIHR5cGUgZ3JhbnRlZC4gUG9zc2libGUgdmFsdWVzIGFyZQorICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0VYVFJBX01FRElBX1JFU09VUkNFX1RZUEVfVklERU9fQ09ERUN9IG9yCisgICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5JbnRlbnQjRVhUUkFfTUVESUFfUkVTT1VSQ0VfVFlQRV9BVURJT19DT0RFQ30uCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX01FRElBX1JFU09VUkNFX1RZUEUgPQorICAgICAgICAgICAgImFuZHJvaWQuaW50ZW50LmV4dHJhLk1FRElBX1JFU09VUkNFX1RZUEUiOworCisgICAgLyoqCisgICAgICogVXNlZCBhcyBhbiBpbnQgdmFsdWUgZm9yIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0VYVFJBX01FRElBX1JFU09VUkNFX1RZUEV9CisgICAgICogdG8gcmVwcmVzZW50IHRoYXQgYSB2aWRlbyBjb2RlYyBpcyBhbGxvd2VkIHRvIHVzZS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVhUUkFfTUVESUFfUkVTT1VSQ0VfVFlQRV9WSURFT19DT0RFQyA9IDA7CisKKyAgICAvKioKKyAgICAgKiBVc2VkIGFzIGFuIGludCB2YWx1ZSBmb3Ige0BsaW5rIGFuZHJvaWQuY29udGVudC5JbnRlbnQjRVhUUkFfTUVESUFfUkVTT1VSQ0VfVFlQRX0KKyAgICAgKiB0byByZXByZXNlbnQgdGhhdCBhIGF1ZGlvIGNvZGVjIGlzIGFsbG93ZWQgdG8gdXNlLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFWFRSQV9NRURJQV9SRVNPVVJDRV9UWVBFX0FVRElPX0NPREVDID0gMTsKKwogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEludGVudCBmbGFncyAoc2VlIG1GbGFncyB2YXJpYWJsZSkuCkBAIC00MTU0LDYgKzQyMjMsMjEgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0dSQU5UX1BSRUZJWF9VUklfUEVSTUlTU0lPTiA9IDB4MDAwMDAwODA7CiAKICAgICAvKioKKyAgICAgKiBJbnRlcm5hbCBmbGFnIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHN5c3RlbSBjb21wb25lbnQgaGFzIGRvbmUgdGhlaXIKKyAgICAgKiBob21ld29yayBhbmQgdmVyaWZpZWQgdGhhdCB0aGV5IGNvcnJlY3RseSBoYW5kbGUgcGFja2FnZXMgYW5kIGNvbXBvbmVudHMKKyAgICAgKiB0aGF0IGNvbWUgYW5kIGdvIG92ZXIgdGltZS4gSW4gcGFydGljdWxhcjoKKyAgICAgKiA8dWw+CisgICAgICogPGxpPkFwcHMgaW5zdGFsbGVkIG9uIGV4dGVybmFsIHN0b3JhZ2UsIHdoaWNoIHdpbGwgYXBwZWFyIHRvIGJlCisgICAgICogdW5pbnN0YWxsZWQgd2hpbGUgdGhlIHRoZSBkZXZpY2UgaXMgZWplY3RlZC4KKyAgICAgKiA8bGk+QXBwcyB3aXRoIGVuY3J5cHRpb24gdW5hd2FyZSBjb21wb25lbnRzLCB3aGljaCB3aWxsIGFwcGVhciB0byBub3QKKyAgICAgKiBleGlzdCB3aGlsZSB0aGUgZGV2aWNlIGlzIGxvY2tlZC4KKyAgICAgKiA8L3VsPgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RFQlVHX1RSSUFHRURfTUlTU0lORyA9IDB4MDAwMDAxMDA7CisKKyAgICAvKioKICAgICAgKiBJZiBzZXQsIHRoZSBuZXcgYWN0aXZpdHkgaXMgbm90IGtlcHQgaW4gdGhlIGhpc3Rvcnkgc3RhY2suICBBcyBzb29uIGFzCiAgICAgICogdGhlIHVzZXIgbmF2aWdhdGVzIGF3YXkgZnJvbSBpdCwgdGhlIGFjdGl2aXR5IGlzIGZpbmlzaGVkLiAgVGhpcyBtYXkgYWxzbwogICAgICAqIGJlIHNldCB3aXRoIHRoZSB7QGxpbmsgYW5kcm9pZC5SLnN0eWxlYWJsZSNBbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9ub0hpc3RvcnkKQEAgLTQ0MTksNiArNDUwMywxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUNUSVZJVFlfUkVUQUlOX0lOX1JFQ0VOVFMgPSAweDAwMDAyMDAwOwogCiAgICAgLyoqCisgICAgICogVGhpcyBmbGFnIGlzIG9ubHkgdXNlZCBpbiB0aGUgbXVsdGktd2luZG93IG1vZGUuIFRoZSBuZXcgYWN0aXZpdHkgd2lsbCBiZSBkaXNwbGF5ZWQgb24KKyAgICAgKiB0aGUgb3RoZXIgc2lkZSB0aGFuIHRoZSBvbmUgdGhhdCBpcyBsYXVuY2hpbmcgaXQuIFRoaXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgICoge0BsaW5rICNGTEFHX0FDVElWSVRZX05FV19UQVNLfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FDVElWSVRZX0xBVU5DSF9UT19TSURFID0gMHgwMDAwMTAwMDsKKworICAgIC8qKgogICAgICAqIElmIHNldCwgd2hlbiBzZW5kaW5nIGEgYnJvYWRjYXN0IG9ubHkgcmVnaXN0ZXJlZCByZWNlaXZlcnMgd2lsbCBiZQogICAgICAqIGNhbGxlZCAtLSBubyBCcm9hZGNhc3RSZWNlaXZlciBjb21wb25lbnRzIHdpbGwgYmUgbGF1bmNoZWQuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YQppbmRleCAwY2IwZTlmLi5kZWRmMDdmNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BY3Rpdml0eUluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FjdGl2aXR5SW5mby5qYXZhCkBAIC0yNzYsNiArMjc2LDM1IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19SRVNVTUVfV0hJTEVfUEFVU0lORyA9IDB4NDAwMDsKICAgICAvKioKKyAgICAgKiBCaXQgaW4ge0BsaW5rICNmbGFnc30gaW5kaWNhdGluZyB0aGF0IHRoaXMgYWN0aXZpdHkgc2hvdWxkIGJlIHJ1biB3aXRoIFZSIG1vZGUgZW5hYmxlZC4KKyAgICAgKgorICAgICAqIHtAc2VlIGFuZHJvaWQuYXBwLkFjdGl2aXR5I3NldFZyTW9kZShib29sZWFuKX0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FTkFCTEVfVlJfTU9ERSA9IDB4ODAwMDsKKworICAgIC8qKgorICAgICAqIEJpdCBpbiB7QGxpbmsgI2ZsYWdzfSBpbmRpY2F0aW5nIGlmIHRoZSBhY3Rpdml0eSBpcyByZXNpemVhYmxlIHRvIGFueSBkaW1lbnNpb24uCisgICAgICogU2VlIHtAbGluayBhbmRyb2lkLlIuYXR0ciNyZXNpemVhYmxlQWN0aXZpdHl9LgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19SRVNJWkVBQkxFID0gMHgxMDAwMDsKKworICAgIC8qKgorICAgICAqIEJpdCBpbiB7QGxpbmsgI2ZsYWdzfSBpbmRpY2F0aW5nIGlmIHRoZSBhY3Rpdml0eSBpcyBzdXBwb3J0cyBwaWN0dXJlLWluLXBpY3R1cmUgZm9ybSBvZgorICAgICAqIG11bHRpLXdpbmRvdyBtb2RlLiBTZWUge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3N1cHBvcnRzUGljdHVyZUluUGljdHVyZX0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1NVUFBPUlRTX1BJQ1RVUkVfSU5fUElDVFVSRSA9IDB4MjAwMDA7CisKKyAgICAvKioKKyAgICAgKiBCaXQgaW4ge0BsaW5rICNmbGFnc30gaW5kaWNhdGluZyBpZiB0aGUgYWN0aXZpdHkgaXMgYWx3YXlzIGZvY3VzYWJsZSByZWdhcmRsZXNzIG9mIGlmIGl0IGlzCisgICAgICogaW4gYSB0YXNrL3N0YWNrIHdob3NlIGFjdGl2aXRpZXMgYXJlIG5vcm1hbGx5IG5vdCBmb2N1c2FibGUuCisgICAgICogU2VlIGFuZHJvaWQuUi5hdHRyI2Fsd2F5c0ZvY3VzYWJsZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUxXQVlTX0ZPQ1VTQUJMRSA9IDB4NDAwMDA7CisKKyAgICAvKioKICAgICAgKiBAaGlkZSBCaXQgaW4ge0BsaW5rICNmbGFnc306IElmIHNldCwgdGhpcyBjb21wb25lbnQgd2lsbCBvbmx5IGJlIHNlZW4KICAgICAgKiBieSB0aGUgc3lzdGVtIHVzZXIuICBPbmx5IHdvcmtzIHdpdGggYnJvYWRjYXN0IHJlY2VpdmVycy4gIFNldCBmcm9tIHRoZQogICAgICAqIGFuZHJvaWQuUi5hdHRyI3N5c3RlbVVzZXJPbmx5IGF0dHJpYnV0ZS4KQEAgLTY2NCwyMCArNjkzLDYgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIHBhcmVudEFjdGl2aXR5TmFtZTsKIAotICAgIC8qKgotICAgICAqIFZhbHVlIGluZGljYXRpbmcgaWYgdGhlIGFjdGl2aXR5IGlzIHJlc2l6ZWFibGUgdG8gYW55IGRpbWVuc2lvbi4KLSAgICAgKiBTZWUge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3Jlc2l6ZWFibGVBY3Rpdml0eX0uCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiByZXNpemVhYmxlOwotCi0gICAgLyoqCi0gICAgICogVmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgYWN0aXZpdHkgaXMgc3VwcG9ydHMgcGljdHVyZS1pbi1waWN0dXJlIGZvcm0gb2YgbXVsdGktd2luZG93IG1vZGUuCi0gICAgICogU2VlIHtAbGluayBhbmRyb2lkLlIuYXR0ciNzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmV9LgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNQaXA7Ci0KICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMT0NLX1RBU0tfTEFVTkNIX01PREVfREVGQVVMVCA9IDA7CiAgICAgLyoqIEBoaWRlICovCkBAIC03MjksOCArNzQ0LDYgQEAKICAgICAgICAgdWlPcHRpb25zID0gb3JpZy51aU9wdGlvbnM7CiAgICAgICAgIHBhcmVudEFjdGl2aXR5TmFtZSA9IG9yaWcucGFyZW50QWN0aXZpdHlOYW1lOwogICAgICAgICBtYXhSZWNlbnRzID0gb3JpZy5tYXhSZWNlbnRzOwotICAgICAgICByZXNpemVhYmxlID0gb3JpZy5yZXNpemVhYmxlOwotICAgICAgICBzdXBwb3J0c1BpcCA9IG9yaWcuc3VwcG9ydHNQaXA7CiAgICAgICAgIGxvY2tUYXNrTGF1bmNoTW9kZSA9IG9yaWcubG9ja1Rhc2tMYXVuY2hNb2RlOwogICAgICAgICBsYXlvdXQgPSBvcmlnLmxheW91dDsKICAgICB9CkBAIC03ODUsNyArNzk4LDYgQEAKICAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiB1aU9wdGlvbnM9MHgiICsgSW50ZWdlci50b0hleFN0cmluZyh1aU9wdGlvbnMpKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGZsYWdzJkRVTVBfRkxBR19ERVRBSUxTKSAhPSAwKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICJyZXNpemVhYmxlPSIgKyByZXNpemVhYmxlICsgIiBzdXBwb3J0c1BpcD0iICsgc3VwcG9ydHNQaXApOwogICAgICAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAibG9ja1Rhc2tMYXVuY2hNb2RlPSIKICAgICAgICAgICAgICAgICAgICAgKyBsb2NrVGFza0xhdW5jaE1vZGVUb1N0cmluZyhsb2NrVGFza0xhdW5jaE1vZGUpKTsKICAgICAgICAgfQpAQCAtODIzLDggKzgzNSw2IEBACiAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcocGFyZW50QWN0aXZpdHlOYW1lKTsKICAgICAgICAgZGVzdC53cml0ZUludChwZXJzaXN0YWJsZU1vZGUpOwogICAgICAgICBkZXN0LndyaXRlSW50KG1heFJlY2VudHMpOwotICAgICAgICBkZXN0LndyaXRlSW50KHJlc2l6ZWFibGUgPyAxIDogMCk7Ci0gICAgICAgIGRlc3Qud3JpdGVJbnQoc3VwcG9ydHNQaXAgPyAxIDogMCk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQobG9ja1Rhc2tMYXVuY2hNb2RlKTsKICAgICAgICAgaWYgKGxheW91dCAhPSBudWxsKSB7CiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KDEpOwpAQCAtODY1LDggKzg3NSw2IEBACiAgICAgICAgIHBhcmVudEFjdGl2aXR5TmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgIHBlcnNpc3RhYmxlTW9kZSA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgICAgIG1heFJlY2VudHMgPSBzb3VyY2UucmVhZEludCgpOwotICAgICAgICByZXNpemVhYmxlID0gKHNvdXJjZS5yZWFkSW50KCkgPT0gMSk7Ci0gICAgICAgIHN1cHBvcnRzUGlwID0gKHNvdXJjZS5yZWFkSW50KCkgPT0gMSk7CiAgICAgICAgIGxvY2tUYXNrTGF1bmNoTW9kZSA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgICAgIGlmIChzb3VyY2UucmVhZEludCgpID09IDEpIHsKICAgICAgICAgICAgIGxheW91dCA9IG5ldyBMYXlvdXQoc291cmNlKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FwcGxpY2F0aW9uSW5mby5qYXZhCmluZGV4IDA2MzNiZmYuLjAxNjg5MDggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQXBwbGljYXRpb25JbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BcHBsaWNhdGlvbkluZm8uamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UZXN0QXBpOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKQEAgLTM4Miw2ICszODMsMTIgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0hBUkRXQVJFX0FDQ0VMRVJBVEVEID0gMTw8Mjk7CiAKICAgICAvKioKKyAgICAgKiBWYWx1ZSBmb3Ige0BsaW5rICNmbGFnc306IHRydWUgaWYgdGhpcyBhcHBsaWNhdGlvbidzIHBhY2thZ2UgaXMgaW4KKyAgICAgKiB0aGUgc3VzcGVuZGVkIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VTUEVOREVEID0gMTw8MzA7CisKKyAgICAvKioKICAgICAgKiBWYWx1ZSBmb3Ige0BsaW5rICNmbGFnc306IHRydWUgaWYgY29kZSBmcm9tIHRoaXMgYXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIGJlCiAgICAgICogbG9hZGVkIGludG8gb3RoZXIgYXBwbGljYXRpb25zJyBwcm9jZXNzZXMuIE9uIGRldmljZXMgdGhhdCBzdXBwb3J0IG11bHRpcGxlCiAgICAgICogaW5zdHJ1Y3Rpb24gc2V0cywgdGhpcyBpbXBsaWVzIHRoZSBjb2RlIG1pZ2h0IGJlIGxvYWRlZCBpbnRvIGEgcHJvY2VzcyB0aGF0J3MKQEAgLTQ4NiwxMyArNDkzLDYgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfQVVUT1BMQVkgPSAxIDw8IDc7CiAKICAgICAvKioKLSAgICAgKiBWYWx1ZSBmb3Ige0BsaW5rICNmbGFnc306IHtAY29kZSB0cnVlfSBpZiB0aGUgYXBwbGljYXRpb24gaXMgYmxvY2tlZCB2aWEgcmVzdHJpY3Rpb25zCi0gICAgICogYW5kIGZvciBtb3N0IHB1cnBvc2VzIGlzIGNvbnNpZGVyZWQgYXMgbm90IGluc3RhbGxlZC4KLSAgICAgKiB7QGhpZGV9Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9GTEFHX0VQSEVNRVJBTCA9IDE8PDg7Ci0KLSAgICAvKioKICAgICAgKiBXaGVuIHNldCwgYXQgbGVhc3Qgb25lIGNvbXBvbmVudCBpbnNpZGUgdGhpcyBhcHBsaWNhdGlvbiBpcyBlbmNyeXB0aW9uIGF3YXJlLgogICAgICAqCiAgICAgICogQGhpZGUKQEAgLTUwMCw2ICs1MDAsMjEgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfUEFSVElBTExZX0VOQ1JZUFRJT05fQVdBUkUgPSAxIDw8IDg7CiAKICAgICAvKioKKyAgICAgKiBWYWx1ZSBmb3Ige0BsaW5rICNmbGFnc306IHtAY29kZSB0cnVlfSBpZiB0aGUgYXBwbGljYXRpb24gaXMgYmxvY2tlZCB2aWEgcmVzdHJpY3Rpb25zCisgICAgICogYW5kIGZvciBtb3N0IHB1cnBvc2VzIGlzIGNvbnNpZGVyZWQgYXMgbm90IGluc3RhbGxlZC4KKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9GTEFHX0VQSEVNRVJBTCA9IDEgPDwgOTsKKworICAgIC8qKgorICAgICAqIFdoZW4gc2V0LCBzaWduYWxzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGUgc3lzdGVtIHVzZXIgYW5kIHNob3VsZCBub3QgYmUKKyAgICAgKiB1bmluc3RhbGxlZC4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJJVkFURV9GTEFHX1JFUVVJUkVEX0ZPUl9TWVNURU1fVVNFUiA9IDEgPDwgMTA7CisKKyAgICAvKioKICAgICAgKiBQcml2YXRlL2hpZGRlbiBmbGFncy4gU2VlIHtAY29kZSBQUklWQVRFX0ZMQUdfLi4ufSBjb25zdGFudHMuCiAgICAgICoge0BoaWRlfQogICAgICAqLwpAQCAtNzQ2LDcgKzc2MSw3IEBACiAgICAgICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICJzcGxpdFB1YmxpY1NvdXJjZURpcnM9IiArIEFycmF5cy50b1N0cmluZyhzcGxpdFB1YmxpY1NvdXJjZURpcnMpKTsKICAgICAgICAgfQogICAgICAgICBpZiAocmVzb3VyY2VEaXJzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgInJlc291cmNlRGlycz0iICsgcmVzb3VyY2VEaXJzKTsKKyAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgInJlc291cmNlRGlycz0iICsgQXJyYXlzLnRvU3RyaW5nKHJlc291cmNlRGlycykpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoZmxhZ3MmRFVNUF9GTEFHX0RFVEFJTFMpICE9IDAgJiYgc2VpbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgInNlaW5mbz0iICsgc2VpbmZvKTsKQEAgLTc4OSw3ICs4MDQsMTIgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNSdGxTdXBwb3J0KCkgewogICAgICAgICByZXR1cm4gKGZsYWdzICYgRkxBR19TVVBQT1JUU19SVEwpID09IEZMQUdfU1VQUE9SVFNfUlRMOwogICAgIH0KLSAgICAKKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgcHVibGljIGJvb2xlYW4gaGFzQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIEZMQUdfSEFTX0NPREUpICE9IDA7CisgICAgfQorCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBEaXNwbGF5TmFtZUNvbXBhcmF0b3IKICAgICAgICAgICAgIGltcGxlbWVudHMgQ29tcGFyYXRvcjxBcHBsaWNhdGlvbkluZm8+IHsKICAgICAgICAgcHVibGljIERpc3BsYXlOYW1lQ29tcGFyYXRvcihQYWNrYWdlTWFuYWdlciBwbSkgewpAQCAtMTA1NSw2ICsxMDc1LDcgQEAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBUZXN0QXBpCiAgICAgcHVibGljIGJvb2xlYW4gaXNTeXN0ZW1BcHAoKSB7CiAgICAgICAgIHJldHVybiAoZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19TWVNURU0pICE9IDA7CiAgICAgfQpAQCAtMTA2Miw2ICsxMDgzLDcgQEAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBUZXN0QXBpCiAgICAgcHVibGljIGJvb2xlYW4gaXNQcml2aWxlZ2VkQXBwKCkgewogICAgICAgICByZXR1cm4gKHByaXZhdGVGbGFncyAmIEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfUFJJVklMRUdFRCkgIT0gMDsKICAgICB9CkBAIC0xMTExLDYgKzExMzMsMTMgQEAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzUmVxdWlyZWRGb3JTeXN0ZW1Vc2VyKCkgeworICAgICAgICByZXR1cm4gKHByaXZhdGVGbGFncyAmIEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfUkVRVUlSRURfRk9SX1NZU1RFTV9VU0VSKSAhPSAwOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCiAgICAgQE92ZXJyaWRlIHByb3RlY3RlZCBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvKCkgewogICAgICAgICByZXR1cm4gdGhpczsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FwcHNRdWVyeUhlbHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9BcHBzUXVlcnlIZWxwZXIuamF2YQppbmRleCAwODRiYzE4Li5lNTQyNTg5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0FwcHNRdWVyeUhlbHBlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vQXBwc1F1ZXJ5SGVscGVyLmphdmEKQEAgLTUxLDYgKzUxLDExIEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgR0VUX0lNRVMgPSAxIDw8IDI7CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYWxsIGFwcHMgdGhhdCBhcmUgZmxhZ2dlZCBhcyByZXF1aXJlZCBmb3IgdGhlIHN5c3RlbSB1c2VyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgaW50IEdFVF9SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVIgPSAxIDw8IDM7CisKICAgICBwcml2YXRlIGZpbmFsIElQYWNrYWdlTWFuYWdlciBtUGFja2FnZU1hbmFnZXI7CiAgICAgcHJpdmF0ZSBMaXN0PEFwcGxpY2F0aW9uSW5mbz4gbUFsbEFwcHM7CiAKQEAgLTczLDYgKzc4LDcgQEAKICAgICAgICAgYm9vbGVhbiBub25MYXVuY2hhYmxlQXBwcyA9IChmbGFncyAmIEdFVF9OT05fTEFVTkNIQUJMRV9BUFBTKSA+IDA7CiAgICAgICAgIGJvb2xlYW4gaW50ZXJhY3RBY3Jvc3NVc2VycyA9IChmbGFncyAmIEdFVF9BUFBTX1dJVEhfSU5URVJBQ1RfQUNST1NTX1VTRVJTX1BFUk0pID4gMDsKICAgICAgICAgYm9vbGVhbiBpbWVzID0gKGZsYWdzICYgR0VUX0lNRVMpID4gMDsKKyAgICAgICAgYm9vbGVhbiByZXF1aXJlZEZvclN5c3RlbVVzZXIgPSAoZmxhZ3MgJiBHRVRfUkVRVUlSRURfRk9SX1NZU1RFTV9VU0VSKSA+IDA7CiAgICAgICAgIGlmIChtQWxsQXBwcyA9PSBudWxsKSB7CiAgICAgICAgICAgICBtQWxsQXBwcyA9IGdldEFsbEFwcHModXNlci5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICB9CkBAIC0xNDMsNiArMTQ5LDE4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAocmVxdWlyZWRGb3JTeXN0ZW1Vc2VyKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgYWxsQXBwc1NpemUgPSBtQWxsQXBwcy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbEFwcHNTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBcHBsaWNhdGlvbkluZm8gYXBwSW5mbyA9IG1BbGxBcHBzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAoc3lzdGVtQXBwc09ubHkgJiYgIWFwcEluZm8uaXNTeXN0ZW1BcHAoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGFwcEluZm8uaXNSZXF1aXJlZEZvclN5c3RlbVVzZXIoKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGFwcEluZm8ucGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9Db21wb25lbnRJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8uamF2YQppbmRleCBhMjk1Y2M1Li42M2ExNjNkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0NvbXBvbmVudEluZm8uamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwpAQCAtMTQ4LDYgKzE0OSwxMSBAQAogICAgICAgICByZXR1cm4gYmFubmVyICE9IDAgPyBiYW5uZXIgOiBhcHBsaWNhdGlvbkluZm8uYmFubmVyOwogICAgIH0KIAorICAgIC8qKiB7QGhpZGV9ICovCisgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnROYW1lKHBhY2thZ2VOYW1lLCBuYW1lKTsKKyAgICB9CisKICAgICBwcm90ZWN0ZWQgdm9pZCBkdW1wRnJvbnQoUHJpbnRlciBwdywgU3RyaW5nIHByZWZpeCkgewogICAgICAgICBzdXBlci5kdW1wRnJvbnQocHcsIHByZWZpeCk7CiAgICAgICAgIGlmIChwcm9jZXNzTmFtZSAhPSBudWxsICYmICFwYWNrYWdlTmFtZS5lcXVhbHMocHJvY2Vzc05hbWUpKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0VwaGVtZXJhbFJlc29sdmVJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0VwaGVtZXJhbFJlc29sdmVJbmZvLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZiNGMzMAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vRXBoZW1lcmFsUmVzb2x2ZUluZm8uamF2YQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CisKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBJbmZvcm1hdGlvbiBhYm91dCBhbiBlcGhlbWVyYWwgYXBwbGljYXRpb24uCisgKiBAaGlkZQorICovCitAU3lzdGVtQXBpCitwdWJsaWMgZmluYWwgY2xhc3MgRXBoZW1lcmFsUmVzb2x2ZUluZm8gaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKyAgICAvKiogQWxnb3JpdGhtIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSBkb21haW4gZGlnZXN0ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0hBX0FMR09SSVRITSA9ICJTSEEtMjU2IjsKKworICAgIC8qKiBGdWxsIGRpZ2VzdCBvZiB0aGUgZG9tYWluIGhhc2ggKi8KKyAgICBwcml2YXRlIGZpbmFsIGJ5dGVbXSBtRGlnZXN0Qnl0ZXM7CisgICAgLyoqIFRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBkb21haW4gaGFzaCAqLworICAgIHByaXZhdGUgZmluYWwgaW50IG1EaWdlc3RQcmVmaXg7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgIC8qKiBUaGUgZmlsdGVycyB1c2VkIHRvIG1hdGNoIGRvbWFpbiAqLworICAgIHByaXZhdGUgZmluYWwgTGlzdDxJbnRlbnRGaWx0ZXI+IG1GaWx0ZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+KCk7CisKKyAgICBwdWJsaWMgRXBoZW1lcmFsUmVzb2x2ZUluZm8oQE5vbk51bGwgVXJpIHVyaSwgQE5vbk51bGwgU3RyaW5nIHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgQE5vbk51bGwgTGlzdDxJbnRlbnRGaWx0ZXI+IGZpbHRlcnMpIHsKKyAgICAgICAgLy8gdmFsaWRhdGUgYXJndW1lbnRzCisgICAgICAgIGlmICh1cmkgPT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHBhY2thZ2VOYW1lID09IG51bGwKKyAgICAgICAgICAgICAgICB8fCBmaWx0ZXJzID09IG51bGwKKyAgICAgICAgICAgICAgICB8fCBmaWx0ZXJzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBtRGlnZXN0Qnl0ZXMgPSBnZW5lcmF0ZURpZ2VzdCh1cmkpOworICAgICAgICBtRGlnZXN0UHJlZml4ID0KKyAgICAgICAgICAgICAgICBtRGlnZXN0Qnl0ZXNbMF0gPDwgMjQKKyAgICAgICAgICAgICAgICB8IG1EaWdlc3RCeXRlc1sxXSA8PCAxNgorICAgICAgICAgICAgICAgIHwgbURpZ2VzdEJ5dGVzWzJdIDw8IDgKKyAgICAgICAgICAgICAgICB8IG1EaWdlc3RCeXRlc1szXSA8PCAwOworICAgICAgICBtRmlsdGVycy5hZGRBbGwoZmlsdGVycyk7CisgICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOworICAgIH0KKworICAgIEVwaGVtZXJhbFJlc29sdmVJbmZvKFBhcmNlbCBpbikgeworICAgICAgICBtRGlnZXN0Qnl0ZXMgPSBpbi5jcmVhdGVCeXRlQXJyYXkoKTsKKyAgICAgICAgbURpZ2VzdFByZWZpeCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgbVBhY2thZ2VOYW1lID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICBpbi5yZWFkTGlzdChtRmlsdGVycywgbnVsbCAvKmxvYWRlciovKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYnl0ZVtdIGdldERpZ2VzdEJ5dGVzKCkgeworICAgICAgICByZXR1cm4gbURpZ2VzdEJ5dGVzOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0RGlnZXN0UHJlZml4KCkgeworICAgICAgICByZXR1cm4gbURpZ2VzdFByZWZpeDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkgeworICAgICAgICByZXR1cm4gbVBhY2thZ2VOYW1lOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PEludGVudEZpbHRlcj4gZ2V0RmlsdGVycygpIHsKKyAgICAgICAgcmV0dXJuIG1GaWx0ZXJzOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBnZW5lcmF0ZURpZ2VzdChVcmkgdXJpKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBNZXNzYWdlRGlnZXN0IGRpZ2VzdCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoU0hBX0FMR09SSVRITSk7CisgICAgICAgICAgICBmaW5hbCBieXRlW10gaG9zdEJ5dGVzID0gdXJpLmdldEhvc3QoKS5nZXRCeXRlcygpOworICAgICAgICAgICAgcmV0dXJuIGRpZ2VzdC5kaWdlc3QoaG9zdEJ5dGVzKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNvdWxkIG5vdCBmaW5kIGRpZ2VzdCBhbGdvcml0aG0iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgb3V0LCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgb3V0LndyaXRlQnl0ZUFycmF5KG1EaWdlc3RCeXRlcyk7CisgICAgICAgIG91dC53cml0ZUludChtRGlnZXN0UHJlZml4KTsKKyAgICAgICAgb3V0LndyaXRlU3RyaW5nKG1QYWNrYWdlTmFtZSk7CisgICAgICAgIG91dC53cml0ZUxpc3QobUZpbHRlcnMpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPEVwaGVtZXJhbFJlc29sdmVJbmZvPiBDUkVBVE9SCisgICAgICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8RXBoZW1lcmFsUmVzb2x2ZUluZm8+KCkgeworICAgICAgICBwdWJsaWMgRXBoZW1lcmFsUmVzb2x2ZUluZm8gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRXBoZW1lcmFsUmVzb2x2ZUluZm8oaW4pOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEVwaGVtZXJhbFJlc29sdmVJbmZvW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgRXBoZW1lcmFsUmVzb2x2ZUluZm9bc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBFcGhlbWVyYWxSZXNvbHZlSW50ZW50SW5mbyBleHRlbmRzIEludGVudEZpbHRlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgRXBoZW1lcmFsUmVzb2x2ZUluZm8gbVJlc29sdmVJbmZvOworCisgICAgICAgIHB1YmxpYyBFcGhlbWVyYWxSZXNvbHZlSW50ZW50SW5mbyhATm9uTnVsbCBJbnRlbnRGaWx0ZXIgb3JpZywKKyAgICAgICAgICAgICAgICBATm9uTnVsbCBFcGhlbWVyYWxSZXNvbHZlSW5mbyByZXNvbHZlSW5mbykgeworICAgICAgICAgICAgc3VwZXIob3JpZyk7CisgICAgICAgICAgICB0aGlzLm1SZXNvbHZlSW5mbyA9IHJlc29sdmVJbmZvOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIEVwaGVtZXJhbFJlc29sdmVJbmZvIGdldEVwaGVtZXJhbFJlc29sdmVJbmZvKCkgeworICAgICAgICAgICAgcmV0dXJuIG1SZXNvbHZlSW5mbzsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL0lQYWNrYWdlTWFuYWdlci5haWRsCmluZGV4IGI5NDdhMmIuLmY2MTE5OTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vSVBhY2thZ2VNYW5hZ2VyLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9JUGFja2FnZU1hbmFnZXIuYWlkbApAQCAtNjQsMTAgKzY0LDggQEAKICAgICB2b2lkIGNoZWNrUGFja2FnZVN0YXJ0YWJsZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpOwogICAgIGJvb2xlYW4gaXNQYWNrYWdlQXZhaWxhYmxlKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CiAgICAgUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwotICAgIGludCBnZXRQYWNrYWdlVWlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7Ci0gICAgaW50IGdldFBhY2thZ2VVaWRFdGMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwotICAgIGludFtdIGdldFBhY2thZ2VHaWRzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7Ci0gICAgaW50W10gZ2V0UGFja2FnZUdpZHNFdGMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpOworICAgIGludCBnZXRQYWNrYWdlVWlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICBpbnRbXSBnZXRQYWNrYWdlR2lkcyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCk7CiAKICAgICBTdHJpbmdbXSBjdXJyZW50VG9DYW5vbmljYWxQYWNrYWdlTmFtZXMoaW4gU3RyaW5nW10gbmFtZXMpOwogICAgIFN0cmluZ1tdIGNhbm9uaWNhbFRvQ3VycmVudFBhY2thZ2VOYW1lcyhpbiBTdHJpbmdbXSBuYW1lcyk7CkBAIC0yODUsNiArMjgzLDggQEAKIAogICAgIHZvaWQgY2xlYXJDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJzKGludCBzb3VyY2VVc2VySWQsIFN0cmluZyBvd25lclBhY2thZ2UpOwogCisgICAgYm9vbGVhbiBzZXRQYWNrYWdlU3VzcGVuZGVkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgYm9vbGVhbiBzdXNwZW5kZWQsIGludCB1c2VySWQpOworCiAgICAgLyoqCiAgICAgICogQmFja3VwL3Jlc3RvcmUgc3VwcG9ydCAtIG9ubHkgdGhlIHN5c3RlbSB1aWQgbWF5IHVzZSB0aGVzZS4KICAgICAgKi8KQEAgLTUyMSw0ICs1MjEsNiBAQAogICAgIGJvb2xlYW4gc2V0RXBoZW1lcmFsQXBwbGljYXRpb25Db29raWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbiBieXRlW10gY29va2llLCBpbnQgdXNlcklkKTsKICAgICBCaXRtYXAgZ2V0RXBoZW1lcmFsQXBwbGljYXRpb25JY29uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CiAgICAgYm9vbGVhbiBpc0VwaGVtZXJhbEFwcGxpY2F0aW9uKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CisKKyAgICBib29sZWFuIHNldFJlcXVpcmVkRm9yU3lzdGVtVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gc3lzdGVtVXNlckFwcCk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL01hbmlmZXN0RGlnZXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL01hbmlmZXN0RGlnZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZGM3NjQuLjAwMDAwMDAKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9NYW5pZmVzdERpZ2VzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuSGV4RHVtcDsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LkRpZ2VzdElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotCi0vKioKLSAqIFJlcHJlc2VudHMgdGhlIG1hbmlmZXN0IGRpZ2VzdCBmb3IgYSBwYWNrYWdlLiBUaGlzIGlzIHN1aXRhYmxlIGZvciBjb21wYXJpc29uCi0gKiBvZiB0d28gcGFja2FnZXMgdG8ga25vdyB3aGV0aGVyIHRoZSBtYW5pZmVzdHMgYXJlIGlkZW50aWNhbC4KLSAqCi0gKiBAaGlkZQotICovCi1AU3lzdGVtQXBpCi1wdWJsaWMgY2xhc3MgTWFuaWZlc3REaWdlc3QgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1hbmlmZXN0RGlnZXN0IjsKLQotICAgIC8qKiBUaGUgZGlnZXN0IG9mIHRoZSBtYW5pZmVzdCBpbiBvdXIgcHJlZmVycmVkIG9yZGVyLiAqLwotICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIG1EaWdlc3Q7Ci0KLSAgICAvKiogV2hhdCB3ZSBwcmludCBvdXQgZmlyc3Qgd2hlbiB0b1N0cmluZygpIGlzIGNhbGxlZC4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9fU1RSSU5HX1BSRUZJWCA9ICJNYW5pZmVzdERpZ2VzdCB7bURpZ2VzdD0iOwotCi0gICAgLyoqIERpZ2VzdCBhbGdvcml0aG0gdG8gdXNlLiAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBESUdFU1RfQUxHT1JJVEhNID0gIlNIQS0yNTYiOwotCi0gICAgTWFuaWZlc3REaWdlc3QoYnl0ZVtdIGRpZ2VzdCkgewotICAgICAgICBtRGlnZXN0ID0gZGlnZXN0OwotICAgIH0KLQotICAgIHByaXZhdGUgTWFuaWZlc3REaWdlc3QoUGFyY2VsIHNvdXJjZSkgewotICAgICAgICBtRGlnZXN0ID0gc291cmNlLmNyZWF0ZUJ5dGVBcnJheSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBNYW5pZmVzdERpZ2VzdCBmcm9tSW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gZmlsZUlzKSB7Ci0gICAgICAgIGlmIChmaWxlSXMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBNZXNzYWdlRGlnZXN0IG1kOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbWQgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKERJR0VTVF9BTEdPUklUSE0pOwotICAgICAgICB9IGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oRElHRVNUX0FMR09SSVRITSArICIgbXVzdCBiZSBhdmFpbGFibGUiLCBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIERpZ2VzdElucHV0U3RyZWFtIGRpcyA9IG5ldyBEaWdlc3RJbnB1dFN0cmVhbShuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShmaWxlSXMpLCBtZCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBieXRlW10gcmVhZEJ1ZmZlciA9IG5ldyBieXRlWzgxOTJdOwotICAgICAgICAgICAgd2hpbGUgKGRpcy5yZWFkKHJlYWRCdWZmZXIsIDAsIHJlYWRCdWZmZXIubGVuZ3RoKSAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIG5vdCB1c2luZwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGQgbm90IHJlYWQgbWFuaWZlc3QiKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoZGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGJ5dGVbXSBkaWdlc3QgPSBtZC5kaWdlc3QoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBNYW5pZmVzdERpZ2VzdChkaWdlc3QpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBNYW5pZmVzdERpZ2VzdCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIE1hbmlmZXN0RGlnZXN0IG90aGVyID0gKE1hbmlmZXN0RGlnZXN0KSBvOwotCi0gICAgICAgIHJldHVybiB0aGlzID09IG90aGVyIHx8IEFycmF5cy5lcXVhbHMobURpZ2VzdCwgb3RoZXIubURpZ2VzdCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIEFycmF5cy5oYXNoQ29kZShtRGlnZXN0KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoVE9fU1RSSU5HX1BSRUZJWC5sZW5ndGgoKQotICAgICAgICAgICAgICAgICsgKG1EaWdlc3QubGVuZ3RoICogMykgKyAxKTsKLQotICAgICAgICBzYi5hcHBlbmQoVE9fU1RSSU5HX1BSRUZJWCk7Ci0KLSAgICAgICAgZmluYWwgaW50IE4gPSBtRGlnZXN0Lmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGUgYiA9IG1EaWdlc3RbaV07Ci0gICAgICAgICAgICBIZXhEdW1wLmFwcGVuZEJ5dGVBc0hleChzYiwgYiwgZmFsc2UpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7Ci0gICAgICAgIH0KLSAgICAgICAgc2IuYXBwZW5kKCd9Jyk7Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7Ci0gICAgICAgIGRlc3Qud3JpdGVCeXRlQXJyYXkobURpZ2VzdCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8TWFuaWZlc3REaWdlc3Q+IENSRUFUT1IKLSAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxNYW5pZmVzdERpZ2VzdD4oKSB7Ci0gICAgICAgIHB1YmxpYyBNYW5pZmVzdERpZ2VzdCBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWFuaWZlc3REaWdlc3Qoc291cmNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBNYW5pZmVzdERpZ2VzdFtdIG5ld0FycmF5KGludCBzaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE1hbmlmZXN0RGlnZXN0W3NpemVdOwotICAgICAgICB9Ci0gICAgfTsKLQotfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlSW5zdGFsbGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbnN0YWxsZXIuamF2YQppbmRleCBkNmQzOTViLi4zMjgzMDA1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbnN0YWxsZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VJbnN0YWxsZXIuamF2YQpAQCAtMTA0MiwxMiArMTA0Miw2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioge0BoaWRlfSAqLwotICAgICAgICBAU3lzdGVtQXBpCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEluc3RhbGxGbGFnc1F1aWNrKCkgewotICAgICAgICAgICAgaW5zdGFsbEZsYWdzIHw9IFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfUVVJQ0s7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioge0BoaWRlfSAqLwogICAgICAgICBwdWJsaWMgdm9pZCBkdW1wKEluZGVudGluZ1ByaW50V3JpdGVyIHB3KSB7CiAgICAgICAgICAgICBwdy5wcmludFBhaXIoIm1vZGUiLCBtb2RlKTsKICAgICAgICAgICAgIHB3LnByaW50SGV4UGFpcigiaW5zdGFsbEZsYWdzIiwgaW5zdGFsbEZsYWdzKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCBhODIyMTUwLi41MTEzZTE5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlTWFuYWdlci5qYXZhCkBAIC0yNyw2ICsyNyw4IEBACiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZTsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3RyaW5nUmVzOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlVzZXJJZEludDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uWG1sUmVzOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBhY2thZ2VEZWxldGVPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QYWNrYWdlSW5zdGFsbE9ic2VydmVyOwpAQCAtNDcsMTAgKzQ5LDkgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlZvbHVtZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKLQogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CkBAIC02NSw2ICs2Niw3IEBACiAgKiBZb3UgY2FuIGZpbmQgdGhpcyBjbGFzcyB0aHJvdWdoIHtAbGluayBDb250ZXh0I2dldFBhY2thZ2VNYW5hZ2VyfS4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIFBhY2thZ2VNYW5hZ2VyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBhY2thZ2VNYW5hZ2VyIjsKIAogICAgIC8qKgogICAgICAqIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGEgZ2l2ZW4gcGFja2FnZSwgYXBwbGljYXRpb24sIG9yIGNvbXBvbmVudApAQCAtOTUsNiArOTcsMTEwIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQXMgYSBndWlkaW5nIHByaW5jaXBsZToKKyAgICAgKiA8cD4KKyAgICAgKiB7QGNvZGUgR0VUX30gZmxhZ3MgYXJlIHVzZWQgdG8gcmVxdWVzdCBhZGRpdGlvbmFsIGRhdGEgdGhhdCBtYXkgaGF2ZSBiZWVuCisgICAgICogZWxpZGVkIHRvIHNhdmUgd2lyZSBzcGFjZS4KKyAgICAgKiA8cD4KKyAgICAgKiB7QGNvZGUgTUFUQ0hffSBmbGFncyBhcmUgdXNlZCB0byBpbmNsdWRlIGNvbXBvbmVudHMgb3IgcGFja2FnZXMgdGhhdAorICAgICAqIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4gb21pdHRlZCBmcm9tIGEgcmVzdWx0IHNldCBieSBjdXJyZW50IHN5c3RlbQorICAgICAqIHN0YXRlLgorICAgICAqLworCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfQUNUSVZJVElFUywKKyAgICAgICAgICAgIEdFVF9DT05GSUdVUkFUSU9OUywKKyAgICAgICAgICAgIEdFVF9HSURTLAorICAgICAgICAgICAgR0VUX0lOU1RSVU1FTlRBVElPTiwKKyAgICAgICAgICAgIEdFVF9JTlRFTlRfRklMVEVSUywKKyAgICAgICAgICAgIEdFVF9NRVRBX0RBVEEsCisgICAgICAgICAgICBHRVRfUEVSTUlTU0lPTlMsCisgICAgICAgICAgICBHRVRfUFJPVklERVJTLAorICAgICAgICAgICAgR0VUX1JFQ0VJVkVSUywKKyAgICAgICAgICAgIEdFVF9TRVJWSUNFUywKKyAgICAgICAgICAgIEdFVF9TSEFSRURfTElCUkFSWV9GSUxFUywKKyAgICAgICAgICAgIEdFVF9TSUdOQVRVUkVTLAorICAgICAgICAgICAgR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TLAorICAgICAgICAgICAgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCisgICAgICAgICAgICBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFksCisgICAgICAgICAgICBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgUGFja2FnZUluZm9GbGFncyB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfTUVUQV9EQVRBLAorICAgICAgICAgICAgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTLAorICAgICAgICAgICAgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCisgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSwKKyAgICAgICAgICAgIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBBcHBsaWNhdGlvbkluZm9GbGFncyB7fQorCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZihmbGFnID0gdHJ1ZSwgdmFsdWUgPSB7CisgICAgICAgICAgICBHRVRfTUVUQV9EQVRBLAorICAgICAgICAgICAgR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTLAorICAgICAgICAgICAgTUFUQ0hfQUxMLAorICAgICAgICAgICAgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgICAgICAgICAgTUFUQ0hfREVGQVVMVF9PTkxZLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUywKKyAgICAgICAgICAgIE1BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUywKKyAgICAgICAgICAgIE1BVENIX0VOQ1JZUFRJT05fQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLAorICAgICAgICAgICAgTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFLAorICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFksCisgICAgICAgICAgICBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBDb21wb25lbnRJbmZvRmxhZ3Mge30KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgR0VUX01FVEFfREFUQSwKKyAgICAgICAgICAgIEdFVF9SRVNPTFZFRF9GSUxURVIsCisgICAgICAgICAgICBHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMsCisgICAgICAgICAgICBNQVRDSF9BTEwsCisgICAgICAgICAgICBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTLAorICAgICAgICAgICAgTUFUQ0hfREVGQVVMVF9PTkxZLAorICAgICAgICAgICAgTUFUQ0hfRU5DUllQVElPTl9BV0FSRSwKKyAgICAgICAgICAgIE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUsCisgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSwKKyAgICAgICAgICAgIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLAorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFJlc29sdmVJbmZvRmxhZ3Mge30KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgR0VUX01FVEFfREFUQSwKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBQZXJtaXNzaW9uSW5mb0ZsYWdzIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIEdFVF9NRVRBX0RBVEEsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgUGVybWlzc2lvbkdyb3VwSW5mb0ZsYWdzIHt9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIEdFVF9NRVRBX0RBVEEsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgSW5zdHJ1bWVudGF0aW9uSW5mb0ZsYWdzIHt9CisKKyAgICAvKioKICAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IHJldHVybiBpbmZvcm1hdGlvbiBhYm91dAogICAgICAqIGFjdGl2aXRpZXMgaW4gdGhlIHBhY2thZ2UgaW4ge0BsaW5rIFBhY2thZ2VJbmZvI2FjdGl2aXRpZXN9LgogICAgICAqLwpAQCAtMTYzLDkgKzI2OSwxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9HSURTICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7CiAKICAgICAvKioKKyAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9ESVNBQkxFRF9DT01QT05FTlRTID0gMHgwMDAwMDIwMDsKKworICAgIC8qKgogICAgICAqIHtAbGluayBQYWNrYWdlSW5mb30gZmxhZzogaW5jbHVkZSBkaXNhYmxlZCBjb21wb25lbnRzIGluIHRoZSByZXR1cm5lZCBpbmZvLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFVF9ESVNBQkxFRF9DT01QT05FTlRTICAgICA9IDB4MDAwMDAyMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUyA9IDB4MDAwMDAyMDA7CiAKICAgICAvKioKICAgICAgKiB7QGxpbmsgQXBwbGljYXRpb25JbmZvfSBmbGFnOiByZXR1cm4gdGhlCkBAIC0xOTIsNiArMzA0LDEyIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1BFUk1JU1NJT05TICAgICAgICAgICAgICAgPSAweDAwMDAxMDAwOwogCiAgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gMHgwMDAwMjAwMDsKKworICAgIC8qKgogICAgICAqIEZsYWcgcGFyYW1ldGVyIHRvIHJldHJpZXZlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGFwcGxpY2F0aW9ucyAoZXZlbgogICAgICAqIHVuaW5zdGFsbGVkIG9uZXMpIHdoaWNoIGhhdmUgZGF0YSBkaXJlY3Rvcmllcy4gVGhpcyBzdGF0ZSBjb3VsZCBoYXZlCiAgICAgICogcmVzdWx0ZWQgaWYgYXBwbGljYXRpb25zIGhhdmUgYmVlbiBkZWxldGVkIHdpdGggZmxhZwpAQCAtMjAxLDcgKzMxOSw3IEBACiAgICAgICogTm90ZTogdGhpcyBmbGFnIG1heSBjYXVzZSBsZXNzIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBpbnN0YWxsZWQKICAgICAgKiBhcHBsaWNhdGlvbnMgdG8gYmUgcmV0dXJuZWQuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTID0gMHgwMDAwMjAwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUyA9IDB4MDAwMDIwMDA7CiAKICAgICAvKioKICAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IHJldHVybiBpbmZvcm1hdGlvbiBhYm91dApAQCAtMjEzLDEyICszMzEsMTggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfQ09ORklHVVJBVElPTlMgPSAweDAwMDA0MDAwOwogCiAgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30uCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMHgwMDAwODAwMDsKKworICAgIC8qKgogICAgICAqIHtAbGluayBQYWNrYWdlSW5mb30gZmxhZzogaW5jbHVkZSBkaXNhYmxlZCBjb21wb25lbnRzIHdoaWNoIGFyZSBpbgogICAgICAqIHRoYXQgc3RhdGUgb25seSBiZWNhdXNlIG9mIHtAbGluayAjQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVU5USUxfVVNFRH0KICAgICAgKiBpbiB0aGUgcmV0dXJuZWQgaW5mby4gIE5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoaXMgZmxhZywgYXBwbGljYXRpb25zCiAgICAgICogdGhhdCBhcmUgaW4gdGhpcyBkaXNhYmxlZCBzdGF0ZSB3aWxsIGJlIHJlcG9ydGVkIGFzIGVuYWJsZWQuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyA9IDB4MDAwMDgwMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTID0gMHgwMDAwODAwMDsKIAogICAgIC8qKgogICAgICAqIFJlc29sdXRpb24gYW5kIHF1ZXJ5aW5nIGZsYWc6IGlmIHNldCwgb25seSBmaWx0ZXJzIHRoYXQgc3VwcG9ydCB0aGUKQEAgLTIyOSw0MCArMzUzLDY4IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfREVGQVVMVF9PTkxZICA9IDB4MDAwMTAwMDA7CiAKICAgICAvKioKLSAgICAgKiBRdWVyeWluZyBmbGFnOiBpZiBzZXQgYW5kIGlmIHRoZSBwbGF0Zm9ybSBpcyBkb2luZyBhbnkgZmlsdGVyaW5nIG9mIHRoZSByZXN1bHRzLCB0aGVuCi0gICAgICogdGhlIGZpbHRlcmluZyB3aWxsIG5vdCBoYXBwZW4uIFRoaXMgaXMgYSBzeW5vbnltIGZvciBzYXlpbmcgdGhhdCBhbGwgcmVzdWx0cyBzaG91bGQKLSAgICAgKiBiZSByZXR1cm5lZC4KKyAgICAgKiBRdWVyeWluZyBmbGFnOiBpZiBzZXQgYW5kIGlmIHRoZSBwbGF0Zm9ybSBpcyBkb2luZyBhbnkgZmlsdGVyaW5nIG9mIHRoZQorICAgICAqIHJlc3VsdHMsIHRoZW4gdGhlIGZpbHRlcmluZyB3aWxsIG5vdCBoYXBwZW4uIFRoaXMgaXMgYSBzeW5vbnltIGZvciBzYXlpbmcKKyAgICAgKiB0aGF0IGFsbCByZXN1bHRzIHNob3VsZCBiZSByZXR1cm5lZC4KKyAgICAgKiA8cD4KKyAgICAgKiA8ZW0+VGhpcyBmbGFnIHNob3VsZCBiZSB1c2VkIHdpdGggZXh0cmVtZSBjYXJlLjwvZW0+CiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfQUxMID0gMHgwMDAyMDAwMDsKIAogICAgIC8qKgotICAgICAqIHtAbGluayBQYWNrYWdlSW5mb30gZmxhZzogaW5jbHVkZSBjb21wb25lbnRzIHdoaWNoIGFyZW4ndCBlbmNyeXB0aW9uCi0gICAgICogYXdhcmUgaW4gdGhlIHJldHVybmVkIGluZm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdXNlciBzdGF0ZS4KKyAgICAgKiBRdWVyeWluZyBmbGFnOiBpbmNsdWRlIG9ubHkgY29tcG9uZW50cyB3aGljaCBhcmUgZW5jcnlwdGlvbiB1bmF3YXJlIGluCisgICAgICogdGhlIHJldHVybmVkIGluZm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdXNlciBzdGF0ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRVRfRU5DUllQVElPTl9VTkFXQVJFX0NPTVBPTkVOVFMgPSAweDAwMDQwMDAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRSA9IDB4MDAwNDAwMDA7CiAKICAgICAvKioKLSAgICAgKiB7QGxpbmsgUGFja2FnZUluZm99IGZsYWc6IHJldHVybiBjb21wb25lbnRzIHRoYXQgYXJlIG1hcmtlZCBhcwotICAgICAqIHtAbGluayBDb21wb25lbnRJbmZvI2VuY3J5cHRpb25Bd2FyZX0sIHVubGVzcwotICAgICAqIHtAbGluayAjR0VUX0VOQ1JZUFRJT05fVU5BV0FSRV9DT01QT05FTlRTfSBpcyBhbHNvIHNwZWNpZmllZC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGZsYWcgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LgorICAgICAqIFF1ZXJ5aW5nIGZsYWc6IGluY2x1ZGUgb25seSBjb21wb25lbnRzIHdoaWNoIGFyZSBlbmNyeXB0aW9uIGF3YXJlIGluIHRoZQorICAgICAqIHJldHVybmVkIGluZm8sIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdXNlciBzdGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFID0gMHgwMDA4MDAwMDsKKworICAgIC8qKgorICAgICAqIFF1ZXJ5aW5nIGZsYWc6IGluY2x1ZGUgYm90aCBlbmNyeXB0aW9uIGF3YXJlIGFuZCB1bmF3YXJlIGNvbXBvbmVudHMgaW4KKyAgICAgKiB0aGUgcmV0dXJuZWQgaW5mbywgcmVnYXJkbGVzcyBvZiB0aGUgY3VycmVudCB1c2VyIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUgPSBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICAgICAgICB8IE1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRTsKKworICAgIC8qKgorICAgICAqIFF1ZXJ5aW5nIGZsYWc6IGluY2x1ZGUgb25seSBjb21wb25lbnRzIGZyb20gYXBwbGljYXRpb25zIHRoYXQgYXJlIG1hcmtlZAorICAgICAqIHdpdGgge0BsaW5rIEFwcGxpY2F0aW9uSW5mbyNGTEFHX1NZU1RFTX0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfU1lTVEVNX09OTFkgPSAweDAwMTAwMDAwOworCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgZmxhZyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBzeXN0ZW0gY29tcG9uZW50IGhhcyBkb25lIHRoZWlyCisgICAgICogaG9tZXdvcmsgYW5kIHZlcmlmaWVkIHRoYXQgdGhleSBjb3JyZWN0bHkgaGFuZGxlIHBhY2thZ2VzIGFuZCBjb21wb25lbnRzCisgICAgICogdGhhdCBjb21lIGFuZCBnbyBvdmVyIHRpbWUuIEluIHBhcnRpY3VsYXI6CisgICAgICogPHVsPgorICAgICAqIDxsaT5BcHBzIGluc3RhbGxlZCBvbiBleHRlcm5hbCBzdG9yYWdlLCB3aGljaCB3aWxsIGFwcGVhciB0byBiZQorICAgICAqIHVuaW5zdGFsbGVkIHdoaWxlIHRoZSB0aGUgZGV2aWNlIGlzIGVqZWN0ZWQuCisgICAgICogPGxpPkFwcHMgd2l0aCBlbmNyeXB0aW9uIHVuYXdhcmUgY29tcG9uZW50cywgd2hpY2ggd2lsbCBhcHBlYXIgdG8gbm90CisgICAgICogZXhpc3Qgd2hpbGUgdGhlIGRldmljZSBpcyBsb2NrZWQuCisgICAgICogPC91bD4KICAgICAgKgorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9PTkxZID0gMHgwMDA4MDAwMDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcgPSAweDEwMDAwMDAwOwogCiAgICAgLyoqCi0gICAgICogRmxhZyBmb3Ige0BsaW5rIGFkZENyb3NzUHJvZmlsZUludGVudEZpbHRlcn06IGlmIHRoaXMgZmxhZyBpcyBzZXQ6Ci0gICAgICogd2hlbiByZXNvbHZpbmcgYW4gaW50ZW50IHRoYXQgbWF0Y2hlcyB0aGUge0BsaW5rIENyb3NzUHJvZmlsZUludGVudEZpbHRlcn0sIHRoZSBjdXJyZW50Ci0gICAgICogcHJvZmlsZSB3aWxsIGJlIHNraXBwZWQuCi0gICAgICogT25seSBhY3Rpdml0aWVzIGluIHRoZSB0YXJnZXQgdXNlciBjYW4gcmVzcG9uZCB0byB0aGUgaW50ZW50LgorICAgICAqIEZsYWcgZm9yIHtAbGluayAjYWRkQ3Jvc3NQcm9maWxlSW50ZW50RmlsdGVyfTogaWYgdGhpcyBmbGFnIGlzIHNldDogd2hlbgorICAgICAqIHJlc29sdmluZyBhbiBpbnRlbnQgdGhhdCBtYXRjaGVzIHRoZSB7QGNvZGUgQ3Jvc3NQcm9maWxlSW50ZW50RmlsdGVyfSwKKyAgICAgKiB0aGUgY3VycmVudCBwcm9maWxlIHdpbGwgYmUgc2tpcHBlZC4gT25seSBhY3Rpdml0aWVzIGluIHRoZSB0YXJnZXQgdXNlcgorICAgICAqIGNhbiByZXNwb25kIHRvIHRoZSBpbnRlbnQuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNLSVBfQ1VSUkVOVF9QUk9GSUxFID0gMHgwMDAwMDAwMjsKIAogICAgIC8qKgotICAgICAqIEZsYWcgZm9yIHtAbGluayBhZGRDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJ9OiBpZiB0aGlzIGZsYWcgaXMgc2V0OgorICAgICAqIEZsYWcgZm9yIHtAbGluayAjYWRkQ3Jvc3NQcm9maWxlSW50ZW50RmlsdGVyfTogaWYgdGhpcyBmbGFnIGlzIHNldDoKICAgICAgKiBhY3Rpdml0aWVzIGluIHRoZSBvdGhlciBwcm9maWxlcyBjYW4gcmVzcG9uZCB0byB0aGUgaW50ZW50IG9ubHkgaWYgbm8gYWN0aXZpdHkgd2l0aAogICAgICAqIG5vbi1uZWdhdGl2ZSBwcmlvcml0eSBpbiBjdXJyZW50IHByb2ZpbGUgY2FuIHJlc3BvbmQgdG8gdGhlIGludGVudC4KICAgICAgKiBAaGlkZQpAQCAtMzY5LDE3ICs1MjEsMzcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VTlRJTF9VU0VEID0gNDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgSU5TVEFMTF9GT1JXQVJEX0xPQ0ssCisgICAgICAgICAgICBJTlNUQUxMX1JFUExBQ0VfRVhJU1RJTkcsCisgICAgICAgICAgICBJTlNUQUxMX0FMTE9XX1RFU1QsCisgICAgICAgICAgICBJTlNUQUxMX0VYVEVSTkFMLAorICAgICAgICAgICAgSU5TVEFMTF9JTlRFUk5BTCwKKyAgICAgICAgICAgIElOU1RBTExfRlJPTV9BREIsCisgICAgICAgICAgICBJTlNUQUxMX0FMTF9VU0VSUywKKyAgICAgICAgICAgIElOU1RBTExfQUxMT1dfRE9XTkdSQURFLAorICAgICAgICAgICAgSU5TVEFMTF9HUkFOVF9SVU5USU1FX1BFUk1JU1NJT05TLAorICAgICAgICAgICAgSU5TVEFMTF9GT1JDRV9WT0xVTUVfVVVJRCwKKyAgICAgICAgICAgIElOU1RBTExfRk9SQ0VfUEVSTUlTU0lPTl9QUk9NUFQsCisgICAgICAgICAgICBJTlNUQUxMX0VQSEVNRVJBTCwKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBJbnN0YWxsRmxhZ3Mge30KKwogICAgIC8qKgotICAgICAqIEZsYWcgcGFyYW1ldGVyIGZvciB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IHRvCi0gICAgICogaW5kaWNhdGUgdGhhdCB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBmb3J3YXJkIGxvY2tlZCwgaS5lLiBvbmx5IHRoZSBhcHAgaXRzZWxmCi0gICAgICogc2hvdWxkIGhhdmUgYWNjZXNzIHRvIGl0cyBjb2RlIGFuZCBub24tcmVzb3VyY2UgYXNzZXRzLgorICAgICAqIEZsYWcgcGFyYW1ldGVyIGZvciB7QGxpbmsgI2luc3RhbGxQYWNrYWdlfSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgcGFja2FnZQorICAgICAqIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZm9yd2FyZCBsb2NrZWQsIGkuZS4gb25seSB0aGUgYXBwIGl0c2VsZiBzaG91bGQKKyAgICAgKiBoYXZlIGFjY2VzcyB0byBpdHMgY29kZSBhbmQgbm9uLXJlc291cmNlIGFzc2V0cy4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GT1JXQVJEX0xPQ0sgPSAweDAwMDAwMDAxOwogCiAgICAgLyoqCi0gICAgICogRmxhZyBwYXJhbWV0ZXIgZm9yIHtAbGluayAjaW5zdGFsbFBhY2thZ2V9IHRvIGluZGljYXRlIHRoYXQgeW91IHdhbnQgdG8gcmVwbGFjZSBhbiBhbHJlYWR5Ci0gICAgICogaW5zdGFsbGVkIHBhY2thZ2UsIGlmIG9uZSBleGlzdHMuCisgICAgICogRmxhZyBwYXJhbWV0ZXIgZm9yIHtAbGluayAjaW5zdGFsbFBhY2thZ2V9IHRvIGluZGljYXRlIHRoYXQgeW91IHdhbnQgdG8KKyAgICAgKiByZXBsYWNlIGFuIGFscmVhZHkgaW5zdGFsbGVkIHBhY2thZ2UsIGlmIG9uZSBleGlzdHMuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUkVQTEFDRV9FWElTVElORyA9IDB4MDAwMDAwMDI7CkBAIC00NTcsMTkgKzYyOSwxMSBAQAogCiAgICAgLyoqCiAgICAgICogRmxhZyBwYXJhbWV0ZXIgZm9yIHtAbGluayAjaW5zdGFsbFBhY2thZ2V9IHRvIGluZGljYXRlIHRoYXQgdGhpcyBwYWNrYWdlIGlzCi0gICAgICogdG8gYmUgaW5zdGFsbGVkIHF1aWNrbHkuCi0gICAgICoKLSAgICAgKiBAaGlkZQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUVVJQ0sgPSAweDAwMDAwODAwOwotCi0gICAgLyoqCi0gICAgICogRmxhZyBwYXJhbWV0ZXIgZm9yIHtAbGluayAjaW5zdGFsbFBhY2thZ2V9IHRvIGluZGljYXRlIHRoYXQgdGhpcyBwYWNrYWdlIGlzCiAgICAgICogdG8gYmUgaW5zdGFsbGVkIGFzIGEgbGlnaHR3ZWlnaHQgImVwaGVtZXJhbCIgYXBwLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0VQSEVNRVJBTCA9IDB4MDAwMDEwMDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9FUEhFTUVSQUwgPSAweDAwMDAwODAwOwogCiAgICAgLyoqCiAgICAgICogRmxhZyBwYXJhbWV0ZXIgZm9yCkBAIC00ODAsMTcwICs2NDQsMTgxIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRE9OVF9LSUxMX0FQUCA9IDB4MDAwMDAwMDE7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfSBvbiBzdWNjZXNzLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBvbiBzdWNjZXNzLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9TVUNDRUVERUQgPSAxOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYgdGhlIHBhY2thZ2UgaXMKLSAgICAgKiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhY2thZ2UgaXMgYWxyZWFkeSBpbnN0YWxsZWQuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9BTFJFQURZX0VYSVNUUyA9IC0xOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYgdGhlIHBhY2thZ2UgYXJjaGl2ZQotICAgICAqIGZpbGUgaXMgaW52YWxpZC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhY2thZ2UgYXJjaGl2ZSBmaWxlIGlzIGludmFsaWQuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9JTlZBTElEX0FQSyA9IC0yOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYgdGhlIFVSSSBwYXNzZWQgaW4KLSAgICAgKiBpcyBpbnZhbGlkLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgVVJJIHBhc3NlZCBpbiBpcyBpbnZhbGlkLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfSU5WQUxJRF9VUkkgPSAtMzsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmIHRoZSBwYWNrYWdlIG1hbmFnZXIKLSAgICAgKiBzZXJ2aWNlIGZvdW5kIHRoYXQgdGhlIGRldmljZSBkaWRuJ3QgaGF2ZSBlbm91Z2ggc3RvcmFnZSBzcGFjZSB0byBpbnN0YWxsIHRoZSBhcHAuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBwYWNrYWdlIG1hbmFnZXIgc2VydmljZSBmb3VuZCB0aGF0CisgICAgICogdGhlIGRldmljZSBkaWRuJ3QgaGF2ZSBlbm91Z2ggc3RvcmFnZSBzcGFjZSB0byBpbnN0YWxsIHRoZSBhcHAuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9JTlNVRkZJQ0lFTlRfU1RPUkFHRSA9IC00OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYgYQotICAgICAqIHBhY2thZ2UgaXMgYWxyZWFkeSBpbnN0YWxsZWQgd2l0aCB0aGUgc2FtZSBuYW1lLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiBhIHBhY2thZ2UgaXMgYWxyZWFkeSBpbnN0YWxsZWQgd2l0aAorICAgICAqIHRoZSBzYW1lIG5hbWUuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9EVVBMSUNBVEVfUEFDS0FHRSA9IC01OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgcmVxdWVzdGVkIHNoYXJlZCB1c2VyIGRvZXMgbm90IGV4aXN0LgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgcmVxdWVzdGVkIHNoYXJlZCB1c2VyIGRvZXMgbm90CisgICAgICogZXhpc3QuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9OT19TSEFSRURfVVNFUiA9IC02OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiBhIHByZXZpb3VzbHkgaW5zdGFsbGVkIHBhY2thZ2Ugb2YgdGhlIHNhbWUgbmFtZSBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlCi0gICAgICogdGhhbiB0aGUgbmV3IHBhY2thZ2UgKGFuZCB0aGUgb2xkIHBhY2thZ2UncyBkYXRhIHdhcyBub3QgcmVtb3ZlZCkuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIGEgcHJldmlvdXNseSBpbnN0YWxsZWQgcGFja2FnZSBvZiB0aGUKKyAgICAgKiBzYW1lIG5hbWUgaGFzIGEgZGlmZmVyZW50IHNpZ25hdHVyZSB0aGFuIHRoZSBuZXcgcGFja2FnZSAoYW5kIHRoZSBvbGQKKyAgICAgKiBwYWNrYWdlJ3MgZGF0YSB3YXMgbm90IHJlbW92ZWQpLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfVVBEQVRFX0lOQ09NUEFUSUJMRSA9IC03OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgaXMgcmVxdWVzdGVkIGEgc2hhcmVkIHVzZXIgd2hpY2ggaXMgYWxyZWFkeSBpbnN0YWxsZWQgb24gdGhlCi0gICAgICogZGV2aWNlIGFuZCBkb2VzIG5vdCBoYXZlIG1hdGNoaW5nIHNpZ25hdHVyZS4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIGlzIHJlcXVlc3RlZCBhIHNoYXJlZAorICAgICAqIHVzZXIgd2hpY2ggaXMgYWxyZWFkeSBpbnN0YWxsZWQgb24gdGhlIGRldmljZSBhbmQgZG9lcyBub3QgaGF2ZSBtYXRjaGluZworICAgICAqIHNpZ25hdHVyZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX1NIQVJFRF9VU0VSX0lOQ09NUEFUSUJMRSA9IC04OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgdXNlcyBhIHNoYXJlZCBsaWJyYXJ5IHRoYXQgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIHVzZXMgYSBzaGFyZWQgbGlicmFyeQorICAgICAqIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX01JU1NJTkdfU0hBUkVEX0xJQlJBUlkgPSAtOTsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIG5ldyBwYWNrYWdlIHVzZXMgYSBzaGFyZWQgbGlicmFyeSB0aGF0IGlzIG5vdCBhdmFpbGFibGUuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSB1c2VzIGEgc2hhcmVkIGxpYnJhcnkKKyAgICAgKiB0aGF0IGlzIG5vdCBhdmFpbGFibGUuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9SRVBMQUNFX0NPVUxETlRfREVMRVRFID0gLTEwOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgZmFpbGVkIHdoaWxlIG9wdGltaXppbmcgYW5kIHZhbGlkYXRpbmcgaXRzIGRleCBmaWxlcywKLSAgICAgKiBlaXRoZXIgYmVjYXVzZSB0aGVyZSB3YXMgbm90IGVub3VnaCBzdG9yYWdlIG9yIHRoZSB2YWxpZGF0aW9uIGZhaWxlZC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIGZhaWxlZCB3aGlsZQorICAgICAqIG9wdGltaXppbmcgYW5kIHZhbGlkYXRpbmcgaXRzIGRleCBmaWxlcywgZWl0aGVyIGJlY2F1c2UgdGhlcmUgd2FzIG5vdAorICAgICAqIGVub3VnaCBzdG9yYWdlIG9yIHRoZSB2YWxpZGF0aW9uIGZhaWxlZC4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX0RFWE9QVCA9IC0xMTsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIG5ldyBwYWNrYWdlIGZhaWxlZCBiZWNhdXNlIHRoZSBjdXJyZW50IFNESyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4KLSAgICAgKiB0aGF0IHJlcXVpcmVkIGJ5IHRoZSBwYWNrYWdlLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgbmV3IHBhY2thZ2UgZmFpbGVkIGJlY2F1c2UgdGhlCisgICAgICogY3VycmVudCBTREsgdmVyc2lvbiBpcyBvbGRlciB0aGFuIHRoYXQgcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9PTERFUl9TREsgPSAtMTI7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfSBpZgotICAgICAqIHRoZSBuZXcgcGFja2FnZSBmYWlsZWQgYmVjYXVzZSBpdCBjb250YWlucyBhIGNvbnRlbnQgcHJvdmlkZXIgd2l0aCB0aGUKLSAgICAgKiBzYW1lIGF1dGhvcml0eSBhcyBhIHByb3ZpZGVyIGFscmVhZHkgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0uCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSBmYWlsZWQgYmVjYXVzZSBpdAorICAgICAqIGNvbnRhaW5zIGEgY29udGVudCBwcm92aWRlciB3aXRoIHRoZSBzYW1lIGF1dGhvcml0eSBhcyBhIHByb3ZpZGVyIGFscmVhZHkKKyAgICAgKiBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX0NPTkZMSUNUSU5HX1BST1ZJREVSID0gLTEzOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgZmFpbGVkIGJlY2F1c2UgdGhlIGN1cnJlbnQgU0RLIHZlcnNpb24gaXMgbmV3ZXIgdGhhbgotICAgICAqIHRoYXQgcmVxdWlyZWQgYnkgdGhlIHBhY2thZ2UuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSBmYWlsZWQgYmVjYXVzZSB0aGUKKyAgICAgKiBjdXJyZW50IFNESyB2ZXJzaW9uIGlzIG5ld2VyIHRoYW4gdGhhdCByZXF1aXJlZCBieSB0aGUgcGFja2FnZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX05FV0VSX1NESyA9IC0xNDsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIG5ldyBwYWNrYWdlIGZhaWxlZCBiZWNhdXNlIGl0IGhhcyBzcGVjaWZpZWQgdGhhdCBpdCBpcyBhIHRlc3Qtb25seQotICAgICAqIHBhY2thZ2UgYW5kIHRoZSBjYWxsZXIgaGFzIG5vdCBzdXBwbGllZCB0aGUge0BsaW5rICNJTlNUQUxMX0FMTE9XX1RFU1R9Ci0gICAgICogZmxhZy4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIGZhaWxlZCBiZWNhdXNlIGl0IGhhcworICAgICAqIHNwZWNpZmllZCB0aGF0IGl0IGlzIGEgdGVzdC1vbmx5IHBhY2thZ2UgYW5kIHRoZSBjYWxsZXIgaGFzIG5vdCBzdXBwbGllZAorICAgICAqIHRoZSB7QGxpbmsgI0lOU1RBTExfQUxMT1dfVEVTVH0gZmxhZy4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX1RFU1RfT05MWSA9IC0xNTsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIHBhY2thZ2UgYmVpbmcgaW5zdGFsbGVkIGNvbnRhaW5zIG5hdGl2ZSBjb2RlLCBidXQgbm9uZSB0aGF0IGlzCi0gICAgICogY29tcGF0aWJsZSB3aXRoIHRoZSBkZXZpY2UncyBDUFVfQUJJLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgcGFja2FnZSBiZWluZyBpbnN0YWxsZWQgY29udGFpbnMKKyAgICAgKiBuYXRpdmUgY29kZSwgYnV0IG5vbmUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSdzIENQVV9BQkkuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9DUFVfQUJJX0lOQ09NUEFUSUJMRSA9IC0xNjsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIG5ldyBwYWNrYWdlIHVzZXMgYSBmZWF0dXJlIHRoYXQgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIHVzZXMgYSBmZWF0dXJlIHRoYXQgaXMKKyAgICAgKiBub3QgYXZhaWxhYmxlLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCkBAIC02NTEsMjE3ICs4MjYsMjM0IEBACiAKICAgICAvLyAtLS0tLS0gRXJyb3JzIHJlbGF0ZWQgdG8gc2RjYXJkCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiBhIHNlY3VyZSBjb250YWluZXIgbW91bnQgcG9pbnQgY291bGRuJ3QgYmUgYWNjZXNzZWQgb24gZXh0ZXJuYWwgbWVkaWEuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIGEgc2VjdXJlIGNvbnRhaW5lciBtb3VudCBwb2ludAorICAgICAqIGNvdWxkbid0IGJlIGFjY2Vzc2VkIG9uIGV4dGVybmFsIG1lZGlhLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfQ09OVEFJTkVSX0VSUk9SID0gLTE4OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgY291bGRuJ3QgYmUgaW5zdGFsbGVkIGluIHRoZSBzcGVjaWZpZWQgaW5zdGFsbAotICAgICAqIGxvY2F0aW9uLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgbmV3IHBhY2thZ2UgY291bGRuJ3QgYmUgaW5zdGFsbGVkCisgICAgICogaW4gdGhlIHNwZWNpZmllZCBpbnN0YWxsIGxvY2F0aW9uLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfSU5WQUxJRF9JTlNUQUxMX0xPQ0FUSU9OID0gLTE5OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgY291bGRuJ3QgYmUgaW5zdGFsbGVkIGluIHRoZSBzcGVjaWZpZWQgaW5zdGFsbAotICAgICAqIGxvY2F0aW9uIGJlY2F1c2UgdGhlIG1lZGlhIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSBjb3VsZG4ndCBiZSBpbnN0YWxsZWQKKyAgICAgKiBpbiB0aGUgc3BlY2lmaWVkIGluc3RhbGwgbG9jYXRpb24gYmVjYXVzZSB0aGUgbWVkaWEgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX01FRElBX1VOQVZBSUxBQkxFID0gLTIwOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgY291bGRuJ3QgYmUgaW5zdGFsbGVkIGJlY2F1c2UgdGhlIHZlcmlmaWNhdGlvbiB0aW1lZCBvdXQuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSBjb3VsZG4ndCBiZSBpbnN0YWxsZWQKKyAgICAgKiBiZWNhdXNlIHRoZSB2ZXJpZmljYXRpb24gdGltZWQgb3V0LgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfVkVSSUZJQ0FUSU9OX1RJTUVPVVQgPSAtMjE7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfSBpZgotICAgICAqIHRoZSBuZXcgcGFja2FnZSBjb3VsZG4ndCBiZSBpbnN0YWxsZWQgYmVjYXVzZSB0aGUgdmVyaWZpY2F0aW9uIGRpZCBub3Qgc3VjY2VlZC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIG5ldyBwYWNrYWdlIGNvdWxkbid0IGJlIGluc3RhbGxlZAorICAgICAqIGJlY2F1c2UgdGhlIHZlcmlmaWNhdGlvbiBkaWQgbm90IHN1Y2NlZWQuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9WRVJJRklDQVRJT05fRkFJTFVSRSA9IC0yMjsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIHBhY2thZ2UgY2hhbmdlZCBmcm9tIHdoYXQgdGhlIGNhbGxpbmcgcHJvZ3JhbSBleHBlY3RlZC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhY2thZ2UgY2hhbmdlZCBmcm9tIHdoYXQgdGhlCisgICAgICogY2FsbGluZyBwcm9ncmFtIGV4cGVjdGVkLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfUEFDS0FHRV9DSEFOR0VEID0gLTIzOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgaXMgYXNzaWduZWQgYSBkaWZmZXJlbnQgVUlEIHRoYW4gaXQgcHJldmlvdXNseSBoZWxkLgorICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgbmV3IHBhY2thZ2UgaXMgYXNzaWduZWQgYQorICAgICAqIGRpZmZlcmVudCBVSUQgdGhhbiBpdCBwcmV2aW91c2x5IGhlbGQuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfRkFJTEVEX1VJRF9DSEFOR0VEID0gLTI0OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0gaWYKLSAgICAgKiB0aGUgbmV3IHBhY2thZ2UgaGFzIGFuIG9sZGVyIHZlcnNpb24gY29kZSB0aGFuIHRoZSBjdXJyZW50bHkgaW5zdGFsbGVkIHBhY2thZ2UuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBuZXcgcGFja2FnZSBoYXMgYW4gb2xkZXIgdmVyc2lvbgorICAgICAqIGNvZGUgdGhhbiB0aGUgY3VycmVudGx5IGluc3RhbGxlZCBwYWNrYWdlLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9WRVJTSU9OX0RPV05HUkFERSA9IC0yNTsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9IGlmCi0gICAgICogdGhlIG9sZCBwYWNrYWdlIGhhcyB0YXJnZXQgU0RLIGhpZ2ggZW5vdWdoIHRvIHN1cHBvcnQgcnVudGltZSBwZXJtaXNzaW9uIGFuZAotICAgICAqIHRoZSBuZXcgcGFja2FnZSBoYXMgdGFyZ2V0IFNESyBsb3cgZW5vdWdoIHRvIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGVybWlzc2lvbnMuCisgICAgICogSW5zdGFsbGF0aW9uIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBvbGQgcGFja2FnZSBoYXMgdGFyZ2V0IFNESyBoaWdoCisgICAgICogZW5vdWdoIHRvIHN1cHBvcnQgcnVudGltZSBwZXJtaXNzaW9uIGFuZCB0aGUgbmV3IHBhY2thZ2UgaGFzIHRhcmdldCBTREsKKyAgICAgKiBsb3cgZW5vdWdoIHRvIG5vdCBzdXBwb3J0IHJ1bnRpbWUgcGVybWlzc2lvbnMuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9QRVJNSVNTSU9OX01PREVMX0RPV05HUkFERSA9IC0yNjsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiBwYXJzZSByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9Ci0gICAgICogaWYgdGhlIHBhcnNlciB3YXMgZ2l2ZW4gYSBwYXRoIHRoYXQgaXMgbm90IGEgZmlsZSwgb3IgZG9lcyBub3QgZW5kIHdpdGggdGhlIGV4cGVjdGVkCi0gICAgICogJy5hcGsnIGV4dGVuc2lvbi4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciB3YXMgZ2l2ZW4gYSBwYXRoIHRoYXQgaXMKKyAgICAgKiBub3QgYSBmaWxlLCBvciBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgZXhwZWN0ZWQgJy5hcGsnIGV4dGVuc2lvbi4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUEFSU0VfRkFJTEVEX05PVF9BUEsgPSAtMTAwOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgcGFyc2VyIHdhcyB1bmFibGUgdG8gcmV0cmlldmUgdGhlIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZS4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciB3YXMgdW5hYmxlIHRvIHJldHJpZXZlIHRoZQorICAgICAqIEFuZHJvaWRNYW5pZmVzdC54bWwgZmlsZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUEFSU0VfRkFJTEVEX0JBRF9NQU5JRkVTVCA9IC0xMDE7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfQotICAgICAqIGlmIHRoZSBwYXJzZXIgZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZCBleGNlcHRpb24uCisgICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBwYXJzZXIgZW5jb3VudGVyZWQgYW4gdW5leHBlY3RlZAorICAgICAqIGV4Y2VwdGlvbi4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUEFSU0VfRkFJTEVEX1VORVhQRUNURURfRVhDRVBUSU9OID0gLTEwMjsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiBwYXJzZSByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9Ci0gICAgICogaWYgdGhlIHBhcnNlciBkaWQgbm90IGZpbmQgYW55IGNlcnRpZmljYXRlcyBpbiB0aGUgLmFway4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciBkaWQgbm90IGZpbmQgYW55CisgICAgICogY2VydGlmaWNhdGVzIGluIHRoZSAuYXBrLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9QQVJTRV9GQUlMRURfTk9fQ0VSVElGSUNBVEVTID0gLTEwMzsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiBwYXJzZSByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9Ci0gICAgICogaWYgdGhlIHBhcnNlciBmb3VuZCBpbmNvbnNpc3RlbnQgY2VydGlmaWNhdGVzIG9uIHRoZSBmaWxlcyBpbiB0aGUgLmFway4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciBmb3VuZCBpbmNvbnNpc3RlbnQKKyAgICAgKiBjZXJ0aWZpY2F0ZXMgb24gdGhlIGZpbGVzIGluIHRoZSAuYXBrLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9QQVJTRV9GQUlMRURfSU5DT05TSVNURU5UX0NFUlRJRklDQVRFUyA9IC0xMDQ7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfQotICAgICAqIGlmIHRoZSBwYXJzZXIgZW5jb3VudGVyZWQgYSBDZXJ0aWZpY2F0ZUVuY29kaW5nRXhjZXB0aW9uIGluIG9uZSBvZiB0aGUKLSAgICAgKiBmaWxlcyBpbiB0aGUgLmFway4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciBlbmNvdW50ZXJlZCBhCisgICAgICogQ2VydGlmaWNhdGVFbmNvZGluZ0V4Y2VwdGlvbiBpbiBvbmUgb2YgdGhlIGZpbGVzIGluIHRoZSAuYXBrLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9QQVJTRV9GQUlMRURfQ0VSVElGSUNBVEVfRU5DT0RJTkcgPSAtMTA1OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgcGFyc2VyIGVuY291bnRlcmVkIGEgYmFkIG9yIG1pc3NpbmcgcGFja2FnZSBuYW1lIGluIHRoZSBtYW5pZmVzdC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciBlbmNvdW50ZXJlZCBhIGJhZCBvcgorICAgICAqIG1pc3NpbmcgcGFja2FnZSBuYW1lIGluIHRoZSBtYW5pZmVzdC4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUEFSU0VfRkFJTEVEX0JBRF9QQUNLQUdFX05BTUUgPSAtMTA2OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgcGFyc2VyIGVuY291bnRlcmVkIGEgYmFkIHNoYXJlZCB1c2VyIGlkIG5hbWUgaW4gdGhlIG1hbmlmZXN0LgorICAgICAqIEluc3RhbGxhdGlvbiBwYXJzZSByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgcGFyc2VyIGVuY291bnRlcmVkIGEgYmFkIHNoYXJlZAorICAgICAqIHVzZXIgaWQgbmFtZSBpbiB0aGUgbWFuaWZlc3QuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX1BBUlNFX0ZBSUxFRF9CQURfU0hBUkVEX1VTRVJfSUQgPSAtMTA3OwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgcGFyc2VyIGVuY291bnRlcmVkIHNvbWUgc3RydWN0dXJhbCBwcm9ibGVtIGluIHRoZSBtYW5pZmVzdC4KKyAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHBhcnNlciBlbmNvdW50ZXJlZCBzb21lIHN0cnVjdHVyYWwKKyAgICAgKiBwcm9ibGVtIGluIHRoZSBtYW5pZmVzdC4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFN5c3RlbUFwaQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOU1RBTExfUEFSU0VfRkFJTEVEX01BTklGRVNUX01BTEZPUk1FRCA9IC0xMDg7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gcGFyc2UgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfQotICAgICAqIGlmIHRoZSBwYXJzZXIgZGlkIG5vdCBmaW5kIGFueSBhY3Rpb25hYmxlIHRhZ3MgKGluc3RydW1lbnRhdGlvbiBvciBhcHBsaWNhdGlvbikKLSAgICAgKiBpbiB0aGUgbWFuaWZlc3QuCisgICAgICogSW5zdGFsbGF0aW9uIHBhcnNlIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBwYXJzZXIgZGlkIG5vdCBmaW5kIGFueSBhY3Rpb25hYmxlCisgICAgICogdGFncyAoaW5zdHJ1bWVudGF0aW9uIG9yIGFwcGxpY2F0aW9uKSBpbiB0aGUgbWFuaWZlc3QuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX1BBUlNFX0ZBSUxFRF9NQU5JRkVTVF9FTVBUWSA9IC0xMDk7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gZmFpbGVkIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgc3lzdGVtIGZhaWxlZCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIGJlY2F1c2Ugb2Ygc3lzdGVtIGlzc3Vlcy4KKyAgICAgKiBJbnN0YWxsYXRpb24gZmFpbGVkIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUKKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGlmIHRoZSBzeXN0ZW0gZmFpbGVkIHRvIGluc3RhbGwgdGhlCisgICAgICogcGFja2FnZSBiZWNhdXNlIG9mIHN5c3RlbSBpc3N1ZXMuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9JTlRFUk5BTF9FUlJPUiA9IC0xMTA7CiAKICAgICAvKioKLSAgICAgKiBJbnN0YWxsYXRpb24gZmFpbGVkIHJldHVybiBjb2RlOiB0aGlzIGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50KX0KLSAgICAgKiBpZiB0aGUgc3lzdGVtIGZhaWxlZCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIGJlY2F1c2UgdGhlIHVzZXIgaXMgcmVzdHJpY3RlZCBmcm9tIGluc3RhbGxpbmcKLSAgICAgKiBhcHBzLgorICAgICAqIEluc3RhbGxhdGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHN5c3RlbSBmYWlsZWQgdG8gaW5zdGFsbCB0aGUKKyAgICAgKiBwYWNrYWdlIGJlY2F1c2UgdGhlIHVzZXIgaXMgcmVzdHJpY3RlZCBmcm9tIGluc3RhbGxpbmcgYXBwcy4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfVVNFUl9SRVNUUklDVEVEID0gLTExMTsKIAogICAgIC8qKgotICAgICAqIEluc3RhbGxhdGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQpfQotICAgICAqIGlmIHRoZSBzeXN0ZW0gZmFpbGVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgYmVjYXVzZSBpdCBpcyBhdHRlbXB0aW5nIHRvIGRlZmluZSBhCi0gICAgICogcGVybWlzc2lvbiB0aGF0IGlzIGFscmVhZHkgZGVmaW5lZCBieSBzb21lIGV4aXN0aW5nIHBhY2thZ2UuCisgICAgICogSW5zdGFsbGF0aW9uIGZhaWxlZCByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICoge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyfSBpZiB0aGUgc3lzdGVtIGZhaWxlZCB0byBpbnN0YWxsIHRoZQorICAgICAqIHBhY2thZ2UgYmVjYXVzZSBpdCBpcyBhdHRlbXB0aW5nIHRvIGRlZmluZSBhIHBlcm1pc3Npb24gdGhhdCBpcyBhbHJlYWR5CisgICAgICogZGVmaW5lZCBieSBzb21lIGV4aXN0aW5nIHBhY2thZ2UuCisgICAgICogPHA+CisgICAgICogVGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIHdoaWNoIGhhcyBhbHJlYWR5IGRlZmluZWQgdGhlIHBlcm1pc3Npb24gaXMKKyAgICAgKiBwYXNzZWQgdG8gYSB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlcn0sIGlmIGFueSwgYXMgdGhlCisgICAgICoge0BsaW5rICNFWFRSQV9GQUlMVVJFX0VYSVNUSU5HX1BBQ0tBR0V9IHN0cmluZyBleHRyYTsgYW5kIHRoZSBuYW1lIG9mIHRoZQorICAgICAqIHBlcm1pc3Npb24gYmVpbmcgcmVkZWZpbmVkIGlzIHBhc3NlZCBpbiB0aGUKKyAgICAgKiB7QGxpbmsgI0VYVFJBX0ZBSUxVUkVfRVhJU1RJTkdfUEVSTUlTU0lPTn0gc3RyaW5nIGV4dHJhLgogICAgICAqCi0gICAgICogPHA+VGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwIHdoaWNoIGhhcyBhbHJlYWR5IGRlZmluZWQgdGhlIHBlcm1pc3Npb24gaXMgcGFzc2VkIHRvCi0gICAgICogYSB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlcn0sIGlmIGFueSwgYXMgdGhlIHtAbGluayAjRVhUUkFfRVhJU1RJTkdfUEFDS0FHRX0KLSAgICAgKiBzdHJpbmcgZXh0cmE7IGFuZCB0aGUgbmFtZSBvZiB0aGUgcGVybWlzc2lvbiBiZWluZyByZWRlZmluZWQgaXMgcGFzc2VkIGluIHRoZQotICAgICAqIHtAbGluayAjRVhUUkFfRVhJU1RJTkdfUEVSTUlTU0lPTn0gc3RyaW5nIGV4dHJhLgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5TVEFMTF9GQUlMRURfRFVQTElDQVRFX1BFUk1JU1NJT04gPSAtMTEyOwogCiAgICAgLyoqCi0gICAgICogSW5zdGFsbGF0aW9uIGZhaWxlZCByZXR1cm4gY29kZTogdGhpcyBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCl9Ci0gICAgICogaWYgdGhlIHN5c3RlbSBmYWlsZWQgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSBiZWNhdXNlIGl0cyBwYWNrYWdlZCBuYXRpdmUgY29kZSBkaWQgbm90Ci0gICAgICogbWF0Y2ggYW55IG9mIHRoZSBBQklzIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgorICAgICAqIEluc3RhbGxhdGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQorICAgICAqIHtAbGluayBJUGFja2FnZUluc3RhbGxPYnNlcnZlcn0gaWYgdGhlIHN5c3RlbSBmYWlsZWQgdG8gaW5zdGFsbCB0aGUKKyAgICAgKiBwYWNrYWdlIGJlY2F1c2UgaXRzIHBhY2thZ2VkIG5hdGl2ZSBjb2RlIGRpZCBub3QgbWF0Y2ggYW55IG9mIHRoZSBBQklzCisgICAgICogc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtODg3LDYgKzEwNzksMTUgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlNUQUxMX0ZBSUxFRF9FUEhFTUVSQUxfSU5WQUxJRCA9IC0xMTY7CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIERFTEVURV9LRUVQX0RBVEEsCisgICAgICAgICAgICBERUxFVEVfQUxMX1VTRVJTLAorICAgICAgICAgICAgREVMRVRFX1NZU1RFTV9BUFAsCisgICAgfSkKKyAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgcHVibGljIEBpbnRlcmZhY2UgRGVsZXRlRmxhZ3Mge30KKwogICAgIC8qKgogICAgICAqIEZsYWcgcGFyYW1ldGVyIGZvciB7QGxpbmsgI2RlbGV0ZVBhY2thZ2V9IHRvIGluZGljYXRlIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gZGVsZXRlIHRoZQogICAgICAqIHBhY2thZ2UncyBkYXRhIGRpcmVjdG9yeS4KQEAgLTkxNiw4ICsxMTE3LDggQEAKIAogICAgIC8qKgogICAgICAqIFJldHVybiBjb2RlIGZvciB3aGVuIHBhY2thZ2UgZGVsZXRpb24gc3VjY2VlZHMuIFRoaXMgaXMgcGFzc2VkIHRvIHRoZQotICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBieSB7QGxpbmsgI2RlbGV0ZVBhY2thZ2UoKX0gaWYgdGhlIHN5c3RlbQotICAgICAqIHN1Y2NlZWRlZCBpbiBkZWxldGluZyB0aGUgcGFja2FnZS4KKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VEZWxldGVPYnNlcnZlcn0gaWYgdGhlIHN5c3RlbSBzdWNjZWVkZWQgaW4gZGVsZXRpbmcgdGhlCisgICAgICogcGFja2FnZS4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05MjUsOCArMTEyNiw4IEBACiAKICAgICAvKioKICAgICAgKiBEZWxldGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQotICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBieSB7QGxpbmsgI2RlbGV0ZVBhY2thZ2UoKX0gaWYgdGhlIHN5c3RlbQotICAgICAqIGZhaWxlZCB0byBkZWxldGUgdGhlIHBhY2thZ2UgZm9yIGFuIHVuc3BlY2lmaWVkIHJlYXNvbi4KKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VEZWxldGVPYnNlcnZlcn0gaWYgdGhlIHN5c3RlbSBmYWlsZWQgdG8gZGVsZXRlIHRoZSBwYWNrYWdlCisgICAgICogZm9yIGFuIHVuc3BlY2lmaWVkIHJlYXNvbi4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05MzQsOSArMTEzNSw4IEBACiAKICAgICAvKioKICAgICAgKiBEZWxldGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQotICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBieSB7QGxpbmsgI2RlbGV0ZVBhY2thZ2UoKX0gaWYgdGhlIHN5c3RlbQotICAgICAqIGZhaWxlZCB0byBkZWxldGUgdGhlIHBhY2thZ2UgYmVjYXVzZSBpdCBpcyB0aGUgYWN0aXZlIERldmljZVBvbGljeQotICAgICAqIG1hbmFnZXIuCisgICAgICoge0BsaW5rIElQYWNrYWdlRGVsZXRlT2JzZXJ2ZXJ9IGlmIHRoZSBzeXN0ZW0gZmFpbGVkIHRvIGRlbGV0ZSB0aGUgcGFja2FnZQorICAgICAqIGJlY2F1c2UgaXQgaXMgdGhlIGFjdGl2ZSBEZXZpY2VQb2xpY3kgbWFuYWdlci4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05NDQsOCArMTE0NCw4IEBACiAKICAgICAvKioKICAgICAgKiBEZWxldGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQotICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBieSB7QGxpbmsgI2RlbGV0ZVBhY2thZ2UoKX0gaWYgdGhlIHN5c3RlbQotICAgICAqIGZhaWxlZCB0byBkZWxldGUgdGhlIHBhY2thZ2Ugc2luY2UgdGhlIHVzZXIgaXMgcmVzdHJpY3RlZC4KKyAgICAgKiB7QGxpbmsgSVBhY2thZ2VEZWxldGVPYnNlcnZlcn0gaWYgdGhlIHN5c3RlbSBmYWlsZWQgdG8gZGVsZXRlIHRoZSBwYWNrYWdlCisgICAgICogc2luY2UgdGhlIHVzZXIgaXMgcmVzdHJpY3RlZC4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05NTMsOSArMTE1Myw5IEBACiAKICAgICAvKioKICAgICAgKiBEZWxldGlvbiBmYWlsZWQgcmV0dXJuIGNvZGU6IHRoaXMgaXMgcGFzc2VkIHRvIHRoZQotICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBieSB7QGxpbmsgI2RlbGV0ZVBhY2thZ2UoKX0gaWYgdGhlIHN5c3RlbQotICAgICAqIGZhaWxlZCB0byBkZWxldGUgdGhlIHBhY2thZ2UgYmVjYXVzZSBhIHByb2ZpbGUKLSAgICAgKiBvciBkZXZpY2Ugb3duZXIgaGFzIG1hcmtlZCB0aGUgcGFja2FnZSBhcyB1bmluc3RhbGxhYmxlLgorICAgICAqIHtAbGluayBJUGFja2FnZURlbGV0ZU9ic2VydmVyfSBpZiB0aGUgc3lzdGVtIGZhaWxlZCB0byBkZWxldGUgdGhlIHBhY2thZ2UKKyAgICAgKiBiZWNhdXNlIGEgcHJvZmlsZSBvciBkZXZpY2Ugb3duZXIgaGFzIG1hcmtlZCB0aGUgcGFja2FnZSBhcworICAgICAqIHVuaW5zdGFsbGFibGUuCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtOTY1LDggKzExNjUsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFTEVURV9GQUlMRURfQUJPUlRFRCA9IC01OwogCiAgICAgLyoqCi0gICAgICogUmV0dXJuIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI21vdmVQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIpfSB3aGVuIHRoZQorICAgICAqIFJldHVybiBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IHdoZW4gdGhlCiAgICAgICogcGFja2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbW92ZWQgYnkgdGhlIHN5c3RlbS4KICAgICAgKgogICAgICAqIEBoaWRlCkBAIC05NzQsNTkgKzExNzMsNTcgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT1ZFX1NVQ0NFRURFRCA9IC0xMDA7CiAKICAgICAvKioKLSAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNtb3ZlUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlTW92ZU9ic2VydmVyKX0KLSAgICAgKiB3aGVuIHRoZSBwYWNrYWdlIGhhc24ndCBiZWVuIHN1Y2Nlc3NmdWxseSBtb3ZlZCBieSB0aGUgc3lzdGVtCi0gICAgICogYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgbWVtb3J5IG9uIHNwZWNpZmllZCBtZWRpYS4KKyAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IHdoZW4gdGhlCisgICAgICogcGFja2FnZSBoYXNuJ3QgYmVlbiBzdWNjZXNzZnVsbHkgbW92ZWQgYnkgdGhlIHN5c3RlbSBiZWNhdXNlIG9mCisgICAgICogaW5zdWZmaWNpZW50IG1lbW9yeSBvbiBzcGVjaWZpZWQgbWVkaWEuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PVkVfRkFJTEVEX0lOU1VGRklDSUVOVF9TVE9SQUdFID0gLTE7CiAKICAgICAvKioKLSAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNtb3ZlUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlTW92ZU9ic2VydmVyKX0KLSAgICAgKiBpZiB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgZG9lc24ndCBleGlzdC4KKyAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGlmIHRoZQorICAgICAqIHNwZWNpZmllZCBwYWNrYWdlIGRvZXNuJ3QgZXhpc3QuCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1PVkVfRkFJTEVEX0RPRVNOVF9FWElTVCA9IC0yOwogCiAgICAgLyoqCi0gICAgICogRXJyb3IgY29kZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlTW92ZU9ic2VydmVyfSBieQotICAgICAqIHtAbGluayAjbW92ZVBhY2thZ2UoYW5kcm9pZC5uZXQuVXJpLCBJUGFja2FnZU1vdmVPYnNlcnZlcil9Ci0gICAgICogaWYgdGhlIHNwZWNpZmllZCBwYWNrYWdlIGNhbm5vdCBiZSBtb3ZlZCBzaW5jZSBpdHMgYSBzeXN0ZW0gcGFja2FnZS4KKyAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGlmIHRoZQorICAgICAqIHNwZWNpZmllZCBwYWNrYWdlIGNhbm5vdCBiZSBtb3ZlZCBzaW5jZSBpdHMgYSBzeXN0ZW0gcGFja2FnZS4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9WRV9GQUlMRURfU1lTVEVNX1BBQ0tBR0UgPSAtMzsKIAogICAgIC8qKgotICAgICAqIEVycm9yIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI21vdmVQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIpfQotICAgICAqIGlmIHRoZSBzcGVjaWZpZWQgcGFja2FnZSBjYW5ub3QgYmUgbW92ZWQgc2luY2UgaXRzIGZvcndhcmQgbG9ja2VkLgorICAgICAqIEVycm9yIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gaWYgdGhlCisgICAgICogc3BlY2lmaWVkIHBhY2thZ2UgY2Fubm90IGJlIG1vdmVkIHNpbmNlIGl0cyBmb3J3YXJkIGxvY2tlZC4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9WRV9GQUlMRURfRk9SV0FSRF9MT0NLRUQgPSAtNDsKIAogICAgIC8qKgotICAgICAqIEVycm9yIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI21vdmVQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIpfQotICAgICAqIGlmIHRoZSBzcGVjaWZpZWQgcGFja2FnZSBjYW5ub3QgYmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4KKyAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGlmIHRoZQorICAgICAqIHNwZWNpZmllZCBwYWNrYWdlIGNhbm5vdCBiZSBtb3ZlZCB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uLgorICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT1ZFX0ZBSUxFRF9JTlZBTElEX0xPQ0FUSU9OID0gLTU7CiAKICAgICAvKioKLSAgICAgKiBFcnJvciBjb2RlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB7QGxpbmsgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXJ9IGJ5Ci0gICAgICoge0BsaW5rICNtb3ZlUGFja2FnZShhbmRyb2lkLm5ldC5VcmksIElQYWNrYWdlTW92ZU9ic2VydmVyKX0KLSAgICAgKiBpZiB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgY2Fubm90IGJlIG1vdmVkIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisgICAgICogRXJyb3IgY29kZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUge0BsaW5rIElQYWNrYWdlTW92ZU9ic2VydmVyfSBpZiB0aGUKKyAgICAgKiBzcGVjaWZpZWQgcGFja2FnZSBjYW5ub3QgYmUgbW92ZWQgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbi4KKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9WRV9GQUlMRURfSU5URVJOQUxfRVJST1IgPSAtNjsKIAogICAgIC8qKgotICAgICAqIEVycm9yIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gYnkKLSAgICAgKiB7QGxpbmsgI21vdmVQYWNrYWdlKGFuZHJvaWQubmV0LlVyaSwgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIpfSBpZiB0aGUKLSAgICAgKiBzcGVjaWZpZWQgcGFja2FnZSBhbHJlYWR5IGhhcyBhbiBvcGVyYXRpb24gcGVuZGluZyBpbiB0aGUKLSAgICAgKiB7QGxpbmsgUGFja2FnZUhhbmRsZXJ9IHF1ZXVlLgorICAgICAqIEVycm9yIGNvZGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHtAbGluayBJUGFja2FnZU1vdmVPYnNlcnZlcn0gaWYgdGhlCisgICAgICogc3BlY2lmaWVkIHBhY2thZ2UgYWxyZWFkeSBoYXMgYW4gb3BlcmF0aW9uIHBlbmRpbmcgaW4gdGhlIHF1ZXVlLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTExMDIsMjggKzEyOTksMzEgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX1VOREVGSU5FRCA9IDA7CiAKICAgICAvKioKLSAgICAgKiBVc2VkIGFzIHRoZSB7QGNvZGUgc3RhdHVzfSBhcmd1bWVudCBmb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyI3VwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c30KLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBVc2VyIHdpbGwgYWx3YXlzIGJlIHByb21wdGVkIHRoZSBJbnRlbnQgRGlzYW1iaWd1YXRpb24gRGlhbG9nIGlmIHRoZXJlCi0gICAgICogYXJlIHR3byBvciBtb3JlIEludGVudCByZXNvbHZlZCBmb3IgdGhlIEludGVudEZpbHRlcidzIGRvbWFpbihzKS4KKyAgICAgKiBVc2VkIGFzIHRoZSB7QGNvZGUgc3RhdHVzfSBhcmd1bWVudCBmb3IKKyAgICAgKiB7QGxpbmsgI3VwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcn0gdG8gaW5kaWNhdGUgdGhhdCB0aGUgVXNlcgorICAgICAqIHdpbGwgYWx3YXlzIGJlIHByb21wdGVkIHRoZSBJbnRlbnQgRGlzYW1iaWd1YXRpb24gRGlhbG9nIGlmIHRoZXJlIGFyZSB0d28KKyAgICAgKiBvciBtb3JlIEludGVudCByZXNvbHZlZCBmb3IgdGhlIEludGVudEZpbHRlcidzIGRvbWFpbihzKS4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BU0sgPSAxOwogCiAgICAgLyoqCi0gICAgICogVXNlZCBhcyB0aGUge0Bjb2RlIHN0YXR1c30gYXJndW1lbnQgZm9yIHtAbGluayBQYWNrYWdlTWFuYWdlciN1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXN9Ci0gICAgICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgVXNlciB3aWxsIG5ldmVyIGJlIHByb21wdGVkIHRoZSBJbnRlbnQgRGlzYW1iaWd1YXRpb24gRGlhbG9nIGlmIHRoZXJlCi0gICAgICogYXJlIHR3byBvciBtb3JlIHJlc29sdXRpb24gb2YgdGhlIEludGVudC4gVGhlIGRlZmF1bHQgQXBwIGZvciB0aGUgZG9tYWluKHMpIHNwZWNpZmllZCBpbiB0aGUKLSAgICAgKiBJbnRlbnRGaWx0ZXIgd2lsbCBhbHNvIEFMV0FZUyBiZSB1c2VkLgorICAgICAqIFVzZWQgYXMgdGhlIHtAY29kZSBzdGF0dXN9IGFyZ3VtZW50IGZvcgorICAgICAqIHtAbGluayAjdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyfSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBVc2VyCisgICAgICogd2lsbCBuZXZlciBiZSBwcm9tcHRlZCB0aGUgSW50ZW50IERpc2FtYmlndWF0aW9uIERpYWxvZyBpZiB0aGVyZSBhcmUgdHdvCisgICAgICogb3IgbW9yZSByZXNvbHV0aW9uIG9mIHRoZSBJbnRlbnQuIFRoZSBkZWZhdWx0IEFwcCBmb3IgdGhlIGRvbWFpbihzKQorICAgICAqIHNwZWNpZmllZCBpbiB0aGUgSW50ZW50RmlsdGVyIHdpbGwgYWxzbyBBTFdBWVMgYmUgdXNlZC4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BTFdBWVMgPSAyOwogCiAgICAgLyoqCi0gICAgICogVXNlZCBhcyB0aGUge0Bjb2RlIHN0YXR1c30gYXJndW1lbnQgZm9yIHtAbGluayBQYWNrYWdlTWFuYWdlciN1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXN9Ci0gICAgICogdG8gaW5kaWNhdGUgdGhhdCB0aGUgVXNlciBtYXkgYmUgcHJvbXB0ZWQgdGhlIEludGVudCBEaXNhbWJpZ3VhdGlvbiBEaWFsb2cgaWYgdGhlcmUKLSAgICAgKiBhcmUgdHdvIG9yIG1vcmUgSW50ZW50IHJlc29sdmVkLiBUaGUgZGVmYXVsdCBBcHAgZm9yIHRoZSBkb21haW4ocykgc3BlY2lmaWVkIGluIHRoZQorICAgICAqIFVzZWQgYXMgdGhlIHtAY29kZSBzdGF0dXN9IGFyZ3VtZW50IGZvcgorICAgICAqIHtAbGluayAjdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyfSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBVc2VyCisgICAgICogbWF5IGJlIHByb21wdGVkIHRoZSBJbnRlbnQgRGlzYW1iaWd1YXRpb24gRGlhbG9nIGlmIHRoZXJlIGFyZSB0d28gb3IgbW9yZQorICAgICAqIEludGVudCByZXNvbHZlZC4gVGhlIGRlZmF1bHQgQXBwIGZvciB0aGUgZG9tYWluKHMpIHNwZWNpZmllZCBpbiB0aGUKICAgICAgKiBJbnRlbnRGaWx0ZXIgd2lsbCBhbHNvIE5FVkVSIGJlIHByZXNlbnRlZCB0byB0aGUgVXNlci4KICAgICAgKgogICAgICAqIEBoaWRlCkBAIC0xMTMxLDEyICsxMzMxLDEzIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19ORVZFUiA9IDM7CiAKICAgICAvKioKLSAgICAgKiBVc2VkIGFzIHRoZSB7QGNvZGUgc3RhdHVzfSBhcmd1bWVudCBmb3Ige0BsaW5rIFBhY2thZ2VNYW5hZ2VyI3VwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c30KLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgYXBwIHNob3VsZCBhbHdheXMgYmUgY29uc2lkZXJlZCBhcyBhbiBhbWJpZ3VvdXMgY2FuZGlkYXRlIGZvcgotICAgICAqIGhhbmRsaW5nIHRoZSBtYXRjaGluZyBJbnRlbnQgZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgY2FuZGlkYXRlIGFwcHMgaW4gdGhlICJhbHdheXMiCi0gICAgICogc3RhdGUuICBQdXQgYW5vdGhlciB3YXk6IGlmIHRoZXJlIGFyZSBhbnkgJ2Fsd2F5cyBhc2snIGFwcHMgaW4gYSBzZXQgb2YgbW9yZSB0aGFuCi0gICAgICogb25lIGNhbmRpZGF0ZSBhcHAsIHRoZW4gYSBkaXNhbWJpZ3VhdGlvbiBpcyAqYWx3YXlzKiBwcmVzZW50ZWQgZXZlbiBpZiB0aGVyZSBpcwotICAgICAqIGFub3RoZXIgY2FuZGlkYXRlIGFwcCB3aXRoIHRoZSAnYWx3YXlzJyBzdGF0ZS4KKyAgICAgKiBVc2VkIGFzIHRoZSB7QGNvZGUgc3RhdHVzfSBhcmd1bWVudCBmb3IKKyAgICAgKiB7QGxpbmsgI3VwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcn0gdG8gaW5kaWNhdGUgdGhhdCB0aGlzIGFwcAorICAgICAqIHNob3VsZCBhbHdheXMgYmUgY29uc2lkZXJlZCBhcyBhbiBhbWJpZ3VvdXMgY2FuZGlkYXRlIGZvciBoYW5kbGluZyB0aGUKKyAgICAgKiBtYXRjaGluZyBJbnRlbnQgZXZlbiBpZiB0aGVyZSBhcmUgb3RoZXIgY2FuZGlkYXRlIGFwcHMgaW4gdGhlICJhbHdheXMiCisgICAgICogc3RhdGUuIFB1dCBhbm90aGVyIHdheTogaWYgdGhlcmUgYXJlIGFueSAnYWx3YXlzIGFzaycgYXBwcyBpbiBhIHNldCBvZgorICAgICAqIG1vcmUgdGhhbiBvbmUgY2FuZGlkYXRlIGFwcCwgdGhlbiBhIGRpc2FtYmlndWF0aW9uIGlzICphbHdheXMqIHByZXNlbnRlZAorICAgICAqIGV2ZW4gaWYgdGhlcmUgaXMgYW5vdGhlciBjYW5kaWRhdGUgYXBwIHdpdGggdGhlICdhbHdheXMnIHN0YXRlLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTE3NjMsNiArMTk2NCwxMyBAQAogCiAgICAgLyoqCiAgICAgICogRmVhdHVyZSBmb3Ige0BsaW5rICNnZXRTeXN0ZW1BdmFpbGFibGVGZWF0dXJlc30gYW5kIHtAbGluayAjaGFzU3lzdGVtRmVhdHVyZX06CisgICAgICogVGhlIGRldmljZSBzdXBwb3J0cyBwaWN0dXJlLWluLXBpY3R1cmUgbXVsdGktd2luZG93IG1vZGUuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5GRUFUVVJFKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfUElDVFVSRV9JTl9QSUNUVVJFID0gImFuZHJvaWQuc29mdHdhcmUucGljdHVyZV9pbl9waWN0dXJlIjsKKworICAgIC8qKgorICAgICAqIEZlYXR1cmUgZm9yIHtAbGluayAjZ2V0U3lzdGVtQXZhaWxhYmxlRmVhdHVyZXN9IGFuZCB7QGxpbmsgI2hhc1N5c3RlbUZlYXR1cmV9OgogICAgICAqIFRoZSBkZXZpY2Ugc3VwcG9ydHMgY3JlYXRpbmcgc2Vjb25kYXJ5IHVzZXJzIGFuZCBtYW5hZ2VkIHByb2ZpbGVzIHZpYQogICAgICAqIHtAbGluayBEZXZpY2VQb2xpY3lNYW5hZ2VyfS4KICAgICAgKi8KQEAgLTE4MDIsNyArMjAxMCw2IEBACiAgICAgLyoqCiAgICAgICogRmVhdHVyZSBmb3Ige0BsaW5rICNnZXRTeXN0ZW1BdmFpbGFibGVGZWF0dXJlc30gYW5kCiAgICAgICoge0BsaW5rICNoYXNTeXN0ZW1GZWF0dXJlfTogVGhpcyBkZXZpY2Ugc3VwcG9ydHMgZXRoZXJuZXQuCi0gICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU2RrQ29uc3RhbnQoU2RrQ29uc3RhbnRUeXBlLkZFQVRVUkUpCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkVBVFVSRV9FVEhFUk5FVCA9ICJhbmRyb2lkLmhhcmR3YXJlLmV0aGVybmV0IjsKQEAgLTE4MzEsNiArMjAzOCwxNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfTUlESSA9ICJhbmRyb2lkLnNvZnR3YXJlLm1pZGkiOwogCiAgICAgLyoqCisgICAgICogRmVhdHVyZSBmb3Ige0BsaW5rICNnZXRTeXN0ZW1BdmFpbGFibGVGZWF0dXJlc30gYW5kIHtAbGluayAjaGFzU3lzdGVtRmVhdHVyZX06CisgICAgICogVGhlIGRldmljZSBpbXBsZW1lbnRzIGEgYW4gb3B0aW1pemVkIG1vZGUgZm9yIHZpcnR1YWwgcmVhbGl0eSAoVlIpIGFwcGxpY2F0aW9ucyB0aGF0IGhhbmRsZXMKKyAgICAgKiBzdGVyZW9zY29waWMgcmVuZGVyaW5nIG9mIG5vdGlmaWNhdGlvbnMsIGFuZCBtYXkgcG90ZW50aWFsbHkgYWxzbyBpbmNsdWRlIG9wdGltaXphdGlvbnMgdG8KKyAgICAgKiByZWR1Y2UgbGF0ZW5jeSBpbiB0aGUgZ3JhcGhpY3MsIGRpc3BsYXksIGFuZCBzZW5zb3Igc3RhY2tzLiAgUHJlc2VuY2Ugb2YgdGhpcyBmZWF0dXJlCisgICAgICogYWxzbyBpbmRpY2F0ZXMgdGhhdCB0aGUgVnJDb3JlIGxpYnJhcnkgaXMgaW5jbHVkZWQgb24gdGhpcyBkZXZpY2UuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5GRUFUVVJFKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZFQVRVUkVfVlJfTU9ERSA9ICJhbmRyb2lkLnNvZnR3YXJlLnZyLm1vZGUiOworCisgICAgLyoqCiAgICAgICogQWN0aW9uIHRvIGV4dGVybmFsIHN0b3JhZ2Ugc2VydmljZSB0byBjbGVhbiBvdXQgcmVtb3ZlZCBhcHBzLgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC0xOTAzLDkgKzIxMjAsOSBAQAogICAgICAgICAgICAgPSAiYW5kcm9pZC5jb250ZW50LnBtLmV4dHJhLlZFUklGSUNBVElPTl9WRVJTSU9OX0NPREUiOwogCiAgICAgLyoqCi0gICAgICogRXh0cmEgZmllbGQgbmFtZSBmb3IgdGhlIElEIG9mIGEgaW50ZW50IGZpbHRlciBwZW5kaW5nIHZlcmlmaWNhdGlvbi4gUGFzc2VkIHRvCi0gICAgICogYW4gaW50ZW50IGZpbHRlciB2ZXJpZmllciBhbmQgaXMgdXNlZCB0byBjYWxsIGJhY2sgdG8KLSAgICAgKiB7QGxpbmsgUGFja2FnZU1hbmFnZXIjdmVyaWZ5SW50ZW50RmlsdGVyKGludCwgaW50KX0KKyAgICAgKiBFeHRyYSBmaWVsZCBuYW1lIGZvciB0aGUgSUQgb2YgYSBpbnRlbnQgZmlsdGVyIHBlbmRpbmcgdmVyaWZpY2F0aW9uLgorICAgICAqIFBhc3NlZCB0byBhbiBpbnRlbnQgZmlsdGVyIHZlcmlmaWVyIGFuZCBpcyB1c2VkIHRvIGNhbGwgYmFjayB0bworICAgICAqIHtAbGluayAjdmVyaWZ5SW50ZW50RmlsdGVyfQogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KQEAgLTIwNzMsNzkgKzIyOTAsOTkgQEAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBvdmVyYWxsIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcGxpY2F0aW9uIHBhY2thZ2UgdGhhdCBpcwogICAgICAqIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtLgotICAgICAqIDxwPgotICAgICAqIFRocm93cyB7QGxpbmsgTmFtZU5vdEZvdW5kRXhjZXB0aW9ufSBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW4KLSAgICAgKiBub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKgogICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgZnVsbCBuYW1lIChpLmUuIGNvbS5nb29nbGUuYXBwcy5jb250YWN0cykgb2YgdGhlCi0gICAgICogICAgICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCisgICAgICogICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0dFVF9BQ1RJVklUSUVTfSwge0BsaW5rICNHRVRfR0lEU30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sIHtAbGluayAjR0VUX0lOU1RSVU1FTlRBVElPTn0sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0dFVF9QRVJNSVNTSU9OU30sIHtAbGluayAjR0VUX1BST1ZJREVSU30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0dFVF9SRUNFSVZFUlN9LCB7QGxpbmsgI0dFVF9TRVJWSUNFU30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwge0BsaW5rICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVN9IHRvCi0gICAgICogICAgICAgICAgICBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9BQ1RJVklUSUVTfSwge0BsaW5rICNHRVRfQ09ORklHVVJBVElPTlN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfR0lEU30sIHtAbGluayAjR0VUX0lOU1RSVU1FTlRBVElPTn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9JTlRFTlRfRklMVEVSU30sIHtAbGluayAjR0VUX01FVEFfREFUQX0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9QRVJNSVNTSU9OU30sIHtAbGluayAjR0VUX1BST1ZJREVSU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9SRUNFSVZFUlN9LCB7QGxpbmsgI0dFVF9TRVJWSUNFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjR0VUX1NJR05BVFVSRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlN9LCB7QGxpbmsgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqCiAgICAgICogQHJldHVybiBBIFBhY2thZ2VJbmZvIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgICAqICAgICAgICAgcGFja2FnZS4gSWYgZmxhZyBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgaXMgc2V0IGFuZCBpZiB0aGUKKyAgICAgKiAgICAgICAgIHBhY2thZ2UuIElmIGZsYWcge0Bjb2RlIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSBpcyBzZXQgYW5kIGlmIHRoZQogICAgICAqICAgICAgICAgcGFja2FnZSBpcyBub3QgZm91bmQgaW4gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucywgdGhlCiAgICAgICogICAgICAgICBwYWNrYWdlIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBsaXN0IG9mIHVuaW5zdGFsbGVkCiAgICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgKHdoaWNoIGluY2x1ZGVzIGluc3RhbGxlZCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcwogICAgICAqICAgICAgICAgYXBwbGljYXRpb25zIHdpdGggZGF0YSBkaXJlY3RvcnkgaS5lLiBhcHBsaWNhdGlvbnMgd2hpY2ggaGFkIGJlZW4KICAgICAgKiAgICAgICAgIGRlbGV0ZWQgd2l0aCB7QGNvZGUgRE9OVF9ERUxFVEVfREFUQX0gZmxhZyBzZXQpLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbm5vdCBiZQorICAgICAqICAgICAgICAgICAgIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCiAgICAgICogQHNlZSAjR0VUX0FDVElWSVRJRVMKLSAgICAgKiBAc2VlICNHRVRfR0lEUwogICAgICAqIEBzZWUgI0dFVF9DT05GSUdVUkFUSU9OUworICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0lOU1RSVU1FTlRBVElPTgorICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUworICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfUEVSTUlTU0lPTlMKICAgICAgKiBAc2VlICNHRVRfUFJPVklERVJTCiAgICAgICogQHNlZSAjR0VUX1JFQ0VJVkVSUwogICAgICAqIEBzZWUgI0dFVF9TRVJWSUNFUworICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwogICAgICAqIEBzZWUgI0dFVF9TSUdOQVRVUkVTCi0gICAgICogQHNlZSAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICogQHNlZSAjR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzKQorICAgIHB1YmxpYyBhYnN0cmFjdCBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncykKICAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqIFJldHJpZXZlIG92ZXJhbGwgaW5mb3JtYXRpb24gYWJvdXQgYW4gYXBwbGljYXRpb24gcGFja2FnZSB0aGF0IGlzCiAgICAgICogaW5zdGFsbGVkIG9uIHRoZSBzeXN0ZW0uCi0gICAgICogPHA+Ci0gICAgICogVGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbgotICAgICAqIG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtLgogICAgICAqCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBmdWxsIG5hbWUgKGkuZS4gY29tLmdvb2dsZS5hcHBzLmNvbnRhY3RzKSBvZiB0aGUKLSAgICAgKiAgICAgICAgICAgIGRlc2lyZWQgcGFja2FnZS4KKyAgICAgKiAgICAgICAgIGRlc2lyZWQgcGFja2FnZS4KICAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjR0VUX0FDVElWSVRJRVN9LCB7QGxpbmsgI0dFVF9HSURTfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjR0VUX0NPTkZJR1VSQVRJT05TfSwge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjR0VUX1BFUk1JU1NJT05TfSwge0BsaW5rICNHRVRfUFJPVklERVJTfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjR0VUX1JFQ0VJVkVSU30sIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjR0VUX1NJR05BVFVSRVN9LCB7QGxpbmsgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFU30gdG8KLSAgICAgKiAgICAgICAgICAgIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0FDVElWSVRJRVN9LCB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9HSURTfSwge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0lOVEVOVF9GSUxURVJTfSwge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1BFUk1JU1NJT05TfSwge0BsaW5rICNHRVRfUFJPVklERVJTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1JFQ0VJVkVSU30sIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNHRVRfU0lHTkFUVVJFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOU30sIHtAbGluayAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBpZC4KKyAgICAgKgogICAgICAqIEByZXR1cm4gQSBQYWNrYWdlSW5mbyBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAgICAgKiAgICAgICAgIHBhY2thZ2UuIElmIGZsYWcgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIGlzIHNldCBhbmQgaWYgdGhlCisgICAgICogICAgICAgICBwYWNrYWdlLiBJZiBmbGFnIHtAY29kZSBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30gaXMgc2V0IGFuZCBpZiB0aGUKICAgICAgKiAgICAgICAgIHBhY2thZ2UgaXMgbm90IGZvdW5kIGluIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBhcHBsaWNhdGlvbnMsIHRoZQogICAgICAqICAgICAgICAgcGFja2FnZSBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgbGlzdCBvZiB1bmluc3RhbGxlZAogICAgICAqICAgICAgICAgYXBwbGljYXRpb25zICh3aGljaCBpbmNsdWRlcyBpbnN0YWxsZWQgYXBwbGljYXRpb25zIGFzIHdlbGwgYXMKICAgICAgKiAgICAgICAgIGFwcGxpY2F0aW9ucyB3aXRoIGRhdGEgZGlyZWN0b3J5IGkuZS4gYXBwbGljYXRpb25zIHdoaWNoIGhhZCBiZWVuCiAgICAgICogICAgICAgICBkZWxldGVkIHdpdGgge0Bjb2RlIERPTlRfREVMRVRFX0RBVEF9IGZsYWcgc2V0KS4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgogICAgICAqIEBzZWUgI0dFVF9BQ1RJVklUSUVTCi0gICAgICogQHNlZSAjR0VUX0dJRFMKICAgICAgKiBAc2VlICNHRVRfQ09ORklHVVJBVElPTlMKKyAgICAgKiBAc2VlICNHRVRfR0lEUwogICAgICAqIEBzZWUgI0dFVF9JTlNUUlVNRU5UQVRJT04KKyAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICogQHNlZSAjR0VUX1BFUk1JU1NJT05TCiAgICAgICogQHNlZSAjR0VUX1BST1ZJREVSUwogICAgICAqIEBzZWUgI0dFVF9SRUNFSVZFUlMKICAgICAgKiBAc2VlICNHRVRfU0VSVklDRVMKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKICAgICAgKiBAc2VlICNHRVRfU0lHTkFUVVJFUwotICAgICAqIEBzZWUgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAqIEBzZWUgI0dFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOUworICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUwogICAgICAqLwogICAgIEBSZXF1aXJlc1Blcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5JTlRFUkFDVF9BQ1JPU1NfVVNFUlMpCi0gICAgcHVibGljIGFic3RyYWN0IFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKQotICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICBwdWJsaWMgYWJzdHJhY3QgUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm9Bc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySWQpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBNYXAgZnJvbSB0aGUgY3VycmVudCBwYWNrYWdlIG5hbWVzIGluIHVzZSBvbiB0aGUgZGV2aWNlIHRvIHdoYXRldmVyCkBAIC0yMTg3LDkgKzI0MjQsNiBAQAogICAgICAqIHRocm91Z2ggcGFja2FnZXMuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgbG9vayBmb3IgYSBtYWluCiAgICAgICogYWN0aXZpdHkgaW4gdGhlIGNhdGVnb3J5IHtAbGluayBJbnRlbnQjQ0FURUdPUllfTEVBTkJBQ0tfTEFVTkNIRVJ9LCBvcgogICAgICAqIHJldHVybiBudWxsIGlmIG5vIG1haW4gbGVhbmJhY2sgYWN0aXZpdGllcyBhcmUgZm91bmQuCi0gICAgICogPHA+Ci0gICAgICogVGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lCi0gICAgICogY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCiAgICAgICoKICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdG8gaW5zcGVjdC4KICAgICAgKiBAcmV0dXJuIFJldHVybnMgZWl0aGVyIGEgZnVsbHktcXVhbGlmaWVkIEludGVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGxhdW5jaApAQCAtMjIwMSwzMjUgKzI0MzUsNDU2IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJuIGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgc2Vjb25kYXJ5IGdyb3VwLWlkcyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZAogICAgICAqIHRvIGEgcGFja2FnZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaHJvd3Mge0BsaW5rIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbn0gaWYgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUKLSAgICAgKiBjYW5ub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKgogICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgZnVsbCBuYW1lIChpLmUuIGNvbS5nb29nbGUuYXBwcy5jb250YWN0cykgb2YgdGhlCi0gICAgICogICAgICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCisgICAgICogICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCiAgICAgICogQHJldHVybiBSZXR1cm5zIGFuIGludCBhcnJheSBvZiB0aGUgYXNzaWduZWQgZ2lkcywgb3IgbnVsbCBpZiB0aGVyZSBhcmUKICAgICAgKiAgICAgICAgIG5vbmUuCisgICAgICogQHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gaWYgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgY2Fubm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgaW50W10gZ2V0UGFja2FnZUdpZHMoU3RyaW5nIHBhY2thZ2VOYW1lKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgotICAgICAqIEBoaWRlIFJldHVybiB0aGUgdWlkIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lIGZvciB0aGUKLSAgICAgKiBnaXZlbiB1c2VyLgotICAgICAqCi0gICAgICogPHA+VGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbgotICAgICAqIG5hbWUgY2FuIG5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtLgorICAgICAqIFJldHVybiBhbiBhcnJheSBvZiBhbGwgb2YgdGhlIHNlY29uZGFyeSBncm91cC1pZHMgdGhhdCBoYXZlIGJlZW4gYXNzaWduZWQKKyAgICAgKiB0byBhIHBhY2thZ2UuCiAgICAgICoKICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIGZ1bGwgbmFtZSAoaS5lLiBjb20uZ29vZ2xlLmFwcHMuY29udGFjdHMpIG9mIHRoZQotICAgICAqICAgICAgICAgICAgICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCi0gICAgICogQHBhcmFtIHVzZXJIYW5kbGUgVGhlIHVzZXIgaGFuZGxlIGlkZW50aWZpZXIgdG8gbG9vayB1cCB0aGUgcGFja2FnZSB1bmRlci4KLSAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBpbnRlZ2VyIHVpZCB3aG8gb3ducyB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lLgorICAgICAqICAgICAgICAgICAgZGVzaXJlZCBwYWNrYWdlLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBpbnQgYXJyYXkgb2YgdGhlIGFzc2lnbmVkIGdpZHMsIG9yIG51bGwgaWYgdGhlcmUgYXJlCisgICAgICogICAgICAgICBub25lLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbm5vdCBiZQorICAgICAqICAgICAgICAgICAgIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBnZXRQYWNrYWdlVWlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUpCisgICAgcHVibGljIGFic3RyYWN0IGludFtdIGdldFBhY2thZ2VHaWRzKFN0cmluZyBwYWNrYWdlTmFtZSwgQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgVUlEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBmdWxsIG5hbWUgKGkuZS4gY29tLmdvb2dsZS5hcHBzLmNvbnRhY3RzKSBvZiB0aGUKKyAgICAgKiAgICAgICAgICAgIGRlc2lyZWQgcGFja2FnZS4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gaW50ZWdlciBVSUQgd2hvIG93bnMgdGhlIGdpdmVuIHBhY2thZ2UgbmFtZS4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW4gbm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBAUGFja2FnZUluZm9GbGFncyBpbnQgZmxhZ3MpCisgICAgICAgICAgICB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBwYWNrYWdlIG5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIGZ1bGwgbmFtZSAoaS5lLiBjb20uZ29vZ2xlLmFwcHMuY29udGFjdHMpIG9mIHRoZQorICAgICAqICAgICAgICAgICAgZGVzaXJlZCBwYWNrYWdlLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaGFuZGxlIGlkZW50aWZpZXIgdG8gbG9vayB1cCB0aGUgcGFja2FnZSB1bmRlci4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYW4gaW50ZWdlciBVSUQgd2hvIG93bnMgdGhlIGdpdmVuIHBhY2thZ2UgbmFtZS4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW4gbm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0UGFja2FnZVVpZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIEBVc2VySWRJbnQgaW50IHVzZXJJZCkKKyAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIFVJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHBhY2thZ2UgbmFtZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgZnVsbCBuYW1lIChpLmUuIGNvbS5nb29nbGUuYXBwcy5jb250YWN0cykgb2YgdGhlCisgICAgICogICAgICAgICAgICBkZXNpcmVkIHBhY2thZ2UuCisgICAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBoYW5kbGUgaWRlbnRpZmllciB0byBsb29rIHVwIHRoZSBwYWNrYWdlIHVuZGVyLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBpbnRlZ2VyIFVJRCB3aG8gb3ducyB0aGUgZ2l2ZW4gcGFja2FnZSBuYW1lLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbiBub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRQYWNrYWdlVWlkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzLAorICAgICAgICAgICAgQFVzZXJJZEludCBpbnQgdXNlcklkKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworCisgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciBwZXJtaXNzaW9uLgogICAgICAqCi0gICAgICogPHA+VGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgcGVybWlzc2lvbiB3aXRoIHRoZSBnaXZlbgotICAgICAqIG5hbWUgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCi0gICAgICoKICAgICAgKiBAcGFyYW0gbmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgKGkuZS4gY29tLmdvb2dsZS5wZXJtaXNzaW9uLkxPR0lOKQotICAgICAqICAgICAgICAgICAgIG9mIHRoZSBwZXJtaXNzaW9uIHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4KKyAgICAgKiAgICAgICAgIG9mIHRoZSBwZXJtaXNzaW9uIHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4KICAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuICBVc2Uge0BsaW5rICNHRVRfTUVUQV9EQVRBfSB0bwotICAgICAqIHJldHJpZXZlIGFueSBtZXRhLWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZXJtaXNzaW9uLgorICAgICAqICAgICAgICAgcmV0cmlldmUgYW55IG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHBlcm1pc3Npb24uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgYSB7QGxpbmsgUGVybWlzc2lvbkluZm99IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICAgICogICAgICAgICBwZXJtaXNzaW9uLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbm5vdCBiZQorICAgICAqICAgICAgICAgICAgIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCisgICAgICoKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFBlcm1pc3Npb25JbmZvIGdldFBlcm1pc3Npb25JbmZvKFN0cmluZyBuYW1lLCBpbnQgZmxhZ3MpCisgICAgcHVibGljIGFic3RyYWN0IFBlcm1pc3Npb25JbmZvIGdldFBlcm1pc3Npb25JbmZvKFN0cmluZyBuYW1lLCBAUGVybWlzc2lvbkluZm9GbGFncyBpbnQgZmxhZ3MpCiAgICAgICAgICAgICB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUXVlcnkgZm9yIGFsbCBvZiB0aGUgcGVybWlzc2lvbnMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBncm91cC4KICAgICAgKgotICAgICAqIDxwPlRocm93cyB7QGxpbmsgTmFtZU5vdEZvdW5kRXhjZXB0aW9ufSBpZiB0aGUgZ2l2ZW4gZ3JvdXAgZG9lcyBub3QKLSAgICAgKiBleGlzdC4KLSAgICAgKgogICAgICAqIEBwYXJhbSBncm91cCBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgKGkuZS4gY29tLmdvb2dsZS5wZXJtaXNzaW9uLkxPR0lOKQotICAgICAqICAgICAgICAgICAgIG9mIHRoZSBwZXJtaXNzaW9uIGdyb3VwIHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4gIFVzZSBudWxsIHRvCi0gICAgICogICAgICAgICAgICAgZmluZCBhbGwgb2YgdGhlIHBlcm1pc3Npb25zIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBncm91cC4KKyAgICAgKiAgICAgICAgIG9mIHRoZSBwZXJtaXNzaW9uIGdyb3VwIHlvdSBhcmUgaW50ZXJlc3RlZCBpbi4gIFVzZSBudWxsIHRvCisgICAgICogICAgICAgICBmaW5kIGFsbCBvZiB0aGUgcGVybWlzc2lvbnMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGdyb3VwLgogICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFVzZSB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9IHRvCi0gICAgICogcmV0cmlldmUgYW55IG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHBlcm1pc3Npb25zLgorICAgICAqICAgICAgICAgcmV0cmlldmUgYW55IG1ldGEtZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHBlcm1pc3Npb25zLgogICAgICAqCiAgICAgICogQHJldHVybiBSZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgUGVybWlzc2lvbkluZm99IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24KLSAgICAgKiBhYm91dCBhbGwgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBnaXZlbiBncm91cC4KKyAgICAgKiAgICAgICAgICAgICBhYm91dCBhbGwgb2YgdGhlIHBlcm1pc3Npb25zIGluIHRoZSBnaXZlbiBncm91cC4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFBlcm1pc3Npb25JbmZvPiBxdWVyeVBlcm1pc3Npb25zQnlHcm91cChTdHJpbmcgZ3JvdXAsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAUGVybWlzc2lvbkluZm9GbGFncyBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgYSBwYXJ0aWN1bGFyIGdyb3VwIG9mCiAgICAgICogcGVybWlzc2lvbnMuCiAgICAgICoKLSAgICAgKiA8cD5UaHJvd3Mge0BsaW5rIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbn0gaWYgYSBwZXJtaXNzaW9uIGdyb3VwIHdpdGggdGhlIGdpdmVuCi0gICAgICogbmFtZSBjYW5ub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbS4KLSAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSAoaS5lLiBjb20uZ29vZ2xlLnBlcm1pc3Npb25fZ3JvdXAuQVBQUykKLSAgICAgKiAgICAgICAgICAgICBvZiB0aGUgcGVybWlzc2lvbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4uCisgICAgICogICAgICAgICBvZiB0aGUgcGVybWlzc2lvbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4uCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgVXNlIHtAbGluayAjR0VUX01FVEFfREFUQX0gdG8KLSAgICAgKiByZXRyaWV2ZSBhbnkgbWV0YS1kYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBncm91cC4KKyAgICAgKiAgICAgICAgIHJldHJpZXZlIGFueSBtZXRhLWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIGdyb3VwLgogICAgICAqCiAgICAgICogQHJldHVybiBSZXR1cm5zIGEge0BsaW5rIFBlcm1pc3Npb25Hcm91cEluZm99IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24KLSAgICAgKiBhYm91dCB0aGUgcGVybWlzc2lvbi4KKyAgICAgKiAgICAgICAgIGFib3V0IHRoZSBwZXJtaXNzaW9uLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbm5vdCBiZQorICAgICAqICAgICAgICAgICAgIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCisgICAgICoKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IFBlcm1pc3Npb25Hcm91cEluZm8gZ2V0UGVybWlzc2lvbkdyb3VwSW5mbyhTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICAgICAgICAgIEBQZXJtaXNzaW9uR3JvdXBJbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBrbm93biBwZXJtaXNzaW9uIGdyb3VwcyBpbiB0aGUgc3lzdGVtLgogICAgICAqCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgVXNlIHtAbGluayAjR0VUX01FVEFfREFUQX0gdG8KLSAgICAgKiByZXRyaWV2ZSBhbnkgbWV0YS1kYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGVybWlzc2lvbiBncm91cC4KKyAgICAgKiAgICAgICAgIHJldHJpZXZlIGFueSBtZXRhLWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIGdyb3VwLgogICAgICAqCiAgICAgICogQHJldHVybiBSZXR1cm5zIGEgbGlzdCBvZiB7QGxpbmsgUGVybWlzc2lvbkdyb3VwSW5mb30gY29udGFpbmluZwotICAgICAqIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUga25vd24gcGVybWlzc2lvbiBncm91cHMuCisgICAgICogICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIGtub3duIHBlcm1pc3Npb24gZ3JvdXBzLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFBlcm1pc3Npb25Hcm91cEluZm8+IGdldEFsbFBlcm1pc3Npb25Hcm91cHMoaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQZXJtaXNzaW9uR3JvdXBJbmZvPiBnZXRBbGxQZXJtaXNzaW9uR3JvdXBzKAorICAgICAgICAgICAgQFBlcm1pc3Npb25Hcm91cEluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhcgogICAgICAqIHBhY2thZ2UvYXBwbGljYXRpb24uCiAgICAgICoKLSAgICAgKiA8cD5UaHJvd3Mge0BsaW5rIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbn0gaWYgYW4gYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4KLSAgICAgKiBwYWNrYWdlIG5hbWUgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCi0gICAgICoKICAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIGZ1bGwgbmFtZSAoaS5lLiBjb20uZ29vZ2xlLmFwcHMuY29udGFjdHMpIG9mIGFuCi0gICAgICogICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLgorICAgICAqICAgICAgICAgYXBwbGljYXRpb24uCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCi0gICAgICoge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LAotICAgICAqIHtAbGluayAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfSwge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gIHtAbGluayBBcHBsaWNhdGlvbkluZm99IFJldHVybnMgQXBwbGljYXRpb25JbmZvIG9iamVjdCBjb250YWluaW5nCi0gICAgICogICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4KLSAgICAgKiAgICAgICAgIElmIGZsYWcgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIGlzIHNldCBhbmQgIGlmIHRoZSBwYWNrYWdlIGlzIG5vdAotICAgICAqICAgICAgICAgZm91bmQgaW4gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucywKLSAgICAgKiAgICAgICAgIHRoZSBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgZnJvbSB0aGUKLSAgICAgKiAgICAgICAgIGxpc3Qgb2YgdW5pbnN0YWxsZWQgYXBwbGljYXRpb25zKHdoaWNoIGluY2x1ZGVzCi0gICAgICogICAgICAgICBpbnN0YWxsZWQgYXBwbGljYXRpb25zIGFzIHdlbGwgYXMgYXBwbGljYXRpb25zCi0gICAgICogICAgICAgICB3aXRoIGRhdGEgZGlyZWN0b3J5IGllIGFwcGxpY2F0aW9ucyB3aGljaCBoYWQgYmVlbgorICAgICAqIEByZXR1cm4gQW4ge0BsaW5rIEFwcGxpY2F0aW9uSW5mb30gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgKiAgICAgICAgIHBhY2thZ2UuIElmIGZsYWcge0Bjb2RlIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSBpcyBzZXQgYW5kIGlmIHRoZQorICAgICAqICAgICAgICAgcGFja2FnZSBpcyBub3QgZm91bmQgaW4gdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucywgdGhlCisgICAgICogICAgICAgICBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbiBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgbGlzdCBvZiB1bmluc3RhbGxlZAorICAgICAqICAgICAgICAgYXBwbGljYXRpb25zICh3aGljaCBpbmNsdWRlcyBpbnN0YWxsZWQgYXBwbGljYXRpb25zIGFzIHdlbGwgYXMKKyAgICAgKiAgICAgICAgIGFwcGxpY2F0aW9ucyB3aXRoIGRhdGEgZGlyZWN0b3J5IGkuZS4gYXBwbGljYXRpb25zIHdoaWNoIGhhZCBiZWVuCiAgICAgICogICAgICAgICBkZWxldGVkIHdpdGgge0Bjb2RlIERPTlRfREVMRVRFX0RBVEF9IGZsYWcgc2V0KS4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgogICAgICAqCiAgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwotICAgICAqIEBzZWUgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQXBwbGljYXRpb25JbmZvIGdldEFwcGxpY2F0aW9uSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAQXBwbGljYXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworCisgICAgLyoqIHtAaGlkZX0gKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgQXBwbGljYXRpb25JbmZvIGdldEFwcGxpY2F0aW9uSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICBAQXBwbGljYXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySWQpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgYSBwYXJ0aWN1bGFyIGFjdGl2aXR5CiAgICAgICogY2xhc3MuCiAgICAgICoKLSAgICAgKiA8cD5UaHJvd3Mge0BsaW5rIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbn0gaWYgYW4gYWN0aXZpdHkgd2l0aCB0aGUgZ2l2ZW4KLSAgICAgKiBjbGFzcyBuYW1lIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtLgotICAgICAqCiAgICAgICogQHBhcmFtIGNvbXBvbmVudCBUaGUgZnVsbCBjb21wb25lbnQgbmFtZSAoaS5lLgogICAgICAqIGNvbS5nb29nbGUuYXBwcy5jb250YWN0cy9jb20uZ29vZ2xlLmFwcHMuY29udGFjdHMuQ29udGFjdHNMaXN0KSBvZiBhbiBBY3Rpdml0eQogICAgICAqIGNsYXNzLgogICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgotICAgICAqIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwKLSAgICAgKiB0byBtb2RpZnkgdGhlIGRhdGEgKGluIEFwcGxpY2F0aW9uSW5mbykgcmV0dXJuZWQuCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0FMTH0sIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LCB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfQorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4ge0BsaW5rIEFjdGl2aXR5SW5mb30gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aXZpdHkuCisgICAgICogQHJldHVybiBBbiB7QGxpbmsgQWN0aXZpdHlJbmZvfSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpdml0eS4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgogICAgICAqCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCiAgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORworICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgQWN0aXZpdHlJbmZvIGdldEFjdGl2aXR5SW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwKLSAgICAgICAgICAgIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKKyAgICAgICAgICAgIEBDb21wb25lbnRJbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhciByZWNlaXZlcgogICAgICAqIGNsYXNzLgogICAgICAqCi0gICAgICogPHA+VGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgcmVjZWl2ZXIgd2l0aCB0aGUgZ2l2ZW4KLSAgICAgKiBjbGFzcyBuYW1lIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtLgotICAgICAqCiAgICAgICogQHBhcmFtIGNvbXBvbmVudCBUaGUgZnVsbCBjb21wb25lbnQgbmFtZSAoaS5lLgogICAgICAqIGNvbS5nb29nbGUuYXBwcy5jYWxlbmRhci9jb20uZ29vZ2xlLmFwcHMuY2FsZW5kYXIuQ2FsZW5kYXJBbGFybSkgb2YgYSBSZWNlaXZlcgogICAgICAqIGNsYXNzLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCi0gICAgICogdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9BTEx9LCB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0KKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIHtAbGluayBBY3Rpdml0eUluZm99IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY2VpdmVyLgorICAgICAqIEByZXR1cm4gQW4ge0BsaW5rIEFjdGl2aXR5SW5mb30gY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjZWl2ZXIuCisgICAgICogQHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gaWYgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgY2Fubm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKgotICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUwogICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IEFjdGl2aXR5SW5mbyBnZXRSZWNlaXZlckluZm8oQ29tcG9uZW50TmFtZSBjb21wb25lbnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAQ29tcG9uZW50SW5mb0ZsYWdzIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2Uga25vdyBhYm91dCBhIHBhcnRpY3VsYXIgc2VydmljZQogICAgICAqIGNsYXNzLgogICAgICAqCi0gICAgICogPHA+VGhyb3dzIHtAbGluayBOYW1lTm90Rm91bmRFeGNlcHRpb259IGlmIGEgc2VydmljZSB3aXRoIHRoZSBnaXZlbgotICAgICAqIGNsYXNzIG5hbWUgY2Fubm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCi0gICAgICoKICAgICAgKiBAcGFyYW0gY29tcG9uZW50IFRoZSBmdWxsIGNvbXBvbmVudCBuYW1lIChpLmUuCiAgICAgICogY29tLmdvb2dsZS5hcHBzLm1lZGlhL2NvbS5nb29nbGUuYXBwcy5tZWRpYS5CYWNrZ3JvdW5kUGxheWJhY2spIG9mIGEgU2VydmljZQogICAgICAqIGNsYXNzLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCi0gICAgICogdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9BTEx9LCB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0KKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFNlcnZpY2VJbmZvIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UuCisgICAgICogQHJldHVybiBBIHtAbGluayBTZXJ2aWNlSW5mb30gb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZpY2UuCisgICAgICogQHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gaWYgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgY2Fubm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKgogICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IFNlcnZpY2VJbmZvIGdldFNlcnZpY2VJbmZvKENvbXBvbmVudE5hbWUgY29tcG9uZW50LAotICAgICAgICAgICAgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOworICAgICAgICAgICAgQENvbXBvbmVudEluZm9GbGFncyBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIGtub3cgYWJvdXQgYSBwYXJ0aWN1bGFyIGNvbnRlbnQKICAgICAgKiBwcm92aWRlciBjbGFzcy4KICAgICAgKgotICAgICAqIDxwPlRocm93cyB7QGxpbmsgTmFtZU5vdEZvdW5kRXhjZXB0aW9ufSBpZiBhIHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuCi0gICAgICogY2xhc3MgbmFtZSBjYW5ub3QgYmUgZm91bmQgb24gdGhlIHN5c3RlbS4KLSAgICAgKgogICAgICAqIEBwYXJhbSBjb21wb25lbnQgVGhlIGZ1bGwgY29tcG9uZW50IG5hbWUgKGkuZS4KICAgICAgKiBjb20uZ29vZ2xlLnByb3ZpZGVycy5tZWRpYS9jb20uZ29vZ2xlLnByb3ZpZGVycy5tZWRpYS5NZWRpYVByb3ZpZGVyKSBvZiBhCiAgICAgICogQ29udGVudFByb3ZpZGVyIGNsYXNzLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCi0gICAgICogdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9BTEx9LCB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0KKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFByb3ZpZGVySW5mbyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlLgorICAgICAqIEByZXR1cm4gQSB7QGxpbmsgUHJvdmlkZXJJbmZvfSBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvdmlkZXIuCisgICAgICogQHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gaWYgYSBwYWNrYWdlIHdpdGggdGhlIGdpdmVuIG5hbWUgY2Fubm90IGJlCisgICAgICogICAgICAgICAgICAgZm91bmQgb24gdGhlIHN5c3RlbS4KICAgICAgKgogICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IFByb3ZpZGVySW5mbyBnZXRQcm92aWRlckluZm8oQ29tcG9uZW50TmFtZSBjb21wb25lbnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgICAgICBAQ29tcG9uZW50SW5mb0ZsYWdzIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIFJldHVybiBhIExpc3Qgb2YgYWxsIHBhY2thZ2VzIHRoYXQgYXJlIGluc3RhbGxlZAogICAgICAqIG9uIHRoZSBkZXZpY2UuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9BQ1RJVklUSUVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9HSURTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9QRVJNSVNTSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfUFJPVklERVJTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9SRUNFSVZFUlN9LAotICAgICAqIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFU30gdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfQUNUSVZJVElFU30sIHtAbGluayAjR0VUX0NPTkZJR1VSQVRJT05TfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0dJRFN9LCB7QGxpbmsgI0dFVF9JTlNUUlVNRU5UQVRJT059LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfSU5URU5UX0ZJTFRFUlN9LCB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUEVSTUlTU0lPTlN9LCB7QGxpbmsgI0dFVF9QUk9WSURFUlN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUkVDRUlWRVJTfSwge0BsaW5rICNHRVRfU0VSVklDRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LCB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TfSwge0BsaW5rICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gQSBMaXN0IG9mIFBhY2thZ2VJbmZvIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBwYWNrYWdlIHRoYXQgaXMKLSAgICAgKiAgICAgICAgIGluc3RhbGxlZCBvbiB0aGUgZGV2aWNlLiAgSW4gdGhlIHVubGlrZWx5IGNhc2Ugb2YgdGhlcmUgYmVpbmcgbm8KLSAgICAgKiAgICAgICAgIGluc3RhbGxlZCBwYWNrYWdlcywgYW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZC4KLSAgICAgKiAgICAgICAgIElmIGZsYWcgR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIGlzIHNldCwgYSBsaXN0IG9mIGFsbAotICAgICAqICAgICAgICAgYXBwbGljYXRpb25zIGluY2x1ZGluZyB0aG9zZSBkZWxldGVkIHdpdGgge0Bjb2RlIERPTlRfREVMRVRFX0RBVEF9Ci0gICAgICogICAgICAgICAocGFydGlhbGx5IGluc3RhbGxlZCBhcHBzIHdpdGggZGF0YSBkaXJlY3RvcnkpIHdpbGwgYmUgcmV0dXJuZWQuCisgICAgICogQHJldHVybiBBIExpc3Qgb2YgUGFja2FnZUluZm8gb2JqZWN0cywgb25lIGZvciBlYWNoIGluc3RhbGxlZCBwYWNrYWdlLAorICAgICAqICAgICAgICAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4gIEluIHRoZSB1bmxpa2VseSBjYXNlCisgICAgICogICAgICAgICB0aGVyZSBhcmUgbm8gaW5zdGFsbGVkIHBhY2thZ2VzLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLiBJZgorICAgICAqICAgICAgICAgZmxhZyB7QGNvZGUgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9IGlzIHNldCwgdGhlIHBhY2thZ2UKKyAgICAgKiAgICAgICAgIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBsaXN0IG9mIHVuaW5zdGFsbGVkCisgICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgKHdoaWNoIGluY2x1ZGVzIGluc3RhbGxlZCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcworICAgICAqICAgICAgICAgYXBwbGljYXRpb25zIHdpdGggZGF0YSBkaXJlY3RvcnkgaS5lLiBhcHBsaWNhdGlvbnMgd2hpY2ggaGFkIGJlZW4KKyAgICAgKiAgICAgICAgIGRlbGV0ZWQgd2l0aCB7QGNvZGUgRE9OVF9ERUxFVEVfREFUQX0gZmxhZyBzZXQpLgogICAgICAqCiAgICAgICogQHNlZSAjR0VUX0FDVElWSVRJRVMKLSAgICAgKiBAc2VlICNHRVRfR0lEUwogICAgICAqIEBzZWUgI0dFVF9DT05GSUdVUkFUSU9OUworICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0lOU1RSVU1FTlRBVElPTgorICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUworICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfUEVSTUlTU0lPTlMKICAgICAgKiBAc2VlICNHRVRfUFJPVklERVJTCiAgICAgICogQHNlZSAjR0VUX1JFQ0VJVkVSUwogICAgICAqIEBzZWUgI0dFVF9TRVJWSUNFUworICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwogICAgICAqIEBzZWUgI0dFVF9TSUdOQVRVUkVTCi0gICAgICogQHNlZSAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICogQHNlZSAjR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBMaXN0IG9mIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgdGhhdCBhcmUgY3VycmVudGx5CiAgICAgICogaG9sZGluZyBhbnkgb2YgdGhlIGdpdmVuIHBlcm1pc3Npb25zLgogICAgICAqCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCi0gICAgICoge0BsaW5rICNHRVRfQUNUSVZJVElFU30sCi0gICAgICoge0BsaW5rICNHRVRfR0lEU30sCi0gICAgICoge0BsaW5rICNHRVRfQ09ORklHVVJBVElPTlN9LAotICAgICAqIHtAbGluayAjR0VUX0lOU1RSVU1FTlRBVElPTn0sCi0gICAgICoge0BsaW5rICNHRVRfUEVSTUlTU0lPTlN9LAotICAgICAqIHtAbGluayAjR0VUX1BST1ZJREVSU30sCi0gICAgICoge0BsaW5rICNHRVRfUkVDRUlWRVJTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9TRVJWSUNFU30sCi0gICAgICoge0BsaW5rICNHRVRfU0lHTkFUVVJFU30sCi0gICAgICoge0BsaW5rICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVN9IHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0FDVElWSVRJRVN9LCB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9HSURTfSwge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0lOVEVOVF9GSUxURVJTfSwge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1BFUk1JU1NJT05TfSwge0BsaW5rICNHRVRfUFJPVklERVJTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1JFQ0VJVkVSU30sIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNHRVRfU0lHTkFUVVJFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOU30sIHtAbGluayAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBMaXN0IG9mIFBhY2thZ2VJbmZvIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBpbnN0YWxsZWQKLSAgICAgKiBhcHBsaWNhdGlvbiB0aGF0IGlzIGhvbGRpbmcgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHdlcmUgcHJvdmlkZWQuCisgICAgICogQHJldHVybiBBIExpc3Qgb2YgUGFja2FnZUluZm8gb2JqZWN0cywgb25lIGZvciBlYWNoIGluc3RhbGxlZCBwYWNrYWdlCisgICAgICogICAgICAgICB0aGF0IGhvbGRzIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgdGhhdCB3ZXJlIHByb3ZpZGVkLCBjb250YWluaW5nCisgICAgICogICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2FnZS4gSWYgbm8gaW5zdGFsbGVkIHBhY2thZ2VzIGhvbGQgYW55CisgICAgICogICAgICAgICBvZiB0aGUgcGVybWlzc2lvbnMsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuIElmIGZsYWcKKyAgICAgKiAgICAgICAgIHtAY29kZSBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30gaXMgc2V0LCB0aGUgcGFja2FnZSBpbmZvcm1hdGlvbgorICAgICAqICAgICAgICAgaXMgcmV0cmlldmVkIGZyb20gdGhlIGxpc3Qgb2YgdW5pbnN0YWxsZWQgYXBwbGljYXRpb25zICh3aGljaAorICAgICAqICAgICAgICAgaW5jbHVkZXMgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucyBhcyB3ZWxsIGFzIGFwcGxpY2F0aW9ucyB3aXRoIGRhdGEKKyAgICAgKiAgICAgICAgIGRpcmVjdG9yeSBpLmUuIGFwcGxpY2F0aW9ucyB3aGljaCBoYWQgYmVlbiBkZWxldGVkIHdpdGgKKyAgICAgKiAgICAgICAgIHtAY29kZSBET05UX0RFTEVURV9EQVRBfSBmbGFnIHNldCkuCiAgICAgICoKICAgICAgKiBAc2VlICNHRVRfQUNUSVZJVElFUwotICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0NPTkZJR1VSQVRJT05TCisgICAgICogQHNlZSAjR0VUX0dJRFMKICAgICAgKiBAc2VlICNHRVRfSU5TVFJVTUVOVEFUSU9OCisgICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9QRVJNSVNTSU9OUwogICAgICAqIEBzZWUgI0dFVF9QUk9WSURFUlMKICAgICAgKiBAc2VlICNHRVRfUkVDRUlWRVJTCiAgICAgICogQHNlZSAjR0VUX1NFUlZJQ0VTCisgICAgICogQHNlZSAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTCiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKLSAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKKyAgICAgKiBAc2VlICNHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0UGFja2FnZXNIb2xkaW5nUGVybWlzc2lvbnMoCi0gICAgICAgICAgICBTdHJpbmdbXSBwZXJtaXNzaW9ucywgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIFN0cmluZ1tdIHBlcm1pc3Npb25zLCBAUGFja2FnZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIGEgTGlzdCBvZiBhbGwgcGFja2FnZXMgdGhhdCBhcmUgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UsIGZvciBhIHNwZWNpZmljIHVzZXIuCiAgICAgICogUmVxdWVzdGluZyBhIGxpc3Qgb2YgaW5zdGFsbGVkIHBhY2thZ2VzIGZvciBhbm90aGVyIHVzZXIKICAgICAgKiB3aWxsIHJlcXVpcmUgdGhlIHBlcm1pc3Npb24gSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEwuCisgICAgICoKICAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9BQ1RJVklUSUVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9HSURTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9QRVJNSVNTSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfUFJPVklERVJTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9SRUNFSVZFUlN9LAotICAgICAqIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFU30gdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfQUNUSVZJVElFU30sIHtAbGluayAjR0VUX0NPTkZJR1VSQVRJT05TfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0dJRFN9LCB7QGxpbmsgI0dFVF9JTlNUUlVNRU5UQVRJT059LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfSU5URU5UX0ZJTFRFUlN9LCB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUEVSTUlTU0lPTlN9LCB7QGxpbmsgI0dFVF9QUk9WSURFUlN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUkVDRUlWRVJTfSwge0BsaW5rICNHRVRfU0VSVklDRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LCB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TfSwge0BsaW5rICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIGZvciB3aG9tIHRoZSBpbnN0YWxsZWQgcGFja2FnZXMgYXJlIHRvIGJlIGxpc3RlZAogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3Qgb2YgUGFja2FnZUluZm8gb2JqZWN0cywgb25lIGZvciBlYWNoIHBhY2thZ2UgdGhhdCBpcwotICAgICAqICAgICAgICAgaW5zdGFsbGVkIG9uIHRoZSBkZXZpY2UuICBJbiB0aGUgdW5saWtlbHkgY2FzZSBvZiB0aGVyZSBiZWluZyBubwotICAgICAqICAgICAgICAgaW5zdGFsbGVkIHBhY2thZ2VzLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgotICAgICAqICAgICAgICAgSWYgZmxhZyBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgaXMgc2V0LCBhIGxpc3Qgb2YgYWxsCi0gICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIHRob3NlIGRlbGV0ZWQgd2l0aCB7QGNvZGUgRE9OVF9ERUxFVEVfREFUQX0KLSAgICAgKiAgICAgICAgIChwYXJ0aWFsbHkgaW5zdGFsbGVkIGFwcHMgd2l0aCBkYXRhIGRpcmVjdG9yeSkgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIEEgTGlzdCBvZiBQYWNrYWdlSW5mbyBvYmplY3RzLCBvbmUgZm9yIGVhY2ggaW5zdGFsbGVkIHBhY2thZ2UsCisgICAgICogICAgICAgICBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlLiAgSW4gdGhlIHVubGlrZWx5IGNhc2UKKyAgICAgKiAgICAgICAgIHRoZXJlIGFyZSBubyBpbnN0YWxsZWQgcGFja2FnZXMsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuIElmCisgICAgICogICAgICAgICBmbGFnIHtAY29kZSBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30gaXMgc2V0LCB0aGUgcGFja2FnZQorICAgICAqICAgICAgICAgaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkIGZyb20gdGhlIGxpc3Qgb2YgdW5pbnN0YWxsZWQKKyAgICAgKiAgICAgICAgIGFwcGxpY2F0aW9ucyAod2hpY2ggaW5jbHVkZXMgaW5zdGFsbGVkIGFwcGxpY2F0aW9ucyBhcyB3ZWxsIGFzCisgICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgd2l0aCBkYXRhIGRpcmVjdG9yeSBpLmUuIGFwcGxpY2F0aW9ucyB3aGljaCBoYWQgYmVlbgorICAgICAqICAgICAgICAgZGVsZXRlZCB3aXRoIHtAY29kZSBET05UX0RFTEVURV9EQVRBfSBmbGFnIHNldCkuCiAgICAgICoKICAgICAgKiBAc2VlICNHRVRfQUNUSVZJVElFUwotICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0NPTkZJR1VSQVRJT05TCisgICAgICogQHNlZSAjR0VUX0dJRFMKICAgICAgKiBAc2VlICNHRVRfSU5TVFJVTUVOVEFUSU9OCisgICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9QRVJNSVNTSU9OUwogICAgICAqIEBzZWUgI0dFVF9QUk9WSURFUlMKICAgICAgKiBAc2VlICNHRVRfUkVDRUlWRVJTCiAgICAgICogQHNlZSAjR0VUX1NFUlZJQ0VTCisgICAgICogQHNlZSAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTCiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKLSAgICAgKiBAc2VlICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKKyAgICAgKiBAc2VlICNHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzKGludCBmbGFncywgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKEBQYWNrYWdlSW5mb0ZsYWdzIGludCBmbGFncywKKyAgICAgICAgICAgIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBDaGVjayB3aGV0aGVyIGEgcGFydGljdWxhciBwYWNrYWdlIGhhcyBiZWVuIGdyYW50ZWQgYSBwYXJ0aWN1bGFyCkBAIC0yODA4LDcgKzMxNzMsNyBAQAogICAgICAqIEByZXR1cm4gUmV0dXJucyBhbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBwYWNrYWdlcyBhc3NpZ25lZCB0byB0aGUgdXNlcgogICAgICAqIGlkLCBvciBudWxsIGlmIHRoZXJlIGFyZSBubyBrbm93biBwYWNrYWdlcyB3aXRoIHRoZSBnaXZlbiBpZC4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nW10gZ2V0UGFja2FnZXNGb3JVaWQoaW50IHVpZCk7CisgICAgcHVibGljIGFic3RyYWN0IEBOdWxsYWJsZSBTdHJpbmdbXSBnZXRQYWNrYWdlc0ZvclVpZChpbnQgdWlkKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIHRoZSBvZmZpY2lhbCBuYW1lIGFzc29jaWF0ZWQgd2l0aCBhIHVzZXIgaWQuICBUaGlzIG5hbWUgaXMKQEAgLTI4MjEsNyArMzE4Niw3IEBACiAgICAgICogQHJldHVybiBSZXR1cm5zIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSBnaXZlbiB1c2VyIGlkLCBvciBudWxsIGlmIHRoZQogICAgICAqIHVzZXIgaWQgaXMgbm90IGN1cnJlbnRseSBhc3NpZ25lZC4KICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldE5hbWVGb3JVaWQoaW50IHVpZCk7CisgICAgcHVibGljIGFic3RyYWN0IEBOdWxsYWJsZSBTdHJpbmcgZ2V0TmFtZUZvclVpZChpbnQgdWlkKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiB0aGUgdXNlciBpZCBhc3NvY2lhdGVkIHdpdGggYSBzaGFyZWQgdXNlciBuYW1lLiBNdWx0aXBsZQpAQCAtMjgzMSw4ICszMTk2LDkgQEAKICAgICAgKiBzaGFyZWQgdXNlci4KICAgICAgKgogICAgICAqIEBwYXJhbSBzaGFyZWRVc2VyTmFtZSBUaGUgc2hhcmVkIHVzZXIgbmFtZSB3aG9zZSB1aWQgaXMgdG8gYmUgcmV0cmlldmVkLgotICAgICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdWlkIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2hhcmVkIHVzZXIsIG9yICBOYW1lTm90Rm91bmRFeGNlcHRpb24KLSAgICAgKiBpZiB0aGUgc2hhcmVkIHVzZXIgbmFtZSBpcyBub3QgYmVpbmcgdXNlZCBieSBhbnkgaW5zdGFsbGVkIHBhY2thZ2VzCisgICAgICogQHJldHVybiBSZXR1cm5zIHRoZSBVSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzaGFyZWQgdXNlci4KKyAgICAgKiBAdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBpZiBhIHBhY2thZ2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSBjYW5ub3QgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZCBvbiB0aGUgc3lzdGVtLgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRVaWRGb3JTaGFyZWRVc2VyKFN0cmluZyBzaGFyZWRVc2VyTmFtZSkKQEAgLTI4NDYsMjAgKzMyMTIsMjMgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgogICAgICAqIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFU30gdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhIExpc3Qgb2YgQXBwbGljYXRpb25JbmZvIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICogICAgICAgICBpcyBpbnN0YWxsZWQgb24gdGhlIGRldmljZS4gIEluIHRoZSB1bmxpa2VseSBjYXNlIG9mIHRoZXJlIGJlaW5nCi0gICAgICogICAgICAgICBubyBpbnN0YWxsZWQgYXBwbGljYXRpb25zLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgotICAgICAqICAgICAgICAgSWYgZmxhZyBHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMgaXMgc2V0LCBhIGxpc3Qgb2YgYWxsCi0gICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgaW5jbHVkaW5nIHRob3NlIGRlbGV0ZWQgd2l0aCB7QGNvZGUgRE9OVF9ERUxFVEVfREFUQX0KLSAgICAgKiAgICAgICAgIChwYXJ0aWFsbHkgaW5zdGFsbGVkIGFwcHMgd2l0aCBkYXRhIGRpcmVjdG9yeSkgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKiBAcmV0dXJuIEEgTGlzdCBvZiBBcHBsaWNhdGlvbkluZm8gb2JqZWN0cywgb25lIGZvciBlYWNoIGluc3RhbGxlZCBhcHBsaWNhdGlvbi4KKyAgICAgKiAgICAgICAgIEluIHRoZSB1bmxpa2VseSBjYXNlIHRoZXJlIGFyZSBubyBpbnN0YWxsZWQgcGFja2FnZXMsIGFuIGVtcHR5IGxpc3QKKyAgICAgKiAgICAgICAgIGlzIHJldHVybmVkLiBJZiBmbGFnIHtAY29kZSBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30gaXMgc2V0LCB0aGUKKyAgICAgKiAgICAgICAgIGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBsaXN0IG9mIHVuaW5zdGFsbGVkCisgICAgICogICAgICAgICBhcHBsaWNhdGlvbnMgKHdoaWNoIGluY2x1ZGVzIGluc3RhbGxlZCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBhcworICAgICAqICAgICAgICAgYXBwbGljYXRpb25zIHdpdGggZGF0YSBkaXJlY3RvcnkgaS5lLiBhcHBsaWNhdGlvbnMgd2hpY2ggaGFkIGJlZW4KKyAgICAgKiAgICAgICAgIGRlbGV0ZWQgd2l0aCB7QGNvZGUgRE9OVF9ERUxFVEVfREFUQX0gZmxhZyBzZXQpLgogICAgICAqCiAgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUwotICAgICAqIEBzZWUgI0dFVF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGdldEluc3RhbGxlZEFwcGxpY2F0aW9ucyhpbnQgZmxhZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PEFwcGxpY2F0aW9uSW5mbz4gZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKEBBcHBsaWNhdGlvbkluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgZXBoZW1lcmFsIGFwcGxpY2F0aW9ucyB0aGUgdXNlciByZWNlbnRseSB1c2VkLiBSZXF1aXJlcwpAQCAtMjg4OSw2ICszMjU4LDggQEAKICAgICAgKiBAc2VlICNzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKQogICAgICAqIEBzZWUgI2dldEVwaGVtZXJhbENvb2tpZSgpCiAgICAgICogQHNlZSAjZ2V0RXBoZW1lcmFsQ29va2llTWF4U2l6ZUJ5dGVzKCkKKyAgICAgKgorICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbigpOwogCkBAIC0yOTAxLDYgKzMyNzIsOCBAQAogICAgICAqIEBzZWUgI2lzRXBoZW1lcmFsQXBwbGljYXRpb24oKQogICAgICAqIEBzZWUgI3NldEVwaGVtZXJhbENvb2tpZShieXRlW10pCiAgICAgICogQHNlZSAjZ2V0RXBoZW1lcmFsQ29va2llKCkKKyAgICAgKgorICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRFcGhlbWVyYWxDb29raWVNYXhTaXplQnl0ZXMoKTsKIApAQCAtMjkxNyw2ICszMjkwLDggQEAKICAgICAgKiBAc2VlICNpc0VwaGVtZXJhbEFwcGxpY2F0aW9uKCkKICAgICAgKiBAc2VlICNzZXRFcGhlbWVyYWxDb29raWUoYnl0ZVtdKQogICAgICAqIEBzZWUgI2dldEVwaGVtZXJhbENvb2tpZU1heFNpemVCeXRlcygpCisgICAgICoKKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBATm9uTnVsbCBieXRlW10gZ2V0RXBoZW1lcmFsQ29va2llKCk7CiAKQEAgLTI5MzQsNyArMzMwOSw5IEBACiAgICAgICoKICAgICAgKiBAc2VlICNpc0VwaGVtZXJhbEFwcGxpY2F0aW9uKCkKICAgICAgKiBAc2VlICNnZXRFcGhlbWVyYWxDb29raWVNYXhTaXplQnl0ZXMoKQotICAgICAqIEBzZWUgI2dldEVwaGVtZXJhbENvb2tpZSgpOworICAgICAqIEBzZWUgI2dldEVwaGVtZXJhbENvb2tpZSgpCisgICAgICoKKyAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHNldEVwaGVtZXJhbENvb2tpZShATm9uTnVsbCAgYnl0ZVtdIGNvb2tpZSk7CiAKQEAgLTI5ODAsMjEgKzMzNTcsMzcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBpbnRlbnQgQW4gaW50ZW50IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkZXNpcmVkIHNwZWNpZmljYXRpb24KICAgICAgKiAgICAgICAgICAgICAgIChhY3Rpb24sIGRhdGEsIHR5cGUsIGNhdGVnb3J5LCBhbmQvb3IgY29tcG9uZW50KS4KLSAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuICBUaGUgbW9zdCBpbXBvcnRhbnQgaXMKLSAgICAgKiB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sIHRvIGxpbWl0IHRoZSByZXNvbHV0aW9uIHRvIG9ubHkKLSAgICAgKiB0aG9zZSBhY3Rpdml0aWVzIHRoYXQgc3VwcG9ydCB0aGUge0BsaW5rIGFuZHJvaWQuY29udGVudC5JbnRlbnQjQ0FURUdPUllfREVGQVVMVH0uCisgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9SRVNPTFZFRF9GSUxURVJ9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LCB7QGxpbmsgI01BVENIX0FMTH0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkV9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfSwge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4gVGhlIG1vc3QgaW1wb3J0YW50IGlzCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sIHRvIGxpbWl0IHRoZSByZXNvbHV0aW9uIHRvIG9ubHkKKyAgICAgKiAgICAgICAgIHRob3NlIGFjdGl2aXRpZXMgdGhhdCBzdXBwb3J0IHRoZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkludGVudCNDQVRFR09SWV9ERUZBVUxUfS4KICAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhIFJlc29sdmVJbmZvIGNvbnRhaW5pbmcgdGhlIGZpbmFsIGFjdGl2aXR5IGludGVudCB0aGF0Ci0gICAgICogICAgICAgICB3YXMgZGV0ZXJtaW5lZCB0byBiZSB0aGUgYmVzdCBhY3Rpb24uICBSZXR1cm5zIG51bGwgaWYgbm8KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBSZXNvbHZlSW5mbyBvYmplY3QgY29udGFpbmluZyB0aGUgZmluYWwgYWN0aXZpdHkgaW50ZW50CisgICAgICogICAgICAgICB0aGF0IHdhcyBkZXRlcm1pbmVkIHRvIGJlIHRoZSBiZXN0IGFjdGlvbi4gIFJldHVybnMgbnVsbCBpZiBubwogICAgICAqICAgICAgICAgbWF0Y2hpbmcgYWN0aXZpdHkgd2FzIGZvdW5kLiBJZiBtdWx0aXBsZSBtYXRjaGluZyBhY3Rpdml0aWVzIGFyZQotICAgICAqICAgICAgICAgZm91bmQgYW5kIHRoZXJlIGlzIG5vIGRlZmF1bHQgc2V0LCByZXR1cm5zIGEgUmVzb2x2ZUluZm8KKyAgICAgKiAgICAgICAgIGZvdW5kIGFuZCB0aGVyZSBpcyBubyBkZWZhdWx0IHNldCwgcmV0dXJucyBhIFJlc29sdmVJbmZvIG9iamVjdAogICAgICAqICAgICAgICAgY29udGFpbmluZyBzb21ldGhpbmcgZWxzZSwgc3VjaCBhcyB0aGUgYWN0aXZpdHkgcmVzb2x2ZXIuCiAgICAgICoKLSAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKLSAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgUmVzb2x2ZUluZm8gcmVzb2x2ZUFjdGl2aXR5KEludGVudCBpbnRlbnQsIGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IFJlc29sdmVJbmZvIHJlc29sdmVBY3Rpdml0eShJbnRlbnQgaW50ZW50LCBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHRoZSBiZXN0IGFjdGlvbiB0byBwZXJmb3JtIGZvciBhIGdpdmVuIEludGVudCBmb3IgYSBnaXZlbiB1c2VyLiBUaGlzCkBAIC0zMDEwLDcyICszNDAzLDExNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGludGVudCBBbiBpbnRlbnQgY29udGFpbmluZyBhbGwgb2YgdGhlIGRlc2lyZWQgc3BlY2lmaWNhdGlvbgogICAgICAqICAgICAgICAgICAgICAgKGFjdGlvbiwgZGF0YSwgdHlwZSwgY2F0ZWdvcnksIGFuZC9vciBjb21wb25lbnQpLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFRoZSBtb3N0IGltcG9ydGFudCBpcwotICAgICAqIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gdG8gb25seQotICAgICAqIHRob3NlIGFjdGl2aXRpZXMgdGhhdCBzdXBwb3J0IHRoZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkludGVudCNDQVRFR09SWV9ERUZBVUxUfS4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLiBUaGUgbW9zdCBpbXBvcnRhbnQgaXMKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gdG8gb25seQorICAgICAqICAgICAgICAgdGhvc2UgYWN0aXZpdGllcyB0aGF0IHN1cHBvcnQgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0NBVEVHT1JZX0RFRkFVTFR9LgogICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBSZXNvbHZlSW5mbyBjb250YWluaW5nIHRoZSBmaW5hbCBhY3Rpdml0eSBpbnRlbnQgdGhhdAotICAgICAqICAgICAgICAgd2FzIGRldGVybWluZWQgdG8gYmUgdGhlIGJlc3QgYWN0aW9uLiAgUmV0dXJucyBudWxsIGlmIG5vCisgICAgICogQHJldHVybiBSZXR1cm5zIGEgUmVzb2x2ZUluZm8gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGZpbmFsIGFjdGl2aXR5IGludGVudAorICAgICAqICAgICAgICAgdGhhdCB3YXMgZGV0ZXJtaW5lZCB0byBiZSB0aGUgYmVzdCBhY3Rpb24uICBSZXR1cm5zIG51bGwgaWYgbm8KICAgICAgKiAgICAgICAgIG1hdGNoaW5nIGFjdGl2aXR5IHdhcyBmb3VuZC4gSWYgbXVsdGlwbGUgbWF0Y2hpbmcgYWN0aXZpdGllcyBhcmUKLSAgICAgKiAgICAgICAgIGZvdW5kIGFuZCB0aGVyZSBpcyBubyBkZWZhdWx0IHNldCwgcmV0dXJucyBhIFJlc29sdmVJbmZvCisgICAgICogICAgICAgICBmb3VuZCBhbmQgdGhlcmUgaXMgbm8gZGVmYXVsdCBzZXQsIHJldHVybnMgYSBSZXNvbHZlSW5mbyBvYmplY3QKICAgICAgKiAgICAgICAgIGNvbnRhaW5pbmcgc29tZXRoaW5nIGVsc2UsIHN1Y2ggYXMgdGhlIGFjdGl2aXR5IHJlc29sdmVyLgogICAgICAqCi0gICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBSZXNvbHZlSW5mbyByZXNvbHZlQWN0aXZpdHlBc1VzZXIoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgUmVzb2x2ZUluZm8gcmVzb2x2ZUFjdGl2aXR5QXNVc2VyKEludGVudCBpbnRlbnQsIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncywKKyAgICAgICAgICAgIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgYWN0aXZpdGllcyB0aGF0IGNhbiBiZSBwZXJmb3JtZWQgZm9yIHRoZSBnaXZlbiBpbnRlbnQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gaW50ZW50IFRoZSBkZXNpcmVkIGludGVudCBhcyBwZXIgcmVzb2x2ZUFjdGl2aXR5KCkuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgVGhlIG1vc3QgaW1wb3J0YW50IGlzCi0gICAgICoge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB0byBsaW1pdCB0aGUgcmVzb2x1dGlvbiB0byBvbmx5Ci0gICAgICogdGhvc2UgYWN0aXZpdGllcyB0aGF0IHN1cHBvcnQgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0NBVEVHT1JZX0RFRkFVTFR9LgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfUkVTT0xWRURfRklMVEVSfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNNQVRDSF9BTEx9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0sIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuIFRoZSBtb3N0IGltcG9ydGFudCBpcworICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB0byBsaW1pdCB0aGUgcmVzb2x1dGlvbiB0byBvbmx5CisgICAgICogICAgICAgICB0aG9zZSBhY3Rpdml0aWVzIHRoYXQgc3VwcG9ydCB0aGUge0BsaW5rIGFuZHJvaWQuY29udGVudC5JbnRlbnQjQ0FURUdPUllfREVGQVVMVH0uCisgICAgICogICAgICAgICBPciwgc2V0IHtAbGluayAjTUFUQ0hfQUxMfSB0byBwcmV2ZW50IGFueSBmaWx0ZXJpbmcgb2YgdGhlIHJlc3VsdHMuCiAgICAgICoKLSAgICAgKiBZb3UgY2FuIGFsc28gc2V0IHtAbGluayAjTUFUQ0hfQUxMfSBmb3IgcHJldmVudGluZyB0aGUgZmlsdGVyaW5nIG9mIHRoZSByZXN1bHRzLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhIExpc3Qgb2YgUmVzb2x2ZUluZm8gb2JqZWN0cyBjb250YWluaW5nIG9uZSBlbnRyeSBmb3IgZWFjaAorICAgICAqICAgICAgICAgbWF0Y2hpbmcgYWN0aXZpdHksIG9yZGVyZWQgZnJvbSBiZXN0IHRvIHdvcnN0LiBJbiBvdGhlciB3b3JkcywgdGhlCisgICAgICogICAgICAgICBmaXJzdCBpdGVtIGlzIHdoYXQgd291bGQgYmUgcmV0dXJuZWQgYnkge0BsaW5rICNyZXNvbHZlQWN0aXZpdHl9LgorICAgICAqICAgICAgICAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGFjdGl2aXRpZXMsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIEEgTGlzdCZsdDtSZXNvbHZlSW5mbyZndDsgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2ggbWF0Y2hpbmcKLSAgICAgKiAgICAgICAgIEFjdGl2aXR5LiBUaGVzZSBhcmUgb3JkZXJlZCBmcm9tIGJlc3QgdG8gd29yc3QgbWF0Y2ggLS0gdGhhdAotICAgICAqICAgICAgICAgaXMsIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0IGlzIHdoYXQgaXMgcmV0dXJuZWQgYnkKLSAgICAgKiAgICAgICAgIHtAbGluayAjcmVzb2x2ZUFjdGl2aXR5fS4gIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBhY3Rpdml0aWVzLCBhbiBlbXB0eQotICAgICAqICAgICAgICAgbGlzdCBpcyByZXR1cm5lZC4KLSAgICAgKgotICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQotICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUworICAgICAqIEBzZWUgI0dFVF9NRVRBX0RBVEEKICAgICAgKiBAc2VlICNHRVRfUkVTT0xWRURfRklMVEVSCisgICAgICogQHNlZSAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTCisgICAgICogQHNlZSAjTUFUQ0hfQUxMCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUworICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfU1lTVEVNX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUwogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudEFjdGl2aXRpZXMoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGludCBmbGFncyk7CisgICAgICAgICAgICBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIGFjdGl2aXRpZXMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkIGZvciB0aGUgZ2l2ZW4gaW50ZW50LCBmb3IgYSBzcGVjaWZpYyB1c2VyLgogICAgICAqCiAgICAgICogQHBhcmFtIGludGVudCBUaGUgZGVzaXJlZCBpbnRlbnQgYXMgcGVyIHJlc29sdmVBY3Rpdml0eSgpLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIFRoZSBtb3N0IGltcG9ydGFudCBpcwotICAgICAqIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gdG8gb25seQotICAgICAqIHRob3NlIGFjdGl2aXRpZXMgdGhhdCBzdXBwb3J0IHRoZSB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkludGVudCNDQVRFR09SWV9ERUZBVUxUfS4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLiBUaGUgbW9zdCBpbXBvcnRhbnQgaXMKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwgdG8gbGltaXQgdGhlIHJlc29sdXRpb24gdG8gb25seQorICAgICAqICAgICAgICAgdGhvc2UgYWN0aXZpdGllcyB0aGF0IHN1cHBvcnQgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0NBVEVHT1JZX0RFRkFVTFR9LgorICAgICAqICAgICAgICAgT3IsIHNldCB7QGxpbmsgI01BVENIX0FMTH0gdG8gcHJldmVudCBhbnkgZmlsdGVyaW5nIG9mIHRoZSByZXN1bHRzLgogICAgICAqCi0gICAgICogWW91IGNhbiBhbHNvIHNldCB7QGxpbmsgI01BVENIX0FMTH0gZm9yIHByZXZlbnRpbmcgdGhlIGZpbHRlcmluZyBvZiB0aGUgcmVzdWx0cy4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBMaXN0IG9mIFJlc29sdmVJbmZvIG9iamVjdHMgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2gKKyAgICAgKiAgICAgICAgIG1hdGNoaW5nIGFjdGl2aXR5LCBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdC4gSW4gb3RoZXIgd29yZHMsIHRoZQorICAgICAqICAgICAgICAgZmlyc3QgaXRlbSBpcyB3aGF0IHdvdWxkIGJlIHJldHVybmVkIGJ5IHtAbGluayAjcmVzb2x2ZUFjdGl2aXR5fS4KKyAgICAgKiAgICAgICAgIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBhY3Rpdml0aWVzLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7UmVzb2x2ZUluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIG1hdGNoaW5nCi0gICAgICogICAgICAgICBBY3Rpdml0eS4gVGhlc2UgYXJlIG9yZGVyZWQgZnJvbSBiZXN0IHRvIHdvcnN0IG1hdGNoIC0tIHRoYXQKLSAgICAgKiAgICAgICAgIGlzLCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpcyB3aGF0IGlzIHJldHVybmVkIGJ5Ci0gICAgICogICAgICAgICB7QGxpbmsgI3Jlc29sdmVBY3Rpdml0eX0uICBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgYWN0aXZpdGllcywgYW4gZW1wdHkKLSAgICAgKiAgICAgICAgIGxpc3QgaXMgcmV0dXJuZWQuCi0gICAgICoKLSAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKLSAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKKyAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5SW50ZW50QWN0aXZpdGllc0FzVXNlcihJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKLQorICAgICAgICAgICAgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYSBzZXQgb2YgYWN0aXZpdGllcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgYXMKQEAgLTMwOTEsMTU4ICszNTI5LDM1OSBAQAogICAgICAqIEBwYXJhbSBzcGVjaWZpY3MgQW4gYXJyYXkgb2YgSW50ZW50cyB0aGF0IHNob3VsZCBiZSByZXNvbHZlZCB0byB0aGUKICAgICAgKiAgICAgICAgICAgICAgICAgIGZpcnN0IHNwZWNpZmljIHJlc3VsdHMuICBDYW4gYmUgbnVsbC4KICAgICAgKiBAcGFyYW0gaW50ZW50IFRoZSBkZXNpcmVkIGludGVudCBhcyBwZXIgcmVzb2x2ZUFjdGl2aXR5KCkuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgVGhlIG1vc3QgaW1wb3J0YW50IGlzCi0gICAgICoge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB0byBsaW1pdCB0aGUgcmVzb2x1dGlvbiB0byBvbmx5Ci0gICAgICogdGhvc2UgYWN0aXZpdGllcyB0aGF0IHN1cHBvcnQgdGhlIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuSW50ZW50I0NBVEVHT1JZX0RFRkFVTFR9LgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfUkVTT0xWRURfRklMVEVSfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNNQVRDSF9BTEx9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0sIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuIFRoZSBtb3N0IGltcG9ydGFudCBpcworICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB0byBsaW1pdCB0aGUgcmVzb2x1dGlvbiB0byBvbmx5CisgICAgICogICAgICAgICB0aG9zZSBhY3Rpdml0aWVzIHRoYXQgc3VwcG9ydCB0aGUge0BsaW5rIGFuZHJvaWQuY29udGVudC5JbnRlbnQjQ0FURUdPUllfREVGQVVMVH0uCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIEEgTGlzdCZsdDtSZXNvbHZlSW5mbyZndDsgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2ggbWF0Y2hpbmcKLSAgICAgKiAgICAgICAgIEFjdGl2aXR5LiBUaGVzZSBhcmUgb3JkZXJlZCBmaXJzdCBieSBhbGwgb2YgdGhlIGludGVudHMgcmVzb2x2ZWQKKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBMaXN0IG9mIFJlc29sdmVJbmZvIG9iamVjdHMgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2gKKyAgICAgKiAgICAgICAgIG1hdGNoaW5nIGFjdGl2aXR5LiBUaGUgbGlzdCBpcyBvcmRlcmVkIGZpcnN0IGJ5IGFsbCBvZiB0aGUgaW50ZW50cyByZXNvbHZlZAogICAgICAqICAgICAgICAgaW4gPHZhcj5zcGVjaWZpY3M8L3Zhcj4gYW5kIHRoZW4gYW55IGFkZGl0aW9uYWwgYWN0aXZpdGllcyB0aGF0CiAgICAgICogICAgICAgICBjYW4gaGFuZGxlIDx2YXI+aW50ZW50PC92YXI+IGJ1dCBkaWQgbm90IGdldCBpbmNsdWRlZCBieSBvbmUgb2YKICAgICAgKiAgICAgICAgIHRoZSA8dmFyPnNwZWNpZmljczwvdmFyPiBpbnRlbnRzLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nCiAgICAgICogICAgICAgICBhY3Rpdml0aWVzLCBhbiBlbXB0eSBsaXN0IGlzIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5SW50ZW50QWN0aXZpdHlPcHRpb25zKAotICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjYWxsZXIsIEludGVudFtdIHNwZWNpZmljcywgSW50ZW50IGludGVudCwgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY2FsbGVyLCBJbnRlbnRbXSBzcGVjaWZpY3MsIEludGVudCBpbnRlbnQsIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgcmVjZWl2ZXJzIHRoYXQgY2FuIGhhbmRsZSBhIGJyb2FkY2FzdCBvZiB0aGUgZ2l2ZW4gaW50ZW50LgogICAgICAqCiAgICAgICogQHBhcmFtIGludGVudCBUaGUgZGVzaXJlZCBpbnRlbnQgYXMgcGVyIHJlc29sdmVBY3Rpdml0eSgpLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7UmVzb2x2ZUluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIG1hdGNoaW5nCi0gICAgICogICAgICAgICBSZWNlaXZlci4gVGhlc2UgYXJlIG9yZGVyZWQgZnJvbSBmaXJzdCB0byBsYXN0IGluIHByaW9yaXR5LiAgSWYKLSAgICAgKiAgICAgICAgIHRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNlaXZlcnMsIGFuIGVtcHR5IGxpc3QgaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiBSZXR1cm5zIGEgTGlzdCBvZiBSZXNvbHZlSW5mbyBvYmplY3RzIGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoCisgICAgICogICAgICAgICBtYXRjaGluZyByZWNlaXZlciwgb3JkZXJlZCBmcm9tIGJlc3QgdG8gd29yc3QuIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZworICAgICAqICAgICAgICAgcmVjZWl2ZXJzLCBhbiBlbXB0eSBsaXN0IG9yIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKLSAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGludCBmbGFncyk7CisgICAgICAgICAgICBAUmVzb2x2ZUluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIHJlY2VpdmVycyB0aGF0IGNhbiBoYW5kbGUgYSBicm9hZGNhc3Qgb2YgdGhlIGdpdmVuIGludGVudCwgZm9yIGEgc3BlY2lmaWMKICAgICAgKiB1c2VyLgogICAgICAqCiAgICAgICogQHBhcmFtIGludGVudCBUaGUgZGVzaXJlZCBpbnRlbnQgYXMgcGVyIHJlc29sdmVBY3Rpdml0eSgpLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgogICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXJJZCBvZiB0aGUgdXNlciBiZWluZyBxdWVyaWVkLgogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7UmVzb2x2ZUluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIG1hdGNoaW5nCi0gICAgICogICAgICAgICBSZWNlaXZlci4gVGhlc2UgYXJlIG9yZGVyZWQgZnJvbSBmaXJzdCB0byBsYXN0IGluIHByaW9yaXR5LiAgSWYKLSAgICAgKiAgICAgICAgIHRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNlaXZlcnMsIGFuIGVtcHR5IGxpc3Qgb3Ige0Bjb2RlIG51bGx9IGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhIExpc3Qgb2YgUmVzb2x2ZUluZm8gb2JqZWN0cyBjb250YWluaW5nIG9uZSBlbnRyeSBmb3IgZWFjaAorICAgICAqICAgICAgICAgbWF0Y2hpbmcgcmVjZWl2ZXIsIG9yZGVyZWQgZnJvbSBiZXN0IHRvIHdvcnN0LiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcKKyAgICAgKiAgICAgICAgIHJlY2VpdmVycywgYW4gZW1wdHkgbGlzdCBvciBudWxsIGlzIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoSW50ZW50IGludGVudCwKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncywgQFVzZXJJZEludCBpbnQgdXNlcklkKTsKKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnMoSW50ZW50IGludGVudCwKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncywgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CisgICAgICAgIExvZy53KFRBRywgIlNUQUhQIFVTSU5HIEhJRERFTiBBUElTIEtUSFgiKTsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzQXNVc2VyKGludGVudCwgZmxhZ3MsIHVzZXJJZCk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIHRoZSBiZXN0IHNlcnZpY2UgdG8gaGFuZGxlIGZvciBhIGdpdmVuIEludGVudC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbnRlbnQgQW4gaW50ZW50IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkZXNpcmVkIHNwZWNpZmljYXRpb24KICAgICAgKiAgICAgICAgICAgICAgIChhY3Rpb24sIGRhdGEsIHR5cGUsIGNhdGVnb3J5LCBhbmQvb3IgY29tcG9uZW50KS4KLSAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuCisgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9SRVNPTFZFRF9GSUxURVJ9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LCB7QGxpbmsgI01BVENIX0FMTH0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFN9LCB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0RFRkFVTFRfT05MWX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkV9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfSwge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhIFJlc29sdmVJbmZvIGNvbnRhaW5pbmcgdGhlIGZpbmFsIHNlcnZpY2UgaW50ZW50IHRoYXQKLSAgICAgKiAgICAgICAgIHdhcyBkZXRlcm1pbmVkIHRvIGJlIHRoZSBiZXN0IGFjdGlvbi4gIFJldHVybnMgbnVsbCBpZiBubworICAgICAqIEByZXR1cm4gUmV0dXJucyBhIFJlc29sdmVJbmZvIG9iamVjdCBjb250YWluaW5nIHRoZSBmaW5hbCBzZXJ2aWNlIGludGVudAorICAgICAqICAgICAgICAgdGhhdCB3YXMgZGV0ZXJtaW5lZCB0byBiZSB0aGUgYmVzdCBhY3Rpb24uICBSZXR1cm5zIG51bGwgaWYgbm8KICAgICAgKiAgICAgICAgIG1hdGNoaW5nIHNlcnZpY2Ugd2FzIGZvdW5kLgogICAgICAqCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKEludGVudCBpbnRlbnQsIGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IFJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKEludGVudCBpbnRlbnQsIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgc2VydmljZXMgdGhhdCBjYW4gbWF0Y2ggdGhlIGdpdmVuIGludGVudC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbnRlbnQgVGhlIGRlc2lyZWQgaW50ZW50IGFzIHBlciByZXNvbHZlU2VydmljZSgpLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7UmVzb2x2ZUluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIG1hdGNoaW5nCi0gICAgICogICAgICAgICBTZXJ2aWNlSW5mby4gVGhlc2UgYXJlIG9yZGVyZWQgZnJvbSBiZXN0IHRvIHdvcnN0IG1hdGNoIC0tIHRoYXQKLSAgICAgKiAgICAgICAgIGlzLCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCBpcyB3aGF0IGlzIHJldHVybmVkIGJ5Ci0gICAgICogICAgICAgICByZXNvbHZlU2VydmljZSgpLiAgSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHNlcnZpY2VzLCBhbiBlbXB0eQotICAgICAqICAgICAgICAgbGlzdCBvciB7QGNvZGUgbnVsbH0gaXMgcmV0dXJuZWQuCisgICAgICogQHJldHVybiBSZXR1cm5zIGEgTGlzdCBvZiBSZXNvbHZlSW5mbyBvYmplY3RzIGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoCisgICAgICogICAgICAgICBtYXRjaGluZyBzZXJ2aWNlLCBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdC4gSW4gb3RoZXIgd29yZHMsIHRoZSBmaXJzdAorICAgICAqICAgICAgICAgaXRlbSBpcyB3aGF0IHdvdWxkIGJlIHJldHVybmVkIGJ5IHtAbGluayAjcmVzb2x2ZVNlcnZpY2V9LiBJZiB0aGVyZSBhcmUKKyAgICAgKiAgICAgICAgIG5vIG1hdGNoaW5nIHNlcnZpY2VzLCBhbiBlbXB0eSBsaXN0IG9yIG51bGwgaXMgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAc2VlICNHRVRfSU5URU5UX0ZJTFRFUlMKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICogQHNlZSAjR0VUX1JFU09MVkVEX0ZJTFRFUgorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ERUZBVUxUX09OTFkKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRTZXJ2aWNlcyhJbnRlbnQgaW50ZW50LAotICAgICAgICAgICAgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncyk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBhbGwgc2VydmljZXMgdGhhdCBjYW4gbWF0Y2ggdGhlIGdpdmVuIGludGVudCBmb3IgYSBnaXZlbiB1c2VyLgogICAgICAqCiAgICAgICogQHBhcmFtIGludGVudCBUaGUgZGVzaXJlZCBpbnRlbnQgYXMgcGVyIHJlc29sdmVTZXJ2aWNlKCkuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfUkVTT0xWRURfRklMVEVSfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNNQVRDSF9BTEx9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0sIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBpZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gQSBMaXN0Jmx0O1Jlc29sdmVJbmZvJmd0OyBjb250YWluaW5nIG9uZSBlbnRyeSBmb3IgZWFjaCBtYXRjaGluZwotICAgICAqICAgICAgICAgU2VydmljZUluZm8uIFRoZXNlIGFyZSBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdCBtYXRjaCAtLSB0aGF0Ci0gICAgICogICAgICAgICBpcywgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QgaXMgd2hhdCBpcyByZXR1cm5lZCBieQotICAgICAqICAgICAgICAgcmVzb2x2ZVNlcnZpY2UoKS4gIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBzZXJ2aWNlcywgYW4gZW1wdHkKLSAgICAgKiAgICAgICAgIGxpc3Qgb3Ige0Bjb2RlIG51bGx9IGlzIHJldHVybmVkLgorICAgICAqIEByZXR1cm4gUmV0dXJucyBhIExpc3Qgb2YgUmVzb2x2ZUluZm8gb2JqZWN0cyBjb250YWluaW5nIG9uZSBlbnRyeSBmb3IgZWFjaAorICAgICAqICAgICAgICAgbWF0Y2hpbmcgc2VydmljZSwgb3JkZXJlZCBmcm9tIGJlc3QgdG8gd29yc3QuIEluIG90aGVyIHdvcmRzLCB0aGUgZmlyc3QKKyAgICAgKiAgICAgICAgIGl0ZW0gaXMgd2hhdCB3b3VsZCBiZSByZXR1cm5lZCBieSB7QGxpbmsgI3Jlc29sdmVTZXJ2aWNlfS4gSWYgdGhlcmUgYXJlCisgICAgICogICAgICAgICBubyBtYXRjaGluZyBzZXJ2aWNlcywgYW4gZW1wdHkgbGlzdCBvciBudWxsIGlzIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudFNlcnZpY2VzQXNVc2VyKEludGVudCBpbnRlbnQsCi0gICAgICAgICAgICBpbnQgZmxhZ3MsIGludCB1c2VySWQpOwotCi0gICAgLyoqIHtAaGlkZX0gKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzQXNVc2VyKAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICAgICAgICAgIEBSZXNvbHZlSW5mb0ZsYWdzIGludCBmbGFncywgQFVzZXJJZEludCBpbnQgdXNlcklkKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIGFsbCBwcm92aWRlcnMgdGhhdCBjYW4gbWF0Y2ggdGhlIGdpdmVuIGludGVudC4KICAgICAgKgogICAgICAqIEBwYXJhbSBpbnRlbnQgQW4gaW50ZW50IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBkZXNpcmVkIHNwZWNpZmljYXRpb24KICAgICAgKiAgICAgICAgICAgIChhY3Rpb24sIGRhdGEsIHR5cGUsIGNhdGVnb3J5LCBhbmQvb3IgY29tcG9uZW50KS4KLSAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7UmVzb2x2ZUluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoIG1hdGNoaW5nCi0gICAgICogICAgICAgICBQcm92aWRlckluZm8uIFRoZXNlIGFyZSBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdCBtYXRjaC4gSWYKLSAgICAgKiAgICAgICAgIHRoZXJlIGFyZSBubyBtYXRjaGluZyBwcm92aWRlcnMsIGFuIGVtcHR5IGxpc3Qgb3Ige0Bjb2RlIG51bGx9IGlzIHJldHVybmVkLgotICAgICAqIEBzZWUgI0dFVF9JTlRFTlRfRklMVEVSUwotICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzKEludGVudCBpbnRlbnQsIGludCBmbGFncyk7Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGEgc2luZ2xlIGNvbnRlbnQgcHJvdmlkZXIgYnkgaXRzIGJhc2UgcGF0aCBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyIHRvIGZpbmQuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgQ3VycmVudGx5IHNob3VsZCBhbHdheXMgYmUgMC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gQ29udGVudFByb3ZpZGVySW5mbyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvdmlkZXIsIGlmIGZvdW5kLAotICAgICAqICAgICAgICAgZWxzZSBudWxsLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBQcm92aWRlckluZm8gcmVzb2x2ZUNvbnRlbnRQcm92aWRlcihTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgIGludCBmbGFncyk7Ci0KLSAgICAvKioKLSAgICAgKiBGaW5kIGEgc2luZ2xlIGNvbnRlbnQgcHJvdmlkZXIgYnkgaXRzIGJhc2UgcGF0aCBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyIHRvIGZpbmQuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgQ3VycmVudGx5IHNob3VsZCBhbHdheXMgYmUgMC4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1JFU09MVkVEX0ZJTFRFUn0sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sIHtAbGluayAjTUFUQ0hfQUxMfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9LCB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgogICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIENvbnRlbnRQcm92aWRlckluZm8gSW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3ZpZGVyLCBpZiBmb3VuZCwKLSAgICAgKiAgICAgICAgIGVsc2UgbnVsbC4KKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBMaXN0IG9mIFJlc29sdmVJbmZvIG9iamVjdHMgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2gKKyAgICAgKiAgICAgICAgIG1hdGNoaW5nIHByb3ZpZGVyLCBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdC4gSWYgdGhlcmUgYXJlIG5vCisgICAgICogICAgICAgICBtYXRjaGluZyBzZXJ2aWNlcywgYW4gZW1wdHkgbGlzdCBvciBudWxsIGlzIHJldHVybmVkLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQorICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBQcm92aWRlckluZm8gcmVzb2x2ZUNvbnRlbnRQcm92aWRlckFzVXNlcihTdHJpbmcgbmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzQXNVc2VyKAorICAgICAgICAgICAgSW50ZW50IGludGVudCwgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySWQpOworCisgICAgLyoqCisgICAgICogUmV0cmlldmUgYWxsIHByb3ZpZGVycyB0aGF0IGNhbiBtYXRjaCB0aGUgZ2l2ZW4gaW50ZW50LgorICAgICAqCisgICAgICogQHBhcmFtIGludGVudCBBbiBpbnRlbnQgY29udGFpbmluZyBhbGwgb2YgdGhlIGRlc2lyZWQgc3BlY2lmaWNhdGlvbgorICAgICAqICAgICAgICAgICAgKGFjdGlvbiwgZGF0YSwgdHlwZSwgY2F0ZWdvcnksIGFuZC9vciBjb21wb25lbnQpLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwge0BsaW5rICNHRVRfUkVTT0xWRURfRklMVEVSfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNNQVRDSF9BTEx9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFfSwge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9TWVNURU1fT05MWX0sIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFJldHVybnMgYSBMaXN0IG9mIFJlc29sdmVJbmZvIG9iamVjdHMgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2gKKyAgICAgKiAgICAgICAgIG1hdGNoaW5nIHByb3ZpZGVyLCBvcmRlcmVkIGZyb20gYmVzdCB0byB3b3JzdC4gSWYgdGhlcmUgYXJlIG5vCisgICAgICogICAgICAgICBtYXRjaGluZyBzZXJ2aWNlcywgYW4gZW1wdHkgbGlzdCBvciBudWxsIGlzIHJldHVybmVkLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQorICAgICAqIEBzZWUgI0dFVF9SRVNPTFZFRF9GSUxURVIKKyAgICAgKiBAc2VlICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVMKKyAgICAgKiBAc2VlICNNQVRDSF9BTEwKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfREVGQVVMVF9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgKiBAc2VlICNNQVRDSF9TWVNURU1fT05MWQorICAgICAqIEBzZWUgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5SW50ZW50Q29udGVudFByb3ZpZGVycyhJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgQFJlc29sdmVJbmZvRmxhZ3MgaW50IGZsYWdzKTsKKworICAgIC8qKgorICAgICAqIEZpbmQgYSBzaW5nbGUgY29udGVudCBwcm92aWRlciBieSBpdHMgYmFzZSBwYXRoIG5hbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvdmlkZXIgdG8gZmluZC4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0sIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfQUxMfSwge0BsaW5rICNNQVRDSF9ERUZBVUxUX09OTFl9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRX0sIHtAbGluayAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRX0sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRX0sIHtAbGluayAjTUFUQ0hfU1lTVEVNX09OTFl9CisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqCisgICAgICogQHJldHVybiBBIHtAbGluayBQcm92aWRlckluZm99IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm92aWRlci4KKyAgICAgKiAgICAgICAgIElmIGEgcHJvdmlkZXIgd2FzIG5vdCBmb3VuZCwgcmV0dXJucyBudWxsLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORworICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3QgUHJvdmlkZXJJbmZvIHJlc29sdmVDb250ZW50UHJvdmlkZXIoU3RyaW5nIG5hbWUsCisgICAgICAgICAgICBAQ29tcG9uZW50SW5mb0ZsYWdzIGludCBmbGFncyk7CisKKyAgICAvKioKKyAgICAgKiBGaW5kIGEgc2luZ2xlIGNvbnRlbnQgcHJvdmlkZXIgYnkgaXRzIGJhc2UgcGF0aCBuYW1lLgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyIHRvIGZpbmQuCisgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0FMTH0sIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LCB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfQorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KKyAgICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIGlkLgorICAgICAqCisgICAgICogQHJldHVybiBBIHtAbGluayBQcm92aWRlckluZm99IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm92aWRlci4KKyAgICAgKiAgICAgICAgIElmIGEgcHJvdmlkZXIgd2FzIG5vdCBmb3VuZCwgcmV0dXJucyBudWxsLgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORworICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IFByb3ZpZGVySW5mbyByZXNvbHZlQ29udGVudFByb3ZpZGVyQXNVc2VyKFN0cmluZyBuYW1lLAorICAgICAgICAgICAgQENvbXBvbmVudEluZm9GbGFncyBpbnQgZmxhZ3MsIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBjb250ZW50IHByb3ZpZGVyIGluZm9ybWF0aW9uLgpAQCAtMzI1NSwzMyArMzg5NCw1NiBAQAogICAgICAqICAgICAgICAgICAgICAgICAgICBhbGwgY29udGVudCBwcm92aWRlcnMgYXJlIHJldHVybmVkLgogICAgICAqIEBwYXJhbSB1aWQgSWYgPHZhcj5wcm9jZXNzTmFtZTwvdmFyPiBpcyBub24tbnVsbCwgdGhpcyBpcyB0aGUgcmVxdWlyZWQKICAgICAgKiAgICAgICAgdWlkIG93bmluZyB0aGUgcmVxdWVzdGVkIGNvbnRlbnQgcHJvdmlkZXJzLgotICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gIEN1cnJlbnRseSBzaG91bGQgYWx3YXlzIGJlIDAuCisgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LCB7QGxpbmsgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0FMTH0sIHtAbGluayAjTUFUQ0hfREVGQVVMVF9PTkxZfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sICB7QGxpbmsgI01BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UU30sCisgICAgICogICAgICAgICB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkV9LCB7QGxpbmsgI01BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkV9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkV9LCB7QGxpbmsgI01BVENIX1NZU1RFTV9PTkxZfQorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gQSBMaXN0Jmx0O0NvbnRlbnRQcm92aWRlckluZm8mZ3Q7IGNvbnRhaW5pbmcgb25lIGVudHJ5IGZvciBlYWNoCi0gICAgICogICAgICAgICBjb250ZW50IHByb3ZpZGVyIGVpdGhlciBwYXRjaGluZyA8dmFyPnByb2Nlc3NOYW1lPC92YXI+IG9yLCBpZgorICAgICAqIEByZXR1cm4gQSBsaXN0IG9mIHtAbGluayBQcm92aWRlckluZm99IG9iamVjdHMgY29udGFpbmluZyBvbmUgZW50cnkgZm9yCisgICAgICogICAgICAgICBlYWNoIHByb3ZpZGVyIGVpdGhlciBtYXRjaGluZyA8dmFyPnByb2Nlc3NOYW1lPC92YXI+IG9yLCBpZgogICAgICAqICAgICAgICAgPHZhcj5wcm9jZXNzTmFtZTwvdmFyPiBpcyBudWxsLCBhbGwga25vd24gY29udGVudCBwcm92aWRlcnMuCiAgICAgICogICAgICAgICA8ZW0+SWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHByb3ZpZGVycywgbnVsbCBpcyByZXR1cm5lZC48L2VtPgorICAgICAqCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQorICAgICAqIEBzZWUgI0dFVF9TSEFSRURfTElCUkFSWV9GSUxFUworICAgICAqIEBzZWUgI01BVENIX0FMTAorICAgICAqIEBzZWUgI01BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORworICAgICAqIEBzZWUgI01BVENIX0RFRkFVTFRfT05MWQorICAgICAqIEBzZWUgI01BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMKKyAgICAgKiBAc2VlICNNQVRDSF9FTkNSWVBUSU9OX0FXQVJFCisgICAgICogQHNlZSAjTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAqIEBzZWUgI01BVENIX1NZU1RFTV9PTkxZCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KICAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQcm92aWRlckluZm8+IHF1ZXJ5Q29udGVudFByb3ZpZGVycygKLSAgICAgICAgICAgIFN0cmluZyBwcm9jZXNzTmFtZSwgaW50IHVpZCwgaW50IGZsYWdzKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm9jZXNzTmFtZSwgaW50IHVpZCwgQENvbXBvbmVudEluZm9GbGFncyBpbnQgZmxhZ3MpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBrbm93IGFib3V0IGEgcGFydGljdWxhcgogICAgICAqIGluc3RydW1lbnRhdGlvbiBjbGFzcy4KICAgICAgKgotICAgICAqIDxwPlRocm93cyB7QGxpbmsgTmFtZU5vdEZvdW5kRXhjZXB0aW9ufSBpZiBpbnN0cnVtZW50YXRpb24gd2l0aCB0aGUKLSAgICAgKiBnaXZlbiBjbGFzcyBuYW1lIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgc3lzdGVtLgotICAgICAqCiAgICAgICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgZnVsbCBuYW1lIChpLmUuCiAgICAgICogICAgICAgICAgICAgICAgICBjb20uZ29vZ2xlLmFwcHMuY29udGFjdHMuSW5zdHJ1bWVudExpc3QpIG9mIGFuCiAgICAgICogICAgICAgICAgICAgICAgICBJbnN0cnVtZW50YXRpb24gY2xhc3MuCi0gICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiAgQ3VycmVudGx5IHNob3VsZCBhbHdheXMgYmUgMC4KKyAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX01FVEFfREFUQX0KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gSW5zdHJ1bWVudGF0aW9uSW5mbyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAqIEByZXR1cm4gQW4ge0BsaW5rIEluc3RydW1lbnRhdGlvbkluZm99IG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAgICAqICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLgorICAgICAqIEB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGlmIGEgcGFja2FnZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGNhbm5vdCBiZQorICAgICAqICAgICAgICAgICAgIGZvdW5kIG9uIHRoZSBzeXN0ZW0uCisgICAgICoKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbygKLSAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY2xhc3NOYW1lLCBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgcHVibGljIGFic3RyYWN0IEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbyhDb21wb25lbnROYW1lIGNsYXNzTmFtZSwKKyAgICAgICAgICAgIEBJbnN0cnVtZW50YXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgYXZhaWxhYmxlIGluc3RydW1lbnRhdGlvbiBjb2RlLiAgTWF5IGJlIHVzZWQKQEAgLTMyOTEsMTQgKzM5NTMsMTggQEAKICAgICAgKiBAcGFyYW0gdGFyZ2V0UGFja2FnZSBJZiBudWxsLCBhbGwgaW5zdHJ1bWVudGF0aW9uIGlzIHJldHVybmVkOyBvbmx5IHRoZQogICAgICAqICAgICAgICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbiB0YXJnZXRpbmcgdGhpcyBwYWNrYWdlIG5hbWUgaXMKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZC4KLSAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuICBDdXJyZW50bHkgc2hvdWxkIGFsd2F5cyBiZSAwLgorICAgICAqIEBwYXJhbSBmbGFncyBBZGRpdGlvbmFsIG9wdGlvbiBmbGFncy4gVXNlIGFueSBjb21iaW5hdGlvbiBvZgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfTUVUQV9EQVRBfQorICAgICAqICAgICAgICAgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgogICAgICAqCi0gICAgICogQHJldHVybiBBIExpc3QmbHQ7SW5zdHJ1bWVudGF0aW9uSW5mbyZndDsgY29udGFpbmluZyBvbmUgZW50cnkgZm9yIGVhY2gKLSAgICAgKiAgICAgICAgIG1hdGNoaW5nIGF2YWlsYWJsZSBJbnN0cnVtZW50YXRpb24uICBSZXR1cm5zIGFuIGVtcHR5IGxpc3QgaWYKLSAgICAgKiAgICAgICAgIHRoZXJlIGlzIG5vIGluc3RydW1lbnRhdGlvbiBhdmFpbGFibGUgZm9yIHRoZSBnaXZlbiBwYWNrYWdlLgorICAgICAqIEByZXR1cm4gQSBsaXN0IG9mIHtAbGluayBJbnN0cnVtZW50YXRpb25JbmZvfSBvYmplY3RzIGNvbnRhaW5pbmcgb25lCisgICAgICogICAgICAgICBlbnRyeSBmb3IgZWFjaCBtYXRjaGluZyBpbnN0cnVtZW50YXRpb24uIElmIHRoZXJlIGFyZSBubworICAgICAqICAgICAgICAgaW5zdHJ1bWVudGF0aW9uIGF2YWlsYWJsZSwgcmV0dXJucyBhbmQgZW1wdHkgbGlzdC4gCisgICAgICoKKyAgICAgKiBAc2VlICNHRVRfTUVUQV9EQVRBCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IExpc3Q8SW5zdHJ1bWVudGF0aW9uSW5mbz4gcXVlcnlJbnN0cnVtZW50YXRpb24oCi0gICAgICAgICAgICBTdHJpbmcgdGFyZ2V0UGFja2FnZSwgaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxJbnN0cnVtZW50YXRpb25JbmZvPiBxdWVyeUluc3RydW1lbnRhdGlvbihTdHJpbmcgdGFyZ2V0UGFja2FnZSwKKyAgICAgICAgICAgIEBJbnN0cnVtZW50YXRpb25JbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlIGFuIGltYWdlIGZyb20gYSBwYWNrYWdlLiAgVGhpcyBpcyBhIGxvdy1sZXZlbCBBUEkgdXNlZCBieQpAQCAtMzcwMSw4ICs0MzY3LDggQEAKICAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgUmVzb3VyY2VzIGdldFJlc291cmNlc0ZvckFwcGxpY2F0aW9uQXNVc2VyKFN0cmluZyBhcHBQYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkKLSAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CisgICAgcHVibGljIGFic3RyYWN0IFJlc291cmNlcyBnZXRSZXNvdXJjZXNGb3JBcHBsaWNhdGlvbkFzVXNlcihTdHJpbmcgYXBwUGFja2FnZU5hbWUsCisgICAgICAgICAgICBAVXNlcklkSW50IGludCB1c2VySWQpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZSBvdmVyYWxsIGluZm9ybWF0aW9uIGFib3V0IGFuIGFwcGxpY2F0aW9uIHBhY2thZ2UgZGVmaW5lZApAQCAtMzcxMCwzOCArNDM3Niw1NSBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGFyY2hpdmVGaWxlUGF0aCBUaGUgcGF0aCB0byB0aGUgYXJjaGl2ZSBmaWxlCiAgICAgICogQHBhcmFtIGZsYWdzIEFkZGl0aW9uYWwgb3B0aW9uIGZsYWdzLiBVc2UgYW55IGNvbWJpbmF0aW9uIG9mCi0gICAgICoge0BsaW5rICNHRVRfQUNUSVZJVElFU30sCi0gICAgICoge0BsaW5rICNHRVRfR0lEU30sCi0gICAgICoge0BsaW5rICNHRVRfQ09ORklHVVJBVElPTlN9LAotICAgICAqIHtAbGluayAjR0VUX0lOU1RSVU1FTlRBVElPTn0sCi0gICAgICoge0BsaW5rICNHRVRfUEVSTUlTU0lPTlN9LAotICAgICAqIHtAbGluayAjR0VUX1BST1ZJREVSU30sCi0gICAgICoge0BsaW5rICNHRVRfUkVDRUlWRVJTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9TRVJWSUNFU30sCi0gICAgICoge0BsaW5rICNHRVRfU0lHTkFUVVJFU30sIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0FDVElWSVRJRVN9LCB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9HSURTfSwge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0lOVEVOVF9GSUxURVJTfSwge0BsaW5rICNHRVRfTUVUQV9EQVRBfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1BFUk1JU1NJT05TfSwge0BsaW5rICNHRVRfUFJPVklERVJTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1JFQ0VJVkVSU30sIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTfSwge0BsaW5rICNHRVRfU0lHTkFUVVJFU30sCisgICAgICogICAgICAgICB7QGxpbmsgI0dFVF9VUklfUEVSTUlTU0lPTl9QQVRURVJOU30sIHtAbGluayAjR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UU30sIHtAbGluayAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVN9CisgICAgICogICAgICAgICB0byBtb2RpZnkgdGhlIGRhdGEgcmV0dXJuZWQuCiAgICAgICoKLSAgICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlLiBSZXR1cm5zCi0gICAgICogbnVsbCBpZiB0aGUgcGFja2FnZSBjb3VsZCBub3QgYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KKyAgICAgKiBAcmV0dXJuIEEgUGFja2FnZUluZm8gb2JqZWN0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICAgICogICAgICAgICBwYWNrYWdlIGFyY2hpdmUuIElmIHRoZSBwYWNrYWdlIGNvdWxkIG5vdCBiZSBwYXJzZWQsCisgICAgICogICAgICAgICByZXR1cm5zIG51bGwuCiAgICAgICoKICAgICAgKiBAc2VlICNHRVRfQUNUSVZJVElFUwotICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0NPTkZJR1VSQVRJT05TCisgICAgICogQHNlZSAjR0VUX0dJRFMKICAgICAgKiBAc2VlICNHRVRfSU5TVFJVTUVOVEFUSU9OCisgICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9QRVJNSVNTSU9OUwogICAgICAqIEBzZWUgI0dFVF9QUk9WSURFUlMKICAgICAgKiBAc2VlICNHRVRfUkVDRUlWRVJTCiAgICAgICogQHNlZSAjR0VUX1NFUlZJQ0VTCisgICAgICogQHNlZSAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTCiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKKyAgICAgKiBAc2VlICNHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlQXJjaGl2ZUluZm8oU3RyaW5nIGFyY2hpdmVGaWxlUGF0aCwgaW50IGZsYWdzKSB7CisgICAgcHVibGljIFBhY2thZ2VJbmZvIGdldFBhY2thZ2VBcmNoaXZlSW5mbyhTdHJpbmcgYXJjaGl2ZUZpbGVQYXRoLCBAUGFja2FnZUluZm9GbGFncyBpbnQgZmxhZ3MpIHsKICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlciBwYXJzZXIgPSBuZXcgUGFja2FnZVBhcnNlcigpOwogICAgICAgICBmaW5hbCBGaWxlIGFwa0ZpbGUgPSBuZXcgRmlsZShhcmNoaXZlRmlsZVBhdGgpOwogICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKChmbGFncyAmIChNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUgfCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFKSkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIENhbGxlciBleHByZXNzZWQgYW4gZXhwbGljaXQgb3BpbmlvbiBhYm91dCB3aGF0IGVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICAvLyBhd2FyZS91bmF3YXJlIGNvbXBvbmVudHMgdGhleSB3YW50IHRvIHNlZSwgc28gZmFsbCB0aHJvdWdoIGFuZAorICAgICAgICAgICAgICAgIC8vIGdpdmUgdGhlbSB3aGF0IHRoZXkgd2FudAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBDYWxsZXIgZXhwcmVzc2VkIG5vIG9waW5pb24sIHNvIG1hdGNoIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBQYWNrYWdlUGFyc2VyLlBhY2thZ2UgcGtnID0gcGFyc2VyLnBhcnNlTW9ub2xpdGhpY1BhY2thZ2UoYXBrRmlsZSwgMCk7CiAgICAgICAgICAgICBpZiAoKGZsYWdzICYgR0VUX1NJR05BVFVSRVMpICE9IDApIHsKICAgICAgICAgICAgICAgICBwYXJzZXIuY29sbGVjdENlcnRpZmljYXRlcyhwa2csIDApOwotICAgICAgICAgICAgICAgIHBhcnNlci5jb2xsZWN0TWFuaWZlc3REaWdlc3QocGtnKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBhY2thZ2VVc2VyU3RhdGUgc3RhdGUgPSBuZXcgUGFja2FnZVVzZXJTdGF0ZSgpOwogICAgICAgICAgICAgcmV0dXJuIFBhY2thZ2VQYXJzZXIuZ2VuZXJhdGVQYWNrYWdlSW5mbyhwa2csIG51bGwsIGZsYWdzLCAwLCAwLCBudWxsLCBzdGF0ZSk7CkBAIC0zNzUxLDIxNyArNDQzNCw2NCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEBoaWRlIEluc3RhbGwgYSBwYWNrYWdlLiBTaW5jZSB0aGlzIG1heSB0YWtlIGEgbGl0dGxlIHdoaWxlLCB0aGUgcmVzdWx0Ci0gICAgICogICAgICAgd2lsbCBiZSBwb3N0ZWQgYmFjayB0byB0aGUgZ2l2ZW4gb2JzZXJ2ZXIuIEFuIGluc3RhbGxhdGlvbiB3aWxsCi0gICAgICogICAgICAgZmFpbCBpZiB0aGUgY2FsbGluZyBjb250ZXh0IGxhY2tzIHRoZQotICAgICAqICAgICAgIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jSU5TVEFMTF9QQUNLQUdFU30gcGVybWlzc2lvbiwgaWYKLSAgICAgKiAgICAgICB0aGUgcGFja2FnZSBuYW1lZCBpbiB0aGUgcGFja2FnZSBmaWxlJ3MgbWFuaWZlc3QgaXMgYWxyZWFkeQotICAgICAqICAgICAgIGluc3RhbGxlZCwgb3IgaWYgdGhlcmUncyBubyBzcGFjZSBhdmFpbGFibGUgb24gdGhlIGRldmljZS4KLSAgICAgKiBAcGFyYW0gcGFja2FnZVVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgZmlsZSB0byBpbnN0YWxsLiBUaGlzIGNhbgotICAgICAqICAgICAgICAgICAgYmUgYSAnZmlsZTonIG9yIGEgJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlCi0gICAgICogICAgICAgICAgICBpbnN0YWxsYXRpb24gaXMgY29tcGxldGUuCi0gICAgICogICAgICAgICAgICB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIjcGFja2FnZUluc3RhbGxlZChTdHJpbmcsIGludCl9Ci0gICAgICogICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoYXQgaGFwcGVucy4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBub3QgYmUKLSAgICAgKiAgICAgICAgICAgIG51bGwuCi0gICAgICogQHBhcmFtIGZsYWdzIC0gcG9zc2libGUgdmFsdWVzOiB7QGxpbmsgI0lOU1RBTExfRk9SV0FSRF9MT0NLfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjSU5TVEFMTF9SRVBMQUNFX0VYSVNUSU5HfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjSU5TVEFMTF9BTExPV19URVNUfS4KLSAgICAgKiBAcGFyYW0gaW5zdGFsbGVyUGFja2FnZU5hbWUgT3B0aW9uYWwgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICogICAgICAgICAgICBpcyBwZXJmb3JtaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoaXMgaWRlbnRpZmllcyB3aGljaCBtYXJrZXQKLSAgICAgKiAgICAgICAgICAgIHRoZSBwYWNrYWdlIGNhbWUgZnJvbS4KLSAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNpbnN0YWxsUGFja2FnZShVcmksIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCwKLSAgICAgKiAgICAgICAgICAgICBTdHJpbmcpfSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGNvbnRpbnVlIHRvIGJlIHN1cHBvcnRlZAotICAgICAqICAgICAgICAgICAgIGJ1dCB0aGUgb2xkZXIgb2JzZXJ2ZXIgaW50ZXJmYWNlIHdpbGwgbm90IGdldCBhZGRpdGlvbmFsCi0gICAgICogICAgICAgICAgICAgZmFpbHVyZSBkZXRhaWxzLgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayBQYWNrYWdlSW5zdGFsbGVyfQorICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgLy8gQFN5c3RlbUFwaQorICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2UoCi0gICAgICAgICAgICBVcmkgcGFja2FnZVVSSSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywKKyAgICAgICAgICAgIFVyaSBwYWNrYWdlVVJJLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgQEluc3RhbGxGbGFncyBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUpOwogCiAgICAgLyoqCi0gICAgICogU2ltaWxhciB0bwotICAgICAqIHtAbGluayAjaW5zdGFsbFBhY2thZ2UoVXJpLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciwgaW50LCBTdHJpbmcpfSBidXQKLSAgICAgKiB3aXRoIGFuIGV4dHJhIHZlcmlmaWNhdGlvbiBmaWxlIHByb3ZpZGVkLgotICAgICAqCi0gICAgICogQHBhcmFtIHBhY2thZ2VVUkkgVGhlIGxvY2F0aW9uIG9mIHRoZSBwYWNrYWdlIGZpbGUgdG8gaW5zdGFsbC4gVGhpcyBjYW4KLSAgICAgKiAgICAgICAgICAgIGJlIGEgJ2ZpbGU6JyBvciBhICdjb250ZW50OicgVVJJLgotICAgICAqIEBwYXJhbSBvYnNlcnZlciBBbiBvYnNlcnZlciBjYWxsYmFjayB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgcGFja2FnZQotICAgICAqICAgICAgICAgICAgaW5zdGFsbGF0aW9uIGlzIGNvbXBsZXRlLgotICAgICAqICAgICAgICAgICAge0BsaW5rIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyI3BhY2thZ2VJbnN0YWxsZWQoU3RyaW5nLCBpbnQpfQotICAgICAqICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGF0IGhhcHBlbnMuIFRoaXMgcGFyYW1ldGVyIG11c3Qgbm90IGJlCi0gICAgICogICAgICAgICAgICBudWxsLgotICAgICAqIEBwYXJhbSBmbGFncyAtIHBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNJTlNUQUxMX0ZPUldBUkRfTE9DS30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0lOU1RBTExfUkVQTEFDRV9FWElTVElOR30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0lOU1RBTExfQUxMT1dfVEVTVH0uCi0gICAgICogQHBhcmFtIGluc3RhbGxlclBhY2thZ2VOYW1lIE9wdGlvbmFsIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdAotICAgICAqICAgICAgICAgICAgaXMgcGVyZm9ybWluZyB0aGUgaW5zdGFsbGF0aW9uLiBUaGlzIGlkZW50aWZpZXMgd2hpY2ggbWFya2V0Ci0gICAgICogICAgICAgICAgICB0aGUgcGFja2FnZSBjYW1lIGZyb20uCi0gICAgICogQHBhcmFtIHZlcmlmaWNhdGlvblVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHN1cHBsZW1lbnRhcnkgdmVyaWZpY2F0aW9uCi0gICAgICogICAgICAgICAgICBmaWxlLiBUaGlzIGNhbiBiZSBhICdmaWxlOicgb3IgYSAnY29udGVudDonIFVSSS4gTWF5IGJlCi0gICAgICogICAgICAgICAgICB7QGNvZGUgbnVsbH0uCi0gICAgICogQHBhcmFtIG1hbmlmZXN0RGlnZXN0IGFuIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBkaWdlc3Qgb2YgdGhlIHBhY2thZ2UKLSAgICAgKiAgICAgICAgICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSBvd25lcnNoaXAuIE1heSBiZSB7QGNvZGUgbnVsbH0uCi0gICAgICogQHBhcmFtIGVuY3J5cHRpb25QYXJhbXMgaWYgdGhlIHBhY2thZ2UgdG8gYmUgaW5zdGFsbGVkIGlzIGVuY3J5cHRlZCwKLSAgICAgKiAgICAgICAgICAgIHRoZXNlIHBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24KLSAgICAgKiAgICAgICAgICAgIHVzZWQuIE1heSBiZSB7QGNvZGUgbnVsbH0uCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rIFBhY2thZ2VJbnN0YWxsZXJ9CiAgICAgICogQGhpZGUKLSAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpLAotICAgICAqICAgICAgICAgICAgIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCwgU3RyaW5nLCBVcmksIE1hbmlmZXN0RGlnZXN0LAotICAgICAqICAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMpfSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsCi0gICAgICogICAgICAgICAgICAgY29udGludWUgdG8gYmUgc3VwcG9ydGVkIGJ1dCB0aGUgb2xkZXIgb2JzZXJ2ZXIgaW50ZXJmYWNlCi0gICAgICogICAgICAgICAgICAgd2lsbCBub3QgZ2V0IGFkZGl0aW9uYWwgZmFpbHVyZSBkZXRhaWxzLgogICAgICAqLwotICAgIC8vIEBTeXN0ZW1BcGkKKyAgICBARGVwcmVjYXRlZAogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbihVcmkgcGFja2FnZVVSSSwKLSAgICAgICAgICAgIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgIFVyaSB2ZXJpZmljYXRpb25VUkksIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LAotICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKTsKKyAgICAgICAgICAgIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBASW5zdGFsbEZsYWdzIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAorICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKTsKIAogICAgIC8qKgotICAgICAqIFNpbWlsYXIgdG8KLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKFVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCwgU3RyaW5nKX0gYnV0Ci0gICAgICogd2l0aCBhbiBleHRyYSB2ZXJpZmljYXRpb24gaW5mb3JtYXRpb24gcHJvdmlkZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcGFja2FnZVVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgZmlsZSB0byBpbnN0YWxsLiBUaGlzIGNhbgotICAgICAqICAgICAgICAgICAgYmUgYSAnZmlsZTonIG9yIGEgJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlCi0gICAgICogICAgICAgICAgICBpbnN0YWxsYXRpb24gaXMgY29tcGxldGUuCi0gICAgICogICAgICAgICAgICB7QGxpbmsgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIjcGFja2FnZUluc3RhbGxlZChTdHJpbmcsIGludCl9Ci0gICAgICogICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoYXQgaGFwcGVucy4gVGhpcyBwYXJhbWV0ZXIgbXVzdCBub3QgYmUKLSAgICAgKiAgICAgICAgICAgIG51bGwuCi0gICAgICogQHBhcmFtIGZsYWdzIC0gcG9zc2libGUgdmFsdWVzOiB7QGxpbmsgI0lOU1RBTExfRk9SV0FSRF9MT0NLfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjSU5TVEFMTF9SRVBMQUNFX0VYSVNUSU5HfSwKLSAgICAgKiAgICAgICAgICAgIHtAbGluayAjSU5TVEFMTF9BTExPV19URVNUfS4KLSAgICAgKiBAcGFyYW0gaW5zdGFsbGVyUGFja2FnZU5hbWUgT3B0aW9uYWwgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICogICAgICAgICAgICBpcyBwZXJmb3JtaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoaXMgaWRlbnRpZmllcyB3aGljaCBtYXJrZXQKLSAgICAgKiAgICAgICAgICAgIHRoZSBwYWNrYWdlIGNhbWUgZnJvbS4KLSAgICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uUGFyYW1zIGFuIG9iamVjdCB0aGF0IGhvbGRzIHNpZ25hbCBpbmZvcm1hdGlvbiB0bwotICAgICAqICAgICAgICAgICAgYXNzaXN0IHZlcmlmaWNhdGlvbi4gTWF5IGJlIHtAY29kZSBudWxsfS4KLSAgICAgKiBAcGFyYW0gZW5jcnlwdGlvblBhcmFtcyBpZiB0aGUgcGFja2FnZSB0byBiZSBpbnN0YWxsZWQgaXMgZW5jcnlwdGVkLAotICAgICAqICAgICAgICAgICAgdGhlc2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIHRoZSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbgotICAgICAqICAgICAgICAgICAgdXNlZC4gTWF5IGJlIHtAY29kZSBudWxsfS4KKyAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgUGFja2FnZUluc3RhbGxlcn0KICAgICAgKiBAaGlkZQotICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgI2luc3RhbGxQYWNrYWdlV2l0aFZlcmlmaWNhdGlvbkFuZEVuY3J5cHRpb24oVXJpLAotICAgICAqICAgICAgICAgICAgIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCwgU3RyaW5nLCBWZXJpZmljYXRpb25QYXJhbXMsCi0gICAgICogICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyl9IGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwKLSAgICAgKiAgICAgICAgICAgICBjb250aW51ZSB0byBiZSBzdXBwb3J0ZWQgYnV0IHRoZSBvbGRlciBvYnNlcnZlciBpbnRlcmZhY2UKLSAgICAgKiAgICAgICAgICAgICB3aWxsIG5vdCBnZXQgYWRkaXRpb25hbCBmYWlsdXJlIGRldGFpbHMuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb25BbmRFbmNyeXB0aW9uKFVyaSBwYWNrYWdlVVJJLAotICAgICAgICAgICAgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAotICAgICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHZlcmlmaWNhdGlvblBhcmFtcywKLSAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcyk7Ci0KLSAgICAvLyBQYWNrYWdlLWluc3RhbGwgdmFyaWFudHMgdGhhdCB0YWtlIHRoZSBuZXcsIGV4cGFuZGVkIGZvcm0gb2Ygb2JzZXJ2ZXIgaW50ZXJmYWNlLgotICAgIC8vIE5vdGUgdGhhdCB0aGVzZSAqYWxzbyogdGFrZSB0aGUgb3JpZ2luYWwgb2JzZXJ2ZXIgdHlwZSBhbmQgd2lsbCByZWR1bmRhbnRseQotICAgIC8vIHJlcG9ydCB0aGUgc2FtZSBpbmZvcm1hdGlvbiB0byB0aGF0IG9ic2VydmVyIGlmIHN1cHBsaWVkOyBidXQgaXQgaXMgbm90IHJlcXVpcmVkLgorICAgICAgICAgICAgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIEBJbnN0YWxsRmxhZ3MgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsCisgICAgICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgdmVyaWZpY2F0aW9uUGFyYW1zLCBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpOwogCiAgICAgLyoqCisgICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rIFBhY2thZ2VJbnN0YWxsZXJ9CiAgICAgICogQGhpZGUKLSAgICAgKgotICAgICAqIEluc3RhbGwgYSBwYWNrYWdlLiBTaW5jZSB0aGlzIG1heSB0YWtlIGEgbGl0dGxlIHdoaWxlLCB0aGUgcmVzdWx0IHdpbGwKLSAgICAgKiBiZSBwb3N0ZWQgYmFjayB0byB0aGUgZ2l2ZW4gb2JzZXJ2ZXIuICBBbiBpbnN0YWxsYXRpb24gd2lsbCBmYWlsIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQKLSAgICAgKiBsYWNrcyB0aGUge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNJTlNUQUxMX1BBQ0tBR0VTfSBwZXJtaXNzaW9uLCBpZiB0aGUKLSAgICAgKiBwYWNrYWdlIG5hbWVkIGluIHRoZSBwYWNrYWdlIGZpbGUncyBtYW5pZmVzdCBpcyBhbHJlYWR5IGluc3RhbGxlZCwgb3IgaWYgdGhlcmUncyBubyBzcGFjZQotICAgICAqIGF2YWlsYWJsZSBvbiB0aGUgZGV2aWNlLgotICAgICAqCi0gICAgICogQHBhcmFtIHBhY2thZ2VVUkkgVGhlIGxvY2F0aW9uIG9mIHRoZSBwYWNrYWdlIGZpbGUgdG8gaW5zdGFsbC4gIFRoaXMgY2FuIGJlIGEgJ2ZpbGU6JyBvciBhCi0gICAgICogJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlciNwYWNrYWdlSW5zdGFsbGVkKFN0cmluZywgQnVuZGxlLCBpbnQpfSB3aWxsIGJlCi0gICAgICogY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBUaGlzIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIEBwYXJhbSBmbGFncyAtIHBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNJTlNUQUxMX0ZPUldBUkRfTE9DS30sCi0gICAgICoge0BsaW5rICNJTlNUQUxMX1JFUExBQ0VfRVhJU1RJTkd9LCB7QGxpbmsgI0lOU1RBTExfQUxMT1dfVEVTVH0uCi0gICAgICogQHBhcmFtIGluc3RhbGxlclBhY2thZ2VOYW1lIE9wdGlvbmFsIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBwZXJmb3JtaW5nIHRoZQotICAgICAqIGluc3RhbGxhdGlvbi4gVGhpcyBpZGVudGlmaWVzIHdoaWNoIG1hcmtldCB0aGUgcGFja2FnZSBjYW1lIGZyb20uCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2UoCi0gICAgICAgICAgICBVcmkgcGFja2FnZVVSSSwgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwKLSAgICAgICAgICAgIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lKTsKLQorICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2UoVXJpIHBhY2thZ2VVUkksIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsCisgICAgICAgICAgICBASW5zdGFsbEZsYWdzIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lKTsKIAogICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayBQYWNrYWdlSW5zdGFsbGVyfQogICAgICAqIEBoaWRlCi0gICAgICogSW5zdGFsbCBhIHBhY2thZ2UuIFNpbmNlIHRoaXMgbWF5IHRha2UgYSBsaXR0bGUgd2hpbGUsIHRoZSByZXN1bHQgd2lsbCBiZQotICAgICAqIHBvc3RlZCBiYWNrIHRvIHRoZSBnaXZlbiBvYnNlcnZlci4gQW4gaW5zdGFsbGF0aW9uIHdpbGwgZmFpbCBpZiB0aGUgcGFja2FnZSBuYW1lZAotICAgICAqIGluIHRoZSBwYWNrYWdlIGZpbGUncyBtYW5pZmVzdCBpcyBhbHJlYWR5IGluc3RhbGxlZCwgb3IgaWYgdGhlcmUncyBubyBzcGFjZQotICAgICAqIGF2YWlsYWJsZSBvbiB0aGUgZGV2aWNlLgotICAgICAqIEBwYXJhbSBwYWNrYWdlVVJJIFRoZSBsb2NhdGlvbiBvZiB0aGUgcGFja2FnZSBmaWxlIHRvIGluc3RhbGwuIFRoaXMgY2FuIGJlIGEgJ2ZpbGU6JyBvciBhCi0gICAgICogJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlciNwYWNrYWdlSW5zdGFsbGVkKFN0cmluZywgQnVuZGxlLCBpbnQpfSB3aWxsIGJlCi0gICAgICogY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBUaGlzIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIEBwYXJhbSBmbGFncyAtIHBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNJTlNUQUxMX0ZPUldBUkRfTE9DS30sCi0gICAgICoge0BsaW5rICNJTlNUQUxMX1JFUExBQ0VfRVhJU1RJTkd9LCB7QGxpbmsgI0lOU1RBTExfQUxMT1dfVEVTVH0uCi0gICAgICogQHBhcmFtIGluc3RhbGxlclBhY2thZ2VOYW1lIE9wdGlvbmFsIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBwZXJmb3JtaW5nIHRoZQotICAgICAqIGluc3RhbGxhdGlvbi4gVGhpcyBpZGVudGlmaWVzIHdoaWNoIG1hcmtldCB0aGUgcGFja2FnZSBjYW1lIGZyb20uCi0gICAgICogQHBhcmFtIHVzZXJJZCBUaGUgdXNlciBpZC4KICAgICAgKi8KLSAgICAgQFJlcXVpcmVzUGVybWlzc2lvbihhbnlPZiA9IHsKLSAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uSU5TVEFMTF9QQUNLQUdFUywKLSAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEx9KQotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGluc3RhbGxQYWNrYWdlQXNVc2VyKAotICAgICAgICAgICAgVXJpIHBhY2thZ2VVUkksIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywKLSAgICAgICAgICAgIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsUGFja2FnZUFzVXNlcihVcmkgcGFja2FnZVVSSSwgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwKKyAgICAgICAgICAgIEBJbnN0YWxsRmxhZ3MgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKLSAgICAgKiBTaW1pbGFyIHRvCi0gICAgICoge0BsaW5rICNpbnN0YWxsUGFja2FnZShVcmksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyLCBpbnQsIFN0cmluZyl9IGJ1dAotICAgICAqIHdpdGggYW4gZXh0cmEgdmVyaWZpY2F0aW9uIGZpbGUgcHJvdmlkZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcGFja2FnZVVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgZmlsZSB0byBpbnN0YWxsLiBUaGlzIGNhbgotICAgICAqICAgICAgICAgICAgYmUgYSAnZmlsZTonIG9yIGEgJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlciNwYWNrYWdlSW5zdGFsbGVkKFN0cmluZywgQnVuZGxlLCBpbnQpfSB3aWxsIGJlCi0gICAgICogY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBUaGlzIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIEBwYXJhbSBmbGFncyAtIHBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNJTlNUQUxMX0ZPUldBUkRfTE9DS30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0lOU1RBTExfUkVQTEFDRV9FWElTVElOR30sIHtAbGluayAjSU5TVEFMTF9BTExPV19URVNUfS4KLSAgICAgKiBAcGFyYW0gaW5zdGFsbGVyUGFja2FnZU5hbWUgT3B0aW9uYWwgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICogICAgICAgICAgICBpcyBwZXJmb3JtaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoaXMgaWRlbnRpZmllcyB3aGljaCBtYXJrZXQKLSAgICAgKiAgICAgICAgICAgIHRoZSBwYWNrYWdlIGNhbWUgZnJvbS4KLSAgICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uVVJJIFRoZSBsb2NhdGlvbiBvZiB0aGUgc3VwcGxlbWVudGFyeSB2ZXJpZmljYXRpb24KLSAgICAgKiAgICAgICAgICAgIGZpbGUuIFRoaXMgY2FuIGJlIGEgJ2ZpbGU6JyBvciBhICdjb250ZW50OicgVVJJLiBNYXkgYmUKLSAgICAgKiAgICAgICAgICAgIHtAY29kZSBudWxsfS4KLSAgICAgKiBAcGFyYW0gbWFuaWZlc3REaWdlc3QgYW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGRpZ2VzdCBvZiB0aGUgcGFja2FnZQotICAgICAqICAgICAgICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IG93bmVyc2hpcC4gTWF5IGJlIHtAY29kZSBudWxsfS4KLSAgICAgKiBAcGFyYW0gZW5jcnlwdGlvblBhcmFtcyBpZiB0aGUgcGFja2FnZSB0byBiZSBpbnN0YWxsZWQgaXMgZW5jcnlwdGVkLAotICAgICAqICAgICAgICAgICAgdGhlc2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIHRoZSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbgotICAgICAqICAgICAgICAgICAgdXNlZC4gTWF5IGJlIHtAY29kZSBudWxsfS4KKyAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgUGFja2FnZUluc3RhbGxlcn0KICAgICAgKiBAaGlkZQogICAgICAqLworICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLAotICAgICAgICAgICAgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsCi0gICAgICAgICAgICBVcmkgdmVyaWZpY2F0aW9uVVJJLCBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwKLSAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcyk7CisgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBASW5zdGFsbEZsYWdzIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAorICAgICAgICAgICAgVXJpIHZlcmlmaWNhdGlvblVSSSwgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKTsKIAogICAgIC8qKgotICAgICAqIFNpbWlsYXIgdG8KLSAgICAgKiB7QGxpbmsgI2luc3RhbGxQYWNrYWdlKFVyaSwgSVBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIsIGludCwgU3RyaW5nKX0gYnV0Ci0gICAgICogd2l0aCBhbiBleHRyYSB2ZXJpZmljYXRpb24gaW5mb3JtYXRpb24gcHJvdmlkZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcGFja2FnZVVSSSBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgZmlsZSB0byBpbnN0YWxsLiBUaGlzIGNhbgotICAgICAqICAgICAgICAgICAgYmUgYSAnZmlsZTonIG9yIGEgJ2NvbnRlbnQ6JyBVUkkuCi0gICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgUGFja2FnZUluc3RhbGxPYnNlcnZlciNwYWNrYWdlSW5zdGFsbGVkKFN0cmluZywgQnVuZGxlLCBpbnQpfSB3aWxsIGJlCi0gICAgICogY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBUaGlzIHBhcmFtZXRlciBtdXN0IG5vdCBiZSBudWxsLgotICAgICAqIEBwYXJhbSBmbGFncyAtIHBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNJTlNUQUxMX0ZPUldBUkRfTE9DS30sCi0gICAgICogICAgICAgICAgICB7QGxpbmsgI0lOU1RBTExfUkVQTEFDRV9FWElTVElOR30sIHtAbGluayAjSU5TVEFMTF9BTExPV19URVNUfS4KLSAgICAgKiBAcGFyYW0gaW5zdGFsbGVyUGFja2FnZU5hbWUgT3B0aW9uYWwgcGFja2FnZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0Ci0gICAgICogICAgICAgICAgICBpcyBwZXJmb3JtaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoaXMgaWRlbnRpZmllcyB3aGljaCBtYXJrZXQKLSAgICAgKiAgICAgICAgICAgIHRoZSBwYWNrYWdlIGNhbWUgZnJvbS4KLSAgICAgKiBAcGFyYW0gdmVyaWZpY2F0aW9uUGFyYW1zIGFuIG9iamVjdCB0aGF0IGhvbGRzIHNpZ25hbCBpbmZvcm1hdGlvbiB0bwotICAgICAqICAgICAgICAgICAgYXNzaXN0IHZlcmlmaWNhdGlvbi4gTWF5IGJlIHtAY29kZSBudWxsfS4KLSAgICAgKiBAcGFyYW0gZW5jcnlwdGlvblBhcmFtcyBpZiB0aGUgcGFja2FnZSB0byBiZSBpbnN0YWxsZWQgaXMgZW5jcnlwdGVkLAotICAgICAqICAgICAgICAgICAgdGhlc2UgcGFyYW1ldGVycyBkZXNjcmliaW5nIHRoZSBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbgotICAgICAqICAgICAgICAgICAgdXNlZC4gTWF5IGJlIHtAY29kZSBudWxsfS4KLSAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayBQYWNrYWdlSW5zdGFsbGVyfQogICAgICAqIEBoaWRlCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb25BbmRFbmNyeXB0aW9uKFVyaSBwYWNrYWdlVVJJLAotICAgICAgICAgICAgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsCisgICAgICAgICAgICBQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLCBASW5zdGFsbEZsYWdzIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLAogICAgICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHZlcmlmaWNhdGlvblBhcmFtcywgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKTsKIAogICAgIC8qKgpAQCAtMzk2OSw3ICs0NDk5LDYgQEAKICAgICAgKiBvbiB0aGUgc3lzdGVtIGZvciBvdGhlciB1c2VycywgYWxzbyBpbnN0YWxsIGl0IGZvciB0aGUgY2FsbGluZyB1c2VyLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgLy8gQFN5c3RlbUFwaQogICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgaW5zdGFsbEV4aXN0aW5nUGFja2FnZShTdHJpbmcgcGFja2FnZU5hbWUpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKQEAgLTM5ODAsNyArNDUwOSw3IEBACiAgICAgIEBSZXF1aXJlc1Blcm1pc3Npb24oYW55T2YgPSB7CiAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLklOU1RBTExfUEFDS0FHRVMsCiAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLklOVEVSQUNUX0FDUk9TU19VU0VSU19GVUxMfSkKLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGluc3RhbGxFeGlzdGluZ1BhY2thZ2VBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKQorICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgaW5zdGFsbEV4aXN0aW5nUGFja2FnZUFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIEBVc2VySWRJbnQgaW50IHVzZXJJZCkKICAgICAgICAgICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb247CiAKICAgICAvKioKQEAgLTQwNzgsNyArNDYwNyw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXNBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBAVXNlcklkSW50IGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogQWxsb3cgdG8gY2hhbmdlIHRoZSBzdGF0dXMgb2YgYSBJbnRlbnQgVmVyaWZpY2F0aW9uIHN0YXR1cyBmb3IgYWxsIEludGVudEZpbHRlciBvZiBhbiBBcHAuCkBAIC00MTAwLDggKzQ2MjksOCBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiB1cGRhdGVJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgc3RhdHVzLAotICAgICAgICAgICAgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywKKyAgICAgICAgICAgIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgSW50ZW50RmlsdGVyVmVyaWZpY2F0aW9uSW5mbyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlIGFuZCBVc2VyLgpAQCAtNDE0MSw3ICs0NjcwLDggQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGludCB1c2VySWQpOworICAgIEBUZXN0QXBpCisgICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBTZXQgdGhlIGRlZmF1bHQgQnJvd3NlciBwYWNrYWdlIG5hbWUgZm9yIGEgc3BlY2lmaWMgdXNlci4KQEAgLTQxNTUsNyArNDY4NSw4IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioKICAgICAgKiBDaGFuZ2UgdGhlIGluc3RhbGxlciBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBwYWNrYWdlLiAgVGhlcmUgYXJlIGxpbWl0YXRpb25zCkBAIC00MTc2LDQ1ICs0NzA3LDQ0IEBACiAgICAgICAgICAgICBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUpOwogCiAgICAgLyoqCi0gICAgICogQXR0ZW1wdHMgdG8gZGVsZXRlIGEgcGFja2FnZS4gIFNpbmNlIHRoaXMgbWF5IHRha2UgYSBsaXR0bGUgd2hpbGUsIHRoZSByZXN1bHQgd2lsbAotICAgICAqIGJlIHBvc3RlZCBiYWNrIHRvIHRoZSBnaXZlbiBvYnNlcnZlci4gIEEgZGVsZXRpb24gd2lsbCBmYWlsIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQKLSAgICAgKiBsYWNrcyB0aGUge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNERUxFVEVfUEFDS0FHRVN9IHBlcm1pc3Npb24sIGlmIHRoZQotICAgICAqIG5hbWVkIHBhY2thZ2UgY2Fubm90IGJlIGZvdW5kLCBvciBpZiB0aGUgbmFtZWQgcGFja2FnZSBpcyBhICJzeXN0ZW0gcGFja2FnZSIuCi0gICAgICogKFRPRE86IGluY2x1ZGUgcG9pbnRlciB0byBkb2N1bWVudGF0aW9uIG9uICJzeXN0ZW0gcGFja2FnZXMiKQorICAgICAqIEF0dGVtcHRzIHRvIGRlbGV0ZSBhIHBhY2thZ2UuIFNpbmNlIHRoaXMgbWF5IHRha2UgYSBsaXR0bGUgd2hpbGUsIHRoZQorICAgICAqIHJlc3VsdCB3aWxsIGJlIHBvc3RlZCBiYWNrIHRvIHRoZSBnaXZlbiBvYnNlcnZlci4gQSBkZWxldGlvbiB3aWxsIGZhaWwgaWYKKyAgICAgKiB0aGUgY2FsbGluZyBjb250ZXh0IGxhY2tzIHRoZQorICAgICAqIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jREVMRVRFX1BBQ0tBR0VTfSBwZXJtaXNzaW9uLCBpZiB0aGUKKyAgICAgKiBuYW1lZCBwYWNrYWdlIGNhbm5vdCBiZSBmb3VuZCwgb3IgaWYgdGhlIG5hbWVkIHBhY2thZ2UgaXMgYSBzeXN0ZW0KKyAgICAgKiBwYWNrYWdlLgogICAgICAqCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRvIGRlbGV0ZQotICAgICAqIEBwYXJhbSBvYnNlcnZlciBBbiBvYnNlcnZlciBjYWxsYmFjayB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgcGFja2FnZSBkZWxldGlvbiBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlRGVsZXRlT2JzZXJ2ZXIjcGFja2FnZURlbGV0ZWQoYm9vbGVhbil9IHdpbGwgYmUKLSAgICAgKiBjYWxsZWQgd2hlbiB0aGF0IGhhcHBlbnMuICBvYnNlcnZlciBtYXkgYmUgbnVsbCB0byBpbmRpY2F0ZSB0aGF0IG5vIGNhbGxiYWNrIGlzIGRlc2lyZWQuCi0gICAgICogQHBhcmFtIGZsYWdzIFBvc3NpYmxlIHZhbHVlczoge0BsaW5rICNERUxFVEVfS0VFUF9EQVRBfSwKLSAgICAgKiB7QGxpbmsgI0RFTEVURV9BTExfVVNFUlN9LgotICAgICAqCisgICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlCisgICAgICogICAgICAgICAgICBkZWxldGlvbiBpcyBjb21wbGV0ZS4KKyAgICAgKiAgICAgICAgICAgIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VEZWxldGVPYnNlcnZlciNwYWNrYWdlRGVsZXRlZH0KKyAgICAgKiAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBvYnNlcnZlciBtYXkgYmUgbnVsbCB0bworICAgICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgLy8gQFN5c3RlbUFwaQotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGRlbGV0ZVBhY2thZ2UoCi0gICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUsIElQYWNrYWdlRGVsZXRlT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncyk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZGVsZXRlUGFja2FnZShTdHJpbmcgcGFja2FnZU5hbWUsIElQYWNrYWdlRGVsZXRlT2JzZXJ2ZXIgb2JzZXJ2ZXIsCisgICAgICAgICAgICBARGVsZXRlRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgotICAgICAqIEF0dGVtcHRzIHRvIGRlbGV0ZSBhIHBhY2thZ2UuICBTaW5jZSB0aGlzIG1heSB0YWtlIGEgbGl0dGxlIHdoaWxlLCB0aGUgcmVzdWx0IHdpbGwKLSAgICAgKiBiZSBwb3N0ZWQgYmFjayB0byB0aGUgZ2l2ZW4gb2JzZXJ2ZXIuIEEgZGVsZXRpb24gd2lsbCBmYWlsIGlmIHRoZSBuYW1lZCBwYWNrYWdlIGNhbm5vdCBiZQotICAgICAqIGZvdW5kLCBvciBpZiB0aGUgbmFtZWQgcGFja2FnZSBpcyBhICJzeXN0ZW0gcGFja2FnZSIuCi0gICAgICogKFRPRE86IGluY2x1ZGUgcG9pbnRlciB0byBkb2N1bWVudGF0aW9uIG9uICJzeXN0ZW0gcGFja2FnZXMiKQorICAgICAqIEF0dGVtcHRzIHRvIGRlbGV0ZSBhIHBhY2thZ2UuIFNpbmNlIHRoaXMgbWF5IHRha2UgYSBsaXR0bGUgd2hpbGUsIHRoZQorICAgICAqIHJlc3VsdCB3aWxsIGJlIHBvc3RlZCBiYWNrIHRvIHRoZSBnaXZlbiBvYnNlcnZlci4gQSBkZWxldGlvbiB3aWxsIGZhaWwgaWYKKyAgICAgKiB0aGUgbmFtZWQgcGFja2FnZSBjYW5ub3QgYmUgZm91bmQsIG9yIGlmIHRoZSBuYW1lZCBwYWNrYWdlIGlzIGEgc3lzdGVtCisgICAgICogcGFja2FnZS4KICAgICAgKgogICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBkZWxldGUKLSAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIgQW4gb2JzZXJ2ZXIgY2FsbGJhY2sgdG8gZ2V0IG5vdGlmaWVkIHdoZW4gdGhlIHBhY2thZ2UgZGVsZXRpb24gaXMKLSAgICAgKiBjb21wbGV0ZS4ge0BsaW5rIGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZURlbGV0ZU9ic2VydmVyI3BhY2thZ2VEZWxldGVkKGJvb2xlYW4pfSB3aWxsIGJlCi0gICAgICogY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiAgb2JzZXJ2ZXIgbWF5IGJlIG51bGwgdG8gaW5kaWNhdGUgdGhhdCBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgotICAgICAqIEBwYXJhbSBmbGFncyBQb3NzaWJsZSB2YWx1ZXM6IHtAbGluayAjREVMRVRFX0tFRVBfREFUQX0sIHtAbGluayAjREVMRVRFX0FMTF9VU0VSU30uCisgICAgICogQHBhcmFtIG9ic2VydmVyIEFuIG9ic2VydmVyIGNhbGxiYWNrIHRvIGdldCBub3RpZmllZCB3aGVuIHRoZSBwYWNrYWdlCisgICAgICogICAgICAgICAgICBkZWxldGlvbiBpcyBjb21wbGV0ZS4KKyAgICAgKiAgICAgICAgICAgIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VEZWxldGVPYnNlcnZlciNwYWNrYWdlRGVsZXRlZH0KKyAgICAgKiAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhhdCBoYXBwZW5zLiBvYnNlcnZlciBtYXkgYmUgbnVsbCB0bworICAgICAqICAgICAgICAgICAgaW5kaWNhdGUgdGhhdCBubyBjYWxsYmFjayBpcyBkZXNpcmVkLgogICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgSWQKLSAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgIEBSZXF1aXJlc1Blcm1pc3Npb24oYW55T2YgPSB7CiAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLkRFTEVURV9QQUNLQUdFUywKICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEx9KQotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGRlbGV0ZVBhY2thZ2VBc1VzZXIoCi0gICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUsIElQYWNrYWdlRGVsZXRlT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncywgaW50IHVzZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgZGVsZXRlUGFja2FnZUFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIElQYWNrYWdlRGVsZXRlT2JzZXJ2ZXIgb2JzZXJ2ZXIsCisgICAgICAgICAgICBARGVsZXRlRmxhZ3MgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySWQpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgdGhlIHBhY2thZ2UgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpbnN0YWxsZWQgYSBwYWNrYWdlLiBUaGlzIGlkZW50aWZpZXMKQEAgLTQyODEsNyArNDgxMSw2IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIC8vIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgdm9pZCBmcmVlU3RvcmFnZUFuZE5vdGlmeShsb25nIGZyZWVTdG9yYWdlU2l6ZSwgSVBhY2thZ2VEYXRhT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKICAgICAgICAgZnJlZVN0b3JhZ2VBbmROb3RpZnkobnVsbCwgZnJlZVN0b3JhZ2VTaXplLCBvYnNlcnZlcik7CiAgICAgfQpAQCAtNDMyNyw3ICs0ODU2LDcgQEAKICAgICAgKiBzaG91bGQgaGF2ZSB0aGUge0BsaW5rIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbiNHRVRfUEFDS0FHRV9TSVpFfSBwZXJtaXNzaW9uLgogICAgICAqCiAgICAgICogQHBhcmFtIHBhY2thZ2VOYW1lIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHdob3NlIHNpemUgaW5mb3JtYXRpb24gaXMgdG8gYmUgcmV0cmlldmVkCi0gICAgICogQHBhcmFtIHVzZXJIYW5kbGUgVGhlIHVzZXIgd2hvc2Ugc2l6ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgd2hvc2Ugc2l6ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcmV0cmlldmVkLgogICAgICAqIEBwYXJhbSBvYnNlcnZlciBBbiBvYnNlcnZlciBjYWxsYmFjayB0byBnZXQgbm90aWZpZWQgd2hlbiB0aGUgb3BlcmF0aW9uCiAgICAgICogaXMgY29tcGxldGUuCiAgICAgICoge0BsaW5rIGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZVN0YXRzT2JzZXJ2ZXIjb25HZXRTdGF0c0NvbXBsZXRlZChQYWNrYWdlU3RhdHMsIGJvb2xlYW4pfQpAQCAtNDMzOCwxNyArNDg2NywxNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSwKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBAVXNlcklkSW50IGludCB1c2VySWQsCiAgICAgICAgICAgICBJUGFja2FnZVN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIpOwogCiAgICAgLyoqCi0gICAgICogTGlrZSB7QGxpbmsgI2dldFBhY2thZ2VTaXplSW5mbyhTdHJpbmcsIGludCwgSVBhY2thZ2VTdGF0c09ic2VydmVyKX0sIGJ1dAorICAgICAqIExpa2Uge0BsaW5rICNnZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIoU3RyaW5nLCBpbnQsIElQYWNrYWdlU3RhdHNPYnNlcnZlcil9LCBidXQKICAgICAgKiByZXR1cm5zIHRoZSBzaXplIGZvciB0aGUgY2FsbGluZyB1c2VyLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBnZXRQYWNrYWdlU2l6ZUluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBJUGFja2FnZVN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICAgICAgZ2V0UGFja2FnZVNpemVJbmZvKHBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLm15VXNlcklkKCksIG9ic2VydmVyKTsKKyAgICAgICAgZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKHBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLm15VXNlcklkKCksIG9ic2VydmVyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQzNzMsMzAgKzQ5MDIsMzggQEAKICAgICAgKiBsZWFzdCBwcmVmZXJyZWQuCiAgICAgICoKICAgICAgKiBAcGFyYW0gZmxhZ3MgQWRkaXRpb25hbCBvcHRpb24gZmxhZ3MuIFVzZSBhbnkgY29tYmluYXRpb24gb2YKLSAgICAgKiB7QGxpbmsgI0dFVF9BQ1RJVklUSUVTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9HSURTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9DT05GSUdVUkFUSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfSU5TVFJVTUVOVEFUSU9OfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9QRVJNSVNTSU9OU30sCi0gICAgICoge0BsaW5rICNHRVRfUFJPVklERVJTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9SRUNFSVZFUlN9LAotICAgICAqIHtAbGluayAjR0VUX1NFUlZJQ0VTfSwKLSAgICAgKiB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwgdG8gbW9kaWZ5IHRoZSBkYXRhIHJldHVybmVkLgorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfQUNUSVZJVElFU30sIHtAbGluayAjR0VUX0NPTkZJR1VSQVRJT05TfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX0dJRFN9LCB7QGxpbmsgI0dFVF9JTlNUUlVNRU5UQVRJT059LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfSU5URU5UX0ZJTFRFUlN9LCB7QGxpbmsgI0dFVF9NRVRBX0RBVEF9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUEVSTUlTU0lPTlN9LCB7QGxpbmsgI0dFVF9QUk9WSURFUlN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfUkVDRUlWRVJTfSwge0BsaW5rICNHRVRfU0VSVklDRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNHRVRfU0hBUkVEX0xJQlJBUllfRklMRVN9LCB7QGxpbmsgI0dFVF9TSUdOQVRVUkVTfSwKKyAgICAgKiAgICAgICAgIHtAbGluayAjR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TfSwge0BsaW5rICNHRVRfVU5JTlNUQUxMRURfUEFDS0FHRVN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTfSwge0BsaW5rICNNQVRDSF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFN9LAorICAgICAqICAgICAgICAge0BsaW5rICNNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFU30KKyAgICAgKiAgICAgICAgIHRvIG1vZGlmeSB0aGUgZGF0YSByZXR1cm5lZC4KICAgICAgKgotICAgICAqIEByZXR1cm4gUmV0dXJucyBhIGxpc3Qgb2YgUGFja2FnZUluZm8gb2JqZWN0cyBkZXNjcmliaW5nIGVhY2gKLSAgICAgKiBwcmVmZXJyZWQgYXBwbGljYXRpb24sIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCisgICAgICogQHJldHVybiBBIExpc3Qgb2YgUGFja2FnZUluZm8gb2JqZWN0cywgb25lIGZvciBlYWNoIHByZWZlcnJlZCBhcHBsaWNhdGlvbiwKKyAgICAgKiAgICAgICAgIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCiAgICAgICoKICAgICAgKiBAc2VlICNHRVRfQUNUSVZJVElFUwotICAgICAqIEBzZWUgI0dFVF9HSURTCiAgICAgICogQHNlZSAjR0VUX0NPTkZJR1VSQVRJT05TCisgICAgICogQHNlZSAjR0VUX0dJRFMKICAgICAgKiBAc2VlICNHRVRfSU5TVFJVTUVOVEFUSU9OCisgICAgICogQHNlZSAjR0VUX0lOVEVOVF9GSUxURVJTCisgICAgICogQHNlZSAjR0VUX01FVEFfREFUQQogICAgICAqIEBzZWUgI0dFVF9QRVJNSVNTSU9OUwogICAgICAqIEBzZWUgI0dFVF9QUk9WSURFUlMKICAgICAgKiBAc2VlICNHRVRfUkVDRUlWRVJTCiAgICAgICogQHNlZSAjR0VUX1NFUlZJQ0VTCisgICAgICogQHNlZSAjR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTCiAgICAgICogQHNlZSAjR0VUX1NJR05BVFVSRVMKKyAgICAgKiBAc2VlICNHRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgKiBAc2VlICNNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTCisgICAgICogQHNlZSAjTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0UHJlZmVycmVkUGFja2FnZXMoaW50IGZsYWdzKTsKKyAgICBwdWJsaWMgYWJzdHJhY3QgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0UHJlZmVycmVkUGFja2FnZXMoQFBhY2thZ2VJbmZvRmxhZ3MgaW50IGZsYWdzKTsKIAogICAgIC8qKgogICAgICAqIEBkZXByZWNhdGVkIFRoaXMgaXMgYSBwcm90ZWN0ZWQgQVBJIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGJlZW4gYXZhaWxhYmxlCkBAIC00NDI3LDggKzQ5NjQsOCBAQAogICAgICAgICAgICAgdG8uCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRQcmVmZXJyZWRBY3Rpdml0eShJbnRlbnRGaWx0ZXIgZmlsdGVyLCBpbnQgbWF0Y2gsCi0gICAgICAgICAgICBDb21wb25lbnROYW1lW10gc2V0LCBDb21wb25lbnROYW1lIGFjdGl2aXR5LCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIHZvaWQgYWRkUHJlZmVycmVkQWN0aXZpdHlBc1VzZXIoSW50ZW50RmlsdGVyIGZpbHRlciwgaW50IG1hdGNoLAorICAgICAgICAgICAgQ29tcG9uZW50TmFtZVtdIHNldCwgQ29tcG9uZW50TmFtZSBhY3Rpdml0eSwgQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQuIE11c3Qgb3ZlcnJpZGUgaW4gYSBzdWJjbGFzcy4iKTsKICAgICB9CiAKQEAgLTQ0NjIsNyArNDk5OSw3IEBACiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCByZXBsYWNlUHJlZmVycmVkQWN0aXZpdHlBc1VzZXIoSW50ZW50RmlsdGVyIGZpbHRlciwgaW50IG1hdGNoLAotICAgICAgICAgICBDb21wb25lbnROYW1lW10gc2V0LCBDb21wb25lbnROYW1lIGFjdGl2aXR5LCBpbnQgdXNlcklkKSB7CisgICAgICAgICAgIENvbXBvbmVudE5hbWVbXSBzZXQsIENvbXBvbmVudE5hbWUgYWN0aXZpdHksIEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkLiBNdXN0IG92ZXJyaWRlIGluIGEgc3ViY2xhc3MuIik7CiAgICAgfQogCkBAIC00NjU3LDI1ICs1MTk0LDE5IEBACiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTaWduZWRCeUV4YWN0bHkoU3RyaW5nIHBhY2thZ2VOYW1lLCBLZXlTZXQga3MpOwogCiAgICAgLyoqCi0gICAgICogQXR0ZW1wdHMgdG8gbW92ZSBwYWNrYWdlIHJlc291cmNlcyBmcm9tIGludGVybmFsIHRvIGV4dGVybmFsIG1lZGlhIG9yIHZpY2UgdmVyc2EuCi0gICAgICogU2luY2UgdGhpcyBtYXkgdGFrZSBhIGxpdHRsZSB3aGlsZSwgdGhlIHJlc3VsdCB3aWxsCi0gICAgICogYmUgcG9zdGVkIGJhY2sgdG8gdGhlIGdpdmVuIG9ic2VydmVyLiAgIFRoaXMgY2FsbCBtYXkgZmFpbCBpZiB0aGUgY2FsbGluZyBjb250ZXh0Ci0gICAgICogbGFja3MgdGhlIHtAbGluayBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24jTU9WRV9QQUNLQUdFfSBwZXJtaXNzaW9uLCBpZiB0aGUKLSAgICAgKiBuYW1lZCBwYWNrYWdlIGNhbm5vdCBiZSBmb3VuZCwgb3IgaWYgdGhlIG5hbWVkIHBhY2thZ2UgaXMgYSAic3lzdGVtIHBhY2thZ2UiLgorICAgICAqIFB1dHMgdGhlIHBhY2thZ2UgaW4gYSBzdXNwZW5kZWQgc3RhdGUsIG1ha2luZyB0aGUgcGFja2FnZSB1bi1ydW5uYWJsZSwKKyAgICAgKiBidXQgaXQgZG9lc24ndCByZW1vdmUgdGhlIGRhdGEgb3IgdGhlIGFjdHVhbCBwYWNrYWdlIGZpbGUuIFRoZSBhcHBsaWNhdGlvbiBub3RpZmljYXRpb25zCisgICAgICogd2lsbCBiZSBoaWRkZW4gYW5kIGFsc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwgbm90IHNob3cgdXAgaW4gcmVjZW50cy4KICAgICAgKgotICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBkZWxldGUKLSAgICAgKiBAcGFyYW0gb2JzZXJ2ZXIgQW4gb2JzZXJ2ZXIgY2FsbGJhY2sgdG8gZ2V0IG5vdGlmaWVkIHdoZW4gdGhlIHBhY2thZ2UgbW92ZSBpcwotICAgICAqIGNvbXBsZXRlLiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LnBtLklQYWNrYWdlTW92ZU9ic2VydmVyI3BhY2thZ2VNb3ZlZChib29sZWFuKX0gd2lsbCBiZQotICAgICAqIGNhbGxlZCB3aGVuIHRoYXQgaGFwcGVucy4gIG9ic2VydmVyIG1heSBiZSBudWxsIHRvIGluZGljYXRlIHRoYXQgbm8gY2FsbGJhY2sgaXMgZGVzaXJlZC4KLSAgICAgKiBAcGFyYW0gZmxhZ3MgVG8gaW5kaWNhdGUgaW5zdGFsbCBsb2NhdGlvbiB7QGxpbmsgI01PVkVfSU5URVJOQUx9IG9yCi0gICAgICoge0BsaW5rICNNT1ZFX0VYVEVSTkFMX01FRElBfQorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFja2FnZSB0byBzZXQgdGhlIHN1c3BlbmRlZCBzdGF0dXMuCisgICAgICogQHBhcmFtIHN1c3BlbmRlZCBJZiBzZXQgdG8ge0Bjb2RlIHRydWV9IHRoYW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBzdXNwZW5kZWQsIGlmIHNldCB0bworICAgICAqIHtAY29kZSBmYWxzZX0gdGhlIHBhY2thZ2Ugd2lsbCBiZSB1bnN1c3BlbmRlZC4KKyAgICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIGlkLgogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyB2b2lkIG1vdmVQYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSwgSVBhY2thZ2VNb3ZlT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCBmbGFncykgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9CisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZEFzVXNlcigKKyAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSwgYm9vbGVhbiBzdXNwZW5kZWQsIEBVc2VySWRJbnQgaW50IHVzZXJJZCk7CiAKICAgICAvKioge0BoaWRlfSAqLwogICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc01vdmVTdGF0dXNGaW5pc2hlZChpbnQgc3RhdHVzKSB7CkBAIC00NzMzLDIyICs1MjY0LDI1IEBACiAgICAgcHVibGljIGFic3RyYWN0IEBOb25OdWxsIFBhY2thZ2VJbnN0YWxsZXIgZ2V0UGFja2FnZUluc3RhbGxlcigpOwogCiAgICAgLyoqCi0gICAgICogQWRkcyBhIHtAbGluayBDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJ9LiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIGFsbCBpbnRlbnRzIHNlbnQgZnJvbSB0aGUKLSAgICAgKiB1c2VyIHdpdGggaWQgc291cmNlVXNlcklkIGNhbiBhbHNvIGJlIGJlIHJlc29sdmVkIGJ5IGFjdGl2aXRpZXMgaW4gdGhlIHVzZXIgd2l0aCBpZAotICAgICAqIHRhcmdldFVzZXJJZCBpZiB0aGV5IG1hdGNoIHRoZSBzcGVjaWZpZWQgaW50ZW50IGZpbHRlci4KKyAgICAgKiBBZGRzIGEge0Bjb2RlIENyb3NzUHJvZmlsZUludGVudEZpbHRlcn0uIEFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgYWxsCisgICAgICogaW50ZW50cyBzZW50IGZyb20gdGhlIHVzZXIgd2l0aCBpZCBzb3VyY2VVc2VySWQgY2FuIGFsc28gYmUgYmUgcmVzb2x2ZWQKKyAgICAgKiBieSBhY3Rpdml0aWVzIGluIHRoZSB1c2VyIHdpdGggaWQgdGFyZ2V0VXNlcklkIGlmIHRoZXkgbWF0Y2ggdGhlCisgICAgICogc3BlY2lmaWVkIGludGVudCBmaWx0ZXIuCisgICAgICoKICAgICAgKiBAcGFyYW0gZmlsdGVyIFRoZSB7QGxpbmsgSW50ZW50RmlsdGVyfSB0aGUgaW50ZW50IGhhcyB0byBtYXRjaAogICAgICAqIEBwYXJhbSBzb3VyY2VVc2VySWQgVGhlIHNvdXJjZSB1c2VyIGlkLgogICAgICAqIEBwYXJhbSB0YXJnZXRVc2VySWQgVGhlIHRhcmdldCB1c2VyIGlkLgotICAgICAqIEBwYXJhbSBmbGFncyBUaGUgcG9zc2libGUgdmFsdWVzIGFyZSB7QGxpbmsgU0tJUF9DVVJSRU5UX1BST0ZJTEV9IGFuZAotICAgICAqICAgICAgICB7QGxpbmsgT05MWV9JRl9OT19NQVRDSF9GT1VORH0uCisgICAgICogQHBhcmFtIGZsYWdzIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIHtAbGluayAjU0tJUF9DVVJSRU5UX1BST0ZJTEV9IGFuZAorICAgICAqICAgICAgICAgICAge0BsaW5rICNPTkxZX0lGX05PX01BVENIX0ZPVU5EfS4KICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGFkZENyb3NzUHJvZmlsZUludGVudEZpbHRlcihJbnRlbnRGaWx0ZXIgZmlsdGVyLCBpbnQgc291cmNlVXNlcklkLAogICAgICAgICAgICAgaW50IHRhcmdldFVzZXJJZCwgaW50IGZsYWdzKTsKIAogICAgIC8qKgotICAgICAqIENsZWFyaW5nIHtAbGluayBDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJ9cyB3aGljaCBoYXZlIHRoZSBzcGVjaWZpZWQgdXNlciBhcyB0aGVpcgotICAgICAqIHNvdXJjZSwgYW5kIGhhdmUgYmVlbiBzZXQgYnkgdGhlIGFwcCBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqIENsZWFyaW5nIHtAY29kZSBDcm9zc1Byb2ZpbGVJbnRlbnRGaWx0ZXJ9cyB3aGljaCBoYXZlIHRoZSBzcGVjaWZpZWQgdXNlcgorICAgICAqIGFzIHRoZWlyIHNvdXJjZSwgYW5kIGhhdmUgYmVlbiBzZXQgYnkgdGhlIGFwcCBjYWxsaW5nIHRoaXMgbWV0aG9kLgorICAgICAqCiAgICAgICogQHBhcmFtIHNvdXJjZVVzZXJJZCBUaGUgc291cmNlIHVzZXIgaWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUGFja2FnZVBhcnNlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlUGFyc2VyLmphdmEKaW5kZXggYjc5YjZiNi4uNmQzNjBkNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlUGFyc2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlUGFyc2VyLmphdmEKQEAgLTM3LDcgKzM3LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlhtbFJlc291cmNlUGFyc2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkZpbGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLm9zLlBhdHRlcm5NYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CkBAIC01Miw2ICs1MSw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7CitpbXBvcnQgYW5kcm9pZC51dGlsLmphci5TdHJpY3RKYXJGaWxlOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKQEAgLTg2LDggKzg2LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljUmVmZXJlbmNlOwogaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7CiAKLWltcG9ydCBhbmRyb2lkLnV0aWwuamFyLlN0cmljdEphckZpbGU7Ci0KIC8qKgogICogUGFyc2VyIGZvciBwYWNrYWdlIGZpbGVzIChBUEtzKSBvbiBkaXNrLiBUaGlzIHN1cHBvcnRzIGFwcHMgcGFja2FnZWQgZWl0aGVyCiAgKiBhcyBhIHNpbmdsZSAibW9ub2xpdGhpYyIgQVBLLCBvciBhcHBzIHBhY2thZ2VkIGFzIGEgImNsdXN0ZXIiIG9mIG11bHRpcGxlCkBAIC00MjEsOCArNDE5LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIFBhY2thZ2VJbmZvIGdlbmVyYXRlUGFja2FnZUluZm8oUGFja2FnZVBhcnNlci5QYWNrYWdlIHAsCiAgICAgICAgICAgICBpbnQgZ2lkc1tdLCBpbnQgZmxhZ3MsIGxvbmcgZmlyc3RJbnN0YWxsVGltZSwgbG9uZyBsYXN0VXBkYXRlVGltZSwKICAgICAgICAgICAgIFNldDxTdHJpbmc+IGdyYW50ZWRQZXJtaXNzaW9ucywgUGFja2FnZVVzZXJTdGF0ZSBzdGF0ZSwgaW50IHVzZXJJZCkgewotCi0gICAgICAgIGlmICghY2hlY2tVc2VJbnN0YWxsZWRPckhpZGRlbihmbGFncywgc3RhdGUpKSB7CisgICAgICAgIGlmICghY2hlY2tVc2VJbnN0YWxsZWRPckhpZGRlbihmbGFncywgc3RhdGUpIHx8ICFwLmlzTWF0Y2goZmxhZ3MpKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgICAgICBQYWNrYWdlSW5mbyBwaSA9IG5ldyBQYWNrYWdlSW5mbygpOwpAQCAtNDY2LDkyICs0NjMsNjAgQEAKICAgICAgICAgICAgICAgICBwLmZlYXR1cmVHcm91cHMudG9BcnJheShwaS5mZWF0dXJlR3JvdXBzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9BQ1RJVklUSUVTKSAhPSAwKSB7Ci0gICAgICAgICAgICBpbnQgTiA9IHAuYWN0aXZpdGllcy5zaXplKCk7CisgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfQUNUSVZJVElFUykgIT0gMCkgeworICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwLmFjdGl2aXRpZXMuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKE4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChmbGFncyZQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBwaS5hY3Rpdml0aWVzID0gbmV3IEFjdGl2aXR5SW5mb1tOXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgbnVtID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuYWN0aXZpdGllcy5nZXQoaSkuaW5mby5lbmFibGVkKSBudW0rKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwaS5hY3Rpdml0aWVzID0gbmV3IEFjdGl2aXR5SW5mb1tudW1dOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpPTAsIGo9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHkgYWN0aXZpdHkgPSBwLmFjdGl2aXRpZXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHkuaW5mby5lbmFibGVkCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpLmFjdGl2aXRpZXNbaisrXSA9IGdlbmVyYXRlQWN0aXZpdHlJbmZvKHAuYWN0aXZpdGllcy5nZXQoaSksIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICBpbnQgbnVtID0gMDsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eUluZm9bXSByZXMgPSBuZXcgQWN0aXZpdHlJbmZvW05dOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5IGEgPSBwLmFjdGl2aXRpZXMuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaXNNYXRjaChhLmluZm8sIGZsYWdzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzW251bSsrXSA9IGdlbmVyYXRlQWN0aXZpdHlJbmZvKGEsIGZsYWdzLCBzdGF0ZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaS5hY3Rpdml0aWVzID0gQXJyYXlVdGlscy50cmltVG9TaXplKHJlcywgbnVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9SRUNFSVZFUlMpICE9IDApIHsKLSAgICAgICAgICAgIGludCBOID0gcC5yZWNlaXZlcnMuc2l6ZSgpOworICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1JFQ0VJVkVSUykgIT0gMCkgeworICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwLnJlY2VpdmVycy5zaXplKCk7CiAgICAgICAgICAgICBpZiAoTiA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBpLnJlY2VpdmVycyA9IG5ldyBBY3Rpdml0eUluZm9bTl07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG51bSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnJlY2VpdmVycy5nZXQoaSkuaW5mby5lbmFibGVkKSBudW0rKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwaS5yZWNlaXZlcnMgPSBuZXcgQWN0aXZpdHlJbmZvW251bV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MCwgaj0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eSA9IHAucmVjZWl2ZXJzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5LmluZm8uZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaS5yZWNlaXZlcnNbaisrXSA9IGdlbmVyYXRlQWN0aXZpdHlJbmZvKHAucmVjZWl2ZXJzLmdldChpKSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VySWQpOworICAgICAgICAgICAgICAgIGludCBudW0gPSAwOworICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5SW5mb1tdIHJlcyA9IG5ldyBBY3Rpdml0eUluZm9bTl07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHkgYSA9IHAucmVjZWl2ZXJzLmdldChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmlzTWF0Y2goYS5pbmZvLCBmbGFncykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc1tudW0rK10gPSBnZW5lcmF0ZUFjdGl2aXR5SW5mbyhhLCBmbGFncywgc3RhdGUsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGkucmVjZWl2ZXJzID0gQXJyYXlVdGlscy50cmltVG9TaXplKHJlcywgbnVtKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUykgIT0gMCkgewotICAgICAgICAgICAgaW50IE4gPSBwLnNlcnZpY2VzLnNpemUoKTsKKyAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUykgIT0gMCkgeworICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwLnNlcnZpY2VzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChOID4gMCkgewotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcGkuc2VydmljZXMgPSBuZXcgU2VydmljZUluZm9bTl07Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG51bSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwLnNlcnZpY2VzLmdldChpKS5pbmZvLmVuYWJsZWQpIG51bSsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBpLnNlcnZpY2VzID0gbmV3IFNlcnZpY2VJbmZvW251bV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MCwgaj0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTZXJ2aWNlIHNlcnZpY2UgPSBwLnNlcnZpY2VzLmdldChpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UuaW5mby5lbmFibGVkCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpLnNlcnZpY2VzW2orK10gPSBnZW5lcmF0ZVNlcnZpY2VJbmZvKHAuc2VydmljZXMuZ2V0KGkpLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgaW50IG51bSA9IDA7CisgICAgICAgICAgICAgICAgZmluYWwgU2VydmljZUluZm9bXSByZXMgPSBuZXcgU2VydmljZUluZm9bTl07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU2VydmljZSBzID0gcC5zZXJ2aWNlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pc01hdGNoKHMuaW5mbywgZmxhZ3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNbbnVtKytdID0gZ2VuZXJhdGVTZXJ2aWNlSW5mbyhzLCBmbGFncywgc3RhdGUsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcGkuc2VydmljZXMgPSBBcnJheVV0aWxzLnRyaW1Ub1NpemUocmVzLCBudW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX1BST1ZJREVSUykgIT0gMCkgewotICAgICAgICAgICAgaW50IE4gPSBwLnByb3ZpZGVycy5zaXplKCk7CisgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfUFJPVklERVJTKSAhPSAwKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IHAucHJvdmlkZXJzLnNpemUoKTsKICAgICAgICAgICAgIGlmIChOID4gMCkgewotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcGkucHJvdmlkZXJzID0gbmV3IFByb3ZpZGVySW5mb1tOXTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgbnVtID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAucHJvdmlkZXJzLmdldChpKS5pbmZvLmVuYWJsZWQpIG51bSsrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHBpLnByb3ZpZGVycyA9IG5ldyBQcm92aWRlckluZm9bbnVtXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wLCBqPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFByb3ZpZGVyIHByb3ZpZGVyID0gcC5wcm92aWRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXIuaW5mby5lbmFibGVkCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpLnByb3ZpZGVyc1tqKytdID0gZ2VuZXJhdGVQcm92aWRlckluZm8ocC5wcm92aWRlcnMuZ2V0KGkpLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgaW50IG51bSA9IDA7CisgICAgICAgICAgICAgICAgZmluYWwgUHJvdmlkZXJJbmZvW10gcmVzID0gbmV3IFByb3ZpZGVySW5mb1tOXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBQcm92aWRlciBwciA9IHAucHJvdmlkZXJzLmdldChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmlzTWF0Y2gocHIuaW5mbywgZmxhZ3MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNbbnVtKytdID0gZ2VuZXJhdGVQcm92aWRlckluZm8ocHIsIGZsYWdzLCBzdGF0ZSwgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaS5wcm92aWRlcnMgPSBBcnJheVV0aWxzLnRyaW1Ub1NpemUocmVzLCBudW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0lOU1RSVU1FTlRBVElPTikgIT0gMCkgewpAQCAtNjI1LDkgKzU5MCw3IEBACiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUEFSU0VfQ09MTEVDVF9DRVJUSUZJQ0FURVMgPSAxPDw4OwogICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBBUlNFX1RSVVNURURfT1ZFUkxBWSA9IDE8PDk7CiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgUEFSU0VfRU5GT1JDRV9DT0RFID0gMTw8MTA7Ci0gICAgLy8gVE9ETzogZml4IGIvMjUxMTg2MjI7IHJlbW92ZSB0aGlzIGVudGlyZWx5IG9uY2Ugc2lnbmF0dXJlIHByb2Nlc3NpbmcgaXMgcXVpY2sKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBQQVJTRV9TS0lQX1ZFUklGSUNBVElPTiA9IDE8PDExOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBBUlNFX0lTX0VQSEVNRVJBTCA9IDE8PDEyOworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IFBBUlNFX0lTX0VQSEVNRVJBTCA9IDE8PDExOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvcjxTdHJpbmc+IHNTcGxpdE5hbWVDb21wYXJhdG9yID0gbmV3IFNwbGl0TmFtZUNvbXBhcmF0b3IoKTsKIApAQCAtMTAzNCwzNCArOTk3LDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBHYXRoZXJzIHRoZSB7QGxpbmsgTWFuaWZlc3REaWdlc3R9IGZvciB7QGNvZGUgcGtnfSBpZiBpdCBleGlzdHMgaW4gdGhlCi0gICAgICogQVBLLiBJZiBpdCBzdWNjZXNzZnVsbHkgc2Nhbm5lZCB0aGUgcGFja2FnZSBhbmQgZm91bmQgdGhlCi0gICAgICoge0Bjb2RlIEFuZHJvaWRNYW5pZmVzdC54bWx9LCB7QGNvZGUgdHJ1ZX0gaXMgcmV0dXJuZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY29sbGVjdE1hbmlmZXN0RGlnZXN0KFBhY2thZ2UgcGtnKSB0aHJvd3MgUGFja2FnZVBhcnNlckV4Y2VwdGlvbiB7Ci0gICAgICAgIHBrZy5tYW5pZmVzdERpZ2VzdCA9IG51bGw7Ci0KLSAgICAgICAgLy8gVE9ETzogZXh0ZW5kIHRvIGdhdGhlciBkaWdlc3QgZm9yIHNwbGl0IEFQS3MKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmljdEphckZpbGUgamFyRmlsZSA9IG5ldyBTdHJpY3RKYXJGaWxlKHBrZy5iYXNlQ29kZVBhdGgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBaaXBFbnRyeSBqZSA9IGphckZpbGUuZmluZEVudHJ5KEFORFJPSURfTUFOSUZFU1RfRklMRU5BTUUpOwotICAgICAgICAgICAgICAgIGlmIChqZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBrZy5tYW5pZmVzdERpZ2VzdCA9IE1hbmlmZXN0RGlnZXN0LmZyb21JbnB1dFN0cmVhbShqYXJGaWxlLmdldElucHV0U3RyZWFtKGplKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBqYXJGaWxlLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZVBhcnNlckV4Y2VwdGlvbihJTlNUQUxMX1BBUlNFX0ZBSUxFRF9NQU5JRkVTVF9NQUxGT1JNRUQsCi0gICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY29sbGVjdCBtYW5pZmVzdCBkaWdlc3QiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgogICAgICAqIENvbGxlY3QgY2VydGlmaWNhdGVzIGZyb20gYWxsIHRoZSBBUEtzIGRlc2NyaWJlZCBpbiB0aGUgZ2l2ZW4gcGFja2FnZSwKLSAgICAgKiBwb3B1bGF0aW5nIHtAbGluayBQYWNrYWdlI21TaWduYXR1cmVzfS4KLSAgICAgKiA8cD5EZXBlbmRpbmcgdXBvbiB0aGUgcGFyc2VyIGZsYWdzLCB0aGlzIG1heSBhbHNvIGFzc2VydHMgdGhhdCBhbGwgQVBLCisgICAgICogcG9wdWxhdGluZyB7QGxpbmsgUGFja2FnZSNtU2lnbmF0dXJlc30uIEFsc28gYXNzZXJ0cyB0aGF0IGFsbCBBUEsKICAgICAgKiBjb250ZW50cyBhcmUgc2lnbmVkIGNvcnJlY3RseSBhbmQgY29uc2lzdGVudGx5LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbGxlY3RDZXJ0aWZpY2F0ZXMoUGFja2FnZSBwa2csIGludCBwYXJzZUZsYWdzKSB0aHJvd3MgUGFja2FnZVBhcnNlckV4Y2VwdGlvbiB7CkBAIC0xMDg0LDEwICsxMDIxLDggQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBoYXNDb2RlID0gKGFwa0ZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfSEFTX0NPREUpICE9IDA7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gcmVxdWlyZUNvZGUgPSAoKHBhcnNlRmxhZ3MgJiBQQVJTRV9FTkZPUkNFX0NPREUpICE9IDApICYmIGhhc0NvZGU7CiAgICAgICAgIGZpbmFsIFN0cmluZyBhcGtQYXRoID0gYXBrRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBza2lwVmVyaWZpY2F0aW9uID0gQnVpbGQuSVNfREVCVUdHQUJMRQotICAgICAgICAgICAgICAgICYmICgocGFyc2VGbGFncyAmIFBBUlNFX1NLSVBfVkVSSUZJQ0FUSU9OKSAhPSAwKTsKIAotICAgICAgICBib29sZWFuIGNvZGVGb3VuZCA9IHNraXBWZXJpZmljYXRpb247CisgICAgICAgIGJvb2xlYW4gY29kZUZvdW5kID0gZmFsc2U7CiAgICAgICAgIFN0cmljdEphckZpbGUgamFyRmlsZSA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRSQUNFX1RBR19QQUNLQUdFX01BTkFHRVIsICJzdHJpY3RKYXJGaWxlQ3RvciIpOwpAQCAtMTEwNiw3ICsxMDQxLDcgQEAKICAgICAgICAgICAgIHRvVmVyaWZ5LmFkZChtYW5pZmVzdEVudHJ5KTsKIAogICAgICAgICAgICAgLy8gSWYgd2UncmUgcGFyc2luZyBhbiB1bnRydXN0ZWQgcGFja2FnZSwgdmVyaWZ5IGFsbCBjb250ZW50cwotICAgICAgICAgICAgaWYgKCFza2lwVmVyaWZpY2F0aW9uICYmIChwYXJzZUZsYWdzICYgUEFSU0VfSVNfU1lTVEVNKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKHBhcnNlRmxhZ3MgJiBQQVJTRV9JU19TWVNURU0pID09IDApIHsKICAgICAgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxaaXBFbnRyeT4gaSA9IGphckZpbGUuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoaS5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgWmlwRW50cnkgZW50cnkgPSBpLm5leHQoKTsKQEAgLTExNTAsOSArMTA4NSw2IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IGVudHJ5Q2VydHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5tU2lnbmluZ0tleXMuYWRkKGVudHJ5Q2VydHNbaV1bMF0uZ2V0UHVibGljS2V5KCkpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChza2lwVmVyaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghU2lnbmF0dXJlLmFyZUV4YWN0TWF0Y2gocGtnLm1TaWduYXR1cmVzLCBlbnRyeVNpZ25hdHVyZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZVBhcnNlckV4Y2VwdGlvbigKQEAgLTEyMTgsOSArMTE1MCw3IEBACiAgICAgICAgICAgICBpZiAoKGZsYWdzICYgUEFSU0VfQ09MTEVDVF9DRVJUSUZJQ0FURVMpICE9IDApIHsKICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmYWN0b3Igc2lnbmF0dXJlIHJlbGF0ZWQgaXRlbXMgb3V0IG9mIFBhY2thZ2Ugb2JqZWN0CiAgICAgICAgICAgICAgICAgZmluYWwgUGFja2FnZSB0ZW1wUGtnID0gbmV3IFBhY2thZ2UobnVsbCk7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogZml4IGIvMjUxMTg2MjI7IHBhc3MgaW4gJzAnIGZvciBwYXJzZSBmbGFncwotICAgICAgICAgICAgICAgIGNvbGxlY3RDZXJ0aWZpY2F0ZXModGVtcFBrZywgYXBrRmlsZSwgMCAvKmFwa0ZsYWdzKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIFBBUlNFX1NLSVBfVkVSSUZJQ0FUSU9OKTsKKyAgICAgICAgICAgICAgICBjb2xsZWN0Q2VydGlmaWNhdGVzKHRlbXBQa2csIGFwa0ZpbGUsIDAgLyphcGtGbGFncyovLCAwIC8qZmxhZ3MqLyk7CiAgICAgICAgICAgICAgICAgc2lnbmF0dXJlcyA9IHRlbXBQa2cubVNpZ25hdHVyZXM7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHNpZ25hdHVyZXMgPSBudWxsOwpAQCAtMzIzMywxMiArMzE2MywxOSBAQAogICAgICAgICAgICAgICAgIGEuaW5mby5mbGFncyB8PSBBY3Rpdml0eUluZm8uRkxBR19SRVNVTUVfV0hJTEVfUEFVU0lORzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYS5pbmZvLnJlc2l6ZWFibGUgPSBzYS5nZXRCb29sZWFuKAotICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9yZXNpemVhYmxlQWN0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgIG93bmVyLmFwcGxpY2F0aW9uSW5mby50YXJnZXRTZGtWZXJzaW9uID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTik7CisgICAgICAgICAgICBpZiAoc2EuZ2V0Qm9vbGVhbihSLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9yZXNpemVhYmxlQWN0aXZpdHksCisgICAgICAgICAgICAgICAgICAgIG93bmVyLmFwcGxpY2F0aW9uSW5mby50YXJnZXRTZGtWZXJzaW9uID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTikpIHsKKyAgICAgICAgICAgICAgICBhLmluZm8uZmxhZ3MgfD0gQWN0aXZpdHlJbmZvLkZMQUdfUkVTSVpFQUJMRTsKIAotICAgICAgICAgICAgYS5pbmZvLnN1cHBvcnRzUGlwID0gYS5pbmZvLnJlc2l6ZWFibGUgPyBzYS5nZXRCb29sZWFuKAotICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9zdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUsIGZhbHNlKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChzYS5nZXRCb29sZWFuKFIuc3R5bGVhYmxlLkFuZHJvaWRNYW5pZmVzdEFjdGl2aXR5X3N1cHBvcnRzUGljdHVyZUluUGljdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKSkgeworICAgICAgICAgICAgICAgICAgICBhLmluZm8uZmxhZ3MgfD0gQWN0aXZpdHlJbmZvLkZMQUdfU1VQUE9SVFNfUElDVFVSRV9JTl9QSUNUVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuQW5kcm9pZE1hbmlmZXN0QWN0aXZpdHlfYWx3YXlzRm9jdXNhYmxlLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBhLmluZm8uZmxhZ3MgfD0gQWN0aXZpdHlJbmZvLkZMQUdfQUxXQVlTX0ZPQ1VTQUJMRTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYS5pbmZvLnNjcmVlbk9yaWVudGF0aW9uID0gc2EuZ2V0SW50KAogICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RBY3Rpdml0eV9zY3JlZW5PcmllbnRhdGlvbiwKQEAgLTM5NDksNiArMzg4NiwxMSBAQAogICAgICAgICAgICAgcy5pbmZvLmZsYWdzIHw9IFNlcnZpY2VJbmZvLkZMQUdfSVNPTEFURURfUFJPQ0VTUzsKICAgICAgICAgfQogICAgICAgICBpZiAoc2EuZ2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5BbmRyb2lkTWFuaWZlc3RTZXJ2aWNlX2V4dGVybmFsU2VydmljZSwKKyAgICAgICAgICAgICAgICBmYWxzZSkpIHsKKyAgICAgICAgICAgIHMuaW5mby5mbGFncyB8PSBTZXJ2aWNlSW5mby5GTEFHX0VYVEVSTkFMX1NFUlZJQ0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNhLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuQW5kcm9pZE1hbmlmZXN0U2VydmljZV9zaW5nbGVVc2VyLAogICAgICAgICAgICAgICAgIGZhbHNlKSkgewogICAgICAgICAgICAgcy5pbmZvLmZsYWdzIHw9IFNlcnZpY2VJbmZvLkZMQUdfU0lOR0xFX1VTRVI7CkBAIC00NTAyLDEyICs0NDQ0LDYgQEAKICAgICAgICAgLyogVGhlIHJlcXVpcmVkIGFjY291bnQgdHlwZSB3aXRob3V0IHdoaWNoIHRoaXMgYXBwbGljYXRpb24gd2lsbCBub3QgZnVuY3Rpb24gKi8KICAgICAgICAgcHVibGljIFN0cmluZyBtUmVxdWlyZWRBY2NvdW50VHlwZTsKIAotICAgICAgICAvKioKLSAgICAgICAgICogRGlnZXN0IHN1aXRhYmxlIGZvciBjb21wYXJpbmcgd2hldGhlciB0aGlzIHBhY2thZ2UncyBtYW5pZmVzdCBpcyB0aGUKLSAgICAgICAgICogc2FtZSBhcyBhbm90aGVyLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0OwotCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgbU92ZXJsYXlUYXJnZXQ7CiAgICAgICAgIHB1YmxpYyBpbnQgbU92ZXJsYXlQcmlvcml0eTsKICAgICAgICAgcHVibGljIGJvb2xlYW4gbVRydXN0ZWRPdmVybGF5OwpAQCAtNDY1Nyw2ICs0NTkzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICYmICFpc0ZvcndhcmRMb2NrZWQoKSAmJiAhYXBwbGljYXRpb25JbmZvLmlzRXh0ZXJuYWxBc2VjKCk7CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc01hdGNoKGludCBmbGFncykgeworICAgICAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1NZU1RFTV9PTkxZKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3lzdGVtQXBwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgICAgICByZXR1cm4gIlBhY2thZ2V7IgogICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZSh0aGlzKSkKQEAgLTQ4ODMsNiArNDgyNiwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYWkuZmxhZ3MgJj0gfkFwcGxpY2F0aW9uSW5mby5GTEFHX0lOU1RBTExFRDsKICAgICAgICAgfQorICAgICAgICBpZiAoc3RhdGUuc3VzcGVuZGVkKSB7CisgICAgICAgICAgICBhaS5mbGFncyB8PSBBcHBsaWNhdGlvbkluZm8uRkxBR19TVVNQRU5ERUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhaS5mbGFncyAmPSB+QXBwbGljYXRpb25JbmZvLkZMQUdfU1VTUEVOREVEOworICAgICAgICB9CiAgICAgICAgIGlmIChzdGF0ZS5oaWRkZW4pIHsKICAgICAgICAgICAgIGFpLnByaXZhdGVGbGFncyB8PSBBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX0hJRERFTjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ5MDIsNyArNDg1MCw3IEBACiAgICAgcHVibGljIHN0YXRpYyBBcHBsaWNhdGlvbkluZm8gZ2VuZXJhdGVBcHBsaWNhdGlvbkluZm8oUGFja2FnZSBwLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBQYWNrYWdlVXNlclN0YXRlIHN0YXRlLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmIChwID09IG51bGwpIHJldHVybiBudWxsOwotICAgICAgICBpZiAoIWNoZWNrVXNlSW5zdGFsbGVkT3JIaWRkZW4oZmxhZ3MsIHN0YXRlKSkgeworICAgICAgICBpZiAoIWNoZWNrVXNlSW5zdGFsbGVkT3JIaWRkZW4oZmxhZ3MsIHN0YXRlKSB8fCAhcC5pc01hdGNoKGZsYWdzKSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFjb3B5TmVlZGVkKGZsYWdzLCBwLCBzdGF0ZSwgbnVsbCwgdXNlcklkKQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYWNrYWdlVXNlclN0YXRlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VVc2VyU3RhdGUuamF2YQppbmRleCA5YjI4NDAxLi4zOGUwMDQ0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VVc2VyU3RhdGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhY2thZ2VVc2VyU3RhdGUuamF2YQpAQCAtMTcsOSArMTcsMjAgQEAKIHBhY2thZ2UgYW5kcm9pZC5jb250ZW50LnBtOwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ERUZBVUxUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VTlRJTF9VU0VEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVVNFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0VOQUJMRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX1NZU1RFTV9PTkxZOwogCiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOworCiAvKioKICAqIFBlci11c2VyIHN0YXRlIGluZm9ybWF0aW9uIGFib3V0IGEgcGFja2FnZS4KICAqIEBoaWRlCkBAIC0yOSw2ICs0MCw3IEBACiAgICAgcHVibGljIGJvb2xlYW4gbm90TGF1bmNoZWQ7CiAgICAgcHVibGljIGJvb2xlYW4gaW5zdGFsbGVkOwogICAgIHB1YmxpYyBib29sZWFuIGhpZGRlbjsgLy8gSXMgdGhlIGFwcCByZXN0cmljdGVkIGJ5IG93bmVyIC8gYWRtaW4KKyAgICBwdWJsaWMgYm9vbGVhbiBzdXNwZW5kZWQ7CiAgICAgcHVibGljIGludCBlbmFibGVkOwogICAgIHB1YmxpYyBib29sZWFuIGJsb2NrVW5pbnN0YWxsOwogCkBAIC00Myw2ICs1NSw3IEBACiAgICAgcHVibGljIFBhY2thZ2VVc2VyU3RhdGUoKSB7CiAgICAgICAgIGluc3RhbGxlZCA9IHRydWU7CiAgICAgICAgIGhpZGRlbiA9IGZhbHNlOworICAgICAgICBzdXNwZW5kZWQgPSBmYWxzZTsKICAgICAgICAgZW5hYmxlZCA9IENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQ7CiAgICAgICAgIGRvbWFpblZlcmlmaWNhdGlvblN0YXR1cyA9CiAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTkRFRklORUQ7CkBAIC01NCwxMyArNjcsNzkgQEAKICAgICAgICAgbm90TGF1bmNoZWQgPSBvLm5vdExhdW5jaGVkOwogICAgICAgICBlbmFibGVkID0gby5lbmFibGVkOwogICAgICAgICBoaWRkZW4gPSBvLmhpZGRlbjsKKyAgICAgICAgc3VzcGVuZGVkID0gby5zdXNwZW5kZWQ7CiAgICAgICAgIGxhc3REaXNhYmxlQXBwQ2FsbGVyID0gby5sYXN0RGlzYWJsZUFwcENhbGxlcjsKLSAgICAgICAgZGlzYWJsZWRDb21wb25lbnRzID0gby5kaXNhYmxlZENvbXBvbmVudHMgIT0gbnVsbAotICAgICAgICAgICAgICAgID8gbmV3IEFycmF5U2V0PD4oby5kaXNhYmxlZENvbXBvbmVudHMpIDogbnVsbDsKLSAgICAgICAgZW5hYmxlZENvbXBvbmVudHMgPSBvLmVuYWJsZWRDb21wb25lbnRzICE9IG51bGwKLSAgICAgICAgICAgICAgICA/IG5ldyBBcnJheVNldDw+KG8uZW5hYmxlZENvbXBvbmVudHMpIDogbnVsbDsKKyAgICAgICAgZGlzYWJsZWRDb21wb25lbnRzID0gQXJyYXlVdGlscy5jbG9uZU9yTnVsbChvLmRpc2FibGVkQ29tcG9uZW50cyk7CisgICAgICAgIGVuYWJsZWRDb21wb25lbnRzID0gQXJyYXlVdGlscy5jbG9uZU9yTnVsbChvLmVuYWJsZWRDb21wb25lbnRzKTsKICAgICAgICAgYmxvY2tVbmluc3RhbGwgPSBvLmJsb2NrVW5pbnN0YWxsOwogICAgICAgICBkb21haW5WZXJpZmljYXRpb25TdGF0dXMgPSBvLmRvbWFpblZlcmlmaWNhdGlvblN0YXR1czsKICAgICAgICAgYXBwTGlua0dlbmVyYXRpb24gPSBvLmFwcExpbmtHZW5lcmF0aW9uOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaWYgdGhpcyBwYWNrYWdlIGlzIGluc3RhbGxlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0luc3RhbGxlZChpbnQgZmxhZ3MpIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLmluc3RhbGxlZCAmJiAhdGhpcy5oaWRkZW4pCisgICAgICAgICAgICAgICAgfHwgKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gY29tcG9uZW50IGlzIGNvbnNpZGVyZWQgaW5zdGFsbGVkLCBlbmFibGVkIGFuZCBhIG1hdGNoCisgICAgICogZm9yIHRoZSBnaXZlbiBmbGFncy4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc01hdGNoKENvbXBvbmVudEluZm8gY29tcG9uZW50SW5mbywgaW50IGZsYWdzKSB7CisgICAgICAgIGlmICghaXNJbnN0YWxsZWQoZmxhZ3MpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaXNFbmFibGVkKGNvbXBvbmVudEluZm8sIGZsYWdzKSkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoZmxhZ3MgJiBNQVRDSF9TWVNURU1fT05MWSkgIT0gMCkgeworICAgICAgICAgICAgaWYgKCFjb21wb25lbnRJbmZvLmFwcGxpY2F0aW9uSW5mby5pc1N5c3RlbUFwcCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBtYXRjaGVzVW5hd2FyZSA9ICgoZmxhZ3MgJiBNQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUpICE9IDApCisgICAgICAgICAgICAgICAgJiYgIWNvbXBvbmVudEluZm8uZW5jcnlwdGlvbkF3YXJlOworICAgICAgICBmaW5hbCBib29sZWFuIG1hdGNoZXNBd2FyZSA9ICgoZmxhZ3MgJiBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFKSAhPSAwKQorICAgICAgICAgICAgICAgICYmIGNvbXBvbmVudEluZm8uZW5jcnlwdGlvbkF3YXJlOworICAgICAgICByZXR1cm4gbWF0Y2hlc1VuYXdhcmUgfHwgbWF0Y2hlc0F3YXJlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgaWYgdGhlIGdpdmVuIGNvbXBvbmVudCBpcyBjb25zaWRlcmVkIGVuYWJsZWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKENvbXBvbmVudEluZm8gY29tcG9uZW50SW5mbywgaW50IGZsYWdzKSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSBvdmVyYWxsIHBhY2thZ2UgaXMgZGlzYWJsZWQ7IGlmIHRoZSBwYWNrYWdlIGlzCisgICAgICAgIC8vIGVuYWJsZWQgdGhlbiBmYWxsIHRocm91Z2ggdG8gY2hlY2sgc3BlY2lmaWMgY29tcG9uZW50CisgICAgICAgIHN3aXRjaCAodGhpcy5lbmFibGVkKSB7CisgICAgICAgICAgICBjYXNlIENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEOgorICAgICAgICAgICAgY2FzZSBDT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VU0VSOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVU5USUxfVVNFRDoKKyAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQ6CisgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRJbmZvLmFwcGxpY2F0aW9uSW5mby5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiBjb21wb25lbnQgaGFzIGV4cGxpY2l0IHN0YXRlIGJlZm9yZSBmYWxsaW5nIHRocm91Z2ggdG8KKyAgICAgICAgLy8gdGhlIG1hbmlmZXN0IGRlZmF1bHQKKyAgICAgICAgaWYgKEFycmF5VXRpbHMuY29udGFpbnModGhpcy5lbmFibGVkQ29tcG9uZW50cywgY29tcG9uZW50SW5mby5uYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEFycmF5VXRpbHMuY29udGFpbnModGhpcy5kaXNhYmxlZENvbXBvbmVudHMsIGNvbXBvbmVudEluZm8ubmFtZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjb21wb25lbnRJbmZvLmVuYWJsZWQ7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYXJjZWxlZExpc3RTbGljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYXJjZWxlZExpc3RTbGljZS5qYXZhCmluZGV4IGNmYjQ0NzMuLjk0NTg1OGU2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1BhcmNlbGVkTGlzdFNsaWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9QYXJjZWxlZExpc3RTbGljZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKQEAgLTUwLDYgKzUxLDEwIEBACiAKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8VD4gbUxpc3Q7CiAKKyAgICBwdWJsaWMgc3RhdGljIDxUIGV4dGVuZHMgUGFyY2VsYWJsZT4gUGFyY2VsZWRMaXN0U2xpY2U8VD4gZW1wdHlMaXN0KCkgeworICAgICAgICByZXR1cm4gbmV3IFBhcmNlbGVkTGlzdFNsaWNlPFQ+KENvbGxlY3Rpb25zLjxUPiBlbXB0eUxpc3QoKSk7CisgICAgfQorCiAgICAgcHVibGljIFBhcmNlbGVkTGlzdFNsaWNlKExpc3Q8VD4gbGlzdCkgewogICAgICAgICBtTGlzdCA9IGxpc3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZWdpc3RlcmVkU2VydmljZXNDYWNoZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZWdpc3RlcmVkU2VydmljZXNDYWNoZS5qYXZhCmluZGV4IGE0MTNmMzYuLmJiMjhiZGUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUmVnaXN0ZXJlZFNlcnZpY2VzQ2FjaGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1JlZ2lzdGVyZWRTZXJ2aWNlc0NhY2hlLmphdmEKQEAgLTM2NSw3ICszNjUsNyBAQAogICAgIHByb3RlY3RlZCBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudFNlcnZpY2VzKGludCB1c2VySWQpIHsKICAgICAgICAgZmluYWwgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICByZXR1cm4gcG0ucXVlcnlJbnRlbnRTZXJ2aWNlc0FzVXNlcihuZXcgSW50ZW50KG1JbnRlcmZhY2VOYW1lKSwKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuR0VUX0VOQ1JZUFRJT05fVU5BV0FSRV9DT01QT05FTlRTLAorICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLAogICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1Jlc29sdmVJbmZvLmphdmEKaW5kZXggYTVmYjQ1MS4uYzliZTZlZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9SZXNvbHZlSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vUmVzb2x2ZUluZm8uamF2YQpAQCAtNjEsNiArNjEsMTkgQEAKICAgICBwdWJsaWMgUHJvdmlkZXJJbmZvIHByb3ZpZGVySW5mbzsKIAogICAgIC8qKgorICAgICAqIFRoZSBlcGhlbWVyYWwgYXBwbGljYXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHJlc29sdXRpb24gbWF0Y2guIFRoaXMgd2lsbAorICAgICAqIG9ubHkgYmUgc2V0IGluIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgRXBoZW1lcmFsUmVzb2x2ZUluZm8gZXBoZW1lcmFsUmVzb2x2ZUluZm87CisKKyAgICAvKioKKyAgICAgKiBBIFJlc29sdmVJbmZvIHRoYXQgcG9pbnRzIGF0IHRoZSBlcGhlbWVyYWwgaW5zdGFsbGVyLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIFJlc29sdmVJbmZvIGVwaGVtZXJhbEluc3RhbGxlcjsKKworICAgIC8qKgogICAgICAqIFRoZSBJbnRlbnRGaWx0ZXIgdGhhdCB3YXMgbWF0Y2hlZCBmb3IgdGhpcyBSZXNvbHZlSW5mby4KICAgICAgKi8KICAgICBwdWJsaWMgSW50ZW50RmlsdGVyIGZpbHRlcjsKQEAgLTE1OSw3ICsxNzIsOCBAQAogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGhhbmRsZUFsbFdlYkRhdGFVUkk7CiAKLSAgICBwcml2YXRlIENvbXBvbmVudEluZm8gZ2V0Q29tcG9uZW50SW5mbygpIHsKKyAgICAvKioge0BoaWRlfSAqLworICAgIHB1YmxpYyBDb21wb25lbnRJbmZvIGdldENvbXBvbmVudEluZm8oKSB7CiAgICAgICAgIGlmIChhY3Rpdml0eUluZm8gIT0gbnVsbCkgcmV0dXJuIGFjdGl2aXR5SW5mbzsKICAgICAgICAgaWYgKHNlcnZpY2VJbmZvICE9IG51bGwpIHJldHVybiBzZXJ2aWNlSW5mbzsKICAgICAgICAgaWYgKHByb3ZpZGVySW5mbyAhPSBudWxsKSByZXR1cm4gcHJvdmlkZXJJbmZvOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9TZXJ2aWNlSW5mby5qYXZhCmluZGV4IDc0ZTVjMmEuLmVlY2YwZGUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vU2VydmljZUluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1NlcnZpY2VJbmZvLmphdmEKQEAgLTQ5LDYgKzQ5LDE0IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19JU09MQVRFRF9QUk9DRVNTID0gMHgwMDAyOwogCiAgICAgLyoqCisgICAgICogQml0IGluIHtAbGluayAjZmxhZ3N9OiBJZiBzZXQsIHRoZSBzZXJ2aWNlIGNhbiBiZSBib3VuZCBhbmQgcnVuIGluIHRoZQorICAgICAqIGNhbGxpbmcgYXBwbGljYXRpb24ncyBwYWNrYWdlLCByYXRoZXIgdGhhbiB0aGUgcGFja2FnZSBpbiB3aGljaCBpdCBpcworICAgICAqIGRlY2xhcmVkLiAgU2V0IGZyb20ge0BsaW5rIGFuZHJvaWQuUi5hdHRyI2V4dGVybmFsU2VydmljZX0gYXR0cmlidXRlLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FWFRFUk5BTF9TRVJWSUNFID0gMHgwMDA0OworCisgICAgLyoqCiAgICAgICogQml0IGluIHtAbGluayAjZmxhZ3N9OiBJZiBzZXQsIGEgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBzZXJ2aWNlIHdpbGwKICAgICAgKiBydW4gZm9yIGFsbCB1c2VycyBvbiB0aGUgZGV2aWNlLiAgU2V0IGZyb20gdGhlCiAgICAgICoge0BsaW5rIGFuZHJvaWQuUi5hdHRyI3NpbmdsZVVzZXJ9IGF0dHJpYnV0ZS4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vVmVyaWZpY2F0aW9uUGFyYW1zLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3BtL1ZlcmlmaWNhdGlvblBhcmFtcy5qYXZhCmluZGV4IGU1MTE5YjYuLmY5MGQyOTUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcG0vVmVyaWZpY2F0aW9uUGFyYW1zLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXMuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5NYW5pZmVzdERpZ2VzdDsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwpAQCAtNTEsMTIgKzUwLDYgQEAKICAgICBwcml2YXRlIGludCBtSW5zdGFsbGVyVWlkOwogCiAgICAgLyoqCi0gICAgICogQW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGRpZ2VzdCBvZiB0aGUgcGFja2FnZSB3aGljaCBjYW4gYmUgdXNlZCB0bwotICAgICAqIHZlcmlmeSBvd25lcnNoaXAuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBNYW5pZmVzdERpZ2VzdCBtTWFuaWZlc3REaWdlc3Q7Ci0KLSAgICAvKioKICAgICAgKiBDcmVhdGVzIHZlcmlmaWNhdGlvbiBzcGVjaWZpY2F0aW9ucyBmb3IgaW5zdGFsbGluZyB3aXRoIGFwcGxpY2F0aW9uIHZlcmlmaWNhdGlvbi4KICAgICAgKgogICAgICAqIEBwYXJhbSB2ZXJpZmljYXRpb25VUkkgVGhlIGxvY2F0aW9uIG9mIHRoZSBzdXBwbGVtZW50YXJ5IHZlcmlmaWNhdGlvbgpAQCAtNjcsMTYgKzYwLDEzIEBACiAgICAgICogICAgICAgICAgICBNYXkgYmUge0Bjb2RlIG51bGx9LgogICAgICAqIEBwYXJhbSBvcmlnaW5hdGluZ1VpZCBVSUQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIGluc3RhbGwgcmVxdWVzdCBvcmlnaW5hdGVkCiAgICAgICogICAgICAgICAgICBmcm9tLCBvciBOT19VSUQgaWYgbm90IHByZXNlbnQKLSAgICAgKiBAcGFyYW0gbWFuaWZlc3REaWdlc3QgYW4gb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGRpZ2VzdCBvZiB0aGUgcGFja2FnZQotICAgICAqICAgICAgICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IG93bmVyc2hpcC4gTWF5IGJlIHtAY29kZSBudWxsfS4KICAgICAgKi8KICAgICBwdWJsaWMgVmVyaWZpY2F0aW9uUGFyYW1zKFVyaSB2ZXJpZmljYXRpb25VUkksIFVyaSBvcmlnaW5hdGluZ1VSSSwgVXJpIHJlZmVycmVyLAotICAgICAgICAgICAgaW50IG9yaWdpbmF0aW5nVWlkLCBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCkgeworICAgICAgICAgICAgaW50IG9yaWdpbmF0aW5nVWlkKSB7CiAgICAgICAgIG1WZXJpZmljYXRpb25VUkkgPSB2ZXJpZmljYXRpb25VUkk7CiAgICAgICAgIG1PcmlnaW5hdGluZ1VSSSA9IG9yaWdpbmF0aW5nVVJJOwogICAgICAgICBtUmVmZXJyZXIgPSByZWZlcnJlcjsKICAgICAgICAgbU9yaWdpbmF0aW5nVWlkID0gb3JpZ2luYXRpbmdVaWQ7Ci0gICAgICAgIG1NYW5pZmVzdERpZ2VzdCA9IG1hbmlmZXN0RGlnZXN0OwogICAgICAgICBtSW5zdGFsbGVyVWlkID0gTk9fVUlEOwogICAgIH0KIApAQCAtOTcsMTAgKzg3LDYgQEAKICAgICAgICAgcmV0dXJuIG1PcmlnaW5hdGluZ1VpZDsKICAgICB9CiAKLSAgICBwdWJsaWMgTWFuaWZlc3REaWdlc3QgZ2V0TWFuaWZlc3REaWdlc3QoKSB7Ci0gICAgICAgIHJldHVybiBtTWFuaWZlc3REaWdlc3Q7Ci0gICAgfQotCiAgICAgLyoqIEByZXR1cm4gTk9fVUlEIHdoZW4gbm90IHNldCAqLwogICAgIHB1YmxpYyBpbnQgZ2V0SW5zdGFsbGVyVWlkKCkgewogICAgICAgICByZXR1cm4gbUluc3RhbGxlclVpZDsKQEAgLTE1NSwxNCArMTQxLDYgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtTWFuaWZlc3REaWdlc3QgPT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1NYW5pZmVzdERpZ2VzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFtTWFuaWZlc3REaWdlc3QuZXF1YWxzKG90aGVyLm1NYW5pZmVzdERpZ2VzdCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChtSW5zdGFsbGVyVWlkICE9IG90aGVyLm1JbnN0YWxsZXJVaWQpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTc4LDggKzE1Niw3IEBACiAgICAgICAgIGhhc2ggKz0gNyAqIChtT3JpZ2luYXRpbmdVUkkgPT0gbnVsbCA/IDEgOiBtT3JpZ2luYXRpbmdVUkkuaGFzaENvZGUoKSk7CiAgICAgICAgIGhhc2ggKz0gMTEgKiAobVJlZmVycmVyID09IG51bGwgPyAxIDogbVJlZmVycmVyLmhhc2hDb2RlKCkpOwogICAgICAgICBoYXNoICs9IDEzICogbU9yaWdpbmF0aW5nVWlkOwotICAgICAgICBoYXNoICs9IDE3ICogKG1NYW5pZmVzdERpZ2VzdCA9PSBudWxsID8gMSA6IG1NYW5pZmVzdERpZ2VzdC5oYXNoQ29kZSgpKTsKLSAgICAgICAgaGFzaCArPSAxOSAqIG1JbnN0YWxsZXJVaWQ7CisgICAgICAgIGhhc2ggKz0gMTcgKiBtSW5zdGFsbGVyVWlkOwogCiAgICAgICAgIHJldHVybiBoYXNoOwogICAgIH0KQEAgLTE5Niw4ICsxNzMsNiBAQAogICAgICAgICBzYi5hcHBlbmQobVJlZmVycmVyLnRvU3RyaW5nKCkpOwogICAgICAgICBzYi5hcHBlbmQoIixtT3JpZ2luYXRpbmdVaWQ9Iik7CiAgICAgICAgIHNiLmFwcGVuZChtT3JpZ2luYXRpbmdVaWQpOwotICAgICAgICBzYi5hcHBlbmQoIixtTWFuaWZlc3REaWdlc3Q9Iik7Ci0gICAgICAgIHNiLmFwcGVuZChtTWFuaWZlc3REaWdlc3QudG9TdHJpbmcoKSk7CiAgICAgICAgIHNiLmFwcGVuZCgiLG1JbnN0YWxsZXJVaWQ9Iik7CiAgICAgICAgIHNiLmFwcGVuZChtSW5zdGFsbGVyVWlkKTsKICAgICAgICAgc2IuYXBwZW5kKCd9Jyk7CkBAIC0yMTEsNyArMTg2LDYgQEAKICAgICAgICAgZGVzdC53cml0ZVBhcmNlbGFibGUobU9yaWdpbmF0aW5nVVJJLCAwKTsKICAgICAgICAgZGVzdC53cml0ZVBhcmNlbGFibGUobVJlZmVycmVyLCAwKTsKICAgICAgICAgZGVzdC53cml0ZUludChtT3JpZ2luYXRpbmdVaWQpOwotICAgICAgICBkZXN0LndyaXRlUGFyY2VsYWJsZShtTWFuaWZlc3REaWdlc3QsIDApOwogICAgICAgICBkZXN0LndyaXRlSW50KG1JbnN0YWxsZXJVaWQpOwogICAgIH0KIApAQCAtMjIxLDcgKzE5NSw2IEBACiAgICAgICAgIG1PcmlnaW5hdGluZ1VSSSA9IHNvdXJjZS5yZWFkUGFyY2VsYWJsZShVcmkuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgIG1SZWZlcnJlciA9IHNvdXJjZS5yZWFkUGFyY2VsYWJsZShVcmkuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSk7CiAgICAgICAgIG1PcmlnaW5hdGluZ1VpZCA9IHNvdXJjZS5yZWFkSW50KCk7Ci0gICAgICAgIG1NYW5pZmVzdERpZ2VzdCA9IHNvdXJjZS5yZWFkUGFyY2VsYWJsZShNYW5pZmVzdERpZ2VzdC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgbUluc3RhbGxlclVpZCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL0Fzc2V0TWFuYWdlci5qYXZhCmluZGV4IDc2NjkwNTNjLi43YjBiOThkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXIuamF2YQpAQCAtMTYsNiArMTYsMTEgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucmVzOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkFueVJlczsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uQXJyYXlSZXM7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdHJpbmdSZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKQEAgLTE0Miw4MCArMTQ3LDk1IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHN0cmluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlCi0gICAgICogaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiAvIHNraW4uCisgICAgICogUmV0cmlldmVzIHRoZSBzdHJpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciByZXNvdXJjZQorICAgICAqIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gcmVzSWQgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgdG8gbG9hZAorICAgICAqIEByZXR1cm4gdGhlIHN0cmluZyB2YWx1ZSwgb3Ige0Bjb2RlIG51bGx9CiAgICAgICovCi0gICAgLypwYWNrYWdlKi8gZmluYWwgQ2hhclNlcXVlbmNlIGdldFJlc291cmNlVGV4dChpbnQgaWRlbnQpIHsKKyAgICBATnVsbGFibGUKKyAgICBmaW5hbCBDaGFyU2VxdWVuY2UgZ2V0UmVzb3VyY2VUZXh0KEBTdHJpbmdSZXMgaW50IHJlc0lkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgVHlwZWRWYWx1ZSB0bXBWYWx1ZSA9IG1WYWx1ZTsKLSAgICAgICAgICAgIGludCBibG9jayA9IGxvYWRSZXNvdXJjZVZhbHVlKGlkZW50LCAoc2hvcnQpIDAsIHRtcFZhbHVlLCB0cnVlKTsKLSAgICAgICAgICAgIGlmIChibG9jayA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRtcFZhbHVlLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORykgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVN0cmluZ0Jsb2Nrc1tibG9ja10uZ2V0KHRtcFZhbHVlLmRhdGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdG1wVmFsdWUuY29lcmNlVG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGZpbmFsIFR5cGVkVmFsdWUgb3V0VmFsdWUgPSBtVmFsdWU7CisgICAgICAgICAgICBpZiAoZ2V0UmVzb3VyY2VWYWx1ZShyZXNJZCwgMCwgb3V0VmFsdWUsIHRydWUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG91dFZhbHVlLmNvZXJjZVRvU3RyaW5nKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXRyaWV2ZSB0aGUgc3RyaW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgcmVzb3VyY2UKLSAgICAgKiBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIC8gc2tpbi4KKyAgICAgKiBSZXRyaWV2ZXMgdGhlIHN0cmluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlCisgICAgICogaWRlbnRpZmllciBmb3IgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZXNJZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciB0byBsb2FkCisgICAgICogQHBhcmFtIGJhZ0VudHJ5SWQKKyAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgdmFsdWUsIG9yIHtAY29kZSBudWxsfQogICAgICAqLwotICAgIC8qcGFja2FnZSovIGZpbmFsIENoYXJTZXF1ZW5jZSBnZXRSZXNvdXJjZUJhZ1RleHQoaW50IGlkZW50LCBpbnQgYmFnRW50cnlJZCkgeworICAgIEBOdWxsYWJsZQorICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBnZXRSZXNvdXJjZUJhZ1RleHQoQFN0cmluZ1JlcyBpbnQgcmVzSWQsIGludCBiYWdFbnRyeUlkKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgVHlwZWRWYWx1ZSB0bXBWYWx1ZSA9IG1WYWx1ZTsKLSAgICAgICAgICAgIGludCBibG9jayA9IGxvYWRSZXNvdXJjZUJhZ1ZhbHVlKGlkZW50LCBiYWdFbnRyeUlkLCB0bXBWYWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBpZiAoYmxvY2sgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmICh0bXBWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TdHJpbmdCbG9ja3NbYmxvY2tdLmdldCh0bXBWYWx1ZS5kYXRhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRtcFZhbHVlLmNvZXJjZVRvU3RyaW5nKCk7CisgICAgICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIG91dFZhbHVlID0gbVZhbHVlOworICAgICAgICAgICAgZmluYWwgaW50IGJsb2NrID0gbG9hZFJlc291cmNlQmFnVmFsdWUocmVzSWQsIGJhZ0VudHJ5SWQsIG91dFZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChibG9jayA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvdXRWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbVN0cmluZ0Jsb2Nrc1tibG9ja10uZ2V0KG91dFZhbHVlLmRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG91dFZhbHVlLmNvZXJjZVRvU3RyaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0cmlldmUgdGhlIHN0cmluZyBhcnJheSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlCi0gICAgICogaWRlbnRpZmllci4KLSAgICAgKiBAcGFyYW0gaWQgUmVzb3VyY2UgaWQgb2YgdGhlIHN0cmluZyBhcnJheQorICAgICAqIFJldHJpZXZlcyB0aGUgc3RyaW5nIGFycmF5IGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgcmVzb3VyY2UKKyAgICAgKiBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHJlc0lkIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIG9mIHRoZSBzdHJpbmcgYXJyYXkKKyAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgYXJyYXksIG9yIHtAY29kZSBudWxsfQogICAgICAqLwotICAgIC8qcGFja2FnZSovIGZpbmFsIFN0cmluZ1tdIGdldFJlc291cmNlU3RyaW5nQXJyYXkoZmluYWwgaW50IGlkKSB7Ci0gICAgICAgIFN0cmluZ1tdIHJldEFycmF5ID0gZ2V0QXJyYXlTdHJpbmdSZXNvdXJjZShpZCk7Ci0gICAgICAgIHJldHVybiByZXRBcnJheTsKKyAgICBATnVsbGFibGUKKyAgICBmaW5hbCBTdHJpbmdbXSBnZXRSZXNvdXJjZVN0cmluZ0FycmF5KEBBcnJheVJlcyBpbnQgcmVzSWQpIHsKKyAgICAgICAgcmV0dXJuIGdldEFycmF5U3RyaW5nUmVzb3VyY2UocmVzSWQpOwogICAgIH0KIAotCi0gICAgLypwYWNrYWdlKi8gZmluYWwgYm9vbGVhbiBnZXRSZXNvdXJjZVZhbHVlKGludCBpZGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlbnNpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVkVmFsdWUgb3V0VmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVzb2x2ZVJlZnMpCi0gICAgewotICAgICAgICBpbnQgYmxvY2sgPSBsb2FkUmVzb3VyY2VWYWx1ZShpZGVudCwgKHNob3J0KSBkZW5zaXR5LCBvdXRWYWx1ZSwgcmVzb2x2ZVJlZnMpOwotICAgICAgICBpZiAoYmxvY2sgPj0gMCkgewotICAgICAgICAgICAgaWYgKG91dFZhbHVlLnR5cGUgIT0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORykgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQorICAgIC8qKgorICAgICAqIFBvcHVsYXRlcyB7QGNvZGUgb3V0VmFsdWV9IHdpdGggdGhlIGRhdGEgYXNzb2NpYXRlZCBhIHBhcnRpY3VsYXIKKyAgICAgKiByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHJlc0lkIHRoZSByZXNvdXJjZSBpZGVudGlmaWVyIHRvIGxvYWQKKyAgICAgKiBAcGFyYW0gZGVuc2l0eURwaSB0aGUgZGVuc2l0eSBidWNrZXQgZm9yIHdoaWNoIHRvIGxvYWQgdGhlIHJlc291cmNlCisgICAgICogQHBhcmFtIG91dFZhbHVlIHRoZSB0eXBlZCB2YWx1ZSBpbiB3aGljaCB0byBwdXQgdGhlIGRhdGEKKyAgICAgKiBAcGFyYW0gcmVzb2x2ZVJlZnMge0Bjb2RlIHRydWV9IHRvIHJlc29sdmUgcmVmZXJlbmNlcywge0Bjb2RlIGZhbHNlfQorICAgICAqICAgICAgICAgICAgICAgICAgICB0byBsZWF2ZSB0aGVtIHVucmVzb2x2ZWQKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgZGF0YSB3YXMgbG9hZGVkIGludG8ge0Bjb2RlIG91dFZhbHVlfSwKKyAgICAgKiAgICAgICAgIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisgICAgICovCisgICAgZmluYWwgYm9vbGVhbiBnZXRSZXNvdXJjZVZhbHVlKEBBbnlSZXMgaW50IHJlc0lkLCBpbnQgZGVuc2l0eURwaSwgQE5vbk51bGwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwKKyAgICAgICAgICAgIGJvb2xlYW4gcmVzb2x2ZVJlZnMpIHsKKyAgICAgICAgZmluYWwgaW50IGJsb2NrID0gbG9hZFJlc291cmNlVmFsdWUocmVzSWQsIChzaG9ydCkgZGVuc2l0eURwaSwgb3V0VmFsdWUsIHJlc29sdmVSZWZzKTsKKyAgICAgICAgaWYgKGJsb2NrIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChvdXRWYWx1ZS50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9TVFJJTkcpIHsKICAgICAgICAgICAgIG91dFZhbHVlLnN0cmluZyA9IG1TdHJpbmdCbG9ja3NbYmxvY2tdLmdldChvdXRWYWx1ZS5kYXRhKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgdGhlIHRleHQgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciByZXNvdXJjZQogICAgICAqIGlkZW50aWZpZXIuCi0gICAgICogQHBhcmFtIGlkIFJlc291cmNlIGlkIG9mIHRoZSBzdHJpbmcgYXJyYXkKKyAgICAgKgorICAgICAqIEBwYXJhbSByZXNJZCB0aGUgcmVzb3VyY2UgaWQgb2YgdGhlIHN0cmluZyBhcnJheQogICAgICAqLwotICAgIC8qcGFja2FnZSovIGZpbmFsIENoYXJTZXF1ZW5jZVtdIGdldFJlc291cmNlVGV4dEFycmF5KGZpbmFsIGludCBpZCkgewotICAgICAgICBpbnRbXSByYXdJbmZvQXJyYXkgPSBnZXRBcnJheVN0cmluZ0luZm8oaWQpOwotICAgICAgICBpbnQgcmF3SW5mb0FycmF5TGVuID0gcmF3SW5mb0FycmF5Lmxlbmd0aDsKKyAgICBmaW5hbCBDaGFyU2VxdWVuY2VbXSBnZXRSZXNvdXJjZVRleHRBcnJheShAQXJyYXlSZXMgaW50IHJlc0lkKSB7CisgICAgICAgIGZpbmFsIGludFtdIHJhd0luZm9BcnJheSA9IGdldEFycmF5U3RyaW5nSW5mbyhyZXNJZCk7CisgICAgICAgIGZpbmFsIGludCByYXdJbmZvQXJyYXlMZW4gPSByYXdJbmZvQXJyYXkubGVuZ3RoOwogICAgICAgICBmaW5hbCBpbnQgaW5mb0FycmF5TGVuID0gcmF3SW5mb0FycmF5TGVuIC8gMjsKICAgICAgICAgaW50IGJsb2NrOwogICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgIENoYXJTZXF1ZW5jZVtdIHJldEFycmF5ID0gbmV3IENoYXJTZXF1ZW5jZVtpbmZvQXJyYXlMZW5dOworICAgICAgICBmaW5hbCBDaGFyU2VxdWVuY2VbXSByZXRBcnJheSA9IG5ldyBDaGFyU2VxdWVuY2VbaW5mb0FycmF5TGVuXTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGogPSAwOyBpIDwgcmF3SW5mb0FycmF5TGVuOyBpID0gaSArIDIsIGorKykgewogICAgICAgICAgICAgYmxvY2sgPSByYXdJbmZvQXJyYXlbaV07CiAgICAgICAgICAgICBpbmRleCA9IHJhd0luZm9BcnJheVtpICsgMV07CkBAIC0yMjMsMzIgKzI0Myw0NSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXRBcnJheTsKICAgICB9Ci0gICAgCi0gICAgLypwYWNrYWdlKi8gZmluYWwgYm9vbGVhbiBnZXRUaGVtZVZhbHVlKGxvbmcgdGhlbWUsIGludCBpZGVudCwKLSAgICAgICAgICAgIFR5cGVkVmFsdWUgb3V0VmFsdWUsIGJvb2xlYW4gcmVzb2x2ZVJlZnMpIHsKLSAgICAgICAgaW50IGJsb2NrID0gbG9hZFRoZW1lQXR0cmlidXRlVmFsdWUodGhlbWUsIGlkZW50LCBvdXRWYWx1ZSwgcmVzb2x2ZVJlZnMpOwotICAgICAgICBpZiAoYmxvY2sgPj0gMCkgewotICAgICAgICAgICAgaWYgKG91dFZhbHVlLnR5cGUgIT0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORykgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nQmxvY2tbXSBibG9ja3MgPSBtU3RyaW5nQmxvY2tzOwotICAgICAgICAgICAgaWYgKGJsb2NrcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZW5zdXJlU3RyaW5nQmxvY2tzKCk7Ci0gICAgICAgICAgICAgICAgYmxvY2tzID0gbVN0cmluZ0Jsb2NrczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dFZhbHVlLnN0cmluZyA9IGJsb2Nrc1tibG9ja10uZ2V0KG91dFZhbHVlLmRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvKioKKyAgICAgKiBQb3B1bGF0ZXMge0Bjb2RlIG91dFZhbHVlfSB3aXRoIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIKKyAgICAgKiByZXNvdXJjZSBpZGVudGlmaWVyIGZvciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBSZXNvbHZlcyB0aGVtZQorICAgICAqIGF0dHJpYnV0ZXMgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRoZW1lLgorICAgICAqCisgICAgICogQHBhcmFtIHRoZW1lIHRoZSBuYXRpdmUgcG9pbnRlciBvZiB0aGUgdGhlbWUKKyAgICAgKiBAcGFyYW0gcmVzSWQgdGhlIHJlc291cmNlIGlkZW50aWZpZXIgdG8gbG9hZAorICAgICAqIEBwYXJhbSBvdXRWYWx1ZSB0aGUgdHlwZWQgdmFsdWUgaW4gd2hpY2ggdG8gcHV0IHRoZSBkYXRhCisgICAgICogQHBhcmFtIHJlc29sdmVSZWZzIHtAY29kZSB0cnVlfSB0byByZXNvbHZlIHJlZmVyZW5jZXMsIHtAY29kZSBmYWxzZX0KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgdG8gbGVhdmUgdGhlbSB1bnJlc29sdmVkCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGRhdGEgd2FzIGxvYWRlZCBpbnRvIHtAY29kZSBvdXRWYWx1ZX0sCisgICAgICogICAgICAgICB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZQorICAgICAqLworICAgIGZpbmFsIGJvb2xlYW4gZ2V0VGhlbWVWYWx1ZShsb25nIHRoZW1lLCBAQW55UmVzIGludCByZXNJZCwgQE5vbk51bGwgVHlwZWRWYWx1ZSBvdXRWYWx1ZSwKKyAgICAgICAgICAgIGJvb2xlYW4gcmVzb2x2ZVJlZnMpIHsKKyAgICAgICAgZmluYWwgaW50IGJsb2NrID0gbG9hZFRoZW1lQXR0cmlidXRlVmFsdWUodGhlbWUsIHJlc0lkLCBvdXRWYWx1ZSwgcmVzb2x2ZVJlZnMpOworICAgICAgICBpZiAoYmxvY2sgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3V0VmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfU1RSSU5HKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmdCbG9ja1tdIGJsb2NrcyA9IGVuc3VyZVN0cmluZ0Jsb2NrcygpOworICAgICAgICAgICAgb3V0VmFsdWUuc3RyaW5nID0gYmxvY2tzW2Jsb2NrXS5nZXQob3V0VmFsdWUuZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgLypwYWNrYWdlKi8gZmluYWwgdm9pZCBlbnN1cmVTdHJpbmdCbG9ja3MoKSB7Ci0gICAgICAgIGlmIChtU3RyaW5nQmxvY2tzID09IG51bGwpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgICAgIGlmIChtU3RyaW5nQmxvY2tzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbWFrZVN0cmluZ0Jsb2NrcyhzU3lzdGVtLm1TdHJpbmdCbG9ja3MpOwotICAgICAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBFbnN1cmVzIHRoZSBzdHJpbmcgYmxvY2tzIGFyZSBsb2FkZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcgYmxvY2tzCisgICAgICovCisgICAgQE5vbk51bGwKKyAgICBmaW5hbCBTdHJpbmdCbG9ja1tdIGVuc3VyZVN0cmluZ0Jsb2NrcygpIHsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBpZiAobVN0cmluZ0Jsb2NrcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbWFrZVN0cmluZ0Jsb2NrcyhzU3lzdGVtLm1TdHJpbmdCbG9ja3MpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1TdHJpbmdCbG9ja3M7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY5OCw2ICs3MzEsMTggQEAKICAgICAgKi8KICAgICBwdWJsaWMgbmF0aXZlIGZpbmFsIFN0cmluZ1tdIGdldExvY2FsZXMoKTsKIAorICAgIC8qKgorICAgICAqIFNhbWUgYXMgZ2V0TG9jYWxlcygpLCBleGNlcHQgdGhhdCBsb2NhbGVzIHRoYXQgYXJlIG9ubHkgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSAoaS5lLiB0aG9zZQorICAgICAqIHByZXNlbnQgaW4gZnJhbWV3b3JrLXJlcy5hcGsgb3IgaXRzIG92ZXJsYXlzKSB3aWxsIG5vdCBiZSBsaXN0ZWQuCisgICAgICoKKyAgICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlICJzeXN0ZW0iIGFzc2V0cyBzdXBwb3J0IEVuZ2xpc2gsIEZyZW5jaCwgYW5kIEdlcm1hbiwgYW5kIHRoZSBhZGRpdGlvbmFsCisgICAgICogYXNzZXRzIHN1cHBvcnQgQ2hlcm9rZWUgYW5kIEZyZW5jaCwgZ2V0TG9jYWxlcygpIHdvdWxkIHJldHVybgorICAgICAqIFtDaGVyb2tlZSwgRW5nbGlzaCwgRnJlbmNoLCBHZXJtYW5dLCB3aGlsZSBnZXROb25TeXN0ZW1Mb2NhbGVzKCkgd291bGQgcmV0dXJuCisgICAgICogW0NoZXJva2VlLCBGcmVuY2hdLgorICAgICAqIHtAaGlkZX0KKyAgICAgKi8KKyAgICBwdWJsaWMgbmF0aXZlIGZpbmFsIFN0cmluZ1tdIGdldE5vblN5c3RlbUxvY2FsZXMoKTsKKwogICAgIC8qKiB7QGhpZGV9ICovCiAgICAgcHVibGljIG5hdGl2ZSBmaW5hbCBDb25maWd1cmF0aW9uW10gZ2V0U2l6ZUNvbmZpZ3VyYXRpb25zKCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzLmphdmEKaW5kZXggY2RjYTg2OTguLjdiNTZlZWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlcy5qYXZhCkBAIC0xNTEsOCArMTUxLDkgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtUHJlbG9hZGluZzsKIAorICAgIC8vIEN5Y2xpY2FsIGNhY2hlIHVzZWQgZm9yIHJlY2VudGx5LWFjY2Vzc2VkIFhNTCBmaWxlcy4KICAgICBwcml2YXRlIGludCBtTGFzdENhY2hlZFhtbEJsb2NrSW5kZXggPSAtMTsKLSAgICBwcml2YXRlIGZpbmFsIGludFtdIG1DYWNoZWRYbWxCbG9ja0lkcyA9IHsgMCwgMCwgMCwgMCB9OworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbUNhY2hlZFhtbEJsb2NrRmlsZXMgPSBuZXcgU3RyaW5nWzRdOwogICAgIHByaXZhdGUgZmluYWwgWG1sQmxvY2tbXSBtQ2FjaGVkWG1sQmxvY2tzID0gbmV3IFhtbEJsb2NrWzRdOwogCiAgICAgZmluYWwgQXNzZXRNYW5hZ2VyIG1Bc3NldHM7CkBAIC0xNjAsNiArMTYxLDcgQEAKICAgICBmaW5hbCBEaXNwbGF5TWV0cmljcyBtTWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBDb25maWd1cmF0aW9uIG1Db25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTsKKyAgICBwcml2YXRlIExvY2FsZSBtUmVzb2x2ZWRMb2NhbGUgPSBudWxsOwogICAgIHByaXZhdGUgUGx1cmFsUnVsZXMgbVBsdXJhbFJ1bGU7CiAKICAgICBwcml2YXRlIENvbXBhdGliaWxpdHlJbmZvIG1Db21wYXRpYmlsaXR5SW5mbyA9IENvbXBhdGliaWxpdHlJbmZvLkRFRkFVTFRfQ09NUEFUSUJJTElUWV9JTkZPOwpAQCAtMzE1LDYgKzMxNywxNiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgTG9jYWxlIHJlc3VsdGluZyBmcm9tIGxvY2FsZSBuZWdvdGlhdGlvbiBiZXR3ZWVuIHRoZSBSZXNvdXJjZXMgYW5kIHRoZQorICAgICAqIENvbmZpZ3VyYXRpb24gb2JqZWN0cyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgUmVzb3VyY2VzLiBUaGUgbG9jYWxlIGlzIHVzZWQgZm9yIHJldHJpZXZpbmcKKyAgICAgKiByZXNvdXJjZXMgYXMgd2VsbCBhcyBmb3IgZGV0ZXJtaW5pbmcgcGx1cmFsIHJ1bGVzLgorICAgICAqLworICAgIEBOb25OdWxsCisgICAgcHVibGljIExvY2FsZSBnZXRSZXNvbHZlZExvY2FsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1SZXNvbHZlZExvY2FsZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHJlc291cmNlIElELiAgVGhlCiAgICAgICogcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgYSBTdHJpbmcgaWYgdGhpcyBpcyBhIHBsYWluIHN0cmluZzsgaXQgd2lsbCBiZQogICAgICAqIHNvbWUgb3RoZXIgdHlwZSBvZiBDaGFyU2VxdWVuY2UgaWYgaXQgaXMgc3R5bGVkLgpAQCAtMzc4LDcgKzM5MCw3IEBACiAgICAgcHJpdmF0ZSBQbHVyYWxSdWxlcyBnZXRQbHVyYWxSdWxlKCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHNTeW5jKSB7CiAgICAgICAgICAgICBpZiAobVBsdXJhbFJ1bGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1QbHVyYWxSdWxlID0gUGx1cmFsUnVsZXMuZm9yTG9jYWxlKG1Db25maWd1cmF0aW9uLmdldExvY2FsZXMoKS5nZXRQcmltYXJ5KCkpOworICAgICAgICAgICAgICAgIG1QbHVyYWxSdWxlID0gUGx1cmFsUnVsZXMuZm9yTG9jYWxlKG1SZXNvbHZlZExvY2FsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbVBsdXJhbFJ1bGU7CiAgICAgICAgIH0KQEAgLTQ0MSw3ICs0NTMsNyBAQAogICAgIEBOb25OdWxsCiAgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoQFN0cmluZ1JlcyBpbnQgaWQsIE9iamVjdC4uLiBmb3JtYXRBcmdzKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBTdHJpbmcgcmF3ID0gZ2V0U3RyaW5nKGlkKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQobUNvbmZpZ3VyYXRpb24uZ2V0TG9jYWxlcygpLmdldFByaW1hcnkoKSwgcmF3LCBmb3JtYXRBcmdzKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQobVJlc29sdmVkTG9jYWxlLCByYXcsIGZvcm1hdEFyZ3MpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDcyLDcgKzQ4NCw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRRdWFudGl0eVN0cmluZyhAUGx1cmFsc1JlcyBpbnQgaWQsIGludCBxdWFudGl0eSwgT2JqZWN0Li4uIGZvcm1hdEFyZ3MpCiAgICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgcmF3ID0gZ2V0UXVhbnRpdHlUZXh0KGlkLCBxdWFudGl0eSkudG9TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQobUNvbmZpZ3VyYXRpb24uZ2V0TG9jYWxlcygpLmdldFByaW1hcnkoKSwgcmF3LCBmb3JtYXRBcmdzKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQobVJlc29sdmVkTG9jYWxlLCByYXcsIGZvcm1hdEFyZ3MpOwogICAgIH0KIAogICAgIC8qKgpAQCAtODU1LDYgKzg2NywxMSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgZ2V0VmFsdWVGb3JEZW5zaXR5KGlkLCBkZW5zaXR5LCB2YWx1ZSwgdHJ1ZSk7CiAKKyAgICAgICAgICAgIC8vIElmIHRoZSBkcmF3YWJsZSdzIFhNTCBsaXZlcyBpbiBvdXIgY3VycmVudCBkZW5zaXR5IHF1YWxpZmllciwKKyAgICAgICAgICAgIC8vIGl0J3Mgb2theSB0byB1c2UgYSBzY2FsZWQgdmVyc2lvbiBmcm9tIHRoZSBjYWNoZS4gT3RoZXJ3aXNlLCB3ZQorICAgICAgICAgICAgLy8gbmVlZCB0byBhY3R1YWxseSBsb2FkIHRoZSBkcmF3YWJsZSBmcm9tIFhNTC4KKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlQ2FjaGUgPSB2YWx1ZS5kZW5zaXR5ID09IG1NZXRyaWNzLmRlbnNpdHlEcGk7CisKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBQcmV0ZW5kIHRoZSByZXF1ZXN0ZWQgZGVuc2l0eSBpcyBhY3R1YWxseSB0aGUgZGlzcGxheSBkZW5zaXR5LiBJZgogICAgICAgICAgICAgICogdGhlIGRyYXdhYmxlIHJldHVybmVkIGlzIG5vdCB0aGUgcmVxdWVzdGVkIGRlbnNpdHksIHRoZW4gZm9yY2UgaXQKQEAgLTg3MCw3ICs4ODcsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIGxvYWREcmF3YWJsZSh2YWx1ZSwgaWQsIHRoZW1lKTsKKyAgICAgICAgICAgIHJldHVybiBsb2FkRHJhd2FibGUodmFsdWUsIGlkLCB0aGVtZSwgdXNlQ2FjaGUpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgcmVsZWFzZVRlbXBUeXBlZFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQpAQCAtMTkzMSw4ICsxOTQ4LDEwIEBACiAgICAgICAgICAgICBtQ29tcGF0aWJpbGl0eUluZm8uYXBwbHlUb0Rpc3BsYXlNZXRyaWNzKG1NZXRyaWNzKTsKIAogICAgICAgICAgICAgZmluYWwgaW50IGNvbmZpZ0NoYW5nZXMgPSBjYWxjQ29uZmlnQ2hhbmdlcyhjb25maWcpOworCiAgICAgICAgICAgICBMb2NhbGVMaXN0IGxvY2FsZXMgPSBtQ29uZmlndXJhdGlvbi5nZXRMb2NhbGVzKCk7Ci0gICAgICAgICAgICBpZiAobG9jYWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2V0TG9jYWxlc1RvRGVmYXVsdCA9IGxvY2FsZXMuaXNFbXB0eSgpOworICAgICAgICAgICAgaWYgKHNldExvY2FsZXNUb0RlZmF1bHQpIHsKICAgICAgICAgICAgICAgICBsb2NhbGVzID0gTG9jYWxlTGlzdC5nZXREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgbUNvbmZpZ3VyYXRpb24uc2V0TG9jYWxlcyhsb2NhbGVzKTsKICAgICAgICAgICAgIH0KQEAgLTE5NjEsOSArMTk4MCwyNiBAQAogICAgICAgICAgICAgICAgIGtleWJvYXJkSGlkZGVuID0gbUNvbmZpZ3VyYXRpb24ua2V5Ym9hcmRIaWRkZW47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRPRE86IFBhc3MgdGhlIHdob2xlIGxvY2FsZSBsaXN0IHRvIHNldENvbmZpZ3VyYXRpb24oKQorICAgICAgICAgICAgaWYgKHNldExvY2FsZXNUb0RlZmF1bHQgfHwgbVJlc29sdmVkTG9jYWxlID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgfHwgKGNvbmZpZ0NoYW5nZXMgJiBDb25maWd1cmF0aW9uLk5BVElWRV9DT05GSUdfTE9DQUxFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGxvY2FsZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdG8gYXZvaWQgdGhlIEpOSSBjYWxsKHMpIHdoZW4gdGhlIHJlc3VsdCBvZgorICAgICAgICAgICAgICAgICAgICAvLyBnZXRGaXJzdE1hdGNoV2l0aEVuZ2xpc2hTdXBwb3J0ZWQoKSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHN1cHBvcnRlZCBsb2NhbGVzLgorICAgICAgICAgICAgICAgICAgICBtUmVzb2x2ZWRMb2NhbGUgPSBsb2NhbGVzLmdldFByaW1hcnkoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBzdXBwb3J0ZWRMb2NhbGVzID0gbUFzc2V0cy5nZXROb25TeXN0ZW1Mb2NhbGVzKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChMb2NhbGVMaXN0LmlzUHNldWRvTG9jYWxlc09ubHkoc3VwcG9ydGVkTG9jYWxlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGZhbGxiYWNrIHRvIGFsbCBsb2NhbGVzIChpbmNsdWRpbmcgc3lzdGVtIGxvY2FsZXMpIGlmIHRoZXJlIHdhcyBubworICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWxlIHNwZWNpZmljYWxseSBzdXBwb3J0ZWQgYnkgdGhlIGFzc2V0cy4gVGhpcyBpcyB0byBwcm9wZXJseSBzdXBwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHBzIHRoYXQgb25seSByZWx5IG9uIHRoZSBzaGFyZWQgc3lzdGVtIGFzc2V0cyBhbmQgZG9uJ3QgbmVlZCBhc3NldHMgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZWlyIG93bi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMgPSBtQXNzZXRzLmdldExvY2FsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtUmVzb2x2ZWRMb2NhbGUgPSBsb2NhbGVzLmdldEZpcnN0TWF0Y2hXaXRoRW5nbGlzaFN1cHBvcnRlZChzdXBwb3J0ZWRMb2NhbGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtQXNzZXRzLnNldENvbmZpZ3VyYXRpb24obUNvbmZpZ3VyYXRpb24ubWNjLCBtQ29uZmlndXJhdGlvbi5tbmMsCi0gICAgICAgICAgICAgICAgICAgIGFkanVzdExhbmd1YWdlVGFnKGxvY2FsZXMuZ2V0UHJpbWFyeSgpLnRvTGFuZ3VhZ2VUYWcoKSksCisgICAgICAgICAgICAgICAgICAgIGFkanVzdExhbmd1YWdlVGFnKG1SZXNvbHZlZExvY2FsZS50b0xhbmd1YWdlVGFnKCkpLAogICAgICAgICAgICAgICAgICAgICBtQ29uZmlndXJhdGlvbi5vcmllbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgbUNvbmZpZ3VyYXRpb24udG91Y2hzY3JlZW4sCiAgICAgICAgICAgICAgICAgICAgIG1Db25maWd1cmF0aW9uLmRlbnNpdHlEcGksIG1Db25maWd1cmF0aW9uLmtleWJvYXJkLApAQCAtMTk4OCw3ICsyMDI0LDcgQEAKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKHNTeW5jKSB7CiAgICAgICAgICAgICBpZiAobVBsdXJhbFJ1bGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1QbHVyYWxSdWxlID0gUGx1cmFsUnVsZXMuZm9yTG9jYWxlKG1Db25maWd1cmF0aW9uLmdldExvY2FsZXMoKS5nZXRQcmltYXJ5KCkpOworICAgICAgICAgICAgICAgIG1QbHVyYWxSdWxlID0gUGx1cmFsUnVsZXMuZm9yTG9jYWxlKG1SZXNvbHZlZExvY2FsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzM1LDE2ICsyMzcxLDE3IEBACiAgICAgICogdG9vbHMuCiAgICAgICovCiAgICAgcHVibGljIGZpbmFsIHZvaWQgZmx1c2hMYXlvdXRDYWNoZSgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtQ2FjaGVkWG1sQmxvY2tJZHMpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0IHNlZSBpZiB0aGlzIGJsb2NrIGlzIGluIG91ciBjYWNoZS4KLSAgICAgICAgICAgIGZpbmFsIGludCBudW0gPSBtQ2FjaGVkWG1sQmxvY2tJZHMubGVuZ3RoOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG51bTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2NrSWRzW2ldID0gLTA7Ci0gICAgICAgICAgICAgICAgWG1sQmxvY2sgb2xkQmxvY2sgPSBtQ2FjaGVkWG1sQmxvY2tzW2ldOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBjYWNoZWRYbWxCbG9ja0ZpbGVzID0gbUNhY2hlZFhtbEJsb2NrRmlsZXM7CisgICAgICAgIGZpbmFsIFhtbEJsb2NrW10gY2FjaGVkWG1sQmxvY2tzID0gbUNhY2hlZFhtbEJsb2NrczsKKyAgICAgICAgc3luY2hyb25pemVkIChjYWNoZWRYbWxCbG9ja0ZpbGVzKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgbnVtID0gY2FjaGVkWG1sQmxvY2tGaWxlcy5sZW5ndGg7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgWG1sQmxvY2sgb2xkQmxvY2sgPSBjYWNoZWRYbWxCbG9ja3NbaV07CiAgICAgICAgICAgICAgICAgaWYgKG9sZEJsb2NrICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgb2xkQmxvY2suY2xvc2UoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2Nrc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tGaWxlc1tpXSA9IG51bGw7CisgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tzW2ldID0gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI0MjEsNiArMjQ1OCwxMiBAQAogCiAgICAgQE51bGxhYmxlCiAgICAgRHJhd2FibGUgbG9hZERyYXdhYmxlKFR5cGVkVmFsdWUgdmFsdWUsIGludCBpZCwgVGhlbWUgdGhlbWUpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBsb2FkRHJhd2FibGUodmFsdWUsIGlkLCB0aGVtZSwgdHJ1ZSk7CisgICAgfQorCisgICAgQE51bGxhYmxlCisgICAgRHJhd2FibGUgbG9hZERyYXdhYmxlKFR5cGVkVmFsdWUgdmFsdWUsIGludCBpZCwgVGhlbWUgdGhlbWUsIGJvb2xlYW4gdXNlQ2FjaGUpCisgICAgICAgICAgICB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKFRSQUNFX0ZPUl9QUkVMT0FEKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9nIG9ubHkgZnJhbWV3b3JrIHJlc291cmNlcwpAQCAtMjQ0NywxNiArMjQ5MCwxNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgY2FjaGVkIHZlcnNpb24gb2YgdGhpcyBkcmF3YWJsZQotICAgICAgICAgICAgLy8gdGhhdCB3YXMgaW5mbGF0ZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRoZW1lLgotICAgICAgICAgICAgaWYgKCFtUHJlbG9hZGluZykgeworICAgICAgICAgICAgLy8gdGhhdCB3YXMgaW5mbGF0ZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIHRoZW1lLiBTa2lwIHRoZSBjYWNoZSBpZgorICAgICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IHByZWxvYWRpbmcgb3Igd2UncmUgbm90IHVzaW5nIHRoZSBjYWNoZS4KKyAgICAgICAgICAgIGlmICghbVByZWxvYWRpbmcgJiYgdXNlQ2FjaGUpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBEcmF3YWJsZSBjYWNoZWREcmF3YWJsZSA9IGNhY2hlcy5nZXRJbnN0YW5jZShrZXksIHRoZW1lKTsKICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkRHJhd2FibGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBOZXh0LCBjaGVjayBwcmVsb2FkZWQgZHJhd2FibGVzLiBUaGVzZSBtYXkgY29udGFpbiB1bnJlc29sdmVkIHRoZW1lCi0gICAgICAgICAgICAvLyBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgLy8gTmV4dCwgY2hlY2sgcHJlbG9hZGVkIGRyYXdhYmxlcy4gUHJlbG9hZGVkIGRyYXdhYmxlcyBtYXkgY29udGFpbgorICAgICAgICAgICAgLy8gdW5yZXNvbHZlZCB0aGVtZSBhdHRyaWJ1dGVzLgogICAgICAgICAgICAgZmluYWwgQ29uc3RhbnRTdGF0ZSBjczsKICAgICAgICAgICAgIGlmIChpc0NvbG9yRHJhd2FibGUpIHsKICAgICAgICAgICAgICAgICBjcyA9IHNQcmVsb2FkZWRDb2xvckRyYXdhYmxlcy5nZXQoa2V5KTsKQEAgLTI0ODQsOCArMjUyOCw5IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byBvYnRhaW4gYSBkcmF3YWJsZSwgc3RvcmUgaXQgaW4gdGhlIGFwcHJvcHJpYXRlCi0gICAgICAgICAgICAvLyBjYWNoZTogcHJlbG9hZCwgbm90IHRoZW1lZCwgbnVsbCB0aGVtZSwgb3IgdGhlbWUtc3BlY2lmaWMuCi0gICAgICAgICAgICBpZiAoZHIgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gY2FjaGU6IHByZWxvYWQsIG5vdCB0aGVtZWQsIG51bGwgdGhlbWUsIG9yIHRoZW1lLXNwZWNpZmljLiBEb24ndAorICAgICAgICAgICAgLy8gcG9sbHV0ZSB0aGUgY2FjaGUgd2l0aCBkcmF3YWJsZXMgbG9hZGVkIGZyb20gYSBmb3JlaWduIGRlbnNpdHkuCisgICAgICAgICAgICBpZiAoZHIgIT0gbnVsbCAmJiB1c2VDYWNoZSkgewogICAgICAgICAgICAgICAgIGRyLnNldENoYW5naW5nQ29uZmlndXJhdGlvbnModmFsdWUuY2hhbmdpbmdDb25maWd1cmF0aW9ucyk7CiAgICAgICAgICAgICAgICAgY2FjaGVEcmF3YWJsZSh2YWx1ZSwgaXNDb2xvckRyYXdhYmxlLCBjYWNoZXMsIHRoZW1lLCBjYW5BcHBseVRoZW1lLCBrZXksIGRyKTsKICAgICAgICAgICAgIH0KQEAgLTI3MTQsNyArMjc1OSwxNiBAQAogICAgICAgICByZXR1cm4gY3NsOwogICAgIH0KIAotICAgIC8qcGFja2FnZSovIFhtbFJlc291cmNlUGFyc2VyIGxvYWRYbWxSZXNvdXJjZVBhcnNlcihpbnQgaWQsIFN0cmluZyB0eXBlKQorICAgIC8qKgorICAgICAqIExvYWRzIGFuIFhNTCBwYXJzZXIgZm9yIHRoZSBzcGVjaWZpZWQgZmlsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiByZXNvdXJjZSAodXNlZCBmb3IgbG9nZ2luZykKKyAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIGZvciB0aGUgc3BlY2lmaWVkIFhNTCBmaWxlCisgICAgICogQHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkCisgICAgICovCisgICAgQE5vbk51bGwKKyAgICBYbWxSZXNvdXJjZVBhcnNlciBsb2FkWG1sUmVzb3VyY2VQYXJzZXIoQEFueVJlcyBpbnQgaWQsIEBOb25OdWxsIFN0cmluZyB0eXBlKQogICAgICAgICAgICAgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSB2YWx1ZSA9IG9idGFpblRlbXBUeXBlZFZhbHVlKGlkKTsKICAgICAgICAgdHJ5IHsKQEAgLTI3MjgsNTMgKzI3ODIsNTggQEAKICAgICAgICAgICAgIHJlbGVhc2VUZW1wVHlwZWRWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLypwYWNrYWdlKi8gWG1sUmVzb3VyY2VQYXJzZXIgbG9hZFhtbFJlc291cmNlUGFyc2VyKFN0cmluZyBmaWxlLCBpbnQgaWQsCi0gICAgICAgICAgICBpbnQgYXNzZXRDb29raWUsIFN0cmluZyB0eXBlKSB0aHJvd3MgTm90Rm91bmRFeGNlcHRpb24geworCisgICAgLyoqCisgICAgICogTG9hZHMgYW4gWE1MIHBhcnNlciBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLgorICAgICAqCisgICAgICogQHBhcmFtIGZpbGUgdGhlIHBhdGggZm9yIHRoZSBYTUwgZmlsZSB0byBwYXJzZQorICAgICAqIEBwYXJhbSBpZCB0aGUgcmVzb3VyY2UgaWRlbnRpZmllciBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gYXNzZXRDb29raWUgdGhlIGFzc2V0IGNvb2tpZSBmb3IgdGhlIGZpbGUKKyAgICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiByZXNvdXJjZSAodXNlZCBmb3IgbG9nZ2luZykKKyAgICAgKiBAcmV0dXJuIGEgcGFyc2VyIGZvciB0aGUgc3BlY2lmaWVkIFhNTCBmaWxlCisgICAgICogQHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkCisgICAgICovCisgICAgQE5vbk51bGwKKyAgICBYbWxSZXNvdXJjZVBhcnNlciBsb2FkWG1sUmVzb3VyY2VQYXJzZXIoQE5vbk51bGwgU3RyaW5nIGZpbGUsIEBBbnlSZXMgaW50IGlkLAorICAgICAgICAgICAgaW50IGFzc2V0Q29va2llLCBATm9uTnVsbCBTdHJpbmcgdHlwZSkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGlkICE9IDApIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlc2UgbWF5IGJlIGNvbXBpbGVkLi4uCi0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ2FjaGVkWG1sQmxvY2tJZHMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjYWNoZWRYbWxCbG9ja0ZpbGVzID0gbUNhY2hlZFhtbEJsb2NrRmlsZXM7CisgICAgICAgICAgICAgICAgZmluYWwgWG1sQmxvY2tbXSBjYWNoZWRYbWxCbG9ja3MgPSBtQ2FjaGVkWG1sQmxvY2tzOworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoY2FjaGVkWG1sQmxvY2tGaWxlcykgewogICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCBzZWUgaWYgdGhpcyBibG9jayBpcyBpbiBvdXIgY2FjaGUuCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBudW0gPSBtQ2FjaGVkWG1sQmxvY2tJZHMubGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8bnVtOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ2FjaGVkWG1sQmxvY2tJZHNbaV0gPT0gaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBSRVVTSU5HIFhNTCBCTE9DSyEgIGlkPSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICArIGlkICsgIiwgaW5kZXg9IiArIGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVkWG1sQmxvY2tzW2ldLm5ld1BhcnNlcigpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtID0gY2FjaGVkWG1sQmxvY2tGaWxlcy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRYbWxCbG9ja0ZpbGVzW2ldICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2FjaGVkWG1sQmxvY2tGaWxlc1tpXS5lcXVhbHMoZmlsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVkWG1sQmxvY2tzW2ldLm5ld1BhcnNlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGluIHRoZSBjYWNoZSwgY3JlYXRlIGEgbmV3IGJsb2NrIGFuZCBwdXQgaXQgYXQKICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5leHQgc2xvdCBpbiB0aGUgY2FjaGUuCi0gICAgICAgICAgICAgICAgICAgIFhtbEJsb2NrIGJsb2NrID0gbUFzc2V0cy5vcGVuWG1sQmxvY2tBc3NldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NldENvb2tpZSwgZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFhtbEJsb2NrIGJsb2NrID0gbUFzc2V0cy5vcGVuWG1sQmxvY2tBc3NldChhc3NldENvb2tpZSwgZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zID0gbUxhc3RDYWNoZWRYbWxCbG9ja0luZGV4KzE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID49IG51bSkgcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3MgPSAobUxhc3RDYWNoZWRYbWxCbG9ja0luZGV4ICsgMSkgJSBudW07CiAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdENhY2hlZFhtbEJsb2NrSW5kZXggPSBwb3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxCbG9jayBvbGRCbG9jayA9IG1DYWNoZWRYbWxCbG9ja3NbcG9zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFhtbEJsb2NrIG9sZEJsb2NrID0gY2FjaGVkWG1sQmxvY2tzW3Bvc107CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkQmxvY2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEJsb2NrLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQ2FjaGVkWG1sQmxvY2tJZHNbcG9zXSA9IGlkOwotICAgICAgICAgICAgICAgICAgICAgICAgbUNhY2hlZFhtbEJsb2Nrc1twb3NdID0gYmxvY2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiKioqKiBDQUNISU5HIE5FVyBYTUwgQkxPQ0shICBpZD0iCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICArIGlkICsgIiwgaW5kZXg9IiArIHBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRYbWxCbG9ja0ZpbGVzW3Bvc10gPSBmaWxlOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkWG1sQmxvY2tzW3Bvc10gPSBibG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9jay5uZXdQYXJzZXIoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTm90Rm91bmRFeGNlcHRpb24gcm5mID0gbmV3IE5vdEZvdW5kRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkZpbGUgIiArIGZpbGUgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhpZCkpOworICAgICAgICAgICAgICAgIGZpbmFsIE5vdEZvdW5kRXhjZXB0aW9uIHJuZiA9IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigiRmlsZSAiICsgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGlkKSk7CiAgICAgICAgICAgICAgICAgcm5mLmluaXRDYXVzZShlKTsKICAgICAgICAgICAgICAgICB0aHJvdyBybmY7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIkZpbGUgIiArIGZpbGUgKyAiIGZyb20geG1sIHR5cGUgIiArIHR5cGUgKyAiIHJlc291cmNlIElEICMweCIKKyAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKCJGaWxlICIgKyBmaWxlICsgIiBmcm9tIHhtbCB0eXBlICIgKyB0eXBlICsgIiByZXNvdXJjZSBJRCAjMHgiCiAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGlkKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ29ubmVjdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZUNvbm5lY3Rpb24uamF2YQppbmRleCAzY2RhMzlhLi5hNzYyZjU5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlQ29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVDb25uZWN0aW9uLmphdmEKQEAgLTI2LDYgKzI2LDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKIGltcG9ydCBhbmRyb2lkLm9zLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5McnVDYWNoZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKQEAgLTEzMzAsNiArMTMzMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5tQ29va2llID0gbmV3T3BlcmF0aW9uQ29va2llTG9ja2VkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoVHJhY2UuaXNUYWdFbmFibGVkKFRyYWNlLlRSQUNFX1RBR19EQVRBQkFTRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2UuYXN5bmNUcmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19EQVRBQkFTRSwgb3BlcmF0aW9uLmdldFRyYWNlTWV0aG9kTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5tQ29va2llKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbUluZGV4ID0gaW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbi5tQ29va2llOwogICAgICAgICAgICAgfQpAQCAtMTM2Nyw2ICsxMzcyLDEwIEBACiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBlbmRPcGVyYXRpb25EZWZlckxvZ0xvY2tlZChpbnQgY29va2llKSB7CiAgICAgICAgICAgICBmaW5hbCBPcGVyYXRpb24gb3BlcmF0aW9uID0gZ2V0T3BlcmF0aW9uTG9ja2VkKGNvb2tpZSk7CiAgICAgICAgICAgICBpZiAob3BlcmF0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoVHJhY2UuaXNUYWdFbmFibGVkKFRyYWNlLlRSQUNFX1RBR19EQVRBQkFTRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgVHJhY2UuYXN5bmNUcmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfREFUQUJBU0UsIG9wZXJhdGlvbi5nZXRUcmFjZU1ldGhvZE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24ubUNvb2tpZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5tRW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwogICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5tRmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHJldHVybiBTUUxpdGVEZWJ1Zy5ERUJVR19MT0dfU0xPV19RVUVSSUVTICYmIFNRTGl0ZURlYnVnLnNob3VsZExvZ1Nsb3dRdWVyeSgKQEAgLTE0MzksNiArMTQ0OCwxMiBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIE9wZXJhdGlvbiB7CisgICAgICAgIC8vIFRyaW0gYWxsIFNRTCBzdGF0ZW1lbnRzIHRvIDI1NiBjaGFyYWN0ZXJzIGluc2lkZSB0aGUgdHJhY2UgbWFya2VyLgorICAgICAgICAvLyBUaGlzIGxpbWl0IGdpdmVzIHBsZW50eSBvZiBjb250ZXh0IHdoaWxlIGxlYXZpbmcgc3BhY2UgZm9yIG90aGVyCisgICAgICAgIC8vIGVudHJpZXMgaW4gdGhlIHRyYWNlIGJ1ZmZlciAoYW5kIGVuc3VyZXMgYXRyYWNlIGRvZXNuJ3QgdHJ1bmNhdGUgdGhlCisgICAgICAgIC8vIG1hcmtlciBmb3IgdXMsIHBvdGVudGlhbGx5IGxvc2luZyBtZXRhZGF0YSBpbiB0aGUgcHJvY2VzcykuCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVFJBQ0VfTUVUSE9EX05BTUVfTEVOID0gMjU2OworCiAgICAgICAgIHB1YmxpYyBsb25nIG1TdGFydFRpbWU7CiAgICAgICAgIHB1YmxpYyBsb25nIG1FbmRUaW1lOwogICAgICAgICBwdWJsaWMgU3RyaW5nIG1LaW5kOwpAQCAtMTQ5Miw2ICsxNTA3LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gbUV4Y2VwdGlvbiAhPSBudWxsID8gImZhaWxlZCIgOiAic3VjY2VlZGVkIjsKICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgU3RyaW5nIGdldFRyYWNlTWV0aG9kTmFtZSgpIHsKKyAgICAgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbUtpbmQgKyAiICIgKyBtU3FsOworICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWUubGVuZ3RoKCkgPiBNQVhfVFJBQ0VfTUVUSE9EX05BTUVfTEVOKQorICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2ROYW1lLnN1YnN0cmluZygwLCBNQVhfVFJBQ0VfTUVUSE9EX05BTUVfTEVOKTsKKyAgICAgICAgICAgIHJldHVybiBtZXRob2ROYW1lOworICAgICAgICB9CisKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0Rm9ybWF0dGVkU3RhcnRUaW1lKCkgewogICAgICAgICAgICAgLy8gTm90ZTogU2ltcGxlRGF0ZUZvcm1hdCBpcyBub3QgdGhyZWFkLXNhZmUsIGNhbm5vdCBiZSBjb21waWxlLXRpbWUgY3JlYXRlZCwgYW5kIGlzCiAgICAgICAgICAgICAvLyAgICAgICByZWxhdGl2ZWx5IGV4cGVuc2l2ZSB0byBjcmVhdGUgZHVyaW5nIHByZWxvYWRpbmcuIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlRGF0YWJhc2UuamF2YQppbmRleCA0MzNkNWQxYy4uNTBlNzM1NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZURhdGFiYXNlLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLmRhdGFiYXNlLnNxbGl0ZTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkRhdGFiYXNlRXJyb3JIYW5kbGVyOwpAQCAtMTY4Myw2ICsxNjg1LDIxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogVmVyaWZpZXMgdGhhdCBhIFNRTCBTRUxFQ1Qgc3RhdGVtZW50IGlzIHZhbGlkIGJ5IGNvbXBpbGluZyBpdC4KKyAgICAgKiBJZiB0aGUgU1FMIHN0YXRlbWVudCBpcyBub3QgdmFsaWQsIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYSB7QGxpbmsgU1FMaXRlRXhjZXB0aW9ufS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzcWwgU1FMIHRvIGJlIHZhbGlkYXRlZAorICAgICAqIEBwYXJhbSBjYW5jZWxsYXRpb25TaWduYWwgQSBzaWduYWwgdG8gY2FuY2VsIHRoZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MsIG9yIG51bGwgaWYgbm9uZS4KKyAgICAgKiBJZiB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGVkLCB0aGVuIHtAbGluayBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbn0gd2lsbCBiZSB0aHJvd24KKyAgICAgKiB3aGVuIHRoZSBxdWVyeSBpcyBleGVjdXRlZC4KKyAgICAgKiBAdGhyb3dzIFNRTGl0ZUV4Y2VwdGlvbiBpZiB7QGNvZGUgc3FsfSBpcyBpbnZhbGlkCisgICAgICovCisgICAgcHVibGljIHZvaWQgdmFsaWRhdGVTcWwoQE5vbk51bGwgU3RyaW5nIHNxbCwgQE51bGxhYmxlIENhbmNlbGxhdGlvblNpZ25hbCBjYW5jZWxsYXRpb25TaWduYWwpIHsKKyAgICAgICAgZ2V0VGhyZWFkU2Vzc2lvbigpLnByZXBhcmUoc3FsLAorICAgICAgICAgICAgICAgIGdldFRocmVhZERlZmF1bHRDb25uZWN0aW9uRmxhZ3MoLyogcmVhZE9ubHkgPSovIHRydWUpLCBjYW5jZWxsYXRpb25TaWduYWwsIG51bGwpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YWJhc2UgaXMgb3BlbmVkIGFzIHJlYWQgb25seS4KICAgICAgKgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBkYXRhYmFzZSBpcyBvcGVuZWQgYXMgcmVhZCBvbmx5LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVF1ZXJ5QnVpbGRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvZGF0YWJhc2Uvc3FsaXRlL1NRTGl0ZVF1ZXJ5QnVpbGRlci5qYXZhCmluZGV4IDkxODg0YWIuLjU2Y2JhNzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2RhdGFiYXNlL3NxbGl0ZS9TUUxpdGVRdWVyeUJ1aWxkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9kYXRhYmFzZS9zcWxpdGUvU1FMaXRlUXVlcnlCdWlsZGVyLmphdmEKQEAgLTM4Niw4ICszODYsNyBAQAogICAgICAgICAgICAgLy8gaW4gYm90aCB0aGUgd3JhcHBlZCBhbmQgb3JpZ2luYWwgZm9ybXMuCiAgICAgICAgICAgICBTdHJpbmcgc3FsRm9yVmFsaWRhdGlvbiA9IGJ1aWxkUXVlcnkocHJvamVjdGlvbkluLCAiKCIgKyBzZWxlY3Rpb24gKyAiKSIsIGdyb3VwQnksCiAgICAgICAgICAgICAgICAgICAgIGhhdmluZywgc29ydE9yZGVyLCBsaW1pdCk7Ci0gICAgICAgICAgICB2YWxpZGF0ZVF1ZXJ5U3FsKGRiLCBzcWxGb3JWYWxpZGF0aW9uLAotICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYXRpb25TaWduYWwpOyAvLyB3aWxsIHRocm93IGlmIHF1ZXJ5IGlzIGludmFsaWQKKyAgICAgICAgICAgIGRiLnZhbGlkYXRlU3FsKHNxbEZvclZhbGlkYXRpb24sIGNhbmNlbGxhdGlvblNpZ25hbCk7IC8vIHdpbGwgdGhyb3cgaWYgcXVlcnkgaXMgaW52YWxpZAogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIHNxbCA9IGJ1aWxkUXVlcnkoCkBAIC00MDQsMTYgKzQwMyw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogVmVyaWZpZXMgdGhhdCBhIFNRTCBTRUxFQ1Qgc3RhdGVtZW50IGlzIHZhbGlkIGJ5IGNvbXBpbGluZyBpdC4KLSAgICAgKiBJZiB0aGUgU1FMIHN0YXRlbWVudCBpcyBub3QgdmFsaWQsIHRoaXMgbWV0aG9kIHdpbGwgdGhyb3cgYSB7QGxpbmsgU1FMaXRlRXhjZXB0aW9ufS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVRdWVyeVNxbChTUUxpdGVEYXRhYmFzZSBkYiwgU3RyaW5nIHNxbCwKLSAgICAgICAgICAgIENhbmNlbGxhdGlvblNpZ25hbCBjYW5jZWxsYXRpb25TaWduYWwpIHsKLSAgICAgICAgZGIuZ2V0VGhyZWFkU2Vzc2lvbigpLnByZXBhcmUoc3FsLAotICAgICAgICAgICAgICAgIGRiLmdldFRocmVhZERlZmF1bHRDb25uZWN0aW9uRmxhZ3ModHJ1ZSAvKnJlYWRPbmx5Ki8pLCBjYW5jZWxsYXRpb25TaWduYWwsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIENvbnN0cnVjdCBhIFNFTEVDVCBzdGF0ZW1lbnQgc3VpdGFibGUgZm9yIHVzZSBpbiBhIGdyb3VwIG9mCiAgICAgICogU0VMRUNUIHN0YXRlbWVudHMgdGhhdCB3aWxsIGJlIGpvaW5lZCB0aHJvdWdoIFVOSU9OIG9wZXJhdG9ycwogICAgICAqIGluIGJ1aWxkVW5pb25RdWVyeS4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKaW5kZXggOGE4N2JmZi4uMDJkNGU1OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmphdmEKQEAgLTQ3LDYgKzQ3LDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy4qOworCiAvKioKICAqIFRoZSBDYW1lcmEgY2xhc3MgaXMgdXNlZCB0byBzZXQgaW1hZ2UgY2FwdHVyZSBzZXR0aW5ncywgc3RhcnQvc3RvcCBwcmV2aWV3LAogICogc25hcCBwaWN0dXJlcywgYW5kIHJldHJpZXZlIGZyYW1lcyBmb3IgZW5jb2RpbmcgZm9yIHZpZGVvLiAgVGhpcyBjbGFzcyBpcyBhCkBAIC0xNzMsMTMgKzE3NSw2IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUF1dG9Gb2N1c0NhbGxiYWNrTG9jayA9IG5ldyBPYmplY3QoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT19FUlJPUiA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVBQ0NFU1MgPSAtMTM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVOT0RFViA9IC0xOTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRUJVU1kgPSAtMTY7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVJTlZBTCA9IC0yMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRU5PU1lTID0gLTM4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFVVNFUlMgPSAtODc7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVPUE5PVFNVUFAgPSAtOTU7CiAKICAgICAvKioKICAgICAgKiBCcm9hZGNhc3QgQWN0aW9uOiAgQSBuZXcgcGljdHVyZSBpcyB0YWtlbiBieSB0aGUgY2FtZXJhLCBhbmQgdGhlIGVudHJ5IG9mCkBAIC00MTUsMzAgKzQxMCwyOCBAQAogICAgIHByaXZhdGUgQ2FtZXJhKGludCBjYW1lcmFJZCwgaW50IGhhbFZlcnNpb24pIHsKICAgICAgICAgaW50IGVyciA9IGNhbWVyYUluaXRWZXJzaW9uKGNhbWVyYUlkLCBoYWxWZXJzaW9uKTsKICAgICAgICAgaWYgKGNoZWNrSW5pdEVycm9ycyhlcnIpKSB7Ci0gICAgICAgICAgICBzd2l0Y2goZXJyKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFQUNDRVNTOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbCB0byBjb25uZWN0IHRvIGNhbWVyYSBzZXJ2aWNlIik7Ci0gICAgICAgICAgICAgICAgY2FzZSBFTk9ERVY6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW1lcmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgY2FzZSBFTk9TWVM6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW1lcmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGJlY2F1c2Ugc29tZSBtZXRob2RzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhcmUgbm90IGltcGxlbWVudGVkIik7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT1BOT1RTVVBQOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBoYWwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZSIpOwotICAgICAgICAgICAgICAgIGNhc2UgRUlOVkFMOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBpbnB1dCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYXJ1Z21lbnRzIGFyZSBpbnZhbGlkIik7Ci0gICAgICAgICAgICAgICAgY2FzZSBFQlVTWToKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgY2FtZXJhIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBkZXZpY2Ugd2FzIGFscmVhZHkgb3BlbmVkIik7Ci0gICAgICAgICAgICAgICAgY2FzZSBFVVNFUlM6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW1lcmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIG1heCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgbnVtYmVyIG9mIGNhbWVyYSBkZXZpY2VzIHdlcmUgYWxyZWFkeSBvcGVuZWQiKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgbmV2ZXIgaGl0IHRoaXMuCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmtub3duIGNhbWVyYSBlcnJvciIpOworICAgICAgICAgICAgaWYgKGVyciA9PSAtRUFDQ0VTKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWwgdG8gY29ubmVjdCB0byBjYW1lcmEgc2VydmljZSIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLUVOT0RFVikgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW1lcmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSAtRU5PU1lTKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQgYmVjYXVzZSBzb21lIG1ldGhvZHMiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYXJlIG5vdCBpbXBsZW1lbnRlZCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLUVPUE5PVFNVUFApIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBoYWwiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgdmVyc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSAtRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQgYmVjYXVzZSB0aGUgaW5wdXQiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgYXJ1Z21lbnRzIGFyZSBpbnZhbGlkIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSAtRUJVU1kpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBjYW1lcmEiCisgICAgICAgICAgICAgICAgICAgICAgICArICIgZGV2aWNlIHdhcyBhbHJlYWR5IG9wZW5lZCIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLUVVU0VSUykgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW1lcmEgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGJlY2F1c2UgdGhlIG1heCIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBudW1iZXIgb2YgY2FtZXJhIGRldmljZXMgd2VyZSBhbHJlYWR5IG9wZW5lZCIpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIGhpdCB0aGlzLgorICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVua25vd24gY2FtZXJhIGVycm9yIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ5MCwxNSArNDgzLDEzIEBACiAgICAgQ2FtZXJhKGludCBjYW1lcmFJZCkgewogICAgICAgICBpbnQgZXJyID0gY2FtZXJhSW5pdE5vcm1hbChjYW1lcmFJZCk7CiAgICAgICAgIGlmIChjaGVja0luaXRFcnJvcnMoZXJyKSkgewotICAgICAgICAgICAgc3dpdGNoKGVycikgewotICAgICAgICAgICAgICAgIGNhc2UgRUFDQ0VTUzoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWwgdG8gY29ubmVjdCB0byBjYW1lcmEgc2VydmljZSIpOwotICAgICAgICAgICAgICAgIGNhc2UgRU5PREVWOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2FtZXJhIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoaXQgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVua25vd24gY2FtZXJhIGVycm9yIik7CisgICAgICAgICAgICBpZiAoZXJyID09IC1FQUNDRVMpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbCB0byBjb25uZWN0IHRvIGNhbWVyYSBzZXJ2aWNlIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciA9PSAtRU5PREVWKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbWVyYSBpbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFNob3VsZCBuZXZlciBoaXQgdGhpcy4KKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmtub3duIGNhbWVyYSBlcnJvciIpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYURldmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9DYW1lcmFEZXZpY2UuamF2YQppbmRleCA4ZjQ1ZjcyLi44NTJhNGQ5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL0NhbWVyYURldmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvQ2FtZXJhRGV2aWNlLmphdmEKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAqIDxwPlRoZSBhY3RpdmUgY2FwdHVyZSBzZXNzaW9uIGRldGVybWluZXMgdGhlIHNldCBvZiBwb3RlbnRpYWwgb3V0cHV0IFN1cmZhY2VzIGZvcgogICAgICAqIHRoZSBjYW1lcmEgZGV2aWNlIGZvciBlYWNoIGNhcHR1cmUgcmVxdWVzdC4gQSBnaXZlbiByZXF1ZXN0IG1heSB1c2UgYWxsCiAgICAgICogb3Igb25seSBzb21lIG9mIHRoZSBvdXRwdXRzLiBPbmNlIHRoZSBDYW1lcmFDYXB0dXJlU2Vzc2lvbiBpcyBjcmVhdGVkLCByZXF1ZXN0cyBjYW4gYmUKLSAgICAgKiBjYW4gYmUgc3VibWl0dGVkIHdpdGgge0BsaW5rIENhbWVyYUNhcHR1cmVTZXNzaW9uI2NhcHR1cmUgY2FwdHVyZX0sCisgICAgICogc3VibWl0dGVkIHdpdGgge0BsaW5rIENhbWVyYUNhcHR1cmVTZXNzaW9uI2NhcHR1cmUgY2FwdHVyZX0sCiAgICAgICoge0BsaW5rIENhbWVyYUNhcHR1cmVTZXNzaW9uI2NhcHR1cmVCdXJzdCBjYXB0dXJlQnVyc3R9LAogICAgICAqIHtAbGluayBDYW1lcmFDYXB0dXJlU2Vzc2lvbiNzZXRSZXBlYXRpbmdSZXF1ZXN0IHNldFJlcGVhdGluZ1JlcXVlc3R9LCBvcgogICAgICAqIHtAbGluayBDYW1lcmFDYXB0dXJlU2Vzc2lvbiNzZXRSZXBlYXRpbmdCdXJzdCBzZXRSZXBlYXRpbmdCdXJzdH0uPC9wPgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9sZWdhY3kvQ2FtZXJhRGV2aWNlVXNlclNoaW0uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvbGVnYWN5L0NhbWVyYURldmljZVVzZXJTaGltLmphdmEKaW5kZXggNmI4ZTExMy4uNzk4Yzk0MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9sZWdhY3kvQ2FtZXJhRGV2aWNlVXNlclNoaW0uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL2xlZ2FjeS9DYW1lcmFEZXZpY2VVc2VyU2hpbS5qYXZhCkBAIC00Myw2ICs0Myw5IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy5FQUNDRVM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3lzdGVtLk9zQ29uc3RhbnRzLkVOT0RFVjsKKwogLyoqCiAgKiBDb21wYXRpYmlsaXR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYW1lcmEyIEFQSSBiaW5kZXIgaW50ZXJmYWNlLgogICoKQEAgLTg4LDYgKzkxLDE0IEBACiAgICAgICAgIG1TdXJmYWNlSWRDb3VudGVyID0gMDsKICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgdHJhbnNsYXRlRXJyb3JzRnJvbUNhbWVyYTEoaW50IGVycm9yQ29kZSkgeworICAgICAgICBpZiAoZXJyb3JDb2RlID09IC1FQUNDRVMpIHsKKyAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuUEVSTUlTU0lPTl9ERU5JRUQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXJyb3JDb2RlOworICAgIH0KKwogICAgIC8qKgogICAgICAqIENyZWF0ZSBhIHNlcGFyYXRlIGxvb3Blci90aHJlYWQgZm9yIHRoZSBjYW1lcmEgdG8gcnVuIG9uOyBvcGVuIHRoZSBjYW1lcmEuCiAgICAgICoKQEAgLTM4Miw3ICszOTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChtTGVnYWN5RGV2aWNlLmlzQ2xvc2VkKCkpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBzdWJtaXQgcmVxdWVzdCwgZGV2aWNlIGhhcyBiZWVuIGNsb3NlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuRU5PREVWOworICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgICAgIH0KIAogICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZUxvY2spIHsKQEAgLTQwMiw3ICs0MTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChtTGVnYWN5RGV2aWNlLmlzQ2xvc2VkKCkpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBzdWJtaXQgcmVxdWVzdCBsaXN0LCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlTG9jaykgewpAQCAtNDIxLDcgKzQzMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGNhbmNlbCByZXF1ZXN0LCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlTG9jaykgewpAQCAtNDQyLDcgKzQ1Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGJlZ2luIGNvbmZpZ3VyZSwgZGV2aWNlIGhhcyBiZWVuIGNsb3NlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuRU5PREVWOworICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgICAgIH0KIAogICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZUxvY2spIHsKQEAgLTQ2Miw3ICs0NzMsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChtTGVnYWN5RGV2aWNlLmlzQ2xvc2VkKCkpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBlbmQgY29uZmlndXJlLCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIEFycmF5TGlzdDxTdXJmYWNlPiBzdXJmYWNlcyA9IG51bGw7CkBAIC00OTAsNyArNTAxLDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAobUxlZ2FjeURldmljZS5pc0Nsb3NlZCgpKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJDYW5ub3QgZGVsZXRlIHN0cmVhbSwgZGV2aWNlIGhhcyBiZWVuIGNsb3NlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuRU5PREVWOworICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CiAgICAgICAgIH0KIAogICAgICAgICBzeW5jaHJvbml6ZWQobUNvbmZpZ3VyZUxvY2spIHsKQEAgLTUxNSw3ICs1MjYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChtTGVnYWN5RGV2aWNlLmlzQ2xvc2VkKCkpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBjcmVhdGUgc3RyZWFtLCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlTG9jaykgewpAQCAtNTUyLDcgKzU2Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGNyZWF0ZSBkZWZhdWx0IHJlcXVlc3QsIGRldmljZSBoYXMgYmVlbiBjbG9zZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FtZXJhQmluZGVyRGVjb3JhdG9yLkVOT0RFVjsKKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgICAgICB9CiAKICAgICAgICAgQ2FtZXJhTWV0YWRhdGFOYXRpdmUgdGVtcGxhdGU7CkBAIC01ODUsNyArNTk2LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAobUxlZ2FjeURldmljZS5pc0Nsb3NlZCgpKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJDYW5ub3Qgd2FpdCB1bnRpbCBpZGxlLCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlTG9jaykgewpAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGZsdXNoLCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIHN5bmNocm9uaXplZChtQ29uZmlndXJlTG9jaykgewpAQCAtNjI3LDcgKzYzOCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IHByZXBhcmUgc3RyZWFtLCBkZXZpY2UgaGFzIGJlZW4gY2xvc2VkLiIpOwotICAgICAgICAgICAgcmV0dXJuIENhbWVyYUJpbmRlckRlY29yYXRvci5FTk9ERVY7CisgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExFR0FDWSBkb2Vzbid0IHN1cHBvcnQgYWN0dWFsIHByZXBhcmUsIGp1c3Qgc2lnbmFsIHN1Y2Nlc3MgcmlnaHQgYXdheQpAQCAtNjQ3LDcgKzY1OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1MZWdhY3lEZXZpY2UuaXNDbG9zZWQoKSkgewogICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IHRlYXIgZG93biBzdHJlYW0sIGRldmljZSBoYXMgYmVlbiBjbG9zZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gQ2FtZXJhQmluZGVyRGVjb3JhdG9yLkVOT0RFVjsKKyAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTEVHQUNZIGRvZXNuJ3Qgc3VwcG9ydCBhY3R1YWwgdGVhcmRvd24sIHNvIGp1c3QgYSBuby1vcApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9sZWdhY3kvTGVnYWN5RXhjZXB0aW9uVXRpbHMuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvbGVnYWN5L0xlZ2FjeUV4Y2VwdGlvblV0aWxzLmphdmEKaW5kZXggNGI3Y2ZiZi4uNDUwMWU4MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi9sZWdhY3kvTGVnYWN5RXhjZXB0aW9uVXRpbHMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL2xlZ2FjeS9MZWdhY3lFeGNlcHRpb25VdGlscy5qYXZhCkBAIC0xOSw2ICsxOSw4IEBACiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLnV0aWxzLkNhbWVyYUJpbmRlckRlY29yYXRvcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy5FTk9ERVY7CisKIC8qKgogICogVXRpbGl0eSBjbGFzcyBjb250YWluaW5nIGV4Y2VwdGlvbiBoYW5kbGluZyB1c2VkIHNvbGVseSBieSB0aGUgY29tcGF0aWJpbGl0eSBtb2RlIHNoaW0uCiAgKi8KQEAgLTUxLDE4ICs1MywxNSBAQAogICAgICAqIGV4Y2VwdGlvbnMuPC9wPgogICAgICAqCiAgICAgICogQHBhcmFtIGVycm9yRmxhZyBlcnJvciB0byB0aHJvdyBhcyBhbiBleGNlcHRpb24uCi0gICAgICogQHRocm93cyB7QGxpbmsgQnVmZmVyUXVldWVBYmFuZG9uZWRFeGNlcHRpb259IGZvciB7QGxpbmsgQ2FtZXJhQmluZGVyRGVjb3JhdG9yI0VOT0RFVn0uCisgICAgICogQHRocm93cyB7QGxpbmsgQnVmZmVyUXVldWVBYmFuZG9uZWRFeGNlcHRpb259IGZvciAtRU5PREVWLgogICAgICAqIEB0aHJvd3Mge0BsaW5rIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9ufSBmb3IgYW4gdW5rbm93biBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICAgICAqIEByZXR1cm4ge0Bjb2RlIGVycm9yRmxhZ30gaWYgdGhlIHZhbHVlIHdhcyBub24tbmVnYXRpdmUsIHRocm93cyBvdGhlcndpc2UuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgdGhyb3dPbkVycm9yKGludCBlcnJvckZsYWcpIHRocm93cyBCdWZmZXJRdWV1ZUFiYW5kb25lZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3JGbGFnKSB7Ci0gICAgICAgICAgICBjYXNlIENhbWVyYUJpbmRlckRlY29yYXRvci5OT19FUlJPUjogewotICAgICAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuTk9fRVJST1I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIENhbWVyYUJpbmRlckRlY29yYXRvci5CQURfVkFMVUU6IHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQnVmZmVyUXVldWVBYmFuZG9uZWRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGVycm9yRmxhZyA9PSBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuTk9fRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBDYW1lcmFCaW5kZXJEZWNvcmF0b3IuTk9fRVJST1I7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JGbGFnID09IC1FTk9ERVYpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBCdWZmZXJRdWV1ZUFiYW5kb25lZEV4Y2VwdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVycm9yRmxhZyA8IDApIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvdXRpbHMvQ2FtZXJhQmluZGVyRGVjb3JhdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9jYW1lcmEyL3V0aWxzL0NhbWVyYUJpbmRlckRlY29yYXRvci5qYXZhCmluZGV4IDFhZWU3OTQuLjE2MmVkYzkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2NhbWVyYTIvdXRpbHMvQ2FtZXJhQmluZGVyRGVjb3JhdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvY2FtZXJhMi91dGlscy9DYW1lcmFCaW5kZXJEZWNvcmF0b3IuamF2YQpAQCAtMjIsNiArMjIsNyBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uLkNBTUVSQV9FUlJPUjsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbi5NQVhfQ0FNRVJBU19JTl9VU0U7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb24uQ0FNRVJBX0RFUFJFQ0FURURfSEFMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy4qOwogCiBpbXBvcnQgYW5kcm9pZC5vcy5EZWFkT2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwpAQCAtMzcsMTIgKzM4LDEyIEBACiBwdWJsaWMgY2xhc3MgQ2FtZXJhQmluZGVyRGVjb3JhdG9yIHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PX0VSUk9SID0gMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQRVJNSVNTSU9OX0RFTklFRCA9IC0xOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMUkVBRFlfRVhJU1RTID0gLTE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBRF9WQUxVRSA9IC0yMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUFEX09CSkVDVCA9IC0zMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX09QRVJBVElPTiA9IC0zODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FRF9PVVQgPSAtMTEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUk1JU1NJT05fREVOSUVEID0gLUVQRVJNOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFMUkVBRFlfRVhJU1RTID0gLUVFWElTVDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCQURfVkFMVUUgPSAtRUlOVkFMOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQURfT0JKRUNUID0gLUVOT1NZUzsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX09QRVJBVElPTiA9IC1FUElQRTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUSU1FRF9PVVQgPSAtRVRJTUVET1VUOwogCiAgICAgLyoqCiAgICAgICogVE9ETzogYWRkIGFzIGVycm9yIGNvZGVzIGluIEVycm9ycy5oCkBAIC01MiwxMiArNTMsNiBAQAogICAgICAqIC0gTk9UX1NVUFBPUlRFRAogICAgICAqIC0gVE9PX01BTllfVVNFUlMKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFQUNDRVMgPSAtMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUJVU1kgPSAtMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5PREVWID0gLTE5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVPUE5PVFNVUFAgPSAtOTU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVVTRVJTID0gLTg3OwotCiAKICAgICBzdGF0aWMgY2xhc3MgQ2FtZXJhQmluZGVyRGVjb3JhdG9yTGlzdGVuZXIgaW1wbGVtZW50cyBEZWNvcmF0b3IuRGVjb3JhdG9yTGlzdGVuZXIgewogCkBAIC0xMDEsMzUgKzk2LDM0IEBACiAgICAgICogQHBhcmFtIGVycm9yRmxhZyBlcnJvciB0byB0aHJvdyBhcyBhbiBleGNlcHRpb24uCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHRocm93T25FcnJvcihpbnQgZXJyb3JGbGFnKSB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3JGbGFnKSB7Ci0gICAgICAgICAgICBjYXNlIE5PX0VSUk9SOgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgUEVSTUlTU0lPTl9ERU5JRUQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJMYWNraW5nIHByaXZpbGVnZXMgdG8gYWNjZXNzIGNhbWVyYSBzZXJ2aWNlIik7Ci0gICAgICAgICAgICBjYXNlIEFMUkVBRFlfRVhJU1RTOgotICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYXQgdGhlIGNhbGwgc2l0ZS4gVHlwaWNhbGx5IHRoaXMgaXNuJ3QgYmFkLAotICAgICAgICAgICAgICAgIC8vIGp1c3QgbWVhbnMgd2UgdHJpZWQgdG8gZG8gYW4gb3BlcmF0aW9uIHRoYXQgYWxyZWFkeSBjb21wbGV0ZWQuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBCQURfVkFMVUU6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIGFyZ3VtZW50IHBhc3NlZCB0byBjYW1lcmEgc2VydmljZSIpOwotICAgICAgICAgICAgY2FzZSBERUFEX09CSkVDVDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgIGNhc2UgVElNRURfT1VUOgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBDYW1lcmFSdW50aW1lRXhjZXB0aW9uKENBTUVSQV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJPcGVyYXRpb24gdGltZWQgb3V0IGluIGNhbWVyYSBzZXJ2aWNlIik7Ci0gICAgICAgICAgICBjYXNlIEVBQ0NFUzoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRElTQUJMRUQpOwotICAgICAgICAgICAgY2FzZSBFQlVTWToKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfSU5fVVNFKTsKLSAgICAgICAgICAgIGNhc2UgRVVTRVJTOgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBDYW1lcmFSdW50aW1lRXhjZXB0aW9uKE1BWF9DQU1FUkFTX0lOX1VTRSk7Ci0gICAgICAgICAgICBjYXNlIEVOT0RFVjoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRElTQ09OTkVDVEVEKTsKLSAgICAgICAgICAgIGNhc2UgRU9QTk9UU1VQUDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfREVQUkVDQVRFRF9IQUwpOwotICAgICAgICAgICAgY2FzZSBJTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSWxsZWdhbCBzdGF0ZSBlbmNvdW50ZXJlZCBpbiBjYW1lcmEgc2VydmljZS4iKTsKKyAgICAgICAgaWYgKGVycm9yRmxhZyA9PSBOT19FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSBQRVJNSVNTSU9OX0RFTklFRCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJMYWNraW5nIHByaXZpbGVnZXMgdG8gYWNjZXNzIGNhbWVyYSBzZXJ2aWNlIik7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JGbGFnID09IEFMUkVBRFlfRVhJU1RTKSB7CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGF0IHRoZSBjYWxsIHNpdGUuIFR5cGljYWxseSB0aGlzIGlzbid0IGJhZCwKKyAgICAgICAgICAgIC8vIGp1c3QgbWVhbnMgd2UgdHJpZWQgdG8gZG8gYW4gb3BlcmF0aW9uIHRoYXQgYWxyZWFkeSBjb21wbGV0ZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JGbGFnID09IEJBRF9WQUxVRSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQmFkIGFyZ3VtZW50IHBhc3NlZCB0byBjYW1lcmEgc2VydmljZSIpOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSBERUFEX09CSkVDVCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENhbWVyYVJ1bnRpbWVFeGNlcHRpb24oQ0FNRVJBX0RJU0NPTk5FQ1RFRCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JGbGFnID09IFRJTUVEX09VVCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENhbWVyYVJ1bnRpbWVFeGNlcHRpb24oQ0FNRVJBX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAiT3BlcmF0aW9uIHRpbWVkIG91dCBpbiBjYW1lcmEgc2VydmljZSIpOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSAtRUFDQ0VTKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRElTQUJMRUQpOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSAtRUJVU1kpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDYW1lcmFSdW50aW1lRXhjZXB0aW9uKENBTUVSQV9JTl9VU0UpOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSAtRVVTRVJTKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihNQVhfQ0FNRVJBU19JTl9VU0UpOworICAgICAgICB9IGVsc2UgaWYgKGVycm9yRmxhZyA9PSAtRU5PREVWKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRElTQ09OTkVDVEVEKTsKKyAgICAgICAgfSBlbHNlIGlmIChlcnJvckZsYWcgPT0gLUVPUE5PVFNVUFApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDYW1lcmFSdW50aW1lRXhjZXB0aW9uKENBTUVSQV9ERVBSRUNBVEVEX0hBTCk7CisgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JGbGFnID09IElOVkFMSURfT1BFUkFUSU9OKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2FtZXJhUnVudGltZUV4Y2VwdGlvbihDQU1FUkFfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN0YXRlIGVuY291bnRlcmVkIGluIGNhbWVyYSBzZXJ2aWNlLiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JSW5wdXRNYW5hZ2VyLmFpZGwKaW5kZXggMTc0MjkxZS4uNWQ5NjliMSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSUlucHV0TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0lJbnB1dE1hbmFnZXIuYWlkbApAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklucHV0RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uOwogCiAvKiogQGhpZGUgKi8KIGludGVyZmFjZSBJSW5wdXRNYW5hZ2VyIHsKQEAgLTQ4LDExICs0OSwxMiBAQAogCiAgICAgLy8gS2V5Ym9hcmQgbGF5b3V0cyBjb25maWd1cmF0aW9uLgogICAgIEtleWJvYXJkTGF5b3V0W10gZ2V0S2V5Ym9hcmRMYXlvdXRzKCk7CisgICAgS2V5Ym9hcmRMYXlvdXRbXSBnZXRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShpbiBJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcik7CiAgICAgS2V5Ym9hcmRMYXlvdXQgZ2V0S2V5Ym9hcmRMYXlvdXQoU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcik7CiAgICAgU3RyaW5nIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGluIElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKTsKICAgICB2b2lkIHNldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGluIElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcik7Ci0gICAgU3RyaW5nW10gZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoaW4gSW5wdXREZXZpY2VJZGVudGlmaWVyIGlkZW50aWZpZXIpOworICAgIFN0cmluZ1tdIGdldEVuYWJsZWRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShpbiBJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcik7CiAgICAgdm9pZCBhZGRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGluIElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLAogICAgICAgICAgICAgU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcik7CiAgICAgdm9pZCByZW1vdmVLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGluIElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyLApAQCAtNzEsNCArNzMsNyBAQAogICAgIHZvaWQgY2FuY2VsVmlicmF0ZShpbnQgZGV2aWNlSWQsIElCaW5kZXIgdG9rZW4pOwogCiAgICAgdm9pZCBzZXRQb2ludGVySWNvblNoYXBlKGludCBzaGFwZUlkKTsKKyAgICB2b2lkIHNldEN1c3RvbVBvaW50ZXJJY29uKGluIFBvaW50ZXJJY29uIGljb24pOworCisgICAgdm9pZCBzZXRQb2ludGVySWNvbkRldGFjaGVkKGJvb2xlYW4gZGV0YWNoZWQpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvSW5wdXRNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQppbmRleCAyMDFhZmVlLi45OTcyZjQ5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9JbnB1dE1hbmFnZXIuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQ7CiAKK2ltcG9ydCBhbmRyb2lkLnZpZXcuUG9pbnRlckljb247CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuU29tZUFyZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogCkBAIC00NzMsNiArNDc0LDI5IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgc3VwcG9ydGVkIGtleWJvYXJkIGxheW91dHMgYXBwcm9wcmlhdGUKKyAgICAgKiBmb3IgYSBzcGVjaWZpYyBpbnB1dCBkZXZpY2UuCisgICAgICogPHA+CisgICAgICogVGhlIGlucHV0IG1hbmFnZXIgY29uc3VsdHMgdGhlIGJ1aWx0LWluIGtleWJvYXJkIGxheW91dHMgYXMgd2VsbAorICAgICAqIGFzIGFsbCBrZXlib2FyZCBsYXlvdXRzIGFkdmVydGlzZWQgYnkgYXBwbGljYXRpb25zIHVzaW5nIGEKKyAgICAgKiB7QGxpbmsgI0FDVElPTl9RVUVSWV9LRVlCT0FSRF9MQVlPVVRTfSBicm9hZGNhc3QgcmVjZWl2ZXIuCisgICAgICogPC9wPgorICAgICAqCisgICAgICogQHJldHVybiBBIGxpc3Qgb2YgYWxsIHN1cHBvcnRlZCBrZXlib2FyZCBsYXlvdXRzIGZvciBhIHNwZWNpZmljCisgICAgICogaW5wdXQgZGV2aWNlLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgS2V5Ym9hcmRMYXlvdXRbXSBnZXRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1JbS5nZXRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShpZGVudGlmaWVyKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgZ2V0IGxpc3Qgb2Yga2V5Ym9hcmQgbGF5b3V0cyBmb3IgaW5wdXQgZGV2aWNlLiIsIGV4KTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgS2V5Ym9hcmRMYXlvdXRbMF07CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBrZXlib2FyZCBsYXlvdXQgd2l0aCB0aGUgc3BlY2lmaWVkIGRlc2NyaXB0b3IuCiAgICAgICoKICAgICAgKiBAcGFyYW0ga2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yIFRoZSBrZXlib2FyZCBsYXlvdXQgZGVzY3JpcHRvciwgYXMgcmV0dXJuZWQgYnkKQEAgLTU1MCwxMyArNTc0LDEzIEBACiAgICAgICogQHJldHVybiBUaGUga2V5Ym9hcmQgbGF5b3V0IGRlc2NyaXB0b3JzLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisgICAgcHVibGljIFN0cmluZ1tdIGdldEVuYWJsZWRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnB1dERldmljZURlc2NyaXB0b3IgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBtSW0uZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoaWRlbnRpZmllcik7CisgICAgICAgICAgICByZXR1cm4gbUltLmdldEVuYWJsZWRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShpZGVudGlmaWVyKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgZ2V0IGtleWJvYXJkIGxheW91dHMgZm9yIGlucHV0IGRldmljZS4iLCBleCk7CiAgICAgICAgICAgICByZXR1cm4gQXJyYXlVdGlscy5lbXB0eUFycmF5KFN0cmluZy5jbGFzcyk7CkBAIC04MTksNiArODQzLDMzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDdXN0b21Qb2ludGVySWNvbihQb2ludGVySWNvbiBpY29uKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtSW0uc2V0Q3VzdG9tUG9pbnRlckljb24oaWNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgLy8gRG8gbm90aGluZy4KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZSB0aGUgcG9pbnRlciBpY29uIHN0YXR1cy4gV2hlbiBkZXRhY2hlZCwgdGhlIHBvaW50ZXIgaWNvbiBkaXNhcHBlYXJzLCBhbmQgZnVydGhlcgorICAgICAqIG1vdXNlIGxvY2F0aW9uIHdpbGwgYmUgc3R1Y2sgYXQgdGhlIGN1cnJlbnQgcG9pbnQuIE1vdXNlIG1vdmVtZW50IGV2ZW50cyB3aWxsIHN0aWxsIGFycml2ZSwKKyAgICAgKiBhbmQgbW92ZW1lbnQgc2hvdWxkIGJlIGhhbmRsZWQgdGhyb3VnaCB7QGxpbmsgTW90aW9uRXZlbnQuQVhJU19SRUxBVElWRV9YfSBhbmQKKyAgICAgKiB7QGxpbmsgTW90aW9uRXZlbnQuQVhJU19SRUxBVElWRV9ZfS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXRhY2hlZCB0cnVlIGlmIHRoZSBpY29uIHdpbGwgYmUgZGV0YWNoZWQgZnJvbSB0aGUgYWN0dWFsIG1vdXNlIG1vdmVtZW50LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRQb2ludGVySWNvbkRldGFjaGVkKGJvb2xlYW4gZGV0YWNoZWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbS5zZXRQb2ludGVySWNvbkRldGFjaGVkKGRldGFjaGVkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlSW5wdXREZXZpY2VzTG9ja2VkKCkgewogICAgICAgICBpZiAobUlucHV0RGV2aWNlc0NoYW5nZWRMaXN0ZW5lciA9PSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBJbnB1dERldmljZXNDaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSW5wdXREZXZpY2VzQ2hhbmdlZExpc3RlbmVyKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9LZXlib2FyZExheW91dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvaW5wdXQvS2V5Ym9hcmRMYXlvdXQuamF2YQppbmRleCBlZDUxNDAyLi41ODQwMDhjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9pbnB1dC9LZXlib2FyZExheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL2lucHV0L0tleWJvYXJkTGF5b3V0LmphdmEKQEAgLTE5LDYgKzE5LDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCiAvKioKICAqIERlc2NyaWJlcyBhIGtleWJvYXJkIGxheW91dC4KICAqCkBAIC0zMCw2ICszMiw5IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbUxhYmVsOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Db2xsZWN0aW9uOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1Qcmlvcml0eTsKKyAgICBwcml2YXRlIGZpbmFsIExvY2FsZVtdIG1Mb2NhbGVzOworICAgIHByaXZhdGUgZmluYWwgaW50IG1WZW5kb3JJZDsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtUHJvZHVjdElkOwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8S2V5Ym9hcmRMYXlvdXQ+IENSRUFUT1IgPQogICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxLZXlib2FyZExheW91dD4oKSB7CkBAIC00MSwxMSArNDYsMTkgQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICBwdWJsaWMgS2V5Ym9hcmRMYXlvdXQoU3RyaW5nIGRlc2NyaXB0b3IsIFN0cmluZyBsYWJlbCwgU3RyaW5nIGNvbGxlY3Rpb24sIGludCBwcmlvcml0eSkgeworICAgIHB1YmxpYyBLZXlib2FyZExheW91dChTdHJpbmcgZGVzY3JpcHRvciwgU3RyaW5nIGxhYmVsLCBTdHJpbmcgY29sbGVjdGlvbiwgaW50IHByaW9yaXR5LAorICAgICAgICAgICAgTG9jYWxlW10gbG9jYWxlcywgaW50IHZpZCwgaW50IHBpZCkgewogICAgICAgICBtRGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CiAgICAgICAgIG1MYWJlbCA9IGxhYmVsOwogICAgICAgICBtQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb247CiAgICAgICAgIG1Qcmlvcml0eSA9IHByaW9yaXR5OworICAgICAgICBpZiAobG9jYWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICBtTG9jYWxlcyA9IGxvY2FsZXM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtTG9jYWxlcyA9IG5ldyBMb2NhbGVbMF07CisgICAgICAgIH0KKyAgICAgICAgbVZlbmRvcklkID0gdmlkOworICAgICAgICBtUHJvZHVjdElkID0gcGlkOwogICAgIH0KIAogICAgIHByaXZhdGUgS2V5Ym9hcmRMYXlvdXQoUGFyY2VsIHNvdXJjZSkgewpAQCAtNTMsNiArNjYsMTMgQEAKICAgICAgICAgbUxhYmVsID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICAgbUNvbGxlY3Rpb24gPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgICBtUHJpb3JpdHkgPSBzb3VyY2UucmVhZEludCgpOworICAgICAgICBpbnQgTiA9IHNvdXJjZS5yZWFkSW50KCk7CisgICAgICAgIG1Mb2NhbGVzID0gbmV3IExvY2FsZVtOXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIG1Mb2NhbGVzW2ldID0gTG9jYWxlLmZvckxhbmd1YWdlVGFnKHNvdXJjZS5yZWFkU3RyaW5nKCkpOworICAgICAgICB9CisgICAgICAgIG1WZW5kb3JJZCA9IHNvdXJjZS5yZWFkSW50KCk7CisgICAgICAgIG1Qcm9kdWN0SWQgPSBzb3VyY2UucmVhZEludCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtODMsNiArMTAzLDMzIEBACiAgICAgICAgIHJldHVybiBtQ29sbGVjdGlvbjsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBsb2NhbGVzIHRoYXQgdGhpcyBrZXlib2FyZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yLgorICAgICAqIFRoaXMgbWF5IGJlIGVtcHR5IGlmIGEgbG9jYWxlIGhhcyBub3QgYmVlbiBhc3NpZ25lZCB0byB0aGlzIGtleWJvYXJkIGxheW91dC4KKyAgICAgKiBAcmV0dXJuIFRoZSBrZXlib2FyZCBsYXlvdXQncyBpbnRlbmRlZCBsb2NhbGUuCisgICAgICovCisgICAgcHVibGljIExvY2FsZVtdIGdldExvY2FsZXMoKSB7CisgICAgICAgIHJldHVybiBtTG9jYWxlczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSB2ZW5kb3IgSUQgb2YgdGhlIGhhcmR3YXJlIGRldmljZSB0aGlzIGtleWJvYXJkIGxheW91dCBpcyBpbnRlbmRlZCBmb3IuCisgICAgICogUmV0dXJucyAtMSBpZiB0aGlzIGlzIG5vdCBzcGVjaWZpYyB0byBhbnkgcGllY2Ugb2YgaGFyZHdhcmUuCisgICAgICogQHJldHVybiBUaGUgaGFyZHdhcmUgdmVuZG9yIElEIG9mIHRoZSBrZXlib2FyZCBsYXlvdXQncyBpbnRlbmRlZCBkZXZpY2UuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRWZW5kb3JJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1WZW5kb3JJZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBwcm9kdWN0IElEIG9mIHRoZSBoYXJkd2FyZSBkZXZpY2UgdGhpcyBrZXlib2FyZCBsYXlvdXQgaXMgaW50ZW5kZWQgZm9yLgorICAgICAqIFJldHVybnMgLTEgaWYgdGhpcyBpcyBub3Qgc3BlY2lmaWMgdG8gYW55IHBpZWNlIG9mIGhhcmR3YXJlLgorICAgICAqIEByZXR1cm4gVGhlIGhhcmR3YXJlIHByb2R1Y3QgSUQgb2YgdGhlIGtleWJvYXJkIGxheW91dCdzIGludGVuZGVkIGRldmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFByb2R1Y3RJZCgpIHsKKyAgICAgICAgcmV0dXJuIG1Qcm9kdWN0SWQ7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgewogICAgICAgICByZXR1cm4gMDsKQEAgLTk0LDYgKzE0MSwxNiBAQAogICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG1MYWJlbCk7CiAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobUNvbGxlY3Rpb24pOwogICAgICAgICBkZXN0LndyaXRlSW50KG1Qcmlvcml0eSk7CisgICAgICAgIGlmIChtTG9jYWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG1Mb2NhbGVzLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKExvY2FsZSBsIDogbUxvY2FsZXMpIHsKKyAgICAgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGwudG9MYW5ndWFnZVRhZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdC53cml0ZUludChtVmVuZG9ySWQpOworICAgICAgICBkZXN0LndyaXRlSW50KG1Qcm9kdWN0SWQpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaGFyZHdhcmUvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5qYXZhCmluZGV4IGM4NWU5N2IuLmQ0OTA0MDkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2hhcmR3YXJlL3NvdW5kdHJpZ2dlci9Tb3VuZFRyaWdnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9oYXJkd2FyZS9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmphdmEKQEAgLTI1LDYgKzI1LDggQEAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5VVUlEOwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3lzdGVtLk9zQ29uc3RhbnRzLio7CisKIC8qKgogICogVGhlIFNvdW5kVHJpZ2dlciBjbGFzcyBwcm92aWRlcyBhY2Nlc3MgdmlhIEpOSSB0byB0aGUgbmF0aXZlIHNlcnZpY2UgbWFuYWdpbmcKICAqIHRoZSBzb3VuZCB0cmlnZ2VyIEhBTC4KQEAgLTM1LDExICszNywxMSBAQAogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX09LID0gMDsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfRVJST1IgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfUEVSTUlTU0lPTl9ERU5JRUQgPSAtMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfTk9fSU5JVCA9IC0xOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQkFEX1ZBTFVFID0gLTIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19ERUFEX09CSkVDVCA9IC0zMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfSU5WQUxJRF9PUEVSQVRJT04gPSAtMzg7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX1BFUk1JU1NJT05fREVOSUVEID0gLUVQRVJNOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19OT19JTklUID0gLUVOT0RFVjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfQkFEX1ZBTFVFID0gLUVJTlZBTDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFUVVNfREVBRF9PQkpFQ1QgPSAtRVBJUEU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0lOVkFMSURfT1BFUkFUSU9OID0gLUVOT1NZUzsKIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIEEgTW9kdWxlUHJvcGVydGllcyBkZXNjcmliZXMgYSBnaXZlbiBzb3VuZCB0cmlnZ2VyIGhhcmR3YXJlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvaW5wdXRtZXRob2RzZXJ2aWNlL0lucHV0TWV0aG9kU2VydmljZS5qYXZhCmluZGV4IDhhYjg5OTEuLjI4MjY4ODIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL2lucHV0bWV0aG9kc2VydmljZS9JbnB1dE1ldGhvZFNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9pbnB1dG1ldGhvZHNlcnZpY2UvSW5wdXRNZXRob2RTZXJ2aWNlLmphdmEKQEAgLTE5LDE2ICsxOSwyMiBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5DYWxsU3VwZXI7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkRyYXdhYmxlUmVzOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk1haW5UaHJlYWQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkRpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlc3VsdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CkBAIC02OCw2ICs3NCw4IEBACiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIAogLyoqCiAgKiBJbnB1dE1ldGhvZFNlcnZpY2UgcHJvdmlkZXMgYSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiBhbiBJbnB1dE1ldGhvZCwKQEAgLTYzNCw2ICs2NDIsOTcgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBBIHtAbGluayBDb250ZW50T2JzZXJ2ZXJ9IHRvIG1vbml0b3Ige0BsaW5rIFNldHRpbmdzLlNlY3VyZSNTSE9XX0lNRV9XSVRIX0hBUkRfS0VZQk9BUkR9LgorICAgICAqCisgICAgICogPHA+Tm90ZSB0aGF0IHtAbGluayBTZXR0aW5ncy5TZWN1cmUjU0hPV19JTUVfV0lUSF9IQVJEX0tFWUJPQVJEfSBpcyBub3QgYSBwdWJsaWMgQVBJLgorICAgICAqIEJhc2ljYWxseSB0aGlzIGZ1bmN0aW9uYWxpdHkgc3RpbGwgbmVlZHMgdG8gYmUgY29uc2lkZXJlZCBhcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLjwvcD4KKyAgICAgKi8KKyAgICBATWFpblRocmVhZAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFNldHRpbmdzT2JzZXJ2ZXIgZXh0ZW5kcyBDb250ZW50T2JzZXJ2ZXIgeworICAgICAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgICAgIEBJbnREZWYoeworICAgICAgICAgICAgICAgIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZS5VTktOT1dOLAorICAgICAgICAgICAgICAgIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZS5GQUxTRSwKKyAgICAgICAgICAgICAgICBTaG93SW1lV2l0aEhhcmRLZXlib2FyZFR5cGUuVFJVRSwKKyAgICAgICAgfSkKKyAgICAgICAgcHJpdmF0ZSBAaW50ZXJmYWNlIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZSB7CisgICAgICAgICAgICBpbnQgVU5LTk9XTiA9IDA7CisgICAgICAgICAgICBpbnQgRkFMU0UgPSAxOworICAgICAgICAgICAgaW50IFRSVUUgPSAyOworICAgICAgICB9CisgICAgICAgIEBTaG93SW1lV2l0aEhhcmRLZXlib2FyZFR5cGUKKyAgICAgICAgcHJpdmF0ZSBpbnQgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkID0gU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmRUeXBlLlVOS05PV047CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJbnB1dE1ldGhvZFNlcnZpY2UgbVNlcnZpY2U7CisKKyAgICAgICAgcHJpdmF0ZSBTZXR0aW5nc09ic2VydmVyKElucHV0TWV0aG9kU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICBzdXBlcihuZXcgSGFuZGxlcihzZXJ2aWNlLmdldE1haW5Mb29wZXIoKSkpOworICAgICAgICAgICAgbVNlcnZpY2UgPSBzZXJ2aWNlOworICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgZmFjdG9yeSBtZXRob2QgdGhhdCBpbnRlcm5hbGx5IGVuZm9yY2VzIHR3by1waGFzZSBpbml0aWFsaXphdGlvbiB0byBtYWtlIHN1cmUgdGhhdCB0aGUKKyAgICAgICAgICogb2JqZWN0IHJlZmVyZW5jZSB3aWxsIG5vdCBiZSBlc2NhcGVkIHVudGlsIHRoZSBvYmplY3QgaXMgcHJvcGVybHkgY29uc3RydWN0ZWQuCisgICAgICAgICAqCisgICAgICAgICAqIDxwPk5PVEU6IEN1cnJlbnRseSB7QGxpbmsgU2V0dGluZ3NPYnNlcnZlcn0gaXMgYWNjZXNzZWQgb25seSBmcm9tIG1haW4gdGhyZWFkLiAgSGVuY2UKKyAgICAgICAgICogdGhpcyBlbmZvcmNlbWVudCBvZiB0d28tcGhhc2UgaW5pdGlhbGl6YXRpb24gbWF5IGJlIHVubmVjZXNzYXJ5IGF0IHRoZSBtb21lbnQuPC9wPgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc2VydmljZSB7QGxpbmsgSW5wdXRNZXRob2RTZXJ2aWNlfSB0aGF0IG5lZWRzIHRvIHJlY2VpdmUgdGhlIGNhbGxiYWNrLgorICAgICAgICAgKiBAcmV0dXJuIHtAbGluayBTZXR0aW5nc09ic2VydmVyfSB0aGF0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCB0bworICAgICAgICAgKiB7QGxpbmsgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcn0uIFRoZSBjYWxsZXIgbXVzdCBjYWxsCisgICAgICAgICAqIHtAbGluayBTZXR0aW5nc09ic2VydmVyI3VucmVnaXN0ZXIoKX0uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIFNldHRpbmdzT2JzZXJ2ZXIgY3JlYXRlQW5kUmVnaXN0ZXIoSW5wdXRNZXRob2RTZXJ2aWNlIHNlcnZpY2UpIHsKKyAgICAgICAgICAgIGZpbmFsIFNldHRpbmdzT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgU2V0dGluZ3NPYnNlcnZlcihzZXJ2aWNlKTsKKyAgICAgICAgICAgIC8vIFRoZSBvYnNlcnZlciBpcyBwcm9wZXJseSBjb25zdHJ1Y3RlZC4gTGV0J3Mgc3RhcnQgYWNjZXB0aW5nIHRoZSBldmVudC4KKyAgICAgICAgICAgIHNlcnZpY2UuZ2V0Q29udGVudFJlc29sdmVyKCkucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoU2V0dGluZ3MuU2VjdXJlLlNIT1dfSU1FX1dJVEhfSEFSRF9LRVlCT0FSRCksCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBvYnNlcnZlcik7CisgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHVucmVnaXN0ZXIoKSB7CisgICAgICAgICAgICBtU2VydmljZS5nZXRDb250ZW50UmVzb2x2ZXIoKS51bnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZFNob3dJbWVXaXRoSGFyZEtleWJvYXJkKCkgeworICAgICAgICAgICAgLy8gTGF6aWx5IGluaXRpYWxpemUgYXMgbmVlZGVkLgorICAgICAgICAgICAgaWYgKG1TaG93SW1lV2l0aEhhcmRLZXlib2FyZCA9PSBTaG93SW1lV2l0aEhhcmRLZXlib2FyZFR5cGUuVU5LTk9XTikgeworICAgICAgICAgICAgICAgIG1TaG93SW1lV2l0aEhhcmRLZXlib2FyZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnQobVNlcnZpY2UuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuU0hPV19JTUVfV0lUSF9IQVJEX0tFWUJPQVJELCAwKSAhPSAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZS5UUlVFIDogU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmRUeXBlLkZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChtU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZS5UUlVFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjYXNlIFNob3dJbWVXaXRoSGFyZEtleWJvYXJkVHlwZS5GQUxTRToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVuZXhwZWN0ZWQgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkPSIgKyBtU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlLCBVcmkgdXJpKSB7CisgICAgICAgICAgICBmaW5hbCBVcmkgc2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmRVcmkgPQorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKFNldHRpbmdzLlNlY3VyZS5TSE9XX0lNRV9XSVRIX0hBUkRfS0VZQk9BUkQpOworICAgICAgICAgICAgaWYgKHNob3dJbWVXaXRoSGFyZEtleWJvYXJkVXJpLmVxdWFscyh1cmkpKSB7CisgICAgICAgICAgICAgICAgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkID0gU2V0dGluZ3MuU2VjdXJlLmdldEludChtU2VydmljZS5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5TSE9XX0lNRV9XSVRIX0hBUkRfS0VZQk9BUkQsIDApICE9IDAgPworICAgICAgICAgICAgICAgICAgICAgICAgU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmRUeXBlLlRSVUUgOiBTaG93SW1lV2l0aEhhcmRLZXlib2FyZFR5cGUuRkFMU0U7CisgICAgICAgICAgICAgICAgbVNlcnZpY2UudXBkYXRlSW5wdXRWaWV3U2hvd24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuICJTZXR0aW5nc09ic2VydmVye21TaG93SW1lV2l0aEhhcmRLZXlib2FyZD0iICsgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkICArICJ9IjsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcml2YXRlIFNldHRpbmdzT2JzZXJ2ZXIgbVNldHRpbmdzT2JzZXJ2ZXI7CisKKyAgICAvKioKICAgICAgKiBZb3UgY2FuIGNhbGwgdGhpcyB0byBjdXN0b21pemUgdGhlIHRoZW1lIHVzZWQgYnkgeW91ciBJTUUncyB3aW5kb3cuCiAgICAgICogVGhpcyB0aGVtZSBzaG91bGQgdHlwaWNhbGx5IGJlIG9uZSB0aGF0IGRlcml2ZXMgZnJvbQogICAgICAqIHtAbGluayBhbmRyb2lkLlIuc3R5bGUjVGhlbWVfSW5wdXRNZXRob2R9LCB3aGljaCBpcyB0aGUgZGVmYXVsdCB0aGVtZQpAQCAtNjgyLDYgKzc4MSw3IEBACiAgICAgICAgIHN1cGVyLnNldFRoZW1lKG1UaGVtZSk7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKCk7CiAgICAgICAgIG1JbW0gPSAoSW5wdXRNZXRob2RNYW5hZ2VyKWdldFN5c3RlbVNlcnZpY2UoSU5QVVRfTUVUSE9EX1NFUlZJQ0UpOworICAgICAgICBtU2V0dGluZ3NPYnNlcnZlciA9IFNldHRpbmdzT2JzZXJ2ZXIuY3JlYXRlQW5kUmVnaXN0ZXIodGhpcyk7CiAgICAgICAgIC8vIElmIHRoZSBwcmV2aW91cyBJTUUgaGFzIG9jY3VwaWVkIG5vbi1lbXB0eSBpbnNldCBpbiB0aGUgc2NyZWVuLCB3ZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyCiAgICAgICAgIC8vIHdlIGNvbnRpbnVlIHRvIHVzZSB0aGUgc2FtZSBzaXplIG9mIHRoZSBpbnNldCBvciB1cGRhdGUgaXQKICAgICAgICAgbVNob3VsZENsZWFySW5zZXRPZlByZXZpb3VzSW1lID0gKG1JbW0uZ2V0SW5wdXRNZXRob2RXaW5kb3dWaXNpYmxlSGVpZ2h0KCkgPiAwKTsKQEAgLTc2NCw2ICs4NjQsMTAgQEAKICAgICAgICAgICAgIG1XaW5kb3cuZ2V0V2luZG93KCkuc2V0V2luZG93QW5pbWF0aW9ucygwKTsKICAgICAgICAgICAgIG1XaW5kb3cuZGlzbWlzcygpOwogICAgICAgICB9CisgICAgICAgIGlmIChtU2V0dGluZ3NPYnNlcnZlciAhPSBudWxsKSB7CisgICAgICAgICAgICBtU2V0dGluZ3NPYnNlcnZlci51bnJlZ2lzdGVyKCk7CisgICAgICAgICAgICBtU2V0dGluZ3NPYnNlcnZlciA9IG51bGw7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTExNDAsMjEgKzEyNDQsMzIgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc0lucHV0Vmlld1Nob3duKCkgewogICAgICAgICByZXR1cm4gbUlzSW5wdXRWaWV3U2hvd24gJiYgbVdpbmRvd1Zpc2libGU7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogT3ZlcnJpZGUgdGhpcyB0byBjb250cm9sIHdoZW4gdGhlIHNvZnQgaW5wdXQgYXJlYSBzaG91bGQgYmUgc2hvd24gdG8KLSAgICAgKiB0aGUgdXNlci4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9ubHkgc2hvd3MgdGhlIGlucHV0IHZpZXcgd2hlbgotICAgICAqIHRoZXJlIGlzIG5vIGhhcmQga2V5Ym9hcmQgb3IgdGhlIGtleWJvYXJkIGlzIGhpZGRlbi4gIElmIHlvdSBjaGFuZ2Ugd2hhdAotICAgICAqIHRoaXMgcmV0dXJucywgeW91IHdpbGwgbmVlZCB0byBjYWxsIHtAbGluayAjdXBkYXRlSW5wdXRWaWV3U2hvd24oKX0KLSAgICAgKiB5b3Vyc2VsZiB3aGVuZXZlciB0aGUgcmV0dXJuZWQgdmFsdWUgbWF5IGhhdmUgY2hhbmdlZCB0byBoYXZlIGl0Ci0gICAgICogcmUtZXZhbHVhdGVkIGFuZCBhcHBsaWVkLgorICAgICAqIE92ZXJyaWRlIHRoaXMgdG8gY29udHJvbCB3aGVuIHRoZSBzb2Z0IGlucHV0IGFyZWEgc2hvdWxkIGJlIHNob3duIHRvIHRoZSB1c2VyLiAgVGhlIGRlZmF1bHQKKyAgICAgKiBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIHtAY29kZSBmYWxzZX0gd2hlbiB0aGVyZSBpcyBubyBoYXJkIGtleWJvYXJkIG9yIHRoZSBrZXlib2FyZCBpcyBoaWRkZW4KKyAgICAgKiB1bmxlc3MgdGhlIHVzZXIgc2hvd3MgYW4gaW50ZW50aW9uIHRvIHVzZSBzb2Z0d2FyZSBrZXlib2FyZC4gIElmIHlvdSBjaGFuZ2Ugd2hhdCB0aGlzCisgICAgICogcmV0dXJucywgeW91IHdpbGwgbmVlZCB0byBjYWxsIHtAbGluayAjdXBkYXRlSW5wdXRWaWV3U2hvd24oKX0geW91cnNlbGYgd2hlbmV2ZXIgdGhlIHJldHVybmVkCisgICAgICogdmFsdWUgbWF5IGhhdmUgY2hhbmdlZCB0byBoYXZlIGl0IHJlLWV2YWx1YXRlZCBhbmQgYXBwbGllZC4KKyAgICAgKgorICAgICAqIDxwPldoZW4geW91IG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBpdCBpcyByZWNvbW1lbmRlZCB0byBjYWxsCisgICAgICoge0Bjb2RlIHN1cGVyLm9uRXZhbHVhdGVJbnB1dFZpZXdTaG93bigpfSBhbmQgcmV0dXJuIHtAY29kZSB0cnVlfSB3aGVuIHtAY29kZSB0cnVlfSBpcworICAgICAqIHJldHVybmVkLjwvcD4KICAgICAgKi8KKyAgICBAQ2FsbFN1cGVyCiAgICAgcHVibGljIGJvb2xlYW4gb25FdmFsdWF0ZUlucHV0Vmlld1Nob3duKCkgeworICAgICAgICBpZiAobVNldHRpbmdzT2JzZXJ2ZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAib25FdmFsdWF0ZUlucHV0Vmlld1Nob3duOiBtU2V0dGluZ3NPYnNlcnZlciBtdXN0IG5vdCBiZSBudWxsIGhlcmUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1TZXR0aW5nc09ic2VydmVyLnNob3VsZFNob3dJbWVXaXRoSGFyZEtleWJvYXJkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnID0gZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpOwogICAgICAgICByZXR1cm4gY29uZmlnLmtleWJvYXJkID09IENvbmZpZ3VyYXRpb24uS0VZQk9BUkRfTk9LRVlTCiAgICAgICAgICAgICAgICAgfHwgY29uZmlnLmhhcmRLZXlib2FyZEhpZGRlbiA9PSBDb25maWd1cmF0aW9uLkhBUkRLRVlCT0FSREhJRERFTl9ZRVM7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogQ29udHJvbHMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNhbmRpZGF0ZXMgZGlzcGxheSBhcmVhLiAgQnkgZGVmYXVsdAogICAgICAqIGl0IGlzIGhpZGRlbi4KQEAgLTI0ODMsNSArMjU5OCw2IEBACiAgICAgICAgICAgICAgICAgKyAiIHRvdWNoYWJsZUluc2V0cz0iICsgbVRtcEluc2V0cy50b3VjaGFibGVJbnNldHMKICAgICAgICAgICAgICAgICArICIgdG91Y2hhYmxlUmVnaW9uPSIgKyBtVG1wSW5zZXRzLnRvdWNoYWJsZVJlZ2lvbik7CiAgICAgICAgIHAucHJpbnRsbigiIG1TaG91bGRDbGVhckluc2V0T2ZQcmV2aW91c0ltZT0iICsgbVNob3VsZENsZWFySW5zZXRPZlByZXZpb3VzSW1lKTsKKyAgICAgICAgcC5wcmludGxuKCIgbVNldHRpbmdzT2JzZXJ2ZXI9IiArIG1TZXR0aW5nc09ic2VydmVyKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvbmV0L0Nvbm5lY3Rpdml0eU1hbmFnZXIuamF2YQppbmRleCA1MTVlOWEyLi4xNzZlOTIzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvQ29ubmVjdGl2aXR5TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9Db25uZWN0aXZpdHlNYW5hZ2VyLmphdmEKQEAgLTE5LDExICsxOSwxMSBAQAogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlNka0NvbnN0YW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGU7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtVdGlsczsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVM7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwpAQCAtNDYsMTIgKzQ2LDEyIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudGVsZXBob255LlBob25lQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJvdG9jb2w7CiAKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQogaW1wb3J0IGxpYmNvcmUubmV0LmV2ZW50Lk5ldHdvcmtFdmVudERpc3BhdGNoZXI7CiAKK2ltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKKwogLyoqCiAgKiBDbGFzcyB0aGF0IGFuc3dlcnMgcXVlcmllcyBhYm91dCB0aGUgc3RhdGUgb2YgbmV0d29yayBjb25uZWN0aXZpdHkuIEl0IGFsc28KICAqIG5vdGlmaWVzIGFwcGxpY2F0aW9ucyB3aGVuIG5ldHdvcmsgY29ubmVjdGl2aXR5IGNoYW5nZXMuIEdldCBhbiBpbnN0YW5jZQpAQCAtODk4LDYgKzg5OCwyNCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldHMgdGhlIFVSTCB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciByZXNvbHZpbmcgd2hldGhlciBhIGNhcHRpdmUgcG9ydGFsIGlzIHByZXNlbnQuCisgICAgICogMS4gVGhpcyBVUkwgc2hvdWxkIHJlc3BvbmQgd2l0aCBhIDIwNCByZXNwb25zZSB0byBhIEdFVCByZXF1ZXN0IHRvIGluZGljYXRlIG5vIGNhcHRpdmUKKyAgICAgKiAgICBwb3J0YWwgaXMgcHJlc2VudC4KKyAgICAgKiAyLiBUaGlzIFVSTCBtdXN0IGJlIEhUVFAgYXMgcmVkaXJlY3QgcmVzcG9uc2VzIGFyZSB1c2VkIHRvIGZpbmQgY2FwdGl2ZSBwb3J0YWwKKyAgICAgKiAgICBzaWduLWluIHBhZ2VzLiBDYXB0aXZlIHBvcnRhbHMgY2Fubm90IHJlc3BvbmQgdG8gSFRUUFMgcmVxdWVzdHMgd2l0aCByZWRpcmVjdHMuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTeXN0ZW1BcGkKKyAgICBwdWJsaWMgU3RyaW5nIGdldENhcHRpdmVQb3J0YWxTZXJ2ZXJVcmwoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0Q2FwdGl2ZVBvcnRhbFNlcnZlclVybCgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBUZWxscyB0aGUgdW5kZXJseWluZyBuZXR3b3JraW5nIHN5c3RlbSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8KICAgICAgKiBiZWdpbiB1c2luZyB0aGUgbmFtZWQgZmVhdHVyZS4gVGhlIGludGVycHJldGF0aW9uIG9mIHtAY29kZSBmZWF0dXJlfQogICAgICAqIGlzIGNvbXBsZXRlbHkgdXAgdG8gZWFjaCBuZXR3b3JraW5nIGltcGxlbWVudGF0aW9uLgpAQCAtMTYxMSw3ICsxNjI5LDcgQEAKICAgICAgICAgICAgIC8vIEhhdmUgYSBwcm92aXNpb25pbmcgYXBwIC0gbXVzdCBvbmx5IGxldCBzeXN0ZW0gYXBwcyAod2hpY2ggY2hlY2sgdGhpcyBhcHApCiAgICAgICAgICAgICAvLyB0dXJuIG9uIHRldGhlcmluZwogICAgICAgICAgICAgY29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5DT05ORUNUSVZJVFlfSU5URVJOQUwsICJDb25uZWN0aXZpdHlTZXJ2aWNlIik7CisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5URVRIRVJfUFJJVklMRUdFRCwgIkNvbm5lY3Rpdml0eVNlcnZpY2UiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICAgICAgU2V0dGluZ3MuY2hlY2tBbmROb3RlV3JpdGVTZXR0aW5nc09wZXJhdGlvbihjb250ZXh0LCB1aWQsIFNldHRpbmdzCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvSUNvbm5lY3Rpdml0eU1hbmFnZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9JQ29ubmVjdGl2aXR5TWFuYWdlci5haWRsCmluZGV4IGQ0ZGQ2NjkuLmVmOTExMzcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9JQ29ubmVjdGl2aXR5TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9JQ29ubmVjdGl2aXR5TWFuYWdlci5haWRsCkBAIC0xNjUsNCArMTY1LDYgQEAKICAgICAgICAgICAgIGluIElCaW5kZXIgYmluZGVyLCBTdHJpbmcgc3JjQWRkciwgaW50IHNyY1BvcnQsIFN0cmluZyBkc3RBZGRyKTsKIAogICAgIHZvaWQgc3RvcEtlZXBhbGl2ZShpbiBOZXR3b3JrIG5ldHdvcmssIGludCBzbG90KTsKKworICAgIFN0cmluZyBnZXRDYXB0aXZlUG9ydGFsU2VydmVyVXJsKCk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9uZXQvTmV0d29ya1Njb3JlckFwcE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU2NvcmVyQXBwTWFuYWdlci5qYXZhCmluZGV4IGVjNzZiOGEuLmU1NTVmYTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU2NvcmVyQXBwTWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL25ldC9OZXR3b3JrU2NvcmVyQXBwTWFuYWdlci5qYXZhCkBAIC0zMyw2ICszMyw3IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogLyoqCkBAIC05MCwxMyArOTEsMTggQEAKICAgICAgKiBAcmV0dXJuIHRoZSBsaXN0IG9mIHNjb3JlcnMsIG9yIHRoZSBlbXB0eSBsaXN0IGlmIHRoZXJlIGFyZSBubyB2YWxpZCBzY29yZXJzLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxOZXR3b3JrU2NvcmVyQXBwRGF0YT4gZ2V0QWxsVmFsaWRTY29yZXJzKENvbnRleHQgY29udGV4dCkgewotICAgICAgICBMaXN0PE5ldHdvcmtTY29yZXJBcHBEYXRhPiBzY29yZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIC8vIE5ldHdvcmsgc2NvcmVyIGFwcHMgY2FuIG9ubHkgcnVuIGFzIHRoZSBwcmltYXJ5IHVzZXIgc28gZXhpdCBlYXJseSBpZiB3ZSdyZSBub3QgdGhlCisgICAgICAgIC8vIHByaW1hcnkgdXNlci4KKyAgICAgICAgaWYgKFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpICE9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pIHsKKyAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgfQogCisgICAgICAgIExpc3Q8TmV0d29ya1Njb3JlckFwcERhdGE+IHNjb3JlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIC8vIE9ubHkgYXBwcyBpbnN0YWxsZWQgdW5kZXIgdGhlIHByaW1hcnkgdXNlciBvZiB0aGUgZGV2aWNlIGNhbiBiZSBzY29yZXJzLgogICAgICAgICAvLyBUT0RPOiBodHRwOi8vYi8yMzQyMjc2MwogICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiByZWNlaXZlcnMgPQotICAgICAgICAgICAgICAgIHBtLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKFNDT1JFX0lOVEVOVCwgMCAvKiBmbGFncyAqLywgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgICAgICAgICAgcG0ucXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoU0NPUkVfSU5URU5ULCAwIC8qIGZsYWdzICovLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgZm9yIChSZXNvbHZlSW5mbyByZWNlaXZlciA6IHJlY2VpdmVycykgewogICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBhIG1pc25vbWVyLCBzZWUgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvI2FjdGl2aXR5SW5mbwogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIHJlY2VpdmVySW5mbyA9IHJlY2VpdmVyLmFjdGl2aXR5SW5mbzsKQEAgLTEwNSw4ICsxMTEsOSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFwZXJtaXNzaW9uLkJST0FEQ0FTVF9ORVRXT1JLX1BSSVZJTEVHRUQuZXF1YWxzKHJlY2VpdmVySW5mby5wZXJtaXNzaW9uKSkgewotICAgICAgICAgICAgICAgIC8vIFJlY2VpdmVyIGRvZXNuJ3QgcmVxdWlyZSB0aGUgQlJPQURDQVNUX05FVFdPUktfUFJJVklMRUdFRCBwZXJtaXNzaW9uLCB3aGljaCBtZWFucwotICAgICAgICAgICAgICAgIC8vIGFueW9uZSBjb3VsZCB0cmlnZ2VyIG5ldHdvcmsgc2NvcmluZyBhbmQgZmxvb2QgdGhlIGZyYW1ld29yayB3aXRoIHNjb3JlIHJlcXVlc3RzLgorICAgICAgICAgICAgICAgIC8vIFJlY2VpdmVyIGRvZXNuJ3QgcmVxdWlyZSB0aGUgQlJPQURDQVNUX05FVFdPUktfUFJJVklMRUdFRCBwZXJtaXNzaW9uLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIG1lYW5zIGFueW9uZSBjb3VsZCB0cmlnZ2VyIG5ldHdvcmsgc2NvcmluZyBhbmQgZmxvb2QgdGhlIGZyYW1ld29yayB3aXRoIHNjb3JlCisgICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMuCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocG0uY2hlY2tQZXJtaXNzaW9uKHBlcm1pc3Npb24uU0NPUkVfTkVUV09SS1MsIHJlY2VpdmVySW5mby5wYWNrYWdlTmFtZSkgIT0KQEAgLTEyOCw4ICsxMzUsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTk9URTogbG9hZExhYmVsIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSByZWNlaXZlcidzIGxhYmVsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIGFwcAotICAgICAgICAgICAgLy8gbGFiZWwgaWYgbm9uZSBpcyBwcmVzZW50LgorICAgICAgICAgICAgLy8gTk9URTogbG9hZExhYmVsIHdpbGwgYXR0ZW1wdCB0byBsb2FkIHRoZSByZWNlaXZlcidzIGxhYmVsIGFuZCBmYWxsIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAvLyBhcHAgbGFiZWwgaWYgbm9uZSBpcyBwcmVzZW50LgogICAgICAgICAgICAgc2NvcmVycy5hZGQobmV3IE5ldHdvcmtTY29yZXJBcHBEYXRhKHJlY2VpdmVySW5mby5wYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXJJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQsIHJlY2VpdmVySW5mby5sb2FkTGFiZWwocG0pLAogICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uQWN0aXZpdHlDbGFzc05hbWUpKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNBY3Rpdml0eU1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL25mYy9OZmNBY3Rpdml0eU1hbmFnZXIuamF2YQppbmRleCBkNjE5YzBhLi5jN2Q0YzY1IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9uZmMvTmZjQWN0aXZpdHlNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvbmZjL05mY0FjdGl2aXR5TWFuYWdlci5qYXZhCkBAIC0zNzEsNDAgKzM3MSw0NCBAQAogICAgICAgICAgICAgZmxhZ3MgPSBzdGF0ZS5mbGFnczsKICAgICAgICAgICAgIGFjdGl2aXR5ID0gc3RhdGUuYWN0aXZpdHk7CiAgICAgICAgIH0KKyAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gTWFrZSBjYWxsYmFja3Mgd2l0aG91dCBsb2NrCisgICAgICAgICAgICBpZiAobmRlZkNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gbmRlZkNhbGxiYWNrLmNyZWF0ZU5kZWZNZXNzYWdlKGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1cmlzQ2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHVyaXMgPSB1cmlzQ2FsbGJhY2suY3JlYXRlQmVhbVVyaXMoZXZlbnQpOworICAgICAgICAgICAgICAgIGlmICh1cmlzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFVyaT4gdmFsaWRVcmlzID0gbmV3IEFycmF5TGlzdDxVcmk+KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoVXJpIHVyaSA6IHVyaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVyaSBub3QgYWxsb3dlZCB0byBiZSBudWxsLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWUgPT0gbnVsbCB8fCAoIXNjaGVtZS5lcXVhbHNJZ25vcmVDYXNlKCJmaWxlIikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXNjaGVtZS5lcXVhbHNJZ25vcmVDYXNlKCJjb250ZW50IikpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVXJpIG5lZWRzIHRvIGhhdmUgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIHNjaGVtZSBmaWxlIG9yIHNjaGVtZSBjb250ZW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1cmkgPSBDb250ZW50UHJvdmlkZXIubWF5YmVBZGRVc2VySWQodXJpLCBVc2VySGFuZGxlLm15VXNlcklkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRVcmlzLmFkZCh1cmkpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgLy8gTWFrZSBjYWxsYmFja3Mgd2l0aG91dCBsb2NrCi0gICAgICAgIGlmIChuZGVmQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbWVzc2FnZSAgPSBuZGVmQ2FsbGJhY2suY3JlYXRlTmRlZk1lc3NhZ2UoZXZlbnQpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1cmlzQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgdXJpcyA9IHVyaXNDYWxsYmFjay5jcmVhdGVCZWFtVXJpcyhldmVudCk7Ci0gICAgICAgICAgICBpZiAodXJpcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlMaXN0PFVyaT4gdmFsaWRVcmlzID0gbmV3IEFycmF5TGlzdDxVcmk+KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChVcmkgdXJpIDogdXJpcykgewotICAgICAgICAgICAgICAgICAgICBpZiAodXJpID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVyaSBub3QgYWxsb3dlZCB0byBiZSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtZSA9PSBudWxsIHx8ICghc2NoZW1lLmVxdWFsc0lnbm9yZUNhc2UoImZpbGUiKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICFzY2hlbWUuZXF1YWxzSWdub3JlQ2FzZSgiY29udGVudCIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVXJpIG5lZWRzIHRvIGhhdmUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlaXRoZXIgc2NoZW1lIGZpbGUgb3Igc2NoZW1lIGNvbnRlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHVyaSA9IENvbnRlbnRQcm92aWRlci5tYXliZUFkZFVzZXJJZCh1cmksIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkVXJpcy5hZGQodXJpKTsKKyAgICAgICAgICAgICAgICAgICAgdXJpcyA9IHZhbGlkVXJpcy50b0FycmF5KG5ldyBVcmlbdmFsaWRVcmlzLnNpemUoKV0pOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVyaXMgPSB2YWxpZFVyaXMudG9BcnJheShuZXcgVXJpW3ZhbGlkVXJpcy5zaXplKCldKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAodXJpcyAhPSBudWxsICYmIHVyaXMubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgZm9yIChVcmkgdXJpIDogdXJpcykgewotICAgICAgICAgICAgICAgIC8vIEdyYW50IHRoZSBORkMgcHJvY2VzcyBwZXJtaXNzaW9uIHRvIHJlYWQgdGhlc2UgVVJJcwotICAgICAgICAgICAgICAgIGFjdGl2aXR5LmdyYW50VXJpUGVybWlzc2lvbigiY29tLmFuZHJvaWQubmZjIiwgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfR1JBTlRfUkVBRF9VUklfUEVSTUlTU0lPTik7CisgICAgICAgICAgICBpZiAodXJpcyAhPSBudWxsICYmIHVyaXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGZvciAoVXJpIHVyaSA6IHVyaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gR3JhbnQgdGhlIE5GQyBwcm9jZXNzIHBlcm1pc3Npb24gdG8gcmVhZCB0aGVzZSBVUklzCisgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmdyYW50VXJpUGVybWlzc2lvbigiY29tLmFuZHJvaWQubmZjIiwgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudC5GTEFHX0dSQU5UX1JFQURfVVJJX1BFUk1JU1NJT04pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbmV3IEJlYW1TaGFyZURhdGEobWVzc2FnZSwgdXJpcywgbmV3IFVzZXJIYW5kbGUoVXNlckhhbmRsZS5teVVzZXJJZCgpKSwgZmxhZ3MpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Jhc2VCdW5kbGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0Jhc2VCdW5kbGUuamF2YQppbmRleCBjZDQ4M2IxLi5lZTdiZDlhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9CYXNlQnVuZGxlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvQmFzZUJ1bmRsZS5qYXZhCkBAIC0zMiw3ICszMiw5IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJCdW5kbGUiOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAKKyAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QZXJzaXN0YWJsZUJ1bmRsZS5jcHAuCiAgICAgc3RhdGljIGZpbmFsIGludCBCVU5ETEVfTUFHSUMgPSAweDRDNDQ0RTQyOyAvLyAnQicgJ04nICdEJyAnTCcKKwogICAgIHN0YXRpYyBmaW5hbCBQYXJjZWwgRU1QVFlfUEFSQ0VMOwogCiAgICAgc3RhdGljIHsKQEAgLTEzMDgsNiArMTMxMCw4IEBACiAgICAgICogQHBhcmFtIHBhcmNlbCBUaGUgcGFyY2VsIHRvIGNvcHkgdGhpcyBidW5kbGUgdG8uCiAgICAgICovCiAgICAgdm9pZCB3cml0ZVRvUGFyY2VsSW5uZXIoUGFyY2VsIHBhcmNlbCwgaW50IGZsYWdzKSB7CisgICAgICAgIC8vIEtlZXAgaW1wbGVtZW50YXRpb24gaW4gc3luYyB3aXRoIHdyaXRlVG9QYXJjZWwoKSBpbgorICAgICAgICAvLyBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QZXJzaXN0YWJsZUJ1bmRsZS5jcHAuCiAgICAgICAgIGlmIChtUGFyY2VsbGVkRGF0YSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobVBhcmNlbGxlZERhdGEgPT0gRU1QVFlfUEFSQ0VMKSB7CiAgICAgICAgICAgICAgICAgcGFyY2VsLndyaXRlSW50KDApOwpAQCAtMTM0NSw2ICsxMzQ5LDggQEAKICAgICAgKiBAcGFyYW0gcGFyY2VsIFRoZSBwYXJjZWwgdG8gb3ZlcndyaXRlIHRoaXMgYnVuZGxlIGZyb20uCiAgICAgICovCiAgICAgdm9pZCByZWFkRnJvbVBhcmNlbElubmVyKFBhcmNlbCBwYXJjZWwpIHsKKyAgICAgICAgLy8gS2VlcCBpbXBsZW1lbnRhdGlvbiBpbiBzeW5jIHdpdGggcmVhZEZyb21QYXJjZWwoKSBpbgorICAgICAgICAvLyBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QZXJzaXN0YWJsZUJ1bmRsZS5jcHAuCiAgICAgICAgIGludCBsZW5ndGggPSBwYXJjZWwucmVhZEludCgpOwogICAgICAgICByZWFkRnJvbVBhcmNlbElubmVyKHBhcmNlbCwgbGVuZ3RoKTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvRGVidWcuamF2YQppbmRleCBmZGQzNGY1Li5lNTg3NDRiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9EZWJ1Zy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0RlYnVnLmphdmEKQEAgLTEzMCw2ICsxMzAsOSBAQAogICAgICAgICAvKiogVGhlIGRpcnR5IGRhbHZpayBwYWdlcyB0aGF0IGhhdmUgYmVlbiBzd2FwcGVkIG91dC4gKi8KICAgICAgICAgLyoqIEBoaWRlIFdlIG1heSB3YW50IHRvIGV4cG9zZSB0aGlzLCBldmVudHVhbGx5LiAqLwogICAgICAgICBwdWJsaWMgaW50IGRhbHZpa1N3YXBwZWRPdXQ7CisgICAgICAgIC8qKiBUaGUgZGlydHkgZGFsdmlrIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHN3YXBwZWQgb3V0LCBwcm9wb3J0aW9uYWwuICovCisgICAgICAgIC8qKiBAaGlkZSBXZSBtYXkgd2FudCB0byBleHBvc2UgdGhpcywgZXZlbnR1YWxseS4gKi8KKyAgICAgICAgcHVibGljIGludCBkYWx2aWtTd2FwcGVkT3V0UHNzOwogCiAgICAgICAgIC8qKiBUaGUgcHJvcG9ydGlvbmFsIHNldCBzaXplIGZvciB0aGUgbmF0aXZlIGhlYXAuICovCiAgICAgICAgIHB1YmxpYyBpbnQgbmF0aXZlUHNzOwpAQCAtMTQ5LDYgKzE1Miw5IEBACiAgICAgICAgIC8qKiBUaGUgZGlydHkgbmF0aXZlIHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIHN3YXBwZWQgb3V0LiAqLwogICAgICAgICAvKiogQGhpZGUgV2UgbWF5IHdhbnQgdG8gZXhwb3NlIHRoaXMsIGV2ZW50dWFsbHkuICovCiAgICAgICAgIHB1YmxpYyBpbnQgbmF0aXZlU3dhcHBlZE91dDsKKyAgICAgICAgLyoqIFRoZSBkaXJ0eSBuYXRpdmUgcGFnZXMgdGhhdCBoYXZlIGJlZW4gc3dhcHBlZCBvdXQsIHByb3BvcnRpb25hbC4gKi8KKyAgICAgICAgLyoqIEBoaWRlIFdlIG1heSB3YW50IHRvIGV4cG9zZSB0aGlzLCBldmVudHVhbGx5LiAqLworICAgICAgICBwdWJsaWMgaW50IG5hdGl2ZVN3YXBwZWRPdXRQc3M7CiAKICAgICAgICAgLyoqIFRoZSBwcm9wb3J0aW9uYWwgc2V0IHNpemUgZm9yIGV2ZXJ5dGhpbmcgZWxzZS4gKi8KICAgICAgICAgcHVibGljIGludCBvdGhlclBzczsKQEAgLTE2OCw2ICsxNzQsMTMgQEAKICAgICAgICAgLyoqIFRoZSBkaXJ0eSBwYWdlcyB1c2VkIGJ5IGFueXRpbmcgZWxzZSB0aGF0IGhhdmUgYmVlbiBzd2FwcGVkIG91dC4gKi8KICAgICAgICAgLyoqIEBoaWRlIFdlIG1heSB3YW50IHRvIGV4cG9zZSB0aGlzLCBldmVudHVhbGx5LiAqLwogICAgICAgICBwdWJsaWMgaW50IG90aGVyU3dhcHBlZE91dDsKKyAgICAgICAgLyoqIFRoZSBkaXJ0eSBwYWdlcyB1c2VkIGJ5IGFueXRpbmcgZWxzZSB0aGF0IGhhdmUgYmVlbiBzd2FwcGVkIG91dCwgcHJvcG9ydGlvbmFsLiAqLworICAgICAgICAvKiogQGhpZGUgV2UgbWF5IHdhbnQgdG8gZXhwb3NlIHRoaXMsIGV2ZW50dWFsbHkuICovCisgICAgICAgIHB1YmxpYyBpbnQgb3RoZXJTd2FwcGVkT3V0UHNzOworCisgICAgICAgIC8qKiBXaGV0aGVyIHRoZSBrZXJuZWwgcmVwb3J0cyBwcm9wb3J0aW9uYWwgc3dhcCB1c2FnZSAqLworICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzU3dhcHBlZE91dFBzczsKIAogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSEVBUF9VTktOT1dOID0gMDsKQEAgLTIzNSw3ICsyNDgsNyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fRFZLX1NUQVRTID0gODsKIAogICAgICAgICAvKiogQGhpZGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVNX0NBVEVHT1JJRVMgPSA3OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOVU1fQ0FURUdPUklFUyA9IDg7CiAKICAgICAgICAgLyoqIEBoaWRlICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IG9mZnNldFBzcyA9IDA7CkBAIC0yNTEsNiArMjY0LDggQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgb2Zmc2V0U2hhcmVkQ2xlYW4gPSA1OwogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgb2Zmc2V0U3dhcHBlZE91dCA9IDY7CisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBvZmZzZXRTd2FwcGVkT3V0UHNzID0gNzsKIAogICAgICAgICBwcml2YXRlIGludFtdIG90aGVyU3RhdHMgPSBuZXcgaW50WyhOVU1fT1RIRVJfU1RBVFMrTlVNX0RWS19TVEFUUykqTlVNX0NBVEVHT1JJRVNdOwogCkBAIC0yNjEsNyArMjc2LDcgQEAKICAgICAgICAgICogUmV0dXJuIHRvdGFsIFBTUyBtZW1vcnkgdXNhZ2UgaW4ga0IuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IGdldFRvdGFsUHNzKCkgewotICAgICAgICAgICAgcmV0dXJuIGRhbHZpa1BzcyArIG5hdGl2ZVBzcyArIG90aGVyUHNzOworICAgICAgICAgICAgcmV0dXJuIGRhbHZpa1BzcyArIG5hdGl2ZVBzcyArIG90aGVyUHNzICsgZ2V0VG90YWxTd2FwcGVkT3V0UHNzKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTI3NCw3ICsyODksOCBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybiB0b3RhbCBQU1MgbWVtb3J5IHVzYWdlIGluIGtCLgorICAgICAgICAgKiBSZXR1cm4gdG90YWwgUFNTIG1lbW9yeSB1c2FnZSBpbiBrQiBtYXBwaW5nIGEgZmlsZSBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBleHRlbnNpb246CisgICAgICAgICAqIC5zbywgLmphciwgLmFwaywgLnR0ZiwgLmRleCwgLm9kZXgsIC5vYXQsIC5hcnQgLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGludCBnZXRUb3RhbFN3YXBwYWJsZVBzcygpIHsKICAgICAgICAgICAgIHJldHVybiBkYWx2aWtTd2FwcGFibGVQc3MgKyBuYXRpdmVTd2FwcGFibGVQc3MgKyBvdGhlclN3YXBwYWJsZVBzczsKQEAgLTMxNiw2ICszMzIsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBkYWx2aWtTd2FwcGVkT3V0ICsgbmF0aXZlU3dhcHBlZE91dCArIG90aGVyU3dhcHBlZE91dDsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm4gdG90YWwgc3dhcHBlZCBvdXQgbWVtb3J5IGluIGtCLCBwcm9wb3J0aW9uYWwuCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldFRvdGFsU3dhcHBlZE91dFBzcygpIHsKKyAgICAgICAgICAgIHJldHVybiBkYWx2aWtTd2FwcGVkT3V0UHNzICsgbmF0aXZlU3dhcHBlZE91dFBzcyArIG90aGVyU3dhcHBlZE91dFBzczsKKyAgICAgICAgfQorCiAgICAgICAgIC8qKiBAaGlkZSAqLwogICAgICAgICBwdWJsaWMgaW50IGdldE90aGVyUHNzKGludCB3aGljaCkgewogICAgICAgICAgICAgcmV0dXJuIG90aGVyU3RhdHNbd2hpY2gqTlVNX0NBVEVHT1JJRVMgKyBvZmZzZXRQc3NdOwpAQCAtMzU5LDYgKzM4MywxMSBAQAogICAgICAgICB9CiAKICAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0T3RoZXJTd2FwcGVkT3V0UHNzKGludCB3aGljaCkgeworICAgICAgICAgICAgcmV0dXJuIG90aGVyU3RhdHNbd2hpY2gqTlVNX0NBVEVHT1JJRVMgKyBvZmZzZXRTd2FwcGVkT3V0UHNzXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBAaGlkZSAqLwogICAgICAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRPdGhlckxhYmVsKGludCB3aGljaCkgewogICAgICAgICAgICAgc3dpdGNoICh3aGljaCkgewogICAgICAgICAgICAgICAgIGNhc2UgT1RIRVJfREFMVklLX09USEVSOiByZXR1cm4gIkRhbHZpayBPdGhlciI7CkBAIC02MzIsMTIgKzY2MSwyNCBAQAogICAgICAgICAgKiAgICBrbm93IGlmIHRoZSBTd2FwIG1lbW9yeSBpcyBzaGFyZWQgb3IgcHJpdmF0ZSwgc28gd2UgZG9uJ3Qga25vdwogICAgICAgICAgKiAgICB3aGF0IHRvIGJsYW1lIG9uIHRoZSBhcHBsaWNhdGlvbiBhbmQgd2hhdCBvbiB0aGUgc3lzdGVtLgogICAgICAgICAgKiAgICBGb3Igbm93LCBqdXN0IGx1bXAgYWxsIHRoZSBTd2FwIGluIG9uZSBwbGFjZS4KKyAgICAgICAgICogICAgRm9yIGtlcm5lbHMgcmVwb3J0aW5nIFN3YXBQc3Mge0BsaW5rICNnZXRTdW1tYXJ5VG90YWxTd2FwUHNzKCl9CisgICAgICAgICAqICAgIHdpbGwgcmVwb3J0IHRoZSBhcHBsaWNhdGlvbiBwcm9wb3J0aW9uYWwgU3dhcC4KICAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0U3VtbWFyeVRvdGFsU3dhcCgpIHsKICAgICAgICAgICAgIHJldHVybiBnZXRUb3RhbFN3YXBwZWRPdXQoKTsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBUb3RhbCBwcm9wb3J0aW9uYWwgU3dhcCBpbiBLQi4KKyAgICAgICAgICogTm90ZXM6CisgICAgICAgICAqICAqIEFsd2F5cyAwIGlmIHtAbGluayAjaGFzU3dhcHBlZE91dFBzc30gaXMgZmFsc2UuCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgaW50IGdldFN1bW1hcnlUb3RhbFN3YXBQc3MoKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0VG90YWxTd2FwcGVkT3V0UHNzKCk7CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtNjY0LDYgKzcwNSw4IEBACiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KG90aGVyUHJpdmF0ZUNsZWFuKTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQob3RoZXJTaGFyZWRDbGVhbik7CiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KG90aGVyU3dhcHBlZE91dCk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KGhhc1N3YXBwZWRPdXRQc3MgPyAxIDogMCk7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KG90aGVyU3dhcHBlZE91dFBzcyk7CiAgICAgICAgICAgICBkZXN0LndyaXRlSW50QXJyYXkob3RoZXJTdGF0cyk7CiAgICAgICAgIH0KIApAQCAtNjg5LDYgKzczMiw4IEBACiAgICAgICAgICAgICBvdGhlclByaXZhdGVDbGVhbiA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICAgICAgICAgICBvdGhlclNoYXJlZENsZWFuID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgICAgICAgIG90aGVyU3dhcHBlZE91dCA9IHNvdXJjZS5yZWFkSW50KCk7CisgICAgICAgICAgICBoYXNTd2FwcGVkT3V0UHNzID0gc291cmNlLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgb3RoZXJTd2FwcGVkT3V0UHNzID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgICAgICAgIG90aGVyU3RhdHMgPSBzb3VyY2UuY3JlYXRlSW50QXJyYXkoKTsKICAgICAgICAgfQogCkBAIC0xNTYzLDExICsxNjA4LDEyIEBACiAKICAgICAvKioKICAgICAgKiBSZXRyaWV2ZXMgdGhlIFBTUyBtZW1vcnkgdXNlZCBieSB0aGUgcHJvY2VzcyBhcyBnaXZlbiBieSB0aGUKLSAgICAgKiBzbWFwcy4gIE9wdGlvbmFsbHkgc3VwcGx5IGEgbG9uZyBhcnJheSBvZiAxIGVudHJ5IHRvIGFsc28KLSAgICAgKiByZWNlaXZlIHRoZSB1c3Mgb2YgdGhlIHByb2Nlc3MsIGFuZCBhbm90aGVyIGFycmF5IHRvIGFsc28KLSAgICAgKiByZXRyaWV2ZSB0aGUgc2VwYXJhdGUgbWVtdHJhY2sgc2l6ZS4gIEBoaWRlCisgICAgICogc21hcHMuICBPcHRpb25hbGx5IHN1cHBseSBhIGxvbmcgYXJyYXkgb2YgMiBlbnRyaWVzIHRvIGFsc28KKyAgICAgKiByZWNlaXZlIHRoZSBVc3MgYW5kIFN3YXBQc3Mgb2YgdGhlIHByb2Nlc3MsIGFuZCBhbm90aGVyIGFycmF5IHRvIGFsc28KKyAgICAgKiByZXRyaWV2ZSB0aGUgc2VwYXJhdGUgbWVtdHJhY2sgc2l6ZS4KKyAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGxvbmcgZ2V0UHNzKGludCBwaWQsIGxvbmdbXSBvdXRVc3MsIGxvbmdbXSBvdXRNZW10cmFjayk7CisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgbG9uZyBnZXRQc3MoaW50IHBpZCwgbG9uZ1tdIG91dFVzc1N3YXBQc3MsIGxvbmdbXSBvdXRNZW10cmFjayk7CiAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNRU1JTkZPX1RPVEFMID0gMDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL0Vudmlyb25tZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9FbnZpcm9ubWVudC5qYXZhCmluZGV4IGEwMWQzNGEuLjJjYTlhYjhhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9FbnZpcm9ubWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL0Vudmlyb25tZW50LmphdmEKQEAgLTM3LDYgKzM3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX0FORFJPSURfU1RPUkFHRSA9ICJBTkRST0lEX1NUT1JBR0UiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfRE9XTkxPQURfQ0FDSEUgPSAiRE9XTkxPQURfQ0FDSEUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfT0VNX1JPT1QgPSAiT0VNX1JPT1QiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfT0RNX1JPT1QgPSAiT0RNX1JPT1QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTlZfVkVORE9SX1JPT1QgPSAiVkVORE9SX1JPT1QiOwogCiAgICAgLyoqIHtAaGlkZX0gKi8KQEAgLTU2LDYgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlIERJUl9BTkRST0lEX1NUT1JBR0UgPSBnZXREaXJlY3RvcnkoRU5WX0FORFJPSURfU1RPUkFHRSwgIi9zdG9yYWdlIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmlsZSBESVJfRE9XTkxPQURfQ0FDSEUgPSBnZXREaXJlY3RvcnkoRU5WX0RPV05MT0FEX0NBQ0hFLCAiL2NhY2hlIik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmlsZSBESVJfT0VNX1JPT1QgPSBnZXREaXJlY3RvcnkoRU5WX09FTV9ST09ULCAiL29lbSIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGUgRElSX09ETV9ST09UID0gZ2V0RGlyZWN0b3J5KEVOVl9PRE1fUk9PVCwgIi9vZG0iKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlIERJUl9WRU5ET1JfUk9PVCA9IGdldERpcmVjdG9yeShFTlZfVkVORE9SX1JPT1QsICIvdmVuZG9yIik7CiAKICAgICBwcml2YXRlIHN0YXRpYyBVc2VyRW52aXJvbm1lbnQgc0N1cnJlbnRVc2VyOwpAQCAtMTU2LDYgKzE1OCwxNiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHVybiByb290IGRpcmVjdG9yeSBvZiB0aGUgIm9kbSIgcGFydGl0aW9uIGhvbGRpbmcgT0RNIGN1c3RvbWl6YXRpb25zLAorICAgICAqIGlmIGFueS4gSWYgcHJlc2VudCwgdGhlIHBhcnRpdGlvbiBpcyBtb3VudGVkIHJlYWQtb25seS4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBGaWxlIGdldE9kbURpcmVjdG9yeSgpIHsKKyAgICAgICAgcmV0dXJuIERJUl9PRE1fUk9PVDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZXR1cm4gcm9vdCBkaXJlY3Rvcnkgb2YgdGhlICJ2ZW5kb3IiIHBhcnRpdGlvbiB0aGF0IGhvbGRzIHZlbmRvci1wcm92aWRlZAogICAgICAqIHNvZnR3YXJlIHRoYXQgc2hvdWxkIHBlcnNpc3QgYWNyb3NzIHNpbXBsZSByZWZsYXNoaW5nIG9mIHRoZSAic3lzdGVtIiBwYXJ0aXRpb24uCiAgICAgICogQGhpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsLmphdmEKaW5kZXggOWI2OGY5MC4uMjYzMTI0NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsLmphdmEKQEAgLTIwNCw2ICsyMDQsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhcmNlbFtdIHNPd25lZFBvb2wgPSBuZXcgUGFyY2VsW1BPT0xfU0laRV07CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGFyY2VsW10gc0hvbGRlclBvb2wgPSBuZXcgUGFyY2VsW1BPT0xfU0laRV07CiAKKyAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCBmcmFtZXdvcmtzL25hdGl2ZS9saWJzL2JpbmRlci9QZXJzaXN0YWJsZUJ1bmRsZS5jcHAuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZBTF9OVUxMID0gLTE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZBTF9TVFJJTkcgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWQUxfSU5URUdFUiA9IDE7CkBAIC03MDQsNiArNzA1LDggQEAKICAgICAgICAgICAgIHdyaXRlSW50KC0xKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAvLyBLZWVwIHRoZSBmb3JtYXQgb2YgdGhpcyBQYXJjZWwgaW4gc3luYyB3aXRoIHdyaXRlVG9QYXJjZWxJbm5lcigpIGluCisgICAgICAgIC8vIGZyYW1ld29ya3MvbmF0aXZlL2xpYnMvYmluZGVyL1BlcnNpc3RhYmxlQnVuZGxlLmNwcC4KICAgICAgICAgZmluYWwgaW50IE4gPSB2YWwuc2l6ZSgpOwogICAgICAgICB3cml0ZUludChOKTsKICAgICAgICAgaWYgKERFQlVHX0FSUkFZX01BUCkgewpAQCAtMTM3MCw3ICsxMzczLDEzIEBACiAgICAgICAgICAgICAvLyBNdXN0IGJlIGJlZm9yZSBQYXJjZWxhYmxlCiAgICAgICAgICAgICB3cml0ZUludChWQUxfQlVORExFKTsKICAgICAgICAgICAgIHdyaXRlQnVuZGxlKChCdW5kbGUpIHYpOworICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBQZXJzaXN0YWJsZUJ1bmRsZSkgeworICAgICAgICAgICAgd3JpdGVJbnQoVkFMX1BFUlNJU1RBQkxFQlVORExFKTsKKyAgICAgICAgICAgIHdyaXRlUGVyc2lzdGFibGVCdW5kbGUoKFBlcnNpc3RhYmxlQnVuZGxlKSB2KTsKICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgUGFyY2VsYWJsZSkgeworICAgICAgICAgICAgLy8gSU1QT1RBTlQ6IGNhc2VzIGZvciBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IFBhcmNlbGFibGUgbXVzdAorICAgICAgICAgICAgLy8gY29tZSBiZWZvcmUgdGhlIFBhcmNlbGFibGUgY2FzZSwgc28gdGhhdCB0aGVpciBzcGVjaWZpYyBWQUxfKgorICAgICAgICAgICAgLy8gdHlwZXMgd2lsbCBiZSB3cml0dGVuLgogICAgICAgICAgICAgd3JpdGVJbnQoVkFMX1BBUkNFTEFCTEUpOwogICAgICAgICAgICAgd3JpdGVQYXJjZWxhYmxlKChQYXJjZWxhYmxlKSB2LCAwKTsKICAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgU2hvcnQpIHsKQEAgLTE0MjYsOSArMTQzNSw2IEBACiAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIEJ5dGUpIHsKICAgICAgICAgICAgIHdyaXRlSW50KFZBTF9CWVRFKTsKICAgICAgICAgICAgIHdyaXRlSW50KChCeXRlKSB2KTsKLSAgICAgICAgfSBlbHNlIGlmICh2IGluc3RhbmNlb2YgUGVyc2lzdGFibGVCdW5kbGUpIHsKLSAgICAgICAgICAgIHdyaXRlSW50KFZBTF9QRVJTSVNUQUJMRUJVTkRMRSk7Ci0gICAgICAgICAgICB3cml0ZVBlcnNpc3RhYmxlQnVuZGxlKChQZXJzaXN0YWJsZUJ1bmRsZSkgdik7CiAgICAgICAgIH0gZWxzZSBpZiAodiBpbnN0YW5jZW9mIFNpemUpIHsKICAgICAgICAgICAgIHdyaXRlSW50KFZBTF9TSVpFKTsKICAgICAgICAgICAgIHdyaXRlU2l6ZSgoU2l6ZSkgdik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUGFyY2VsRmlsZURlc2NyaXB0b3IuamF2YQppbmRleCAxMzVmMzY5Li5kNTQ5MWQzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9QYXJjZWxGaWxlRGVzY3JpcHRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1BhcmNlbEZpbGVEZXNjcmlwdG9yLmphdmEKQEAgLTIzMyw2ICsyMzMsMTkgQEAKICAgICAgICAgZmluYWwgRmlsZURlc2NyaXB0b3IgZmQgPSBvcGVuSW50ZXJuYWwoZmlsZSwgbW9kZSk7CiAgICAgICAgIGlmIChmZCA9PSBudWxsKSByZXR1cm4gbnVsbDsKIAorICAgICAgICByZXR1cm4gZnJvbUZkKGZkLCBoYW5kbGVyLCBsaXN0ZW5lcik7CisgICAgfQorCisgICAgLyoqIHtAaGlkZX0gKi8KKyAgICBwdWJsaWMgc3RhdGljIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZyb21GZCgKKyAgICAgICAgICAgIEZpbGVEZXNjcmlwdG9yIGZkLCBIYW5kbGVyIGhhbmRsZXIsIGZpbmFsIE9uQ2xvc2VMaXN0ZW5lciBsaXN0ZW5lcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSGFuZGxlciBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxpc3RlbmVyID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxpc3RlbmVyIG11c3Qgbm90IGJlIG51bGwiKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZpbmFsIEZpbGVEZXNjcmlwdG9yW10gY29tbSA9IGNyZWF0ZUNvbW1Tb2NrZXRQYWlyKCk7CiAgICAgICAgIGZpbmFsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHBmZCA9IG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvcihmZCwgY29tbVswXSk7CiAgICAgICAgIGZpbmFsIE1lc3NhZ2VRdWV1ZSBxdWV1ZSA9IGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0UXVldWUoKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9QZXJzaXN0YWJsZUJ1bmRsZS5haWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjA1ODczLi4wMDAwMDAwCi0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1BlcnNpc3RhYmxlQnVuZGxlLmFpZGwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0vKgotKioKLSoqIENvcHlyaWdodCAyMDE0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLXBhY2thZ2UgYW5kcm9pZC5vczsKLQotcGFyY2VsYWJsZSBQZXJzaXN0YWJsZUJ1bmRsZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1Bvd2VyTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyLmphdmEKaW5kZXggYTBhMDA2MC4uNDE1OWQ4OSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUG93ZXJNYW5hZ2VyLmphdmEKQEAgLTM4OSw2ICszODksMTMgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBSRUJPT1RfUkVDT1ZFUlkgPSAicmVjb3ZlcnkiOwogCiAgICAgLyoqCisgICAgICogVGhlIHZhbHVlIHRvIHBhc3MgYXMgdGhlICdyZWFzb24nIGFyZ3VtZW50IHRvIHJlYm9vdCgpIHdoZW4gZGV2aWNlIG93bmVyIHJlcXVlc3RzIGEgcmVib290IG9uCisgICAgICogdGhlIGRldmljZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFQk9PVF9SRVFVRVNURURfQllfREVWSUNFX09XTkVSID0gImRldmljZW93bmVyIjsKKworICAgIC8qKgogICAgICAqIFRoZSB2YWx1ZSB0byBwYXNzIGFzIHRoZSAncmVhc29uJyBhcmd1bWVudCB0byBhbmRyb2lkX3JlYm9vdCgpLgogICAgICAqIEBoaWRlCiAgICAgICovCkBAIC05NzMsNiArOTgwLDE0IEBACiAgICAgICAgICAgICA9ICJhbmRyb2lkLm9zLmFjdGlvbi5QT1dFUl9TQVZFX01PREVfQ0hBTkdFRCI7CiAKICAgICAvKioKKyAgICAgKiBJbnRlbnQgdGhhdCBpcyBicm9hZGNhc3Qgd2hlbiB0aGUgc3RhdGUgb2Yge0BsaW5rICNpc1Bvd2VyU2F2ZU1vZGUoKX0gY2hhbmdlcy4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTZGtDb25zdGFudChTZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGUuQlJPQURDQVNUX0lOVEVOVF9BQ1RJT04pCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1BPV0VSX1NBVkVfTU9ERV9DSEFOR0VEX0lOVEVSTkFMCisgICAgICAgICAgICA9ICJhbmRyb2lkLm9zLmFjdGlvbi5QT1dFUl9TQVZFX01PREVfQ0hBTkdFRF9JTlRFUk5BTCI7CisKKyAgICAvKioKICAgICAgKiBJbnRlbnQgdGhhdCBpcyBicm9hZGNhc3Qgd2hlbiB0aGUgc3RhdGUgb2Yge0BsaW5rICNpc0RldmljZUlkbGVNb2RlKCl9IGNoYW5nZXMuCiAgICAgICogVGhpcyBicm9hZGNhc3QgaXMgb25seSBzZW50IHRvIHJlZ2lzdGVyZWQgcmVjZWl2ZXJzLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvUHJvY2Vzcy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvUHJvY2Vzcy5qYXZhCmluZGV4IDU0YmZjYTMuLmVjYTJjM2IgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1Byb2Nlc3MuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Qcm9jZXNzLmphdmEKQEAgLTE0NCw2ICsxNDQsMTIgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSEFSRURfUkVMUk9fVUlEID0gMTAzNzsKIAogICAgIC8qKgorICAgICAqIERlZmluZXMgdGhlIFVJRC9HSUQgZm9yIHRoZSBhdWRpb3NlcnZlciBwcm9jZXNzLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVVESU9TRVJWRVJfVUlEID0gMTA0MTsKKworICAgIC8qKgogICAgICAqIERlZmluZXMgdGhlIHN0YXJ0IG9mIGEgcmFuZ2Ugb2YgVUlEcyAoYW5kIEdJRHMpLCBnb2luZyBmcm9tIHRoaXMKICAgICAgKiBudW1iZXIgdG8ge0BsaW5rICNMQVNUX0FQUExJQ0FUSU9OX1VJRH0gdGhhdCBhcmUgcmVzZXJ2ZWQgZm9yIGFzc2lnbmluZwogICAgICAqIHRvIGFwcGxpY2F0aW9ucy4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9TZXJ2aWNlTWFuYWdlci5qYXZhCmluZGV4IDEzYjhiNjYuLjJiYTRhYTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvU2VydmljZU1hbmFnZXIuamF2YQpAQCAtMTEyLDggKzExMiwxMCBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IHJ1bm5pbmcgc2VydmljZXMuCisgICAgICogQHJldHVybiBhbiBhcnJheSBvZiBhbGwgY3VycmVudGx5IHJ1bm5pbmcgc2VydmljZXMsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGluCisgICAgICogY2FzZSBvZiBhbiBleGNlcHRpb24KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGxpc3RTZXJ2aWNlcygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gbGlzdFNlcnZpY2VzKCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGdldElTZXJ2aWNlTWFuYWdlcigpLmxpc3RTZXJ2aWNlcygpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvVHJhY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1RyYWNlLmphdmEKaW5kZXggNzUyOWM1Mi4uOWU4MTAzYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvVHJhY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9UcmFjZS5qYXZhCkBAIC03OSw2ICs3OSw4IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBsb25nIFRSQUNFX1RBR19QQUNLQUdFX01BTkFHRVIgPSAxTCA8PCAxODsKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVFJBQ0VfVEFHX1NZU1RFTV9TRVJWRVIgPSAxTCA8PCAxOTsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGxvbmcgVFJBQ0VfVEFHX0RBVEFCQVNFID0gMUwgPDwgMjA7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFRSQUNFX1RBR19OT1RfUkVBRFkgPSAxTCA8PCA2MzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NFQ1RJT05fTkFNRV9MRU4gPSAxMjc7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VySGFuZGxlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VySGFuZGxlLmphdmEKaW5kZXggZjk0NmNhNy4uYmNjMTIxMyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlckhhbmRsZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJIYW5kbGUuamF2YQpAQCAtMTYsNyArMTYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLm9zOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkFwcElkSW50OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlVzZXJJZEludDsKIAogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CiAKQEAgLTMwLDEzICszMywxMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBFUl9VU0VSX1JBTkdFID0gMTAwMDAwOwogCiAgICAgLyoqIEBoaWRlIEEgdXNlciBpZCB0byBpbmRpY2F0ZSBhbGwgdXNlcnMgb24gdGhlIGRldmljZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJfQUxMID0gLTE7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBAVXNlcklkSW50IGludCBVU0VSX0FMTCA9IC0xOwogCiAgICAgLyoqIEBoaWRlIEEgdXNlciBoYW5kbGUgdG8gaW5kaWNhdGUgYWxsIHVzZXJzIG9uIHRoZSBkZXZpY2UgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVzZXJIYW5kbGUgQUxMID0gbmV3IFVzZXJIYW5kbGUoVVNFUl9BTEwpOwogCiAgICAgLyoqIEBoaWRlIEEgdXNlciBpZCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudGx5IGFjdGl2ZSB1c2VyICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9DVVJSRU5UID0gLTI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBAVXNlcklkSW50IGludCBVU0VSX0NVUlJFTlQgPSAtMjsKIAogICAgIC8qKiBAaGlkZSBBIHVzZXIgaGFuZGxlIHRvIGluZGljYXRlIHRoZSBjdXJyZW50IHVzZXIgb2YgdGhlIGRldmljZSAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVXNlckhhbmRsZSBDVVJSRU5UID0gbmV3IFVzZXJIYW5kbGUoVVNFUl9DVVJSRU5UKTsKQEAgLTQ0LDcgKzQ3LDcgQEAKICAgICAvKiogQGhpZGUgQSB1c2VyIGlkIHRvIGluZGljYXRlIHRoYXQgd2Ugd291bGQgbGlrZSB0byBzZW5kIHRvIHRoZSBjdXJyZW50CiAgICAgICogIHVzZXIsIGJ1dCBpZiB0aGlzIGlzIGNhbGxpbmcgZnJvbSBhIHVzZXIgcHJvY2VzcyB0aGVuIHdlIHdpbGwgc2VuZCBpdAogICAgICAqICB0byB0aGUgY2FsbGVyJ3MgdXNlciBpbnN0ZWFkIG9mIGZhaWxpbmcgd2l0aCBhIHNlY3VyaXR5IGV4Y2VwdGlvbiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVTRVJfQ1VSUkVOVF9PUl9TRUxGID0gLTM7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBAVXNlcklkSW50IGludCBVU0VSX0NVUlJFTlRfT1JfU0VMRiA9IC0zOwogCiAgICAgLyoqIEBoaWRlIEEgdXNlciBoYW5kbGUgdG8gaW5kaWNhdGUgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIHNlbmQgdG8gdGhlIGN1cnJlbnQKICAgICAgKiAgdXNlciwgYnV0IGlmIHRoaXMgaXMgY2FsbGluZyBmcm9tIGEgdXNlciBwcm9jZXNzIHRoZW4gd2Ugd2lsbCBzZW5kIGl0CkBAIC01MiwxNCArNTUsMTQgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFVzZXJIYW5kbGUgQ1VSUkVOVF9PUl9TRUxGID0gbmV3IFVzZXJIYW5kbGUoVVNFUl9DVVJSRU5UX09SX1NFTEYpOwogCiAgICAgLyoqIEBoaWRlIEFuIHVuZGVmaW5lZCB1c2VyIGlkICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9OVUxMID0gLTEwMDAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQFVzZXJJZEludCBpbnQgVVNFUl9OVUxMID0gLTEwMDAwOwogCiAgICAgLyoqCiAgICAgICogQGhpZGUgQSB1c2VyIGlkIGNvbnN0YW50IHRvIGluZGljYXRlIHRoZSAib3duZXIiIHVzZXIgb2YgdGhlIGRldmljZQogICAgICAqIEBkZXByZWNhdGVkIENvbnNpZGVyIHVzaW5nIGVpdGhlciB7QGxpbmsgVXNlckhhbmRsZSNVU0VSX1NZU1RFTX0gY29uc3RhbnQgb3IKICAgICAgKiBjaGVjayB0aGUgdGFyZ2V0IHVzZXIncyBmbGFnIHtAbGluayBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm8jaXNBZG1pbn0uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVNFUl9PV05FUiA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBAVXNlcklkSW50IGludCBVU0VSX09XTkVSID0gMDsKIAogICAgIC8qKgogICAgICAqIEBoaWRlIEEgdXNlciBoYW5kbGUgdG8gaW5kaWNhdGUgdGhlIHByaW1hcnkvb3duZXIgdXNlciBvZiB0aGUgZGV2aWNlCkBAIC02OSw3ICs3Miw3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVc2VySGFuZGxlIE9XTkVSID0gbmV3IFVzZXJIYW5kbGUoVVNFUl9PV05FUik7CiAKICAgICAvKiogQGhpZGUgQSB1c2VyIGlkIGNvbnN0YW50IHRvIGluZGljYXRlIHRoZSAic3lzdGVtIiB1c2VyIG9mIHRoZSBkZXZpY2UgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVU0VSX1NZU1RFTSA9IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBAVXNlcklkSW50IGludCBVU0VSX1NZU1RFTSA9IDA7CiAKICAgICAvKiogQGhpZGUgQSB1c2VyIGhhbmRsZSB0byBpbmRpY2F0ZSB0aGUgInN5c3RlbSIgdXNlciBvZiB0aGUgZGV2aWNlICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBVc2VySGFuZGxlIFNZU1RFTSA9IG5ldyBVc2VySGFuZGxlKFVTRVJfU1lTVEVNKTsKQEAgLTEyNyw3ICsxMzAsNyBAQAogICAgICAqIFJldHVybnMgdGhlIHVzZXIgaWQgZm9yIGEgZ2l2ZW4gdWlkLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0VXNlcklkKGludCB1aWQpIHsKKyAgICBwdWJsaWMgc3RhdGljIEBVc2VySWRJbnQgaW50IGdldFVzZXJJZChpbnQgdWlkKSB7CiAgICAgICAgIGlmIChNVV9FTkFCTEVEKSB7CiAgICAgICAgICAgICByZXR1cm4gdWlkIC8gUEVSX1VTRVJfUkFOR0U7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xMzYsMTIgKzEzOSwxMiBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENhbGxpbmdVc2VySWQoKSB7CisgICAgcHVibGljIHN0YXRpYyBAVXNlcklkSW50IGludCBnZXRDYWxsaW5nVXNlcklkKCkgewogICAgICAgICByZXR1cm4gZ2V0VXNlcklkKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkpOwogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgVXNlckhhbmRsZSBvZihpbnQgdXNlcklkKSB7CisgICAgcHVibGljIHN0YXRpYyBVc2VySGFuZGxlIG9mKEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gdXNlcklkID09IFVTRVJfU1lTVEVNID8gU1lTVEVNIDogbmV3IFVzZXJIYW5kbGUodXNlcklkKTsKICAgICB9CiAKQEAgLTE0OSw3ICsxNTIsNyBAQAogICAgICAqIFJldHVybnMgdGhlIHVpZCB0aGF0IGlzIGNvbXBvc2VkIGZyb20gdGhlIHVzZXJJZCBhbmQgdGhlIGFwcElkLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0VWlkKGludCB1c2VySWQsIGludCBhcHBJZCkgeworICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldFVpZChAVXNlcklkSW50IGludCB1c2VySWQsIEBBcHBJZEludCBpbnQgYXBwSWQpIHsKICAgICAgICAgaWYgKE1VX0VOQUJMRUQpIHsKICAgICAgICAgICAgIHJldHVybiB1c2VySWQgKiBQRVJfVVNFUl9SQU5HRSArIChhcHBJZCAlIFBFUl9VU0VSX1JBTkdFKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE2MSw3ICsxNjQsOCBAQAogICAgICAqIFJldHVybnMgdGhlIGFwcCBpZCAob3IgYmFzZSB1aWQpIGZvciBhIGdpdmVuIHVpZCwgc3RyaXBwaW5nIG91dCB0aGUgdXNlciBpZCBmcm9tIGl0LgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0QXBwSWQoaW50IHVpZCkgeworICAgIEBUZXN0QXBpCisgICAgcHVibGljIHN0YXRpYyBAQXBwSWRJbnQgaW50IGdldEFwcElkKGludCB1aWQpIHsKICAgICAgICAgcmV0dXJuIHVpZCAlIFBFUl9VU0VSX1JBTkdFOwogICAgIH0KIApAQCAtMTY5LDcgKzE3Myw3IEBACiAgICAgICogUmV0dXJucyB0aGUgZ2lkIHNoYXJlZCBiZXR3ZWVuIGFsbCBhcHBzIHdpdGggdGhpcyB1c2VySWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGludCBnZXRVc2VyR2lkKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRVc2VyR2lkKEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gZ2V0VWlkKHVzZXJJZCwgUHJvY2Vzcy5TSEFSRURfVVNFUl9HSUQpOwogICAgIH0KIApAQCAtMTg2LDcgKzE5MCw3IEBACiAgICAgICogUmV0dXJucyB0aGUgYXBwIGlkIGZvciBhIGdpdmVuIHNoYXJlZCBhcHAgZ2lkLiBSZXR1cm5zIC0xIGlmIHRoZSBJRCBpcyBpbnZhbGlkLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0QXBwSWRGcm9tU2hhcmVkQXBwR2lkKGludCBnaWQpIHsKKyAgICBwdWJsaWMgc3RhdGljIEBBcHBJZEludCBpbnQgZ2V0QXBwSWRGcm9tU2hhcmVkQXBwR2lkKGludCBnaWQpIHsKICAgICAgICAgZmluYWwgaW50IGFwcElkID0gZ2V0QXBwSWQoZ2lkKSArIFByb2Nlc3MuRklSU1RfQVBQTElDQVRJT05fVUlECiAgICAgICAgICAgICAgICAgLSBQcm9jZXNzLkZJUlNUX1NIQVJFRF9BUFBMSUNBVElPTl9HSUQ7CiAgICAgICAgIGlmIChhcHBJZCA8IDAgfHwgYXBwSWQgPj0gUHJvY2Vzcy5GSVJTVF9TSEFSRURfQVBQTElDQVRJT05fR0lEKSB7CkBAIC0yNTcsNyArMjYxLDcgQEAKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGludCBwYXJzZVVzZXJBcmcoU3RyaW5nIGFyZykgeworICAgIHB1YmxpYyBzdGF0aWMgQFVzZXJJZEludCBpbnQgcGFyc2VVc2VyQXJnKFN0cmluZyBhcmcpIHsKICAgICAgICAgaW50IHVzZXJJZDsKICAgICAgICAgaWYgKCJhbGwiLmVxdWFscyhhcmcpKSB7CiAgICAgICAgICAgICB1c2VySWQgPSBVc2VySGFuZGxlLlVTRVJfQUxMOwpAQCAtMjc5LDcgKzI4Myw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCi0gICAgcHVibGljIHN0YXRpYyBpbnQgbXlVc2VySWQoKSB7CisgICAgcHVibGljIHN0YXRpYyBAVXNlcklkSW50IGludCBteVVzZXJJZCgpIHsKICAgICAgICAgcmV0dXJuIGdldFVzZXJJZChQcm9jZXNzLm15VWlkKCkpOwogICAgIH0KIApAQCAtMzE1LDcgKzMxOSw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAU3lzdGVtQXBpCi0gICAgcHVibGljIGludCBnZXRJZGVudGlmaWVyKCkgeworICAgIHB1YmxpYyBAVXNlcklkSW50IGludCBnZXRJZGVudGlmaWVyKCkgewogICAgICAgICByZXR1cm4gbUhhbmRsZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJNYW5hZ2VyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9Vc2VyTWFuYWdlci5qYXZhCmluZGV4IDEzNDZhMzkuLmQxYjNmNTkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL1VzZXJNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvb3MvVXNlck1hbmFnZXIuamF2YQpAQCAtMjAsNiArMjAsNyBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uUmVxdWlyZXNQZXJtaXNzaW9uOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlVzZXJJZEludDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXI7CkBAIC0zMSw2ICszMiw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zOwpAQCAtNTYsNiArNTgsMTAgQEAKICAgICAgKiBBdXRoZW50aWNhdG9yLgogICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDxjb2RlPmZhbHNlPC9jb2RlPi4KICAgICAgKgorICAgICAqIDxwPkZyb20ge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNOfSBhIHByb2ZpbGUgb3IgZGV2aWNlIG93bmVyIGFwcCBjYW4gc3RpbGwKKyAgICAgKiB1c2Uge0BsaW5rIGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXJ9IEFQSXMgdG8gYWRkIG9yIHJlbW92ZSBhY2NvdW50cyB3aGVuIGFjY291bnQKKyAgICAgKiBtYW5hZ2VtZW50IGlzIGRpc2FsbG93ZWQuCisgICAgICoKICAgICAgKiA8cC8+S2V5IGZvciB1c2VyIHJlc3RyaWN0aW9ucy4KICAgICAgKiA8cC8+VHlwZTogQm9vbGVhbgogICAgICAqIEBzZWUgRGV2aWNlUG9saWN5TWFuYWdlciNhZGRVc2VyUmVzdHJpY3Rpb24oQ29tcG9uZW50TmFtZSwgU3RyaW5nKQpAQCAtNTEyLDYgKzUxOCwxNiBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERJU0FMTE9XX0NBTUVSQSA9ICJub19jYW1lcmEiOwogCiAgICAgLyoqCisgICAgICogU3BlY2lmaWVzIGlmIGEgdXNlciBpcyBub3QgYWxsb3dlZCB0byB1c2UgY2VsbHVsYXIgZGF0YSB3aGVuIHJvYW1pbmcuIFRoaXMgY2FuIG9ubHkgYmUgc2V0IGJ5CisgICAgICogZGV2aWNlIG93bmVycy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGNvZGU+ZmFsc2U8L2NvZGU+LgorICAgICAqCisgICAgICogQHNlZSBEZXZpY2VQb2xpY3lNYW5hZ2VyI2FkZFVzZXJSZXN0cmljdGlvbihDb21wb25lbnROYW1lLCBTdHJpbmcpCisgICAgICogQHNlZSBEZXZpY2VQb2xpY3lNYW5hZ2VyI2NsZWFyVXNlclJlc3RyaWN0aW9uKENvbXBvbmVudE5hbWUsIFN0cmluZykKKyAgICAgKiBAc2VlICNnZXRVc2VyUmVzdHJpY3Rpb25zKCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNBTExPV19EQVRBX1JPQU1JTkcgPSAibm9fZGF0YV9yb2FtaW5nIjsKKworICAgIC8qKgogICAgICAqIEFsbG93cyBhcHBzIGluIHRoZSBwYXJlbnQgcHJvZmlsZSB0byBoYW5kbGUgd2ViIGxpbmtzIGZyb20gdGhlIG1hbmFnZWQgcHJvZmlsZS4KICAgICAgKgogICAgICAqIFRoaXMgdXNlciByZXN0cmljdGlvbiBoYXMgYW4gZWZmZWN0IG9ubHkgaW4gYSBtYW5hZ2VkIHByb2ZpbGUuCkBAIC01OTYsNyArNjEyLDcgQEAKICAgICAgKiBAcmV0dXJuIHRoZSB1c2VyIGhhbmRsZSBvZiB0aGlzIHByb2Nlc3MuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFVzZXJIYW5kbGUoKSB7CisgICAgcHVibGljIEBVc2VySWRJbnQgaW50IGdldFVzZXJIYW5kbGUoKSB7CiAgICAgICAgIHJldHVybiBVc2VySGFuZGxlLm15VXNlcklkKCk7CiAgICAgfQogCkBAIC02NjYsNyArNjgyLDcgQEAKICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHVzZXIgaXMgYW4gYWRtaW4gdXNlci4gVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgYWRtaW4KICAgICAgKiB1c2VyLgogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzVXNlckFkbWluKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VzZXJBZG1pbihAVXNlcklkSW50IGludCB1c2VySWQpIHsKICAgICAgICAgVXNlckluZm8gdXNlciA9IGdldFVzZXJJbmZvKHVzZXJJZCk7CiAgICAgICAgIHJldHVybiB1c2VyICE9IG51bGwgJiYgdXNlci5pc0FkbWluKCk7CiAgICAgfQpAQCAtNjkwLDcgKzcwNiw3IEBACiAgICAgICogQ2hlY2tzIGlmIHNwZWNpZmllZCB1c2VyIGNhbiBoYXZlIHJlc3RyaWN0ZWQgcHJvZmlsZS4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGNhbkhhdmVSZXN0cmljdGVkUHJvZmlsZShpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gY2FuSGF2ZVJlc3RyaWN0ZWRQcm9maWxlKEBVc2VySWRJbnQgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmNhbkhhdmVSZXN0cmljdGVkUHJvZmlsZSh1c2VySWQpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTczNiw3ICs3NTIsNyBAQAogICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHVzZXIgaXMgZXBoZW1lcmFsLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNVc2VyRXBoZW1lcmFsKGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VzZXJFcGhlbWVyYWwoQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGZpbmFsIFVzZXJJbmZvIHVzZXIgPSBnZXRVc2VySW5mbyh1c2VySWQpOwogICAgICAgICByZXR1cm4gdXNlciAhPSBudWxsICYmIHVzZXIuaXNFcGhlbWVyYWwoKTsKICAgICB9CkBAIC03NzYsNiArNzkyLDE3IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGNhbGxpbmcgdXNlciBpcyBydW5uaW5nIGluIGEgImxvY2tlZCIgc3RhdGUuIEEgdXNlciBpcworICAgICAqIHVubG9ja2VkIG9ubHkgYWZ0ZXIgdGhleSd2ZSBlbnRlcmVkIHRoZWlyIGNyZWRlbnRpYWxzIChzdWNoIGFzIGEgbG9jaworICAgICAqIHBhdHRlcm4gb3IgUElOKSwgYW5kIGNyZWRlbnRpYWwtZW5jcnlwdGVkIHByaXZhdGUgYXBwIGRhdGEgc3RvcmFnZSBpcworICAgICAqIGF2YWlsYWJsZS4KKyAgICAgKi8KKyAgICBARGVwcmVjYXRlZAorICAgIHB1YmxpYyBib29sZWFuIGlzVXNlclJ1bm5pbmdBbmRMb2NrZWQoKSB7CisgICAgICAgIHJldHVybiBpc1VzZXJSdW5uaW5nQW5kTG9ja2VkKFByb2Nlc3MubXlVc2VySGFuZGxlKCkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiB1c2VyIGlzIHJ1bm5pbmcgaW4gYSAibG9ja2VkIiBzdGF0ZS4gQSB1c2VyCiAgICAgICogaXMgdW5sb2NrZWQgb25seSBhZnRlciB0aGV5J3ZlIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYSBsb2NrCiAgICAgICogcGF0dGVybiBvciBQSU4pLCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgcHJpdmF0ZSBhcHAgZGF0YSBzdG9yYWdlIGlzCkBAIC03ODMsNiArODEwLDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyIHRvIHJldHJpZXZlIHRoZSB1bmxvY2tlZCBzdGF0ZSBmb3IuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kTG9ja2VkKFVzZXJIYW5kbGUgdXNlcikgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuaXNVc2VyUnVubmluZygKQEAgLTc5Myw2ICs4MjEsMTcgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm4gd2hldGhlciB0aGUgY2FsbGluZyB1c2VyIGlzIHJ1bm5pbmcgaW4gYW4gInVubG9ja2VkIiBzdGF0ZS4gQSB1c2VyCisgICAgICogaXMgdW5sb2NrZWQgb25seSBhZnRlciB0aGV5J3ZlIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYSBsb2NrCisgICAgICogcGF0dGVybiBvciBQSU4pLCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgcHJpdmF0ZSBhcHAgZGF0YSBzdG9yYWdlIGlzCisgICAgICogYXZhaWxhYmxlLgorICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZ0FuZFVubG9ja2VkKCkgeworICAgICAgICByZXR1cm4gaXNVc2VyUnVubmluZ0FuZFVubG9ja2VkKFByb2Nlc3MubXlVc2VySGFuZGxlKCkpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiB1c2VyIGlzIHJ1bm5pbmcgaW4gYW4gInVubG9ja2VkIiBzdGF0ZS4gQSB1c2VyCiAgICAgICogaXMgdW5sb2NrZWQgb25seSBhZnRlciB0aGV5J3ZlIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYSBsb2NrCiAgICAgICogcGF0dGVybiBvciBQSU4pLCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgcHJpdmF0ZSBhcHAgZGF0YSBzdG9yYWdlIGlzCkBAIC04MDAsNiArODM5LDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB1c2VyIHRvIHJldHJpZXZlIHRoZSB1bmxvY2tlZCBzdGF0ZSBmb3IuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBpc1VzZXJSdW5uaW5nQW5kVW5sb2NrZWQoVXNlckhhbmRsZSB1c2VyKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5pc1VzZXJSdW5uaW5nKApAQCAtODEwLDEzICs4NTAsNDMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBSZXR1cm4gd2hldGhlciB0aGUgY2FsbGluZyB1c2VyIGlzIHJ1bm5pbmcgaW4gYW4gInVubG9ja2VkIiBzdGF0ZS4gQSB1c2VyCisgICAgICogaXMgdW5sb2NrZWQgb25seSBhZnRlciB0aGV5J3ZlIGVudGVyZWQgdGhlaXIgY3JlZGVudGlhbHMgKHN1Y2ggYXMgYSBsb2NrCisgICAgICogcGF0dGVybiBvciBQSU4pLCBhbmQgY3JlZGVudGlhbC1lbmNyeXB0ZWQgcHJpdmF0ZSBhcHAgZGF0YSBzdG9yYWdlIGlzCisgICAgICogYXZhaWxhYmxlLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzVXNlclVubG9ja2VkKCkgeworICAgICAgICByZXR1cm4gaXNVc2VyVW5sb2NrZWQoUHJvY2Vzcy5teVVzZXJIYW5kbGUoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHVzZXIgaXMgcnVubmluZyBpbiBhbiAidW5sb2NrZWQiIHN0YXRlLiBBIHVzZXIKKyAgICAgKiBpcyB1bmxvY2tlZCBvbmx5IGFmdGVyIHRoZXkndmUgZW50ZXJlZCB0aGVpciBjcmVkZW50aWFscyAoc3VjaCBhcyBhIGxvY2sKKyAgICAgKiBwYXR0ZXJuIG9yIFBJTiksIGFuZCBjcmVkZW50aWFsLWVuY3J5cHRlZCBwcml2YXRlIGFwcCBkYXRhIHN0b3JhZ2UgaXMKKyAgICAgKiBhdmFpbGFibGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXNlciB0byByZXRyaWV2ZSB0aGUgdW5sb2NrZWQgc3RhdGUgZm9yLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzVXNlclVubG9ja2VkKFVzZXJIYW5kbGUgdXNlcikgeworICAgICAgICByZXR1cm4gaXNVc2VyVW5sb2NrZWQodXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgIH0KKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgcHVibGljIGJvb2xlYW4gaXNVc2VyVW5sb2NrZWQoQFVzZXJJZEludCBpbnQgdXNlcklkKSB7CisgICAgICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgcGl2b3QgdGhpcyBiYWNrIHRvIGxvb2sgYXQgQWN0aXZpdHlNYW5hZ2VyIHN0YXRlLAorICAgICAgICAvLyBidXQgdGhlcmUgaXMgcmFjZSB3aGVyZSB3ZSBjYW4gc3RhcnQgYSBub24tZW5jcnlwdGlvbi1hd2FyZSBsYXVuY2hlcgorICAgICAgICAvLyBiZWZvcmUgdGhhdCBsaWZlY3ljbGUgaGFzIGVudGVyZWQgdGhlIHJ1bm5pbmcgdW5sb2NrZWQgc3RhdGUuCisgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKFN0b3JhZ2VNYW5hZ2VyLmNsYXNzKS5pc1VzZXJLZXlVbmxvY2tlZCh1c2VySWQpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIFVzZXJJbmZvIG9iamVjdCBkZXNjcmliaW5nIGEgc3BlY2lmaWMgdXNlci4KICAgICAgKiBSZXF1aXJlcyB7QGxpbmsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uI01BTkFHRV9VU0VSU30gcGVybWlzc2lvbi4KICAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSB0aGUgdXNlciBoYW5kbGUgb2YgdGhlIHVzZXIgd2hvc2UgaW5mb3JtYXRpb24gaXMgYmVpbmcgcmVxdWVzdGVkLgogICAgICAqIEByZXR1cm4gdGhlIFVzZXJJbmZvIG9iamVjdCBmb3IgYSBzcGVjaWZpYyB1c2VyLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIFVzZXJJbmZvIGdldFVzZXJJbmZvKGludCB1c2VySGFuZGxlKSB7CisgICAgcHVibGljIFVzZXJJbmZvIGdldFVzZXJJbmZvKEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRVc2VySW5mbyh1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CkBAIC0xMDM0LDcgKzExMDQsNyBAQAogICAgICAqIEByZXR1cm4gdGhlIFVzZXJJbmZvIG9iamVjdCBmb3IgdGhlIGNyZWF0ZWQgdXNlciwgb3IgbnVsbCBpZiB0aGUgdXNlciBjb3VsZCBub3QgYmUgY3JlYXRlZC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBVc2VySW5mbyBjcmVhdGVQcm9maWxlRm9yVXNlcihTdHJpbmcgbmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlckhhbmRsZSkgeworICAgIHB1YmxpYyBVc2VySW5mbyBjcmVhdGVQcm9maWxlRm9yVXNlcihTdHJpbmcgbmFtZSwgaW50IGZsYWdzLCBAVXNlcklkSW50IGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuY3JlYXRlUHJvZmlsZUZvclVzZXIobmFtZSwgZmxhZ3MsIHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTEwNzQsNyArMTE0NCw3IEBACiAgICAgICogQHBhcmFtIHVzZXJIYW5kbGUKICAgICAgKiBAcmV0dXJuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWFya0d1ZXN0Rm9yRGVsZXRpb24oaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBtYXJrR3Vlc3RGb3JEZWxldGlvbihAVXNlcklkSW50IGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UubWFya0d1ZXN0Rm9yRGVsZXRpb24odXNlckhhbmRsZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTA5MSw3ICsxMTYxLDcgQEAKICAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSB0aGUgaWQgb2YgdGhlIHByb2ZpbGUgdG8gZW5hYmxlCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRVc2VyRW5hYmxlZChpbnQgdXNlckhhbmRsZSkgeworICAgIHB1YmxpYyB2b2lkIHNldFVzZXJFbmFibGVkKEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFVzZXJFbmFibGVkKHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMTEzMCw3ICsxMjAwLDcgQEAKICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEwsCiAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9VU0VSUwogICAgIH0pCi0gICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0VXNlckFjY291bnQoaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIFN0cmluZyBnZXRVc2VyQWNjb3VudChAVXNlcklkSW50IGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0VXNlckFjY291bnQodXNlckhhbmRsZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTE0Nyw3ICsxMjE3LDcgQEAKICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEwsCiAgICAgICAgICAgICBNYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9VU0VSUwogICAgIH0pCi0gICAgcHVibGljIHZvaWQgc2V0VXNlckFjY291bnQoaW50IHVzZXJIYW5kbGUsIEBOdWxsYWJsZSBTdHJpbmcgYWNjb3VudE5hbWUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRVc2VyQWNjb3VudChAVXNlcklkSW50IGludCB1c2VySGFuZGxlLCBATnVsbGFibGUgU3RyaW5nIGFjY291bnROYW1lKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtU2VydmljZS5zZXRVc2VyQWNjb3VudCh1c2VySGFuZGxlLCBhY2NvdW50TmFtZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTIwMCw3ICsxMjcwLDcgQEAKICAgICAgKiBAcmV0dXJuIHRydWUgaWYgbW9yZSBtYW5hZ2VkIHByb2ZpbGVzIGNhbiBiZSBhZGRlZCwgZmFsc2UgaWYgbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGNhbkFkZE1vcmVNYW5hZ2VkUHJvZmlsZXMoaW50IHVzZXJJZCwgYm9vbGVhbiBhbGxvd2VkVG9SZW1vdmVPbmUpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBjYW5BZGRNb3JlTWFuYWdlZFByb2ZpbGVzKEBVc2VySWRJbnQgaW50IHVzZXJJZCwgYm9vbGVhbiBhbGxvd2VkVG9SZW1vdmVPbmUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5jYW5BZGRNb3JlTWFuYWdlZFByb2ZpbGVzKHVzZXJJZCwgYWxsb3dlZFRvUmVtb3ZlT25lKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CkBAIC0xMjIwLDcgKzEyOTAsNyBAQAogICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgcHJvZmlsZXMuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxVc2VySW5mbz4gZ2V0UHJvZmlsZXMoaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgTGlzdDxVc2VySW5mbz4gZ2V0UHJvZmlsZXMoQFVzZXJJZEludCBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFByb2ZpbGVzKHVzZXJIYW5kbGUsIGZhbHNlIC8qIGVuYWJsZWRPbmx5ICovKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CkBAIC0xMjM2LDcgKzEzMDYsNyBAQAogICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIHVzZXIgaWRzIGFyZSBpbiB0aGUgc2FtZSBwcm9maWxlIGdyb3VwLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNTYW1lUHJvZmlsZUdyb3VwKGludCB1c2VySWQsIGludCBvdGhlclVzZXJJZCkgeworICAgIHB1YmxpYyBib29sZWFuIGlzU2FtZVByb2ZpbGVHcm91cChAVXNlcklkSW50IGludCB1c2VySWQsIGludCBvdGhlclVzZXJJZCkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzU2FtZVByb2ZpbGVHcm91cCh1c2VySWQsIG90aGVyVXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CkBAIC0xMjU1LDcgKzEzMjUsNyBAQAogICAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgcHJvZmlsZXMuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxVc2VySW5mbz4gZ2V0RW5hYmxlZFByb2ZpbGVzKGludCB1c2VySGFuZGxlKSB7CisgICAgcHVibGljIExpc3Q8VXNlckluZm8+IGdldEVuYWJsZWRQcm9maWxlcyhAVXNlcklkSW50IGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbVNlcnZpY2UuZ2V0UHJvZmlsZXModXNlckhhbmRsZSwgdHJ1ZSAvKiBlbmFibGVkT25seSAqLyk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTI5Myw3ICsxMzYzLDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXRDcmVkZW50aWFsT3duZXJQcm9maWxlKGludCB1c2VySGFuZGxlKSB7CisgICAgcHVibGljIGludCBnZXRDcmVkZW50aWFsT3duZXJQcm9maWxlKEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5nZXRDcmVkZW50aWFsT3duZXJQcm9maWxlKHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTEzMDgsNyArMTM3OCw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBVc2VySW5mbyBnZXRQcm9maWxlUGFyZW50KGludCB1c2VySGFuZGxlKSB7CisgICAgcHVibGljIFVzZXJJbmZvIGdldFByb2ZpbGVQYXJlbnQoQFVzZXJJZEludCBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFByb2ZpbGVQYXJlbnQodXNlckhhbmRsZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTMyNCw3ICsxMzk0LDcgQEAKICAgICAgKiBAcGFyYW0gZW5hYmxlUXVpZXRNb2RlIFdoZXRoZXIgcXVpZXQgbW9kZSBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFF1aWV0TW9kZUVuYWJsZWQoaW50IHVzZXJIYW5kbGUsIGJvb2xlYW4gZW5hYmxlUXVpZXRNb2RlKSB7CisgICAgcHVibGljIHZvaWQgc2V0UXVpZXRNb2RlRW5hYmxlZChAVXNlcklkSW50IGludCB1c2VySGFuZGxlLCBib29sZWFuIGVuYWJsZVF1aWV0TW9kZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UXVpZXRNb2RlRW5hYmxlZCh1c2VySGFuZGxlLCBlbmFibGVRdWlldE1vZGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtMTQ0MCw3ICsxNTEwLDcgQEAKICAgICAgKiBAcGFyYW0gdXNlckhhbmRsZSB0aGUgaW50ZWdlciBoYW5kbGUgb2YgdGhlIHVzZXIsIHdoZXJlIDAgaXMgdGhlIHByaW1hcnkgdXNlci4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZVVzZXIoaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVVc2VyKEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5yZW1vdmVVc2VyKHVzZXJIYW5kbGUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTE0NTcsNyArMTUyNyw3IEBACiAgICAgICogQHBhcmFtIG5hbWUgdGhlIG5ldyBuYW1lIGZvciB0aGUgdXNlcgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VXNlck5hbWUoaW50IHVzZXJIYW5kbGUsIFN0cmluZyBuYW1lKSB7CisgICAgcHVibGljIHZvaWQgc2V0VXNlck5hbWUoQFVzZXJJZEludCBpbnQgdXNlckhhbmRsZSwgU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFVzZXJOYW1lKHVzZXJIYW5kbGUsIG5hbWUpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTE0NzEsNyArMTU0MSw3IEBACiAgICAgICogQHBhcmFtIGljb24gdGhlIGJpdG1hcCB0byBzZXQgYXMgdGhlIHBob3RvLgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VXNlckljb24oaW50IHVzZXJIYW5kbGUsIEJpdG1hcCBpY29uKSB7CisgICAgcHVibGljIHZvaWQgc2V0VXNlckljb24oQFVzZXJJZEludCBpbnQgdXNlckhhbmRsZSwgQml0bWFwIGljb24pIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFVzZXJJY29uKHVzZXJIYW5kbGUsIGljb24pOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKQEAgLTE0ODYsNyArMTU1Niw3IEBACiAgICAgICogQHNlZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlVzZXJJY29ucyNnZXREZWZhdWx0VXNlckljb24gZm9yIGEgZGVmYXVsdC4KICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBCaXRtYXAgZ2V0VXNlckljb24oaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgQml0bWFwIGdldFVzZXJJY29uKEBVc2VySWRJbnQgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZkID0gbVNlcnZpY2UuZ2V0VXNlckljb24odXNlckhhbmRsZSk7CiAgICAgICAgICAgICBpZiAoZmQgIT0gbnVsbCkgewpAQCAtMTU1Miw3ICsxNjIyLDcgQEAKICAgICAgKiBAcmV0dXJuIGEgc2VyaWFsIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhhdCB1c2VyLCBvciAtMSBpZiB0aGUgdXNlckhhbmRsZSBpcyBub3QgdmFsaWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFVzZXJTZXJpYWxOdW1iZXIoaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgaW50IGdldFVzZXJTZXJpYWxOdW1iZXIoQFVzZXJJZEludCBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFVzZXJTZXJpYWxOdW1iZXIodXNlckhhbmRsZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTU3MCw3ICsxNjQwLDcgQEAKICAgICAgKiBpcyBub3QgdmFsaWQuCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFVzZXJIYW5kbGUoaW50IHVzZXJTZXJpYWxOdW1iZXIpIHsKKyAgICBwdWJsaWMgQFVzZXJJZEludCBpbnQgZ2V0VXNlckhhbmRsZShpbnQgdXNlclNlcmlhbE51bWJlcikgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldFVzZXJIYW5kbGUodXNlclNlcmlhbE51bWJlcik7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewpAQCAtMTU4MCwxMiArMTY1MCwyMyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgYSBCdW5kbGUgY29udGFpbmluZyBhbnkgc2F2ZWQgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciB0aGlzIHVzZXIsIGZvciB0aGUKKyAgICAgKiBSZXR1cm5zIGEge0Bjb2RlIEJ1bmRsZX0gY29udGFpbmluZyBhbnkgc2F2ZWQgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIGZvciB0aGlzIHVzZXIsIGZvciB0aGUKICAgICAgKiBnaXZlbiBwYWNrYWdlIG5hbWUuIE9ubHkgYW4gYXBwbGljYXRpb24gd2l0aCB0aGlzIHBhY2thZ2UgbmFtZSBjYW4gY2FsbCB0aGlzIG1ldGhvZC4KKyAgICAgKgorICAgICAqIDxwPlRoZSByZXR1cm5lZCB7QGxpbmsgQnVuZGxlfSBjb25zaXN0cyBvZiBrZXktdmFsdWUgcGFpcnMsIGFzIGRlZmluZWQgYnkgdGhlIGFwcGxpY2F0aW9uLAorICAgICAqIHdoZXJlIHRoZSB0eXBlcyBvZiB2YWx1ZXMgbWF5IGJlOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+e0Bjb2RlIGJvb2xlYW59CisgICAgICogPGxpPntAY29kZSBpbnR9CisgICAgICogPGxpPntAY29kZSBTdHJpbmd9IG9yIHtAY29kZSBTdHJpbmdbXX0KKyAgICAgKiA8bGk+RnJvbSB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI019LCB7QGNvZGUgQnVuZGxlfSBvciB7QGNvZGUgQnVuZGxlW119CisgICAgICogPC91bD4KKyAgICAgKgogICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSB0aGUgcGFja2FnZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uCi0gICAgICogQHJldHVybiBhIEJ1bmRsZSB3aXRoIHRoZSByZXN0cmljdGlvbnMgYXMga2V5L3ZhbHVlIHBhaXJzLCBvciBudWxsIGlmIHRoZXJlIGFyZSBubwotICAgICAqIHNhdmVkIHJlc3RyaWN0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2YgdHlwZSBCb29sZWFuLCBTdHJpbmcgb3IgU3RyaW5nW10sIGRlcGVuZGluZwotICAgICAqIG9uIHRoZSByZXN0cmljdGlvbiB0eXBlLCBhcyBkZWZpbmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgKiBAcmV0dXJuIGEge0Bjb2RlIEJ1bmRsZX0gd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGZvciB0aGF0IHBhY2thZ2UsIG9yIHtAY29kZSBudWxsfSBpZiB0aGVyZQorICAgICAqIGFyZSBubyBzYXZlZCByZXN0cmljdGlvbnMuCisgICAgICoKKyAgICAgKiBAc2VlICNLRVlfUkVTVFJJQ1RJT05TX1BFTkRJTkcKICAgICAgKi8KICAgICBwdWJsaWMgQnVuZGxlIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKFN0cmluZyBwYWNrYWdlTmFtZSkgewogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvb3Mvc3RvcmFnZS9TdG9yYWdlTWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvb3Mvc3RvcmFnZS9TdG9yYWdlTWFuYWdlci5qYXZhCmluZGV4IGJlZGExNjkuLmM4Yjk0MmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL29zL3N0b3JhZ2UvU3RvcmFnZU1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9vcy9zdG9yYWdlL1N0b3JhZ2VNYW5hZ2VyLmphdmEKQEAgLTg4Miw3ICs4ODIsOCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lc1swXTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSBBY3Rpdml0eVRocmVhZC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gQWN0aXZpdHlUaHJlYWQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIHVzZXJJZCk7CiAgICAgICAgICAgICBpZiAodWlkIDw9IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0b3JhZ2VWb2x1bWVbMF07CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRNYW5hZ2VyLmFpZGwKaW5kZXggOGZhN2FiOS4uOWE4MGUzNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50TWFuYWdlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludE1hbmFnZXIuYWlkbApAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5JUHJpbnRlckRpc2NvdmVyeU9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuSVByaW50RG9jdW1lbnRBZGFwdGVyOwpAQCAtNTMsNiArNTQsMTkgQEAKICAgICB2b2lkIHN0b3BQcmludGVyRGlzY292ZXJ5KGluIElQcmludGVyRGlzY292ZXJ5T2JzZXJ2ZXIgb2JzZXJ2ZXIsIGludCB1c2VySWQpOwogICAgIHZvaWQgdmFsaWRhdGVQcmludGVycyhpbiBMaXN0PFByaW50ZXJJZD4gcHJpbnRlcklkcywgaW50IHVzZXJJZCk7CiAgICAgdm9pZCBzdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKGluIFByaW50ZXJJZCBwcmludGVySWQsIGludCB1c2VySWQpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyLiBJZiB0aGUgaWNvbiBpcyBub3QgY2FjaGVkLCB0aGUgaWNvbiBpcworICAgICAqIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4gT25jZSBpdCBpcyBhdmFpbGFibGUgdGhlIHByaW50ZXIgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIHNob3VsZCBiZSBsb2FkZWQgZm9yCisgICAgICogQHBhcmFtIHVzZXJJZCB0aGUgaWQgb2YgdGhlIHVzZXIgcmVxdWVzdGluZyB0aGUgcHJpbnRlcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oaW4gUHJpbnRlcklkIHByaW50ZXJJZCwgaW50IHVzZXJJZCk7CisKICAgICB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhpbiBQcmludGVySWQgcHJpbnRlcklkLCBpbnQgdXNlcklkKTsKICAgICB2b2lkIGRlc3Ryb3lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbihpbiBJUHJpbnRlckRpc2NvdmVyeU9ic2VydmVyIG9ic2VydmVyLAogICAgICAgICAgICAgaW50IHVzZXJJZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyLmFpZGwKaW5kZXggYjdjZmJlYS4uNDY5YTRlYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50U3Bvb2xlci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludFNwb29sZXIuYWlkbApAQCAtMTcsOSArMTcsMTEgQEAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuSVByaW50U3Bvb2xlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLnByaW50LklQcmludFNwb29sZXJDYWxsYmFja3M7CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySW5mbzsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlczsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50Sm9iSWQ7CkBAIC01OCwxMCArNjAsNDkgQEAKICAgICAgKi8KICAgICB2b2lkIHNldFN0YXR1cyhpbiBQcmludEpvYklkIHByaW50Sm9iSWQsIGluIENoYXJTZXF1ZW5jZSBzdGF0dXMpOwogCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICogQHBhcmFtIGNhbGxiYWNrcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIGljb24gaXMgc3RvcmVkIGluIGNhc2UKKyAgICAgKiBAcGFyYW0gc2VxdWVuY2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbAorICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgKi8KKyAgICB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoaW4gUHJpbnRlcklkIHByaW50ZXJJZCwgaW4gSWNvbiBpY29uLAorICAgICAgICAgICAgaW4gSVByaW50U3Bvb2xlckNhbGxiYWNrcyBjYWxsYmFja3MsIGluIGludCBzZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIuIElmIHRoZSBpY29uIGlzIG5vdCBjYWNoZWQsIHRoZSBpY29uIGlzCisgICAgICogcmVxdWVzdGVkIGFzeW5jaHJvbm91c2x5LiBPbmNlIGl0IGlzIGF2YWlsYWJsZSB0aGUgcHJpbnRlciBpcyB1cGRhdGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tzIHRoZSBjYWxsYmFjayB0byBjYWxsIG9uY2UgaWNvbiBpcyByZXRyaWV2ZWQKKyAgICAgKiBAcGFyYW0gc2VxdWVuY2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbAorICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgKi8KKyAgICB2b2lkIGdldEN1c3RvbVByaW50ZXJJY29uKGluIFByaW50ZXJJZCBwcmludGVySWQsCisgICAgICAgICAgICBpbiBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIGNhbGxiYWNrcywgaW4gaW50IHNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIENsZWFyIGFsbCBzdGF0ZSBmcm9tIHRoZSBjdXN0b20gcHJpbnRlciBpY29uIGNhY2hlLgorICAgICAqCisgICAgICogQHBhcmFtIGNhbGxiYWNrcyB0aGUgY2FsbGJhY2sgdG8gY2FsbCBvbmNlIGNhY2hlIGlzIGNsZWFyZWQKKyAgICAgKiBAcGFyYW0gc2VxdWVuY2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbAorICAgICAqLworICAgIHZvaWQgY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKGluIElQcmludFNwb29sZXJDYWxsYmFja3MgY2FsbGJhY2tzLAorICAgICAgICAgICAgaW4gaW50IHNlcXVlbmNlKTsKKwogICAgIHZvaWQgc2V0UHJpbnRKb2JUYWcoaW4gUHJpbnRKb2JJZCBwcmludEpvYklkLCBTdHJpbmcgdGFnLCBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIGNhbGxiYWNrLAogICAgICAgICAgICAgaW50IHNlcXVlbmNlKTsKICAgICB2b2lkIHdyaXRlUHJpbnRKb2JEYXRhKGluIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZkLCBpbiBQcmludEpvYklkIHByaW50Sm9iSWQpOwogICAgIHZvaWQgc2V0Q2xpZW50KElQcmludFNwb29sZXJDbGllbnQgY2xpZW50KTsKICAgICB2b2lkIHNldFByaW50Sm9iQ2FuY2VsbGluZyhpbiBQcmludEpvYklkIHByaW50Sm9iSWQsIGJvb2xlYW4gY2FuY2VsbGluZyk7Ci0gICAgdm9pZCByZW1vdmVBcHByb3ZlZFByaW50U2VydmljZShpbiBDb21wb25lbnROYW1lIHNlcnZpY2VUb1JlbW92ZSk7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYWxsIGFwcHJvdmVkIHByaW50IHNlcnZpY2VzIHRoYXQgYXJlIG5vdCBpbiB0aGUgZ2l2ZW4gc2V0LgorICAgICAqCisgICAgICogQHBhcmFtIHNlcnZpY2VzVG9LZWVwIFRoZSBuYW1lcyBvZiB0aGUgc2VydmljZXMgdG8ga2VlcAorICAgICAqLworICAgIHZvaWQgcHJ1bmVBcHByb3ZlZFByaW50U2VydmljZXMoaW4gTGlzdDxDb21wb25lbnROYW1lPiBzZXJ2aWNlc1RvS2VlcCk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyQ2FsbGJhY2tzLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9JUHJpbnRTcG9vbGVyQ2FsbGJhY2tzLmFpZGwKaW5kZXggNDVjNTMzMi4uMjNkNzA2YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvSVByaW50U3Bvb2xlckNhbGxiYWNrcy5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L0lQcmludFNwb29sZXJDYWxsYmFja3MuYWlkbApAQCAtMTYsNyArMTYsOSBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm87CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgpAQCAtMzIsNCArMzQsMjcgQEAKICAgICB2b2lkIG9uU2V0UHJpbnRKb2JTdGF0ZVJlc3VsdChib29sZWFuIHN1Y2Nlc3MsIGludCBzZXF1ZW5jZSk7CiAgICAgdm9pZCBvblNldFByaW50Sm9iVGFnUmVzdWx0KGJvb2xlYW4gc3VjY2VzcywgaW50IHNlcXVlbmNlKTsKICAgICB2b2lkIG9uR2V0UHJpbnRKb2JJbmZvUmVzdWx0KGluIFByaW50Sm9iSW5mbyBwcmludEpvYiwgaW50IHNlcXVlbmNlKTsKKworICAgIC8qKgorICAgICAqIERlbGl2ZXIgdGhlIHJlc3VsdCBvZiBhIHJlcXVlc3Qgb2YgYSBjdXN0b20gcHJpbnRlciBpY29uLgorICAgICAqCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgcmV0cmlldmVkLCBvciBudWxsIGlmIG5vIGljb24gY291bGQgYmUKKyAgICAgKiAgICAgICAgICAgICBmb3VuZAorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsIHRvIGdldCB0aGUgaWNvbgorICAgICAqLworICAgIHZvaWQgb25HZXRDdXN0b21QcmludGVySWNvblJlc3VsdChpbiBJY29uIGljb24sIGludCBzZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIHRoYXQgdGhlIHByaW50IHNwb29sZXIgY2FjaGVkIGEgY3VzdG9tIHByaW50ZXIgaWNvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzZXF1ZW5jZSB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBjYWxsIHRvIGNhY2hlIHRoZSBpY29uCisgICAgICovCisgICAgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uQ2FjaGVkKGludCBzZXF1ZW5jZSk7CisKKyAgICAvKioKKyAgICAgKiBEZWNsYXJlIHRoYXQgdGhlIGN1c3RvbSBwcmludGVyIGljb24gY2FjaGUgd2FzIGNsZWFyZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc2VxdWVuY2UgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgY2FsbCB0byBjbGVhciB0aGUgY2FjaGUKKyAgICAgKi8KKyAgICB2b2lkIGN1c3RvbVByaW50ZXJJY29uQ2FjaGVDbGVhcmVkKGludCBzZXF1ZW5jZSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QYWdlUmFuZ2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCmluZGV4IDhiYzE1N2EuLjU3Yzc3MTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1BhZ2VSYW5nZS5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiAKQEAgLTQyLDcgKzQ0LDcgQEAKICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiBzdGFydCBpcyBsZXNzIHRoYW4gemVybyBvciBlbmQKICAgICAgKiBpcyBsZXNzIHRoYW4gemVybyBvciBzdGFydCBncmVhdGVyIHRoYW4gZW5kLgogICAgICAqLwotICAgIHB1YmxpYyBQYWdlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CisgICAgcHVibGljIFBhZ2VSYW5nZShASW50UmFuZ2UoZnJvbSA9IDApIGludCBzdGFydCwgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZW5kKSB7CiAgICAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0IGNhbm5vdCBiZSBsZXNzIHRoYW4gemVyby4iKTsKICAgICAgICAgfQpAQCAtNTYsNyArNTgsNyBAQAogICAgICAgICBtRW5kID0gZW5kOwogICAgIH0KIAotICAgIHByaXZhdGUgUGFnZVJhbmdlIChQYXJjZWwgcGFyY2VsKSB7CisgICAgcHJpdmF0ZSBQYWdlUmFuZ2UoQE5vbk51bGwgUGFyY2VsIHBhcmNlbCkgewogICAgICAgICB0aGlzKHBhcmNlbC5yZWFkSW50KCksIHBhcmNlbC5yZWFkSW50KCkpOwogICAgIH0KIApAQCAtNjUsNyArNjcsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgc3RhcnQgcGFnZSBpbmRleC4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXJ0KCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRTdGFydCgpIHsKICAgICAgICAgcmV0dXJuIG1TdGFydDsKICAgICB9CiAKQEAgLTc0LDcgKzc2LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGVuZCBwYWdlIGluZGV4LgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RW5kKCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRFbmQoKSB7CiAgICAgICAgIHJldHVybiBtRW5kOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRBdHRyaWJ1dGVzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQppbmRleCAyYWZiYjk5Li44ODkyZTM0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEF0dHJpYnV0ZXMuamF2YQpAQCAtMTYsNiArMTYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50UmFuZ2U7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtMjcsNiArMzEsOCBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogLyoqCkBAIC0zNyw2ICs0MywxMyBAQAogICogMTAgbWlsbHMgKHRob3VzYW5kIG9mIGFuIGluY2gpIG9uIGFsbCBzaWRlcywgYW5kIGJlIGJsYWNrIGFuZCB3aGl0ZS4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFByaW50QXR0cmlidXRlcyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIENPTE9SX01PREVfTU9OT0NIUk9NRSwgQ09MT1JfTU9ERV9DT0xPUgorICAgIH0pCisgICAgcHVibGljIEBpbnRlcmZhY2UgQ29sb3JNb2RlIHsKKyAgICB9CiAgICAgLyoqIENvbG9yIG1vZGU6IE1vbm9jaHJvbWUgY29sb3Igc2NoZW1lLCBmb3IgZXhhbXBsZSBvbmUgY29sb3IgaXMgdXNlZC4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xPUl9NT0RFX01PTk9DSFJPTUUgPSAxIDw8IDA7CiAgICAgLyoqIENvbG9yIG1vZGU6IENvbG9yIGNvbG9yIHNjaGVtZSwgZm9yIGV4YW1wbGUgbWFueSBjb2xvcnMgYXJlIHVzZWQuICovCkBAIC00NSw2ICs1OCwxMyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWQUxJRF9DT0xPUl9NT0RFUyA9CiAgICAgICAgICAgICBDT0xPUl9NT0RFX01PTk9DSFJPTUUgfCBDT0xPUl9NT0RFX0NPTE9SOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoZmxhZyA9IHRydWUsIHZhbHVlID0geworICAgICAgICAgICAgRFVQTEVYX01PREVfTk9ORSwgRFVQTEVYX01PREVfTE9OR19FREdFLCBEVVBMRVhfTU9ERV9TSE9SVF9FREdFCisgICAgfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBEdXBsZXhNb2RlIHsKKyAgICB9CiAgICAgLyoqIER1cGxleCBtb2RlOiBObyBkdXBsZXhpbmcuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFVQTEVYX01PREVfTk9ORSA9IDEgPDwgMDsKICAgICAvKiogRHVwbGV4IG1vZGU6IFBhZ2VzIGFyZSB0dXJuZWQgc2lkZXdheXMgYWxvbmcgdGhlIGxvbmcgZWRnZSAtIGxpa2UgYSBib29rLiAqLwpAQCAtNjYsNyArODYsNyBAQAogICAgICAgICAvKiBoaWRlIGNvbnN0cnVjdG9yICovCiAgICAgfQogCi0gICAgcHJpdmF0ZSBQcmludEF0dHJpYnV0ZXMoUGFyY2VsIHBhcmNlbCkgeworICAgIHByaXZhdGUgUHJpbnRBdHRyaWJ1dGVzKEBOb25OdWxsIFBhcmNlbCBwYXJjZWwpIHsKICAgICAgICAgbU1lZGlhU2l6ZSA9IChwYXJjZWwucmVhZEludCgpID09ICAxKSA/IE1lZGlhU2l6ZS5jcmVhdGVGcm9tUGFyY2VsKHBhcmNlbCkgOiBudWxsOwogICAgICAgICBtUmVzb2x1dGlvbiA9IChwYXJjZWwucmVhZEludCgpID09ICAxKSA/IFJlc29sdXRpb24uY3JlYXRlRnJvbVBhcmNlbChwYXJjZWwpIDogbnVsbDsKICAgICAgICAgbU1pbk1hcmdpbnMgPSAocGFyY2VsLnJlYWRJbnQoKSA9PSAgMSkgPyBNYXJnaW5zLmNyZWF0ZUZyb21QYXJjZWwocGFyY2VsKSA6IG51bGw7CkBAIC03OSw3ICs5OSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSBzaXplIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIE1lZGlhU2l6ZSBnZXRNZWRpYVNpemUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBNZWRpYVNpemUgZ2V0TWVkaWFTaXplKCkgewogICAgICAgICByZXR1cm4gbU1lZGlhU2l6ZTsKICAgICB9CiAKQEAgLTk5LDcgKzExOSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSByZXNvbHV0aW9uIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIFJlc29sdXRpb24gZ2V0UmVzb2x1dGlvbigpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIFJlc29sdXRpb24gZ2V0UmVzb2x1dGlvbigpIHsKICAgICAgICAgcmV0dXJuIG1SZXNvbHV0aW9uOwogICAgIH0KIApAQCAtMTI3LDcgKzE0Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtYXJnaW5zIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBzZXQuCiAgICAgICovCi0gICAgcHVibGljIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKICAgICAgICAgcmV0dXJuIG1NaW5NYXJnaW5zOwogICAgIH0KIApAQCAtMTU4LDcgKzE3OCw3IEBACiAgICAgICogQHNlZSAjQ09MT1JfTU9ERV9DT0xPUgogICAgICAqIEBzZWUgI0NPTE9SX01PREVfTU9OT0NIUk9NRQogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29sb3JNb2RlKCkgeworICAgIHB1YmxpYyBAQ29sb3JNb2RlIGludCBnZXRDb2xvck1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtQ29sb3JNb2RlOwogICAgIH0KIApAQCAtMTk5LDcgKzIxOSw3IEBACiAgICAgICogQHNlZSAjRFVQTEVYX01PREVfTE9OR19FREdFCiAgICAgICogQHNlZSAjRFVQTEVYX01PREVfU0hPUlRfRURHRQogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RHVwbGV4TW9kZSgpIHsKKyAgICBwdWJsaWMgQER1cGxleE1vZGUgaW50IGdldER1cGxleE1vZGUoKSB7CiAgICAgICAgIHJldHVybiBtRHVwbGV4TW9kZTsKICAgICB9CiAKQEAgLTgyOCw3ICs4NDgsOCBAQAogICAgICAgICAgKiBvciB0aGUgd2lkdGhNaWxzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvIG9yIHRoZSBoZWlnaHRNaWxzIGlzIGxlc3MKICAgICAgICAgICogdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhU2l6ZShTdHJpbmcgaWQsIFN0cmluZyBsYWJlbCwgaW50IHdpZHRoTWlscywgaW50IGhlaWdodE1pbHMpIHsKKyAgICAgICAgcHVibGljIE1lZGlhU2l6ZShATm9uTnVsbCBTdHJpbmcgaWQsIEBOb25OdWxsIFN0cmluZyBsYWJlbCwKKyAgICAgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDEpIGludCB3aWR0aE1pbHMsIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGhlaWdodE1pbHMpIHsKICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShpZCkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBjYW5ub3QgYmUgZW1wdHkuIik7CiAgICAgICAgICAgICB9CkBAIC04NzIsNyArODkzLDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBUaGUgdW5pcXVlIG1lZGlhIHNpemUgaWQuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgU3RyaW5nIGdldElkKCkgewogICAgICAgICAgICAgcmV0dXJuIG1JZDsKICAgICAgICAgfQogCkBAIC04ODIsNyArOTAzLDcgQEAKICAgICAgICAgICogQHBhcmFtIHBhY2thZ2VNYW5hZ2VyIFRoZSBwYWNrYWdlIG1hbmFnZXIgZm9yIGxvYWRpbmcgdGhlIGxhYmVsLgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBodW1hbiByZWFkYWJsZSBsYWJlbC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoUGFja2FnZU1hbmFnZXIgcGFja2FnZU1hbmFnZXIpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbChATm9uTnVsbCBQYWNrYWdlTWFuYWdlciBwYWNrYWdlTWFuYWdlcikgewogICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShtUGFja2FnZU5hbWUpICYmIG1MYWJlbFJlc0lkID4gMCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrYWdlTWFuYWdlci5nZXRSZXNvdXJjZXNGb3JBcHBsaWNhdGlvbigKQEAgLTkwMyw3ICs5MjQsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSB3aWR0aC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0V2lkdGhNaWxzKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgZ2V0V2lkdGhNaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1XaWR0aE1pbHM7CiAgICAgICAgIH0KIApAQCAtOTEyLDcgKzkzMyw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG1lZGlhIGhlaWdodC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SGVpZ2h0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGdldEhlaWdodE1pbHMoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUhlaWdodE1pbHM7CiAgICAgICAgIH0KIApAQCAtOTM0LDcgKzk1NSw3IEBACiAgICAgICAgICAqIEByZXR1cm4gTmV3IGluc3RhbmNlIGluIGxhbmRzY2FwZSBvcmllbnRhdGlvbiBpZiB0aGlzIG9uZQogICAgICAgICAgKiBpcyBpbiBsYW5kc2NhcGUsIG90aGVyd2lzZSB0aGlzIGluc3RhbmNlLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIE1lZGlhU2l6ZSBhc1BvcnRyYWl0KCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgTWVkaWFTaXplIGFzUG9ydHJhaXQoKSB7CiAgICAgICAgICAgICBpZiAoaXNQb3J0cmFpdCgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICB9CkBAIC05NTEsNyArOTcyLDcgQEAKICAgICAgICAgICogQHJldHVybiBOZXcgaW5zdGFuY2UgaW4gbGFuZHNjYXBlIG9yaWVudGF0aW9uIGlmIHRoaXMgb25lCiAgICAgICAgICAqIGlzIGluIHBvcnRyYWl0LCBvdGhlcndpc2UgdGhpcyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBNZWRpYVNpemUgYXNMYW5kc2NhcGUoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBNZWRpYVNpemUgYXNMYW5kc2NhcGUoKSB7CiAgICAgICAgICAgICBpZiAoIWlzUG9ydHJhaXQoKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgfQpAQCAtMTA2Myw3ICsxMDg0LDggQEAKICAgICAgICAgICogb3IgdGhlIGhvcml6b250YWxEcGkgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gb3IgdGhlIHZlcnRpY2FsRHBpIGlzCiAgICAgICAgICAqIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFJlc29sdXRpb24oU3RyaW5nIGlkLCBTdHJpbmcgbGFiZWwsIGludCBob3Jpem9udGFsRHBpLCBpbnQgdmVydGljYWxEcGkpIHsKKyAgICAgICAgcHVibGljIFJlc29sdXRpb24oQE5vbk51bGwgU3RyaW5nIGlkLCBATm9uTnVsbCBTdHJpbmcgbGFiZWwsCisgICAgICAgICAgICAgICAgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgaG9yaXpvbnRhbERwaSwgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgdmVydGljYWxEcGkpIHsKICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShpZCkpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBjYW5ub3QgYmUgZW1wdHkuIik7CiAgICAgICAgICAgICB9CkBAIC0xMDk0LDcgKzExMTYsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB1bmlxdWUgcmVzb2x1dGlvbiBpZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBTdHJpbmcgZ2V0SWQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUlkOwogICAgICAgICB9CiAKQEAgLTExMDMsNyArMTEyNSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGh1bWFuIHJlYWRhYmxlIGxhYmVsLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRMYWJlbCgpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbCgpIHsKICAgICAgICAgICAgIHJldHVybiBtTGFiZWw7CiAgICAgICAgIH0KIApAQCAtMTExMiw3ICsxMTM0LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRIb3Jpem9udGFsRHBpKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAxKSBpbnQgZ2V0SG9yaXpvbnRhbERwaSgpIHsKICAgICAgICAgICAgIHJldHVybiBtSG9yaXpvbnRhbERwaTsKICAgICAgICAgfQogCkBAIC0xMTIxLDcgKzExNDMsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRWZXJ0aWNhbERwaSgpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMSkgaW50IGdldFZlcnRpY2FsRHBpKCkgewogICAgICAgICAgICAgcmV0dXJuIG1WZXJ0aWNhbERwaTsKICAgICAgICAgfQogCkBAIC0xMjA0LDcgKzEyMjYsOCBAQAogICAgICAgICAgKiBAcGFyYW0gcmlnaHRNaWxzIFRoZSByaWdodCBtYXJnaW4gaW4gbWlscyAodGhvdXNhbmRzIG9mIGFuIGluY2gpLgogICAgICAgICAgKiBAcGFyYW0gYm90dG9tTWlscyBUaGUgYm90dG9tIG1hcmdpbiBpbiBtaWxzICh0aG91c2FuZHMgb2YgYW4gaW5jaCkuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgTWFyZ2lucyhpbnQgbGVmdE1pbHMsIGludCB0b3BNaWxzLCBpbnQgcmlnaHRNaWxzLCBpbnQgYm90dG9tTWlscykgeworICAgICAgICBwdWJsaWMgTWFyZ2lucyhASW50UmFuZ2UoZnJvbSA9IDApIGludCBsZWZ0TWlscywgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgdG9wTWlscywKKyAgICAgICAgICAgICAgICBASW50UmFuZ2UoZnJvbSA9IDApIGludCByaWdodE1pbHMsIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGJvdHRvbU1pbHMpIHsKICAgICAgICAgICAgIG1Ub3BNaWxzID0gdG9wTWlsczsKICAgICAgICAgICAgIG1MZWZ0TWlscyA9IGxlZnRNaWxzOwogICAgICAgICAgICAgbVJpZ2h0TWlscyA9IHJpZ2h0TWlsczsKQEAgLTEyMTYsNyArMTIzOSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGxlZnQgbWFyZ2luLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRMZWZ0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGdldExlZnRNaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1MZWZ0TWlsczsKICAgICAgICAgfQogCkBAIC0xMjI1LDcgKzEyNDgsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSB0b3AgbWFyZ2luLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIGludCBnZXRUb3BNaWxzKCkgeworICAgICAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0VG9wTWlscygpIHsKICAgICAgICAgICAgIHJldHVybiBtVG9wTWlsczsKICAgICAgICAgfQogCkBAIC0xMjM0LDcgKzEyNTcsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSByaWdodCBtYXJnaW4uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldFJpZ2h0TWlscygpIHsKKyAgICAgICAgcHVibGljIEBJbnRSYW5nZShmcm9tID0gMCkgaW50IGdldFJpZ2h0TWlscygpIHsKICAgICAgICAgICAgIHJldHVybiBtUmlnaHRNaWxzOwogICAgICAgICB9CiAKQEAgLTEyNDMsNyArMTI2Niw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIGJvdHRvbSBtYXJnaW4uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldEJvdHRvbU1pbHMoKSB7CisgICAgICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRCb3R0b21NaWxzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1Cb3R0b21NaWxzOwogICAgICAgICB9CiAKQEAgLTEzNjgsNyArMTM5MSw3IEBACiAgICAgICAgICAqIEBwYXJhbSBtZWRpYVNpemUgVGhlIG1lZGlhIHNpemUuCiAgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0TWVkaWFTaXplKE1lZGlhU2l6ZSBtZWRpYVNpemUpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0TWVkaWFTaXplKEBOb25OdWxsIE1lZGlhU2l6ZSBtZWRpYVNpemUpIHsKICAgICAgICAgICAgIG1BdHRyaWJ1dGVzLnNldE1lZGlhU2l6ZShtZWRpYVNpemUpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTEzNzksNyArMTQwMiw3IEBACiAgICAgICAgICAqIEBwYXJhbSByZXNvbHV0aW9uIFRoZSByZXNvbHV0aW9uLgogICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFJlc29sdXRpb24oUmVzb2x1dGlvbiByZXNvbHV0aW9uKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldFJlc29sdXRpb24oQE5vbk51bGwgUmVzb2x1dGlvbiByZXNvbHV0aW9uKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRSZXNvbHV0aW9uKHJlc29sdXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTEzOTEsNyArMTQxNCw3IEBACiAgICAgICAgICAqIEBwYXJhbSBtYXJnaW5zIFRoZSBtYXJnaW5zLgogICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbk1hcmdpbnMoTWFyZ2lucyBtYXJnaW5zKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE1pbk1hcmdpbnMoQE5vbk51bGwgTWFyZ2lucyBtYXJnaW5zKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRNaW5NYXJnaW5zKG1hcmdpbnMpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTE0MDUsNyArMTQyOCw3IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0NPTE9SX01PREVfTU9OT0NIUk9NRQogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNDT0xPUl9NT0RFX0NPTE9SCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb2xvck1vZGUoaW50IGNvbG9yTW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRDb2xvck1vZGUoQENvbG9yTW9kZSBpbnQgY29sb3JNb2RlKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXRDb2xvck1vZGUoY29sb3JNb2RlKTsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CkBAIC0xNDIwLDcgKzE0NDMsNyBAQAogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9MT05HX0VER0UKICAgICAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjRFVQTEVYX01PREVfU0hPUlRfRURHRQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RHVwbGV4TW9kZShpbnQgZHVwbGV4TW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXREdXBsZXhNb2RlKEBEdXBsZXhNb2RlIGludCBkdXBsZXhNb2RlKSB7CiAgICAgICAgICAgICBtQXR0cmlidXRlcy5zZXREdXBsZXhNb2RlKGR1cGxleE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTE0MzAsNyArMTQ1Myw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcmludEF0dHJpYnV0ZXMgYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEF0dHJpYnV0ZXMgYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUF0dHJpYnV0ZXM7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnREb2N1bWVudEluZm8uamF2YQppbmRleCA0NGU2NDEwLi5kYjNiNmY0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludERvY3VtZW50SW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50RG9jdW1lbnRJbmZvLmphdmEKQEAgLTE2LDEwICsxNiwxNiBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIAoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb25Qb2xpY3k7CisKIC8qKgogICogVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgaW5mb3JtYXRpb24gYWJvdXQgYSBkb2N1bWVudCBmb3IgcHJpbnRpbmcKICAqIHB1cnBvc2VzLiBUaGlzIG1ldGEtZGF0YSBpcyB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSBhbmQgcHJpbnQgc2VydmljZXMsCkBAIC03NCw2ICs4MCwxMyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBBR0VfQ09VTlRfVU5LTk9XTiA9IC0xOwogCisgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoeworICAgICAgICAgICAgQ09OVEVOVF9UWVBFX1VOS05PV04sIENPTlRFTlRfVFlQRV9ET0NVTUVOVCwgQ09OVEVOVF9UWVBFX1BIT1RPCisgICAgfSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBDb250ZW50VHlwZSB7CisgICAgfQogICAgIC8qKgogICAgICAqIENvbnRlbnQgdHlwZTogdW5rbm93bi4KICAgICAgKi8KQEAgLTExNiw5ICsxMjksOSBAQAogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2UuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gUHJvdG90eXBlIGZyb20gd2hpY2ggdG8gY2xvbmUuCisgICAgICogQHBhcmFtIHByb3RvdHlwZSBmcm9tIHdoaWNoIHRvIGNsb25lLgogICAgICAqLwotICAgIHByaXZhdGUgUHJpbnREb2N1bWVudEluZm8oUHJpbnREb2N1bWVudEluZm8gcHJvdG90eXBlKSB7CisgICAgcHJpdmF0ZSBQcmludERvY3VtZW50SW5mbyhATm9uTnVsbCBQcmludERvY3VtZW50SW5mbyBwcm90b3R5cGUpIHsKICAgICAgICAgbU5hbWUgPSBwcm90b3R5cGUubU5hbWU7CiAgICAgICAgIG1QYWdlQ291bnQgPSBwcm90b3R5cGUubVBhZ2VDb3VudDsKICAgICAgICAgbUNvbnRlbnRUeXBlID0gcHJvdG90eXBlLm1Db250ZW50VHlwZTsKQEAgLTE0Myw3ICsxNTYsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgZG9jdW1lbnQgbmFtZS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbU5hbWU7CiAgICAgfQogCkBAIC0xNTQsNyArMTY3LDcgQEAKICAgICAgKgogICAgICAqIEBzZWUgI1BBR0VfQ09VTlRfVU5LTk9XTgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZUNvdW50KCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IC0xKSBpbnQgZ2V0UGFnZUNvdW50KCkgewogICAgICAgICByZXR1cm4gbVBhZ2VDb3VudDsKICAgICB9CiAKQEAgLTE2Nyw3ICsxODAsNyBAQAogICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9ET0NVTUVOVAogICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9QSE9UTwogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29udGVudFR5cGUoKSB7CisgICAgcHVibGljIEBDb250ZW50VHlwZSBpbnQgZ2V0Q29udGVudFR5cGUoKSB7CiAgICAgICAgIHJldHVybiBtQ29udGVudFR5cGU7CiAgICAgfQogCkBAIC0xNzYsNyArMTg5LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGRhdGEgc2l6ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBnZXREYXRhU2l6ZSgpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBsb25nIGdldERhdGFTaXplKCkgewogICAgICAgICByZXR1cm4gbURhdGFTaXplOwogICAgIH0KIApAQCAtMTg3LDcgKzIwMCw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERhdGFTaXplKGxvbmcgZGF0YVNpemUpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXREYXRhU2l6ZShASW50UmFuZ2UoZnJvbSA9IDApIGxvbmcgZGF0YVNpemUpIHsKICAgICAgICAgbURhdGFTaXplID0gZGF0YVNpemU7CiAgICAgfQogCkBAIC0yODgsNyArMzAxLDcgQEAKICAgICAgICAgICogaXMgdGhlIGZpbGUgbmFtZSBpZiB0aGUgY29udGVudCBpdCBkZXNjcmliZXMgaXMgc2F2ZWQgYXMgYSBQREYuCiAgICAgICAgICAqIENhbm5vdCBiZSBlbXB0eS4gCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihTdHJpbmcgbmFtZSkgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATm9uTnVsbCBTdHJpbmcgbmFtZSkgewogICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibmFtZSBjYW5ub3QgYmUgZW1wdHkiKTsKICAgICAgICAgICAgIH0KQEAgLTMwMiwxMCArMzE1LDExIEBACiAgICAgICAgICAqIDxzdHJvbmc+RGVmYXVsdDogPC9zdHJvbmc+IHtAbGluayAjUEFHRV9DT1VOVF9VTktOT1dOfQogICAgICAgICAgKiA8L3A+CiAgICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBwYWdlQ291bnQgVGhlIG51bWJlciBvZiBwYWdlcy4gTXVzdCBiZSBncmVhdGVyIHRoYW4KLSAgICAgICAgICogb3IgZXF1YWwgdG8gemVybyBvciB7QGxpbmsgUHJpbnREb2N1bWVudEluZm8jUEFHRV9DT1VOVF9VTktOT1dOfS4KKyAgICAgICAgICogQHBhcmFtIHBhZ2VDb3VudCBUaGUgbnVtYmVyIG9mIHBhZ2VzLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIG9yCisgICAgICAgICAqICAgICAgICAgICAge0BsaW5rIFByaW50RG9jdW1lbnRJbmZvI1BBR0VfQ09VTlRfVU5LTk9XTn0uCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0UGFnZUNvdW50KGludCBwYWdlQ291bnQpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0UGFnZUNvdW50KEBJbnRSYW5nZShmcm9tID0gLTEpIGludCBwYWdlQ291bnQpIHsKICAgICAgICAgICAgIGlmIChwYWdlQ291bnQgPCAwICYmIHBhZ2VDb3VudCAhPSBQQUdFX0NPVU5UX1VOS05PV04pIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYWdlQ291bnQiCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybyBvciIKQEAgLTMyMiwxMiArMzM2LDEyIEBACiAgICAgICAgICAqIDwvcD4KICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIHR5cGUgVGhlIGNvbnRlbnQgdHlwZS4KLSAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9VTktOT1dOCiAgICAgICAgICAqIEBzZWUgI0NPTlRFTlRfVFlQRV9ET0NVTUVOVAogICAgICAgICAgKiBAc2VlICNDT05URU5UX1RZUEVfUEhPVE8KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldENvbnRlbnRUeXBlKGludCB0eXBlKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldENvbnRlbnRUeXBlKEBDb250ZW50VHlwZSBpbnQgdHlwZSkgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tQ29udGVudFR5cGUgPSB0eXBlOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTMzNyw3ICszNTEsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcmV0dXJuIFRoZSBuZXcgaW5zdGFuY2UuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUHJpbnREb2N1bWVudEluZm8gYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludERvY3VtZW50SW5mbyBidWlsZCgpIHsKICAgICAgICAgICAgIC8vIFplcm8gcGFnZXMgaXMgdGhlIHNhbWUgYXMgdW5rbm93biBhcyBpbiB0aGlzIGNhc2UKICAgICAgICAgICAgIC8vIHdlIHdpbGwgaGF2ZSB0byBhc2sgZm9yIGFsbCBwYWdlcyBhbmQgbG9vayBhIHRoZQogICAgICAgICAgICAgLy8gd2lyaXR0ZW4gUERGIGZpbGUgZm9yIHRoZSBwYWdlIGNvdW50LgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iLmphdmEKaW5kZXggMGFiZTIxOS4uNzc3YmFhYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2IuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYi5qYXZhCkBAIC0xNiw2ICsxNiw5IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKKwogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBwcmludCBqb2IgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4KICAqIGFwcGxpY2F0aW9uLiBJdCBjb250YWlucyBiZWhhdmlvciBtZXRob2RzIGZvciBwZXJmb3JtaW5nIG9wZXJhdGlvbnMKQEAgLTQxLDcgKzQ0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYklkIGdldElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUNhY2hlZEluZm8uZ2V0SWQoKTsKICAgICB9CiAKQEAgLTU1LDcgKzU4LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50IGpvYiBpbmZvLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYkluZm8gZ2V0SW5mbygpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIFByaW50Sm9iSW5mbyBnZXRJbmZvKCkgewogICAgICAgICBpZiAoaXNJbkltbXV0YWJsZVN0YXRlKCkpIHsKICAgICAgICAgICAgIHJldHVybiBtQ2FjaGVkSW5mbzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2JJZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRKb2JJZC5qYXZhCmluZGV4IDAxNTUwZTIuLmEyZWUwMmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSWQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYklkLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CkBAIC05MSwxNCArOTIsMTQgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBmbGF0dGVuVG9TdHJpbmcoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBmbGF0dGVuVG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiBtVmFsdWU7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVW5mbGF0dGVucyBhIHByaW50IGpvYiBpZCBmcm9tIGEgc3RyaW5nLgogICAgICAqCi0gICAgICogQHN0cmluZyBUaGUgc3RyaW5nLgorICAgICAqIEBwYXJhbSBzdHJpbmcgVGhlIHN0cmluZy4KICAgICAgKiBAcmV0dXJuIFRoZSB1bmZsYXR0ZW5lZCBpZCwgb3IgbnVsbCBpZiB0aGUgc3RyaW5nIGlzIG1hbGZvcm1lZC4KICAgICAgKgogICAgICAqIEBoaWRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludEpvYkluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCmluZGV4IDcxNDhjODcuLjIxODM2YjMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50Sm9iSW5mby5qYXZhCkBAIC0xNyw2ICsxNyw5IEBACiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uRmxvYXRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnRSYW5nZTsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CkBAIC0yNSw2ICsyOCw4IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiAKIC8qKgpAQCAtMzUsNiArNDAsMTUgQEAKICAqLwogcHVibGljIGZpbmFsIGNsYXNzIFByaW50Sm9iSW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBTVEFURV9DUkVBVEVELCBTVEFURV9RVUVVRUQsIFNUQVRFX1NUQVJURUQsIFNUQVRFX0JMT0NLRUQsIFNUQVRFX0NPTVBMRVRFRCwKKyAgICAgICAgICAgIFNUQVRFX0ZBSUxFRCwgU1RBVEVfQ0FOQ0VMRUQKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBTdGF0ZSB7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29uc3RhbnQgZm9yIG1hdGNoaW5nIGFueSBwcmludCBqb2Igc3RhdGUuCiAgICAgICoKQEAgLTIwMCw3ICsyMTQsNyBAQAogICAgICAgICBtQWR2YW5jZWRPcHRpb25zID0gb3RoZXIubUFkdmFuY2VkT3B0aW9uczsKICAgICB9CiAKLSAgICBwcml2YXRlIFByaW50Sm9iSW5mbyhQYXJjZWwgcGFyY2VsKSB7CisgICAgcHJpdmF0ZSBQcmludEpvYkluZm8oQE5vbk51bGwgUGFyY2VsIHBhcmNlbCkgewogICAgICAgICBtSWQgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CiAgICAgICAgIG1MYWJlbCA9IHBhcmNlbC5yZWFkU3RyaW5nKCk7CiAgICAgICAgIG1QcmludGVySWQgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CkBAIC0yMzAsNyArMjQ0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEpvYklkIGdldElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUlkOwogICAgIH0KIApAQCAtMjQxLDcgKzI1NSw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElkKFByaW50Sm9iSWQgaWQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRJZChATm9uTnVsbCBQcmludEpvYklkIGlkKSB7CiAgICAgICAgIHRoaXMubUlkID0gaWQ7CiAgICAgfQogCkBAIC0yNTAsNyArMjY0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGxhYmVsLgogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFiZWwoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFN0cmluZyBnZXRMYWJlbCgpIHsKICAgICAgICAgcmV0dXJuIG1MYWJlbDsKICAgICB9CiAKQEAgLTI2MSw3ICsyNzUsNyBAQAogICAgICAqCiAgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRMYWJlbChTdHJpbmcgbGFiZWwpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRMYWJlbChATm9uTnVsbCBTdHJpbmcgbGFiZWwpIHsKICAgICAgICAgbUxhYmVsID0gbGFiZWw7CiAgICAgfQogCkBAIC0yNzAsNyArMjg0LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHRhcmdldCBwcmludGVyIGlkLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludGVySWQgZ2V0UHJpbnRlcklkKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUHJpbnRlcklkIGdldFByaW50ZXJJZCgpIHsKICAgICAgICAgcmV0dXJuIG1QcmludGVySWQ7CiAgICAgfQogCkBAIC0yODEsNyArMjk1LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UHJpbnRlcklkKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRQcmludGVySWQoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICBtUHJpbnRlcklkID0gcHJpbnRlcklkOwogICAgIH0KIApAQCAtMjkyLDcgKzMwNiw3IEBACiAgICAgICoKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJpbnRlck5hbWUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0UHJpbnRlck5hbWUoKSB7CiAgICAgICAgIHJldHVybiBtUHJpbnRlck5hbWU7CiAgICAgfQogCkBAIC0zMDMsNyArMzE3LDcgQEAKICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UHJpbnRlck5hbWUoU3RyaW5nIHByaW50ZXJOYW1lKSB7CisgICAgcHVibGljIHZvaWQgc2V0UHJpbnRlck5hbWUoQE5vbk51bGwgU3RyaW5nIHByaW50ZXJOYW1lKSB7CiAgICAgICAgIG1QcmludGVyTmFtZSA9IHByaW50ZXJOYW1lOwogICAgIH0KIApAQCAtMzIwLDcgKzMzNCw3IEBACiAgICAgICogQHNlZSAjU1RBVEVfRkFJTEVECiAgICAgICogQHNlZSAjU1RBVEVfQ0FOQ0VMRUQKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXRlKCkgeworICAgIHB1YmxpYyBAU3RhdGUgaW50IGdldFN0YXRlKCkgewogICAgICAgICByZXR1cm4gbVN0YXRlOwogICAgIH0KIApAQCAtNDMxLDcgKzQ0NSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBudW1iZXIgb2YgY29waWVzIG9yIHplcm8gaWYgbm90IHNldC4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldENvcGllcygpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0Q29waWVzKCkgewogICAgICAgICByZXR1cm4gbUNvcGllczsKICAgICB9CiAKQEAgLTQ1NCw3ICs0NjgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgaW5jbHVkZWQgcGFnZXMgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgbm90IHNldC4KICAgICAgKi8KLSAgICBwdWJsaWMgUGFnZVJhbmdlW10gZ2V0UGFnZXMoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBQYWdlUmFuZ2VbXSBnZXRQYWdlcygpIHsKICAgICAgICAgcmV0dXJuIG1QYWdlUmFuZ2VzOwogICAgIH0KIApAQCAtNDc0LDcgKzQ4OCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBhdHRyaWJ1dGVzLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludEF0dHJpYnV0ZXMgZ2V0QXR0cmlidXRlcygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgIHJldHVybiBtQXR0cmlidXRlczsKICAgICB9CiAKQEAgLTcxMyw3ICs3MjcsNyBAQAogICAgICAgICAgKiBAcGFyYW0gcHJvdG90eXBlIFByb3RvdHlwZSB0byB1c2UgYXMgYSBzdGFydGluZyBwb2ludC4KICAgICAgICAgICogQ2FuIGJlIDxjb2RlPm51bGw8L2NvZGU+LgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIoUHJpbnRKb2JJbmZvIHByb3RvdHlwZSkgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATnVsbGFibGUgUHJpbnRKb2JJbmZvIHByb3RvdHlwZSkgewogICAgICAgICAgICAgbVByb3RvdHlwZSA9IChwcm90b3R5cGUgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgPyBuZXcgUHJpbnRKb2JJbmZvKHByb3RvdHlwZSkKICAgICAgICAgICAgICAgICAgICAgOiBuZXcgUHJpbnRKb2JJbmZvKCk7CkBAIC03MjQsNyArNzM4LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGNvcGllcyBUaGUgbnVtYmVyIG9mIGNvcGllcy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENvcGllcyhpbnQgY29waWVzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHNldENvcGllcyhASW50UmFuZ2UoZnJvbSA9IDEpIGludCBjb3BpZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUNvcGllcyA9IGNvcGllczsKICAgICAgICAgfQogCkBAIC03MzMsNyArNzQ3LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIGF0dHJpYnV0ZXMgVGhlIGF0dHJpYnV0ZXMuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGVzKFByaW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZXMoQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogICAgICAgICB9CiAKQEAgLTc0Miw3ICs3NTYsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gcGFnZXMgVGhlIGluY2x1ZGVkIHBhZ2VzLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgc2V0UGFnZXMoUGFnZVJhbmdlW10gcGFnZXMpIHsKKyAgICAgICAgcHVibGljIHZvaWQgc2V0UGFnZXMoQE5vbk51bGwgUGFnZVJhbmdlW10gcGFnZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubVBhZ2VSYW5nZXMgPSBwYWdlczsKICAgICAgICAgfQogCkBAIC03NzQsNyArNzg4LDcgQEAKICAgICAgICAgICogQHBhcmFtIGtleSBUaGUgb3B0aW9uIGtleS4KICAgICAgICAgICogQHBhcmFtIHZhbHVlIFRoZSBvcHRpb24gdmFsdWUuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgdm9pZCBwdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKKyAgICAgICAgcHVibGljIHZvaWQgcHV0QWR2YW5jZWRPcHRpb24oQE5vbk51bGwgU3RyaW5nIGtleSwgQE51bGxhYmxlIFN0cmluZyB2YWx1ZSkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubUFkdmFuY2VkT3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVByb3RvdHlwZS5tQWR2YW5jZWRPcHRpb25zID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgfQpAQCAtNzg3LDcgKzgwMSw3IEBACiAgICAgICAgICAqIEBwYXJhbSBrZXkgVGhlIG9wdGlvbiBrZXkuCiAgICAgICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgb3B0aW9uIHZhbHVlLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHZvaWQgcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nIGtleSwgaW50IHZhbHVlKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHB1dEFkdmFuY2VkT3B0aW9uKEBOb25OdWxsIFN0cmluZyBrZXksIGludCB2YWx1ZSkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubUFkdmFuY2VkT3B0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVByb3RvdHlwZS5tQWR2YW5jZWRPcHRpb25zID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICAgICAgfQpAQCAtNzk5LDcgKzgxMyw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEByZXR1cm4gVGhlIG5ldyBpbnN0YW5jZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBQcmludEpvYkluZm8gYnVpbGQoKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBQcmludEpvYkluZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbVByb3RvdHlwZTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKaW5kZXggM2ZiODEyZS4uM2ViNDg3NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRNYW5hZ2VyLmphdmEKQEAgLTE2LDExICsxNiwxNCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwbGljYXRpb24uQWN0aXZpdHlMaWZlY3ljbGVDYWxsYmFja3M7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudFNlbmRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyLlNlbmRJbnRlbnRFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKQEAgLTE4MCw2ICsxODMsOCBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBpbiB3aGljaCB0byBvcGVyYXRlLgogICAgICAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBiYWNraW5nIHN5c3RlbSBzZXJ2aWNlLgorICAgICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgaWQgaW4gd2hpY2ggdG8gb3BlcmF0ZS4KKyAgICAgKiBAcGFyYW0gYXBwSWQgVGhlIGFwcGxpY2F0aW9uIGlkIGluIHdoaWNoIHRvIG9wZXJhdGUuCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgUHJpbnRNYW5hZ2VyKENvbnRleHQgY29udGV4dCwgSVByaW50TWFuYWdlciBzZXJ2aWNlLCBpbnQgdXNlcklkLCBpbnQgYXBwSWQpIHsKQEAgLTI5MCw2ICsyOTUsNyBAQAogICAgIC8qKgogICAgICAqIEdldHMgYSBwcmludCBqb2IgZ2l2ZW4gaXRzIGlkLgogICAgICAqCisgICAgICogQHBhcmFtIHByaW50Sm9iSWQgVGhlIGlkIG9mIHRoZSBwcmludCBqb2IuCiAgICAgICogQHJldHVybiBUaGUgcHJpbnQgam9iIGxpc3QuCiAgICAgICogQHNlZSBQcmludEpvYgogICAgICAqIEBoaWRlCkBAIC0zMTEsMTIgKzMxNywzNSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBpZiAobVNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkZlYXR1cmUgYW5kcm9pZC5zb2Z0d2FyZS5wcmludCBub3QgYXZhaWxhYmxlIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmdldEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCwgbVVzZXJJZCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkVycm9yIGdldHRpbmcgY3VzdG9tIHByaW50ZXIgaWNvbiIsIHJlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwcmludCBqb2JzIGZvciB0aGlzIGFwcGxpY2F0aW9uLgogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgcHJpbnQgam9iIGxpc3QuCiAgICAgICogQHNlZSBQcmludEpvYgogICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFByaW50Sm9iPiBnZXRQcmludEpvYnMoKSB7CisgICAgcHVibGljIEBOb25OdWxsIExpc3Q8UHJpbnRKb2I+IGdldFByaW50Sm9icygpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGZWF0dXJlIGFuZHJvaWQuc29mdHdhcmUucHJpbnQgbm90IGF2YWlsYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwpAQCAtNDExLDggKzQ0MCw5IEBACiAgICAgICoKICAgICAgKiBAc2VlIFByaW50Sm9iCiAgICAgICovCi0gICAgcHVibGljIFByaW50Sm9iIHByaW50KFN0cmluZyBwcmludEpvYk5hbWUsIFByaW50RG9jdW1lbnRBZGFwdGVyIGRvY3VtZW50QWRhcHRlciwKLSAgICAgICAgICAgIFByaW50QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB7CisgICAgcHVibGljIEBOb25OdWxsIFByaW50Sm9iIHByaW50KEBOb25OdWxsIFN0cmluZyBwcmludEpvYk5hbWUsCisgICAgICAgICAgICBATm9uTnVsbCBQcmludERvY3VtZW50QWRhcHRlciBkb2N1bWVudEFkYXB0ZXIsCisgICAgICAgICAgICBATnVsbGFibGUgUHJpbnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgaWYgKG1TZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGZWF0dXJlIGFuZHJvaWQuc29mdHdhcmUucHJpbnQgbm90IGF2YWlsYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckNhcGFiaWxpdGllc0luZm8uamF2YQppbmRleCA5NmYzMTg1Li5kMTM4NzliIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVyQ2FwYWJpbGl0aWVzSW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJDYXBhYmlsaXRpZXNJbmZvLmphdmEKQEAgLTE2LDggKzE2LDExIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5Db2xvck1vZGU7CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXMuRHVwbGV4TW9kZTsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5NYXJnaW5zOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRBdHRyaWJ1dGVzLk1lZGlhU2l6ZTsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5SZXNvbHV0aW9uOwpAQCAtMTIxLDcgKzEyNCw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtZWRpYSBzaXplcy4KICAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxNZWRpYVNpemU+IGdldE1lZGlhU2l6ZXMoKSB7CisgICAgcHVibGljIEBOb25OdWxsIExpc3Q8TWVkaWFTaXplPiBnZXRNZWRpYVNpemVzKCkgewogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChtTWVkaWFTaXplcyk7CiAgICAgfQogCkBAIC0xMzAsNyArMTMzLDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHJlc29sdXRpb25zLgogICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFJlc29sdXRpb24+IGdldFJlc29sdXRpb25zKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBMaXN0PFJlc29sdXRpb24+IGdldFJlc29sdXRpb25zKCkgewogICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChtUmVzb2x1dGlvbnMpOwogICAgIH0KIApAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBtaW5pbWFsIG1hcmdpbnMuCiAgICAgICovCi0gICAgcHVibGljIE1hcmdpbnMgZ2V0TWluTWFyZ2lucygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgTWFyZ2lucyBnZXRNaW5NYXJnaW5zKCkgewogICAgICAgICByZXR1cm4gbU1pbk1hcmdpbnM7CiAgICAgfQogCkBAIC0xNTIsNyArMTU1LDcgQEAKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNDT0xPUl9NT0RFX0NPTE9SCiAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjQ09MT1JfTU9ERV9NT05PQ0hST01FCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXRDb2xvck1vZGVzKCkgeworICAgIHB1YmxpYyBAQ29sb3JNb2RlIGludCBnZXRDb2xvck1vZGVzKCkgewogICAgICAgICByZXR1cm4gbUNvbG9yTW9kZXM7CiAgICAgfQogCkBAIC0xNjUsNyArMTY4LDcgQEAKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9MT05HX0VER0UKICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9TSE9SVF9FREdFCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXREdXBsZXhNb2RlcygpIHsKKyAgICBwdWJsaWMgQER1cGxleE1vZGUgaW50IGdldER1cGxleE1vZGVzKCkgewogICAgICAgICByZXR1cm4gbUR1cGxleE1vZGVzOwogICAgIH0KIApAQCAtMTc0LDcgKzE3Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBkZWZhdWx0IGF0dHJpYnV0ZXMuCiAgICAgICovCi0gICAgcHVibGljIFByaW50QXR0cmlidXRlcyBnZXREZWZhdWx0cygpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRBdHRyaWJ1dGVzIGdldERlZmF1bHRzKCkgewogICAgICAgICBQcmludEF0dHJpYnV0ZXMuQnVpbGRlciBidWlsZGVyID0gbmV3IFByaW50QXR0cmlidXRlcy5CdWlsZGVyKCk7CiAKICAgICAgICAgYnVpbGRlci5zZXRNaW5NYXJnaW5zKG1NaW5NYXJnaW5zKTsKQEAgLTQyNSw3ICs0MjgsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcHJpbnRlciBpZCBpcyA8Y29kZT5udWxsPC9jb2RlPi4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgcHVibGljIEJ1aWxkZXIoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICAgICAgaWYgKHByaW50ZXJJZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigicHJpbnRlcklkIGNhbm5vdCBiZSBudWxsLiIpOwogICAgICAgICAgICAgfQpAQCAtNDQ2LDcgKzQ0OSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzLk1lZGlhU2l6ZQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkTWVkaWFTaXplKE1lZGlhU2l6ZSBtZWRpYVNpemUsIGJvb2xlYW4gaXNEZWZhdWx0KSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIGFkZE1lZGlhU2l6ZShATm9uTnVsbCBNZWRpYVNpemUgbWVkaWFTaXplLCBib29sZWFuIGlzRGVmYXVsdCkgewogICAgICAgICAgICAgaWYgKG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMgPSBuZXcgQXJyYXlMaXN0PE1lZGlhU2l6ZT4oKTsKICAgICAgICAgICAgIH0KQEAgLTQ3NCw3ICs0NzcsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcy5SZXNvbHV0aW9uCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRSZXNvbHV0aW9uKFJlc29sdXRpb24gcmVzb2x1dGlvbiwgYm9vbGVhbiBpc0RlZmF1bHQpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgYWRkUmVzb2x1dGlvbihATm9uTnVsbCBSZXNvbHV0aW9uIHJlc29sdXRpb24sIGJvb2xlYW4gaXNEZWZhdWx0KSB7CiAgICAgICAgICAgICBpZiAobVByb3RvdHlwZS5tUmVzb2x1dGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1Qcm90b3R5cGUubVJlc29sdXRpb25zID0gbmV3IEFycmF5TGlzdDxSZXNvbHV0aW9uPigpOwogICAgICAgICAgICAgfQpAQCAtNTAyLDcgKzUwNSw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzLk1hcmdpbnMKICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE1pbk1hcmdpbnMoTWFyZ2lucyBtYXJnaW5zKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE1pbk1hcmdpbnMoQE5vbk51bGwgTWFyZ2lucyBtYXJnaW5zKSB7CiAgICAgICAgICAgICBpZiAobWFyZ2lucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWFyZ2lucyBjYW5ub3QgYmUgbnVsbCIpOwogICAgICAgICAgICAgfQpAQCAtNTMyLDcgKzUzNSw4IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0NPTE9SX01PREVfQ09MT1IKICAgICAgICAgICogQHNlZSBQcmludEF0dHJpYnV0ZXMjQ09MT1JfTU9ERV9NT05PQ0hST01FCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDb2xvck1vZGVzKGludCBjb2xvck1vZGVzLCBpbnQgZGVmYXVsdENvbG9yTW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRDb2xvck1vZGVzKEBDb2xvck1vZGUgaW50IGNvbG9yTW9kZXMsCisgICAgICAgICAgICAgICAgQENvbG9yTW9kZSBpbnQgZGVmYXVsdENvbG9yTW9kZSkgewogICAgICAgICAgICAgaW50IGN1cnJlbnRNb2RlcyA9IGNvbG9yTW9kZXM7CiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudE1vZGVzID4gMCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50TW9kZSA9ICgxIDw8IEludGVnZXIubnVtYmVyT2ZUcmFpbGluZ1plcm9zKGN1cnJlbnRNb2RlcykpOwpAQCAtNTYyLDcgKzU2Niw4IEBACiAgICAgICAgICAqIEBzZWUgUHJpbnRBdHRyaWJ1dGVzI0RVUExFWF9NT0RFX0xPTkdfRURHRQogICAgICAgICAgKiBAc2VlIFByaW50QXR0cmlidXRlcyNEVVBMRVhfTU9ERV9TSE9SVF9FREdFCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXREdXBsZXhNb2RlcyhpbnQgZHVwbGV4TW9kZXMsIGludCBkZWZhdWx0RHVwbGV4TW9kZSkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXREdXBsZXhNb2RlcyhARHVwbGV4TW9kZSBpbnQgZHVwbGV4TW9kZXMsCisgICAgICAgICAgICAgICAgQER1cGxleE1vZGUgaW50IGRlZmF1bHREdXBsZXhNb2RlKSB7CiAgICAgICAgICAgICBpbnQgY3VycmVudE1vZGVzID0gZHVwbGV4TW9kZXM7CiAgICAgICAgICAgICB3aGlsZSAoY3VycmVudE1vZGVzID4gMCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBjdXJyZW50TW9kZSA9ICgxIDw8IEludGVnZXIubnVtYmVyT2ZUcmFpbGluZ1plcm9zKGN1cnJlbnRNb2RlcykpOwpAQCAtNTg5LDcgKzU5NCw3IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIElmIGEgcmVxdWlyZWQgYXR0cmlidXRlIHdhcyBub3Qgc3BlY2lmaWVkLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFByaW50ZXJDYXBhYmlsaXRpZXNJbmZvIGJ1aWxkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICBpZiAobVByb3RvdHlwZS5tTWVkaWFTaXplcyA9PSBudWxsIHx8IG1Qcm90b3R5cGUubU1lZGlhU2l6ZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gbWVkaWEgc2l6ZSBzcGVjaWZpZWQuIik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJJZC5qYXZhCmluZGV4IGEzZjNiMmJmLi44M2VmZTgwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySWQuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnQ7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CkBAIC02NSw3ICs2Niw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBwcmludGVyIG5hbWUuCiAgICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRMb2NhbElkKCkgeworICAgIHB1YmxpYyBATm9uTnVsbCBTdHJpbmcgZ2V0TG9jYWxJZCgpIHsKICAgICAgICAgcmV0dXJuIG1Mb2NhbElkOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L1ByaW50ZXJJbmZvLmphdmEKaW5kZXggN2ZjYzgxZi4uYWZlZjljMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvUHJpbnRlckluZm8uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9QcmludGVySW5mby5qYXZhCkBAIC0xNiwxMCArMTYsMjYgQEAKIAogcGFja2FnZSBhbmRyb2lkLnByaW50OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkRyYXdhYmxlUmVzOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UZXN0QXBpOworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiAKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OworCiAvKioKICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgZGVzY3JpcHRpb24gb2YgYSBwcmludGVyLiBJbnN0YW5jZXMgb2YKICAqIHRoaXMgY2xhc3MgYXJlIGNyZWF0ZWQgYnkgcHJpbnQgc2VydmljZXMgdG8gcmVwb3J0IHRvIHRoZSBzeXN0ZW0KQEAgLTMwLDYgKzQ2LDEzIEBACiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBQcmludGVySW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgewogCisgICAgLyoqIEBoaWRlICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBTVEFUVVNfSURMRSwgU1RBVFVTX0JVU1ksIFNUQVRVU19VTkFWQUlMQUJMRQorICAgIH0pCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFN0YXR1cyB7CisgICAgfQogICAgIC8qKiBQcmludGVyIHN0YXR1czogdGhlIHByaW50ZXIgaXMgaWRsZSBhbmQgcmVhZHkgdG8gcHJpbnQuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0lETEUgPSAxOwogCkBAIC00MSw2ICs2NCwxOCBAQAogCiAgICAgcHJpdmF0ZSBQcmludGVySWQgbUlkOwogCisgICAgLyoqIFJlc291cmNlIGluc2lkZSB0aGUgcHJpbnRlcidzIHNlcnZpY2VzJ3MgcGFja2FnZSB0byBiZSB1c2VkIGFzIGFuIGljb24gKi8KKyAgICBwcml2YXRlIGludCBtSWNvblJlc291cmNlSWQ7CisKKyAgICAvKiogSWYgYSBjdXN0b20gaWNvbiBjYW4gYmUgbG9hZGVkIGZvciB0aGUgcHJpbnRlciAqLworICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzQ3VzdG9tUHJpbnRlckljb247CisKKyAgICAvKiogVGhlIGdlbmVyYXRpb24gb2YgdGhlIGljb24gaW4gdGhlIGNhY2hlLiAqLworICAgIHByaXZhdGUgaW50IG1DdXN0b21QcmludGVySWNvbkdlbjsKKworICAgIC8qKiBJbnRlbnQgdGhhdCBsYXVuY2hlcyB0aGUgYWN0aXZpdHkgc2hvd2luZyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmludGVyLiAqLworICAgIHByaXZhdGUgUGVuZGluZ0ludGVudCBtSW5mb0ludGVudDsKKwogICAgIHByaXZhdGUgU3RyaW5nIG1OYW1lOwogCiAgICAgcHJpdmF0ZSBpbnQgbVN0YXR1czsKQEAgLTc3LDYgKzExMiwxMCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbUNhcGFiaWxpdGllcyA9IG51bGw7CiAgICAgICAgIH0KKyAgICAgICAgbUljb25SZXNvdXJjZUlkID0gb3RoZXIubUljb25SZXNvdXJjZUlkOworICAgICAgICBtSGFzQ3VzdG9tUHJpbnRlckljb24gPSBvdGhlci5tSGFzQ3VzdG9tUHJpbnRlckljb247CisgICAgICAgIG1DdXN0b21QcmludGVySWNvbkdlbiA9IG90aGVyLm1DdXN0b21QcmludGVySWNvbkdlbjsKKyAgICAgICAgbUluZm9JbnRlbnQgPSBvdGhlci5tSW5mb0ludGVudDsKICAgICB9CiAKICAgICAvKioKQEAgLTg0LDE2ICsxMjMsNjQgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50ZXIgaWQuCiAgICAgICovCi0gICAgcHVibGljIFByaW50ZXJJZCBnZXRJZCgpIHsKKyAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlcklkIGdldElkKCkgewogICAgICAgICByZXR1cm4gbUlkOwogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUgaWNvbiB0byBiZSB1c2VkIGZvciB0aGlzIHByaW50ZXIuIElmIG5vIHBlciBwcmludGVyIGljb24gaXMgYXZhaWxhYmxlLCB0aGUgcHJpbnRlcidzCisgICAgICogc2VydmljZSdzIGljb24gaXMgcmV0dXJuZWQuIElmIHRoZSBwcmludGVyIGhhcyBhIGN1c3RvbSBpY29uIHRoaXMgaWNvbiBtaWdodCBnZXQgcmVxdWVzdGVkCisgICAgICogYXN5bmNocm9ub3VzbHkuIE9uY2UgdGhlIGljb24gaXMgbG9hZGVkIHRoZSBkaXNjb3Zlcnkgc2Vzc2lvbnMgd2lsbCBiZSBub3RpZmllZCB0aGF0IHRoZQorICAgICAqIHByaW50ZXIgY2hhbmdlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRoYXQgd2lsbCBiZSB1c2luZyB0aGUgaWNvbnMKKyAgICAgKiBAcmV0dXJuIFRoZSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgbm8gaWNvbiBjb3VsZCBiZSBmb3VuZC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBUZXN0QXBpCisgICAgcHVibGljIEBOdWxsYWJsZSBEcmF3YWJsZSBsb2FkSWNvbihATm9uTnVsbCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBudWxsOworICAgICAgICBQYWNrYWdlTWFuYWdlciBwYWNrYWdlTWFuYWdlciA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKworICAgICAgICBpZiAobUhhc0N1c3RvbVByaW50ZXJJY29uKSB7CisgICAgICAgICAgICBQcmludE1hbmFnZXIgcHJpbnRNYW5hZ2VyID0gKFByaW50TWFuYWdlcikgY29udGV4dAorICAgICAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlBSSU5UX1NFUlZJQ0UpOworCisgICAgICAgICAgICBJY29uIGljb24gPSBwcmludE1hbmFnZXIuZ2V0Q3VzdG9tUHJpbnRlckljb24obUlkKTsKKworICAgICAgICAgICAgaWYgKGljb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gaWNvbi5sb2FkRHJhd2FibGUoY29udGV4dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHJhd2FibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBtSWQuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDApOworICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvOworCisgICAgICAgICAgICAgICAgLy8gSWYgbm8gY3VzdG9tIGljb24gaXMgYXZhaWxhYmxlLCB0cnkgdGhlIGljb24gZnJvbSB0aGUgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgaWYgKG1JY29uUmVzb3VyY2VJZCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gcGFja2FnZU1hbmFnZXIuZ2V0RHJhd2FibGUocGFja2FnZU5hbWUsIG1JY29uUmVzb3VyY2VJZCwgYXBwSW5mbyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHRoZSBwcmludGVyJ3Mgc2VydmljZSdzIGljb24gaWYgbm8gcGVyIHByaW50ZXIgaWNvbiBjb3VsZCBiZSBmb3VuZAorICAgICAgICAgICAgICAgIGlmIChkcmF3YWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlID0gYXBwSW5mby5sb2FkSWNvbihwYWNrYWdlTWFuYWdlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkcmF3YWJsZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXQgdGhlIHByaW50ZXIgbmFtZS4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIHByaW50ZXIgbmFtZS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG1OYW1lOwogICAgIH0KIApAQCAtMTA2LDcgKzE5Myw3IEBACiAgICAgICogQHNlZSAjU1RBVFVTX0lETEUKICAgICAgKiBAc2VlICNTVEFUVVNfVU5BVkFJTEFCTEUKICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldFN0YXR1cygpIHsKKyAgICBwdWJsaWMgQFN0YXR1cyBpbnQgZ2V0U3RhdHVzKCkgewogICAgICAgICByZXR1cm4gbVN0YXR1czsKICAgICB9CiAKQEAgLTExNSwxNiArMjAyLDI4IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBkZXNjcmlwdGlvbi4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgewogICAgICAgICByZXR1cm4gbURlc2NyaXB0aW9uOwogICAgIH0KIAogICAgIC8qKgorICAgICAqIEdldCB0aGUge0BsaW5rIFBlbmRpbmdJbnRlbnR9IHRoYXQgbGF1bmNoZXMgdGhlIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgKiBwcmludGVyLgorICAgICAqCisgICAgICogQHJldHVybiB0aGUge0BsaW5rIFBlbmRpbmdJbnRlbnR9IHRoYXQgbGF1bmNoZXMgdGhlIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAqICAgICAgICAgdGhlIHByaW50ZXIgb3IgbnVsbCBpZiBpdCBpcyBub3QgY29uZmlndXJlZAorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEBOdWxsYWJsZSBQZW5kaW5nSW50ZW50IGdldEluZm9JbnRlbnQoKSB7CisgICAgICAgIHJldHVybiBtSW5mb0ludGVudDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBwcmludGVyIGNhcGFiaWxpdGllcy4KICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGNhcGFiaWxpdGllcy4KICAgICAgKi8KLSAgICBwdWJsaWMgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gZ2V0Q2FwYWJpbGl0aWVzKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUHJpbnRlckNhcGFiaWxpdGllc0luZm8gZ2V0Q2FwYWJpbGl0aWVzKCkgewogICAgICAgICByZXR1cm4gbUNhcGFiaWxpdGllczsKICAgICB9CiAKQEAgLTEzNCw2ICsyMzMsMTAgQEAKICAgICAgICAgbVN0YXR1cyA9IHBhcmNlbC5yZWFkSW50KCk7CiAgICAgICAgIG1EZXNjcmlwdGlvbiA9IHBhcmNlbC5yZWFkU3RyaW5nKCk7CiAgICAgICAgIG1DYXBhYmlsaXRpZXMgPSBwYXJjZWwucmVhZFBhcmNlbGFibGUobnVsbCk7CisgICAgICAgIG1JY29uUmVzb3VyY2VJZCA9IHBhcmNlbC5yZWFkSW50KCk7CisgICAgICAgIG1IYXNDdXN0b21QcmludGVySWNvbiA9IHBhcmNlbC5yZWFkQnl0ZSgpICE9IDA7CisgICAgICAgIG1DdXN0b21QcmludGVySWNvbkdlbiA9IHBhcmNlbC5yZWFkSW50KCk7CisgICAgICAgIG1JbmZvSW50ZW50ID0gcGFyY2VsLnJlYWRQYXJjZWxhYmxlKG51bGwpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTQ4LDYgKzI1MSwxMCBAQAogICAgICAgICBwYXJjZWwud3JpdGVJbnQobVN0YXR1cyk7CiAgICAgICAgIHBhcmNlbC53cml0ZVN0cmluZyhtRGVzY3JpcHRpb24pOwogICAgICAgICBwYXJjZWwud3JpdGVQYXJjZWxhYmxlKG1DYXBhYmlsaXRpZXMsIGZsYWdzKTsKKyAgICAgICAgcGFyY2VsLndyaXRlSW50KG1JY29uUmVzb3VyY2VJZCk7CisgICAgICAgIHBhcmNlbC53cml0ZUJ5dGUoKGJ5dGUpIChtSGFzQ3VzdG9tUHJpbnRlckljb24gPyAxIDogMCkpOworICAgICAgICBwYXJjZWwud3JpdGVJbnQobUN1c3RvbVByaW50ZXJJY29uR2VuKTsKKyAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShtSW5mb0ludGVudCwgZmxhZ3MpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTU5LDkgKzI2Niw2MSBAQAogICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1TdGF0dXM7CiAgICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKChtRGVzY3JpcHRpb24gIT0gbnVsbCkgPyBtRGVzY3JpcHRpb24uaGFzaENvZGUoKSA6IDApOwogICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICgobUNhcGFiaWxpdGllcyAhPSBudWxsKSA/IG1DYXBhYmlsaXRpZXMuaGFzaENvZGUoKSA6IDApOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1JY29uUmVzb3VyY2VJZDsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAobUhhc0N1c3RvbVByaW50ZXJJY29uID8gMSA6IDApOworICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIG1DdXN0b21QcmludGVySWNvbkdlbjsKKyAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyAoKG1JbmZvSW50ZW50ICE9IG51bGwpID8gbUluZm9JbnRlbnQuaGFzaENvZGUoKSA6IDApOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbXBhcmUgdHdvIHtAbGluayBQcmludGVySW5mbyBwcmludGVySW5mb3N9IGluIGFsbCBhc3BlY3RzIGJlc2lkZSBiZWluZyBudWxsIGFuZCB0aGUKKyAgICAgKiB7QGxpbmsgI21TdGF0dXN9LgorICAgICAqCisgICAgICogQHBhcmFtIG90aGVyIHRoZSBvdGhlciB7QGxpbmsgUHJpbnRlckluZm99CisgICAgICogQHJldHVybiB0cnVlIGlmZiB0aGUgaW5mb3MgYXJlIGVxdWl2YWxlbnQKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGVxdWFsc0lnbm9yaW5nU3RhdHVzKFByaW50ZXJJbmZvIG90aGVyKSB7CisgICAgICAgIGlmIChtSWQgPT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG90aGVyLm1JZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtSWQuZXF1YWxzKG90aGVyLm1JZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMobU5hbWUsIG90aGVyLm1OYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghVGV4dFV0aWxzLmVxdWFscyhtRGVzY3JpcHRpb24sIG90aGVyLm1EZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUNhcGFiaWxpdGllcyA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAob3RoZXIubUNhcGFiaWxpdGllcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtQ2FwYWJpbGl0aWVzLmVxdWFscyhvdGhlci5tQ2FwYWJpbGl0aWVzKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtSWNvblJlc291cmNlSWQgIT0gb3RoZXIubUljb25SZXNvdXJjZUlkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1IYXNDdXN0b21QcmludGVySWNvbiAhPSBvdGhlci5tSGFzQ3VzdG9tUHJpbnRlckljb24pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUN1c3RvbVByaW50ZXJJY29uR2VuICE9IG90aGVyLm1DdXN0b21QcmludGVySWNvbkdlbikgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChtSW5mb0ludGVudCA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAob3RoZXIubUluZm9JbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghbUluZm9JbnRlbnQuZXF1YWxzKG90aGVyLm1JbmZvSW50ZW50KSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7CiAgICAgICAgIGlmICh0aGlzID09IG9iaikgewpAQCAtMTc0LDI5ICszMzMsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBQcmludGVySW5mbyBvdGhlciA9IChQcmludGVySW5mbykgb2JqOwotICAgICAgICBpZiAobUlkID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5tSWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICghbUlkLmVxdWFscyhvdGhlci5tSWQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1OYW1lLCBvdGhlci5tTmFtZSkpIHsKKyAgICAgICAgaWYgKCFlcXVhbHNJZ25vcmluZ1N0YXR1cyhvdGhlcikpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAobVN0YXR1cyAhPSBvdGhlci5tU3RhdHVzKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFUZXh0VXRpbHMuZXF1YWxzKG1EZXNjcmlwdGlvbiwgb3RoZXIubURlc2NyaXB0aW9uKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQ2FwYWJpbGl0aWVzID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5tQ2FwYWJpbGl0aWVzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1DYXBhYmlsaXRpZXMuZXF1YWxzKG90aGVyLm1DYXBhYmlsaXRpZXMpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMDksNiArMzUxLDEwIEBACiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIHN0YXR1cz0iKS5hcHBlbmQobVN0YXR1cyk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGRlc2NyaXB0aW9uPSIpLmFwcGVuZChtRGVzY3JpcHRpb24pOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjYXBhYmlsaXRpZXM9IikuYXBwZW5kKG1DYXBhYmlsaXRpZXMpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBpY29uUmVzSWQ9IikuYXBwZW5kKG1JY29uUmVzb3VyY2VJZCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsIGhhc0N1c3RvbVByaW50ZXJJY29uPSIpLmFwcGVuZChtSGFzQ3VzdG9tUHJpbnRlckljb24pOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCBjdXN0b21QcmludGVySWNvbkdlbj0iKS5hcHBlbmQobUN1c3RvbVByaW50ZXJJY29uR2VuKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgaW5mb0ludGVudD0iKS5hcHBlbmQobUluZm9JbnRlbnQpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiXCJ9Iik7CiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpAQCAtMjI4LDcgKzM3NCw3IEBACiAgICAgICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBwcmludGVyIGlkIGlzIG51bGwsIG9yIHRoZQogICAgICAgICAgKiBwcmludGVyIG5hbWUgaXMgZW1wdHkgb3IgdGhlIHN0YXR1cyBpcyBub3QgYSB2YWxpZCBvbmUuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlcihQcmludGVySWQgcHJpbnRlcklkLCBTdHJpbmcgbmFtZSwgaW50IHN0YXR1cykgeworICAgICAgICBwdWJsaWMgQnVpbGRlcihATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkLCBATm9uTnVsbCBTdHJpbmcgbmFtZSwgQFN0YXR1cyBpbnQgc3RhdHVzKSB7CiAgICAgICAgICAgICBpZiAocHJpbnRlcklkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwcmludGVySWQgY2Fubm90IGJlIG51bGwuIik7CiAgICAgICAgICAgICB9CkBAIC0yNDksNyArMzk1LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHBhcmFtIG90aGVyIE90aGVyIGluZm8gZnJvbSB3aGljaCB0byBzdGFydCBidWlsZGluZy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFByaW50ZXJJbmZvIG90aGVyKSB7CisgICAgICAgIHB1YmxpYyBCdWlsZGVyKEBOb25OdWxsIFByaW50ZXJJbmZvIG90aGVyKSB7CiAgICAgICAgICAgICBtUHJvdG90eXBlID0gbmV3IFByaW50ZXJJbmZvKCk7CiAgICAgICAgICAgICBtUHJvdG90eXBlLmNvcHlGcm9tKG90aGVyKTsKICAgICAgICAgfQpAQCAtMjY0LDE5ICs0MTAsNTAgQEAKICAgICAgICAgICogQHNlZSBQcmludGVySW5mbyNTVEFUVVNfQlVTWQogICAgICAgICAgKiBAc2VlIFByaW50ZXJJbmZvI1NUQVRVU19VTkFWQUlMQUJMRQogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U3RhdHVzKGludCBzdGF0dXMpIHsKKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0U3RhdHVzKEBTdGF0dXMgaW50IHN0YXR1cykgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tU3RhdHVzID0gc3RhdHVzOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKKyAgICAgICAgICogU2V0IGEgZHJhd2FibGUgcmVzb3VyY2UgYXMgaWNvbiBmb3IgdGhpcyBwcmludGVyLiBJZiBubyBpY29uIGlzIHNldCB0aGUgcHJpbnRlcidzCisgICAgICAgICAqIHNlcnZpY2UncyBpY29uIGlzIHVzZWQgZm9yIHRoZSBwcmludGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gaWNvblJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIG9mIHRoZSBpY29uLgorICAgICAgICAgKiBAcmV0dXJuIFRoaXMgYnVpbGRlci4KKyAgICAgICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRJY29uUmVzb3VyY2VJZChARHJhd2FibGVSZXMgaW50IGljb25SZXNvdXJjZUlkKSB7CisgICAgICAgICAgICBtUHJvdG90eXBlLm1JY29uUmVzb3VyY2VJZCA9IGljb25SZXNvdXJjZUlkOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogRGVjbGFyZXMgdGhhdCB0aGUgcHJpbnQgc2VydmljZSBjYW4gbG9hZCBhIGN1c3RvbSBwZXIgcHJpbnRlcidzIGljb24uIElmIGJvdGgKKyAgICAgICAgICoge0BsaW5rIFByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SWNvblJlc291cmNlSWR9IGFuZCBhIGN1c3RvbSBpY29uIGFyZSBzZXQgdGhlIHJlc291cmNlIGljb24KKyAgICAgICAgICogaXMgc2hvd24gd2hpbGUgdGhlIGN1c3RvbSBpY29uIGxvYWRzIGJ1dCB0aGVuIHRoZSBjdXN0b20gaWNvbiBpcyB1c2VkLiBJZgorICAgICAgICAgKiB7QGxpbmsgUHJpbnRlckluZm8uQnVpbGRlciNzZXRJY29uUmVzb3VyY2VJZH0gaXMgbm90IHNldCB0aGUgcHJpbnRlcidzIHNlcnZpY2UncyBpY29uIGlzCisgICAgICAgICAqIHNob3duIHdoaWxlIGxvYWRpbmcuCisgICAgICAgICAqIDxwPgorICAgICAgICAgKiBUaGUgaWNvbiBpcyByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkgYW5kIG9ubHkgd2hlbiBuZWVkZWQgdmlhCisgICAgICAgICAqIHtAbGluayBhbmRyb2lkLnByaW50c2VydmljZS5QcmludGVyRGlzY292ZXJ5U2Vzc2lvbiNvblJlcXVlc3RDdXN0b21QcmludGVySWNvbn0uCisgICAgICAgICAqIDwvcD4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQE5vbk51bGwgQnVpbGRlciBzZXRIYXNDdXN0b21QcmludGVySWNvbigpIHsKKyAgICAgICAgICAgIG1Qcm90b3R5cGUubUhhc0N1c3RvbVByaW50ZXJJY29uID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFNldHMgdGhlIDxzdHJvbmc+bG9jYWxpemVkPC9zdHJvbmc+IHByaW50ZXIgbmFtZSB3aGljaAogICAgICAgICAgKiBpcyBzaG93biB0byB0aGUgdXNlcgogICAgICAgICAgKgogICAgICAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZS4KICAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldE5hbWUoQE5vbk51bGwgU3RyaW5nIG5hbWUpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubU5hbWUgPSBuYW1lOwogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KQEAgLTI4OCwxOCArNDY1LDMwIEBACiAgICAgICAgICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgZGVzY3JpcHRpb24uCiAgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0RGVzY3JpcHRpb24oU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldERlc2NyaXB0aW9uKEBOb25OdWxsIFN0cmluZyBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgbVByb3RvdHlwZS5tRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIFNldHMgdGhlIHtAbGluayBQZW5kaW5nSW50ZW50fSB0aGF0IGxhdW5jaGVzIGFuIGFjdGl2aXR5IHNob3dpbmcgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICAgKiB0aGUgcHJpbnRlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGluZm9JbnRlbnQgVGhlIHtAbGluayBQZW5kaW5nSW50ZW50IGludGVudH0uCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgc2V0SW5mb0ludGVudChATm9uTnVsbCBQZW5kaW5nSW50ZW50IGluZm9JbnRlbnQpIHsKKyAgICAgICAgICAgIG1Qcm90b3R5cGUubUluZm9JbnRlbnQgPSBpbmZvSW50ZW50OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKworICAgICAgICAvKioKICAgICAgICAgICogU2V0cyB0aGUgcHJpbnRlciBjYXBhYmlsaXRpZXMuCiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIGNhcGFiaWxpdGllcy4KICAgICAgICAgICogQHJldHVybiBUaGlzIGJ1aWxkZXIuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8gY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIHB1YmxpYyBATm9uTnVsbCBCdWlsZGVyIHNldENhcGFiaWxpdGllcyhATm9uTnVsbCBQcmludGVyQ2FwYWJpbGl0aWVzSW5mbyBjYXBhYmlsaXRpZXMpIHsKICAgICAgICAgICAgIG1Qcm90b3R5cGUubUNhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllczsKICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICB9CkBAIC0zMDksNyArNDk4LDcgQEAKICAgICAgICAgICoKICAgICAgICAgICogQHJldHVybiBBIG5ldyB7QGxpbmsgUHJpbnRlckluZm99LgogICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFByaW50ZXJJbmZvIGJ1aWxkKCkgeworICAgICAgICBwdWJsaWMgQE5vbk51bGwgUHJpbnRlckluZm8gYnVpbGQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbVByb3RvdHlwZTsKICAgICAgICAgfQogCkBAIC0zMTgsNiArNTA3LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cyA9PSBTVEFUVVNfQlVTWQogICAgICAgICAgICAgICAgICAgICB8fCBzdGF0dXMgPT0gU1RBVFVTX1VOQVZBSUxBQkxFKTsKICAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJbmNyZW1lbnRzIHRoZSBnZW5lcmF0aW9uIG51bWJlciBvZiB0aGUgY3VzdG9tIHByaW50ZXIgaWNvbi4gQXMgdGhlIHtAbGluayBQcmludGVySW5mb30KKyAgICAgICAgICogZG9lcyBub3QgbWF0Y2ggdGhlIHByZXZpb3VzIG9uZSBhbnltb3JlLCB1c2VycyBvZiB0aGUge0BsaW5rIFByaW50ZXJJbmZvfSB3aWxsIHJlbG9hZCB0aGUKKyAgICAgICAgICogaWNvbiBpZiBuZWVkZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gVGhpcyBidWlsZGVyLgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIEBOb25OdWxsIEJ1aWxkZXIgaW5jQ3VzdG9tUHJpbnRlckljb25HZW4oKSB7CisgICAgICAgICAgICBtUHJvdG90eXBlLm1DdXN0b21QcmludGVySWNvbkdlbisrOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxQcmludGVySW5mbz4gQ1JFQVRPUiA9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9wZGYvUHJpbnRlZFBkZkRvY3VtZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludC9wZGYvUHJpbnRlZFBkZkRvY3VtZW50LmphdmEKaW5kZXggMmQ4YWFmYS4uZGY3YzA1NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnQvcGRmL1ByaW50ZWRQZGZEb2N1bWVudC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50L3BkZi9QcmludGVkUGRmRG9jdW1lbnQuamF2YQpAQCAtMTYsMjYgKzE2LDI1IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludC5wZGY7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50UmFuZ2U7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50LlBhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5wZGYuUGRmRG9jdW1lbnQuUGFnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXM7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEF0dHJpYnV0ZXMuTWFyZ2luczsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50QXR0cmlidXRlcy5NZWRpYVNpemU7CiAKIC8qKgotICogVGhpcyBjbGFzcyBpcyBhIGhlbHBlciBmb3IgY3JlYXRpbmcgYSBQREYgZmlsZSBmb3IgZ2l2ZW4gcHJpbnQKLSAqIGF0dHJpYnV0ZXMuIEl0IGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHByaW50aW5nIHZpYSB0aGUgbmF0aXZlCi0gKiBBbmRyb2lkIGdyYXBoaWNzIEFQSXMuCisgKiBUaGlzIGNsYXNzIGlzIGEgaGVscGVyIGZvciBjcmVhdGluZyBhIFBERiBmaWxlIGZvciBnaXZlbiBwcmludCBhdHRyaWJ1dGVzLiBJdCBpcyB1c2VmdWwgZm9yCisgKiBpbXBsZW1lbnRpbmcgcHJpbnRpbmcgdmlhIHRoZSBuYXRpdmUgQW5kcm9pZCBncmFwaGljcyBBUElzLgogICogPHA+Ci0gKiBUaGlzIGNsYXNzIGNvbXB1dGVzIHRoZSBwYWdlIHdpZHRoLCBwYWdlIGhlaWdodCwgYW5kIGNvbnRlbnQgcmVjdGFuZ2xlCi0gKiBmcm9tIHRoZSBwcm92aWRlZCBwcmludCBhdHRyaWJ1dGVzIGFuZCB0aGVzZSBwcmVjb21wdXRlZCB2YWx1ZXMgY2FuIGJlCi0gKiBhY2Nlc3NlZCB2aWEge0BsaW5rICNnZXRQYWdlV2lkdGgoKX0sIHtAbGluayAjZ2V0UGFnZUhlaWdodCgpfSwgYW5kCi0gKiB7QGxpbmsgI2dldFBhZ2VDb250ZW50UmVjdCgpfSwgcmVzcGVjdGl2ZWx5LiBUaGUge0BsaW5rICNzdGFydFBhZ2UoaW50KX0KLSAqIG1ldGhvZHMgY3JlYXRlcyBwYWdlcyB3aG9zZSB7QGxpbmsgUGFnZUluZm99IGlzIGluaXRpYWxpemVkIHdpdGggdGhlCi0gKiBwcmVjb21wdXRlZCB2YWx1ZXMgZm9yIHdpZHRoLCBoZWlnaHQsIGFuZCBjb250ZW50IHJlY3RhbmdsZS4KKyAqIFRoaXMgY2xhc3MgY29tcHV0ZXMgdGhlIHBhZ2Ugd2lkdGgsIHBhZ2UgaGVpZ2h0LCBhbmQgY29udGVudCByZWN0YW5nbGUgZnJvbSB0aGUgcHJvdmlkZWQgcHJpbnQKKyAqIGF0dHJpYnV0ZXMgYW5kIHRoZXNlIHByZWNvbXB1dGVkIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdmlhIHtAbGluayAjZ2V0UGFnZVdpZHRoKCl9LAorICoge0BsaW5rICNnZXRQYWdlSGVpZ2h0KCl9LCBhbmQge0BsaW5rICNnZXRQYWdlQ29udGVudFJlY3QoKX0sIHJlc3BlY3RpdmVseS4gVGhlCisgKiB7QGxpbmsgI3N0YXJ0UGFnZShpbnQpfSBtZXRob2RzIGNyZWF0ZXMgcGFnZXMgd2hvc2UKKyAqIHtAbGluayBhbmRyb2lkLmdyYXBoaWNzLnBkZi5QZGZEb2N1bWVudC5QYWdlSW5mbyBQYWdlSW5mb30gaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcHJlY29tcHV0ZWQKKyAqIHZhbHVlcyBmb3Igd2lkdGgsIGhlaWdodCwgYW5kIGNvbnRlbnQgcmVjdGFuZ2xlLgogICogPHA+CiAgKiBBIHR5cGljYWwgdXNlIG9mIHRoZSBBUElzIGxvb2tzIGxpa2UgdGhpczoKICAqIDwvcD4KQEAgLTgxLDcgKzgwLDcgQEAKICAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGluc3RhbmNlIGZvciBhY2Nlc3NpbmcgcmVzb3VyY2VzLgogICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIFRoZSBwcmludCBhdHRyaWJ1dGVzLgogICAgICAqLwotICAgIHB1YmxpYyBQcmludGVkUGRmRG9jdW1lbnQoQ29udGV4dCBjb250ZXh0LCBQcmludEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgeworICAgIHB1YmxpYyBQcmludGVkUGRmRG9jdW1lbnQoQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATm9uTnVsbCBQcmludEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgewogICAgICAgICBNZWRpYVNpemUgbWVkaWFTaXplID0gYXR0cmlidXRlcy5nZXRNZWRpYVNpemUoKTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSBzaXplIG9mIHRoZSB0YXJnZXQgY2FudmFzIGZyb20gdGhlIGF0dHJpYnV0ZXMuCkBAIC0xMDUsMjggKzEwNCwyOCBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFN0YXJ0cyBhIG5ldyBwYWdlLiBUaGUgcGFnZSBpcyBjcmVhdGVkIHVzaW5nIHdpZHRoLCBoZWlnaHQgIGFuZCBjb250ZW50Ci0gICAgICogcmVjdGFuZ2xlIGNvbXB1dGVkIGZyb20gdGhlIHByaW50IGF0dHJpYnV0ZXMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3RvcgotICAgICAqIGFuZCB0aGUgZ2l2ZW4gcGFnZSBudW1iZXIgdG8gY3JlYXRlIGFuIGFwcHJvcHJpYXRlIHtAbGluayBQYWdlSW5mb30uCisgICAgICogU3RhcnRzIGEgbmV3IHBhZ2UuIFRoZSBwYWdlIGlzIGNyZWF0ZWQgdXNpbmcgd2lkdGgsIGhlaWdodCBhbmQgY29udGVudCByZWN0YW5nbGUgY29tcHV0ZWQKKyAgICAgKiBmcm9tIHRoZSBwcmludCBhdHRyaWJ1dGVzIHBhc3NlZCBpbiB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBnaXZlbiBwYWdlIG51bWJlciB0byBjcmVhdGUgYW4KKyAgICAgKiBhcHByb3ByaWF0ZSB7QGxpbmsgYW5kcm9pZC5ncmFwaGljcy5wZGYuUGRmRG9jdW1lbnQuUGFnZUluZm8gUGFnZUluZm99LgogICAgICAqIDxwPgotICAgICAqIEFmdGVyIHRoZSBwYWdlIGlzIGNyZWF0ZWQgeW91IGNhbiBkcmF3IGFyYml0cmFyeSBjb250ZW50IG9uIHRoZSBwYWdlJ3MKLSAgICAgKiBjYW52YXMgd2hpY2ggeW91IGNhbiBnZXQgYnkgY2FsbGluZyB7QGxpbmsgUGFnZSNnZXRDYW52YXMoKSBQYWdlLmdldENhbnZhcygpfS4KKyAgICAgKiBBZnRlciB0aGUgcGFnZSBpcyBjcmVhdGVkIHlvdSBjYW4gZHJhdyBhcmJpdHJhcnkgY29udGVudCBvbiB0aGUgcGFnZSdzIGNhbnZhcyB3aGljaCB5b3UgY2FuCisgICAgICogZ2V0IGJ5IGNhbGxpbmcge0BsaW5rIGFuZHJvaWQuZ3JhcGhpY3MucGRmLlBkZkRvY3VtZW50LlBhZ2UjZ2V0Q2FudmFzKCkgUGFnZS5nZXRDYW52YXMoKX0uCiAgICAgICogQWZ0ZXIgeW91IGFyZSBkb25lIGRyYXdpbmcgdGhlIGNvbnRlbnQgeW91IHNob3VsZCBmaW5pc2ggdGhlIHBhZ2UgYnkgY2FsbGluZwotICAgICAqIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uIEFmdGVyIHRoZSBwYWdlIGlzIGZpbmlzaGVkIHlvdSBzaG91bGQgbm8gbG9uZ2VyCi0gICAgICogYWNjZXNzIHRoZSBwYWdlIG9yIGl0cyBjYW52YXMuCisgICAgICoge0BsaW5rICNmaW5pc2hQYWdlKFBhZ2UpfS4gQWZ0ZXIgdGhlIHBhZ2UgaXMgZmluaXNoZWQgeW91IHNob3VsZCBubyBsb25nZXIgYWNjZXNzIHRoZSBwYWdlIG9yCisgICAgICogaXRzIGNhbnZhcy4KICAgICAgKiA8L3A+CiAgICAgICogPHA+Ci0gICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciB7QGxpbmsgI2Nsb3NlKCl9LgotICAgICAqIEFsc28gZG8gbm90IGNhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGxhc3QgcGFnZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZAotICAgICAqIGlzIG5vdCBmaW5pc2hlZCBieSBjYWxsaW5nIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uCisgICAgICogPHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEbyBub3QgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciB7QGxpbmsgI2Nsb3NlKCl9LiBBbHNvIGRvIG5vdCBjYWxsIHRoaXMKKyAgICAgKiBtZXRob2QgaWYgdGhlIGxhc3QgcGFnZSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBpcyBub3QgZmluaXNoZWQgYnkgY2FsbGluZworICAgICAqIHtAbGluayAjZmluaXNoUGFnZShQYWdlKX0uCiAgICAgICogPC9wPgogICAgICAqCi0gICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIHBhZ2UgbnVtYmVyLiBNdXN0IGJlIGEgcG9zaXRpdmUgdmFsdWUuCisgICAgICogQHBhcmFtIHBhZ2VOdW1iZXIgVGhlIHBhZ2UgbnVtYmVyLiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlLgogICAgICAqIEByZXR1cm4gQSBibGFuayBwYWdlLgogICAgICAqCiAgICAgICogQHNlZSAjZmluaXNoUGFnZShQYWdlKQogICAgICAqLwotICAgIHB1YmxpYyBQYWdlIHN0YXJ0UGFnZShpbnQgcGFnZU51bWJlcikgeworICAgIHB1YmxpYyBATm9uTnVsbCBQYWdlIHN0YXJ0UGFnZShASW50UmFuZ2UoZnJvbSA9IDApIGludCBwYWdlTnVtYmVyKSB7CiAgICAgICAgIFBhZ2VJbmZvIHBhZ2VJbmZvID0gbmV3IFBhZ2VJbmZvCiAgICAgICAgICAgICAgICAgLkJ1aWxkZXIobVBhZ2VXaWR0aCwgbVBhZ2VIZWlnaHQsIHBhZ2VOdW1iZXIpCiAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRSZWN0KG1Db250ZW50UmVjdCkKQEAgLTEzOSw3ICsxMzgsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiBUaGUgcGFnZSB3aWR0aCBpbiBQb3N0U2NyaXB0IHBvaW50cyAoMS83MnRoIG9mIGFuIGluY2gpLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZVdpZHRoKCkgeworICAgIHB1YmxpYyBASW50UmFuZ2UoZnJvbSA9IDApIGludCBnZXRQYWdlV2lkdGgoKSB7CiAgICAgICAgIHJldHVybiBtUGFnZVdpZHRoOwogICAgIH0KIApAQCAtMTQ4LDcgKzE0Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBwYWdlIGhlaWdodCBpbiBQb3N0U2NyaXB0IHBvaW50cyAoMS83MnRoIG9mIGFuIGluY2gpLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UGFnZUhlaWdodCgpIHsKKyAgICBwdWJsaWMgQEludFJhbmdlKGZyb20gPSAwKSBpbnQgZ2V0UGFnZUhlaWdodCgpIHsKICAgICAgICAgcmV0dXJuIG1QYWdlSGVpZ2h0OwogICAgIH0KIApAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIFRoZSBjb250ZW50IHJlY3RhbmdsZS4KICAgICAgKi8KLSAgICBwdWJsaWMgUmVjdCBnZXRQYWdlQ29udGVudFJlY3QoKSB7CisgICAgcHVibGljIEBOb25OdWxsIFJlY3QgZ2V0UGFnZUNvbnRlbnRSZWN0KCkgewogICAgICAgICByZXR1cm4gbUNvbnRlbnRSZWN0OwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9DdXN0b21QcmludGVySWNvbkNhbGxiYWNrLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjay5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOWVhOGIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjay5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJJZDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisKKy8qKgorICogQ2FsbGJhY2sgZm9yIHtAbGluayBQcmludGVyRGlzY292ZXJ5U2Vzc2lvbiNvblJlcXVlc3RDdXN0b21QcmludGVySWNvbn0uCisgKi8KK3B1YmxpYyBjbGFzcyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrIHsKKyAgICAvKiogVGhlIHByaW50ZXIgdGhlIGNhbGwgYmFjayBpcyBmb3IgKi8KKyAgICBwcml2YXRlIGZpbmFsIEBOb25OdWxsIFByaW50ZXJJZCBtUHJpbnRlcklkOworICAgIHByaXZhdGUgZmluYWwgQE5vbk51bGwgSVByaW50U2VydmljZUNsaWVudCBtT2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19UQUcgPSAiQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayI7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBjYWxsYmFjayBjbGFzcyB0byBiZSB1c2VkIG9uY2UgYSBpY29uIGlzIGxvYWRlZAorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCBUaGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEBwYXJhbSBvYnNlcnZlciBUaGUgb2JzZXJ2ZXIgdGhhdCBuZWVkcyB0byBiZSBub3RpZmllZCBhYm91dCB0aGUgdXBkYXRlLgorICAgICAqLworICAgIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2soQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwgQE5vbk51bGwgSVByaW50U2VydmljZUNsaWVudCBvYnNlcnZlcikgeworICAgICAgICBtUHJpbnRlcklkID0gcHJpbnRlcklkOworICAgICAgICBtT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm92aWRlIGEgbmV3IGljb24gZm9yIGEgcHJpbnRlci4gQ2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB0byB1cGRhdGUgdGhlIGljb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gaWNvbiBUaGUgbmV3IGljb24gZm9yIHRoZSBwcmludGVyIG9yIG51bGwgdG8gdW5zZXQgdGhlIGN1cnJlbnQgaWNvbgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGljb24gY291bGQgYmUgdXBkYXRlZAorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoQE51bGxhYmxlIEljb24gaWNvbikgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbU9ic2VydmVyLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQobVByaW50ZXJJZCwgaWNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShMT0dfVEFHICwgIkNvdWxkIG5vdCB1cGRhdGUgaWNvbiIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9JUHJpbnRTZXJ2aWNlLmFpZGwKaW5kZXggZWUzNjYxOS4uMzc1MGQ3YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2UuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvSVByaW50U2VydmljZS5haWRsCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn/2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIApAQCAtMzUsNiArMzUsMTUgQEAKICAgICB2b2lkIHN0b3BQcmludGVyRGlzY292ZXJ5KCk7CiAgICAgdm9pZCB2YWxpZGF0ZVByaW50ZXJzKGluIExpc3Q8UHJpbnRlcklkPiBwcmludGVySWRzKTsKICAgICB2b2lkIHN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoaW4gUHJpbnRlcklkIHByaW50ZXJJZCk7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0IHRoZSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgdm9pZCByZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oaW4gUHJpbnRlcklkIHByaW50ZXJJZCk7CisKICAgICB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhpbiBQcmludGVySWQgcHJpbnRlcklkKTsKICAgICB2b2lkIGRlc3Ryb3lQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2VDbGllbnQuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9JUHJpbnRTZXJ2aWNlQ2xpZW50LmFpZGwKaW5kZXggYjRiYWE0OC4uMGFlMWUxOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL0lQcmludFNlcnZpY2VDbGllbnQuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvSVByaW50U2VydmljZUNsaWVudC5haWRsCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50Sm9iSW5mbzsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJJZDsKQEAgLTUzLDQgKzU0LDEzIEBACiAKICAgICB2b2lkIG9uUHJpbnRlcnNBZGRlZChpbiBQYXJjZWxlZExpc3RTbGljZSBwcmludGVycyk7CiAgICAgdm9pZCBvblByaW50ZXJzUmVtb3ZlZChpbiBQYXJjZWxlZExpc3RTbGljZSBwcmludGVySWRzKTsKKworICAgIC8qKgorICAgICAqIEhhbmRsZSB0aGF0IGEgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlciB3YXMgbG9hZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gYmVsb25ncyB0bworICAgICAqIEBwYXJhbSBpY29uIHRoZSBpY29uIHRoYXQgd2FzIGxvYWRlZAorICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgKi8KKyAgICB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoaW4gUHJpbnRlcklkIHByaW50ZXJJZCwgaW4gSWNvbiBpY29uKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludERvY3VtZW50LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnREb2N1bWVudC5qYXZhCmluZGV4IGU0M2YyYTguLjAxMjFhZTEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludERvY3VtZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50RG9jdW1lbnQuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludERvY3VtZW50SW5mbzsKQEAgLTU0LDcgKzU2LDcgQEAKICAgICAgKgogICAgICAqIEByZXR1cm4gVGhlIGRvY3VtZW50IGluZm8uCiAgICAgICovCi0gICAgcHVibGljIFByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKSB7CisgICAgcHVibGljIEBOb25OdWxsIFByaW50RG9jdW1lbnRJbmZvIGdldEluZm8oKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIHJldHVybiBtSW5mbzsKICAgICB9CkBAIC02OSw3ICs3MSw3IEBACiAgICAgICoKICAgICAgKiBAcmV0dXJuIEEgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkaW5nIHRoZSBkYXRhLgogICAgICAqLwotICAgIHB1YmxpYyBQYXJjZWxGaWxlRGVzY3JpcHRvciBnZXREYXRhKCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgUGFyY2VsRmlsZURlc2NyaXB0b3IgZ2V0RGF0YSgpIHsKICAgICAgICAgUHJpbnRTZXJ2aWNlLnRocm93SWZOb3RDYWxsZWRPbk1haW5UaHJlYWQoKTsKICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Igc291cmNlID0gbnVsbDsKICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Igc2luayA9IG51bGw7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRKb2IuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCmluZGV4IDg2ZmMyOTIuLjY0MTRiNmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludEpvYi5qYXZhCkBAIC0zNDQsNyArMzQ0LDcgQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHRhZyB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgQE1haW5UaHJlYWQKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRUYWcoU3RyaW5nIHRhZykgeworICAgIHB1YmxpYyBib29sZWFuIHNldFRhZyhATm9uTnVsbCBTdHJpbmcgdGFnKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIGlmIChpc0luSW1tdXRhYmxlU3RhdGUoKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzY0LDcgKzM2NCw4IEBACiAgICAgICoKICAgICAgKiBAc2VlICNzZXRUYWcoU3RyaW5nKQogICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFnKCkgeworICAgIEBNYWluVGhyZWFkCisgICAgcHVibGljIEBOdWxsYWJsZSBTdHJpbmcgZ2V0VGFnKCkgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogICAgICAgICByZXR1cm4gZ2V0SW5mbygpLmdldFRhZygpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2UuamF2YQppbmRleCA2Mjk1ODIyLi5kMDAzN2I3IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZS5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTE5MSwzMCArMTkyLDI5IEBACiAKICAgICAvKioKICAgICAgKiBJZiB5b3UgZGVjbGFyZWQgYW4gb3B0aW9uYWwgYWN0aXZpdHkgd2l0aCBhZHZhbmNlZCBwcmludCBvcHRpb25zIHZpYSB0aGUKLSAgICAgKiB7QGxpbmsgYW5kcm9pZC5SLmF0dHIjYWR2YW5jZWRQcmludE9wdGlvbnNBY3Rpdml0eSBhZHZhbmNlZFByaW50T3B0aW9uc0FjdGl2aXR5fQotICAgICAqIGF0dHJpYnV0ZSwgdGhpcyBleHRyYSBpcyB1c2VkIHRvIHBhc3MgaW4gdGhlIGN1cnJlbnRseSBjb25zdHJ1Y3RlZCB7QGxpbmsKLSAgICAgKiBQcmludEpvYkluZm99IHRvIHlvdXIgYWN0aXZpdHkgYWxsb3dpbmcgeW91IHRvIG1vZGlmeSBpdC4gQWZ0ZXIgeW91IGFyZQotICAgICAqIGRvbmUsIHlvdSBtdXN0IHJldHVybiB0aGUgbW9kaWZpZWQge0BsaW5rIFByaW50Sm9iSW5mb30gdmlhIHRoZSBzYW1lIGV4dHJhLgorICAgICAqIHtAbGluayBhbmRyb2lkLlIuYXR0ciNhZHZhbmNlZFByaW50T3B0aW9uc0FjdGl2aXR5IGFkdmFuY2VkUHJpbnRPcHRpb25zQWN0aXZpdHl9IGF0dHJpYnV0ZSwKKyAgICAgKiB0aGlzIGV4dHJhIGlzIHVzZWQgdG8gcGFzcyBpbiB0aGUgY3VycmVudGx5IGNvbnN0cnVjdGVkIHtAbGluayBQcmludEpvYkluZm99IHRvIHlvdXIgYWN0aXZpdHkKKyAgICAgKiBhbGxvd2luZyB5b3UgdG8gbW9kaWZ5IGl0LiBBZnRlciB5b3UgYXJlIGRvbmUsIHlvdSBtdXN0IHJldHVybiB0aGUgbW9kaWZpZWQKKyAgICAgKiB7QGxpbmsgUHJpbnRKb2JJbmZvfSB2aWEgdGhlIHNhbWUgZXh0cmEuCiAgICAgICogPHA+Ci0gICAgICogWW91IGNhbm5vdCBtb2RpZnkgdGhlIHBhc3NlZCBpbiB7QGxpbmsgUHJpbnRKb2JJbmZvfSBkaXJlY3RseSwgcmF0aGVyIHlvdQotICAgICAqIHNob3VsZCBidWlsZCBhbm90aGVyIG9uZSB1c2luZyB0aGUge0BsaW5rIFByaW50Sm9iSW5mby5CdWlsZGVyfSBjbGFzcy4gWW91Ci0gICAgICogY2FuIHNwZWNpZnkgYW55IHN0YW5kYXJkIHByb3BlcnRpZXMgYW5kIGFkZCBhZHZhbmNlZCwgcHJpbnRlciBzcGVjaWZpYywKLSAgICAgKiBvbmVzIHZpYSB7QGxpbmsgUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpfSBhbmQge0BsaW5rCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBpbnQpCi0gICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBpbnQpfS4gVGhlIGFkdmFuY2VkIG9wdGlvbnMKLSAgICAgKiBhcmUgbm90IGludGVycHJldGVkIGJ5IHRoZSBzeXN0ZW0sIHRoZXkgd2lsbCBub3QgYmUgdmlzaWJsZSB0byBhcHBsaWNhdGlvbnMsCi0gICAgICogYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIGJ5IHlvdXIgcHJpbnQgc2VydmljZSB2aWEge0BsaW5rCi0gICAgICogUHJpbnRKb2IjZ2V0QWR2YW5jZWRTdHJpbmdPcHRpb24oU3RyaW5nKSBQcmludEpvYi5nZXRBZHZhbmNlZFN0cmluZ09wdGlvbihTdHJpbmcpfQotICAgICAqIGFuZCB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRJbnRPcHRpb24oU3RyaW5nKSBQcmludEpvYi5nZXRBZHZhbmNlZEludE9wdGlvbihTdHJpbmcpfS4KKyAgICAgKiBZb3UgY2Fubm90IG1vZGlmeSB0aGUgcGFzc2VkIGluIHtAbGluayBQcmludEpvYkluZm99IGRpcmVjdGx5LCByYXRoZXIgeW91IHNob3VsZCBidWlsZAorICAgICAqIGFub3RoZXIgb25lIHVzaW5nIHRoZSB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm8uQnVpbGRlciBQcmludEpvYkluZm8uQnVpbGRlcn0gY2xhc3MuCisgICAgICogWW91IGNhbiBzcGVjaWZ5IGFueSBzdGFuZGFyZCBwcm9wZXJ0aWVzIGFuZCBhZGQgYWR2YW5jZWQsIHByaW50ZXIgc3BlY2lmaWMsIG9uZXMgdmlhCisgICAgICoge0BsaW5rIGFuZHJvaWQucHJpbnQuUHJpbnRKb2JJbmZvLkJ1aWxkZXIjcHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpCisgICAgICogUHJpbnRKb2JJbmZvLkJ1aWxkZXIucHV0QWR2YW5jZWRPcHRpb24oU3RyaW5nLCBTdHJpbmcpfSBhbmQKKyAgICAgKiB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm8uQnVpbGRlciNwdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcsIGludCkKKyAgICAgKiBQcmludEpvYkluZm8uQnVpbGRlci5wdXRBZHZhbmNlZE9wdGlvbihTdHJpbmcsIGludCl9LiBUaGUgYWR2YW5jZWQgb3B0aW9ucyBhcmUgbm90CisgICAgICogaW50ZXJwcmV0ZWQgYnkgdGhlIHN5c3RlbSwgdGhleSB3aWxsIG5vdCBiZSB2aXNpYmxlIHRvIGFwcGxpY2F0aW9ucywgYW5kIGNhbiBvbmx5IGJlIGFjY2Vzc2VkCisgICAgICogYnkgeW91ciBwcmludCBzZXJ2aWNlIHZpYSB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRTdHJpbmdPcHRpb24oU3RyaW5nKQorICAgICAqIFByaW50Sm9iLmdldEFkdmFuY2VkU3RyaW5nT3B0aW9uKFN0cmluZyl9IGFuZCB7QGxpbmsgUHJpbnRKb2IjZ2V0QWR2YW5jZWRJbnRPcHRpb24oU3RyaW5nKQorICAgICAqIFByaW50Sm9iLmdldEFkdmFuY2VkSW50T3B0aW9uKFN0cmluZyl9LgogICAgICAqIDwvcD4KICAgICAgKiA8cD4KLSAgICAgKiBJZiB0aGUgYWR2YW5jZWQgcHJpbnQgb3B0aW9ucyBhY3Rpdml0eSBvZmZlcnMgY2hhbmdlcyB0byB0aGUgc3RhbmRhcmQgcHJpbnQKLSAgICAgKiBvcHRpb25zLCB5b3UgY2FuIGdldCB0aGUgY3VycmVudCB7QGxpbmsgYW5kcm9pZC5wcmludC5QcmludGVySW5mb30gdXNpbmcgdGhlCi0gICAgICoge0BsaW5rICNFWFRSQV9QUklOVEVSX0lORk99IGV4dHJhIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIHByZXNlbnQgdGhlIHVzZXIKLSAgICAgKiB3aXRoIFVJIG9wdGlvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IHByaW50ZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudAotICAgICAqIHByaW50ZXIgZG9lcyBub3Qgc3VwcG9ydCBhIGdpdmVuIG1lZGlhIHNpemUsIHlvdSBzaG91bGQgbm90IG9mZmVyIGl0IGluIHRoZQotICAgICAqIGFkdmFuY2VkIHByaW50IG9wdGlvbnMgVUkuCisgICAgICogSWYgdGhlIGFkdmFuY2VkIHByaW50IG9wdGlvbnMgYWN0aXZpdHkgb2ZmZXJzIGNoYW5nZXMgdG8gdGhlIHN0YW5kYXJkIHByaW50IG9wdGlvbnMsIHlvdSBjYW4KKyAgICAgKiBnZXQgdGhlIGN1cnJlbnQge0BsaW5rIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8gUHJpbnRlckluZm99IHVzaW5nIHRoZQorICAgICAqIHtAbGluayAjRVhUUkFfUFJJTlRFUl9JTkZPfSBleHRyYSB3aGljaCB3aWxsIGFsbG93IHlvdSB0byBwcmVzZW50IHRoZSB1c2VyIHdpdGggVUkgb3B0aW9ucworICAgICAqIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBwcmludGVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQgcHJpbnRlciBkb2VzIG5vdCBzdXBwb3J0IGEKKyAgICAgKiBnaXZlbiBtZWRpYSBzaXplLCB5b3Ugc2hvdWxkIG5vdCBvZmZlciBpdCBpbiB0aGUgYWR2YW5jZWQgcHJpbnQgb3B0aW9ucyBVSS4KICAgICAgKiA8L3A+CiAgICAgICoKICAgICAgKiBAc2VlICNFWFRSQV9QUklOVEVSX0lORk8KQEAgLTI3NSw5ICsyNzUsMTAgQEAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIGNyZWF0ZSBhIG5ldyB7QGxpbmsgUHJpbnRlckRpc2NvdmVyeVNlc3Npb259LgogICAgICAqCisgICAgICogQHJldHVybiBUaGUgY3JlYXRlZCBzZXNzaW9uLgogICAgICAqIEBzZWUgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24KICAgICAgKi8KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gb25DcmVhdGVQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOworICAgIHByb3RlY3RlZCBhYnN0cmFjdCBATnVsbGFibGUgUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gb25DcmVhdGVQcmludGVyRGlzY292ZXJ5U2Vzc2lvbigpOwogCiAgICAgLyoqCiAgICAgICogQ2FsbGVkIHdoZW4gY2FuY2VsbGF0aW9uIG9mIGEgcHJpbnQgam9iIGlzIHJlcXVlc3RlZC4gVGhlIHNlcnZpY2UKQEAgLTM2OCw2ICszNjksNyBAQAogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoU2VydmljZUhhbmRsZXIuTVNHX0RFU1RST1lfUFJJTlRFUl9ESVNDT1ZFUllfU0VTU0lPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgc3RhcnRQcmludGVyRGlzY292ZXJ5KExpc3Q8UHJpbnRlcklkPiBwcmlvcml0eUxpc3QpIHsKICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlcnZpY2VIYW5kbGVyLk1TR19TVEFSVF9QUklOVEVSX0RJU0NPVkVSWSwKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5TGlzdCkuc2VuZFRvVGFyZ2V0KCk7CkBAIC0zOTEsNiArMzkzLDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlcnZpY2VIYW5kbGVyLk1TR19SRVFVRVNUX0NVU1RPTV9QUklOVEVSX0lDT04sCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVySWQpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQgcHJpbnRlcklkKSB7CiAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXJ2aWNlSGFuZGxlci5NU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlcklkKS5zZW5kVG9UYXJnZXQoKTsKQEAgLTQyMywxMCArNDMxLDExIEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19TVE9QX1BSSU5URVJfRElTQ09WRVJZID0gNDsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1ZBTElEQVRFX1BSSU5URVJTID0gNTsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NUQVJUX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcgPSA2OwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HID0gNzsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX1BSSU5USk9CX1FVRVVFRCA9IDg7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9SRVFVRVNUX0NBTkNFTF9QUklOVEpPQiA9IDk7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19TRVRfQ0xJRU5UID0gMTA7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19SRVFVRVNUX0NVU1RPTV9QUklOVEVSX0lDT04gPSA3OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HID0gODsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTVNHX09OX1BSSU5USk9CX1FVRVVFRCA9IDk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9SRVFVRVNUX0NBTkNFTF9QUklOVEpPQiA9IDEwOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNU0dfU0VUX0NMSUVOVCA9IDExOwogCiAgICAgICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcihMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBzdXBlcihsb29wZXIsIG51bGwsIHRydWUpOwpAQCAtNTA4LDYgKzUxNywxNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBicmVhazsKIAorICAgICAgICAgICAgICAgIGNhc2UgTVNHX1JFUVVFU1RfQ1VTVE9NX1BSSU5URVJfSUNPTjogeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJNU0dfUkVRVUVTVF9DVVNUT01fUFJJTlRFUl9JQ09OICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBnZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobURpc2NvdmVyeVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlcklkIHByaW50ZXJJZCA9IChQcmludGVySWQpIG1lc3NhZ2Uub2JqOworICAgICAgICAgICAgICAgICAgICAgICAgbURpc2NvdmVyeVNlc3Npb24ucmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGJyZWFrOworCiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfU1RPUF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIk1TR19TVE9QX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcgIgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZUluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2VJbmZvLmphdmEKaW5kZXggYTJjNmMwOWUuLjkxZTAxZjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludFNlcnZpY2VJbmZvLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJpbnRzZXJ2aWNlL1ByaW50U2VydmljZUluZm8uamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGFuZHJvaWQucHJpbnRzZXJ2aWNlOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwpAQCAtOTQsMTIgKzk1LDIxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjb21wb25lbnQgbmFtZSBmb3IgdGhpcyBwcmludCBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgY29tcG9uZW50IG5hbWUgZm9yIHRoaXMgcHJpbnQgc2VydmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgQE5vbk51bGwgQ29tcG9uZW50TmFtZSBnZXRDb21wb25lbnROYW1lKCkgeworICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudE5hbWUobVJlc29sdmVJbmZvLnNlcnZpY2VJbmZvLnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgIG1SZXNvbHZlSW5mby5zZXJ2aWNlSW5mby5uYW1lKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlLgogICAgICAqCiAgICAgICogQHBhcmFtIHJlc29sdmVJbmZvIFRoZSBzZXJ2aWNlIHJlc29sdmUgaW5mby4KICAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGZvciBhY2Nlc3NpbmcgcmVzb3VyY2VzLgotICAgICAqIEB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiBJZiBhIFhNTCBwYXJzaW5nIGVycm9yIG9jY3Vycy4KLSAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGEgSS9PIGVycm9yIG9jY3Vycy4KKyAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGluc3RhbmNlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgUHJpbnRTZXJ2aWNlSW5mbyBjcmVhdGUoUmVzb2x2ZUluZm8gcmVzb2x2ZUluZm8sIENvbnRleHQgY29udGV4dCkgewogICAgICAgICBTdHJpbmcgc2V0dGluZ3NBY3Rpdml0eU5hbWUgPSBudWxsOwpAQCAtMjIwLDEwICsyMzAsMTIgQEAKICAgICAvKioKICAgICAgKiB7QGluaGVyaXREb2N9CiAgICAgICovCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBwYXJjZWwsIGludCBmbGFneikgewogICAgICAgICBwYXJjZWwud3JpdGVTdHJpbmcobUlkKTsKICAgICAgICAgcGFyY2VsLndyaXRlUGFyY2VsYWJsZShtUmVzb2x2ZUluZm8sIDApOwpAQCAtMjc1LDEwICsyODcsMTIgQEAKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFByaW50U2VydmljZUluZm8+IENSRUFUT1IgPQogICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxQcmludFNlcnZpY2VJbmZvPigpIHsKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBQcmludFNlcnZpY2VJbmZvIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHBhcmNlbCkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNlcnZpY2VJbmZvKHBhcmNlbCk7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFByaW50U2VydmljZUluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNlcnZpY2VJbmZvW3NpemVdOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcmludHNlcnZpY2UvUHJpbnRlckRpc2NvdmVyeVNlc3Npb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCmluZGV4IDE3Y2I2OGYuLmNkNWE5MDMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ByaW50c2VydmljZS9QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5wcmludHNlcnZpY2U7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVyQ2FwYWJpbGl0aWVzSW5mbzsKQEAgLTEzOCw3ICsxMzksNyBAQAogICAgICAqIEBzZWUgI3JlbW92ZVByaW50ZXJzKExpc3QpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFByaW50ZXJJbmZvPiBnZXRQcmludGVycygpIHsKKyAgICBwdWJsaWMgZmluYWwgQE5vbk51bGwgTGlzdDxQcmludGVySW5mbz4gZ2V0UHJpbnRlcnMoKSB7CiAgICAgICAgIFByaW50U2VydmljZS50aHJvd0lmTm90Q2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIGlmIChtSXNEZXN0cm95ZWQpIHsKICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKQEAgLTE2MSw3ICsxNjIsNyBAQAogICAgICAqIEBzZWUgI2dldFByaW50ZXJzKCkKICAgICAgKiBAc2VlICNpc0Rlc3Ryb3llZCgpCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgYWRkUHJpbnRlcnMoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBhZGRQcmludGVycyhATm9uTnVsbCBMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycykgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogCiAgICAgICAgIC8vIElmIHRoZSBzZXNzaW9uIGlzIGRlc3Ryb3llZCAtIG5vdGhpbmcgZG8gdG8uCkBAIC0yMjUsNyArMjI2LDcgQEAKICAgICAgKiBAc2VlICNnZXRQcmludGVycygpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlbW92ZVByaW50ZXJzKExpc3Q8UHJpbnRlcklkPiBwcmludGVySWRzKSB7CisgICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlUHJpbnRlcnMoQE5vbk51bGwgTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKICAgICAgICAgUHJpbnRTZXJ2aWNlLnRocm93SWZOb3RDYWxsZWRPbk1haW5UaHJlYWQoKTsKIAogICAgICAgICAvLyBJZiB0aGUgc2Vzc2lvbiBpcyBkZXN0cm95ZWQgLSBub3RoaW5nIGRvIHRvLgpAQCAtMzUwLDcgKzM1MSw3IEBACiAgICAgICogQHNlZSAjcmVtb3ZlUHJpbnRlcnMoTGlzdCkKICAgICAgKiBAc2VlICNpc1ByaW50ZXJEaXNjb3ZlcnlTdGFydGVkKCkKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShMaXN0PFByaW50ZXJJZD4gcHJpb3JpdHlMaXN0KTsKKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlckRpc2NvdmVyeShATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gcHJpb3JpdHlMaXN0KTsKIAogICAgIC8qKgogICAgICAqIENhbGxiYWNrIG5vdGlmeWluZyB5b3UgdGhhdCB5b3Ugc2hvdWxkIHN0b3AgcHJpbnRlciBkaXNjb3ZlcnkuCkBAIC0zNzIsMTAgKzM3MywxMCBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHByaW50ZXJJZHMgVGhlIHByaW50ZXJzIHRvIHZhbGlkYXRlLgogICAgICAqCi0gICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8pCiAgICAgICogICAgICBQcmludGVySW5mby5CdWlsZGVyLnNldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblZhbGlkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uVmFsaWRhdGVQcmludGVycyhATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gcHJpbnRlcklkcyk7CiAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIHN0YXJ0IHRyYWNraW5nIHRoZSBzdGF0ZSBvZiBhIHByaW50ZXIuIFRyYWNraW5nCkBAIC00MDAsMTAgKzQwMSwyNCBAQAogICAgICAqIEBwYXJhbSBwcmludGVySWQgVGhlIHByaW50ZXIgdG8gc3RhcnQgdHJhY2tpbmcuCiAgICAgICoKICAgICAgKiBAc2VlICNvblN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQpCi0gICAgICogQHNlZSBQcmludGVySW5mby5CdWlsZGVyI3NldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRDYXBhYmlsaXRpZXMoUHJpbnRlckNhcGFiaWxpdGllc0luZm8pCiAgICAgICogICAgICBQcmludGVySW5mby5CdWlsZGVyLnNldENhcGFiaWxpdGllcyhQcmludGVyQ2FwYWJpbGl0aWVzSW5mbykKICAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkIHByaW50ZXJJZCk7CisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb25TdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpOworCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gT25jZSB0aGUgaWNvbiBpcyBhdmFpbGFibGUgdXNlCisgICAgICoge0BsaW5rIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sjb25DdXN0b21QcmludGVySWNvbkxvYWRlZH0gdG8gc2VuZCB0aGUgZGF0YSB0byB0aGUgcHJpbnQKKyAgICAgKiBzZXJ2aWNlLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCBUaGUgcHJpbnRlciB0byBpY29uIGJlbG9uZ3MgdG8uCisgICAgICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZvciByZXR1cm5pbmcgdGhlIGljb24gdG8gdGhlIHByaW50IHNwb29sZXIuCisgICAgICoKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIHZvaWQgb25SZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCwKKyAgICAgICAgICAgIEBOb25OdWxsIEN1c3RvbVByaW50ZXJJY29uQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBDYWxsYmFjayBhc2tpbmcgeW91IHRvIHN0b3AgdHJhY2tpbmcgdGhlIHN0YXRlIG9mIGEgcHJpbnRlci4gVGhlIHBhc3NlZApAQCAtNDE0LDcgKzQyOSw3IEBACiAgICAgICoKICAgICAgKiBAc2VlICNvblN0YXJ0UHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkKQogICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKFByaW50ZXJJZCBwcmludGVySWQpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpOwogCiAgICAgLyoqCiAgICAgICogR2V0cyB0aGUgcHJpbnRlcnMgdGhhdCBzaG91bGQgYmUgdHJhY2tlZC4gVGhlc2UgYXJlIHByaW50ZXJzIHRoYXQgYXJlCkBAIC00MzQsNyArNDQ5LDcgQEAKICAgICAgKiBAc2VlICNvblN0b3BQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQpCiAgICAgICogQHNlZSAjaXNEZXN0cm95ZWQoKQogICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFByaW50ZXJJZD4gZ2V0VHJhY2tlZFByaW50ZXJzKCkgeworICAgIHB1YmxpYyBmaW5hbCBATm9uTnVsbCBMaXN0PFByaW50ZXJJZD4gZ2V0VHJhY2tlZFByaW50ZXJzKCkgewogICAgICAgICBQcmludFNlcnZpY2UudGhyb3dJZk5vdENhbGxlZE9uTWFpblRocmVhZCgpOwogICAgICAgICBpZiAobUlzRGVzdHJveWVkKSB7CiAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CkBAIC00NzYsNyArNDkxLDcgQEAKICAgICAgICAgcmV0dXJuIG1Jc0Rpc2NvdmVyeVN0YXJ0ZWQ7CiAgICAgfQogCi0gICAgdm9pZCBzdGFydFByaW50ZXJEaXNjb3ZlcnkoTGlzdDxQcmludGVySWQ+IHByaW9yaXR5TGlzdCkgeworICAgIHZvaWQgc3RhcnRQcmludGVyRGlzY292ZXJ5KEBOb25OdWxsIExpc3Q8UHJpbnRlcklkPiBwcmlvcml0eUxpc3QpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQpIHsKICAgICAgICAgICAgIG1Jc0Rpc2NvdmVyeVN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICAgICAgc2VuZE91dE9mRGlzY292ZXJ5UGVyaW9kUHJpbnRlckNoYW5nZXMoKTsKQEAgLTQ5NCwxMyArNTA5LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHZhbGlkYXRlUHJpbnRlcnMoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKKyAgICB2b2lkIHZhbGlkYXRlUHJpbnRlcnMoQE5vbk51bGwgTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQgJiYgbU9ic2VydmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIG9uVmFsaWRhdGVQcmludGVycyhwcmludGVySWRzKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgc3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhQcmludGVySWQgcHJpbnRlcklkKSB7CisgICAgdm9pZCBzdGFydFByaW50ZXJTdGF0ZVRyYWNraW5nKEBOb25OdWxsIFByaW50ZXJJZCBwcmludGVySWQpIHsKICAgICAgICAgaWYgKCFtSXNEZXN0cm95ZWQgJiYgbU9ic2VydmVyICE9IG51bGwKICAgICAgICAgICAgICAgICAmJiAhbVRyYWNrZWRQcmludGVycy5jb250YWlucyhwcmludGVySWQpKSB7CiAgICAgICAgICAgICBtVHJhY2tlZFByaW50ZXJzLmFkZChwcmludGVySWQpOwpAQCAtNTA4LDcgKzUyMywyMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBzdG9wUHJpbnRlclN0YXRlVHJhY2tpbmcoUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgIC8qKgorICAgICAqIFJlcXVlc3QgdGhlIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIFRoZSBwcmludGVyIHRvIGljb24gYmVsb25ncyB0by4KKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgdm9pZCByZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24oQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBpZiAoIW1Jc0Rlc3Ryb3llZCAmJiBtT2JzZXJ2ZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgQ3VzdG9tUHJpbnRlckljb25DYWxsYmFjayBjYWxsYmFjayA9IG5ldyBDdXN0b21QcmludGVySWNvbkNhbGxiYWNrKHByaW50ZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgbU9ic2VydmVyKTsKKyAgICAgICAgICAgIG9uUmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBzdG9wUHJpbnRlclN0YXRlVHJhY2tpbmcoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgewogICAgICAgICBpZiAoIW1Jc0Rlc3Ryb3llZCAmJiBtT2JzZXJ2ZXIgIT0gbnVsbAogICAgICAgICAgICAgICAgICYmIG1UcmFja2VkUHJpbnRlcnMucmVtb3ZlKHByaW50ZXJJZCkpIHsKICAgICAgICAgICAgIG9uU3RvcFByaW50ZXJTdGF0ZVRyYWNraW5nKHByaW50ZXJJZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEKaW5kZXggMWQ0ZDU3Mi4uNmE1ZDg1N2MgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0NhbGxMb2cuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9DYWxsTG9nLmphdmEKQEAgLTQyMSw2ICs0MjEsMTMgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUREX0ZPUl9BTExfVVNFUlMgPSAiYWRkX2Zvcl9hbGxfdXNlcnMiOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBUaGUgZGF0ZSB0aGUgcm93IGlzIGxhc3QgaW5zZXJ0ZWQsIHVwZGF0ZWQsIG9yIG1hcmtlZCBhcyBkZWxldGVkLCBpbiBtaWxsaXNlY29uZHMKKyAgICAgICAgICogc2luY2UgdGhlIGVwb2NoLiBSZWFkIG9ubHkuCisgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVIgKGxvbmcpPC9QPgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFTVF9NT0RJRklFRCA9ICJsYXN0X21vZGlmaWVkIjsKKworICAgICAgICAvKioKICAgICAgICAgICogSWYgYSBzdWNjZXNzZnVsIGNhbGwgaXMgbWFkZSB0aGF0IGlzIGxvbmdlciB0aGFuIHRoaXMgZHVyYXRpb24sIHVwZGF0ZSB0aGUgcGhvbmUgbnVtYmVyCiAgICAgICAgICAqIGluIHRoZSBDb250YWN0c1Byb3ZpZGVyIHdpdGggdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgbnVtYmVyLCBiYXNlZCBvbiB0aGUgdXNlcidzCiAgICAgICAgICAqIGN1cnJlbnQgY291bnRyeSBjb2RlLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzQ29udHJhY3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0RvY3VtZW50c0NvbnRyYWN0LmphdmEKaW5kZXggNzdhNDQ4NS4uYTQwMWFjMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzQ29udHJhY3QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Eb2N1bWVudHNDb250cmFjdC5qYXZhCkBAIC0yMzAsNyArMjMwLDYgQEAKICAgICAgICAgICogQHNlZSAjRkxBR19TVVBQT1JUU19XUklURQogICAgICAgICAgKiBAc2VlICNGTEFHX1NVUFBPUlRTX0RFTEVURQogICAgICAgICAgKiBAc2VlICNGTEFHX1NVUFBPUlRTX1RIVU1CTkFJTAotICAgICAgICAgKiBAc2VlICNGTEFHX1NVUFBPUlRTX1RZUEVEX0RPQ1VNRU5UCiAgICAgICAgICAqIEBzZWUgI0ZMQUdfRElSX1BSRUZFUlNfR1JJRAogICAgICAgICAgKiBAc2VlICNGTEFHX0RJUl9QUkVGRVJTX0xBU1RfTU9ESUZJRUQKICAgICAgICAgICogQHNlZSAjRkxBR19WSVJUVUFMX0RPQ1VNRU5UCkBAIC0zNDksMTUgKzM0OCw2IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1VQUE9SVFNfTU9WRSA9IDEgPDwgODsKIAogICAgICAgICAvKioKLSAgICAgICAgICogRmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBkb2N1bWVudCBjYW4gYmUgY29udmVydGVkIHRvIGFsdGVybmF0aXZlIHR5cGVzLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNDT0xVTU5fRkxBR1MKLSAgICAgICAgICogQHNlZSBEb2N1bWVudHNQcm92aWRlciNvcGVuVHlwZWREb2N1bWVudChTdHJpbmcsIFN0cmluZywgQnVuZGxlLAotICAgICAgICAgKiAgICAgIGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsKQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVVBQT1JUU19UWVBFRF9ET0NVTUVOVCA9IDEgPDwgOTsKLQotICAgICAgICAvKioKICAgICAgICAgICogRmxhZyBpbmRpY2F0aW5nIHRoYXQgYSBkb2N1bWVudCBpcyB2aXJ0dWFsLCBhbmQgZG9lc24ndCBoYXZlIGJ5dGUKICAgICAgICAgICogcmVwcmVzZW50YXRpb24gaW4gdGhlIE1JTUUgdHlwZSBzcGVjaWZpZWQgYXMge0BsaW5rICNDT0xVTU5fTUlNRV9UWVBFfS4KICAgICAgICAgICoKQEAgLTM2Niw3ICszNTYsNyBAQAogICAgICAgICAgKiBAc2VlIERvY3VtZW50c1Byb3ZpZGVyI29wZW5UeXBlZERvY3VtZW50KFN0cmluZywgU3RyaW5nLCBCdW5kbGUsCiAgICAgICAgICAqICAgICAgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWwpCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1ZJUlRVQUxfRE9DVU1FTlQgPSAxIDw8IDEwOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1ZJUlRVQUxfRE9DVU1FTlQgPSAxIDw8IDk7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIEZsYWcgaW5kaWNhdGluZyB0aGF0IGEgZG9jdW1lbnQgaXMgYW4gYXJjaGl2ZSwgYW5kIGl0J3MgY29udGVudHMgY2FuIGJlCkBAIC0zNzgsNyArMzY4LDcgQEAKICAgICAgICAgICogQHNlZSAjQ09MVU1OX0ZMQUdTCiAgICAgICAgICAqIEBzZWUgRG9jdW1lbnRzUHJvdmlkZXIjcXVlcnlDaGlsZERvY3VtZW50cyhTdHJpbmcsIFN0cmluZ1tdLCBTdHJpbmcpCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FSQ0hJVkUgPSAxIDw8IDExOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0FSQ0hJVkUgPSAxIDw8IDEwOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBGbGFnIGluZGljYXRpbmcgdGhhdCBkb2N1bWVudCB0aXRsZXMgc2hvdWxkIGJlIGhpZGRlbiB3aGVuIHZpZXdpbmcKQEAgLTY2MCw2ICs2NTAsMTYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBCdWlsZHMgVVJJIGZvciB1c2VyIGhvbWUgZGlyZWN0b3J5IG9uIGV4dGVybmFsIChsb2NhbCkgc3RvcmFnZS4KKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBVcmkgYnVpbGRIb21lVXJpKCkgeworICAgICAgICAvLyBUT0RPOiBBdm9pZCB0aGlzIHR5cGUgb2YgaW50ZXJwYWNrYWdlIGNvcHlpbmcuIEFkZGVkIGhlcmUgdG8gYXZvaWQKKyAgICAgICAgLy8gZGlyZWN0IGNvdXBsaW5nLCBidXQgbm90IGlkZWFsLgorICAgICAgICByZXR1cm4gRG9jdW1lbnRzQ29udHJhY3QuYnVpbGRSb290VXJpKCJjb20uYW5kcm9pZC5leHRlcm5hbHN0b3JhZ2UuZG9jdW1lbnRzIiwgImhvbWUiKTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBCdWlsZCBVUkkgcmVwcmVzZW50aW5nIHRoZSByZWNlbnRseSBtb2RpZmllZCBkb2N1bWVudHMgb2YgYSBzcGVjaWZpYyByb290CiAgICAgICogaW4gYSBkb2N1bWVudCBwcm92aWRlci4gV2hlbiBxdWVyaWVkLCBhIHByb3ZpZGVyIHdpbGwgcmV0dXJuIHplcm8gb3IgbW9yZQogICAgICAqIHJvd3Mgd2l0aCBjb2x1bW5zIGRlZmluZWQgYnkge0BsaW5rIERvY3VtZW50fS4KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0RvY3VtZW50c1Byb3ZpZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Eb2N1bWVudHNQcm92aWRlci5qYXZhCmluZGV4IGUyNWJhMzUuLjk0YjQxNTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL0RvY3VtZW50c1Byb3ZpZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvRG9jdW1lbnRzUHJvdmlkZXIuamF2YQpAQCAtNTE3LDEzICs1MTcsMTIgQEAKICAgICAgKiAgICAgICAgICAgIHByb3ZpZGVyLgogICAgICAqIEBwYXJhbSBzaWduYWwgdXNlZCBieSB0aGUgY2FsbGVyIHRvIHNpZ25hbCBpZiB0aGUgcmVxdWVzdCBzaG91bGQgYmUKICAgICAgKiAgICAgICAgICAgIGNhbmNlbGxlZC4gTWF5IGJlIG51bGwuCi0gICAgICogQHNlZSBEb2N1bWVudCNGTEFHX1NVUFBPUlRTX1RZUEVEX0RPQ1VNRU5UCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgcHVibGljIEFzc2V0RmlsZURlc2NyaXB0b3Igb3BlblR5cGVkRG9jdW1lbnQoCiAgICAgICAgICAgICBTdHJpbmcgZG9jdW1lbnRJZCwgU3RyaW5nIG1pbWVUeXBlRmlsdGVyLCBCdW5kbGUgb3B0cywgQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCkKICAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlR5cGVkIGRvY3VtZW50cyBub3Qgc3VwcG9ydGVkIik7CisgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIlRoZSByZXF1ZXN0ZWQgTUlNRSB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlLmphdmEKaW5kZXggNDhiM2MxYS4uODlhYzI3YzlhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9NZWRpYVN0b3JlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvTWVkaWFTdG9yZS5qYXZhCkBAIC0zODQsOCArMzg0LDE0IEBACiAKICAgICBwdWJsaWMgaW50ZXJmYWNlIE1lZGlhQ29sdW1ucyBleHRlbmRzIEJhc2VDb2x1bW5zIHsKICAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhlIGZpbGUKLSAgICAgICAgICogPFA+VHlwZTogREFUQSBTVFJFQU08L1A+CisgICAgICAgICAqIFBhdGggdG8gdGhlIGZpbGUgb24gZGlzay4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIE5vdGUgdGhhdCBhcHBzIG1heSBub3QgaGF2ZSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHRvIGRpcmVjdGx5IGFjY2VzcworICAgICAgICAgKiB0aGlzIHBhdGguIEluc3RlYWQgb2YgdHJ5aW5nIHRvIG9wZW4gdGhpcyBwYXRoIGRpcmVjdGx5LCBhcHBzIHNob3VsZAorICAgICAgICAgKiB1c2Uge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuRmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfSB0byBnYWluCisgICAgICAgICAqIGFjY2Vzcy4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIFR5cGU6IFRFWFQKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEEgPSAiX2RhdGEiOwogCkBAIC0xMTQ5LDggKzExNTUsMTUgQEAKICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfU09SVF9PUkRFUiA9ICJpbWFnZV9pZCBBU0MiOwogCiAgICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRoZSBkYXRhIHN0cmVhbSBmb3IgdGhlIHRodW1ibmFpbAotICAgICAgICAgICAgICogPFA+VHlwZTogREFUQSBTVFJFQU08L1A+CisgICAgICAgICAgICAgKiBQYXRoIHRvIHRoZSB0aHVtYm5haWwgZmlsZSBvbiBkaXNrLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBOb3RlIHRoYXQgYXBwcyBtYXkgbm90IGhhdmUgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyB0byBkaXJlY3RseQorICAgICAgICAgICAgICogYWNjZXNzIHRoaXMgcGF0aC4gSW5zdGVhZCBvZiB0cnlpbmcgdG8gb3BlbiB0aGlzIHBhdGggZGlyZWN0bHksCisgICAgICAgICAgICAgKiBhcHBzIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAqIHtAbGluayBDb250ZW50UmVzb2x2ZXIjb3BlbkZpbGVEZXNjcmlwdG9yKFVyaSwgU3RyaW5nKX0gdG8gZ2FpbgorICAgICAgICAgICAgICogYWNjZXNzLgorICAgICAgICAgICAgICogPHA+CisgICAgICAgICAgICAgKiBUeXBlOiBURVhUCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERBVEEgPSAiX2RhdGEiOwogCkBAIC0xNTk2LDggKzE2MDksMTUgQEAKICAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUUgPSAibmFtZSI7CiAKICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGhlIGRhdGEgc3RyZWFtIGZvciB0aGUgcGxheWxpc3QgZmlsZQotICAgICAgICAgICAgICogPFA+VHlwZTogREFUQSBTVFJFQU08L1A+CisgICAgICAgICAgICAgKiBQYXRoIHRvIHRoZSBwbGF5bGlzdCBmaWxlIG9uIGRpc2suCisgICAgICAgICAgICAgKiA8cD4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCBhcHBzIG1heSBub3QgaGF2ZSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHRvIGRpcmVjdGx5CisgICAgICAgICAgICAgKiBhY2Nlc3MgdGhpcyBwYXRoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBvcGVuIHRoaXMgcGF0aCBkaXJlY3RseSwKKyAgICAgICAgICAgICAqIGFwcHMgc2hvdWxkIHVzZQorICAgICAgICAgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuRmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfSB0byBnYWluCisgICAgICAgICAgICAgKiBhY2Nlc3MuCisgICAgICAgICAgICAgKiA8cD4KKyAgICAgICAgICAgICAqIFR5cGU6IFRFWFQKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQSA9ICJfZGF0YSI7CiAKQEAgLTIxOTIsOCArMjIxMiwxNSBAQAogICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TT1JUX09SREVSID0gInZpZGVvX2lkIEFTQyI7CiAKICAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogVGhlIGRhdGEgc3RyZWFtIGZvciB0aGUgdGh1bWJuYWlsCi0gICAgICAgICAgICAgKiA8UD5UeXBlOiBEQVRBIFNUUkVBTTwvUD4KKyAgICAgICAgICAgICAqIFBhdGggdG8gdGhlIHRodW1ibmFpbCBmaWxlIG9uIGRpc2suCisgICAgICAgICAgICAgKiA8cD4KKyAgICAgICAgICAgICAqIE5vdGUgdGhhdCBhcHBzIG1heSBub3QgaGF2ZSBmaWxlc3lzdGVtIHBlcm1pc3Npb25zIHRvIGRpcmVjdGx5CisgICAgICAgICAgICAgKiBhY2Nlc3MgdGhpcyBwYXRoLiBJbnN0ZWFkIG9mIHRyeWluZyB0byBvcGVuIHRoaXMgcGF0aCBkaXJlY3RseSwKKyAgICAgICAgICAgICAqIGFwcHMgc2hvdWxkIHVzZQorICAgICAgICAgICAgICoge0BsaW5rIENvbnRlbnRSZXNvbHZlciNvcGVuRmlsZURlc2NyaXB0b3IoVXJpLCBTdHJpbmcpfSB0byBnYWluCisgICAgICAgICAgICAgKiBhY2Nlc3MuCisgICAgICAgICAgICAgKiA8cD4KKyAgICAgICAgICAgICAqIFR5cGU6IFRFWFQKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREFUQSA9ICJfZGF0YSI7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9TZXR0aW5ncy5qYXZhCmluZGV4IDM4MWNhNGMuLmE2NDg1ZTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1NldHRpbmdzLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvU2V0dGluZ3MuamF2YQpAQCAtMTksNiArMTksNyBAQAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2RrQ29uc3RhbnQuU2RrQ29uc3RhbnRUeXBlOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRlc3RBcGk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlUaHJlYWQ7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BcHBsaWNhdGlvbjsKQEAgLTY0MCw3ICs2NDEsNyBAQAogICAgICAqIHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSBmb3IgYXBwbGljYXRpb25zIHRvIG9wZXJhdGUgY29ycmVjdGx5IGluIHRoZSB2YXJpb3VzIHBvd2VyCiAgICAgICogc2F2aW5nIG1vZGUuICBUaGlzIGlzIG9ubHkgZm9yIHVudXN1YWwgYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBkZWVwbHkgY29udHJvbCB0aGVpciBvd24KICAgICAgKiBleGVjdXRpb24sIGF0IHRoZSBwb3RlbnRpYWwgZXhwZW5zZSBvZiB0aGUgdXNlcidzIGJhdHRlcnkgbGlmZS4gIE5vdGUgdGhhdCB0aGVzZSBhcHBsaWNhdGlvbnMKLSAgICAgKiBncmVhdGx5IHJ1biB0aGUgcmlzayBvZiBzaG93aW5nIHRvIHRoZSB1c2VyIGhhcyBob3cgcG93ZXIgY29uc3VtZXJzIG9uIHRoZWlyIGRldmljZS48L3A+CisgICAgICogZ3JlYXRseSBydW4gdGhlIHJpc2sgb2Ygc2hvd2luZyB0byB0aGUgdXNlciBhcyBoaWdoIHBvd2VyIGNvbnN1bWVycyBvbiB0aGVpciBkZXZpY2UuPC9wPgogICAgICAqIDxwPgogICAgICAqIElucHV0OiBUaGUgSW50ZW50J3MgZGF0YSBVUkkgbXVzdCBzcGVjaWZ5IHRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlIG5hbWUKICAgICAgKiB0byBiZSBzaG93biwgd2l0aCB0aGUgInBhY2thZ2UiIHNjaGVtZS4gIFRoYXQgaXMgInBhY2thZ2U6Y29tLm15LmFwcCIuCkBAIC0xMDkyLDYgKzEwOTMsMjIgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fSE9NRV9TRVRUSU5HUwogICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXR0aW5ncy5IT01FX1NFVFRJTkdTIjsKIAorCisKKyAgICAvKioKKyAgICAgKiBBY3Rpdml0eSBBY3Rpb246IFNob3cgRGVmYXVsdCBhcHBzIHNldHRpbmdzLgorICAgICAqIDxwPgorICAgICAqIEluIHNvbWUgY2FzZXMsIGEgbWF0Y2hpbmcgQWN0aXZpdHkgbWF5IG5vdCBleGlzdCwgc28gZW5zdXJlIHlvdQorICAgICAqIHNhZmVndWFyZCBhZ2FpbnN0IHRoaXMuCisgICAgICogPHA+CisgICAgICogSW5wdXQ6IE5vdGhpbmcuCisgICAgICogPHA+CisgICAgICogT3V0cHV0OiBOb3RoaW5nLgorICAgICAqLworICAgIEBTZGtDb25zdGFudChTZGtDb25zdGFudFR5cGUuQUNUSVZJVFlfSU5URU5UX0FDVElPTikKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fTUFOQUdFX0RFRkFVTFRfQVBQU19TRVRUSU5HUworICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXR0aW5ncy5NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTIjsKKwogICAgIC8qKgogICAgICAqIEFjdGl2aXR5IEFjdGlvbjogU2hvdyBub3RpZmljYXRpb24gc2V0dGluZ3MuCiAgICAgICoKQEAgLTExMjIsNiArMTEzOSwxOSBAQAogICAgIC8qKiBAaGlkZSAqLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9BUFBfVUlEID0gImFwcF91aWQiOwogICAgIC8qKiBAaGlkZSAqLyBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9BUFBfUEFDS0FHRSA9ICJhcHBfcGFja2FnZSI7CiAKKyAgICAvKioKKyAgICAgKiBBY3Rpdml0eSBBY3Rpb246IFNob3cgYSBkaWFsb2cgd2l0aCBkaXNhYmxlZCBieSBwb2xpY3kgbWVzc2FnZS4KKyAgICAgKiA8cD4gSWYgYW4gdXNlciBhY3Rpb24gaXMgZGlzYWJsZWQgYnkgcG9saWN5LCB0aGlzIGRpYWxvZyBjYW4gYmUgdHJpZ2dlcmVkIHRvIGxldAorICAgICAqIHRoZSB1c2VyIGtub3cgYWJvdXQgdGhpcy4KKyAgICAgKiA8cD4KKyAgICAgKiBJbnB1dDogTm90aGluZy4KKyAgICAgKiA8cD4KKyAgICAgKiBPdXRwdXQ6IE5vdGhpbmcuCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5BQ1RJVklUWV9JTlRFTlRfQUNUSU9OKQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9TSE9XX0FETUlOX1NVUFBPUlRfREVUQUlMUworICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXR0aW5ncy5TSE9XX0FETUlOX1NVUFBPUlRfREVUQUlMUyI7CisKICAgICAvLyBFbmQgb2YgSW50ZW50IGFjdGlvbnMgZm9yIFNldHRpbmdzCiAKICAgICAvKioKQEAgLTI1NzYsNiArMjYwNiwxNSBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBWYWxpZGF0b3IgTUlDUk9QSE9ORV9NVVRFX1ZBTElEQVRPUiA9IHNCb29sZWFuVmFsaWRhdG9yOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBNYXN0ZXIgbW9ubyAoaW50IDEgPSBtb25vLCAwID0gbm9ybWFsKS4KKyAgICAgICAgICoKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1BU1RFUl9NT05PID0gIm1hc3Rlcl9tb25vIjsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBWYWxpZGF0b3IgTUFTVEVSX01PTk9fVkFMSURBVE9SID0gc0Jvb2xlYW5WYWxpZGF0b3I7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFdoZXRoZXIgdGhlIG5vdGlmaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgcmluZyB2b2x1bWUgKHZhbHVlIG9mIDEpIG9yCiAgICAgICAgICAqIGEgc2VwYXJhdGUgbm90aWZpY2F0aW9uIHZvbHVtZSAodmFsdWUgb2YgMCkuIEluIG1vc3QgY2FzZXMsIHVzZXJzCiAgICAgICAgICAqIHdpbGwgaGF2ZSB0aGlzIGVuYWJsZWQgc28gdGhlIG5vdGlmaWNhdGlvbiBhbmQgcmluZ2VyIHZvbHVtZXMgd2lsbCBiZQpAQCAtMzI3MCw3ICszMzA5LDggQEAKICAgICAgICAgICAgIFZJQlJBVEVfV0hFTl9SSU5HSU5HLAogICAgICAgICAgICAgUklOR1RPTkUsCiAgICAgICAgICAgICBMT0NLX1RPX0FQUF9FTkFCTEVELAotICAgICAgICAgICAgTk9USUZJQ0FUSU9OX1NPVU5ECisgICAgICAgICAgICBOT1RJRklDQVRJT05fU09VTkQsCisgICAgICAgICAgICBBQ0NFTEVST01FVEVSX1JPVEFUSU9OCiAgICAgICAgIH07CiAKICAgICAgICAgLyoqCkBAIC0zMzIzLDYgKzMzNjMsNyBAQAogICAgICAgICAgICAgUFVCTElDX1NFVFRJTkdTLmFkZChTT1VORF9FRkZFQ1RTX0VOQUJMRUQpOwogICAgICAgICAgICAgUFVCTElDX1NFVFRJTkdTLmFkZChIQVBUSUNfRkVFREJBQ0tfRU5BQkxFRCk7CiAgICAgICAgICAgICBQVUJMSUNfU0VUVElOR1MuYWRkKFNIT1dfV0VCX1NVR0dFU1RJT05TKTsKKyAgICAgICAgICAgIFBVQkxJQ19TRVRUSU5HUy5hZGQoVklCUkFURV9XSEVOX1JJTkdJTkcpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC0zMzQwLDExICszMzgxLDExIEBACiAgICAgICAgICAgICBQUklWQVRFX1NFVFRJTkdTLmFkZChWT0xVTUVfTUFTVEVSKTsKICAgICAgICAgICAgIFBSSVZBVEVfU0VUVElOR1MuYWRkKFZPTFVNRV9NQVNURVJfTVVURSk7CiAgICAgICAgICAgICBQUklWQVRFX1NFVFRJTkdTLmFkZChNSUNST1BIT05FX01VVEUpOworICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoTUFTVEVSX01PTk8pOwogICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoTk9USUZJQ0FUSU9OU19VU0VfUklOR19WT0xVTUUpOwogICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoVklCUkFURV9JTl9TSUxFTlQpOwogICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoTUVESUFfQlVUVE9OX1JFQ0VJVkVSKTsKICAgICAgICAgICAgIFBSSVZBVEVfU0VUVElOR1MuYWRkKEhJREVfUk9UQVRJT05fTE9DS19UT0dHTEVfRk9SX0FDQ0VTU0lCSUxJVFkpOwotICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoVklCUkFURV9XSEVOX1JJTkdJTkcpOwogICAgICAgICAgICAgUFJJVkFURV9TRVRUSU5HUy5hZGQoRFRNRl9UT05FX1RZUEVfV0hFTl9ESUFMSU5HKTsKICAgICAgICAgICAgIFBSSVZBVEVfU0VUVElOR1MuYWRkKEhFQVJJTkdfQUlEKTsKICAgICAgICAgICAgIFBSSVZBVEVfU0VUVElOR1MuYWRkKFRUWV9NT0RFKTsKQEAgLTM0MTksNiArMzQ2MCw3IEBACiAgICAgICAgICAgICBWQUxJREFUT1JTLnB1dChWSUJSQVRFX0lOUFVUX0RFVklDRVMsIFZJQlJBVEVfSU5QVVRfREVWSUNFU19WQUxJREFUT1IpOwogICAgICAgICAgICAgVkFMSURBVE9SUy5wdXQoVk9MVU1FX01BU1RFUl9NVVRFLCBWT0xVTUVfTUFTVEVSX01VVEVfVkFMSURBVE9SKTsKICAgICAgICAgICAgIFZBTElEQVRPUlMucHV0KE1JQ1JPUEhPTkVfTVVURSwgTUlDUk9QSE9ORV9NVVRFX1ZBTElEQVRPUik7CisgICAgICAgICAgICBWQUxJREFUT1JTLnB1dChNQVNURVJfTU9OTywgTUFTVEVSX01PTk9fVkFMSURBVE9SKTsKICAgICAgICAgICAgIFZBTElEQVRPUlMucHV0KE5PVElGSUNBVElPTlNfVVNFX1JJTkdfVk9MVU1FLCBOT1RJRklDQVRJT05TX1VTRV9SSU5HX1ZPTFVNRV9WQUxJREFUT1IpOwogICAgICAgICAgICAgVkFMSURBVE9SUy5wdXQoVklCUkFURV9JTl9TSUxFTlQsIFZJQlJBVEVfSU5fU0lMRU5UX1ZBTElEQVRPUik7CiAgICAgICAgICAgICBWQUxJREFUT1JTLnB1dChNRURJQV9CVVRUT05fUkVDRUlWRVIsIE1FRElBX0JVVFRPTl9SRUNFSVZFUl9WQUxJREFUT1IpOwpAQCAtNDMzMyw2ICs0Mzc1LDcgQEAKICAgICAgICAgICogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCB2b2ljZSBpbnRlcmFjdGlvbiBzZXJ2aWNlIGZsYXR0ZW5lZCBDb21wb25lbnROYW1lLgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KKyAgICAgICAgQFRlc3RBcGkKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVk9JQ0VfSU5URVJBQ1RJT05fU0VSVklDRSA9ICJ2b2ljZV9pbnRlcmFjdGlvbl9zZXJ2aWNlIjsKIAogICAgICAgICAvKioKQEAgLTQ5NTYsMTkgKzQ5OTksMjIgQEAKIAogICAgICAgICAvKioKICAgICAgICAgICogTGlzdCBvZiB0aGUgZW5hYmxlZCBwcmludCBzZXJ2aWNlcy4KKyAgICAgICAgICoKKyAgICAgICAgICogTiBhbmQgYmV5b25kIHVzZXMge0BsaW5rICNESVNBQkxFRF9QUklOVF9TRVJWSUNFU30uIEJ1dCB0aGlzIG1pZ2h0IGJlIHVzZWQgaW4gYW4gdXBncmFkZQorICAgICAgICAgKiBmcm9tIHByZS1OLgorICAgICAgICAgKgogICAgICAgICAgKiBAaGlkZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5BQkxFRF9QUklOVF9TRVJWSUNFUyA9CiAgICAgICAgICAgICAiZW5hYmxlZF9wcmludF9zZXJ2aWNlcyI7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIExpc3Qgb2YgdGhlIHN5c3RlbSBwcmludCBzZXJ2aWNlcyB3ZSBlbmFibGVkIG9uIGZpcnN0IGJvb3QuIE9uCi0gICAgICAgICAqIGZpcnN0IGJvb3Qgd2UgZW5hYmxlIGFsbCBzeXN0ZW0sIGkuZS4gYnVuZGxlZCBwcmludCBzZXJ2aWNlcywKLSAgICAgICAgICogb25jZSwgc28gdGhleSB3b3JrIG91dC1vZi10aGUtYm94LgorICAgICAgICAgKiBMaXN0IG9mIHRoZSBkaXNhYmxlZCBwcmludCBzZXJ2aWNlcy4KKyAgICAgICAgICoKICAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQUJMRURfT05fRklSU1RfQk9PVF9TWVNURU1fUFJJTlRfU0VSVklDRVMgPQotICAgICAgICAgICAgImVuYWJsZWRfb25fZmlyc3RfYm9vdF9zeXN0ZW1fcHJpbnRfc2VydmljZXMiOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBESVNBQkxFRF9QUklOVF9TRVJWSUNFUyA9CisgICAgICAgICAgICAiZGlzYWJsZWRfcHJpbnRfc2VydmljZXMiOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBTZXR0aW5nIHRvIGFsd2F5cyB1c2UgdGhlIGRlZmF1bHQgdGV4dC10by1zcGVlY2ggc2V0dGluZ3MgcmVnYXJkbGVzcwpAQCAtNTYxNyw2ICs1NjYzLDE1IEBACiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFTU0lTVF9TQ1JFRU5TSE9UX0VOQUJMRUQgPSAiYXNzaXN0X3NjcmVlbnNob3RfZW5hYmxlZCI7CiAKICAgICAgICAgLyoqCisgICAgICAgICAqIE5hbWVzIG9mIHRoZSBzZXJ2aWNlIGNvbXBvbmVudCB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaGFzIGV4cGxpY2l0bHkgYWxsb3dlZCB0bworICAgICAgICAgKiBzZWUgYW5kIGNoYW5nZSB0aGUgaW1wb3J0YW5jZSBvZiBhbGwgb2YgdGhlIHVzZXIncyBub3RpZmljYXRpb25zLgorICAgICAgICAgKgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5BQkxFRF9OT1RJRklDQVRJT05fQVNTSVNUQU5UCisgICAgICAgICAgICAgICAgPSAiZW5hYmxlZF9ub3RpZmljYXRpb25fYXNzaXN0YW50IjsKKworICAgICAgICAvKioKICAgICAgICAgICogTmFtZXMgb2YgdGhlIHNlcnZpY2UgY29tcG9uZW50cyB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaGFzIGV4cGxpY2l0bHkgYWxsb3dlZCB0bwogICAgICAgICAgKiBzZWUgYWxsIG9mIHRoZSB1c2VyJ3Mgbm90aWZpY2F0aW9ucywgc2VwYXJhdGVkIGJ5ICc6Jy4KICAgICAgICAgICoKQEAgLTU3NDksNiArNTgwNCwxMyBAQAogICAgICAgICAgICAgICAgICJjYW1lcmFfZG91YmxlX3RhcF9wb3dlcl9nZXN0dXJlX2Rpc2FibGVkIjsKIAogICAgICAgICAvKioKKyAgICAgICAgICogTmFtZSBvZiB0aGUgcGFja2FnZSB1c2VkIGFzIFdlYlZpZXcgcHJvdmlkZXIgKGlmIHVuc2V0IHRoZSBwcm92aWRlciBpcyBpbnN0ZWFkIGRldGVybWluZWQKKyAgICAgICAgICogYnkgdGhlIHN5c3RlbSkuCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBXRUJWSUVXX1BST1ZJREVSID0gIndlYnZpZXdfcHJvdmlkZXIiOworCisgICAgICAgIC8qKgogICAgICAgICAgKiBUaGlzIGFyZSB0aGUgc2V0dGluZ3MgdG8gYmUgYmFja2VkIHVwLgogICAgICAgICAgKgogICAgICAgICAgKiBOT1RFOiBTZXR0aW5ncyBhcmUgYmFja2VkIHVwIGFuZCByZXN0b3JlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIKQEAgLTU3NjMsMTAgKzU4MjUsMTUgQEAKICAgICAgICAgICAgIFBBUkVOVEFMX0NPTlRST0xfRU5BQkxFRCwKICAgICAgICAgICAgIFBBUkVOVEFMX0NPTlRST0xfUkVESVJFQ1RfVVJMLAogICAgICAgICAgICAgVVNCX01BU1NfU1RPUkFHRV9FTkFCTEVELCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vdmVkIHRvIGdsb2JhbAorICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVELAorICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVIsCisgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYLAorICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfRU5BQkxFRCwKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9NQUdOSUZJQ0FUSU9OX0VOQUJMRUQsCiAgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX0RJU1BMQVlfTUFHTklGSUNBVElPTl9TQ0FMRSwKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfRElTUExBWV9NQUdOSUZJQ0FUSU9OX0FVVE9fVVBEQVRFLAogICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9TQ1JJUFRfSU5KRUNUSU9OLAorICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9XRUJfQ09OVEVOVF9LRVlfQklORElOR1MsCiAgICAgICAgICAgICBCQUNLVVBfQVVUT19SRVNUT1JFLAogICAgICAgICAgICAgRU5BQkxFRF9BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTLAogICAgICAgICAgICAgRU5BQkxFRF9OT1RJRklDQVRJT05fTElTVEVORVJTLApAQCAtNTc3Niw2ICs1ODQzLDcgQEAKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfRU5BQkxFRCwKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfU1BFQUtfUEFTU1dPUkQsCiAgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX0hJR0hfVEVYVF9DT05UUkFTVF9FTkFCTEVELAorICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX1BSRVNFVCwKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfQ0FQVElPTklOR19FTkFCTEVELAogICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX0xPQ0FMRSwKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfQ0FQVElPTklOR19CQUNLR1JPVU5EX0NPTE9SLApAQCAtNTc4NCw2ICs1ODUyLDcgQEAKICAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfQ0FQVElPTklOR19FREdFX0NPTE9SLAogICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX1RZUEVGQUNFLAogICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9DQVBUSU9OSU5HX0ZPTlRfU0NBTEUsCisgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX0NBUFRJT05JTkdfV0lORE9XX0NPTE9SLAogICAgICAgICAgICAgVFRTX1VTRV9ERUZBVUxUUywKICAgICAgICAgICAgIFRUU19ERUZBVUxUX1JBVEUsCiAgICAgICAgICAgICBUVFNfREVGQVVMVF9QSVRDSCwKQEAgLTU3OTIsNiArNTg2MSw3IEBACiAgICAgICAgICAgICBUVFNfREVGQVVMVF9DT1VOVFJZLAogICAgICAgICAgICAgVFRTX0VOQUJMRURfUExVR0lOUywKICAgICAgICAgICAgIFRUU19ERUZBVUxUX0xPQ0FMRSwKKyAgICAgICAgICAgIFNIT1dfSU1FX1dJVEhfSEFSRF9LRVlCT0FSRCwKICAgICAgICAgICAgIFdJRklfTkVUV09SS1NfQVZBSUxBQkxFX05PVElGSUNBVElPTl9PTiwgICAgICAgICAgICAvLyBtb3ZlZCB0byBnbG9iYWwKICAgICAgICAgICAgIFdJRklfTkVUV09SS1NfQVZBSUxBQkxFX1JFUEVBVF9ERUxBWSwgICAgICAgICAgICAgICAvLyBtb3ZlZCB0byBnbG9iYWwKICAgICAgICAgICAgIFdJRklfTlVNX09QRU5fTkVUV09SS1NfS0VQVCwgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlZCB0byBnbG9iYWwKQEAgLTU4MDUsOSArNTg3NSwxNiBAQAogICAgICAgICAgICAgVUlfTklHSFRfTU9ERSwKICAgICAgICAgICAgIFNMRUVQX1RJTUVPVVQsCiAgICAgICAgICAgICBET1VCTEVfVEFQX1RPX1dBS0UsCisgICAgICAgICAgICBXQUtFX0dFU1RVUkVfRU5BQkxFRCwKKyAgICAgICAgICAgIExPTkdfUFJFU1NfVElNRU9VVCwKICAgICAgICAgICAgIENBTUVSQV9HRVNUVVJFX0RJU0FCTEVELAogICAgICAgICAgICAgQUNDRVNTSUJJTElUWV9BVVRPQ0xJQ0tfRU5BQkxFRCwKLSAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfQVVUT0NMSUNLX0RFTEFZCisgICAgICAgICAgICBBQ0NFU1NJQklMSVRZX0FVVE9DTElDS19ERUxBWSwKKyAgICAgICAgICAgIEFDQ0VTU0lCSUxJVFlfTEFSR0VfUE9JTlRFUl9JQ09OLAorICAgICAgICAgICAgUFJFRkVSUkVEX1RUWV9NT0RFLAorICAgICAgICAgICAgRU5IQU5DRURfVk9JQ0VfUFJJVkFDWV9FTkFCTEVELAorICAgICAgICAgICAgVFRZX01PREVfRU5BQkxFRCwKKyAgICAgICAgICAgIElOQ0FMTF9QT1dFUl9CVVRUT05fQkVIQVZJT1IKICAgICAgICAgfTsKIAogICAgICAgICAvKioKQEAgLTYxMDEsNiArNjE3OCwxMyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBSVJQTEFORV9NT0RFX1RPR0dMRUFCTEVfUkFESU9TID0gImFpcnBsYW5lX21vZGVfdG9nZ2xlYWJsZV9yYWRpb3MiOwogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBBIExvbmcgcmVwcmVzZW50aW5nIGEgYml0bWFwIG9mIHByb2ZpbGVzIHRoYXQgc2hvdWxkIGJlIGRpc2FibGVkIHdoZW4gYmx1ZXRvb3RoIHN0YXJ0cy4KKyAgICAgICAgICogU2VlIHtAbGluayBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhQcm9maWxlfS4KKyAgICAgICAgICoge0BoaWRlfQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkxVRVRPT1RIX0RJU0FCTEVEX1BST0ZJTEVTID0gImJsdWV0b290aF9kaXNhYmxlZF9wcm9maWxlcyI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIFRoZSBwb2xpY3kgZm9yIGRlY2lkaW5nIHdoZW4gV2ktRmkgc2hvdWxkIGdvIHRvIHNsZWVwICh3aGljaCB3aWxsIGluCiAgICAgICAgICAqIHR1cm4gc3dpdGNoIHRvIHVzaW5nIHRoZSBtb2JpbGUgZGF0YSBhcyBhbiBJbnRlcm5ldCBjb25uZWN0aW9uKS4KICAgICAgICAgICogPHA+CkBAIC02MzM1LDYgKzY0MTksMTMgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMKICAgICAgICAgICAgICAgICA9ICJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyI7CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIGV4cGVyaW1lbnRhbCBmcmVlZm9ybSBzdXBwb3J0IGZvciB3aW5kb3dzLgorICAgICAgICAgKiBAaGlkZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVWRUxPUE1FTlRfRU5BQkxFX0ZSRUVGT1JNX1dJTkRPV1NfU1VQUE9SVAorICAgICAgICAgICAgICAgID0gImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IjsKKwogICAgICAgIC8qKgogICAgICAgICAqIFdoZXRoZXIgdXNlciBoYXMgZW5hYmxlZCBkZXZlbG9wbWVudCBzZXR0aW5ncy4KICAgICAgICAgKi8KQEAgLTgxOTcsNyArODI4OCw2IEBACiAgICAgICAgIC8qKgogICAgICAgICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBjb250YWN0cyBtZXRhZGF0YSBzeW5jaW5nIG9yIG5vdAogICAgICAgICAgKiBUaGUgdmFsdWUgMSAtIGVuYWJsZSwgMCAtIGRpc2FibGUKLSAgICAgICAgICogQGhpZGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRBQ1RfTUVUQURBVEFfU1lOQyA9ICJjb250YWN0X21ldGFkYXRhX3N5bmMiOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Wb2ljZW1haWxDb250cmFjdC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvcHJvdmlkZXIvVm9pY2VtYWlsQ29udHJhY3QuamF2YQppbmRleCA3NmVhZWE5Li4yNDY4M2NiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9wcm92aWRlci9Wb2ljZW1haWxDb250cmFjdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3Byb3ZpZGVyL1ZvaWNlbWFpbENvbnRyYWN0LmphdmEKQEAgLTI0NSw2ICsyNDUsMTMgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMRVRFRCA9ICJkZWxldGVkIjsKIAogICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGRhdGUgdGhlIHJvdyBpcyBsYXN0IGluc2VydGVkLCB1cGRhdGVkLCBvciBtYXJrZWQgYXMgZGVsZXRlZCwgaW4gbWlsbGlzZWNvbmRzCisgICAgICAgICAqIHNpbmNlIHRoZSBlcG9jaC4gUmVhZCBvbmx5LgorICAgICAgICAgKiA8UD5UeXBlOiBJTlRFR0VSIChsb25nKTwvUD4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExBU1RfTU9ESUZJRUQgPSAibGFzdF9tb2RpZmllZCI7CisKKyAgICAgICAgLyoqCiAgICAgICAgICAqIEEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJ1aWxkIHZvaWNlbWFpbCBVUkkgc3BlY2lmaWMgdG8gYSBzb3VyY2UgcGFja2FnZSBieSBhcHBlbmRpbmcKICAgICAgICAgICoge0BsaW5rIFZvaWNlbWFpbENvbnRyYWN0I1BBUkFNX0tFWV9TT1VSQ0VfUEFDS0FHRX0gcGFyYW0gdG8gdGhlIGJhc2UgVVJJLgogICAgICAgICAgKi8KQEAgLTQ0OSw2ICs0NTYsMjYgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZJQ0FUSU9OX0NIQU5ORUxfU1RBVEVfTUVTU0FHRV9XQUlUSU5HID0gMjsKIAogICAgICAgICAvKioKKyAgICAgICAgICogQW1vdW50IG9mIHJlc291cmNlIHRoYXQgaXMgdXNlZCBieSBleGlzdGluZyB2b2ljZW1haWwgaW4gdGhlIHZpc3VhbCB2b2ljZW1haWwgaW5ib3gsCisgICAgICAgICAqIG9yIHtAbGluayAjUVVPVEFfVU5BVkFJTEFCTEV9LiBVbml0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVI8L1A+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVU9UQV9PQ0NVUElFRCA9ICJxdW90YV9vY2N1cGllZCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFRvdGFsIHJlc291cmNlIGluIHRoZSB2aXN1YWwgdm9pY2VtYWlsIGluYm94IHRoYXQgY2FuIGJlIHVzZWQsIG9yCisgICAgICAgICAqIHtAbGluayAjUVVPVEFfVU5BVkFJTEFCTEV9LiBVbml0IGlzIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAqIDxQPlR5cGU6IElOVEVHRVI8L1A+CisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBRVU9UQV9UT1RBTCA9ICJxdW90YV90b3RhbCI7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFZhbHVlIGZvciB7QGxpbmsgI1FVT1RBX09DQ1VQSUVEfSBhbmQge0BsaW5rICNRVU9UQV9UT1RBTH0gdG8gaW5kaWNhdGUgdGhhdCBubworICAgICAgICAgKiBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRVU9UQV9VTkFWQUlMQUJMRSA9IC0xOworCisgICAgICAgIC8qKgogICAgICAgICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCB0byBidWlsZCBzdGF0dXMgVVJJIHNwZWNpZmljIHRvIGEgc291cmNlIHBhY2thZ2UgYnkgYXBwZW5kaW5nCiAgICAgICAgICAqIHtAbGluayBWb2ljZW1haWxDb250cmFjdCNQQVJBTV9LRVlfU09VUkNFX1BBQ0tBR0V9IHBhcmFtIHRvIHRoZSBiYXNlIFVSSS4KICAgICAgICAgICovCkBAIC00ODgsNiArNTE1LDM5IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKKyAgICAgICAgICogQSBoZWxwZXIgbWV0aG9kIHRvIHNldCB0aGUgcXVvdGEgb2YgYSB2b2ljZW1haWwgc291cmNlLiBVbml0IGlzIHVuc3BlY2lmaWVkLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBmcm9tIHRoZSBwYWNrYWdlIGNhbGxpbmcgdGhlIG1ldGhvZC4gVGhpcyB3aWxsIGJlIHRoZSBzb3VyY2UuCisgICAgICAgICAqIEBwYXJhbSBhY2NvdW50SGFuZGxlIFRoZSBoYW5kbGUgZm9yIHRoZSBhY2NvdW50IHRoZSBzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoLgorICAgICAgICAgKiBAcGFyYW0gb2NjdXBpZWQgU2VlIHtAbGluayBTdGF0dXMjUVVPVEFfT0NDVVBJRUR9CisgICAgICAgICAqIEBwYXJhbSB0b3RhbCBTZWUge0BsaW5rIFN0YXR1cyNRVU9UQV9UT1RBTH0KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRRdW90YShDb250ZXh0IGNvbnRleHQsIFBob25lQWNjb3VudEhhbmRsZSBhY2NvdW50SGFuZGxlLCBpbnQgb2NjdXBpZWQsCisgICAgICAgICAgICAgICAgaW50IHRvdGFsKSB7CisgICAgICAgICAgICBpZiAob2NjdXBpZWQgPT0gUVVPVEFfVU5BVkFJTEFCTEUgJiYgdG90YWwgPT0gUVVPVEFfVU5BVkFJTEFCTEUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDb250ZW50VmFsdWVzIHZhbHVlcyA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgICAgICB2YWx1ZXMucHV0KFN0YXR1cy5QSE9ORV9BQ0NPVU5UX0NPTVBPTkVOVF9OQU1FLAorICAgICAgICAgICAgICAgICAgICBhY2NvdW50SGFuZGxlLmdldENvbXBvbmVudE5hbWUoKS5mbGF0dGVuVG9TdHJpbmcoKSk7CisgICAgICAgICAgICB2YWx1ZXMucHV0KFN0YXR1cy5QSE9ORV9BQ0NPVU5UX0lELCBhY2NvdW50SGFuZGxlLmdldElkKCkpOworICAgICAgICAgICAgaWYgKG9jY3VwaWVkICE9IFFVT1RBX1VOQVZBSUxBQkxFKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChTdGF0dXMuUVVPVEFfT0NDVVBJRUQsb2NjdXBpZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRvdGFsICE9IFFVT1RBX1VOQVZBSUxBQkxFKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChTdGF0dXMuUVVPVEFfVE9UQUwsdG90YWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDb250ZW50UmVzb2x2ZXIgY29udGVudFJlc29sdmVyID0gY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIFVyaSBzdGF0dXNVcmkgPSBidWlsZFNvdXJjZVVyaShjb250ZXh0LmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICAgICAgaWYgKGlzU3RhdHVzUHJlc2VudChjb250ZW50UmVzb2x2ZXIsIHN0YXR1c1VyaSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZW50UmVzb2x2ZXIudXBkYXRlKHN0YXR1c1VyaSwgdmFsdWVzLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29udGVudFJlc29sdmVyLmluc2VydChzdGF0dXNVcmksIHZhbHVlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKioKICAgICAgICAgICogRGV0ZXJtaW5lcyBpZiBhIHZvaWNlbWFpbCBzb3VyY2UgZXhpc3RzIGluIHRoZSBzdGF0dXMgdGFibGUuCiAgICAgICAgICAqCiAgICAgICAgICAqIEBwYXJhbSBjb250ZW50UmVzb2x2ZXIgQSBjb250ZW50IHJlc29sdmVyIGNvbnN0cnVjdGVkIGZyb20gdGhlIGFwcHJvcHJpYXRlIGNvbnRleHQuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9GcmFtZXdvcmtOZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0ZyYW1ld29ya05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhCmluZGV4IGUzZGFjNWUuLjgzZjE3M2VjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9GcmFtZXdvcmtOZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9GcmFtZXdvcmtOZXR3b3JrU2VjdXJpdHlQb2xpY3kuamF2YQpAQCAtMzIsNCArMzIsOSBAQAogICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpIHsKICAgICAgICAgcmV0dXJuIG1DbGVhcnRleHRUcmFmZmljUGVybWl0dGVkOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChTdHJpbmcgaG9zdG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEKaW5kZXggNzk5MWQzNy4uMzdlYzcyNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEKQEAgLTQzLDcgKzQzLDcgQEAKIAogICAgIC8qKgogICAgICAqIFJldHVybnMgd2hldGhlciBjbGVhcnRleHQgbmV0d29yayB0cmFmZmljIChlLmcuIEhUVFAsIEZUUCwgV2ViU29ja2V0cywgWE1QUCwgSU1BUCwgU01UUCAtLQotICAgICAqIHdpdGhvdXQgVExTIG9yIFNUQVJUVExTKSBpcyBwZXJtaXR0ZWQgZm9yIHRoaXMgcHJvY2Vzcy4KKyAgICAgKiB3aXRob3V0IFRMUyBvciBTVEFSVFRMUykgaXMgcGVybWl0dGVkIGZvciBhbGwgbmV0d29yayBjb21tdW5pY2F0aW9uIGZyb20gdGhpcyBwcm9jZXNzLgogICAgICAqCiAgICAgICogPHA+V2hlbiBjbGVhcnRleHQgbmV0d29yayB0cmFmZmljIGlzIG5vdCBwZXJtaXR0ZWQsIHRoZSBwbGF0Zm9ybSdzIGNvbXBvbmVudHMgKGUuZy4gSFRUUCBhbmQKICAgICAgKiBGVFAgc3RhY2tzLCB7QGxpbmsgYW5kcm9pZC5hcHAuRG93bmxvYWRNYW5hZ2VyfSwge0BsaW5rIGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXJ9KSB3aWxsCkBAIC02NCw2ICs2NCwxNyBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciBjbGVhcnRleHQgbmV0d29yayB0cmFmZmljIChlLmcuIEhUVFAsIEZUUCwgWE1QUCwgSU1BUCwgU01UUCAtLSB3aXRob3V0CisgICAgICogVExTIG9yIFNUQVJUVExTKSBpcyBwZXJtaXR0ZWQgZm9yIGNvbW11bmljYXRpbmcgd2l0aCB7QGNvZGUgaG9zdG5hbWV9IGZvciB0aGlzIHByb2Nlc3MuCisgICAgICoKKyAgICAgKiBAc2VlICNpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChTdHJpbmcgaG9zdG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGxpYmNvcmUubmV0Lk5ldHdvcmtTZWN1cml0eVBvbGljeS5nZXRJbnN0YW5jZSgpCisgICAgICAgICAgICAgICAgLmlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChob3N0bmFtZSk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogU2V0cyB3aGV0aGVyIGNsZWFydGV4dCBuZXR3b3JrIHRyYWZmaWMgaXMgcGVybWl0dGVkIGZvciB0aGlzIHByb2Nlc3MuCiAgICAgICoKICAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSBlYXJseSBvbiBpbiB0aGUgYXBwbGljYXRpb24ncyBpbml0aWFsaXphdGlvbiB0byBzZXQKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQXBwbGljYXRpb25Db25maWcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQXBwbGljYXRpb25Db25maWcuamF2YQppbmRleCBiNjI3NjQxLi40ZGUzNmNkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0FwcGxpY2F0aW9uQ29uZmlnLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9BcHBsaWNhdGlvbkNvbmZpZy5qYXZhCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICovCiAgICAgcHVibGljIE5ldHdvcmtTZWN1cml0eUNvbmZpZyBnZXRDb25maWdGb3JIb3N0bmFtZShTdHJpbmcgaG9zdG5hbWUpIHsKICAgICAgICAgZW5zdXJlSW5pdGlhbGl6ZWQoKTsKLSAgICAgICAgaWYgKGhvc3RuYW1lLmlzRW1wdHkoKSB8fCBtQ29uZmlncyA9PSBudWxsKSB7CisgICAgICAgIGlmIChob3N0bmFtZSA9PSBudWxsIHx8IGhvc3RuYW1lLmlzRW1wdHkoKSB8fCBtQ29uZmlncyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbURlZmF1bHRDb25maWc7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGhvc3RuYW1lLmNoYXJBdCgwKSA9PSAgJy4nKSB7CkBAIC0xMjAsNiArMTIwLDMyIEBACiAgICAgICAgIHJldHVybiBtVHJ1c3RNYW5hZ2VyOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIGNsZWFydGV4dCB0cmFmZmljIGlzIHBlcm1pdHRlZCBmb3IgdGhpcyBhcHBsaWNhdGlvbiwgd2hpY2ggaXMgdGhlCisgICAgICogY2FzZSBvbmx5IGlmIGFsbCBjb25maWd1cmF0aW9ucyBwZXJtaXQgY2xlYXJ0ZXh0IHRyYWZmaWMuIEZvciBmaW5lci1ncmFpbmVkIHBvbGljeSB1c2UKKyAgICAgKiB7QGxpbmsgI2lzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChTdHJpbmcpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKSB7CisgICAgICAgIGVuc3VyZUluaXRpYWxpemVkKCk7CisgICAgICAgIGlmIChtQ29uZmlncyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKFBhaXI8RG9tYWluLCBOZXR3b3JrU2VjdXJpdHlDb25maWc+IGVudHJ5IDogbUNvbmZpZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LnNlY29uZC5pc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1EZWZhdWx0Q29uZmlnLmlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMge0Bjb2RlIHRydWV9IGlmIGNsZWFydGV4dCB0cmFmZmljIGlzIHBlcm1pdHRlZCBmb3IgdGhpcyBhcHBsaWNhdGlvbiB3aGVuIGNvbm5lY3RpbmcKKyAgICAgKiB0byB7QGNvZGUgaG9zdG5hbWV9LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZChTdHJpbmcgaG9zdG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGdldENvbmZpZ0Zvckhvc3RuYW1lKGhvc3RuYW1lKS5pc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoKTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgZW5zdXJlSW5pdGlhbGl6ZWQoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZChtTG9jaykgewogICAgICAgICAgICAgaWYgKG1Jbml0aWFsaXplZCkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9DZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9DZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhCmluZGV4IDJiNzgyOWUuLjdlMzYwMWUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQ2VydGlmaWNhdGVTb3VyY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0NlcnRpZmljYXRlU291cmNlLmphdmEKQEAgLTIzLDQgKzIzLDUgQEAKIHB1YmxpYyBpbnRlcmZhY2UgQ2VydGlmaWNhdGVTb3VyY2UgewogICAgIFNldDxYNTA5Q2VydGlmaWNhdGU+IGdldENlcnRpZmljYXRlcygpOwogICAgIFg1MDlDZXJ0aWZpY2F0ZSBmaW5kQnlTdWJqZWN0QW5kUHVibGljS2V5KFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KTsKKyAgICBYNTA5Q2VydGlmaWNhdGUgZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQ2VydGlmaWNhdGVzRW50cnlSZWYuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQ2VydGlmaWNhdGVzRW50cnlSZWYuamF2YQppbmRleCAxZDE1ZTE5Li5mZjcyOGVmIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0NlcnRpZmljYXRlc0VudHJ5UmVmLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9DZXJ0aWZpY2F0ZXNFbnRyeVJlZi5qYXZhCkBAIC01MSw0ICs1MSwxMyBAQAogCiAgICAgICAgIHJldHVybiBuZXcgVHJ1c3RBbmNob3IoZm91bmRDZXJ0LCBtT3ZlcnJpZGVzUGlucyk7CiAgICAgfQorCisgICAgcHVibGljIFRydXN0QW5jaG9yIGZpbmRCeUlzc3VlckFuZFNpZ25hdHVyZShYNTA5Q2VydGlmaWNhdGUgY2VydCkgeworICAgICAgICBYNTA5Q2VydGlmaWNhdGUgZm91bmRDZXJ0ID0gbVNvdXJjZS5maW5kQnlJc3N1ZXJBbmRTaWduYXR1cmUoY2VydCk7CisgICAgICAgIGlmIChmb3VuZENlcnQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3IFRydXN0QW5jaG9yKGZvdW5kQ2VydCwgbU92ZXJyaWRlc1BpbnMpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvQ29uZmlnTmV0d29ya1NlY3VyaXR5UG9saWN5LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0NvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZDE3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0NvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeS5qYXZhCkBAIC0wLDAgKzEsNDAgQEAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBhbmRyb2lkLnNlY3VyaXR5Lm5ldC5jb25maWc7CisKKy8qKgorICoge0BsaW5rIGxpYmNvcmUubmV0Lk5ldHdvcmtTZWN1cml0eVBvbGljeX0gYmFzZWQgb24gYW4ge0BsaW5rIEFwcGxpY2F0aW9uQ29uZmlnfS4KKyAqCisgKiBAaGlkZQorICovCitwdWJsaWMgY2xhc3MgQ29uZmlnTmV0d29ya1NlY3VyaXR5UG9saWN5IGV4dGVuZHMgbGliY29yZS5uZXQuTmV0d29ya1NlY3VyaXR5UG9saWN5IHsKKyAgICBwcml2YXRlIGZpbmFsIEFwcGxpY2F0aW9uQ29uZmlnIG1Db25maWc7CisKKyAgICBwdWJsaWMgQ29uZmlnTmV0d29ya1NlY3VyaXR5UG9saWN5KEFwcGxpY2F0aW9uQ29uZmlnIGNvbmZpZykgeworICAgICAgICBtQ29uZmlnID0gY29uZmlnOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1Db25maWcuaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNDbGVhcnRleHRUcmFmZmljUGVybWl0dGVkKFN0cmluZyBob3N0bmFtZSkgeworICAgICAgICByZXR1cm4gbUNvbmZpZy5pc0NsZWFydGV4dFRyYWZmaWNQZXJtaXR0ZWQoaG9zdG5hbWUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvRGlyZWN0b3J5Q2VydGlmaWNhdGVTb3VyY2UuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvRGlyZWN0b3J5Q2VydGlmaWNhdGVTb3VyY2UuamF2YQppbmRleCBhMjYxZTA2Li5iZjI5ZWZhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL0RpcmVjdG9yeUNlcnRpZmljYXRlU291cmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9EaXJlY3RvcnlDZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhCkBAIC05NSw2ICs5NSwyMSBAQAogICAgICAgICB9KTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgWDUwOUNlcnRpZmljYXRlIGZpbmRCeUlzc3VlckFuZFNpZ25hdHVyZShmaW5hbCBYNTA5Q2VydGlmaWNhdGUgY2VydCkgeworICAgICAgICByZXR1cm4gZmluZENlcnQoY2VydC5nZXRJc3N1ZXJYNTAwUHJpbmNpcGFsKCksIG5ldyBDZXJ0U2VsZWN0b3IoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG1hdGNoKFg1MDlDZXJ0aWZpY2F0ZSBjYSkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGNlcnQudmVyaWZ5KGNhLmdldFB1YmxpY0tleSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50ZXJmYWNlIENlcnRTZWxlY3RvciB7CiAgICAgICAgIGJvb2xlYW4gbWF0Y2goWDUwOUNlcnRpZmljYXRlIGNlcnQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvS2V5U3RvcmVDZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9LZXlTdG9yZUNlcnRpZmljYXRlU291cmNlLmphdmEKaW5kZXggN2EwMWE2NC4uYjYxMDVjZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9LZXlTdG9yZUNlcnRpZmljYXRlU291cmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9LZXlTdG9yZUNlcnRpZmljYXRlU291cmNlLmphdmEKQEAgLTgwLDQgKzgwLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFuY2hvci5nZXRUcnVzdGVkQ2VydCgpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBYNTA5Q2VydGlmaWNhdGUgZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KSB7CisgICAgICAgIGVuc3VyZUluaXRpYWxpemVkKCk7CisgICAgICAgIGphdmEuc2VjdXJpdHkuY2VydC5UcnVzdEFuY2hvciBhbmNob3IgPSBtSW5kZXguZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKGNlcnQpOworICAgICAgICBpZiAoYW5jaG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmNob3IuZ2V0VHJ1c3RlZENlcnQoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL01hbmlmZXN0Q29uZmlnU291cmNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL01hbmlmZXN0Q29uZmlnU291cmNlLmphdmEKaW5kZXggYmYxZmI4YS4uMGUxMzdjZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9NYW5pZmVzdENvbmZpZ1NvdXJjZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTWFuaWZlc3RDb25maWdTb3VyY2UuamF2YQpAQCAtNzksNyArNzksOSBAQAogICAgICAgICAgICAgICAgIGlmIChEQkcpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmQoTE9HX1RBRywgIk5vIE5ldHdvcmsgU2VjdXJpdHkgQ29uZmlnIHNwZWNpZmllZCwgdXNpbmcgcGxhdGZvcm0gZGVmYXVsdCIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBuZXcgRGVmYXVsdENvbmZpZ1NvdXJjZSgpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gdXNlc0NsZWFydGV4dFRyYWZmaWMgPQorICAgICAgICAgICAgICAgICAgICAgICAgKGluZm8uZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19VU0VTX0NMRUFSVEVYVF9UUkFGRklDKSAhPSAwOworICAgICAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBEZWZhdWx0Q29uZmlnU291cmNlKHVzZXNDbGVhcnRleHRUcmFmZmljKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1Db25maWdTb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgICAgICByZXR1cm4gbUNvbmZpZ1NvdXJjZTsKQEAgLTg3LDkgKzg5LDE4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRGVmYXVsdENvbmZpZ1NvdXJjZSBpbXBsZW1lbnRzIENvbmZpZ1NvdXJjZSB7CisKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBOZXR3b3JrU2VjdXJpdHlDb25maWcgbURlZmF1bHRDb25maWc7CisKKyAgICAgICAgcHVibGljIERlZmF1bHRDb25maWdTb3VyY2UoYm9vbGVhbiB1c2VzQ2xlYXJ0ZXh0VHJhZmZpYykgeworICAgICAgICAgICAgbURlZmF1bHRDb25maWcgPSBOZXR3b3JrU2VjdXJpdHlDb25maWcuZ2V0RGVmYXVsdEJ1aWxkZXIoKQorICAgICAgICAgICAgICAgICAgICAuc2V0Q2xlYXJ0ZXh0VHJhZmZpY1Blcm1pdHRlZCh1c2VzQ2xlYXJ0ZXh0VHJhZmZpYykKKyAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgICAgfQorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgTmV0d29ya1NlY3VyaXR5Q29uZmlnIGdldERlZmF1bHRDb25maWcoKSB7Ci0gICAgICAgICAgICByZXR1cm4gTmV0d29ya1NlY3VyaXR5Q29uZmlnLkRFRkFVTFQ7CisgICAgICAgICAgICByZXR1cm4gbURlZmF1bHRDb25maWc7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTmV0d29ya1NlY3VyaXR5Q29uZmlnLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eUNvbmZpZy5qYXZhCmluZGV4IDJhYjA3YjUuLjBhMmVkZmYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTmV0d29ya1NlY3VyaXR5Q29uZmlnLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9OZXR3b3JrU2VjdXJpdHlDb25maWcuamF2YQpAQCAtMTM0LDYgKzEzNCwxNyBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgVHJ1c3RBbmNob3IgZmluZFRydXN0QW5jaG9yQnlJc3N1ZXJBbmRTaWduYXR1cmUoWDUwOUNlcnRpZmljYXRlIGNlcnQpIHsKKyAgICAgICAgZm9yIChDZXJ0aWZpY2F0ZXNFbnRyeVJlZiByZWYgOiBtQ2VydGlmaWNhdGVzRW50cnlSZWZzKSB7CisgICAgICAgICAgICBUcnVzdEFuY2hvciBhbmNob3IgPSByZWYuZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKGNlcnQpOworICAgICAgICAgICAgaWYgKGFuY2hvciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFuY2hvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSB7QGxpbmsgQnVpbGRlcn0gZm9yIHRoZSBkZWZhdWx0IHtAY29kZSBOZXR3b3JrU2VjdXJpdHlDb25maWd9LgogICAgICAqCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Byb3ZpZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Byb3ZpZGVyLmphdmEKaW5kZXggNWViYzdhYy4uMGY2Njg3MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9OZXR3b3JrU2VjdXJpdHlDb25maWdQcm92aWRlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTmV0d29ya1NlY3VyaXR5Q29uZmlnUHJvdmlkZXIuamF2YQpAQCAtNDAsNSArNDAsNiBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBpbnN0YWxsIHByb3ZpZGVyIGFzIGhpZ2hlc3QgcHJpb3JpdHkgcHJvdmlkZXIuIgogICAgICAgICAgICAgICAgICAgICArICIgUHJvdmlkZXIgd2FzIGluc3RhbGxlZCBhdCBwb3NpdGlvbiAiICsgcG9zKTsKICAgICAgICAgfQorICAgICAgICBsaWJjb3JlLm5ldC5OZXR3b3JrU2VjdXJpdHlQb2xpY3kuc2V0SW5zdGFuY2UobmV3IENvbmZpZ05ldHdvcmtTZWN1cml0eVBvbGljeShjb25maWcpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eVRydXN0TWFuYWdlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9OZXR3b3JrU2VjdXJpdHlUcnVzdE1hbmFnZXIuamF2YQppbmRleCA2MDEzYzFlLi45ODJlZDY4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL05ldHdvcmtTZWN1cml0eVRydXN0TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvTmV0d29ya1NlY3VyaXR5VHJ1c3RNYW5hZ2VyLmphdmEKQEAgLTQ2LDE3ICs0NiwxMyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJjb25maWcgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CiAgICAgICAgIG1OZXR3b3JrU2VjdXJpdHlDb25maWcgPSBjb25maWc7Ci0gICAgICAgIC8vIFRPRE86IENyZWF0ZSBvdXIgb3duIGJldHRlciBLZXlTdG9yZUltcGwKICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFRydXN0ZWRDZXJ0aWZpY2F0ZVN0b3JlQWRhcHRlciBjZXJ0U3RvcmUgPSBuZXcgVHJ1c3RlZENlcnRpZmljYXRlU3RvcmVBZGFwdGVyKGNvbmZpZyk7CisgICAgICAgICAgICAvLyBQcm92aWRlIGFuIGVtcHR5IEtleVN0b3JlIHNpbmNlIFRydXN0TWFuYWdlckltcGwgZG9lc24ndCBzdXBwb3J0IG51bGwgS2V5U3RvcmVzLgorICAgICAgICAgICAgLy8gVHJ1c3RNYW5hZ2VySW1wbCB3aWxsIHVzZSBjZXJ0U3RvcmUgdG8gbG9va3VwIGNlcnRpZmljYXRlcy4KICAgICAgICAgICAgIEtleVN0b3JlIHN0b3JlID0gS2V5U3RvcmUuZ2V0SW5zdGFuY2UoS2V5U3RvcmUuZ2V0RGVmYXVsdFR5cGUoKSk7CiAgICAgICAgICAgICBzdG9yZS5sb2FkKG51bGwpOwotICAgICAgICAgICAgaW50IGNlcnROdW0gPSAwOwotICAgICAgICAgICAgZm9yIChUcnVzdEFuY2hvciBhbmNob3IgOiBtTmV0d29ya1NlY3VyaXR5Q29uZmlnLmdldFRydXN0QW5jaG9ycygpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcmUuc2V0RW50cnkoU3RyaW5nLnZhbHVlT2YoY2VydE51bSsrKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBLZXlTdG9yZS5UcnVzdGVkQ2VydGlmaWNhdGVFbnRyeShhbmNob3IuY2VydGlmaWNhdGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtRGVsZWdhdGUgPSBuZXcgVHJ1c3RNYW5hZ2VySW1wbChzdG9yZSk7CisgICAgICAgICAgICBtRGVsZWdhdGUgPSBuZXcgVHJ1c3RNYW5hZ2VySW1wbChzdG9yZSwgbnVsbCwgY2VydFN0b3JlKTsKICAgICAgICAgfSBjYXRjaCAoR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uIHwgSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvUmVzb3VyY2VDZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9SZXNvdXJjZUNlcnRpZmljYXRlU291cmNlLmphdmEKaW5kZXggYjAwN2Y4Zi4uZTQ4OWMyYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9SZXNvdXJjZUNlcnRpZmljYXRlU291cmNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9SZXNvdXJjZUNlcnRpZmljYXRlU291cmNlLmphdmEKQEAgLTkwLDQgKzkwLDE0IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFuY2hvci5nZXRUcnVzdGVkQ2VydCgpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBYNTA5Q2VydGlmaWNhdGUgZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KSB7CisgICAgICAgIGVuc3VyZUluaXRpYWxpemVkKCk7CisgICAgICAgIGphdmEuc2VjdXJpdHkuY2VydC5UcnVzdEFuY2hvciBhbmNob3IgPSBtSW5kZXguZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKGNlcnQpOworICAgICAgICBpZiAoYW5jaG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmNob3IuZ2V0VHJ1c3RlZENlcnQoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL1Jvb3RUcnVzdE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvUm9vdFRydXN0TWFuYWdlci5qYXZhCmluZGV4IGUzMDdhZDAuLmI0ZTU4ZTYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvUm9vdFRydXN0TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvUm9vdFRydXN0TWFuYWdlci5qYXZhCkBAIC03MSw2ICs3MSwxMCBAQAogICAgICAqLwogICAgIHB1YmxpYyBMaXN0PFg1MDlDZXJ0aWZpY2F0ZT4gY2hlY2tTZXJ2ZXJUcnVzdGVkKFg1MDlDZXJ0aWZpY2F0ZVtdIGNlcnRzLCBTdHJpbmcgYXV0aFR5cGUsCiAgICAgICAgICAgICBTdHJpbmcgaG9zdG5hbWUpIHRocm93cyBDZXJ0aWZpY2F0ZUV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChob3N0bmFtZSA9PSBudWxsICYmIG1Db25maWcuaGFzUGVyRG9tYWluQ29uZmlncygpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ2VydGlmaWNhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJEb21haW4gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgcmVxdWlyZSB0aGF0IHRoZSBob3N0bmFtZSBiZSBwcm92aWRlZCIpOworICAgICAgICB9CiAgICAgICAgIE5ldHdvcmtTZWN1cml0eUNvbmZpZyBjb25maWcgPSBtQ29uZmlnLmdldENvbmZpZ0Zvckhvc3RuYW1lKGhvc3RuYW1lKTsKICAgICAgICAgcmV0dXJuIGNvbmZpZy5nZXRUcnVzdE1hbmFnZXIoKS5jaGVja1NlcnZlclRydXN0ZWQoY2VydHMsIGF1dGhUeXBlLCBob3N0bmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9UcnVzdGVkQ2VydGlmaWNhdGVTdG9yZUFkYXB0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvVHJ1c3RlZENlcnRpZmljYXRlU3RvcmVBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE5MGY4MgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvVHJ1c3RlZENlcnRpZmljYXRlU3RvcmVBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuc2VjdXJpdHkubmV0LmNvbmZpZzsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydGlmaWNhdGU7CitpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0Llg1MDlDZXJ0aWZpY2F0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgY29tLmFuZHJvaWQub3JnLmNvbnNjcnlwdC5UcnVzdGVkQ2VydGlmaWNhdGVTdG9yZTsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgVHJ1c3RlZENlcnRpZmljYXRlU3RvcmVBZGFwdGVyIGV4dGVuZHMgVHJ1c3RlZENlcnRpZmljYXRlU3RvcmUgeworICAgIHByaXZhdGUgZmluYWwgTmV0d29ya1NlY3VyaXR5Q29uZmlnIG1Db25maWc7CisKKyAgICBwdWJsaWMgVHJ1c3RlZENlcnRpZmljYXRlU3RvcmVBZGFwdGVyKE5ldHdvcmtTZWN1cml0eUNvbmZpZyBjb25maWcpIHsKKyAgICAgICAgbUNvbmZpZyA9IGNvbmZpZzsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgWDUwOUNlcnRpZmljYXRlIGZpbmRJc3N1ZXIoWDUwOUNlcnRpZmljYXRlIGNlcnQpIHsKKyAgICAgICAgVHJ1c3RBbmNob3IgYW5jaG9yID0gbUNvbmZpZy5maW5kVHJ1c3RBbmNob3JCeUlzc3VlckFuZFNpZ25hdHVyZShjZXJ0KTsKKyAgICAgICAgaWYgKGFuY2hvciA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYW5jaG9yLmNlcnRpZmljYXRlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBYNTA5Q2VydGlmaWNhdGUgZ2V0VHJ1c3RBbmNob3IoWDUwOUNlcnRpZmljYXRlIGNlcnQpIHsKKyAgICAgICAgVHJ1c3RBbmNob3IgYW5jaG9yID0gbUNvbmZpZy5maW5kVHJ1c3RBbmNob3JCeVN1YmplY3RBbmRQdWJsaWNLZXkoY2VydCk7CisgICAgICAgIGlmIChhbmNob3IgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFuY2hvci5jZXJ0aWZpY2F0ZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VzZXJBZGRlZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KSB7CisgICAgICAgIC8vIGlzVXNlckFkZGVkQ2VydGlmaWNhdGUgaXMgdXNlZCBvbmx5IGZvciBwaW5uaW5nIG92ZXJyaWRlcywgc28gdXNlIG92ZXJyaWRlc1BpbnMgaGVyZS4KKyAgICAgICAgVHJ1c3RBbmNob3IgYW5jaG9yID0gbUNvbmZpZy5maW5kVHJ1c3RBbmNob3JCeVN1YmplY3RBbmRQdWJsaWNLZXkoY2VydCk7CisgICAgICAgIGlmIChhbmNob3IgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmNob3Iub3ZlcnJpZGVzUGluczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRmlsZSBnZXRDZXJ0aWZpY2F0ZUZpbGUoRmlsZSBkaXIsIFg1MDlDZXJ0aWZpY2F0ZSB4KSB7CisgICAgICAgIC8vIGdldENlcnRpZmljYXRlRmlsZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RzLCBkbyBub3Qgc3VwcG9ydCBpdCBoZXJlLgorICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICAvLyBUaGUgbWV0aG9kcyBiZWxvdyBhcmUgZXhwb3NlZCBpbiBUcnVzdGVkQ2VydGlmaWNhdGVTdG9yZSBidXQgbm90IHVzZWQgYnkgY29uc2NyeXB0LCBkbyBub3QKKyAgICAvLyBzdXBwb3J0IHRoZW0uCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ2VydGlmaWNhdGUgZ2V0Q2VydGlmaWNhdGUoU3RyaW5nIGFsaWFzKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDZXJ0aWZpY2F0ZSBnZXRDZXJ0aWZpY2F0ZShTdHJpbmcgYWxpYXMsIGJvb2xlYW4gaW5jbHVkZURlbGV0ZWRTeXN0ZW0pIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIERhdGUgZ2V0Q3JlYXRpb25EYXRlKFN0cmluZyBhbGlhcykgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU2V0PFN0cmluZz4gYWxpYXNlcygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNldDxTdHJpbmc+IHVzZXJBbGlhc2VzKCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU2V0PFN0cmluZz4gYWxsU3lzdGVtQWxpYXNlcygpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNBbGlhcyhTdHJpbmcgYWxpYXMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRDZXJ0aWZpY2F0ZUFsaWFzKENlcnRpZmljYXRlIGMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRDZXJ0aWZpY2F0ZUFsaWFzKENlcnRpZmljYXRlIGMsIGJvb2xlYW4gaW5jbHVkZURlbGV0ZWRTeXN0ZW0pIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9kcmVhbXMvRHJlYW1TZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL2RyZWFtcy9EcmVhbVNlcnZpY2UuamF2YQppbmRleCBiYjQ2ZTgzLi44MTZlY2RlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL2RyZWFtcy9EcmVhbVNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL2RyZWFtcy9EcmVhbVNlcnZpY2UuamF2YQpAQCAtMTUsOSArMTUsNiBAQAogICovCiBwYWNrYWdlIGFuZHJvaWQuc2VydmljZS5kcmVhbXM7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci0KIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSWRSZXM7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkxheW91dFJlczsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CkBAIC0zMywyNyArMzAsMzIgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlNlYXJjaEV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXM7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVXaW5kb3c7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5EdW1wVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5EdW1wVXRpbHMuRHVtcDsKIAoraW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogLyoqCiAgKiBFeHRlbmQgdGhpcyBjbGFzcyB0byBpbXBsZW1lbnQgYSBjdXN0b20gZHJlYW0gKGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyBhICJEYXlkcmVhbSIpLgogICoKQEAgLTM2NSw2ICszNjcsMTEgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbk1vZGVGaW5pc2hlZChBY3Rpb25Nb2RlIG1vZGUpIHsKICAgICB9CisKKyAgICAvKioge0Bpbmhlcml0RG9jfSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiBkYXRhLCBNZW51IG1lbnUpIHsKKyAgICB9CiAgICAgLy8gZW5kIFdpbmRvdy5DYWxsYmFjayBtZXRob2RzCiAKICAgICAvLyBiZWdpbiBwdWJsaWMgYXBpCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9JTm90aWZpY2F0aW9uTGlzdGVuZXIuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCmluZGV4IGU2YmY2YmEuLmEwZGUxN2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL0lOb3RpZmljYXRpb25MaXN0ZW5lci5haWRsCkBAIC0yMyw2ICsyMyw3IEBACiAvKiogQGhpZGUgKi8KIG9uZXdheSBpbnRlcmZhY2UgSU5vdGlmaWNhdGlvbkxpc3RlbmVyCiB7CisgICAgLy8gbGlzdGVuZXJzIGFuZCBhc3Npc3RhbnRzCiAgICAgdm9pZCBvbkxpc3RlbmVyQ29ubmVjdGVkKGluIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlKTsKICAgICB2b2lkIG9uTm90aWZpY2F0aW9uUG9zdGVkKGluIElTdGF0dXNCYXJOb3RpZmljYXRpb25Ib2xkZXIgbm90aWZpY2F0aW9uSG9sZGVyLAogICAgICAgICAgICAgaW4gTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZSB1cGRhdGUpOwpAQCAtMzEsNCArMzIsMTEgQEAKICAgICB2b2lkIG9uTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZShpbiBOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlIHVwZGF0ZSk7CiAgICAgdm9pZCBvbkxpc3RlbmVySGludHNDaGFuZ2VkKGludCBoaW50cyk7CiAgICAgdm9pZCBvbkludGVycnVwdGlvbkZpbHRlckNoYW5nZWQoaW50IGludGVycnVwdGlvbkZpbHRlcik7CisKKyAgICAvLyBhc3Npc3RhbnRzIG9ubHkKKyAgICB2b2lkIG9uTm90aWZpY2F0aW9uRW5xdWV1ZWQoaW4gSVN0YXR1c0Jhck5vdGlmaWNhdGlvbkhvbGRlciBub3RpZmljYXRpb25Ib2xkZXIsIGludCBpbXBvcnRhbmNlLCBib29sZWFuIHVzZXIpOworICAgIHZvaWQgb25Ob3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlZChTdHJpbmcga2V5LCBsb25nIHRpbWUsIGJvb2xlYW4gdmlzaWJsZSk7CisgICAgdm9pZCBvbk5vdGlmaWNhdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSk7CisgICAgdm9pZCBvbk5vdGlmaWNhdGlvbkFjdGlvbkNsaWNrKFN0cmluZyBrZXksIGxvbmcgdGltZSwgaW50IGFjdGlvbkluZGV4KTsKKyAgICB2b2lkIG9uTm90aWZpY2F0aW9uUmVtb3ZlZFJlYXNvbihTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCByZWFzb24pOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5qYXZhCmluZGV4IDVkMTMxN2MuLjAzNTQ2MmQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLmphdmEKQEAgLTE2LDggKzE2LDIwIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbjsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3lzdGVtQXBpOworaW1wb3J0IGFuZHJvaWQuYXBwLklOb3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogLyoqCiAgKiBBIHNlcnZpY2UgdGhhdCBoZWxwcyB0aGUgdXNlciBtYW5hZ2Ugbm90aWZpY2F0aW9ucyBieSBtb2RpZnlpbmcgdGhlCkBAIC0zNSw2ICs0NywxNSBAQAogICogJmx0Oy9zZXJ2aWNlPjwvcHJlPgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZSBleHRlbmRzIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOb3RpZmljYXRpb25Bc3Npc3RhbnQiOworCisgICAgLyoqCisgICAgICogVGhlIHtAbGluayBJbnRlbnR9IHRoYXQgbXVzdCBiZSBkZWNsYXJlZCBhcyBoYW5kbGVkIGJ5IHRoZSBzZXJ2aWNlLgorICAgICAqLworICAgIEBTZGtDb25zdGFudChTZGtDb25zdGFudC5TZGtDb25zdGFudFR5cGUuU0VSVklDRV9BQ1RJT04pCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9JTlRFUkZBQ0UKKyAgICAgICAgICAgID0gImFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZSI7CisKICAgICAvKiogTm90aWZpY2F0aW9uIHdhcyBjYW5jZWxlZCBieSB0aGUgc3RhdHVzIGJhciByZXBvcnRpbmcgYSBjbGljay4gKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRUFTT05fREVMRUdBVEVfQ0xJQ0sgPSAxOwogCkBAIC03NCw2ICs5NSw5IEBACiAgICAgLyoqIE5vdGlmaWNhdGlvbiB3YXMgY2FuY2VsZWQgYmVjYXVzZSBpdCB3YXMgYW4gaW52aXNpYmxlIG1lbWJlciBvZiBhIGdyb3VwLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9HUk9VUF9PUFRJTUlaQVRJT04gPSAxMzsKIAorICAgIC8qKiBOb3RpZmljYXRpb24gd2FzIGNhbmNlbGVkIGJ5IHRoZSB1c2VyIGJhbm5pbmcgdGhlIHRvcGljLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFQVNPTl9UT1BJQ19CQU5ORUQgPSAxNDsKKwogICAgIHB1YmxpYyBjbGFzcyBBZGp1c3RtZW50IHsKICAgICAgICAgaW50IG1JbXBvcnRhbmNlOwogICAgICAgICBDaGFyU2VxdWVuY2UgbUV4cGxhbmF0aW9uOwpAQCAtOTYsNiArMTIwLDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmQoSW50ZW50IGludGVudCkgeworICAgICAgICBpZiAobVdyYXBwZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgbVdyYXBwZXIgPSBuZXcgTm90aWZpY2F0aW9uQXNzaXN0YW50V3JhcHBlcigpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtV3JhcHBlcjsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBBIG5vdGlmaWNhdGlvbiB3YXMgcG9zdGVkIGJ5IGFuIGFwcC4gQ2FsbGVkIGJlZm9yZSBhbGVydC4KICAgICAgKgpAQCAtMTYzLDcgKzE5NSwxMyBAQAogICAgICAqLwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIGFkanVzdEltcG9ydGFuY2UoU3RyaW5nIGtleSwgQWRqdXN0bWVudCBhZGp1c3RtZW50KQogICAgIHsKLSAgICAgICAgLy8gVE9ETzogcGFjayB1cCB0aGUgYWRqdXN0bWVudCBhbmQgc2VuZCBpdCB0byB0aGUgTm90aWZpY2F0aW9uTWFuYWdlci4KKyAgICAgICAgaWYgKCFpc0JvdW5kKCkpIHJldHVybjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdldE5vdGlmaWNhdGlvbkludGVyZmFjZSgpLnNldEltcG9ydGFuY2VGcm9tQXNzaXN0YW50KG1XcmFwcGVyLCBrZXksCisgICAgICAgICAgICAgICAgICAgIGFkanVzdG1lbnQubUltcG9ydGFuY2UsIGFkanVzdG1lbnQubUV4cGxhbmF0aW9uKTsKKyAgICAgICAgfSBjYXRjaCAoYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIExvZy52KFRBRywgIlVuYWJsZSB0byBjb250YWN0IG5vdGlmaWNhdGlvbiBtYW5hZ2VyIiwgZXgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNzEsNyArMjA5LDcgQEAKICAgICAgKiBiZSBmaXJlZCB3aGVuIHRoZSBob3N0IG5vdGlmaWNhdGlvbiBpcyBkZWxldGVkLCBvciB3aGVuIHRoaXMgYW5ub3RhdGlvbgogICAgICAqIGlzIHJlbW92ZWQgb3IgcmVwbGFjZWQuCiAgICAgICoKLSAgICAgKiBAcGFyYW0ga2V5IHRoZSBub3RpZmljYXRpb24ga2V5CisgICAgICogQHBhcmFtIGtleSB0aGUga2V5IG9mIHRoZSBub3RpZmljYXRpb24gdG8gYmUgYW5ub3RhdGVkCiAgICAgICogQHBhcmFtIGFubm90YXRpb24gdGhlIG5ldyBhbm5vdGF0aW9uIG9iamVjdAogICAgICAqLwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldEFubm90YXRpb24oU3RyaW5nIGtleSwgTm90aWZpY2F0aW9uIGFubm90YXRpb24pCkBAIC0xODIsMTAgKzIyMCw3NCBAQAogICAgIC8qKgogICAgICAqIFJlbW92ZSB0aGUgYW5ub3RhdGlvbiBmcm9tIGEgbm90aWZpY2F0aW9uLgogICAgICAqCi0gICAgICogQHBhcmFtIGtleSB0aGUgbm90aWZpY2F0aW9uIGtleQorICAgICAqIEBwYXJhbSBrZXkgdGhlIGtleSBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIGNsZWFuc2VkIG9mIGFubm90YXRvbnMKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBjbGVhckFubm90YXRpb24oU3RyaW5nIGtleSkKICAgICB7CiAgICAgICAgIC8vIFRPRE86IGFzayB0aGUgTm90aWZpY2F0aW9uTWFuYWdlciB0byBjbGVhciB0aGUgYW5ub3RhdGlvbi4KICAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIE5vdGlmaWNhdGlvbkFzc2lzdGFudFdyYXBwZXIgZXh0ZW5kcyBOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25FbnF1ZXVlZChJU3RhdHVzQmFyTm90aWZpY2F0aW9uSG9sZGVyIHNibkhvbGRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW1wb3J0YW5jZSwgYm9vbGVhbiB1c2VyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm47CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHNibiA9IHNibkhvbGRlci5nZXQoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAib25Ob3RpZmljYXRpb25FbnF1ZXVlZDogRXJyb3IgcmVjZWl2aW5nIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiIsIGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBBZGp1c3RtZW50IGFkanVzdG1lbnQgPQorICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLnRoaXMub25Ob3RpZmljYXRpb25FbnF1ZXVlZChzYm4sIGltcG9ydGFuY2UsIHVzZXIpOworICAgICAgICAgICAgICAgIGlmIChhZGp1c3RtZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0SW1wb3J0YW5jZShzYm4uZ2V0S2V5KCksIGFkanVzdG1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRXJyb3IgcnVubmluZyBvbk5vdGlmaWNhdGlvbkVucXVldWVkIiwgdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlZChTdHJpbmcga2V5LCBsb25nIHRpbWUsIGJvb2xlYW4gdmlzaWJsZSkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS50aGlzLm9uTm90aWZpY2F0aW9uVmlzaWJpbGl0eUNoYW5nZWQoa2V5LCB0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSk7CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHJ1bm5pbmcgb25Ob3RpZmljYXRpb25WaXNpYmlsaXR5Q2hhbmdlZCIsIHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uQ2xpY2soU3RyaW5nIGtleSwgbG9uZyB0aW1lKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS50aGlzLm9uTm90aWZpY2F0aW9uQ2xpY2soa2V5LCB0aW1lKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSB0KSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRXJyb3IgcnVubmluZyBvbk5vdGlmaWNhdGlvbkNsaWNrIiwgdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25BY3Rpb25DbGljayhTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCBhY3Rpb25JbmRleCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS50aGlzLm9uTm90aWZpY2F0aW9uQWN0aW9uQ2xpY2soa2V5LCB0aW1lLCBhY3Rpb25JbmRleCk7CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkVycm9yIHJ1bm5pbmcgb25Ob3RpZmljYXRpb25BY3Rpb25DbGljayIsIHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uUmVtb3ZlZFJlYXNvbihTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCByZWFzb24pCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UudGhpcy5vbk5vdGlmaWNhdGlvblJlbW92ZWQoa2V5LCB0aW1lLCByZWFzb24pOworICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJFcnJvciBydW5uaW5nIG9uTm90aWZpY2F0aW9uUmVtb3ZlZCIsIHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuamF2YQppbmRleCBhNzU0NWYyLi5lZDkwZTc5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuamF2YQpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKIHBhY2thZ2UgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLklTdGF0dXNCYXJOb3RpZmljYXRpb25Ib2xkZXI7CiAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3lzdGVtQXBpOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TZGtDb25zdGFudDsKQEAgLTYwLDYgKzYxLDE2IEBACiAgKiAgICAgICAgICZsdDthY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIgLz4KICAqICAgICAmbHQ7L2ludGVudC1maWx0ZXI+CiAgKiAmbHQ7L3NlcnZpY2U+PC9wcmU+CisgKiA8cD4gVHlwaWNhbGx5LCB3aGlsZSBlbmFibGVkIGluIHVzZXIgc2V0dGluZ3MsIHRoaXMgc2VydmljZSB3aWxsIGJlIGJvdW5kIG9uIGJvb3Qgb3Igd2hlbiBhCisgKiBzZXR0aW5ncyBjaGFuZ2Ugb2NjdXJzIHRoYXQgY291bGQgYWZmZWN0IHdoZXRoZXIgdGhpcyBzZXJ2aWNlIHNob3VsZCBydW4uICBIb3dldmVyLCBmb3Igc29tZQorICogc3lzdGVtIHVzYWdlIG1vZGVzLCB0aGUgeW91IG1heSBpbnN0ZWFkIHNwZWNpZnkgdGhhdCB0aGlzIHNlcnZpY2UgaXMgaW5zdGVhZCBib3VuZCBhbmQgdW5ib3VuZAorICogaW4gcmVzcG9uc2UgdG8gbW9kZSBjaGFuZ2VzIGJ5IGluY2x1ZGluZyBhIGNhdGVnb3J5IGluIHRoZSBpbnRlbnQgZmlsdGVyLiAgQ3VycmVudGx5CisgKiBzdXBwb3J0ZWQgY2F0ZWdvcmllcyBhcmU6CisgKiA8dWw+CisgKiAgIDxsaT57QGxpbmsgI0NBVEVHT1JZX1ZSX05PVElGSUNBVElPTlN9IC0gdGhpcyBzZXJ2aWNlIGlzIGJvdW5kIHdoZW4gYW4gQWN0aXZpdHkgaGFzIGVuYWJsZWQKKyAqICAgVlIgbW9kZS4ge0BzZWUgYW5kcm9pZC5hcHAuQWN0aXZpdHkjc2V0VnJNb2RlKGJvb2xlYW4pfS48L2xpPgorICogPC91bD4KKyAqIDwvcD4KICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewogICAgIC8vIFRBRyA9ICJOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2VbTXlTdWJjbGFzc10iCkBAIC0xMTIsNiArMTIzLDggQEAKICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUzsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVVBQUkVTU0VEX0VGRkVDVF9QRUVLID0KICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX1BFRUs7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OID0KKyAgICAgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTjsKIAogICAgIC8qKgogICAgICAqIFRoZSBmdWxsIHRyaW0gb2YgdGhlIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBpbmNsdWRpbmcgYWxsIGl0cyBmZWF0dXJlcy4KQEAgLTE0MSw3ICsxNTQsOCBAQAogICAgIEBTeXN0ZW1BcGkKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUUklNX0xJR0hUID0gMTsKIAotICAgIHByaXZhdGUgSU5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlciBtV3JhcHBlciA9IG51bGw7CisgICAgLyoqIEBoaWRlICovCisgICAgcHJvdGVjdGVkIE5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlciBtV3JhcHBlciA9IG51bGw7CiAgICAgcHJpdmF0ZSBSYW5raW5nTWFwIG1SYW5raW5nTWFwOwogCiAgICAgcHJpdmF0ZSBJTm90aWZpY2F0aW9uTWFuYWdlciBtTm9NYW47CkBAIC0xNjIsNiArMTc2LDE3IEBACiAgICAgICAgICAgICA9ICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSI7CiAKICAgICAvKioKKyAgICAgKiBJZiB0aGlzIGNhdGVnb3J5IGlzIGRlY2xhcmVkIGluIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdCBmb3IgYSBzZXJ2aWNlIG9mIHRoaXMgdHlwZSwgdGhpcworICAgICAqIHNlcnZpY2Ugd2lsbCBiZSBib3VuZCB3aGVuIFZSIG1vZGUgaXMgZW5hYmxlZCwgYW5kIHVuYm91bmQgd2hlbiBWUiBtb2RlIGlzIGRpc2FibGVkIHJhdGhlcgorICAgICAqIHRoYW4gdGhlIG5vcm1hbCBsaWZlY3ljbGUgZm9yIGEgbm90aWZpY2F0aW9uIHNlcnZpY2UuCisgICAgICoKKyAgICAgKiB7QHNlZSBhbmRyb2lkLmFwcC5BY3Rpdml0eSNzZXRWck1vZGUoYm9vbGVhbil9CisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50LlNka0NvbnN0YW50VHlwZS5JTlRFTlRfQ0FURUdPUlkpCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FURUdPUllfVlJfTk9USUZJQ0FUSU9OUyA9CisgICAgICAgICJhbmRyb2lkLmludGVudC5jYXRlZ29yeS52ci5ub3RpZmljYXRpb25zIjsKKworICAgIC8qKgogICAgICAqIEltcGxlbWVudCB0aGlzIG1ldGhvZCB0byBsZWFybiBhYm91dCBuZXcgbm90aWZpY2F0aW9ucyBhcyB0aGV5IGFyZSBwb3N0ZWQgYnkgYXBwcy4KICAgICAgKgogICAgICAqIEBwYXJhbSBzYm4gQSBkYXRhIHN0cnVjdHVyZSBlbmNhcHN1bGF0aW5nIHRoZSBvcmlnaW5hbCB7QGxpbmsgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9ufQpAQCAtMjcwLDcgKzI5NSw4IEBACiAgICAgICAgIC8vIG9wdGlvbmFsCiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBJTm90aWZpY2F0aW9uTWFuYWdlciBnZXROb3RpZmljYXRpb25JbnRlcmZhY2UoKSB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHJvdGVjdGVkIGZpbmFsIElOb3RpZmljYXRpb25NYW5hZ2VyIGdldE5vdGlmaWNhdGlvbkludGVyZmFjZSgpIHsKICAgICAgICAgaWYgKG1Ob01hbiA9PSBudWxsKSB7CiAgICAgICAgICAgICBtTm9NYW4gPSBJTm90aWZpY2F0aW9uTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAogICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKENvbnRleHQuTk9USUZJQ0FUSU9OX1NFUlZJQ0UpKTsKQEAgLTYxMywxMiArNjM5LDEzIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHsKLSAgICAgICAgICAgIG1XcmFwcGVyID0gbmV3IElOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIoKTsKKyAgICAgICAgICAgIG1XcmFwcGVyID0gbmV3IE5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlcigpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBtV3JhcHBlcjsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNCb3VuZCgpIHsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc0JvdW5kKCkgewogICAgICAgICBpZiAobVdyYXBwZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgTG9nLncoVEFHLCAiTm90aWZpY2F0aW9uIGxpc3RlbmVyIHNlcnZpY2Ugbm90IHlldCBib3VuZC4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY0Myw3ICs2NzAsNyBAQAogICAgICAgICAgICAgaW50IGN1cnJlbnRVc2VyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgbVN5c3RlbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBpZiAobVdyYXBwZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgbVdyYXBwZXIgPSBuZXcgSU5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlcigpOworICAgICAgICAgICAgbVdyYXBwZXIgPSBuZXcgTm90aWZpY2F0aW9uTGlzdGVuZXJXcmFwcGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgSU5vdGlmaWNhdGlvbk1hbmFnZXIgbm9NYW4gPSBnZXROb3RpZmljYXRpb25JbnRlcmZhY2UoKTsKICAgICAgICAgbm9NYW4ucmVnaXN0ZXJMaXN0ZW5lcihtV3JhcHBlciwgY29tcG9uZW50TmFtZSwgY3VycmVudFVzZXIpOwpAQCAtNjY1LDYgKzY5MiwzNiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGF0IHRoZSBsaXN0ZW5lciBiZSByZWJvdW5kLCBhZnRlciBhIHByZXZpb3VzIGNhbGwgdG8gKEBsaW5rIHJlcXVlc3RVbmJpbmQpLgorICAgICAqCisgICAgICogPFA+VGhpcyBtZXRob2Qgd2lsbCBmYWlsIGZvciBhc3Npc3RhbnRzIHRoYXQgaGF2ZQorICAgICAqIG5vdCBiZWVuIGdyYW50ZWQgdGhlIHBlcm1pc3Npb24gYnkgdGhlIHVzZXIuCisgICAgICoKKyAgICAgKiA8UD5UaGUgc2VydmljZSBzaG91bGQgd2FpdCBmb3IgdGhlIHtAbGluayAjb25MaXN0ZW5lckNvbm5lY3RlZCgpfSBldmVudAorICAgICAqIGJlZm9yZSBwZXJmb3JtaW5nIGFueSBvcGVyYXRpb25zLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgdm9pZCByZXF1ZXN0UmViaW5kKENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSkKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBJTm90aWZpY2F0aW9uTWFuYWdlciBub01hbiA9IElOb3RpZmljYXRpb25NYW5hZ2VyLlN0dWIuYXNJbnRlcmZhY2UoCisgICAgICAgICAgICAgICAgU2VydmljZU1hbmFnZXIuZ2V0U2VydmljZShDb250ZXh0Lk5PVElGSUNBVElPTl9TRVJWSUNFKSk7CisgICAgICAgIG5vTWFuLnJlcXVlc3RCaW5kTGlzdGVuZXIoY29tcG9uZW50TmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGF0IHRoZSBzZXJ2aWNlIGJlIHVuYm91bmQuCisgICAgICoKKyAgICAgKiA8UD5UaGlzIHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUgdXBkYXRlcyB1bnRpbAorICAgICAqIHtAbGluayAjcmVxdWVzdFJlYmluZChDb21wb25lbnROYW1lKX0gaXMgY2FsbGVkLgorICAgICAqIFRoZSBzZXJ2aWNlIHdpbGwgbGlrZWx5IGJlIGtpbGVkIGJ5IHRoZSBzeXN0ZW0gYWZ0ZXIgdGhpcyBjYWxsLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHJlcXVlc3RVbmJpbmQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1XcmFwcGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIElOb3RpZmljYXRpb25NYW5hZ2VyIG5vTWFuID0gZ2V0Tm90aWZpY2F0aW9uSW50ZXJmYWNlKCk7CisgICAgICAgICAgICBub01hbi5yZXF1ZXN0VW5iaW5kTGlzdGVuZXIobVdyYXBwZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqIENvbnZlcnQgbmV3LXN0eWxlIEljb25zIHRvIGxlZ2FjeSByZXByZXNlbnRhdGlvbnMgZm9yIHByZS1NIGNsaWVudHMuICovCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUxlZ2FjeUljb25FeHRyYXMoTm90aWZpY2F0aW9uIG4pIHsKICAgICAgICAgSWNvbiBzbWFsbEljb24gPSBuLmdldFNtYWxsSWNvbigpOwpAQCAtNjk1LDcgKzc1Miw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGNsYXNzIElOb3RpZmljYXRpb25MaXN0ZW5lcldyYXBwZXIgZXh0ZW5kcyBJTm90aWZpY2F0aW9uTGlzdGVuZXIuU3R1YiB7CisgICAgLyoqIEBoaWRlICovCisgICAgcHJvdGVjdGVkIGNsYXNzIE5vdGlmaWNhdGlvbkxpc3RlbmVyV3JhcHBlciBleHRlbmRzIElOb3RpZmljYXRpb25MaXN0ZW5lci5TdHViIHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uUG9zdGVkKElTdGF0dXNCYXJOb3RpZmljYXRpb25Ib2xkZXIgc2JuSG9sZGVyLAogICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlKSB7CkBAIC03MTMsMTAgKzc3MSwxMCBAQAogICAgICAgICAgICAgICAgIGNyZWF0ZUxlZ2FjeUljb25FeHRyYXMoc2JuLmdldE5vdGlmaWNhdGlvbigpKTsKICAgICAgICAgICAgICAgICBtYXliZVBvcHVsYXRlUmVtb3RlVmlld3Moc2JuLmdldE5vdGlmaWNhdGlvbigpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gZHJvcCBjb3JydXB0IG5vdGlmaWNhdGlvbgotICAgICAgICAgICAgICAgIHNibiA9IG51bGw7CisgICAgICAgICAgICAgICAgLy8gd2FybiBhbmQgZHJvcCBjb3JydXB0IG5vdGlmaWNhdGlvbgogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIm9uTm90aWZpY2F0aW9uUG9zdGVkOiBjYW4ndCByZWJ1aWxkIG5vdGlmaWNhdGlvbiBmcm9tICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgc2JuLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICAgICAgICAgIHNibiA9IG51bGw7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIHByb3RlY3Qgc3ViY2xhc3MgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgb2YgKEBsaW5rIG1Ob3RpZmljYXRpb25LZXlzfS4KQEAgLTc5Niw2ICs4NTQsMzUgQEAKICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJFcnJvciBydW5uaW5nIG9uSW50ZXJydXB0aW9uRmlsdGVyQ2hhbmdlZCIsIHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uRW5xdWV1ZWQoSVN0YXR1c0Jhck5vdGlmaWNhdGlvbkhvbGRlciBub3RpZmljYXRpb25Ib2xkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGltcG9ydGFuY2UsIGJvb2xlYW4gdXNlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBuby1vcCBpbiB0aGUgbGlzdGVuZXIKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblZpc2liaWxpdHlDaGFuZ2VkKFN0cmluZyBrZXksIGxvbmcgdGltZSwgYm9vbGVhbiB2aXNpYmxlKQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgLy8gbm8tb3AgaW4gdGhlIGxpc3RlbmVyCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25DbGljayhTdHJpbmcga2V5LCBsb25nIHRpbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgLy8gbm8tb3AgaW4gdGhlIGxpc3RlbmVyCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25BY3Rpb25DbGljayhTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCBhY3Rpb25JbmRleCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIC8vIG5vLW9wIGluIHRoZSBsaXN0ZW5lcgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uUmVtb3ZlZFJlYXNvbihTdHJpbmcga2V5LCBsb25nIHRpbWUsIGludCByZWFzb24pCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAvLyBuby1vcCBpbiB0aGUgbGlzdGVuZXIKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhcHBseVVwZGF0ZShOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlIHVwZGF0ZSkgewpAQCAtODMzLDI5ICs5MjAsMjkgQEAKICAgICAgICAgLyoqCiAgICAgICAgICAqIEEgbm90aWZpY2F0aW9uIHdpdGggbm8gaW1wb3J0YW5jZTogc2hvd3Mgbm93aGVyZSwgaXMgYmxvY2tlZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTk9ORSA9IC0yOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX05PTkUgPSAwOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBMb3cgbm90aWZpY2F0aW9uIGltcG9ydGFuY2U6IG9ubHkgc2hvd3MgaW4gdGhlIHNoYWRlLCBiZWxvdyB0aGUgZm9sZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTE9XID0gLTE7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTE9XID0gMTsKIAogICAgICAgICAvKioKICAgICAgICAgICogRGVmYXVsdCBub3RpZmljYXRpb24gaW1wb3J0YW5jZTogc2hvd3MgZXZlcnl3aGVyZSwgYnV0IGlzIG5vdCBpbnRydXNpdmUuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0RFRkFVTFQgPSAwOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTVBPUlRBTkNFX0RFRkFVTFQgPSAyOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBIaWdoZXIgbm90aWZpY2F0aW9uIGltcG9ydGFuY2U6IHNob3dzIGV2ZXJ5d2hlcmUsIG1ha2VzIG5vaXNlLAogICAgICAgICAgKiBidXQgZG9lcyBub3QgdmlzdWFsbHkgaW50cnVkZS4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfSElHSCA9IDE7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfSElHSCA9IDM7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIEhpZ2hlc3Qgbm90aWZpY2F0aW9uIGltcG9ydGFuY2U6IHNob3dzIGV2ZXJ5d2hlcmUsIG1ha2VzIG5vaXNlLAogICAgICAgICAgKiBhbmQgYWxzbyB2aXN1YWxseSBpbnRydWRlcy4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElNUE9SVEFOQ0VfTUFYID0gMjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU1QT1JUQU5DRV9NQVggPSA0OwogCiAgICAgICAgIHByaXZhdGUgU3RyaW5nIG1LZXk7CiAgICAgICAgIHByaXZhdGUgaW50IG1SYW5rID0gLTE7CkBAIC04NjMsNiArOTUwLDggQEAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1NYXRjaGVzSW50ZXJydXB0aW9uRmlsdGVyOwogICAgICAgICBwcml2YXRlIGludCBtVmlzaWJpbGl0eU92ZXJyaWRlOwogICAgICAgICBwcml2YXRlIGludCBtU3VwcHJlc3NlZFZpc3VhbEVmZmVjdHM7CisgICAgICAgIHByaXZhdGUgaW50IG1JbXBvcnRhbmNlOworICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtSW1wb3J0YW5jZUV4cGxhbmF0aW9uOwogCiAgICAgICAgIHB1YmxpYyBSYW5raW5nKCkge30KIApAQCAtOTA0LDcgKzk5Myw4IEBACiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIFJldHVybnMgdGhlIHR5cGUocykgb2YgdmlzdWFsIGVmZmVjdHMgdGhhdCBzaG91bGQgYmUgc3VwcHJlc3NlZCBmb3IgdGhpcyBub3RpZmljYXRpb24uCi0gICAgICAgICAqIFNlZSB7QGxpbmsgI1NVUFBSRVNTRURfRUZGRUNUX0xJR0hUU30sIHtAbGluayAjU1VQUFJFU1NFRF9FRkZFQ1RfUEVFS319LgorICAgICAgICAgKiBTZWUge0BsaW5rICNTVVBQUkVTU0VEX0VGRkVDVF9MSUdIVFN9LCB7QGxpbmsgI1NVUFBSRVNTRURfRUZGRUNUX1BFRUt9LAorICAgICAgICAgKiB7QGxpbmsgI1NVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTn0uCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IGdldFN1cHByZXNzZWRWaXN1YWxFZmZlY3RzKCkgewogICAgICAgICAgICAgcmV0dXJuIG1TdXBwcmVzc2VkVmlzdWFsRWZmZWN0czsKQEAgLTkyOCw3ICsxMDE4LDcgQEAKICAgICAgICAgICogQHJldHVybiB0aGUgcmFuayBvZiB0aGUgbm90aWZpY2F0aW9uCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IGdldEltcG9ydGFuY2UoKSB7Ci0gICAgICAgICAgICByZXR1cm4gSU1QT1JUQU5DRV9ERUZBVUxUOyAgLy8gVE9ETyBpbXBsZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gbUltcG9ydGFuY2U7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTkzOSwxOCArMTAyOSwyMCBAQAogICAgICAgICAgKiBAcmV0dXJuIHRoZSBleHBsYW5hdGlvbiBmb3IgdGhlIGltcG9ydGFuY2UsIG9yIG51bGwgaWYgaXQgaXMgdGhlIG5hdHVyYWwgaW1wb3J0YW5jZQogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRJbXBvcnRhbmNlRXhwbGFuYXRpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsgIC8vIFRPRE8gaW1wbGVtZW50CisgICAgICAgICAgICByZXR1cm4gbUltcG9ydGFuY2VFeHBsYW5hdGlvbjsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgdm9pZCBwb3B1bGF0ZShTdHJpbmcga2V5LCBpbnQgcmFuaywgYm9vbGVhbiBpc0FtYmllbnQsCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaGVzSW50ZXJydXB0aW9uRmlsdGVyLCBpbnQgdmlzaWJpbGl0eU92ZXJyaWRlLAotICAgICAgICAgICAgICAgIGludCBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0cykgeworICAgICAgICBwcml2YXRlIHZvaWQgcG9wdWxhdGUoU3RyaW5nIGtleSwgaW50IHJhbmssIGJvb2xlYW4gbWF0Y2hlc0ludGVycnVwdGlvbkZpbHRlciwKKyAgICAgICAgICAgICAgICBpbnQgdmlzaWJpbGl0eU92ZXJyaWRlLCBpbnQgc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMsIGludCBpbXBvcnRhbmNlLAorICAgICAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBleHBsYW5hdGlvbikgewogICAgICAgICAgICAgbUtleSA9IGtleTsKICAgICAgICAgICAgIG1SYW5rID0gcmFuazsKLSAgICAgICAgICAgIG1Jc0FtYmllbnQgPSBpc0FtYmllbnQ7CisgICAgICAgICAgICBtSXNBbWJpZW50ID0gaW1wb3J0YW5jZSA8IElNUE9SVEFOQ0VfREVGQVVMVDsKICAgICAgICAgICAgIG1NYXRjaGVzSW50ZXJydXB0aW9uRmlsdGVyID0gbWF0Y2hlc0ludGVycnVwdGlvbkZpbHRlcjsKICAgICAgICAgICAgIG1WaXNpYmlsaXR5T3ZlcnJpZGUgPSB2aXNpYmlsaXR5T3ZlcnJpZGU7CiAgICAgICAgICAgICBtU3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMgPSBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0czsKKyAgICAgICAgICAgIG1JbXBvcnRhbmNlID0gaW1wb3J0YW5jZTsKKyAgICAgICAgICAgIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtOTkwLDYgKzEwODIsOCBAQAogICAgICAgICBwcml2YXRlIEFycmF5U2V0PE9iamVjdD4gbUludGVyY2VwdGVkOwogICAgICAgICBwcml2YXRlIEFycmF5TWFwPFN0cmluZywgSW50ZWdlcj4gbVZpc2liaWxpdHlPdmVycmlkZXM7CiAgICAgICAgIHByaXZhdGUgQXJyYXlNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtU3VwcHJlc3NlZFZpc3VhbEVmZmVjdHM7CisgICAgICAgIHByaXZhdGUgQXJyYXlNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtSW1wb3J0YW5jZTsKKyAgICAgICAgcHJpdmF0ZSBBcnJheU1hcDxTdHJpbmcsIFN0cmluZz4gbUltcG9ydGFuY2VFeHBsYW5hdGlvbjsKIAogICAgICAgICBwcml2YXRlIFJhbmtpbmdNYXAoTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZSByYW5raW5nVXBkYXRlKSB7CiAgICAgICAgICAgICBtUmFua2luZ1VwZGF0ZSA9IHJhbmtpbmdVcGRhdGU7CkBAIC0xMDE0LDggKzExMDgsOSBAQAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0UmFua2luZyhTdHJpbmcga2V5LCBSYW5raW5nIG91dFJhbmtpbmcpIHsKICAgICAgICAgICAgIGludCByYW5rID0gZ2V0UmFuayhrZXkpOwotICAgICAgICAgICAgb3V0UmFua2luZy5wb3B1bGF0ZShrZXksIHJhbmssIGlzQW1iaWVudChrZXkpLCAhaXNJbnRlcmNlcHRlZChrZXkpLAotICAgICAgICAgICAgICAgICAgICBnZXRWaXNpYmlsaXR5T3ZlcnJpZGUoa2V5KSwgZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoa2V5KSk7CisgICAgICAgICAgICBvdXRSYW5raW5nLnBvcHVsYXRlKGtleSwgcmFuaywgIWlzSW50ZXJjZXB0ZWQoa2V5KSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0VmlzaWJpbGl0eU92ZXJyaWRlKGtleSksIGdldFN1cHByZXNzZWRWaXN1YWxFZmZlY3RzKGtleSksCisgICAgICAgICAgICAgICAgICAgIGdldEltcG9ydGFuY2Uoa2V5KSwgZ2V0SW1wb3J0YW5jZUV4cGxhbmF0aW9uKGtleSkpOwogICAgICAgICAgICAgcmV0dXJuIHJhbmsgPj0gMDsKICAgICAgICAgfQogCkBAIC0xMDI5LDE1ICsxMTI0LDYgQEAKICAgICAgICAgICAgIHJldHVybiByYW5rICE9IG51bGwgPyByYW5rIDogLTE7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNBbWJpZW50KFN0cmluZyBrZXkpIHsKLSAgICAgICAgICAgIGludCBmaXJzdEFtYmllbnRJbmRleCA9IG1SYW5raW5nVXBkYXRlLmdldEZpcnN0QW1iaWVudEluZGV4KCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RBbWJpZW50SW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IHJhbmsgPSBnZXRSYW5rKGtleSk7Ci0gICAgICAgICAgICByZXR1cm4gcmFuayA+PSAwICYmIHJhbmsgPj0gZmlyc3RBbWJpZW50SW5kZXg7Ci0gICAgICAgIH0KLQogICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNJbnRlcmNlcHRlZChTdHJpbmcga2V5KSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgICAgICBpZiAobUludGVyY2VwdGVkID09IG51bGwpIHsKQEAgLTEwNzMsNiArMTE1OSwyOCBAQAogICAgICAgICAgICAgcmV0dXJuIHN1cHByZXNzZWQuaW50VmFsdWUoKTsKICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgaW50IGdldEltcG9ydGFuY2UoU3RyaW5nIGtleSkgeworICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICAgICAgaWYgKG1JbXBvcnRhbmNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRJbXBvcnRhbmNlTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgSW50ZWdlciBpbXBvcnRhbmNlID0gbUltcG9ydGFuY2UuZ2V0KGtleSk7CisgICAgICAgICAgICBpZiAoaW1wb3J0YW5jZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFJhbmtpbmcuSU1QT1JUQU5DRV9ERUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGltcG9ydGFuY2UuaW50VmFsdWUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgU3RyaW5nIGdldEltcG9ydGFuY2VFeHBsYW5hdGlvbihTdHJpbmcga2V5KSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobUltcG9ydGFuY2VFeHBsYW5hdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkSW1wb3J0YW5jZUV4cGxhbmF0aW9uTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24uZ2V0KGtleSk7CisgICAgICAgIH0KKwogICAgICAgICAvLyBMb2NrZWQgYnkgJ3RoaXMnCiAgICAgICAgIHByaXZhdGUgdm9pZCBidWlsZFJhbmtzTG9ja2VkKCkgewogICAgICAgICAgICAgU3RyaW5nW10gb3JkZXJlZEtleXMgPSBtUmFua2luZ1VwZGF0ZS5nZXRPcmRlcmVkS2V5cygpOwpAQCAtMTEwNyw2ICsxMjE1LDI1IEBACiAgICAgICAgICAgICAgICAgbVN1cHByZXNzZWRWaXN1YWxFZmZlY3RzLnB1dChrZXksIHN1cHByZXNzZWRCdW5kbGUuZ2V0SW50KGtleSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIC8vIExvY2tlZCBieSAndGhpcycKKyAgICAgICAgcHJpdmF0ZSB2b2lkIGJ1aWxkSW1wb3J0YW5jZUxvY2tlZCgpIHsKKyAgICAgICAgICAgIFN0cmluZ1tdIG9yZGVyZWRLZXlzID0gbVJhbmtpbmdVcGRhdGUuZ2V0T3JkZXJlZEtleXMoKTsKKyAgICAgICAgICAgIGludFtdIGltcG9ydGFuY2UgPSBtUmFua2luZ1VwZGF0ZS5nZXRJbXBvcnRhbmNlKCk7CisgICAgICAgICAgICBtSW1wb3J0YW5jZSA9IG5ldyBBcnJheU1hcDw+KG9yZGVyZWRLZXlzLmxlbmd0aCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9yZGVyZWRLZXlzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IG9yZGVyZWRLZXlzW2ldOworICAgICAgICAgICAgICAgIG1JbXBvcnRhbmNlLnB1dChrZXksIGltcG9ydGFuY2VbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTG9ja2VkIGJ5ICd0aGlzJworICAgICAgICBwcml2YXRlIHZvaWQgYnVpbGRJbXBvcnRhbmNlRXhwbGFuYXRpb25Mb2NrZWQoKSB7CisgICAgICAgICAgICBCdW5kbGUgZXhwbGFuYXRpb25CdW5kbGUgPSBtUmFua2luZ1VwZGF0ZS5nZXRJbXBvcnRhbmNlRXhwbGFuYXRpb24oKTsKKyAgICAgICAgICAgIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24gPSBuZXcgQXJyYXlNYXA8PihleHBsYW5hdGlvbkJ1bmRsZS5zaXplKCkpOworICAgICAgICAgICAgZm9yIChTdHJpbmcga2V5OiBleHBsYW5hdGlvbkJ1bmRsZS5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24ucHV0KGtleSwgZXhwbGFuYXRpb25CdW5kbGUuZ2V0U3RyaW5nKGtleSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgLy8gLS0tLS0tLS0tLS0gUGFyY2VsYWJsZQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25SYW5raW5nVXBkYXRlLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25SYW5raW5nVXBkYXRlLmphdmEKaW5kZXggMTI4MmZiMS4uNzlmNmZjNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUuamF2YQpAQCAtMjYsMjUgKzI2LDMwIEBACiAgICAgLy8gVE9ETzogU3VwcG9ydCBpbmNyZW1lbnRhbCB1cGRhdGVzLgogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbUtleXM7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtSW50ZXJjZXB0ZWRLZXlzOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1GaXJzdEFtYmllbnRJbmRleDsKICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtVmlzaWJpbGl0eU92ZXJyaWRlczsKICAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtU3VwcHJlc3NlZFZpc3VhbEVmZmVjdHM7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtSW1wb3J0YW5jZTsKKyAgICBwcml2YXRlIGZpbmFsIEJ1bmRsZSBtSW1wb3J0YW5jZUV4cGxhbmF0aW9uOwogCiAgICAgcHVibGljIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUoU3RyaW5nW10ga2V5cywgU3RyaW5nW10gaW50ZXJjZXB0ZWRLZXlzLAotICAgICAgICAgICAgQnVuZGxlIHZpc2liaWxpdHlPdmVycmlkZXMsIGludCBmaXJzdEFtYmllbnRJbmRleCwgQnVuZGxlIHN1cHByZXNzZWRWaXN1YWxFZmZlY3RzKSB7CisgICAgICAgICAgICBCdW5kbGUgdmlzaWJpbGl0eU92ZXJyaWRlcywgQnVuZGxlIHN1cHByZXNzZWRWaXN1YWxFZmZlY3RzLAorICAgICAgICAgICAgaW50W10gaW1wb3J0YW5jZSwgQnVuZGxlIGV4cGxhbmF0aW9uKSB7CiAgICAgICAgIG1LZXlzID0ga2V5czsKLSAgICAgICAgbUZpcnN0QW1iaWVudEluZGV4ID0gZmlyc3RBbWJpZW50SW5kZXg7CiAgICAgICAgIG1JbnRlcmNlcHRlZEtleXMgPSBpbnRlcmNlcHRlZEtleXM7CiAgICAgICAgIG1WaXNpYmlsaXR5T3ZlcnJpZGVzID0gdmlzaWJpbGl0eU92ZXJyaWRlczsKICAgICAgICAgbVN1cHByZXNzZWRWaXN1YWxFZmZlY3RzID0gc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHM7CisgICAgICAgIG1JbXBvcnRhbmNlID0gaW1wb3J0YW5jZTsKKyAgICAgICAgbUltcG9ydGFuY2VFeHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uOwogICAgIH0KIAogICAgIHB1YmxpYyBOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlKFBhcmNlbCBpbikgewogICAgICAgICBtS2V5cyA9IGluLnJlYWRTdHJpbmdBcnJheSgpOwotICAgICAgICBtRmlyc3RBbWJpZW50SW5kZXggPSBpbi5yZWFkSW50KCk7CiAgICAgICAgIG1JbnRlcmNlcHRlZEtleXMgPSBpbi5yZWFkU3RyaW5nQXJyYXkoKTsKICAgICAgICAgbVZpc2liaWxpdHlPdmVycmlkZXMgPSBpbi5yZWFkQnVuZGxlKCk7CiAgICAgICAgIG1TdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyA9IGluLnJlYWRCdW5kbGUoKTsKKyAgICAgICAgbUltcG9ydGFuY2UgPSBuZXcgaW50W21LZXlzLmxlbmd0aF07CisgICAgICAgIGluLnJlYWRJbnRBcnJheShtSW1wb3J0YW5jZSk7CisgICAgICAgIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24gPSBpbi5yZWFkQnVuZGxlKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01NSwxMCArNjAsMTEgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBvdXQsIGludCBmbGFncykgewogICAgICAgICBvdXQud3JpdGVTdHJpbmdBcnJheShtS2V5cyk7Ci0gICAgICAgIG91dC53cml0ZUludChtRmlyc3RBbWJpZW50SW5kZXgpOwogICAgICAgICBvdXQud3JpdGVTdHJpbmdBcnJheShtSW50ZXJjZXB0ZWRLZXlzKTsKICAgICAgICAgb3V0LndyaXRlQnVuZGxlKG1WaXNpYmlsaXR5T3ZlcnJpZGVzKTsKICAgICAgICAgb3V0LndyaXRlQnVuZGxlKG1TdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyk7CisgICAgICAgIG91dC53cml0ZUludEFycmF5KG1JbXBvcnRhbmNlKTsKKyAgICAgICAgb3V0LndyaXRlQnVuZGxlKG1JbXBvcnRhbmNlRXhwbGFuYXRpb24pOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGU+IENSRUFUT1IKQEAgLTc2LDEwICs4Miw2IEBACiAgICAgICAgIHJldHVybiBtS2V5czsKICAgICB9CiAKLSAgICBwdWJsaWMgaW50IGdldEZpcnN0QW1iaWVudEluZGV4KCkgewotICAgICAgICByZXR1cm4gbUZpcnN0QW1iaWVudEluZGV4OwotICAgIH0KLQogICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRJbnRlcmNlcHRlZEtleXMoKSB7CiAgICAgICAgIHJldHVybiBtSW50ZXJjZXB0ZWRLZXlzOwogICAgIH0KQEAgLTkxLDQgKzkzLDEyIEBACiAgICAgcHVibGljIEJ1bmRsZSBnZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cygpIHsKICAgICAgICAgcmV0dXJuIG1TdXBwcmVzc2VkVmlzdWFsRWZmZWN0czsKICAgICB9CisKKyAgICBwdWJsaWMgaW50W10gZ2V0SW1wb3J0YW5jZSgpIHsKKyAgICAgICAgcmV0dXJuIG1JbXBvcnRhbmNlOworICAgIH0KKworICAgIHB1YmxpYyBCdW5kbGUgZ2V0SW1wb3J0YW5jZUV4cGxhbmF0aW9uKCkgeworICAgICAgICByZXR1cm4gbUltcG9ydGFuY2VFeHBsYW5hdGlvbjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9TdGF0dXNCYXJOb3RpZmljYXRpb24uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbi5qYXZhCmluZGV4IDJjYWI5MTQuLjE5OGU0M2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1N0YXR1c0Jhck5vdGlmaWNhdGlvbi5qYXZhCkBAIC00Miw3ICs0Miw2IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBVc2VySGFuZGxlIHVzZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIHBvc3RUaW1lOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgc2NvcmU7CiAgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OyAvLyB1c2VkIGZvciBpbmZsYXRpb24gJiBpY29uIGV4cGFuc2lvbgogCiAgICAgLyoqIEBoaWRlICovCkBAIC02NCw3ICs2Myw2IEBACiAgICAgICAgIHRoaXMudGFnID0gdGFnOwogICAgICAgICB0aGlzLnVpZCA9IHVpZDsKICAgICAgICAgdGhpcy5pbml0aWFsUGlkID0gaW5pdGlhbFBpZDsKLSAgICAgICAgdGhpcy5zY29yZSA9IHNjb3JlOwogICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbjsKICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKICAgICAgICAgdGhpcy5wb3N0VGltZSA9IHBvc3RUaW1lOwpAQCAtODMsNyArODEsNiBAQAogICAgICAgICB9CiAgICAgICAgIHRoaXMudWlkID0gaW4ucmVhZEludCgpOwogICAgICAgICB0aGlzLmluaXRpYWxQaWQgPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgIHRoaXMuc2NvcmUgPSBpbi5yZWFkSW50KCk7CiAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbihpbik7CiAgICAgICAgIHRoaXMudXNlciA9IFVzZXJIYW5kbGUucmVhZEZyb21QYXJjZWwoaW4pOwogICAgICAgICB0aGlzLnBvc3RUaW1lID0gaW4ucmVhZExvbmcoKTsKQEAgLTEyMCw3ICsxMTcsNiBAQAogICAgICAgICB9CiAgICAgICAgIG91dC53cml0ZUludCh0aGlzLnVpZCk7CiAgICAgICAgIG91dC53cml0ZUludCh0aGlzLmluaXRpYWxQaWQpOwotICAgICAgICBvdXQud3JpdGVJbnQodGhpcy5zY29yZSk7CiAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uLndyaXRlVG9QYXJjZWwob3V0LCBmbGFncyk7CiAgICAgICAgIHVzZXIud3JpdGVUb1BhcmNlbChvdXQsIGZsYWdzKTsKIApAQCAtMTUzLDE0ICsxNDksMTQgQEAKICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24uY2xvbmVJbnRvKG5vLCBmYWxzZSk7IC8vIGxpZ2h0IGNvcHkKICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24odGhpcy5wa2csIHRoaXMub3BQa2csCiAgICAgICAgICAgICAgICAgdGhpcy5pZCwgdGhpcy50YWcsIHRoaXMudWlkLCB0aGlzLmluaXRpYWxQaWQsCi0gICAgICAgICAgICAgICAgdGhpcy5zY29yZSwgbm8sIHRoaXMudXNlciwgdGhpcy5wb3N0VGltZSk7CisgICAgICAgICAgICAgICAgMCwgbm8sIHRoaXMudXNlciwgdGhpcy5wb3N0VGltZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBjbG9uZSgpIHsKICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24odGhpcy5wa2csIHRoaXMub3BQa2csCiAgICAgICAgICAgICAgICAgdGhpcy5pZCwgdGhpcy50YWcsIHRoaXMudWlkLCB0aGlzLmluaXRpYWxQaWQsCi0gICAgICAgICAgICAgICAgdGhpcy5zY29yZSwgdGhpcy5ub3RpZmljYXRpb24uY2xvbmUoKSwgdGhpcy51c2VyLCB0aGlzLnBvc3RUaW1lKTsKKyAgICAgICAgICAgICAgICAwLCB0aGlzLm5vdGlmaWNhdGlvbi5jbG9uZSgpLCB0aGlzLnVzZXIsIHRoaXMucG9zdFRpbWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTY4LDcgKzE2NCw3IEBACiAgICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KAogICAgICAgICAgICAgICAgICJTdGF0dXNCYXJOb3RpZmljYXRpb24ocGtnPSVzIHVzZXI9JXMgaWQ9JWQgdGFnPSVzIHNjb3JlPSVkIGtleT0lczogJXMpIiwKICAgICAgICAgICAgICAgICB0aGlzLnBrZywgdGhpcy51c2VyLCB0aGlzLmlkLCB0aGlzLnRhZywKLSAgICAgICAgICAgICAgICB0aGlzLnNjb3JlLCB0aGlzLmtleSwgdGhpcy5ub3RpZmljYXRpb24pOworICAgICAgICAgICAgICAgIDAsIHRoaXMua2V5LCB0aGlzLm5vdGlmaWNhdGlvbik7CiAgICAgfQogCiAgICAgLyoqIENvbnZlbmllbmNlIG1ldGhvZCB0byBjaGVjayB0aGUgbm90aWZpY2F0aW9uJ3MgZmxhZ3MgZm9yCkBAIC0yNDcsMTEgKzI0Myw2IEBACiAgICAgICAgIHJldHVybiBwb3N0VGltZTsKICAgICB9CiAKLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgaW50IGdldFNjb3JlKCkgewotICAgICAgICByZXR1cm4gc2NvcmU7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogQSB1bmlxdWUgaW5zdGFuY2Uga2V5IGZvciB0aGlzIG5vdGlmaWNhdGlvbiByZWNvcmQuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9aZW5Nb2RlQ29uZmlnLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL25vdGlmaWNhdGlvbi9aZW5Nb2RlQ29uZmlnLmphdmEKaW5kZXggNTQxNjIzZC4uNDY4ODg0MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9ub3RpZmljYXRpb24vWmVuTW9kZUNvbmZpZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2Uvbm90aWZpY2F0aW9uL1plbk1vZGVDb25maWcuamF2YQpAQCAtNzksNiArNzksNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9BTExPV19SRVBFQVRfQ0FMTEVSUyA9IGZhbHNlOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVGQVVMVF9BTExPV19QRUVLID0gdHJ1ZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfQUxMT1dfTElHSFRTID0gdHJ1ZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFRkFVTFRfQUxMT1dfU0NSRUVOX09OID0gdHJ1ZTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBYTUxfVkVSU0lPTiA9IDI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpFTl9UQUcgPSAiemVuIjsKQEAgLTk1LDYgKzk2LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMT1dfQVRUX0VWRU5UUyA9ICJldmVudHMiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTExPV19BVFRfUEVFSyA9ICJwZWVrIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUxMT1dfQVRUX0xJR0hUUyA9ICJsaWdodHMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTExPV19BVFRfU0NSRUVOX09OID0gInNjcmVlbl9vbiI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORElUSU9OX1RBRyA9ICJjb25kaXRpb24iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05ESVRJT05fQVRUX0NPTVBPTkVOVCA9ICJjb21wb25lbnQiOwpAQCAtMTI4LDYgKzEzMCw3IEBACiAgICAgcHVibGljIGludCB1c2VyID0gVXNlckhhbmRsZS5VU0VSX1NZU1RFTTsKICAgICBwdWJsaWMgYm9vbGVhbiBhbGxvd1BlZWsgPSBERUZBVUxUX0FMTE9XX1BFRUs7CiAgICAgcHVibGljIGJvb2xlYW4gYWxsb3dMaWdodHMgPSBERUZBVUxUX0FMTE9XX0xJR0hUUzsKKyAgICBwdWJsaWMgYm9vbGVhbiBhbGxvd1NjcmVlbk9uID0gREVGQVVMVF9BTExPV19TQ1JFRU5fT047CiAKICAgICBwdWJsaWMgWmVuUnVsZSBtYW51YWxSdWxlOwogICAgIHB1YmxpYyBBcnJheU1hcDxTdHJpbmcsIFplblJ1bGU+IGF1dG9tYXRpY1J1bGVzID0gbmV3IEFycmF5TWFwPD4oKTsKQEAgLTE1Niw2ICsxNTksNyBAQAogICAgICAgICB9CiAgICAgICAgIGFsbG93UGVlayA9IHNvdXJjZS5yZWFkSW50KCkgPT0gMTsKICAgICAgICAgYWxsb3dMaWdodHMgPSBzb3VyY2UucmVhZEludCgpID09IDE7CisgICAgICAgIGFsbG93U2NyZWVuT24gPSBzb3VyY2UucmVhZEludCgpID09IDE7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xODUsNiArMTg5LDcgQEAKICAgICAgICAgfQogICAgICAgICBkZXN0LndyaXRlSW50KGFsbG93UGVlayA/IDEgOiAwKTsKICAgICAgICAgZGVzdC53cml0ZUludChhbGxvd0xpZ2h0cyA/IDEgOiAwKTsKKyAgICAgICAgZGVzdC53cml0ZUludChhbGxvd1NjcmVlbk9uID8gMSA6IDApOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMjAwLDYgKzIwNSw3IEBACiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLGFsbG93RXZlbnRzPSIpLmFwcGVuZChhbGxvd0V2ZW50cykKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIsYWxsb3dQZWVrPSIpLmFwcGVuZChhbGxvd1BlZWspCiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiLGFsbG93TGlnaHRzPSIpLmFwcGVuZChhbGxvd0xpZ2h0cykKKyAgICAgICAgICAgICAgICAuYXBwZW5kKCIsYWxsb3dTY3JlZW5Pbj0iKS5hcHBlbmQoYWxsb3dTY3JlZW5PbikKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIsYXV0b21hdGljUnVsZXM9IikuYXBwZW5kKGF1dG9tYXRpY1J1bGVzKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIixtYW51YWxSdWxlPSIpLmFwcGVuZChtYW51YWxSdWxlKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoJ10nKS50b1N0cmluZygpOwpAQCAtMjQwLDYgKzI0Niw5IEBACiAgICAgICAgIGlmIChhbGxvd0xpZ2h0cyAhPSB0by5hbGxvd0xpZ2h0cykgewogICAgICAgICAgICAgZC5hZGRMaW5lKCJhbGxvd0xpZ2h0cyIsIGFsbG93TGlnaHRzLCB0by5hbGxvd0xpZ2h0cyk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbG93U2NyZWVuT24gIT0gdG8uYWxsb3dTY3JlZW5PbikgeworICAgICAgICAgICAgZC5hZGRMaW5lKCJhbGxvd1NjcmVlbk9uIiwgYWxsb3dTY3JlZW5PbiwgdG8uYWxsb3dTY3JlZW5Pbik7CisgICAgICAgIH0KICAgICAgICAgZmluYWwgQXJyYXlTZXQ8U3RyaW5nPiBhbGxSdWxlcyA9IG5ldyBBcnJheVNldDw+KCk7CiAgICAgICAgIGFkZEtleXMoYWxsUnVsZXMsIGF1dG9tYXRpY1J1bGVzKTsKICAgICAgICAgYWRkS2V5cyhhbGxSdWxlcywgdG8uYXV0b21hdGljUnVsZXMpOwpAQCAtMzM5LDYgKzM0OCw3IEBACiAgICAgICAgICAgICAgICAgJiYgb3RoZXIuYWxsb3dFdmVudHMgPT0gYWxsb3dFdmVudHMKICAgICAgICAgICAgICAgICAmJiBvdGhlci5hbGxvd1BlZWsgPT0gYWxsb3dQZWVrCiAgICAgICAgICAgICAgICAgJiYgb3RoZXIuYWxsb3dMaWdodHMgPT0gYWxsb3dMaWdodHMKKyAgICAgICAgICAgICAgICAmJiBvdGhlci5hbGxvd1NjcmVlbk9uID09IGFsbG93U2NyZWVuT24KICAgICAgICAgICAgICAgICAmJiBvdGhlci51c2VyID09IHVzZXIKICAgICAgICAgICAgICAgICAmJiBPYmplY3RzLmVxdWFscyhvdGhlci5hdXRvbWF0aWNSdWxlcywgYXV0b21hdGljUnVsZXMpCiAgICAgICAgICAgICAgICAgJiYgT2JqZWN0cy5lcXVhbHMob3RoZXIubWFudWFsUnVsZSwgbWFudWFsUnVsZSk7CkBAIC0zNDgsNyArMzU4LDcgQEAKICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICByZXR1cm4gT2JqZWN0cy5oYXNoKGFsbG93Q2FsbHMsIGFsbG93UmVwZWF0Q2FsbGVycywgYWxsb3dNZXNzYWdlcywgYWxsb3dDYWxsc0Zyb20sCiAgICAgICAgICAgICAgICAgYWxsb3dNZXNzYWdlc0Zyb20sIGFsbG93UmVtaW5kZXJzLCBhbGxvd0V2ZW50cywgYWxsb3dQZWVrLCBhbGxvd0xpZ2h0cywKLSAgICAgICAgICAgICAgICB1c2VyLCBhdXRvbWF0aWNSdWxlcywgbWFudWFsUnVsZSk7CisgICAgICAgICAgICAgICAgYWxsb3dTY3JlZW5PbiwgdXNlciwgYXV0b21hdGljUnVsZXMsIG1hbnVhbFJ1bGUpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0b0RheUxpc3QoaW50W10gZGF5cykgewpAQCAtNDM1LDYgKzQ0NSw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcnQuYWxsb3dQZWVrID0gc2FmZUJvb2xlYW4ocGFyc2VyLCBBTExPV19BVFRfUEVFSywgREVGQVVMVF9BTExPV19QRUVLKTsKICAgICAgICAgICAgICAgICAgICAgcnQuYWxsb3dMaWdodHMgPSBzYWZlQm9vbGVhbihwYXJzZXIsIEFMTE9XX0FUVF9MSUdIVFMsIERFRkFVTFRfQUxMT1dfTElHSFRTKTsKKyAgICAgICAgICAgICAgICAgICAgcnQuYWxsb3dTY3JlZW5PbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZUJvb2xlYW4ocGFyc2VyLCBBTExPV19BVFRfU0NSRUVOX09OLCBERUZBVUxUX0FMTE9XX1NDUkVFTl9PTik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNQU5VQUxfVEFHLmVxdWFscyh0YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJ0Lm1hbnVhbFJ1bGUgPSByZWFkUnVsZVhtbChwYXJzZXIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQVVUT01BVElDX1RBRy5lcXVhbHModGFnKSkgewpAQCAtNDY1LDYgKzQ3Nyw3IEBACiAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQUxMT1dfQVRUX01FU1NBR0VTX0ZST00sIEludGVnZXIudG9TdHJpbmcoYWxsb3dNZXNzYWdlc0Zyb20pKTsKICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBTExPV19BVFRfUEVFSywgQm9vbGVhbi50b1N0cmluZyhhbGxvd1BlZWspKTsKICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBTExPV19BVFRfTElHSFRTLCBCb29sZWFuLnRvU3RyaW5nKGFsbG93TGlnaHRzKSk7CisgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQUxMT1dfQVRUX1NDUkVFTl9PTiwgQm9vbGVhbi50b1N0cmluZyhhbGxvd1NjcmVlbk9uKSk7CiAgICAgICAgIG91dC5lbmRUYWcobnVsbCwgQUxMT1dfVEFHKTsKIAogICAgICAgICBpZiAobWFudWFsUnVsZSAhPSBudWxsKSB7CkBAIC02NDMsNiArNjU2LDkgQEAKICAgICAgICAgaWYgKCFhbGxvd0xpZ2h0cykgewogICAgICAgICAgICAgc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMgfD0gUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUzsKICAgICAgICAgfQorICAgICAgICBpZiAoIWFsbG93U2NyZWVuT24pIHsKKyAgICAgICAgICAgIHN1cHByZXNzZWRWaXN1YWxFZmZlY3RzIHw9IFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT047CisgICAgICAgIH0KICAgICAgICAgcHJpb3JpdHlDYWxsU2VuZGVycyA9IHNvdXJjZVRvUHJpb3JpdHlTZW5kZXJzKGFsbG93Q2FsbHNGcm9tLCBwcmlvcml0eUNhbGxTZW5kZXJzKTsKICAgICAgICAgcHJpb3JpdHlNZXNzYWdlU2VuZGVycyA9IHNvdXJjZVRvUHJpb3JpdHlTZW5kZXJzKGFsbG93TWVzc2FnZXNGcm9tLCBwcmlvcml0eU1lc3NhZ2VTZW5kZXJzKTsKICAgICAgICAgcmV0dXJuIG5ldyBQb2xpY3kocHJpb3JpdHlDYXRlZ29yaWVzLCBwcmlvcml0eUNhbGxTZW5kZXJzLCBwcmlvcml0eU1lc3NhZ2VTZW5kZXJzLApAQCAtNjgxLDYgKzY5Nyw4IEBACiAgICAgICAgIGlmIChwb2xpY3kuc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMgIT0gUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUU19VTlNFVCkgewogICAgICAgICAgICAgYWxsb3dQZWVrID0gKHBvbGljeS5zdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyAmIFBvbGljeS5TVVBQUkVTU0VEX0VGRkVDVF9QRUVLKSA9PSAwOwogICAgICAgICAgICAgYWxsb3dMaWdodHMgPSAocG9saWN5LnN1cHByZXNzZWRWaXN1YWxFZmZlY3RzICYgUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUykgPT0gMDsKKyAgICAgICAgICAgIGFsbG93U2NyZWVuT24gPQorICAgICAgICAgICAgICAgICAgICAocG9saWN5LnN1cHByZXNzZWRWaXN1YWxFZmZlY3RzICYgUG9saWN5LlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTikgPT0gMDsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL0lRU1NlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNTZXJ2aWNlLmFpZGwKaW5kZXggN2U3MDUwMS4uNGJmYzk0ODkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNTZXJ2aWNlLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL0lRU1NlcnZpY2UuYWlkbApAQCAtMTYsNiArMTYsNyBAQAogcGFja2FnZSBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5nczsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlOwogCiAvKioKQEAgLTIzLDUgKzI0LDEyIEBACiAgKi8KIGludGVyZmFjZSBJUVNTZXJ2aWNlIHsKICAgICB2b2lkIHVwZGF0ZVFzVGlsZShpbiBUaWxlIHRpbGUpOworICAgIHZvaWQgdXBkYXRlU3RhdHVzSWNvbihpbiBUaWxlIHRpbGUsIGluIEljb24gaWNvbiwKKyAgICAgICAgICAgIFN0cmluZyBjb250ZW50RGVzY3JpcHRpb24pOwogICAgIHZvaWQgb25TaG93RGlhbG9nKGluIFRpbGUgdGlsZSk7CisgICAgdm9pZCBvblN0YXJ0QWN0aXZpdHkoaW4gVGlsZSB0aWxlKTsKKyAgICB2b2lkIHNldFRpbGVNb2RlKGluIENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgbW9kZSk7CisgICAgYm9vbGVhbiBpc0xvY2tlZCgpOworICAgIGJvb2xlYW4gaXNTZWN1cmUoKTsKKyAgICB2b2lkIHN0YXJ0VW5sb2NrQW5kUnVuKGluIFRpbGUgdGlsZSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvSVFTVGlsZVNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCmluZGV4IDYzYTRjNWUuLmJmZGU4NzAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9JUVNUaWxlU2VydmljZS5haWRsCkBAIC0yMiwxMCArMjIsMTIgQEAKICAqIEBoaWRlCiAgKi8KIG9uZXdheSBpbnRlcmZhY2UgSVFTVGlsZVNlcnZpY2UgeworICAgIHZvaWQgc2V0UVNTZXJ2aWNlKGluIElRU1NlcnZpY2Ugc2VydmljZSk7CiAgICAgdm9pZCBzZXRRU1RpbGUoaW4gVGlsZSB0aWxlKTsKICAgICB2b2lkIG9uVGlsZUFkZGVkKCk7CiAgICAgdm9pZCBvblRpbGVSZW1vdmVkKCk7CiAgICAgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCk7CiAgICAgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKTsKICAgICB2b2lkIG9uQ2xpY2soSUJpbmRlciB3dG9rZW4pOworICAgIHZvaWQgb25VbmxvY2tDb21wbGV0ZSgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlLmphdmEKaW5kZXggYTUzZmM1OS4uODVmMTk1NSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGUuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC9zZXJ2aWNlL3F1aWNrc2V0dGluZ3MvVGlsZS5qYXZhCkBAIC0zNiwxMSArMzYsMzkgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVGlsZSI7CiAKKyAgICAvKioKKyAgICAgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHN0YXRlIG9mIGFueSB0aWxlLCB1bnRpbCB1cGRhdGVkIGJ5IHRoZSB7QGxpbmsgVGlsZVNlcnZpY2V9LgorICAgICAqIDxwPgorICAgICAqIEFuIHVuYXZhaWxhYmxlIHN0YXRlIGluZGljYXRlcyB0aGF0IGZvciBzb21lIHJlYXNvbiB0aGlzIHRpbGUgaXMgbm90IGN1cnJlbnRseQorICAgICAqIGF2YWlsYWJsZSB0byB0aGUgdXNlciBmb3Igc29tZSByZWFzb24sIGFuZCB3aWxsIGhhdmUgbm8gY2xpY2sgYWN0aW9uLiAgVGhlIHRpbGUncworICAgICAqIGljb24gd2lsbCBiZSB0aW50ZWQgZGlmZmVyZW50bHkgdG8gcmVmbGVjdCB0aGlzIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VOQVZBSUxBQkxFID0gMDsKKworICAgIC8qKgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBhIHRpbGUgdGhhdCBpcyBjdXJyZW50bHkgaW4gYSBkaXNhYmxlZCBzdGF0ZSBidXQgaXMgc3RpbGwgaW50ZXJhY3RhYmxlLgorICAgICAqCisgICAgICogQSBkaXNhYmxlZCBzdGF0ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdGlsZSBpcyBub3QgY3VycmVudGx5IGFjdGl2ZSAoZS5nLiB3aWZpIGRpc2Nvbm5lY3RlZCBvcgorICAgICAqIGJsdWV0b290aCBkaXNhYmxlZCksIGJ1dCBpcyBzdGlsbCBpbnRlcmFjdGFibGUgYnkgdGhlIHVzZXIgdG8gbW9kaWZ5IHRoaXMgc3RhdGUuICBUaWxlcworICAgICAqIHRoYXQgaGF2ZSBib29sZWFuIHN0YXRlcyBzaG91bGQgdXNlIHRoaXMgdG8gcmVwcmVzZW50IG9uZSBvZiB0aGVpciBzdGF0ZXMuICBUaGUgdGlsZSdzCisgICAgICogaWNvbiB3aWxsIGJlIHRpbnRlZCBkaWZmZXJlbnRseSB0byByZWZsZWN0IHRoaXMgc3RhdGUsIGJ1dCBzdGlsbCBiZSBkaXN0aW5jdCBmcm9tIHVuYXZhaWxhYmxlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX0lOQUNUSVZFID0gMTsKKworICAgIC8qKgorICAgICAqIFRoaXMgcmVwcmVzZW50cyBhIHRpbGUgdGhhdCBpcyBjdXJyZW50bHkgYWN0aXZlLiAoZS5nLiB3aWZpIGlzIGNvbm5lY3RlZCwgYmx1ZXRvb3RoIGlzIG9uLAorICAgICAqIGNhc3QgaXMgY2FzdGluZykuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfQUNUSVZFID0gMjsKKwogICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBtQ29tcG9uZW50TmFtZTsKLSAgICBwcml2YXRlIElRU1NlcnZpY2UgbVNlcnZpY2U7CiAgICAgcHJpdmF0ZSBJY29uIG1JY29uOwogICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1MYWJlbDsKICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtQ29udGVudERlc2NyaXB0aW9uOworICAgIC8vIERlZmF1bHQgdG8gYWN0aXZlIHVudGlsIGNsaWVudHMgb2YgdGhlIG5ldyBBUEkgY2FuIHVwZGF0ZS4KKyAgICBwcml2YXRlIGludCBtU3RhdGUgPSBTVEFURV9BQ1RJVkU7CisKKyAgICBwcml2YXRlIElRU1NlcnZpY2UgbVNlcnZpY2U7CiAKICAgICAvKioKICAgICAgKiBAaGlkZQpAQCAtNTIsOCArODAsMTQgQEAKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBUaWxlKENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSwgSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgcHVibGljIFRpbGUoQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lKSB7CiAgICAgICAgIG1Db21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CiAgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKICAgICB9CiAKQEAgLTY1LDYgKzk5LDM2IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgSVFTU2VydmljZSBnZXRRc1NlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiBtU2VydmljZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdGlsZS4KKyAgICAgKgorICAgICAqIEBzZWUgI1NUQVRFX1VOQVZBSUxBQkxFCisgICAgICogQHNlZSAjU1RBVEVfSU5BQ1RJVkUKKyAgICAgKiBAc2VlICNTVEFURV9BQ1RJVkUKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFN0YXRlKCkgeworICAgICAgICByZXR1cm4gbVN0YXRlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIHRoZSB0aWxlLgorICAgICAqCisgICAgICogRG9lcyBub3QgdGFrZSBlZmZlY3QgdW50aWwge0BsaW5rICN1cGRhdGVUaWxlKCl9IGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzdGF0ZSBPbmUgb2Yge0BsaW5rICNTVEFURV9VTkFWQUlMQUJMRX0sIHtAbGluayAjU1RBVEVfSU5BQ1RJVkV9LAorICAgICAqIHtAbGluayAjU1RBVEVfQUNUSVZFfQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFN0YXRlKGludCBzdGF0ZSkgeworICAgICAgICBtU3RhdGUgPSBzdGF0ZTsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGljb24gZm9yIHRoZSB0aWxlLgogICAgICAqLwogICAgIHB1YmxpYyBJY29uIGdldEljb24oKSB7CkBAIC0xMzcsMjEgKzIwMSw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBAaGlkZQotICAgICAqIE5vdGlmaWVzIHRoZSBJUVNTZXJ2aWNlIHRoYXQgdGhpcyB0aWxlIGlzIHNob3dpbmcgYSBkaWFsb2cuCi0gICAgICovCi0gICAgdm9pZCBvblNob3dEaWFsb2coKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtU2VydmljZS5vblNob3dEaWFsb2codGhpcyk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZG4ndCBvblNob3dEaWFsb2ciKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgewotICAgICAgICBkZXN0LndyaXRlU3Ryb25nSW50ZXJmYWNlKG1TZXJ2aWNlKTsKICAgICAgICAgaWYgKG1Db21wb25lbnROYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIGRlc3Qud3JpdGVCeXRlKChieXRlKSAxKTsKICAgICAgICAgICAgIG1Db21wb25lbnROYW1lLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOwpAQCAtMTY0LDEyICsyMTUsMTIgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRlc3Qud3JpdGVCeXRlKChieXRlKSAwKTsKICAgICAgICAgfQorICAgICAgICBkZXN0LndyaXRlSW50KG1TdGF0ZSk7CiAgICAgICAgIFRleHRVdGlscy53cml0ZVRvUGFyY2VsKG1MYWJlbCwgZGVzdCwgZmxhZ3MpOwogICAgICAgICBUZXh0VXRpbHMud3JpdGVUb1BhcmNlbChtQ29udGVudERlc2NyaXB0aW9uLCBkZXN0LCBmbGFncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlYWRGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKLSAgICAgICAgbVNlcnZpY2UgPSBJUVNTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc291cmNlLnJlYWRTdHJvbmdCaW5kZXIoKSk7CiAgICAgICAgIGlmIChzb3VyY2UucmVhZEJ5dGUoKSAhPSAwKSB7CiAgICAgICAgICAgICBtQ29tcG9uZW50TmFtZSA9IENvbXBvbmVudE5hbWUuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKHNvdXJjZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xODAsNiArMjMxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1JY29uID0gbnVsbDsKICAgICAgICAgfQorICAgICAgICBtU3RhdGUgPSBzb3VyY2UucmVhZEludCgpOwogICAgICAgICBtTGFiZWwgPSBUZXh0VXRpbHMuQ0hBUl9TRVFVRU5DRV9DUkVBVE9SLmNyZWF0ZUZyb21QYXJjZWwoc291cmNlKTsKICAgICAgICAgbUNvbnRlbnREZXNjcmlwdGlvbiA9IFRleHRVdGlscy5DSEFSX1NFUVVFTkNFX0NSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChzb3VyY2UpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3NlcnZpY2UvcXVpY2tzZXR0aW5ncy9UaWxlU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGVTZXJ2aWNlLmphdmEKaW5kZXggZmQyZDViMC4uYzAyNDY1YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGVTZXJ2aWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvc2VydmljZS9xdWlja3NldHRpbmdzL1RpbGVTZXJ2aWNlLmphdmEKQEAgLTE1LDkgKzE1LDE0IEBACiAgKi8KIHBhY2thZ2UgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3M7CiAKK2ltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TeXN0ZW1BcGk7CiBpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKQEAgLTI2LDI5ICszMSwyOSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogCiAvKioKLSAqIEEgUVNUaWxlU2VydmljZSBwcm92aWRlcyB0aGUgdXNlciBhIHRpbGUgdGhhdCBjYW4gYmUgYWRkZWQgdG8gUXVpY2sgU2V0dGluZ3MuCisgKiBBIFRpbGVTZXJ2aWNlIHByb3ZpZGVzIHRoZSB1c2VyIGEgdGlsZSB0aGF0IGNhbiBiZSBhZGRlZCB0byBRdWljayBTZXR0aW5ncy4KICAqIFF1aWNrIFNldHRpbmdzIGlzIGEgc3BhY2UgcHJvdmlkZWQgdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gY2hhbmdlIHNldHRpbmdzIGFuZAogICogdGFrZSBxdWljayBhY3Rpb25zIHdpdGhvdXQgbGVhdmluZyB0aGUgY29udGV4dCBvZiB0aGVpciBjdXJyZW50IGFwcC4KICAqCi0gKiA8cD5UaGUgbGlmZWN5Y2xlIG9mIGEgUVNUaWxlU2VydmljZSBpcyBkaWZmZXJlbnQgZnJvbSBzb21lIG90aGVyIHNlcnZpY2VzIGluCisgKiA8cD5UaGUgbGlmZWN5Y2xlIG9mIGEgVGlsZVNlcnZpY2UgaXMgZGlmZmVyZW50IGZyb20gc29tZSBvdGhlciBzZXJ2aWNlcyBpbgogICogdGhhdCBpdCBtYXkgYmUgdW5ib3VuZCBkdXJpbmcgcGFydHMgb2YgaXRzIGxpZmVjeWNsZS4gIEFueSBvZiB0aGUgZm9sbG93aW5nCiAgKiBsaWZlY3ljbGUgZXZlbnRzIGNhbiBoYXBwZW4gaW5kZXBlbnRseSBpbiBhIHNlcGFyYXRlIGJpbmRpbmcvY3JlYXRpb24gb2YgdGhlCiAgKiBzZXJ2aWNlLjwvcD4KICAqCiAgKiA8dWw+Ci0gKiA8bGk+V2hlbiBhIHRpbGUgaXMgYWRkZWQgYnkgdGhlIHVzZXIgaXRzIFFTVGlsZVNlcnZpY2Ugd2lsbCBiZSBib3VuZCB0byBhbmQKKyAqIDxsaT5XaGVuIGEgdGlsZSBpcyBhZGRlZCBieSB0aGUgdXNlciBpdHMgVGlsZVNlcnZpY2Ugd2lsbCBiZSBib3VuZCB0byBhbmQKICAqIHtAbGluayAjb25UaWxlQWRkZWQoKX0gd2lsbCBiZSBjYWxsZWQuPC9saT4KICAqCiAgKiA8bGk+V2hlbiBhIHRpbGUgc2hvdWxkIGJlIHVwIHRvIGRhdGUgYW5kIGxpc3Rpbmcgd2lsbCBiZSBpbmRpY2F0ZWQgYnkKICAqIHtAbGluayAjb25TdGFydExpc3RlbmluZygpfSBhbmQge0BsaW5rICNvblN0b3BMaXN0ZW5pbmcoKX0uPC9saT4KICAqCi0gKiA8bGk+V2hlbiB0aGUgdXNlciByZW1vdmVzIGEgdGlsZSBmcm9tIFF1aWNrIFNldHRpbmdzIHtAbGluayAjb25TdG9wTGlzdGVuaW5nKCl9CisgKiA8bGk+V2hlbiB0aGUgdXNlciByZW1vdmVzIGEgdGlsZSBmcm9tIFF1aWNrIFNldHRpbmdzIHtAbGluayAjb25UaWxlUmVtb3ZlZCgpfQogICogd2lsbCBiZSBjYWxsZWQuPC9saT4KICAqIDwvdWw+Ci0gKiA8cD5RU1RpbGVTZXJ2aWNlIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgdGlsZXMgdGhhdCBtYXRjaCB0aGUge0B2YWx1ZSAjQUNUSU9OX1FTX1RJTEV9CisgKiA8cD5UaWxlU2VydmljZSB3aWxsIGJlIGRldGVjdGVkIGJ5IHRpbGVzIHRoYXQgbWF0Y2ggdGhlIHtAdmFsdWUgI0FDVElPTl9RU19USUxFfQogICogYW5kIHJlcXVpcmUgdGhlIHBlcm1pc3Npb24gImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1FVSUNLX1NFVFRJTkdTX1RJTEUiLgogICogVGhlIGxhYmVsIGFuZCBpY29uIGZvciB0aGUgc2VydmljZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgbGFiZWwgYW5kCi0gKiBpY29uIGZvciB0aGUgdGlsZS4gSGVyZSBpcyBhbiBleGFtcGxlIFFTVGlsZVNlcnZpY2UgZGVjbGFyYXRpb24uPC9wPgorICogaWNvbiBmb3IgdGhlIHRpbGUuIEhlcmUgaXMgYW4gZXhhbXBsZSBUaWxlU2VydmljZSBkZWNsYXJhdGlvbi48L3A+CiAgKiA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCI+CiAgKiB7QGxpdGVyYWwKICAqIDxzZXJ2aWNlCkBAIC02NywxNSArNzIsNjIgQEAKIHB1YmxpYyBjbGFzcyBUaWxlU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewogCiAgICAgLyoqCi0gICAgICogQWN0aW9uIHRoYXQgaWRlbnRpZmllcyBhIFNlcnZpY2UgYXMgYmVpbmcgYSBRU1RpbGVTZXJ2aWNlLgorICAgICAqIEFjdGlvbiB0aGF0IGlkZW50aWZpZXMgYSBTZXJ2aWNlIGFzIGJlaW5nIGEgVGlsZVNlcnZpY2UuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX1FTX1RJTEUgPSAiYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuYWN0aW9uLlFTX1RJTEUiOwogCisgICAgLyoqCisgICAgICogVGhlIHRpbGUgbW9kZSBoYXNuJ3QgYmVlbiBzZXQgeWV0LgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVElMRV9NT0RFX1VOU0VUID0gMDsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IHRvIGJlIHJldHVybmVkIGJ5IHtAbGluayAjb25UaWxlQWRkZWR9LgorICAgICAqIDxwPgorICAgICAqIFBhc3NpdmUgbW9kZSBpcyB0aGUgZGVmYXVsdCBtb2RlIGZvciB0aWxlcy4gIFRoZSBTeXN0ZW0gd2lsbCB0ZWxsIHRoZSB0aWxlCisgICAgICogd2hlbiBpdCBpcyBtb3N0IGltcG9ydGFudCB0byB1cGRhdGUgYnkgcHV0dGluZyBpdCBpbiB0aGUgbGlzdGVuaW5nIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9QQVNTSVZFID0gMTsKKworICAgIC8qKgorICAgICAqIENvbnN0YW50IHRvIGJlIHJldHVybmVkIGJ5IHtAbGluayAjb25UaWxlQWRkZWR9LgorICAgICAqIDxwPgorICAgICAqIEFjdGl2ZSBtb2RlIGlzIGZvciB0aWxlcyB3aGljaCBhbHJlYWR5IGxpc3RlbiBhbmQga2VlcCB0cmFjayBvZiB0aGVpciBzdGF0ZSBpbiB0aGVpcgorICAgICAqIG93biBwcm9jZXNzLiAgVGhlc2UgdGlsZXMgbWF5IHJlcXVlc3QgdG8gc2VuZCBhbiB1cGRhdGUgdG8gdGhlIFN5c3RlbSB3aGlsZSB0aGVpciBwcm9jZXNzCisgICAgICogaXMgYWxpdmUgdXNpbmcge0BsaW5rICNyZXF1ZXN0TGlzdGVuaW5nU3RhdGV9LiAgVGhlIFN5c3RlbSB3aWxsIG9ubHkgYmluZCB0aGVzZSB0aWxlcworICAgICAqIG9uIGl0cyBvd24gd2hlbiBhIGNsaWNrIG5lZWRzIHRvIG9jY3VyLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRJTEVfTU9ERV9BQ1RJVkUgPSAyOworCisgICAgLyoqCisgICAgICogVXNlZCB0byBub3RpZnkgU3lzVUkgdGhhdCBMaXN0ZW5pbmcgaGFzIGJlIHJlcXVlc3RlZC4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9SRVFVRVNUX0xJU1RFTklORworICAgICAgICAgICAgPSAiYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuYWN0aW9uLlJFUVVFU1RfTElTVEVOSU5HIjsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ09NUE9ORU5UID0gImFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLmV4dHJhLkNPTVBPTkVOVCI7CisKICAgICBwcml2YXRlIGZpbmFsIEggbUhhbmRsZXIgPSBuZXcgSChMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtTGlzdGVuaW5nID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBUaWxlIG1UaWxlOwogICAgIHByaXZhdGUgSUJpbmRlciBtVG9rZW47CisgICAgcHJpdmF0ZSBJUVNTZXJ2aWNlIG1TZXJ2aWNlOworICAgIHByaXZhdGUgUnVubmFibGUgbVVubG9ja1J1bm5hYmxlOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgeworICAgICAgICBpZiAobUxpc3RlbmluZykgeworICAgICAgICAgICAgb25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICBtTGlzdGVuaW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgfQogCiAgICAgLyoqCiAgICAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgYWRkcyB0aGlzIHRpbGUgdG8gUXVpY2sgU2V0dGluZ3MuCkBAIC04Myw4ICsxMzUsMTIgQEAKICAgICAgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjYWxsZWQgYmV0d2VlbiB7QGxpbmsgI29uQ3JlYXRlKCl9CiAgICAgICogYW5kIHtAbGluayAjb25TdGFydExpc3RlbmluZygpfSwgaXQgd2lsbCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGlzIGFkZGVkCiAgICAgICogYW5kIG5vdCBvbiBzdWJzZXF1ZW50IGJpbmRzLgorICAgICAqCisgICAgICogQHNlZSAjVElMRV9NT0RFX1BBU1NJVkUKKyAgICAgKiBAc2VlICNUSUxFX01PREVfQUNUSVZFCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgb25UaWxlQWRkZWQoKSB7CisgICAgcHVibGljIGludCBvblRpbGVBZGRlZCgpIHsKKyAgICAgICAgcmV0dXJuIFRJTEVfTU9ERV9QQVNTSVZFOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTE5LDE3ICsxNzUsMTAzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0cyBhbiBpY29uIHRvIGJlIHNob3duIGluIHRoZSBzdGF0dXMgYmFyLgorICAgICAqIDxwPgorICAgICAqIFRoZSBpY29uIHdpbGwgYmUgZGlzcGxheWVkIGJlZm9yZSBhbGwgb3RoZXIgaWNvbnMuICBDYW4gb25seSBiZSBjYWxsZWQgYmV0d2VlbgorICAgICAqIHtAbGluayAjb25TdGFydExpc3RlbmluZ30gYW5kIHtAbGluayAjb25TdG9wTGlzdGVuaW5nfS4gIENhbiBvbmx5IGJlIGNhbGxlZCBieSBzeXN0ZW0gYXBwcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpY29uIFRoZSBpY29uIHRvIGJlIGRpc3BsYXllZCwgbnVsbCB0byBoaWRlCisgICAgICogQHBhcmFtIGNvbnRlbnREZXNjcmlwdGlvbiBDb250ZW50IGRlc2NyaXB0aW9uIG9mIHRoZSBpY29uIHRvIGJlIGRpc3BsYXllZAorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFN5c3RlbUFwaQorICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFN0YXR1c0ljb24oSWNvbiBpY29uLCBTdHJpbmcgY29udGVudERlc2NyaXB0aW9uKSB7CisgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnVwZGF0ZVN0YXR1c0ljb24obVRpbGUsIGljb24sIGNvbnRlbnREZXNjcmlwdGlvbik7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogVXNlZCB0byBzaG93IGEgZGlhbG9nLgogICAgICAqCiAgICAgICogVGhpcyB3aWxsIGNvbGxhcHNlIHRoZSBRdWljayBTZXR0aW5ncyBwYW5lbCBhbmQgc2hvdyB0aGUgZGlhbG9nLgogICAgICAqCiAgICAgICogQHBhcmFtIGRpYWxvZyBEaWFsb2cgdG8gc2hvdy4KKyAgICAgKgorICAgICAqIEBzZWUgI2lzTG9ja2VkKCkKICAgICAgKi8KICAgICBwdWJsaWMgZmluYWwgdm9pZCBzaG93RGlhbG9nKERpYWxvZyBkaWFsb2cpIHsKICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLmdldEF0dHJpYnV0ZXMoKS50b2tlbiA9IG1Ub2tlbjsKICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0cpOwogICAgICAgICBkaWFsb2cuc2hvdygpOwotICAgICAgICBnZXRRc1RpbGUoKS5vblNob3dEaWFsb2coKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm9uU2hvd0RpYWxvZyhtVGlsZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9tcHRzIHRoZSB1c2VyIHRvIHVubG9jayB0aGUgZGV2aWNlIGJlZm9yZSBleGVjdXRpbmcgdGhlIFJ1bm5hYmxlLgorICAgICAqIDxwPgorICAgICAqIFRoZSB1c2VyIHdpbGwgYmUgcHJvbXB0ZWQgZm9yIHRoZWlyIGN1cnJlbnQgc2VjdXJpdHkgbWV0aG9kIGlmIGFwcGxpY2FibGUKKyAgICAgKiBhbmQgaWYgc3VjY2Vzc2Z1bCwgcnVubmFibGUgd2lsbCBiZSBleGVjdXRlZC4gIFRoZSBSdW5uYWJsZSB3aWxsIG5vdCBiZQorICAgICAqIGV4ZWN1dGVkIGlmIHRoZSB1c2VyIGZhaWxzIHRvIHVubG9jayB0aGUgZGV2aWNlIG9yIGNhbmNlbHMgdGhlIG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCB1bmxvY2tBbmRSdW4oUnVubmFibGUgcnVubmFibGUpIHsKKyAgICAgICAgbVVubG9ja1J1bm5hYmxlID0gcnVubmFibGU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5zdGFydFVubG9ja0FuZFJ1bihtVGlsZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgdGhlIGRldmljZSBpcyBpbiBhIHNlY3VyZSBzdGF0ZS4KKyAgICAgKgorICAgICAqIFRpbGVTZXJ2aWNlcyBzaG91bGQgZGV0ZWN0IHdoZW4gdGhlIGRldmljZSBpcyBzZWN1cmUgYW5kIGNoYW5nZSB0aGVpciBiZWhhdmlvcgorICAgICAqIGFjY29yZGluZ2x5LgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgc2VjdXJlLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzU2VjdXJlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmlzU2VjdXJlKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyBpZiB0aGUgbG9jayBzY3JlZW4gaXMgc2hvd2luZy4KKyAgICAgKgorICAgICAqIFdoZW4gYSBkZXZpY2UgaXMgbG9ja2VkLCB0aGVuIHtAbGluayAjc2hvd0RpYWxvZ30gd2lsbCBub3QgcHJlc2VudCBhIGRpYWxvZywgYXMgaXQgd2lsbAorICAgICAqIGJlIHVuZGVyIHRoZSBsb2NrIHNjcmVlbi4gSWYgdGhlIGJlaGF2aW9yIG9mIHRoZSBUaWxlIGlzIHNhZmUgdG8gZG8gd2hpbGUgbG9ja2VkLAorICAgICAqIHRoZW4gdGhlIHVzZXIgc2hvdWxkIHVzZSB7QGxpbmsgI3N0YXJ0QWN0aXZpdHl9IHRvIGxhdW5jaCBhbiBhY3Rpdml0eSBvbiB0b3Agb2YgdGhlIGxvY2sKKyAgICAgKiBzY3JlZW4sIG90aGVyd2lzZSB0aGUgdGlsZSBzaG91bGQgdXNlIHtAbGluayAjdW5sb2NrQW5kUnVuKFJ1bm5hYmxlKX0gdG8gZ2l2ZSB0aGUKKyAgICAgKiB1c2VyIHRoZWlyIHNlY3VyaXR5IGNoYWxsZW5nZS4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGxvY2tlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0xvY2tlZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5pc0xvY2tlZCgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydCBhbiBhY3Rpdml0eSB3aGlsZSBjb2xsYXBzaW5nIHRoZSBwYW5lbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBzdGFydEFjdGl2aXR5QW5kQ29sbGFwc2UoSW50ZW50IGludGVudCkgeworICAgICAgICBzdGFydEFjdGl2aXR5KGludGVudCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5vblN0YXJ0QWN0aXZpdHkobVRpbGUpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDcsNiArMjg5LDExIEBACiAgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIG5ldyBJUVNUaWxlU2VydmljZS5TdHViKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKEguTVNHX1NFVF9TRVJWSUNFLCBzZXJ2aWNlKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRRU1RpbGUoVGlsZSB0aWxlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKEguTVNHX1NFVF9USUxFLCB0aWxlKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIH0KQEAgLTE3NSw2ICszMjIsMTEgQEAKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soSUJpbmRlciB3dG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoSC5NU0dfVElMRV9DTElDS0VELCB3dG9rZW4pLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVW5sb2NrQ29tcGxldGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9ueworICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoSC5NU0dfVU5MT0NLX0NPTVBMRVRFKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9CiAKQEAgLTE4NSw2ICszMzcsOCBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1RJTEVfQURERUQgPSA0OwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1RJTEVfUkVNT1ZFRCA9IDU7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVElMRV9DTElDS0VEID0gNjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TRVRfU0VSVklDRSA9IDc7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVU5MT0NLX0NPTVBMRVRFID0gODsKIAogICAgICAgICBwdWJsaWMgSChMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBzdXBlcihsb29wZXIpOwpAQCAtMTkzLDE0ICszNDcsMzUgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVRfU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSAoSVFTU2VydmljZSkgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1UaWxlLnNldFNlcnZpY2UobVNlcnZpY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NFVF9USUxFOgogICAgICAgICAgICAgICAgICAgICBtVGlsZSA9IChUaWxlKSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICBpZiAobVNlcnZpY2UgIT0gbnVsbCAmJiBtVGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtVGlsZS5zZXRTZXJ2aWNlKG1TZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1TR19USUxFX0FEREVEOgotICAgICAgICAgICAgICAgICAgICBUaWxlU2VydmljZS50aGlzLm9uVGlsZVJlbW92ZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IG1vZGUgPSBUaWxlU2VydmljZS50aGlzLm9uVGlsZUFkZGVkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtU2VydmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldFRpbGVNb2RlKG5ldyBDb21wb25lbnROYW1lKFRpbGVTZXJ2aWNlLnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbGVTZXJ2aWNlLnRoaXMuZ2V0Q2xhc3MoKSksIG1vZGUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1RJTEVfUkVNT1ZFRDoKLSAgICAgICAgICAgICAgICAgICAgVGlsZVNlcnZpY2UudGhpcy5vblRpbGVBZGRlZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobUxpc3RlbmluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbUxpc3RlbmluZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVNlcnZpY2UudGhpcy5vblN0b3BMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBUaWxlU2VydmljZS50aGlzLm9uVGlsZVJlbW92ZWQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfU1RPUF9MSVNURU5JTkc6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdGVuaW5nKSB7CkBAIC0yMTgsNyArMzkzLDI0IEBACiAgICAgICAgICAgICAgICAgICAgIG1Ub2tlbiA9IChJQmluZGVyKSBtc2cub2JqOwogICAgICAgICAgICAgICAgICAgICBUaWxlU2VydmljZS50aGlzLm9uQ2xpY2soKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBNU0dfVU5MT0NLX0NPTVBMRVRFOgorICAgICAgICAgICAgICAgICAgICBpZiAobVVubG9ja1J1bm5hYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1VbmxvY2tSdW5uYWJsZS5ydW4oKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcXVlc3RzIHRoYXQgYSB0aWxlIGJlIHB1dCBpbiB0aGUgbGlzdGVuaW5nIHN0YXRlIHNvIGl0IGNhbiBzZW5kIGFuIHVwZGF0ZS4KKyAgICAgKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgYXBwbGljYWJsZSB0byB0aWxlcyB0aGF0IHJldHVybiB7QGxpbmsgI1RJTEVfTU9ERV9BQ1RJVkV9IGZyb20KKyAgICAgKiB7QGxpbmsgI29uVGlsZUFkZGVkKCl9LCBhbmQgd2lsbCBkbyBub3RoaW5nIG90aGVyd2lzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIHZvaWQgcmVxdWVzdExpc3RlbmluZ1N0YXRlKENvbnRleHQgY29udGV4dCwgQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoQUNUSU9OX1JFUVVFU1RfTElTVEVOSU5HKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX0NPTVBPTkVOVCwgY29tcG9uZW50KTsKKyAgICAgICAgY29udGV4dC5zZW5kQnJvYWRjYXN0KGludGVudCwgTWFuaWZlc3QucGVybWlzc2lvbi5CSU5EX1FVSUNLX1NFVFRJTkdTX1RJTEUpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvRWRpdGFibGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvRWRpdGFibGUuamF2YQppbmRleCBhMjg0YTAwLi5iM2YyYzJhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L0VkaXRhYmxlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9FZGl0YWJsZS5qYXZhCkBAIC00MCwxMCArNDAsMTQgQEAKICAgICAgKiBpcyBTcGFubmVkLCB0aGUgc3BhbnMgZnJvbSBpdCBhcmUgcHJlc2VydmVkIGludG8gdGhlIEVkaXRhYmxlLgogICAgICAqIEV4aXN0aW5nIHNwYW5zIHdpdGhpbiB0aGUgRWRpdGFibGUgdGhhdCBlbnRpcmVseSBjb3ZlciB0aGUgcmVwbGFjZWQKICAgICAgKiByYW5nZSBhcmUgcmV0YWluZWQsIGJ1dCBhbnkgdGhhdCB3ZXJlIHN0cmljdGx5IHdpdGhpbiB0aGUgcmFuZ2UKLSAgICAgKiB0aGF0IHdhcyByZXBsYWNlZCBhcmUgcmVtb3ZlZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCB0aGUgY3Vyc29yCi0gICAgICogcG9zaXRpb24gaXMgcHJlc2VydmVkIGV2ZW4gd2hlbiB0aGUgZW50aXJlIHJhbmdlIHdoZXJlIGl0IGlzCi0gICAgICogbG9jYXRlZCBpcyByZXBsYWNlZC4KKyAgICAgKiB0aGF0IHdhcyByZXBsYWNlZCBhcmUgcmVtb3ZlZC4gSWYgdGhlIDxjb2RlPnNvdXJjZTwvY29kZT4gY29udGFpbnMgYSBzcGFuCisgICAgICogd2l0aCB7QGxpbmsgU3Bhbm5lZCNTUEFOX1BBUkFHUkFQSH0gZmxhZywgYW5kIGl0IGRvZXMgbm90IHNhdGlzZnkgdGhlCisgICAgICogcGFyYWdyYXBoIGJvdW5kYXJ5IGNvbnN0cmFpbnQsIGl0IGlzIG5vdCByZXRhaW5lZC4gQXMgYSBzcGVjaWFsIGNhc2UsIHRoZQorICAgICAqIGN1cnNvciBwb3NpdGlvbiBpcyBwcmVzZXJ2ZWQgZXZlbiB3aGVuIHRoZSBlbnRpcmUgcmFuZ2Ugd2hlcmUgaXQgaXMgbG9jYXRlZAorICAgICAqIGlzIHJlcGxhY2VkLgogICAgICAqIEByZXR1cm4gIGEgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LgorICAgICAqCisgICAgICogQHNlZSBTcGFubmVkI1NQQU5fUEFSQUdSQVBICiAgICAgICovCiAgICAgcHVibGljIEVkaXRhYmxlIHJlcGxhY2UoaW50IHN0LCBpbnQgZW4sIENoYXJTZXF1ZW5jZSBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCk7CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvSHlwaGVuYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9IeXBoZW5hdG9yLmphdmEKaW5kZXggNWQ5ZDkyOS4uNTY4YjI2NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9IeXBoZW5hdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9IeXBoZW5hdG9yLmphdmEKQEAgLTcyLDEwICs3MiwyMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIFRPRE86IENvbnZlcnQgdGhpcyBhIHByb3BlciBsb2NhbGUtZmFsbGJhY2sgc3lzdGVtCisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgdmFyaWFudCwgZmFsbCBiYWNrIHRvIGxhbmd1YWdlK3ZhcmlhbnQgb25seSwgaWYgYXZhaWxhYmxlCisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdmFyaWFudCA9IGxvY2FsZS5nZXRWYXJpYW50KCk7CisgICAgICAgICAgICBpZiAoIXZhcmlhbnQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgTG9jYWxlIGxhbmd1YWdlQW5kVmFyaWFudE9ubHlMb2NhbGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IExvY2FsZShsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSwgIiIsIHZhcmlhbnQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNNYXAuZ2V0KGxhbmd1YWdlQW5kVmFyaWFudE9ubHlMb2NhbGUpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBzTWFwLnB1dChsb2NhbGUsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gbGFuZ3VhZ2Utb25seSwgaWYgYXZhaWxhYmxlCi0gICAgICAgICAgICBMb2NhbGUgbGFuZ3VhZ2VPbmx5TG9jYWxlID0gbmV3IExvY2FsZShsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSk7CisgICAgICAgICAgICBmaW5hbCBMb2NhbGUgbGFuZ3VhZ2VPbmx5TG9jYWxlID0gbmV3IExvY2FsZShsb2NhbGUuZ2V0TGFuZ3VhZ2UoKSk7CiAgICAgICAgICAgICByZXN1bHQgPSBzTWFwLmdldChsYW5ndWFnZU9ubHlMb2NhbGUpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgc01hcC5wdXQobG9jYWxlLCByZXN1bHQpOwpAQCAtODMsOSArOTMsOSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gc2NyaXB0LW9ubHksIGlmIGF2YWlsYWJsZQotICAgICAgICAgICAgU3RyaW5nIHNjcmlwdCA9IGxvY2FsZS5nZXRTY3JpcHQoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzY3JpcHQgPSBsb2NhbGUuZ2V0U2NyaXB0KCk7CiAgICAgICAgICAgICBpZiAoIXNjcmlwdC5lcXVhbHMoIiIpKSB7Ci0gICAgICAgICAgICAgICAgTG9jYWxlIHNjcmlwdE9ubHlMb2NhbGUgPSBuZXcgTG9jYWxlLkJ1aWxkZXIoKQorICAgICAgICAgICAgICAgIGZpbmFsIExvY2FsZSBzY3JpcHRPbmx5TG9jYWxlID0gbmV3IExvY2FsZS5CdWlsZGVyKCkKICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRMYW5ndWFnZSgidW5kIikKICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTY3JpcHQoc2NyaXB0KQogICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CkBAIC0xNDIsNiArMTUyLDExIEBACiAgICAgICAgIHsiZW4tVU0iLCAiZW4tVVMifSwgLy8gRW5nbGlzaCAoVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzKQogICAgICAgICB7ImVuLVZJIiwgImVuLVVTIn0sIC8vIEVuZ2xpc2ggKFZpcmdpbiBJc2xhbmRzKQogCisgICAgICAgIC8vIEZvciBHZXJtYW4sIHdlJ3JlIGFzc3VtaW5nIHRoZSAxOTk2IChhbmQgbGF0ZXIpIG9ydGhvZ3JhcGh5IGJ5IGRlZmF1bHQuCisgICAgICAgIHsiZGUiLCAiZGUtMTk5NiJ9LAorICAgICAgICAvLyBMaWVjaHRlbnN0ZWluIHVzZXMgdGhlIFN3aXNzIGh5cGhlbmF0aW9uIHJ1bGVzIGZvciB0aGUgMTkwMSBvcnRob2dyYXBoeS4KKyAgICAgICAgeyJkZS1MSS0xOTAxIiwgImRlLUNILTE5MDEifSwKKwogICAgICAgICAvLyBOb3J3ZWdpYW4gaXMgdmVyeSBwcm9iYWJseSBOb3J3ZWdpYW4gQm9rbcOlbC4KICAgICAgICAgeyJubyIsICJuYiJ9LAogCkBAIC0xNjYsNyArMTgxLDE4IEBACiAgICAgICAgIHNNYXAucHV0KG51bGwsIG51bGwpOwogCiAgICAgICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIGEgZGlzY292ZXJ5LWJhc2VkIG1ldGhvZCB0aGF0IGxvb2tzIGludG8gL3N5c3RlbS91c3IvaHlwaGVuLWRhdGEKLSAgICAgICAgU3RyaW5nW10gYXZhaWxhYmxlTGFuZ3VhZ2VzID0geyJlbi1VUyIsICJlcyIsICJldSIsICJodSIsICJoeSIsICJuYiIsICJubiIsICJ1bmQtRXRoaSJ9OworICAgICAgICBTdHJpbmdbXSBhdmFpbGFibGVMYW5ndWFnZXMgPSB7CisgICAgICAgICAgICAiZGUtMTkwMSIsICJkZS0xOTk2IiwgImRlLUNILTE5MDEiLAorICAgICAgICAgICAgImVuLVVTIiwKKyAgICAgICAgICAgICJlcyIsCisgICAgICAgICAgICAiZXUiLAorICAgICAgICAgICAgImh1IiwKKyAgICAgICAgICAgICJoeSIsCisgICAgICAgICAgICAibmIiLAorICAgICAgICAgICAgIm5uIiwKKyAgICAgICAgICAgICJwdCIsCisgICAgICAgICAgICAidW5kLUV0aGkiCisgICAgICAgIH07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXZhaWxhYmxlTGFuZ3VhZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2VUYWcgPSBhdmFpbGFibGVMYW5ndWFnZXNbaV07CiAgICAgICAgICAgICBIeXBoZW5hdG9yIGggPSBsb2FkSHlwaGVuYXRvcihsYW5ndWFnZVRhZyk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L0xheW91dC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9MYXlvdXQuamF2YQppbmRleCBmOTM4N2IzLi4yYzQyNDFiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L0xheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvTGF5b3V0LmphdmEKQEAgLTExMTYsMjQgKzExMTYsMzAgQEAKICAgICBwdWJsaWMgaW50IGdldE9mZnNldEZvckhvcml6b250YWwoaW50IGxpbmUsIGZsb2F0IGhvcml6KSB7CiAgICAgICAgIC8vIFRPRE86IHVzZSBQYWludC5nZXRPZmZzZXRGb3JBZHZhbmNlIHRvIGF2b2lkIGJpbmFyeSBzZWFyY2gKICAgICAgICAgZmluYWwgaW50IGxpbmVFbmRPZmZzZXQgPSBnZXRMaW5lRW5kKGxpbmUpOworICAgICAgICBmaW5hbCBpbnQgbGluZVN0YXJ0T2Zmc2V0ID0gZ2V0TGluZVN0YXJ0KGxpbmUpOworCisgICAgICAgIERpcmVjdGlvbnMgZGlycyA9IGdldExpbmVEaXJlY3Rpb25zKGxpbmUpOworCisgICAgICAgIFRleHRMaW5lIHRsID0gVGV4dExpbmUub2J0YWluKCk7CisgICAgICAgIC8vIFhYWDogd2UgZG9uJ3QgY2FyZSBhYm91dCB0YWJzIGFzIHdlIGp1c3QgdXNlIFRleHRMaW5lI2dldE9mZnNldFRvTGVmdFJpZ2h0T2YgaGVyZS4KKyAgICAgICAgdGwuc2V0KG1QYWludCwgbVRleHQsIGxpbmVTdGFydE9mZnNldCwgbGluZUVuZE9mZnNldCwgZ2V0UGFyYWdyYXBoRGlyZWN0aW9uKGxpbmUpLCBkaXJzLAorICAgICAgICAgICAgICAgIGZhbHNlLCBudWxsKTsKKwogICAgICAgICBmaW5hbCBpbnQgbWF4OwogICAgICAgICBpZiAobGluZSA9PSBnZXRMaW5lQ291bnQoKSAtIDEpIHsKICAgICAgICAgICAgIG1heCA9IGxpbmVFbmRPZmZzZXQ7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtYXggPSBtUGFpbnQuZ2V0VGV4dFJ1bkN1cnNvcihtVGV4dCwgMCwgbVRleHQubGVuZ3RoKCksCi0gICAgICAgICAgICAgICAgICAgIGlzUnRsQ2hhckF0KGxpbmVFbmRPZmZzZXQpID8gUGFpbnQuRElSRUNUSU9OX1JUTCA6IFBhaW50LkRJUkVDVElPTl9MVFIsCi0gICAgICAgICAgICAgICAgICAgIGxpbmVFbmRPZmZzZXQsIFBhaW50LkNVUlNPUl9CRUZPUkUpOworICAgICAgICAgICAgbWF4ID0gdGwuZ2V0T2Zmc2V0VG9MZWZ0UmlnaHRPZihsaW5lRW5kT2Zmc2V0IC0gbGluZVN0YXJ0T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAhaXNSdGxDaGFyQXQobGluZUVuZE9mZnNldCAtIDEpKSArIGxpbmVTdGFydE9mZnNldDsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgbWluID0gZ2V0TGluZVN0YXJ0KGxpbmUpOwotICAgICAgICBEaXJlY3Rpb25zIGRpcnMgPSBnZXRMaW5lRGlyZWN0aW9ucyhsaW5lKTsKLQotICAgICAgICBpbnQgYmVzdCA9IG1pbjsKKyAgICAgICAgaW50IGJlc3QgPSBsaW5lU3RhcnRPZmZzZXQ7CiAgICAgICAgIGZsb2F0IGJlc3RkaXN0ID0gTWF0aC5hYnMoZ2V0UHJpbWFyeUhvcml6b250YWwoYmVzdCkgLSBob3Jpeik7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJzLm1EaXJlY3Rpb25zLmxlbmd0aDsgaSArPSAyKSB7Ci0gICAgICAgICAgICBpbnQgaGVyZSA9IG1pbiArIGRpcnMubURpcmVjdGlvbnNbaV07CisgICAgICAgICAgICBpbnQgaGVyZSA9IGxpbmVTdGFydE9mZnNldCArIGRpcnMubURpcmVjdGlvbnNbaV07CiAgICAgICAgICAgICBpbnQgdGhlcmUgPSBoZXJlICsgKGRpcnMubURpcmVjdGlvbnNbaSsxXSAmIFJVTl9MRU5HVEhfTUFTSyk7Ci0gICAgICAgICAgICBpbnQgc3dhcCA9IChkaXJzLm1EaXJlY3Rpb25zW2krMV0gJiBSVU5fUlRMX0ZMQUcpICE9IDAgPyAtMSA6IDE7CisgICAgICAgICAgICBib29sZWFuIGlzUnRsID0gKGRpcnMubURpcmVjdGlvbnNbaSsxXSAmIFJVTl9SVExfRkxBRykgIT0gMDsKKyAgICAgICAgICAgIGludCBzd2FwID0gaXNSdGwgPyAtMSA6IDE7CiAKICAgICAgICAgICAgIGlmICh0aGVyZSA+IG1heCkKICAgICAgICAgICAgICAgICB0aGVyZSA9IG1heDsKQEAgLTExNTMsMjMgKzExNTksMjMgQEAKICAgICAgICAgICAgICAgICBsb3cgPSBoZXJlICsgMTsKIAogICAgICAgICAgICAgaWYgKGxvdyA8IHRoZXJlKSB7Ci0gICAgICAgICAgICAgICAgbG93ID0gZ2V0T2Zmc2V0QXRTdGFydE9mKGxvdyk7CisgICAgICAgICAgICAgICAgaW50IGFmdCA9IHRsLmdldE9mZnNldFRvTGVmdFJpZ2h0T2YobG93IC0gbGluZVN0YXJ0T2Zmc2V0LCBpc1J0bCkgKyBsaW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgbG93ID0gdGwuZ2V0T2Zmc2V0VG9MZWZ0UmlnaHRPZihhZnQgLSBsaW5lU3RhcnRPZmZzZXQsICFpc1J0bCkgKyBsaW5lU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGxvdyA+PSBoZXJlICYmIGxvdyA8IHRoZXJlKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRpc3QgPSBNYXRoLmFicyhnZXRQcmltYXJ5SG9yaXpvbnRhbChsb3cpIC0gaG9yaXopOworICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0IDwgdGhlcmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG90aGVyID0gTWF0aC5hYnMoZ2V0UHJpbWFyeUhvcml6b250YWwoYWZ0KSAtIGhvcml6KTsKIAotICAgICAgICAgICAgICAgIGZsb2F0IGRpc3QgPSBNYXRoLmFicyhnZXRQcmltYXJ5SG9yaXpvbnRhbChsb3cpIC0gaG9yaXopOwotCi0gICAgICAgICAgICAgICAgaW50IGFmdCA9IFRleHRVdGlscy5nZXRPZmZzZXRBZnRlcihtVGV4dCwgbG93KTsKLSAgICAgICAgICAgICAgICBpZiAoYWZ0IDwgdGhlcmUpIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgb3RoZXIgPSBNYXRoLmFicyhnZXRQcmltYXJ5SG9yaXpvbnRhbChhZnQpIC0gaG9yaXopOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlciA8IGRpc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSBvdGhlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvdyA9IGFmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlciA8IGRpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gb3RoZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gYWZ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBiZXN0ZGlzdCkgewotICAgICAgICAgICAgICAgICAgICBiZXN0ZGlzdCA9IGRpc3Q7Ci0gICAgICAgICAgICAgICAgICAgIGJlc3QgPSBsb3c7CisgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgYmVzdGRpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RkaXN0ID0gZGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBsb3c7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTExODgsNiArMTE5NCw3IEBACiAgICAgICAgICAgICBiZXN0ID0gbWF4OwogICAgICAgICB9CiAKKyAgICAgICAgVGV4dExpbmUucmVjeWNsZSh0bCk7CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9TcGFubmFibGVTdHJpbmdCdWlsZGVyLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXIuamF2YQppbmRleCA0MDMxNWFkLi40MjY3MjM4IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1NwYW5uYWJsZVN0cmluZ0J1aWxkZXIuamF2YQpAQCAtNDIxLDggKzQyMSwxNyBAQAogCiAgICAgICAgICAgICAgICAgLy8gQWRkIHNwYW4gb25seSBpZiB0aGlzIG9iamVjdCBpcyBub3QgeWV0IHVzZWQgYXMgYSBzcGFuIGluIHRoaXMgc3RyaW5nCiAgICAgICAgICAgICAgICAgaWYgKGdldFNwYW5TdGFydChzcGFuc1tpXSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFNwYW4oZmFsc2UsIHNwYW5zW2ldLCBzdCAtIGNzU3RhcnQgKyBzdGFydCwgZW4gLSBjc1N0YXJ0ICsgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AuZ2V0U3BhbkZsYWdzKHNwYW5zW2ldKSB8IFNQQU5fQURERUQpOworICAgICAgICAgICAgICAgICAgICBpbnQgY29weVNwYW5TdGFydCA9IHN0IC0gY3NTdGFydCArIHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBpbnQgY29weVNwYW5FbmQgPSBlbiAtIGNzU3RhcnQgKyBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGNvcHlTcGFuRmxhZ3MgPSBzcC5nZXRTcGFuRmxhZ3Moc3BhbnNbaV0pIHwgU1BBTl9BRERFRDsKKworICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3NTdGFydCA9IChjb3B5U3BhbkZsYWdzICYgU1RBUlRfTUFTSykgPj4gU1RBUlRfU0hJRlQ7CisgICAgICAgICAgICAgICAgICAgIGludCBmbGFnc0VuZCA9IGNvcHlTcGFuRmxhZ3MgJiBFTkRfTUFTSzsKKworICAgICAgICAgICAgICAgICAgICBpZighaXNJbnZhbGlkUGFyYWdyYXBoU3RhcnQoY29weVNwYW5TdGFydCwgZmxhZ3NTdGFydCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNJbnZhbGlkUGFyYWdyYXBoRW5kKGNvcHlTcGFuRW5kLCBmbGFnc0VuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFNwYW4oZmFsc2UsIHNwYW5zW2ldLCBjb3B5U3BhblN0YXJ0LCBjb3B5U3BhbkVuZCwgY29weVNwYW5GbGFncyk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXN0b3JlSW52YXJpYW50cygpOwpAQCAtNjY2LDIzICs2NzUsMTMgQEAKICAgICAgICAgY2hlY2tSYW5nZSgic2V0U3BhbiIsIHN0YXJ0LCBlbmQpOwogCiAgICAgICAgIGludCBmbGFnc1N0YXJ0ID0gKGZsYWdzICYgU1RBUlRfTUFTSykgPj4gU1RBUlRfU0hJRlQ7Ci0gICAgICAgIGlmIChmbGFnc1N0YXJ0ID09IFBBUkFHUkFQSCkgewotICAgICAgICAgICAgaWYgKHN0YXJ0ICE9IDAgJiYgc3RhcnQgIT0gbGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSBjaGFyQXQoc3RhcnQgLSAxKTsKLQotICAgICAgICAgICAgICAgIGlmIChjICE9ICdcbicpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQQVJBR1JBUEggc3BhbiBtdXN0IHN0YXJ0IGF0IHBhcmFncmFwaCBib3VuZGFyeSIpOwotICAgICAgICAgICAgfQorICAgICAgICBpZihpc0ludmFsaWRQYXJhZ3JhcGhTdGFydChzdGFydCwgZmxhZ3NTdGFydCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQQVJBR1JBUEggc3BhbiBtdXN0IHN0YXJ0IGF0IHBhcmFncmFwaCBib3VuZGFyeSIpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGZsYWdzRW5kID0gZmxhZ3MgJiBFTkRfTUFTSzsKLSAgICAgICAgaWYgKGZsYWdzRW5kID09IFBBUkFHUkFQSCkgewotICAgICAgICAgICAgaWYgKGVuZCAhPSAwICYmIGVuZCAhPSBsZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGNoYXIgYyA9IGNoYXJBdChlbmQgLSAxKTsKLQotICAgICAgICAgICAgICAgIGlmIChjICE9ICdcbicpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJQQVJBR1JBUEggc3BhbiBtdXN0IGVuZCBhdCBwYXJhZ3JhcGggYm91bmRhcnkiKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYoaXNJbnZhbGlkUGFyYWdyYXBoRW5kKGVuZCwgZmxhZ3NFbmQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiUEFSQUdSQVBIIHNwYW4gbXVzdCBlbmQgYXQgcGFyYWdyYXBoIGJvdW5kYXJ5Iik7CiAgICAgICAgIH0KIAogICAgICAgICAvLyAwLWxlbmd0aCBTcGFubmVkLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRQpAQCAtNzYxLDYgKzc2MCwyOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzSW52YWxpZFBhcmFncmFwaFN0YXJ0KGludCBzdGFydCwgaW50IGZsYWdzU3RhcnQpIHsKKyAgICAgICAgaWYgKGZsYWdzU3RhcnQgPT0gUEFSQUdSQVBIKSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgIT0gMCAmJiBzdGFydCAhPSBsZW5ndGgoKSkgeworICAgICAgICAgICAgICAgIGNoYXIgYyA9IGNoYXJBdChzdGFydCAtIDEpOworCisgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ1xuJykgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc0ludmFsaWRQYXJhZ3JhcGhFbmQoaW50IGVuZCwgaW50IGZsYWdzRW5kKSB7CisgICAgICAgIGlmIChmbGFnc0VuZCA9PSBQQVJBR1JBUEgpIHsKKyAgICAgICAgICAgIGlmIChlbmQgIT0gMCAmJiBlbmQgIT0gbGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGMgPSBjaGFyQXQoZW5kIC0gMSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYyAhPSAnXG4nKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmVtb3ZlIHRoZSBzcGVjaWZpZWQgbWFya3VwIG9iamVjdCBmcm9tIHRoZSBidWZmZXIuCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1NwYW5uZWQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvU3Bhbm5lZC5qYXZhCmluZGV4IGE3ODVkMWIuLmEwZDU0YzI2YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9TcGFubmVkLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9TcGFubmVkLmphdmEKQEAgLTgxLDcgKzgxLDkgQEAKICAgICAgKiBpbW1lZGlhdGVseSBhZnRlciBhIFxuIGNoYXJhY3RlciwgYW5kIGlmIHRoZSBcbgogICAgICAqIHRoYXQgYW5jaG9ycyBpdCBpcyBkZWxldGVkLCB0aGUgZW5kcG9pbnQgaXMgcHVsbGVkIHRvIHRoZQogICAgICAqIG5leHQgXG4gdGhhdCBmb2xsb3dzIGluIHRoZSBidWZmZXIgKG9yIHRvIHRoZSBlbmQgb2YKLSAgICAgKiB0aGUgYnVmZmVyKS4KKyAgICAgKiB0aGUgYnVmZmVyKS4gSWYgYSBzcGFuIHdpdGggU1BBTl9QQVJBR1JBUEggZmxhZyBpcyBwYXN0ZWQKKyAgICAgKiBpbnRvIGFub3RoZXIgdGV4dCBhbmQgdGhlIHBhcmFncmFwaCBib3VuZGFyeSBjb25zdHJhaW50CisgICAgICogaXMgbm90IHNhdGlzZmllZCwgdGhlIHNwYW4gaXMgZGlzY2FyZGVkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNQQU5fUEFSQUdSQVBIID0gICAweDMzOwogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1RleHRMaW5lLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L1RleHRMaW5lLmphdmEKaW5kZXggYzQyYzc5MS4uMmE1Mjk2MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9UZXh0TGluZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvVGV4dExpbmUuamF2YQpAQCAtNjg4LDEzICs2ODgsMTQgQEAKICAgICAgKiBAcGFyYW0gYm90dG9tIHRoZSBib3R0b20gb2YgdGhlIGxpbmUKICAgICAgKiBAcGFyYW0gZm1pIHJlY2VpdmVzIG1ldHJpY3MgaW5mb3JtYXRpb24sIGNhbiBiZSBudWxsCiAgICAgICogQHBhcmFtIG5lZWRXaWR0aCB0cnVlIGlmIHRoZSB3aWR0aCBvZiB0aGUgcnVuIGlzIG5lZWRlZAorICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBmb3IgdGhlIHB1cnBvc2Ugb2YgbWVhc3VyaW5nCiAgICAgICogQHJldHVybiB0aGUgc2lnbmVkIHdpZHRoIG9mIHRoZSBydW4gYmFzZWQgb24gdGhlIHJ1biBkaXJlY3Rpb247IG9ubHkKICAgICAgKiB2YWxpZCBpZiBuZWVkV2lkdGggaXMgdHJ1ZQogICAgICAqLwogICAgIHByaXZhdGUgZmxvYXQgaGFuZGxlVGV4dChUZXh0UGFpbnQgd3AsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgICAgICAgIGludCBjb250ZXh0U3RhcnQsIGludCBjb250ZXh0RW5kLCBib29sZWFuIHJ1bklzUnRsLAogICAgICAgICAgICAgQ2FudmFzIGMsIGZsb2F0IHgsIGludCB0b3AsIGludCB5LCBpbnQgYm90dG9tLAotICAgICAgICAgICAgRm9udE1ldHJpY3NJbnQgZm1pLCBib29sZWFuIG5lZWRXaWR0aCkgeworICAgICAgICAgICAgRm9udE1ldHJpY3NJbnQgZm1pLCBib29sZWFuIG5lZWRXaWR0aCwgaW50IG9mZnNldCkgewogCiAgICAgICAgIC8vIEdldCBtZXRyaWNzIGZpcnN0IChldmVuIGZvciBlbXB0eSBzdHJpbmdzIG9yICIwIiB3aWR0aCBydW5zKQogICAgICAgICBpZiAoZm1pICE9IG51bGwpIHsKQEAgLTcxMiwxMSArNzEzLDExIEBACiAgICAgICAgIGlmIChuZWVkV2lkdGggfHwgKGMgIT0gbnVsbCAmJiAod3AuYmdDb2xvciAhPSAwIHx8IHdwLnVuZGVybGluZUNvbG9yICE9IDAgfHwgcnVuSXNSdGwpKSkgewogICAgICAgICAgICAgaWYgKG1DaGFyc1ZhbGlkKSB7CiAgICAgICAgICAgICAgICAgcmV0ID0gd3AuZ2V0UnVuQWR2YW5jZShtQ2hhcnMsIHN0YXJ0LCBlbmQsIGNvbnRleHRTdGFydCwgY29udGV4dEVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bklzUnRsLCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgcnVuSXNSdGwsIG9mZnNldCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IG1TdGFydDsKICAgICAgICAgICAgICAgICByZXQgPSB3cC5nZXRSdW5BZHZhbmNlKG1UZXh0LCBkZWx0YSArIHN0YXJ0LCBkZWx0YSArIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhICsgY29udGV4dFN0YXJ0LCBkZWx0YSArIGNvbnRleHRFbmQsIHJ1bklzUnRsLCBkZWx0YSArIGVuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSArIGNvbnRleHRTdGFydCwgZGVsdGEgKyBjb250ZXh0RW5kLCBydW5Jc1J0bCwgZGVsdGEgKyBvZmZzZXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTg2NSw4ICs4NjYsOCBAQAogICAgICAgICAgICAgVGV4dFBhaW50IHdwID0gbVdvcmtQYWludDsKICAgICAgICAgICAgIHdwLnNldChtUGFpbnQpOwogICAgICAgICAgICAgZmluYWwgaW50IG1saW1pdCA9IG1lYXN1cmVMaW1pdDsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGVUZXh0KHdwLCBzdGFydCwgbWxpbWl0LCBzdGFydCwgbGltaXQsIHJ1bklzUnRsLCBjLCB4LCB0b3AsCi0gICAgICAgICAgICAgICAgICAgIHksIGJvdHRvbSwgZm1pLCBuZWVkV2lkdGggfHwgbWxpbWl0IDwgbWVhc3VyZUxpbWl0KTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVUZXh0KHdwLCBzdGFydCwgbGltaXQsIHN0YXJ0LCBsaW1pdCwgcnVuSXNSdGwsIGMsIHgsIHRvcCwKKyAgICAgICAgICAgICAgICAgICAgeSwgYm90dG9tLCBmbWksIG5lZWRXaWR0aCB8fCBtbGltaXQgPCBtZWFzdXJlTGltaXQsIG1saW1pdCk7CiAgICAgICAgIH0KIAogICAgICAgICBtTWV0cmljQWZmZWN0aW5nU3BhblNwYW5TZXQuaW5pdChtU3Bhbm5lZCwgbVN0YXJ0ICsgc3RhcnQsIG1TdGFydCArIGxpbWl0KTsKQEAgLTkxMCwxMyArOTExLDE0IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGogPSBpLCBqbmV4dDsgaiA8IG1saW1pdDsgaiA9IGpuZXh0KSB7Ci0gICAgICAgICAgICAgICAgam5leHQgPSBtQ2hhcmFjdGVyU3R5bGVTcGFuU2V0LmdldE5leHRUcmFuc2l0aW9uKG1TdGFydCArIGosIG1TdGFydCArIG1saW1pdCkgLQorICAgICAgICAgICAgICAgIGpuZXh0ID0gbUNoYXJhY3RlclN0eWxlU3BhblNldC5nZXROZXh0VHJhbnNpdGlvbihtU3RhcnQgKyBqLCBtU3RhcnQgKyBpbmV4dCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0OworICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBNYXRoLm1pbihqbmV4dCwgbWxpbWl0KTsKIAogICAgICAgICAgICAgICAgIHdwLnNldChtUGFpbnQpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbUNoYXJhY3RlclN0eWxlU3BhblNldC5udW1iZXJPZlNwYW5zOyBrKyspIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2luZyA+PSBhbmQgPD0gYXMgZXhwbGFpbmVkIGFib3ZlCi0gICAgICAgICAgICAgICAgICAgIGlmICgobUNoYXJhY3RlclN0eWxlU3BhblNldC5zcGFuU3RhcnRzW2tdID49IG1TdGFydCArIGpuZXh0KSB8fAorICAgICAgICAgICAgICAgICAgICBpZiAoKG1DaGFyYWN0ZXJTdHlsZVNwYW5TZXQuc3BhblN0YXJ0c1trXSA+PSBtU3RhcnQgKyBvZmZzZXQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1DaGFyYWN0ZXJTdHlsZVNwYW5TZXQuc3BhbkVuZHNba10gPD0gbVN0YXJ0ICsgaikpIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgICAgIENoYXJhY3RlclN0eWxlIHNwYW4gPSBtQ2hhcmFjdGVyU3R5bGVTcGFuU2V0LnNwYW5zW2tdOwpAQCAtOTI4LDcgKzkzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHdwLnNldEh5cGhlbkVkaXQoMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHggKz0gaGFuZGxlVGV4dCh3cCwgaiwgam5leHQsIGksIGluZXh0LCBydW5Jc1J0bCwgYywgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvcCwgeSwgYm90dG9tLCBmbWksIG5lZWRXaWR0aCB8fCBqbmV4dCA8IG1lYXN1cmVMaW1pdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3AsIHksIGJvdHRvbSwgZm1pLCBuZWVkV2lkdGggfHwgam5leHQgPCBtZWFzdXJlTGltaXQsIG9mZnNldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvQXJyb3dLZXlNb3ZlbWVudE1ldGhvZC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvQXJyb3dLZXlNb3ZlbWVudE1ldGhvZC5qYXZhCmluZGV4IDI0NTljZmEuLjU3ZmUxMzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL0Fycm93S2V5TW92ZW1lbnRNZXRob2QuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9BcnJvd0tleU1vdmVtZW50TWV0aG9kLmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQudGV4dC5TZWxlY3Rpb247CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uYWJsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKQEAgLTIyMiwzNCArMjIxLDI2IEBACiAgICAgICAgIHJldHVybiBsaW5lRW5kKHdpZGdldCwgYnVmZmVyKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVG91Y2hTZWxlY3RpbmcoYm9vbGVhbiBpc01vdXNlLCBTcGFubmFibGUgYnVmZmVyKSB7Ci0gICAgICAgIHJldHVybiBpc01vdXNlID8gVG91Y2guaXNBY3RpdmVseVNlbGVjdGluZyhidWZmZXIpIDogaXNTZWxlY3RpbmcoYnVmZmVyKTsKLSAgICB9Ci0KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoVGV4dFZpZXcgd2lkZ2V0LCBTcGFubmFibGUgYnVmZmVyLCBNb3Rpb25FdmVudCBldmVudCkgewogICAgICAgICBpbnQgaW5pdGlhbFNjcm9sbFggPSAtMTsKICAgICAgICAgaW50IGluaXRpYWxTY3JvbGxZID0gLTE7CiAgICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBpc01vdXNlID0gZXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9NT1VTRSk7CiAKICAgICAgICAgaWYgKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fVVApIHsKICAgICAgICAgICAgIGluaXRpYWxTY3JvbGxYID0gVG91Y2guZ2V0SW5pdGlhbFNjcm9sbFgod2lkZ2V0LCBidWZmZXIpOwogICAgICAgICAgICAgaW5pdGlhbFNjcm9sbFkgPSBUb3VjaC5nZXRJbml0aWFsU2Nyb2xsWSh3aWRnZXQsIGJ1ZmZlcik7CiAgICAgICAgIH0KIAotICAgICAgICBib29sZWFuIHdhc1RvdWNoU2VsZWN0aW5nID0gaXNUb3VjaFNlbGVjdGluZyhpc01vdXNlLCBidWZmZXIpOworICAgICAgICBib29sZWFuIHdhc1RvdWNoU2VsZWN0aW5nID0gaXNTZWxlY3RpbmcoYnVmZmVyKTsKICAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gVG91Y2gub25Ub3VjaEV2ZW50KHdpZGdldCwgYnVmZmVyLCBldmVudCk7CiAKLSAgICAgICAgaWYgKHdpZGdldC5kaWRUb3VjaEZvY3VzU2VsZWN0KCkgJiYgIWlzTW91c2UpIHsKKyAgICAgICAgaWYgKHdpZGdldC5kaWRUb3VjaEZvY3VzU2VsZWN0KCkpIHsKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVkOwogICAgICAgICB9CiAgICAgICAgIGlmIChhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKLSAgICAgICAgICAgIC8vIENhcHR1cmUgdGhlIG1vdXNlIHBvaW50ZXIgZG93biBsb2NhdGlvbiB0byBlbnN1cmUgc2VsZWN0aW9uIHN0YXJ0cwotICAgICAgICAgICAgLy8gcmlnaHQgdW5kZXIgdGhlIG1vdXNlIChhbmQgaXMgbm90IGluZmx1ZW5jZWQgYnkgY3Vyc29yIGxvY2F0aW9uKS4KLSAgICAgICAgICAgIC8vIFRoZSBjb2RlIGJlbG93IG5lZWRzIHRvIHJ1biBmb3IgbW91c2UgZXZlbnRzLgogICAgICAgICAgICAgLy8gRm9yIHRvdWNoIGV2ZW50cywgdGhlIGNvZGUgc2hvdWxkIHJ1biBvbmx5IHdoZW4gc2VsZWN0aW9uIGlzIGFjdGl2ZS4KLSAgICAgICAgICAgIGlmIChpc01vdXNlIHx8IGlzVG91Y2hTZWxlY3RpbmcoaXNNb3VzZSwgYnVmZmVyKSkgeworICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW5nKGJ1ZmZlcikpIHsKICAgICAgICAgICAgICAgICBpZiAoIXdpZGdldC5pc0ZvY3VzZWQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXdpZGdldC5yZXF1ZXN0Rm9jdXMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZWQ7CkBAIC0yNjUsMTUgKzI1Niw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAod2lkZ2V0LmlzRm9jdXNlZCgpKSB7CiAgICAgICAgICAgICBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ3Vyc29yIGNhbiBiZSBhY3RpdmUgYXQgYW55IGxvY2F0aW9uIGluIHRoZSB0ZXh0IHdoaWxlIG1vdXNlIHBvaW50ZXIgY2FuIHN0YXJ0Ci0gICAgICAgICAgICAgICAgLy8gc2VsZWN0aW9uIGZyb20gYSB0b3RhbGx5IGRpZmZlcmVudCBsb2NhdGlvbi4gVXNlIExBU1RfVEFQX0RPV04gc3BhbiB0byBlbnN1cmUKLSAgICAgICAgICAgICAgICAvLyB0ZXh0IHNlbGVjdGlvbiB3aWxsIHN0YXJ0IGZyb20gbW91c2UgcG9pbnRlciBsb2NhdGlvbi4KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRPZmZzZXQgPSBidWZmZXIuZ2V0U3BhblN0YXJ0KExBU1RfVEFQX0RPV04pOwotICAgICAgICAgICAgICAgIGlmIChpc01vdXNlICYmIFRvdWNoLmlzU2VsZWN0aW9uU3RhcnRlZChidWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oYnVmZmVyLCBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlzVG91Y2hTZWxlY3RpbmcoaXNNb3VzZSwgYnVmZmVyKSAmJiBoYW5kbGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzU2VsZWN0aW5nKGJ1ZmZlcikgJiYgaGFuZGxlZCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRPZmZzZXQgPSBidWZmZXIuZ2V0U3BhblN0YXJ0KExBU1RfVEFQX0RPV04pOwogICAgICAgICAgICAgICAgICAgICAvLyBCZWZvcmUgc2VsZWN0aW5nLCBtYWtlIHN1cmUgd2UndmUgbW92ZWQgb3V0IG9mIHRoZSAic2xvcCIuCiAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgd2lsbCBiZSB0cnVlLCBpZiB3ZSdyZSBpbiBzZWxlY3QgbW9kZSBBTkQgd2UncmUKICAgICAgICAgICAgICAgICAgICAgLy8gT1VUIG9mIHRoZSBzbG9wCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9Ub3VjaC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvVG91Y2guamF2YQppbmRleCBmZWU3Mzc3Li40NDgxMWNiIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L21ldGhvZC9Ub3VjaC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1RvdWNoLmphdmEKQEAgLTExOSwxOCArMTE5LDEyIEBACiAgICAgICAgICAgICBkcyA9IGJ1ZmZlci5nZXRTcGFucygwLCBidWZmZXIubGVuZ3RoKCksIERyYWdTdGF0ZS5jbGFzcyk7CiAKICAgICAgICAgICAgIGlmIChkcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgZHNbMF0ubUlzU2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlOwotCiAgICAgICAgICAgICAgICAgaWYgKGRzWzBdLm1GYXJFbm91Z2ggPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHNsb3AgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQod2lkZ2V0LmdldENvbnRleHQoKSkuZ2V0U2NhbGVkVG91Y2hTbG9wKCk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGV2ZW50LmdldFgoKSAtIGRzWzBdLm1YKSA+PSBzbG9wIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhldmVudC5nZXRZKCkgLSBkc1swXS5tWSkgPj0gc2xvcCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZHNbMF0ubUZhckVub3VnaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuaXNCdXR0b25QcmVzc2VkKE1vdGlvbkV2ZW50LkJVVFRPTl9QUklNQVJZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzWzBdLm1Jc0FjdGl2ZWx5U2VsZWN0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc1swXS5tSXNTZWxlY3Rpb25TdGFydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtMTQyLDEzICsxMzYsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE1ldGFLZXlLZXlMaXN0ZW5lci5nZXRNZXRhU3RhdGUoYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YUtleUtleUxpc3RlbmVyLk1FVEFfU0VMRUNUSU5HKSAhPSAwOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuaXNCdXR0b25QcmVzc2VkKE1vdGlvbkV2ZW50LkJVVFRPTl9QUklNQVJZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZHNbMF0ubUlzQWN0aXZlbHlTZWxlY3RpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGR4OwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBkeTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhcCAmJiBldmVudC5pc0J1dHRvblByZXNzZWQoTW90aW9uRXZlbnQuQlVUVE9OX1BSSU1BUlkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3JlIHNlbGVjdGluZywgd2Ugd2FudCB0aGUgc2Nyb2xsIHRvIGdvIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBkcmFnCiAgICAgICAgICAgICAgICAgICAgICAgICBkeCA9IGV2ZW50LmdldFgoKSAtIGRzWzBdLm1YOwpAQCAtMTcyLDkgKzE2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGludCBvbGRYID0gd2lkZ2V0LmdldFNjcm9sbFgoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IG9sZFkgPSB3aWRnZXQuZ2V0U2Nyb2xsWSgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuaXNCdXR0b25QcmVzc2VkKE1vdGlvbkV2ZW50LkJVVFRPTl9QUklNQVJZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG8od2lkZ2V0LCBsYXlvdXQsIG54LCBueSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG8od2lkZ2V0LCBsYXlvdXQsIG54LCBueSk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYWN0dWFsbHkgc2Nyb2xsZWQsIHRoZW4gY2FuY2VsIHRoZSB1cCBhY3Rpb24uCiAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRYICE9IHdpZGdldC5nZXRTY3JvbGxYKCkgfHwgb2xkWSAhPSB3aWRnZXQuZ2V0U2Nyb2xsWSgpKSB7CkBAIC0yMDcsMzcgKzE5NSw2IEBACiAgICAgICAgIHJldHVybiBkcy5sZW5ndGggPiAwID8gZHNbMF0ubVNjcm9sbFkgOiAtMTsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgc2VsZWN0aW9uIGlzIHN0aWxsIGFjdGl2ZS4KLSAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZXh0ZW5kaW5nIFNlbGVjdGlvbiBzcGFuIG9uIGJ1ZmZlci4KLSAgICAgKiBAcGFyYW0gYnVmZmVyIFRoZSB0ZXh0IGJ1ZmZlci4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgYnVmZmVyIGhhcyBiZWVuIG1hcmtlZCBmb3Igc2VsZWN0aW9uLgotICAgICAqCi0gICAgICogQGhpZGUKLSAgICAgKi8KLSAgICBzdGF0aWMgYm9vbGVhbiBpc0FjdGl2ZWx5U2VsZWN0aW5nKFNwYW5uYWJsZSBidWZmZXIpIHsKLSAgICAgICAgRHJhZ1N0YXRlW10gZHM7Ci0gICAgICAgIGRzID0gYnVmZmVyLmdldFNwYW5zKDAsIGJ1ZmZlci5sZW5ndGgoKSwgRHJhZ1N0YXRlLmNsYXNzKTsKLQotICAgICAgICByZXR1cm4gZHMubGVuZ3RoID4gMCAmJiBkc1swXS5tSXNBY3RpdmVseVNlbGVjdGluZzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgc2VsZWN0aW9uIGhhcyBiZWd1biAoYXJlIHdlIG91dCBvZiBzbG9wPykuCi0gICAgICogTm90ZTogRHJhZ1N0YXRlLm1Jc1NlbGVjdGlvblN0YXJ0ZWQgZ29lcyBiYWNrIHRvIGZhbHNlIHdpdGggdGhlIHZlcnkgbmV4dCBldmVudC4KLSAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RhcnRpbmcgU2VsZWN0aW9uIHNwYW4gb24gYnVmZmVyLgotICAgICAqIEBwYXJhbSBidWZmZXIgVGhlIHRleHQgYnVmZmVyLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBzZWxlY3Rpb24gaGFzIHN0YXJ0ZWQgb24gdGhlIGJ1ZmZlci4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgc3RhdGljIGJvb2xlYW4gaXNTZWxlY3Rpb25TdGFydGVkKFNwYW5uYWJsZSBidWZmZXIpIHsKLSAgICAgICAgRHJhZ1N0YXRlW10gZHM7Ci0gICAgICAgIGRzID0gYnVmZmVyLmdldFNwYW5zKDAsIGJ1ZmZlci5sZW5ndGgoKSwgRHJhZ1N0YXRlLmNsYXNzKTsKLQotICAgICAgICByZXR1cm4gZHMubGVuZ3RoID4gMCAmJiBkc1swXS5tSXNTZWxlY3Rpb25TdGFydGVkOwotICAgIH0KLQogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERyYWdTdGF0ZSBpbXBsZW1lbnRzIE5vQ29weVNwYW4gewogICAgICAgICBwdWJsaWMgZmxvYXQgbVg7CiAgICAgICAgIHB1YmxpYyBmbG9hdCBtWTsKQEAgLTI0NSw4ICsyMDIsNiBAQAogICAgICAgICBwdWJsaWMgaW50IG1TY3JvbGxZOwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtRmFyRW5vdWdoOwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtVXNlZDsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gbUlzQWN0aXZlbHlTZWxlY3Rpbmc7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIG1Jc1NlbGVjdGlvblN0YXJ0ZWQ7CiAKICAgICAgICAgcHVibGljIERyYWdTdGF0ZShmbG9hdCB4LCBmbG9hdCB5LCBpbnQgc2Nyb2xsWCwgaW50IHNjcm9sbFkpIHsKICAgICAgICAgICAgIG1YID0geDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvbWV0aG9kL1dvcmRJdGVyYXRvci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvV29yZEl0ZXJhdG9yLmphdmEKaW5kZXggMzY4OGNmYS4uNjY0ZDFlYSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvV29yZEl0ZXJhdG9yLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC9tZXRob2QvV29yZEl0ZXJhdG9yLmphdmEKQEAgLTIwLDcgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLnRleHQuU2VsZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGVTdHJpbmdCdWlsZGVyOwogCi1pbXBvcnQgamF2YS50ZXh0LkJyZWFrSXRlcmF0b3I7CitpbXBvcnQgYW5kcm9pZC5pY3UudGV4dC5CcmVha0l0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3RleHQvdXRpbC9MaW5raWZ5LmphdmEKaW5kZXggYzExOTI3Ny4uZmJkOTkyNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdGV4dC91dGlsL0xpbmtpZnkuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC90ZXh0L3V0aWwvTGlua2lmeS5qYXZhCkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgQXJyYXlMaXN0PExpbmtTcGVjPiBsaW5rcyA9IG5ldyBBcnJheUxpc3Q8TGlua1NwZWM+KCk7CiAKICAgICAgICAgaWYgKChtYXNrICYgV0VCX1VSTFMpICE9IDApIHsKLSAgICAgICAgICAgIGdhdGhlckxpbmtzKGxpbmtzLCB0ZXh0LCBQYXR0ZXJucy5XRUJfVVJMLAorICAgICAgICAgICAgZ2F0aGVyTGlua3MobGlua3MsIHRleHQsIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwsCiAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgImh0dHA6Ly8iLCAiaHR0cHM6Ly8iLCAicnRzcDovLyIgfSwKICAgICAgICAgICAgICAgICBzVXJsTWF0Y2hGaWx0ZXIsIG51bGwpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvY2FsZUxpc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCmluZGV4IDFiZWNmYjQuLjI0ODgzZTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9jYWxlTGlzdC5qYXZhCkBAIC0xNiw2ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC51dGlsOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludFJhbmdlOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU2l6ZTsKQEAgLTI4LDEyICsyOSw2IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAotLy8gVE9ETzogV2UgZG9uJ3QgZXhjZXB0IHRvbyBtYW55IExvY2FsZUxpc3RzIHRvIGV4aXN0IGF0IHRoZSBzYW1lIHRpbWUsIGFuZAotLy8gd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIGRhdGEgYXQgbmF0aXZlIGxldmVsLCBzbyB3ZSBzaG91bGQgcGFzcyB0aGUgZGF0YQotLy8gZG93biB0byB0aGUgbmF0aXZlIGxldmVsLCBjcmVhdGUgYSBtYXAgb2YgZXZlcnkgbGlzdCBzZWVuIHRoZXJlLCB0YWtlIGEKLS8vIHBvaW50ZXIgYmFjaywgYW5kIGp1c3Qga2VlcCB0aGF0IHBvaW50ZXIgaW4gdGhlIEphdmEtbGV2ZWwgb2JqZWN0LCBzbwotLy8gdGhpbmdzIGNvdWxkIGJlIGNvcGllZCB2ZXJ5IHF1aWNrbHkuCi0KIC8qKgogICogTG9jYWxlTGlzdCBpcyBhbiBpbW11dGFibGUgbGlzdCBvZiBMb2NhbGVzLCB0eXBpY2FsbHkgdXNlZCB0byBrZWVwIGFuCiAgKiBvcmRlcmVkIHVzZXIgcHJlZmVyZW5jZXMgZm9yIGxvY2FsZXMuCkBAIC02MiwxMCArNTcsMjEgQEAKICAgICAgICAgcmV0dXJuIG1MaXN0Lmxlbmd0aCA9PSAwOwogICAgIH0KIAorICAgIEBJbnRSYW5nZShmcm9tPTApCiAgICAgcHVibGljIGludCBzaXplKCkgewogICAgICAgICByZXR1cm4gbUxpc3QubGVuZ3RoOwogICAgIH0KIAorICAgIEBJbnRSYW5nZShmcm9tPS0xKQorICAgIHB1YmxpYyBpbnQgaW5kZXhPZihMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtTGlzdFtpXS5lcXVhbHMobG9jYWxlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7CiAgICAgICAgIGlmIChvdGhlciA9PSB0aGlzKQpAQCAtNzUsNyArODEsNyBAQAogICAgICAgICBmaW5hbCBMb2NhbGVbXSBvdGhlckxpc3QgPSAoKExvY2FsZUxpc3QpIG90aGVyKS5tTGlzdDsKICAgICAgICAgaWYgKG1MaXN0Lmxlbmd0aCAhPSBvdGhlckxpc3QubGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1MaXN0Lmxlbmd0aDsgKytpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGlmICghbUxpc3RbaV0uZXF1YWxzKG90aGVyTGlzdFtpXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC04NSw3ICs5MSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKICAgICAgICAgaW50IHJlc3VsdCA9IDE7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBtTGlzdFtpXS5oYXNoQ29kZSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05NSw3ICsxMDEsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICBzYi5hcHBlbmQoIlsiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTGlzdC5sZW5ndGg7ICsraSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1MaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBzYi5hcHBlbmQobUxpc3RbaV0pOwogICAgICAgICAgICAgaWYgKGkgPCBtTGlzdC5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7CkBAIC0xNTYsMTIgKzE2MiwxMiBAQAogICAgICAgICAgICAgZmluYWwgTG9jYWxlW10gbG9jYWxlTGlzdCA9IG5ldyBMb2NhbGVbbGlzdC5sZW5ndGhdOwogICAgICAgICAgICAgZmluYWwgSGFzaFNldDxMb2NhbGU+IHNlZW5Mb2NhbGVzID0gbmV3IEhhc2hTZXQ8TG9jYWxlPigpOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIGZpbmFsIExvY2FsZSBsID0gbGlzdFtpXTsKICAgICAgICAgICAgICAgICBpZiAobCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImxpc3RbIiArIGkgKyAiXSBpcyBudWxsIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWVuTG9jYWxlcy5jb250YWlucyhsKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImxpc3RbIiArIGkgKyAiXSBpcyBhIHJlcGV0aXRpb24iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlQ2xvbmUgPSAoTG9jYWxlKSBsLmNsb25lKCk7CiAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUxpc3RbaV0gPSBsb2NhbGVDbG9uZTsKQEAgLTE3Nyw2ICsxODMsNTUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBsb2NhbGUgbGlzdCwgd2l0aCB0aGUgdG9wTG9jYWxlIG1vdmVkIHRvIHRoZSBmcm9udCBpZiBpdCBhbHJlYWR5IGlzCisgICAgICogaW4gb3RoZXJMb2NhbGVzLCBvciBhZGRlZCB0byB0aGUgZnJvbnQgaWYgaXQgaXNuJ3QuCisgICAgICoKKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgcHVibGljIExvY2FsZUxpc3QoQE5vbk51bGwgTG9jYWxlIHRvcExvY2FsZSwgTG9jYWxlTGlzdCBvdGhlckxvY2FsZXMpIHsKKyAgICAgICAgaWYgKHRvcExvY2FsZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oInRvcExvY2FsZSBpcyBudWxsIik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgaW5wdXRMZW5ndGggPSAob3RoZXJMb2NhbGVzID09IG51bGwpID8gMCA6IG90aGVyTG9jYWxlcy5tTGlzdC5sZW5ndGg7CisgICAgICAgIGludCB0b3BMb2NhbGVJbmRleCA9IC0xOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh0b3BMb2NhbGUuZXF1YWxzKG90aGVyTG9jYWxlcy5tTGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICB0b3BMb2NhbGVJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgb3V0cHV0TGVuZ3RoID0gaW5wdXRMZW5ndGggKyAodG9wTG9jYWxlSW5kZXggPT0gLTEgPyAxIDogMCk7CisgICAgICAgIGZpbmFsIExvY2FsZVtdIGxvY2FsZUxpc3QgPSBuZXcgTG9jYWxlW291dHB1dExlbmd0aF07CisgICAgICAgIGxvY2FsZUxpc3RbMF0gPSAoTG9jYWxlKSB0b3BMb2NhbGUuY2xvbmUoKTsKKyAgICAgICAgaWYgKHRvcExvY2FsZUluZGV4ID09IC0xKSB7CisgICAgICAgICAgICAvLyB0b3BMb2NhbGUgd2FzIG5vdCBpbiBvdGhlckxvY2FsZXMKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGxvY2FsZUxpc3RbaSArIDFdID0gKExvY2FsZSkgb3RoZXJMb2NhbGVzLm1MaXN0W2ldLmNsb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvcExvY2FsZUluZGV4OyBpKyspIHsKKyAgICAgICAgICAgICAgICBsb2NhbGVMaXN0W2kgKyAxXSA9IChMb2NhbGUpIG90aGVyTG9jYWxlcy5tTGlzdFtpXS5jbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IHRvcExvY2FsZUluZGV4ICsgMTsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBsb2NhbGVMaXN0W2ldID0gKExvY2FsZSkgb3RoZXJMb2NhbGVzLm1MaXN0W2ldLmNsb25lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRwdXRMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgc2IuYXBwZW5kKGxvY2FsZUxpc3RbaV0udG9MYW5ndWFnZVRhZygpKTsKKyAgICAgICAgICAgIGlmIChpIDwgb3V0cHV0TGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbUxpc3QgPSBsb2NhbGVMaXN0OworICAgICAgICBtU3RyaW5nUmVwcmVzZW50YXRpb24gPSBzYi50b1N0cmluZygpOworICAgIH0KKwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPExvY2FsZUxpc3Q+IENSRUFUT1IKICAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxMb2NhbGVMaXN0PigpIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMDIsNyArMjU3LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIHRhZ3MgPSBsaXN0LnNwbGl0KCIsIik7CiAgICAgICAgICAgICBmaW5hbCBMb2NhbGVbXSBsb2NhbGVBcnJheSA9IG5ldyBMb2NhbGVbdGFncy5sZW5ndGhdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVBcnJheS5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbGVBcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIGxvY2FsZUFycmF5W2ldID0gTG9jYWxlLmZvckxhbmd1YWdlVGFnKHRhZ3NbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG5ldyBMb2NhbGVMaXN0KGxvY2FsZUFycmF5KTsKQEAgLTIxOSw2ICsyNzQsMjEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfRU5fWEEgPSAiZW4tWEEiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVFJJTkdfQVJfWEIgPSAiYXItWEIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBMT0NBTEVfRU5fWEEgPSBuZXcgTG9jYWxlKCJlbiIsICJYQSIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBMT0NBTEVfQVJfWEIgPSBuZXcgTG9jYWxlKCJhciIsICJYQiIpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1fUFNFVURPX0xPQ0FMRVMgPSAyOworCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1BzZXVkb0xvY2FsZShTdHJpbmcgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBTVFJJTkdfRU5fWEEuZXF1YWxzKGxvY2FsZSkgfHwgU1RSSU5HX0FSX1hCLmVxdWFscyhsb2NhbGUpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNQc2V1ZG9Mb2NhbGUoTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gTE9DQUxFX0VOX1hBLmVxdWFscyhsb2NhbGUpIHx8IExPQ0FMRV9BUl9YQi5lcXVhbHMobG9jYWxlKTsKKyAgICB9CisKKyAgICBASW50UmFuZ2UoZnJvbT0wLCB0bz0xKQogICAgIHByaXZhdGUgc3RhdGljIGludCBtYXRjaFNjb3JlKExvY2FsZSBzdXBwb3J0ZWQsIExvY2FsZSBkZXNpcmVkKSB7CiAgICAgICAgIGlmIChzdXBwb3J0ZWQuZXF1YWxzKGRlc2lyZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gMTsgIC8vIHJldHVybiBlYXJseSBzbyB3ZSBkb24ndCBkbyB1bm5lY2Vzc2FyeSBjb21wdXRhdGlvbgpAQCAtMjI2LDYgKzI5NiwxMSBAQAogICAgICAgICBpZiAoIXN1cHBvcnRlZC5nZXRMYW5ndWFnZSgpLmVxdWFscyhkZXNpcmVkLmdldExhbmd1YWdlKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorICAgICAgICBpZiAoaXNQc2V1ZG9Mb2NhbGUoc3VwcG9ydGVkKSB8fCBpc1BzZXVkb0xvY2FsZShkZXNpcmVkKSkgeworICAgICAgICAgICAgLy8gVGhlIGxvY2FsZXMgYXJlIG5vdCB0aGUgc2FtZSwgYnV0IHRoZSBsYW5ndWFnZXMgYXJlIHRoZSBzYW1lLCBhbmQgb25lIG9mIHRoZSBsb2NhbGVzCisgICAgICAgICAgICAvLyBpcyBhIHBzZXVkby1sb2NhbGUuIFNvIHRoaXMgaXMgbm90IGEgbWF0Y2guCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICAvLyBUaGVyZSBpcyBubyBtYXRjaCBpZiB0aGUgdHdvIGxvY2FsZXMgdXNlIGRpZmZlcmVudCBzY3JpcHRzLiBUaGlzIHdpbGwgbW9zdCBpbXBvcmFudGx5CiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiB0cmFkaXRpb25hbCB2cyBzaW1wbGlmaWVkIENoaW5lc2UuCiAgICAgICAgIGZpbmFsIFN0cmluZyBzdXBwb3J0ZWRTY3IgPSBnZXRMaWtlbHlTY3JpcHQoc3VwcG9ydGVkKTsKQEAgLTIzMywyNCArMzA4LDI2IEBACiAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRTY3IuZXF1YWxzKGRlc2lyZWRTY3IpID8gMSA6IDA7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2ggaW4gdGhlIGxvY2FsZSBsaXN0IGdpdmVuIGFuIHVub3JkZXJlZCBhcnJheSBvZiBzdXBwb3J0ZWQgbG9jYWxlcwotICAgICAqIGluIEJDUDQ3IGZvcm1hdC4KLSAgICAgKgotICAgICAqIElmIHRoZSBsb2NhbGUgbGlzdCBpcyBlbXB0eSwgbnVsbCB3b3VsZCBiZSByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBATnVsbGFibGUKLSAgICBwdWJsaWMgTG9jYWxlIGdldEZpcnN0TWF0Y2goU3RyaW5nW10gc3VwcG9ydGVkTG9jYWxlcykgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvY2FsZSBFTl9MQVROID0gTG9jYWxlLmZvckxhbmd1YWdlVGFnKCJlbi1MYXRuIik7CisKKyAgICBwcml2YXRlIExvY2FsZSBjb21wdXRlRmlyc3RNYXRjaChTdHJpbmdbXSBzdXBwb3J0ZWRMb2NhbGVzLCBib29sZWFuIGFzc3VtZUVuZ2xpc2hJc1N1cHBvcnRlZCkgewogICAgICAgICBpZiAobUxpc3QubGVuZ3RoID09IDEpIHsgIC8vIGp1c3Qgb25lIGxvY2FsZSwgcGVyaGFwcyB0aGUgbW9zdCBjb21tb24gc2NlbmFyaW8KICAgICAgICAgICAgIHJldHVybiBtTGlzdFswXTsKICAgICAgICAgfQogICAgICAgICBpZiAobUxpc3QubGVuZ3RoID09IDApIHsgIC8vIGVtcHR5IGxvY2FsZSBsaXN0CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgdG8gaWYgZW4tWEEgb3IgYXItWEIgYXJlIGluIHRoZSBsb2NhbGUgbGlzdAogICAgICAgICBpbnQgYmVzdEluZGV4ID0gSW50ZWdlci5NQVhfVkFMVUU7Ci0gICAgICAgIGZvciAoU3RyaW5nIHRhZyA6IHN1cHBvcnRlZExvY2FsZXMpIHsKLSAgICAgICAgICAgIGZpbmFsIExvY2FsZSBzdXBwb3J0ZWRMb2NhbGUgPSBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcodGFnKTsKKyAgICAgICAgZmluYWwgaW50IG51bVN1cHBvcnRlZExvY2FsZXMgPQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZExvY2FsZXMubGVuZ3RoICsgKGFzc3VtZUVuZ2xpc2hJc1N1cHBvcnRlZCA/IDEgOiAwKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TdXBwb3J0ZWRMb2NhbGVzOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZSBzdXBwb3J0ZWRMb2NhbGU7CisgICAgICAgICAgICBpZiAoYXNzdW1lRW5nbGlzaElzU3VwcG9ydGVkKSB7CisgICAgICAgICAgICAgICAgLy8gVHJ5IEVuZ2xpc2ggZmlyc3QsIHNvIHdlIGNhbiByZXR1cm4gZWFybHkgaWYgaXQncyBpbiB0aGUgTG9jYWxlTGlzdAorICAgICAgICAgICAgICAgIHN1cHBvcnRlZExvY2FsZSA9IChpID09IDApID8gRU5fTEFUTiA6IExvY2FsZS5mb3JMYW5ndWFnZVRhZyhzdXBwb3J0ZWRMb2NhbGVzW2ktMV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdXBwb3J0ZWRMb2NhbGUgPSBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcoc3VwcG9ydGVkTG9jYWxlc1tpXSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIGF2ZXJhZ2UgbGVuZ3RoIG9mIGxvY2FsZSBsaXN0cyB1c2VkIGZvciBsb2NhbGUgcmVzb2x1dGlvbiB0byBiZQogICAgICAgICAgICAgLy8gc21hbGxlciB0aGFuIHRocmVlLCBzbyBpdCdzIE9LIHRvIGRvIHRoaXMgYXMgYW4gTyhtbikgYWxnb3JpdGhtLgogICAgICAgICAgICAgZm9yIChpbnQgaWR4ID0gMDsgaWR4IDwgbUxpc3QubGVuZ3RoOyBpZHgrKykgewpAQCAtMjcxLDIxICszNDgsMTIzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBtYXRjaCBpbiB0aGUgbG9jYWxlIGxpc3QgZ2l2ZW4gYW4gdW5vcmRlcmVkIGFycmF5IG9mIHN1cHBvcnRlZCBsb2NhbGVzCisgICAgICogaW4gQkNQNDcgZm9ybWF0LgorICAgICAqCisgICAgICogSWYgdGhlIGxvY2FsZSBsaXN0IGlzIGVtcHR5LCBudWxsIHdvdWxkIGJlIHJldHVybmVkLgorICAgICAqLworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBMb2NhbGUgZ2V0Rmlyc3RNYXRjaChTdHJpbmdbXSBzdXBwb3J0ZWRMb2NhbGVzKSB7CisgICAgICAgIHJldHVybiBjb21wdXRlRmlyc3RNYXRjaChzdXBwb3J0ZWRMb2NhbGVzLCBmYWxzZSAvKiBhc3N1bWUgRW5nbGlzaCBpcyBub3Qgc3VwcG9ydGVkICovKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTYW1lIGFzIGdldEZpcnN0TWF0Y2goKSwgYnV0IHdpdGggRW5nbGlzaCBhc3N1bWVkIHRvIGJlIHN1cHBvcnRlZCwgZXZlbiBpZiBpdCdzIG5vdC4KKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgQE51bGxhYmxlCisgICAgcHVibGljIExvY2FsZSBnZXRGaXJzdE1hdGNoV2l0aEVuZ2xpc2hTdXBwb3J0ZWQoU3RyaW5nW10gc3VwcG9ydGVkTG9jYWxlcykgeworICAgICAgICByZXR1cm4gY29tcHV0ZUZpcnN0TWF0Y2goc3VwcG9ydGVkTG9jYWxlcywgdHJ1ZSAvKiBhc3N1bWUgRW5nbGlzaCBpcyBzdXBwb3J0ZWQgKi8pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXJyYXkgb2YgbG9jYWxlIHRhZ3Mgb25seSBjb250YWlucyBlbXB0eSBsb2NhbGVzIGFuZCBwc2V1ZG9sb2NhbGVzLgorICAgICAqIEFzc3VtZXMgdGhhdCB0aGVyZSBpcyBubyByZXBldGl0aW9uIGluIHRoZSBpbnB1dC4KKyAgICAgKiB7QGhpZGV9CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUHNldWRvTG9jYWxlc09ubHkoU3RyaW5nW10gc3VwcG9ydGVkTG9jYWxlcykgeworICAgICAgICBpZiAoc3VwcG9ydGVkTG9jYWxlcy5sZW5ndGggPiBOVU1fUFNFVURPX0xPQ0FMRVMgKyAxKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBvcHRpbWl6YXRpb24uIFNpbmNlIHRoZXJlJ3Mgbm8gcmVwZXRpdGlvbiBpbiB0aGUgaW5wdXQsIGlmIHdlIGhhdmUgbW9yZQorICAgICAgICAgICAgLy8gdGhhbiB0aGUgbnVtYmVyIG9mIHBzZXVkby1sb2NhbGVzIHBsdXMgb25lIGZvciB0aGUgZW1wdHkgc3RyaW5nLCBpdCdzIGd1YXJhbnRlZWQKKyAgICAgICAgICAgIC8vIHRoYXQgd2UgaGF2ZSBzb21lIG1lYW5pbmZ1bCBsb2NhbGUgaW4gdGhlIGxpc3QsIHNvIHRoZSBsaXN0IGlzIG5vdCAicHJhY3RpY2FsbHkKKyAgICAgICAgICAgIC8vIGVtcHR5Ii4KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKFN0cmluZyBsb2NhbGUgOiBzdXBwb3J0ZWRMb2NhbGVzKSB7CisgICAgICAgICAgICBpZiAoIWxvY2FsZS5pc0VtcHR5KCkgJiYgIWlzUHNldWRvTG9jYWxlKGxvY2FsZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgT2JqZWN0IHNMb2NrID0gbmV3IE9iamVjdCgpOwogCiAgICAgQEd1YXJkZWRCeSgic0xvY2siKQotICAgIHByaXZhdGUgc3RhdGljIExvY2FsZUxpc3Qgc0RlZmF1bHRMb2NhbGVMaXN0OworICAgIHByaXZhdGUgc3RhdGljIExvY2FsZUxpc3Qgc0xhc3RFeHBsaWNpdGx5U2V0TG9jYWxlTGlzdCA9IG51bGw7CisgICAgQEd1YXJkZWRCeSgic0xvY2siKQorICAgIHByaXZhdGUgc3RhdGljIExvY2FsZUxpc3Qgc0RlZmF1bHRMb2NhbGVMaXN0ID0gbnVsbDsKKyAgICBAR3VhcmRlZEJ5KCJzTG9jayIpCisgICAgcHJpdmF0ZSBzdGF0aWMgTG9jYWxlIHNMYXN0RGVmYXVsdExvY2FsZSA9IG51bGw7CiAKLSAgICAvLyBUT0RPOiBmaXggdGhpcyB0byByZXR1cm4gdGhlIGRlZmF1bHQgc3lzdGVtIGxvY2FsZSBsaXN0IG9uY2Ugd2UgaGF2ZSB0aGF0CisgICAgLyoqCisgICAgICogVGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIHRvIGluY2x1ZGUgdGhlIGRlZmF1bHQgTG9jYWxlIHJldHVybmVkIGJ5IExvY2FsZS5nZXREZWZhdWx0KCksIGJ1dAorICAgICAqIG5vdCBuZWNlc3NhcmlseSBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0LiBUaGUgZGVmYXVsdCBsb2NhbGUgbm90IGJlaW5nIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3QKKyAgICAgKiBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIHN5c3RlbSBoYXMgc2V0IHRoZSBkZWZhdWx0IGxvY2FsZSB0byBvbmUgb2YgdGhlIHVzZXIncyBvdGhlcgorICAgICAqIHByZWZlcnJlZCBsb2NhbGVzLCBoYXZpbmcgY29uY2x1ZGVkIHRoYXQgdGhlIHByaW1hcnkgcHJlZmVyZW5jZSBpcyBub3Qgc3VwcG9ydGVkIGJ1dCBhCisgICAgICogc2Vjb25kYXJ5IHByZWZlcmVuY2UgaXMuCisgICAgICoKKyAgICAgKiBOb3RlIHRoYXQgdGhlIGRlZmF1bHQgTG9jYWxlTGlzdCB3b3VsZCBjaGFuZ2UgaWYgTG9jYWxlLnNldERlZmF1bHQoKSBpcyBjYWxsZWQuIFRoaXMgbWV0aG9kCisgICAgICogdGFrZXMgdGhhdCBpbnRvIGFjY291bnQgYnkgYWx3YXlzIGNoZWNraW5nIHRoZSBvdXRwdXQgb2YgTG9jYWxlLmdldERlZmF1bHQoKSBhbmQgYWRqdXN0aW5nCisgICAgICogdGhlIGRlZmF1bHQgTG9jYWxlTGlzdCBpZiBuZWVkZWQuCisgICAgICovCiAgICAgQE5vbk51bGwgQFNpemUobWluPTEpCiAgICAgcHVibGljIHN0YXRpYyBMb2NhbGVMaXN0IGdldERlZmF1bHQoKSB7Ci0gICAgICAgIExvY2FsZSBkZWZhdWx0TG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgTG9jYWxlIGRlZmF1bHRMb2NhbGUgPSBMb2NhbGUuZ2V0RGVmYXVsdCgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHNMb2NrKSB7Ci0gICAgICAgICAgICBpZiAoc0RlZmF1bHRMb2NhbGVMaXN0ID09IG51bGwgfHwgc0RlZmF1bHRMb2NhbGVMaXN0LnNpemUoKSAhPSAxCi0gICAgICAgICAgICAgICAgICAgIHx8ICFkZWZhdWx0TG9jYWxlLmVxdWFscyhzRGVmYXVsdExvY2FsZUxpc3QuZ2V0UHJpbWFyeSgpKSkgewotICAgICAgICAgICAgICAgIHNEZWZhdWx0TG9jYWxlTGlzdCA9IG5ldyBMb2NhbGVMaXN0KGRlZmF1bHRMb2NhbGUpOworICAgICAgICAgICAgaWYgKCFkZWZhdWx0TG9jYWxlLmVxdWFscyhzTGFzdERlZmF1bHRMb2NhbGUpKSB7CisgICAgICAgICAgICAgICAgc0xhc3REZWZhdWx0TG9jYWxlID0gZGVmYXVsdExvY2FsZTsKKyAgICAgICAgICAgICAgICAvLyBJdCdzIGVpdGhlciB0aGUgZmlyc3QgdGltZSBzb21lb25lIGhhcyBhc2tlZCBmb3IgdGhlIGRlZmF1bHQgbG9jYWxlIGxpc3QsIG9yCisgICAgICAgICAgICAgICAgLy8gc29tZW9uZSBoYXMgY2FsbGVkIExvY2FsZS5zZXREZWZhdWx0KCkgc2luY2Ugd2UgbGFzdCBzZXQgb3IgYWRqdXN0ZWQgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAvLyBsb2NhbGUgbGlzdC4gU28gbGV0J3MgYWRqdXN0IHRoZSBsb2NhbGUgbGlzdC4KKyAgICAgICAgICAgICAgICBpZiAoc0RlZmF1bHRMb2NhbGVMaXN0ICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlZmF1bHRMb2NhbGUuZXF1YWxzKHNEZWZhdWx0TG9jYWxlTGlzdC5nZXRQcmltYXJ5KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IExvY2FsZSBoYXMgY2hhbmdlZCwgYnV0IGl0IGhhcHBlbnMgdG8gYmUgdGhlIGZpcnN0IGxvY2FsZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBsb2NhbGUgbGlzdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBjb25zdHJ1Y3QgYSBuZXcgbG9jYWxlIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzRGVmYXVsdExvY2FsZUxpc3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNEZWZhdWx0TG9jYWxlTGlzdCA9IG5ldyBMb2NhbGVMaXN0KGRlZmF1bHRMb2NhbGUsIHNMYXN0RXhwbGljaXRseVNldExvY2FsZUxpc3QpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gc0RlZmF1bHRMb2NhbGVMaXN0IGNhbid0IGJlIG51bGwsIHNpbmNlIGl0IGNhbid0IGJlIHNldCB0byBudWxsIGJ5CisgICAgICAgICAgICAvLyBMb2NhbGVMaXN0LnNldERlZmF1bHQoKSwgYW5kIGlmIGdldERlZmF1bHQoKSBpcyBjYWxsZWQgYmVmb3JlIGEgY2FsbCB0bworICAgICAgICAgICAgLy8gc2V0RGVmYXVsdCgpLCBzTGFzdERlZmF1bHRMb2NhbGUgd291bGQgYmUgbnVsbCBhbmQgdGhlIGNoZWNrIGFib3ZlIHdvdWxkIHNldAorICAgICAgICAgICAgLy8gc0RlZmF1bHRMb2NhbGVMaXN0LgorICAgICAgICAgICAgcmV0dXJuIHNEZWZhdWx0TG9jYWxlTGlzdDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gc0RlZmF1bHRMb2NhbGVMaXN0OworICAgIH0KKworICAgIC8qKgorICAgICAqIEFsc28gc2V0cyB0aGUgZGVmYXVsdCBsb2NhbGUgYnkgY2FsbGluZyBMb2NhbGUuc2V0RGVmYXVsdCgpIHdpdGggdGhlIGZpcnN0IGxvY2FsZSBpbiB0aGUKKyAgICAgKiBsaXN0LgorICAgICAqCisgICAgICogQHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpZiB0aGUgaW5wdXQgaXMgPGNvZGU+bnVsbDwvY29kZT4uCisgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIGlucHV0IGlzIGVtcHR5LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXREZWZhdWx0KEBOb25OdWxsIEBTaXplKG1pbj0xKSBMb2NhbGVMaXN0IGxvY2FsZXMpIHsKKyAgICAgICAgc2V0RGVmYXVsdChsb2NhbGVzLCAwKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1heSBiZSB1c2VkIGRpcmVjdGx5IGJ5IHN5c3RlbSBwcm9jZXNzZXMgdG8gc2V0IHRoZSBkZWZhdWx0IGxvY2FsZSBsaXN0IGZvciBhcHBzLiBGb3IKKyAgICAgKiBzdWNoIHVzZXMsIHRoZSBkZWZhdWx0IGxvY2FsZSBsaXN0IHdvdWxkIGFsd2F5cyBjb21lIGZyb20gdGhlIHVzZXIgcHJlZmVyZW5jZXMsIGJ1dCB0aGUKKyAgICAgKiBkZWZhdWx0IGxvY2FsZSBtYXkgaGF2ZSBiZWVuIGNob3NlbiB0byBiZSBhIGxvY2FsZSBvdGhlciB0aGFuIHRoZSBmaXJzdCBsb2NhbGUgaW4gdGhlIGxvY2FsZQorICAgICAqIGxpc3QgKGJhc2VkIG9uIHRoZSBsb2NhbGVzIHRoZSBhcHAgc3VwcG9ydHMpLgorICAgICAqCisgICAgICoge0BoaWRlfQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXREZWZhdWx0KEBOb25OdWxsIEBTaXplKG1pbj0xKSBMb2NhbGVMaXN0IGxvY2FsZXMsIGludCBsb2NhbGVJbmRleCkgeworICAgICAgICBpZiAobG9jYWxlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImxvY2FsZXMgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibG9jYWxlcyBpcyBlbXB0eSIpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZCAoc0xvY2spIHsKKyAgICAgICAgICAgIHNMYXN0RGVmYXVsdExvY2FsZSA9IGxvY2FsZXMuZ2V0KGxvY2FsZUluZGV4KTsKKyAgICAgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KHNMYXN0RGVmYXVsdExvY2FsZSk7CisgICAgICAgICAgICBzTGFzdEV4cGxpY2l0bHlTZXRMb2NhbGVMaXN0ID0gbG9jYWxlczsKKyAgICAgICAgICAgIHNEZWZhdWx0TG9jYWxlTGlzdCA9IGxvY2FsZXM7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvZy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9Mb2cuamF2YQppbmRleCBmZTQxOTMyLi41NDQ0NDRkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0xvZy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvTG9nLmphdmEKQEAgLTE4LDkgKzE4LDExIEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5SdW50aW1lSW5pdDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkZhc3RQcmludFdyaXRlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkxpbmVCcmVha0J1ZmZlcmVkV3JpdGVyOwogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKIGltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKIAogLyoqCkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICAgKiBAcGFyYW0gdHIgQW4gZXhjZXB0aW9uIHRvIGxvZwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgaW50IHYoU3RyaW5nIHRhZywgU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRyKSB7Ci0gICAgICAgIHJldHVybiBwcmludGxuX25hdGl2ZShMT0dfSURfTUFJTiwgVkVSQk9TRSwgdGFnLCBtc2cgKyAnXG4nICsgZ2V0U3RhY2tUcmFjZVN0cmluZyh0cikpOworICAgICAgICByZXR1cm4gcHJpbnRsbnMoTE9HX0lEX01BSU4sIFZFUkJPU0UsIHRhZywgbXNnLCB0cik7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDcsNyArMTQ5LDcgQEAKICAgICAgKiBAcGFyYW0gdHIgQW4gZXhjZXB0aW9uIHRvIGxvZwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGQoU3RyaW5nIHRhZywgU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRyKSB7Ci0gICAgICAgIHJldHVybiBwcmludGxuX25hdGl2ZShMT0dfSURfTUFJTiwgREVCVUcsIHRhZywgbXNnICsgJ1xuJyArIGdldFN0YWNrVHJhY2VTdHJpbmcodHIpKTsKKyAgICAgICAgcmV0dXJuIHByaW50bG5zKExPR19JRF9NQUlOLCBERUJVRywgdGFnLCBtc2csIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE2OCw3ICsxNzAsNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgaShTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBJTkZPLCB0YWcsIG1zZyArICdcbicgKyBnZXRTdGFja1RyYWNlU3RyaW5nKHRyKSk7CisgICAgICAgIHJldHVybiBwcmludGxucyhMT0dfSURfTUFJTiwgSU5GTywgdGFnLCBtc2csIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE4OSw3ICsxOTEsNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgdyhTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBXQVJOLCB0YWcsIG1zZyArICdcbicgKyBnZXRTdGFja1RyYWNlU3RyaW5nKHRyKSk7CisgICAgICAgIHJldHVybiBwcmludGxucyhMT0dfSURfTUFJTiwgV0FSTiwgdGFnLCBtc2csIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTIxOSw3ICsyMjEsNyBAQAogICAgICAqIEBwYXJhbSB0ciBBbiBleGNlcHRpb24gdG8gbG9nCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBpbnQgdyhTdHJpbmcgdGFnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIHByaW50bG5fbmF0aXZlKExPR19JRF9NQUlOLCBXQVJOLCB0YWcsIGdldFN0YWNrVHJhY2VTdHJpbmcodHIpKTsKKyAgICAgICAgcmV0dXJuIHByaW50bG5zKExPR19JRF9NQUlOLCBXQVJOLCB0YWcsICIiLCB0cik7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yNDAsNyArMjQyLDcgQEAKICAgICAgKiBAcGFyYW0gdHIgQW4gZXhjZXB0aW9uIHRvIGxvZwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGUoU3RyaW5nIHRhZywgU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRyKSB7Ci0gICAgICAgIHJldHVybiBwcmludGxuX25hdGl2ZShMT0dfSURfTUFJTiwgRVJST1IsIHRhZywgbXNnICsgJ1xuJyArIGdldFN0YWNrVHJhY2VTdHJpbmcodHIpKTsKKyAgICAgICAgcmV0dXJuIHByaW50bG5zKExPR19JRF9NQUlOLCBFUlJPUiwgdGFnLCBtc2csIHRyKTsKICAgICB9CiAKICAgICAvKioKQEAgLTI5Miw4ICsyOTQsNyBAQAogICAgICAgICAvLyBPbmx5IG1hcmsgdGhpcyBhcyBFUlJPUiwgZG8gbm90IHVzZSBBU1NFUlQgc2luY2UgdGhhdCBzaG91bGQgYmUKICAgICAgICAgLy8gcmVzZXJ2ZWQgZm9yIGNhc2VzIHdoZXJlIHRoZSBzeXN0ZW0gaXMgZ3VhcmFudGVlZCB0byBhYm9ydC4KICAgICAgICAgLy8gVGhlIG9uVGVycmlibGVGYWlsdXJlIGNhbGwgZG9lcyBub3QgYWx3YXlzIGNhdXNlIGEgY3Jhc2guCi0gICAgICAgIGludCBieXRlcyA9IHByaW50bG5fbmF0aXZlKGxvZ0lkLCBFUlJPUiwgdGFnLCBtc2cgKyAnXG4nCi0gICAgICAgICAgICAgICAgKyBnZXRTdGFja1RyYWNlU3RyaW5nKGxvY2FsU3RhY2sgPyB3aGF0IDogdHIpKTsKKyAgICAgICAgaW50IGJ5dGVzID0gcHJpbnRsbnMobG9nSWQsIEVSUk9SLCB0YWcsIG1zZywgbG9jYWxTdGFjayA/IHdoYXQgOiB0cik7CiAgICAgICAgIHNXdGZIYW5kbGVyLm9uVGVycmlibGVGYWlsdXJlKHRhZywgd2hhdCwgc3lzdGVtKTsKICAgICAgICAgcmV0dXJuIGJ5dGVzOwogICAgIH0KQEAgLTM2NSw0ICszNjYsMTA3IEBACiAKICAgICAvKiogQGhpZGUgKi8gcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IHByaW50bG5fbmF0aXZlKGludCBidWZJRCwKICAgICAgICAgICAgIGludCBwcmlvcml0eSwgU3RyaW5nIHRhZywgU3RyaW5nIG1zZyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG1heGltdW0gcGF5bG9hZCB0aGUgbG9nIGRhZW1vbiBhY2NlcHRzIHdpdGhvdXQgdHJ1bmNhdGlvbi4KKyAgICAgKiBAcmV0dXJuIExPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IGxvZ2dlcl9lbnRyeV9tYXhfcGF5bG9hZF9uYXRpdmUoKTsKKworICAgIC8qKgorICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgbG9uZyBtZXNzYWdlcy4gVXNlcyB0aGUgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgdG8gYnJlYWsKKyAgICAgKiB1cCBsb25nIG1lc3NhZ2VzIGFuZCBzdGFja3RyYWNlcyBhbG9uZyBuZXdsaW5lcywgYnV0IHRyaWVzIHRvIHdyaXRlIGluIGxhcmdlCisgICAgICogY2h1bmtzLiBUaGlzIGlzIHRvIGF2b2lkIHRydW5jYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHByaW50bG5zKGludCBidWZJRCwgaW50IHByaW9yaXR5LCBTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLAorICAgICAgICAgICAgVGhyb3dhYmxlIHRyKSB7CisgICAgICAgIEltbWVkaWF0ZUxvZ1dyaXRlciBsb2dXcml0ZXIgPSBuZXcgSW1tZWRpYXRlTG9nV3JpdGVyKGJ1ZklELCBwcmlvcml0eSwgdGFnKTsKKyAgICAgICAgLy8gQWNjZXB0YWJsZSBidWZmZXIgc2l6ZS4gR2V0IHRoZSBuYXRpdmUgYnVmZmVyIHNpemUsIHN1YnRyYWN0IHR3byB6ZXJvIHRlcm1pbmF0b3JzLAorICAgICAgICAvLyBhbmQgdGhlIGxlbmd0aCBvZiB0aGUgdGFnLgorICAgICAgICAvLyBOb3RlOiB3ZSBpbXBsaWNpdGx5IGFjY2VwdCBwb3NzaWJsZSB0cnVuY2F0aW9uIGZvciBNb2RpZmllZC1VVEY4IGRpZmZlcmVuY2VzLiBJdAorICAgICAgICAvLyAgICAgICBpcyB0b28gZXhwZW5zaXZlIHRvIGNvbXB1dGUgdGhhdCBhaGVhZCBvZiB0aW1lLgorICAgICAgICBpbnQgYnVmZmVyU2l6ZSA9IE5vUHJlbG9hZEhvbGRlci5MT0dHRVJfRU5UUllfTUFYX1BBWUxPQUQgIC8vIEJhc2UuCisgICAgICAgICAgICAgICAgLSAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHdvIHRlcm1pbmF0b3JzLgorICAgICAgICAgICAgICAgIC0gKHRhZyAhPSBudWxsID8gdGFnLmxlbmd0aCgpIDogMCkgICAgICAgICAgICAgICAgIC8vIFRhZyBsZW5ndGguCisgICAgICAgICAgICAgICAgLSAzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29tZSBzbGFjay4KKyAgICAgICAgLy8gQXQgbGVhc3QgYXNzdW1lIHlvdSBjYW4gcHJpbnQgKnNvbWUqIGNoYXJhY3RlcnMgKHRhZyBpcyBub3QgdG9vIGxhcmdlKS4KKyAgICAgICAgYnVmZmVyU2l6ZSA9IE1hdGgubWF4KGJ1ZmZlclNpemUsIDEwMCk7CisKKyAgICAgICAgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbGJidyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihsb2dXcml0ZXIsIGJ1ZmZlclNpemUpOworCisgICAgICAgIGxiYncucHJpbnRsbihtc2cpOworCisgICAgICAgIGlmICh0ciAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGxvZyBzcGV3IHRoYXQgYXBwcyBkbyBpbiB0aGUgbm9uLWVycm9yCisgICAgICAgICAgICAvLyBjb25kaXRpb24gb2YgdGhlIG5ldHdvcmsgYmVpbmcgdW5hdmFpbGFibGUuCisgICAgICAgICAgICBUaHJvd2FibGUgdCA9IHRyOworICAgICAgICAgICAgd2hpbGUgKHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVW5rbm93bkhvc3RFeGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSB0LmdldENhdXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHIucHJpbnRTdGFja1RyYWNlKGxiYncpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbGJidy5mbHVzaCgpOworCisgICAgICAgIHJldHVybiBsb2dXcml0ZXIuZ2V0V3JpdHRlbigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vUHJlbG9hZEhlbHBlciBjbGFzcy4gQ2FjaGVzIHRoZSBMT0dHRVJfRU5UUllfTUFYX1BBWUxPQUQgdmFsdWUgdG8gYXZvaWQKKyAgICAgKiBhIEpOSSBjYWxsIGR1cmluZyBsb2dnaW5nLgorICAgICAqLworICAgIHN0YXRpYyBjbGFzcyBOb1ByZWxvYWRIb2xkZXIgeworICAgICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBMT0dHRVJfRU5UUllfTUFYX1BBWUxPQUQgPQorICAgICAgICAgICAgICAgIGxvZ2dlcl9lbnRyeV9tYXhfcGF5bG9hZF9uYXRpdmUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgY2xhc3MgdG8gd3JpdGUgdG8gdGhlIGxvZ2NhdC4gRGlmZmVyZW50IGZyb20gTG9nV3JpdGVyLCB0aGlzIHdyaXRlcworICAgICAqIHRoZSB3aG9sZSBnaXZlbiBidWZmZXIgYW5kIGRvZXMgbm90IGJyZWFrIGFsb25nIG5ld2xpbmVzLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEltbWVkaWF0ZUxvZ1dyaXRlciBleHRlbmRzIFdyaXRlciB7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgYnVmSUQ7CisgICAgICAgIHByaXZhdGUgaW50IHByaW9yaXR5OworICAgICAgICBwcml2YXRlIFN0cmluZyB0YWc7CisKKyAgICAgICAgcHJpdmF0ZSBpbnQgd3JpdHRlbiA9IDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENyZWF0ZSBhIHdyaXRlciB0aGF0IGltbWVkaWF0ZWx5IHdyaXRlcyB0byB0aGUgbG9nLCB1c2luZyB0aGUgZ2l2ZW4KKyAgICAgICAgICogcGFyYW1ldGVycy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBJbW1lZGlhdGVMb2dXcml0ZXIoaW50IGJ1ZklELCBpbnQgcHJpb3JpdHksIFN0cmluZyB0YWcpIHsKKyAgICAgICAgICAgIHRoaXMuYnVmSUQgPSBidWZJRDsKKyAgICAgICAgICAgIHRoaXMucHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICAgICAgICAgIHRoaXMudGFnID0gdGFnOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGludCBnZXRXcml0dGVuKCkgeworICAgICAgICAgICAgcmV0dXJuIHdyaXR0ZW47CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGUoY2hhcltdIGNidWYsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgICAgIC8vIE5vdGU6IHVzaW5nIFN0cmluZyBoZXJlIGhhcyBhIGJpdCBvZiBvdmVyaGVhZCBhcyBhIEphdmEgb2JqZWN0IGlzIGNyZWF0ZWQsCisgICAgICAgICAgICAvLyAgICAgICBidXQgdXNpbmcgdGhlIGNoYXJbXSBkaXJlY3RseSBpcyBub3QgZWFzaWVyLCBhcyBpdCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkCisgICAgICAgICAgICAvLyAgICAgICB0byBhIEMgY2hhcltdIGZvciBsb2dnaW5nLgorICAgICAgICAgICAgd3JpdHRlbiArPSBwcmludGxuX25hdGl2ZShidWZJRCwgcHJpb3JpdHksIHRhZywgbmV3IFN0cmluZyhjYnVmLCBvZmYsIGxlbikpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGZsdXNoKCkgeworICAgICAgICAgICAgLy8gSWdub3JlZC4KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZWQuCisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1BhdGhQYXJzZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvUGF0aFBhcnNlci5qYXZhCmluZGV4IGYxN2ExNmMuLjc4ZDViY2QgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvUGF0aFBhcnNlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvUGF0aFBhcnNlci5qYXZhCkBAIC04Miw2ICs4MiwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlUHRyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVQYXRoRGF0YTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qKgogICAgICAgICAgKiBVcGRhdGUgdGhlIHBhdGggZGF0YSB0byBtYXRjaCB0aGUgc291cmNlLgogICAgICAgICAgKiBCZWZvcmUgY2FsbGluZyB0aGlzLCBtYWtlIHN1cmUgY2FuTW9ycGgodGFyZ2V0LCBzb3VyY2UpIGlzIHRydWUuCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1BhdHRlcm5zLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1BhdHRlcm5zLmphdmEKaW5kZXggMmNjOTFiOS4uOWYyYmNmZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9QYXR0ZXJucy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvUGF0dGVybnMuamF2YQpAQCAtMTA5LDExICsxMDksMTM3IEBACiAgICAgICAgICsgInx6W2Ftd10pKSI7CiAKICAgICAvKioKLSAgICAgKiBHb29kIGNoYXJhY3RlcnMgZm9yIEludGVybmF0aW9uYWxpemVkIFJlc291cmNlIElkZW50aWZpZXJzIChJUkkpLgotICAgICAqIFRoaXMgY29tcHJpc2VzIG1vc3QgY29tbW9uIHVzZWQgVW5pY29kZSBjaGFyYWN0ZXJzIGFsbG93ZWQgaW4gSVJJCi0gICAgICogYXMgZGV0YWlsZWQgaW4gUkZDIDM5ODcuCi0gICAgICogU3BlY2lmaWNhbGx5LCB0aG9zZSB0d28gYnl0ZSBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIG5vdCBpbmNsdWRlZC4KKyAgICAgKiAgUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFsbCBJQU5BIHRvcC1sZXZlbCBkb21haW5zLgorICAgICAqCisgICAgICogIExpc3QgYWNjdXJhdGUgYXMgb2YgMjAxNS8xMS8yNC4gIExpc3QgdGFrZW4gZnJvbToKKyAgICAgKiAgaHR0cDovL2RhdGEuaWFuYS5vcmcvVExEL3RsZHMtYWxwaGEtYnktZG9tYWluLnR4dAorICAgICAqICBUaGlzIHBhdHRlcm4gaXMgYXV0by1nZW5lcmF0ZWQgYnkgZnJhbWV3b3Jrcy9leC9jb21tb24vdG9vbHMvbWFrZS1pYW5hLXRsZC1wYXR0ZXJuLnB5CisgICAgICoKKyAgICAgKiAgQGhpZGUKICAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElBTkFfVE9QX0xFVkVMX0RPTUFJTlMgPQorICAgICAgICAiKD86IgorICAgICAgICArICIoPzphYWF8YWFycHxhYmJ8YWJib3R0fGFib2dhZG98YWNhZGVteXxhY2NlbnR1cmV8YWNjb3VudGFudHxhY2NvdW50YW50c3xhY298YWN0aXZlIgorICAgICAgICArICJ8YWN0b3J8YWRzfGFkdWx0fGFlZ3xhZXJvfGFmbHxhZ2VuY3l8YWlnfGFpcmZvcmNlfGFpcnRlbHxhbGxmaW5hbnp8YWxzYWNlfGFtaWNhfGFtc3RlcmRhbSIKKyAgICAgICAgKyAifGFuZHJvaWR8YXBhcnRtZW50c3xhcHB8YXBwbGV8YXF1YXJlbGxlfGFyYW1jb3xhcmNoaXxhcm15fGFycGF8YXJ0ZXxhc2lhfGFzc29jaWF0ZXMiCisgICAgICAgICsgInxhdHRvcm5leXxhdWN0aW9ufGF1ZGlvfGF1dG98YXV0b3N8YXhhfGF6dXJlfGFbY2RlZmdpbG1vcXJzdHV3eHpdKSIKKyAgICAgICAgKyAifCg/OmJhbmR8YmFua3xiYXJ8YmFyY2Vsb25hfGJhcmNsYXljYXJkfGJhcmNsYXlzfGJhcmdhaW5zfGJhdWhhdXN8YmF5ZXJufGJiY3xiYnZhIgorICAgICAgICArICJ8YmNufGJlYXRzfGJlZXJ8YmVudGxleXxiZXJsaW58YmVzdHxiZXR8YmhhcnRpfGJpYmxlfGJpZHxiaWtlfGJpbmd8YmluZ298YmlvfGJpenxibGFjayIKKyAgICAgICAgKyAifGJsYWNrZnJpZGF5fGJsb29tYmVyZ3xibHVlfGJtc3xibXd8Ym5sfGJucHBhcmliYXN8Ym9hdHN8Ym9tfGJvbmR8Ym9vfGJvb3RzfGJvdXRpcXVlIgorICAgICAgICArICJ8YnJhZGVzY298YnJpZGdlc3RvbmV8YnJvYWR3YXl8YnJva2VyfGJyb3RoZXJ8YnJ1c3NlbHN8YnVkYXBlc3R8YnVpbGR8YnVpbGRlcnN8YnVzaW5lc3MiCisgICAgICAgICsgInxidXp6fGJ6aHxiW2FiZGVmZ2hpam1ub3JzdHZ3eXpdKSIKKyAgICAgICAgKyAifCg/OmNhYnxjYWZlfGNhbHxjYW1lcmF8Y2FtcHxjYW5jZXJyZXNlYXJjaHxjYW5vbnxjYXBldG93bnxjYXBpdGFsfGNhcnxjYXJhdmFufGNhcmRzIgorICAgICAgICArICJ8Y2FyZXxjYXJlZXJ8Y2FyZWVyc3xjYXJzfGNhcnRpZXJ8Y2FzYXxjYXNofGNhc2lub3xjYXR8Y2F0ZXJpbmd8Y2JhfGNibnxjZWJ8Y2VudGVyfGNlbyIKKyAgICAgICAgKyAifGNlcm58Y2ZhfGNmZHxjaGFuZWx8Y2hhbm5lbHxjaGF0fGNoZWFwfGNobG9lfGNocmlzdG1hc3xjaHJvbWV8Y2h1cmNofGNpcHJpYW5pfGNpc2NvIgorICAgICAgICArICJ8Y2l0aWN8Y2l0eXxjaXR5ZWF0c3xjbGFpbXN8Y2xlYW5pbmd8Y2xpY2t8Y2xpbmljfGNsb3RoaW5nfGNsb3VkfGNsdWJ8Y2x1Ym1lZHxjb2FjaCIKKyAgICAgICAgKyAifGNvZGVzfGNvZmZlZXxjb2xsZWdlfGNvbG9nbmV8Y29tfGNvbW1iYW5rfGNvbW11bml0eXxjb21wYW55fGNvbXB1dGVyfGNvbXNlY3xjb25kb3MiCisgICAgICAgICsgInxjb25zdHJ1Y3Rpb258Y29uc3VsdGluZ3xjb250cmFjdG9yc3xjb29raW5nfGNvb2x8Y29vcHxjb3JzaWNhfGNvdW50cnl8Y291cG9uc3xjb3Vyc2VzIgorICAgICAgICArICJ8Y3JlZGl0fGNyZWRpdGNhcmR8Y3JlZGl0dW5pb258Y3JpY2tldHxjcm93bnxjcnN8Y3J1aXNlc3xjc2N8Y3Vpc2luZWxsYXxjeW1ydXxjeW91fGNbYWNkZmdoaWtsbW5vcnV2d3h5el0pIgorICAgICAgICArICJ8KD86ZGFidXJ8ZGFkfGRhbmNlfGRhdGV8ZGF0aW5nfGRhdHN1bnxkYXl8ZGNsa3xkZWFsc3xkZWdyZWV8ZGVsaXZlcnl8ZGVsbHxkZWx0YSIKKyAgICAgICAgKyAifGRlbW9jcmF0fGRlbnRhbHxkZW50aXN0fGRlc2l8ZGVzaWdufGRldnxkaWFtb25kc3xkaWV0fGRpZ2l0YWx8ZGlyZWN0fGRpcmVjdG9yeXxkaXNjb3VudCIKKyAgICAgICAgKyAifGRucHxkb2NzfGRvZ3xkb2hhfGRvbWFpbnN8ZG9vc2FufGRvd25sb2FkfGRyaXZlfGR1cmJhbnxkdmFnfGRbZWprbW96XSkiCisgICAgICAgICsgInwoPzplYXJ0aHxlYXR8ZWR1fGVkdWNhdGlvbnxlbWFpbHxlbWVyY2t8ZW5lcmd5fGVuZ2luZWVyfGVuZ2luZWVyaW5nfGVudGVycHJpc2VzIgorICAgICAgICArICJ8ZXBzb258ZXF1aXBtZW50fGVybml8ZXNxfGVzdGF0ZXxldXJvdmlzaW9ufGV1c3xldmVudHN8ZXZlcmJhbmt8ZXhjaGFuZ2V8ZXhwZXJ0fGV4cG9zZWQiCisgICAgICAgICsgInxleHByZXNzfGVbY2VncnN0dV0pIgorICAgICAgICArICJ8KD86ZmFnZXxmYWlsfGZhaXJ3aW5kc3xmYWl0aHxmYW1pbHl8ZmFufGZhbnN8ZmFybXxmYXNoaW9ufGZlZWRiYWNrfGZlcnJlcm98ZmlsbSIKKyAgICAgICAgKyAifGZpbmFsfGZpbmFuY2V8ZmluYW5jaWFsfGZpcm1kYWxlfGZpc2h8ZmlzaGluZ3xmaXR8Zml0bmVzc3xmbGlnaHRzfGZsb3Jpc3R8Zmxvd2Vyc3xmbHNtaWR0aCIKKyAgICAgICAgKyAifGZseXxmb298Zm9vdGJhbGx8Zm9yZXh8Zm9yc2FsZXxmb3J1bXxmb3VuZGF0aW9ufGZybHxmcm9nYW5zfGZ1bmR8ZnVybml0dXJlfGZ1dGJvbHxmeWkiCisgICAgICAgICsgInxmW2lqa21vcl0pIgorICAgICAgICArICJ8KD86Z2FsfGdhbGxlcnl8Z2FtZXxnYXJkZW58Z2JpenxnZG58Z2VhfGdlbnR8Z2VudGluZ3xnZ2VlfGdpZnR8Z2lmdHN8Z2l2ZXN8Z2l2aW5nIgorICAgICAgICArICJ8Z2xhc3N8Z2xlfGdsb2JhbHxnbG9ib3xnbWFpbHxnbW98Z214fGdvbGR8Z29sZHBvaW50fGdvbGZ8Z29vfGdvb2d8Z29vZ2xlfGdvcHxnb3Z8Z3JhaW5nZXIiCisgICAgICAgICsgInxncmFwaGljc3xncmF0aXN8Z3JlZW58Z3JpcGV8Z3JvdXB8Z3VjY2l8Z3VnZXxndWlkZXxndWl0YXJzfGd1cnV8Z1thYmRlZmdoaWxtbnBxcnN0dXd5XSkiCisgICAgICAgICsgInwoPzpoYW1idXJnfGhhbmdvdXR8aGF1c3xoZWFsdGhjYXJlfGhlbHB8aGVyZXxoZXJtZXN8aGlwaG9wfGhpdGFjaGl8aGl2fGhvY2tleXxob2xkaW5ncyIKKyAgICAgICAgKyAifGhvbGlkYXl8aG9tZWRlcG90fGhvbWVzfGhvbmRhfGhvcnNlfGhvc3R8aG9zdGluZ3xob3RlbGVzfGhvdG1haWx8aG91c2V8aG93fGhzYmN8aHl1bmRhaSIKKyAgICAgICAgKyAifGhba21ucnR1XSkiCisgICAgICAgICsgInwoPzppYm18aWNiY3xpY2V8aWN1fGlmbXxpaW5ldHxpbW1vfGltbW9iaWxpZW58aW5kdXN0cmllc3xpbmZpbml0aXxpbmZvfGluZ3xpbmt8aW5zdGl0dXRlIgorICAgICAgICArICJ8aW5zdXJlfGludHxpbnRlcm5hdGlvbmFsfGludmVzdG1lbnRzfGlwaXJhbmdhfGlyaXNofGlzdHxpc3RhbmJ1bHxpdGF1fGl3Y3xpW2RlbG1ub3Fyc3RdKSIKKyAgICAgICAgKyAifCg/OmphZ3VhcnxqYXZhfGpjYnxqZXR6dHxqZXdlbHJ5fGpsY3xqbGx8am9ic3xqb2J1cmd8anByc3xqdWVnb3N8altlbW9wXSkiCisgICAgICAgICsgInwoPzprYXVmZW58a2RkaXxraWF8a2ltfGtpbmRlcnxraXRjaGVufGtpd2l8a29lbG58a29tYXRzdXxrcmR8a3JlZHxreW90b3xrW2VnaGltbnByd3l6XSkiCisgICAgICAgICsgInwoPzpsYWNhaXhhfGxhbmNhc3RlcnxsYW5kfGxhbmRyb3ZlcnxsYXNhbGxlfGxhdHxsYXRyb2JlfGxhd3xsYXd5ZXJ8bGRzfGxlYXNlfGxlY2xlcmMiCisgICAgICAgICsgInxsZWdhbHxsZXh1c3xsZ2J0fGxpYWlzb258bGlkbHxsaWZlfGxpZmVzdHlsZXxsaWdodGluZ3xsaW1pdGVkfGxpbW98bGluZGV8bGlua3xsaXZlIgorICAgICAgICArICJ8bGl4aWx8bG9hbnxsb2Fuc3xsb2x8bG9uZG9ufGxvdHRlfGxvdHRvfGxvdmV8bHRkfGx0ZGF8bHVwaW58bHV4ZXxsdXh1cnl8bFthYmNpa3JzdHV2eV0pIgorICAgICAgICArICJ8KD86bWFkcmlkfG1haWZ8bWFpc29ufG1hbnxtYW5hZ2VtZW50fG1hbmdvfG1hcmtldHxtYXJrZXRpbmd8bWFya2V0c3xtYXJyaW90dHxtYmEiCisgICAgICAgICsgInxtZWRpYXxtZWV0fG1lbGJvdXJuZXxtZW1lfG1lbW9yaWFsfG1lbnxtZW51fG1lb3xtaWFtaXxtaWNyb3NvZnR8bWlsfG1pbml8bW1hfG1vYml8bW9kYSIKKyAgICAgICAgKyAifG1vZXxtb2l8bW9tfG1vbmFzaHxtb25leXxtb250YmxhbmN8bW9ybW9ufG1vcnRnYWdlfG1vc2Nvd3xtb3RvcmN5Y2xlc3xtb3Z8bW92aWV8bW92aXN0YXIiCisgICAgICAgICsgInxtdG58bXRwY3xtdHJ8bXVzZXVtfG11dHVlbGxlfG1bYWNkZWdoa2xtbm9wcXJzdHV2d3h5el0pIgorICAgICAgICArICJ8KD86bmFkZXh8bmFnb3lhfG5hbWV8bmF2eXxuZWN8bmV0fG5ldGJhbmt8bmV0d29ya3xuZXVzdGFyfG5ld3xuZXdzfG5leHVzfG5nb3xuaGsiCisgICAgICAgICsgInxuaWNvfG5pbmphfG5pc3Nhbnxub2tpYXxucmF8bnJ3fG50dHxueWN8blthY2VmZ2lsb3BydXpdKSIKKyAgICAgICAgKyAifCg/Om9iaXxvZmZpY2V8b2tpbmF3YXxvbWVnYXxvbmV8b25nfG9ubHxvbmxpbmV8b29vfG9yYWNsZXxvcmFuZ2V8b3JnfG9yZ2FuaWN8b3Nha2EiCisgICAgICAgICsgInxvdHN1a2F8b3ZofG9tKSIKKyAgICAgICAgKyAifCg/OnBhZ2V8cGFuZXJhaXxwYXJpc3xwYXJ0bmVyc3xwYXJ0c3xwYXJ0eXxwZXR8cGhhcm1hY3l8cGhpbGlwc3xwaG90b3xwaG90b2dyYXBoeSIKKyAgICAgICAgKyAifHBob3Rvc3xwaHlzaW98cGlhZ2V0fHBpY3N8cGljdGV0fHBpY3R1cmVzfHBpbmd8cGlua3xwaXp6YXxwbGFjZXxwbGF5fHBsYXlzdGF0aW9ufHBsdW1iaW5nIgorICAgICAgICArICJ8cGx1c3xwb2hsfHBva2VyfHBvcm58cG9zdHxwcmF4aXxwcmVzc3xwcm98cHJvZHxwcm9kdWN0aW9uc3xwcm9mfHByb3BlcnRpZXN8cHJvcGVydHkiCisgICAgICAgICsgInxwcm90ZWN0aW9ufHB1YnxwW2FlZmdoa2xtbnJzdHd5XSkiCisgICAgICAgICsgInwoPzpxcG9ufHF1ZWJlY3xxYSkiCisgICAgICAgICsgInwoPzpyYWNpbmd8cmVhbHRvcnxyZWFsdHl8cmVjaXBlc3xyZWR8cmVkc3RvbmV8cmVoYWJ8cmVpc2V8cmVpc2VufHJlaXR8cmVufHJlbnR8cmVudGFscyIKKyAgICAgICAgKyAifHJlcGFpcnxyZXBvcnR8cmVwdWJsaWNhbnxyZXN0fHJlc3RhdXJhbnR8cmV2aWV3fHJldmlld3N8cmljaHxyaWNvaHxyaW98cmlwfHJvY2hlcnxyb2NrcyIKKyAgICAgICAgKyAifHJvZGVvfHJzdnB8cnVocnxydW58cndlfHJ5dWt5dXxyW2Vvc3V3XSkiCisgICAgICAgICsgInwoPzpzYWFybGFuZHxzYWt1cmF8c2FsZXxzYW1zdW5nfHNhbmR2aWt8c2FuZHZpa2Nvcm9tYW50fHNhbm9maXxzYXB8c2Fwb3xzYXJsfHNheG8iCisgICAgICAgICsgInxzYnN8c2NhfHNjYnxzY2htaWR0fHNjaG9sYXJzaGlwc3xzY2hvb2x8c2NodWxlfHNjaHdhcnp8c2NpZW5jZXxzY29yfHNjb3R8c2VhdHxzZWN1cml0eSIKKyAgICAgICAgKyAifHNlZWt8c2VuZXJ8c2VydmljZXN8c2V2ZW58c2V3fHNleHxzZXh5fHNoaWtzaGF8c2hvZXN8c2hvd3xzaHJpcmFtfHNpbmdsZXN8c2l0ZXxza2kiCisgICAgICAgICsgInxza3l8c2t5cGV8c25jZnxzb2NjZXJ8c29jaWFsfHNvZnR3YXJlfHNvaHV8c29sYXJ8c29sdXRpb25zfHNvbnl8c295fHNwYWNlfHNwaWVnZWx8c3ByZWFkYmV0dGluZyIKKyAgICAgICAgKyAifHNybHxzdGFkYXxzdGFyaHVifHN0YXRvaWx8c3RjfHN0Y2dyb3VwfHN0b2NraG9sbXxzdHVkaW98c3R1ZHl8c3R5bGV8c3Vja3N8c3VwcGxpZXMiCisgICAgICAgICsgInxzdXBwbHl8c3VwcG9ydHxzdXJmfHN1cmdlcnl8c3V6dWtpfHN3YXRjaHxzd2lzc3xzeWRuZXl8c3lzdGVtc3xzW2FiY2RlZ2hpamtsbW5vcnR1dnh5el0pIgorICAgICAgICArICJ8KD86dGFifHRhaXBlaXx0YXRhbW90b3JzfHRhdGFyfHRhdHRvb3x0YXh8dGF4aXx0ZWFtfHRlY2h8dGVjaG5vbG9neXx0ZWx8dGVsZWZvbmljYSIKKyAgICAgICAgKyAifHRlbWFzZWt8dGVubmlzfHRoZHx0aGVhdGVyfHRoZWF0cmV8dGlja2V0c3x0aWVuZGF8dGlwc3x0aXJlc3x0aXJvbHx0b2RheXx0b2t5b3x0b29scyIKKyAgICAgICAgKyAifHRvcHx0b3JheXx0b3NoaWJhfHRvdXJzfHRvd258dG95b3RhfHRveXN8dHJhZGV8dHJhZGluZ3x0cmFpbmluZ3x0cmF2ZWx8dHJ1c3R8dHVpfHRbY2RmZ2hqa2xtbm9ydHZ3el0pIgorICAgICAgICArICJ8KD86dWJzfHVuaXZlcnNpdHl8dW5vfHVvbHx1W2Fna3N5el0pIgorICAgICAgICArICJ8KD86dmFjYXRpb25zfHZhbmF8dmVnYXN8dmVudHVyZXN8dmVyc2ljaGVydW5nfHZldHx2aWFqZXN8dmlkZW98dmlsbGFzfHZpbnx2aXJnaW4iCisgICAgICAgICsgInx2aXNpb258dmlzdGF8dmlzdGFwcmludHx2aXZhfHZsYWFuZGVyZW58dm9ka2F8dm90ZXx2b3Rpbmd8dm90b3x2b3lhZ2V8dlthY2VnaW51XSkiCisgICAgICAgICsgInwoPzp3YWxlc3x3YWx0ZXJ8d2FuZ3x3YXRjaHx3ZWJjYW18d2Vic2l0ZXx3ZWR8d2VkZGluZ3x3ZWlyfHdob3N3aG98d2llbnx3aWtpfHdpbGxpYW1oaWxsIgorICAgICAgICArICJ8d2lufHdpbmRvd3N8d2luZXx3bWV8d29ya3x3b3Jrc3x3b3JsZHx3dGN8d3RmfHdbZnNdKSIKKyAgICAgICAgKyAifCg/Olx1MDNiNVx1MDNiYnxcdTA0MzFcdTA0MzVcdTA0M2J8XHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4fFx1MDQzYVx1MDQzZVx1MDQzY3xcdTA0M2NcdTA0M2FcdTA0MzQiCisgICAgICAgICsgInxcdTA0M2NcdTA0M2VcdTA0M2R8XHUwNDNjXHUwNDNlXHUwNDQxXHUwNDNhXHUwNDMyXHUwNDMwfFx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIKKyAgICAgICAgKyAifFx1MDQzZVx1MDQ0MFx1MDQzM3xcdTA0NDBcdTA0NDNcdTA0NDF8XHUwNDQwXHUwNDQ0fFx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MnxcdTA0NDFcdTA0NDBcdTA0MzEiCisgICAgICAgICsgInxcdTA0NDNcdTA0M2FcdTA0NDB8XHUwNDliXHUwNDMwXHUwNDM3fFx1MDU3MFx1MDU2MVx1MDU3NXxcdTA1ZTdcdTA1ZDVcdTA1ZGR8XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IgorICAgICAgICArICJ8XHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjMxXHUwNjJmXHUwNjQ2fFx1MDYyN1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMXxcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiCisgICAgICAgICsgInxcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2Mjh8XHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJhfFx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIKKyAgICAgICAgKyAifFx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMXxcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmF8XHUwNjJhXHUwNjQ4XHUwNjQ2XHUwNjMzIgorICAgICAgICArICJ8XHUwNjMzXHUwNjQ4XHUwNjJmXHUwNjI3XHUwNjQ2fFx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOXxcdTA2MzRcdTA2MjhcdTA2NDNcdTA2MjkiCisgICAgICAgICsgInxcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDJ8XHUwNjM5XHUwNjQ1XHUwNjI3XHUwNjQ2fFx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIKKyAgICAgICAgKyAifFx1MDY0Mlx1MDYzN1x1MDYzMXxcdTA2NDNcdTA2NDhcdTA2NDV8XHUwNjQ1XHUwNjM1XHUwNjMxfFx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIKKyAgICAgICAgKyAifFx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOXxcdTA5MTVcdTA5NDlcdTA5MmV8XHUwOTI4XHUwOTQ3XHUwOTFmfFx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIKKyAgICAgICAgKyAifFx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOHxcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTR8XHUwYTJkXHUwYTNlXHUwYTMwXHUwYTI0fFx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIKKyAgICAgICAgKyAifFx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZXxcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzh8XHUwYjlhXHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmFhXHUwYmNkXHUwYmFhXHUwYmMyXHUwYmIwXHUwYmNkIgorICAgICAgICArICJ8XHUwYzJkXHUwYzNlXHUwYzMwXHUwYzI0XHUwYzRkfFx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZnxcdTBlMDRcdTBlMmRcdTBlMjF8XHUwZTQ0XHUwZTE3XHUwZTIyIgorICAgICAgICArICJ8XHUxMGQyXHUxMGQ0fFx1MzA3Zlx1MzA5M1x1MzA2YXxcdTMwYjBcdTMwZmNcdTMwYjBcdTMwZWJ8XHUzMGIzXHUzMGUwfFx1NGUxNlx1NzU0YyIKKyAgICAgICAgKyAifFx1NGUyZFx1NGZlMXxcdTRlMmRcdTU2ZmR8XHU0ZTJkXHU1NzBifFx1NGUyZFx1NjU4N1x1N2Y1MXxcdTRmMDFcdTRlMWF8XHU0ZjViXHU1YzcxIgorICAgICAgICArICJ8XHU0ZmUxXHU2MDZmfFx1NTA2NVx1NWViN3xcdTUxNmJcdTUzNjZ8XHU1MTZjXHU1M2Y4fFx1NTE2Y1x1NzZjYXxcdTUzZjBcdTZlN2V8XHU1M2YwXHU3MDYzIgorICAgICAgICArICJ8XHU1NTQ2XHU1N2NlfFx1NTU0Nlx1NWU5N3xcdTU1NDZcdTY4MDd8XHU1NzI4XHU3ZWJmfFx1NTkyN1x1NjJmZnxcdTVhMzFcdTRlNTB8XHU1ZGU1XHU4ODRjIgorICAgICAgICArICJ8XHU1ZTdmXHU0ZTFjfFx1NjE0OFx1NTU4NHxcdTYyMTFcdTcyMzFcdTRmNjB8XHU2MjRiXHU2NzNhfFx1NjUzZlx1NTJhMXxcdTY1M2ZcdTVlOWMiCisgICAgICAgICsgInxcdTY1YjBcdTUyYTBcdTU3NjF8XHU2NWIwXHU5NWZifFx1NjVmNlx1NWMxYXxcdTY3M2FcdTY3ODR8XHU2ZGUxXHU5YTZjXHU5NTIxfFx1NmUzOFx1NjIwZiIKKyAgICAgICAgKyAifFx1NzBiOVx1NzcwYnxcdTc5ZmJcdTUyYTh8XHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0fFx1N2Y1MVx1NTc0MHxcdTdmNTFcdTVlOTd8XHU3ZjUxXHU3ZWRjIgorICAgICAgICArICJ8XHU4YzM3XHU2YjRjfFx1OTZjNlx1NTZlMnxcdTk4ZGVcdTUyMjlcdTZkNjZ8XHU5OTEwXHU1Mzg1fFx1OTk5OVx1NmUyZnxcdWIyZjdcdWIxMzciCisgICAgICAgICsgInxcdWIyZjdcdWNlZjR8XHVjMGJjXHVjMTMxfFx1ZDU1Y1x1YWQ2ZHx4Ym94IgorICAgICAgICArICJ8eGVyb3h8eGlufHhuXFwtXFwtMTFiNGMzZHx4blxcLVxcLTFxcXcyM2F8eG5cXC1cXC0zMHJyN3l8eG5cXC1cXC0zYnN0MDBtfHhuXFwtXFwtM2RzNDQzZyIKKyAgICAgICAgKyAifHhuXFwtXFwtM2UwYjcwN2V8eG5cXC1cXC0zcHh1OGt8eG5cXC1cXC00MmMyZDlhfHhuXFwtXFwtNDVicmo5Y3x4blxcLVxcLTQ1cTExY3x4blxcLVxcLTRnYnJpbSIKKyAgICAgICAgKyAifHhuXFwtXFwtNTVxdzQyZ3x4blxcLVxcLTU1cXg1ZHx4blxcLVxcLTZmcno4Mmd8eG5cXC1cXC02cXE5ODZiM3hsfHhuXFwtXFwtODBhZHhoa3MiCisgICAgICAgICsgInx4blxcLVxcLTgwYW8yMWF8eG5cXC1cXC04MGFzZWhkYnx4blxcLVxcLTgwYXN3Z3x4blxcLVxcLTkwYTNhY3x4blxcLVxcLTkwYWlzfHhuXFwtXFwtOWRicTJhIgorICAgICAgICArICJ8eG5cXC1cXC05ZXQ1MnV8eG5cXC1cXC1iNHc2MDVmZXJkfHhuXFwtXFwtYzFhdmd8eG5cXC1cXC1jMmJyN2d8eG5cXC1cXC1jZzRia2l8eG5cXC1cXC1jbGNoYzBlYTBiMmcyYTlnY2QiCisgICAgICAgICsgInx4blxcLVxcLWN6cjY5NGJ8eG5cXC1cXC1jenJzMHR8eG5cXC1cXC1jenJ1MmR8eG5cXC1cXC1kMWFjajNifHhuXFwtXFwtZDFhbGZ8eG5cXC1cXC1lZnZ5ODhoIgorICAgICAgICArICJ8eG5cXC1cXC1lc3R2NzVnfHhuXFwtXFwtZmhiZWl8eG5cXC1cXC1maXEyMjhjNWhzfHhuXFwtXFwtZmlxNjRifHhuXFwtXFwtZmlxczhzfHhuXFwtXFwtZmlxejlzIgorICAgICAgICArICJ8eG5cXC1cXC1manE3MjBhfHhuXFwtXFwtZmx3MzUxZXx4blxcLVxcLWZwY3JqOWMzZHx4blxcLVxcLWZ6YzJjOWUyY3x4blxcLVxcLWdlY3JqOWMiCisgICAgICAgICsgInx4blxcLVxcLWgyYnJqOWN8eG5cXC1cXC1oeHQ4MTRlfHhuXFwtXFwtaTFiNmIxYTZhMmV8eG5cXC1cXC1pbXI1MTNufHhuXFwtXFwtaW8wYTdpIgorICAgICAgICArICJ8eG5cXC1cXC1qMWFlZnx4blxcLVxcLWoxYW1ofHhuXFwtXFwtajZ3MTkzZ3x4blxcLVxcLWtjcng3N2QxeDRhfHhuXFwtXFwta3BydzEzZHx4blxcLVxcLWtwcnk1N2QiCisgICAgICAgICsgInx4blxcLVxcLWtwdXQzaXx4blxcLVxcLWwxYWNjfHhuXFwtXFwtbGdiYmF0MWFkOGp8eG5cXC1cXC1tZ2I5YXdiZnx4blxcLVxcLW1nYmEzYTNlanQiCisgICAgICAgICsgInx4blxcLVxcLW1nYmEzYTRmMTZhfHhuXFwtXFwtbWdiYWFtN2E4aHx4blxcLVxcLW1nYmFiMmJkfHhuXFwtXFwtbWdiYXloN2dwYXx4blxcLVxcLW1nYmJoMWE3MWUiCisgICAgICAgICsgInx4blxcLVxcLW1nYmMwYTlhemNnfHhuXFwtXFwtbWdiZXJwNGE1ZDRhcnx4blxcLVxcLW1nYnBsMmZofHhuXFwtXFwtbWdidHgyYnx4blxcLVxcLW1nYng0Y2QwYWIiCisgICAgICAgICsgInx4blxcLVxcLW1rMWJ1NDRjfHhuXFwtXFwtbXh0cTFtfHhuXFwtXFwtbmdiYzVhemR8eG5cXC1cXC1ub2RlfHhuXFwtXFwtbnF2N2Z8eG5cXC1cXC1ucXY3ZnMwMGVtYSIKKyAgICAgICAgKyAifHhuXFwtXFwtbnlxeTI2YXx4blxcLVxcLW8zY3c0aHx4blxcLVxcLW9nYnBmOGZsfHhuXFwtXFwtcDFhY2Z8eG5cXC1cXC1wMWFpfHhuXFwtXFwtcGdiczBkaCIKKyAgICAgICAgKyAifHhuXFwtXFwtcHNzeTJ1fHhuXFwtXFwtcTlqeWI0Y3x4blxcLVxcLXFja2ExcG1jfHhuXFwtXFwtcXhhbXx4blxcLVxcLXJocXY5Nmd8eG5cXC1cXC1zOWJyajljIgorICAgICAgICArICJ8eG5cXC1cXC1zZXM1NTRnfHhuXFwtXFwtdDYwYjU2YXx4blxcLVxcLXRja3dlfHhuXFwtXFwtdW51cDR5fHhuXFwtXFwtdmVybWdlbnNiZXJhdGVyXFwtY3RiIgorICAgICAgICArICJ8eG5cXC1cXC12ZXJtZ2Vuc2JlcmF0dW5nXFwtcHdifHhuXFwtXFwtdmhxdXZ8eG5cXC1cXC12dXE4NjFifHhuXFwtXFwtd2diaDFjfHhuXFwtXFwtd2dibDZhIgorICAgICAgICArICJ8eG5cXC1cXC14aHE1MjFifHhuXFwtXFwteGtjMmFsM2h5ZTJhfHhuXFwtXFwteGtjMmRsM2E1ZWUwaHx4blxcLVxcLXk5YTNhcXx4blxcLVxcLXlmcm80aTY3byIKKyAgICAgICAgKyAifHhuXFwtXFwteWdiaTJhbW14fHhuXFwtXFwtemZyMTY0Ynx4cGVyaWF8eHh4fHh5eikiCisgICAgICAgICsgInwoPzp5YWNodHN8eWFtYXh1bnx5YW5kZXh8eW9kb2Jhc2hpfHlvZ2F8eW9rb2hhbWF8eW91dHViZXx5W2V0XSkiCisgICAgICAgICsgInwoPzp6YXJhfHppcHx6b25lfHp1ZXJpY2h8elthbXddKSkiOworCisgICAgLyoqCisgICAgICogS2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zLgorICAgICAqCisgICAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBzaW5jZSBpdCBkb2VzIG5vdCBpbmNsdWRlIGFsbCBJUkkgY2hhcmFjdGVycyBkZWZpbmVkIGluIFJGQyAzOTg3CisgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBHT09EX0lSSV9DSEFSID0KICAgICAgICAgImEtekEtWjAtOVx1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRiI7CiAKQEAgLTEyNSwzNSArMjUxLDE0OCBAQAogICAgICAgICAgICAgKyAifFsxLTldWzAtOV18WzAtOV0pKSIpOwogCiAgICAgLyoqCisgICAgICogVmFsaWQgVUNTIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiBSRkMgMzk4Ny4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVUNTX0NIQVIgPQorICAgICAgICAgICAgIlx1MDBBMC1cdUQ3RkYiICsKKyAgICAgICAgICAgICJcdUY5MDAtXHVGRENGIiArCisgICAgICAgICAgICAiXHVGREYwLVx1RkZFRiIgKworICAgICAgICAgICAgIlx1RDgwMFx1REMwMC1cdUQ4M0ZcdURGRkQiICsKKyAgICAgICAgICAgICJcdUQ4NDBcdURDMDAtXHVEODdGXHVERkZEIiArCisgICAgICAgICAgICAiXHVEODgwXHVEQzAwLVx1RDhCRlx1REZGRCIgKworICAgICAgICAgICAgIlx1RDhDMFx1REMwMC1cdUQ4RkZcdURGRkQiICsKKyAgICAgICAgICAgICJcdUQ5MDBcdURDMDAtXHVEOTNGXHVERkZEIiArCisgICAgICAgICAgICAiXHVEOTQwXHVEQzAwLVx1RDk3Rlx1REZGRCIgKworICAgICAgICAgICAgIlx1RDk4MFx1REMwMC1cdUQ5QkZcdURGRkQiICsKKyAgICAgICAgICAgICJcdUQ5QzBcdURDMDAtXHVEOUZGXHVERkZEIiArCisgICAgICAgICAgICAiXHVEQTAwXHVEQzAwLVx1REEzRlx1REZGRCIgKworICAgICAgICAgICAgIlx1REE0MFx1REMwMC1cdURBN0ZcdURGRkQiICsKKyAgICAgICAgICAgICJcdURBODBcdURDMDAtXHVEQUJGXHVERkZEIiArCisgICAgICAgICAgICAiXHVEQUMwXHVEQzAwLVx1REFGRlx1REZGRCIgKworICAgICAgICAgICAgIlx1REIwMFx1REMwMC1cdURCM0ZcdURGRkQiICsKKyAgICAgICAgICAgICJcdURCNDRcdURDMDAtXHVEQjdGXHVERkZEIjsKKworICAgIC8qKgorICAgICAqIFZhbGlkIGNoYXJhY3RlcnMgZm9yIElSSSBsYWJlbCBkZWZpbmVkIGluIFJGQyAzOTg3LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMQUJFTF9DSEFSID0gImEtekEtWjAtOSIgKyBVQ1NfQ0hBUjsKKworICAgIC8qKgorICAgICAqIFZhbGlkIGNoYXJhY3RlcnMgZm9yIElSSSBUTEQgZGVmaW5lZCBpbiBSRkMgMzk4Ny4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVExEX0NIQVIgPSAiYS16QS1aIiArIFVDU19DSEFSOworCisgICAgLyoqCiAgICAgICogUkZDIDEwMzUgU2VjdGlvbiAyLjMuNCBsaW1pdHMgdGhlIGxhYmVscyB0byBhIG1heGltdW0gNjMgb2N0ZXRzLgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJUkkKLSAgICAgICAgPSAiWyIgKyBHT09EX0lSSV9DSEFSICsgIl0oWyIgKyBHT09EX0lSSV9DSEFSICsgIlxcLV17MCw2MX1bIiArIEdPT0RfSVJJX0NIQVIgKyAiXSl7MCwxfSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElSSV9MQUJFTCA9CisgICAgICAgICAgICAiWyIgKyBMQUJFTF9DSEFSICsgIl0oPzpbIiArIExBQkVMX0NIQVIgKyAiXFwtXXswLDYxfVsiICsgTEFCRUxfQ0hBUiArICJdKXswLDF9IjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHT09EX0dUTERfQ0hBUiA9Ci0gICAgICAgICJhLXpBLVpcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUYiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBHVExEID0gIlsiICsgR09PRF9HVExEX0NIQVIgKyAiXXsyLDYzfSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhPU1RfTkFNRSA9ICIoIiArIElSSSArICJcXC4pKyIgKyBHVExEOworICAgIC8qKgorICAgICAqIFJGQyAzNDkyIHJlZmVyZW5jZXMgUkZDIDEwMzQgYW5kIGxpbWl0cyBQdW55Y29kZSBhbGdvcml0aG0gb3V0cHV0IHRvIDYzIGNoYXJhY3RlcnMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBVTllDT0RFX1RMRCA9ICJ4blxcLVxcLVtcXHdcXC1dezAsNTh9XFx3IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUTEQgPSAiKCIgKyBQVU5ZQ09ERV9UTEQgKyAifCIgKyAiWyIgKyBUTERfQ0hBUiArICJdezIsNjN9IiArIikiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhPU1RfTkFNRSA9ICIoIiArIElSSV9MQUJFTCArICJcXC4pKyIgKyBUTEQ7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhdHRlcm4gRE9NQUlOX05BTUUKICAgICAgICAgPSBQYXR0ZXJuLmNvbXBpbGUoIigiICsgSE9TVF9OQU1FICsgInwiICsgSVBfQUREUkVTUyArICIpIik7CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPVE9DT0wgPSAiKD9pOmh0dHB8aHR0cHN8cnRzcCk6XFwvXFwvIjsKKworICAgIC8qIEEgd29yZCBib3VuZGFyeSBvciBlbmQgb2YgaW5wdXQuICBUaGlzIGlzIHRvIHN0b3AgZm9vLnN1cmUgZnJvbSBtYXRjaGluZyBhcyBmb28uc3UgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV09SRF9CT1VOREFSWSA9ICIoPzpcXGJ8JHxeKSI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVNFUl9JTkZPID0gIig/OlthLXpBLVowLTlcXCRcXC1cXF9cXC5cXCtcXCFcXCpcXCdcXChcXCkiCisgICAgICAgICAgICArICJcXCxcXDtcXD9cXCZcXD1dfCg/OlxcJVthLWZBLUYwLTldezJ9KSl7MSw2NH0oPzpcXDooPzpbYS16QS1aMC05XFwkXFwtXFxfIgorICAgICAgICAgICAgKyAiXFwuXFwrXFwhXFwqXFwnXFwoXFwpXFwsXFw7XFw/XFwmXFw9XXwoPzpcXCVbYS1mQS1GMC05XXsyfSkpezEsMjV9KT9cXEAiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPUlRfTlVNQkVSID0gIlxcOlxcZHsxLDV9IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIX0FORF9RVUVSWSA9ICJcXC8oPzooPzpbIiArIExBQkVMX0NIQVIKKyAgICAgICAgICAgICsgIlxcO1xcL1xcP1xcOlxcQFxcJlxcPVxcI1xcfiIgIC8vIHBsdXMgb3B0aW9uYWwgcXVlcnkgcGFyYW1zCisgICAgICAgICAgICArICJcXC1cXC5cXCtcXCFcXCpcXCdcXChcXClcXCxcXF9dKXwoPzpcXCVbYS1mQS1GMC05XXsyfSkpKiI7CisKICAgICAvKioKICAgICAgKiAgUmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gbWF0Y2ggbW9zdCBwYXJ0IG9mIFJGQyAzOTg3Ci0gICAgICogIEludGVybmF0aW9uYWxpemVkIFVSTHMsIGFrYSBJUklzLiAgQ29tbW9ubHkgdXNlZCBVbmljb2RlIGNoYXJhY3RlcnMgYXJlCi0gICAgICogIGFkZGVkLgorICAgICAqICBJbnRlcm5hdGlvbmFsaXplZCBVUkxzLCBha2EgSVJJcy4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhdHRlcm4gV0VCX1VSTCA9IFBhdHRlcm4uY29tcGlsZSgKLSAgICAgICAgIigoPzooaHR0cHxodHRwc3xIdHRwfEh0dHBzfHJ0c3B8UnRzcCk6XFwvXFwvKD86KD86W2EtekEtWjAtOVxcJFxcLVxcX1xcLlxcK1xcIVxcKlxcJ1xcKFxcKSIKLSAgICAgICAgKyAiXFwsXFw7XFw/XFwmXFw9XXwoPzpcXCVbYS1mQS1GMC05XXsyfSkpezEsNjR9KD86XFw6KD86W2EtekEtWjAtOVxcJFxcLVxcXyIKLSAgICAgICAgKyAiXFwuXFwrXFwhXFwqXFwnXFwoXFwpXFwsXFw7XFw/XFwmXFw9XXwoPzpcXCVbYS1mQS1GMC05XXsyfSkpezEsMjV9KT9cXEApPyk/IgotICAgICAgICArICIoPzoiICsgRE9NQUlOX05BTUUgKyAiKSIKLSAgICAgICAgKyAiKD86XFw6XFxkezEsNX0pPykiIC8vIHBsdXMgb3B0aW9uIHBvcnQgbnVtYmVyCi0gICAgICAgICsgIihcXC8oPzooPzpbIiArIEdPT0RfSVJJX0NIQVIgKyAiXFw7XFwvXFw/XFw6XFxAXFwmXFw9XFwjXFx+IiAgLy8gcGx1cyBvcHRpb24gcXVlcnkgcGFyYW1zCi0gICAgICAgICsgIlxcLVxcLlxcK1xcIVxcKlxcJ1xcKFxcKVxcLFxcX10pfCg/OlxcJVthLWZBLUYwLTldezJ9KSkqKT8iCi0gICAgICAgICsgIig/OlxcYnwkKSIpOyAvLyBhbmQgZmluYWxseSwgYSB3b3JkIGJvdW5kYXJ5IG9yIGVuZCBvZgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5wdXQuICBUaGlzIGlzIHRvIHN0b3AgZm9vLnN1cmUgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYXMgZm9vLnN1CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIFdFQl9VUkwgPSBQYXR0ZXJuLmNvbXBpbGUoIigiCisgICAgICAgICAgICArICIoIgorICAgICAgICAgICAgKyAiKD86IiArIFBST1RPQ09MICsgIig/OiIgKyBVU0VSX0lORk8gKyAiKT8iICsgIik/IgorICAgICAgICAgICAgKyAiKD86IiArIERPTUFJTl9OQU1FICsgIikiCisgICAgICAgICAgICArICIoPzoiICsgUE9SVF9OVU1CRVIgKyAiKT8iCisgICAgICAgICAgICArICIpIgorICAgICAgICAgICAgKyAiKCIgKyBQQVRIX0FORF9RVUVSWSArICIpPyIKKyAgICAgICAgICAgICsgV09SRF9CT1VOREFSWQorICAgICAgICAgICAgKyAiKSIpOworCisgICAgLyoqCisgICAgICogUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBrbm93biBUTERzIGFuZCBwdW55Y29kZSBUTERzCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNUUklDVF9UTEQgPSAiKD86IiArCisgICAgICAgICAgICBJQU5BX1RPUF9MRVZFTF9ET01BSU5TICsgInwiICsgUFVOWUNPREVfVExEICsgIikiOworCisgICAgLyoqCisgICAgICogUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBob3N0IG5hbWVzIHVzaW5nIHtAbGluayAjU1RSSUNUX1RMRH0KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RSSUNUX0hPU1RfTkFNRSA9ICIoPzooPzoiICsgSVJJX0xBQkVMICsgIlxcLikrIgorICAgICAgICAgICAgKyBTVFJJQ1RfVExEICsgIikiOworCisgICAgLyoqCisgICAgICogUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBkb21haW4gbmFtZXMgdXNpbmcgZWl0aGVyIHtAbGluayAjU1RSSUNUX0hPU1RfTkFNRX0gb3IKKyAgICAgKiB7QGxpbmsgI0lQX0FERFJFU1N9CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBTVFJJQ1RfRE9NQUlOX05BTUUKKyAgICAgICAgICAgID0gUGF0dGVybi5jb21waWxlKCIoPzoiICsgU1RSSUNUX0hPU1RfTkFNRSArICJ8IiArIElQX0FERFJFU1MgKyAiKSIpOworCisgICAgLyoqCisgICAgICogUmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyBkb21haW4gbmFtZXMgd2l0aG91dCBhIFRMRAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRUxBWEVEX0RPTUFJTl9OQU1FID0KKyAgICAgICAgICAgICIoPzoiICsgIig/OiIgKyBJUklfTEFCRUwgKyAiKD86XFwuKD89XFxTKSkiICsiPykrIiArICJ8IiArIElQX0FERFJFU1MgKyAiKSI7CisKKyAgICAvKioKKyAgICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc3RyaW5ncyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGEgc3VwcG9ydGVkIHByb3RvY29sLiBUaGUgVExEcworICAgICAqIGFyZSBleHBlY3RlZCB0byBiZSBvbmUgb2YgdGhlIGtub3duIFRMRHMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFdFQl9VUkxfV0lUSE9VVF9QUk9UT0NPTCA9ICIoIgorICAgICAgICAgICAgKyBXT1JEX0JPVU5EQVJZCisgICAgICAgICAgICArICIoPzwhOlxcL1xcLykiCisgICAgICAgICAgICArICIoIgorICAgICAgICAgICAgKyAiKD86IiArIFNUUklDVF9ET01BSU5fTkFNRSArICIpIgorICAgICAgICAgICAgKyAiKD86IiArIFBPUlRfTlVNQkVSICsgIik/IgorICAgICAgICAgICAgKyAiKSIKKyAgICAgICAgICAgICsgIig/OiIgKyBQQVRIX0FORF9RVUVSWSArICIpPyIKKyAgICAgICAgICAgICsgV09SRF9CT1VOREFSWQorICAgICAgICAgICAgKyAiKSI7CisKKyAgICAvKioKKyAgICAgKiBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggc3RyaW5ncyB0aGF0IHN0YXJ0IHdpdGggYSBzdXBwb3J0ZWQgcHJvdG9jb2wuIFJ1bGVzIGZvciBkb21haW4KKyAgICAgKiBuYW1lcyBhbmQgVExEcyBhcmUgbW9yZSByZWxheGVkLiBUTERzIGFyZSBvcHRpb25hbC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX1VSTF9XSVRIX1BST1RPQ09MID0gIigiCisgICAgICAgICAgICArIFdPUkRfQk9VTkRBUlkKKyAgICAgICAgICAgICsgIig/OiIKKyAgICAgICAgICAgICsgIig/OiIgKyBQUk9UT0NPTCArICIoPzoiICsgVVNFUl9JTkZPICsgIik/IiArICIpIgorICAgICAgICAgICAgKyAiKD86IiArIFJFTEFYRURfRE9NQUlOX05BTUUgKyAiKT8iCisgICAgICAgICAgICArICIoPzoiICsgUE9SVF9OVU1CRVIgKyAiKT8iCisgICAgICAgICAgICArICIpIgorICAgICAgICAgICAgKyAiKD86IiArIFBBVEhfQU5EX1FVRVJZICsgIik/IgorICAgICAgICAgICAgKyBXT1JEX0JPVU5EQVJZCisgICAgICAgICAgICArICIpIjsKKworICAgIC8qKgorICAgICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIElSSXMuIElmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoIGh0dHAocyk6Ly8gdGhlIGV4cHJlc3Npb24KKyAgICAgKiB0cmllcyB0byBtYXRjaCB0aGUgVVJMIHN0cnVjdHVyZSB3aXRoIGEgcmVsYXhlZCBydWxlIGZvciBUTERzLiBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0CisgICAgICogd2l0aCBodHRwKHMpOi8vIHRoZSBUTERzIGFyZSBleHBlY3RlZCB0byBiZSBvbmUgb2YgdGhlIGtub3duIFRMRHMuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGF0dGVybiBBVVRPTElOS19XRUJfVVJMID0gUGF0dGVybi5jb21waWxlKAorICAgICAgICAgICAgIigiICsgV0VCX1VSTF9XSVRIX1BST1RPQ09MICsgInwiICsgV0VCX1VSTF9XSVRIT1VUX1BST1RPQ09MICsgIikiKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGF0dGVybiBFTUFJTF9BRERSRVNTCiAgICAgICAgID0gUGF0dGVybi5jb21waWxlKApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9TdGF0ZVNldC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdXRpbC9TdGF0ZVNldC5qYXZhCmluZGV4IGMyYTZhN2EuLjA1MWRlOGEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3V0aWwvU3RhdGVTZXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC91dGlsL1N0YXRlU2V0LmphdmEKQEAgLTI2MCw2ICsyNjAsMTIgQEAKICAgICAgICAgICAgIGNhc2UgUi5hdHRyLnN0YXRlX2VuYWJsZWQ6CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJFICIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSLmF0dHIuc3RhdGVfY2hlY2tlZDoKKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIkMgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFIuYXR0ci5zdGF0ZV9hY3RpdmF0ZWQ6CisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJBICIpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvQ29udGV4dFRoZW1lV3JhcHBlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Db250ZXh0VGhlbWVXcmFwcGVyLmphdmEKaW5kZXggZWEwODczZC4uNDg4ODg3NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Db250ZXh0VGhlbWVXcmFwcGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Db250ZXh0VGhlbWVXcmFwcGVyLmphdmEKQEAgLTEwNCwxMSArMTA0LDE1IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEFzc2V0TWFuYWdlciBnZXRBc3NldHMoKSB7CiAgICAgICAgIC8vIEVuc3VyZSB3ZSdyZSByZXR1cm5pbmcgYXNzZXRzIHdpdGggdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KLSAgICAgICAgcmV0dXJuIGdldFJlc291cmNlcygpLmdldEFzc2V0cygpOworICAgICAgICByZXR1cm4gZ2V0UmVzb3VyY2VzSW50ZXJuYWwoKS5nZXRBc3NldHMoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUmVzb3VyY2VzIGdldFJlc291cmNlcygpIHsKKyAgICAgICAgcmV0dXJuIGdldFJlc291cmNlc0ludGVybmFsKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXNvdXJjZXMgZ2V0UmVzb3VyY2VzSW50ZXJuYWwoKSB7CiAgICAgICAgIGlmIChtUmVzb3VyY2VzID09IG51bGwpIHsKICAgICAgICAgICAgIGlmIChtT3ZlcnJpZGVDb25maWd1cmF0aW9uID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzID0gc3VwZXIuZ2V0UmVzb3VyY2VzKCk7CkBAIC0xMTcsNyArMTIxLDYgQEAKICAgICAgICAgICAgICAgICBtUmVzb3VyY2VzID0gcmVzQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAgICAgICAgIHJldHVybiBtUmVzb3VyY2VzOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EcmFnRXZlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJhZ0V2ZW50LmphdmEKaW5kZXggMzQ4MzVmNC4uNzFkYjBiNSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9EcmFnRXZlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0RyYWdFdmVudC5qYXZhCkBAIC0yMSw2ICsyMSw4IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JRHJvcFBlcm1pc3Npb25zOworCiAvL1RPRE86IEltcHJvdmUgSmF2YWRvYwogLyoqCiAgKiBSZXByZXNlbnRzIGFuIGV2ZW50IHRoYXQgaXMgc2VudCBvdXQgYnkgdGhlIHN5c3RlbSBhdCB2YXJpb3VzIHRpbWVzIGR1cmluZyBhIGRyYWcgYW5kIGRyb3AKQEAgLTEyOCw3ICsxMzAsNyBAQAogICAgIGZsb2F0IG1YLCBtWTsKICAgICBDbGlwRGVzY3JpcHRpb24gbUNsaXBEZXNjcmlwdGlvbjsKICAgICBDbGlwRGF0YSBtQ2xpcERhdGE7Ci0gICAgRHJvcFBlcm1pc3Npb25Ib2xkZXIgbURyb3BQZXJtaXNzaW9uSG9sZGVyOworICAgIElEcm9wUGVybWlzc2lvbnMgbURyb3BQZXJtaXNzaW9uczsKIAogICAgIE9iamVjdCBtTG9jYWxTdGF0ZTsKICAgICBib29sZWFuIG1EcmFnUmVzdWx0OwpAQCAtMTQ2LDcgKzE0OCw3IEBACiAgICAgICogQWN0aW9uIGNvbnN0YW50IHJldHVybmVkIGJ5IHtAbGluayAjZ2V0QWN0aW9uKCl9OiBTaWduYWxzIHRoZSBzdGFydCBvZiBhCiAgICAgICogZHJhZyBhbmQgZHJvcCBvcGVyYXRpb24uIFRoZSBWaWV3IHNob3VsZCByZXR1cm4ge0Bjb2RlIHRydWV9IGZyb20gaXRzCiAgICAgICoge0BsaW5rIFZpZXcjb25EcmFnRXZlbnQoRHJhZ0V2ZW50KSBvbkRyYWdFdmVudCgpfSBoYW5kbGVyIG1ldGhvZCBvcgotICAgICAqIHtAbGluayBWaWV3LlZpZXcuT25EcmFnTGlzdGVuZXIjb25EcmFnKFZpZXcsRHJhZ0V2ZW50KSBPbkRyYWdMaXN0ZW5lci5vbkRyYWcoKX0gbGlzdGVuZXIKKyAgICAgKiB7QGxpbmsgVmlldy5PbkRyYWdMaXN0ZW5lciNvbkRyYWcoVmlldyxEcmFnRXZlbnQpIE9uRHJhZ0xpc3RlbmVyLm9uRHJhZygpfSBsaXN0ZW5lcgogICAgICAqIGlmIGl0IGNhbiBhY2NlcHQgYSBkcm9wLiBUaGUgb25EcmFnRXZlbnQoKSBvciBvbkRyYWcoKSBtZXRob2RzIHVzdWFsbHkgaW5zcGVjdCB0aGUgbWV0YWRhdGEKICAgICAgKiBmcm9tIHtAbGluayAjZ2V0Q2xpcERlc2NyaXB0aW9uKCl9IHRvIGRldGVybWluZSBpZiB0aGV5IGNhbiBhY2NlcHQgdGhlIGRhdGEgY29udGFpbmVkIGluCiAgICAgICogdGhpcyBkcmFnLiBGb3IgYW4gb3BlcmF0aW9uIHRoYXQgZG9lc24ndCByZXByZXNlbnQgZGF0YSB0cmFuc2ZlciwgdGhlc2UgbWV0aG9kcyBtYXkKQEAgLTE5MCw3ICsxOTIsNyBAQAogICAgICAqIHdpdGhpbiB0aGUgVmlldyBvYmplY3QncyBib3VuZGluZyBib3guCiAgICAgICogPHA+CiAgICAgICogVGhlIFZpZXcgc2hvdWxkIHJldHVybiB7QGNvZGUgdHJ1ZX0gZnJvbSBpdHMge0BsaW5rIFZpZXcjb25EcmFnRXZlbnQoRHJhZ0V2ZW50KX0KLSAgICAgKiBoYW5kbGVyIG9yIHtAbGluayBWaWV3LlZpZXcuT25EcmFnTGlzdGVuZXIjb25EcmFnKFZpZXcsRHJhZ0V2ZW50KSBPbkRyYWdMaXN0ZW5lci5vbkRyYWcoKX0KKyAgICAgKiBoYW5kbGVyIG9yIHtAbGluayBWaWV3Lk9uRHJhZ0xpc3RlbmVyI29uRHJhZyhWaWV3LERyYWdFdmVudCkgT25EcmFnTGlzdGVuZXIub25EcmFnKCl9CiAgICAgICogbGlzdGVuZXIgaWYgaXQgYWNjZXB0ZWQgdGhlIGRyb3AsIGFuZCB7QGNvZGUgZmFsc2V9IGlmIGl0IGlnbm9yZWQgdGhlIGRyb3AuCiAgICAgICogPC9wPgogICAgICAqIDxwPgpAQCAtMjU1LDEzICsyNTcsMTMgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaW5pdChpbnQgYWN0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBDbGlwRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIENsaXBEYXRhIGRhdGEsCi0gICAgICAgICAgICBEcm9wUGVybWlzc2lvbkhvbGRlciBkcm9wUGVybWlzc2lvbkhvbGRlciwgT2JqZWN0IGxvY2FsU3RhdGUsIGJvb2xlYW4gcmVzdWx0KSB7CisgICAgICAgICAgICBJRHJvcFBlcm1pc3Npb25zIGRyb3BQZXJtaXNzaW9ucywgT2JqZWN0IGxvY2FsU3RhdGUsIGJvb2xlYW4gcmVzdWx0KSB7CiAgICAgICAgIG1BY3Rpb24gPSBhY3Rpb247CiAgICAgICAgIG1YID0geDsKICAgICAgICAgbVkgPSB5OwogICAgICAgICBtQ2xpcERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CiAgICAgICAgIG1DbGlwRGF0YSA9IGRhdGE7Ci0gICAgICAgIG1Ecm9wUGVybWlzc2lvbkhvbGRlciA9IGRyb3BQZXJtaXNzaW9uSG9sZGVyOworICAgICAgICBtRHJvcFBlcm1pc3Npb25zID0gZHJvcFBlcm1pc3Npb25zOwogICAgICAgICBtTG9jYWxTdGF0ZSA9IGxvY2FsU3RhdGU7CiAgICAgICAgIG1EcmFnUmVzdWx0ID0gcmVzdWx0OwogICAgIH0KQEAgLTI3MiwxMyArMjc0LDEzIEBACiAKICAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgc3RhdGljIERyYWdFdmVudCBvYnRhaW4oaW50IGFjdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgT2JqZWN0IGxvY2FsU3RhdGUsCi0gICAgICAgICAgICBDbGlwRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIENsaXBEYXRhIGRhdGEsIERyb3BQZXJtaXNzaW9uSG9sZGVyIGRyb3BQZXJtaXNzaW9uSG9sZGVyLAorICAgICAgICAgICAgQ2xpcERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uLCBDbGlwRGF0YSBkYXRhLCBJRHJvcFBlcm1pc3Npb25zIGRyb3BQZXJtaXNzaW9ucywKICAgICAgICAgICAgIGJvb2xlYW4gcmVzdWx0KSB7CiAgICAgICAgIGZpbmFsIERyYWdFdmVudCBldjsKICAgICAgICAgc3luY2hyb25pemVkIChnUmVjeWNsZXJMb2NrKSB7CiAgICAgICAgICAgICBpZiAoZ1JlY3ljbGVyVG9wID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBldiA9IG5ldyBEcmFnRXZlbnQoKTsKLSAgICAgICAgICAgICAgICBldi5pbml0KGFjdGlvbiwgeCwgeSwgZGVzY3JpcHRpb24sIGRhdGEsIGRyb3BQZXJtaXNzaW9uSG9sZGVyLCBsb2NhbFN0YXRlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGV2LmluaXQoYWN0aW9uLCB4LCB5LCBkZXNjcmlwdGlvbiwgZGF0YSwgZHJvcFBlcm1pc3Npb25zLCBsb2NhbFN0YXRlLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBldjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGV2ID0gZ1JlY3ljbGVyVG9wOwpAQCAtMjg5LDcgKzI5MSw3IEBACiAgICAgICAgIGV2Lm1SZWN5Y2xlZCA9IGZhbHNlOwogICAgICAgICBldi5tTmV4dCA9IG51bGw7CiAKLSAgICAgICAgZXYuaW5pdChhY3Rpb24sIHgsIHksIGRlc2NyaXB0aW9uLCBkYXRhLCBkcm9wUGVybWlzc2lvbkhvbGRlciwgbG9jYWxTdGF0ZSwgcmVzdWx0KTsKKyAgICAgICAgZXYuaW5pdChhY3Rpb24sIHgsIHksIGRlc2NyaXB0aW9uLCBkYXRhLCBkcm9wUGVybWlzc2lvbnMsIGxvY2FsU3RhdGUsIHJlc3VsdCk7CiAKICAgICAgICAgcmV0dXJuIGV2OwogICAgIH0KQEAgLTI5Nyw3ICsyOTksNyBAQAogICAgIC8qKiBAaGlkZSAqLwogICAgIHB1YmxpYyBzdGF0aWMgRHJhZ0V2ZW50IG9idGFpbihEcmFnRXZlbnQgc291cmNlKSB7CiAgICAgICAgIHJldHVybiBvYnRhaW4oc291cmNlLm1BY3Rpb24sIHNvdXJjZS5tWCwgc291cmNlLm1ZLCBzb3VyY2UubUxvY2FsU3RhdGUsCi0gICAgICAgICAgICAgICAgc291cmNlLm1DbGlwRGVzY3JpcHRpb24sIHNvdXJjZS5tQ2xpcERhdGEsIHNvdXJjZS5tRHJvcFBlcm1pc3Npb25Ib2xkZXIsCisgICAgICAgICAgICAgICAgc291cmNlLm1DbGlwRGVzY3JpcHRpb24sIHNvdXJjZS5tQ2xpcERhdGEsIHNvdXJjZS5tRHJvcFBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgIHNvdXJjZS5tRHJhZ1Jlc3VsdCk7CiAgICAgfQogCkBAIC0zNjIsMTUgKzM2NCw5IEBACiAgICAgICAgIHJldHVybiBtQ2xpcERlc2NyaXB0aW9uOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHtAbGluayBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25Ib2xkZXJ9IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBkcmFnCi0gICAgICogbGlzdGVuZXIgdG8gcmVxdWVzdCBhbmQgcmVsZWFzZSB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBjb250ZW50IFVSSXMgY29udGFpbmVkIGluIHRoZQotICAgICAqIHtAbGluayBhbmRyb2lkLmNvbnRlbnQuQ2xpcERhdGF9IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudC4KLSAgICAgKiBUaGlzIG1ldGhvZCBvbmx5IHJldHVybnMgdmFsaWQgZGF0YSBpZiB0aGUgZXZlbnQgYWN0aW9uIGlzIHtAbGluayAjQUNUSU9OX0RST1B9LgotICAgICAqIEByZXR1cm4gVGhlIERyb3BQZXJtaXNzaW9uSG9sZGVyIG9iamVjdCB1c2VkIHRvIGhhbmRsZSBjb250ZW50IFVSSSBwZXJtaXNzaW9ucy4KLSAgICAgKi8KLSAgICBwdWJsaWMgRHJvcFBlcm1pc3Npb25Ib2xkZXIgZ2V0RHJvcFBlcm1pc3Npb25Ib2xkZXIoKSB7Ci0gICAgICAgIHJldHVybiBtRHJvcFBlcm1pc3Npb25Ib2xkZXI7CisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIElEcm9wUGVybWlzc2lvbnMgZ2V0RHJvcFBlcm1pc3Npb25zKCkgeworICAgICAgICByZXR1cm4gbURyb3BQZXJtaXNzaW9uczsKICAgICB9CiAKICAgICAvKioKQEAgLTQ5MywxMSArNDg5LDExIEBACiAgICAgICAgICAgICBkZXN0LndyaXRlSW50KDEpOwogICAgICAgICAgICAgbUNsaXBEZXNjcmlwdGlvbi53cml0ZVRvUGFyY2VsKGRlc3QsIGZsYWdzKTsKICAgICAgICAgfQotICAgICAgICBpZiAobURyb3BQZXJtaXNzaW9uSG9sZGVyID09IG51bGwpIHsKKyAgICAgICAgaWYgKG1Ecm9wUGVybWlzc2lvbnMgPT0gbnVsbCkgewogICAgICAgICAgICAgZGVzdC53cml0ZUludCgwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoMSk7Ci0gICAgICAgICAgICBtRHJvcFBlcm1pc3Npb25Ib2xkZXIud3JpdGVUb1BhcmNlbChkZXN0LCBmbGFncyk7CisgICAgICAgICAgICBkZXN0LndyaXRlU3Ryb25nQmluZGVyKG1Ecm9wUGVybWlzc2lvbnMuYXNCaW5kZXIoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUxOSw3ICs1MTUsNyBAQAogICAgICAgICAgICAgICAgIGV2ZW50Lm1DbGlwRGVzY3JpcHRpb24gPSBDbGlwRGVzY3JpcHRpb24uQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGluKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewotICAgICAgICAgICAgICAgIGV2ZW50Lm1Ecm9wUGVybWlzc2lvbkhvbGRlciA9IERyb3BQZXJtaXNzaW9uSG9sZGVyLkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChpbik7CisgICAgICAgICAgICAgICAgZXZlbnQubURyb3BQZXJtaXNzaW9ucyA9IElEcm9wUGVybWlzc2lvbnMuU3R1Yi5hc0ludGVyZmFjZShpbi5yZWFkU3Ryb25nQmluZGVyKCkpOzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBldmVudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Ecm9wUGVybWlzc2lvbkhvbGRlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Ecm9wUGVybWlzc2lvbkhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTNlNjdhLi4wMDAwMDAwCi0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJvcFBlcm1pc3Npb25Ib2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JRHJvcFBlcm1pc3Npb25Ib2xkZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1wdWJsaWMgY2xhc3MgRHJvcFBlcm1pc3Npb25Ib2xkZXIgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKLQotICAgIElEcm9wUGVybWlzc2lvbkhvbGRlciBtRHJvcFBlcm1pc3Npb25Ib2xkZXI7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBuZXcgRHJvcFBlcm1pc3Npb25Ib2xkZXIgdG8gYmUgcGFzc2VkIHRvIHRoZSBjbGllbnQgd2l0aCBhIERyYWdFdmVudC4KLSAgICAgKgotICAgICAqIEBoaWRlCi0gICAgICovCi0gICAgcHVibGljIERyb3BQZXJtaXNzaW9uSG9sZGVyKENsaXBEYXRhIGNsaXBEYXRhLCBJQWN0aXZpdHlNYW5hZ2VyIGFjdGl2aXR5TWFuYWdlciwKLSAgICAgICAgICAgIGludCBzb3VyY2VVaWQsIFN0cmluZyB0YXJnZXRQYWNrYWdlLCBpbnQgbW9kZSwgaW50IHNvdXJjZVVzZXJJZCwgaW50IHRhcmdldFVzZXJJZCkgewotICAgICAgICBtRHJvcFBlcm1pc3Npb25Ib2xkZXIgPSBuZXcgTG9jYWxEcm9wUGVybWlzc2lvbkhvbGRlcihjbGlwRGF0YSwgYWN0aXZpdHlNYW5hZ2VyLAotICAgICAgICAgICAgICAgIHNvdXJjZVVpZCwgdGFyZ2V0UGFja2FnZSwgbW9kZSwgc291cmNlVXNlcklkLCB0YXJnZXRVc2VySWQpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgTG9jYWxEcm9wUGVybWlzc2lvbkhvbGRlciBleHRlbmRzIElEcm9wUGVybWlzc2lvbkhvbGRlci5TdHViIHsKLQotICAgICAgICBwcml2YXRlIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgbUFjdGl2aXR5TWFuYWdlcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVNvdXJjZVVpZDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVRhcmdldFBhY2thZ2U7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Nb2RlOwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtU291cmNlVXNlcklkOwotICAgICAgICBwcml2YXRlIGZpbmFsIGludCBtVGFyZ2V0VXNlcklkOwotCi0gICAgICAgIElCaW5kZXIgbVBlcm1pc3Npb25Pd25lciA9IG51bGw7Ci0KLSAgICAgICAgZmluYWwgcHJpdmF0ZSBBcnJheUxpc3Q8VXJpPiBtVXJpcyA9IG5ldyBBcnJheUxpc3Q8VXJpPigpOwotCi0gICAgICAgIExvY2FsRHJvcFBlcm1pc3Npb25Ib2xkZXIoQ2xpcERhdGEgY2xpcERhdGEsIElBY3Rpdml0eU1hbmFnZXIgYWN0aXZpdHlNYW5hZ2VyLAotICAgICAgICAgICAgICAgIGludCBzb3VyY2VVaWQsIFN0cmluZyB0YXJnZXRQYWNrYWdlLCBpbnQgbW9kZSwgaW50IHNvdXJjZVVzZXJJZCwgaW50IHRhcmdldFVzZXJJZCkgewotICAgICAgICAgICAgbUFjdGl2aXR5TWFuYWdlciA9IGFjdGl2aXR5TWFuYWdlcjsKLSAgICAgICAgICAgIG1Tb3VyY2VVaWQgPSBzb3VyY2VVaWQ7Ci0gICAgICAgICAgICBtVGFyZ2V0UGFja2FnZSA9IHRhcmdldFBhY2thZ2U7Ci0gICAgICAgICAgICBtTW9kZSA9IG1vZGU7Ci0gICAgICAgICAgICBtU291cmNlVXNlcklkID0gc291cmNlVXNlcklkOwotICAgICAgICAgICAgbVRhcmdldFVzZXJJZCA9IHRhcmdldFVzZXJJZDsKLQotICAgICAgICAgICAgaW50IE4gPSBjbGlwRGF0YS5nZXRJdGVtQ291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpICE9IE47ICsraSkgewotICAgICAgICAgICAgICAgIENsaXBEYXRhLkl0ZW0gaXRlbSA9IGNsaXBEYXRhLmdldEl0ZW1BdChpKTsKLQotICAgICAgICAgICAgICAgIGlmIChpdGVtLmdldFVyaSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVVyaXMuYWRkKGl0ZW0uZ2V0VXJpKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBpdGVtLmdldEludGVudCgpOwotICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCAmJiBpbnRlbnQuZ2V0RGF0YSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbVVyaXMuYWRkKGludGVudC5nZXREYXRhKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBncmFudCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAgICAgaWYgKG1QZXJtaXNzaW9uT3duZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVBlcm1pc3Npb25Pd25lciA9IG1BY3Rpdml0eU1hbmFnZXIubmV3VXJpUGVybWlzc2lvbk93bmVyKCJkcm9wIik7Ci0KLSAgICAgICAgICAgIGxvbmcgb3JpZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGZvciAoVXJpIG1VcmkgOiBtVXJpcykgewotICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlNYW5hZ2VyLmdyYW50VXJpUGVybWlzc2lvbkZyb21Pd25lcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGVybWlzc2lvbk93bmVyLCBtU291cmNlVWlkLCBtVGFyZ2V0UGFja2FnZSwgbVVyaSwgbU1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNvdXJjZVVzZXJJZCwgbVRhcmdldFVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcmV2b2tlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICBpZiAobVBlcm1pc3Npb25Pd25lciA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKFVyaSBtVXJpIDogbVVyaXMpIHsKLSAgICAgICAgICAgICAgICBtQWN0aXZpdHlNYW5hZ2VyLnJldm9rZVVyaVBlcm1pc3Npb25Gcm9tT3duZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBtUGVybWlzc2lvbk93bmVyLCBtVXJpLCBtTW9kZSwgbVNvdXJjZVVzZXJJZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1QZXJtaXNzaW9uT3duZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVxdWVzdCBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoZSBhY3Rpdml0eSB3aGljaCBzdGFydGVkIHRoZSBkcmFnLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGdyYW50KCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbURyb3BQZXJtaXNzaW9uSG9sZGVyLmdyYW50KCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXZva2UgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUge0BsaW5rICNncmFudCgpfSBjYWxsLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJldm9rZSgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1Ecm9wUGVybWlzc2lvbkhvbGRlci5yZXZva2UoKTsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHtAbGluayBhbmRyb2lkLm9zLlBhcmNlbH0gcmVwcmVzZW50YXRpb24gb2YgdGhpcwotICAgICAqIERyb3BQZXJtaXNzaW9uSG9sZGVyIG9iamVjdC4KLSAgICAgKiBAcmV0dXJuIEluZm9ybWF0aW9uIGFib3V0IHRoZSB7QGxpbmsgYW5kcm9pZC5vcy5QYXJjZWx9IHJlcHJlc2VudGF0aW9uLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHtAbGluayBhbmRyb2lkLm9zLlBhcmNlbH0gb2JqZWN0IGZyb20gdGhpcyBEcm9wUGVybWlzc2lvbkhvbGRlciBvYmplY3QuCi0gICAgICogQHBhcmFtIGRlc3QgQSB7QGxpbmsgYW5kcm9pZC5vcy5QYXJjZWx9IG9iamVjdCBpbiB3aGljaCB0byBwdXQgdGhlIERyb3BQZXJtaXNzaW9uSG9sZGVyCi0gICAgICogICAgICAgICAgICAgb2JqZWN0LgotICAgICAqIEBwYXJhbSBmbGFncyBGbGFncyB0byBzdG9yZSBpbiB0aGUgUGFyY2VsLgotICAgICAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgewotICAgICAgICBkZXN0LndyaXRlU3Ryb25nQmluZGVyKG1Ecm9wUGVybWlzc2lvbkhvbGRlci5hc0JpbmRlcigpKTsKLSAgICB9Ci0KLSAgICBEcm9wUGVybWlzc2lvbkhvbGRlcihQYXJjZWwgaW4pIHsKLSAgICAgICAgbURyb3BQZXJtaXNzaW9uSG9sZGVyID0gSURyb3BQZXJtaXNzaW9uSG9sZGVyLlN0dWIuYXNJbnRlcmZhY2UoaW4ucmVhZFN0cm9uZ0JpbmRlcigpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIGNvbnRhaW5lciBmb3IgY3JlYXRpbmcgYSBEcm9wUGVybWlzc2lvbkhvbGRlciBmcm9tIGEgUGFyY2VsLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPERyb3BQZXJtaXNzaW9uSG9sZGVyPiBDUkVBVE9SCi0gICAgICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8RHJvcFBlcm1pc3Npb25Ib2xkZXI+KCkgewotICAgICAgICBwdWJsaWMgRHJvcFBlcm1pc3Npb25Ib2xkZXIgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRHJvcFBlcm1pc3Npb25Ib2xkZXIoaW4pOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBEcm9wUGVybWlzc2lvbkhvbGRlcltdIG5ld0FycmF5KGludCBzaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERyb3BQZXJtaXNzaW9uSG9sZGVyW3NpemVdOwotICAgICAgICB9Ci0gICAgfTsKLX0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvRHJvcFBlcm1pc3Npb25zLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Ryb3BQZXJtaXNzaW9ucy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOTQ4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0Ryb3BQZXJtaXNzaW9ucy5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACisvKgorKiogQ29weXJpZ2h0IDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgYW5kcm9pZC52aWV3OworCitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSURyb3BQZXJtaXNzaW9uczsKK2ltcG9ydCBkYWx2aWsuc3lzdGVtLkNsb3NlR3VhcmQ7CisKKworLyoqCisgKiB7QGxpbmsgRHJvcFBlcm1pc3Npb25zfSBjb250cm9scyB0aGUgYWNjZXNzIHBlcm1pc3Npb25zIGZvciB0aGUgY29udGVudCBVUklzIGFzc29jaWF0ZWQgd2l0aCBhCisgKiB7QGxpbmsgRHJhZ0V2ZW50fS4KKyAqIDxwPgorICogUGVybWlzc2lvbiBhcmUgZ3JhbnRlZCB3aGVuIHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgYnkge0BsaW5rCisgKiBhbmRyb2lkLmFwcC5BY3Rpdml0eSNyZXF1ZXN0RHJvcFBlcm1pc3Npb25zKERyYWdFdmVudCkgQWN0aXZpdHkucmVxdWVzdERyb3BQZXJtaXNzaW9uc30uCisgKiBXaGljaCBwZXJtaXNzaW9ucyBhcmUgZ3JhbnRlZCBpcyBkZWZpbmVkIGJ5IHRoZSBzZXQgb2YgZmxhZ3MgcGFzc2VkIHRvIHtAbGluaworICogVmlldyNzdGFydERyYWdBbmREcm9wKGFuZHJvaWQuY29udGVudC5DbGlwRGF0YSwgVmlldy5EcmFnU2hhZG93QnVpbGRlciwgT2JqZWN0LCBpbnQpCisgKiBWaWV3LnN0YXJ0RHJhZ0FuZERyb3B9IGJ5IHRoZSBhcHAgdGhhdCBzdGFydGVkIHRoZSBkcmFnIG9wZXJhdGlvbi4KKyAqIDxwPgorICogVGhlIGxpZmUgY3ljbGUgb2YgdGhlIHBlcm1pc3Npb25zIGlzIGJvdW5kIHRvIHRoZSBhY3Rpdml0eSB1c2VkIHRvIGNhbGwge0BsaW5rCisgKiBhbmRyb2lkLmFwcC5BY3Rpdml0eSNyZXF1ZXN0RHJvcFBlcm1pc3Npb25zKERyYWdFdmVudCkgcmVxdWVzdERyb3BQZXJtaXNzaW9uc30uIFRoZQorICogcGVybWlzc2lvbnMgYXJlIHJldm9rZWQgd2hlbiB0aGlzIGFjdGl2aXR5IGlzIGRlc3Ryb3llZCwgb3Igd2hlbiB7QGxpbmsgI3JlbGVhc2UoKX0gaXMgY2FsbGVkLAorICogd2hpY2hldmVyIG9jY3VycyBmaXJzdC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIERyb3BQZXJtaXNzaW9ucyB7CisKKyAgICBwcml2YXRlIGZpbmFsIElEcm9wUGVybWlzc2lvbnMgbURyb3BQZXJtaXNzaW9uczsKKworICAgIHByaXZhdGUgZmluYWwgQ2xvc2VHdWFyZCBtQ2xvc2VHdWFyZCA9IENsb3NlR3VhcmQuZ2V0KCk7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcge0BsaW5rIERyb3BQZXJtaXNzaW9uc30gb2JqZWN0IHRvIGNvbnRyb2wgdGhlIGFjY2VzcyBwZXJtaXNzaW9ucyBmb3IgY29udGVudAorICAgICAqIFVSSXMgYXNzb2NpYXRlZCB3aXRoIHtAbGluayBEcmFnRXZlbnR9LgorICAgICAqIEBwYXJhbSBkcmFnRXZlbnQgRHJhZyBldmVudAorICAgICAqIEByZXR1cm4ge0BsaW5rIERyb3BQZXJtaXNzaW9uc30gb2JqZWN0IG9yIG51bGwgaWYgdGhlcmUgYXJlIG5vIGNvbnRlbnQgVVJJcyBhc3NvY2lhdGVkIHdpdGgKKyAgICAgKiB0aGUge0BsaW5rIERyYWdFdmVudH0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIERyb3BQZXJtaXNzaW9ucyBvYnRhaW4oRHJhZ0V2ZW50IGRyYWdFdmVudCkgeworICAgICAgICBpZiAoZHJhZ0V2ZW50LmdldERyb3BQZXJtaXNzaW9ucygpID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgRHJvcFBlcm1pc3Npb25zKGRyYWdFdmVudC5nZXREcm9wUGVybWlzc2lvbnMoKSk7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHJpdmF0ZSBEcm9wUGVybWlzc2lvbnMoSURyb3BQZXJtaXNzaW9ucyBkcm9wUGVybWlzc2lvbnMpIHsKKyAgICAgICAgbURyb3BQZXJtaXNzaW9ucyA9IGRyb3BQZXJtaXNzaW9uczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUYWtlIHRoZSBwZXJtaXNzaW9ucyBhbmQgYmluZCB0aGVpciBsaWZldGltZSB0byB0aGUgYWN0aXZpdHkuCisgICAgICogQHBhcmFtIGFjdGl2aXR5VG9rZW4gQmluZGVyIHBvaW50aW5nIHRvIGFuIEFjdGl2aXR5IGluc3RhbmNlIHRvIGJpbmQgdGhlIGxpZmV0aW1lIHRvLgorICAgICAqIEByZXR1cm4gVHJ1ZSBpZiBwZXJtaXNzaW9ucyBhcmUgc3VjY2Vzc2Z1bGx5IHRha2VuLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gdGFrZShJQmluZGVyIGFjdGl2aXR5VG9rZW4pIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1Ecm9wUGVybWlzc2lvbnMudGFrZShhY3Rpdml0eVRva2VuKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJyZWxlYXNlIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldm9rZSBwZXJtaXNzaW9ucyBleHBsaWNpdGx5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtRHJvcFBlcm1pc3Npb25zLnJlbGVhc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICBtQ2xvc2VHdWFyZC5jbG9zZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobUNsb3NlR3VhcmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DbG9zZUd1YXJkLndhcm5JZk9wZW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbGVhc2UoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja2VkU3RhY2tMaXN0ZW5lci5haWRsCnNpbWlsYXJpdHkgaW5kZXggNzAlCnJlbmFtZSBmcm9tIGNvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwKcmVuYW1lIHRvIGNvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tlZFN0YWNrTGlzdGVuZXIuYWlkbAppbmRleCBhN2Q1Y2RhLi43N2ZhN2UyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tlZFN0YWNrTGlzdGVuZXIuYWlkbApAQCAtMjIsNiArMjIsMTUgQEAKICAgKgogICAqIEBoaWRlCiAgICovCi1vbmV3YXkgaW50ZXJmYWNlIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciB7Ci0gICAgdm9pZCBvbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKTsKK29uZXdheSBpbnRlcmZhY2UgSURvY2tlZFN0YWNrTGlzdGVuZXIgeworCisgICAgLyoqCisgICAgICogV2lsbCBmaXJlIHdoZW4gYW4gYXBwIGlzIHNob3duIGluIHNpZGUgYnkgc2lkZSBtb2RlIGFuZCBhIGRpdmlkZXIgc2hvdWxkIGJlIHNob3duLgorICAgICAqLworICAgIHZvaWQgb25EaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCB3aGVuIHRoZSBkb2NrZWQgc3RhY2sgZ2V0cyBjcmVhdGVkIG9yIHJlbW92ZWQuCisgICAgICovCisgICAgdm9pZCBvbkRvY2tlZFN0YWNrRXhpc3RzQ2hhbmdlZChib29sZWFuIGV4aXN0cyk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lXaW5kb3cuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvdy5haWRsCmluZGV4IDllNDc4YzEuLjkyMzEzOTQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvdy5haWRsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvdy5haWRsCkBAIC0yNSw2ICsyNSw4IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLklSZXN1bHRSZWNlaXZlcjsKKwogLyoqCiAgKiBBUEkgYmFjayB0byBhIGNsaWVudCB3aW5kb3cgdGhhdCB0aGUgV2luZG93IE1hbmFnZXIgdXNlcyB0byBpbmZvcm0gaXQgb2YKICAqIGludGVyZXN0aW5nIHRoaW5ncyBoYXBwZW5pbmcuCkBAIC04Myw0ICs4NSw5IEBACiAgICAgICogQ2FsbGVkIGZvciBub24tYXBwbGljYXRpb24gd2luZG93cyB3aGVuIHRoZSBlbnRlciBhbmltYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgICAgKi8KICAgICB2b2lkIGRpc3BhdGNoV2luZG93U2hvd24oKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCB3aGVuIEtleWJvYXJkIFNob3J0Y3V0cyBhcmUgcmVxdWVzdGVkIGZvciB0aGUgd2luZG93LgorICAgICAqLworICAgIHZvaWQgcmVxdWVzdEFwcEtleWJvYXJkU2hvcnRjdXRzKElSZXN1bHRSZWNlaXZlciByZWNlaXZlcik7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VyLmFpZGwgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VyLmFpZGwKaW5kZXggN2EzNzlkNTAuLmIwNDVjMTcgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXIuYWlkbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VyLmFpZGwKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgYW5kcm9pZC52aWV3OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklBc3Npc3RTY3JlZW5zaG90UmVjZWl2ZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSVJlc3VsdFJlY2VpdmVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSUlucHV0Q29udGV4dDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LklJbnB1dE1ldGhvZENsaWVudDsKIApAQCAtMjksNyArMzAsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSVJlbW90ZUNhbGxiYWNrOwogaW1wb3J0IGFuZHJvaWQudmlldy5JQXBwbGljYXRpb25Ub2tlbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSUFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjc0Z1dHVyZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSU9uS2V5Z3VhcmRFeGl0UmVzdWx0OwogaW1wb3J0IGFuZHJvaWQudmlldy5JUm90YXRpb25XYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JV2luZG93U2Vzc2lvbjsKQEAgLTEwMSwxMSArMTAyLDE0IEBACiAgICAgICogICAgICAgICAgICAgICAgICAgdGhlIHRhc2sgZG9lc24ndCBleGlzdCB5ZXQuCiAgICAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb24gQ29uZmlndXJhdGlvbiB0aGF0IGlzIGJlaW5nIHVzZWQgd2l0aCB0aGlzIHRhc2suCiAgICAgICogQHBhcmFtIGNyb3BXaW5kb3dzVG9TdGFjayBUcnVlIGlmIHRoZSBhcHAgd2luZG93cyBzaG91bGQgYmUgY3JvcHBlZCB0byB0aGUgc3RhY2sgYm91bmRzLgorICAgICAqIEBwYXJhbSBhbHdheXNGb2N1c2FibGUgVHJ1ZSBpZiB0aGUgYXBwIHdpbmRvd3MgYXJlIGFsd2F5cyBmb2N1c2FibGUgcmVnYXJkbGVzcyBvZiB0aGUgc3RhY2sKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHRoZXkgYXJlIGluLgogICAgICAqLwogICAgIHZvaWQgYWRkQXBwVG9rZW4oaW50IGFkZFBvcywgSUFwcGxpY2F0aW9uVG9rZW4gdG9rZW4sIGludCB0YXNrSWQsIGludCBzdGFja0lkLAogICAgICAgICAgICAgaW50IHJlcXVlc3RlZE9yaWVudGF0aW9uLCBib29sZWFuIGZ1bGxzY3JlZW4sIGJvb2xlYW4gc2hvd1doZW5Mb2NrZWQsIGludCB1c2VySWQsCiAgICAgICAgICAgICBpbnQgY29uZmlnQ2hhbmdlcywgYm9vbGVhbiB2b2ljZUludGVyYWN0aW9uLCBib29sZWFuIGxhdW5jaFRhc2tCZWhpbmQsCi0gICAgICAgICAgICBpbiBSZWN0IHRhc2tCb3VuZHMsIGluIENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwgYm9vbGVhbiBjcm9wV2luZG93c1RvU3RhY2spOworICAgICAgICAgICAgaW4gUmVjdCB0YXNrQm91bmRzLCBpbiBDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24sIGJvb2xlYW4gY3JvcFdpbmRvd3NUb1N0YWNrLAorICAgICAgICAgICAgYm9vbGVhbiBhbHdheXNGb2N1c2FibGUpOwogICAgIC8qKgogICAgICAqCiAgICAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiB3ZSBhcmUgYWRkaW5nIHRvIHRoZSBpbnB1dCB0YXNrIElkLgpAQCAtMzU0LDcgKzM1OCwyNCBAQAogICAgIHZvaWQgc2V0RG9ja2VkU3RhY2tSZXNpemluZyhib29sZWFuIHJlc2l6aW5nKTsKIAogICAgIC8qKgotICAgICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgZG9jayBkaXZpZGVyIGNoYW5nZXMgaXRzIHZpc2liaWxpdHkuCisgICAgICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBkb2NrIGRpdmlkZXIgY2hhbmdlcyBpdHMgdmlzaWJpbGl0eSBvciB3aGVuCisgICAgICogdGhlIGRvY2tlZCBzdGFjayBnZXRzIGFkZGVkL3JlbW92ZWQuCiAgICAgICovCi0gICAgdm9pZCByZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBsaXN0ZW5lcik7CisgICAgdm9pZCByZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoSURvY2tlZFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIpOworCisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgZGltIGxheWVyIHVzZWQgd2hpbGUgcmVzaXppbmcuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdmlzaWJsZSBXaGV0aGVyIHRoZSBkaW0gbGF5ZXIgc2hvdWxkIGJlIHZpc2libGUuCisgICAgICogQHBhcmFtIHRhcmdldFN0YWNrSWQgVGhlIGlkIG9mIHRoZSB0YXNrIHN0YWNrIHRoZSBkaW0gbGF5ZXIgc2hvdWxkIGJlIHBsYWNlZCBvbi4KKyAgICAgKiBAcGFyYW0gYWxwaGEgVGhlIHRyYW5zbHVjZW5jeSBvZiB0aGUgZGltIGxheWVyLCBiZXR3ZWVuIDAgYW5kIDEuCisgICAgICovCisgICAgdm9pZCBzZXRSZXNpemVEaW1MYXllcihib29sZWFuIHZpc2libGUsIGludCB0YXJnZXRTdGFja0lkLCBmbG9hdCBhbHBoYSk7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0cyBLZXlib2FyZCBTaG9ydGN1dHMgZnJvbSB0aGUgZGlzcGxheWVkIHdpbmRvdy4KKyAgICAgKgorICAgICAqIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZGVsaXZlciB0aGUgcmVzdWx0cyB0by4KKyAgICAgKi8KKyAgICB2b2lkIHJlcXVlc3RBcHBLZXlib2FyZFNob3J0Y3V0cyhJUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dERldmljZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JbnB1dERldmljZS5qYXZhCmluZGV4IDQ2YjlhNDYuLjg4Y2Q3Y2EgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSW5wdXREZXZpY2UuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lucHV0RGV2aWNlLmphdmEKQEAgLTc4NCw2ICs3ODQsMTUgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBTcGVjaWZpZXMgdGhlIGN1cnJlbnQgY3VzdG9tIHBvaW50ZXIuCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gZGF0YS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldEN1c3RvbVBvaW50ZXJJY29uKFBvaW50ZXJJY29uIGljb24pIHsKKyAgICAgICAgSW5wdXRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0Q3VzdG9tUG9pbnRlckljb24oaWNvbik7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJhbmdlIG9mIHZhbHVlcyBmb3IgYSBwYXJ0aWN1bGFyIHtAbGluayBNb3Rpb25FdmVudH0gYXhpcy4KICAgICAgKgogICAgICAqIEBzZWUgSW5wdXREZXZpY2UjZ2V0TW90aW9uUmFuZ2UoaW50KQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlFdmVudC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlFdmVudC5qYXZhCmluZGV4IDU1Y2Y1NmYuLmYwMzc5NTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvS2V5RXZlbnQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0tleUV2ZW50LmphdmEKQEAgLTE3NzksNiArMTc3OSw3IEBACiAgICAgICAgIHN3aXRjaCAoa2V5Q29kZSkgewogICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOgogICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0VOVEVSOgorICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX1NQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0tleWJvYXJkU2hvcnRjdXRHcm91cC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlib2FyZFNob3J0Y3V0R3JvdXAuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTMyNTViCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlib2FyZFNob3J0Y3V0R3JvdXAuamF2YQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQudmlldzsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsOworCisvKioKKyAqIEEgZ3JvdXAgb2Yge0BsaW5rIEtleWJvYXJkU2hvcnRjdXRJbmZvfS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEtleWJvYXJkU2hvcnRjdXRHcm91cCBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworICAgIHByaXZhdGUgZmluYWwgQ2hhclNlcXVlbmNlIG1MYWJlbDsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEluZm8+IG1JdGVtczsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBsYWJlbCBUaGUgdGl0bGUgdG8gYmUgdXNlZCBmb3IgdGhpcyBncm91cCwgb3IgbnVsbCBpZiB0aGVyZSBpcyBub25lLgorICAgICAqIEBwYXJhbSBpdGVtcyBUaGUgc2V0IG9mIGl0ZW1zIHRvIGJlIGluY2x1ZGVkLgorICAgICAqLworICAgIHB1YmxpYyBLZXlib2FyZFNob3J0Y3V0R3JvdXAoQE51bGxhYmxlIENoYXJTZXF1ZW5jZSBsYWJlbCwKKyAgICAgICAgICAgIEBOb25OdWxsIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEluZm8+IGl0ZW1zKSB7CisgICAgICAgIG1MYWJlbCA9IGxhYmVsOworICAgICAgICBtSXRlbXMgPSBuZXcgQXJyYXlMaXN0PD4oY2hlY2tOb3ROdWxsKGl0ZW1zKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHBhcmFtIGxhYmVsIFRoZSB0aXRsZSB0byBiZSB1c2VkIGZvciB0aGlzIGdyb3VwLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vbmUuCisgICAgICovCisgICAgcHVibGljIEtleWJvYXJkU2hvcnRjdXRHcm91cChATnVsbGFibGUgQ2hhclNlcXVlbmNlIGxhYmVsKSB7CisgICAgICAgIHRoaXMobGFiZWwsIENvbGxlY3Rpb25zLjxLZXlib2FyZFNob3J0Y3V0SW5mbz5lbXB0eUxpc3QoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBLZXlib2FyZFNob3J0Y3V0R3JvdXAoUGFyY2VsIHNvdXJjZSkgeworICAgICAgICBtSXRlbXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgbUxhYmVsID0gc291cmNlLnJlYWRDaGFyU2VxdWVuY2UoKTsKKyAgICAgICAgc291cmNlLnJlYWRUeXBlZExpc3QobUl0ZW1zLCBLZXlib2FyZFNob3J0Y3V0SW5mby5DUkVBVE9SKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsYWJlbCB0byBiZSB1c2VkIHRvIGRlc2NyaWJlIHRoaXMgZ3JvdXAuCisgICAgICovCisgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRMYWJlbCgpIHsKKyAgICAgICAgcmV0dXJuIG1MYWJlbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGl0ZW1zIGluY2x1ZGVkIGluIHRoaXMgZ3JvdXAuCisgICAgICovCisgICAgcHVibGljIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEluZm8+IGdldEl0ZW1zKCkgeworICAgICAgICByZXR1cm4gbUl0ZW1zOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZHMgYW4gaXRlbSB0byB0aGUgZXhpc3RpbmcgbGlzdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHRvIGJlIGFkZGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFkZEl0ZW0oS2V5Ym9hcmRTaG9ydGN1dEluZm8gaXRlbSkgeworICAgICAgICBtSXRlbXMuYWRkKGl0ZW0pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVDaGFyU2VxdWVuY2UobUxhYmVsKTsKKyAgICAgICAgZGVzdC53cml0ZVR5cGVkTGlzdChtSXRlbXMpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ3JlYXRvcjxLZXlib2FyZFNob3J0Y3V0R3JvdXA+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IENyZWF0b3I8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPigpIHsKKyAgICAgICAgcHVibGljIEtleWJvYXJkU2hvcnRjdXRHcm91cCBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgS2V5Ym9hcmRTaG9ydGN1dEdyb3VwKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIEtleWJvYXJkU2hvcnRjdXRHcm91cFtdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEtleWJvYXJkU2hvcnRjdXRHcm91cFtzaXplXTsKKyAgICAgICAgfQorICAgIH07Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlib2FyZFNob3J0Y3V0SW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9LZXlib2FyZFNob3J0Y3V0SW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOTAwNmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0tleWJvYXJkU2hvcnRjdXRJbmZvLmphdmEKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLnZpZXc7CisKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tBcmd1bWVudDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLkNoYXJhY3Rlci5NSU5fVkFMVUU7CisKKy8qKgorICogSW5mb3JtYXRpb24gYWJvdXQgYSBLZXlib2FyZCBTaG9ydGN1dC4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEtleWJvYXJkU2hvcnRjdXRJbmZvIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisgICAgcHJpdmF0ZSBmaW5hbCBDaGFyU2VxdWVuY2UgbUxhYmVsOworICAgIHByaXZhdGUgZmluYWwgSWNvbiBtSWNvbjsKKyAgICBwcml2YXRlIGZpbmFsIGNoYXIgbUJhc2VDaGFyYWN0ZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1vZGlmaWVyczsKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBsYWJlbCBUaGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IHRoaXMgc2hvcnRjdXQuCisgICAgICogQHBhcmFtIGljb24gQW4gaWNvbiB0aGF0IGlkZW50aWZpZXMgdGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgdGhpcyBzaG9ydGN1dC4KKyAgICAgKiBAcGFyYW0gYmFzZUNoYXJhY3RlciBUaGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcnMgdGhlIHNob3J0Y3V0LgorICAgICAqIEBwYXJhbSBtb2RpZmllcnMgVGhlIHNldCBvZiBtb2RpZmllcnMgdGhhdCwgY29tYmluZWQgd2l0aCB0aGUga2V5LCB0cmlnZ2VyIHRoZSBzaG9ydGN1dC4KKyAgICAgKiAgICAgVGhlc2Ugc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2Yge0BsaW5rIEtleUV2ZW50I01FVEFfQ1RSTF9PTn0sCisgICAgICogICAgIHtAbGluayBLZXlFdmVudCNNRVRBX1NISUZUX09OfSwge0BsaW5rIEtleUV2ZW50I01FVEFfTUVUQV9PTn0gYW5kCisgICAgICogICAgIHtAbGluayBLZXlFdmVudCNNRVRBX0FMVF9PTn0uCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBLZXlib2FyZFNob3J0Y3V0SW5mbygKKyAgICAgICAgICAgIEBOdWxsYWJsZSBDaGFyU2VxdWVuY2UgbGFiZWwsIEBOdWxsYWJsZSBJY29uIGljb24sIGNoYXIgYmFzZUNoYXJhY3RlciwgaW50IG1vZGlmaWVycykgeworICAgICAgICBtTGFiZWwgPSBsYWJlbDsKKyAgICAgICAgbUljb24gPSBpY29uOworICAgICAgICBjaGVja0FyZ3VtZW50KGJhc2VDaGFyYWN0ZXIgIT0gTUlOX1ZBTFVFKTsKKyAgICAgICAgbUJhc2VDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyOworICAgICAgICBtTW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBzaG9ydGN1dHMgd2l0aCBhIGxhYmVsIGFuZCBubyBpY29uLgorICAgICAqCisgICAgICogQHBhcmFtIGxhYmVsIFRoZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGFjdGlvbiBwZXJmb3JtZWQgYnkgdGhpcyBzaG9ydGN1dC4KKyAgICAgKiBAcGFyYW0gYmFzZUNoYXJhY3RlciBUaGUgY2hhcmFjdGVyIHRoYXQgdHJpZ2dlcnMgdGhlIHNob3J0Y3V0LgorICAgICAqIEBwYXJhbSBtb2RpZmllcnMgVGhlIHNldCBvZiBtb2RpZmllcnMgdGhhdCwgY29tYmluZWQgd2l0aCB0aGUga2V5LCB0cmlnZ2VyIHRoZSBzaG9ydGN1dC4KKyAgICAgKiAgICAgVGhlc2Ugc2hvdWxkIGJlIGEgY29tYmluYXRpb24gb2Yge0BsaW5rIEtleUV2ZW50I01FVEFfQ1RSTF9PTn0sCisgICAgICogICAgIHtAbGluayBLZXlFdmVudCNNRVRBX1NISUZUX09OfSwge0BsaW5rIEtleUV2ZW50I01FVEFfTUVUQV9PTn0gYW5kCisgICAgICogICAgIHtAbGluayBLZXlFdmVudCNNRVRBX0FMVF9PTn0uCisgICAgICovCisgICAgcHVibGljIEtleWJvYXJkU2hvcnRjdXRJbmZvKENoYXJTZXF1ZW5jZSBsYWJlbCwgY2hhciBiYXNlQ2hhcmFjdGVyLCBpbnQgbW9kaWZpZXJzKSB7CisgICAgICAgIG1MYWJlbCA9IGxhYmVsOworICAgICAgICBjaGVja0FyZ3VtZW50KGJhc2VDaGFyYWN0ZXIgIT0gTUlOX1ZBTFVFKTsKKyAgICAgICAgbUJhc2VDaGFyYWN0ZXIgPSBiYXNlQ2hhcmFjdGVyOworICAgICAgICBtTW9kaWZpZXJzID0gbW9kaWZpZXJzOworICAgICAgICBtSWNvbiA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBLZXlib2FyZFNob3J0Y3V0SW5mbyhQYXJjZWwgc291cmNlKSB7CisgICAgICAgIG1MYWJlbCA9IHNvdXJjZS5yZWFkQ2hhclNlcXVlbmNlKCk7CisgICAgICAgIG1JY29uID0gKEljb24pIHNvdXJjZS5yZWFkUGFyY2VsYWJsZShudWxsKTsKKyAgICAgICAgbUJhc2VDaGFyYWN0ZXIgPSAoY2hhcikgc291cmNlLnJlYWRJbnQoKTsKKyAgICAgICAgbU1vZGlmaWVycyA9IHNvdXJjZS5yZWFkSW50KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgbGFiZWwgdG8gYmUgdXNlZCB0byBkZXNjcmliZSB0aGlzIHNob3J0Y3V0LgorICAgICAqLworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgZ2V0TGFiZWwoKSB7CisgICAgICAgIHJldHVybiBtTGFiZWw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgaWNvbiB0byBiZSB1c2VkIHRvIGRlc2NyaWJlIHRoaXMgc2hvcnRjdXQuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBOdWxsYWJsZQorICAgIHB1YmxpYyBJY29uIGdldEljb24oKSB7CisgICAgICAgIHJldHVybiBtSWNvbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBiYXNlIGNoYXJhY3RlciB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZSBtb2RpZmllcnMsIHRyaWdnZXJzIHRoaXMgc2hvcnRjdXQuCisgICAgICovCisgICAgcHVibGljIGNoYXIgZ2V0QmFzZUNoYXJhY3RlcigpIHsKKyAgICAgICAgcmV0dXJuIG1CYXNlQ2hhcmFjdGVyOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBtb2RpZmllcnMgdGhhdCwgY29tYmluZWQgd2l0aCB0aGUga2V5LCB0cmlnZ2VyIHRoaXMgc2hvcnRjdXQuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRNb2RpZmllcnMoKSB7CisgICAgICAgIHJldHVybiBtTW9kaWZpZXJzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgIGRlc3Qud3JpdGVDaGFyU2VxdWVuY2UobUxhYmVsKTsKKyAgICAgICAgZGVzdC53cml0ZVBhcmNlbGFibGUobUljb24sIDApOworICAgICAgICBkZXN0LndyaXRlSW50KG1CYXNlQ2hhcmFjdGVyKTsKKyAgICAgICAgZGVzdC53cml0ZUludChtTW9kaWZpZXJzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIENyZWF0b3I8S2V5Ym9hcmRTaG9ydGN1dEluZm8+IENSRUFUT1IgPQorICAgICAgICAgICAgbmV3IENyZWF0b3I8S2V5Ym9hcmRTaG9ydGN1dEluZm8+KCkgeworICAgICAgICBwdWJsaWMgS2V5Ym9hcmRTaG9ydGN1dEluZm8gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgc291cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEtleWJvYXJkU2hvcnRjdXRJbmZvKHNvdXJjZSk7CisgICAgICAgIH0KKyAgICAgICAgcHVibGljIEtleWJvYXJkU2hvcnRjdXRJbmZvW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgS2V5Ym9hcmRTaG9ydGN1dEluZm9bc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTGF5b3V0SW5mbGF0ZXIuamF2YQppbmRleCBhYTI5NjM2Li45MTRiZDU2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0xheW91dEluZmxhdGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9MYXlvdXRJbmZsYXRlci5qYXZhCkBAIC01NTUsNiArNTU1LDI2IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc0xvYWRlciBCT09UX0NMQVNTX0xPQURFUiA9IExheW91dEluZmxhdGVyLmNsYXNzLmdldENsYXNzTG9hZGVyKCk7CisKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdmVyaWZ5Q2xhc3NMb2FkZXIoQ29uc3RydWN0b3I8PyBleHRlbmRzIFZpZXc+IGNvbnN0cnVjdG9yKSB7CisgICAgICAgIGZpbmFsIENsYXNzTG9hZGVyIGNvbnN0cnVjdG9yTG9hZGVyID0gY29uc3RydWN0b3IuZ2V0RGVjbGFyaW5nQ2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICBpZiAoY29uc3RydWN0b3JMb2FkZXIgPT0gQk9PVF9DTEFTU19MT0FERVIpIHsKKyAgICAgICAgICAgIC8vIGZhc3QgcGF0aCBmb3IgYm9vdCBjbGFzcyBsb2FkZXIgKG1vc3QgY29tbW9uIGNhc2U/KSAtIGFsd2F5cyBvaworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gaW4gYWxsIG5vcm1hbCBjYXNlcyAobm8gZHluYW1pYyBjb2RlIGxvYWRpbmcpLCB3ZSB3aWxsIGV4aXQgdGhlIGZvbGxvd2luZyBsb29wIG9uIHRoZQorICAgICAgICAvLyBmaXJzdCBpdGVyYXRpb24gKGkuZS4gd2hlbiB0aGUgZGVjbGFyaW5nIGNsYXNzbG9hZGVyIGlzIHRoZSBjb250ZXh0cyBjbGFzcyBsb2FkZXIpLgorICAgICAgICBDbGFzc0xvYWRlciBjbCA9IG1Db250ZXh0LmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvckxvYWRlciA9PSBjbCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2wgPSBjbC5nZXRQYXJlbnQoKTsKKyAgICAgICAgfSB3aGlsZSAoY2wgIT0gbnVsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBMb3ctbGV2ZWwgZnVuY3Rpb24gZm9yIGluc3RhbnRpYXRpbmcgYSB2aWV3IGJ5IG5hbWUuIFRoaXMgYXR0ZW1wdHMgdG8KICAgICAgKiBpbnN0YW50aWF0ZSBhIHZpZXcgY2xhc3Mgb2YgdGhlIGdpdmVuIDx2YXI+bmFtZTwvdmFyPiBmb3VuZCBpbiB0aGlzCkBAIC01NzUsNiArNTk1LDEwIEBACiAgICAgcHVibGljIGZpbmFsIFZpZXcgY3JlYXRlVmlldyhTdHJpbmcgbmFtZSwgU3RyaW5nIHByZWZpeCwgQXR0cmlidXRlU2V0IGF0dHJzKQogICAgICAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24sIEluZmxhdGVFeGNlcHRpb24gewogICAgICAgICBDb25zdHJ1Y3Rvcjw/IGV4dGVuZHMgVmlldz4gY29uc3RydWN0b3IgPSBzQ29uc3RydWN0b3JNYXAuZ2V0KG5hbWUpOworICAgICAgICBpZiAoY29uc3RydWN0b3IgIT0gbnVsbCAmJiAhdmVyaWZ5Q2xhc3NMb2FkZXIoY29uc3RydWN0b3IpKSB7CisgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IG51bGw7CisgICAgICAgICAgICBzQ29uc3RydWN0b3JNYXAucmVtb3ZlKG5hbWUpOworICAgICAgICB9CiAgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBWaWV3PiBjbGF6eiA9IG51bGw7CiAKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvTW90aW9uRXZlbnQuamF2YQppbmRleCA1MjdkN2U1Li5hMGY1MTQyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L01vdGlvbkV2ZW50LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Nb3Rpb25FdmVudC5qYXZhCkBAIC05NzgsNiArOTc4LDM3IEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVhJU19TQ1JPTEwgPSAyNjsKIAogICAgIC8qKgorICAgICAqIEF4aXMgY29uc3RhbnQ6IFRoZSBtb3ZlbWVudCBvZiB4IHBvc2l0aW9uIG9mIGEgbW90aW9uIGV2ZW50LgorICAgICAqIDxwPgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+Rm9yIGEgbW91c2UsIHJlcG9ydHMgYSBkaWZmZXJlbmNlIG9mIHggcG9zaXRpb24gYmV0d2VlbiB0aGUgcHJldmlvdXMgcG9zaXRpb24uCisgICAgICogVGhpcyBpcyB1c2VmdWwgd2hlbiBwb2ludGVyIGlzIGNhcHR1cmVkLCBpbiB0aGF0IGNhc2UgdGhlIG1vdXNlIHBvaW50ZXIgZG9lc24ndCBjaGFuZ2UKKyAgICAgKiB0aGUgbG9jYXRpb24gYnV0IHRoaXMgYXhpcyByZXBvcnRzIHRoZSBkaWZmZXJlbmNlIHdoaWNoIGFsbG93cyB0aGUgYXBwIHRvIHNlZQorICAgICAqIGhvdyB0aGUgbW91c2UgaXMgbW92ZWQuCisgICAgICogPC91bD4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAc2VlICNnZXRBeGlzVmFsdWUoaW50LCBpbnQpCisgICAgICogQHNlZSAjZ2V0SGlzdG9yaWNhbEF4aXNWYWx1ZShpbnQsIGludCwgaW50KQorICAgICAqIEBzZWUgTW90aW9uRXZlbnQuUG9pbnRlckNvb3JkcyNnZXRBeGlzVmFsdWUoaW50LCBpbnQpCisgICAgICogQHNlZSBJbnB1dERldmljZSNnZXRNb3Rpb25SYW5nZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWCA9IDI3OworCisgICAgLyoqCisgICAgICogQXhpcyBjb25zdGFudDogVGhlIG1vdmVtZW50IG9mIHkgcG9zaXRpb24gb2YgYSBtb3Rpb24gZXZlbnQuCisgICAgICogPHA+CisgICAgICogVGhpcyBpcyBzaW1pbGFyIHRvIHtAbGluayAjQVhJU19SRUxBVElWRV9YfSBidXQgZm9yIHktYXhpcy4KKyAgICAgKiA8L3A+CisgICAgICoKKyAgICAgKiBAc2VlICNnZXRBeGlzVmFsdWUoaW50LCBpbnQpCisgICAgICogQHNlZSAjZ2V0SGlzdG9yaWNhbEF4aXNWYWx1ZShpbnQsIGludCwgaW50KQorICAgICAqIEBzZWUgTW90aW9uRXZlbnQuUG9pbnRlckNvb3JkcyNnZXRBeGlzVmFsdWUoaW50LCBpbnQpCisgICAgICogQHNlZSBJbnB1dERldmljZSNnZXRNb3Rpb25SYW5nZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFYSVNfUkVMQVRJVkVfWSA9IDI4OworCisgICAgLyoqCiAgICAgICogQXhpcyBjb25zdGFudDogR2VuZXJpYyAxIGF4aXMgb2YgYSBtb3Rpb24gZXZlbnQuCiAgICAgICogVGhlIGludGVycHJldGF0aW9uIG9mIGEgZ2VuZXJpYyBheGlzIGlzIGRldmljZS1zcGVjaWZpYy4KICAgICAgKgpAQCAtMTE4OCw2ICsxMjE5LDggQEAKICAgICAgICAgbmFtZXMuYXBwZW5kKEFYSVNfRElTVEFOQ0UsICJBWElTX0RJU1RBTkNFIik7CiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX1RJTFQsICJBWElTX1RJTFQiKTsKICAgICAgICAgbmFtZXMuYXBwZW5kKEFYSVNfU0NST0xMLCAiQVhJU19TQ1JPTEwiKTsKKyAgICAgICAgbmFtZXMuYXBwZW5kKEFYSVNfUkVMQVRJVkVfWCwgIkFYSVNfUkVBTFRJVkVfWCIpOworICAgICAgICBuYW1lcy5hcHBlbmQoQVhJU19SRUxBVElWRV9ZLCAiQVhJU19SRUFMVElWRV9ZIik7CiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX0dFTkVSSUNfMSwgIkFYSVNfR0VORVJJQ18xIik7CiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX0dFTkVSSUNfMiwgIkFYSVNfR0VORVJJQ18yIik7CiAgICAgICAgIG5hbWVzLmFwcGVuZChBWElTX0dFTkVSSUNfMywgIkFYSVNfR0VORVJJQ18zIik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1BvaW50ZXJJY29uLmphdmEKaW5kZXggZDJhN2Q0YS4uN2JhMDQ2YiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9Qb2ludGVySWNvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvUG9pbnRlckljb24uamF2YQpAQCAtMTYsOCArMTYsOCBAQAogCiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAotaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzOwogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlhtbFJlczsKQEAgLTM5LDEzICszOSwxMSBAQAogICogUG9pbnRlciBpY29ucyBjYW4gYmUgcHJvdmlkZWQgZWl0aGVyIGJ5IHRoZSBzeXN0ZW0gdXNpbmcgc3lzdGVtIHN0eWxlcywKICAqIG9yIGJ5IGFwcGxpY2F0aW9ucyB1c2luZyBiaXRtYXBzIG9yIGFwcGxpY2F0aW9uIHJlc291cmNlcy4KICAqIDwvcD4KLSAqCi0gKiBAaGlkZQogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgUG9pbnRlckljb24gaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBvaW50ZXJJY29uIjsKIAotICAgIC8qKiBTdHlsZSBjb25zdGFudDogQ3VzdG9tIGljb24gd2l0aCBhIHVzZXItc3VwcGxpZWQgYml0bWFwLiAqLworICAgIC8qKiB7QGhpZGV9IFN0eWxlIGNvbnN0YW50OiBDdXN0b20gaWNvbiB3aXRoIGEgdXNlci1zdXBwbGllZCBiaXRtYXAuICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfQ1VTVE9NID0gLTE7CiAKICAgICAvKiogU3R5bGUgY29uc3RhbnQ6IE51bGwgaWNvbi4gIEl0IGhhcyBubyBiaXRtYXAuICovCkBAIC01NCw2ICs1Miw3IEBACiAgICAgLyoqIFN0eWxlIGNvbnN0YW50OiBubyBpY29ucyBhcmUgc3BlY2lmaWVkLiBJZiBhbGwgdmlld3MgdXNlcyB0aGlzLCB0aGVuIGZhbGxzIGJhY2sKICAgICAgKiB0byB0aGUgZGVmYXVsdCBzdHlsZSwgYnV0IHRoaXMgaXMgaGVscGZ1bCB0byBkaXN0aW5ndWlzaCBhIHZpZXcgZXhwbGljaXRseSB3YW50CiAgICAgICogdG8gaGF2ZSB0aGUgZGVmYXVsdCBpY29uLgorICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RZTEVfTk9UX1NQRUNJRklFRCA9IDE7CiAKQEAgLTEzNSwxMCArMTM0LDE0IEBACiAgICAgLy8gY29uZmxpY3RzIHdpdGggYW55IHN5c3RlbSBzdHlsZXMgdGhhdCBtYXkgYmUgZGVmaW5lZCBpbiB0aGUgZnV0dXJlLgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVFlMRV9PRU1fRklSU1QgPSAxMDAwMDsKIAotICAgIC8qKiB7QGhpZGV9IFRoZSBkZWZhdWx0IHBvaW50ZXIgaWNvbi4gKi8KKyAgICAvKiogVGhlIGRlZmF1bHQgcG9pbnRlciBpY29uLiAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUWUxFX0RFRkFVTFQgPSBTVFlMRV9BUlJPVzsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBvaW50ZXJJY29uIGdOdWxsSWNvbiA9IG5ldyBQb2ludGVySWNvbihTVFlMRV9OVUxMKTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTcGFyc2VBcnJheTxQb2ludGVySWNvbj4gZ1N5c3RlbUljb25zID0gbmV3IFNwYXJzZUFycmF5PFBvaW50ZXJJY29uPigpOworCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIHNVc2VMYXJnZUljb25zID0gZmFsc2U7CiAKICAgICBwcml2YXRlIGZpbmFsIGludCBtU3R5bGU7CiAgICAgcHJpdmF0ZSBpbnQgbVN5c3RlbUljb25SZXNvdXJjZUlkOwpAQCAtMTYwLDYgKzE2Myw3IEBACiAgICAgICogQHJldHVybiBUaGUgbnVsbCBwb2ludGVyIGljb24uCiAgICAgICoKICAgICAgKiBAc2VlICNTVFlMRV9OVUxMCisgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFBvaW50ZXJJY29uIGdldE51bGxJY29uKCkgewogICAgICAgICByZXR1cm4gZ051bGxJY29uOwpAQCAtMTcyLDggKzE3Niw5IEBACiAgICAgICogQHJldHVybiBUaGUgZGVmYXVsdCBwb2ludGVyIGljb24uCiAgICAgICoKICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBjb250ZXh0IGlzIG51bGwuCisgICAgICogQGhpZGUKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBvaW50ZXJJY29uIGdldERlZmF1bHRJY29uKENvbnRleHQgY29udGV4dCkgeworICAgIHB1YmxpYyBzdGF0aWMgUG9pbnRlckljb24gZ2V0RGVmYXVsdEljb24oQE5vbk51bGwgQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHJldHVybiBnZXRTeXN0ZW1JY29uKGNvbnRleHQsIFNUWUxFX0RFRkFVTFQpOwogICAgIH0KIApAQCAtMTg3LDcgKzE5Miw3IEBACiAgICAgICoKICAgICAgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBjb250ZXh0IGlzIG51bGwuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQb2ludGVySWNvbiBnZXRTeXN0ZW1JY29uKENvbnRleHQgY29udGV4dCwgaW50IHN0eWxlKSB7CisgICAgcHVibGljIHN0YXRpYyBQb2ludGVySWNvbiBnZXRTeXN0ZW1JY29uKEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgaW50IHN0eWxlKSB7CiAgICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvbnRleHQgbXVzdCBub3QgYmUgbnVsbCIpOwogICAgICAgICB9CkBAIC0xOTYsMTUgKzIwMSwxNyBAQAogICAgICAgICAgICAgcmV0dXJuIGdOdWxsSWNvbjsKICAgICAgICAgfQogCisgICAgICAgIFBvaW50ZXJJY29uIGljb24gPSBnU3lzdGVtSWNvbnMuZ2V0KHN0eWxlKTsKKyAgICAgICAgaWYgKGljb24gIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGljb247CisgICAgICAgIH0KKwogICAgICAgICBpbnQgc3R5bGVJbmRleCA9IGdldFN5c3RlbUljb25TdHlsZUluZGV4KHN0eWxlKTsKICAgICAgICAgaWYgKHN0eWxlSW5kZXggPT0gMCkgewogICAgICAgICAgICAgc3R5bGVJbmRleCA9IGdldFN5c3RlbUljb25TdHlsZUluZGV4KFNUWUxFX0RFRkFVTFQpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IGFjY2Vzc2liaWxpdHlDb25maWcgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50Rm9yVXNlcigKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfTEFSR0VfUE9JTlRFUl9JQ09OLAotICAgICAgICAgICAgICAgICAgICAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCk7Ci0gICAgICAgIGludCBkZWZTdHlsZSA9IChhY2Nlc3NpYmlsaXR5Q29uZmlnID09IDEpID8KKyAgICAgICAgaW50IGRlZlN0eWxlID0gc1VzZUxhcmdlSWNvbnMgPwogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGUuTGFyZ2VQb2ludGVyIDogY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZS5Qb2ludGVyOwogICAgICAgICBUeXBlZEFycmF5IGEgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMobnVsbCwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5Qb2ludGVyLApAQCAtMjE3LDEyICsyMjQsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBzdHlsZSA9PSBTVFlMRV9ERUZBVUxUID8gZ051bGxJY29uIDogZ2V0U3lzdGVtSWNvbihjb250ZXh0LCBTVFlMRV9ERUZBVUxUKTsKICAgICAgICAgfQogCi0gICAgICAgIFBvaW50ZXJJY29uIGljb24gPSBuZXcgUG9pbnRlckljb24oc3R5bGUpOworICAgICAgICBpY29uID0gbmV3IFBvaW50ZXJJY29uKHN0eWxlKTsKICAgICAgICAgaWYgKChyZXNvdXJjZUlkICYgMHhmZjAwMDAwMCkgPT0gMHgwMTAwMDAwMCkgewogICAgICAgICAgICAgaWNvbi5tU3lzdGVtSWNvblJlc291cmNlSWQgPSByZXNvdXJjZUlkOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWNvbi5sb2FkUmVzb3VyY2UoY29udGV4dCwgY29udGV4dC5nZXRSZXNvdXJjZXMoKSwgcmVzb3VyY2VJZCk7CiAgICAgICAgIH0KKyAgICAgICAgZ1N5c3RlbUljb25zLmFwcGVuZChzdHlsZSwgaWNvbik7CiAgICAgICAgIHJldHVybiBpY29uOwogICAgIH0KIApAQCAtMjM5LDcgKzI0Nyw4IEBACiAgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYml0bWFwIGlzIG51bGwsIG9yIGlmIHRoZSB4L3kgaG90c3BvdAogICAgICAqICAgICAgICAgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFBvaW50ZXJJY29uIGNyZWF0ZUN1c3RvbUljb24oQml0bWFwIGJpdG1hcCwgZmxvYXQgaG90U3BvdFgsIGZsb2F0IGhvdFNwb3RZKSB7CisgICAgcHVibGljIHN0YXRpYyBQb2ludGVySWNvbiBjcmVhdGVDdXN0b21JY29uKAorICAgICAgICAgICAgQE5vbk51bGwgQml0bWFwIGJpdG1hcCwgZmxvYXQgaG90U3BvdFgsIGZsb2F0IGhvdFNwb3RZKSB7CiAgICAgICAgIGlmIChiaXRtYXAgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYml0bWFwIG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICAgfQpAQCAtMjczLDcgKzI4Miw3IEBACiAgICAgICogQHRocm93cyBSZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRpb24gaWYgdGhlIHJlc291cmNlIHdhcyBub3QgZm91bmQgb3IgdGhlIGRyYXdhYmxlCiAgICAgICogbGlua2VkIGluIHRoZSByZXNvdXJjZSB3YXMgbm90IGZvdW5kLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUG9pbnRlckljb24gbG9hZEN1c3RvbUljb24oUmVzb3VyY2VzIHJlc291cmNlcywgQFhtbFJlcyBpbnQgcmVzb3VyY2VJZCkgeworICAgIHB1YmxpYyBzdGF0aWMgUG9pbnRlckljb24gbG9hZEN1c3RvbUljb24oQE5vbk51bGwgUmVzb3VyY2VzIHJlc291cmNlcywgQFhtbFJlcyBpbnQgcmVzb3VyY2VJZCkgewogICAgICAgICBpZiAocmVzb3VyY2VzID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInJlc291cmNlcyBtdXN0IG5vdCBiZSBudWxsIik7CiAgICAgICAgIH0KQEAgLTI5MSwxMCArMzAwLDkgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBsb2FkZWQgcG9pbnRlciBpY29uLgogICAgICAqCiAgICAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgY29udGV4dCBpcyBudWxsLgotICAgICAqIEBzZWUgI2lzTG9hZGVkKCkKICAgICAgKiBAaGlkZQogICAgICAqLwotICAgIHB1YmxpYyBQb2ludGVySWNvbiBsb2FkKENvbnRleHQgY29udGV4dCkgeworICAgIHB1YmxpYyBQb2ludGVySWNvbiBsb2FkKEBOb25OdWxsIENvbnRleHQgY29udGV4dCkgewogICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb250ZXh0IG11c3Qgbm90IGJlIG51bGwiKTsKICAgICAgICAgfQpAQCAtMzA5LDgzICszMTcsMTEgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBvaW50ZXIgaWNvbiBzdHlsZSBpcyB7QGxpbmsgI1NUWUxFX05VTEx9LgotICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBwb2ludGVyIGljb24gc3R5bGUgaXMge0BsaW5rICNTVFlMRV9OVUxMfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc051bGxJY29uKCkgewotICAgICAgICByZXR1cm4gbVN0eWxlID09IFNUWUxFX05VTEw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb2ludGVyIGljb24gaGFzIGJlZW4gbG9hZGVkIGFuZCBpdHMgYml0bWFwIGFuZCBob3RzcG90Ci0gICAgICogaW5mb3JtYXRpb24gYXJlIGF2YWlsYWJsZS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgcG9pbnRlciBpY29uIGlzIGxvYWRlZC4KLSAgICAgKiBAc2VlICNsb2FkKENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNMb2FkZWQoKSB7Ci0gICAgICAgIHJldHVybiBtQml0bWFwICE9IG51bGwgfHwgbVN0eWxlID09IFNUWUxFX05VTEw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc3R5bGUgb2YgdGhlIHBvaW50ZXIgaWNvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIHBvaW50ZXIgaWNvbiBzdHlsZS4KLSAgICAgKi8KKyAgICAvKiogQGhpZGUgKi8KICAgICBwdWJsaWMgaW50IGdldFN0eWxlKCkgewogICAgICAgICByZXR1cm4gbVN0eWxlOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGJpdG1hcCBvZiB0aGUgcG9pbnRlciBpY29uLgotICAgICAqCi0gICAgICogQHJldHVybiBUaGUgcG9pbnRlciBpY29uIGJpdG1hcCwgb3IgbnVsbCBpZiB0aGUgc3R5bGUgaXMge0BsaW5rICNTVFlMRV9OVUxMfS4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBiaXRtYXAgaXMgbm90IGxvYWRlZC4KLSAgICAgKiBAc2VlICNpc0xvYWRlZCgpCi0gICAgICogQHNlZSAjbG9hZChDb250ZXh0KQotICAgICAqLwotICAgIHB1YmxpYyBCaXRtYXAgZ2V0Qml0bWFwKCkgewotICAgICAgICB0aHJvd0lmSWNvbklzTm90TG9hZGVkKCk7Ci0gICAgICAgIHJldHVybiBtQml0bWFwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIFggb2Zmc2V0IG9mIHRoZSBwb2ludGVyIGljb24gaG90c3BvdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gVGhlIGhvdHNwb3QgWCBvZmZzZXQuCi0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgYml0bWFwIGlzIG5vdCBsb2FkZWQuCi0gICAgICogQHNlZSAjaXNMb2FkZWQoKQotICAgICAqIEBzZWUgI2xvYWQoQ29udGV4dCkKLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZ2V0SG90U3BvdFgoKSB7Ci0gICAgICAgIHRocm93SWZJY29uSXNOb3RMb2FkZWQoKTsKLSAgICAgICAgcmV0dXJuIG1Ib3RTcG90WDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBZIG9mZnNldCBvZiB0aGUgcG9pbnRlciBpY29uIGhvdHNwb3QuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFRoZSBob3RzcG90IFkgb2Zmc2V0LgotICAgICAqCi0gICAgICogQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGJpdG1hcCBpcyBub3QgbG9hZGVkLgotICAgICAqIEBzZWUgI2lzTG9hZGVkKCkKLSAgICAgKiBAc2VlICNsb2FkKENvbnRleHQpCi0gICAgICovCi0gICAgcHVibGljIGZsb2F0IGdldEhvdFNwb3RZKCkgewotICAgICAgICB0aHJvd0lmSWNvbklzTm90TG9hZGVkKCk7Ci0gICAgICAgIHJldHVybiBtSG90U3BvdFk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHRocm93SWZJY29uSXNOb3RMb2FkZWQoKSB7Ci0gICAgICAgIGlmICghaXNMb2FkZWQoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhlIGljb24gaXMgbm90IGxvYWRlZC4iKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPFBvaW50ZXJJY29uPiBDUkVBVE9SCiAgICAgICAgICAgICA9IG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8UG9pbnRlckljb24+KCkgewogICAgICAgICBwdWJsaWMgUG9pbnRlckljb24gY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKaW5kZXggMzk0NjYwZi4uZWY1MGZkYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlLmphdmEKQEAgLTU3LDYgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgaW50IG5hdGl2ZUdldEhlaWdodChsb25nIG5hdGl2ZU9iamVjdCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXROZXh0RnJhbWVOdW1iZXIobG9uZyBuYXRpdmVPYmplY3QpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbmF0aXZlU2V0U2NhbGluZ01vZGUobG9uZyBuYXRpdmVPYmplY3QsIGludCBzY2FsaW5nTW9kZSk7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxTdXJmYWNlPiBDUkVBVE9SID0KICAgICAgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8U3VyZmFjZT4oKSB7CkBAIC05NSw2ICs5NiwyMSBAQAogICAgIHByaXZhdGUgSHd1aUNvbnRleHQgbUh3dWlDb250ZXh0OwogCiAgICAgLyoqIEBoaWRlICovCisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoe1NDQUxJTkdfTU9ERV9GUkVFWkUsIFNDQUxJTkdfTU9ERV9TQ0FMRV9UT19XSU5ET1csCisgICAgICAgICAgICAgICAgICAgIFNDQUxJTkdfTU9ERV9TQ0FMRV9DUk9QLCBTQ0FMSU5HX01PREVfTk9fU0NBTEVfQ1JPUH0pCisgICAgcHVibGljIEBpbnRlcmZhY2UgU2NhbGluZ01vZGUge30KKyAgICAvLyBGcm9tIHN5c3RlbS93aW5kb3cuaAorICAgIC8qKiBAaGlkZSAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgU0NBTElOR19NT0RFX0ZSRUVaRSA9IDA7CisgICAgLyoqIEBoaWRlICovCisgICAgc3RhdGljIGZpbmFsIGludCBTQ0FMSU5HX01PREVfU0NBTEVfVE9fV0lORE9XID0gMTsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IFNDQUxJTkdfTU9ERV9TQ0FMRV9DUk9QID0gMjsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IFNDQUxJTkdfTU9ERV9OT19TQ0FMRV9DUk9QID0gMzsKKworICAgIC8qKiBAaGlkZSAqLwogICAgIEBJbnREZWYoe1JPVEFUSU9OXzAsIFJPVEFUSU9OXzkwLCBST1RBVElPTl8xODAsIFJPVEFUSU9OXzI3MH0pCiAgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQogICAgIHB1YmxpYyBAaW50ZXJmYWNlIFJvdGF0aW9uIHt9CkBAIC01MDAsNiArNTE2LDIwIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0IHRoZSBzY2FsaW5nIG1vZGUgdG8gYmUgdXNlZCBmb3IgdGhpcyBzdXJmYWNlcyBidWZmZXJzCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICB2b2lkIHNldFNjYWxpbmdNb2RlKEBTY2FsaW5nTW9kZSBpbnQgc2NhbGluZ01vZGUpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgY2hlY2tOb3RSZWxlYXNlZExvY2tlZCgpOworICAgICAgICAgICAgaW50IGVyciA9IG5hdGl2ZVNldFNjYWxpbmdNb2RlKG1OYXRpdmVPYmplY3QsIHNjYWxpbmdNb2RlKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc2NhbGluZyBtb2RlOiAiICsgc2NhbGluZ01vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgQ2FudmFzIGNvdWxkbid0IGJlIGxvY2tlZCB3aXRoIHtAbGluayBTdXJmYWNlI2xvY2tDYW52YXN9LCBvcgogICAgICAqIHdoZW4gYSBTdXJmYWNlVGV4dHVyZSBjb3VsZCBub3Qgc3VjY2Vzc2Z1bGx5IGJlIGFsbG9jYXRlZC4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvU3VyZmFjZVZpZXcuamF2YQppbmRleCA1ODljMGRjLi5mNGZhOTgwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1N1cmZhY2VWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9TdXJmYWNlVmlldy5qYXZhCkBAIC01NzgsOCArNTc4LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZS50cmFuc2ZlckZyb20obU5ld1N1cmZhY2UpOwotCiAgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlICYmIG1TdXJmYWNlLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2V0IFNDQUxJTkdfTU9ERV9OT19TQ0FMRV9DUk9QIHRvIGFsbG93IHRoZSBXaW5kb3dNYW5hZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byB1cGRhdGUgb3VyIFN1cmZhY2UgY3JvcCB3aXRob3V0IHJlcXVpcmluZyBhIG5ldyBidWZmZXIgZnJvbQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXMuIEluIHRoZSBkZWZhdWx0IG1vZGUgb2YgU0NBTElOR19NT0RFX0ZSRUVaRSwgc3VyZmFjZSBnZW9tZXRyeQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgKHdoaWNoIGluY2x1ZGVzIGNyb3ApIGlzIG9ubHkgYXBwbGllZCB3aGVuIGEgYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFwcHJvcHJpYXRlIGdlb21ldHJ5IGlzIGF2YWlsYWJsZS4gRHVyaW5nIGRyYWcgcmVzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBxdWl0ZSBmcmVxdWVudCB0aGF0IGEgbWF0Y2hpbmcgYnVmZmVyIHdpbGwgbm90IGJlIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gKGJlY2F1c2Ugd2UgYXJlIGNvbnN0YW50bHkgYmVpbmcgcmVzaXplZCBhbmQgaGF2ZSBmYWxsZW4gYmVoaW5kKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIgaW4gc3VjaCBzaXR1YXRpb25zIHRoZSBXaW5kb3dNYW5hZ2VyIHN0aWxsIG5lZWRzIHRvIGJlIGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHVwZGF0ZSBvdXIgY3JvcCB0byBlbnN1cmUgd2Ugc3RheSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgY29udGFpbmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93LgorICAgICAgICAgICAgICAgICAgICAgICAgbVN1cmZhY2Uuc2V0U2NhbGluZ01vZGUoU3VyZmFjZS5TQ0FMSU5HX01PREVfTk9fU0NBTEVfQ1JPUCk7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbVN1cmZhY2VDcmVhdGVkICYmIChzdXJmYWNlQ2hhbmdlZCB8fCB2aXNpYmxlQ2hhbmdlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VyZmFjZUNyZWF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Jc0NyZWF0aW5nID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGV4dHVyZVZpZXcuamF2YQppbmRleCA2YjYwYmU5Li4xYmU0ODEwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1RleHR1cmVWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UZXh0dXJlVmlldy5qYXZhCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldEZvcmVncm91bmQoRHJhd2FibGUgZm9yZWdyb3VuZCkgewotICAgICAgICBpZiAoZm9yZWdyb3VuZCAhPSBudWxsKSB7CisgICAgICAgIGlmIChmb3JlZ3JvdW5kICE9IG51bGwgJiYgIXNUZXh0dXJlVmlld0lnbm9yZXNEcmF3YWJsZVNldHRlcnMpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgIlRleHR1cmVWaWV3IGRvZXNuJ3Qgc3VwcG9ydCBkaXNwbGF5aW5nIGEgZm9yZWdyb3VuZCBkcmF3YWJsZSIpOwogICAgICAgICB9CkBAIC0zMDUsNyArMzA1LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldEJhY2tncm91bmREcmF3YWJsZShEcmF3YWJsZSBiYWNrZ3JvdW5kKSB7Ci0gICAgICAgIGlmIChiYWNrZ3JvdW5kICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGJhY2tncm91bmQgIT0gbnVsbCAmJiAhc1RleHR1cmVWaWV3SWdub3Jlc0RyYXdhYmxlU2V0dGVycykgewogICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAiVGV4dHVyZVZpZXcgZG9lc24ndCBzdXBwb3J0IGRpc3BsYXlpbmcgYSBiYWNrZ3JvdW5kIGRyYXdhYmxlIik7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVGhyZWFkZWRSZW5kZXJlci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyLmphdmEKaW5kZXggZjJhNGQ3Yi4uMGU0YmM4NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9UaHJlYWRlZFJlbmRlcmVyLmphdmEKQEAgLTQyMiw5ICs0MjIsMTAgQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIGluaXRpYWxpemF0aW9uIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2UuCiAgICAgICovCiAgICAgYm9vbGVhbiBpbml0aWFsaXplKFN1cmZhY2Ugc3VyZmFjZSkgdGhyb3dzIE91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIHsKKyAgICAgICAgYm9vbGVhbiBzdGF0dXMgPSAhbUluaXRpYWxpemVkOwogICAgICAgICBtSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc3VyZmFjZSk7Ci0gICAgICAgIGJvb2xlYW4gc3RhdHVzID0gbkluaXRpYWxpemUobU5hdGl2ZVByb3h5LCBzdXJmYWNlKTsKKyAgICAgICAgbkluaXRpYWxpemUobU5hdGl2ZVByb3h5LCBzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIHN0YXR1czsKICAgICB9CiAKQEAgLTk1OCw3ICs5NTksNyBAQAogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5Mb2FkU3lzdGVtUHJvcGVydGllcyhsb25nIG5hdGl2ZVByb3h5KTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0TmFtZShsb25nIG5hdGl2ZVByb3h5LCBTdHJpbmcgbmFtZSk7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuSW5pdGlhbGl6ZShsb25nIG5hdGl2ZVByb3h5LCBTdXJmYWNlIHdpbmRvdyk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkluaXRpYWxpemUobG9uZyBuYXRpdmVQcm94eSwgU3VyZmFjZSB3aW5kb3cpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5VcGRhdGVTdXJmYWNlKGxvbmcgbmF0aXZlUHJveHksIFN1cmZhY2Ugd2luZG93KTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuUGF1c2VTdXJmYWNlKGxvbmcgbmF0aXZlUHJveHksIFN1cmZhY2Ugd2luZG93KTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0dXAobG9uZyBuYXRpdmVQcm94eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQppbmRleCAxODNjY2YzLi41NTU5ZDRkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXcuamF2YQpAQCAtNzksMTAgKzc5LDExIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlN1cGVyTm90Q2FsbGVkRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudS5Db250ZXh0TWVudUluZm87Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkFjY2Vzc2liaWxpdHlJdGVyYXRvcnMuVGV4dFNlZ21lbnRJdGVyYXRvcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuQWNjZXNzaWJpbGl0eUl0ZXJhdG9ycy5DaGFyYWN0ZXJUZXh0U2VnbWVudEl0ZXJhdG9yOwotaW1wb3J0IGFuZHJvaWQudmlldy5BY2Nlc3NpYmlsaXR5SXRlcmF0b3JzLldvcmRUZXh0U2VnbWVudEl0ZXJhdG9yOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY2Nlc3NpYmlsaXR5SXRlcmF0b3JzLlBhcmFncmFwaFRleHRTZWdtZW50SXRlcmF0b3I7CitpbXBvcnQgYW5kcm9pZC52aWV3LkFjY2Vzc2liaWxpdHlJdGVyYXRvcnMuVGV4dFNlZ21lbnRJdGVyYXRvcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuQWNjZXNzaWJpbGl0eUl0ZXJhdG9ycy5Xb3JkVGV4dFNlZ21lbnRJdGVyYXRvcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50U291cmNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwpAQCAtODEyLDYgKzgxMywxMiBAQAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gc0xheW91dFBhcmFtc0Fsd2F5c0NoYW5nZWQgPSBmYWxzZTsKIAogICAgIC8qKgorICAgICAqIEFsbG93IHNldEZvcmVncm91bmQvc2V0QmFja2dyb3VuZCB0byBiZSBjYWxsZWQgKGFuZCBpZ25vcmVkKSBvbiBhIHRleHR1cmV2aWV3LAorICAgICAqIHdpdGhvdXQgdGhyb3dpbmcKKyAgICAgKi8KKyAgICBzdGF0aWMgYm9vbGVhbiBzVGV4dHVyZVZpZXdJZ25vcmVzRHJhd2FibGVTZXR0ZXJzID0gZmFsc2U7CisKKyAgICAvKioKICAgICAgKiBUaGlzIHZpZXcgZG9lcyBub3Qgd2FudCBrZXlzdHJva2VzLiBVc2Ugd2l0aCBUQUtFU19GT0NVU19NQVNLIHdoZW4KICAgICAgKiBjYWxsaW5nIHNldEZsYWdzLgogICAgICAqLwpAQCAtMjYyOCw3ICsyNjM1LDcgQEAKICAgICBzdGF0aWMgZmluYWwgaW50IFBGTEFHM19QT0lOVEVSX0lDT05fTFNISUZUID0gMTU7CiAKICAgICAvKioKLSAgICAgKiBWYWx1ZSBpbmRpY2F0aW5nIHtAbGluayBQb2ludGVySWNvbi5TVFlMRV9OT1RfU1BFQ0lGSUVEfS4KKyAgICAgKiBWYWx1ZSBpbmRpY2F0aW5nIG5vIHNwZWNpZmljIHBvaW50ZXIgaWNvbnMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBGTEFHM19QT0lOVEVSX0lDT05fTk9UX1NQRUNJRklFRCA9IDAgPDwgUEZMQUczX1BPSU5URVJfSUNPTl9MU0hJRlQ7CiAKQEAgLTI2MzgsMTQgKzI2NDUsOSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQRkxBRzNfUE9JTlRFUl9JQ09OX05VTEwgPSAxIDw8IFBGTEFHM19QT0lOVEVSX0lDT05fTFNISUZUOwogCiAgICAgLyoqCi0gICAgICogVmFsdWUgaW5jaWNhdGluZyB7QGxpbmsgUG9pbnRlckljb24uU1RZTEVfQ1VTVE9NfS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUEZMQUczX1BPSU5URVJfSUNPTl9DVVNUT00gPSAyIDw8IFBGTEFHM19QT0lOVEVSX0lDT05fTFNISUZUOwotCi0gICAgLyoqCiAgICAgICogVGhlIGJhc2UgdmFsdWUgZm9yIG90aGVyIHBvaW50ZXIgaWNvbiBzaGFwZXMuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBGTEFHM19QT0lOVEVSX0lDT05fVkFMVUVfU1RBUlQgPSAzIDw8IFBGTEFHM19QT0lOVEVSX0lDT05fTFNISUZUOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQRkxBRzNfUE9JTlRFUl9JQ09OX1ZBTFVFX1NUQVJUID0gMiA8PCBQRkxBRzNfUE9JTlRFUl9JQ09OX0xTSElGVDsKIAogICAgIC8qKgogICAgICAqIEFsd2F5cyBhbGxvdyBhIHVzZXIgdG8gb3Zlci1zY3JvbGwgdGhpcyB2aWV3LCBwcm92aWRlZCBpdCBpcyBhCkBAIC0zNTkxLDYgKzM1OTMsOSBAQAogCiAgICAgcHJpdmF0ZSBpbnRbXSBtRHJhd2FibGVTdGF0ZSA9IG51bGw7CiAKKyAgICAvKiogV2hldGhlciBkcmF3KCkgaXMgY3VycmVudGx5IGJlaW5nIGNhbGxlZC4gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbUluRHJhdyA9IGZhbHNlOworCiAgICAgVmlld091dGxpbmVQcm92aWRlciBtT3V0bGluZVByb3ZpZGVyID0gVmlld091dGxpbmVQcm92aWRlci5CQUNLR1JPVU5EOwogCiAgICAgLyoqCkBAIC0zOTI3LDYgKzM5MzIsMTEgQEAKICAgICBwcml2YXRlIEhhbmRsZXJBY3Rpb25RdWV1ZSBtUnVuUXVldWU7CiAKICAgICAvKioKKyAgICAgKiBUaGUgcG9pbnRlciBpY29uIHdoZW4gdGhlIG1vdXNlIGhvdmVycyBvbiB0aGlzIHZpZXcuIFRoZSBkZWZhdWx0IGlzIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBQb2ludGVySWNvbiBtUG9pbnRlckljb247CisKKyAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIFN0cmluZyBtU3RhcnRBY3Rpdml0eVJlcXVlc3RXaG87CkBAIC0zOTg0LDYgKzM5OTQsMTAgQEAKICAgICAgICAgICAgIC8vIHdvcmsuIFBhcnRpYWwgbGF5b3V0IGJyZWFrcyB0aGlzIGFzc3VtcHRpb24uCiAgICAgICAgICAgICBzTGF5b3V0UGFyYW1zQWx3YXlzQ2hhbmdlZCA9IHRhcmdldFNka1ZlcnNpb24gPD0gTTsKIAorICAgICAgICAgICAgLy8gUHJpb3IgdG8gTiwgVGV4dHVyZVZpZXcgd291bGQgc2lsZW50bHkgaWdub3JlIGNhbGxzIHRvIHNldEJhY2tncm91bmQvc2V0Rm9yZWdyb3VuZC4KKyAgICAgICAgICAgIC8vIE9uIE4rLCB3ZSB0aHJvdywgYnV0IHRoYXQgYnJlYWtzIGNvbXBhdGliaWxpdHkgd2l0aCBhcHBzIHRoYXQgdXNlIHRoZXNlIG1ldGhvZHMuCisgICAgICAgICAgICBzVGV4dHVyZVZpZXdJZ25vcmVzRHJhd2FibGVTZXR0ZXJzID0gdGFyZ2V0U2RrVmVyc2lvbiA8PSBNOworCiAgICAgICAgICAgICBzQ29tcGF0aWJpbGl0eURvbmUgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDQ4Nyw2ICs0NTAxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplU2Nyb2xsSW5kaWNhdG9ycyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBSLnN0eWxlYWJsZS5WaWV3X3BvaW50ZXJTaGFwZToKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHBvaW50ZXJTaGFwZSA9IGEuZ2V0SW50KGF0dHIsIFBvaW50ZXJJY29uLlNUWUxFX05PVF9TUEVDSUZJRUQpOworICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlclNoYXBlICE9IFBvaW50ZXJJY29uLlNUWUxFX05PVF9TUEVDSUZJRUQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFBvaW50ZXJJY29uKFBvaW50ZXJJY29uLmdldFN5c3RlbUljb24oY29udGV4dCwgcG9pbnRlclNoYXBlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTAxNTYsOCArMTAxNzYsOCBAQAogICAgIC8qKgogICAgICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIEtleUV2ZW50LkNhbGxiYWNrI29uS2V5VXAoaW50LCBLZXlFdmVudCkKICAgICAgKiBLZXlFdmVudC5DYWxsYmFjay5vbktleVVwKCl9OiBwZXJmb3JtIGNsaWNraW5nIG9mIHRoZSB2aWV3Ci0gICAgICogd2hlbiB7QGxpbmsgS2V5RXZlbnQjS0VZQ09ERV9EUEFEX0NFTlRFUn0gb3IKLSAgICAgKiB7QGxpbmsgS2V5RXZlbnQjS0VZQ09ERV9FTlRFUn0gaXMgcmVsZWFzZWQuCisgICAgICogd2hlbiB7QGxpbmsgS2V5RXZlbnQjS0VZQ09ERV9EUEFEX0NFTlRFUn0sIHtAbGluayBLZXlFdmVudCNLRVlDT0RFX0VOVEVSfQorICAgICAqIG9yIHtAbGluayBLZXlFdmVudCNLRVlDT0RFX1NQQUNFfSBpcyByZWxlYXNlZC4KICAgICAgKiA8cD5LZXkgcHJlc3NlcyBpbiBzb2Z0d2FyZSBrZXlib2FyZHMgd2lsbCBnZW5lcmFsbHkgTk9UIHRyaWdnZXIgdGhpcyBsaXN0ZW5lciwKICAgICAgKiBhbHRob3VnaCBzb21lIG1heSBlbGVjdCB0byBkbyBzbyBpbiBzb21lIHNpdHVhdGlvbnMuIERvIG5vdCByZWx5IG9uIHRoaXMgdG8KICAgICAgKiBjYXRjaCBzb2Z0d2FyZSBrZXkgcHJlc3Nlcy4KQEAgLTEyNDc2LDggKzEyNDk2LDcgQEAKICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIHBvaW50LCBpbiBsb2NhbCBjb29yZGluYXRlcyBpcyBpbnNpZGUgdGhlIHZpZXcuCiAgICAgICovCiAgICAgLypwYWNrYWdlKi8gZmluYWwgYm9vbGVhbiBwb2ludEluVmlldyhmbG9hdCBsb2NhbFgsIGZsb2F0IGxvY2FsWSkgewotICAgICAgICByZXR1cm4gbG9jYWxYID49IDAgJiYgbG9jYWxYIDwgKG1SaWdodCAtIG1MZWZ0KQotICAgICAgICAgICAgICAgICYmIGxvY2FsWSA+PSAwICYmIGxvY2FsWSA8IChtQm90dG9tIC0gbVRvcCk7CisgICAgICAgIHJldHVybiBwb2ludEluVmlldyhsb2NhbFgsIGxvY2FsWSwgMCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNDcxMCw2ICsxNDcyOSw3IEBACiAgICAgICAgIGRlc3Ryb3lEcmF3aW5nQ2FjaGUoKTsKIAogICAgICAgICBjbGVhbnVwRHJhdygpOworICAgICAgICByZWxlYXNlUG9pbnRlckNhcHR1cmUoKTsKICAgICAgICAgbUN1cnJlbnRBbmltYXRpb24gPSBudWxsOwogICAgIH0KIApAQCAtMTY0NTQsNiArMTY0NzQsOCBAQAogICAgICAqLwogICAgIEBDYWxsU3VwZXIKICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgbUluRHJhdyA9IHRydWU7CisKICAgICAgICAgZmluYWwgaW50IHByaXZhdGVGbGFncyA9IG1Qcml2YXRlRmxhZ3M7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gZGlydHlPcGFxdWUgPSAocHJpdmF0ZUZsYWdzICYgUEZMQUdfRElSVFlfTUFTSykgPT0gUEZMQUdfRElSVFlfT1BBUVVFICYmCiAgICAgICAgICAgICAgICAgKG1BdHRhY2hJbmZvID09IG51bGwgfHwgIW1BdHRhY2hJbmZvLm1JZ25vcmVEaXJ0eVN0YXRlKTsKQEAgLTE2NDk4LDYgKzE2NTIwLDcgQEAKICAgICAgICAgICAgIG9uRHJhd0ZvcmVncm91bmQoY2FudmFzKTsKIAogICAgICAgICAgICAgLy8gd2UncmUgZG9uZS4uLgorICAgICAgICAgICAgbUluRHJhdyA9IGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTE2NjQ1LDYgKzE2NjY4LDggQEAKIAogICAgICAgICAvLyBTdGVwIDYsIGRyYXcgZGVjb3JhdGlvbnMgKGZvcmVncm91bmQsIHNjcm9sbGJhcnMpCiAgICAgICAgIG9uRHJhd0ZvcmVncm91bmQoY2FudmFzKTsKKworICAgICAgICBtSW5EcmF3ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xNzA4OSw3ICsxNzExNCw4IEBACiAgICAgICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZURyYXdhYmxlKEBOb25OdWxsIERyYXdhYmxlIGRyYXdhYmxlKSB7Ci0gICAgICAgIGlmICh2ZXJpZnlEcmF3YWJsZShkcmF3YWJsZSkpIHsKKyAgICAgICAgLy8gRG9uJ3QgaW52YWxpZGF0ZSBpZiBhIGRyYXdhYmxlIGNoYW5nZXMgZHVyaW5nIGRyYXdpbmcuCisgICAgICAgIGlmICh2ZXJpZnlEcmF3YWJsZShkcmF3YWJsZSkgJiYgIW1JbkRyYXcpIHsKICAgICAgICAgICAgIGZpbmFsIFJlY3QgZGlydHkgPSBkcmF3YWJsZS5nZXREaXJ0eUJvdW5kcygpOwogICAgICAgICAgICAgZmluYWwgaW50IHNjcm9sbFggPSBtU2Nyb2xsWDsKICAgICAgICAgICAgIGZpbmFsIGludCBzY3JvbGxZID0gbVNjcm9sbFk7CkBAIC0yMTE4NSw0MiArMjEyMTEsNzUgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyBpbnQgZ2V0UG9pbnRlclNoYXBlKE1vdGlvbkV2ZW50IGV2ZW50LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIGZpbmFsIGludCB2YWx1ZSA9IChtUHJpdmF0ZUZsYWdzMyAmIFBGTEFHM19QT0lOVEVSX0lDT05fTUFTSyk7Ci0gICAgICAgIHN3aXRjaCAodmFsdWUpIHsKLSAgICAgICAgICAgIGNhc2UgUEZMQUczX1BPSU5URVJfSUNPTl9OT1RfU1BFQ0lGSUVEOgotICAgICAgICAgICAgICAgIHJldHVybiBQb2ludGVySWNvbi5TVFlMRV9OT1RfU1BFQ0lGSUVEOwotICAgICAgICAgICAgY2FzZSBQRkxBRzNfUE9JTlRFUl9JQ09OX05VTEw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFBvaW50ZXJJY29uLlNUWUxFX05VTEw7Ci0gICAgICAgICAgICBjYXNlIFBGTEFHM19QT0lOVEVSX0lDT05fQ1VTVE9NOgotICAgICAgICAgICAgICAgIHJldHVybiBQb2ludGVySWNvbi5TVFlMRV9DVVNUT007Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAoKHZhbHVlIC0gUEZMQUczX1BPSU5URVJfSUNPTl9WQUxVRV9TVEFSVCkgPj4gUEZMQUczX1BPSU5URVJfSUNPTl9MU0hJRlQpCi0gICAgICAgICAgICAgICAgICAgICAgICArIFBvaW50ZXJJY29uLlNUWUxFX0FSUk9XOworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHBvaW50ZXIgaWNvbiBmb3IgdGhlIG1vdGlvbiBldmVudCwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IHNwZWNpZnkgdGhlIGljb24uCisgICAgICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY2FyZSB0aGUgbG9jYXRpb24gb3IgZXZlbnQgdHlwZXMsIGJ1dCBzb21lIHN1YmNsYXNzZXMKKyAgICAgKiBtYXkgdXNlIGl0IChzdWNoIGFzIFdlYlZpZXdzKS4KKyAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIE1vdGlvbkV2ZW50IGZyb20gYSBtb3VzZQorICAgICAqIEBwYXJhbSB4IFRoZSB4IHBvc2l0aW9uIG9mIHRoZSBldmVudCwgbG9jYWwgdG8gdGhlIHZpZXcKKyAgICAgKiBAcGFyYW0geSBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgZXZlbnQsIGxvY2FsIHRvIHRoZSB2aWV3CisgICAgICogQHNlZSBQb2ludGVySWNvbgorICAgICAqLworICAgIHB1YmxpYyBQb2ludGVySWNvbiBnZXRQb2ludGVySWNvbihNb3Rpb25FdmVudCBldmVudCwgZmxvYXQgeCwgZmxvYXQgeSkgeworICAgICAgICByZXR1cm4gbVBvaW50ZXJJY29uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgcG9pbnRlciBpY29uIGZvciB0aGUgY3VycmVudCB2aWV3LgorICAgICAqIEBwYXJhbSBwb2ludGVySWNvbiBBIFBvaW50ZXJJY29uIGluc3RhbmNlIHdoaWNoIHdpbGwgYmUgc2hvd24gd2hlbiB0aGUgbW91c2UgaG92ZXJzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFBvaW50ZXJJY29uKFBvaW50ZXJJY29uIHBvaW50ZXJJY29uKSB7CisgICAgICAgIG1Qb2ludGVySWNvbiA9IHBvaW50ZXJJY29uOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcXVlc3QgY2FwdHVyaW5nIGZ1cnRoZXIgbW91c2UgZXZlbnRzLgorICAgICAqCisgICAgICogV2hlbiB0aGUgdmlldyBjYXB0dXJlcywgdGhlIG1vdXNlIHBvaW50ZXIgaWNvbiB3aWxsIGRpc2FwcGVhciBhbmQgd2lsbCBub3QgY2hhbmdlIGl0cworICAgICAqIHBvc2l0aW9uLiBGdXJ0aGVyIG1vdXNlIGV2ZW50cyB3aWxsIGNvbWUgdG8gdGhlIGNhcHR1cmluZyB2aWV3LCBhbmQgdGhlIG1vdXNlIG1vdmVtZW50cworICAgICAqIHdpbGwgY2FuIGJlIGRldGVjdGVkIHRocm91Z2gge0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfUkVMQVRJVkVfWH0gYW5kCisgICAgICoge0BsaW5rIE1vdGlvbkV2ZW50I0FYSVNfUkVMQVRJVkVfWX0uIE5vbi1tb3VzZSBldmVudHMgKHRvdWNoc2NyZWVucywgb3Igc3R5bHVzKSB3aWxsIG5vdAorICAgICAqIGJlIGFmZmVjdGVkLgorICAgICAqCisgICAgICogVGhlIGNhcHR1cmUgd2lsbCBiZSByZWxlYXNlZCB0aHJvdWdoIHtAbGluayAjcmVsZWFzZVBvaW50ZXJDYXB0dXJlKCl9LCBvciB3aWxsIGJlIGxvc3QKKyAgICAgKiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHZpZXcgb3IgY29udGFpbmluZyB3aW5kb3cgZGlzYXBwZWFyLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIHdoZW4gc3VjY2VlZHMuCisgICAgICogQHNlZSAjcmVsZWFzZVBvaW50ZXJDYXB0dXJlKCkKKyAgICAgKiBAc2VlICNoYXNQb2ludGVyQ2FwdHVyZSgpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0UG9pbnRlckNhcHR1cmUoKSB7CisgICAgICAgIGZpbmFsIFZpZXdSb290SW1wbCB2aWV3Um9vdEltcGwgPSBnZXRWaWV3Um9vdEltcGwoKTsKKyAgICAgICAgaWYgKHZpZXdSb290SW1wbCAhPSBudWxsKSB7CisgICAgICAgICAgICB2aWV3Um9vdEltcGwuc2V0UG9pbnRlckNhcHR1cmUodGhpcyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiogQGhpZGUgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRQb2ludGVyU2hhcGUoaW50IHBvaW50ZXJTaGFwZSkgewotICAgICAgICBpbnQgbmV3VmFsdWU7Ci0gICAgICAgIGlmIChwb2ludGVyU2hhcGUgPT0gUG9pbnRlckljb24uU1RZTEVfTk9UX1NQRUNJRklFRCkgewotICAgICAgICAgICAgbmV3VmFsdWUgPSBQRkxBRzNfUE9JTlRFUl9JQ09OX05PVF9TUEVDSUZJRUQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocG9pbnRlclNoYXBlID09IFBvaW50ZXJJY29uLlNUWUxFX05VTEwpIHsKLSAgICAgICAgICAgIG5ld1ZhbHVlID0gUEZMQUczX1BPSU5URVJfSUNPTl9OVUxMOwotICAgICAgICB9IGVsc2UgaWYgKHBvaW50ZXJTaGFwZSA9PSBQb2ludGVySWNvbi5TVFlMRV9DVVNUT00pIHsKLSAgICAgICAgICAgIG5ld1ZhbHVlID0gUEZMQUczX1BPSU5URVJfSUNPTl9DVVNUT007Ci0gICAgICAgIH0gZWxzZSBpZiAocG9pbnRlclNoYXBlID49IFBvaW50ZXJJY29uLlNUWUxFX0FSUk9XCi0gICAgICAgICAgICAgICAgJiYgcG9pbnRlclNoYXBlIDw9IFBvaW50ZXJJY29uLlNUWUxFX0dSQUJCSU5HKSB7Ci0gICAgICAgICAgICBuZXdWYWx1ZSA9ICgocG9pbnRlclNoYXBlIC0gUG9pbnRlckljb24uU1RZTEVfQVJST1cpIDw8IFBGTEFHM19QT0lOVEVSX0lDT05fTFNISUZUKQotICAgICAgICAgICAgICAgICAgICArIFBGTEFHM19QT0lOVEVSX0lDT05fVkFMVUVfU1RBUlQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cudyhWSUVXX0xPR19UQUcsICJJbnZhbGlkIHBvaW50ZXIgc2hhcGUgIiArIHBvaW50ZXJTaGFwZSArICIgaXMgc3BlY2lmaWVkLiIpOwotICAgICAgICAgICAgcmV0dXJuOworCisgICAgLyoqCisgICAgICogUmVsZWFzZSB0aGUgY3VycmVudCBjYXB0dXJlIG9mIG1vdXNlIGV2ZW50cy4KKyAgICAgKgorICAgICAqIElmIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgdGhlIGNhcHR1cmUsIGl0IHdpbGwgZG8gbm90aGluZy4KKyAgICAgKiBAc2VlICNzZXRQb2ludGVyQ2FwdHVyZSgpCisgICAgICogQHNlZSAjaGFzUG9pbnRlckNhcHR1cmUoKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSgpIHsKKyAgICAgICAgZmluYWwgVmlld1Jvb3RJbXBsIHZpZXdSb290SW1wbCA9IGdldFZpZXdSb290SW1wbCgpOworICAgICAgICBpZiAodmlld1Jvb3RJbXBsICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZpZXdSb290SW1wbC5yZWxlYXNlUG9pbnRlckNhcHR1cmUodGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5ld1ZhbHVlICE9IChtUHJpdmF0ZUZsYWdzMyAmIFBGTEFHM19QT0lOVEVSX0lDT05fTUFTSykpIHsKLSAgICAgICAgICAgIG1Qcml2YXRlRmxhZ3MzID0gKG1Qcml2YXRlRmxhZ3MzICYgflBGTEFHM19QT0lOVEVSX0lDT05fTUFTSykgfCBuZXdWYWx1ZTsKLSAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB0aGUgY2FwdHVyZSBzdGF0dXMgb2YgbW91c2UgZXZlbnRzLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2aWV3IGhhcyB0aGUgY2FwdHVyZS4KKyAgICAgKiBAc2VlICNzZXRQb2ludGVyQ2FwdHVyZSgpCisgICAgICogQHNlZSAjaGFzUG9pbnRlckNhcHR1cmUoKQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGhhc1BvaW50ZXJDYXB0dXJlKCkgeworICAgICAgICBmaW5hbCBWaWV3Um9vdEltcGwgdmlld1Jvb3RJbXBsID0gZ2V0Vmlld1Jvb3RJbXBsKCk7CisgICAgICAgIHJldHVybiAodmlld1Jvb3RJbXBsICE9IG51bGwpICYmIHZpZXdSb290SW1wbC5oYXNQb2ludGVyQ2FwdHVyZSh0aGlzKTsKICAgICB9CiAKICAgICAvLwpAQCAtMjE2NTcsNiArMjE3MTYsMTMgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhMaXN0PEtleWJvYXJkU2hvcnRjdXRHcm91cD4gZGF0YSkgeworICAgICAgICAvLyBEbyBub3RoaW5nLgorICAgIH0KKworICAgIC8qKgogICAgICAqIEludGVyZmFjZSBkZWZpbml0aW9uIGZvciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhIGhhcmR3YXJlIGtleSBldmVudCBpcwogICAgICAqIGRpc3BhdGNoZWQgdG8gdGhpcyB2aWV3LiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIGJlZm9yZSB0aGUga2V5IGV2ZW50IGlzCiAgICAgICogZ2l2ZW4gdG8gdGhlIHZpZXcuIFRoaXMgaXMgb25seSB1c2VmdWwgZm9yIGhhcmR3YXJlIGtleWJvYXJkczsgYSBzb2Z0d2FyZSBpbnB1dApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld0dyb3VwLmphdmEKaW5kZXggMGY3ZDI5Ni4uZjY3NDI5OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3R3JvdXAuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdHcm91cC5qYXZhCkBAIC0xNDE5LDggKzE0MTksOSBAQAogCiAgICAgICAgIGNhc2UgRHJhZ0V2ZW50LkFDVElPTl9EUkFHX0VOREVEOiB7CiAgICAgICAgICAgICAvLyBSZWxlYXNlIHRoZSBib29ra2VlcGluZyBub3cgdGhhdCB0aGUgZHJhZyBsaWZlY3ljbGUgaGFzIGVuZGVkCi0gICAgICAgICAgICBpZiAobUNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChWaWV3IGNoaWxkIDogbUNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZykgeworICAgICAgICAgICAgZmluYWwgSGFzaFNldDxWaWV3PiBjaGlsZHJlbkludGVyZXN0ZWRJbkRyYWcgPSBtQ2hpbGRyZW5JbnRlcmVzdGVkSW5EcmFnOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgZm9yIChWaWV3IGNoaWxkIDogY2hpbGRyZW5JbnRlcmVzdGVkSW5EcmFnKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIGEgY2hpbGQgd2FzIGludGVyZXN0ZWQgaW4gdGhlIG9uZ29pbmcgZHJhZywgaXQncyB0b2xkIHRoYXQgaXQncyBvdmVyCiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5kaXNwYXRjaERyYWdFdmVudChldmVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHRydWU7CkBAIC0xNDI4LDEyICsxNDI5LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLm1Qcml2YXRlRmxhZ3MyICY9IH5WaWV3LkRSQUdfTUFTSzsKICAgICAgICAgICAgICAgICAgICAgY2hpbGQucmVmcmVzaERyYXdhYmxlU3RhdGUoKTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBtQ2hpbGRyZW5JbnRlcmVzdGVkSW5EcmFnLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50RHJhZ1N0YXJ0RXZlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudERyYWdTdGFydEV2ZW50LnJlY3ljbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnREcmFnU3RhcnRFdmVudCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoaWxkcmVuSW50ZXJlc3RlZEluRHJhZy5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1DdXJyZW50RHJhZ1N0YXJ0RXZlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50RHJhZ1N0YXJ0RXZlbnQucmVjeWNsZSgpOworICAgICAgICAgICAgICAgIG1DdXJyZW50RHJhZ1N0YXJ0RXZlbnQgPSBudWxsOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobUlzSW50ZXJlc3RlZEluRHJhZykgewpAQCAtMTcxNSw5ICsxNzE1LDggQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UG9pbnRlclNoYXBlKE1vdGlvbkV2ZW50IGV2ZW50LCBmbG9hdCB4LCBmbG9hdCB5KSB7CisgICAgcHVibGljIFBvaW50ZXJJY29uIGdldFBvaW50ZXJJY29uKE1vdGlvbkV2ZW50IGV2ZW50LCBmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAgICAgIC8vIENoZWNrIHdoYXQgdGhlIGNoaWxkIHVuZGVyIHRoZSBwb2ludGVyIHNheXMgYWJvdXQgdGhlIHBvaW50ZXIuCiAgICAgICAgIGZpbmFsIGludCBjaGlsZHJlbkNvdW50ID0gbUNoaWxkcmVuQ291bnQ7CiAgICAgICAgIGlmIChjaGlsZHJlbkNvdW50ICE9IDApIHsKQEAgLTE3MzEsOSArMTczMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA/IGNoaWxkcmVuW2NoaWxkSW5kZXhdIDogcHJlb3JkZXJlZExpc3QuZ2V0KGNoaWxkSW5kZXgpOwogICAgICAgICAgICAgICAgIFBvaW50RiBwb2ludCA9IGdldExvY2FsUG9pbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1lZFRvdWNoUG9pbnRJblZpZXcoeCwgeSwgY2hpbGQsIHBvaW50KSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcG9pbnRlclNoYXBlID0gY2hpbGQuZ2V0UG9pbnRlclNoYXBlKGV2ZW50LCBwb2ludC54LCBwb2ludC55KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJTaGFwZSAhPSBQb2ludGVySWNvbi5TVFlMRV9OT1RfU1BFQ0lGSUVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnRlclNoYXBlOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBQb2ludGVySWNvbiBwb2ludGVySWNvbiA9IGNoaWxkLmdldFBvaW50ZXJJY29uKGV2ZW50LCBwb2ludC54LCBwb2ludC55KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJJY29uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb2ludGVySWNvbjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzQyLDcgKzE3NDEsNyBAQAogCiAgICAgICAgIC8vIFRoZSBwb2ludGVyIGlzIG5vdCBhIGNoaWxkIG9yIHRoZSBjaGlsZCBoYXMgbm8gcHJlZmVyZW5jZXMsIHJldHVybmluZyB0aGUgZGVmYXVsdAogICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldFBvaW50ZXJTaGFwZShldmVudCwgeCwgeSk7CisgICAgICAgIHJldHVybiBzdXBlci5nZXRQb2ludGVySWNvbihldmVudCwgeCwgeSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MzYwLDYgKzUzNTksOSBAQAogICAgIHZvaWQgb2Zmc2V0UmVjdEJldHdlZW5QYXJlbnRBbmRDaGlsZChWaWV3IGRlc2NlbmRhbnQsIFJlY3QgcmVjdCwKICAgICAgICAgICAgIGJvb2xlYW4gb2Zmc2V0RnJvbUNoaWxkVG9QYXJlbnQsIGJvb2xlYW4gY2xpcFRvQm91bmRzKSB7CiAKKyAgICAgICAgZmluYWwgUmVjdEYgcmVjdEYgPSBtQXR0YWNoSW5mbyAhPSBudWxsID8gbUF0dGFjaEluZm8ubVRtcFRyYW5zZm9ybVJlY3QxIDogbmV3IFJlY3RGKCk7CisgICAgICAgIGZpbmFsIE1hdHJpeCBpbnZlcnNlID0gbUF0dGFjaEluZm8gIT0gbnVsbCA/IG1BdHRhY2hJbmZvLm1UbXBNYXRyaXggOiBuZXcgTWF0cml4KCk7CisKICAgICAgICAgLy8gYWxyZWFkeSBpbiB0aGUgc2FtZSBjb29yZCBzeXN0ZW0gOikKICAgICAgICAgaWYgKGRlc2NlbmRhbnQgPT0gdGhpcykgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTM3Myw4ICs1Mzc1LDE2IEBACiAgICAgICAgICAgICAgICAgJiYgKHRoZVBhcmVudCAhPSB0aGlzKSkgewogCiAgICAgICAgICAgICBpZiAob2Zmc2V0RnJvbUNoaWxkVG9QYXJlbnQpIHsKLSAgICAgICAgICAgICAgICByZWN0Lm9mZnNldChkZXNjZW5kYW50Lm1MZWZ0IC0gZGVzY2VuZGFudC5tU2Nyb2xsWCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQubVRvcCAtIGRlc2NlbmRhbnQubVNjcm9sbFkpOworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KC1kZXNjZW5kYW50Lm1TY3JvbGxYLCAtZGVzY2VuZGFudC5tU2Nyb2xsWSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRlc2NlbmRhbnQuaGFzSWRlbnRpdHlNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgICAgICByZWN0Ri5zZXQocmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQuZ2V0TWF0cml4KCkubWFwUmVjdChyZWN0Rik7CisgICAgICAgICAgICAgICAgICAgIHJlY3RGLnJvdW5kT3V0KHJlY3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KGRlc2NlbmRhbnQubUxlZnQsIGRlc2NlbmRhbnQubVRvcCk7CisKICAgICAgICAgICAgICAgICBpZiAoY2xpcFRvQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgIFZpZXcgcCA9IChWaWV3KSB0aGVQYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaW50ZXJzZWN0ZWQgPSByZWN0LmludGVyc2VjdCgwLCAwLCBwLm1SaWdodCAtIHAubUxlZnQsCkBAIC01MzkyLDggKzU0MDIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0RW1wdHkoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZWN0Lm9mZnNldChkZXNjZW5kYW50Lm1TY3JvbGxYIC0gZGVzY2VuZGFudC5tTGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQubVNjcm9sbFkgLSBkZXNjZW5kYW50Lm1Ub3ApOworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KC1kZXNjZW5kYW50Lm1MZWZ0LCAtZGVzY2VuZGFudC5tVG9wKTsKKworICAgICAgICAgICAgICAgIGlmICghZGVzY2VuZGFudC5oYXNJZGVudGl0eU1hdHJpeCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQuZ2V0TWF0cml4KCkuaW52ZXJ0KGludmVyc2UpOworICAgICAgICAgICAgICAgICAgICByZWN0Ri5zZXQocmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGludmVyc2UubWFwUmVjdChyZWN0Rik7CisgICAgICAgICAgICAgICAgICAgIHJlY3RGLnJvdW5kT3V0KHJlY3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KGRlc2NlbmRhbnQubVNjcm9sbFgsIGRlc2NlbmRhbnQubVNjcm9sbFkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBkZXNjZW5kYW50ID0gKFZpZXcpIHRoZVBhcmVudDsKQEAgLTU0MDQsMTEgKzU0MjIsMjYgQEAKICAgICAgICAgLy8gdG8gZ2V0IGludG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UKICAgICAgICAgaWYgKHRoZVBhcmVudCA9PSB0aGlzKSB7CiAgICAgICAgICAgICBpZiAob2Zmc2V0RnJvbUNoaWxkVG9QYXJlbnQpIHsKLSAgICAgICAgICAgICAgICByZWN0Lm9mZnNldChkZXNjZW5kYW50Lm1MZWZ0IC0gZGVzY2VuZGFudC5tU2Nyb2xsWCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQubVRvcCAtIGRlc2NlbmRhbnQubVNjcm9sbFkpOworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KC1kZXNjZW5kYW50Lm1TY3JvbGxYLCAtZGVzY2VuZGFudC5tU2Nyb2xsWSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWRlc2NlbmRhbnQuaGFzSWRlbnRpdHlNYXRyaXgoKSkgeworICAgICAgICAgICAgICAgICAgICByZWN0Ri5zZXQocmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGRlc2NlbmRhbnQuZ2V0TWF0cml4KCkubWFwUmVjdChyZWN0Rik7CisgICAgICAgICAgICAgICAgICAgIHJlY3RGLnJvdW5kT3V0KHJlY3QpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KGRlc2NlbmRhbnQubUxlZnQsIGRlc2NlbmRhbnQubVRvcCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlY3Qub2Zmc2V0KGRlc2NlbmRhbnQubVNjcm9sbFggLSBkZXNjZW5kYW50Lm1MZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGFudC5tU2Nyb2xsWSAtIGRlc2NlbmRhbnQubVRvcCk7CisgICAgICAgICAgICAgICAgcmVjdC5vZmZzZXQoLWRlc2NlbmRhbnQubUxlZnQsIC1kZXNjZW5kYW50Lm1Ub3ApOworCisgICAgICAgICAgICAgICAgaWYgKCFkZXNjZW5kYW50Lmhhc0lkZW50aXR5TWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGFudC5nZXRNYXRyaXgoKS5pbnZlcnQoaW52ZXJzZSk7CisgICAgICAgICAgICAgICAgICAgIHJlY3RGLnNldChyZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgaW52ZXJzZS5tYXBSZWN0KHJlY3RGKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjdEYucm91bmRPdXQocmVjdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVjdC5vZmZzZXQoZGVzY2VuZGFudC5tU2Nyb2xsWCwgZGVzY2VuZGFudC5tU2Nyb2xsWSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJhbWV0ZXIgbXVzdCBiZSBhIGRlc2NlbmRhbnQgb2YgdGhpcyB2aWV3Iik7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9WaWV3Um9vdEltcGwuamF2YQppbmRleCAxMmNmNjZlLi5hMTRmMGRjIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1ZpZXdSb290SW1wbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvVmlld1Jvb3RJbXBsLmphdmEKQEAgLTM5LDYgKzM5LDcgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5EaXNwbGF5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuRGlzcGxheU1hbmFnZXIuRGlzcGxheUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuaW5wdXQuSW5wdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CkBAIC03OCw2ICs3OSw3IEBACiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2Nyb2xsZXI7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLklSZXN1bHRSZWNlaXZlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5Tb21lQXJnczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuUGhvbmVGYWxsYmFja0V2ZW50SGFuZGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LkJhc2VTdXJmYWNlSG9sZGVyOwpAQCAtMTc0LDYgKzE3Niw5IEBACiAgICAgVmlldyBtQWNjZXNzaWJpbGl0eUZvY3VzZWRIb3N0OwogICAgIEFjY2Vzc2liaWxpdHlOb2RlSW5mbyBtQWNjZXNzaWJpbGl0eUZvY3VzZWRWaXJ0dWFsVmlldzsKIAorICAgIC8vIFRoZSB2aWV3IHdoaWNoIGNhcHR1cmVzIG1vdXNlIGlucHV0LCBvciBudWxsIHdoZW4gbm8gb25lIGlzIGNhcHR1cmluZy4KKyAgICBWaWV3IG1DYXB0dXJpbmdWaWV3OworCiAgICAgaW50IG1WaWV3VmlzaWJpbGl0eTsKICAgICBib29sZWFuIG1BcHBWaXNpYmxlID0gdHJ1ZTsKICAgICAvLyBGb3IgcmVjZW50cyB0byBmcmVlZm9ybSB0cmFuc2l0aW9uIHdlIG5lZWQgdG8ga2VlcCBkcmF3aW5nIGFmdGVyIHRoZSBhcHAgcmVjZWl2ZXMgaW5mb3JtYXRpb24KQEAgLTE5Nyw2ICsyMDIsMTAgQEAKICAgICAvLyBzbyB0aGUgd2luZG93IHNob3VsZCBubyBsb25nZXIgYmUgYWN0aXZlLgogICAgIGJvb2xlYW4gbVN0b3BwZWQgPSBmYWxzZTsKIAorICAgIC8vIFNldCB0byB0cnVlIGlmIHRoZSBvd25lciBvZiB0aGlzIHdpbmRvdyBpcyBpbiBhbWJpZW50IG1vZGUsCisgICAgLy8gd2hpY2ggbWVhbnMgaXQgd29uJ3QgcmVjZWl2ZSBpbnB1dCBldmVudHMuCisgICAgYm9vbGVhbiBtSXNBbWJpZW50TW9kZSA9IGZhbHNlOworCiAgICAgLy8gU2V0IHRvIHRydWUgdG8gc3RvcCBpbnB1dCBkdXJpbmcgYW4gQWN0aXZpdHkgVHJhbnNpdGlvbi4KICAgICBib29sZWFuIG1QYXVzZWRGb3JUcmFuc2l0aW9uID0gZmFsc2U7CiAKQEAgLTMzMiw2ICszNDEsNyBAQAogICAgIHByaXZhdGUgaW50IG1GcHNOdW1GcmFtZXM7CiAKICAgICBwcml2YXRlIGludCBtUG9pbnRlckljb25TaGFwZSA9IFBvaW50ZXJJY29uLlNUWUxFX05PVF9TUEVDSUZJRUQ7CisgICAgcHJpdmF0ZSBQb2ludGVySWNvbiBtQ3VzdG9tUG9pbnRlckljb24gPSBudWxsOwogCiAgICAgLyoqCiAgICAgICogc2VlIHtAbGluayAjcGxheVNvdW5kRWZmZWN0KGludCl9CkBAIC0zNzUsNiArMzg1LDggQEAKICAgICAgICAgaW50IGxvY2FsQ2hhbmdlczsKICAgICB9CiAKKyAgICBwcml2YXRlIFN0cmluZyBtVGFnID0gVEFHOworCiAgICAgcHVibGljIFZpZXdSb290SW1wbChDb250ZXh0IGNvbnRleHQsIERpc3BsYXkgZGlzcGxheSkgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1XaW5kb3dTZXNzaW9uID0gV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dTZXNzaW9uKCk7CkBAIC01MDEsNiArNTEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbVdpbmRvd0F0dHJpYnV0ZXMucGFja2FnZU5hbWUgPSBtQmFzZVBhY2thZ2VOYW1lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhdHRycyA9IG1XaW5kb3dBdHRyaWJ1dGVzOworICAgICAgICAgICAgICAgIHNldFRhZygpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGFjdHVhbCB3aW5kb3cgZmxhZ3Mgc3VwcGxpZWQgYnkgdGhlIGNsaWVudC4KICAgICAgICAgICAgICAgICBtQ2xpZW50V2luZG93TGF5b3V0RmxhZ3MgPSBhdHRycy5mbGFnczsKIApAQCAtNTM3LDcgKzU1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGF0dHJzLmJhY2t1cCgpOwogICAgICAgICAgICAgICAgICAgICBtVHJhbnNsYXRvci50cmFuc2xhdGVXaW5kb3dMYXlvdXQoYXR0cnMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cuZChUQUcsICJXaW5kb3dMYXlvdXQgaW4gc2V0VmlldzoiICsgYXR0cnMpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy5kKG1UYWcsICJXaW5kb3dMYXlvdXQgaW4gc2V0VmlldzoiICsgYXR0cnMpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXRpYmlsaXR5SW5mby5zdXBwb3J0c1NjcmVlbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF0dHJzLnByaXZhdGVGbGFncyB8PSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfQ09NUEFUSUJMRV9XSU5ET1c7CkBAIC01OTgsNyArNjExLDcgQEAKICAgICAgICAgICAgICAgICBtUGVuZGluZ0NvbnRlbnRJbnNldHMuc2V0KG1BdHRhY2hJbmZvLm1Db250ZW50SW5zZXRzKTsKICAgICAgICAgICAgICAgICBtUGVuZGluZ1N0YWJsZUluc2V0cy5zZXQobUF0dGFjaEluZm8ubVN0YWJsZUluc2V0cyk7CiAgICAgICAgICAgICAgICAgbVBlbmRpbmdWaXNpYmxlSW5zZXRzLnNldCgwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihUQUcsICJBZGRlZCB3aW5kb3cgIiArIG1XaW5kb3cpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KG1UYWcsICJBZGRlZCB3aW5kb3cgIiArIG1XaW5kb3cpOwogICAgICAgICAgICAgICAgIGlmIChyZXMgPCBXaW5kb3dNYW5hZ2VyR2xvYmFsLkFERF9PS0FZKSB7CiAgICAgICAgICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1Sb290VmlldyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgIG1BZGRlZCA9IGZhbHNlOwpAQCAtNjkyLDYgKzcwNSwxMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHNldFRhZygpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gc3BsaXQgPSBtV2luZG93QXR0cmlidXRlcy5nZXRUaXRsZSgpLnRvU3RyaW5nKCkuc3BsaXQoIlxcLiIpOworICAgICAgICBpZiAoc3BsaXQubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgbVRhZyA9IFRBRyArICJbIiArIHNwbGl0W3NwbGl0Lmxlbmd0aCAtIDFdICsgIl0iOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqIFdoZXRoZXIgdGhlIHdpbmRvdyBpcyBpbiBsb2NhbCBmb2N1cyBtb2RlIG9yIG5vdCAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0luTG9jYWxGb2N1c01vZGUoKSB7CiAgICAgICAgIHJldHVybiAobVdpbmRvd0F0dHJpYnV0ZXMuZmxhZ3MgJiBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0xPQ0FMX0ZPQ1VTX01PREUpICE9IDA7CkBAIC05ODEsNyArMTAwMSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFZpZXdQYXJlbnQgaW52YWxpZGF0ZUNoaWxkSW5QYXJlbnQoaW50W10gbG9jYXRpb24sIFJlY3QgZGlydHkpIHsKICAgICAgICAgY2hlY2tUaHJlYWQoKTsKLSAgICAgICAgaWYgKERFQlVHX0RSQVcpIExvZy52KFRBRywgIkludmFsaWRhdGUgY2hpbGQ6ICIgKyBkaXJ0eSk7CisgICAgICAgIGlmIChERUJVR19EUkFXKSBMb2cudihtVGFnLCAiSW52YWxpZGF0ZSBjaGlsZDogIiArIGRpcnR5KTsKIAogICAgICAgICBpZiAoZGlydHkgPT0gbnVsbCkgewogICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwpAQCAtMTAzMSw2ICsxMDUxLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRJc0FtYmllbnRNb2RlKGJvb2xlYW4gYW1iaWVudCkgeworICAgICAgICBtSXNBbWJpZW50TW9kZSA9IGFtYmllbnQ7CisgICAgfQorCiAgICAgdm9pZCBzZXRXaW5kb3dTdG9wcGVkKGJvb2xlYW4gc3RvcHBlZCkgewogICAgICAgICBpZiAobVN0b3BwZWQgIT0gc3RvcHBlZCkgewogICAgICAgICAgICAgbVN0b3BwZWQgPSBzdG9wcGVkOwpAQCAtMTE2MSw3ICsxMTg1LDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBjb2xsZWN0Vmlld0F0dHJpYnV0ZXMoKSB7CiAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tUmVjb21wdXRlR2xvYmFsQXR0cmlidXRlcykgewotICAgICAgICAgICAgLy9Mb2cuaShUQUcsICJDb21wdXRpbmcgdmlldyBoaWVyYXJjaHkgYXR0cmlidXRlcyEiKTsKKyAgICAgICAgICAgIC8vTG9nLmkobVRhZywgIkNvbXB1dGluZyB2aWV3IGhpZXJhcmNoeSBhdHRyaWJ1dGVzISIpOwogICAgICAgICAgICAgbUF0dGFjaEluZm8ubVJlY29tcHV0ZUdsb2JhbEF0dHJpYnV0ZXMgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2xlYW4gb2xkU2NyZWVuT24gPSBtQXR0YWNoSW5mby5tS2VlcFNjcmVlbk9uOwogICAgICAgICAgICAgbUF0dGFjaEluZm8ubUtlZXBTY3JlZW5PbiA9IGZhbHNlOwpAQCAtMTIwMiw3ICsxMjI2LDcgQEAKICAgICAgICAgaW50IGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWM7CiAgICAgICAgIGJvb2xlYW4gd2luZG93U2l6ZU1heUNoYW5nZSA9IGZhbHNlOwogCi0gICAgICAgIGlmIChERUJVR19PUklFTlRBVElPTiB8fCBERUJVR19MQVlPVVQpIExvZy52KFRBRywKKyAgICAgICAgaWYgKERFQlVHX09SSUVOVEFUSU9OIHx8IERFQlVHX0xBWU9VVCkgTG9nLnYobVRhZywKICAgICAgICAgICAgICAgICAiTWVhc3VyaW5nICIgKyBob3N0ICsgIiBpbiBkaXNwbGF5ICIgKyBkZXNpcmVkV2luZG93V2lkdGgKICAgICAgICAgICAgICAgICArICJ4IiArIGRlc2lyZWRXaW5kb3dIZWlnaHQgKyAiLi4uIik7CiAKQEAgLTEyMTgsMjYgKzEyNDIsMjYgQEAKICAgICAgICAgICAgIGlmIChtVG1wVmFsdWUudHlwZSA9PSBUeXBlZFZhbHVlLlRZUEVfRElNRU5TSU9OKSB7CiAgICAgICAgICAgICAgICAgYmFzZVNpemUgPSAoaW50KW1UbXBWYWx1ZS5nZXREaW1lbnNpb24ocGFja2FnZU1ldHJpY3MpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERFQlVHX0RJQUxPRykgTG9nLnYoVEFHLCAiV2luZG93ICIgKyBtVmlldyArICI6IGJhc2VTaXplPSIgKyBiYXNlU2l6ZSk7CisgICAgICAgICAgICBpZiAoREVCVUdfRElBTE9HKSBMb2cudihtVGFnLCAiV2luZG93ICIgKyBtVmlldyArICI6IGJhc2VTaXplPSIgKyBiYXNlU2l6ZSk7CiAgICAgICAgICAgICBpZiAoYmFzZVNpemUgIT0gMCAmJiBkZXNpcmVkV2luZG93V2lkdGggPiBiYXNlU2l6ZSkgewogICAgICAgICAgICAgICAgIGNoaWxkV2lkdGhNZWFzdXJlU3BlYyA9IGdldFJvb3RNZWFzdXJlU3BlYyhiYXNlU2l6ZSwgbHAud2lkdGgpOwogICAgICAgICAgICAgICAgIGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMgPSBnZXRSb290TWVhc3VyZVNwZWMoZGVzaXJlZFdpbmRvd0hlaWdodCwgbHAuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICBwZXJmb3JtTWVhc3VyZShjaGlsZFdpZHRoTWVhc3VyZVNwZWMsIGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICAgICAgICAgIGlmIChERUJVR19ESUFMT0cpIExvZy52KFRBRywgIldpbmRvdyAiICsgbVZpZXcgKyAiOiBtZWFzdXJlZCAoIgorICAgICAgICAgICAgICAgIGlmIChERUJVR19ESUFMT0cpIExvZy52KG1UYWcsICJXaW5kb3cgIiArIG1WaWV3ICsgIjogbWVhc3VyZWQgKCIKICAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdC5nZXRNZWFzdXJlZFdpZHRoKCkgKyAiLCIgKyBob3N0LmdldE1lYXN1cmVkSGVpZ2h0KCkgKyAiKSIpOwogICAgICAgICAgICAgICAgIGlmICgoaG9zdC5nZXRNZWFzdXJlZFdpZHRoQW5kU3RhdGUoKSZWaWV3Lk1FQVNVUkVEX1NUQVRFX1RPT19TTUFMTCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBnb29kTWVhc3VyZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRGlkbid0IGZpdCBpbiB0aGF0IHNpemUuLi4gdHJ5IGV4cGFuZGluZyBhIGJpdC4KICAgICAgICAgICAgICAgICAgICAgYmFzZVNpemUgPSAoYmFzZVNpemUrZGVzaXJlZFdpbmRvd1dpZHRoKS8yOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfRElBTE9HKSBMb2cudihUQUcsICJXaW5kb3cgIiArIG1WaWV3ICsgIjogbmV4dCBiYXNlU2l6ZT0iCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19ESUFMT0cpIExvZy52KG1UYWcsICJXaW5kb3cgIiArIG1WaWV3ICsgIjogbmV4dCBiYXNlU2l6ZT0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBiYXNlU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkV2lkdGhNZWFzdXJlU3BlYyA9IGdldFJvb3RNZWFzdXJlU3BlYyhiYXNlU2l6ZSwgbHAud2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBwZXJmb3JtTWVhc3VyZShjaGlsZFdpZHRoTWVhc3VyZVNwZWMsIGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfRElBTE9HKSBMb2cudihUQUcsICJXaW5kb3cgIiArIG1WaWV3ICsgIjogbWVhc3VyZWQgKCIKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0RJQUxPRykgTG9nLnYobVRhZywgIldpbmRvdyAiICsgbVZpZXcgKyAiOiBtZWFzdXJlZCAoIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaG9zdC5nZXRNZWFzdXJlZFdpZHRoKCkgKyAiLCIgKyBob3N0LmdldE1lYXN1cmVkSGVpZ2h0KCkgKyAiKSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKGhvc3QuZ2V0TWVhc3VyZWRXaWR0aEFuZFN0YXRlKCkmVmlldy5NRUFTVVJFRF9TVEFURV9UT09fU01BTEwpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19ESUFMT0cpIExvZy52KFRBRywgIkdvb2QhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfRElBTE9HKSBMb2cudihtVGFnLCAiR29vZCEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RNZWFzdXJlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTEzMzcsOCArMTM2MSw4IEBACiAgICAgICAgIGludCBkZXNpcmVkV2luZG93SGVpZ2h0OwogCiAgICAgICAgIGZpbmFsIGludCB2aWV3VmlzaWJpbGl0eSA9IGdldEhvc3RWaXNpYmlsaXR5KCk7Ci0gICAgICAgIGJvb2xlYW4gdmlld1Zpc2liaWxpdHlDaGFuZ2VkID0gbVZpZXdWaXNpYmlsaXR5ICE9IHZpZXdWaXNpYmlsaXR5Ci0gICAgICAgICAgICAgICAgfHwgbU5ld1N1cmZhY2VOZWVkZWQ7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlld1Zpc2liaWxpdHlDaGFuZ2VkID0gIW1GaXJzdAorICAgICAgICAgICAgICAgICYmIChtVmlld1Zpc2liaWxpdHkgIT0gdmlld1Zpc2liaWxpdHkgfHwgbU5ld1N1cmZhY2VOZWVkZWQpOwogCiAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zIHBhcmFtcyA9IG51bGw7CiAgICAgICAgIGlmIChtV2luZG93QXR0cmlidXRlc0NoYW5nZWQpIHsKQEAgLTEzODgsNyArMTQxMiw2IEBACiAgICAgICAgICAgICBtQXR0YWNoSW5mby5tSGFzV2luZG93Rm9jdXMgPSBmYWxzZTsKICAgICAgICAgICAgIG1BdHRhY2hJbmZvLm1XaW5kb3dWaXNpYmlsaXR5ID0gdmlld1Zpc2liaWxpdHk7CiAgICAgICAgICAgICBtQXR0YWNoSW5mby5tUmVjb21wdXRlR2xvYmFsQXR0cmlidXRlcyA9IGZhbHNlOwotICAgICAgICAgICAgdmlld1Zpc2liaWxpdHlDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICBtTGFzdENvbmZpZ3VyYXRpb24uc2V0VG8oaG9zdC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkpOwogICAgICAgICAgICAgbUxhc3RTeXN0ZW1VaVZpc2liaWxpdHkgPSBtQXR0YWNoSW5mby5tU3lzdGVtVWlWaXNpYmlsaXR5OwogICAgICAgICAgICAgLy8gU2V0IHRoZSBsYXlvdXQgZGlyZWN0aW9uIGlmIGl0IGhhcyBub3QgYmVlbiBzZXQgYmVmb3JlIChpbmhlcml0IGlzIHRoZSBkZWZhdWx0KQpAQCAtMTM5OCwxNCArMTQyMSwxMyBAQAogICAgICAgICAgICAgaG9zdC5kaXNwYXRjaEF0dGFjaGVkVG9XaW5kb3cobUF0dGFjaEluZm8sIDApOwogICAgICAgICAgICAgbUF0dGFjaEluZm8ubVRyZWVPYnNlcnZlci5kaXNwYXRjaE9uV2luZG93QXR0YWNoZWRDaGFuZ2UodHJ1ZSk7CiAgICAgICAgICAgICBkaXNwYXRjaEFwcGx5SW5zZXRzKGhvc3QpOwotICAgICAgICAgICAgLy9Mb2cuaShUQUcsICJTY3JlZW4gb24gaW5pdGlhbGl6ZWQ6ICIgKyBhdHRhY2hJbmZvLm1LZWVwU2NyZWVuT24pOworICAgICAgICAgICAgLy9Mb2cuaShtVGFnLCAiU2NyZWVuIG9uIGluaXRpYWxpemVkOiAiICsgYXR0YWNoSW5mby5tS2VlcFNjcmVlbk9uKTsKIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGVzaXJlZFdpbmRvd1dpZHRoID0gZnJhbWUud2lkdGgoKTsKICAgICAgICAgICAgIGRlc2lyZWRXaW5kb3dIZWlnaHQgPSBmcmFtZS5oZWlnaHQoKTsKICAgICAgICAgICAgIGlmIChkZXNpcmVkV2luZG93V2lkdGggIT0gbVdpZHRoIHx8IGRlc2lyZWRXaW5kb3dIZWlnaHQgIT0gbUhlaWdodCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVR19PUklFTlRBVElPTikgTG9nLnYoVEFHLAotICAgICAgICAgICAgICAgICAgICAgICAgIlZpZXcgIiArIGhvc3QgKyAiIHJlc2l6ZWQgdG86ICIgKyBmcmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX09SSUVOVEFUSU9OKSBMb2cudihtVGFnLCAiVmlldyAiICsgaG9zdCArICIgcmVzaXplZCB0bzogIiArIGZyYW1lKTsKICAgICAgICAgICAgICAgICBtRnVsbFJlZHJhd05lZWRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgbUxheW91dFJlcXVlc3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgd2luZG93U2l6ZU1heUNoYW5nZSA9IHRydWU7CkBAIC0xNDU4LDI4ICsxNDgwLDIzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghbVBlbmRpbmdWaXNpYmxlSW5zZXRzLmVxdWFscyhtQXR0YWNoSW5mby5tVmlzaWJsZUluc2V0cykpIHsKICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubVZpc2libGVJbnNldHMuc2V0KG1QZW5kaW5nVmlzaWJsZUluc2V0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KFRBRywgIlZpc2libGUgaW5zZXRzIGNoYW5naW5nIHRvOiAiCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KG1UYWcsICJWaXNpYmxlIGluc2V0cyBjaGFuZ2luZyB0bzogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUF0dGFjaEluZm8ubVZpc2libGVJbnNldHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIW1QZW5kaW5nT3V0c2V0cy5lcXVhbHMobUF0dGFjaEluZm8ubU91dHNldHMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2V0c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobHAud2lkdGggPT0gVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxwLmhlaWdodCA9PSBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkgeworICAgICAgICAgICAgICAgIGlmICgobHAud2lkdGggPT0gVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxwLmhlaWdodCA9PSBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChscC50eXBlID09IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1RBVFVTX0JBUl9QQU5FTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBscC50eXBlID09IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfSU5QVVRfTUVUSE9ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxwLnR5cGUgPT0gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9WT0xVTUVfT1ZFUkxBWSkpIHsKICAgICAgICAgICAgICAgICAgICAgd2luZG93U2l6ZU1heUNoYW5nZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxwLnR5cGUgPT0gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TVEFUVVNfQkFSX1BBTkVMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbHAudHlwZSA9PSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0lOUFVUX01FVEhPRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URSAtLSBzeXN0ZW0gY29kZSwgd29uJ3QgdHJ5IHRvIGRvIGNvbXBhdCBtb2RlLgotICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnQgc2l6ZSA9IG5ldyBQb2ludCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURpc3BsYXkuZ2V0UmVhbFNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkV2luZG93V2lkdGggPSBzaXplLng7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkV2luZG93SGVpZ2h0ID0gc2l6ZS55OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgRGlzcGxheU1ldHJpY3MgcGFja2FnZU1ldHJpY3MgPSByZXMuZ2V0RGlzcGxheU1ldHJpY3MoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRXaW5kb3dXaWR0aCA9IHBhY2thZ2VNZXRyaWNzLndpZHRoUGl4ZWxzOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFdpbmRvd0hlaWdodCA9IHBhY2thZ2VNZXRyaWNzLmhlaWdodFBpeGVsczsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBOT1RFIC0tIHN5c3RlbSBjb2RlLCB3b24ndCB0cnkgdG8gZG8gY29tcGF0IG1vZGUuCisgICAgICAgICAgICAgICAgICAgIFBvaW50IHNpemUgPSBuZXcgUG9pbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbURpc3BsYXkuZ2V0UmVhbFNpemUoc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRXaW5kb3dXaWR0aCA9IHNpemUueDsKKyAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFdpbmRvd0hlaWdodCA9IHNpemUueTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTE2MDMsNyArMTYyMCw3IEBACiAKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgewotICAgICAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJob3N0PXc6IiArIGhvc3QuZ2V0TWVhc3VyZWRXaWR0aCgpICsgIiwgaDoiICsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmkobVRhZywgImhvc3Q9dzoiICsgaG9zdC5nZXRNZWFzdXJlZFdpZHRoKCkgKyAiLCBoOiIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3QuZ2V0TWVhc3VyZWRIZWlnaHQoKSArICIsIHBhcmFtcz0iICsgcGFyYW1zKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTE2MjEsNyArMTYzOCw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHN1cmZhY2VHZW5lcmF0aW9uSWQgPSBtU3VyZmFjZS5nZXRHZW5lcmF0aW9uSWQoKTsKICAgICAgICAgICAgICAgICByZWxheW91dFJlc3VsdCA9IHJlbGF5b3V0V2luZG93KHBhcmFtcywgdmlld1Zpc2liaWxpdHksIGluc2V0c1BlbmRpbmcpOwogCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYoVEFHLCAicmVsYXlvdXQ6IGZyYW1lPSIgKyBmcmFtZS50b1Nob3J0U3RyaW5nKCkKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihtVGFnLCAicmVsYXlvdXQ6IGZyYW1lPSIgKyBmcmFtZS50b1Nob3J0U3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBvdmVyc2Nhbj0iICsgbVBlbmRpbmdPdmVyc2Nhbkluc2V0cy50b1Nob3J0U3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjb250ZW50PSIgKyBtUGVuZGluZ0NvbnRlbnRJbnNldHMudG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICArICIgdmlzaWJsZT0iICsgbVBlbmRpbmdWaXNpYmxlSW5zZXRzLnRvU2hvcnRTdHJpbmcoKQpAQCAtMTYzMCw3ICsxNjQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBzdXJmYWNlPSIgKyBtU3VyZmFjZSk7CiAKICAgICAgICAgICAgICAgICBpZiAobVBlbmRpbmdDb25maWd1cmF0aW9uLnNlcSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19DT05GSUdVUkFUSU9OKSBMb2cudihUQUcsICJWaXNpYmxlIHdpdGggbmV3IGNvbmZpZzogIgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgTG9nLnYobVRhZywgIlZpc2libGUgd2l0aCBuZXcgY29uZmlnOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtUGVuZGluZ0NvbmZpZ3VyYXRpb24pOwogICAgICAgICAgICAgICAgICAgICB1cGRhdGVDb25maWd1cmF0aW9uKG5ldyBDb25maWd1cmF0aW9uKG1QZW5kaW5nQ29uZmlndXJhdGlvbiksICFtRmlyc3QpOwogICAgICAgICAgICAgICAgICAgICBtUGVuZGluZ0NvbmZpZ3VyYXRpb24uc2VxID0gMDsKQEAgLTE2NDksMTkgKzE2NjYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICYgV2luZG93TWFuYWdlckdsb2JhbC5SRUxBWU9VVF9SRVNfU1VSRkFDRV9SRVNJWkVEKSAhPSAwOwogICAgICAgICAgICAgICAgIGlmIChjb250ZW50SW5zZXRzQ2hhbmdlZCkgewogICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tQ29udGVudEluc2V0cy5zZXQobVBlbmRpbmdDb250ZW50SW5zZXRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYoVEFHLCAiQ29udGVudCBpbnNldHMgY2hhbmdpbmcgdG86ICIKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYobVRhZywgIkNvbnRlbnQgaW5zZXRzIGNoYW5naW5nIHRvOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtQXR0YWNoSW5mby5tQ29udGVudEluc2V0cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChvdmVyc2Nhbkluc2V0c0NoYW5nZWQpIHsKICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubU92ZXJzY2FuSW5zZXRzLnNldChtUGVuZGluZ092ZXJzY2FuSW5zZXRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYoVEFHLCAiT3ZlcnNjYW4gaW5zZXRzIGNoYW5naW5nIHRvOiAiCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KG1UYWcsICJPdmVyc2NhbiBpbnNldHMgY2hhbmdpbmcgdG86ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1BdHRhY2hJbmZvLm1PdmVyc2Nhbkluc2V0cyk7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gcmVsYXlvdXQgd2l0aCBjb250ZW50IGluc2V0cy4KICAgICAgICAgICAgICAgICAgICAgY29udGVudEluc2V0c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc3RhYmxlSW5zZXRzQ2hhbmdlZCkgewogICAgICAgICAgICAgICAgICAgICBtQXR0YWNoSW5mby5tU3RhYmxlSW5zZXRzLnNldChtUGVuZGluZ1N0YWJsZUluc2V0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KFRBRywgIkRlY29yIGluc2V0cyBjaGFuZ2luZyB0bzogIgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihtVGFnLCAiRGVjb3IgaW5zZXRzIGNoYW5naW5nIHRvOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtQXR0YWNoSW5mby5tU3RhYmxlSW5zZXRzKTsKICAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byByZWxheW91dCB3aXRoIGNvbnRlbnQgaW5zZXRzLgogICAgICAgICAgICAgICAgICAgICBjb250ZW50SW5zZXRzQ2hhbmdlZCA9IHRydWU7CkBAIC0xNjc4LDcgKzE2OTUsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAodmlzaWJsZUluc2V0c0NoYW5nZWQpIHsKICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubVZpc2libGVJbnNldHMuc2V0KG1QZW5kaW5nVmlzaWJsZUluc2V0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KFRBRywgIlZpc2libGUgaW5zZXRzIGNoYW5naW5nIHRvOiAiCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KG1UYWcsICJWaXNpYmxlIGluc2V0cyBjaGFuZ2luZyB0bzogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUF0dGFjaEluZm8ubVZpc2libGVJbnNldHMpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTg1OSw3ICsxODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaW50IGNoaWxkV2lkdGhNZWFzdXJlU3BlYyA9IGdldFJvb3RNZWFzdXJlU3BlYyhtV2lkdGgsIGxwLndpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMgPSBnZXRSb290TWVhc3VyZVNwZWMobUhlaWdodCwgbHAuaGVpZ2h0KTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihUQUcsICJPb29wcywgc29tZXRoaW5nIGNoYW5nZWQhICBtV2lkdGg9IgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihtVGFnLCAiT29vcHMsIHNvbWV0aGluZyBjaGFuZ2VkISAgbVdpZHRoPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1XaWR0aCArICIgbWVhc3VyZWRXaWR0aD0iICsgaG9zdC5nZXRNZWFzdXJlZFdpZHRoKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgbUhlaWdodD0iICsgbUhlaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBtZWFzdXJlZEhlaWdodD0iICsgaG9zdC5nZXRNZWFzdXJlZEhlaWdodCgpCkBAIC0xODg5LDcgKzE5MDYsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1lYXN1cmVBZ2FpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYoVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYobVRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFuZCBoZXkgbGV0J3MgbWVhc3VyZSBvbmNlIG1vcmU6IHdpZHRoPSIgKyB3aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaGVpZ2h0PSIgKyBoZWlnaHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybU1lYXN1cmUoY2hpbGRXaWR0aE1lYXN1cmVTcGVjLCBjaGlsZEhlaWdodE1lYXN1cmVTcGVjKTsKQEAgLTIwMTEsMTUgKzIwMjgsMTUgQEAKIAogICAgICAgICBpZiAobUZpcnN0KSB7CiAgICAgICAgICAgICAvLyBoYW5kbGUgZmlyc3QgZm9jdXMgcmVxdWVzdAotICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLCAiRmlyc3Q6IG1WaWV3Lmhhc0ZvY3VzKCk9IgorICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYobVRhZywgIkZpcnN0OiBtVmlldy5oYXNGb2N1cygpPSIKICAgICAgICAgICAgICAgICAgICAgKyBtVmlldy5oYXNGb2N1cygpKTsKICAgICAgICAgICAgIGlmIChtVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtVmlldy5oYXNGb2N1cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnJlcXVlc3RGb2N1cyhWaWV3LkZPQ1VTX0ZPUldBUkQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihUQUcsICJGaXJzdDogcmVxdWVzdGVkIGZvY3VzZWQgdmlldz0iCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsICJGaXJzdDogcmVxdWVzdGVkIGZvY3VzZWQgdmlldz0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtVmlldy5maW5kRm9jdXMoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLCAiRmlyc3Q6IGV4aXN0aW5nIGZvY3VzZWQgdmlldz0iCisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsICJGaXJzdDogZXhpc3RpbmcgZm9jdXNlZCB2aWV3PSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1WaWV3LmZpbmRGb2N1cygpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMDkxLDExICsyMTA4LDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZU91dE9mUmVzb3VyY2VzRXhjZXB0aW9uKFN1cmZhY2UuT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBpbml0aWFsaXppbmcgSFcgc3VyZmFjZSIsIGUpOworICAgICAgICBMb2cuZShtVGFnLCAiT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gaW5pdGlhbGl6aW5nIEhXIHN1cmZhY2UiLCBlKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGlmICghbVdpbmRvd1Nlc3Npb24ub3V0T2ZNZW1vcnkobVdpbmRvdykgJiYKICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzcy5teVVpZCgpICE9IFByb2Nlc3MuU1lTVEVNX1VJRCkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJObyBwcm9jZXNzZXMga2lsbGVkIGZvciBtZW1vcnk7IGtpbGxpbmcgc2VsZiIpOworICAgICAgICAgICAgICAgIFNsb2cudyhtVGFnLCAiTm8gcHJvY2Vzc2VzIGtpbGxlZCBmb3IgbWVtb3J5OyBraWxsaW5nIHNlbGYiKTsKICAgICAgICAgICAgICAgICBQcm9jZXNzLmtpbGxQcm9jZXNzKFByb2Nlc3MubXlQaWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewpAQCAtMjE3MSw3ICsyMTg4LDcgQEAKIAogICAgICAgICBmaW5hbCBWaWV3IGhvc3QgPSBtVmlldzsKICAgICAgICAgaWYgKERFQlVHX09SSUVOVEFUSU9OIHx8IERFQlVHX0xBWU9VVCkgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAiTGF5aW5nIG91dCAiICsgaG9zdCArICIgdG8gKCIgKworICAgICAgICAgICAgTG9nLnYobVRhZywgIkxheWluZyBvdXQgIiArIGhvc3QgKyAiIHRvICgiICsKICAgICAgICAgICAgICAgICAgICAgaG9zdC5nZXRNZWFzdXJlZFdpZHRoKCkgKyAiLCAiICsgaG9zdC5nZXRNZWFzdXJlZEhlaWdodCgpICsgIikiKTsKICAgICAgICAgfQogCkBAIC0yNDE0LDExICsyNDMxLDExIEBACiAgICAgICAgICAgICBTdHJpbmcgdGhpc0hhc2ggPSBJbnRlZ2VyLnRvSGV4U3RyaW5nKFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoaXMpKTsKICAgICAgICAgICAgIGxvbmcgZnJhbWVUaW1lID0gbm93VGltZSAtIG1GcHNQcmV2VGltZTsKICAgICAgICAgICAgIGxvbmcgdG90YWxUaW1lID0gbm93VGltZSAtIG1GcHNTdGFydFRpbWU7Ci0gICAgICAgICAgICBMb2cudihUQUcsICIweCIgKyB0aGlzSGFzaCArICJcdEZyYW1lIHRpbWU6XHQiICsgZnJhbWVUaW1lKTsKKyAgICAgICAgICAgIExvZy52KG1UYWcsICIweCIgKyB0aGlzSGFzaCArICJcdEZyYW1lIHRpbWU6XHQiICsgZnJhbWVUaW1lKTsKICAgICAgICAgICAgIG1GcHNQcmV2VGltZSA9IG5vd1RpbWU7CiAgICAgICAgICAgICBpZiAodG90YWxUaW1lID4gMTAwMCkgewogICAgICAgICAgICAgICAgIGZsb2F0IGZwcyA9IChmbG9hdCkgbUZwc051bUZyYW1lcyAqIDEwMDAgLyB0b3RhbFRpbWU7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiMHgiICsgdGhpc0hhc2ggKyAiXHRGUFM6XHQiICsgZnBzKTsKKyAgICAgICAgICAgICAgICBMb2cudihtVGFnLCAiMHgiICsgdGhpc0hhc2ggKyAiXHRGUFM6XHQiICsgZnBzKTsKICAgICAgICAgICAgICAgICBtRnBzU3RhcnRUaW1lID0gbm93VGltZTsKICAgICAgICAgICAgICAgICBtRnBzTnVtRnJhbWVzID0gMDsKICAgICAgICAgICAgIH0KQEAgLTI0NjAsNyArMjQ3Nyw3IEBACiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgbVdpbmRvd0RyYXdDb3VudERvd24uYXdhaXQoKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIldpbmRvdyByZWRyYXcgY291bnQgZG93biBpbnRlcnJ1cGVkISIpOworICAgICAgICAgICAgICAgICAgICBMb2cuZShtVGFnLCAiV2luZG93IHJlZHJhdyBjb3VudCBkb3duIGludGVycnVwZWQhIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1XaW5kb3dEcmF3Q291bnREb3duID0gbnVsbDsKICAgICAgICAgICAgIH0KQEAgLTI0NzAsNyArMjQ4Nyw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChMT0NBTF9MT0dWKSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiRklOSVNIRUQgRFJBV0lORzogIiArIG1XaW5kb3dBdHRyaWJ1dGVzLmdldFRpdGxlKCkpOworICAgICAgICAgICAgICAgIExvZy52KG1UYWcsICJGSU5JU0hFRCBEUkFXSU5HOiAiICsgbVdpbmRvd0F0dHJpYnV0ZXMuZ2V0VGl0bGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobVN1cmZhY2VIb2xkZXIgIT0gbnVsbCAmJiBtU3VyZmFjZS5pc1ZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICBtU3VyZmFjZUhvbGRlckNhbGxiYWNrLnN1cmZhY2VSZWRyYXdOZWVkZWQobVN1cmZhY2VIb2xkZXIpOwpAQCAtMjU1Myw3ICsyNTcwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChERUJVR19PUklFTlRBVElPTiB8fCBERUJVR19EUkFXKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJEcmF3ICIgKyBtVmlldyArICIvIgorICAgICAgICAgICAgTG9nLnYobVRhZywgIkRyYXcgIiArIG1WaWV3ICsgIi8iCiAgICAgICAgICAgICAgICAgICAgICsgbVdpbmRvd0F0dHJpYnV0ZXMuZ2V0VGl0bGUoKQogICAgICAgICAgICAgICAgICAgICArICI6IGRpcnR5PXsiICsgZGlydHkubGVmdCArICIsIiArIGRpcnR5LnRvcAogICAgICAgICAgICAgICAgICAgICArICIsIiArIGRpcnR5LnJpZ2h0ICsgIiwiICsgZGlydHkuYm90dG9tICsgIn0gc3VyZmFjZT0iCkBAIC0yNjg3LDcgKzI3MDQsNyBAQAogICAgICAgICAgICAgaGFuZGxlT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3QgbG9jayBzdXJmYWNlIiwgZSk7CisgICAgICAgICAgICBMb2cuZShtVGFnLCAiQ291bGQgbm90IGxvY2sgc3VyZmFjZSIsIGUpOwogICAgICAgICAgICAgLy8gRG9uJ3QgYXNzdW1lIHRoaXMgaXMgZHVlIHRvIG91dCBvZiBtZW1vcnksIGl0IGNvdWxkIGJlCiAgICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgYW5kIGlmIGl0IGlzIHNvbWV0aGluZyBlbHNlIHRoZW4gd2UgY291bGQKICAgICAgICAgICAgIC8vIGtpbGwgc3R1ZmYgKG9yIG91cnNlbGYpIGZvciBubyByZWFzb24uCkBAIC0yNjk3LDcgKzI3MTQsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoREVCVUdfT1JJRU5UQVRJT04gfHwgREVCVUdfRFJBVykgewotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIlN1cmZhY2UgIiArIHN1cmZhY2UgKyAiIGRyYXdpbmcgdG8gYml0bWFwIHc9IgorICAgICAgICAgICAgICAgIExvZy52KG1UYWcsICJTdXJmYWNlICIgKyBzdXJmYWNlICsgIiBkcmF3aW5nIHRvIGJpdG1hcCB3PSIKICAgICAgICAgICAgICAgICAgICAgICAgICsgY2FudmFzLmdldFdpZHRoKCkgKyAiLCBoPSIgKyBjYW52YXMuZ2V0SGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIC8vY2FudmFzLmRyYXdBUkdCKDI1NSwgMjU1LCAwLCAwKTsKICAgICAgICAgICAgIH0KQEAgLTI3MjAsNyArMjczNyw3IEBACiAKICAgICAgICAgICAgIGlmIChERUJVR19EUkFXKSB7CiAgICAgICAgICAgICAgICAgQ29udGV4dCBjeHQgPSBtVmlldy5nZXRDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiRHJhd2luZzogcGFja2FnZToiICsgY3h0LmdldFBhY2thZ2VOYW1lKCkgKworICAgICAgICAgICAgICAgIExvZy5pKG1UYWcsICJEcmF3aW5nOiBwYWNrYWdlOiIgKyBjeHQuZ2V0UGFja2FnZU5hbWUoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiLCBtZXRyaWNzPSIgKyBjeHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAiLCBjb21wYXRpYmlsaXR5SW5mbz0iICsgY3h0LmdldFJlc291cmNlcygpLmdldENvbXBhdGliaWxpdHlJbmZvKCkpOwogICAgICAgICAgICAgfQpAQCAtMjc0NSwxNCArMjc2MiwxNCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBzdXJmYWNlLnVubG9ja0NhbnZhc0FuZFBvc3QoY2FudmFzKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ291bGQgbm90IHVubG9jayBzdXJmYWNlIiwgZSk7CisgICAgICAgICAgICAgICAgTG9nLmUobVRhZywgIkNvdWxkIG5vdCB1bmxvY2sgc3VyZmFjZSIsIGUpOwogICAgICAgICAgICAgICAgIG1MYXlvdXRSZXF1ZXN0ZWQgPSB0cnVlOyAgICAvLyBhc2sgd20gZm9yIGEgbmV3IHN1cmZhY2UgbmV4dCB0aW1lLgogICAgICAgICAgICAgICAgIC8vbm9pbnNwZWN0aW9uIFJldHVybkluc2lkZUZpbmFsbHlCbG9jawogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKExPQ0FMX0xPR1YpIHsKLSAgICAgICAgICAgICAgICBMb2cudihUQUcsICJTdXJmYWNlICIgKyBzdXJmYWNlICsgIiB1bmxvY2tDYW52YXNBbmRQb3N0Iik7CisgICAgICAgICAgICAgICAgTG9nLnYobVRhZywgIlN1cmZhY2UgIiArIHN1cmZhY2UgKyAiIHVubG9ja0NhbnZhc0FuZFBvc3QiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI4NTcsMTQgKzI4NzQsMTQgQEAKICAgICAgICAgICAgICAgICAvLyB2aWV3IGlzIHZpc2libGUuCiAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlID0gbnVsbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywgIkV2YWwgc2Nyb2xsOiBmb2N1cz0iICsgZm9jdXMKKyAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsICJFdmFsIHNjcm9sbDogZm9jdXM9IiArIGZvY3VzCiAgICAgICAgICAgICAgICAgICAgICsgIiByZWN0YW5nbGU9IiArIHJlY3RhbmdsZSArICIgY2k9IiArIGNpCiAgICAgICAgICAgICAgICAgICAgICsgIiB2aT0iICsgdmkpOwogICAgICAgICAgICAgaWYgKGZvY3VzID09IGxhc3RTY3JvbGxlZEZvY3VzICYmICFtU2Nyb2xsTWF5Q2hhbmdlICYmIHJlY3RhbmdsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBpZiB0aGUgZm9jdXMgaGFzbid0IGNoYW5nZWQgc2luY2UgbGFzdAogICAgICAgICAgICAgICAgIC8vIHRpbWUsIGFuZCBubyBsYXlvdXQgaGFzIGhhcHBlbmVkLCB0aGVuIGp1c3QgbGVhdmUgdGhpbmdzCiAgICAgICAgICAgICAgICAgLy8gYXMgdGhleSBhcmUuCi0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLCAiS2VlcGluZyBzY3JvbGwgeT0iCisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYobVRhZywgIktlZXBpbmcgc2Nyb2xsIHk9IgogICAgICAgICAgICAgICAgICAgICAgICAgKyBtU2Nyb2xsWSArICIgdmk9IiArIHZpLnRvU2hvcnRTdHJpbmcoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjdXJyZW50bHkgZm9jdXNlZCB2aWV3IGlzCkBAIC0yODcyLDUxICsyODg5LDUxIEBACiAgICAgICAgICAgICAgICAgLy8gYSBwYW4gc28gaXQgY2FuIGJlIHNlZW4uCiAgICAgICAgICAgICAgICAgbUxhc3RTY3JvbGxlZEZvY3VzID0gbmV3IFdlYWtSZWZlcmVuY2U8Vmlldz4oZm9jdXMpOwogICAgICAgICAgICAgICAgIG1TY3JvbGxNYXlDaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihUQUcsICJOZWVkIHRvIHNjcm9sbD8iKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihtVGFnLCAiTmVlZCB0byBzY3JvbGw/Iik7CiAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgdGhlIHJlY3RhbmdsZSBmcm9tIHRoZSBmb2N1cyB2aWV3LgogICAgICAgICAgICAgICAgIGlmIChmb2N1cy5nZXRHbG9iYWxWaXNpYmxlUmVjdChtVmlzUmVjdCwgbnVsbCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLCAiUm9vdCB3PSIKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYobVRhZywgIlJvb3Qgdz0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtVmlldy5nZXRXaWR0aCgpICsgIiBoPSIgKyBtVmlldy5nZXRIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjaT0iICsgY2kudG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHZpPSIgKyB2aS50b1Nob3J0U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVjdGFuZ2xlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzLmdldEZvY3VzZWRSZWN0KG1UZW1wUmVjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihUQUcsICJGb2N1cyAiICsgZm9jdXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsICJGb2N1cyAiICsgZm9jdXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiOiBmb2N1c1JlY3Q9IiArIG1UZW1wUmVjdC50b1Nob3J0U3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1WaWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChWaWV3R3JvdXApIG1WaWV3KS5vZmZzZXREZXNjZW5kYW50UmVjdFRvTXlDb29yZHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1cywgbVRlbXBSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb2N1cyBpbiB3aW5kb3c6IGZvY3VzUmVjdD0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbVRlbXBSZWN0LnRvU2hvcnRTdHJpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdmlzUmVjdD0iICsgbVZpc1JlY3QudG9TaG9ydFN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1UZW1wUmVjdC5zZXQocmVjdGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0IHNjcm9sbCB0byByZWN0OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbVRlbXBSZWN0LnRvU2hvcnRTdHJpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdmlzUmVjdD0iICsgbVZpc1JlY3QudG9TaG9ydFN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAobVRlbXBSZWN0LmludGVyc2VjdChtVmlzUmVjdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb2N1cyB3aW5kb3cgdmlzaWJsZSByZWN0OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbVRlbXBSZWN0LnRvU2hvcnRTdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVRlbXBSZWN0LmhlaWdodCgpID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1WaWV3LmdldEhlaWdodCgpLXZpLnRvcC12aS5ib3R0b20pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGZvY3VzIHNpbXBseSBpcyBub3QgZ29pbmcgdG8gZml0LCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVzdCBpcyBwcm9iYWJseSBqdXN0IHRvIGxlYXZlIHRoaW5ncyBhcy1pcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihUQUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYobVRhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUb28gdGFsbDsgbGVhdmluZyBzY3JvbGxZPSIgKyBzY3JvbGxZKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1UZW1wUmVjdC50b3Atc2Nyb2xsWSkgPCB2aS50b3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxZIC09IHZpLnRvcCAtIChtVGVtcFJlY3QudG9wLXNjcm9sbFkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSBMb2cudihtVGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvcCBjb3ZlcmVkOyBzY3JvbGxZPSIgKyBzY3JvbGxZKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG1UZW1wUmVjdC5ib3R0b20tc2Nyb2xsWSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAobVZpZXcuZ2V0SGVpZ2h0KCktdmkuYm90dG9tKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbFkgKz0gKG1UZW1wUmVjdC5ib3R0b20tc2Nyb2xsWSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKG1WaWV3LmdldEhlaWdodCgpLXZpLmJvdHRvbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1JFU0laRSkgTG9nLnYoVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm90dG9tIGNvdmVyZWQ7IHNjcm9sbFk9IiArIHNjcm9sbFkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CkBAIC0yOTI2LDcgKzI5NDMsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNjcm9sbFkgIT0gbVNjcm9sbFkpIHsKLSAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KFRBRywgIlBhbiBzY3JvbGwgY2hhbmdlZDogb2xkPSIKKyAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIExvZy52KG1UYWcsICJQYW4gc2Nyb2xsIGNoYW5nZWQ6IG9sZD0iCiAgICAgICAgICAgICAgICAgICAgICsgbVNjcm9sbFkgKyAiICwgbmV3PSIgKyBzY3JvbGxZKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1TY3JvbGxlciA9PSBudWxsKSB7CkBAIC0zMDAzLDEwICszMDIwLDM1IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHNldFBvaW50ZXJDYXB0dXJlKFZpZXcgdmlldykgeworICAgICAgICBpZiAoIW1BdHRhY2hJbmZvLm1IYXNXaW5kb3dGb2N1cykgeworICAgICAgICAgICAgTG9nLncobVRhZywgIkNhbid0IHNldCBjYXB0dXJlIGlmIGl0J3Mgbm90IGZvY3VzZWQuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1DYXB0dXJpbmdWaWV3ID09IHZpZXcpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtQ2FwdHVyaW5nVmlldyA9IHZpZXc7CisgICAgICAgIElucHV0TWFuYWdlci5nZXRJbnN0YW5jZSgpLnNldFBvaW50ZXJJY29uRGV0YWNoZWQodHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCByZWxlYXNlUG9pbnRlckNhcHR1cmUoVmlldyB2aWV3KSB7CisgICAgICAgIGlmIChtQ2FwdHVyaW5nVmlldyAhPSB2aWV3IHx8IG1DYXB0dXJpbmdWaWV3ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1DYXB0dXJpbmdWaWV3ID0gbnVsbDsKKyAgICAgICAgSW5wdXRNYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0UG9pbnRlckljb25EZXRhY2hlZChmYWxzZSk7CisgICAgfQorCisgICAgYm9vbGVhbiBoYXNQb2ludGVyQ2FwdHVyZShWaWV3IHZpZXcpIHsKKyAgICAgICAgcmV0dXJuIHZpZXcgIT0gbnVsbCAmJiBtQ2FwdHVyaW5nVmlldyA9PSB2aWV3OworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RDaGlsZEZvY3VzKFZpZXcgY2hpbGQsIFZpZXcgZm9jdXNlZCkgewogICAgICAgICBpZiAoREVCVUdfSU5QVVRfUkVTSVpFKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJSZXF1ZXN0IGNoaWxkIGZvY3VzOiBmb2N1cyBub3cgIiArIGZvY3VzZWQpOworICAgICAgICAgICAgTG9nLnYobVRhZywgIlJlcXVlc3QgY2hpbGQgZm9jdXM6IGZvY3VzIG5vdyAiICsgZm9jdXNlZCk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tUaHJlYWQoKTsKICAgICAgICAgc2NoZWR1bGVUcmF2ZXJzYWxzKCk7CkBAIC0zMDE1LDcgKzMwNTcsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNsZWFyQ2hpbGRGb2N1cyhWaWV3IGNoaWxkKSB7CiAgICAgICAgIGlmIChERUJVR19JTlBVVF9SRVNJWkUpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgIkNsZWFyaW5nIGNoaWxkIGZvY3VzIik7CisgICAgICAgICAgICBMb2cudihtVGFnLCAiQ2xlYXJpbmcgY2hpbGQgZm9jdXMiKTsKICAgICAgICAgfQogICAgICAgICBjaGVja1RocmVhZCgpOwogICAgICAgICBzY2hlZHVsZVRyYXZlcnNhbHMoKTsKQEAgLTMwODAsNiArMzEyMiwxMCBAQAogICAgICAgICBtVmlldyA9IG51bGw7CiAgICAgICAgIG1BdHRhY2hJbmZvLm1Sb290VmlldyA9IG51bGw7CiAKKyAgICAgICAgaWYgKG1DYXB0dXJpbmdWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJlbGVhc2VQb2ludGVyQ2FwdHVyZShtQ2FwdHVyaW5nVmlldyk7CisgICAgICAgIH0KKwogICAgICAgICBtU3VyZmFjZS5yZWxlYXNlKCk7CiAKICAgICAgICAgaWYgKG1JbnB1dFF1ZXVlQ2FsbGJhY2sgIT0gbnVsbCAmJiBtSW5wdXRRdWV1ZSAhPSBudWxsKSB7CkBAIC0zMTEwLDcgKzMxNTYsNyBAQAogICAgIH0KIAogICAgIHZvaWQgdXBkYXRlQ29uZmlndXJhdGlvbihDb25maWd1cmF0aW9uIGNvbmZpZywgYm9vbGVhbiBmb3JjZSkgewotICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgTG9nLnYoVEFHLAorICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgTG9nLnYobVRhZywKICAgICAgICAgICAgICAgICAiQXBwbHlpbmcgbmV3IGNvbmZpZyB0byB3aW5kb3cgIgogICAgICAgICAgICAgICAgICsgbVdpbmRvd0F0dHJpYnV0ZXMuZ2V0VGl0bGUoKQogICAgICAgICAgICAgICAgICsgIjogIiArIGNvbmZpZyk7CkBAIC0zMTkwLDYgKzMyMzYsNyBAQAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBNU0dfV0lORE9XX01PVkVEID0gMjM7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1TR19TWU5USEVTSVpFX0lOUFVUX0VWRU5UID0gMjQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1TR19ESVNQQVRDSF9XSU5ET1dfU0hPV04gPSAyNTsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTVNHX1JFUVVFU1RfS0VZQk9BUkRfU0hPUlRDVVRTID0gMjY7CiAKICAgICBmaW5hbCBjbGFzcyBWaWV3Um9vdEhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC0zMjczLDYgKzMzMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVBlbmRpbmdTdGFibGVJbnNldHMuZXF1YWxzKGFyZ3MuYXJnNikKICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1QZW5kaW5nVmlzaWJsZUluc2V0cy5lcXVhbHMoYXJncy5hcmczKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgbVBlbmRpbmdPdXRzZXRzLmVxdWFscyhhcmdzLmFyZzcpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBtUGVuZGluZ0JhY2tEcm9wRnJhbWUuZXF1YWxzKGFyZ3MuYXJnOCkKICAgICAgICAgICAgICAgICAgICAgICAgICYmIGFyZ3MuYXJnNCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTMzNDUsMTAgKzMzOTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuaW5pdGlhbGl6ZUlmTmVlZGVkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaWR0aCwgbUhlaWdodCwgbUF0dGFjaEluZm8sIG1TdXJmYWNlLCBzdXJmYWNlSW5zZXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChPdXRPZlJlc291cmNlc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIk91dE9mUmVzb3VyY2VzRXhjZXB0aW9uIGxvY2tpbmcgc3VyZmFjZSIsIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShtVGFnLCAiT3V0T2ZSZXNvdXJjZXNFeGNlcHRpb24gbG9ja2luZyBzdXJmYWNlIiwgZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1XaW5kb3dTZXNzaW9uLm91dE9mTWVtb3J5KG1XaW5kb3cpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIk5vIHByb2Nlc3NlcyBraWxsZWQgZm9yIG1lbW9yeTsga2lsbGluZyBzZWxmIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KG1UYWcsICJObyBwcm9jZXNzZXMga2lsbGVkIGZvciBtZW1vcnk7IGtpbGxpbmcgc2VsZiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MoUHJvY2Vzcy5teVBpZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CkBAIC0zMzg5LDYgKzM0MzcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc29mdElucHV0TW9kZSAmPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlNPRlRfSU5QVVRfSVNfRk9SV0FSRF9OQVZJR0FUSU9OOwogICAgICAgICAgICAgICAgICAgICAgICAgbUhhc0hhZFdpbmRvd0ZvY3VzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtQ2FwdHVyaW5nVmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlUG9pbnRlckNhcHR1cmUobUNhcHR1cmluZ1ZpZXcpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBicmVhazsKQEAgLTM0NjMsNyArMzUxMywxMSBAQAogICAgICAgICAgICAgfSBicmVhazsKICAgICAgICAgICAgIGNhc2UgTVNHX0RJU1BBVENIX1dJTkRPV19TSE9XTjogewogICAgICAgICAgICAgICAgIGhhbmRsZURpc3BhdGNoV2luZG93U2hvd24oKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1TR19SRVFVRVNUX0tFWUJPQVJEX1NIT1JUQ1VUUzogeworICAgICAgICAgICAgICAgIElSZXN1bHRSZWNlaXZlciByZWNlaXZlciA9IChJUmVzdWx0UmVjZWl2ZXIpIG1zZy5vYmo7CisgICAgICAgICAgICAgICAgaGFuZGxlUmVxdWVzdEtleWJvYXJkU2hvcnRjdXRzKHJlY2VpdmVyKTsKKyAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNjY5LDcgKzM3MjMsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25EZWxpdmVyVG9OZXh0KFF1ZXVlZElucHV0RXZlbnQgcSkgewogICAgICAgICAgICAgaWYgKERFQlVHX0lOUFVUX1NUQUdFUykgewotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkRvbmUgd2l0aCAiICsgZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiLiAiICsgcSk7CisgICAgICAgICAgICAgICAgTG9nLnYobVRhZywgIkRvbmUgd2l0aCAiICsgZ2V0Q2xhc3MoKS5nZXRTaW1wbGVOYW1lKCkgKyAiLiAiICsgcSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobU5leHQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1OZXh0LmRlbGl2ZXIocSk7CkBAIC0zNjgwLDIzICszNzM0LDIzIEBACiAKICAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkRHJvcElucHV0RXZlbnQoUXVldWVkSW5wdXRFdmVudCBxKSB7CiAgICAgICAgICAgICBpZiAobVZpZXcgPT0gbnVsbCB8fCAhbUFkZGVkKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkRyb3BwaW5nIGV2ZW50IGR1ZSB0byByb290IHZpZXcgYmVpbmcgcmVtb3ZlZDogIiArIHEubUV2ZW50KTsKKyAgICAgICAgICAgICAgICBTbG9nLncobVRhZywgIkRyb3BwaW5nIGV2ZW50IGR1ZSB0byByb290IHZpZXcgYmVpbmcgcmVtb3ZlZDogIiArIHEubUV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCFtQXR0YWNoSW5mby5tSGFzV2luZG93Rm9jdXMKICAgICAgICAgICAgICAgICAgICAgJiYgIXEubUV2ZW50LmlzRnJvbVNvdXJjZShJbnB1dERldmljZS5TT1VSQ0VfQ0xBU1NfUE9JTlRFUikpIHx8IG1TdG9wcGVkCi0gICAgICAgICAgICAgICAgICAgIHx8IChtUGF1c2VkRm9yVHJhbnNpdGlvbiAmJiAhaXNCYWNrKHEubUV2ZW50KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgfHwgbUlzQW1iaWVudE1vZGUgfHwgKG1QYXVzZWRGb3JUcmFuc2l0aW9uICYmICFpc0JhY2socS5tRXZlbnQpKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBmb2N1cyBldmVudCBhbmQgdGhlIHdpbmRvdyBkb2Vzbid0IGN1cnJlbnRseSBoYXZlIGlucHV0IGZvY3VzIG9yCiAgICAgICAgICAgICAgICAgLy8gaGFzIHN0b3BwZWQuIFRoaXMgY291bGQgYmUgYW4gZXZlbnQgdGhhdCBjYW1lIGJhY2sgZnJvbSB0aGUgcHJldmlvdXMgc3RhZ2UKICAgICAgICAgICAgICAgICAvLyBidXQgdGhlIHdpbmRvdyBoYXMgbG9zdCBmb2N1cyBvciBzdG9wcGVkIGluIHRoZSBtZWFudGltZS4KICAgICAgICAgICAgICAgICBpZiAoaXNUZXJtaW5hbElucHV0RXZlbnQocS5tRXZlbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGRyb3AgdGVybWluYWwgaW5wdXQgZXZlbnRzLCBob3dldmVyIG1hcmsgdGhlbSBhcyBjYW5jZWxlZC4KICAgICAgICAgICAgICAgICAgICAgcS5tRXZlbnQuY2FuY2VsKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJDYW5jZWxsaW5nIGV2ZW50IGR1ZSB0byBubyB3aW5kb3cgZm9jdXM6ICIgKyBxLm1FdmVudCk7CisgICAgICAgICAgICAgICAgICAgIFNsb2cudyhtVGFnLCAiQ2FuY2VsbGluZyBldmVudCBkdWUgdG8gbm8gd2luZG93IGZvY3VzOiAiICsgcS5tRXZlbnQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRHJvcCBub24tdGVybWluYWwgaW5wdXQgZXZlbnRzLgotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJEcm9wcGluZyBldmVudCBkdWUgdG8gbm8gd2luZG93IGZvY3VzOiAiICsgcS5tRXZlbnQpOworICAgICAgICAgICAgICAgIFNsb2cudyhtVGFnLCAiRHJvcHBpbmcgZXZlbnQgZHVlIHRvIG5vIHdpbmRvdyBmb2N1czogIiArIHEubUV2ZW50KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5MzYsNyArMzk5MCw3IEBACiAgICAgICAgICAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGltbSA9IElucHV0TWV0aG9kTWFuYWdlci5wZWVrSW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICBpZiAoaW1tICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgSW5wdXRFdmVudCBldmVudCA9IHEubUV2ZW50OwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU1GKSBMb2cudihUQUcsICJTZW5kaW5nIGlucHV0IGV2ZW50IHRvIElNRTogIiArIGV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lNRikgTG9nLnYobVRhZywgIlNlbmRpbmcgaW5wdXQgZXZlbnQgdG8gSU1FOiAiICsgZXZlbnQpOwogICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gaW1tLmRpc3BhdGNoSW5wdXRFdmVudChldmVudCwgcSwgdGhpcywgbUhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IElucHV0TWV0aG9kTWFuYWdlci5ESVNQQVRDSF9IQU5ETEVEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRklOSVNIX0hBTkRMRUQ7CkBAIC00MjEwLDE2ICs0MjY0LDIzIEBACiAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgeSA9IGV2ZW50LmdldFkoKTsKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkgIT0gTW90aW9uRXZlbnQuQUNUSU9OX0hPVkVSX0VYSVQKICAgICAgICAgICAgICAgICAgICAgICAgICYmIHggPj0gMCAmJiB4IDwgbVZpZXcuZ2V0V2lkdGgoKSAmJiB5ID49IDAgJiYgeSA8IG1WaWV3LmdldEhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBwb2ludGVyU2hhcGUgPSBtVmlldy5nZXRQb2ludGVyU2hhcGUoZXZlbnQsIHgsIHkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRlclNoYXBlID09IFBvaW50ZXJJY29uLlNUWUxFX05PVF9TUEVDSUZJRUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJTaGFwZSA9IFBvaW50ZXJJY29uLlNUWUxFX0RFRkFVTFQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUG9pbnRlckljb24gcG9pbnRlckljb24gPSBtVmlldy5nZXRQb2ludGVySWNvbihldmVudCwgeCwgeSk7CisgICAgICAgICAgICAgICAgICAgIGludCBwb2ludGVyU2hhcGUgPSAocG9pbnRlckljb24gIT0gbnVsbCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXJJY29uLmdldFN0eWxlKCkgOiBQb2ludGVySWNvbi5TVFlMRV9ERUZBVUxUOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChtUG9pbnRlckljb25TaGFwZSAhPSBwb2ludGVyU2hhcGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Qb2ludGVySWNvblNoYXBlID0gcG9pbnRlclNoYXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgSW5wdXREZXZpY2UgaW5wdXREZXZpY2UgPSBldmVudC5nZXREZXZpY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dERldmljZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXREZXZpY2Uuc2V0UG9pbnRlclNoYXBlKHBvaW50ZXJTaGFwZSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIElucHV0RGV2aWNlIGlucHV0RGV2aWNlID0gZXZlbnQuZ2V0RGV2aWNlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dERldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBvaW50ZXJJY29uU2hhcGUgIT0gcG9pbnRlclNoYXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJJY29uU2hhcGUgPSBwb2ludGVyU2hhcGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Qb2ludGVySWNvblNoYXBlICE9IFBvaW50ZXJJY29uLlNUWUxFX0NVU1RPTSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VzdG9tUG9pbnRlckljb24gPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dERldmljZS5zZXRQb2ludGVyU2hhcGUocG9pbnRlclNoYXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVBvaW50ZXJJY29uU2hhcGUgPT0gUG9pbnRlckljb24uU1RZTEVfQ1VTVE9NICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwb2ludGVySWNvbi5lcXVhbHMobUN1c3RvbVBvaW50ZXJJY29uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXN0b21Qb2ludGVySWNvbiA9IHBvaW50ZXJJY29uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RGV2aWNlLnNldEN1c3RvbVBvaW50ZXJJY29uKG1DdXN0b21Qb2ludGVySWNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpID09IE1vdGlvbkV2ZW50LkFDVElPTl9IT1ZFUl9NT1ZFKSB7CkBAIC00MjI4LDcgKzQyODksMTAgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbUF0dGFjaEluZm8ubVVuYnVmZmVyZWREaXNwYXRjaFJlcXVlc3RlZCA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gbVZpZXcuZGlzcGF0Y2hQb2ludGVyRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgZmluYWwgVmlldyBldmVudFRhcmdldCA9CisgICAgICAgICAgICAgICAgICAgIChldmVudC5pc0Zyb21Tb3VyY2UoSW5wdXREZXZpY2UuU09VUkNFX01PVVNFKSAmJiBtQ2FwdHVyaW5nVmlldyAhPSBudWxsKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNhcHR1cmluZ1ZpZXcgOiBtVmlldzsKKyAgICAgICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IGV2ZW50VGFyZ2V0LmRpc3BhdGNoUG9pbnRlckV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgIGlmIChtQXR0YWNoSW5mby5tVW5idWZmZXJlZERpc3BhdGNoUmVxdWVzdGVkICYmICFtVW5idWZmZXJlZElucHV0RGlzcGF0Y2gpIHsKICAgICAgICAgICAgICAgICBtVW5idWZmZXJlZElucHV0RGlzcGF0Y2ggPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChtQ29uc3VtZUJhdGNoZWRJbnB1dFNjaGVkdWxlZCkgewpAQCAtNDM1OCw3ICs0NDIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChERUJVR19UUkFDS0JBTEwpIExvZy52KFRBRywgIlRCIFg9IiArIG1YLnBvc2l0aW9uICsgIiBzdGVwPSIKKyAgICAgICAgICAgIGlmIChERUJVR19UUkFDS0JBTEwpIExvZy52KG1UYWcsICJUQiBYPSIgKyBtWC5wb3NpdGlvbiArICIgc3RlcD0iCiAgICAgICAgICAgICAgICAgICAgICsgbVguc3RlcCArICIgZGlyPSIgKyBtWC5kaXIgKyAiIGFjYz0iICsgbVguYWNjZWxlcmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICsgIiBtb3ZlPSIgKyBldmVudC5nZXRYKCkKICAgICAgICAgICAgICAgICAgICAgKyAiIC8gWT0iICsgbVkucG9zaXRpb24gKyAiIHN0ZXA9IgpAQCAtNDM5NywxMSArNDQ2MSwxMSBAQAogICAgICAgICAgICAgaWYgKGtleWNvZGUgIT0gMCkgewogICAgICAgICAgICAgICAgIGlmIChtb3ZlbWVudCA8IDApIG1vdmVtZW50ID0gLW1vdmVtZW50OwogICAgICAgICAgICAgICAgIGludCBhY2NlbE1vdmVtZW50ID0gKGludCkobW92ZW1lbnQgKiBhY2NlbCk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1RSQUNLQkFMTCkgTG9nLnYoVEFHLCAiTW92ZTogbW92ZW1lbnQ9IiArIG1vdmVtZW50CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RSQUNLQkFMTCkgTG9nLnYobVRhZywgIk1vdmU6IG1vdmVtZW50PSIgKyBtb3ZlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFjY2VsTW92ZW1lbnQ9IiArIGFjY2VsTW92ZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhY2NlbD0iICsgYWNjZWwpOwogICAgICAgICAgICAgICAgIGlmIChhY2NlbE1vdmVtZW50ID4gbW92ZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RSQUNLQkFMTCkgTG9nLnYoVEFHLCAiRGVsaXZlcmluZyBmYWtlIERQQUQ6ICIKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RSQUNLQkFMTCkgTG9nLnYobVRhZywgIkRlbGl2ZXJpbmcgZmFrZSBEUEFEOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrZXljb2RlKTsKICAgICAgICAgICAgICAgICAgICAgbW92ZW1lbnQtLTsKICAgICAgICAgICAgICAgICAgICAgaW50IHJlcGVhdENvdW50ID0gYWNjZWxNb3ZlbWVudCAtIG1vdmVtZW50OwpAQCAtNDQxMSw3ICs0NDc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dERldmljZS5TT1VSQ0VfS0VZQk9BUkQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd2hpbGUgKG1vdmVtZW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfVFJBQ0tCQUxMKSBMb2cudihUQUcsICJEZWxpdmVyaW5nIGZha2UgRFBBRDogIgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfVFJBQ0tCQUxMKSBMb2cudihtVGFnLCAiRGVsaXZlcmluZyBmYWtlIERQQUQ6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtleWNvZGUpOwogICAgICAgICAgICAgICAgICAgICBtb3ZlbWVudC0tOwogICAgICAgICAgICAgICAgICAgICBjdXJUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CkBAIC00NjUzLDcgKzQ3MTcsNyBAQAogICAgICAgICAgICAgICAgIHVwZGF0ZShldmVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlVuZXhwZWN0ZWQgYWN0aW9uOiAiICsgZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkpOworICAgICAgICAgICAgICAgIExvZy53KG1UYWcsICJVbmV4cGVjdGVkIGFjdGlvbjogIiArIGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC01MjkyLDcgKzUzNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dTZXNzaW9uLmRyYWdSZWNpcGllbnRFbnRlcmVkKG1XaW5kb3cpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlVuYWJsZSB0byBub3RlIGRyYWcgdGFyZ2V0IGNoYW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5lKG1UYWcsICJVbmFibGUgdG8gbm90ZSBkcmFnIHRhcmdldCBjaGFuZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtNTMwMCwxMCArNTM2NCwxMCBAQAogICAgICAgICAgICAgICAgIGlmICh3aGF0ID09IERyYWdFdmVudC5BQ1RJT05fRFJPUCkgewogICAgICAgICAgICAgICAgICAgICBtRHJhZ0Rlc2NyaXB0aW9uID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIlJlcG9ydGluZyBkcm9wIHJlc3VsdDogIiArIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaShtVGFnLCAiUmVwb3J0aW5nIGRyb3AgcmVzdWx0OiAiICsgcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dTZXNzaW9uLnJlcG9ydERyb3BSZXN1bHQobVdpbmRvdywgcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlVuYWJsZSB0byByZXBvcnQgZHJvcCByZXN1bHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKG1UYWcsICJVbmFibGUgdG8gcmVwb3J0IGRyb3AgcmVzdWx0Iik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKQEAgLTUzNDYsNiArNTQxMCwxOSBAQAogICAgICAgICBtQXR0YWNoSW5mby5tVHJlZU9ic2VydmVyLmRpc3BhdGNoT25XaW5kb3dTaG93bigpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIGhhbmRsZVJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhJUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpIHsKKyAgICAgICAgQnVuZGxlIGRhdGEgPSBuZXcgQnVuZGxlKCk7CisgICAgICAgIEFycmF5TGlzdDxLZXlib2FyZFNob3J0Y3V0R3JvdXA+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgaWYgKG1WaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1WaWV3LnJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhsaXN0KTsKKyAgICAgICAgfQorICAgICAgICBkYXRhLnB1dFBhcmNlbGFibGVBcnJheUxpc3QoV2luZG93TWFuYWdlci5QQVJDRUxfS0VZX1NIT1JUQ1VUU19BUlJBWSwgbGlzdCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZWNlaXZlci5zZW5kKDAsIGRhdGEpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZ2V0TGFzdFRvdWNoUG9pbnQoUG9pbnQgb3V0TG9jYXRpb24pIHsKICAgICAgICAgb3V0TG9jYXRpb24ueCA9IChpbnQpIG1MYXN0VG91Y2hQb2ludC54OwogICAgICAgICBvdXRMb2NhdGlvbi55ID0gKGludCkgbUxhc3RUb3VjaFBvaW50Lnk7CkBAIC01Mzg5LDE0ICs1NDY2LDE0IEBACiAgICAgICAgICAgICBtVHJhbnNsYXRvci50cmFuc2xhdGVXaW5kb3dMYXlvdXQocGFyYW1zKTsKICAgICAgICAgfQogICAgICAgICBpZiAocGFyYW1zICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChEQkcpIExvZy5kKFRBRywgIldpbmRvd0xheW91dCBpbiBsYXlvdXRXaW5kb3c6IiArIHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoREJHKSBMb2cuZChtVGFnLCAiV2luZG93TGF5b3V0IGluIGxheW91dFdpbmRvdzoiICsgcGFyYW1zKTsKICAgICAgICAgfQogICAgICAgICBtUGVuZGluZ0NvbmZpZ3VyYXRpb24uc2VxID0gMDsKLSAgICAgICAgLy9Mb2cuZChUQUcsICI+Pj4+Pj4gQ0FMTElORyByZWxheW91dCIpOworICAgICAgICAvL0xvZy5kKG1UYWcsICI+Pj4+Pj4gQ0FMTElORyByZWxheW91dCIpOwogICAgICAgICBpZiAocGFyYW1zICE9IG51bGwgJiYgbU9yaWdXaW5kb3dUeXBlICE9IHBhcmFtcy50eXBlKSB7CiAgICAgICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBhcHBzLCBkb24ndCBjcmFzaCBoZXJlLgogICAgICAgICAgICAgaWYgKG1UYXJnZXRTZGtWZXJzaW9uIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5JQ0VfQ1JFQU1fU0FORFdJQ0gpIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiV2luZG93IHR5cGUgY2FuIG5vdCBiZSBjaGFuZ2VkIGFmdGVyICIKKyAgICAgICAgICAgICAgICBTbG9nLncobVRhZywgIldpbmRvdyB0eXBlIGNhbiBub3QgYmUgY2hhbmdlZCBhZnRlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICArICJ0aGUgd2luZG93IGlzIGFkZGVkOyBpZ25vcmluZyBjaGFuZ2Ugb2YgIiArIG1WaWV3KTsKICAgICAgICAgICAgICAgICBwYXJhbXMudHlwZSA9IG1PcmlnV2luZG93VHlwZTsKICAgICAgICAgICAgIH0KQEAgLTU0MDgsNyArNTQ4NSw3IEBACiAgICAgICAgICAgICAgICAgdmlld1Zpc2liaWxpdHksIGluc2V0c1BlbmRpbmcgPyBXaW5kb3dNYW5hZ2VyR2xvYmFsLlJFTEFZT1VUX0lOU0VUU19QRU5ESU5HIDogMCwKICAgICAgICAgICAgICAgICBtV2luRnJhbWUsIG1QZW5kaW5nT3ZlcnNjYW5JbnNldHMsIG1QZW5kaW5nQ29udGVudEluc2V0cywgbVBlbmRpbmdWaXNpYmxlSW5zZXRzLAogICAgICAgICAgICAgICAgIG1QZW5kaW5nU3RhYmxlSW5zZXRzLCBtUGVuZGluZ091dHNldHMsIG1QZW5kaW5nQ29uZmlndXJhdGlvbiwgbVN1cmZhY2UpOwotICAgICAgICAvL0xvZy5kKFRBRywgIjw8PDw8PCBCQUNLIEZST00gcmVsYXlvdXQiKTsKKyAgICAgICAgLy9Mb2cuZChtVGFnLCAiPDw8PDw8IEJBQ0sgRlJPTSByZWxheW91dCIpOwogICAgICAgICBpZiAocmVzdG9yZSkgewogICAgICAgICAgICAgcGFyYW1zLnJlc3RvcmUoKTsKICAgICAgICAgfQpAQCAtNTQ1NSw3ICs1NTMyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gYnkgZ2V0QXVkaW9NYW5hZ2VyKCkgd2hlbiBtVmlldyBpcyBudWxsCi0gICAgICAgICAgICBMb2cuZShUQUcsICJGQVRBTCBFWENFUFRJT04gd2hlbiBhdHRlbXB0aW5nIHRvIHBsYXkgc291bmQgZWZmZWN0OiAiICsgZSk7CisgICAgICAgICAgICBMb2cuZShtVGFnLCAiRkFUQUwgRVhDRVBUSU9OIHdoZW4gYXR0ZW1wdGluZyB0byBwbGF5IHNvdW5kIGVmZmVjdDogIiArIGUpOwogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU1MDMsNiArNTU4MCw4IEBACiAgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4obVByb2Nlc3NJbnB1dEV2ZW50c1NjaGVkdWxlZCk7CiAgICAgICAgIHdyaXRlci5wcmludChpbm5lclByZWZpeCk7IHdyaXRlci5wcmludCgibVRyYXZlcnNhbFNjaGVkdWxlZD0iKTsKICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnQobVRyYXZlcnNhbFNjaGVkdWxlZCk7CisgICAgICAgIHdyaXRlci5wcmludChpbm5lclByZWZpeCk7IHdyaXRlci5wcmludCgibUlzQW1iaWVudE1vZGU9Iik7CisgICAgICAgICAgICAgICAgd3JpdGVyLnByaW50KG1Jc0FtYmllbnRNb2RlKTsKICAgICAgICAgaWYgKG1UcmF2ZXJzYWxTY2hlZHVsZWQpIHsKICAgICAgICAgICAgIHdyaXRlci5wcmludCgiIChiYXJyaWVyPSIpOyB3cml0ZXIucHJpbnQobVRyYXZlcnNhbEJhcnJpZXIpOyB3cml0ZXIucHJpbnRsbigiKSIpOwogICAgICAgICB9IGVsc2UgewpAQCAtNTU3Niw3ICs1NjU1LDcgQEAKICAgICAgICAgaWYgKCFtSXNEcmF3aW5nKSB7CiAgICAgICAgICAgICBkZXN0cm95SGFyZHdhcmVSZW5kZXJlcigpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiQXR0ZW1wdGluZyB0byBkZXN0cm95IHRoZSB3aW5kb3cgd2hpbGUgZHJhd2luZyFcbiIgKworICAgICAgICAgICAgTG9nLmUobVRhZywgIkF0dGVtcHRpbmcgdG8gZGVzdHJveSB0aGUgd2luZG93IHdoaWxlIGRyYXdpbmchXG4iICsKICAgICAgICAgICAgICAgICAgICAgIiAgd2luZG93PSIgKyB0aGlzICsgIiwgdGl0bGU9IiArIG1XaW5kb3dBdHRyaWJ1dGVzLmdldFRpdGxlKCkpOwogICAgICAgICB9CiAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoTVNHX0RJRSk7CkBAIC01NTg1LDcgKzU2NjQsNyBAQAogCiAgICAgdm9pZCBkb0RpZSgpIHsKICAgICAgICAgY2hlY2tUaHJlYWQoKTsKLSAgICAgICAgaWYgKExPQ0FMX0xPR1YpIExvZy52KFRBRywgIkRJRSBpbiAiICsgdGhpcyArICIgb2YgIiArIG1TdXJmYWNlKTsKKyAgICAgICAgaWYgKExPQ0FMX0xPR1YpIExvZy52KG1UYWcsICJESUUgaW4gIiArIHRoaXMgKyAiIG9mICIgKyBtU3VyZmFjZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgaWYgKG1SZW1vdmVkKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTY3OCw3ICs1NzU3LDcgQEAKICAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFJlc2l6ZWQoUmVjdCBmcmFtZSwgUmVjdCBvdmVyc2Nhbkluc2V0cywgUmVjdCBjb250ZW50SW5zZXRzLAogICAgICAgICAgICAgUmVjdCB2aXNpYmxlSW5zZXRzLCBSZWN0IHN0YWJsZUluc2V0cywgUmVjdCBvdXRzZXRzLCBib29sZWFuIHJlcG9ydERyYXcsCiAgICAgICAgICAgICBDb25maWd1cmF0aW9uIG5ld0NvbmZpZywgUmVjdCBiYWNrRHJvcEZyYW1lKSB7Ci0gICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KFRBRywgIlJlc2l6aW5nICIgKyB0aGlzICsgIjogZnJhbWU9IiArIGZyYW1lLnRvU2hvcnRTdHJpbmcoKQorICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBMb2cudihtVGFnLCAiUmVzaXppbmcgIiArIHRoaXMgKyAiOiBmcmFtZT0iICsgZnJhbWUudG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgKyAiIGNvbnRlbnRJbnNldHM9IiArIGNvbnRlbnRJbnNldHMudG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgKyAiIHZpc2libGVJbnNldHM9IiArIHZpc2libGVJbnNldHMudG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgKyAiIHJlcG9ydERyYXc9IiArIHJlcG9ydERyYXcKQEAgLTU3MTYsNyArNTc5NSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hNb3ZlZChpbnQgbmV3WCwgaW50IG5ld1kpIHsKLSAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgTG9nLnYoVEFHLCAiV2luZG93IG1vdmVkICIgKyB0aGlzICsgIjogbmV3WD0iICsgbmV3WCArICIgbmV3WT0iICsgbmV3WSk7CisgICAgICAgIGlmIChERUJVR19MQVlPVVQpIExvZy52KG1UYWcsICJXaW5kb3cgbW92ZWQgIiArIHRoaXMgKyAiOiBuZXdYPSIgKyBuZXdYICsgIiBuZXdZPSIgKyBuZXdZKTsKICAgICAgICAgaWYgKG1UcmFuc2xhdG9yICE9IG51bGwpIHsKICAgICAgICAgICAgIFBvaW50RiBwb2ludCA9IG5ldyBQb2ludEYobmV3WCwgbmV3WSk7CiAgICAgICAgICAgICBtVHJhbnNsYXRvci50cmFuc2xhdGVQb2ludEluU2NyZWVuVG9BcHBXaW5kb3cocG9pbnQpOwpAQCAtNjI3Myw2ICs2MzUyLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBkaXNwYXRjaFJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhJUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpIHsKKyAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfUkVRVUVTVF9LRVlCT0FSRF9TSE9SVENVVFMsIHJlY2VpdmVyKS5zZW5kVG9UYXJnZXQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBQb3N0IGEgY2FsbGJhY2sgdG8gc2VuZCBhCiAgICAgICoge0BsaW5rIEFjY2Vzc2liaWxpdHlFdmVudCNUWVBFX1dJTkRPV19DT05URU5UX0NIQU5HRUR9IGV2ZW50LgpAQCAtNjYzMyw3ICs2NzE2LDcgQEAKICAgICB9CiAKICAgICB2b2lkIGNoYW5nZUNhbnZhc09wYWNpdHkoYm9vbGVhbiBvcGFxdWUpIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiY2hhbmdlQ2FudmFzT3BhY2l0eTogb3BhcXVlPSIgKyBvcGFxdWUpOworICAgICAgICBMb2cuZChtVGFnLCAiY2hhbmdlQ2FudmFzT3BhY2l0eTogb3BhcXVlPSIgKyBvcGFxdWUpOwogICAgICAgICBpZiAobUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbUF0dGFjaEluZm8ubUhhcmR3YXJlUmVuZGVyZXIuc2V0T3BhcXVlKG9wYXF1ZSk7CiAgICAgICAgIH0KQEAgLTY4NDYsNiArNjkyOSwxNCBAQAogICAgICAgICAgICAgICAgIHZpZXdBbmNlc3Rvci5kaXNwYXRjaFdpbmRvd1Nob3duKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcmVxdWVzdEFwcEtleWJvYXJkU2hvcnRjdXRzKElSZXN1bHRSZWNlaXZlciByZWNlaXZlcikgeworICAgICAgICAgIFZpZXdSb290SW1wbCB2aWV3QW5jZXN0b3IgPSBtVmlld0FuY2VzdG9yLmdldCgpOworICAgICAgICAgIGlmICh2aWV3QW5jZXN0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgdmlld0FuY2VzdG9yLmRpc3BhdGNoUmVxdWVzdEtleWJvYXJkU2hvcnRjdXRzKHJlY2VpdmVyKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIENhbGxlZEZyb21Xcm9uZ1RocmVhZEV4Y2VwdGlvbiBleHRlbmRzIEFuZHJvaWRSdW50aW1lRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvdy5qYXZhCmluZGV4IDdhMzU5ZTcuLmQ4OTM2OWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3cuamF2YQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuc2Vzc2lvbi5NZWRpYUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwpAQCAtNDEsNiArNDIsOCBAQAogaW1wb3J0IGFuZHJvaWQudHJhbnNpdGlvbi5UcmFuc2l0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogLyoqCiAgKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhIHRvcC1sZXZlbCB3aW5kb3cgbG9vayBhbmQgYmVoYXZpb3IgcG9saWN5LiAgQW4KICAqIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIHRvcC1sZXZlbCB2aWV3IGFkZGVkIHRvIHRoZQpAQCAtMjQ3LDEyICsyNTAsMzAgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9QRVJUWV9IQVJEV0FSRV9VSSA9ICJwZXJzaXN0LnN5cy51aS5odyI7CiAKKyAgICAvKioKKyAgICAgKiBGbGFnIGZvciBsZXR0aW5nIHRoZSB0aGVtZSBkcml2ZSB0aGUgY29sb3Igb2YgdGhlIHdpbmRvdyBjYXB0aW9uIGNvbnRyb2xzLiBVc2Ugd2l0aAorICAgICAqIHtAbGluayAjc2V0RGVjb3JDYXB0aW9uU2hhZGUoaW50KX0uIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVDT1JfQ0FQVElPTl9TSEFERV9BVVRPID0gMDsKKyAgICAvKioKKyAgICAgKiBGbGFnIGZvciBzZXR0aW5nIGxpZ2h0LWNvbG9yIGNvbnRyb2xzIG9uIHRoZSB3aW5kb3cgY2FwdGlvbi4gVXNlIHdpdGgKKyAgICAgKiB7QGxpbmsgI3NldERlY29yQ2FwdGlvblNoYWRlKGludCl9LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFQ09SX0NBUFRJT05fU0hBREVfTElHSFQgPSAxOworICAgIC8qKgorICAgICAqIEZsYWcgZm9yIHNldHRpbmcgZGFyay1jb2xvciBjb250cm9scyBvbiB0aGUgd2luZG93IGNhcHRpb24uIFVzZSB3aXRoCisgICAgICoge0BsaW5rICNzZXREZWNvckNhcHRpb25TaGFkZShpbnQpfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERUNPUl9DQVBUSU9OX1NIQURFX0RBUksgPSAyOworCiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwogCiAgICAgcHJpdmF0ZSBUeXBlZEFycmF5IG1XaW5kb3dTdHlsZTsKICAgICBwcml2YXRlIENhbGxiYWNrIG1DYWxsYmFjazsKICAgICBwcml2YXRlIE9uV2luZG93RGlzbWlzc2VkQ2FsbGJhY2sgbU9uV2luZG93RGlzbWlzc2VkQ2FsbGJhY2s7CiAgICAgcHJpdmF0ZSBXaW5kb3dDb250cm9sbGVyQ2FsbGJhY2sgbVdpbmRvd0NvbnRyb2xsZXJDYWxsYmFjazsKKyAgICBwcml2YXRlIFJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyIG1SZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lcjsKKyAgICBwcml2YXRlIFJlY3QgbVJlc3RyaWN0ZWRDYXB0aW9uQXJlYVJlY3Q7CiAgICAgcHJpdmF0ZSBXaW5kb3dNYW5hZ2VyIG1XaW5kb3dNYW5hZ2VyOwogICAgIHByaXZhdGUgSUJpbmRlciBtQXBwVG9rZW47CiAgICAgcHJpdmF0ZSBTdHJpbmcgbUFwcE5hbWU7CkBAIC01MzcsNiArNTU4LDE1IEBACiAgICAgICAgICAqIEBwYXJhbSBtb2RlIFRoZSBtb2RlIHRoYXQgd2FzIGp1c3QgZmluaXNoZWQuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbk1vZGVGaW5pc2hlZChBY3Rpb25Nb2RlIG1vZGUpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiBLZXlib2FyZCBTaG9ydGN1dHMgYXJlIHJlcXVlc3RlZCBmb3IgdGhlIGN1cnJlbnQgd2luZG93LgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBsaXN0IHRvIHBvcHVsYXRlIHdpdGggc2hvcnRjdXRzLgorICAgICAgICAgKiBAcGFyYW0gbWVudSBUaGUgY3VycmVudCBtZW51LCB3aGljaCBtYXkgYmUgbnVsbC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKAorICAgICAgICAgICAgICAgIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiBkYXRhLCBATnVsbGFibGUgTWVudSBtZW51KTsKICAgICB9CiAKICAgICAvKiogQGhpZGUgKi8KQEAgLTU1MiwxOSArNTgyLDI4IEBACiAgICAgLyoqIEBoaWRlICovCiAgICAgcHVibGljIGludGVyZmFjZSBXaW5kb3dDb250cm9sbGVyQ2FsbGJhY2sgewogICAgICAgICAvKioKLSAgICAgICAgICogQ2FsbGVkIHRvIG1vdmUgdGhlIHdpbmRvdyBhbmQgaXRzIGFjdGl2aXR5L3Rhc2sgdG8gYSBkaWZmZXJlbnQgc3RhY2sgY29udGFpbmVyLgotICAgICAgICAgKiBGb3IgZXhhbXBsZSwgYSB3aW5kb3cgY2FuIG1vdmUgYmV0d2VlbgotICAgICAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQjRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUR9IHN0YWNrIGFuZAotICAgICAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQjRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEfSBzdGFjay4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHN0YWNrSWQgc3RhY2sgSWQgdG8gY2hhbmdlIHRvLgorICAgICAgICAgKiBNb3ZlcyB0aGUgYWN0aXZpdHkgZnJvbQorICAgICAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQjRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEfSB0bworICAgICAgICAgKiB7QGxpbmsgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQjRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUR9IHN0YWNrLgogICAgICAgICAgKi8KLSAgICAgICAgdm9pZCBjaGFuZ2VXaW5kb3dTdGFjayhpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKKyAgICAgICAgdm9pZCBleGl0RnJlZWZvcm1Nb2RlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbjsKIAogICAgICAgICAvKiogUmV0dXJucyB0aGUgY3VycmVudCBzdGFjayBJZCBmb3IgdGhlIHdpbmRvdy4gKi8KICAgICAgICAgaW50IGdldFdpbmRvd1N0YWNrSWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENhbGxiYWNrIGZvciBjbGllbnRzIHRoYXQgd2FudCB0byBiZSBhd2FyZSBvZiB3aGVyZSBjYXB0aW9uIGRyYXdzIGNvbnRlbnQuCisgICAgICovCisgICAgcHVibGljIGludGVyZmFjZSBSZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lciB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYXJlYSB3aGVyZSBjYXB0aW9uIGRyYXdzIGNvbnRlbnQgY2hhbmdlcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHJlY3QgVGhlIGFyZWEgd2hlcmUgY2FwdGlvbiBjb250ZW50IGlzIHBvc2l0aW9uZWQsIHJlbGF0aXZlIHRvIHRoZSB0b3Agdmlldy4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgb25SZXN0cmljdGVkQ2FwdGlvbkFyZWFDaGFuZ2VkKFJlY3QgcmVjdCk7CisgICAgfQorCiAgICAgcHVibGljIFdpbmRvdyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtRmVhdHVyZXMgPSBtTG9jYWxGZWF0dXJlcyA9IGdldERlZmF1bHRGZWF0dXJlcyhjb250ZXh0KTsKQEAgLTc3OCw2ICs4MTcsMTYgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBTZXQgYSBjYWxsYmFjayBmb3IgY2hhbmdlcyBvZiBhcmVhIHdoZXJlIGNhcHRpb24gd2lsbCBkcmF3IGl0cyBjb250ZW50LgorICAgICAqCisgICAgICogQHBhcmFtIGxpc3RlbmVyIENhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgYXJlYSBjaGFuZ2VzLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyKFJlc3RyaWN0ZWRDYXB0aW9uQXJlYUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1SZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgICAgICBtUmVzdHJpY3RlZENhcHRpb25BcmVhUmVjdCA9IGxpc3RlbmVyICE9IG51bGwgPyBuZXcgUmVjdCgpIDogbnVsbDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBUYWtlIG93bmVyc2hpcCBvZiB0aGlzIHdpbmRvdydzIHN1cmZhY2UuICBUaGUgd2luZG93J3MgdmlldyBoaWVyYXJjaHkKICAgICAgKiB3aWxsIG5vIGxvbmdlciBkcmF3IGludG8gdGhlIHN1cmZhY2UsIHRob3VnaCBpdCB3aWxsIG90aGVyd2lzZSBjb250aW51ZQogICAgICAqIHRvIG9wZXJhdGUgKHN1Y2ggYXMgZm9yIHJlY2VpdmluZyBpbnB1dCBldmVudHMpLiAgVGhlIGdpdmVuIFN1cmZhY2VIb2xkZXIKQEAgLTIwNDAsNSArMjA4OSwzNSBAQAogICAgICAgICByZXR1cm4gbU92ZXJsYXlXaXRoRGVjb3JDYXB0aW9uOwogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIG5vdGlmeVJlc3RyaWN0ZWRDYXB0aW9uQXJlYUNhbGxiYWNrKGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKKyAgICAgICAgaWYgKG1SZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBtUmVzdHJpY3RlZENhcHRpb25BcmVhUmVjdC5zZXQobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKyAgICAgICAgICAgIG1SZXN0cmljdGVkQ2FwdGlvbkFyZWFMaXN0ZW5lci5vblJlc3RyaWN0ZWRDYXB0aW9uQXJlYUNoYW5nZWQoCisgICAgICAgICAgICAgICAgICAgIG1SZXN0cmljdGVkQ2FwdGlvbkFyZWFSZWN0KTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8qKgorICAgICAqIFNldCB3aGF0IGNvbG9yIHNob3VsZCB0aGUgY2FwdGlvbiBjb250cm9scyBiZS4gQnkgZGVmYXVsdCB0aGUgc3lzdGVtIHdpbGwgdHJ5IHRvIGRldGVybWluZQorICAgICAqIHRoZSBjb2xvciBmcm9tIHRoZSB0aGVtZS4gWW91IGNhbiBvdmVyd3JpdGUgdGhpcyBieSB1c2luZyB7QGxpbmsgI0RFQ09SX0NBUFRJT05fU0hBREVfREFSS30KKyAgICAgKiBvciB7QGxpbmsgI0RFQ09SX0NBUFRJT05fU0hBREVfREFSS30uCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0RGVjb3JDYXB0aW9uU2hhZGUoaW50IGRlY29yQ2FwdGlvblNoYWRlKTsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZHJhd2FibGUgdGhhdCBpcyBkcmF3biB1bmRlcm5lYXRoIHRoZSBjYXB0aW9uIGR1cmluZyB0aGUgcmVzaXppbmcuCisgICAgICoKKyAgICAgKiBEdXJpbmcgdGhlIHJlc2l6aW5nIHRoZSBjYXB0aW9uIG1pZ2h0IG5vdCBiZSBkcmF3biBmYXN0IGVub3VnaCB0byBtYXRjaCB0aGUgbmV3IGRpbWVuc2lvbnMuCisgICAgICogVGhlcmUgaXMgYSBzZWNvbmQgY2FwdGlvbiBkcmF3biB1bmRlcm5lYXRoIGl0IHRoYXQgd2lsbCBiZSBmYXN0IGVub3VnaC4gQnkgZGVmYXVsdCB0aGUKKyAgICAgKiBjYXB0aW9uIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIHRoZW1lLiBZb3UgY2FuIHByb3ZpZGUgYSBkcmF3YWJsZSwgdGhhdCB3aWxsIGJlIGRyYXduIGluc3RlYWQKKyAgICAgKiB0byBiZXR0ZXIgbWF0Y2ggeW91ciBhcHBsaWNhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRSZXNpemluZ0NhcHRpb25EcmF3YWJsZShEcmF3YWJsZSBkcmF3YWJsZSk7CisKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiB0aGUgYWN0aXZpdHkgY2hhbmdlcyBmcm9tIGZ1bGxzY3JlZW4gbW9kZSB0byBtdWx0aS13aW5kb3cgbW9kZSBhbmQgdmlzYS12ZXJzYS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uTXVsdGlXaW5kb3dNb2RlQ2hhbmdlZCgpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dDYWxsYmFja1dyYXBwZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93Q2FsbGJhY2tXcmFwcGVyLmphdmEKaW5kZXggOGNlMWY4Yy4uYmVkNzRlOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dDYWxsYmFja1dyYXBwZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd0NhbGxiYWNrV3JhcHBlci5qYXZhCkBAIC0xOSw2ICsxOSw4IEBACiAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogLyoqCiAgKiBBIHNpbXBsZSBkZWNvcmF0b3Igc3R1YiBmb3IgV2luZG93LkNhbGxiYWNrIHRoYXQgcGFzc2VzIHRocm91Z2ggYW55IGNhbGxzCiAgKiB0byB0aGUgd3JhcHBlZCBpbnN0YW5jZSBhcyBhIGJhc2UgaW1wbGVtZW50YXRpb24uIENhbGwgc3VwZXIuZm9vKCkgdG8gY2FsbCBpbnRvCkBAIC0xNTAsNSArMTUyLDEwIEBACiAgICAgcHVibGljIHZvaWQgb25BY3Rpb25Nb2RlRmluaXNoZWQoQWN0aW9uTW9kZSBtb2RlKSB7CiAgICAgICAgIG1XcmFwcGVkLm9uQWN0aW9uTW9kZUZpbmlzaGVkKG1vZGUpOwogICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiBkYXRhLCBNZW51IG1lbnUpIHsKKyAgICAgICAgbVdyYXBwZWQub25Qcm92aWRlS2V5Ym9hcmRTaG9ydGN1dHMoZGF0YSwgbWVudSk7CisgICAgfQogfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlci5qYXZhCmluZGV4IGQ2YmMyN2MuLjc3MmVlZWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlci5qYXZhCkBAIC0yOSw2ICsyOSw4IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKIAogLyoqCiAgKiBUaGUgaW50ZXJmYWNlIHRoYXQgYXBwcyB1c2UgdG8gdGFsayB0byB0aGUgd2luZG93IG1hbmFnZXIuCkBAIC0xMTgsNiArMTIwLDM0IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVmlld0ltbWVkaWF0ZShWaWV3IHZpZXcpOwogCisgICAgLyoqCisgICAgICogVXNlZCB0byBhc3luY2hyb25vdXNseSByZXF1ZXN0IEtleWJvYXJkIFNob3J0Y3V0cyBmcm9tIHRoZSBmb2N1c2VkIHdpbmRvdy4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIGludGVyZmFjZSBLZXlib2FyZFNob3J0Y3V0c1JlY2VpdmVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxiYWNrIHVzZWQgd2hlbiB0aGUgZm9jdXNlZCB3aW5kb3cga2V5Ym9hcmQgc2hvcnRjdXRzIGFyZSByZWFkeSB0byBiZSBkaXNwbGF5ZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSByZXN1bHQgVGhlIGtleWJvYXJkIHNob3J0Y3V0cyB0byBiZSBkaXNwbGF5ZWQuCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uS2V5Ym9hcmRTaG9ydGN1dHNSZWNlaXZlZChMaXN0PEtleWJvYXJkU2hvcnRjdXRHcm91cD4gcmVzdWx0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkNFTF9LRVlfU0hPUlRDVVRTX0FSUkFZID0gInNob3J0Y3V0c19hcnJheSI7CisKKyAgICAvKioKKyAgICAgKiBSZXF1ZXN0IGZvciBrZXlib2FyZCBzaG9ydGN1dHMgdG8gYmUgcmV0cmlldmVkIGFzeW5jaHJvbm91c2x5LgorICAgICAqCisgICAgICogQHBhcmFtIHJlY2VpdmVyIFRoZSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgcmVzdWx0IGlzIHJlYWR5LgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZXF1ZXN0QXBwS2V5Ym9hcmRTaG9ydGN1dHMoZmluYWwgS2V5Ym9hcmRTaG9ydGN1dHNSZWNlaXZlciByZWNlaXZlcik7CisKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIExheW91dFBhcmFtcyBleHRlbmRzIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKICAgICAgICAgLyoqCiAgICAgICAgICAqIFggcG9zaXRpb24gZm9yIHRoaXMgd2luZG93LiAgV2l0aCB0aGUgZGVmYXVsdCBncmF2aXR5IGl0IGlzIGlnbm9yZWQuCkBAIC0xMTcxLDYgKzEyMDEsMjMgQEAKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfRkxBR19GT1JDRV9ERUNPUl9WSUVXX1ZJU0lCSUxJVFkgPSAweDAwMDA0MDAwOwogCisgICAgICAgIC8qKgorICAgICAgICAgKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3aW5kb3cgaXMgbm90IGV4cGVjdGVkIHRvIGJlIHJlcGxhY2VkIGFjcm9zcworICAgICAgICAgKiBjb25maWd1cmF0aW9uIGNoYW5nZSB0cmlnZ2VyZWQgYWN0aXZpdHkgcmVsYXVuY2hlcy4gSW4gZ2VuZXJhbCB0aGUgV2luZG93TWFuYWdlcgorICAgICAgICAgKiBleHBlY3RzIFdpbmRvd3MgdG8gYmUgcmVwbGFjZWQgYWZ0ZXIgcmVsYXVuY2gsIGFuZCB0aHVzIGl0IHdpbGwgcHJlc2VydmUgdGhlaXIgc3VyZmFjZXMKKyAgICAgICAgICogdW50aWwgdGhlIHJlcGxhY2VtZW50IGlzIHJlYWR5IHRvIHNob3cgaW4gb3JkZXIgdG8gcHJldmVudCB2aXN1YWwgZ2xpdGNoLiBIb3dldmVyCisgICAgICAgICAqIHNvbWUgd2luZG93cywgc3VjaCBhcyBQb3B1cFdpbmRvd3MgZXhwZWN0IHRvIGJlIGNsZWFyZWQgYWNyb3NzIGNvbmZpZ3VyYXRpb24gY2hhbmdlLAorICAgICAgICAgKiBhbmQgdGh1cyBzaG91bGQgaGludCB0byB0aGUgV2luZG93TWFuYWdlciB0aGF0IGl0IHNob3VsZCBub3Qgd2FpdCBmb3IgYSByZXBsYWNlbWVudC4KKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSSVZBVEVfRkxBR19XSUxMX05PVF9SRVBMQUNFX09OX1JFTEFVTkNIID0gMHgwMDAwODAwMDsKKworICAgICAgICAvKioKKyAgICAgICAgICogRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgY2hpbGQgd2luZG93IHNob3VsZCBhbHdheXMgYmUgbGFpZC1vdXQgaW4gdGhlIHBhcmVudAorICAgICAgICAgKiBmcmFtZSByZWdhcmRsZXNzIG9mIHRoZSBjdXJyZW50IHdpbmRvd2luZyBtb2RlIGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAqIEBoaWRlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUklWQVRFX0ZMQUdfTEFZT1VUX0NISUxEX1dJTkRPV19JTl9QQVJFTlRfRlJBTUUgPSAweDAwMDEwMDAwOwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBDb250cm9sIGZsYWdzIHRoYXQgYXJlIHByaXZhdGUgdG8gdGhlIHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VySW1wbC5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9XaW5kb3dNYW5hZ2VySW1wbC5qYXZhCmluZGV4IDk4ZTlmNTQuLjZlMTE2NzEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlckltcGwuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXJJbXBsLmphdmEKQEAgLTE3LDcgKzE3LDE1IEBACiBwYWNrYWdlIGFuZHJvaWQudmlldzsKIAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLklSZXN1bHRSZWNlaXZlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogUHJvdmlkZXMgbG93LWxldmVsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgc3lzdGVtIHdpbmRvdyBtYW5hZ2VyIGZvcgpAQCAtMTE3LDYgKzEyNSwyMyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RBcHBLZXlib2FyZFNob3J0Y3V0cyhmaW5hbCBLZXlib2FyZFNob3J0Y3V0c1JlY2VpdmVyIHJlY2VpdmVyKSB7CisgICAgICAgIElSZXN1bHRSZWNlaXZlciByZXN1bHRSZWNlaXZlciA9IG5ldyBJUmVzdWx0UmVjZWl2ZXIuU3R1YigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgc2VuZChpbnQgcmVzdWx0Q29kZSwgQnVuZGxlIHJlc3VsdERhdGEpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiByZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RGF0YS5nZXRQYXJjZWxhYmxlQXJyYXlMaXN0KFBBUkNFTF9LRVlfU0hPUlRDVVRTX0FSUkFZKTsKKyAgICAgICAgICAgICAgICByZWNlaXZlci5vbktleWJvYXJkU2hvcnRjdXRzUmVjZWl2ZWQocmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKQorICAgICAgICAgICAgICAgIC5yZXF1ZXN0QXBwS2V5Ym9hcmRTaG9ydGN1dHMocmVzdWx0UmVjZWl2ZXIpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIERpc3BsYXkgZ2V0RGVmYXVsdERpc3BsYXkoKSB7CiAgICAgICAgIHJldHVybiBtRGlzcGxheTsKICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L1dpbmRvd01hbmFnZXJQb2xpY3kuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhCmluZGV4IGIxYTg0NzkuLmE3OGI1NmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvV2luZG93TWFuYWdlclBvbGljeS5qYXZhCkBAIC00NDYsNiArNDQ2LDEzIEBACiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgdm9pZCBzd2l0Y2hLZXlib2FyZExheW91dChpbnQgZGV2aWNlSWQsIGludCBkaXJlY3Rpb24pOwogCisgICAgICAgIC8qKgorICAgICAgICAgKiBTd2l0Y2ggdGhlIGlucHV0IG1ldGhvZCwgdG8gYmUgcHJlY2lzZSwgaW5wdXQgbWV0aG9kIHN1YnR5cGUuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBmb3J3YXJkRGlyZWN0aW9uIHtAY29kZSB0cnVlfSB0byByb3RhdGUgaW4gYSBmb3J3YXJkIGRpcmVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIHN3aXRjaElucHV0TWV0aG9kKGJvb2xlYW4gZm9yd2FyZERpcmVjdGlvbik7CisKICAgICAgICAgcHVibGljIHZvaWQgc2h1dGRvd24oYm9vbGVhbiBjb25maXJtKTsKICAgICAgICAgcHVibGljIHZvaWQgcmVib290U2FmZU1vZGUoYm9vbGVhbiBjb25maXJtKTsKIApAQCAtNjE2LDE0ICs2MjMsMTYgQEAKICAgICAgKiBkZWNvcmF0aW9ucyB0aGF0IGNhbiBuZXZlciBiZSByZW1vdmVkLiAgVGhhdCBpcywgc3lzdGVtIGJhciBvcgogICAgICAqIGJ1dHRvbiBiYXIuCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXROb25EZWNvckRpc3BsYXlXaWR0aChpbnQgZnVsbFdpZHRoLCBpbnQgZnVsbEhlaWdodCwgaW50IHJvdGF0aW9uKTsKKyAgICBwdWJsaWMgaW50IGdldE5vbkRlY29yRGlzcGxheVdpZHRoKGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24sCisgICAgICAgICAgICBpbnQgdWlNb2RlKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiB0aGUgZGlzcGxheSBoZWlnaHQgYXZhaWxhYmxlIGFmdGVyIGV4Y2x1ZGluZyBhbnkgc2NyZWVuCiAgICAgICogZGVjb3JhdGlvbnMgdGhhdCBjYW4gbmV2ZXIgYmUgcmVtb3ZlZC4gIFRoYXQgaXMsIHN5c3RlbSBiYXIgb3IKICAgICAgKiBidXR0b24gYmFyLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24pOworICAgIHB1YmxpYyBpbnQgZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24sCisgICAgICAgICAgICBpbnQgdWlNb2RlKTsKIAogICAgIC8qKgogICAgICAqIFJldHVybiB0aGUgYXZhaWxhYmxlIHNjcmVlbiB3aWR0aCB0aGF0IHdlIHNob3VsZCByZXBvcnQgZm9yIHRoZQpAQCAtNjMxLDcgKzY0MCw4IEBACiAgICAgICoge0BsaW5rICNnZXROb25EZWNvckRpc3BsYXlXaWR0aChpbnQsIGludCwgaW50KX07IGl0IG1heSBiZSBzbWFsbGVyIHRoYW4KICAgICAgKiB0aGF0IHRvIGFjY291bnQgZm9yIG1vcmUgdHJhbnNpZW50IGRlY29yYXRpb24gbGlrZSBhIHN0YXR1cyBiYXIuCiAgICAgICovCi0gICAgcHVibGljIGludCBnZXRDb25maWdEaXNwbGF5V2lkdGgoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbik7CisgICAgcHVibGljIGludCBnZXRDb25maWdEaXNwbGF5V2lkdGgoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbiwKKyAgICAgICAgICAgIGludCB1aU1vZGUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIHRoZSBhdmFpbGFibGUgc2NyZWVuIGhlaWdodCB0aGF0IHdlIHNob3VsZCByZXBvcnQgZm9yIHRoZQpAQCAtNjM5LDcgKzY0OSw4IEBACiAgICAgICoge0BsaW5rICNnZXROb25EZWNvckRpc3BsYXlIZWlnaHQoaW50LCBpbnQsIGludCl9OyBpdCBtYXkgYmUgc21hbGxlciB0aGFuCiAgICAgICogdGhhdCB0byBhY2NvdW50IGZvciBtb3JlIHRyYW5zaWVudCBkZWNvcmF0aW9uIGxpa2UgYSBzdGF0dXMgYmFyLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q29uZmlnRGlzcGxheUhlaWdodChpbnQgZnVsbFdpZHRoLCBpbnQgZnVsbEhlaWdodCwgaW50IHJvdGF0aW9uKTsKKyAgICBwdWJsaWMgaW50IGdldENvbmZpZ0Rpc3BsYXlIZWlnaHQoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbiwKKyAgICAgICAgICAgIGludCB1aU1vZGUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIHdpbmRvdyBpcyBmb3JjaWJseSBoaWRpbmcgYWxsIHdpbmRvd3MgZXhjZXB0IHdpbmRvd3Mgd2l0aApAQCAtODU0LDExICs4NjUsMTEgQEAKICAgICAgKiBAcGFyYW0gaXNEZWZhdWx0RGlzcGxheSB0cnVlIGlmIHdpbmRvdyBpcyBvbiB7QGxpbmsgRGlzcGxheSNERUZBVUxUX0RJU1BMQVl9LgogICAgICAqIEBwYXJhbSBkaXNwbGF5V2lkdGggVGhlIGN1cnJlbnQgZnVsbCB3aWR0aCBvZiB0aGUgc2NyZWVuLgogICAgICAqIEBwYXJhbSBkaXNwbGF5SGVpZ2h0IFRoZSBjdXJyZW50IGZ1bGwgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uCi0gICAgICogQHBhcmFtIGRpc3BsYXlSb3RhdGlvbiBUaGUgY3VycmVudCByb3RhdGlvbiBiZWluZyBhcHBsaWVkIHRvIHRoZSBiYXNlCi0gICAgICogd2luZG93LgorICAgICAqIEBwYXJhbSBkaXNwbGF5Um90YXRpb24gVGhlIGN1cnJlbnQgcm90YXRpb24gYmVpbmcgYXBwbGllZCB0byB0aGUgYmFzZSB3aW5kb3cuCisgICAgICogQHBhcmFtIHVpTW9kZSBUaGUgY3VycmVudCB1aU1vZGUgaW4gY29uZmlndXJhdGlvbi4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBiZWdpbkxheW91dEx3KGJvb2xlYW4gaXNEZWZhdWx0RGlzcGxheSwgaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzcGxheVJvdGF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXNwbGF5Um90YXRpb24sIGludCB1aU1vZGUpOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgYm90dG9tLW1vc3QgbGF5ZXIgb2YgdGhlIHN5c3RlbSBkZWNvciwgYWJvdmUgd2hpY2ggbm8gcG9saWN5IGRlY29yIHNob3VsZApAQCAtMTMxNyw0ICsxMzI4LDE1IEBACiAgICAgICogQHBhcmFtIGZhZGVvdXREdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIGV4aXQgYW5pbWF0aW9uLCBpbiBtaWxsaXNlY29uZHMKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzdGFydEtleWd1YXJkRXhpdEFuaW1hdGlvbihsb25nIHN0YXJ0VGltZSwgbG9uZyBmYWRlb3V0RHVyYXRpb24pOworCisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlcyB0aGUgc3RhYmxlIGluc2V0cyB3aXRob3V0IHJ1bm5pbmcgYSBsYXlvdXQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGlzcGxheVJvdGF0aW9uIHRoZSBjdXJyZW50IGRpc3BsYXkgcm90YXRpb24KKyAgICAgKiBAcGFyYW0gb3V0SW5zZXRzIHRoZSBpbnNldHMgdG8gcmV0dXJuCisgICAgICogQHBhcmFtIGRpc3BsYXlXaWR0aCB0aGUgY3VycmVudCBkaXNwbGF5IHdpZHRoCisgICAgICogQHBhcmFtIGRpc3BsYXlIZWlnaHQgdGhlIGN1cnJlbnQgZGlzcGxheSBoZWlnaHQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBnZXRTdGFibGVJbnNldHNMdyhpbnQgZGlzcGxheVJvdGF0aW9uLCBpbnQgZGlzcGxheVdpZHRoLCBpbnQgZGlzcGxheUhlaWdodCwKKyAgICAgICAgICAgIFJlY3Qgb3V0SW5zZXRzKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvYW5pbWF0aW9uL0FuaW1hdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uLmphdmEKaW5kZXggZTBkYmUyZi4uMTUzNmMyOSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uLmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9hbmltYXRpb24vQW5pbWF0aW9uLmphdmEKQEAgLTg1MCw3ICs4NTAsNyBAQAogICAgICAgICAgICAgbm9ybWFsaXplZFRpbWUgPSBjdXJyZW50VGltZSA8IG1TdGFydFRpbWUgPyAwLjBmIDogMS4wZjsKICAgICAgICAgfQogCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gZXhwaXJlZCA9IG5vcm1hbGl6ZWRUaW1lID49IDEuMGY7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZXhwaXJlZCA9IG5vcm1hbGl6ZWRUaW1lID49IDEuMGYgfHwgaXNDYW5jZWxlZCgpOwogICAgICAgICBtTW9yZSA9ICFleHBpcmVkOwogCiAgICAgICAgIGlmICghbUZpbGxFbmFibGVkKSBub3JtYWxpemVkVGltZSA9IE1hdGgubWF4KE1hdGgubWluKG5vcm1hbGl6ZWRUaW1lLCAxLjBmKSwgMC4wZik7CkBAIC04NzUsNyArODc1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChleHBpcmVkKSB7Ci0gICAgICAgICAgICBpZiAobVJlcGVhdENvdW50ID09IG1SZXBlYXRlZCkgeworICAgICAgICAgICAgaWYgKG1SZXBlYXRDb3VudCA9PSBtUmVwZWF0ZWQgfHwgaXNDYW5jZWxlZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtRW5kZWQpIHsKICAgICAgICAgICAgICAgICAgICAgbUVuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgZ3VhcmQuY2xvc2UoKTsKQEAgLTkwNSw2ICs5MDUsMTAgQEAKICAgICAgICAgcmV0dXJuIG1Nb3JlOwogICAgIH0KIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0NhbmNlbGVkKCkgeworICAgICAgICByZXR1cm4gbVN0YXJ0VGltZSA9PSBMb25nLk1JTl9WQUxVRTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgZmlyZUFuaW1hdGlvblN0YXJ0KCkgewogICAgICAgICBpZiAobUxpc3RlbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChtTGlzdGVuZXJIYW5kbGVyID09IG51bGwpIG1MaXN0ZW5lci5vbkFuaW1hdGlvblN0YXJ0KHRoaXMpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9CYXNlSW5wdXRDb25uZWN0aW9uLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQppbmRleCBiYTVkNmMyLi42ZTVlNTkxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0Jhc2VJbnB1dENvbm5lY3Rpb24uamF2YQpAQCAtMjAxLDEwICsyMDEsMTcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyB0aGUgZGVsZXRpb24gYXJvdW5kIHRoZSBjdXJyZW50Ci0gICAgICogc2VsZWN0aW9uIHBvc2l0aW9uIG9mIHRoZSBlZGl0YWJsZSB0ZXh0LgotICAgICAqIEBwYXJhbSBiZWZvcmVMZW5ndGgKLSAgICAgKiBAcGFyYW0gYWZ0ZXJMZW5ndGgKKyAgICAgKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBwZXJmb3JtcyB0aGUgZGVsZXRpb24gYXJvdW5kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBwb3NpdGlvbiBvZiB0aGUKKyAgICAgKiBlZGl0YWJsZSB0ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtIGJlZm9yZUxlbmd0aCBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBjdXJzb3IgdG8gYmUgZGVsZXRlZCwgaW4gY29kZSB1bml0LgorICAgICAqICAgICAgICBJZiB0aGlzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgICAqICAgICAgICB0ZXh0IGFuZCB0aGUgY3Vyc29yLCB0aGVuIHRoaXMgbWV0aG9kIGRvZXMgbm90IGZhaWwgYnV0IGRlbGV0ZXMgYWxsIHRoZSBjaGFyYWN0ZXJzIGluCisgICAgICogICAgICAgIHRoYXQgcmFuZ2UuCisgICAgICogQHBhcmFtIGFmdGVyTGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRlciB0aGUgY3Vyc29yIHRvIGJlIGRlbGV0ZWQsIGluIGNvZGUgdW5pdC4KKyAgICAgKiAgICAgICAgSWYgdGhpcyBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBleGlzdGluZyBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGN1cnNvciBhbmQKKyAgICAgKiAgICAgICAgdGhlIGVuZCBvZiB0aGUgdGV4dCwgdGhlbiB0aGlzIG1ldGhvZCBkb2VzIG5vdCBmYWlsIGJ1dCBkZWxldGVzIGFsbCB0aGUgY2hhcmFjdGVycyBpbgorICAgICAqICAgICAgICB0aGF0IHJhbmdlLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGRlbGV0ZVN1cnJvdW5kaW5nVGV4dChpbnQgYmVmb3JlTGVuZ3RoLCBpbnQgYWZ0ZXJMZW5ndGgpIHsKICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJkZWxldGVTdXJyb3VuZGluZ1RleHQgIiArIGJlZm9yZUxlbmd0aApAQCAtMjEzLDcgKzIyMCw3IEBACiAgICAgICAgIGlmIChjb250ZW50ID09IG51bGwpIHJldHVybiBmYWxzZTsKIAogICAgICAgICBiZWdpbkJhdGNoRWRpdCgpOwotICAgICAgICAKKwogICAgICAgICBpbnQgYSA9IFNlbGVjdGlvbi5nZXRTZWxlY3Rpb25TdGFydChjb250ZW50KTsKICAgICAgICAgaW50IGIgPSBTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uRW5kKGNvbnRlbnQpOwogCkBAIC0yNTMsOSArMjYwLDkgQEAKIAogICAgICAgICAgICAgY29udGVudC5kZWxldGUoYiwgZW5kKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBlbmRCYXRjaEVkaXQoKTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbi5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dENvbm5lY3Rpb24uamF2YQppbmRleCBmZjk5MmQzLi5iZTdiYzE0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0Q29ubmVjdGlvbi5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRDb25uZWN0aW9uLmphdmEKQEAgLTMzNSwxMiArMzM1LDE1IEBACiAgICAgICogYnV0IGJlIGNhcmVmdWwgdG8gd2FpdCB1bnRpbCB0aGUgYmF0Y2ggZWRpdCBpcyBvdmVyIGlmIG9uZSBpcwogICAgICAqIGluIHByb2dyZXNzLjwvcD4KICAgICAgKgotICAgICAqIEBwYXJhbSBiZWZvcmVMZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIGRlbGV0ZWQgYmVmb3JlIHRoZQotICAgICAqICAgICAgICBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4KLSAgICAgKiBAcGFyYW0gYWZ0ZXJMZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgdGhlCi0gICAgICogICAgICAgIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLgotICAgICAqIEByZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBpZiB0aGUgaW5wdXQgY29ubmVjdGlvbiBpcyBubyBsb25nZXIKLSAgICAgKiB2YWxpZC4KKyAgICAgKiBAcGFyYW0gYmVmb3JlTGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnNvciB0byBiZSBkZWxldGVkLCBpbiBjb2RlIHVuaXQuCisgICAgICogICAgICAgIElmIHRoaXMgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgZXhpc3RpbmcgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgICogICAgICAgIHRleHQgYW5kIHRoZSBjdXJzb3IsIHRoZW4gdGhpcyBtZXRob2QgZG9lcyBub3QgZmFpbCBidXQgZGVsZXRlcyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4KKyAgICAgKiAgICAgICAgdGhhdCByYW5nZS4KKyAgICAgKiBAcGFyYW0gYWZ0ZXJMZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBjdXJzb3IgdG8gYmUgZGVsZXRlZCwgaW4gY29kZSB1bml0LgorICAgICAqICAgICAgICBJZiB0aGlzIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGV4aXN0aW5nIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgY3Vyc29yIGFuZAorICAgICAqICAgICAgICB0aGUgZW5kIG9mIHRoZSB0ZXh0LCB0aGVuIHRoaXMgbWV0aG9kIGRvZXMgbm90IGZhaWwgYnV0IGRlbGV0ZXMgYWxsIHRoZSBjaGFyYWN0ZXJzIGluCisgICAgICogICAgICAgIHRoYXQgcmFuZ2UuCisgICAgICogQHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIGlmIHRoZSBpbnB1dCBjb25uZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4KICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBkZWxldGVTdXJyb3VuZGluZ1RleHQoaW50IGJlZm9yZUxlbmd0aCwgaW50IGFmdGVyTGVuZ3RoKTsKIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VyLmphdmEKaW5kZXggMzI5ZDFiMC4uNWUwNzM0NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlci5qYXZhCkBAIC01NCw2ICs1NCw3IEBACiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtMjIwOSw3ICsyMjEwLDcgQEAKICAgICAgICAgICAgIHAucHJpbnRsbigiICBtQ3VycmVudFRleHRCb3hBdHRyaWJ1dGU6IG51bGwiKTsKICAgICAgICAgfQogICAgICAgICBwLnByaW50bG4oIiAgbVNlcnZlZElucHV0Q29ubmVjdGlvbj0iICsgbVNlcnZlZElucHV0Q29ubmVjdGlvbik7Ci0gICAgICAgIHAucHJpbnRsbigiICBtQ29tcGxldGlvbnM9IiArIG1Db21wbGV0aW9ucyk7CisgICAgICAgIHAucHJpbnRsbigiICBtQ29tcGxldGlvbnM9IiArIEFycmF5cy50b1N0cmluZyhtQ29tcGxldGlvbnMpKTsKICAgICAgICAgcC5wcmludGxuKCIgIG1DdXJzb3JSZWN0PSIgKyBtQ3Vyc29yUmVjdCk7CiAgICAgICAgIHAucHJpbnRsbigiICBtQ3Vyc29yU2VsU3RhcnQ9IiArIG1DdXJzb3JTZWxTdGFydAogICAgICAgICAgICAgICAgICsgIiBtQ3Vyc29yU2VsRW5kPSIgKyBtQ3Vyc29yU2VsRW5kCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlckludGVybmFsLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kTWFuYWdlckludGVybmFsLmphdmEKaW5kZXggYzIyMTI3Yi4uY2U5OTA4YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZE1hbmFnZXJJbnRlcm5hbC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RNYW5hZ2VySW50ZXJuYWwuamF2YQpAQCAtMjYsNSArMjYsMTAgQEAKICAgICAgKiBDYWxsZWQgYnkgdGhlIHBvd2VyIG1hbmFnZXIgdG8gdGVsbCB0aGUgaW5wdXQgbWV0aG9kIG1hbmFnZXIgd2hldGhlciBpdAogICAgICAqIHNob3VsZCBzdGFydCB3YXRjaGluZyBmb3Igd2FrZSBldmVudHMuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0SW50ZXJhY3RpdmUoYm9vbGVhbiBpbnRlcmFjdGl2ZSk7CisgICAgdm9pZCBzZXRJbnRlcmFjdGl2ZShib29sZWFuIGludGVyYWN0aXZlKTsKKworICAgIC8qKgorICAgICAqIENhbGxlZCBieSB0aGUgd2luZG93IG1hbmFnZXIgdG8gbGV0IHRoZSBpbnB1dCBtZXRob2QgbWFuYWdlciByb3RhdGUgdGhlIGlucHV0IG1ldGhvZC4KKyAgICAgKi8KKyAgICB2b2lkIHN3aXRjaElucHV0TWV0aG9kKGJvb2xlYW4gZm9yd2FyZERpcmVjdGlvbik7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGUuamF2YQppbmRleCBmYmFmNTFjLi5hNDJmNGQ5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2Q7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKQEAgLTUwLDYgKzUxLDcgQEAKICAqCiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNJbnB1dE1ldGhvZF9TdWJ0eXBlX2xhYmVsCiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNJbnB1dE1ldGhvZF9TdWJ0eXBlX2ljb24KKyAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0lucHV0TWV0aG9kX1N1YnR5cGVfbGFuZ3VhZ2VUYWcKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI0lucHV0TWV0aG9kX1N1YnR5cGVfaW1lU3VidHlwZUxvY2FsZQogICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjSW5wdXRNZXRob2RfU3VidHlwZV9pbWVTdWJ0eXBlTW9kZQogICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjSW5wdXRNZXRob2RfU3VidHlwZV9pbWVTdWJ0eXBlRXh0cmFWYWx1ZQpAQCAtNjAsNiArNjIsNyBAQAogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgSW5wdXRNZXRob2RTdWJ0eXBlIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IElucHV0TWV0aG9kU3VidHlwZS5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExBTkdVQUdFX1RBR19OT05FID0gIiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZBTFVFX1BBSVJfU0VQQVJBVE9SID0gIiwiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WQUxVRV9LRVlfVkFMVUVfU0VQQVJBVE9SID0gIj0iOwogICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzCkBAIC03NCw2ICs3Nyw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVN1YnR5cGVOYW1lUmVzSWQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVN1YnR5cGVJZDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtU3VidHlwZUxvY2FsZTsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtU3VidHlwZUxhbmd1YWdlVGFnOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1TdWJ0eXBlTW9kZTsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtU3VidHlwZUV4dHJhVmFsdWU7CiAgICAgcHJpdmF0ZSB2b2xhdGlsZSBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtRXh0cmFWYWx1ZUhhc2hNYXBDYWNoZTsKQEAgLTE3MSw2ICsxNzUsMTUgQEAKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVN1YnR5cGVMb2NhbGUgPSAiIjsKIAogICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIGxhbmd1YWdlVGFnIGlzIHRoZSBCQ1AtNDcgTGFuZ3VhZ2UgVGFnIHN1cHBvcnRlZCBieSB0aGlzIHN1YnR5cGUuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRMYW5ndWFnZVRhZyhTdHJpbmcgbGFuZ3VhZ2VUYWcpIHsKKyAgICAgICAgICAgIG1TdWJ0eXBlTGFuZ3VhZ2VUYWcgPSBsYW5ndWFnZVRhZyA9PSBudWxsID8gTEFOR1VBR0VfVEFHX05PTkUgOiBsYW5ndWFnZVRhZzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICAgIHByaXZhdGUgU3RyaW5nIG1TdWJ0eXBlTGFuZ3VhZ2VUYWcgPSBMQU5HVUFHRV9UQUdfTk9ORTsKKworICAgICAgICAvKioKICAgICAgICAgICogQHBhcmFtIHN1YnR5cGVNb2RlIGlzIHRoZSBtb2RlIHN1cHBvcnRlZCBieSB0aGlzIHN1YnR5cGUuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgSW5wdXRNZXRob2RTdWJ0eXBlQnVpbGRlciBzZXRTdWJ0eXBlTW9kZShTdHJpbmcgc3VidHlwZU1vZGUpIHsKQEAgLTI3MSw2ICsyODQsNyBAQAogICAgICAgICBtU3VidHlwZU5hbWVSZXNJZCA9IGJ1aWxkZXIubVN1YnR5cGVOYW1lUmVzSWQ7CiAgICAgICAgIG1TdWJ0eXBlSWNvblJlc0lkID0gYnVpbGRlci5tU3VidHlwZUljb25SZXNJZDsKICAgICAgICAgbVN1YnR5cGVMb2NhbGUgPSBidWlsZGVyLm1TdWJ0eXBlTG9jYWxlOworICAgICAgICBtU3VidHlwZUxhbmd1YWdlVGFnID0gYnVpbGRlci5tU3VidHlwZUxhbmd1YWdlVGFnOwogICAgICAgICBtU3VidHlwZU1vZGUgPSBidWlsZGVyLm1TdWJ0eXBlTW9kZTsKICAgICAgICAgbVN1YnR5cGVFeHRyYVZhbHVlID0gYnVpbGRlci5tU3VidHlwZUV4dHJhVmFsdWU7CiAgICAgICAgIG1Jc0F1eGlsaWFyeSA9IGJ1aWxkZXIubUlzQXV4aWxpYXJ5OwpAQCAtMjkxLDYgKzMwNSw4IEBACiAgICAgICAgIHMgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgICBtU3VidHlwZUxvY2FsZSA9IHMgIT0gbnVsbCA/IHMgOiAiIjsKICAgICAgICAgcyA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CisgICAgICAgIG1TdWJ0eXBlTGFuZ3VhZ2VUYWcgPSBzICE9IG51bGwgPyBzIDogTEFOR1VBR0VfVEFHX05PTkU7CisgICAgICAgIHMgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgICBtU3VidHlwZU1vZGUgPSBzICE9IG51bGwgPyBzIDogIiI7CiAgICAgICAgIHMgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICAgICBtU3VidHlwZUV4dHJhVmFsdWUgPSBzICE9IG51bGwgPyBzIDogIiI7CkBAIC0zMTgsMjEgKzMzNCwzOCBAQAogICAgIC8qKgogICAgICAqIEByZXR1cm4gVGhlIGxvY2FsZSBvZiB0aGUgc3VidHlwZS4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgImxvY2FsZSIgc3RyaW5nIHBhcmFtZXRlciBwYXNzZWQKICAgICAgKiB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rICNnZXRMYW5ndWFnZVRhZygpfSBpbnN0ZWFkLgogICAgICAqLworICAgIEBEZXByZWNhdGVkCisgICAgQE5vbk51bGwKICAgICBwdWJsaWMgU3RyaW5nIGdldExvY2FsZSgpIHsKICAgICAgICAgcmV0dXJuIG1TdWJ0eXBlTG9jYWxlOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gVGhlIG5vcm1hbGl6ZWQge0BsaW5rIExvY2FsZX0gb2JqZWN0IG9mIHRoZSBzdWJ0eXBlLiBUaGUgcmV0dXJuZWQgbG9jYWxlIG1heSBvciBtYXkKLSAgICAgKiBub3QgZXF1YWwgdG8gImxvY2FsZSIgc3RyaW5nIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorICAgICAqIEByZXR1cm4gdGhlIEJDUC00NyBMYW5ndWFnZSBUYWcgb2YgdGhlIHN1YnR5cGUuICBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIG5vIExhbmd1YWdlIFRhZworICAgICAqIGlzIHNwZWNpZmllZC4KICAgICAgKgotICAgICAqIDxwPlRPRE86IENvbnNpZGVyIHRvIG1ha2UgdGhpcyBhIHB1YmxpYyBBUEkuPC9wPgorICAgICAqIEBzZWUgTG9jYWxlI2Zvckxhbmd1YWdlVGFnKFN0cmluZykKKyAgICAgKi8KKyAgICBATm9uTnVsbAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TGFuZ3VhZ2VUYWcoKSB7CisgICAgICAgIHJldHVybiBtU3VidHlwZUxhbmd1YWdlVGFnOworICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge0BsaW5rIExvY2FsZX0gY29uc3RydWN0ZWQgZnJvbSB7QGxpbmsgI2dldExhbmd1YWdlVGFnKCl9LiBJZiB0aGUgTGFuZ3VhZ2UgVGFnIGlzIG5vdAorICAgICAqIHNwZWNpZmllZCwgdGhlbiB0cnkgdG8gY29uc3RydWN0IGZyb20ge0BsaW5rICNnZXRMb2NhbGUoKX0KKyAgICAgKgorICAgICAqIDxwPlRPRE86IENvbnNpZGVyIHRvIG1ha2UgdGhpcyBhIHB1YmxpYyBBUEksIG9yIG1vdmUgdGhpcyB0byBzdXBwb3J0IGxpYi48L3A+CiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBATnVsbGFibGUKICAgICBwdWJsaWMgTG9jYWxlIGdldExvY2FsZU9iamVjdCgpIHsKLSAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgZm9sbG93aW5nIG1ldGhvZCBmcm9tIElucHV0TWV0aG9kVXRpbHMgdG8gSW5wdXRNZXRob2RTdWJ0eXBlLgorICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KG1TdWJ0eXBlTGFuZ3VhZ2VUYWcpKSB7CisgICAgICAgICAgICByZXR1cm4gTG9jYWxlLmZvckxhbmd1YWdlVGFnKG1TdWJ0eXBlTGFuZ3VhZ2VUYWcpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBJbnB1dE1ldGhvZFV0aWxzLmNvbnN0cnVjdExvY2FsZUZyb21TdHJpbmcobVN1YnR5cGVMb2NhbGUpOwogICAgIH0KIApAQCAtNDc2LDEzICs1MDksMTQgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gKHN1YnR5cGUuaGFzaENvZGUoKSA9PSBoYXNoQ29kZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAoc3VidHlwZS5oYXNoQ29kZSgpID09IGhhc2hDb2RlKCkpCi0gICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0TG9jYWxlKCkuZXF1YWxzKGdldExvY2FsZSgpKSkKLSAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRNb2RlKCkuZXF1YWxzKGdldE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0RXh0cmFWYWx1ZSgpLmVxdWFscyhnZXRFeHRyYVZhbHVlKCkpKQotICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmlzQXV4aWxpYXJ5KCkgPT0gaXNBdXhpbGlhcnkoKSkKLSAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5vdmVycmlkZXNJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgPT0gb3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKCkpCi0gICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuaXNBc2NpaUNhcGFibGUoKSA9PSBpc0FzY2lpQ2FwYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0TG9jYWxlKCkuZXF1YWxzKGdldExvY2FsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0TGFuZ3VhZ2VUYWcoKS5lcXVhbHMoZ2V0TGFuZ3VhZ2VUYWcoKSkpCisgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldE1vZGUoKS5lcXVhbHMoZ2V0TW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0RXh0cmFWYWx1ZSgpLmVxdWFscyhnZXRFeHRyYVZhbHVlKCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5pc0F1eGlsaWFyeSgpID09IGlzQXV4aWxpYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLm92ZXJyaWRlc0ltcGxpY2l0bHlFbmFibGVkU3VidHlwZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gb3ZlcnJpZGVzSW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlKCkpCisgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmlzQXNjaWlDYXBhYmxlKCkgPT0gaXNBc2NpaUNhcGFibGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ5Nyw2ICs1MzEsNyBAQAogICAgICAgICBkZXN0LndyaXRlSW50KG1TdWJ0eXBlTmFtZVJlc0lkKTsKICAgICAgICAgZGVzdC53cml0ZUludChtU3VidHlwZUljb25SZXNJZCk7CiAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobVN1YnR5cGVMb2NhbGUpOworICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG1TdWJ0eXBlTGFuZ3VhZ2VUYWcpOwogICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG1TdWJ0eXBlTW9kZSk7CiAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcobVN1YnR5cGVFeHRyYVZhbHVlKTsKICAgICAgICAgZGVzdC53cml0ZUludChtSXNBdXhpbGlhcnkgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1NwZWxsQ2hlY2tlckluZm8uamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VySW5mby5qYXZhCmluZGV4IDQ5MWRlNzguLjQ3MWI2ZDQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VySW5mby5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VySW5mby5qYXZhCkBAIC0xMTcsNiArMTE3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLlNwZWxsQ2hlY2tlcl9TdWJ0eXBlX3N1YnR5cGVMb2NhbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU3BlbGxDaGVja2VyX1N1YnR5cGVfbGFuZ3VhZ2VUYWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU3BlbGxDaGVja2VyX1N1YnR5cGVfc3VidHlwZUV4dHJhVmFsdWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuZ2V0SW50KGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuU3BlbGxDaGVja2VyX1N1YnR5cGVfc3VidHlwZUlkLCAwKSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1NwZWxsQ2hlY2tlclN1YnR5cGUuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU3VidHlwZS5qYXZhCmluZGV4IGYyYjAzY2MuLmRmMzM2OTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU3VidHlwZS5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU3VidHlwZS5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5pbnB1dG1ldGhvZC5JbnB1dE1ldGhvZFV0aWxzOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CkBAIC00MCw2ICs0MSw3IEBACiAgKiBAc2VlIFNwZWxsQ2hlY2tlckluZm8KICAqCiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNTcGVsbENoZWNrZXJfU3VidHlwZV9sYWJlbAorICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjU3BlbGxDaGVja2VyX1N1YnR5cGVfbGFuZ3VhZ2VUYWcKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1NwZWxsQ2hlY2tlcl9TdWJ0eXBlX3N1YnR5cGVMb2NhbGUKICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1NwZWxsQ2hlY2tlcl9TdWJ0eXBlX3N1YnR5cGVFeHRyYVZhbHVlCiAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNTcGVsbENoZWNrZXJfU3VidHlwZV9zdWJ0eXBlSWQKQEAgLTQ5LDExICs1MSwxMyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WQUxVRV9QQUlSX1NFUEFSQVRPUiA9ICIsIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVkFMVUVfS0VZX1ZBTFVFX1NFUEFSQVRPUiA9ICI9IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VCVFlQRV9JRF9OT05FID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCVFlQRV9MQU5HVUFHRV9UQUdfTk9ORSA9ICIiOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVN1YnR5cGVJZDsKICAgICBwcml2YXRlIGZpbmFsIGludCBtU3VidHlwZUhhc2hDb2RlOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1TdWJ0eXBlTmFtZVJlc0lkOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1TdWJ0eXBlTG9jYWxlOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1TdWJ0eXBlTGFuZ3VhZ2VUYWc7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVN1YnR5cGVFeHRyYVZhbHVlOwogICAgIHByaXZhdGUgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbUV4dHJhVmFsdWVIYXNoTWFwQ2FjaGU7CiAKQEAgLTY2LDE0ICs3MCwxNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIG5hbWVJZCBUaGUgbmFtZSBvZiB0aGUgc3VidHlwZQogICAgICAqIEBwYXJhbSBsb2NhbGUgVGhlIGxvY2FsZSBzdXBwb3J0ZWQgYnkgdGhlIHN1YnR5cGUKKyAgICAgKiBAcGFyYW0gbGFuZ3VhZ2VUYWcgVGhlIEJDUC00NyBMYW5ndWFnZSBUYWcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VidHlwZS4KICAgICAgKiBAcGFyYW0gZXh0cmFWYWx1ZSBUaGUgZXh0cmEgdmFsdWUgb2YgdGhlIHN1YnR5cGUKICAgICAgKiBAcGFyYW0gc3VidHlwZUlkIFRoZSBzdWJ0eXBlIElEIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgc3RhYmxlIGR1cmluZyBwYWNrYWdlIHVwZGF0ZS4KICAgICAgKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIFNwZWxsQ2hlY2tlclN1YnR5cGUoaW50IG5hbWVJZCwgU3RyaW5nIGxvY2FsZSwgU3RyaW5nIGV4dHJhVmFsdWUsIGludCBzdWJ0eXBlSWQpIHsKKyAgICBwdWJsaWMgU3BlbGxDaGVja2VyU3VidHlwZShpbnQgbmFtZUlkLCBTdHJpbmcgbG9jYWxlLCBTdHJpbmcgbGFuZ3VhZ2VUYWcsIFN0cmluZyBleHRyYVZhbHVlLAorICAgICAgICAgICAgaW50IHN1YnR5cGVJZCkgewogICAgICAgICBtU3VidHlwZU5hbWVSZXNJZCA9IG5hbWVJZDsKICAgICAgICAgbVN1YnR5cGVMb2NhbGUgPSBsb2NhbGUgIT0gbnVsbCA/IGxvY2FsZSA6ICIiOworICAgICAgICBtU3VidHlwZUxhbmd1YWdlVGFnID0gbGFuZ3VhZ2VUYWcgIT0gbnVsbCA/IGxhbmd1YWdlVGFnIDogU1VCVFlQRV9MQU5HVUFHRV9UQUdfTk9ORTsKICAgICAgICAgbVN1YnR5cGVFeHRyYVZhbHVlID0gZXh0cmFWYWx1ZSAhPSBudWxsID8gZXh0cmFWYWx1ZSA6ICIiOwogICAgICAgICBtU3VidHlwZUlkID0gc3VidHlwZUlkOwogICAgICAgICBtU3VidHlwZUhhc2hDb2RlID0gbVN1YnR5cGVJZCAhPSBTVUJUWVBFX0lEX05PTkUgPwpAQCAtOTEsNyArOTgsNyBAQAogICAgICAqIHRvIGluc3RhbnRpYXRlIHtAbGluayBTcGVsbENoZWNrZXJTdWJ0eXBlfSBvYmplY3QuCiAgICAgICovCiAgICAgcHVibGljIFNwZWxsQ2hlY2tlclN1YnR5cGUoaW50IG5hbWVJZCwgU3RyaW5nIGxvY2FsZSwgU3RyaW5nIGV4dHJhVmFsdWUpIHsKLSAgICAgICAgdGhpcyhuYW1lSWQsIGxvY2FsZSwgZXh0cmFWYWx1ZSwgU1VCVFlQRV9JRF9OT05FKTsKKyAgICAgICAgdGhpcyhuYW1lSWQsIGxvY2FsZSwgU1VCVFlQRV9MQU5HVUFHRV9UQUdfTk9ORSwgZXh0cmFWYWx1ZSwgU1VCVFlQRV9JRF9OT05FKTsKICAgICB9CiAKICAgICBTcGVsbENoZWNrZXJTdWJ0eXBlKFBhcmNlbCBzb3VyY2UpIHsKQEAgLTEwMCw2ICsxMDcsOCBAQAogICAgICAgICBzID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICAgbVN1YnR5cGVMb2NhbGUgPSBzICE9IG51bGwgPyBzIDogIiI7CiAgICAgICAgIHMgPSBzb3VyY2UucmVhZFN0cmluZygpOworICAgICAgICBtU3VidHlwZUxhbmd1YWdlVGFnID0gcyAhPSBudWxsID8gcyA6ICIiOworICAgICAgICBzID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgICAgbVN1YnR5cGVFeHRyYVZhbHVlID0gcyAhPSBudWxsID8gcyA6ICIiOwogICAgICAgICBtU3VidHlwZUlkID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgICAgbVN1YnR5cGVIYXNoQ29kZSA9IG1TdWJ0eXBlSWQgIT0gU1VCVFlQRV9JRF9OT05FID8KQEAgLTExNSwxMiArMTI0LDI3IEBACiAKICAgICAvKioKICAgICAgKiBAcmV0dXJuIHRoZSBsb2NhbGUgb2YgdGhlIHN1YnR5cGUKKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgI2dldExhbmd1YWdlVGFnKCl9IGluc3RlYWQuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBATm9uTnVsbAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYWxlKCkgewogICAgICAgICByZXR1cm4gbVN1YnR5cGVMb2NhbGU7CiAgICAgfQogCiAgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgQkNQLTQ3IExhbmd1YWdlIFRhZyBvZiB0aGUgc3VidHlwZS4gIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIHdoZW4gbm8gTGFuZ3VhZ2UgVGFnCisgICAgICogaXMgc3BlY2lmaWVkLgorICAgICAqCisgICAgICogQHNlZSBMb2NhbGUjZm9yTGFuZ3VhZ2VUYWcoU3RyaW5nKQorICAgICAqLworICAgIEBOb25OdWxsCisgICAgcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZVRhZygpIHsKKyAgICAgICAgcmV0dXJuIG1TdWJ0eXBlTGFuZ3VhZ2VUYWc7CisgICAgfQorCisgICAgLyoqCiAgICAgICogQHJldHVybiB0aGUgZXh0cmEgdmFsdWUgb2YgdGhlIHN1YnR5cGUKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGdldEV4dHJhVmFsdWUoKSB7CkBAIC0xODIsMjAgKzIwNiwyNCBAQAogICAgICAgICAgICAgcmV0dXJuIChzdWJ0eXBlLmhhc2hDb2RlKCkgPT0gaGFzaENvZGUoKSkKICAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnR5cGUuZ2V0TmFtZVJlc0lkKCkgPT0gZ2V0TmFtZVJlc0lkKCkpCiAgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldExvY2FsZSgpLmVxdWFscyhnZXRMb2NhbGUoKSkpCisgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0eXBlLmdldExhbmd1YWdlVGFnKCkuZXF1YWxzKGdldExhbmd1YWdlVGFnKCkpKQogICAgICAgICAgICAgICAgICAgICAmJiAoc3VidHlwZS5nZXRFeHRyYVZhbHVlKCkuZXF1YWxzKGdldEV4dHJhVmFsdWUoKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcmV0dXJuIFRoZSBub3JtYWxpemVkIHtAbGluayBMb2NhbGV9IG9iamVjdCBvZiB0aGUgc3VidHlwZS4gVGhlIHJldHVybmVkIGxvY2FsZSBtYXkgb3IgbWF5Ci0gICAgICogbm90IGVxdWFsIHRvICJsb2NhbGUiIHN0cmluZyBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgKiBAcmV0dXJuIHtAbGluayBMb2NhbGV9IGNvbnN0cnVjdGVkIGZyb20ge0BsaW5rICNnZXRMYW5ndWFnZVRhZygpfS4gSWYgdGhlIExhbmd1YWdlIFRhZyBpcyBub3QKKyAgICAgKiBzcGVjaWZpZWQsIHRoZW4gdHJ5IHRvIGNvbnN0cnVjdCBmcm9tIHtAbGluayAjZ2V0TG9jYWxlKCl9CiAgICAgICoKLSAgICAgKiA8cD5UT0RPOiBDb25zaWRlciB0byBtYWtlIHRoaXMgYSBwdWJsaWMgQVBJLjwvcD4KKyAgICAgKiA8cD5UT0RPOiBDb25zaWRlciB0byBtYWtlIHRoaXMgYSBwdWJsaWMgQVBJLCBvciBtb3ZlIHRoaXMgdG8gc3VwcG9ydCBsaWIuPC9wPgogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQE51bGxhYmxlCiAgICAgcHVibGljIExvY2FsZSBnZXRMb2NhbGVPYmplY3QoKSB7CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkobVN1YnR5cGVMYW5ndWFnZVRhZykpIHsKKyAgICAgICAgICAgIHJldHVybiBMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcobVN1YnR5cGVMYW5ndWFnZVRhZyk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIElucHV0TWV0aG9kVXRpbHMuY29uc3RydWN0TG9jYWxlRnJvbVN0cmluZyhtU3VidHlwZUxvY2FsZSk7CiAgICAgfQogCkBAIC0yMzQsNiArMjYyLDcgQEAKICAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBkZXN0LCBpbnQgcGFyY2VsYWJsZUZsYWdzKSB7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQobVN1YnR5cGVOYW1lUmVzSWQpOwogICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG1TdWJ0eXBlTG9jYWxlKTsKKyAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtU3VidHlwZUxhbmd1YWdlVGFnKTsKICAgICAgICAgZGVzdC53cml0ZVN0cmluZyhtU3VidHlwZUV4dHJhVmFsdWUpOwogICAgICAgICBkZXN0LndyaXRlSW50KG1TdWJ0eXBlSWQpOwogICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9JV2ViVmlld1VwZGF0ZVNlcnZpY2UuYWlkbCBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9JV2ViVmlld1VwZGF0ZVNlcnZpY2UuYWlkbAppbmRleCBhNzc0NTliLi44OWQ1ZDY5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvSVdlYlZpZXdVcGRhdGVTZXJ2aWNlLmFpZGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L0lXZWJWaWV3VXBkYXRlU2VydmljZS5haWRsCkBAIC0xNiw2ICsxNiwxMCBAQAogCiBwYWNrYWdlIGFuZHJvaWQud2Via2l0OwogCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXdQcm92aWRlckluZm87CitpbXBvcnQgYW5kcm9pZC53ZWJraXQuV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2U7CisKIC8qKgogICogUHJpdmF0ZSBzZXJ2aWNlIHRvIHdhaXQgZm9yIHRoZSB1cGRhdGFibGUgV2ViVmlldyB0byBiZSByZWFkeSBmb3IgdXNlLgogICogQGhpZGUKQEAgLTI1LDEyICsyOSwyOCBAQAogICAgIC8qKgogICAgICAqIFVzZWQgYnkgdGhlIHJlbHJvIGZpbGUgY3JlYXRvciB0byBub3RpZnkgdGhlIHNlcnZpY2UgdGhhdCBpdCdzIGRvbmUuCiAgICAgICovCi0gICAgdm9pZCBub3RpZnlSZWxyb0NyZWF0aW9uQ29tcGxldGVkKGJvb2xlYW4gaXM2NEJpdCwgYm9vbGVhbiBzdWNjZXNzKTsKKyAgICB2b2lkIG5vdGlmeVJlbHJvQ3JlYXRpb25Db21wbGV0ZWQoKTsKIAogICAgIC8qKgogICAgICAqIFVzZWQgYnkgV2ViVmlld0ZhY3RvcnkgdG8gYmxvY2sgbG9hZGluZyBvZiBXZWJWaWV3IGNvZGUgdW50aWwKLSAgICAgKiBwcmVwYXJhdGlvbnMgYXJlIGNvbXBsZXRlLgorICAgICAqIHByZXBhcmF0aW9ucyBhcmUgY29tcGxldGUuIFJldHVybnMgdGhlIHBhY2thZ2UgdXNlZCBhcyBXZWJWaWV3IHByb3ZpZGVyLgogICAgICAqLwotICAgIHZvaWQgd2FpdEZvclJlbHJvQ3JlYXRpb25Db21wbGV0ZWQoYm9vbGVhbiBpczY0Qml0KTsKKyAgICBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZSB3YWl0Rm9yQW5kR2V0UHJvdmlkZXIoKTsKIAorICAgIC8qKgorICAgICAqIERldmVsb3BtZW50U2V0dGluZ3MgdXNlcyB0aGlzIHRvIG5vdGlmeSBXZWJWaWV3VXBkYXRlU2VydmljZSB0aGF0IGEKKyAgICAgKiBuZXcgcHJvdmlkZXIgaGFzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuCisgICAgICovCisgICAgdm9pZCBjaGFuZ2VQcm92aWRlckFuZFNldHRpbmcoU3RyaW5nIG5ld1Byb3ZpZGVyKTsKKworICAgIC8qKgorICAgICAqIERldmVsb3BtZW50U2V0dGluZ3MgdXNlcyB0aGlzIHRvIGdldCB0aGUgY3VycmVudCBhdmFpbGFibGUgV2ViVmlldworICAgICAqIHByb3ZpZGVycyAodG8gZGlzcGxheSBhcyBjaG9pY2VzIHRvIHRoZSB1c2VyKS4KKyAgICAgKi8KKyAgICBXZWJWaWV3UHJvdmlkZXJJbmZvW10gZ2V0VmFsaWRXZWJWaWV3UGFja2FnZXMoKTsKKworICAgIC8qKgorICAgICAqIFVzZWQgYnkgRGV2ZWxvcG1lbnRTZXR0aW5nIHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgV2ViVmlldyBwcm92aWRlciBjdXJyZW50bHkgaW4gdXNlLgorICAgICAqLworICAgIFN0cmluZyBnZXRDdXJyZW50V2ViVmlld1BhY2thZ2VOYW1lKCk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViU2V0dGluZ3MuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncy5qYXZhCmluZGV4IDk0NDIyMjYuLjk1OTVkYjIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJTZXR0aW5ncy5qYXZhCkBAIC05ODcsOSArOTg3LDYgQEAKICAgICAgKiBAZGVwcmVjYXRlZCBEYXRhYmFzZSBwYXRocyBhcmUgbWFuYWdlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGNhbGxpbmcgdGhpcyBtZXRob2QKICAgICAgKiAgICAgICAgICAgICB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAgICAqLwotICAgIC8vIFRoaXMgd2lsbCB1cGRhdGUgV2ViQ29yZSB3aGVuIHRoZSBTeW5jIHJ1bnMgaW4gdGhlIEMrKyBzaWRlLgotICAgIC8vIE5vdGUgdGhhdCB0aGUgV2ViQ29yZSBEYXRhYmFzZSBUcmFja2VyIG9ubHkgYWxsb3dzIHRoZSBwYXRoIHRvIGJlIHNldAotICAgIC8vIG9uY2UuCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXREYXRhYmFzZVBhdGgoU3RyaW5nIGRhdGFiYXNlUGF0aCk7CiAKQEAgLTEwMDAsOCArOTk3LDEwIEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gZGF0YWJhc2VQYXRoIGEgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIGRhdGFiYXNlcyBzaG91bGQgYmUKICAgICAgKiAgICAgICAgICAgICAgICAgICAgIHNhdmVkLgorICAgICAqIEBkZXByZWNhdGVkIEdlb2xvY2F0aW9uIGRhdGFiYXNlIGFyZSBtYW5hZ2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgY2FsbGluZyB0aGlzIG1ldGhvZAorICAgICAqICAgICAgICAgICAgIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICAgICovCi0gICAgLy8gVGhpcyB3aWxsIHVwZGF0ZSBXZWJDb3JlIHdoZW4gdGhlIFN5bmMgcnVucyBpbiB0aGUgQysrIHNpZGUuCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzZXRHZW9sb2NhdGlvbkRhdGFiYXNlUGF0aChTdHJpbmcgZGF0YWJhc2VQYXRoKTsKIAogICAgIC8qKgpAQCAtMTEwMiw4ICsxMTAxLDYgQEAKICAgICAgKiAgIHZpYSB0aGUgSmF2YVNjcmlwdCBHZW9sb2NhdGlvbiBBUEkuCiAgICAgICogPC91bD4KICAgICAgKiA8cD4KLSAgICAgKiBBcyBhbiBvcHRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIHN0b3JlIHByZXZpb3VzIGxvY2F0aW9ucyBhbmQgd2ViIG9yaWdpbgotICAgICAqIHBlcm1pc3Npb25zIGluIGEgZGF0YWJhc2UuIFNlZSB7QGxpbmsgI3NldEdlb2xvY2F0aW9uRGF0YWJhc2VQYXRofS4KICAgICAgKgogICAgICAqIEBwYXJhbSBmbGFnIHdoZXRoZXIgR2VvbG9jYXRpb24gc2hvdWxkIGJlIGVuYWJsZWQKICAgICAgKi8KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlldy5qYXZhCmluZGV4IDc0NDNiY2UuLjBmNThiYTMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXcuamF2YQpAQCAtMjgwLDYgKzI4MCwyMyBAQAogICogaW5zdGVhZC4KICAqIDwvcD4KICAqCisgKiA8aDM+TWV0cmljczwvaDM+CisgKgorICogPHA+CisgKiBXZWJWaWV3IG1heSB1cGxvYWQgYW5vbnltb3VzIGRpYWdub3N0aWMgZGF0YSB0byBHb29nbGUgd2hlbiB0aGUgdXNlciBoYXMgY29uc2VudGVkLiBUaGlzIGRhdGEKKyAqIGhlbHBzIEdvb2dsZSBpbXByb3ZlIFdlYlZpZXcuIERhdGEgaXMgY29sbGVjdGVkIG9uIGEgcGVyLWFwcCBiYXNpcyBmb3IgZWFjaCBhcHAgd2hpY2ggaGFzCisgKiBpbnN0YW50aWF0ZWQgYSBXZWJWaWV3LiBBbiBpbmRpdmlkdWFsIGFwcCBjYW4gb3B0IG91dCBvZiB0aGlzIGZlYXR1cmUgYnkgcHV0dGluZyB0aGUgZm9sbG93aW5nCisgKiB0YWcgaW4gaXRzIG1hbmlmZXN0OgorICogPC9wPgorICogPHByZT4KKyAqIDxtZXRhLWRhdGEgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLndlYmtpdC5XZWJWaWV3Lk1ldHJpY3NPcHRPdXQiCisgKiAgICAgICAgICAgIGFuZHJvaWQ6dmFsdWU9InRydWUiIC8+CisgKiA8L3ByZT4KKyAqIDxwPgorICogRGF0YSB3aWxsIG9ubHkgYmUgdXBsb2FkZWQgZm9yIGEgZ2l2ZW4gYXBwIGlmIHRoZSB1c2VyIGhhcyBjb25zZW50ZWQgQU5EIHRoZSBhcHAgaGFzIG5vdCBvcHRlZAorICogb3V0LgorICogPC9wPgorICoKICAqLwogLy8gSW1wbGVtZW50YXRpb24gbm90ZXMuCiAvLyBUaGUgV2ViVmlldyBpcyBhIHRoaW4gQVBJIGNsYXNzIHRoYXQgZGVsZWdhdGVzIGl0cyBwdWJsaWMgQVBJIHRvIGEgYmFja2VuZCBXZWJWaWV3UHJvdmlkZXIKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3RmFjdG9yeS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKaW5kZXggMjI5MDExZC4uMDU0ZWFmYyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdGYWN0b3J5LmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKQEAgLTMxLDIwICszMiwyNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuU3RyaWN0TW9kZTsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5UcmFjZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2VjdXJlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFuZHJvaWRSdW50aW1lRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOwogCiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWU7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7CiAKK2ltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOworCiAvKioKICAqIFRvcCBsZXZlbCBmYWN0b3J5LCB1c2VkIGNyZWF0aW5nIGFsbCB0aGUgbWFpbiBXZWJWaWV3IGltcGxlbWVudGF0aW9uIGNsYXNzZXMuCiAgKgpAQCAtODMsNiArOTEsOCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfU1VDQ0VTUyA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElCTE9BRF9XUk9OR19QQUNLQUdFX05BTUUgPSAxOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfQUREUkVTU19TUEFDRV9OT1RfUkVTRVJWRUQgPSAyOworCisgICAgLy8gZXJyb3IgY29kZXMgZm9yIHdhaXRpbmcgZm9yIFdlYlZpZXcgcHJlcGFyYXRpb24KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9SRUxSTyA9IDM7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElCTE9BRF9GQUlMRURfTElTVElOR19XRUJWSUVXX1BBQ0tBR0VTID0gNDsKIApAQCAtOTEsNTcgKzEwMSwxMjAgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSUJMT0FEX0ZBSUxFRF9UT19MT0FEX0xJQlJBUlkgPSA2OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJQkxPQURfRkFJTEVEX0pOSV9DQUxMID0gNzsKIAotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbiBleHRlbmRzIEFuZHJvaWRSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAvLyBtb3JlIGVycm9yIGNvZGVzIGZvciB3YWl0aW5nIGZvciBXZWJWaWV3IHByZXBhcmF0aW9uCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElCTE9BRF9XRUJWSUVXX0JFSU5HX1JFUExBQ0VEID0gODsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9XRUJWSUVXX1JFQVNPTl9VTktOT1dOID0gOTsKKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRXZWJWaWV3UHJlcGFyYXRpb25FcnJvclJlYXNvbihpbnQgZXJyb3IpIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICAgICAgY2FzZSBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9SRUxSTzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRpbWUgb3V0IHdhaXRpbmcgZm9yIFJlbHJvIGZpbGVzIGJlaW5nIGNyZWF0ZWQiOworICAgICAgICAgICAgY2FzZSBMSUJMT0FEX0ZBSUxFRF9MSVNUSU5HX1dFQlZJRVdfUEFDS0FHRVM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJObyBXZWJWaWV3IGluc3RhbGxlZCI7CisgICAgICAgICAgICBjYXNlIExJQkxPQURfV0VCVklFV19CRUlOR19SRVBMQUNFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlRpbWUgb3V0IHdhaXRpbmcgZm9yIFdlYlZpZXcgdG8gYmUgcmVwbGFjZWQiOworICAgICAgICAgICAgY2FzZSBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9XRUJWSUVXX1JFQVNPTl9VTktOT1dOOgorICAgICAgICAgICAgICAgIHJldHVybiAiQ3Jhc2hlZCBmb3IgdW5rbm93biByZWFzb24iOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiVW5rbm93biI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbiBleHRlbmRzIEFuZHJvaWRSdW50aW1lRXhjZXB0aW9uIHsKICAgICAgICAgcHVibGljIE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSkgeyBzdXBlcihtZXNzYWdlKTsgfQogICAgICAgICBwdWJsaWMgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uKEV4Y2VwdGlvbiBlKSB7IHN1cGVyKGUpOyB9CiAgICAgfQogCi0gICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRXZWJWaWV3UGFja2FnZU5hbWVzKCkgewotICAgICAgICByZXR1cm4gQXBwR2xvYmFscy5nZXRJbml0aWFsQXBwbGljYXRpb24oKS5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmdBcnJheSgKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ193ZWJWaWV3UGFja2FnZU5hbWVzKTsKLSAgICB9CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBR19TVEFSVCA9ICJ3ZWJ2aWV3cHJvdmlkZXJzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHX1dFQlZJRVdfUFJPVklERVIgPSAid2Vidmlld3Byb3ZpZGVyIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHX1BBQ0tBR0VfTkFNRSA9ICJwYWNrYWdlTmFtZSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBR19ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7CisgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHByb3ZpZGVyIG11c3QgYmUgZXhwbGljaXRseSBjaG9zZW4gYnkgdGhlIHVzZXIgdG8gYmUgdXNlZC4KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgVEFHX0FWQUlMQUJJTElUWSA9ICJhdmFpbGFibGVCeURlZmF1bHQiOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUdfU0lHTkFUVVJFID0gInNpZ25hdHVyZSI7CiAKLSAgICAvLyBUT0RPIChnc2VubnRvbikgcmVtb3ZlIHdoZW4gY29tbWl0dGluZyB3ZWJ2aWV3IHh0cyB0ZXN0IGNoYW5nZQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlZpZXdQYWNrYWdlTmFtZSgpIHsKLSAgICAgICAgU3RyaW5nW10gd2ViVmlld1BhY2thZ2VOYW1lcyA9IGdldFdlYlZpZXdQYWNrYWdlTmFtZXMoKTsKLSAgICAgICAgcmV0dXJuIHdlYlZpZXdQYWNrYWdlTmFtZXNbd2ViVmlld1BhY2thZ2VOYW1lcy5sZW5ndGgtMV07CisgICAgLyoqCisgICAgICogUmVhZHMgYWxsIHNpZ25hdHVyZXMgYXQgdGhlIGN1cnJlbnQgZGVwdGggKHdpdGhpbiB0aGUgY3VycmVudCBwcm92aWRlcikgZnJvbSB0aGUgWE1MIHBhcnNlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSByZWFkU2lnbmF0dXJlcyhYbWxSZXNvdXJjZVBhcnNlciBwYXJzZXIpIHRocm93cyBJT0V4Y2VwdGlvbiwKKyAgICAgICAgICAgIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24geworICAgICAgICBMaXN0PFN0cmluZz4gc2lnbmF0dXJlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBpbnQgb3V0ZXJEZXB0aCA9IHBhcnNlci5nZXREZXB0aCgpOworICAgICAgICB3aGlsZShYbWxVdGlscy5uZXh0RWxlbWVudFdpdGhpbihwYXJzZXIsIG91dGVyRGVwdGgpKSB7CisgICAgICAgICAgICBpZiAocGFyc2VyLmdldE5hbWUoKS5lcXVhbHMoVEFHX1NJR05BVFVSRSkpIHsKKyAgICAgICAgICAgICAgICAvLyBQYXJzZSB0aGUgdmFsdWUgd2l0aGluIHRoZSBzaWduYXR1cmUgdGFnCisgICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSA9IHBhcnNlci5uZXh0VGV4dCgpOworICAgICAgICAgICAgICAgIHNpZ25hdHVyZXMuYWRkKHNpZ25hdHVyZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5lKExPR1RBRywgIkZvdW5kIGFuIGVsZW1lbnQgaW4gYSB3ZWJ2aWV3IHByb3ZpZGVyIHRoYXQgaXMgbm90IGEgc2lnbmF0dXJlIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZXMudG9BcnJheShuZXcgU3RyaW5nW3NpZ25hdHVyZXMuc2l6ZSgpXSk7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBwYWNrYWdlIGluZm8gb2YgdGhlIGZpcnN0IHBhY2thZ2UgaW4gdGhlIHdlYnZpZXcgcHJpb3JpdHkgbGlzdCB0aGF0IGNvbnRhaW5zCi0gICAgICogd2Vidmlldy4KLSAgICAgKgorICAgICAqIFJldHVybnMgYWxsIHBhY2thZ2VzIGRlY2xhcmVkIGluIHRoZSBmcmFtZXdvcmsgcmVzb3VyY2VzIGFzIHBvdGVudGlhbCBXZWJWaWV3IHByb3ZpZGVycy4KKyAgICAgKiBAaGlkZQorICAgICAqICovCisgICAgcHVibGljIHN0YXRpYyBXZWJWaWV3UHJvdmlkZXJJbmZvW10gZ2V0V2ViVmlld1BhY2thZ2VzKCkgeworICAgICAgICBYbWxSZXNvdXJjZVBhcnNlciBwYXJzZXIgPSBudWxsOworICAgICAgICBMaXN0PFdlYlZpZXdQcm92aWRlckluZm8+IHdlYlZpZXdQcm92aWRlcnMgPSBuZXcgQXJyYXlMaXN0PFdlYlZpZXdQcm92aWRlckluZm8+KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBwYXJzZXIgPSBBcHBHbG9iYWxzLmdldEluaXRpYWxBcHBsaWNhdGlvbigpLmdldFJlc291cmNlcygpLmdldFhtbCgKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi54bWwuY29uZmlnX3dlYnZpZXdfcGFja2FnZXMpOworICAgICAgICAgICAgWG1sVXRpbHMuYmVnaW5Eb2N1bWVudChwYXJzZXIsIFRBR19TVEFSVCk7CisgICAgICAgICAgICB3aGlsZSh0cnVlKSB7CisgICAgICAgICAgICAgICAgWG1sVXRpbHMubmV4dEVsZW1lbnQocGFyc2VyKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZWxlbWVudCA9IHBhcnNlci5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZXF1YWxzKFRBR19XRUJWSUVXX1BST1ZJREVSKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgVEFHX1BBQ0tBR0VfTkFNRSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2ViVmlldyBwcm92aWRlciBpbiBmcmFtZXdvcmsgcmVzb3VyY2VzIG1pc3NpbmcgcGFja2FnZSBuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIFRBR19ERVNDUklQVElPTik7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2ViVmlldyBwcm92aWRlciBpbiBmcmFtZXdvcmsgcmVzb3VyY2VzIG1pc3NpbmcgZGVzY3JpcHRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXZhaWxhYmxlQnlEZWZhdWx0ID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIFRBR19BVkFJTEFCSUxJVFkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlQnlEZWZhdWx0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUJ5RGVmYXVsdCA9ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2ViVmlld1Byb3ZpZGVycy5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdlYlZpZXdQcm92aWRlckluZm8ocGFja2FnZU5hbWUsIGRlc2NyaXB0aW9uLCBhdmFpbGFibGVCeURlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRTaWduYXR1cmVzKHBhcnNlcikpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR1RBRywgIkZvdW5kIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgYSB3ZWJ2aWV3IHByb3ZpZGVyIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbigiRXJyb3Igd2hlbiBwYXJzaW5nIFdlYlZpZXcgbWV0YSBkYXRhICIgKyBlKTsKKyAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uKCJFcnJvciB3aGVuIHBhcnNpbmcgV2ViVmlldyBtZXRhIGRhdGEgIiArIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKHBhcnNlciAhPSBudWxsKSBwYXJzZXIuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gd2ViVmlld1Byb3ZpZGVycy50b0FycmF5KG5ldyBXZWJWaWV3UHJvdmlkZXJJbmZvW3dlYlZpZXdQcm92aWRlcnMuc2l6ZSgpXSk7CisgICAgfQorCisKKyAgICAvLyBUT0RPIChnc2VubnRvbikgcmVtb3ZlIHdoZW4gY29tbWl0dGluZyB3ZWJ2aWV3IHh0cyB0ZXN0IGNoYW5nZQorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFdlYlZpZXdQYWNrYWdlTmFtZSgpIHsKKyAgICAgICAgV2ViVmlld1Byb3ZpZGVySW5mb1tdIHByb3ZpZGVycyA9IGdldFdlYlZpZXdQYWNrYWdlcygpOworICAgICAgICByZXR1cm4gcHJvdmlkZXJzWzBdLnBhY2thZ2VOYW1lOworICAgIH0KKworICAgIC8qKgogICAgICAqIEBoaWRlCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBQYWNrYWdlSW5mbyBmaW5kUHJlZmVycmVkV2ViVmlld1BhY2thZ2UoKSB7Ci0gICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gQXBwR2xvYmFscy5nZXRJbml0aWFsQXBwbGljYXRpb24oKS5nZXRQYWNrYWdlTWFuYWdlcigpOwotCi0gICAgICAgIGZvciAoU3RyaW5nIHBhY2thZ2VOYW1lIDogZ2V0V2ViVmlld1BhY2thZ2VOYW1lcygpKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOwotICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBsaWNhdGlvbkluZm8gPSBwYWNrYWdlSW5mby5hcHBsaWNhdGlvbkluZm87Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29ycmVjdCBmbGFnIGlzIHNldCB0aGUgcGFja2FnZSBjb250YWlucyB3ZWJ2aWV3LgotICAgICAgICAgICAgICAgIGlmIChnZXRXZWJWaWV3TGlicmFyeShhcHBsaWNhdGlvbkluZm8pICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2VJbmZvOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgYSBsb2FkYWJsZSBXZWJWaWV3IHBhY2thZ2UiKTsKLSAgICB9Ci0KLSAgICAvLyB0aHJvd3MgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uCi0gICAgcHJpdmF0ZSBzdGF0aWMgQXBwbGljYXRpb25JbmZvIGdldFdlYlZpZXdBcHBsaWNhdGlvbkluZm8oKSB7Ci0gICAgICAgIGlmIChzUGFja2FnZUluZm8gPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmaW5kUHJlZmVycmVkV2ViVmlld1BhY2thZ2UoKS5hcHBsaWNhdGlvbkluZm87Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBzUGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRXZWJWaWV3TGlicmFyeShBcHBsaWNhdGlvbkluZm8gYWkpIHsKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRXZWJWaWV3TGlicmFyeShBcHBsaWNhdGlvbkluZm8gYWkpIHsKICAgICAgICAgaWYgKGFpLm1ldGFEYXRhICE9IG51bGwpCiAgICAgICAgICAgICByZXR1cm4gYWkubWV0YURhdGEuZ2V0U3RyaW5nKCJjb20uYW5kcm9pZC53ZWJ2aWV3LldlYlZpZXdMaWJyYXJ5Iik7CiAgICAgICAgIHJldHVybiBudWxsOwpAQCAtMTU2LDE2ICsyMjksMTQgQEAKICAgICAgKiBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgcHJvdmlkaW5nIHRoZSB3ZWJ2aWV3LgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgaW50IGxvYWRXZWJWaWV3TmF0aXZlTGlicmFyeUZyb21QYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgc1BhY2thZ2VJbmZvID0gZmluZFByZWZlcnJlZFdlYlZpZXdQYWNrYWdlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gTElCTE9BRF9GQUlMRURfTElTVElOR19XRUJWSUVXX1BBQ0tBR0VTOworICAgICAgICBpbnQgcmV0ID0gd2FpdEZvclByb3ZpZGVyQW5kU2V0UGFja2FnZUluZm8oKTsKKyAgICAgICAgaWYgKHJldCAhPSBMSUJMT0FEX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFzUGFja2FnZUluZm8ucGFja2FnZU5hbWUuZXF1YWxzKHBhY2thZ2VOYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBMSUJMT0FEX1dST05HX1BBQ0tBR0VfTkFNRTsKIAotICAgICAgICBpZiAocGFja2FnZU5hbWUgIT0gbnVsbCAmJiBwYWNrYWdlTmFtZS5lcXVhbHMoc1BhY2thZ2VJbmZvLnBhY2thZ2VOYW1lKSkgewotICAgICAgICAgICAgcmV0dXJuIGxvYWROYXRpdmVMaWJyYXJ5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIExJQkxPQURfV1JPTkdfUEFDS0FHRV9OQU1FOworICAgICAgICByZXR1cm4gbG9hZE5hdGl2ZUxpYnJhcnkoKTsKICAgICB9CiAKICAgICBzdGF0aWMgV2ViVmlld0ZhY3RvcnlQcm92aWRlciBnZXRQcm92aWRlcigpIHsKQEAgLTIwNiwxOCArMjc3LDU1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBDbGFzczxXZWJWaWV3RmFjdG9yeVByb3ZpZGVyPiBnZXRQcm92aWRlckNsYXNzKCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gRmlyc3QgZmV0Y2ggdGhlIHBhY2thZ2UgaW5mbyBzbyB3ZSBjYW4gbG9nIHRoZSB3ZWJ2aWV3IHBhY2thZ2UgdmVyc2lvbi4KLSAgICAgICAgICAgIHNQYWNrYWdlSW5mbyA9IGZpbmRQcmVmZXJyZWRXZWJWaWV3UGFja2FnZSgpOworICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfV0VCVklFVywKKyAgICAgICAgICAgICAgICAgICAgIldlYlZpZXdGYWN0b3J5LndhaXRGb3JQcm92aWRlckFuZFNldFBhY2thZ2VJbmZvKCkiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgZmV0Y2ggdGhlIHBhY2thZ2UgaW5mbyBzbyB3ZSBjYW4gbG9nIHRoZSB3ZWJ2aWV3IHBhY2thZ2UgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICBpbnQgcmVzID0gd2FpdEZvclByb3ZpZGVyQW5kU2V0UGFja2FnZUluZm8oKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzICE9IExJQkxPQURfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gbG9hZCBXZWJWaWV3IHByb3ZpZGVyLCBlcnJvcjogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZ2V0V2ViVmlld1ByZXBhcmF0aW9uRXJyb3JSZWFzb24ocmVzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfV0VCVklFVyk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBMb2cuaShMT0dUQUcsICJMb2FkaW5nICIgKyBzUGFja2FnZUluZm8ucGFja2FnZU5hbWUgKyAiIHZlcnNpb24gIiArCiAgICAgICAgICAgICAgICAgc1BhY2thZ2VJbmZvLnZlcnNpb25OYW1lICsgIiAoY29kZSAiICsgc1BhY2thZ2VJbmZvLnZlcnNpb25Db2RlICsgIikiKTsKIAorICAgICAgICAgICAgQXBwbGljYXRpb24gaW5pdGlhbEFwcGxpY2F0aW9uID0gQXBwR2xvYmFscy5nZXRJbml0aWFsQXBwbGljYXRpb24oKTsKKyAgICAgICAgICAgIENvbnRleHQgd2ViVmlld0NvbnRleHQgPSBudWxsOworICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfV0VCVklFVywgImluaXRpYWxBcHBsaWNhdGlvbi5jcmVhdGVQYWNrYWdlQ29udGV4dCgpIik7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCBhIHBhY2thZ2UgY29udGV4dCB0byBsb2FkIHRoZSBKYXZhIGNvZGUgaW50byB0aGUgY3VycmVudCBhcHAuCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBkb25lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNpbmNlIGJ5IGNvbnN0cnVjdGluZyBhIHBhY2thZ2UgY29udGV4dCB3ZQorICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBXZWJWaWV3IHBhY2thZ2UgYXMgYSBkZXBlbmRlbmN5IGZvciB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiBzbyB0aGF0CisgICAgICAgICAgICAgICAgLy8gd2hlbiB0aGUgV2ViVmlldyBwYWNrYWdlIGlzIHVwZGF0ZWQgdGhpcyBhcHBsaWNhdGlvbiB3aWxsIGJlIGtpbGxlZC4KKyAgICAgICAgICAgICAgICB3ZWJWaWV3Q29udGV4dCA9IGluaXRpYWxBcHBsaWNhdGlvbi5jcmVhdGVQYWNrYWdlQ29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNQYWNrYWdlSW5mby5wYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQuQ09OVEVYVF9JTkNMVURFX0NPREUgfCBDb250ZXh0LkNPTlRFWFRfSUdOT1JFX1NFQ1VSSVRZKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1dFQlZJRVcpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19XRUJWSUVXLCAiV2ViVmlld0ZhY3RvcnkubG9hZE5hdGl2ZUxpYnJhcnkoKSIpOwogICAgICAgICAgICAgbG9hZE5hdGl2ZUxpYnJhcnkoKTsKICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19XRUJWSUVXKTsKIAogICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfV0VCVklFVywgIldlYlZpZXdGYWN0b3J5LmdldENocm9taXVtUHJvdmlkZXJDbGFzcygpIik7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiBnZXRDaHJvbWl1bVByb3ZpZGVyQ2xhc3MoKTsKKyAgICAgICAgICAgICAgICBpbml0aWFsQXBwbGljYXRpb24uZ2V0QXNzZXRzKCkuYWRkQXNzZXRQYXRoQXNTaGFyZWRMaWJyYXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgd2ViVmlld0NvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkuc291cmNlRGlyKTsKKyAgICAgICAgICAgICAgICBDbGFzc0xvYWRlciBjbGF6ekxvYWRlciA9IHdlYlZpZXdDb250ZXh0LmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfV0VCVklFVywgIkNsYXNzLmZvck5hbWUoKSIpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoQ2xhc3M8V2ViVmlld0ZhY3RvcnlQcm92aWRlcj4pIENsYXNzLmZvck5hbWUoQ0hST01JVU1fV0VCVklFV19GQUNUT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGNsYXp6TG9hZGVyKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfV0VCVklFVyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiZXJyb3IgbG9hZGluZyBwcm92aWRlciIsIGUpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBBbmRyb2lkUnVudGltZUV4Y2VwdGlvbihlKTsKQEAgLTIzOSwzMCArMzQ3LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIHRocm93cyBNaXNzaW5nV2ViVmlld1BhY2thZ2VFeGNlcHRpb24KLSAgICBwcml2YXRlIHN0YXRpYyBDbGFzczxXZWJWaWV3RmFjdG9yeVByb3ZpZGVyPiBnZXRDaHJvbWl1bVByb3ZpZGVyQ2xhc3MoKQotICAgICAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBBcHBsaWNhdGlvbiBpbml0aWFsQXBwbGljYXRpb24gPSBBcHBHbG9iYWxzLmdldEluaXRpYWxBcHBsaWNhdGlvbigpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFja2FnZSBjb250ZXh0IHRvIGxvYWQgdGhlIEphdmEgY29kZSBpbnRvIHRoZSBjdXJyZW50IGFwcC4KLSAgICAgICAgICAgIENvbnRleHQgd2ViVmlld0NvbnRleHQgPSBpbml0aWFsQXBwbGljYXRpb24uY3JlYXRlUGFja2FnZUNvbnRleHQoCi0gICAgICAgICAgICAgICAgICAgIHNQYWNrYWdlSW5mby5wYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgQ29udGV4dC5DT05URVhUX0lOQ0xVREVfQ09ERSB8IENvbnRleHQuQ09OVEVYVF9JR05PUkVfU0VDVVJJVFkpOwotICAgICAgICAgICAgaW5pdGlhbEFwcGxpY2F0aW9uLmdldEFzc2V0cygpLmFkZEFzc2V0UGF0aEFzU2hhcmVkTGlicmFyeSgKLSAgICAgICAgICAgICAgICAgICAgd2ViVmlld0NvbnRleHQuZ2V0QXBwbGljYXRpb25JbmZvKCkuc291cmNlRGlyKTsKLSAgICAgICAgICAgIENsYXNzTG9hZGVyIGNsYXp6TG9hZGVyID0gd2ViVmlld0NvbnRleHQuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVHJhY2UuVFJBQ0VfVEFHX1dFQlZJRVcsICJDbGFzcy5mb3JOYW1lKCkiKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChDbGFzczxXZWJWaWV3RmFjdG9yeVByb3ZpZGVyPikgQ2xhc3MuZm9yTmFtZShDSFJPTUlVTV9XRUJWSUVXX0ZBQ1RPUlksIHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGF6ekxvYWRlcik7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRyYWNlLlRSQUNFX1RBR19XRUJWSUVXKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nV2ViVmlld1BhY2thZ2VFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvKioKICAgICAgKiBQZXJmb3JtIGFueSBXZWJWaWV3IGxvYWRpbmcgcHJlcGFyYXRpb25zIHRoYXQgbXVzdCBoYXBwZW4gaW4gdGhlIHp5Z290ZS4KICAgICAgKiBDdXJyZW50bHksIHRoaXMgbWVhbnMgYWxsb2NhdGluZyBhZGRyZXNzIHNwYWNlIHRvIGxvYWQgdGhlIHJlYWwgSk5JIGxpYnJhcnkgbGF0ZXIuCkBAIC0yODksNDQgKzM3MywzNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogUGVyZm9ybSBhbnkgV2ViVmlldyBsb2FkaW5nIHByZXBhcmF0aW9ucyB0aGF0IG11c3QgaGFwcGVuIGF0IGJvb3QgZnJvbSB0aGUgc3lzdGVtIHNlcnZlciwKLSAgICAgKiBhZnRlciB0aGUgcGFja2FnZSBtYW5hZ2VyIGhhcyBzdGFydGVkIG9yIGFmdGVyIGFuIHVwZGF0ZSB0byB0aGUgd2VidmlldyBpcyBpbnN0YWxsZWQuCi0gICAgICogVGhpcyBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgc3lzdGVtIHNlcnZlci4KLSAgICAgKiBDdXJyZW50bHksIHRoaXMgbWVhbnMgc3Bhd25pbmcgdGhlIGNoaWxkIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNyZWF0ZSB0aGUgcmVscm8gZmlsZXMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoKSB7Ci0gICAgICAgIFN0cmluZ1tdIG5hdGl2ZVBhdGhzID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5hdGl2ZVBhdGhzID0gZ2V0V2ViVmlld05hdGl2ZUxpYnJhcnlQYXRocygpOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgLy8gTG9nIGFuZCBkaXNjYXJkIGVycm9ycyBhdCB0aGlzIHN0YWdlIGFzIHdlIG11c3Qgbm90IGNyYXNoIHRoZSBzeXN0ZW0gc2VydmVyLgotICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiZXJyb3IgcHJlcGFyaW5nIHdlYnZpZXcgbmF0aXZlIGxpYnJhcnkiLCB0KTsKLSAgICAgICAgfQotICAgICAgICBwcmVwYXJlV2ViVmlld0luU3lzdGVtU2VydmVyKG5hdGl2ZVBhdGhzKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoU3RyaW5nW10gbmF0aXZlTGlicmFyeVBhdGhzKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoU3RyaW5nW10gbmF0aXZlTGlicmFyeVBhdGhzKSB7CiAgICAgICAgIGlmIChERUJVRykgTG9nLnYoTE9HVEFHLCAiY3JlYXRpbmcgcmVscm8gZmlsZXMiKTsKKyAgICAgICAgaW50IG51bVJlbHJvcyA9IDA7CiAKICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgdHJpZ2dlciBjcmVhdGVSZWxSbyByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBuYXRpdmVMaWJyYXJ5UGF0aHMuIEFueQogICAgICAgICAvLyB1bmV4cGVjdGVkIHZhbHVlcyB3aWxsIGJlIGhhbmRsZWQgdGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgdHJpZ2dlciBub3RpZnlpbmcgYW55IHByb2Nlc3MKLSAgICAgICAgLy8gd2FpdGluZyBvbiByZWxyZW8gY3JlYXRpb24uCisgICAgICAgIC8vIHdhaXRpbmcgb24gcmVscm8gY3JlYXRpb24uCiAgICAgICAgIGlmIChCdWlsZC5TVVBQT1JURURfMzJfQklUX0FCSVMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihMT0dUQUcsICJDcmVhdGUgMzIgYml0IHJlbHJvIik7CiAgICAgICAgICAgICBjcmVhdGVSZWxyb0ZpbGUoZmFsc2UgLyogaXM2NEJpdCAqLywgbmF0aXZlTGlicmFyeVBhdGhzKTsKKyAgICAgICAgICAgIG51bVJlbHJvcysrOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKEJ1aWxkLlNVUFBPUlRFRF82NF9CSVRfQUJJUy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KExPR1RBRywgIkNyZWF0ZSA2NCBiaXQgcmVscm8iKTsKICAgICAgICAgICAgIGNyZWF0ZVJlbHJvRmlsZSh0cnVlIC8qIGlzNjRCaXQgKi8sIG5hdGl2ZUxpYnJhcnlQYXRocyk7CisgICAgICAgICAgICBudW1SZWxyb3MrKzsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVtUmVscm9zOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBvbldlYlZpZXdVcGRhdGVJbnN0YWxsZWQoKSB7CisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGludCBvbldlYlZpZXdQcm92aWRlckNoYW5nZWQoUGFja2FnZUluZm8gcGFja2FnZUluZm8pIHsKICAgICAgICAgU3RyaW5nW10gbmF0aXZlTGlicyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBuYXRpdmVMaWJzID0gV2ViVmlld0ZhY3RvcnkuZ2V0V2ViVmlld05hdGl2ZUxpYnJhcnlQYXRocygpOworICAgICAgICAgICAgbmF0aXZlTGlicyA9IFdlYlZpZXdGYWN0b3J5LmdldFdlYlZpZXdOYXRpdmVMaWJyYXJ5UGF0aHMocGFja2FnZUluZm8pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUxpYnMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGxvbmcgbmV3Vm1TaXplID0gMEw7CiAKQEAgLTM3Myw3ICs0NDcsNyBAQAogICAgICAgICAgICAgLy8gTG9nIGFuZCBkaXNjYXJkIGVycm9ycyBhdCB0aGlzIHN0YWdlIGFzIHdlIG11c3Qgbm90IGNyYXNoIHRoZSBzeXN0ZW0gc2VydmVyLgogICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiZXJyb3IgcHJlcGFyaW5nIHdlYnZpZXcgbmF0aXZlIGxpYnJhcnkiLCB0KTsKICAgICAgICAgfQotICAgICAgICBwcmVwYXJlV2ViVmlld0luU3lzdGVtU2VydmVyKG5hdGl2ZUxpYnMpOworICAgICAgICByZXR1cm4gcHJlcGFyZVdlYlZpZXdJblN5c3RlbVNlcnZlcihuYXRpdmVMaWJzKTsKICAgICB9CiAKICAgICAvLyB0aHJvd3MgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uCkBAIC0zOTcsOCArNDcxLDggQEAKICAgICB9CiAKICAgICAvLyB0aHJvd3MgTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gZ2V0V2ViVmlld05hdGl2ZUxpYnJhcnlQYXRocygpIHsKLSAgICAgICAgQXBwbGljYXRpb25JbmZvIGFpID0gZ2V0V2ViVmlld0FwcGxpY2F0aW9uSW5mbygpOworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZ1tdIGdldFdlYlZpZXdOYXRpdmVMaWJyYXJ5UGF0aHMoUGFja2FnZUluZm8gcGFja2FnZUluZm8pIHsKKyAgICAgICAgQXBwbGljYXRpb25JbmZvIGFpID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvOwogICAgICAgICBmaW5hbCBTdHJpbmcgTkFUSVZFX0xJQl9GSUxFX05BTUUgPSBnZXRXZWJWaWV3TGlicmFyeShhaSk7CiAKICAgICAgICAgU3RyaW5nIHBhdGgzMjsKQEAgLTQ2MCw3ICs1MzQsNyBAQAogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR1RBRywgInJlbHJvIGZpbGUgY3JlYXRvciBmb3IgIiArIGFiaSArICIgY3Jhc2hlZC4gUHJvY2VlZGluZyB3aXRob3V0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGdldFVwZGF0ZVNlcnZpY2UoKS5ub3RpZnlSZWxyb0NyZWF0aW9uQ29tcGxldGVkKGlzNjRCaXQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0VXBkYXRlU2VydmljZSgpLm5vdGlmeVJlbHJvQ3JlYXRpb25Db21wbGV0ZWQoKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cuZShMT0dUQUcsICJDYW5ub3QgcmVhY2ggV2ViVmlld1VwZGF0ZVNlcnZpY2UuICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTA4LDcgKzU4Miw3IEBACiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIC8vIFdlIG11c3QgZG8gb3VyIGJlc3QgdG8gYWx3YXlzIG5vdGlmeSB0aGUgdXBkYXRlIHNlcnZpY2UsIGV2ZW4gaWYgc29tZXRoaW5nIGZhaWxzLgogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldFVwZGF0ZVNlcnZpY2UoKS5ub3RpZnlSZWxyb0NyZWF0aW9uQ29tcGxldGVkKGlzNjRCaXQsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGdldFVwZGF0ZVNlcnZpY2UoKS5ub3RpZnlSZWxyb0NyZWF0aW9uQ29tcGxldGVkKCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiZXJyb3Igbm90aWZ5aW5nIHVwZGF0ZSBzZXJ2aWNlIiwgZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTIxLDM1ICs1OTUsMzggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgc3RhdGljIGludCB3YWl0Rm9yUHJvdmlkZXJBbmRTZXRQYWNrYWdlSW5mbygpIHsKKyAgICAgICAgV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2UgcmVzcG9uc2UgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVzcG9uc2UgPQorICAgICAgICAgICAgICAgIGdldFVwZGF0ZVNlcnZpY2UoKS53YWl0Rm9yQW5kR2V0UHJvdmlkZXIoKTsKKyAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gV2ViVmlld0ZhY3RvcnkuTElCTE9BRF9TVUNDRVNTKQorICAgICAgICAgICAgICAgIHNQYWNrYWdlSW5mbyA9IHJlc3BvbnNlLnBhY2thZ2VJbmZvOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiZXJyb3Igd2FpdGluZyBmb3IgcmVscm8gY3JlYXRpb24iLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9XRUJWSUVXX1JFQVNPTl9VTktOT1dOOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXNwb25zZS5zdGF0dXM7CisgICAgfQorCisgICAgLy8gQXNzdW1lcyB0aGF0IHdlIGhhdmUgd2FpdGVkIGZvciByZWxybyBjcmVhdGlvbiBhbmQgc2V0IHNQYWNrYWdlSW5mbwogICAgIHByaXZhdGUgc3RhdGljIGludCBsb2FkTmF0aXZlTGlicmFyeSgpIHsKICAgICAgICAgaWYgKCFzQWRkcmVzc1NwYWNlUmVzZXJ2ZWQpIHsKICAgICAgICAgICAgIExvZy5lKExPR1RBRywgImNhbid0IGxvYWQgd2l0aCByZWxybyBmaWxlOyBhZGRyZXNzIHNwYWNlIG5vdCByZXNlcnZlZCIpOwogICAgICAgICAgICAgcmV0dXJuIExJQkxPQURfQUREUkVTU19TUEFDRV9OT1RfUkVTRVJWRUQ7CiAgICAgICAgIH0KIAotICAgICAgICB0cnkgewotICAgICAgICAgICAgZ2V0VXBkYXRlU2VydmljZSgpLndhaXRGb3JSZWxyb0NyZWF0aW9uQ29tcGxldGVkKFZNUnVudGltZS5nZXRSdW50aW1lKCkuaXM2NEJpdCgpKTsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKExPR1RBRywgImVycm9yIHdhaXRpbmcgZm9yIHJlbHJvIGNyZWF0aW9uLCBwcm9jZWVkaW5nIHdpdGhvdXQiLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBMSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9SRUxSTzsKKyAgICAgICAgU3RyaW5nW10gYXJncyA9IGdldFdlYlZpZXdOYXRpdmVMaWJyYXJ5UGF0aHMoc1BhY2thZ2VJbmZvKTsKKyAgICAgICAgaW50IHJlc3VsdCA9IG5hdGl2ZUxvYWRXaXRoUmVscm9GaWxlKGFyZ3NbMF0gLyogcGF0aDMyICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0gLyogcGF0aDY0ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dFQlZJRVdfTkFUSVZFX1JFTFJPXzMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dFQlZJRVdfTkFUSVZFX1JFTFJPXzY0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBMSUJMT0FEX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIExvZy53KExPR1RBRywgImZhaWxlZCB0byBsb2FkIHdpdGggcmVscm8gZmlsZSwgcHJvY2VlZGluZyB3aXRob3V0Iik7CisgICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgIExvZy52KExPR1RBRywgImxvYWRlZCB3aXRoIHJlbHJvIGZpbGUiKTsKICAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBhcmdzID0gZ2V0V2ViVmlld05hdGl2ZUxpYnJhcnlQYXRocygpOwotICAgICAgICAgICAgaW50IHJlc3VsdCA9IG5hdGl2ZUxvYWRXaXRoUmVscm9GaWxlKGFyZ3NbMF0gLyogcGF0aDMyICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzFdIC8qIHBhdGg2NCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hST01JVU1fV0VCVklFV19OQVRJVkVfUkVMUk9fMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIUk9NSVVNX1dFQlZJRVdfTkFUSVZFX1JFTFJPXzY0KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gTElCTE9BRF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgTG9nLncoTE9HVEFHLCAiZmFpbGVkIHRvIGxvYWQgd2l0aCByZWxybyBmaWxlLCBwcm9jZWVkaW5nIHdpdGhvdXQiKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cudihMT0dUQUcsICJsb2FkZWQgd2l0aCByZWxybyBmaWxlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9IGNhdGNoIChNaXNzaW5nV2ViVmlld1BhY2thZ2VFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmUoTE9HVEFHLCAiRmFpbGVkIHRvIGxpc3QgV2ViVmlldyBwYWNrYWdlIGxpYnJhcmllcyBmb3IgbG9hZE5hdGl2ZUxpYnJhcnkiLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBMSUJMT0FEX0ZBSUxFRF9MSVNUSU5HX1dFQlZJRVdfUEFDS0FHRVM7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBJV2ViVmlld1VwZGF0ZVNlcnZpY2UgZ2V0VXBkYXRlU2VydmljZSgpIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJJbmZvLmFpZGwKc2ltaWxhcml0eSBpbmRleCA2MyUKY29weSBmcm9tIHRlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YQpjb3B5IHRvIGNvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJJbmZvLmFpZGwKaW5kZXggYTllMTc3Ny4uODJlNWE3OSAxMDA2NDQKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hCYXNlVGVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJJbmZvLmFpZGwKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAgKgogICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCwxMyArMTQsNiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworcGFja2FnZSBhbmRyb2lkLndlYmtpdDsKIAotaW50ZXJmYWNlIFJzQmVuY2hCYXNlVGVzdCB7Ci0gICAgYm9vbGVhbiBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKTsKLQotICAgIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVtdIGdldFRlc3RzKCk7Ci0gICAgU3RyaW5nW10gZ2V0VGVzdE5hbWVzKCk7Ci19CitwYXJjZWxhYmxlIFdlYlZpZXdQcm92aWRlckluZm87CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld1Byb3ZpZGVySW5mby5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdQcm92aWRlckluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjUwZmUyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdQcm92aWRlckluZm8uamF2YQpAQCAtMCwwICsxLDE4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC53ZWJraXQ7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2lnbmF0dXJlOworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5BbmRyb2lkUnVudGltZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQmFzZTY0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgV2ViVmlld1Byb3ZpZGVySW5mbyBpbXBsZW1lbnRzIFBhcmNlbGFibGUgeworCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFdlYlZpZXdQYWNrYWdlTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBBbmRyb2lkUnVudGltZUV4Y2VwdGlvbiB7CisgICAgICAgIHB1YmxpYyBXZWJWaWV3UGFja2FnZU5vdEZvdW5kRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7IHN1cGVyKG1lc3NhZ2UpOyB9CisgICAgICAgIHB1YmxpYyBXZWJWaWV3UGFja2FnZU5vdEZvdW5kRXhjZXB0aW9uKEV4Y2VwdGlvbiBlKSB7IHN1cGVyKGUpOyB9CisgICAgfQorCisgICAgcHVibGljIFdlYlZpZXdQcm92aWRlckluZm8oU3RyaW5nIHBhY2thZ2VOYW1lLCBTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBhdmFpbGFibGVCeURlZmF1bHQsCisgICAgICAgICAgICBTdHJpbmdbXSBzaWduYXR1cmVzKSB7CisgICAgICAgIHRoaXMucGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uOworICAgICAgICB0aGlzLmF2YWlsYWJsZUJ5RGVmYXVsdCA9IGF2YWlsYWJsZUJ5RGVmYXVsdC5lcXVhbHMoInRydWUiKTsKKyAgICAgICAgdGhpcy5zaWduYXR1cmVzID0gc2lnbmF0dXJlczsKKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzVmFsaWRTaWduYXR1cmUoKSB7CisgICAgICAgIGlmIChCdWlsZC5JU19ERUJVR0dBQkxFKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIFNpZ25hdHVyZVtdIHBhY2thZ2VTaWduYXR1cmVzOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gSWYgbm8gc2lnbmF0dXJlIGlzIGRlY2xhcmVkLCBpbnN0ZWFkIGNoZWNrIHdoZXRoZXIgdGhlIHBhY2thZ2UgaXMgaW5jbHVkZWQgaW4gdGhlCisgICAgICAgICAgICAvLyBzeXN0ZW0uCisgICAgICAgICAgICBpZiAoc2lnbmF0dXJlcyA9PSBudWxsIHx8IHNpZ25hdHVyZXMubGVuZ3RoID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBhY2thZ2VJbmZvKCkuYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCk7CisKKyAgICAgICAgICAgIHBhY2thZ2VTaWduYXR1cmVzID0gZ2V0UGFja2FnZUluZm8oKS5zaWduYXR1cmVzOworICAgICAgICB9IGNhdGNoIChXZWJWaWV3UGFja2FnZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFja2FnZVNpZ25hdHVyZXMubGVuZ3RoICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZmluYWwgYnl0ZVtdIHBhY2thZ2VTaWduYXR1cmUgPSBwYWNrYWdlU2lnbmF0dXJlc1swXS50b0J5dGVBcnJheSgpOworICAgICAgICAvLyBSZXR1cm4gd2hldGhlciB0aGUgcGFja2FnZSBzaWduYXR1cmUgbWF0Y2hlcyBhbnkgb2YgdGhlIHZhbGlkIHNpZ25hdHVyZXMKKyAgICAgICAgZm9yIChTdHJpbmcgc2lnbmF0dXJlIDogc2lnbmF0dXJlcykgeworICAgICAgICAgICAgZmluYWwgYnl0ZVtdIHZhbGlkU2lnbmF0dXJlID0gQmFzZTY0LmRlY29kZShzaWduYXR1cmUsIEJhc2U2NC5ERUZBVUxUKTsKKyAgICAgICAgICAgIGlmIChBcnJheXMuZXF1YWxzKHBhY2thZ2VTaWduYXR1cmUsIHZhbGlkU2lnbmF0dXJlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgcHJvdmlkZXIgaXMgdmFsaWQgZm9yIHVzZSBhcyBhIFdlYlZpZXcgcHJvdmlkZXIuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZFByb3ZpZGVyKCkgeworICAgICAgICBBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25JbmZvOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYXBwbGljYXRpb25JbmZvID0gZ2V0UGFja2FnZUluZm8oKS5hcHBsaWNhdGlvbkluZm87CisgICAgICAgIH0gY2F0Y2ggKFdlYlZpZXdQYWNrYWdlTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChoYXNWYWxpZFNpZ25hdHVyZSgpICYmIFdlYlZpZXdGYWN0b3J5LmdldFdlYlZpZXdMaWJyYXJ5KGFwcGxpY2F0aW9uSW5mbykgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGlzIHBhY2thZ2UgaXMgZW5hYmxlZC4KKyAgICAgKiBUaGlzIHN0YXRlIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGZyb20gU2V0dGluZ3MtPkFwcHMKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0VuYWJsZWQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IEFwcEdsb2JhbHMuZ2V0SW5pdGlhbEFwcGxpY2F0aW9uKCkuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgICAgICAgICAgIGludCBlbmFibGVkX3N0YXRlID0gcG0uZ2V0QXBwbGljYXRpb25FbmFibGVkU2V0dGluZyhwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBzd2l0Y2ggKGVuYWJsZWRfc3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0VOQUJMRUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGNhc2UgUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfREVGQVVMVDoKKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25JbmZvIGFwcGxpY2F0aW9uSW5mbyA9IGdldFBhY2thZ2VJbmZvKCkuYXBwbGljYXRpb25JbmZvOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbGljYXRpb25JbmZvLmVuYWJsZWQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChXZWJWaWV3UGFja2FnZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFRocm93biBieSBQYWNrYWdlTWFuYWdlci5nZXRBcHBsaWNhdGlvbkVuYWJsZWRTZXR0aW5nIGlmIHRoZSBwYWNrYWdlIGRvZXMgbm90IGV4aXN0CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHByb3ZpZGVyIGlzIGFsd2F5cyBhdmFpbGFibGUgYXMgbG9uZyBhcyBpdCBpcyB2YWxpZC4KKyAgICAgKiBJZiB0aGlzIHJldHVybnMgZmFsc2UsIHRoZSBwcm92aWRlciB3aWxsIG9ubHkgYmUgdXNlZCBpZiB0aGUgdXNlciBjaG9zZSB0aGlzIHByb3ZpZGVyLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQXZhaWxhYmxlQnlEZWZhdWx0KCkgeworICAgICAgICByZXR1cm4gYXZhaWxhYmxlQnlEZWZhdWx0OworICAgIH0KKworICAgIHB1YmxpYyBQYWNrYWdlSW5mbyBnZXRQYWNrYWdlSW5mbygpIHsKKyAgICAgICAgaWYgKHBhY2thZ2VJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBBcHBHbG9iYWxzLmdldEluaXRpYWxBcHBsaWNhdGlvbigpLmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgICAgICAgICAgcGFja2FnZUluZm8gPSBwbS5nZXRQYWNrYWdlSW5mbyhwYWNrYWdlTmFtZSwgUEFDS0FHRV9GTEFHUyk7CisgICAgICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBXZWJWaWV3UGFja2FnZU5vdEZvdW5kRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWNrYWdlSW5mbzsKKyAgICB9CisKKyAgICAvLyBhaWRsIHN0dWZmCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8V2ViVmlld1Byb3ZpZGVySW5mbz4gQ1JFQVRPUiA9CisgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8V2ViVmlld1Byb3ZpZGVySW5mbz4oKSB7CisgICAgICAgICAgICBwdWJsaWMgV2ViVmlld1Byb3ZpZGVySW5mbyBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2ViVmlld1Byb3ZpZGVySW5mbyhpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBXZWJWaWV3UHJvdmlkZXJJbmZvW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdlYlZpZXdQcm92aWRlckluZm9bc2l6ZV07CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICBwcml2YXRlIFdlYlZpZXdQcm92aWRlckluZm8oUGFyY2VsIGluKSB7CisgICAgICAgIHBhY2thZ2VOYW1lID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICBkZXNjcmlwdGlvbiA9IGluLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgc2lnbmF0dXJlcyA9IGluLmNyZWF0ZVN0cmluZ0FycmF5KCk7CisgICAgICAgIHBhY2thZ2VJbmZvID0gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIG91dCwgaW50IGZsYWdzKSB7CisgICAgICAgIG91dC53cml0ZVN0cmluZyhwYWNrYWdlTmFtZSk7CisgICAgICAgIG91dC53cml0ZVN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIG91dC53cml0ZVN0cmluZ0FycmF5KHNpZ25hdHVyZXMpOworICAgIH0KKworICAgIC8vIGZpZWxkcyByZWFkIGZyb20gZnJhbWV3b3JrIHJlc291cmNlCisgICAgcHVibGljIFN0cmluZyBwYWNrYWdlTmFtZTsKKyAgICBwdWJsaWMgU3RyaW5nIGRlc2NyaXB0aW9uOworICAgIHByaXZhdGUgYm9vbGVhbiBhdmFpbGFibGVCeURlZmF1bHQ7CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIHNpZ25hdHVyZXM7CisKKyAgICBwcml2YXRlIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvOworCisgICAgLy8gZmxhZ3MgZGVjbGFyaW5nIHdlIHdhbnQgZXh0cmEgaW5mbyBmcm9tIHRoZSBwYWNrYWdlIG1hbmFnZXIKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgUEFDS0FHRV9GTEFHUyA9IFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEKKyAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX1NJR05BVFVSRVMgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkc7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaEJhc2VUZXN0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93ZWJraXQvV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2UuYWlkbApzaW1pbGFyaXR5IGluZGV4IDYzJQpjb3B5IGZyb20gdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hCYXNlVGVzdC5qYXZhCmNvcHkgdG8gY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdQcm92aWRlclJlc3BvbnNlLmFpZGwKaW5kZXggYTllMTc3Ny4uOWM4ODRjYyAxMDA2NDQKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hCYXNlVGVzdC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJSZXNwb25zZS5haWRsCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTQsMTMgKzE0LDYgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgY29tLmFuZHJvaWQucGVyZnRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK3BhY2thZ2UgYW5kcm9pZC53ZWJraXQ7CiAKLWludGVyZmFjZSBSc0JlbmNoQmFzZVRlc3QgewotICAgIGJvb2xlYW4gaW5pdChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcyk7Ci0KLSAgICBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bXSBnZXRUZXN0cygpOwotICAgIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpOwotfQorcGFyY2VsYWJsZSBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJSZXNwb25zZS5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2Via2l0L1dlYlZpZXdQcm92aWRlclJlc3BvbnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVlMDllMgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dlYmtpdC9XZWJWaWV3UHJvdmlkZXJSZXNwb25zZS5qYXZhCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2Via2l0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworLyoqIEBoaWRlICovCitwdWJsaWMgY2xhc3MgV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2UgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKworICAgIHB1YmxpYyBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZShQYWNrYWdlSW5mbyBwYWNrYWdlSW5mbywgaW50IHN0YXR1cykgeworICAgICAgICB0aGlzLnBhY2thZ2VJbmZvID0gcGFja2FnZUluZm87CisgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzOworICAgIH0KKworICAgIC8vIGFpZGwgc3R1ZmYKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxXZWJWaWV3UHJvdmlkZXJSZXNwb25zZT4gQ1JFQVRPUiA9CisgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8V2ViVmlld1Byb3ZpZGVyUmVzcG9uc2U+KCkgeworICAgICAgICAgICAgcHVibGljIFdlYlZpZXdQcm92aWRlclJlc3BvbnNlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIGluKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZShpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1YmxpYyBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZVtdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZVtzaXplXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgIHByaXZhdGUgV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2UoUGFyY2VsIGluKSB7CisgICAgICAgIHBhY2thZ2VJbmZvID0gaW4ucmVhZFR5cGVkT2JqZWN0KFBhY2thZ2VJbmZvLkNSRUFUT1IpOworICAgICAgICBzdGF0dXMgPSBpbi5yZWFkSW50KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZVRvUGFyY2VsKFBhcmNlbCBvdXQsIGludCBmbGFncykgeworICAgICAgICBvdXQud3JpdGVUeXBlZE9iamVjdChwYWNrYWdlSW5mbywgZmxhZ3MpOworICAgICAgICBvdXQud3JpdGVJbnQoc3RhdHVzKTsKKyAgICB9CisKKyAgICBQYWNrYWdlSW5mbyBwYWNrYWdlSW5mbzsKKyAgICBpbnQgc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BYnNTZWVrQmFyLmphdmEKaW5kZXggY2Y0NTg3ZC4uNGNhODk3MSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0Fic1NlZWtCYXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWJzU2Vla0Jhci5qYXZhCkBAIC00NCw2ICs0NCwxMiBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBtSGFzVGh1bWJUaW50ID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNUaHVtYlRpbnRNb2RlID0gZmFsc2U7CiAKKyAgICBwcml2YXRlIERyYXdhYmxlIG1UaWNrTWFyazsKKyAgICBwcml2YXRlIENvbG9yU3RhdGVMaXN0IG1UaWNrTWFya1RpbnRMaXN0ID0gbnVsbDsKKyAgICBwcml2YXRlIFBvcnRlckR1ZmYuTW9kZSBtVGlja01hcmtUaW50TW9kZSA9IG51bGw7CisgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNUaWNrTWFya1RpbnQgPSBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUhhc1RpY2tNYXJrVGludE1vZGUgPSBmYWxzZTsKKwogICAgIHByaXZhdGUgaW50IG1UaHVtYk9mZnNldDsKICAgICBwcml2YXRlIGJvb2xlYW4gbVNwbGl0VHJhY2s7CiAKQEAgLTEwMywxMCArMTA5LDI1IEBACiAgICAgICAgICAgICBtSGFzVGh1bWJUaW50ID0gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIGZpbmFsIERyYXdhYmxlIHRpY2tNYXJrID0gYS5nZXREcmF3YWJsZShSLnN0eWxlYWJsZS5TZWVrQmFyX3RpY2tNYXJrKTsKKyAgICAgICAgc2V0VGlja01hcmsodGlja01hcmspOworCisgICAgICAgIGlmIChhLmhhc1ZhbHVlKFIuc3R5bGVhYmxlLlNlZWtCYXJfdGlja01hcmtUaW50TW9kZSkpIHsKKyAgICAgICAgICAgIG1UaWNrTWFya1RpbnRNb2RlID0gRHJhd2FibGUucGFyc2VUaW50TW9kZShhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuU2Vla0Jhcl90aWNrTWFya1RpbnRNb2RlLCAtMSksIG1UaWNrTWFya1RpbnRNb2RlKTsKKyAgICAgICAgICAgIG1IYXNUaWNrTWFya1RpbnRNb2RlID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhLmhhc1ZhbHVlKFIuc3R5bGVhYmxlLlNlZWtCYXJfdGlja01hcmtUaW50KSkgeworICAgICAgICAgICAgbVRpY2tNYXJrVGludExpc3QgPSBhLmdldENvbG9yU3RhdGVMaXN0KFIuc3R5bGVhYmxlLlNlZWtCYXJfdGlja01hcmtUaW50KTsKKyAgICAgICAgICAgIG1IYXNUaWNrTWFya1RpbnQgPSB0cnVlOworICAgICAgICB9CisKICAgICAgICAgbVNwbGl0VHJhY2sgPSBhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuU2Vla0Jhcl9zcGxpdFRyYWNrLCBmYWxzZSk7CiAKICAgICAgICAgLy8gR3Vlc3MgdGh1bWIgb2Zmc2V0IGlmIHRodW1iICE9IG51bGwsIGJ1dCBhbGxvdyBsYXlvdXQgdG8gb3ZlcnJpZGUuCi0gICAgICAgIGZpbmFsIGludCB0aHVtYk9mZnNldCA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoUi5zdHlsZWFibGUuU2Vla0Jhcl90aHVtYk9mZnNldCwgZ2V0VGh1bWJPZmZzZXQoKSk7CisgICAgICAgIGZpbmFsIGludCB0aHVtYk9mZnNldCA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuU2Vla0Jhcl90aHVtYk9mZnNldCwgZ2V0VGh1bWJPZmZzZXQoKSk7CiAgICAgICAgIHNldFRodW1iT2Zmc2V0KHRodW1iT2Zmc2V0KTsKIAogICAgICAgICBmaW5hbCBib29sZWFuIHVzZURpc2FibGVkQWxwaGEgPSBhLmdldEJvb2xlYW4oUi5zdHlsZWFibGUuU2Vla0Jhcl91c2VEaXNhYmxlZEFscGhhLCB0cnVlKTsKQEAgLTEyMSw2ICsxNDIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgYXBwbHlUaHVtYlRpbnQoKTsKKyAgICAgICAgYXBwbHlUaWNrTWFya1RpbnQoKTsKIAogICAgICAgICBtU2NhbGVkVG91Y2hTbG9wID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KGNvbnRleHQpLmdldFNjYWxlZFRvdWNoU2xvcCgpOwogICAgIH0KQEAgLTMxMyw2ICszMzUsMTIzIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2V0cyB0aGUgZHJhd2FibGUgZGlzcGxheWVkIGF0IGVhY2ggcHJvZ3Jlc3MgcG9zaXRpb24sIGUuZy4gYXQgZWFjaAorICAgICAqIHBvc3NpYmxlIHRodW1iIHBvc2l0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHRpY2tNYXJrIHRoZSBkcmF3YWJsZSB0byBkaXNwbGF5IGF0IGVhY2ggcHJvZ3Jlc3MgcG9zaXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUaWNrTWFyayhEcmF3YWJsZSB0aWNrTWFyaykgeworICAgICAgICBpZiAobVRpY2tNYXJrICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1UaWNrTWFyay5zZXRDYWxsYmFjayhudWxsKTsKKyAgICAgICAgfQorCisgICAgICAgIG1UaWNrTWFyayA9IHRpY2tNYXJrOworCisgICAgICAgIGlmICh0aWNrTWFyayAhPSBudWxsKSB7CisgICAgICAgICAgICB0aWNrTWFyay5zZXRDYWxsYmFjayh0aGlzKTsKKyAgICAgICAgICAgIHRpY2tNYXJrLnNldExheW91dERpcmVjdGlvbihnZXRMYXlvdXREaXJlY3Rpb24oKSk7CisgICAgICAgICAgICBpZiAodGlja01hcmsuaXNTdGF0ZWZ1bCgpKSB7CisgICAgICAgICAgICAgICAgdGlja01hcmsuc2V0U3RhdGUoZ2V0RHJhd2FibGVTdGF0ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGx5VGlja01hcmtUaW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpbnZhbGlkYXRlKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB0aGUgZHJhd2FibGUgZGlzcGxheWVkIGF0IGVhY2ggcHJvZ3Jlc3MgcG9zaXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgRHJhd2FibGUgZ2V0VGlja01hcmsoKSB7CisgICAgICAgIHJldHVybiBtVGlja01hcms7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwbGllcyBhIHRpbnQgdG8gdGhlIHRpY2sgbWFyayBkcmF3YWJsZS4gRG9lcyBub3QgbW9kaWZ5IHRoZSBjdXJyZW50IHRpbnQKKyAgICAgKiBtb2RlLCB3aGljaCBpcyB7QGxpbmsgUG9ydGVyRHVmZi5Nb2RlI1NSQ19JTn0gYnkgZGVmYXVsdC4KKyAgICAgKiA8cD4KKyAgICAgKiBTdWJzZXF1ZW50IGNhbGxzIHRvIHtAbGluayAjc2V0VGlja01hcmsoRHJhd2FibGUpfSB3aWxsIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBtdXRhdGUgdGhlIGRyYXdhYmxlIGFuZCBhcHBseSB0aGUgc3BlY2lmaWVkIHRpbnQgYW5kIHRpbnQgbW9kZSB1c2luZworICAgICAqIHtAbGluayBEcmF3YWJsZSNzZXRUaW50TGlzdChDb2xvclN0YXRlTGlzdCl9LgorICAgICAqCisgICAgICogQHBhcmFtIHRpbnQgdGhlIHRpbnQgdG8gYXBwbHksIG1heSBiZSB7QGNvZGUgbnVsbH0gdG8gY2xlYXIgdGludAorICAgICAqCisgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjU2Vla0Jhcl90aWNrTWFya1RpbnQKKyAgICAgKiBAc2VlICNnZXRUaWNrTWFya1RpbnRMaXN0KCkKKyAgICAgKiBAc2VlIERyYXdhYmxlI3NldFRpbnRMaXN0KENvbG9yU3RhdGVMaXN0KQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFRpY2tNYXJrVGludExpc3QoQE51bGxhYmxlIENvbG9yU3RhdGVMaXN0IHRpbnQpIHsKKyAgICAgICAgbVRpY2tNYXJrVGludExpc3QgPSB0aW50OworICAgICAgICBtSGFzVGlja01hcmtUaW50ID0gdHJ1ZTsKKworICAgICAgICBhcHBseVRpY2tNYXJrVGludCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHRpbnQgYXBwbGllZCB0byB0aGUgdGljayBtYXJrIGRyYXdhYmxlLCBpZiBzcGVjaWZpZWQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRoZSB0aW50IGFwcGxpZWQgdG8gdGhlIHRpY2sgbWFyayBkcmF3YWJsZQorICAgICAqIEBhdHRyIHJlZiBhbmRyb2lkLlIuc3R5bGVhYmxlI1NlZWtCYXJfdGlja01hcmtUaW50CisgICAgICogQHNlZSAjc2V0VGlja01hcmtUaW50TGlzdChDb2xvclN0YXRlTGlzdCkKKyAgICAgKi8KKyAgICBATnVsbGFibGUKKyAgICBwdWJsaWMgQ29sb3JTdGF0ZUxpc3QgZ2V0VGlja01hcmtUaW50TGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIG1UaWNrTWFya1RpbnRMaXN0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFNwZWNpZmllcyB0aGUgYmxlbmRpbmcgbW9kZSB1c2VkIHRvIGFwcGx5IHRoZSB0aW50IHNwZWNpZmllZCBieQorICAgICAqIHtAbGluayAjc2V0VGlja01hcmtUaW50TGlzdChDb2xvclN0YXRlTGlzdCl9fSB0byB0aGUgdGljayBtYXJrIGRyYXdhYmxlLiBUaGUKKyAgICAgKiBkZWZhdWx0IG1vZGUgaXMge0BsaW5rIFBvcnRlckR1ZmYuTW9kZSNTUkNfSU59LgorICAgICAqCisgICAgICogQHBhcmFtIHRpbnRNb2RlIHRoZSBibGVuZGluZyBtb2RlIHVzZWQgdG8gYXBwbHkgdGhlIHRpbnQsIG1heSBiZQorICAgICAqICAgICAgICAgICAgICAgICB7QGNvZGUgbnVsbH0gdG8gY2xlYXIgdGludAorICAgICAqCisgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjU2Vla0Jhcl90aWNrTWFya1RpbnRNb2RlCisgICAgICogQHNlZSAjZ2V0VGlja01hcmtUaW50TW9kZSgpCisgICAgICogQHNlZSBEcmF3YWJsZSNzZXRUaW50TW9kZShQb3J0ZXJEdWZmLk1vZGUpCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0VGlja01hcmtUaW50TW9kZShATnVsbGFibGUgUG9ydGVyRHVmZi5Nb2RlIHRpbnRNb2RlKSB7CisgICAgICAgIG1UaWNrTWFya1RpbnRNb2RlID0gdGludE1vZGU7CisgICAgICAgIG1IYXNUaWNrTWFya1RpbnRNb2RlID0gdHJ1ZTsKKworICAgICAgICBhcHBseVRpY2tNYXJrVGludCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGJsZW5kaW5nIG1vZGUgdXNlZCB0byBhcHBseSB0aGUgdGludCB0byB0aGUgdGljayBtYXJrIGRyYXdhYmxlLAorICAgICAqIGlmIHNwZWNpZmllZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIGJsZW5kaW5nIG1vZGUgdXNlZCB0byBhcHBseSB0aGUgdGludCB0byB0aGUgdGljayBtYXJrIGRyYXdhYmxlCisgICAgICogQGF0dHIgcmVmIGFuZHJvaWQuUi5zdHlsZWFibGUjU2Vla0Jhcl90aWNrTWFya1RpbnRNb2RlCisgICAgICogQHNlZSAjc2V0VGlja01hcmtUaW50TW9kZShQb3J0ZXJEdWZmLk1vZGUpCisgICAgICovCisgICAgQE51bGxhYmxlCisgICAgcHVibGljIFBvcnRlckR1ZmYuTW9kZSBnZXRUaWNrTWFya1RpbnRNb2RlKCkgeworICAgICAgICByZXR1cm4gbVRpY2tNYXJrVGludE1vZGU7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFwcGx5VGlja01hcmtUaW50KCkgeworICAgICAgICBpZiAobVRpY2tNYXJrICE9IG51bGwgJiYgKG1IYXNUaWNrTWFya1RpbnQgfHwgbUhhc1RpY2tNYXJrVGludE1vZGUpKSB7CisgICAgICAgICAgICBtVGlja01hcmsgPSBtVGlja01hcmsubXV0YXRlKCk7CisKKyAgICAgICAgICAgIGlmIChtSGFzVGlja01hcmtUaW50KSB7CisgICAgICAgICAgICAgICAgbVRpY2tNYXJrLnNldFRpbnRMaXN0KG1UaWNrTWFya1RpbnRMaXN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1IYXNUaWNrTWFya1RpbnRNb2RlKSB7CisgICAgICAgICAgICAgICAgbVRpY2tNYXJrLnNldFRpbnRNb2RlKG1UaWNrTWFya1RpbnRNb2RlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIGRyYXdhYmxlIChvciBvbmUgb2YgaXRzIGNoaWxkcmVuKSBtYXkgbm90IGhhdmUgYmVlbgorICAgICAgICAgICAgLy8gc3RhdGVmdWwgYmVmb3JlIGFwcGx5aW5nIHRoZSB0aW50LCBzbyBsZXQncyB0cnkgYWdhaW4uCisgICAgICAgICAgICBpZiAobVRpY2tNYXJrLmlzU3RhdGVmdWwoKSkgeworICAgICAgICAgICAgICAgIG1UaWNrTWFyay5zZXRTdGF0ZShnZXREcmF3YWJsZVN0YXRlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogU2V0cyB0aGUgYW1vdW50IG9mIHByb2dyZXNzIGNoYW5nZWQgdmlhIHRoZSBhcnJvdyBrZXlzLgogICAgICAqCiAgICAgICogQHBhcmFtIGluY3JlbWVudCBUaGUgYW1vdW50IHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgd2hlbiB0aGUgdXNlcgpAQCAtMzQ3LDcgKzQ4Niw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlEcmF3YWJsZShEcmF3YWJsZSB3aG8pIHsKLSAgICAgICAgcmV0dXJuIHdobyA9PSBtVGh1bWIgfHwgc3VwZXIudmVyaWZ5RHJhd2FibGUod2hvKTsKKyAgICAgICAgcmV0dXJuIHdobyA9PSBtVGh1bWIgfHwgd2hvID09IG1UaWNrTWFyayB8fCBzdXBlci52ZXJpZnlEcmF3YWJsZSh3aG8pOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzU3LDYgKzQ5NiwxMCBAQAogICAgICAgICBpZiAobVRodW1iICE9IG51bGwpIHsKICAgICAgICAgICAgIG1UaHVtYi5qdW1wVG9DdXJyZW50U3RhdGUoKTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChtVGlja01hcmsgIT0gbnVsbCkgeworICAgICAgICAgICAgbVRpY2tNYXJrLmp1bXBUb0N1cnJlbnRTdGF0ZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0zNzMsNiArNTE2LDEyIEBACiAgICAgICAgICAgICAgICAgJiYgdGh1bWIuc2V0U3RhdGUoZ2V0RHJhd2FibGVTdGF0ZSgpKSkgewogICAgICAgICAgICAgaW52YWxpZGF0ZURyYXdhYmxlKHRodW1iKTsKICAgICAgICAgfQorCisgICAgICAgIGZpbmFsIERyYXdhYmxlIHRpY2tNYXJrID0gbVRpY2tNYXJrOworICAgICAgICBpZiAodGlja01hcmsgIT0gbnVsbCAmJiB0aWNrTWFyay5pc1N0YXRlZnVsKCkKKyAgICAgICAgICAgICAgICAmJiB0aWNrTWFyay5zZXRTdGF0ZShnZXREcmF3YWJsZVN0YXRlKCkpKSB7CisgICAgICAgICAgICBpbnZhbGlkYXRlRHJhd2FibGUodGlja01hcmspOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01MjQsOSArNjczLDM2IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKICAgICAgICAgICAgIGNhbnZhcy5jbGlwUmVjdCh0ZW1wUmVjdCwgT3AuRElGRkVSRU5DRSk7CiAgICAgICAgICAgICBzdXBlci5kcmF3VHJhY2soY2FudmFzKTsKKyAgICAgICAgICAgIGRyYXdUaWNrTWFya3MoY2FudmFzKTsKICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3VwZXIuZHJhd1RyYWNrKGNhbnZhcyk7CisgICAgICAgICAgICBkcmF3VGlja01hcmtzKGNhbnZhcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEcmF3IHRoZSB0aWNrIG1hcmtzLgorICAgICAqLworICAgIHZvaWQgZHJhd1RpY2tNYXJrcyhDYW52YXMgY2FudmFzKSB7CisgICAgICAgIGlmIChtVGlja01hcmsgIT0gbnVsbCkgeworICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gZ2V0TWF4KCk7CisgICAgICAgICAgICBpZiAoY291bnQgPiAxKSB7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHcgPSBtVGlja01hcmsuZ2V0SW50cmluc2ljV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaCA9IG1UaWNrTWFyay5nZXRJbnRyaW5zaWNIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaGFsZlcgPSB3ID49IDAgPyB3IC8gMiA6IDE7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGhhbGZIID0gaCA+PSAwID8gaCAvIDIgOiAxOworICAgICAgICAgICAgICAgIG1UaWNrTWFyay5zZXRCb3VuZHMoLWhhbGZXLCAtaGFsZkgsIGhhbGZXLCBoYWxmSCk7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3BhY2luZyA9IChnZXRXaWR0aCgpIC0gbVBhZGRpbmdMZWZ0IC0gbVBhZGRpbmdSaWdodCkgLyBjb3VudDsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKKyAgICAgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKG1QYWRkaW5nTGVmdCwgZ2V0SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1UaWNrTWFyay5kcmF3KGNhbnZhcyk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoc3BhY2luZywgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC01MzUsMTIgKzcxMSwxMiBAQAogICAgICAqLwogICAgIHZvaWQgZHJhd1RodW1iKENhbnZhcyBjYW52YXMpIHsKICAgICAgICAgaWYgKG1UaHVtYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjYW52YXMuc2F2ZSgpOworICAgICAgICAgICAgZmluYWwgaW50IHNhdmVDb3VudCA9IGNhbnZhcy5zYXZlKCk7CiAgICAgICAgICAgICAvLyBUcmFuc2xhdGUgdGhlIHBhZGRpbmcuIEZvciB0aGUgeCwgd2UgbmVlZCB0byBhbGxvdyB0aGUgdGh1bWIgdG8KICAgICAgICAgICAgIC8vIGRyYXcgaW4gaXRzIGV4dHJhIHNwYWNlCiAgICAgICAgICAgICBjYW52YXMudHJhbnNsYXRlKG1QYWRkaW5nTGVmdCAtIG1UaHVtYk9mZnNldCwgbVBhZGRpbmdUb3ApOwogICAgICAgICAgICAgbVRodW1iLmRyYXcoY2FudmFzKTsKLSAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgICAgICAgICBjYW52YXMucmVzdG9yZVRvQ291bnQoc2F2ZUNvdW50KTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVQcmVzZW50ZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51UHJlc2VudGVyLmphdmEKaW5kZXggMDAzMmYxNy4uYWM4ZDU3OCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVQcmVzZW50ZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvQWN0aW9uTWVudVByZXNlbnRlci5qYXZhCkBAIC0yMCw2ICsyMCw4IEBACiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JMaXN0ZW5lckFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uUHJvcGVydHlWYWx1ZXNIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKQEAgLTU3LDcgKzU5LDYgQEAKICAqLwogcHVibGljIGNsYXNzIEFjdGlvbk1lbnVQcmVzZW50ZXIgZXh0ZW5kcyBCYXNlTWVudVByZXNlbnRlcgogICAgICAgICBpbXBsZW1lbnRzIEFjdGlvblByb3ZpZGVyLlN1YlVpVmlzaWJpbGl0eUxpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFjdGlvbk1lbnVQcmVzZW50ZXIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJVEVNX0FOSU1BVElPTl9EVVJBVElPTiA9IDE1MDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIEFDVElPTkJBUl9BTklNQVRJT05TX0VOQUJMRUQgPSBmYWxzZTsKIApAQCAtODUsMjAgKzg2LDE2IEBACiAgICAgcHJpdmF0ZSBPcGVuT3ZlcmZsb3dSdW5uYWJsZSBtUG9zdGVkT3BlblJ1bm5hYmxlOwogICAgIHByaXZhdGUgQWN0aW9uTWVudVBvcHVwQ2FsbGJhY2sgbVBvcHVwQ2FsbGJhY2s7CiAKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVNob3dDYXNjYWRpbmdNZW51czsKLQogICAgIGZpbmFsIFBvcHVwUHJlc2VudGVyQ2FsbGJhY2sgbVBvcHVwUHJlc2VudGVyQ2FsbGJhY2sgPSBuZXcgUG9wdXBQcmVzZW50ZXJDYWxsYmFjaygpOwogICAgIGludCBtT3BlblN1Yk1lbnVJZDsKIAogICAgIC8vIFRoZXNlIGNvbGxlY3Rpb25zIGFyZSB1c2VkIHRvIHN0b3JlIHByZS0gYW5kIHBvc3QtbGF5b3V0IGluZm9ybWF0aW9uIGZvciBtZW51IGl0ZW1zLAogICAgIC8vIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGFwcHJvcHJpYXRlIGFuaW1hdGlvbnMgdG8gcnVuIGZvciBjaGFuZ2VkIGl0ZW1zLgotICAgIHByaXZhdGUgU3BhcnNlQXJyYXk8TWVudUl0ZW1MYXlvdXRJbmZvPiBtUHJlTGF5b3V0SXRlbXMgPQotICAgICAgICAgICAgbmV3IFNwYXJzZUFycmF5PE1lbnVJdGVtTGF5b3V0SW5mbz4oKTsKLSAgICBwcml2YXRlIFNwYXJzZUFycmF5PE1lbnVJdGVtTGF5b3V0SW5mbz4gbVBvc3RMYXlvdXRJdGVtcyA9Ci0gICAgICAgICAgICBuZXcgU3BhcnNlQXJyYXk8TWVudUl0ZW1MYXlvdXRJbmZvPigpOworICAgIHByaXZhdGUgU3BhcnNlQXJyYXk8TWVudUl0ZW1MYXlvdXRJbmZvPiBtUHJlTGF5b3V0SXRlbXMgPSBuZXcgU3BhcnNlQXJyYXk8PigpOworICAgIHByaXZhdGUgU3BhcnNlQXJyYXk8TWVudUl0ZW1MYXlvdXRJbmZvPiBtUG9zdExheW91dEl0ZW1zID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKIAogICAgIC8vIFRoZSBsaXN0IG9mIGN1cnJlbnRseSBydW5uaW5nIGFuaW1hdGlvbnMgb24gbWVudSBpdGVtcy4KLSAgICBwcml2YXRlIExpc3Q8SXRlbUFuaW1hdGlvbkluZm8+IG1SdW5uaW5nSXRlbUFuaW1hdGlvbnMgPSBuZXcgQXJyYXlMaXN0PEl0ZW1BbmltYXRpb25JbmZvPigpOworICAgIHByaXZhdGUgTGlzdDxJdGVtQW5pbWF0aW9uSW5mbz4gbVJ1bm5pbmdJdGVtQW5pbWF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgIHByaXZhdGUgVmlld1RyZWVPYnNlcnZlci5PblByZURyYXdMaXN0ZW5lciBtSXRlbUFuaW1hdGlvblByZURyYXdMaXN0ZW5lciA9CiAgICAgICAgICAgICBuZXcgVmlld1RyZWVPYnNlcnZlci5PblByZURyYXdMaXN0ZW5lcigpIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xMjgsMTMgKzEyNSwxMCBAQAogICAgIHB1YmxpYyBBY3Rpb25NZW51UHJlc2VudGVyKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzdXBlcihjb250ZXh0LCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmxheW91dC5hY3Rpb25fbWVudV9sYXlvdXQsCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5sYXlvdXQuYWN0aW9uX21lbnVfaXRlbV9sYXlvdXQpOwotCi0gICAgICAgIG1TaG93Q2FzY2FkaW5nTWVudXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5ib29sLmNvbmZpZ19lbmFibGVDYXNjYWRpbmdTdWJtZW51cyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQ29udGV4dCBjb250ZXh0LCBNZW51QnVpbGRlciBtZW51KSB7CisgICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgTWVudUJ1aWxkZXIgbWVudSkgewogICAgICAgICBzdXBlci5pbml0Rm9yTWVudShjb250ZXh0LCBtZW51KTsKIAogICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKQEAgLTYyOSw4ICs2MjMsMTYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBmbGFnQWN0aW9uSXRlbXMoKSB7Ci0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IHZpc2libGVJdGVtcyA9IG1NZW51LmdldFZpc2libGVJdGVtcygpOwotICAgICAgICBmaW5hbCBpbnQgaXRlbXNTaXplID0gdmlzaWJsZUl0ZW1zLnNpemUoKTsKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PE1lbnVJdGVtSW1wbD4gdmlzaWJsZUl0ZW1zOworICAgICAgICBmaW5hbCBpbnQgaXRlbXNTaXplOworICAgICAgICBpZiAobU1lbnUgIT0gbnVsbCkgeworICAgICAgICAgICAgdmlzaWJsZUl0ZW1zID0gbU1lbnUuZ2V0VmlzaWJsZUl0ZW1zKCk7CisgICAgICAgICAgICBpdGVtc1NpemUgPSB2aXNpYmxlSXRlbXMuc2l6ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmlzaWJsZUl0ZW1zID0gbnVsbDsKKyAgICAgICAgICAgIGl0ZW1zU2l6ZSA9IDA7CisgICAgICAgIH0KKwogICAgICAgICBpbnQgbWF4QWN0aW9ucyA9IG1NYXhJdGVtczsKICAgICAgICAgaW50IHdpZHRoTGltaXQgPSBtQWN0aW9uSXRlbVdpZHRoTGltaXQ7CiAgICAgICAgIGZpbmFsIGludCBxdWVyeVNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMCwgTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQpOwpAQCAtNzg2LDcgKzc4OCw3IEBACiAgICAgICAgIGlmIChpc1Zpc2libGUpIHsKICAgICAgICAgICAgIC8vIE5vdCBhIHN1Ym1lbnUsIGJ1dCB0cmVhdCBpdCBsaWtlIG9uZS4KICAgICAgICAgICAgIHN1cGVyLm9uU3ViTWVudVNlbGVjdGVkKG51bGwpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKG1NZW51ICE9IG51bGwpIHsKICAgICAgICAgICAgIG1NZW51LmNsb3NlKGZhbHNlIC8qIGNsb3NlQWxsTWVudXMgKi8pOwogICAgICAgICB9CiAgICAgfQpAQCAtODM1LDggKzgzNyw2IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBjbGFzcyBPdmVyZmxvd01lbnVCdXR0b24gZXh0ZW5kcyBJbWFnZUJ1dHRvbiBpbXBsZW1lbnRzIEFjdGlvbk1lbnVWaWV3LkFjdGlvbk1lbnVDaGlsZFZpZXcgewotICAgICAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVRlbXBQdHMgPSBuZXcgZmxvYXRbMl07Ci0KICAgICAgICAgcHVibGljIE92ZXJmbG93TWVudUJ1dHRvbihDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgICAgIHN1cGVyKGNvbnRleHQsIG51bGwsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5hY3Rpb25PdmVyZmxvd0J1dHRvblN0eWxlKTsKIApAQCAtOTM4LDcgKzkzOCw5IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uRGlzbWlzcygpIHsKLSAgICAgICAgICAgIG1NZW51LmNsb3NlKCk7CisgICAgICAgICAgICBpZiAobU1lbnUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1NZW51LmNsb3NlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtT3ZlcmZsb3dQb3B1cCA9IG51bGw7CiAKICAgICAgICAgICAgIHN1cGVyLm9uRGlzbWlzcygpOwpAQCAtOTk5LDcgKzEwMDEsOSBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgbU1lbnUuY2hhbmdlTWVudU1vZGUoKTsKKyAgICAgICAgICAgIGlmIChtTWVudSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU1lbnUuY2hhbmdlTWVudU1vZGUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIFZpZXcgbWVudVZpZXcgPSAoVmlldykgbU1lbnVWaWV3OwogICAgICAgICAgICAgaWYgKG1lbnVWaWV3ICE9IG51bGwgJiYgbWVudVZpZXcuZ2V0V2luZG93VG9rZW4oKSAhPSBudWxsICYmIG1Qb3B1cC50cnlTaG93KCkpIHsKICAgICAgICAgICAgICAgICBtT3ZlcmZsb3dQb3B1cCA9IG1Qb3B1cDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9BY3Rpb25NZW51Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3LmphdmEKaW5kZXggMWYwMmMzYi4uNGQwYTFjOCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0FjdGlvbk1lbnVWaWV3LmphdmEKQEAgLTYyMiw3ICs2MjIsNyBAQAogICAgIH0KIAogICAgIC8qKiBAaGlkZSAqLwotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoTWVudUJ1aWxkZXIgbWVudSkgeworICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoQE51bGxhYmxlIE1lbnVCdWlsZGVyIG1lbnUpIHsKICAgICAgICAgbU1lbnUgPSBtZW51OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyLmphdmEKaW5kZXggNWY1OTQzZi4uODdiZWU0NCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRGF0ZVBpY2tlci5qYXZhCkBAIC05OTksOCArOTk5LDggQEAKIAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNOZXdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CiAgICAgICAgICAgICByZXR1cm4gKG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuWUVBUikgIT0geWVhcgotICAgICAgICAgICAgICAgICAgICB8fCBtQ3VycmVudERhdGUuZ2V0KENhbGVuZGFyLk1PTlRIKSAhPSBkYXlPZk1vbnRoCi0gICAgICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSAhPSBtb250aCk7CisgICAgICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuTU9OVEgpICE9IG1vbnRoCisgICAgICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50RGF0ZS5nZXQoQ2FsZW5kYXIuREFZX09GX01PTlRIKSAhPSBkYXlPZk1vbnRoKTsKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBzZXREYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXlPZk1vbnRoKSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdG9yLmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRWRpdG9yLmphdmEKaW5kZXggNTE0NmJjNi4uMTU3Njg3NyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0VkaXRvci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9FZGl0b3IuamF2YQpAQCAtNzIsMTQgKzcyLDE3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlLkNhbGxiYWNrOworaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUxpc3RDYW52YXM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRyYWdFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuR3Jhdml0eTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlJlbmRlck5vZGU7CitpbXBvcnQgYW5kcm9pZC52aWV3LlN1Yk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuRHJhZ1NoYWRvd0J1aWxkZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwpAQCAtMTM0LDEzICsxMzcsMTYgQEAKICAgICAvLyBUYWcgdXNlZCB3aGVuIHRoZSBFZGl0b3IgbWFpbnRhaW5zIGl0cyBvd24gc2VwYXJhdGUgVW5kb01hbmFnZXIuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVORE9fT1dORVJfVEFHID0gIkVkaXRvciI7CiAKLSAgICAvLyBPcmRlcmluZyBjb25zdGFudHMgdXNlZCB0byBwbGFjZSB0aGUgQWN0aW9uIE1vZGUgaXRlbXMgaW4gdGhlaXIgbWVudS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX0NVVCA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FTlVfSVRFTV9PUkRFUl9DT1BZID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1BBU1RFID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1NIQVJFID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1NFTEVDVF9BTEwgPSA1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRU5VX0lURU1fT1JERVJfUkVQTEFDRSA9IDY7CisgICAgLy8gT3JkZXJpbmcgY29uc3RhbnRzIHVzZWQgdG8gcGxhY2UgdGhlIEFjdGlvbiBNb2RlIG9yIGNvbnRleHQgbWVudSBpdGVtcyBpbiB0aGVpciBtZW51LgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRU5VX0lURU1fT1JERVJfVU5ETyA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FTlVfSVRFTV9PUkRFUl9SRURPID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX0NVVCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FTlVfSVRFTV9PUkRFUl9DT1BZID0gNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1BBU1RFID0gNTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1BBU1RFX0FTX1BMQUlOX1RFWFQgPSA2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRU5VX0lURU1fT1JERVJfU0hBUkUgPSA3OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRU5VX0lURU1fT1JERVJfU0VMRUNUX0FMTCA9IDg7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FTlVfSVRFTV9PUkRFUl9SRVBMQUNFID0gOTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVOVV9JVEVNX09SREVSX1BST0NFU1NfVEVYVF9JTlRFTlRfQUNUSU9OU19TVEFSVCA9IDEwOwogCiAgICAgLy8gRWFjaCBFZGl0b3IgbWFuYWdlcyBpdHMgb3duIHVuZG8gc3RhY2suCkBAIC0xODMsNiArMTg5LDcgQEAKIAogICAgIGJvb2xlYW4gbURpc2NhcmROZXh0QWN0aW9uVXA7CiAgICAgYm9vbGVhbiBtSWdub3JlQWN0aW9uVXBFdmVudDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUlnbm9yZU5leHRNb3VzZUFjdGlvblVwT3JEb3duOwogCiAgICAgbG9uZyBtU2hvd0N1cnNvcjsKICAgICBCbGluayBtQmxpbms7CkBAIC0yMDgsNiArMjE1LDggQEAKICAgICBib29sZWFuIG1QcmVzZXJ2ZURldGFjaGVkU2VsZWN0aW9uOwogICAgIGJvb2xlYW4gbVRlbXBvcmFyeURldGFjaDsKIAorICAgIGJvb2xlYW4gbUlzQmVpbmdMb25nQ2xpY2tlZDsKKwogICAgIFN1Z2dlc3Rpb25zUG9wdXBXaW5kb3cgbVN1Z2dlc3Rpb25zUG9wdXBXaW5kb3c7CiAgICAgU3VnZ2VzdGlvblJhbmdlU3BhbiBtU3VnZ2VzdGlvblJhbmdlU3BhbjsKICAgICBSdW5uYWJsZSBtU2hvd1N1Z2dlc3Rpb25SdW5uYWJsZTsKQEAgLTIyMywxMyArMjMyLDI0IEBACiAgICAgcHJpdmF0ZSBQb3NpdGlvbkxpc3RlbmVyIG1Qb3NpdGlvbkxpc3RlbmVyOwogCiAgICAgZmxvYXQgbUxhc3REb3duUG9zaXRpb25YLCBtTGFzdERvd25Qb3NpdGlvblk7CisgICAgcHJpdmF0ZSBmbG9hdCBtQ29udGV4dE1lbnVBbmNob3JYLCBtQ29udGV4dE1lbnVBbmNob3JZOwogICAgIENhbGxiYWNrIG1DdXN0b21TZWxlY3Rpb25BY3Rpb25Nb2RlQ2FsbGJhY2s7CiAgICAgQ2FsbGJhY2sgbUN1c3RvbUluc2VydGlvbkFjdGlvbk1vZGVDYWxsYmFjazsKIAogICAgIC8vIFNldCB3aGVuIHRoaXMgVGV4dFZpZXcgZ2FpbmVkIGZvY3VzIHdpdGggc29tZSB0ZXh0IHNlbGVjdGVkLiBXaWxsIHN0YXJ0IHNlbGVjdGlvbiBtb2RlLgogICAgIGJvb2xlYW4gbUNyZWF0ZWRXaXRoQVNlbGVjdGlvbjsKIAotICAgIGJvb2xlYW4gbURvdWJsZVRhcCA9IGZhbHNlOworICAgIC8vIEluZGljYXRlcyB0aGUgY3VycmVudCB0YXAgc3RhdGUgKGZpcnN0IHRhcCwgZG91YmxlIHRhcCwgb3IgdHJpcGxlIGNsaWNrKS4KKyAgICBwcml2YXRlIGludCBtVGFwU3RhdGUgPSBUQVBfU1RBVEVfSU5JVElBTDsKKyAgICBwcml2YXRlIGxvbmcgbUxhc3RUb3VjaFVwVGltZSA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRBUF9TVEFURV9JTklUSUFMID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEFQX1NUQVRFX0ZJUlNUX1RBUCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRBUF9TVEFURV9ET1VCTEVfVEFQID0gMjsKKyAgICAvLyBPbmx5IGZvciBtb3VzZSBpbnB1dC4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEFQX1NUQVRFX1RSSVBMRV9DTElDSyA9IDM7CisKKyAgICAvLyBUaGUgYnV0dG9uIHN0YXRlIGFzIG9mIHRoZSBsYXN0IHRpbWUgI29uVG91Y2hFdmVudCBpcyBjYWxsZWQuCisgICAgcHJpdmF0ZSBpbnQgbUxhc3RCdXR0b25TdGF0ZTsKIAogICAgIHByaXZhdGUgUnVubmFibGUgbUluc2VydGlvbkFjdGlvbk1vZGVSdW5uYWJsZTsKIApAQCAtMjY2LDYgKzI4Niw5IEBACiAKICAgICBib29sZWFuIG1Jc0luc2VydGlvbkFjdGlvbk1vZGVTdGFydFBlbmRpbmcgPSBmYWxzZTsKIAorICAgIHByaXZhdGUgZmluYWwgU3VnZ2VzdGlvbkhlbHBlciBtU3VnZ2VzdGlvbkhlbHBlciA9IG5ldyBTdWdnZXN0aW9uSGVscGVyKCk7CisgICAgcHJpdmF0ZSBTdWdnZXN0aW9uSW5mb1tdIG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51OworCiAgICAgRWRpdG9yKFRleHRWaWV3IHRleHRWaWV3KSB7CiAgICAgICAgIG1UZXh0VmlldyA9IHRleHRWaWV3OwogICAgICAgICAvLyBTeW5jaHJvbml6ZSB0aGUgZmlsdGVyIGxpc3QsIHdoaWNoIHBsYWNlcyB0aGUgdW5kbyBpbnB1dCBmaWx0ZXIgYXQgdGhlIGVuZC4KQEAgLTc2OSwyMCArNzkyLDEyIEBACiAgICAgICAgIHJldHVybiByZXRPZmZzZXQ7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQWRqdXN0cyBzZWxlY3Rpb24gdG8gdGhlIHdvcmQgdW5kZXIgbGFzdCB0b3VjaCBvZmZzZXQuIFJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gd2FzCi0gICAgICogc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gc2VsZWN0Q3VycmVudFdvcmQoKSB7Ci0gICAgICAgIGlmICghbVRleHRWaWV3LmNhblNlbGVjdFRleHQoKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KKyAgICBwcml2YXRlIGJvb2xlYW4gbmVlZHNUb1NlbGVjdEFsbFRvU2VsZWN0V29yZE9yUGFyYWdyYXBoKCkgewogICAgICAgICBpZiAobVRleHRWaWV3Lmhhc1Bhc3N3b3JkVHJhbnNmb3JtYXRpb25NZXRob2QoKSkgewogICAgICAgICAgICAgLy8gQWx3YXlzIHNlbGVjdCBhbGwgb24gYSBwYXNzd29yZCBmaWVsZC4KICAgICAgICAgICAgIC8vIEN1dC9jb3B5IG1lbnUgZW50cmllcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgcGFzc3dvcmRzLCBidXQgYmVpbmcgYWJsZSB0byBzZWxlY3QgYWxsCiAgICAgICAgICAgICAvLyBpcyBob3dldmVyIHVzZWZ1bCB0byBkZWxldGUgb3IgcGFzdGUgdG8gcmVwbGFjZSB0aGUgZW50aXJlIGNvbnRlbnQuCi0gICAgICAgICAgICByZXR1cm4gbVRleHRWaWV3LnNlbGVjdEFsbFRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGlucHV0VHlwZSA9IG1UZXh0Vmlldy5nZXRJbnB1dFR5cGUoKTsKQEAgLTc5Nyw2ICs4MTIsMjEgQEAKICAgICAgICAgICAgICAgICB2YXJpYXRpb24gPT0gSW5wdXRUeXBlLlRZUEVfVEVYVF9WQVJJQVRJT05fRU1BSUxfQUREUkVTUyB8fAogICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9PSBJbnB1dFR5cGUuVFlQRV9URVhUX1ZBUklBVElPTl9XRUJfRU1BSUxfQUREUkVTUyB8fAogICAgICAgICAgICAgICAgIHZhcmlhdGlvbiA9PSBJbnB1dFR5cGUuVFlQRV9URVhUX1ZBUklBVElPTl9GSUxURVIpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGp1c3RzIHNlbGVjdGlvbiB0byB0aGUgd29yZCB1bmRlciBsYXN0IHRvdWNoIG9mZnNldC4gUmV0dXJuIHRydWUgaWYgdGhlIG9wZXJhdGlvbiB3YXMKKyAgICAgKiBzdWNjZXNzZnVsbHkgcGVyZm9ybWVkLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBzZWxlY3RDdXJyZW50V29yZCgpIHsKKyAgICAgICAgaWYgKCFtVGV4dFZpZXcuY2FuU2VsZWN0VGV4dCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmVlZHNUb1NlbGVjdEFsbFRvU2VsZWN0V29yZE9yUGFyYWdyYXBoKCkpIHsKICAgICAgICAgICAgIHJldHVybiBtVGV4dFZpZXcuc2VsZWN0QWxsVGV4dCgpOwogICAgICAgICB9CiAKQEAgLTgwNSw4ICs4MzUsOCBAQAogICAgICAgICBmaW5hbCBpbnQgbWF4T2Zmc2V0ID0gVGV4dFV0aWxzLnVucGFja1JhbmdlRW5kRnJvbUxvbmcobGFzdFRvdWNoT2Zmc2V0cyk7CiAKICAgICAgICAgLy8gU2FmZXR5IGNoZWNrIGluIGNhc2Ugc3RhbmRhcmQgdG91Y2ggZXZlbnQgaGFuZGxpbmcgaGFzIGJlZW4gYnlwYXNzZWQKLSAgICAgICAgaWYgKG1pbk9mZnNldCA8IDAgfHwgbWluT2Zmc2V0ID49IG1UZXh0Vmlldy5nZXRUZXh0KCkubGVuZ3RoKCkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1heE9mZnNldCA8IDAgfHwgbWF4T2Zmc2V0ID49IG1UZXh0Vmlldy5nZXRUZXh0KCkubGVuZ3RoKCkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1pbk9mZnNldCA8IDAgfHwgbWluT2Zmc2V0ID4gbVRleHRWaWV3LmdldFRleHQoKS5sZW5ndGgoKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobWF4T2Zmc2V0IDwgMCB8fCBtYXhPZmZzZXQgPiBtVGV4dFZpZXcuZ2V0VGV4dCgpLmxlbmd0aCgpKSByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaW50IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQ7CiAKQEAgLTgzOSw2ICs4NjksNjMgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbkVuZCA+IHNlbGVjdGlvblN0YXJ0OwogICAgIH0KIAorICAgIC8qKgorICAgICAqIEFkanVzdHMgc2VsZWN0aW9uIHRvIHRoZSBwYXJhZ3JhcGggdW5kZXIgbGFzdCB0b3VjaCBvZmZzZXQuIFJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gd2FzCisgICAgICogc3VjY2Vzc2Z1bGx5IHBlcmZvcm1lZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gc2VsZWN0Q3VycmVudFBhcmFncmFwaCgpIHsKKyAgICAgICAgaWYgKCFtVGV4dFZpZXcuY2FuU2VsZWN0VGV4dCgpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmVlZHNUb1NlbGVjdEFsbFRvU2VsZWN0V29yZE9yUGFyYWdyYXBoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtVGV4dFZpZXcuc2VsZWN0QWxsVGV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBsYXN0VG91Y2hPZmZzZXRzID0gZ2V0TGFzdFRvdWNoT2Zmc2V0cygpOworICAgICAgICBmaW5hbCBpbnQgbWluTGFzdFRvdWNoT2Zmc2V0ID0gVGV4dFV0aWxzLnVucGFja1JhbmdlU3RhcnRGcm9tTG9uZyhsYXN0VG91Y2hPZmZzZXRzKTsKKyAgICAgICAgZmluYWwgaW50IG1heExhc3RUb3VjaE9mZnNldCA9IFRleHRVdGlscy51bnBhY2tSYW5nZUVuZEZyb21Mb25nKGxhc3RUb3VjaE9mZnNldHMpOworCisgICAgICAgIGZpbmFsIGxvbmcgcGFyYWdyYXBoc1JhbmdlID0gZ2V0UGFyYWdyYXBoc1JhbmdlKG1pbkxhc3RUb3VjaE9mZnNldCwgbWF4TGFzdFRvdWNoT2Zmc2V0KTsKKyAgICAgICAgZmluYWwgaW50IHN0YXJ0ID0gVGV4dFV0aWxzLnVucGFja1JhbmdlU3RhcnRGcm9tTG9uZyhwYXJhZ3JhcGhzUmFuZ2UpOworICAgICAgICBmaW5hbCBpbnQgZW5kID0gVGV4dFV0aWxzLnVucGFja1JhbmdlRW5kRnJvbUxvbmcocGFyYWdyYXBoc1JhbmdlKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgZW5kKSB7CisgICAgICAgICAgICBTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKChTcGFubmFibGUpIG1UZXh0Vmlldy5nZXRUZXh0KCksIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbWluaW11bSByYW5nZSBvZiBwYXJhZ3JhcGhzIHRoYXQgY29udGFpbnMgc3RhcnRPZmZzZXQgYW5kIGVuZE9mZnNldC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGxvbmcgZ2V0UGFyYWdyYXBoc1JhbmdlKGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkgeworICAgICAgICBmaW5hbCBMYXlvdXQgbGF5b3V0ID0gbVRleHRWaWV3LmdldExheW91dCgpOworICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBUZXh0VXRpbHMucGFja1JhbmdlSW5Mb25nKC0xLCAtMSk7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlIHRleHQgPSBtVGV4dFZpZXcuZ2V0VGV4dCgpOworICAgICAgICBpbnQgbWluTGluZSA9IGxheW91dC5nZXRMaW5lRm9yT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgLy8gU2VhcmNoIHBhcmFncmFwaCBzdGFydC4KKyAgICAgICAgd2hpbGUgKG1pbkxpbmUgPiAwKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgcHJldkxpbmVFbmRPZmZzZXQgPSBsYXlvdXQuZ2V0TGluZUVuZChtaW5MaW5lIC0gMSk7CisgICAgICAgICAgICBpZiAodGV4dC5jaGFyQXQocHJldkxpbmVFbmRPZmZzZXQgLSAxKSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtaW5MaW5lLS07CisgICAgICAgIH0KKyAgICAgICAgaW50IG1heExpbmUgPSBsYXlvdXQuZ2V0TGluZUZvck9mZnNldChlbmRPZmZzZXQpOworICAgICAgICAvLyBTZWFyY2ggcGFyYWdyYXBoIGVuZC4KKyAgICAgICAgd2hpbGUgKG1heExpbmUgPCBsYXlvdXQuZ2V0TGluZUNvdW50KCkgLSAxKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgbGluZUVuZE9mZnNldCA9IGxheW91dC5nZXRMaW5lRW5kKG1heExpbmUpOworICAgICAgICAgICAgaWYgKHRleHQuY2hhckF0KGxpbmVFbmRPZmZzZXQgLSAxKSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXhMaW5lKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRleHRVdGlscy5wYWNrUmFuZ2VJbkxvbmcobGF5b3V0LmdldExpbmVTdGFydChtaW5MaW5lKSwgbGF5b3V0LmdldExpbmVFbmQobWF4TGluZSkpOworICAgIH0KKwogICAgIHZvaWQgb25Mb2NhbGVDaGFuZ2VkKCkgewogICAgICAgICAvLyBXaWxsIGJlIHJlLWNyZWF0ZWQgb24gZGVtYW5kIGluIGdldFdvcmRJdGVyYXRvciB3aXRoIHRoZSBwcm9wZXIgbmV3IGxvY2FsZQogICAgICAgICBtV29yZEl0ZXJhdG9yID0gbnVsbDsKQEAgLTEyMTksNyArMTMwNiw1NyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhcFN0YXRlKE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb25NYXNrZWQoKTsKKyAgICAgICAgaWYgKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTikgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc01vdXNlID0gZXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9NT1VTRSk7CisgICAgICAgICAgICAvLyBEZXRlY3QgZG91YmxlIHRhcCBhbmQgdHJpcGxlIGNsaWNrLgorICAgICAgICAgICAgaWYgKCgobVRhcFN0YXRlID09IFRBUF9TVEFURV9GSVJTVF9UQVApCisgICAgICAgICAgICAgICAgICAgIHx8ICgobVRhcFN0YXRlID09IFRBUF9TVEFURV9ET1VCTEVfVEFQKSAmJiBpc01vdXNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSAtIG1MYXN0VG91Y2hVcFRpbWUpIDw9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdDb25maWd1cmF0aW9uLmdldERvdWJsZVRhcFRpbWVvdXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChtVGFwU3RhdGUgPT0gVEFQX1NUQVRFX0ZJUlNUX1RBUCkgeworICAgICAgICAgICAgICAgICAgICBtVGFwU3RhdGUgPSBUQVBfU1RBVEVfRE9VQkxFX1RBUDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtVGFwU3RhdGUgPSBUQVBfU1RBVEVfVFJJUExFX0NMSUNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRhcFN0YXRlID0gVEFQX1NUQVRFX0ZJUlNUX1RBUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9VUCkgeworICAgICAgICAgICAgbUxhc3RUb3VjaFVwVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEZpbHRlck91dFRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgaWYgKCFldmVudC5pc0Zyb21Tb3VyY2UoSW5wdXREZXZpY2UuU09VUkNFX01PVVNFKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGJvb2xlYW4gcHJpbWFyeUJ1dHRvblN0YXRlQ2hhbmdlZCA9CisgICAgICAgICAgICAgICAgKChtTGFzdEJ1dHRvblN0YXRlIF4gZXZlbnQuZ2V0QnV0dG9uU3RhdGUoKSkgJiBNb3Rpb25FdmVudC5CVVRUT05fUFJJTUFSWSkgIT0gMDsKKyAgICAgICAgZmluYWwgaW50IGFjdGlvbiA9IGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpOworICAgICAgICBpZiAoKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTiB8fCBhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX1VQKQorICAgICAgICAgICAgICAgICYmICFwcmltYXJ5QnV0dG9uU3RhdGVDaGFuZ2VkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFCisgICAgICAgICAgICAgICAgJiYgIWV2ZW50LmlzQnV0dG9uUHJlc3NlZChNb3Rpb25FdmVudC5CVVRUT05fUFJJTUFSWSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICB2b2lkIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldmVudCkgeworICAgICAgICBmaW5hbCBib29sZWFuIGZpbHRlck91dEV2ZW50ID0gc2hvdWxkRmlsdGVyT3V0VG91Y2hFdmVudChldmVudCk7CisgICAgICAgIG1MYXN0QnV0dG9uU3RhdGUgPSBldmVudC5nZXRCdXR0b25TdGF0ZSgpOworICAgICAgICBpZiAoZmlsdGVyT3V0RXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5nZXRBY3Rpb25NYXNrZWQoKSA9PSBNb3Rpb25FdmVudC5BQ1RJT05fVVApIHsKKyAgICAgICAgICAgICAgICBtRGlzY2FyZE5leHRBY3Rpb25VcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVGFwU3RhdGUoZXZlbnQpOwogICAgICAgICB1cGRhdGVGbG9hdGluZ1Rvb2xiYXJWaXNpYmlsaXR5KGV2ZW50KTsKIAogICAgICAgICBpZiAoaGFzU2VsZWN0aW9uQ29udHJvbGxlcigpKSB7CkBAIC0xNzczLDcgKzE5MTAsOCBAQAogICAgICAgICBzdG9wVGV4dEFjdGlvbk1vZGUoKTsKICAgICAgICAgbVByZXNlcnZlRGV0YWNoZWRTZWxlY3Rpb24gPSBmYWxzZTsKIAotICAgICAgICBnZXRTZWxlY3Rpb25Db250cm9sbGVyKCkuZW50ZXJEcmFnKCk7CisgICAgICAgIGdldFNlbGVjdGlvbkNvbnRyb2xsZXIoKS5lbnRlckRyYWcoCisgICAgICAgICAgICAgICAgU2VsZWN0aW9uTW9kaWZpZXJDdXJzb3JDb250cm9sbGVyLkRSQUdfQUNDRUxFUkFUT1JfTU9ERV9XT1JEKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yMjIxLDYgKzIzNTksMTg0IEBACiAgICAgICAgIHRleHQuc2V0U3BhbihtU3BhbkNvbnRyb2xsZXIsIDAsIHRleHRMZW5ndGgsIFNwYW5uZWQuU1BBTl9JTkNMVVNJVkVfSU5DTFVTSVZFKTsKICAgICB9CiAKKyAgICB2b2lkIHNldENvbnRleHRNZW51QW5jaG9yKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgbUNvbnRleHRNZW51QW5jaG9yWCA9IHg7CisgICAgICAgIG1Db250ZXh0TWVudUFuY2hvclkgPSB5OworICAgIH0KKworICAgIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51KSB7CisgICAgICAgIGlmIChtSXNCZWluZ0xvbmdDbGlja2VkIHx8IEZsb2F0LmlzTmFOKG1Db250ZXh0TWVudUFuY2hvclgpCisgICAgICAgICAgICAgICAgfHwgRmxvYXQuaXNOYU4obUNvbnRleHRNZW51QW5jaG9yWSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gbVRleHRWaWV3LmdldE9mZnNldEZvclBvc2l0aW9uKG1Db250ZXh0TWVudUFuY2hvclgsIG1Db250ZXh0TWVudUFuY2hvclkpOworICAgICAgICBpZiAob2Zmc2V0ID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVByZXNlcnZlRGV0YWNoZWRTZWxlY3Rpb24gPSB0cnVlOworICAgICAgICBzdG9wVGV4dEFjdGlvbk1vZGUoKTsKKyAgICAgICAgbVByZXNlcnZlRGV0YWNoZWRTZWxlY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpc09uU2VsZWN0aW9uID0gbVRleHRWaWV3Lmhhc1NlbGVjdGlvbigpCisgICAgICAgICAgICAgICAgJiYgb2Zmc2V0ID49IG1UZXh0Vmlldy5nZXRTZWxlY3Rpb25TdGFydCgpICYmIG9mZnNldCA8PSBtVGV4dFZpZXcuZ2V0U2VsZWN0aW9uRW5kKCk7CisgICAgICAgIGlmICghaXNPblNlbGVjdGlvbikgeworICAgICAgICAgICAgLy8gUmlnaHQgY2xpY2tlZCBwb3NpdGlvbiBpcyBub3Qgb24gdGhlIHNlbGVjdGlvbi4gUmVtb3ZlIHRoZSBzZWxlY3Rpb24gYW5kIG1vdmUgdGhlCisgICAgICAgICAgICAvLyBjdXJzb3IgdG8gdGhlIHJpZ2h0IGNsaWNrZWQgcG9zaXRpb24uCisgICAgICAgICAgICBzdG9wVGV4dEFjdGlvbk1vZGUoKTsKKyAgICAgICAgICAgIFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oKFNwYW5uYWJsZSkgbVRleHRWaWV3LmdldFRleHQoKSwgb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaG91bGRPZmZlclRvU2hvd1N1Z2dlc3Rpb25zKCkpIHsKKyAgICAgICAgICAgIGlmIChtU3VnZ2VzdGlvbkluZm9zSW5Db250ZXh0TWVudSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVN1Z2dlc3Rpb25JbmZvc0luQ29udGV4dE1lbnUgPQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN1Z2dlc3Rpb25JbmZvW1N1Z2dlc3Rpb25TcGFuLlNVR0dFU1RJT05TX01BWF9TSVpFXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51W2ldID0gbmV3IFN1Z2dlc3Rpb25JbmZvKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgU3ViTWVudSBzdWJNZW51ID0gbWVudS5hZGRTdWJNZW51KE1lbnUuTk9ORSwgTWVudS5OT05FLCBNRU5VX0lURU1fT1JERVJfUkVQTEFDRSwKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcucmVwbGFjZSk7CisgICAgICAgICAgICBtU3VnZ2VzdGlvbkhlbHBlci5nZXRTdWdnZXN0aW9uSW5mbyhtU3VnZ2VzdGlvbkluZm9zSW5Db250ZXh0TWVudSk7CisgICAgICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgICAgICBmb3IgKGZpbmFsIFN1Z2dlc3Rpb25JbmZvIGluZm8gOiBtU3VnZ2VzdGlvbkluZm9zSW5Db250ZXh0TWVudSkgeworICAgICAgICAgICAgICAgIGluZm8ubVN1Z2dlc3Rpb25FbmQgPSBpbmZvLm1UZXh0Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHN1Yk1lbnUuYWRkKE1lbnUuTk9ORSwgTWVudS5OT05FLCBpKyssIGluZm8ubVRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIobU9uQ29udGV4dE1lbnVSZXBsYWNlSXRlbUNsaWNrTGlzdGVuZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbWVudS5hZGQoTWVudS5OT05FLCBUZXh0Vmlldy5JRF9VTkRPLCBNRU5VX0lURU1fT1JERVJfVU5ETywKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy51bmRvKQorICAgICAgICAgICAgICAgIC5zZXRBbHBoYWJldGljU2hvcnRjdXQoJ3onKQorICAgICAgICAgICAgICAgIC5zZXRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcihtT25Db250ZXh0TWVudUl0ZW1DbGlja0xpc3RlbmVyKQorICAgICAgICAgICAgICAgIC5zZXRFbmFibGVkKG1UZXh0Vmlldy5jYW5VbmRvKCkpOworICAgICAgICBtZW51LmFkZChNZW51Lk5PTkUsIFRleHRWaWV3LklEX1JFRE8sIE1FTlVfSVRFTV9PUkRFUl9SRURPLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnJlZG8pCisgICAgICAgICAgICAgICAgLnNldE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyKG1PbkNvbnRleHRNZW51SXRlbUNsaWNrTGlzdGVuZXIpCisgICAgICAgICAgICAgICAgLnNldEVuYWJsZWQobVRleHRWaWV3LmNhblJlZG8oKSk7CisKKyAgICAgICAgbWVudS5hZGQoTWVudS5OT05FLCBUZXh0Vmlldy5JRF9DVVQsIE1FTlVfSVRFTV9PUkRFUl9DVVQsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY3V0KQorICAgICAgICAgICAgICAgIC5zZXRBbHBoYWJldGljU2hvcnRjdXQoJ3gnKQorICAgICAgICAgICAgICAgIC5zZXRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcihtT25Db250ZXh0TWVudUl0ZW1DbGlja0xpc3RlbmVyKQorICAgICAgICAgICAgICAgIC5zZXRFbmFibGVkKG1UZXh0Vmlldy5jYW5DdXQoKSk7CisgICAgICAgIG1lbnUuYWRkKE1lbnUuTk9ORSwgVGV4dFZpZXcuSURfQ09QWSwgTUVOVV9JVEVNX09SREVSX0NPUFksCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29weSkKKyAgICAgICAgICAgICAgICAuc2V0QWxwaGFiZXRpY1Nob3J0Y3V0KCdjJykKKyAgICAgICAgICAgICAgICAuc2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIobU9uQ29udGV4dE1lbnVJdGVtQ2xpY2tMaXN0ZW5lcikKKyAgICAgICAgICAgICAgICAuc2V0RW5hYmxlZChtVGV4dFZpZXcuY2FuQ29weSgpKTsKKyAgICAgICAgbWVudS5hZGQoTWVudS5OT05FLCBUZXh0Vmlldy5JRF9QQVNURSwgTUVOVV9JVEVNX09SREVSX1BBU1RFLAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnBhc3RlKQorICAgICAgICAgICAgICAgIC5zZXRBbHBoYWJldGljU2hvcnRjdXQoJ3YnKQorICAgICAgICAgICAgICAgIC5zZXRFbmFibGVkKG1UZXh0Vmlldy5jYW5QYXN0ZSgpKQorICAgICAgICAgICAgICAgIC5zZXRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcihtT25Db250ZXh0TWVudUl0ZW1DbGlja0xpc3RlbmVyKTsKKyAgICAgICAgbWVudS5hZGQoTWVudS5OT05FLCBUZXh0Vmlldy5JRF9QQVNURSwgTUVOVV9JVEVNX09SREVSX1BBU1RFX0FTX1BMQUlOX1RFWFQsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcucGFzdGVfYXNfcGxhaW5fdGV4dCkKKyAgICAgICAgICAgICAgICAuc2V0RW5hYmxlZChtVGV4dFZpZXcuY2FuUGFzdGUoKSkKKyAgICAgICAgICAgICAgICAuc2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIobU9uQ29udGV4dE1lbnVJdGVtQ2xpY2tMaXN0ZW5lcik7CisgICAgICAgIG1lbnUuYWRkKE1lbnUuTk9ORSwgVGV4dFZpZXcuSURfU0hBUkUsIE1FTlVfSVRFTV9PUkRFUl9TSEFSRSwKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5zaGFyZSkKKyAgICAgICAgICAgICAgICAuc2V0RW5hYmxlZChtVGV4dFZpZXcuY2FuU2hhcmUoKSkKKyAgICAgICAgICAgICAgICAuc2V0T25NZW51SXRlbUNsaWNrTGlzdGVuZXIobU9uQ29udGV4dE1lbnVJdGVtQ2xpY2tMaXN0ZW5lcik7CisgICAgICAgIG1lbnUuYWRkKE1lbnUuTk9ORSwgVGV4dFZpZXcuSURfU0VMRUNUX0FMTCwgTUVOVV9JVEVNX09SREVSX1NFTEVDVF9BTEwsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuc2VsZWN0QWxsKQorICAgICAgICAgICAgICAgIC5zZXRBbHBoYWJldGljU2hvcnRjdXQoJ2EnKQorICAgICAgICAgICAgICAgIC5zZXRFbmFibGVkKG1UZXh0Vmlldy5jYW5TZWxlY3RBbGxUZXh0KCkpCisgICAgICAgICAgICAgICAgLnNldE9uTWVudUl0ZW1DbGlja0xpc3RlbmVyKG1PbkNvbnRleHRNZW51SXRlbUNsaWNrTGlzdGVuZXIpOworCisgICAgICAgIG1QcmVzZXJ2ZURldGFjaGVkU2VsZWN0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVwbGFjZVdpdGhTdWdnZXN0aW9uKFN1Z2dlc3Rpb25JbmZvIHN1Z2dlc3Rpb25JbmZvLCBpbnQgc3BhblN0YXJ0LCBpbnQgc3BhbkVuZCkgeworICAgICAgICBmaW5hbCBFZGl0YWJsZSBlZGl0YWJsZSA9IChFZGl0YWJsZSkgbVRleHRWaWV3LmdldFRleHQoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IFRleHRVdGlscy5zdWJzdHJpbmcoZWRpdGFibGUsIHNwYW5TdGFydCwgc3BhbkVuZCk7CisgICAgICAgIC8vIFN1Z2dlc3Rpb25TcGFucyBhcmUgcmVtb3ZlZCBieSByZXBsYWNlOiBzYXZlIHRoZW0gYmVmb3JlCisgICAgICAgIFN1Z2dlc3Rpb25TcGFuW10gc3VnZ2VzdGlvblNwYW5zID0gZWRpdGFibGUuZ2V0U3BhbnMoc3BhblN0YXJ0LCBzcGFuRW5kLAorICAgICAgICAgICAgICAgIFN1Z2dlc3Rpb25TcGFuLmNsYXNzKTsKKyAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHN1Z2dlc3Rpb25TcGFucy5sZW5ndGg7CisgICAgICAgIGludFtdIHN1Z2dlc3Rpb25TcGFuc1N0YXJ0cyA9IG5ldyBpbnRbbGVuZ3RoXTsKKyAgICAgICAgaW50W10gc3VnZ2VzdGlvblNwYW5zRW5kcyA9IG5ldyBpbnRbbGVuZ3RoXTsKKyAgICAgICAgaW50W10gc3VnZ2VzdGlvblNwYW5zRmxhZ3MgPSBuZXcgaW50W2xlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIFN1Z2dlc3Rpb25TcGFuIHN1Z2dlc3Rpb25TcGFuID0gc3VnZ2VzdGlvblNwYW5zW2ldOworICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5zU3RhcnRzW2ldID0gZWRpdGFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgIHN1Z2dlc3Rpb25TcGFuc0VuZHNbaV0gPSBlZGl0YWJsZS5nZXRTcGFuRW5kKHN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgIHN1Z2dlc3Rpb25TcGFuc0ZsYWdzW2ldID0gZWRpdGFibGUuZ2V0U3BhbkZsYWdzKHN1Z2dlc3Rpb25TcGFuKTsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHBvdGVudGlhbCBtaXNzcGVsbGVkIGZsYWdzCisgICAgICAgICAgICBpbnQgc3VnZ2VzdGlvblNwYW5GbGFncyA9IHN1Z2dlc3Rpb25TcGFuLmdldEZsYWdzKCk7CisgICAgICAgICAgICBpZiAoKHN1Z2dlc3Rpb25TcGFuRmxhZ3MgJiBTdWdnZXN0aW9uU3Bhbi5GTEFHX01JU1NQRUxMRUQpICE9IDApIHsKKyAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3BhbkZsYWdzICY9IH5TdWdnZXN0aW9uU3Bhbi5GTEFHX01JU1NQRUxMRUQ7CisgICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5GbGFncyAmPSB+U3VnZ2VzdGlvblNwYW4uRkxBR19FQVNZX0NPUlJFQ1Q7CisgICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW4uc2V0RmxhZ3Moc3VnZ2VzdGlvblNwYW5GbGFncyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3RpZnkgc291cmNlIElNRSBvZiB0aGUgc3VnZ2VzdGlvbiBwaWNrLiBEbyB0aGlzIGJlZm9yZSBzd2FwcGluZyB0ZXh0cy4KKyAgICAgICAgc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25TcGFuLm5vdGlmeVNlbGVjdGlvbigKKyAgICAgICAgICAgICAgICBtVGV4dFZpZXcuZ2V0Q29udGV4dCgpLCBvcmlnaW5hbFRleHQsIHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uSW5kZXgpOworCisgICAgICAgIC8vIFN3YXAgdGV4dCBjb250ZW50IGJldHdlZW4gYWN0dWFsIHRleHQgYW5kIFN1Z2dlc3Rpb24gc3BhbgorICAgICAgICBmaW5hbCBpbnQgc3VnZ2VzdGlvblN0YXJ0ID0gc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25TdGFydDsKKyAgICAgICAgZmluYWwgaW50IHN1Z2dlc3Rpb25FbmQgPSBzdWdnZXN0aW9uSW5mby5tU3VnZ2VzdGlvbkVuZDsKKyAgICAgICAgZmluYWwgU3RyaW5nIHN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9uSW5mby5tVGV4dC5zdWJTZXF1ZW5jZSgKKyAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3RhcnQsIHN1Z2dlc3Rpb25FbmQpLnRvU3RyaW5nKCk7CisgICAgICAgIG1UZXh0Vmlldy5yZXBsYWNlVGV4dF9pbnRlcm5hbChzcGFuU3RhcnQsIHNwYW5FbmQsIHN1Z2dlc3Rpb24pOworCisgICAgICAgIFN0cmluZ1tdIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25TcGFuLmdldFN1Z2dlc3Rpb25zKCk7CisgICAgICAgIHN1Z2dlc3Rpb25zW3N1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uSW5kZXhdID0gb3JpZ2luYWxUZXh0OworCisgICAgICAgIC8vIFJlc3RvcmUgcHJldmlvdXMgU3VnZ2VzdGlvblNwYW5zCisgICAgICAgIGZpbmFsIGludCBsZW5ndGhEZWx0YSA9IHN1Z2dlc3Rpb24ubGVuZ3RoKCkgLSAoc3BhbkVuZCAtIHNwYW5TdGFydCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIC8vIE9ubHkgc3BhbnMgdGhhdCBpbmNsdWRlIHRoZSBtb2RpZmllZCByZWdpb24gbWFrZSBzZW5zZSBhZnRlciByZXBsYWNlbWVudAorICAgICAgICAgICAgLy8gU3BhbnMgcGFydGlhbGx5IGluY2x1ZGVkIGluIHRoZSByZXBsYWNlZCByZWdpb24gYXJlIHJlbW92ZWQsIHRoZXJlIGlzIG5vCisgICAgICAgICAgICAvLyB3YXkgdG8gYXNzaWduIHRoZW0gYSB2YWxpZCByYW5nZSBhZnRlciByZXBsYWNlbWVudAorICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25TcGFuc1N0YXJ0c1tpXSA8PSBzcGFuU3RhcnQgJiYgc3VnZ2VzdGlvblNwYW5zRW5kc1tpXSA+PSBzcGFuRW5kKSB7CisgICAgICAgICAgICAgICAgbVRleHRWaWV3LnNldFNwYW5faW50ZXJuYWwoc3VnZ2VzdGlvblNwYW5zW2ldLCBzdWdnZXN0aW9uU3BhbnNTdGFydHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3BhbnNFbmRzW2ldICsgbGVuZ3RoRGVsdGEsIHN1Z2dlc3Rpb25TcGFuc0ZsYWdzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBNb3ZlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSByZXBsYWNlZCB3b3JkCisgICAgICAgIGZpbmFsIGludCBuZXdDdXJzb3JQb3NpdGlvbiA9IHNwYW5FbmQgKyBsZW5ndGhEZWx0YTsKKyAgICAgICAgbVRleHRWaWV3LnNldEN1cnNvclBvc2l0aW9uX2ludGVybmFsKG5ld0N1cnNvclBvc2l0aW9uLCBuZXdDdXJzb3JQb3NpdGlvbik7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBNZW51SXRlbS5Pbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lciBtT25Db250ZXh0TWVudUl0ZW1DbGlja0xpc3RlbmVyID0KKyAgICAgICAgICAgIG5ldyBNZW51SXRlbS5Pbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1DbGljayhNZW51SXRlbSBpdGVtKSB7CisgICAgICAgICAgICBpZiAobVByb2Nlc3NUZXh0SW50ZW50QWN0aW9uc0hhbmRsZXIucGVyZm9ybU1lbnVJdGVtQWN0aW9uKGl0ZW0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbVRleHRWaWV3Lm9uVGV4dENvbnRleHRNZW51SXRlbShpdGVtLmdldEl0ZW1JZCgpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwcml2YXRlIGZpbmFsIE1lbnVJdGVtLk9uTWVudUl0ZW1DbGlja0xpc3RlbmVyIG1PbkNvbnRleHRNZW51UmVwbGFjZUl0ZW1DbGlja0xpc3RlbmVyID0KKyAgICAgICAgICAgIG5ldyBNZW51SXRlbS5Pbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1DbGljayhNZW51SXRlbSBpdGVtKSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBpdGVtLmdldE9yZGVyKCk7CisgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgU3Bhbm5hYmxlIHNwYW5uYWJsZSA9IChTcGFubmFibGUpIG1UZXh0Vmlldy5nZXRUZXh0KCk7CisgICAgICAgICAgICBmaW5hbCBTdWdnZXN0aW9uU3BhbiBzdWdnZXN0aW9uU3BhbiA9CisgICAgICAgICAgICAgICAgICAgIG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51W2luZGV4XS5tU3VnZ2VzdGlvblNwYW47CisgICAgICAgICAgICByZXBsYWNlV2l0aFN1Z2dlc3Rpb24obVN1Z2dlc3Rpb25JbmZvc0luQ29udGV4dE1lbnVbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBzcGFubmFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKSwgc3Bhbm5hYmxlLmdldFNwYW5FbmQoc3VnZ2VzdGlvblNwYW4pKTsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgICAgIGZvciAoZmluYWwgU3VnZ2VzdGlvbkluZm8gaW5mbyA6IG1TdWdnZXN0aW9uSW5mb3NJbkNvbnRleHRNZW51KSB7CisgICAgICAgICAgICAgICAgaW5mby5jbGVhcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwogICAgIC8qKgogICAgICAqIENvbnRyb2xzIHRoZSB7QGxpbmsgRWFzeUVkaXRTcGFufSBtb25pdG9yaW5nIHdoZW4gaXQgaXMgYWRkZWQsIGFuZCB3aGVuIHRoZSByZWxhdGVkCiAgICAgICogcG9wLXVwIHNob3VsZCBiZSBkaXNwbGF5ZWQuCkBAIC0yNjEzLDYgKzI5MjksOSBAQAogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgaGlkZSgpIHsKKyAgICAgICAgICAgIGlmICghaXNTaG93aW5nKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtUG9wdXBXaW5kb3cuZGlzbWlzcygpOwogICAgICAgICAgICAgZ2V0UG9zaXRpb25MaXN0ZW5lcigpLnJlbW92ZVN1YnNjcmliZXIodGhpcyk7CiAgICAgICAgIH0KQEAgLTI2MzQsNiArMjk1MywxMzEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN1Z2dlc3Rpb25JbmZvIHsKKyAgICAgICAgLy8gUmFuZ2Ugb2YgYWN0dWFsIHN1Z2dlc3Rpb24gd2l0aGluIHRleHQKKyAgICAgICAgaW50IG1TdWdnZXN0aW9uU3RhcnQsIG1TdWdnZXN0aW9uRW5kOworCisgICAgICAgIC8vIFRoZSBTdWdnZXN0aW9uU3BhbiB0aGF0IHRoaXMgVGV4dFZpZXcgcmVwcmVzZW50cworICAgICAgICBATnVsbGFibGUKKyAgICAgICAgU3VnZ2VzdGlvblNwYW4gbVN1Z2dlc3Rpb25TcGFuOworCisgICAgICAgIC8vIFRoZSBpbmRleCBvZiB0aGlzIHN1Z2dlc3Rpb24gaW5zaWRlIHN1Z2dlc3Rpb25TcGFuCisgICAgICAgIGludCBtU3VnZ2VzdGlvbkluZGV4OworCisgICAgICAgIGZpbmFsIFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIgbVRleHQgPSBuZXcgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcigpOworCisgICAgICAgIHZvaWQgY2xlYXIoKSB7CisgICAgICAgICAgICBtU3VnZ2VzdGlvblNwYW4gPSBudWxsOworICAgICAgICAgICAgbVRleHQuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgY2xhc3MgU3VnZ2VzdGlvbkhlbHBlciB7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ29tcGFyYXRvcjxTdWdnZXN0aW9uU3Bhbj4gbVN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvciA9CisgICAgICAgICAgICAgICAgbmV3IFN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvcigpOworICAgICAgICBwcml2YXRlIGZpbmFsIEhhc2hNYXA8U3VnZ2VzdGlvblNwYW4sIEludGVnZXI+IG1TcGFuc0xlbmd0aHMgPQorICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN1Z2dlc3Rpb25TcGFuLCBJbnRlZ2VyPigpOworCisgICAgICAgIHByaXZhdGUgY2xhc3MgU3VnZ2VzdGlvblNwYW5Db21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvcjxTdWdnZXN0aW9uU3Bhbj4geworICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFN1Z2dlc3Rpb25TcGFuIHNwYW4xLCBTdWdnZXN0aW9uU3BhbiBzcGFuMikgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFnMSA9IHNwYW4xLmdldEZsYWdzKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IGZsYWcyID0gc3BhbjIuZ2V0RmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBpZiAoZmxhZzEgIT0gZmxhZzIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG9yZGVyIGhlcmUgc2hvdWxkIG1hdGNoIHdoYXQgaXMgdXNlZCBpbiB1cGRhdGVEcmF3U3RhdGUKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBlYXN5MSA9IChmbGFnMSAmIFN1Z2dlc3Rpb25TcGFuLkZMQUdfRUFTWV9DT1JSRUNUKSAhPSAwOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGVhc3kyID0gKGZsYWcyICYgU3VnZ2VzdGlvblNwYW4uRkxBR19FQVNZX0NPUlJFQ1QpICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbWlzc3BlbGxlZDEgPSAoZmxhZzEgJiBTdWdnZXN0aW9uU3Bhbi5GTEFHX01JU1NQRUxMRUQpICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbWlzc3BlbGxlZDIgPSAoZmxhZzIgJiBTdWdnZXN0aW9uU3Bhbi5GTEFHX01JU1NQRUxMRUQpICE9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChlYXN5MSAmJiAhbWlzc3BlbGxlZDEpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVhc3kyICYmICFtaXNzcGVsbGVkMikgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChtaXNzcGVsbGVkMSkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxlZDIpIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBtU3BhbnNMZW5ndGhzLmdldChzcGFuMSkuaW50VmFsdWUoKSAtIG1TcGFuc0xlbmd0aHMuZ2V0KHNwYW4yKS5pbnRWYWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJldHVybnMgdGhlIHN1Z2dlc3Rpb24gc3BhbnMgdGhhdCBjb3ZlciB0aGUgY3VycmVudCBjdXJzb3IgcG9zaXRpb24uIFRoZSBzdWdnZXN0aW9uCisgICAgICAgICAqIHNwYW5zIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBsZW5ndGggb2YgdGV4dCB0aGF0IHRoZXkgYXJlIGF0dGFjaGVkIHRvLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTdWdnZXN0aW9uU3BhbltdIGdldFNvcnRlZFN1Z2dlc3Rpb25TcGFucygpIHsKKyAgICAgICAgICAgIGludCBwb3MgPSBtVGV4dFZpZXcuZ2V0U2VsZWN0aW9uU3RhcnQoKTsKKyAgICAgICAgICAgIFNwYW5uYWJsZSBzcGFubmFibGUgPSAoU3Bhbm5hYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpOworICAgICAgICAgICAgU3VnZ2VzdGlvblNwYW5bXSBzdWdnZXN0aW9uU3BhbnMgPSBzcGFubmFibGUuZ2V0U3BhbnMocG9zLCBwb3MsIFN1Z2dlc3Rpb25TcGFuLmNsYXNzKTsKKworICAgICAgICAgICAgbVNwYW5zTGVuZ3Rocy5jbGVhcigpOworICAgICAgICAgICAgZm9yIChTdWdnZXN0aW9uU3BhbiBzdWdnZXN0aW9uU3BhbiA6IHN1Z2dlc3Rpb25TcGFucykgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IHNwYW5uYWJsZS5nZXRTcGFuU3RhcnQoc3VnZ2VzdGlvblNwYW4pOworICAgICAgICAgICAgICAgIGludCBlbmQgPSBzcGFubmFibGUuZ2V0U3BhbkVuZChzdWdnZXN0aW9uU3Bhbik7CisgICAgICAgICAgICAgICAgbVNwYW5zTGVuZ3Rocy5wdXQoc3VnZ2VzdGlvblNwYW4sIEludGVnZXIudmFsdWVPZihlbmQgLSBzdGFydCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGUgc3VnZ2VzdGlvbnMgYXJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlaXIgdHlwZXMgKGVhc3kgY29ycmVjdGlvbiBmaXJzdCwgdGhlbgorICAgICAgICAgICAgLy8gbWlzc3BlbGxlZCkgYW5kIHRvIHRoZSBsZW5ndGggb2YgdGhlIHRleHQgdGhhdCB0aGV5IGNvdmVyIChzaG9ydGVyIGZpcnN0KS4KKyAgICAgICAgICAgIEFycmF5cy5zb3J0KHN1Z2dlc3Rpb25TcGFucywgbVN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvcik7CisgICAgICAgICAgICBtU3BhbnNMZW5ndGhzLmNsZWFyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uU3BhbnM7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgU3VnZ2VzdGlvbkluZm8gbGlzdCB0aGF0IGNvbnRhaW5zIHN1Z2dlc3Rpb24gaW5mb3JtYXRpb24gYXQgdGhlIGN1cnJlbnQgY3Vyc29yCisgICAgICAgICAqIHBvc2l0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbkluZm9zIFN1Z2dlc3Rpb25JbmZvIGFycmF5IHRoZSByZXN1bHRzIHdpbGwgYmUgc2V0LgorICAgICAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgYWN0dWFsbHkgZmV0Y2hlZC4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0U3VnZ2VzdGlvbkluZm8oU3VnZ2VzdGlvbkluZm9bXSBzdWdnZXN0aW9uSW5mb3MpIHsKKyAgICAgICAgICAgIGZpbmFsIFNwYW5uYWJsZSBzcGFubmFibGUgPSAoU3Bhbm5hYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpOworICAgICAgICAgICAgZmluYWwgU3VnZ2VzdGlvblNwYW5bXSBzdWdnZXN0aW9uU3BhbnMgPSBnZXRTb3J0ZWRTdWdnZXN0aW9uU3BhbnMoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBuYlNwYW5zID0gc3VnZ2VzdGlvblNwYW5zLmxlbmd0aDsKKyAgICAgICAgICAgIGlmIChuYlNwYW5zID09IDApIHJldHVybiAwOworCisgICAgICAgICAgICBpbnQgbnVtYmVyT2ZTdWdnZXN0aW9ucyA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBzcGFuSW5kZXggPSAwOyBzcGFuSW5kZXggPCBuYlNwYW5zOyBzcGFuSW5kZXgrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIFN1Z2dlc3Rpb25TcGFuIHN1Z2dlc3Rpb25TcGFuID0gc3VnZ2VzdGlvblNwYW5zW3NwYW5JbmRleF07CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHNwYW5TdGFydCA9IHNwYW5uYWJsZS5nZXRTcGFuU3RhcnQoc3VnZ2VzdGlvblNwYW4pOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBzcGFuRW5kID0gc3Bhbm5hYmxlLmdldFNwYW5FbmQoc3VnZ2VzdGlvblNwYW4pOworCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uU3Bhbi5nZXRTdWdnZXN0aW9ucygpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBuYlN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnMubGVuZ3RoOworICAgICAgICAgICAgICAgIGZvciAoaW50IHN1Z2dlc3Rpb25JbmRleCA9IDA7IHN1Z2dlc3Rpb25JbmRleCA8IG5iU3VnZ2VzdGlvbnM7IHN1Z2dlc3Rpb25JbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdWdnZXN0aW9uID0gc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdWdnZXN0aW9uSXNEdXBsaWNhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZlN1Z2dlc3Rpb25zOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uSW5mb3NbaV0ubVRleHQudG9TdHJpbmcoKS5lcXVhbHMoc3VnZ2VzdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdWdnZXN0aW9uU3BhbiBvdGhlclN1Z2dlc3Rpb25TcGFuID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvc1tpXS5tU3VnZ2VzdGlvblNwYW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG90aGVyU3BhblN0YXJ0ID0gc3Bhbm5hYmxlLmdldFNwYW5TdGFydChvdGhlclN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb3RoZXJTcGFuRW5kID0gc3Bhbm5hYmxlLmdldFNwYW5FbmQob3RoZXJTdWdnZXN0aW9uU3Bhbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5TdGFydCA9PSBvdGhlclNwYW5TdGFydCAmJiBzcGFuRW5kID09IG90aGVyU3BhbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSXNEdXBsaWNhdGUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbklzRHVwbGljYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTdWdnZXN0aW9uSW5mbyBzdWdnZXN0aW9uSW5mbyA9IHN1Z2dlc3Rpb25JbmZvc1tudW1iZXJPZlN1Z2dlc3Rpb25zXTsKKyAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25TcGFuID0gc3VnZ2VzdGlvblNwYW47CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSW5mby5tU3VnZ2VzdGlvbkVuZCA9IHN1Z2dlc3Rpb24ubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1UZXh0LnJlcGxhY2UoMCwgc3VnZ2VzdGlvbkluZm8ubVRleHQubGVuZ3RoKCksIHN1Z2dlc3Rpb24pOworICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlN1Z2dlc3Rpb25zKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25zID49IHN1Z2dlc3Rpb25JbmZvcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJPZlN1Z2dlc3Rpb25zOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bWJlck9mU3VnZ2VzdGlvbnM7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAVmlzaWJsZUZvclRlc3RpbmcKICAgICBwdWJsaWMgY2xhc3MgU3VnZ2VzdGlvbnNQb3B1cFdpbmRvdyBleHRlbmRzIFBpbm5lZFBvcHVwV2luZG93IGltcGxlbWVudHMgT25JdGVtQ2xpY2tMaXN0ZW5lciB7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTlVNQkVSX1NVR0dFU1RJT05TID0gU3VnZ2VzdGlvblNwYW4uU1VHR0VTVElPTlNfTUFYX1NJWkU7CkBAIC0yNjQ3LDggKzMwOTEsNiBAQAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUN1cnNvcldhc1Zpc2libGVCZWZvcmVTdWdnZXN0aW9uczsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1Nob3dpbmdVcCA9IGZhbHNlOwogICAgICAgICBwcml2YXRlIFN1Z2dlc3Rpb25BZGFwdGVyIG1TdWdnZXN0aW9uc0FkYXB0ZXI7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQ29tcGFyYXRvcjxTdWdnZXN0aW9uU3Bhbj4gbVN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN1Z2dlc3Rpb25TcGFuLCBJbnRlZ2VyPiBtU3BhbnNMZW5ndGhzOwogICAgICAgICBwcml2YXRlIGZpbmFsIFRleHRBcHBlYXJhbmNlU3BhbiBtSGlnaGxpZ2h0U3BhbiA9IG5ldyBUZXh0QXBwZWFyYW5jZVNwYW4oCiAgICAgICAgICAgICAgICAgbVRleHRWaWV3LmdldENvbnRleHQoKSwgbVRleHRWaWV3Lm1UZXh0RWRpdFN1Z2dlc3Rpb25IaWdobGlnaHRTdHlsZSk7CiAgICAgICAgIHByaXZhdGUgVGV4dFZpZXcgbUFkZFRvRGljdGlvbmFyeUJ1dHRvbjsKQEAgLTI2NjIsOCArMzEwNCwxMCBAQAogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRpc21pc3MoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc1Nob3dpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN1cGVyLmRpc21pc3MoKTsKLQogICAgICAgICAgICAgICAgIGdldFBvc2l0aW9uTGlzdGVuZXIoKS5yZW1vdmVTdWJzY3JpYmVyKFN1Z2dlc3Rpb25zUG9wdXBXaW5kb3cudGhpcyk7CiAKICAgICAgICAgICAgICAgICAvLyBTYWZlIGNhc3Qgc2luY2Ugc2hvdygpIGNoZWNrcyB0aGF0IG1UZXh0Vmlldy5nZXRUZXh0KCkgaXMgYW4gRWRpdGFibGUKQEAgLTI2NzgsOCArMzEyMiw2IEBACiAKICAgICAgICAgcHVibGljIFN1Z2dlc3Rpb25zUG9wdXBXaW5kb3coKSB7CiAgICAgICAgICAgICBtQ3Vyc29yV2FzVmlzaWJsZUJlZm9yZVN1Z2dlc3Rpb25zID0gbUN1cnNvclZpc2libGU7Ci0gICAgICAgICAgICBtU3VnZ2VzdGlvblNwYW5Db21wYXJhdG9yID0gbmV3IFN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvcigpOwotICAgICAgICAgICAgbVNwYW5zTGVuZ3RocyA9IG5ldyBIYXNoTWFwPFN1Z2dlc3Rpb25TcGFuLCBJbnRlZ2VyPigpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0yNzcwLDI0ICszMjEyLDYgQEAKICAgICAgICAgICAgIG1Jc1Nob3dpbmdVcCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBTdWdnZXN0aW9uSW5mbyB7Ci0gICAgICAgICAgICBpbnQgc3VnZ2VzdGlvblN0YXJ0LCBzdWdnZXN0aW9uRW5kOyAvLyByYW5nZSBvZiBhY3R1YWwgc3VnZ2VzdGlvbiB3aXRoaW4gdGV4dAotCi0gICAgICAgICAgICAvLyB0aGUgU3VnZ2VzdGlvblNwYW4gdGhhdCB0aGlzIFRleHRWaWV3IHJlcHJlc2VudHMKLSAgICAgICAgICAgIEBOdWxsYWJsZQotICAgICAgICAgICAgU3VnZ2VzdGlvblNwYW4gc3VnZ2VzdGlvblNwYW47Ci0KLSAgICAgICAgICAgIGludCBzdWdnZXN0aW9uSW5kZXg7IC8vIHRoZSBpbmRleCBvZiB0aGlzIHN1Z2dlc3Rpb24gaW5zaWRlIHN1Z2dlc3Rpb25TcGFuCi0KLSAgICAgICAgICAgIEBOdWxsYWJsZQotICAgICAgICAgICAgZmluYWwgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlciB0ZXh0ID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIoKTsKLQotICAgICAgICAgICAgdm9pZCBjbGVhcigpIHsKLSAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3BhbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgdGV4dC5jbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgcHJpdmF0ZSBjbGFzcyBTdWdnZXN0aW9uQWRhcHRlciBleHRlbmRzIEJhc2VBZGFwdGVyIHsKICAgICAgICAgICAgIHByaXZhdGUgTGF5b3V0SW5mbGF0ZXIgbUluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBtVGV4dFZpZXcuZ2V0Q29udGV4dCgpLgogICAgICAgICAgICAgICAgICAgICBnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOwpAQCAtMjgxNyw1NSArMzI0MSwxMSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpbmFsIFN1Z2dlc3Rpb25JbmZvIHN1Z2dlc3Rpb25JbmZvID0gbVN1Z2dlc3Rpb25JbmZvc1twb3NpdGlvbl07Ci0gICAgICAgICAgICAgICAgdGV4dFZpZXcuc2V0VGV4dChzdWdnZXN0aW9uSW5mby50ZXh0KTsKKyAgICAgICAgICAgICAgICB0ZXh0Vmlldy5zZXRUZXh0KHN1Z2dlc3Rpb25JbmZvLm1UZXh0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dFZpZXc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIGNsYXNzIFN1Z2dlc3Rpb25TcGFuQ29tcGFyYXRvciBpbXBsZW1lbnRzIENvbXBhcmF0b3I8U3VnZ2VzdGlvblNwYW4+IHsKLSAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdWdnZXN0aW9uU3BhbiBzcGFuMSwgU3VnZ2VzdGlvblNwYW4gc3BhbjIpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZzEgPSBzcGFuMS5nZXRGbGFncygpOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFnMiA9IHNwYW4yLmdldEZsYWdzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWcxICE9IGZsYWcyKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBvcmRlciBoZXJlIHNob3VsZCBtYXRjaCB3aGF0IGlzIHVzZWQgaW4gdXBkYXRlRHJhd1N0YXRlCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZWFzeTEgPSAoZmxhZzEgJiBTdWdnZXN0aW9uU3Bhbi5GTEFHX0VBU1lfQ09SUkVDVCkgIT0gMDsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBlYXN5MiA9IChmbGFnMiAmIFN1Z2dlc3Rpb25TcGFuLkZMQUdfRUFTWV9DT1JSRUNUKSAhPSAwOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG1pc3NwZWxsZWQxID0gKGZsYWcxICYgU3VnZ2VzdGlvblNwYW4uRkxBR19NSVNTUEVMTEVEKSAhPSAwOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG1pc3NwZWxsZWQyID0gKGZsYWcyICYgU3VnZ2VzdGlvblNwYW4uRkxBR19NSVNTUEVMTEVEKSAhPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoZWFzeTEgJiYgIW1pc3NwZWxsZWQxKSByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlYXN5MiAmJiAhbWlzc3BlbGxlZDIpIHJldHVybiAxOwotICAgICAgICAgICAgICAgICAgICBpZiAobWlzc3BlbGxlZDEpIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1pc3NwZWxsZWQyKSByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbVNwYW5zTGVuZ3Rocy5nZXQoc3BhbjEpLmludFZhbHVlKCkgLSBtU3BhbnNMZW5ndGhzLmdldChzcGFuMikuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHRoZSBzdWdnZXN0aW9uIHNwYW5zIHRoYXQgY292ZXIgdGhlIGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uLiBUaGUgc3VnZ2VzdGlvbgotICAgICAgICAgKiBzcGFucyBhcmUgc29ydGVkIGFjY29yZGluZyB0byB0aGUgbGVuZ3RoIG9mIHRleHQgdGhhdCB0aGV5IGFyZSBhdHRhY2hlZCB0by4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgU3VnZ2VzdGlvblNwYW5bXSBnZXRTdWdnZXN0aW9uU3BhbnMoKSB7Ci0gICAgICAgICAgICBpbnQgcG9zID0gbVRleHRWaWV3LmdldFNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgICAgICAgICBTcGFubmFibGUgc3Bhbm5hYmxlID0gKFNwYW5uYWJsZSkgbVRleHRWaWV3LmdldFRleHQoKTsKLSAgICAgICAgICAgIFN1Z2dlc3Rpb25TcGFuW10gc3VnZ2VzdGlvblNwYW5zID0gc3Bhbm5hYmxlLmdldFNwYW5zKHBvcywgcG9zLCBTdWdnZXN0aW9uU3Bhbi5jbGFzcyk7Ci0KLSAgICAgICAgICAgIG1TcGFuc0xlbmd0aHMuY2xlYXIoKTsKLSAgICAgICAgICAgIGZvciAoU3VnZ2VzdGlvblNwYW4gc3VnZ2VzdGlvblNwYW4gOiBzdWdnZXN0aW9uU3BhbnMpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzcGFubmFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKTsKLSAgICAgICAgICAgICAgICBpbnQgZW5kID0gc3Bhbm5hYmxlLmdldFNwYW5FbmQoc3VnZ2VzdGlvblNwYW4pOwotICAgICAgICAgICAgICAgIG1TcGFuc0xlbmd0aHMucHV0KHN1Z2dlc3Rpb25TcGFuLCBJbnRlZ2VyLnZhbHVlT2YoZW5kIC0gc3RhcnQpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gVGhlIHN1Z2dlc3Rpb25zIGFyZSBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHR5cGVzIChlYXN5IGNvcnJlY3Rpb24gZmlyc3QsIHRoZW4KLSAgICAgICAgICAgIC8vIG1pc3NwZWxsZWQpIGFuZCB0byB0aGUgbGVuZ3RoIG9mIHRoZSB0ZXh0IHRoYXQgdGhleSBjb3ZlciAoc2hvcnRlciBmaXJzdCkuCi0gICAgICAgICAgICBBcnJheXMuc29ydChzdWdnZXN0aW9uU3BhbnMsIG1TdWdnZXN0aW9uU3BhbkNvbXBhcmF0b3IpOwotICAgICAgICAgICAgbVNwYW5zTGVuZ3Rocy5jbGVhcigpOwotCi0gICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvblNwYW5zOwotICAgICAgICB9Ci0KICAgICAgICAgQFZpc2libGVGb3JUZXN0aW5nCiAgICAgICAgIHB1YmxpYyBWaWV3R3JvdXAgZ2V0Q29udGVudFZpZXdGb3JUZXN0aW5nKCkgewogICAgICAgICAgICAgcmV0dXJuIG1Db250ZW50VmlldzsKQEAgLTI5NDksNjYgKzMzMjksMjYgQEAKIAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gdXBkYXRlU3VnZ2VzdGlvbnMoKSB7CiAgICAgICAgICAgICBTcGFubmFibGUgc3Bhbm5hYmxlID0gKFNwYW5uYWJsZSkgbVRleHRWaWV3LmdldFRleHQoKTsKLSAgICAgICAgICAgIFN1Z2dlc3Rpb25TcGFuW10gc3VnZ2VzdGlvblNwYW5zID0gZ2V0U3VnZ2VzdGlvblNwYW5zKCk7CisgICAgICAgICAgICBtTnVtYmVyT2ZTdWdnZXN0aW9ucyA9CisgICAgICAgICAgICAgICAgICAgIG1TdWdnZXN0aW9uSGVscGVyLmdldFN1Z2dlc3Rpb25JbmZvKG1TdWdnZXN0aW9uSW5mb3MpOworICAgICAgICAgICAgaWYgKG1OdW1iZXJPZlN1Z2dlc3Rpb25zID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZpbmFsIGludCBuYlNwYW5zID0gc3VnZ2VzdGlvblNwYW5zLmxlbmd0aDsKLSAgICAgICAgICAgIC8vIFN1Z2dlc3Rpb25zIGFyZSBzaG93biBhZnRlciBhIGRlbGF5OiB0aGUgdW5kZXJseWluZyBzcGFucyBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQKLSAgICAgICAgICAgIGlmIChuYlNwYW5zID09IDApIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgbU51bWJlck9mU3VnZ2VzdGlvbnMgPSAwOwogICAgICAgICAgICAgaW50IHNwYW5VbmlvblN0YXJ0ID0gbVRleHRWaWV3LmdldFRleHQoKS5sZW5ndGgoKTsKICAgICAgICAgICAgIGludCBzcGFuVW5pb25FbmQgPSAwOwogCiAgICAgICAgICAgICBtTWlzc3BlbGxlZFNwYW4gPSBudWxsOwotICAgICAgICAgICAgaW50IHVuZGVybGluZUNvbG9yID0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgc3BhbkluZGV4ID0gMDsgc3BhbkluZGV4IDwgbmJTcGFuczsgc3BhbkluZGV4KyspIHsKLSAgICAgICAgICAgICAgICBTdWdnZXN0aW9uU3BhbiBzdWdnZXN0aW9uU3BhbiA9IHN1Z2dlc3Rpb25TcGFuc1tzcGFuSW5kZXhdOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzcGFuU3RhcnQgPSBzcGFubmFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3BhbkVuZCA9IHNwYW5uYWJsZS5nZXRTcGFuRW5kKHN1Z2dlc3Rpb25TcGFuKTsKLSAgICAgICAgICAgICAgICBzcGFuVW5pb25TdGFydCA9IE1hdGgubWluKHNwYW5TdGFydCwgc3BhblVuaW9uU3RhcnQpOwotICAgICAgICAgICAgICAgIHNwYW5VbmlvbkVuZCA9IE1hdGgubWF4KHNwYW5FbmQsIHNwYW5VbmlvbkVuZCk7Ci0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU51bWJlck9mU3VnZ2VzdGlvbnM7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIFN1Z2dlc3Rpb25JbmZvIHN1Z2dlc3Rpb25JbmZvID0gbVN1Z2dlc3Rpb25JbmZvc1tpXTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdWdnZXN0aW9uU3BhbiBzdWdnZXN0aW9uU3BhbiA9IHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uU3BhbjsKICAgICAgICAgICAgICAgICBpZiAoKHN1Z2dlc3Rpb25TcGFuLmdldEZsYWdzKCkgJiBTdWdnZXN0aW9uU3Bhbi5GTEFHX01JU1NQRUxMRUQpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgbU1pc3NwZWxsZWRTcGFuID0gc3VnZ2VzdGlvblNwYW47CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHNwYW4gZGljdGF0ZXMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGhpZ2hsaWdodGVkIHRleHQKLSAgICAgICAgICAgICAgICBpZiAoc3BhbkluZGV4ID09IDApIHVuZGVybGluZUNvbG9yID0gc3VnZ2VzdGlvblNwYW4uZ2V0VW5kZXJsaW5lQ29sb3IoKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZ1tdIHN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvblNwYW4uZ2V0U3VnZ2VzdGlvbnMoKTsKLSAgICAgICAgICAgICAgICBpbnQgbmJTdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCBuYlN1Z2dlc3Rpb25zOyBzdWdnZXN0aW9uSW5kZXgrKykgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25zW3N1Z2dlc3Rpb25JbmRleF07Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzdWdnZXN0aW9uSXNEdXBsaWNhdGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTnVtYmVyT2ZTdWdnZXN0aW9uczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN1Z2dlc3Rpb25JbmZvc1tpXS50ZXh0LnRvU3RyaW5nKCkuZXF1YWxzKHN1Z2dlc3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VnZ2VzdGlvblNwYW4gb3RoZXJTdWdnZXN0aW9uU3BhbiA9IG1TdWdnZXN0aW9uSW5mb3NbaV0uc3VnZ2VzdGlvblNwYW47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG90aGVyU3BhblN0YXJ0ID0gc3Bhbm5hYmxlLmdldFNwYW5TdGFydChvdGhlclN1Z2dlc3Rpb25TcGFuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb3RoZXJTcGFuRW5kID0gc3Bhbm5hYmxlLmdldFNwYW5FbmQob3RoZXJTdWdnZXN0aW9uU3Bhbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5TdGFydCA9PSBvdGhlclNwYW5TdGFydCAmJiBzcGFuRW5kID09IG90aGVyU3BhbkVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSXNEdXBsaWNhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25Jc0R1cGxpY2F0ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3VnZ2VzdGlvbkluZm8gc3VnZ2VzdGlvbkluZm8gPSBtU3VnZ2VzdGlvbkluZm9zW21OdW1iZXJPZlN1Z2dlc3Rpb25zXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLnN1Z2dlc3Rpb25TcGFuID0gc3VnZ2VzdGlvblNwYW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uSW5kZXggPSBzdWdnZXN0aW9uSW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uSW5mby50ZXh0LnJlcGxhY2UoMCwgc3VnZ2VzdGlvbkluZm8udGV4dC5sZW5ndGgoKSwgc3VnZ2VzdGlvbik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1OdW1iZXJPZlN1Z2dlc3Rpb25zKys7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTnVtYmVyT2ZTdWdnZXN0aW9ucyA9PSBNQVhfTlVNQkVSX1NVR0dFU1RJT05TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBlbmQgb3V0ZXIgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFuSW5kZXggPSBuYlNwYW5zOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIGludCBzcGFuU3RhcnQgPSBzcGFubmFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3BhbkVuZCA9IHNwYW5uYWJsZS5nZXRTcGFuRW5kKHN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgICAgICBzcGFuVW5pb25TdGFydCA9IE1hdGgubWluKHNwYW5VbmlvblN0YXJ0LCBzcGFuU3RhcnQpOworICAgICAgICAgICAgICAgIHNwYW5VbmlvbkVuZCA9IE1hdGgubWF4KHNwYW5VbmlvbkVuZCwgc3BhbkVuZCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU51bWJlck9mU3VnZ2VzdGlvbnM7IGkrKykgewpAQCAtMzAyNyw2ICszMzY3LDcgQEAKICAgICAgICAgICAgIG1BZGRUb0RpY3Rpb25hcnlCdXR0b24uc2V0VmlzaWJpbGl0eShhZGRUb0RpY3Rpb25hcnlCdXR0b25WaXNpYmlsaXR5KTsKIAogICAgICAgICAgICAgaWYgKG1TdWdnZXN0aW9uUmFuZ2VTcGFuID09IG51bGwpIG1TdWdnZXN0aW9uUmFuZ2VTcGFuID0gbmV3IFN1Z2dlc3Rpb25SYW5nZVNwYW4oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB1bmRlcmxpbmVDb2xvciA9IG1TdWdnZXN0aW9uSW5mb3NbMF0ubVN1Z2dlc3Rpb25TcGFuLmdldFVuZGVybGluZUNvbG9yKCk7CiAgICAgICAgICAgICBpZiAodW5kZXJsaW5lQ29sb3IgPT0gMCkgewogICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIG9uIHRoZSBkZWZhdWx0IGhpZ2hsaWdodCBjb2xvciB3aGVuIHRoZSBmaXJzdCBzcGFuIGRvZXMgbm90IHByb3ZpZGUgb25lCiAgICAgICAgICAgICAgICAgbVN1Z2dlc3Rpb25SYW5nZVNwYW4uc2V0QmFja2dyb3VuZENvbG9yKG1UZXh0Vmlldy5tSGlnaGxpZ2h0Q29sb3IpOwpAQCAtMzA0NiwyMSArMzM4NywyMSBAQAogICAgICAgICBwcml2YXRlIHZvaWQgaGlnaGxpZ2h0VGV4dERpZmZlcmVuY2VzKFN1Z2dlc3Rpb25JbmZvIHN1Z2dlc3Rpb25JbmZvLCBpbnQgdW5pb25TdGFydCwKICAgICAgICAgICAgICAgICBpbnQgdW5pb25FbmQpIHsKICAgICAgICAgICAgIGZpbmFsIFNwYW5uYWJsZSB0ZXh0ID0gKFNwYW5uYWJsZSkgbVRleHRWaWV3LmdldFRleHQoKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBzcGFuU3RhcnQgPSB0ZXh0LmdldFNwYW5TdGFydChzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uU3Bhbik7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgc3BhbkVuZCA9IHRleHQuZ2V0U3BhbkVuZChzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uU3Bhbik7CisgICAgICAgICAgICBmaW5hbCBpbnQgc3BhblN0YXJ0ID0gdGV4dC5nZXRTcGFuU3RhcnQoc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25TcGFuKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBzcGFuRW5kID0gdGV4dC5nZXRTcGFuRW5kKHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uU3Bhbik7CiAKICAgICAgICAgICAgIC8vIEFkanVzdCB0aGUgc3RhcnQvZW5kIG9mIHRoZSBzdWdnZXN0aW9uIHNwYW4KLSAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLnN1Z2dlc3Rpb25TdGFydCA9IHNwYW5TdGFydCAtIHVuaW9uU3RhcnQ7Ci0gICAgICAgICAgICBzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uRW5kID0gc3VnZ2VzdGlvbkluZm8uc3VnZ2VzdGlvblN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICsgc3VnZ2VzdGlvbkluZm8udGV4dC5sZW5ndGgoKTsKKyAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uU3RhcnQgPSBzcGFuU3RhcnQgLSB1bmlvblN0YXJ0OworICAgICAgICAgICAgc3VnZ2VzdGlvbkluZm8ubVN1Z2dlc3Rpb25FbmQgPSBzdWdnZXN0aW9uSW5mby5tU3VnZ2VzdGlvblN0YXJ0CisgICAgICAgICAgICAgICAgICAgICsgc3VnZ2VzdGlvbkluZm8ubVRleHQubGVuZ3RoKCk7CiAKLSAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLnRleHQuc2V0U3BhbihtSGlnaGxpZ2h0U3BhbiwgMCwgc3VnZ2VzdGlvbkluZm8udGV4dC5sZW5ndGgoKSwKKyAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1UZXh0LnNldFNwYW4obUhpZ2hsaWdodFNwYW4sIDAsIHN1Z2dlc3Rpb25JbmZvLm1UZXh0Lmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICBTcGFubmVkLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRSk7CiAKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdGV4dCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBzcGFuLgogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRleHRBc1N0cmluZyA9IHRleHQudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLnRleHQuaW5zZXJ0KDAsIHRleHRBc1N0cmluZy5zdWJzdHJpbmcodW5pb25TdGFydCwgc3BhblN0YXJ0KSk7Ci0gICAgICAgICAgICBzdWdnZXN0aW9uSW5mby50ZXh0LmFwcGVuZCh0ZXh0QXNTdHJpbmcuc3Vic3RyaW5nKHNwYW5FbmQsIHVuaW9uRW5kKSk7CisgICAgICAgICAgICBzdWdnZXN0aW9uSW5mby5tVGV4dC5pbnNlcnQoMCwgdGV4dEFzU3RyaW5nLnN1YnN0cmluZyh1bmlvblN0YXJ0LCBzcGFuU3RhcnQpKTsKKyAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmZvLm1UZXh0LmFwcGVuZCh0ZXh0QXNTdHJpbmcuc3Vic3RyaW5nKHNwYW5FbmQsIHVuaW9uRW5kKSk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTMwNjgsNjkgKzM0MDksMTQgQEAKICAgICAgICAgICAgIEVkaXRhYmxlIGVkaXRhYmxlID0gKEVkaXRhYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpOwogICAgICAgICAgICAgU3VnZ2VzdGlvbkluZm8gc3VnZ2VzdGlvbkluZm8gPSBtU3VnZ2VzdGlvbkluZm9zW3Bvc2l0aW9uXTsKIAotICAgICAgICAgICAgZmluYWwgaW50IHNwYW5TdGFydCA9IGVkaXRhYmxlLmdldFNwYW5TdGFydChzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uU3Bhbik7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgc3BhbkVuZCA9IGVkaXRhYmxlLmdldFNwYW5FbmQoc3VnZ2VzdGlvbkluZm8uc3VnZ2VzdGlvblNwYW4pOworICAgICAgICAgICAgZmluYWwgaW50IHNwYW5TdGFydCA9IGVkaXRhYmxlLmdldFNwYW5TdGFydChzdWdnZXN0aW9uSW5mby5tU3VnZ2VzdGlvblNwYW4pOworICAgICAgICAgICAgZmluYWwgaW50IHNwYW5FbmQgPSBlZGl0YWJsZS5nZXRTcGFuRW5kKHN1Z2dlc3Rpb25JbmZvLm1TdWdnZXN0aW9uU3Bhbik7CiAgICAgICAgICAgICBpZiAoc3BhblN0YXJ0IDwgMCB8fCBzcGFuRW5kIDw9IHNwYW5TdGFydCkgewogICAgICAgICAgICAgICAgIC8vIFNwYW4gaGFzIGJlZW4gcmVtb3ZlZAogICAgICAgICAgICAgICAgIGhpZGVXaXRoQ2xlYW5VcCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9yaWdpbmFsVGV4dCA9IFRleHRVdGlscy5zdWJzdHJpbmcoZWRpdGFibGUsIHNwYW5TdGFydCwgc3BhbkVuZCk7Ci0KLSAgICAgICAgICAgIC8vIFN1Z2dlc3Rpb25TcGFucyBhcmUgcmVtb3ZlZCBieSByZXBsYWNlOiBzYXZlIHRoZW0gYmVmb3JlCi0gICAgICAgICAgICBmaW5hbCBTdWdnZXN0aW9uU3BhbltdIHN1Z2dlc3Rpb25TcGFucyA9IGVkaXRhYmxlLmdldFNwYW5zKHNwYW5TdGFydCwgc3BhbkVuZCwKLSAgICAgICAgICAgICAgICAgICAgU3VnZ2VzdGlvblNwYW4uY2xhc3MpOwotICAgICAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHN1Z2dlc3Rpb25TcGFucy5sZW5ndGg7Ci0gICAgICAgICAgICBmaW5hbCBpbnRbXSBzdWdnZXN0aW9uU3BhbnNTdGFydHMgPSBuZXcgaW50W2xlbmd0aF07Ci0gICAgICAgICAgICBmaW5hbCBpbnRbXSBzdWdnZXN0aW9uU3BhbnNFbmRzID0gbmV3IGludFtsZW5ndGhdOwotICAgICAgICAgICAgZmluYWwgaW50W10gc3VnZ2VzdGlvblNwYW5zRmxhZ3MgPSBuZXcgaW50W2xlbmd0aF07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3VnZ2VzdGlvblNwYW4gc3VnZ2VzdGlvblNwYW4gPSBzdWdnZXN0aW9uU3BhbnNbaV07Ci0gICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5zU3RhcnRzW2ldID0gZWRpdGFibGUuZ2V0U3BhblN0YXJ0KHN1Z2dlc3Rpb25TcGFuKTsKLSAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3BhbnNFbmRzW2ldID0gZWRpdGFibGUuZ2V0U3BhbkVuZChzdWdnZXN0aW9uU3Bhbik7Ci0gICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5zRmxhZ3NbaV0gPSBlZGl0YWJsZS5nZXRTcGFuRmxhZ3Moc3VnZ2VzdGlvblNwYW4pOwotCi0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHBvdGVudGlhbCBtaXNzcGVsbGVkIGZsYWdzCi0gICAgICAgICAgICAgICAgaW50IHN1Z2dlc3Rpb25TcGFuRmxhZ3MgPSBzdWdnZXN0aW9uU3Bhbi5nZXRGbGFncygpOwotICAgICAgICAgICAgICAgIGlmICgoc3VnZ2VzdGlvblNwYW5GbGFncyAmIFN1Z2dlc3Rpb25TcGFuLkZMQUdfTUlTU1BFTExFRCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25TcGFuRmxhZ3MgJj0gflN1Z2dlc3Rpb25TcGFuLkZMQUdfTUlTU1BFTExFRDsKLSAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5GbGFncyAmPSB+U3VnZ2VzdGlvblNwYW4uRkxBR19FQVNZX0NPUlJFQ1Q7Ci0gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25TcGFuLnNldEZsYWdzKHN1Z2dlc3Rpb25TcGFuRmxhZ3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgaW50IHN1Z2dlc3Rpb25TdGFydCA9IHN1Z2dlc3Rpb25JbmZvLnN1Z2dlc3Rpb25TdGFydDsKLSAgICAgICAgICAgIGZpbmFsIGludCBzdWdnZXN0aW9uRW5kID0gc3VnZ2VzdGlvbkluZm8uc3VnZ2VzdGlvbkVuZDsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdWdnZXN0aW9uID0gc3VnZ2VzdGlvbkluZm8udGV4dC5zdWJTZXF1ZW5jZSgKLSAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvblN0YXJ0LCBzdWdnZXN0aW9uRW5kKS50b1N0cmluZygpOwotICAgICAgICAgICAgbVRleHRWaWV3LnJlcGxhY2VUZXh0X2ludGVybmFsKHNwYW5TdGFydCwgc3BhbkVuZCwgc3VnZ2VzdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIE5vdGlmeSBzb3VyY2UgSU1FIG9mIHRoZSBzdWdnZXN0aW9uIHBpY2suIERvIHRoaXMgYmVmb3JlCi0gICAgICAgICAgICAvLyBzd2FwaW5nIHRleHRzLgotICAgICAgICAgICAgc3VnZ2VzdGlvbkluZm8uc3VnZ2VzdGlvblNwYW4ubm90aWZ5U2VsZWN0aW9uKAotICAgICAgICAgICAgICAgICAgICBtVGV4dFZpZXcuZ2V0Q29udGV4dCgpLCBvcmlnaW5hbFRleHQsIHN1Z2dlc3Rpb25JbmZvLnN1Z2dlc3Rpb25JbmRleCk7Ci0KLSAgICAgICAgICAgIC8vIFN3YXAgdGV4dCBjb250ZW50IGJldHdlZW4gYWN0dWFsIHRleHQgYW5kIFN1Z2dlc3Rpb24gc3BhbgotICAgICAgICAgICAgZmluYWwgU3RyaW5nW10gc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uSW5mby5zdWdnZXN0aW9uU3Bhbi5nZXRTdWdnZXN0aW9ucygpOwotICAgICAgICAgICAgc3VnZ2VzdGlvbnNbc3VnZ2VzdGlvbkluZm8uc3VnZ2VzdGlvbkluZGV4XSA9IG9yaWdpbmFsVGV4dDsKLQotICAgICAgICAgICAgLy8gUmVzdG9yZSBwcmV2aW91cyBTdWdnZXN0aW9uU3BhbnMKLSAgICAgICAgICAgIGZpbmFsIGludCBsZW5ndGhEaWZmZXJlbmNlID0gc3VnZ2VzdGlvbi5sZW5ndGgoKSAtIChzcGFuRW5kIC0gc3BhblN0YXJ0KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IHNwYW5zIHRoYXQgaW5jbHVkZSB0aGUgbW9kaWZpZWQgcmVnaW9uIG1ha2Ugc2Vuc2UgYWZ0ZXIgcmVwbGFjZW1lbnQKLSAgICAgICAgICAgICAgICAvLyBTcGFucyBwYXJ0aWFsbHkgaW5jbHVkZWQgaW4gdGhlIHJlcGxhY2VkIHJlZ2lvbiBhcmUgcmVtb3ZlZCwgdGhlcmUgaXMgbm8KLSAgICAgICAgICAgICAgICAvLyB3YXkgdG8gYXNzaWduIHRoZW0gYSB2YWxpZCByYW5nZSBhZnRlciByZXBsYWNlbWVudAotICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uU3BhbnNTdGFydHNbaV0gPD0gc3BhblN0YXJ0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uU3BhbnNFbmRzW2ldID49IHNwYW5FbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgbVRleHRWaWV3LnNldFNwYW5faW50ZXJuYWwoc3VnZ2VzdGlvblNwYW5zW2ldLCBzdWdnZXN0aW9uU3BhbnNTdGFydHNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvblNwYW5zRW5kc1tpXSArIGxlbmd0aERpZmZlcmVuY2UsIHN1Z2dlc3Rpb25TcGFuc0ZsYWdzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIE1vdmUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIHJlcGxhY2VkIHdvcmQKLSAgICAgICAgICAgIGZpbmFsIGludCBuZXdDdXJzb3JQb3NpdGlvbiA9IHNwYW5FbmQgKyBsZW5ndGhEaWZmZXJlbmNlOwotICAgICAgICAgICAgbVRleHRWaWV3LnNldEN1cnNvclBvc2l0aW9uX2ludGVybmFsKG5ld0N1cnNvclBvc2l0aW9uLCBuZXdDdXJzb3JQb3NpdGlvbik7CisgICAgICAgICAgICByZXBsYWNlV2l0aFN1Z2dlc3Rpb24oc3VnZ2VzdGlvbkluZm8sIHNwYW5TdGFydCwgc3BhbkVuZCk7CiAgICAgICAgICAgICBoaWRlV2l0aENsZWFuVXAoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3NzcsMzAgKzQwNjMsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgc2hvd0F0TG9jYXRpb24oaW50IG9mZnNldCkgewotICAgICAgICAgICAgLy8gVE9ETyAtIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIHNob3cgdGhlIGhhbmRsZXMKLSAgICAgICAgICAgIC8vIGFmdGVyIHRoZSBkcmFnIGFjY2VsZXJhdG9yIGhhcyBvY2N1cmVkLgotICAgICAgICAgICAgaW50W10gdG1wQ29yZHMgPSBuZXcgaW50WzJdOwotICAgICAgICAgICAgbVRleHRWaWV3LmdldExvY2F0aW9uSW5XaW5kb3codG1wQ29yZHMpOwotCi0gICAgICAgICAgICBMYXlvdXQgbGF5b3V0ID0gbVRleHRWaWV3LmdldExheW91dCgpOwotICAgICAgICAgICAgaW50IHBvc1ggPSB0bXBDb3Jkc1swXTsKLSAgICAgICAgICAgIGludCBwb3NZID0gdG1wQ29yZHNbMV07Ci0KLSAgICAgICAgICAgIGZpbmFsIGludCBsaW5lID0gbGF5b3V0LmdldExpbmVGb3JPZmZzZXQob2Zmc2V0KTsKLQotICAgICAgICAgICAgaW50IHN0YXJ0WCA9IChpbnQpIChsYXlvdXQuZ2V0UHJpbWFyeUhvcml6b250YWwob2Zmc2V0KSAtIDAuNWYKLSAgICAgICAgICAgICAgICAgICAgLSBtSG90c3BvdFggLSBnZXRIb3Jpem9udGFsT2Zmc2V0KCkgKyBnZXRDdXJzb3JPZmZzZXQoKSk7Ci0gICAgICAgICAgICBpbnQgc3RhcnRZID0gbGF5b3V0LmdldExpbmVCb3R0b20obGluZSk7Ci0KLSAgICAgICAgICAgIC8vIFRha2UgVGV4dFZpZXcncyBwYWRkaW5nIGFuZCBzY3JvbGwgaW50byBhY2NvdW50LgotICAgICAgICAgICAgc3RhcnRYICs9IG1UZXh0Vmlldy52aWV3cG9ydFRvQ29udGVudEhvcml6b250YWxPZmZzZXQoKTsKLSAgICAgICAgICAgIHN0YXJ0WSArPSBtVGV4dFZpZXcudmlld3BvcnRUb0NvbnRlbnRWZXJ0aWNhbE9mZnNldCgpOwotCi0gICAgICAgICAgICBtQ29udGFpbmVyLnNob3dBdExvY2F0aW9uKG1UZXh0VmlldywgR3Jhdml0eS5OT19HUkFWSVRZLAotICAgICAgICAgICAgICAgICAgICBzdGFydFggKyBwb3NYLCBzdGFydFkgKyBwb3NZKTsKLSAgICAgICAgfQotCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGMpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBkcmF3V2lkdGggPSBtRHJhd2FibGUuZ2V0SW50cmluc2ljV2lkdGgoKTsKQEAgLTM5MzMsMTMgKzQxOTUsMTYgQEAKIAogICAgICAgICAgICAgLy8gQ2FuY2VsIHRoZSBzaW5nbGUgdGFwIGRlbGF5ZWQgcnVubmFibGUuCiAgICAgICAgICAgICBpZiAobUluc2VydGlvbkFjdGlvbk1vZGVSdW5uYWJsZSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICYmIChtRG91YmxlVGFwIHx8IGlzQ3Vyc29ySW5zaWRlRWFzeUNvcnJlY3Rpb25TcGFuKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICYmICgobVRhcFN0YXRlID09IFRBUF9TVEFURV9ET1VCTEVfVEFQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtVGFwU3RhdGUgPT0gVEFQX1NUQVRFX1RSSVBMRV9DTElDSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpc0N1cnNvckluc2lkZUVhc3lDb3JyZWN0aW9uU3BhbigpKSkgewogICAgICAgICAgICAgICAgIG1UZXh0Vmlldy5yZW1vdmVDYWxsYmFja3MobUluc2VydGlvbkFjdGlvbk1vZGVSdW5uYWJsZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIFByZXBhcmUgYW5kIHNjaGVkdWxlIHRoZSBzaW5nbGUgdGFwIHJ1bm5hYmxlIHRvIHJ1biBleGFjdGx5IGFmdGVyIHRoZSBkb3VibGUgdGFwCiAgICAgICAgICAgICAvLyB0aW1lb3V0IGhhcyBwYXNzZWQuCi0gICAgICAgICAgICBpZiAoIW1Eb3VibGVUYXAgJiYgIWlzQ3Vyc29ySW5zaWRlRWFzeUNvcnJlY3Rpb25TcGFuKCkKKyAgICAgICAgICAgIGlmICgobVRhcFN0YXRlICE9IFRBUF9TVEFURV9ET1VCTEVfVEFQKSAmJiAobVRhcFN0YXRlICE9IFRBUF9TVEFURV9UUklQTEVfQ0xJQ0spCisgICAgICAgICAgICAgICAgICAgICYmICFpc0N1cnNvckluc2lkZUVhc3lDb3JyZWN0aW9uU3BhbigpCiAgICAgICAgICAgICAgICAgICAgICYmIChkdXJhdGlvblNpbmNlQ3V0T3JDb3B5IDwgUkVDRU5UX0NVVF9DT1BZX0RVUkFUSU9OKSkgewogICAgICAgICAgICAgICAgIGlmIChtVGV4dEFjdGlvbk1vZGUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBpZiAobUluc2VydGlvbkFjdGlvbk1vZGVSdW5uYWJsZSA9PSBudWxsKSB7CkBAIC00MjIzLDEwICs0NDg4LDE1IEBACiAKICAgICAgICAgICAgIGJvb2xlYW4gaXNFeHBhbmRpbmc7CiAgICAgICAgICAgICBmaW5hbCBmbG9hdCB4RGlmZiA9IHggLSBtUHJldlg7Ci0gICAgICAgICAgICBpZiAoYXRSdGwgPT0gaXNTdGFydEhhbmRsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaXNFeHBhbmRpbmcgPSB4RGlmZiA+IDAgfHwgY3VyckxpbmUgPiBtUHJldmlvdXNMaW5lVG91Y2hlZDsKKyAgICAgICAgICAgIGlmIChpc1N0YXJ0SGFuZGxlKCkpIHsKKyAgICAgICAgICAgICAgICBpc0V4cGFuZGluZyA9IGN1cnJMaW5lIDwgbVByZXZpb3VzTGluZVRvdWNoZWQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlzRXhwYW5kaW5nID0geERpZmYgPCAwIHx8IGN1cnJMaW5lIDwgbVByZXZpb3VzTGluZVRvdWNoZWQ7CisgICAgICAgICAgICAgICAgaXNFeHBhbmRpbmcgPSBjdXJyTGluZSA+IG1QcmV2aW91c0xpbmVUb3VjaGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF0UnRsID09IGlzU3RhcnRIYW5kbGUoKSkgeworICAgICAgICAgICAgICAgIGlzRXhwYW5kaW5nIHw9IHhEaWZmID4gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaXNFeHBhbmRpbmcgfD0geERpZmYgPCAwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobVRleHRWaWV3LmdldEhvcml6b250YWxseVNjcm9sbGluZygpKSB7CkBAIC00NDkyLDE0ICs0NzYyLDI0IEBACiAKICAgICAgICAgLy8gV2hlcmUgdGhlIHVzZXIgZmlyc3Qgc3RhcnRzIHRoZSBkcmFnIG1vdGlvbi4KICAgICAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0T2Zmc2V0ID0gLTE7Ci0gICAgICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB1c2VyIGlzIHNlbGVjdGluZyB0ZXh0IGFuZCB1c2luZyB0aGUgZHJhZyBhY2NlbGVyYXRvci4KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1EcmFnQWNjZWxlcmF0b3JBY3RpdmU7CisKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXZlbnRNb3ZlZEVub3VnaFRvU3RhcnREcmFnOwogICAgICAgICAvLyBUaGUgbGluZSB0aGF0IGEgc2VsZWN0aW9uIGhhcHBlbmVkIG1vc3QgcmVjZW50bHkgd2l0aCB0aGUgZHJhZyBhY2NlbGVyYXRvci4KICAgICAgICAgcHJpdmF0ZSBpbnQgbUxpbmVTZWxlY3Rpb25Jc09uID0gLTE7CiAgICAgICAgIC8vIFdoZXRoZXIgdGhlIGRyYWcgYWNjZWxlcmF0b3IgaGFzIHNlbGVjdGVkIHBhc3QgdGhlIGluaXRpYWwgbGluZS4KICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Td2l0Y2hlZExpbmVzID0gZmFsc2U7CiAKKyAgICAgICAgLy8gSW5kaWNhdGVzIHRoZSBkcmFnIGFjY2VsZXJhdG9yIG1vZGUgdGhhdCB0aGUgdXNlciBpcyBjdXJyZW50bHkgdXNpbmcuCisgICAgICAgIHByaXZhdGUgaW50IG1EcmFnQWNjZWxlcmF0b3JNb2RlID0gRFJBR19BQ0NFTEVSQVRPUl9NT0RFX0lOQUNUSVZFOworICAgICAgICAvLyBEcmFnIGFjY2VsZXJhdG9yIGlzIGluYWN0aXZlLgorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19BQ0NFTEVSQVRPUl9NT0RFX0lOQUNUSVZFID0gMDsKKyAgICAgICAgLy8gQ2hhcmFjdGVyIGJhc2VkIHNlbGVjdGlvbiBieSBkcmFnZ2luZy4gT25seSBmb3IgbW91c2UuCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUkFHX0FDQ0VMRVJBVE9SX01PREVfQ0hBUkFDVEVSID0gMTsKKyAgICAgICAgLy8gV29yZCBiYXNlZCBzZWxlY3Rpb24gYnkgZHJhZ2dpbmcuIEVuYWJsZWQgYWZ0ZXIgbG9uZyBwcmVzc2luZyBvciBkb3VibGUgdGFwcGluZy4KKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERSQUdfQUNDRUxFUkFUT1JfTU9ERV9XT1JEID0gMjsKKyAgICAgICAgLy8gUGFyYWdyYXBoIGJhc2VkIHNlbGVjdGlvbiBieSBkcmFnZ2luZy4gRW5hYmxlZCBhZnRlciBtb3VzZSB0cmlwbGUgY2xpY2suCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBEUkFHX0FDQ0VMRVJBVE9SX01PREVfUEFSQUdSQVBIID0gMzsKKwogICAgICAgICBTZWxlY3Rpb25Nb2RpZmllckN1cnNvckNvbnRyb2xsZXIoKSB7CiAgICAgICAgICAgICByZXNldFRvdWNoT2Zmc2V0cygpOwogICAgICAgICB9CkBAIC00NTEwLDcgKzQ3OTAsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW5pdERyYXdhYmxlcygpOwogICAgICAgICAgICAgaW5pdEhhbmRsZXMoKTsKLSAgICAgICAgICAgIGhpZGVJbnNlcnRpb25Qb2ludEN1cnNvckNvbnRyb2xsZXIoKTsKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBpbml0RHJhd2FibGVzKCkgewpAQCAtNDU0OCwxMCArNDgyNywxMCBAQAogICAgICAgICAgICAgaWYgKG1FbmRIYW5kbGUgIT0gbnVsbCkgbUVuZEhhbmRsZS5oaWRlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBlbnRlckRyYWcoKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGVudGVyRHJhZyhpbnQgZHJhZ0FjY2VsZXJhdG9yTW9kZSkgewogICAgICAgICAgICAgLy8gSnVzdCBuZWVkIHRvIGluaXQgdGhlIGhhbmRsZXMgLyBoaWRlIGluc2VydGlvbiBjdXJzb3IuCiAgICAgICAgICAgICBzaG93KCk7Ci0gICAgICAgICAgICBtRHJhZ0FjY2VsZXJhdG9yQWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgIG1EcmFnQWNjZWxlcmF0b3JNb2RlID0gZHJhZ0FjY2VsZXJhdG9yTW9kZTsKICAgICAgICAgICAgIC8vIFN0YXJ0IGxvY2F0aW9uIG9mIHNlbGVjdGlvbi4KICAgICAgICAgICAgIG1TdGFydE9mZnNldCA9IG1UZXh0Vmlldy5nZXRPZmZzZXRGb3JQb3NpdGlvbihtTGFzdERvd25Qb3NpdGlvblgsCiAgICAgICAgICAgICAgICAgICAgIG1MYXN0RG93blBvc2l0aW9uWSk7CkBAIC00NTYzLDYgKzQ4NDIsNyBAQAogICAgICAgICAgICAgLy8gdGhlIHVzZXIgdG8gY29udGludWUgZHJhZ2dpbmcgYWNyb3NzIHRoZSBzY3JlZW4gdG8gc2VsZWN0IHRleHQ7IFRleHRWaWV3IHdpbGwKICAgICAgICAgICAgIC8vIHNjcm9sbCBhcyBuZWNlc3NhcnkuCiAgICAgICAgICAgICBtVGV4dFZpZXcuZ2V0UGFyZW50KCkucmVxdWVzdERpc2FsbG93SW50ZXJjZXB0VG91Y2hFdmVudCh0cnVlKTsKKyAgICAgICAgICAgIG1UZXh0Vmlldy5jYW5jZWxMb25nUHJlc3MoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldmVudCkgewpAQCAtNDU3MCw2ICs0ODUwLDcgQEAKICAgICAgICAgICAgIC8vIHNlbGVjdGlvbiBhbmQgdGFwIGNhbiBtb3ZlIGN1cnNvciBmcm9tIHRoaXMgdGFwIHBvc2l0aW9uLgogICAgICAgICAgICAgZmluYWwgZmxvYXQgZXZlbnRYID0gZXZlbnQuZ2V0WCgpOwogICAgICAgICAgICAgZmluYWwgZmxvYXQgZXZlbnRZID0gZXZlbnQuZ2V0WSgpOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc01vdXNlID0gZXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9NT1VTRSk7CiAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjoKICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhY3RlZFRleHRNb2RlV2lsbEJlU3RhcnRlZCgpKSB7CkBAIC00NTgyLDcgKzQ4NjMsOCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb3VibGUgdGFwIGRldGVjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1HZXN0dXJlU3RheWVkSW5UYXBSZWdpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobURvdWJsZVRhcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtVGFwU3RhdGUgPT0gVEFQX1NUQVRFX0RPVUJMRV9UQVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1UYXBTdGF0ZSA9PSBUQVBfU1RBVEVfVFJJUExFX0NMSUNLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGRlbHRhWCA9IGV2ZW50WCAtIG1Eb3duUG9zaXRpb25YOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBkZWx0YVkgPSBldmVudFkgLSBtRG93blBvc2l0aW9uWTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgZGlzdGFuY2VTcXVhcmVkID0gZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZOwpAQCAtNDU5Myw4ICs0ODc1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc3RheWVkSW5BcmVhID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZVNxdWFyZWQgPCBkb3VibGVUYXBTbG9wICogZG91YmxlVGFwU2xvcDsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RheWVkSW5BcmVhICYmIGlzUG9zaXRpb25PblRleHQoZXZlbnRYLCBldmVudFkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDdXJyZW50V29yZEFuZFN0YXJ0RHJhZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RheWVkSW5BcmVhICYmIChpc01vdXNlIHx8IGlzUG9zaXRpb25PblRleHQoZXZlbnRYLCBldmVudFkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1UYXBTdGF0ZSA9PSBUQVBfU1RBVEVfRE9VQkxFX1RBUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEN1cnJlbnRXb3JkQW5kU3RhcnREcmFnKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1UYXBTdGF0ZSA9PSBUQVBfU1RBVEVfVFJJUExFX0NMSUNLKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0Q3VycmVudFBhcmFncmFwaEFuZFN0YXJ0RHJhZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURpc2NhcmROZXh0QWN0aW9uVXAgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDYzOSw5NCArNDkyNSwxNjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgICAgIGlmIChpc01vdXNlICYmICFpc0RyYWdBY2NlbGVyYXRvckFjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gbVRleHRWaWV3LmdldE9mZnNldEZvclBvc2l0aW9uKGV2ZW50WCwgZXZlbnRZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtU3RhcnRPZmZzZXQgIT0gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgY2hhcmFjdGVyIGJhc2VkIGRyYWcgYWNjZWxlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1UZXh0QWN0aW9uTW9kZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0QWN0aW9uTW9kZS5maW5pc2goKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJEcmFnKERSQUdfQUNDRUxFUkFUT1JfTU9ERV9DSEFSQUNURVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EaXNjYXJkTmV4dEFjdGlvblVwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGF2ZW50TW92ZWRFbm91Z2hUb1N0YXJ0RHJhZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdGFydEhhbmRsZSAhPSBudWxsICYmIG1TdGFydEhhbmRsZS5pc1Nob3dpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhlIGRyYWcgaWYgdGhlIGhhbmRsZXMgYXJlIHNob3dpbmcgYWxyZWFkeS4KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TdGFydE9mZnNldCAhPSAtMSAmJiBtVGV4dFZpZXcuZ2V0TGF5b3V0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtSGF2ZW50TW92ZWRFbm91Z2hUb1N0YXJ0RHJhZykgewotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgeSA9IGV2ZW50WTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN3aXRjaGVkTGluZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2Zmc2V0IHRoZSBmaW5nZXIgYnkgdGhlIHNhbWUgdmVydGljYWwgb2Zmc2V0IGFzIHRoZSBoYW5kbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGltcHJvdmVzIHZpc2liaWxpdHkgb2YgdGhlIGNvbnRlbnQgYmVpbmcgc2VsZWN0ZWQgYnkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hpZnRpbmcgdGhlIGZpbmdlciBiZWxvdyB0aGUgY29udGVudCwgdGhpcyBpcyBhcHBsaWVkIG9uY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgaGFzIHN3aXRjaGVkIGxpbmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBmaW5nZXJPZmZzZXQgPSAobVN0YXJ0SGFuZGxlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtU3RhcnRIYW5kbGUuZ2V0SWRlYWxWZXJ0aWNhbE9mZnNldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0b3VjaFNsb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBldmVudFkgLSBmaW5nZXJPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGN1cnJMaW5lID0gZ2V0Q3VycmVudExpbmVBZGp1c3RlZEZvclNsb3AoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGV4dFZpZXcuZ2V0TGF5b3V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGluZVNlbGVjdGlvbklzT24sIHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbVN3aXRjaGVkTGluZXMgJiYgY3VyckxpbmUgIT0gbUxpbmVTZWxlY3Rpb25Jc09uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyZWFrIGVhcmx5IGhlcmUsIHdlIHdhbnQgdG8gb2Zmc2V0IHRoZSBmaW5nZXIgcG9zaXRpb24gZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCwgb25jZSB0aGUgdXNlciBtb3ZlZCB0aGVpciBmaW5nZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgbGluZSB3ZSBzaG91bGQgYXBwbHkgdGhlIG9mZnNldCBhbmQgKm5vdCogc3dpdGNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmVzIHVudGlsIHJlY29tcHV0aW5nIHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBmaW5nZXIgb2Zmc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3dpdGNoZWRMaW5lcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gbVRleHRWaWV3LmdldE9mZnNldEF0Q29vcmRpbmF0ZShjdXJyTGluZSwgZXZlbnRYKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbmFwIHRvIHdvcmQgYm91bmRhcmllcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZGluZyB3aXRoIGVuZCBoYW5kbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGdldFdvcmRFbmQob2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBnZXRXb3JkU3RhcnQobVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmRpbmcgd2l0aCBzdGFydCBoYW5kbGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGdldFdvcmRTdGFydChvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IGdldFdvcmRFbmQobVN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmVTZWxlY3Rpb25Jc09uID0gY3VyckxpbmU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uLnNldFNlbGVjdGlvbigoU3Bhbm5hYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2VsZWN0aW9uKGV2ZW50KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1EcmFnQWNjZWxlcmF0b3JBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGxvbmdlciBkcmFnZ2luZyB0byBzZWxlY3QgdGV4dCwgbGV0IHRoZSBwYXJlbnQgaW50ZXJjZXB0IGV2ZW50cy4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1UZXh0Vmlldy5nZXRQYXJlbnQoKS5yZXF1ZXN0RGlzYWxsb3dJbnRlcmNlcHRUb3VjaEV2ZW50KGZhbHNlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbVRleHRWaWV3LmdldFNlbGVjdGlvblN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbVRleHRWaWV3LmdldFNlbGVjdGlvbkVuZCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBsZXQgZHJhZyBoYW5kbGVzIHBhc3Mgb25jZSB0aGV5J3JlIHZpc2libGUsIHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgc3RhcnQgLyBlbmQgbG9jYXRpb25zIGFyZSBjb3JyZWN0IGJlY2F1c2UgdGhlIHVzZXIgKmNhbioKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3aXRjaCBkaXJlY3Rpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBkcmFnLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA8IHN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRtcCA9IGVuZE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IHRtcDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gdXBkYXRlIHRoZSBzZWxlY3Rpb24gd2l0aCB0aGUgcmlnaHQgb2Zmc2V0cyBpbiB0aGlzIGNhc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uLnNldFNlbGVjdGlvbigoU3Bhbm5hYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZG8gdGhpcyB0byBkaXNwbGF5IHRoZSBoYW5kbGVzLgotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0SGFuZGxlLnNob3dBdExvY2F0aW9uKHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1FbmRIYW5kbGUuc2hvd0F0TG9jYXRpb24oZW5kT2Zmc2V0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gbG9uZ2VyIHRoZSBmaXJzdCBkcmFnZ2luZyBtb3Rpb24sIHJlc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWxlY3Rpb25BY3Rpb25Nb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1EcmFnQWNjZWxlcmF0b3JBY3RpdmUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFydE9mZnNldCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgbVN3aXRjaGVkTGluZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RyYWdBY2NlbGVyYXRvckFjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZWxlY3Rpb24oZXZlbnQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5vIGxvbmdlciBkcmFnZ2luZyB0byBzZWxlY3QgdGV4dCwgbGV0IHRoZSBwYXJlbnQgaW50ZXJjZXB0IGV2ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgbVRleHRWaWV3LmdldFBhcmVudCgpLnJlcXVlc3REaXNhbGxvd0ludGVyY2VwdFRvdWNoRXZlbnQoZmFsc2UpOworCisgICAgICAgICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG1UZXh0Vmlldy5nZXRTZWxlY3Rpb25TdGFydCgpOworICAgICAgICAgICAgICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbVRleHRWaWV3LmdldFNlbGVjdGlvbkVuZCgpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGxldCBkcmFnIGhhbmRsZXMgcGFzcyBvbmNlIHRoZXkncmUgdmlzaWJsZSwgd2UgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHN0YXJ0IC8gZW5kIGxvY2F0aW9ucyBhcmUgY29ycmVjdCBiZWNhdXNlIHRoZSB1c2VyICpjYW4qCisgICAgICAgICAgICAgICAgICAgIC8vIHN3aXRjaCBkaXJlY3Rpb25zIGR1cmluZyB0aGUgaW5pdGlhbCBkcmFnLgorICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2Zmc2V0IDwgc3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0bXAgPSBlbmRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBzdGFydE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gdG1wOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbHNvIHVwZGF0ZSB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIHJpZ2h0IG9mZnNldHMgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0aW9uLnNldFNlbGVjdGlvbigoU3Bhbm5hYmxlKSBtVGV4dFZpZXcuZ2V0VGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRPZmZzZXQgIT0gZW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFNlbGVjdGlvbkFjdGlvbk1vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIE5vIGxvbmdlciB0aGUgZmlyc3QgZHJhZ2dpbmcgbW90aW9uLCByZXNldC4KKyAgICAgICAgICAgICAgICAgICAgcmVzZXREcmFnQWNjZWxlcmF0b3JTdGF0ZSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTZWxlY3Rpb24oTW90aW9uRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChtVGV4dFZpZXcuZ2V0TGF5b3V0KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobURyYWdBY2NlbGVyYXRvck1vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEUkFHX0FDQ0VMRVJBVE9SX01PREVfQ0hBUkFDVEVSOgorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQ2hhcmFjdGVyQmFzZWRTZWxlY3Rpb24oZXZlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRFJBR19BQ0NFTEVSQVRPUl9NT0RFX1dPUkQ6CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVXb3JkQmFzZWRTZWxlY3Rpb24oZXZlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRFJBR19BQ0NFTEVSQVRPUl9NT0RFX1BBUkFHUkFQSDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVBhcmFncmFwaEJhc2VkU2VsZWN0aW9uKGV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBJZiB0aGUgVGV4dFZpZXcgYWxsb3dzIHRleHQgc2VsZWN0aW9uLCBzZWxlY3RzIHRoZSBjdXJyZW50IHBhcmFncmFwaCBhbmQgc3RhcnRzIGEgZHJhZy4KKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBkcmFnIHdhcyBzdGFydGVkLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIHNlbGVjdEN1cnJlbnRQYXJhZ3JhcGhBbmRTdGFydERyYWcoKSB7CisgICAgICAgICAgICBpZiAobUluc2VydGlvbkFjdGlvbk1vZGVSdW5uYWJsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVRleHRWaWV3LnJlbW92ZUNhbGxiYWNrcyhtSW5zZXJ0aW9uQWN0aW9uTW9kZVJ1bm5hYmxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtVGV4dEFjdGlvbk1vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1UZXh0QWN0aW9uTW9kZS5maW5pc2goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2VsZWN0Q3VycmVudFBhcmFncmFwaCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50ZXJEcmFnKFNlbGVjdGlvbk1vZGlmaWVyQ3Vyc29yQ29udHJvbGxlci5EUkFHX0FDQ0VMRVJBVE9SX01PREVfUEFSQUdSQVBIKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUNoYXJhY3RlckJhc2VkU2VsZWN0aW9uKE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gbVRleHRWaWV3LmdldE9mZnNldEZvclBvc2l0aW9uKGV2ZW50LmdldFgoKSwgZXZlbnQuZ2V0WSgpKTsKKyAgICAgICAgICAgIFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oKFNwYW5uYWJsZSkgbVRleHRWaWV3LmdldFRleHQoKSwgbVN0YXJ0T2Zmc2V0LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVdvcmRCYXNlZFNlbGVjdGlvbihNb3Rpb25FdmVudCBldmVudCkgeworICAgICAgICAgICAgaWYgKG1IYXZlbnRNb3ZlZEVub3VnaFRvU3RhcnREcmFnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc01vdXNlID0gZXZlbnQuaXNGcm9tU291cmNlKElucHV0RGV2aWNlLlNPVVJDRV9NT1VTRSk7CisgICAgICAgICAgICBmaW5hbCBWaWV3Q29uZmlndXJhdGlvbiB2aWV3Q29uZmlnID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KAorICAgICAgICAgICAgICAgICAgICBtVGV4dFZpZXcuZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGV2ZW50WCA9IGV2ZW50LmdldFgoKTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGV2ZW50WSA9IGV2ZW50LmdldFkoKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBjdXJyTGluZTsKKyAgICAgICAgICAgIGlmIChpc01vdXNlKSB7CisgICAgICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBvZmZzZXQgdGhlIHkgY29vcmRpbmF0ZSBmb3IgbW91c2UgaW5wdXQuCisgICAgICAgICAgICAgICAgY3VyckxpbmUgPSBtVGV4dFZpZXcuZ2V0TGluZUF0Q29vcmRpbmF0ZShldmVudFkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbG9hdCB5ID0gZXZlbnRZOworICAgICAgICAgICAgICAgIGlmIChtU3dpdGNoZWRMaW5lcykgeworICAgICAgICAgICAgICAgICAgICAvLyBPZmZzZXQgdGhlIGZpbmdlciBieSB0aGUgc2FtZSB2ZXJ0aWNhbCBvZmZzZXQgYXMgdGhlIGhhbmRsZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wcm92ZXMgdmlzaWJpbGl0eSBvZiB0aGUgY29udGVudCBiZWluZyBzZWxlY3RlZCBieQorICAgICAgICAgICAgICAgICAgICAvLyBzaGlmdGluZyB0aGUgZmluZ2VyIGJlbG93IHRoZSBjb250ZW50LCB0aGlzIGlzIGFwcGxpZWQgb25jZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdXNlciBoYXMgc3dpdGNoZWQgbGluZXMuCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB0b3VjaFNsb3AgPSB2aWV3Q29uZmlnLmdldFNjYWxlZFRvdWNoU2xvcCgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBmbG9hdCBmaW5nZXJPZmZzZXQgPSAobVN0YXJ0SGFuZGxlICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtU3RhcnRIYW5kbGUuZ2V0SWRlYWxWZXJ0aWNhbE9mZnNldCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0b3VjaFNsb3A7CisgICAgICAgICAgICAgICAgICAgIHkgPSBldmVudFkgLSBmaW5nZXJPZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY3VyckxpbmUgPSBnZXRDdXJyZW50TGluZUFkanVzdGVkRm9yU2xvcChtVGV4dFZpZXcuZ2V0TGF5b3V0KCksIG1MaW5lU2VsZWN0aW9uSXNPbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHkpOworICAgICAgICAgICAgICAgIGlmICghbVN3aXRjaGVkTGluZXMgJiYgY3VyckxpbmUgIT0gbUxpbmVTZWxlY3Rpb25Jc09uKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEJyZWFrIGVhcmx5IGhlcmUsIHdlIHdhbnQgdG8gb2Zmc2V0IHRoZSBmaW5nZXIgcG9zaXRpb24gZnJvbQorICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIGhpZ2hsaWdodCwgb25jZSB0aGUgdXNlciBtb3ZlZCB0aGVpciBmaW5nZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdG8gYSBkaWZmZXJlbnQgbGluZSB3ZSBzaG91bGQgYXBwbHkgdGhlIG9mZnNldCBhbmQgKm5vdCogc3dpdGNoCisgICAgICAgICAgICAgICAgICAgIC8vIGxpbmVzIHVudGlsIHJlY29tcHV0aW5nIHRoZSBwb3NpdGlvbiB3aXRoIHRoZSBmaW5nZXIgb2Zmc2V0LgorICAgICAgICAgICAgICAgICAgICBtU3dpdGNoZWRMaW5lcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBzdGFydE9mZnNldDsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSBtVGV4dFZpZXcuZ2V0T2Zmc2V0QXRDb29yZGluYXRlKGN1cnJMaW5lLCBldmVudFgpOworICAgICAgICAgICAgLy8gU25hcCB0byB3b3JkIGJvdW5kYXJpZXMuCisgICAgICAgICAgICBpZiAobVN0YXJ0T2Zmc2V0IDwgb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgLy8gRXhwYW5kaW5nIHdpdGggZW5kIGhhbmRsZS4KKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBnZXRXb3JkRW5kKG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBnZXRXb3JkU3RhcnQobVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRXhwYW5kaW5nIHdpdGggc3RhcnQgaGFuZGxlLgorICAgICAgICAgICAgICAgIG9mZnNldCA9IGdldFdvcmRTdGFydChvZmZzZXQpOworICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gZ2V0V29yZEVuZChtU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUxpbmVTZWxlY3Rpb25Jc09uID0gY3VyckxpbmU7CisgICAgICAgICAgICBTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKChTcGFubmFibGUpIG1UZXh0Vmlldy5nZXRUZXh0KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0LCBvZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBhcmFncmFwaEJhc2VkU2VsZWN0aW9uKE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgb2Zmc2V0ID0gbVRleHRWaWV3LmdldE9mZnNldEZvclBvc2l0aW9uKGV2ZW50LmdldFgoKSwgZXZlbnQuZ2V0WSgpKTsKKworICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0LCBtU3RhcnRPZmZzZXQpOworICAgICAgICAgICAgZmluYWwgaW50IGVuZCA9IE1hdGgubWF4KG9mZnNldCwgbVN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgcGFyYWdyYXBoc1JhbmdlID0gZ2V0UGFyYWdyYXBoc1JhbmdlKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgZmluYWwgaW50IHNlbGVjdGlvblN0YXJ0ID0gVGV4dFV0aWxzLnVucGFja1JhbmdlU3RhcnRGcm9tTG9uZyhwYXJhZ3JhcGhzUmFuZ2UpOworICAgICAgICAgICAgZmluYWwgaW50IHNlbGVjdGlvbkVuZCA9IFRleHRVdGlscy51bnBhY2tSYW5nZUVuZEZyb21Mb25nKHBhcmFncmFwaHNSYW5nZSk7CisgICAgICAgICAgICBTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKChTcGFubmFibGUpIG1UZXh0Vmlldy5nZXRUZXh0KCksIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOworICAgICAgICB9CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIEBwYXJhbSBldmVudAogICAgICAgICAgKi8KQEAgLTQ3NDksOCArNTEwOSwxMiBAQAogCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlc2V0VG91Y2hPZmZzZXRzKCkgewogICAgICAgICAgICAgbU1pblRvdWNoT2Zmc2V0ID0gbU1heFRvdWNoT2Zmc2V0ID0gLTE7CisgICAgICAgICAgICByZXNldERyYWdBY2NlbGVyYXRvclN0YXRlKCk7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgcmVzZXREcmFnQWNjZWxlcmF0b3JTdGF0ZSgpIHsKICAgICAgICAgICAgIG1TdGFydE9mZnNldCA9IC0xOwotICAgICAgICAgICAgbURyYWdBY2NlbGVyYXRvckFjdGl2ZSA9IGZhbHNlOworICAgICAgICAgICAgbURyYWdBY2NlbGVyYXRvck1vZGUgPSBEUkFHX0FDQ0VMRVJBVE9SX01PREVfSU5BQ1RJVkU7CiAgICAgICAgICAgICBtU3dpdGNoZWRMaW5lcyA9IGZhbHNlOwogICAgICAgICB9CiAKQEAgLTQ3NjUsNyArNTEyOSw3IEBACiAgICAgICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdXNlciBpcyBzZWxlY3RpbmcgdGV4dCB1c2luZyB0aGUgZHJhZyBhY2NlbGVyYXRvci4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRHJhZ0FjY2VsZXJhdG9yQWN0aXZlKCkgewotICAgICAgICAgICAgcmV0dXJuIG1EcmFnQWNjZWxlcmF0b3JBY3RpdmU7CisgICAgICAgICAgICByZXR1cm4gbURyYWdBY2NlbGVyYXRvck1vZGUgIT0gRFJBR19BQ0NFTEVSQVRPUl9NT0RFX0lOQUNUSVZFOwogICAgICAgICB9CiAKICAgICAgICAgcHVibGljIHZvaWQgb25Ub3VjaE1vZGVDaGFuZ2VkKGJvb2xlYW4gaXNJblRvdWNoTW9kZSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0ZvcndhcmRpbmdMaXN0ZW5lci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0ZvcndhcmRpbmdMaXN0ZW5lci5qYXZhCmluZGV4IDdkZGVmZjkuLmIzODNlMWMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Gb3J3YXJkaW5nTGlzdGVuZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvRm9yd2FyZGluZ0xpc3RlbmVyLmphdmEKQEAgLTUzLDEyICs1Myw2IEBACiAgICAgLyoqIFdoZXRoZXIgdGhpcyBsaXN0ZW5lciBpcyBjdXJyZW50bHkgZm9yd2FyZGluZyB0b3VjaCBldmVudHMuICovCiAgICAgcHJpdmF0ZSBib29sZWFuIG1Gb3J3YXJkaW5nOwogCi0gICAgLyoqCi0gICAgICogV2hldGhlciBmb3J3YXJkaW5nIHdhcyBpbml0aWF0ZWQgYnkgYSBsb25nLXByZXNzLiBJZiBzbywgd2Ugd29uJ3QKLSAgICAgKiBmb3JjZSB0aGUgd2luZG93IHRvIGRpc21pc3Mgd2hlbiB0aGUgdG91Y2ggc3RyZWFtIGVuZHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIG1XYXNMb25nUHJlc3M7Ci0KICAgICAvKiogVGhlIGlkIG9mIHRoZSBmaXJzdCBwb2ludGVyIGRvd24gaW4gdGhlIGN1cnJlbnQgZXZlbnQgc3RyZWFtLiAqLwogICAgIHByaXZhdGUgaW50IG1BY3RpdmVQb2ludGVySWQ7CiAKQEAgLTE3Miw3ICsxNjYsNiBAQAogICAgICAgICBzd2l0Y2ggKGFjdGlvbk1hc2tlZCkgewogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjoKICAgICAgICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gc3JjRXZlbnQuZ2V0UG9pbnRlcklkKDApOwotICAgICAgICAgICAgICAgIG1XYXNMb25nUHJlc3MgPSBmYWxzZTsKIAogICAgICAgICAgICAgICAgIGlmIChtRGlzYWxsb3dJbnRlcmNlcHQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtRGlzYWxsb3dJbnRlcmNlcHQgPSBuZXcgRGlzYWxsb3dJbnRlcmNlcHQoKTsKQEAgLTI0Myw3ICsyMzYsNiBAQAogICAgICAgICBlLnJlY3ljbGUoKTsKIAogICAgICAgICBtRm9yd2FyZGluZyA9IHRydWU7Ci0gICAgICAgIG1XYXNMb25nUHJlc3MgPSB0cnVlOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9HcmlkTGF5b3V0LmphdmEKaW5kZXggMjU4NDI0YS4uZWY2NjI4YSAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRMYXlvdXQuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZExheW91dC5qYXZhCkBAIC0xNzUyLDcgKzE3NTIsOCBAQAogICAgICAgICAgICAgYm9vbGVhbiB2YWxpZFNvbHV0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvIGEgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBtYXggZGVsdGEgdGhhdCB3b24ndCBjb25mbGljdCB3aXRoIGNvbnN0cmFpbnRzCiAgICAgICAgICAgICB3aGlsZShkZWx0YU1pbiA8IGRlbHRhTWF4KSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGRlbHRhID0gKGRlbHRhTWluICsgZGVsdGFNYXgpIC8gMjsKKyAgICAgICAgICAgICAgICAvLyBjYXN0IHRvIGxvbmcgdG8gcHJldmVudCBvdmVyZmxvdy4KKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZGVsdGEgPSAoaW50KSAoKChsb25nKSBkZWx0YU1pbiArIGRlbHRhTWF4KSAvIDIpOwogICAgICAgICAgICAgICAgIGludmFsaWRhdGVWYWx1ZXMoKTsKICAgICAgICAgICAgICAgICBzaGFyZU91dERlbHRhKGRlbHRhLCB0b3RhbFdlaWdodCk7CiAgICAgICAgICAgICAgICAgdmFsaWRTb2x1dGlvbiA9IHNvbHZlKGdldEFyY3MoKSwgYSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0dyaWRWaWV3LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQppbmRleCA2MDdlOTU1Li5lZTczMDkyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvR3JpZFZpZXcuamF2YQpAQCAtMTY0Myw4ICsxNjQzLDE2IEBACiAKICAgICAgICAgYm9vbGVhbiBoYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIGludCBhY3Rpb24gPSBldmVudC5nZXRBY3Rpb24oKTsKKyAgICAgICAgaWYgKEtleUV2ZW50LmlzQ29uZmlybUtleShrZXlDb2RlKQorICAgICAgICAgICAgICAgICYmIGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkgJiYgYWN0aW9uID09IEtleUV2ZW50LkFDVElPTl9VUCkgeworICAgICAgICAgICAgaGFuZGxlZCA9IHJlc3VycmVjdFNlbGVjdGlvbklmTmVlZGVkKCk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZWQgJiYgZXZlbnQuZ2V0UmVwZWF0Q291bnQoKSA9PSAwICYmIGdldENoaWxkQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBrZXlQcmVzc2VkKCk7CisgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICBpZiAoYWN0aW9uICE9IEtleUV2ZW50LkFDVElPTl9VUCkgeworICAgICAgICBpZiAoIWhhbmRsZWQgJiYgYWN0aW9uICE9IEtleUV2ZW50LkFDVElPTl9VUCkgewogICAgICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0RQQURfTEVGVDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkpIHsKQEAgLTE2NzQsMjggKzE2ODIsNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX0RQQURfQ0VOVEVSOgotICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9FTlRFUjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSByZXN1cnJlY3RTZWxlY3Rpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LmdldFJlcGVhdENvdW50KCkgPT0gMCAmJiBnZXRDaGlsZENvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5UHJlc3NlZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX1NQQUNFOgotICAgICAgICAgICAgICAgICAgICBpZiAobVBvcHVwID09IG51bGwgfHwgIW1Qb3B1cC5pc1Nob3dpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gcmVzdXJyZWN0U2VsZWN0aW9uSWZOZWVkZWQoKSB8fCBwYWdlU2Nyb2xsKEZPQ1VTX0RPV04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5oYXNNb2RpZmllcnMoS2V5RXZlbnQuTUVUQV9TSElGVF9PTikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gcmVzdXJyZWN0U2VsZWN0aW9uSWZOZWVkZWQoKSB8fCBwYWdlU2Nyb2xsKEZPQ1VTX1VQKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9QQUdFX1VQOgogICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuaGFzTm9Nb2RpZmllcnMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHJlc3VycmVjdFNlbGVjdGlvbklmTmVlZGVkKCkgfHwgcGFnZVNjcm9sbChGT0NVU19VUCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0LmphdmEgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGluZWFyTGF5b3V0LmphdmEKaW5kZXggYWQ5MzliZS4uZjZlNjE4NiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpbmVhckxheW91dC5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaW5lYXJMYXlvdXQuamF2YQpAQCAtMzU5LDcgKzM1OSw2IEBACiAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IGdldFZpcnR1YWxDaGlsZENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGkpOwotCiAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewogICAgICAgICAgICAgICAgIGlmIChoYXNEaXZpZGVyQmVmb3JlQ2hpbGRBdChpKSkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBMYXlvdXRQYXJhbXMgbHAgPSAoTGF5b3V0UGFyYW1zKSBjaGlsZC5nZXRMYXlvdXRQYXJhbXMoKTsKQEAgLTM4OCw3ICszODcsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgVmlldyBnZXRMYXN0Tm9uR29uZUNoaWxkKCkgewogICAgICAgICBmb3IgKGludCBpID0gZ2V0VmlydHVhbENoaWxkQ291bnQoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7CisgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7CiAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewogICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICAgICAgICAgIH0KQEAgLTQwMSw3ICs0MDAsNiBAQAogICAgICAgICBmaW5hbCBib29sZWFuIGlzTGF5b3V0UnRsID0gaXNMYXlvdXRSdGwoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgIGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7CiAgICAgICAgICAgICAgICAgaWYgKGhhc0RpdmlkZXJCZWZvcmVDaGlsZEF0KGkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExheW91dFBhcmFtcyBscCA9IChMYXlvdXRQYXJhbXMpIGNoaWxkLmdldExheW91dFBhcmFtcygpOwpAQCAtNTg4LDggKzU4Niw5IEBACiAgICAgICogZm9yIGFuIGV4YW1wbGUuPC9wPgogICAgICAqCiAgICAgICogQHBhcmFtIGluZGV4IHRoZSBjaGlsZCdzIGluZGV4Ci0gICAgICogQHJldHVybiB0aGUgY2hpbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleAorICAgICAqIEByZXR1cm4gdGhlIGNoaWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgsIG1heSBiZSB7QGNvZGUgbnVsbH0KICAgICAgKi8KKyAgICBATnVsbGFibGUKICAgICBWaWV3IGdldFZpcnR1YWxDaGlsZEF0KGludCBpbmRleCkgewogICAgICAgICByZXR1cm4gZ2V0Q2hpbGRBdChpbmRleCk7CiAgICAgfQpAQCAtNjcwLDcgKzY2OSw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIGFsbFZpZXdzQXJlR29uZUJlZm9yZShpbnQgY2hpbGRJbmRleCkgewogICAgICAgICBmb3IgKGludCBpID0gY2hpbGRJbmRleCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7CisgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7CiAgICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTcxNSw3ICs3MTQsNiBAQAogICAgICAgICAvLyBTZWUgaG93IHRhbGwgZXZlcnlvbmUgaXMuIEFsc28gcmVtZW1iZXIgbWF4IHdpZHRoLgogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtVG90YWxMZW5ndGggKz0gbWVhc3VyZU51bGxDaGlsZChpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTgzNyw3ICs4MzUsNiBAQAogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtVG90YWxMZW5ndGggKz0gbWVhc3VyZU51bGxDaGlsZChpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC05NDMsNyArOTQwLDYgQEAKICAgICAgICAgICAgIGlmICh1c2VMYXJnZXN0Q2hpbGQgJiYgaGVpZ2h0TW9kZSAhPSBNZWFzdXJlU3BlYy5FWEFDVExZKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLQogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCB8fCBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5HT05FKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtOTg2LDcgKzk4Miw3IEBACiAgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChpKTsKLSAgICAgICAgICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7IAorICAgICAgICAgICBpZiAoY2hpbGQgIT0gbnVsbCAmJiBjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewogICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBscCA9ICgoTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyljaGlsZC5nZXRMYXlvdXRQYXJhbXMoKSk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChscC53aWR0aCA9PSBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKSB7CkBAIC0xMDUzLDcgKzEwNDksNiBAQAogICAgICAgICAvLyBTZWUgaG93IHdpZGUgZXZlcnlvbmUgaXMuIEFsc28gcmVtZW1iZXIgbWF4IGhlaWdodC4KICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVRvdGFsTGVuZ3RoICs9IG1lYXN1cmVOdWxsQ2hpbGQoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjExLDcgKzEyMDYsNiBAQAogCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtVG90YWxMZW5ndGggKz0gbWVhc3VyZU51bGxDaGlsZChpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xMzU3LDcgKzEzNTEsNiBAQAogICAgICAgICAgICAgaWYgKHVzZUxhcmdlc3RDaGlsZCAmJiB3aWR0aE1vZGUgIT0gTWVhc3VyZVNwZWMuRVhBQ1RMWSkgewogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0KICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwgfHwgY2hpbGQuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuR09ORSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE0MDIsNyArMTM5NSw3IEBACiAgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0VmlydHVhbENoaWxkQXQoaSk7Ci0gICAgICAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgeyAKKyAgICAgICAgICAgaWYgKGNoaWxkICE9IG51bGwgJiYgY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKICAgICAgICAgICAgICAgIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgbHAgPSAoTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcykgY2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIGlmIChscC5oZWlnaHQgPT0gTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkgewpAQCAtMTY2Miw5ICsxNjU1LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaW50IGNoaWxkSW5kZXggPSBzdGFydCArIGRpciAqIGk7CisgICAgICAgICAgICBmaW5hbCBpbnQgY2hpbGRJbmRleCA9IHN0YXJ0ICsgZGlyICogaTsKICAgICAgICAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRWaXJ0dWFsQ2hpbGRBdChjaGlsZEluZGV4KTsKLQogICAgICAgICAgICAgaWYgKGNoaWxkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBjaGlsZExlZnQgKz0gbWVhc3VyZU51bGxDaGlsZChjaGlsZEluZGV4KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0UG9wdXBXaW5kb3cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0UG9wdXBXaW5kb3cuamF2YQppbmRleCBiOTViYzI4Li41OTVhZGMyIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvTGlzdFBvcHVwV2luZG93LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RQb3B1cFdpbmRvdy5qYXZhCkBAIC0xNiwxOCArMTYsMjAgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51LlNob3dhYmxlTGlzdE1lbnU7CisKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uQXR0clJlczsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN0eWxlUmVzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkRhdGFTZXRPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRQcm9wZXJ0eTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKQEAgLTM4LDEzICs0MCw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFjY2VsZXJhdGVEZWNlbGVyYXRlSW50ZXJwb2xhdG9yOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuU2hvd2FibGVMaXN0TWVudTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuQXV0b1Njcm9sbEhlbHBlci5BYnNMaXN0Vmlld0F1dG9TY3JvbGxlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsKIAogLyoqCiAgKiBBIExpc3RQb3B1cFdpbmRvdyBhbmNob3JzIGl0c2VsZiB0byBhIGhvc3QgdmlldyBhbmQgZGlzcGxheXMgYQpAQCAtMTA5LDggKzEwNSw2IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gbU1vZGFsOwogCi0gICAgcHJpdmF0ZSBpbnQgbUxheW91dERpcmVjdGlvbjsKLQogICAgIFBvcHVwV2luZG93IG1Qb3B1cDsKIAogICAgIC8qKgpAQCAtMTc0LDcgKzE2OCw3IEBACiAgICAgICogCiAgICAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCB1c2VkIGZvciBjb250YWluZWQgdmlld3MuCiAgICAgICovCi0gICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICBwdWJsaWMgTGlzdFBvcHVwV2luZG93KEBOb25OdWxsIENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5saXN0UG9wdXBXaW5kb3dTdHlsZSwgMCk7CiAgICAgfQogCkBAIC0xODUsNyArMTc5LDcgQEAKICAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHVzZWQgZm9yIGNvbnRhaW5lZCB2aWV3cy4KICAgICAgKiBAcGFyYW0gYXR0cnMgQXR0cmlidXRlcyBmcm9tIGluZmxhdGluZyBwYXJlbnQgdmlld3MgdXNlZCB0byBzdHlsZSB0aGUgcG9wdXAuCiAgICAgICovCi0gICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgIHB1YmxpYyBMaXN0UG9wdXBXaW5kb3coQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGNvbS5hbmRyb2lkLmludGVybmFsLlIuYXR0ci5saXN0UG9wdXBXaW5kb3dTdHlsZSwgMCk7CiAgICAgfQogCkBAIC0xOTcsNyArMTkxLDggQEAKICAgICAgKiBAcGFyYW0gYXR0cnMgQXR0cmlidXRlcyBmcm9tIGluZmxhdGluZyBwYXJlbnQgdmlld3MgdXNlZCB0byBzdHlsZSB0aGUgcG9wdXAuCiAgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBEZWZhdWx0IHN0eWxlIGF0dHJpYnV0ZSB0byB1c2UgZm9yIHBvcHVwIGNvbnRlbnQuCiAgICAgICovCi0gICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgeworICAgIHB1YmxpYyBMaXN0UG9wdXBXaW5kb3coQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgQEF0dHJSZXMgaW50IGRlZlN0eWxlQXR0cikgewogICAgICAgICB0aGlzKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIDApOwogICAgIH0KIApAQCAtMjEwLDcgKzIwNSw4IEBACiAgICAgICogQHBhcmFtIGRlZlN0eWxlQXR0ciBTdHlsZSBhdHRyaWJ1dGUgdG8gcmVhZCBmb3IgZGVmYXVsdCBzdHlsaW5nIG9mIHBvcHVwIGNvbnRlbnQuCiAgICAgICogQHBhcmFtIGRlZlN0eWxlUmVzIFN0eWxlIHJlc291cmNlIElEIHRvIHVzZSBmb3IgZGVmYXVsdCBzdHlsaW5nIG9mIHBvcHVwIGNvbnRlbnQuCiAgICAgICovCi0gICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgcHVibGljIExpc3RQb3B1cFdpbmRvdyhATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBOdWxsYWJsZSBBdHRyaWJ1dGVTZXQgYXR0cnMsCisgICAgICAgICAgICBAQXR0clJlcyBpbnQgZGVmU3R5bGVBdHRyLCBAU3R5bGVSZXMgaW50IGRlZlN0eWxlUmVzKSB7CiAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKICAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihjb250ZXh0LmdldE1haW5Mb29wZXIoKSk7CiAKQEAgLTIyNyw5ICsyMjMsNiBAQAogCiAgICAgICAgIG1Qb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgIG1Qb3B1cC5zZXRJbnB1dE1ldGhvZE1vZGUoUG9wdXBXaW5kb3cuSU5QVVRfTUVUSE9EX05FRURFRCk7Ci0gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBsYXlvdXQgZGlyZWN0aW9uIHRvIG1hdGNoIHRoZSBkZWZhdWx0IGxvY2FsZSBvbmUKLSAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGU7Ci0gICAgICAgIG1MYXlvdXREaXJlY3Rpb24gPSBUZXh0VXRpbHMuZ2V0TGF5b3V0RGlyZWN0aW9uRnJvbUxvY2FsZShsb2NhbGUpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjM4LDcgKzIzMSw3IEBACiAgICAgICoKICAgICAgKiBAcGFyYW0gYWRhcHRlciBUaGUgYWRhcHRlciB0byB1c2UgdG8gY3JlYXRlIHRoaXMgd2luZG93J3MgY29udGVudC4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRBZGFwdGVyKExpc3RBZGFwdGVyIGFkYXB0ZXIpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRBZGFwdGVyKEBOdWxsYWJsZSBMaXN0QWRhcHRlciBhZGFwdGVyKSB7CiAgICAgICAgIGlmIChtT2JzZXJ2ZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgbU9ic2VydmVyID0gbmV3IFBvcHVwRGF0YVNldE9ic2VydmVyKCk7CiAgICAgICAgIH0gZWxzZSBpZiAobUFkYXB0ZXIgIT0gbnVsbCkgewpAQCAtMzcxLDcgKzM2NCw3IEBACiAgICAgLyoqCiAgICAgICogQHJldHVybiBUaGUgYmFja2dyb3VuZCBkcmF3YWJsZSBmb3IgdGhlIHBvcHVwIHdpbmRvdy4KICAgICAgKi8KLSAgICBwdWJsaWMgRHJhd2FibGUgZ2V0QmFja2dyb3VuZCgpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIERyYXdhYmxlIGdldEJhY2tncm91bmQoKSB7CiAgICAgICAgIHJldHVybiBtUG9wdXAuZ2V0QmFja2dyb3VuZCgpOwogICAgIH0KIApAQCAtMzgwLDcgKzM3Myw3IEBACiAgICAgICogCiAgICAgICogQHBhcmFtIGQgQSBkcmF3YWJsZSB0byBzZXQgYXMgdGhlIGJhY2tncm91bmQuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0QmFja2dyb3VuZERyYXdhYmxlKERyYXdhYmxlIGQpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRCYWNrZ3JvdW5kRHJhd2FibGUoQE51bGxhYmxlIERyYXdhYmxlIGQpIHsKICAgICAgICAgbVBvcHVwLnNldEJhY2tncm91bmREcmF3YWJsZShkKTsKICAgICB9CiAKQEAgLTM4OSw3ICszODIsNyBAQAogICAgICAqIAogICAgICAqIEBwYXJhbSBhbmltYXRpb25TdHlsZSBBbmltYXRpb24gc3R5bGUgdG8gdXNlLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdGlvblN0eWxlKGludCBhbmltYXRpb25TdHlsZSkgeworICAgIHB1YmxpYyB2b2lkIHNldEFuaW1hdGlvblN0eWxlKEBTdHlsZVJlcyBpbnQgYW5pbWF0aW9uU3R5bGUpIHsKICAgICAgICAgbVBvcHVwLnNldEFuaW1hdGlvblN0eWxlKGFuaW1hdGlvblN0eWxlKTsKICAgICB9CiAKQEAgLTM5OSw3ICszOTIsNyBAQAogICAgICAqIAogICAgICAqIEByZXR1cm4gQW5pbWF0aW9uIHN0eWxlIHRoYXQgd2lsbCBiZSB1c2VkLgogICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0QW5pbWF0aW9uU3R5bGUoKSB7CisgICAgcHVibGljIEBTdHlsZVJlcyBpbnQgZ2V0QW5pbWF0aW9uU3R5bGUoKSB7CiAgICAgICAgIHJldHVybiBtUG9wdXAuZ2V0QW5pbWF0aW9uU3R5bGUoKTsKICAgICB9CiAKQEAgLTQwOCw3ICs0MDEsNyBAQAogICAgICAqIAogICAgICAqIEByZXR1cm4gVGhlIHBvcHVwJ3MgYW5jaG9yIHZpZXcKICAgICAgKi8KLSAgICBwdWJsaWMgVmlldyBnZXRBbmNob3JWaWV3KCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgVmlldyBnZXRBbmNob3JWaWV3KCkgewogICAgICAgICByZXR1cm4gbURyb3BEb3duQW5jaG9yVmlldzsKICAgICB9CiAKQEAgLTQxOCw3ICs0MTEsNyBAQAogICAgICAqIAogICAgICAqIEBwYXJhbSBhbmNob3IgVGhlIHZpZXcgdG8gdXNlIGFzIGFuIGFuY2hvci4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRBbmNob3JWaWV3KFZpZXcgYW5jaG9yKSB7CisgICAgcHVibGljIHZvaWQgc2V0QW5jaG9yVmlldyhATnVsbGFibGUgVmlldyBhbmNob3IpIHsKICAgICAgICAgbURyb3BEb3duQW5jaG9yVmlldyA9IGFuY2hvcjsKICAgICB9CiAKQEAgLTUzNyw3ICs1MzAsNyBAQAogICAgICAqIAogICAgICAqIEBzZWUgTGlzdFZpZXcjc2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5Pbkl0ZW1DbGlja0xpc3RlbmVyKQogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9uSXRlbUNsaWNrTGlzdGVuZXIoQWRhcHRlclZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lciBjbGlja0xpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgc2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihATnVsbGFibGUgQWRhcHRlclZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lciBjbGlja0xpc3RlbmVyKSB7CiAgICAgICAgIG1JdGVtQ2xpY2tMaXN0ZW5lciA9IGNsaWNrTGlzdGVuZXI7CiAgICAgfQogCkBAIC01NDYsOSArNTM5LDkgQEAKICAgICAgKiAKICAgICAgKiBAcGFyYW0gc2VsZWN0ZWRMaXN0ZW5lciBMaXN0ZW5lciB0byByZWdpc3Rlci4KICAgICAgKiAKLSAgICAgKiBAc2VlIExpc3RWaWV3I3NldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcikKKyAgICAgKiBAc2VlIExpc3RWaWV3I3NldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcikKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKEFkYXB0ZXJWaWV3Lk9uSXRlbVNlbGVjdGVkTGlzdGVuZXIgc2VsZWN0ZWRMaXN0ZW5lcikgeworICAgIHB1YmxpYyB2b2lkIHNldE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIoQE51bGxhYmxlIE9uSXRlbVNlbGVjdGVkTGlzdGVuZXIgc2VsZWN0ZWRMaXN0ZW5lcikgewogICAgICAgICBtSXRlbVNlbGVjdGVkTGlzdGVuZXIgPSBzZWxlY3RlZExpc3RlbmVyOwogICAgIH0KIApAQCAtNTU4LDcgKzU1MSw3IEBACiAgICAgICogCiAgICAgICogQHBhcmFtIHByb21wdCBWaWV3IHRvIHVzZSBhcyBhbiBpbmZvcm1hdGlvbmFsIHByb21wdC4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9tcHRWaWV3KFZpZXcgcHJvbXB0KSB7CisgICAgcHVibGljIHZvaWQgc2V0UHJvbXB0VmlldyhATnVsbGFibGUgVmlldyBwcm9tcHQpIHsKICAgICAgICAgYm9vbGVhbiBzaG93aW5nID0gaXNTaG93aW5nKCk7CiAgICAgICAgIGlmIChzaG93aW5nKSB7CiAgICAgICAgICAgICByZW1vdmVQcm9tcHRWaWV3KCk7CkBAIC02ODYsNyArNjc5LDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSBsaXN0ZW5lciBMaXN0ZW5lciB0aGF0IHdpbGwgYmUgbm90aWZpZWQgd2hlbiB0aGUgcG9wdXAgaXMgZGlzbWlzc2VkLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9uRGlzbWlzc0xpc3RlbmVyKFBvcHVwV2luZG93Lk9uRGlzbWlzc0xpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgc2V0T25EaXNtaXNzTGlzdGVuZXIoQE51bGxhYmxlIFBvcHVwV2luZG93Lk9uRGlzbWlzc0xpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgICAgIG1Qb3B1cC5zZXRPbkRpc21pc3NMaXN0ZW5lcihsaXN0ZW5lcik7CiAgICAgfQogCkBAIC03OTUsNyArNzg4LDcgQEAKICAgICAvKioKICAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSBvciBudWxsIGlmIHRoZSBwb3B1cCBpcyBub3Qgc2hvd2luZy4KICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldFNlbGVjdGVkSXRlbSgpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIE9iamVjdCBnZXRTZWxlY3RlZEl0ZW0oKSB7CiAgICAgICAgIGlmICghaXNTaG93aW5nKCkpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC04MzQsNyArODI3LDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlIExpc3RWaWV3I2dldFNlbGVjdGVkVmlldygpCiAgICAgICovCi0gICAgcHVibGljIFZpZXcgZ2V0U2VsZWN0ZWRWaWV3KCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgVmlldyBnZXRTZWxlY3RlZFZpZXcoKSB7CiAgICAgICAgIGlmICghaXNTaG93aW5nKCkpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC04NDYsMTEgKzgzOSwxMSBAQAogICAgICAqIE9ubHkgdmFsaWQgd2hlbiB7QGxpbmsgI2lzU2hvd2luZygpfSA9PSB7QGNvZGUgdHJ1ZX0uCiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIExpc3RWaWV3IGdldExpc3RWaWV3KCkgeworICAgIHB1YmxpYyBATnVsbGFibGUgTGlzdFZpZXcgZ2V0TGlzdFZpZXcoKSB7CiAgICAgICAgIHJldHVybiBtRHJvcERvd25MaXN0OwogICAgIH0KIAotICAgIERyb3BEb3duTGlzdFZpZXcgY3JlYXRlRHJvcERvd25MaXN0VmlldyhDb250ZXh0IGNvbnRleHQsIGJvb2xlYW4gaGlqYWNrRm9jdXMpIHsKKyAgICBATm9uTnVsbCBEcm9wRG93bkxpc3RWaWV3IGNyZWF0ZURyb3BEb3duTGlzdFZpZXcoQ29udGV4dCBjb250ZXh0LCBib29sZWFuIGhpamFja0ZvY3VzKSB7CiAgICAgICAgIHJldHVybiBuZXcgRHJvcERvd25MaXN0Vmlldyhjb250ZXh0LCBoaWphY2tGb2N1cyk7CiAgICAgfQogCkBAIC04NzQsNyArODY3LDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlICNzZXRNb2RhbChib29sZWFuKQogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG9uS2V5RG93bihpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBvbktleURvd24oaW50IGtleUNvZGUsIEBOb25OdWxsIEtleUV2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIHdoZW4gdGhlIGRyb3AgZG93biBpcyBzaG93biwgd2UgZHJpdmUgaXQgZGlyZWN0bHkKICAgICAgICAgaWYgKGlzU2hvd2luZygpKSB7CiAgICAgICAgICAgICAvLyB0aGUga2V5IGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBsaXN0IGluIHRoZSBkcm9wIGRvd24gdmlldwpAQCAtOTY5LDcgKzk2Miw3IEBACiAgICAgICogCiAgICAgICogQHNlZSAjc2V0TW9kYWwoYm9vbGVhbikKICAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBvbktleVVwKGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgIHB1YmxpYyBib29sZWFuIG9uS2V5VXAoaW50IGtleUNvZGUsIEBOb25OdWxsIEtleUV2ZW50IGV2ZW50KSB7CiAgICAgICAgIGlmIChpc1Nob3dpbmcoKSAmJiBtRHJvcERvd25MaXN0LmdldFNlbGVjdGVkSXRlbVBvc2l0aW9uKCkgPj0gMCkgewogICAgICAgICAgICAgYm9vbGVhbiBjb25zdW1lZCA9IG1Ecm9wRG93bkxpc3Qub25LZXlVcChrZXlDb2RlLCBldmVudCk7CiAgICAgICAgICAgICBpZiAoY29uc3VtZWQgJiYgS2V5RXZlbnQuaXNDb25maXJtS2V5KGtleUNvZGUpKSB7CkBAIC05OTMsNyArOTg2LDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlICNzZXRNb2RhbChib29sZWFuKQogICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG9uS2V5UHJlSW1lKGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgeworICAgIHB1YmxpYyBib29sZWFuIG9uS2V5UHJlSW1lKGludCBrZXlDb2RlLCBATm9uTnVsbCBLZXlFdmVudCBldmVudCkgewogICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0JBQ0sgJiYgaXNTaG93aW5nKCkpIHsKICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGJhY2sga2V5LCB3ZSBkbyBub3QgZXZlbiB0cnkgdG8gc2VuZCBpdAogICAgICAgICAgICAgLy8gdG8gdGhlIGRyb3AgZG93biBsaXN0IGJ1dCBpbnN0ZWFkLCBjb25zdW1lIGl0IGltbWVkaWF0ZWx5CkBAIC0xMTU5LDcgKzExNTIsNiBAQAogCiAgICAgICAgICAgICBtUG9wdXAuc2V0Q29udGVudFZpZXcoZHJvcERvd25WaWV3KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRyb3BEb3duVmlldyA9IChWaWV3R3JvdXApIG1Qb3B1cC5nZXRDb250ZW50VmlldygpOwogICAgICAgICAgICAgZmluYWwgVmlldyB2aWV3ID0gbVByb21wdFZpZXc7CiAgICAgICAgICAgICBpZiAodmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcyBoaW50UGFyYW1zID0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9MaXN0Vmlldy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKaW5kZXggNTNjYTZkMS4uYTExODk3ZCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L0xpc3RWaWV3LmphdmEKQEAgLTIxODAsOCArMjE4MCwxNyBAQAogCiAgICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IGZhbHNlOwogICAgICAgICBpbnQgYWN0aW9uID0gZXZlbnQuZ2V0QWN0aW9uKCk7CisgICAgICAgIGlmIChLZXlFdmVudC5pc0NvbmZpcm1LZXkoa2V5Q29kZSkKKyAgICAgICAgICAgICAgICAmJiBldmVudC5oYXNOb01vZGlmaWVycygpICYmIGFjdGlvbiAhPSBLZXlFdmVudC5BQ1RJT05fVVApIHsKKyAgICAgICAgICAgIGhhbmRsZWQgPSByZXN1cnJlY3RTZWxlY3Rpb25JZk5lZWRlZCgpOworICAgICAgICAgICAgaWYgKCFoYW5kbGVkICYmIGV2ZW50LmdldFJlcGVhdENvdW50KCkgPT0gMCAmJiBnZXRDaGlsZENvdW50KCkgPiAwKSB7CisgICAgICAgICAgICAgICAga2V5UHJlc3NlZCgpOworICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgaWYgKGFjdGlvbiAhPSBLZXlFdmVudC5BQ1RJT05fVVApIHsKKworICAgICAgICBpZiAoIWhhbmRsZWQgJiYgYWN0aW9uICE9IEtleUV2ZW50LkFDVElPTl9VUCkgewogICAgICAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfRFBBRF9VUDoKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuaGFzTm9Nb2RpZmllcnMoKSkgewpAQCAtMjIyOSwyOSArMjIzOCw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfRFBBRF9DRU5URVI6Ci0gICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfRU5URVI6Ci0gICAgICAgICAgICAgICAgaWYgKGV2ZW50Lmhhc05vTW9kaWZpZXJzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHJlc3VycmVjdFNlbGVjdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFuZGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGV2ZW50LmdldFJlcGVhdENvdW50KCkgPT0gMCAmJiBnZXRDaGlsZENvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXlQcmVzc2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBLZXlFdmVudC5LRVlDT0RFX1NQQUNFOgotICAgICAgICAgICAgICAgIGlmIChtUG9wdXAgPT0gbnVsbCB8fCAhbVBvcHVwLmlzU2hvd2luZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5oYXNOb01vZGlmaWVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gcmVzdXJyZWN0U2VsZWN0aW9uSWZOZWVkZWQoKSB8fCBwYWdlU2Nyb2xsKEZPQ1VTX0RPV04pOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Lmhhc01vZGlmaWVycyhLZXlFdmVudC5NRVRBX1NISUZUX09OKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHJlc3VycmVjdFNlbGVjdGlvbklmTmVlZGVkKCkgfHwgcGFnZVNjcm9sbChGT0NVU19VUCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfUEFHRV9VUDoKICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuaGFzTm9Nb2RpZmllcnMoKSkgewogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gcmVzdXJyZWN0U2VsZWN0aW9uSWZOZWVkZWQoKSB8fCBwYWdlU2Nyb2xsKEZPQ1VTX1VQKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Qb3B1cFdpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKaW5kZXggN2I5ZGU3OS4uN2U5ODE5MyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKKysrIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1BvcHVwV2luZG93LmphdmEKQEAgLTE2LDYgKzE2LDkgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX0xBWU9VVF9DSElMRF9XSU5ET1dfSU5fUEFSRU5UX0ZSQU1FOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX1dJTExfTk9UX1JFUExBQ0VfT05fUkVMQVVOQ0g7CisKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogCiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CkBAIC0xMzExLDYgKzEzMTQsOSBAQAogICAgICAgICAgICAgcC53aWR0aCA9IG1MYXN0V2lkdGggPSBtV2lkdGg7CiAgICAgICAgIH0KIAorICAgICAgICBwLnByaXZhdGVGbGFncyA9IFBSSVZBVEVfRkxBR19XSUxMX05PVF9SRVBMQUNFX09OX1JFTEFVTkNICisgICAgICAgICAgICAgICAgfCBQUklWQVRFX0ZMQUdfTEFZT1VUX0NISUxEX1dJTkRPV19JTl9QQVJFTlRfRlJBTUU7CisKICAgICAgICAgLy8gVXNlZCBmb3IgZGVidWdnaW5nLgogICAgICAgICBwLnNldFRpdGxlKCJQb3B1cFdpbmRvdzoiICsgSW50ZWdlci50b0hleFN0cmluZyhoYXNoQ29kZSgpKSk7CiAKQEAgLTE0NjEsMTAgKzE0NjcsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtQ2xpcFRvU2NyZWVuKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgd2luT2Zmc2V0WCA9IG1TY3JlZW5Mb2NhdGlvblswXSAtIG1EcmF3aW5nTG9jYXRpb25bMF07CisgICAgICAgICAgICBmaW5hbCBpbnQgd2luT2Zmc2V0WSA9IG1TY3JlZW5Mb2NhdGlvblsxXSAtIG1EcmF3aW5nTG9jYXRpb25bMV07CisgICAgICAgICAgICBwLnggKz0gd2luT2Zmc2V0WDsKKyAgICAgICAgICAgIHAueSArPSB3aW5PZmZzZXRZOwogICAgICAgICAgICAgZmluYWwgaW50IGRpc3BsYXlGcmFtZVdpZHRoID0gZGlzcGxheUZyYW1lLnJpZ2h0IC0gZGlzcGxheUZyYW1lLmxlZnQ7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcmlnaHQgPSBwLnggKyBwLndpZHRoOwotICAgICAgICAgICAgaWYgKHJpZ2h0ID4gZGlzcGxheUZyYW1lV2lkdGgpIHsKLSAgICAgICAgICAgICAgICBwLnggLT0gcmlnaHQgLSBkaXNwbGF5RnJhbWVXaWR0aDsKKyAgICAgICAgICAgIGlmIChyaWdodCA+IGRpc3BsYXlGcmFtZS5yaWdodCkgeworICAgICAgICAgICAgICAgIHAueCAtPSByaWdodCAtIGRpc3BsYXlGcmFtZS5yaWdodDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHAueCA8IGRpc3BsYXlGcmFtZS5sZWZ0KSB7CkBAIC0xNDczLDEwICsxNDgzLDkgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1PdmVybGFwQW5jaG9yKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGRpc3BsYXlGcmFtZUhlaWdodCA9IGRpc3BsYXlGcmFtZS5ib3R0b20gLSBkaXNwbGF5RnJhbWUudG9wOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBib3R0b20gPSBwLnkgKyBwLmhlaWdodDsKICAgICAgICAgICAgICAgICBpZiAoYm90dG9tID4gZGlzcGxheUZyYW1lLmJvdHRvbSkgewotICAgICAgICAgICAgICAgICAgICBwLnkgLT0gYm90dG9tIC0gZGlzcGxheUZyYW1lSGVpZ2h0OworICAgICAgICAgICAgICAgICAgICBwLnkgLT0gYm90dG9tIC0gZGlzcGxheUZyYW1lLmJvdHRvbTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChvblRvcCkgewpAQCAtMTQ4OCw2ICsxNDk3LDggQEAKICAgICAgICAgICAgICAgICAgICAgcC55ID0gTWF0aC5tYXgocC55LCBkaXNwbGF5RnJhbWUudG9wKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwLnggLT0gd2luT2Zmc2V0WDsKKyAgICAgICAgICAgIHAueSAtPSB3aW5PZmZzZXRZOwogICAgICAgICB9CiAKICAgICAgICAgcC5ncmF2aXR5IHw9IEdyYXZpdHkuRElTUExBWV9DTElQX1ZFUlRJQ0FMOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwaW5uZXIuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9TcGlubmVyLmphdmEKaW5kZXggYzc5ZTE4NC4uMDljZjcwNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1NwaW5uZXIuamF2YQorKysgYi9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvU3Bpbm5lci5qYXZhCkBAIC0yNzEsNiArMjcxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycywgUi5zdHlsZWFibGUuU3Bpbm5lciwgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7CiAgICAgICAgICAgICAgICAgbURyb3BEb3duV2lkdGggPSBwYS5nZXRMYXlvdXREaW1lbnNpb24oUi5zdHlsZWFibGUuU3Bpbm5lcl9kcm9wRG93bldpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQpOworICAgICAgICAgICAgICAgIGlmIChwYS5oYXNWYWx1ZU9yRW1wdHkoUi5zdHlsZWFibGUuU3Bpbm5lcl9kcm9wRG93blNlbGVjdG9yKSkgeworICAgICAgICAgICAgICAgICAgICBwb3B1cC5zZXRMaXN0U2VsZWN0b3IocGEuZ2V0RHJhd2FibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuU3Bpbm5lcl9kcm9wRG93blNlbGVjdG9yKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHBvcHVwLnNldEJhY2tncm91bmREcmF3YWJsZShwYS5nZXREcmF3YWJsZShSLnN0eWxlYWJsZS5TcGlubmVyX3BvcHVwQmFja2dyb3VuZCkpOwogICAgICAgICAgICAgICAgIHBvcHVwLnNldFByb21wdFRleHQoYS5nZXRTdHJpbmcoUi5zdHlsZWFibGUuU3Bpbm5lcl9wcm9tcHQpKTsKICAgICAgICAgICAgICAgICBwYS5yZWN5Y2xlKCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGFibGVSb3cuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJsZVJvdy5qYXZhCmluZGV4IGY3ZjljOTEuLjIyOTMxZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJsZVJvdy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UYWJsZVJvdy5qYXZhCkBAIC05OCw3ICs5OCw3IEBACiAgICAgICoge0BoaWRlfQogICAgICAqLwogICAgIHZvaWQgc2V0Q29sdW1uQ29sbGFwc2VkKGludCBjb2x1bW5JbmRleCwgYm9vbGVhbiBjb2xsYXBzZWQpIHsKLSAgICAgICAgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGNvbHVtbkluZGV4KTsKKyAgICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldFZpcnR1YWxDaGlsZEF0KGNvbHVtbkluZGV4KTsKICAgICAgICAgaWYgKGNoaWxkICE9IG51bGwpIHsKICAgICAgICAgICAgIGNoaWxkLnNldFZpc2liaWxpdHkoY29sbGFwc2VkID8gR09ORSA6IFZJU0lCTEUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVGV4dFZpZXcuamF2YSBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Vmlldy5qYXZhCmluZGV4IDk0Yjc1YjcuLmQ0NmM2ZjkgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Vmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9UZXh0Vmlldy5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMTsKLQogaW1wb3J0IGFuZHJvaWQuUjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uQ29sb3JJbnQ7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkRyYXdhYmxlUmVzOwpAQCAtMTEyLDkgKzExMSwxMSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5BY2Nlc3NpYmlsaXR5SXRlcmF0b3JzLlRleHRTZWdtZW50SXRlcmF0b3I7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkNob3Jlb2dyYXBoZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkhhcHRpY0ZlZWRiYWNrQ29uc3RhbnRzOworaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dERldmljZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Q2hhcmFjdGVyTWFwOwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CkBAIC0zOTMsNyArMzk0LDE3IEBACiAgICAgICAgICAgICBtT3ZlcnJpZGUgPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlc29sdmVXaXRoTGF5b3V0RGlyZWN0aW9uKGludCBsYXlvdXREaXJlY3Rpb24pIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVwZGF0ZXMgdGhlIGxpc3Qgb2YgZGlzcGxheWVkIGRyYXdhYmxlcyB0byBhY2NvdW50IGZvciB0aGUgY3VycmVudAorICAgICAgICAgKiBsYXlvdXQgZGlyZWN0aW9uLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gbGF5b3V0RGlyZWN0aW9uIHRoZSBjdXJyZW50IGxheW91dCBkaXJlY3Rpb24KKyAgICAgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGRpc3BsYXllZCBkcmF3YWJsZXMgY2hhbmdlZAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gcmVzb2x2ZVdpdGhMYXlvdXREaXJlY3Rpb24oaW50IGxheW91dERpcmVjdGlvbikgeworICAgICAgICAgICAgZmluYWwgRHJhd2FibGUgcHJldmlvdXNMZWZ0ID0gbVNob3dpbmdbRHJhd2FibGVzLkxFRlRdOworICAgICAgICAgICAgZmluYWwgRHJhd2FibGUgcHJldmlvdXNSaWdodCA9IG1TaG93aW5nW0RyYXdhYmxlcy5SSUdIVF07CisKICAgICAgICAgICAgIC8vIEZpcnN0IHJlc2V0ICJsZWZ0IiBhbmQgInJpZ2h0IiBkcmF3YWJsZXMgdG8gdGhlaXIgaW5pdGlhbCB2YWx1ZXMKICAgICAgICAgICAgIG1TaG93aW5nW0RyYXdhYmxlcy5MRUZUXSA9IG1EcmF3YWJsZUxlZnRJbml0aWFsOwogICAgICAgICAgICAgbVNob3dpbmdbRHJhd2FibGVzLlJJR0hUXSA9IG1EcmF3YWJsZVJpZ2h0SW5pdGlhbDsKQEAgLTQ0MSwxNiArNDUyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBseUVycm9yRHJhd2FibGVJZk5lZWRlZChsYXlvdXREaXJlY3Rpb24pOwotICAgICAgICAgICAgdXBkYXRlRHJhd2FibGVzTGF5b3V0RGlyZWN0aW9uKGxheW91dERpcmVjdGlvbik7Ci0gICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlRHJhd2FibGVzTGF5b3V0RGlyZWN0aW9uKGludCBsYXlvdXREaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGZvciAoRHJhd2FibGUgZHIgOiBtU2hvd2luZykgewotICAgICAgICAgICAgICAgIGlmIChkciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRyLnNldExheW91dERpcmVjdGlvbihsYXlvdXREaXJlY3Rpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGx5RXJyb3JEcmF3YWJsZUlmTmVlZGVkKGxheW91dERpcmVjdGlvbik7CisKKyAgICAgICAgICAgIHJldHVybiBtU2hvd2luZ1tEcmF3YWJsZXMuTEVGVF0gIT0gcHJldmlvdXNMZWZ0CisgICAgICAgICAgICAgICAgICAgIHx8IG1TaG93aW5nW0RyYXdhYmxlcy5SSUdIVF0gIT0gcHJldmlvdXNSaWdodDsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldEVycm9yRHJhd2FibGUoRHJhd2FibGUgZHIsIFRleHRWaWV3IHR2KSB7CkBAIC02MTgsOSArNjI0LDYgQEAKICAgICBwcml2YXRlIGZpbmFsIFBhaW50IG1IaWdobGlnaHRQYWludDsKICAgICBwcml2YXRlIGJvb2xlYW4gbUhpZ2hsaWdodFBhdGhCb2d1cyA9IHRydWU7CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gbUZpcnN0VG91Y2ggPSBmYWxzZTsKLSAgICBwcml2YXRlIGxvbmcgbUxhc3RUb3VjaFVwVGltZSA9IDA7Ci0KICAgICAvLyBBbHRob3VnaCB0aGVzZSBmaWVsZHMgYXJlIHNwZWNpZmljIHRvIGVkaXRhYmxlIHRleHQsIHRoZXkgYXJlIG5vdCBhZGRlZCB0byBFZGl0b3IgYmVjYXVzZQogICAgIC8vIHRoZXkgYXJlIGRlZmluZWQgYnkgdGhlIFRleHRWaWV3J3Mgc3R5bGUgYW5kIGFyZSB0aGVtZS1kZXBlbmRlbnQuCiAgICAgaW50IG1DdXJzb3JEcmF3YWJsZVJlczsKQEAgLTU5NTgsMTUgKzU5NjEsMjAgQEAKICAgICAgICAgcmV0dXJuIG1MYXlvdXQgIT0gbnVsbCA/IG1MYXlvdXQuZ2V0SGVpZ2h0KCkgOiAwOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIEBoaWRlCi0gICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRQb2ludGVyU2hhcGUoTW90aW9uRXZlbnQgZXZlbnQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgaWYgKGlzVGV4dFNlbGVjdGFibGUoKSB8fCBpc1RleHRFZGl0YWJsZSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUG9pbnRlckljb24uU1RZTEVfVEVYVDsKKyAgICBwdWJsaWMgUG9pbnRlckljb24gZ2V0UG9pbnRlckljb24oTW90aW9uRXZlbnQgZXZlbnQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgaWYgKG1UZXh0IGluc3RhbmNlb2YgU3Bhbm5hYmxlICYmIG1MaW5rc0NsaWNrYWJsZSkgeworICAgICAgICAgICAgZmluYWwgaW50IG9mZnNldCA9IGdldE9mZnNldEZvclBvc2l0aW9uKHgsIHkpOworICAgICAgICAgICAgZmluYWwgQ2xpY2thYmxlU3BhbltdIGNsaWNrYWJsZXMgPSAoKFNwYW5uYWJsZSkgbVRleHQpLmdldFNwYW5zKG9mZnNldCwgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBDbGlja2FibGVTcGFuLmNsYXNzKTsKKyAgICAgICAgICAgIGlmIChjbGlja2FibGVzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUG9pbnRlckljb24uZ2V0U3lzdGVtSWNvbihtQ29udGV4dCwgUG9pbnRlckljb24uU1RZTEVfSEFORCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLmdldFBvaW50ZXJTaGFwZShldmVudCwgeCwgeSk7CisgICAgICAgIGlmIChpc1RleHRTZWxlY3RhYmxlKCkgfHwgaXNUZXh0RWRpdGFibGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIFBvaW50ZXJJY29uLmdldFN5c3RlbUljb24obUNvbnRleHQsIFBvaW50ZXJJY29uLlNUWUxFX1RFWFQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5nZXRQb2ludGVySWNvbihldmVudCwgeCwgeSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC04NDA2LDIzICs4NDE0LDYgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKICAgICAgICAgZmluYWwgaW50IGFjdGlvbiA9IGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpOwotCi0gICAgICAgIGlmIChtRWRpdG9yICE9IG51bGwgJiYgYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOKSB7Ci0gICAgICAgICAgICAvLyBEZXRlY3QgZG91YmxlIHRhcCBhbmQgaW5mb3JtIHRoZSBFZGl0b3IuCi0gICAgICAgICAgICBpZiAobUZpcnN0VG91Y2ggJiYgKFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpIC0gbUxhc3RUb3VjaFVwVGltZSkgPD0KLSAgICAgICAgICAgICAgICAgICAgVmlld0NvbmZpZ3VyYXRpb24uZ2V0RG91YmxlVGFwVGltZW91dCgpKSB7Ci0gICAgICAgICAgICAgICAgbUVkaXRvci5tRG91YmxlVGFwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtRmlyc3RUb3VjaCA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtRWRpdG9yLm1Eb3VibGVUYXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBtRmlyc3RUb3VjaCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9VUCkgewotICAgICAgICAgICAgbUxhc3RUb3VjaFVwVGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKG1FZGl0b3IgIT0gbnVsbCkgewogICAgICAgICAgICAgbUVkaXRvci5vblRvdWNoRXZlbnQoZXZlbnQpOwogCkBAIC04NTEyLDYgKzg1MDMsMjkgQEAKICAgICAgICAgcmV0dXJuIHN1cGVyLm9uR2VuZXJpY01vdGlvbkV2ZW50KGV2ZW50KTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51IG1lbnUpIHsKKyAgICAgICAgaWYgKG1FZGl0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUVkaXRvci5vbkNyZWF0ZUNvbnRleHRNZW51KG1lbnUpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc2hvd0NvbnRleHRNZW51KCkgeworICAgICAgICBpZiAobUVkaXRvciAhPSBudWxsKSB7CisgICAgICAgICAgICBtRWRpdG9yLnNldENvbnRleHRNZW51QW5jaG9yKEZsb2F0Lk5hTiwgRmxvYXQuTmFOKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIuc2hvd0NvbnRleHRNZW51KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc2hvd0NvbnRleHRNZW51KGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICAgICAgaWYgKG1FZGl0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUVkaXRvci5zZXRDb250ZXh0TWVudUFuY2hvcih4LCB5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIuc2hvd0NvbnRleHRNZW51KHgsIHkpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEByZXR1cm4gVHJ1ZSBpZmYgdGhpcyBUZXh0VmlldyBjb250YWlucyBhIHRleHQgdGhhdCBjYW4gYmUgZWRpdGVkLCBvciBpZiB0aGlzIGlzCiAgICAgICogYSBzZWxlY3RhYmxlIFRleHRWaWV3LgpAQCAtOTQxMywxMiArOTQyNywxNyBAQAogICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1Mb25nQ2xpY2soKSB7CiAgICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IGZhbHNlOwogCisgICAgICAgIGlmIChtRWRpdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1FZGl0b3IubUlzQmVpbmdMb25nQ2xpY2tlZCA9IHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoc3VwZXIucGVyZm9ybUxvbmdDbGljaygpKSB7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtRWRpdG9yICE9IG51bGwpIHsKICAgICAgICAgICAgIGhhbmRsZWQgfD0gbUVkaXRvci5wZXJmb3JtTG9uZ0NsaWNrKGhhbmRsZWQpOworICAgICAgICAgICAgbUVkaXRvci5tSXNCZWluZ0xvbmdDbGlja2VkID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaGFuZGxlZCkgewpAQCAtOTgzMiw3ICs5ODUxLDMwIEBACiAKICAgICAgICAgLy8gUmVzb2x2ZSBkcmF3YWJsZXMKICAgICAgICAgaWYgKG1EcmF3YWJsZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgbURyYXdhYmxlcy5yZXNvbHZlV2l0aExheW91dERpcmVjdGlvbihsYXlvdXREaXJlY3Rpb24pOworICAgICAgICAgICAgaWYgKG1EcmF3YWJsZXMucmVzb2x2ZVdpdGhMYXlvdXREaXJlY3Rpb24obGF5b3V0RGlyZWN0aW9uKSkgeworICAgICAgICAgICAgICAgIHByZXBhcmVEcmF3YWJsZUZvckRpc3BsYXkobURyYXdhYmxlcy5tU2hvd2luZ1tEcmF3YWJsZXMuTEVGVF0pOworICAgICAgICAgICAgICAgIHByZXBhcmVEcmF3YWJsZUZvckRpc3BsYXkobURyYXdhYmxlcy5tU2hvd2luZ1tEcmF3YWJsZXMuUklHSFRdKTsKKyAgICAgICAgICAgICAgICBhcHBseUNvbXBvdW5kRHJhd2FibGVUaW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyBhIGRyYXdhYmxlIGZvciBkaXNwbGF5IGJ5IHByb3BhZ2F0aW5nIGxheW91dCBkaXJlY3Rpb24gYW5kCisgICAgICogZHJhd2FibGUgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZHIgdGhlIGRyYXdhYmxlIHRvIHByZXBhcmUKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcHJlcGFyZURyYXdhYmxlRm9yRGlzcGxheShATnVsbGFibGUgRHJhd2FibGUgZHIpIHsKKyAgICAgICAgaWYgKGRyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRyLnNldExheW91dERpcmVjdGlvbihnZXRMYXlvdXREaXJlY3Rpb24oKSk7CisKKyAgICAgICAgaWYgKGRyLmlzU3RhdGVmdWwoKSkgeworICAgICAgICAgICAgZHIuc2V0U3RhdGUoZ2V0RHJhd2FibGVTdGF0ZSgpKTsKKyAgICAgICAgICAgIGRyLmp1bXBUb0N1cnJlbnRTdGF0ZSgpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9vbGJhci5qYXZhIGIvY29yZS9qYXZhL2FuZHJvaWQvd2lkZ2V0L1Rvb2xiYXIuamF2YQppbmRleCBhY2JmNWViLi44ZTcxMWIwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC93aWRnZXQvVG9vbGJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9hbmRyb2lkL3dpZGdldC9Ub29sYmFyLmphdmEKQEAgLTIwNzAsNyArMjA3MCw3IEBACiAgICAgICAgIE1lbnVJdGVtSW1wbCBtQ3VycmVudEV4cGFuZGVkSXRlbTsKIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQ29udGV4dCBjb250ZXh0LCBNZW51QnVpbGRlciBtZW51KSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE1lbnVCdWlsZGVyIG1lbnUpIHsKICAgICAgICAgICAgIC8vIENsZWFyIHRoZSBleHBhbmRlZCBhY3Rpb24gdmlldyB3aGVuIG1lbnVzIGNoYW5nZS4KICAgICAgICAgICAgIGlmIChtTWVudSAhPSBudWxsICYmIG1DdXJyZW50RXhwYW5kZWRJdGVtICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtTWVudS5jb2xsYXBzZUl0ZW1BY3Rpb25WaWV3KG1DdXJyZW50RXhwYW5kZWRJdGVtKTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWxlcnRDb250cm9sbGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0FsZXJ0Q29udHJvbGxlci5qYXZhCmluZGV4IDYxZWUwMGMuLjI3YzNiNzIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvQWxlcnRDb250cm9sbGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9BbGVydENvbnRyb2xsZXIuamF2YQpAQCAtMzU5LDYgKzM1OSw3IEBACiAKICAgICAgICAgaWYgKG1JY29uVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAocmVzSWQgIT0gMCkgeworICAgICAgICAgICAgICAgIG1JY29uVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CiAgICAgICAgICAgICAgICAgbUljb25WaWV3LnNldEltYWdlUmVzb3VyY2UobUljb25JZCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1JY29uVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7CkBAIC0zNzcsNiArMzc4LDcgQEAKIAogICAgICAgICBpZiAobUljb25WaWV3ICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtSWNvblZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICAgICAgICAgIG1JY29uVmlldy5zZXRJbWFnZURyYXdhYmxlKGljb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtSWNvblZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9FcGhlbWVyYWxSZXNvbHZlSW5mby5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9FcGhlbWVyYWxSZXNvbHZlSW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTdlZjA1Li4wMDAwMDAwCi0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvRXBoZW1lcmFsUmVzb2x2ZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHA7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbDsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7Ci0KLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBJbmZvcm1hdGlvbiB0aGF0IGlzIHJldHVybmVkIHdoZW4gcmVzb2x2aW5nIGVwaGVtZXJhbAotICogYXBwbGljYXRpb25zLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRXBoZW1lcmFsUmVzb2x2ZUluZm8gaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTSEFfQUxHT1JJVEhNID0gIlNIQS0yNTYiOwotICAgIHByaXZhdGUgYnl0ZVtdIG1EaWdlc3RCeXRlczsKLSAgICBwcml2YXRlIGludCBtRGlnZXN0UHJlZml4OwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxJbnRlbnRGaWx0ZXI+IG1GaWx0ZXJzID0gbmV3IEFycmF5TGlzdDxJbnRlbnRGaWx0ZXI+KCk7Ci0KLSAgICBwdWJsaWMgRXBoZW1lcmFsUmVzb2x2ZUluZm8oVXJpIHVyaSwgTGlzdDxJbnRlbnRGaWx0ZXI+IGZpbHRlcnMpIHsKLSAgICAgICAgZ2VuZXJhdGVEaWdlc3QodXJpKTsKLSAgICAgICAgbUZpbHRlcnMuYWRkQWxsKGZpbHRlcnMpOwotICAgIH0KLQotICAgIHByaXZhdGUgRXBoZW1lcmFsUmVzb2x2ZUluZm8oUGFyY2VsIGluKSB7Ci0gICAgICAgIHJlYWRGcm9tUGFyY2VsKGluKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIGdldERpZ2VzdEJ5dGVzKCkgewotICAgICAgICByZXR1cm4gbURpZ2VzdEJ5dGVzOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0RGlnZXN0UHJlZml4KCkgewotICAgICAgICByZXR1cm4gbURpZ2VzdFByZWZpeDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdDxJbnRlbnRGaWx0ZXI+IGdldEZpbHRlcnMoKSB7Ci0gICAgICAgIHJldHVybiBtRmlsdGVyczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZ2VuZXJhdGVEaWdlc3QoVXJpIHVyaSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgTWVzc2FnZURpZ2VzdCBkaWdlc3QgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKFNIQV9BTEdPUklUSE0pOwotICAgICAgICAgICAgZmluYWwgYnl0ZVtdIGhvc3RCeXRlcyA9IHVyaS5nZXRIb3N0KCkuZ2V0Qnl0ZXMoKTsKLSAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBkaWdlc3RCeXRlcyA9IGRpZ2VzdC5kaWdlc3QoaG9zdEJ5dGVzKTsKLSAgICAgICAgICAgIG1EaWdlc3RCeXRlcyA9IGRpZ2VzdEJ5dGVzOwotICAgICAgICAgICAgbURpZ2VzdFByZWZpeCA9Ci0gICAgICAgICAgICAgICAgICAgIGRpZ2VzdEJ5dGVzWzBdIDw8IDI0Ci0gICAgICAgICAgICAgICAgICAgIHwgZGlnZXN0Qnl0ZXNbMV0gPDwgMTYKLSAgICAgICAgICAgICAgICAgICAgfCBkaWdlc3RCeXRlc1syXSA8PCA4Ci0gICAgICAgICAgICAgICAgICAgIHwgZGlnZXN0Qnl0ZXNbM10gPDwgMDsKLSAgICAgICAgfSBjYXRjaCAoTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNvdWxkIG5vdCBmaW5kIGRpZ2VzdCBhbGdvcml0aG0iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgb3V0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgaWYgKG1EaWdlc3RCeXRlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBvdXQud3JpdGVJbnQoMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvdXQud3JpdGVJbnQobURpZ2VzdEJ5dGVzLmxlbmd0aCk7Ci0gICAgICAgICAgICBvdXQud3JpdGVCeXRlQXJyYXkobURpZ2VzdEJ5dGVzKTsKLSAgICAgICAgfQotICAgICAgICBvdXQud3JpdGVJbnQobURpZ2VzdFByZWZpeCk7Ci0gICAgICAgIG91dC53cml0ZUxpc3QobUZpbHRlcnMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCByZWFkRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKLSAgICAgICAgaW50IGRpZ2VzdEJ5dGVzU2l6ZSA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgaWYgKGRpZ2VzdEJ5dGVzU2l6ZSA+IDApIHsKLSAgICAgICAgICAgIG1EaWdlc3RCeXRlcyA9IG5ldyBieXRlW2RpZ2VzdEJ5dGVzU2l6ZV07Ci0gICAgICAgICAgICBpbi5yZWFkQnl0ZUFycmF5KG1EaWdlc3RCeXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgbURpZ2VzdFByZWZpeCA9IGluLnJlYWRJbnQoKTsKLSAgICAgICAgaW4ucmVhZExpc3QobUZpbHRlcnMsIG51bGwgLypsb2FkZXIqLyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8RXBoZW1lcmFsUmVzb2x2ZUluZm8+IENSRUFUT1IKLSAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxFcGhlbWVyYWxSZXNvbHZlSW5mbz4oKSB7Ci0gICAgICAgIHB1YmxpYyBFcGhlbWVyYWxSZXNvbHZlSW5mbyBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBpbikgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBFcGhlbWVyYWxSZXNvbHZlSW5mbyhpbik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRXBoZW1lcmFsUmVzb2x2ZUluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBFcGhlbWVyYWxSZXNvbHZlSW5mb1tzaXplXTsKLSAgICAgICAgfQotICAgIH07Ci19CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0VwaGVtZXJhbFJlc29sdmVyU2VydmljZS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9FcGhlbWVyYWxSZXNvbHZlclNlcnZpY2UuamF2YQppbmRleCA2NTUzMGYyLi42YmEwNGE5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0VwaGVtZXJhbFJlc29sdmVyU2VydmljZS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvRXBoZW1lcmFsUmVzb2x2ZXJTZXJ2aWNlLmphdmEKQEAgLTE2LDkgKzE2LDExIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN5c3RlbUFwaTsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkVwaGVtZXJhbFJlc29sdmVJbmZvOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0zMyw2ICszNSw3IEBACiAgKiBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgdGhlIHJlc29sdmVyIHNlcnZpY2UuCiAgKiBAaGlkZQogICovCitAU3lzdGVtQXBpCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXBoZW1lcmFsUmVzb2x2ZXJTZXJ2aWNlIGV4dGVuZHMgU2VydmljZSB7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUkVTT0xWRV9JTkZPID0gImNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5SRVNPTFZFX0lORk8iOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NFUVVFTkNFID0gImNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5TRVFVRU5DRSI7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0xvY2FsZVBpY2tlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXIuamF2YQppbmRleCA0ZWZlZmE5Li42YTM2NWUwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0xvY2FsZVBpY2tlci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvTG9jYWxlUGlja2VyLmphdmEKQEAgLTI4LDYgKzI4LDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2NhbGVMaXN0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwpAQCAtNDUsNiArNDYsNyBAQAogcHVibGljIGNsYXNzIExvY2FsZVBpY2tlciBleHRlbmRzIExpc3RGcmFnbWVudCB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJMb2NhbGVQaWNrZXIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBwc2V1ZG9Mb2NhbGVzID0geyAiZW4tWEEiLCAiYXItWEIiIH07CiAKICAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBMb2NhbGVTZWxlY3Rpb25MaXN0ZW5lciB7CiAgICAgICAgIC8vIFlvdSBjYW4gYWRkIGFueSBhcmd1bWVudCBpZiB5b3UgcmVhbGx5IG5lZWQgaXQuLi4KQEAgLTU3LDcgKzU5LDcgQEAKICAgICAgICAgc3RhdGljIGZpbmFsIENvbGxhdG9yIHNDb2xsYXRvciA9IENvbGxhdG9yLmdldEluc3RhbmNlKCk7CiAKICAgICAgICAgU3RyaW5nIGxhYmVsOwotICAgICAgICBMb2NhbGUgbG9jYWxlOworICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlOwogCiAgICAgICAgIHB1YmxpYyBMb2NhbGVJbmZvKFN0cmluZyBsYWJlbCwgTG9jYWxlIGxvY2FsZSkgewogICAgICAgICAgICAgdGhpcy5sYWJlbCA9IGxhYmVsOwpAQCAtODMsMTcgKzg1LDMwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFN5c3RlbUFzc2V0TG9jYWxlcygpIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlcy5nZXRTeXN0ZW0oKS5nZXRBc3NldHMoKS5nZXRMb2NhbGVzKCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBnZXRTdXBwb3J0ZWRMb2NhbGVzKENvbnRleHQgY29udGV4dCkgeworICAgICAgICByZXR1cm4gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmdBcnJheShSLmFycmF5LnN1cHBvcnRlZF9sb2NhbGVzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldFBzZXVkb0xvY2FsZXMoKSB7CisgICAgICAgIHJldHVybiBwc2V1ZG9Mb2NhbGVzOworICAgIH0KKwogICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxMb2NhbGVJbmZvPiBnZXRBbGxBc3NldExvY2FsZXMoQ29udGV4dCBjb250ZXh0LCBib29sZWFuIGlzSW5EZXZlbG9wZXJNb2RlKSB7CiAgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXNvdXJjZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOwogCi0gICAgICAgIGZpbmFsIFN0cmluZ1tdIGxvY2FsZXMgPSBSZXNvdXJjZXMuZ2V0U3lzdGVtKCkuZ2V0QXNzZXRzKCkuZ2V0TG9jYWxlcygpOworICAgICAgICBmaW5hbCBTdHJpbmdbXSBsb2NhbGVzID0gZ2V0U3lzdGVtQXNzZXRMb2NhbGVzKCk7CiAgICAgICAgIExpc3Q8U3RyaW5nPiBsb2NhbGVMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGxvY2FsZXMubGVuZ3RoKTsKICAgICAgICAgQ29sbGVjdGlvbnMuYWRkQWxsKGxvY2FsZUxpc3QsIGxvY2FsZXMpOwogCiAgICAgICAgIC8vIERvbid0IHNob3cgdGhlIHBzZXVkb2xvY2FsZXMgdW5sZXNzIHdlJ3JlIGluIGRldmVsb3BlciBtb2RlLiBodHRwOi8vYi8xNzE5MDQwNy4KICAgICAgICAgaWYgKCFpc0luRGV2ZWxvcGVyTW9kZSkgewotICAgICAgICAgICAgbG9jYWxlTGlzdC5yZW1vdmUoImFyLVhCIik7Ci0gICAgICAgICAgICBsb2NhbGVMaXN0LnJlbW92ZSgiZW4tWEEiKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIGxvY2FsZSA6IHBzZXVkb0xvY2FsZXMpIHsKKyAgICAgICAgICAgICAgICBsb2NhbGVMaXN0LnJlbW92ZShsb2NhbGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgQ29sbGVjdGlvbnMuc29ydChsb2NhbGVMaXN0KTsKQEAgLTI0MCwxMyArMjU1LDI0IEBACiAgICAgLyoqCiAgICAgICogUmVxdWVzdHMgdGhlIHN5c3RlbSB0byB1cGRhdGUgdGhlIHN5c3RlbSBsb2NhbGUuIE5vdGUgdGhhdCB0aGUgc3lzdGVtIGxvb2tzIGhhbHRlZAogICAgICAqIGZvciBhIHdoaWxlIGR1cmluZyB0aGUgTG9jYWxlIG1pZ3JhdGlvbiwgc28gdGhlIGNhbGxlciBuZWVkIHRvIHRha2UgY2FyZSBvZiBpdC4KKyAgICAgKgorICAgICAqIEBzZWUgI3VwZGF0ZUxvY2FsZXMoTG9jYWxlTGlzdCkKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgdXBkYXRlTG9jYWxlKExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIElBY3Rpdml0eU1hbmFnZXIgYW0gPSBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpOwotICAgICAgICAgICAgQ29uZmlndXJhdGlvbiBjb25maWcgPSBhbS5nZXRDb25maWd1cmF0aW9uKCk7CisgICAgICAgIHVwZGF0ZUxvY2FsZXMobmV3IExvY2FsZUxpc3QobG9jYWxlKSk7CisgICAgfQogCi0gICAgICAgICAgICBjb25maWcuc2V0TG9jYWxlKGxvY2FsZSk7CisgICAgLyoqCisgICAgICogUmVxdWVzdHMgdGhlIHN5c3RlbSB0byB1cGRhdGUgdGhlIGxpc3Qgb2Ygc3lzdGVtIGxvY2FsZXMuCisgICAgICogTm90ZSB0aGF0IHRoZSBzeXN0ZW0gbG9va3MgaGFsdGVkIGZvciBhIHdoaWxlIGR1cmluZyB0aGUgTG9jYWxlIG1pZ3JhdGlvbiwKKyAgICAgKiBzbyB0aGUgY2FsbGVyIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGl0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVMb2NhbGVzKExvY2FsZUxpc3QgbG9jYWxlcykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgSUFjdGl2aXR5TWFuYWdlciBhbSA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCk7CisgICAgICAgICAgICBmaW5hbCBDb25maWd1cmF0aW9uIGNvbmZpZyA9IGFtLmdldENvbmZpZ3VyYXRpb24oKTsKKworICAgICAgICAgICAgY29uZmlnLnNldExvY2FsZXMobG9jYWxlcyk7CiAgICAgICAgICAgICBjb25maWcudXNlclNldExvY2FsZSA9IHRydWU7CiAKICAgICAgICAgICAgIGFtLnVwZGF0ZUNvbmZpZ3VyYXRpb24oY29uZmlnKTsKQEAgLTI1Niw0ICsyODIsMTkgQEAKICAgICAgICAgICAgIC8vIEludGVudGlvbmFsbHkgbGVmdCBibGFuawogICAgICAgICB9CiAgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSBsb2NhbGUgbGlzdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGxvY2FsZSBsaXN0LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgTG9jYWxlTGlzdCBnZXRMb2NhbGVzKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMb2NhbGVzKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2VudCB3cm9uZworICAgICAgICAgICAgcmV0dXJuIExvY2FsZUxpc3QuZ2V0RGVmYXVsdCgpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXJXaXRoUmVnaW9uLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL0xvY2FsZVBpY2tlcldpdGhSZWdpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjhmODY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Mb2NhbGVQaWNrZXJXaXRoUmVnaW9uLmphdmEKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLmFwcDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5MaXN0RnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGphdmEudGV4dC5Db2xsYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2NsYXNzIExvY2FsZUFkYXB0ZXIgZXh0ZW5kcyBBcnJheUFkYXB0ZXI8TG9jYWxlUGlja2VyLkxvY2FsZUluZm8+IHsKKyAgICBmaW5hbCBwcml2YXRlIE1hcDxTdHJpbmcsIExvY2FsZVBpY2tlci5Mb2NhbGVJbmZvPiBtTGV2ZWxPbmUgPSBuZXcgQXJyYXlNYXA8PigpOworICAgIGZpbmFsIHByaXZhdGUgTWFwPFN0cmluZywgSGFzaFNldDxMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbz4+IG1MZXZlbFR3byA9IG5ldyBBcnJheU1hcDw+KCk7CisgICAgZmluYWwgcHJpdmF0ZSBMYXlvdXRJbmZsYXRlciBtSW5mbGF0ZXI7CisKKyAgICBmaW5hbCBzdGF0aWMgY2xhc3MgTG9jYWxlQXdhcmVDb21wYXJhdG9yIGltcGxlbWVudHMgQ29tcGFyYXRvcjxMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbz4geworICAgICAgICBwcml2YXRlIGZpbmFsIENvbGxhdG9yIG1Db2xsYXRvcjsKKworICAgICAgICBwdWJsaWMgTG9jYWxlQXdhcmVDb21wYXJhdG9yKExvY2FsZSBzb3J0TG9jYWxlKSB7CisgICAgICAgICAgICBtQ29sbGF0b3IgPSBDb2xsYXRvci5nZXRJbnN0YW5jZShzb3J0TG9jYWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoTG9jYWxlUGlja2VyLkxvY2FsZUluZm8gbGhzLCBMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbyByaHMpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29sbGF0b3IuY29tcGFyZShsaHMuZ2V0TGFiZWwoKSwgcmhzLmdldExhYmVsKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIExpc3Q8TG9jYWxlPiBnZXRDdXJhdGVkTG9jYWxlTGlzdChDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlc291cmNlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZExvY2FsZUNvZGVzID0gcmVzb3VyY2VzLmdldFN0cmluZ0FycmF5KFIuYXJyYXkuc3VwcG9ydGVkX2xvY2FsZXMpOworCisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxMb2NhbGU+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PihzdXBwb3J0ZWRMb2NhbGVDb2Rlcy5sZW5ndGgpOworICAgICAgICBmb3IgKFN0cmluZyBsb2NhbGVJZCA6IHN1cHBvcnRlZExvY2FsZUNvZGVzKSB7CisgICAgICAgICAgICBMb2NhbGUgbG9jYWxlID0gTG9jYWxlLmZvckxhbmd1YWdlVGFnKGxvY2FsZUlkKTsKKyAgICAgICAgICAgIGlmICghbG9jYWxlLmdldENvdW50cnkoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkKExvY2FsZS5mb3JMYW5ndWFnZVRhZyhsb2NhbGVJZCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcHVibGljIExvY2FsZUFkYXB0ZXIoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgZ2V0Q3VyYXRlZExvY2FsZUxpc3QoY29udGV4dCkpOworICAgIH0KKworICAgIHN0YXRpYyBMb2NhbGUgZ2V0QmFzZUxvY2FsZShMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBuZXcgTG9jYWxlLkJ1aWxkZXIoKQorICAgICAgICAgICAgICAgIC5zZXRMb2NhbGUobG9jYWxlKQorICAgICAgICAgICAgICAgIC5zZXRSZWdpb24oIiIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgfQorCisgICAgLy8gVGhlcmUgaXMgbm8gZ29vZCBBUEkgYXZhaWxhYmxlIGZvciB0aGlzLCBub3QgZXZlbiBpbiBJQ1UuCisgICAgLy8gV2UgY2FuIHJldmlzaXQgdGhpcyBpZiB3ZSBnZXQgc29tZSBJQ1Ugc3VwcG9ydCBsYXRlcgorICAgIC8vCisgICAgLy8gVGhlcmUgYXJlIGN1cnJlbnRseSBzZXZlcmFsIHRpY2tldHMgcmVxdWVzdGluZyB0aGlzIGZlYXR1cmU6CisgICAgLy8gKiBJQ1UgbmVlZHMgdG8gcHJvdmlkZSBhbiBlYXN5IHdheSB0byB0aXRsZWNhc2Ugb25seSBvbmUgZmlyc3QgbGV0dGVyCisgICAgLy8gICBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvMTE3MjkKKyAgICAvLyAqIEFkZCAiaW5pdGlhbCBjYXNlIgorICAgIC8vICAgIGh0dHA6Ly9idWdzLmljdS1wcm9qZWN0Lm9yZy90cmFjL3RpY2tldC84Mzk0CisgICAgLy8gKiBBZGQgY29kZSBmb3IgaW5pdGlhbENhc2UsIHRvVGl0bGVjYXNlIGRvbid0IG1vZGlmeSBhZnRlciBMdCwKKyAgICAvLyAgIGF2b2lkIDQ5RXJzLCBsb3ctbGV2ZWwgbGFuZ3VhZ2Utc3BlY2lmaWMgY2FzaW5nCisgICAgLy8gICBodHRwOi8vYnVncy5pY3UtcHJvamVjdC5vcmcvdHJhYy90aWNrZXQvMTA0MTAKKyAgICAvLyAqIEJyZWFrSXRlcmF0b3IuZ2V0Rmlyc3RJbnN0YW5jZTogT2Z0ZW4geW91IG5lZWQgdG8gdGl0bGVjYXNlIGp1c3QgdGhlIGZpcnN0CisgICAgLy8gICB3b3JkLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBhbG9uZS4gIChjbG9zZWQgYXMgZHVwbGljYXRlKQorICAgIC8vICAgaHR0cDovL2J1Z3MuaWN1LXByb2plY3Qub3JnL3RyYWMvdGlja2V0Lzg5NDYKKyAgICAvLworICAgIC8vIEEgKGNsdW5reSkgb3B0aW9uIHdpdGggdGhlIGN1cnJlbnQgSUNVIEFQSSBpczoKKyAgICAvLyAgIEJyZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvciA9IEJyZWFrSXRlcmF0b3IuZ2V0U2VudGVuY2VJbnN0YW5jZShsb2NhbGUpOworICAgIC8vICAgU3RyaW5nIHJlc3VsdCA9IFVDaGFyYWN0ZXIudG9UaXRsZUNhc2UobG9jYWxlLAorICAgIC8vICAgICAgIHNvdXJjZSwgYnJlYWtJdGVyYXRvciwgVUNoYXJhY3Rlci5USVRMRUNBU0VfTk9fTE9XRVJDQVNFKTsKKyAgICAvLyBUaGF0IGFsc28gbWVhbnMgY3JlYXRpbmcgQnJlYWtJdGVyYXRvcyBmb3IgZWFjaCBsb2NhbGUuIEV4cGVuc2l2ZS4uLgorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0b1RpdGxlQ2FzZShTdHJpbmcgcywgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICBpZiAocy5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gczsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgZmlyc3RDb2RlUG9pbnRMZW4gPSBzLm9mZnNldEJ5Q29kZVBvaW50cygwLCAxKTsKKyAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGZpcnN0Q29kZVBvaW50TGVuKS50b1VwcGVyQ2FzZShsb2NhbGUpCisgICAgICAgICAgICAgICAgKyBzLnN1YnN0cmluZyhmaXJzdENvZGVQb2ludExlbik7CisgICAgfQorCisgICAgcHVibGljIExvY2FsZUFkYXB0ZXIoQ29udGV4dCBjb250ZXh0LCBMaXN0PExvY2FsZT4gbG9jYWxlcykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBSLmxheW91dC5sb2NhbGVfcGlja2VyX2l0ZW0sIFIuaWQubG9jYWxlKTsKKyAgICAgICAgbUluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MQVlPVVRfSU5GTEFURVJfU0VSVklDRSk7CisKKyAgICAgICAgZm9yIChMb2NhbGUgbG9jYWxlIDogbG9jYWxlcykgeworICAgICAgICAgICAgTG9jYWxlIGJhc2VMb2NhbGUgPSBnZXRCYXNlTG9jYWxlKGxvY2FsZSk7CisgICAgICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBiYXNlTG9jYWxlLnRvTGFuZ3VhZ2VUYWcoKTsKKyAgICAgICAgICAgIGlmICghbUxldmVsT25lLmNvbnRhaW5zS2V5KGxhbmd1YWdlKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBsYWJlbCA9IHRvVGl0bGVDYXNlKGJhc2VMb2NhbGUuZ2V0RGlzcGxheU5hbWUoYmFzZUxvY2FsZSksIGJhc2VMb2NhbGUpOworICAgICAgICAgICAgICAgIG1MZXZlbE9uZS5wdXQobGFuZ3VhZ2UsIG5ldyBMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbyhsYWJlbCwgYmFzZUxvY2FsZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBIYXNoU2V0PExvY2FsZVBpY2tlci5Mb2NhbGVJbmZvPiBzdWJMb2NhbGVzOworICAgICAgICAgICAgaWYgKG1MZXZlbFR3by5jb250YWluc0tleShsYW5ndWFnZSkpIHsKKyAgICAgICAgICAgICAgICBzdWJMb2NhbGVzID0gbUxldmVsVHdvLmdldChsYW5ndWFnZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1YkxvY2FsZXMgPSBuZXcgSGFzaFNldDw+KCk7CisgICAgICAgICAgICAgICAgbUxldmVsVHdvLnB1dChsYW5ndWFnZSwgc3ViTG9jYWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSBsb2NhbGUuZ2V0RGlzcGxheUNvdW50cnkobG9jYWxlKTsKKyAgICAgICAgICAgIHN1YkxvY2FsZXMuYWRkKG5ldyBMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbyhsYWJlbCwgbG9jYWxlKSk7CisgICAgICAgIH0KKworICAgICAgICBzZXRBZGFwdGVyTGV2ZWwobnVsbCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QWRhcHRlckxldmVsKFN0cmluZyBwYXJlbnRMb2NhbGUpIHsKKyAgICAgICAgdGhpcy5jbGVhcigpOworCisgICAgICAgIGlmIChwYXJlbnRMb2NhbGUgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5hZGRBbGwobUxldmVsT25lLnZhbHVlcygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMuYWRkQWxsKG1MZXZlbFR3by5nZXQocGFyZW50TG9jYWxlKSk7CisgICAgICAgIH0KKworICAgICAgICBMb2NhbGUgc29ydExvY2FsZSA9IChwYXJlbnRMb2NhbGUgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICA/IExvY2FsZS5nZXREZWZhdWx0KCkKKyAgICAgICAgICAgICAgICA6IExvY2FsZS5mb3JMYW5ndWFnZVRhZyhwYXJlbnRMb2NhbGUpOworICAgICAgICBMb2NhbGVBd2FyZUNvbXBhcmF0b3IgY29tcGFyYXRvciA9IG5ldyBMb2NhbGVBd2FyZUNvbXBhcmF0b3Ioc29ydExvY2FsZSk7CisgICAgICAgIHRoaXMuc29ydChjb21wYXJhdG9yKTsKKworICAgICAgICB0aGlzLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZpZXcgZ2V0VmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgVmlldyB2aWV3OworICAgICAgICBUZXh0VmlldyB0ZXh0OworICAgICAgICBpZiAoY29udmVydFZpZXcgPT0gbnVsbCkgeworICAgICAgICAgICAgdmlldyA9IG1JbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LmxvY2FsZV9waWNrZXJfaXRlbSwgcGFyZW50LCBmYWxzZSk7CisgICAgICAgICAgICB0ZXh0ID0gKFRleHRWaWV3KSB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLmxvY2FsZSk7CisgICAgICAgICAgICB2aWV3LnNldFRhZyh0ZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZpZXcgPSBjb252ZXJ0VmlldzsKKyAgICAgICAgICAgIHRleHQgPSAoVGV4dFZpZXcpIHZpZXcuZ2V0VGFnKCk7CisgICAgICAgIH0KKyAgICAgICAgTG9jYWxlUGlja2VyLkxvY2FsZUluZm8gaXRlbSA9IGdldEl0ZW0ocG9zaXRpb24pOworICAgICAgICB0ZXh0LnNldFRleHQoaXRlbS5nZXRMYWJlbCgpKTsKKyAgICAgICAgdGV4dC5zZXRUZXh0TG9jYWxlKGl0ZW0uZ2V0TG9jYWxlKCkpOworICAgICAgICByZXR1cm4gdmlldzsKKyAgICB9Cit9CisKK3B1YmxpYyBjbGFzcyBMb2NhbGVQaWNrZXJXaXRoUmVnaW9uIGV4dGVuZHMgTGlzdEZyYWdtZW50IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElTVF9NT0RFX0xBTkdVQUdFID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElTVF9NT0RFX0NPVU5UUlkgPSAxOworCisgICAgcHJpdmF0ZSBMb2NhbGVBZGFwdGVyIG1BZGFwdGVyOworICAgIHByaXZhdGUgaW50IG1EaXNwbGF5TW9kZSA9IExJU1RfTU9ERV9MQU5HVUFHRTsKKworICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIExvY2FsZVNlbGVjdGlvbkxpc3RlbmVyIHsKKyAgICAgICAgLy8gWW91IGNhbiBhZGQgYW55IGFyZ3VtZW50IGlmIHlvdSByZWFsbHkgbmVlZCBpdC4uLgorICAgICAgICBwdWJsaWMgdm9pZCBvbkxvY2FsZVNlbGVjdGVkKExvY2FsZSBsb2NhbGUpOworICAgIH0KKworICAgIHByaXZhdGUgTG9jYWxlU2VsZWN0aW9uTGlzdGVuZXIgbUxpc3RlbmVyID0gbnVsbDsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlDcmVhdGVkKGZpbmFsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25BY3Rpdml0eUNyZWF0ZWQoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICBtQWRhcHRlciA9IG5ldyBMb2NhbGVBZGFwdGVyKGdldENvbnRleHQoKSk7CisgICAgICAgIG1BZGFwdGVyLnNldEFkYXB0ZXJMZXZlbChudWxsKTsKKyAgICAgICAgc2V0TGlzdEFkYXB0ZXIobUFkYXB0ZXIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldExvY2FsZVNlbGVjdGlvbkxpc3RlbmVyKExvY2FsZVNlbGVjdGlvbkxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkgeworICAgICAgICBzdXBlci5vblJlc3VtZSgpOworICAgICAgICBnZXRMaXN0VmlldygpLnJlcXVlc3RGb2N1cygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEVhY2ggbGlzdGVuZXIgbmVlZHMgdG8gY2FsbCB7QGxpbmsgTG9jYWxlUGlja2VyLnVwZGF0ZUxvY2FsZShMb2NhbGUpfSB0byBhY3R1YWxseQorICAgICAqIGNoYW5nZSB0aGUgbG9jYWxlLgorICAgICAqIDxwLz4KKyAgICAgKiBXZSBkb24ndCBjYWxsIHtAbGluayBMb2NhbGVQaWNrZXIudXBkYXRlTG9jYWxlKExvY2FsZSl9IGF1dG9tYXRpY2FsbHksIGFzIGl0IGhhbHRzCisgICAgICogdGhlIHN5c3RlbSBmb3IgYSBtb21lbnQgYW5kIHNvbWUgY2FsbGVycyB3b24ndCB3YW50IGl0LgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTGlzdEl0ZW1DbGljayhMaXN0VmlldyBsLCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICBmaW5hbCBMb2NhbGUgbG9jYWxlID0gKChMb2NhbGVQaWNrZXIuTG9jYWxlSW5mbykgZ2V0TGlzdEFkYXB0ZXIoKS5nZXRJdGVtKHBvc2l0aW9uKSkubG9jYWxlOworICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdGhlIGJhY2sgYnV0dG9ucyB0byByZXR1cm4gdG8gdGhlIGxhbmd1YWdlIGxpc3QKKyAgICAgICAgaWYgKG1EaXNwbGF5TW9kZSA9PSBMSVNUX01PREVfTEFOR1VBR0UpIHsKKyAgICAgICAgICAgIG1EaXNwbGF5TW9kZSA9IExJU1RfTU9ERV9DT1VOVFJZOworICAgICAgICAgICAgbUFkYXB0ZXIuc2V0QWRhcHRlckxldmVsKGxvY2FsZS50b0xhbmd1YWdlVGFnKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgbUxpc3RlbmVyLm9uTG9jYWxlU2VsZWN0ZWQobG9jYWxlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvUmVzb2x2ZXJBY3Rpdml0eS5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9SZXNvbHZlckFjdGl2aXR5LmphdmEKaW5kZXggYmEwOTEyYS4uYWEzOGRlNyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9SZXNvbHZlckFjdGl2aXR5LmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9SZXNvbHZlckFjdGl2aXR5LmphdmEKQEAgLTcxOCw5ICs3MTgsOSBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChyaS5oYW5kbGVBbGxXZWJEYXRhVVJJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgZGVmYXVsdCBCcm93c2VyIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gcG0uZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZSh1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gcG0uZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcih1c2VySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KHBhY2thZ2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLnNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUocmkuYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLnNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWVBc1VzZXIocmkuYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLCB1c2VySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIERvbWFpbiBWZXJpZmljYXRpb24gc3RhdHVzCkBAIC03MzcsNyArNzM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcmllcy5jb250YWlucyhJbnRlbnQuQ0FURUdPUllfQlJPV1NBQkxFKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSHR0cE9ySHR0cHMgJiYgaXNWaWV3QWN0aW9uICYmIGhhc0NhdGVnb3J5QnJvd3NhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG0udXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLnVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihwYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQUxXQVlTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvVG9vbGJhckFjdGlvbkJhci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Ub29sYmFyQWN0aW9uQmFyLmphdmEKaW5kZXggOWQxMjgwMy4uNTc1ZWYwMiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Ub29sYmFyQWN0aW9uQmFyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9Ub29sYmFyQWN0aW9uQmFyLmphdmEKQEAgLTI5LDEwICsyOSwxNCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkZvY3VzQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1BhcmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dDYWxsYmFja1dyYXBwZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lckFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9vbGJhcjsKKwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51QnVpbGRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTWVudVByZXNlbnRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuRGVjb3JUb29sYmFyOwpAQCAtNDc5LDYgKzQ4MywxMiBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkRlc3Ryb3koKSB7CisgICAgICAgIC8vIFJlbW92ZSBhbnkgaW52YWxpZGF0aW9uIGNhbGxiYWNrcworICAgICAgICBtRGVjb3JUb29sYmFyLmdldFZpZXdHcm91cCgpLnJlbW92ZUNhbGxiYWNrcyhtTWVudUludmFsaWRhdG9yKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBhZGRPbk1lbnVWaXNpYmlsaXR5TGlzdGVuZXIoT25NZW51VmlzaWJpbGl0eUxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgICAgIG1NZW51VmlzaWJpbGl0eUxpc3RlbmVycy5hZGQobGlzdGVuZXIpOwogICAgIH0KQEAgLTQ5OSw2ICs1MDksMTIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHJlcXVlc3RGb2N1cygpIHsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3RGb2N1cyhtRGVjb3JUb29sYmFyLmdldFZpZXdHcm91cCgpKTsKKyAgICB9CisKICAgICBwcml2YXRlIGNsYXNzIFRvb2xiYXJDYWxsYmFja1dyYXBwZXIgZXh0ZW5kcyBXaW5kb3dDYWxsYmFja1dyYXBwZXIgewogICAgICAgICBwdWJsaWMgVG9vbGJhckNhbGxiYWNrV3JhcHBlcihXaW5kb3cuQ2FsbGJhY2sgd3JhcHBlZCkgewogICAgICAgICAgICAgc3VwZXIod3JhcHBlZCk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1dpbmRvd0RlY29yQWN0aW9uQmFyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvYXBwL1dpbmRvd0RlY29yQWN0aW9uQmFyLmphdmEKaW5kZXggMDVjZmQ4MS4uYzZiZjFiNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2FwcC9XaW5kb3dEZWNvckFjdGlvbkJhci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9hcHAvV2luZG93RGVjb3JBY3Rpb25CYXIuamF2YQpAQCAtMTgsNiArMTgsOCBAQAogCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdQYXJlbnQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9vbGJhcjsKIApAQCAtOTUwLDYgKzk1MiwxMiBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgLyoqIEBoaWRlICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gcmVxdWVzdEZvY3VzKCkgeworICAgICAgICByZXR1cm4gcmVxdWVzdEZvY3VzKG1EZWNvclRvb2xiYXIuZ2V0Vmlld0dyb3VwKCkpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEBoaWRlCiAgICAgICovCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2lucHV0bWV0aG9kL0lucHV0TWV0aG9kU3VidHlwZVN3aXRjaGluZ0NvbnRyb2xsZXIuamF2YQppbmRleCBlNjA3YTNmLi44NWNjODQxIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvaW5wdXRtZXRob2QvSW5wdXRNZXRob2RTdWJ0eXBlU3dpdGNoaW5nQ29udHJvbGxlci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9pbnB1dG1ldGhvZC9JbnB1dE1ldGhvZFN1YnR5cGVTd2l0Y2hpbmdDb250cm9sbGVyLmphdmEKQEAgLTE3NSw3ICsxNzUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBUcmVlTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PiBtU29ydGVkSW1taXMgPQotICAgICAgICAgICAgICAgIG5ldyBUcmVlTWFwPElucHV0TWV0aG9kSW5mbywgTGlzdDxJbnB1dE1ldGhvZFN1YnR5cGU+PigKKyAgICAgICAgICAgICAgICBuZXcgVHJlZU1hcDw+KAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8SW5wdXRNZXRob2RJbmZvPigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoSW5wdXRNZXRob2RJbmZvIGltaTEsIElucHV0TWV0aG9kSW5mbyBpbWkyKSB7CkBAIC0xOTIsMTQgKzE5Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgcHVibGljIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QodHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotCiAgICAgICAgIHB1YmxpYyBMaXN0PEltZVN1YnR5cGVMaXN0SXRlbT4gZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKLSAgICAgICAgICAgICAgICBib29sZWFuIHNob3dTdWJ0eXBlcywgYm9vbGVhbiBpbmNsdWRlQXV4aWxpYXJ5U3VidHlwZXMsIGJvb2xlYW4gaXNTY3JlZW5Mb2NrZWQpIHsKLSAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGltTGlzdCA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPigpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5jbHVkZUF1eGlsaWFyeVN1YnR5cGVzLCBib29sZWFuIGlzU2NyZWVuTG9ja2VkKSB7CisgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBpbUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgIGZpbmFsIEhhc2hNYXA8SW5wdXRNZXRob2RJbmZvLCBMaXN0PElucHV0TWV0aG9kU3VidHlwZT4+IGltbWlzID0KICAgICAgICAgICAgICAgICAgICAgbVNldHRpbmdzLmdldEV4cGxpY2l0bHlPckltcGxpY2l0bHlFbmFibGVkSW5wdXRNZXRob2RzQW5kU3VidHlwZUxpc3RMb2NrZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQpOwpAQCAtMjE5LDEyICsyMTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIExpc3Q8SW5wdXRNZXRob2RTdWJ0eXBlPiBleHBsaWNpdGx5T3JJbXBsaWNpdGx5RW5hYmxlZFN1YnR5cGVMaXN0ID0gaW1taXMuZ2V0KGltaSk7Ci0gICAgICAgICAgICAgICAgSGFzaFNldDxTdHJpbmc+IGVuYWJsZWRTdWJ0eXBlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBlbmFibGVkU3VidHlwZVNldCA9IG5ldyBIYXNoU2V0PD4oKTsKICAgICAgICAgICAgICAgICBmb3IgKElucHV0TWV0aG9kU3VidHlwZSBzdWJ0eXBlIDogZXhwbGljaXRseU9ySW1wbGljaXRseUVuYWJsZWRTdWJ0eXBlTGlzdCkgewogICAgICAgICAgICAgICAgICAgICBlbmFibGVkU3VidHlwZVNldC5hZGQoU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5oYXNoQ29kZSgpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZpbmFsIENoYXJTZXF1ZW5jZSBpbWVMYWJlbCA9IGltaS5sb2FkTGFiZWwobVBtKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvd1N1YnR5cGVzICYmIGVuYWJsZWRTdWJ0eXBlU2V0LnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZFN1YnR5cGVTZXQuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3VidHlwZUNvdW50ID0gaW1pLmdldFN1YnR5cGVDb3VudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudihUQUcsICJBZGQgc3VidHlwZXM6ICIgKyBzdWJ0eXBlQ291bnQgKyAiLCAiICsgaW1pLmdldElkKCkpOwpAQCAtNTMyLDcgKzUyNyw4IEBACiAgICAgcHVibGljIHZvaWQgcmVzZXRDaXJjdWxhckxpc3RMb2NrZWQoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIG1TdWJ0eXBlTGlzdCA9IG5ldyBJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0KGNvbnRleHQsIG1TZXR0aW5ncyk7CiAgICAgICAgIG1Db250cm9sbGVyID0gQ29udHJvbGxlckltcGwuY3JlYXRlRnJvbShtQ29udHJvbGxlciwKLSAgICAgICAgICAgICAgICBtU3VidHlwZUxpc3QuZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgpKTsKKyAgICAgICAgICAgICAgICBtU3VidHlwZUxpc3QuZ2V0U29ydGVkSW5wdXRNZXRob2RBbmRTdWJ0eXBlTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGluY2x1ZGVBdXhpbGlhcnlTdWJ0eXBlcyAqLywgZmFsc2UgLyogaXNTY3JlZW5Mb2NrZWQgKi8pKTsKICAgICB9CiAKICAgICBwdWJsaWMgSW1lU3VidHlwZUxpc3RJdGVtIGdldE5leHRJbnB1dE1ldGhvZExvY2tlZChib29sZWFuIG9ubHlDdXJyZW50SW1lLCBJbnB1dE1ldGhvZEluZm8gaW1pLApAQCAtNTQ2LDEwICs1NDIsMTAgQEAKICAgICAgICAgcmV0dXJuIG1Db250cm9sbGVyLmdldE5leHRJbnB1dE1ldGhvZChvbmx5Q3VycmVudEltZSwgaW1pLCBzdWJ0eXBlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTGlzdDxJbWVTdWJ0eXBlTGlzdEl0ZW0+IGdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3RMb2NrZWQoYm9vbGVhbiBzaG93U3VidHlwZXMsCisgICAgcHVibGljIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBnZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0TG9ja2VkKAogICAgICAgICAgICAgYm9vbGVhbiBpbmNsdWRpbmdBdXhpbGlhcnlTdWJ0eXBlcywgYm9vbGVhbiBpc1NjcmVlbkxvY2tlZCkgewogICAgICAgICByZXR1cm4gbVN1YnR5cGVMaXN0LmdldFNvcnRlZElucHV0TWV0aG9kQW5kU3VidHlwZUxpc3QoCi0gICAgICAgICAgICAgICAgc2hvd1N1YnR5cGVzLCBpbmNsdWRpbmdBdXhpbGlhcnlTdWJ0eXBlcywgaXNTY3JlZW5Mb2NrZWQpOworICAgICAgICAgICAgICAgIGluY2x1ZGluZ0F1eGlsaWFyeVN1YnR5cGVzLCBpc1NjcmVlbkxvY2tlZCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZHVtcChmaW5hbCBQcmludGVyIHB3KSB7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9nZ2luZy9NZXRyaWNzTG9nZ2VyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvbG9nZ2luZy9NZXRyaWNzTG9nZ2VyLmphdmEKaW5kZXggY2M2NzdjYy4uY2U0ZmMwNiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL2xvZ2dpbmcvTWV0cmljc0xvZ2dlci5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9sb2dnaW5nL01ldHJpY3NMb2dnZXIuamF2YQpAQCAtMjcsNyArMjcsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgTWV0cmljc0xvZ2dlciBpbXBsZW1lbnRzIE1ldHJpY3NDb25zdGFudHMgewogICAgIC8vIFRlbXBvcmFyeSBjb25zdGFudHMgZ28gaGVyZSwgdG8gYXdhaXQgbWlncmF0aW9uIHRvIE1ldHJpY3NDb25zdGFudHMuCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVNfTE9DS19USUxFID0gMjU3OwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFTX1VTRVJfVElMRSA9IDI1ODsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRU19CQVRURVJZX1RJTEUgPSAyNTk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZJQ0FUSU9OX1pFTl9NT0RFX1ZJU1VBTF9JTlRFUlJVUFRJT05TID0gMjYwOwpAQCAtMzUsNiArMzQsMzQgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fWkVOX0FMTE9XX0xJR0hUUyA9IDI2MjsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT1RJRklDQVRJT05fVE9QSUNfTk9USUZJQ0FUSU9OID0gMjYzOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9ERUZBVUxUX1NNU19BUFBfQ0hBTkdFRCA9IDI2NDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBRU19DT0xPUl9NQVRSSVggPSAyNjU7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVNfQ1VTVE9NID0gMjY2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFDVElPTl9aRU5fQUxMT1dfU0NSRUVOX09OID0gMjY3OworCisgICAgLyoqCisgICAgICogTG9nZ2VkIHdoZW4gdGhlIHVzZXIgZG9ja3MgYSB3aW5kb3cgZnJvbSByZWNlbnRzIGJ5IGxvbmdwcmVzc2luZyBhIHRhc2sgYW5kIGRyYWdnaW5nIGl0IHRvCisgICAgICogdGhlIGRvY2sgYXJlYS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fV0lORE9XX0RPQ0tfRFJBR19EUk9QID0gMjY4OworCisgICAgLyoqCisgICAgICogTG9nZ2VkIHdoZW4gdGhlIHVzZXIgZG9ja3MgYSBmdWxsc2NyZWVuIHdpbmRvdyBieSBsb25nIHByZXNzaW5nIHJlY2VudHMgd2hpY2ggYWxzbyBvcGVucworICAgICAqIHJlY2VudHMgb24gdGhlIGxvd2VyL3JpZ2h0IHNpZGUuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUNUSU9OX1dJTkRPV19ET0NLX0xPTkdQUkVTUyA9IDI2OTsKKworICAgIC8qKgorICAgICAqIExvZ2dlZCB3aGVuIHRoZSB1c2VyIGRvY2tzIGEgd2luZG93IGJ5IGRyYWdnaW5nIGZyb20gdGhlIG5hdmJhciB3aGljaCBhbHNvIG9wZW5zIHJlY2VudHMgb24KKyAgICAgKiB0aGUgbG93ZXIvcmlnaHQgc2lkZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBQ1RJT05fV0lORE9XX0RPQ0tfU1dJUEUgPSAyNzA7CisKKyAgICAvKioKKyAgICAgKiBMb2dnZWQgd2hlbiB0aGUgdXNlciBsYXVuY2hlcyBhIHByb2ZpbGUtc3BlY2lmaWMgYXBwIGFuZCB3ZSBpbnRlcmNlcHQgaXQgd2l0aCB0aGUgY29uZmlybQorICAgICAqIGNyZWRlbnRpYWxzIFVJLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST0ZJTEVfQ0hBTExFTkdFID0gMjcxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFFTX0JBVFRFUllfREVUQUlMID0gMjcyOwogCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHZpc2libGUoQ29udGV4dCBjb250ZXh0LCBpbnQgY2F0ZWdvcnkpIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gewogICAgICAgICBpZiAoQnVpbGQuSVNfREVCVUdHQUJMRSAmJiBjYXRlZ29yeSA9PSBWSUVXX1VOS05PV04pIHsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9CYXR0ZXJ5U3RhdHNJbXBsLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvQmF0dGVyeVN0YXRzSW1wbC5qYXZhCmluZGV4IDRhOTY5YjIuLmNjODE1YzQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9CYXR0ZXJ5U3RhdHNJbXBsLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0JhdHRlcnlTdGF0c0ltcGwuamF2YQpAQCAtNzczMiwyNiArNzczMiwzNSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpbmFsIFVpZCB1ID0gZ2V0VWlkU3RhdHNMb2NrZWQobWFwVWlkKGVudHJ5LnVpZCkpOwotICAgICAgICAgICAgICAgIHUubm90ZU5ldHdvcmtBY3Rpdml0eUxvY2tlZChORVRXT1JLX1dJRklfUlhfREFUQSwgZW50cnkucnhCeXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4UGFja2V0cyk7Ci0gICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfV0lGSV9UWF9EQVRBLCBlbnRyeS50eEJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudHhQYWNrZXRzKTsKLSAgICAgICAgICAgICAgICByeFBhY2tldHMucHV0KHUuZ2V0VWlkKCksIGVudHJ5LnJ4UGFja2V0cyk7Ci0gICAgICAgICAgICAgICAgdHhQYWNrZXRzLnB1dCh1LmdldFVpZCgpLCBlbnRyeS50eFBhY2tldHMpOworICAgICAgICAgICAgICAgIGlmIChlbnRyeS5yeEJ5dGVzICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdS5ub3RlTmV0d29ya0FjdGl2aXR5TG9ja2VkKE5FVFdPUktfV0lGSV9SWF9EQVRBLCBlbnRyeS5yeEJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4UGFja2V0cyk7CisgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19XSUZJX1JYX0RBVEFdLmFkZENvdW50TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4Qnl0ZXMpOworICAgICAgICAgICAgICAgICAgICBtTmV0d29ya1BhY2tldEFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19XSUZJX1JYX0RBVEFdLmFkZENvdW50TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4UGFja2V0cyk7CiAKLSAgICAgICAgICAgICAgICAvLyBTdW0gdGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNvIHRoYXQgdGhlIFJ4IFBvd2VyIGFuZCBUeCBQb3dlciBjYW4KLSAgICAgICAgICAgICAgICAvLyBiZSBldmVubHkgZGlzdHJpYnV0ZWQgYW1vbmdzdCB0aGUgYXBwcy4KLSAgICAgICAgICAgICAgICB0b3RhbFJ4UGFja2V0cyArPSBlbnRyeS5yeFBhY2tldHM7Ci0gICAgICAgICAgICAgICAgdG90YWxUeFBhY2tldHMgKz0gZW50cnkudHhQYWNrZXRzOworICAgICAgICAgICAgICAgICAgICByeFBhY2tldHMucHV0KHUuZ2V0VWlkKCksIGVudHJ5LnJ4UGFja2V0cyk7CiAKLSAgICAgICAgICAgICAgICBtTmV0d29ya0J5dGVBY3Rpdml0eUNvdW50ZXJzW05FVFdPUktfV0lGSV9SWF9EQVRBXS5hZGRDb3VudExvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4Qnl0ZXMpOwotICAgICAgICAgICAgICAgIG1OZXR3b3JrQnl0ZUFjdGl2aXR5Q291bnRlcnNbTkVUV09SS19XSUZJX1RYX0RBVEFdLmFkZENvdW50TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudHhCeXRlcyk7Ci0gICAgICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW05FVFdPUktfV0lGSV9SWF9EQVRBXS5hZGRDb3VudExvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnJ4UGFja2V0cyk7Ci0gICAgICAgICAgICAgICAgbU5ldHdvcmtQYWNrZXRBY3Rpdml0eUNvdW50ZXJzW05FVFdPUktfV0lGSV9UWF9EQVRBXS5hZGRDb3VudExvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnR4UGFja2V0cyk7CisgICAgICAgICAgICAgICAgICAgIC8vIFN1bSB0aGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgc28gdGhhdCB0aGUgUnggUG93ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIC8vIGJlIGV2ZW5seSBkaXN0cmlidXRlZCBhbW9uZ3N0IHRoZSBhcHBzLgorICAgICAgICAgICAgICAgICAgICB0b3RhbFJ4UGFja2V0cyArPSBlbnRyeS5yeFBhY2tldHM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnR4Qnl0ZXMgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB1Lm5vdGVOZXR3b3JrQWN0aXZpdHlMb2NrZWQoTkVUV09SS19XSUZJX1RYX0RBVEEsIGVudHJ5LnR4Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudHhQYWNrZXRzKTsKKyAgICAgICAgICAgICAgICAgICAgbU5ldHdvcmtCeXRlQWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfVFhfREFUQV0uYWRkQ291bnRMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudHhCeXRlcyk7CisgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrUGFja2V0QWN0aXZpdHlDb3VudGVyc1tORVRXT1JLX1dJRklfVFhfREFUQV0uYWRkQ291bnRMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkudHhQYWNrZXRzKTsKKworICAgICAgICAgICAgICAgICAgICB0eFBhY2tldHMucHV0KHUuZ2V0VWlkKCksIGVudHJ5LnR4UGFja2V0cyk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU3VtIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzbyB0aGF0IHRoZSBUeCBQb3dlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYmUgZXZlbmx5IGRpc3RyaWJ1dGVkIGFtb25nc3QgdGhlIGFwcHMuCisgICAgICAgICAgICAgICAgICAgIHRvdGFsVHhQYWNrZXRzICs9IGVudHJ5LnR4UGFja2V0czsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0luc3RhbGxlckNvbm5lY3Rpb24uamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9JbnN0YWxsZXJDb25uZWN0aW9uLmphdmEKaW5kZXggODMwZGE3OS4uYjMyMjJmMCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL0luc3RhbGxlckNvbm5lY3Rpb24uamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvSW5zdGFsbGVyQ29ubmVjdGlvbi5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5uZXQuTG9jYWxTb2NrZXQ7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTG9jYWxTb2NrZXRBZGRyZXNzOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9uczsKQEAgLTI5LDYgKzMwLDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAogLyoqCiAgKiBSZXByZXNlbnRzIGEgY29ubmVjdGlvbiB0byB7QGNvZGUgaW5zdGFsbGR9LiBBbGxvd3MgbXVsdGlwbGUgY29ubmVjdCBhbmQKQEAgLTYxLDYgKzYzLDExIEBACiAgICAgfQogCiAgICAgcHVibGljIHN5bmNocm9uaXplZCBTdHJpbmcgdHJhbnNhY3QoU3RyaW5nIGNtZCkgeworICAgICAgICBpZiAobVdhcm5JZkhlbGQgIT0gbnVsbCAmJiBUaHJlYWQuaG9sZHNMb2NrKG1XYXJuSWZIZWxkKSkgeworICAgICAgICAgICAgU2xvZy53dGYoVEFHLCAiQ2FsbGluZyB0aHJlYWQgIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiBpcyBob2xkaW5nIDB4IgorICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoU3lzdGVtLmlkZW50aXR5SGFzaENvZGUobVdhcm5JZkhlbGQpKSwgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghY29ubmVjdCgpKSB7CiAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiY29ubmVjdGlvbiBmYWlsZWQiKTsKICAgICAgICAgICAgIHJldHVybiAiLTEiOwpAQCAtOTYsNDQgKzEwMyw1MCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGludCBleGVjdXRlKFN0cmluZyBjbWQpIHsKLSAgICAgICAgaWYgKG1XYXJuSWZIZWxkICE9IG51bGwgJiYgVGhyZWFkLmhvbGRzTG9jayhtV2FybklmSGVsZCkpIHsKLSAgICAgICAgICAgIFNsb2cud3RmKFRBRywgIkNhbGxpbmcgdGhyZWFkICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICIgaXMgaG9sZGluZyAweCIKLSAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKG1XYXJuSWZIZWxkKSksIG5ldyBUaHJvd2FibGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzID0gdHJhbnNhY3QoY21kKTsKKyAgICBwdWJsaWMgdm9pZCBleGVjdXRlKFN0cmluZyBjbWQsIE9iamVjdC4uLiBhcmdzKSB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHJlc1JhdyA9IGV4ZWN1dGVGb3JSZXN1bHQoY21kLCBhcmdzKTsKKyAgICAgICAgaW50IHJlcyA9IC0xOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQocmVzKTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHJlc1Jhdyk7CisgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBpZ25vcmVkKSB7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlcyAhPSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSW5zdGFsbGVyRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGV4ZWN1dGUgIiArIGNtZCArICIgIiArIEFycmF5cy50b1N0cmluZyhhcmdzKSArICI6ICIgKyByZXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGludCBkZXhvcHQoU3RyaW5nIGFwa1BhdGgsIGludCB1aWQsIFN0cmluZyBpbnN0cnVjdGlvblNldCwKLSAgICAgICAgICAgIGludCBkZXhvcHROZWVkZWQsIGludCBkZXhGbGFncykgewotICAgICAgICByZXR1cm4gZGV4b3B0KGFwa1BhdGgsIHVpZCwgIioiLCBpbnN0cnVjdGlvblNldCwgZGV4b3B0TmVlZGVkLAotICAgICAgICAgICAgICAgIG51bGwgLypvdXRwdXRQYXRoKi8sIGRleEZsYWdzKTsKKyAgICBwdWJsaWMgU3RyaW5nIGV4ZWN1dGVGb3JSZXN1bHQoU3RyaW5nIGNtZCwgT2JqZWN0Li4uIGFyZ3MpCisgICAgICAgICAgICB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoY21kKTsKKyAgICAgICAgZm9yIChPYmplY3QgYXJnIDogYXJncykgeworICAgICAgICAgICAgU3RyaW5nIGVzY2FwZWQ7CisgICAgICAgICAgICBpZiAoYXJnID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBlc2NhcGVkID0gIiI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVzY2FwZWQgPSBTdHJpbmcudmFsdWVPZihhcmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVzY2FwZWQuaW5kZXhPZignXDAnKSAhPSAtMSB8fCBlc2NhcGVkLmluZGV4T2YoJyAnKSAhPSAtMSB8fCAiISIuZXF1YWxzKGVzY2FwZWQpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluc3RhbGxlckV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJJbnZhbGlkIGFyZ3VtZW50IHdoaWxlIGV4ZWN1dGluZyAiICsgY21kICsgIiAiICsgQXJyYXlzLnRvU3RyaW5nKGFyZ3MpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShlc2NhcGVkKSkgeworICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAiISI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpLmFwcGVuZChlc2NhcGVkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJhbnNhY3QoYnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgaW50IGRleG9wdChTdHJpbmcgYXBrUGF0aCwgaW50IHVpZCwgU3RyaW5nIHBrZ05hbWUsIFN0cmluZyBpbnN0cnVjdGlvblNldCwKLSAgICAgICAgICAgIGludCBkZXhvcHROZWVkZWQsIFN0cmluZyBvdXRwdXRQYXRoLCBpbnQgZGV4RmxhZ3MpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImRleG9wdCIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChhcGtQYXRoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodWlkKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQocGtnTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGluc3RydWN0aW9uU2V0KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZGV4b3B0TmVlZGVkKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQob3V0cHV0UGF0aCAhPSBudWxsID8gb3V0cHV0UGF0aCA6ICIhIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRleEZsYWdzKTsKLSAgICAgICAgcmV0dXJuIGV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKKyAgICBwdWJsaWMgdm9pZCBkZXhvcHQoU3RyaW5nIGFwa1BhdGgsIGludCB1aWQsIFN0cmluZyBpbnN0cnVjdGlvblNldCwgaW50IGRleG9wdE5lZWRlZCwKKyAgICAgICAgICAgIGludCBkZXhGbGFncykgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIGRleG9wdChhcGtQYXRoLCB1aWQsICIqIiwgaW5zdHJ1Y3Rpb25TZXQsIGRleG9wdE5lZWRlZCwgbnVsbCAvKiBvdXRwdXRQYXRoICovLCBkZXhGbGFncyk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGV4b3B0KFN0cmluZyBhcGtQYXRoLCBpbnQgdWlkLCBTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIGluc3RydWN0aW9uU2V0LAorICAgICAgICAgICAgaW50IGRleG9wdE5lZWRlZCwgU3RyaW5nIG91dHB1dFBhdGgsIGludCBkZXhGbGFncykgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIGV4ZWN1dGUoImRleG9wdCIsIGFwa1BhdGgsIHVpZCwgcGtnTmFtZSwgaW5zdHJ1Y3Rpb25TZXQsIGRleG9wdE5lZWRlZCwgb3V0cHV0UGF0aCwKKyAgICAgICAgICAgICAgICBkZXhGbGFncyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGNvbm5lY3QoKSB7CkBAIC0yMjcsMTEgKzI0MCwxOSBAQAogCiAgICAgcHVibGljIHZvaWQgd2FpdEZvckNvbm5lY3Rpb24oKSB7CiAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGlmIChleGVjdXRlKCJwaW5nIikgPj0gMCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBleGVjdXRlKCJwaW5nIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNsb2cudyhUQUcsICJpbnN0YWxsZCBub3QgcmVhZHkiKTsKICAgICAgICAgICAgIFN5c3RlbUNsb2NrLnNsZWVwKDEwMDApOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBJbnN0YWxsZXJFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworICAgICAgICBwdWJsaWMgSW5zdGFsbGVyRXhjZXB0aW9uKFN0cmluZyBkZXRhaWxNZXNzYWdlKSB7CisgICAgICAgICAgICBzdXBlcihkZXRhaWxNZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGUuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGUuamF2YQppbmRleCA4MTg2Mzc4Li5kMjNmMjZkIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZS5qYXZhCkBAIC0xNDUsOCArMTQ1LDkgQEAKICAgICBuYXRpdmUgcHJpdmF0ZSBzdGF0aWMgaW50IG5hdGl2ZUZvcmtTeXN0ZW1TZXJ2ZXIoaW50IHVpZCwgaW50IGdpZCwgaW50W10gZ2lkcywgaW50IGRlYnVnRmxhZ3MsCiAgICAgICAgICAgICBpbnRbXVtdIHJsaW1pdHMsIGxvbmcgcGVybWl0dGVkQ2FwYWJpbGl0aWVzLCBsb25nIGVmZmVjdGl2ZUNhcGFiaWxpdGllcyk7CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGxQb3N0Rm9ya0NoaWxkSG9va3MoaW50IGRlYnVnRmxhZ3MsIFN0cmluZyBpbnN0cnVjdGlvblNldCkgewotICAgICAgICBWTV9IT09LUy5wb3N0Rm9ya0NoaWxkKGRlYnVnRmxhZ3MsIGluc3RydWN0aW9uU2V0KTsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNhbGxQb3N0Rm9ya0NoaWxkSG9va3MoaW50IGRlYnVnRmxhZ3MsIGJvb2xlYW4gaXNTeXN0ZW1TZXJ2ZXIsCisgICAgICAgICAgICBTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQpIHsKKyAgICAgICAgVk1fSE9PS1MucG9zdEZvcmtDaGlsZChkZWJ1Z0ZsYWdzLCBpc1N5c3RlbVNlcnZlciwgaW5zdHJ1Y3Rpb25TZXQpOwogICAgIH0KIAogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZUluaXQuamF2YQppbmRleCA4ZTMxOGEyLi5lZWNjMGVlIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvb3MvWnlnb3RlSW5pdC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9vcy9aeWdvdGVJbml0LmphdmEKQEAgLTM3LDYgKzM3LDggQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXdGYWN0b3J5OwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSW5zdGFsbGVyQ29ubmVjdGlvbi5JbnN0YWxsZXJFeGNlcHRpb247CisKIGltcG9ydCBkYWx2aWsuc3lzdGVtLkRleEZpbGU7CiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5QYXRoQ2xhc3NMb2FkZXI7CiBpbXBvcnQgZGFsdmlrLnN5c3RlbS5WTVJ1bnRpbWU7CkBAIC01MDIsOCArNTA0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXhvcHROZWVkZWQsIDAgLypkZXhGbGFncyovKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIHN0YXJ0aW5nIHN5c3RlbV9zZXJ2ZXIiLCBpb2UpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiB8IEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3Igc3RhcnRpbmcgc3lzdGVtX3NlcnZlciIsIGUpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaW5zdGFsbGVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgfQpAQCAtNTM0LDcgKzUzNiw3IEBACiAgICAgICAgIFN0cmluZyBhcmdzW10gPSB7CiAgICAgICAgICAgICAiLS1zZXR1aWQ9MTAwMCIsCiAgICAgICAgICAgICAiLS1zZXRnaWQ9MTAwMCIsCi0gICAgICAgICAgICAiLS1zZXRncm91cHM9MTAwMSwxMDAyLDEwMDMsMTAwNCwxMDA1LDEwMDYsMTAwNywxMDA4LDEwMDksMTAxMCwxMDE4LDEwMjEsMTAzMiwzMDAxLDMwMDIsMzAwMywzMDA2LDMwMDcsMzAwOSIsCisgICAgICAgICAgICAiLS1zZXRncm91cHM9MTAwMSwxMDAyLDEwMDMsMTAwNCwxMDA1LDEwMDYsMTAwNywxMDA4LDEwMDksMTAxMCwxMDE4LDEwMjEsMTAzMiwzMDAxLDMwMDIsMzAwMywzMDA2LDMwMDcsMzAwOSwzMDEwIiwKICAgICAgICAgICAgICItLWNhcGFiaWxpdGllcz0iICsgY2FwYWJpbGl0aWVzICsgIiwiICsgY2FwYWJpbGl0aWVzLAogICAgICAgICAgICAgIi0tbmljZS1uYW1lPXN5c3RlbV9zZXJ2ZXIiLAogICAgICAgICAgICAgIi0tcnVudGltZS1hcmdzIiwKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvQmFja2Ryb3BGcmFtZVJlbmRlcmVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L0JhY2tkcm9wRnJhbWVSZW5kZXJlci5qYXZhCmluZGV4IDc1Y2E2MzkuLmRlNTRkOTYgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvQmFja2Ryb3BGcmFtZVJlbmRlcmVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9CYWNrZHJvcEZyYW1lUmVuZGVyZXIuamF2YQpAQCAtNjMsMTcgKzYzLDE4IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1SZXBvcnROZXh0RHJhdzsKIAogICAgIHByaXZhdGUgRHJhd2FibGUgbUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGU7CisgICAgcHJpdmF0ZSBEcmF3YWJsZSBtVXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGU7CiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGU7CiAgICAgcHJpdmF0ZSBDb2xvckRyYXdhYmxlIG1TdGF0dXNCYXJDb2xvcjsKIAogICAgIHB1YmxpYyBCYWNrZHJvcEZyYW1lUmVuZGVyZXIoRGVjb3JWaWV3IGRlY29yVmlldywgVGhyZWFkZWRSZW5kZXJlciByZW5kZXJlciwgUmVjdCBpbml0aWFsQm91bmRzLAogICAgICAgICAgICAgRHJhd2FibGUgcmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUsIERyYXdhYmxlIGNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUsCi0gICAgICAgICAgICBpbnQgc3RhdHVzQmFyQ29sb3IpIHsKKyAgICAgICAgICAgIERyYXdhYmxlIHVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlLCBpbnQgc3RhdHVzQmFyQ29sb3IpIHsKICAgICAgICAgc2V0TmFtZSgiUmVzaXplRnJhbWUiKTsKIAogICAgICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKICAgICAgICAgb25SZXNvdXJjZXNMb2FkZWQoZGVjb3JWaWV3LCByZXNpemluZ0JhY2tncm91bmREcmF3YWJsZSwgY2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSwKLSAgICAgICAgICAgICAgICBzdGF0dXNCYXJDb2xvcik7CisgICAgICAgICAgICAgICAgdXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUsIHN0YXR1c0JhckNvbG9yKTsKIAogICAgICAgICAvLyBDcmVhdGUgYSByZW5kZXIgbm9kZSBmb3IgdGhlIGNvbnRlbnQgYW5kIGZyYW1lIGJhY2tkcm9wCiAgICAgICAgIC8vIHdoaWNoIGNhbiBiZSByZXNpemVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgY29udGVudC4KQEAgLTkyLDEwICs5MywxNSBAQAogICAgIH0KIAogICAgIHZvaWQgb25SZXNvdXJjZXNMb2FkZWQoRGVjb3JWaWV3IGRlY29yVmlldywgRHJhd2FibGUgcmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUsCi0gICAgICAgICAgICBEcmF3YWJsZSBjYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlRHJhd2FibGUsIGludCBzdGF0dXNCYXJDb2xvcikgeworICAgICAgICAgICAgRHJhd2FibGUgY2FwdGlvbkJhY2tncm91bmREcmF3YWJsZURyYXdhYmxlLCBEcmF3YWJsZSB1c2VyQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSwKKyAgICAgICAgICAgIGludCBzdGF0dXNCYXJDb2xvcikgewogICAgICAgICBtRGVjb3JWaWV3ID0gZGVjb3JWaWV3OwogICAgICAgICBtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUgPSByZXNpemluZ0JhY2tncm91bmREcmF3YWJsZTsKICAgICAgICAgbUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUgPSBjYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlRHJhd2FibGU7CisgICAgICAgIG1Vc2VyQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSA9IHVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlOworICAgICAgICBpZiAobUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgbUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUgPSBtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGU7CisgICAgICAgIH0KICAgICAgICAgaWYgKHN0YXR1c0JhckNvbG9yICE9IDApIHsKICAgICAgICAgICAgIG1TdGF0dXNCYXJDb2xvciA9IG5ldyBDb2xvckRyYXdhYmxlKHN0YXR1c0JhckNvbG9yKTsKICAgICAgICAgICAgIGFkZFN5c3RlbUJhck5vZGVJZk5lZWRlZCgpOwpAQCAtMjgxLDggKzI4NywxMCBAQAogCiAgICAgICAgIC8vIERyYXcgdGhlIGNhcHRpb24gYW5kIGNvbnRlbnQgYmFja2Ryb3BzIGluIHRvIG91ciByZW5kZXIgbm9kZS4KICAgICAgICAgRGlzcGxheUxpc3RDYW52YXMgY2FudmFzID0gbUZyYW1lQW5kQmFja2Ryb3BOb2RlLnN0YXJ0KHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZS5zZXRCb3VuZHMoMCwgMCwgbGVmdCArIHdpZHRoLCB0b3AgKyBtTGFzdENhcHRpb25IZWlnaHQpOwotICAgICAgICBtQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZS5kcmF3KGNhbnZhcyk7CisgICAgICAgIGZpbmFsIERyYXdhYmxlIGRyYXdhYmxlID0gbVVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlICE9IG51bGwKKyAgICAgICAgICAgICAgICA/IG1Vc2VyQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSA6IG1DYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlOworICAgICAgICBkcmF3YWJsZS5zZXRCb3VuZHMoMCwgMCwgbGVmdCArIHdpZHRoLCB0b3AgKyBtTGFzdENhcHRpb25IZWlnaHQpOworICAgICAgICBkcmF3YWJsZS5kcmF3KGNhbnZhcyk7CiAKICAgICAgICAgLy8gVGhlIGJhY2tkcm9wOiBjbGVhciBldmVyeXRoaW5nIHdpdGggdGhlIGJhY2tncm91bmQuIENsaXBwaW5nIGlzIGRvbmUgZWxzZXdoZXJlLgogICAgICAgICBtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUuc2V0Qm91bmRzKDAsIG1MYXN0Q2FwdGlvbkhlaWdodCwgbGVmdCArIHdpZHRoLCB0b3AgKyBoZWlnaHQpOwpAQCAtMzI0LDQgKzMzMiw4IEBACiAgICAgICAgICAgICBtQ2hvcmVvZ3JhcGhlci5wb3N0RnJhbWVDYWxsYmFjayh0aGlzKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQgc2V0VXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUoRHJhd2FibGUgdXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUpIHsKKyAgICAgICAgbVVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlID0gdXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9EZWNvclZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvRGVjb3JWaWV3LmphdmEKaW5kZXggNTMxYmEyZi4uN2FlMGVmYiAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9EZWNvclZpZXcuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L0RlY29yVmlldy5qYXZhCkBAIC0xNyw2ICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeTsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LlBob25lV2luZG93LlBhbmVsRmVhdHVyZVN0YXRlOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5QaG9uZVdpbmRvdy5QaG9uZVdpbmRvd01lbnVDYWxsYmFjazsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LkZsb2F0aW5nQWN0aW9uTW9kZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3LlJvb3RWaWV3U3VyZmFjZVRha2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuU3RhbmRhbG9uZUFjdGlvbk1vZGU7CkBAIC0yNyw2ICsyOSw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkRlY29yQ2FwdGlvblZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkZsb2F0aW5nVG9vbGJhcjsKIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwpAQCAtNDcsNiArNTEsNyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5HcmF2aXR5OwogaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dFF1ZXVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEdyb3VwOwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CkBAIC02NywxOSArNzIsMjQgQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Qb3B1cFdpbmRvdzsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLklOVkFMSURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9QT1JUUkFJVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWMuQVRfTU9TVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWMuZ2V0TW9kZTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuVmlld0dyb3VwLkxheW91dFBhcmFtcy5XUkFQX0NPTlRFTlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3cuREVDT1JfQ0FQVElPTl9TSEFERV9EQVJLOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93LkRFQ09SX0NBUFRJT05fU0hBREVfTElHSFQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0RSQVdTX1NZU1RFTV9CQVJfQkFDS0dST1VORFM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX0ZVTExTQ1JFRU47CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1RSQU5TTFVDRU5UX05BVklHQVRJT047CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1RSQU5TTFVDRU5UX1NUQVRVUzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT047CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0JBU0VfQVBQTElDQVRJT047CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5QaG9uZVdpbmRvdy5GRUFUVVJFX09QVElPTlNfUEFORUw7CiAKIC8qKiBAaGlkZSAqLwogcHVibGljIGNsYXNzIERlY29yVmlldyBleHRlbmRzIEZyYW1lTGF5b3V0IGltcGxlbWVudHMgUm9vdFZpZXdTdXJmYWNlVGFrZXIsIFdpbmRvd0NhbGxiYWNrcyB7CkBAIC0xODQsMTEgKzE5NCwxNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1XaW5kb3dSZXNpemVDYWxsYmFja3NBZGRlZCA9IGZhbHNlOwogCi0gICAgQmFja2Ryb3BGcmFtZVJlbmRlcmVyIG1CYWNrZHJvcEZyYW1lUmVuZGVyZXIgPSBudWxsOworICAgIHByaXZhdGUgQmFja2Ryb3BGcmFtZVJlbmRlcmVyIG1CYWNrZHJvcEZyYW1lUmVuZGVyZXIgPSBudWxsOwogICAgIHByaXZhdGUgRHJhd2FibGUgbVJlc2l6aW5nQmFja2dyb3VuZERyYXdhYmxlOwogICAgIHByaXZhdGUgRHJhd2FibGUgbUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGU7CisgICAgcHJpdmF0ZSBEcmF3YWJsZSBtVXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGU7CiAKLSAgICBEZWNvclZpZXcoQ29udGV4dCBjb250ZXh0LCBpbnQgZmVhdHVyZUlkLCBQaG9uZVdpbmRvdyB3aW5kb3cpIHsKKyAgICBwcml2YXRlIGZsb2F0IG1BdmFpbGFibGVXaWR0aDsKKworICAgIFN0cmluZyBtTG9nVGFnID0gVEFHOworCisgICAgRGVjb3JWaWV3KENvbnRleHQgY29udGV4dCwgaW50IGZlYXR1cmVJZCwgUGhvbmVXaW5kb3cgd2luZG93LAorICAgICAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgcGFyYW1zKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQpOwogICAgICAgICBtRmVhdHVyZUlkID0gZmVhdHVyZUlkOwogCkBAIC0yMDQsNyArMjIwLDExIEBACiAgICAgICAgIG1TZW1pVHJhbnNwYXJlbnRTdGF0dXNCYXJDb2xvciA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgUi5jb2xvci5zeXN0ZW1fYmFyX2JhY2tncm91bmRfc2VtaV90cmFuc3BhcmVudCwgbnVsbCAvKiB0aGVtZSAqLyk7CiAKKyAgICAgICAgdXBkYXRlQXZhaWxhYmxlV2lkdGgoKTsKKwogICAgICAgICBzZXRXaW5kb3cod2luZG93KTsKKworICAgICAgICB1cGRhdGVMb2dUYWcocGFyYW1zKTsKICAgICB9CiAKICAgICB2b2lkIHNldEJhY2tncm91bmRGYWxsYmFjayhpbnQgcmVzSWQpIHsKQEAgLTQwMiw3ICs0MjIsNyBAQAogCiAgICAgICAgIGlmIChtRmVhdHVyZUlkID49IDApIHsKICAgICAgICAgICAgIGlmIChhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKLSAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJXYXRjaGlpbmchIik7CisgICAgICAgICAgICAgICAgTG9nLmkobUxvZ1RhZywgIldhdGNoaWluZyEiKTsKICAgICAgICAgICAgICAgICBtV2F0Y2hpbmdGb3JNZW51ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtRG93blkgPSAoaW50KSBldmVudC5nZXRZKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDE1LDcgKzQzNSw3IEBACiAgICAgICAgICAgICBpbnQgeSA9IChpbnQpZXZlbnQuZ2V0WSgpOwogICAgICAgICAgICAgaWYgKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRSkgewogICAgICAgICAgICAgICAgIGlmICh5ID4gKG1Eb3duWSszMCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiQ2xvc2luZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmkobUxvZ1RhZywgIkNsb3NpbmchIik7CiAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3cuY2xvc2VQYW5lbChtRmVhdHVyZUlkKTsKICAgICAgICAgICAgICAgICAgICAgbVdhdGNoaW5nRm9yTWVudSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQyNywxMyArNDQ3LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICAvL0xvZy5pKFRBRywgIkludGVyY2VwdDogYWN0aW9uPSIgKyBhY3Rpb24gKyAiIHk9IiArIGV2ZW50LmdldFkoKQorICAgICAgICAvL0xvZy5pKG1Mb2dUYWcsICJJbnRlcmNlcHQ6IGFjdGlvbj0iICsgYWN0aW9uICsgIiB5PSIgKyBldmVudC5nZXRZKCkKICAgICAgICAgLy8gICAgICAgICsgIiAoaW4gIiArIGdldEhlaWdodCgpICsgIikiKTsKIAogICAgICAgICBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOKSB7CiAgICAgICAgICAgICBpbnQgeSA9IChpbnQpZXZlbnQuZ2V0WSgpOwogICAgICAgICAgICAgaWYgKHkgPj0gKGdldEhlaWdodCgpLTUpICYmICFtV2luZG93Lmhhc0NoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJXYXRjaGluZyEiKTsKKyAgICAgICAgICAgICAgICBMb2cuaShtTG9nVGFnLCAiV2F0Y2hpbmchIik7CiAgICAgICAgICAgICAgICAgbVdhdGNoaW5nRm9yTWVudSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDYsNyArNDY2LDcgQEAKICAgICAgICAgaW50IHkgPSAoaW50KWV2ZW50LmdldFkoKTsKICAgICAgICAgaWYgKGFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRSkgewogICAgICAgICAgICAgaWYgKHkgPCAoZ2V0SGVpZ2h0KCktMzApKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiT3BlbmluZyEiKTsKKyAgICAgICAgICAgICAgICBMb2cuaShtTG9nVGFnLCAiT3BlbmluZyEiKTsKICAgICAgICAgICAgICAgICBtV2luZG93Lm9wZW5QYW5lbChXaW5kb3cuRkVBVFVSRV9PUFRJT05TX1BBTkVMLCBuZXcgS2V5RXZlbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICBLZXlFdmVudC5BQ1RJT05fRE9XTiwgS2V5RXZlbnQuS0VZQ09ERV9NRU5VKSk7CiAgICAgICAgICAgICAgICAgbVdhdGNoaW5nRm9yTWVudSA9IGZhbHNlOwpAQCAtNTM3LDE1ICs1NTcsMTUgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewogICAgICAgICBmaW5hbCBEaXNwbGF5TWV0cmljcyBtZXRyaWNzID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gaXNQb3J0cmFpdCA9IG1ldHJpY3Mud2lkdGhQaXhlbHMgPCBtZXRyaWNzLmhlaWdodFBpeGVsczsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpc1BvcnRyYWl0ID0KKyAgICAgICAgICAgICAgICBnZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkub3JpZW50YXRpb24gPT0gT1JJRU5UQVRJT05fUE9SVFJBSVQ7CiAKICAgICAgICAgZmluYWwgaW50IHdpZHRoTW9kZSA9IGdldE1vZGUod2lkdGhNZWFzdXJlU3BlYyk7CiAgICAgICAgIGZpbmFsIGludCBoZWlnaHRNb2RlID0gZ2V0TW9kZShoZWlnaHRNZWFzdXJlU3BlYyk7CiAKICAgICAgICAgYm9vbGVhbiBmaXhlZFdpZHRoID0gZmFsc2U7CiAgICAgICAgIGlmICh3aWR0aE1vZGUgPT0gQVRfTU9TVCkgewotICAgICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSB0dncgPSBpc1BvcnRyYWl0ID8gbVdpbmRvdy5tRml4ZWRXaWR0aE1pbm9yCi0gICAgICAgICAgICAgICAgICAgIDogbVdpbmRvdy5tRml4ZWRXaWR0aE1ham9yOworICAgICAgICAgICAgZmluYWwgVHlwZWRWYWx1ZSB0dncgPSBpc1BvcnRyYWl0ID8gbVdpbmRvdy5tRml4ZWRXaWR0aE1pbm9yIDogbVdpbmRvdy5tRml4ZWRXaWR0aE1ham9yOwogICAgICAgICAgICAgaWYgKHR2dyAhPSBudWxsICYmIHR2dy50eXBlICE9IFR5cGVkVmFsdWUuVFlQRV9OVUxMKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHc7CiAgICAgICAgICAgICAgICAgaWYgKHR2dy50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04pIHsKQEAgLTYxNyw3ICs2MzcsNyBAQAogICAgICAgICAgICAgICAgIGlmICh0di50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9ESU1FTlNJT04pIHsKICAgICAgICAgICAgICAgICAgICAgbWluID0gKGludCl0di5nZXREaW1lbnNpb24obWV0cmljcyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0di50eXBlID09IFR5cGVkVmFsdWUuVFlQRV9GUkFDVElPTikgewotICAgICAgICAgICAgICAgICAgICBtaW4gPSAoaW50KXR2LmdldEZyYWN0aW9uKG1ldHJpY3Mud2lkdGhQaXhlbHMsIG1ldHJpY3Mud2lkdGhQaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBtaW4gPSAoaW50KXR2LmdldEZyYWN0aW9uKG1BdmFpbGFibGVXaWR0aCwgbUF2YWlsYWJsZVdpZHRoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtaW4gPSAwOwogICAgICAgICAgICAgICAgIH0KQEAgLTY4MSw5ICs3MDEsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJldXNlIHRoZSBjb250ZXh0IG1lbnUgYnVpbGRlci4KKyAgICAgICAgZmluYWwgUGhvbmVXaW5kb3dNZW51Q2FsbGJhY2sgY2FsbGJhY2sgPSBtV2luZG93Lm1Db250ZXh0TWVudUNhbGxiYWNrOwogICAgICAgICBpZiAobVdpbmRvdy5tQ29udGV4dE1lbnUgPT0gbnVsbCkgewogICAgICAgICAgICAgbVdpbmRvdy5tQ29udGV4dE1lbnUgPSBuZXcgQ29udGV4dE1lbnVCdWlsZGVyKGdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICBtV2luZG93Lm1Db250ZXh0TWVudS5zZXRDYWxsYmFjayhtV2luZG93Lm1Db250ZXh0TWVudUNhbGxiYWNrKTsKKyAgICAgICAgICAgIG1XaW5kb3cubUNvbnRleHRNZW51LnNldENhbGxiYWNrKGNhbGxiYWNrKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1XaW5kb3cubUNvbnRleHRNZW51LmNsZWFyQWxsKCk7CiAgICAgICAgIH0KQEAgLTY5Niw3ICs3MTcsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChoZWxwZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgaGVscGVyLnNldFByZXNlbnRlckNhbGxiYWNrKG1XaW5kb3cubUNvbnRleHRNZW51Q2FsbGJhY2spOworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGRpYWxvZywgdGhlIGNhbGxiYWNrIG5lZWRzIHRvIGhhbmRsZSBzaG93aW5nCisgICAgICAgICAgICAvLyBzdWItbWVudXMuIEVpdGhlciB3YXksIHRoZSBjYWxsYmFjayBpcyByZXF1aXJlZCBmb3IgcHJvcGFnYXRpbmcKKyAgICAgICAgICAgIC8vIHNlbGVjdGlvbiB0byBDb250ZXh0Lm9uQ29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoKS4KKyAgICAgICAgICAgIGNhbGxiYWNrLnNldFNob3dEaWFsb2dGb3JTdWJtZW51KCFpc1BvcHVwKTsKKyAgICAgICAgICAgIGhlbHBlci5zZXRQcmVzZW50ZXJDYWxsYmFjayhjYWxsYmFjayk7CiAgICAgICAgIH0KIAogICAgICAgICBtV2luZG93Lm1Db250ZXh0TWVudUhlbHBlciA9IGhlbHBlcjsKQEAgLTExODUsNyArMTIxMCw3IEBACiAgICAgICAgIGludmFsaWRhdGUoKTsKIAogICAgICAgICBpbnQgb3BhY2l0eSA9IFBpeGVsRm9ybWF0Lk9QQVFVRTsKLSAgICAgICAgaWYgKEFjdGl2aXR5TWFuYWdlci5TdGFja0lkLmhhc1dpbmRvd1NoYWRvdyhtU3RhY2tJZCkpIHsKKyAgICAgICAgaWYgKFN0YWNrSWQuaGFzV2luZG93U2hhZG93KG1TdGFja0lkKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHdpbmRvdyBoYXMgYSBzaGFkb3csIGl0IG11c3QgYmUgdHJhbnNsdWNlbnQuCiAgICAgICAgICAgICBvcGFjaXR5ID0gUGl4ZWxGb3JtYXQuVFJBTlNMVUNFTlQ7CiAgICAgICAgIH0gZWxzZXsKQEAgLTEyMDYsNyArMTIzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGludCBmb3AgPSBmZy5nZXRPcGFjaXR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGludCBib3AgPSBiZy5nZXRPcGFjaXR5KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkJhY2tncm91bmQgb3BhY2l0eTogIiArIGJvcCArICIsIEZyYW1lIG9wYWNpdHk6ICIgKyBmb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLnYobUxvZ1RhZywgIkJhY2tncm91bmQgb3BhY2l0eTogIiArIGJvcCArICIsIEZyYW1lIG9wYWNpdHk6ICIgKyBmb3ApOwogICAgICAgICAgICAgICAgICAgICBpZiAoZm9wID09IFBpeGVsRm9ybWF0Lk9QQVFVRSB8fCBib3AgPT0gUGl4ZWxGb3JtYXQuT1BBUVVFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5ID0gUGl4ZWxGb3JtYXQuT1BBUVVFOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcCA9PSBQaXhlbEZvcm1hdC5VTktOT1dOKSB7CkBAIC0xMjIxLDE2ICsxMjQ2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIGZyYW1lIHdpdGggcGFkZGluZy4uLiB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCBpZiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gZnJhbWUgYW5kIGJhY2tncm91bmQgdG9nZXRoZXIgd2lsbCBkcmF3IGFsbCBwaXhlbHMuCiAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIlBhZGRpbmc6ICIgKyBtRnJhbWVQYWRkaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KG1Mb2dUYWcsICJQYWRkaW5nOiAiICsgbUZyYW1lUGFkZGluZyk7CiAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSBQaXhlbEZvcm1hdC5UUkFOU0xVQ0VOVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZmFsc2UpCi0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiQmFja2dyb3VuZDogIiArIGJnICsgIiwgRnJhbWU6ICIgKyBmZyk7CisgICAgICAgICAgICAgICAgTG9nLnYobUxvZ1RhZywgIkJhY2tncm91bmQ6ICIgKyBiZyArICIsIEZyYW1lOiAiICsgZmcpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZhbHNlKQotICAgICAgICAgICAgTG9nLnYoVEFHLCAiU2VsZWN0ZWQgZGVmYXVsdCBvcGFjaXR5OiAiICsgb3BhY2l0eSk7CisgICAgICAgICAgICBMb2cudihtTG9nVGFnLCAiU2VsZWN0ZWQgZGVmYXVsdCBvcGFjaXR5OiAiICsgb3BhY2l0eSk7CiAKICAgICAgICAgbURlZmF1bHRPcGFjaXR5ID0gb3BhY2l0eTsKICAgICAgICAgaWYgKG1GZWF0dXJlSWQgPCAwKSB7CkBAIC0xNTY4LDMwICsxNTkzLDM5IEBACiAKICAgICB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQoKSB7CiAgICAgICAgIGludCB3b3Jrc3BhY2VJZCA9IGdldFN0YWNrSWQoKTsKLSAgICAgICAgaWYgKG1EZWNvckNhcHRpb25WaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChtU3RhY2tJZCAhPSB3b3Jrc3BhY2VJZCkgewotICAgICAgICAgICAgICAgIG1TdGFja0lkID0gd29ya3NwYWNlSWQ7CisgICAgICAgIGlmIChtU3RhY2tJZCAhPSB3b3Jrc3BhY2VJZCkgeworICAgICAgICAgICAgbVN0YWNrSWQgPSB3b3Jrc3BhY2VJZDsKKyAgICAgICAgICAgIGlmIChtRGVjb3JDYXB0aW9uVmlldyA9PSBudWxsICYmIFN0YWNrSWQuaGFzV2luZG93RGVjb3IobVN0YWNrSWQpKSB7CisgICAgICAgICAgICAgICAgLy8gQ29uZmlndXJhdGlvbiBub3cgcmVxdWlyZXMgYSBjYXB0aW9uLgorICAgICAgICAgICAgICAgIGZpbmFsIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gbVdpbmRvdy5nZXRMYXlvdXRJbmZsYXRlcigpOworICAgICAgICAgICAgICAgIG1EZWNvckNhcHRpb25WaWV3ID0gY3JlYXRlRGVjb3JDYXB0aW9uVmlldyhpbmZsYXRlcik7CisgICAgICAgICAgICAgICAgaWYgKG1EZWNvckNhcHRpb25WaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EZWNvckNhcHRpb25WaWV3LmdldFBhcmVudCgpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFZpZXcobURlY29yQ2FwdGlvblZpZXcsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zKE1BVENIX1BBUkVOVCwgTUFUQ0hfUEFSRU5UKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVmlldyhtQ29udGVudFJvb3QpOworICAgICAgICAgICAgICAgICAgICBtRGVjb3JDYXB0aW9uVmlldy5hZGRWaWV3KG1Db250ZW50Um9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmlld0dyb3VwLk1hcmdpbkxheW91dFBhcmFtcyhNQVRDSF9QQVJFTlQsIE1BVENIX1BBUkVOVCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobURlY29yQ2FwdGlvblZpZXcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgdG8gY2hhbmdlIHRoZSBraW5kIG9mIHN1cmZhY2UgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgbURlY29yQ2FwdGlvblZpZXcub25Db25maWd1cmF0aW9uQ2hhbmdlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5TdGFja0lkLmhhc1dpbmRvd0RlY29yKG1TdGFja0lkKSk7Ci0gICAgICAgICAgICAgICAgZW5hYmxlQ2FwdGlvbihBY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5oYXNXaW5kb3dEZWNvcih3b3Jrc3BhY2VJZCkpOworICAgICAgICAgICAgICAgIG1EZWNvckNhcHRpb25WaWV3Lm9uQ29uZmlndXJhdGlvbkNoYW5nZWQoU3RhY2tJZC5oYXNXaW5kb3dEZWNvcihtU3RhY2tJZCkpOworICAgICAgICAgICAgICAgIGVuYWJsZUNhcHRpb24oU3RhY2tJZC5oYXNXaW5kb3dEZWNvcih3b3Jrc3BhY2VJZCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHVwZGF0ZUF2YWlsYWJsZVdpZHRoKCk7CiAgICAgICAgIGluaXRpYWxpemVFbGV2YXRpb24oKTsKICAgICB9CiAKLSAgICBWaWV3IG9uUmVzb3VyY2VzTG9hZGVkKExheW91dEluZmxhdGVyIGluZmxhdGVyLCBpbnQgbGF5b3V0UmVzb3VyY2UpIHsKKyAgICB2b2lkIG9uUmVzb3VyY2VzTG9hZGVkKExheW91dEluZmxhdGVyIGluZmxhdGVyLCBpbnQgbGF5b3V0UmVzb3VyY2UpIHsKICAgICAgICAgbVN0YWNrSWQgPSBnZXRTdGFja0lkKCk7CiAKLSAgICAgICAgbVJlc2l6aW5nQmFja2dyb3VuZERyYXdhYmxlID0gZ2V0UmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUoCi0gICAgICAgICAgICAgICAgbVdpbmRvdy5tQmFja2dyb3VuZFJlc291cmNlLCBtV2luZG93Lm1CYWNrZ3JvdW5kRmFsbGJhY2tSZXNvdXJjZSk7Ci0gICAgICAgIG1DYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlID0KLSAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5kZWNvcl9jYXB0aW9uX3RpdGxlX2ZvY3VzZWQpOwotCiAgICAgICAgIGlmIChtQmFja2Ryb3BGcmFtZVJlbmRlcmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGxvYWRCYWNrZ3JvdW5kRHJhd2FibGVzSWZOZWVkZWQoKTsKICAgICAgICAgICAgIG1CYWNrZHJvcEZyYW1lUmVuZGVyZXIub25SZXNvdXJjZXNMb2FkZWQoCiAgICAgICAgICAgICAgICAgICAgIHRoaXMsIG1SZXNpemluZ0JhY2tncm91bmREcmF3YWJsZSwgbUNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUsCi0gICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRDb2xvcihtU3RhdHVzQ29sb3JWaWV3U3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbVVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlLCBnZXRDdXJyZW50Q29sb3IobVN0YXR1c0NvbG9yVmlld1N0YXRlKSk7CiAgICAgICAgIH0KIAogICAgICAgICBtRGVjb3JDYXB0aW9uVmlldyA9IGNyZWF0ZURlY29yQ2FwdGlvblZpZXcoaW5mbGF0ZXIpOwpAQCAtMTYwOCwxNyArMTY0MiwyNyBAQAogICAgICAgICB9CiAgICAgICAgIG1Db250ZW50Um9vdCA9IChWaWV3R3JvdXApIHJvb3Q7CiAgICAgICAgIGluaXRpYWxpemVFbGV2YXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHJvb3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGxvYWRCYWNrZ3JvdW5kRHJhd2FibGVzSWZOZWVkZWQoKSB7CisgICAgICAgIGlmIChtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUgPT0gbnVsbCkgeworICAgICAgICAgICAgbVJlc2l6aW5nQmFja2dyb3VuZERyYXdhYmxlID0gZ2V0UmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUoCisgICAgICAgICAgICAgICAgICAgIG1XaW5kb3cubUJhY2tncm91bmRSZXNvdXJjZSwgbVdpbmRvdy5tQmFja2dyb3VuZEZhbGxiYWNrUmVzb3VyY2UpOworICAgICAgICB9CisgICAgICAgIGlmIChtQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSA9PSBudWxsKSB7CisgICAgICAgICAgICBtQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSA9IGdldENvbnRleHQoKS5nZXREcmF3YWJsZSgKKyAgICAgICAgICAgICAgICAgICAgUi5kcmF3YWJsZS5kZWNvcl9jYXB0aW9uX3RpdGxlX2ZvY3VzZWQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gRnJlZSBmbG9hdGluZyBvdmVybGFwcGluZyB3aW5kb3dzIHJlcXVpcmUgYSBjYXB0aW9uLgogICAgIHByaXZhdGUgRGVjb3JDYXB0aW9uVmlldyBjcmVhdGVEZWNvckNhcHRpb25WaWV3KExheW91dEluZmxhdGVyIGluZmxhdGVyKSB7Ci0gICAgICAgIERlY29yQ2FwdGlvblZpZXcgRGVjb3JDYXB0aW9uVmlldyA9IG51bGw7Ci0gICAgICAgIGZvciAoaW50IGkgPSBnZXRDaGlsZENvdW50KCkgLSAxOyBpID49IDAgJiYgRGVjb3JDYXB0aW9uVmlldyA9PSBudWxsOyBpLS0pIHsKKyAgICAgICAgRGVjb3JDYXB0aW9uVmlldyBkZWNvckNhcHRpb25WaWV3ID0gbnVsbDsKKyAgICAgICAgZm9yIChpbnQgaSA9IGdldENoaWxkQ291bnQoKSAtIDE7IGkgPj0gMCAmJiBkZWNvckNhcHRpb25WaWV3ID09IG51bGw7IGktLSkgewogICAgICAgICAgICAgVmlldyB2aWV3ID0gZ2V0Q2hpbGRBdChpKTsKICAgICAgICAgICAgIGlmICh2aWV3IGluc3RhbmNlb2YgRGVjb3JDYXB0aW9uVmlldykgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvciB3YXMgbW9zdCBsaWtlbHkgc2F2ZWQgZnJvbSBhIHJlbGF1bmNoIC0gc28gcmV1c2UgaXQuCi0gICAgICAgICAgICAgICAgRGVjb3JDYXB0aW9uVmlldyA9IChEZWNvckNhcHRpb25WaWV3KSB2aWV3OworICAgICAgICAgICAgICAgIGRlY29yQ2FwdGlvblZpZXcgPSAoRGVjb3JDYXB0aW9uVmlldykgdmlldzsKICAgICAgICAgICAgICAgICByZW1vdmVWaWV3QXQoaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2MjYsMzEgKzE2NzAsNzUgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0FwcGxpY2F0aW9uID0gYXR0cnMudHlwZSA9PSBUWVBFX0JBU0VfQVBQTElDQVRJT04gfHwKICAgICAgICAgICAgICAgICBhdHRycy50eXBlID09IFRZUEVfQVBQTElDQVRJT047CiAgICAgICAgIC8vIE9ubHkgYSBub24gZmxvYXRpbmcgYXBwbGljYXRpb24gd2luZG93IG9uIG9uZSBvZiB0aGUgYWxsb3dlZCB3b3Jrc3BhY2VzIGNhbiBnZXQgYSBjYXB0aW9uCi0gICAgICAgIGlmICghbVdpbmRvdy5pc0Zsb2F0aW5nKCkgJiYgaXNBcHBsaWNhdGlvbgotICAgICAgICAgICAgICAgICYmIEFjdGl2aXR5TWFuYWdlci5TdGFja0lkLmhhc1dpbmRvd0RlY29yKG1TdGFja0lkKSkgeworICAgICAgICBpZiAoIW1XaW5kb3cuaXNGbG9hdGluZygpICYmIGlzQXBwbGljYXRpb24gJiYgU3RhY2tJZC5oYXNXaW5kb3dEZWNvcihtU3RhY2tJZCkpIHsKICAgICAgICAgICAgIC8vIERlcGVuZGVudCBvbiB0aGUgYnJpZ2h0bmVzcyBvZiB0aGUgdXNlZCB0aXRsZSB3ZSBlaXRoZXIgdXNlIHRoZQogICAgICAgICAgICAgLy8gZGFyayBvciB0aGUgbGlnaHQgYnV0dG9uIGZyYW1lLgotICAgICAgICAgICAgaWYgKERlY29yQ2FwdGlvblZpZXcgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICBUeXBlZFZhbHVlIHZhbHVlID0gbmV3IFR5cGVkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmdldFRoZW1lKCkucmVzb2x2ZUF0dHJpYnV0ZShSLmF0dHIuY29sb3JQcmltYXJ5LCB2YWx1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaW5mbGF0ZXIgPSBpbmZsYXRlci5mcm9tKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmIChDb2xvci5sdW1pbmFuY2UodmFsdWUuZGF0YSkgPCAwLjUpIHsKLSAgICAgICAgICAgICAgICAgICAgRGVjb3JDYXB0aW9uVmlldyA9IChEZWNvckNhcHRpb25WaWV3KSBpbmZsYXRlci5pbmZsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubGF5b3V0LmRlY29yX2NhcHRpb25fZGFyaywgbnVsbCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRGVjb3JDYXB0aW9uVmlldyA9IChEZWNvckNhcHRpb25WaWV3KSBpbmZsYXRlci5pbmZsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubGF5b3V0LmRlY29yX2NhcHRpb25fbGlnaHQsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWNvckNhcHRpb25WaWV3ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBkZWNvckNhcHRpb25WaWV3ID0gaW5mbGF0ZURlY29yQ2FwdGlvblZpZXcoaW5mbGF0ZXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgRGVjb3JDYXB0aW9uVmlldy5zZXRQaG9uZVdpbmRvdyhtV2luZG93LCB0cnVlIC8qc2hvd0RlY29yKi8pOworICAgICAgICAgICAgZGVjb3JDYXB0aW9uVmlldy5zZXRQaG9uZVdpbmRvdyhtV2luZG93LCB0cnVlIC8qc2hvd0RlY29yKi8pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgRGVjb3JDYXB0aW9uVmlldyA9IG51bGw7CisgICAgICAgICAgICBkZWNvckNhcHRpb25WaWV3ID0gbnVsbDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRlbGwgdGhlIGRlY29yIGlmIGl0IGhhcyBhIHZpc2libGUgY2FwdGlvbi4KLSAgICAgICAgZW5hYmxlQ2FwdGlvbihEZWNvckNhcHRpb25WaWV3ICE9IG51bGwpOwotICAgICAgICByZXR1cm4gRGVjb3JDYXB0aW9uVmlldzsKKyAgICAgICAgZW5hYmxlQ2FwdGlvbihkZWNvckNhcHRpb25WaWV3ICE9IG51bGwpOworICAgICAgICByZXR1cm4gZGVjb3JDYXB0aW9uVmlldzsKKyAgICB9CisKKyAgICBwcml2YXRlIERlY29yQ2FwdGlvblZpZXcgaW5mbGF0ZURlY29yQ2FwdGlvblZpZXcoTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIpIHsKKyAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgICAgICAvLyBXZSBtYWtlIGEgY29weSBvZiB0aGUgaW5mbGF0ZXIsIHNvIGl0IGhhcyB0aGUgcmlnaHQgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggaXQuCisgICAgICAgIGluZmxhdGVyID0gaW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKKyAgICAgICAgZmluYWwgRGVjb3JDYXB0aW9uVmlldyB2aWV3ID0gKERlY29yQ2FwdGlvblZpZXcpIGluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuZGVjb3JfY2FwdGlvbiwKKyAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgc2V0RGVjb3JDYXB0aW9uU2hhZGUoY29udGV4dCwgdmlldyk7CisgICAgICAgIHJldHVybiB2aWV3OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXREZWNvckNhcHRpb25TaGFkZShDb250ZXh0IGNvbnRleHQsIERlY29yQ2FwdGlvblZpZXcgdmlldykgeworICAgICAgICBmaW5hbCBpbnQgc2hhZGUgPSBtV2luZG93LmdldERlY29yQ2FwdGlvblNoYWRlKCk7CisgICAgICAgIHN3aXRjaCAoc2hhZGUpIHsKKyAgICAgICAgICAgIGNhc2UgREVDT1JfQ0FQVElPTl9TSEFERV9MSUdIVDoKKyAgICAgICAgICAgICAgICBzZXRMaWdodERlY29yQ2FwdGlvblNoYWRlKHZpZXcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBERUNPUl9DQVBUSU9OX1NIQURFX0RBUks6CisgICAgICAgICAgICAgICAgc2V0RGFya0RlY29yQ2FwdGlvblNoYWRlKHZpZXcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIFR5cGVkVmFsdWUgdmFsdWUgPSBuZXcgVHlwZWRWYWx1ZSgpOworICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0VGhlbWUoKS5yZXNvbHZlQXR0cmlidXRlKFIuYXR0ci5jb2xvclByaW1hcnksIHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAvLyBXZSBpbnZlcnQgdGhlIHNoYWRlIGRlcGVuZGluZyBvbiBicmlnaHRuZXNzIG9mIHRoZSB0aGVtZS4gRGFyayBzaGFkZSBmb3IgbGlnaHQKKyAgICAgICAgICAgICAgICAvLyB0aGVtZSBhbmQgdmljZSB2ZXJzYS4gVGhhbmtzIHRvIHRoaXMgdGhlIGJ1dHRvbnMgc2hvdWxkIGJlIHZpc2libGUgb24gdGhlCisgICAgICAgICAgICAgICAgLy8gYmFja2dyb3VuZC4KKyAgICAgICAgICAgICAgICBpZiAoQ29sb3IubHVtaW5hbmNlKHZhbHVlLmRhdGEpIDwgMC41KSB7CisgICAgICAgICAgICAgICAgICAgIHNldExpZ2h0RGVjb3JDYXB0aW9uU2hhZGUodmlldyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RGFya0RlY29yQ2FwdGlvblNoYWRlKHZpZXcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdXBkYXRlRGVjb3JDYXB0aW9uU2hhZGUoKSB7CisgICAgICAgIGlmIChtRGVjb3JDYXB0aW9uVmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXREZWNvckNhcHRpb25TaGFkZShnZXRDb250ZXh0KCksIG1EZWNvckNhcHRpb25WaWV3KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRMaWdodERlY29yQ2FwdGlvblNoYWRlKERlY29yQ2FwdGlvblZpZXcgdmlldykgeworICAgICAgICB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLm1heGltaXplX3dpbmRvdykuc2V0QmFja2dyb3VuZFJlc291cmNlKAorICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuZGVjb3JfbWF4aW1pemVfYnV0dG9uX2xpZ2h0KTsKKyAgICAgICAgdmlldy5maW5kVmlld0J5SWQoUi5pZC5jbG9zZV93aW5kb3cpLnNldEJhY2tncm91bmRSZXNvdXJjZSgKKyAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLmRlY29yX2Nsb3NlX2J1dHRvbl9saWdodCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldERhcmtEZWNvckNhcHRpb25TaGFkZShEZWNvckNhcHRpb25WaWV3IHZpZXcpIHsKKyAgICAgICAgdmlldy5maW5kVmlld0J5SWQoUi5pZC5tYXhpbWl6ZV93aW5kb3cpLnNldEJhY2tncm91bmRSZXNvdXJjZSgKKyAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLmRlY29yX21heGltaXplX2J1dHRvbl9kYXJrKTsKKyAgICAgICAgdmlldy5maW5kVmlld0J5SWQoUi5pZC5jbG9zZV93aW5kb3cpLnNldEJhY2tncm91bmRSZXNvdXJjZSgKKyAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLmRlY29yX2Nsb3NlX2J1dHRvbl9kYXJrKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE2NzYsNyArMTc2NCw3IEBACiAKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IHJlYWxseSBnZXQgaGVyZSBhcyB0aGUgYmFja2dyb3VuZCBmYWxsYmFjayBzaG91bGQgYmUgYWx3YXlzIGF2YWlsYWJsZSBzaW5jZQogICAgICAgICAvLyBpdCBpcyBkZWZhdWx0ZWQgYnkgdGhlIHN5c3RlbS4KLSAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGZpbmQgYmFja2dyb3VuZCBkcmF3YWJsZSBmb3IgUGhvbmVXaW5kb3c9IiArIG1XaW5kb3cpOworICAgICAgICBMb2cudyhtTG9nVGFnLCAiRmFpbGVkIHRvIGZpbmQgYmFja2dyb3VuZCBkcmF3YWJsZSBmb3IgUGhvbmVXaW5kb3c9IiArIG1XaW5kb3cpOwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKQEAgLTE2OTMsNyArMTc4MSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHdvcmtzcGFjZUlkID0gY2FsbGJhY2suZ2V0V2luZG93U3RhY2tJZCgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIGdldCB0aGUgd29ya3NwYWNlIElEIG9mIGEgUGhvbmVXaW5kb3cuIik7CisgICAgICAgICAgICAgICAgTG9nLmUobUxvZ1RhZywgIkZhaWxlZCB0byBnZXQgdGhlIHdvcmtzcGFjZSBJRCBvZiBhIFBob25lV2luZG93LiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICh3b3Jrc3BhY2VJZCA9PSBJTlZBTElEX1NUQUNLX0lEKSB7CkBAIC0xNzM1LDExICsxODIzLDEyIEBACiAgICAgICAgIGlmIChtQmFja2Ryb3BGcmFtZVJlbmRlcmVyICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBUaHJlYWRlZFJlbmRlcmVyIHJlbmRlcmVyID0gKFRocmVhZGVkUmVuZGVyZXIpIGdldEhhcmR3YXJlUmVuZGVyZXIoKTsKKyAgICAgICAgZmluYWwgVGhyZWFkZWRSZW5kZXJlciByZW5kZXJlciA9IGdldEhhcmR3YXJlUmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHJlbmRlcmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGxvYWRCYWNrZ3JvdW5kRHJhd2FibGVzSWZOZWVkZWQoKTsKICAgICAgICAgICAgIG1CYWNrZHJvcEZyYW1lUmVuZGVyZXIgPSBuZXcgQmFja2Ryb3BGcmFtZVJlbmRlcmVyKHRoaXMsIHJlbmRlcmVyLAogICAgICAgICAgICAgICAgICAgICBpbml0aWFsQm91bmRzLCBtUmVzaXppbmdCYWNrZ3JvdW5kRHJhd2FibGUsIG1DYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlLAotICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50Q29sb3IobVN0YXR1c0NvbG9yVmlld1N0YXRlKSk7CisgICAgICAgICAgICAgICAgICAgIG1Vc2VyQ2FwdGlvbkJhY2tncm91bmREcmF3YWJsZSwgZ2V0Q3VycmVudENvbG9yKG1TdGF0dXNDb2xvclZpZXdTdGF0ZSkpOwogCiAgICAgICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBzaGFkb3cgd2hpbGUgd2UgYXJlIHJlc2l6aW5nLiBTaGFkb3cgZHJhd2luZyB0YWtlcyBjb25zaWRlcmFibGUgdGltZS4KICAgICAgICAgICAgIC8vIElmIHdlIHdhbnQgdG8gZ2V0IHRoZSBzaGFkb3cgc2hvd24gd2hpbGUgcmVzaXppbmcsIHdlIHdvdWxkIG5lZWQgdG8gZWxldmF0ZSBhIG5ldwpAQCAtMTgwNSw3ICsxODk0LDcgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiB3YXNBZGp1c3RlZEZvclN0YWNrID0gbUVsZXZhdGlvbkFkanVzdGVkRm9yU3RhY2s7CiAgICAgICAgIC8vIERvIG5vdCB1c2UgYSBzaGFkb3cgd2hlbiB3ZSBhcmUgaW4gcmVzaXppbmcgbW9kZSAobUJhY2tkcm9wRnJhbWVSZW5kZXJlciBub3QgbnVsbCkKICAgICAgICAgLy8gc2luY2UgdGhlIHNoYWRvdyBpcyBib3VuZCB0byB0aGUgY29udGVudCBzaXplIGFuZCBub3QgdGhlIHRhcmdldCBzaXplLgotICAgICAgICBpZiAoQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuaGFzV2luZG93U2hhZG93KG1TdGFja0lkKSAmJiAhaXNSZXNpemluZygpKSB7CisgICAgICAgIGlmIChTdGFja0lkLmhhc1dpbmRvd1NoYWRvdyhtU3RhY2tJZCkgJiYgIWlzUmVzaXppbmcoKSkgewogICAgICAgICAgICAgZWxldmF0aW9uID0gaGFzV2luZG93Rm9jdXMoKSA/CiAgICAgICAgICAgICAgICAgICAgIERFQ09SX1NIQURPV19GT0NVU0VEX0hFSUdIVF9JTl9ESVAgOiBERUNPUl9TSEFET1dfVU5GT0NVU0VEX0hFSUdIVF9JTl9ESVA7CiAgICAgICAgICAgICAvLyBUT0RPKHNrdWhuZSk6IFJlbW92ZSB0aGlzIGlmIGNsYXVzZSBvbmNlIGIvMjI2NjgzODIgZ290IGZpeGVkLgpAQCAtMTg0OSw2ICsxOTM4LDQ0IEBACiAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VzKCkuZ2V0RGlzcGxheU1ldHJpY3MoKSk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUHJvdmlkZSBhbiBvdmVycmlkZSBvZiB0aGUgY2FwdGlvbiBiYWNrZ3JvdW5kIGRyYXdhYmxlLgorICAgICAqLworICAgIHZvaWQgc2V0VXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUoRHJhd2FibGUgZHJhd2FibGUpIHsKKyAgICAgICAgbVVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlID0gZHJhd2FibGU7CisgICAgICAgIGlmIChtQmFja2Ryb3BGcmFtZVJlbmRlcmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1CYWNrZHJvcEZyYW1lUmVuZGVyZXIuc2V0VXNlckNhcHRpb25CYWNrZ3JvdW5kRHJhd2FibGUoZHJhd2FibGUpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVMb2dUYWcoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgcGFyYW1zKSB7CisgICAgICAgIGZpbmFsIFN0cmluZ1tdIHNwbGl0ID0gcGFyYW1zLmdldFRpdGxlKCkudG9TdHJpbmcoKS5zcGxpdCgiXFwuIik7CisgICAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBtTG9nVGFnID0gVEFHICsgIlsiICsgc3BsaXRbc3BsaXQubGVuZ3RoIC0gMV0gKyAiXSI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQXZhaWxhYmxlV2lkdGgoKSB7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBnZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgbUF2YWlsYWJsZVdpZHRoID0gVHlwZWRWYWx1ZS5hcHBseURpbWVuc2lvbihUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9ESVAsCisgICAgICAgICAgICAgICAgcmVzLmdldENvbmZpZ3VyYXRpb24oKS5zY3JlZW5XaWR0aERwLCByZXMuZ2V0RGlzcGxheU1ldHJpY3MoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZXF1ZXN0S2V5Ym9hcmRTaG9ydGN1dHMoTGlzdDxLZXlib2FyZFNob3J0Y3V0R3JvdXA+IGxpc3QpIHsKKyAgICAgICAgZmluYWwgUGFuZWxGZWF0dXJlU3RhdGUgc3QgPSBtV2luZG93LmdldFBhbmVsU3RhdGUoRkVBVFVSRV9PUFRJT05TX1BBTkVMLCBmYWxzZSk7CisgICAgICAgIGlmICghbVdpbmRvdy5pc0Rlc3Ryb3llZCgpICYmIHN0ICE9IG51bGwgJiYgbVdpbmRvdy5nZXRDYWxsYmFjaygpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVdpbmRvdy5nZXRDYWxsYmFjaygpLm9uUHJvdmlkZUtleWJvYXJkU2hvcnRjdXRzKGxpc3QsIHN0Lm1lbnUpOworICAgICAgICAgICAgfSBjYXRjaCAoQWJzdHJhY3RNZXRob2RFcnJvciBlKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgcnVuIGludG8gdGhpcyBpZiB0aGUgYXBwIGlzIHVzaW5nIHN1cHBvcnRsaWIuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb2xvclZpZXdTdGF0ZSB7CiAgICAgICAgIFZpZXcgdmlldyA9IG51bGw7CiAgICAgICAgIGludCB0YXJnZXRWaXNpYmlsaXR5ID0gVmlldy5JTlZJU0lCTEU7CkBAIC0xOTEwLDEyICsyMDM3LDEyIEBACiAgICAgICAgICAgICAgICAgaXNQcmltYXJ5ID0gbW9kZSA9PSBtUHJpbWFyeUFjdGlvbk1vZGU7CiAgICAgICAgICAgICAgICAgaXNGbG9hdGluZyA9IG1vZGUgPT0gbUZsb2F0aW5nQWN0aW9uTW9kZTsKICAgICAgICAgICAgICAgICBpZiAoIWlzUHJpbWFyeSAmJiBtb2RlLmdldFR5cGUoKSA9PSBBY3Rpb25Nb2RlLlRZUEVfUFJJTUFSWSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJEZXN0cm95aW5nIHVuZXhwZWN0ZWQgQWN0aW9uTW9kZSBpbnN0YW5jZSBvZiBUWVBFX1BSSU1BUlk7ICIKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUobUxvZ1RhZywgIkRlc3Ryb3lpbmcgdW5leHBlY3RlZCBBY3Rpb25Nb2RlIGluc3RhbmNlIG9mIFRZUEVfUFJJTUFSWTsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbW9kZSArICIgd2FzIG5vdCB0aGUgY3VycmVudCBwcmltYXJ5IGFjdGlvbiBtb2RlISBFeHBlY3RlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtUHJpbWFyeUFjdGlvbk1vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIWlzRmxvYXRpbmcgJiYgbW9kZS5nZXRUeXBlKCkgPT0gQWN0aW9uTW9kZS5UWVBFX0ZMT0FUSU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkRlc3Ryb3lpbmcgdW5leHBlY3RlZCBBY3Rpb25Nb2RlIGluc3RhbmNlIG9mIFRZUEVfRkxPQVRJTkc7ICIKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUobUxvZ1RhZywgIkRlc3Ryb3lpbmcgdW5leHBlY3RlZCBBY3Rpb25Nb2RlIGluc3RhbmNlIG9mIFRZUEVfRkxPQVRJTkc7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1vZGUgKyAiIHdhcyBub3QgdGhlIGN1cnJlbnQgZmxvYXRpbmcgYWN0aW9uIG1vZGUhIEV4cGVjdGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1GbG9hdGluZ0FjdGlvbk1vZGUpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvRGl2aWRlclNuYXBBbGdvcml0aG0uamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvRGl2aWRlclNuYXBBbGdvcml0aG0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzlmMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9EaXZpZGVyU25hcEFsZ29yaXRobS5qYXZhCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3k7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIENhbGN1bGF0ZXMgdGhlIHNuYXAgdGFyZ2V0cyBhbmQgdGhlIHNuYXAgcG9zaXRpb24gZ2l2ZW4gYSBwb3NpdGlvbiBhbmQgYSB2ZWxvY2l0eS4gQWxsIHBvc2l0aW9ucworICogaGVyZSBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGxlZnQvdG9wIGVkZ2Ugb2YgdGhlIGRpdmlkZXIgcmVjdGFuZ2xlLgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBEaXZpZGVyU25hcEFsZ29yaXRobSB7CisKKyAgICAvKioKKyAgICAgKiAzIHNuYXAgdGFyZ2V0czogbGVmdC90b3AgaGFzIDE2OjkgcmF0aW8gKGZvciB2aWRlb3MpLCAxOjEsIGFuZCByaWdodC9ib3R0b20gaGFzIDE2OjkgcmF0aW8KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU05BUF9NT0RFXzE2XzkgPSAwOworCisgICAgLyoqCisgICAgICogMyBzbmFwIHRhcmdldHM6IGZpeGVkIHJhdGlvLCAxOjEsICgxIC0gZml4ZWQgcmF0aW8pCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNOQVBfRklYRURfUkFUSU8gPSAxOworCisgICAgLyoqCisgICAgICogMSBzbmFwIHRhcmdldDogMToxCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNOQVBfT05MWV8xXzEgPSAyOworCisgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtTWluRmxpbmdWZWxvY2l0eVB4UGVyU2Vjb25kOworICAgIHByaXZhdGUgZmluYWwgaW50IG1EaXNwbGF5V2lkdGg7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbURpc3BsYXlIZWlnaHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbURpdmlkZXJTaXplOworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFNuYXBUYXJnZXQ+IG1UYXJnZXRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1JbnNldHMgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgaW50IG1TbmFwTW9kZTsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0IG1GaXhlZFJhdGlvOworCisgICAgLyoqIFRoZSBmaXJzdCB0YXJnZXQgd2hpY2ggaXMgc3RpbGwgc3BsaXR0aW5nIHRoZSBzY3JlZW4gKi8KKyAgICBwcml2YXRlIGZpbmFsIFNuYXBUYXJnZXQgbUZpcnN0U3BsaXRUYXJnZXQ7CisKKyAgICAvKiogVGhlIGxhc3QgdGFyZ2V0IHdoaWNoIGlzIHN0aWxsIHNwbGl0dGluZyB0aGUgc2NyZWVuICovCisgICAgcHJpdmF0ZSBmaW5hbCBTbmFwVGFyZ2V0IG1MYXN0U3BsaXRUYXJnZXQ7CisKKyAgICBwcml2YXRlIGZpbmFsIFNuYXBUYXJnZXQgbURpc21pc3NTdGFydFRhcmdldDsKKyAgICBwcml2YXRlIGZpbmFsIFNuYXBUYXJnZXQgbURpc21pc3NFbmRUYXJnZXQ7CisKKyAgICBwdWJsaWMgRGl2aWRlclNuYXBBbGdvcml0aG0oUmVzb3VyY2VzIHJlcywgZmxvYXQgbWluRmxpbmdWZWxvY2l0eVB4UGVyU2Vjb25kLAorICAgICAgICAgICAgaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQsIGludCBkaXZpZGVyU2l6ZSwgYm9vbGVhbiBpc0hvcml6b250YWxEaXZpc2lvbiwKKyAgICAgICAgICAgIFJlY3QgaW5zZXRzKSB7CisgICAgICAgIG1NaW5GbGluZ1ZlbG9jaXR5UHhQZXJTZWNvbmQgPSBtaW5GbGluZ1ZlbG9jaXR5UHhQZXJTZWNvbmQ7CisgICAgICAgIG1EaXZpZGVyU2l6ZSA9IGRpdmlkZXJTaXplOworICAgICAgICBtRGlzcGxheVdpZHRoID0gZGlzcGxheVdpZHRoOworICAgICAgICBtRGlzcGxheUhlaWdodCA9IGRpc3BsYXlIZWlnaHQ7CisgICAgICAgIG1JbnNldHMuc2V0KGluc2V0cyk7CisgICAgICAgIG1TbmFwTW9kZSA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZWdlci5jb25maWdfZG9ja2VkU3RhY2tEaXZpZGVyU25hcE1vZGUpOworICAgICAgICBtRml4ZWRSYXRpbyA9IHJlcy5nZXRGcmFjdGlvbigKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmZyYWN0aW9uLmRvY2tlZF9zdGFja19kaXZpZGVyX2ZpeGVkX3JhdGlvLCAxLCAxKTsKKyAgICAgICAgY2FsY3VsYXRlVGFyZ2V0cyhpc0hvcml6b250YWxEaXZpc2lvbik7CisgICAgICAgIG1GaXJzdFNwbGl0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KDEpOworICAgICAgICBtTGFzdFNwbGl0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KG1UYXJnZXRzLnNpemUoKSAtIDIpOworICAgICAgICBtRGlzbWlzc1N0YXJ0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KDApOworICAgICAgICBtRGlzbWlzc0VuZFRhcmdldCA9IG1UYXJnZXRzLmdldChtVGFyZ2V0cy5zaXplKCkgLSAxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU25hcFRhcmdldCBjYWxjdWxhdGVTbmFwVGFyZ2V0KGludCBwb3NpdGlvbiwgZmxvYXQgdmVsb2NpdHkpIHsKKyAgICAgICAgaWYgKE1hdGguYWJzKHZlbG9jaXR5KSA8IG1NaW5GbGluZ1ZlbG9jaXR5UHhQZXJTZWNvbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBzbmFwKHBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zaXRpb24gPCBtRmlyc3RTcGxpdFRhcmdldC5wb3NpdGlvbiAmJiB2ZWxvY2l0eSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBtRGlzbWlzc1N0YXJ0VGFyZ2V0OworICAgICAgICB9CisgICAgICAgIGlmIChwb3NpdGlvbiA+IG1MYXN0U3BsaXRUYXJnZXQucG9zaXRpb24gJiYgdmVsb2NpdHkgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gbURpc21pc3NFbmRUYXJnZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlbG9jaXR5IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIG1GaXJzdFNwbGl0VGFyZ2V0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG1MYXN0U3BsaXRUYXJnZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgU25hcFRhcmdldCBjYWxjdWxhdGVOb25EaXNtaXNzaW5nU25hcFRhcmdldChpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgU25hcFRhcmdldCB0YXJnZXQgPSBzbmFwKHBvc2l0aW9uKTsKKyAgICAgICAgaWYgKHRhcmdldCA9PSBtRGlzbWlzc1N0YXJ0VGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gbUZpcnN0U3BsaXRUYXJnZXQ7CisgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IG1EaXNtaXNzRW5kVGFyZ2V0KSB7CisgICAgICAgICAgICByZXR1cm4gbUxhc3RTcGxpdFRhcmdldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgZmxvYXQgY2FsY3VsYXRlRGlzbWlzc2luZ0ZyYWN0aW9uKGludCBwb3NpdGlvbikgeworICAgICAgICBpZiAocG9zaXRpb24gPCBtRmlyc3RTcGxpdFRhcmdldC5wb3NpdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIDFmIC0gKGZsb2F0KSBwb3NpdGlvbiAvIG1GaXJzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uOworICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID4gbUxhc3RTcGxpdFRhcmdldC5wb3NpdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIChmbG9hdCkgKHBvc2l0aW9uIC0gbUxhc3RTcGxpdFRhcmdldC5wb3NpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgLyAobURpc21pc3NFbmRUYXJnZXQucG9zaXRpb24gLSBtTGFzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMGY7CisgICAgfQorCisgICAgcHVibGljIFNuYXBUYXJnZXQgZ2V0Q2xvc2VzdERpc21pc3NUYXJnZXQoaW50IHBvc2l0aW9uKSB7CisgICAgICAgIGlmIChwb3NpdGlvbiAtIG1EaXNtaXNzU3RhcnRUYXJnZXQucG9zaXRpb24gPCBtRGlzbWlzc0VuZFRhcmdldC5wb3NpdGlvbiAtIHBvc2l0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gbURpc21pc3NTdGFydFRhcmdldDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtRGlzbWlzc0VuZFRhcmdldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTbmFwVGFyZ2V0IGdldEZpcnN0U3BsaXRUYXJnZXQoKSB7CisgICAgICAgIHJldHVybiBtRmlyc3RTcGxpdFRhcmdldDsKKyAgICB9CisKKyAgICBwdWJsaWMgU25hcFRhcmdldCBnZXRMYXN0U3BsaXRUYXJnZXQoKSB7CisgICAgICAgIHJldHVybiBtTGFzdFNwbGl0VGFyZ2V0OworICAgIH0KKworICAgIHB1YmxpYyBTbmFwVGFyZ2V0IGdldERpc21pc3NTdGFydFRhcmdldCgpIHsKKyAgICAgICAgcmV0dXJuIG1EaXNtaXNzU3RhcnRUYXJnZXQ7CisgICAgfQorCisgICAgcHVibGljIFNuYXBUYXJnZXQgZ2V0RGlzbWlzc0VuZFRhcmdldCgpIHsKKyAgICAgICAgcmV0dXJuIG1EaXNtaXNzRW5kVGFyZ2V0OworICAgIH0KKworICAgIHByaXZhdGUgU25hcFRhcmdldCBzbmFwKGludCBwb3NpdGlvbikgeworICAgICAgICBpbnQgbWluSW5kZXggPSAtMTsKKyAgICAgICAgaW50IG1pbkRpc3RhbmNlID0gSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIGludCBzaXplID0gbVRhcmdldHMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgaW50IGRpc3RhbmNlID0gTWF0aC5hYnMocG9zaXRpb24gLSBtVGFyZ2V0cy5nZXQoaSkucG9zaXRpb24pOworICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGk7CisgICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVRhcmdldHMuZ2V0KG1pbkluZGV4KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2FsY3VsYXRlVGFyZ2V0cyhib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7CisgICAgICAgIG1UYXJnZXRzLmNsZWFyKCk7CisgICAgICAgIGludCBkaXZpZGVyTWF4ID0gaXNIb3Jpem9udGFsRGl2aXNpb24KKyAgICAgICAgICAgICAgICA/IG1EaXNwbGF5SGVpZ2h0CisgICAgICAgICAgICAgICAgOiBtRGlzcGxheVdpZHRoOworICAgICAgICBtVGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoLW1EaXZpZGVyU2l6ZSwgU25hcFRhcmdldC5GTEFHX0RJU01JU1NfU1RBUlQpKTsKKyAgICAgICAgc3dpdGNoIChtU25hcE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU05BUF9NT0RFXzE2Xzk6CisgICAgICAgICAgICAgICAgYWRkUmF0aW8xNl85VGFyZ2V0cyhpc0hvcml6b250YWxEaXZpc2lvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNOQVBfRklYRURfUkFUSU86CisgICAgICAgICAgICAgICAgYWRkRml4ZWREaXZpc2lvblRhcmdldHMoaXNIb3Jpem9udGFsRGl2aXNpb24pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTTkFQX09OTFlfMV8xOgorICAgICAgICAgICAgICAgIGFkZE1pZGRsZVRhcmdldChpc0hvcml6b250YWxEaXZpc2lvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbVRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KGRpdmlkZXJNYXgsIFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX0VORCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGRGaXhlZERpdmlzaW9uVGFyZ2V0cyhib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7CisgICAgICAgIGludCBzdGFydCA9IGlzSG9yaXpvbnRhbERpdmlzaW9uID8gbUluc2V0cy50b3AgOiBtSW5zZXRzLmxlZnQ7CisgICAgICAgIGludCBlbmQgPSBpc0hvcml6b250YWxEaXZpc2lvbgorICAgICAgICAgICAgICAgID8gbURpc3BsYXlIZWlnaHQgLSBtSW5zZXRzLmJvdHRvbQorICAgICAgICAgICAgICAgIDogbURpc3BsYXlXaWR0aCAtIG1JbnNldHMucmlnaHQ7CisgICAgICAgIG1UYXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgoaW50KSAoc3RhcnQgKyBtRml4ZWRSYXRpbyAqIChlbmQgLSBzdGFydCkpIC0gbURpdmlkZXJTaXplIC8gMiwKKyAgICAgICAgICAgICAgICBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOworICAgICAgICBhZGRNaWRkbGVUYXJnZXQoaXNIb3Jpem9udGFsRGl2aXNpb24pOworICAgICAgICBtVGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoKGludCkgKHN0YXJ0ICsgKDEgLSBtRml4ZWRSYXRpbykgKiAoZW5kIC0gc3RhcnQpKQorICAgICAgICAgICAgICAgIC0gbURpdmlkZXJTaXplIC8gMiwgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkUmF0aW8xNl85VGFyZ2V0cyhib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7CisgICAgICAgIGludCBzdGFydCA9IGlzSG9yaXpvbnRhbERpdmlzaW9uID8gbUluc2V0cy50b3AgOiBtSW5zZXRzLmxlZnQ7CisgICAgICAgIGludCBlbmQgPSBpc0hvcml6b250YWxEaXZpc2lvbgorICAgICAgICAgICAgICAgID8gbURpc3BsYXlIZWlnaHQgLSBtSW5zZXRzLmJvdHRvbQorICAgICAgICAgICAgICAgIDogbURpc3BsYXlXaWR0aCAtIG1JbnNldHMucmlnaHQ7CisgICAgICAgIGludCBzdGFydE90aGVyID0gaXNIb3Jpem9udGFsRGl2aXNpb24gPyBtSW5zZXRzLmxlZnQgOiBtSW5zZXRzLnRvcDsKKyAgICAgICAgaW50IGVuZE90aGVyID0gaXNIb3Jpem9udGFsRGl2aXNpb24KKyAgICAgICAgICAgICAgICA/IG1EaXNwbGF5V2lkdGggLSBtSW5zZXRzLnJpZ2h0CisgICAgICAgICAgICAgICAgOiBtRGlzcGxheUhlaWdodCAtIG1JbnNldHMuYm90dG9tOworICAgICAgICBmbG9hdCBzaXplID0gOS4wZiAvIDE2LjBmICogKGVuZE90aGVyIC0gc3RhcnRPdGhlcik7CisgICAgICAgIGludCBzaXplSW50ID0gKGludCkgTWF0aC5mbG9vcihzaXplKTsKKyAgICAgICAgbVRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KHN0YXJ0ICsgc2l6ZUludCwgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKKyAgICAgICAgYWRkTWlkZGxlVGFyZ2V0KGlzSG9yaXpvbnRhbERpdmlzaW9uKTsKKyAgICAgICAgbVRhcmdldHMuYWRkKG5ldyBTbmFwVGFyZ2V0KGVuZCAtIHNpemVJbnQgLSBtRGl2aWRlclNpemUsIFNuYXBUYXJnZXQuRkxBR19OT05FKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZE1pZGRsZVRhcmdldChib29sZWFuIGlzSG9yaXpvbnRhbERpdmlzaW9uKSB7CisgICAgICAgIGludCBzdGFydCA9IGlzSG9yaXpvbnRhbERpdmlzaW9uID8gbUluc2V0cy50b3AgOiBtSW5zZXRzLmxlZnQ7CisgICAgICAgIGludCBlbmQgPSBpc0hvcml6b250YWxEaXZpc2lvbgorICAgICAgICAgICAgICAgID8gbURpc3BsYXlIZWlnaHQgLSBtSW5zZXRzLmJvdHRvbQorICAgICAgICAgICAgICAgIDogbURpc3BsYXlXaWR0aCAtIG1JbnNldHMucmlnaHQ7CisgICAgICAgIG1UYXJnZXRzLmFkZChuZXcgU25hcFRhcmdldChzdGFydCArIChlbmQgLSBzdGFydCkgLyAyIC0gbURpdmlkZXJTaXplIC8gMiwKKyAgICAgICAgICAgICAgICBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgYSBzbmFwIHRhcmdldCBmb3IgdGhlIGRpdmlkZXIuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTbmFwVGFyZ2V0IHsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19OT05FID0gMDsKKworICAgICAgICAvKiogSWYgdGhlIGRpdmlkZXIgcmVhY2hlcyB0aGlzIHZhbHVlLCB0aGUgbGVmdC90b3AgdGFzayBzaG91bGQgYmUgZGlzbWlzc2VkLiAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RJU01JU1NfU1RBUlQgPSAxOworCisgICAgICAgIC8qKiBJZiB0aGUgZGl2aWRlciByZWFjaGVzIHRoaXMgdmFsdWUsIHRoZSByaWdodC9ib3R0b20gdGFzayBzaG91bGQgYmUgZGlzbWlzc2VkICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRElTTUlTU19FTkQgPSAyOworCisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgcG9zaXRpb247CisgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZmxhZzsKKworICAgICAgICBwdWJsaWMgU25hcFRhcmdldChpbnQgcG9zaXRpb24sIGludCBmbGFnKSB7CisgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247CisgICAgICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9Eb2NrZWREaXZpZGVyVXRpbHMuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvRG9ja2VkRGl2aWRlclV0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMDYwZQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvRG9ja2VkRGl2aWRlclV0aWxzLmphdmEKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5OworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOworCisvKioKKyAqIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBkb2NrZWQgc3RhY2sgZGl2aWRlciB1c2VkIGJ5IGJvdGggd2luZG93IG1hbmFnZXIgYW5kIFN5c3RlbSBVSS4KKyAqCisgKiBAaGlkZQorICovCitwdWJsaWMgY2xhc3MgRG9ja2VkRGl2aWRlclV0aWxzIHsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihpbnQgcG9zaXRpb24sIGludCBkb2NrU2lkZSwgUmVjdCBvdXRSZWN0LAorICAgICAgICAgICAgaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQsIGludCBkaXZpZGVyU2l6ZSkgeworICAgICAgICBvdXRSZWN0LnNldCgwLCAwLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAgICAgICBzd2l0Y2ggKGRvY2tTaWRlKSB7CisgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ6CisgICAgICAgICAgICAgICAgb3V0UmVjdC5yaWdodCA9IHBvc2l0aW9uOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1A6CisgICAgICAgICAgICAgICAgb3V0UmVjdC5ib3R0b20gPSBwb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfUklHSFQ6CisgICAgICAgICAgICAgICAgb3V0UmVjdC5sZWZ0ID0gcG9zaXRpb24gKyBkaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfQk9UVE9NOgorICAgICAgICAgICAgICAgIG91dFJlY3QudG9wID0gcG9zaXRpb24gKyBkaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0UmVjdC5sZWZ0ID4gb3V0UmVjdC5yaWdodCkgeworICAgICAgICAgICAgb3V0UmVjdC5sZWZ0ID0gb3V0UmVjdC5yaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0UmVjdC50b3AgPiBvdXRSZWN0LmJvdHRvbSkgeworICAgICAgICAgICAgb3V0UmVjdC50b3AgPSBvdXRSZWN0LmJvdHRvbTsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0UmVjdC5yaWdodCA8IG91dFJlY3QubGVmdCkgeworICAgICAgICAgICAgb3V0UmVjdC5yaWdodCA9IG91dFJlY3QubGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAob3V0UmVjdC5ib3R0b20gPCBvdXRSZWN0LnRvcCkgeworICAgICAgICAgICAgb3V0UmVjdC5ib3R0b20gPSBvdXRSZWN0LnRvcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgaW50IGNhbGN1bGF0ZVBvc2l0aW9uRm9yQm91bmRzKFJlY3QgYm91bmRzLCBpbnQgZG9ja1NpZGUsIGludCBkaXZpZGVyU2l6ZSkgeworICAgICAgICBzd2l0Y2ggKGRvY2tTaWRlKSB7CisgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kcy5yaWdodDsKKyAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfVE9QOgorICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMuYm90dG9tOworICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9SSUdIVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYm91bmRzLmxlZnQgLSBkaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfQk9UVE9NOgorICAgICAgICAgICAgICAgIHJldHVybiBib3VuZHMudG9wIC0gZGl2aWRlclNpemU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9QaG9uZVdpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3BvbGljeS9QaG9uZVdpbmRvdy5qYXZhCmluZGV4IDMzN2JiNjkuLmI0YzRlZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvUGhvbmVXaW5kb3cuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1Bob25lV2luZG93LmphdmEKQEAgLTk0LDcgKzk0LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuUHJvZ3Jlc3NCYXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CkBAIC0xMTQsNiArMTEzLDggQEAKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiUGhvbmVXaW5kb3ciOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworCiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfQkFDS0dST1VORF9GQURFX0RVUkFUSU9OX01TID0gMzAwOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVU1RPTV9USVRMRV9DT01QQVRJQkxFX0ZFQVRVUkVTID0gREVGQVVMVF9GRUFUVVJFUyB8CkBAIC0xMjgsNyArMTI5LDcgQEAKICAgICAgKiBTaW1wbGUgY2FsbGJhY2sgdXNlZCBieSB0aGUgY29udGV4dCBtZW51IGFuZCBpdHMgc3VibWVudXMuIFRoZSBvcHRpb25zCiAgICAgICogbWVudSBzdWJtZW51cyBkbyBub3QgdXNlIHRoaXMgKHRoZWlyIGJlaGF2aW9yIGlzIG1vcmUgY29tcGxleCkuCiAgICAgICovCi0gICAgZmluYWwgRGlhbG9nTWVudUNhbGxiYWNrIG1Db250ZXh0TWVudUNhbGxiYWNrID0gbmV3IERpYWxvZ01lbnVDYWxsYmFjayhGRUFUVVJFX0NPTlRFWFRfTUVOVSk7CisgICAgZmluYWwgUGhvbmVXaW5kb3dNZW51Q2FsbGJhY2sgbUNvbnRleHRNZW51Q2FsbGJhY2sgPSBuZXcgUGhvbmVXaW5kb3dNZW51Q2FsbGJhY2sodGhpcyk7CiAKICAgICBmaW5hbCBUeXBlZFZhbHVlIG1NaW5XaWR0aE1ham9yID0gbmV3IFR5cGVkVmFsdWUoKTsKICAgICBmaW5hbCBUeXBlZFZhbHVlIG1NaW5XaWR0aE1pbm9yID0gbmV3IFR5cGVkVmFsdWUoKTsKQEAgLTE0Nyw2ICsxNDgsOSBAQAogICAgIC8vIFRoaXMgaXMgdGhlIHZpZXcgaW4gd2hpY2ggdGhlIHdpbmRvdyBjb250ZW50cyBhcmUgcGxhY2VkLiBJdCBpcyBlaXRoZXIKICAgICAvLyBtRGVjb3IgaXRzZWxmLCBvciBhIGNoaWxkIG9mIG1EZWNvciB3aGVyZSB0aGUgY29udGVudHMgZ28uCiAgICAgVmlld0dyb3VwIG1Db250ZW50UGFyZW50OworICAgIC8vIFdoZXRoZXIgdGhlIGNsaWVudCBoYXMgZXhwbGljaXRseSBzZXQgdGhlIGNvbnRlbnQgdmlldy4gSWYgZmFsc2UgYW5kIG1Db250ZW50UGFyZW50IGlzIG5vdAorICAgIC8vIG51bGwsIHRoZW4gdGhlIGNvbnRlbnQgcGFyZW50IHdhcyBzZXQgZHVlIHRvIHdpbmRvdyBwcmVzZXJ2YXRpb24uCisgICAgcHJpdmF0ZSBib29sZWFuIG1Db250ZW50UGFyZW50RXhwbGljaXRseVNldCA9IGZhbHNlOwogCiAgICAgQ2FsbGJhY2syIG1UYWtlU3VyZmFjZUNhbGxiYWNrOwogCkBAIC0yNzMsNiArMjc3LDEwIEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1N0YXJ0aW5nV2luZG93OwogICAgIHByaXZhdGUgaW50IG1UaGVtZSA9IC0xOwogCisgICAgcHJpdmF0ZSBpbnQgbURlY29yQ2FwdGlvblNoYWRlID0gREVDT1JfQ0FQVElPTl9TSEFERV9BVVRPOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1Vc2VEZWNvckNvbnRleHQgPSBmYWxzZTsKKwogICAgIHN0YXRpYyBjbGFzcyBXaW5kb3dNYW5hZ2VySG9sZGVyIHsKICAgICAgICAgc3RhdGljIGZpbmFsIElXaW5kb3dNYW5hZ2VyIHNXaW5kb3dNYW5hZ2VyID0gSVdpbmRvd01hbmFnZXIuU3R1Yi5hc0ludGVyZmFjZSgKICAgICAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5nZXRTZXJ2aWNlKCJ3aW5kb3ciKSk7CkBAIC0yODUsOCArMjkzLDE0IEBACiAgICAgICAgIG1MYXlvdXRJbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20oY29udGV4dCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IgZm9yIG1haW4gd2luZG93IG9mIGFuIGFjdGl2aXR5LgorICAgICAqLwogICAgIHB1YmxpYyBQaG9uZVdpbmRvdyhDb250ZXh0IGNvbnRleHQsIFdpbmRvdyBwcmVzZXJ2ZWRXaW5kb3cpIHsKICAgICAgICAgdGhpcyhjb250ZXh0KTsKKyAgICAgICAgLy8gT25seSBtYWluIGFjdGl2aXR5IHdpbmRvd3MgdXNlIGRlY29yIGNvbnRleHQsIGFsbCB0aGUgb3RoZXIgd2luZG93cyBkZXBlbmQgb24gd2hhdGV2ZXIKKyAgICAgICAgLy8gY29udGV4dCB0aGF0IHdhcyBnaXZlbiB0byB0aGVtLgorICAgICAgICBtVXNlRGVjb3JDb250ZXh0ID0gdHJ1ZTsKICAgICAgICAgaWYgKHByZXNlcnZlZFdpbmRvdyAhPSBudWxsKSB7CiAgICAgICAgICAgICBtRGVjb3IgPSAoRGVjb3JWaWV3KSBwcmVzZXJ2ZWRXaW5kb3cuZ2V0RGVjb3JWaWV3KCk7CiAgICAgICAgICAgICBtRWxldmF0aW9uID0gcHJlc2VydmVkV2luZG93LmdldEVsZXZhdGlvbigpOwpAQCAtMzA2LDcgKzMyMCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0RmVhdHVyZShpbnQgZmVhdHVyZUlkKSB7Ci0gICAgICAgIGlmIChtQ29udGVudFBhcmVudCAhPSBudWxsKSB7CisgICAgICAgIGlmIChtQ29udGVudFBhcmVudEV4cGxpY2l0bHlTZXQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBbmRyb2lkUnVudGltZUV4Y2VwdGlvbigicmVxdWVzdEZlYXR1cmUoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYWRkaW5nIGNvbnRlbnQiKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbCBpbnQgZmVhdHVyZXMgPSBnZXRGZWF0dXJlcygpOwpAQCAtMzkwLDYgKzQwNCw3IEBACiAgICAgICAgIGlmIChjYiAhPSBudWxsICYmICFpc0Rlc3Ryb3llZCgpKSB7CiAgICAgICAgICAgICBjYi5vbkNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgICAgIH0KKyAgICAgICAgbUNvbnRlbnRQYXJlbnRFeHBsaWNpdGx5U2V0ID0gdHJ1ZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTQyMCw2ICs0MzUsNyBAQAogICAgICAgICBpZiAoY2IgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewogICAgICAgICAgICAgY2Iub25Db250ZW50Q2hhbmdlZCgpOwogICAgICAgICB9CisgICAgICAgIG1Db250ZW50UGFyZW50RXhwbGljaXRseVNldCA9IHRydWU7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC02NjEsNiArNjc3LDEzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk11bHRpV2luZG93TW9kZUNoYW5nZWQoKSB7CisgICAgICAgIGlmIChtRGVjb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbURlY29yLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2xlYXJNZW51Vmlld3MoUGFuZWxGZWF0dXJlU3RhdGUgc3QpIHsKICAgICAgICAgLy8gVGhpcyBjYW4gYmUgY2FsbGVkIG9uIGNvbmZpZyBjaGFuZ2VzLCBzbyB3ZSBzaG91bGQgbWFrZSBzdXJlCiAgICAgICAgIC8vIHRoZSB2aWV3cyB3aWxsIGJlIHJlY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIG5ldyBvcmllbnRhdGlvbiwgZXRjLgpAQCAtMjI1MSwxNyArMjI3NCwyMSBAQAogICAgICAgICAvLyBTeXN0ZW0gcHJvY2VzcyBkb2Vzbid0IGhhdmUgYXBwbGljYXRpb24gY29udGV4dCBhbmQgaW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gZGlyZWN0bHkgdXNlCiAgICAgICAgIC8vIHRoZSBjb250ZXh0IHdlIGhhdmUuIE90aGVyd2lzZSB3ZSB3YW50IHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LCBzbyB3ZSBkb24ndCBjbGluZyB0byB0aGUKICAgICAgICAgLy8gYWN0aXZpdHkuCi0gICAgICAgIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0ID0gZ2V0Q29udGV4dCgpLmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwogICAgICAgICBDb250ZXh0IGNvbnRleHQ7Ci0gICAgICAgIGlmIChhcHBsaWNhdGlvbkNvbnRleHQgPT0gbnVsbCkgewotICAgICAgICAgICAgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQgPSBuZXcgRGVjb3JDb250ZXh0KGFwcGxpY2F0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICBpZiAobVRoZW1lICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRUaGVtZShtVGhlbWUpOworICAgICAgICBpZiAobVVzZURlY29yQ29udGV4dCkgeworICAgICAgICAgICAgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQgPSBnZXRDb250ZXh0KCkuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgICAgICAgICBpZiAoYXBwbGljYXRpb25Db250ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gbmV3IERlY29yQ29udGV4dChhcHBsaWNhdGlvbkNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChtVGhlbWUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRUaGVtZShtVGhlbWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBEZWNvclZpZXcoY29udGV4dCwgZmVhdHVyZUlkLCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBEZWNvclZpZXcoY29udGV4dCwgZmVhdHVyZUlkLCB0aGlzLCBnZXRBdHRyaWJ1dGVzKCkpOwogICAgIH0KIAogICAgIHByb3RlY3RlZCBWaWV3R3JvdXAgZ2VuZXJhdGVMYXlvdXQoRGVjb3JWaWV3IGRlY29yKSB7CkBAIC0yMzQwLDYgKzIzNjcsOCBAQAogCiAgICAgICAgIGEuZ2V0VmFsdWUoUi5zdHlsZWFibGUuV2luZG93X3dpbmRvd01pbldpZHRoTWFqb3IsIG1NaW5XaWR0aE1ham9yKTsKICAgICAgICAgYS5nZXRWYWx1ZShSLnN0eWxlYWJsZS5XaW5kb3dfd2luZG93TWluV2lkdGhNaW5vciwgbU1pbldpZHRoTWlub3IpOworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk1pbiB3aWR0aCBtaW5vcjogIiArIG1NaW5XaWR0aE1pbm9yLmNvZXJjZVRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICArICIsIG1ham9yOiAiICsgbU1pbldpZHRoTWFqb3IuY29lcmNlVG9TdHJpbmcoKSk7CiAgICAgICAgIGlmIChhLmhhc1ZhbHVlKFIuc3R5bGVhYmxlLldpbmRvd193aW5kb3dGaXhlZFdpZHRoTWFqb3IpKSB7CiAgICAgICAgICAgICBpZiAobUZpeGVkV2lkdGhNYWpvciA9PSBudWxsKSBtRml4ZWRXaWR0aE1ham9yID0gbmV3IFR5cGVkVmFsdWUoKTsKICAgICAgICAgICAgIGEuZ2V0VmFsdWUoUi5zdHlsZWFibGUuV2luZG93X3dpbmRvd0ZpeGVkV2lkdGhNYWpvciwKQEAgLTI1MjcsNyArMjU1Niw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBtRGVjb3Iuc3RhcnRDaGFuZ2luZygpOwotICAgICAgICBmaW5hbCBWaWV3IGluID0gbURlY29yLm9uUmVzb3VyY2VzTG9hZGVkKG1MYXlvdXRJbmZsYXRlciwgbGF5b3V0UmVzb3VyY2UpOworICAgICAgICBtRGVjb3Iub25SZXNvdXJjZXNMb2FkZWQobUxheW91dEluZmxhdGVyLCBsYXlvdXRSZXNvdXJjZSk7CiAKICAgICAgICAgVmlld0dyb3VwIGNvbnRlbnRQYXJlbnQgPSAoVmlld0dyb3VwKWZpbmRWaWV3QnlJZChJRF9BTkRST0lEX0NPTlRFTlQpOwogICAgICAgICBpZiAoY29udGVudFBhcmVudCA9PSBudWxsKSB7CkBAIC0yNjQ4LDIwICsyNjc3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVQYW5lbE1lbnUoRkVBVFVSRV9BQ1RJT05fQkFSKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcgPSAoVGV4dFZpZXcpZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpOworICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcgPSAoVGV4dFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKICAgICAgICAgICAgICAgICBpZiAobVRpdGxlVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0TGF5b3V0RGlyZWN0aW9uKG1EZWNvci5nZXRMYXlvdXREaXJlY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoZ2V0TG9jYWxGZWF0dXJlcygpICYgKDEgPDwgRkVBVFVSRV9OT19USVRMRSkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgdGl0bGVDb250YWluZXIgPSBmaW5kVmlld0J5SWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuaWQudGl0bGVfY29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgdGl0bGVDb250YWluZXIgPSBmaW5kVmlld0J5SWQoUi5pZC50aXRsZV9jb250YWluZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlQ29udGFpbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUNvbnRhaW5lci5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Db250ZW50UGFyZW50IGluc3RhbmNlb2YgRnJhbWVMYXlvdXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZyYW1lTGF5b3V0KW1Db250ZW50UGFyZW50KS5zZXRGb3JlZ3JvdW5kKG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRlbnRQYXJlbnQuc2V0Rm9yZWdyb3VuZChudWxsKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VGV4dChtVGl0bGUpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zNTkxLDI3ICszNjE2LDM0IEBACiAgICAgICogPGxpPiBDYWxscyBiYWNrIHRvIHRoZSBjYWxsYmFjaydzIG9uTWVudUl0ZW1TZWxlY3RlZCB3aGVuIGFuIGl0ZW0gaXMKICAgICAgKiBzZWxlY3RlZC4KICAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIERpYWxvZ01lbnVDYWxsYmFjayBpbXBsZW1lbnRzIE1lbnVCdWlsZGVyLkNhbGxiYWNrLCBNZW51UHJlc2VudGVyLkNhbGxiYWNrIHsKLSAgICAgICAgcHJpdmF0ZSBpbnQgbUZlYXR1cmVJZDsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFBob25lV2luZG93TWVudUNhbGxiYWNrCisgICAgICAgICAgICBpbXBsZW1lbnRzIE1lbnVCdWlsZGVyLkNhbGxiYWNrLCBNZW51UHJlc2VudGVyLkNhbGxiYWNrIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZFQVRVUkVfSUQgPSBGRUFUVVJFX0NPTlRFWFRfTUVOVTsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFBob25lV2luZG93IG1XaW5kb3c7CisKICAgICAgICAgcHJpdmF0ZSBNZW51RGlhbG9nSGVscGVyIG1TdWJNZW51SGVscGVyOwogCi0gICAgICAgIHB1YmxpYyBEaWFsb2dNZW51Q2FsbGJhY2soaW50IGZlYXR1cmVJZCkgewotICAgICAgICAgICAgbUZlYXR1cmVJZCA9IGZlYXR1cmVJZDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93RGlhbG9nRm9yU3VibWVudTsKKworICAgICAgICBwdWJsaWMgUGhvbmVXaW5kb3dNZW51Q2FsbGJhY2soUGhvbmVXaW5kb3cgd2luZG93KSB7CisgICAgICAgICAgICBtV2luZG93ID0gd2luZG93OwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2VNZW51KE1lbnVCdWlsZGVyIG1lbnUsIGJvb2xlYW4gYWxsTWVudXNBcmVDbG9zaW5nKSB7CiAgICAgICAgICAgICBpZiAobWVudS5nZXRSb290TWVudSgpICE9IG1lbnUpIHsKICAgICAgICAgICAgICAgICBvbkNsb3NlU3ViTWVudShtZW51KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGFsbE1lbnVzQXJlQ2xvc2luZykgewotICAgICAgICAgICAgICAgIENhbGxiYWNrIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5vblBhbmVsQ2xvc2VkKG1GZWF0dXJlSWQsIG1lbnUpOworICAgICAgICAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNhbGxiYWNrID0gbVdpbmRvdy5nZXRDYWxsYmFjaygpOworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmICFtV2luZG93LmlzRGVzdHJveWVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sub25QYW5lbENsb3NlZChGRUFUVVJFX0lELCBtZW51KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAobWVudSA9PSBtQ29udGV4dE1lbnUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzbWlzc0NvbnRleHRNZW51KCk7CisgICAgICAgICAgICAgICAgaWYgKG1lbnUgPT0gbVdpbmRvdy5tQ29udGV4dE1lbnUpIHsKKyAgICAgICAgICAgICAgICAgICAgbVdpbmRvdy5kaXNtaXNzQ29udGV4dE1lbnUoKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBEaXNtaXNzIHRoZSBzdWJtZW51LCBpZiBpdCBpcyBzaG93aW5nCkBAIC0zNjIyLDMzICszNjU0LDQ1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBvbkNsb3NlU3ViTWVudShNZW51QnVpbGRlciBtZW51KSB7Ci0gICAgICAgICAgICBDYWxsYmFjayBjYWxsYmFjayA9IGdldENhbGxiYWNrKCk7Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiAhaXNEZXN0cm95ZWQoKSkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uUGFuZWxDbG9zZWQobUZlYXR1cmVJZCwgbWVudS5nZXRSb290TWVudSgpKTsKKyAgICAgICAgcHJpdmF0ZSB2b2lkIG9uQ2xvc2VTdWJNZW51KE1lbnVCdWlsZGVyIG1lbnUpIHsKKyAgICAgICAgICAgIGZpbmFsIENhbGxiYWNrIGNhbGxiYWNrID0gbVdpbmRvdy5nZXRDYWxsYmFjaygpOworICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgIW1XaW5kb3cuaXNEZXN0cm95ZWQoKSkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uUGFuZWxDbG9zZWQoRkVBVFVSRV9JRCwgbWVudS5nZXRSb290TWVudSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbk1lbnVJdGVtU2VsZWN0ZWQoTWVudUJ1aWxkZXIgbWVudSwgTWVudUl0ZW0gaXRlbSkgewotICAgICAgICAgICAgQ2FsbGJhY2sgY2FsbGJhY2sgPSBnZXRDYWxsYmFjaygpOwotICAgICAgICAgICAgcmV0dXJuIChjYWxsYmFjayAhPSBudWxsICYmICFpc0Rlc3Ryb3llZCgpKQotICAgICAgICAgICAgICAgICAgICAmJiBjYWxsYmFjay5vbk1lbnVJdGVtU2VsZWN0ZWQobUZlYXR1cmVJZCwgaXRlbSk7CisgICAgICAgICAgICBmaW5hbCBDYWxsYmFjayBjYWxsYmFjayA9IG1XaW5kb3cuZ2V0Q2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayAhPSBudWxsICYmICFtV2luZG93LmlzRGVzdHJveWVkKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgY2FsbGJhY2sub25NZW51SXRlbVNlbGVjdGVkKEZFQVRVUkVfSUQsIGl0ZW0pOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uTWVudU1vZGVDaGFuZ2UoTWVudUJ1aWxkZXIgbWVudSkgewogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uT3BlblN1Yk1lbnUoTWVudUJ1aWxkZXIgc3ViTWVudSkgewotICAgICAgICAgICAgaWYgKHN1Yk1lbnUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHN1Yk1lbnUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gU2V0IGEgc2ltcGxlIGNhbGxiYWNrIGZvciB0aGUgc3VibWVudQogICAgICAgICAgICAgc3ViTWVudS5zZXRDYWxsYmFjayh0aGlzKTsKIAotICAgICAgICAgICAgLy8gVGhlIHdpbmRvdyBtYW5hZ2VyIHdpbGwgZ2l2ZSB1cyBhIHZhbGlkIHdpbmRvdyB0b2tlbgotICAgICAgICAgICAgbVN1Yk1lbnVIZWxwZXIgPSBuZXcgTWVudURpYWxvZ0hlbHBlcihzdWJNZW51KTsKLSAgICAgICAgICAgIG1TdWJNZW51SGVscGVyLnNob3cobnVsbCk7CisgICAgICAgICAgICBpZiAobVNob3dEaWFsb2dGb3JTdWJtZW51KSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHdpbmRvdyBtYW5hZ2VyIHdpbGwgZ2l2ZSB1cyBhIHZhbGlkIHdpbmRvdyB0b2tlbgorICAgICAgICAgICAgICAgIG1TdWJNZW51SGVscGVyID0gbmV3IE1lbnVEaWFsb2dIZWxwZXIoc3ViTWVudSk7CisgICAgICAgICAgICAgICAgbVN1Yk1lbnVIZWxwZXIuc2hvdyhudWxsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBzZXRTaG93RGlhbG9nRm9yU3VibWVudShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgICAgIG1TaG93RGlhbG9nRm9yU3VibWVudSA9IGVuYWJsZWQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM3MjAsNCArMzc2NCwyOSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UmVzaXppbmdDYXB0aW9uRHJhd2FibGUoRHJhd2FibGUgZHJhd2FibGUpIHsKKyAgICAgICAgbURlY29yLnNldFVzZXJDYXB0aW9uQmFja2dyb3VuZERyYXdhYmxlKGRyYXdhYmxlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXREZWNvckNhcHRpb25TaGFkZShpbnQgZGVjb3JDYXB0aW9uU2hhZGUpIHsKKyAgICAgICAgbURlY29yQ2FwdGlvblNoYWRlID0gZGVjb3JDYXB0aW9uU2hhZGU7CisgICAgICAgIGlmIChtRGVjb3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbURlY29yLnVwZGF0ZURlY29yQ2FwdGlvblNoYWRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgZ2V0RGVjb3JDYXB0aW9uU2hhZGUoKSB7CisgICAgICAgIHJldHVybiBtRGVjb3JDYXB0aW9uU2hhZGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlcyhXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyBwYXJhbXMpIHsKKyAgICAgICAgc3VwZXIuc2V0QXR0cmlidXRlcyhwYXJhbXMpOworICAgICAgICBpZiAobURlY29yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1EZWNvci51cGRhdGVMb2dUYWcocGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9zdGF0dXNiYXIvSVN0YXR1c0Jhci5haWRsIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3N0YXR1c2Jhci9JU3RhdHVzQmFyLmFpZGwKaW5kZXggMTFlZjE4Yi4uNjMyMjg1YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3N0YXR1c2Jhci9JU3RhdHVzQmFyLmFpZGwKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3N0YXR1c2Jhci9JU3RhdHVzQmFyLmFpZGwKQEAgLTI0LDExICsyNCwxMSBAQAogLyoqIEBoaWRlICovCiBvbmV3YXkgaW50ZXJmYWNlIElTdGF0dXNCYXIKIHsKLSAgICB2b2lkIHNldEljb24oaW50IGluZGV4LCBpbiBTdGF0dXNCYXJJY29uIGljb24pOwotICAgIHZvaWQgcmVtb3ZlSWNvbihpbnQgaW5kZXgpOworICAgIHZvaWQgc2V0SWNvbihTdHJpbmcgc2xvdCwgaW4gU3RhdHVzQmFySWNvbiBpY29uKTsKKyAgICB2b2lkIHJlbW92ZUljb24oU3RyaW5nIHNsb3QpOwogICAgIHZvaWQgZGlzYWJsZShpbnQgc3RhdGUxLCBpbnQgc3RhdGUyKTsKICAgICB2b2lkIGFuaW1hdGVFeHBhbmROb3RpZmljYXRpb25zUGFuZWwoKTsKLSAgICB2b2lkIGFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKCk7CisgICAgdm9pZCBhbmltYXRlRXhwYW5kU2V0dGluZ3NQYW5lbChTdHJpbmcgc3ViUGFuZWwpOwogICAgIHZvaWQgYW5pbWF0ZUNvbGxhcHNlUGFuZWxzKCk7CiAgICAgdm9pZCBzZXRTeXN0ZW1VaVZpc2liaWxpdHkoaW50IHZpcywgaW50IG1hc2spOwogICAgIHZvaWQgdG9wQXBwV2luZG93Q2hhbmdlZChib29sZWFuIG1lbnVWaXNpYmxlKTsKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgICB2b2lkIGNhbmNlbFByZWxvYWRSZWNlbnRBcHBzKCk7CiAgICAgdm9pZCBzaG93U2NyZWVuUGlubmluZ1JlcXVlc3QoKTsKIAotICAgIHZvaWQgc2hvd0tleWJvYXJkU2hvcnRjdXRzTWVudSgpOworICAgIHZvaWQgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHNNZW51KCk7CiAKICAgICAvKioKICAgICAgKiBOb3RpZmllcyB0aGUgc3RhdHVzIGJhciB0aGF0IGFuIGFwcCB0cmFuc2l0aW9uIGlzIHBlbmRpbmcgdG8gZGVsYXkgYXBwbHlpbmcgc29tZSBmbGFncyB3aXRoCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvc3RhdHVzYmFyL0lTdGF0dXNCYXJTZXJ2aWNlLmFpZGwgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvc3RhdHVzYmFyL0lTdGF0dXNCYXJTZXJ2aWNlLmFpZGwKaW5kZXggNmM5NTdiZS4uMzJkZTQ1YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3N0YXR1c2Jhci9JU3RhdHVzQmFyU2VydmljZS5haWRsCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9zdGF0dXNiYXIvSVN0YXR1c0JhclNlcnZpY2UuYWlkbApAQCAtMzksMTIgKzM5LDEzIEBACiAgICAgdm9pZCB0b3BBcHBXaW5kb3dDaGFuZ2VkKGJvb2xlYW4gbWVudVZpc2libGUpOwogICAgIHZvaWQgc2V0SW1lV2luZG93U3RhdHVzKGluIElCaW5kZXIgdG9rZW4sIGludCB2aXMsIGludCBiYWNrRGlzcG9zaXRpb24sCiAgICAgICAgICAgICBib29sZWFuIHNob3dJbWVTd2l0Y2hlcik7Ci0gICAgdm9pZCBleHBhbmRTZXR0aW5nc1BhbmVsKCk7CisgICAgdm9pZCBleHBhbmRTZXR0aW5nc1BhbmVsKFN0cmluZyBzdWJQYW5lbCk7CiAgICAgdm9pZCBzZXRDdXJyZW50VXNlcihpbnQgbmV3VXNlcklkKTsKIAogICAgIC8vIC0tLS0gTWV0aG9kcyBiZWxvdyBhcmUgZm9yIHVzZSBieSB0aGUgc3RhdHVzIGJhciBwb2xpY3kgc2VydmljZXMgLS0tLQogICAgIC8vIFlvdSBuZWVkIHRoZSBTVEFUVVNfQkFSX1NFUlZJQ0UgcGVybWlzc2lvbgotICAgIHZvaWQgcmVnaXN0ZXJTdGF0dXNCYXIoSVN0YXR1c0JhciBjYWxsYmFja3MsIG91dCBTdGF0dXNCYXJJY29uTGlzdCBpY29uTGlzdCwKKyAgICB2b2lkIHJlZ2lzdGVyU3RhdHVzQmFyKElTdGF0dXNCYXIgY2FsbGJhY2tzLCBvdXQgTGlzdDxTdHJpbmc+IGljb25TbG90cywKKyAgICAgICAgICAgIG91dCBMaXN0PFN0YXR1c0Jhckljb24+IGljb25MaXN0LAogICAgICAgICAgICAgb3V0IGludFtdIHN3aXRjaGVzLCBvdXQgTGlzdDxJQmluZGVyPiBiaW5kZXJzKTsKICAgICB2b2lkIG9uUGFuZWxSZXZlYWxlZChib29sZWFuIGNsZWFyTm90aWZpY2F0aW9uRWZmZWN0cywgaW50IG51bUl0ZW1zKTsKICAgICB2b2lkIG9uUGFuZWxIaWRkZW4oKTsKQEAgLTY4LDcgKzY5LDcgQEAKICAgICB2b2lkIHByZWxvYWRSZWNlbnRBcHBzKCk7CiAgICAgdm9pZCBjYW5jZWxQcmVsb2FkUmVjZW50QXBwcygpOwogCi0gICAgdm9pZCBzaG93S2V5Ym9hcmRTaG9ydGN1dHNNZW51KCk7CisgICAgdm9pZCB0b2dnbGVLZXlib2FyZFNob3J0Y3V0c01lbnUoKTsKIAogICAgIC8qKgogICAgICAqIE5vdGlmaWVzIHRoZSBzdGF0dXMgYmFyIHRoYXQgYW4gYXBwIHRyYW5zaXRpb24gaXMgcGVuZGluZyB0byBkZWxheSBhcHBseWluZyBzb21lIGZsYWdzIHdpdGgKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9zdGF0dXNiYXIvU3RhdHVzQmFySWNvbkxpc3QuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC9zdGF0dXNiYXIvU3RhdHVzQmFySWNvbkxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc4ZDI0NS4uMDAwMDAwMAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvc3RhdHVzYmFyL1N0YXR1c0Jhckljb25MaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLQotcHVibGljIGNsYXNzIFN0YXR1c0Jhckljb25MaXN0IGltcGxlbWVudHMgUGFyY2VsYWJsZSB7Ci0gICAgcHJpdmF0ZSBTdHJpbmdbXSBtU2xvdHM7Ci0gICAgcHJpdmF0ZSBTdGF0dXNCYXJJY29uW10gbUljb25zOwotCi0gICAgcHVibGljIFN0YXR1c0Jhckljb25MaXN0KCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTdGF0dXNCYXJJY29uTGlzdChQYXJjZWwgaW4pIHsKLSAgICAgICAgcmVhZEZyb21QYXJjZWwoaW4pOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZWFkRnJvbVBhcmNlbChQYXJjZWwgaW4pIHsKLSAgICAgICAgdGhpcy5tU2xvdHMgPSBpbi5yZWFkU3RyaW5nQXJyYXkoKTsKLSAgICAgICAgZmluYWwgaW50IE4gPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgIGlmIChOIDwgMCkgewotICAgICAgICAgICAgbUljb25zID0gbnVsbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1JY29ucyA9IG5ldyBTdGF0dXNCYXJJY29uW05dOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpbi5yZWFkSW50KCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBtSWNvbnNbaV0gPSBuZXcgU3RhdHVzQmFySWNvbihpbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgb3V0LCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgb3V0LndyaXRlU3RyaW5nQXJyYXkobVNsb3RzKTsKLSAgICAgICAgaWYgKG1JY29ucyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBvdXQud3JpdGVJbnQoLTEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtSWNvbnMubGVuZ3RoOwotICAgICAgICAgICAgb3V0LndyaXRlSW50KE4pOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIFN0YXR1c0Jhckljb24gaWMgPSBtSWNvbnNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGljID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KDApOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludCgxKTsKLSAgICAgICAgICAgICAgICAgICAgaWMud3JpdGVUb1BhcmNlbChvdXQsIGZsYWdzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFBhcmNlbGFibGUuQ3JlYXRvciB0aGF0IGluc3RhbnRpYXRlcyBTdGF0dXNCYXJJY29uTGlzdCBvYmplY3RzCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8U3RhdHVzQmFySWNvbkxpc3Q+IENSRUFUT1IKLSAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxTdGF0dXNCYXJJY29uTGlzdD4oKQotICAgIHsKLSAgICAgICAgcHVibGljIFN0YXR1c0Jhckljb25MaXN0IGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHBhcmNlbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXNCYXJJY29uTGlzdChwYXJjZWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0YXR1c0Jhckljb25MaXN0W10gbmV3QXJyYXkoaW50IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU3RhdHVzQmFySWNvbkxpc3Rbc2l6ZV07Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGljIHZvaWQgZGVmaW5lU2xvdHMoU3RyaW5nW10gc2xvdHMpIHsKLSAgICAgICAgZmluYWwgaW50IE4gPSBzbG90cy5sZW5ndGg7Ci0gICAgICAgIFN0cmluZ1tdIHMgPSBtU2xvdHMgPSBuZXcgU3RyaW5nW05dOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBzW2ldID0gc2xvdHNbaV07Ci0gICAgICAgIH0KLSAgICAgICAgbUljb25zID0gbmV3IFN0YXR1c0Jhckljb25bTl07Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRTbG90SW5kZXgoU3RyaW5nIHNsb3QpIHsKLSAgICAgICAgZmluYWwgaW50IE4gPSBtU2xvdHMubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC5lcXVhbHMobVNsb3RzW2ldKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHNpemUoKSB7Ci0gICAgICAgIHJldHVybiBtU2xvdHMubGVuZ3RoOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEljb24oaW50IGluZGV4LCBTdGF0dXNCYXJJY29uIGljb24pIHsKLSAgICAgICAgbUljb25zW2luZGV4XSA9IGljb24uY2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVJY29uKGludCBpbmRleCkgewotICAgICAgICBtSWNvbnNbaW5kZXhdID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNsb3QoaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBtU2xvdHNbaW5kZXhdOwotICAgIH0KLQotICAgIHB1YmxpYyBTdGF0dXNCYXJJY29uIGdldEljb24oaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBtSWNvbnNbaW5kZXhdOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0Vmlld0luZGV4KGludCBpbmRleCkgewotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8aW5kZXg7IGkrKykgewotICAgICAgICAgICAgaWYgKG1JY29uc1tpXSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY29weUZyb20oU3RhdHVzQmFySWNvbkxpc3QgdGhhdCkgewotICAgICAgICBpZiAodGhhdC5tU2xvdHMgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5tU2xvdHMgPSBudWxsOwotICAgICAgICAgICAgdGhpcy5tSWNvbnMgPSBudWxsOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmluYWwgaW50IE4gPSB0aGF0Lm1TbG90cy5sZW5ndGg7Ci0gICAgICAgICAgICB0aGlzLm1TbG90cyA9IG5ldyBTdHJpbmdbTl07Ci0gICAgICAgICAgICB0aGlzLm1JY29ucyA9IG5ldyBTdGF0dXNCYXJJY29uW05dOwotICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgewotICAgICAgICAgICAgICAgIHRoaXMubVNsb3RzW2ldID0gdGhhdC5tU2xvdHNbaV07Ci0gICAgICAgICAgICAgICAgdGhpcy5tSWNvbnNbaV0gPSB0aGF0Lm1JY29uc1tpXSAhPSBudWxsID8gdGhhdC5tSWNvbnNbaV0uY2xvbmUoKSA6IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3KSB7Ci0gICAgICAgIGZpbmFsIGludCBOID0gbVNsb3RzLmxlbmd0aDsKLSAgICAgICAgcHcucHJpbnRsbigiSWNvbiBsaXN0OiIpOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBwdy5wcmludGYoIiAgJTJkOiAoJXMpICVzXG4iLCBpLCBtU2xvdHNbaV0sIG1JY29uc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9BcnJheVV0aWxzLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9BcnJheVV0aWxzLmphdmEKaW5kZXggZTg5NzBiYy4uY2ExMzM0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvQXJyYXlVdGlscy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0FycmF5VXRpbHMuamF2YQpAQCAtMjYsNiArMjYsNyBAQAogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXk7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogCiAvKioKQEAgLTEyNSwyOCArMTI2LDI4IEBACiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGdpdmVuIGFycmF5IGlzIG51bGwgb3IgaGFzIHplcm8gZWxlbWVudHMuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBpc0VtcHR5KFRbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gaXNFbXB0eShATnVsbGFibGUgVFtdIGFycmF5KSB7CiAgICAgICAgIHJldHVybiBhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA9PSAwOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBnaXZlbiBhcnJheSBpcyBudWxsIG9yIGhhcyB6ZXJvIGVsZW1lbnRzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KGludFtdIGFycmF5KSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRW1wdHkoQE51bGxhYmxlIGludFtdIGFycmF5KSB7CiAgICAgICAgIHJldHVybiBhcnJheSA9PSBudWxsIHx8IGFycmF5Lmxlbmd0aCA9PSAwOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBnaXZlbiBhcnJheSBpcyBudWxsIG9yIGhhcyB6ZXJvIGVsZW1lbnRzLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KGxvbmdbXSBhcnJheSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0VtcHR5KEBOdWxsYWJsZSBsb25nW10gYXJyYXkpIHsKICAgICAgICAgcmV0dXJuIGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoID09IDA7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQ2hlY2tzIGlmIGdpdmVuIGFycmF5IGlzIG51bGwgb3IgaGFzIHplcm8gZWxlbWVudHMuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRW1wdHkoYnl0ZVtdIGFycmF5KSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRW1wdHkoQE51bGxhYmxlIGJ5dGVbXSBhcnJheSkgewogICAgICAgICByZXR1cm4gYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPT0gMDsKICAgICB9CiAKQEAgLTE1Niw3ICsxNTcsNyBAQAogICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gY2hlY2sgZm9yCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBpcyBwcmVzZW50IGluIHRoZSBhcnJheQogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gY29udGFpbnMoVFtdIGFycmF5LCBUIHZhbHVlKSB7CisgICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWlucyhATnVsbGFibGUgVFtdIGFycmF5LCBUIHZhbHVlKSB7CiAgICAgICAgIHJldHVybiBpbmRleE9mKGFycmF5LCB2YWx1ZSkgIT0gLTE7CiAgICAgfQogCkBAIC0xNjQsNyArMTY1LDcgQEAKICAgICAgKiBSZXR1cm4gZmlyc3QgaW5kZXggb2Yge0Bjb2RlIHZhbHVlfSBpbiB7QGNvZGUgYXJyYXl9LCBvciB7QGNvZGUgLTF9IGlmCiAgICAgICogbm90IGZvdW5kLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGludCBpbmRleE9mKFRbXSBhcnJheSwgVCB2YWx1ZSkgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGludCBpbmRleE9mKEBOdWxsYWJsZSBUW10gYXJyYXksIFQgdmFsdWUpIHsKICAgICAgICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiAtMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWxzKGFycmF5W2ldLCB2YWx1ZSkpIHJldHVybiBpOwpAQCAtMTc1LDcgKzE3Niw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBpZiBhbGwge0Bjb2RlIGNoZWNrfSBpdGVtcyBhcmUgY29udGFpbmVkIGluIHtAY29kZSBhcnJheX0uCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWluc0FsbChUW10gYXJyYXksIFRbXSBjaGVjaykgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gY29udGFpbnNBbGwoQE51bGxhYmxlIFRbXSBhcnJheSwgVFtdIGNoZWNrKSB7CiAgICAgICAgIGlmIChjaGVjayA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgZm9yIChUIGNoZWNrSXRlbSA6IGNoZWNrKSB7CiAgICAgICAgICAgICBpZiAoIWNvbnRhaW5zKGFycmF5LCBjaGVja0l0ZW0pKSB7CkBAIC0xODUsNyArMTg2LDcgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKGludFtdIGFycmF5LCBpbnQgdmFsdWUpIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY29udGFpbnMoQE51bGxhYmxlIGludFtdIGFycmF5LCBpbnQgdmFsdWUpIHsKICAgICAgICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICAgZm9yIChpbnQgZWxlbWVudCA6IGFycmF5KSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSB2YWx1ZSkgewpAQCAtMTk1LDcgKzE5Niw3IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY29udGFpbnMobG9uZ1tdIGFycmF5LCBsb25nIHZhbHVlKSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbnRhaW5zKEBOdWxsYWJsZSBsb25nW10gYXJyYXksIGxvbmcgdmFsdWUpIHsKICAgICAgICAgaWYgKGFycmF5ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICAgZm9yIChsb25nIGVsZW1lbnQgOiBhcnJheSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gdmFsdWUpIHsKQEAgLTIwNSwxMCArMjA2LDEyIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIGxvbmcgdG90YWwobG9uZ1tdIGFycmF5KSB7CisgICAgcHVibGljIHN0YXRpYyBsb25nIHRvdGFsKEBOdWxsYWJsZSBsb25nW10gYXJyYXkpIHsKICAgICAgICAgbG9uZyB0b3RhbCA9IDA7Ci0gICAgICAgIGZvciAobG9uZyB2YWx1ZSA6IGFycmF5KSB7Ci0gICAgICAgICAgICB0b3RhbCArPSB2YWx1ZTsKKyAgICAgICAgaWYgKGFycmF5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAobG9uZyB2YWx1ZSA6IGFycmF5KSB7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gdmFsdWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRvdGFsOwogICAgIH0KQEAgLTM2NiwxMSArMzY5LDE1IEBACiAgICAgICAgIHJldHVybiBjdXI7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBsb25nW10gY2xvbmVPck51bGwobG9uZ1tdIGFycmF5KSB7CisgICAgcHVibGljIHN0YXRpYyBATnVsbGFibGUgbG9uZ1tdIGNsb25lT3JOdWxsKEBOdWxsYWJsZSBsb25nW10gYXJyYXkpIHsKICAgICAgICAgcmV0dXJuIChhcnJheSAhPSBudWxsKSA/IGFycmF5LmNsb25lKCkgOiBudWxsOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgPFQ+IEFycmF5U2V0PFQ+IGFkZChBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CisgICAgcHVibGljIHN0YXRpYyBATnVsbGFibGUgPFQ+IEFycmF5U2V0PFQ+IGNsb25lT3JOdWxsKEBOdWxsYWJsZSBBcnJheVNldDxUPiBhcnJheSkgeworICAgICAgICByZXR1cm4gKGFycmF5ICE9IG51bGwpID8gbmV3IEFycmF5U2V0PFQ+KGFycmF5KSA6IG51bGw7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBATm9uTnVsbCA8VD4gQXJyYXlTZXQ8VD4gYWRkKEBOdWxsYWJsZSBBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CiAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgewogICAgICAgICAgICAgY3VyID0gbmV3IEFycmF5U2V0PD4oKTsKICAgICAgICAgfQpAQCAtMzc4LDcgKzM4NSw3IEBACiAgICAgICAgIHJldHVybiBjdXI7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gQXJyYXlTZXQ8VD4gcmVtb3ZlKEFycmF5U2V0PFQ+IGN1ciwgVCB2YWwpIHsKKyAgICBwdWJsaWMgc3RhdGljIEBOdWxsYWJsZSA8VD4gQXJyYXlTZXQ8VD4gcmVtb3ZlKEBOdWxsYWJsZSBBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CiAgICAgICAgIGlmIChjdXIgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KQEAgLTM5MCwxMSArMzk3LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGNvbnRhaW5zKEFycmF5U2V0PFQ+IGN1ciwgVCB2YWwpIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBib29sZWFuIGNvbnRhaW5zKEBOdWxsYWJsZSBBcnJheVNldDxUPiBjdXIsIFQgdmFsKSB7CiAgICAgICAgIHJldHVybiAoY3VyICE9IG51bGwpID8gY3VyLmNvbnRhaW5zKHZhbCkgOiBmYWxzZTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIDxUPiBBcnJheUxpc3Q8VD4gYWRkKEFycmF5TGlzdDxUPiBjdXIsIFQgdmFsKSB7CisgICAgcHVibGljIHN0YXRpYyBATm9uTnVsbCA8VD4gQXJyYXlMaXN0PFQ+IGFkZChATnVsbGFibGUgQXJyYXlMaXN0PFQ+IGN1ciwgVCB2YWwpIHsKICAgICAgICAgaWYgKGN1ciA9PSBudWxsKSB7CiAgICAgICAgICAgICBjdXIgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgfQpAQCAtNDAyLDcgKzQwOSw3IEBACiAgICAgICAgIHJldHVybiBjdXI7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gQXJyYXlMaXN0PFQ+IHJlbW92ZShBcnJheUxpc3Q8VD4gY3VyLCBUIHZhbCkgeworICAgIHB1YmxpYyBzdGF0aWMgQE51bGxhYmxlIDxUPiBBcnJheUxpc3Q8VD4gcmVtb3ZlKEBOdWxsYWJsZSBBcnJheUxpc3Q8VD4gY3VyLCBUIHZhbCkgewogICAgICAgICBpZiAoY3VyID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC00MTQsMTAgKzQyMSwyMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyA8VD4gYm9vbGVhbiBjb250YWlucyhBcnJheUxpc3Q8VD4gY3VyLCBUIHZhbCkgeworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IGJvb2xlYW4gY29udGFpbnMoQE51bGxhYmxlIEFycmF5TGlzdDxUPiBjdXIsIFQgdmFsKSB7CiAgICAgICAgIHJldHVybiAoY3VyICE9IG51bGwpID8gY3VyLmNvbnRhaW5zKHZhbCkgOiBmYWxzZTsKICAgICB9CiAKKyAgICBwdWJsaWMgc3RhdGljIEBOdWxsYWJsZSA8VD4gVFtdIHRyaW1Ub1NpemUoQE51bGxhYmxlIFRbXSBhcnJheSwgaW50IHNpemUpIHsKKyAgICAgICAgaWYgKGFycmF5ID09IG51bGwgfHwgc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSBlbHNlIGlmIChhcnJheS5sZW5ndGggPT0gc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5jb3B5T2YoYXJyYXksIHNpemUpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB0d28gQXJyYXlMaXN0cyBhcmUgZXF1YWwgd2l0aCByZXNwZWN0IHRvIHRoZSBvYmplY3RzIHRoZXkgY29udGFpbi4KICAgICAgKiBUaGUgb2JqZWN0cyBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFuZCBiZSByZWZlcmVuY2UgZXF1YWwgKD09IG5vdCAuZXF1YWxzKCkpLgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvSW5kZW50aW5nUHJpbnRXcml0ZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0luZGVudGluZ1ByaW50V3JpdGVyLmphdmEKaW5kZXggZjFhZGQyNy4uNjk2NjY3YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvSW5kZW50aW5nUHJpbnRXcml0ZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9JbmRlbnRpbmdQcmludFdyaXRlci5qYXZhCkBAIC00NSw2ICs0NSw4IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBib29sZWFuIG1FbXB0eUxpbmUgPSB0cnVlOwogCisgICAgcHJpdmF0ZSBjaGFyW10gbVNpbmdsZUNoYXIgPSBuZXcgY2hhclsxXTsKKwogICAgIHB1YmxpYyBJbmRlbnRpbmdQcmludFdyaXRlcihXcml0ZXIgd3JpdGVyLCBTdHJpbmcgc2luZ2xlSW5kZW50KSB7CiAgICAgICAgIHRoaXMod3JpdGVyLCBzaW5nbGVJbmRlbnQsIC0xKTsKICAgICB9CkBAIC03OCw2ICs4MCwyNCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHByaW50bG4oKSB7CisgICAgICAgIHdyaXRlKCdcbicpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBjKSB7CisgICAgICAgIG1TaW5nbGVDaGFyWzBdID0gKGNoYXIpIGM7CisgICAgICAgIHdyaXRlKG1TaW5nbGVDaGFyLCAwLCAxKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShTdHJpbmcgcywgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICBmaW5hbCBjaGFyW10gYnVmID0gbmV3IGNoYXJbbGVuXTsKKyAgICAgICAgcy5nZXRDaGFycyhvZmYsIGxlbiAtIG9mZiwgYnVmLCAwKTsKKyAgICAgICAgd3JpdGUoYnVmLCAwLCBsZW4pOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHdyaXRlKGNoYXJbXSBidWYsIGludCBvZmZzZXQsIGludCBjb3VudCkgewogICAgICAgICBmaW5hbCBpbnQgaW5kZW50TGVuZ3RoID0gbUluZGVudEJ1aWxkZXIubGVuZ3RoKCk7CiAgICAgICAgIGZpbmFsIGludCBidWZmZXJFbmQgPSBvZmZzZXQgKyBjb3VudDsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0xpbmVCcmVha0J1ZmZlcmVkV3JpdGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9MaW5lQnJlYWtCdWZmZXJlZFdyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzFlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9MaW5lQnJlYWtCdWZmZXJlZFdyaXRlci5qYXZhCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsOworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIEEgd3JpdGVyIHRoYXQgYnJlYWtzIHVwIGl0cyBvdXRwdXQgaW50byBjaHVua3MgYmVmb3JlIHdyaXRpbmcgdG8gaXRzIG91dCB3cml0ZXIsCisgKiBhbmQgd2hpY2ggaXMgbGluZWJyZWFrIGF3YXJlLCBpLmUuLCBjaHVua3Mgd2lsbCBjcmVhdGVkIGFsb25nIGxpbmUgYnJlYWtzLCBpZgorICogcG9zc2libGUuCisgKgorICogTm90ZTogdGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuCisgKi8KK3B1YmxpYyBjbGFzcyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBleHRlbmRzIFByaW50V3JpdGVyIHsKKworICAgIC8qKgorICAgICAqIEEgYnVmZmVyIHRvIGNvbGxlY3QgZGF0YSB1bnRpbCB0aGUgYnVmZmVyIHNpemUgaXMgcmVhY2hlZC4KKyAgICAgKgorICAgICAqIE5vdGU6IHdlIG1hbmFnZSBhIGNoYXJbXSBvdXJzZWx2ZXMgdG8gYXZvaWQgYW4gYWxsb2NhdGlvbiB3aGVuIHByaW50aW5nIHRvIHRoZQorICAgICAqICAgICAgIG91dCB3cml0ZXIuIE90aGVyd2lzZSBhIFN0cmluZ0J1aWxkZXIgd291bGQgaGF2ZSBiZWVuIHNpbXBsZXIgdG8gdXNlLgorICAgICAqLworICAgIHByaXZhdGUgY2hhcltdIGJ1ZmZlcjsKKworICAgIC8qKgorICAgICAqIFRoZSBpbmRleCBvZiB0aGUgZmlyc3QgZnJlZSBlbGVtZW50IGluIHRoZSBidWZmZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgYnVmZmVySW5kZXg7CisKKyAgICAvKioKKyAgICAgKiBUaGUgY2h1bmsgc2l6ZSAoPW1heGltdW0gYnVmZmVyIHNpemUpIHRvIHVzZSBmb3IgdGhpcyB3cml0ZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgYnVmZmVyU2l6ZTsKKworCisgICAgLyoqCisgICAgICogSW5kZXggb2YgdGhlIGxhc3QgbmV3bGluZSBjaGFyYWN0ZXIgZGlzY292ZXJlZCBpbiB0aGUgYnVmZmVyLiBUaGUgd3JpdGVyIHdpbGwgdHJ5CisgICAgICogdG8gc3BsaXQgdGhlcmUuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbGFzdE5ld2xpbmUgPSAtMTsKKworICAgIC8qKgorICAgICAqIFRoZSBsaW5lIHNlcGFyYXRvciBmb3IgcHJpbnRsbigpLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGxpbmVTZXBhcmF0b3I7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbGluZWJyZWFrLWF3YXJlIGJ1ZmZlcmVkIHdyaXRlciB3aXRoIHRoZSBnaXZlbiBvdXRwdXQgYW5kIGJ1ZmZlcgorICAgICAqIHNpemUuIFRoZSBpbml0aWFsIGNhcGFjaXR5IHdpbGwgYmUgYSBkZWZhdWx0IHZhbHVlLgorICAgICAqIEBwYXJhbSBvdXQgVGhlIHdyaXRlciB0byB3cml0ZSB0by4KKyAgICAgKiBAcGFyYW0gYnVmZmVyU2l6ZSBUaGUgbWF4aW11bSBidWZmZXIgc2l6ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIoV3JpdGVyIG91dCwgaW50IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgdGhpcyhvdXQsIGJ1ZmZlclNpemUsIDE2KTsgIC8vIDE2IGlzIHRoZSBkZWZhdWx0IHNpemUgb2YgYSBTdHJpbmdCdWlsZGVyIGJ1ZmZlci4KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSBuZXcgbGluZWJyZWFrLWF3YXJlIGJ1ZmZlcmVkIHdyaXRlciB3aXRoIHRoZSBnaXZlbiBvdXRwdXQsIGJ1ZmZlcgorICAgICAqIHNpemUgYW5kIGluaXRpYWwgY2FwYWNpdHkuCisgICAgICogQHBhcmFtIG91dCBUaGUgd3JpdGVyIHRvIHdyaXRlIHRvLgorICAgICAqIEBwYXJhbSBidWZmZXJTaXplIFRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplLgorICAgICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgVGhlIGluaXRpYWwgY2FwYWNpdHkgb2YgdGhlIGludGVybmFsIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIoV3JpdGVyIG91dCwgaW50IGJ1ZmZlclNpemUsIGludCBpbml0aWFsQ2FwYWNpdHkpIHsKKyAgICAgICAgc3VwZXIob3V0KTsKKyAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgY2hhcltNYXRoLm1pbihpbml0aWFsQ2FwYWNpdHksIGJ1ZmZlclNpemUpXTsKKyAgICAgICAgdGhpcy5idWZmZXJJbmRleCA9IDA7CisgICAgICAgIHRoaXMuYnVmZmVyU2l6ZSA9IGJ1ZmZlclNpemU7CisgICAgICAgIHRoaXMubGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGbHVzaCB0aGUgY3VycmVudCBidWZmZXIuIFRoaXMgd2lsbCBpZ25vcmUgbGluZSBicmVha3MuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgZmx1c2goKSB7CisgICAgICAgIHdyaXRlQnVmZmVyKGJ1ZmZlckluZGV4KTsKKyAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICBzdXBlci5mbHVzaCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKGludCBjKSB7CisgICAgICAgIGlmIChidWZmZXJJbmRleCA8IGJ1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJJbmRleF0gPSAoY2hhciljOworICAgICAgICAgICAgYnVmZmVySW5kZXgrKzsKKyAgICAgICAgICAgIGlmICgoY2hhciljID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICBsYXN0TmV3bGluZSA9IGJ1ZmZlckluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgYW4gdW5jb21tb24gY2FzZSwgd2UgbW9zdGx5IGV4cGVjdCBjaGFyW10gYW5kIFN0cmluZy4gU28KKyAgICAgICAgICAgIC8vIGxldCB0aGUgY2h1bmtpbmcgYmUgaGFuZGxlZCBieSB0aGUgY2hhcltdIGNhc2UuCisgICAgICAgICAgICB3cml0ZShuZXcgY2hhcltdIHsgKGNoYXIpYyB9LCAwICwxKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHByaW50bG4oKSB7CisgICAgICAgIHdyaXRlKGxpbmVTZXBhcmF0b3IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKGNoYXJbXSBidWYsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlckluZGV4ICsgbGVuID4gYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBuZXdsaW5lIGluIHRoZSBidWZmZXIsIHNlZSBpZiB0aGF0J3MgYmVsb3cgdGhlIGxpbWl0LgorICAgICAgICAgICAgLy8gUmVwZWF0LgorICAgICAgICAgICAgaW50IG5leHROZXdMaW5lID0gLTE7CisgICAgICAgICAgICBpbnQgbWF4TGVuZ3RoID0gYnVmZmVyU2l6ZSAtIGJ1ZmZlckluZGV4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChidWZbb2ZmICsgaV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVySW5kZXggKyBpIDwgYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE5ld0xpbmUgPSBpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuZXh0TmV3TGluZSAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBhZGQgc29tZSBtb3JlIGRhdGEuCisgICAgICAgICAgICAgICAgYXBwZW5kVG9CdWZmZXIoYnVmLCBvZmYsIG5leHROZXdMaW5lKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gLTE7CisgICAgICAgICAgICAgICAgb2ZmICs9IG5leHROZXdMaW5lICsgMTsKKyAgICAgICAgICAgICAgICBsZW4gLT0gbmV4dE5ld0xpbmUgKyAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0TmV3bGluZSAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbGFzdCBuZXdsaW5lLgorICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVyKGxhc3ROZXdsaW5lKTsKKyAgICAgICAgICAgICAgICByZW1vdmVGcm9tQnVmZmVyKGxhc3ROZXdsaW5lICsgMSk7CisgICAgICAgICAgICAgICAgbGFzdE5ld2xpbmUgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gT0ssIHRoZXJlIHdhcyBubyBuZXdsaW5lLCBicmVhayBhdCBhIGZ1bGwgYnVmZmVyLgorICAgICAgICAgICAgICAgIGludCByZXN0ID0gYnVmZmVyU2l6ZSAtIGJ1ZmZlckluZGV4OworICAgICAgICAgICAgICAgIGFwcGVuZFRvQnVmZmVyKGJ1Ziwgb2ZmLCByZXN0KTsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIG9mZiArPSByZXN0OworICAgICAgICAgICAgICAgIGxlbiAtPSByZXN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkIHRvIHRoZSBidWZmZXIsIHRoaXMgd2lsbCBmaXQuCisgICAgICAgIGlmIChsZW4gPiAwKSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIGNoYXJzLCBmaW5kIHRoZSBsYXN0IG5ld2xpbmUuCisgICAgICAgICAgICBhcHBlbmRUb0J1ZmZlcihidWYsIG9mZiwgbGVuKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIGlmIChidWZbb2ZmICsgaV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBsYXN0TmV3bGluZSA9IGJ1ZmZlckluZGV4IC0gbGVuICsgaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgd3JpdGUoU3RyaW5nIHMsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgd2hpbGUgKGJ1ZmZlckluZGV4ICsgbGVuID4gYnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCBuZXdsaW5lIGluIHRoZSBidWZmZXIsIHNlZSBpZiB0aGF0J3MgYmVsb3cgdGhlIGxpbWl0LgorICAgICAgICAgICAgLy8gUmVwZWF0LgorICAgICAgICAgICAgaW50IG5leHROZXdMaW5lID0gLTE7CisgICAgICAgICAgICBpbnQgbWF4TGVuZ3RoID0gYnVmZmVyU2l6ZSAtIGJ1ZmZlckluZGV4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChzLmNoYXJBdChvZmYgKyBpKSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJJbmRleCArIGkgPCBidWZmZXJTaXplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TmV3TGluZSA9IGk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5leHROZXdMaW5lICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGFkZCBzb21lIG1vcmUgZGF0YS4KKyAgICAgICAgICAgICAgICBhcHBlbmRUb0J1ZmZlcihzLCBvZmYsIG5leHROZXdMaW5lKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlcihidWZmZXJJbmRleCk7CisgICAgICAgICAgICAgICAgYnVmZmVySW5kZXggPSAwOworICAgICAgICAgICAgICAgIGxhc3ROZXdsaW5lID0gLTE7CisgICAgICAgICAgICAgICAgb2ZmICs9IG5leHROZXdMaW5lICsgMTsKKyAgICAgICAgICAgICAgICBsZW4gLT0gbmV4dE5ld0xpbmUgKyAxOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0TmV3bGluZSAhPSAtMSkgeworICAgICAgICAgICAgICAgIC8vIFVzZSB0aGUgbGFzdCBuZXdsaW5lLgorICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVyKGxhc3ROZXdsaW5lKTsKKyAgICAgICAgICAgICAgICByZW1vdmVGcm9tQnVmZmVyKGxhc3ROZXdsaW5lICsgMSk7CisgICAgICAgICAgICAgICAgbGFzdE5ld2xpbmUgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gT0ssIHRoZXJlIHdhcyBubyBuZXdsaW5lLCBicmVhayBhdCBhIGZ1bGwgYnVmZmVyLgorICAgICAgICAgICAgICAgIGludCByZXN0ID0gYnVmZmVyU2l6ZSAtIGJ1ZmZlckluZGV4OworICAgICAgICAgICAgICAgIGFwcGVuZFRvQnVmZmVyKHMsIG9mZiwgcmVzdCk7CisgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXIoYnVmZmVySW5kZXgpOworICAgICAgICAgICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBvZmYgKz0gcmVzdDsKKyAgICAgICAgICAgICAgICBsZW4gLT0gcmVzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZCB0byB0aGUgYnVmZmVyLCB0aGlzIHdpbGwgZml0LgorICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgLy8gQWRkIHRoZSBjaGFycywgZmluZCB0aGUgbGFzdCBuZXdsaW5lLgorICAgICAgICAgICAgYXBwZW5kVG9CdWZmZXIocywgb2ZmLCBsZW4pOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgaWYgKHMuY2hhckF0KG9mZiArIGkpID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdE5ld2xpbmUgPSBidWZmZXJJbmRleCAtIGxlbiArIGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEFwcGVuZCB0aGUgY2hhcmFjdGVycyB0byB0aGUgYnVmZmVyLiBUaGlzIHdpbGwgcG90ZW50aWFsbHkgcmVzaXplIHRoZSBidWZmZXIsCisgICAgICogYW5kIG1vdmUgdGhlIGluZGV4IGFsb25nLgorICAgICAqIEBwYXJhbSBidWYgVGhlIGNoYXJbXSBjb250YWluaW5nIHRoZSBkYXRhLgorICAgICAqIEBwYXJhbSBvZmYgVGhlIHN0YXJ0IGluZGV4IHRvIGNvcHkgZnJvbS4KKyAgICAgKiBAcGFyYW0gbGVuIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhcHBlbmRUb0J1ZmZlcihjaGFyW10gYnVmLCBpbnQgb2ZmLCBpbnQgbGVuKSB7CisgICAgICAgIGlmIChidWZmZXJJbmRleCArIGxlbiA+IGJ1ZmZlci5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVuc3VyZUNhcGFjaXR5KGJ1ZmZlckluZGV4ICsgbGVuKTsKKyAgICAgICAgfQorICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1Ziwgb2ZmLCBidWZmZXIsIGJ1ZmZlckluZGV4LCBsZW4pOworICAgICAgICBidWZmZXJJbmRleCArPSBsZW47CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwZW5kIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgYnVmZmVyLiBUaGlzIHdpbGwgcG90ZW50aWFsbHkKKyAgICAgKiByZXNpemUgdGhlIGJ1ZmZlciwgYW5kIG1vdmUgdGhlIGluZGV4IGFsb25nLgorICAgICAqIEBwYXJhbSBzIFRoZSBzdHJpbmcgc3VwcGx5aW5nIHRoZSBjaGFyYWN0ZXJzLgorICAgICAqIEBwYXJhbSBvZmYgVGhlIHN0YXJ0IGluZGV4IHRvIGNvcHkgZnJvbS4KKyAgICAgKiBAcGFyYW0gbGVuIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb3B5LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhcHBlbmRUb0J1ZmZlcihTdHJpbmcgcywgaW50IG9mZiwgaW50IGxlbikgeworICAgICAgICBpZiAoYnVmZmVySW5kZXggKyBsZW4gPiBidWZmZXIubGVuZ3RoKSB7CisgICAgICAgICAgICBlbnN1cmVDYXBhY2l0eShidWZmZXJJbmRleCArIGxlbik7CisgICAgICAgIH0KKyAgICAgICAgcy5nZXRDaGFycyhvZmYsIG9mZiArIGxlbiwgYnVmZmVyLCBidWZmZXJJbmRleCk7CisgICAgICAgIGJ1ZmZlckluZGV4ICs9IGxlbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXNpemUgdGhlIGJ1ZmZlci4gV2UgdXNlIHRoZSB1c3VhbCBkb3VibGUtdGhlLXNpemUgcGx1cyBjb25zdGFudCBzY2hlbWUgZm9yCisgICAgICogYW1vcnRpemVkIE8oMSkgaW5zZXJ0LiBOb3RlOiB3ZSBleHBlY3Qgc21hbGwgYnVmZmVycywgc28gdGhpcyB3b24ndCBjaGVjayBmb3IKKyAgICAgKiBvdmVyZmxvdy4KKyAgICAgKiBAcGFyYW0gY2FwYWNpdHkgVGhlIHNpemUgdG8gYmUgZW5zdXJlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IGNhcGFjaXR5KSB7CisgICAgICAgIGludCBuZXdTaXplID0gYnVmZmVyLmxlbmd0aCAqIDIgKyAyOworICAgICAgICBpZiAobmV3U2l6ZSA8IGNhcGFjaXR5KSB7CisgICAgICAgICAgICBuZXdTaXplID0gY2FwYWNpdHk7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gQXJyYXlzLmNvcHlPZihidWZmZXIsIG5ld1NpemUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSB0aGUgY2hhcmFjdGVycyB1cCB0byAoYW5kIGV4Y2x1ZGluZykgaW5kZXggaSBmcm9tIHRoZSBidWZmZXIuIFRoaXMgd2lsbAorICAgICAqIG5vdCByZXNpemUgdGhlIGJ1ZmZlciwgYnV0IHdpbGwgdXBkYXRlIGJ1ZmZlckluZGV4LgorICAgICAqIEBwYXJhbSBpIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byByZW1vdmUgZnJvbSB0aGUgZnJvbnQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHJlbW92ZUZyb21CdWZmZXIoaW50IGkpIHsKKyAgICAgICAgaW50IHJlc3QgPSBidWZmZXJJbmRleCAtIGk7CisgICAgICAgIGlmIChyZXN0ID4gMCkgeworICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWZmZXIsIGJ1ZmZlckluZGV4IC0gcmVzdCwgYnVmZmVyLCAwLCByZXN0KTsKKyAgICAgICAgICAgIGJ1ZmZlckluZGV4ID0gcmVzdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEhlbHBlciBtZXRob2QsIHdyaXRlIHRoZSBnaXZlbiBwYXJ0IG9mIHRoZSBidWZmZXIsIFtzdGFydCxsZW5ndGgpLCB0byB0aGUgb3V0cHV0LgorICAgICAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGZsdXNoLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZUJ1ZmZlcihpbnQgbGVuZ3RoKSB7CisgICAgICAgIGlmIChsZW5ndGggPiAwKSB7CisgICAgICAgICAgICBzdXBlci53cml0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdXRpbC9TdGF0ZU1hY2hpbmUuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL1N0YXRlTWFjaGluZS5qYXZhCmluZGV4IDU1NGQzNjcuLmRjNjY4MTggMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL1N0YXRlTWFjaGluZS5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL1N0YXRlTWFjaGluZS5qYXZhCkBAIC03NzksNiArNzc5LDEwIEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbXNnKSB7CiAgICAgICAgICAgICBpZiAoIW1IYXNRdWl0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1TbSAhPSBudWxsICYmIG1zZy53aGF0ICE9IFNNX0lOSVRfQ01EICYmIG1zZy53aGF0ICE9IFNNX1FVSVRfQ01EKSB7CisgICAgICAgICAgICAgICAgICAgIG1TbS5vblByZUhhbmRsZU1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAobURiZykgbVNtLmxvZygiaGFuZGxlTWVzc2FnZTogRSBtc2cud2hhdD0iICsgbXNnLndoYXQpOwogCiAgICAgICAgICAgICAgICAgLyoqIFNhdmUgdGhlIGN1cnJlbnQgbWVzc2FnZSAqLwpAQCAtODAyLDYgKzgwNiwxMCBAQAogCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBtU20gPT0gbnVsbCBoZXJlIGFzIHdlIGNvdWxkIGJlIHF1aXR0aW5nLgogICAgICAgICAgICAgICAgIGlmIChtRGJnICYmIG1TbSAhPSBudWxsKSBtU20ubG9nKCJoYW5kbGVNZXNzYWdlOiBYIik7CisKKyAgICAgICAgICAgICAgICBpZiAobVNtICE9IG51bGwgJiYgbXNnLndoYXQgIT0gU01fSU5JVF9DTUQgJiYgbXNnLndoYXQgIT0gU01fUVVJVF9DTUQpIHsKKyAgICAgICAgICAgICAgICAgICAgbVNtLm9uUG9zdEhhbmRsZU1lc3NhZ2UobXNnKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTI3NCw2ICsxMjgyLDIxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogTm90aWZpZXMgc3ViY2xhc3MgdGhhdCB0aGUgU3RhdGVNYWNoaW5lIGhhbmRsZXIgaXMgYWJvdXQgdG8gcHJvY2VzcyB0aGUgTWVzc2FnZSBtc2cKKyAgICAgKiBAcGFyYW0gbXNnIFRoZSBtZXNzYWdlIHRoYXQgaXMgYmVpbmcgaGFuZGxlZAorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIG9uUHJlSGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vdGlmaWVzIHN1YmNsYXNzIHRoYXQgdGhlIFN0YXRlTWFjaGluZSBoYW5kbGVyIGhhcyBmaW5pc2hlZCBwcm9jZXNzaW5nIHRoZSBNZXNzYWdlIG1zZyBhbmQKKyAgICAgKiBoYXMgcG9zc2libHkgdHJhbnNpdGlvbmVkIHRvIGEgbmV3IHN0YXRlLgorICAgICAqIEBwYXJhbSBtc2cgVGhlIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyBoYW5kbGVkCisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0SGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgeworICAgIH0KKworICAgIC8qKgogICAgICAqIEFkZCBhIG5ldyBzdGF0ZSB0byB0aGUgc3RhdGUgbWFjaGluZQogICAgICAqIEBwYXJhbSBzdGF0ZSB0aGUgc3RhdGUgdG8gYWRkCiAgICAgICogQHBhcmFtIHBhcmVudCB0aGUgcGFyZW50IG9mIHN0YXRlCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9CYXNlSVdpbmRvdy5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQmFzZUlXaW5kb3cuamF2YQppbmRleCA4Njk5ODQzLi5hYTRiNTY0YyAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvQmFzZUlXaW5kb3cuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9CYXNlSVdpbmRvdy5qYXZhCkBAIC0yNSw2ICsyNSw4IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklXaW5kb3dTZXNzaW9uOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSVJlc3VsdFJlY2VpdmVyOworCiBwdWJsaWMgY2xhc3MgQmFzZUlXaW5kb3cgZXh0ZW5kcyBJV2luZG93LlN0dWIgewogICAgIHByaXZhdGUgSVdpbmRvd1Nlc3Npb24gbVNlc3Npb247CiAgICAgcHVibGljIGludCBtU2VxOwpAQCAtMTAzLDQgKzEwNSw4IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hXaW5kb3dTaG93bigpIHsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZXF1ZXN0QXBwS2V5Ym9hcmRTaG9ydGN1dHMoSVJlc3VsdFJlY2VpdmVyIHJlY2VpdmVyKSB7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9uSG9sZGVyLmFpZGwgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25zLmFpZGwKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9uSG9sZGVyLmFpZGwKcmVuYW1lIHRvIGNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbnMuYWlkbAppbmRleCBlNjBhYjBlLi4yNDM4YmRhIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25Ib2xkZXIuYWlkbAorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25zLmFpZGwKQEAgLTE2LDExICsxNiwxMyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXc7CiAKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CisKIC8qKgogICogSW50ZXJmYWNlIHRvIGFsbG93IGEgZHJvcCByZWNlaXZlciB0byByZXF1ZXN0IHBlcm1pc3Npb25zIGZvciBVUklzIHBhc3NlZCBhbG9uZyB3aXRoIENsaXBEYXRhCiAgKiBjb250YWluZWQgaW4gRHJhZ0V2ZW50LgogICovCi1pbnRlcmZhY2UgSURyb3BQZXJtaXNzaW9uSG9sZGVyIHsKLSAgICB2b2lkIGdyYW50KCk7Ci0gICAgdm9pZCByZXZva2UoKTsKK2ludGVyZmFjZSBJRHJvcFBlcm1pc3Npb25zIHsKKyAgICB2b2lkIHRha2UoSUJpbmRlciBhY3Rpdml0eVRva2VuKTsKKyAgICB2b2lkIHJlbGVhc2UoKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQmFzZU1lbnVQcmVzZW50ZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQmFzZU1lbnVQcmVzZW50ZXIuamF2YQppbmRleCA5MmU5ZWE2Li43YWMwYWMzIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0Jhc2VNZW51UHJlc2VudGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9CYXNlTWVudVByZXNlbnRlci5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51OwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKQEAgLTU4LDcgKzYwLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBpbml0Rm9yTWVudShDb250ZXh0IGNvbnRleHQsIE1lbnVCdWlsZGVyIG1lbnUpIHsKKyAgICBwdWJsaWMgdm9pZCBpbml0Rm9yTWVudShATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBOdWxsYWJsZSBNZW51QnVpbGRlciBtZW51KSB7CiAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKICAgICAgICAgbUluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCk7CiAgICAgICAgIG1NZW51ID0gbWVudTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQ2FzY2FkaW5nTWVudVBvcHVwLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0Nhc2NhZGluZ01lbnVQb3B1cC5qYXZhCmluZGV4IGU5Yjg0NDcuLjMyMGRlOTAgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvQ2FzY2FkaW5nTWVudVBvcHVwLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9DYXNjYWRpbmdNZW51UG9wdXAuamF2YQpAQCAtMyw2ICszLDcgQEAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uQXR0clJlczsKQEAgLTM2LDYgKzM3LDcgQEAKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Qb3B1cFdpbmRvdy5PbkRpc21pc3NMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zOwogCiAvKioKQEAgLTQ1LDYgKzQ3LDcgQEAKICAqLwogZmluYWwgY2xhc3MgQ2FzY2FkaW5nTWVudVBvcHVwIGV4dGVuZHMgTWVudVBvcHVwIGltcGxlbWVudHMgTWVudVByZXNlbnRlciwgT25LZXlMaXN0ZW5lciwKICAgICAgICAgUG9wdXBXaW5kb3cuT25EaXNtaXNzTGlzdGVuZXIgeworCiAgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQogICAgIEBJbnREZWYoe0hPUklaX1BPU0lUSU9OX0xFRlQsIEhPUklaX1BPU0lUSU9OX1JJR0hUfSkKICAgICBwdWJsaWMgQGludGVyZmFjZSBIb3JpelBvc2l0aW9uIHt9CkBAIC02NSwxMSArNjgsMTQgQEAKICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbU92ZXJmbG93T25seTsKICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbVN1Yk1lbnVIb3ZlckhhbmRsZXI7CiAKKyAgICAvKiogTGlzdCBvZiBtZW51cyB0aGF0IHdlcmUgYWRkZWQgYmVmb3JlIHRoaXMgcG9wdXAgd2FzIHNob3duLiAqLworICAgIHByaXZhdGUgZmluYWwgTGlzdDxNZW51QnVpbGRlcj4gbVBlbmRpbmdNZW51cyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKKwogICAgIC8qKgogICAgICAqIExpc3Qgb2Ygb3BlbiBtZW51cy4gVGhlIGZpcnN0IGl0ZW0gaXMgdGhlIHJvb3QgbWVudSBhbmQgZWFjaAogICAgICAqIHN1YnNlcXVlbnQgaXRlbSBpcyBhIGRpcmVjdCBzdWJtZW51IG9mIHRoZSBwcmV2aW91cyBpdGVtLgogICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgTGlzdDxDYXNjYWRpbmdNZW51SW5mbz4gbUFkZGVkTWVudXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8Q2FzY2FkaW5nTWVudUluZm8+IG1TaG93aW5nTWVudXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgIHByaXZhdGUgZmluYWwgT25HbG9iYWxMYXlvdXRMaXN0ZW5lciBtR2xvYmFsTGF5b3V0TGlzdGVuZXIgPSBuZXcgT25HbG9iYWxMYXlvdXRMaXN0ZW5lcigpIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC04MCw3ICs4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRpc21pc3MoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2hvd2luZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29tcHV0ZSB3aW5kb3cgc2l6ZXMgYW5kIHBvc2l0aW9ucy4KLSAgICAgICAgICAgICAgICAgICAgZm9yIChDYXNjYWRpbmdNZW51SW5mbyBpbmZvIDogbUFkZGVkTWVudXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChDYXNjYWRpbmdNZW51SW5mbyBpbmZvIDogbVNob3dpbmdNZW51cykgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5mby53aW5kb3cuc2hvdygpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtMTIzLDggKzEyOSw4IEBACiAKICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSBob3ZlcmVkIG1lbnUgd2l0aGluIHRoZSBhZGRlZCBtZW51cy4KICAgICAgICAgICAgIGludCBtZW51SW5kZXggPSAtMTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IG1BZGRlZE1lbnVzLnNpemUoKTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobWVudSA9PSBtQWRkZWRNZW51cy5nZXQoaSkubWVudSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbVNob3dpbmdNZW51cy5zaXplKCk7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1lbnUgPT0gbVNob3dpbmdNZW51cy5nZXQoaSkubWVudSkgewogICAgICAgICAgICAgICAgICAgICBtZW51SW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMzYsOCArMTQyLDggQEAKIAogICAgICAgICAgICAgZmluYWwgQ2FzY2FkaW5nTWVudUluZm8gbmV4dEluZm87CiAgICAgICAgICAgICBmaW5hbCBpbnQgbmV4dEluZGV4ID0gbWVudUluZGV4ICsgMTsKLSAgICAgICAgICAgIGlmIChuZXh0SW5kZXggPCBtQWRkZWRNZW51cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBuZXh0SW5mbyA9IG1BZGRlZE1lbnVzLmdldChuZXh0SW5kZXgpOworICAgICAgICAgICAgaWYgKG5leHRJbmRleCA8IG1TaG93aW5nTWVudXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgbmV4dEluZm8gPSBtU2hvd2luZ01lbnVzLmdldChuZXh0SW5kZXgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBuZXh0SW5mbyA9IG51bGw7CiAgICAgICAgICAgICB9CkBAIC0yMjgsMzUgKzIzNCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gU2hvdyBhbnkgbWVudXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQgdmlhICNhZGRNZW51KE1lbnVCdWlsZGVyKSBidXQKLSAgICAgICAgLy8gd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gc2hvd24uIEluIGEgdHlwaWNhbCB1c2UgY2FzZSwKLSAgICAgICAgLy8gI2FkZE1lbnUoTWVudUJ1aWxkZXIpIHdvdWxkIGJlIGNhbGxlZCBvbmNlLCBmb2xsb3dlZCBieSBhIGNhbGwgdG8KLSAgICAgICAgLy8gdGhpcyAjc2hvdygpIG1ldGhvZCAtLSB3aGljaCB3b3VsZCBhY3R1YWxseSBzaG93IHRoZSBwb3B1cCBvbiB0aGUKLSAgICAgICAgLy8gc2NyZWVuLgotICAgICAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBtQWRkZWRNZW51cy5zaXplKCk7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBpbmZvID0gbUFkZGVkTWVudXMuZ2V0KGkpOwotICAgICAgICAgICAgZmluYWwgTWVudVBvcHVwV2luZG93IHBvcHVwV2luZG93ID0gaW5mby53aW5kb3c7Ci0gICAgICAgICAgICBwb3B1cFdpbmRvdy5zaG93KCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIE1lbnVCdWlsZGVyIG1lbnUgPSBpbmZvLm1lbnU7Ci0gICAgICAgICAgICBpZiAoaSA9PSAwICYmIG1TaG93VGl0bGUgJiYgbWVudS5nZXRIZWFkZXJUaXRsZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBGcmFtZUxheW91dCB0aXRsZUl0ZW1WaWV3ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIChGcmFtZUxheW91dCkgTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkuaW5mbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5sYXlvdXQucG9wdXBfbWVudV9oZWFkZXJfaXRlbV9sYXlvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZ2V0TGlzdFZpZXcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwotICAgICAgICAgICAgICAgIFRleHRWaWV3IHRpdGxlVmlldyA9IChUZXh0VmlldykgdGl0bGVJdGVtVmlldy5maW5kVmlld0J5SWQoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnRpdGxlKTsKLSAgICAgICAgICAgICAgICB0aXRsZVZpZXcuc2V0VGV4dChtZW51LmdldEhlYWRlclRpdGxlKCkpOwotICAgICAgICAgICAgICAgIHRpdGxlSXRlbVZpZXcuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5nZXRMaXN0VmlldygpLmFkZEhlYWRlclZpZXcodGl0bGVJdGVtVmlldywgbnVsbCwgZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRvIHNob3cgdGhlIHRpdGxlLgotICAgICAgICAgICAgICAgIHBvcHVwV2luZG93LnNob3coKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgLy8gRGlzcGxheSBhbGwgcGVuZGluZyBtZW51cy4KKyAgICAgICAgZm9yIChNZW51QnVpbGRlciBtZW51IDogbVBlbmRpbmdNZW51cykgeworICAgICAgICAgICAgc2hvd01lbnUobWVudSk7CiAgICAgICAgIH0KKyAgICAgICAgbVBlbmRpbmdNZW51cy5jbGVhcigpOwogCiAgICAgICAgIG1TaG93bkFuY2hvclZpZXcgPSBtQW5jaG9yVmlldzsKKwogICAgICAgICBpZiAobVNob3duQW5jaG9yVmlldyAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGFkZEdsb2JhbExpc3RlbmVyID0gbVRyZWVPYnNlcnZlciA9PSBudWxsOwogICAgICAgICAgICAgbVRyZWVPYnNlcnZlciA9IG1TaG93bkFuY2hvclZpZXcuZ2V0Vmlld1RyZWVPYnNlcnZlcigpOyAvLyBSZWZyZXNoIHRvIGxhdGVzdApAQCAtMjczLDEwICsyNTgsMTAgQEAKICAgICAgICAgLy8gZXhjZXB0aW9uLCBhcyAjb25EaXNtaXNzIG1heSBjbGVhciBtUG9wdXBXaW5kb3dzIHdoaWxlIHdlIGFyZQogICAgICAgICAvLyBpdGVyYXRpbmcuIFJlbW92ZSBmcm9tIHRoZSBsYXN0IGFkZGVkIG1lbnUgc28gdGhhdCB0aGUgY2FsbGJhY2tzCiAgICAgICAgIC8vIGFyZSByZWNlaXZlZCBpbiBvcmRlciBmcm9tIGZvcmVncm91bmQgdG8gYmFja2dyb3VuZC4KLSAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IG1BZGRlZE1lbnVzLnNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IG1TaG93aW5nTWVudXMuc2l6ZSgpOwogICAgICAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICAgICAgICAgZmluYWwgQ2FzY2FkaW5nTWVudUluZm9bXSBhZGRlZE1lbnVzID0KLSAgICAgICAgICAgICAgICAgICAgbUFkZGVkTWVudXMudG9BcnJheShuZXcgQ2FzY2FkaW5nTWVudUluZm9bbGVuZ3RoXSk7CisgICAgICAgICAgICAgICAgICAgIG1TaG93aW5nTWVudXMudG9BcnJheShuZXcgQ2FzY2FkaW5nTWVudUluZm9bbGVuZ3RoXSk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBpbmZvID0gYWRkZWRNZW51c1tpXTsKICAgICAgICAgICAgICAgICBpZiAoaW5mby53aW5kb3cuaXNTaG93aW5nKCkpIHsKQEAgLTMxNSw3ICszMDAsNyBAQAogICAgICAqLwogICAgIEBIb3JpelBvc2l0aW9uCiAgICAgcHJpdmF0ZSBpbnQgZ2V0TmV4dE1lbnVQb3NpdGlvbihpbnQgbmV4dE1lbnVXaWR0aCkgewotICAgICAgICBMaXN0VmlldyBsYXN0TGlzdFZpZXcgPSBtQWRkZWRNZW51cy5nZXQobUFkZGVkTWVudXMuc2l6ZSgpIC0gMSkuZ2V0TGlzdFZpZXcoKTsKKyAgICAgICAgTGlzdFZpZXcgbGFzdExpc3RWaWV3ID0gbVNob3dpbmdNZW51cy5nZXQobVNob3dpbmdNZW51cy5zaXplKCkgLSAxKS5nZXRMaXN0VmlldygpOwogCiAgICAgICAgIGZpbmFsIGludFtdIHNjcmVlbkxvY2F0aW9uID0gbmV3IGludFsyXTsKICAgICAgICAgbGFzdExpc3RWaWV3LmdldExvY2F0aW9uT25TY3JlZW4oc2NyZWVuTG9jYXRpb24pOwpAQCAtMzQyLDYgKzMyNywxOSBAQAogICAgIHB1YmxpYyB2b2lkIGFkZE1lbnUoTWVudUJ1aWxkZXIgbWVudSkgewogICAgICAgICBtZW51LmFkZE1lbnVQcmVzZW50ZXIodGhpcywgbUNvbnRleHQpOwogCisgICAgICAgIGlmIChpc1Nob3dpbmcoKSkgeworICAgICAgICAgICAgc2hvd01lbnUobWVudSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtUGVuZGluZ01lbnVzLmFkZChtZW51KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFByZXBhcmVzIGFuZCBzaG93cyB0aGUgc3BlY2lmaWVkIG1lbnUgaW1tZWRpYXRlbHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbWVudSB0aGUgbWVudSB0byBzaG93CisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNob3dNZW51KEBOb25OdWxsIE1lbnVCdWlsZGVyIG1lbnUpIHsKICAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KTsKICAgICAgICAgZmluYWwgTWVudUFkYXB0ZXIgYWRhcHRlciA9IG5ldyBNZW51QWRhcHRlcihtZW51LCBpbmZsYXRlciwgbU92ZXJmbG93T25seSk7CiAgICAgICAgIGFkYXB0ZXIuc2V0Rm9yY2VTaG93SWNvbihtRm9yY2VTaG93SWNvbik7CkBAIC0zNTQsOCArMzUyLDggQEAKIAogICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBwYXJlbnRJbmZvOwogICAgICAgICBmaW5hbCBWaWV3IHBhcmVudFZpZXc7Ci0gICAgICAgIGlmIChtQWRkZWRNZW51cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBwYXJlbnRJbmZvID0gbUFkZGVkTWVudXMuZ2V0KG1BZGRlZE1lbnVzLnNpemUoKSAtIDEpOworICAgICAgICBpZiAobVNob3dpbmdNZW51cy5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBwYXJlbnRJbmZvID0gbVNob3dpbmdNZW51cy5nZXQobVNob3dpbmdNZW51cy5zaXplKCkgLSAxKTsKICAgICAgICAgICAgIHBhcmVudFZpZXcgPSBmaW5kUGFyZW50Vmlld0ZvclN1Ym1lbnUocGFyZW50SW5mbywgbWVudSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwYXJlbnRJbmZvID0gbnVsbDsKQEAgLTQwNywxMiArNDA1LDIxIEBACiAgICAgICAgIHBvcHVwV2luZG93LnNldFZlcnRpY2FsT2Zmc2V0KHkpOwogCiAgICAgICAgIGZpbmFsIENhc2NhZGluZ01lbnVJbmZvIG1lbnVJbmZvID0gbmV3IENhc2NhZGluZ01lbnVJbmZvKHBvcHVwV2luZG93LCBtZW51LCBtTGFzdFBvc2l0aW9uKTsKLSAgICAgICAgbUFkZGVkTWVudXMuYWRkKG1lbnVJbmZvKTsKKyAgICAgICAgbVNob3dpbmdNZW51cy5hZGQobWVudUluZm8pOwogCi0gICAgICAgIC8vIE5PVEU6IFRoaXMgY2FzZSBoYW5kbGVzIHNob3dpbmcgc3VibWVudXMgb25jZSB0aGUgQ2FzY2FkaW5nTWVudVBvcHVwIGhhcyBhbHJlYWR5Ci0gICAgICAgIC8vIGJlZW4gc2hvd24gdmlhIGEgY2FsbCB0byBpdHMgI3Nob3coKSBtZXRob2QuIElmIGl0IGhhc24ndCB5ZXQgYmVlbiBzaG93KCluLCB0aGVuCi0gICAgICAgIC8vIHdlIGRlbGliZXJhdGVseSBkbyBub3QgeWV0IHNob3cgdGhlIHBvcHVwV2luZG93LCBhcyAjc2hvdygpIHdpbGwgZG8gdGhhdCBsYXRlci4KLSAgICAgICAgaWYgKGlzU2hvd2luZygpKSB7CisgICAgICAgIHBvcHVwV2luZG93LnNob3coKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSByb290IG1lbnUsIHNob3cgdGhlIHRpdGxlIGlmIHJlcXVlc3RlZC4KKyAgICAgICAgaWYgKHBhcmVudEluZm8gPT0gbnVsbCAmJiBtU2hvd1RpdGxlICYmIG1lbnUuZ2V0SGVhZGVyVGl0bGUoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBMaXN0VmlldyBsaXN0VmlldyA9IHBvcHVwV2luZG93LmdldExpc3RWaWV3KCk7CisgICAgICAgICAgICBmaW5hbCBGcmFtZUxheW91dCB0aXRsZUl0ZW1WaWV3ID0gKEZyYW1lTGF5b3V0KSBpbmZsYXRlci5pbmZsYXRlKAorICAgICAgICAgICAgICAgICAgICBSLmxheW91dC5wb3B1cF9tZW51X2hlYWRlcl9pdGVtX2xheW91dCwgbGlzdFZpZXcsIGZhbHNlKTsKKyAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IHRpdGxlVmlldyA9IChUZXh0VmlldykgdGl0bGVJdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC50aXRsZSk7CisgICAgICAgICAgICB0aXRsZUl0ZW1WaWV3LnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgdGl0bGVWaWV3LnNldFRleHQobWVudS5nZXRIZWFkZXJUaXRsZSgpKTsKKyAgICAgICAgICAgIGxpc3RWaWV3LmFkZEhlYWRlclZpZXcodGl0bGVJdGVtVmlldywgbnVsbCwgZmFsc2UpOworCisgICAgICAgICAgICAvLyBTaG93IGFnYWluIHRvIHVwZGF0ZSB0aGUgdGl0bGUuCiAgICAgICAgICAgICBwb3B1cFdpbmRvdy5zaG93KCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MDAsNyArNTA3LDcgQEAKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBpc1Nob3dpbmcoKSB7Ci0gICAgICAgIHJldHVybiBtQWRkZWRNZW51cy5zaXplKCkgPiAwICYmIG1BZGRlZE1lbnVzLmdldCgwKS53aW5kb3cuaXNTaG93aW5nKCk7CisgICAgICAgIHJldHVybiBtU2hvd2luZ01lbnVzLnNpemUoKSA+IDAgJiYgbVNob3dpbmdNZW51cy5nZXQoMCkud2luZG93LmlzU2hvd2luZygpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTExLDggKzUxOCw4IEBACiAgICAgICAgIC8vIFRoZSBkaXNtaXNzIGxpc3RlbmVyIGRvZXNuJ3QgcGFzcyB0aGUgY2FsbGluZyB3aW5kb3csIHNvIHdhbGsKICAgICAgICAgLy8gdGhyb3VnaCB0aGUgc3RhY2sgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgd2FzIGp1c3QgZGlzbWlzc2VkLgogICAgICAgICBDYXNjYWRpbmdNZW51SW5mbyBkaXNtaXNzZWRJbmZvID0gbnVsbDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbUFkZGVkTWVudXMuc2l6ZSgpOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgZmluYWwgQ2FzY2FkaW5nTWVudUluZm8gaW5mbyA9IG1BZGRlZE1lbnVzLmdldChpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbVNob3dpbmdNZW51cy5zaXplKCk7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBpbmZvID0gbVNob3dpbmdNZW51cy5nZXQoaSk7CiAgICAgICAgICAgICBpZiAoIWluZm8ud2luZG93LmlzU2hvd2luZygpKSB7CiAgICAgICAgICAgICAgICAgZGlzbWlzc2VkSW5mbyA9IGluZm87CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MjgsNyArNTM1LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZU1lbnVWaWV3KGJvb2xlYW4gY2xlYXJlZCkgewotICAgICAgICBmb3IgKENhc2NhZGluZ01lbnVJbmZvIGluZm8gOiBtQWRkZWRNZW51cykgeworICAgICAgICBmb3IgKENhc2NhZGluZ01lbnVJbmZvIGluZm8gOiBtU2hvd2luZ01lbnVzKSB7CiAgICAgICAgICAgICB0b01lbnVBZGFwdGVyKGluZm8uZ2V0TGlzdFZpZXcoKS5nZXRBZGFwdGVyKCkpLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01NDEsNyArNTQ4LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBvblN1Yk1lbnVTZWxlY3RlZChTdWJNZW51QnVpbGRlciBzdWJNZW51KSB7CiAgICAgICAgIC8vIERvbid0IGFsbG93IGRvdWJsZS1vcGVuaW5nIG9mIHRoZSBzYW1lIHN1Ym1lbnUuCi0gICAgICAgIGZvciAoQ2FzY2FkaW5nTWVudUluZm8gaW5mbyA6IG1BZGRlZE1lbnVzKSB7CisgICAgICAgIGZvciAoQ2FzY2FkaW5nTWVudUluZm8gaW5mbyA6IG1TaG93aW5nTWVudXMpIHsKICAgICAgICAgICAgIGlmIChzdWJNZW51ID09IGluZm8ubWVudSkgewogICAgICAgICAgICAgICAgIC8vIEp1c3QgcmUtZm9jdXMgdGhhdCBvbmUuCiAgICAgICAgICAgICAgICAgaW5mby5nZXRMaXN0VmlldygpLnJlcXVlc3RGb2N1cygpOwpAQCAtNTY3LDggKzU3NCw4IEBACiAgICAgICogQHJldHVybiB0aGUgaW5kZXggb2YgdGhlIG1lbnUsIG9yIHtAY29kZSAtMX0gaWYgbm90IHByZXNlbnQKICAgICAgKi8KICAgICBwcml2YXRlIGludCBmaW5kSW5kZXhPZkFkZGVkTWVudShATm9uTnVsbCBNZW51QnVpbGRlciBtZW51KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBjb3VudCA9IG1BZGRlZE1lbnVzLnNpemUoKTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIENhc2NhZGluZ01lbnVJbmZvIGluZm8gID0gbUFkZGVkTWVudXMuZ2V0KGkpOworICAgICAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBtU2hvd2luZ01lbnVzLnNpemUoKTsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIENhc2NhZGluZ01lbnVJbmZvIGluZm8gID0gbVNob3dpbmdNZW51cy5nZXQoaSk7CiAgICAgICAgICAgICBpZiAobWVudSA9PSBpbmZvLm1lbnUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgICAgIH0KQEAgLTU4NiwxMyArNTkzLDEzIEBACiAKICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2xvc2UgZGVzY2VuZGFudCBtZW51cy4KICAgICAgICAgZmluYWwgaW50IG5leHRNZW51SW5kZXggPSBtZW51SW5kZXggKyAxOwotICAgICAgICBpZiAobmV4dE1lbnVJbmRleCA8IG1BZGRlZE1lbnVzLnNpemUoKSkgewotICAgICAgICAgICAgZmluYWwgQ2FzY2FkaW5nTWVudUluZm8gY2hpbGRJbmZvID0gbUFkZGVkTWVudXMuZ2V0KG5leHRNZW51SW5kZXgpOworICAgICAgICBpZiAobmV4dE1lbnVJbmRleCA8IG1TaG93aW5nTWVudXMuc2l6ZSgpKSB7CisgICAgICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBjaGlsZEluZm8gPSBtU2hvd2luZ01lbnVzLmdldChuZXh0TWVudUluZGV4KTsKICAgICAgICAgICAgIGNoaWxkSW5mby5tZW51LmNsb3NlKGZhbHNlIC8qIGNsb3NlQWxsTWVudXMgKi8pOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQ2xvc2UgdGhlIHRhcmdldCBtZW51LgotICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyBpbmZvID0gbUFkZGVkTWVudXMucmVtb3ZlKG1lbnVJbmRleCk7CisgICAgICAgIGZpbmFsIENhc2NhZGluZ01lbnVJbmZvIGluZm8gPSBtU2hvd2luZ01lbnVzLnJlbW92ZShtZW51SW5kZXgpOwogICAgICAgICBpbmZvLm1lbnUucmVtb3ZlTWVudVByZXNlbnRlcih0aGlzKTsKICAgICAgICAgaWYgKG1TaG91bGRDbG9zZUltbWVkaWF0ZWx5KSB7CiAgICAgICAgICAgICAvLyBEaXNhYmxlIGFsbCBleGl0IGFuaW1hdGlvbnMuCkBAIC02MDEsOSArNjA4LDkgQEAKICAgICAgICAgfQogICAgICAgICBpbmZvLndpbmRvdy5kaXNtaXNzKCk7CiAKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUFkZGVkTWVudXMuc2l6ZSgpOworICAgICAgICBmaW5hbCBpbnQgY291bnQgPSBtU2hvd2luZ01lbnVzLnNpemUoKTsKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICAgICAgbUxhc3RQb3NpdGlvbiA9IG1BZGRlZE1lbnVzLmdldChjb3VudCAtIDEpLnBvc2l0aW9uOworICAgICAgICAgICAgbUxhc3RQb3NpdGlvbiA9IG1TaG93aW5nTWVudXMuZ2V0KGNvdW50IC0gMSkucG9zaXRpb247CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtTGFzdFBvc2l0aW9uID0gZ2V0SW5pdGlhbE1lbnVQb3NpdGlvbigpOwogICAgICAgICB9CkBAIC02MzEsNyArNjM4LDcgQEAKICAgICAgICAgICAgIC8vIENsb3NlIGFsbCBtZW51cyBzdGFydGluZyBmcm9tIHRoZSByb290LiBUaGlzIHdpbGwgcmVjdXJzaXZlbHkKICAgICAgICAgICAgIC8vIGNsb3NlIGFueSByZW1haW5pbmcgbWVudXMsIHNvIHdlIGRvbid0IG5lZWQgdG8gcHJvcGFnYXRlIHRoZQogICAgICAgICAgICAgLy8gImNsb3NlQWxsTWVudXMiIGZsYWcuIFRoZSBsYXN0IHdpbmRvdyB3aWxsIGNsZWFuIHVwLgotICAgICAgICAgICAgZmluYWwgQ2FzY2FkaW5nTWVudUluZm8gcm9vdEluZm8gPSBtQWRkZWRNZW51cy5nZXQoMCk7CisgICAgICAgICAgICBmaW5hbCBDYXNjYWRpbmdNZW51SW5mbyByb290SW5mbyA9IG1TaG93aW5nTWVudXMuZ2V0KDApOwogICAgICAgICAgICAgcm9vdEluZm8ubWVudS5jbG9zZShmYWxzZSAvKiBjbG9zZUFsbE1lbnVzICovKTsKICAgICAgICAgfQogICAgIH0KQEAgLTY3Nyw3ICs2ODQsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIExpc3RWaWV3IGdldExpc3RWaWV3KCkgewotICAgICAgICByZXR1cm4gbUFkZGVkTWVudXMuaXNFbXB0eSgpID8gbnVsbCA6IG1BZGRlZE1lbnVzLmdldChtQWRkZWRNZW51cy5zaXplKCkgLSAxKS5nZXRMaXN0VmlldygpOworICAgICAgICByZXR1cm4gbVNob3dpbmdNZW51cy5pc0VtcHR5KCkgPyBudWxsIDogbVNob3dpbmdNZW51cy5nZXQobVNob3dpbmdNZW51cy5zaXplKCkgLSAxKS5nZXRMaXN0VmlldygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9JY29uTWVudVByZXNlbnRlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9JY29uTWVudVByZXNlbnRlci5qYXZhCmluZGV4IDI0MzliNWQuLjUyMjNhN2IgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvSWNvbk1lbnVQcmVzZW50ZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0ljb25NZW51UHJlc2VudGVyLmphdmEKQEAgLTE3LDYgKzE3LDggQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudS5NZW51Vmlldy5JdGVtVmlldzsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CkBAIC00OSw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQ29udGV4dCBjb250ZXh0LCBNZW51QnVpbGRlciBtZW51KSB7CisgICAgcHVibGljIHZvaWQgaW5pdEZvck1lbnUoQE5vbk51bGwgQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgTWVudUJ1aWxkZXIgbWVudSkgewogICAgICAgICBzdXBlci5pbml0Rm9yTWVudShjb250ZXh0LCBtZW51KTsKICAgICAgICAgbU1heEl0ZW1zID0gLTE7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudVByZXNlbnRlci5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9MaXN0TWVudVByZXNlbnRlci5qYXZhCmluZGV4IGM0NzYzNTQuLjJmZmYzYmEgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTGlzdE1lbnVQcmVzZW50ZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L0xpc3RNZW51UHJlc2VudGVyLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnU7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwpAQCAtNzYsNyArNzgsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KENvbnRleHQgY29udGV4dCwgTWVudUJ1aWxkZXIgbWVudSkgeworICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE1lbnVCdWlsZGVyIG1lbnUpIHsKICAgICAgICAgaWYgKG1UaGVtZVJlcyAhPSAwKSB7CiAgICAgICAgICAgICBtQ29udGV4dCA9IG5ldyBDb250ZXh0VGhlbWVXcmFwcGVyKGNvbnRleHQsIG1UaGVtZVJlcyk7CiAgICAgICAgICAgICBtSW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KTsKZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudUJ1aWxkZXIuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudUJ1aWxkZXIuamF2YQppbmRleCA0NjVkNzc1Li4zMWIyZjk2IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVCdWlsZGVyLmphdmEKKysrIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51QnVpbGRlci5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudTsKIAogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKQEAgLTEwMjcsMjMgKzEwMjgsMjQgQEAKICAgICAgICAgbUlzQWN0aW9uSXRlbXNTdGFsZSA9IHRydWU7CiAgICAgICAgIG9uSXRlbXNDaGFuZ2VkKHRydWUpOwogICAgIH0KLSAgICAKKworICAgIEBOb25OdWxsCiAgICAgcHVibGljIEFycmF5TGlzdDxNZW51SXRlbUltcGw+IGdldFZpc2libGVJdGVtcygpIHsKICAgICAgICAgaWYgKCFtSXNWaXNpYmxlSXRlbXNTdGFsZSkgcmV0dXJuIG1WaXNpYmxlSXRlbXM7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgaXRlbXMKICAgICAgICAgbVZpc2libGVJdGVtcy5jbGVhcigpOwotICAgICAgICAKKwogICAgICAgICBmaW5hbCBpbnQgaXRlbXNTaXplID0gbUl0ZW1zLnNpemUoKTsgCiAgICAgICAgIE1lbnVJdGVtSW1wbCBpdGVtOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zU2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpdGVtID0gbUl0ZW1zLmdldChpKTsKICAgICAgICAgICAgIGlmIChpdGVtLmlzVmlzaWJsZSgpKSBtVmlzaWJsZUl0ZW1zLmFkZChpdGVtKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBtSXNWaXNpYmxlSXRlbXNTdGFsZSA9IGZhbHNlOwogICAgICAgICBtSXNBY3Rpb25JdGVtc1N0YWxlID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1WaXNpYmxlSXRlbXM7CiAgICAgfQogCmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQb3B1cC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51UG9wdXAuamF2YQppbmRleCA5OGY1ZDkwLi5iMTUxZjM0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQb3B1cC5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvTWVudVBvcHVwLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnU7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwpAQCAtNzMsNyArNzUsNyBAQAogICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHNldE9uRGlzbWlzc0xpc3RlbmVyKFBvcHVwV2luZG93Lk9uRGlzbWlzc0xpc3RlbmVyIGxpc3RlbmVyKTsKIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KENvbnRleHQgY29udGV4dCwgTWVudUJ1aWxkZXIgbWVudSkgeworICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE1lbnVCdWlsZGVyIG1lbnUpIHsKICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZzsgd2UgYWRkZWQgYXMgYSBwcmVzZW50ZXIgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9NZW51UHJlc2VudGVyLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQcmVzZW50ZXIuamF2YQppbmRleCBjODQ3YzE1Li42NWJkYzA5IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQcmVzZW50ZXIuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L01lbnVQcmVzZW50ZXIuamF2YQpAQCAtMTYsNiArMTYsOCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcubWVudTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKQEAgLTQ5LDE0ICs1MSwxNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEluaXRpYWxpemUgdGhpcyBwcmVzZW50ZXIgZm9yIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBtZW51LgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBNZW51QnVpbGRlciB3aGVuIGEgcHJlc2VudGVyIGlzCi0gICAgICogYWRkZWQuIFNlZSB7QGxpbmsgTWVudUJ1aWxkZXIjYWRkTWVudVByZXNlbnRlcihNZW51UHJlc2VudGVyKX0KKyAgICAgKiBJbml0aWFsaXplcyB0aGlzIHByZXNlbnRlciBmb3IgdGhlIGdpdmVuIGNvbnRleHQgYW5kIG1lbnUuCisgICAgICogPHA+CisgICAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IE1lbnVCdWlsZGVyIHdoZW4gYSBwcmVzZW50ZXIgaXMgYWRkZWQuIFNlZQorICAgICAqIHtAbGluayBNZW51QnVpbGRlciNhZGRNZW51UHJlc2VudGVyKE1lbnVQcmVzZW50ZXIpfS4KICAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgZm9yIHRoaXMgcHJlc2VudGVyOyB1c2VkIGZvciB2aWV3IGNyZWF0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50Ci0gICAgICogQHBhcmFtIG1lbnUgTWVudSB0byBob3N0CisgICAgICogQHBhcmFtIGNvbnRleHQgdGhlIGNvbnRleHQgZm9yIHRoaXMgcHJlc2VudGVyOyB1c2VkIGZvciB2aWV3IGNyZWF0aW9uCisgICAgICogICAgICAgICAgICAgICAgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQsIG11c3QgYmUgbm9uLXtAY29kZSBudWxsfQorICAgICAqIEBwYXJhbSBtZW51IHRoZSBtZW51IHRvIGhvc3QsIG9yIHtAY29kZSBudWxsfSB0byBjbGVhciB0aGUgaG9zdGVkIG1lbnUKICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbml0Rm9yTWVudShDb250ZXh0IGNvbnRleHQsIE1lbnVCdWlsZGVyIG1lbnUpOworICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KEBOb25OdWxsIENvbnRleHQgY29udGV4dCwgQE51bGxhYmxlIE1lbnVCdWlsZGVyIG1lbnUpOwogCiAgICAgLyoqCiAgICAgICogUmV0cmlldmUgYSBNZW51VmlldyB0byBkaXNwbGF5IHRoZSBtZW51IHNwZWNpZmllZCBpbgpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9TdGFuZGFyZE1lbnVQb3B1cC5qYXZhIGIvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvbWVudS9TdGFuZGFyZE1lbnVQb3B1cC5qYXZhCmluZGV4IDZhNWY2ZDguLmE2N2U0M2EgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L21lbnUvU3RhbmRhcmRNZW51UG9wdXAuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9tZW51L1N0YW5kYXJkTWVudVBvcHVwLmphdmEKQEAgLTEsMyArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5tZW51OwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CkBAIC03LDcgKzIzLDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25BdHRhY2hTdGF0ZUNoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uS2V5TGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXIuT25HbG9iYWxMYXlvdXRMaXN0ZW5lcjsKQEAgLTMwLDcgKzQ1LDcgQEAKICAgICAgICAgTWVudVByZXNlbnRlciwgT25LZXlMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMYXlvdXRJbmZsYXRlciBtSW5mbGF0ZXI7CisKICAgICBwcml2YXRlIGZpbmFsIE1lbnVCdWlsZGVyIG1NZW51OwogICAgIHByaXZhdGUgZmluYWwgTWVudUFkYXB0ZXIgbUFkYXB0ZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIG1PdmVyZmxvd09ubHk7CkBAIC03OSw4ICs5NCw2IEBACiAgICAgcHJpdmF0ZSBDYWxsYmFjayBtUHJlc2VudGVyQ2FsbGJhY2s7CiAgICAgcHJpdmF0ZSBWaWV3VHJlZU9ic2VydmVyIG1UcmVlT2JzZXJ2ZXI7CiAKLSAgICBwcml2YXRlIFZpZXdHcm91cCBtTWVhc3VyZVBhcmVudDsKLQogICAgIC8qKiBXaGV0aGVyIHRoZSBwb3B1cCBoYXMgYmVlbiBkaXNtaXNzZWQuIE9uY2UgZGlzbWlzc2VkLCBpdCBjYW5ub3QgYmUgb3BlbmVkIGFnYWluLiAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBtV2FzRGlzbWlzc2VkOwogCkBAIC05OSwxMCArMTEyLDEwIEBACiAgICAgcHVibGljIFN0YW5kYXJkTWVudVBvcHVwKENvbnRleHQgY29udGV4dCwgTWVudUJ1aWxkZXIgbWVudSwgVmlldyBhbmNob3JWaWV3LCBpbnQgcG9wdXBTdHlsZUF0dHIsCiAgICAgICAgICAgICBpbnQgcG9wdXBTdHlsZVJlcywgYm9vbGVhbiBvdmVyZmxvd09ubHkpIHsKICAgICAgICAgbUNvbnRleHQgPSBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChjb250ZXh0KTsKLSAgICAgICAgbUluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKICAgICAgICAgbU1lbnUgPSBtZW51OwogICAgICAgICBtT3ZlcmZsb3dPbmx5ID0gb3ZlcmZsb3dPbmx5OwotICAgICAgICBtQWRhcHRlciA9IG5ldyBNZW51QWRhcHRlcihtZW51LCBtSW5mbGF0ZXIsIG1PdmVyZmxvd09ubHkpOworICAgICAgICBmaW5hbCBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20oY29udGV4dCk7CisgICAgICAgIG1BZGFwdGVyID0gbmV3IE1lbnVBZGFwdGVyKG1lbnUsIGluZmxhdGVyLCBtT3ZlcmZsb3dPbmx5KTsKICAgICAgICAgbVBvcHVwU3R5bGVBdHRyID0gcG9wdXBTdHlsZUF0dHI7CiAgICAgICAgIG1Qb3B1cFN0eWxlUmVzID0gcG9wdXBTdHlsZVJlczsKIApAQCAtMTU1LDggKzE2OCw3IEBACiAgICAgICAgIG1Qb3B1cC5zZXREcm9wRG93bkdyYXZpdHkobURyb3BEb3duR3Jhdml0eSk7CiAKICAgICAgICAgaWYgKCFtSGFzQ29udGVudFdpZHRoKSB7Ci0gICAgICAgICAgICBtQ29udGVudFdpZHRoID0gbWVhc3VyZUluZGl2aWR1YWxNZW51V2lkdGgoCi0gICAgICAgICAgICAgICAgICAgIG1BZGFwdGVyLCBtTWVhc3VyZVBhcmVudCwgbUNvbnRleHQsIG1Qb3B1cE1heFdpZHRoKTsKKyAgICAgICAgICAgIG1Db250ZW50V2lkdGggPSBtZWFzdXJlSW5kaXZpZHVhbE1lbnVXaWR0aChtQWRhcHRlciwgbnVsbCwgbUNvbnRleHQsIG1Qb3B1cE1heFdpZHRoKTsKICAgICAgICAgICAgIG1IYXNDb250ZW50V2lkdGggPSB0cnVlOwogICAgICAgICB9CiAKQEAgLTE3Nyw3ICsxODksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICAgIFRleHRWaWV3IHRpdGxlVmlldyA9IChUZXh0VmlldykgdGl0bGVJdGVtVmlldy5maW5kVmlld0J5SWQoCiAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQudGl0bGUpOwotICAgICAgICAgICAgdGl0bGVWaWV3LnNldFRleHQobU1lbnUuZ2V0SGVhZGVyVGl0bGUoKSk7CisgICAgICAgICAgICBpZiAodGl0bGVWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aXRsZVZpZXcuc2V0VGV4dChtTWVudS5nZXRIZWFkZXJUaXRsZSgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRpdGxlSXRlbVZpZXcuc2V0RW5hYmxlZChmYWxzZSk7CiAgICAgICAgICAgICBsaXN0Vmlldy5hZGRIZWFkZXJWaWV3KHRpdGxlSXRlbVZpZXcsIG51bGwsIGZhbHNlKTsKIApAQCAtMjQyLDEzICsyNTYsMTMgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBvblN1Yk1lbnVTZWxlY3RlZChTdWJNZW51QnVpbGRlciBzdWJNZW51KSB7CiAgICAgICAgIGlmIChzdWJNZW51Lmhhc1Zpc2libGVJdGVtcygpKSB7Ci0gICAgICAgICAgICBNZW51UG9wdXBIZWxwZXIgc3ViUG9wdXAgPSBuZXcgTWVudVBvcHVwSGVscGVyKAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgc3ViTWVudSwgbVNob3duQW5jaG9yVmlldywgbU92ZXJmbG93T25seSwgbVBvcHVwU3R5bGVBdHRyLAotICAgICAgICAgICAgICAgICAgICBtUG9wdXBTdHlsZVJlcyk7CisgICAgICAgICAgICBmaW5hbCBNZW51UG9wdXBIZWxwZXIgc3ViUG9wdXAgPSBuZXcgTWVudVBvcHVwSGVscGVyKG1Db250ZXh0LCBzdWJNZW51LAorICAgICAgICAgICAgICAgICAgICBtU2hvd25BbmNob3JWaWV3LCBtT3ZlcmZsb3dPbmx5LCBtUG9wdXBTdHlsZUF0dHIsIG1Qb3B1cFN0eWxlUmVzKTsKICAgICAgICAgICAgIHN1YlBvcHVwLnNldFByZXNlbnRlckNhbGxiYWNrKG1QcmVzZW50ZXJDYWxsYmFjayk7CiAgICAgICAgICAgICBzdWJQb3B1cC5zZXRGb3JjZVNob3dJY29uKG1BZGFwdGVyLmdldEZvcmNlU2hvd0ljb24oKSk7CiAKLSAgICAgICAgICAgIGlmIChzdWJQb3B1cC50cnlTaG93KCkpIHsKKyAgICAgICAgICAgIC8vIFNob3cgdGhlIG5ldyBzdWItbWVudSBwb3B1cCBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhcyB0aGlzIHBvcHVwLgorICAgICAgICAgICAgaWYgKHN1YlBvcHVwLnRyeVNob3cobVhPZmZzZXQsIG1ZT2Zmc2V0KSkgewogICAgICAgICAgICAgICAgIGlmIChtUHJlc2VudGVyQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtUHJlc2VudGVyQ2FsbGJhY2sub25PcGVuU3ViTWVudShzdWJNZW51KTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0FjdGlvbkJhclZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyVmlldy5qYXZhCmluZGV4IDgyNWUzMzYuLmY5MGI1OWQgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvQWN0aW9uQmFyVmlldy5qYXZhCkBAIC0xNyw2ICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldDsKIAogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkxheW91dFRyYW5zaXRpb247CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGlvbkJhcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CkBAIC0xNTkzLDcgKzE1OTUsNyBAQAogICAgICAgICBNZW51SXRlbUltcGwgbUN1cnJlbnRFeHBhbmRlZEl0ZW07CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIGluaXRGb3JNZW51KENvbnRleHQgY29udGV4dCwgTWVudUJ1aWxkZXIgbWVudSkgeworICAgICAgICBwdWJsaWMgdm9pZCBpbml0Rm9yTWVudShATm9uTnVsbCBDb250ZXh0IGNvbnRleHQsIEBOdWxsYWJsZSBNZW51QnVpbGRlciBtZW51KSB7CiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZXhwYW5kZWQgYWN0aW9uIHZpZXcgd2hlbiBtZW51cyBjaGFuZ2UuCiAgICAgICAgICAgICBpZiAobU1lbnUgIT0gbnVsbCAmJiBtQ3VycmVudEV4cGFuZGVkSXRlbSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbU1lbnUuY29sbGFwc2VJdGVtQWN0aW9uVmlldyhtQ3VycmVudEV4cGFuZGVkSXRlbSk7CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0RlY29yQ2FwdGlvblZpZXcuamF2YSBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRGVjb3JDYXB0aW9uVmlldy5qYXZhCmluZGV4IGQ3NDc2ODYuLjQwOWExN2YgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRGVjb3JDYXB0aW9uVmlldy5qYXZhCisrKyBiL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC93aWRnZXQvRGVjb3JDYXB0aW9uVmlldy5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0OwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOwotCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CkBAIC0zMTksNiArMzE3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uSGVpZ2h0ICsgbUNvbnRlbnQuZ2V0TWVhc3VyZWRIZWlnaHQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgY2FwdGlvbiBiYXIgaXMgYXQgdGhlIHRvcC4KKyAgICAgICAgbU93bmVyLm5vdGlmeVJlc3RyaWN0ZWRDYXB0aW9uQXJlYUNhbGxiYWNrKG1NYXhpbWl6ZS5nZXRMZWZ0KCksIG1NYXhpbWl6ZS5nZXRUb3AoKSwKKyAgICAgICAgICAgICAgICBtQ2xvc2UuZ2V0UmlnaHQoKSwgbUNsb3NlLmdldEJvdHRvbSgpKTsKICAgICB9CiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lIGlmIHRoZSB3b3Jrc3BhY2UgaXMgZW50aXJlbHkgY292ZXJlZCBieSB0aGUgd2luZG93LgpAQCAtMzQ3LDcgKzM0OSw3IEBACiAgICAgICAgIFdpbmRvdy5XaW5kb3dDb250cm9sbGVyQ2FsbGJhY2sgY2FsbGJhY2sgPSBtT3duZXIuZ2V0V2luZG93Q29udHJvbGxlckNhbGxiYWNrKCk7CiAgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNoYW5nZVdpbmRvd1N0YWNrKEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5leGl0RnJlZWZvcm1Nb2RlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDYW5ub3QgY2hhbmdlIHRhc2sgd29ya3NwYWNlLiIpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3dpZGdldC9Mb2NrUGF0dGVyblV0aWxzLmphdmEgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQppbmRleCA2YzIyM2MzLi40ZThmMTljIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQorKysgYi9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvd2lkZ2V0L0xvY2tQYXR0ZXJuVXRpbHMuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0zNCw2ICszNSw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLklNb3VudFNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CkBAIC02NCw2ICs2NiwxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKIAogICAgIC8qKgorICAgICAqIFRoZSBrZXkgdG8gaWRlbnRpZnkgd2hlbiB0aGUgbG9jayBwYXR0ZXJuIGVuYWJsZWQgZmxhZyBpcyBiZWluZyBhY2NjZXNzZWQgZm9yIGxlZ2FjeSByZWFzb25zLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExFR0FDWV9MT0NLX1BBVFRFUk5fRU5BQkxFRCA9ICJsZWdhY3lfbG9ja19wYXR0ZXJuX2VuYWJsZWQiOworCisgICAgLyoqCiAgICAgICogVGhlIG51bWJlciBvZiBpbmNvcnJlY3QgYXR0ZW1wdHMgYmVmb3JlIHdoaWNoIHdlIGZhbGwgYmFjayBvbiBhbiBhbHRlcm5hdGl2ZQogICAgICAqIG1ldGhvZCBvZiB2ZXJpZnlpbmcgdGhlIHVzZXIsIGFuZCByZXNldHRpbmcgdGhlaXIgbG9jayBwYXR0ZXJuLgogICAgICAqLwpAQCAtMTMwLDYgKzEzNyw4IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5BQkxFRF9UUlVTVF9BR0VOVFMgPSAibG9ja3NjcmVlbi5lbmFibGVkdHJ1c3RhZ2VudHMiOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUEFSQVRFX1BST0ZJTEVfQ0hBTExFTkdFX0tFWSA9ICJsb2Nrc2NyZWVuLnByb2ZpbGVjaGFsbGVuZ2UiOworCiAgICAgLy8gTWF4aW11bSBhbGxvd2VkIG51bWJlciBvZiByZXBlYXRlZCBvciBvcmRlcmVkIGNoYXJhY3RlcnMgaW4gYSBzZXF1ZW5jZSBiZWZvcmUgd2UnbGwKICAgICAvLyBjb25zaWRlciBpdCBhIGNvbXBsZXggUElOL3Bhc3N3b3JkLgogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9BTExPV0VEX1NFUVVFTkNFID0gMzsKQEAgLTEzOCw2ICsxNDcsNyBAQAogICAgIHByaXZhdGUgZmluYWwgQ29udGVudFJlc29sdmVyIG1Db250ZW50UmVzb2x2ZXI7CiAgICAgcHJpdmF0ZSBEZXZpY2VQb2xpY3lNYW5hZ2VyIG1EZXZpY2VQb2xpY3lNYW5hZ2VyOwogICAgIHByaXZhdGUgSUxvY2tTZXR0aW5ncyBtTG9ja1NldHRpbmdzU2VydmljZTsKKyAgICBwcml2YXRlIFVzZXJNYW5hZ2VyIG1Vc2VyTWFuYWdlcjsKIAogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBSZXF1ZXN0VGhyb3R0bGVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKQEAgLTE2OCw2ICsxNzgsMTMgQEAKICAgICAgICAgcmV0dXJuIG1EZXZpY2VQb2xpY3lNYW5hZ2VyOwogICAgIH0KIAorICAgIHByaXZhdGUgVXNlck1hbmFnZXIgZ2V0VXNlck1hbmFnZXIoKSB7CisgICAgICAgIGlmIChtVXNlck1hbmFnZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgbVVzZXJNYW5hZ2VyID0gVXNlck1hbmFnZXIuZ2V0KG1Db250ZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVVzZXJNYW5hZ2VyOworICAgIH0KKwogICAgIHByaXZhdGUgVHJ1c3RNYW5hZ2VyIGdldFRydXN0TWFuYWdlcigpIHsKICAgICAgICAgVHJ1c3RNYW5hZ2VyIHRydXN0ID0gKFRydXN0TWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlRSVVNUX1NFUlZJQ0UpOwogICAgICAgICBpZiAodHJ1c3QgPT0gbnVsbCkgewpAQCAtODYxLDYgKzg3OCwzOSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIFNlcGFyYXRlIFByb2ZpbGUgQ2hhbGxlbmdlIGZvciB0aGlzIHtAcGFyYW0gdXNlckhhbmRsZX0uIFRoaXMgaXMgYSBuby1vcAorICAgICAqIGZvciB1c2VyIGhhbmRsZXMgdGhhdCBkbyBub3QgYmVsb25nIHRvIGEgbWFuYWdlZCBwcm9maWxlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFNlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQoaW50IHVzZXJIYW5kbGUsIGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBVc2VySW5mbyBpbmZvID0gZ2V0VXNlck1hbmFnZXIoKS5nZXRVc2VySW5mbyh1c2VySGFuZGxlKTsKKyAgICAgICAgaWYgKGluZm8uaXNNYW5hZ2VkUHJvZmlsZSgpKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKFNFUEFSQVRFX1BST0ZJTEVfQ0hBTExFTkdFX0tFWSwgZW5hYmxlZCwgdXNlckhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGUgU2VwYXJhdGUgUHJvZmlsZSBDaGFsbGVuZ2UgaXMgZW5hYmxlZCBmb3IgdGhpcyB7QHBhcmFtIHVzZXJIYW5kbGV9LgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlRW5hYmxlZChpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBVc2VySW5mbyBpbmZvID0gZ2V0VXNlck1hbmFnZXIoKS5nZXRVc2VySW5mbyh1c2VySGFuZGxlKTsKKyAgICAgICAgaWYgKGluZm8gPT0gbnVsbCB8fCAhaW5mby5pc01hbmFnZWRQcm9maWxlKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbihTRVBBUkFURV9QUk9GSUxFX0NIQUxMRU5HRV9LRVksIGZhbHNlLCB1c2VySGFuZGxlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZXMgd2hldGhlciB0aGUgY3VycmVudCBEUE0gYWxsb3dzIHVzZSBvZiB0aGUgUHJvZmlsZSBDaGFsbGVuZ2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VBbGxvd2VkKGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIFVzZXJJbmZvIGluZm8gPSBnZXRVc2VyTWFuYWdlcigpLmdldFVzZXJJbmZvKHVzZXJIYW5kbGUpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsIHx8ICFpbmZvLmlzTWFuYWdlZFByb2ZpbGUoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBnZXREZXZpY2VQb2xpY3lNYW5hZ2VyKCkuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VBbGxvd2VkKHVzZXJIYW5kbGUpOworICAgIH0KKworICAgIC8qKgogICAgICAqIERlc2VyaWFsaXplIGEgcGF0dGVybi4KICAgICAgKiBAcGFyYW0gc3RyaW5nIFRoZSBwYXR0ZXJuIHNlcmlhbGl6ZWQgd2l0aCB7QGxpbmsgI3BhdHRlcm5Ub1N0cmluZ30KICAgICAgKiBAcmV0dXJuIFRoZSBwYXR0ZXJuLgpAQCAtMTAxNCw2ICsxMDY0LDE5IEBACiAgICAgICAgIHJldHVybiBpc0xvY2tQYXR0ZXJuRW5hYmxlZChnZXRLZXlndWFyZFN0b3JlZFBhc3N3b3JkUXVhbGl0eSh1c2VySWQpLCB1c2VySWQpOwogICAgIH0KIAorICAgIEBEZXByZWNhdGVkCisgICAgcHVibGljIGJvb2xlYW4gaXNMZWdhY3lMb2NrUGF0dGVybkVuYWJsZWQoaW50IHVzZXJJZCkgeworICAgICAgICAvLyBOb3RlOiB0aGlzIHZhbHVlIHNob3VsZCBkZWZhdWx0IHRvIHtAY29kZSB0cnVlfSB0byBhdm9pZCBhbnkgcmVzZXQgdGhhdCBtaWdodCByZXN1bHQuCisgICAgICAgIC8vIFdlIG11c3QgdXNlIGEgc3BlY2lhbCBrZXkgdG8gcmVhZCB0aGlzIHZhbHVlLCBzaW5jZSBpdCB3aWxsIGJ5IGRlZmF1bHQgcmV0dXJuIHRoZSB2YWx1ZQorICAgICAgICAvLyBiYXNlZCBvbiB0aGUgbmV3IGxvZ2ljLgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbihMRUdBQ1lfTE9DS19QQVRURVJOX0VOQUJMRUQsIHRydWUsIHVzZXJJZCk7CisgICAgfQorCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgdm9pZCBzZXRMZWdhY3lMb2NrUGF0dGVybkVuYWJsZWQoaW50IHVzZXJJZCkgeworICAgICAgICBzZXRCb29sZWFuKFNldHRpbmdzLlNlY3VyZS5MT0NLX1BBVFRFUk5fRU5BQkxFRCwgdHJ1ZSwgdXNlcklkKTsKKyAgICB9CisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNMb2NrUGF0dGVybkVuYWJsZWQoaW50IG1vZGUsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIG1vZGUgPT0gRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1NPTUVUSElORwogICAgICAgICAgICAgICAgICYmIHNhdmVkUGF0dGVybkV4aXN0cyh1c2VySWQpOwpAQCAtMTI3MCwxMCArMTMzMyw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTZXBhcmF0ZVdvcmtDaGFsbGVuZ2VFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gU3RvcmFnZU1hbmFnZXIuaXNGaWxlQmFzZWRFbmNyeXB0aW9uRW5hYmxlZCgpOwotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyU3Ryb25nQXV0aFRyYWNrZXIoZmluYWwgU3Ryb25nQXV0aFRyYWNrZXIgc3Ryb25nQXV0aFRyYWNrZXIpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGdldExvY2tTZXR0aW5ncygpLnJlZ2lzdGVyU3Ryb25nQXV0aFRyYWNrZXIoc3Ryb25nQXV0aFRyYWNrZXIubVN0dWIpOwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvQW5kcm9pZC5tayBiL2NvcmUvam5pL0FuZHJvaWQubWsKaW5kZXggZjFlN2FmYi4uZmMxYmE0NCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvQW5kcm9pZC5taworKysgYi9jb3JlL2puaS9BbmRyb2lkLm1rCkBAIC03LDYgKzcsNyBAQAogTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbm9uLXZpcnR1YWwtZHRvcgogTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tbWF5YmUtdW5pbml0aWFsaXplZCAtV25vLXBhcmVudGhlc2VzCitMT0NBTF9DRkxBR1MgKz0gLURIV1VJX05FV19PUFMKIExPQ0FMX0NQUEZMQUdTICs9IC1Xbm8tY29udmVyc2lvbi1udWxsCiAKIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLCBhcm0pCkBAIC00MywxMSArNDQsMTMgQEAKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzAuY3BwIFwKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzEuY3BwIFwKICAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzFFeHQuY3BwIFwKKyAgICBhbmRyb2lkX29wZW5nbF9HTEVTMzIuY3BwIFwKICAgICBhbmRyb2lkX2RhdGFiYXNlX0N1cnNvcldpbmRvdy5jcHAgXAogICAgIGFuZHJvaWRfZGF0YWJhc2VfU1FMaXRlQ29tbW9uLmNwcCBcCiAgICAgYW5kcm9pZF9kYXRhYmFzZV9TUUxpdGVDb25uZWN0aW9uLmNwcCBcCiAgICAgYW5kcm9pZF9kYXRhYmFzZV9TUUxpdGVHbG9iYWwuY3BwIFwKICAgICBhbmRyb2lkX2RhdGFiYXNlX1NRTGl0ZURlYnVnLmNwcCBcCisgICAgYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZS5jcHAgXAogICAgIGFuZHJvaWRfdmlld19EaXNwbGF5RXZlbnRSZWNlaXZlci5jcHAgXAogICAgIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhcy5jcHAgXAogICAgIGFuZHJvaWRfdmlld19HcmFwaGljQnVmZmVyLmNwcCBcCkBAIC05Niw3ICs5OSw2IEBACiAgICAgYW5kcm9pZF91dGlsX2phcl9TdHJpY3RKYXJGaWxlLmNwcCBcCiAgICAgYW5kcm9pZF9ncmFwaGljc19DYW52YXMuY3BwIFwKICAgICBhbmRyb2lkX2dyYXBoaWNzX1BpY3R1cmUuY3BwIFwKLSAgICBhbmRyb2lkL2dyYXBoaWNzL0F1dG9EZWNvZGVDYW5jZWwuY3BwIFwKICAgICBhbmRyb2lkL2dyYXBoaWNzL0F2b2lkWGZlcm1vZGUuY3BwIFwKICAgICBhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcC5jcHAgXAogICAgIGFuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAgXApAQCAtMTg1LDYgKzE4Nyw4IEBACiAgICAgJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGxpYmhhcmR3YXJlX2xlZ2FjeSkvaGFyZHdhcmVfbGVnYWN5IFwKICAgICAkKFRPUCkvZnJhbWV3b3Jrcy9hdi9pbmNsdWRlIFwKICAgICAkKFRPUCkvZnJhbWV3b3Jrcy9iYXNlL21lZGlhL2puaSBcCisgICAgJChUT1ApL3N5c3RlbS9jb3JlL2Jhc2UvaW5jbHVkZSBcCisgICAgJChUT1ApL3N5c3RlbS9jb3JlL2luY2x1ZGUgXAogICAgICQoVE9QKS9zeXN0ZW0vbWVkaWEvY2FtZXJhL2luY2x1ZGUgXAogICAgICQoVE9QKS9zeXN0ZW0vbmV0ZC9pbmNsdWRlIFwKICAgICBleHRlcm5hbC9wZGZpdW0vY29yZS9pbmNsdWRlL2ZwZGZhcGkgXApAQCAtMjUwLDcgKzI1NCw4IEBACiAgICAgbGlibWluaWtpbiBcCiAgICAgbGlicHJvY2Vzc2dyb3VwIFwKICAgICBsaWJuYXRpdmVicmlkZ2UgXAotICAgIGxpYnJhZGlvX21ldGFkYXRhCisgICAgbGlicmFkaW9fbWV0YWRhdGEgXAorICAgIGxpYm5hdGl2ZWxvYWRlcgogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IFwKICAgICBsaWJod3VpIFwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcCBiL2NvcmUvam5pL0FuZHJvaWRSdW50aW1lLmNwcAppbmRleCBmNmY0NWI1Li42M2YxOTNkIDEwMDY0NAotLS0gYS9jb3JlL2puaS9BbmRyb2lkUnVudGltZS5jcHAKKysrIGIvY29yZS9qbmkvQW5kcm9pZFJ1bnRpbWUuY3BwCkBAIC04MCw2ICs4MCw3IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzAoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMxKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9vcGVuZ2xfam5pX0dMRVMzMUV4dChKTklFbnYqIGVudik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzIoSk5JRW52KiBlbnYpOwogCiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfaGFyZHdhcmVfQ2FtZXJhKEpOSUVudiAqZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9oYXJkd2FyZV9jYW1lcmEyX0NhbWVyYU1ldGFkYXRhKEpOSUVudiAqZW52KTsKQEAgLTEyOSw2ICsxMzAsNyBAQAogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1JlZ2lvbihKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfU3VyZmFjZVRleHR1cmUoSk5JRW52KiBlbnYpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1hmZXJtb2RlKEpOSUVudiogZW52KTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZShKTklFbnYqIGVudik7CiBleHRlcm4gaW50IHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZkRvY3VtZW50KEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19wZGZfUGRmRWRpdG9yKEpOSUVudiogZW52KTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19wZGZfUGRmUmVuZGVyZXIoSk5JRW52KiBlbnYpOwpAQCAtMTI4MCw2ICsxMjgyLDcgQEAKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzApLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9vcGVuZ2xfam5pX0dMRVMzMSksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMxRXh0KSwKKyAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfb3BlbmdsX2puaV9HTEVTMzIpLAogCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX0JpdG1hcCksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX0JpdG1hcEZhY3RvcnkpLApAQCAtMTMxMCw2ICsxMzEzLDcgQEAKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfVHlwZWZhY2UpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19YZmVybW9kZSksCiAgICAgUkVHX0pOSShyZWdpc3Rlcl9hbmRyb2lkX2dyYXBoaWNzX1l1dkltYWdlKSwKKyAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfZHJhd2FibGVfVmVjdG9yRHJhd2FibGUpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19wZGZfUGRmRG9jdW1lbnQpLAogICAgIFJFR19KTkkocmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19wZGZfUGRmRWRpdG9yKSwKICAgICBSRUdfSk5JKHJlZ2lzdGVyX2FuZHJvaWRfZ3JhcGhpY3NfcGRmX1BkZlJlbmRlcmVyKSwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQXV0b0RlY29kZUNhbmNlbC5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0F1dG9EZWNvZGVDYW5jZWwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjQxYjk2Li4wMDAwMDAwCi0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQXV0b0RlY29kZUNhbmNlbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotI2luY2x1ZGUgIkF1dG9EZWNvZGVDYW5jZWwuaCIKLSNpbmNsdWRlICJTa011dGV4LmgiCi0KLVNLX0RFQ0xBUkVfU1RBVElDX01VVEVYKGdBdXRvRGVjb2RlckNhbmNlbE11dGV4KTsKLXN0YXRpYyBBdXRvRGVjb2RlckNhbmNlbCogZ0F1dG9EZWNvZGVyQ2FuY2VsOwotI2lmZGVmIFNLX0RFQlVHCi1zdGF0aWMgaW50IGdBdXRvRGVjb2RlckNhbmNlbENvdW50OwotI2VuZGlmCi0KLUF1dG9EZWNvZGVyQ2FuY2VsOjpBdXRvRGVjb2RlckNhbmNlbChqb2JqZWN0IGpvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tJbWFnZURlY29kZXIqIGRlY29kZXIpIHsKLSAgICBmSk9wdGlvbnMgPSBqb3B0aW9uczsKLSAgICBmRGVjb2RlciA9IGRlY29kZXI7Ci0KLSAgICBpZiAoTlVMTCAhPSBqb3B0aW9ucykgewotICAgICAgICBTa0F1dG9NdXRleEFjcXVpcmUgYWMoZ0F1dG9EZWNvZGVyQ2FuY2VsTXV0ZXgpOwotCi0gICAgICAgIC8vIEFkZCB1cyBhcyB0aGUgaGVhZCBvZiB0aGUgbGlzdAotICAgICAgICBmUHJldiA9IE5VTEw7Ci0gICAgICAgIGZOZXh0ID0gZ0F1dG9EZWNvZGVyQ2FuY2VsOwotICAgICAgICBpZiAoZ0F1dG9EZWNvZGVyQ2FuY2VsKSB7Ci0gICAgICAgICAgICBnQXV0b0RlY29kZXJDYW5jZWwtPmZQcmV2ID0gdGhpczsKLSAgICAgICAgfQotICAgICAgICBnQXV0b0RlY29kZXJDYW5jZWwgPSB0aGlzOwotCi0gICAgICAgIFNrREVCVUdDT0RFKGdBdXRvRGVjb2RlckNhbmNlbENvdW50ICs9IDE7KQotICAgICAgICBWYWxpZGF0ZSgpOwotICAgIH0KLX0KLQotQXV0b0RlY29kZXJDYW5jZWw6On5BdXRvRGVjb2RlckNhbmNlbCgpIHsKLSAgICBpZiAoTlVMTCAhPSBmSk9wdGlvbnMpIHsKLSAgICAgICAgU2tBdXRvTXV0ZXhBY3F1aXJlIGFjKGdBdXRvRGVjb2RlckNhbmNlbE11dGV4KTsKLQotICAgICAgICAvLyB0YWtlIHVzIG91dCBvZiB0aGUgZGxsaXN0Ci0gICAgICAgIEF1dG9EZWNvZGVyQ2FuY2VsKiBwcmV2ID0gZlByZXY7Ci0gICAgICAgIEF1dG9EZWNvZGVyQ2FuY2VsKiBuZXh0ID0gZk5leHQ7Ci0KLSAgICAgICAgaWYgKHByZXYpIHsKLSAgICAgICAgICAgIFNrQVNTRVJUKHByZXYtPmZOZXh0ID09IHRoaXMpOwotICAgICAgICAgICAgcHJldi0+Zk5leHQgPSBuZXh0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU2tBU1NFUlQoZ0F1dG9EZWNvZGVyQ2FuY2VsID09IHRoaXMpOwotICAgICAgICAgICAgZ0F1dG9EZWNvZGVyQ2FuY2VsID0gbmV4dDsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV4dCkgewotICAgICAgICAgICAgU2tBU1NFUlQobmV4dC0+ZlByZXYgPT0gdGhpcyk7Ci0gICAgICAgICAgICBuZXh0LT5mUHJldiA9IHByZXY7Ci0gICAgICAgIH0KLQotICAgICAgICBTa0RFQlVHQ09ERShnQXV0b0RlY29kZXJDYW5jZWxDb3VudCAtPSAxOykKLSAgICAgICAgVmFsaWRhdGUoKTsKLSAgICB9Ci19Ci0KLWJvb2wgQXV0b0RlY29kZXJDYW5jZWw6OlJlcXVlc3RDYW5jZWwoam9iamVjdCBqb3B0aW9ucykgewotICAgIFNrQXV0b011dGV4QWNxdWlyZSBhYyhnQXV0b0RlY29kZXJDYW5jZWxNdXRleCk7Ci0KLSAgICBWYWxpZGF0ZSgpOwotCi0gICAgQXV0b0RlY29kZXJDYW5jZWwqIHBhaXIgPSBnQXV0b0RlY29kZXJDYW5jZWw7Ci0gICAgd2hpbGUgKHBhaXIgIT0gTlVMTCkgewotICAgICAgICBpZiAocGFpci0+ZkpPcHRpb25zID09IGpvcHRpb25zKSB7Ci0gICAgICAgICAgICBwYWlyLT5mRGVjb2Rlci0+Y2FuY2VsRGVjb2RlKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBwYWlyID0gcGFpci0+Zk5leHQ7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotI2lmZGVmIFNLX0RFQlVHCi0vLyBjYW4gb25seSBjYWxsIHRoaXMgaW5zaWRlIGEgbG9jayBvbiBnQXV0b0RlY29kZXJDYW5jZWxNdXRleAotdm9pZCBBdXRvRGVjb2RlckNhbmNlbDo6VmFsaWRhdGUoKSB7Ci0gICAgY29uc3QgaW50IGdDb3VudCA9IGdBdXRvRGVjb2RlckNhbmNlbENvdW50OwotCi0gICAgaWYgKGdDb3VudCA9PSAwKSB7Ci0gICAgICAgIFNrQVNTRVJUKGdBdXRvRGVjb2RlckNhbmNlbCA9PSBOVUxMKTsKLSAgICB9IGVsc2UgewotICAgICAgICBTa0FTU0VSVChnQ291bnQgPiAwKTsKLQotICAgICAgICBBdXRvRGVjb2RlckNhbmNlbCogY3VyciA9IGdBdXRvRGVjb2RlckNhbmNlbDsKLSAgICAgICAgU2tBU1NFUlQoY3Vycik7Ci0gICAgICAgIFNrQVNTRVJUKGN1cnItPmZQcmV2ID09IE5VTEwpOwotCi0gICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgIHdoaWxlIChjdXJyKSB7Ci0gICAgICAgICAgICBjb3VudCArPSAxOwotICAgICAgICAgICAgU2tBU1NFUlQoY291bnQgPD0gZ0NvdW50KTsKLSAgICAgICAgICAgIGlmIChjdXJyLT5mUHJldikgewotICAgICAgICAgICAgICAgIFNrQVNTRVJUKGN1cnItPmZQcmV2LT5mTmV4dCA9PSBjdXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjdXJyLT5mTmV4dCkgewotICAgICAgICAgICAgICAgIFNrQVNTRVJUKGN1cnItPmZOZXh0LT5mUHJldiA9PSBjdXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5mTmV4dDsKLSAgICAgICAgfQotICAgICAgICBTa0FTU0VSVChjb3VudCA9PSBnQ291bnQpOwotICAgIH0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9BdXRvRGVjb2RlQ2FuY2VsLmggYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0F1dG9EZWNvZGVDYW5jZWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ2YTBkNC4uMDAwMDAwMAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0F1dG9EZWNvZGVDYW5jZWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSNpZm5kZWYgX0FORFJPSURfR1JBUEhJQ1NfQVVUT19ERUNPREVfQ0FOQ0VMX0hfCi0jZGVmaW5lIF9BTkRST0lEX0dSQVBISUNTX0FVVE9fREVDT0RFX0NBTkNFTF9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSAiU2tJbWFnZURlY29kZXIuaCIKLQotY2xhc3MgQXV0b0RlY29kZXJDYW5jZWwgewotcHVibGljOgotICAgIEF1dG9EZWNvZGVyQ2FuY2VsKGpvYmplY3Qgb3B0aW9ucywgU2tJbWFnZURlY29kZXIqIGRlY29kZXIpOwotICAgIH5BdXRvRGVjb2RlckNhbmNlbCgpOwotCi0gICAgc3RhdGljIGJvb2wgUmVxdWVzdENhbmNlbChqb2JqZWN0IG9wdGlvbnMpOwotCi1wcml2YXRlOgotICAgIEF1dG9EZWNvZGVyQ2FuY2VsKiAgZk5leHQ7Ci0gICAgQXV0b0RlY29kZXJDYW5jZWwqICBmUHJldjsKLSAgICBqb2JqZWN0ICAgICAgICAgICAgIGZKT3B0aW9uczsgIC8vIGphdmEgb3B0aW9ucyBvYmplY3QKLSAgICBTa0ltYWdlRGVjb2RlciogICAgIGZEZWNvZGVyOwotCi0jaWZkZWYgU0tfREVCVUcKLSAgICBzdGF0aWMgdm9pZCBWYWxpZGF0ZSgpOwotI2Vsc2UKLSAgICBzdGF0aWMgdm9pZCBWYWxpZGF0ZSgpIHt9Ci0jZW5kaWYKLX07Ci0KLSNlbmRpZiAgLy8gX0FORFJPSURfR1JBUEhJQ1NfQVVUT19ERUNPREVfQ0FOQ0VMX0hfCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmNwcAppbmRleCBlY2FmOTUxLi45MmY3ODEyIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5jcHAKQEAgLTEsMTAgKzEsMTEgQEAKICNkZWZpbmUgTE9HX1RBRyAiQml0bWFwRmFjdG9yeSIKIAotI2luY2x1ZGUgIkF1dG9EZWNvZGVDYW5jZWwuaCIKICNpbmNsdWRlICJCaXRtYXBGYWN0b3J5LmgiCiAjaW5jbHVkZSAiQ3JlYXRlSmF2YU91dHB1dFN0cmVhbUFkYXB0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0pOSS5oIgogI2luY2x1ZGUgIk5pbmVQYXRjaFBlZWtlci5oIgorI2luY2x1ZGUgIlNrQW5kcm9pZENvZGVjLmgiCisjaW5jbHVkZSAiU2tCUkRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJTa0Zyb250QnVmZmVyZWRTdHJlYW0uaCIKICNpbmNsdWRlICJTa0ltYWdlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlNrTWF0aC5oIgpAQCAtNDgsNDEgKzQ5LDQ0IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwogCi1qc3RyaW5nIGdldE1pbWVUeXBlU3RyaW5nKEpOSUVudiogZW52LCBTa0ltYWdlRGVjb2Rlcjo6Rm9ybWF0IGZvcm1hdCkgewotICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewotICAgICAgICBTa0ltYWdlRGVjb2Rlcjo6Rm9ybWF0IGZGb3JtYXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqICAgICAgICAgICAgZk1pbWVUeXBlOwotICAgIH0gZ01pbWVUeXBlc1tdID0gewotICAgICAgICB7IFNrSW1hZ2VEZWNvZGVyOjprQk1QX0Zvcm1hdCwgICJpbWFnZS9ibXAiIH0sCi0gICAgICAgIHsgU2tJbWFnZURlY29kZXI6OmtHSUZfRm9ybWF0LCAgImltYWdlL2dpZiIgfSwKLSAgICAgICAgeyBTa0ltYWdlRGVjb2Rlcjo6a0lDT19Gb3JtYXQsICAiaW1hZ2UveC1pY28iIH0sCi0gICAgICAgIHsgU2tJbWFnZURlY29kZXI6OmtKUEVHX0Zvcm1hdCwgImltYWdlL2pwZWciIH0sCi0gICAgICAgIHsgU2tJbWFnZURlY29kZXI6OmtQTkdfRm9ybWF0LCAgImltYWdlL3BuZyIgfSwKLSAgICAgICAgeyBTa0ltYWdlRGVjb2Rlcjo6a1dFQlBfRm9ybWF0LCAiaW1hZ2Uvd2VicCIgfSwKLSAgICAgICAgeyBTa0ltYWdlRGVjb2Rlcjo6a1dCTVBfRm9ybWF0LCAiaW1hZ2Uvdm5kLndhcC53Ym1wIiB9Ci0gICAgfTsKLQotICAgIGNvbnN0IGNoYXIqIGNzdHIgPSBudWxscHRyOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgU0tfQVJSQVlfQ09VTlQoZ01pbWVUeXBlcyk7IGkrKykgewotICAgICAgICBpZiAoZ01pbWVUeXBlc1tpXS5mRm9ybWF0ID09IGZvcm1hdCkgewotICAgICAgICAgICAgY3N0ciA9IGdNaW1lVHlwZXNbaV0uZk1pbWVUeXBlOworanN0cmluZyBlbmNvZGVkRm9ybWF0VG9TdHJpbmcoSk5JRW52KiBlbnYsIFNrRW5jb2RlZEZvcm1hdCBmb3JtYXQpIHsKKyAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIFNrRW5jb2RlZEZvcm1hdDo6a0JNUF9Ta0VuY29kZWRGb3JtYXQ6CisgICAgICAgICAgICBtaW1lVHlwZSA9ICJpbWFnZS9ibXAiOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtHSUZfU2tFbmNvZGVkRm9ybWF0OgorICAgICAgICAgICAgbWltZVR5cGUgPSAiaW1hZ2UvZ2lmIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrRW5jb2RlZEZvcm1hdDo6a0lDT19Ta0VuY29kZWRGb3JtYXQ6CisgICAgICAgICAgICBtaW1lVHlwZSA9ICJpbWFnZS94LWljbyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtKUEVHX1NrRW5jb2RlZEZvcm1hdDoKKyAgICAgICAgICAgIG1pbWVUeXBlID0gImltYWdlL2pwZWciOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tFbmNvZGVkRm9ybWF0OjprUE5HX1NrRW5jb2RlZEZvcm1hdDoKKyAgICAgICAgICAgIG1pbWVUeXBlID0gImltYWdlL3BuZyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtXRUJQX1NrRW5jb2RlZEZvcm1hdDoKKyAgICAgICAgICAgIG1pbWVUeXBlID0gImltYWdlL3dlYnAiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tFbmNvZGVkRm9ybWF0OjprV0JNUF9Ta0VuY29kZWRGb3JtYXQ6CisgICAgICAgICAgICBtaW1lVHlwZSA9ICJpbWFnZS92bmQud2FwLndibXAiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtaW1lVHlwZSA9IG51bGxwdHI7CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBqc3RyaW5nIGpzdHIgPSBudWxscHRyOwotICAgIGlmIChjc3RyICE9IG51bGxwdHIpIHsKKyAgICBpZiAobWltZVR5cGUpIHsKICAgICAgICAgLy8gTk9URTogQ2FsbGVyIHNob3VsZCBlbnYtPkV4Y2VwdGlvbkNoZWNrKCkgZm9yIE9PTQogICAgICAgICAvLyAoY2FuJ3QgY2hlY2sgZm9yIG51bGxwdHIgYXMgaXQncyBhIHZhbGlkIHJldHVybiB2YWx1ZSkKLSAgICAgICAganN0ciA9IGVudi0+TmV3U3RyaW5nVVRGKGNzdHIpOworICAgICAgICBqc3RyID0gZW52LT5OZXdTdHJpbmdVVEYobWltZVR5cGUpOwogICAgIH0KICAgICByZXR1cm4ganN0cjsKIH0KIAotc3RhdGljIGJvb2wgb3B0aW9uc0p1c3RCb3VuZHMoSk5JRW52KiBlbnYsIGpvYmplY3Qgb3B0aW9ucykgewotICAgIHJldHVybiBvcHRpb25zICE9IE5VTEwgJiYgZW52LT5HZXRCb29sZWFuRmllbGQob3B0aW9ucywgZ09wdGlvbnNfanVzdEJvdW5kc0ZpZWxkSUQpOwotfQotCiBzdGF0aWMgdm9pZCBzY2FsZURpdlJhbmdlKGludDMyX3QqIGRpdnMsIGludCBjb3VudCwgZmxvYXQgc2NhbGUsIGludCBtYXhWYWx1ZSkgewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICBkaXZzW2ldID0gaW50MzJfdChkaXZzW2ldICogc2NhbGUgKyAwLjVmKTsKQEAgLTE5OCwyNCArMjAyLDMyIEBACiB9OwogCiBzdGF0aWMgam9iamVjdCBkb0RlY29kZShKTklFbnYqIGVudiwgU2tTdHJlYW1SZXdpbmRhYmxlKiBzdHJlYW0sIGpvYmplY3QgcGFkZGluZywgam9iamVjdCBvcHRpb25zKSB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGlucHV0IHN0cmVhbS4gIFNpbmNlIHRoZSBTa0FuZHJvaWRDb2RlYworICAgIC8vIHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cmVhbSwgd2UgZG9uJ3QgbmVjZXNzYXJpbHkgbmVlZCB0byB0YWtlIG93bmVyc2hpcAorICAgIC8vIGhlcmUuICBUaGlzIGlzIGEgcHJlY2F1dGlvbiAtIGlmIHdlIHdlcmUgdG8gcmV0dXJuIGJlZm9yZSBjcmVhdGluZyB0aGUgY29kZWMsCisgICAgLy8gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkZWxldGUgdGhlIHN0cmVhbS4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2tTdHJlYW1SZXdpbmRhYmxlPiBzdHJlYW1EZWxldGVyKHN0cmVhbSk7CiAKKyAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcHRpb25zIHBhcmFtZXRlcnMuCiAgICAgaW50IHNhbXBsZVNpemUgPSAxOwotCi0gICAgU2tJbWFnZURlY29kZXI6Ok1vZGUgZGVjb2RlTW9kZSA9IFNrSW1hZ2VEZWNvZGVyOjprRGVjb2RlUGl4ZWxzX01vZGU7CisgICAgYm9vbCBvbmx5RGVjb2RlU2l6ZSA9IGZhbHNlOwogICAgIFNrQ29sb3JUeXBlIHByZWZDb2xvclR5cGUgPSBrTjMyX1NrQ29sb3JUeXBlOwotCi0gICAgYm9vbCBkb0RpdGhlciA9IHRydWU7CiAgICAgYm9vbCBpc011dGFibGUgPSBmYWxzZTsKICAgICBmbG9hdCBzY2FsZSA9IDEuMGY7Ci0gICAgYm9vbCBwcmVmZXJRdWFsaXR5T3ZlclNwZWVkID0gZmFsc2U7CiAgICAgYm9vbCByZXF1aXJlVW5wcmVtdWx0aXBsaWVkID0gZmFsc2U7Ci0KICAgICBqb2JqZWN0IGphdmFCaXRtYXAgPSBOVUxMOwogCisgICAgLy8gVXBkYXRlIHdpdGggb3B0aW9ucyBzdXBwbGllZCBieSB0aGUgY2xpZW50LgogICAgIGlmIChvcHRpb25zICE9IE5VTEwpIHsKICAgICAgICAgc2FtcGxlU2l6ZSA9IGVudi0+R2V0SW50RmllbGQob3B0aW9ucywgZ09wdGlvbnNfc2FtcGxlU2l6ZUZpZWxkSUQpOwotICAgICAgICBpZiAob3B0aW9uc0p1c3RCb3VuZHMoZW52LCBvcHRpb25zKSkgewotICAgICAgICAgICAgZGVjb2RlTW9kZSA9IFNrSW1hZ2VEZWNvZGVyOjprRGVjb2RlQm91bmRzX01vZGU7CisgICAgICAgIC8vIENvcnJlY3QgYSBub24tcG9zaXRpdmUgc2FtcGxlU2l6ZS4gIHNhbXBsZVNpemUgZGVmYXVsdHMgdG8gemVybyB3aXRoaW4gdGhlCisgICAgICAgIC8vIG9wdGlvbnMgb2JqZWN0LCB3aGljaCBpcyBzdHJhbmdlLgorICAgICAgICBpZiAoc2FtcGxlU2l6ZSA8PSAwKSB7CisgICAgICAgICAgICBzYW1wbGVTaXplID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnYtPkdldEJvb2xlYW5GaWVsZChvcHRpb25zLCBnT3B0aW9uc19qdXN0Qm91bmRzRmllbGRJRCkpIHsKKyAgICAgICAgICAgIG9ubHlEZWNvZGVTaXplID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGluaXRpYWxpemUgdGhlc2UsIGluIGNhc2Ugd2UgZmFpbCBsYXRlciBvbgpAQCAtMjI2LDkgKzIzOCw2IEBACiAgICAgICAgIGpvYmplY3QgamNvbmZpZyA9IGVudi0+R2V0T2JqZWN0RmllbGQob3B0aW9ucywgZ09wdGlvbnNfY29uZmlnRmllbGRJRCk7CiAgICAgICAgIHByZWZDb2xvclR5cGUgPSBHcmFwaGljc0pOSTo6Z2V0TmF0aXZlQml0bWFwQ29sb3JUeXBlKGVudiwgamNvbmZpZyk7CiAgICAgICAgIGlzTXV0YWJsZSA9IGVudi0+R2V0Qm9vbGVhbkZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX211dGFibGVGaWVsZElEKTsKLSAgICAgICAgZG9EaXRoZXIgPSBlbnYtPkdldEJvb2xlYW5GaWVsZChvcHRpb25zLCBnT3B0aW9uc19kaXRoZXJGaWVsZElEKTsKLSAgICAgICAgcHJlZmVyUXVhbGl0eU92ZXJTcGVlZCA9IGVudi0+R2V0Qm9vbGVhbkZpZWxkKG9wdGlvbnMsCi0gICAgICAgICAgICAgICAgZ09wdGlvbnNfcHJlZmVyUXVhbGl0eU92ZXJTcGVlZEZpZWxkSUQpOwogICAgICAgICByZXF1aXJlVW5wcmVtdWx0aXBsaWVkID0gIWVudi0+R2V0Qm9vbGVhbkZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX3ByZW11bHRpcGxpZWRGaWVsZElEKTsKICAgICAgICAgamF2YUJpdG1hcCA9IGVudi0+R2V0T2JqZWN0RmllbGQob3B0aW9ucywgZ09wdGlvbnNfYml0bWFwRmllbGRJRCk7CiAKQEAgLTI0MSwxOCArMjUwLDQwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBjb25zdCBib29sIHdpbGxTY2FsZSA9IHNjYWxlICE9IDEuMGY7CiAKLSAgICBTa0ltYWdlRGVjb2RlciogZGVjb2RlciA9IFNrSW1hZ2VEZWNvZGVyOjpGYWN0b3J5KHN0cmVhbSk7Ci0gICAgaWYgKGRlY29kZXIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gbnVsbE9iamVjdFJldHVybigiU2tJbWFnZURlY29kZXI6OkZhY3RvcnkgcmV0dXJuZWQgbnVsbCIpOworICAgIC8vIENyZWF0ZSB0aGUgY29kZWMuCisgICAgTmluZVBhdGNoUGVla2VyIHBlZWtlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2tBbmRyb2lkQ29kZWM+IGNvZGVjKFNrQW5kcm9pZENvZGVjOjpOZXdGcm9tU3RyZWFtKHN0cmVhbURlbGV0ZXIucmVsZWFzZSgpLAorICAgICAgICAgICAgJnBlZWtlcikpOworICAgIGlmICghY29kZWMuZ2V0KCkpIHsKKyAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oIlNrQW5kcm9pZENvZGVjOjpOZXdGcm9tU3RyZWFtIHJldHVybmVkIG51bGwiKTsKICAgICB9CiAKLSAgICBkZWNvZGVyLT5zZXRTYW1wbGVTaXplKHNhbXBsZVNpemUpOwotICAgIGRlY29kZXItPnNldERpdGhlckltYWdlKGRvRGl0aGVyKTsKLSAgICBkZWNvZGVyLT5zZXRQcmVmZXJRdWFsaXR5T3ZlclNwZWVkKHByZWZlclF1YWxpdHlPdmVyU3BlZWQpOwotICAgIGRlY29kZXItPnNldFJlcXVpcmVVbnByZW11bHRpcGxpZWRDb2xvcnMocmVxdWlyZVVucHJlbXVsdGlwbGllZCk7CisgICAgLy8gRG8gbm90IGFsbG93IG5pbmVwYXRjaCBkZWNvZGVzIHRvIDU2NS4gIEluIHRoZSBwYXN0LCBkZWNvZGVzIHRvIDU2NQorICAgIC8vIHdvdWxkIGRpdGhlciwgYW5kIHdlIGRvIG5vdCB3YW50IHRvIHByZS1kaXRoZXIgbmluZXBhdGNoZXMsIHNpbmNlIHdlCisgICAgLy8ga25vdyB0aGF0IHRoZXkgd2lsbCBiZSBzdHJldGNoZWQuICBXZSBubyBsb25nZXIgZGl0aGVyIDU2NSBkZWNvZGVzLAorICAgIC8vIGJ1dCB3ZSBjb250aW51ZSB0byBwcmV2ZW50IG5pbmVwYXRjaGVzIGZyb20gZGVjb2RpbmcgdG8gNTY1LCBpbiBvcmRlcgorICAgIC8vIHRvIG1haW50YWluIHRoZSBvbGQgYmVoYXZpb3IuCisgICAgaWYgKHBlZWtlci5tUGF0Y2ggJiYga1JHQl81NjVfU2tDb2xvclR5cGUgPT0gcHJlZkNvbG9yVHlwZSkgeworICAgICAgICBwcmVmQ29sb3JUeXBlID0ga04zMl9Ta0NvbG9yVHlwZTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIG91dHB1dCBzaXplIGFuZCByZXR1cm4gaWYgdGhlIGNsaWVudCBvbmx5IHdhbnRzIHRoZSBzaXplLgorICAgIFNrSVNpemUgc2l6ZSA9IGNvZGVjLT5nZXRTYW1wbGVkRGltZW5zaW9ucyhzYW1wbGVTaXplKTsKKyAgICBpZiAob3B0aW9ucyAhPSBOVUxMKSB7CisgICAgICAgIGpzdHJpbmcgbWltZVR5cGUgPSBlbmNvZGVkRm9ybWF0VG9TdHJpbmcoZW52LCBjb2RlYy0+Z2V0RW5jb2RlZEZvcm1hdCgpKTsKKyAgICAgICAgaWYgKGVudi0+RXhjZXB0aW9uQ2hlY2soKSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oIk9PTSBpbiBlbmNvZGVkRm9ybWF0VG9TdHJpbmcoKSIpOworICAgICAgICB9CisgICAgICAgIGVudi0+U2V0SW50RmllbGQob3B0aW9ucywgZ09wdGlvbnNfd2lkdGhGaWVsZElELCBzaXplLndpZHRoKCkpOworICAgICAgICBlbnYtPlNldEludEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX2hlaWdodEZpZWxkSUQsIHNpemUuaGVpZ2h0KCkpOworICAgICAgICBlbnYtPlNldE9iamVjdEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX21pbWVGaWVsZElELCBtaW1lVHlwZSk7CisKKyAgICAgICAgaWYgKG9ubHlEZWNvZGVTaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KIAogICAgIGFuZHJvaWQ6OkJpdG1hcCogcmV1c2VCaXRtYXAgPSBudWxscHRyOwogICAgIHVuc2lnbmVkIGludCBleGlzdGluZ0J1ZmZlclNpemUgPSAwOwpAQCAtMjY3LDcxICsyOTgsOTYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIE5pbmVQYXRjaFBlZWtlciBwZWVrZXIoZGVjb2Rlcik7Ci0gICAgZGVjb2Rlci0+c2V0UGVla2VyKCZwZWVrZXIpOwotCiAgICAgSmF2YVBpeGVsQWxsb2NhdG9yIGphdmFBbGxvY2F0b3IoZW52KTsKICAgICBSZWN5Y2xpbmdQaXhlbEFsbG9jYXRvciByZWN5Y2xpbmdBbGxvY2F0b3IocmV1c2VCaXRtYXAsIGV4aXN0aW5nQnVmZmVyU2l6ZSk7CiAgICAgU2NhbGVDaGVja2luZ0FsbG9jYXRvciBzY2FsZUNoZWNraW5nQWxsb2NhdG9yKHNjYWxlLCBleGlzdGluZ0J1ZmZlclNpemUpOwotICAgIFNrQml0bWFwOjpBbGxvY2F0b3IqIG91dHB1dEFsbG9jYXRvciA9IChqYXZhQml0bWFwICE9IE5VTEwpID8KLSAgICAgICAgICAgIChTa0JpdG1hcDo6QWxsb2NhdG9yKikmcmVjeWNsaW5nQWxsb2NhdG9yIDogKFNrQml0bWFwOjpBbGxvY2F0b3IqKSZqYXZhQWxsb2NhdG9yOwotICAgIGlmIChkZWNvZGVNb2RlICE9IFNrSW1hZ2VEZWNvZGVyOjprRGVjb2RlQm91bmRzX01vZGUpIHsKLSAgICAgICAgaWYgKCF3aWxsU2NhbGUpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBqYXZhIGFsbG9jYXRvciBpcyBiZWluZyB1c2VkIHRvIGFsbG9jYXRlIHRoZSBwaXhlbCBtZW1vcnksIHRoZSBkZWNvZGVyCi0gICAgICAgICAgICAvLyBuZWVkIG5vdCB3cml0ZSB6ZXJvZXMsIHNpbmNlIHRoZSBtZW1vcnkgaXMgaW5pdGlhbGl6ZWQgdG8gMC4KLSAgICAgICAgICAgIGRlY29kZXItPnNldFNraXBXcml0aW5nWmVyb2VzKG91dHB1dEFsbG9jYXRvciA9PSAmamF2YUFsbG9jYXRvcik7Ci0gICAgICAgICAgICBkZWNvZGVyLT5zZXRBbGxvY2F0b3Iob3V0cHV0QWxsb2NhdG9yKTsKLSAgICAgICAgfSBlbHNlIGlmIChqYXZhQml0bWFwICE9IE5VTEwpIHsKLSAgICAgICAgICAgIC8vIGNoZWNrIGZvciBldmVudHVhbCBzY2FsZWQgYm91bmRzIGF0IGFsbG9jYXRpb24gdGltZSwgc28gd2UgZG9uJ3QgZGVjb2RlIHRoZSBiaXRtYXAKLSAgICAgICAgICAgIC8vIG9ubHkgdG8gZmluZCB0aGUgc2NhbGVkIHJlc3VsdCB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSBhbGxvY2F0aW9uCi0gICAgICAgICAgICBkZWNvZGVyLT5zZXRBbGxvY2F0b3IoJnNjYWxlQ2hlY2tpbmdBbGxvY2F0b3IpOwotICAgICAgICB9CisgICAgU2tCaXRtYXA6OkhlYXBBbGxvY2F0b3IgaGVhcEFsbG9jYXRvcjsKKyAgICBTa0JpdG1hcDo6QWxsb2NhdG9yKiBkZWNvZGVBbGxvY2F0b3I7CisgICAgaWYgKGphdmFCaXRtYXAgIT0gbnVsbHB0ciAmJiB3aWxsU2NhbGUpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsbG9jYXRlIHBpeGVscyB1c2luZyBhIEhlYXBBbGxvY2F0b3IsIHNpbmNlIHRoZXJlIHdpbGwgYmUgYW4gZXh0cmEKKyAgICAgICAgLy8gc2NhbGluZyBzdGVwIHRoYXQgY29waWVzIHRoZXNlIHBpeGVscyBpbnRvIEphdmEgbWVtb3J5LiAgVGhpcyBhbGxvY2F0b3IKKyAgICAgICAgLy8gYWxzbyBjaGVja3MgdGhhdCB0aGUgcmVjeWNsZWQgamF2YUJpdG1hcCBpcyBsYXJnZSBlbm91Z2guCisgICAgICAgIGRlY29kZUFsbG9jYXRvciA9ICZzY2FsZUNoZWNraW5nQWxsb2NhdG9yOworICAgIH0gZWxzZSBpZiAoamF2YUJpdG1hcCAhPSBudWxscHRyKSB7CisgICAgICAgIGRlY29kZUFsbG9jYXRvciA9ICZyZWN5Y2xpbmdBbGxvY2F0b3I7CisgICAgfSBlbHNlIGlmICh3aWxsU2NhbGUpIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIGFsbG9jYXRlIHBpeGVscyB1c2luZyBhIEhlYXBBbGxvY2F0b3IsIHNpbmNlIHRoZXJlIHdpbGwgYmUgYW4gZXh0cmEKKyAgICAgICAgLy8gc2NhbGluZyBzdGVwIHRoYXQgY29waWVzIHRoZXNlIHBpeGVscyBpbnRvIEphdmEgbWVtb3J5LgorICAgICAgICBkZWNvZGVBbGxvY2F0b3IgPSAmaGVhcEFsbG9jYXRvcjsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWNvZGVBbGxvY2F0b3IgPSAmamF2YUFsbG9jYXRvcjsKICAgICB9CiAKLSAgICAvLyBPbmx5IHNldHVwIHRoZSBkZWNvZGVyIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgaXRzIHN0YWNrLWJhc2VkLCByZWZjb3VudGVkCi0gICAgLy8gY29tcG9uZW50cyAoYWxsb2NhdG9ycywgcGVla2VycywgZXRjKSBhcmUgZGVjbGFyZWQuIFRoaXMgcHJldmVudHMgUmVmQ250Ci0gICAgLy8gYXNzZXJ0cyBmcm9tIGZpcmluZyBkdWUgdG8gdGhlIG9yZGVyIG9iamVjdHMgYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc3RhY2suCi0gICAgc3RkOjp1bmlxdWVfcHRyPFNrSW1hZ2VEZWNvZGVyPiBhZGQoZGVjb2Rlcik7CisgICAgLy8gU2V0IHRoZSBkZWNvZGUgY29sb3JUeXBlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgc3VwcG9ydAorICAgIC8vIHRoZSByZXF1ZXN0ZWQgY29sb3JUeXBlLgorICAgIFNrQ29sb3JUeXBlIGRlY29kZUNvbG9yVHlwZSA9IGNvZGVjLT5jb21wdXRlT3V0cHV0Q29sb3JUeXBlKHByZWZDb2xvclR5cGUpOwogCi0gICAgQXV0b0RlY29kZXJDYW5jZWwgYWRjKG9wdGlvbnMsIGRlY29kZXIpOworICAgIC8vIENvbnN0cnVjdCBhIGNvbG9yIHRhYmxlIGZvciB0aGUgZGVjb2RlIGlmIG5lY2Vzc2FyeQorICAgIFNrQXV0b1RVbnJlZjxTa0NvbG9yVGFibGU+IGNvbG9yVGFibGUobnVsbHB0cik7CisgICAgU2tQTUNvbG9yKiBjb2xvclB0ciA9IG51bGxwdHI7CisgICAgaW50KiBjb2xvckNvdW50ID0gbnVsbHB0cjsKKyAgICBpbnQgbWF4Q29sb3JzID0gMjU2OworICAgIFNrUE1Db2xvciBjb2xvcnNbMjU2XTsKKyAgICBpZiAoa0luZGV4XzhfU2tDb2xvclR5cGUgPT0gZGVjb2RlQ29sb3JUeXBlKSB7CisgICAgICAgIGNvbG9yVGFibGUucmVzZXQobmV3IFNrQ29sb3JUYWJsZShjb2xvcnMsIG1heENvbG9ycykpOwogCi0gICAgLy8gVG8gZml4IHRoZSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlICJyZXF1ZXN0Q2FuY2VsRGVjb2RlIgotICAgIC8vIGhhcHBlbnMgZWFybGllciB0aGFuIEF1dG9EZWNvZGVyQ2FuY2VsIG9iamVjdCBpcyBhZGRlZAotICAgIC8vIHRvIHRoZSBnQXV0b0RlY29kZXJDYW5jZWxNdXRleCBsaW5rZWQgbGlzdC4KLSAgICBpZiAob3B0aW9ucyAhPSBOVUxMICYmIGVudi0+R2V0Qm9vbGVhbkZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX21DYW5jZWxJRCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oImdPcHRpb25zX21DYW5jZWxJRCIpOworICAgICAgICAvLyBTa0NvbG9yVGFibGUgZXhwZWN0cyB1cyB0byBpbml0aWFsaXplIGFsbCBvZiB0aGUgY29sb3JzIGJlZm9yZSBjcmVhdGluZyBhbgorICAgICAgICAvLyBTa0NvbG9yVGFibGUuICBIb3dldmVyLCB3ZSBhcmUgdXNpbmcgU2tCaXRtYXAgd2l0aCBhbiBBbGxvY2F0b3IgdG8gYWxsb2NhdGUKKyAgICAgICAgLy8gbWVtb3J5IGZvciB0aGUgZGVjb2RlLCBzbyB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgU2tDb2xvclRhYmxlIGJlZm9yZSBkZWNvZGluZy4KKyAgICAgICAgLy8gSXQgaXMgc2FmZSBmb3IgU2tBbmRyb2lkQ29kZWMgdG8gbW9kaWZ5IHRoZSBjb2xvcnMgYmVjYXVzZSB0aGlzIFNrQml0bWFwIGlzCisgICAgICAgIC8vIG5vdCBiZWluZyB1c2VkIGVsc2V3aGVyZS4KKyAgICAgICAgY29sb3JQdHIgPSBjb25zdF9jYXN0PFNrUE1Db2xvcio+KGNvbG9yVGFibGUtPnJlYWRDb2xvcnMoKSk7CisgICAgICAgIGNvbG9yQ291bnQgPSAmbWF4Q29sb3JzOwogICAgIH0KIAorICAgIC8vIFNldCB0aGUgYWxwaGEgdHlwZSBmb3IgdGhlIGRlY29kZS4KKyAgICBTa0FscGhhVHlwZSBhbHBoYVR5cGUgPSBjb2RlYy0+Y29tcHV0ZU91dHB1dEFscGhhVHlwZShyZXF1aXJlVW5wcmVtdWx0aXBsaWVkKTsKKworICAgIGNvbnN0IFNrSW1hZ2VJbmZvIGRlY29kZUluZm8gPSBTa0ltYWdlSW5mbzo6TWFrZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGRlY29kZUNvbG9yVHlwZSwKKyAgICAgICAgICAgIGFscGhhVHlwZSk7CisgICAgU2tJbWFnZUluZm8gYml0bWFwSW5mbyA9IGRlY29kZUluZm87CisgICAgaWYgKGRlY29kZUNvbG9yVHlwZSA9PSBrR3JheV84X1NrQ29sb3JUeXBlKSB7CisgICAgICAgIC8vIFRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gb2YgQml0bWFwRmFjdG9yeSB1c2VkIGtBbHBoYTggZm9yCisgICAgICAgIC8vIGdyYXlzY2FsZSBpbWFnZXMgKGJlZm9yZSBrR3JheTggZXhpc3RlZCkuICBXaGlsZSB0aGUgY29kZWMKKyAgICAgICAgLy8gcmVjb2duaXplcyBrR3JheTgsIHdlIG5lZWQgdG8gZGVjb2RlIGludG8gYSBrQWxwaGE4IGJpdG1hcAorICAgICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhIGJlaGF2aW9yIGNoYW5nZS4KKyAgICAgICAgYml0bWFwSW5mbyA9IFNrSW1hZ2VJbmZvOjpNYWtlQTgoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICB9CiAgICAgU2tCaXRtYXAgZGVjb2RpbmdCaXRtYXA7Ci0gICAgaWYgKGRlY29kZXItPmRlY29kZShzdHJlYW0sICZkZWNvZGluZ0JpdG1hcCwgcHJlZkNvbG9yVHlwZSwgZGVjb2RlTW9kZSkKLSAgICAgICAgICAgICAgICAhPSBTa0ltYWdlRGVjb2Rlcjo6a1N1Y2Nlc3MpIHsKLSAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oImRlY29kZXItPmRlY29kZSByZXR1cm5lZCBmYWxzZSIpOworICAgIGlmICghZGVjb2RpbmdCaXRtYXAuc2V0SW5mbyhiaXRtYXBJbmZvKSB8fAorICAgICAgICAgICAgIWRlY29kaW5nQml0bWFwLnRyeUFsbG9jUGl4ZWxzKGRlY29kZUFsbG9jYXRvciwgY29sb3JUYWJsZSkpIHsKKyAgICAgICAgLy8gU2tBbmRyb2lkQ29kZWMgc2hvdWxkIHJlY29tbWVuZCBhIHZhbGlkIFNrSW1hZ2VJbmZvLCBzbyBzZXRJbmZvKCkKKyAgICAgICAgLy8gc2hvdWxkIG9ubHkgb25seSBmYWlsIGlmIHRoZSBjYWxjdWxhdGVkIHZhbHVlIGZvciByb3dCeXRlcyBpcyB0b28KKyAgICAgICAgLy8gbGFyZ2UuCisgICAgICAgIC8vIHRyeUFsbG9jUGl4ZWxzKCkgY2FuIGZhaWwgZHVlIHRvIE9PTSBvbiB0aGUgSmF2YSBoZWFwLCBPT00gb24gdGhlCisgICAgICAgIC8vIG5hdGl2ZSBoZWFwLCBvciB0aGUgcmVjeWNsZWQgamF2YUJpdG1hcCBiZWluZyB0b28gc21hbGwgdG8gcmV1c2UuCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGludCBzY2FsZWRXaWR0aCA9IGRlY29kaW5nQml0bWFwLndpZHRoKCk7Ci0gICAgaW50IHNjYWxlZEhlaWdodCA9IGRlY29kaW5nQml0bWFwLmhlaWdodCgpOworICAgIC8vIFVzZSBTa0FuZHJvaWRDb2RlYyB0byBwZXJmb3JtIHRoZSBkZWNvZGUuCisgICAgU2tBbmRyb2lkQ29kZWM6OkFuZHJvaWRPcHRpb25zIGNvZGVjT3B0aW9uczsKKyAgICBjb2RlY09wdGlvbnMuZlplcm9Jbml0aWFsaXplZCA9IChkZWNvZGVBbGxvY2F0b3IgPT0gJmphdmFBbGxvY2F0b3IpID8KKyAgICAgICAgICAgIFNrQ29kZWM6OmtZZXNfWmVyb0luaXRpYWxpemVkIDogU2tDb2RlYzo6a05vX1plcm9Jbml0aWFsaXplZDsKKyAgICBjb2RlY09wdGlvbnMuZkNvbG9yUHRyID0gY29sb3JQdHI7CisgICAgY29kZWNPcHRpb25zLmZDb2xvckNvdW50ID0gY29sb3JDb3VudDsKKyAgICBjb2RlY09wdGlvbnMuZlNhbXBsZVNpemUgPSBzYW1wbGVTaXplOworICAgIFNrQ29kZWM6OlJlc3VsdCByZXN1bHQgPSBjb2RlYy0+Z2V0QW5kcm9pZFBpeGVscyhkZWNvZGVJbmZvLCBkZWNvZGluZ0JpdG1hcC5nZXRQaXhlbHMoKSwKKyAgICAgICAgICAgIGRlY29kaW5nQml0bWFwLnJvd0J5dGVzKCksICZjb2RlY09wdGlvbnMpOworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2tDb2RlYzo6a1N1Y2Nlc3M6CisgICAgICAgIGNhc2UgU2tDb2RlYzo6a0luY29tcGxldGVJbnB1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oImNvZGVjLT5nZXRBbmRyb2lkUGl4ZWxzKCkgZmFpbGVkLiIpOworICAgIH0KIAotICAgIGlmICh3aWxsU2NhbGUgJiYgZGVjb2RlTW9kZSAhPSBTa0ltYWdlRGVjb2Rlcjo6a0RlY29kZUJvdW5kc19Nb2RlKSB7CisgICAgaW50IHNjYWxlZFdpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGludCBzY2FsZWRIZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGlmICh3aWxsU2NhbGUpIHsKICAgICAgICAgc2NhbGVkV2lkdGggPSBpbnQoc2NhbGVkV2lkdGggKiBzY2FsZSArIDAuNWYpOwogICAgICAgICBzY2FsZWRIZWlnaHQgPSBpbnQoc2NhbGVkSGVpZ2h0ICogc2NhbGUgKyAwLjVmKTsKICAgICB9CiAKLSAgICAvLyB1cGRhdGUgb3B0aW9ucyAoaWYgYW55KQotICAgIGlmIChvcHRpb25zICE9IE5VTEwpIHsKLSAgICAgICAganN0cmluZyBtaW1lVHlwZSA9IGdldE1pbWVUeXBlU3RyaW5nKGVudiwgZGVjb2Rlci0+Z2V0Rm9ybWF0KCkpOwotICAgICAgICBpZiAoZW52LT5FeGNlcHRpb25DaGVjaygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbE9iamVjdFJldHVybigiT09NIGluIGdldE1pbWVUeXBlU3RyaW5nKCkiKTsKLSAgICAgICAgfQotICAgICAgICBlbnYtPlNldEludEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX3dpZHRoRmllbGRJRCwgc2NhbGVkV2lkdGgpOwotICAgICAgICBlbnYtPlNldEludEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX2hlaWdodEZpZWxkSUQsIHNjYWxlZEhlaWdodCk7Ci0gICAgICAgIGVudi0+U2V0T2JqZWN0RmllbGQob3B0aW9ucywgZ09wdGlvbnNfbWltZUZpZWxkSUQsIG1pbWVUeXBlKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB3ZSdyZSBpbiBqdXN0Qm91bmRzIG1vZGUsIHJldHVybiBub3cgKHNraXAgdGhlIGphdmEgYml0bWFwKQotICAgIGlmIChkZWNvZGVNb2RlID09IFNrSW1hZ2VEZWNvZGVyOjprRGVjb2RlQm91bmRzX01vZGUpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgamJ5dGVBcnJheSBuaW5lUGF0Y2hDaHVuayA9IE5VTEw7CiAgICAgaWYgKHBlZWtlci5tUGF0Y2ggIT0gTlVMTCkgewogICAgICAgICBpZiAod2lsbFNjYWxlKSB7CkBAIC0zNzcsMjkgKzQzMywzNiBAQAogICAgICAgICBjb25zdCBmbG9hdCBzeCA9IHNjYWxlZFdpZHRoIC8gZmxvYXQoZGVjb2RpbmdCaXRtYXAud2lkdGgoKSk7CiAgICAgICAgIGNvbnN0IGZsb2F0IHN5ID0gc2NhbGVkSGVpZ2h0IC8gZmxvYXQoZGVjb2RpbmdCaXRtYXAuaGVpZ2h0KCkpOwogCi0gICAgICAgIC8vIFRPRE86IGF2b2lkIGNvcHlpbmcgd2hlbiBzY2FsZWQgc2l6ZSBlcXVhbHMgZGVjb2RpbmdCaXRtYXAgc2l6ZQotICAgICAgICBTa0NvbG9yVHlwZSBjb2xvclR5cGUgPSBjb2xvclR5cGVGb3JTY2FsZWRPdXRwdXQoZGVjb2RpbmdCaXRtYXAuY29sb3JUeXBlKCkpOworICAgICAgICAvLyBTZXQgdGhlIGFsbG9jYXRvciBmb3IgdGhlIG91dHB1dEJpdG1hcC4KKyAgICAgICAgU2tCaXRtYXA6OkFsbG9jYXRvciogb3V0cHV0QWxsb2NhdG9yOworICAgICAgICBpZiAoamF2YUJpdG1hcCAhPSBudWxscHRyKSB7CisgICAgICAgICAgICBvdXRwdXRBbGxvY2F0b3IgPSAmcmVjeWNsaW5nQWxsb2NhdG9yOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0cHV0QWxsb2NhdG9yID0gJmphdmFBbGxvY2F0b3I7CisgICAgICAgIH0KKworICAgICAgICBTa0NvbG9yVHlwZSBzY2FsZWRDb2xvclR5cGUgPSBjb2xvclR5cGVGb3JTY2FsZWRPdXRwdXQoZGVjb2RpbmdCaXRtYXAuY29sb3JUeXBlKCkpOwogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGFscGhhVHlwZSBpcyBrVW5wcmVtdWwgYW5kIHRoZSBpbWFnZSBoYXMgYWxwaGEsIHRoZQogICAgICAgICAvLyBjb2xvcnMgbWF5IG5vdCBiZSBjb3JyZWN0LCBzaW5jZSBTa2lhIGRvZXMgbm90IHlldCBzdXBwb3J0IGRyYXdpbmcKICAgICAgICAgLy8gdG8vZnJvbSB1bnByZW11bHRpcGxpZWQgYml0bWFwcy4KICAgICAgICAgb3V0cHV0Qml0bWFwLnNldEluZm8oU2tJbWFnZUluZm86Ok1ha2Uoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwKLSAgICAgICAgICAgICAgICBjb2xvclR5cGUsIGRlY29kaW5nQml0bWFwLmFscGhhVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgc2NhbGVkQ29sb3JUeXBlLCBkZWNvZGluZ0JpdG1hcC5hbHBoYVR5cGUoKSkpOwogICAgICAgICBpZiAoIW91dHB1dEJpdG1hcC50cnlBbGxvY1BpeGVscyhvdXRwdXRBbGxvY2F0b3IsIE5VTEwpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGZhaWwgb24gT09NLiAgVGhlIHJlY3ljbGluZ0FsbG9jYXRvciBzaG91bGQgaGF2ZQorICAgICAgICAgICAgLy8gZW5vdWdoIG1lbW9yeSBzaW5jZSB3ZSBjaGVjayB0aGlzIGJlZm9yZSBkZWNvZGluZyB1c2luZyB0aGUKKyAgICAgICAgICAgIC8vIHNjYWxlQ2hlY2tpbmdBbGxvY2F0b3IuCiAgICAgICAgICAgICByZXR1cm4gbnVsbE9iamVjdFJldHVybigiYWxsb2NhdGlvbiBmYWlsZWQgZm9yIHNjYWxlZCBiaXRtYXAiKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIElmIG91dHB1dEJpdG1hcCdzIHBpeGVscyBhcmUgbmV3bHkgYWxsb2NhdGVkIGJ5IEphdmEsIHRoZXJlIGlzIG5vIG5lZWQKLSAgICAgICAgLy8gdG8gZXJhc2UgdG8gMCwgc2luY2UgdGhlIHBpeGVscyB3ZXJlIGluaXRpYWxpemVkIHRvIDAuCi0gICAgICAgIGlmIChvdXRwdXRBbGxvY2F0b3IgIT0gJmphdmFBbGxvY2F0b3IpIHsKLSAgICAgICAgICAgIG91dHB1dEJpdG1hcC5lcmFzZUNvbG9yKDApOwotICAgICAgICB9Ci0KICAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgLy8ga1NyY19Nb2RlIGluc3RydWN0cyB1cyB0byBvdmVyd3JpdGUgdGhlIHVuaW5pbml0aWFsaXplZCBwaXhlbHMgaW4KKyAgICAgICAgLy8gb3V0cHV0Qml0bWFwLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIGJsZW5kIGJ5IGRlZmF1bHQsIHdoaWNoIGlzIG5vdAorICAgICAgICAvLyB3aGF0IHdlIHdhbnQuCisgICAgICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hmZXJtb2RlOjprU3JjX01vZGUpOwogICAgICAgICBwYWludC5zZXRGaWx0ZXJRdWFsaXR5KGtMb3dfU2tGaWx0ZXJRdWFsaXR5KTsKIAogICAgICAgICBTa0NhbnZhcyBjYW52YXMob3V0cHV0Qml0bWFwKTsKICAgICAgICAgY2FudmFzLnNjYWxlKHN4LCBzeSk7Ci0gICAgICAgIGNhbnZhcy5kcmF3QVJHQigweDAwLCAweDAwLCAweDAwLCAweDAwKTsKICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoZGVjb2RpbmdCaXRtYXAsIDAuMGYsIDAuMGYsICZwYWludCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0cHV0Qml0bWFwLnN3YXAoZGVjb2RpbmdCaXRtYXApOwpAQCAtNDE1LDggKzQ3OCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBpZiB3ZSBnZXQgaGVyZSwgd2UncmUgaW4ga0RlY29kZVBpeGVsc19Nb2RlIGFuZCB3aWxsIHRoZXJlZm9yZQotICAgIC8vIGFscmVhZHkgaGF2ZSBhIHBpeGVscmVmIGluc3RhbGxlZC4KKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIG91dHB1dEJpdG1hcCBzaG91bGQgaGF2ZSBhbiBpbnN0YWxsZWQgcGl4ZWxyZWYuCiAgICAgaWYgKG91dHB1dEJpdG1hcC5waXhlbFJlZigpID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIG51bGxPYmplY3RSZXR1cm4oIkdvdCBudWxsIFNrUGl4ZWxSZWYiKTsKICAgICB9CkBAIC00MjYsOCArNDg4LDggQEAKICAgICAgICAgb3V0cHV0Qml0bWFwLnNldEltbXV0YWJsZSgpOwogICAgIH0KIAotICAgIGlmIChqYXZhQml0bWFwICE9IE5VTEwpIHsKLSAgICAgICAgYm9vbCBpc1ByZW11bHRpcGxpZWQgPSAhcmVxdWlyZVVucHJlbXVsdGlwbGllZDsKKyAgICBib29sIGlzUHJlbXVsdGlwbGllZCA9ICFyZXF1aXJlVW5wcmVtdWx0aXBsaWVkOworICAgIGlmIChqYXZhQml0bWFwICE9IG51bGxwdHIpIHsKICAgICAgICAgR3JhcGhpY3NKTkk6OnJlaW5pdEJpdG1hcChlbnYsIGphdmFCaXRtYXAsIG91dHB1dEJpdG1hcC5pbmZvKCksIGlzUHJlbXVsdGlwbGllZCk7CiAgICAgICAgIG91dHB1dEJpdG1hcC5ub3RpZnlQaXhlbHNDaGFuZ2VkKCk7CiAgICAgICAgIC8vIElmIGEgamF2YSBiaXRtYXAgd2FzIHBhc3NlZCBpbiBmb3IgcmV1c2UsIHBhc3MgaXQgYmFjawpAQCAtNDM2LDcgKzQ5OCw3IEBACiAKICAgICBpbnQgYml0bWFwQ3JlYXRlRmxhZ3MgPSAweDA7CiAgICAgaWYgKGlzTXV0YWJsZSkgYml0bWFwQ3JlYXRlRmxhZ3MgfD0gR3JhcGhpY3NKTkk6OmtCaXRtYXBDcmVhdGVGbGFnX011dGFibGU7Ci0gICAgaWYgKCFyZXF1aXJlVW5wcmVtdWx0aXBsaWVkKSBiaXRtYXBDcmVhdGVGbGFncyB8PSBHcmFwaGljc0pOSTo6a0JpdG1hcENyZWF0ZUZsYWdfUHJlbXVsdGlwbGllZDsKKyAgICBpZiAoaXNQcmVtdWx0aXBsaWVkKSBiaXRtYXBDcmVhdGVGbGFncyB8PSBHcmFwaGljc0pOSTo6a0JpdG1hcENyZWF0ZUZsYWdfUHJlbXVsdGlwbGllZDsKIAogICAgIC8vIG5vdyBjcmVhdGUgdGhlIGphdmEgYml0bWFwCiAgICAgcmV0dXJuIEdyYXBoaWNzSk5JOjpjcmVhdGVCaXRtYXAoZW52LCBqYXZhQWxsb2NhdG9yLmdldFN0b3JhZ2VPYmpBbmRSZXNldCgpLApAQCAtNDQ1LDggKzUwNyw4IEBACiAKIC8vIE5lZWQgdG8gYnVmZmVyIGVub3VnaCBpbnB1dCB0byBiZSBhYmxlIHRvIHJld2luZCBhcyBtdWNoIGFzIG1pZ2h0IGJlIHJlYWQgYnkgYSBkZWNvZGVyCiAvLyB0cnlpbmcgdG8gZGV0ZXJtaW5lIHRoZSBzdHJlYW0ncyBmb3JtYXQuIEN1cnJlbnRseSB0aGUgbW9zdCBpcyA2NCwgcmVhZCBieQotLy8gU2tJbWFnZURlY29kZXJfbGlid2VicC4KLS8vIEZJWE1FOiBHZXQgdGhpcyBudW1iZXIgZnJvbSBTa0ltYWdlRGVjb2RlcgorLy8gU2tXZWJwQ29kZWMuCisvLyBGSVhNRTogR2V0IHRoaXMgbnVtYmVyIGZyb20gU2tDb2RlYwogI2RlZmluZSBCWVRFU19UT19CVUZGRVIgNjQKIAogc3RhdGljIGpvYmplY3QgbmF0aXZlRGVjb2RlU3RyZWFtKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBqb2JqZWN0IGlzLCBqYnl0ZUFycmF5IHN0b3JhZ2UsCkBAIC00NTksNyArNTIxLDcgQEAKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNrU3RyZWFtUmV3aW5kYWJsZT4gYnVmZmVyZWRTdHJlYW0oCiAgICAgICAgICAgICAgICAgU2tGcm9udEJ1ZmZlcmVkU3RyZWFtOjpDcmVhdGUoc3RyZWFtLnJlbGVhc2UoKSwgQllURVNfVE9fQlVGRkVSKSk7CiAgICAgICAgIFNrQVNTRVJUKGJ1ZmZlcmVkU3RyZWFtLmdldCgpICE9IE5VTEwpOwotICAgICAgICBiaXRtYXAgPSBkb0RlY29kZShlbnYsIGJ1ZmZlcmVkU3RyZWFtLmdldCgpLCBwYWRkaW5nLCBvcHRpb25zKTsKKyAgICAgICAgYml0bWFwID0gZG9EZWNvZGUoZW52LCBidWZmZXJlZFN0cmVhbS5yZWxlYXNlKCksIHBhZGRpbmcsIG9wdGlvbnMpOwogICAgIH0KICAgICByZXR1cm4gYml0bWFwOwogfQpAQCAtNTA1LDcgKzU2Nyw3IEBACiAgICAgc3RkOjp1bmlxdWVfcHRyPFNrU3RyZWFtUmV3aW5kYWJsZT4gc3RyZWFtKFNrRnJvbnRCdWZmZXJlZFN0cmVhbTo6Q3JlYXRlKGZpbGVTdHJlYW0ucmVsZWFzZSgpLAogICAgICAgICAgICAgQllURVNfVE9fQlVGRkVSKSk7CiAKLSAgICByZXR1cm4gZG9EZWNvZGUoZW52LCBzdHJlYW0uZ2V0KCksIHBhZGRpbmcsIGJpdG1hcEZhY3RvcnlPcHRpb25zKTsKKyAgICByZXR1cm4gZG9EZWNvZGUoZW52LCBzdHJlYW0ucmVsZWFzZSgpLCBwYWRkaW5nLCBiaXRtYXBGYWN0b3J5T3B0aW9ucyk7CiB9CiAKIHN0YXRpYyBqb2JqZWN0IG5hdGl2ZURlY29kZUFzc2V0KEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBqbG9uZyBuYXRpdmVfYXNzZXQsCkBAIC01MTQsMjAgKzU3NiwxNiBAQAogICAgIEFzc2V0KiBhc3NldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXNzZXQqPihuYXRpdmVfYXNzZXQpOwogICAgIC8vIHNpbmNlIHdlIGtub3cgd2UnbGwgYmUgZG9uZSB3aXRoIHRoZSBhc3NldCB3aGVuIHdlIHJldHVybiwgd2UgY2FuCiAgICAgLy8ganVzdCB1c2UgYSBzaW1wbGUgd3JhcHBlcgotICAgIEFzc2V0U3RyZWFtQWRhcHRvciBzdHJlYW0oYXNzZXQpOwotICAgIHJldHVybiBkb0RlY29kZShlbnYsICZzdHJlYW0sIHBhZGRpbmcsIG9wdGlvbnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3NldFN0cmVhbUFkYXB0b3I+IHN0cmVhbShuZXcgQXNzZXRTdHJlYW1BZGFwdG9yKGFzc2V0KSk7CisgICAgcmV0dXJuIGRvRGVjb2RlKGVudiwgc3RyZWFtLnJlbGVhc2UoKSwgcGFkZGluZywgb3B0aW9ucyk7CiB9CiAKIHN0YXRpYyBqb2JqZWN0IG5hdGl2ZURlY29kZUJ5dGVBcnJheShKTklFbnYqIGVudiwgam9iamVjdCwgamJ5dGVBcnJheSBieXRlQXJyYXksCiAgICAgICAgIGppbnQgb2Zmc2V0LCBqaW50IGxlbmd0aCwgam9iamVjdCBvcHRpb25zKSB7CiAKICAgICBBdXRvSmF2YUJ5dGVBcnJheSBhcihlbnYsIGJ5dGVBcnJheSk7Ci0gICAgU2tNZW1vcnlTdHJlYW0gc3RyZWFtKGFyLnB0cigpICsgb2Zmc2V0LCBsZW5ndGgsIGZhbHNlKTsKLSAgICByZXR1cm4gZG9EZWNvZGUoZW52LCAmc3RyZWFtLCBOVUxMLCBvcHRpb25zKTsKLX0KLQotc3RhdGljIHZvaWQgbmF0aXZlUmVxdWVzdENhbmNlbChKTklFbnYqLCBqb2JqZWN0IGpvcHRpb25zKSB7Ci0gICAgKHZvaWQpQXV0b0RlY29kZXJDYW5jZWw6OlJlcXVlc3RDYW5jZWwoam9wdGlvbnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTa01lbW9yeVN0cmVhbT4gc3RyZWFtKG5ldyBTa01lbW9yeVN0cmVhbShhci5wdHIoKSArIG9mZnNldCwgbGVuZ3RoLCBmYWxzZSkpOworICAgIHJldHVybiBkb0RlY29kZShlbnYsIHN0cmVhbS5yZWxlYXNlKCksIE5VTEwsIG9wdGlvbnMpOwogfQogCiBzdGF0aWMgamJvb2xlYW4gbmF0aXZlSXNTZWVrYWJsZShKTklFbnYqIGVudiwgam9iamVjdCwgam9iamVjdCBmaWxlRGVzY3JpcHRvcikgewpAQCAtNTY5LDEwICs2MjcsNiBAQAogICAgIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgSk5JTmF0aXZlTWV0aG9kIGdPcHRpb25zTWV0aG9kc1tdID0gewotICAgIHsgICAicmVxdWVzdENhbmNlbCIsICIoKVYiLCAodm9pZCopbmF0aXZlUmVxdWVzdENhbmNlbCB9Ci19OwotCiBpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19CaXRtYXBGYWN0b3J5KEpOSUVudiogZW52KSB7CiAgICAgamNsYXNzIG9wdGlvbnNfY2xhc3MgPSBGaW5kQ2xhc3NPckRpZShlbnYsICJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9ucyIpOwogICAgIGdPcHRpb25zX2JpdG1hcEZpZWxkSUQgPSBHZXRGaWVsZElET3JEaWUoZW52LCBvcHRpb25zX2NsYXNzLCAiaW5CaXRtYXAiLApAQCAtNjA0LDggKzY1OCw2IEBACiAgICAgZ0luc2V0U3RydWN0X2NvbnN0cnVjdG9yTWV0aG9kSUQgPSBHZXRNZXRob2RJRE9yRGllKGVudiwgZ0luc2V0U3RydWN0X2NsYXNzLCAiPGluaXQ+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihJSUlJSUlJSUZJRilWIik7CiAKLSAgICBhbmRyb2lkOjpSZWdpc3Rlck1ldGhvZHNPckRpZShlbnYsICJhbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkkT3B0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ09wdGlvbnNNZXRob2RzLCBORUxFTShnT3B0aW9uc01ldGhvZHMpKTsKICAgICByZXR1cm4gYW5kcm9pZDo6UmVnaXN0ZXJNZXRob2RzT3JEaWUoZW52LCAiYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7CiB9CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuaCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5oCmluZGV4IDIyYTk1NWYuLjA3ODI1ZGYgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5oCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQU5EUk9JRF9HUkFQSElDU19CSVRNQVBfRkFDVE9SWV9IXwogCiAjaW5jbHVkZSAiR3JhcGhpY3NKTkkuaCIKKyNpbmNsdWRlICJTa0VuY29kZWRGb3JtYXQuaCIKIAogZXh0ZXJuIGpjbGFzcyBnT3B0aW9uc19jbGFzczsKIGV4dGVybiBqZmllbGRJRCBnT3B0aW9uc19qdXN0Qm91bmRzRmllbGRJRDsKQEAgLTE5LDcgKzIwLDcgQEAKIGV4dGVybiBqZmllbGRJRCBnT3B0aW9uc19tQ2FuY2VsSUQ7CiBleHRlcm4gamZpZWxkSUQgZ09wdGlvbnNfYml0bWFwRmllbGRJRDsKIAotanN0cmluZyBnZXRNaW1lVHlwZVN0cmluZyhKTklFbnYqIGVudiwgU2tJbWFnZURlY29kZXI6OkZvcm1hdCBmb3JtYXQpOworanN0cmluZyBlbmNvZGVkRm9ybWF0VG9TdHJpbmcoSk5JRW52KiBlbnYsIFNrRW5jb2RlZEZvcm1hdCBmb3JtYXQpOwogCiBqb2JqZWN0IGRlY29kZUJpdG1hcChKTklFbnYqIGVudiwgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpOwogCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBSZWdpb25EZWNvZGVyLmNwcAppbmRleCBmMTBmNGJkLi5hMWJhNDJlIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcFJlZ2lvbkRlY29kZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwUmVnaW9uRGVjb2Rlci5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJTa0JpdG1hcFJlZ2lvbkRlY29kZXIuaCIKICNpbmNsdWRlICJTa0NvZGVjLmgiCiAjaW5jbHVkZSAiU2tEYXRhLmgiCi0jaW5jbHVkZSAiU2tFbmNvZGVkRm9ybWF0LmgiCiAjaW5jbHVkZSAiU2tVdGlscy5oIgogI2luY2x1ZGUgIlNrUGl4ZWxSZWYuaCIKICNpbmNsdWRlICJTa1N0cmVhbS5oIgpAQCAtNDIsNDMgKzQxLDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKLS8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvLCBhbmQgYmFzZWQgb24sIGdldE1pbWVUeXBlU3RyaW5nKCkgaW4gQml0bWFwRmFjdG9yeS4KLWpzdHJpbmcgZW5jb2RlZEZvcm1hdFRvU3RyaW5nKEpOSUVudiogZW52LCBTa0VuY29kZWRGb3JtYXQgZm9ybWF0KSB7Ci0gICAgY29uc3QgY2hhciogbWltZVR5cGU7Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtCTVBfU2tFbmNvZGVkRm9ybWF0OgotICAgICAgICAgICAgbWltZVR5cGUgPSAiaW1hZ2UvYm1wIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrRW5jb2RlZEZvcm1hdDo6a0dJRl9Ta0VuY29kZWRGb3JtYXQ6Ci0gICAgICAgICAgICBtaW1lVHlwZSA9ICJpbWFnZS9naWYiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tFbmNvZGVkRm9ybWF0OjprSUNPX1NrRW5jb2RlZEZvcm1hdDoKLSAgICAgICAgICAgIG1pbWVUeXBlID0gImltYWdlL3gtaWNvIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrRW5jb2RlZEZvcm1hdDo6a0pQRUdfU2tFbmNvZGVkRm9ybWF0OgotICAgICAgICAgICAgbWltZVR5cGUgPSAiaW1hZ2UvanBlZyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtQTkdfU2tFbmNvZGVkRm9ybWF0OgotICAgICAgICAgICAgbWltZVR5cGUgPSAiaW1hZ2UvcG5nIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrRW5jb2RlZEZvcm1hdDo6a1dFQlBfU2tFbmNvZGVkRm9ybWF0OgotICAgICAgICAgICAgbWltZVR5cGUgPSAiaW1hZ2Uvd2VicCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTa0VuY29kZWRGb3JtYXQ6OmtXQk1QX1NrRW5jb2RlZEZvcm1hdDoKLSAgICAgICAgICAgIG1pbWVUeXBlID0gImltYWdlL3ZuZC53YXAud2JtcCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1pbWVUeXBlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGpzdHJpbmcganN0ciA9IG51bGxwdHI7Ci0gICAgaWYgKG1pbWVUeXBlICE9IG51bGxwdHIpIHsKLSAgICAgICAganN0ciA9IGVudi0+TmV3U3RyaW5nVVRGKG1pbWVUeXBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpzdHI7Ci19Ci0KIC8vIFRha2VzIG93bmVyc2hpcCBvZiB0aGUgU2tTdHJlYW1SZXdpbmRhYmxlLiBGb3IgY29uc2lzdGVuY3ksIGRlbGV0ZXMgc3RyZWFtIGV2ZW4KIC8vIHdoZW4gcmV0dXJuaW5nIG51bGwuCiBzdGF0aWMgam9iamVjdCBjcmVhdGVCaXRtYXBSZWdpb25EZWNvZGVyKEpOSUVudiogZW52LCBTa1N0cmVhbVJld2luZGFibGUqIHN0cmVhbSkgewpAQCAtMTc0LDkgKzEzNiw2IEBACiAgICAgICAgIHNhbXBsZVNpemUgPSBlbnYtPkdldEludEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX3NhbXBsZVNpemVGaWVsZElEKTsKICAgICAgICAgam9iamVjdCBqY29uZmlnID0gZW52LT5HZXRPYmplY3RGaWVsZChvcHRpb25zLCBnT3B0aW9uc19jb25maWdGaWVsZElEKTsKICAgICAgICAgY29sb3JUeXBlID0gR3JhcGhpY3NKTkk6OmdldE5hdGl2ZUJpdG1hcENvbG9yVHlwZShlbnYsIGpjb25maWcpOwotICAgICAgICBpZiAoa0FscGhhXzhfU2tDb2xvclR5cGUgPT0gY29sb3JUeXBlKSB7Ci0gICAgICAgICAgICBjb2xvclR5cGUgPSBrR3JheV84X1NrQ29sb3JUeXBlOwotICAgICAgICB9CiAgICAgICAgIHJlcXVpcmVVbnByZW11bCA9ICFlbnYtPkdldEJvb2xlYW5GaWVsZChvcHRpb25zLCBnT3B0aW9uc19wcmVtdWx0aXBsaWVkRmllbGRJRCk7CiAgICAgICAgIGphdmFCaXRtYXAgPSBlbnYtPkdldE9iamVjdEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX2JpdG1hcEZpZWxkSUQpOwogICAgICAgICAvLyBUaGUgSmF2YSBvcHRpb25zIG9mIGRpdGhlck1vZGUgYW5kIHByZWZlclF1YWxpdHlPdmVyU3BlZWQgYXJlIGRlcHJlY2F0ZWQuICBXZSB3aWxsCkBAIC0yMjcsNiArMTg2LDkgQEAKICAgICAgICAgZW52LT5TZXRJbnRGaWVsZChvcHRpb25zLCBnT3B0aW9uc19oZWlnaHRGaWVsZElELCBiaXRtYXAuaGVpZ2h0KCkpOwogICAgICAgICBlbnYtPlNldE9iamVjdEZpZWxkKG9wdGlvbnMsIGdPcHRpb25zX21pbWVGaWVsZElELAogICAgICAgICAgICAgICAgIGVuY29kZWRGb3JtYXRUb1N0cmluZyhlbnYsIGJyZC0+Z2V0RW5jb2RlZEZvcm1hdCgpKSk7CisgICAgICAgIGlmIChlbnYtPkV4Y2VwdGlvbkNoZWNrKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsT2JqZWN0UmV0dXJuKCJPT00gaW4gZW5jb2RlZEZvcm1hdFRvU3RyaW5nKCkiKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIElmIHdlIG1heSBoYXZlIHJldXNlZCBhIGJpdG1hcCwgd2UgbmVlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwaXhlbHMgaGF2ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Db2xvckZpbHRlci5jcHAgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyLmNwcAppbmRleCA4M2ZkMDczLi4xYTg2ZTVmIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0NvbG9yRmlsdGVyLmNwcApAQCAtNDIsNyArNDIsNyBAQAogICAgIH0KIAogICAgIHN0YXRpYyBqbG9uZyBDcmVhdGVMaWdodGluZ0ZpbHRlcihKTklFbnYqIGVudiwgam9iamVjdCwgamludCBtdWwsIGppbnQgYWRkKSB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihTa0NvbG9yRmlsdGVyOjpDcmVhdGVMaWdodGluZ0ZpbHRlcihtdWwsIGFkZCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4oU2tDb2xvck1hdHJpeEZpbHRlcjo6Q3JlYXRlTGlnaHRpbmdGaWx0ZXIobXVsLCBhZGQpKTsKICAgICB9CiAKICAgICBzdGF0aWMgamxvbmcgQ3JlYXRlQ29sb3JNYXRyaXhGaWx0ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpmbG9hdEFycmF5IGphcnJheSkgewpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBiL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAKaW5kZXggZGFjNmQ5Ni4uN2M4ZGJlOCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9Gb250RmFtaWx5LmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwCkBAIC0zNiwxMiArMzYsMTIgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogc3RhdGljIGpsb25nIEZvbnRGYW1pbHlfY3JlYXRlKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LCBqc3RyaW5nIGxhbmcsIGppbnQgdmFyaWFudCkgewotICAgIEZvbnRMYW5ndWFnZSBmb250TGFuZ3VhZ2U7Ci0gICAgaWYgKGxhbmcgIT0gTlVMTCkgewotICAgICAgICBTY29wZWRVdGZDaGFycyBzdHIoZW52LCBsYW5nKTsKLSAgICAgICAgZm9udExhbmd1YWdlID0gRm9udExhbmd1YWdlKHN0ci5jX3N0cigpLCBzdHIuc2l6ZSgpKTsKKyAgICBpZiAobGFuZyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAoamxvbmcpbmV3IEZvbnRGYW1pbHkodmFyaWFudCk7CiAgICAgfQotICAgIHJldHVybiAoamxvbmcpbmV3IEZvbnRGYW1pbHkoZm9udExhbmd1YWdlLCB2YXJpYW50KTsKKyAgICBTY29wZWRVdGZDaGFycyBzdHIoZW52LCBsYW5nKTsKKyAgICB1aW50MzJfdCBsYW5nSWQgPSBGb250U3R5bGU6OnJlZ2lzdGVyTGFuZ3VhZ2VMaXN0KHN0ci5jX3N0cigpKTsKKyAgICByZXR1cm4gKGpsb25nKW5ldyBGb250RmFtaWx5KGxhbmdJZCwgdmFyaWFudCk7CiB9CiAKIHN0YXRpYyB2b2lkIEZvbnRGYW1pbHlfdW5yZWYoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGpsb25nIGZhbWlseVB0cikgewpAQCAtNTYsMTAgKzU2LDExIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGpib29sZWFuIEZvbnRGYW1pbHlfYWRkRm9udChKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgamxvbmcgZmFtaWx5UHRyLCBqc3RyaW5nIHBhdGgpIHsKK3N0YXRpYyBqYm9vbGVhbiBGb250RmFtaWx5X2FkZEZvbnQoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGpsb25nIGZhbWlseVB0ciwganN0cmluZyBwYXRoLAorICAgICAgICBqaW50IHR0Y0luZGV4KSB7CiAgICAgTlBFX0NIRUNLX1JFVFVSTl9aRVJPKGVudiwgcGF0aCk7CiAgICAgU2NvcGVkVXRmQ2hhcnMgc3RyKGVudiwgcGF0aCk7Ci0gICAgU2tUeXBlZmFjZSogZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21GaWxlKHN0ci5jX3N0cigpKTsKKyAgICBTa1R5cGVmYWNlKiBmYWNlID0gU2tUeXBlZmFjZTo6Q3JlYXRlRnJvbUZpbGUoc3RyLmNfc3RyKCksIHR0Y0luZGV4KTsKICAgICBpZiAoZmFjZSA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dFKCJhZGRGb250IGZhaWxlZCB0byBjcmVhdGUgZm9udCAlcyIsIHN0ci5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjksMTAgKzcwLDEwIEBACiB9CiAKIHN0YXRpYyBqYm9vbGVhbiBGb250RmFtaWx5X2FkZEZvbnRXZWlnaHRTdHlsZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgamxvbmcgZmFtaWx5UHRyLAotICAgICAgICBqc3RyaW5nIHBhdGgsIGppbnQgd2VpZ2h0LCBqYm9vbGVhbiBpc0l0YWxpYykgeworICAgICAgICBqc3RyaW5nIHBhdGgsIGppbnQgdHRjSW5kZXgsIGppbnQgd2VpZ2h0LCBqYm9vbGVhbiBpc0l0YWxpYykgewogICAgIE5QRV9DSEVDS19SRVRVUk5fWkVSTyhlbnYsIHBhdGgpOwogICAgIFNjb3BlZFV0ZkNoYXJzIHN0cihlbnYsIHBhdGgpOwotICAgIFNrVHlwZWZhY2UqIGZhY2UgPSBTa1R5cGVmYWNlOjpDcmVhdGVGcm9tRmlsZShzdHIuY19zdHIoKSk7CisgICAgU2tUeXBlZmFjZSogZmFjZSA9IFNrVHlwZWZhY2U6OkNyZWF0ZUZyb21GaWxlKHN0ci5jX3N0cigpLCB0dGNJbmRleCk7CiAgICAgaWYgKGZhY2UgPT0gTlVMTCkgewogICAgICAgICBBTE9HRSgiYWRkRm9udCBmYWlsZWQgdG8gY3JlYXRlIGZvbnQgJXMiLCBzdHIuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNyw4ICsxMjgsOCBAQAogc3RhdGljIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCBnRm9udEZhbWlseU1ldGhvZHNbXSA9IHsKICAgICB7ICJuQ3JlYXRlRmFtaWx5IiwgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0kpSiIsICh2b2lkKilGb250RmFtaWx5X2NyZWF0ZSB9LAogICAgIHsgIm5VbnJlZkZhbWlseSIsICAgICAgICAgICIoSilWIiwgKHZvaWQqKUZvbnRGYW1pbHlfdW5yZWYgfSwKLSAgICB7ICJuQWRkRm9udCIsICAgICAgICAgICAgICAiKEpMamF2YS9sYW5nL1N0cmluZzspWiIsICh2b2lkKilGb250RmFtaWx5X2FkZEZvbnQgfSwKLSAgICB7ICJuQWRkRm9udFdlaWdodFN0eWxlIiwgICAiKEpMamF2YS9sYW5nL1N0cmluZztJWilaIiwgKHZvaWQqKUZvbnRGYW1pbHlfYWRkRm9udFdlaWdodFN0eWxlIH0sCisgICAgeyAibkFkZEZvbnQiLCAgICAgICAgICAgICAgIihKTGphdmEvbGFuZy9TdHJpbmc7SSlaIiwgKHZvaWQqKUZvbnRGYW1pbHlfYWRkRm9udCB9LAorICAgIHsgIm5BZGRGb250V2VpZ2h0U3R5bGUiLCAgICIoSkxqYXZhL2xhbmcvU3RyaW5nO0lJWilaIiwgKHZvaWQqKUZvbnRGYW1pbHlfYWRkRm9udFdlaWdodFN0eWxlIH0sCiAgICAgeyAibkFkZEZvbnRGcm9tQXNzZXQiLCAgICAgIihKTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO0xqYXZhL2xhbmcvU3RyaW5nOylaIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopRm9udEZhbWlseV9hZGRGb250RnJvbUFzc2V0IH0sCiB9OwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hQZWVrZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hQZWVrZXIuY3BwCmluZGV4IDZjMzJhMjEuLjhhODRhMzUgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaFBlZWtlci5jcHAKQEAgLTE3LDEwICsxNywxMSBAQAogI2luY2x1ZGUgIk5pbmVQYXRjaFBlZWtlci5oIgogCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKKyNpbmNsdWRlICJTa0ltYWdlRGVjb2Rlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIAotYm9vbCBOaW5lUGF0Y2hQZWVrZXI6OnBlZWsoY29uc3QgY2hhciB0YWdbXSwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGxlbmd0aCkgeworYm9vbCBOaW5lUGF0Y2hQZWVrZXI6OnJlYWRDaHVuayhjb25zdCBjaGFyIHRhZ1tdLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgbGVuZ3RoKSB7CiAgICAgaWYgKCFzdHJjbXAoIm5wVGMiLCB0YWcpICYmIGxlbmd0aCA+PSBzaXplb2YoUmVzX3BuZ185cGF0Y2gpKSB7CiAgICAgICAgIFJlc19wbmdfOXBhdGNoKiBwYXRjaCA9IChSZXNfcG5nXzlwYXRjaCopIGRhdGE7CiAgICAgICAgIHNpemVfdCBwYXRjaFNpemUgPSBwYXRjaC0+c2VyaWFsaXplZFNpemUoKTsKQEAgLTM1LDExICszNiw2IEBACiAgICAgICAgIGZyZWUobVBhdGNoKTsKICAgICAgICAgbVBhdGNoID0gcGF0Y2hOZXc7CiAgICAgICAgIG1QYXRjaFNpemUgPSBwYXRjaFNpemU7Ci0KLSAgICAgICAgLy8gbm93IHVwZGF0ZSBvdXIgaG9zdCB0byBmb3JjZSBpbmRleCBvciAzMmJpdCBjb25maWcKLSAgICAgICAgLy8gJ2NhdXNlIHdlIGRvbid0IHdhbnQgNTY1IHByZWRpdGhlcmVkLCBzaW5jZSBhcyBhIDlwYXRjaCwgd2Uga25vdwotICAgICAgICAvLyB3ZSB3aWxsIGJlIHN0cmV0Y2hlZCwgYW5kIHRoZXJlZm9yZSB3ZSB3YW50IHRvIGRpdGhlciBhZnRlcndhcmRzLgotICAgICAgICBtSG9zdC0+c2V0UHJlc2VydmVTcmNEZXB0aCh0cnVlKTsKICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIm5wTGIiLCB0YWcpICYmIGxlbmd0aCA9PSBzaXplb2YoaW50MzJfdCkgKiA0KSB7CiAgICAgICAgIG1IYXNJbnNldHMgPSB0cnVlOwogICAgICAgICBtZW1jcHkoJm1PcHRpY2FsSW5zZXRzLCBkYXRhLCBzaXplb2YoaW50MzJfdCkgKiA0KTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmggYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL05pbmVQYXRjaFBlZWtlci5oCmluZGV4IDJkNDliMzguLjEyNmVhYjIgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvTmluZVBhdGNoUGVla2VyLmgKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9OaW5lUGF0Y2hQZWVrZXIuaApAQCAtMTcsMTkgKzE3LDE3IEBACiAjaWZuZGVmIF9BTkRST0lEX0dSQVBISUNTX05JTkVfUEFUQ0hfUEVFS0VSX0hfCiAjZGVmaW5lIF9BTkRST0lEX0dSQVBISUNTX05JTkVfUEFUQ0hfUEVFS0VSX0hfCiAKLSNpbmNsdWRlICJTa0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlNrUG5nQ2h1bmtSZWFkZXIuaCIKICNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgogCitjbGFzcyBTa0ltYWdlRGVjb2RlcjsKKwogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiAKLWNsYXNzIE5pbmVQYXRjaFBlZWtlciA6IHB1YmxpYyBTa0ltYWdlRGVjb2Rlcjo6UGVla2VyIHsKLXByaXZhdGU6Ci0gICAgLy8gdGhlIGhvc3QgbGl2ZXMgbG9uZ2VyIHRoYW4gd2UgZG8sIHNvIGEgcmF3IHB0ciBpcyBzYWZlCi0gICAgU2tJbWFnZURlY29kZXIqIG1Ib3N0OworY2xhc3MgTmluZVBhdGNoUGVla2VyIDogcHVibGljIFNrUG5nQ2h1bmtSZWFkZXIgewogcHVibGljOgotICAgIE5pbmVQYXRjaFBlZWtlcihTa0ltYWdlRGVjb2RlciogaG9zdCkKLSAgICAgICAgICAgIDogbUhvc3QoaG9zdCkKLSAgICAgICAgICAgICwgbVBhdGNoKE5VTEwpCisgICAgTmluZVBhdGNoUGVla2VyKCkKKyAgICAgICAgICAgIDogbVBhdGNoKE5VTEwpCiAgICAgICAgICAgICAsIG1QYXRjaFNpemUoMCkKICAgICAgICAgICAgICwgbUhhc0luc2V0cyhmYWxzZSkKICAgICAgICAgICAgICwgbU91dGxpbmVSYWRpdXMoMCkKQEAgLTQyLDcgKzQwLDcgQEAKICAgICAgICAgZnJlZShtUGF0Y2gpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBwZWVrKGNvbnN0IGNoYXIgdGFnW10sIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpOworICAgIGJvb2wgcmVhZENodW5rKGNvbnN0IGNoYXIgdGFnW10sIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBsZW5ndGgpIG92ZXJyaWRlOwogCiAgICAgUmVzX3BuZ185cGF0Y2gqIG1QYXRjaDsKICAgICBzaXplX3QgbVBhdGNoU2l6ZTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvUGFpbnQuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKaW5kZXggNjU0ZDE0OC4uMGEyNWEwYSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9QYWludC5jcHAKQEAgLTMxMyw5NCArMzEzLDEwIEBACiAgICAgICAgIG9iai0+c2V0VGV4dEFsaWduKGFsaWduKTsKICAgICB9CiAKLSAgICAvLyBnZW5lcmF0ZSBiY3A0NyBpZGVudGlmaWVyIGZvciB0aGUgc3VwcGxpZWQgbG9jYWxlCi0gICAgc3RhdGljIHZvaWQgdG9MYW5ndWFnZVRhZyhjaGFyKiBvdXRwdXQsIHNpemVfdCBvdXRTaXplLAotICAgICAgICAgICAgY29uc3QgY2hhciogbG9jYWxlKSB7Ci0gICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCB8fCBvdXRTaXplIDw9IDApIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobG9jYWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG91dHB1dFswXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2hhciBjYW5vbmljYWxDaGFyc1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgVUVycm9yQ29kZSB1RXJyID0gVV9aRVJPX0VSUk9SOwotICAgICAgICB1bG9jX2Nhbm9uaWNhbGl6ZShsb2NhbGUsIGNhbm9uaWNhbENoYXJzLCBVTE9DX0ZVTExOQU1FX0NBUEFDSVRZLAotICAgICAgICAgICAgICAgICZ1RXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyh1RXJyKSkgewotICAgICAgICAgICAgY2hhciBsaWtlbHlDaGFyc1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgICAgIHVFcnIgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgICAgICB1bG9jX2FkZExpa2VseVN1YnRhZ3MoY2Fub25pY2FsQ2hhcnMsIGxpa2VseUNoYXJzLAotICAgICAgICAgICAgICAgICAgICBVTE9DX0ZVTExOQU1FX0NBUEFDSVRZLCAmdUVycik7Ci0gICAgICAgICAgICBpZiAoVV9TVUNDRVNTKHVFcnIpKSB7Ci0gICAgICAgICAgICAgICAgdUVyciA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgICAgICAgICB1bG9jX3RvTGFuZ3VhZ2VUYWcobGlrZWx5Q2hhcnMsIG91dHB1dCwgb3V0U2l6ZSwgRkFMU0UsICZ1RXJyKTsKLSAgICAgICAgICAgICAgICBpZiAoVV9TVUNDRVNTKHVFcnIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBBTE9HRCgidWxvY190b0xhbmd1YWdlVGFnKFwiJXNcIikgZmFpbGVkOiAlcyIsIGxpa2VseUNoYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfZXJyb3JOYW1lKHVFcnIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFMT0dEKCJ1bG9jX2FkZExpa2VseVN1YnRhZ3MoXCIlc1wiKSBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbm9uaWNhbENoYXJzLCB1X2Vycm9yTmFtZSh1RXJyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBTE9HRCgidWxvY19jYW5vbmljYWxpemUoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgbG9jYWxlLAotICAgICAgICAgICAgICAgICAgICB1X2Vycm9yTmFtZSh1RXJyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gdW5hYmxlIHRvIGJ1aWxkIGEgcHJvcGVyIGxhbmd1YWdlIGlkZW50aWZpZXIKLSAgICAgICAgb3V0cHV0WzBdID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0b0xhbmd1YWdlVGFncyhzdGQ6OnN0cmluZyogb3V0cHV0LCBjb25zdCBjaGFyKiBsb2NhbGVzKSB7Ci0gICAgICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsb2NhbGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIG91dHB1dC0+Y2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIgbGFuZ1RhZ1tVTE9DX0ZVTExOQU1FX0NBUEFDSVRZXTsKLSAgICAgICAgY29uc3QgY2hhciogY29tbWFMb2MgPSBzdHJjaHIobG9jYWxlcywgJywnKTsKLSAgICAgICAgaWYgKGNvbW1hTG9jID09IE5VTEwpIHsKLSAgICAgICAgICAgIGFzc2VydChsb2NhbGVzWzBdICE9ICdcMCcpOyAgLy8gdGhlIHN0cmluZyBzaG91bGQgbm90IGJlIGVtcHR5Ci0gICAgICAgICAgICB0b0xhbmd1YWdlVGFnKGxhbmdUYWcsIFVMT0NfRlVMTE5BTUVfQ0FQQUNJVFksIGxvY2FsZXMpOwotICAgICAgICAgICAgKm91dHB1dCA9IGxhbmdUYWc7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGxvY2FsZXMpOwotICAgICAgICBjaGFyIGxvY2FsZVtsZW5dOwotICAgICAgICBvdXRwdXQtPmNsZWFyKCk7Ci0gICAgICAgIG91dHB1dC0+cmVzZXJ2ZShsZW4pOwotICAgICAgICBjb25zdCBjaGFyKiBsYXN0U3RhcnQgPSBsb2NhbGVzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBhc3NlcnQobGFzdFN0YXJ0ID4gY29tbWFMb2MpOyAgLy8gdGhlIHN1YnN0cmluZyBzaG91bGQgbm90IGJlIGVtcHR5Ci0gICAgICAgICAgICBzdHJuY3B5KGxvY2FsZSwgbGFzdFN0YXJ0LCBjb21tYUxvYyAtIGxhc3RTdGFydCk7Ci0gICAgICAgICAgICBsb2NhbGVbY29tbWFMb2MgLSBsYXN0U3RhcnRdID0gJ1wwJzsKLSAgICAgICAgICAgIHRvTGFuZ3VhZ2VUYWcobGFuZ1RhZywgVUxPQ19GVUxMTkFNRV9DQVBBQ0lUWSwgbG9jYWxlKTsKLSAgICAgICAgICAgIGlmIChsYW5nVGFnWzBdICE9ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChsYW5nVGFnKTsKLSAgICAgICAgICAgICAgICBvdXRwdXQtPnB1c2hfYmFjaygnLCcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGFzdFN0YXJ0ID0gY29tbWFMb2MgKyAxOwotICAgICAgICAgICAgY29tbWFMb2MgPSBzdHJjaHIobGFzdFN0YXJ0LCAnLCcpOwotICAgICAgICB9IHdoaWxlIChjb21tYUxvYyAhPSBOVUxMKTsKLSAgICAgICAgYXNzZXJ0KGxhc3RTdGFydFswXSAhPSAnXDAnKTsgIC8vIHRoZSBmaW5hbCBzdWJzdHJpbmcgc2hvdWxkIG5vdCBiZSBlbXB0eQotICAgICAgICB0b0xhbmd1YWdlVGFnKGxhbmdUYWcsIFVMT0NfRlVMTE5BTUVfQ0FQQUNJVFksIGxhc3RTdGFydCk7Ci0gICAgICAgIGlmIChsYW5nVGFnWzBdICE9ICdcMCcpIHsKLSAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKGxhbmdUYWcpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGppbnQgc2V0VGV4dExvY2FsZXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGpsb25nIG9iakhhbmRsZSwganN0cmluZyBsb2NhbGVzKSB7CiAgICAgICAgIFBhaW50KiBvYmogPSByZWludGVycHJldF9jYXN0PFBhaW50Kj4ob2JqSGFuZGxlKTsKICAgICAgICAgU2NvcGVkVXRmQ2hhcnMgbG9jYWxlc0NoYXJzKGVudiwgbG9jYWxlcyk7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGJ1ZjsKLSAgICAgICAgdG9MYW5ndWFnZVRhZ3MoJmJ1ZiwgbG9jYWxlc0NoYXJzLmNfc3RyKCkpOwotICAgICAgICBqaW50IG1pbmlraW5MYW5nTGlzdElkID0gRm9udFN0eWxlOjpyZWdpc3Rlckxhbmd1YWdlTGlzdChidWYpOworICAgICAgICBqaW50IG1pbmlraW5MYW5nTGlzdElkID0gRm9udFN0eWxlOjpyZWdpc3Rlckxhbmd1YWdlTGlzdChsb2NhbGVzQ2hhcnMuY19zdHIoKSk7CiAgICAgICAgIG9iai0+c2V0TWluaWtpbkxhbmdMaXN0SWQobWluaWtpbkxhbmdMaXN0SWQpOwogICAgICAgICByZXR1cm4gbWluaWtpbkxhbmdMaXN0SWQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZC9ncmFwaGljcy9TaGFkZXIuY3BwCmluZGV4IDc5OWVkODMuLmZkYTBmZmEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWQvZ3JhcGhpY3MvU2hhZGVyLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkL2dyYXBoaWNzL1NoYWRlci5jcHAKQEAgLTYwLDE5ICs2MCw3IEBACiAgICAgLy8gYXMgYWxsIHRoZSBkYXRhIG5lZWRlZCBpcyBjb250YWluZWQgd2l0aGluIHRoZSBuZXdseSBjcmVhdGVkIExvY2FsTWF0cml4U2hhZGVyLgogICAgIFNrQVNTRVJUKHNoYWRlckhhbmRsZSk7CiAgICAgU2tBdXRvVFVucmVmPFNrU2hhZGVyPiBjdXJyZW50U2hhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8U2tTaGFkZXIqPihzaGFkZXJIYW5kbGUpKTsKLQotICAgIFNrTWF0cml4IGN1cnJlbnRNYXRyaXg7Ci0gICAgU2tBdXRvVFVucmVmPFNrU2hhZGVyPiBiYXNlU2hhZGVyKGN1cnJlbnRTaGFkZXItPnJlZkFzQUxvY2FsTWF0cml4U2hhZGVyKCZjdXJyZW50TWF0cml4KSk7Ci0gICAgaWYgKGJhc2VTaGFkZXIuZ2V0KCkpIHsKLSAgICAgICAgLy8gaWYgdGhlIG1hdHJpY2VzIGFyZSBzYW1lIHRoZW4gdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvY2F0ZSBhIG5ldwotICAgICAgICAvLyBzaGFkZXIgdGhhdCBpcyBpZGVudGljYWwgdG8gdGhlIGV4aXN0aW5nIG9uZS4KLSAgICAgICAgaWYgKGN1cnJlbnRNYXRyaXggPT0gKm1hdHJpeCkgewotICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KGN1cnJlbnRTaGFkZXIuZGV0YWNoKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihTa1NoYWRlcjo6Q3JlYXRlTG9jYWxNYXRyaXhTaGFkZXIoYmFzZVNoYWRlciwgKm1hdHJpeCkpOwotICAgIH0KLQotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihTa1NoYWRlcjo6Q3JlYXRlTG9jYWxNYXRyaXhTaGFkZXIoY3VycmVudFNoYWRlciwgKm1hdHJpeCkpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihjdXJyZW50U2hhZGVyLT5uZXdXaXRoTG9jYWxNYXRyaXgoKm1hdHJpeCkpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF9hcHBfTmF0aXZlQWN0aXZpdHkuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF9hcHBfTmF0aXZlQWN0aXZpdHkuY3BwCmluZGV4IDk1YmUzZjIuLjg4YTU2ZDIgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfYXBwX05hdGl2ZUFjdGl2aXR5LmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX2FwcF9OYXRpdmVBY3Rpdml0eS5jcHAKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKKyNpbmNsdWRlIDxtZW1vcnk+CisKICNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvYW5kcm9pZF9hcHBfTmF0aXZlQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxhbmRyb2lkX3J1bnRpbWUvYW5kcm9pZF91dGlsX0Fzc2V0TWFuYWdlci5oPgogI2luY2x1ZGUgPGFuZHJvaWRfcnVudGltZS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5oPgpAQCAtMzksNiArNDEsNyBAQAogI2luY2x1ZGUgImFuZHJvaWRfdmlld19LZXlFdmVudC5oIgogCiAjaW5jbHVkZSAibmF0aXZlYnJpZGdlL25hdGl2ZV9icmlkZ2UuaCIKKyNpbmNsdWRlICJuYXRpdmVsb2FkZXIvbmF0aXZlX2xvYWRlci5oIgogCiAjaW5jbHVkZSAiY29yZV9qbmlfaGVscGVycy5oIgogCkBAIC0yNTUsMTggKzI1OCwxOSBAQAogc3RhdGljIGpsb25nCiBsb2FkTmF0aXZlQ29kZV9uYXRpdmUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosIGpzdHJpbmcgcGF0aCwganN0cmluZyBmdW5jTmFtZSwKICAgICAgICAgam9iamVjdCBtZXNzYWdlUXVldWUsIGpzdHJpbmcgaW50ZXJuYWxEYXRhRGlyLCBqc3RyaW5nIG9iYkRpciwKLSAgICAgICAganN0cmluZyBleHRlcm5hbERhdGFEaXIsIGppbnQgc2RrVmVyc2lvbiwKLSAgICAgICAgam9iamVjdCBqQXNzZXRNZ3IsIGpieXRlQXJyYXkgc2F2ZWRTdGF0ZSkKLXsKKyAgICAgICAganN0cmluZyBleHRlcm5hbERhdGFEaXIsIGppbnQgc2RrVmVyc2lvbiwgam9iamVjdCBqQXNzZXRNZ3IsCisgICAgICAgIGpieXRlQXJyYXkgc2F2ZWRTdGF0ZSwgam9iamVjdCBjbGFzc0xvYWRlciwganN0cmluZyBsaWJyYXJ5UGF0aCwKKyAgICAgICAganN0cmluZyBpc29sYXRpb25QYXRoKSB7CiAgICAgaWYgKGtMb2dUcmFjZSkgewogICAgICAgICBBTE9HRCgibG9hZE5hdGl2ZUNvZGVfbmF0aXZlIik7CiAgICAgfQogCiAgICAgY29uc3QgY2hhciogcGF0aFN0ciA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMocGF0aCwgTlVMTCk7Ci0gICAgTmF0aXZlQ29kZSogY29kZSA9IE5VTEw7CisgICAgc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZUNvZGU+IGNvZGU7CiAgICAgYm9vbCBuZWVkTmF0aXZlQnJpZGdlID0gZmFsc2U7CiAKLSAgICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4ocGF0aFN0ciwgUlRMRF9MQVpZKTsKKyAgICB2b2lkKiBoYW5kbGUgPSBPcGVuTmF0aXZlTGlicmFyeShlbnYsIHNka1ZlcnNpb24sIHBhdGhTdHIsIGNsYXNzTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBsaWJyYXJ5UGF0aCwgaXNvbGF0aW9uUGF0aCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChOYXRpdmVCcmlkZ2VJc1N1cHBvcnRlZChwYXRoU3RyKSkgewogICAgICAgICAgICAgaGFuZGxlID0gTmF0aXZlQnJpZGdlTG9hZExpYnJhcnkocGF0aFN0ciwgUlRMRF9MQVpZKTsKQEAgLTI4NCwyNiArMjg4LDIzIEBACiAgICAgICAgICAgICBmdW5jUHRyID0gZGxzeW0oaGFuZGxlLCBmdW5jU3RyKTsKICAgICAgICAgfQogCi0gICAgICAgIGNvZGUgPSBuZXcgTmF0aXZlQ29kZShoYW5kbGUsIChBTmF0aXZlQWN0aXZpdHlfY3JlYXRlRnVuYyopZnVuY1B0cik7CisgICAgICAgIGNvZGUucmVzZXQobmV3IE5hdGl2ZUNvZGUoaGFuZGxlLCAoQU5hdGl2ZUFjdGl2aXR5X2NyZWF0ZUZ1bmMqKWZ1bmNQdHIpKTsKICAgICAgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoZnVuY05hbWUsIGZ1bmNTdHIpOwogCiAgICAgICAgIGlmIChjb2RlLT5jcmVhdGVBY3Rpdml0eUZ1bmMgPT0gTlVMTCkgewogICAgICAgICAgICAgQUxPR1coIkFOYXRpdmVBY3Rpdml0eV9vbkNyZWF0ZSBub3QgZm91bmQiKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjb2RlOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvZGUtPm1lc3NhZ2VRdWV1ZSA9IGFuZHJvaWRfb3NfTWVzc2FnZVF1ZXVlX2dldE1lc3NhZ2VRdWV1ZShlbnYsIG1lc3NhZ2VRdWV1ZSk7CiAgICAgICAgIGlmIChjb2RlLT5tZXNzYWdlUXVldWUgPT0gTlVMTCkgewogICAgICAgICAgICAgQUxPR1coIlVuYWJsZSB0byByZXRyaWV2ZSBuYXRpdmUgTWVzc2FnZVF1ZXVlIik7Ci0gICAgICAgICAgICBkZWxldGUgY29kZTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQgbXNncGlwZVsyXTsKICAgICAgICAgaWYgKHBpcGUobXNncGlwZSkpIHsKICAgICAgICAgICAgIEFMT0dXKCJjb3VsZCBub3QgY3JlYXRlIHBpcGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjb2RlOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgY29kZS0+bWFpbldvcmtSZWFkID0gbXNncGlwZVswXTsKQEAgLTMxNSwxMiArMzE2LDExIEBACiAgICAgICAgIFNMT0dXX0lGKHJlc3VsdCAhPSAwLCAiQ291bGQgbm90IG1ha2UgbWFpbiB3b3JrIHdyaXRlIHBpcGUgIgogICAgICAgICAgICAgICAgICJub24tYmxvY2tpbmc6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgY29kZS0+bWVzc2FnZVF1ZXVlLT5nZXRMb29wZXIoKS0+YWRkRmQoCi0gICAgICAgICAgICAgICAgY29kZS0+bWFpbldvcmtSZWFkLCAwLCBBTE9PUEVSX0VWRU5UX0lOUFVULCBtYWluV29ya0NhbGxiYWNrLCBjb2RlKTsKKyAgICAgICAgICAgICAgICBjb2RlLT5tYWluV29ya1JlYWQsIDAsIEFMT09QRVJfRVZFTlRfSU5QVVQsIG1haW5Xb3JrQ2FsbGJhY2ssIGNvZGUuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgY29kZS0+QU5hdGl2ZUFjdGl2aXR5OjpjYWxsYmFja3MgPSAmY29kZS0+Y2FsbGJhY2tzOwogICAgICAgICBpZiAoZW52LT5HZXRKYXZhVk0oJmNvZGUtPnZtKSA8IDApIHsKICAgICAgICAgICAgIEFMT0dXKCJOYXRpdmVBY3Rpdml0eSBHZXRKYXZhVk0gZmFpbGVkIik7Ci0gICAgICAgICAgICBkZWxldGUgY29kZTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGNvZGUtPmVudiA9IGVudjsKQEAgLTM1NiwxNCArMzU2LDE4IEBACiAgICAgICAgICAgICByYXdTYXZlZFNpemUgPSBlbnYtPkdldEFycmF5TGVuZ3RoKHNhdmVkU3RhdGUpOwogICAgICAgICB9CiAKLSAgICAgICAgY29kZS0+Y3JlYXRlQWN0aXZpdHlGdW5jKGNvZGUsIHJhd1NhdmVkU3RhdGUsIHJhd1NhdmVkU2l6ZSk7CisgICAgICAgIGNvZGUtPmNyZWF0ZUFjdGl2aXR5RnVuYyhjb2RlLmdldCgpLCByYXdTYXZlZFN0YXRlLCByYXdTYXZlZFNpemUpOwogCiAgICAgICAgIGlmIChyYXdTYXZlZFN0YXRlICE9IE5VTEwpIHsKICAgICAgICAgICAgIGVudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKHNhdmVkU3RhdGUsIHJhd1NhdmVkU3RhdGUsIDApOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHJldHVybiAoamxvbmcpY29kZTsKKyAgICByZXR1cm4gKGpsb25nKWNvZGUucmVsZWFzZSgpOworfQorCitzdGF0aWMganN0cmluZyBnZXREbEVycm9yX25hdGl2ZShKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikgeworICByZXR1cm4gZW52LT5OZXdTdHJpbmdVVEYoZGxlcnJvcigpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTY1MSw4ICs2NTUsMTAgQEAKIH0KIAogc3RhdGljIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCBnX21ldGhvZHNbXSA9IHsKLSAgICB7ICJsb2FkTmF0aXZlQ29kZSIsICIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGFuZHJvaWQvb3MvTWVzc2FnZVF1ZXVlO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0lMYW5kcm9pZC9jb250ZW50L3Jlcy9Bc3NldE1hbmFnZXI7W0IpSiIsCi0gICAgICAgICAgICAodm9pZCopbG9hZE5hdGl2ZUNvZGVfbmF0aXZlIH0sCisgICAgeyAibG9hZE5hdGl2ZUNvZGUiLAorICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xhbmRyb2lkL29zL01lc3NhZ2VRdWV1ZTtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztJTGFuZHJvaWQvY29udGVudC9yZXMvQXNzZXRNYW5hZ2VyO1tCTGphdmEvbGFuZy9DbGFzc0xvYWRlcjtMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSiIsCisgICAgICAgICh2b2lkKilsb2FkTmF0aXZlQ29kZV9uYXRpdmUgfSwKKyAgICB7ICJnZXREbEVycm9yIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQqKSBnZXREbEVycm9yX25hdGl2ZSB9LAogICAgIHsgInVubG9hZE5hdGl2ZUNvZGUiLCAiKEopViIsICh2b2lkKil1bmxvYWROYXRpdmVDb2RlX25hdGl2ZSB9LAogICAgIHsgIm9uU3RhcnROYXRpdmUiLCAiKEopViIsICh2b2lkKilvblN0YXJ0X25hdGl2ZSB9LAogICAgIHsgIm9uUmVzdW1lTmF0aXZlIiwgIihKKVYiLCAodm9pZCopb25SZXN1bWVfbmF0aXZlIH0sCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX2dyYXBoaWNzX2RyYXdhYmxlX1ZlY3RvckRyYXdhYmxlLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfZ3JhcGhpY3NfZHJhd2FibGVfVmVjdG9yRHJhd2FibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDRjNmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkX2dyYXBoaWNzX2RyYXdhYmxlX1ZlY3RvckRyYXdhYmxlLmNwcApAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJqbmkuaCIKKyNpbmNsdWRlICJHcmFwaGljc0pOSS5oIgorI2luY2x1ZGUgImNvcmVfam5pX2hlbHBlcnMuaCIKKyNpbmNsdWRlICJsb2cvbG9nLmgiCisKKyNpbmNsdWRlICJQYWludC5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK3VzaW5nIG5hbWVzcGFjZSB1aXJlbmRlcmVyOwordXNpbmcgbmFtZXNwYWNlIHVpcmVuZGVyZXI6OlZlY3RvckRyYXdhYmxlOworCitzdGF0aWMgamxvbmcgY3JlYXRlVHJlZShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogcm9vdEdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgVmVjdG9yRHJhd2FibGU6OlRyZWUqIHRyZWUgPSBuZXcgVmVjdG9yRHJhd2FibGU6OlRyZWUocm9vdEdyb3VwKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4odHJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZVRyZWUoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgdHJlZVB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6VHJlZSo+KHRyZWVQdHIpOworICAgIGRlbGV0ZSB0cmVlOworfQorCitzdGF0aWMgdm9pZCBzZXRUcmVlVmlld3BvcnRTaXplKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHRyZWVQdHIsCisgICAgICAgIGpmbG9hdCB2aWV3cG9ydFdpZHRoLCBqZmxvYXQgdmlld3BvcnRIZWlnaHQpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6VHJlZSogdHJlZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OlRyZWUqPih0cmVlUHRyKTsKKyAgICB0cmVlLT5zZXRWaWV3cG9ydFNpemUodmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOworfQorCitzdGF0aWMgamJvb2xlYW4gc2V0Um9vdEFscGhhKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHRyZWVQdHIsIGpmbG9hdCBhbHBoYSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpUcmVlKiB0cmVlID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6VHJlZSo+KHRyZWVQdHIpOworICAgIHJldHVybiB0cmVlLT5zZXRSb290QWxwaGEoYWxwaGEpOworfQorCitzdGF0aWMgamZsb2F0IGdldFJvb3RBbHBoYShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyB0cmVlUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OlRyZWUqIHRyZWUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpUcmVlKj4odHJlZVB0cik7CisgICAgcmV0dXJuIHRyZWUtPmdldFJvb3RBbHBoYSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRBbGxvd0NhY2hpbmcoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgdHJlZVB0ciwgamJvb2xlYW4gYWxsb3dDYWNoaW5nKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OlRyZWUqIHRyZWUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpUcmVlKj4odHJlZVB0cik7CisgICAgdHJlZS0+c2V0QWxsb3dDYWNoaW5nKGFsbG93Q2FjaGluZyk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXcoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpsb25nIHRyZWVQdHIsIGpsb25nIGNhbnZhc1B0ciwKKyAgICAgICAgamxvbmcgY29sb3JGaWx0ZXJQdHIsIGpvYmplY3QganJlY3QsIGpib29sZWFuIG5lZWRzTWlycm9yaW5nLCBqYm9vbGVhbiBjYW5SZXVzZUNhY2hlKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OlRyZWUqIHRyZWUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpUcmVlKj4odHJlZVB0cik7CisgICAgQ2FudmFzKiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgU2tSZWN0IHJlY3Q7CisgICAgR3JhcGhpY3NKTkk6OmpyZWN0X3RvX3JlY3QoZW52LCBqcmVjdCwgJnJlY3QpOworICAgIFNrQ29sb3JGaWx0ZXIqIGNvbG9yRmlsdGVyID0gcmVpbnRlcnByZXRfY2FzdDxTa0NvbG9yRmlsdGVyKj4oY29sb3JGaWx0ZXJQdHIpOworICAgIHRyZWUtPmRyYXcoY2FudmFzLCBjb2xvckZpbHRlciwgcmVjdCwgbmVlZHNNaXJyb3JpbmcsIGNhblJldXNlQ2FjaGUpOworfQorCitzdGF0aWMgamxvbmcgY3JlYXRlRW1wdHlGdWxsUGF0aChKTklFbnYqLCBqb2JqZWN0KSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBuZXdQYXRoID0gbmV3IFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihuZXdQYXRoKTsKK30KKworc3RhdGljIGpsb25nIGNyZWF0ZUZ1bGxQYXRoKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHNyY0Z1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBzcmNGdWxsUGF0aCA9CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KHNyY0Z1bGxQYXRoUHRyKTsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIG5ld1BhdGggPSBuZXcgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKCpzcmNGdWxsUGF0aCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KG5ld1BhdGgpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVGdWxsUGF0aFByb3BlcnRpZXNBbmRTdHJva2VTdHlsZXMoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsCisgICAgICAgIGpmbG9hdCBzdHJva2VXaWR0aCwgamludCBzdHJva2VDb2xvciwgamZsb2F0IHN0cm9rZUFscGhhLCBqaW50IGZpbGxDb2xvciwgamZsb2F0IGZpbGxBbHBoYSwKKyAgICAgICAgamZsb2F0IHRyaW1QYXRoU3RhcnQsIGpmbG9hdCB0cmltUGF0aEVuZCwgamZsb2F0IHRyaW1QYXRoT2Zmc2V0LCBqZmxvYXQgc3Ryb2tlTWl0ZXJMaW1pdCwKKyAgICAgICAgamludCBzdHJva2VMaW5lQ2FwLCBqaW50IHN0cm9rZUxpbmVKb2luKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIGZ1bGxQYXRoLT51cGRhdGVQcm9wZXJ0aWVzKHN0cm9rZVdpZHRoLCBzdHJva2VDb2xvciwgc3Ryb2tlQWxwaGEsIGZpbGxDb2xvciwgZmlsbEFscGhhLAorICAgICAgICAgICAgdHJpbVBhdGhTdGFydCwgdHJpbVBhdGhFbmQsIHRyaW1QYXRoT2Zmc2V0LCBzdHJva2VNaXRlckxpbWl0LCBzdHJva2VMaW5lQ2FwLAorICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW4pOworfQorCitzdGF0aWMgamJvb2xlYW4gZ2V0RnVsbFBhdGhQcm9wZXJ0aWVzKEpOSUVudiogZW52LCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwKKyAgICAgICAgamJ5dGVBcnJheSBvdXRQcm9wZXJ0aWVzLCBqaW50IGxlbmd0aCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBpbnQ4X3QgcGF0aFByb3BlcnRpZXNbbGVuZ3RoXTsKKyAgICBib29sIHN1Y2Nlc3MgPSBmdWxsUGF0aC0+Z2V0UHJvcGVydGllcyhwYXRoUHJvcGVydGllcywgbGVuZ3RoKTsKKyAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lvbihvdXRQcm9wZXJ0aWVzLCAwLCBsZW5ndGgsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50OF90Kj4oJnBhdGhQcm9wZXJ0aWVzKSk7CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBqYm9vbGVhbiBnZXRHcm91cFByb3BlcnRpZXMoSk5JRW52KiBlbnYsIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyLAorICAgICAgICBqZmxvYXRBcnJheSBvdXRQcm9wZXJ0aWVzLCBqaW50IGxlbmd0aCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICBmbG9hdCBncm91cFByb3BlcnRpZXNbbGVuZ3RoXTsKKyAgICBib29sIHN1Y2Nlc3MgPSBncm91cC0+Z2V0UHJvcGVydGllcyhncm91cFByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgZW52LT5TZXRGbG9hdEFycmF5UmVnaW9uKG91dFByb3BlcnRpZXMsIDAsIGxlbmd0aCwgcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KCZncm91cFByb3BlcnRpZXMpKTsKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGpsb25nIGNyZWF0ZUVtcHR5Q2xpcFBhdGgoSk5JRW52Kiwgam9iamVjdCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpDbGlwUGF0aCogbmV3UGF0aCA9IG5ldyBWZWN0b3JEcmF3YWJsZTo6Q2xpcFBhdGgoKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3UGF0aCk7Cit9CisKK3N0YXRpYyBqbG9uZyBjcmVhdGVDbGlwUGF0aChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBzcmNDbGlwUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpDbGlwUGF0aCogc3JjQ2xpcFBhdGggPQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6Q2xpcFBhdGgqPihzcmNDbGlwUGF0aFB0cik7CisgICAgVmVjdG9yRHJhd2FibGU6OkNsaXBQYXRoKiBuZXdQYXRoID0gbmV3IFZlY3RvckRyYXdhYmxlOjpDbGlwUGF0aCgqc3JjQ2xpcFBhdGgpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihuZXdQYXRoKTsKK30KKworc3RhdGljIGpsb25nIGNyZWF0ZUVtcHR5R3JvdXAoSk5JRW52Kiwgam9iamVjdCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogbmV3R3JvdXAgPSBuZXcgVmVjdG9yRHJhd2FibGU6Okdyb3VwKCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KG5ld0dyb3VwKTsKK30KKworc3RhdGljIGpsb25nIGNyZWF0ZUdyb3VwKEpOSUVudiosIGpvYmplY3QsIGpsb25nIHNyY0dyb3VwUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBzcmNHcm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oc3JjR3JvdXBQdHIpOworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogbmV3R3JvdXAgPSBuZXcgVmVjdG9yRHJhd2FibGU6Okdyb3VwKCpzcmNHcm91cCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8amxvbmc+KG5ld0dyb3VwKTsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlTm9kZShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBub2RlUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Ok5vZGUqIG5vZGUgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpOb2RlKj4obm9kZVB0cik7CisgICAgZGVsZXRlIG5vZGU7Cit9CisKK3N0YXRpYyB2b2lkIHNldE5vZGVOYW1lKEpOSUVudiogZW52LCBqb2JqZWN0LCBqbG9uZyBub2RlUHRyLCBqc3RyaW5nIG5hbWVTdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6Tm9kZSogbm9kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Ok5vZGUqPihub2RlUHRyKTsKKyAgICBjb25zdCBjaGFyKiBub2RlTmFtZSA9IGVudi0+R2V0U3RyaW5nVVRGQ2hhcnMobmFtZVN0ciwgTlVMTCk7CisgICAgbm9kZS0+c2V0TmFtZShub2RlTmFtZSk7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMobmFtZVN0ciwgbm9kZU5hbWUpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVHcm91cFByb3BlcnRpZXMoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCByb3RhdGUsIGpmbG9hdCBwaXZvdFgsCisgICAgICAgIGpmbG9hdCBwaXZvdFksIGpmbG9hdCBzY2FsZVgsIGpmbG9hdCBzY2FsZVksIGpmbG9hdCB0cmFuc2xhdGVYLCBqZmxvYXQgdHJhbnNsYXRlWSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICBncm91cC0+dXBkYXRlTG9jYWxNYXRyaXgocm90YXRlLCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVkpOworfQorCitzdGF0aWMgdm9pZCBhZGRDaGlsZChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0ciwgamxvbmcgY2hpbGRQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgVmVjdG9yRHJhd2FibGU6Ok5vZGUqIGNoaWxkID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6Tm9kZSo+KGNoaWxkUHRyKTsKKyAgICBncm91cC0+YWRkQ2hpbGQoY2hpbGQpOworfQorCitzdGF0aWMgdm9pZCBzZXRQYXRoU3RyaW5nKEpOSUVudiogZW52LCBqb2JqZWN0LCBqbG9uZyBwYXRoUHRyLCBqc3RyaW5nIGlucHV0U3RyLAorICAgICAgICBqaW50IHN0cmluZ0xlbmd0aCkgeworICAgIFZlY3RvckRyYXdhYmxlOjpQYXRoKiBwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6UGF0aCo+KHBhdGhQdHIpOworICAgIGNvbnN0IGNoYXIqIHBhdGhTdHJpbmcgPSBlbnYtPkdldFN0cmluZ1VURkNoYXJzKGlucHV0U3RyLCBOVUxMKTsKKyAgICBwYXRoLT5zZXRQYXRoKHBhdGhTdHJpbmcsIHN0cmluZ0xlbmd0aCk7CisgICAgZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMoaW5wdXRTdHIsIHBhdGhTdHJpbmcpOworfQorCitzdGF0aWMgamZsb2F0IGdldFJvdGF0aW9uKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGdyb3VwUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIHJldHVybiBncm91cC0+Z2V0Um90YXRpb24oKTsKK30KKworc3RhdGljIHZvaWQgc2V0Um90YXRpb24oSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCByb3RhdGlvbikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICBncm91cC0+c2V0Um90YXRpb24ocm90YXRpb24pOworfQorCitzdGF0aWMgamZsb2F0IGdldFBpdm90WChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICByZXR1cm4gZ3JvdXAtPmdldFBpdm90WCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRQaXZvdFgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCBwaXZvdFgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnNldFBpdm90WChwaXZvdFgpOworfQorCitzdGF0aWMgamZsb2F0IGdldFBpdm90WShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICByZXR1cm4gZ3JvdXAtPmdldFBpdm90WSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRQaXZvdFkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCBwaXZvdFkpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnNldFBpdm90WShwaXZvdFkpOworfQorCitzdGF0aWMgamZsb2F0IGdldFNjYWxlWChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICByZXR1cm4gZ3JvdXAtPmdldFNjYWxlWCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRTY2FsZVgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCBzY2FsZVgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnNldFNjYWxlWChzY2FsZVgpOworfQorCitzdGF0aWMgamZsb2F0IGdldFNjYWxlWShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBncm91cFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpHcm91cCogZ3JvdXAgPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpHcm91cCo+KGdyb3VwUHRyKTsKKyAgICByZXR1cm4gZ3JvdXAtPmdldFNjYWxlWSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRTY2FsZVkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCBzY2FsZVkpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgZ3JvdXAtPnNldFNjYWxlWShzY2FsZVkpOworfQorCitzdGF0aWMgamZsb2F0IGdldFRyYW5zbGF0ZVgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRUcmFuc2xhdGVYKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFRyYW5zbGF0ZVgoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCB0cmFuc2xhdGVYKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRUcmFuc2xhdGVYKHRyYW5zbGF0ZVgpOworfQorCitzdGF0aWMgamZsb2F0IGdldFRyYW5zbGF0ZVkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6R3JvdXAqIGdyb3VwID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6R3JvdXAqPihncm91cFB0cik7CisgICAgcmV0dXJuIGdyb3VwLT5nZXRUcmFuc2xhdGVZKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFRyYW5zbGF0ZVkoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZ3JvdXBQdHIsIGpmbG9hdCB0cmFuc2xhdGVZKSB7CisgICAgVmVjdG9yRHJhd2FibGU6Okdyb3VwKiBncm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6Okdyb3VwKj4oZ3JvdXBQdHIpOworICAgIGdyb3VwLT5zZXRUcmFuc2xhdGVZKHRyYW5zbGF0ZVkpOworfQorCitzdGF0aWMgdm9pZCBzZXRQYXRoRGF0YShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBwYXRoUHRyLCBqbG9uZyBwYXRoRGF0YVB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpQYXRoKiBwYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6UGF0aCo+KHBhdGhQdHIpOworICAgIFBhdGhEYXRhKiBwYXRoRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UGF0aERhdGEqPihwYXRoRGF0YVB0cik7CisgICAgcGF0aC0+c2V0UGF0aERhdGEoKnBhdGhEYXRhKTsKK30KKworc3RhdGljIGpmbG9hdCBnZXRTdHJva2VXaWR0aChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICByZXR1cm4gZnVsbFBhdGgtPmdldFN0cm9rZVdpZHRoKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFN0cm9rZVdpZHRoKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyLCBqZmxvYXQgc3Ryb2tlV2lkdGgpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldFN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKTsKK30KKworc3RhdGljIGppbnQgZ2V0U3Ryb2tlQ29sb3IoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRTdHJva2VDb2xvcigpOworfQorCitzdGF0aWMgdm9pZCBzZXRTdHJva2VDb2xvcihKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamludCBzdHJva2VDb2xvcikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IpOworfQorCitzdGF0aWMgamZsb2F0IGdldFN0cm9rZUFscGhhKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0U3Ryb2tlQWxwaGEoKTsKK30KKworc3RhdGljIHZvaWQgc2V0U3Ryb2tlQWxwaGEoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIsIGpmbG9hdCBzdHJva2VBbHBoYSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0U3Ryb2tlQWxwaGEoc3Ryb2tlQWxwaGEpOworfQorCitzdGF0aWMgamludCBnZXRGaWxsQ29sb3IoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRGaWxsQ29sb3IoKTsKK30KKworc3RhdGljIHZvaWQgc2V0RmlsbENvbG9yKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyLCBqaW50IGZpbGxDb2xvcikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0RmlsbENvbG9yKGZpbGxDb2xvcik7Cit9CisKK3N0YXRpYyBqZmxvYXQgZ2V0RmlsbEFscGhhKEpOSUVudiosIGpvYmplY3QsIGpsb25nIGZ1bGxQYXRoUHRyKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIHJldHVybiBmdWxsUGF0aC0+Z2V0RmlsbEFscGhhKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEZpbGxBbHBoYShKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamZsb2F0IGZpbGxBbHBoYSkgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICBmdWxsUGF0aC0+c2V0RmlsbEFscGhhKGZpbGxBbHBoYSk7Cit9CisKK3N0YXRpYyBqZmxvYXQgZ2V0VHJpbVBhdGhTdGFydChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0cikgeworICAgIFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCogZnVsbFBhdGggPSByZWludGVycHJldF9jYXN0PFZlY3RvckRyYXdhYmxlOjpGdWxsUGF0aCo+KGZ1bGxQYXRoUHRyKTsKKyAgICByZXR1cm4gZnVsbFBhdGgtPmdldFRyaW1QYXRoU3RhcnQoKTsKK30KKworc3RhdGljIHZvaWQgc2V0VHJpbVBhdGhTdGFydChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamZsb2F0IHRyaW1QYXRoU3RhcnQpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgZnVsbFBhdGgtPnNldFRyaW1QYXRoU3RhcnQodHJpbVBhdGhTdGFydCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgZ2V0VHJpbVBhdGhFbmQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRUcmltUGF0aEVuZCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRUcmltUGF0aEVuZChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamZsb2F0IHRyaW1QYXRoRW5kKSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIGZ1bGxQYXRoLT5zZXRUcmltUGF0aEVuZCh0cmltUGF0aEVuZCk7Cit9CisKK3N0YXRpYyBqZmxvYXQgZ2V0VHJpbVBhdGhPZmZzZXQoSk5JRW52Kiwgam9iamVjdCwgamxvbmcgZnVsbFBhdGhQdHIpIHsKKyAgICBWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqIGZ1bGxQYXRoID0gcmVpbnRlcnByZXRfY2FzdDxWZWN0b3JEcmF3YWJsZTo6RnVsbFBhdGgqPihmdWxsUGF0aFB0cik7CisgICAgcmV0dXJuIGZ1bGxQYXRoLT5nZXRUcmltUGF0aE9mZnNldCgpOworfQorCitzdGF0aWMgdm9pZCBzZXRUcmltUGF0aE9mZnNldChKTklFbnYqLCBqb2JqZWN0LCBqbG9uZyBmdWxsUGF0aFB0ciwgamZsb2F0IHRyaW1QYXRoT2Zmc2V0KSB7CisgICAgVmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKiBmdWxsUGF0aCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yRHJhd2FibGU6OkZ1bGxQYXRoKj4oZnVsbFBhdGhQdHIpOworICAgIGZ1bGxQYXRoLT5zZXRUcmltUGF0aE9mZnNldCh0cmltUGF0aE9mZnNldCk7Cit9CisKK3N0YXRpYyBjb25zdCBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKKyAgICAgICAgeyJuQ3JlYXRlUmVuZGVyZXIiLCAiIShKKUoiLCAodm9pZCopY3JlYXRlVHJlZX0sCisgICAgICAgIHsibkRlc3Ryb3lSZW5kZXJlciIsICIhKEopViIsICh2b2lkKilkZWxldGVUcmVlfSwKKyAgICAgICAgeyJuU2V0UmVuZGVyZXJWaWV3cG9ydFNpemUiLCAiIShKRkYpViIsICh2b2lkKilzZXRUcmVlVmlld3BvcnRTaXplfSwKKyAgICAgICAgeyJuU2V0Um9vdEFscGhhIiwgIiEoSkYpWiIsICh2b2lkKilzZXRSb290QWxwaGF9LAorICAgICAgICB7Im5HZXRSb290QWxwaGEiLCAiIShKKUYiLCAodm9pZCopZ2V0Um9vdEFscGhhfSwKKyAgICAgICAgeyJuU2V0QWxsb3dDYWNoaW5nIiwgIiEoSlopViIsICh2b2lkKilzZXRBbGxvd0NhY2hpbmd9LAorCisgICAgICAgIHsibkRyYXciLCAiKEpKSkxhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7WlopViIsICh2b2lkKilkcmF3fSwKKyAgICAgICAgeyJuQ3JlYXRlRnVsbFBhdGgiLCAiISgpSiIsICh2b2lkKiljcmVhdGVFbXB0eUZ1bGxQYXRofSwKKyAgICAgICAgeyJuQ3JlYXRlRnVsbFBhdGgiLCAiIShKKUoiLCAodm9pZCopY3JlYXRlRnVsbFBhdGh9LAorICAgICAgICB7Im5VcGRhdGVGdWxsUGF0aFByb3BlcnRpZXMiLCAiIShKRklGSUZGRkZGSUkpViIsICh2b2lkKil1cGRhdGVGdWxsUGF0aFByb3BlcnRpZXNBbmRTdHJva2VTdHlsZXN9LAorICAgICAgICB7Im5HZXRGdWxsUGF0aFByb3BlcnRpZXMiLCAiKEpbQkkpWiIsICh2b2lkKilnZXRGdWxsUGF0aFByb3BlcnRpZXN9LAorICAgICAgICB7Im5HZXRHcm91cFByb3BlcnRpZXMiLCAiKEpbRkkpWiIsICh2b2lkKilnZXRHcm91cFByb3BlcnRpZXN9LAorCisgICAgICAgIHsibkNyZWF0ZUNsaXBQYXRoIiwgIiEoKUoiLCAodm9pZCopY3JlYXRlRW1wdHlDbGlwUGF0aH0sCisgICAgICAgIHsibkNyZWF0ZUNsaXBQYXRoIiwgIiEoSilKIiwgKHZvaWQqKWNyZWF0ZUNsaXBQYXRofSwKKyAgICAgICAgeyJuQ3JlYXRlR3JvdXAiLCAiISgpSiIsICh2b2lkKiljcmVhdGVFbXB0eUdyb3VwfSwKKyAgICAgICAgeyJuQ3JlYXRlR3JvdXAiLCAiIShKKUoiLCAodm9pZCopY3JlYXRlR3JvdXB9LAorICAgICAgICB7Im5EZXN0cm95IiwgIiEoSilWIiwgKHZvaWQqKWRlbGV0ZU5vZGV9LAorICAgICAgICB7Im5TZXROYW1lIiwgIihKTGphdmEvbGFuZy9TdHJpbmc7KVYiLCAodm9pZCopc2V0Tm9kZU5hbWV9LAorICAgICAgICB7Im5VcGRhdGVHcm91cFByb3BlcnRpZXMiLCAiIShKRkZGRkZGRilWIiwgKHZvaWQqKXVwZGF0ZUdyb3VwUHJvcGVydGllc30sCisKKyAgICAgICAgeyJuQWRkQ2hpbGQiLCAiIShKSilWIiwgKHZvaWQqKWFkZENoaWxkfSwKKyAgICAgICAgeyJuU2V0UGF0aFN0cmluZyIsICIoSkxqYXZhL2xhbmcvU3RyaW5nO0kpViIsICh2b2lkKilzZXRQYXRoU3RyaW5nfSwKKworICAgICAgICB7Im5HZXRSb3RhdGlvbiIsICIhKEopRiIsICh2b2lkKilnZXRSb3RhdGlvbn0sCisgICAgICAgIHsiblNldFJvdGF0aW9uIiwgIiEoSkYpViIsICh2b2lkKilzZXRSb3RhdGlvbn0sCisgICAgICAgIHsibkdldFBpdm90WCIsICIhKEopRiIsICh2b2lkKilnZXRQaXZvdFh9LAorICAgICAgICB7Im5TZXRQaXZvdFgiLCAiIShKRilWIiwgKHZvaWQqKXNldFBpdm90WH0sCisgICAgICAgIHsibkdldFBpdm90WSIsICIhKEopRiIsICh2b2lkKilnZXRQaXZvdFl9LAorICAgICAgICB7Im5TZXRQaXZvdFkiLCAiIShKRilWIiwgKHZvaWQqKXNldFBpdm90WX0sCisgICAgICAgIHsibkdldFNjYWxlWCIsICIhKEopRiIsICh2b2lkKilnZXRTY2FsZVh9LAorICAgICAgICB7Im5TZXRTY2FsZVgiLCAiIShKRilWIiwgKHZvaWQqKXNldFNjYWxlWH0sCisgICAgICAgIHsibkdldFNjYWxlWSIsICIhKEopRiIsICh2b2lkKilnZXRTY2FsZVl9LAorICAgICAgICB7Im5TZXRTY2FsZVkiLCAiIShKRilWIiwgKHZvaWQqKXNldFNjYWxlWX0sCisgICAgICAgIHsibkdldFRyYW5zbGF0ZVgiLCAiIShKKUYiLCAodm9pZCopZ2V0VHJhbnNsYXRlWH0sCisgICAgICAgIHsiblNldFRyYW5zbGF0ZVgiLCAiIShKRilWIiwgKHZvaWQqKXNldFRyYW5zbGF0ZVh9LAorICAgICAgICB7Im5HZXRUcmFuc2xhdGVZIiwgIiEoSilGIiwgKHZvaWQqKWdldFRyYW5zbGF0ZVl9LAorICAgICAgICB7Im5TZXRUcmFuc2xhdGVZIiwgIiEoSkYpViIsICh2b2lkKilzZXRUcmFuc2xhdGVZfSwKKworICAgICAgICB7Im5TZXRQYXRoRGF0YSIsICIhKEpKKVYiLCAodm9pZCopc2V0UGF0aERhdGF9LAorICAgICAgICB7Im5HZXRTdHJva2VXaWR0aCIsICIhKEopRiIsICh2b2lkKilnZXRTdHJva2VXaWR0aH0sCisgICAgICAgIHsiblNldFN0cm9rZVdpZHRoIiwgIiEoSkYpViIsICh2b2lkKilzZXRTdHJva2VXaWR0aH0sCisgICAgICAgIHsibkdldFN0cm9rZUNvbG9yIiwgIiEoSilJIiwgKHZvaWQqKWdldFN0cm9rZUNvbG9yfSwKKyAgICAgICAgeyJuU2V0U3Ryb2tlQ29sb3IiLCAiIShKSSlWIiwgKHZvaWQqKXNldFN0cm9rZUNvbG9yfSwKKyAgICAgICAgeyJuR2V0U3Ryb2tlQWxwaGEiLCAiIShKKUYiLCAodm9pZCopZ2V0U3Ryb2tlQWxwaGF9LAorICAgICAgICB7Im5TZXRTdHJva2VBbHBoYSIsICIhKEpGKVYiLCAodm9pZCopc2V0U3Ryb2tlQWxwaGF9LAorICAgICAgICB7Im5HZXRGaWxsQ29sb3IiLCAiIShKKUkiLCAodm9pZCopZ2V0RmlsbENvbG9yfSwKKyAgICAgICAgeyJuU2V0RmlsbENvbG9yIiwgIiEoSkkpViIsICh2b2lkKilzZXRGaWxsQ29sb3J9LAorICAgICAgICB7Im5HZXRGaWxsQWxwaGEiLCAiIShKKUYiLCAodm9pZCopZ2V0RmlsbEFscGhhfSwKKyAgICAgICAgeyJuU2V0RmlsbEFscGhhIiwgIiEoSkYpViIsICh2b2lkKilzZXRGaWxsQWxwaGF9LAorICAgICAgICB7Im5HZXRUcmltUGF0aFN0YXJ0IiwgIiEoSilGIiwgKHZvaWQqKWdldFRyaW1QYXRoU3RhcnR9LAorICAgICAgICB7Im5TZXRUcmltUGF0aFN0YXJ0IiwgIiEoSkYpViIsICh2b2lkKilzZXRUcmltUGF0aFN0YXJ0fSwKKyAgICAgICAgeyJuR2V0VHJpbVBhdGhFbmQiLCAiIShKKUYiLCAodm9pZCopZ2V0VHJpbVBhdGhFbmR9LAorICAgICAgICB7Im5TZXRUcmltUGF0aEVuZCIsICIhKEpGKVYiLCAodm9pZCopc2V0VHJpbVBhdGhFbmR9LAorICAgICAgICB7Im5HZXRUcmltUGF0aE9mZnNldCIsICIhKEopRiIsICh2b2lkKilnZXRUcmltUGF0aE9mZnNldH0sCisgICAgICAgIHsiblNldFRyaW1QYXRoT2Zmc2V0IiwgIiEoSkYpViIsICh2b2lkKilzZXRUcmltUGF0aE9mZnNldH0sCit9OworCitpbnQgcmVnaXN0ZXJfYW5kcm9pZF9ncmFwaGljc19kcmF3YWJsZV9WZWN0b3JEcmF3YWJsZShKTklFbnYqIGVudikgeworICAgIHJldHVybiBSZWdpc3Rlck1ldGhvZHNPckRpZShlbnYsICJhbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1ZlY3RvckRyYXdhYmxlIiwgZ01ldGhvZHMsIE5FTEVNKGdNZXRob2RzKSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW0uY3BwCmluZGV4IDZkM2M3ZDcuLjhlOGY2YzM3IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtLmNwcApAQCAtMTUyLDcgKzE1Miw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgewogICAgIGptZXRob2RJRCBwb3N0RHluUG9saWN5RXZlbnRGcm9tTmF0aXZlOwotfSBnRHluUG9saWN5RXZlbnRIYW5kbGVyTWV0aG9kczsKKyAgICBqbWV0aG9kSUQgcG9zdFJlY29yZENvbmZpZ0V2ZW50RnJvbU5hdGl2ZTsKK30gZ0F1ZGlvUG9saWN5RXZlbnRIYW5kbGVyTWV0aG9kczsKIAogc3RhdGljIE11dGV4IGdMb2NrOwogCkBAIC0zNzgsMTIgKzM3OSwyNiBAQAogICAgIGNvbnN0IGNoYXIqIHplY2hhcnMgPSByZWdJZC5zdHJpbmcoKTsKICAgICBqc3RyaW5nIHplc3RyaW5nID0gZW52LT5OZXdTdHJpbmdVVEYoemVjaGFycyk7CiAKLSAgICBlbnYtPkNhbGxTdGF0aWNWb2lkTWV0aG9kKGNsYXp6LCBnRHluUG9saWN5RXZlbnRIYW5kbGVyTWV0aG9kcy5wb3N0RHluUG9saWN5RXZlbnRGcm9tTmF0aXZlLAorICAgIGVudi0+Q2FsbFN0YXRpY1ZvaWRNZXRob2QoY2xhenosIGdBdWRpb1BvbGljeUV2ZW50SGFuZGxlck1ldGhvZHMucG9zdER5blBvbGljeUV2ZW50RnJvbU5hdGl2ZSwKICAgICAgICAgICAgIGV2ZW50LCB6ZXN0cmluZywgdmFsKTsKIAogICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKHplc3RyaW5nLCB6ZWNoYXJzKTsKICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGNsYXp6KTsKK30KIAorc3RhdGljIHZvaWQKK2FuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fcmVjb3JkaW5nX2NhbGxiYWNrKGludCBldmVudCwgaW50IHNlc3Npb24sIGludCBzb3VyY2UpCit7CisgICAgSk5JRW52ICplbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CisgICAgaWYgKGVudiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBqY2xhc3MgY2xhenogPSBlbnYtPkZpbmRDbGFzcyhrQ2xhc3NQYXRoTmFtZSk7CisgICAgZW52LT5DYWxsU3RhdGljVm9pZE1ldGhvZChjbGF6eiwKKyAgICAgICAgICAgIGdBdWRpb1BvbGljeUV2ZW50SGFuZGxlck1ldGhvZHMucG9zdFJlY29yZENvbmZpZ0V2ZW50RnJvbU5hdGl2ZSwKKyAgICAgICAgICAgIGV2ZW50LCBzZXNzaW9uLCBzb3VyY2UpOworICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoY2xhenopOwogfQogCiBzdGF0aWMgamludApAQCAtNDk4LDYgKzUxMywyMiBAQAogfQogCiBzdGF0aWMgamludAorYW5kcm9pZF9tZWRpYV9BdWRpb1N5c3RlbV9zZXRNYXN0ZXJNb25vKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXosIGpib29sZWFuIG1vbm8pCit7CisgICAgcmV0dXJuIChqaW50KSBjaGVja19BdWRpb1N5c3RlbV9Db21tYW5kKEF1ZGlvU3lzdGVtOjpzZXRNYXN0ZXJNb25vKG1vbm8pKTsKK30KKworc3RhdGljIGpib29sZWFuCithbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX2dldE1hc3Rlck1vbm8oSk5JRW52ICplbnYsIGpvYmplY3QgdGhpeikKK3sKKyAgICBib29sIG1vbm87CisgICAgaWYgKEF1ZGlvU3lzdGVtOjpnZXRNYXN0ZXJNb25vKCZtb25vKSAhPSBOT19FUlJPUikgeworICAgICAgICBtb25vID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBtb25vOworfQorCitzdGF0aWMgamludAogYW5kcm9pZF9tZWRpYV9BdWRpb1N5c3RlbV9nZXREZXZpY2VzRm9yU3RyZWFtKEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXosIGppbnQgc3RyZWFtKQogewogICAgIHJldHVybiAoamludCkgQXVkaW9TeXN0ZW06OmdldERldmljZXNGb3JTdHJlYW0oc3RhdGljX2Nhc3QgPGF1ZGlvX3N0cmVhbV90eXBlX3Q+KHN0cmVhbSkpOwpAQCAtMTQ4Nyw2ICsxNTE4LDEyIEBACiAgICAgQXVkaW9TeXN0ZW06OnNldER5blBvbGljeUNhbGxiYWNrKGFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fZHluX3BvbGljeV9jYWxsYmFjayk7CiB9CiAKK3N0YXRpYyB2b2lkCithbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX3JlZ2lzdGVyUmVjb3JkaW5nQ2FsbGJhY2soSk5JRW52ICplbnYsIGpvYmplY3QgdGhpeikKK3sKKyAgICBBdWRpb1N5c3RlbTo6c2V0UmVjb3JkQ29uZmlnQ2FsbGJhY2soYW5kcm9pZF9tZWRpYV9BdWRpb1N5c3RlbV9yZWNvcmRpbmdfY2FsbGJhY2spOworfQorCiAKIHN0YXRpYyBqaW50IGNvbnZlcnRBdWRpb01peFRvTmF0aXZlKEpOSUVudiAqZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9NaXggKm5BdWRpb01peCwKQEAgLTE2MzcsNiArMTY3NCw4IEBACiAgICAgeyJnZXRNYXN0ZXJWb2x1bWUiLCAgICAgIigpRiIsICAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX2dldE1hc3RlclZvbHVtZX0sCiAgICAgeyJzZXRNYXN0ZXJNdXRlIiwgICAgICAgIihaKUkiLCAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX3NldE1hc3Rlck11dGV9LAogICAgIHsiZ2V0TWFzdGVyTXV0ZSIsICAgICAgICIoKVoiLCAgICAgICh2b2lkICopYW5kcm9pZF9tZWRpYV9BdWRpb1N5c3RlbV9nZXRNYXN0ZXJNdXRlfSwKKyAgICB7InNldE1hc3Rlck1vbm8iLCAgICAgICAiKFopSSIsICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fc2V0TWFzdGVyTW9ub30sCisgICAgeyJnZXRNYXN0ZXJNb25vIiwgICAgICAgIigpWiIsICAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX2dldE1hc3Rlck1vbm99LAogICAgIHsiZ2V0RGV2aWNlc0ZvclN0cmVhbSIsICIoSSlJIiwgICAgICh2b2lkICopYW5kcm9pZF9tZWRpYV9BdWRpb1N5c3RlbV9nZXREZXZpY2VzRm9yU3RyZWFtfSwKICAgICB7ImdldFByaW1hcnlPdXRwdXRTYW1wbGluZ1JhdGUiLCAiKClJIiwgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX2dldFByaW1hcnlPdXRwdXRTYW1wbGluZ1JhdGV9LAogICAgIHsiZ2V0UHJpbWFyeU91dHB1dEZyYW1lQ291bnQiLCAgICIoKUkiLCAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fZ2V0UHJpbWFyeU91dHB1dEZyYW1lQ291bnR9LApAQCAtMTY1OSw2ICsxNjk4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvU3lzdGVtX3JlZ2lzdGVyUG9saWN5TWl4ZXN9LAogICAgIHsibmF0aXZlX3JlZ2lzdGVyX2R5bmFtaWNfcG9saWN5X2NhbGxiYWNrIiwgIigpViIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fcmVnaXN0ZXJEeW5Qb2xpY3lDYWxsYmFja30sCisgICAgeyJuYXRpdmVfcmVnaXN0ZXJfcmVjb3JkaW5nX2NhbGxiYWNrIiwgIigpViIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fcmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFja30sCiAgICAgeyJzeXN0ZW1SZWFkeSIsICIoKUkiLCAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9TeXN0ZW1fc3lzdGVtUmVhZHl9LAogfTsKIApAQCAtMTc2Miw5ICsxODAzLDEyIEBACiAgICAgZ0V2ZW50SGFuZGxlckZpZWxkcy5tSm5pQ2FsbGJhY2sgPSBHZXRGaWVsZElET3JEaWUoZW52LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50SGFuZGxlckNsYXNzLCAibUpuaUNhbGxiYWNrIiwgIkoiKTsKIAotICAgIGdEeW5Qb2xpY3lFdmVudEhhbmRsZXJNZXRob2RzLnBvc3REeW5Qb2xpY3lFdmVudEZyb21OYXRpdmUgPQorICAgIGdBdWRpb1BvbGljeUV2ZW50SGFuZGxlck1ldGhvZHMucG9zdER5blBvbGljeUV2ZW50RnJvbU5hdGl2ZSA9CiAgICAgICAgICAgICBHZXRTdGF0aWNNZXRob2RJRE9yRGllKGVudiwgZW52LT5GaW5kQ2xhc3Moa0NsYXNzUGF0aE5hbWUpLAogICAgICAgICAgICAgICAgICAgICAiZHluYW1pY1BvbGljeUNhbGxiYWNrRnJvbU5hdGl2ZSIsICIoSUxqYXZhL2xhbmcvU3RyaW5nO0kpViIpOworICAgIGdBdWRpb1BvbGljeUV2ZW50SGFuZGxlck1ldGhvZHMucG9zdFJlY29yZENvbmZpZ0V2ZW50RnJvbU5hdGl2ZSA9CisgICAgICAgICAgICBHZXRTdGF0aWNNZXRob2RJRE9yRGllKGVudiwgZW52LT5GaW5kQ2xhc3Moa0NsYXNzUGF0aE5hbWUpLAorICAgICAgICAgICAgICAgICAgICAicmVjb3JkaW5nQ2FsbGJhY2tGcm9tTmF0aXZlIiwgIihJSUkpViIpOwogCiAgICAgamNsYXNzIGF1ZGlvTWl4Q2xhc3MgPSBGaW5kQ2xhc3NPckRpZShlbnYsICJhbmRyb2lkL21lZGlhL2F1ZGlvcG9saWN5L0F1ZGlvTWl4Iik7CiAgICAgZ0F1ZGlvTWl4Q2xhc3MgPSBNYWtlR2xvYmFsUmVmT3JEaWUoZW52LCBhdWRpb01peENsYXNzKTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9UcmFjay5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX21lZGlhX0F1ZGlvVHJhY2suY3BwCmluZGV4IDc4NjBiNzQuLjQyZjNmYjAgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfbWVkaWFfQXVkaW9UcmFjay5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZF9tZWRpYV9BdWRpb1RyYWNrLmNwcApAQCAtMTA0OSw2ICsxMDQ5LDEwIEBACiAgICAgcEpuaVN0b3JhZ2UtPm1EZXZpY2VDYWxsYmFjay5jbGVhcigpOwogfQogCitzdGF0aWMgamludCBhbmRyb2lkX21lZGlhX0F1ZGlvVHJhY2tfZ2V0X0ZDQ184KEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXopIHsKKyAgICByZXR1cm4gRkNDXzg7Cit9CisKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEwNiw2ICsxMTEwLDcgQEAKICAgICB7Im5hdGl2ZV9nZXRSb3V0ZWREZXZpY2VJZCIsICIoKUkiLCAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9UcmFja19nZXRSb3V0ZWREZXZpY2VJZH0sCiAgICAgeyJuYXRpdmVfZW5hYmxlRGV2aWNlQ2FsbGJhY2siLCAiKClWIiwgKHZvaWQgKilhbmRyb2lkX21lZGlhX0F1ZGlvVHJhY2tfZW5hYmxlRGV2aWNlQ2FsbGJhY2t9LAogICAgIHsibmF0aXZlX2Rpc2FibGVEZXZpY2VDYWxsYmFjayIsICIoKVYiLCAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9UcmFja19kaXNhYmxlRGV2aWNlQ2FsbGJhY2t9LAorICAgIHsibmF0aXZlX2dldF9GQ0NfOCIsICAgICAiKClJIiwgICAgICAodm9pZCAqKWFuZHJvaWRfbWVkaWFfQXVkaW9UcmFja19nZXRfRkNDXzh9LAogfTsKIAogCkBAIC0xMTM1LDYgKzExNDAsOSBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaW50IHJlZ2lzdGVyX2FuZHJvaWRfbWVkaWFfQXVkaW9UcmFjayhKTklFbnYgKmVudikKIHsKKyAgICAvLyBtdXN0IGJlIGZpcnN0CisgICAgaW50IHJlcyA9IFJlZ2lzdGVyTWV0aG9kc09yRGllKGVudiwga0NsYXNzUGF0aE5hbWUsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOworCiAgICAgamF2YUF1ZGlvVHJhY2tGaWVsZHMubmF0aXZlVHJhY2tJbkphdmFPYmogPSBOVUxMOwogICAgIGphdmFBdWRpb1RyYWNrRmllbGRzLnBvc3ROYXRpdmVFdmVudEluSmF2YSA9IE5VTEw7CiAKQEAgLTExNzMsNyArMTE4MSw3IEBACiAgICAgLy8gaW5pdGlhbGl6ZSBQbGF5YmFja1BhcmFtcyBmaWVsZCBpbmZvCiAgICAgZ1BsYXliYWNrUGFyYW1zRmllbGRzLmluaXQoZW52KTsKIAotICAgIHJldHVybiBSZWdpc3Rlck1ldGhvZHNPckRpZShlbnYsIGtDbGFzc1BhdGhOYW1lLCBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiAKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfb3BlbmdsX0dMRVMzMi5jcHAgYi9jb3JlL2puaS9hbmRyb2lkX29wZW5nbF9HTEVTMzIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YTFhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL2puaS9hbmRyb2lkX29wZW5nbF9HTEVTMzIuY3BwCkBAIC0wLDAgKzEsMTk5OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1idXQtc2V0LXZhcmlhYmxlIgorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPEdMRVMzL2dsMzIuaD4KKyNpbmNsdWRlIDxqbmkuaD4KKyNpbmNsdWRlIDxKTklIZWxwLmg+CisjaW5jbHVkZSA8YW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmg+CisjaW5jbHVkZSA8dXRpbHMvbWlzYy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCitzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworc3RhdGljIGpjbGFzcyBuaW9BY2Nlc3NDbGFzczsKK3N0YXRpYyBqY2xhc3MgYnVmZmVyQ2xhc3M7CitzdGF0aWMgam1ldGhvZElEIGdldEJhc2VQb2ludGVySUQ7CitzdGF0aWMgam1ldGhvZElEIGdldEJhc2VBcnJheUlEOworc3RhdGljIGptZXRob2RJRCBnZXRCYXNlQXJyYXlPZmZzZXRJRDsKK3N0YXRpYyBqZmllbGRJRCBwb3NpdGlvbklEOworc3RhdGljIGpmaWVsZElEIGxpbWl0SUQ7CitzdGF0aWMgamZpZWxkSUQgZWxlbWVudFNpemVTaGlmdElEOworCisKKy8qIHNwZWNpYWwgY2FsbHMgaW1wbGVtZW50ZWQgaW4gQW5kcm9pZCdzIEdMRVMgd3JhcHBlciB1c2VkIHRvIG1vcmUKKyAqIGVmZmljaWVudGx5IGJvdW5kLWNoZWNrIHBhc3NlZCBhcnJheXMgKi8KK2V4dGVybiAiQyIgeworI2lmZGVmIEdMX1ZFUlNJT05fRVNfQ01fMV8xCitHTF9BUEkgdm9pZCBHTF9BUElFTlRSWSBnbENvbG9yUG9pbnRlckJvdW5kcyhHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsCisgICAgICAgIGNvbnN0IEdMdm9pZCAqcHRyLCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsTm9ybWFsUG9pbnRlckJvdW5kcyhHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsCisgICAgICAgIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCk7CitHTF9BUEkgdm9pZCBHTF9BUElFTlRSWSBnbFRleENvb3JkUG9pbnRlckJvdW5kcyhHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCk7CitHTF9BUEkgdm9pZCBHTF9BUElFTlRSWSBnbFZlcnRleFBvaW50ZXJCb3VuZHMoR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQgKnBvaW50ZXIsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJIHZvaWQgR0xfQVBJRU5UUlkgZ2xQb2ludFNpemVQb2ludGVyT0VTQm91bmRzKEdMZW51bSB0eXBlLAorICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsTWF0cml4SW5kZXhQb2ludGVyT0VTQm91bmRzKEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkICpwb2ludGVyLCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSSB2b2lkIEdMX0FQSUVOVFJZIGdsV2VpZ2h0UG9pbnRlck9FU0JvdW5kcyhHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCk7CisjZW5kaWYKKyNpZmRlZiBHTF9FU19WRVJTSU9OXzJfMAorc3RhdGljIHZvaWQgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyQm91bmRzKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQgKnBvaW50ZXIsIEdMc2l6ZWkgY291bnQpIHsKKyAgICBnbFZlcnRleEF0dHJpYlBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwb2ludGVyKTsKK30KKyNlbmRpZgorI2lmZGVmIEdMX0VTX1ZFUlNJT05fM18wCitzdGF0aWMgdm9pZCBnbFZlcnRleEF0dHJpYklQb2ludGVyQm91bmRzKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCAqcG9pbnRlciwgR0xzaXplaSBjb3VudCkgeworICAgIGdsVmVydGV4QXR0cmliSVBvaW50ZXIoaW5keCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBwb2ludGVyKTsKK30KKyNlbmRpZgorfQorCisvKiBDYWNoZSBtZXRob2QgSURzIGVhY2ggdGltZSB0aGUgY2xhc3MgaXMgbG9hZGVkLiAqLworCitzdGF0aWMgdm9pZAorbmF0aXZlQ2xhc3NJbml0KEpOSUVudiAqX2VudiwgamNsYXNzIGdsSW1wbENsYXNzKQoreworICAgIGpjbGFzcyBuaW9BY2Nlc3NDbGFzc0xvY2FsID0gX2Vudi0+RmluZENsYXNzKCJqYXZhL25pby9OSU9BY2Nlc3MiKTsKKyAgICBuaW9BY2Nlc3NDbGFzcyA9IChqY2xhc3MpIF9lbnYtPk5ld0dsb2JhbFJlZihuaW9BY2Nlc3NDbGFzc0xvY2FsKTsKKworICAgIGpjbGFzcyBidWZmZXJDbGFzc0xvY2FsID0gX2Vudi0+RmluZENsYXNzKCJqYXZhL25pby9CdWZmZXIiKTsKKyAgICBidWZmZXJDbGFzcyA9IChqY2xhc3MpIF9lbnYtPk5ld0dsb2JhbFJlZihidWZmZXJDbGFzc0xvY2FsKTsKKworICAgIGdldEJhc2VQb2ludGVySUQgPSBfZW52LT5HZXRTdGF0aWNNZXRob2RJRChuaW9BY2Nlc3NDbGFzcywKKyAgICAgICAgICAgICJnZXRCYXNlUG9pbnRlciIsICIoTGphdmEvbmlvL0J1ZmZlcjspSiIpOworICAgIGdldEJhc2VBcnJheUlEID0gX2Vudi0+R2V0U3RhdGljTWV0aG9kSUQobmlvQWNjZXNzQ2xhc3MsCisgICAgICAgICAgICAiZ2V0QmFzZUFycmF5IiwgIihMamF2YS9uaW8vQnVmZmVyOylMamF2YS9sYW5nL09iamVjdDsiKTsKKyAgICBnZXRCYXNlQXJyYXlPZmZzZXRJRCA9IF9lbnYtPkdldFN0YXRpY01ldGhvZElEKG5pb0FjY2Vzc0NsYXNzLAorICAgICAgICAgICAgImdldEJhc2VBcnJheU9mZnNldCIsICIoTGphdmEvbmlvL0J1ZmZlcjspSSIpOworCisgICAgcG9zaXRpb25JRCA9IF9lbnYtPkdldEZpZWxkSUQoYnVmZmVyQ2xhc3MsICJwb3NpdGlvbiIsICJJIik7CisgICAgbGltaXRJRCA9IF9lbnYtPkdldEZpZWxkSUQoYnVmZmVyQ2xhc3MsICJsaW1pdCIsICJJIik7CisgICAgZWxlbWVudFNpemVTaGlmdElEID0KKyAgICAgICAgX2Vudi0+R2V0RmllbGRJRChidWZmZXJDbGFzcywgIl9lbGVtZW50U2l6ZVNoaWZ0IiwgIkkiKTsKK30KKworc3RhdGljIHZvaWQgKgorZ2V0UG9pbnRlcihKTklFbnYgKl9lbnYsIGpvYmplY3QgYnVmZmVyLCBqYXJyYXkgKmFycmF5LCBqaW50ICpyZW1haW5pbmcsIGppbnQgKm9mZnNldCkKK3sKKyAgICBqaW50IHBvc2l0aW9uOworICAgIGppbnQgbGltaXQ7CisgICAgamludCBlbGVtZW50U2l6ZVNoaWZ0OworICAgIGpsb25nIHBvaW50ZXI7CisKKyAgICBwb3NpdGlvbiA9IF9lbnYtPkdldEludEZpZWxkKGJ1ZmZlciwgcG9zaXRpb25JRCk7CisgICAgbGltaXQgPSBfZW52LT5HZXRJbnRGaWVsZChidWZmZXIsIGxpbWl0SUQpOworICAgIGVsZW1lbnRTaXplU2hpZnQgPSBfZW52LT5HZXRJbnRGaWVsZChidWZmZXIsIGVsZW1lbnRTaXplU2hpZnRJRCk7CisgICAgKnJlbWFpbmluZyA9IChsaW1pdCAtIHBvc2l0aW9uKSA8PCBlbGVtZW50U2l6ZVNoaWZ0OworICAgIHBvaW50ZXIgPSBfZW52LT5DYWxsU3RhdGljTG9uZ01ldGhvZChuaW9BY2Nlc3NDbGFzcywKKyAgICAgICAgICAgIGdldEJhc2VQb2ludGVySUQsIGJ1ZmZlcik7CisgICAgaWYgKHBvaW50ZXIgIT0gMEwpIHsKKyAgICAgICAgKmFycmF5ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBvaW50ZXIpOworICAgIH0KKworICAgICphcnJheSA9IChqYXJyYXkpIF9lbnYtPkNhbGxTdGF0aWNPYmplY3RNZXRob2QobmlvQWNjZXNzQ2xhc3MsCisgICAgICAgICAgICBnZXRCYXNlQXJyYXlJRCwgYnVmZmVyKTsKKyAgICAqb2Zmc2V0ID0gX2Vudi0+Q2FsbFN0YXRpY0ludE1ldGhvZChuaW9BY2Nlc3NDbGFzcywKKyAgICAgICAgICAgIGdldEJhc2VBcnJheU9mZnNldElELCBidWZmZXIpOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2NsYXNzIEJ5dGVBcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpieXRlQXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIEJvb2xlYW5BcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpib29sZWFuQXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXRCb29sZWFuQXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIENoYXJBcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpjaGFyQXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXRDaGFyQXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIFNob3J0QXJyYXlHZXR0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBHZXQoSk5JRW52KiBfZW52LCBqc2hvcnRBcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldFNob3J0QXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIEludEFycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamludEFycmF5IGFycmF5LCBqYm9vbGVhbiogaXNfY29weSkgeworICAgICAgICByZXR1cm4gX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIExvbmdBcnJheUdldHRlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIEdldChKTklFbnYqIF9lbnYsIGpsb25nQXJyYXkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgICAgIHJldHVybiBfZW52LT5HZXRMb25nQXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIEZsb2F0QXJyYXlHZXR0ZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBHZXQoSk5JRW52KiBfZW52LCBqZmxvYXRBcnJheSBhcnJheSwgamJvb2xlYW4qIGlzX2NvcHkpIHsKKyAgICAgICAgcmV0dXJuIF9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKK2NsYXNzIERvdWJsZUFycmF5R2V0dGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCogR2V0KEpOSUVudiogX2VudiwgamRvdWJsZUFycmF5IGFycmF5LCBqYm9vbGVhbiogaXNfY29weSkgeworICAgICAgICByZXR1cm4gX2Vudi0+R2V0RG91YmxlQXJyYXlFbGVtZW50cyhhcnJheSwgaXNfY29weSk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlRZUEVBUlJBWSwgdHlwZW5hbWUgQVJSQVlHRVRURVI+CitzdGF0aWMgdm9pZCoKK2dldEFycmF5UG9pbnRlcihKTklFbnYgKl9lbnYsIEpUWVBFQVJSQVkgYXJyYXksIGpib29sZWFuKiBpc19jb3B5KSB7CisgICAgcmV0dXJuIEFSUkFZR0VUVEVSOjpHZXQoX2VudiwgYXJyYXksIGlzX2NvcHkpOworfQorCitjbGFzcyBCeXRlQXJyYXlSZWxlYXNlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgUmVsZWFzZShKTklFbnYqIF9lbnYsIGpieXRlQXJyYXkgYXJyYXksIGpieXRlKiBkYXRhLCBqYm9vbGVhbiBjb21taXQpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGFycmF5LCBkYXRhLCBjb21taXQgPyAwIDogSk5JX0FCT1JUKTsKKyAgICB9Cit9OworY2xhc3MgQm9vbGVhbkFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqYm9vbGVhbkFycmF5IGFycmF5LCBqYm9vbGVhbiogZGF0YSwgamJvb2xlYW4gY29tbWl0KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VCb29sZWFuQXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIENoYXJBcnJheVJlbGVhc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBSZWxlYXNlKEpOSUVudiogX2VudiwgamNoYXJBcnJheSBhcnJheSwgamNoYXIqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlQ2hhckFycmF5RWxlbWVudHMoYXJyYXksIGRhdGEsIGNvbW1pdCA/IDAgOiBKTklfQUJPUlQpOworICAgIH0KK307CitjbGFzcyBTaG9ydEFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqc2hvcnRBcnJheSBhcnJheSwganNob3J0KiBkYXRhLCBqYm9vbGVhbiBjb21taXQpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZVNob3J0QXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIEludEFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqaW50QXJyYXkgYXJyYXksIGppbnQqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIExvbmdBcnJheVJlbGVhc2VyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBSZWxlYXNlKEpOSUVudiogX2VudiwgamxvbmdBcnJheSBhcnJheSwgamxvbmcqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMoYXJyYXksIGRhdGEsIGNvbW1pdCA/IDAgOiBKTklfQUJPUlQpOworICAgIH0KK307CitjbGFzcyBGbG9hdEFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqZmxvYXRBcnJheSBhcnJheSwgamZsb2F0KiBkYXRhLCBqYm9vbGVhbiBjb21taXQpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKK2NsYXNzIERvdWJsZUFycmF5UmVsZWFzZXIgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIFJlbGVhc2UoSk5JRW52KiBfZW52LCBqZG91YmxlQXJyYXkgYXJyYXksIGpkb3VibGUqIGRhdGEsIGpib29sZWFuIGNvbW1pdCkgeworICAgICAgICBfZW52LT5SZWxlYXNlRG91YmxlQXJyYXlFbGVtZW50cyhhcnJheSwgZGF0YSwgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlRZUEVBUlJBWSwgdHlwZW5hbWUgTlRZUEVBUlJBWSwgdHlwZW5hbWUgQVJSQVlSRUxFQVNFUj4KK3N0YXRpYyB2b2lkCityZWxlYXNlQXJyYXlQb2ludGVyKEpOSUVudiAqX2VudiwgSlRZUEVBUlJBWSBhcnJheSwgTlRZUEVBUlJBWSBkYXRhLCBqYm9vbGVhbiBjb21taXQpIHsKKyAgICBBUlJBWVJFTEVBU0VSOjpSZWxlYXNlKF9lbnYsIGFycmF5LCBkYXRhLCBjb21taXQpOworfQorCitzdGF0aWMgdm9pZAorcmVsZWFzZVBvaW50ZXIoSk5JRW52ICpfZW52LCBqYXJyYXkgYXJyYXksIHZvaWQgKmRhdGEsIGpib29sZWFuIGNvbW1pdCkKK3sKKyAgICBfZW52LT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChhcnJheSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0ID8gMCA6IEpOSV9BQk9SVCk7Cit9CisKK3N0YXRpYyB2b2lkICoKK2dldERpcmVjdEJ1ZmZlclBvaW50ZXIoSk5JRW52ICpfZW52LCBqb2JqZWN0IGJ1ZmZlcikgeworICAgIGNoYXIqIGJ1ZiA9IChjaGFyKikgX2Vudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhidWZmZXIpOworICAgIGlmIChidWYpIHsKKyAgICAgICAgamludCBwb3NpdGlvbiA9IF9lbnYtPkdldEludEZpZWxkKGJ1ZmZlciwgcG9zaXRpb25JRCk7CisgICAgICAgIGppbnQgZWxlbWVudFNpemVTaGlmdCA9IF9lbnYtPkdldEludEZpZWxkKGJ1ZmZlciwgZWxlbWVudFNpemVTaGlmdElEKTsKKyAgICAgICAgYnVmICs9IHBvc2l0aW9uIDw8IGVsZW1lbnRTaXplU2hpZnQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVzdCB1c2UgYSBuYXRpdmUgb3JkZXIgZGlyZWN0IEJ1ZmZlciIpOworICAgIH0KKyAgICByZXR1cm4gKHZvaWQqKSBidWY7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgdmFsdWVzIGdsR2V0IHJldHVybnMgZm9yIGEgZ2l2ZW4gcG5hbWUuCisgKgorICogVGhlIGNvZGUgYmVsb3cgaXMgd3JpdHRlbiBzdWNoIHRoYXQgcG5hbWVzIHJlcXVpcmluZyBvbmx5IG9uZSB2YWx1ZXMKKyAqIGFyZSB0aGUgZGVmYXVsdCAoYW5kIGFyZSBub3QgZXhwbGljaXRlbHkgdGVzdGVkIGZvcikuIFRoaXMgbWFrZXMgdGhlCisgKiBjaGVja2luZyBjb2RlIG11Y2ggc2hvcnRlci9yZWFkYWJsZS9lZmZpY2llbnQuCisgKgorICogVGhpcyBtZWFucyB0aGF0IHVua25vd24gcG5hbWVzIChlLmcuOiBleHRlbnNpb25zKSB3aWxsIGRlZmF1bHQgdG8gMS4gSWYKKyAqIHRoYXQgdW5rbm93biBwbmFtZSBuZWVkcyBtb3JlIHRoYW4gMSB2YWx1ZSwgdGhlbiB0aGUgdmFsaWRhdGlvbiBjaGVjaworICogaXMgaW5jb21wbGV0ZSBhbmQgdGhlIGFwcCBtYXkgY3Jhc2ggaWYgaXQgcGFzc2VkIHRoZSB3cm9uZyBudW1iZXIgcGFyYW1zLgorICovCitzdGF0aWMgaW50IGdldE5lZWRlZENvdW50KEdMaW50IHBuYW1lKSB7CisgICAgaW50IG5lZWRlZCA9IDE7CisjaWZkZWYgR0xfRVNfVkVSU0lPTl8yXzAKKyAgICAvLyBHTEVTIDIueCBwbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICBjYXNlIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAgICAgICAgIG5lZWRlZCA9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgorICAgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKKyAgICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKKyAgICAgICAgICAgIG5lZWRlZCA9IDQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOgorICAgICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMsICZuZWVkZWQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgICAgICBnbEdldEludGVnZXJ2KEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFMsICZuZWVkZWQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBHTF9WRVJTSU9OX0VTX0NNXzFfMQorICAgIC8vIEdMRVMgMS54IHBuYW1lcworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgorICAgICAgICBjYXNlIEdMX1NNT09USF9MSU5FX1dJRFRIX1JBTkdFOgorICAgICAgICBjYXNlIEdMX1NNT09USF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICAgICAgbmVlZGVkID0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9OT1JNQUw6CisgICAgICAgIGNhc2UgR0xfUE9JTlRfRElTVEFOQ0VfQVRURU5VQVRJT046CisgICAgICAgICAgICBuZWVkZWQgPSAzOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6CisgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9DT0xPUjoKKyAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1RFWFRVUkVfQ09PUkRTOgorICAgICAgICBjYXNlIEdMX0ZPR19DT0xPUjoKKyAgICAgICAgY2FzZSBHTF9MSUdIVF9NT0RFTF9BTUJJRU5UOgorICAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgorICAgICAgICBjYXNlIEdMX1ZJRVdQT1JUOgorICAgICAgICAgICAgbmVlZGVkID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0xfTU9ERUxWSUVXX01BVFJJWDoKKyAgICAgICAgY2FzZSBHTF9QUk9KRUNUSU9OX01BVFJJWDoKKyAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BVFJJWDoKKyAgICAgICAgICAgIG5lZWRlZCA9IDE2OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTLCAmbmVlZGVkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBuZWVkZWQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBKVFlQRUFSUkFZLCB0eXBlbmFtZSBBUlJBWUdFVFRFUiwgdHlwZW5hbWUgTlRZUEVBUlJBWSwKKyAgICAgICAgICB0eXBlbmFtZSBBUlJBWVJFTEVBU0VSLCB0eXBlbmFtZSBDVFlQRSwgdm9pZCBHRVQoR0xlbnVtLCBDVFlQRSopPgorc3RhdGljIHZvaWQKK2dldAorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHBuYW1lLCBKVFlQRUFSUkFZIHBhcmFtc19yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGU7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlOworICAgIENUWVBFICpwYXJhbXNfYmFzZSA9IChDVFlQRSAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBDVFlQRSAqcGFyYW1zID0gKENUWVBFICopIDA7CisgICAgaW50IF9uZWVkZWQgPSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIF9uZWVkZWQgPSBnZXROZWVkZWRDb3VudChwbmFtZSk7CisgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgdGhpcyBwbmFtZSwgd2UganVzdCBhc3N1bWUgdGhlIHVzZXIgcGFzc2VkCisgICAgLy8gYW4gYXJyYXkgb2YgdGhlIHJpZ2h0IHNpemUgLS0gdGhpcyBtaWdodCBoYXBwZW4gd2l0aCBleHRlbnNpb25zCisgICAgLy8gb3IgaWYgd2UgZm9yZ2V0IGFuIGVudW0gaGVyZS4KKyAgICBpZiAoX3JlbWFpbmluZyA8IF9uZWVkZWQpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggLSBvZmZzZXQgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHBhcmFtc19iYXNlID0gKENUWVBFICopIGdldEFycmF5UG9pbnRlcjxKVFlQRUFSUkFZLCBBUlJBWUdFVFRFUj4oCisgICAgICAgIF9lbnYsIHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgR0VUKAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoQ1RZUEUgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICByZWxlYXNlQXJyYXlQb2ludGVyPEpUWVBFQVJSQVksIE5UWVBFQVJSQVksIEFSUkFZUkVMRUFTRVI+KAorICAgICAgICAgICAgX2VudiwgcGFyYW1zX3JlZiwgcGFyYW1zX2Jhc2UsICFfZXhjZXB0aW9uKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIENUWVBFLCB0eXBlbmFtZSBKVFlQRUFSUkFZLCB0eXBlbmFtZSBBUlJBWUdFVFRFUiwgdHlwZW5hbWUgTlRZUEVBUlJBWSwKKyAgICAgICAgICB0eXBlbmFtZSBBUlJBWVJFTEVBU0VSLCB2b2lkIEdFVChHTGVudW0sIENUWVBFKik+CitzdGF0aWMgdm9pZAorZ2V0YXJyYXkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwbmFtZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGU7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlOworICAgIEpUWVBFQVJSQVkgX2FycmF5ID0gKEpUWVBFQVJSQVkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIENUWVBFICpwYXJhbXMgPSAoQ1RZUEUgKikgMDsKKyAgICBpbnQgX25lZWRlZCA9IDA7CisKKyAgICBwYXJhbXMgPSAoQ1RZUEUgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgX3JlbWFpbmluZyAvPSBzaXplb2YoQ1RZUEUpOyAgICAvLyBjb252ZXJ0IGZyb20gYnl0ZXMgdG8gaXRlbSBjb3VudAorICAgIF9uZWVkZWQgPSBnZXROZWVkZWRDb3VudChwbmFtZSk7CisgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgdGhpcyBwbmFtZSwgd2UganVzdCBhc3N1bWUgdGhlIHVzZXIgcGFzc2VkCisgICAgLy8gYW4gYXJyYXkgb2YgdGhlIHJpZ2h0IHNpemUgLS0gdGhpcyBtaWdodCBoYXBwZW4gd2l0aCBleHRlbnNpb25zCisgICAgLy8gb3IgaWYgd2UgZm9yZ2V0IGFuIGVudW0gaGVyZS4KKyAgICBpZiAoX25lZWRlZD4wICYmIF9yZW1haW5pbmcgPCBfbmVlZGVkKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKSBnZXRBcnJheVBvaW50ZXI8SlRZUEVBUlJBWSwgQVJSQVlHRVRURVI+KAorICAgICAgICAgICAgX2VudiwgX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtcyA9IChDVFlQRSAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgR0VUKAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoQ1RZUEUgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgcmVsZWFzZUFycmF5UG9pbnRlcjxKVFlQRUFSUkFZLCBOVFlQRUFSUkFZLCBBUlJBWVJFTEVBU0VSPigKKyAgICAgICAgICAgIF9lbnYsIF9hcnJheSwgKE5UWVBFQVJSQVkpcGFyYW1zLCBfZXhjZXB0aW9uID8gSk5JX0ZBTFNFIDogSk5JX1RSVUUpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIHZvaWQgZ2xCbGVuZEJhcnJpZXIgKCB2b2lkICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsQmxlbmRCYXJyaWVyX18KKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcykgeworICAgIGdsQmxlbmRCYXJyaWVyKCk7Cit9CisKKy8qIHZvaWQgZ2xDb3B5SW1hZ2VTdWJEYXRhICggR0x1aW50IHNyY05hbWUsIEdMZW51bSBzcmNUYXJnZXQsIEdMaW50IHNyY0xldmVsLCBHTGludCBzcmNYLCBHTGludCBzcmNZLCBHTGludCBzcmNaLCBHTHVpbnQgZHN0TmFtZSwgR0xlbnVtIGRzdFRhcmdldCwgR0xpbnQgZHN0TGV2ZWwsIEdMaW50IGRzdFgsIEdMaW50IGRzdFksIEdMaW50IGRzdFosIEdMc2l6ZWkgc3JjV2lkdGgsIEdMc2l6ZWkgc3JjSGVpZ2h0LCBHTHNpemVpIHNyY0RlcHRoICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsQ29weUltYWdlU3ViRGF0YV9fSUlJSUlJSUlJSUlJSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc3JjTmFtZSwgamludCBzcmNUYXJnZXQsIGppbnQgc3JjTGV2ZWwsIGppbnQgc3JjWCwgamludCBzcmNZLCBqaW50IHNyY1osIGppbnQgZHN0TmFtZSwgamludCBkc3RUYXJnZXQsIGppbnQgZHN0TGV2ZWwsIGppbnQgZHN0WCwgamludCBkc3RZLCBqaW50IGRzdFosIGppbnQgc3JjV2lkdGgsIGppbnQgc3JjSGVpZ2h0LCBqaW50IHNyY0RlcHRoKSB7CisgICAgZ2xDb3B5SW1hZ2VTdWJEYXRhKAorICAgICAgICAoR0x1aW50KXNyY05hbWUsCisgICAgICAgIChHTGVudW0pc3JjVGFyZ2V0LAorICAgICAgICAoR0xpbnQpc3JjTGV2ZWwsCisgICAgICAgIChHTGludClzcmNYLAorICAgICAgICAoR0xpbnQpc3JjWSwKKyAgICAgICAgKEdMaW50KXNyY1osCisgICAgICAgIChHTHVpbnQpZHN0TmFtZSwKKyAgICAgICAgKEdMZW51bSlkc3RUYXJnZXQsCisgICAgICAgIChHTGludClkc3RMZXZlbCwKKyAgICAgICAgKEdMaW50KWRzdFgsCisgICAgICAgIChHTGludClkc3RZLAorICAgICAgICAoR0xpbnQpZHN0WiwKKyAgICAgICAgKEdMc2l6ZWkpc3JjV2lkdGgsCisgICAgICAgIChHTHNpemVpKXNyY0hlaWdodCwKKyAgICAgICAgKEdMc2l6ZWkpc3JjRGVwdGgKKyAgICApOworfQorCisvKiB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoIEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqaWRzLCBHTGJvb2xlYW4gZW5hYmxlZCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERlYnVnTWVzc2FnZUNvbnRyb2xfX0lJSUlfM0lJWgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNvdXJjZSwgamludCB0eXBlLCBqaW50IHNldmVyaXR5LCBqaW50IGNvdW50LCBqaW50QXJyYXkgaWRzX3JlZiwgamludCBvZmZzZXQsIGpib29sZWFuIGVuYWJsZWQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTHVpbnQgKmlkc19iYXNlID0gKEdMdWludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKmlkcyA9IChHTHVpbnQgKikgMDsKKworICAgIGlmICghaWRzX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImlkcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChpZHNfcmVmKSAtIG9mZnNldDsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGNvdW50KSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAibGVuZ3RoIC0gb2Zmc2V0IDwgY291bnQgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlkc19iYXNlID0gKEdMdWludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKGlkc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIGlkcyA9IGlkc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKAorICAgICAgICAoR0xlbnVtKXNvdXJjZSwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAoR0xlbnVtKXNldmVyaXR5LAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMdWludCAqKWlkcywKKyAgICAgICAgKEdMYm9vbGVhbillbmFibGVkCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoaWRzX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoaWRzX3JlZiwgKGppbnQqKWlkc19iYXNlLAorICAgICAgICAgICAgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sICggR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRGVidWdNZXNzYWdlQ29udHJvbF9fSUlJSUxqYXZhX25pb19JbnRCdWZmZXJfMloKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzb3VyY2UsIGppbnQgdHlwZSwgamludCBzZXZlcml0eSwgamludCBjb3VudCwgam9iamVjdCBpZHNfYnVmLCBqYm9vbGVhbiBlbmFibGVkKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqaWRzID0gKEdMdWludCAqKSAwOworCisgICAgaWRzID0gKEdMdWludCAqKWdldFBvaW50ZXIoX2VudiwgaWRzX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGNvdW50KSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBjb3VudCA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKGlkcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfaWRzQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgaWRzID0gKEdMdWludCAqKSAoX2lkc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sKAorICAgICAgICAoR0xlbnVtKXNvdXJjZSwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAoR0xlbnVtKXNldmVyaXR5LAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMdWludCAqKWlkcywKKyAgICAgICAgKEdMYm9vbGVhbillbmFibGVkCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKWlkcywgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VJbnNlcnQgKCBHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0x1aW50IGlkLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmJ1ZiApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERlYnVnTWVzc2FnZUluc2VydF9fSUlJSUlMamF2YV9sYW5nX1N0cmluZ18yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc291cmNlLCBqaW50IHR5cGUsIGppbnQgaWQsIGppbnQgc2V2ZXJpdHksIGppbnQgbGVuZ3RoLCBqc3RyaW5nIGJ1ZikgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqIF9uYXRpdmVidWYgPSAwOworCisgICAgaWYgKCFidWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJidWYgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX25hdGl2ZWJ1ZiA9IF9lbnYtPkdldFN0cmluZ1VURkNoYXJzKGJ1ZiwgMCk7CisKKyAgICBnbERlYnVnTWVzc2FnZUluc2VydCgKKyAgICAgICAgKEdMZW51bSlzb3VyY2UsCisgICAgICAgIChHTGVudW0pdHlwZSwKKyAgICAgICAgKEdMdWludClpZCwKKyAgICAgICAgKEdMZW51bSlzZXZlcml0eSwKKyAgICAgICAgKEdMc2l6ZWkpbGVuZ3RoLAorICAgICAgICAoR0xjaGFyICopX25hdGl2ZWJ1ZgorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9uYXRpdmVidWYpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGJ1ZiwgX25hdGl2ZWJ1Zik7CisgICAgfQorCisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayAoIEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0gKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayhKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpvYmplY3QgY2FsbGJhY2spIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKK30KKy8qIEdMdWludCBnbEdldERlYnVnTWVzc2FnZUxvZyAoIEdMdWludCBjb3VudCwgR0xzaXplaSBidWZTaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyApICovCitzdGF0aWMgamludAorYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSUlfM0lJXzNJSV8zSUlfM0lJXzNJSV8zQkkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBjb3VudCwgamludCBidWZTaXplLCBqaW50QXJyYXkgc291cmNlc19yZWYsIGppbnQgc291cmNlc09mZnNldCwgamludEFycmF5IHR5cGVzX3JlZiwgamludCB0eXBlc09mZnNldCwgamludEFycmF5IGlkc19yZWYsIGppbnQgaWRzT2Zmc2V0LCBqaW50QXJyYXkgc2V2ZXJpdGllc19yZWYsIGppbnQgc2V2ZXJpdGllc09mZnNldCwgamludEFycmF5IGxlbmd0aHNfcmVmLCBqaW50IGxlbmd0aHNPZmZzZXQsIGpieXRlQXJyYXkgbWVzc2FnZUxvZ19yZWYsIGppbnQgbWVzc2FnZUxvZ09mZnNldCkgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiAwOworfQorCisvKiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKSAqLworc3RhdGljIHVpbnQKK2FuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fQnl0ZUJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgY291bnQsIGpvYmplY3Qgc291cmNlc19yZWYsIGpvYmplY3QgdHlwZXNfcmVmLCBqb2JqZWN0IGlkc19yZWYsIGpvYmplY3Qgc2V2ZXJpdGllc19yZWYsIGpvYmplY3QgbGVuZ3Roc19yZWYsIGpvYmplY3QgbWVzc2FnZUxvZ19yZWYpIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogR0x1aW50IGdsR2V0RGVidWdNZXNzYWdlTG9nICggR0x1aW50IGNvdW50LCBHTHNpemVpIGJ1ZlNpemUsIEdMZW51bSAqc291cmNlcywgR0xlbnVtICp0eXBlcywgR0x1aW50ICppZHMsIEdMZW51bSAqc2V2ZXJpdGllcywgR0xzaXplaSAqbGVuZ3RocywgR0xjaGFyICptZXNzYWdlTG9nICkgKi8KK3N0YXRpYyBqb2JqZWN0QXJyYXkKK2FuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lfM0lJXzNJSV8zSUlfM0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgY291bnQsIGppbnRBcnJheSBzb3VyY2VzX3JlZiwgamludCBzb3VyY2VzT2Zmc2V0LCBqaW50QXJyYXkgdHlwZXNfcmVmLCBqaW50IHR5cGVzT2Zmc2V0LCBqaW50QXJyYXkgaWRzX3JlZiwgamludCBpZHNPZmZzZXQsIGppbnRBcnJheSBzZXZlcml0aWVzX3JlZiwgamludCBzZXZlcml0aWVzT2Zmc2V0KSB7CisgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsICJub3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdMdWludCBnbEdldERlYnVnTWVzc2FnZUxvZyAoIEdMdWludCBjb3VudCwgR0xzaXplaSBidWZTaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyApICovCitzdGF0aWMgam9iamVjdEFycmF5CithbmRyb2lkX2dsR2V0RGVidWdNZXNzYWdlTG9nX19JTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgY291bnQsIGpvYmplY3Qgc291cmNlc19yZWYsIGpvYmplY3QgdHlwZXNfcmVmLCBqb2JqZWN0IGlkc19yZWYsIGpvYmplY3Qgc2V2ZXJpdGllc19yZWYpIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICByZXR1cm4gMDsKK30KKy8qIHZvaWQgZ2xQdXNoRGVidWdHcm91cCAoIEdMZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFB1c2hEZWJ1Z0dyb3VwX19JSUlMamF2YV9sYW5nX1N0cmluZ18yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc291cmNlLCBqaW50IGlkLCBqaW50IGxlbmd0aCwganN0cmluZyBtZXNzYWdlKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciogX25hdGl2ZW1lc3NhZ2UgPSAwOworICAgIGpzaXplIF9zdHJpbmdsZW4gPSAwOworCisgICAgaWYgKCFtZXNzYWdlKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAibWVzc2FnZSA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfbmF0aXZlbWVzc2FnZSA9IF9lbnYtPkdldFN0cmluZ1VURkNoYXJzKG1lc3NhZ2UsIDApOworICAgIF9zdHJpbmdsZW4gPSBfZW52LT5HZXRTdHJpbmdVVEZMZW5ndGgobWVzc2FnZSk7CisgICAgaWYgKGxlbmd0aCA+IF9zdHJpbmdsZW4pIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggb2YgbWVzc2FnZSBpcyBzaG9ydGVyIHRoYW4gbGVuZ3RoIGFyZ3VtZW50IjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKworICAgIGdsUHVzaERlYnVnR3JvdXAoCisgICAgICAgIChHTGVudW0pc291cmNlLAorICAgICAgICAoR0x1aW50KWlkLAorICAgICAgICAoR0xzaXplaSlsZW5ndGgsCisgICAgICAgIChHTGNoYXIgKilfbmF0aXZlbWVzc2FnZQorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9uYXRpdmVtZXNzYWdlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhtZXNzYWdlLCBfbmF0aXZlbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xQb3BEZWJ1Z0dyb3VwICggdm9pZCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFBvcERlYnVnR3JvdXBfXworICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzKSB7CisgICAgZ2xQb3BEZWJ1Z0dyb3VwKCk7Cit9CisKKy8qIHZvaWQgZ2xPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xPYmplY3RMYWJlbF9fSUlJTGphdmFfbGFuZ19TdHJpbmdfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGlkZW50aWZpZXIsIGppbnQgbmFtZSwgamludCBsZW5ndGgsIGpzdHJpbmcgbGFiZWwpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyKiBfbmF0aXZlbGFiZWwgPSAwOworICAgIGpzaXplIF9zdHJpbmdsZW4gPSAwOworCisgICAgaWYgKGxhYmVsKSB7CisgICAgICAgIF9uYXRpdmVsYWJlbCA9IF9lbnYtPkdldFN0cmluZ1VURkNoYXJzKGxhYmVsLCAwKTsKKyAgICAgICAgX3N0cmluZ2xlbiA9IF9lbnYtPkdldFN0cmluZ1VURkxlbmd0aChsYWJlbCk7CisgICAgICAgIGlmIChsZW5ndGggPiBfc3RyaW5nbGVuKSB7CisgICAgICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9BcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iOworICAgICAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAibGVuZ3RoIG9mIGxhYmVsIGlzIHNob3J0ZXIgdGhhbiBsZW5ndGggYXJndW1lbnQiOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgfQorCisgICAgZ2xPYmplY3RMYWJlbCgKKyAgICAgICAgKEdMZW51bSlpZGVudGlmaWVyLAorICAgICAgICAoR0x1aW50KW5hbWUsCisgICAgICAgIChHTHNpemVpKWxlbmd0aCwKKyAgICAgICAgKEdMY2hhciAqKV9uYXRpdmVsYWJlbAorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9uYXRpdmVsYWJlbCkgeworICAgICAgICBfZW52LT5SZWxlYXNlU3RyaW5nVVRGQ2hhcnMobGFiZWwsIF9uYXRpdmVsYWJlbCk7CisgICAgfQorCisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKSAqLworc3RhdGljIGpzdHJpbmcKK2FuZHJvaWRfZ2xHZXRPYmplY3RMYWJlbChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgaWRlbnRpZmllciwgamludCBuYW1lKSB7CisgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgImphdmEvbGFuZy9VbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiIsICJub3QgeWV0IGltcGxlbWVudGVkIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIHZvaWQgZ2xPYmplY3RQdHJMYWJlbCAoIGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xPYmplY3RQdHJMYWJlbChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpsb25nIHB0ciwganN0cmluZyBsYWJlbCkgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworfQorCisvKiB2b2lkIGdsR2V0T2JqZWN0UHRyTGFiZWwgKCBjb25zdCB2b2lkICpwdHIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVsICkgKi8KK3N0YXRpYyBqc3RyaW5nCithbmRyb2lkX2dsR2V0T2JqZWN0UHRyTGFiZWwoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqbG9uZyBwdHIpIHsKKyAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCAiamF2YS9sYW5nL1Vuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwgIm5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogdm9pZCBnbEdldFBvaW50ZXJ2ICggR0xlbnVtIHBuYW1lLCB2b2lkICoqcGFyYW1zICkgKi8KK3N0YXRpYyBqbG9uZworYW5kcm9pZF9nbEdldFBvaW50ZXJ2KEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwbmFtZSkgeworICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsICJqYXZhL2xhbmcvVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLCAibm90IHlldCBpbXBsZW1lbnRlZCIpOworICAgIHJldHVybiBOVUxMOworfQorCisvKiB2b2lkIGdsRW5hYmxlaSAoIEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEVuYWJsZWlfX0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGluZGV4KSB7CisgICAgZ2xFbmFibGVpKAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMdWludClpbmRleAorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xEaXNhYmxlaSAoIEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERpc2FibGVpX19JSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBpbmRleCkgeworICAgIGdsRGlzYWJsZWkoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0x1aW50KWluZGV4CisgICAgKTsKK30KKworLyogdm9pZCBnbEJsZW5kRXF1YXRpb25pICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGUgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xCbGVuZEVxdWF0aW9uaV9fSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBidWYsIGppbnQgbW9kZSkgeworICAgIGdsQmxlbmRFcXVhdGlvbmkoCisgICAgICAgIChHTHVpbnQpYnVmLAorICAgICAgICAoR0xlbnVtKW1vZGUKKyAgICApOworfQorCisvKiB2b2lkIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlaSAoIEdMdWludCBidWYsIEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsQmxlbmRFcXVhdGlvblNlcGFyYXRlaV9fSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgYnVmLCBqaW50IG1vZGVSR0IsIGppbnQgbW9kZUFscGhhKSB7CisgICAgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpKAorICAgICAgICAoR0x1aW50KWJ1ZiwKKyAgICAgICAgKEdMZW51bSltb2RlUkdCLAorICAgICAgICAoR0xlbnVtKW1vZGVBbHBoYQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xCbGVuZEZ1bmNpICggR0x1aW50IGJ1ZiwgR0xlbnVtIHNyYywgR0xlbnVtIGRzdCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEJsZW5kRnVuY2lfX0lJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGJ1ZiwgamludCBzcmMsIGppbnQgZHN0KSB7CisgICAgZ2xCbGVuZEZ1bmNpKAorICAgICAgICAoR0x1aW50KWJ1ZiwKKyAgICAgICAgKEdMZW51bSlzcmMsCisgICAgICAgIChHTGVudW0pZHN0CisgICAgKTsKK30KKworLyogdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaSAoIEdMdWludCBidWYsIEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsQmxlbmRGdW5jU2VwYXJhdGVpX19JSUlJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGJ1ZiwgamludCBzcmNSR0IsIGppbnQgZHN0UkdCLCBqaW50IHNyY0FscGhhLCBqaW50IGRzdEFscGhhKSB7CisgICAgZ2xCbGVuZEZ1bmNTZXBhcmF0ZWkoCisgICAgICAgIChHTHVpbnQpYnVmLAorICAgICAgICAoR0xlbnVtKXNyY1JHQiwKKyAgICAgICAgKEdMZW51bSlkc3RSR0IsCisgICAgICAgIChHTGVudW0pc3JjQWxwaGEsCisgICAgICAgIChHTGVudW0pZHN0QWxwaGEKKyAgICApOworfQorCisvKiB2b2lkIGdsQ29sb3JNYXNraSAoIEdMdWludCBpbmRleCwgR0xib29sZWFuIHIsIEdMYm9vbGVhbiBnLCBHTGJvb2xlYW4gYiwgR0xib29sZWFuIGEgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xDb2xvck1hc2tpX19JWlpaWgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IGluZGV4LCBqYm9vbGVhbiByLCBqYm9vbGVhbiBnLCBqYm9vbGVhbiBiLCBqYm9vbGVhbiBhKSB7CisgICAgZ2xDb2xvck1hc2tpKAorICAgICAgICAoR0x1aW50KWluZGV4LAorICAgICAgICAoR0xib29sZWFuKXIsCisgICAgICAgIChHTGJvb2xlYW4pZywKKyAgICAgICAgKEdMYm9vbGVhbiliLAorICAgICAgICAoR0xib29sZWFuKWEKKyAgICApOworfQorCisvKiBHTGJvb2xlYW4gZ2xJc0VuYWJsZWRpICggR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4ICkgKi8KK3N0YXRpYyBqYm9vbGVhbgorYW5kcm9pZF9nbElzRW5hYmxlZGlfX0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGluZGV4KSB7CisgICAgR0xib29sZWFuIF9yZXR1cm5WYWx1ZTsKKyAgICBfcmV0dXJuVmFsdWUgPSBnbElzRW5hYmxlZGkoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0x1aW50KWluZGV4CisgICAgKTsKKyAgICByZXR1cm4gKGpib29sZWFuKV9yZXR1cm5WYWx1ZTsKK30KKworLyogdm9pZCBnbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMaW50IGJhc2V2ZXJ0ZXggKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4X19JSUlMamF2YV9uaW9fQnVmZmVyXzJJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgbW9kZSwgamludCBjb3VudCwgamludCB0eXBlLCBqb2JqZWN0IGluZGljZXNfYnVmLCBqaW50IGJhc2V2ZXJ0ZXgpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqYXJyYXkgX2FycmF5ID0gKGphcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgdm9pZCAqaW5kaWNlcyA9ICh2b2lkICopIDA7CisKKyAgICBpbmRpY2VzID0gKHZvaWQgKilnZXRQb2ludGVyKF9lbnYsIGluZGljZXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgY291bnQtYmFzZXZlcnRleCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInJlbWFpbmluZygpIDwgY291bnQtYmFzZXZlcnRleCA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKGluZGljZXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX2luZGljZXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBpbmRpY2VzID0gKHZvaWQgKikgKF9pbmRpY2VzQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXgoCisgICAgICAgIChHTGVudW0pbW9kZSwKKyAgICAgICAgKEdMc2l6ZWkpY291bnQsCisgICAgICAgIChHTGVudW0pdHlwZSwKKyAgICAgICAgKHZvaWQgKilpbmRpY2VzLAorICAgICAgICAoR0xpbnQpYmFzZXZlcnRleAorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICByZWxlYXNlUG9pbnRlcihfZW52LCBfYXJyYXksIGluZGljZXMsIEpOSV9GQUxTRSk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsRHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMdWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMaW50IGJhc2V2ZXJ0ZXggKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXhfX0lJSUlJTGphdmFfbmlvX0J1ZmZlcl8ySQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IG1vZGUsIGppbnQgc3RhcnQsIGppbnQgZW5kLCBqaW50IGNvdW50LCBqaW50IHR5cGUsIGpvYmplY3QgaW5kaWNlc19idWYsIGppbnQgYmFzZXZlcnRleCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGphcnJheSBfYXJyYXkgPSAoamFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICB2b2lkICppbmRpY2VzID0gKHZvaWQgKikgMDsKKworICAgIGluZGljZXMgPSAodm9pZCAqKWdldFBvaW50ZXIoX2VudiwgaW5kaWNlc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKF9yZW1haW5pbmcgPCBjb3VudC1iYXNldmVydGV4KSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBjb3VudC1iYXNldmVydGV4IDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAoaW5kaWNlcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfaW5kaWNlc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldFByaW1pdGl2ZUFycmF5Q3JpdGljYWwoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIGluZGljZXMgPSAodm9pZCAqKSAoX2luZGljZXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsRHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4KAorICAgICAgICAoR0xlbnVtKW1vZGUsCisgICAgICAgIChHTHVpbnQpc3RhcnQsCisgICAgICAgIChHTHVpbnQpZW5kLAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAodm9pZCAqKWluZGljZXMsCisgICAgICAgIChHTGludCliYXNldmVydGV4CisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIHJlbGVhc2VQb2ludGVyKF9lbnYsIF9hcnJheSwgaW5kaWNlcywgSk5JX0ZBTFNFKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQsIEdMaW50IGJhc2V2ZXJ0ZXggKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4X19JSUlMamF2YV9uaW9fQnVmZmVyXzJJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IG1vZGUsIGppbnQgY291bnQsIGppbnQgdHlwZSwgam9iamVjdCBpbmRpY2VzX2J1ZiwgamludCBpbnN0YW5jZUNvdW50LCBqaW50IGJhc2V2ZXJ0ZXgpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqYXJyYXkgX2FycmF5ID0gKGphcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgdm9pZCAqaW5kaWNlcyA9ICh2b2lkICopIDA7CisKKyAgICBpbmRpY2VzID0gKHZvaWQgKilnZXRQb2ludGVyKF9lbnYsIGluZGljZXNfYnVmLCAmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgY291bnQtYmFzZXZlcnRleCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0FycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInJlbWFpbmluZygpIDwgY291bnQtYmFzZXZlcnRleCA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKGluZGljZXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX2luZGljZXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBpbmRpY2VzID0gKHZvaWQgKikgKF9pbmRpY2VzQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoCisgICAgICAgIChHTGVudW0pbW9kZSwKKyAgICAgICAgKEdMc2l6ZWkpY291bnQsCisgICAgICAgIChHTGVudW0pdHlwZSwKKyAgICAgICAgKHZvaWQgKilpbmRpY2VzLAorICAgICAgICAoR0xzaXplaSlpbnN0YW5jZUNvdW50LAorICAgICAgICAoR0xpbnQpIGJhc2V2ZXJ0ZXgKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgcmVsZWFzZVBvaW50ZXIoX2VudiwgX2FycmF5LCBpbmRpY2VzLCBKTklfRkFMU0UpOworICAgIH0KK30KKworLyogdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwgR0xpbnQgYmFzZXZlcnRleCApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXhfX0lJSUlJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IG1vZGUsIGppbnQgY291bnQsIGppbnQgdHlwZSwgamludCBpbmRpY2VzT2Zmc2V0LCBqaW50IGluc3RhbmNlQ291bnQsIGppbnQgYmFzZXZlcnRleCkgeworICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleCgKKyAgICAgICAgKEdMZW51bSltb2RlLAorICAgICAgICAoR0xzaXplaSljb3VudCwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAodm9pZCAqKXN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaW5kaWNlc09mZnNldCksCisgICAgICAgIChHTHNpemVpKWluc3RhbmNlQ291bnQsCisgICAgICAgIChHTGludCliYXNldmVydGV4CisgICAgKTsKK30KKy8qIHZvaWQgZ2xGcmFtZWJ1ZmZlclRleHR1cmUgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsRnJhbWVidWZmZXJUZXh0dXJlX19JSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGF0dGFjaG1lbnQsIGppbnQgdGV4dHVyZSwgamludCBsZXZlbCkgeworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlKAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlhdHRhY2htZW50LAorICAgICAgICAoR0x1aW50KXRleHR1cmUsCisgICAgICAgIChHTGludClsZXZlbAorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCAoIEdMZmxvYXQgbWluWCwgR0xmbG9hdCBtaW5ZLCBHTGZsb2F0IG1pblosIEdMZmxvYXQgbWluVywgR0xmbG9hdCBtYXhYLCBHTGZsb2F0IG1heFksIEdMZmxvYXQgbWF4WiwgR0xmbG9hdCBtYXhXICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsUHJpbWl0aXZlQm91bmRpbmdCb3hfX0ZGRkZGRkZGCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpmbG9hdCBtaW5YLCBqZmxvYXQgbWluWSwgamZsb2F0IG1pblosIGpmbG9hdCBtaW5XLCBqZmxvYXQgbWF4WCwgamZsb2F0IG1heFksIGpmbG9hdCBtYXhaLCBqZmxvYXQgbWF4VykgeworICAgIGdsUHJpbWl0aXZlQm91bmRpbmdCb3goCisgICAgICAgIChHTGZsb2F0KW1pblgsCisgICAgICAgIChHTGZsb2F0KW1pblksCisgICAgICAgIChHTGZsb2F0KW1pblosCisgICAgICAgIChHTGZsb2F0KW1pblcsCisgICAgICAgIChHTGZsb2F0KW1heFgsCisgICAgICAgIChHTGZsb2F0KW1heFksCisgICAgICAgIChHTGZsb2F0KW1heFosCisgICAgICAgIChHTGZsb2F0KW1heFcKKyAgICApOworfQorCisvKiBHTGVudW0gZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzICggdm9pZCApICovCitzdGF0aWMgamludAorYW5kcm9pZF9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNfXworICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzKSB7CisgICAgR0xlbnVtIF9yZXR1cm5WYWx1ZTsKKyAgICBfcmV0dXJuVmFsdWUgPSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMoKTsKKyAgICByZXR1cm4gKGppbnQpX3JldHVyblZhbHVlOworfQorCisvKiB2b2lkIGdsUmVhZG5QaXhlbHMgKCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFJlYWRuUGl4ZWxzX19JSUlJSUlJTGphdmFfbmlvX0J1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgeCwgamludCB5LCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwgamludCBmb3JtYXQsIGppbnQgdHlwZSwgamludCBidWZTaXplLCBqb2JqZWN0IGRhdGFfYnVmKSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgamFycmF5IF9hcnJheSA9IChqYXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIHZvaWQgKmRhdGEgPSAodm9pZCAqKSAwOworCisgICAgZGF0YSA9ICh2b2lkICopZ2V0UG9pbnRlcihfZW52LCBkYXRhX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGJ1ZlNpemUpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IGJ1ZlNpemUgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9kYXRhQmFzZSA9IChjaGFyICopX2Vudi0+R2V0UHJpbWl0aXZlQXJyYXlDcml0aWNhbChfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgZGF0YSA9ICh2b2lkICopIChfZGF0YUJhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xSZWFkblBpeGVscygKKyAgICAgICAgKEdMaW50KXgsCisgICAgICAgIChHTGludCl5LAorICAgICAgICAoR0xzaXplaSl3aWR0aCwKKyAgICAgICAgKEdMc2l6ZWkpaGVpZ2h0LAorICAgICAgICAoR0xlbnVtKWZvcm1hdCwKKyAgICAgICAgKEdMZW51bSl0eXBlLAorICAgICAgICAoR0xzaXplaSlidWZTaXplLAorICAgICAgICAodm9pZCAqKWRhdGEKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgcmVsZWFzZVBvaW50ZXIoX2VudiwgX2FycmF5LCBkYXRhLCBfZXhjZXB0aW9uID8gSk5JX0ZBTFNFIDogSk5JX1RSVUUpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldG5Vbmlmb3JtZnYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0blVuaWZvcm1mdl9fSUlJXzNGSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHByb2dyYW0sIGppbnQgbG9jYXRpb24sIGppbnQgYnVmU2l6ZSwgamZsb2F0QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTGZsb2F0ICpwYXJhbXNfYmFzZSA9IChHTGZsb2F0ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMZmxvYXQgKnBhcmFtcyA9IChHTGZsb2F0ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgaWYgKF9yZW1haW5pbmcgPCBidWZTaXplKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAibGVuZ3RoIC0gb2Zmc2V0IDwgYnVmU2l6ZSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcGFyYW1zX2Jhc2UgPSAoR0xmbG9hdCAqKQorICAgICAgICBfZW52LT5HZXRGbG9hdEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW1zID0gcGFyYW1zX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbEdldG5Vbmlmb3JtZnYoCisgICAgICAgIChHTHVpbnQpcHJvZ3JhbSwKKyAgICAgICAgKEdMaW50KWxvY2F0aW9uLAorICAgICAgICAoR0xzaXplaSlidWZTaXplLAorICAgICAgICAoR0xmbG9hdCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGpmbG9hdCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBfZXhjZXB0aW9uID8gSk5JX0FCT1JUOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldG5Vbmlmb3JtZnZfX0lJSUxqYXZhX25pb19GbG9hdEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcHJvZ3JhbSwgamludCBsb2NhdGlvbiwgamludCBidWZTaXplLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqZmxvYXRBcnJheSBfYXJyYXkgPSAoamZsb2F0QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMZmxvYXQgKnBhcmFtcyA9IChHTGZsb2F0ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0xmbG9hdCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGJ1ZlNpemUpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJyZW1haW5pbmcoKSA8IGJ1ZlNpemUgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldEZsb2F0QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMZmxvYXQgKikgKF9wYXJhbXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsR2V0blVuaWZvcm1mdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTGZsb2F0ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoX2FycmF5LCAoamZsb2F0KilwYXJhbXMsIF9leGNlcHRpb24gPyBKTklfQUJPUlQgOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRuVW5pZm9ybWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRuVW5pZm9ybWl2X19JSUlfM0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcHJvZ3JhbSwgamludCBsb2NhdGlvbiwgamludCBidWZTaXplLCBqaW50QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTGludCAqcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtcyA9IChHTGludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIGlmIChfcmVtYWluaW5nIDwgYnVmU2l6ZSkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gImxlbmd0aCAtIG9mZnNldCA8IGJ1ZlNpemUgPCBuZWVkZWQiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHBhcmFtc19iYXNlID0gKEdMaW50ICopCisgICAgICAgIF9lbnYtPkdldEludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW1zID0gcGFyYW1zX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbEdldG5Vbmlmb3JtaXYoCisgICAgICAgIChHTHVpbnQpcHJvZ3JhbSwKKyAgICAgICAgKEdMaW50KWxvY2F0aW9uLAorICAgICAgICAoR0xzaXplaSlidWZTaXplLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBfZXhjZXB0aW9uID8gSk5JX0FCT1JUOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRuVW5pZm9ybWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRuVW5pZm9ybWl2X19JSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwcm9ncmFtLCBqaW50IGxvY2F0aW9uLCBqaW50IGJ1ZlNpemUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0xpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKF9yZW1haW5pbmcgPCBidWZTaXplKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicmVtYWluaW5nKCkgPCBidWZTaXplIDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0xpbnQgKikgKF9wYXJhbXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsR2V0blVuaWZvcm1pdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTGludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIF9leGNlcHRpb24gPyBKTklfQUJPUlQgOiAwKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdiAoIEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTHVpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldG5Vbmlmb3JtdWl2X19JSUlfM0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcHJvZ3JhbSwgamludCBsb2NhdGlvbiwgamludCBidWZTaXplLCBqaW50QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTHVpbnQgKnBhcmFtc19iYXNlID0gKEdMdWludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBpZiAoX3JlbWFpbmluZyA8IGJ1ZlNpemUpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJsZW5ndGggLSBvZmZzZXQgPCBidWZTaXplIDwgbmVlZGVkIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBwYXJhbXNfYmFzZSA9IChHTHVpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0blVuaWZvcm11aXYoCisgICAgICAgIChHTHVpbnQpcHJvZ3JhbSwKKyAgICAgICAgKEdMaW50KWxvY2F0aW9uLAorICAgICAgICAoR0xzaXplaSlidWZTaXplLAorICAgICAgICAoR0x1aW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0blVuaWZvcm11aXYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRuVW5pZm9ybXVpdl9fSUlJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgcHJvZ3JhbSwgamludCBsb2NhdGlvbiwgamludCBidWZTaXplLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0x1aW50ICpwYXJhbXMgPSAoR0x1aW50ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0x1aW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChfcmVtYWluaW5nIDwgYnVmU2l6ZSkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInJlbWFpbmluZygpIDwgYnVmU2l6ZSA8IG5lZWRlZCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMdWludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRuVW5pZm9ybXVpdigKKyAgICAgICAgKEdMdWludClwcm9ncmFtLAorICAgICAgICAoR0xpbnQpbG9jYXRpb24sCisgICAgICAgIChHTHNpemVpKWJ1ZlNpemUsCisgICAgICAgIChHTHVpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW1zLCBfZXhjZXB0aW9uID8gSk5JX0FCT1JUIDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsTWluU2FtcGxlU2hhZGluZyAoIEdMZmxvYXQgdmFsdWUgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xNaW5TYW1wbGVTaGFkaW5nX19GCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGpmbG9hdCB2YWx1ZSkgeworICAgIGdsTWluU2FtcGxlU2hhZGluZygKKyAgICAgICAgKEdMZmxvYXQpdmFsdWUKKyAgICApOworfQorCisvKiB2b2lkIGdsUGF0Y2hQYXJhbWV0ZXJpICggR0xlbnVtIHBuYW1lLCBHTGludCB2YWx1ZSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFBhdGNoUGFyYW1ldGVyaV9fSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBwbmFtZSwgamludCB2YWx1ZSkgeworICAgIGdsUGF0Y2hQYXJhbWV0ZXJpKAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQpdmFsdWUKKyAgICApOworfQorCisvKiB2b2lkIGdsVGV4UGFyYW1ldGVySWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4UGFyYW1ldGVySWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMaW50ICpwYXJhbXNfYmFzZSA9IChHTGludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsVGV4UGFyYW1ldGVySWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgSk5JX0FCT1JUKTsKKyAgICB9CisgICAgaWYgKF9leGNlcHRpb24pIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oX2VudiwgX2V4Y2VwdGlvblR5cGUsIF9leGNlcHRpb25NZXNzYWdlKTsKKyAgICB9Cit9CisKKy8qIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtcyA9IChHTGludCAqKSAwOworCisgICAgcGFyYW1zID0gKEdMaW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtcyA9IChHTGludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xUZXhQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbXMKKyAgICApOworICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW1zLCBKTklfQUJPUlQpOworICAgIH0KK30KKworLyogdm9pZCBnbFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4UGFyYW1ldGVySXVpdl9fSUlfM0lJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IHBuYW1lLCBqaW50QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTHVpbnQgKnBhcmFtc19iYXNlID0gKEdMdWludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBwYXJhbXNfYmFzZSA9IChHTHVpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsVGV4UGFyYW1ldGVySXVpdigKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTHVpbnQgKilwYXJhbXMKKyAgICApOworCitleGl0OgorICAgIGlmIChwYXJhbXNfYmFzZSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamludCopcGFyYW1zX2Jhc2UsCisgICAgICAgICAgICBKTklfQUJPUlQpOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4UGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTHVpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMdWludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIEpOSV9BQk9SVCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0VGV4UGFyYW1ldGVySWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMaW50ICpwYXJhbXNfYmFzZSA9IChHTGludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBpZiAoIXBhcmFtc19yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbXMgPT0gbnVsbCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJvZmZzZXQgPCAwIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBfcmVtYWluaW5nID0gX2Vudi0+R2V0QXJyYXlMZW5ndGgocGFyYW1zX3JlZikgLSBvZmZzZXQ7CisgICAgcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0VGV4UGFyYW1ldGVySWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0VGV4UGFyYW1ldGVySWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHRhcmdldCwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbXNfYnVmKSB7CisgICAgamludEFycmF5IF9hcnJheSA9IChqaW50QXJyYXkpIDA7CisgICAgamludCBfYnVmZmVyT2Zmc2V0ID0gKGppbnQpIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbXMgPSAoR0xpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTGludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1zX2J1ZiwgKGphcnJheSopJl9hcnJheSwgJl9yZW1haW5pbmcsICZfYnVmZmVyT2Zmc2V0KTsKKyAgICBpZiAocGFyYW1zID09IE5VTEwpIHsKKyAgICAgICAgY2hhciAqIF9wYXJhbXNCYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbXMgPSAoR0xpbnQgKikgKF9wYXJhbXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsR2V0VGV4UGFyYW1ldGVySWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgMCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbXNfcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMdWludCAqcGFyYW1zX2Jhc2UgPSAoR0x1aW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMdWludCAqcGFyYW1zID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtc19iYXNlID0gKEdMdWludCAqKQorICAgICAgICBfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtcyA9IHBhcmFtc19iYXNlICsgb2Zmc2V0OworCisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqaW50KilwYXJhbXNfYmFzZSwKKyAgICAgICAgICAgIF9leGNlcHRpb24gPyBKTklfQUJPUlQ6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsR2V0VGV4UGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgcG5hbWUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIHBhcmFtcyA9IChHTHVpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMdWludCAqKSAoX3BhcmFtc0Jhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIDApOworICAgIH0KK30KKworLyogdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW0gKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xTYW1wbGVyUGFyYW1ldGVySWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqaW50QXJyYXkgcGFyYW1fcmVmLCBqaW50IG9mZnNldCkgeworICAgIGppbnQgX2V4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25UeXBlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvbk1lc3NhZ2UgPSBOVUxMOworICAgIEdMaW50ICpwYXJhbV9iYXNlID0gKEdMaW50ICopIDA7CisgICAgamludCBfcmVtYWluaW5nOworICAgIEdMaW50ICpwYXJhbSA9IChHTGludCAqKSAwOworCisgICAgaWYgKCFwYXJhbV9yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbSA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbV9yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtX2Jhc2UgPSAoR0xpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbV9yZWYsIChqYm9vbGVhbiAqKTApOworICAgIHBhcmFtID0gcGFyYW1fYmFzZSArIG9mZnNldDsKKworICAgIGdsU2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0xpbnQgKilwYXJhbQorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1fcmVmLCAoamludCopcGFyYW1fYmFzZSwKKyAgICAgICAgICAgIEpOSV9BQk9SVCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsU2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbSApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc2FtcGxlciwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbV9idWYpIHsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtID0gKEdMaW50ICopIDA7CisKKyAgICBwYXJhbSA9IChHTGludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1fYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChwYXJhbSA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1CYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbSA9IChHTGludCAqKSAoX3BhcmFtQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW0KKyAgICApOworICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW0sIEpOSV9BQk9SVCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTHVpbnQgKnBhcmFtICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlckl1aXZfX0lJXzNJSQorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGppbnRBcnJheSBwYXJhbV9yZWYsIGppbnQgb2Zmc2V0KSB7CisgICAgamludCBfZXhjZXB0aW9uID0gMDsKKyAgICBjb25zdCBjaGFyICogX2V4Y2VwdGlvblR5cGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uTWVzc2FnZSA9IE5VTEw7CisgICAgR0x1aW50ICpwYXJhbV9iYXNlID0gKEdMdWludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtID0gKEdMdWludCAqKSAwOworCisgICAgaWYgKCFwYXJhbV9yZWYpIHsKKyAgICAgICAgX2V4Y2VwdGlvbiA9IDE7CisgICAgICAgIF9leGNlcHRpb25UeXBlID0gImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iOworICAgICAgICBfZXhjZXB0aW9uTWVzc2FnZSA9ICJwYXJhbSA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbV9yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtX2Jhc2UgPSAoR0x1aW50ICopCisgICAgICAgIF9lbnYtPkdldEludEFycmF5RWxlbWVudHMocGFyYW1fcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbSA9IHBhcmFtX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICAoR0x1aW50KXNhbXBsZXIsCisgICAgICAgIChHTGVudW0pcG5hbWUsCisgICAgICAgIChHTHVpbnQgKilwYXJhbQorICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1fcmVmLCAoamludCopcGFyYW1fYmFzZSwKKyAgICAgICAgICAgIEpOSV9BQk9SVCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsU2FtcGxlclBhcmFtZXRlckl1aXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTHVpbnQgKnBhcmFtICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsU2FtcGxlclBhcmFtZXRlckl1aXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgc2FtcGxlciwgamludCBwbmFtZSwgam9iamVjdCBwYXJhbV9idWYpIHsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0x1aW50ICpwYXJhbSA9IChHTHVpbnQgKikgMDsKKworICAgIHBhcmFtID0gKEdMdWludCAqKWdldFBvaW50ZXIoX2VudiwgcGFyYW1fYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChwYXJhbSA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1CYXNlID0gKGNoYXIgKilfZW52LT5HZXRJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGpib29sZWFuICopIDApOworICAgICAgICBwYXJhbSA9IChHTHVpbnQgKikgKF9wYXJhbUJhc2UgKyBfYnVmZmVyT2Zmc2V0KTsKKyAgICB9CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdigKKyAgICAgICAgKEdMdWludClzYW1wbGVyLAorICAgICAgICAoR0xlbnVtKXBuYW1lLAorICAgICAgICAoR0x1aW50ICopcGFyYW0KKyAgICApOworICAgIGlmIChfYXJyYXkpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamludCopcGFyYW0sIEpOSV9BQk9SVCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqaW50QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTGludCAqcGFyYW1zX2Jhc2UgPSAoR0xpbnQgKikgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0xpbnQgKnBhcmFtcyA9IChHTGludCAqKSAwOworCisgICAgaWYgKCFwYXJhbXNfcmVmKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAicGFyYW1zID09IG51bGwiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIF9leGNlcHRpb24gPSAxOworICAgICAgICBfZXhjZXB0aW9uVHlwZSA9ICJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIjsKKyAgICAgICAgX2V4Y2VwdGlvbk1lc3NhZ2UgPSAib2Zmc2V0IDwgMCI7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgX3JlbWFpbmluZyA9IF9lbnYtPkdldEFycmF5TGVuZ3RoKHBhcmFtc19yZWYpIC0gb2Zmc2V0OworICAgIHBhcmFtc19iYXNlID0gKEdMaW50ICopCisgICAgICAgIF9lbnYtPkdldEludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGpib29sZWFuICopMCk7CisgICAgcGFyYW1zID0gcGFyYW1zX2Jhc2UgKyBvZmZzZXQ7CisKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKworZXhpdDoKKyAgICBpZiAocGFyYW1zX2Jhc2UpIHsKKyAgICAgICAgX2Vudi0+UmVsZWFzZUludEFycmF5RWxlbWVudHMocGFyYW1zX3JlZiwgKGppbnQqKXBhcmFtc19iYXNlLAorICAgICAgICAgICAgX2V4Y2VwdGlvbiA/IEpOSV9BQk9SVDogMCk7CisgICAgfQorICAgIGlmIChfZXhjZXB0aW9uKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKF9lbnYsIF9leGNlcHRpb25UeXBlLCBfZXhjZXB0aW9uTWVzc2FnZSk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMgorICAoSk5JRW52ICpfZW52LCBqb2JqZWN0IF90aGlzLCBqaW50IHNhbXBsZXIsIGppbnQgcG5hbWUsIGpvYmplY3QgcGFyYW1zX2J1ZikgeworICAgIGppbnRBcnJheSBfYXJyYXkgPSAoamludEFycmF5KSAwOworICAgIGppbnQgX2J1ZmZlck9mZnNldCA9IChqaW50KSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTGludCAqcGFyYW1zID0gKEdMaW50ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0xpbnQgKilnZXRQb2ludGVyKF9lbnYsIHBhcmFtc19idWYsIChqYXJyYXkqKSZfYXJyYXksICZfcmVtYWluaW5nLCAmX2J1ZmZlck9mZnNldCk7CisgICAgaWYgKHBhcmFtcyA9PSBOVUxMKSB7CisgICAgICAgIGNoYXIgKiBfcGFyYW1zQmFzZSA9IChjaGFyICopX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqYm9vbGVhbiAqKSAwKTsKKyAgICAgICAgcGFyYW1zID0gKEdMaW50ICopIChfcGFyYW1zQmFzZSArIF9idWZmZXJPZmZzZXQpOworICAgIH0KKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMaW50ICopcGFyYW1zCisgICAgKTsKKyAgICBpZiAoX2FycmF5KSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKF9hcnJheSwgKGppbnQqKXBhcmFtcywgMCk7CisgICAgfQorfQorCisvKiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2X19JSV8zSUkKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqaW50QXJyYXkgcGFyYW1zX3JlZiwgamludCBvZmZzZXQpIHsKKyAgICBqaW50IF9leGNlcHRpb24gPSAwOworICAgIGNvbnN0IGNoYXIgKiBfZXhjZXB0aW9uVHlwZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIF9leGNlcHRpb25NZXNzYWdlID0gTlVMTDsKKyAgICBHTHVpbnQgKnBhcmFtc19iYXNlID0gKEdMdWludCAqKSAwOworICAgIGppbnQgX3JlbWFpbmluZzsKKyAgICBHTHVpbnQgKnBhcmFtcyA9IChHTHVpbnQgKikgMDsKKworICAgIGlmICghcGFyYW1zX3JlZikgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gInBhcmFtcyA9PSBudWxsIjsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBfZXhjZXB0aW9uID0gMTsKKyAgICAgICAgX2V4Y2VwdGlvblR5cGUgPSAiamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiI7CisgICAgICAgIF9leGNlcHRpb25NZXNzYWdlID0gIm9mZnNldCA8IDAiOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIF9yZW1haW5pbmcgPSBfZW52LT5HZXRBcnJheUxlbmd0aChwYXJhbXNfcmVmKSAtIG9mZnNldDsKKyAgICBwYXJhbXNfYmFzZSA9IChHTHVpbnQgKikKKyAgICAgICAgX2Vudi0+R2V0SW50QXJyYXlFbGVtZW50cyhwYXJhbXNfcmVmLCAoamJvb2xlYW4gKikwKTsKKyAgICBwYXJhbXMgPSBwYXJhbXNfYmFzZSArIG9mZnNldDsKKworICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisKK2V4aXQ6CisgICAgaWYgKHBhcmFtc19iYXNlKSB7CisgICAgICAgIF9lbnYtPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHBhcmFtc19yZWYsIChqaW50KilwYXJhbXNfYmFzZSwKKyAgICAgICAgICAgIF9leGNlcHRpb24gPyBKTklfQUJPUlQ6IDApOworICAgIH0KKyAgICBpZiAoX2V4Y2VwdGlvbikgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihfZW52LCBfZXhjZXB0aW9uVHlwZSwgX2V4Y2VwdGlvbk1lc3NhZ2UpOworICAgIH0KK30KKworLyogdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMgKSAqLworc3RhdGljIHZvaWQKK2FuZHJvaWRfZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCBzYW1wbGVyLCBqaW50IHBuYW1lLCBqb2JqZWN0IHBhcmFtc19idWYpIHsKKyAgICBqaW50QXJyYXkgX2FycmF5ID0gKGppbnRBcnJheSkgMDsKKyAgICBqaW50IF9idWZmZXJPZmZzZXQgPSAoamludCkgMDsKKyAgICBqaW50IF9yZW1haW5pbmc7CisgICAgR0x1aW50ICpwYXJhbXMgPSAoR0x1aW50ICopIDA7CisKKyAgICBwYXJhbXMgPSAoR0x1aW50ICopZ2V0UG9pbnRlcihfZW52LCBwYXJhbXNfYnVmLCAoamFycmF5KikmX2FycmF5LCAmX3JlbWFpbmluZywgJl9idWZmZXJPZmZzZXQpOworICAgIGlmIChwYXJhbXMgPT0gTlVMTCkgeworICAgICAgICBjaGFyICogX3BhcmFtc0Jhc2UgPSAoY2hhciAqKV9lbnYtPkdldEludEFycmF5RWxlbWVudHMoX2FycmF5LCAoamJvb2xlYW4gKikgMCk7CisgICAgICAgIHBhcmFtcyA9IChHTHVpbnQgKikgKF9wYXJhbXNCYXNlICsgX2J1ZmZlck9mZnNldCk7CisgICAgfQorICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYoCisgICAgICAgIChHTHVpbnQpc2FtcGxlciwKKyAgICAgICAgKEdMZW51bSlwbmFtZSwKKyAgICAgICAgKEdMdWludCAqKXBhcmFtcworICAgICk7CisgICAgaWYgKF9hcnJheSkgeworICAgICAgICBfZW52LT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhfYXJyYXksIChqaW50KilwYXJhbXMsIDApOworICAgIH0KK30KKworLyogdm9pZCBnbFRleEJ1ZmZlciAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0x1aW50IGJ1ZmZlciApICovCitzdGF0aWMgdm9pZAorYW5kcm9pZF9nbFRleEJ1ZmZlcl9fSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGludGVybmFsZm9ybWF0LCBqaW50IGJ1ZmZlcikgeworICAgIGdsVGV4QnVmZmVyKAorICAgICAgICAoR0xlbnVtKXRhcmdldCwKKyAgICAgICAgKEdMZW51bSlpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgKEdMdWludClidWZmZXIKKyAgICApOworfQorCisvKiB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4QnVmZmVyUmFuZ2VfX0lJSUlJCisgIChKTklFbnYgKl9lbnYsIGpvYmplY3QgX3RoaXMsIGppbnQgdGFyZ2V0LCBqaW50IGludGVybmFsZm9ybWF0LCBqaW50IGJ1ZmZlciwgamludCBvZmZzZXQsIGppbnQgc2l6ZSkgeworICAgIGdsVGV4QnVmZmVyUmFuZ2UoCisgICAgICAgIChHTGVudW0pdGFyZ2V0LAorICAgICAgICAoR0xlbnVtKWludGVybmFsZm9ybWF0LAorICAgICAgICAoR0x1aW50KWJ1ZmZlciwKKyAgICAgICAgKEdMaW50cHRyKW9mZnNldCwKKyAgICAgICAgKEdMc2l6ZWlwdHIpc2l6ZQorICAgICk7Cit9CisKKy8qIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xib29sZWFuIGZpeGVkc2FtcGxlbG9jYXRpb25zICkgKi8KK3N0YXRpYyB2b2lkCithbmRyb2lkX2dsVGV4U3RvcmFnZTNETXVsdGlzYW1wbGVfX0lJSUlJSVoKKyAgKEpOSUVudiAqX2Vudiwgam9iamVjdCBfdGhpcywgamludCB0YXJnZXQsIGppbnQgc2FtcGxlcywgamludCBpbnRlcm5hbGZvcm1hdCwgamludCB3aWR0aCwgamludCBoZWlnaHQsIGppbnQgZGVwdGgsIGpib29sZWFuIGZpeGVkc2FtcGxlbG9jYXRpb25zKSB7CisgICAgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSgKKyAgICAgICAgKEdMZW51bSl0YXJnZXQsCisgICAgICAgIChHTHNpemVpKXNhbXBsZXMsCisgICAgICAgIChHTGVudW0paW50ZXJuYWxmb3JtYXQsCisgICAgICAgIChHTHNpemVpKXdpZHRoLAorICAgICAgICAoR0xzaXplaSloZWlnaHQsCisgICAgICAgIChHTHNpemVpKWRlcHRoLAorICAgICAgICAoR0xib29sZWFuKWZpeGVkc2FtcGxlbG9jYXRpb25zCisgICAgKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNsYXNzUGF0aE5hbWUgPSAiYW5kcm9pZC9vcGVuZ2wvR0xFUzMyIjsKKworc3RhdGljIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCBtZXRob2RzW10gPSB7Cit7Il9uYXRpdmVDbGFzc0luaXQiLCAiKClWIiwgKHZvaWQqKW5hdGl2ZUNsYXNzSW5pdCB9LAoreyJnbEJsZW5kQmFycmllciIsICIoKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQmxlbmRCYXJyaWVyX18gfSwKK3siZ2xDb3B5SW1hZ2VTdWJEYXRhIiwgIihJSUlJSUlJSUlJSUlJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xDb3B5SW1hZ2VTdWJEYXRhX19JSUlJSUlJSUlJSUlJSUkgfSwKK3siZ2xEZWJ1Z01lc3NhZ2VDb250cm9sIiwgIihJSUlJW0lJWilWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERlYnVnTWVzc2FnZUNvbnRyb2xfX0lJSUlfM0lJWiB9LAoreyJnbERlYnVnTWVzc2FnZUNvbnRyb2wiLCAiKElJSUlMamF2YS9uaW8vSW50QnVmZmVyO1opViIsICh2b2lkICopIGFuZHJvaWRfZ2xEZWJ1Z01lc3NhZ2VDb250cm9sX19JSUlJTGphdmFfbmlvX0ludEJ1ZmZlcl8yWiB9LAoreyJnbERlYnVnTWVzc2FnZUluc2VydCIsICIoSUlJSUlMamF2YS9sYW5nL1N0cmluZzspViIsICh2b2lkICopIGFuZHJvaWRfZ2xEZWJ1Z01lc3NhZ2VJbnNlcnRfX0lJSUlJTGphdmFfbGFuZ19TdHJpbmdfMiB9LAoreyJnbERlYnVnTWVzc2FnZUNhbGxiYWNrIiwgIihMYW5kcm9pZC9vcGVuZ2wvR0xFUzMyJERlYnVnUHJvYzspViIsICh2b2lkICopIGFuZHJvaWRfZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayB9LAoreyJnbEdldERlYnVnTWVzc2FnZUxvZyIsICIoSUlbSUlbSUlbSUlbSUlbSUlbQkkpSSIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lJXzNJSV8zSUlfM0lJXzNJSV8zSUlfM0JJIH0sCit7ImdsR2V0RGVidWdNZXNzYWdlTG9nIiwgIihJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9CeXRlQnVmZmVyOylJIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldERlYnVnTWVzc2FnZUxvZ19fSUxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19JbnRCdWZmZXJfMkxqYXZhX25pb19CeXRlQnVmZmVyXzIgfSwKK3siZ2xHZXREZWJ1Z01lc3NhZ2VMb2ciLCAiKElbSUlbSUlbSUlbSUkpW0xqYXZhL2xhbmcvU3RyaW5nOyIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lfM0lJXzNJSV8zSUlfM0lJIH0sCit7ImdsR2V0RGVidWdNZXNzYWdlTG9nIiwgIihJTGphdmEvbmlvL0ludEJ1ZmZlcjtMamF2YS9uaW8vSW50QnVmZmVyO0xqYXZhL25pby9JbnRCdWZmZXI7TGphdmEvbmlvL0ludEJ1ZmZlcjspW0xqYXZhL2xhbmcvU3RyaW5nOyIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXREZWJ1Z01lc3NhZ2VMb2dfX0lMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzJMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xQdXNoRGVidWdHcm91cCIsICIoSUlJTGphdmEvbGFuZy9TdHJpbmc7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsUHVzaERlYnVnR3JvdXBfX0lJSUxqYXZhX2xhbmdfU3RyaW5nXzIgfSwKK3siZ2xQb3BEZWJ1Z0dyb3VwIiwgIigpViIsICh2b2lkICopIGFuZHJvaWRfZ2xQb3BEZWJ1Z0dyb3VwX18gfSwKK3siZ2xPYmplY3RMYWJlbCIsICIoSUlJTGphdmEvbGFuZy9TdHJpbmc7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsT2JqZWN0TGFiZWxfX0lJSUxqYXZhX2xhbmdfU3RyaW5nXzIgfSwKK3siZ2xHZXRPYmplY3RMYWJlbCIsICIoSUkpTGphdmEvbGFuZy9TdHJpbmc7IiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldE9iamVjdExhYmVsIH0sCit7ImdsT2JqZWN0UHRyTGFiZWwiLCAiKEpMamF2YS9sYW5nL1N0cmluZzspViIsICh2b2lkICopIGFuZHJvaWRfZ2xPYmplY3RQdHJMYWJlbCB9LAoreyJnbEdldE9iamVjdFB0ckxhYmVsIiwgIihKKUxqYXZhL2xhbmcvU3RyaW5nOyIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRPYmplY3RQdHJMYWJlbCB9LAoreyJnbEdldFBvaW50ZXJ2IiwgIihJKUoiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0UG9pbnRlcnYgfSwKK3siZ2xFbmFibGVpIiwgIihJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEVuYWJsZWlfX0lJIH0sCit7ImdsRGlzYWJsZWkiLCAiKElJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRGlzYWJsZWlfX0lJIH0sCit7ImdsQmxlbmRFcXVhdGlvbmkiLCAiKElJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQmxlbmRFcXVhdGlvbmlfX0lJIH0sCit7ImdsQmxlbmRFcXVhdGlvblNlcGFyYXRlaSIsICIoSUlJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQmxlbmRFcXVhdGlvblNlcGFyYXRlaV9fSUlJIH0sCit7ImdsQmxlbmRGdW5jaSIsICIoSUlJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsQmxlbmRGdW5jaV9fSUlJIH0sCit7ImdsQmxlbmRGdW5jU2VwYXJhdGVpIiwgIihJSUlJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEJsZW5kRnVuY1NlcGFyYXRlaV9fSUlJSUkgfSwKK3siZ2xDb2xvck1hc2tpIiwgIihJWlpaWilWIiwgKHZvaWQgKikgYW5kcm9pZF9nbENvbG9yTWFza2lfX0laWlpaIH0sCit7ImdsSXNFbmFibGVkaSIsICIoSUkpWiIsICh2b2lkICopIGFuZHJvaWRfZ2xJc0VuYWJsZWRpX19JSSB9LAoreyJnbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXgiLCAiKElJSUxqYXZhL25pby9CdWZmZXI7SSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbERyYXdFbGVtZW50c0Jhc2VWZXJ0ZXhfX0lJSUxqYXZhX25pb19CdWZmZXJfMkkgfSwKK3siZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgiLCAiKElJSUlJTGphdmEvbmlvL0J1ZmZlcjtJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRHJhd1JhbmdlRWxlbWVudHNCYXNlVmVydGV4X19JSUlJSUxqYXZhX25pb19CdWZmZXJfMkkgfSwKK3siZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4IiwgIihJSUlMamF2YS9uaW8vQnVmZmVyO0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleF9fSUlJTGphdmFfbmlvX0J1ZmZlcl8ySUkgfSwKK3siZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4IiwgIihJSUlJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4X19JSUlJSUkgfSwKK3siZ2xGcmFtZWJ1ZmZlclRleHR1cmUiLCAiKElJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xGcmFtZWJ1ZmZlclRleHR1cmVfX0lJSUkgfSwKK3siZ2xQcmltaXRpdmVCb3VuZGluZ0JveCIsICIoRkZGRkZGRkYpViIsICh2b2lkICopIGFuZHJvaWRfZ2xQcmltaXRpdmVCb3VuZGluZ0JveF9fRkZGRkZGRkYgfSwKK3siZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzIiwgIigpSSIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzX18gfSwKK3siZ2xSZWFkblBpeGVscyIsICIoSUlJSUlJSUxqYXZhL25pby9CdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsUmVhZG5QaXhlbHNfX0lJSUlJSUlMamF2YV9uaW9fQnVmZmVyXzIgfSwKK3siZ2xHZXRuVW5pZm9ybWZ2IiwgIihJSUlbRkkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRuVW5pZm9ybWZ2X19JSUlfM0ZJIH0sCit7ImdsR2V0blVuaWZvcm1mdiIsICIoSUlJTGphdmEvbmlvL0Zsb2F0QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldG5Vbmlmb3JtZnZfX0lJSUxqYXZhX25pb19GbG9hdEJ1ZmZlcl8yIH0sCit7ImdsR2V0blVuaWZvcm1pdiIsICIoSUlJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0blVuaWZvcm1pdl9fSUlJXzNJSSB9LAoreyJnbEdldG5Vbmlmb3JtaXYiLCAiKElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0blVuaWZvcm1pdl9fSUlJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsR2V0blVuaWZvcm11aXYiLCAiKElJSVtJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldG5Vbmlmb3JtdWl2X19JSUlfM0lJIH0sCit7ImdsR2V0blVuaWZvcm11aXYiLCAiKElJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0blVuaWZvcm11aXZfX0lJSUxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbE1pblNhbXBsZVNoYWRpbmciLCAiKEYpViIsICh2b2lkICopIGFuZHJvaWRfZ2xNaW5TYW1wbGVTaGFkaW5nX19GIH0sCit7ImdsUGF0Y2hQYXJhbWV0ZXJpIiwgIihJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFBhdGNoUGFyYW1ldGVyaV9fSUkgfSwKK3siZ2xUZXhQYXJhbWV0ZXJJaXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsVGV4UGFyYW1ldGVySWl2X19JSV8zSUkgfSwKK3siZ2xUZXhQYXJhbWV0ZXJJaXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsVGV4UGFyYW1ldGVySXVpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhQYXJhbWV0ZXJJdWl2X19JSV8zSUkgfSwKK3siZ2xUZXhQYXJhbWV0ZXJJdWl2IiwgIihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsVGV4UGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xHZXRUZXhQYXJhbWV0ZXJJaXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0VGV4UGFyYW1ldGVySWl2X19JSV8zSUkgfSwKK3siZ2xHZXRUZXhQYXJhbWV0ZXJJaXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsR2V0VGV4UGFyYW1ldGVySXVpdiIsICIoSUlbSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2X19JSV8zSUkgfSwKK3siZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2IiwgIihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0VGV4UGFyYW1ldGVySXVpdl9fSUlMamF2YV9uaW9fSW50QnVmZmVyXzIgfSwKK3siZ2xTYW1wbGVyUGFyYW1ldGVySWl2IiwgIihJSVtJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJXzNJSSB9LAoreyJnbFNhbXBsZXJQYXJhbWV0ZXJJaXYiLCAiKElJTGphdmEvbmlvL0ludEJ1ZmZlcjspViIsICh2b2lkICopIGFuZHJvaWRfZ2xTYW1wbGVyUGFyYW1ldGVySWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2IiwgIihJSVtJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJdWl2X19JSV8zSUkgfSwKK3siZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiIsICIoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFNhbXBsZXJQYXJhbWV0ZXJJdWl2X19JSUxqYXZhX25pb19JbnRCdWZmZXJfMiB9LAoreyJnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0U2FtcGxlclBhcmFtZXRlcklpdl9fSUlfM0lJIH0sCit7ImdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiIsICIoSUlMamF2YS9uaW8vSW50QnVmZmVyOylWIiwgKHZvaWQgKikgYW5kcm9pZF9nbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsR2V0U2FtcGxlclBhcmFtZXRlckl1aXYiLCAiKElJW0lJKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0U2FtcGxlclBhcmFtZXRlckl1aXZfX0lJXzNJSSB9LAoreyJnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2IiwgIihJSUxqYXZhL25pby9JbnRCdWZmZXI7KVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsR2V0U2FtcGxlclBhcmFtZXRlckl1aXZfX0lJTGphdmFfbmlvX0ludEJ1ZmZlcl8yIH0sCit7ImdsVGV4QnVmZmVyIiwgIihJSUkpViIsICh2b2lkICopIGFuZHJvaWRfZ2xUZXhCdWZmZXJfX0lJSSB9LAoreyJnbFRleEJ1ZmZlclJhbmdlIiwgIihJSUlJSSlWIiwgKHZvaWQgKikgYW5kcm9pZF9nbFRleEJ1ZmZlclJhbmdlX19JSUlJSSB9LAoreyJnbFRleFN0b3JhZ2UzRE11bHRpc2FtcGxlIiwgIihJSUlJSUlaKVYiLCAodm9pZCAqKSBhbmRyb2lkX2dsVGV4U3RvcmFnZTNETXVsdGlzYW1wbGVfX0lJSUlJSVogfSwKK307CisKK2ludCByZWdpc3Rlcl9hbmRyb2lkX29wZW5nbF9qbmlfR0xFUzMyKEpOSUVudiAqX2VudikKK3sKKyAgICBpbnQgZXJyOworICAgIGVyciA9IGFuZHJvaWQ6OkFuZHJvaWRSdW50aW1lOjpyZWdpc3Rlck5hdGl2ZU1ldGhvZHMoX2VudiwgY2xhc3NQYXRoTmFtZSwgbWV0aG9kcywgTkVMRU0obWV0aG9kcykpOworICAgIHJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX29zX0RlYnVnLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfb3NfRGVidWcuY3BwCmluZGV4IDFlZTdlYTguLjAzYTFlNzEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfb3NfRGVidWcuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfb3NfRGVidWcuY3BwCkBAIC04NCw2ICs4NCw3IEBACiAgICAgamZpZWxkSUQgcHJpdmF0ZUNsZWFuX2ZpZWxkOwogICAgIGpmaWVsZElEIHNoYXJlZENsZWFuX2ZpZWxkOwogICAgIGpmaWVsZElEIHN3YXBwZWRPdXRfZmllbGQ7CisgICAgamZpZWxkSUQgc3dhcHBlZE91dFBzc19maWVsZDsKIH07CiAKIHN0cnVjdCBzdGF0X2ZpZWxkX25hbWVzIHsKQEAgLTk0LDIwICs5NSwyMiBAQAogICAgIGNvbnN0IGNoYXIqIHByaXZhdGVDbGVhbl9uYW1lOwogICAgIGNvbnN0IGNoYXIqIHNoYXJlZENsZWFuX25hbWU7CiAgICAgY29uc3QgY2hhciogc3dhcHBlZE91dF9uYW1lOworICAgIGNvbnN0IGNoYXIqIHN3YXBwZWRPdXRQc3NfbmFtZTsKIH07CiAKIHN0YXRpYyBzdGF0X2ZpZWxkcyBzdGF0X2ZpZWxkc1tfTlVNX0NPUkVfSEVBUF07CiAKIHN0YXRpYyBzdGF0X2ZpZWxkX25hbWVzIHN0YXRfZmllbGRfbmFtZXNbX05VTV9DT1JFX0hFQVBdID0gewogICAgIHsgIm90aGVyUHNzIiwgIm90aGVyU3dhcHBhYmxlUHNzIiwgIm90aGVyUHJpdmF0ZURpcnR5IiwgIm90aGVyU2hhcmVkRGlydHkiLAotICAgICAgICAib3RoZXJQcml2YXRlQ2xlYW4iLCAib3RoZXJTaGFyZWRDbGVhbiIsICJvdGhlclN3YXBwZWRPdXQiIH0sCisgICAgICAgICJvdGhlclByaXZhdGVDbGVhbiIsICJvdGhlclNoYXJlZENsZWFuIiwgIm90aGVyU3dhcHBlZE91dCIsICJvdGhlclN3YXBwZWRPdXRQc3MiIH0sCiAgICAgeyAiZGFsdmlrUHNzIiwgImRhbHZpa1N3YXBwYWJsZVBzcyIsICJkYWx2aWtQcml2YXRlRGlydHkiLCAiZGFsdmlrU2hhcmVkRGlydHkiLAotICAgICAgICAiZGFsdmlrUHJpdmF0ZUNsZWFuIiwgImRhbHZpa1NoYXJlZENsZWFuIiwgImRhbHZpa1N3YXBwZWRPdXQiIH0sCisgICAgICAgICJkYWx2aWtQcml2YXRlQ2xlYW4iLCAiZGFsdmlrU2hhcmVkQ2xlYW4iLCAiZGFsdmlrU3dhcHBlZE91dCIsICJkYWx2aWtTd2FwcGVkT3V0UHNzIiB9LAogICAgIHsgIm5hdGl2ZVBzcyIsICJuYXRpdmVTd2FwcGFibGVQc3MiLCAibmF0aXZlUHJpdmF0ZURpcnR5IiwgIm5hdGl2ZVNoYXJlZERpcnR5IiwKLSAgICAgICAgIm5hdGl2ZVByaXZhdGVDbGVhbiIsICJuYXRpdmVTaGFyZWRDbGVhbiIsICJuYXRpdmVTd2FwcGVkT3V0IiB9CisgICAgICAgICJuYXRpdmVQcml2YXRlQ2xlYW4iLCAibmF0aXZlU2hhcmVkQ2xlYW4iLCAibmF0aXZlU3dhcHBlZE91dCIsICJuYXRpdmVTd2FwcGVkT3V0UHNzIiB9CiB9OwogCiBqZmllbGRJRCBvdGhlclN0YXRzX2ZpZWxkOworamZpZWxkSUQgaGFzU3dhcHBlZE91dFBzc19maWVsZDsKIAogc3RhdGljIGJvb2wgbWVtdHJhY2tMb2FkZWQ7CiAKQEAgLTExOSw2ICsxMjIsNyBAQAogICAgIGludCBwcml2YXRlQ2xlYW47CiAgICAgaW50IHNoYXJlZENsZWFuOwogICAgIGludCBzd2FwcGVkT3V0OworICAgIGludCBzd2FwcGVkT3V0UHNzOwogfTsKIAogI2RlZmluZSBCSU5ERVJfU1RBVFMgIi9wcm9jL2JpbmRlci9zdGF0cyIKQEAgLTIwNiw3ICsyMTAsNyBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRfbWFwaW5mbyhGSUxFICpmcCwgc3RhdHNfdCogc3RhdHMpCitzdGF0aWMgdm9pZCByZWFkX21hcGluZm8oRklMRSAqZnAsIHN0YXRzX3QqIHN0YXRzLCBib29sKiBmb3VuZFN3YXBQc3MpCiB7CiAgICAgY2hhciBsaW5lWzEwMjRdOwogICAgIGludCBsZW4sIG5hbWVMZW47CkBAIC0yMTYsNyArMjIwLDcgQEAKICAgICBmbG9hdCBzaGFyaW5nX3Byb3BvcnRpb24gPSAwLjA7CiAgICAgdW5zaWduZWQgc2hhcmVkX2NsZWFuID0gMCwgc2hhcmVkX2RpcnR5ID0gMDsKICAgICB1bnNpZ25lZCBwcml2YXRlX2NsZWFuID0gMCwgcHJpdmF0ZV9kaXJ0eSA9IDA7Ci0gICAgdW5zaWduZWQgc3dhcHBlZF9vdXQgPSAwOworICAgIHVuc2lnbmVkIHN3YXBwZWRfb3V0ID0gMCwgc3dhcHBlZF9vdXRfcHNzID0gMDsKICAgICBib29sIGlzX3N3YXBwYWJsZSA9IGZhbHNlOwogICAgIHVuc2lnbmVkIHRlbXA7CiAKQEAgLTIzMCw2ICsyMzQsOCBAQAogICAgIGludCBzdWJIZWFwID0gSEVBUF9VTktOT1dOOwogICAgIGludCBwcmV2SGVhcCA9IEhFQVBfVU5LTk9XTjsKIAorICAgICpmb3VuZFN3YXBQc3MgPSBmYWxzZTsKKwogICAgIGlmKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApID09IDApIHJldHVybjsKIAogICAgIHdoaWxlICghZG9uZSkgewpAQCAtMzQwLDYgKzM0Niw3IEBACiAgICAgICAgIHByaXZhdGVfY2xlYW4gPSAwOwogICAgICAgICBwcml2YXRlX2RpcnR5ID0gMDsKICAgICAgICAgc3dhcHBlZF9vdXQgPSAwOworICAgICAgICBzd2FwcGVkX291dF9wc3MgPSAwOwogCiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBpZiAoZmdldHMobGluZSwgMTAyNCwgZnApID09IDApIHsKQEAgLTM2NSw2ICszNzIsOSBAQAogICAgICAgICAgICAgICAgIC8qIHJlZmVyZW5jZWQgPSB0ZW1wOyAqLwogICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lWzBdID09ICdTJyAmJiBzc2NhbmYobGluZSwgIlN3YXA6ICVkIGtCIiwgJnRlbXApID09IDEpIHsKICAgICAgICAgICAgICAgICBzd2FwcGVkX291dCA9IHRlbXA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJ1MnICYmIHNzY2FuZihsaW5lLCAiU3dhcFBzczogJWQga0IiLCAmdGVtcCkgPT0gMSkgeworICAgICAgICAgICAgICAgICpmb3VuZFN3YXBQc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIHN3YXBwZWRfb3V0X3BzcyA9IHRlbXA7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHNzY2FuZihsaW5lLCAiJSIgU0NOeDY0ICItJSIgU0NOeDY0ICIgJSpzICUqeCAlKng6JSp4ICUqZCIsICZzdGFydCwgJmVuZCkgPT0gMikgewogICAgICAgICAgICAgICAgIC8vIGxvb2tzIGxpa2UgYSBuZXcgbWFwcGluZwogICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6ICIxMDAwMDAwMC0xMDAwMTAwMCAtLS1wIDEwMDAwMDAwIDAwOjAwIDAiCkBAIC0zOTAsNiArNDAwLDcgQEAKICAgICAgICAgICAgIHN0YXRzW3doaWNoSGVhcF0ucHJpdmF0ZUNsZWFuICs9IHByaXZhdGVfY2xlYW47CiAgICAgICAgICAgICBzdGF0c1t3aGljaEhlYXBdLnNoYXJlZENsZWFuICs9IHNoYXJlZF9jbGVhbjsKICAgICAgICAgICAgIHN0YXRzW3doaWNoSGVhcF0uc3dhcHBlZE91dCArPSBzd2FwcGVkX291dDsKKyAgICAgICAgICAgIHN0YXRzW3doaWNoSGVhcF0uc3dhcHBlZE91dFBzcyArPSBzd2FwcGVkX291dF9wc3M7CiAgICAgICAgICAgICBpZiAod2hpY2hIZWFwID09IEhFQVBfREFMVklLIHx8IHdoaWNoSGVhcCA9PSBIRUFQX0RBTFZJS19PVEhFUikgewogICAgICAgICAgICAgICAgIHN0YXRzW3N1YkhlYXBdLnBzcyArPSBwc3M7CiAgICAgICAgICAgICAgICAgc3RhdHNbc3ViSGVhcF0uc3dhcHBhYmxlUHNzICs9IHN3YXBwYWJsZV9wc3M7CkBAIC0zOTgsMTIgKzQwOSwxMyBAQAogICAgICAgICAgICAgICAgIHN0YXRzW3N1YkhlYXBdLnByaXZhdGVDbGVhbiArPSBwcml2YXRlX2NsZWFuOwogICAgICAgICAgICAgICAgIHN0YXRzW3N1YkhlYXBdLnNoYXJlZENsZWFuICs9IHNoYXJlZF9jbGVhbjsKICAgICAgICAgICAgICAgICBzdGF0c1tzdWJIZWFwXS5zd2FwcGVkT3V0ICs9IHN3YXBwZWRfb3V0OworICAgICAgICAgICAgICAgIHN0YXRzW3N1YkhlYXBdLnN3YXBwZWRPdXRQc3MgKz0gc3dhcHBlZF9vdXRfcHNzOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBsb2FkX21hcHMoaW50IHBpZCwgc3RhdHNfdCogc3RhdHMpCitzdGF0aWMgdm9pZCBsb2FkX21hcHMoaW50IHBpZCwgc3RhdHNfdCogc3RhdHMsIGJvb2wqIGZvdW5kU3dhcFBzcykKIHsKICAgICBjaGFyIHRtcFsxMjhdOwogICAgIEZJTEUgKmZwOwpAQCAtNDEyLDE3ICs0MjQsMTggQEAKICAgICBmcCA9IGZvcGVuKHRtcCwgInIiKTsKICAgICBpZiAoZnAgPT0gMCkgcmV0dXJuOwogCi0gICAgcmVhZF9tYXBpbmZvKGZwLCBzdGF0cyk7CisgICAgcmVhZF9tYXBpbmZvKGZwLCBzdGF0cywgZm91bmRTd2FwUHNzKTsKICAgICBmY2xvc2UoZnApOwogfQogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX29zX0RlYnVnX2dldERpcnR5UGFnZXNQaWQoSk5JRW52ICplbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGppbnQgcGlkLCBqb2JqZWN0IG9iamVjdCkKIHsKKyAgICBib29sIGZvdW5kU3dhcFBzczsKICAgICBzdGF0c190IHN0YXRzW19OVU1fSEVBUF07CiAgICAgbWVtc2V0KCZzdGF0cywgMCwgc2l6ZW9mKHN0YXRzKSk7CiAKLSAgICBsb2FkX21hcHMocGlkLCBzdGF0cyk7CisgICAgbG9hZF9tYXBzKHBpZCwgc3RhdHMsICZmb3VuZFN3YXBQc3MpOwogCiAgICAgc3RydWN0IGdyYXBoaWNzX21lbW9yeV9wc3MgZ3JhcGhpY3NfbWVtOwogICAgIGlmIChyZWFkX21lbXRyYWNrX21lbW9yeShwaWQsICZncmFwaGljc19tZW0pID09IDApIHsKQEAgLTQ0Miw2ICs0NTUsNyBAQAogICAgICAgICBzdGF0c1tIRUFQX1VOS05PV05dLnByaXZhdGVDbGVhbiArPSBzdGF0c1tpXS5wcml2YXRlQ2xlYW47CiAgICAgICAgIHN0YXRzW0hFQVBfVU5LTk9XTl0uc2hhcmVkQ2xlYW4gKz0gc3RhdHNbaV0uc2hhcmVkQ2xlYW47CiAgICAgICAgIHN0YXRzW0hFQVBfVU5LTk9XTl0uc3dhcHBlZE91dCArPSBzdGF0c1tpXS5zd2FwcGVkT3V0OworICAgICAgICBzdGF0c1tIRUFQX1VOS05PV05dLnN3YXBwZWRPdXRQc3MgKz0gc3RhdHNbaV0uc3dhcHBlZE91dFBzczsKICAgICB9CiAKICAgICBmb3IgKGludCBpPTA7IGk8X05VTV9DT1JFX0hFQVA7IGkrKykgewpAQCAtNDUyLDkgKzQ2NiwxMSBAQAogICAgICAgICBlbnYtPlNldEludEZpZWxkKG9iamVjdCwgc3RhdF9maWVsZHNbaV0ucHJpdmF0ZUNsZWFuX2ZpZWxkLCBzdGF0c1tpXS5wcml2YXRlQ2xlYW4pOwogICAgICAgICBlbnYtPlNldEludEZpZWxkKG9iamVjdCwgc3RhdF9maWVsZHNbaV0uc2hhcmVkQ2xlYW5fZmllbGQsIHN0YXRzW2ldLnNoYXJlZENsZWFuKTsKICAgICAgICAgZW52LT5TZXRJbnRGaWVsZChvYmplY3QsIHN0YXRfZmllbGRzW2ldLnN3YXBwZWRPdXRfZmllbGQsIHN0YXRzW2ldLnN3YXBwZWRPdXQpOworICAgICAgICBlbnYtPlNldEludEZpZWxkKG9iamVjdCwgc3RhdF9maWVsZHNbaV0uc3dhcHBlZE91dFBzc19maWVsZCwgc3RhdHNbaV0uc3dhcHBlZE91dFBzcyk7CiAgICAgfQogCiAKKyAgICBlbnYtPlNldEJvb2xlYW5GaWVsZChvYmplY3QsIGhhc1N3YXBwZWRPdXRQc3NfZmllbGQsIGZvdW5kU3dhcFBzcyk7CiAgICAgamludEFycmF5IG90aGVySW50QXJyYXkgPSAoamludEFycmF5KWVudi0+R2V0T2JqZWN0RmllbGQob2JqZWN0LCBvdGhlclN0YXRzX2ZpZWxkKTsKIAogICAgIGppbnQqIG90aGVyQXJyYXkgPSAoamludCopZW52LT5HZXRQcmltaXRpdmVBcnJheUNyaXRpY2FsKG90aGVySW50QXJyYXksIDApOwpAQCAtNDcxLDYgKzQ4Nyw3IEBACiAgICAgICAgIG90aGVyQXJyYXlbaisrXSA9IHN0YXRzW2ldLnByaXZhdGVDbGVhbjsKICAgICAgICAgb3RoZXJBcnJheVtqKytdID0gc3RhdHNbaV0uc2hhcmVkQ2xlYW47CiAgICAgICAgIG90aGVyQXJyYXlbaisrXSA9IHN0YXRzW2ldLnN3YXBwZWRPdXQ7CisgICAgICAgIG90aGVyQXJyYXlbaisrXSA9IHN0YXRzW2ldLnN3YXBwZWRPdXRQc3M7CiAgICAgfQogCiAgICAgZW52LT5SZWxlYXNlUHJpbWl0aXZlQXJyYXlDcml0aWNhbChvdGhlckludEFycmF5LCBvdGhlckFycmF5LCAwKTsKQEAgLTQ4MSwxMSArNDk4LDEyIEBACiAgICAgYW5kcm9pZF9vc19EZWJ1Z19nZXREaXJ0eVBhZ2VzUGlkKGVudiwgY2xhenosIGdldHBpZCgpLCBvYmplY3QpOwogfQogCi1zdGF0aWMgamxvbmcgYW5kcm9pZF9vc19EZWJ1Z19nZXRQc3NQaWQoSk5JRW52ICplbnYsIGpvYmplY3QgY2xhenosIGppbnQgcGlkLCBqbG9uZ0FycmF5IG91dFVzcywKLSAgICAgICAgamxvbmdBcnJheSBvdXRNZW10cmFjaykKK3N0YXRpYyBqbG9uZyBhbmRyb2lkX29zX0RlYnVnX2dldFBzc1BpZChKTklFbnYgKmVudiwgam9iamVjdCBjbGF6eiwgamludCBwaWQsCisgICAgICAgIGpsb25nQXJyYXkgb3V0VXNzU3dhcFBzcywgamxvbmdBcnJheSBvdXRNZW10cmFjaykKIHsKICAgICBjaGFyIGxpbmVbMTAyNF07CiAgICAgamxvbmcgcHNzID0gMDsKKyAgICBqbG9uZyBzd2FwUHNzID0gMDsKICAgICBqbG9uZyB1c3MgPSAwOwogICAgIGpsb25nIG1lbXRyYWNrID0gMDsKIApAQCAtNTIxLDE5ICs1MzksMzEgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB1c3MgKz0gYXRvaShjKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJ1MnICYmIHN0cm5jbXAobGluZSwgIlN3YXBQc3M6IiwgOCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGNoYXIqIGMgPSBsaW5lICsgODsKKyAgICAgICAgICAgICAgICBqbG9uZyBsU3dhcFBzczsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKmMgIT0gMCAmJiAoKmMgPCAnMCcgfHwgKmMgPiAnOScpKSB7CisgICAgICAgICAgICAgICAgICAgIGMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbFN3YXBQc3MgPSBhdG9pKGMpOworICAgICAgICAgICAgICAgIHN3YXBQc3MgKz0gbFN3YXBQc3M7CisgICAgICAgICAgICAgICAgcHNzICs9IGxTd2FwUHNzOyAvLyBBbHNvIGluIHN3YXAsIHRob3NlIHBhZ2VzIHdvdWxkIGJlIGFjY291bnRlZCBhcyBQc3Mgd2l0aG91dCBTV0FQCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBmY2xvc2UoZnApOwogICAgIH0KIAotICAgIGlmIChvdXRVc3MgIT0gTlVMTCkgewotICAgICAgICBpZiAoZW52LT5HZXRBcnJheUxlbmd0aChvdXRVc3MpID49IDEpIHsKLSAgICAgICAgICAgIGpsb25nKiBvdXRVc3NBcnJheSA9IGVudi0+R2V0TG9uZ0FycmF5RWxlbWVudHMob3V0VXNzLCAwKTsKLSAgICAgICAgICAgIGlmIChvdXRVc3NBcnJheSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgb3V0VXNzQXJyYXlbMF0gPSB1c3M7CisgICAgaWYgKG91dFVzc1N3YXBQc3MgIT0gTlVMTCkgeworICAgICAgICBpZiAoZW52LT5HZXRBcnJheUxlbmd0aChvdXRVc3NTd2FwUHNzKSA+PSAxKSB7CisgICAgICAgICAgICBqbG9uZyogb3V0VXNzU3dhcFBzc0FycmF5ID0gZW52LT5HZXRMb25nQXJyYXlFbGVtZW50cyhvdXRVc3NTd2FwUHNzLCAwKTsKKyAgICAgICAgICAgIGlmIChvdXRVc3NTd2FwUHNzQXJyYXkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG91dFVzc1N3YXBQc3NBcnJheVswXSA9IHVzczsKKyAgICAgICAgICAgICAgICBpZiAoZW52LT5HZXRBcnJheUxlbmd0aChvdXRVc3NTd2FwUHNzKSA+PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIG91dFVzc1N3YXBQc3NBcnJheVsxXSA9IHN3YXBQc3M7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZW52LT5SZWxlYXNlTG9uZ0FycmF5RWxlbWVudHMob3V0VXNzLCBvdXRVc3NBcnJheSwgMCk7CisgICAgICAgICAgICBlbnYtPlJlbGVhc2VMb25nQXJyYXlFbGVtZW50cyhvdXRVc3NTd2FwUHNzLCBvdXRVc3NTd2FwUHNzQXJyYXksIDApOwogICAgICAgICB9CiAgICAgfQogCkBAIC01OTUsNiArNjI1LDM2IEBACiAgICAgTUVNSU5GT19DT1VOVAogfTsKIAorc3RhdGljIGxvbmcgbG9uZyBnZXRfenJhbV9tZW1fdXNlZCgpCit7CisjZGVmaW5lIFpSQU1fU1lTRlMgIi9zeXMvYmxvY2svenJhbTAvIgorICAgIEZJTEUgKmYgPSBmb3BlbihaUkFNX1NZU0ZTICJtbV9zdGF0IiwgInIiKTsKKyAgICBpZiAoZikgeworICAgICAgICBsb25nIGxvbmcgbWVtX3VzZWRfdG90YWwgPSAwOworCisgICAgICAgIGludCBtYXRjaGVkID0gZnNjYW5mKGYsICIlKmQgJSpkICVsbGQgJSpkICUqZCAlKmQgJSpkIiwgJm1lbV91c2VkX3RvdGFsKTsKKyAgICAgICAgaWYgKG1hdGNoZWQgIT0gMSkKKyAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gcGFyc2UgIiBaUkFNX1NZU0ZTICJtbV9zdGF0Iik7CisKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gbWVtX3VzZWRfdG90YWw7CisgICAgfQorCisgICAgZiA9IGZvcGVuKFpSQU1fU1lTRlMgIm1lbV91c2VkX3RvdGFsIiwgInIiKTsKKyAgICBpZiAoZikgeworICAgICAgICBsb25nIGxvbmcgbWVtX3VzZWRfdG90YWwgPSAwOworCisgICAgICAgIGludCBtYXRjaGVkID0gZnNjYW5mKGYsICIlbGxkIiwgJm1lbV91c2VkX3RvdGFsKTsKKyAgICAgICAgaWYgKG1hdGNoZWQgIT0gMSkKKyAgICAgICAgICAgIEFMT0dXKCJmYWlsZWQgdG8gcGFyc2UgIiBaUkFNX1NZU0ZTICJtZW1fdXNlZF90b3RhbCIpOworCisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIG1lbV91c2VkX3RvdGFsOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBhbmRyb2lkX29zX0RlYnVnX2dldE1lbUluZm8oSk5JRW52ICplbnYsIGpvYmplY3QgY2xhenosIGpsb25nQXJyYXkgb3V0KQogewogICAgIGNoYXIgYnVmZmVyWzEwMjRdOwpAQCAtNjgwLDE1ICs3NDAsNyBAQAogICAgICAgICBpZiAoKnApIHArKzsKICAgICB9CiAKLSAgICBmZCA9IG9wZW4oIi9zeXMvYmxvY2svenJhbTAvbWVtX3VzZWRfdG90YWwiLCBPX1JET05MWSk7Ci0gICAgaWYgKGZkID49IDApIHsKLSAgICAgICAgbGVuID0gcmVhZChmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKS0xKTsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgYnVmZmVyW2xlbl0gPSAwOwotICAgICAgICAgICAgbWVtW01FTUlORk9fWlJBTV9UT1RBTF0gPSBhdG9sbChidWZmZXIpLzEwMjQ7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbWVtW01FTUlORk9fWlJBTV9UT1RBTF0gPSBnZXRfenJhbV9tZW1fdXNlZCgpIC8gMTAyNDsKICAgICAvLyBSZWNvbXB1dGUgVm1hbGxvYyBVc2VkIHNpbmNlIHRoZSB2YWx1ZSBpbiBtZW1pbmZvCiAgICAgLy8gZG9lc24ndCBhY2NvdW50IGZvciBJL08gcmVtYXBwaW5nIHdoaWNoIGRvZXNuJ3QgdXNlIFJBTS4KICAgICBtZW1bTUVNSU5GT19WTUFMTE9DX1VTRURdID0gZ2V0X2FsbG9jYXRlZF92bWFsbG9jX21lbW9yeSgpIC8gMTAyNDsKQEAgLTEwMzQsNiArMTA4Niw3IEBACiAgICAgfQogCiAgICAgb3RoZXJTdGF0c19maWVsZCA9IGVudi0+R2V0RmllbGRJRChjbGF6eiwgIm90aGVyU3RhdHMiLCAiW0kiKTsKKyAgICBoYXNTd2FwcGVkT3V0UHNzX2ZpZWxkID0gZW52LT5HZXRGaWVsZElEKGNsYXp6LCAiaGFzU3dhcHBlZE91dFBzcyIsICJaIik7CiAKICAgICBmb3IgKGludCBpPTA7IGk8X05VTV9DT1JFX0hFQVA7IGkrKykgewogICAgICAgICBzdGF0X2ZpZWxkc1tpXS5wc3NfZmllbGQgPQpAQCAtMTA1MCw2ICsxMTAzLDggQEAKICAgICAgICAgICAgICAgICBlbnYtPkdldEZpZWxkSUQoY2xhenosIHN0YXRfZmllbGRfbmFtZXNbaV0uc2hhcmVkQ2xlYW5fbmFtZSwgIkkiKTsKICAgICAgICAgc3RhdF9maWVsZHNbaV0uc3dhcHBlZE91dF9maWVsZCA9CiAgICAgICAgICAgICAgICAgZW52LT5HZXRGaWVsZElEKGNsYXp6LCBzdGF0X2ZpZWxkX25hbWVzW2ldLnN3YXBwZWRPdXRfbmFtZSwgIkkiKTsKKyAgICAgICAgc3RhdF9maWVsZHNbaV0uc3dhcHBlZE91dFBzc19maWVsZCA9CisgICAgICAgICAgICAgICAgZW52LT5HZXRGaWVsZElEKGNsYXp6LCBzdGF0X2ZpZWxkX25hbWVzW2ldLnN3YXBwZWRPdXRQc3NfbmFtZSwgIkkiKTsKICAgICB9CiAKICAgICByZXR1cm4gam5pUmVnaXN0ZXJOYXRpdmVNZXRob2RzKGVudiwgImFuZHJvaWQvb3MvRGVidWciLCBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF91dGlsX0Fzc2V0TWFuYWdlci5jcHAKaW5kZXggOTA2MDZhMzUuLjM0NzNkOWQgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Bc3NldE1hbmFnZXIuY3BwCkBAIC01NzgsNyArNTc4LDcgQEAKICAgICByZXR1cm4gYW0tPmlzVXBUb0RhdGUoKSA/IEpOSV9UUlVFIDogSk5JX0ZBTFNFOwogfQogCi1zdGF0aWMgam9iamVjdEFycmF5IGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0TG9jYWxlcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eikKK3N0YXRpYyBqb2JqZWN0QXJyYXkgZ2V0TG9jYWxlcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwgYm9vbCBpbmNsdWRlU3lzdGVtTG9jYWxlcykKIHsKICAgICBWZWN0b3I8U3RyaW5nOD4gbG9jYWxlczsKIApAQCAtNTg3LDcgKzU4Nyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFtLT5nZXRMb2NhbGVzKCZsb2NhbGVzKTsKKyAgICBhbS0+Z2V0TG9jYWxlcygmbG9jYWxlcywgaW5jbHVkZVN5c3RlbUxvY2FsZXMpOwogCiAgICAgY29uc3QgaW50IE4gPSBsb2NhbGVzLnNpemUoKTsKIApAQCAtNjA4LDYgKzYwOCwxNiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBqb2JqZWN0QXJyYXkgYW5kcm9pZF9jb250ZW50X0Fzc2V0TWFuYWdlcl9nZXRMb2NhbGVzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KQoreworICAgIHJldHVybiBnZXRMb2NhbGVzKGVudiwgY2xhenosIHRydWUgLyogaW5jbHVkZSBzeXN0ZW0gbG9jYWxlcyAqLyk7Cit9CisKK3N0YXRpYyBqb2JqZWN0QXJyYXkgYW5kcm9pZF9jb250ZW50X0Fzc2V0TWFuYWdlcl9nZXROb25TeXN0ZW1Mb2NhbGVzKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6KQoreworICAgIHJldHVybiBnZXRMb2NhbGVzKGVudiwgY2xhenosIGZhbHNlIC8qIGRvbid0IGluY2x1ZGUgc3lzdGVtIGxvY2FsZXMgKi8pOworfQorCiBzdGF0aWMgam9iamVjdCBjb25zdHJ1Y3RDb25maWd1cmF0aW9uT2JqZWN0KEpOSUVudiogZW52LCBjb25zdCBSZXNUYWJsZV9jb25maWcmIGNvbmZpZykgewogICAgIGpvYmplY3QgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QoZ0NvbmZpZ3VyYXRpb25PZmZzZXRzLmNsYXNzT2JqZWN0LAogICAgICAgICAgICAgZ0NvbmZpZ3VyYXRpb25PZmZzZXRzLmNvbnN0cnVjdG9yKTsKQEAgLTIxNTQsNiArMjE2NCw4IEBACiAgICAgLy8gUmVzb3VyY2VzLgogICAgIHsgImdldExvY2FsZXMiLCAgICAgICIoKVtMamF2YS9sYW5nL1N0cmluZzsiLAogICAgICAgICAodm9pZCopIGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0TG9jYWxlcyB9LAorICAgIHsgImdldE5vblN5c3RlbUxvY2FsZXMiLCAiKClbTGphdmEvbGFuZy9TdHJpbmc7IiwKKyAgICAgICAgKHZvaWQqKSBhbmRyb2lkX2NvbnRlbnRfQXNzZXRNYW5hZ2VyX2dldE5vblN5c3RlbUxvY2FsZXMgfSwKICAgICB7ICJnZXRTaXplQ29uZmlndXJhdGlvbnMiLCAiKClbTGFuZHJvaWQvY29udGVudC9yZXMvQ29uZmlndXJhdGlvbjsiLAogICAgICAgICAodm9pZCopIGFuZHJvaWRfY29udGVudF9Bc3NldE1hbmFnZXJfZ2V0U2l6ZUNvbmZpZ3VyYXRpb25zIH0sCiAgICAgeyAic2V0Q29uZmlndXJhdGlvbiIsICIhKElJTGphdmEvbGFuZy9TdHJpbmc7SUlJSUlJSUlJSUlJSUkpViIsCmRpZmYgLS1naXQgYS9jb3JlL2puaS9hbmRyb2lkX3V0aWxfTG9nLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCmluZGV4IDJkMjNjZGEuLjc3MTllMzEgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCisrKyBiL2NvcmUvam5pL2FuZHJvaWRfdXRpbF9Mb2cuY3BwCkBAIC0xOCw4ICsxOCwxMCBAQAogI2RlZmluZSBMT0dfTkFNRVNQQUNFICJsb2cudGFnLiIKICNkZWZpbmUgTE9HX1RBRyAiTG9nX3ByaW50bG4iCiAKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbWFjcm9zLmg+CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxsb2cvbG9nZ2VyLmg+ICAgICAgICAgICAgICAgLy8gRm9yIExPR0dFUl9FTlRSWV9NQVhfUEFZTE9BRC4KICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KICNpbmNsdWRlIDx1dGlscy9TdHJpbmc4Lmg+CiAKQEAgLTEwOSwxMiArMTExLDIzIEBACiB9CiAKIC8qCisgKiBJbiBjbGFzcyBhbmRyb2lkLnV0aWwuTG9nOgorICogIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSgpCisgKi8KK3N0YXRpYyBqaW50IGFuZHJvaWRfdXRpbF9Mb2dfbG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZShKTklFbnYqIGVudiBBVFRSSUJVVEVfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgY2xhenogQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8amludD4oTE9HR0VSX0VOVFJZX01BWF9QQVlMT0FEKTsKK30KKworLyoKICAqIEpOSSByZWdpc3RyYXRpb24uCiAgKi8KIHN0YXRpYyBjb25zdCBKTklOYXRpdmVNZXRob2QgZ01ldGhvZHNbXSA9IHsKICAgICAvKiBuYW1lLCBzaWduYXR1cmUsIGZ1bmNQdHIgKi8KICAgICB7ICJpc0xvZ2dhYmxlIiwgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0kpWiIsICh2b2lkKikgYW5kcm9pZF91dGlsX0xvZ19pc0xvZ2dhYmxlIH0sCiAgICAgeyAicHJpbnRsbl9uYXRpdmUiLCAgIihJSUxqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJIiwgKHZvaWQqKSBhbmRyb2lkX3V0aWxfTG9nX3ByaW50bG5fbmF0aXZlIH0sCisgICAgeyAibG9nZ2VyX2VudHJ5X21heF9wYXlsb2FkX25hdGl2ZSIsICAiKClJIiwgKHZvaWQqKSBhbmRyb2lkX3V0aWxfTG9nX2xvZ2dlcl9lbnRyeV9tYXhfcGF5bG9hZF9uYXRpdmUgfSwKIH07CiAKIGludCByZWdpc3Rlcl9hbmRyb2lkX3V0aWxfTG9nKEpOSUVudiogZW52KQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhcy5jcHAKaW5kZXggOWI0MWViMy4uZDJjOTlmZCAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXMuY3BwCkBAIC0yNyw3ICsyNywxMyBAQAogI2luY2x1ZGUgPFNrQml0bWFwLmg+CiAjaW5jbHVkZSA8U2tSZWdpb24uaD4KIAorI2lmIEhXVUlfTkVXX09QUworI2luY2x1ZGUgPFJlY29yZGluZ0NhbnZhcy5oPgordHlwZWRlZiBhbmRyb2lkOjp1aXJlbmRlcmVyOjpSZWNvcmRpbmdDYW52YXMgY2FudmFzX3Q7CisjZWxzZQogI2luY2x1ZGUgPERpc3BsYXlMaXN0Q2FudmFzLmg+Cit0eXBlZGVmIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OkRpc3BsYXlMaXN0Q2FudmFzIGNhbnZhc190OworI2VuZGlmCiAjaW5jbHVkZSA8UmVjdC5oPgogI2luY2x1ZGUgPFJlbmRlck5vZGUuaD4KICNpbmNsdWRlIDxDYW52YXNQcm9wZXJ0eS5oPgpAQCAtNDYsNyArNTIsNyBAQAogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfaW5zZXJ0UmVvcmRlckJhcnJpZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamJvb2xlYW4gcmVvcmRlckVuYWJsZSkgewotICAgIERpc3BsYXlMaXN0Q2FudmFzKiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Q2FudmFzKj4oY2FudmFzUHRyKTsKKyAgICBjYW52YXNfdCogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxjYW52YXNfdCo+KGNhbnZhc1B0cik7CiAgICAgY2FudmFzLT5pbnNlcnRSZW9yZGVyQmFycmllcihyZW9yZGVyRW5hYmxlKTsKIH0KIApAQCAtNTYsNyArNjIsNyBAQAogCiBzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfY2FsbERyYXdHTEZ1bmN0aW9uKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAogICAgICAgICBqbG9uZyBjYW52YXNQdHIsIGpsb25nIGZ1bmN0b3JQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIEZ1bmN0b3IqIGZ1bmN0b3IgPSByZWludGVycHJldF9jYXN0PEZ1bmN0b3IqPihmdW5jdG9yUHRyKTsKICAgICBjYW52YXMtPmNhbGxEcmF3R0xGdW5jdGlvbihmdW5jdG9yKTsKIH0KQEAgLTgwLDcgKzg2LDcgQEAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3Um91bmRSZWN0UHJvcHMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgbGVmdFByb3BQdHIsIGpsb25nIHRvcFByb3BQdHIsIGpsb25nIHJpZ2h0UHJvcFB0ciwKICAgICAgICAgamxvbmcgYm90dG9tUHJvcFB0ciwgamxvbmcgcnhQcm9wUHRyLCBqbG9uZyByeVByb3BQdHIsIGpsb25nIHBhaW50UHJvcFB0cikgewotICAgIERpc3BsYXlMaXN0Q2FudmFzKiBjYW52YXMgPSByZWludGVycHJldF9jYXN0PERpc3BsYXlMaXN0Q2FudmFzKj4oY2FudmFzUHRyKTsKKyAgICBjYW52YXNfdCogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxjYW52YXNfdCo+KGNhbnZhc1B0cik7CiAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIGxlZnRQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KGxlZnRQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogdG9wUHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPih0b3BQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcmlnaHRQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KHJpZ2h0UHJvcFB0cik7CkBAIC05Myw3ICs5OSw3IEBACiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3Q2lyY2xlUHJvcHMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgeFByb3BQdHIsIGpsb25nIHlQcm9wUHRyLCBqbG9uZyByYWRpdXNQcm9wUHRyLCBqbG9uZyBwYWludFByb3BQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiB4UHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPih4UHJvcFB0cik7CiAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHlQcm9wID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSo+KHlQcm9wUHRyKTsKICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcmFkaXVzUHJvcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2FudmFzUHJvcGVydHlQcmltaXRpdmUqPihyYWRpdXNQcm9wUHRyKTsKQEAgLTEwNywyNSArMTEzLDI1IEBACiAKIHN0YXRpYyBqbG9uZyBhbmRyb2lkX3ZpZXdfRGlzcGxheUxpc3RDYW52YXNfZmluaXNoUmVjb3JkaW5nKEpOSUVudiogZW52LAogICAgICAgICBqb2JqZWN0IGNsYXp6LCBqbG9uZyBjYW52YXNQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGpsb25nPihjYW52YXMtPmZpbmlzaFJlY29yZGluZygpKTsKIH0KIAogc3RhdGljIGpsb25nIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19jcmVhdGVEaXNwbGF5TGlzdENhbnZhcyhKTklFbnYqIGVudiwgam9iamVjdCBjbGF6eiwKICAgICAgICAgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3IERpc3BsYXlMaXN0Q2FudmFzKHdpZHRoLCBoZWlnaHQpKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4obmV3IGNhbnZhc190KHdpZHRoLCBoZWlnaHQpKTsKIH0KIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzX3Jlc2V0RGlzcGxheUxpc3RDYW52YXMoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamludCB3aWR0aCwgamludCBoZWlnaHQpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIGNhbnZhcy0+cmVzZXQod2lkdGgsIGhlaWdodCk7CiB9CiAKIAogc3RhdGljIHZvaWQgYW5kcm9pZF92aWV3X0Rpc3BsYXlMaXN0Q2FudmFzX2RyYXdSZW5kZXJOb2RlKEpOSUVudiogZW52LAogICAgICAgICBqb2JqZWN0IGNsYXp6LCBqbG9uZyBjYW52YXNQdHIsIGpsb25nIHJlbmRlck5vZGVQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIFJlbmRlck5vZGUqIHJlbmRlck5vZGUgPSByZWludGVycHJldF9jYXN0PFJlbmRlck5vZGUqPihyZW5kZXJOb2RlUHRyKTsKICAgICBjYW52YXMtPmRyYXdSZW5kZXJOb2RlKHJlbmRlck5vZGUpOwogfQpAQCAtMTM2LDcgKzE0Miw3IEBACiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19EaXNwbGF5TGlzdENhbnZhc19kcmF3TGF5ZXIoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCiAgICAgICAgIGpsb25nIGNhbnZhc1B0ciwgamxvbmcgbGF5ZXJQdHIpIHsKLSAgICBEaXNwbGF5TGlzdENhbnZhcyogY2FudmFzID0gcmVpbnRlcnByZXRfY2FzdDxEaXNwbGF5TGlzdENhbnZhcyo+KGNhbnZhc1B0cik7CisgICAgY2FudmFzX3QqIGNhbnZhcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2FudmFzX3QqPihjYW52YXNQdHIpOwogICAgIERlZmVycmVkTGF5ZXJVcGRhdGVyKiBsYXllciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RGVmZXJyZWRMYXllclVwZGF0ZXIqPihsYXllclB0cik7CiAgICAgY2FudmFzLT5kcmF3TGF5ZXIobGF5ZXIpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19Qb2ludGVySWNvbi5jcHAKaW5kZXggZDdlMmMwMi4uNzFiZTUyZSAxMDA2NDQKLS0tIGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfUG9pbnRlckljb24uY3BwCkBAIC02NSwzMyArNjUsMzQgQEAKICAgICAgICAgcmV0dXJuIE9LOwogICAgIH0KIAotICAgIGpvYmplY3QgbG9hZGVkUG9pbnRlckljb25PYmogPSBlbnYtPkNhbGxPYmplY3RNZXRob2QocG9pbnRlckljb25PYmosCi0gICAgICAgICAgICBnUG9pbnRlckljb25DbGFzc0luZm8ubG9hZCwgY29udGV4dE9iaik7Ci0gICAgaWYgKGVudi0+RXhjZXB0aW9uQ2hlY2soKSB8fCAhbG9hZGVkUG9pbnRlckljb25PYmopIHsKKyAgICBTY29wZWRMb2NhbFJlZjxqb2JqZWN0PiBsb2FkZWRQb2ludGVySWNvbk9iaihlbnYsIGVudi0+Q2FsbE9iamVjdE1ldGhvZChwb2ludGVySWNvbk9iaiwKKyAgICAgICAgICAgIGdQb2ludGVySWNvbkNsYXNzSW5mby5sb2FkLCBjb250ZXh0T2JqKSk7CisgICAgaWYgKGVudi0+RXhjZXB0aW9uQ2hlY2soKSB8fCAhbG9hZGVkUG9pbnRlckljb25PYmouZ2V0KCkpIHsKICAgICAgICAgQUxPR1coIkFuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIGEgcG9pbnRlciBpY29uLiIpOwogICAgICAgICBMT0dXX0VYKGVudik7CiAgICAgICAgIGVudi0+RXhjZXB0aW9uQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIFVOS05PV05fRVJST1I7CiAgICAgfQorICAgIHJldHVybiBhbmRyb2lkX3ZpZXdfUG9pbnRlckljb25fZ2V0TG9hZGVkSWNvbihlbnYsIGxvYWRlZFBvaW50ZXJJY29uT2JqLmdldCgpLCBvdXRQb2ludGVySWNvbik7Cit9CiAKLSAgICBvdXRQb2ludGVySWNvbi0+c3R5bGUgPSBlbnYtPkdldEludEZpZWxkKGxvYWRlZFBvaW50ZXJJY29uT2JqLAotICAgICAgICAgICAgZ1BvaW50ZXJJY29uQ2xhc3NJbmZvLm1TdHlsZSk7Ci0gICAgb3V0UG9pbnRlckljb24tPmhvdFNwb3RYID0gZW52LT5HZXRGbG9hdEZpZWxkKGxvYWRlZFBvaW50ZXJJY29uT2JqLAotICAgICAgICAgICAgZ1BvaW50ZXJJY29uQ2xhc3NJbmZvLm1Ib3RTcG90WCk7Ci0gICAgb3V0UG9pbnRlckljb24tPmhvdFNwb3RZID0gZW52LT5HZXRGbG9hdEZpZWxkKGxvYWRlZFBvaW50ZXJJY29uT2JqLAotICAgICAgICAgICAgZ1BvaW50ZXJJY29uQ2xhc3NJbmZvLm1Ib3RTcG90WSk7CitzdGF0dXNfdCBhbmRyb2lkX3ZpZXdfUG9pbnRlckljb25fZ2V0TG9hZGVkSWNvbihKTklFbnYqIGVudiwgam9iamVjdCBwb2ludGVySWNvbk9iaiwKKyAgICAgICAgUG9pbnRlckljb24qIG91dFBvaW50ZXJJY29uKSB7CisgICAgb3V0UG9pbnRlckljb24tPnN0eWxlID0gZW52LT5HZXRJbnRGaWVsZChwb2ludGVySWNvbk9iaiwgZ1BvaW50ZXJJY29uQ2xhc3NJbmZvLm1TdHlsZSk7CisgICAgb3V0UG9pbnRlckljb24tPmhvdFNwb3RYID0gZW52LT5HZXRGbG9hdEZpZWxkKHBvaW50ZXJJY29uT2JqLCBnUG9pbnRlckljb25DbGFzc0luZm8ubUhvdFNwb3RYKTsKKyAgICBvdXRQb2ludGVySWNvbi0+aG90U3BvdFkgPSBlbnYtPkdldEZsb2F0RmllbGQocG9pbnRlckljb25PYmosIGdQb2ludGVySWNvbkNsYXNzSW5mby5tSG90U3BvdFkpOwogCi0gICAgam9iamVjdCBiaXRtYXBPYmogPSBlbnYtPkdldE9iamVjdEZpZWxkKGxvYWRlZFBvaW50ZXJJY29uT2JqLCBnUG9pbnRlckljb25DbGFzc0luZm8ubUJpdG1hcCk7Ci0gICAgaWYgKGJpdG1hcE9iaikgewotICAgICAgICBHcmFwaGljc0pOSTo6Z2V0U2tCaXRtYXAoZW52LCBiaXRtYXBPYmosICYob3V0UG9pbnRlckljb24tPmJpdG1hcCkpOwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGJpdG1hcE9iaik7CisgICAgU2NvcGVkTG9jYWxSZWY8am9iamVjdD4gYml0bWFwT2JqKAorICAgICAgICAgICAgZW52LCBlbnYtPkdldE9iamVjdEZpZWxkKHBvaW50ZXJJY29uT2JqLCBnUG9pbnRlckljb25DbGFzc0luZm8ubUJpdG1hcCkpOworICAgIGlmIChiaXRtYXBPYmouZ2V0KCkpIHsKKyAgICAgICAgR3JhcGhpY3NKTkk6OmdldFNrQml0bWFwKGVudiwgYml0bWFwT2JqLmdldCgpLCAmKG91dFBvaW50ZXJJY29uLT5iaXRtYXApKTsKICAgICB9CiAKICAgICBTY29wZWRMb2NhbFJlZjxqb2JqZWN0QXJyYXk+IGJpdG1hcEZyYW1lc09iaihlbnYsIHJlaW50ZXJwcmV0X2Nhc3Q8am9iamVjdEFycmF5PigKLSAgICAgICAgICAgIGVudi0+R2V0T2JqZWN0RmllbGQobG9hZGVkUG9pbnRlckljb25PYmosIGdQb2ludGVySWNvbkNsYXNzSW5mby5tQml0bWFwRnJhbWVzKSkpOworICAgICAgICAgICAgZW52LT5HZXRPYmplY3RGaWVsZChwb2ludGVySWNvbk9iaiwgZ1BvaW50ZXJJY29uQ2xhc3NJbmZvLm1CaXRtYXBGcmFtZXMpKSk7CiAgICAgaWYgKGJpdG1hcEZyYW1lc09iai5nZXQoKSkgewogICAgICAgICBvdXRQb2ludGVySWNvbi0+ZHVyYXRpb25QZXJGcmFtZSA9IGVudi0+R2V0SW50RmllbGQoCi0gICAgICAgICAgICAgICAgbG9hZGVkUG9pbnRlckljb25PYmosIGdQb2ludGVySWNvbkNsYXNzSW5mby5tRHVyYXRpb25QZXJGcmFtZSk7CisgICAgICAgICAgICAgICAgcG9pbnRlckljb25PYmosIGdQb2ludGVySWNvbkNsYXNzSW5mby5tRHVyYXRpb25QZXJGcmFtZSk7CiAgICAgICAgIGpzaXplIHNpemUgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGJpdG1hcEZyYW1lc09iai5nZXQoKSk7CiAgICAgICAgIG91dFBvaW50ZXJJY29uLT5iaXRtYXBGcmFtZXMucmVzaXplKHNpemUpOwogICAgICAgICBmb3IgKGpzaXplIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC0xMDAsNyArMTAxLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYobG9hZGVkUG9pbnRlckljb25PYmopOwogICAgIHJldHVybiBPSzsKIH0KIApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uLmggYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfUG9pbnRlckljb24uaAppbmRleCBjYTA4MDg1Li4wMGJkZmI0IDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfUG9pbnRlckljb24uaAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfUG9pbnRlckljb24uaApAQCAtOTcsNiArOTcsMTEgQEAKIGV4dGVybiBzdGF0dXNfdCBhbmRyb2lkX3ZpZXdfUG9pbnRlckljb25fbG9hZChKTklFbnYqIGVudiwKICAgICAgICAgam9iamVjdCBwb2ludGVySWNvbk9iaiwgam9iamVjdCBjb250ZXh0T2JqLCBQb2ludGVySWNvbiogb3V0UG9pbnRlckljb24pOwogCisvKiBPYnRhaW4gdGhlIGRhdGEgb2YgcG9pbnRlckljb25PYmogYW5kIHB1dCB0byBvdXRQb2ludGVySWNvbi4gKi8KK2V4dGVybiBzdGF0dXNfdCBhbmRyb2lkX3ZpZXdfUG9pbnRlckljb25fZ2V0TG9hZGVkSWNvbihKTklFbnYqIGVudiwgam9iamVjdCBwb2ludGVySWNvbk9iaiwKKyAgICAgICAgUG9pbnRlckljb24qIG91dFBvaW50ZXJJY29uKTsKKworCiAvKiBMb2FkcyB0aGUgYml0bWFwIGFzc29jaWF0ZWQgd2l0aCBhIHBvaW50ZXIgaWNvbiBieSBzdHlsZS4KICAqIElmIHBvaW50ZXJJY29uT2JqIGlzIE5VTEwsIHJldHVybnMgT0sgYW5kIGEgcG9pbnRlciBpY29uIHdpdGggUE9JTlRFUl9JQ09OX1NUWUxFX05VTEwuICovCiBleHRlcm4gc3RhdHVzX3QgYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uX2xvYWRTeXN0ZW1JY29uKEpOSUVudiogZW52LApkaWZmIC0tZ2l0IGEvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2UuY3BwIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X1N1cmZhY2UuY3BwCmluZGV4IGY2ZTY4YzQuLmNmNjg0NDkgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19TdXJmYWNlLmNwcAorKysgYi9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfU3VyZmFjZS5jcHAKQEAgLTQ2NSwxMSArNDY1LDE3IEBACiAgICAgYW53LT5xdWVyeShhbncsIE5BVElWRV9XSU5ET1dfSEVJR0hULCAmdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KKwogc3RhdGljIGpsb25nIG5hdGl2ZUdldE5leHRGcmFtZU51bWJlcihKTklFbnYgKmVudiwgamNsYXNzIGNsYXp6LCBqbG9uZyBuYXRpdmVPYmplY3QpIHsKICAgICBTdXJmYWNlKiBzdXJmYWNlID0gcmVpbnRlcnByZXRfY2FzdDxTdXJmYWNlKj4obmF0aXZlT2JqZWN0KTsKICAgICByZXR1cm4gc3VyZmFjZS0+Z2V0TmV4dEZyYW1lTnVtYmVyKCk7CiB9CiAKK3N0YXRpYyBqaW50IG5hdGl2ZVNldFNjYWxpbmdNb2RlKEpOSUVudiAqZW52LCBqY2xhc3MgY2xhenosIGpsb25nIG5hdGl2ZU9iamVjdCwgamludCBzY2FsaW5nTW9kZSkgeworICAgIFN1cmZhY2UqIHN1cmZhY2UgPSByZWludGVycHJldF9jYXN0PFN1cmZhY2UqPihuYXRpdmVPYmplY3QpOworICAgIHJldHVybiBzdXJmYWNlLT5zZXRTY2FsaW5nTW9kZShzY2FsaW5nTW9kZSk7Cit9CisKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OnVpcmVuZGVyZXI6OnJlbmRlcnRocmVhZDsKQEAgLTU0Niw2ICs1NTIsNyBAQAogICAgIHsibmF0aXZlR2V0V2lkdGgiLCAiKEopSSIsICh2b2lkKiluYXRpdmVHZXRXaWR0aCB9LAogICAgIHsibmF0aXZlR2V0SGVpZ2h0IiwgIihKKUkiLCAodm9pZCopbmF0aXZlR2V0SGVpZ2h0IH0sCiAgICAgeyJuYXRpdmVHZXROZXh0RnJhbWVOdW1iZXIiLCAiKEopSiIsICh2b2lkKiluYXRpdmVHZXROZXh0RnJhbWVOdW1iZXIgfSwKKyAgICB7Im5hdGl2ZVNldFNjYWxpbmdNb2RlIiwgIihKSSlJIiwgKHZvaWQqKW5hdGl2ZVNldFNjYWxpbmdNb2RlIH0sCiAKICAgICAvLyBIV1VJIGNvbnRleHQKICAgICB7Im5Id3VpQ3JlYXRlIiwgIihKSilKIiwgKHZvaWQqKSBod3VpOjpjcmVhdGUgfSwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcCBiL2NvcmUvam5pL2FuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyLmNwcAppbmRleCAxN2ViODc2Li41YWE2YTczIDEwMDY0NAotLS0gYS9jb3JlL2puaS9hbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlci5jcHAKKysrIGIvY29yZS9qbmkvYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXIuY3BwCkBAIC0yNjIsMTEgKzI2MiwxMSBAQAogICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGpuYW1lLCBuYW1lKTsKIH0KIAotc3RhdGljIGpib29sZWFuIGFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyX2luaXRpYWxpemUoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCitzdGF0aWMgdm9pZCBhbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlcl9pbml0aWFsaXplKEpOSUVudiogZW52LCBqb2JqZWN0IGNsYXp6LAogICAgICAgICBqbG9uZyBwcm94eVB0ciwgam9iamVjdCBqc3VyZmFjZSkgewogICAgIFJlbmRlclByb3h5KiBwcm94eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVuZGVyUHJveHkqPihwcm94eVB0cik7CiAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gd2luZG93ID0gYW5kcm9pZF92aWV3X1N1cmZhY2VfZ2V0TmF0aXZlV2luZG93KGVudiwganN1cmZhY2UpOwotICAgIHJldHVybiBwcm94eS0+aW5pdGlhbGl6ZSh3aW5kb3cpOworICAgIHByb3h5LT5pbml0aWFsaXplKHdpbmRvdyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyX3VwZGF0ZVN1cmZhY2UoSk5JRW52KiBlbnYsIGpvYmplY3QgY2xhenosCkBAIC00OTIsNyArNDkyLDcgQEAKICAgICB7ICJuRGVsZXRlUHJveHkiLCAiKEopViIsICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfZGVsZXRlUHJveHkgfSwKICAgICB7ICJuTG9hZFN5c3RlbVByb3BlcnRpZXMiLCAiKEopWiIsICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfbG9hZFN5c3RlbVByb3BlcnRpZXMgfSwKICAgICB7ICJuU2V0TmFtZSIsICIoSkxqYXZhL2xhbmcvU3RyaW5nOylWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlcl9zZXROYW1lIH0sCi0gICAgeyAibkluaXRpYWxpemUiLCAiKEpMYW5kcm9pZC92aWV3L1N1cmZhY2U7KVoiLCAodm9pZCopIGFuZHJvaWRfdmlld19UaHJlYWRlZFJlbmRlcmVyX2luaXRpYWxpemUgfSwKKyAgICB7ICJuSW5pdGlhbGl6ZSIsICIoSkxhbmRyb2lkL3ZpZXcvU3VyZmFjZTspViIsICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfaW5pdGlhbGl6ZSB9LAogICAgIHsgIm5VcGRhdGVTdXJmYWNlIiwgIihKTGFuZHJvaWQvdmlldy9TdXJmYWNlOylWIiwgKHZvaWQqKSBhbmRyb2lkX3ZpZXdfVGhyZWFkZWRSZW5kZXJlcl91cGRhdGVTdXJmYWNlIH0sCiAgICAgeyAiblBhdXNlU3VyZmFjZSIsICIoSkxhbmRyb2lkL3ZpZXcvU3VyZmFjZTspWiIsICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfcGF1c2VTdXJmYWNlIH0sCiAgICAgeyAiblNldHVwIiwgIihKSUlGSUkpViIsICh2b2lkKikgYW5kcm9pZF92aWV3X1RocmVhZGVkUmVuZGVyZXJfc2V0dXAgfSwKZGlmZiAtLWdpdCBhL2NvcmUvam5pL2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZS5jcHAgYi9jb3JlL2puaS9jb21fYW5kcm9pZF9pbnRlcm5hbF9vc19aeWdvdGUuY3BwCmluZGV4IDczYzc0ODcuLjA0MWU2OTMgMTAwNjQ0Ci0tLSBhL2NvcmUvam5pL2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZS5jcHAKKysrIGIvY29yZS9qbmkvY29tX2FuZHJvaWRfaW50ZXJuYWxfb3NfWnlnb3RlLmNwcApAQCAtNTgxLDcgKzU4MSw3IEBACiAgICAgVW5zZXRTaWdDaGxkSGFuZGxlcigpOwogCiAgICAgZW52LT5DYWxsU3RhdGljVm9pZE1ldGhvZChnWnlnb3RlQ2xhc3MsIGdDYWxsUG9zdEZvcmtDaGlsZEhvb2tzLCBkZWJ1Z19mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3N5c3RlbV9zZXJ2ZXIgPyBOVUxMIDogaW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfc3lzdGVtX3NlcnZlciwgaW5zdHJ1Y3Rpb25TZXQpOwogICAgIGlmIChlbnYtPkV4Y2VwdGlvbkNoZWNrKCkpIHsKICAgICAgIFJ1bnRpbWVBYm9ydChlbnYsIF9fTElORV9fLCAiRXJyb3IgY2FsbGluZyBwb3N0IGZvcmsgaG9va3MuIik7CiAgICAgfQpAQCAtNjA1LDEwICs2MDUsMzIgQEAKICAgICAgICAgamludCBkZWJ1Z19mbGFncywgam9iamVjdEFycmF5IHJsaW1pdHMsCiAgICAgICAgIGppbnQgbW91bnRfZXh0ZXJuYWwsIGpzdHJpbmcgc2VfaW5mbywganN0cmluZyBzZV9uYW1lLAogICAgICAgICBqaW50QXJyYXkgZmRzVG9DbG9zZSwganN0cmluZyBpbnN0cnVjdGlvblNldCwganN0cmluZyBhcHBEYXRhRGlyKSB7Ci0gICAgLy8gR3JhbnQgQ0FQX1dBS0VfQUxBUk0gdG8gdGhlIEJsdWV0b290aCBwcm9jZXNzLgogICAgIGpsb25nIGNhcGFiaWxpdGllcyA9IDA7CisKKyAgICAvLyBHcmFudCBDQVBfV0FLRV9BTEFSTSB0byB0aGUgQmx1ZXRvb3RoIHByb2Nlc3MuCiAgICAgaWYgKHVpZCA9PSBBSURfQkxVRVRPT1RIKSB7Ci0gICAgICAgIGNhcGFiaWxpdGllcyB8PSAoMUxMIDw8IENBUF9XQUtFX0FMQVJNKTsKKyAgICAgIGNhcGFiaWxpdGllcyB8PSAoMUxMIDw8IENBUF9XQUtFX0FMQVJNKTsKKyAgICB9CisKKyAgICAvLyBHcmFudCBDQVBfQkxPQ0tfU1VTUEVORCB0byBwcm9jZXNzZXMgdGhhdCBiZWxvbmcgdG8gR0lEICJ3YWtlbG9jayIKKyAgICBib29sIGdpZF93YWtlbG9ja19mb3VuZCA9IGZhbHNlOworICAgIGlmIChnaWQgPT0gQUlEX1dBS0VMT0NLKSB7CisgICAgICBnaWRfd2FrZWxvY2tfZm91bmQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoZ2lkcyAhPSBOVUxMKSB7CisgICAgICBqc2l6ZSBnaWRzX251bSA9IGVudi0+R2V0QXJyYXlMZW5ndGgoZ2lkcyk7CisgICAgICBTY29wZWRJbnRBcnJheVJPIGFyKGVudiwgZ2lkcyk7CisgICAgICBpZiAoYXIuZ2V0KCkgPT0gTlVMTCkgeworICAgICAgICBSdW50aW1lQWJvcnQoZW52LCBfX0xJTkVfXywgIkJhZCBnaWRzIGFycmF5Iik7CisgICAgICB9CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdpZHNfbnVtOyBpKyspIHsKKyAgICAgICAgaWYgKGFyW2ldID09IEFJRF9XQUtFTE9DSykgeworICAgICAgICAgIGdpZF93YWtlbG9ja19mb3VuZCA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGdpZF93YWtlbG9ja19mb3VuZCkgeworICAgICAgY2FwYWJpbGl0aWVzIHw9ICgxTEwgPDwgQ0FQX0JMT0NLX1NVU1BFTkQpOwogICAgIH0KIAogICAgIHJldHVybiBGb3JrQW5kU3BlY2lhbGl6ZUNvbW1vbihlbnYsIHVpZCwgZ2lkLCBnaWRzLCBkZWJ1Z19mbGFncywKQEAgLTY1Miw3ICs2NzQsNyBAQAogaW50IHJlZ2lzdGVyX2NvbV9hbmRyb2lkX2ludGVybmFsX29zX1p5Z290ZShKTklFbnYqIGVudikgewogICBnWnlnb3RlQ2xhc3MgPSBNYWtlR2xvYmFsUmVmT3JEaWUoZW52LCBGaW5kQ2xhc3NPckRpZShlbnYsIGtaeWdvdGVDbGFzc05hbWUpKTsKICAgZ0NhbGxQb3N0Rm9ya0NoaWxkSG9va3MgPSBHZXRTdGF0aWNNZXRob2RJRE9yRGllKGVudiwgZ1p5Z290ZUNsYXNzLCAiY2FsbFBvc3RGb3JrQ2hpbGRIb29rcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKElMamF2YS9sYW5nL1N0cmluZzspViIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihJWkxqYXZhL2xhbmcvU3RyaW5nOylWIik7CiAKICAgcmV0dXJuIFJlZ2lzdGVyTWV0aG9kc09yRGllKGVudiwgImNvbS9hbmRyb2lkL2ludGVybmFsL29zL1p5Z290ZSIsIGdNZXRob2RzLCBORUxFTShnTWV0aG9kcykpOwogfQpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvQW5kcm9pZC5tayBiL2NvcmUvcmVzL0FuZHJvaWQubWsKaW5kZXggY2ZjNzkxZC4uYTFiZWY4MyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvQW5kcm9pZC5taworKysgYi9jb3JlL3Jlcy9BbmRyb2lkLm1rCkBAIC0yMyw2ICsyMyw3IEBACiAjIFRlbGwgYWFwdCB0byBjcmVhdGUgImV4dGVuZGluZyAobm9uLWFwcGxpY2F0aW9uKSIgcmVzb3VyY2UgSURzLAogIyBzaW5jZSB0aGVzZSByZXNvdXJjZXMgd2lsbCBiZSB1c2VkIGJ5IG1hbnkgYXBwcy4KIExPQ0FMX0FBUFRfRkxBR1MgOj0gLXgKK0xPQ0FMX0FBUFRfRkxBR1MgKz0gLS1wcml2YXRlLXN5bWJvbHMgY29tLmFuZHJvaWQuaW50ZXJuYWwKIAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKIApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL2NvcmUvcmVzL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNTI1MWIyMC4uYjAyZGUwZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgYi9jb3JlL3Jlcy9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xMDMsMTAgKzEwMywxMSBAQAogCiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLm9zLmFjdGlvbi5TRVRUSU5HX1JFU1RPUkVEIiAvPgogCi0gICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmJhY2t1cC5pbnRlbnQuUlVOIiAvPgotICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5iYWNrdXAuaW50ZW50LkNMRUFSIiAvPgotICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5iYWNrdXAuaW50ZW50LklOSVQiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5iYWNrdXAuaW50ZW50LlJVTiIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwLmJhY2t1cC5pbnRlbnQuQ0xFQVIiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5iYWNrdXAuaW50ZW50LklOSVQiIC8+CiAKKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYmx1ZXRvb3RoLmludGVudC5ESVNDT1ZFUkFCTEVfVElNRU9VVCIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYmx1ZXRvb3RoLmFkYXB0ZXIuYWN0aW9uLlNUQVRFX0NIQU5HRUQiIC8+CiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmJsdWV0b290aC5hZGFwdGVyLmFjdGlvbi5TQ0FOX01PREVfQ0hBTkdFRCIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYmx1ZXRvb3RoLmFkYXB0ZXIuYWN0aW9uLkRJU0NPVkVSWV9TVEFSVEVEIiAvPgpAQCAtMjA0LDYgKzIwNSw3IEBACiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLm1lZGlhLlZPTFVNRV9DSEFOR0VEX0FDVElPTiIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQubWVkaWEuTUFTVEVSX1ZPTFVNRV9DSEFOR0VEX0FDVElPTiIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQubWVkaWEuTUFTVEVSX01VVEVfQ0hBTkdFRF9BQ1RJT04iIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLm1lZGlhLk1BU1RFUl9NT05PX0NIQU5HRURfQUNUSU9OIiAvPgogICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5tZWRpYS5TQ09fQVVESU9fU1RBVEVfQ0hBTkdFRCIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQubWVkaWEuQUNUSU9OX1NDT19BVURJT19TVEFURV9VUERBVEVEIiAvPgogCkBAIC0yNzYsNyArMjc4LDEwIEBACiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uQUlSUExBTkVfTU9ERSIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5BRFZBTkNFRF9TRVRUSU5HUyIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5BUFBMSUNBVElPTl9SRVNUUklDVElPTlNfQ0hBTkdFRCIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5CVUdSRVBPUlRfU1RBUlRFRCIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5CVUdSRVBPUlRfRklOSVNIRUQiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uUkVNT1RFX0JVR1JFUE9SVF9GSU5JU0hFRCIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5SRU1PVEVfQlVHUkVQT1JUX0RJU1BBVENIIiAvPgogCiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uQUNUSU9OX0lETEVfTUFJTlRFTkFOQ0VfU1RBUlQiIC8+CiAgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uQUNUSU9OX0lETEVfTUFJTlRFTkFOQ0VfRU5EIiAvPgpAQCAtMzY4LDYgKzM3MywyOSBAQAogICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iU2NoZWR1bGVDb25kaXRpb25Qcm92aWRlci5FVkFMVUFURSIgLz4KICAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9IndpZmlfc2Nhbl9hdmFpbGFibGUiIC8+CiAKKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFjdGlvbi5jbmUuc3RhcnRlZCIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuY29udGVudC5qb2JzY2hlZHVsZXIuSk9CX0RFQURMSU5FX0VYUElSRUQiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uQUNUSU9OX1VOU09MX1JFU1BPTlNFX09FTV9IT09LX1JBVyIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQubmV0LmNvbm4uQ09OTkVDVElWSVRZX0NIQU5HRV9TVVBMIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5vcy5hY3Rpb24uQUNUSU9OX0VGRkVDVFNfU1VQUFJFU1NPUl9DSEFOR0VEIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5vcy5hY3Rpb24uTElHSFRfREVWSUNFX0lETEVfTU9ERV9DSEFOR0VEIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5vcy5zdG9yYWdlLmFjdGlvbi5WT0xVTUVfU1RBVEVfQ0hBTkdFRCIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLnNlcnZlci5hY3Rpb24uVVBEQVRFX1RXSUxJR0hUX1NUQVRFIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQuc2VydmVyLmRldmljZV9pZGxlLlNURVBfSURMRV9TVEFURSIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLnNlcnZlci5kZXZpY2VfaWRsZS5TVEVQX0xJR0hUX0lETEVfU1RBVEUiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5zZXJ2ZXIuV2lmaS5hY3Rpb24uVE9HR0xFX1BOTyIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImludGVudC5hY3Rpb24uQUNUSU9OX1JGX0JBTkRfSU5GTyIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NRURJQV9SRVNPVVJDRV9HUkFOVEVEIiAvPgorCisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5hY3Rpb24uSU5URVJSVVBUSU9OX0ZJTFRFUl9DSEFOR0VEIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuYWN0aW9uLklOVEVSUlVQVElPTl9GSUxURVJfQ0hBTkdFRF9JTlRFUk5BTCIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwLmFjdGlvbi5OT1RJRklDQVRJT05fUE9MSUNZX0NIQU5HRUQiIC8+CisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFwcC5hY3Rpb24uTk9USUZJQ0FUSU9OX1BPTElDWV9BQ0NFU1NfR1JBTlRFRF9DSEFOR0VEIiAvPgorICAgIDxwcm90ZWN0ZWQtYnJvYWRjYXN0IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5vcy5hY3Rpb24uQUNUSU9OX0VGRkVDVFNfU1VQUFJFU1NPUl9DSEFOR0VEIiAvPgorCisgICAgPHByb3RlY3RlZC1icm9hZGNhc3QgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FQUF9HUkFOVEVEX1VSSV9QRVJNSVNTSU9OUyIgLz4KKyAgICA8cHJvdGVjdGVkLWJyb2FkY2FzdCBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DTEVBUl9BUFBfR1JBTlRFRF9VUklfUEVSTUlTU0lPTlMiIC8+CisKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CiAgICAgPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgUlVOVElNRSBQRVJNSVNTSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPgogICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTY0MiwxNCArNjcwLDE0IEBACiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBhY2Nlc3MgdGhlIElNUyBjYWxsIHNlcnZpY2U6IG1ha2luZyBhbmQKICAgICAgICAgIG1vZGlmeWluZyBhIGNhbGwKLSAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc2lnbmF0dXJlfHN5c3RlbQorICAgICAgICA8cD5Qcm90ZWN0aW9uIGxldmVsOiBzaWduYXR1cmV8cHJpdmlsZWdlZAogICAgICAgICBAaGlkZQogICAgIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19JTVNfQ0FMTF9TRVJWSUNFIgogICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb25Hcm91cD0iYW5kcm9pZC5wZXJtaXNzaW9uLWdyb3VwLlBIT05FIgogICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3Blcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiCiAgICAgICAgIGFuZHJvaWQ6ZGVzY3JpcHRpb249IkBzdHJpbmcvcGVybWRlc2NfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiCi0gICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8c3lzdGVtIiAvPgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byByZWFkIHRoZSB1c2VyJ3MgY2FsbCBsb2cuCiAgICAgICAgICA8cCBjbGFzcz0ibm90ZSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJZiB5b3VyIGFwcCB1c2VzIHRoZQpAQCAtODc0LDYgKzkwMiwxMSBAQAogICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ibm9ybWFsIgogICAgICAgICBhbmRyb2lkOnBlcm1pc3Npb25GbGFncz0iaGlkZGVuIi8+CiAKKyAgICA8IS0tIEBoaWRlIFdlIG5lZWQgdG8ga2VlcCB0aGlzIGFyb3VuZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLS0+CisgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uRkxBU0hMSUdIVCIKKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9Im5vcm1hbCIKKyAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uRmxhZ3M9ImhpZGRlbiIvPgorCiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gSU5TVEFMTCBQRVJNSVNTSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC05MjYsNyArOTU5LDcgQEAKICAgICA8IS0tIEBTeXN0ZW1BcGkgQGhpZGUgQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIG1vZGlmeSBjZWxsIGJyb2FkY2FzdHMgdGhyb3VnaCB0aGUgY29udGVudCBwcm92aWRlci4KICAgICAgICAgIDxwPk5vdCBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucy4gLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX0NFTExfQlJPQURDQVNUUyIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHN5c3RlbSIgLz4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tIFBlcm1pc3Npb25zIGZvciBzZXR0aW5nIHRoZSBkZXZpY2UgYWxhcm0gICAgICAgICAgICAgICAgICAgICAgICAtLT4KQEAgLTk0NywxNiArOTgwLDE2IEBACiAgICAgPGVhdC1jb21tZW50IC8+CiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBtb2RpZnkgYW5kIHJlbW92ZSBleGlzdGluZyB2b2ljZW1haWxzIGluIHRoZSBzeXN0ZW0KLSAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc3lzdGVtfHNpZ25hdHVyZQorICAgICAgICA8cD5Qcm90ZWN0aW9uIGxldmVsOiBzaWduYXR1cmV8cHJpdmlsZWdlZAogICAgIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uV1JJVEVfVk9JQ0VNQUlMIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gcmVhZCB2b2ljZW1haWxzIGluIHRoZSBzeXN0ZW0uCi0gICAgICAgICA8cD5Qcm90ZWN0aW9uIGxldmVsOiBzeXN0ZW18c2lnbmF0dXJlCisgICAgICAgICA8cD5Qcm90ZWN0aW9uIGxldmVsOiBzaWduYXR1cmV8cHJpdmlsZWdlZAogICAgIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQudm9pY2VtYWlsLnBlcm1pc3Npb24uUkVBRF9WT0lDRU1BSUwiCi0gICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzeXN0ZW18c2lnbmF0dXJlIiAvPgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KICAgICA8IS0tIFBlcm1pc3Npb25zIGZvciBhY2Nlc3NpbmcgbG9jYXRpb24gaW5mbyAtLT4KQEAgLTEwMzgsNiArMTA3MSwxMiBAQAogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfV0lGSV9DUkVERU5USUFMIgogICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKKyAgICA8IS0tIEBTeXN0ZW1BcGkgQGhpZGUgQWxsb3dzIGFwcGxpY2F0aW9ucyB0byBjaGFuZ2UgdGV0aGVyIHN0YXRlIGFuZCBydW4KKyAgICAgICAgIHRldGhlciBjYXJyaWVyIHByb3Zpc2lvbmluZy4KKyAgICAgICAgIDxwPk5vdCBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucy4gLS0+CisgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uVEVUSEVSX1BSSVZJTEVHRUQiCisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8cHJpdmlsZWdlZCIgLz4KKwogICAgIDwhLS0gQFN5c3RlbUFwaSBAaGlkZSBBbGxvdyBzeXN0ZW0gYXBwcyB0byByZWNlaXZlIGJyb2FkY2FzdAogICAgICAgICAgd2hlbiBhIHdpZmkgbmV0d29yayBjcmVkZW50aWFsIGlzIGNoYW5nZWQuCiAgICAgICAgICA8cD5Ob3QgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMuIC0tPgpAQCAtMTA5Miw3ICsxMTMxLDcgQEAKICAgICAgICAgIGFsbG93IG9yIGRpc2FsbG93IHBob25lYm9vayBhY2Nlc3Mgb3IgbWVzc2FnZSBhY2Nlc3MuCiAgICAgICAgICBUaGlzIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhpcmQgcGFydHkgYXBwbGljYXRpb25zLiAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5CTFVFVE9PVEhfUFJJVklMRUdFRCIKLSAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InN5c3RlbXxzaWduYXR1cmUiIC8+CisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8cHJpdmlsZWdlZCIgLz4KIAogICAgIDwhLS0gQ29udHJvbCBhY2Nlc3MgdG8gZW1haWwgcHJvdmlkZXJzIGV4Y2x1c2l2ZWx5IGZvciBCbHVldG9vdGgKICAgICAgICAgIEBoaWRlCkBAIC0xMTc5LDE0ICsxMjE4LDYgQEAKICAgICAgICAgYW5kcm9pZDpkZXNjcmlwdGlvbj0iQHN0cmluZy9wZXJtZGVzY192aWJyYXRlIgogICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ibm9ybWFsIiAvPgogCi0gICAgPCEtLSBBbGxvd3MgYWNjZXNzIHRvIHRoZSBmbGFzaGxpZ2h0LgotICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogbm9ybWFsCi0gICAgLS0+Ci0gICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uRkxBU0hMSUdIVCIKLSAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9wZXJtbGFiX2ZsYXNobGlnaHQiCi0gICAgICAgIGFuZHJvaWQ6ZGVzY3JpcHRpb249IkBzdHJpbmcvcGVybWRlc2NfZmxhc2hsaWdodCIKLSAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9Im5vcm1hbCIgLz4KLQogICAgIDwhLS0gQWxsb3dzIHVzaW5nIFBvd2VyTWFuYWdlciBXYWtlTG9ja3MgdG8ga2VlcCBwcm9jZXNzb3IgZnJvbSBzbGVlcGluZyBvciBzY3JlZW4KICAgICAgICAgIGZyb20gZGltbWluZy4KICAgICAgICAgIDxwPlByb3RlY3Rpb24gbGV2ZWw6IG5vcm1hbApAQCAtMTMzMCwyNiArMTM2MSwyNiBAQAogICAgICAgICAgY29ycmVzcG9uZHMgdG8gYSBkZXZpY2UgU0lNLgogICAgICAgICAgQGhpZGUgLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVHSVNURVJfU0lNX1NVQlNDUklQVElPTiIKLSAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InN5c3RlbXxzaWduYXR1cmUiIC8+CisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8cHJpdmlsZWdlZCIgLz4KIAogICAgIDwhLS0gQFN5c3RlbUFwaSBQcm90ZWN0cyB0aGUgYWJpbGl0eSB0byByZWdpc3RlciBhbnkgUGhvbmVBY2NvdW50IHdpdGgKICAgICAgICAgIFBob25lQWNjb3VudCNDQVBBQklMSVRZX0NBTExfUFJPVklERVIuCiAgICAgICAgICBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUdJU1RFUl9DQUxMX1BST1ZJREVSIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBAU3lzdGVtQXBpIFByb3RlY3RzIHRoZSBhYmlsaXR5IHRvIHJlZ2lzdGVyIGFueSBQaG9uZUFjY291bnQgd2l0aAogICAgICAgICAgUGhvbmVBY2NvdW50I0NBUEFCSUxJVFlfQ09OTkVDVElPTl9NQU5BR0VSCiAgICAgICAgICBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUdJU1RFUl9DT05ORUNUSU9OX01BTkFHRVIiCi0gICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzeXN0ZW18c2lnbmF0dXJlIiAvPgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tIE11c3QgYmUgcmVxdWlyZWQgYnkgYSB7QGxpbmsgYW5kcm9pZC50ZWxlY29tLkluQ2FsbFNlcnZpY2V9LAogICAgICAgICAgdG8gZW5zdXJlIHRoYXQgb25seSB0aGUgc3lzdGVtIGNhbiBiaW5kIHRvIGl0LgotICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc3lzdGVtfHNpZ25hdHVyZQorICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc2lnbmF0dXJlfHByaXZpbGVnZWQKICAgICAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0lOQ0FMTF9TRVJWSUNFIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBNdXN0IGJlIHJlcXVpcmVkIGJ5IGEge0BsaW5rIGFuZHJvaWQudGVsZWNvbS5Db25uZWN0aW9uU2VydmljZX0sCiAgICAgICAgICB0byBlbnN1cmUgdGhhdCBvbmx5IHRoZSBzeXN0ZW0gY2FuIGJpbmQgdG8gaXQuCkBAIC0xMzU4LDI0ICsxMzg5LDI0IEBACiAgICAgICAgICBAU3lzdGVtQXBpCiAgICAgICAgICBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX0NPTk5FQ1RJT05fU0VSVklDRSIKLSAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InN5c3RlbXxzaWduYXR1cmUiIC8+CisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8cHJpdmlsZWdlZCIgLz4KIAogICAgIDwhLS0gTXVzdCBiZSByZXF1aXJlZCBieSBhIHtAbGluayBhbmRyb2lkLnRlbGVjb20uQ29ubmVjdGlvblNlcnZpY2V9LAogICAgICAgICAgdG8gZW5zdXJlIHRoYXQgb25seSB0aGUgc3lzdGVtIGNhbiBiaW5kIHRvIGl0LgotICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc3lzdGVtfHNpZ25hdHVyZQorICAgICAgICAgPHA+UHJvdGVjdGlvbiBsZXZlbDogc2lnbmF0dXJlfHByaXZpbGVnZWQKICAgICAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1RFTEVDT01fQ09OTkVDVElPTl9TRVJWSUNFIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBAU3lzdGVtQXBpIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBjb250cm9sIHRoZSBpbi1jYWxsIGV4cGVyaWVuY2UuCiAgICAgICAgICBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DT05UUk9MX0lOQ0FMTF9FWFBFUklFTkNFIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gcmVjZWl2ZSBTVEsgcmVsYXRlZCBjb21tYW5kcy4KICAgICAgICAgIEBoaWRlIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfU1RLX0NPTU1BTkRTIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgogICAgIDwhLS0gUGVybWlzc2lvbnMgZm9yIHNkY2FyZCBpbnRlcmFjdGlvbiAtLT4KQEAgLTE3MzAsMTIgKzE3NjEsMTIgQEAKICAgICA8IS0tIEBTeXN0ZW1BcGkgQWxsb3dzIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIGZpbGUgc3lzdGVtcyBmb3IgcmVtb3ZhYmxlIHN0b3JhZ2UuCiAgICAgPHA+Tm90IGZvciB1c2UgYnkgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zLi0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1PVU5UX1VOTU9VTlRfRklMRVNZU1RFTVMiCi0gICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzeXN0ZW18c2lnbmF0dXJlIiAvPgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tIEBTeXN0ZW1BcGkgQWxsb3dzIGZvcm1hdHRpbmcgZmlsZSBzeXN0ZW1zIGZvciByZW1vdmFibGUgc3RvcmFnZS4KICAgICA8cD5Ob3QgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMuIC0tPgogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1PVU5UX0ZPUk1BVF9GSUxFU1lTVEVNUyIKLSAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InN5c3RlbXxzaWduYXR1cmUiIC8+CisgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmV8cHJpdmlsZWdlZCIgLz4KIAogICAgIDwhLS0gQGhpZGUgLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU1RPUkFHRV9JTlRFUk5BTCIKQEAgLTE4ODcsNyArMTkxOCw3IEBACiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBiaW5kIHRvIHRoaXJkIHBhcnR5IHF1aWNrIHNldHRpbmdzIHRpbGVzLgogICAgICAgICAgPHA+U2hvdWxkIG9ubHkgYmUgcmVxdWVzdGVkIGJ5IHRoZSBTeXN0ZW0sIHNob3VsZCBiZSByZXF1aXJlZCBieQotICAgICAgICAgUVNUaWxlU2VydmljZSBkZWNsYXJhdGlvbnMuLS0+CisgICAgICAgICBUaWxlU2VydmljZSBkZWNsYXJhdGlvbnMuLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9RVUlDS19TRVRUSU5HU19USUxFIgogICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlIiAvPgogCkBAIC0yMTcyLDYgKzIyMDMsMjEgQEAKICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DTEVBUl9BUFBfVVNFUl9EQVRBIgogICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfGluc3RhbGxlciIgLz4KIAorICAgIDwhLS0gQGhpZGUgQWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIGdldCB0aGUgVVJJIHBlcm1pc3Npb25zCisgICAgICAgICBncmFudGVkIHRvIGFub3RoZXIgYXBwbGljYXRpb24uCisgICAgICAgICA8cD5Ob3QgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMKKyAgICAtLT4KKyAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5HRVRfQVBQX0dSQU5URURfVVJJX1BFUk1JU1NJT05TIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlIiAvPgorCisgICAgPCEtLSBAaGlkZSBBbGxvd3MgYW4gYXBwbGljYXRpb24gdG8gY2xlYXIgdGhlIFVSSSBwZXJtaXNzaW9ucworICAgICAgICAgZ3JhbnRlZCB0byBhbm90aGVyIGFwcGxpY2F0aW9uLgorICAgICAgICAgPHA+Tm90IGZvciB1c2UgYnkgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zCisgICAgLS0+CisgICAgPHBlcm1pc3Npb24KKyAgICAgICAgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0xFQVJfQVBQX0dSQU5URURfVVJJX1BFUk1JU1NJT05TIgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlIiAvPgorCiAgICAgPCEtLSBAU3lzdGVtQXBpIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBkZWxldGUgY2FjaGUgZmlsZXMuCiAgICAgPHA+Tm90IGZvciB1c2UgYnkgdGhpcmQtcGFydHkgYXBwbGljYXRpb25zLiAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5ERUxFVEVfQ0FDSEVfRklMRVMiCkBAIC0yMzk4LDcgKzI0NDQsNyBAQAogICAgICAgICAgYWNjZXNzIHRoZSBuZXR3b3JrIGFuZCBhY3F1aXJlIHdha2Vsb2Nrcy4KICAgICAgICAgIDxwPk5vdCBmb3IgdXNlIGJ5IHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9ucy4gLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX0RFVklDRV9JRExFX1RFTVBfV0hJVEVMSVNUIgotICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic3lzdGVtfHNpZ25hdHVyZSIgLz4KKyAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgogCiAgICAgPCEtLSBQZXJtaXNzaW9uIGFuIGFwcGxpY2F0aW9uIG11c3QgaG9sZCBpbiBvcmRlciB0byB1c2UKICAgICAgICAgIHtAbGluayBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzI0FDVElPTl9SRVFVRVNUX0lHTk9SRV9CQVRURVJZX09QVElNSVpBVElPTlN9LgpAQCAtMjYxMiw3ICsyNjU4LDcgQEAKIAogICAgIDwhLS0gQWxsb3dzIG1hbmFnaW5nIChhZGRpbmcsIHJlbW92aW5nKSBmaW5nZXJwcmludCB0ZW1wbGF0ZXMuIFJlc2VydmVkIGZvciB0aGUgc3lzdGVtLiBAaGlkZSAtLT4KICAgICA8cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5NQU5BR0VfRklOR0VSUFJJTlQiCi0gICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzeXN0ZW18c2lnbmF0dXJlIiAvPgorICAgICAgICBhbmRyb2lkOnByb3RlY3Rpb25MZXZlbD0ic2lnbmF0dXJlfHByaXZpbGVnZWQiIC8+CiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHAgdG8gcmVzZXQgZmluZ2VycHJpbnQgYXR0ZW1wdCBjb3VudGVyLiBSZXNlcnZlZCBmb3IgdGhlIHN5c3RlbS4gQGhpZGUgLS0+CiAgICAgPHBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUkVTRVRfRklOR0VSUFJJTlRfTE9DS09VVCIKQEAgLTI3ODMsNiArMjgyOSwxMiBAQAogICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19FUEhFTUVSQUxfQVBQUyIKICAgICAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmUiIC8+CiAKKyAgICA8IS0tIEFsbG93cyByZWNlaXZpbmcgdGhlIHVzYWdlIG9mIG1lZGlhIHJlc291cmNlIGUuZy4gdmlkZW8vYXVkaW8gY29kZWMgYW5kCisgICAgICAgICBncmFwaGljIG1lbW9yeS4KKyAgICAgICAgIEBoaWRlIC0tPgorICAgIDxwZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfTUVESUFfUkVTT1VSQ0VfVVNBR0UiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpwcm90ZWN0aW9uTGV2ZWw9InNpZ25hdHVyZXxwcml2aWxlZ2VkIiAvPgorCiAgICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6cHJvY2Vzcz0ic3lzdGVtIgogICAgICAgICAgICAgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCiAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aGFzQ29kZT0iZmFsc2UiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfY29ycF9iYWRnZV9vZmYueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2NvcnBfYmFkZ2Vfb2ZmLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk5YmY3Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2NvcnBfYmFkZ2Vfb2ZmLnhtbApAQCAtMCwwICsxLDU2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDp3aWR0aD0iMjBkcCIKKyAgICBhbmRyb2lkOmhlaWdodD0iMjBkcCIKKyAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjIwIgorICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjIwIj4KKworICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjNjA3RDhCIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTAsMCBDMTUuNTIyOCwwLDIwLDQuNDc3MTUsMjAsMTAgQzIwLDE1LjUyMjgsMTUuNTIyOCwyMCwxMCwyMAorQzQuNDc3MTUsMjAsMCwxNS41MjI4LDAsMTAgQzAsNC40NzcxNSw0LjQ3NzE1LDAsMTAsMCBaIiAvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xLjkxNjY3LDEuOTE2NjcgTDE4LjA4MzMsMS45MTY2NyBMMTguMDgzMywxOC4wODMzIEwxLjkxNjY3LDE4LjA4MzMKK0wxLjkxNjY3LDEuOTE2NjcgWiIgLz4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI2ZmZmZmZiIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTExLjkxNjcsMTEuOTE2NyBMMTEuNDE2NywxMS45MTY3IEwxMS40MTY3LDEyLjgzMzMgTDguNSwxMi44MzMzIEw4LjUsMTEuOTE2NworTDQuMTY2NjcsMTEuOTE2NyBMNC4xNjY2NywxNC4zMzMzIEM0LjE2NjY3LDE0LjgzMzMsNC41ODMzMywxNS4yNSw1LjA4MzMzLDE1LjI1CitMMTQuNzUsMTUuMjUgQzE0LjkxNjcsMTUuMjUsMTUsMTUuMjUsMTUuMTY2NywxNS4xNjY3IEwxMS45MTY3LDExLjkxNjcgWiIgLz4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI2ZmZmZmZiIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE1LjgzMzMsMTMuNzUgTDE1LjgzMzMsMTEuOTE2NyBMMTQsMTEuOTE2NworQzE0LjY2NjcsMTIuNjY2NywxNS4zMzMzLDEzLjMzMzMsMTUuODMzMywxMy43NSBaIiAvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjZmZmZmZmIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNi4xNjY2Nyw2LjE2NjY3IEw0LjY2NjY3LDYuMTY2NjcgQzQuMTY2NjcsNi4xNjY2NywzLjc1LDYuNTgzMzMsMy43NSw3LjA4MzMzCitMMy43NSwxMCBDMy43NSwxMC41LDQuMTY2NjcsMTAuOTE2Nyw0LjY2NjY3LDEwLjkxNjcgTDguNSwxMC45MTY3IEw4LjUsMTAgTDEwLDEwCitMNi4xNjY2Nyw2LjE2NjY3IFoiIC8+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNmZmZmZmYiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik04LjA4MzMzLDYgTDguMDgzMzMsNS4xNjY2NyBMMTEuOTE2Nyw1LjE2NjY3IEwxMS45MTY3LDYuMDgzMzMgTDguMTY2NjcsNi4wODMzMworQzkuNjY2NjcsNy41ODMzMywxMS40MTY3LDkuMzMzMzMsMTIuOTE2NywxMC44MzMzIEwxNS4yNSwxMC44MzMzCitDMTUuNzUsMTAuODMzMywxNi4xNjY3LDEwLjQxNjcsMTYuMTY2Nyw5LjkxNjY3IEwxNi4xNjY3LDcuMDgzMzMKK0MxNi4xNjY3LDYuNTgzMzMsMTUuNzUsNi4xNjY2NywxNS4yNSw2LjE2NjY3IEwxMi44MzMzLDYuMTY2NjcgTDEyLjgzMzMsNS4yNQorTDExLjkxNjcsNC4zMzMzMyBMOC4wODMzMyw0LjMzMzMzIEw3LjE2NjY3LDUuMTY2NjcKK0M3LjQxNjY3LDUuNDE2NjcsNy43NSw1Ljc1LDguMDgzMzMsNiBaIiAvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjZmZmZmZmIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTUuNjgyNCwxNS42NzYgTDE0LjY4MDcsMTYuNjc3NyBMMy4yNDkyMSw1LjI0NjI0IEw0LjI1MDkzLDQuMjQ0NTIKK0wxNS42ODI0LDE1LjY3NiBaIiAvPgorPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX2Nsb3NlX2J1dHRvbl9kYXJrX2ZvY3VzZWQueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX2Nsb3NlX2J1dHRvbl9kYXJrX2ZvY3VzZWQueG1sCmluZGV4IGQ3YjE2N2RkLi4wNzk0ZWQzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2RhcmtfZm9jdXNlZC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX2Nsb3NlX2J1dHRvbl9kYXJrX2ZvY3VzZWQueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRlWD0iOC4wIgogICAgICAgICAgICBhbmRyb2lkOnRyYW5zbGF0ZVk9IjguMCIgPgogICAgICAgICA8cGF0aAotICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkZGRiIKKyAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjZmYwMDAwMDAiCiAgICAgICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNi45LDQuMGwtMi45LDIuOSA5LjEsOS4xIC05LjEsOS4yMDAwMDEgMi45LDIuNzk5OTk5IDkuMSwtOS4xIDkuMSw5LjEgMi45LC0yLjc5OTk5OSAtOS4xLC05LjIwMDAwMSA5LjEsLTkuMSAtMi45LC0yLjkgLTkuMSw5LjJ6Ii8+CiAgICAgPC9ncm91cD4KIDwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX2Nsb3NlX2J1dHRvbl9kYXJrX3VuZm9jdXNlZC54bWwgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2RhcmtfdW5mb2N1c2VkLnhtbAppbmRleCBlMmU4MWI5Li5iZDFkYjUxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2RhcmtfdW5mb2N1c2VkLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2RhcmtfdW5mb2N1c2VkLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgICBhbmRyb2lkOnRyYW5zbGF0ZVg9IjguMCIKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVZPSI4LjAiID4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjMzNGRkZGRkYiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzMzMDAwMDAwIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTYuOSw0LjBsLTIuOSwyLjkgOS4xLDkuMSAtOS4xLDkuMjAwMDAxIDIuOSwyLjc5OTk5OSA5LjEsLTkuMSA5LjEsOS4xIDIuOSwtMi43OTk5OTkgLTkuMSwtOS4yMDAwMDEgOS4xLC05LjEgLTIuOSwtMi45IC05LjEsOS4yeiIvPgogICAgIDwvZ3JvdXA+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9jbG9zZV9idXR0b25fbGlnaHRfZm9jdXNlZC54bWwgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2xpZ2h0X2ZvY3VzZWQueG1sCmluZGV4IDA3OTRlZDMuLmQ3YjE2N2RkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2xpZ2h0X2ZvY3VzZWQueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9jbG9zZV9idXR0b25fbGlnaHRfZm9jdXNlZC54bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVYPSI4LjAiCiAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRlWT0iOC4wIiA+CiAgICAgICAgIDxwYXRoCi0gICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI2ZmMDAwMDAwIgorICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkZGRiIKICAgICAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik02LjksNC4wbC0yLjksMi45IDkuMSw5LjEgLTkuMSw5LjIwMDAwMSAyLjksMi43OTk5OTkgOS4xLC05LjEgOS4xLDkuMSAyLjksLTIuNzk5OTk5IC05LjEsLTkuMjAwMDAxIDkuMSwtOS4xIC0yLjksLTIuOSAtOS4xLDkuMnoiLz4KICAgICA8L2dyb3VwPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2xpZ2h0X3VuZm9jdXNlZC54bWwgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfY2xvc2VfYnV0dG9uX2xpZ2h0X3VuZm9jdXNlZC54bWwKaW5kZXggYmQxZGI1MS4uZTJlODFiOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX2Nsb3NlX2J1dHRvbl9saWdodF91bmZvY3VzZWQueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9jbG9zZV9idXR0b25fbGlnaHRfdW5mb2N1c2VkLnhtbApAQCAtMjMsNyArMjMsNyBAQAogICAgICAgICAgICBhbmRyb2lkOnRyYW5zbGF0ZVg9IjguMCIKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVZPSI4LjAiID4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjMzMwMDAwMDAiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzMzRkZGRkZGIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTYuOSw0LjBsLTIuOSwyLjkgOS4xLDkuMSAtOS4xLDkuMjAwMDAxIDIuOSwyLjc5OTk5OSA5LjEsLTkuMSA5LjEsOS4xIDIuOSwtMi43OTk5OTkgLTkuMSwtOS4yMDAwMDEgOS4xLC05LjEgLTIuOSwtMi45IC05LjEsOS4yeiIvPgogICAgIDwvZ3JvdXA+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fZGFya19mb2N1c2VkLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fZGFya19mb2N1c2VkLnhtbAppbmRleCA3M2Q4MDhiLi5jMjMzOTBlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfbWF4aW1pemVfYnV0dG9uX2RhcmtfZm9jdXNlZC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9kYXJrX2ZvY3VzZWQueG1sCkBAIC0yMywxMCArMjMsMTAgQEAKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVYPSI4LjAiCiAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRlWT0iOC4wIiA+CiAgICAgICAgIDxwYXRoCi0gICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGRkZGRkZGIgorICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yLjAsNC4wbDAuMCwxNi4wbDI4LjAsMC4wTDMwLjAsNC4wTDIuMCw0LjB6TTI2LjAsMTYuMEw2LjAsMTYuMEw2LjAsOC4wbDIwLjAsMC4wTDI2LjAsMTYuMHoiLz4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjQjJGRkZGRkYiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0IyMDAwMDAwIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIuMCwyNC4wbDI4LjAsMC4wbDAuMCw0LjBsLTI4LjAsMC4weiIvPgogICAgIDwvZ3JvdXA+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fZGFya191bmZvY3VzZWQueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9kYXJrX3VuZm9jdXNlZC54bWwKaW5kZXggZGM3OWUxMC4uYTE5NGEzOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9kYXJrX3VuZm9jdXNlZC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9kYXJrX3VuZm9jdXNlZC54bWwKQEAgLTIzLDEwICsyMywxMCBAQAogICAgICAgICAgICBhbmRyb2lkOnRyYW5zbGF0ZVg9IjguMCIKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVZPSI4LjAiID4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjMzNGRkZGRkYiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzMzMDAwMDAwIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIuMCw0LjBsMC4wLDE2LjBsMjguMCwwLjBMMzAuMCw0LjBMMi4wLDQuMHpNMjYuMCwxNi4wTDYuMCwxNi4wTDYuMCw4LjBsMjAuMCwwLjBMMjYuMCwxNi4weiIvPgogICAgICAgICA8cGF0aAotICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiMzM0ZGRkZGRiIKKyAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjMzMwMDAwMDAiCiAgICAgICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMi4wLDI0LjBsMjguMCwwLjBsMC4wLDQuMGwtMjguMCwwLjB6Ii8+CiAgICAgPC9ncm91cD4KIDwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9saWdodF9mb2N1c2VkLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fbGlnaHRfZm9jdXNlZC54bWwKaW5kZXggYzIzMzkwZS4uNzNkODA4YiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9saWdodF9mb2N1c2VkLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfbWF4aW1pemVfYnV0dG9uX2xpZ2h0X2ZvY3VzZWQueG1sCkBAIC0yMywxMCArMjMsMTAgQEAKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVYPSI4LjAiCiAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRlWT0iOC4wIiA+CiAgICAgICAgIDxwYXRoCi0gICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgorICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGRkZGRiIKICAgICAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yLjAsNC4wbDAuMCwxNi4wbDI4LjAsMC4wTDMwLjAsNC4wTDIuMCw0LjB6TTI2LjAsMTYuMEw2LjAsMTYuMEw2LjAsOC4wbDIwLjAsMC4wTDI2LjAsMTYuMHoiLz4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjQjIwMDAwMDAiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0IyRkZGRkZGIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIuMCwyNC4wbDI4LjAsMC4wbDAuMCw0LjBsLTI4LjAsMC4weiIvPgogICAgIDwvZ3JvdXA+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fbGlnaHRfdW5mb2N1c2VkLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19kZWNvcl9tYXhpbWl6ZV9idXR0b25fbGlnaHRfdW5mb2N1c2VkLnhtbAppbmRleCBhMTk0YTM5Li5kYzc5ZTEwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfZGVjb3JfbWF4aW1pemVfYnV0dG9uX2xpZ2h0X3VuZm9jdXNlZC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX2RlY29yX21heGltaXplX2J1dHRvbl9saWdodF91bmZvY3VzZWQueG1sCkBAIC0yMywxMCArMjMsMTAgQEAKICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGVYPSI4LjAiCiAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRlWT0iOC4wIiA+CiAgICAgICAgIDxwYXRoCi0gICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzMzMDAwMDAwIgorICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiMzM0ZGRkZGRiIKICAgICAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yLjAsNC4wbDAuMCwxNi4wbDI4LjAsMC4wTDMwLjAsNC4wTDIuMCw0LjB6TTI2LjAsMTYuMEw2LjAsMTYuMEw2LjAsOC4wbDIwLjAsMC4wTDI2LjAsMTYuMHoiLz4KICAgICAgICAgPHBhdGgKLSAgICAgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjMzMwMDAwMDAiCisgICAgICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzMzRkZGRkZGIgogICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIuMCwyNC4wbDI4LjAsMC4wbDAuMCw0LjBsLTI4LjAsMC4weiIvPgogICAgIDwvZ3JvdXA+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19ub3RpZmljYXRpb25fYWxlcnQueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX25vdGlmaWNhdGlvbl9hbGVydC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ZGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS9pY19ub3RpZmljYXRpb25fYWxlcnQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNC4wZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE4LjQsMi4yTDE3LjAsMy42YzIuMCwxLjQgMy4zLDMuNyAzLjUsNi40bDIuMCwwLjBDMjIuMyw2LjggMjAuOCw0LjAgMTguNCwyLjJ6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzIzMUYyMCIvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik03LjEsMy42TDUuNywyLjJDMy4zLDQuMCAxLjcsNi44IDEuNSwxMC4wbDIuMCwwLjBDMy43LDcuMyA1LjAsNS4wIDcuMSwzLjZ6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzIzMUYyMCIvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOC41LDEwLjVjMC4wLC0zLjEgLTIuMSwtNS42IC01LjAsLTYuM0wxMy41LDMuNUMxMy41LDIuNyAxMi44LDIuMCAxMi4wLDIuMHMtMS41LDAuNyAtMS41LDEuNWwwLjAsMC43Yy0yLjksMC43IC01LjAsMy4yIC01LjAsNi4zTDUuNSwxNi4wbC0yLjAsMi4wbDAuMCwxLjBsMTcuMCwwLjBsMC4wLC0xLjBsLTIuMCwtMi4wTDE4LjUsMTAuNXpNMTMuMCwxNi41bC0yLjAsMC4wbDAuMCwtMi4wbDIuMCwwLjBMMTMuMCwxNi41ek0xMy4wLDEyLjVsLTIuMCwwLjBsMC4wLC02LjBsMi4wLDAuMEwxMy4wLDEyLjV6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzIzMUYyMCIvPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMi4wLDIyLjBjMS4xLDAuMCAyLjAsLTAuOSAyLjAsLTIuMEwxMC4wLDIwLjBDMTAuMCwyMS4xIDEwLjksMjIuMCAxMi4wLDIyLjB6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzIzMUYyMCIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcC54bWwgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfbm90aWZpY2F0aW9uX2Jsb2NrLnhtbApzaW1pbGFyaXR5IGluZGV4IDY3JQpjb3B5IGZyb20gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV90b3AueG1sCmNvcHkgdG8gY29yZS9yZXMvcmVzL2RyYXdhYmxlL2ljX25vdGlmaWNhdGlvbl9ibG9jay54bWwKaW5kZXggOTJlMDFhZi4uMjc2OTA3NDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvaWNfbm90aWZpY2F0aW9uX2Jsb2NrLnhtbApAQCAtMSw1ICsxLDUgQEAKIDwhLS0KLUNvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xOCw3ICsxOCw4IEBACiAgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisKICAgICA8cGF0aAogICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMjQuMCwyNC4wTDI0LjAsMC4wTDAuMCwwLjBsMC4wLDI0LjBMMjQuMCwyNC4wek0yMC4wLDE0LjBMNC4wLDE0LjBMNC4wLDQuMGwxNi4wLDAuMEwyMC4wLDE0LjB6Ii8+CisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMi4wLDIuMEM2LjQ4LDIuMCAyLjAsNi40OCAyLjAsMTIuMHM0LjQ4LDEwLjAgMTAuMCwxMC4wIDEwLjAsLTQuNDggMTAuMCwtMTAuMFMxNy41MiwyLjAgMTIuMCwyLjB6TTQuMCwxMi4wYzAuMCwtNC40MiAzLjU4LC04LjAgOC4wLC04LjAgMS44NSwwLjAgMy41LDAuNjMgNC45LDEuNjlMNS42OSwxNi45QzQuNjMsMTUuNTUgNC4wLDEzLjg1IDQuMCwxMi4wem04LjAsOC4wYy0xLjg1LDAuMCAtMy41NSwtMC42MyAtNC45LC0xLjY5TDE4LjMxLDcuMUMxOS4zNyw4LjQ1IDIwLjAsMTAuMTUgMjAuMCwxMi4wYzAuMCw0LjQyIC0zLjU4LDguMCAtOC4wLDguMHoiLz4KIDwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL3NlZWtiYXJfdGlja19tYXJrX21hdGVyaWFsLnhtbApzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCmNvcHkgdG8gY29yZS9yZXMvcmVzL2RyYXdhYmxlL3NlZWtiYXJfdGlja19tYXJrX21hdGVyaWFsLnhtbAppbmRleCA3ZDI4ZjljLi5kMmMzOGEyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwKKysrIGIvY29yZS9yZXMvcmVzL2RyYXdhYmxlL3NlZWtiYXJfdGlja19tYXJrX21hdGVyaWFsLnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDYgKzE0LDEwIEBACiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiAKLTxyZXNvdXJjZXM+Ci0gICAgPGl0ZW0gbmFtZT0iZG9jc19hY3Rpdml0eSIgdHlwZT0ibGF5b3V0Ij5AbGF5b3V0L2ZpeGVkX2xheW91dDwvaXRlbT4KLTwvcmVzb3VyY2VzPgorPHNoYXBlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICBhbmRyb2lkOnNoYXBlPSJvdmFsIgorICAgICAgIGFuZHJvaWQ6dGludD0iP2F0dHIvY29sb3JDb250cm9sTm9ybWFsIj4KKyAgICA8c2l6ZSBhbmRyb2lkOndpZHRoPSJAZGltZW4vcHJvZ3Jlc3NfYmFyX2hlaWdodF9tYXRlcmlhbCIKKyAgICAgICAgICBhbmRyb2lkOmhlaWdodD0iQGRpbWVuL3Byb2dyZXNzX2Jhcl9oZWlnaHRfbWF0ZXJpYWwiIC8+CisgICAgPHNvbGlkIGFuZHJvaWQ6Y29sb3I9IkBjb2xvci93aGl0ZSIgLz4KKzwvc2hhcGU+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbCBiL2NvcmUvcmVzL3Jlcy9kcmF3YWJsZS93b3JrX3dpZGdldF9tYXNrX3ZpZXdfYmFja2dyb3VuZC54bWwKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19ib3R0b20ueG1sCmNvcHkgdG8gY29yZS9yZXMvcmVzL2RyYXdhYmxlL3dvcmtfd2lkZ2V0X21hc2tfdmlld19iYWNrZ3JvdW5kLnhtbAppbmRleCBmMTFiNjkwLi4xN2YwZGJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvZHJhd2FibGUvd29ya193aWRnZXRfbWFza192aWV3X2JhY2tncm91bmQueG1sCkBAIC0xLDMgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDwhLS0KIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKQEAgLTEzLDEyICsxNCw3IEBACiAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsMC4wbDAuMCwyNC4wbDI0LjAsMC4wTDI0LjAsMC4wTDAuMCwwLjB6TTQuMCwxMC4wbDE2LjAsMC4wbDAuMCwxMC4wTDQuMCwyMC4wTDQuMCwxMC4weiIvPgotPC92ZWN0b3I+CisgPHNoYXBlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgYW5kcm9pZDpzaGFwZT0icmVjdGFuZ2xlIj4KKyAgIDxwYWRkaW5nIGFuZHJvaWQ6bGVmdD0iNWRwIiBhbmRyb2lkOnJpZ2h0PSI1ZHAiIGFuZHJvaWQ6dG9wPSI1ZHAiIGFuZHJvaWQ6Ym90dG9tPSI1ZHAiLz4KKyAgIDxzdHJva2UgYW5kcm9pZDp3aWR0aD0iMWRwIiBhbmRyb2lkOmNvbG9yPSIjQ0NDQ0NDIiAvPgorIDwvc2hhcGU+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L2RlY29yX2NhcHRpb24ueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9kZWNvcl9jYXB0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjQ2NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9kZWNvcl9jYXB0aW9uLnhtbApAQCAtMCwwICsxLDUyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorKioKKyoqIENvcHlyaWdodCAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworLS0+CisKKzxjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuRGVjb3JDYXB0aW9uVmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpkZXNjZW5kYW50Rm9jdXNhYmlsaXR5PSJiZWZvcmVEZXNjZW5kYW50cyIgPgorICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2FwdGlvbiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iZW5kIgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZGVjb3JfY2FwdGlvbl90aXRsZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJmYWxzZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6ZGVzY2VuZGFudEZvY3VzYWJpbGl0eT0iYmxvY2tzRGVzY2VuZGFudHMiID4KKyAgICAgICAgPEJ1dHRvbgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWF4aW1pemVfd2luZG93IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzMmRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjVkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8ZW5kIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL21heGltaXplX2J1dHRvbl90ZXh0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2RlY29yX21heGltaXplX2J1dHRvbl9kYXJrIiAvPgorICAgICAgICA8QnV0dG9uCisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jbG9zZV93aW5kb3ciCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjMyZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzMmRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iNWRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iNGRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxlbmQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvY2xvc2VfYnV0dG9uX3RleHQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvZGVjb3JfY2xvc2VfYnV0dG9uX2RhcmsiIC8+CisgICAgPC9MaW5lYXJMYXlvdXQ+Cis8L2NvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5EZWNvckNhcHRpb25WaWV3PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9kZWNvcl9jYXB0aW9uX2RhcmsueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9kZWNvcl9jYXB0aW9uX2RhcmsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWQyMjg5Li4wMDAwMDAwCi0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvZGVjb3JfY2FwdGlvbl9kYXJrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0qKgotKiogQ29weXJpZ2h0IDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0tLT4KLQotPGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5EZWNvckNhcHRpb25WaWV3IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6ZGVzY2VuZGFudEZvY3VzYWJpbGl0eT0iYmVmb3JlRGVzY2VuZGFudHMiID4KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2FwdGlvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iZW5kIgotICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9kZWNvcl9jYXB0aW9uX3RpdGxlIgotICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiCi0gICAgICAgIGFuZHJvaWQ6ZGVzY2VuZGFudEZvY3VzYWJpbGl0eT0iYmxvY2tzRGVzY2VuZGFudHMiID4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tYXhpbWl6ZV93aW5kb3ciCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iNWRwIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8ZW5kIgotICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvbWF4aW1pemVfYnV0dG9uX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9kZWNvcl9tYXhpbWl6ZV9idXR0b25fZGFyayIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jbG9zZV93aW5kb3ciCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iNWRwIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8ZW5kIgotICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvY2xvc2VfYnV0dG9uX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9kZWNvcl9jbG9zZV9idXR0b25fZGFyayIgLz4KLSAgICA8L0xpbmVhckxheW91dD4KLTwvY29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkRlY29yQ2FwdGlvblZpZXc+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L2RlY29yX2NhcHRpb25fbGlnaHQueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9kZWNvcl9jYXB0aW9uX2xpZ2h0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmNjYxZS4uMDAwMDAwMAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L2RlY29yX2NhcHRpb25fbGlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSoqCi0qKiBDb3B5cmlnaHQgMjAxNSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qKgotKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKioKLSoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLS0tPgotCi08Y29tLmFuZHJvaWQuaW50ZXJuYWwud2lkZ2V0LkRlY29yQ2FwdGlvblZpZXcgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpkZXNjZW5kYW50Rm9jdXNhYmlsaXR5PSJiZWZvcmVEZXNjZW5kYW50cyIgPgotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jYXB0aW9uIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJlbmQiCi0gICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2RlY29yX2NhcHRpb25fdGl0bGUiCi0gICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJmYWxzZSIKLSAgICAgICAgYW5kcm9pZDpkZXNjZW5kYW50Rm9jdXNhYmlsaXR5PSJibG9ja3NEZXNjZW5kYW50cyIgPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21heGltaXplX3dpbmRvdyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzMmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzMmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSI1ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjRkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxlbmQiCi0gICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9tYXhpbWl6ZV9idXR0b25fdGV4dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2RlY29yX21heGltaXplX2J1dHRvbl9saWdodCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jbG9zZV93aW5kb3ciCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iNWRwIgotICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSI0ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8ZW5kIgotICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvY2xvc2VfYnV0dG9uX3RleHQiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9kZWNvcl9jbG9zZV9idXR0b25fbGlnaHQiIC8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci08L2NvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5EZWNvckNhcHRpb25WaWV3PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX2FjdGlvbi54bWwKaW5kZXggNjI2MDJkOC4uMzk4ZjUyZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9hY3Rpb24ueG1sCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgogICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iNGRwIgotICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAY29sb3Ivc2Vjb25kYXJ5X3RleHRfbWF0ZXJpYWxfbGlnaHQiCisgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci9ub3RpZmljYXRpb25fZGVmYXVsdF9jb2xvciIKICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgYW5kcm9pZDplbGxpcHNpemU9ImVuZCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uX2JhY2tncm91bmQiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0LnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjJlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0LnhtbApAQCAtMCwwICsxLDYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICB+IENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgIH4KKyAgfiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgIC0tPgorCis8IS0tIE5vdGU6IHRoaXMgbGF5b3V0IGlzIGluY2x1ZGVkIGZyb20gYSB2aWV3IHN0dWI7IGxheW91dCBhdHRyaWJ1dGVzIHdpbGwgYmUgb3ZlcnJpZGRlbi4gLS0+Cis8TGluZWFyTGF5b3V0CisgICAgICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfY29udGFpbmVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3N0YXJ0Ij4KKworICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjFkaXAiCisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjdGlvbl9kaXZpZGVyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNWRwIgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvbm90aWZpY2F0aW9uX3RlbXBsYXRlX2RpdmlkZXIiIC8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMyIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9lbmQiCisgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlJlcGx5IgorICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIiAvPgorCisgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIgorICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5SZXBseSIKKyAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIgLz4KKworICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8xIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNWRwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uUmVwbHkiCisgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmFzZS54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iYXNlLnhtbAppbmRleCBiNjllYjI0Li5mZGJiYmQ2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iYXNlLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iYXNlLnhtbApAQCAtMjUsMTIgKzI1LDEyIEBACiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9tYWluX2NvbHVtbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJ0b3AiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3N0YXJ0IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fdG9wIgotICAgICAgICBhbmRyb2lkOm1pbkhlaWdodD0iQGRpbWVuL25vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9ib3R0b20iCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICA+CiAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMSIgLz4KQEAgLTQyLDcgKzQyLDcgQEAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iYm90dG9tIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxMWRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIj4KKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCIgPgogICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3Byb2dyZXNzIiAvPgogICAgIDwvRnJhbWVMYXlvdXQ+CiAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9yaWdodF9pY29uIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX2Jhc2UueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX2Jhc2UueG1sCmluZGV4IGViMDJlOGIuLmRmZDcyYzAgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19iYXNlLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfYmFzZS54bWwKQEAgLTI1LDcgKzI1LDcgQEAKICAgICA8RnJhbWVMYXlvdXQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zdGF0dXNfYmFyX2xhdGVzdF9ldmVudF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2hlaWdodCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9InRvcCIKICAgICAgICAgYW5kcm9pZDp0YWc9ImJhc2UiCiAgICAgICAgID4KQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX3N0YXJ0IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2VuZCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl90b3AiCi0gICAgICAgICAgICBhbmRyb2lkOm1pbkhlaWdodD0iQGRpbWVuL25vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fYm90dG9tIgogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCiAgICAgICAgICAgICA+CiAgICAgICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTEiIC8+CkBAIC01NSw2ICs1NSwxMSBAQAogICAgICAgICA8L0ZyYW1lTGF5b3V0PgogICAgICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3JpZ2h0X2ljb24iIC8+CiAgICAgPC9GcmFtZUxheW91dD4KKyAgICA8Vmlld1N0dWIgYW5kcm9pZDpsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHQiCisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV9jb250YWluZXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgLz4KICAgICA8aW5jbHVkZQogICAgICAgICBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX2FjdGlvbl9saXN0IgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX21lZGlhLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19tZWRpYS54bWwKaW5kZXggMDQyN2M4YS4uYzNkYjdjNSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX21lZGlhLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfbWVkaWEueG1sCkBAIC0zMyw2ICszMyw3IEBACiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fdG9wIgogICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iQGRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2JvdHRvbSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIyNGRwIgogICAgICAgICBhbmRyb2lkOmxheW91dF90b1N0YXJ0T2Y9IkBpZC9yaWdodF9pY29uIgogICAgICAgICBhbmRyb2lkOm1pbkhlaWdodD0iQGRpbWVuL25vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiCmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfcGljdHVyZS54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfcGljdHVyZS54bWwKaW5kZXggNThlM2QxYi4uNWMwN2I5YiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3BpY3R1cmUueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ19waWN0dXJlLnhtbApAQCAtNTIsNiArNTIsMTMgQEAKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjE2ZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckNyb3AiCiAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgPFZpZXdTdHViIGFuZHJvaWQ6bGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSItMTZkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9Ii0xNmRwIgorICAgICAgICAgICAgICAgIC8+CiAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uX2xpc3QiIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiA8L0ZyYW1lTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3RleHQueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfYmlnX3RleHQueG1sCmluZGV4IDllMDEwZjIuLmViYWZmYzMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2JpZ190ZXh0LnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfdGV4dC54bWwKQEAgLTM5LDEwICszOSwxMSBAQAogICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjEzZHAiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fYm90dG9tIgogICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0idG9wIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxLjVkcCIKICAgICAgICAgICAgID4KICAgICAgICAgICAgIDxjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuSW1hZ2VGbG9hdGluZ1RleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvYmlnX3RleHQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbiIKQEAgLTYyLDYgKzYzLDEzIEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvbm90aWZpY2F0aW9uX3dvcmtfcHJvZmlsZV9jb250ZW50X2Rlc2NyaXB0aW9uIgogICAgICAgICAgICAgICAgIC8+CiAgICAgICAgIDwvTGluZWFyTGF5b3V0PgorICAgICAgICA8Vmlld1N0dWIgYW5kcm9pZDpsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfY29udGFpbmVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9Ii0xNmRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iLTE2ZHAiCisgICAgICAgIC8+CiAgICAgICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9ub3RpZmljYXRpb25fbWF0ZXJpYWxfYWN0aW9uX2xpc3QiIC8+CiAgICAgPC9MaW5lYXJMYXlvdXQ+CiAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9yaWdodF9pY29uIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfaW5ib3gueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfaW5ib3gueG1sCmluZGV4IDhjMGFiYzkuLjE0YmY4OTkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX2luYm94LnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9pbmJveC54bWwKQEAgLTEyMywxMyArMTIzLDYgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgICAgIC8+Ci0gICAgICAgIDxGcmFtZUxheW91dAotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9pbmJveF9lbmRfcGFkIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMTNkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKLSAgICAgICAgLz4KICAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl9tYXRlcmlhbF9hY3Rpb25fbGlzdCIgLz4KICAgICA8L0xpbmVhckxheW91dD4KICAgICA8aW5jbHVkZSBsYXlvdXQ9IkBsYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3JpZ2h0X2ljb24iIC8+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9tZWRpYS54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9tZWRpYS54bWwKaW5kZXggZGM0YWZiOC4uZjBjZWQ1ZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfbWF0ZXJpYWxfbWVkaWEueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX21hdGVyaWFsX21lZGlhLnhtbApAQCAtMjksNyArMjksNyBAQAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fbWFpbl9jb2x1bW4iCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL25vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiMwMDAwMDAwMCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IkBkaW1lbi9ub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fc3RhcnQiCkBAIC00Myw2ICs0Myw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJmaWxsX3ZlcnRpY2FsIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9ub3RpZmljYXRpb25fbWluX2NvbnRlbnRfaGVpZ2h0IgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSJAZGltZW4vbm90aWZpY2F0aW9uX2NvbnRlbnRfbWFyZ2luX2JvdHRvbSIKICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICAgICAgPgogICAgICAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxIi8+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl90ZW1wbGF0ZV9wYXJ0X2xpbmUxLnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTEueG1sCmluZGV4IGU3YWM0MDguLjMwOGIzMGYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTEueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTEueG1sCkBAIC0yMCw3ICsyMCw2IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMWRwIgogICAgID4KICAgICA8VGV4dFZpZXcgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIKICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5UaXRsZSIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvbm90aWZpY2F0aW9uX3RlbXBsYXRlX3BhcnRfbGluZTMueG1sIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMy54bWwKaW5kZXggNzYzMzdhYy4uZGM0N2E0OCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMy54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC9ub3RpZmljYXRpb25fdGVtcGxhdGVfcGFydF9saW5lMy54bWwKQEAgLTIwLDE3ICsyMCwxOCBAQAogICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKKyAgICBhbmRyb2lkOmdyYXZpdHk9InRvcCIKICAgICA+CiAgICAgPFRleHRWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvdGV4dCIKICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbiIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJ0b3AiCiAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1hcnF1ZWUiCiAgICAgICAgIGFuZHJvaWQ6ZmFkaW5nRWRnZT0iaG9yaXpvbnRhbCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSIxLjVkcCIKICAgICAgICAgLz4KICAgICA8SW1hZ2VWaWV3IGFuZHJvaWQ6aWQ9IkAraWQvcHJvZmlsZV9iYWRnZV9saW5lMyIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9ub3RpZmljYXRpb25fYmFkZ2Vfc2l6ZSIKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGV4dF9kcmFnX3RodW1ibmFpbC54bWwgYi9jb3JlL3Jlcy9yZXMvbGF5b3V0L3RleHRfZHJhZ190aHVtYm5haWwueG1sCmluZGV4IDYzZDJjMDUuLmIxYTU4Y2QgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvdGV4dF9kcmFnX3RodW1ibmFpbC54bWwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC90ZXh0X2RyYWdfdGh1bWJuYWlsLnhtbApAQCAtMSw2ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CiA8IS0tCi0vKiBhcHBzL2NvbW1vbi9hc3NldHMvZGVmYXVsdC9kZWZhdWx0L3NraW5zL1N0YXR1c0Jhci54bWwKICoqCiAqKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogKioKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy9sYXlvdXQvd29ya193aWRnZXRfbWFza192aWV3LnhtbCBiL2NvcmUvcmVzL3Jlcy9sYXlvdXQvd29ya193aWRnZXRfbWFza192aWV3LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTg2ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL2xheW91dC93b3JrX3dpZGdldF9tYXNrX3ZpZXcueG1sCkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8RnJhbWVMYXlvdXQgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSIjRjMzNzQyNDgiID4KKworICAgIDxJbWFnZVZpZXcgYW5kcm9pZDppZD0iQCtpZC93b3JrX3dpZGdldF9hcHBfaWNvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIvPgorCisgICAgPEltYWdlVmlldworICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iYm90dG9tfHJpZ2h0IgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjRkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luUmlnaHQ9IjRkcCIKKyAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19jb3JwX2JhZGdlX29mZiIgLz4KKzwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCBlYWY4MmZiLi5jOTQ1NDU5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJTbHVpdCBub3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5ob3VkIHZlcnN0ZWVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVmVpbGlnbW9kdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXN0ZWxzZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvb25saWsiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlNsdWl0IHBlcnNvb25saWtlIGRhdGEgc29vcyBrcmVkaWV0a2FhcnRub21tZXJzIGVuIHdhZ3dvb3JkZSBpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkJlaGVlciB2ZXJ0b29uc2tlcm12ZXJncm90aW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkJlaGVlciBkaWUgdmVydG9vbnNrZXJtIHNlIHpvZW12bGFrIGVuIHBvc2lzaW9uZXJpbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iVm9lciBnZWJhcmUgdWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJLYW4gdGlrLCBzd2llcCwga255cCBlbiBhbmRlciBnZWJhcmUgdWl0dm9lci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkZWFrdGl2ZWVyIG9mIHZlcmFuZGVyIHN0YXR1c2JhbGsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gZGllIHN0YXR1c2JhbGsgdGUgZGVha3RpdmVlciBlbiBzdGVsc2VsaWtvbmUgYnkgdGUgdm9lZyBvZiB0ZSB2ZXJ3eWRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4id2VlcyBkaWUgc3RhdHVzYmFsayI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGZvdG9cJ3MgZW4gdmlkZW9cJ3MgbWV0IGRpZSBrYW1lcmEgdGUgbmVlbS4gSGllcmRpZSB0b2VzdGVtbWluZyBsYWF0IGRpZSBwcm9ncmFtIHRvZSBvbSBkaWUga2FtZXJhIHRlIGVuaWdlciB0eWQgc29uZGVyIGpvdSBiZXZlc3RpZ2luZyB0ZSBnZWJydWlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJiZWhlZXIgdmlicmFzaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkxhYXQgZGllIHByb2dyYW0gdG9lIG9tIGRpZSB2aWJyYXRvciB0ZSBiZWhlZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImJlaGVlciBmbGl0c2xpZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gZGllIGZsaXRzbGlnIHRlIGJlaGVlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJza2FrZWwgZm9vbm5vbW1lcnMgZGlyZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTGFhdCBkaWUgcHJvZ3JhbSB0b2Ugb20gdGVsZWZvb25ub21tZXJzIHNvbmRlciBqb3UgdHVzc2VudHJlZGUgdGUgYmVsLiBEaXQga2FuIHRvdCBvbnZlcndhZ3RlIGhlZmZpbmdzIG9mIG9wcm9lcGUgbGVpLiBMZXQgZGFhcm9wIGRhdCBkaXQgbmllIGRpZSBwcm9ncmFtIHRvZWxhYXQgb20gbm9vZG5vbW1lcnMgdGUgYmVsIG5pZS4gS3dhYWR3aWxsaWdlIHByb2dyYW1tZSBrYW4gam91IGdlbGQga29zIGRldXIgb3Byb2VwZSBzb25kZXIgam91IGJldmVzdGlnaW5nIHRlIG1hYWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJ0b2VnYW5nIHRvdCBraXRzYm9vZHNrYXBvcHJvZXBkaWVucyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iU255Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpZWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGxhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGxhayBhcyBza29vbnRla3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlZlcnZhbmcuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVmVlIHVpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waWVlciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJLaWVzIHRla3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+Ik9udGRvZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkhlcmRvZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc2tldXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IlZvZWcgYnkgd29vcmRlYm9layI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iVmVlIHVpdCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJWZXJhbmRlciBtdXVycGFwaWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iS2VubmlzZ2V3aW5nbHVpc3RlcmFhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iVG9lc3RhbmR2ZXJza2FmZmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iS2VubmlzZ2V3aW5nYXNzaXN0ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZ2Vha3RpdmVlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBpcyBnZWFrdGl2ZWVyIGRldXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iUmFhayBvbSBkaWUgbmV0d2VyayB0ZSBiZXN0dXVyLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJPcGdlZGF0ZWVyIGRldXIgam91IGFkbWluaXN0cmF0ZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJEZXVyIGpvdSBhZG1pbmlzdHJhdGV1ciB1aXRnZXZlZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iT20gYmF0dGVyeWxld2UgdGUgaGVscCB2ZXJiZXRlciwgdmVybWluZGVyIGJhdHRlcnliZXNwYWFyZGVyIGpvdSB0b2VzdGVsIHNlIHdlcmt2ZXJyaWd0aW5nIGVuIGJlcGVyayB2aWJyYXNpZSwgbGlnZ2luZ2RpZW5zdGUgZW4gZGllIG1lZXN0ZSBhZ3Rlcmdyb25kZGF0YS4gRS1wb3MsIGJvb2Rza2FwcGUgZW4gYW5kZXIgcHJvZ3JhbW1lIHdhdCBvcCBzaW5rcm9uaXNlcmluZyBzdGFhdG1hYWssIHNhbCBkYWxrIG5pZSBvcGRhdGVlciB0ZW5zeSBqeSBodWxsZSBvb3BtYWFrIG5pZS5cblxuQmF0dGVyeWJlc3BhYXJkZXIgc2tha2VsIG91dG9tYXRpZXMgYWYgd2FubmVlciBqb3UgdG9lc3RlbCBiZXNpZyBpcyBvbSB0ZSBsYWFpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iR2VibG9ra2VlcjogTW9ldCBub29pdCBoaWVyZGllIGtlbm5pc2dld2luZ3Mgd3lzIG5pZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMYWFnOiBXeXMgc29uZGVyIGtsYW5rIGFhbiBkaWUgb25kZXJrYW50IHZhbiBkaWUga2VubmlzZ2V3aW5nbHlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWFsOiBXeXMgaGllcmRpZSBrZW5uaXNnZXdpbmdzIHNvbmRlciBrbGFuayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSG9vZzogV3lzIGFhbiBkaWUgYm9rYW50IHZhbiBkaWUga2VubmlzZ2V3aW5nc2x5cyBlbiBtYWFrIFwnbiBnZWx1aWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iRHJpbmdlbmQ6IFZlcnNreW4gdmx1Z3RpZyBvcCBkaWUgc2tlcm0gZW4gbWFhayBcJ24gZ2VsdWlkIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIG1pbnV0ZSBsYW5rICh0b3QgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RWVuIG1pbnV1dCBsYW5rICh0b3QgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBnZWtpZXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJEaXZlcnNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+Ikp5IHN0ZWwgZGllIGJlbGFuZ3Jpa2hlaWQgdmFuIGhpZXJkaWUga2VubmlzZ2V3aW5ncy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkRpdCBpcyBiZWxhbmdyaWsgYXMgZ2V2b2xnIHZhbiBkaWUgbWVuc2Ugd2F0IGJldHJva2tlIGlzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggMDNkYmNhZS4uMTdiNWEyOSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4Yqg4YiB4YqVIOGJhuGIjeGNjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhi63hi5jhibbhib0g4Ymw4Yuw4Yml4YmA4YuL4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4Yuo4Yia4Yur4Yi14Ymw4Yib4Yid4YqVIOGIgeGKkOGJsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg4Yi14Yit4YuT4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLhi6jhjI3hiI0iPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuGKpeGKleGLsCDhi6jhiq3hiKzhi7LhibUg4Yqr4Yit4Yu1IOGJgeGMpeGIruGJvSDhiqXhipMg4Yuo4Yut4YiI4Y2NIOGJg+GIi+GJtSDhi6vhiIkg4Yuo4YyN4YiNIOGLjeGIguGJpSDhi6vhiqvhibXhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IuGLqOGImOGJhuGMo+GMoOGIquGLqyDhiJvhiLPhi6sg4Yql4YqV4Yuy4YyO4YiLIOGKoOGLsOGIq+GIqOGMjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLhi6jhiJvhiLPhi6vhi43hipUg4Yuo4Yib4YyJ4YurIOGLsOGIqOGMgyDhiqXhipMg4Yqg4YmA4Yib4YiY4YylIOGLreGJhuGMo+GMoOGIqeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuGLqOGMo+GJtSDhiJ3hiI3hiq3hibbhib3hipUg4Yur4Yqo4YqT4YuN4YqRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLhiJjhibMg4Yib4Yu14Yio4YyN4Y2jIOGIm+GKleGIuOGIq+GJsOGJteGNoyDhiJjhiYbhipXhjKDhjKUg4Yql4YqTIOGIjOGIjuGJvSDhi6jhjKPhibUg4Yid4YiN4Yqt4Ym24Ym94YqVIOGIm+GKqOGKk+GLiOGKlSDhi63hib3hiIvhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLhi6jhiIHhipThibQg4Yqg4Yie4YiMIOGKoOGJpuGLneGKlSDhi4jhi63hiJ0g4YmA4Yut4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuGLqOGIteGIreGLk+GJtSDhiqDhi7bhi47hib3hipUg4YuI4YuwIOGIgeGKlOGJsyDhiqDhiJ7hiIwg4YiL4YiI4Yib4Yi14Ym74YiNIOGLiOGLreGInSDhiIjhiJvhiqjhiI0g4Yql4YqTIOGIiOGIm+GIteGLiOGMiOGLtSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2h4Y2hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuGLqOGIgeGKlOGJsyDhiqDhiJ7hiIwg4YiY4YiG4YqVIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGJoOGKq+GInOGIq+GLjSDhjY7hibbhi47hib3hipXhipMg4Ymq4Yuy4Yuu4YuO4Ym94YqVIOGKpeGKleGLsuGLq+GKkOGIsyDhi63hjYjhiYXhi7XhiIjhibPhiI3hjaIg4Yut4YiFIOGNiOGJg+GLtSDhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yqr4Yic4Yir4YuN4YqVIOGJoOGIm+GKleGKm+GLjeGInSDhjIrhi5wg4Yur4YiL4YqV4YmwIOGIm+GIqOGMi+GMiOGMqyDhiqXhipXhi7LhjKDhiYDhiJ0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuGKkOGLm+GIqiDhibDhiYbhjKPhjKDhiK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuGKkOGLm+GIquGLjeGKlSDhiIjhiJjhiYbhjKPhjKDhiK0g4YiI4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLreGNiOGJheGLs+GIieGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLhi6jhiaXhiK3hiIPhipXhiaXhiI3hjK3hibMg4Ymw4YmG4Yyj4Yyg4YitIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLhi6jhiaXhiI3hjK3hibMg4Yml4Yit4YiD4YqR4YqVIOGIiOGImOGJhuGMo+GMoOGIrSDhiIjhiJjhibDhjI3hiaDhiKrhi6vhi40g4Yut4Y2I4YmF4Yuz4YiJ4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4Ymg4YmA4Yyl4YmzIOGIteGIjeGKrSDhiYHhjKXhiK7hib0g4Yuw4YuN4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuGImOGJsOGMjeGJoOGIquGLq+GLjSDhi6vhiIvhipXhibAg4Yyj4YiN4YmDIOGMiOGJpeGKkOGJtSDhi6jhiLXhiI3hiq0g4YmB4Yyl4Yiu4Ym9IOGIi+GLrSDhiqXhipXhi7Lhi7Dhi43hiI0g4Yut4Y2I4YmF4Yu14YiI4Ymz4YiN4Y2iIOGLreGIhSDhi6vhiI3hibDhjKDhiaDhiYEg4Yqt4Y2N4Yur4YuO4Ym94YqVIOGLiOGLreGInSDhjKXhiKrhi47hib3hipUg4YiK4Yur4Yi14Yqo4Ym14YiNIOGLreGJveGIi+GIjeGNoiDhi63hiIUg4YiY4Ymw4YyN4Ymg4Yiq4Yur4YuNIOGLqOGLteGKleGMiOGJsOGKmyDhiLXhiI3hiq0g4YmB4Yyl4Yiu4Ym94YqVIOGKpeGKleGLsuGLsOGLjeGIjSDhiqXhipXhi7DhiJvhi63hjYjhiYXhi7XhiIjhibUg4YiN4YmlIOGJoOGIjeGNoiDhibDhipXhiq7hiI0g4Yqg4YuY4YiNIOGImOGJsOGMjeGJoOGIquGLq+GLjuGJvSDhi6vhiIvhipXhibAg4Yib4Yio4YyL4YyI4YyrIOGMpeGIquGLjuGJveGKlSDhiaDhiJvhi7XhiKjhjI0g4YyI4YqV4YuY4YmlIOGIiuGLq+GIteGLiOGMoeGIhSDhi63hib3hiIvhiInhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IuGLqOGKoOGLreGKpOGIneGKpOGItSDhjKXhiKog4Yqg4YyI4YiN4YyN4YiO4Ym14YqVIOGLreGLsOGIreGIs+GIjSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4YmB4Yio4YylIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLhjI3hiIvhiaPhjK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLhiIjhjKXhjY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuGKpeGKleGLsCDhiLXhipDhjKMg4Yqg4YiN4YmjIOGMveGIgeGNjSDhiIjhjKXhjY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuGJsOGKqy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLhiLDhiK3hi50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuGLqFVSTCDhiYXhjIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLhjYXhiIHhjY0g4Yid4Yio4YylIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLhiYDhiI3hiaXhiLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuGLteGMiOGInSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLhi6jhjYXhiIHhjY0g4Yid4Yit4YyrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuGLiOGLsCDhiJjhi53hjIjhiaAg4YmD4YiL4Ym1IOGKoOGKreGIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4Yiw4Yit4YudIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuGIjeGMo+GNjSDhiIjhi43hjKUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLhiJvhiLPhi4jhiYLhi6sg4Yqg4Yuz4Yib4YytIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLhi6jhiIHhipThibMg4Yqg4YmF4Yir4YmiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Yuo4Yib4Yiz4YuI4YmC4YurIOGIqOGLs+GJtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOGKkOGJheGJt+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiDhiaA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7hjIjhiaXhiK/hiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLhiqDhi43hibPhiKjhiJjhiKjhiaUg4YiI4Yib4Yuw4Yir4YyA4Ym1ICDhipXhiqvhjaIiPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4Ymg4Yqg4Yi14Ymw4Yuz4Yuz4Yiq4YuOIOGJsOGLmOGIneGKl+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4Ymg4Yql4Yit4Yi14YuOIOGKoOGIteGJsOGLs+GLs+GIqiDhibDhiLDhiK3hi5/hiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuGLqOGJo+GJteGIqiDhi5Xhi7XhiJzhipUg4YiI4Yib4Yi74Yi74YiNIOGIm+GMiOGLnSDhiqXhipXhi7LhibvhiI3hjaMg4Yqi4Yic4Yut4YiN4Y2jIOGImOGIjeGLleGKreGJtSDhiqDhiIvhiIvhiq0g4Yql4YqTIOGIjOGIjuGJvSDhiaDhiJvhiJjhiLPhiLDhiI0g4YiL4YutIOGLqOGImuGImOGIqOGKruGLmSDhiJjhibDhjI3hiaDhiKrhi6vhi47hib0g4Yql4Yit4Yi14YuOIOGKq+GIjeGKqOGNiOGJseGLi+GJuOGLjSDhiaDhiYDhiK0g4Yqg4Yut4YuY4Yid4YqR4Yid4Y2iXG5cbuGLqOGJo+GJteGIqiDhioPhi63hiI0g4YmG4Yyj4YmiIOGLqOGKpeGIreGIteGLjiDhiJjhiKPhiKrhi6sg4YqD4Yut4YiNIOGJoOGImuGInuGIi+GJoOGJtSDhjIrhi5wg4Ymg4Yir4Yi1LeGIsOGIrSDhi63hjKDhjYvhiI3hjaIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuGLqOGJs+GMiOGLsOGNpiDhiqXhipDhip3hiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGNiOGNheGIniDhiqDhibPhiLPhi60iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4Yud4YmF4Ymw4Yqb4Y2mIOGJoOGMuOGMpeGJsyDhi6jhiJvhiLPhi4jhiYLhi6sg4Yud4Yit4Yud4YitIOGLqOGJs+GJveGKm+GLjeGKlSDhiq3hjY3hiI0g4Yqg4Yiz4YutIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLhiJjhi7DhiaDhipvhjaYg4Ymg4Yy44Yyl4YmzIOGKpeGKkOGKneGIheGKlSDhiJvhiLPhi4jhiYLhi6vhi47hib0g4Yqg4Yiz4YutIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLhiqjhjY3hibDhipvhjaYg4Yuo4Yib4Yiz4YuI4YmC4Yur4YuO4Ym94YqVIOGLneGIreGLneGIrSDhi6jhiIvhi63hipvhi43hipUg4Yqt4Y2N4YiNIOGKoOGIs+GLrSDhiqXhipMg4Yu14Yid4Y2FIOGKoOGIsOGImyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLhiqDhiLXhibjhirPhi63hjaYg4YuI4YuwIOGMiOGMuCDhiJvhi6vhi40g4Yqg4YqV4YizIOGKpeGKkyDhi7XhiJ3hjYUg4YmF4YuzIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4YiIJTEkZCDhi7DhiYLhiYPhi47hib0gKOGKpeGIteGKqCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDhi7XhiKjhiLUpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7hiIglMSRkIOGLsOGJguGJg+GLjuGJvSAo4Yql4Yi14YqoIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOGLteGIqOGItSk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4g4Ymw4YiY4Yit4Yyg4YuL4YiNPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4Yuo4Ymw4YiI4Yur4YupIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuGLqOGKpeGKkOGLmuGIheGKlSDhiJvhiLPhi4jhiYLhi6vhi47hib0g4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1IOGKoOGLmOGMi+GMheGJsOGLi+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i4Yut4YiEIOGJoOGImuGIs+GJsOGNiSDhiLDhi47hib0g4Yid4Yqt4YqV4Yur4Ym1IOGKoOGIteGNiOGIi+GMiiDhipDhi43hjaIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IGIxMDNiMWIuLmVmZGU2MWYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMjI3LDYgKzIyNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItmC2YHZhCDYp9mE2KLZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLYp9mE2YXYrdiq2YjZitin2Kog2YXYrtmB2YrYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Itin2YTZiNi22Lkg2KfZhNii2YXZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuKAj9mG2LjYp9mFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Iti02K7YtdmKIjwvc3RyaW5nPgpAQCAtMjU5LDYgKzI2MCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLZitiq2LbZhdmGINio2YrYp9mG2KfYqiDYtNiu2LXZitipINmF2KvZhCDYo9ix2YLYp9mFINio2LfYp9mC2KfYqiDYp9mE2KfYptiq2YXYp9mGINmI2YPZhNmF2KfYqiDYp9mE2YXYsdmI2LEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLYp9mE2KrYrdmD2YUg2YHZiiDYqtmD2KjZitixINin2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLZitmF2YPZhtmDINin2YTYqtit2YPZhSDZgdmKINmF2LPYqtmI2Ykg2KfZhNiq2YPYqNmK2LEv2KfZhNiq2LXYutmK2LEg2YTZhNi02KfYtNipINmI2KrYrdiv2YrYryDYp9mE2YXZiNi22LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i2KrZhtmB2YrYsCDYpdmK2YXYp9ih2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i2YrZhdmD2YYg2KfZhNmG2YLYsSDZiNin2YTYqtmF2LHZitixINio2LPYsdi52Kkg2YjYp9mE2KrYtdi62YrYsSDZiNiq2YbZgdmK2LAg2KXZitmF2KfYodin2Kog2KPYrtix2YkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i2KrYudi32YrZhCDYtNix2YrYtyDYp9mE2K3Yp9mE2Kkg2KPZiCDYqti52K/ZitmE2YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2KrYudi32YrZhCDYtNix2YrYtyDYp9mE2K3Yp9mE2Kkg2KPZiCDYpdi22KfZgdipINix2YXZiNiyINmG2LjYp9mFINmI2KXYstin2YTYqtmH2KcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+Itin2YTYudmF2YQg2YPYtNix2YrYtyDZhNmE2K3Yp9mE2KkiPC9zdHJpbmc+CkBAIC0zNTcsOCArMzYwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrZgtin2Lcg2LXZiNixINmI2YXZgtin2LfYuSDZgdmK2K/ZitmIINmF2YYg2K7ZhNin2YQg2KfZhNmD2KfZhdmK2LHYpy4g2YjZitiq2YrYrSDZh9iw2Kcg2KfZhNil2LDZhiDZhNmE2KrYt9io2YrZgiDYp9iz2KrYrtiv2KfZhSDYp9mE2YPYp9mF2YrYsdinINmB2Yog2KPZiiDZiNmC2Kog2YjYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2KfZh9iq2LLYp9iyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLZhNmE2LPZhdin2K0g2YTZhNiq2LfYqNmK2YIg2KjYp9mE2KrYrdmD2YUg2YHZiiDYp9mE2YfYstmR2KfYsi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i2KfZhNiq2K3Zg9mFINmB2Yog2KfZhNi22YjYoSDYp9mE2YjYp9mF2LYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+ItmE2YTYs9mF2KfYrSDZhNmE2KrYt9io2YrZgiDYqNin2YTYqtit2YPZhSDZgdmKINin2YTYttmI2KEg2KfZhNmI2KfZhdi2LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Itin2KrYtdin2YQg2YXYqNin2LTYsSDYqNij2LHZgtin2YUg2KfZhNmH2YjYp9iq2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i2YTZhNiz2YXYp9itINmE2YTYqti32KjZitmCINio2LfZhNioINij2LHZgtin2YUg2YfYp9iq2YHZitipINio2K/ZiNmGINiq2K/YrtmEINmF2YbZgy4g2YjZgtivINmK2KTYr9mKINiw2YTZgyDYpdmE2Ykg2KrYrdmF2YQg2LHYs9mI2YUg2LrZitixINmF2KrZiNmC2LnYqSDYo9mIINil2KzYsdin2KEg2YXZg9in2YTZhdin2Kog2LrZitixINmF2KrZiNmC2LnYqS4g2YjZhdmGINin2YTYrNiv2YrYsSDYqNin2YTYsNmD2LEg2KPZhiDYsNmE2YMg2YTYpyDZitiq2YrYrSDZhNmE2KrYt9io2YrZgiDYp9mE2KfYqti12KfZhCDYqNij2LHZgtin2YUg2KfZhNi32YjYp9ix2KYuINmI2YLYryDYqtik2K/ZiiDYp9mE2KrYt9io2YrZgtin2Kog2KfZhNi22KfYsdipINil2YTZiSDYqtit2YXZhNmDINiq2YPYp9mE2YrZgSDZhdin2YTZitipINmF2YYg2K7ZhNin2YQg2KXYrNix2KfYoSDZhdmD2KfZhNmF2KfYqiDYqNiv2YjZhiDZhdmI2KfZgdmC2Kkg2YXZhtmDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i2KfZhNmI2LXZiNmEINil2YTZiSDYrtiv2YXYqSDYp9mE2KfYqti12KfZhCDYudio2LEg2KfZhNix2LPYp9im2YQg2KfZhNmB2YjYsdmK2KkiPC9zdHJpbmc+CkBAIC04NzgsMTAgKzg3OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItmC2LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItmG2LPYriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItmE2LXZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i2KfZhNmE2LXZgiDZg9mG2LUg2LnYp9iv2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itin2LPYqtio2K/Yp9mELi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Itit2LDZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4oCP2YbYs9iuINi52YbZiNin2YYgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i2KrYrdiv2YrYryDZhti1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLYqtix2KfYrNi5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLYpdi52KfYr9ipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Itiq2K3Yr9mK2K8g2KfZhNmG2LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i2KXYttin2YHYqSDYpdmE2Ykg2KfZhNmC2KfZhdmI2LMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itit2LDZgSI8L3N0cmluZz4KQEAgLTExMzUsNiArMTEzOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLYqti62YrZitixINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i2KjYsdmG2KfZhdisINiq2YTZgtmR2Yog2KfZhNil2LTYudin2LHYp9iqINin2YTYtdmI2KrZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLZhdmI2YHYsSDYp9mE2K3Yp9mE2KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLZhdiz2KfYudivINin2YTYpdi02LnYp9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLigI/YqtmFINiq2YbYtNmK2Lcg2KfZhNi02KjZg9ipINin2YTYuNin2YfYsdmK2Kkg2KfZhNiu2KfYtdipIChWUE4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCP2KrZhSDYqtmG2LTZiti3IFZQTiDYqNmI2KfYs9i32KkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2KfZhNmF2LMg2YTYpdiv2KfYsdipINin2YTYtNio2YPYqS4iPC9zdHJpbmc+CkBAIC0xNDc2LDExICsxNDgxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i2KrZhSDYp9mE2KrYrdiv2YrYqyDYqNmI2KfYs9i32Kkg2KfZhNmF2LTYsdmBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLYqtmFINit2LDZgSDYp9mE2K3YstmF2Kkg2LnZhiDYt9ix2YrZgiDYp9mE2YXYtNix2YEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItmE2YTZhdiz2KfYudiv2Kkg2YHZiiDYqtit2LPZitmGINi52YXYsSDYp9mE2KjYt9in2LHZitip2Iwg2YrYs9in2LnYryDZhdmI2YHYsSDYp9mE2KjYt9in2LHZitipINmB2Yog2KrZgtmE2YrZhCDYo9iv2KfYoSDYp9mE2KzZh9in2LIg2YjZitmB2LHYtiDZgtmK2K/Zi9inINi52YTZiSDYp9mE2KfZh9iq2LLYp9iyINmI2K7Yr9mF2KfYqiDYp9mE2YXZiNmC2Lkg2YjZhdi52LjZhSDYqNmK2KfZhtin2Kog2KfZhNiu2YTZgdmK2KkuINmC2K8g2YTYpyDZitiq2YUg2KrYrdiv2YrYqyDYp9mE2KjYsdmK2K8g2KfZhNil2YTZg9iq2LHZiNmG2Yog2YjYp9mE2YXYsdin2LPZhNipINmI2KfZhNiq2LfYqNmK2YLYp9iqINin2YTYo9iu2LHZiSDYp9mE2KrZiiDYqti52KrZhdivINi52YTZiSDYp9mE2YXYstin2YXZhtipINmF2Kcg2YTZhSDYqtmB2KrYrdmH2KcuXG5cbtmK2KrZhSDYpdmK2YLYp9mBINmF2YjZgdixINin2YTYqNi32KfYsdmK2Kkg2KrZhNmC2KfYptmK2YvYpyDYo9ir2YbYp9ihINi02K3ZhiDYp9mE2KzZh9in2LIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLZhdit2LjZiNixOiDYudiv2YUg2LnYsdi2INmH2LDZhyDYp9mE2KXYtNi52KfYsdin2Kog2YXYt9mE2YLZi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+ItmF2YbYrtmB2LYg2KfZhNij2YfZhdmK2Kk6INi52LHYtiDYqNij2LPZgdmEINmC2KfYptmF2Kkg2KfZhNil2LTYudin2LHYp9iqINmI2KjYr9mI2YYg2KrZhtio2YrZhyDYtdmI2KrZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i2LnYp9iv2Yo6INi52LHYtiDZh9iw2Ycg2KfZhNil2LTYudin2LHYp9iqINio2K/ZiNmGINiq2YbYqNmK2Ycg2LXZiNiq2YoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Iti52KfZhNmKINin2YTYo9mH2YXZitipOiDYudix2LYg2KjYo9i52YTZiSDZgtin2KbZhdipINin2YTYpdi02LnYp9ix2KfYqiDZhdi5INil2LXYr9in2LEg2KrZhtio2YrZhyDYtdmI2KrZiiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLYudin2KzZhDog2KfZhNi42YfZiNixINiz2LHZiti52YvYpyDYudmE2Ykg2KfZhNi02KfYtNipINmF2Lkg2KXYtdiv2KfYsSDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Inplcm8iPuKAj9mE2YXYr9ipINij2YLZhCDZhdmGINiv2YLZitmC2KkgKCUxJGQpwqAo2K3YqtmJIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJ0d28iPuKAj9mE2YXYr9ipINiv2YLZitmC2KrZitmGwqAoJTEkZCkgKNit2KrZiSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTgyLDQgKzE1ODIsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+2KrZhSDYqtit2K/ZitivIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDYudmG2LXYsTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+ItmF2KrZhtmI2LnYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLZhNmC2K8g2LnZitmO2ZHZhtiqINij2YfZhdmK2Kkg2YfYsNmHINin2YTYpdi02LnYp9ix2KfYqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItmH2LDZhyDYp9mE2LHYs9in2YTYqSDZhdmH2YXYqSDZhti42LHZi9inINmE2KPZh9mF2YrYqSDYp9mE2KPYtNiu2KfYtSDYp9mE2YXYudmG2YrZitmGLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAppbmRleCA5MjAwNjhiLi4wZTQ3NzFlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IsSwbmRpIGtpbGlkbMmZeWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+Ik3JmXptdW4gZ2l6bGlkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJUyZlobMO8a8mZc2l6IHJlamltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBzaXN0ZW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLFnsmZeHNpIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJLcmVkaXQga2FydMSxIG7Dtm1yyZlsyZlyaSB2yZkgcGFyb2xsYXIga2ltaSDFn8mZeHNpIG3JmWx1bWF0bGFyIGRheGlsZGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iRWtyYW4gYsO2ecO8dG3JmXNpbsmZIG7JmXphcsmZdCBlZGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkVrcmFuIHlheMSxbmxhxZ9kxLFybWEgc8mZdml5ecmZc2kgdsmZIHllcmzJmcWfZGlybcmZc2luyZkgbsmZemFyyZl0IGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iSmVzdGzJmXIgaWzJmSDJmW3JmWxpeXlhdCBhcGFyxLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJEaWfJmXIgamVzdGzJmXLJmSB0xLFrbGF5YSwgc8O8csO8xZ9kw7xyyZkgdsmZIMmZbcmZbGl5eWF0IGFwYXJhIGJpbMmZcnNpbml6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+InN0YXR1cyBwYW5lbGluaSBkZWFrdGl2bMmZxZ9kaXIgdsmZIHlhIGTJmXlpxZ9kaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVMmZdGJpccmZIHN0YXR1cyBwYW5lbGluaSBkZWFrdGl2IGV0bcmZecmZIHbJmSB5YSBzaXN0ZW0gaWtvbmFsYXLEsW7EsSDJmWxhdsmZIGV0bcmZayB2yZkgeWEgc2lsbcmZayBpbWthbsSxIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJzdGF0dXMgcGFuZWxpIGVkaW4iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUyZl0YmlxyZkga2FtZXJhIGlsyZkgxZ/JmWtpbCB2yZkgdmlkZW8gw6fJmWttyZl5yZkgaW1rYW4geWFyYWTEsXIuIEJ1IGljYXrJmSB0yZl0YmlxyZkgc2l6aW4gdMmZc2RpcWluaXogb2xtYWRhbiBrYW1lcmFkYW4gaXN0aWZhZMmZIGljYXrJmXNpIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJ2aWJyYXNpeWF5YSBuyZl6YXLJmXQgZWRpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVMmZdGJpccmZIHZpYnJhdG9ydSBpZGFyyZkgZXRtyZkgaWNhesmZc2kgdmVyaXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IkZsYXNoIGnFn8SxxJ/EsW7EsSBpZGFyyZkgZWRpciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVMmZdGJpccmZIHNpcW5hbCBpxZ/EscSfxLEgbmEgbsmZemFyyZl0IGV0bcmZecmZIGlta2FuIHZlcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InRlbGVmb24gbsO2bXLJmWzJmXJpbsmZIGJpcmJhxZ9hIHrJmW5nIGVkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVMmZdGJpccmZIFNpemluIG3DvGRheGlsyZluaXogb2xtYWRhbiB0ZWxlZm9uIHrJmW5nbMmZcmkgZXRtyZl5yZkgaW1rYW4gdmVyaXIuIFrJmXLJmXJsaSB0yZl0YmlxbMmZciBTaXpkyZluIHjJmWLJmXJzaXogxZ/JmWtpbGTJmSBtw7x4dMmZbGlmIHrJmW5nbMmZciBlZMmZcsmZaywgU2l6yZkgbWFkZGkgeml5YW4gdnVyYSBiaWzJmXIuIFFleWQ6IEJ1LCB0yZl0YmlxbMmZcsmZIHTJmWNpbGkgbsO2bXLJmWzJmXLJmSB6yZluZyBldG3JmXnJmSBpY2F6yZkgdmVybWlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIHrJmW5nIHhpZG3JmXRpbsmZIGdpcmnFnyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS8mZcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlllcmzJmcWfZGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJBZGkgbcmZdG4ga2ltaSBrw7bDp8O8csO8biI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4ixo92yZl6IGV0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIGtvcHlhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJNyZl0biBzZcOnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkzJmcSfdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJZZW5pZMmZbiBlZGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik3JmXRuIHNlw6dpbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iTMO8xJ/JmXTJmSDJmWxhdsmZIGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTaWwiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iRGl2YXIga2HEn8SxesSxbsSxIGTJmXlpxZ9pbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJpbGRpcmnFnyBkaW5syZl5yZluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLFnsmZcmFpdCBwcm92YXlkZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQmlsZGlyacWfIGvDtm3JmWvDp2lzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2bMmZxZ9kaXJpbGRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB0yZlyyZlmaW5kyZluIGFrdGl2bMmZxZ9kaXJpbGliIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4ixZ7JmWLJmWvJmW5pIGlkYXLJmSBldG3JmWsgw7zDp8O8biB0b3h1bnVuLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJTaXppbiBhZG1pbmlzdHJhdG9yIHTJmXLJmWZpbmTJmW4geWVuaWzJmW5kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iQWRtaW5pc3RyYXRvcnVudXogdMmZcsmZZmluZMmZbiBzaWxpbmliIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJCYXRhcmV5YW7EsW4gaXN0aXNtYXIgbcO8ZGTJmXRpbmkgdMmZa21pbGzJmcWfZGlybcmZayDDvMOnw7xuIGJhdGFyZXlhIHHJmW5hyZl0aSBjaWhhesSxbsSxesSxbiBtyZloc3VsZGFybMSxxJ/EsW7EsSBhemFsZMSxciB2yZkgdGl0csmZdG3JmSwgbcmZa2FuIHhpZG3JmXRsyZlyaSB2yZkgyZluIHNvbiBmb24gbcmZbHVtYXRsYXLEsW7EsSBtyZloZHVkbGHFn2TEsXLEsXIuIFNpbnhyb25sYcWfbWF5YSBhcnhhecSxbiBvbGFuIGUtcG/Dp3QsIG1lc2FqbGHFn21hIHbJmSBkaWfJmXIgcHJvcXJhbWxhciBzaXogb25sYXLEsSBhw6dtYXlhbmEga2ltaSB5ZW5pbMmZbm3JmXnJmSBiaWzJmXIuXG5cbkNpaGF6xLFuxLF6IGRvbGR1cnVsYW4gemFtYW4gYmF0YXJleWEgccmZbmHJmXRpIGF2dG9tYXRpayBvbGFyYXEgc8O2bsO8ci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2sgZWRpbGRpOiBCdSBiaWxkaXJpxZ9syZlyaSBoZcOnIHZheHQgZ8O2c3TJmXJtyZl5aW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQWzDp2FxOiBCaWxkaXJpxZ9syZlyIHNpeWFoxLFzxLFuxLFuIGHFn2HEn8Sxc8SxbmRhIHPJmXNzaXogZ8O2c3TJmXJpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBCdSBiaWxkacWfbMmZcmkgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJZw7xrc8mZazogQmlsZGlyacWfbMmZciBzaXlhaMSxc8SxbmRhIHl1eGFyxLFkYSBnw7ZzdMmZcmluIHbJmSBzyZlzbGkgZWRpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJUyZljaWxpOiBFa3JhbmRhIG7JmXrJmXIgc2FsxLFuIHbJmSBzyZlzbGkgZWRpbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+ICUxJGQgZMmZcWlxyZlsaWsgKHNhYXQgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4gcmFkyZlzaW7JmSBxyZlkyZlyKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkJpciBkyZlxaXHJmWxpayAoc2FhdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiByYWTJmXNpbsmZIHHJmWTJmXIpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBzZcOnaWxpYjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+Ik3DvHh0yZlsaWYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iQmlsZGlyacWfbMmZcmluIMmZaMmZbWl5ecmZdGluaSBTaXogYXlhcmxhcnnEsXJzxLFuxLF6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4ixLBuc2FubGFyIGPJmWxiIG9sdW5kdcSfdSDDvMOnw7xuIGJ1IHZhY2liZGlyLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iK3NyK0xhdG4td2F0Y2gvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi13YXRjaC9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM3MmVkCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1iK3NyK0xhdG4td2F0Y2gvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKiAvL2RldmljZS9hcHBzL2NvbW1vbi9hc3NldHMvcmVzL2FueS9zdHJpbmdzLnhtbAorKioKKyoqIENvcHlyaWdodCAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSIxMDkwNzMyMjYyMDEwMzk4NzU5Ij4iQXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG9kIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NlbnNvcnMiIG1zZ2lkPSIyMDI2NzU0NTIzNjg2MTI3NTQiPiJTZW56b3JpIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOWRkZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDE1MzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyogLy9kZXZpY2UvYXBwcy9jb21tb24vYXNzZXRzL3Jlcy9hbnkvc3RyaW5ncy54bWwKKyoqCisqKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYnl0ZVNob3J0IiBtc2dpZD0iODM0MDk3Mzg5Mjc0MjAxOTEwMSI+IkIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJraWxvYnl0ZVNob3J0IiBtc2dpZD0iNTk3Mzc4OTc4MzUwNDc3MTg3OCI+ImtCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVnYWJ5dGVTaG9ydCIgbXNnaWQ9IjYzNTU4NTE1NzY3NzA0Mjg5MjIiPiJNQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdpZ2FieXRlU2hvcnQiIG1zZ2lkPSIzMjU5ODgyNDU1MjEyMTkzMjE0Ij4iR0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXJhYnl0ZVNob3J0IiBtc2dpZD0iMjMxNjEzMDE4MTU5MTg2OTYyIj4iVEIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXRhYnl0ZVNob3J0IiBtc2dpZD0iNTYzNzgxNjY4MDE0NDk5MDIxOSI+IlBCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmlsZVNpemVTdWZmaXgiIG1zZ2lkPSI4ODk3NTY3NDU2MTUwOTA3NTM4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkczwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IlVOSVQiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb25EYXlzIiBtc2dpZD0iNjY1MjM3MTQ2MDUxMTE3ODI1OSI+Ijx4bGlmZjpnIGlkPSJEQVlTIj4lMSRkPC94bGlmZjpnPiBkYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb25EYXlIb3VycyIgbXNnaWQ9IjI3MTMxMDc0NTg3MzY3NDQ0MzUiPiI8eGxpZmY6ZyBpZD0iREFZUyI+JTEkZDwveGxpZmY6Zz4gZGFuIDx4bGlmZjpnIGlkPSJIT1VSUyI+JTIkZDwveGxpZmY6Zz4gcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uRGF5SG91ciIgbXNnaWQ9IjcyOTM3ODk2MzkwOTA5NTg5MTciPiI8eGxpZmY6ZyBpZD0iREFZUyI+JTEkZDwveGxpZmY6Zz4gZGFuIDx4bGlmZjpnIGlkPSJIT1VSUyI+JTIkZDwveGxpZmY6Zz4gcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uSG91cnMiIG1zZ2lkPSI0MjY2ODU4Mjg3MTY3MzU4OTg4Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPiBzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb25Ib3VyTWludXRlcyIgbXNnaWQ9IjkwMjkxNzYyNDg2OTIwNDE1NDkiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+IHMgPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJGQ8L3hsaWZmOmc+IG1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uSG91ck1pbnV0ZSIgbXNnaWQ9IjI3NDE2NzczNTUxNzc0MDI1MzkiPiI8eGxpZmY6ZyBpZD0iSE9VUlMiPiUxJGQ8L3hsaWZmOmc+IHMgPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUyJGQ8L3hsaWZmOmc+IG1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uTWludXRlcyIgbXNnaWQ9IjMxMzQyMjY2Nzk4ODM1NzkzNDciPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkZDwveGxpZmY6Zz4gbWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVyYXRpb25NaW51dGUiIG1zZ2lkPSI3MTU1MzAxNzQ0MTc0NjIzODE4Ij4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJGQ8L3hsaWZmOmc+IG1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uTWludXRlU2Vjb25kcyIgbXNnaWQ9IjE0MjQ2NTYxODUzNzkwMDM3NTEiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkZDwveGxpZmY6Zz4gbWluIDx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiRkPC94bGlmZjpnPiBzZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvbk1pbnV0ZVNlY29uZCIgbXNnaWQ9IjM5ODkyMjg3MTgwNjc0NjY2ODAiPiI8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTEkZDwveGxpZmY6Zz4gbWluIDx4bGlmZjpnIGlkPSJTRUNPTkRTIj4lMiRkPC94bGlmZjpnPiBzZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvblNlY29uZHMiIG1zZ2lkPSI4MDUwMDg4NTA1MjM4MjQxNDA1Ij4iPHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUxJGQ8L3hsaWZmOmc+IHNlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uU2Vjb25kIiBtc2dpZD0iOTg1NjY5NjIyMjc2NDIwMzMxIj4iPHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUxJGQ8L3hsaWZmOmc+IHNlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtCZXogbmFzbG92YSZndDsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbXB0eVBob25lTnVtYmVyIiBtc2dpZD0iNzY5NDA2MzA0MjA3OTY3NjUxNyI+IihOZW1hIGJyb2phIHRlbGVmb25hKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVua25vd25OYW1lIiBtc2dpZD0iNjg2NzgxMTc2NTM3MDM1MDI2OSI+Ik5lcG96bmF0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRWb2ljZU1haWxBbHBoYVRhZyIgbXNnaWQ9IjI2NjAwMjA5OTAwOTc3MzMwNzciPiJHbGFzb3ZuYSBwb8WhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0TXNpc2RuQWxwaGFUYWciIG1zZ2lkPSIyODUwODg5NzU0OTE5NTg0Njc0Ij4iTVNJU0ROMSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUVycm9yIiBtc2dpZD0iNTE1NDQ5OTQ1NzczOTA1MjkwNyI+IlByb2JsZW1pIHNhIHZlem9tIGlsaSBuZXZhxb5lxIdpIE1NSSBrw7RkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1taUZkbkVycm9yIiBtc2dpZD0iNTIyNDM5ODIxNjM4NTMxNjQ3MSI+IlJhZCBqZSBvZ3JhbmnEjWVuIHNhbW8gbmEgYnJvamV2ZSBmaWtzbm9nIGJpcmFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWQiIG1zZ2lkPSI4MTQ3Mjc4MzQ2NDE0NzE0MzE1Ij4iVXNsdWdhIGplIG9tb2d1xIdlbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUVuYWJsZWRGb3IiIG1zZ2lkPSI2ODU2MjI4MTQwNDUzNDcxMDQxIj4iVXNsdWdhIGplIG9tb2d1xIdlbmEgemE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZURpc2FibGVkIiBtc2dpZD0iMTkzNzU1MzIyNjU5MjUxNjQxMSI+IlVzbHVnYSBqZSBvbmVtb2d1xIdlbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZVJlZ2lzdGVyZWQiIG1zZ2lkPSI2Mjc1MDE5MDgyNTk4MTAyNDkzIj4iUmVnaXN0cmFjaWphIGplIHVzcGVsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlRXJhc2VkIiBtc2dpZD0iMTI4ODU4NDY5NTI5NzIwMDk3MiI+IkJyaXNhbmplIGplIGRvdnLFoWVuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZEluY29ycmVjdCIgbXNnaWQ9Ijc2MTIyMDg4Mzk0NTAxMjg3MTUiPiJOZWlzcHJhdm5hIGxvemlua2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW1pQ29tcGxldGUiIG1zZ2lkPSI4MjMyNTI3NDk1NDExNjk4MzU5Ij4iTU1JIGvDtGQgamUgaXp2csWhZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFkUGluIiBtc2dpZD0iOTAxNTI3NzY0NTU0NjcxMDAxNCI+IlN0YXJpIFBJTiBrb2ppIHN0ZSB1bmVsaSBuaWplIHRhxI1hbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWRQdWsiIG1zZ2lkPSI1NDg3MjU3NjQ3MDgxMTMyMjAxIj4iUFVLIGtvamkgc3RlIHVuZWxpIG5pamUgdGHEjWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pc21hdGNoUGluIiBtc2dpZD0iNjA5Mzc5MDU0NDk2ODYzNDE5Ij4iUElOIGtvZG92aSBrb2plIHN0ZSB1bmVsaSBzZSBuZSBwb2R1ZGFyYWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4iT3RrdWNhanRlIFBJTiBrb2ppIGltYSBvZCA0IGRvIDggYnJvamV2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkUHVrIiBtc2dpZD0iODc2MTQ1NjIxMDg5ODAzNjUxMyI+IlVuZXNpdGUgUFVLIGtvamkgc2Ugc2FzdG9qaSBvZCA4IGNpZmFyYSBpbGkgdmnFoWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1ayIgbXNnaWQ9IjkxOTY2ODM4NTk1NjI1MTYxMSI+IlNJTSBrYXJ0aWNhIGplIHpha2xqdcSNYW5hIFBVSyBrb2RvbS4gVW5lc2l0ZSBQVUsga8O0ZCBkYSBiaXN0ZSBqZSBvdGtsanXEjWFsaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJVbmVzaXRlIFBVSzIgZGEgYmlzdGUgZGVibG9raXJhbGkgU0lNIGthcnRpY3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iTmlqZSB1c3BlbG8uIE9tb2d1xIdpdGUgemFrbGp1xI1hdmFuamUgU0lNL1JVSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHBsdXJhbHMgbmFtZT0icGlucHVrX2F0dGVtcHRzIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iMTI1MTAxMjAwMTUzOTIyNTU4MiI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5JbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqIHByZSBuZWdvIMWhdG8gc2UgU0lNIGthcnRpY2EgemFrbGp1xI1hLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPkltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWphIHByZSBuZWdvIMWhdG8gc2UgU0lNIGthcnRpY2EgemFrbGp1xI1hLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+SW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgcHJlIG5lZ28gxaF0byBzZSBTSU0ga2FydGljYSB6YWtsanXEjWEuPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZWkiIG1zZ2lkPSIyNjI1NDI5ODkwODY5MDA1NzgyIj4iSU1FSSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1laWQiIG1zZ2lkPSI0ODQxMjIxMjM3NjgxMjU0MTk1Ij4iTUVJRCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNsaXBNbWkiIG1zZ2lkPSI2OTUyODIxMjE2NDgwMjg5Mjg1Ij4iRG9sYXpuaSBJRCBwb3ppdmFvY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbGlyTW1pIiBtc2dpZD0iNzc4NDY3MzY3MzQ0NjgzMzA5MSI+Ik9kbGF6bmkgSUQgcG96aXZhb2NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ29scE1taSIgbXNnaWQ9IjMwNjUxMjE0ODM3NDAxODM5NzQiPiJJRCBwb3ZlemFuZSBsaW5pamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDb2xyTW1pIiBtc2dpZD0iNDk5NjU0MDMxNDQyMTg4OTU4OSI+Ik9ncmFuacSNZW5qZSBJRC1hIHBvdmV6YW5lIGxpbmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNmTW1pIiBtc2dpZD0iNTEyMzIxODk4OTE0MTU3MzUxNSI+IlByZXVzbWVyYXZhbmplIHBveml2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkN3TW1pIiBtc2dpZD0iOTEyOTY3ODA1Njc5NTAxNjg2NyI+IlBveml2IG5hIMSNZWthbmp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQmFNbWkiIG1zZ2lkPSI0NTUxOTMwNjc5MjY3NzA1ODEiPiJPZ3JhbmnEjWF2YW5qZSBwb3ppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJQd2RNbWkiIG1zZ2lkPSI3MDQzNzE1Njg3OTA1MjU0MTk5Ij4iUHJvbWVuYSBsb3ppbmtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUGluTW1pIiBtc2dpZD0iMzExMzExNzc4MDM2MTE5MDMwNCI+IlByb21lbmEgUElOIGtvZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDbmlwTW1pIiBtc2dpZD0iMzExMDUzNDY4MDU1Nzg1NzE2MiI+IlBveml2YW5qZSBwb3N0b2plxIdlZyBicm9qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuaXJNbWkiIG1zZ2lkPSIzMDYyMTAyMTIxNDMwNTQ4NzMxIj4iUG96aXZhbmplIGJyb2phIGplIG9ncmFuacSNZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iVGhyZWVXQ01taSIgbXNnaWQ9IjkwNTEwNDcxNzAzMjExOTAzNjgiPiJUcm9zbWVybm8gcG96aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iUnVhY01taSIgbXNnaWQ9Ijc4Mjc4ODc0NTkxMzgzMDg4ODYiPiJPZGJpamFuamUgbmVwb8W+ZWxqbmloIHBveml2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNuZE1taSIgbXNnaWQ9IjMxMTY0NDYyMzcwODE1NzU4MDgiPiJJc3BvcnVrYSBicm9qYSB6YSBwb3ppdmFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJEbmRNbWkiIG1zZ2lkPSIxMjY1NDc4OTMyNDE4MzM0MzMxIj4iTmUgdXpuZW1pcmF2YWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9uTmV4dENhbGxPbiIgbXNnaWQ9IjQyOTQxNTQwOTE0NTc4MTkyMyI+IklEIHBveml2YW9jYSBqZSBwb2RyYXp1bWV2YW5vIG9ncmFuacSNZW4uIFNsZWRlxIdpIHBveml2OiBvZ3JhbmnEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T25OZXh0Q2FsbE9mZiIgbXNnaWQ9IjMwOTI5MTgwMDYwNzc4NjQ2MjQiPiJJRCBwb3ppdmFvY2EgamUgcG9kcmF6dW1ldmFubyBvZ3JhbmnEjWVuLiBTbGVkZcSHaSBwb3ppdjogTmlqZSBvZ3JhbmnEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPbiIgbXNnaWQ9IjYxNzk0MjUxODI4NTY0MTg0NjUiPiJJRCBwb3ppdmFvY2EgcG9kcmF6dW1ldmFubyBuaWplIG9ncmFuacSNZW4uIFNsZWRlxIdpIHBveml2OiBvZ3JhbmnEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIG1zZ2lkPSIyNTY3OTk4NjMzMTI0NDA4NTUyIj4iSUQgcG96aXZhb2NhIHBvZHJhenVtZXZhbm8gbmlqZSBvZ3JhbmnEjWVuLiBTbGVkZcSHaSBwb3ppdjogTmlqZSBvZ3JhbmnEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VOb3RQcm92aXNpb25lZCIgbXNnaWQ9Ijg2MTQ4MzAxODA1MDg2ODY2NjYiPiJVc2x1Z2EgbmlqZSBkb2JhdmxqZW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IkNMSVJQZXJtYW5lbnQiIG1zZ2lkPSIzMzc3MzcxMTQ1OTI2ODM1NjcxIj4iTmUgbW/FvmV0ZSBkYSBwcm9tZW5pdGUgcG9kZcWhYXZhbmplIElELWEga29yaXNuaWthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRDaGFuZ2VkVGl0bGUiIG1zZ2lkPSI1NTkyMTg5Mzk4OTU2MTg3NDk4Ij4iT2dyYW5pxI1lbmkgcHJpc3R1cCBqZSBwcm9tZW5qZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IlVzbHVnYSB6YSBwb2RhdGtlIGplIGJsb2tpcmFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25FbWVyZ2VuY3kiIG1zZ2lkPSI2NTgxMTYzNzc5MDcyODMzNjY1Ij4iVXNsdWdhIHphIGhpdG5lIHNsdcSNYWpldmUgamUgYmxva2lyYW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbk5vcm1hbCIgbXNnaWQ9IjQ5NTM4NjcwMTEzODk3NTA2NzMiPiJHbGFzb3ZuYSB1c2x1Z2EgamUgYmxva2lyYW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbFZvaWNlIiBtc2dpZD0iMzM5Njk2MzY1MjEwODE1MTI2MCI+IlN2ZSBnbGFzb3ZuZSB1c2x1Z2Ugc3UgYmxva2lyYW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblNtcyIgbXNnaWQ9IjgzMTQzNTIzMjc0NjE2Mzg4OTciPiJTTVMgdXNsdWdhIGplIGJsb2tpcmFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25Wb2ljZURhdGEiIG1zZ2lkPSI5OTY2MzY0ODcxMDYxNzEzMjAiPiJHbGFzb3ZuYSB1c2x1Z2EvdXNsdWdhIHByZW5vc2EgcG9kYXRha2Egc3UgYmxva2lyYW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPblZvaWNlU21zIiBtc2dpZD0iMTg4ODU4ODE1Mjc5MjAyMzg3MyI+IkdsYXNvdm5hIHVzbHVnYSBpIFNNUyB1c2x1Z2Egc3UgYmxva2lyYW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlJlc3RyaWN0ZWRPbkFsbCIgbXNnaWQ9IjU2NDMwMjgyNjQ0NjYwOTI4MjEiPiJTdmUgZ2xhc292bmUgaSBTTVMgdXNsdWdlLCBrYW8gaSB1c2x1Z2UgcHJlbm9zYSBwb2RhdGFrYSBzdSBibG9raXJhbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVlclR0eU1vZGVGdWxsIiBtc2dpZD0iNjE2NTM1MTc5MDAxMDM0MTQyMSI+IktvcmlzbmlrIHphaHRldmEgUE9UUFVOIHJlxb5pbSBUVFkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZWVyVHR5TW9kZUhjbyIgbXNnaWQ9IjU3Mjg2MDIxNjA2NjkyMTY3ODQiPiJLb3Jpc25payB6YWh0ZXZhIFBSRU5PUyBaVlVLQSB6YSByZcW+aW0gVFRZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVlclR0eU1vZGVWY28iIG1zZ2lkPSIxNzQyNDA0OTc4Njg2NTM4MDQ5Ij4iS29yaXNuaWsgemFodGV2YSBQUkVOT1MgR0xBU0EgemEgcmXFvmltIFRUWSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlZXJUdHlNb2RlT2ZmIiBtc2dpZD0iMzI4MDgxOTcxNzg1MDYwMjIwNSI+IktvcmlzbmlrIHphaHRldmEgSVNLTEpVxIxFTiByZcW+aW0gVFRZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iVm9pY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhIiBtc2dpZD0iODcyNDU2NzgyMDc3OTM3ODkzIj4iUG9kYWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRkFYIiBtc2dpZD0iNTU2NjYyNDk5ODg0MDQ4NjQ3NSI+IkZBS1MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NTTVMiIG1zZ2lkPSIyMDE1NDYwMzczNzAxNTI3NDg5Ij4iU01TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YUFzeW5jIiBtc2dpZD0iNDUyMzQ1NDc4MzQ5ODU1MTQ2OCI+IkFzaW5ocm9uaSBwb2RhY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NEYXRhU3luYyIgbXNnaWQ9Ijc1MzAwMDA1MTk2NDYwNTQ3NzYiPiJTaW5ocm9uaXpvdmFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BhY2tldCIgbXNnaWQ9IjY5OTEwMDY1NTc5OTM0MjM0NTMiPiJQYWtldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1BBRCIgbXNnaWQ9IjMyMzUyNTkwODU2NDgyNzEwMzciPiJQT0RMT0dBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQwIiBtc2dpZD0iNzE3MDMzNTQ3MjE5ODY5NDk0NSI+IkluZGlrYXRvciByb21pbmdhIGplIHVrbGp1xI1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MSIgbXNnaWQ9IjUzMTQ4NjE1MTk3NTI1Mzg5MjIiPiJJbmRpa2F0b3Igcm9taW5nYSBqZSBpc2tsanXEjWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQyIiBtc2dpZD0iODk2OTkyOTA0OTA4MTI2ODExNSI+IlRyZXBlcmVuamUgaW5kaWthdG9yYSByb21pbmdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQzIiBtc2dpZD0iNTE0ODI1NTAyNzA0Mzk0MzMxNyI+Ikl6dmFuIGtvbcWhaWx1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDQiIG1zZ2lkPSI4ODA4NDU2NjgyNTUwNzk2NTMwIj4iSXp2YW4gemdyYWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ1IiBtc2dpZD0iNzYwNDA2MzI1Mjg1MDM1NDM1MCI+IlJvbWluZyDigJMgxb5lbGplbmkgc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ2IiBtc2dpZD0iMjA1OTQ0MDgyNTc4Mjg3MTUxMyI+IlJvbWluZyDigJMgZG9zdHVwbmkgc2lzdGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9hbWluZ1RleHQ3IiBtc2dpZD0iNzExMjA3ODcyNDA5NzIzMzYwNSI+IlJvbWluZyDigJMgcGFydG5lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0OCIgbXNnaWQ9IjU5ODk1Njk3Nzg2MDQwODkyOTEiPiJSb21pbmcg4oCTIHByZW1panVtIHBhcnRuZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDkiIG1zZ2lkPSI3OTY5Mjk2ODExMzU1MTUyNDkxIj4iUm9taW5nIOKAkyBwb3RwdW5vIGZ1bmtjaW9uaXNhbmplIHVzbHVnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTAiIG1zZ2lkPSIzOTkyOTA2OTk5ODE1MzE2NDE3Ij4iUm9taW5nIOKAkyBkZWxpbWnEjW5vIGZ1bmtjaW9uaXNhbmplIHVzbHVnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0MTEiIG1zZ2lkPSI0MTU0NDc2ODU0NDI2OTIwOTcwIj4iQmFuZXIgcm9taW5nYSBqZSB1a2xqdcSNZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb2FtaW5nVGV4dDEyIiBtc2dpZD0iMTE4OTA3MTExOTk5MjcyNjMyMCI+IkJhbmVyIHJvbWluZ2EgamUgaXNrbGp1xI1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvYW1pbmdUZXh0U2VhcmNoaW5nIiBtc2dpZD0iODM2MDE0MTg4NTk3MjI3OTk2MyI+IlByZXRyYcW+aXZhbmplIHVzbHVnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndmY1JlZ0Vycm9yVGl0bGUiIG1zZ2lkPSIyMzAxMzc2MjgwNjMyMTEwNjY0Ij4iUG96aXZhbmplIHByZWtvIFdpLUZpLWphIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9IndmY09wZXJhdG9yRXJyb3JBbGVydE1lc3NhZ2VzIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0id2ZjT3BlcmF0b3JFcnJvck5vdGlmaWNhdGlvbk1lc3NhZ2VzIj4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJ3ZmNTcG5Gb3JtYXQiIG1zZ2lkPSI4MjExNjIxMzMyNDc4MzA2NTY4Ij4iJXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZmNEYXRhU3BuRm9ybWF0IiBtc2dpZD0iMTExODA1MjAyODc2NzY2Njg4MyI+IiVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9jYWxsaW5nX29mZl9zdW1tYXJ5IiBtc2dpZD0iODcyMDY1OTU4NjA0MTY1NjA5OCI+Iklza2xqdcSNZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2ZjX21vZGVfd2lmaV9wcmVmZXJyZWRfc3VtbWFyeSIgbXNnaWQ9IjE5OTQxMTM0MTEyODY5MzUyNjMiPiJQcmVkbm9zdCBpbWEgV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZmNfbW9kZV9jZWxsdWxhcl9wcmVmZXJyZWRfc3VtbWFyeSIgbXNnaWQ9IjU5MjA1NDk0ODQ2MDA3NTg3ODYiPiJQcmVkbm9zdCBpbWEgbW9iaWxuYSBtcmXFvmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZmNfbW9kZV93aWZpX29ubHlfc3VtbWFyeSIgbXNnaWQ9IjIzNzk5MTkxNTUyMzc4NjkzMjAiPiJTYW1vIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZU5vdEZvcndhcmRlZCIgbXNnaWQ9IjE2ODM2ODU4ODM4NDEyNzI1NjAiPiI8eGxpZmY6ZyBpZD0iQkVBUkVSX1NFUlZJQ0VfQ09ERSI+ezB9PC94bGlmZjpnPjogTmlqZSBwcm9zbGXEkWVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIG1zZ2lkPSIxMzAyOTIyMTE3NDk4NTkwNTIxIj4iPHhsaWZmOmcgaWQ9IkJFQVJFUl9TRVJWSUNFX0NPREUiPnswfTwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJESUFMSU5HX05VTUJFUiI+ezF9PC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiBtc2dpZD0iOTIwNjI1MTczNjUyNzA4NTI1NiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iRElBTElOR19OVU1CRVIiPnsxfTwveGxpZmY6Zz4gbmFrb24gPHhsaWZmOmcgaWQ9IlRJTUVfREVMQVkiPnsyfTwveGxpZmY6Zz4gc2VrdW5kZShpKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNmVGVtcGxhdGVSZWdpc3RlcmVkIiBtc2dpZD0iNTA3MzIzNzgyNzYyMDE2NjI4NSI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBOaWplIHByb3NsZcSRZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2ZUZW1wbGF0ZVJlZ2lzdGVyZWRUaW1lIiBtc2dpZD0iNjc4MTYyMTk2NDMyMDYzNTE3MiI+Ijx4bGlmZjpnIGlkPSJCRUFSRVJfU0VSVklDRV9DT0RFIj57MH08L3hsaWZmOmc+OiBOaWplIHByb3NsZcSRZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmNDb21wbGV0ZSIgbXNnaWQ9IjMxMTg4NDgyMzA5NjY4ODY1NzUiPiJLw7RkIGZ1bmtjaWplIGplIGl6dnLFoWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZjRXJyb3IiIG1zZ2lkPSIzMzI3NTYwMTI2NTg4NTAwNzc3Ij4iUHJvYmxlbWkgc2EgdmV6b20gaWxpIG5ldmHFvmXEh2kga8O0ZCBmdW5rY2lqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JPayIgbXNnaWQ9IjExOTE5MTkzNzgwODM0NzIyMDQiPiJQb3R2cmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yIiBtc2dpZD0iNzk1NjM5MjUxMTE0NjY5ODUyMiI+IkRvxaFsbyBqZSBkbyBncmXFoWtlIG5hIG1yZcW+aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JMb29rdXAiIG1zZ2lkPSI0NzExNjg3NDU2MTExOTYzMTYzIj4iTmlqZSBtb2d1xIdlIHByb25hxIdpIFVSTCBhZHJlc3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JVbnN1cHBvcnRlZEF1dGhTY2hlbWUiIG1zZ2lkPSI2Mjk5OTgwMjgwNDQyMDc2Nzk5Ij4ixaBlbWEgcG90dnJkYSBhdXRlbnRpxI1ub3N0aSBzYWp0YSBuaWplIHBvZHLFvmFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JBdXRoIiBtc2dpZD0iMTQzNTA2NTYyOTQzODA0NDUzNCI+Ik5pamUgbW9ndcSHZSBwb3R2cmRpdGkgYXV0ZW50acSNbm9zdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JQcm94eUF1dGgiIG1zZ2lkPSIxNzg4MjA3MDEwNTU5MDgxMzMxIj4iUG90dnJkYSBpZGVudGl0ZXRhIHByZWtvIHByb2tzaSBzZXJ2ZXJhIG5pamUgdXNwZWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvckNvbm5lY3QiIG1zZ2lkPSI4NzE0MjczMjM2MzY0NjQwNTQ5Ij4iTmlqZSBtb2d1xIdlIHBvdmV6YXRpIHNlIHNhIHNlcnZlcm9tLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvcklPIiBtc2dpZD0iMjM0MDU1ODE5NzQ4OTMwMjE4OCI+Ik5pamUgbW9ndcSHZSBrb211bmljaXJhdGkgc2Egc2VydmVyb20uIFBva3XFoWFqdGUgcG9ub3ZvIGthc25pamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVGltZW91dCIgbXNnaWQ9IjQ3NDM0MDM3MDM3NjI4ODM5NTQiPiJWZXphIHNhIHNlcnZlcm9tIGplIGlzdGVrbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yUmVkaXJlY3RMb29wIiBtc2dpZD0iODY3OTU5NjA5MDM5Mjc3OTUxNiI+IlN0cmFuaWNhIHNhZHLFvmkgcHJldmnFoWUgdmV6YSB6YSBwcmV1c21lcmF2YW5qZSBzYSBzZXJ2ZXJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclVuc3VwcG9ydGVkU2NoZW1lIiBtc2dpZD0iNTAxNTczMDgxMjkwNjE5MjIwOCI+IlByb3Rva29sIG5pamUgcG9kcsW+YW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmFpbGVkU3NsSGFuZHNoYWtlIiBtc2dpZD0iOTY1NDk2MDYwMDA2NTg2NDEiPiJOaWplIG1vZ3XEh2UgdXNwb3N0YXZpdGkgYmV6YmVkbnUgdmV6dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iU3RyYW5pY3UgbmlqZSBtb2d1xIdlIG90dm9yaXRpIHphdG8gxaF0byBqZSBVUkwgYWRyZXNhIG5ldmHFvmXEh2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiJOaWplIG1vZ3XEh2UgcHJpc3R1cGl0aSBkYXRvdGVjaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JGaWxlTm90Rm91bmQiIG1zZ2lkPSI2MjAzODU2NjEyMDQyNjU1MDg0Ij4iTmlqZSBtb2d1xIdlIHByb25hxIdpIHRyYcW+ZW51IGRhdG90ZWt1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiJQcmV2acWhZSB6YWh0ZXZhIHNlIG9icmHEkXVqZS4gUG9rdcWhYWp0ZSBwb25vdm8ga2FzbmlqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4OTY3NzEwMDI1MDM2MTYzODIyIj4iR3JlxaFrYSBwcmkgcHJpamF2bGppdmFuanUgemEgPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+IlNpbmhyb25pemFjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIG1zZ2lkPSIzOTc3NDMzNDkxOTE5MDE0NTgiPiJTaW5ocm9uaXphY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiBtc2dpZD0iODEwMDk4MTQzNTA4MDY5NjQzMSI+IlByZXZpxaFlIDx4bGlmZjpnIGlkPSJDT05URU5UX1RZUEUiPiVzPC94bGlmZjpnPiBpemJyaXNhbmloIHN0YXZraS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NDk0MDE5MjM0MTAyMTU0ODk2Ij4iTWVtb3JpamEgdGFibGV0YSBqZSBwdW5hISBJemJyacWhaXRlIG5la2UgZGF0b3Rla2UgZGEgYmlzdGUgb3Nsb2JvZGlsaSBwcm9zdG9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9IndhdGNoIiBtc2dpZD0iNDQxNTkxNDkxMDc3MDAwNTE2NiI+Ik1lbW9yaWphIHNhdGEgamUgcHVuYS4gSXpicmnFoWl0ZSBuZWtlIGRhdG90ZWtlIGRhIGJpc3RlIG9zbG9ib2RpbGkgcHJvc3Rvci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfbWVtb3J5IiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjUxNjYxOTg2MTE5MTAyNTkyMyI+IlNrbGFkacWhbmkgcHJvc3RvciBuYSBUVi11IGplIHBvcHVuamVuLiBJemJyacWhaXRlIG5la2UgZGF0b3Rla2UgZGEgYmlzdGUgb3Nsb2JvZGlsaSBwcm9zdG9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDc1OTk5Mjg2NjgwMDAwNTQxIj4iU2tsYWRpxaF0ZSB0ZWxlZm9uYSBqZSBwdW5vISBJemJyacWhaXRlIG5la2UgZGF0b3Rla2Uga2FrbyBiaXN0ZSBvc2xvYm9kaWxpIHByb3N0b3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfd2FybmluZyIgbXNnaWQ9IjU4NDg0MDIxMjc0NTUwMjE3MTQiPiJNcmXFvmEgc2UgbW/FvmRhIG5hZGdsZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfbm90aV9ieV91bmtub3duIiBtc2dpZD0iNDQ3NTQzNzg2MjE4OTg1MDYwMiI+Ik9kIHN0cmFuZSBuZXBvem5hdGUgdHJlxIdlIHN0cmFuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X25vdGlfYnlfYWRtaW5pc3RyYXRvciIgbXNnaWQ9IjU1MDc1ODA4ODE4NTc2NDMxMiI+Ik9kIHN0cmFuZSBhZG1pbmlzdHJhdG9yYSBwcm9maWxhIHphIHBvc2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfbm90aV9tYW5hZ2VkIiBtc2dpZD0iNDAzMDI2MzQ5NzY4Njg2NzE0MSI+Ik9kIHN0cmFuZSA8eGxpZmY6ZyBpZD0iTUFOQUdJTkdfRE9NQUlOIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3b3JrX3Byb2ZpbGVfZGVsZXRlZCIgbXNnaWQ9IjUwMDU1NzIwNzg2NDE5ODA2MzIiPiJQb3Nsb3ZuaSBwcm9maWwgamUgaXpicmlzYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3b3JrX3Byb2ZpbGVfZGVsZXRlZF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYzMDUxNDc1MTMwNTQzNDExMDIiPiJQb3Nsb3ZuaSBwcm9maWwgamUgaXpicmlzYW4gamVyIG5lZG9zdGFqZSBhZG1pbmlzdHJhdG9yc2thIGFwbGlrYWNpamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id29ya19wcm9maWxlX2RlbGV0ZWRfZGV0YWlscyIgbXNnaWQ9IjIyNjYxNTc0MzQ2MjM2MTI0OCI+IkFkbWluaXN0cmF0b3Jza2EgYXBsaWthY2lqYSBwb3Nsb3Zub2cgcHJvZmlsYSBuZWRvc3RhamUgaWxpIGplIG/FoXRlxIdlbmEuIFpib2cgdG9nYSBzdSB2YcWhIHBvc2xvdm5pIHByb2ZpbCBpIHBvdmV6YW5pIHBvZGFjaSBpemJyaXNhbmkuIE9icmF0aXRlIHNlIGFkbWluaXN0cmF0b3J1IHphIHBvbW/Ehy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3b3JrX3Byb2ZpbGVfZGVsZXRlZF9kZXNjcmlwdGlvbl9kcG1fd2lwZSIgbXNnaWQ9IjYwMTk3NzAzNDQ4MjA1MDc1NzkiPiJQcm9maWwgemEgV29yayB2acWhZSBuaWplIGRvc3R1cGFuIG5hIG92b20gdXJlxJFhanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeV9yZXNldF93YXJuaW5nIiBtc2dpZD0iNTQyMzI1MzEyNTY0MjM5NDM4NyI+IlVyZcSRYWogxIdlIGJpdGkgb2JyaXNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY3RvcnlfcmVzZXRfbWVzc2FnZSIgbXNnaWQ9IjQ5MDUwMjUyMDQxNDE5MDA2NjYiPiJBZG1pbmlzdHJhdG9yc2tvaiBhcGxpa2FjaWppIG5lZG9zdGFqdSBuZWtlIGtvbXBvbmVudGUgaWxpIGplIG/FoXRlxIdlbmEgaSBuZSBtb8W+ZSBkYSBzZSBrb3Jpc3RpLiBVcmXEkWFqIMSHZSBzYWRhIGJpdGkgb2JyaXNhbi4gT2JyYXRpdGUgc2UgYWRtaW5pc3RyYXRvcnUgemEgcG9tb8SHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lIiBtc2dpZD0iNjU0NTY5NjAwNzYzMTQwNDI5MiI+IkphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4NTQ1MzUxNDIwODY1MjAyODUzIj4iT3BjaWplIHphIHRhYmxldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2RpYWxvZyIgcHJvZHVjdD0idHYiIG1zZ2lkPSI2MTUzODg4NzA2NDMwNTU2MzU2Ij4iT3BjaWplIHphIFRWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlhbG9nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTMxOTkxOTA3NTQ2Mzk4ODYzOCI+Ik9wY2lqZSB0ZWxlZm9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlIiBtc2dpZD0iNzE2NzcwMzM4OTgwMjYxODY2MyI+Ik5lxI11am5pIHJlxb5pbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb25fcmFkaW8iIG1zZ2lkPSIzOTEyNzkzMDkyMzM5OTYyMzcxIj4iVWtsanXEjWkgYmXFvmnEjW5pIHNpZ25hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1cm5fb2ZmX3JhZGlvIiBtc2dpZD0iODE5ODc4NDk0OTk4NzA2MjM0NiI+Iklza2xqdcSNaSBiZcW+acSNbmkgc2lnbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2xvY2siIG1zZ2lkPSI3OTkwOTQ2NTU0OTYwOTgxNTMiPiJaYWtsanXEjWFqIGVrcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfb2ZmIiBtc2dpZD0iNDI2NjYxNDEwNzQxMjg2NTA0OCI+Iklza2xqdcSNaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3NpbGVudCIgbXNnaWQ9IjMxOTI5ODE2MzAxODQ3MzA3OCI+Ilp2b25vIGplIGlza2xqdcSNZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2lsZW50X21vZGVfdmlicmF0ZSIgbXNnaWQ9IjcwNzIwNDMzODg1ODE1NTEzOTUiPiJWaWJyYWNpamEgenZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaWxlbnRfbW9kZV9yaW5nIiBtc2dpZD0iODU5MjI0MTgxNjE5NDA3NDM1MyI+Ilp2b25vIGplIHVrbGp1xI1lbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3RpdGxlIiBtc2dpZD0iNjIxMjYzNjgwMjUzNjgyMzg1MCI+IkFuZHJvaWQgYcW+dXJpcmFuamUgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b191cGRhdGVfcHJlcGFyZSIgbXNnaWQ9IjYzMDU4NTM4MzE5NTUzMTA4OTAiPiJBxb51cmlyYW5qZSBzZSBwcmlwcmVtYeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b191cGRhdGVfcGFja2FnZSIgbXNnaWQ9IjM4NzEzMDIzMjQ1MDA5MjcyOTEiPiJQYWtldCBhxb51cmlyYW5qYSBzZSBvYnJhxJF1amUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3JlYm9vdCIgbXNnaWQ9IjY0Mjg0NDEwMDA5NTE1NjUxODUiPiJQb25vdm8gc2UgcG9rcmXEh2UuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fcmVzZXRfdGl0bGUiIG1zZ2lkPSI0MTQyMzU1OTE1MzQwNjI3NDkwIj4iUmVzZXRvdmFuamUgbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b19yZXNldF9tZXNzYWdlIiBtc2dpZD0iMjQzMjA3NzQ5MTEwMTQxNjM0NSI+IlBvbm92byBzZSBwb2tyZcSHZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX3Byb2dyZXNzIiBtc2dpZD0iMjI4MTA3OTI1NzMyOTk4MTIwMyI+Iklza2xqdcSNaXZhbmpl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzM4NTc0NTE3OTU1NTczMTQ3MCI+IlRhYmxldCDEh2Ugc2UgaXNrbGp1xI1pdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0idHYiIG1zZ2lkPSI0NzY2NzIzNzM5OTUwNzUzNTkiPiJUViDEh2Ugc2UgaXNrbGp1xI1pdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0id2F0Y2giIG1zZ2lkPSIzNDkwMjc1NTY3NDc2MzY5MTg0Ij4iU2F0IMSHZSBzZSB1Z2FzaXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiJUZWxlZm9uIMSHZSBzZSBpc2tsanXEjWl0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+IkRhIGxpIMW+ZWxpdGUgZGEgaXNrbGp1xI1pdGUgdGVsZWZvbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfdGl0bGUiIG1zZ2lkPSI3MDU0NTA5OTE0NTAwMTQwMzYxIj4iUG9ub3ZvIHBva3Jlbmkgc2lzdGVtIHUgYmV6YmVkbm9tIHJlxb5pbXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3Rfc2FmZW1vZGVfY29uZmlybSIgbXNnaWQ9IjU1MjkzOTQ0NTAyNzg0NjY4Ij4iRGEgbGkgxb5lbGl0ZSBkYSBwb25vdm8gcG9rcmVuZXRlIHNpc3RlbSB1IGJlemJlZG5vbSByZcW+aW11PyBPdm8gxIdlIG9uZW1vZ3XEh2l0aSBzdmUgaW5zdGFsaXJhbmUgYXBsaWthY2lqZSBuZXphdmlzbmloIHByb2l6dm/EkWHEjWEuIE9uZSDEh2UgYml0aSB2cmHEh2VuZSBrYWRhIHBvbm92byBwb2tyZW5ldGUgc2lzdGVtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudF90YXNrc190aXRsZSIgbXNnaWQ9IjM2OTE3NjQ2MjM2MzgxMjc4ODgiPiJOZWRhdm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+Ik5lbWEgbmVkYXZuaWggYXBsaWthY2lqYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDA4NDc3MTQwMDg4MDUzNjY1Ij4iT3BjaWplIHphIHRhYmxldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjcyNDAzODY0NjI1MDgxODI5NzYiPiJPcGNpamUgemEgVFYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9ucyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI0MDY0MTY4MzE1NDE2MTUyNTgiPiJPcGNpamUgdGVsZWZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2siIG1zZ2lkPSIyODQ0OTQ1MTkxNzkyMTE5NzEyIj4iWmFrbGp1xI1haiBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fcG93ZXJfb2ZmIiBtc2dpZD0iNDQ3MTg3OTQ0MDgzOTg3OTcyMiI+Iklza2xqdcSNaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fYnVnX3JlcG9ydCIgbXNnaWQ9Ijc5MzQwMTA1Nzg5MjIzMDQ3OTkiPiJJenZlxaF0YWogbyBncmXFoWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+Ik5hcHJhdmkgaXp2ZcWhdGFqIG8gZ3JlxaFjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9tZXNzYWdlIiBtc2dpZD0iMzk4NDQ3MDQ4NzUwMzUwNDU2Ij4iT3ZpbSDEh2Ugc2UgcHJpa3VwaXRpIGluZm9ybWFjaWplIG8gdHJlbnV0bm9tIHN0YW5qdSB1cmXEkWFqYSBrYWtvIGJpIGJpbGUgcG9zbGF0ZSB1IHBvcnVjaSBlLXBvxaF0ZS4gT2QgemFwb8SNaW5qYW5qYSBpenZlxaF0YWphIG8gZ3JlxaFjaSBkbyB0cmVudXRrYSB6YSBuamVnb3ZvIHNsYW5qZSBwcm/Eh2kgxIdlIG5la28gdnJlbWU7IGJ1ZGl0ZSBzdHJwbGppdmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl90b2dnbGVfc2lsZW50X21vZGUiIG1zZ2lkPSI4MjE5NTI1MzQ0MjQ2ODEwOTI1Ij4iTmXEjXVqbmkgcmXFvmltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIzMjg5ODQxOTM3MDAzNzU4ODA2Ij4iWnZ1ayBqZSBJU0tMSlXEjEVOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9zaWxlbnRfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iMTUwNjA0NjU3OTE3NzA2NjQxOSI+Ilp2dWsgamUgVUtMSlXEjEVOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfdG9nZ2xlX2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI1ODg0MzMwMzA2OTI2MzA3NDU2Ij4iUmXFvmltIHJhZGEgdSBhdmlvbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjI3MTk1NTc5ODI2MDg5MTk3NTAiPiJSZcW+aW0gcmFkYSB1IGF2aW9udSBqZSBVS0xKVcSMRU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc19haXJwbGFuZV9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSI1MDc1MDcwNDQyODU0NDkwMjk2Ij4iUmXFvmltIHJhZGEgdSBhdmlvbnUgamUgSVNLTEpVxIxFTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2V0dGluZ3MiIG1zZ2lkPSIxNzU2NTMxNjAyNTkyNTQ1OTY2Ij4iUG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9hc3Npc3QiIG1zZ2lkPSIzODkyODMyOTYxNTk0Mjk1MDMwIj4iUG9tb8SHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl92b2ljZV9hc3Npc3QiIG1zZ2lkPSI3NzUxMTkxNDk1MjAwNTA0NDgwIj4iR2xhc292bmEgcG9tb8SHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaYWtsanXEjWFqIG9kbWFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNhZHLFvmFqIGplIHNha3JpdmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iQmV6YmVkbmkgcmXFvmltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBzaXN0ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IkxpxI1ubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9sYWJlbCIgbXNnaWQ9IjYyNjA4NTA2Njk2NzQ3OTE1MjgiPiJQb3NhbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jb250YWN0cyIgbXNnaWQ9IjM2NTc3NTgxNDU2NzkxNzc2MTIiPiJLb250YWt0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY29udGFjdHMiIG1zZ2lkPSI2OTUxNDk5NTI4MzAzNjY4MDQ2Ij4icHJpc3R1cGkga29udGFrdGltYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9sb2NhdGlvbiIgbXNnaWQ9IjcyNzU1ODI4NTU3MjIzMTAxNjQiPiJMb2thY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbG9jYXRpb24iIG1zZ2lkPSIxMzQ2NjE3NDY1MTI3ODU1MDMzIj4icHJpc3R1cGkgbG9rYWNpamkgb3ZvZyB1cmXEkWFqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGxhYl9jYWxlbmRhciIgbXNnaWQ9IjU4NjM1MDg0Mzc3ODM2ODM5MDIiPiJLYWxlbmRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FsZW5kYXIiIG1zZ2lkPSIzODg5NjE1MjgwMjExMTg0MTA2Ij4icHJpc3R1cGkga2FsZW5kYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3NtcyIgbXNnaWQ9IjIyODMwODgwMzM2NDk2NzgwOCI+IlNNUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc21zIiBtc2dpZD0iNDY1Njk4ODYyMDEwMDk0MDM1MCI+IsWhYWxqZSBpIHByZWdsZWRhIFNNUyBwb3J1a2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc3RvcmFnZSIgbXNnaWQ9IjE5NzExMTg3NzA1NDYzMzY5NjYiPiJTa2xhZGnFoXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwZGVzY19zdG9yYWdlIiBtc2dpZD0iNjM3NzU4NTU0NTgxNTg5MjAzIj4icHJpc3R1cGEgc2xpa2FtYSwgbWVkaWppbWEgaSBkYXRvdGVrYW1hIG5hIHVyZcSRYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX21pY3JvcGhvbmUiIG1zZ2lkPSIxNzE1Mzk5MDAyNTAwNDM0NjQiPiJNaWtyb2ZvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfbWljcm9waG9uZSIgbXNnaWQ9IjQ5ODg4MTIxMTM5NDM1NTQ1ODQiPiJzbmltYSBhdWRpbyBzbmlta2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfY2FtZXJhIiBtc2dpZD0iNDgyMDM3MjQ5NTg5NDU4NjYxNSI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2NfY2FtZXJhIiBtc2dpZD0iMzI1MDYxMTU5NDY3ODM0NzcyMCI+InNuaW1hIHNsaWtlIGkgdmlkZW8gc25pbWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWdyb3VwbGFiX3Bob25lIiBtc2dpZD0iNTIyOTExNTYzODU2NzQ0MDY3NSI+IlRlbGVmb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBkZXNjX3Bob25lIiBtc2dpZD0iNjIzNDIyNDM1NDA2MDY0MTA1NSI+InVwdcSHdWplIHRlbGVmb25za2UgcG96aXZlIGkgdXByYXZsamEgbmppbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZ3JvdXBsYWJfc2Vuc29ycyIgbXNnaWQ9IjQxNjAzNzE3OTIyMzIyNjcyMiI+IlNlbnpvcmkgemEgdGVsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1ncm91cGRlc2Nfc2Vuc29ycyIgbXNnaWQ9IjcxNDc5Njg1MzkzNDY2MzQwNDMiPiJwcmlzdHVwYSBwb2RhY2ltYSBzZW56b3JhIG8gdml0YWxuaW0gZnVua2NpamFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzkwMTcxNzkzNjkzMDE3MDMyMCI+IlByZXV6aW1hIHNhZHLFvmFqIHByb3pvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmV0cmlldmVXaW5kb3dDb250ZW50IiBtc2dpZD0iMzc3MjIyNTAwODYwNTMxMDY3MiI+IlByb3ZlcmF2YSBzYWRyxb5haiBwcm96b3JhIHNhIGtvamltIG9zdHZhcnVqZXRlIGludGVyYWtjaWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUmVxdWVzdFRvdWNoRXhwbG9yYXRpb24iIG1zZ2lkPSIzMTA4NzIzMzY0Njc2NjY3MzIwIj4iVWtsanXEjWkgSXN0cmHFvml2YW5qYSBkb2Rpcm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RUb3VjaEV4cGxvcmF0aW9uIiBtc2dpZD0iNTgwMDU1MjUxNjc3OTI0OTM1NiI+IlN0YXZrZSBrb2plIGRvZGlybmV0ZSDEh2UgYml0aSBpemdvdm9yZW5lLCBhIG1vxb5ldGUgZGEgc2Uga3JlxIdldGUgcG8gZWtyYW51IHBva3JldGltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNzM5ODgxNzY2NTIyNTk0MDczIj4iVWtsanXEjWkgcG9ib2xqxaFhbnUgcHJpc3R1cGHEjW5vc3QgdmViYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RW5oYW5jZWRXZWJBY2Nlc3NpYmlsaXR5IiBtc2dpZD0iNzg4MTA2Mzk2MTUwNzUxMTc2NSI+Ik1vZ3UgZGEgc2UgaW5zdGFsaXJhanUgc2tyaXB0ZSBkYSBiaSBzYWRyxb5haiBhcGxpa2FjaWphIGJpbyBwcmlzdHVwYcSNbmlqaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSIyMTAzNDQwMzkxOTAyNDEyMTc0Ij4iUHJhdGkgdGVrc3Qga29qaSB1bm9zaXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iT2J1aHZhdGEgbGnEjW5lIHBvZGF0a2Uga2FvIMWhdG8gc3UgYnJvamV2aSBrcmVkaXRuaWgga2FydGljYSBpIGxvemlua2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJVcHJhdmxqYWogdXZlxIdhbmplbSBwcmlrYXphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IlVwcmF2bGphIG5pdm9vbSB6dW1pcmFuamEgcHJpa2F6YSBpIG9kcmXEkWl2YW5qZW0gcG9sb8W+YWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+Ik9iYXZsamFuamUgcG9rcmV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iTW/FvmUgZGEgZG9kaXJ1amUsIGxpc3RhLCBza3VwbGphIHByaWtheiBpIG9iYXZsamEgZHJ1Z2UgcG9rcmV0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJvbmVtb2d1xIdhdmFuamUgaWxpIGl6bWVuYSBzdGF0dXNuZSB0cmFrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgb25lbW9ndcSHaSBzdGF0dXNudSB0cmFrdSBpbGkgZGEgZG9kYWplIGkgdWtsYW5qYSBzaXN0ZW1za2UgaWtvbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ImZ1bmtjaW9uaXNhbmplIGthbyBzdGF0dXNuYSB0cmFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI3MTYxMTM2NjA3OTU5NzYwNjAiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgZnVua2Npb25pxaFlIGthbyBzdGF0dXNuYSB0cmFrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2V4cGFuZFN0YXR1c0JhciIgbXNnaWQ9IjExNDgxOTg3ODU5Mzc0ODkyNjQiPiJwcm/FoWlyZW5qZS9za3VwbGphbmplIHN0YXR1c25lIHRyYWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZXhwYW5kU3RhdHVzQmFyIiBtc2dpZD0iNjkxNzU0OTQzNzEyOTQwMTEzMiI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcm/FoWlydWplIGlsaSBza3VwbGphIHN0YXR1c251IHRyYWt1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfaW5zdGFsbF9zaG9ydGN1dCIgbXNnaWQ9IjQyNzkwNzAyMTYzNzE1NjQyMzQiPiJpbnN0YWxpcmFuamUgcHJlxI1pY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19pbnN0YWxsX3Nob3J0Y3V0IiBtc2dpZD0iODM0MTI5NTkxNjI4NjczNjk5NiI+Ik9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSBkb2RhamUgcHJlxI1pY2UgbmEgcG/EjWV0bmkgZWtyYW4gYmV6IGludGVydmVuY2lqZSBrb3Jpc25pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI0NzI5NjM0NTI0MDQ0MDAzNjk5Ij4iZGVpbnN0YWxpcmFuamUgcHJlxI1pY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191bmluc3RhbGxfc2hvcnRjdXQiIG1zZ2lkPSI2NzQ1NzQzNDc0MjY1MDU3OTc1Ij4iT21vZ3XEh2F2YSBhcGxpa2FjaWppIGRhIHVrbGFuamEgcHJlxI1pY2Ugc2EgcG/EjWV0bm9nIGVrcmFuYSBiZXogaW50ZXJ2ZW5jaWplIGtvcmlzbmlrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iMzkwNjAwNzgzMTE5Mjk5MDk0NiI+InByZXVzbWVyYXZhbmplIG9kbGF6bmloIHBveml2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3Byb2Nlc3NPdXRnb2luZ0NhbGxzIiBtc2dpZD0iNTE1NjM4NTAwNTU0NzMxNTg3NiI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSB2aWRpIGtvamkgYnJvaiBzZSBiaXJhIHByaSBvZGxhem5vbSBwb3ppdnUgdXogb3BjaWp1IGRhIHByZXVzbWVyaSBwb3ppdiBuYSBkcnVnaSBicm9qIGlsaSBnYSBwb3RwdW5vIHByZWtpbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlU21zIiBtc2dpZD0iODY3MzQ3MTc2ODk0Nzg5NTA4MiI+InByaWplbSB0ZWtzdHVhbG5paCBwb3J1a2EgKFNNUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlU21zIiBtc2dpZD0iNjQyNDM4Nzc1NDIyODc2NjkzOSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcmltYSBpIG9icmHEkXVqZSBTTVMgcG9ydWtlLiBUbyB6bmHEjWkgZGEgYXBsaWthY2lqYSBtb8W+ZSBkYSBuYWRnbGVkYSBpbGkgYnJpxaFlIHBvcnVrZSBrb2plIHNlIMWhYWxqdSB1cmXEkWFqdSwgYSBkYSB2YW0gaWggbmUgcHJpa2HFvmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWNlaXZlTW1zIiBtc2dpZD0iMTgyMTMxNzM0NDY2ODI1NzA5OCI+InByaWplbSB0ZWtzdHVhbG5paCBwb3J1a2EgKE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlTW1zIiBtc2dpZD0iNTMzMDE5NDM3MjYzMjEyMjYwIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByaW1hIGkgb2JyYcSRdWplIE1NUyBwb3J1a2UuIFRvIHpuYcSNaSBkYSBhcGxpa2FjaWphIG1vxb5lIGRhIG5hZGdsZWRhIGlsaSBicmnFoWUgcG9ydWtlIGtvamUgc2UgxaFhbGp1IHVyZcSRYWp1LCBhIGRhIHZhbSBpaCBuZSBwcmlrYcW+ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRDZWxsQnJvYWRjYXN0cyIgbXNnaWQ9IjE1OTgzMjg4NDM2MTk2NDYxNjYiPiLEjWl0YW5qZSBwb3J1a2EgaW5mbyBzZXJ2aXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENlbGxCcm9hZGNhc3RzIiBtc2dpZD0iNjM2MTk3Mjc3NjA4MDQ1ODk3OSI+Ik9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBwb3J1a2UgaW5mbyBzZXJ2aXNhIGtvamUgdXJlxJFhaiBwcmltYS4gVXBvem9yZW5qYSBpbmZvIHNlcnZpc2Egc2UgbmEgbmVraW0gbG9rYWNpamFtYSBwcmltYWp1IGthbyB1cG96b3JlbmphIG5hIGhpdG5lIHNsdcSNYWpldmUuIFpsb25hbWVybmUgYXBsaWthY2lqZSBtb2d1IGRhIHV0acSNdSBuYSB1xI1pbmFrIGlsaSBvbWV0YWp1IGZ1bmtjaW9uaXNhbmplIHVyZcSRYWphIGthZGEgc2UgcHJpbWkgcG9ydWthIGluZm8gc2VydmlzYSBvIGhpdG5vbSBzbHXEjWFqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI0NzU2NjA5NjM3MDUzMzUzMzE4Ij4ixI1pdGFuamUgcHJpamF2bGplbmloIGZpZG92YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N1YnNjcmliZWRGZWVkc1JlYWQiIG1zZ2lkPSI1NTU3MDU4OTA3OTA2MTQ0NTA1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZXV6aW1hIGRldGFsamUgbyB0cmVudXRubyBzaW5ocm9uaXpvdmFuaW0gZmlkb3ZpbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZW5kU21zIiBtc2dpZD0iNzU0NDU5OTIxNDI2MDk4Mjk4MSI+IsWhYWxqZSBpIHByZWdsZWRhIFNNUyBwb3J1a2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZW5kU21zIiBtc2dpZD0iNzA5NDcyOTI5ODIwNDkzNzY2NyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDFoWFsamUgU01TIHBvcnVrZS4gT3ZvIG1vxb5lIGRhIGRvdmVkZSBkbyBuZW/EjWVraXZhbmloIHRyb8Wha292YS4gWmxvbmFtZXJuZSBhcGxpa2FjaWplIG1vZ3UgZGEgxaFhbGp1IHBvcnVrZSBiZXogdmHFoWUgcG90dnJkZSwgxaF0byBtb8W+ZSBkYSBpemF6b3ZlIHRyb8Wha292ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTbXMiIG1zZ2lkPSI4NzQ1MDg2NTcyMjEzMjcwNDgwIj4ixI1pdGFuamUgdGVrc3R1YWxuaWggcG9ydWthIChTTVMgaWxpIE1NUykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkU21zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNDY3OTgxNTQ4Njg0NzM1NTIyIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIMSNaXRhIFNNUyBwb3J1a2UgdXNrbGFkacWhdGVuZSBuYSB0YWJsZXR1IGlsaSBTSU0ga2FydGljaS4gT3ZvIG9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzdmUgU01TIHBvcnVrZSwgYmV6IG9iemlyYSBuYSBzYWRyxb5haiBpbGkgcG92ZXJsaml2b3N0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRTbXMiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNTEwMjQyNTUxMzY0NzAzODUzNSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBTTVMgcG9ydWtlIGtvamUgxI11dmF0ZSBuYSBUVi11IGlsaSBTSU0ga2FydGljaS4gVG8gem5hxI1pIGRhIGFwbGlrYWNpamEgbW/FvmUgZGEgxI1pdGEgc3ZlIFNNUyBwb3J1a2UsIG5lemF2aXNubyBvZCBzYWRyxb5hamEgaWxpIHBvdmVybGppdm9zdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFNtcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM2OTU5Njc1MzM0NTcyNDA1NTAiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgU01TIHBvcnVrZSB1c2tsYWRpxaF0ZW5lIG5hIHRlbGVmb251IGlsaSBTSU0ga2FydGljaS4gT3ZvIG9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzdmUgU01TIHBvcnVrZSwgYmV6IG9iemlyYSBuYSBzYWRyxb5haiBpbGkgcG92ZXJsaml2b3N0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZVdhcFB1c2giIG1zZ2lkPSI1OTkxMzk4NzExOTM2NTkwNDEwIj4icHJpamVtIHRla3N0dWFsbmloIHBvcnVrYSAoV0FQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVXYXBQdXNoIiBtc2dpZD0iNzQ4MjMyMTkwMjIwNTgzMzg1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByaW1hIGkgb2JyYcSRdWplIFdBUCBwb3J1a2UuIE92YSBkb3p2b2xhIHVrbGp1xI11amUgbW9ndcSHbm9zdCBwcmHEh2VuamEgaWxpIGJyaXNhbmphIHBvcnVrYSBrb2plIHZhbSBzZSDFoWFsanUsIGEga29qZSB2YW0gc2UgbmUgcHJpa2F6dWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZ2V0VGFza3MiIG1zZ2lkPSI2NDY2MDk1Mzk2NjIzOTMzOTA2Ij4icHJldXppbWFuamUgcG9rcmVudXRpaCBhcGxpa2FjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0VGFza3MiIG1zZ2lkPSI3NDU0MjE1OTk1ODQ3NjU4MTAyIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZXV6aW1hIGluZm9ybWFjaWplIG8gYWt0dWVsbmltIGkgbmVkYXZubyBwb2tyZW51dGltIHphZGFjaW1hLiBPdm8gbW/FvmUgZGEgb21vZ3XEh2kgYXBsaWthY2lqaSBkYSBvdGtyaWplIGluZm9ybWFjaWplIG8gdG9tZSBrb2plIHNlIGFwbGlrYWNpamUga29yaXN0ZSBuYSB1cmXEkWFqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21hbmFnZVByb2ZpbGVBbmREZXZpY2VPd25lcnMiIG1zZ2lkPSI3OTE4MTgxMjU5MDk4MjIwMDA0Ij4idXByYXZsamFuamUgdmxhc25pY2ltYSBwcm9maWxhIGkgdXJlxJFhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tYW5hZ2VQcm9maWxlQW5kRGV2aWNlT3duZXJzIiBtc2dpZD0iMTA2ODk0ODUxNDk4NjU3MTY5Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHBvZGVzaSB2bGFzbmlrZSBwcm9maWxhIGkgdmxhc25pa2EgdXJlxJFhamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZW9yZGVyVGFza3MiIG1zZ2lkPSIyMDE4NTc1NTI2OTM0NDIyNzc5Ij4icHJvbWVuYSByZWRvc2xlZGEgcG9rcmVudXRpaCBhcGxpa2FjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVvcmRlclRhc2tzIiBtc2dpZD0iNzczNDIxNzc1NDg3NzQzOTM1MSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcmVtZcWhdGEgemFkYXRrZSB1IHBydmkgcGxhbiBpIHUgcG96YWRpbnUuIEFwbGlrYWNpamEgbW/FvmUgZGEgcmFkaSBvdm8gYmV6IHZhxaFlZyB1bm9zYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2VuYWJsZUNhck1vZGUiIG1zZ2lkPSI1Njg0NTA0MDU4MTkyOTIxMDk4Ij4ib21vZ3XEh2F2YW5qZSByZcW+aW1hIHJhZGEgdSBhdXRvbW9iaWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZW5hYmxlQ2FyTW9kZSIgbXNnaWQ9IjQ4NTMxODc0MjU3NTE0MTk0NjciPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgb21vZ3XEh2kgcmXFvmltIHJhZGEgdSBhdXRvbW9iaWx1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfa2lsbEJhY2tncm91bmRQcm9jZXNzZXMiIG1zZ2lkPSIzOTE0MDI2Njg3NDIwMTc3MjAyIj4iemF0dmFyYW5qZSBkcnVnaWggYXBsaWthY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2tpbGxCYWNrZ3JvdW5kUHJvY2Vzc2VzIiBtc2dpZD0iNDU5MzM1MzIzNTk1OTczMzExOSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSB6YXVzdGF2aSBwb3phZGluc2tlIHByb2Nlc2UgZHJ1Z2loIGFwbGlrYWNpamEuIE92byBtb8W+ZSBkYSB6YXVzdGF2aSBkcnVnZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSIzNTQzMzQ3OTgwODM5NTE4NjEzIj4icHJldmxhxI1lbmplIHByZWtvIGRydWdpaCBhcGxpa2FjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3lzdGVtQWxlcnRXaW5kb3ciIG1zZ2lkPSI4NTg0Njc4MzgxOTcyODIwMTE4Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHNlIHByaWthenVqZSBwcmVrbyBkcnVnaWggYXBsaWthY2lqYSBpbGkgZGVsb3ZhIGtvcmlzbmnEjWtvZyBpbnRlcmZlanNhLiBUbyBtb8W+ZSBkYSBvbWV0YSB1cG90cmVidSBpbnRlcmZlanNhIHByaSByYWR1IHNhIGRydWdpbSBhcGxpa2FjaWphbWEsIGEgbW/FvmUgaSBkYSBpem1lbmkgc3RhdmtlIGtvamUgdmlkaXRlIG5hIGVrcmFudSB1IGRydWdpbSBhcGxpa2FjaWphbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9wZXJzaXN0ZW50QWN0aXZpdHkiIG1zZ2lkPSI4ODQxMTEzNjI3OTU1NTYzOTM4Ij4ib21vZ3XEh2F2YW5qZSBuZXByZWtpZG5lIGFrdGl2bm9zdGkgYXBsaWthY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODUyNTE4OTI3MjMyOTA4NjEzNyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSB1xI1pbmkgc29wc3R2ZW5lIGtvbXBvbmVudGUgdHJham5pbSB1IG1lbW9yaWppLiBPdm8gbW/FvmUgZGEgb2dyYW5pxI1pIG1lbW9yaWp1IGRvc3R1cG51IGRydWdpbSBhcGxpa2FjaWphbWEgaSB1c3BvcmkgdGFibGV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0idHYiIG1zZ2lkPSI1MDg2ODYyNTI5NDk5MTAzNTg3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIG5la2Ugc3ZvamUgZGVsb3ZlIHRyYWpubyB6YWRyxb5pIHUgbWVtb3JpamkuIFRvIG1vxb5lIGRhIG9ncmFuacSNaSBtZW1vcmlqdSBkb3N0dXBudSBkcnVnaW0gYXBsaWthY2lqYW1hIGkgdXNwb3JpIFRWLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3BlcnNpc3RlbnRBY3Rpdml0eSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQzODQ3NjAwNDc1MDgyNzgyNzIiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgdcSNaW5pIHNvcHN0dmVuZSBrb21wb25lbnRlIHRyYWpuaW0gdSBtZW1vcmlqaS4gT3ZvIG1vxb5lIGRhIG9ncmFuacSNaSBtZW1vcmlqdSBkb3N0dXBudSBkcnVnaW0gYXBsaWthY2lqYW1hIGkgdXNwb3JpIHRlbGVmb24uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9nZXRQYWNrYWdlU2l6ZSIgbXNnaWQ9Ijc0NzI5MjE3NjgzNTc5ODE5ODYiPiJtZXJlbmplIHByb3N0b3JhIHphIHNrbGFkacWhdGVuamUgdSBhcGxpa2FjaWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0UGFja2FnZVNpemUiIG1zZ2lkPSIzOTIxMDY4MTU0NDIwNzM4Mjk2Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZXV6bWUgdmVsacSNaW5lIGvDtGRhLCBwb2RhdGFrYSBpIGtlxaFhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVTZXR0aW5ncyIgbXNnaWQ9IjIyMjYxOTUyOTA5NTUyMjQ3MzAiPiJpem1lbmEgcG9kZcWhYXZhbmphIHNpc3RlbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVNldHRpbmdzIiBtc2dpZD0iNzc3NTcyMzQ0MTU1ODkwNzE4MSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBtZW5qYSBwb2RhdGtlIG8gcG9kZcWhYXZhbmp1IHNpc3RlbWEuIFpsb25hbWVybmUgYXBsaWthY2lqZSBtb2d1IGRhIG/FoXRldGUga29uZmlndXJhY2lqdSBzaXN0ZW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIG1zZ2lkPSI1MzEyOTY1NTY1OTg3ODAwMDI1Ij4icG9rcmV0YW5qZSBwcmkgcG9rcmV0YW5qdSBzaXN0ZW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjczOTAzMDQ2NjQxMTY4ODA3MDQiPiJPbW9ndcSHYXZhIGRhIHNlIGFwbGlrYWNpamEgcG9rcmVuZSBvZG1haCBuYWtvbiBwb2tyZXRhbmphIHNpc3RlbWEuIFRvIG1vxb5lIGRhIHVzcG9yaSBwb2tyZXRhbmplIHRhYmxldGEsIHByaSDEjWVtdSBvdmEgYXBsaWthY2lqYSBtb8W+ZSBkYSB1c3BvcmkgZnVua2Npb25pc2FuamUgY2Vsb2cgdGFibGV0YSB0aW1lIMWhdG8gxIdlIHV2ZWsgYml0aSBha3Rpdm5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlY2VpdmVCb290Q29tcGxldGVkIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjQ1MjU4OTAxMjIyMDk2NzM2MjEiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgc2UgcG9rcmVuZSDEjWltIHNlIHBva3JlbmUgc2lzdGVtLiBUbyBtb8W+ZSBkYSB1c3BvcmkgcG9rcmV0YW5qZSBUVi1hLCBwcmkgxI1lbXUgb3ZhIGFwbGlrYWNpamEgbW/FvmUgZGEgdXNwb3JpIGZ1bmtjaW9uaXNhbmplIGNlbG9nIHRhYmxldGEgdGltZSDFoXRvIMSHZSB1dmVrIGJpdGkgYWt0aXZuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+Ik9tb2d1xIdhdmEgZGEgc2UgYXBsaWthY2lqYSBwb2tyZW5lIMSNaW0gc2Ugc2lzdGVtIHBva3JlbmUuIFRvIG1vxb5lIGRhIHVzcG9yaSBwb2tyZXRhbmplIHRlbGVmb25hLCBwcmkgxI1lbXUgb3ZhIGFwbGlrYWNpamEgbW/FvmUgZGEgdXNwb3JpIGZ1bmtjaW9uaXNhbmplIGNlbG9nIHRlbGVmb25hIHRpbWUgxaF0byDEh2UgdXZlayBiaXRpIGFrdGl2bmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9icm9hZGNhc3RTdGlja3kiIG1zZ2lkPSI3OTE5MTI2MzcyNjA2ODgxNjE0Ij4ic2xhbmplIHByaWplbcSNaXZpaCBlbWl0b3ZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIMWhYWxqZSBwcmlqZW3EjWl2YSBlbWl0b3ZhbmphLCBrb2phIG9zdGFqdSBwbyB6YXZyxaFldGt1IGVtaXRvdmFuamEuIFByZWtvbWVybmEgdXBvdHJlYmEgbW/FvmUgZGEgdXNwb3JpIGlsaSBkZXN0YWJpbGl6dWplIHRhYmxldCB0YWtvIMWhdG8gxIdlIGdhIHByaW1vcmF0aSBkYSB0cm/FoWkgcHJldmnFoWUgbWVtb3JpamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjY4MzkyODU2OTc1NjUzODk0NjciPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxaFhbGplIHNuaW1rZSBlbWl0b3ZhbmphLCBrb2ppIG9zdGFqdSBpIHBvc2xlIGtyYWphIGVtaXRvdmFuamEuIFByZWtvbWVybmEgdXBvdHJlYmEgbW/FvmUgZGEgdXNwb3JpIFRWIGlsaSBkYSBtdSB1Z3Jvemkgc3RhYmlsbm9zdCBqZXIga29yaXN0aSBwcmV2acWhZSBtZW1vcmlqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyODI1ODAzNzY0MjMyNDQ1MDkxIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIMWhYWxqZSBwcmlqZW3EjWl2YSBlbWl0b3ZhbmphLCBrb2phIG9zdGFqdSBwbyB6YXZyxaFldGt1IGVtaXRvdmFuamEuIFByZWtvbWVybmEgdXBvdHJlYmEgbW/FvmUgZGEgdXNwb3JpIGlsaSBkZXN0YWJpbGl6dWplIHRlbGVmb24gdGFrbyDFoXRvIMSHZSBnYSBwcmltb3JhdGkgZGEgdHJvxaFpIHByZXZpxaFlIG1lbW9yaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENvbnRhY3RzIiBtc2dpZD0iODM0ODQ4MTEzMTg5OTg4NjEzMSI+IsSNaXRhbmplIGtvbnRha2F0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNTI5NDg2Njg1Njk0MTE0OTYzOSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBwb2RhdGtlIG8ga29udGFrdGltYSB1c2tsYWRpxaF0ZW5lIG5hIHRhYmxldHUsIHVrbGp1xI11anXEh2kgcG9kYXRrZSBvIHRvbWUga29saWtvIMSNZXN0byB6b3ZldGUgb2RyZcSRZW5lIG9zb2JlLCDFoWFsamV0ZSBpbSBwb3J1a2UgZS1wb8WhdGUgaWxpIG5hIGRydWdpIG5hxI1pbiBrb211bmljaXJhdGUgc2EgbmppbWEuIE92YSBkb3p2b2xhIG9tb2d1xIdhdmEgYXBsaWthY2lqYW1hIGRhIMSNdXZhanUgcG9kYXRrZSBvIGtvbnRha3RpbWEsIGEgemxvbmFtZXJuZSBhcGxpa2FjaWplIG1vZ3UgZGEgZGVsZSBwb2RhdGtlIG8ga29udGFrdGltYSBiZXogdmHFoWVnIHpuYW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ29udGFjdHMiIHByb2R1Y3Q9InR2IiBtc2dpZD0iMTgzOTIzODM0NDY1NDgzNDA4NyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBwb2RhdGtlIG8ga29udGFrdGltYSBrb2plIMSNdXZhdGUgbmEgVFYtdSwgdWtsanXEjXVqdcSHaSBrb2xpa28gxI1lc3RvIHN0ZSB6dmFsaSwgc2xhbGkgaW1lamxvdmUgaWxpIG5hIGRydWdlIG5hxI1pbmUga29tdW5pY2lyYWxpIHNhIG9kcmXEkWVuaW0gb3NvYmFtYS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWphbWEgZGEgxI11dmFqdSBwb2RhdGtlIG8ga29udGFrdGltYSwgYSB6bG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBkZWxlIG92ZSBwb2RhdGtlIGJleiB2YcWhZWcgem5hbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDb250YWN0cyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0NDA2NTQxNTI0NTczMDA2NjIiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgcG9kYXRrZSBvIGtvbnRha3RpbWEgdXNrbGFkacWhdGVuZSBuYSB0ZWxlZm9udSwgdWtsanXEjXVqdcSHaSBwb2RhdGtlIG8gdG9tZSBrb2xpa28gxI1lc3RvIHpvdmV0ZSBvZHJlxJFlbmUgb3NvYmUsIMWhYWxqZXRlIGltIHBvcnVrZSBlLXBvxaF0ZSBpbGkgbmEgZHJ1Z2kgbmHEjWluIGtvbXVuaWNpcmF0ZSBzYSBuamltYS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWphbWEgZGEgxI11dmFqdSBwb2RhdGtlIG8ga29udGFrdGltYSwgYSB6bG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBkZWxlIHBvZGF0a2UgbyBrb250YWt0aW1hIGJleiB2YcWhZWcgem5hbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVDb250YWN0cyIgbXNnaWQ9IjUxMDc0OTIwODY0MTY3OTM1NDQiPiJpem1lbmEga29udGFrYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDb250YWN0cyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODk3MjQzOTMyNTIxOTUzNjAyIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIG1lbmphIHBvZGF0a2UgbyBrb250YWt0aW1hIHVza2xhZGnFoXRlbmUgbmEgdGFibGV0dSwgdWtsanXEjXVqdcSHaSBwb2RhdGtlIG8gdG9tZSBrb2xpa28gxI1lc3RvIHpvdmV0ZSBvZHJlxJFlbmUga29udGFrdGUsIMWhYWxqZXRlIGltIHBvcnVrZSBlLXBvxaF0ZSBpbGkgbmEgZHJ1Z2kgbmHEjWluIGtvbXVuaWNpcmF0ZSBzYSBuamltYS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWphbWEgZGEgYnJpxaF1IHBvZGF0a2UgbyBrb250YWt0aW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNTQzODIzMDk1NzAwMDAxODk1OSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBtZW5qYSBwb2RhdGtlIG8ga29udGFrdGltYSBrb2plIMSNdXZhdGUgbmEgVFYtdSwgdWtsanXEjXVqdcSHaSBrb2xpa28gxI1lc3RvIHN0ZSB6dmFsaSwgc2xhbGkgaW1lamxvdmUgaWxpIG5hIGRydWdlIG5hxI1pbmUga29tdW5pY2lyYWxpIHNhIG9kcmXEkWVuaW0ga29udGFrdGltYS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWphbWEgZGEgYnJpxaF1IHBvZGF0a2UgbyBrb250YWt0aW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ29udGFjdHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1ODk4NjkyMjQ2MjUxNjM1NTgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgcG9kYXRrZSBvIGtvbnRha3RpbWEgdXNrbGFkacWhdGVuZSBuYSB0ZWxlZm9udSwgdWtsanXEjXVqdcSHaSBwb2RhdGtlIG8gdG9tZSBrb2xpa28gxI1lc3RvIHpvdmV0ZSBvZHJlxJFlbmUga29udGFrdGUsIMWhYWxqZXRlIGltIHBvcnVrZSBlLXBvxaF0ZSBpbGkgbmEgZHJ1Z2kgbmHEjWluIGtvbXVuaWNpcmF0ZSBzYSBuamltYS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWphbWEgZGEgYnJpxaF1IHBvZGF0a2UgbyBrb250YWt0aW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGxMb2ciIG1zZ2lkPSIzNDc4MTMzMTg0NjI0MTAyNzM5Ij4ixI1pdGFuamUgZXZpZGVuY2lqZSBwb3ppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzcwMDY0NTE4NDg3MDc2MDI4NSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBldmlkZW5jaWp1IHBveml2YSBuYSB0YWJsZXR1LCB1a2xqdcSNdWp1xIdpIHBvZGF0a2UgbyBkb2xhem5pbSBpIG9kbGF6bmltIHBveml2aW1hLiBPdmEgZG96dm9sYSBvbW9ndcSHYXZhIGFwbGlrYWNpamFtYSBkYSDEjXV2YWp1IHBvZGF0a2UgbyBldmlkZW5jaWppIHBveml2YSwgYSB6bG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBkZWxlIHBvZGF0a2UgbyBldmlkZW5jaWppIHBveml2YSBiZXogdmHFoWVnIHpuYW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsbExvZyIgcHJvZHVjdD0idHYiIG1zZ2lkPSI1NjExNzcwODg3MDQ3Mzg3OTI2Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIMSNaXRhIGV2aWRlbmNpanUgcG96aXZhIFRWLWEsIHVrbGp1xI11anXEh2kgcG9kYXRrZSBvIGRvbGF6bmltIGkgb2RsYXpuaW0gcG96aXZpbWEuIE92YSBkb3p2b2xhIG9tb2d1xIdhdmEgYXBsaWthY2lqYW1hIGRhIMSNdXZhanUgcG9kYXRrZSBpeiBldmlkZW5jaWplIHBveml2YSwgYSB6bG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBkZWxlIHRlIHBvZGF0a2UgYmV6IHZhxaFlZyB6bmFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1Nzc3NzI1Nzk2ODEzMjE3MjQ0Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIMSNaXRhIGV2aWRlbmNpanUgcG96aXZhIG5hIHRlbGVmb251LCB1a2xqdcSNdWp1xIdpIHBvZGF0a2UgbyBkb2xhem5pbSBpIG9kbGF6bmltIHBveml2aW1hLiBPdmEgZG96dm9sYSBvbW9ndcSHYXZhIGFwbGlrYWNpamFtYSBkYSDEjXV2YWp1IHBvZGF0a2UgbyBldmlkZW5jaWppIHBveml2YSwgYSB6bG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBkZWxlIHBvZGF0a2UgbyBldmlkZW5jaWppIHBveml2YSBiZXogdmHFoWVnIHpuYW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlQ2FsbExvZyIgbXNnaWQ9Ijg1NTIwNDU2NjQ3NDM0OTkzNTQiPiJwaXNhbmplIGV2aWRlbmNpamUgcG96aXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2NjYxODA2MDYyMjc0MTE5MjQ1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIG1lbmphIGV2aWRlbmNpanUgcG96aXZhIG5hIHRhYmxldHUsIHVrbGp1xI11anXEh2kgcG9kYXRrZSBvIGRvbGF6bmltIGkgb2RsYXpuaW0gcG96aXZpbWEuIFpsb25hbWVybmUgYXBsaWthY2lqZSBtb2d1IG92byBkYSBrb3Jpc3RlIGRhIGJpIGJyaXNhbGUgaWxpIG1lbmphbGUgZXZpZGVuY2lqdSBwb3ppdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxsTG9nIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjQyMjUwMzQ4OTIyNDgzOTgwMTkiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgZXZpZGVuY2lqdSBwb3ppdmEgbmEgVFYtdSwgdWtsanXEjXVqdcSHaSBwb2RhdGtlIG8gZG9sYXpuaW0gaSBvZGxhem5pbSBwb3ppdmltYS4gWmxvbmFtZXJuZSBhcGxpa2FjaWplIG1vZ3Ugb3ZvIGRhIGtvcmlzdGUgZGEgYmkgYnJpc2FsZSBpbGkgbWVuamFsZSBldmlkZW5jaWp1IHBveml2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGxMb2ciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODM5NDE3MzYzNTI3ODc4NDIiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgZXZpZGVuY2lqdSBwb3ppdmEgbmEgdGVsZWZvbnUsIHVrbGp1xI11anXEh2kgcG9kYXRrZSBvIGRvbGF6bmltIGkgb2RsYXpuaW0gcG96aXZpbWEuIFpsb25hbWVybmUgYXBsaWthY2lqZSBtb2d1IG92byBkYSBrb3Jpc3RlIGRhIGJpIGJyaXNhbGUgaWxpIG1lbmphbGUgZXZpZGVuY2lqdSBwb3ppdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ib2R5U2Vuc29ycyIgbXNnaWQ9IjQ2ODMzNDEyOTE4MTg1MjAyNzciPiJwcmlzdHVwIHNlbnpvcmltYSBuYSB0ZWx1IChwb3B1dCBtb25pdG9yYSB6YSBwcmHEh2VuamUgcHVsc2EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYm9keVNlbnNvcnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0MzgwMDE1MDIxNzU0MTgwNDMxIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByaXN0dXBhIHBvZGFjaW1hIHNhIHNlbnpvcmEga29qaSBuYWRnbGVkYWp1IGZpemnEjWt1IGtvbmRpY2lqdSwga2FvIMWhdG8gamUgYnJvaiBvdGt1Y2FqYSBzcmNhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZENhbGVuZGFyIiBtc2dpZD0iNTk3MjcyNzU2MDI1NzYxMjM5OCI+IsSNaXRhbmplIGthbGVuZGFyc2tpaCBkb2dhxJFhamEgaSBwb3ZlcmxqaXZpaCBpbmZvcm1hY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRDYWxlbmRhciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDIxNjQ2MjA0OTA1NzY1ODcyMyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzdmUgZG9nYcSRYWplIGthbGVuZGFyYSB1c2tsYWRpxaF0ZW5lIG5hIHRhYmxldHUsIHVrbGp1xI11anXEh2kgZG9nYcSRYWplIHByaWphdGVsamEgaWxpIGtvbGVnYS4gT3ZvIG1vxb5lIGRhIG9tb2d1xIdpIGFwbGlrYWNpamkgZGEgZGVsaSBpbGkgxI11dmEgcG9kYXRrZSBrYWxlbmRhcmEsIGJleiBvYnppcmEgbmEgcG92ZXJsaml2b3N0IGlsaSBvc2V0bGppdm9zdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkQ2FsZW5kYXIiIHByb2R1Y3Q9InR2IiBtc2dpZD0iMzE5MTM1MjQ1MjI0MjM5NDE5NiI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzdmUgZG9nYcSRYWplIGl6IGthbGVuZGFyYSBrb2plIMSNdXZhdGUgbmEgVFYtdSwgdWtsanXEjXVqdcSHaSBpIG9uZSBrb2ppIHByaXBhZGFqdSBwcmlqYXRlbGppbWEgaWxpIGtvbGVnYW1hLiBUbyBtb8W+ZSBkYSBkb3p2b2xpIGFwbGlrYWNpamkgZGEgZGVsaSBpbGkgxI11dmEgcG9kYXRrZSBpeiBrYWxlbmRhcmEsIG5lemF2aXNubyBvZCBwb3ZlcmxqaXZvc3RpIGlsaSBvc2V0bGppdm9zdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZENhbGVuZGFyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzQzNDU0ODY4MjQ3MDg1MTU4MyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzdmUgZG9nYcSRYWplIGthbGVuZGFyYSB1c2tsYWRpxaF0ZW5lIG5hIHRlbGVmb251LCB1a2xqdcSNdWp1xIdpIGRvZ2HEkWFqZSBwcmlqYXRlbGphIGlsaSBrb2xlZ2EuIE92byBtb8W+ZSBkYSBvbW9ndcSHaSBhcGxpa2FjaWppIGRhIGRlbGkgaWxpIMSNdXZhIHBvZGF0a2Uga2FsZW5kYXJhLCBiZXogb2J6aXJhIG5hIHBvdmVybGppdm9zdCBpbGkgb3NldGxqaXZvc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZUNhbGVuZGFyIiBtc2dpZD0iODQzODg3NDc1NTE5MzgyNTY0NyI+ImRvZGF2YW5qZSBpbGkgaXptZW5hIGthbGVuZGFyc2tpaCBkb2dhxJFhamEgaSBzbGFuamUgcG9ydWthIGUtcG/FoXRlIGdvc3RpbWEgYmV6IHpuYW5qYSB2bGFzbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlQ2FsZW5kYXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjY2NzkwMzU1MjAxMTM2Njg1MjgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgZG9kYWplLCB1a2xhbmphIGkgbWVuamEgZG9nYcSRYWplIGtvamUgbW/FvmV0ZSBkYSBpem1lbml0ZSBuYSB0YWJsZXR1LCB1a2xqdcSNdWp1xIdpIGRvZ2HEkWFqZSBwcmlqYXRlbGphIGkga29sZWdhLiBPdm8gbW/FvmUgZGEgb21vZ3XEh2kgYXBsaWthY2lqaSBkYSDFoWFsamUgcG9ydWtlIGtvamUgaXpnbGVkYWp1IGthbyBkYSBpaCDFoWFsanUgdmxhc25pY2kga2FsZW5kYXJhIGlsaSBtZW5qYSBkb2dhxJFhamUgYmV6IHpuYW5qYSB2bGFzbmlrYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZUNhbGVuZGFyIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjEyNzMyOTA2MDU1MDA5MDI1MDciPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgZG9kYWplLCB1a2xhbmphIGkgbWVuamEgZG9nYcSRYWplIGtvamUgbW/FvmV0ZSBkYSBpem1lbml0ZSBuYSBUVi11LCB1a2xqdcSNdWp1xIdpIGRvZ2HEkWFqZSBwcmlqYXRlbGphIGlsaSBrb2xlZ2EuIE92byBtb8W+ZSBkYSBkb3p2b2xpIGFwbGlrYWNpamkgZGEgxaFhbGplIHBvcnVrZSBrb2plIGl6Z2xlZGFqdSBrYW8gZGEgaWggxaFhbGp1IHZsYXNuaWNpIGthbGVuZGFyYSBpbGkgZGEgbWVuamEgZG9nYcSRYWplIGJleiB6bmFuamEgdmxhc25pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVDYWxlbmRhciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIzMjQ0Njk0OTYzMjcyNDkzNzYiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgZG9kYWplLCB1a2xhbmphIGkgbWVuamEgZG9nYcSRYWplIGtvamUgbW/FvmV0ZSBkYSBpem1lbml0ZSBuYSB0ZWxlZm9udSwgdWtsanXEjXVqdcSHaSBkb2dhxJFhamUgcHJpamF0ZWxqYSBpIGtvbGVnYS4gT3ZvIG1vxb5lIGRhIG9tb2d1xIdpIGFwbGlrYWNpamkgZGEgxaFhbGplIHBvcnVrZSBrb2plIGl6Z2xlZGFqdSBrYW8gZGEgaWggxaFhbGp1IHZsYXNuaWNpIGthbGVuZGFyYSBpbGkgbWVuamEgZG9nYcSRYWplIGJleiB6bmFuamEgdmxhc25pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSIyODM2MzA4MDc2NzIwNTUzODM3Ij4icHJpc3R1cCBkb2RhdG5pbSBrb21hbmRhbWEgZG9iYXZsamHEjWEgbG9rYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NMb2NhdGlvbkV4dHJhQ29tbWFuZHMiIG1zZ2lkPSI2MDc4MzA3MjIxMDU2NjQ5OTI3Ij4iT21vZ3XEh2F2YSBhcGxpa2FjaWppIGRhIHByaXN0dXBhIGRvZGF0bmltIGtvbWFuZGFtYSBkYXZhb2NhIHVzbHVnYSBsb2thY2lqZS4gVG8gbW/FvmUgZGEgb21vZ3XEh2kgYXBsaWthY2lqaSBkYSB1dGnEjWUgbmEgcmFkIEdQUy1hIGlsaSBkcnVnaWggaXp2b3JhIGxva2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRmluZUxvY2F0aW9uIiBtc2dpZD0iMjUxMDM0NDE1NDYwOTUwOTQ0Ij4icHJpc3R1cCBwcmVjaXpub2ogbG9rYWNpamkgKHV0dnLEkWVuYSBwcmVrbyBtcmXFvmUgaSBHUFMtYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NGaW5lTG9jYXRpb24iIG1zZ2lkPSI1Mjk1MDQ3NTYzNTY0OTgxMjUwIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZXV6bWUgcHJlY2l6bmUgcG9kYXRrZSBvIHZhxaFvaiBsb2thY2lqaSBwb21vxId1IGdsb2JhbG5vZyBzaXN0ZW1hIHBvemljaW9uaXJhbmphIChHUFMpIGlsaSBtcmXFvm5paCBpenZvcmEgbG9rYWNpamEga2FvIMWhdG8gc3UgbW9iaWxuaSBwcmVkYWpuaWNpIGkgV2ktRmkgbXJlxb5lLiBPdmUgdXNsdWdlIGxvY2lyYW5qYSBtb3JhanUgZGEgYnVkdSB1a2xqdcSNZW5lIGkgZG9zdHVwbmUgdXJlxJFhanUgZGEgYmkgYXBsaWthY2lqYSBtb2dsYSBkYSBpaCBrb3Jpc3RpLiBBcGxpa2FjaWplIG5hIG9zbm92dSBvdm9nYSBtb2d1IGRhIG9kcmVkZSBnZGUgc2UgcHJpYmxpxb5ubyBuYWxheml0ZSBpIG1vZ3UgZG9kYXRubyBkYSB0cm/FoWUgYmF0ZXJpanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NDb2Fyc2VMb2NhdGlvbiIgbXNnaWQ9Ijc3MTUyNzc2MTM5Mjg1Mzk0MzQiPiJwcmlzdHVwIHByaWJsacW+bm9qIGxva2FjaWppICh1dHZyxJFlbmEgcHJla28gbXJlxb5lKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc0NvYXJzZUxvY2F0aW9uIiBtc2dpZD0iMjUzODIwMDE4NDM3MzMwMjI5NSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcmV1em1lIHBvZGF0a2UgbyB2YcWhb2ogcHJpYmxpxb5ub2ogbG9rYWNpamkuIFBvZGF0a2UgbyBvdm9qIGxva2FjaWppIG9iZXpiZcSRdWp1IHVzbHVnZSBsb2NpcmFuamEgcG9tb8SHdSBtcmXFvm5paCBpenZvcmEgbG9rYWNpamEga2FvIMWhdG8gc3UgbW9iaWxuaSBwcmVkYWpuaWNpIGkgV2ktRmkgbXJlxb5lLiBPdmUgdXNsdWdlIGxvY2lyYW5qYSBtb3JhanUgZGEgYnVkdSB1a2xqdcSNZW5lIGkgZG9zdHVwbmUgdXJlxJFhanUgZGEgYmkgYXBsaWthY2lqYSBtb2dsYSBkYSBpaCBrb3Jpc3RpLiBBcGxpa2FjaWplIG5hIG9zbm92dSBvdm9nYSBtb2d1IGRhIG9kcmVkZSBnZGUgc2UgcHJpYmxpxb5ubyBuYWxheml0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX21vZGlmeUF1ZGlvU2V0dGluZ3MiIG1zZ2lkPSI2MDk1ODU5OTM3MDY5MTQ2MDg2Ij4icHJvbWVuYSBhdWRpbyBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19tb2RpZnlBdWRpb1NldHRpbmdzIiBtc2dpZD0iMzUyMjU2NTM2NjgwNjI0ODUxNyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBtZW5qYSBnbG9iYWxuYSBhdWRpbyBwb2RlxaFhdmFuamEga2FvIMWhdG8gc3UgamHEjWluYSB6dnVrYSBpIGl6Ym9yIHp2dcSNbmlrYSBrb2ppIHNlIGtvcmlzdGkga2FvIGl6bGF6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVjb3JkQXVkaW8iIG1zZ2lkPSIzODc2MDQ5NzcxNDI3NDY2MzIzIj4ic25pbWFuamUgYXVkaW8gemFwaXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjb3JkQXVkaW8iIG1zZ2lkPSI0OTA2ODM5MzAxMDg3OTgwNjgwIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHNuaW1hIHp2dWsgcG9tb8SHdSBtaWtyb2ZvbmEuIE92YSBkb3p2b2xhIG9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSBzbmltYSB6dnVrIHUgYmlsbyBrb20gdHJlbnV0a3UgYmV6IHZhxaFlIHBvdHZyZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjI5MzU4NTIzMDIyMTY4NTIwNjUiPiJzbGFuamUga29tYW5kaSBuYSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zaW1fY29tbXVuaWNhdGlvbiIgbXNnaWQ9IjU3MjUxNTk2NTQyNzk2Mzk0OTgiPiJPbW9ndcSHYXZhIGFwbGlrYWNpamkgZGEgxaFhbGplIGtvbWFuZGUgU0lNIGthcnRpY2kuIFRvIGplIHZlb21hIG9wYXNuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbWVyYSIgbXNnaWQ9IjM2MTYzOTE5MTk1NTk3NTExOTIiPiJzbmltYW5qZSBmb3RvZ3JhZmlqYSBpIHZpZGVvIHNuaW1ha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHNuaW1hIHNsaWtlIGkgdmlkZW8gc25pbWtlIGthbWVyb20uIE92YSBkb3p2b2xhIG9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSB1IGJpbG8ga29tIHRyZW51dGt1IGtvcmlzdGkga2FtZXJ1IGJleiB2YcWhZSBwb3R2cmRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrb250cm9sYSB2aWJyYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb250cm9sacWhZSB2aWJyYWNpanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iZGlyZWt0bm8gcG96aXZhbmplIGJyb2pldmEgdGVsZWZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHBveml2YSBicm9qZXZlIHRlbGVmb25hIGJleiB2YcWhZSBkb3p2b2xlLiBPdm8gbW/FvmUgZGEgZG92ZWRlIGRvIG5lb8SNZWtpdmFuaWggdHJvxaFrb3ZhIGlsaSBwb3ppdmEuIEltYWp0ZSBuYSB1bXUgZGEgb3ZvIG5lIGRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwb3ppdmEgYnJvamV2ZSB6YSBoaXRuZSBzbHXEjWFqZXZlLiBabG9uYW1lcm5lIGFwbGlrYWNpamUgbW9ndSBkYSBwb3ppdmFqdSBiZXogdmHFoWUgcG90dnJkZSwgxaF0byBtb8W+ZSBkYSBkb3ZlZGUgZG8gdHJvxaFrb3ZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4icHJpc3R1cCB1c2x1emkgcG96aXZhIHBvbW/Eh3UgcmF6bWVuZSB0cmVudXRuaWggcG9ydWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSI4OTkyODg0MDE1MTk4Mjk4Nzc1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGtvcmlzdGkgdXNsdWd1IHJhem1lbmUgdHJlbnV0bmloIHBvcnVrYSBkYSBiaSB1cHXEh2l2YWxhIHBveml2ZSBiZXogdmHFoWUgaW50ZXJ2ZW5jaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZFBob25lU3RhdGUiIG1zZ2lkPSI5MTc4MjI4NTI0NTA3NjEwNDg2Ij4ixI1pdGFuamUgc3RhdHVzYSBpIGlkZW50aXRldGEgdGVsZWZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkUGhvbmVTdGF0ZSIgbXNnaWQ9IjE2MzkyMTI3NzE4MjYxMjU1MjgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJpc3R1cGEgZnVua2NpamFtYSB0ZWxlZm9uYSBuYSB1cmXEkWFqdS4gT3ZhIGRvenZvbGEgb21vZ3XEh2F2YSBhcGxpa2FjaWppIGRhIHV0dnJkaSBicm9qIHRlbGVmb25hIGkgSUQtb3ZlIHVyZcSRYWphLCB6YXRpbSBkYSBsaSBqZSBwb3ppdiBha3RpdmFuLCBrYW8gaSBicm9qIGRhbGppbnNrb2cgdXJlxJFhamEgc2Ega29qaW0gamUgdXNwb3N0YXZsamVuIHBveml2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjE1MzE3MzE0MzUwMTE0OTUwMTUiPiJzcHJlxI1hdmFuamUgcHJlbGFza2EgdGFibGV0YSB1IHN0YW5qZSBzcGF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9InR2IiBtc2dpZD0iMjYwMTE5MzI4ODk0OTE1NDEzMSI+InNwcmXEjWF2YW5qZSBUVi1hIGRhIHByZcSRZSB1IHN0YW5qZSBzcGF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd2FrZUxvY2siIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI1NzM0ODAxODc5NDE0OTYxMzAiPiJzcHJlxI1hdmFuamUgcHJlbGFza2EgdGVsZWZvbmEgdSBzdGFuamUgc3BhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzMxMTMxOTgyNDQwMDQ0Nzg2OCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBzcHJlxI1pIHRhYmxldCBkYSBwcmXEkWUgdSBzdGFuamUgc3BhdmFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd2FrZUxvY2siIHByb2R1Y3Q9InR2IiBtc2dpZD0iMzIwODUzNDg1OTIwODk5Njk3NCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBzcHJlxI1pIFRWIGRhIHByZcSRZSB1IHN0YW5qZSBzcGF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193YWtlTG9jayIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg1NTkxMDA2NzczNzI5Mjg3NTQiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgc3ByZcSNaSB0ZWxlZm9uIGRhIHByZcSRZSB1IHN0YW5qZSBzcGF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3RyYW5zbWl0SXIiIG1zZ2lkPSI3NTQ1ODU4NTA0MjM4NTMwMTA1Ij4icHJlbm9zIGluZnJhY3J2ZW5paCB6cmFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3RyYW5zbWl0SXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjUzNTgzMDg4NTQzMDY1MjkxNzAiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEga29yaXN0aSBvZGHFoWlsamHEjSBpbmZyYWNydmVuaWggenJha2EgdGFibGV0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190cmFuc21pdElyIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjM5MjY3OTA4Mjg1MTQ4NjcxMDEiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEga29yaXN0aSBvZGHFoWlsamHEjSBpbmZyYWNydmVuaWggenJha2EgVFYtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY190cmFuc21pdElyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzk1Nzc2Mzc0NTAyMDMwMDcyNSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb3Jpc3RpIG9kYcWhaWxqYcSNIGluZnJhY3J2ZW5paCB6cmFrYSB0ZWxlZm9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlciIgbXNnaWQ9IjY2MjcxOTIzMzMzNzM0NjUxNDMiPiJwb2RlxaFhdmFuamUgcG96YWRpbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRXYWxscGFwZXIiIG1zZ2lkPSI3MzczNDQ3OTIwOTc3NjI0NzQ1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHBvc3RhdmxqYSBwb3phZGludSBzaXN0ZW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0V2FsbHBhcGVySGludHMiIG1zZ2lkPSIzMjc4NjA4MTY1OTc3NzM2NTM4Ij4icHJpbGFnb8SRYXZhbmplIHZlbGnEjWluZSBwb3phZGluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwb2Rlc2kgc2F2ZXRlIHphIHNpc3RlbXNrdSB2ZWxpxI1pbnUgcG96YWRpbmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiJwb2RlxaFhdmFuamUgdnJlbWVuc2tlIHpvbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcm9tZW5pIHZyZW1lbnNrdSB6b251IHRhYmxldGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iODg4ODY0NjUzOTQ2MTc1OTU1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByb21lbmkgdnJlbWVuc2t1IHpvbnUgVFYtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ0OTk5NDM0ODg0MzY2MzMzOTgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJvbWVuaSB2cmVtZW5za3Ugem9udSB0ZWxlZm9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2dldEFjY291bnRzIiBtc2dpZD0iMTA4Njc5NTQ2Nzc2MDEyMjExNCI+InByb25hbGHFvmVuamUgbmFsb2dhIG5hIHVyZcSRYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJldXppbWEgbGlzdHUgbmFsb2dhIHBvem5hdGloIHRhYmxldHUuIE92byBtb8W+ZSBkYSBvYnVodmF0YSBiaWxvIGtvamUgbmFsb2dlIGtvamUgcHJhdmUgYXBsaWthY2lqZSBrb2plIGluc3RhbGlyYXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjQxOTA2MzMzOTU2MzM5MDc1NDMiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgZG/EkWUgZG8gbGlzdGUgbmFsb2dhIHBvem5hdGloIFRWLXUuIFR1IG1vZ3UgZGEgc3BhZGFqdSBuYWxvemkga29qZSBzdSBvdHZvcmlsZSBhcGxpa2FjaWplIGtvamUgc3RlIGluc3RhbGlyYWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2dldEFjY291bnRzIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzQ0ODMxNjgyMjQ1MTgwNzM4MiI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcmV1emltYSBsaXN0dSBuYWxvZ2EgcG96bmF0aWggdGVsZWZvbnUuIE92byBtb8W+ZSBkYSBvYnVodmF0YSBiaWxvIGtvamUgbmFsb2dlIGtvamUgcHJhdmUgYXBsaWthY2lqZSBrb2plIGluc3RhbGlyYXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iNDk1MTAyNzk2NDM0ODk3NDc3MyI+InByZWdsZWQgbXJlxb5uaWggdmV6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjgzMTg5NjQ0MjQ2NzU5NjA5NzUiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJlZ2xlZGEgaW5mb3JtYWNpamUgbyBtcmXFvm5pbSB2ZXphbWEga2FvIMWhdG8gc3UgaW5mb3JtYWNpamUgbyB0b21lIGtvamUgbXJlxb5lIHBvc3RvamUgaSBrb2plIG1yZcW+ZSBzdSBwb3ZlemFuZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iNzkzNDUxNjYzMTM4NDE2ODEwNyI+ImltYSBwdW4gbXJlxb5uaSBwcmlzdHVwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByYXZpIG1yZcW+bmUgcHJpa2xqdcSNa2UgaSBrb3Jpc3RpIHByaWxhZ2/EkWVuZSBtcmXFvm5lIHByb3Rva29sZS4gUHJlZ2xlZGHEjSBpIGRydWdlIGFwbGlrYWNpamUgb21vZ3XEh2F2YWp1IHNsYW5qZSBwb2RhdGFrYSBuYSBJbnRlcm5ldCwgcGEgb3ZhIGRvenZvbGEgbmlqZSBwb3RyZWJuYSB6YSBzbGFuamUgcG9kYXRha2EgbmEgSW50ZXJuZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiJwcm9tZW5hIHZlemUgc2EgbXJlxb5vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZU5ldHdvcmtTdGF0ZSIgbXNnaWQ9IjY3ODkxMjM5MTI0NzY0MTYyMTQiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgc3RhdHVzIHBvdmV6aXZhbmphIHNhIG1yZcW+b20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjU5NTI1ODQ5NjQzNzMwMTc5NjAiPiJwcm9tZW5hIHBvdmV6aXZhbmphIHByaXZleml2YW5qZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VUZXRoZXJTdGF0ZSIgbXNnaWQ9IjE1MjQ0NDEzNDQ0MTIzMTk3ODAiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgc3RhdHVzIHZlemUgc2EgcHJpdmV6YW5vbSBtcmXFvm9tLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzV2lmaVN0YXRlIiBtc2dpZD0iNTIwMjAxMjk0OTI0NzA0MDAxMSI+InByZWdsZWQgV2ktRmkgdmV6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpZmlTdGF0ZSIgbXNnaWQ9IjUwMDI3OTgwNzczODc4MDM3MjYiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJlZ2xlZGEgaW5mb3JtYWNpamUgbyBXaS1GaSB1bXJlxb5hdmFuanUsIGthbyDFoXRvIHN1IGluZm9ybWFjaWplIG8gdG9tZSBkYSBsaSBqZSBXaS1GaSBvbW9ndcSHZW4gaSBuYXppdmkgcG92ZXphbmloIFdpLUZpIHVyZcSRYWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaVN0YXRlIiBtc2dpZD0iNjU1MDY0MTE4ODc0OTEyODAzNSI+InBvdmV6aXZhbmplIGkgcHJla2lkIHZlemUgc2EgV2ktRmkgbXJlxb5vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlTdGF0ZSIgbXNnaWQ9IjcxMzc5NTAyOTczODYxMjc1MzMiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgc2UgcG92ZXp1amUgc2EgcHJpc3R1cG5pbSB0YcSNa2FtYSB6YSBXaS1GaSBpIHByZWtpZGEgdmV6dSBzYSBuamltYSwga2FvIGkgZGEgdW5vc2kgcHJvbWVuZSB1IGtvbmZpZ3VyYWNpanUgdXJlxJFhamEgemEgV2ktRmkgbXJlxb5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2hhbmdlV2lmaU11bHRpY2FzdFN0YXRlIiBtc2dpZD0iMTM2ODI1Mzg3MTQ4MzI1NDc4NCI+Im9tb2d1xIdhdmFuamUgcHJpamVtYSB2acWhZXNtZXJub2cgV2ktRmkgc2FvYnJhxIdhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijc5Njk3NzQwMjEyNTYzMzY1NDgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJpbWEgcGFrZXRlIGtvamkgc2UgxaFhbGp1IG5hIHN2ZSB1cmXEkWFqZSBuYSBXaS1GaSBtcmXFvmkgcG9tb8SHdSB2acWhZXNtZXJuaWggYWRyZXNhLCBhIG5lIHNhbW8gbmEgdGFibGV0LiBLb3Jpc3RpIHZpxaFlIG5hcGFqYW5qYSBvZCByZcW+aW1hIGplZG5vc21lcm5vZyBzYW9icmHEh2FqYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jaGFuZ2VXaWZpTXVsdGljYXN0U3RhdGUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iOTAzMTk3NTY2MTE0NTAxNDE2MCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwcmltYSBwYWtldGUgcG9zbGF0ZSBzdmltIHVyZcSRYWppbWEgbmEgV2ktRmkgbXJlxb5pIHBvbW/Eh3UgYWRyZXNhIHphIHZpxaFlc3RydWtvIHByZWJhY2l2YW5qZSwgbmUgc2FtbyBUVi11LiBLb3Jpc3RpIHZpxaFlIGVuZXJnaWplIG5lZ28gcmXFvmltIGJleiB2acWhZXN0cnVrb2cgcHJlYmFjaXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpZmlNdWx0aWNhc3RTdGF0ZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTE5NDk3MDYwMjUzNDk5MjYiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJpbWEgcGFrZXRlIGtvamkgc2UgxaFhbGp1IG5hIHN2ZSB1cmXEkWFqZSBuYSBXaS1GaSBtcmXFvmkgcG9tb8SHdSB2acWhZXNtZXJuaWggYWRyZXNhLCBhIG5lIHNhbW8gbmEgdGVsZWZvbi4gS29yaXN0aSB2acWhZSBuYXBhamFuamEgb2QgcmXFvmltYSBqZWRub3NtZXJub2cgc2FvYnJhxIdhamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9ibHVldG9vdGhBZG1pbiIgbXNnaWQ9IjYwMDY5NjczNzM5MzU5MjY2NTkiPiJwcmlzdHVwIEJsdWV0b290aCBwb2RlxaFhdmFuamltYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2OTIxMTc3NDcxNzQ4ODgyMTM3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGtvbmZpZ3VyacWhZSBsb2thbG5pIEJsdWV0b290aCB0YWJsZXQsIGthbyBpIGRhIG90a3JpamUgZGFsamluc2tlIHVyZcSRYWplIGkgdXBhcmkgc2Ugc2EgbmppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoQWRtaW4iIHByb2R1Y3Q9InR2IiBtc2dpZD0iMzM3MzEyNTY4MjY0NTYwMTQyOSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb25maWd1cmnFoWUgbG9rYWxuaSBCbHVldG9vdGggVFYsIGthbyBpIGRhIG90a3JpdmEgdWRhbGplbmUgdXJlxJFhamUgaSB1cGFydWplIHNlIHNhIG5qaW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aEFkbWluIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iODkzMTY4MjE1OTMzMTU0MjEzNyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb25maWd1cmnFoWUgbG9rYWxuaSBCbHVldG9vdGggdGVsZWZvbiwga2FvIGkgZGEgb3RrcmlqZSBkYWxqaW5za2UgdXJlxJFhamUgaSB1cGFyaSBzZSBzYSBuamltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI0MTk1OTA3MDEwNjEwMjA1NzAzIj4icG92ZXppdmFuamUgaSBwcmVraWQgdmV6ZSBzYSBXaU1BWC1vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc1dpbWF4U3RhdGUiIG1zZ2lkPSI2MzYwMTAyODc3MjYxOTc4ODg3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHV0dnJkaSBkYSBsaSBqZSBXaU1BWCBvbW9ndcSHZW4sIGthbyBpIGluZm9ybWFjaWplIG8gYmlsbyBrb2ppbSBwb3ZlemFuaW0gV2lNQVggbXJlxb5hbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VXaW1heFN0YXRlIiBtc2dpZD0iMzQwNDY1ODM5MjQxNTI4NjE4Ij4icHJvbWVuaSBXaU1BWCBzdGF0dXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzE1NjQ1NjUwNDA4NDIwMTgwNSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBwb3ZlenVqZSB0YWJsZXQgc2EgV2lNQVggbXJlxb5hbWEgaSBwcmVraWRhIHZlemUgc2EgbmppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2hhbmdlV2ltYXhTdGF0ZSIgcHJvZHVjdD0idHYiIG1zZ2lkPSI2MDIyMzA3MDgzOTM0ODI3NzE4Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHBvdmV6dWplIFRWIHNhIFdpTUFYIG1yZcW+YW1hIGkgZGEgcmFza2lkYSB0dSB2ZXp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NoYW5nZVdpbWF4U3RhdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTcwMjUwNDMwMDQ5MjM3OTgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcG92ZXp1amUgdGVsZWZvbiBzYSBXaU1BWCBtcmXFvmFtYSBpIHByZWtpZGEgdmV6ZSBzYSBuamltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JsdWV0b290aCIgbXNnaWQ9IjYxMjc3NjkzMzYzMzkyNzY4MjgiPiJ1cGFyaXZhbmplIHNhIEJsdWV0b290aCB1cmXEkWFqaW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzNDgwNzIyMTgxODUyNDM4NjI4Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZWdsZWRhIGtvbmZpZ3VyYWNpanUgQmx1ZXRvb3RoLWEgbmEgdGFibGV0dSwga2FvIGkgZGEgdXNwb3N0YXZsamEgaSBwcmlodmF0YSB2ZXplIHNhIHVwYXJlbmltIHVyZcSRYWppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYmx1ZXRvb3RoIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjM5NzQxMjQ5NDAxMDExMDQyMDYiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgdmlkaSBrb25maWd1cmFjaWp1IEJsdWV0b290aC1hIG5hIFRWLXUsIGthbyBpIGRhIHVzcG9zdGF2bGphIGkgcHJpaHZhdGEgdmV6ZSBzYSB1cGFyZW5pbSB1cmXEkWFqaW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JsdWV0b290aCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMyMDcxMDYzMjQ0NTIzMTI3MzkiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJlZ2xlZGEga29uZmlndXJhY2lqdSBCbHVldG9vdGgtYSBuYSB0ZWxlZm9udSwga2FvIGkgZGEgdXNwb3N0YXZsamEgaSBwcmlodmF0YSB2ZXplIHNhIHVwYXJlbmltIHVyZcSRYWppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9uZmMiIG1zZ2lkPSI0NDIzMzUxMjc0NzU3ODc2OTUzIj4ia29udHJvbGEga29tdW5pa2FjaWplIHUgdcW+ZW0gcG9sanUgKE5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19uZmMiIG1zZ2lkPSI3MTIwNjExODE5NDAxNzg5OTA3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGtvbXVuaWNpcmEgc2Egb3puYWthbWEsIGthcnRpY2FtYSBpIMSNaXRhxI1pbWEga29tdW5pa2FjaWplIGtyYXRrb2cgZG9tZXRhIChORkMpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZGlzYWJsZUtleWd1YXJkIiBtc2dpZD0iMzU5ODQ5NjMwMTQ4NjQzOTI1OCI+Im9uZW1vZ3XEh2F2YW5qZSB6YWtsanXEjWF2YW5qYSBla3JhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19kaXNhYmxlS2V5Z3VhcmQiIG1zZ2lkPSI2MDM0MjAzMDY1MDc3MTIyOTkyIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIG9uZW1vZ3XEh2kgemFrbGp1xI1hdmFuamUgdGFzdGF0dXJlIGkgc3ZlIHBvdmV6YW5lIGJlemJlZG5vc25lIG1lcmUgc2EgbG96aW5rYW1hLiBOYSBwcmltZXIsIHRlbGVmb24gb25lbW9ndcSHYXZhIHpha2xqdcSNYXZhbmplIHRhc3RhdHVyZSBwcmkgcHJpamVtdSBkb2xhem5vZyB0ZWxlZm9uc2tvZyBwb3ppdmEsIGEgemF0aW0gZ2EgcG9ub3ZvIG9tb2d1xIdhdmEgcG8gemF2csWhZXRrdSBwb3ppdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VGaW5nZXJwcmludCIgbXNnaWQ9IjU2NDA4NTg4MjYyNTQ1NzU2MzgiPiJ1cHJhdmxqYWogaGFyZHZlcm9tIHphIG90aXNrZSBwcnN0aWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlRmluZ2VycHJpbnQiIG1zZ2lkPSIxNzgyMDg3MDU4MjgwNTU0NjQiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgYWt0aXZpcmEgbWV0b2RlIHphIGRvZGF2YW5qZSBpIGJyaXNhbmplIMWhYWJsb25hIG90aXNha2EgcHJzdGlqdSBrb2ppIMSHZSBzZSBrb3Jpc3RpdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl91c2VGaW5nZXJwcmludCIgbXNnaWQ9IjMxNTA0Nzg2MTk5MTUxMjQ5MDUiPiJrb3Jpc3RpIGhhcmR2ZXIgemEgb3Rpc2tlIHByc3RpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2VGaW5nZXJwcmludCIgbXNnaWQ9IjkxNjUwOTc0NjA3MzA2ODQxMTQiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEga29yaXN0aSBoYXJkdmVyIHphIG90aXNrZSBwcnN0aWp1IHJhZGkgcG90dnJkZSBhdXRlbnRpxI1ub3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2FjcXVpcmVkX3BhcnRpYWwiIG1zZ2lkPSI3MzUwODI3NzIzNDE3MTYwNDMiPiJPdGtyaXZlbiBqZSBkZWxpbWnEjW5pIG90aXNhayBwcnN0YS4gUG9rdcWhYWp0ZSBwb25vdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRfYWNxdWlyZWRfaW5zdWZmaWNpZW50IiBtc2dpZD0iNDU5NjU0NjAyMTMxMDkyMzIxNCI+Ik5pamUgdXNwZWxhIG9icmFkYSBvdGlza2EgcHJzdGEuIFBva3XFoWFqdGUgcG9ub3ZvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2FjcXVpcmVkX2ltYWdlcl9kaXJ0eSIgbXNnaWQ9IjEwODcyMDk3MDI0MjEwNzYxMDUiPiJTZW56b3IgemEgb3Rpc2tlIHByc3RpanUgamUgcHJsamF2LiBPxI1pc3RpdGUgZ2EgaSBwb2t1xaFhanRlIHBvbm92by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludF9hY3F1aXJlZF90b29fZmFzdCIgbXNnaWQ9IjY0NzA2NDIzODMxMDkxNTU5NjkiPiJQcmVicnpvIHN0ZSBwb21lcmlsaSBwcnN0LiBQb2t1xaFhanRlIHBvbm92by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludF9hY3F1aXJlZF90b29fc2xvdyIgbXNnaWQ9IjU5MjUwODg1Njg5NjYxNjUzIj4iUHJldmnFoWUgc3Bvcm8gc3RlIHBvbWVyaWxpIHByc3QuIFBva3XFoWFqdGUgcG9ub3ZvLiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJmaW5nZXJwcmludF9hY3F1aXJlZF92ZW5kb3IiPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2Vycm9yX2h3X25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3OTU1OTIxNjU4OTM5OTM2NTk2Ij4iSGFyZHZlciB6YSBvdGlza2UgcHJzdGlqdSBuaWplIGRvc3R1cGFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2Vycm9yX25vX3NwYWNlIiBtc2dpZD0iMTA1NTgxOTAwMTEyNjA1MzMxOCI+Ik5pamUgbW9ndcSHZSBzYcSNdXZhdGkgb3Rpc2FrIHByc3RhLiBVa2xvbml0ZSBuZWtpIG9kIHBvc3RvamXEh2loIG90aXNha2EgcHJzdGlqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludF9lcnJvcl90aW1lb3V0IiBtc2dpZD0iMzkyNzE4NjA0MzczNzczMjg3NSI+IlZyZW1lbnNrbyBvZ3JhbmnEjWVuamUgemEgb3Rpc2FrIHByc3RhIGplIGlzdGVrbG8uIFBva3XFoWFqdGUgcG9ub3ZvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2Vycm9yX2NhbmNlbGVkIiBtc2dpZD0iNDQwMjAyNDYxMjY2MDc3NDM5NSI+IlJhZG5qYSBzYSBvdGlza29tIHByc3RhIGplIG90a2F6YW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2Vycm9yX2xvY2tvdXQiIG1zZ2lkPSI1NTM2OTM0NzQ4MTM2OTMzNDUwIj4iUHJldmnFoWUgcG9rdcWhYWphLiBQb2t1xaFhanRlIHBvbm92byBrYXNuaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2Vycm9yX3VuYWJsZV90b19wcm9jZXNzIiBtc2dpZD0iNjEwNzgxNjA4NDEwMzU1MjQ0MSI+IlBva3XFoWFqdGUgcG9ub3ZvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X25hbWVfdGVtcGxhdGUiIG1zZ2lkPSI1ODcwOTU3NTY1NTEyNzE2OTM4Ij4iUHJzdCA8eGxpZmY6ZyBpZD0iRklOR0VSSUQiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJmaW5nZXJwcmludF9lcnJvcl92ZW5kb3IiPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbmdlcnByaW50X2ljb25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjIzNDAyMDI4Njk5Njg0NjU5MzYiPiJJa29uYSBvdGlza2EgcHJzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU2V0dGluZ3MiIG1zZ2lkPSI2MjAxODEwMDA4MjMwNTAzMDUyIj4ixI1pdGFuamUgcG9kZcWhYXZhbmphIHNpbmhyb25pemFjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTZXR0aW5ncyIgbXNnaWQ9IjI3MDY3NDU2NzQ1Njk2Nzg2NDQiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgcG9kZcWhYXZhbmphIHNpbmhyb25pemFjaWplIHphIG5hbG9nLiBOYSBwcmltZXIsIG92YWtvIG1vxb5lIGRhIHNlIHV0dnJkaSBkYSBsaSBqZSBhcGxpa2FjaWphIExqdWRpIHNpbmhyb25pem92YW5hIHNhIG5hbG9nb20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl93cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9IjU0MDg2OTQ4NzU3OTM5NDUzMTQiPiJ1a2xqdcSNaXZhbmplIGkgaXNrbGp1xI1pdmFuamUgc2luaHJvbml6YWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY193cml0ZVN5bmNTZXR0aW5ncyIgbXNnaWQ9Ijg5NTYyNjI1OTEzMDYzNjk4NjgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgcG9kZcWhYXZhbmphIHNpbmhyb25pemFjaWplIHphIG5hbG9nLiBOYSBwcmltZXIsIG92YWtvIG1vxb5lIGRhIHNlIG9tb2d1xIdpIHNpbmhyb25pemFjaWphIGFwbGlrYWNpamUgTGp1ZGkgc2EgbmFsb2dvbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWRTeW5jU3RhdHMiIG1zZ2lkPSI3Mzk2NTc3NDUxMzYwMjAyNDQ4Ij4ixI1pdGFuamUgc3RhdGlzdGlrZSBvIHNpbmhyb25pemFjaWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZFN5bmNTdGF0cyIgbXNnaWQ9IjE1MTAxNDM3NjE3NTc2MDYxNTYiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgc3RhdGlzdGlrdSBzaW5ocm9uaXphY2lqZSB6YSBuYWxvZywgdWtsanXEjXVqdcSHaSBpc3RvcmlqdSBzaW5ocm9uaXpvdmFuaWggZG9nYcSRYWphIGkga29sacSNaW51IHBvZGF0YWthIGtvamkgc2Ugc2luaHJvbml6dWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNjcyNzUwOTUxNTk0MDU0NjgiPiLEjWl0YW5qZSBzYWRyxb5hamEgVVNCIG1lbW9yaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4ODE1NjQ2MjkzNDk3Nzk0MCI+IsSNaXRhbmplIHNhZHLFvmFqYSBTRCBrYXJ0aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkUmVhZCIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSIzNDQ2OTg4NzEyNTk4Mzg2MDc5Ij4iT21vZ3XEh2F2YSBhcGxpa2FjaWppIGRhIMSNaXRhIHNhZHLFvmFqIFVTQiBtZW1vcmlqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZGNhcmRSZWFkIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjYwNzM2MjQ3MzY1NDk3NTQxMSI+Ik9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBzYWRyxb5haiBTRCBrYXJ0aWNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iODQ4NTk3OTA2MjI1NDY2Njc0OCI+Iml6bWVuYSBpbGkgYnJpc2FuamUgc2FkcsW+YWphIFVTQiBtZW1vcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4ODA1NjkzNjMwMDUwNDU4NzYzIj4ibWVuamFuamUgaWxpIGJyaXNhbmplIHNhZHLFvmFqYSBTRCBrYXJ0aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2RjYXJkV3JpdGUiIHByb2R1Y3Q9Im5vc2RjYXJkIiBtc2dpZD0iNjE3NTQwNjI5OTQ0NTcxMDg4OCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSB1cGlzdWplIHBvZGF0a2UgbmEgVVNCIG1lbW9yaWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NkY2FyZFdyaXRlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDMzNzQxNzc5MDkzNjYzMjA5MCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSB1cGlzdWplIHBvZGF0a2UgbmEgU0Qga2FydGljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3VzZV9zaXAiIG1zZ2lkPSIyMDUyNDk5MzkwMTI4OTc5OTIwIj4idXB1xIdpdmFuamUvcHJpamVtIFNJUCBwb3ppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY191c2Vfc2lwIiBtc2dpZD0iMjI5NzgwNDg0OTg2MDIyNTI1NyI+Ik9tb2d1xIdhdmEgYXBsaWthY2lqaSBkYSB1cHXEh3VqZSBpIHByaW1hIFNJUCBwb3ppdmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZWdpc3Rlcl9zaW1fc3Vic2NyaXB0aW9uIiBtc2dpZD0iMzE2NjUzNTQ4NTg3NzU0OTE3NyI+InJlZ2lzdHJ1amUgbm92ZSB2ZXplIHNhIHRlbGVrb211bmlrYWNpb25pbSBtcmXFvmFtYSBwcmVrbyBTSU0ga2FydGljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlZ2lzdGVyX3NpbV9zdWJzY3JpcHRpb24iIG1zZ2lkPSIyMTM4OTA5MDM1OTI2MjIyOTExIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHJlZ2lzdHJ1amUgbm92ZSB2ZXplIHNhIHRlbGVrb211bmlrYWNpb25pbSBtcmXFvmFtYSBwcmVrbyBTSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlZ2lzdGVyX2NhbGxfcHJvdmlkZXIiIG1zZ2lkPSIxMDgxMDIxMjAyODkwMjk4NDEiPiJyZWdpc3RydWplIG5vdmUgdmV6ZSBzYSB0ZWxla29tdW5pa2FjaW9uaW0gbXJlxb5hbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWdpc3Rlcl9jYWxsX3Byb3ZpZGVyIiBtc2dpZD0iNzAzNDMxMDI2MzUyMTA4MTM4OCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSByZWdpc3RydWplIG5vdmUgdmV6ZSBzYSB0ZWxla29tdW5pa2FjaW9uaW0gbXJlxb5hbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb25uZWN0aW9uX21hbmFnZXIiIG1zZ2lkPSIxMTE2MTkzMjU0NTIyMTA1Mzc1Ij4idXByYXZsamFuamUgdmV6YW1hIHNhIHRlbGVrb211bmlrYWNpb25pbSBtcmXFvmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2Nvbm5lY3Rpb25fbWFuYWdlciIgbXNnaWQ9IjU5MjU0ODA4MTAzNTY0ODM1NjUiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgdXByYXZsamEgdmV6YW1hIHNhIHRlbGVrb211bmlrYWNpb25pbSBtcmXFvmFtYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRfaW5jYWxsX3NlcnZpY2UiIG1zZ2lkPSI2NzczNjQ4MzQxOTc1Mjg3MTI1Ij4ia29tdW5pY2lyYWogc2EgZWtyYW5vbSB0b2tvbSBwb3ppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2luY2FsbF9zZXJ2aWNlIiBtc2dpZD0iODM0MzQ3MTM4MTMyMzIxNTAwNSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBrb250cm9sacWhZSBrYWRhIGkga2FrbyBzZSBrb3Jpc25pa3UgcHJpa2F6dWplIGVrcmFuIHRva29tIHBveml2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRfY29ubmVjdGlvbl9zZXJ2aWNlIiBtc2dpZD0iMzU1NzM0MTQzOTI5NzAxNDk0MCI+ImRhIHN0dXBhIHUgaW50ZXJha2NpanUgc2EgdGVsZWZvbnNraW0gdXNsdWdhbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kX2Nvbm5lY3Rpb25fc2VydmljZSIgbXNnaWQ9IjQwMDg3NTQ0OTk4MjI0NzgxMTQiPiJEb3p2b2xqYXZhIGludGVyYWtjaWp1IGFwbGlrYWNpamUgc2EgdGVsZWZvbnNraW0gdXNsdWdhbWEgcmFkaSB1cHXEh2l2YW5qYS9wcmltYW5qYSBwb3ppdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jb250cm9sX2luY2FsbF9leHBlcmllbmNlIiBtc2dpZD0iOTA2MTAyNDQzNzYwNzc3NzYxOSI+InBydcW+YWoga29yaXNuacSNa2kgZG/Fvml2bGphaiB0b2tvbSBwb3ppdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jb250cm9sX2luY2FsbF9leHBlcmllbmNlIiBtc2dpZD0iOTE1MTU5MDY2MDM5ODI4MTI0Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHBydcW+YSBrb3Jpc25pxI1raSBkb8W+aXZsamFqIHRva29tIHBveml2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlYWROZXR3b3JrVXNhZ2VIaXN0b3J5IiBtc2dpZD0iNzg2MjU5MzI4MzYxMTQ5MzIzMiI+IsSNaXRhIGlzdG9yaWp1IGtvcmnFocSHZW5qYSBtcmXFvmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWFkTmV0d29ya1VzYWdlSGlzdG9yeSIgbXNnaWQ9Ijc2ODkwNjA3NDk4MTkxMjY0NzIiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgaXN0b3JpanUga29yacWhxIdlbmphIG1yZcW+ZSB6YSBwb3NlYm5lIG1yZcW+ZSBpIGFwbGlrYWNpamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tYW5hZ2VOZXR3b3JrUG9saWN5IiBtc2dpZD0iMjU2MjA1MzU5MjMzOTg1OTk5MCI+InVwcmF2bGphbmplIHNtZXJuaWNhbWEgemEgbXJlxb51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbWFuYWdlTmV0d29ya1BvbGljeSIgbXNnaWQ9Ijc1Mzc1ODY3NzE1NTkzNzA2NjgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgdXByYXZsamEgc21lcm5pY2FtYSB6YSBtcmXFvnUgaSBvZHJlxJF1amUgcG9zZWJuYSBwcmF2aWxhIHphIGFwbGlrYWNpanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9tb2RpZnlOZXR3b3JrQWNjb3VudGluZyIgbXNnaWQ9IjUwODgyMTczMDkwODg3Mjk2NTAiPiJpem1lbml0ZSBvYnJhxI11bmF2YW5qZSBrb3JpxaHEh2VuamEgbXJlxb5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfbW9kaWZ5TmV0d29ya0FjY291bnRpbmciIG1zZ2lkPSI1NDQzNDEyODY2NzQ2MTk4MTIzIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGl6bWVuaSBuYcSNaW4gbmEga29qaSBhcGxpa2FjaWplIGtvcmlzdGUgbXJlxb51LiBOZSBrb3Jpc3RlIGplIHVvYmnEjWFqZW5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNzY3MzQxNjQ4Nzg3MzQzMjI2OCI+InByaXN0dXAgb2JhdmXFoXRlbmppbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOb3RpZmljYXRpb25zIiBtc2dpZD0iNDU4NDU3NzQyNjgzNDMxMzg3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHByZXV6aW1hLCBpc3BpdHVqZSBpIGJyacWhZSBvYmF2ZcWhdGVuamEsIHVrbGp1xI11anXEh2kgb25hIGtvamEgcG9zdGF2bGphanUgZHJ1Z2UgYXBsaWthY2lqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiIG1zZ2lkPSI3MDU3NzY0NzQyMjExNjU2NjU0Ij4icG92ZXppdmFuamUgc2EgdXNsdWdvbSBtb25pdG9yYSBvYmF2ZcWhdGVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlIiBtc2dpZD0iOTg1Njk3OTE4NTc2OTAyOTg2Ij4iRG96dm9samF2YSB2bGFzbmlrdSBkYSBzZSBwb3Zlxb5lIHNhIGludGVyZmVqc29tIHVzbHVnZSBtb25pdG9yYSBvYmF2ZcWhdGVuamEgbmFqdmnFoWVnIG5pdm9hLiBVb2JpxI1hamVuZSBhcGxpa2FjaWplIG5pa2FkYSBuZSBiaSB0cmViYWxvIGRhIGplIGtvcmlzdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9iaW5kQ29uZGl0aW9uUHJvdmlkZXJTZXJ2aWNlIiBtc2dpZD0iMTE4MDEwNzY3MjMzMjcwNDY0MSI+InBvdmXFvmkgc2EgdXNsdWdvbSBkb2JhdmxqYcSNYSB1c2xvdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQ29uZGl0aW9uUHJvdmlkZXJTZXJ2aWNlIiBtc2dpZD0iMTY4MDUxMzkzMTE2NTA1ODQyNSI+IkRvenZvbGphdmEgdmxhc25pa3UgZGEgc2UgcG92ZcW+ZSBzYSBpbnRlcmZlanNvbSBuYWp2acWhZWcgbml2b2EgdXNsdWdlIGRvYmF2bGphxI1hIHVzbG92YS4gTmUgYmkgdHJlYmFsbyBuaWthZGEgZGEgYnVkZSBwb3RyZWJubyB6YSB1b2JpxI1hamVuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZERyZWFtU2VydmljZSIgbXNnaWQ9IjQxNTM2NDY5NjU5Nzg1NjM0NjIiPiJwb3Zleml2YW5qZSBzYSB1c2x1Z29tIHNhbmphcmVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kRHJlYW1TZXJ2aWNlIiBtc2dpZD0iNzMyNTgyNTI3MjIyMzM0Nzg2MyI+IkRvenZvbGphdmEgdmxhc25pa3UgZGEgc2UgcG92ZcW+ZSBzYSBpbnRlcmZlanNvbSB1c2x1Z2Ugc2FuamFyZW5qYSBuYWp2acWhZWcgbml2b2EuIFVvYmnEjWFqZW5lIGFwbGlrYWNpamUgbmlrYWRhIG5lIGJpIHRyZWJhbG8gZGEgamUga29yaXN0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjM2OTk2MDA4MzM5NzUxMTc0NzgiPiJwb3ppdmFuamUgYXBsaWthY2lqZSBzYSBrb25maWd1cmFjaWpvbSBrb2p1IG9kcmXEkXVqZSBvcGVyYXRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ludm9rZUNhcnJpZXJTZXR1cCIgbXNnaWQ9IjQxNTk1NDkxNTI1MjkxMTE5MjAiPiJEb3p2b2xqYXZhIHZsYXNuaWt1IGRhIHBveml2YSBhcGxpa2FjaWp1IHNhIGtvbmZpZ3VyYWNpam9tIGtvanUgb2RyZcSRdWplIG9wZXJhdGVyLiBVb2JpxI1hamVuZSBhcGxpa2FjaWplIG5pa2FkYSBuZSBiaSB0cmViYWxvIGRhIGplIGtvcmlzdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjgyMDYwNzc0NDc4Mzg5MDk1MTYiPiJwcmHEh2VuamUgcG9kYXRha2EgbyB1c2xvdmltYSBuYSBtcmXFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NOZXR3b3JrQ29uZGl0aW9ucyIgbXNnaWQ9IjY4OTkxMDIwNzU4MjUyNzIyMTEiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcHJhdGkgcG9kYXRrZSBvIHVzbG92aW1hIG5hIG1yZcW+aS4gTmUgYmkgbmlrYWRhIHRyZWJhbG8gZGEgYnVkZSBwb3RyZWJubyB6YSBub3JtYWxuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc2V0SW5wdXRDYWxpYnJhdGlvbiIgbXNnaWQ9IjQ5MDI2MjAxMTg4Nzg0Njc2MTUiPiJwcm9tZW5pIGthbGlicmFjaWp1IHVsYXpub2cgdXJlxJFhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRJbnB1dENhbGlicmF0aW9uIiBtc2dpZD0iNDUyNzUxMTA0NzU0OTQ1NjkyOSI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBtb2RpZmlrdWplIHBhcmFtZXRyZSBrYWxpYnJhY2lqZSBkb2Rpcm5vZyBla3JhbmEuIE5lIGJpIHRyZWJhbG8gZGEgYnVkZSBwb3RyZWJubyB6YSBub3JtYWxuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzRHJtQ2VydGlmaWNhdGVzIiBtc2dpZD0iNzQzNjg4NjY0MDcyMzIwMzYxNSI+InByaXN0dXAgRFJNIHNlcnRpZmlrYXRpbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hY2Nlc3NEcm1DZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI4MDczMjg4MzU0NDI2MTU5MDg5Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGRvZGVsanVqZSBpIGtvcmlzdGkgRFJNIHNlcnRpZmlrYXRlLiBOaWthZGEgbmUgYmkgdHJlYmFsbyBkYSBzZSBrb3Jpc3RpIHphIHVvYmnEjWFqZW5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9oYW5kb3ZlclN0YXR1cyIgbXNnaWQ9Ijc4MjAzNTMyNTcyMTkzMDA4ODMiPiJwcmlqZW0gc3RhdHVzYSBwcmViYWNpdmFuamEgcG9tb8SHdSBBbmRyb2lkIHByZWJhY2l2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2hhbmRvdmVyU3RhdHVzIiBtc2dpZD0iNDc4ODE0NDA4NzI0NTcxNDk0OCI+IkRvenZvbGphdmEgb3ZvaiBhcGxpa2FjaWppIGRhIHByaW1hIGluZm9ybWFjaWplIG8gYWt0dWVsbmltIHByZWJhY2l2YW5qaW1hIHBvbW/Eh3UgQW5kcm9pZCBwcmViYWNpdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3JlbW92ZURybUNlcnRpZmljYXRlcyIgbXNnaWQ9IjcwNDQ4ODgyODcyMDk4OTI3NTEiPiJ1a2xhbmphaiBEUk0gc2VydGlmaWthdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZW1vdmVEcm1DZXJ0aWZpY2F0ZXMiIG1zZ2lkPSI3MjcyOTk5MDc1MTEzNDAwOTkzIj4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHVrbGFuamEgRFJNIHNlcnRpZmlrYXRlLiBOaWthZGEgbmUgYmkgdHJlYmFsbyBkYSBzZSBrb3Jpc3RpIHphIG9iacSNbmUgYXBsaWthY2lqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2JpbmRDYXJyaWVyTWVzc2FnaW5nU2VydmljZSIgbXNnaWQ9IjE0OTAyMjkzNzE3OTY5NjkxNTgiPiJwb3Zleml2YW5qZSBzYSB1c2x1Z29tIHphIHJhem1lbnUgcG9ydWthIG1vYmlsbm9nIG9wZXJhdGVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2JpbmRDYXJyaWVyTWVzc2FnaW5nU2VydmljZSIgbXNnaWQ9IjI3NjI4ODI4ODg1MDIxMTM5NDQiPiJEb3p2b2xqYXZhIHZsYXNuaWt1IGRhIHNlIHBvdmXFvmUgc2EgaW50ZXJmZWpzb20gbmFqdmnFoWVnIG5pdm9hIHphIHVzbHVndSB6YSByYXptZW51IHBvcnVrYSBtb2JpbG5vZyBvcGVyYXRlcmEuIE5pa2FkYSBuZSBiaSB0cmViYWxvIGRhIGJ1ZGUgcG90cmVibm8gemEgc3RhbmRhcmRuZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYmluZENhcnJpZXJTZXJ2aWNlcyIgbXNnaWQ9IjMyMzMxMDg2NTYyNDU1MjY3ODMiPiJwb3Zleml2YW5qZSBzYSB1c2x1Z2FtYSBvcGVyYXRlcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19iaW5kQ2FycmllclNlcnZpY2VzIiBtc2dpZD0iMTM5MTU1MjYwMjU1MTA4NDE5MiI+IkRvenZvbGphdmEgdmxhc25pa3UgZGEgc2UgcG92ZcW+ZSBzYSB1c2x1Z2FtYSBvcGVyYXRlcmEuIE5pa2FkYSBuZSBiaSB0cmViYWxvIGRhIGJ1ZGUgcG90cmVibm8gemEgb2JpxI1uZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzX25vdGlmaWNhdGlvbl9wb2xpY3kiIG1zZ2lkPSI0MjQ3NTEwODIxNjYyMDU5NjcxIj4icHJpc3R1cGFqIHBvZGXFoWF2YW5qdSBOZSB1em5lbWlyYXZhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FjY2Vzc19ub3RpZmljYXRpb25fcG9saWN5IiBtc2dpZD0iMzI5NjgzMjM3NTIxODc0OTU4MCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBpIHVwaXN1amUga29uZmlndXJhY2lqdSBwb2RlxaFhdmFuamEgTmUgdXpuZW1pcmF2YWouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2xpbWl0UGFzc3dvcmQiIG1zZ2lkPSI0NDk3NDIwNzI4ODU3NTg1NzkxIj4iUG9kZcWhYXZhbmplIHByYXZpbGEgemEgbG96aW5rdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfbGltaXRQYXNzd29yZCIgbXNnaWQ9IjI1MDIwMjE0NTc5MTc4NzQ5NjgiPiJLb250cm9sacWhZSBkdcW+aW51IGkgem5ha292ZSBkb3p2b2xqZW5lIHUgbG96aW5rYW1hIGkgUElOLW92aW1hIHphIHpha2xqdcSNYXZhbmplIGVrcmFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2F0Y2hMb2dpbiIgbXNnaWQ9IjkxNDEzMDY0Njk0MjE5OTUwMyI+Ik5hZGdsZWRhbmplIHBva3XFoWFqYSBvdGtsanXEjWF2YW5qYSBla3JhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyMTU3MjkyOTQyMTUwNzAwNzIiPiJQcmF0aSBicm9qIG5ldGHEjW5vIHVuZXRpaCBsb3ppbmtpIHByaWxpa29tIG90a2xqdcSNYXZhbmphIGVrcmFuYSBpIHpha2xqdcSNYXZhIHRhYmxldCBpbGkgYnJpxaFlIHBvZGF0a2Ugc2EgdGFibGV0YSBha28gamUgbmV0YcSNbmEgbG96aW5rYSB1bmV0YSBwcmV2acWhZSBwdXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iVFYiIG1zZ2lkPSIyNzA3ODE3OTg4MzA5ODkwMjU2Ij4iTmFkZ2xlZGEgYnJvaiBuZXRhxI1uaWggbG96aW5raSBrb2plIHVuZXNldGUgcHJpIG90a2xqdcSNYXZhbmp1IGVrcmFuYSBpIHpha2xqdcSNYXZhIFRWIGlsaSBicmnFoWUgc3ZlIHBvZGF0a2Ugc2EgbmplZ2EgYWtvIHNlIHVuZXNlIHByZXZpxaFlIG5ldGHEjW5paCBsb3ppbmtpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2F0Y2hMb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3MTIzMjMwOTE4NDY3NjEwNzMiPiJQcmF0aSBicm9qIG5ldGHEjW5vIHVuZXRpaCBsb3ppbmtpIHByaSBvdGtsanXEjWF2YW5qdSBla3JhbmEgaSB6YWtsanXEjWF2YSB0ZWxlZm9uIGlsaSBicmnFoWUgc3ZlIHBvZGF0a2Ugc2EgdGVsZWZvbmEgYWtvIGplIG5ldGHEjW5hIGxvemlua2EgdW5ldGEgcHJldmnFoWUgcHV0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW5fc2Vjb25kYXJ5VXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDI4MDI0NjI3MDYwMTA0NDUwNSI+Ik5hZGdsZWRhIGJyb2ogbmV0YcSNbmloIGxvemlua2kgdW5ldGloIHByaSBvdGtsanXEjWF2YW5qdSBla3JhbmEgaSB6YWtsanXEjWF2YSB0YWJsZXQgaWxpIGJyacWhZSBzdmUgcG9kYXRrZSBvdm9nIGtvcmlzbmlrYSBha28gc2UgdW5lc2UgcHJldmnFoWUgbmV0YcSNbmloIGxvemlua2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193YXRjaExvZ2luX3NlY29uZGFyeVVzZXIiIHByb2R1Y3Q9IlRWIiBtc2dpZD0iMzQ4NDgzMjY1MzU2NDQ4MzI1MCI+Ik5hZGdsZWRhIGJyb2ogbmV0YcSNbmloIGxvemlua2kgdW5ldGloIHByaSBvdGtsanXEjWF2YW5qdSBla3JhbmEgaSB6YWtsanXEjWF2YSBUViBpbGkgYnJpxaFlIHN2ZSBwb2RhdGtlIG92b2cga29yaXNuaWthIGFrbyBzZSB1bmVzZSBwcmV2acWhZSBuZXRhxI1uaWggbG96aW5raS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dhdGNoTG9naW5fc2Vjb25kYXJ5VXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODU0ODA0MjcyMTcxMjcxNDciPiJOYWRnbGVkYSBicm9qIG5ldGHEjW5paCBsb3ppbmtpIHVuZXRpaCBwcmkgb3RrbGp1xI1hdmFuanUgZWtyYW5hIGkgemFrbGp1xI1hdmEgdGVsZWZvbiBpbGkgYnJpxaFlIHN2ZSBwb2RhdGtlIG92b2cga29yaXNuaWthIGFrbyBzZSB1bmVzZSBwcmV2acWhZSBuZXRhxI1uaWggbG96aW5raS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjQ5MzQ3MDc2MzI0MjM5MTUzOTUiPiJQcm9tZW5hIHpha2xqdcSNYXZhbmphIGVrcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfcmVzZXRQYXNzd29yZCIgbXNnaWQ9IjEyNzgzMjM4OTE3MTA2MTkxMjgiPiJQcm9tZW5pdGUgemFrbGp1xI1hdmFuamUgZWtyYW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9mb3JjZUxvY2siIG1zZ2lkPSIyMjc0MDg1Mzg0NzA0MjQ4NDMxIj4iWmFrbGp1xI1hdmFuamUgZWtyYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19mb3JjZUxvY2siIG1zZ2lkPSIxMTQxNzk3NTg4NDAzODI3MTM4Ij4iS29udHJvbGnFoWl0ZSBuYcSNaW4gaSB2cmVtZSB6YWtsanXEjWF2YW5qYSBla3JhbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX3dpcGVEYXRhIiBtc2dpZD0iMzkxMDU0NTQ0Njc1ODYzOTcxMyI+IkJyaXNhbmplIHN2aWggcG9kYXRha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MzA2MTg0MDk2MDY3NzU2ODc2Ij4iQnJpc2FuamUgcG9kYXRha2EgbmEgdGFibGV0dSBiZXogdXBvem9yZW5qYSByZXNldG92YW5qZW0gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjU4MTYyMjEzMTUyMTQ1MjcwMjgiPiJCcmnFoWUgc3ZlIHBvZGF0a2Ugc2EgVFYtYSBiZXogdXBvem9yZW5qYSByZXNldG92YW5qZW0gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX3dpcGVEYXRhIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNTA5Njg5NTYwNDU3NDE4ODM5MSI+Ikl6YnJpxaFpdGUgcG9kYXRrZSBuYSB0ZWxlZm9udSBiZXogdXBvem9yZW5qYSByZXNldG92YW5qZW0gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfd2lwZURhdGFfc2Vjb25kYXJ5VXNlciIgbXNnaWQ9IjgzNjI4NjMyODk0NTU1MzE4MTMiPiJPYnJpxaFpIHBvZGF0a2Uga29yaXNuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY193aXBlRGF0YV9zZWNvbmRhcnlVc2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MzM2MjU1NTE0NjM1MzA4MDU0Ij4iQnJpxaFlIHBvZGF0a2Ugb3ZvZyBrb3Jpc25pa2EgbmEgb3ZvbSB0YWJsZXR1IGJleiB1cG96b3JlbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGFfc2Vjb25kYXJ5VXNlciIgcHJvZHVjdD0idHYiIG1zZ2lkPSIyMDg2NDczNDk2ODQ4MzUxODEwIj4iQnJpxaFlIHBvZGF0a2Ugb3ZvZyBrb3Jpc25pa2EgbmEgb3ZvbSBUVi11IGJleiB1cG96b3JlbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2Nfd2lwZURhdGFfc2Vjb25kYXJ5VXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY3ODc5MDQ1NDY3MTE1OTAyMzgiPiJCcmnFoWUgcG9kYXRrZSBvdm9nIGtvcmlzbmlrYSBuYSBvdm9tIHRlbGVmb251IGJleiB1cG96b3JlbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9zZXRHbG9iYWxQcm94eSIgbXNnaWQ9IjI3ODQ4MjgyOTM3NDc3OTE0NDYiPiJQb2Rlc2l0ZSBnbG9iYWxuaSBwcm9rc2kgc2VydmVyIHVyZcSRYWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19zZXRHbG9iYWxQcm94eSIgbXNnaWQ9Ijg0NTk4NTk3MzExNTMzNzA0OTkiPiJQb2RlxaFhdmEgZ2xvYmFsbmkgcHJva3NpIHVyZcSRYWphIGtvamkgxIdlIHNlIGtvcmlzdGl0aSBkb2sgc3XCoHNtZXJuaWNlIG9tb2d1xIdlbmUuIFNhbW8gdmxhc25payB1cmXEkWFqYSBtb8W+ZSBkYSBwb2Rlc2kgZ2xvYmFsbmkgcHJva3NpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9leHBpcmVQYXNzd29yZCIgbXNnaWQ9IjU2MTAwNTUwMTIzMjg4MjU4NzQiPiJQb2Rlc2kgaXN0ZWsuIGxvemluLiB6YSB6YWtsai4gZWtyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWRlc2NfZXhwaXJlUGFzc3dvcmQiIG1zZ2lkPSI1MzY3NTI1NzYyMjA0NDE2MDQ2Ij4iTWVuamEga29saWtvIMSNZXN0byBsb3ppbmthLCBQSU4gaWxpIMWhYWJsb24gemEgemFrbGp1xI1hdmFuamUgZWtyYW5hIG1vcmEgZGEgc2UgbWVuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5bGFiX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSI4OTAxMzI2MTk5OTA5MTMyOTE1Ij4iUG9kZcWhYXZhbmplIMWhaWZyb3ZhbmphIHNrbGFkacWhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2VuY3J5cHRlZFN0b3JhZ2UiIG1zZ2lkPSIyNjM3NzMyMTE1MzI1MzE2OTkyIj4iWmFodGV2YSBkYSBzYcSNdXZhbmkgcG9kYWNpIGFwbGlrYWNpamUgYnVkdSDFoWlmcm92YW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvbGljeWxhYl9kaXNhYmxlQ2FtZXJhIiBtc2dpZD0iNjM5NTMwMTAyMzE1MjI5NzgyNiI+Ik9uZW1vZ3XEh2F2YW5qZSBrYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lkZXNjX2Rpc2FibGVDYW1lcmEiIG1zZ2lkPSIyMzA2MzQ5MDQyODM0NzU0NTk3Ij4iU3ByZcSNaXRlIGtvcmnFocSHZW5qZSBzdmloIGthbWVyYSB1cmXEkWFqYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2xpY3lsYWJfZGlzYWJsZUtleWd1YXJkRmVhdHVyZXMiIG1zZ2lkPSI4NTUyMjc3ODcxMDc1MzY3NzcxIj4iT25lbW9ndcSHYXZhIG5la2UgZnVuay4gemFrbGp1xI1hdmFuamEgZWtyYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9saWN5ZGVzY19kaXNhYmxlS2V5Z3VhcmRGZWF0dXJlcyIgbXNnaWQ9IjIwNDQ3NTU2OTEzNTQxNTg0MzkiPiJTcHJlxI1hdmEga29yacWhxIdlbmplIG5la2loIGZ1bmtjaWphIHpha2xqdcSNYXZhbmphIGVrcmFuYS4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0icGhvbmVUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg5MDEwOTgzMzY2NTg3MTAzNTkiPiJLdcSHYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2OTkyMzY1MDUyNzEzNjYxNSI+Ik1vYmlsbmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODk3NTQ0NjU0MjQyODc0NTQzIj4iUG9zYW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMTAzNjAxNDMzMzgyMTU4MTU1Ij4iRmFrcyBuYSBwb3NsdSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MzUxNzcxNDQ5NDgzMjkzNzAiPiJGYWtzIGtvZCBrdcSHZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwMzg3ODY3NDQ3NzIwNzM5NCI+IlBlamTFvmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTY1MDgyNDI3NTE3NzkzMTYzNyI+IkRydWdvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTE5MjUxNDgwNjk3NTg5ODk2MSI+IlByaWxhZ2/EkWVubyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+Ikt1xIdhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzA4NDIzNzM1NjYwMjYyNTYwNCI+IlBvc2FvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTExMjA0NDQxMDY1OTAxMTAyMyI+IkRydWdvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjM3NDkxMzk1Mjg3MDExMDYxOCI+IlByaWxhZ2/EkWVubyI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InBvc3RhbEFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjY4ODAyNTc2MjY3NDAwNDcyODYiPiJLdcSHYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU2MjkxNTM5NTYwNDUxMDkyNTEiPiJQb3NhbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5NjY2MDQyNjQ1MDAzNDM0NjkiPiJEcnVnbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5MzI2ODI4NDc1OTUyOTkzNjkiPiJQcmlsYWdvxJFlbm8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbUFkZHJlc3NUeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjE3Mzg1ODUxOTQ2MDE0NzY2OTQiPiJLdcSHYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNTk2NDQ1NjU2NDczODM3MDgiPiJQb3NhbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4Njg1NDk0MDEwNTM2MTU2NzciPiJEcnVnbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxNDUxMTg5NDQ2Mzk4Njk4MDkiPiJQcmlsYWdvxJFlbm8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvcmdhbml6YXRpb25UeXBlcyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijc1NDYzMzU2MTIxODkxMTU2MTUiPiJQb3NhbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQzNzgwNzQxMjkwNDk1MjAzNzMiPiJEcnVnbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM0NTUwNDc0Njg1ODM5NjUxMDQiPiJQcmlsYWdvxJFlbm8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJpbVByb3RvY29scyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg1OTUyNjEzNjM1MTg0NTk1NjUiPiJBSU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3MzkwNDczNjI4Mjc1NDkwNzAwIj4iV2luZG93cyBMaXZlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzg4Mjg3NzEzNDkzMTQ1ODIxNyI+IllhaG9vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTAzNTM3NjMxMzIwMDU4NTI0MiI+IlNreXBlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzUzMjM2MzE3ODQ1OTQ0NDk0MyI+IlFRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzcxMzQ0MTAzNDI5OTY2MDc0OSI+Ikdvb2dsZSBUYWxrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjUwNjg1NzMxMjcxODYzMDgyMyI+IklDUSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE2NDg3OTc5MDM3ODUyNzkzNTMiPiJKYWJiZXIiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUN1c3RvbSIgbXNnaWQ9IjE2NDQ3MzgwNTkwNTMzNTU4MjAiPiJQcmlsYWdvxJFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVIb21lIiBtc2dpZD0iMjU3MDkyMzQ2MzAzMzk4NTg4NyI+Ikt1xIdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW9iaWxlIiBtc2dpZD0iNjUwMTQ2MzU1Nzc1NDc1MTAzNyI+Ik1vYmlsbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrIiBtc2dpZD0iODg2MzkzOTY2NzA1OTkxMTYzMyI+IlBvc2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4V29yayIgbXNnaWQ9IjM1MTc3OTIxNjAwMDg4OTA5MTIiPiJGYWtzIG5hIHBvc2x1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlRmF4SG9tZSIgbXNnaWQ9IjIwNjcyNjU5NzIzMjI5NzE0NjciPiJGYWtzIGtvZCBrdcSHZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVBhZ2VyIiBtc2dpZD0iNzU4MjM1OTk1NTM5NDkyMTczMiI+IlBlamTFvmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXIiIG1zZ2lkPSIxNTQ0NDI1ODQ3ODY4NzY1OTkwIj4iRHJ1Z28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDYWxsYmFjayIgbXNnaWQ9IjI3MTIxNzUyMDMwNjU2NzgyMDYiPiJQb3ZyYXRuaSBwb3ppdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUNhciIgbXNnaWQ9Ijg3MzgzNjA2ODk2MTY3MTY5ODIiPiJBdXRvbW9iaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVDb21wYW55TWFpbiIgbXNnaWQ9IjU0MDQzNDM1NjQ2MTQ3ODkxNiI+IlBvc2xvdm5pIGdsYXZuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZUlzZG4iIG1zZ2lkPSI4MDIyNDUzMTkzMTcxMzcwMzM3Ij4iSVNETiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZU1haW4iIG1zZ2lkPSI2NzY2MTM3MDEwNjI4MzI2OTE2Ij4iR2xhdm5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlT3RoZXJGYXgiIG1zZ2lkPSI4NTg3NjU3MTQ1MDcyNDQ2NTY1Ij4iRHJ1Z2kgZmFrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lVHlwZVJhZGlvIiBtc2dpZD0iNDA5MzczODA3OTkwODY2NzUxMyI+IlJhZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVGVsZXgiIG1zZ2lkPSIzMzY3ODc5OTUyNDc2MjUwNTEyIj4iVGVsZWtzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlVHR5VGRkIiBtc2dpZD0iODYwNjUxNDM3ODU4NTAwMDA0NCI+IlRUWSBUREQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVXb3JrTW9iaWxlIiBtc2dpZD0iMTMxMTQyNjk4OTE4NDA2NTcwOSI+IkJyb2ogcG9zbG92bm9nIG1vYmlsbm9nIHRlbGVmb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlV29ya1BhZ2VyIiBtc2dpZD0iNjQ5OTM4NzMxMjMxMTU3MDU2Ij4iUG9zbG92bmkgcGVqZMW+ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZVR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI1NTk2NzcyNjM2MTI4NTYyODg0Ij4iUG9tb8SHbmlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGhvbmVUeXBlTW1zIiBtc2dpZD0iNzI1NDQ5MjI3NTUwMjc2ODk5MiI+Ik1NUyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZUN1c3RvbSIgbXNnaWQ9Ijc4Mzc1ODYxOTg0NTgwNzM0MDQiPiJQcmlsYWdvxJFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVCaXJ0aGRheSIgbXNnaWQ9IjI4MTMzNzk4NDQyMTEzOTA3NDAiPiJSb8SRZW5kYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldmVudFR5cGVBbm5pdmVyc2FyeSIgbXNnaWQ9IjM4NzY3Nzk3NDQ1MTgyODQwMDAiPiJHb2RpxaFuamljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV2ZW50VHlwZU90aGVyIiBtc2dpZD0iNzM4ODE3ODkzOTAxMDE0MzA3NyI+IkRydWdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1haWxUeXBlQ3VzdG9tIiBtc2dpZD0iODUyNTk2MDI1NzgwNDIxMzg0NiI+IlByaWxhZ2/EkWVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZUhvbWUiIG1zZ2lkPSI0NDkyMjcyMzYxNDA0MzM5MTkiPiJLdcSHYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZVdvcmsiIG1zZ2lkPSIzNTQ4MDU4MDU5NjAxMTQ5OTczIj4iUG9zYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbWFpbFR5cGVPdGhlciIgbXNnaWQ9IjI5MjMwMDg2OTUyNzI2Mzk1NDkiPiJEcnVnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtYWlsVHlwZU1vYmlsZSIgbXNnaWQ9IjExOTkxOTAwNTMyMTE2NjIwNSI+Ik1vYmlsbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlQ3VzdG9tIiBtc2dpZD0iODkwMzIwNjkwMzA2MDQ3OTkwMiI+IlByaWxhZ2/EkWVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvc3RhbFR5cGVIb21lIiBtc2dpZD0iODE2NTc1Njk3NzE4NDQ4MzA5NyI+Ikt1xIdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG9zdGFsVHlwZVdvcmsiIG1zZ2lkPSI1MjY4MTcyNzcyMzg3Njk0NDk1Ij4iUG9zYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3N0YWxUeXBlT3RoZXIiIG1zZ2lkPSIyNzI2MTExOTY2NjIzNTg0MzQxIj4iRHJ1Z28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVDdXN0b20iIG1zZ2lkPSIyMDc0MDI4NzU1NTI3ODI2MDQ2Ij4iUHJpbGFnb8SRZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1UeXBlSG9tZSIgbXNnaWQ9IjYyNDExODEwMzI5NTQyNjM4OTIiPiJLdcSHYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltVHlwZVdvcmsiIG1zZ2lkPSIxMzcxNDg5MjkwMjQyNDMzMDkwIj4iUG9zYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVR5cGVPdGhlciIgbXNnaWQ9IjUzNzcwMDc0OTU3MzU5MTU0NzgiPiJEcnVnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xDdXN0b20iIG1zZ2lkPSI2OTE5NDUzODM2NjE4NzQ5OTkyIj4iUHJpbGFnb8SRZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEFpbSIgbXNnaWQ9IjcwNTAzNjA2MTIzNjgzODM0MTciPiJBSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTXNuIiBtc2dpZD0iMTQ0NTU2NTQ1NDIwNzY5NDQyIj4iV2luZG93cyBMaXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFlhaG9vIiBtc2dpZD0iODI3MTQzOTQwODQ2OTAyMTI3MyI+IllhaG9vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFNreXBlIiBtc2dpZD0iOTAxOTI5Njc0NDYyMjgzMjk1MSI+IlNreXBlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbFFxIiBtc2dpZD0iODg4NzQ4NDM3OTQ5NDExMTg4NCI+IlFRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEdvb2dsZVRhbGsiIG1zZ2lkPSI0OTM5MDIzMjExNDAyNzczMDQiPiJIYW5nb3V0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltUHJvdG9jb2xJY3EiIG1zZ2lkPSIxNTc0ODcwNDMzNjA2NTE3MzE1Ij4iSUNRIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1Qcm90b2NvbEphYmJlciIgbXNnaWQ9IjIyNzk5MTc2MzA4NzU3NzE3MjIiPiJKYWJiZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbVByb3RvY29sTmV0TWVldGluZyIgbXNnaWQ9IjgyODc2MjU2NTU5ODY4Mjc5NzEiPiJOZXRNZWV0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZVdvcmsiIG1zZ2lkPSIyOTI2ODg3MDUwNTM2Mzg3MiI+IlBvc2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZU90aGVyIiBtc2dpZD0iMzk1MTc4MTEzMTU3MDEyNDA4MiI+IkRydWdvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnVHlwZUN1c3RvbSIgbXNnaWQ9IjIyNTUyMzQxNTM3MjA4ODMyMiI+IlByaWxhZ2/EkWVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUN1c3RvbSIgbXNnaWQ9IjM1NDI0MDM2Nzk4MjcyOTczMDAiPiJQcmlsYWdvxJFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVBc3Npc3RhbnQiIG1zZ2lkPSI2Mjc0MzM0ODI1MTk1Mzc5MDc2Ij4iUG9tb8SHbmlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQnJvdGhlciIgbXNnaWQ9Ijg3NTc5MTM1MDY3ODQwNjc3MTMiPiJCcmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlQ2hpbGQiIG1zZ2lkPSIxODkwNzQ2Mjc3Mjc2ODgxNjI2Ij4iRGV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZURvbWVzdGljUGFydG5lciIgbXNnaWQ9IjY5MDQ4MDcxMTIxMjExMjIxMzMiPiJOZXZlbsSNYW5pIHBhcnRuZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVGYXRoZXIiIG1zZ2lkPSI1MjI4MDM0Njg3MDgyMDUwNzI1Ij4iT3RhYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZUZyaWVuZCIgbXNnaWQ9IjczMTMxMDY3NjI0ODMzOTEyNjIiPiJQcmlqYXRlbGoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVNYW5hZ2VyIiBtc2dpZD0iNjM2NTY3Nzg2MTYxMDEzNzg5NSI+Ik1lbmFkxb5lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZU1vdGhlciIgbXNnaWQ9IjQ1Nzg1NzEzNTI5NjI3NTgzMDQiPiJNYWprYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcmVudCIgbXNnaWQ9IjQ3NTU2MzU1Njc1NjI5MjUyMjYiPiJSb2RpdGVsaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVBhcnRuZXIiIG1zZ2lkPSI3MjY2NDkwMjg1MTIwMjYyNzgxIj4iUGFydG5lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aW9uVHlwZVJlZmVycmVkQnkiIG1zZ2lkPSIxMDE1NzMwNTk4NDQxMzU1MjQiPiJVcHV0aW8vbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVSZWxhdGl2ZSIgbXNnaWQ9IjE3OTk4MTk5MzAwODU2MTAyNzEiPiJSb8SRYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWxhdGlvblR5cGVTaXN0ZXIiIG1zZ2lkPSIxNzM1OTgzNTU0NDc5MDc2NDgxIj4iU2VzdHJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVsYXRpb25UeXBlU3BvdXNlIiBtc2dpZD0iMzk0MTM2OTM5NDI4Njk4MTE3Ij4iU3VwcnVnL2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUN1c3RvbSIgbXNnaWQ9IjI0NzM1ODA1OTMxMTE1OTA5NDUiPiJQcmlsYWdvxJFlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZUhvbWUiIG1zZ2lkPSI2MDkzNTk4MTgxMDY5MzU5Mjk1Ij4iUG/EjWV0bmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZVdvcmsiIG1zZ2lkPSI2OTIwNzI1NzMwNzk3MDk5MDQ3Ij4iUG9zYW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaXBBZGRyZXNzVHlwZU90aGVyIiBtc2dpZD0iNDQwODQzNjE2Mjk1MDExOTg0OSI+IkRydWdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfY29udGFjdHNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijc0NjA5ODAwNzgyODU3OTY4OCI+Ik5pamUgcHJvbmHEkWVuYSBuaWplZG5hIGFwbGlrYWNpamEgemEgcHJpa2F6IG92b2cga29udGFrdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX2NvZGUiIG1zZ2lkPSIzMDM3Njg1Nzk2MDU4NDk1MDE3Ij4iVW5lc2l0ZSBQSU4ga8O0ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19jb2RlIiBtc2dpZD0iNDgwMDcyNTI2NjkyNTg0NTMzMyI+IlVuZXNpdGUgUFVLIGkgbm92aSBQSU4ga8O0ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3B1a19wcm9tcHQiIG1zZ2lkPSIxMzQxMTEyMTQ2NzEwMDg3MDQ4Ij4iUFVLIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9waW5fcHJvbXB0IiBtc2dpZD0iODAyNzY4MDMyMTYxNDE5NjI1OCI+Ik5vdmkgUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJEb2Rpcm5pdGUgZGEgYmlzdGUgdW5lbGkgbG96aW5rdSI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Ik90a3VjYWp0ZSBsb3ppbmt1IGRhIGJpc3RlIG90a2xqdcSNYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVW5lc2l0ZSBQSU4gemEgb3RrbGp1xI1hdmFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJQSU4ga8O0ZCBqZSBuZXRhxI1hbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iRGEgYmlzdGUgb3RrbGp1xI1hbGksIHByaXRpc25pdGUg4oCeTWVuaeKAnCwgYSB6YXRpbSAwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsX2RpYWxvZ19udW1iZXJfZm9yX2Rpc3BsYXkiIG1zZ2lkPSI2OTYxOTIxMDMxOTUwOTA5NzAiPiJCcm9qIHphIGhpdG5lIHNsdcSNYWpldmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2NhcnJpZXJfZGVmYXVsdCIgbXNnaWQ9IjYxNjkwMDU4MzcyMzgyODg1MjIiPiJNb2JpbG5hIG1yZcW+YSBuaWplIGRvc3R1cG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IkVrcmFuIGplIHpha2xqdcSNYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9pbnN0cnVjdGlvbnNfd2hlbl9wYXR0ZXJuX2VuYWJsZWQiIG1zZ2lkPSI0NjE1NDA1MTYxNDEyNjA0OSI+IlByaXRpc25pdGUg4oCeTWVuaeKAnCBkYSBiaXN0ZSBvdGtsanXEjWFsaSB0ZWxlZm9uIGlsaSB1cHV0aXRlIGhpdGFuIHBveml2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjY4NjI2MDAyODc5NzE1ODM2NCI+IlByaXRpc25pdGUg4oCeTWVuaeKAnCB6YSBvdGtsanXEjWF2YW5qZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNzQ3ODcwMzI1NDk2NDgxMDMwMiI+IlVuZXNpdGUgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZW1lcmdlbmN5X2NhbGwiIG1zZ2lkPSI1Mjk4NjQyNjEzNDE3ODAxODg4Ij4iSGl0bmUgc2x1xb5iZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcmV0dXJuX3RvX2NhbGwiIG1zZ2lkPSI1MjQ0MjU5Nzg1NTAwMDQwMDIxIj4iTmF6YWQgbmEgcG96aXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3BhdHRlcm5fY29ycmVjdCIgbXNnaWQ9IjkwMzkwMDg2NTAzNjIyNjEyMzciPiJUYcSNbm8hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX3dyb25nIiBtc2dpZD0iNDMxNzk1NTAxNDk0ODEwODc5NCI+IlBva3XFoWFqdGUgcG9ub3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXNzd29yZF93cm9uZyIgbXNnaWQ9IjU3Mzc4MTUzOTMyNTMxNjUzMDEiPiJQb2t1xaFhanRlIHBvbm92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIG1zZ2lkPSI3NTQxMzc1ODMwMjI3OTI0MjkiPiJQcmVtYcWhZW4gamUgbmFqdmXEh2kgZG96dm9samVuaSBicm9qIHBva3XFoWFqYSBPdGtsanXEjWF2YW5qYSBsaWNlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTk0MzkyNzc4MTkyMTUzOTkiPiJOZW1hIFNJTSBrYXJ0aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJVIHRhYmxldHUgbmVtYSBTSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX21lc3NhZ2UiIHByb2R1Y3Q9InR2IiBtc2dpZD0iMTk0MzYzMzg2NTQ3Njk4OTU5OSI+IlUgVFYtdSBuZW1hIFNJTSBrYXJ0aWNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIxODY5MjA1ODU2OTUxNjkwNzgiPiJVIHRlbGVmb24gbmlqZSB1bWV0bnV0YSBTSU0ga2FydGljYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjUzNzI3ODcxMzgwMjMyNzI2MTUiPiJVbWV0bml0ZSBTSU0ga2FydGljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTSBuZWRvc3RhamUgaWxpIG5lIG1vxb5lIGRhIHNlIHByb8SNaXRhLiBVbWV0bml0ZSBTSU0ga2FydGljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJTSU0ga2FydGljYSBqZSBuZXVwb3RyZWJsaml2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4iU0lNIGthcnRpY2EgamUgdHJham5vIG9uZW1vZ3XEh2VuYS5cbiBPYnJhdGl0ZSBzZSBkb2JhdmxqYcSNdSB1c2x1Z2UgYmXFvmnEjW5lIG1yZcW+ZSBkYSBiaXN0ZSBkb2JpbGkgZHJ1Z3UgU0lNIGthcnRpY3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYzMDA4NDAyNTEyMTgxNjE1MzQiPiJQcmV0aG9kbmEgcGVzbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTczMjg1MjEwNDI0Mzc3MzM4Ij4iU2xlZGXEh2EgcGVzbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM5ODAzMDg0NjUwNTYxNzMzNjMiPiJQYXV6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTAxMjU4ODIzNjQzODg2NDAxIj4iUHVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9zdG9wX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTkwNzA4MzI2MDY1MTIxMDAzNCI+IlphdXN0YXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcmV3X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjk0NDQxMjgzODY1MTk5MDQxMCI+IlByZW1vdGFqIHVuYXphZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X2Zmd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQyOTg3MTQ5ODcwOTI4OTg1Ij4iUHJlbW90YWogdW5hcHJlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtZXJnZW5jeV9jYWxsc19vbmx5IiBtc2dpZD0iNjczMzk3ODMwNDM4NjM2NTQwNyI+IlNhbW8gaGl0bmkgcG96aXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9uZXR3b3JrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iMTQzMzg5MjI0OTg2MDI4NTAxIj4iTXJlxb5hIGplIHpha2xqdcSNYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IlNJTSBrYXJ0aWNhIGplIHpha2xqdcSNYW5hIFBVSyBrb2RvbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJQb2dsZWRhanRlIEtvcmlzbmnEjWtpIHZvZGnEjSBpbGkga29udGFrdGlyYWp0ZSBLb3Jpc25pxI1rdSBwb2RyxaFrdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjgwNjY2NjAxMjkyMDYwMDEwMzkiPiJTSU0ga2FydGljYSBqZSB6YWtsanXEjWFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV91bmxvY2tfcHJvZ3Jlc3NfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI1OTUzMjMyMTQwNTI4ODEyNjQiPiJPdGtsanXEjWF2YW5qZSBTSU0ga2FydGljZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YSBzdGUgbmVwcmF2aWxubyBuYWNydGFsaSDFoWFibG9uIHphIG90a2xqdcSNYXZhbmplLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YSBzdGUgcG9ncmXFoW5vIHVuZWxpIGxvemlua3UuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjIxNjY3MjcwNjU0NTY5Njk1NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YSBzdGUgcG9ncmXFoW5vIHVuZWxpIFBJTi4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI5MTkxNjExOTg0NjI1NDYwODIwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhIHN0ZSBuZXRhxI1ubyB1bmVsaSDFoWFibG9uIHphIG90a2xqdcSNYXZhbmplLiBOYWtvbiBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmVzdXBlxaFuYShpaCkgcG9rdcWhYWphLCBvZCB2YXMgxIdlIGJpdGkgemF0cmHFvmVubyBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgcG9tb8SHdSBwb2RhdGFrYSB6YSBwcmlqYXZsaml2YW5qZSBuYSBHb29nbGUuXG5cbiBQb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idHYiIG1zZ2lkPSI1MzE2NjY0NTU5NjAzMzk0Njg0Ij4iTmVpc3ByYXZubyBzdGUgbmFjcnRhbGkgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEgb2QgdmFzIMSHZSBiaXRpIHphdHJhxb5lbm8gZGEgb3RrbGp1xI1hdGUgVFYgcG9tb8SHdSBwb2RhdGFrYSB6YSBwcmlqYXZsaml2YW5qZSBuYSBHb29nbGUuXG5cbiBQb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YSBzdGUgbmV0YcSNbm8gdW5lbGkgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZS4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5lc3VwZcWhbmEoaWgpIHBva3XFoWFqYSwgb2QgdmFzIMSHZSBiaXRpIHphdHJhxb5lbm8gZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiBwb21vxId1IHBvZGF0YWthIHphIHByaWphdmxqaXZhbmplIG5hIEdvb2dsZS5cblxuIFBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjEyODEwNjM5OTc0NTc1NTYwNCI+Ik5lcHJhdmlsbm8gc3RlIHBva3XFoWFsaSBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBOYWtvbiBqb8WhIG5ldXNwZcWhbmloIHBva3XFoWFqYSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPikgdGFibGV0IMSHZSBiaXRpIHJlc2V0b3ZhbiBuYSBmYWJyacSNa2EgcG9kZcWhYXZhbmphIGkgc3ZpIGtvcmlzbmnEjWtpIHBvZGFjaSDEh2UgYml0aSBpemd1YmxqZW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0diIgbXNnaWQ9Ijk1MDQwODM4MjQxODI3MDI2MCI+IlBva3XFoWFsaSBzdGUgZGEgb3RrbGp1xI1hdGUgVFYgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBQb3NsZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphIFRWIMSHZSBiaXRpIHJlc2V0b3ZhbiBuYSBwb2RyYXp1bWV2YW5hIGZhYnJpxI1rYSBwb2RlxaFhdmFuamEgaSBzdmkga29yaXNuacSNa2kgcG9kYWNpIMSHZSBiaXRpIGl6Z3VibGplbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4iTmVpc3ByYXZubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBOYWtvbiBqb8WhIG5ldXNwZcWhbmloIHBva3XFoWFqYSAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPikgdGVsZWZvbiDEh2UgYml0aSByZXNldG92YW4gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYSBpIHN2aSBrb3Jpc25pxI1raSBwb2RhY2kgxIdlIGJpdGkgaXpndWJsamVuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiJOZWlzcHJhdm5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXRhLiBUYWJsZXQgxIdlIHNhZGEgYml0aSB2cmHEh2VuIG5hIHBvZHJhenVtZXZhbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjMxOTU3NTU1MzQwOTYxOTIxOTEiPiJQb2t1xaFhbGkgc3RlIGRhIG90a2xqdcSNYXRlIFRWIG5ldGHEjW5vIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXRhLiBUViDEh2Ugc2FkYSBiaXRpIHJlc2V0b3ZhbiBuYSBwb2RyYXp1bWV2YW5hIGZhYnJpxI1rYSBwb2RlxaFhdmFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJOZWlzcHJhdm5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0YS4gVGVsZWZvbiDEh2Ugc2FkYSBiaXRpIHZyYcSHZW4gbmEgcG9kcmF6dW1ldmFuYSBmYWJyacSNa2EgcG9kZcWhYXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiJQb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+IlphYm9yYXZpbGkgc3RlIMWhYWJsb24/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4iT3RrbGp1xI1hdmFuamUgbmFsb2dhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4iUHJldmnFoWUgcG9rdcWhYWphIHVub3NhIMWhYWJsb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMzkzMTgxNjI1NjEwMDcwNzc4NCI+IkRhIGJpc3RlIG90a2xqdcSNYWxpLCBwcmlqYXZpdGUgc2UgcG9tb8SHdSBHb29nbGUgbmFsb2dhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4iS29yaXNuacSNa28gaW1lIChpbWVqbCBhZHJlc2EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fcGFzc3dvcmRfaGludCIgbXNnaWQ9IjU5NTgwMjgzODM5NTQ3Mzg1MjgiPiJMb3ppbmthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiJQcmlqYXZpIG1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5faW52YWxpZF9pbnB1dCIgbXNnaWQ9IjEzNjQwNTE0NzMzNDc0ODU5MDgiPiJOZXZhxb5lxIdlIGtvcmlzbmnEjWtvIGltZSBpbGkgbG96aW5rYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9hY2NvdW50X3JlY292ZXJ5X2hpbnQiIG1zZ2lkPSIxNjk2OTI0NzYzNjkwMzc5MDczIj4iWmFib3JhdmlsaSBzdGUga29yaXNuacSNa28gaW1lIGlsaSBsb3ppbmt1P1xuUG9zZXRpdGUgYWRyZXN1ICI8Yj4iZ29vZ2xlLmNvbS9hY2NvdW50cy9yZWNvdmVyeSI8L2I+Ii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9jaGVja2luZ19wYXNzd29yZCIgbXNnaWQ9IjcxMTQ2MjczNTEyODY5MzM4NjciPiJQcm92ZXJhdmFuamUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3VubG9ja19sYWJlbCIgbXNnaWQ9IjczNzQ0MDQ4MzIyMDY2NzA1NCI+Ik90a2xqdcSNYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29uX2xhYmVsIiBtc2dpZD0iOTA2ODg3NzU3NjUxMzQyNTk3MCI+IlVrbGp1xI1pIHp2dWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NvdW5kX29mZl9sYWJlbCIgbXNnaWQ9Ijk5NjgyMjgyNTE1NDMxOTAyNiI+Iklza2xqdcSNaSB6dnVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9zdGFydCIgbXNnaWQ9IjM5NDEwNDU1MDI5MzMxNDI4NDciPiJPYnJhemFjIGplIHphcG/EjWV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9hY2Nlc3NfcGF0dGVybl9jbGVhcmVkIiBtc2dpZD0iNTU4MzQ3OTcyMTAwMTYzOTU3OSI+Ik9icmF6YWMgamUgb2JyaXNhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZCIgbXNnaWQ9IjY3NTYwMzEyMDgzNTkyOTI0ODciPiLEhmVsaWphIGplIGRvZGF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fY2VsbF9hZGRlZF92ZXJib3NlIiBtc2dpZD0iNzI2NDU4MDc4MTc0NDAyNjkzOSI+IsSGZWxpamEgPHhsaWZmOmcgaWQ9IkNFTExfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGplIGRvZGF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fZGV0ZWN0ZWQiIG1zZ2lkPSI0OTg4NzMwODk1NTU0MDU3MDU4Ij4iT2JyYXphYyBqZSBkb3ZyxaFlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fYWNjZXNzX3BhdHRlcm5fYXJlYSIgbXNnaWQ9IjQwMDgxMzIwNzU3Mjk1MzIwOSI+Ik9ibGFzdCDFoWFibG9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9jaGFuZ2VkIiBtc2dpZD0iNTY3ODYyNDYyNDY4MTQwMDE5MSI+IiUxJHMuIFZpZMW+ZXQgJTIkZCBvZCAlMyRkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfYWRkX3dpZGdldCIgbXNnaWQ9IjgyNzMyNzcwNTg3MjQ5MjQ2NTQiPiJEb2RhaiB2aWTFvmV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0X2VtcHR5X3Nsb3QiIG1zZ2lkPSIxMjgxNTA1NzAzMzA3OTMwNzU3Ij4iUHJhem5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91bmxvY2tfYXJlYV9leHBhbmRlZCIgbXNnaWQ9IjIyNzgxMDYwMjIzMTExNzAyOTkiPiJPYmxhc3Qgb3RrbGp1xI1hdmFuamEgamUgcHJvxaFpcmVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3VubG9ja19hcmVhX2NvbGxhcHNlZCIgbXNnaWQ9IjYzNjY5OTIwNjY5MzYwNzYzOTYiPiJPYmxhc3Qgb3RrbGp1xI1hdmFuamEgamUgc2t1cGxqZW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfd2lkZ2V0IiBtc2dpZD0iNjUyNzEzMTAzOTc0MTgwODI0MCI+IlZpZMW+ZXQgPHhsaWZmOmcgaWQ9IldJREdFVF9JTkRFWCI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV91c2VyX3NlbGVjdG9yIiBtc2dpZD0iMTIyNjc5ODM3MDkxMzY5ODg5NiI+Ikl6Ym9yIGtvcmlzbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc3RhdHVzIiBtc2dpZD0iODAwODI2NDYwMzkzNTkzMDYxMSI+IlN0YXR1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfY2FtZXJhIiBtc2dpZD0iODkwNDIzMTE5NDE4MTExNDYwMyI+IkthbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWdhdXJkX2FjY2Vzc2liaWxpdHlfbWVkaWFfY29udHJvbHMiIG1zZ2lkPSIyNjIyMDk2NTQyOTIxNjE4MDYiPiJLb250cm9sZSB6YSBtZWRpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX3N0YXJ0IiBtc2dpZD0iODczNjg1MzYxNTU4ODgyODE5NyI+IlphcG/EjWVsYSBqZSBwcm9tZW5hIHJlZG9zbGVkYSB2aWTFvmV0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3dpZGdldF9yZW9yZGVyX2VuZCIgbXNnaWQ9IjcxNzAxOTA5NTA4NzA0NjgzMjAiPiJQcm9tZW5hIHJlZG9zbGVkYSB2aWTFvmV0YSBqZSB6YXZyxaFlbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV93aWRnZXRfZGVsZXRlZCIgbXNnaWQ9IjQ0MjYyMDQyNjM5MjkyMjQ0MzQiPiJWaWTFvmV0IDx4bGlmZjpnIGlkPSJXSURHRVRfSU5ERVgiPiUxJHM8L3hsaWZmOmc+IGplIGl6YnJpc2FuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZXhwYW5kX2xvY2tfYXJlYSIgbXNnaWQ9IjUxOTg1OTcyMDkzNDE3ODAyNCI+IlByb8WhaXJpIG9ibGFzdCBvdGtsanXEjWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3NsaWRlX3VubG9jayIgbXNnaWQ9IjI5NTk5Mjg0Nzg3NjQ2OTcyNTQiPiJPdGtsanXEjWF2YW5qZSBwcmV2bGHEjWVuamVtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iT3RrbGp1xI1hdmFuamUgxaFhYmxvbm9tLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfZmFjZV91bmxvY2siIG1zZ2lkPSI0ODE3MjgyNTQzMzUxNzE4NTM1Ij4iT3RrbGp1xI1hdmFuamUgbGljZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9waW5fdW5sb2NrIiBtc2dpZD0iMjQ2OTY4NzExMTc4NDAzNTA0NiI+Ik90a2xqdcSNYXZhbmplIFBJTi1vbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3Bhc3N3b3JkX3VubG9jayIgbXNnaWQ9Ijc2NzU3Nzc2MjM5MTIxNTUwODkiPiJPdGtsanXEjWF2YW5qZSBsb3ppbmtvbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X3BhdHRlcm5fYXJlYSIgbXNnaWQ9Ijc2Nzk4OTEzMjQ1MDk1OTc5MDQiPiJPYmxhc3QgxaFhYmxvbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zbGlkZV9hcmVhIiBtc2dpZD0iNjczNjA2NDQ5NDAxOTk3OTU0NCI+Ik9ibGFzdCBwcmV2bGHEjWVuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfc3ltYm9sX2tleSIgbXNnaWQ9Ijk5MjI4MDc1NjI1NjUzNjA0MiI+Ij8xMjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXNzd29yZF9rZXlib2FyZF9sYWJlbF9hbHBoYV9rZXkiIG1zZ2lkPSI4MDAxMDk2MTc1MTY3NDg1NjQ5Ij4iQUJDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzc3dvcmRfa2V5Ym9hcmRfbGFiZWxfYWx0X2tleSIgbXNnaWQ9IjEyODQ4MjA5NDI2MjAyODg2NzgiPiJBTFQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudWxhcml0eV9sYWJlbF9jaGFyYWN0ZXIiIG1zZ2lkPSI3MzM2NDcwNTM1Mzg1MDA5NTIzIj4iem5hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX3dvcmQiIG1zZ2lkPSI3MDc1NTcwMzI4Mzc0OTE4NjYwIj4icmXEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmsiIG1zZ2lkPSI1ODE1NTA4ODgwNzgyNDg4MjY3Ij4idmV6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW51bGFyaXR5X2xhYmVsX2xpbmUiIG1zZ2lkPSI1NzY0MjY3MjM1MDI2MTIwODg4Ij4icmVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfZmFpbGVkIiBtc2dpZD0iNTQxMDI3MDMyOTExNDIxMjA0MSI+IkZhYnJpxI1rbyB0ZXN0aXJhbmplIG5pamUgdXNwZWxvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm90X3N5c3RlbSIgbXNnaWQ9IjQ0MzUyMDE2NTY3NjcyNzY3MjMiPiJSYWRuamEgRkFDVE9SWV9URVNUIGplIHBvZHLFvmFuYSBzYW1vIHphIHBha2V0ZSBpbnN0YWxpcmFuZSB1IGRpcmVrdG9yaWp1bXUgL3N5c3RlbS9hcHAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3Rfbm9fYWN0aW9uIiBtc2dpZD0iODcyOTkxODc0Nzk5OTk4NTYxIj4iTmlqZSBwcm9uYcSRZW4gbmlqZWRhbiBwYWtldCBrb2ppIG9iZXpiZcSRdWplIHJhZG5qdSBGQUNUT1JZX1RFU1QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmFjdG9yeXRlc3RfcmVib290IiBtc2dpZD0iNjMyMDE2ODIwMzA1MDc5MTY0MyI+IlBvbm92byBwb2tyZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTk4NzQ4Mzk3NzgzNDYwMzg3MiI+Ik5hIHN0cmFuaWNpIG5hIGFkcmVzaSDigJ48eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPuKAnCBwacWhZSBzbGVkZcSHZToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJqc19kaWFsb2dfdGl0bGVfZGVmYXVsdCIgbXNnaWQ9IjY5NjE5MDMyMTM3Mjk2Njc1NzMiPiJKYXZhU2NyaXB0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfdGl0bGUiIG1zZ2lkPSIyNjE5Mzc2NTU1NTI1MTE2NTkzIj4iUG90dnJkYSBuYXZpZ2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfcG9zaXRpdmVfYnV0dG9uIiBtc2dpZD0iMzExMjc1MjAxMDYwMDQ4NDEzMCI+IlphdHZvcmkgb3Z1IHN0cmFuaWN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWRfbmVnYXRpdmVfYnV0dG9uIiBtc2dpZD0iNTYxNDg2MTI5MzAyNjA5OTcxNSI+Ik9zdGFuaSBuYSBvdm9qIHN0cmFuaWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ianNfZGlhbG9nX2JlZm9yZV91bmxvYWQiIG1zZ2lkPSIzNDY4ODE2MzU3MDk1Mzc4NTkwIj4iPHhsaWZmOmcgaWQ9Ik1FU1NBR0UiPiVzPC94bGlmZjpnPlxuXG5EYSBsaSBzdHZhcm5vIMW+ZWxpdGUgZGEgbmFwdXN0aXRlIG92dSBzdHJhbmljdT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX2xhYmVsIiBtc2dpZD0iNjg2MDI2MTc1ODY2NTgyNTA2OSI+IlBvdHZyZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb3VibGVfdGFwX3RvYXN0IiBtc2dpZD0iNDU5NTA0NjUxNTQwMDI2ODg4MSI+IlNhdmV0OiBEb2Rpcm5pdGUgZHZhcHV0IGRhIGJpc3RlIHV2ZcSHYWxpIGkgdW1hbmppbGkgcHJpa2F6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3RoaXNfZm9ybSIgbXNnaWQ9IjQ2MTY3NTg4NDExNTc4MTY2NzYiPiJBdXRvbS4gcG9wLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNldHVwX2F1dG9maWxsIiBtc2dpZD0iNzEwMzQ5NTA3MDE4MDU5MDgxNCI+IlBvZGXFoS4gYXV0LiBwb3AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19uYW1lX3NlcGFyYXRvciIgbXNnaWQ9IjYzNTAxNDUxNTQ3Nzk3MDY3NzIiPiIgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYWRkcmVzc19zdW1tYXJ5X25hbWVfZm9ybWF0IiBtc2dpZD0iMzI2ODA0MTA1NDg5OTIxNDk0NSI+IiQxJDIkMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2FkZHJlc3Nfc3VtbWFyeV9zZXBhcmF0b3IiIG1zZ2lkPSI3NDgzMzA3ODkzMTcwMzI0MTI5Ij4iLCAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9hZGRyZXNzX3N1bW1hcnlfZm9ybWF0IiBtc2dpZD0iNDg3NDQ1OTQ1NTc4NjgyNzM0NCI+IiQxJDIkMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Byb3ZpbmNlIiBtc2dpZD0iMjIzMTgwNjU1Mzg2MzQyMjMwMCI+IlBva3JhamluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3Bvc3RhbF9jb2RlIiBtc2dpZD0iNDY5NjQzMDQwNzY4OTM3NzEwOCI+IlBvxaF0YW5za2kgYnJvaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX3N0YXRlIiBtc2dpZD0iNjk4ODg5NDE5NTUyMDA0NDYxMyI+IkRyxb5hdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF96aXBfY29kZSIgbXNnaWQ9Ijg2OTc1NDQ1OTI2MjczMjI5NDYiPiJQb8WhdGFuc2tpIGJyb2oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9jb3VudHkiIG1zZ2lkPSIyMzcwNzM3NzEwMjAzNjI4OTEiPiJPa3J1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2lzbGFuZCIgbXNnaWQ9IjQwMjAxMDA4NzU5ODQ2NjcwMjUiPiJPc3Rydm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9kaXN0cmljdCIgbXNnaWQ9Ijg0MDA3MzUwNzMzOTIyNjc2NzIiPiJEaXN0cmlrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImF1dG9maWxsX2RlcGFydG1lbnQiIG1zZ2lkPSI1MzQzMjc5NDYyNTY0NDUzMzA5Ij4iT2RlbGplbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcHJlZmVjdHVyZSIgbXNnaWQ9IjIwMjg0OTk0ODUwNjU4MDA0MTkiPiJQcmVmZWt0dXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfcGFyaXNoIiBtc2dpZD0iODIwMjIwNjEwNTQ2ODgyMDA1NyI+IlBhcm9oaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXV0b2ZpbGxfYXJlYSIgbXNnaWQ9IjM1NDc0MDkwNTA4ODk5NTI0MjMiPiJPYmxhc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdXRvZmlsbF9lbWlyYXRlIiBtc2dpZD0iMjg5Mzg4MDk3ODgzNTY5ODgxOCI+IkVtaXJhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEhpc3RvcnlCb29rbWFya3MiIG1zZ2lkPSIzNzc1MjY1Nzc1NDA1MTA2OTgzIj4ixI1pdGFuamUgdmViIG9iZWxlxb5pdmHEjWEgaSBpc3RvcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlYWRIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iODQ2MjM3ODIyNjYwMDQzOTY1OCI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSDEjWl0YSBpc3RvcmlqdSBzdmloIFVSTCBhZHJlc2Ega29qZSBzdSBwb3NlxIdlbmUgcG9tb8SHdSBQcmVnbGVkYcSNYSwga2FvIGkgc3ZlIG9iZWxlxb5pdmHEjWUgdSBQcmVnbGVkYcSNdS4gTmFwb21lbmE6IE92YSBkb3p2b2xhIHNlIG1vxb5kYSBuYSBwcmltZW5qdWplIG5hIHByZWdsZWRhxI1lIHRyZcSHZSBzdHJhbmUgaSBkcnVnZSBhcGxpa2FjaWplIHNhIG1vZ3XEh25vxaHEh3UgdmViIHByZWdsZWRhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfd3JpdGVIaXN0b3J5Qm9va21hcmtzIiBtc2dpZD0iMzcxNDc4NTE2NTI3MzMxNDQ5MCI+InBpc2FuamUgdmViIG9iZWxlxb5pdmHEjWEgaSBpc3RvcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjgyNTUyNzQ2OTE0NTc2MDkyMiI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBtZW5qYSBpc3RvcmlqdSBQcmVnbGVkYcSNYSBpbGkgb2JlbGXFvml2YcSNZSB1c2tsYWRpxaF0ZW5lIG5hIHRhYmxldHUuIE92byBtb8W+ZSBkYSBvbW9ndcSHaSBhcGxpa2FjaWppIGRhIGJyacWhZSBpbGkgbWVuamEgcG9kYXRrZSBQcmVnbGVkYcSNYS4gTmFwb21lbmE6IE92YSBkb3p2b2xhIHNlIG1vxb5kYSBuYSBwcmltZW5qdWplIG5hIHByZWdsZWRhxI1lIHRyZcSHZSBzdHJhbmUgaSBkcnVnZSBhcGxpa2FjaWplIHNhIG1vZ3XEh25vxaHEh3UgdmViIHByZWdsZWRhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0idHYiIG1zZ2lkPSI3MDA3MzkzODIzMTk3NzY2NTQ4Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIG1lbmphIGlzdG9yaWp1IHByZWdsZWRhxI1hIGlsaSBvYmVsZcW+aXZhxI1lIGtvamUgxI11dmF0ZSBuYSBUVi11LiBUbyBtb8W+ZSBkYSBkb3p2b2xpIGFwbGlrYWNpamkgZGEgYnJpxaFlIGlsaSBtZW5qYSBwb2RhdGtlIHByZWdsZWRhxI1hLiBOYXBvbWVuYTogT3ZhIGRvenZvbGEgc2UgbW/FvmRhIG5lIHByaW1lbmp1amUgbmEgcHJlZ2xlZGHEjWUgdHJlxIdlIHN0cmFuZSBpIGRydWdlIGFwbGlrYWNpamUgc2EgbW9ndcSHbm/FocSHdSBwcmVnbGVkYW5qYSB2ZWJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3dyaXRlSGlzdG9yeUJvb2ttYXJrcyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg0OTczODk1MzEwMTQxODU1MDkiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgbWVuamEgaXN0b3JpanUgUHJlZ2xlZGHEjWEgaWxpIG9iZWxlxb5pdmHEjWUgdXNrbGFkacWhdGVuZSBuYSB0ZWxlZm9udS4gT3ZvIG1vxb5lIGRhIG9tb2d1xIdpIGFwbGlrYWNpamkgZGEgYnJpxaFlIGlsaSBtZW5qYSBwb2RhdGtlIFByZWdsZWRhxI1hLiBOYXBvbWVuYTogT3ZhIGRvenZvbGEgc2UgbW/FvmRhIG5hIHByaW1lbmp1amUgbmEgcHJlZ2xlZGHEjWUgdHJlxIdlIHN0cmFuZSBpIGRydWdlIGFwbGlrYWNpamUgc2EgbW9ndcSHbm/FocSHdSB2ZWIgcHJlZ2xlZGFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRBbGFybSIgbXNnaWQ9IjEzNzkyOTQ1NTYzNjIwOTE4MTQiPiJwb2RlxaFhdmFuamUgYWxhcm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0QWxhcm0iIG1zZ2lkPSIzMTYzOTIwMzkxNTc0NzM4NDgiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgcG9kZXNpIGFsYXJtIHUgaW5zdGFsaXJhbm9qIGFwbGlrYWNpamkgYnVkaWxuaWthLiBOZWtlIGFwbGlrYWNpamUgYnVkaWxuaWthIG1vxb5kYSBuZSBwcmltZW5qdWp1IG92dSBmdW5rY2lqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjU1MjU2NjAwMjYwOTA5NTkwNDQiPiJkb2RhdmFuamUgZ292b3JuZSBwb8WhdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19hZGRWb2ljZW1haWwiIG1zZ2lkPSI2NjA0NTA4NjUxNDI4MjUyNDM3Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIGRvZGFqZSBwb3J1a2UgdSBwcmlqZW1ubyBzYW5kdcSNZSBnb3Zvcm5lIHBvxaF0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiJpem1lbmEgZG96dm9sYSB6YSBnZW9ncmFmc2tlIGxva2FjaWplIFByZWdsZWRhxI1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IkRvenZvbGphdmEgYXBsaWthY2lqaSBkYSBpem1lbmkgZG96dm9sZSBQcmVnbGVkYcSNYSB6YSB1dHZyxJFpdmFuamUgZ2VvZ3JhZnNrZSBsb2thY2lqZS4gWmxvbmFtZXJuZSBhcGxpa2FjaWplIHRvIG1vZ3UgZGEgemxvdXBvdHJlYmUgaSBpc2tvcmlzdGUgemEgc2xhbmplIGluZm9ybWFjaWphIG8gbG9rYWNpamkgbmFzdW1pxI1uaW0gdmViIHNhanRvdmltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX21lc3NhZ2UiIG1zZ2lkPSI3NjczNDQ2ODcxMzkxOTU3OTAiPiLFvWVsaXRlIGxpIGRhIHByZWdsZWRhxI0gemFwYW10aSBvdnUgbG96aW5rdT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25vdG5vdyIgbXNnaWQ9IjYzODk2NzUzMTY3MDY2OTk3NTgiPiJOZSBzYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9yZW1lbWJlciIgbXNnaWQ9IjY0OTE4Nzk2Nzg5OTY3NDk0NjYiPiJaYXBhbXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9uZXZlciIgbXNnaWQ9IjgyNzQzMzAyOTY3ODU4NTUxMDUiPiJOaWthZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9wZW5fcGVybWlzc2lvbl9kZW55IiBtc2dpZD0iNzM3NDAzNjcwODMxNjYyOTgwMCI+Ik5lbWF0ZSBkb3p2b2x1IGRhIG90dm9yaXRlIG92dSBzdHJhbmljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiJUZWtzdCBqZSBrb3BpcmFuIHUgcHJpdnJlbWVudSBtZW1vcmlqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3JlX2l0ZW1fbGFiZWwiIG1zZ2lkPSI0NjUwOTE4OTIzMDgzMzIwNDk1Ij4iSm/FoSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBlbmRfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNTcyMjE0NDYxNjc2MDE1NjQyIj4iTWVuaSsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NwYWNlX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjQxMDMyODYzOTI3MjE2MjUzNyI+InJhem1hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZW50ZXJfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNzQzMzYyNzg1MTExMzA5NjY4Ij4iZW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2RlbGV0ZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjM2NTgxNzgwMDcyMDI3NDgxNjQiPiJpemJyacWhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaF9nbyIgbXNnaWQ9IjgyOTgwMTY2Njk4MjIxNDE3MTkiPiJQcmV0cmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWFyY2hfaGludCIgbXNnaWQ9IjE3MzM5NDcyNjA3NzMwNTYwNTQiPiJQcmV0cmHFvml0ZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fc2VhcmNoIiBtc2dpZD0iNjc0OTgyNjYzOTA5ODUxMjEyMCI+IlByZXRyYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fcXVlcnkiIG1zZ2lkPSI1OTExNzc4NTkzMTI1MzU1MTI0Ij4iVXBpdCB6YSBwcmV0cmFndSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fY2xlYXIiIG1zZ2lkPSIxMzMwMjgxOTkwOTUxODMzMDMzIj4iT2JyacWhaSB1cGl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VhcmNodmlld19kZXNjcmlwdGlvbl9zdWJtaXQiIG1zZ2lkPSIyNjg4NDUwMTMzMjk3OTgzNTQyIj4iUG/FoWFsamkgdXBpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaHZpZXdfZGVzY3JpcHRpb25fdm9pY2UiIG1zZ2lkPSIyNDUzMjAzNjk1Njc0OTk0NDQwIj4iR2xhc292bmEgcHJldHJhZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZXhwbG9yZV9ieV90b3VjaF93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzQ2MDY5NDA3MDMwOTczMDE0OSI+Ik9tb2d1xIdpdGkgSXN0cmHFvml2YW5qZSBkb2Rpcm9tPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODY1NTg4NzUzOTA4OTkxMDU3NyI+Ijx4bGlmZjpnIGlkPSJBQ0NFU1NJQklMSVRZX1NFUlZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gxb5lbGkgZGEgb21vZ3XEh2kgSXN0cmHFvml2YW5qZSBkb2Rpcm9tLiBLYWRhIGplIElzdHJhxb5pdmFuamUgZG9kaXJvbSB1a2xqdcSNZW5vLCBtb8W+ZXRlIGRhIMSNdWpldGUgaWxpIHZpZGl0ZSBvcGlzZSBzdGF2a2UgbmEga29qdSBzdGUgc3RhdmlsaSBwcnN0IGlsaSBkYSBrb211bmljaXJhdGUgc2EgdGFibGV0b20gcG9tb8SHdSBwb2tyZXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9leHBsb3JlX2J5X3RvdWNoX3dhcm5pbmdfbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjI3MDgxOTk2NzI4NTIzNzMxOTUiPiI8eGxpZmY6ZyBpZD0iQUNDRVNTSUJJTElUWV9TRVJWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+IMW+ZWxpIGRhIG9tb2d1xIdpIElzdHJhxb5pdmFuamUgZG9kaXJvbS4gS2FkYSBqZSBJc3RyYcW+aXZhbmplIGRvZGlyb20gdWtsanXEjWVubywgbW/FvmV0ZSBkYSDEjXVqZXRlIGlsaSB2aWRpdGUgb3Bpc2Ugc3RhdmtlIG5hIGtvanUgc3RlIHN0YXZpbGkgcHJzdCBpbGkgZGEga29tdW5pY2lyYXRlIHNhIHRlbGVmb25vbSBwb21vxId1IHBva3JldGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib25lTW9udGhEdXJhdGlvblBhc3QiIG1zZ2lkPSI3Mzk2Mzg0NTA4OTUzNzc5OTI1Ij4iUHJlIG1lc2VjIGRhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiZWZvcmVPbmVNb250aER1cmF0aW9uUGFzdCIgbXNnaWQ9IjkwOTEzNDU0NjgzNjQ5OTgyNiI+IlByZSBtZXNlYyBkYW5hIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9Imxhc3RfbnVtX2RheXMiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI1MTA0NTMzNTUwNzIzOTMyMDI1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlByZXRob2RuaSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JWQ8L3hsaWZmOmc+IGRhbjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByZXRob2RuYSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JWQ8L3hsaWZmOmc+IGRhbmE8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByZXRob2RuaWggPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiVkPC94bGlmZjpnPiBkYW5hPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Imxhc3RfbW9udGgiIG1zZ2lkPSIzOTU5MzQ2NzM5OTc5MDU1NDMyIj4iUHJvxaFsb2cgbWVzZWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2xkZXIiIG1zZ2lkPSI1MjExOTc1MDIyODE1NTU0ODQwIj4iU3RhcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByZXBvc2l0aW9uX2Zvcl9kYXRlIiBtc2dpZD0iOTA5Mzk0OTc1Nzc1NzQ0NTExNyI+Ijx4bGlmZjpnIGlkPSJEQVRFIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfdGltZSIgbXNnaWQ9IjU1MDY4MzEyNDQyNjMwODM3OTMiPiJ1IDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmVwb3NpdGlvbl9mb3JfeWVhciIgbXNnaWQ9IjUwNDAzOTU2NDA3MTE4NjcxNzciPiJ1IDx4bGlmZjpnIGlkPSJZRUFSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF5IiBtc2dpZD0iODE0NDE5NTc3NjA1ODExOTQyNCI+ImRhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRheXMiIG1zZ2lkPSI0Nzc0NTQ3NjYxMDIxMzQ0NjAyIj4iZGFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXIiIG1zZ2lkPSIyMTI2NzcxOTE2NDI2MTg5NDgxIj4ic2F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaG91cnMiIG1zZ2lkPSI4OTQ0MjQwMDUyNjY4NTI5OTMiPiJzYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlIiBtc2dpZD0iOTE0ODg3ODY1NzcwMzc2OTg2OCI+Im1pbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pbnV0ZXMiIG1zZ2lkPSI1NjQ2MDAxMDA1ODI3MDM0NTA5Ij4ibWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2Vjb25kIiBtc2dpZD0iMzE4NDIzNTgwODAyMTQ3OCI+InNlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlY29uZHMiIG1zZ2lkPSIzMTYxNTE1MzQ3MjE2NTg5MjM1Ij4ic2VrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2VlayIgbXNnaWQ9IjU2MTc5NjE1MzcxNzMwNjE1ODMiPiJuZWRlbGphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2Vla3MiIG1zZ2lkPSI2NTA5NjIzODM0NTgzOTQ0NTE4Ij4ibmVkZWxqZShhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllYXIiIG1zZ2lkPSI0MDAxMTE4MjIxMDEzODkyMDc2Ij4iZ29kaW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ieWVhcnMiIG1zZ2lkPSI2ODgxNTc3NzE3OTkzMjEzNTIyIj4iZ29kaW5lKGEpIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0NTI3OTg2OTM5NzI5Njg3ODA1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNla3VuZGE8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRlPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzZWt1bmRpPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJkdXJhdGlvbl9taW51dGVzIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjQzNzg2OTUzOTM5OTU2MTI1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IG1pbnV0PC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+PHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gbWludXRhPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBtaW51dGE8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxwbHVyYWxzIG5hbWU9ImR1cmF0aW9uX2hvdXJzIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjgyNjIzMzM2OTE4NjY2ODI3NCI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYXQ8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYXRhPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlQiPiVkPC94bGlmZjpnPiBzYXRpPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl90aXRsZSIgbXNnaWQ9IjM1MzQ1MDkxMzU0MzgzNTMwNzciPiJQcm9ibGVtIHNhIHZpZGVvIHNuaW1rb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF9pbnZhbGlkX3Byb2dyZXNzaXZlX3BsYXliYWNrIiBtc2dpZD0iMzE4NjY3MDMzNTkzODY3MDQ0NCI+Ik92YWogdmlkZW8gbmUgbW/FvmUgZGEgc2Ugc3RyaW11amUgbmEgb3ZvbSB1cmXEkWFqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJWaWRlb1ZpZXdfZXJyb3JfdGV4dF91bmtub3duIiBtc2dpZD0iMzQ1MDQzOTE1NTE4NzgxMDA4NSI+Ik5lIG1vxb5ldGUgZGEgcHVzdGl0ZSBvdmFqIHZpZGVvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IlZpZGVvVmlld19lcnJvcl9idXR0b24iIG1zZ2lkPSIyODIyMjM4MjE1MTAwNjc5NTkyIj4iUG90dnJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbGF0aXZlX3RpbWUiIG1zZ2lkPSIxODE4NTU3MTc3ODI5NDExNDE3Ij4iPHhsaWZmOmcgaWQ9IkRBVEUiPiUxJHM8L3hsaWZmOmc+LCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub29uIiBtc2dpZD0iNzI0NTM1MzUyODgxODU4NzkwOCI+InBvZG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iTm9vbiIgbXNnaWQ9IjMzNDIxMjc3NDUyMzAwMTMxMjciPiJQb2RuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1pZG5pZ2h0IiBtc2dpZD0iNzE2NjI1OTUwODg1MDQ1NzU5NSI+InBvbm/EhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Ik1pZG5pZ2h0IiBtc2dpZD0iNTYzMDgwNjkwNjg5Nzg5MjIwMSI+IlBvbm/EhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVsYXBzZWRfdGltZV9zaG9ydF9mb3JtYXRfbW1fc3MiIG1zZ2lkPSI0NDMxNTU1OTQzODI4NzExNDczIj4iPHhsaWZmOmcgaWQ9Ik1JTlVURVMiPiUxJDAyZDwveGxpZmY6Zz46PHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUyJDAyZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbGFwc2VkX3RpbWVfc2hvcnRfZm9ybWF0X2hfbW1fc3MiIG1zZ2lkPSIxODQ2MDcxOTk3NjE2NjU0MTI0Ij4iPHhsaWZmOmcgaWQ9IkhPVVJTIj4lMSRkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iTUlOVVRFUyI+JTIkMDJkPC94bGlmZjpnPjo8eGxpZmY6ZyBpZD0iU0VDT05EUyI+JTMkMDJkPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdEFsbCIgbXNnaWQ9IjY4NzY1MTg5MjU4NDQxMjkzMzEiPiJJemFiZXJpIHN2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJc2VjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waXJhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Ik5hbGVwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iTmFsZXBpIGthbyBvYmnEjWFuIHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJaYW1lbmkuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iSXpicmnFoWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGlyYWogVVJMIGFkcmVzdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ikl6YWJlcmkgdGVrc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+Ik9wb3pvdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlBvbm92aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJJemJvciB0ZWtzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRG9kYWogdSByZcSNbmlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJJemJyacWhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0TWV0aG9kIiBtc2dpZD0iMTY1MzYzMDA2MjMwNDU2Nzg3OSI+Ik1ldG9kIHVub3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZWRpdFRleHRNZW51VGl0bGUiIG1zZ2lkPSI0OTA5MTM1NTY0OTQxODE1NDk0Ij4iUmFkbmplIHUgdmV6aSBzYSB0ZWtzdG9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgbXNnaWQ9IjU1NzYyNzI0OTYzNjU2ODQ4MzQiPiJQcm9zdG9yIHphIHNrbGFkacWhdGVuamUgamUgbmEgaXptYWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190ZXh0IiBtc2dpZD0iNjY0MDUwNTgxNzYxNzQxNDM3MSI+Ik5la2Ugc2lzdGVtc2tlIGZ1bmtjaWplIG1vxb5kYSBuZSBmdW5rY2lvbmnFoXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW50ZXJuYWxfc3RvcmFnZV92aWV3X3RleHRfbm9fYm9vdCIgbXNnaWQ9IjY5MzUxOTAwOTkyMDQ2OTM0MjQiPiJOZW1hIGRvdm9sam5vIHNrbGFkacWhbm9nIHByb3N0b3JhIHphIHNpc3RlbS4gVXZlcml0ZSBzZSBkYSBpbWF0ZSAyNTAgTUIgc2xvYm9kbm9nIHByb3N0b3JhIGkgcG9ub3ZvIHBva3Jlbml0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcnVubmluZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4NzE4MzM1MTIxMDYwNzg3OTE0Ij4iQXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGplIHBva3JlbnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9ydW5uaW5nX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iNDY1MzU4Njk0Nzc0NzMzMDA1OCI+IkRvZGlybml0ZSB6YSB2acWhZSBpbmZvcm1hY2lqYSBpbGkgemF1c3RhdmxqYW5qZSBhcGxpa2FjaWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9rIiBtc2dpZD0iNTk3MDA2MDQzMDU2MjUyNDkxMCI+IlBvdHZyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI2NDQyNTYwNTcxMjU5OTM1MTMwIj4iT3RrYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InllcyIgbXNnaWQ9IjUzNjI5ODIzMDMzMzc5NjkzMTIiPiJQb3R2cmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm8iIG1zZ2lkPSI1MTQxNTMxMDQ0OTM1NTQxNDk3Ij4iT3RrYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpYWxvZ19hbGVydF90aXRsZSIgbXNnaWQ9IjIwNDk2NTg3MDg2MDkwNDMxMDMiPiJQYcW+bmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9hZGluZyIgbXNnaWQ9Ijc5MzM2ODEyNjAyOTYwMjExODAiPiJVxI1pdGF2YSBzZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGl0YWxfb24iIG1zZ2lkPSIxNTQ0NjgyNzU1NTE0NDk0Mjk4Ij4iREEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBpdGFsX29mZiIgbXNnaWQ9IjY4MTU4NzAzODY5NzI4MDU4MzIiPiJORSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoQXBwbGljYXRpb24iIG1zZ2lkPSI0NTMzMTg1OTQ3MDY0NzczMzg2Ij4iRG92csWhYXZhbmplIHJhZG5qZSBwb21vxId1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hBcHBsaWNhdGlvbk5hbWVkIiBtc2dpZD0iODI2MDE1ODg2NTkzNjk0Mjc4MyI+IlphdnLFoWl0ZSByYWRuanUgcG9tb8SHdSBhcGxpa2FjaWplICUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaFZpZXdBcHBsaWNhdGlvbiIgbXNnaWQ9IjMyNzI3Nzg1NzY3MDA1NzIxMDIiPiJPdHZvcml0ZSBwb21vxId1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hWaWV3QXBwbGljYXRpb25OYW1lZCIgbXNnaWQ9IjIyODY0MTg4MjQwMTEyNDk2MjAiPiJPdHZvcml0ZSBwb21vxId1IGFwbGlrYWNpamUgJTEkcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoRWRpdEFwcGxpY2F0aW9uIiBtc2dpZD0iMTQ0NzI3ODM4MjQxNDAyNjU1Ij4iSXptZW5pdGUgcG9tb8SHdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoRWRpdEFwcGxpY2F0aW9uTmFtZWQiIG1zZ2lkPSIxNzc1ODE1NTMwMTU2NDQ3NzkwIj4iSXptZW5pdGUgcG9tb8SHdSBhcGxpa2FjaWplICUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaFNlbmRBcHBsaWNhdGlvbiIgbXNnaWQ9IjY5MDI1MTI0MTQwNTczNDE2NjgiPiJEZWxpdGUgcG9tb8SHdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndoaWNoU2VuZEFwcGxpY2F0aW9uTmFtZWQiIG1zZ2lkPSIyNzk5MzcwMjQwMDA1NDI0MzkxIj4iRGVsaXRlIHBvbW/Eh3UgYXBsaWthY2lqZSAlMSRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb24iIG1zZ2lkPSI0MzA3NTg3NjkxNTA2OTE5NjkxIj4iSXphYmVyaXRlIGFwbGlrYWNpanUgemEgcG/EjWV0bnUgc3RyYW5pY3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aGljaEhvbWVBcHBsaWNhdGlvbk5hbWVkIiBtc2dpZD0iNDQ5MzQzODU5MzIxNDc2MDk3OSI+IktvcmlzdGl0ZSAlMSRzIHphIHBvxI1ldG51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzVXNlIiBtc2dpZD0iNDU4MzAxODM2ODAwMDYxMDQzOCI+IlBvZHJhenVtZXZhbm8ga29yaXN0aSB6YSBvdnUgcmFkbmp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZV9hX2RpZmZlcmVudF9hcHAiIG1zZ2lkPSI4MTM0OTI2MjMwNTg1NzEwMjQzIj4iS29yaXN0aXRlIGRydWd1IGFwbGlrYWNpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbGVhckRlZmF1bHRIaW50TXNnIiBtc2dpZD0iMzI1MjU4NDY4OTUxMjA3NzI1NyI+Ik9icmnFoWl0ZSBwb2RyYXp1bWV2YW5vIHBvZGXFoWF2YW5qZSB1IG1lbmlqdSBQb2RlxaFhdmFuamEgc2lzdGVtYSAmZ3Q7IEFwbGlrYWNpamUgJmd0OyBQcmV1emV0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VBY3Rpdml0eSIgbXNnaWQ9Ijc0ODY4NzYxNDc3NTE4MDMzMzMiPiJJemFiZXJpdGUgcmFkbmp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlVXNiQWN0aXZpdHkiIG1zZ2lkPSI2ODk0NzQ4NDE2MDczNTgzNTA5Ij4iSXpib3IgYXBsaWthY2lqZSB6YSBVU0IgdXJlxJFhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vQXBwbGljYXRpb25zIiBtc2dpZD0iMjk5MTgxNDI3MzkzNjUwNDY4OSI+Ik5pamVkbmEgYXBsaWthY2lqYSBuZSBtb8W+ZSBkYSBvYmF2bGphIG92dSByYWRuanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl90aXRsZSIgbXNnaWQ9IjE5MDU4MDA1NjAzMTcxMzc3NTIiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9hcHBsaWNhdGlvbiIgbXNnaWQ9IjkzMjYyODQ4ODAxMzA5Mjc3NiI+Ik5hxb5hbG9zdCwgYXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGplIHByZXN0YWxhIHMgcmFkb20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzIiBtc2dpZD0iNDUwNzA1ODk5NzAzNTY5NzU3OSI+Ik5hxb5hbG9zdCwgcHJvY2VzIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBqZSB6YXVzdGF2bGplbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZXJyX3Byb2Nlc3Nfc2lsZW5jZSIgbXNnaWQ9IjQyMjY2ODU1MzAxOTYwMDAyMjIiPiJOZcSNdWpuYSBvdGtheml2YW5qYSBvZCBwcm9jZXNhIDx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPiBkbyByZXN0YXJ0b3ZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl90aXRsZSIgbXNnaWQ9IjQzNTE5NDg0ODE0NTkxMzU3MDkiPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X2FwcGxpY2F0aW9uIiBtc2dpZD0iMTkwNDQ3NzE4OTA1NzE5OTA2NiI+Ijx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4gbmUgcmVhZ3VqZS5cblxuRGEgbGkgxb5lbGl0ZSBkYSBqZSB6YXR2b3JpdGU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FjdGl2aXR5X3Byb2Nlc3MiIG1zZ2lkPSI1Nzc2MjA5ODgzMjk5MDg5NzY3Ij4iQWt0aXZub3N0IDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4gbmUgcmVhZ3VqZS5cblxuRGEgbGkgxb5lbGl0ZSBkYSBqZSB6YXR2b3JpdGU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5yX2FwcGxpY2F0aW9uX3Byb2Nlc3MiIG1zZ2lkPSI4OTQxNzU3NjA3MzQwNDgxMDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBuZSByZWFndWplLiBEYSBsaSDFvmVsaXRlIGRhIGplIHphdHZvcml0ZT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfcHJvY2VzcyIgbXNnaWQ9IjY1MTMyMDk4NzQ4ODA1MTcxMjUiPiJQcm9jZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IG5lIHJhZWd1amUuXG5cbkRhIGxpIMW+ZWxpdGUgZGEgZ2EgemF0dm9yaXRlPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+IlBvdHZyZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXBvcnQiIG1zZ2lkPSI0MDYwMjE4MjYwOTg0Nzk1NzA2Ij4iUHJpamF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhaXQiIG1zZ2lkPSI3MTQ3MTE4MjE3MjI2MzE3NzMyIj4iU2HEjWVrYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3ZWJwYWdlX3VucmVzcG9uc2l2ZSIgbXNnaWQ9IjMyNzI3NTgzNTExMzgxMjI1MDMiPiJTdHJhbmljYSBqZSBwcmVzdGFsYSBkYSBzZSBvZGF6aXZhLlxuXG4gRGEgbGkgxb5lbGl0ZSBkYSBqZSB6YXR2b3JpdGU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIxNTQ3OTk3NzgwNTA2NzEzNTgxIj4iQXBsaWthY2lqYSBqZSBwcmV1c21lcmVuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX3JlcGxhY2UiIG1zZ2lkPSI2MjAyNDk4OTQ5OTcwMjgxNDEyIj4iQXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGplIHNhZGEgcG9rcmVudXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iUHJ2b2JpdG5vIGplIHBva3JlbnV0YSBhcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+IlJhem1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiJVdmVrIHByaWthenVqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX2hpbnQiIG1zZ2lkPSIxMDY0NTI0MDg0NTQzMzA0NDU5Ij4iUG9ub3ZvIG9tb2d1xIdpdGUgdSBtZW5panUgU2lzdGVtc2thIHBvZGXFoWF2YW5qYSAmZ3Q7IEFwbGlrYWNpamUgJmd0OyBQcmV1emV0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4iQXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IChwcm9jZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUyJHM8L3hsaWZmOmc+KSBqZSBwcmVrcsWhaWxhIHNhbW9uYW1ldG51dGUgU3RyaWN0TW9kZSBzbWVybmljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiJQcm9jZXMgPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+IGplIHByZWtyxaFpbyBzYW1vbmFtZXRudXRlIFN0cmljdE1vZGUgc21lcm5pY2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfdGl0bGUiIG1zZ2lkPSIxNTg0MTkyMjg1NDQxNDA1NzQ2Ij4iQW5kcm9pZCBzZSBuYWRvZ3JhxJF1amXigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N0YXJ0X3RpdGxlIiBtc2dpZD0iODQxODA1NDY4NjQxNTMxODIwNyI+IkFuZHJvaWQgc2UgcG9rcmXEh2XigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19mc3RyaW0iIG1zZ2lkPSI4MDM2NzE4ODcxNTM0NjQwMDEwIj4iTWVtb3JpamEgc2Ugb3B0aW1penVqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ19hcGsiIG1zZ2lkPSI3OTA0MDQyNjgyMTExNTI2MTY5Ij4iT3B0aW1pem92YW5qZSBhcGxpa2FjaWplIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gb2QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3ByZXBhcmluZ19hcGsiIG1zZ2lkPSI4MTYyNTk5MzEwMjc0MDc5MTU0Ij4iUHJpcHJlbWEgc2UgPHhsaWZmOmcgaWQ9IkFQUE5BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3N0YXJ0aW5nX2FwcHMiIG1zZ2lkPSI0NTE0NjQ1MTYzNDY5MjY3MTMiPiJQb2tyZXRhbmplIGFwbGlrYWNpamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF91cGdyYWRpbmdfY29tcGxldGUiIG1zZ2lkPSIxNDA1OTU0NzU0MTEyOTk5MjI5Ij4iWmF2csWhYXZhbmplIHBva3JldGFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X25vdGlmaWNhdGlvbiIgbXNnaWQ9IjkwODcwNjM5ODU3NzY2MjYxNjYiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiUxJHM8L3hsaWZmOmc+IGplIHBva3JlbnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb25fZGV0YWlsIiBtc2dpZD0iMTcyMTY4MTc0MTYxNzg5ODg2NSI+IkRvZGlybml0ZSBkYSBiaXN0ZSBwcmXFoWxpIG5hIGFwbGlrYWNpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGl0bGUiIG1zZ2lkPSI3MTUzMTY3MDg1NDAzMjk4MTY5Ij4ixb1lbGl0ZSBsaSBkYSBwcmXEkWV0ZSBuYSBkcnVndSBhcGxpa2FjaWp1PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9zd2l0Y2hlcl90ZXh0IiBtc2dpZD0iNzAyMjYzMTkyNDUzNDQwNjQwMyI+IlZlxIcgamUgcG9rcmVudXRhIGRydWdhIGFwbGlrYWNpamEga29qYSBtb3JhIGRhIGJ1ZGUgemF1c3RhdmxqZW5hIGRhIGJpc3RlIG1vZ2xpIGRhIHBva3JlbmV0ZSBub3Z1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfYWN0aW9uIiBtc2dpZD0iNDkzMTI5MTcyMjM4NTY2MjgyIj4iVnJhdGkgc2UgdSA8eGxpZmY6ZyBpZD0iT0xEX0FQUCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjA4MjA5NDI3NTU4MDM1ODA0OSI+Ik5lIHBva3JlxIdpdGUgbm92dSBhcGxpa2FjaWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+IlBva3JlbmkgPHhsaWZmOmcgaWQ9Ik9MRF9BUFAiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmV3X2FwcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5MzIxNDM1OTgzNzE1MzczNDAiPiJaYXVzdGF2bGphIHN0YXJ1IGFwbGlrYWNpanUgYmV6IMSNdXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1bXBfaGVhcF9ub3RpZmljYXRpb24iIG1zZ2lkPSIyNjE4MTgzMjc0ODM2MDU2NTQyIj4iPHhsaWZmOmcgaWQ9IlBST0MiPiUxJHM8L3hsaWZmOmc+IHByZW1hxaF1amUgb2dyYW5pxI1lbmplIG1lbW9yaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVtcF9oZWFwX25vdGlmaWNhdGlvbl9kZXRhaWwiIG1zZ2lkPSIyMDc1NjczMzYyMzE3NDgxNjY0Ij4iU25pbWFrIGRpbmFtacSNa29nIGRlbGEgbWVtb3JpamUgamUgbmFwcmF2bGplbjsgZG9kaXJuaXRlIHphIGRlbGplbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHVtcF9oZWFwX3RpdGxlIiBtc2dpZD0iNTg2NDI5MjI2NDMwNzY1MTY3MyI+IsW9ZWxpdGUgbGkgZGEgZGVsaXRlIHNuaW1hayBkaW5hbWnEjWtvZyBkZWxhIG1lbW9yaWplPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1bXBfaGVhcF90ZXh0IiBtc2dpZD0iNDgwOTQxNzMzNzI0MDMzNDk0MSI+IlByb2NlcyA8eGxpZmY6ZyBpZD0iUFJPQyI+JTEkczwveGxpZmY6Zz4gamUgcHJlbWHFoWlvIG9ncmFuacSNZW5qZSBtZW1vcmlqZSB6YSBwcm9jZXMgb2QgPHhsaWZmOmcgaWQ9IlNJWkUiPiUyJHM8L3hsaWZmOmc+LiBTbmltYWsgZGluYW1pxI1rb2cgZGVsYSBtZW1vcmlqZSBqZSBkb3N0dXBhbiBpIG1vxb5ldGUgZGEgZ2EgZGVsaXRlIHNhIHByb2dyYW1lcm9tLiBCdWRpdGUgb3ByZXpuaTogb3ZhaiBzbmltYWsgZGluYW1pxI1rb2cgZGVsYSBtZW1vcmlqZSBtb8W+ZSBkYSBzYWRyxb5pIG5la2UgbGnEjW5lIHBvZGF0a2Uga29qaW1hIGFwbGlrYWNpamEgbW/FvmUgZGEgcHJpc3R1cGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VuZFRleHQiIG1zZ2lkPSI1MjA5ODc0NTcxOTU5NDY5MTQyIj4iSXphYmVyaXRlIHJhZG5qdSB6YSB0ZWtzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJKYcSNaW5hIHp2dWthIHp2b25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljIiBtc2dpZD0iNTQyMTY1MTE1NzEzODYyODE3MSI+IkphxI1pbmEgenZ1a2EgbWVkaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiJJZ3JhbmplIHByZWtvIEJsdWV0b290aC1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+IlBvZGXFoWVuIGplIG5lxI11am5pIHp2dWsgenZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJKYcSNaW5hIHp2dWthIGRvbGF6bm9nIHBveml2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9ibHVldG9vdGhfY2FsbCIgbXNnaWQ9IjIwMDI4OTE5MjYzNTExNTE1MzQiPiJKYcSNaW5hIHp2dWthIGRvbGF6ZcSHZWcgcG96aXZhIHByZWtvIEJsdWV0b290aC1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2FsYXJtIiBtc2dpZD0iMTk4NTE5MTYxNjA0MjY4OTEwMCI+IkphxI1pbmEgenZ1a2EgYWxhcm1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJKYcSNaW5hIHp2dWthIHphIG9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV91bmtub3duIiBtc2dpZD0iMTQwMDIxOTY2OTc3MDQ0NTkwMiI+IkphxI1pbmEgenZ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9ibHVldG9vdGgiIG1zZ2lkPSI2NTM4ODk0MTc3MjU1OTY0MzQwIj4iSmHEjWluYSB6dnVrYSBCbHVldG9vdGggdXJlxJFhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfaWNvbl9kZXNjcmlwdGlvbl9yaW5nZXIiIG1zZ2lkPSIzMzI2MDAzODQ3MDA2MTYyNDk2Ij4iSmHEjWluYSBtZWxvZGlqZSB6dm9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX2luY2FsbCIgbXNnaWQ9Ijg4OTAwNzMyMTgxNTQ1NDMzOTciPiJKYcSNaW5hIHp2dWthIHBveml2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9pY29uX2Rlc2NyaXB0aW9uX21lZGlhIiBtc2dpZD0iNDIxNzMxMTcxOTY2NTE5NDIxNSI+IkphxI1pbmEgenZ1a2EgbWVkaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2ljb25fZGVzY3JpcHRpb25fbm90aWZpY2F0aW9uIiBtc2dpZD0iNzA0NDk4NjU0NjQ3NzI4MjI3NCI+IkphxI1pbmEgenZ1a2Egb2JhdmXFoXRlbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfZGVmYXVsdCIgbXNnaWQ9IjM3ODk3NTg5ODAzNTc2OTY5MzYiPiJQb2RyYXp1bWV2YW5pIHp2dWsgenZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyaW5ndG9uZV9kZWZhdWx0X3dpdGhfYWN0dWFsIiBtc2dpZD0iODEyOTU2MzQ4MDg5NTk5MDM3MiI+IlBvZHJhenVtZXZhbmkgenZ1ayB6dm9uYSAoPHhsaWZmOmcgaWQ9IkFDVFVBTF9SSU5HVE9ORSI+JTEkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfc2lsZW50IiBtc2dpZD0iNzkzNzYzNDM5MjQwODk3NzA2MiI+IkJleiB6dnVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJpbmd0b25lX3BpY2tlcl90aXRsZSIgbXNnaWQ9IjM1MTUxNDM5MzkxNzUxMTkwOTQiPiJadnVrb3ZpIHp2b25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmluZ3RvbmVfdW5rbm93biIgbXNnaWQ9IjU0Nzc5MTk5ODg3MDE3ODQ3ODgiPiJOZXBvem5hdGkgenZ1ayB6dm9uYSI8L3N0cmluZz4KKyAgICA8cGx1cmFscyBuYW1lPSJ3aWZpX2F2YWlsYWJsZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9Ijc5MDAzMzMwMTc3NTIwMjczMjIiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+V2ktRmkgbXJlxb5lIHN1IGRvc3R1cG5lPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+V2ktRmkgbXJlxb5lIHN1IGRvc3R1cG5lPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5XaS1GaSBtcmXFvmUgc3UgZG9zdHVwbmU8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxwbHVyYWxzIG5hbWU9IndpZmlfYXZhaWxhYmxlX2RldGFpbGVkIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iMTE0MDY5OTM2NzE5Mzk3NTYwNiI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5PdHZvcmVuZSBXaS1GaSBtcmXFvmUgc3UgZG9zdHVwbmU8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5PdHZvcmVuZSBXaS1GaSBtcmXFvmUgc3UgZG9zdHVwbmU8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk90dm9yZW5lIFdpLUZpIG1yZcW+ZSBzdSBkb3N0dXBuZTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2F2YWlsYWJsZV9zaWduX2luIiBtc2dpZD0iOTE1NzE5NjIwMzk1ODg2NjY2MiI+IlByaWphdmxqaXZhbmplIG5hIFdpLUZpIG1yZcW+dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5ldHdvcmtfYXZhaWxhYmxlX3NpZ25faW4iIG1zZ2lkPSIxODQ4ODc3Mjk3MzY1NDQ2NjA1Ij4iUHJpamF2aXRlIHNlIG5hIG1yZcW+dSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBuZXR3b3JrX2F2YWlsYWJsZV9zaWduX2luX2RldGFpbGVkICg4MDAwMDgxOTQxNDQ3OTc2MTE4KSAtLT4KKyAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9ub19pbnRlcm5ldCIgbXNnaWQ9Ijg0NTExNzM2MjI1NjM4NDE1NDYiPiJXaS1GaSBuZW1hIHByaXN0dXAgaW50ZXJuZXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9ub19pbnRlcm5ldF9kZXRhaWxlZCIgbXNnaWQ9Ijc1OTM4NTg4ODc2NjIyNzAxMzEiPiJEb2Rpcm5pdGUgemEgb3BjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkIiBtc2dpZD0iNzkwNDIxNDIzMTY1MTU0NjM0NyI+Ik5pamUgbW9ndcSHZSBwb3ZlemF0aSBzYSBXaS1GaSBtcmXFvm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV93YXRjaGRvZ19uZXR3b3JrX2Rpc2FibGVkX2RldGFpbGVkIiBtc2dpZD0iNTU0ODc4MDc3NjQxODMzMjY3NSI+IiBpbWEgbG/FoXUgaW50ZXJuZXQgdmV6dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Nvbm5lY3RfYWxlcnRfdGl0bGUiIG1zZ2lkPSI4NDU1ODQ2MDE2MDAxODEwMTcyIj4ixb1lbGl0ZSBsaSBkYSBkb3p2b2xpdGUgcG92ZXppdmFuamU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9jb25uZWN0X2FsZXJ0X21lc3NhZ2UiIG1zZ2lkPSI2NDUxMjczMzc2ODE1OTU4OTIyIj4iQXBsaWthY2lqYSAlMSRzIMW+ZWxpIGRhIHNlIHBvdmXFvmUgbmEgV2ktRmkgbXJlxb51ICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Nvbm5lY3RfZGVmYXVsdF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjcxNDMxMDkzOTA0NzU0ODQzMTkiPiJBcGxpa2FjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZGlhbG9nX3RpdGxlIiBtc2dpZD0iOTc2MTE3ODI2NTkzMjQ1MTciPiJXaS1GaSBEaXJlY3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF90dXJub25fbWVzc2FnZSIgbXNnaWQ9IjI5MDkyNTA5NDIyOTk2MjcyNDQiPiJQb2tyZW5pdGUgV2ktRmkgRGlyZWN0LiBUaW1lIMSHZXRlIGlza2xqdcSNaXRpIGtsaWplbnRhL2hvdHNwb3QgemEgV2ktRmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZmFpbGVkX21lc3NhZ2UiIG1zZ2lkPSIzNzYzNjY5Njc3OTM1NjIzMDg0Ij4iTmlqZSBtb2d1xIdlIHBva3JlbnV0aSBXaS1GaSBEaXJlY3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW5hYmxlZF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMDY4MzIxODgxNjczNzM0ODg2Ij4iV2ktRmkgRGlyZWN0IGplIHVrbGp1xI1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2VuYWJsZWRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSIxNjM4OTQ5OTUzOTkzODk0MzM1Ij4iRG9kaXJuaXRlIHphIHBvZGXFoWF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2VwdCIgbXNnaWQ9IjE2NDUyNjcyNTkyNzI4Mjk1NTkiPiJQcmlodmF0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlY2xpbmUiIG1zZ2lkPSIyMTEyMjI1NDUxNzA2MTM3ODk0Ij4iT2RiaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3NlbnRfdGl0bGUiIG1zZ2lkPSIxMzE4OTc1MTg1MTEyMDcwNzM0Ij4iUG96aXZuaWNhIGplIHBvc2xhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3AycF9pbnZpdGF0aW9uX3RvX2Nvbm5lY3RfdGl0bGUiIG1zZ2lkPSI0OTU4ODAzOTQ4NjU4NTMzNjM3Ij4iUG96aXZuaWNhIHphIHBvdmV6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJvbV9tZXNzYWdlIiBtc2dpZD0iNTcwMzg5MTc0NzMxOTUxNzY5Ij4iT2Q6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfdG9fbWVzc2FnZSIgbXNnaWQ9IjI0ODk2ODk3NDUyMjA0NDA5OSI+IktvbWU6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZW50ZXJfcGluX21lc3NhZ2UiIG1zZ2lkPSI1OTIwOTI5NTUwMzY3ODI4OTcwIj4iVW5lc2l0ZSBwb3RyZWJuaSBQSU46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfc2hvd19waW5fbWVzc2FnZSIgbXNnaWQ9Ijg1MzA1NjMzMjM4ODA5MjEwOTQiPiJQSU46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjgwMTI5ODEyNTc3NDIyMzI0NzUiPiJUYWJsZXQgxIdlIHByaXZyZW1lbm8gcHJla2ludXRpIHZlenUgc2EgV2ktRmktamVtIGRvayBqZSBwb3ZlemFuIHNhIHVyZcSRYWplbSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9InR2IiBtc2dpZD0iMzA4Nzg1ODIzNTA2OTQyMTEyOCI+IlRWIMSHZSBwcml2cmVtZW5vIHByZWtpbnV0aSB2ZXp1IHNhIFdpLUZpLWplbSBkb2sgamUgcG92ZXphbiBuYSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4iVGVsZWZvbiDEh2UgcHJpdnJlbWVubyBwcmVraW51dGkgdmV6dSBzYSBXaS1GaS1qZW0gZG9rIGplIHBvdmV6YW4gc2EgdXJlxJFhamVtIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfY2hhcmFjdGVyIiBtc2dpZD0iMzM2NTU1MDEyMDYxNzcwMTc0NSI+IlVtZXRhbmplIHpuYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iU2xhbmplIFNNUyBwb3J1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IMWhYWxqZSB2ZWxpa2kgYnJvaiBTTVMgcG9ydWthLiDFvWVsaXRlIGxpIGRhIGRvenZvbGl0ZSBvdm9qIGFwbGlrYWNpamkgZGEgbmFzdGF2aSBzYSBzbGFuamVtIHBvcnVrYT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF95ZXMiIG1zZ2lkPSIzNjYzNzI1OTkzODU1ODE2ODA3Ij4iRG96dm9saSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iT2RiaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgxb5lbGkgZGEgcG/FoWFsamUgcG9ydWt1IG5hIGFkcmVzdSAmbHQ7YiZndDs8eGxpZmY6ZyBpZD0iREVTVF9BRERSRVNTIj4lMiRzPC94bGlmZjpnPiZsdDsvYiZndDsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfZGV0YWlscyIgbXNnaWQ9IjU4NzMyOTU5OTA4NDYwNTk0MDAiPiJPdm8gIjxiPiJtb8W+ZSBkYSBwcm91enJva3VqZSB0cm/FoWtvdmUiPC9iPiIgbmEgcmHEjXVudSB6YSBtb2JpbG5pIHVyZcSRYWouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNzg2OTIzNDg2ODAyMzk3NSI+PGI+Ik92byDEh2UgcHJvdXpyb2tvdmF0aSB0cm/FoWtvdmUgbmEgcmHEjXVudSB6YSBtb2JpbG5pIHVyZcSRYWouIjwvYj48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWxsb3ciIG1zZ2lkPSI0NDU4ODc4NjM3MTExMDIzNDEzIj4iUG/FoWFsamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2RlbnkiIG1zZ2lkPSIyOTI3Mzg5ODQwMjA5MTcwNzA2Ij4iT3RrYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX2Nob2ljZSIgbXNnaWQ9IjUyODk1Mzg1OTIyNzIyMTgxMzYiPiJaYXBhbXRpIG1vaiBpemJvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX3JlbWVtYmVyX3VuZG9faW5zdHJ1Y3Rpb24iIG1zZ2lkPSI0OTYwOTQ0MTMzMDUyMjg3NDg0Ij4iT3ZvIG1vxb5ldGUgZGEgcHJvbWVuaXRlIGthc25pamUgdSBQb2RlxaFhdmFuamHCoCZndDvCoEFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX2Fsd2F5c19hbGxvdyIgbXNnaWQ9IjMyNDExODExNTQ4Njk0OTMzNjgiPiJVdmVrIGRvenZvbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX25ldmVyX2FsbG93IiBtc2dpZD0iNDQ2OTkyNzY1Nzc0MjY5NjczIj4iTmlrYWRhIG5lIGRvenZvbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF90aXRsZSIgbXNnaWQ9IjYyMjc3MTIzMTkyMjMyMjYxODUiPiJTSU0ga2FydGljYSBqZSB1a2xvbmplbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fcmVtb3ZlZF9tZXNzYWdlIiBtc2dpZD0iNTQ1MDMzNjQ4OTkyMzI3NDkxOCI+Ik1vYmlsbmEgbXJlxb5hIG5lxIdlIGJpdGkgZG9zdHVwbmEgZG9rIG5lIHBva3JlbmV0ZSB1cmXEkWFqIHBvbm92byB1eiB1bWV0YW5qZSB2YcW+ZcSHZSBTSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fZG9uZV9idXR0b24iIG1zZ2lkPSI4Mjc5NDk5ODkzNjk5NjM3NzUiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW1fYWRkZWRfdGl0bGUiIG1zZ2lkPSIzNzE5NjcwNTEyODg5Njc0NjkzIj4iU0lNIGthcnRpY2EgamUgZG9kYXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2ltX2FkZGVkX21lc3NhZ2UiIG1zZ2lkPSI3Nzk3OTc1NjU2MTUzNzE0MzE5Ij4iUG9ub3ZvIHBva3Jlbml0ZSB1cmXEkWFqIGRhIGJpc3RlIHByaXN0dXBpbGkgbW9iaWxub2ogbXJlxb5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNpbV9yZXN0YXJ0X2J1dHRvbiIgbXNnaWQ9IjQ3MjI0MDc4NDI4MTUyMzIzNDciPiJQb25vdm8gcG9rcmVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjgzNDkzNjI2MjMwNjg4MTkyOTUiPiJQb2RlxaFhdmFuamUgdnJlbWVuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjU4Nzk0NTA2NTk0NTM3ODIyNzgiPiJQb2RlxaFhdmFuamUgZGF0dW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV90aW1lX3NldCIgbXNnaWQ9IjU3NzcwNzU2MTQzMjEwODc3NTgiPiJQb2Rlc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3RpbWVfZG9uZSIgbXNnaWQ9IjI1MDc2ODM3NTE3NTkzMDg4MjgiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtc19uZXdfcGVybV9wcmVmaXgiIG1zZ2lkPSI4MjU3NzQwNzEwNzU0MzAxNDA3Ij48Zm9udCBzaXplPSIxMiIgZmdjb2xvcj0iI2ZmMzNiNWU1Ij4iTk9WTzogIjwvZm9udD48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1zX2Rlc2NyaXB0aW9uX2FwcCIgbXNnaWQ9IjUxMzk4MzYxNDMyOTMyOTk0MTciPiJPbW9ndcSHYXZhIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm9fcGVybWlzc2lvbnMiIG1zZ2lkPSI3MjgzMzU3NzI4MjE5MzM4MTEyIj4iTmlqZSBwb3RyZWJuYSBuaWplZG5hIGRvenZvbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtX2Nvc3RzX21vbmV5IiBtc2dpZD0iNDkwMjQ3MDMyNDE0MjE1MTExNiI+Im92byDEh2UgdmFtIG1vxb5kYSBiaXRpIG5hcGxhxIdlbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkbGdfb2siIG1zZ2lkPSI3Mzc2OTUzMTY3MDM5ODY1NzAxIj4iUG90dnJkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9jaGFyZ2luZ19ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0MDA0MTE0NDQ5MjQ5NDA2NDAyIj4iVVNCIHphIHB1bmplbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX210cF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI4Mzk2MjY0OTQzNTg5NzYwODU1Ij4iVVNCIHphIHByZW5vcyBkYXRvdGVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9wdHBfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTM0NzMyODQzNzA4MzE5MjExMiI+IlVTQiB6YSBwcmVub3Mgc2xpa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfbWlkaV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0ODUwOTA0OTE1ODg5MTQ0NjU0Ij4iVVNCIHphIE1JREkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9Ijc4NDgyMzY5NzQwODc2NTM2NjYiPiJQb3ZlemFubyBzYSBVU0IgZG9kYXRrb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2Jfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI3MzQ3MzY4MDMwODQ5MDQ4NDM3Ij4iRG9kaXJuaXRlIHphIGpvxaEgb3BjaWphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl9hY3RpdmVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNjcyOTA0NDc3ODk0OTE4OTkxOCI+Ik90a2xhbmphbmplIGdyZcWhYWthIHNhIFVTQi1hIGplIHVzcG9zdGF2bGplbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfYWN0aXZlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTAxNjY1NDYyNzYyNjQ3NjE0MiI+IkRvZGlybml0ZSBkYSBiaXN0ZSBvbmVtb2d1xIdpbGkgb3RrbGFuamFuamUgZ3JlxaFha2Egc2EgVVNCLWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2lucHV0X21ldGhvZCIgbXNnaWQ9Ijg1NDcyNTA4MTkzMjY2OTM1ODQiPiJQcm9tZW5pdGUgdGFzdGF0dXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlndXJlX2lucHV0X21ldGhvZHMiIG1zZ2lkPSI0NzY5OTcxMjg4MzcxOTQ2ODQ2Ij4iSXphYmVyaXRlIHRhc3RhdHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfaW1lIiBtc2dpZD0iOTE1NzU2ODU2ODY5NTIzMDgzMCI+IlByaWtheml2YW5qZSBtZXRvZGEgdW5vc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoYXJkd2FyZSIgbXNnaWQ9Ijc1MTc4MjEwODY4ODg5OTAyNzgiPiJIYXJkdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2tleWJvYXJkX2xheW91dF9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIxNDA3MzY3MDE3MjYzMDMwNzczIj4iSXpib3IgcmFzcG9yZWRhIHRhc3RhdHVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9rZXlib2FyZF9sYXlvdXRfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NDY1OTA3NzAwNDQ5MjU3MDYzIj4iRG9kaXJuaXRlIGRhIGJpc3RlIGl6YWJyYWxpIHJhc3BvcmVkIHRhc3RhdHVyZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9hbHBoYWJldCIgbXNnaWQ9IjU0MzMyNzU0ODU0OTkwMzkxOTkiPiIgQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmYXN0X3Njcm9sbF9udW1lcmljX2FscGhhYmV0IiBtc2dpZD0iNDAzMDE3MDUyNDU5NTEyMzYxMCI+IiAwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW5kaWRhdGVzX3N0eWxlIiBtc2dpZD0iNDMzMzkxMzA4OTYzNzA2MjI1NyI+PHU+ImthbmRpZGF0aSI8L3U+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNTczNDAwNTk1MzI4ODA0NTgwNiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gc2UgcHJpcHJlbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfY2hlY2tpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0NzQ3NDMyNTM4NTc4ODg2NzQ0Ij4iUHJvdmVyYXZhIHNlIGRhIGxpIHBvc3RvamUgZ3JlxaFrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9uZXdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI3NTg5OTg2ODk4ODA4NTA2MjM5Ij4iTm92aSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gamUgb3Rrcml2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfcmVhZHlfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0MDgzMzk4MTUwMzgwMTE0NDYyIj4iWmEgcHJlbm9zIHNsaWthIGkgbWVkaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjgyOTUxMjMzNjYyMzY5ODk1ODgiPiJVcmXEkWFqIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gamUgb8WhdGXEh2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iMTU4NjMxMTMwNDQzMDA1MjE2OSI+IlVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiBqZSBvxaF0ZcSHZW4uIERvZGlybml0ZSBkYSBiaXN0ZSBnYSBwb3ByYXZpbGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3Vuc3VwcG9ydGVkX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjM3OTc2NDIzMjI5NTg4MDMyNTciPiJVcmXEkWFqIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gbmlqZSBwb2Ryxb5hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bnN1cHBvcnRlZF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9Ijg3ODk2MTAzNjk0NTY0NzQ4OTEiPiJPdmFqIHVyZcSRYWogbmUgcG9kcsW+YXZhIHVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPi4gRG9kaXJuaXRlIGRhIGJpc3RlIHBvZGVzaWxpIHBvZHLFvmFuaSBmb3JtYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2JhZHJlbW92YWxfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzIwNjI0ODk0NzM3NTUwNTQxNiI+IlVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiBqZSBuZW/EjWVraXZhbm8gdWtsb25qZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfYmFkcmVtb3ZhbF9ub3RpZmljYXRpb25fbWVzc2FnZSIgbXNnaWQ9IjM4MDE3NjcwMzM0Njk0NjMxMyI+Iklza2xqdcSNaXRlIHVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiBwcmUgdWtsYW5qYW5qYSBkYSBuZSBiaXN0ZSBpemd1YmlsaSBwb2RhdGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX25vbWVkaWFfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTcwNDg0MDE4ODY0MTc0OTA5MSI+IlVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiBqZSB1a2xvbmplbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9ub21lZGlhX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjQ3MTU0Mjk3MjE0NzA1NjU4NiI+IlVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiBqZSB1a2xvbmplbjsgdW1ldG5pdGUgbm92aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV91bm1vdW50aW5nX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY0MDY3NDE2ODQ1NDgwOTM3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gc2Ugam/FoSB1dmVrIGl6YmFjdWpl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3VubW91bnRpbmdfbm90aWZpY2F0aW9uX21lc3NhZ2UiIG1zZ2lkPSI0MTgyODQzODk1MDIzMzU3NzU2Ij4iTmUgdWtsYW5qYWp0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9pbml0X2FjdGlvbiIgbXNnaWQ9Ijc5NTI4ODU1MTAwOTE5NzgyNzgiPiJQb2Rlc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfdW5tb3VudF9hY3Rpb24iIG1zZ2lkPSIxMTIxODgzMjMzMTAzMjc4MTk5Ij4iSXpiYWNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX2Jyb3dzZV9hY3Rpb24iIG1zZ2lkPSI4MzIyMTcyMzgxMDI4NTQ2MDg3Ij4iSXN0cmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbWlzc2luZ190aXRsZSIgbXNnaWQ9IjYyMDk4MDMxNTgyMTU0MzkwNCI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gbmVkb3N0YWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX21pc3NpbmdfbWVzc2FnZSIgbXNnaWQ9IjU3NjExMzM1ODMzNjg3NTAxNzQiPiJVbWV0bml0ZSB1cmXEkWFqIHBvbm92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9tb3ZlX3NwZWNpZmljX3RpdGxlIiBtc2dpZD0iMTQ3MTEwMDM0Mzg3MjM3NTg0MiI+IlByZW5vc2kgc2UgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9tb3ZlX3RpdGxlIiBtc2dpZD0iMTAyMjgwOTE0MDAzNTk2MjY2MiI+IlBvZGFjaSBzZSBwcmVub3NlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX21vdmVfc3VjY2Vzc190aXRsZSIgbXNnaWQ9Ijg1NzUzMDA5MzI5NTc5NTQ2NzEiPiJQcmVub3MgamUgemF2csWhZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbW92ZV9zdWNjZXNzX21lc3NhZ2UiIG1zZ2lkPSI0MTk5MDAyMTQ4MjA2MjY1NDI2Ij4iUG9kYWNpIHN1IHByZW5lc2VuaSBuYSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfbW92ZV9mYWlsdXJlX3RpdGxlIiBtc2dpZD0iNzYxMzE4OTA0MDM1ODc4OTkwOCI+IlByZW5vcyBwb2RhdGFrYSBuaWplIHVzcGVvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX21vdmVfZmFpbHVyZV9tZXNzYWdlIiBtc2dpZD0iMTk3ODA5NjQ0MDgxNjQwMzM2MCI+IlBvZGFjaSBzdSBvc3RhbGkgbmEgb3JpZ2luYWxub2ogbG9rYWNpamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc3RhdHVzX3JlbW92ZWQiIG1zZ2lkPSI2NTc2MTcyNDIzMTg1OTE4NzM5Ij4iVWtsb25qZW4gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc3RhdHVzX3VubW91bnRlZCIgbXNnaWQ9IjI1NTE1NjA4Nzg0MTY0MTc3NTIiPiJJemJhxI1lbiBqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zdGF0dXNfY2hlY2tpbmciIG1zZ2lkPSI2MTkzOTIxNTU3NDIzMTk0OTQ5Ij4iUHJvdmVyYXZhIHNlLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3N0YXR1c19tb3VudGVkIiBtc2dpZD0iNzI1MzgyMTcyNjUwMzE3OTIwMiI+IlNwcmVtYW4gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc3RhdHVzX21vdW50ZWRfcm8iIG1zZ2lkPSI4MDIwOTc4NzUyNDA2MDIxMDE1Ij4iU2FtbyB6YSDEjWl0YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zdGF0dXNfYmFkX3JlbW92YWwiIG1zZ2lkPSI4Mzk1Mzk4NTY3ODkwMzI5NDIyIj4iVWtsb25qZW4gamUgbmEgbmViZXpiZWRhbiBuYcSNaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc3RhdHVzX3VubW91bnRhYmxlIiBtc2dpZD0iODA1NTk0MDM5MjM2NjY3ODk0Ij4iT8WhdGXEh2VuIGplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3N0YXR1c191bnN1cHBvcnRlZCIgbXNnaWQ9IjQ2OTE0MzY3MTE3NDU2ODE4MjgiPiJOaWplIHBvZHLFvmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0X21lZGlhX3N0YXR1c19lamVjdGluZyIgbXNnaWQ9IjU0NjM4ODcyNjMxMDEyMzQxNzQiPiJJemJhY3VqZSBzZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4dF9tZWRpYV9zdGF0dXNfZm9ybWF0dGluZyIgbXNnaWQ9IjEwODUwNzk1NTY1Mzg2NDQ4NjEiPiJGb3JtYXRpcmEgc2UuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHRfbWVkaWFfc3RhdHVzX21pc3NpbmciIG1zZ2lkPSI1NjM4NjMzODk1MjIxNjcwNzY2Ij4iTmlqZSB1bWV0bnV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbGlzdF9lbXB0eSIgbXNnaWQ9IjE2NzUzODgzMzA3ODY4NDEwNjYiPiJOaWplIHByb25hxJFlbmEgbmlqZWRuYSBwb2R1ZGFybmEgYWt0aXZub3N0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcm91dGVfbWVkaWFfb3V0cHV0IiBtc2dpZD0iNjI0MzAyMjk4ODk5ODk3MjA4NSI+InVzbWVyYXZhbmplIGl6bGF6YSBtZWRpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yb3V0ZV9tZWRpYV9vdXRwdXQiIG1zZ2lkPSI0OTMyODE4NzQ5NTQ3MjQ0MzQ2Ij4iRG96dm9samF2YSBhcGxpa2FjaWppIGRhIHVzbWVyYXZhIGl6bGF6IG1lZGlqYSBuYSBkcnVnZSBzcG9sam5lIHVyZcSRYWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfcmVhZEluc3RhbGxTZXNzaW9ucyIgbXNnaWQ9IjM3MTM3NTMwNjc0NTU3NTAzNDkiPiLEjWl0YW5qZSBzZXNpamEgaW5zdGFsaXJhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVhZEluc3RhbGxTZXNzaW9ucyIgbXNnaWQ9IjIwNDk3NzE2OTk2MjYwMTk4NDkiPiJEb3p2b2xqYXZhIGFwbGlrYWNpamkgZGEgxI1pdGEgc2VzaWplIGluc3RhbGlyYW5qYS4gVG8gam9qIGRvenZvbGphdmEgZGEgdmlkaSBkZXRhbGplIG8gYWt0aXZuaW0gaW5zdGFsYWNpamFtYSBwYWtldGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9yZXF1ZXN0SW5zdGFsbFBhY2thZ2VzIiBtc2dpZD0iNTc4MjAxMzU3NjIxODE3MjU3NyI+InphaHRldmFuamUgcGFrZXRhIHphIGluc3RhbGlyYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3JlcXVlc3RJbnN0YWxsUGFja2FnZXMiIG1zZ2lkPSI1NzQwMTAxMDcyNDg2NzgzMDgyIj4iT21vZ3XEh2F2YSBkYSBhcGxpa2FjaWphIHphaHRldmEgaW5zdGFsYWNpanUgcGFrZXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1dG9yaWFsX2RvdWJsZV90YXBfdG9fem9vbV9tZXNzYWdlX3Nob3J0IiBtc2dpZD0iNDA3MDQzMzIwODE2MDA2MzUzOCI+IkRvZGlybml0ZSBkdmFwdXQgZGEgYmlzdGUga29udHJvbGlzYWxpIHp1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdhZGdldF9ob3N0X2Vycm9yX2luZmxhdGluZyIgbXNnaWQ9IjQ4ODIwMDQzMTQ5MDY0NjYxNjIiPiJOaWplIG1vZ3XEh2UgZG9kYXRpIHZpZMW+ZXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1lX2FjdGlvbl9nbyIgbXNnaWQ9IjgzMjA4NDU2NTE3MzczNjkwMjciPiJJZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3NlYXJjaCIgbXNnaWQ9IjY1ODExMDI3MTgyMjgwNzgxMSI+IlByZXRyYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fc2VuZCIgbXNnaWQ9IjIzMTYxNjY1NTYzNDkzMTQ0MjQiPiJQb8WhYWxqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fbmV4dCIgbXNnaWQ9IjMxMzg4NDM5MDQwMDk4MTM4MzQiPiJTbGVkZcSHZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZG9uZSIgbXNnaWQ9Ijg5NzE1MTYxMTc5MTA5MzQ2MDUiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbWVfYWN0aW9uX3ByZXZpb3VzIiBtc2dpZD0iMTQ0MzU1MDAzOTI1MDEwNTk0OCI+IlByZXRob2RubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltZV9hY3Rpb25fZGVmYXVsdCIgbXNnaWQ9IjI4NDA5MjE4ODU1NTgwNDU3MjEiPiJJenZyxaFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlhbF9udW1iZXJfdXNpbmciIG1zZ2lkPSI1Nzg5MTc2NDI1MTY3NTczNTg2Ij4iQmlyYWogYnJvalxua29yaXN0ZcSHaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfY29udGFjdF91c2luZyIgbXNnaWQ9IjQ5NDc0MDUyMjY3ODgxMDQ1MzgiPiJLcmVpcmFqdGUga29udGFrdFxua29yaXN0ZcSHaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfaGVhZGVyIiBtc2dpZD0iMjEwNjEwMzgxNzkzNzg1OTY2MiI+IlNsZWRlxIdlIGFwbGlrYWNpamUgemFodGV2YWp1IGRvenZvbHUgemEgcHJpc3R1cCBuYWxvZ3UsIGtha28gc2FkYSwgdGFrbyBpIHVidWR1xIdlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdyYW50X2NyZWRlbnRpYWxzX3Blcm1pc3Npb25fbWVzc2FnZV9mb290ZXIiIG1zZ2lkPSIzMTI1MjExMzQzMzc5Mzc2NTYxIj4ixb1lbGl0ZSBkYSBvZG9icml0ZSBvdmFqIHphaHRldj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9wZXJtaXNzaW9uc19oZWFkZXJfdGV4dCIgbXNnaWQ9IjY4NzQ0OTc0MDgyMDE4MjY3MDgiPiJaYWh0ZXYgemEgcHJpc3R1cCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93IiBtc2dpZD0iNzIyNTk0ODgxMTI5NjM4NjU1MSI+IkRvenZvbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55IiBtc2dpZD0iMjA4MTg3OTg4NTc1NTQzNDUwNiI+Ik9kYmlqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWlzc2lvbl9yZXF1ZXN0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjY0ODY3NTk3OTU5MjYyMzc5MDciPiJaYXRyYcW+ZW5hIGplIGRvenZvbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIG1zZ2lkPSI4NTMwMzkzMTM5NjM5NTYwMTg5Ij4iWmF0cmHFvmVuYSBqZSBkb3p2b2xhXG56YSBuYWxvZyA8eGxpZmY6ZyBpZD0iQUNDT1VOVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yd2FyZF9pbnRlbnRfdG9fb3duZXIiIG1zZ2lkPSIxMjA3MTk3NDQ3MDEzOTYwODk2Ij4iS29yaXN0aXRlIG92dSBhcGxpa2FjaWp1IGl6dmFuIHBvc2xvdm5vZyBwcm9maWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yd2FyZF9pbnRlbnRfdG9fd29yayIgbXNnaWQ9IjYyMTQ4MDc0Mzg1NjAwNDYxMiI+IktvcmlzdGl0ZSBvdnUgYXBsaWthY2lqdSBuYSBwb3Nsb3Zub20gcHJvZmlsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImlucHV0X21ldGhvZF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTI4MzU1NzE3OTk0NDk5MjY0OSI+Ik1ldG9kIHVub3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMzY4Nzk2OTEzODM3NTA5MjQyMyI+IlNpbmhyb25pemFjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iNDE0ODEyMDc0MjA5NjQ3NDY0MSI+IlByaXN0dXBhxI1ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FsbHBhcGVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMjQwMDg3ODQ0MzA0Njg3NjYyIj4iUG96YWRpbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJQcm9tZW5hIHBvemFkaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTW9uaXRvciBvYmF2ZcWhdGVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkRvYmF2bGphxI0gdXNsb3ZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUG9tb8SHbmlrIHphIG9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGplIGFrdGl2aXJhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IkFwbGlrYWNpamEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGplIGFrdGl2aXJhbGEgVlBOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iRG9kaXJuaXRlIGRhIGJpc3RlIHVwcmF2bGphbGkgbXJlxb5vbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dF9sb25nIiBtc2dpZD0iNjQwNzM1MTAwNjI0OTE3NDQ3MyI+IlBvdmV6YW5vIHNhIHNlc2lqb20gPHhsaWZmOmcgaWQ9IlNFU1NJT04iPiVzPC94bGlmZjpnPi4gRG9kaXJuaXRlIGRhIGJpc3RlIHVwcmF2bGphbGkgbXJlxb5vbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGluZyIgbXNnaWQ9IjY0NDM0Mzg5NjQ0NDA5NjA3NDUiPiJQb3Zleml2YW5qZSBzdGFsbm8gdWtsanXEjWVub2cgVlBOLWEuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fbG9ja2Rvd25fY29ubmVjdGVkIiBtc2dpZD0iODIwMjY3OTY3NDgxOTIxMzkzMSI+IlN0YWxubyB1a2xqdcSNZW5pIFZQTiBqZSBwb3ZlemFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2Vycm9yIiBtc2dpZD0iNjAwOTI0OTgxNDAzNDcwODE3NSI+IkdyZcWha2Egc3RhbG5vIHVrbGp1xI1lbm9nIFZQTi1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2xvY2tkb3duX2NvbmZpZyIgbXNnaWQ9IjY0MTU4OTkxNTA2NzE1Mzc5NzAiPiJEb2Rpcm5pdGUgZGEgYmlzdGUga29uZmlndXJpc2FsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVwbG9hZF9maWxlIiBtc2dpZD0iMjg5Nzk1NzE3MjM2NjczMDQxNiI+Ik9kYWJlcmkgZGF0b3Rla3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19maWxlX2Nob3NlbiIgbXNnaWQ9IjYzNjM2NDg1NjIxNzA3NTk0NjUiPiJOaWplIGl6YWJyYW5hIG5pamVkbmEgZGF0b3Rla2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXNldCIgbXNnaWQ9IjI0NDgxNjgwODA5NjQyMDk5MDgiPiJQb25vdm8gcG9zdGF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN1Ym1pdCIgbXNnaWQ9IjE2MDIzMzU1NzIwODk5MTE5NDEiPiJQb8WhYWxqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcl9tb2RlX2Rpc2FibGVfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE2NDc2ODIxMjAwMzg2NDMxNiI+IlJlxb5pbSByYWRhIHUgYXV0b21vYmlsdSBqZSBvbW9ndcSHZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXJfbW9kZV9kaXNhYmxlX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iODAzNTIzMDUzNzU2MzUwMzI2MiI+IkRvZGlybml0ZSBkYSBiaXN0ZSBpemHFoWxpIGl6IHJlxb5pbWEgcmFkYSB1IGF1dG9tb2JpbHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyZWRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMzE0NjY5NDIzNDM5ODIwMjYwMSI+IkFrdGl2bm8gcG92ZXppdmFuamUgc2EgaW50ZXJuZXRvbSBwcmVrbyBtb2JpbG5vZyB1cmXEkWFqYSBpbGkgaG90c3BvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcmVkX25vdGlmaWNhdGlvbl9tZXNzYWdlIiBtc2dpZD0iNjg1NzAzMTc2MDEwMzA2Mjk4MiI+IkRvZGlybml0ZSBkYSBiaXN0ZSBwb2Rlc2lsaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjIzMDA0NzAwMDQ1MDMzNDM0MzkiPiJOYXphZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5leHRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTA4MDU1NTEwNDY3Nzk5MjQwOCI+Ik5leHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJza2lwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjEyNzUzNjIyOTk0NzE2MzE4MTkiPiJQcmVza2/EjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19tYXRjaGVzIiBtc2dpZD0iODEyOTQyMTkwODkxNTg0MDczNyI+Ik5lbWEgcG9kdWRhcmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX29uX3BhZ2UiIG1zZ2lkPSIxOTQ2Nzk5MjMzODIyODIwMzg0Ij4iUHJvbmHEkWkgbmEgc3RyYW5pY2kiPC9zdHJpbmc+CisgICAgPHBsdXJhbHMgbmFtZT0ibWF0Y2hlc19mb3VuZCIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjEyMTA4ODQzNTM5NjIwODE4ODQiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4gb2QgPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iSU5ERVgiPiVkPC94bGlmZjpnPiBvZCA8eGxpZmY6ZyBpZD0iVE9UQUwiPiVkPC94bGlmZjpnPjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IklOREVYIj4lZDwveGxpZmY6Zz4gb2QgPHhsaWZmOmcgaWQ9IlRPVEFMIj4lZDwveGxpZmY6Zz48L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21vZGVfZG9uZSIgbXNnaWQ9IjcyMTc1ODE2NDA0NjE5MjIyODkiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQ1MjE1NzMzMjE1MjQzNDAwNTgiPiJCcmlzYW5qZSBVU0IgbWVtb3JpamUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9ncmVzc19lcmFzaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjU5Njk4ODg3NTUwNzA0MzA0MiI+IkJyaXNhbmplIFNEIGthcnRpY2UuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZSIgbXNnaWQ9IjE3Nzg2ODY2MTgyMzAwMTE5NjQiPiJEZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZCIgbXNnaWQ9IjQ4MDgyNzA5MDAzMjI5ODU5NjAiPiJQcm9uYcSRaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndlYnNlYXJjaCIgbXNnaWQ9IjQzMzcxNTc5Nzc0MDAyMTE1ODkiPiJWZWItcHJldHJhZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX25leHQiIG1zZ2lkPSI1NzQyMTI0NjE4OTQyMTkzOTc4Ij4iUHJvbmHEkWkgc2xlZGXEh2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5kX3ByZXZpb3VzIiBtc2dpZD0iMjE5NjcyMzY2OTM4ODM2MDUwNiI+IlByb25hxJFpIHByZXRob2RubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGlja2VyIiBtc2dpZD0iNTYyMjY4MzkxMjYxNjQ5NjE3MiI+IlphaHRldiB6YSBsb2thY2lqdSBvZCBrb3Jpc25pa2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdwc05vdGlmVGl0bGUiIG1zZ2lkPSI1NDQ2ODU4NzE3MTU3NDE2ODM5Ij4iWmFodGV2IHphIGxva2FjaWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzTm90aWZNZXNzYWdlIiBtc2dpZD0iMTM3NDcxODAyMzIyNDAwMDcwMiI+IlphaHRldmEgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+ICg8eGxpZmY6ZyBpZD0iU0VSVklDRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3BzVmVyaWZZZXMiIG1zZ2lkPSIyMzQ2NTY2MDcyODY3MjEzNTYzIj4iRGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNWZXJpZk5vIiBtc2dpZD0iMTE0NjU2NDkzNzM0NjQ1NDg2NSI+Ik5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzIiBtc2dpZD0iNTI5NjMyMTg1MDY2Mjc0Njg5MCI+IlByZW1hxaFlbm8gamUgb2dyYW5pxI1lbmplIHphIGJyaXNhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY190b29fbWFueV9kZWxldGVzX2Rlc2MiIG1zZ2lkPSI0OTY1NTE2NzEwMDg2OTQyNDUiPiJQb3N0b2plIGl6YnJpc2FuZSBzdGF2a2UgKDx4bGlmZjpnIGlkPSJOVU1CRVJfT0ZfREVMRVRFRF9JVEVNUyI+JTEkZDwveGxpZmY6Zz4pIHphIDx4bGlmZjpnIGlkPSJUWVBFX09GX1NZTkMiPiUyJHM8L3hsaWZmOmc+LCBuYWxvZyA8eGxpZmY6ZyBpZD0iQUNDT1VOVF9OQU1FIj4lMyRzPC94bGlmZjpnPi4gxaB0YSDFvmVsaXRlIGRhIHVyYWRpdGU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3luY19yZWFsbHlfZGVsZXRlIiBtc2dpZD0iMjU3MjYwMDEwMzEyMjU5NjI0MyI+Ikl6YnJpxaFpIHN0YXZrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5bmNfdW5kb19kZWxldGVzIiBtc2dpZD0iMjk0MTMxNzM2MDYwMDMzODYwMiI+Ik9wb3pvdmkgYnJpc2FuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeW5jX2RvX25vdGhpbmciIG1zZ2lkPSIzNzQzNzY0NzQwNDMwODIxODQ1Ij4iTmUgcmFkaSBuacWhdGEgemEgc2FkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9hY2NvdW50X2xhYmVsIiBtc2dpZD0iNTY1NTIwMzA4OTc0NjQyMzkyNyI+Ikl6Ym9yIG5hbG9nYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkZF9hY2NvdW50X2xhYmVsIiBtc2dpZD0iMjkzNTI2NzM0NDg0OTk5MzU1MyI+IkRvZGFqIG5hbG9nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX2FjY291bnRfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMzYxMTk4Mjg5NDg1MzQzNTg3NCI+IkRvZGFqIG5hbG9nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfYnV0dG9uIiBtc2dpZD0iMjQxMjA3MjI3MjgzMjI4NDMxMyI+IlBvdmXEh2F2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfZGVjcmVtZW50X2J1dHRvbiIgbXNnaWQ9IjQ3NjA1MDc3ODM4Njc3OTA2NyI+IlNtYW5qaXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibnVtYmVyX3BpY2tlcl9pbmNyZW1lbnRfc2Nyb2xsX21vZGUiIG1zZ2lkPSIzMDczMTAxMDY3NDQxNjM4NDI4Ij4iPHhsaWZmOmcgaWQ9IlZBTFVFIj4lczwveGxpZmY6Zz4gZG9kaXJuaXRlIGkgemFkcsW+aXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im51bWJlcl9waWNrZXJfaW5jcmVtZW50X3Njcm9sbF9hY3Rpb24iIG1zZ2lkPSI5MTAxNDczMDQ1ODkxODM1NDkwIj4iUHJldnVjaXRlIG5hZ29yZSBkYSBiaXN0ZSBwb3ZlxIdhbGksIGEgbmFkb2xlIGRhIGJpc3RlIHNtYW5qaWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9taW51dGVfYnV0dG9uIiBtc2dpZD0iODg2NTg4NTExNDAyODYxNDMyMSI+IlBvdmXEh2F2YW5qZSBtaW51dGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfbWludXRlX2J1dHRvbiIgbXNnaWQ9IjYyNDY4MzQ5MzcwODA2ODQ3OTEiPiJTbWFuaml2YW5qZSBtaW51dGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9pbmNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIzNjUyMDU2MDU1ODEwMjIzMTM5Ij4iUG92ZcSHYXZhbmplIHNhdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aW1lX3BpY2tlcl9kZWNyZW1lbnRfaG91cl9idXR0b24iIG1zZ2lkPSIxMzc3NDc5ODYzNDI5MjE0NzkyIj4iU21hbmppdmFuamUgc2F0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2luY3JlbWVudF9zZXRfcG1fYnV0dG9uIiBtc2dpZD0iNDE0NzU5MDY5NjE1MTIzMDg2MyI+IlBvZGVzaSBwbyBwb2RuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpbWVfcGlja2VyX2RlY3JlbWVudF9zZXRfYW1fYnV0dG9uIiBtc2dpZD0iODMwMjE0MDM1MzUzOTQ4Njc1MiI+IlBvZGVzaSBwcmUgcG9kbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9pbmNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTM2OTk5ODQ3OTA2NzkzNDExMCI+IlBvdmXEh2F2YW5qZSBtZXNlY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRlX3BpY2tlcl9kZWNyZW1lbnRfbW9udGhfYnV0dG9uIiBtc2dpZD0iMTgzMjY5ODk5NTU0MTcyNjAxOSI+IlNtYW5qaXZhbmplIG1lc2VjYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF9kYXlfYnV0dG9uIiBtc2dpZD0iNzEzMDQ2NTQxMjMwODE3MzkwMyI+IlBvdmXEh2F2YW5qZSBkYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X2RheV9idXR0b24iIG1zZ2lkPSI0MTMxODgxNTIxODE4NzUwMDMxIj4iU21hbmppdmFuamUgZGFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX2luY3JlbWVudF95ZWFyX2J1dHRvbiIgbXNnaWQ9IjYzMTg2OTczODQzMTA4MDg4OTkiPiJQb3ZlxIdhdmFuamUgZ29kaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0ZV9waWNrZXJfZGVjcmVtZW50X3llYXJfYnV0dG9uIiBtc2dpZD0iNDQ4MjAyMTgxMzQ5MTEyMTcxNyI+IlNtYW5qaXZhbmplIGdvZGluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX3ByZXZfbW9udGhfYnV0dG9uIiBtc2dpZD0iMjg1ODI0NDY0Mzk5MjA1NjUwNSI+IlByZXRob2RuaSBtZXNlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGVfcGlja2VyX25leHRfbW9udGhfYnV0dG9uIiBtc2dpZD0iNTU1OTUwNzczNjg4NzYwNTA1NSI+IlNsZWRlxIdpIG1lc2VjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfYWx0IiBtc2dpZD0iNDg1Njg2ODgyMDA0MDA1MTkzOSI+IkFsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2NhbmNlbCIgbXNnaWQ9IjEyMDM5ODQwMTcyNDU3ODMyNDQiPiJPdGthxb5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZGVsZXRlIiBtc2dpZD0iMzMzNzkxNDgzMzIwNjYzNTc0NCI+Ikl6YnJpxaFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmR2aWV3X2tleWNvZGVfZG9uZSIgbXNnaWQ9IjE5OTI1NzExMTg0NjY2Nzk3NzUiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9tb2RlX2NoYW5nZSIgbXNnaWQ9IjQ1NDczODc3NDE5MDY1Mzc1MTkiPiJQcm9tZW5hIHJlxb5pbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZHZpZXdfa2V5Y29kZV9zaGlmdCIgbXNnaWQ9IjIyNzA3NDg4MTQzMTUxNDc2OTAiPiJTaGlmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHljaG9vc2Vydmlld19jaG9vc2VfYXBwbGljYXRpb24iIG1zZ2lkPSIyMTI1MTY4MDU3MTk5OTQxMTk5Ij4iSXphYmVyaXRlIGFwbGlrYWNpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eWNob29zZXJ2aWV3X2Nob29zZV9hcHBsaWNhdGlvbl9lcnJvciIgbXNnaWQ9Ijg2MjQ2MTgzNjU0ODExMjY2NjgiPiJOaWplIG1vZ3XEh2UgcG9rcmVudXRpIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZWFjdGlvbnByb3ZpZGVyX3NoYXJlX3dpdGgiIG1zZ2lkPSI4MDY2ODgwNTYxNDExMzE4MTkiPiJEZWxpIHNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hhcmVhY3Rpb25wcm92aWRlcl9zaGFyZV93aXRoX2FwcGxpY2F0aW9uIiBtc2dpZD0iNTYyNzQxMTM4NDYzODM4OTczOCI+IkRlbGkgc2EgYXBsaWthY2lqb20gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnRlbnRfZGVzY3JpcHRpb25fc2xpZGluZ19oYW5kbGUiIG1zZ2lkPSI0MTU5NzUwNTYxNTkyNjIyNDgiPiJLbGl6bmEgcnXEjWljYS4gRG9kaXJuaXRlIGkgemFkcsW+aXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX3RhcmdldF91bmxvY2tfdGFibGV0IiBtc2dpZD0iMzgzMzE5NTMzNTYyOTc5NTA1NSI+IlByZXZ1Y2l0ZSBkYSBiaXN0ZSBvdGtsanXEjWFsaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9oZWFkc2V0X3JlcXVpcmVkX3RvX2hlYXJfcGFzc3dvcmQiIG1zZ2lkPSI3MDExOTI3MzUyMjY3NjY4NjU3Ij4iUHJpa2xqdcSNaXRlIHNsdcWhYWxpY2UgZGEgYmlzdGUgxI11bGkgaXpnb3ZvcmVuZSB0YXN0ZXJlIHphIGxvemlua3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfcGFzc3dvcmRfY2hhcmFjdGVyX25vX2hlYWRzZXQiIG1zZ2lkPSIyODU5ODczNzcwODg2MTUzNjc4Ij4iVGHEjWthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfaG9tZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjUyOTM2MDA0OTY2MDE0OTAyMTYiPiJLcmV0YW5qZSBkbyBQb8SNZXRuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfdXBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjM3NDk2NTYyOTUyMTUyNTg5Ij4iS3JldGFuamUgbmFnb3JlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX21lbnVfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMjk1NjU5MDM3NTA5MDA4NDUzIj4iSm/FoSBvcGNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNzk2NTk4NDM2MDkwMzY5MzkwMyI+IiUxJHMsICUyJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fYmFyX2hvbWVfc3VidGl0bGVfZGVzY3JpcHRpb25fZm9ybWF0IiBtc2dpZD0iNjk4NTU0NjUzMDQ3MTc4MDcyNyI+IiUxJHMsICUyJHMsICUzJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX2ludGVybmFsIiBtc2dpZD0iNDg5MTkxNjgzMzY1NzkyOTI2MyI+IkludGVybmEgbWVtb3JpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdG9yYWdlX3NkX2NhcmQiIG1zZ2lkPSIzMjgyOTQ4ODYxMzc4Mjg2NzQ1Ij4iU0Qga2FydGljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2Vfc2RfY2FyZF9sYWJlbCIgbXNnaWQ9IjYzNDcxMTEzMjA3NzQzNzkyNTciPiI8eGxpZmY6ZyBpZD0iTUFOVUZBQ1RVUkVSIj4lczwveGxpZmY6Zz4gU0Qga2FydGljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0b3JhZ2VfdXNiX2RyaXZlIiBtc2dpZD0iNjI2MTg5OTY4MzI5MjI0NDIwOSI+IlVTQiBkaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2JfZHJpdmVfbGFiZWwiIG1zZ2lkPSI0NTAxNDE4NTQ4OTI3NzU5OTUzIj4iPHhsaWZmOmcgaWQ9Ik1BTlVGQUNUVVJFUiI+JXM8L3hsaWZmOmc+IFVTQiBkaXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RvcmFnZV91c2IiIG1zZ2lkPSIzMDE3OTU0MDU5NTM4NTE3Mjc4Ij4iVVNCIG1lbW9yaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXh0cmFjdF9lZGl0X21lbnVfYnV0dG9uIiBtc2dpZD0iODk0MDQ3ODczMDQ5NjYxMDEzNyI+Ikl6bWVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ190aXRsZSIgbXNnaWQ9IjE5NTU2Mzg4NjIxMjIyMzIzNDIiPiJVcG96b3JlbmplIG8gcG90cm/FoW5qaSBwb2RhdGFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2Vfd2FybmluZ19ib2R5IiBtc2dpZD0iMjgxNDY3MzU1MTQ3MTk2OTk1NCI+IkRvZGlybml0ZSB6YSBwcmVnbGVkIGtvci4gaSBwb2QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV8zZ19saW1pdF90aXRsZSIgbXNnaWQ9IjQzNjE1MjM4NzY4MTg0NDc2ODMiPiJOZW1hIHZpxaFlIDJHLTNHIHBvZGF0YWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV80Z19saW1pdF90aXRsZSIgbXNnaWQ9IjQ2MDk1NjY4MjcyMTk0NDIzNzYiPiJOZW1hIHZpxaFlIDRHIHBvZGF0YWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfdGl0bGUiIG1zZ2lkPSI1NTcxNTgzNzY2MDI2MzYxMTIiPiJOZW1hIHZpxaFlIHBvZGF0YWthIHphIG1vYmlsbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3dpZmlfbGltaXRfdGl0bGUiIG1zZ2lkPSI1ODAzMzYzNzc5MDM0NzkyNjc2Ij4iTmVtYSB2acWhZSBXaS1GaSBwb2RhdGFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfYm9keSIgbXNnaWQ9IjI5MTczMTcwODI3OTYxNDA4MSI+IlBvdHJvxaFpbGkgc3RlIHBvZGF0a2UgemEgb3ZhaiBtZXNlYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfM2dfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjcwMjY3MzkxMjExMzgwMDUyMzEiPiJQcmVrb3JhxI1lbiBwcmVub3MgMkctM0cgcG9kYXRha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlXzRnX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSIxMTA2NTYyNzc5MzExMjA5MDM5Ij4iUHJla29yYcSNZW5qZSBwcmVub3NhIDRHIHBvZGF0YWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9tb2JpbGVfbGltaXRfc25vb3plZF90aXRsZSIgbXNnaWQ9IjQ5NDEzNDY2NTM3Mjk5NDM3ODkiPiJPZ3JhbmnEjWVuamUgbW9iaWxuaWggcG9kYXRha2EgamUgcHJla29yYcSNZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV93aWZpX2xpbWl0X3Nub296ZWRfdGl0bGUiIG1zZ2lkPSI4NzQzODU2MDA2Mzg0ODI1OTc0Ij4iUHJla29yYcSNZW5qZSBwcmVub3NhIFdpLUZpIHBvZGF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfbGltaXRfc25vb3plZF9ib2R5IiBtc2dpZD0iNzAzNTQ5MDI3ODI5ODQ0MTc2NyI+Ijx4bGlmZjpnIGlkPSJTSVpFIj4lczwveGxpZmY6Zz4gcHJla28gbmF2ZWRlbm9nIG9ncmFuacSNZW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfdGl0bGUiIG1zZ2lkPSI1OTY1MTU3MzYxMDM2MzIxOTE0Ij4iUG96YWRpbnNraSBwb2RhY2kgc3Ugb2dyYW5pxI1lbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3Jlc3RyaWN0ZWRfYm9keSIgbXNnaWQ9IjY3NDE1MjEzMzA5OTc0NTI5OTAiPiJEb2Rpcm5pdGUgZGEgYmlzdGUgdWtsb25pbGkgb2dyYW5pxI1lbmplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jZXJ0aWZpY2F0ZSIgbXNnaWQ9IjY1MTAwNDA0ODYwNDkyMzc2MzkiPiJCZXpiZWRub3NuaSBzZXJ0aWZpa2F0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NlcnRpZmljYXRlX2lzX3ZhbGlkIiBtc2dpZD0iNjgyNTI2MzI1MDc3NDU2OTM3MyI+Ik92YWogc2VydGlmaWthdCBqZSB2YcW+ZcSHaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfdG8iIG1zZ2lkPSI0NTQyMzk0ODAyNzQ5MjEwMzIiPiJJemRhdG8gemE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29tbW9uX25hbWUiIG1zZ2lkPSIyMjMzMjA5Mjk5NDM0MTcyNjQ2Ij4iVW9iacSNYWplbmkgbmF6aXY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3JnX25hbWUiIG1zZ2lkPSI2OTczNTYxMTkwNzYyMDg1MjM2Ij4iT3JnYW5pemFjaWphOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9yZ191bml0IiBtc2dpZD0iNzI2NTk4MTg5MDQyMjA3MDM4MyI+Ik9yZ2FuaXphY2lvbmEgamVkaW5pY2E6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaXNzdWVkX2J5IiBtc2dpZD0iMjY0NzU4NDk4ODA1NzQ4MTU2NiI+Ikl6ZGFvL2xhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZhbGlkaXR5X3BlcmlvZCIgbXNnaWQ9Ijg4MTg4ODYxMzc1NDU5ODMxMTAiPiJWYcW+bm9zdDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpc3N1ZWRfb24iIG1zZ2lkPSI1ODk1MDE3NDA0MzYxMzk3MjMyIj4iSXpkYXRvOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImV4cGlyZXNfb24iIG1zZ2lkPSIzNjc2MjQyOTQ5OTE1OTU5ODIxIj4iSXN0acSNZToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZXJpYWxfbnVtYmVyIiBtc2dpZD0iNzU4ODE0MDY3NjYwODYyNDkzIj4iU2VyaWpza2kgYnJvajoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmaW5nZXJwcmludHMiIG1zZ2lkPSI0NTE2MDE5NjE5ODUwNzYzMDQ5Ij4iRGlnaXRhbG5pIG90aXNjaToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGEyNTZfZmluZ2VycHJpbnQiIG1zZ2lkPSI0MzkxMjcxMjg2NDc3Mjc5MjYzIj4iU0hBLTI1NiBkaWdpdGFsbmkgb3Rpc2FrOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYTFfZmluZ2VycHJpbnQiIG1zZ2lkPSI3OTMwMzMwMjM1MjY5NDA0NTgxIj4iU0hBLTEgZGlnaXRhbG5pIG90aXNhazoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfc2VlX2FsbCIgbXNnaWQ9IjQyOTI1NjkzODM5NzY2MzYyMDAiPiJQcmlrYcW+aSBzdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9jaG9vc2VyX3ZpZXdfZGlhbG9nX3RpdGxlX2RlZmF1bHQiIG1zZ2lkPSI0NzEwMDEzODY0OTc0MDQwNjE1Ij4iSXpib3IgYWt0aXZub3N0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNoYXJlX2FjdGlvbl9wcm92aWRlcl9zaGFyZV93aXRoIiBtc2dpZD0iNTI0NzY4NDQzNTk3OTE0OTIxNiI+IkRlbGkgc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZW5kaW5nIiBtc2dpZD0iMzI0NTY1MzY4MTAwODIxODAzMCI+IlNsYW5qZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaEJyb3dzZXJEZWZhdWx0IiBtc2dpZD0iMjA1Nzk1MTk0NzI5NzYxNDcyNSI+IsW9ZWxpdGUgbGkgZGEgcG9rcmVuZXRlIHByZWdsZWRhxI0/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iU2V0dXBDYWxsRGVmYXVsdCIgbXNnaWQ9IjU4MzQ5NDg0NjkyNTM3NTg1NzUiPiLFvWVsaXRlIGxpIGRhIHByaWh2YXRpdGUgcG96aXY/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX2Fsd2F5cyIgbXNnaWQ9IjgwMTc3NzA3NDc4MDE0OTQ5MzMiPiJVdmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfcmVzb2x2ZXJfdXNlX29uY2UiIG1zZ2lkPSIyNDA0NjQ0Nzk3MTQ5MTczNzU4Ij4iU2FtbyBqZWRub20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpdml0eV9yZXNvbHZlcl93b3JrX3Byb2ZpbGVzX3N1cHBvcnQiIG1zZ2lkPSIxODU1OTgxODA2NzY4ODM0NTUiPiIlMSRzIG5lIHBvZHLFvmF2YSBwb3Nsb3ZuaSBwcm9maWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MTcwNTM4OTgxNjcxMjc0NzEiPiJUYWJsZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iOTE1ODA4ODU0NzYwMzAxOTMyMSI+IlRWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDIzOTI5MTI3MzQyMDE0MDEyMyI+IlRlbGVmb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2F1ZGlvX3JvdXRlX25hbWVfaGVhZHBob25lcyIgbXNnaWQ9IjgxMTk5NzE4NDM4MDM0MzkxMTAiPiJTbHXFoWFsaWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9uYW1lX2RvY2tfc3BlYWtlcnMiIG1zZ2lkPSI2MjQwNjAyOTgyMjc2NTkxODY0Ij4iWnZ1xI1uaWNpIGJhem5lIHN0YW5pY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X21lZGlhX3JvdXRlX25hbWVfaGRtaSIgbXNnaWQ9IjI0NTA5NzAzOTkwMjM0NzgwNTUiPiJIRE1JIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9hdWRpb19yb3V0ZV9jYXRlZ29yeV9uYW1lIiBtc2dpZD0iMzcyMjgxMTE3NDAwMzg4Njk0NiI+IlNpc3RlbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9hMmRwX2F1ZGlvX3JvdXRlX25hbWUiIG1zZ2lkPSI4NTc1NjI0MDMwNDA2NzcxMDE1Ij4iQmx1ZXRvb3RoIGF1ZGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lyZWxlc3NfZGlzcGxheV9yb3V0ZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjkwNzAzNDY0MjUwMjM5Nzk2NTEiPiJCZcW+acSNbmkgZWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9idXR0b25fY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU5MTcwMzAwNjM0OTM1NjAxNiI+IlByZWJhY3VqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiJQb3Zlxb5pdGUgc2EgdXJlxJFhamVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4iUHJlYmFjaXRlIGVrcmFuIG5hIHVyZcSRYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX3NlYXJjaGluZyIgbXNnaWQ9IjQ3NzYyMzYyMDI2MTA4Mjg3MDYiPiJUcmHFvmVuamUgdXJlxJFhamHigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiJQb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4iUHJla2luaSB2ZXp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX3NjYW5uaW5nIiBtc2dpZD0iNzI3OTkwODc2MTc1ODI5Mzc4MyI+IlNrZW5pcmFuamUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfY29ubmVjdGluZyIgbXNnaWQ9IjY0MjI1NzE3MTYwMDc4MjU0NDAiPiJQb3ZlenVqZSBzZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX3N0YXR1c19hdmFpbGFibGUiIG1zZ2lkPSI2OTgzMjU4MDY3MTk0NjQ5MzkxIj4iRG9zdHVwbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjY3Mzk4OTk5NjI2ODE4ODY0MDEiPiJOaXN1IGRvc3R1cG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2luX3VzZSIgbXNnaWQ9IjQ1MzM3ODYwMzEwOTAxOTgwNjMiPiJVIHVwb3RyZWJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX2J1aWx0X2luX2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjI1ODMxMzQyOTQyOTI1NjM5NDEiPiJVZ3JhxJFlbmkgZWtyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X21hbmFnZXJfaGRtaV9kaXNwbGF5X25hbWUiIG1zZ2lkPSIxNTU1MjY0NTU5MjI3NDcwMTA5Ij4iSERNSSBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfbmFtZSIgbXNnaWQ9IjUxNDIzNjU5ODIyNzE2MjA3MTYiPiJQb3N0YXZsamVuaSBlbGVtZW50IGJyLiA8eGxpZmY6ZyBpZD0iSUQiPiUxJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzcGxheV9tYW5hZ2VyX292ZXJsYXlfZGlzcGxheV90aXRsZSIgbXNnaWQ9IjY1MjEyNDUxNzY3MjI1NzE3MiI+Ijx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IldJRFRIIj4lMiRkPC94bGlmZjpnPsOXPHhsaWZmOmcgaWQ9IkhFSUdIVCI+JTMkZDwveGxpZmY6Zz4sIDx4bGlmZjpnIGlkPSJEUEkiPiU0JGQ8L3hsaWZmOmc+IGRwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc3BsYXlfbWFuYWdlcl9vdmVybGF5X2Rpc3BsYXlfc2VjdXJlX3N1ZmZpeCIgbXNnaWQ9IjYwMjIxMTk3MDI2Mjg1NzIwODAiPiIsIGJlemJlZG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iWmFib3JhdmxqZW5pIMWhYWJsb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IlBvZ3JlxaFhbiDFoWFibG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iUG9ncmXFoW5hIGxvemlua2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUG9ncmXFoWFuIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JTEkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5ODk3ODYxMTY4MzA3NTg2OCI+Ik5hY3J0YWp0ZSDFoWFibG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzE5NTA4NTUwOTM0NTU3MzMxIj4iVW5lc2l0ZSBQSU4gU0lNIGthcnRpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjM3NzI0MjIzMzQ5NTExMTU1NyI+IlVuZXNpdGUgUElOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTc1MzY0NjU1NjE4NjkzNjgxOSI+IlVuZXNpdGUgbG96aW5rdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludCIgbXNnaWQ9IjQ1MzIyNzE0Mzg2MTczNTUzNyI+IlNJTSBrYXJ0aWNhIGplIHNhZGEgb25lbW9ndcSHZW5hLiBVbmVzaXRlIFBVSyBrw7RkIGRhIGJpc3RlIG5hc3RhdmlsaS4gWmEgZGV0YWxqZSBrb250YWt0aXJhanRlIG9wZXJhdGVyYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wdWtfZW50ZXJfcGluX2hpbnQiIG1zZ2lkPSI3ODcxNjA0NTI3NDI5NjAyMDI0Ij4iVW5lc2l0ZSDFvmVsamVuaSBQSU4ga8O0ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2VudGVyX2NvbmZpcm1fcGluX2hpbnQiIG1zZ2lkPSIzMjU2NzYxODQ3NjI1Mjk5NzYiPiJQb3R2cmRpdGUgxb5lbGplbmkgUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODk1MDM5ODAxNjk3Njg2NTc2MiI+Ik90a2xqdcSNYXZhbmplIFNJTSBrYXJ0aWNl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIxMTM5MzI0ODg3NDEzODQ2OTEyIj4iUElOIGvDtGQgamUgbmV0YcSNYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcGluX2hpbnQiIG1zZ2lkPSI4Nzk1MTU5MzU4MTEwNjIwMDAxIj4iVW5lc2l0ZSBQSU4ga29qaSBpbWEgb2QgNCBkbyA4IGJyb2pldmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9zaW1fcHVrX2hpbnQiIG1zZ2lkPSI2MDI1MDY5MjA0NTM5NTMyMDAwIj4iUFVLIGvDtGQgdHJlYmEgZGEgaW1hIDggYnJvamV2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQb25vdm8gdW5lc2l0ZSBpc3ByYXZuaSBQVUsga8O0ZC4gUG9ub3ZsamVuaSBwb2t1xaFhamkgxIdlIHRyYWpubyBvbmVtb2d1xIdpdGkgU0lNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kb3ZpIHNlIG5lIHBvZHVkYXJhanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJQcmV2acWhZSBwb2t1xaFhamEgdW5vc2EgxaFhYmxvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIxMTAwNTUxMjYxMjY1NTA2NDQ4Ij4iRGEgYmlzdGUgb3RrbGp1xI1hbGksIHByaWphdml0ZSBzZSBwb21vxId1IEdvb2dsZSBuYWxvZ2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdXNlcm5hbWVfaGludCIgbXNnaWQ9IjU3MTg1MzQyNzIwNzA5MjAzNjQiPiJLb3Jpc25pxI1rbyBpbWUgKGltZWpsIGFkcmVzYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iOTA1NzI4OTEwMzgyNzI5ODU0OSI+Ikxvemlua2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9zdWJtaXRfYnV0dG9uIiBtc2dpZD0iNTM1NTkwNDU4MjY3NDA1NDcwMiI+IlByaWphdmkgbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iNTc1NDY2NDExOTMxOTg3MjE5NyI+Ik5ldmHFvmXEh2Uga29yaXNuacSNa28gaW1lIGlsaSBsb3ppbmthLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2FjY291bnRfcmVjb3ZlcnlfaGludCIgbXNnaWQ9IjU2OTA3MDkxMzI4NDE3NTI5NzQiPiJaYWJvcmF2aWxpIHN0ZSBrb3Jpc25pxI1rbyBpbWUgaWxpIGxvemlua3U/XG5Qb3NldGl0ZSBhZHJlc3UgIjxiPiJnb29nbGUuY29tL2FjY291bnRzL3JlY292ZXJ5IjwvYj4iLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX2NoZWNraW5nX3Bhc3N3b3JkIiBtc2dpZD0iMTA1MjY4NTE5NzcxMDI1MjM5NSI+IlByb3ZlcmEgbmFsb2dh4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJVbmVsaSBzdGUgbmV0YcSNbmkgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iVW5lbGkgc3RlIG5ldGHEjW51IGxvemlua3UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOYWNydGFsaSBzdGUgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTc1NTU3MjAwNjI3MTI4OTQ5Ij4iUG9rdcWhYWxpIHN0ZSBkYSBvdGtsanXEjWF0ZSB0YWJsZXQgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBOYWtvbiBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphIHRhYmxldCDEh2UgYml0aSByZXNldG92YW4gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYSBpIHN2aSBrb3Jpc25pxI1raSBwb2RhY2kgxIdlIGJpdGkgaXpndWJsamVuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNTYyMTIzMTIyMDE1NDQxOTQxMyI+IlBva3XFoWFsaSBzdGUgZGEgb3RrbGp1xI1hdGUgVFYgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBQb3NsZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphIFRWIMSHZSBiaXRpIHJlc2V0b3ZhbiBuYSBwb2RyYXp1bWV2YW5hIGZhYnJpxI1rYSBwb2RlxaFhdmFuamEgaSBzdmkga29yaXNuacSNa2kgcG9kYWNpIMSHZSBiaXRpIGl6Z3VibGplbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDA1MTAxNTk0MzAzODE5OTkxMCI+IlBva3XFoWFsaSBzdGUgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEgdGVsZWZvbiDEh2UgYml0aSByZXNldG92YW4gbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYSBpIHN2aSBrb3Jpc25pxI1raSBwb2RhY2kgxIdlIGJpdGkgaXpndWJsamVuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjA3Mjk5NjI2OTE0ODQ4MzYzNyI+IlBva3XFoWFsaSBzdGUgZGEgb3RrbGp1xI1hdGUgdGFibGV0IG5ldGHEjW5vIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXRhLiBUYWJsZXQgxIdlIHNhZGEgYml0aSB2cmHEh2VuIG5hIHBvZHJhenVtZXZhbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idHYiIG1zZ2lkPSI0OTg3ODc4Mjg2NzUwNzQxNDYzIj4iUG9rdcWhYWxpIHN0ZSBkYSBvdGtsanXEjWF0ZSBUViBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0YS4gVFYgxIdlIHNhZGEgYml0aSByZXNldG92YW4gbmEgcG9kcmF6dW1ldmFuYSBmYWJyacSNa2EgcG9kZcWhYXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDgxNzYyNzQ3NDQxOTQ3MTUxOCI+IlBva3XFoWFsaSBzdGUgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0YS4gVGVsZWZvbiDEh2Ugc2FkYSBiaXRpIHZyYcSHZW4gbmEgcG9kcmF6dW1ldmFuYSBmYWJyacSNa2EgcG9kZcWhYXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJOYWNydGFsaSBzdGUgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEsIG9kIHZhcyDEh2UgYml0aSB6YXRyYcW+ZW5vIGRhIG90a2xqdcSNYXRlIHRhYmxldCBwb21vxId1IG5hbG9nYSBlLXBvxaF0ZS5cblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InR2IiBtc2dpZD0iNDIyNDY1MTEzMjg2MjMxMzQ3MSI+Ik5laXNwcmF2bm8gc3RlIG5hY3J0YWxpIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBQb3NsZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphLCBvZCB2YXMgxIdlIGJpdGkgemF0cmHFvmVubyBkYSBvdGtsanXEjWF0ZSBUViBwb21vxId1IG5hbG9nYSBlLXBvxaF0ZS5cblxuIFBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmFjcnRhbGkgc3RlIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBQb3NsZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmV1c3BlxaFuYShpaCkgcG9rdcWhYWphLCBvZCB2YXMgxIdlIGJpdGkgemF0cmHFvmVubyBkYSBvdGtsanXEjWF0ZSB0ZWxlZm9uIHBvbW/Eh3UgbmFsb2dhIGUtcG/FoXRlLlxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdGV4dF9tZXNzYWdlX3NlcGFyYXRvciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQxNjA3MDA0MzMyODcyMzM3NzEiPiIg4oCTICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Jlb3JkZXJpbmdfZGVsZXRlX2Ryb3BfdGFyZ2V0X3RleHQiIG1zZ2lkPSI3ODk5MjAyOTc4MjA0NDM4NzA4Ij4iVWtsb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2FmZV9tZWRpYV92b2x1bWVfd2FybmluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjIyNzYzMTg5MDkzMTQ0OTIzMTIiPiLFvWVsaXRlIGRhIHBvamHEjWF0ZSB6dnVrIGl6bmFkIHByZXBvcnXEjWVub2cgbml2b2E/XG5cblNsdcWhYW5qZSBnbGFzbmUgbXV6aWtlIGR1xb5lIHZyZW1lIG1vxb5lIGRhIHZhbSBvxaF0ZXRpIHNsdWguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udGludWVfdG9fZW5hYmxlX2FjY2Vzc2liaWxpdHkiIG1zZ2lkPSIxNjI2NDI3MzcyMzE2MDcwMjU4Ij4iRHLFvml0ZSBzYSBkdmEgcHJzdGEgZGEgYmlzdGUgb21vZ3XEh2lsaSBwcmlzdHVwYcSNbm9zdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iUHJpc3R1cGHEjW5vc3QgamUgb21vZ3XEh2VuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiJQcmlzdHVwYcSNbm9zdCBqZSBvdGthemFuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IkFrdHVlbG5pIGtvcmlzbmlrIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGluZ19tZXNzYWdlIiBtc2dpZD0iMjg3MTAwOTMzMTgwOTA4OTc4MyI+IlByZWJhY2l2YW5qZSBuYSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX2xvZ2dpbmdfb3V0X21lc3NhZ2UiIG1zZ2lkPSI4OTM5NTI0OTM1ODA4ODc1MTU1Ij4iT2RqYXZsanVqZSBzZSA8eGxpZmY6ZyBpZD0iTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJvd25lcl9uYW1lIiBtc2dpZD0iMjcxNjc1NTQ2MDM3NjAyODE1NCI+IlZsYXNuaWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX3RpdGxlIiBtc2dpZD0iNDUxMDM3MzA4MzA4MjUwMDE5NSI+IkdyZcWha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlcnJvcl9tZXNzYWdlX2NoYW5nZV9ub3RfYWxsb3dlZCIgbXNnaWQ9IjEzNDcyODIzNDQyMDA0MTc1NzgiPiJBZG1pbmlzdHJhdG9yIG5pamUgZG96dm9saW8gb3Z1IHByb21lbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbm90X2ZvdW5kIiBtc2dpZD0iMzQyOTE0MTg1MzQ5ODkyNzM3OSI+Ik5pamUgcHJvbmHEkWVuYSBuaWplZG5hIGFwbGlrYWNpamEga29qYSBiaSBtb2dsYSBkYSBvYmF2aSBvdnUgcmFkbmp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmV2b2tlIiBtc2dpZD0iNTQwNDQ3OTE4NTIyODI3MTU4NiI+Ik9wb3pvdmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2EwIiBtc2dpZD0iMTk5NDQ3NDI1MjkzMTI5NDE3MiI+IklTTyBBMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTEiIG1zZ2lkPSIzMzMzMDYwNDIxNTI5NzkxNzg2Ij4iSVNPIEExIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19hMiIgbXNnaWQ9IjMwOTc1MzU5OTE5MjU3OTgyODAiPiJJU08gQTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2EzIiBtc2dpZD0iMzAyMzIxMzI1OTMxNDIzNjEyMyI+IklTTyBBMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTQiIG1zZ2lkPSIyMzE3NDUzMjUyOTY4NzM3NjQiPiJJU08gQTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2E1IiBtc2dpZD0iMzQ4NDMyNzQwNzM0MDg2NTQxMSI+IklTTyBBNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTYiIG1zZ2lkPSI0ODYxOTA4NDg3MTI5NTc3NTMwIj4iSVNPIEE2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19hNyIgbXNnaWQ9IjU4OTAyMDg1ODgwNzI5MzYxMzAiPiJJU08gQTciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2E4IiBtc2dpZD0iNDMxOTQyNTA0MTA4NTgxNjYxMiI+IklTTyBBOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYTkiIG1zZ2lkPSI0ODgyMjIwNTI5NTA2NDMyMDA4Ij4iSVNPIEE5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19hMTAiIG1zZ2lkPSIyMzgyODY2MDI2MzY1MzU5MzkxIj4iSVNPIEExMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYjAiIG1zZ2lkPSIzNjUxODI3MTQ3NDAyMDA5Njc1Ij4iSVNPIEIwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19iMSIgbXNnaWQ9IjYwNzI4NTk2MjgyNzg3Mzk5NTciPiJJU08gQjEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2IyIiBtc2dpZD0iMTM0ODczMTg1MjE1MDM4MDM3OCI+IklTTyBCMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYjMiIG1zZ2lkPSIyNjEyNTEwMTgxMjU5MjYxMzc5Ij4iSVNPIEIzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19iNCIgbXNnaWQ9IjY5NTE1MTM3ODgzODExNTQzNCI+IklTTyBCNCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYjUiIG1zZ2lkPSI0ODYzNzU0Mjg1NTgyMjEyNDg3Ij4iSVNPIEI1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19iNiIgbXNnaWQ9IjUzMDU4MTYyOTIxMzk2NDcyNDEiPiJJU08gQjYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2I3IiBtc2dpZD0iNTMxNjczNTQyNjAyNzg2NjI0Ij4iSVNPIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19iOCIgbXNnaWQ9IjkxNjQ0NzQ1OTU3MDg4NTAwMzQiPiJJU08gQjgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2I5IiBtc2dpZD0iMjgyMTAyOTc2NzY0Nzc0MTYwIj4iSVNPIEI5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19iMTAiIG1zZ2lkPSI0NTE3MTQxNzE0NDA3ODk4OTc2Ij4iSVNPIEIxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYzAiIG1zZ2lkPSIzMTAzNTIxMzU3OTAxNTkxMTAwIj4iSVNPIEMwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19jMSIgbXNnaWQ9IjEyMzE5NTQxMDU5ODUwNDg1OTUiPiJJU08gQzEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2MyIiBtc2dpZD0iOTI3NzAyODE2OTgwMDg3NDYyIj4iSVNPIEMyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19jMyIgbXNnaWQ9IjgzNTE1NDE3MzUxODMwNDE1OSI+IklTTyBDMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYzQiIG1zZ2lkPSI1MDk1OTUxOTg1MTA4MTk0MDExIj4iSVNPIEM0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19jNSIgbXNnaWQ9IjE5ODUzOTc0NTAzMzIzMDU3MzkiPiJJU08gQzUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2M2IiBtc2dpZD0iODE0NzQyMTkyNDE3NDY5MzAxMyI+IklTTyBDNiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYzciIG1zZ2lkPSI4OTkzOTk0OTI1Mjc2MTIyOTUwIj4iSVNPIEM3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2lzb19jOCIgbXNnaWQ9IjY4NzExNzgxMDQxMzk1OTg5NTciPiJJU08gQzgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfaXNvX2M5IiBtc2dpZD0iNzk4MzUzMjYzNTIyNzU2MTM2MiI+IklTTyBDOSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9pc29fYzEwIiBtc2dpZD0iNTA0MDc2NDI5MzQwNjc2NTU4NCI+IklTTyBDMTAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfbGV0dGVyIiBtc2dpZD0iMjg0MTQxNDgzOTg4ODM0NDI5NiI+IkxldHRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9ndnJubXRfbGV0dGVyIiBtc2dpZD0iNTI5NTgzNjgzODg2Mjk2MjgwOSI+IkdvdmVybm1lbnQgTGV0dGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2xlZ2FsIiBtc2dpZD0iODYyMTM2NDAzNzY4MDQ2NTY2NiI+IkxlZ2FsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2p1bmlvcl9sZWdhbCIgbXNnaWQ9IjMzMDkzMjQxNjIxNTUwODU5MDQiPiJKdW5pb3IgTGVnYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfbGVkZ2VyIiBtc2dpZD0iNTU2NzAzMDM0MDUwOTA3NTMzMyI+IkxlZGdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV90YWJsb2lkIiBtc2dpZD0iNDU3MTczNTAzODUwMTY2MTc1NyI+IlRhYmxvaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfaW5kZXhfM3g1IiBtc2dpZD0iNTE4MjkwMTkxNzgxODYyNTEyNiI+IkluZGV4IENhcmQgM3g1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2luZGV4XzR4NiIgbXNnaWQ9Ijc2ODc2MjA2MjU0MjIzMTIzOTYiPiJJbmRleCBDYXJkIDR4NiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9uYV9pbmRleF81eDgiIG1zZ2lkPSI4ODM0MjE1Mjg0NjQ2ODcyODAwIj4iSW5kZXggQ2FyZCA1eDgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfbW9uYXJjaCIgbXNnaWQ9IjIxMzYzOTkwNjk1NjU1MDc1NCI+Ik1vbmFyY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfbmFfcXVhcnRvIiBtc2dpZD0iODM1Nzc4NDkzNTkzMDIzMjIzIj4iUXVhcnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX25hX2Zvb2xzY2FwIiBtc2dpZD0iMTU3MzkxMTIzNzk4MzY3NzEzOCI+IkZvb2xzY2FwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2Vfcm9jXzhrIiBtc2dpZD0iMzYyNjg1NTg0NzE4OTQzODg5NiI+IlJPQyA4SyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3JvY18xNmsiIG1zZ2lkPSI5MTgyMTkxNTc3MDIyOTQzMzU1Ij4iUk9DIDE2SyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3ByY18xIiBtc2dpZD0iNDc5MzIzMjY0NDk4MDE3MDUwMCI+IlBSQyAxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2VfcHJjXzIiIG1zZ2lkPSI1NDA0MTA5NzMwOTc1NzIwNjcwIj4iUFJDIDIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfY2hpbmVzZV9wcmNfMyIgbXNnaWQ9IjEzMzUwOTIyNTMzMzkzNjM1MjYiPiJQUkMgMyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3ByY180IiBtc2dpZD0iOTE2Nzk5NzgwMDQ4NjU2OTgzNCI+IlBSQyA0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2VfcHJjXzUiIG1zZ2lkPSI4NDU4NzUxNjg4MjM1NDE0OTciPiJQUkMgNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3ByY182IiBtc2dpZD0iMzIyMDMyNTY2NzY5MjY0ODc4OSI+IlBSQyA2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2VfcHJjXzciIG1zZ2lkPSIxNzc2NzkyMTM4NTA3MDM4NTI3Ij4iUFJDIDciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfY2hpbmVzZV9wcmNfOCIgbXNnaWQ9IjE0MTcxNzY2NDI2ODc0NTY2OTIiPiJQUkMgOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3ByY185IiBtc2dpZD0iNDc4NTk4MzQ3MzEyMzc5ODM2NSI+IlBSQyA5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2VfcHJjXzEwIiBtc2dpZD0iNzg0Nzk4MjI5OTM5MTg1MTg5OSI+IlBSQyAxMCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX3ByY18xNmsiIG1zZ2lkPSIyNjI3OTMzODM1Mzk5ODA2NzciPiJQUkMgMTZLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2NoaW5lc2Vfb21fcGFfa2FpIiBtc2dpZD0iNTI1NjgxNTU3OTQ0Nzk1OTgxNCI+IlBhIEthaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX29tX2RhaV9wYV9rYWkiIG1zZ2lkPSI3MzM2NDEyOTYzNDQxMzU0NDA3Ij4iRGFpIFBhIEthaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9jaGluZXNlX29tX2p1cnJvX2t1X2thaSIgbXNnaWQ9IjYzMjQ0NjU0NDQxMDA0OTA3NDIiPiJKdXJybyBLdSBLYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfamlzX2IxMCIgbXNnaWQ9IjE3ODcyNjI4NDU2Mjc2OTQzNzYiPiJKSVMgQjEwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2phcGFuZXNlX2ppc19iOSIgbXNnaWQ9IjMzMzYwMzU3ODM2NjMyODc0NzAiPiJKSVMgQjkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfamlzX2I4IiBtc2dpZD0iNjE5NTM5ODI5OTEwNDM0NTczMSI+IkpJUyBCOCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjciIG1zZ2lkPSIxNjc0NjIxODg2OTAyODI4ODg0Ij4iSklTIEI3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2phcGFuZXNlX2ppc19iNiIgbXNnaWQ9IjQxNzA1NzYyODYwNjI2NTc0MzUiPiJKSVMgQjYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfamlzX2I1IiBtc2dpZD0iNDg5OTI5Nzk1ODEwMDAzMjUzMyI+IkpJUyBCNSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjQiIG1zZ2lkPSI0MjEzMTU4MTI5MTI2NjY2ODQ3Ij4iSklTIEI0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2phcGFuZXNlX2ppc19iMyIgbXNnaWQ9Ijg1MTM3MTUzMDc0MTAzMTA2OTYiPiJKSVMgQjMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfamlzX2IyIiBtc2dpZD0iNDc3NzY5MDIxMTg5NzEzMTE5MCI+IkpJUyBCMiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV9qaXNfYjEiIG1zZ2lkPSI0NjA4MTQyMzg1NDU3MDM0NjAzIj4iSklTIEIxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2phcGFuZXNlX2ppc19iMCIgbXNnaWQ9Ijc1ODcxMDgzNjY1NzIyNDM5OTEiPiJKSVMgQjAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfamlzX2V4ZWMiIG1zZ2lkPSI1MjQ0MDc1NDMyMjYzNjQ5MDY4Ij4iSklTIEV4ZWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfY2hvdTQiIG1zZ2lkPSI0OTQxNjUyMDE1MDMyNjMxMzYxIj4iQ2hvdTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfY2hvdTMiIG1zZ2lkPSI2Mzg3MzE5MTY5MjYzOTU3MDEwIj4iQ2hvdTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfY2hvdTIiIG1zZ2lkPSIxMjk5MTEyMDI1NDE1MzQzOTgyIj4iQ2hvdTIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfamFwYW5lc2VfaGFnYWtpIiBtc2dpZD0iODA3MDExNTYyMDY0NDI1NDU2NSI+IkhhZ2FraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV9vdWZ1a3UiIG1zZ2lkPSI2MDQ5MDY1NTg3MzA3ODk2NTY0Ij4iT3VmdWt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFzaXplX2phcGFuZXNlX2thaHUiIG1zZ2lkPSI2ODcyNjk2MDI3NTYwMDY1MTczIj4iS2FodSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV9rYWt1MiIgbXNnaWQ9IjIzNTkwNzcyMzM3NzU0NTU0MDUiPiJLYWt1MiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV9qYXBhbmVzZV95b3U0IiBtc2dpZD0iMjA5MTc3NzE2ODc0NzA1ODAwOCI+IllvdTQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYXNpemVfdW5rbm93bl9wb3J0cmFpdCIgbXNnaWQ9IjMwODgwNDM2NDE2MTY0MDk3NjIiPiJOZXBvem5hdGEgdmVsacSNaW5hLCB1c3ByYXZubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhc2l6ZV91bmtub3duX2xhbmRzY2FwZSIgbXNnaWQ9IjQ4NzY5OTUzMjcwMjkzNjE1NTIiPiJOZXBvem5hdGEgdmVsacSNaW5hLCB2b2RvcmF2bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5jZWxsZWQiIG1zZ2lkPSI3MDkxMjU4Mzc4MTIxNjI3NjI0Ij4iT3RrYXphbm8gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3cml0ZV9mYWlsX3JlYXNvbl9jYW5ub3Rfd3JpdGUiIG1zZ2lkPSI4MTMyNTA1NDE3OTM1MzM3NzI0Ij4iR3JlxaFrYSBwcmkgaXNwaXNpdmFuanUgc2FkcsW+YWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3Vua25vd24iIG1zZ2lkPSI2MDQ4OTEzODgwMTg0NjI4MTE5Ij4ibmVwb3puYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVhc29uX3NlcnZpY2VfdW5hdmFpbGFibGUiIG1zZ2lkPSI3ODI0MDA4NzMyMjQzOTAzMjY4Ij4iVXNsdWdhIMWhdGFtcGFuamEgbmlqZSBvbW9ndcSHZW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZV9pbnN0YWxsZWRfdGl0bGUiIG1zZ2lkPSIyMjQ2MzE3MTY5NDQ0MDgxNjI4Ij4iVXNsdWdhIDx4bGlmZjpnIGlkPSJOQU1FIj4lczwveGxpZmY6Zz4gamUgaW5zdGFsaXJhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlX2luc3RhbGxlZF9tZXNzYWdlIiBtc2dpZD0iNTg5NzM2MjkzMTA3MDQ1OTE1MiI+IkRvZGlybml0ZSBkYSBiaXN0ZSBvbW9ndcSHaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX2FkbWluX3BpbiIgbXNnaWQ9Ijc4MzY0MzczMTg5NTE0Mzk3MCI+IlVuZXNpdGUgUElOIGFkbWluaXN0cmF0b3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2VudGVyX3BpbiIgbXNnaWQ9IjMzOTU5NTM0MjEzNjg0NzYxMDMiPiJVbmVzaXRlIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9pbmNvcnJlY3QiIG1zZ2lkPSI4NTcxNTEyMDAzOTU1MDc3OTI0Ij4iTmV0YcSNbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfb2xkX3BpbiIgbXNnaWQ9IjE0NjIyMDYyMjU1MTI5MTA3NTciPiJBa3R1ZWxuaSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZW50ZXJfbmV3X3BpbiIgbXNnaWQ9IjU5NTk2MDY2OTE2MTk5NTkxODQiPiJOb3ZpIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RyX3Bpbl9jb25maXJtX3BpbiIgbXNnaWQ9Ijg1MDE1MjM4Mjk2MzMxNDYyMzkiPiJQb3R2cmRpdGUgbm92aSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fY3JlYXRlX3BpbiIgbXNnaWQ9IjgwMTc2MDAwMDAyNjM0NTAzMzciPiJOYXByYXZpdGUgUElOIHphIGl6bWVudSBvZ3JhbmnEjWVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0cl9waW5fZXJyb3JfZG9lc250X21hdGNoIiBtc2dpZD0iMjIyNDIxNDE5MDkwNjk5NDU0OCI+IlBJTi1vdmkgc2UgbmUgcG9kdWRhcmFqdS4gUG9rdcWhYWp0ZSBwb25vdm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX2Vycm9yX3Rvb19zaG9ydCIgbXNnaWQ9IjgxNzM5ODI3NTYyNjU3Nzc3OTIiPiJQSU4gamUgcHJla3JhdGFrLiBNb3JhIGRhIHNhZHLFvmkgbmFqbWFuamUgNCBjaWZyZS4iPC9zdHJpbmc+CisgICAgPHBsdXJhbHMgbmFtZT0icmVzdHJfcGluX2NvdW50ZG93biIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjkwNjEyNDY5NzQ4ODEyMjQ2ODgiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9IkNPVU5UIj4lZDwveGxpZmY6Zz4gc2VrdW5kdTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNla3VuZGU8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJDT1VOVCI+JWQ8L3hsaWZmOmc+IHNla3VuZGk8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdHJfcGluX3RyeV9sYXRlciIgbXNnaWQ9Ijk3MzE0NDQ3MjQ5MDUzMjM3NyI+IlBva3XFoWFqdGUgcG9ub3ZvIGthc25pamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfY2xpbmdfdGl0bGUiIG1zZ2lkPSI4Mzk0MjAxNjIyOTMyMzAzMzM2Ij4iUHJpa2F6dWplIHNlIGNlbyBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltbWVyc2l2ZV9jbGluZ19kZXNjcmlwdGlvbiIgbXNnaWQ9IjM0ODIzNzExOTMyMDc1MzYwNDAiPiJEYSBiaXN0ZSBpemHFoWxpLCBwcmV2dWNpdGUgbmFkb2xlIG9kb3pnby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lcnNpdmVfY2xpbmdfcG9zaXRpdmUiIG1zZ2lkPSI1MDE2ODM5NDA0NTY4Mjk3NjgzIj4iVmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkb25lX2xhYmVsIiBtc2dpZD0iMjA5MzcyNjA5OTUwNTg5MjM5OCI+IkdvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhvdXJfcGlja2VyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNjY5ODE5OTE4Njg1OTczNjUxMiI+IktydcW+bmkga2xpemHEjSB6YSBzYXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWludXRlX3BpY2tlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9Ijg2MDYwMTA5NjY4NzM3OTExOTAiPiJLcnXFvm5pIGtsaXphxI0gemEgbWludXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2hvdXJzIiBtc2dpZD0iNjA0MzA3OTUxMTc2NjAwODI0NSI+Ikl6YWJlcml0ZSBzYXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X21pbnV0ZXMiIG1zZ2lkPSIzOTc0MzQ1NjE1OTIwMzM2MDg3Ij4iSXphYmVyaXRlIG1pbnV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9kYXkiIG1zZ2lkPSI3Nzc0NzU5NjA0NzAxNzczMzMyIj4iSXphYmVyaXRlIG1lc2VjIGkgZGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3llYXIiIG1zZ2lkPSI3OTUyMDUyODY2OTk0MTk2MTcwIj4iSXphYmVyaXRlIGdvZGludSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZWRfa2V5IiBtc2dpZD0iNzY1OTQ3Nzg4NjYyNTU2NjU5MCI+Ikl6YnJpc2FsaSBzdGUgPHhsaWZmOmcgaWQ9IktFWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfbGFiZWxfYmFkZ2UiIG1zZ2lkPSIyMzU1NjUyNDcyODU0MzI3NjQ3Ij4iPHhsaWZmOmcgaWQ9IkxBQkVMIj4lMSRzPC94bGlmZjpnPiBuYSBwb3NsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tfdG9fYXBwX3RvYXN0IiBtc2dpZD0iNzU3MDA5MTMxNzAwMTk4MDA1MyI+IkRhIGJpc3RlIG90a2HEjWlsaSBvdmFqIGVrcmFuLCBpc3RvdnJlbWVubyBkb2Rpcm5pdGUgaSB6YWRyxb5pdGUgTmF6YWQgaSBQcmVnbGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tfdG9fYXBwX3RvYXN0X2FjY2Vzc2libGUiIG1zZ2lkPSI4MjM5MTIwMTA5MzY1MDcwNjY0Ij4iRGEgYmlzdGUgb3RrYcSNaWxpIG92YWogZWtyYW4sIGRvZGlybml0ZSBpIHphZHLFvml0ZSBQcmVnbGVkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tfdG9fYXBwX3RvYXN0X2xvY2tlZCIgbXNnaWQ9IjkxMjUxNzYzMzU3MDE2OTkxNjQiPiJBcGxpa2FjaWphIGplIHpha2HEjWVuYTogb3RrYcSNaW5qYW5qZSBuaWplIGRvenZvbGplbm8gbmEgb3ZvbSB1cmXEkWFqdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2NrX3RvX2FwcF9zdGFydCIgbXNnaWQ9IjY2NDMzNDIwNzA4Mzk4NjI3OTUiPiJFa3JhbiBqZSB6YWthxI1lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tfdG9fYXBwX2V4aXQiIG1zZ2lkPSI4NTk4MjE5ODM4MjEzNzg3NDMwIj4iRWtyYW4gamUgb3RrYcSNZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2NrX3RvX2FwcF91bmxvY2tfcGluIiBtc2dpZD0iMjU1MjU1NjY1NjUwNDMzMTYzNCI+IlRyYcW+aSBQSU4gcHJlIG90a2HEjWluamFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2NrX3RvX2FwcF91bmxvY2tfcGF0dGVybiIgbXNnaWQ9IjQxODIxOTIxNDQ3OTcyMjUxMzciPiJUcmHFvmkgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSBwcmUgb3RrYcSNaW5qYW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tfdG9fYXBwX3VubG9ja19wYXNzd29yZCIgbXNnaWQ9IjYzODA5Nzk3NzU5MTY5NzQ0MTQiPiJUcmHFvmkgbG96aW5rdSBwcmUgb3RrYcSNaW5qYW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRvY2tfbm9uX3Jlc2l6ZWJsZV90ZXh0IiBtc2dpZD0iOTE1NjI1MTY4MTA0Mjc2MjcyMyI+IlZlbGnEjWluYSBhcGxpa2FjaWplIG5lIG1vxb5lIGRhIHNlIG1lbmphLCBwb21lcmFqdGUgamUgcG9tb8SHdSBkdmEgcHJzdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9pbnN0YWxsZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODQyMDY5NjU0NTk1OTA4NzU0NSI+Ikluc3RhbGlyYW8gamUgdmHFoSBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBxb51cmlyYW8gamUgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXpicmlzYW8gamUgdmHFoSBhZG1paXN0cmF0b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkRhIGJpIHByb2R1xb5pbGEgdnJlbWUgdHJhamFuamEgYmF0ZXJpamUsIHXFoXRlZGEgYmF0ZXJpamUgc21hbmp1amUgcGVyZm9ybWFuc2UgdXJlxJFhamEgaSBvZ3JhbmnEjWF2YSB2aWJyYWNpanUsIHVzbHVnZSBsb2thY2lqZSBpIHZlxIdpbnUgcG96YWRpbnNraWggcG9kYXRha2EuIEltZWpsLCByYXptZW5hIHBvcnVrYSBpIGRydWdlIGFwbGlrYWNpamUga29qZSBzZSBvc2xhbmphanUgbmEgc2luaHJvbml6YWNpanUgbW/FvmRhIG5lxIdlIGRhIHNlIGHFvnVyaXJhanUgYWtvIGloIG5lIG90dm9yaXRlLlxuXG5VxaF0ZWRhIGJhdGVyaWplIHNlIGF1dG9tYXRza2kgaXNrbGp1xI11amUga2FkYSBzZSB1cmXEkWFqIHB1bmkuIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCBtaW51dCAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCBtaW51dGEgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dGEgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5X3Nob3J0IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjgzMDE1NDIyMjM2NjA0MjU5NyI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5aYSAlMSRkIG1pbiAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+WmEgJTEkZCBtaW4gKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+WmEgJTEkZCBtaW4gKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25faG91cnNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjgxNTI5NzQxNjIwOTY3NDM4NjIiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCBzYXQgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgc2F0YSAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIHNhdGkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25faG91cnNfc3VtbWFyeV9zaG9ydCIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQ3ODc1NTI1OTUyNTMwODIzNzEiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+WmEgJTEkZCBzIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5aYSAlMSRkIHMgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+emEgJTEkZCBzIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXMiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI1MTI3NDA3MjAyNTA2NDg1NTcxIj4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiVkIG1pbnV0PC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JWQgbWludXRhPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lZCBtaW51dGE8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc2hvcnQiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSIyMTk5MzUwMTU0NDMzNDI2MTI4Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlphICVkIG1pbjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlphICVkIG1pbjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+WmEgJWQgbWluPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9ob3VycyIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjM5Mzg4MjEzMDgyNzc0MzM4NTQiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JWQgc2F0PC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JWQgc2F0YTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JWQgc2F0aTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25faG91cnNfc2hvcnQiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzQ4Mjc3Nzc0NjYyNDM0MjE3Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlphICVkIHM8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5aYSAlZCBzPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5aYSAlZCBzPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX3VudGlsIiBtc2dpZD0iNzMzNjMwODQ5MjI4OTg3NTA4OCI+IkRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2FsYXJtIiBtc2dpZD0iOTEyODIwNTcyMTMwMTMzMDc5NyI+IkRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiAoc2xlZGXEh2kgYWxhcm0pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZm9yZXZlciIgbXNnaWQ9Ijc0MjAwMTE5MzY3NzAwODY5OTMiPiJEb2sgbmUgaXNrbGp1xI1pdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9mb3JldmVyX2RuZCIgbXNnaWQ9IjM3OTIxMzI2OTY1NzIxODkwODEiPiJEb2sgbmUgaXNrbGp1xI1pdGUgcmXFvmltIE5lIHV6bmVtaXJhdmFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfcnVsZV9uYW1lX2NvbWJpbmF0aW9uIiBtc2dpZD0iMTkxMTA5OTM5OTY4MDc2NDc3Ij4iPHhsaWZmOmcgaWQ9IkZJUlNUIj4lMSRzPC94bGlmZjpnPi88eGxpZmY6ZyBpZD0iUkVTVCI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b29sYmFyX2NvbGxhcHNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjgyMTQ3OTQ4Mzk2MDMzMDczOSI+IlNrdXBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZmVhdHVyZV9uYW1lIiBtc2dpZD0iNTI1NDA4OTM5OTg5NTg5NTAwNCI+Ik5lIHV6bmVtaXJhdmFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZG93bnRpbWVfZmVhdHVyZV9uYW1lIiBtc2dpZD0iMjYyNjk3NDYzNjc3OTg2MDE0NiI+Ik9kbW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZGVmYXVsdF93ZWVrbmlnaHRzX25hbWUiIG1zZ2lkPSIzMDgxMzE4Mjk5NDY0OTk4MTQzIj4iUmFkbmkgZGFuIHV2ZcSNZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2RlZmF1bHRfd2Vla2VuZHNfbmFtZSIgbXNnaWQ9IjI3ODY0OTU4MDEwMTkzNDUyNDQiPiJWaWtlbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9kZWZhdWx0X2V2ZW50c19uYW1lIiBtc2dpZD0iODE1ODMzNDkzOTAxMzA4NTM2MyI+IkRvZ2HEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibXV0ZWRfYnkiIG1zZ2lkPSI2MTQ3MDczODQ1MDk0MTgwMDAxIj4iWnZ1ayBqZSBpc2tsanXEjWlvL2xhIDx4bGlmZjpnIGlkPSJUSElSRF9QQVJUWSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fZXJyb3Jfd2lwZV9kYXRhIiBtc2dpZD0iNjYwODE2NTUyNDc4NTM1NDk2MiI+IkRvxaFsbyBqZSBkbyBpbnRlcm5vZyBwcm9ibGVtYSB1IHZlemkgc2EgdXJlxJFhamVtIGkgbW/FvmRhIMSHZSBiaXRpIG5lc3RhYmlsYW4gZG9rIG5lIG9iYXZpdGUgcmVzZXRvdmFuamUgbmEgZmFicmnEjWthIHBvZGXFoWF2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fZXJyb3JfbWFudWZhY3R1cmVyIiBtc2dpZD0iODA4Njg3MjQxNDc0NDIxMDY2OCI+IkRvxaFsbyBqZSBkbyBpbnRlcm5vZyBwcm9ibGVtYSB1IHZlemkgc2EgdXJlxJFhamVtLiBQb3RyYcW+aXRlIGRldGFsamUgb2QgcHJvaXp2b8SRYcSNYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGtfY2NfdXNzZF90b19kaWFsIiBtc2dpZD0iNTIwMjM0Mjk4NDc0OTk0Nzg3MiI+IlVTU0QgemFodGV2IGplIHByb21lbmplbiB1IERJQUwgemFodGV2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0a19jY191c3NkX3RvX3NzIiBtc2dpZD0iMjM0NTM2MDU5NDE4MTQwNTQ4MiI+IlVTU0QgemFodGV2IGplIHByb21lbmplbiB1IFNTIHphaHRldi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGtfY2NfdXNzZF90b191c3NkIiBtc2dpZD0iNzQ2NjA4NzY1OTk2NzE5MTY1MyI+IlVTU0QgemFodGV2IGplIHByb21lbmplbiB1IG5vdmkgVVNTRCB6YWh0ZXYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RrX2NjX3NzX3RvX2RpYWwiIG1zZ2lkPSIyMTUxMzA0NDM1Nzc1NTU3MTYyIj4iU1MgemFodGV2IGplIHByb21lbmplbiB1IERJQUwgemFodGV2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0a19jY19zc190b191c3NkIiBtc2dpZD0iMzk1MTg2MjE4ODEwNTMwNTU4OSI+IlNTIHphaHRldiBqZSBwcm9tZW5qZW4gdSBVU1NEIHphaHRldi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGtfY2Nfc3NfdG9fc3MiIG1zZ2lkPSI1NDcwNzY4ODU0OTkxNDUyNjk1Ij4iU1MgemFodGV2IGplIHByb21lbmplbiB1IG5vdmkgU1MgemFodGV2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl93b3JrX3Byb2ZpbGVfY29udGVudF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ2MDA1NTQ1NjQxMDM3NzA3NjQiPiJQcm9maWwgemEgV29yayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9taWRpX3BlcmlwaGVyYWxfbmFtZSIgbXNnaWQ9IjcyMjExMTM5ODc3NDEwMDM4MTciPiJBbmRyb2lkIFVTQiBwb3J0IHphIHBlcmlmZXJpanNrZSB1cmXEkWFqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9taWRpX3BlcmlwaGVyYWxfbWFudWZhY3R1cmVyX25hbWUiIG1zZ2lkPSI3MTc2NTI2MTcwMDA4OTcwMTY4Ij4iQW5kcm9pZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9taWRpX3BlcmlwaGVyYWxfcHJvZHVjdF9uYW1lIiBtc2dpZD0iNDk3MTgyNzg1OTE2NTI4MDQwMyI+IlVTQiBwb3J0IHphIHBlcmlmZXJpanNrZSB1cmXEkWFqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZsb2F0aW5nX3Rvb2xiYXJfb3Blbl9vdmVyZmxvd19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQ3OTcyODc4NjI5OTk0NDQ2MzEiPiJKb8WhIG9wY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZsb2F0aW5nX3Rvb2xiYXJfY2xvc2Vfb3ZlcmZsb3dfZGVzY3JpcHRpb24iIG1zZ2lkPSI1NTk3OTY5MjMwOTA3MjM4MDQiPiJaYXR2b3JpIHByZWtsb3BuaSBtZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4aW1pemVfYnV0dG9uX3RleHQiIG1zZ2lkPSI3NTQzMjg1Mjg2MTgyNDQ2MjU0Ij4iVXZlxIdhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsb3NlX2J1dHRvbl90ZXh0IiBtc2dpZD0iMzkzNzkwMjE2MjY0NDA2Mjg2NiI+IlphdHZvcmkiPC9zdHJpbmc+CisgICAgPHBsdXJhbHMgbmFtZT0ic2VsZWN0ZWRfY291bnQiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI3MTg3MzM5NDkyOTE1NzQ0NjE1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkl6YWJyYW5hIGplIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBzdGF2a2E8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5JemFicmFuZSBzdSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gc3RhdmtlPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5JemFicmFubyBqZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gc3RhdmtpPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iUmF6bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVmkgcG9kZcWhYXZhdGUgdmHFvm5vc3Qgb3ZpaCBvYmF2ZcWhdGVuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJPdm8gamUgdmHFvm5vIHpib2cgbGp1ZGkga29qaSB1xI1lc3R2dWp1LiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKaW5kZXggODhiMjYxZS4uOTU1NzI3YiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i0JfQsNC60LvRjtGH0LLQsNC90LUg0YHQtdCz0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0KHQutGA0LjRgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JHQtdC30L7Qv9Cw0YHQtdC9INGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodC40YHRgtC10LzQvdC+INC+0YIgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0LXQvSI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i0JLQutC70Y7Rh9Cy0LAg0LvQuNGH0L3QuCDQtNCw0L3QvdC4LCDQutCw0YLQviDQvdCw0L/RgNC40LzQtdGAINC90L7QvNC10YDQsCDQvdCwINC60YDQtdC00LjRgtC90Lgg0LrQsNGA0YLQuCDQuCDQv9Cw0YDQvtC70LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLQo9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGD0LLQtdC70LjRh9C10L3QuNC10YLQviDQvdCwINC00LjRgdC/0LvQtdGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItCj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0L3QuNCy0L7RgtC+INC90LAg0LzQsNGJ0LDQsdCwINC4INC/0L7Qt9C40YbQuNC+0L3QuNGA0LDQvdC10YLQviDQvdCwINC00LjRgdC/0LvQtdGPLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+ItCY0LfQstGK0YDRiNCy0LDQvdC1INC90LAg0LbQtdGB0YLQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+ItCc0L7QttC10YLQtSDQtNCwINC00L7QutC+0YHQstCw0YLQtSwg0LTQsCDQv9GA0LXQutCw0YDQstCw0YLQtSDQv9GA0YrRgdGCLCDQtNCwINGB0YrQsdC40YDQsNGC0LUg0L/RgNGK0YHRgtC4INC4INC00LAg0LjQt9Cy0YrRgNGI0LLQsNGC0LUg0LTRgNGD0LPQuCDQttC10YHRgtC+0LLQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLQtNC10LDQutGC0LjQstC40YDQsNC90LUg0LjQu9C4INC/0YDQvtC80Y/QvdCwINC90LAg0LvQtdC90YLQsNGC0LAg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC00LXQsNC60YLQuNCy0LjRgNCwINC70LXQvdGC0LDRgtCwINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQuNC70Lgg0LTQsCDQtNC+0LHQsNCy0Y8g0Lgg0L/RgNC10LzQsNGF0LLQsCDRgdC40YHRgtC10LzQvdC4INC40LrQvtC90LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ItC40LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDRgNC+0LvRj9GC0LAg0L3QsCDQu9C10L3RgtCwINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCg0LDQt9GA0LXRiNCw0LLQsCDQvdCwINC/0YDQuNC70L7QttC10L3QuNC10YLQviDQtNCwINC/0YDQsNCy0Lgg0YHQvdC40LzQutC4INC4INCy0LjQtNC10L7QutC70LjQv9C+0LLQtSDRgSDQutCw0LzQtdGA0LDRgtCwLiDQotC+0LLQsCDRgNCw0LfRgNC10YjQtdC90LjQtSDQvNGDINC/0L7Qt9Cy0L7Qu9GP0LLQsCDQtNCwINGPINC40LfQv9C+0LvQt9Cy0LAg0L/QviDQstGB0Y/QutC+INCy0YDQtdC80LUg0LHQtdC3INC/0L7RgtCy0YrRgNC20LTQtdC90LjQtSDQvtGCINCy0LDRiNCwINGB0YLRgNCw0L3QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0LrQvtC90YLRgNC+0LvQuNGA0LDQvdC1INC90LAg0LLQuNCx0YDQuNGA0LDQvdC10YLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0KDQsNC30YDQtdGI0LDQstCwINC90LAg0L/RgNC40LvQvtC20LXQvdC40LXRgtC+INC00LAg0LrQvtC90YLRgNC+0LvQuNGA0LAg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INC30LAg0LLQuNCx0YDQsNGG0LjRjy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i0LrQvtC90YLRgNC+0LvQuNGA0LDQvdC1INC90LAg0YTQtdC90LXRgNGH0LXRgtC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDQutC+0L3RgtGA0L7Qu9C40YDQsCDRhNC10L3QtdGA0YfQtdGC0L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i0LTQuNGA0LXQutGC0L3QviDQvtCx0LDQttC00LDQvdC1INC00L4g0YLQtdC70LXRhNC+0L3QvdC4INC90L7QvNC10YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLQoNCw0LfRgNC10YjQsNCy0LAg0L3QsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4g0LTQsCDRgdC1INC+0LHQsNC20LTQsCDQsdC10Lcg0LLQsNGI0LAg0L3QsNC80LXRgdCwINC00L4g0YLQtdC70LXRhNC+0L3QvdC4INC90L7QvNC10YDQsCwg0LrQvtC10YLQviDQvNC+0LbQtSDQtNCwINC00L7QstC10LTQtSDQtNC+INC90LXQvtGH0LDQutCy0LDQvdC+INGC0LDQutGB0YPQstCw0L3QtSDQuNC70Lgg0L7QsdCw0LbQtNCw0L3QuNGPLiDQntCx0YrRgNC90LXRgtC1INCy0L3QuNC80LDQvdC40LUsINGH0LUg0YLQvtCy0LAg0L3QtSDQvNGDINC/0L7Qt9Cy0L7Qu9GP0LLQsCDQtNCwINC40LfQstGK0YDRiNCy0LAg0L7QsdCw0LbQtNCw0L3QuNGPINC00L4g0YHQv9C10YjQvdC40YLQtSDRgdC70YPQttCx0LguINCX0LvQvtC90LDQvNC10YDQtdC90LjRgtC1INC/0YDQuNC70L7QttC10L3QuNGPINC80L7Qs9Cw0YIg0LTQsCDQstC4INCy0YrQstC70LXQutCw0YIg0LIg0YDQsNC30YXQvtC00LgsINC60LDRgtC+INC40LfQstGK0YDRiNCy0LDRgiDQvtCx0LDQttC00LDQvdC40Y8g0LHQtdC3INC/0L7RgtCy0YrRgNC20LTQtdC90LjQtSDQvtGCINCy0LDRiNCwINGB0YLRgNCw0L3QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ItC00L7RgdGC0YrQvyDQtNC+INGD0YHQu9GD0LPQsNGC0LAg0LfQsCDQvdC10LfQsNCx0LDQstC90Lgg0YHRitC+0LHRidC10L3QuNGPINC30LAg0L7QsdCw0LbQtNCw0L3QuNGPIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQmNC30YDRj9C30LLQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCa0L7Qv9C40YDQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQn9C+0YHRgtCw0LLRj9C90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItCf0L7RgdGC0LDQstGP0L3QtSDQutCw0YLQviDQvdC10YTQvtGA0LzQsNGC0LjRgNCw0L0g0YLQtdC60YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i0JfQsNC80Y/QvdCwLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItCY0LfRgtGA0LjQstCw0L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i0JrQvtC/0LjRgNCw0L3QtSDQvdCwIFVSTCDQsNC00YDQtdGB0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLQmNC30LHQvtGAINC90LAg0YLQtdC60YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i0J7RgtC80Y/QvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLQktGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRgtC10LrRgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCU0L7QsdCw0LLRj9C90LUg0LIg0YDQtdGH0L3QuNC60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCY0LfRgtGA0LjQstCw0L3QtSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQn9GA0L7QvNGP0L3QsCDQvdCwINGC0LDQv9C10YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCh0LvRg9GI0LDRgtC10Lsg0L3QsCDQuNC30LLQtdGB0YLQuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLQlNC+0YHRgtCw0LLRh9C40Log0L3QsCDRg9GB0LvQvtCy0LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCf0L7QvNC+0YnQvdC40Log0LfQsCDQuNC30LLQtdGB0YLQuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g0LUg0LDQutGC0LjQstC40YDQsNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4g0LUg0LDQutGC0LjQstC40YDQsNC90LAg0L7RgiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQlNC+0LrQvtGB0L3QtdGC0LUg0LfQsCDRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINC80YDQtdC20LDRgtCwLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLQkNC60YLRg9Cw0LvQuNC30LjRgNCw0L3QviDQvtGCINCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0LAg0LLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i0JjQt9GC0YDQuNGC0L4g0L7RgiDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNCwINCy0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItChINGG0LXQuyDRg9C00YrQu9C20LDQstCw0L3QtSDQvdCwINC20LjQstC+0YLQsCDQvdCwINCx0LDRgtC10YDQuNGP0YLQsCDRgNC10LbQuNC80YrRgiDQt9CwINC30LDQv9Cw0LfQstCw0L3QtdGC0L4g0Lkg0L3QsNC80LDQu9GP0LLQsCDQtdGE0LXQutGC0LjQstC90L7RgdGC0YLQsCDQvdCwINGD0YHRgtGA0L7QudGB0YLQstC+0YLQviDQstC4INC4INC+0LPRgNCw0L3QuNGH0LDQstCwINCy0LjQsdGA0LjRgNCw0L3QtdGC0L4sINGD0YHQu9GD0LPQuNGC0LUg0LfQsCDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INC4INC/0L7QstC10YfQtdGC0L4g0LTQsNC90L3QuCDQvdCwINC30LDQtNC10L0g0L/Qu9Cw0L0uINCf0YDQuNC70L7QttC10L3QuNGP0YLQsCDQt9CwINC10LvQtdC60YLRgNC+0L3QvdCwINC/0L7RidCwLCDRgdGK0L7QsdGJ0LXQvdC40Y8g0Lgg0LTRgC4sINC60L7QuNGC0L4g0YDQsNC30YfQuNGC0LDRgiDQvdCwINGB0LjQvdGF0YDQvtC90LjQt9C40YDQsNC90LUsINC80L7QttC1INC00LAg0L3QtSDRgdC1INCw0LrRgtGD0LDQu9C40LfQuNGA0LDRgiwg0L7RgdCy0LXQvSDQsNC60L4g0L3QtSDQs9C4INC+0YLQstC+0YDQuNGC0LUuXG5cbtCg0LXQttC40LzRitGCINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LHQsNGC0LXRgNC40Y/RgtCwINGB0LUg0LjQt9C60LvRjtGH0LLQsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+LCDQutC+0LPQsNGC0L4g0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+INCy0Lgg0YHQtSDQt9Cw0YDQtdC20LTQsC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItCR0LvQvtC60LjRgNCw0L3Qvjog0KLQtdC30Lgg0LjQt9Cy0LXRgdGC0LjRjyDQvdC40LrQvtCz0LAg0LTQsCDQvdC1INGB0LUg0L/QvtC60LDQt9Cy0LDRgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQnNCw0LvQvtCy0LDQttC90L46INCf0L7QutCw0LfQstCw0L3QtSDQsdC10Lcg0LfQstGD0LrQvtCyINGB0LjQs9C90LDQuyDQsiDQtNC+0LvQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwINGB0L/QuNGB0YrQutCwINGBINC40LfQstC10YHRgtC40Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCd0L7RgNC80LDQu9C90L46INCi0LXQt9C4INC40LfQstC10YHRgtC40Y8g0LTQsCDRgdC1INC/0L7QutCw0LfQstCw0YIg0LHQtdC3INC30LLRg9C60L7QsiDRgdC40LPQvdCw0LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+ItCS0LDQttC90L46INCf0L7QutCw0LfQstCw0L3QtSDQsiDQs9C+0YDQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwINGB0L/QuNGB0YrQutCwINGBINC40LfQstC10YHRgtC40Y8g0Lgg0LjQt9C00LDQstCw0L3QtSDQvdCwINC30LLRg9C60L7QsiDRgdC40LPQvdCw0LsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i0KHQv9C10YjQvdC+OiDQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQtdC60YDQsNC90LAg0Lgg0LjQt9C00LDQstCw0L3QtSDQvdCwINC30LLRg9C60L7QsiDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCX0LAgJTEkZCDQvNC40L3Rg9GC0LggKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0JfQsCDQtdC00L3QsCDQvNC40L3Rg9GC0LAgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCY0LfQsdGA0LDRhdGC0LUgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i0JTRgNGD0LPQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLQl9Cw0LTQsNC00L7RhdGC0LUg0LLQsNC20L3QvtGB0YLRgtCwINC90LAg0YLQtdC30Lgg0LjQt9Cy0LXRgdGC0LjRjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItCi0L7QstCwINC1INCy0LDQttC90L4g0LfQsNGA0LDQtNC4INGD0YfQsNGB0YLQstCw0YnQuNGC0LUg0YXQvtGA0LAuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCmluZGV4IDkxMjQ0ZTYuLjZlN2E3N2YgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4KaP4KaW4Kao4KaHIOCmsuCmlSDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IuCnr+Cnr+CnrysiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPuCmn+CmvykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Kay4KeB4KaV4Ka+4Kao4KeLIOCmrOCmv+Cmt+Cmr+CmvOCmrOCmuOCnjeCmpOCngSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCmqOCmv+CmsOCmvuCmquCmpiDgpq7gp4vgpqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOCmuOCmv+CmuOCnjeCmn+Cnh+CmriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4Kas4KeN4Kav4KaV4KeN4Kak4Ka/4KaX4KakIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLgppXgp43gprDgp4fgpqHgpr/gpp8g4KaV4Ka+4Kaw4KeN4Kah4KeH4KawIOCmqOCmruCnjeCmrOCmsCDgppMg4Kaq4Ka+4Ka44KaT4Kav4Ka84Ka+4Kaw4KeN4Kah4KaX4KeB4Kay4Ka/4KawIOCmruCmpOCniyDgpqzgp43gpq/gppXgp43gpqTgpr/gppfgpqQg4Kak4Kal4KeN4KavIOCmheCmqOCnjeCmpOCmsOCnjeCmreCngeCmleCnjeCmpCDgppXgprDgp4fgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IuCmquCnjeCmsOCmpuCmsOCnjeCmtuCmqOCnh+CmsCDgpqzgp4PgprngpqTgp43gpqTgprDgp4DgppXgprDgpqMg4Kas4KeN4Kav4Kas4Ka44KeN4Kal4Ka+IOCmqOCmv+Cmr+CmvOCmqOCnjeCmpOCnjeCmsOCmoyDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24Kao4KeH4KawIOCmnOCngeCmruCnh+CmsCDgprjgp43gpqTgprAg4KaP4Kas4KaCIOCmheCmrOCmuOCnjeCmpeCmvuCmqCDgpqjgpr/gprDgp43gpqfgpr7gprDgpqgg4Kao4Ka/4Kav4Ka84Kao4KeN4Kak4KeN4Kaw4KajIOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuCmheCmmeCnjeCml+CmreCmmeCnjeCml+Cmv+CmsCDgppXgpr7gppzgppfgp4HgprLgpr8g4Ka44Kau4KeN4Kaq4Ka+4Kam4KaoIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4KaG4Kay4Kak4KeLIOCmmuCmvuCmqiDgpqbgp4fgppPgpq/gprzgpr4sIOCmuOCni+Cmr+CmvOCmvuCmh+Cmqiwg4Kaq4Ka/4Kae4KeN4KaaIOCmleCmsOCmviDgpo/gpqzgpoIg4KaF4Kao4KeN4Kav4Ka+4Kao4KeN4KavIOCmheCmmeCnjeCml+CmreCmmeCnjeCml+Cmv+CmsCDgppXgpr7gppzgppfgp4HgprLgpr8g4Ka44Kau4KeN4Kaq4Ka+4Kam4KaoIOCmleCmsOCmpOCnhyDgpqrgpr7gprDgpqzgp4fgpqjgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgprjgp43gpqXgpr/gpqTgpr8g4Kam4Kao4KeN4KahIOCmqOCmv+Cmt+CnjeCmleCnjeCmsOCmv+Cmr+CmvCDgpoXgpqXgpqzgpr4g4Ka44KaC4Ka24KeL4Kan4KaoIOCmleCmsOCnhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpoXgp43gpq/gpr7gpqrgp43gprLgpr/gppXgp4fgprbgpr7gpqjgppXgp4cg4Ka44KeN4Kal4Ka/4Kak4Ka/IOCmpuCmqOCnjeCmoSDgpoXgppXgp43gprfgpq4g4KaV4Kaw4Kak4KeHIOCmj+CmrOCmgiDgprjgpr/gprjgp43gpp/gp4fgpq4g4KaG4KaH4KaV4Kao4KaX4KeB4Kay4Ka/IOCmuOCmsOCmvuCmpOCnhyDgpqbgp4fgpq/gprzgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i4Ka44KeN4Kal4Ka/4Kak4Ka/IOCmpuCmqOCnjeCmoeCnhyDgpqXgpr7gppXgp4HgpqgiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgppXgp43gpq/gpr7gpq7gp4fgprDgpr7gprAg4Ka44Ka+4Ka54Ka+4Kav4KeN4Kav4KeHIOCmm+CmrOCmvyDgpqTgp4HgprLgpqTgp4cg4KaTIOCmreCmv+CmoeCmv+CmkyDgpqTgp4jgprDgpr8g4KaV4Kaw4Kak4KeHIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmvuCmqOCmn+Cmv+CmleCnhyDgpq7gpp7gp43gppzgp4HgprAg4KaV4Kaw4KeH4Ke3IOCmj+CmhyDgpoXgpqjgp4Hgpq7gpqTgpr/gpp/gpr8g4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4Kaf4Ka/4KaV4KeHIOCmhuCmquCmqOCmvuCmsCDgpqjgpr/gprbgp43gpprgpq/gprzgpqTgpr4g4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmr+Cnh+CmleCni+CmqOCniyDgprjgpq7gpq/gprwg4KaV4KeN4Kav4Ka+4Kau4KeH4Kaw4Ka+IOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgpqTgp4cg4Kau4Kae4KeN4Kac4KeB4KawIOCmleCmsOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgppXgpq7gp43gpqrgpqgg4Kao4Ka/4Kav4Ka84Kao4KeN4Kak4KeN4Kaw4KajIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaV4KeHIOCmleCmruCnjeCmquCmlSDgpqjgpr/gpq/gprzgpqjgp43gpqTgp43gprDgpqMg4KaV4Kaw4Kak4KeHIOCmpuCnh+Cmr+CmvOCntyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgpqvgp43gprLgp43gpq/gpr7gprbgprLgpr7gpofgpp8g4Kao4Ka/4Kav4Ka84Kao4KeN4Kak4KeN4Kaw4KajIOCmleCmsOCnhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaV4KeHIOCmn+CmsOCnjeCmmuCmsuCmvuCmh+CmnyDgpqjgpr/gpq/gprzgpqjgp43gpqTgp43gprDgpqMg4KaV4Kaw4Kak4KeHIOCmpuCnh+Cmr+CmvOCntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCmuOCmsOCmvuCmuOCmsOCmvyDgpqvgp4vgpqgg4Kao4Kau4KeN4Kas4Kaw4KaX4KeB4Kay4Ka/4Kak4KeHIOCmleCmsiDgppXgprDgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4Kaf4Ka/4KaV4KeHIOCmhuCmquCmqOCmvuCmsCDgprngprjgp43gpqTgppXgp43gprfgp4fgpqog4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmq+Cni+CmqCDgpqjgpq7gp43gpqzgprDgppfgp4HgprLgpr/gpqTgp4cg4KaV4KayIOCmleCmsOCmpOCnhyDgpq7gpp7gp43gppzgp4HgprAg4KaV4Kaw4KeH4Ke3IOCmj+Cmn+CmvyDgpoXgpqrgp43gprDgpqTgp43gpq/gpr7gprbgpr/gpqQg4Kaq4Kaw4Ka/4Kau4Ka+4KajIOCmluCmsOCmmuCmviDgpqzgpr4g4KaV4Kay4KeH4KawIOCmleCmvuCmsOCmoyDgprngpqTgp4cg4Kaq4Ka+4Kaw4KeH4Ke3IOCmruCmqOCnhyDgprDgpr7gppbgpqzgp4fgpqgsIOCmj+Cmn+CmvyDgpoXgp43gpq/gpr7gpqrgp43gprLgpr/gppXgp4fgprbgpr7gpqjgpp/gpr/gprAg4Kam4KeN4Kas4Ka+4Kaw4Ka+IOCmnOCmsOCngeCmsOCmvyDgpqjgpq7gp43gpqzgprDgppfgp4HgprLgpr/gpqTgp4cg4KaV4KayIOCmleCmsOCmvuCmleCnhyDgpoXgpqjgp4Hgpq7gpqTgpr8g4Kam4KeH4Kav4Ka8IOCmqOCmvuCntyDgppXgp43gprfgpqTgpr/gppXgpr7gprDgppUg4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24Ka+4Kao4KaX4KeB4Kay4Ka/IOCmhuCmquCmqOCmvuCmsCDgprjgpq7gp43gpq7gpqTgpr8g4Kab4Ka+4Kah4Ka84Ka+4KaHIOCmleCmsiDgppXgprDgpr7gprAg4Kar4Kay4KeHIOCmhuCmquCmqOCmvuCmleCnhyDgpoXgprngp4fgpqTgp4HgppUg4KaF4Kaw4KeN4KalIOCmquCnjeCmsOCmpuCmvuCmqCDgppXgprDgpqTgp4cg4Ka54Kak4KeHIOCmquCmvuCmsOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCmquCmsOCmv+Cmt+Cnh+CmrOCmvuCmpOCnhyDgpoXgp43gpq/gpr7gppXgp43gprjgp4fgprgiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCmleCmvuCmn+CngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KaF4Kao4KeB4Kay4Ka/4Kaq4Ka/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4KaG4Kaf4KaV4Ka+4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgpqrgp43gprLgp4fgpofgpqgg4Kaf4KeH4KaV4KeN4Ka44KafIOCmueCmv+CmuOCmvuCmrOCnhyDgpobgpp/gppXgpr7gpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCmquCnjeCmsOCmpOCmv+CmuOCnjeCmpeCmvuCmquCmqCDgppXgprDgp4HgpqguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Kau4KeB4Kab4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4KaF4Kao4KeB4Kay4Ka/4Kaq4Ka/IOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCmquCmvuCmoOCnjeCmryDgpqjgpr/gprDgp43gpqzgpr7gpprgpqgg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgpqrgp4LgprDgp43gpqzgpr7gpqzgprjgp43gpqXgpr7gpq/gprwg4Kar4Ka/4Kaw4KeB4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgpqrgp4HgpqjgprDgpr7gpq/gprwg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCmquCmvuCmoOCnjeCmryDgpqjgpr/gprDgp43gpqzgpr7gpprgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KaF4Kat4Ka/4Kan4Ka+4Kao4KeHIOCmr+CngeCmleCnjeCmpCDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuCmruCngeCmm+CngeCmqCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgppPgpq/gprzgpr7gprLgpqrgp4fgpqrgpr7gprAg4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4KaoIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+CmsCDgprbgp43gprDgp4vgpqTgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCmtuCmsOCnjeCmpCDgpqrgp43gprDgpqbgpr7gpqjgppXgpr7gprDgp4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr8g4Ka44Ka54Ka+4Kav4Ka84KaVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4Ka44KaV4KeN4Kaw4Ka/4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCmj+CmsCDgpqbgp43gpqzgpr7gprDgpr4gVlBOIOCmuOCmleCnjeCmsOCmv+Cmr+CmvCDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Kao4KeH4Kaf4KaT4Kav4Ka84Ka+4Kaw4KeN4KaVIOCmquCmsOCmv+CmmuCmvuCmsuCmqOCmviDgppXgprDgpqTgp4cg4Ka44KeN4Kaq4Kaw4KeN4Ka2IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLgpobgpqrgpqjgpr7gprAg4Kaq4KeN4Kaw4Ka24Ka+4Ka44KaVIOCmpuCnjeCmrOCmvuCmsOCmviDgpobgpqrgpqHgp4fgpp8g4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+CnhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4KaG4Kaq4Kao4Ka+4KawIOCmquCnjeCmsOCmtuCmvuCmuOCmlSDgpqbgp43gpqzgpr7gprDgpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmviDgprngpq/gprzgp4fgppvgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCmrOCnjeCmr+CmvuCmn+CmsOCmv+CmsCDgprLgpr7gpofgpqsg4KaJ4Kao4KeN4Kao4KakIOCmleCmsOCmpOCnhyDgprjgprngpr7gpq/gprzgpqTgpr4g4KaV4Kaw4Kak4KeHLCDgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44Ka+4Ka24KeN4Kaw4Kav4Ka84KaV4Ka+4Kaw4KeAIOCmhuCmquCmqOCmvuCmsCDgpqHgpr/gpq3gpr7gpofgprjgp4fgprAg4KaV4Ka+4Kaw4KeN4Kav4Ka44Kau4KeN4Kaq4Ka+4Kam4Kao4Ka+IOCmueCnjeCmsOCmvuCmuCDgppXgprDgp4cg4KaP4Kas4KaCIOCmleCmruCnjeCmquCmqCwg4KaF4Kas4Ka44KeN4Kal4Ka+4KaoIOCmquCmsOCmv+Cmt+Cnh+CmrOCmvuCmuOCmruCnguCmuSDgpo/gpqzgpoIg4KaF4Kan4Ka/4KaV4Ka+4KaC4Ka2IOCmrOCnjeCmr+CmvuCmleCml+CnjeCmsOCmvuCmieCmqOCnjeCmoSDgpqHgp4fgpp/gpr4g4Ka44KeA4Kau4Ka/4KakIOCmleCmsOCnh+CntyDgpofgpq7gp4fgprIsIOCmrOCmvuCmsOCnjeCmpOCmvuCmquCnjeCmsOCnh+CmsOCmoyDgpo/gpqzgpoIg4KaF4Kao4KeN4Kav4Ka+4Kao4KeN4KavIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmvuCmqOCml+CngeCmsuCmv+CmleCnhyDgpq/gp4fgppfgp4HgprLgpr8g4Ka44Ka/4KaZ4KeN4KaV4KeH4KawIOCmieCmquCmsCDgpqjgpr/gprDgp43gpq3gprAg4KaV4Kaw4KeHIOCmuOCnh+Cml+CngeCmsuCmv+CmleCnhyDgpobgpqrgpqjgpr8g4Kao4Ka+IOCmluCni+CmsuCmviDgpqrgprDgp43gpq/gpqjgp43gpqQg4Kao4Ka+4KaTIOCmhuCmquCmoeCnh+CmnyDgprngpqTgp4cg4Kaq4Ka+4Kaw4KeH4Ke3XG5cbuCmhuCmquCmqOCmvuCmsCDgpqHgpr/gpq3gpr7gpofgprjgpp/gpr/gppXgp4cg4Kav4KaW4KaoIOCmmuCmvuCmsOCnjeCmnCDgppXgprDgpr4g4Ka54Kav4Ka8IOCmpOCmluCmqCDgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8g4Ka44Ka+4Ka24KeN4Kaw4Kav4Ka84KaV4Ka+4Kaw4KeAIOCmuOCnjeCmrOCmr+CmvOCmguCmleCnjeCmsOCmv+Cmr+CmvOCmreCmvuCmrOCnhyDgpqzgpqjgp43gpqcg4Ka54Kav4Ka84KeHIOCmr+CmvuCmr+CmvOCntyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4KaF4Kas4Kaw4KeB4Kam4KeN4KanOiDgpo/gpocg4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/4KaX4KeB4Kay4Ka/IOCmleCmluCmqOCmhyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka54Kas4KeHIOCmqOCmviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLgpqjgpr/gpq7gp43gpqg6IOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmvyDgpqTgpr7gprLgpr/gppXgpr7gprAg4Kao4KeA4Kaa4KeH4KawIOCmheCmguCmtuCnhyDgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24KaoIOCmleCmsOCmviDgprngpq/gprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCmuOCmvuCmp+CmvuCmsOCmqDog4KaP4KaHIOCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmv+Cml+CngeCmsuCmvyDgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24KaoIOCmleCmsOCmviDgprngpq/gprwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCmieCmmuCnjeCmmjog4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/IOCmpOCmvuCmsuCmv+CmleCmvuCmsCDgprbgp4DgprDgp43gprfgp4cg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgppzgprDgp4HgprDgp4A6IOCmuOCnjeCmleCnjeCmsOCngOCmqOCnh+CmsCDgpongpqrgprDgp4cg4Kaq4KeN4Kaw4Kam4Kaw4KeN4Ka24Ka/4KakIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4Kau4Ka/4Kao4Ka/4Kaf4KeH4KawIOCmnOCmqOCnjeCmryAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kaq4Kaw4KeN4Kav4Kao4KeN4KakKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgpq7gpr/gpqjgpr/gpp/gp4fgprAg4Kac4Kao4KeN4KavICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgpqrgprDgp43gpq/gpqjgp43gpqQpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+4Kaf4Ka/IOCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmqCDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeHPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4Kas4Ka/4Kas4Ka/4KanIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCmhuCmquCmqOCmvyDgpo/gpocg4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/4KaX4KeB4Kay4Ka/4KawIOCml+CngeCmsOCngeCmpOCnjeCmrCDgprjgp4fgpp8g4KaV4Kaw4KeH4Kab4KeH4Kao4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgprLgp4vgppXgppzgpqgg4Kac4Kah4Ka84Ka/4KakIOCmpeCmvuCmleCmvuCmsCDgppXgpr7gprDgpqPgp4cg4KaP4Kaf4Ka/IOCml+CngeCmsOCngeCmpOCnjeCmrOCmquCnguCmsOCnjeCmo+ClpCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKaW5kZXggMGQyYjQ2Yy4uYmJlOTg4NyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvcXVlamEgYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiIrOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpbmd1dCBhbWFnYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RlIHNlZ3VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iSW5jbG91IGRhZGVzIHBlcnNvbmFscyBjb20gYXJhIG7Dum1lcm9zIGRlIHRhcmdldGVzIGRlIGNyw6hkaXQgaSBjb250cmFzZW55ZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sYSBsXCdhbXBsaWFjacOzIGRlIGxhIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkNvbnRyb2xhIGVsIG5pdmVsbCBpIGVsIHBvc2ljaW9uYW1lbnQgZGVsIHpvb20gZGUgbGEgcGFudGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iVXRpbGl0emEgZ2VzdG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJQb3QgdG9jYXIsIGxsaXNjYXIsIHBlc3NpZ2FyIGkgdXRpbGl0emFyIGFsdHJlcyBnZXN0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iZGVzYWN0aXZhciBvIG1vZGlmaWNhciBsYSBiYXJyYSBkXCdlc3RhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgZGVzYWN0aXZpIGxhIGJhcnJhIGRcJ2VzdGF0IG8gYWZlZ2VpeGkgaSBlbGltaW5pIGljb25lcyBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iYXBhcsOoaXhlciBhIGxhIGJhcnJhIGRcJ2VzdGF0Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIGZhY2kgZm90b3MgaSB2w61kZW9zIGFtYiBsYSBjw6BtZXJhLiBBcXVlc3QgcGVybcOtcyBwZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgdXRpbGl0emkgbGEgY8OgbWVyYSBlbiBxdWFsc2V2b2wgbW9tZW50IHNlbnNlIGxhIHRldmEgY29uZmlybWFjacOzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgbGEgdmlicmFjacOzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgY29udHJvbGkgZWwgdmlicmFkb3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xhIGxhIGxsYW50ZXJuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iUGVybWV0IHF1ZSBsXCdhcGxpY2FjacOzIGNvbnRyb2xpIGxhIGxsYW50ZXJuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJ0cnVjYXIgZGlyZWN0YW1lbnQgYSBuw7ptZXJvcyBkZSB0ZWzDqGZvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgdHJ1cXVpIGEgbsO6bWVyb3MgZGUgdGVsw6hmb24gc2Vuc2UgbGEgdGV2YSBpbnRlcnZlbmNpw7MuIEFxdWVzdGEgYWNjacOzIHBvdCBwcm9kdWlyIGPDoHJyZWNzIG8gdHJ1Y2FkZXMgaW5lc3BlcmFkZXMuIFRpbmd1ZXMgZW4gY29tcHRlIHF1ZSBhaXjDsiBubyBwZXJtZXQgcXVlIGxcJ2FwbGljYWNpw7MgdHJ1cXVpIGEgbsO6bWVyb3MgZFwnZW1lcmfDqG5jaWEuIExlcyBhcGxpY2FjaW9ucyBtYWxpY2lvc2VzIHBvZGVuIGZlciB0cnVjYWRlcyBzZW5zZSBsYSB0ZXZhIGNvbmZpcm1hY2nDsywgY29zYSBxdWUgZXQgcG90IGZlciBnYXN0YXIgZGluZXJzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjw6lzIGFsIHNlcnZlaSBkZSB0cnVjYWRlcyBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlJldGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iRW5nYW54YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iRW5nYW54YSBjb20gYSB0ZXh0IHNlbnNlIGZvcm1hdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iVm9scyBzdWJzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1cHJpbWVpeCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWEgbFwnVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWNjaW9uYSBlbCB0ZXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNmw6lzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSZWbDqXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZWNjacOzIGRlIHRleHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWZlZ2VpeCBhbCBkaWNjaW9uYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXByaW1laXgiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2FudmlhIGVsIGZvbnMgZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJPaWVudCBkZSBub3RpZmljYWNpb25zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZcOvZG9yIGRlIGNvbmRpY2lvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RlbnQgZGUgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFjdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGhhIGFjdGl2YXQgVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jYSBwZXIgZ2VzdGlvbmFyIGxhIHhhcnhhLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJMXCdhZG1pbmlzdHJhZG9yIGxcJ2hhIGFjdHVhbGl0emF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJMXCdhZG1pbmlzdHJhZG9yIGhvIGhhIHN1cHJpbWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQZXIgdGFsIGRcJ2F1Z21lbnRhciBsYSBkdXJhZGEgZGUgbGEgYmF0ZXJpYSwgbGEgZnVuY2nDsyBkXCdlc3RhbHZpIGRlIGJhdGVyaWEgcmVkdWVpeCBlbCByZW5kaW1lbnQgZGVsIGRpc3Bvc2l0aXUgaSBlbiBsaW1pdGEgbGEgdmlicmFjacOzIGkgbGEgbWFqb3JpYSBkZSBkYWRlcyBlbiBzZWdvbiBwbGEuIMOJcyBwb3NzaWJsZSBxdWUgZWwgY29ycmV1IGVsZWN0csOybmljLCBsYSBtaXNzYXRnZXJpYSBpIGxhIHJlc3RhIGRcJ2FwbGljYWNpb25zIHF1ZSBzZSBzaW5jcm9uaXR6ZW4gYW1iIGZyZXHDvMOobmNpYSBubyBzXCdhY3R1YWxpdHppbiBsbGV2YXQgcXVlIGxlcyBvYnJpcy5cblxuTFwnZXN0YWx2aSBkZSBiYXRlcmlhIGVzIGRlc2FjdGl2YSBhdXRvbcOgdGljYW1lbnQgbWVudHJlIGVsIGRpc3Bvc2l0aXUgc1wnZXN0w6AgY2FycmVnYW50LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvcXVlamFkYTogbm8gbW9zdHJhIG1haSBhcXVlc3RlcyBub3RpZmljYWNpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkJhaXhhOiBtb3N0cmEgZGUgbWFuZXJhIHNpbGVuY2lvc2EgYSBsYSBwYXJ0IGluZmVyaW9yIGRlIGxhIGxsaXN0YSBkZSBub3RpZmljYWNpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IG1vc3RyYSBhcXVlc3RlcyBub3RpZmljYWNpb25zIGRlIG1hbmVyYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJBbHRhOiBtb3N0cmEgYSBsYSBwYXJ0IHN1cGVyaW9yIGRlIGxhIGxsaXN0YSBkZSBub3RpZmljYWNpb25zIGkgZW1ldCB1biBzbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQ6IG1vc3RyYSBhIGxhIHBhbnRhbGxhIGkgZW1ldCB1biBzbyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RHVyYW50ICUxJGQgbWludXRzIChmaW5zIGEgbGVzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudCAxIG1pbnV0IChmaW5zIGEgbGVzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5TZWxlY2Npb25hdHM6IDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkFsdHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJUdSBoYXMgZGVmaW5pdCBsYSBpbXBvcnTDoG5jaWEgZFwnYXF1ZXN0ZXMgbm90aWZpY2FjaW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkFxdWVzdCBtaXNzYXRnZSDDqXMgaW1wb3J0YW50IHBlciBsZXMgcGVyc29uZXMgaW1wbGljYWRlcy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCmluZGV4IDRjNTU0YmMuLmY1NzYzZjkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtMjI1LDYgKzIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IlphbWtub3V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNrcnl0w70gb2JzYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJOb3V6b3bDvSByZcW+aW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTeXN0w6ltIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Ik9zb2Juw60iPC9zdHJpbmc+CkBAIC0yNTcsNiArMjU4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlNsZWRvdsOhbsOtIHphaHJudWplIG9zb2Juw60gw7pkYWplLCBqYWtvIGpzb3UgbmFwxZnDrWtsYWQgxI3DrXNsYSBrcmVkaXRuw61jaCBrYXJldCBhwqBoZXNsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+Ik5hc3RhdmVuw60genbEm3TFoWVuw60gb2JzYWh1IG9icmF6b3ZreSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJVcsSNdWplIHVtw61zdMSbbsOtIGHCoMO6cm92ZcWIIHDFmWlibMOtxb5lbsOtIGRpc3BsZWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IlByb3bDoWTEm27DrSBnZXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJNxa/FvmUgcHJvdsOhZMSbdCBnZXN0YSBrbGVwbnV0w60sIHDFmWVqZXTDrSwgc3Rhxb5lbsOtIHByc3TFryBhwqBkYWzFocOtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Inpha8OhesOhbsOtIMSNaSB6bcSbbnkgc3Rhdm92w6lobyDFmcOhZGt1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlVtb8W+xYh1amUgYXBsaWthY2kgemFrw6F6YXQgc3Rhdm92w70gxZnDoWRlayBuZWJvIHDFmWlkYXQgxI1pIG9kZWJyYXQgc3lzdMOpbW92w6kgaWtvbnkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InZ5ZMOhdsOhbsOtIHNlIHphIHN0YXZvdsO9IMWZw6FkZWsiPC9zdHJpbmc+CkBAIC0zNTUsOCArMzU4LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJVbW/FvsWIdWplIGFwbGlrYWNpIHBvxZlpem92YXQgZm90b2dyYWZpZSBhIHZpZGVhIHBvbW9jw60gZm90b2FwYXLDoXR1LiBUb3RvIG9wcsOhdm7Em27DrSB1bW/FvsWIdWplIGFwbGlrYWNpIHBvdcW+w612YXQgZm90b2FwYXLDoXQga2R5a29saXYgaSBiZXogdmHFoWVobyBzdm9sZW7DrS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ib3Zsw6Fkw6Fuw60gdmlicmFjw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlVtb8W+xYh1amUgYXBsaWthY2kgb3Zsw6FkYXQgdmlicmFjZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ib3Zsw6Fkw6Fuw60ga29udHJvbGt5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJVbW/FvsWIdWplIGFwbGlrYWNpIG92bMOhZGF0IHN2w610aWxudS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJwxZnDrW3DqSB2b2zDoW7DrSBuYSB0ZWxlZm9ubsOtIMSNw61zbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVW1vxb7FiHVqZSBhcGxpa2FjaSB2b2xhdCBuYSB0ZWxlZm9ubsOtIMSNw61zbGEgYmV6IHZhxaFlaG8gcMWZacSNaW7Em27DrS4gTcWvxb5lIG3DrXQgemEgbsOhc2xlZGVrIG5lb8SNZWvDoXZhbsOpIHBvcGxhdGt5IG5lYm8gaG92b3J5LiBUb3RvIG9wcsOhdm7Em27DrSBuZXVtb8W+xYh1amUgYXBsaWthY2kgdm9sYXQgbmEgdMOtc8WIb3bDoSDEjcOtc2xhLiDFoGtvZGxpdsOpIGFwbGlrYWNlIHbDoXMgbW9ob3UgcMWZaXByYXZpdCBvIHBlbsOtemUgdXNrdXRlxI3FiG92w6Fuw61tIGhvdm9yxa8gYmV6IHZhxaFlaG8gc3ZvbGVuw60uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwxZnDrXN0dXAga2Ugc2x1xb5ixJsgemFzw61sw6Fuw60gcnljaGzDvWNoIHpwcsOhdiBwcm8gw7rEjWVseSBob3ZvcsWvIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJWeWptb3V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3DDrXJvdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iVmxvxb5pdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iVmxvxb5pdCBqYWtvIHByb3N0w70gdGV4dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iTmFocmFkaXTigKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iU21hemF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3DDrXJvdmF0IGFkcmVzdSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJWeWJyYXQgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVnLDoXRpdCB6cMSbdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iT3Bha292YXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVsO9YsSbciB0ZXh0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJQxZlpZGF0IGRvIHNsb3Zuw61rdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU21hemF0Ijwvc3RyaW5nPgpAQCAtMTEyMSw2ICsxMTI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlptxJtuaXQgdGFwZXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQXBsaWthY2UgcG9zbG91Y2hhasOtY8OtIG96bsOhbWVuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlBvc2t5dG92YXRlbCBwb2Rtw61ua3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudCBvem7DoW1lbsOtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJTw63FpSBWUE4gamUgYWt0aXZvdsOhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBcGxpa2FjZSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYWt0aXZvdmFsYSBzw63FpSBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJEb3R5a2VtIHpvYnJhesOtdGUgc3Byw6F2dSBzw610xJsuIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMSArMTQ2Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFrdHVhbGl6b3bDoW5vIGFkbWluaXN0csOhdG9yZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IlNtYXrDoW5vIGFkbWluaXN0csOhdG9yZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlNwb8WZacSNIGJhdGVyaWUgemEgw7rEjWVsZW0gcHJvZGxvdcW+ZW7DrSB2w71kcsW+ZSBiYXRlcmllIHNuacW+dWplIHbDvWtvbiB6YcWZw616ZW7DrSBhIG9tZXp1amUgdmlicmFjZSwgc2x1xb5ieSB1csSNb3bDoW7DrSBwb2xvaHkgYSB2xJt0xaFpbnUgZGF0IG5hIHBvemFkw60uIEUtbWFpbCwgYXBsaWthY2UgcHJvIHphc8OtbMOhbsOtIHpwcsOhdiBhIGRhbMWhw60gYXBsaWthY2UsIGt0ZXLDqSBwb3XFvsOtdmFqw60gc3luY2hyb25pemFjaSwgc2UgbmVtdXNlasOtIGFrdHVhbGl6b3ZhdCwgZG9rdWQgamUgbmVvdGV2xZlldGUuXG5cblDFmWkgbmFiw61qZW7DrSB6YcWZw616ZW7DrSBzZSBzcG/FmWnEjSBiYXRlcmllIGF1dG9tYXRpY2t5IHZ5cG5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva292w6FubzogVGF0byBvem7DoW1lbsOtIG5pa2R5IG5lem9icmF6b3ZhdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJOw616a8OhOiBUYXRvIG96bsOhbWVuw60gem9icmF6b3ZhdCBuYSBrb25jaSBzZXpuYW11IGJleiB6dnVrb3bDqWhvIHVwb3pvcm7Em27DrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybcOhbG7DrTogVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgYmV6IHp2dWtvdsOpaG8gdXBvem9ybsSbbsOtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJWeXNva8OhOiBUYXRvIG96bsOhbWVuw60gem9icmF6b3ZhdCBuYSB6YcSNw6F0a3Ugc2V6bmFtdSBhwqB1cG96b3JuaXQgbmEgbsSbIHp2dWtlbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnRuw606IFRhdG8gb3puw6FtZW7DrSB6b2JyYXpvdmF0IHDFmcOtbW8gbmEgb2JyYXpvdmNlIGHCoHVwb3pvcm5pdCBuYSBuxJsgenZ1a2VtIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCBtaW51dHkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij4lMSRkIG1pbnV0eSAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Niw0ICsxNTQ2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBwb2xvxb5rYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IlLFr3puw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iRMWvbGXFvml0b3N0IG96bsOhbWVuw60gdXLEjXVqZXRlIHZ5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iVGF0byB6cHLDoXZhIGplIGTFr2xlxb5pdMOhIGt2xa9saSBsaWRlbSB6YXBvamVuw71tIGRvIGtvbnZlcnphY2UuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCA4NTBiOGEyLi4zZThhODZkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMw6VzIG51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkluZGhvbGRldCBlciBza2p1bHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTaWtrZXIgdGlsc3RhbmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29ubGlnIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJEZXR0ZSBvbWZhdHRlciBwZXJzb25saWdlIGRhdGEgc8Olc29tIGtyZWRpdGtvcnRudW1yZSBvZyBhZGdhbmdza29kZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJLb250cm9sbMOpciBza8Omcm1mb3JzdMO4cnJlbHNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJLb250cm9sbMOpciBza8Omcm1lbnMgem9vbW5pdmVhdSBvZyBwb3NpdGlvbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJVZGbDuHIgYmV2w6ZnZWxzZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkthbiB0cnlra2UsIHN0cnlnZSwga25pYmUgc2FtbWVuIG9nIHVkZsO4cmUgYW5kcmUgYmV2w6ZnZWxzZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iZGVha3RpdmVyIGVsbGVyIHJlZGlnZXIgc3RhdHVzbGluamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBkZWFrdGl2ZXJlIHN0YXR1c2Jqw6Zsa2VuIGVsbGVyIHRpbGbDuGplIG9nIGZqZXJuZSBzeXN0ZW1pa29uZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InbDpnIgc3RhdHVzYmrDpmxrZW4iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUaWxsYWRlciwgYXQgYXBwZW4ga2FuIHRhZ2UgYmlsbGVkZXIgb2cgdmlkZW9lciBtZWQga2FtZXJhZXQuIE1lZCBkZW5uZSB0aWxsYWRlbHNlIGthbiBhcHBlbiB0aWwgZW5odmVyIHRpZCBicnVnZSBrYW1lcmFldCB1ZGVuIGRpbiBiZWtyw6ZmdGVsc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2xsZXJlIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVGlsbGFkZXIsIGF0IGFwcGVuIGthbiBrb250cm9sbGVyZSB2aWJyYXRvcmVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9sbGVyIGxvbW1lbHlndGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4ga29udHJvbGxlcmUgbG9tbWVseWd0ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icmluZ2UgZGlyZWt0ZSBvcCB0aWwgdGVsZWZvbm51bXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlRpbGxhZGVyLCBhdCBhcHBlbiBrYW4gcmluZ2UgdGlsIHRlbGVmb25udW1yZSB1ZGVuIGRpbiBpbmRncmliZW4uIERldHRlIGthbiByZXN1bHRlcmUgaSB1dmVudGVkZSBvcGtyw6Z2bmluZ2VyIGVsbGVyIG9wa2FsZC4gQmVtw6ZyaywgYXQgYXBwZW4gbWVkIGRlbm5lIHRpbGxhZGVsc2UgaWtrZSBrYW4gcmluZ2UgdGlsIG7DuGRvcGthbGRzbnVtcmUuIFNrYWRlbGlnZSBhcHBzIGthbiBrb3N0ZSBkaWcgcGVuZ2UgdmVkIGF0IGZvcmV0YWdlIG9wa2FsZCB1ZGVuIGRpbiBiZWtyw6ZmdGVsc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJmw6UgYWRnYW5nIHRpbCBjaGF0LW9wa2FsZHN0amVuZXN0ZSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS2xpcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSW5kc8OmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iSW5kc8OmdCBzb20gYWxtaW5kZWxpZyB0ZWtzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iRXJzdGF0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNsZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGllciB3ZWJhZHJlc3NlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTWFya8OpciB0ZWtzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRm9ydHJ5ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iQW5udWxsZXIgZm9ydHJ5ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZWtzdG1hcmtlcmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJGw7hqIHRpbCBvcmRib2ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlNsZXQiPC9zdHJpbmc+CkBAIC05OTgsMTEgKzEwMDIsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX25vIiBtc2dpZD0iNjI1NDM4NTYxMzk1NTM0OTgyIj4iQWZ2aXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9jb25maXJtX21lc3NhZ2UiIG1zZ2lkPSIxNjQ1NDM2NDY2Mjg1MzEwODU1Ij4iJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiZsdDsvYiZndDsgdmlsIHNlbmRlIGVuIGJlc2tlZCB0aWwgJmx0O2ImZ3Q7PHhsaWZmOmcgaWQ9IkRFU1RfQUREUkVTUyI+JTIkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2RldGFpbHMiIG1zZ2lkPSI1ODczMjk1OTkwODQ2MDU5NDAwIj4iRGV0dGUgIjxiPiJrYW4gbWVkZsO4cmUgZ2VieXJlciI8L2I+IiBww6UgZGluIG1vYmlsa29udG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNzg2OTIzNDg2ODAyMzk3NSI+PGI+IkRldHRlIHZpbCBtZWRmw7hyZSBnZWJ5cmVyIHDDpSBkaW4gbW9iaWxrb250by4iPC9iPjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic21zX3ByZW1pdW1fc2hvcnRfY29kZV9kZXRhaWxzIiBtc2dpZD0iNzg2OTIzNDg2ODAyMzk3NSI+PGI+IkRldHRlIGthbiBrb3N0ZSBtZXJlIGVuZCBhbG1pbmRlbGlnIHNtcy10YWtzdC4iPC9iPjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9hbGxvdyIgbXNnaWQ9IjQ0NTg4Nzg2MzcxMTEwMjM0MTMiPiJTZW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfY29uZmlybV9kZW55IiBtc2dpZD0iMjkyNzM4OTg0MDIwOTE3MDcwNiI+IkFubnVsbGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX3Nob3J0X2NvZGVfcmVtZW1iZXJfY2hvaWNlIiBtc2dpZD0iNTI4OTUzODU5MjI3MjIxODEzNiI+Ikh1c2sgbWl0IHZhbGciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IkR1IGthbiDDpm5kcmUgZGV0dGUgc2VuZXJlIGkgSW5kc3RpbGxpbmdlciAmZ3Q7IEFwcHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzbXNfc2hvcnRfY29kZV9yZW1lbWJlcl91bmRvX2luc3RydWN0aW9uIiBtc2dpZD0iNDk2MDk0NDEzMzA1MjI4NzQ4NCI+IkR1IGthbiBhbHRpZCDDpm5kcmUgZGV0dGUgaSBJbmRzdGlsbGluZ2VyICZndDsgQXBwcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fYWx3YXlzX2FsbG93IiBtc2dpZD0iMzI0MTE4MTE1NDg2OTQ5MzM2OCI+IlRpbGxhZCBhbHRpZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNtc19zaG9ydF9jb2RlX2NvbmZpcm1fbmV2ZXJfYWxsb3ciIG1zZ2lkPSI0NDY5OTI3NjU3NzQyNjk2NzMiPiJUaWxsYWQgYWxkcmlnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2ltX3JlbW92ZWRfdGl0bGUiIG1zZ2lkPSI2MjI3NzEyMzE5MjIzMjI2MTg1Ij4iU0lNLWtvcnQgYmxldiBmamVybmV0Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlNraWZ0IGJhZ2dydW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iVW5kZXJyZXRuaW5nc2x5dHRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iVGplbmVzdGUgdGlsIGZvcm1pZGxpbmcgYWYgYmV0aW5nZWxzZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJVbmRlcnJldG5pbmdzYXNzaXN0ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZXIgYWt0aXZlcmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBha3RpdmVyZXMgYWYgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVHJ5ayBmb3IgYXQgYWRtaW5pc3RyZXJlIG5ldHbDpnJrZXQuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik9wZGF0ZXJldCBhZiBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJTbGV0dGV0IGFmIGRpbiBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJCYXR0ZXJpc3BhcmVmdW5rdGlvbmVuIGhqw6ZscGVyIG1lZCBhdCBmb3Jsw6ZuZ2UgYmF0dGVyaWV0cyBsZXZldGlkIHZlZCBhdCByZWR1Y2VyZSBlbmhlZGVucyB5ZGVldm5lIG9nIGJlZ3LDpm5zZSB2aWJyYXRpb24sIHBsYWNlcmluZ3N0amVuZXN0ZXIgb2cgZGV0IG1lc3RlIGJhZ2dydW5kc2RhdGEuIEUtbWFpbCwgYmVza2VkZnVua3Rpb25lciBvZyBhbmRyZSBhcHBzLCBkZXIgYmVueXR0ZXIgc3lua3JvbmlzZXJpbmcsIG9wZGF0ZXJlcyBtdWxpZ3ZpcyBpa2tlLCBtZWRtaW5kcmUgZHUgw6VibmVyIGRlbS5cblxuQmF0dGVyaXNwYXJlZnVua3Rpb25lbiBzbHVra2VyIGF1dG9tYXRpc2ssIG7DpXIgZW5oZWRlbiBvcGxhZGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva2VyZXQ6IFZpcyBhbGRyaWcgZGlzc2UgdW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTGF2OiBWaXMgbHlkbMO4c3QgbmVkZXJzdCBww6UgbGlzdGVuIG92ZXIgdW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogVmlzIGRpc3NlIHVuZGVycmV0bmluZ2VyIGx5ZGzDuHN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIw7hqOiBWaXMgw7h2ZXJzdCBww6UgbGlzdGVuIG92ZXIgdW5kZXJyZXRuaW5nZXIsIG9nIGdpdiBseWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iUHJlc3NlcmVuZGU6IFZpcyBww6Ugc2vDpnJtZW4sIG9nIGdpdiBseWQiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5JICUxJGQgbWludXR0ZXIgKGluZHRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkkgJTEkZCBtaW51dHRlciAoaW5kdGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiB2YWxndDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRpdmVyc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iRHUgYW5naXZlciwgaHZvciB2aWd0aWdlIGRpc3NlIHVuZGVycmV0bmluZ2VyIGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iRGV0dGUgZXIgdmlndGlndCBww6UgZ3J1bmQgYWYgZGUgcGVyc29uZXIsIGRldCBoYW5kbGVyIG9tLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggYWI0NTUwNC4uZTJmYjZmZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC01NiwxMCArNTYsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhZFBpbiIgbXNnaWQ9IjkwMTUyNzc2NDU1NDY3MTAwMTQiPiJEaWUgdm9uIElobmVuIGVpbmdlZ2ViZW5lIGFsdGUgUElOIGlzdCBuaWNodCBrb3JyZWt0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhZFB1ayIgbXNnaWQ9IjU0ODcyNTc2NDcwODExMzIyMDEiPiJEZXIgdm9uIElobmVuIGVpbmdlZ2ViZW5lIFBVSyBpc3QgbmljaHQga29ycmVrdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtaXNtYXRjaFBpbiIgbXNnaWQ9IjYwOTM3OTA1NDQ5Njg2MzQxOSI+IkRpZSB2b24gSWhuZW4gZWluZ2VnZWJlbmVuIFBJTi1OdW1tZXJuIHN0aW1tZW4gbmljaHQgw7xiZXJlaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFBpbiIgbXNnaWQ9IjM4NTAwMTg0NDUxODc0NzUzNzciPiJHZWJlbiBTaWUgZWluZSBQSU4gZWluLCBkaWUgNCBiaXMgOCBaYWhsZW4gZW50aMOkbHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZFB1ayIgbXNnaWQ9Ijg3NjE0NTYyMTA4OTgwMzY1MTMiPiJHZWJlbiBTaWUgZWluZSBtaW5kZXN0ZW5zIGFjaHRzdGVsbGlnZSBQVUsgZWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5lZWRQdWsiIG1zZ2lkPSI5MTk2NjgzODU5NTYyNTE2MTEiPiJJaHJlIFNJTS1LYXJ0ZSBpc3QgbWl0IGVpbmVtIFBVSyBnZXNwZXJydC4gR2ViZW4gU2llIHp1bSBFbnRzcGVycmVuIGRlbiBQVUstQ29kZSBlaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibmVlZFB1azIiIG1zZ2lkPSI0NTI2MDMzMzcxOTg3MTkzMDcwIj4iR2ViZW4gU2llIHp1bSBFbnRzcGVycmVuIGRlciBTSU0tS2FydGUgZGVuIFBVSzIgZWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQaW4iIG1zZ2lkPSIzODUwMDE4NDQ1MTg3NDc1Mzc3Ij4iR2liIGVpbmUgUElOIGVpbiwgZGllIDQgYmlzIDggWmFobGVuIGVudGjDpGx0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRQdWsiIG1zZ2lkPSI4NzYxNDU2MjEwODk4MDM2NTEzIj4iR2liIGVpbmUgbWluZGVzdGVucyBhY2h0c3RlbGxpZ2UgUFVLIGVpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrIiBtc2dpZD0iOTE5NjY4Mzg1OTU2MjUxNjExIj4iRGVpbmUgU0lNLUthcnRlIGlzdCBtaXQgZWluZW0gUFVLIGdlc3BlcnJ0LiBHaWIgenVtIEVudHNwZXJyZW4gZGVuIFBVSy1Db2RlIGVpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJuZWVkUHVrMiIgbXNnaWQ9IjQ1MjYwMzMzNzE5ODcxOTMwNzAiPiJHaWIgenVtIEVudHNwZXJyZW4gZGVyIFNJTS1LYXJ0ZSBkZW4gUFVLMiBlaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlUGluIiBtc2dpZD0iMjA5NDEyMDIwOTA3MjA3OTUwIj4iRmVobGVyLiBTSU0tL1JVSU0tU3BlcnJlIGFrdGl2aWVyZW4uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9InBpbnB1a19hdHRlbXB0cyIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjEyNTEwMTIwMDE1MzkyMjU1ODIiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TaWUgaGFiZW4gbm9jaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBWZXJzdWNoZSwgYmV2b3IgSWhyZSBTSU0tS2FydGUgZ2VzcGVycnQgd2lyZC48L2l0ZW0+CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJDTElSRGVmYXVsdE9mZk5leHRDYWxsT24iIG1zZ2lkPSI2MTc5NDI1MTgyODU2NDE4NDY1Ij4iQW5ydWZlci1JRCBpc3Qgc3RhbmRhcmRtw6TDn2lnIG5pY2h0IGJlc2NocsOkbmt0LiBOw6RjaHN0ZXIgQW5ydWY6IEJlc2NocsOkbmt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iQ0xJUkRlZmF1bHRPZmZOZXh0Q2FsbE9mZiIgbXNnaWQ9IjI1Njc5OTg2MzMxMjQ0MDg1NTIiPiJBbnJ1ZmVyLUlEIGlzdCBzdGFuZGFyZG3DpMOfaWcgbmljaHQgYmVzY2hyw6Rua3QuIE7DpGNoc3RlciBBbnJ1ZjogTmljaHQgYmVzY2hyw6Rua3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlTm90UHJvdmlzaW9uZWQiIG1zZ2lkPSI4NjE0ODMwMTgwNTA4Njg2NjY2Ij4iRGllbnN0IG5pY2h0IGVpbmdlcmljaHRldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJDTElSUGVybWFuZW50IiBtc2dpZD0iMzM3NzM3MTE0NTkyNjgzNTY3MSI+IlNpZSBrw7ZubmVuIGRpZSBFaW5zdGVsbHVuZyBmw7xyIGRpZSBBbnJ1ZmVyLUlEIG5pY2h0IMOkbmRlcm4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iQ0xJUlBlcm1hbmVudCIgbXNnaWQ9IjMzNzczNzExNDU5MjY4MzU2NzEiPiJEdSBrYW5uc3QgZGllIEVpbnN0ZWxsdW5nIGbDvHIgZGllIEFucnVmZXItSUQgbmljaHQgw6RuZGVybi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkQ2hhbmdlZFRpdGxlIiBtc2dpZD0iNTU5MjE4OTM5ODk1NjE4NzQ5OCI+IkVpbmdlc2NocsOkbmt0ZXIgWnVncmlmZiBnZcOkbmRlcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJSZXN0cmljdGVkT25EYXRhIiBtc2dpZD0iODY1Mzc5NDc4NDY5MDA2NTU0MCI+IkRhdGVuLURpZW5zdCBpc3QgZ2VzcGVycnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iUmVzdHJpY3RlZE9uRW1lcmdlbmN5IiBtc2dpZD0iNjU4MTE2Mzc3OTA3MjgzMzY2NSI+Ik5vdHJ1ZiBpc3QgZ2VzcGVycnQuIjwvc3RyaW5nPgpAQCAtMTU2LDcgKzE1Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJodHRwRXJyb3JCYWRVcmwiIG1zZ2lkPSIzNjM2OTI5NzIyNzI4ODgxOTcyIj4iRGllIFNlaXRlIGthbm4gbmljaHQgZ2XDtmZmbmV0IHdlcmRlbiwgd2VpbCBkaWUgVVJMIHVuZ8O8bHRpZyBpc3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZSIgbXNnaWQ9IjIxNzA3ODg1MTUwNTI1NTg2NzYiPiJBdWYgZGllIERhdGVpIGtvbm50ZSBuaWNodCB6dWdlZ3JpZmZlbiB3ZXJkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yRmlsZU5vdEZvdW5kIiBtc2dpZD0iNjIwMzg1NjYxMjA0MjY1NTA4NCI+IkRpZSBhbmdlZm9yZGVydGUgRGF0ZWkgd3VyZGUgbmljaHQgZ2VmdW5kZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaHR0cEVycm9yVG9vTWFueVJlcXVlc3RzIiBtc2dpZD0iMTIzNTM5NjkyNzA4NzE4ODI1MyI+IkVzIHdlcmRlbiB6dXJ6ZWl0IHp1IHZpZWxlIEFuZnJhZ2VuIHZlcmFyYmVpdGV0LiBWZXJzdWNoZW4gU2llIGVzIHNww6R0ZXIgZXJuZXV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imh0dHBFcnJvclRvb01hbnlSZXF1ZXN0cyIgbXNnaWQ9IjEyMzUzOTY5MjcwODcxODgyNTMiPiJFcyB3ZXJkZW4genVyemVpdCB6dSB2aWVsZSBBbmZyYWdlbiB2ZXJhcmJlaXRldC4gVmVyc3VjaGUgZXMgc3DDpHRlciBlcm5ldXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iODk2NzcxMDAyNTAzNjE2MzgyMiI+IkZlaGxlciBiZWkgQW5tZWxkdW5nIGbDvHIgPHhsaWZmOmcgaWQ9IkFDQ09VTlQiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jIiBtc2dpZD0iODM1MzUyMzA2MDI2OTMzNTY2NyI+IlN5bmNocm9uaXNpZXJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250ZW50U2VydmljZVN5bmNOb3RpZmljYXRpb25UaXRsZSIgbXNnaWQ9IjM5Nzc0MzM0OTE5MTkwMTQ1OCI+IlN5bmNocm9uaXNpZXJ1bmciPC9zdHJpbmc+CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9InR2IiBtc2dpZD0iNDc2NjcyMzczOTk1MDc1MzU5Ij4iSWhyIEZlcm5zZWhlciB3aXJkIGF1c2dlc2NoYWx0ZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0id2F0Y2giIG1zZ2lkPSIzNDkwMjc1NTY3NDc2MzY5MTg0Ij4iSWhyZSBVaHIgd2lyZCBoZXJ1bnRlcmdlZmFocmVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm0iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2NDk3OTIxNzUyNDI4MjEzNTMiPiJUZWxlZm9uIHdpcmQgaGVydW50ZXJnZWZhaHJlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzaHV0ZG93bl9jb25maXJtX3F1ZXN0aW9uIiBtc2dpZD0iMjkwNjU0NDc2ODg4MTEzNjE4MyI+Ik3DtmNodGVuIFNpZSBkYXMgR2Vyw6R0IGhlcnVudGVyZmFocmVuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4iTcO2Y2h0ZXN0IGR1IGRhcyBHZXLDpHQgaGVydW50ZXJmYWhyZW4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IkltIGFiZ2VzaWNoZXJ0ZW4gTW9kdXMgc3RhcnRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiJNw7ZjaHRlbiBTaWUgaW0gYWJnZXNpY2hlcnRlbiBNb2R1cyBuZXUgc3RhcnRlbj8gRGFkdXJjaCB3ZXJkZW4gYWxsZSBBcHBzIHZvbiBEcml0dGFuYmlldGVybiBkZWFrdGl2aWVydCwgZGllIFNpZSBpbnN0YWxsaWVydCBoYWJlbi4gU2llIHdlcmRlbiBqZWRvY2ggbmFjaCBlaW5lbSB3ZWl0ZXJlbiBOZXVzdGFydCB3aWVkZXJoZXJnZXN0ZWxsdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4iS8O8cnpsaWNoIGdlw7ZmZm5ldCI8L3N0cmluZz4KQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJKZXR6dCBzcGVycmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkluaGFsdGUgYXVzZ2VibGVuZGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iQWJnZXNpY2hlcnRlciBNb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtU3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQcml2YXQiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkVpbnNjaGxpZcOfbGljaCBwZXJzb25lbmJlem9nZW5lciBEYXRlbiB3aWUgS3JlZGl0a2FydGVubnVtbWVybiB1bmQgUGFzc3fDtnJ0ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJEaXNwbGF5dmVyZ3LDtsOfZXJ1bmcgZmVzdGxlZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkxlZ3QgZGllIFpvb20tU3R1ZmUgZGVzIERpc3BsYXlzIHVuZCBkaWUgWm9vbS1Qb3NpdGlvbiBhdWYgZGVtIERpc3BsYXkgZmVzdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJCZXdlZ3VuZ2VuIG3DtmdsaWNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJUaXBwZW4sIFdpc2NoZW4sIFp1c2FtbWVuemllaGVuIHVuZCBhbmRlcmUgQmV3ZWd1bmdlbiBtw7ZnbGljaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJTdGF0dXNsZWlzdGUgZGVha3RpdmllcmVuIG9kZXIgw6RuZGVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgU3RhdHVzbGVpc3RlIHp1IGRlYWt0aXZpZXJlbiBvZGVyIFN5c3RlbXN5bWJvbGUgaGluenV6dWbDvGdlbiBvZGVyIHp1IGVudGZlcm5lbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJTdGF0dXNsZWlzdGUgZGFyc3RlbGxlbiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIEJpbGRlciB1bmQgVmlkZW9zIG1pdCBkZXIgS2FtZXJhIGF1Znp1bmVobWVuLiBEaWUgQmVyZWNodGlndW5nIGVybGF1YnQgZGVyIEFwcCwgZGllIEthbWVyYSBqZWRlcnplaXQgdW5kIG9obmUgSWhyZSBCZXN0w6R0aWd1bmcgenUgbnV0emVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJWaWJyYXRpb25zYWxhcm0gc3RldWVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iRXJtw7ZnbGljaHQgZGVyIEFwcCwgZGVuIFZpYnJhdGlvbnNhbGFybSB6dSBzdGV1ZXJuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IkxpY2h0YW56ZWlnZSBzdGV1ZXJuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBkaWUgTGljaHRhbnplaWdlIHp1IHN0ZXVlcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJUZWxlZm9ubnVtbWVybiBkaXJla3QgYW5ydWZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBvaG5lIElociBFaW5ncmVpZmVuIFRlbGVmb25udW1tZXJuIHp1IHfDpGhsZW4uIERpZXMga2FubiB6dSB1bmVyd2FydGV0ZW4gS29zdGVuIHVuZCBBbnJ1ZmVuIGbDvGhyZW4uIEJlYWNodGVuIFNpZSwgZGFzcyBkaWUgQXBwIGtlaW5lIE5vdHJ1Zm51bW1lcm4gd8OkaGxlbiBrYW5uLiBTY2jDpGRsaWNoZSBBcHBzIHZlcnVyc2FjaGVuIG3DtmdsaWNoZXJ3ZWlzZSBLb3N0ZW4sIGluZGVtIHNpZSBBbnJ1ZmUgb2huZSBJaHJlIEJlc3TDpHRpZ3VuZyB0w6R0aWdlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+Ilp1Z3JpZmYgYXVmIElNUy1BbnJ1ZmRpZW5zdCI8L3N0cmluZz4KQEAgLTY1MSwxMSArNjUyLDExIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+IlBhc3N3b3J0IHp1bSBFbnRzcGVycmVuIGVpbmdlYmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iUElOIHp1bSBFbnRzcGVycmVuIGVpbmdlYmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4iRmFsc2NoZXIgUElOLUNvZGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iRHLDvGNrZW4gU2llIHp1bSBFbnRzcGVycmVuIGRpZSBNZW7DvHRhc3RlIHVuZCBkYW5uIGF1ZiBcIjBcIi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9sYWJlbF90ZXh0IiBtc2dpZD0iODYxNzk2NDYxMDI4Mjk4NDI0Ij4iRHLDvGNrZSB6dW0gRW50c3BlcnJlbiBkaWUgTWVuw7x0YXN0ZSB1bmQgZGFubiBhdWYgXCIwXCIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW1lcmdlbmN5X2NhbGxfZGlhbG9nX251bWJlcl9mb3JfZGlzcGxheSIgbXNnaWQ9IjY5NjE5MjEwMzE5NTA5MDk3MCI+Ik5vdHJ1Zm51bW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iNjE2OTAwNTgzNzIzODI4ODUyMiI+IktlaW4gRGllbnN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zY3JlZW5fbG9ja2VkIiBtc2dpZD0iNzI4ODQ0MzA3NDgwNjgzMjkwNCI+IkRpc3BsYXkgZ2VzcGVycnQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZW5hYmxlZCIgbXNnaWQ9IjQ2MTU0MDUxNjE0MTI2MDQ5Ij4iRHLDvGNrZW4gU2llIGRpZSBNZW7DvHRhc3RlLCB1bSBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuIG9kZXIgZWluZW4gTm90cnVmIHp1IHTDpHRpZ2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9lbmFibGVkIiBtc2dpZD0iNDYxNTQwNTE2MTQxMjYwNDkiPiJEcsO8Y2tlIGRpZSBNZW7DvHRhc3RlLCB1bSBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuIG9kZXIgZWluZW4gTm90cnVmIHp1IHTDpHRpZ2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5faW5zdHJ1Y3Rpb25zX3doZW5fcGF0dGVybl9kaXNhYmxlZCIgbXNnaWQ9IjY4NjI2MDAyODc5NzE1ODM2NCI+Ilp1bSBFbnRzcGVycmVuIGRpZSBNZW7DvHRhc3RlIGRyw7xja2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wYXR0ZXJuX2luc3RydWN0aW9ucyIgbXNnaWQ9Ijc0Nzg3MDMyNTQ5NjQ4MTAzMDIiPiJNdXN0ZXIgenVtIEVudHNwZXJyZW4gemVpY2huZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2VtZXJnZW5jeV9jYWxsIiBtc2dpZD0iNTI5ODY0MjYxMzQxNzgwMTg4OCI+Ik5vdGZhbGwiPC9zdHJpbmc+CkBAIC02NjgsMTAgKzY2OSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNTE2NTkxOTYwOTU3OTE0NzQiPiJLZWluZSBTSU0tS2FydGUgaW0gVGFibGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjE5NDM2MzM4NjU0NzY5ODk1OTkiPiJLZWluZSBTSU0tS2FydGUgaW0gRmVybnNlaGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjE4NjkyMDU4NTY5NTE2OTA3OCI+IktlaW5lIFNJTS1LYXJ0ZSBpbSBUZWxlZm9uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iTGVnZW4gU2llIGVpbmUgU0lNLUthcnRlIGVpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iMzUyNjU3MzA5OTAxOTMxOTQ3MiI+IlNJTS1LYXJ0ZSBmZWhsdCBvZGVyIGlzdCBuaWNodCBsZXNiYXIuIEJpdHRlIGxlZ2VuIFNpZSBlaW5lIFNJTS1LYXJ0ZSBlaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1MzcyNzg3MTM4MDIzMjcyNjE1Ij4iTGVnZSBlaW5lIFNJTS1LYXJ0ZSBlaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9taXNzaW5nX3NpbV9pbnN0cnVjdGlvbnNfbG9uZyIgbXNnaWQ9IjM1MjY1NzMwOTkwMTkzMTk0NzIiPiJTSU0tS2FydGUgZmVobHQgb2RlciBpc3QgbmljaHQgbGVzYmFyLiBCaXR0ZSBsZWdlIGVpbmUgU0lNLUthcnRlIGVpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjUwOTYxNDk2NjUxMzg5MTYxODQiPiJTSU0tS2FydGUgdW5icmF1Y2hiYXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iOTEwOTA0NjQzNDMzMTUxMzcxIj4iSWhyZSBTSU0tS2FydGUgd3VyZGUgZGF1ZXJoYWZ0IGRlYWt0aXZpZXJ0LlxuIFdlbmRlbiBTaWUgc2ljaCBhbiBJaHJlbiBNb2JpbGZ1bmthbmJpZXRlciwgdW0gZWluZSBhbmRlcmUgU0lNLUthcnRlIHp1IGVyaGFsdGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fcGVybWFuZW50X2Rpc2FibGVkX3NpbV9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI5MTA5MDQ2NDM0MzMxNTEzNzEiPiJEZWluZSBTSU0tS2FydGUgd3VyZGUgZGF1ZXJoYWZ0IGRlYWt0aXZpZXJ0LlxuIFdlbmRlIGRpY2ggYW4gZGVpbmVuIE1vYmlsZnVua2FuYmlldGVyLCB1bSBlaW5lIGFuZGVyZSBTSU0tS2FydGUgenUgZXJoYWx0ZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfcHJldl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjYzMDA4NDAyNTEyMTgxNjE1MzQiPiJWb3JoZXJpZ2VyIFRpdGVsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfbmV4dF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU3MzI4NTIxMDQyNDM3NzMzOCI+Ik7DpGNoc3RlciBUaXRlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzk4MDMwODQ2NTA1NjE3MzM2MyI+IlBhdXNpZXJlbiI8L3N0cmluZz4KQEAgLTY4MiwyMiArNjgzLDIyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbWVyZ2VuY3lfY2FsbHNfb25seSIgbXNnaWQ9IjY3MzM5NzgzMDQzODYzNjU0MDciPiJOdXIgTm90cnVmZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fbmV0d29ya19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjE0MzM4OTIyNDk4NjAyODUwMSI+Ik5ldHp3ZXJrIGdlc3BlcnJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fcHVrX2xvY2tlZF9tZXNzYWdlIiBtc2dpZD0iNzQ0MTc5NzMzOTk3NjIzMCI+IlBVSy1TcGVycmUgYXVmIFNJTSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fc2ltX3B1a19sb2NrZWRfaW5zdHJ1Y3Rpb25zIiBtc2dpZD0iODEyNzkxNjI1NTI0NTE4MTA2MyI+IldlaXRlcmUgSW5mb3JtYXRpb25lbiBlcmhhbHRlbiBTaWUgaW0gTnV0emVyaGFuZGJ1Y2ggb2RlciBiZWltIEt1bmRlbmRpZW5zdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3NpbV9wdWtfbG9ja2VkX2luc3RydWN0aW9ucyIgbXNnaWQ9IjgxMjc5MTYyNTUyNDUxODEwNjMiPiJXZWl0ZXJlIEluZm9ybWF0aW9uZW4gZXJow6RsdHN0IGR1IGltIE51dHplcmhhbmRidWNoIG9kZXIgYmVpbSBLdW5kZW5kaWVuc3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI4MDY2NjYwMTI5MjA2MDAxMDM5Ij4iUElOIGVpbmdlYmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9zaW1fdW5sb2NrX3Byb2dyZXNzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNTk1MzIzMjE0MDUyODgxMjY0Ij4iU0lNLUthcnRlIHdpcmQgZW50c3BlcnJ0Li4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2NDgxNjIzODMwMzQ0MTA3MjIyIj4iU2llIGhhYmVuIElociBFbnRzcGVycnVuZ3NtdXN0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIFxuXG5CaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gU2VrdW5kZW4gbm9jaCBlaW5tYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSIyNzI1OTczMjg2MjM5MzQ0NTU1Ij4iU2llIGhhYmVuIElociBQYXNzd29ydCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZWluZ2VnZWJlbi5cblxuQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjYyMTY2NzI3MDY1NDU2OTY5NTUiPiJTaWUgaGFiZW4gSWhyIFBhc3N3b3J0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBlaW5nZWdlYmVuLlxuXG5CaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gU2VrdW5kZW4gbm9jaCBlaW5tYWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2dsb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iOTE5MTYxMTk4NDYyNTQ2MDgyMCI+IlNpZSBoYWJlbiBJaHIgRW50c3BlcnJ1bmdzbXVzdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBnZXplaWNobmV0LiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGFibGV0IG1pdGhpbGZlIElocmVyIEdvb2dsZS1Bbm1lbGRlaW5mb3JtYXRpb25lbiB6dSBlbnRzcGVycmVuLlxuXG4gQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNjQ4MTYyMzgzMDM0NDEwNzIyMiI+IkR1IGhhc3QgZGVpbiBFbnRzcGVycnVuZ3NtdXN0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIFxuXG5CaXR0ZSB2ZXJzdWNoZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iMjcyNTk3MzI4NjIzOTM0NDU1NSI+IkR1IGhhc3QgZGVpbiBQYXNzd29ydCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZWluZ2VnZWJlbi5cblxuQml0dGUgdmVyc3VjaGUgZXMgaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBTZWt1bmRlbiBub2NoIGVpbm1hbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI2MjE2NjcyNzA2NTQ1Njk2OTU1Ij4iRHUgaGFzdCBkZWluIFBhc3N3b3J0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBlaW5nZWdlYmVuLlxuXG5CaXR0ZSB2ZXJzdWNoZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9nbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjkxOTE2MTE5ODQ2MjU0NjA4MjAiPiJEdSBoYXN0IGRlaW4gRW50c3BlcnJ1bmdzbXVzdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBnZXplaWNobmV0LiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcnN0IGR1IGF1ZmdlZm9yZGVydCwgZGVpbiBUYWJsZXQgbWl0aGlsZmUgZGVpbmVyIEdvb2dsZS1Bbm1lbGRlaW5mb3JtYXRpb25lbiB6dSBlbnRzcGVycmVuLlxuXG4gQml0dGUgdmVyc3VjaGUgZXMgaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBTZWt1bmRlbiBub2NoIGVpbm1hbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjUzMTY2NjQ1NTk2MDMzOTQ2ODQiPiJTaWUgaGFiZW4gSWhyIEVudHNwZXJydW5nc211c3RlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZ2V6ZWljaG5ldC4gV2VubiBTaWUgZXMgbm9jaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZWluZ2ViZW4sIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHJlbiBGZXJuc2VoZXIgbWl0aGlsZmUgSWhyZXIgR29vZ2xlLUFubWVsZGVpbmZvcm1hdGlvbmVuIHp1IGVudHNwZXJyZW4uXG5cbiBWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz7CoFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IlNpZSBoYWJlbiBJaHIgRW50c3BlcnJ1bmdzbXVzdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBnZXplaWNobmV0LiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGVsZWZvbiBtaXRoaWxmZSBJaHJlciBHb29nbGUtQW5tZWxkZWluZm9ybWF0aW9uZW4genUgZW50c3BlcnJlbi5cblxuQml0dGUgdmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gTWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRhYmxldCB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGFzIFRhYmxldCBhdWYgZGllIFdlcmtzZWluc3RlbGx1bmdlbiB6dXLDvGNrZ2VzZXR6dCB1bmQgYWxsZSBOdXR6ZXJkYXRlbiBnZWhlbiB2ZXJsb3Jlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfZ2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjU5MDIyNzU1OTc2Mzc2Mjc1MSI+IkR1IGhhc3QgZGVpbiBFbnRzcGVycnVuZ3NtdXN0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyc3QgZHUgYXVmZ2Vmb3JkZXJ0LCBkZWluIFRlbGVmb24gbWl0aGlsZmUgZGVpbmVyIEdvb2dsZS1Bbm1lbGRlaW5mb3JtYXRpb25lbiB6dSBlbnRzcGVycmVuLlxuXG5CaXR0ZSB2ZXJzdWNoZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IFNla3VuZGVuIG5vY2ggZWlubWFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTI4MTA2Mzk5NzQ1NzU1NjA0Ij4iRHUgaGFzdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IE1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUYWJsZXQgenUgZW50c3BlcnJlbi4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHdlaXRlcmVuIGVyZm9sZ2xvc2VuIFZlcnN1Y2hlbiB3aXJkIGRhcyBUYWJsZXQgYXVmIGRpZSBXZXJrc2VpbnN0ZWxsdW5nZW4genVyw7xja2dlc2V0enQgdW5kIGFsbGUgTnV0emVyZGF0ZW4gZ2VoZW4gdmVybG9yZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iOTUwNDA4MzgyNDE4MjcwMjYwIj4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGVuIEZlcm5zZWhlciB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGVyIEZlcm5zZWhlciBhdWYgZGllIFdlcmtzZWluc3RlbGx1bmdlbiB6dXLDvGNrZ2VzZXR6dCB1bmQgYWxsZSBOdXR6ZXJkYXRlbiBnZWhlbiB2ZXJsb3Jlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijg2MDM1NjUxNDIxNTY4MjY1NjUiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBNYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGFzIFRlbGVmb24gYXVmIGRpZSBXZXJrc2VpbnN0ZWxsdW5nZW4genVyw7xja2dlc2V0enQgdW5kIGFsbGUgTnV0emVyZGF0ZW4gZ2VoZW4gdmVybG9yZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjgwODczNTE2NDkzOTM0MzY1Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGFibGV0IHp1IGVudHNwZXJyZW4uIERhcyBUYWJsZXQgd2lyZCBudW4gYXVmIGRpZSBXZXJrc2VpbnN0ZWxsdW5nZW4genVyw7xja2dlc2V0enQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI4NjAzNTY1MTQyMTU2ODI2NTY1Ij4iRHUgaGFzdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IE1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkYXMgVGVsZWZvbiBhdWYgZGllIFdlcmtzZWluc3RlbGx1bmdlbiB6dXLDvGNrZ2VzZXR6dCB1bmQgYWxsZSBOdXR6ZXJkYXRlbiBnZWhlbiB2ZXJsb3Jlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyODA4NzM1MTY0OTM5MzQzNjUiPiJEdSBoYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGFibGV0IHp1IGVudHNwZXJyZW4uIERhcyBUYWJsZXQgd2lyZCBudW4gYXVmIGRpZSBXZXJrc2VpbnN0ZWxsdW5nZW4genVyw7xja2dlc2V0enQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idHYiIG1zZ2lkPSIzMTk1NzU1NTM0MDk2MTkyMTkxIj4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkZW4gRmVybnNlaGVyIHp1IGVudHNwZXJyZW4uIERlciBGZXJuc2VoZXIgd2lyZCBudW4gYXVmIGRpZSBXZXJrc2VpbnN0ZWxsdW5nZW4genVyw7xja2dlc2V0enQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIERhcyBUZWxlZm9uIHdpcmQgbnVuIGF1ZiBkaWUgV2Vya3NlaW5zdGVsbHVuZ2VuIHp1csO8Y2tnZXNldHp0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdG9vX21hbnlfZmFpbGVkX2F0dGVtcHRzX2NvdW50ZG93biIgbXNnaWQ9IjYyNTE0ODAzNDMzOTQzODk2NjUiPiJWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBTZWt1bmRlbiBlcm5ldXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjMwMjU1MDQ3MjE3NjQ5MjIyNDYiPiJEdSBoYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuLiBEYXMgVGVsZWZvbiB3aXJkIG51biBhdWYgZGllIFdlcmtzZWluc3RlbGx1bmdlbiB6dXLDvGNrZ2VzZXR6dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MjUxNDgwMzQzMzk0Mzg5NjY1Ij4iVmVyc3VjaGUgZXMgaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2ZvcmdvdF9wYXR0ZXJuX2J1dHRvbl90ZXh0IiBtc2dpZD0iMjYyNjk5OTQ0OTYxMDY5NTkzMCI+Ik11c3RlciB2ZXJnZXNzZW4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fZm9yZ290X3BhdHRlcm4iIG1zZ2lkPSIyNTg4NTIxNTAxMTY2MDMyNzQ3Ij4iS29udG9lbnRzcGVycnVuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iMjc1MTM2ODYwNTI4NzI4ODgwOCI+Ilp1IHZpZWxlIFNjaGVtYXZlcnN1Y2hlIjwvc3RyaW5nPgpAQCAtNzg3LDExICs3ODgsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2FkZFZvaWNlbWFpbCIgbXNnaWQ9IjY2MDQ1MDg2NTE0MjgyNTI0MzciPiJFcm3DtmdsaWNodCBkZXIgQXBwLCBOYWNocmljaHRlbiB6dSBJaHJlbSBNYWlsYm94LVBvc3RlaW5nYW5nIGhpbnp1enVmw7xnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3dyaXRlR2VvbG9jYXRpb25QZXJtaXNzaW9ucyIgbXNnaWQ9IjU5NjIyMjQxNTg5NTUyNzM5MzIiPiJHZW9sb2thbGlzaWVydW5nc2JlcmVjaHRpZ3VuZ2VuIGRlcyBCcm93c2VycyDDpG5kZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfd3JpdGVHZW9sb2NhdGlvblBlcm1pc3Npb25zIiBtc2dpZD0iMTA4Mzc0MzIzNDUyMjYzODc0NyI+IkVybcO2Z2xpY2h0IGRlciBBcHAsIGRpZSBHZW9sb2thbGlzaWVydW5nc2JlcmVjaHRpZ3VuZ2VuIGRlcyBCcm93c2VycyB6dSDDpG5kZXJuLiBTY2jDpGRsaWNoZSBBcHBzIGvDtm5uZW4gc28gU3RhbmRvcnRpbmZvcm1hdGlvbmVuIGFuIGJlbGllYmlnZSBXZWJzaXRlcyBzZW5kZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4iTcO2Y2h0ZW4gU2llLCBkYXNzIGRlciBCcm93c2VyIGRpZXNlcyBQYXNzd29ydCBzcGVpY2hlcnQ/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9tZXNzYWdlIiBtc2dpZD0iNzY3MzQ0Njg3MTM5MTk1NzkwIj4iTcO2Y2h0ZXN0IGR1LCBkYXNzIGRlciBCcm93c2VyIGRpZXNlcyBQYXNzd29ydCBzcGVpY2hlcnQ/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9wYXNzd29yZF9ub3Rub3ciIG1zZ2lkPSI2Mzg5Njc1MzE2NzA2Njk5NzU4Ij4iTmljaHQgamV0enQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+IlNwZWljaGVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhdmVfcGFzc3dvcmRfbmV2ZXIiIG1zZ2lkPSI4Mjc0MzMwMjk2Nzg1ODU1MTA1Ij4iTmllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iU2llIHNpbmQgbmljaHQgenVtIMOWZmZuZW4gZGllc2VyIFNlaXRlIGJlcmVjaHRpZ3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3Blbl9wZXJtaXNzaW9uX2RlbnkiIG1zZ2lkPSI3Mzc0MDM2NzA4MzE2NjI5ODAwIj4iRHUgYmlzdCBuaWNodCB6dW0gw5ZmZm5lbiBkaWVzZXIgU2VpdGUgYmVyZWNodGlndC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiJUZXh0IGluIFp3aXNjaGVuYWJsYWdlIGtvcGllcnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibW9yZV9pdGVtX2xhYmVsIiBtc2dpZD0iNDY1MDkxODkyMzA4MzMyMDQ5NSI+Ik1laHIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmVwZW5kX3Nob3J0Y3V0X2xhYmVsIiBtc2dpZD0iMjU3MjIxNDQ2MTY3NjAxNTY0MiI+Ik1lbsO8KyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQXVzc2NobmVpZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkVpbmbDvGdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iTnVyIFRleHQgZWluZsO8Z2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJFcnNldHplbi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJMw7ZzY2hlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIGtvcGllcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iVGV4dCBhdXN3w6RobGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJSw7xja2fDpG5naWcgbWFjaGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJXaWVkZXJob2xlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXh0YXVzd2FobCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJadW0gV8O2cnRlcmJ1Y2ggaGluenVmw7xnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkzDtnNjaGVuIjwvc3RyaW5nPgpAQCAtOTAxLDEwICs5MDUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFlcnJfcHJvY2VzcyIgbXNnaWQ9IjQ1MDcwNTg5OTcwMzU2OTc1NzkiPiJEZXIgUHJvemVzcyBcIjx4bGlmZjpnIGlkPSJQUk9DRVNTIj4lMSRzPC94bGlmZjpnPlwiIHd1cmRlIGJlZW5kZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWVycl9wcm9jZXNzX3NpbGVuY2UiIG1zZ2lkPSI0MjI2Njg1NTMwMTk2MDAwMjIyIj4iU2lsZW5jZSBzdMO8cnp0IGJlaSA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz4gYmlzIHp1bSBOZXVzdGFydCBhYi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbnJfdGl0bGUiIG1zZ2lkPSI0MzUxOTQ4NDgxNDU5MTM1NzA5Ij48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IHJlYWdpZXJ0IG5pY2h0LlxuXG5Nw7ZjaHRlbiBTaWUgZGllIEFwcCBzY2hsaWXDn2VuPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IkFrdGl2aXTDpHQgXCI8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+XCIgcmVhZ2llcnQgbmljaHQuXG5cbk3DtmNodGVuIFNpZSBzaWUgYmVlbmRlbj8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHJlYWdpZXJ0IG5pY2h0LiBNw7ZjaHRlbiBTaWUgZGllIEFwcCBzY2hsaWXDn2VuPyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3plc3MgXCI8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz5cIiByZWFnaWVydCBuaWNodC5cblxuTcO2Y2h0ZW4gU2llIGlobiBiZWVuZGVuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9hcHBsaWNhdGlvbiIgbXNnaWQ9IjE5MDQ0NzcxODkwNTcxOTkwNjYiPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+IHJlYWdpZXJ0IG5pY2h0LlxuXG5Nw7ZjaHRlc3QgZHUgZGllIEFwcCBzY2hsaWXDn2VuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9hY3Rpdml0eV9wcm9jZXNzIiBtc2dpZD0iNTc3NjIwOTg4MzI5OTA4OTc2NyI+IkFrdGl2aXTDpHQgXCI8eGxpZmY6ZyBpZD0iQUNUSVZJVFkiPiUxJHM8L3hsaWZmOmc+XCIgcmVhZ2llcnQgbmljaHQuXG5cbk3DtmNodGVzdCBkdSBzaWUgYmVlbmRlbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbnJfYXBwbGljYXRpb25fcHJvY2VzcyIgbXNnaWQ9Ijg5NDE3NTc2MDczNDA0ODEwNTciPiI8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IHJlYWdpZXJ0IG5pY2h0LiBNw7ZjaHRlc3QgZHUgZGllIEFwcCBzY2hsaWXDn2VuPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFucl9wcm9jZXNzIiBtc2dpZD0iNjUxMzIwOTg3NDg4MDUxNzEyNSI+IlByb3plc3MgXCI8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTEkczwveGxpZmY6Zz5cIiByZWFnaWVydCBuaWNodC5cblxuTcO2Y2h0ZXN0IGR1IGlobiBiZWVuZGVuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2Nsb3NlIiBtc2dpZD0iODM0NjA3MjA5NDUyMTI2NTYwNSI+Ik9LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwb3J0IiBtc2dpZD0iNDA2MDIxODI2MDk4NDc5NTcwNiI+IkJlcmljaHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ3YWl0IiBtc2dpZD0iNzE0NzExODIxNzIyNjMxNzczMiI+IldhcnRlbiI8L3N0cmluZz4KQEAgLTEwOTIsNyArMTA5Niw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJkaWFsX251bWJlcl91c2luZyIgbXNnaWQ9IjU3ODkxNzY0MjUxNjc1NzM1ODYiPiJOdW1tZXJcbm1pdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4gd8OkaGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNyZWF0ZV9jb250YWN0X3VzaW5nIiBtc2dpZD0iNDk0NzQwNTIyNjc4ODEwNDUzOCI+Ik5ldWVyIEtvbnRha3Rcbm1pdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lczwveGxpZmY6Zz4gZXJzdGVsbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2hlYWRlciIgbXNnaWQ9IjIxMDYxMDM4MTc5Mzc4NTk2NjIiPiJEaWUgZm9sZ2VuZGVuIEFwcHMgYmVuw7Z0aWdlbiBkaWUgQmVyZWNodGlndW5nIHp1bSBha3R1ZWxsZW4gdW5kIHp1a8O8bmZ0aWdlbiBadWdyaWZmIGF1ZiBJaHIgS29udG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZ3JhbnRfY3JlZGVudGlhbHNfcGVybWlzc2lvbl9tZXNzYWdlX2Zvb3RlciIgbXNnaWQ9IjMxMjUyMTEzNDMzNzkzNzY1NjEiPiJNw7ZjaHRlbiBTaWUgZGllc2UgQW5mcmFnZSB6dWxhc3Nlbj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncmFudF9jcmVkZW50aWFsc19wZXJtaXNzaW9uX21lc3NhZ2VfZm9vdGVyIiBtc2dpZD0iMzEyNTIxMTM0MzM3OTM3NjU2MSI+Ik3DtmNodGVzdCBkdSBkaWVzZSBBbmZyYWdlIHp1bGFzc2VuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImdyYW50X3Blcm1pc3Npb25zX2hlYWRlcl90ZXh0IiBtc2dpZD0iNjg3NDQ5NzQwODIwMTgyNjcwOCI+Ilp1Z3JpZmZzYW5mb3JkZXJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGxvdyIgbXNnaWQ9IjcyMjU5NDg4MTEyOTYzODY1NTEiPiJadWxhc3NlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbnkiIG1zZ2lkPSIyMDgxODc5ODg1NzU1NDM0NTA2Ij4iQWJsZWhuZW4iPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iSGludGVyZ3J1bmQgw6RuZGVybiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkJlbmFjaHJpY2h0aWd1bmdzLUxpc3RlbmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJCZWRpbmd1bmdzcHJvdmlkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJCZW5hY2hyaWNodGlndW5nc2Fzc2lzdGVudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2aWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiB3dXJkZSB2b24gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJadW0gVmVyd2FsdGVuIGRlcyBOZXR6d2Vya3MgYmVyw7xocmVuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlZvbiBJaHJlbSBBZG1pbmlzdHJhdG9yIGFrdHVhbGlzaWVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iVm9uIElocmVtIEFkbWluaXN0cmF0b3IgZ2Vsw7ZzY2h0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJEZXIgRW5lcmdpZXNwYXJtb2R1cyBzY2hvbnQgZGVuIEFra3UsIGluZGVtIGVyIGRpZSBMZWlzdHVuZyBkZXMgR2Vyw6R0cyByZWR1emllcnQgdW5kIGRpZSBWaWJyYXRpb25zZnVua3Rpb24gc293aWUgZGllIG1laXN0ZW4gSGludGVyZ3J1bmRkYXRlbmFrdGl2aXTDpHRlbiBlaW5zY2hyw6Rua3QuIEUtTWFpbCwgU01TL01NUyB1bmQgYW5kZXJlIEFwcHMsIGRpZSBhdWYgSWhyZW0gR2Vyw6R0IHN5bmNocm9uaXNpZXJ0IHdlcmRlbiwgd2VyZGVuIG3DtmdsaWNoZXJ3ZWlzZSBlcnN0IG5hY2ggZGVtIMOWZmZuZW4gYWt0dWFsaXNpZXJ0LlxuXG5EZXIgRW5lcmdpZXNwYXJtb2R1cyB3aXJkIGF1dG9tYXRpc2NoIGRlYWt0aXZpZXJ0LCB3ZW5uIElociBHZXLDpHQgYXVmZ2VsYWRlbiB3aXJkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvY2tpZXJ0OiBLZWluZSBCZW5hY2hyaWNodGlndW5nZW4gYW56ZWlnZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTmllZHJpZzogQmVuYWNocmljaHRpZ3VuZ2VuIGdhbnogdW50ZW4gaW4gZGVyIEJlbmFjaHJpY2h0aWd1bmdzbGlzdGUgdW5kIG9obmUgVG9uIGFuemVpZ2VuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IEJlbmFjaHJpY2h0aWd1bmdlbiBvaG5lIFRvbiBhbnplaWdlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSG9jaDogQmVuYWNocmljaHRpZ3VuZ2VuIGdhbnogb2JlbiBpbiBkZXIgQmVuYWNocmljaHRpZ3VuZ3NsaXN0ZSB1bmQgbWl0IFRvbiBhbnplaWdlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJEcmluZ2VuZDogTWl0IFRvbiBhdWYgZGVtIERpc3BsYXkgZWluYmxlbmRlbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZMKgTWludXRlbiAoYmlzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjHCoE1pbnV0ZSAoYmlzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gYXVzZ2V3w6RobHQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJTb25zdGlnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJEdSBsZWdzdCBkaWUgV2ljaHRpZ2tlaXQgZGllc2VyIEJlbmFjaHJpY2h0aWd1bmdlbiBmZXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iRGllc2UgQmVuYWNocmljaHRpZ3VuZyBpc3QgYXVmZ3J1bmQgZGVyIGJldGVpbGlndGVuIFBlcnNvbmVuIHdpY2h0aWcuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCBkNWZkZDI5Li4zZTI3N2MzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLOms67zrXOr860z4nOvM6xIM+Ez47Pgc6xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+Is6az4HPhc+Gz4wgz4DOtc+BzrnOtc+Hz4zOvM61zr3OvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Is6Rz4PPhs6xzrvOrs+CIM67zrXOuc+Ezr/Phc+BzrPOr86xIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4izqPPjc+Dz4TOt868zrEgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4izqDPgc6/z4PPic+AzrnOus+MIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLOoM61z4HOuc67zrHOvM6yzqzOvc61zrkgz4DPgc6/z4PPic+AzrnOus6sIM60zrXOtM6/zrzOrc69zrEsIM+Mz4DPic+CIM61zq/Ovc6xzrkgzr/OuSDOsc+BzrnOuM68zr/OryDPgM65z4PPhM+Jz4TOuc66z47OvSDOus6xz4HPhM+Ozr0gzrrOsc65IM6/zrkgzrrPic60zrnOus6/zq8gz4DPgc+Mz4POss6xz4POt8+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4izpXOu86tzrPOvs+EzrUgz4TOtyDOvM61zrPOrc64z4XOvc+Dzrcgz4TOt8+CIM6/zrjPjM69zrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLOlc67zq3Os86+z4TOtSDPhM6/IM61z4DOr8+AzrXOtM6/IM62zr/Phc68IM66zrHOuSDPhM63IM64zq3Pg863IM+EzrfPgiDOv864z4zOvc63z4IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4izpXOus+Ezq3Ou861z4POtyDOus65zr3Ors+DzrXPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4TOvyDPgM6sz4TOt868zrEsIM+EzrfOvSDOv867zq/Pg864zrfPg863LCDPhM6/IM+AzrvOt8+Dzq/Osc+DzrzOsSDOus6xzrkgzqzOu867zrXPgiDOus65zr3Ors+DzrXOuc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Is6xz4DOtc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgzq4gz4TPgc6/z4DOv8+Azr/Or863z4POtyDOs8+BzrHOvM68zq7PgiDOus6xz4TOrM+Dz4TOsc+DzrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDOvc6xIM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOtc6vIM+EzrcgzrPPgc6xzrzOvM6uIM66zrHPhM6sz4PPhM6xz4POt8+CIM6uIM69zrEgz4DPgc6/z4POuM6tz4TOtc65IM66zrHOuSDOvc6xIM6xz4bOsc65z4HOtc6vIM61zrnOus6/zr3Or860zrnOsSDPg8+Fz4PPhM6uzrzOsc+Ezr/Pgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4izr/Pgc65z4POvM+Mz4Igz4nPgiDOs8+BzrHOvM68zq7PgiDOus6xz4TOrM+Dz4TOsc+DzrfPgiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+EzrcgzrvOrs+Izrcgz4bPic+Ezr/Os8+BzrHPhs65z47OvSDOus6xzrkgzrLOr869z4TOtc6/IM68zrUgz4TOtyDPhs+Jz4TOv86zz4HOsc+GzrnOus6uIM68zrfPh86xzr3Ori4gzpHPhc+Ezq4gzrcgzqzOtM61zrnOsSDOtM6vzr3Otc65IM+EzrcgzrTPhc69zrHPhM+Mz4TOt8+EzrEgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDOvc6xIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOryDPhM63IM+Gz4nPhM6/zrPPgc6xz4bOuc66zq4gzrzOt8+HzrHOvc6uIM6xzr3OrCDPgM6sz4POsSDPg8+EzrnOs868zq4gz4fPic+Bzq/PgiDPhM63zr0gzq3Os866z4HOuc+Dzq4gz4POsc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLOrc67zrXOs8+Hzr/PgiDOtM+Mzr3Ot8+DzrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4izpXPgM65z4TPgc6tz4DOtc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gz4TOv869IM6tzrvOtc6zz4fOvyDPhM63z4IgzrTPjM69zrfPg863z4IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Is6tzrvOtc6zz4fOv8+CIM+GzrHOus6/z40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Is6Vz4DOuc+Ez4HOrc+AzrXOuSDPg8+EzrfOvSDOtc+GzrHPgc68zr/Os86uIM+Ezr/OvSDOrc67zrXOs8+Hzr8gz4TOv8+FIM+GzrHOus6/z40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4izrHPgM61z4XOuM61zq/Osc+CIM66zrvOrs+Dzrcgz4TOt867zrXPhs+Jzr3Ouc66z47OvSDOsc+BzrnOuM68z47OvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLOlc+AzrnPhM+Bzq3PgM61zrkgz4PPhM63zr0gzrXPhs6xz4HOvM6/zrPOriDPhM63zr0gzrrOu86uz4POtyDOsc+BzrnOuM68z47OvSDPhM63zrvOtc+Gz47Ovc6/z4Ugz4fPic+Bzq/PgiDOtM65zrrOriDPg86xz4Igz4DOsc+Bzq3OvM6yzrHPg863LiDOkc+Fz4TPjCDOvM+Azr/Pgc61zq8gzr3OsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOvM63IM6xzr3Osc68zrXOvc+MzrzOtc69zrXPgiDPh8+BzrXPjs+DzrXOuc+CIM6uIM66zrvOrs+DzrXOuc+CLiDOiM+HzrXPhM61IM+Fz4DPjM+Izrcgz4zPhM65IM60zrXOvSDOtc+AzrnPhM+Bzq3PgM61z4TOsc65IM+Dz4TOt869IM61z4bOsc+BzrzOv86zzq4gzrcgzrrOu86uz4POtyDOsc+BzrnOuM68z47OvSDOrc66z4TOsc66z4TOt8+CIM6xzr3OrM6zzrrOt8+CLiDOn865IM66zrHOus+MzrLOv8+FzrvOtc+CIM61z4bOsc+BzrzOv86zzq3PgiDOtc69zrTOrc+HzrXPhM6xzrkgzr3OsSDPg86xz4IgzrrOv8+Dz4TOr8+Dzr/Phc69IM+Hz4HOrs68zrHPhM6xLCDPgM+BzrHOs868zrHPhM6/z4DOv865z47Ovc+EzrHPgiDOus67zq7Pg861zrnPgiDPh8+Jz4HOr8+CIM+EzrfOvSDOrc6zzrrPgc65z4POriDPg86xz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLPgM+Bz4zPg86yzrHPg863IM+Dz4TOt869IM+Fz4DOt8+BzrXPg86vzrEgzrrOu86uz4POtc+Jzr0gz4TOt8+CIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4izpHPgM6/zrrOv8+Azq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Is6Rzr3PhM65zrPPgc6xz4bOriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Is6Vz4DOuc66z4zOu867zrfPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLOlc+AzrnOus+MzrvOu863z4POtyDPic+CIM6xz4DOu8+MIM66zrXOr868zrXOvc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLOkc69z4TOuc66zrHPhM6sz4PPhM6xz4POty4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLOlM65zrHOs8+BzrHPhs6uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLOkc69z4TOuc6zz4HOsc+Gzq4gzrTOuc61z43OuM+Fzr3Pg863z4IgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4izpXPgM65zrvOv86zzq4gzrrOtc65zrzOrc69zr/PhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4izpHOvc6xzq/Pgc61z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4izpXPgM6xzr3OrM67zrfPiM63Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Is6Vz4DOuc67zr/Os86uIM66zrXOuc68zq3Ovc6/z4UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4izqDPgc6/z4POuM6uzrrOtyDPg8+Ezr8gzrvOtc6+zrnOus+MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLOlM65zrHOs8+BzrHPhs6uIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+Is6RzrvOu86xzrPOriDPhM6xz4DOtc+Ez4POsc+Bzq/Osc+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4izqXPgM63z4HOtc+Dzq/OsSDOsc66z4HPjM6xz4POt8+CIM61zrnOtM6/z4DOv86vzrfPg863z4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Is6gzqzPgc6/z4fOv8+CIM+Dz4XOvc64zrfOus+Ozr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLOks6/zrfOuM+Mz4IgzrXOuc60zr/PgM6/zrnOrs+DzrXPic69Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLOpM6/IFZQTiDOtc69zrXPgc6zzr/PgM6/zrnOrs64zrfOus61Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4izqTOvyBWUE4gzrXOvc61z4HOs86/z4DOv865zq7OuM63zrrOtSDOsc+Az4wgz4TOt869IM61z4bOsc+BzrzOv86zzq4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4izpHOs86zzq/Ovs+EzrUgzrPOuc6xIM+EzrcgzrTOuc6xz4fOtc6vz4HOuc+Dzrcgz4TOv8+FIM60zrnOus+Ez43Ov8+FLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLOlc69zrfOvM61z4HPjs64zrfOus61IM6xz4DPjCDPhM6/IM60zrnOsc+HzrXOuc+BzrnPg8+Ezq4gz4POsc+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLOlM65zrHOs8+BzqzPhs63zrrOtSDOsc+Az4wgz4TOvyDOtM65zrHPh861zrnPgc65z4PPhM6uIM+DzrHPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4izqDPgc6/zrrOtc65zrzOrc69zr/PhSDOvc6xIM6yzrXOu8+EzrnPjs+DzrXOuSDPhM63IM60zrnOrM+BzrrOtc65zrEgzrbPic6uz4Igz4TOt8+CIM68z4DOsc+EzrHPgc6vzrHPgiDPg86xz4IsIM63IM6Vzr7Ov865zrrOv869z4zOvM63z4POtyDOvM+AzrHPhM6xz4HOr86xz4IgzrzOtc65z47Ovc61zrkgz4TOt869IM6xz4DPjM60zr/Pg863IM+EzrfPgiDPg8+Fz4POus61z4XOrs+CIM+DzrHPgiDOus6xzrkgz4DOtc+BzrnOv8+Bzq/Ots61zrkgzrvOtc65z4TOv8+Fz4HOs86vzrXPgiDPjM+Az4nPgiDOtyDOtM+Mzr3Ot8+DzrcsIM6/zrkgz4XPgM63z4HOtc+Dzq/Otc+CIM+Ezr/PgM6/zrjOtc+Dzq/Osc+CIM66zrHOuSDPhM6xIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgzrTOtc60zr/OvM6tzr3OsSDPgM6xz4HOsc+DzrrOt869zq/Ov8+FLiDOpM6/IM63zrvOtc66z4TPgc6/zr3Ouc66z4wgz4TOsc+Hz4XOtM+Bzr/OvM61zq/OvywgzrcgzrHOvc+EzrHOu867zrHOs86uIM68zrfOvc+FzrzOrM+Ez4nOvSDOus6xzrkgzqzOu867zrXPgiDOtc+GzrHPgc68zr/Os86tz4Igz4DOv8+FIM6yzrHPg86vzrbOv869z4TOsc65IM+Dz4TOvyDPg8+FzrPPh8+Bzr/Ovc65z4POvM+MIM61zr3OtM6tz4fOtc+EzrHOuSDOvc6xIM68zrfOvSDOtc69zrfOvM61z4HPjs69zr/Ovc+EzrHOuSDOrc+Jz4Igz4zPhM6/z4Ugz4TOuc+CIM6xzr3Ov86vzr7Otc+EzrUuXG5cbs6XIM6Vzr7Ov865zrrOv869z4zOvM63z4POtyDOvM+AzrHPhM6xz4HOr86xz4IgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc61zq/PhM6xzrkgzrHPhc+Ez4zOvM6xz4TOsSDPjM+EzrHOvSDOtyDPg8+Fz4POus61z4XOriDPg86xz4Igz4bOv8+Bz4TOr862zrXOuS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+Is6Rz4DOv866zrvOtc65z4POvM6tzr3Otc+COiDOnc6xIM68zrfOvSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkgz4DOv8+Ezq0gzrHPhc+Ezq3PgiDOv865IM61zrnOtM6/z4DOv865zq7Pg861zrnPgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLOp86xzrzOt867zq7PgiDOss6xz4HPjc+EzrfPhM6xz4I6IM6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM+Dz4TOvyDOus6sz4TPiSDPhM68zq7OvM6xIM+EzrfPgiDOu86vz4PPhM6xz4IgzrXOuc60zr/PgM6/zrnOrs+DzrXPic69IM+Hz4nPgc6vz4Igz4TOtyDPg8+Fzr3Ov860zrXOr86xIM6uz4fOv8+FIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLOms6xzr3Ov869zrnOus6uIM6yzrHPgc+Nz4TOt8+EzrE6IM6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM6xz4XPhM6tz4Igzr/OuSDOtc65zrTOv8+Azr/Ouc6uz4POtc65z4Igz4fPic+Bzq/PgiDOrs+Hzr8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Is6lz4jOt867zq7PgiDOss6xz4HPjc+EzrfPhM6xz4I6IM6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM+Dz4TOt869IM66zr/Pgc+Fz4bOriDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDPg8+Fzr3Ov860zrXPhc+MzrzOtc69zrXPgiDOsc+Az4wgzrrOrM+Azr/Ouc6/zr0gzq7Ph86/Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Is6Vz4DOtc6vzrPOv8+Fz4POtc+COiDOnc6xIM+Az4HOv86yzqzOu867zr/Ovc+EzrHOuSDPg8+EzrfOvSDOv864z4zOvc63IM66zrHOuSDOvc6xIM+Dz4XOvc6/zrTOtc+Nzr/Ovc+EzrHOuSDOsc+Az4wgzrrOrM+Azr/Ouc6/zr0gzq7Ph86/Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Ok865zrEgJTEkZCDOu861z4DPhM6sICjOrc+Jz4Igz4TOuc+CIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPs6TzrnOsSDOrc69zrEgzrvOtc+Az4TPjCAozq3Pic+CIM+EzrnPgiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+zpXPgM65zrvOrc+Hz4TOt866zrUgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4izpTOuc6sz4bOv8+BzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4izpzPgM6/z4HOtc6vz4TOtSDOvc6xIM+Bz4XOuM68zq/Pg861z4TOtSDPhM63IM6yzrHPgc+Nz4TOt8+EzrEgzrHPhc+Ez47OvSDPhM+Jzr0gzrXOuc60zr/PgM6/zrnOrs+DzrXPic69LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4izpHPhc+Ez4wgzrXOr869zrHOuSDPg863zrzOsc69z4TOuc66z4wgzrvPjM6zz4kgz4TPic69IM6xz4TPjM68z4nOvSDPgM6/z4Ugz4PPhc68zrzOtc+Ezq3Ph86/z4XOvS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKaW5kZXggNmMyMDc2My4uMGVkYzQzOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluY2x1ZGVzIHBlcnNvbmFsIGRhdGEgc3VjaCBhcyBjcmVkaXQgY2FyZCBudW1iZXJzIGFuZCBwYXNzd29yZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sIGRpc3BsYXkgbWFnbmlmaWNhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sIHRoZSBkaXNwbGF5XCdzIHpvb20gbGV2ZWwgYW5kIHBvc2l0aW9uaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IlBlcmZvcm0gZ2VzdHVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkNhbiB0YXAsIHN3aXBlLCBwaW5jaCBhbmQgcGVyZm9ybSBvdGhlciBnZXN0dXJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkaXNhYmxlIG9yIG1vZGlmeSBzdGF0dXMgYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkFsbG93cyB0aGUgYXBwIHRvIGRpc2FibGUgdGhlIHN0YXR1cyBiYXIgb3IgYWRkIGFuZCByZW1vdmUgc3lzdGVtIGljb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJiZSB0aGUgc3RhdHVzIGJhciI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFsbG93cyB0aGUgYXBwIHRvIHRha2UgcGljdHVyZXMgYW5kIHZpZGVvcyB3aXRoIHRoZSBjYW1lcmEuIFRoaXMgcGVybWlzc2lvbiBhbGxvd3MgdGhlIGFwcCB0byB1c2UgdGhlIGNhbWVyYSBhdCBhbnkgdGltZSB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgdmlicmF0b3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2wgZmxhc2hsaWdodCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgZmxhc2hsaWdodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJkaXJlY3RseSBjYWxsIHBob25lIG51bWJlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY2FsbCBwaG9uZSBudW1iZXJzIHdpdGhvdXQgeW91ciBpbnRlcnZlbnRpb24uIFRoaXMgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNoYXJnZXMgb3IgY2FsbHMuIE5vdGUgdGhhdCB0aGlzIGRvZXNuXCd0IGFsbG93IHRoZSBhcHAgdG8gY2FsbCBlbWVyZ2VuY3kgbnVtYmVycy4gTWFsaWNpb3VzIGFwcHMgbWF5IGNvc3QgeW91IG1vbmV5IGJ5IG1ha2luZyBjYWxscyB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZXNzIElNUyBjYWxsIHNlcnZpY2UiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkN1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29weSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQYXN0ZSBhcyBwbGFpbiB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJSZXBsYWNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkRlbGV0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29weSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY3QgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXh0IHNlbGVjdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZGQgdG8gZGljdGlvbmFyeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRGVsZXRlIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNoYW5nZSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJOb3RpZmljYXRpb24gbGlzdGVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkNvbmRpdGlvbiBwcm92aWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik5vdGlmaWNhdGlvbiBhc3Npc3RhbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmF0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gaXMgYWN0aXZhdGVkIGJ5IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvdWNoIHRvIG1hbmFnZSB0aGUgbmV0d29yay4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVXBkYXRlZCBieSB5b3VyIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkRlbGV0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJUbyBoZWxwIGltcHJvdmUgYmF0dGVyeSBsaWZlLCBiYXR0ZXJ5IHNhdmVyIHJlZHVjZXMgeW91ciBkZXZpY2XigJlzIHBlcmZvcm1hbmNlIGFuZCBsaW1pdHMgdmlicmF0aW9uLCBsb2NhdGlvbiBzZXJ2aWNlcyBhbmQgbW9zdCBiYWNrZ3JvdW5kIGRhdGEuIEVtYWlsLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBhcHBzIHRoYXQgcmVseSBvbiBzeW5jaW5nIG1heSBub3QgdXBkYXRlIHVubGVzcyB5b3Ugb3BlbiB0aGVtLlxuXG5CYXR0ZXJ5IHNhdmVyIHR1cm5zIG9mZiBhdXRvbWF0aWNhbGx5IHdoZW4geW91ciBkZXZpY2UgaXMgY2hhcmdpbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9ja2VkOiBOZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTG93OiBTaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IFNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSGlnaDogU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50OiBQZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+Rm9yICUxJGQgbWludXRlcyAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Rm9yIG9uZSBtaW51dGUgKHVudGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0ZWQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJNaXNjZWxsYW5lb3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IllvdSBzZXQgdGhlIGltcG9ydGFuY2Ugb2YgdGhlc2Ugbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlIHBlb3BsZSBpbnZvbHZlZC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggNmMyMDc2My4uMGVkYzQzOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluY2x1ZGVzIHBlcnNvbmFsIGRhdGEgc3VjaCBhcyBjcmVkaXQgY2FyZCBudW1iZXJzIGFuZCBwYXNzd29yZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sIGRpc3BsYXkgbWFnbmlmaWNhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sIHRoZSBkaXNwbGF5XCdzIHpvb20gbGV2ZWwgYW5kIHBvc2l0aW9uaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IlBlcmZvcm0gZ2VzdHVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkNhbiB0YXAsIHN3aXBlLCBwaW5jaCBhbmQgcGVyZm9ybSBvdGhlciBnZXN0dXJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkaXNhYmxlIG9yIG1vZGlmeSBzdGF0dXMgYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkFsbG93cyB0aGUgYXBwIHRvIGRpc2FibGUgdGhlIHN0YXR1cyBiYXIgb3IgYWRkIGFuZCByZW1vdmUgc3lzdGVtIGljb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJiZSB0aGUgc3RhdHVzIGJhciI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFsbG93cyB0aGUgYXBwIHRvIHRha2UgcGljdHVyZXMgYW5kIHZpZGVvcyB3aXRoIHRoZSBjYW1lcmEuIFRoaXMgcGVybWlzc2lvbiBhbGxvd3MgdGhlIGFwcCB0byB1c2UgdGhlIGNhbWVyYSBhdCBhbnkgdGltZSB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgdmlicmF0b3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2wgZmxhc2hsaWdodCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgZmxhc2hsaWdodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJkaXJlY3RseSBjYWxsIHBob25lIG51bWJlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY2FsbCBwaG9uZSBudW1iZXJzIHdpdGhvdXQgeW91ciBpbnRlcnZlbnRpb24uIFRoaXMgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNoYXJnZXMgb3IgY2FsbHMuIE5vdGUgdGhhdCB0aGlzIGRvZXNuXCd0IGFsbG93IHRoZSBhcHAgdG8gY2FsbCBlbWVyZ2VuY3kgbnVtYmVycy4gTWFsaWNpb3VzIGFwcHMgbWF5IGNvc3QgeW91IG1vbmV5IGJ5IG1ha2luZyBjYWxscyB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZXNzIElNUyBjYWxsIHNlcnZpY2UiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkN1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29weSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQYXN0ZSBhcyBwbGFpbiB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJSZXBsYWNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkRlbGV0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29weSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY3QgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXh0IHNlbGVjdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZGQgdG8gZGljdGlvbmFyeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRGVsZXRlIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNoYW5nZSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJOb3RpZmljYXRpb24gbGlzdGVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkNvbmRpdGlvbiBwcm92aWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik5vdGlmaWNhdGlvbiBhc3Npc3RhbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmF0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gaXMgYWN0aXZhdGVkIGJ5IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvdWNoIHRvIG1hbmFnZSB0aGUgbmV0d29yay4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVXBkYXRlZCBieSB5b3VyIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkRlbGV0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJUbyBoZWxwIGltcHJvdmUgYmF0dGVyeSBsaWZlLCBiYXR0ZXJ5IHNhdmVyIHJlZHVjZXMgeW91ciBkZXZpY2XigJlzIHBlcmZvcm1hbmNlIGFuZCBsaW1pdHMgdmlicmF0aW9uLCBsb2NhdGlvbiBzZXJ2aWNlcyBhbmQgbW9zdCBiYWNrZ3JvdW5kIGRhdGEuIEVtYWlsLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBhcHBzIHRoYXQgcmVseSBvbiBzeW5jaW5nIG1heSBub3QgdXBkYXRlIHVubGVzcyB5b3Ugb3BlbiB0aGVtLlxuXG5CYXR0ZXJ5IHNhdmVyIHR1cm5zIG9mZiBhdXRvbWF0aWNhbGx5IHdoZW4geW91ciBkZXZpY2UgaXMgY2hhcmdpbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9ja2VkOiBOZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTG93OiBTaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IFNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSGlnaDogU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50OiBQZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+Rm9yICUxJGQgbWludXRlcyAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Rm9yIG9uZSBtaW51dGUgKHVudGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0ZWQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJNaXNjZWxsYW5lb3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IllvdSBzZXQgdGhlIGltcG9ydGFuY2Ugb2YgdGhlc2Ugbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlIHBlb3BsZSBpbnZvbHZlZC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggNmMyMDc2My4uMGVkYzQzOCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJMb2NrIG5vdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW50cyBoaWRkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluY2x1ZGVzIHBlcnNvbmFsIGRhdGEgc3VjaCBhcyBjcmVkaXQgY2FyZCBudW1iZXJzIGFuZCBwYXNzd29yZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sIGRpc3BsYXkgbWFnbmlmaWNhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sIHRoZSBkaXNwbGF5XCdzIHpvb20gbGV2ZWwgYW5kIHBvc2l0aW9uaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IlBlcmZvcm0gZ2VzdHVyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkNhbiB0YXAsIHN3aXBlLCBwaW5jaCBhbmQgcGVyZm9ybSBvdGhlciBnZXN0dXJlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkaXNhYmxlIG9yIG1vZGlmeSBzdGF0dXMgYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkFsbG93cyB0aGUgYXBwIHRvIGRpc2FibGUgdGhlIHN0YXR1cyBiYXIgb3IgYWRkIGFuZCByZW1vdmUgc3lzdGVtIGljb25zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJiZSB0aGUgc3RhdHVzIGJhciI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFsbG93cyB0aGUgYXBwIHRvIHRha2UgcGljdHVyZXMgYW5kIHZpZGVvcyB3aXRoIHRoZSBjYW1lcmEuIFRoaXMgcGVybWlzc2lvbiBhbGxvd3MgdGhlIGFwcCB0byB1c2UgdGhlIGNhbWVyYSBhdCBhbnkgdGltZSB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgdmlicmF0b3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2wgZmxhc2hsaWdodCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgZmxhc2hsaWdodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJkaXJlY3RseSBjYWxsIHBob25lIG51bWJlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQWxsb3dzIHRoZSBhcHAgdG8gY2FsbCBwaG9uZSBudW1iZXJzIHdpdGhvdXQgeW91ciBpbnRlcnZlbnRpb24uIFRoaXMgbWF5IHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNoYXJnZXMgb3IgY2FsbHMuIE5vdGUgdGhhdCB0aGlzIGRvZXNuXCd0IGFsbG93IHRoZSBhcHAgdG8gY2FsbCBlbWVyZ2VuY3kgbnVtYmVycy4gTWFsaWNpb3VzIGFwcHMgbWF5IGNvc3QgeW91IG1vbmV5IGJ5IG1ha2luZyBjYWxscyB3aXRob3V0IHlvdXIgY29uZmlybWF0aW9uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZXNzIElNUyBjYWxsIHNlcnZpY2UiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkN1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29weSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IlBhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQYXN0ZSBhcyBwbGFpbiB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJSZXBsYWNlLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkRlbGV0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29weSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY3QgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZXh0IHNlbGVjdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZGQgdG8gZGljdGlvbmFyeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRGVsZXRlIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNoYW5nZSB3YWxscGFwZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJOb3RpZmljYXRpb24gbGlzdGVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkNvbmRpdGlvbiBwcm92aWRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik5vdGlmaWNhdGlvbiBhc3Npc3RhbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmF0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gaXMgYWN0aXZhdGVkIGJ5IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvdWNoIHRvIG1hbmFnZSB0aGUgbmV0d29yay4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVXBkYXRlZCBieSB5b3VyIGFkbWluaXN0cmF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkRlbGV0ZWQgYnkgeW91ciBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJUbyBoZWxwIGltcHJvdmUgYmF0dGVyeSBsaWZlLCBiYXR0ZXJ5IHNhdmVyIHJlZHVjZXMgeW91ciBkZXZpY2XigJlzIHBlcmZvcm1hbmNlIGFuZCBsaW1pdHMgdmlicmF0aW9uLCBsb2NhdGlvbiBzZXJ2aWNlcyBhbmQgbW9zdCBiYWNrZ3JvdW5kIGRhdGEuIEVtYWlsLCBtZXNzYWdpbmcsIGFuZCBvdGhlciBhcHBzIHRoYXQgcmVseSBvbiBzeW5jaW5nIG1heSBub3QgdXBkYXRlIHVubGVzcyB5b3Ugb3BlbiB0aGVtLlxuXG5CYXR0ZXJ5IHNhdmVyIHR1cm5zIG9mZiBhdXRvbWF0aWNhbGx5IHdoZW4geW91ciBkZXZpY2UgaXMgY2hhcmdpbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9ja2VkOiBOZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTG93OiBTaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IFNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSGlnaDogU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50OiBQZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+Rm9yICUxJGQgbWludXRlcyAodW50aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Rm9yIG9uZSBtaW51dGUgKHVudGlsIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0ZWQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJNaXNjZWxsYW5lb3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IllvdSBzZXQgdGhlIGltcG9ydGFuY2Ugb2YgdGhlc2Ugbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlIHBlb3BsZSBpbnZvbHZlZC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggNGUyMDI5Zi4uYmQyZjkxYiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9xdWVhciBhaG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW5pZG9zIG9jdWx0b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RvIHNlZ3VybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbWEgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluY2x1eWUgZGF0b3MgcGVyc29uYWxlcywgY29tbyBuw7ptZXJvcyBkZSB0YXJqZXRhIGRlIGNyw6lkaXRvIHkgY29udHJhc2XDsWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iQ29udHJvbGFyIGxhIGFtcGxpYWNpw7NuIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkNvbnRyb2xhIGVsIHBvc2ljaW9uYW1pZW50byB5IGVsIG5pdmVsIGRlIHpvb20gZGUgbGEgcGFudGFsbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iVXNhciBnZXN0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IlBlcm1pdGUgcHJlc2lvbmFyLCBkZXNsaXphciwgcGVsbGl6Y2FyIHkgdXNhciBvdHJvcyBnZXN0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iZGVzYWN0aXZhciBvIG1vZGlmaWNhciBsYSBiYXJyYSBkZSBlc3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gaW5oYWJpbGl0ZSBsYSBiYXJyYSBkZSBlc3RhZG8gbyBxdWUgYWdyZWd1ZSB5IGVsaW1pbmUgw61jb25vcyBkZWwgc2lzdGVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iYXBhcmVjZXIgZW4gbGEgYmFycmEgZGUgZXN0YWRvIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gc2FxdWUgZm90b3MgbyBncmFiZSB2aWRlb3MgY29uIGxhIGPDoW1hcmEuIEVzdGUgcGVybWlzbyBhdXRvcml6YSBhIGxhIGFwbGljYWNpw7NuIGEgdXRpbGl6YXIgbGEgY8OhbWFyYSBlbiBjdWFscXVpZXIgbW9tZW50byBzaW4gdHUgY29uZmlybWFjacOzbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGFyIGxhIHZpYnJhY2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGNvbnRyb2xlIGxhIHZpYnJhY2nDs24uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xhciBsaW50ZXJuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gY29udHJvbGUgbGEgZnVuY2nDs24gZGUgbGludGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibGxhbWFyIGRpcmVjdGFtZW50ZSBhIG7Dum1lcm9zIGRlIHRlbMOpZm9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBoYWdhIGxsYW1hZGFzIGEgbsO6bWVyb3MgZGUgdGVsw6lmb25vIHNpbiBpbnRlcnZlbmNpw7NuIGRlbCB1c3VhcmlvLCBsbyBxdWUgcHVlZGUgZGFyIGx1Z2FyIGEgbGxhbWFkYXMgbyBjYXJnb3MgaW5lc3BlcmFkb3MuIFRlbiBlbiBjdWVudGEgcXVlIGxhcyBhcGxpY2FjaW9uZXMgbm8gcHVlZGVuIHVzYXIgZXN0ZSBzZXJ2aWNpbyBwYXJhIHJlYWxpemFyIGxsYW1hZGFzIGEgbsO6bWVyb3MgZGUgZW1lcmdlbmNpYSwgcGVybyBsYXMgYXBsaWNhY2lvbmVzIG1hbGludGVuY2lvbmFkYXMgcHVlZGVuIGNhdXNhcnRlIGdhc3RvcyBpbXByZXZpc3RvcyBhbCByZWFsaXphciBsbGFtYWRhcyBzaW4gdHUgY29uZmlybWFjacOzbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VkZXIgYWwgc2VydmljaW8gSU1TIHBhcmEgcmVhbGl6YXIgbGxhbWFkYXMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkNvcnRhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGVnYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlBlZ2FyIGNvbW8gdGV4dG8gc2luIGZvcm1hdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlJlZW1wbGF6YXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRWxpbWluYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2Npb25hciB0ZXh0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRGVzaGFjZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlaGFjZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZWNjacOzbiBkZSB0ZXh0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZ3JlZ2FyIGFsIGRpY2Npb25hcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFbGltaW5hciI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJDYW1iaWFyIGZvbmRvIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQWdlbnRlIGRlIGVzY3VjaGEgZGUgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlByb3ZlZWRvciBkZSBjb25kaWNpb25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzaXN0ZW50ZSBkZSBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFjdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGVzdMOhIGFjdGl2YWRvIHBvciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb2NhIHBhcmEgYWRtaW5pc3RyYXIgbGEgcmVkLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBY3R1YWxpemFkbyBwb3IgZWwgYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iTG8gZWxpbWluw7MgZWwgYWRtaW5pc3RyYWRvci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlBhcmEgYXl1ZGFyIGEgbWVqb3JhciBsYSBkdXJhY2nDs24gZGUgbGEgYmF0ZXLDrWEsIGVsIGFob3JybyBkZSBiYXRlcsOtYSByZWR1Y2UgZWwgcmVuZGltaWVudG8gZGVsIGRpc3Bvc2l0aXZvIHkgbGltaXRhIGxhIHZpYnJhY2nDs24sIGxvcyBzZXJ2aWNpb3MgZGUgdWJpY2FjacOzbiB5IGxhIG1heW9yw61hIGRlIGxvcyBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vLiBFcyBwb3NpYmxlIHF1ZSBlbCBjb3JyZW8gZWxlY3Ryw7NuaWNvLCBsYSBtZW5zYWplcsOtYSB5IG90cmFzIGFwbGljYWNpb25lcyBxdWUgc2UgYmFzYW4gZW4gbGEgc2luY3Jvbml6YWNpw7NuIG5vIHB1ZWRhbiBhY3R1YWxpemFyc2UsIGEgbWVub3MgcXVlIGxvcyBhYnJhcy5cblxuRWwgYWhvcnJvIGRlIGJhdGVyw61hIHNlIGRlc2FjdGl2YSBkZSBmb3JtYSBhdXRvbcOhdGljYSBjdWFuZG8gZWwgZGlzcG9zaXRpdm8gc2UgZXN0w6EgY2FyZ2FuZG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZGE6IG5vIG1vc3RyYXIgbnVuY2EgZXN0YXMgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFqYTogbW9zdHJhciBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpw7NuIHNpbiBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IG1vc3RyYXIgZXN0YXMgbm90aWZpY2FjaW9uZXMgZGUgbWFuZXJhIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGUgbGEgbGlzdGEgZGUgbm90aWZpY2FjaW9uZXMgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgZW4gbGEgcGFudGFsbGEgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5EdXJhbnRlICUxJGQgbWludXRvcyBoYXN0YSBsYShzKSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudGUgMSBtaW51dG87IGhhc3RhIGxhKHMpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+PC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBlbGVtZW50byBzZWxlY2Npb25hZG88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJWYXJpb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iRXN0YWJsZWNpc3RlIGxhIGltcG9ydGFuY2lhIGRlIGVzdGFzIG5vdGlmaWNhY2lvbmVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iRXMgaW1wb3J0YW50ZSBkZWJpZG8gYSBsYXMgcGVyc29uYXMgaW52b2x1Y3JhZGFzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggNDg2OGY2Yi4uZTczYjQyNSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iQmxvcXVlYXIgYWhvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IiZndDsgOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbmlkb3Mgb2N1bHRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iSW5jbHV5ZSBkYXRvcyBwZXJzb25hbGVzIGNvbW8gbsO6bWVyb3MgZGUgdGFyamV0YXMgZGUgY3LDqWRpdG8geSBjb250cmFzZcOxYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sYSBsYSBhbXBsaWFjacOzbiBkZSBsYSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sYSBlbCBwb3NpY2lvbmFtaWVudG8geSBlbCBuaXZlbCBkZSB6b29tIGRlIGxhIHBhbnRhbGxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IlJlYWxpemFyIGdlc3RvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iUHVlZGVzIHRvY2FyIHkgcGVsbGl6Y2FyIGxhIHBhbnRhbGxhLCBkZXNsaXphciBlbCBkZWRvIHkgaGFjZXIgb3Ryb3MgZ2VzdG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImluaGFiaWxpdGFyIG8gbW9kaWZpY2FyIGxhIGJhcnJhIGRlIGVzdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBpbmhhYmlsaXRlIGxhIGJhcnJhIGRlIGVzdGFkbyBvIGHDsWFkYSB5IGVsaW1pbmUgaWNvbm9zIGRlbCBzaXN0ZW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJhcGFyZWNlciBlbiBsYSBiYXJyYSBkZSBlc3RhZG8iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBoYWdhIGZvdG9zIG8gZ3JhYmUgdsOtZGVvcyBjb24gbGEgY8OhbWFyYS4gRXN0ZSBwZXJtaXNvIGF1dG9yaXphIGEgbGEgYXBsaWNhY2nDs24gYSB1dGlsaXphciBsYSBjw6FtYXJhIGVuIGN1YWxxdWllciBtb21lbnRvIHNpbiB0dSBjb25maXJtYWNpw7NuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgbGEgdmlicmFjacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWl0ZSBxdWUgbGEgYXBsaWNhY2nDs24gY29udHJvbGUgbGEgZnVuY2nDs24gZGUgdmlicmFjacOzbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iY29udHJvbGFyIGxpbnRlcm5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQZXJtaXRlIHF1ZSBsYSBhcGxpY2FjacOzbiBjb250cm9sZSBsYSBmdW5jacOzbiBkZSBsaW50ZXJuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJsbGFtYXIgZGlyZWN0YW1lbnRlIGEgbsO6bWVyb3MgZGUgdGVsw6lmb25vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBlcm1pdGUgcXVlIGxhIGFwbGljYWNpw7NuIGhhZ2EgbGxhbWFkYXMgc2luIGludGVydmVuY2nDs24gZGVsIHVzdWFyaW8sIGxvIHF1ZSBwdWVkZSBkYXIgbHVnYXIgYSBsbGFtYWRhcyBvIGNhcmdvcyBpbmVzcGVyYWRvcy4gVGVuIGVuIGN1ZW50YSBxdWUgbGFzIGFwbGljYWNpb25lcyBubyBwdWVkZW4gdXNhciBlc3RlIHNlcnZpY2lvIHBhcmEgcmVhbGl6YXIgbGxhbWFkYXMgYSBuw7ptZXJvcyBkZSBlbWVyZ2VuY2lhLCBwZXJvIGxhcyBhcGxpY2FjaW9uZXMgbWFsaW50ZW5jaW9uYWRhcyBwdWVkZW4gY2F1c2FydGUgZ2FzdG9zIGltcHJldmlzdG9zIGFsIHJlYWxpemFyIGxsYW1hZGFzIHNpbiB0dSBjb25maXJtYWNpw7NuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZWRlciBhbCBzZXJ2aWNpbyBkZSBsbGFtYWRhcyBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkNvcnRhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGVnYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlBlZ2FyIGNvbW8gdGV4dG8gc2luIGZvcm1hdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlN1c3RpdHVpci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJFbGltaW5hciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWFyIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGVjY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNoYWNlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVoYWNlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlY2Npw7NuIGRlIHRleHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkHDsWFkaXIgYWwgZGljY2lvbmFyaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkVsaW1pbmFyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNhbWJpYXIgZm9uZG8gZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJEZXRlY3RvciBkZSBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmVlZG9yIGRlIGNvbmRpY2lvbmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iQXNpc3RlbnRlIGRlIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWN0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gYWN0aXZhZGEgcG9yIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlRvY2EgcGFyYSBhZG1pbmlzdHJhciBsYSByZWQuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFjdHVhbGl6YWRvIHBvciB0dSBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFbGltaW5hZG8gcG9yIHR1IGFkbWluaXN0cmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlBhcmEgYXl1ZGFyIGEgbWVqb3JhciBsYSBkdXJhY2nDs24gZGUgbGEgYmF0ZXLDrWEsIGxhIGZ1bmNpw7NuIGRlIGFob3JybyBkZSBlbmVyZ8OtYSByZWR1Y2UgZWwgcmVuZGltaWVudG8gZGVsIGRpc3Bvc2l0aXZvIHkgbGltaXRhIGxhIHZpYnJhY2nDs24sIGxvcyBzZXJ2aWNpb3MgZGUgdWJpY2FjacOzbiB5IGxhIG1heW9yIHBhcnRlIGRlIGxhIHRyYW5zbWlzacOzbiBkZSBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vLiBFcyBwb3NpYmxlIHF1ZSBsYXMgYXBsaWNhY2lvbmVzIHF1ZSBzZSBzaW5jcm9uaXphbiwgY29tbyBsYXMgZGUgY29ycmVvIHkgbWVuc2FqZXMsIG5vIHNlIGFjdHVhbGljZW4gYSBtZW5vcyBxdWUgbGFzIGFicmFzLlxuXG5MYSBmdW5jacOzbiBkZSBhaG9ycm8gZGUgZW5lcmfDrWEgc2UgZGVzYWN0aXZhIGF1dG9tw6F0aWNhbWVudGUgY3VhbmRvIGVsIGRpc3Bvc2l0aXZvIHNlIGVzdMOhIGNhcmdhbmRvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvcXVlYWRhOiBubyBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhY2lvbmVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkJhamE6IG1vc3RyYXIgZW4gbGEgcGFydGUgaW5mZXJpb3IgZGUgbGEgbGlzdGEgZGUgbm90aWZpY2FjaW9uZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhY2lvbmVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgZW4gbGEgcGFydGUgc3VwZXJpb3IgZGUgbGEgbGlzdGEgZGUgbm90aWZpY2FjaW9uZXMgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgZW4gbGEgcGFudGFsbGEgeSBlbWl0aXIgc29uaWRvIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5EdXJhbnRlICUxJGQgbWludXRvcyAoaGFzdGEgbGFzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudGUgdW4gbWludXRvIChoYXN0YSBsYXMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBzZWxlY2Npb25hZG88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJWYXJpb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVMO6IGRldGVybWluYXMgbGEgaW1wb3J0YW5jaWEgZGUgZXN0YXMgbm90aWZpY2FjaW9uZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJFc3RvIGVzIGltcG9ydGFudGUgcG9yIGxvcyB1c3VhcmlvcyBpbXBsaWNhZG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCAzYmJkY2RmLi5lNmExMjJjIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Ikx1a3VzdGEga29oZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTaXN1IG9uIHBlaWRldHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVHVydmFyZcW+aWltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZC1zw7xzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iSXNpa2xpayI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iU2lzYWxkYWIgaXNpa2xpa2tlIGFuZG1laWQsIG50IGtyZWRpaXRrYWFyZGkgbnVtYnJlaWQgamEgcGFyb29sZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkVrcmFhbmkgc3V1cmVuZHVzZSBqdWh0aW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iU2FhdGUganVodGlkYSBla3JhYW5pIHN1dW1pdGFzZXQgamEgYXNlbmRpdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJMaWlndXR1c3RlIHRlZ2VtaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJTYWF0ZSBwdXVkdXRhZGEsIHDDvGhraWRhLCBzw7VybWkga29ra3UtbGFoa3UgbGlpZ3V0YWRhIGphIHRlaXNpIGxpaWd1dHVzaSB0ZWhhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImtlZWxhIHbDtWkgbXV1ZGEgb2xla3VyaWJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBrZWVsYXRhIG9sZWt1cmliYSB2w7VpIGxpc2FkYSBqYSBlZW1hbGRhZGEgc8O8c3RlZW1paWtvb25lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJvbGVrdXJpYmFuYSBrdXZhbWluZSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCB0ZWhhIGthYW1lcmFnYSBwaWx0ZSBqYSB2aWRlb2lkLiBTZWUgbHViYSB2w7VpbWFsZGFiIHJha2VuZHVzZWwga2FzdXRhZGEga2FhbWVyYXQgbWlzIHRhaGVzIGFqYWwgdGVpZSBraW5uaXR1c2V0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ianVodGlnZSB2aWJyZWVyaW1pc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlbDtWltYWxkYWIgcmFrZW5kdXNlbCBqdWh0aWRhIHZpYnJlZXJpbWlzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ianVoaSB0YXNrdWxhbXBpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJWw7VpbWFsZGFiIHJha2VuZHVzZWwganVodGlkYSB0YXNrdWxhbXBpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImhlbGlzdGEgb3RzZSB0ZWxlZm9uaW51bWJyaXRlbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVsO1aW1hbGRhYiByYWtlbmR1c2VsIHRlaWUgc2Vra3VtaXNldGEgdGVsZWZvbmludW1icml0ZWxlIGhlbGlzdGFkYS4gU2VlIHbDtWliIHDDtWhqdXN0YWRhIG9vdGFtYXR1aWQgdGFzdXNpZCB2w7VpIHRlbGVmb25pa8O1bmVzaWQuIFBhbmdlIHTDpGhlbGUsIGV0IHNlZSBlaSBsdWJhIHJha2VuZHVzZWwgaGVsaXN0YWRhIGjDpGRhYWJpbnVtYnJpdGVsZS4gUGFoYXRhaHRsaWt1ZCByYWtlbmR1c2VkIHbDtWl2YWQgdGVpbGUga3VsdXNpZCB0ZWtpdGFkYSwgdGVoZXMgdGVsZWZvbmlrw7VuZXNpZCB0ZWllIGtpbm5pdHVzZXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4ianV1cmRlcMOkw6RzIElNUy1rw7VuZXRlZW51c2VsZSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iTMO1aWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BlZXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iS2xlZWJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJLbGVlYmkgbGlodHRla3N0aW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJBc2VuZGEuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iS3VzdHV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29wZWVyaSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJWYWxpZ2UgdGVrc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IlbDtXRhIHRhZ2FzaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iVGVlIHV1ZXN0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZWtzdGkgdmFsaW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iTGlzYSBzw7VuYXN0aWtrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iS3VzdHV0YSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJNdXV0a2UgdGF1c3RhcGlsdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJNw6RyZ3Vhbm5ldGUga3V1bGFtaXN0ZWVudXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlRpbmdpbXVzZSBwYWtrdWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iTcOkcmd1YW5uZXRlIGFiaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIG9uIGFrdGl2ZWVyaXR1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi1pIGFrdGl2ZWVyaXMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVsO1cmd1IGhhbGRhbWlzZWtzIHB1dWR1dGFnZS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVsOkcnNrZW5kYXMgYWRtaW5pc3RyYWF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+Ikt1c3R1dGFzIHRlaWUgYWRtaW5pc3RyYWF0b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkFrdSBrZXN0dXNlIHBhcmFuZGFtaXNla3MgdsOkaGVuZGFiIGFrdXPDpMOkc3RqYSB0ZWllIHNlYWRtZSB0b2ltaXZ1c3QgbmluZyBwaWlyYWIgdmlicmF0c2lvb25pLCBhc3Vrb2hhdGVlbnVzZWlkIGphIHN1dXJlbWF0IG9zYSB0YXVzdGFhbmRtZXRlc3QuIEUtcG9zdGksIHPDtW51bXNpZGV0IGphIG11aWQgc8O8bmtyb29uaW1pc2VsZSB0dWdpbmV2YWlkIHJha2VuZHVzaSB2w7VpZGFrc2UgdsOkcnNrZW5kYWRhIGFpbnVsdCBzaWlzLCBrdWkgdGUgbmVlZCBhdmF0ZS5cblxuQWt1c8Okw6RzdGphIGzDvGxpdGF0YWtzZSBzZWFkbWUgbGFhZGltaXNlIGFqYWwgYXV0b21hYXRzZWx0IHbDpGxqYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2tlZXJpdHVkOiDDpHJhIGt1bmFnaSBuw6RpdGEgbmVpZCBtw6RyZ3VhbmRlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWFkYWw6IGt1dmEgdmFpa3NlbHQgbcOkcmd1YW5uZXRlIGxvZW5kaSBhbGxvc2FzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJUYXZhbGluZToga3V2YSBuZWVkIG3DpHJndWFuZGVkIHZhaWtzZWx0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJLw7VyZ2U6IGt1dmEgbcOkcmd1YW5uZXRlIGxvZW5kaSDDvGxhb3NhcyBrb29zIGhlbGlnYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJLaWlyZWxvb211bGluZToga3V2YSBla3JhYW5pIHNlcnZhcyBrb29zIGhlbGlnYSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dGlrcyAoa3VuaSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7DnGhla3MgbWludXRpa3MgKGt1bmkgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBvbiB2YWxpdHVkPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iTWl0bWVzdWd1c3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVGVpZSBtw6TDpHJhc2l0ZSBuZW5kZSBtw6RyZ3Vhbm5ldGUgdMOkaHRzdXNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iU2VlIG9uIHTDpGh0aXMgb3NhbGV2YXRlIGluaW1lc3RlIHTDtXR0dS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKaW5kZXggMTNjODcyMC4uMzFhMDczYiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9rZWF0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJFZHVraWFrIGV6a3V0YXR1dGEgZGF1ZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2R1IHNlZ3VydWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnRzb25hbGFrIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJFeiBkYSBzYWxidWVzcGVuaWsgZWdpdGVuIGRhdHUgcGVydHNvbmFsZWtpbiwgaGFsYSBub2xhLCBrcmVkaXR1LXR4YXJ0ZWxlbiB6ZW5iYWtpZWtpbiBldGEgcGFzYWhpdHpla2luLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iS29udHJvbGF0dSBwYW50YWlsYXJlbiB6b29tLW1haWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IktvbnRyb2xhdHUgcGFudGFpbGFyZW4gem9vbS1tYWlsYSBldGEga29rYXBlbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iS2VpbnVhayBlZ2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJTYWthdHUsIGxlcnJhdHUsIGF0eGltdXJrYXR1IGV0YSBiZXN0ZSBoYWluYmF0IGtlaW51IGVnaW4gZGl0emFrZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJEZXNnYWl0dSBlZG8gYWxkYXR1IGVnb2VyYS1iYXJyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJFZ29lcmEtYmFycmEgZGVzZ2FpdHplYSBlZG8gc2lzdGVtYS1pa29ub2FrIGdlaGl0emVhIGVkbyBrZW50emVhIGJhaW1lbnR6ZW4gZGllIGFwbGlrYXppb2VpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJCaWh1cnR1IGVnb2VyYS1iYXJyYSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkthbWVyYXJla2luIGFyZ2F6a2lhayBhdGVyYXR6ZWtvIGV0YSBiaWRlb2FrIGdyYWJhdHpla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpLiBCYWltZW4gaG9ycmVraW4sIGFwbGlrYXppb2FrIGthbWVyYSBlZG9ub2l6IGVyYWJpbCBkZXpha2UgenVyZSBiYWltZW5payBnYWJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJiaWJyYXppb2Ega29udHJvbGF0emVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJCaWJyYWdhaWx1YSBrb250cm9sYXR6ZWEgYmFpbWVudHplbiBkaWUgYXBsaWthemlvZWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImtvbnRyb2xhdHUgbGludGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkxpbnRlcm5hIGtvbnRyb2xhdHplYSBiYWltZW50emVuIGRpZSBhcGxpa2F6aW9laS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJkZWl0dSB6dXplbmVhbiB0ZWxlZm9uby16ZW5iYWtpZXRhcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVGVsZWZvbm8temVuYmFraWV0YXJhIHp1ayBlc2t1IGhhcnR1IGdhYmUgZGVpdHpla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpLiBIb3JyZWxhLCB1c3Rla2FiZWtvIGdhc3R1YWsgZWRvIGRlaWFrIGVyYWdpbiBkYWl0ZXprZS4gQXBsaWthemlvIGdhaXp0b2VrIGVyYWJpbCBkZXpha2V0ZSB6dWsgYmVycmV0c2kgZ2FiZWtvIGRlaWFrIGVnaW5kYSBnYXN0dWFrIGVyYWdpdGVrby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IkF0eml0dSBJTVMgZGVpLXplcmJpdHp1YSI8L3N0cmluZz4KQEAgLTM4Myw4ICszODQsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI3NDE0OTY1MzQ3Njk2NjAwMjciPiJUYWJsZXRhayBlemFndXR6ZW4gZGl0dWVuIGtvbnR1ZW4gemVycmVuZGEgbG9ydHpla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpLiBJbnN0YWxhdHV0YSBkaXR1enVuIGFwbGlrYXppb2VrIHNvcnR1dGFrbyBrb250dWFrIGhhciBkYWl0ZXprZSBiYXJuZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19nZXRBY2NvdW50cyIgcHJvZHVjdD0idHYiIG1zZ2lkPSI0MTkwNjMzMzk1NjMzOTA3NTQzIj4iVGVsZWJpc3RhayBlemFndXR6ZW4gZGl0dWVuIGtvbnR1ZW4gemVycmVuZGEgbG9ydHplYSBiYWltZW50emVuIGRpZSBhcGxpa2F6aW9laS4gSW5zdGFsYXR1dGEgZGl0dXp1biBhcGxpa2F6aW9layBzb3J0dXRha28ga29udHVhayBzYXIgZGFpdGV6a2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZ2V0QWNjb3VudHMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNDQ4MzE2ODIyNDUxODA3MzgyIj4iVGVsZWZvbm9hayBlemFndXR6ZW4gZGl0dWVuIGtvbnR1ZW4gemVycmVuZGEgbG9ydHpla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpLiBJbnN0YWxhdHV0YSBkaXR1enVuIGFwbGlrYXppb2VrIHNvcnR1dGFrbyBrb250dWFrIGhhciBkYWl0ZXprZSBiYXJuZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc05ldHdvcmtTdGF0ZSIgbXNnaWQ9IjQ5NTEwMjc5NjQzNDg5NzQ3NzMiPiJzYXJlLWtvbmV4aW9hayBpa3VzdGVhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IlNhcmUta29uZXhpb2VpIGJ1cnV6a28gaW5mb3JtYXppb2EgaWt1c3Rla28gYmFpbWVuYSBlbWF0ZW4gZGllIGFwbGlrYXppb2VpOyBhZGliaWRleiwgemVyIHNhcmUgZGF1ZGVuIGV0YSB6ZWludHp1ayBkYXVkZW4ga29uZWt0YXR1dGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NOZXR3b3JrU3RhdGUiIG1zZ2lkPSI0OTUxMDI3OTY0MzQ4OTc0NzczIj4ic2FyZWtvIGtvbmV4aW9hayBpa3VzdGVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYWNjZXNzTmV0d29ya1N0YXRlIiBtc2dpZD0iODMxODk2NDQyNDY3NTk2MDk3NSI+IlNhcmVrbyBrb25leGlvZWkgYnVydXprbyBpbmZvcm1hemlvYSBpa3VzdGVrbyBiYWltZW5hIGVtYXRlbiBkaWUgYXBsaWthemlvZWk7IGFkaWJpZGV6LCB6ZXIgc2FyZSBkYXVkZW4gZXRhIHplaW50enVrIGRhdWRlbiBrb25la3RhdHV0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NyZWF0ZU5ldHdvcmtTb2NrZXRzIiBtc2dpZD0iNzkzNDUxNjYzMTM4NDE2ODEwNyI+Ikl6YW4gc2FyZXJha28gc2FyYmlkZSBvc29hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY3JlYXRlTmV0d29ya1NvY2tldHMiIG1zZ2lkPSIzNDAzMDYyMTg3Nzc5NzI0MTg1Ij4iU2FyZS1zb2NrZXRhayBzb3J0emVrbyBldGEgc2FyZS1wcm90b2tvbG8gcGVydHNvbmFsaXphdHVhayBlcmFiaWx0emVrbyBiYWltZW5hIGVtYXRlbiBkaWUgYXBsaWthemlvZWkuIEFyYWthdHphaWxlYWsgZXRhIGJlc3RlIGFwbGlrYXppbyBiYXR6dWVrIEludGVybmV0ZXJhIGtvbmVrdGF0emVrbyBtb2R1YWsgZXNrYWludHplbiBkaXR1enRlLCBiZXJheiwgYmFpbWVuIGhvcmkgZXogZGEgYmVoYXJyZXprb2EgZGF0dWFrIEludGVybmV0ZXJhIGJpZGFsdHpla28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jaGFuZ2VOZXR3b3JrU3RhdGUiIG1zZ2lkPSI5NTg4ODQyOTE0NTQzMjczMDkiPiJhbGRhdHUgc2FyZWFyZW4ga29uZWt0YWdhcnJpdGFzdW5hIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJFYmFraSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWF0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Ikl0c2F0c2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+Ikl0c2F0c2kgdGVzdHUgYXJydW50IGdpc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Ik9yZGV6dHXigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRXphYmF0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waWF0dSBVUkxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iSGF1dGF0dSB0ZXN0dWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkRlc2VnaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkJlcnJlZ2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRlc3R1YSBoYXV0YXR6ZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iR2VoaXR1IGhpenRlZ2lhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRXphYmF0dSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJBbGRhdHUgaG9ybWEtcGFwZXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iSmFraW5hcmF6cGVuYWsgaGF1dGVtYXRla28gemVyYml0enVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJCYWxkaW50emEtaG9ybml0emFpbGVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iSmFraW5hcmF6cGVuZW4gbGFndW50emFpbGVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZWdpbmJpZGVhIGFrdGliYXR1dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYXBsaWthemlvYWsgVlBOIGtvbmV4aW9hIGFrdGliYXR1IGR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVWtpdHUgc2FyZWEga3VkZWF0emVrby4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWRtaW5pc3RyYXR6YWlsZWFrIGVndW5lcmF0dSBkdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iQWRtaW5pc3RyYXR6YWlsZWFrIGV6YWJhdHUgZHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkJhdGVyaWFrIGdlaGlhZ28gaXJhdW4gZGV6YW4sIGJhdGVyaWEtYXVycmV6bGVhayBnYWlsdWFyZW4gZnVudHppb25hbWVuZHVhLCBkYXJkYXJhLCAga29rYXBlbi16ZXJiaXR6dWFrIGV0YSBhdHpla28gcGxhbm9rbyBkYXR1ZW4gZXJhYmlsZXJhIGdlaGllbmEgbXVnYXR6ZW4gZGl0dS4gUG9zdGEgZWxla3Ryb25pa29hLCBtZXp1YWsgZXRhIHNpbmtyb25pemF0emVuIGRpcmVuIGdhaW5lcmFrbyB6ZXJiaXR6dWFrIGV6IGRpcmEgZWd1bmVyYXR1a28gaXJla2kgZXplYW4uXG5cbkdhaWx1YSBrYXJnYXR6ZW4gZXphcnJpIG9yZHVrbyBkZXNha3RpYmF0emVuIGRhIGJhdGVyaWEtYXVycmV6bGVhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva2VhdHV0YTogZXogZXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IlR4aWtpYTogZXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrIHplcnJlbmRhcmVuIGJlaGVhbGRlYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbGE6IGVyYWt1dHNpIGpha2luYXJhenBlbiBoYXVlaywgYmFpbmEgc29pbnVyaWsgZWdpbiBnYWJlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIYW5kaWE6IGVyYWt1dHNpIGpha2luYXJhenBlbiBoYXVlayB6ZXJyZW5kYXJlbiBnb2lhbGRlYW4gZXRhIGVnaW4gc29pbnVhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlByZW1pYXprb2E6IGFnZXJyYXJhemkgamFraW5hcmF6cGVuIGhhdWVrIHBhbnRhaWxhbiBldGEgZWdpbiBzb2ludWEiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQgbWludXR1eiAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4gYXJ0ZSk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5NaW51dHUgYmF0ZXogKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+IGFydGUpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBoYXV0YXR1dGE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJBc2tvdGFyaWtvYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iWnVrIGV6YXJyaSB6ZW51ZW4gamFraW5hcmF6cGVuIGhhdWVuIGdhcnJhbnR6aWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJHYXJyYW50eml0c3VhIGRhIGVyYWdpdGVuIGRpZW4gcGVydHNvbmVuZ2F0aWsuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA5Y2JiMjliLi5mMDI3MWQ2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLYp9qp2YbZiNmGINmC2YHZhCDYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Itio24zYtNiq2LEg2KfYsiA5OTkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i2YXYrdiq2YjYp9mH2Kcg2b7ZhtmH2KfZhiDZh9iz2KrZhtivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i2K3Yp9mE2Kog2KfbjNmF2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Ys9uM2LPYqtmFIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Iti02K7YtduMIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLYp9i32YTYp9i52KfYqiDYtNiu2LXbjCDZhdin2YbZhtivINi02YXYp9ix2Ycg2qnYp9ix2Kog2KfYudiq2KjYp9ix24wg2Ygg2q/YsNix2YjYp9qY2YfigIzZh9inINix2Kcg2YTYrdin2Lgg2YXbjOKAjNqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+Itqp2YbYqtix2YQg2K/Ysdi02KrigIzZhtmF2KfbjNuMINmG2YXYp9uM2LTar9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+Itiz2LfYrSDZiCDZhdmI2YLYuduM2Kog2KjYstix2q/igIzZhtmF2KfbjNuMINmG2YXYp9uM2LTar9ixINix2Kcg2qnZhtiq2LHZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLYp9is2LHYp9uMINin2LTYp9ix2YfigIzZh9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLZhduM4oCM2KrZiNin2YbbjNivINi22LHYqNmHINio2LLZhtuM2K/YjCDYp9mG2q/YtNiq2KrYp9mGINix2Kcg2KrZhtivINio2qnYtNuM2K/YjCDYp9mG2q/YtNiq2KfZhtiq2KfZhiDYsdinINio2Ycg2YfZhSDZhtiy2K/bjNqpINuM2Kcg2KfYsiDZh9mFINiv2YjYsSDaqdmG24zYryDZiCDYp9i02KfYsdmH4oCM2YfYp9uMINiv24zar9ix24wg2KfYrNix2Kcg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i2LrbjNix2YHYudin2YQg2qnYsdiv2YYg24zYpyDYqti624zbjNixINmG2YjYp9ixINmI2LbYuduM2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4oCP2KjZhyDYqNix2YbYp9mF2Ycg2KfYrNin2LLZhyDZhduM4oCO2K/Zh9ivINiq2Kcg2YbZiNin2LEg2YjYtti524zYqiDYsdinINi624zYsdmB2LnYp9mEINqp2YbYryDbjNinINmG2YXYp9iv2YfYp9uMINiz24zYs9iq2YUg2LHYpyDYp9i22KfZgdmHINuM2Kcg2K3YsNmBINqp2YbYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i2YbZiNin2LEg2YjYtti524zYqiDYqNin2LTYryI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNinINiv2YjYsdio24zZhiDYqNmHINi52qnYs9io2LHYr9in2LHbjCDZiCDZgduM2YTZhdio2LHYr9in2LHbjCDYqNm+2LHYr9in2LLYry4g2KfbjNmGINmF2KzZiNiyINio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjOKAjNiv2YfYryDYp9iyINiv2YjYsdio24zZhiDYr9ixINmH2LEg2LLZhdin2YbbjCDYqNiv2YjZhiDYqtij24zbjNivINi02YXYpyDYp9iz2KrZgdin2K/ZhyDaqdmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Itqp2YbYqtix2YQg2YTYsdiy2LQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINmE2LHYstin2YbZhtiv2Ycg2LHYpyDaqdmG2KrYsdmEINqp2YbYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i2qnZhtiq2LHZhCDahtix2KfYuiDZgtmI2YciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuKAj9io2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjtiv2YfYryDYqtinINqG2LHYp9i6INmC2YjZhyDYsdinINqp2YbYqtix2YQg2qnZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Itiq2YXYp9izINmF2LPYqtmC24zZhSDYqNinINi02YXYp9ix2Ycg2KrZhNmB2YbigIzZh9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Itio2Ycg2KjYsdmG2KfZhdmHINin2KzYp9iy2Ycg2YXbjOKAjNiv2YfYryDYqNiv2YjZhiDYr9iu2KfZhNiqINi02YXYpyDYqNinINi02YXYp9ix2YfigIzZh9in24wg2KrZhNmB2YYg2KrZhdin2LMg2Kjar9uM2LHYry4g2KfbjNmGINmF2YXaqdmGINin2LPYqiDYqNin2LnYqyDYp9uM2KzYp9ivINmH2LLbjNmG2Ycg24zYpyDYqtmF2KfYs+KAjNmH2KfbjCDZvtuM2LTigIzYqNuM2YbbjCDZhti02K/ZhyDYtNmI2K8uINiq2YjYrNmHINiv2KfYtNiq2Ycg2KjYp9i024zYryDaqdmHINin24zZhiDYqNmHINio2LHZhtin2YXZhyDYp9is2KfYstmHINmG2YXbjOKAjNiv2YfYryDYqNmHINio2LHZgtix2KfYsduMINiq2YXYp9iz4oCM2YfYp9uMINin2LbYt9ix2KfYsduMINio2b7Ysdiv2KfYstivLiDYqNix2YbYp9mF2YfigIzZh9in24wg2YXYrtix2Kgg2YXZhdqp2YYg2KfYs9iqINio2Kcg2KjYsdmC2LHYp9ix24wg2KrZhdin2LMg2KjYr9mI2YYg2KrYo9uM24zYryDYtNmF2Kcg2YfYstuM2YbZh+KAjNmH2KfbjNuMINix2Kcg2KjYsdin24wg2LTZhdinINin24zYrNin2K8g2qnZhtmG2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLigI/Yr9iz2KrYsdiz24wg2KjZhyDYs9ix2YjbjNizINiq2YXYp9izIElNUyI8L3N0cmluZz4KQEAgLTY3NCw3ICs2NzUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjkxMDkwNDY0MzQzMzE1MTM3MSI+IuKAj9iz24zZhSDaqdin2LHYqiDYtNmF2Kcg2KjZh+KAjNi32YjYsSDYr9in2KbZhSDYutuM2LEg2YHYudin2YQg2LTYr9mHINin2LPYqi4gXG7YqNix2KfbjCDYr9in2LTYqtmGINiz24zZhSDaqdin2LHYqiDYr9uM2q/YsSDYqNinINin2LHYp9im2YfigI7Yr9mH2YbYr9mHINiz2LHZiNuM2LMg2KjbjOKAjtiz24zZhSDYrtmI2K8g2KrZhdin2LMg2Kjar9uM2LHbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3ByZXZfZGVzY3JpcHRpb24iIG1zZ2lkPSI2MzAwODQwMjUxMjE4MTYxNTM0Ij4i2KLZh9mG2q8g2YLYqNmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9uZXh0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iNTczMjg1MjEwNDI0Mzc3MzM4Ij4i2KLZh9mG2q8g2KjYudiv24wiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX3RyYW5zcG9ydF9wYXVzZV9kZXNjcmlwdGlvbiIgbXNnaWQ9IjM5ODAzMDg0NjUwNTYxNzMzNjMiPiLYqtmI2YLZgSDZhdmI2YLYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BhdXNlX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMzk4MDMwODQ2NTA1NjE3MzM2MyI+ItmF2qnYqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3BsYXlfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTAxMjU4ODIzNjQzODg2NDAxIj4i2b7Yrti0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl90cmFuc3BvcnRfc3RvcF9kZXNjcmlwdGlvbiIgbXNnaWQ9IjU5MDcwODMyNjA2NTEyMTAwMzQiPiLYqtmI2YLZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fdHJhbnNwb3J0X3Jld19kZXNjcmlwdGlvbiIgbXNnaWQ9IjY5NDQ0MTI4Mzg2NTE5OTA0MTAiPiLYudmC2Kgg2KjYsdiv2YYiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+Itio2LHYtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i2qnZvtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i2KzYp9uMINqv2LDYp9ix24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+Itis2KfbjOKAjNqv2LDYp9ix24wg2KjZhyDYudmG2YjYp9mGINmF2KrZhiDYs9in2K/ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i2KzYp9uM2q/YstuM2YYg2LTZiNivLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+Itit2LDZgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4oCP2qnZvtuMIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Itin2YbYqtiu2KfYqCDZhdiq2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItmE2LrZiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i2KfZhtis2KfZhSDZhdis2K/YryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLYp9mG2KrYrtin2Kgg2YXYqtmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Itin2YHYstmI2K/ZhiDYqNmHINmB2LHZh9mG2q/igIzZhNi62KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itit2LDZgSI8L3N0cmluZz4KQEAgLTg5Miw3ICs4OTYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0id2hpY2hIb21lQXBwbGljYXRpb25OYW1lZCIgbXNnaWQ9IjQ0OTM0Mzg1OTMyMTQ3NjA5NzkiPiLigI/Yp9iz2KrZgdin2K/ZhyDYp9iyICUxJHMg2KjZhyDYudmG2YjYp9mGINio2LHZhtin2YXZhyDYtdmB2K3ZhyDYp9i12YTbjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c1VzZSIgbXNnaWQ9IjQ1ODMwMTgzNjgwMDA2MTA0MzgiPiLYp9iz2KrZgdin2K/ZhyDYqNmHINi12YjYsdiqINm+24zYtOKAjNmB2LHYtiDYqNix2KfbjCDYp9uM2YYg2LnZhdmE2qnYsdivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9hX2RpZmZlcmVudF9hcHAiIG1zZ2lkPSI4MTM0OTI2MjMwNTg1NzEwMjQzIj4i2KfYs9iq2KrZgdin2K/ZhyDYp9iyINuM2qkg2KjYsdmG2KfZhdmHINiv24zar9ixIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJEZWZhdWx0SGludE1zZyIgbXNnaWQ9IjMyNTI1ODQ2ODk1MTIwNzcyNTciPiLigI/ZvtuM2LTigIzZgdix2LYg2LHYpyDYr9ixINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUmZ3Q7INio2LHZhtin2YXZh+KAjtmH2KcmZ3Q7INmF2YjYsdivINiv2KfZhtmE2YjYryDYtNiv2Ycg2b7Yp9qpINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyRGVmYXVsdEhpbnRNc2ciIG1zZ2lkPSIzMjUyNTg0Njg5NTEyMDc3MjU3Ij4i4oCP2b7bjNi04oCM2YHYsdi2INix2Kcg2K/YsSDYqtmG2LjbjNmF2KfYqiDYs9uM2LPYqtmFJmd0OyDYqNix2YbYp9mF2YfigI7Zh9inJmd0OyDZhdmI2LHYryDYqNin2LHar9uM2LHbjCDYtNiv2Ycg2b7Yp9qpINqp2YbbjNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZUFjdGl2aXR5IiBtc2dpZD0iNzQ4Njg3NjE0Nzc1MTgwMzMzMyI+Itin2YbYqtiu2KfYqCDYudmF2YTaqdix2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VVc2JBY3Rpdml0eSIgbXNnaWQ9IjY4OTQ3NDg0MTYwNzM1ODM1MDkiPiLigI/Yp9mG2KrYrtin2Kgg2KjYsdmG2KfZhdmHINio2LHYp9uMINiv2LPYqtqv2KfZhyBVU0IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub0FwcGxpY2F0aW9ucyIgbXNnaWQ9IjI5OTE4MTQyNzM5MzY1MDQ2ODkiPiLigI/Zh9uM2oYg2KjYsdmG2KfZhdmH4oCM2KfbjCDZhtmF24zigIzigI7YqtmI2KfZhtivINin24zZhiDaqdin2LEg2LHYpyDYp9mG2KzYp9mFINiv2YfYry4iPC9zdHJpbmc+CkBAIC05MTQsNyArOTE4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxhdW5jaF93YXJuaW5nX29yaWdpbmFsIiBtc2dpZD0iMTg4MTAyMDIzMDIxNjY4NjgzIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDYp9iyINin2KjYqtiv2Kcg2LHYp9mH4oCM2KfZhtiv2KfYstuMINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX2NvbXBhdF9tb2RlX3NjYWxlIiBtc2dpZD0iMzIwMjk1NTY2NzY3NTk0NDQ5OSI+ItmF2YLbjNin2LMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfc2hvdyIgbXNnaWQ9IjQwMTM4Nzg4NzY0ODY2NTU4OTIiPiLZh9mF24zYtNmHINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9jb21wYXRfbW9kZV9oaW50IiBtc2dpZD0iMTA2NDUyNDA4NDU0MzMwNDQ1OSI+IuKAj9iv2LEg2KrZhti424zZhdin2Kog2LPbjNiz2KrZhSAmZ3Q72KjYsdmG2KfZhdmH4oCO2YfYpyAmZ3Q7INmF2YjYsdivINiv2KfZhtmE2YjYryDYtNiv2Ycg2KLZhiDYsdinINiv2YjYqNin2LHZhyDZgdi52KfZhCDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fY29tcGF0X21vZGVfaGludCIgbXNnaWQ9IjEwNjQ1MjQwODQ1NDMzMDQ0NTkiPiLigI/Yr9ixINiq2YbYuNuM2YXYp9iqINiz24zYs9iq2YUgJmd0O9io2LHZhtin2YXZh+KAjtmH2KcgJmd0OyDZhdmI2LHYryDYqNin2LHar9uM2LHbjCDYtNiv2Ycg2KLZhiDYsdinINiv2YjYqNin2LHZhyDZgdi52KfZhCDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfYXBwbGljYXRpb24iIG1zZ2lkPSIzMzA3MjA5MTkyMTU1NDQyODI5Ij4i4oCP2KjYsdmG2KfZhdmHIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTEkczwveGxpZmY6Zz4gKNm+2LHYr9in2LLYtCA8eGxpZmY6ZyBpZD0iUFJPQ0VTUyI+JTIkczwveGxpZmY6Zz4pINiu2LfigIzZhdi024wgU3RyaWN0TW9kZSDYp9is2LHYp9uM24wg2K7ZiNivINix2Kcg2YbZgti2INqp2LHYr9mHINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXZfcHJvY2VzcyIgbXNnaWQ9IjUxMjAzOTcwMTIwNDc0NjI0NDYiPiLigI/Zgdix2KLbjNmG2K8gPHhsaWZmOmcgaWQ9IlBST0NFU1MiPiUxJHM8L3hsaWZmOmc+INiu2LfigIzZhdi024wgU3RyaWN0TW9kZSDYp9is2LHYp9uMINiu2YjYr9qp2KfYsSDYrtmI2K8g2LHYpyDZhtmC2LYg2qnYsdiv2Ycg2KfYs9iqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfdXBncmFkaW5nX3RpdGxlIiBtc2dpZD0iMTU4NDE5MjI4NTQ0MTQwNTc0NiI+IuKAj0FuZHJvaWQg2K/YsSDYrdin2YQg2KfYsdiq2YLYpyDYp9iz2KouLi4iPC9zdHJpbmc+CkBAIC05MjcsNyArOTMxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImhlYXZ5X3dlaWdodF9ub3RpZmljYXRpb24iIG1zZ2lkPSI5MDg3MDYzOTg1Nzc2NjI2MTY2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4g2K/YsSDYrdin2YQg2KfYrNix2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfbm90aWZpY2F0aW9uX2RldGFpbCIgbXNnaWQ9IjE3MjE2ODE3NDE2MTc4OTg4NjUiPiLZhNmF2LMg2qnYsdiv2YYg2KjYsdin24wg2KjYp9iy2qnYsdiv2YYg2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RpdGxlIiBtc2dpZD0iNzE1MzE2NzA4NTQwMzI5ODE2OSI+Itio2LHZhtin2YXZhyDYudmI2LYg2LTZiNiv2J8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJoZWF2eV93ZWlnaHRfc3dpdGNoZXJfdGV4dCIgbXNnaWQ9IjcwMjI2MzE5MjQ1MzQ0MDY0MDMiPiLYqNix2YbYp9mF2Ycg2K/bjNqv2LHbjCDYp9iyINmC2KjZhCDYr9ixINit2KfZhCDYp9is2LHYpyDYp9iz2Kog2qnZhyDYqNin24zYryDZgtio2YQg2KfYsiDYp9uM2YbaqdmHINio2LHZhtin2YXZhyDYrNiv24zYr9uMINix2Kcg2LTYsdmI2Lkg2qnZhtuM2K8g2YXYqtmI2YLZgSDYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGVhdnlfd2VpZ2h0X3N3aXRjaGVyX3RleHQiIG1zZ2lkPSI3MDIyNjMxOTI0NTM0NDA2NDAzIj4i2KjYsdmG2KfZhdmHINiv24zar9ix24wg2KfYsiDZgtio2YQg2K/YsSDYrdin2YQg2KfYrNix2KfYs9iqINqp2Ycg2KjYp9uM2K8g2YXYqtmI2YLZgSDYtNmI2K8g2KrYpyDYqNiq2YjYp9mG24zYryDYqNix2YbYp9mF2Ycg2KzYr9uM2K8g2LHYpyDYtNix2YjYuSDaqdmG24zYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvbGRfYXBwX2FjdGlvbiIgbXNnaWQ9IjQ5MzEyOTE3MjIzODU2NjI4MiI+Itio2KfYstqv2LTYqiDYqNmHIDx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im9sZF9hcHBfZGVzY3JpcHRpb24iIG1zZ2lkPSIyMDgyMDk0Mjc1NTgwMzU4MDQ5Ij4i2KjYsdmG2KfZhdmHINis2K/bjNivINi02LHZiNi5INmG2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5ld19hcHBfYWN0aW9uIiBtc2dpZD0iNTQ3Mjc1NjkyNjk0NTQ0MDcwNiI+Iti02LHZiNi5IDx4bGlmZjpnIGlkPSJPTERfQVBQIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLYqti624zbjNixINqp2KfYutiw2K/bjNmI2KfYsduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i2LTZhtmI2YbYr9mHINin2LnZhNin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Itin2LHYp9im2YfigIzYr9mH2YbYr9mHINmI2LbYuduM2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLYr9iz2KrbjNin2LEg2KfYudmE2KfZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4oCPVlBOINmB2LnYp9mEINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLigI9WUE4g2KrZiNiz2LcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INmB2LnYp9mEINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLYqNix2KfbjCDZhdiv24zYsduM2Kog2LTYqNqp2Ycg2YTZhdizINqp2YbbjNivLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLYqtmI2LPYtyDYs9ix2b7Ysdiz2Kog2LTZhdinINio2YfigIzYsdmI2LLYsdiz2KfZhtuMINi02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+Itiq2YjYs9i3INiz2LHZvtix2LPYqtiq2KfZhiDYrdiw2YEg2LTYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i2KjYsdin24wg2qnZhdqpINio2Ycg2KjZh9io2YjYryDYudmF2LEg2KjYp9iq2LHbjNiMINio2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMINi52YXZhNqp2LHYryDYr9iz2Krar9in2YfYqtin2YYg2LHYpyDaqdin2YfYtCDZhduM4oCM2K/Zh9ivINmIINmE2LHYsti02Iwg2LPYsdmI24zYs+KAjNmH2KfbjCDZhdio2KrZhtuMINio2LEg2YXaqdin2YbYjCDZiCDYr9iz2KrYsdiz24wg2KjZhyDYp9qp2KvYsSDYr9in2K/Zh+KAjNmH2Kcg2K/YsSDZvtiz4oCM2LLZhduM2YbZhyDYsdinINmF2K3Yr9mI2K8g2YXbjOKAjNqp2YbYry4g2KfbjNmF24zZhNiMINm+24zYp9mF4oCM2LHYs9in2YbbjCDZiCDYqNix2YbYp9mF2YfigIzZh9in24wg2K/bjNqv2LHbjCDaqdmHINio2Ycg2YfZhdqv2KfZheKAjNiz2KfYstuMINmI2KfYqNiz2KrZh+KAjNin2YbYr9iMINiq2Kcg2LLZhdin2YbbjOKAjNqp2Ycg2KLZhuKAjNmH2Kcg2LHYpyDYqNin2LIg2YbaqdmG24zYryDZhtmF24zigIzYqtmI2KfZhtmG2K8g2KjZh+KAjNix2YjYsiDYtNmI2YbYry5cblxu2KjZh9uM2YbZh+KAjNiz2KfYstuMINio2KfYqtix24wg2KjZh+KAjNi12YjYsdiqINiu2YjYr9qp2KfYsSDYr9ixINmH2Ybar9in2YUg2LTYp9ix2pgg2LTYr9mGINiv2LPYqtqv2KfZhyDYrtin2YXZiNi0INmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLZhdiz2K/ZiNivOiDZh9ix2q/YsiDYp9uM2YYg2KfYudmE2KfZhuKAjNmH2Kcg2YbYtNin2YYg2K/Yp9iv2Ycg2YbYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i2b7Yp9uM24zZhjog2KjYr9mI2YYg2LXYr9inINiv2LEg2b7Yp9uM24zZhiDZgdmH2LHYs9iqINin2LnZhNin2YYg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLYudin2K/bjDog2KfbjNmGINin2LnZhNin2YbigIzZh9inINio2K/ZiNmGINi12K/YpyDZhti02KfZhiDYr9in2K/ZhyDYtNmI2K8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Itio2KfZhNinOiDYr9ixINio2KfZhNin24wg2YHZh9ix2LPYqiDYp9i52YTYp9mG4oCM2YfYpyDZiCDYqNmHINmH2YXYsdin2Ycg2LXYr9inINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLYttix2YjYsduMOiDZhtmF2KfbjCDaqdmE24wg2KjZhyDZh9mF2LHYp9mHINi12K/YpyDYr9ixINi12YHYrdmHINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuKAj9io2Ycg2YXYr9iqICUxJGQg2K/ZgtuM2YLZhyAo2KrYpyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuKAj9io2Ycg2YXYr9iqICUxJGQg2K/ZgtuM2YLZhyAo2KrYpyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7igI88eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4g2KfZhtiq2K7Yp9ioINi02K88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLZhdiq2YHYsdmC2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i2LTZhdinINin2YfZhduM2Kog2KfbjNmGINin2LnZhNin2YbigIzZh9inINix2Kcg2KrZhti424zZhSDZhduM4oCM2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLYqNmHINiv2YTbjNmEINin2YHYsdin2K8g2K/Ysdqv24zYsSDZhdmH2YUg2KfYs9iqLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKaW5kZXggMzRiNWZhZC4uM2UwYzE3MiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iTHVraXRzZSBueXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2lzw6RsdMO2IHBpaWxvdGV0dHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTdW9qYXR0dSB0aWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZC1qw6RyamVzdGVsbcOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJIZW5raWzDtmtvaHQuIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJTaXPDpGx0w6TDpCBoZW5raWzDtmtvaHRhaXNpYSB0aWV0b2phLCBrdXRlbiBsdW90dG9rb3J0aW4gbnVtZXJvaXRhIGphIHNhbGFzYW5vamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJOw6R5dMO2biBzdXVyZW50YW1pc2VuIGhhbGxpbm5vaW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJIYWxsaW5ub2kgbsOkeXTDtm4gem9vbWF1c3Rhc29hIGphIGFzZXR0ZWx1YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJFbGVpZGVuIGvDpHl0dMOkbWluZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+Ikx1cGEgbmFwYXV0dGFhLCBweXloa8OkaXN0w6QsIG5pcGlzdMOkw6QgamEga8OkeXR0w6TDpCBtdWl0YSBlbGVpdMOkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+InBvaXN0YSB0aWxhcGFsa2tpIGvDpHl0w7ZzdMOkIHRhaSBtdW9ra2FhIHRpbGFwYWxra2lhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkFudGFhIHNvdmVsbHVrc2VuIHBvaXN0YWEgdGlsYXBhbGtpbiBrw6R5dMO2c3TDpCBqYSBsaXPDpHTDpCB0YWkgcG9pc3RhYSBqw6RyamVzdGVsbcOka3V2YWtrZWl0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4ic2lqYWl0YSB0aWxhcGFsa2lzc2EiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJBbnRhYSBzb3ZlbGx1a3NlbiBvdHRhYSBrdXZpYSBqYSBrdXZhdGEgdmlkZW9pdGEga2FtZXJhbGxhLiBTb3ZlbGx1cyB2b2kga8OkeXR0w6TDpCBrYW1lcmFhIG1pbGxvaW4gdGFoYW5zYSBpbG1hbiBsdXBhYXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJoYWxsaXRzZSB2w6RyaW7DpMOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJBbnRhYSBzb3ZlbGx1a3NlbiBoYWxsaXRhIHbDpHJpbsOkw6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImhhbGxpdHNlIHRhc2t1bGFtcHB1YSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQW50YWEgc292ZWxsdWtzZW4gaGFsbGl0YSB0YXNrdWxhbXBwdWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ic29pdHRhYSBwdWhlbGlubnVtZXJvaWhpbiBzdW9yYWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkFudGFhIHNvdmVsbHVrc2VuIHNvaXR0YWEgcHVoZWxpbm51bWVyb2loaW4ga3lzeW3DpHR0w6Qgc2ludWx0YS4gVMOkbcOkIHZvaSBhaWhldXR0YWEgb2RvdHRhbWF0dG9taWEga3VsdWphIHRhaSBwdWhlbHVpdGEuIEh1b21hYSwgZXR0w6QgdMOkbcOkIGVpIGFubmEgc292ZWxsdWtzZWxsZSBsdXBhYSBzb2l0dGFhIGjDpHTDpG51bWVyb2loaW4uIEhhaXRhbGxpc2V0IHNvdmVsbHVrc2V0IHZvaXZhdCBhaWhldXR0YWEgc2ludWxsZSBrdWx1amEgc29pdHRhbWFsbGEgcHVoZWx1aXRhIGlsbWFuIGx1cGFhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4icGlrYXZpZXN0aXBhbHZlbHVuIHB1aGVsdWvDpHl0dMO2b2lrZXVzIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJMZWlra2FhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3Bpb2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJMaWl0w6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkxpaXTDpCBwZWxra8OkbsOkIHRla3N0aW7DpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iS29ydmFhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlBvaXN0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waW9pIFVSTC1vc29pdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJWYWxpdHNlIHRla3N0acOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJLdW1vYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iVG9pc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRla3N0aW4gdmFsaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMaXPDpMOkIHNhbmFraXJqYWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJQb2lzdGEiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVmFpaGRhIHRhdXN0YWt1dmFhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iSWxtb2l0dXNrdXVudGVsaWphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJFaHRvamVuIHRvaW1pdHVzcGFsdmVsdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IklsbW9pdHVzYXB1cmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBvbiBha3Rpdm9pdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gb24gYWt0aXZvaW51dCBWUE4teWh0ZXlkZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJWb2l0IGhhbGxpbm5vaWRhIHZlcmtrb2Ega29za2V0dGFtYWxsYS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iSsOkcmplc3RlbG3DpG52YWx2b2phc2kgb24gcMOkaXZpdHTDpG55dCBwYWtldGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSsOkcmplc3RlbG3DpG52YWx2b2phIG9uIHBvaXN0YW51dCBwYWtldGluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iSm9zIGhhbHVhdCBwYXJhbnRhYSBha3VuIGtlc3RvYSwgdmlycmFuc8Okw6RzdMO2IHbDpGhlbnTDpMOkIGxhaXR0ZWVzaSBzdW9yaXR1c2t5a3nDpCBqYSByYWpvaXR0YWEgdsOkcmluw6TDpCwgc2lqYWludGlwYWx2ZWx1aXRhIGphIHVzZWltcGlhIHRhdXN0YXRpZXRvamEuIFPDpGhrw7Zwb3N0aSwgdmllc3RpdCBqYSBtdXV0IHN5bmtyb25vaW50aWluIHBlcnVzdHV2YXQgc292ZWxsdWtzZXQgZWl2w6R0IHbDpGx0dMOkbcOkdHTDpCBww6Rpdml0eSwgZWxsZXQgYXZhYSBuaWl0w6QuXG5cblZpcnJhbnPDpMOkc3TDtiBwb2lzdHV1IGvDpHl0w7ZzdMOkIGF1dG9tYWF0dGlzZXN0aSwga3VuIGxhaXR0ZWVzaSBsYXRhdXR1dS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkVzdGV0dHk6IMOkbMOkIGtvc2thYW4gbsOkeXTDpCBuw6RpdMOkIGlsbW9pdHVrc2lhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJNYXRhbGE6IG7DpHl0w6QgbsOkbcOkIGlsbW9pdHVrc2V0IGh1b21hYW1hdHRvbWFzdGkgbHVldHRlbG9uIGFsYW9zYXNzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IlRhdmFsbGluZW46IG7DpHl0w6QgbsOkbcOkIGlsbW9pdHVrc2V0IGh1b21hYW1hdHRvbWFzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJLb3JrZWE6IG7DpHl0w6QgbsOkbcOkIGlsbW9pdHVrc2V0IGx1ZXR0ZWxvbiB5bMOkb3Nhc3NhIGphIHRvaXN0YSDDpMOkbmltZXJra2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IktpaXJlZWxsaW5lbjogbsOkeXTDpCBpbG1vaXR1cyBuw6R5dMO2bGzDpCBqYSB0b2lzdGEgw6TDpG5pbWVya2tpLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBtaW51dXRpa3NpIChrdW5uZXMga2VsbG8gb24gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+WWhkZWtzaSBtaW51dXRpa3NpIChrdW5uZXMga2VsbG8gb24gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiB2YWxpdHR1PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iTXV1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJWb2l0IHZhbGl0YSBuw6RpZGVuIGlsbW9pdHVzdGVuIHTDpHJrZXlkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJUw6Rtw6Qgb24gdMOkcmtlw6TDpCBzaWloZW4gbGlpdHR5dmllbiBpaG1pc3RlbiBwZXJ1c3RlZWxsYS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggOWRhZDRjMC4uODQ1MGU1YyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJWZXJyb3VpbGxlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZGUgc8OpY3VyaXPDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3TDqG1lIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbm5lbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iSW5jbHV0IGRlcyBkb25uw6llcyBwZXJzb25uZWxsZXMgdGVsbGVzIHF1ZSBsZXMgbnVtw6lyb3MgZGUgY2FydGVzIGRlIHBhaWVtZW50IGV0IGxlcyBtb3RzIGRlIHBhc3NlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iQ29udHLDtGxlciBsXCdhZ3JhbmRpc3NlbWVudCBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iQ29udHLDtGxlciBsZSBuaXZlYXUgZGUgem9vbSBldCBsZSBwb3NpdGlvbm5lbWVudCBkZSBsXCfDqWNyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iRWZmZWN0dWVyIGRlcyBnZXN0ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IlBldXQgdG91Y2hlciwgYmFsYXllciwgcGluY2VyIGV0IGVmZmVjdHVlciBkXCdhdXRyZXMgZ2VzdGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImTDqXNhY3RpdmVyIG91IG1vZGlmaWVyIGxhIGJhcnJlIGRcJ8OpdGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBkw6lzYWN0aXZlciBsYSBiYXJyZSBkXCfDqXRhdCwgb3UgZFwnYWpvdXRlciBldCBkZSBzdXBwcmltZXIgZGVzIGljw7RuZXMgc3lzdMOobWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InNlcnZpciBkZSBiYXJyZSBkXCfDqXRhdCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBwcmVuZHJlIGRlcyBwaG90b3MgZXQgZGUgZmlsbWVyIGRlcyB2aWTDqW9zIGF2ZWMgbFwnYXBwYXJlaWwgcGhvdG8uIENldHRlIGF1dG9yaXNhdGlvbiBsdWkgcGVybWV0IGRcJ3V0aWxpc2VyIGxcJ2FwcGFyZWlsIHBob3RvIMOgIHRvdXQgbW9tZW50IHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJnw6lyZXIgbGUgdmlicmV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRlIGfDqXJlciBsZSB2aWJyZXVyIGRlIGxcJ2FwcGFyZWlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJnw6lyZXIgbGEgbGFtcGUgZGUgcG9jaGUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1ldCDDoCBsXCdhcHBsaWNhdGlvbiBkZSBnw6lyZXIgbGEgbGFtcGUgZGUgcG9jaGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iYXBwZWxlciBkaXJlY3RlbWVudCBkZXMgbnVtw6lyb3MgZGUgdMOpbMOpcGhvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWV0IMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2FwcGVsZXIgZGVzIG51bcOpcm9zIGRlIHTDqWzDqXBob25lIHNhbnMgdm90cmUgaW50ZXJ2ZW50aW9uLiBDZXR0ZSBhdXRvcmlzYXRpb24gcGV1dCBlbnRyYcOubmVyIGRlcyBmcmFpcyBvdSBkZXMgYXBwZWxzIGltcHLDqXZ1cyBldCBuZSBwZXJtZXQgcGFzIMOgIGxcJ2FwcGxpY2F0aW9uIGRcJ2FwcGVsZXIgZGVzIG51bcOpcm9zIGRcJ3VyZ2VuY2UuIERlcyBhcHBsaWNhdGlvbnMgbWFsdmVpbGxhbnRlcyBwZXV2ZW50IGfDqW7DqXJlciBkZXMgZnJhaXMgZW4gcGFzc2FudCBkZXMgYXBwZWxzIHNhbnMgdm90cmUgY29uc2VudGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjw6lkZXIgYXUgc2VydmljZSBkXCdhcHBlbCBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkNvdXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iQ29sbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJDb2xsZXIgZW4gdGV4dGUgYnJ1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVtcGxhY2VyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1cHByaW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWVyIGxcJ1VSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlPDqWxlY3Rpb25uZXIgZHUgdGV4dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlLDqXDDqXRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTw6lsZWN0aW9uIGRlIHRleHRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFqb3V0ZXIgYXUgZGljdGlvbm5haXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXBwcmltZXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2hhbmdlciBkZSBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik91dGlsIGRcJ8OpY291dGUgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkZvdXJuaXNzZXVyIGRlIGNvbmRpdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RhbnQgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGFjdGl2w6kgcGFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkFwcHV5ZXogaWNpIHBvdXIgZ8OpcmVyIGxlIHLDqXNlYXUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik1pcyDDoCBqb3VyIHBhciB2b3RyZSBhZG1pbmlzdHJhdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iU3VwcHJpbcOpIHBhciB2b3RyZSBhZG1pbmlzdHJhdGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUG91ciBhbcOpbGlvcmVyIGxcJ2F1dG9ub21pZSBkZSBsYSBwaWxlLCBsYSBmb25jdGlvbiBkXCfDqWNvbm9taWUgZFwnw6luZXJnaWUgcsOpZHVpdCBsZXMgcGVyZm9ybWFuY2VzIGRlIHZvdHJlIGFwcGFyZWlsIGV0IGxpbWl0ZSBsYSB2aWJyYXRpb24sIGxlcyBzZXJ2aWNlcyBkZSBsb2NhbGlzYXRpb24gYWluc2kgcXVlIGxhIHBsdXBhcnQgZGVzIGRvbm7DqWVzIGVuIGFycmnDqHJlLXBsYW4uIExlcyBhcHBsaWNhdGlvbnMgQ291cnJpZWwsIE1lc3NhZ2VzIGV0IGRcJ2F1dHJlcyBxdWkgcmVwb3NlbnQgc3VyIGxhIHN5bmNocm9uaXNhdGlvbiBuZSBwZXV2ZW50IHBhcyBzZSBtZXR0cmUgw6Agam91ciwgc2F1ZiBzaSB2b3VzIGxlcyBvdXZyZXouIFxuXG4gTFwnw6ljb25vbWlzZXVyIGRcJ8OpbmVyZ2llIHNlIGTDqXNhY3RpdmUgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgdm90cmUgYXBwYXJlaWwgZXN0IGVuIGNoYXJnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb3F1w6llIDogbmUgamFtYWlzIGFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkZhaWJsZSA6IGFmZmljaGVyIGVuIG1vZGUgc2lsZW5jaWV1eCBhdSBiYXMgZGUgbGEgbGlzdGUgZGUgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsZSA6IGFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIGVuIG1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iw4lsZXbDqWUgOiBhZmZpY2hlciBlbiBoYXV0IGRlIGxhIGxpc3RlIGRlcyBub3RpZmljYXRpb25zIGV0IMOpbWV0dHJlIHVuIHNvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnQgOiBhZmZpY2hlciBzdXIgbFwnw6ljcmFuIGV0IMOpbWV0dHJlIHVuIHNvbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlBlbmRhbnQgJTEkZCBtaW51dGUgKGp1c3F1XCfDoCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBlbmRhbnQgJTEkZCBtaW51dGVzIChqdXNxdVwnw6AgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+wqDDqWzDqW1lbnRzIHPDqWxlY3Rpb25uw6lzPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iRGl2ZXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IlZvdXMgZMOpZmluaXNzZXogbFwnaW1wb3J0YW5jZSBkZSBjZXMgbm90aWZpY2F0aW9ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkNlcyBub3RpZmljYXRpb25zIHNvbnQgaW1wb3J0YW50ZXMgZW4gcmFpc29uIGRlcyBwYXJ0aWNpcGFudHMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAppbmRleCBkYzA4NzM4Li44NGM0M2ZhYyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0xODksNyArMTg5LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InNpbGVudF9tb2RlX3JpbmciIG1zZ2lkPSI4NTkyMjQxODE2MTk0MDc0MzUzIj4iU29ubmVyaWUgYWN0aXbDqWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3RpdGxlIiBtc2dpZD0iNjIxMjYzNjgwMjUzNjgyMzg1MCI+Ik1pc2Ugw6Agam91ciBkdSBzeXN0w6htZSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3RvX3VwZGF0ZV9wcmVwYXJlIiBtc2dpZD0iNjMwNTg1MzgzMTk1NTMxMDg5MCI+IlByw6lwYXJhdGlvbiBkZSBsYSBtaXNlIMOgIGpvdXIgZW4gY291cnPigKYiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3BhY2thZ2UiIG1zZ2lkPSIzODcxMzAyMzI0NTAwOTI3MjkxIj4iVHJhaXRlbWVudCBkdSBwYWNrYWdlIGRlIG1pc2VzIMOgIGpvdXIgZW4gY291cnPigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWJvb3RfdG9fdXBkYXRlX3BhY2thZ2UiIG1zZ2lkPSIzODcxMzAyMzI0NTAwOTI3MjkxIj4iVHJhaXRlbWVudCBkdSBwYWNrYWdlIGRlIG1pc2Ugw6Agam91cuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b191cGRhdGVfcmVib290IiBtc2dpZD0iNjQyODQ0MTAwMDk1MTU2NTE4NSI+IlJlZMOpbWFycmFnZSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b19yZXNldF90aXRsZSIgbXNnaWQ9IjQxNDIzNTU5MTUzNDA2Mjc0OTAiPiJSw6l0YWJsaXIgbGEgY29uZmlndXJhdGlvbiBkXCd1c2luZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF90b19yZXNldF9tZXNzYWdlIiBtc2dpZD0iMjQzMjA3NzQ5MTEwMTQxNjM0NSI+IlJlZMOpbWFycmFnZSBlbiBjb3Vyc+KApiI8L3N0cmluZz4KQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJWZXJyb3VpbGxlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZGUgc8OpY3VyaXPDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3TDqG1lIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbm5lbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iSW5jbHV0IGRlcyBkb25uw6llcyBwZXJzb25uZWxsZXMgdGVsbGVzIHF1ZSBsZXMgbnVtw6lyb3MgZGUgY2FydGVzIGRlIHBhaWVtZW50IGV0IGxlcyBtb3RzIGRlIHBhc3NlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iQ29udHLDtGxlciBsXCdhZ3JhbmRpc3NlbWVudCBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iQ29udHLDtGxlciBsZSBuaXZlYXUgZGUgem9vbSBldCBsZSBwb3NpdGlvbm5lbWVudCBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJFZmZlY3R1ZXIgZGVzIGdlc3RlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iUGVybWV0IGRcJ2FwcHV5ZXIgc3VyIGxcJ8OpY3JhbiwgZGUgbGUgYmFsYXllciwgZGUgbGUgcGluY2VyIGV0IGRcJ2VmZmVjdHVlciBkXCdhdXRyZXMgZ2VzdGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IkTDqXNhY3RpdmF0aW9uIG91IG1vZGlmaWNhdGlvbiBkZSBsYSBiYXJyZSBkXCfDqXRhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgZMOpc2FjdGl2ZXIgbGEgYmFycmUgZFwnw6l0YXQsIG91IGRcJ2Fqb3V0ZXIgZXQgZGUgc3VwcHJpbWVyIGRlcyBpY8O0bmVzIHN5c3TDqG1lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJyZW1wbGFjZXIgbGEgYmFycmUgZFwnw6l0YXQiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgcHJlbmRyZSBkZXMgcGhvdG9zIGV0IGRlIGZpbG1lciBkZXMgdmlkw6lvcyBhdmVjIGxcJ2FwcGFyZWlsIHBob3RvLiBDZXR0ZSBhdXRvcmlzYXRpb24gbHVpIHBlcm1ldCBkXCd1dGlsaXNlciBsXCdhcHBhcmVpbCBwaG90byDDoCB0b3V0IG1vbWVudCBzYW5zIHZvdHJlIGNvbnNlbnRlbWVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHLDtGxlciBsZSB2aWJyZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29udHLDtGxlciBsZSB2aWJyZXVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250csO0bGVyIGxhIGxhbXBlIGRlIHBvY2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZGUgY29udHLDtGxlciBsYSBsYW1wZSBkZSBwb2NoZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJhcHBlbGVyIGRpcmVjdGVtZW50IGxlcyBudW3DqXJvcyBkZSB0w6lsw6lwaG9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtZXQgw6AgbFwnYXBwbGljYXRpb24gZFwnYXBwZWxlciBkZXMgbnVtw6lyb3MgZGUgdMOpbMOpcGhvbmUgc2FucyB2b3RyZSBpbnRlcnZlbnRpb24uIENldHRlIGF1dG9yaXNhdGlvbiBwZXV0IGVudHJhw65uZXIgZGVzIGZyYWlzIG91IGRlcyBhcHBlbHMgaW1wcsOpdnVzIGV0IG5lIHBlcm1ldCBwYXMgw6AgbFwnYXBwbGljYXRpb24gZFwnYXBwZWxlciBkZXMgbnVtw6lyb3MgZFwndXJnZW5jZS4gTGVzIGFwcGxpY2F0aW9ucyBtYWx2ZWlsbGFudGVzIHBldXZlbnQgZ8OpbsOpcmVyIGRlcyBmcmFpcyBlbiBwYXNzYW50IGRlcyBhcHBlbHMgc2FucyB2b3RyZSBjb25zZW50ZW1lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2PDqWRlciBhdSBzZXJ2aWNlIGRcJ2FwcGVsIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQ291cGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkNvbGxlciBhdSBmb3JtYXQgdGV4dGUgYnJ1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iUmVtcGxhY2VyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1cHByaW1lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWVyIGxcJ1VSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlPDqWxlY3Rpb25uZXIgdGV4dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkFubnVsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlLDqXRhYmxpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTw6lsZWN0aW9uIGRlIHRleHRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFqb3V0ZXIgYXUgZGljdGlvbm5haXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTdXBwcmltZXIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iQ2hhbmdlciBkZSBmb25kIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik91dGlsIGRcJ8OpY291dGUgZGVzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkZvdXJuaXNzZXVyIGRlIGNvbmRpdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RhbnQgZGUgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFjdGl2w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gYWN0aXbDqSBwYXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iQXBwdXlleiBpY2kgcG91ciBnw6lyZXIgbGUgcsOpc2VhdS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iTWlzIMOgIGpvdXIgcGFyIHZvdHJlIGFkbWluaXN0cmF0ZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJTdXBwcmltw6kgcGFyIHZvdHJlIGFkbWluaXN0cmF0ZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQb3VyIGFtw6lsaW9yZXIgbFwnYXV0b25vbWllIGRlIGxhIGJhdHRlcmllLCBsXCfDqWNvbm9taXNldXIgZGUgYmF0dGVyaWUgcsOpZHVpdCBsZXMgcGVyZm9ybWFuY2VzIGV0IGTDqXNhY3RpdmUgbGUgdmlicmV1ciwgbGVzIHNlcnZpY2VzIGRlIGxvY2FsaXNhdGlvbiBldCBsYSBwbHVwYXJ0IGRlcyBkb25uw6llcyBlbiBhcnJpw6hyZS1wbGFuLiBMZXMgbWVzc2FnZXJpZXMgw6lsZWN0cm9uaXF1ZXMgb3UgYXV0cmVzIGFwcGxpY2F0aW9ucyB1dGlsaXNhbnQgbGEgc3luY2hyb25pc2F0aW9uIHBvdXJyYWllbnQgbmUgcGFzIHNlIG1ldHRyZSDDoCBqb3VyLCBzYXVmIHNpIHZvdXMgbGVzIG91dnJlei5cblxuTFwnw6ljb25vbWlzZXVyIGRlIGJhdHRlcmllIHNcJ8OpdGVpbnQgYXV0b21hdGlxdWVtZW50IGxvcnNxdWUgbFwnYXBwYXJlaWwgZXN0IGVuIGNoYXJnZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb3F1w6llwqA6IG5lIGphbWFpcyBhZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJGYWlibGXCoDogYWZmaWNoZXIgZW4gbW9kZSBzaWxlbmNpZXV4IGF1IGJhcyBkZSBsYSBsaXN0ZSBkZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWxlwqA6IGFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIGVuIG1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iw4lsZXbDqWXCoDogYWZmaWNoZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgbm90aWZpY2F0aW9ucyBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50wqA6IGFmZmljaGVyIHN1ciBsXCfDqWNyYW4gZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UGVuZGFudCAlMSRkwqBtaW51dGUgKGp1c3F1XCfDoCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBlbmRhbnQgJTEkZMKgbWludXRlcyAoanVzcXVcJ8OgIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPsKgw6lsw6ltZW50cyBzw6lsZWN0aW9ubsOpczwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRpdmVycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJWb3VzIGTDqWZpbmlzc2V6IGxcJ2ltcG9ydGFuY2UgZGUgY2VzIG5vdGlmaWNhdGlvbnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJDZXMgbm90aWZpY2F0aW9ucyBzb250IGltcG9ydGFudGVzIGVuIHJhaXNvbiBkZXMgcGFydGljaXBhbnRzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbAppbmRleCAwMmVlN2I0NS4uMzY1OTRlMCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9xdWVhciBhZ29yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250aWRvIG9jdWx0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZG8gc2VndXJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb2FsIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJJbmNsw7plIGRhdG9zIHBlcnNvYWlzIGNvbW8gbsO6bWVyb3MgZSBjb250cmFzaW5haXMgZGUgdGFyeGV0YXMgZGUgY3LDqWRpdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sYXIgYW1wbGlhY2nDs24gZGEgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iQ29udHJvbGFyIG8gbml2ZWwgZG8gem9vbSBlIG8gcG9zaWNpb25hbWVudG8gZGEgcGFudGFsbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJSZWFsaXphciB4ZXN0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IlBvZGVzIHRvY2FyLCBwYXNhciBvIGRlZG8sIGJlbGlzY2FyIGUgcmVhbGl6YXIgb3V0cm9zIHhlc3Rvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkZXNhY3RpdmFyIG91IG1vZGlmaWNhciBhIGJhcnJhIGRlIGVzdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJQZXJtaXRlIMOhIGFwbGljYWNpw7NuIGRlc2FjdGl2YXIgYSBiYXJyYSBkZSBlc3RhZG8gb3UgZW5nYWRpciBlIGVsaW1pbmFyIGFzIGljb25hcyBkbyBzaXN0ZW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJhY3R1YXIgY29tbyBhIGJhcnJhIGRlIGVzdGFkbyI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBlcm1pdGUgw6EgYXBsaWNhY2nDs24gdG9tYXIgaW1heGVzIGUgdsOtZGVvcyBjb2EgY8OhbWFyYS4gQ29uIGVzdGUgcGVybWlzbyBhIGFwbGljYWNpw7NuIHBvZGUgdXRpbGl6YXIgYSBjw6FtYXJhIGVuIGNhbHF1ZXJhIG1vbWVudG8gc2VuIGEgdMO6YSBjb25maXJtYWNpw7NuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgYSB2aWJyYWNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJQZXJtaXRlIMOhIGFwbGljYWNpw7NuIGNvbnRyb2xhciBvIHZpYnJhZG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgYSBsYW50ZXJuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iUGVybWl0ZSDDoSBhcGxpY2FjacOzbiBjb250cm9sYXIgYSBsdXogZG8gZmxhc2guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iY2hhbWFyIGRpcmVjdGFtZW50ZSBhb3MgbsO6bWVyb3MgZGUgdGVsw6lmb25vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBlcm1pdGUgw6EgYXBsaWNhY2nDs24gY2hhbWFyIGEgbsO6bWVyb3MgZGUgdGVsw6lmb25vIHNlbiBhIHTDumEgaW50ZXJ2ZW5jacOzbi4gRXN0YSBhY2Npw7NuIHBvZGUgaW1wbGljYXIgY2hhbWFkYXMgb3UgY3VzdG9zIGluZXNwZXJhZG9zLiBUZW4gZW4gY29udGEgcXVlIGlzdG8gbm9uIHBlcm1pdGUgw6EgYXBsaWNhY2nDs24gY2hhbWFyIGEgbsO6bWVyb3MgZGUgZW1lcnhlbmNpYS4gw4kgcG9zaWJsZSBxdWUgYXBsaWNhY2nDs25zIG1hbGljaW9zYXMgY2hlIGN1c3RlbiBkacOxZWlybyBkZWJpZG8gw6EgcmVhbGl6YWNpw7NuIGRlIGNoYW1hZGFzIHNlbiBhIHTDumEgY29uZmlybWFjacOzbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFjY2VzbyBhbyBzZXJ2aXpvIGRlIGNoYW1hZGFzIGRlIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iQ29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQZWdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGVnYXIgY29tbyB0ZXh0byBzZW4gZm9ybWF0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iU3Vic3RpdHXDrXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRWxpbWluYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2Npb25hciB0ZXh0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRGVzZmFjZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZmFjZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZWNjacOzbiBkZSB0ZXh0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJFbmdhZGlyIGFvIGRpY2lvbmFyaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkVsaW1pbmFyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNhbWJpYXIgZm9uZG8gZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJBeGVudGUgZGUgZXNjb2l0YSBkZSBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmVkb3IgZGUgY29uZGljacOzbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudGUgZGUgbm90aWZpY2FjacOzbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBhY3Rpdm91IGEgVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jYSBhcXXDrSBwYXJhIHhlc3Rpb25hciBhIHJlZGUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFjdHVhbGl6YWRvIHBvbG8gYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRWxpbWluYWRvIHBvbG8gYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBheHVkYXIgYSBtZWxsb3JhciBhIGR1cmFjacOzbiBkYSBiYXRlcsOtYSwgYSBmdW5jacOzbiBhZm9ycm8gZGUgYmF0ZXLDrWEgcmVkdWNlIG8gcmVuZGVtZW50byBkbyB0ZXUgZGlzcG9zaXRpdm8gZSBsaW1pdGEgYSB2aWJyYWNpw7NuLCBvcyBzZXJ2aXpvcyBkZSBsb2NhbGl6YWNpw7NuIGUgYSBtYWlvcsOtYSBkb3MgZGF0b3MgZW4gc2VndW5kbyBwbGFuby4gw4kgcG9zaWJsZSBxdWUgbyBjb3JyZW8gZWxlY3Ryw7NuaWNvLCBhcyBtZW5zYXhlcyBlIG91dHJhcyBhcGxpY2FjacOzbnMgcXVlIGRlcGVuZGVuIGRhIHNpbmNyb25pemFjacOzbiBub24gc2UgYWN0dWFsaWNlbiBhIG1lbm9zIHF1ZSBvcyBhYnJhcy4gXG5cbkEgZnVuY2nDs24gYWZvcnJvIGRlIGJhdGVyw61hIGRlc2FjdMOtdmFzZSBhdXRvbWF0aWNhbWVudGUgY2FuZG8gcG9zIGEgY2FyZ2FyIG8gdGV1IGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvcXVlYWRhOiBub24gbW9zdHJhciBudW5jYSBlc3RhcyBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJCYWl4YTogbW9zdHJhciBkZSBmb3JtYSBzaWxlbmNpb3NhIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhY2nDs25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IG1vc3RyYXIgZXN0YXMgbm90aWZpY2FjacOzbnMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iQWx0YTogbW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYWNpw7NucyBlIGVtaXRpciBzb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJ4ZW50ZTogbW9zdHJhciBuYSBwYW50YWxsYSBlIGVtaXRpciBzb24iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkR1cmFudGUgJTEkZCBtaW51dG9zIChhdGEgYXMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RHVyYW50ZSB1biBtaW51dG8gKGF0YSBhcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+U2VsZWNjaW9ub3VzZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJWYXJpb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVGkgZGVmaW5lcyBhIGltcG9ydGFuY2lhIGRlc3RhcyBub3RpZmljYWNpw7Nucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IsOJIGltcG9ydGFudGUgcG9sYXMgcGVyc29hcyBpbnZvbHVjcmFkYXMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCmluZGV4IGMxMTg3ZGYuLjlkMDk4ZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4Kq54Kq14KuHIOCqsuCrieCqlSDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Kq44Kq+4Kqu4KqX4KuN4Kqw4KuA4KqTIOCqm+CrgeCqquCqvuCqteCrh+CqsiDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgqrjgq4HgqrDgqpXgq43gqrfgqr/gqqQg4Kqu4KuL4KqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgqrjgqr/gqrjgq43gqp/gqq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCqteCrjeCqr+CqleCrjeCqpOCqv+Cql+CqpCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KqV4KuN4Kqw4KuH4Kqh4Kq/4KqfIOCqleCqvuCqsOCrjeCqoSDgqqjgqoLgqqzgqrDgq43gqrgg4KqF4Kqo4KuHIOCqquCqvuCquOCqteCqsOCrjeCqoeCrjeCquCDgqpzgq4fgqrXgq4sg4Kq14KuN4Kqv4KqV4KuN4Kqk4Kq/4KqX4KqkIOCqoeCrh+Cqn+CqviDgqrbgqr7gqq7gq4fgqrIg4Kqb4KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i4Kqq4KuN4Kqw4Kqm4Kqw4KuN4Kq24KqoIOCqteCqv+CquOCrjeCqpOCrg+CqpOCqv+CqleCqsOCqoyDgqqjgqr/gqq/gqoLgqqTgq43gqrDgqr/gqqQg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuCqquCrjeCqsOCqpuCqsOCrjeCqtuCqqOCqqOCrgeCqgiDgqp3gq4Lgqq4g4Kq44KuN4Kqk4KqwIOCqheCqqOCrhyDgqrjgq43gqqXgqr/gqqTgqr/gqqjgqr/gqrDgq43gqqfgqr7gqrDgqqMg4Kqo4Kq/4Kqv4KqC4Kqk4KuN4Kqw4Kq/4KqkIOCqleCqsOCriy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgqrngqr7gqrXgqq3gqr7gqrUg4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLgqp/gq4XgqqosIOCquOCrjeCqteCqvuCqh+Cqqiwg4Kqq4Kq/4KqC4KqaIOCqleCqsOCrgCDgqoXgqqjgq4cg4KqF4Kqo4KuN4KqvIOCqueCqvuCqteCqreCqvuCqtSDgqpXgqrDgq4Ag4Kq24KqV4KuHIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgqrjgq43gqqXgqr/gqqTgqr8g4Kqs4Kq+4KqwIOCqheCqleCrjeCqt+CqriDgqpXgqrDgq4sg4KqF4Kql4Kq14Kq+IOCquOCqguCqtuCri+Cqp+Cqv+CqpCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4KqP4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4Kqo4KuHIOCquOCrjeCqpeCqv+CqpOCqvyDgqqzgqr7gqrAg4KqF4KqV4KuN4Kq34KquIOCqleCqsOCqteCqvuCqqOCrgCDgqoXgqqXgqrXgqr4g4Kq44Kq/4Kq44KuN4Kqf4KquIOCqhuCqr+CqleCqqOCrjeCquCDgqongqq7gq4fgqrDgqrXgqr4g4KqF4Kqo4KuHIOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuCquOCrjeCqpeCqv+CqpOCqvyDgqqzgqr7gqrAg4Kql4Kq+4KqTIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4KqP4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4Kqo4KuHIOCqleCrheCqruCrh+CqsOCqviDgqrXgqqHgq4cg4Kqa4Kq/4Kqk4KuN4Kqw4KuLIOCqheCqqOCrhyDgqrXgqr/gqqHgqr/gqpPgqp0g4Kqy4KuH4Kq14Kq+4Kqo4KuAIOCqruCqguCqnOCrguCqsOCrgCDgqobgqqrgq4cg4Kqb4KuHLiDgqoYg4Kqq4Kqw4Kq14Kq+4Kqo4KqX4KuAIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqqTgqq7gqr7gqrDgq4Ag4Kqq4KuB4Kq34KuN4Kqf4Kq/IOCqteCqv+CqqOCqviDgqpXgq4vgqojgqqrgqqMg4Kq44Kqu4Kqv4KuHIOCqleCrheCqruCrh+CqsOCqvuCqqOCqviDgqongqqrgqq/gq4vgqpfgqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCqteCqvuCqh+CqrOCrjeCqsOCrh+CqtuCqqCDgqqjgqr/gqq/gqoLgqqTgq43gqrDgqr/gqqQg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgqqjgq4cg4Kq14Kq+4KqH4Kqs4KuN4Kqw4KuH4Kqf4Kqw4Kqo4KuHIOCqqOCqv+Cqr+CqguCqpOCrjeCqsOCqv+CqpCDgqpXgqrDgqrXgqr7gqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCqq+CrjeCqsuCrh+CqtuCqsuCqvuCqh+CqnyDgqqjgqr/gqq/gqoLgqqTgq43gqrDgqr/gqqQg4KqV4Kqw4KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgqqjgq4cg4Kqr4KuN4Kqy4KuH4Kq24Kqy4Kq+4KqH4Kqf4Kqo4KuHIOCqqOCqv+Cqr+CqguCqpOCrjeCqsOCqv+CqpCDgqpXgqrDgqrXgqr7gqqjgq4Ag4Kqu4KqC4Kqc4KuC4Kqw4KuAIOCqhuCqquCrhyDgqpvgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4Kq44KuA4Kqn4Kq+IOCqnCDgqqvgq4vgqqgg4Kqo4KqC4Kqs4Kqw4KuN4Kq4IOCqquCqsCDgqpXgq4ngqrIg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCqqOCrhyDgqqTgqq7gqr7gqrDgqr4g4Kq54Kq44KuN4Kqk4KqV4KuN4Kq34KuH4KqqIOCqteCqv+CqqOCqviDgqqvgq4vgqqgg4Kqo4KqC4Kqs4Kqw4KuN4Kq4IOCqquCqsCDgqpXgq4ngqrIg4KqV4Kqw4Kq14Kq+4Kqo4KuAIOCqruCqguCqnOCrguCqsOCrgCDgqobgqqrgq4cg4Kqb4KuHLiDgqoYg4KqF4Kqo4Kqq4KuH4KqV4KuN4Kq34Kq/4KqkIOCqtuCrgeCqsuCrjeCqlSDgqoXgqqXgqrXgqr4g4KqV4KuJ4Kqy4KuN4Kq44Kqu4Kq+4KqCIOCqquCqsOCqv+Cqo+CqruCrgCDgqrbgqpXgq4cg4Kqb4KuHLiDgqqjgq4vgqoLgqqfgq4sg4KqV4KuHIOCqhiDgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgqqjgq4cg4KqV4Kqf4KuL4KqV4Kqf4KuA4Kqo4Kq+IOCqqOCqguCqrOCqsOCrjeCquCDgqqrgqrAg4KqV4KuJ4KqyIOCqleCqsOCqteCqvuCqqOCrgCDgqq7gqoLgqpzgq4LgqrDgq4Ag4KqG4Kqq4Kqk4KuB4KqCIOCqqOCqpeCrgC4g4Kqm4KuB4Kqw4KuN4Kqt4Kq+4Kq14Kqo4Kq+4Kqq4KuC4Kqw4KuN4KqjIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCriyDgqqTgqq7gqr7gqrDgq4Ag4Kqq4KuB4Kq34KuN4Kqf4Kq/IOCqteCqv+CqqOCqviDgqpXgq4ngqrLgq43gqrgg4KqV4Kqw4KuA4Kqo4KuHIOCqpOCqruCqvuCqsOCqviDgqqrgq4jgqrjgqr4g4KqW4Kqw4KuN4KqaIOCqleCqsOCrgCDgqrbgqpXgq4cg4Kqb4KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCqleCrieCqsiDgqrjgq4fgqrXgqr4g4KqN4KqV4KuN4Kq44KuH4Kq4IOCqleCqsOCriyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4KqV4Kq+4Kqq4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLgqpXgq4ngqqrgqr8g4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4Kqq4KuH4Kq44KuN4KqfIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4Kq44Kq+4Kqm4KuAIOCqn+Crh+CqleCrjeCquOCrjeCqnyDgqqTgqrDgq4DgqpXgq4cg4Kqq4KuH4Kq44KuN4KqfIOCqleCqsOCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4Kqs4Kqm4Kqy4KuL4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCqleCqvuCqouCrgCDgqqjgqr7gqpbgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgqqjgq4Ag4KqV4KuJ4Kqq4Kq/IOCqleCqsOCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCqn+Crh+CqleCrjeCquOCrjeCqnyDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgqqrgq4LgqrDgq43gqrXgqrXgqqTgq40g4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgqqvgqrDgq4Ag4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCqn+Crh+CqleCrjeCquOCrjeCqnyDgqqrgqrjgqoLgqqbgqpfgq4AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4Kq24Kqs4KuN4Kqm4KqV4KuL4Kq24Kqu4Kq+4KqCIOCqieCqruCrh+CqsOCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCriyI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgqrXgq4ngqrLgqqrgq4fgqqrgqrAg4Kqs4Kqm4Kqy4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4Kq44KuC4Kqa4Kqo4Kq+IOCquOCqvuCqguCqreCqs+CqqOCqvuCqsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4Kq24Kqw4KqkIOCqquCrjeCqsOCqpuCqvuCqpOCqviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IuCquOCrguCqmuCqqOCqviDgqrjgqrngqr7gqq/gqpUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDgqrjgqpXgq43gqrDgqr/gqq8g4KqV4Kqw4KuN4Kqv4KuB4KqCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCqpuCrjeCqteCqvuCqsOCqviBWUE4g4Kq44KqV4KuN4Kqw4Kq/4KqvIOCqpeCqr+CrgeCqgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuCqqOCrh+Cqn+CqteCqsOCrjeCqleCqqOCrhyDgqrjgqoLgqprgqr7gqrLgqr/gqqQg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqp/gqpog4KqV4Kqw4KuLLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLgqqTgqq7gqr7gqrDgqr4g4Kq14KuN4Kqv4Kq14Kq44KuN4Kql4Kq+4Kqq4KqVIOCqpuCrjeCqteCqvuCqsOCqviDgqoXgqqrgqqHgq4fgqp8g4Kql4Kqv4KuH4KqyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgqqTgqq7gqr7gqrDgqr4g4Kq14KuN4Kqv4Kq14Kq44KuN4Kql4Kq+4Kqq4KqVIOCqpuCrjeCqteCqvuCqsOCqviDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4KuH4KqyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgqqzgq4Xgqp/gqrDgq4Ag4KqG4Kq14Kqw4Kqm4Kq+IOCqteCqp+CrgSDgqrjgqr7gqrDgq4Ag4KqV4Kqw4Kq14Kq+4Kqu4Kq+4KqCIOCquOCqueCqvuCqryDgqq7gqr7gqp/gq4csIOCqrOCrheCqn+CqsOCrgCDgqrjgq4fgqrXgqrAg4Kqk4Kqu4Kq+4Kqw4Kq+IOCqieCqquCqleCqsOCqo+CqqOCqviDgqqrgq43gqrDgqqbgqrDgq43gqrbgqqjgqqjgq4cg4KqY4Kqf4Kq+4Kqh4KuHIOCqm+CrhyDgqoXgqqjgq4cg4Kq14Kq+4KqH4Kqs4KuN4Kqw4KuH4Kq24KqoLCDgqrjgq43gqqXgqr7gqqgg4Kq44KuH4Kq14Kq+4KqTIOCqheCqqOCrhyDgqq7gq4vgqp/gqr7gqq3gqr7gqpfgqqjgqr4g4Kqq4KuD4Kq34KuN4Kqg4Kqt4KuC4Kqu4Kq/IOCqoeCrh+Cqn+CqvuCqqOCrhyDgqrjgq4Dgqq7gqr/gqqQg4KqV4Kqw4KuHIOCqm+Crhy4g4KqH4Kqu4KuH4KqH4KqyLCDgqq7gq4fgqrjgq4fgqpzgqr/gqoLgqpcg4KqF4Kqo4KuHIOCqheCqqOCrjeCqryDgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgq4sg4Kqc4KuHIOCquOCqruCqqOCrjeCqteCqr+CqqCDgqqrgqrAg4KqG4Kqn4Kq+4KqwIOCqsOCqvuCqluCrhyDgqpvgq4cg4Kqk4KuHIOCqpOCqruCrhyDgqqTgq4fgqq7gqqjgq4cg4KqW4KuL4Kqy4Kq24KuLIOCqqOCqueCrgOCqgiDgqqTgq43gqq/gqr7gqoIg4Kq44KuB4Kqn4KuAIOCqheCqquCqoeCrh+CqnyDgqqXgqogg4Kq24KqV4Kqk4KuAIOCqqOCqpeCrgC5cblxu4Kqc4KuN4Kqv4Kq+4Kqw4KuHIOCqpOCqruCqvuCqsOCrgeCqgiDgqongqqrgqpXgqrDgqqMg4Kqa4Kq+4Kqw4KuN4KqcIOCqpeCqiCDgqrDgqrngq43gqq/gq4HgqoIg4Kq54KuL4KqvIOCqpOCrjeCqr+CqvuCqsOCrhyDgqqzgq4Xgqp/gqrDgq4Ag4Kq44KuH4Kq14KqwIOCqhuCqquCqruCrh+Cqs+CrhyDgqqzgqoLgqqcg4Kql4KqIIOCqnOCqvuCqryDgqpvgq4cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgqoXgqrXgqrDgq4vgqqfgqr/gqqQ6IOCqhiDgqrjgq4Lgqprgqqjgqr7gqpMg4KqV4KuN4Kqv4Kq+4Kqw4KuH4KqvIOCqrOCqpOCqvuCqteCqtuCriyDgqqjgqrngq4DgqoIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4Kqo4Kq/4Kqu4KuN4KqoOiDgqrjgq4Lgqprgqqjgqr7gqqjgq4Ag4Kq44KuC4Kqa4Kq/4Kqo4KuAIOCqqOCrgOCqmuCrhyDgqprgq4Hgqqrgqprgqr7gqqog4Kqs4Kqk4Kq+4Kq14KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgqrjgqr7gqq7gqr7gqqjgq43gqq86IOCqhiDgqrjgq4Lgqprgqqjgqr7gqpMg4Kqa4KuB4Kqq4Kqa4Kq+4KqqIOCqrOCqpOCqvuCqteCriyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4KqJ4Kqa4KuN4KqaOiDgqrjgq4Lgqprgqqjgqr7gqpPgqqjgq4Ag4Kq44KuC4Kqa4Kq/4Kqo4KuAIOCqn+Cri+CqmiDgqqrgqrAg4Kqs4Kqk4Kq+4Kq14KuLIOCqheCqqOCrhyDgqoXgqrXgqr7gqpwg4KqV4Kqw4KuLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuCqpOCqvuCqpOCrjeCqleCqvuCqsuCqv+CqlSA6IOCquOCrjeCqleCrjeCqsOCrgOCqqCDgqqrgqrAg4Kqk4KuN4Kq14Kqw4Kq/4KqkIOCqpuCrjeCqsOCqt+CrjeCqn+CqvyDgqpXgqrDgq4sg4KqF4Kqo4KuHIOCqheCqteCqvuCqnCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkIOCqruCqv+CqqOCqv+CqnyDgqq7gqr7gqp/gq4cgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCquOCrgeCqp+CrgCk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4Kqu4Kq/4Kqo4Kq/4KqfIOCqruCqvuCqn+CrhyAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4Kq44KuB4Kqn4KuAKTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiDgqqrgqrjgqoLgqqYg4KqV4Kqw4KuAPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4Kq14Kq/4Kq14Kq/4KqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCqpOCqruCrhyDgqoYg4Kq44KuC4Kqa4Kqo4Kq+4KqT4Kqo4KuB4KqCIOCqruCqueCqpOCrjeCqtSDgqrjgq4fgqp8g4KqV4Kqw4KuN4Kqv4KuB4KqCIOCqm+Crhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuCqtuCqvuCqruCrh+CqsiDgqqXgqq/gq4fgqrIg4Kqy4KuL4KqV4KuL4Kqo4KuHIOCqleCqvuCqsOCqo+CrhyDgqoYg4Kqu4Kq54Kqk4KuN4Kq14Kqq4KuC4Kqw4KuN4KqjIOCqm+Crhy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IGU4MTg3MmEuLjU3NDFkNWMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCkheCkreClgCDgpLLgpYngpJUg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCkm+Ckv+CkquClgCDgpLngpYHgpIgg4KS44KS+4KSu4KSX4KWN4KSw4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4KS44KWB4KSw4KSV4KWN4KS34KS/4KSkIOCkruCli+CkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg4KS44KS/4KS44KWN4oCN4KSf4KSuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuCkleCljeCksOClh+CkoeCkv+CknyDgpJXgpL7gpLDgpY3gpKEg4KSo4KSC4KSs4KSwIOCklOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKEg4KSc4KWI4KS44KS+IOCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKHgpYfgpJ/gpL4g4KS24KS+4KSu4KS/4KSyIOCkueCli+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSG4KS14KSw4KWN4KSn4KSoIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkleCkviDgpJzgpLzgpYLgpK4g4KS44KWN4oCN4KSk4KSwIOCklOCksCDgpLjgpY3igI3gpKXgpL/gpKTgpL8g4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSjIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i4KS54KS+4KS14KSt4KS+4KS1IOCkqOCkv+Ckt+CljeCkquCkvuCkpuCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IuCkh+CkuCDgpLjgpYfgpLXgpL4g4KSV4KWHIOCkpuCljeCkteCkvuCksOCkviDgpJ/gpYjgpKog4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWILCDgpLjgpY3gpLXgpL7gpIfgpKog4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWILCDgpKrgpL/gpILgpJog4KSV4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpKTgpL4g4KS54KWIIOCklOCksCDgpIXgpKjgpY3gpK8g4KS54KS+4KS14KSt4KS+4KS1IOCkqOCkv+Ckt+CljeCkquCkvuCkpuCkv+CkpCDgpJXgpL/gpI8g4KSc4KS+IOCkuOCkleCkpOClhyDgpLngpYjgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4KS44KWN4oCN4KSl4KS/4KSk4KS/IOCkrOCkvuCksCDgpIXgpJXgpY3gpLfgpK4g4KSv4KS+IOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpJDgpKrgpY3gpLggIOCkleCliyDgpLjgpY3gpKXgpL/gpKTgpL8g4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKjgpYcg4KSv4KS+IOCkuOCkv+CkuOCljeKAjeCkn+CkriDgpIbgpIfgpJXgpKgg4KSV4KWLIOCknOCli+CkoeCkvOCkqOClhyDgpK/gpL4g4KSo4KS/4KSV4KS+4KSy4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuCkuOCljeKAjeCkpeCkv+CkpOCkvyDgpKzgpL7gpLAg4KS54KWL4KSo4KWHIOCkpuClh+CkgiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkleCliOCkruCksOClhyDgpLjgpYcg4KSa4KS/4KSk4KWN4KSwIOCklOCksCDgpLXgpYDgpKHgpL/gpK/gpYsg4KSy4KWH4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkr+CkuSDgpIXgpKjgpYHgpK7gpKTgpL8g4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSV4KS/4KS44KWAIOCkreClgCDgpLjgpK7gpK8g4KSG4KSq4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpYcg4KSs4KS/4KSo4KS+IOCkleCliOCkruCksOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpILgpKrgpKgg4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpJXgpILgpKrgpKjgpJXgpLDgpY3gpKTgpL4g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4KSQ4KSq4KWN4KS4IOCkleCliyDgpKvgpLzgpY3gpLLgpYjgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCkqOClhyDgpKbgpYfgpKTgpL4g4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+CkvOCli+CkqCDgpKjgpILgpKzgpLAg4KSq4KSwIOCkuOClgOCkp+ClhyDgpJXgpYngpLIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCkkOCkquCljeCkuCAg4KSV4KWLIOCkhuCkquCkleClhyDgpLngpLjgpY3igI3gpKTgpJXgpY3gpLfgpYfgpKog4KSV4KWHIOCkrOCkv+CkqOCkviDgpKvgpLzgpYvgpKgg4KSo4KSC4KSs4KSwIOCkquCksCDgpJXgpYngpLIg4KSV4KSw4KSo4KWHIOCkpuClh+CkpOCkviDgpLngpYguIOCkh+CkuOCkleClhyDgpKrgpLDgpL/gpKPgpL7gpK4g4KSF4KSq4KWN4KSw4KSk4KWN4oCN4KSv4KS+4KS24KS/4KSkIOCktuClgeCksuCljeKAjeCklSDgpK/gpL4g4KSV4KWJ4KSyIOCkueCliyDgpLjgpJXgpKTgpYcg4KS54KWI4KSCLiDgpKfgpY3gpK/gpL7gpKgg4KSm4KWH4KSCIOCkleCkvyDgpK/gpLkg4KSQ4KSq4KWN4KS4ICDgpJXgpYsg4KSG4KSq4KS+4KSk4KSV4KS+4KSy4KWA4KSoIOCkqOCkguCkrOCksCDgpKrgpLAg4KSV4KWJ4KSyIOCkqOCkueClgOCkgiDgpJXgpLDgpKjgpYcg4KSm4KWH4KSk4KS+LiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSQ4KSq4KWN4KS4ICDgpIbgpKrgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleClhyDgpKzgpL/gpKjgpL4g4KSV4KWJ4KSyIOCkleCksOCkleClhyDgpIbgpKrgpJXgpL4g4KSn4KSoIOCkteCljeKAjeCkr+CkryDgpJXgpLAg4KS44KSV4KSk4KWHIOCkueCliOCkgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgpJXgpYngpLIg4KS44KWH4KS14KS+IOCkkOCkleCljeKAjeCkuOClh+CkuCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+Clh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkmuCkv+CkquCkleCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4KS44KS+4KSm4KWHIOCkquCkvuCkoCDgpJXgpYcg4KSw4KWC4KSqIOCkruClh+CkgiDgpJrgpL/gpKrgpJXgpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCkrOCkpuCksuClh+CkguKAoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgpJXgpYAg4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkj+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCksuClh+CkliDgpJXgpYsg4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgpLXgpL7gpKrgpLgg4KSy4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgpKvgpL/gpLAg4KS44KWHIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgpLLgpYfgpJYg4KSa4KSv4KSoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuCktuCkrOCljeCkpuCkleCli+CktiDgpK7gpYfgpIIg4KSc4KWL4KSh4KS84KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgpLngpJ/gpL7gpI/gpIIiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KWJ4KSy4KSq4KWH4KSq4KSwIOCkrOCkpuCksuClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLbgpY3gpLDgpLXgpKPgpJXgpLDgpY3gpKTgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpY3gpLDgpKbgpL7gpKTgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KS44KS54KS+4KSv4KSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4KS44KSV4KWN4KSw4KS/4KSvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIOCkleCliyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkleCljeCksOCkv+CkryDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuCkqOClh+Ckn+CkteCksOCljeCklSDgpKrgpY3gpLDgpKzgpILgpKfgpL/gpKQg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KWN4oCN4KSq4KSw4KWN4KS2IOCkleCksOClh+Ckgi4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4KSG4KSq4KSV4KWHIOCkqOCkv+Ckr+CkguCkpOCljeCksOCklSDgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSq4KSh4KWH4KSfIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCkhuCkquCkleClhyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpJUg4KSm4KWN4KS14KS+4KSw4KS+IOCkueCkn+CkvuCkr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCkrOCliOCkn+CksOClgCDgpJzgpYDgpLXgpKgg4KSV4KS+4KSyIOCkleCliyDgpKzgpYfgpLngpKTgpLAg4KSs4KSo4KS+4KSo4KWHIOCkruClh+CkgiDgpLjgpLngpL7gpK/gpKTgpL4g4KSV4KWHIOCksuCkv+Ckjywg4KSs4KWI4KSf4KSw4KWAIOCkuOClh+CkteCksCDgpIbgpKrgpJXgpYcg4KSh4KS/4KS14KS+4KSH4KS4IOCkleClhyDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSV4KWLIOCkleCkriDgpJXgpLAg4KSm4KWH4KSk4KS+IOCkueCliCDgpJTgpLAg4KSV4KSC4KSq4KSoLCDgpLjgpY3igI3gpKXgpL7gpKgg4KS44KWH4KS14KS+4KST4KSCIOCklOCksCDgpIXgpKfgpL/gpJXgpL7gpILgpLYg4KSq4KWD4KS34KWN4oCN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpJXgpYsg4KS44KWA4KSu4KS/4KSkIOCkleCksCDgpKbgpYfgpKTgpL4g4KS54KWILiDgpLngpYsg4KS44KSV4KSk4KS+IOCkueCliCDgpJXgpL8g4KSI4KSu4KWH4KSyLCDgpLjgpILgpKbgpYfgpLYg4KS44KWH4KS14KS+IOCkpOCkpeCkviDgpLjgpK7gpKjgpY3igI3gpLXgpK/gpKgg4KSq4KSwIOCkhuCkp+CkvuCksOCkv+CkpCDgpIXgpKjgpY3igI3gpK8g4KSQ4KSq4KWN4oCN4KS4IOCkpOCkrCDgpKTgpJUg4KSo4KS+IOCkluClgeCksuClh+CkgiDgpJzgpKwg4KSk4KSVIOCkleCkvyDgpIbgpKog4KSJ4KSo4KWN4oCN4KS54KWH4KSCIOCkqOCkueClgOCkgiDgpJbgpYvgpLLgpKTgpYcuXG5cbuCknOCkrCDgpIbgpKrgpJXgpL4g4KSh4KS/4KS14KS+4KSH4KS4IOCkmuCkvuCksOCljeCknCDgpLngpYsg4KSw4KS54KS+IOCkueCli+CkpOCkviDgpLngpYgg4KSk4KWLIOCkrOCliOCkn+CksOClgCDgpLjgpYfgpLXgpLAg4KSF4KSq4KSo4KWHIOCkhuCkqiDgpKzgpILgpKYg4KS54KWLIOCknOCkvuCkpOCkviDgpLngpYguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgpIXgpLXgpLDgpYvgpKfgpL/gpKQ6IOCkr+ClhyDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSV4KSt4KWAIOCkqOCkviDgpKbgpL/gpJbgpL7gpI/gpIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KSo4KS/4KSu4KWN4oCN4KSoOiDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KS44KWC4KSa4KWAIOCkleClhyDgpKjgpYDgpJrgpYcg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgpLjgpL7gpK7gpL7gpKjgpY3igI3gpK86IOCkr+ClhyDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLgpIngpJrgpY3igI3gpJo6IOCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLjgpYLgpJrgpYAg4KSV4KWHIOCktuClgOCksOCljeCktyDgpKrgpLAg4KSm4KS/4KSW4KS+4KSP4KSCIOCklOCksCDgpKfgpY3igI3gpLXgpKjgpL8g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuCkpOCkpOCljeKAjeCkleCkvuCksjog4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpI/gpJUg4KSd4KSy4KSVIOCkpuClh+CkluClh+CkgiDgpJTgpLAg4KSn4KWN4oCN4KS14KSo4KS/IOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4KSu4KS/4KSo4KSfIOCkleClhyDgpLLgpL/gpI8gKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCkpOCklSk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4KSu4KS/4KSo4KSfIOCkleClhyDgpLLgpL/gpI8gKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCkpOCklSk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4g4KSa4KSv4KSo4KS/4KSkPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4KS14KS/4KS14KS/4KSnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCkhuCkquCkqOClhyDgpIfgpKgg4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkleCkviDgpK7gpLngpKTgpY3gpLUg4KS44KWH4KSfIOCkleCkv+Ckr+CkviDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgpK/gpLkg4KSu4KWM4KSc4KWC4KSmIOCkteCljeCkr+CkleCljeCkpOCkv+Ckr+Cli+CkgiDgpJXgpYcg4KSV4KS+4KSw4KSjIOCkruCkueCkpOCljeCkteCkquClguCksOCljeCkoyDgpLngpYguIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCBmNTM2MjVlLi5mNjM1YjE1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJaYWtsanXEjWFqIHNhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2FkcsW+YWogamUgc2tyaXZlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlNpZ3VyYW4gbmHEjWluIHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTdXN0YXYgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iT3NvYm5vIjwvc3RyaW5nPgpAQCAtMjU2LDYgKzI1Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJVa2xqdcSNdWplIG9zb2JuZSBwb2RhdGtlIGthbyDFoXRvIHN1IGJyb2pldmkga3JlZGl0bmloIGthcnRpY2EgaSB6YXBvcmtlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iS29udHJvbGEgdXZlxIdhbmphIHphc2xvbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iS29udHJvbGlyYSByYXppbnUgenVtaXJhbmphIGkgcG9sb8W+YWogemFzbG9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJJenZvxJFlbmplIHBva3JldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+Ik1vxb5lIGRvZGlybnV0aSwgcHJpamXEh2kgcHJzdG9tLCBzcG9qaXRpIHByc3RlIGkgaXp2b2RpdGkgZHJ1Z2UgcG9rcmV0ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJvbmVtb2d1xIdhdmFuamUgaWxpIGl6bWplbmEgdHJha2Ugc3RhdHVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJBcGxpa2FjaWppIG9tb2d1xId1amUgb25lbW9ndcSHYXZhbmplIHRyYWtlIHN0YXR1c2EgaWxpIGRvZGF2YW5qZSBpIHVrbGFuamFuamUgc2lzdGVtc2tpaCBpa29uYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iYml0aSB0cmFrYSBzdGF0dXNhIjwvc3RyaW5nPgpAQCAtMzU0LDggKzM1Nyw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHNuaW1hbmplIHNsaWthIGkgdmlkZW96YXBpc2EgZm90b2FwYXJhdG9tLiBUYSBkb3p2b2xhIGFwbGlrYWNpamkgb21vZ3XEh3VqZSB1cG90cmVidSBmb3RvYXBhcmF0YSB1IGJpbG8ga29qZW0gdHJlbnV0a3UgYmV6IHZhxaFlZyBvZG9icmVuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InVwcmF2bGphbmplIHZpYnJhY2lqb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkFwbGlrYWNpamkgb21vZ3XEh3VqZSBuYWR6b3IgbmFkIHZpYnJhdG9yb20uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+InVwcmF2bGphbmplIHN2amV0aWxqa29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJBcGxpa2FjaWppIG9tb2d1xId1amUgdXByYXZsamFuamUgc3ZqZXRpbGprb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iaXpyYXZubyBwb3ppdmFuamUgdGVsZWZvbnNrb2cgYnJvamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQXBsaWthY2lqaSBvbW9ndcSHdWplIHBveml2YW5qZSB0ZWxlZm9uc2tpaCBicm9qZXZhIGJleiB2YcWhZWcgc3VkamVsb3ZhbmphLiBUbyBtb8W+ZSBkb3Zlc3RpIGRvIG5lb8SNZWtpdmFuaWggdHJvxaFrb3ZhIGlsaSBwb3ppdmEuIFV6bWl0ZSB1IG9iemlyIGRhIHNlIGFwbGlrYWNpamkgdGltZSBuZSBvbW9ndcSHdWplIHBveml2YW5qZSBicm9qZXZhIHUgbnXFvmRpLiBabG9uYW1qZXJuZSBhcGxpa2FjaWplIG1vZ3UgdmFtIHV6cm9rb3ZhdGkgZG9kYXRuZSB0cm/FoWtvdmUgcG9zdGF2bGphbmplbSBwb3ppdmEgYmV6IHZhxaFlZyBvZG9icmVuamEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwcmlzdHVwaXRpIHVzbHV6aSBwb3ppdmEgaXpyYXZuaWggcG9ydWthIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjQsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJenJlxb5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpcmFqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iWmFsaWplcGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlphbGlqZXBpIGthbyBvYmnEjW5pIHRla3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJaYW1pamVuaeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJJemJyacWhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waXJhaiBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJPZGFiaXIgdGVrc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJQb25pxaF0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUG9ub3ZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik9kYWJpciB0ZWtzdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRG9kYWogdSByamXEjW5payI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iSXpicmnFoWkiPC9zdHJpbmc+CkBAIC0xMTE0LDYgKzExMTgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iUHJvbWplbmEgcG96YWRpbnNrZSBzbGlrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlNsdcWhYXRlbGogb2JhdmlqZXN0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iRGF2YXRhbGogdXZqZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUG9tb8SHbmlrIHphIG9iYXZpamVzdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBha3RpdmlyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBha3RpdmlyYWxhIGplIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkRvZGlybml0ZSB6YSB1cHJhdmxqYW5qZSBtcmXFvm9tLiI8L3N0cmluZz4KQEAgLTEzMTAsNyArMTMxNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19yZW9yZGVyaW5nX2RlbGV0ZV9kcm9wX3RhcmdldF90ZXh0IiBtc2dpZD0iNzg5OTIwMjk3ODIwNDQzODcwOCI+IlVrbG9uaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVfbWVkaWFfdm9sdW1lX3dhcm5pbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyMjc2MzE4OTA5MzE0NDkyMzEyIj4ixb1lbGl0ZSBsaSBwb2phxI1hdGkgenZ1ayBpem5hZCBwcmVwb3J1xI1lbmUgcmF6aW5lP1xuXG5EdWdvdHJham5vIHNsdcWhYW5qZSBnbGFzbmUgZ2xhemJlIG1vxb5lIHZhbSBvxaF0ZXRpdGkgc2x1aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb250aW51ZV90b19lbmFibGVfYWNjZXNzaWJpbGl0eSIgbXNnaWQ9IjE2MjY0MjczNzIzMTYwNzAyNTgiPiJOYXN0YXZpdGUgZHLFvmF0aSBzIGR2YSBwcnN0YSBrYWtvIGJpc3RlIG9tb2d1xIdpbGkgcHJpc3R1cGHEjW5vc3QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9lbmFibGVkIiBtc2dpZD0iMTM4MTk3MjA0ODU2NDU0NzY4NSI+IkRvc3R1cG5vc3QgamUgb21vZ3XEh2VuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2VuYWJsZWQiIG1zZ2lkPSIxMzgxOTcyMDQ4NTY0NTQ3Njg1Ij4iUHJpc3R1cGHEjW5vc3QgamUgb21vZ3XEh2VuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWNjZXNzaWJpbGl0eV9jYW5jZWxlZCIgbXNnaWQ9IjM4MzM5MjMyNTc5NjY2MzU2NzMiPiJQcmlzdHVwYcSNbm9zdCBvdGthemFuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGVkIiBtc2dpZD0iMzc2ODAwNjc4MzE2Njk4NDQxMCI+IlRyZW51dGHEjW5pIGtvcmlzbmlrIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3N3aXRjaGluZ19tZXNzYWdlIiBtc2dpZD0iMjg3MTAwOTMzMTgwOTA4OTc4MyI+IlByZWJhY2l2YW5qZSBuYSBrb3Jpc25pa2EgPHhsaWZmOmcgaWQ9Ik5BTUUiPiUxJHM8L3hsaWZmOmc+4oCmIjwvc3RyaW5nPgpAQCAtMTQ0OSwxMSArMTQ1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkHFvnVyaXJhIHZhxaEgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXpicmlzYW8gYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iRGEgYmkgc2UgcHJvZHVsamlsbyB0cmFqYW5qZSBiYXRlcmlqZSwgdcWhdGVkYSBiYXRlcmlqZSBzbWFuanVqZSByYWQgdXJlxJFhamEgaSBvZ3JhbmnEjWF2YSB2aWJyYWNpanUsIHVzbHVnZSBsb2thY2lqZSBpIHZlxIdpbnUgcG96YWRpbnNraWggcG9kYXRha2EuIEFwbGlrYWNpamUgemEgZS1wb8WhdHUsIHNsYW5qZSBwb3J1a2EgaSBkcnVnZSBhcGxpa2FjaWplIGtvamUgc2Ugb3NsYW5qYWp1IG5hIHNpbmtyb25pemFjaWp1IG1vxb5kYSBzZSBuZcSHZSBhxb51cmlyYXRpIGFrbyBpaCBuZSBvdHZvcml0ZS5cblxuVcWhdGVkYSBiYXRlcmlqZSBpc2tsanXEjXVqZSBzZSBhdXRvbWF0c2tpIGRvayBzZSB1cmXEkWFqIHB1bmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9raXJhbm86IG5pa2FkIG5lIHByaWthenVqIHRlIG9iYXZpamVzdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTmlza286IHRpaG8gcHJpa2HFvmkgbmEgZG51IHBvcGlzYSBvYmF2aWplc3RpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJVb2JpxI1hamVubzogcHJpa2F6dWogdGUgb2JhdmlqZXN0aSB0aWhvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJWaXNva286IHByaWthxb5pIG5hIHZyaHUgcG9waXNhIG9iYXZpamVzdGkgaSBlbWl0aXJhaiB6dnXEjW5pIHNpZ25hbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJIaXRubzogcHJpa2HFvmkgbmEgemFzbG9udSBpIGVtaXRpcmFqIHp2dcSNbmkgc2lnbmFsIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCBtaW51dHUgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQgbWludXRlIChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTI4LDQgKzE1MjgsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gb2RhYnJhbmloPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iUmF6bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iUG9zdGF2aWxpIHN0ZSB2YcW+bm9zdCB0aWggb2JhdmlqZXN0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlZhxb5ubyBqZSB6Ym9nIHVrbGp1xI1lbmloIG9zb2JhLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKaW5kZXggMmJiOGZiMC4uNjRhNjc0YyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iWsOhcm9sw6FzIG1vc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iVGFydGFsb20gZWxyZWp0dmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJCaXp0b25zw6FnaSDDvHplbW3Ds2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHJlbmRzemVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJTemVtw6lseWVzIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJCZWxlw6lydHZlIGEgc3plbcOpbHllcyBhZGF0b2thdCwgcMOpbGTDoXVsIGEgaGl0ZWxrw6FydHlhc3rDoW1va2F0IMOpcyBqZWxzemF2YWthdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkEga2lqZWx6xZEgbmFnecOtdMOhc8OhbmFrIHZlesOpcmzDqXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkEga2lqZWx6xZEgbmFnecOtdMOhc2kva2ljc2luecOtdMOpc2kgc3ppbnRqw6luZWsgw6lzIHBvesOtY2nDs2rDoW5hayB2ZXrDqXJsw6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IkvDqXptb3pkdWxhdG9rIHbDqWdyZWhhanTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJLb3BwaW50w6FzLCB1amphayBneW9ycyBjc8O6c3p0YXTDoXNhIMOpcyDDtnNzemVow7p6w6FzYSwgaWxsZXR2ZSBlZ3nDqWIga8Opem1vemR1bGF0b2sgdsOpZ3JlaGFqdMOhc2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iw6FsbGFwb3Rzb3Iga2lrYXBjc29sw6FzYSB2YWd5IG3Ds2Rvc8OtdMOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEgYXogw6FsbGFwb3Rzb3Iga2lrYXBjc29sw6Fzw6F0LCBpbGxldHZlIHJlbmRzemVyaWtvbm9rIGhvenrDoWFkw6Fzw6F0IMOpcyBlbHTDoXZvbMOtdMOhc8OhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iYXogw6FsbGFwb3Rzb3Igc3plcmVww6luZWsgw6F0dsOpdGVsZSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkxlaGV0xZF2w6kgdGVzemkgYXogYWxrYWxtYXrDoXMgc3rDoW3DoXJhLCBob2d5IGEgZsOpbnlrw6lwZXrFkWfDqXBwZWwgZm90w7NrYXQgw6lzIHZpZGXDs2thdCBrw6lzesOtdHNlbi4gQXogZW5nZWTDqWxseWVsIHJlbmRlbGtlesWRIGFsa2FsbWF6w6FzIGLDoXJtaWtvciwgYXogw5ZuIGrDs3bDoWhhZ3nDoXNhIG7DqWxrw7xsIGhhc3puw6FsaGF0amEgYSBmw6lueWvDqXBlesWRZ8OpcGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJyZXpnw6lzIHN6YWLDoWx5b3rDoXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSBhIHJlemfDqXMgdmV6w6lybMOpc8OpdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4idmFrdSB2ZXrDqXJsw6lzZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTGVoZXTFkXbDqSB0ZXN6aSBheiBhbGthbG1hesOhcyBzesOhbcOhcmEgYSB2YWt1IHZlesOpcmzDqXPDqXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbnN6w6Ftb2sga8O2enZldGxlbiBow612w6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJMZWhldMWRdsOpIHRlc3ppIGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYSwgaG9neSBheiDDlm4gasOzdsOhaGFnecOhc2EgbsOpbGvDvGwgaMOtdmpvbiBmZWwgdGVsZWZvbnN6w6Ftb2thdC4gRW5uZWsgZXJlZG3DqW55ZWvDqW50IHbDoXJhdGxhbiB0ZXJoZWzDqXNla2tlbCB2YWd5IHRlbGVmb25ow612w6Fzb2trYWwgdGFsw6Fsa296aGF0LiBWZWd5ZSBmaWd5ZWxlbWJlLCBob2d5IGV6IG5lbSB0ZXN6aSBsZWhldMWRdsOpIHNlZ8OpbHlow612w7Mgc3rDoW1vayBow612w6Fzw6F0IGF6IGFsa2FsbWF6w6FzIHN6w6Ftw6FyYS4gQSByb3NzemluZHVsYXTDuiBhbGthbG1hesOhc29rIGF6IMOWbiBqw7N2w6FoYWd5w6FzYSBuw6lsa8O8bCBrZXpkZW3DqW55ZXpoZXRuZWsgaMOtdsOhc29rYXQsIMOtZ3kga8O2bHRzw6lnZWsgbWVyw7xsaGV0bmVrIGZlbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImhvenrDoWbDqXLDqXMgYXogSU1TLWjDrXbDoXNzem9sZ8OhbHRhdMOhc2hveiI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS2l2w6Fnw6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJNw6Fzb2zDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJCZWlsbGVzenTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkJlaWxsZXN6dMOpcyBlZ3lzemVyxbEgc3rDtnZlZ2vDqW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJDc2VyZS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJUw7ZybMOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIG3DoXNvbMOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTesO2dmVnIGtpamVsw7Zsw6lzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVmlzc3phdm9uw6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLDmmpyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTesO2dmVnIGtpamVsw7Zsw6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJIb3p6w6FhZMOhcyBhIHN6w7N0w6FyaG96Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJUw7ZybMOpcyI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJIw6F0dMOpcmvDqXAgbWVndsOhbHRvenRhdMOhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLDiXJ0ZXPDrXTDqXNmaWd5ZWzFkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iRmVsdMOpdGVsYml6dG9zw610w7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLDiXJ0ZXPDrXTDqXNpIHNlZ8OpZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdGl2w6FsdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBKHopIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBha3RpdsOhbHRhIGEgVlBOLXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLDiXJpbnRzZSBtZWcgYSBow6Fsw7N6YXQga2V6ZWzDqXPDqWhlei4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iRnJpc3PDrXRldHRlIGEgcmVuZHN6ZXJnYXpkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iQSByZW5kc3plcmdhemRhIHTDtnLDtmx0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iQXogYWtrdW11bMOhdG9yaWTFkSBuw7Z2ZWzDqXNlIMOpcmRla8OpYmVuIGF6IGVuZXJnaWF0YWthcsOpa29zIG3Ds2QgY3PDtmtrZW50aSBheiBlc3prw7Z6IHRlbGplc8OtdG3DqW55w6l0LCDDqXMga29ybMOhdG96emEgYSByZXpnw6lzdCwgYSBoZWx5c3pvbGfDoWx0YXTDoXNva2F0LCB2YWxhbWludCBhIGxlZ3TDtmJiIGjDoXR0w6lyYWRhdG90IGlzLiBFbMWRZm9yZHVsaGF0LCBob2d5IGF6b2sgYXogZS1tYWlsLSwgw7x6ZW5ldGvDvGxkxZEgw6lzIGVnecOpYiBhbGthbG1hesOhc29rLCBhbWVseWVrIHN6aW5rcm9uaXrDoWzDoXPDoXJhIHN6w6Ftw610LCBjc2FrIGFra29yIGZyaXNzw610ZW5laywgaGEgbWVnbnlpdGphIGF6b2thdC5cblxuQXogZW5lcmdpYXRha2Fyw6lrb3MgbcOzZCBhdXRvbWF0aWt1c2FuIGtpa2FwY3NvbCwgaGEgZXN6a8O2emUgdMO2bHTFkW4gdmFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iTGV0aWx0dmE6IHNvaGEgbmVtIGplbGVubmVrIG1lZyBlemVrIGF6IMOpcnRlc8OtdMOpc2VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkFsYWNzb255OiBheiDDqXJ0ZXPDrXTDqXNlayBheiDDqXJ0ZXPDrXTDqXNpIGxpc3RhIHbDqWfDqW4gamVsZW5uZWsgbWVnIGhhbmdqZWx6w6lzIG7DqWxrw7xsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3Jtw6FsOiBoYW5nIG7DqWxrw7xsIGplbGVubmVrIG1lZyBlemVrIGF6IMOpcnRlc8OtdMOpc2VrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJNYWdhczogYXogw6lydGVzw610w6lzZWsgYXogw6lydGVzw610w6lzaSBsaXN0YSBlbGVqw6luIGplbGVubmVrIG1lZyBoYW5namVsesOpc3NlbCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJTw7xyZ8WRczogYXogw6lydGVzw610w6lzZWsgZmVsdWdyYW5hayBhIGvDqXBlcm55xZFuIGhhbmdqZWx6w6lzc2VsIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIHBlcmNlbiDDoXQgKGVkZGlnOiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5FZ3kgcGVyY2VuIMOhdCAoZWRkaWc6IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4ga2l2w6FsYXN6dHZhPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iVmVneWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IsOWbiDDoWxsw610b3R0YSBiZSBlemVuIMOpcnRlc8OtdMOpc2VrIGZvbnRvc3PDoWdpIHN6aW50asOpdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkV6IGF6IMO8emVuZXQgYSByw6lzenR2ZXbFkWsgbWlhdHQgZm9udG9zLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAppbmRleCAyNTdkNDM1Li44ZDYyNzJhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItS/1bjVstW61aXVrCDVsNWr1bTVoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLUstW41b7VodW21aTVodWv1bjWgtWp1bXVuNaC1bbVqCDVqdWh1oTWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+ItSx1bbVvtW/1aHVttWjINW81aXVqtWr1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkINWw1aHVtNWh1a/VodaA1aMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItSx1bbVsdW21aHVr9Wh1bYiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+ItWG1aXWgNWh1bzVuNaC1bQg1acg1aHVttWx1bbVodWv1aHVtiDVv9W+1bXVodWs1bbVpdaALCDVq9W21bnVutWr1b3Vq9aEINWl1bYg1b7VodaA1a/VodW11avVtiDWhNWh1oDVv9Wl1oDVqyDVsNWh1bTVodaA1bbVpdaA1agg1ocg1aPVodWy1b/VttWh1aLVodW81aXWgNWoOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i1ZHVuNaC1oHVodW91aHWgNaE1asg1a3VuNW31bjWgNWh1oHVtNWh1bYg1a/VodW81aHVvtWh1oDVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i1ZHVuNaC1oHVodW91aHWgNaE1asg1bTVodW91bfVv9Wh1aLVodW+1bjWgNW01aHVtiDWhyDVpNWr1oDWhNWh1b7VuNaA1bTVodW2INWv1aHVvNWh1b7VodaA1bjWgtW0OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+ItS/1aHVv9Wh1oDVpdWsINWq1aXVvdW/1aXWgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i1L/VodaA1bjVsiDVpyDVsNW61aXVrCwg1anVpdaA1anVpdWsLCDVutW/1bLVuNaC1bbWgdWl1awg1ocg1a/VodW/1aHWgNWl1awg1aHVtdWsINWq1aXVvdW/1aXWgDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLVodW21bvVodW/1aXVrCDVr9Wh1bQg1oPVuNaD1bjVrdWl1awg1a/VodaA1aPVodW+1avVs9Wh1a/VqyDVo9W41b/Vq9W2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDVodW21bvVodW/1aXVrCDVr9Wh1oDVo9Wh1b7Vq9Wz1aHVr9WrINWj1bjVv9Wr1bYg1a/VodW0INWh1b7VpdWs1aHWgdW21aXVrCDVuNaCINWw1aXVvNWh1oHVttWl1awg1bDVodW01aHVr9Wh1oDVo9WrINW61aHVv9Wv1aXWgNWh1a/VttWl1oDVqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i1azVq9W21aXVrCDVr9Wh1oDVo9Wh1b7Vq9Wz1aHVr9WrINWj1bjVv9WrIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INaG1bjVv9W41a3WgdWr1a/VuNW+INWs1bjWgtW91aHVttWv1aHWgNWl1awg1ocg1b/VpdW91aHVttWv1aHWgNWl1aw6INSx1bXVvSDVqdW41oLVtdWs1b/VvtW41oLVqdW11bjWgtW21agg1bDVttWh1oDVodW+1bjWgNW41oLVqdW11bjWgtW2INWnINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1oXVo9W/1aHVo9W41oDVrtWl1awg1obVuNW/1bjVrdaB1avVr9WoINaB1aHVttWv1aHWgdWh1a4g1arVodW01aHVttWh1a9gINWh1bzVodW21oEg1bHVpdaAINWw1aHVvdW/1aHVv9W01aHVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i1a/VodW81aHVvtWh1oDVpdWsINWp1oDVqdW81bjWgtW01agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItS51bjWgtW11awg1acg1b/VodWs1avVvSDVsNWh1b7VpdWs1b7VodWu1avVtiDVr9Wh1bzVodW+1aHWgNWl1awg1anWgNWp1bzVuNaB1ag6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItWv1aHVvNWh1b7VodaA1aXVrCDVrNWh1brVv9Wl1oDVqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INWv1aHVvNWh1b7VodaA1aXVrCDVrNWh1brVv9Wl1oDVqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLVuNaC1bLVstWh1a/Vq9W41oDVpdW2INWm1aHVttWj1aXVrCDVsNWl1bzVodWt1bjVvdWh1bDVodW01aHWgNW21aXWgNWr1bYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INWw1aHVvtWl1azVvtWh1a7Vq9W2INWm1aHVttWj1aXVrCDVsNWl1bzVodWt1bjVvdWh1bDVodW01aHWgNW21aXWgNWr1bYg1aHVvNWh1bbWgSDVsdWl1oAg1bTVq9W71aHVtNW/1bjWgtWp1bXVodW2OiDVjdWhINWv1aHWgNW41bIg1acg1bDVodW21aPVpdaB1bbVpdWsINWh1bbVr9Wh1bbVrdWh1b/VpdW91aXVrNWrINWj1aHVttWx1bjWgtW01bbVpdaA1asg1a/VodW0INWm1aHVttWj1aXWgNWrOiDVhtWv1aHVv9WrINW41oLVttWl1oHVpdaELCDVuNaAINW91aEg1anVuNaC1bXVrCDVudWrINW/1aHVrNWr1b0g1bDVodW+1aXVrNW+1aHVrtWr1bYg1abVodW21aPVpdWsINWh1oDVv9Wh1a/VodaA1aMg1avWgNWh1b7Vq9Wz1aHVr9W21aXWgNWrINWw1aHVtNWh1oDVttWl1oDVq9W2OiDVjtW21aHVvdWh1oDVodaAINWw1aHVvtWl1azVvtWh1a7VttWl1oDVqCDVr9Wh1oDVuNWyINWl1bbCoNWx1aXWgCDVsNWh1bfVvtWr1oEg1abVodW21aPVpdaAINWv1aHVv9Wh1oDVpdWsYCDVodW81aHVttaBINWx1aXWgCDVsNWh1b3Vv9Wh1b/VtNWh1bY6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLWhdWj1b/VvtWl1awgSU1TINWm1aHVttWj1aXWgNWrINWu1aHVvNWh1bXVuNaC1anVtdW41oLVttWr1oEiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+ItS/1b/WgNWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItWK1aHVv9Wz1aXVttWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLVj9Wl1bLVodWk1oDVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLVj9Wl1bLVodWk1oDVpdWsINW41oDVutWl1b0g1b3VuNW+1bjWgNWh1a/VodW2INW/1aXWhNW91b8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItWT1bjVrdWh1oDVq9W21aXVrC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLVi9W21bvVpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLVitWh1b/Vs9Wl1bbVpdWsIFVSTC3VqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItS41bbVv9aA1aXVrCDVv9Wl1oTVvdW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLVgNWl1b/VodaA1a/VpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLUv9aA1a/VttWl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i1Y/VpdaE1b3Vv9WrINWo1bbVv9aA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i1LHVvtWl1azVodaB1bbVpdWsINWi1aHVvNWh1oDVodW21bjWgtW0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLVi9W21bvVpdWsIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItWT1bjVrdWl1awg1brVodW91b/VodW81agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLUvtWh1bbVuNaC1oHVtNWh1bYg1bjWgtW21a/VttWk1avWgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i1YrVodW11bTVodW21bbVpdaA1asg1bTVodW/1aHVr9Wh1oDVodaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i1L7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1oXVo9W21aHVr9Wh1bYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTi3VqCDVodWv1b/Vq9W+1aHWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi3VtiDVodWv1b/Vq9W+1aHWgdW+1aHVriDVpyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4t1asg1a/VuNWy1bTVq9aBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i1YDVutWl1oRgwqDWgdWh1bbWgdWrINWv1aHVvNWh1b7VodaA1bTVodW2INWw1aHVtNWh1oA6Ijwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItSx1aTVtNWr1bbVq9W91b/WgNWh1b/VuNaA1agg1anVodaA1bTVodaB1oDVpdWsINWnINWh1bXVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i1LHVpNW01avVttWr1b3Vv9aA1aHVv9W41oDVqCDVu9W21bvVpdWsINWnINWh1bXVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i1YTVodaA1b/Vr9W41oHVqyDVodW31a3VodW/1aHVttaE1asg1arVodW01a/VpdW/1agg1aXWgNWv1aHWgNWh1oHVttWl1azVuNaCINW21brVodW/1aHVr9W41b4sINW01aHWgNW/1a/VuNaB1asg1afVttWl1oDVo9Wr1aHVtdWrINWt1bbVodW11bTVodW2INWj1bjWgNWu1aHVvNW41oLVtdWp1agg1b3VodWw1bTVodW21aHWg9Wh1a/VuNaC1bQg1acg1b3VodaA1oTVqyDVodW31a3VodW/1aHVttaE1agsINWp1oDVqdW81bjWgdWoLCDVv9Wl1bLVodWk1oDVuNaC1anVtdWh1bYg1a7VodW81aHVtdW41oLVqdW11bjWgtW21bbVpdaA1agg1ocg1bDVpdW/1bbVodW31aXWgNW/1bjWgtW0INWh1bfVrdWh1b/VuNWyINW31aHVvyDVo9W41oDVrtWo1bbVqdWh1oHVttWl1oA6INS31azWg9W41b3Vv9WoLCDVsNWh1bLVuNaA1aTVodWj1oDVuNaC1anVtdW41oLVttW21aXWgNWrINaD1bjVrdWh1bbVodWv1bjWgtW01agg1ocg1b/VvtW11aHVrNW21aXWgNWrINWw1aHVtNWh1arVodW01aXWgdW41oLVtNWr1oEg1a/VodWt1b7VodWuINWh1bXVrCDVsNWh1b7VpdWs1b7VodWu1bbVpdaA1agg1a/VodaA1bjVsiDVpdW2INW51anVodaA1bTVodaB1b7VpdWsLCDVpdWp1aUg1aTVuNaC1oQg1aTWgNWh1bbWhCDVudWj1bjWgNWu1aHWgNWv1aXWhDpcblxu1LXWgNWiINWx1aXWgCDVvdWh1oDWhNWoINWs1avWgdaE1aHVvtW41oDVvtW41oLVtCDVpywg1bTVodaA1b/Vr9W41oHVqyDVp9W21aXWgNWj1avVodW11asg1a3VttWh1bXVtNWh1bYg1aPVuNaA1a7VodW81bjWgtW11anVtiDVq9W21oTVttWh1bfVrdWh1b/VuNaA1aXVtiDVodW21bvVodW/1b7VuNaC1bQg1ac6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLUsdaA1aPVpdWs1aHWg9Wh1a/VvtWh1a4g1acuINS11oDVotWl1oQg1bnWgdW41oLWgdWh1aTWgNWl1awg1aHVtdW9INWu1aHVttW41oLWgdW41oLVtNW21aXWgNWoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+ItWR1aHVrtaALiDVkdW41oLWgdWh1aTWgNWl1awg1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1oHVodW21a/VqyDVttWl1oDWhNaH1bjWgtW0INWh1bzVodW21oEg1bHVodW11bbVodW11avVtiDVodWm1aTVodW21bfVodW21asiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItWG1bjWgNW01aHVrC4g1ZHVuNaC1oHVodWk1oDVpdWsINWh1bXVvSDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVtiDVodW81aHVttaBINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVttWrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLUstWh1oDVsdaALiDVkdW41oLWgdWh1aTWgNWl1awg1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1oHVodW21a/VqyDVvtWl1oDWh9W41oLVtCDWhyDVsNW21bnVpdaB1bbVpdWsINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVtiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLVgNaA1aHVv9Wh1bouINWR1bjWgtaB1aHVpNaA1aXVrCDVp9Wv1oDVodW21avVtiDWhyDVsNW21bnVpdaB1bbVpdWsINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVtiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg1oDVuNW61aUgKNW01avVttW51ocgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkINaA1bjVutWlICjVtNWr1bbVudaHIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtS41bbVv9aA1b7VodWuINWn1Z0gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i1LbVodW21aHVptWh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i1LTVuNaC1oQg1b3VodWw1bTVodW21aXVrCDVpdaEINWh1bXVvSDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDVr9Wh1oDWh9W41oDVuNaC1anVtdW41oLVttWoOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i1L/VodaA1ofVuNaAINWnLCDWhNWh1bbVqyDVuNaAINW41oDVuNW31aHVr9WrINW01aHWgNWk1avVryDVpdW2INW21aXWgNWj1oDVodW+1b7VodWuOiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKaW5kZXggNmJlNTBkNS4uODk4ZjZkMSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iS3VuY2kgc2VrYXJhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iS29udGVuIHRlcnNlbWJ1bnlpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kZSBhbWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlByaWJhZGkiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+Ik1lbGlwdXRpIGRhdGEgcHJpYmFkaSBzZXBlcnRpIG5vbW9yIGthcnR1IGtyZWRpdCBkYW4gc2FuZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJNZW5nb250cm9sIHBlcmJlc2FyYW4gbGF5YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iTWVuZ29udHJvbCB0aW5na2F0IHpvb20gZGFuIHBlbW9zaXNpYW4gbGF5YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iTWVsYWt1a2FuIGlzeWFyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkRhcGF0IG1lbmdldHVrLCBtZW5nZ2VzZWssIG1lbmN1Yml0LCBkYW4gbWVsYWt1a2FuIGlzeWFyYXQgbGFpbm55YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJub25ha3RpZmthbiBhdGF1IHViYWggYmlsYWggc3RhdHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+Ik1lbmdpemlua2FuIGFwbCBtZW5vbmFrdGlma2FuIGJpbGFoIHN0YXR1cyBhdGF1IG1lbmFtYmFoIGRhbiBtZW5naGFwdXMgaWtvbiBzaXN0ZW0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ImphZGlrYW4gYmlsYWggc3RhdHVzIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTWVtdW5na2lua2FuIGFwbGlrYXNpIG1lbmdhbWJpbCBnYW1iYXIgZGFuIHZpZGVvIGRlbmdhbiBrYW1lcmEuIEl6aW4gaW5pIG1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5nZ3VuYWthbiBrYW1lcmEga2FwYW4gc2FqYSB0YW5wYSBrb25maXJtYXNpIEFuZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2wgZ2V0YXJhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTWVuZ2l6aW5rYW4gYXBsaWthc2kgdW50dWsgbWVuZ2VuZGFsaWthbiB2aWJyYXRvci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ibWVuZ29udHJvbCBsYW1wdSBzZW50ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Ik1lbmdpemlua2FuIGFwbCBtZW5nb250cm9sIGxhbXB1IGtpbGF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InBhbmdnaWwgbm9tb3IgdGVsZXBvbiBzZWNhcmEgbGFuZ3N1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTWVtdW5na2lua2FuIGFwbGlrYXNpIG1lbmdodWJ1bmdpIG5vbW9yIHRlbGVwb24gdGFucGEgY2FtcHVyIHRhbmdhbiBBbmRhLiBJemluIGluaSBkYXBhdCBtZW5nYWtpYmF0a2FuIGJpYXlhIGF0YXUgcGFuZ2dpbGFuIHRhayB0ZXJkdWdhLiBQZXJoYXRpa2FuIGJhaHdhIGl6aW4gaW5pIHRpZGFrIG1lbXVuZ2tpbmthbiBhcGxpa2FzaSBtZW5naHVidW5naSBub21vciBkYXJ1cmF0LiBBcGxpa2FzaSBiZXJiYWhheWEgZGFwYXQgbWVueWViYWJrYW4gQW5kYSBkaWtlbmFrYW4gYmlheWEgZGVuZ2FuIG1lbGFrdWthbiBwYW5nZ2lsYW4gdGFucGEga29uZmlybWFzaSBBbmRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWtzZXMgbGF5YW5hbiBwYW5nZ2lsYW4gSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJQb3RvbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IlNhbGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iVGVtcGVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJUZW1wZWwgc2ViYWdhaSB0ZWtzIGJpYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJHYW50aS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJIYXB1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iU2FsaW4gVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iUGlsaWggdGVrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iVXJ1bmdrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlVsYW5naSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJQZW1pbGloYW4gdGVrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJUYW1iYWhrYW4ga2Uga2FtdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkhhcHVzIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlViYWggd2FsbHBhcGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iUGVuZGVuZ2FyIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlBlbnllZGlhIGtldGVudHVhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzaXN0ZW4gbm90aWZpa2FzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGRpYWt0aWZrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gZGlha3RpZmthbiBvbGVoIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlNlbnR1aCB1bnR1ayBtZW5nZWxvbGEgamFyaW5nYW4uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkRpcGVyYmFydWkgb2xlaCBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJEaWhhcHVzIG9sZWggYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVW50dWsgbWVtYmFudHUgbWVuaW5na2F0a2FuIG1hc2EgcGFrYWkgYmF0ZXJhaSwgcGVuZ2hlbWF0IGJhdGVyYWkgbWVuZ3VyYW5naSBraW5lcmphIHBlcmFuZ2thdCBkYW4gbWVtYmF0YXNpIGdldGFyYW4sIGxheWFuYW4gbG9rYXNpLCBkYW4ga2ViYW55YWthbiBkYXRhIGxhdGFyIGJlbGFrYW5nLiBFbWFpbCwgcGVycGVzYW5hbiwgZGFuIGFwbGlrYXNpIGxhaW4geWFuZyBtZW5nYW5kYWxrYW4gc2lua3JvbmlzYXNpIG11bmdraW4gdGlkYWsgZGlwZXJiYXJ1aSBrZWN1YWxpIGppa2EgZGlidWthLlxuXG5QZW5naGVtYXQgYmF0ZXJhaSBvdG9tYXRpcyBub25ha3RpZiBqaWthIHBlcmFuZ2thdCBkaWlzaSBkYXlhbnlhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iRGlibG9raXI6IEphbmdhbiBwZXJuYWggbWVuYW1waWxrYW4gbm90aWZpa2FzaSBpbmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iUmVuZGFoOiBNZW5hbXBpbGthbiBkaSBiYWdpYW4gYmF3YWggZGFmdGFyIG5vdGlmaWthc2kgc2VjYXJhIGRpYW0tZGlhbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBNZW5hbXBpbGthbiBub3RpZmlrYXNpIGluaSBzZWNhcmEgZGlhbS1kaWFtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJUaW5nZ2k6IE1lbmFtcGlsa2FuIGRpIGJhZ2lhbiBhdGFzIGRhZnRhciBub3RpZmlrYXNpIGRhbiBtZW1idW55aWthbiBzdWFyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJEYXJ1cmF0OiBNdW5jdWwgZGkgbGF5YXIgZGFuIG1lbWJ1bnlpa2FuIHN1YXJhIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZWxhbWEgJTEkZCBtZW5pdCAoaGluZ2dhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNlbGFtYSBzYXR1IG1lbml0IChoaW5nZ2EgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBkaXBpbGloPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iTGFpbi1MYWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkFuZGEgbWVueWV0ZWwgdGluZ2thdCBrZXBlbnRpbmdhbiBub3RpZmlrYXNpIGluaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkluaSBwZW50aW5nIGthcmVuYSBvcmFuZy1vcmFuZyB5YW5nIHRlcmxpYmF0LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAppbmRleCBjMmI4YThjLi5lYmNkZTVkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkzDpnNhIG7Dum5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IklubmloYWxkIGZhbGnDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IsOWcnVnZyBzdGlsbGluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQga2VyZmnDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc8OzbnVsZWd0Ijwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJGZWx1ciDDrSBzw6lyIHBlcnPDs251bGVnIGfDtmduIMOhIGJvcsOwIHZpw7Aga3JlZGl0a29ydGFuw7ptZXIgb2cgYcOwZ2FuZ3NvcsOwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iU3RpbGxhIHNrasOhc3TDpnLDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJTdGrDs3JuYcOwdSBhw7BkcsOmdHRpIG9nIGFmc3TDtsOwdSBza2rDoXNpbnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iTm90YSBiZW5kaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkdldHVyIMO9dHQsIHN0cm9racOwLCBmw6ZydCBmaW5ndXIgc2FtYW4gb2cgZ2VydCDDvW1zYXIgYcOwcmFyIGJlbmRpbmdhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJzbMO2a2t2YSDDoSBlw7BhIGJyZXl0YSBzdMO2w7B1c3Rpa3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iTGV5ZmlyIGZvcnJpdGkgYcOwIHNsw7Zra3ZhIMOhIHN0w7bDsHVzdGlrdW5uaSBlw7BhIGLDpnRhIHZpw7Agb2cgZmphcmzDpmdqYSBrZXJmaXN0w6Frbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4idmVyYSBzdMO2w7B1c3Rpa2FuIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGV5ZmlyIGZvcnJpdGkgYcOwIHRha2EgbXluZGlyIG9nIG15bmRza2Vpw7AgbWXDsCBteW5kYXbDqWxpbm5pLiDDnmVzc2kgaGVpbWlsZCBsZXlmaXIgZm9ycml0aW51IGHDsCBub3RhIG15bmRhdsOpbGluYSBodmVuw6ZyIHNlbSBlciDDoW4gw75pbm5hciBoZWltaWxkYXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InN0asOzcm5hIHRpdHJpbmdpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJMZXlmaXIgZm9ycml0aSBhw7Agc3Rqw7NybmEgdGl0cmFyYW51bS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ic3Rqw7NybmEgdmFzYWxqw7NzaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTGV5ZmlyIGZvcnJpdGkgYcOwIHN0asOzcm5hIHZhc2FsasOzc2ludS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJocmluZ2phIGJlaW50IMOtIHPDrW1hbsO6bWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkxleWZpciBmb3JyaXRpIGHDsCBocmluZ2phIMOtIHPDrW1hbsO6bWVyIMOhbiDDrWhsdXR1bmFyIG5vdGFuZGEuIMOeZXR0YSBnZXR1ciBoYWZ0IMOtIGbDtnIgbWXDsCBzw6lyIMOzdW1iZcOwaW4gZ2rDtmxkIG9nIHPDrW10w7ZsLiBBdGh1Z2HDsHUgYcOwIMO+ZXR0YSBsZXlmaXIgZm9ycml0aW51IGVra2kgYcOwIGhyaW5namEgw60gbmV5w7Bhcm7Dum1lci4gU3BpbGxpZm9ycml0IGdldGEgc3RvZm5hw7AgdGlsIGtvc3RuYcOwYXIgZnlyaXIgw75pZyBtZcOwIMO+dsOtIGHDsCBocmluZ2phIHPDrW10w7ZsIMOhbiDDvmlubmFyIGhlaW1pbGRhci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImbDoSBhw7BnYW5nIGHDsCBJTVMtc8OtbXRhbHPDvmrDs251c3R1Ijwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLbGlwcGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkFmcml0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkzDrW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJMw61tYSBzZW0gw7NzbmnDsGlubiB0ZXh0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iU2tpcHRhIMO6dOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJFecOwYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQWZyaXRhIHZlZnNsw7PDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlZlbGphIHRleHRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJBZnR1cmthbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJFbmR1cmdlcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGV4dGF2YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQsOmdGEgdmnDsCBvcsOwYWLDs2siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkV5w7BhIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlNraXB0YSB1bSB2ZWdnZsOzw7B1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlRpbGt5bm5pbmdhaGx1c3R1biI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iU2tpbHlyw7BhdmVpdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJUaWxreW5uaW5nYWHDsHN0b8OwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gdmlya2phw7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gZXIgdmlya2phw7AgbWXDsCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJTbmVydHUgdGlsIGHDsCBoYWZhIHVtc2rDs24gbWXDsCBuZXRpbnUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlVwcGbDpnJ0IGFmIGtlcmZpc3N0asOzcmFudW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkV5dHQgYWYga2VyZmlzc3Rqw7NyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVGlsIGHDsCBhdWthIGVuZGluZ3UgcmFmaGzDtsOwdW5uYXIgbXVuIG9ya3VzcGFybmHDsHVyIGRyYWdhIMO6ciBhZmvDtnN0dW0gdMOma2lzaW5zIG9nIHRha21hcmthIHRpdHJpbmcsIHN0YcOwc2V0bmluZ2Fyw75qw7NudXN0dSBvZyBtZWduacOwIGFmIGJha2dydW5uc2fDtmdudW0uIEVra2kgZXIgdsOtc3QgYcOwIHTDtmx2dXDDs3N0dXIsIHNraWxhYm/DsCBvZyDDtm5udXIgZm9ycml0IHNlbSByZWnDsGEgc2lnIMOhIHNhbXN0aWxsaW5ndSB1cHBmw6ZyaXN0IG5lbWEgw77DuiBvcG5pciDDvmF1LlxuXG5TasOhbGZrcmFmYSBlciBzbMO2a2t0IMOhIG9ya3VzcGFybmHDsGkgw75lZ2FyIHTDpmtpw7AgZXIgw60gaGxlw7BzbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLDmnRpbG9rYcOwYXI6IEFsZHJlaSBzw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMw6l0dHbDpmdhcjogU8O9bmEgbmXDsHN0IMOhIHRpbGt5bm5pbmdhbGlzdGFudW0gw6FuIGhsasOzw7BzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJWZW5qdWxlZ2FyOiBTw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciDDoW4gaGxqw7PDsHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Ik1pa2lsdsOmZ2FyOiBTw71uYSBlZnN0IMOhIHRpbGt5bm5pbmdhbGlzdGFudW0gb2cgc3BpbGEgaGxqw7PDsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLDgXLDrcOwYW5kaTogQmlydGEgw6Egc2tqw6FudW0gb2cgc3BpbGEgaGxqw7PDsCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPsONICUxJGQgbcOtbsO6dHUgKHRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPsONICUxJGQgbcOtbsO6dHVyICh0aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IHZhbGluPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iw51taXNsZWd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IsOew7ogc3RpbGx0aXIgbWlraWx2w6ZnaSDDvmVzc2FyYSB0aWxreW5uaW5nYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IsOeZXR0YSBlciBtaWtpbHbDpmd0IHZlZ25hIGbDs2xrc2lucyBzZW0gdGVrdXIgw77DoXR0IMOtIMO+ZXNzdS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmluZGV4IGM0NjE0ZmMuLmQwNjQ2ODQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb2NjYSBvcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudXRpIG5hc2Nvc3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kYWxpdMOgIHByb3Z2aXNvcmlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbGUiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlNvbm8gaW5jbHVzaSBkYXRpIHBlcnNvbmFsaSBjb21lIG51bWVyaSBkaSBjYXJ0ZSBkaSBjcmVkaXRvIGUgcGFzc3dvcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sbGEgbFwnaW5ncmFuZGltZW50byBkZWwgZGlzcGxheSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sbGEgaWwgbGl2ZWxsbyBkaSB6b29tIGUgbGEgcG9zaXppb25lIGRlbCBkaXNwbGF5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IkVzZWd1aSBnZXN0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iQ29uc2VudGUgZGkgdG9jY2FyZSwgZmFyIHNjb3JyZXJlLCBwaXp6aWNhcmUgZWQgZXNlZ3VpcmUgYWx0cmkgZ2VzdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iZGlzYXR0aXZhcmUgbyBtb2RpZmljYXJlIGxhIGJhcnJhIGRpIHN0YXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGRpc2F0dGl2YXJlIGxhIGJhcnJhIGRpIHN0YXRvIG8gZGkgYWdnaXVuZ2VyZSBlIHJpbXVvdmVyZSBpY29uZSBkaSBzaXN0ZW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJydW9sbyBkaSBiYXJyYSBkaSBzdGF0byI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIHNjYXR0YXJlIGZvdG8gZSByaXByZW5kZXJlIHZpZGVvIGNvbiBsYSBmb3RvY2FtZXJhLiBRdWVzdGEgYXV0b3JpenphemlvbmUgY29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgdXRpbGl6emFyZSBsYSBmb3RvY2FtZXJhIGluIHF1YWxzaWFzaSBtb21lbnRvIHNlbnphIGxhIHR1YSBjb25mZXJtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGxvIHZpYnJhemlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGNvbnRyb2xsYXJlIGxhIHZpYnJhemlvbmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xsbyBmbGFzaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iQ29uc2VudGUgYWxsXCdhcHBsaWNhemlvbmUgZGkgY29udHJvbGxhcmUgaWwgZmxhc2guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4iY2hpYW1hdGEgZGlyZXR0YSBuLiB0ZWxlZm9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJDb25zZW50ZSBhbGxcJ2FwcGxpY2F6aW9uZSBkaSBjaGlhbWFyZSBudW1lcmkgZGkgdGVsZWZvbm8gc2VuemEgaWwgdHVvIGludGVydmVudG8uIENpw7IgcHXDsiBjb21wb3J0YXJlIGNoaWFtYXRlIG8gYWRkZWJpdGkgaW1wcmV2aXN0aS4gVGllbmkgcHJlc2VudGUgY2hlIGNpw7Igbm9uIGNvbnNlbnRlIGFsbFwnYXBwbGljYXppb25lIGRpIGNoaWFtYXJlIG51bWVyaSBkaSBlbWVyZ2VuemEuIEFwcGxpY2F6aW9uaSBkYW5ub3NlIHBvdHJlYmJlcm8gZ2VuZXJhcmUgZGVpIGNvc3RpIGVmZmV0dHVhbmRvIGNoaWFtYXRlIHNlbnphIGxhIHR1YSBjb25mZXJtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IkFjY2Vzc28gYWwgc2Vydml6aW8gZGkgY2hpYW1hdGEgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJUYWdsaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSW5jb2xsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iSW5jb2xsYSBjb21lIHRlc3RvIG5vcm1hbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlNvc3RpdHVpc2NpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkVsaW1pbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGV6aW9uYSB0ZXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW5udWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmlwZXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlNlbGV6aW9uZSB0ZXN0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZ2dpdW5naSBhbCBkaXppb25hcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFbGltaW5hIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkNhbWJpYSBzZm9uZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJMaXN0ZW5lciBkaSBub3RpZmljYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmlkZXIgY29uZGl6aW9uaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzc2lzdGVudGUgbm90aWZpY2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhdHRpdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gYXR0aXZhdGEgZGEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9jY2EgcGVyIGdlc3RpcmUgbGEgcmV0ZS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWdnaW9ybmF0byBkYWxsXCdhbW1pbmlzdHJhdG9yZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRWxpbWluYXRvIGRhbGxcJ2FtbWluaXN0cmF0b3JlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQZXIgYXVtZW50YXJlIGxhIGR1cmF0YSBkZWxsYSBiYXR0ZXJpYSwgbGEgZnVuemlvbmUgZGkgcmlzcGFybWlvIGVuZXJnZXRpY28gcmlkdWNlIGxlIHByZXN0YXppb25pIGRlbCBkaXNwb3NpdGl2byBlIGxpbWl0YSB2aWJyYXppb25lLCBzZXJ2aXppIGRpIGxvY2FsaXp6YXppb25lIGUgbGEgbWFnZ2lvciBwYXJ0ZSBkZWkgZGF0aSBpbiBiYWNrZ3JvdW5kLiBBcHAgZGkgZW1haWwsIG1lc3NhZ2dpIGUgYWx0cmUgYXBwIGNoZSBzaSBiYXNhbm8gc3VsbGEgc2luY3Jvbml6emF6aW9uZSBwb3RyZWJiZXJvIGVzc2VyZSBhZ2dpb3JuYXRlIHNvbHRhbnRvIGFsbFwnYXBlcnR1cmEuXG5cbkxhIGZ1bnppb25lIGRpIHJpc3Bhcm1pbyBlbmVyZ2V0aWNvIHZpZW5lIGRpc2F0dGl2YXRhIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gaWwgZGlzcG9zaXRpdm8gw6ggaW4gY2FyaWNhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvY2NhdG86IG5vbiBtb3N0cmFyZSBtYWkgcXVlc3RlIG5vdGlmaWNoZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJCYXNzYTogbW9zdHJhIHNpbGVuemlvc2FtZW50ZSBhbGxhIGZpbmUgZGVsbFwnZWxlbmNvIGRpIG5vdGlmaWNoZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsZTogbW9zdHJhIHNpbGVuemlvc2FtZW50ZSBxdWVzdGUgbm90aWZpY2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJBbHRhOiBtb3N0cmEgYWxsXCdpbml6aW8gZGVsbFwnZWxlbmNvIGRpIG5vdGlmaWNoZSBlIHJpcHJvZHVjaSBzdW9ubyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnRlOiBhcHJpIHN1bGxvIHNjaGVybW8gZSByaXByb2R1Y2kgc3Vvbm8iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBlciAlMSRkIG1pbnV0aSAoZmlubyBhbGxlIG9yZSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5QZXIgdW4gbWludXRvIChmaW5vIGFsbGUgb3JlIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE0NzcsOCArMTQ3Nyw4IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBlciAlZCBvcmU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5QZXIgMSBvcmE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgotICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfdW50aWwiIG1zZ2lkPSI3MzM2MzA4NDkyMjg5ODc1MDg4Ij4iRmlubyBhbGxlIG9yZSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9hbGFybSIgbXNnaWQ9IjkxMjgyMDU3MjEzMDEzMzA3OTciPiJGaW5vIGFsbGUgb3JlIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiAocHJvc3NpbWEgc3ZlZ2xpYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV91bnRpbCIgbXNnaWQ9IjczMzYzMDg0OTIyODk4NzUwODgiPiJGaW5vIGEgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfYWxhcm0iIG1zZ2lkPSI5MTI4MjA1NzIxMzAxMzMwNzk3Ij4iRmlubyBhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiAocHJvc3NpbWEgc3ZlZ2xpYSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9mb3JldmVyIiBtc2dpZD0iNzQyMDAxMTkzNjc3MDA4Njk5MyI+IkZpbm8gYWxsYSBkaXNhdHRpdmF6aW9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2ZvcmV2ZXJfZG5kIiBtc2dpZD0iMzc5MjEzMjY5NjU3MjE4OTA4MSI+IkZpbm8gYWxsYSBkaXNhdHRpdmF6aW9uZSBkaSBOb24gZGlzdHVyYmFyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX3J1bGVfbmFtZV9jb21iaW5hdGlvbiIgbXNnaWQ9IjE5MTEwOTkzOTk2ODA3NjQ3NyI+Ijx4bGlmZjpnIGlkPSJGSVJTVCI+JTEkczwveGxpZmY6Zz4vPHhsaWZmOmcgaWQ9IlJFU1QiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBlbGVtZW50byBzZWxlemlvbmF0bzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IlZhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iU3RhYmlsaXNjaSB0dSBsXCdpbXBvcnRhbnphIGRpIHF1ZXN0ZSBub3RpZmljaGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJJbXBvcnRhbnRlIGEgY2F1c2EgZGVsbGUgcGVyc29uZSBjb2ludm9sdGUuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCBmNjE1MTg3Li4zNzViZGYwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLXoNei15wg16LXm9ep15nXlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLXlNeq15XXm9efINee15XXodeq16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLXntem15Eg15HXmNeV15ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI/Xntei16jXm9eqIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IteQ15nXqdeZIjwvc3RyaW5nPgpAQCAtMjU3LDYgKzI1OCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLXm9eV15zXnCDXoNeq15XXoNeZ150g15DXmdep15nXmdedINeb157XlSDXnteh16TXqNeZINeb16jXmNeZ16Eg15DXqdeo15DXmSDXldeh15nXodee15DXldeqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i16nXnNeZ15jXlCDXkdeU15LXk9ec16og15TXqtem15XXkteUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+Iten15HXoiDXkNeqINeU157XqNeX16cg157XlNeq16bXldeS15Qg15XXkNeqINee15nXp9eV150g15TXqtem15XXkteULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IteR15nXpteV16Ig16rXoNeV16LXldeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLXmdeb15XXnCDXnNeU16fXmdepLCDXnNeU15fXnNeZ16csINec16LXqdeV16og16rXoNeV16LXqiDXpteR15nXmNeUINeV15zXkdem16Ig16rXoNeV16LXldeqINeQ15fXqNeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i15TXqdeR16og15DXlSDXqdeg15Qg15DXqiDXqdeV16jXqiDXlNee16bXkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXkdeZ16og15DXqiDXqdeV16jXqiDXlNee16bXkSDXkNeVINec15TXldeh15nXoyDXldec15TXodeZ16gg16HXntec15kg157Xoteo15vXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i15zXlNeZ15XXqiDXqdeV16jXqiDXlNeh15jXmNeV16EiPC9zdHJpbmc+CkBAIC0zNTUsOCArMzU4LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNem15zXnSDXqtee15XXoNeV16og15XXodeo15jXldeg15nXnSDXkdeQ157Xptei15XXqiDXlNee16bXnNee15QuINeQ15nXqdeV16gg15bXlCDXnteQ16TXqdeoINec15DXpNec15nXp9em15nXlCDXnNeU16nXqtee16kg15HXntem15zXnteUINeR15vXnCDXoteqINec15zXkCDXkNeZ16nXldeo15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Itep15zXmdeY15Qg15HXqNeY15giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXqNeY15guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Itep15zXmdeY15Qg15HXpNeg16EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Itee15DXpNep16gg15zXkNek15zXmden16bXmdeUINec16nXnNeV15gg15HXpNeg16EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i15TXqten16nXqCDXmdep15nXqNeV16og15zXnteh16TXqNeZINeY15zXpNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXqdeoINec157Xodek16jXmSDXmNec16TXldefINec15zXkCDXlNeq16LXqNeR15XXqteaLiDXpNei15XXnNeUINeW15Ug16LXqdeV15nXlCDXnNeS16jXldedINec16nXmdeX15XXqiDXkNeVINec15fXmdeV15HXmdedINec15Ag16bXpNeV15nXmdedLiDXqdeZ150g15zXkSDXqdeU15PXkdeoINec15Ag157XkNek16nXqCDXnNeQ16TXnNeZ16fXpteZ15Qg15zXlNeq16fXqdeoINec157Xodek16jXmSDXl9eZ16jXldedLiDXkNek15zXmden16bXmdeV16og15bXk9eV16DXmdeV16og16LXqdeV15nXldeqINec15LXqNeV150g15zXotec15XXmdeV16og16LXnCDXmdeT15kg15HXmdem15XXoiDXqdeZ15fXldeqINec15zXkCDXlNeq16LXqNeR15XXqteaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i4oCP15LXmdep15Qg15DXnCDXqdeZ16jXldeqINep15nXl9eV16ogSU1TIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLXl9eq15XXmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i15TXoteq16ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLXlNeT15HXpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i15TXk9eR16cg15vXmNen16HXmCDXpNep15XXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i15TXl9ec16MuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i157Xl9enIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLXlNei16rXpyDXm9eq15XXkdeqINeQ16rXqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IteR15fXqCDXmNen16HXmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i15HXmNecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLXkdem16Ig157Xl9eT16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i15HXl9eZ16jXqiDXmNen16HXmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLXlNeV16HXoyDXnNee15nXnNeV158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itee15fXpyI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLXqdeg15Qg15jXpNeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i157XkNeW15nXnyDXnNeU16rXqNeQ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i16HXpNenINeq16DXkNeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i15DXodeZ16HXmNeg15gg15TXlNeV15PXoteV16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IuKAj1ZQTiDXnteV16TXotecIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4oCPVlBOINee15XXpNei15wg16LXnCDXmdeT15kgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i15LXoiDXm9eT15kg15zXoNeU15wg15DXqiDXlNeo16nXqi4iPC9zdHJpbmc+CkBAIC0xNDU4LDExICsxNDYzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i16LXldeT15vXnyDXotecINeZ15PXmSDXnteg15TXnCDXlNee16LXqNeb16og16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLXoNee15fXp9eUINei15wg15nXk9eZINee16DXlNecINeU157Xoteo15vXqiDXqdec15oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+Iteb15PXmSDXnNei15bXldeoINeR16nXmdek15XXqCDXl9eZ15kg15TXodeV15zXnNeULCDXqteb15XXoNeqINeU15fXmdeh15vXldefINeR16HXldec15zXlCDXntem157Xptee16og15DXqiDXpNei15XXnNeV16og15TXnteb16nXmdeoINeV157XkteR15nXnNeUINeo15jXmCwg16nXmdeo15XXqteZINee15nXp9eV150g15XXkNeqINeo15XXkSDXoNeq15XXoNeZINeU16jXp9eiLiDXkNeZ157XmdeZ15wsINeU16LXkdeo16og15TXldeT16LXldeqINeV15DXpNec15nXp9em15nXldeqINeQ15fXqNeV16og15TXnteh16rXnteb15XXqiDXotecINeh16DXm9eo15XXnyDXotep15XXmdeV16og16nXnNeQINec15TXqtei15PXm9efLCDXkNec15Ag15DXnSDXqtek16rXlyDXkNeV16rXny5cblxu16rXm9eV16DXqiDXlNeX15nXodeb15XXnyDXkdeh15XXnNec15Qg157Xldep15HXqteqINeQ15XXmNeV157XmNeZ16og15vXqdeU157Xm9ep15nXqCDXkdeY16LXmdeg15QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLXl9eh15nXnteUOiDXnNei15XXnNedINeQ15wg16rXpteZ15Ig15TXldeT16LXldeqINeQ15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLXoNee15XXm9eUOiDXlNem15Ig15HXqteX16rXmdeqINeo16nXmdee16og15TXlNeV15PXoteV16og15HXnNeZINec15TXqdee15nXoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i16jXkteZ15zXlDog15TXpteSINeU15XXk9ei15XXqiDXkNec15Qg15HXnNeZINec15TXqdee15nXoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i15LXkdeV15TXlDog15TXpteSINeR16jXkNepINeo16nXmdee16og15TXlNeV15PXoteV16og15XXlNep157XoiDXptec15nXnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLXk9eX15XXpNeUOiDXlNem15Ig15zXqNeS16Ig16LXnCDXlNee16HXmiDXldeU16nXnteiINem15zXmdecIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9InR3byI+4oCP15zXntep15ogJWQg15PXp9eV16ogKNei15MgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im1hbnkiPuKAj9ec157XqdeaICUxJGQg15PXp9eV16ogKNei15MgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Niw0ICsxNTQ2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPteR15fXqNeqIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+Itep15XXoNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i15DXqteUINee15LXk9eZ16gg15DXqiDXlNeX16nXmdeR15XXqiDXqdecINeU15TXldeT16LXldeqINeU15DXnNeULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i15TXlNeV15PXoteUINeX16nXldeR15Qg15HXqdecINeU15DXoNep15nXnSDXlNee16LXldeo15HXmdedLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggNmRkNGU5YS4uYTMyYThlZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i5LuK44GZ44GQ44Ot44OD44KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiLvvIg8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPiDku7bvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i44Kz44Oz44OG44Oz44OE44GM6Z2e6KGo56S6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i44K744O844OV44Oi44O844OJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZOOCt+OCueODhuODoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i5YCL5Lq655SoIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLjgq/jg6zjgrjjg4Pjg4jjgqvjg7zjg4njga7nlarlj7fjgoTjg5Hjgrnjg6/jg7zjg4njgarjganjga7lgIvkurrjg4fjg7zjgr/jgYzlkKvjgb7jgozjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IueUu+mdouOBruaLoeWkp+OBruWItuW+oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLnlLvpnaLjga7jgrrjg7zjg6Djg6zjg5njg6vjgajkvY3nva7jgpLliLblvqHjgZfjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLmk43kvZzjga7lrp/ooYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IuOCv+ODg+ODl+OAgeOCueODr+OCpOODl+OAgeODlOODs+ODgeOAgeOBneOBruS7luOBruaTjeS9nOOCkuihjOOBiOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuOCueODhuODvOOCv+OCueODkOODvOOBrueEoeWKueWMluOChOWkieabtCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLjgrnjg4bjg7zjgr/jgrnjg5Djg7zjga7nhKHlirnljJbjgIHjgrfjgrnjg4bjg6DjgqLjgqTjgrPjg7Pjga7ov73liqDjgoTliYrpmaTjgpLjgqLjg5fjg6rjgavoqLHlj6/jgZfjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i44K544OG44O844K/44K544OQ44O844G444Gu6KGo56S6Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i44Kr44Oh44Op44Gn44Gu5YaZ55yf44Go5YuV55S744Gu5pKu5b2x44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CC44GT44KM44Gr44KI44KK44CB44Ki44OX44Oq44GM56K66KqN44Gq44GX44Gn44GE44Gk44Gn44KC44Kr44Oh44Op44KS5L2/55So44Gn44GN44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuODkOOCpOODluODrOODvOOCt+ODp+ODs+OBruWItuW+oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i44OQ44Kk44OW44Os44O844K344On44Oz44Gu5Yi25b6h44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuODqeOCpOODiOOBruOCs+ODs+ODiOODreODvOODqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i44Op44Kk44OI44Gu5Yi25b6h44KS44Ki44OX44Oq44Gr6Kix5Y+v44GX44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i6Zu76Kmx55Wq5Y+355m65L+hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Iumbu+ipseeVquWPt+OBuOOBruiHquWLleeZuuS/oeOCkuOCouODl+ODquOBq+ioseWPr+OBl+OBvuOBmeOAguOBk+OCjOOBq+OCiOOCiuOAgeS6iOacn+OBm+OBrOeZuuS/oeOChOaWmemHkeOBjOeZuueUn+OBmeOCi+WPr+iDveaAp+OBjOOBguOCiuOBvuOBmeOAguOBquOBiuOAgee3iuaApemAmuWgseeVquWPt+OBuOOBrueZuuS/oeOBr+ioseWPr+OBleOCjOOBvuOBm+OCk+OAguaCquaEj+OBruOBguOCi+OCouODl+ODquOBjOeiuuiqjeOBquOBl+OBp+eZuuS/oeOBl+OAgeaWmemHkeOBjOeZuueUn+OBmeOCi+aBkOOCjOOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1T6YCa6Kmx44K144O844OT44K544G444Gu44Ki44Kv44K744K5Ijwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLliIfjgorlj5bjgooiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuOCs+ODlOODvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuiyvOOCiuS7mOOBkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i5pu45byP44Gq44GX44OG44Kt44K544OI44Go44GX44Gm6LK844KK5LuY44GRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLnva7mj5suLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i5YmK6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkzjgpLjgrPjg5Tjg7wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLjg4bjgq3jgrnjg4jjgpLpgbjmip4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuWFg+OBq+aIu+OBmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i44KE44KK55u044GXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuODhuOCreOCueODiOmBuOaKniI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLovp7mm7jjgavov73liqAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuWJiumZpCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLlo4HntJnjgpLlpInmm7QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLpgJrnn6Xjg6rjgrnjg4rjg7wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuOCs+ODs+ODh+OCo+OCt+ODp+ODs+ODl+ODreODkOOCpOODgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IumAmuefpeOCouOCt+OCueOCv+ODs+ODiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBO44GM5pyJ5Yq544Gr44Gq44KK44G+44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBO44GMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44Gr44KI44KK5pyJ5Yq55YyW44GV44KM44G+44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i44K/44OD44OX44GX44Gm44ON44OD44OI44Ov44O844Kv44KS566h55CG44GX44G+44GZ44CCIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IueuoeeQhuiAheOBq+OCiOOBo+OBpuabtOaWsOOBleOCjOOBpuOBhOOBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i566h55CG6ICF44Gr44KI44Gj44Gm5YmK6Zmk44GV44KM44G+44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLjg5Djg4Pjg4bjg6rjg7zjgpLplbfmjIHjgaHjgZXjgZvjgovjgZ/jgoHjgIHjg5Djg4Pjg4bjg6rjg7zjgrvjg7zjg5Djg7zjga/nq6/mnKvjga7jg5Hjg5Xjgqnjg7zjg57jg7PjgrnjgpLmipHjgYjjgIHjg5DjgqTjg5bjg6zjg7zjgrfjg6fjg7PjgIHkvY3nva7mg4XloLHjgrXjg7zjg5PjgrnjgIHlpKfljYrjga7jg5Djg4Pjgq/jgrDjg6njgqbjg7Pjg4njg4fjg7zjgr/jgpLliLbpmZDjgZfjgb7jgZnjgILjg6Hjg7zjg6vjgIFTTVPjgoTjgIHlkIzmnJ/jgpLkvb/nlKjjgZnjgovjgZ3jga7ku5bjga7jgqLjg5fjg6rjga/jgIHotbfli5XjgZfjgabjgoLmm7TmlrDjgZXjgozjgarjgYTjgZPjgajjgYzjgYLjgorjgb7jgZnjgIJcblxu44OQ44OD44OG44Oq44O844K744O844OQ44O844Gv56uv5pyr44Gu5YWF6Zu75Lit44Gv6Ieq5YuV55qE44GrT0ZG44Gr44Gq44KK44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLjg5bjg63jg4Pjgq86IOS7iuW+jOOBr+OBk+OBrumAmuefpeOCkuihqOekuuOBl+OBquOBhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLkvY46IOmAmuefpeODquOCueODiOOBruS4i+OBq+ODnuODiuODvOODouODvOODieOBp+ihqOekuuOBmeOCiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i5qiZ5rqWOiDjgZPjga7pgJrnn6XjgpLjg57jg4rjg7zjg6Ljg7zjg4njgafooajnpLrjgZnjgosiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IumrmDog6YCa55+l44Oq44K544OI44Gu5LiK44Gr6KGo56S644GX44CB6Z+z5aOw44Gn44KC55+l44KJ44Gb44KLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Iue3iuaApTog55S76Z2i44Gr44OX44Os44OT44Ol44O844KS6KGo56S644GX44CB6Z+z5aOw44Gn44KC55+l44KJ44Gb44KLIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRk5YiG6ZaT77yIPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz7jgb7jgafvvIk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4x5YiG6ZaT77yIPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz7jgb7jgafvvIk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+5Lu26YG45oqe5riI44G/PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i44Gd44Gu5LuWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuOBk+OBruOCiOOBhuOBqumAmuefpeOBrumHjeimgeW6puOCkuioreWumuOBl+OBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i6Zai5L+C44GZ44KL44Om44O844K244O844Gu44Gf44KB44CB44GT44Gu6Kit5a6a44Gv6YeN6KaB44Gn44GZ44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IDY3MDlkOTIuLmYyZmM5NTMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4YOQ4YOu4YOa4YOQIOGDqeGDkOGDmeGDlOGDouGDleGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhg6jhg5jhg5Lhg5fhg5Dhg5Xhg6Hhg5gg4YOT4YOQ4YOb4YOQ4YOa4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4YOj4YOh4YOQ4YOk4YOg4YOX4YOu4YOdIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQt4YOY4YOhIOGDoeGDmOGDoeGDouGDlOGDm+GDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4YOe4YOY4YOg4YOQ4YOT4YOYIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLhg6jhg5Thg5jhg6rhg5Dhg5Xhg6Eg4YOY4YOh4YOU4YOXIOGDnuGDmOGDoOGDkOGDkyDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg6EsIOGDoOGDneGDkuGDneGDoOGDmOGDquGDkOGDkCDhg6Hhg5Dhg5nhg6Dhg5Thg5Phg5jhg6Lhg50g4YOR4YOQ4YOg4YOQ4YOX4YOY4YOhIOGDnOGDneGDm+GDoOGDlOGDkeGDmCDhg5Phg5Ag4YOe4YOQ4YOg4YOd4YOa4YOU4YOR4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i4YOU4YOg4YOQ4YOc4YOY4YOhIOGDkuGDkOGDk+GDmOGDk+GDlOGDkeGDmOGDoSDhg5vhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDm+GDkOGDoeGDqOGDouGDkOGDkeGDmOGDoOGDlOGDkeGDmOGDoSDhg5Phg53hg5zhg5jhg6Hhg5Ag4YOT4YOQIOGDnuGDneGDluGDmOGDquGDmOGDmOGDoSDhg5vhg5Dhg6Dhg5fhg5Xhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i4YOf4YOU4YOh4YOi4YOU4YOR4YOY4YOhIOGDqOGDlOGDoeGDoOGDo+GDmuGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4YOo4YOU4YOj4YOr4YOa4YOY4YOQIOGDqOGDlOGDruGDlOGDkeGDkCwg4YOS4YOQ4YOT4YOQ4YOk4YOj4YOg4YOq4YOV4YOa4YOQLCDhg5vhg5Dhg6Hhg6jhg6Lhg5Dhg5Hhg5jhg6Dhg5Thg5Hhg5Ag4YOT4YOQIOGDoeGDruGDleGDkCDhg5/hg5Thg6Hhg6Lhg5Thg5Hhg5jhg6Eg4YOo4YOU4YOh4YOg4YOj4YOa4YOU4YOR4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuGDoeGDouGDkOGDouGDo+GDoeGDmOGDoSDhg5bhg53hg5rhg5jhg6Eg4YOS4YOQ4YOX4YOY4YOo4YOV4YOQIOGDkOGDnCDhg6rhg5Xhg5rhg5jhg5rhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4YOQ4YOe4YOhIOGDqOGDlOGDlOGDq+GDmuGDlOGDkeGDkCDhg6Hhg6Lhg5Dhg6Lhg6Phg6Hhg5Thg5Hhg5jhg6Eg4YOW4YOd4YOa4YOY4YOhIOGDkuGDkOGDl+GDmOGDqOGDleGDkCDhg5Phg5Ag4YOh4YOY4YOh4YOi4YOU4YOb4YOY4YOhIOGDruGDkOGDouGDo+GDmuGDlOGDkeGDmOGDoSDhg5Phg5Dhg5vhg5Dhg6Lhg5Thg5Hhg5Av4YOs4YOQ4YOo4YOa4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLhg6Hhg6Lhg5Dhg6Lhg6Phg6Hhg5jhg6Eg4YOW4YOd4YOa4YOY4YOhIOGDqeGDkOGDnOGDkOGDquGDleGDmuGDlOGDkeGDkCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGDkOGDnuGDoSDhg6jhg5Thg5Thg6vhg5rhg5Thg5Hhg5Ag4YOZ4YOQ4YOb4YOU4YOg4YOY4YOXIOGDoeGDo+GDoOGDkOGDl+GDmOGDoeGDkCDhg5Phg5Ag4YOV4YOY4YOT4YOU4YOd4YOhIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDkC4g4YOU4YOhIOGDnOGDlOGDkeGDkOGDoOGDl+GDleGDkCDhg5Dhg57hg6Eg4YOj4YOk4YOa4YOU4YOR4YOQ4YOhIOGDkOGDq+GDmuGDlOGDleGDoSwg4YOc4YOU4YOR4YOY4YOh4YOb4YOY4YOU4YOgIOGDk+GDoOGDneGDoSDhg5Lhg5Dhg5vhg53hg5jhg6fhg5Thg5zhg53hg6Eg4YOZ4YOQ4YOb4YOU4YOg4YOQIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhg5Xhg5jhg5Hhg6Dhg5Dhg6rhg5jhg5jhg6Eg4YOZ4YOd4YOc4YOi4YOg4YOd4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5vhg5Dhg6Dhg5fhg53hg6Eg4YOV4YOY4YOR4YOg4YOY4YOg4YOU4YOR4YOQLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLhg6Thg5Dhg5zhg6Dhg5jhg6Eg4YOb4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQLCDhg5vhg5Dhg6Dhg5fhg53hg6Eg4YOS4YOQ4YOc4YOQ4YOX4YOU4YOR4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGDnuGDmOGDoOGDk+GDkOGDnuGDmOGDoOGDmCDhg5Phg5Dhg6Dhg5Thg5nhg5Xhg5Ag4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOY4YOhIOGDnOGDneGDm+GDoOGDlOGDkeGDluGDlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhg5Dhg57hg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDk+GDkOGDoOGDlOGDmeGDneGDoSDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOc4YOd4YOb4YOg4YOU4YOR4YOW4YOUIOGDl+GDpeGDleGDlOGDnOGDmCDhg6nhg5Dhg6Dhg5Thg5Xhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOULiDhg5Dhg5vhg5Dhg5wg4YOo4YOU4YOh4YOQ4YOr4YOa4YOd4YOQIOGDkuGDkOGDm+GDneGDmOGDrOGDleGDmOGDneGDoSDhg5fhg6Xhg5Xhg5Thg5zhg6Eg4YOh4YOQ4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOYIOGDpeGDleGDmOGDl+GDkOGDoOGDluGDlCDhg5vhg53hg6Phg5rhg53hg5Phg5zhg5Thg5rhg5gg4YOu4YOQ4YOg4YOv4YOU4YOR4YOY4YOh4YOQIOGDk+GDkCDhg5bhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOp4YOU4YOc4YOQLiDhg5Lhg5Dhg5jhg5fhg5Xhg5Dhg5rhg5jhg6Hhg6zhg5jhg5zhg5Thg5csIOGDoOGDneGDmyDhg5Dhg57hg6Eg4YOS4YOQ4YOT4YOQ4YOj4YOT4YOU4YOR4YOU4YOa4YOYIOGDk+GDkOGDruGDm+GDkOGDoOGDlOGDkeGDmOGDoSDhg5zhg53hg5vhg6Dhg5Thg5Hhg5bhg5Qg4YOT4YOQ4YOg4YOU4YOZ4YOV4YOQIOGDkOGDoCDhg6jhg5Thg6Phg6vhg5rhg5jhg5AuIOGDm+GDkOGDleGDnOGDlCDhg5Dhg57hg5Thg5Hhg6Eg4YOo4YOU4YOU4YOr4YOa4YOU4YOR4YOQIOGDl+GDpeGDleGDlOGDnOGDmCDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5jhg6Eg4YOS4YOQ4YOg4YOU4YOo4YOUIOGDluGDkOGDoOGDlOGDkeGDmOGDoSDhg5Lhg5Dhg5zhg67hg53hg6Dhg6rhg5jhg5Thg5rhg5Thg5Hhg5Ag4YOT4YOQIOGDqOGDlOGDoeGDkOGDkeGDkOGDm+GDmOGDoeGDmCDhg6Hhg5Dhg6Thg5Dhg6Hhg6Phg6Dhg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOu4YOT4YOQ4YOqIOGDm+GDneGDkuGDmOGDrOGDlOGDleGDly4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDhg5bhg5Dhg6Dhg5Thg5Hhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOW4YOUIOGDrOGDleGDk+GDneGDm+GDkCI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4YOQ4YOb4YOd4YOt4YOg4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLhg5nhg53hg57hg5jhg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLhg6nhg5Dhg6Hhg5vhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuGDqeGDleGDlOGDo+GDmuGDlOGDkeGDoOGDmOGDlSDhg6Lhg5Thg6Xhg6Hhg6Lhg5Dhg5Mg4YOp4YOQ4YOh4YOb4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLhg6nhg5Dhg5zhg5Dhg6rhg5Xhg5rhg5Thg5Hhg5DigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4YOs4YOQ4YOo4YOa4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4YOZ4YOd4YOe4YOY4YOg4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4YOi4YOU4YOl4YOh4YOi4YOY4YOhIOGDm+GDneGDnOGDmOGDqOGDleGDnOGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4YOT4YOQ4YOR4YOg4YOj4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLhg5Lhg5Dhg5vhg5Thg53hg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4YOi4YOU4YOl4YOh4YOi4YOY4YOhIOGDm+GDneGDnOGDmOGDqOGDleGDnOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLhg5rhg5Thg6Xhg6Hhg5jhg5nhg53hg5zhg6jhg5gg4YOT4YOQ4YOb4YOQ4YOi4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLhg6zhg5Dhg6jhg5rhg5AiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4YOk4YOd4YOc4YOY4YOhIOGDqOGDlOGDquGDleGDmuGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg5vhg6Hhg5vhg5Thg5zhg5Thg5rhg5giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuGDm+GDk+GDkuGDneGDm+GDkOGDoOGDlOGDneGDkeGDmOGDoSDhg57hg6Dhg53hg5Xhg5Dhg5jhg5Phg5Thg6Dhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Dhg5fhg5Ag4YOQ4YOh4YOY4YOh4YOi4YOU4YOc4YOi4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4YOS4YOQ4YOQ4YOl4YOi4YOY4YOj4YOg4YOU4YOR4YOj4YOa4YOY4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDlOGDkeGDo+GDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4t4YOY4YOhIOGDm+GDmOGDlOGDoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg6Xhg6Hhg5Thg5rhg5jhg6Eg4YOh4YOQ4YOb4YOQ4YOg4YOX4YOQ4YOV4YOQ4YOTLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLhg5Lhg5Dhg5zhg5Dhg67hg5rhg5Thg5Hhg6Phg5rhg5jhg5Ag4YOX4YOl4YOV4YOU4YOc4YOYIOGDkOGDk+GDm+GDmOGDnOGDmOGDoeGDouGDoOGDkOGDouGDneGDoOGDmOGDoSDhg5vhg5jhg5Thg6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuGDl+GDpeGDleGDlOGDnOGDmCDhg5Dhg5Phg5vhg5jhg5zhg5jhg6Hhg6Lhg6Dhg5Dhg6Lhg53hg6Dhg5jhg6Eg4YOb4YOY4YOU4YOgIOGDrOGDkOGDqOGDmuGDmOGDmuGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOY4YOhIOGDm+GDneGDpeGDm+GDlOGDk+GDlOGDkeGDmOGDoSDhg5Xhg5Dhg5Phg5jhg6Eg4YOS4YOQ4YOj4YOb4YOv4YOd4YOR4YOU4YOh4YOU4YOR4YOY4YOh4YOQ4YOX4YOV4YOY4YOhLCDhg5Thg5rhg5Thg5vhg5Thg5zhg6Lhg5jhg6Eg4YOT4YOQ4YOb4YOW4YOd4YOS4YOYIOGDkOGDm+GDquGDmOGDoOGDlOGDkeGDoSDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOY4YOhIOGDqOGDlOGDoeGDoOGDo+GDmuGDlOGDkeGDkOGDoSDhg5Phg5Ag4YOW4YOm4YOj4YOT4YOQ4YOV4YOhIOGDleGDmOGDkeGDoOGDkOGDquGDmOGDkOGDoSwg4YOQ4YOT4YOS4YOY4YOa4YOb4YOT4YOU4YOR4YOQ4YOg4YOU4YOd4YOR4YOY4YOhIOGDm+GDneGDm+GDoeGDkOGDruGDo+GDoOGDlOGDkeGDlOGDkeGDoSDhg5Phg5Ag4YOr4YOY4YOg4YOY4YOX4YOQ4YOTIOGDpOGDneGDnOGDo+GDoCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg6EuIOGDlOGDmi3hg6Thg53hg6Hhg6Lhg5AsIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg5Phg5Ag4YOh4YOu4YOV4YOQIOGDoeGDmOGDnOGDpeGDoOGDneGDnOGDmOGDluGDkOGDquGDmOGDkOGDluGDlCDhg5Phg5Dhg6fhg6Dhg5Phg5zhg53hg5Hhg5jhg5rhg5gg4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOU4YOR4YOY4YOhIOGDkuGDkOGDnOGDkOGDruGDmuGDlOGDkeGDkCDhg5Dhg6Ag4YOb4YOd4YOu4YOT4YOU4YOR4YOQIOGDm+GDkOGDlyDhg5Lhg5Dhg67hg6Hhg5zhg5Thg5Dhg5vhg5Phg5QuIFxuXG4g4YOU4YOa4YOU4YOb4YOU4YOc4YOi4YOY4YOhIOGDk+GDkOGDm+GDluGDneGDkuGDleGDlOGDmuGDmCDhg5Dhg5Xhg6Lhg53hg5vhg5Dhg6Lhg6Phg6Dhg5Dhg5Mg4YOS4YOQ4YOb4YOd4YOY4YOg4YOX4YOV4YOU4YOR4YOQLCDhg6Dhg53hg5Phg5Thg6Hhg5Dhg6og4YOX4YOl4YOV4YOU4YOc4YOhIOGDm+GDneGDrOGDp+GDneGDkeGDmOGDmuGDneGDkeGDkOGDoSDhg5Phg5Dhg5vhg6Lhg5Thg5zhg5fhg5Dhg5wg4YOo4YOU4YOQ4YOU4YOg4YOX4YOU4YOR4YOXLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4YOT4YOQ4YOR4YOa4YOd4YOZ4YOY4YOa4YOYOiDhg5Thg6Eg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIOGDkOGDpuGDkOGDoOGDkOGDoeGDneGDk+GDlOGDoSDhg5Lhg5Dhg5vhg53hg6nhg5zhg5Phg5Thg5Hhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4YOT4YOQ4YOR4YOQ4YOa4YOYOiDhg5Thg6Eg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIOGDoeGDmOGDmOGDoSDhg5Hhg53hg5rhg53hg6jhg5gsIOGDo+GDruGDm+GDneGDkyDhg5Lhg5Dhg5vhg53hg6nhg5zhg5Phg5Thg5Hhg5AiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuGDnOGDneGDoOGDm+GDkOGDmuGDo+GDoOGDmDog4YOU4YOhIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmCDhg6Phg67hg5vhg53hg5Mg4YOS4YOQ4YOb4YOd4YOp4YOc4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLhg5vhg5Dhg6bhg5Dhg5rhg5g6IOGDlOGDoSDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5gg4YOh4YOY4YOY4YOhIOGDl+GDkOGDleGDqOGDmCwg4YOu4YOb4YOd4YOV4YOQ4YOcIOGDoeGDmOGDkuGDnOGDkOGDmuGDl+GDkOGDnCDhg5Thg6Dhg5fhg5Dhg5Mg4YOS4YOQ4YOb4YOd4YOp4YOc4YOT4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuGDkuGDkOGDk+GDkOGDo+GDk+GDlOGDkeGDlOGDmuGDmDog4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOYIOGDnuGDmOGDoOGDk+GDkOGDnuGDmOGDoCDhg5Thg5nhg6Dhg5Dhg5zhg5bhg5QsIOGDruGDm+GDneGDleGDkOGDnCDhg6Hhg5jhg5Lhg5zhg5Dhg5rhg5fhg5Dhg5wg4YOU4YOg4YOX4YOQ4YOTIOGDkuGDkOGDm+GDneGDqeGDnOGDk+GDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDhg6zhg6Phg5fhg5jhg6Eg4YOS4YOQ4YOc4YOb4YOQ4YOV4YOa4YOd4YOR4YOQ4YOo4YOYICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPi3hg5vhg5Phg5QpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4YOU4YOg4YOX4YOYIOGDrOGDo+GDl+GDmOGDoSDhg5Lhg5Dhg5zhg5vhg5Dhg5Xhg5rhg53hg5Hhg5Dhg6jhg5ggKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+LeGDm+GDk+GDlCk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IOGDqOGDlOGDoOGDqeGDlOGDo+GDmuGDmDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuGDoeGDruGDleGDkOGDk+GDkOGDoeGDruGDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLhg5Dhg5sg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDm+GDnOGDmOGDqOGDleGDnOGDlOGDmuGDneGDkeGDmOGDoSDhg5Phg53hg5zhg5Qg4YOS4YOQ4YOc4YOY4YOh4YOQ4YOW4YOm4YOV4YOg4YOU4YOR4YOQIOGDl+GDpeGDleGDlOGDnCDhg5vhg5jhg5Thg6AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLhg5vhg5zhg5jhg6jhg5Xhg5zhg5Thg5rhg53hg5Xhg5Dhg5zhg5jhg5Ag4YOp4YOQ4YOg4YOX4YOj4YOa4YOYIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDlOGDkeGDmOGDoSDhg5Lhg5Dhg5vhg50uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IDhkMTIwMzQuLmFiODJmZDQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i0prQsNC30ZbRgCDQsdC10LrRltGC0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JzQsNC30LzSsdC9INC20LDRgdGL0YDRi9C70pPQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0prQsNGD0ZbQv9GB0ZbQtyDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDQttKv0LnQtdGB0ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItCW0LXQutC1Ijwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLQmtGA0LXQtNC40YIg0LrQsNGA0YLQsCDQvdOp0LzRltGA0ZYg0LbTmdC90LUg0LrRltC70YLRgdOp0LfQtNC10YAg0YHQuNGP0pvRgtGLINC20LXQutC1INC00LXRgNC10LrRgtC10YDQtNGWINKb0L7RgdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i0JTQuNGB0L/Qu9C10Lkg0rHQu9KT0LDQudGC0YPQtNGLINCx0LDRgdKb0LDRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItCU0LjRgdC/0LvQtdC50LTRltKjINC80LDRgdGI0YLQsNCx0YLQsNGDINC00LXSo9Cz0LXQudGW0L0g0LbTmdC90LUg0L7RgNC90LDQu9Cw0YHRgtGL0YDRg9C00Ysg0LHQsNGB0pvQsNGA0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i0prQuNC80YvQu9C00LDRgNC00Ysg0L7RgNGL0L3QtNCw0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+ItCi0q/RgNGC0YPQs9C1LCDQttCw0L3QsNGD0pPQsCwg0pvRi9GB0YPSk9CwINC205nQvdC1INCx0LDRgdKb0LAg0pvQuNC80YvQu9C00LDRgNC00Ysg0L7RgNGL0L3QtNCw0YPSk9CwINCx0L7Qu9Cw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLQutKv0LnRltC9INC606nRgNGB0LXRgtGDINGC0LDSm9GC0LDRgdGL0L0g06nRiNGW0YDRgyDQvdC10LzQtdGB0LUg06nQt9Cz0LXRgNGC0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i0prQvtC70LTQsNC90LHQsNKT0LAg0LrSr9C5INC20L7Qu9Cw0pPRi9C9INOp0YjRltGA0YPQs9C1INC90LXQvNC10YHQtSDQttKv0LnQtdC70ZbQuiDQsdC10LvQs9GW0YjQtdC70LXRgNC00ZYg0pvQvtGB0YPSk9CwINC205nQvdC1INC20L7RjtKT0LAg0YDSsdKb0YHQsNGCINCx0LXRgNC10LTRli4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i0LrSr9C5INC20L7Qu9Cw0pPRiyDQsdC+0LvRgyI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINC60LDQvNC10YDQsNC90Ysg0pvQvtC70LTQsNC90YvQvywg0YTQvtGC0L7RgdGD0YDQtdGCINC90LXQvNC10YHQtSDQsdC10LnQvdC1INC20LDQt9GDINC80q/QvNC60ZbQvdC00ZbQs9GW0L0g0LHQtdGA0LXQtNGWLiDQkdKx0Lsg0YDSsdKb0YHQsNGCINC60LDQvNC10YDQsNC90Ysg0LrQtdC3INC60LXQu9Cz0LXQvSDRg9Cw0pvRi9GC0YLQsCDRgdGW0LfQtNGW0qMg0pvSsdC/0YLQsNGD0YvSo9GL0LfQtNGLINKb0LDQttC10YIg0LXRgtC/0LXQuSDSm9C+0LvQtNCw0L3RgyDQvNKv0LzQutGW0L3QtNGW0LPRltC9INCx0LXRgNC10LTRli4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0YLQtdGA0LHQtdC70ZbRgdGC0ZYg0LHQsNGB0pvQsNGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINCy0LjQsdGA0LDRgtC+0YDQtNGLINCx0LDRgdKb0LDRgNGD0pPQsCDRgNKx0pvRgdCw0YIg0LHQtdGA0LXQtNGWLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLRgdC40LPQvdCw0LvQtNGL0psg0YjQsNC80LTRiyDQsdCw0YHSm9Cw0YDRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0prQvtC70LTQsNC90LHQsNKT0LAg0pvQsNC70YLQsCDRiNCw0LzRi9C9INCx0LDRgdKb0LDRgNGD0pPQsCDRgNKx0pvRgdCw0YIg0LHQtdGA0LXQtNGWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItC906nQvNGW0YDQu9C10YDQs9C1INGC0ZbQutC10LvQtdC5INGC0LXQu9C10YTQvtC9INGI0LDQu9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItKa0L7Qu9C00LDQvdCx0LDSk9CwINGB0ZbQt9C00ZbSoyDSm9Cw0YLRi9GB0YPRi9Kj0YvQt9GB0YvQtyDSm9C+0qPRi9GA0LDRgyDRiNCw0LvRgyDQvNKv0LzQutGW0L3QtNGW0LPRltC9INCx0LXRgNC10LTRli4g0J3TmdGC0LjQttC10YHRltC90LTQtSDSm9C+0YHRi9C80YjQsCDRgtOp0LvQtdC8INC90LXQvNC10YHQtSDQutKv0YLQv9C10LPQtdC9INKb0L7So9GL0YDQsNGDINCw0LvRg9GL0qPRi9C3INC80q/QvNC60ZbQvS4g0JXRgdGW0qPRltC30LTQtSDQsdC+0LvRgdGL0L0sINKb0L7Qu9C00LDQvdCx0LAg0YLTqdGC0LXQvdGI0LUg0LHQsNC50LvQsNC90YvRgdGC0LDRgNKT0LAg0pvQvtKj0YvRgNCw0YMg0YjQsNC70LAg0LDQu9C80LDQudC00YsuINCX0LDQu9Cw0LvQtNGLINKb0L7Qu9C00LDQvdCx0LDQu9Cw0YAg0YHRltC30LTRltKjINGA0rHSm9GB0LDRgtGL0qPRi9C30YHRi9C3INKb0L7So9GL0YDQsNGD0LvQsNGAINGI0LDQu9GL0L8sINC60q/RgtC/0LXQs9C10L0g0YLTqdC70LXQvNC00LXRgNCz0LUg0YHQtdCx0LXQvyDQsdC+0LvRg9GLINC80q/QvNC60ZbQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDSm9C+0qPRi9GA0LDRgyDSm9GL0LfQvNC10YLRltC9INC/0LDQudC00LDQu9Cw0L3RgyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0prQuNGL0L8g0LDQu9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtOp0YjRltGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLSmtC+0Y4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItCa05nQtNGW0LzQs9GWINC805nRgtGW0L0g0YDQtdGC0ZbQvdC00LUg0pvQvtGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLigKYg0YHTqdC30ZbQvSDQsNC70LzQsNGB0YLRi9GA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0JbQvtGOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg0LzQtdC60LXQvdC20LDQudGL0L0g0LrTqdGI0ZbRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0JzTmdGC0ZbQvdC00ZYg0LHTqdC70LXQutGC0LXRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i0JrQtdGA0ZYg0pvQsNC50YLQsNGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItKa0LDQudGC0LDRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCc05nRgtGW0L0g0YLQsNKj0LTQsNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCh06nQt9C00ZbQutC60LUg0pvQvtGB0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCW0L7RjiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQkNGA0YLSm9GLINGE0L7QvdGL0L0g06nQt9Cz0LXRgNGC0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQpdCw0LHQsNGAINCx0LDSm9GL0LvQsNKT0YvRiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0KjQsNGA0YIg0L/RgNC+0LLQsNC50LTQtdGA0ZYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLQpdCw0LHQsNGA0LvQsNC90LTRi9GA0YMg0LrTqdC80LXQutGI0ZbRgdGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g0LHQtdC70YHQtdC90LTRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+ItCS0JbQrSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LDRgNKb0YvQu9GLINKb0L7RgdGL0LvSk9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQltC10LvRltC90ZYg0LHQsNGB0pvQsNGA0YMg0q/RiNGW0L0g0YLSr9GA0YLRgy4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i05jQutGW0LzRiNGWINC20LDSo9Cw0YDRgtGC0YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+ItOY0LrRltC80YjRliDQttC+0LnSk9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItCR0LDRgtCw0YDQtdGP0L3Ri9KjINKb0YvQt9C80LXRgiDQutOp0YDRgdC10YLRgyDQvNC10YDQt9GW0LzRltC9INC20LDSm9GB0LDRgNGC0YMg0q/RiNGW0L0g0LHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGIINKb0rHRgNGL0LvSk9GL0L3Ri9KjINOp0L3RltC80LTRltC70ZbQs9GW0L0g0YLTqdC80LXQvdC00LXRgtC10LTRliDQttOZ0L3QtSDQtNGW0YDRltC70LTRliwg0L7RgNGL0L3QtNGLINCw0L3Ri9Kb0YLQsNGDINKb0YvQt9C80LXRgtGC0LXRgNGW0L0g0LbTmdC90LUg0YTQvtC90LTRi9KbINC00LXRgNC10LrRgtC10YDQtNGW0qMg0LrTqdC/0YjRltC70ZbQs9GW0L0g0YjQtdC60YLQtdC50LTRli4g0K3Qu9C10LrRgtGA0L7QvdC00YvSmyDQv9C+0YjRgtCwLCDRhdCw0LHQsNGAINCw0LvQvNCw0YHRgyDQttOZ0L3QtSDRgdC40L3RhdGA0L7QvdC00LDRg9KT0LAg0L3QtdCz0ZbQt9C00LXQu9Cz0LXQvSDQsdCw0YHSm9CwINKb0L7Qu9C00LDQvdCx0LDQu9Cw0YAg0LDRiNKb0LDQvdGI0LAg0LbQsNKj0LDRgNGC0YvQu9C80LDRg9GLINC80q/QvNC60ZbQvS5cblxu0JHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGIINKb0rHRgNGL0LvSk9GLINC30LDRgNGP0LTRgtCw0LvRi9C/INC20LDRgtKb0LDQvdC00LAg0LDQstGC0L7QvNCw0YLRgtGLINGC0q/RgNC00LUg06nRiNC10LTRli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItCR0rHSk9Cw0YLRgtCw0LvSk9Cw0L06INC+0YHRiyDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPQu9Cw0YDQtNGLINC10YjSm9Cw0YjQsNC9INC606nRgNGB0LXRgtC/0LXRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQotOp0LzQtdC9OiDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPQu9Cw0YAg0YLRltC30ZbQvNC90ZbSoyDRgtOp0LzQtdC90LPRliDQttCw0pPRi9C90LTQsCDSr9C90YHRltC3INC606nRgNGB0LXRgtGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLSmtCw0LvRi9C/0YLRizog0L7RgdGLINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00Ysg0q/QvdGB0ZbQtyDQutOp0YDRgdC10YLRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JbQvtKT0LDRgNGLOiDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPQu9Cw0YAg0YLRltC30ZbQvNGW0L3RltKjINC20L7Sk9Cw0YDSk9GLINC20LDSk9GL0L3QtNCwINC606nRgNGB0LXRgtGDINC205nQvdC1INC00YvQsdGL0YEg0YjRi9KT0LDRgNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCo0rHSk9GL0Ls6INGN0LrRgNCw0L3Sk9CwINCx0LXQutGW0YLRgyDQttOZ0L3QtSDQtNGL0LHRi9GBINGI0YvSk9Cw0YDRgyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDQvNC40L3Rg9GCINCx0L7QudGLICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDQtNC10LnRltC9KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCR0ZbRgCDQvNC40L3Rg9GCINCx0L7QudGLICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDQtNC10LnRltC9KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4g0YLQsNKj0LTQsNC70LTRizwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+ItOY0YAg0YLSr9GA0LvRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLQodGW0Lcg0L7RgdGLINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00YvSoyDQvNCw0qPRi9C30LTRi9C70YvSk9GL0L0g0L7RgNC90LDRgtCw0YHQsNGB0YvQty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItKa0LDRgtGL0YHRgtGLINCw0LTQsNC80LTQsNGA0pPQsCDQsdCw0LnQu9Cw0L3Ri9GB0YLRiyDQsdKx0Lsg0LzQsNKj0YvQt9C00YsuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCmluZGV4IGRjYWYzMDUuLmZmYjM1OTkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4Z6F4Z624Z6A4Z+L4Z6f4Z+E4oCL4Z6l4Z6h4Z684Z6c4Z6T4Z+B4Z+HIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuGelOGetuGek+KAi+Gem+GetuGegOGfi+KAi+GemOGetuGej+Get+GegOGetiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuGemuGelOGfgOGelOKAi+KAi+KAi+Gen+Geu+GenOGej+GfkuGekOGet+Gel+GetuGeliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuGelOGfkuGemuGeluGfkOGek+GfkuGekuKAi+KAiyBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLhnpXhn5LhnpHhnrbhnpvhn4vhnoHhn5Lhnpvhnr3hnpMiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuGemuGeveGemOKAi+GelOGeieGfkuGeheGevOGem+KAi+GekeGet+Gek+GfkuGek+Gek+GfkOGemeKAi+GeleGfkuGekeGetuGem+Gfi+KAi+GegeGfkuGem+GeveGek+KAiyDhnorhnrzhnoXhnofhnrbigIvhnpvhn4HhnoHigIvhnoDhnrbhno/igIvhnqXhno7hnpHhnrbhnpMg4Z6T4Z634Z6E4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLhnoLhn5LhnprhnpThn4vhnoLhn5LhnprhnoThnoDhnrbhnprhnpbhnoThn5LhnprhnrjhnoDhnqLhn4HhnoDhn5LhnprhnoThn4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+L4Z6R4Z644Z6P4Z624Z+G4Z6EIOGek+Get+GehOGegOGemOGfkuGemuGet+Gej+GeluGehOGfkuGemuGeuOGegOGemuGelOGen+Gfi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuGekuGfkuGenOGevuGegOGetuGemeGenOGet+GegOGetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4Z6i4Z624Z6F4Z6U4Z+J4Z+HIOGeouGevOGenyDhnoXhn5LhnpThnrfhnoUg4Z6T4Z634Z6E4Z6S4Z+S4Z6c4Z6+4Z6A4Z624Z6Z4Z6c4Z634Z6A4Z624Z6a4Z6V4Z+S4Z6f4Z+B4Z6E4Z6R4Z+A4Z6PIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4Z6U4Z634Z6RIOGerOKAi+GegOGfguKAi+GemuGelOGetuGemuKAi+Gen+GfkuGekOGetuGek+Gel+GetuGeliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpThnrfhnpHigIvhnprhnpThnrbhnprigIvhnp/hn5LhnpDhnrbhnpPhnpfhnrbhnpYg4Z6s4oCL4Z6U4Z6T4Z+S4Z6Q4Z+C4Z6YIOGek+Get+GehOKAi+Gem+Geu+GelOKAi+GemuGevOGelOKAi+Gej+GfhuGejuGetuGehOKAi+GelOGfkuGemuGeluGfkOGek+GfkuGekuGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLhnpLhn5Lhnpzhnr7hnofhnrbhnprhnpThnrbhnprhnp/hn5LhnpDhnrbhnpPhnpfhnrbhnpYiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnpDhno/igIvhnprhnrzhnpQg4Z6T4Z634Z6E4oCL4Z6c4Z644Z6K4Z+B4Z6i4Z684oCL4Z6K4Z+E4Z6Z4oCL4Z6U4Z+S4Z6a4Z6+4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6Q4Z6P4Z+UIOGenOGetuKAi+GesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+KAi+GelOGfkuGemuGevuKAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GekOGej+KAi+Gek+GfheKAi+GeluGfgeGem+KAi+KAi+GejuGetuGemOGeveGemeKAi+GeiuGfhOGemeKAi+GeguGfkuGemOGetuGek+KAi+GegOGetuGemuKAi+GelOGeieGfkuGeh+GetuGegOGfi+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnoDhnrbhnprigIvhnonhn5DhnpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeguGfkuGemuGelOGfi+GeguGfkuGemuGehOKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeieGfkOGemuGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLhno/hn5Lhnprhnr3hno/hnpbhnrfhnpPhnrfhno/hn5LhnpnigIvhnpbhnrfhnpsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuGesuGfkuGemeKAi+GegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeluGet+Gek+Get+Gej+GfkuGemeKAi+GeluGet+Gem+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGeoOGfheKAi+Gem+GfgeGegeKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GeiuGfhOGemeKAi+GeleGfkuGekeGetuGem+GfiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhnrLhn5LhnpnigIvhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnqDhn4XigIvhnpvhn4HhnoHigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnorhn4ThnpnigIvhnoLhn5LhnpjhnrbhnpPigIvhnp/hnoDhnpjhn5LhnpjhnpfhnrbhnpbigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDhn5TigIsg4Z6c4Z624oCL4Z6i4Z624Z6F4oCL4Z6A4Z624Z6P4Z+L4oCL4Z6b4Z674Z6Z4oCLIOGerOKAi+GeoOGfheKAi+GeiuGfhOGemeKAi+GemOGet+Gek+KAi+GemuGfhuGeluGeueGehOKAi+GekeGeu+GegOGflCDhnoXhn4bhno7hnrbhn4bigIvhnpDhnrbigIsg4Z6c4Z624oCL4Z6Y4Z634Z6T4oCL4Z6i4Z6T4Z674Z6J4Z+S4Z6J4Z624Z6P4oCL4Z6y4Z+S4Z6Z4oCL4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6g4Z+F4oCL4Z6b4Z+B4Z6B4oCL4Z6W4Z+B4Z6b4oCL4Z6i4Z624Z6f4Z6T4Z+S4Z6T4oCL4Z6R4Z+B4Z+UIOGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GeluGfkuGemeGetuGelOGetuGekeKAi+GeouGetuGeheKAi+GegOGetuGej+Gfi+KAi+Gem+Geu+GemeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAiyDhnorhn4ThnpnigIvhnpLhn5Lhnpzhnr7hnoDhnrbhnprigIvhnqDhn4XigIvhnorhn4ThnpnigIvhnoLhn5LhnpjhnrbhnpPigIvhnoDhnrbhnprigIvhnpThnonhn5LhnofhnrbhnoDhn4vigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IuGeheGevOGem+GeiuGfhuGejuGevuGemuGegOGetuGemuGen+GfgeGenOGetuGegOGemOGfkuGemOGegOGetuGemuGeoOGfheGej+GetuGemCBJTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuGegOGetuGej+GfiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4Z6F4Z6Y4Z+S4Z6b4Z6EIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4Z6U4Z634Z6R4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLhnpThnrfhnpHhnpfhn5LhnofhnrbhnpThn4vhnofhnrbhnqLhno/hn5LhnpDhnpThnpHhnpLhnpjhn5Lhnpjhno/hnrYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuGeh+GfhuGek+GeveGeny4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLhnpvhnrvhnpQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuGeheGemOGfkuGem+GehCBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLhnofhn5Lhnprhnr7hnp/igIvhnqLhno/hn5LhnpDhnpThnpEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuGemOGet+Gek+GekuGfkuGenOGevuGenOGet+GeiSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i4Z6S4Z+S4Z6c4Z6+4Z6c4Z634Z6JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuGegOGetuGemuKAi+Geh+GfkuGemuGevuGen+KAi+GeouGej+GfkuGekOGelOGekSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLhnpThnpPhn5LhnpDhn4LhnpjigIvhnpHhn4XigIvhnpzhnoXhnpPhnrbhnpPhnrvhnoDhn5LhnprhnpgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuGem+Geu+GelCI8L3N0cmluZz4KQEAgLTExMDksNiArMTExMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLhnpThn5LhnorhnrzhnprigIvhnpXhn5LhnpHhnrbhn4bhnoTigIvhnprhnrzhnpThnpfhnrbhnpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjigIvhnp/hn5LhnorhnrbhnpThn4vigIvhnoDhnrbhnprigIvhnofhnrzhnpPigIvhnorhn4bhno7hnrnhnoQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuGegOGfkuGemuGeu+GemOGeoOGfiuGeu+Gek+KAi+GeleGfkuGeiuGem+Gfi+KAi+Gem+GegOGfkuGegeGegeGejuGfkuGejCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IuGeh+GfhuGek+GeveGemeGegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4Z6U4Z624Z6T4oCL4Z6S4Z+S4Z6c4Z6+4oCL4Z6y4Z+S4Z6ZIFZQTiDhnp/hnoDhnpjhn5LhnpgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLhnpThnrbhnpPigIvhnpLhn5Lhnpzhnr7igIvhnrLhn5LhnpkgVlBOIOGen+GegOGemOGfkuGemOKAi+GeiuGfhOGemSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLhnpThn4nhn4cg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4oCL4Z6U4Z6O4Z+S4Z6K4Z624Z6J4Z+UIjwvc3RyaW5nPgpAQCAtMTQ0MiwxMSArMTQ0Nyw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuGelOGetuGek+GekuGfkuGenOGevuGelOGeheGfkuGeheGeu+GelOGfkuGelOGek+GfkuGek+Gel+GetuGeluGeiuGfhOGemeGeouGfkuGek+GegOGeguGfkuGemuGelOGfi+GeguGfkuGemuGehOGemuGelOGen+Gfi+GeouGfkuGek+GegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4Z6U4Z624Z6T4Z6b4Z674Z6U4Z6K4Z+E4Z6Z4Z6i4Z+S4Z6T4Z6A4Z6C4Z+S4Z6a4Z6U4Z+L4Z6C4Z+S4Z6a4Z6E4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLhnorhnr7hnpjhn5LhnpThnrjhnofhnr3hnpnhnrLhn5LhnpnhnpDhnrbhnpjhnpbhnpvhnpDhn5LhnpjhnpThn5Lhnprhnp/hnr7hnprhnqHhnr7hnoQg4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644Z6f4Z6T4Z+S4Z6f4Z+G4Z6f4Z+G4Z6F4Z+D4Z6Q4Z624Z6Y4Z6W4Z6b4Z6Q4Z+S4Z6Y4Z6A4Z624Z6P4Z+L4Z6U4Z6T4Z+S4Z6Q4Z6Z4Z6U4Z+S4Z6a4Z6P4Z634Z6U4Z6P4Z+S4Z6P4Z634Z6A4Z624Z6a4Z6n4Z6U4Z6A4Z6a4Z6O4Z+N4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIOGek+Get+GehOGegOGemOGfkuGemuGet+Gej+Gel+GetuGeluGeieGfkOGemiDhnp/hn4HhnpzhnrbhnoDhnpjhn5LhnpjhnpHhnrjhno/hnrbhn4bhnoQg4Z6T4Z634Z6E4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6V4Z+S4Z6R4Z+D4Z6B4Z624Z6E4Z6A4Z+S4Z6a4Z+E4Z6Z4Z6f4Z+S4Z6R4Z6+4Z6a4Z6P4Z+C4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIOGegOGetuGemuGeleGfkuGeieGevuGen+GetuGemuGeouGfiuGeuOGemOGfieGfguGemyDhnpPhnrfhnoThnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnpXhn5Lhnp/hn4HhnoThnpHhn4Dhno/hnorhn4LhnpvhnpbhnrnhnoThnpXhn5LhnqLhn4LhnoDhnpvhnr7hnoDhnrbhnprhnpLhn5Lhnpzhnr7hnp/hnpjhnoDhnrbhnpvhnoDhnpjhn5LhnpjhnqLhnrbhnoXhnpPhnrnhnoThnpjhnrfhnpPhnpLhn5Lhnpzhnr7hnpThnoXhn5LhnoXhnrvhnpThn5LhnpThnpPhn5LhnpPhnpfhnrbhnpbhnpHhn4Eg4Z6b4Z674Z+H4Z6P4Z+S4Z6a4Z624Z6P4Z+C4Z6i4Z+S4Z6T4Z6A4Z6U4Z6+4Z6A4Z6W4Z694Z6A4Z6c4Z624Z+UXG5cbuGegOGemOGfkuGemOGenOGet+GekuGeuOGen+Gek+GfkuGen+GfhuGen+GfhuGeheGfg+GelOGet+GekeGeiuGfhOGemeGen+GfkuGenOGfkOGemeGelOGfkuGemuGenOGej+GfkuGej+GetyDhnpPhn4Xhnpbhn4Hhnpvhnorhn4LhnpvhnqfhnpThnoDhnprhno7hn43hnprhnpThnp/hn4vhnqLhn5LhnpPhnoDhnoDhn4bhnpbhnrvhnoThnp/hnrbhnoDhnpDhn5Lhnpjhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuGelOGetuGek+GemuGetuGemuGetuGfhuGehOGfliDhnoDhnrvhn4bhnpThnoThn5LhnqDhnrbhnonhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoThnpHhnrbhn4bhnoThnpPhn4Hhn4ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4Z6R4Z624Z6U4Z+WIOGelOGehOGfkuGeoOGetuGeieGen+GfkuGehOGetuGej+Gfi+Gfl+Gek+GfheGeleGfkuGek+GfguGegOGegeGetuGehOGegOGfkuGemuGfhOGemOGelOGeieGfkuGeh+GeuOGek+Gfg+GegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4Z6S4Z6Y4Z+S4Z6Y4Z6P4Z624Z+WIOGelOGehOGfkuGeoOGetuGeieGegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehOGekeGetuGfhuGehOGek+GfgeGfh+Gen+GfkuGehOGetuGej+Gfi+GflyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4Z6A4Z6Y4Z+S4Z6a4Z634Z6P4Z6B4Z+S4Z6W4Z6f4Z+L4Z+WIOGelOGehOGfkuGeoOGetuGeieGek+GfheGeleGfkuGek+GfguGegOGegeGetuGehOGem+GevuGelOGeieGfkuGeh+GeuOGek+Gfg+GegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehCDhnpPhnrfhnoThnpThnpPhn5Lhnpvhnrrhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4Z6U4Z6T4Z+S4Z6R4Z624Z6T4Z+L4Z+WIOGem+GfhOGej+GelOGehOGfkuGeoOGetuGeieGek+GfheGem+GevuGeouGfgeGegOGfkuGemuGehOGfiyDhnpPhnrfhnoThnpThnpPhn5Lhnpvhnrrhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuGemuGemeGfiOGeluGfgeGemyAlMSRkIOGek+GetuGekeGeuCAo4Z6a4Z6g4Z684Z6P4Z6K4Z6b4Z+LIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGemuGemeGfiOGeluGfgeGem+GemOGeveGemeGek+GetuGekeGeuCAo4Z6a4Z6g4Z684Z6P4Z6K4Z6b4Z+LIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTIsNCArMTUxMiw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7hnpThnrbhnpPhnofhn5Lhnprhnr7hnp8gPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4Z6V4Z+S4Z6f4Z+B4Z6E4Z+XIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuGeouGfkuGek+GegOGelOGetuGek+GegOGfhuGejuGej+Gfi+Gen+GetuGemuGfiOGen+GfhuGegeGetuGek+Gfi+Gek+Gfg+GegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehOGekeGetuGfhuGehOGek+GfgeGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i4Z6c4Z624Z6Y4Z624Z6T4Z6f4Z624Z6a4Z+I4Z6f4Z+G4Z6B4Z624Z6T4Z+L4Z6K4Z+E4Z6Z4Z6f4Z624Z6a4Z6P4Z+C4Z6Y4Z6T4Z674Z6f4Z+S4Z6f4Z6K4Z+C4Z6b4Z6W4Z624Z6A4Z+L4Z6W4Z+Q4Z6T4Z+S4Z6SIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCmluZGV4IGU3YWQwMTAuLmFiN2FkODIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imxvd19tZW1vcnkiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNTE2NjE5ODYxMTkxMDI1OTIzIj4i4LKf4LK/4LK14LK/IOCyuOCyguCyl+CzjeCysOCyueCyo+CzhiDgsqTgs4HgsoLgsqzgsr/gsqbgs4YuIOCyuOCzjeCypeCys+CyteCyqOCzjeCyqOCzgSDgsq7gs4HgspXgs43gsqTgspfgs4rgsrPgsr/gsrjgsrLgs4Eg4LKV4LOG4LKy4LK14LOBIOCyq+CziOCysuCzjeKAjOCyl+Cys+CyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgsr8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG93X21lbW9yeSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0NzU5OTkyODY2ODAwMDA1NDEiPiLgsqvgs4vgsqjgs40g4LK44LKC4LKX4LON4LKw4LK54LKj4LOGIOCypOCyguCyrOCyv+CypuCzhi4g4LK44LON4LKl4LKz4LK14LKo4LON4LKo4LOBIOCyluCyvuCysuCyv+Cyr+CyvuCyl+Cyv+CyuOCysuCzgSDgspXgs4bgsrLgsrXgs4Eg4LKr4LOI4LKy4LON4oCN4oCN4LKX4LKz4LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCyvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iNTg0ODQwMjEyNzQ1NTAyMTcxNCI+IuCyqOCzhuCyn+CzjeKAjOCyteCysOCzjeCyleCzjSDgsoXgsqjgs43gsqjgs4Eg4LK14LOA4LKV4LON4LK34LK/4LK44LKs4LK54LOB4LKm4LK+4LKX4LK/4LKw4LOB4LKk4LON4LKk4LKm4LOGIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3NsX2NhX2NlcnRfbm90aV9ieV91bmtub3duIiBtc2dpZD0iNDQ3NTQzNzg2MjE4OTg1MDYwMiI+IuCyheCynOCzjeCynuCyvuCypCDgsq7gs4LgsrDgsqjgs4cg4LK14LON4LKv4LKV4LON4LKk4LK/4LKvIOCyquCzjeCysOCyleCyvuCysCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9jYV9jZXJ0X25vdGlfYnlfdW5rbm93biIgbXNnaWQ9IjQ0NzU0Mzc4NjIxODk4NTA2MDIiPiLgsoXgspzgs43gsp7gsr7gsqQg4LKl4LKw4LON4LKh4LONIOCyquCyvuCysOCzjeCyn+Cyv+CyryDgsqrgs43gsrDgspXgsr7gsrAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9ub3RpX2J5X2FkbWluaXN0cmF0b3IiIG1zZ2lkPSI1NTA3NTgwODgxODU3NjQzMTIiPiLgsqjgsr/gsq7gs43gsq4g4LKV4LOG4LKy4LK44LKmIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsqjgsr/gsrDgs43gsrXgsr7gsrngspXgsrDgsr/gsoLgsqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF9ub3RpX21hbmFnZWQiIG1zZ2lkPSI0MDMwMjYzNDk3Njg2ODY3MTQxIj4iPHhsaWZmOmcgaWQ9Ik1BTkFHSU5HX0RPTUFJTiI+JXM8L3hsaWZmOmc+IOCyquCzjeCysOCyleCyvuCysCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9IndvcmtfcHJvZmlsZV9kZWxldGVkIiBtc2dpZD0iNTAwNTU3MjA3ODY0MTk4MDYzMiI+IuCyleCzhuCysuCyuOCypiDgsqrgs43gsrDgs4rgsqvgs4jgsrLgs40g4LKF4LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCysuCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic2h1dGRvd25fY29uZmlybSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY0OTc5MjE3NTI0MjgyMTM1MyI+IuCyqOCyv+CyruCzjeCyriDgsqvgs4vgsqjgs40g4LK44LON4LKl4LKX4LK/4LKk4LKX4LOK4LKz4LON4LKz4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNodXRkb3duX2NvbmZpcm1fcXVlc3Rpb24iIG1zZ2lkPSIyOTA2NTQ0NzY4ODgxMTM2MTgzIj4i4LKo4LOA4LK14LOBIOCyuOCzjeCypeCyl+Cyv+CypOCyl+CziuCys+Cyv+CyuOCysuCzgSDgsqzgsq/gsrjgs4HgsrXgsr/gsrDgsr4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX3RpdGxlIiBtc2dpZD0iNzA1NDUwOTkxNDUwMDE0MDM2MSI+IuCyuOCzgeCysOCyleCzjeCyt+Cyv+CypCDgsq7gs4vgsqHgs43igI3gspfgs4Yg4LKw4LOA4LKs4LOC4LKf4LONIOCyruCyvuCyoeCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlYm9vdF9zYWZlbW9kZV9jb25maXJtIiBtc2dpZD0iNTUyOTM5NDQ1MDI3ODQ2NjgiPiLgsqjgs4DgsrXgs4Eg4LK44LOB4LKw4LKV4LON4LK34LKk4LOGIOCyruCzi+CyoeCzjeKAjeKAjeCyl+CzhiDgsrDgs4Dgsqzgs4Lgsp/gs40g4LKu4LK+4LKh4LKy4LOBIOCyrOCyr+CyuOCzgeCyteCyv+CysOCyvj8g4LKH4LKm4LOBIOCyqOCzgOCyteCzgSDgsrjgs43gsqXgsr7gsqrgsr/gsrjgsr/gsrDgs4HgsrUg4LKO4LKy4LON4LKy4LK+IOCyruCzguCysOCyqOCzhyDgsrXgs43gsq/gspXgs43gsqTgsr/gsq8g4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCN4oCN4LKX4LKz4LKo4LON4LKo4LOBIOCyqOCyv+Cyt+CzjeCyleCzjeCysOCyv+Cyr+Cyl+CziuCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4g4LKo4LOA4LK14LOBIOCyruCypOCzjeCypOCziuCyruCzjeCyruCzhiDgsrDgs4Dgsqzgs4Lgsp/gs40g4LKu4LK+4LKh4LK/4LKm4LK+4LKXIOCyheCyteCzgeCyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgsrjgs43gsqXgsr7gsqrgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVib290X3NhZmVtb2RlX2NvbmZpcm0iIG1zZ2lkPSI1NTI5Mzk0NDUwMjc4NDY2OCI+IuCyqOCzgOCyteCzgSDgsrjgs4HgsrDgspXgs43gsrfgsqTgs4Yg4LKu4LOL4LKh4LON4oCN4oCN4LKX4LOGIOCysOCzgOCyrOCzguCyn+CzjSDgsq7gsr7gsqHgsrLgs4Eg4LKs4LKv4LK44LOB4LK14LK/4LKw4LK+PyDgsofgsqbgs4Eg4LKo4LOA4LK14LOBIOCyuOCzjeCypeCyvuCyquCyv+CyuOCyv+CysOCzgeCytSDgso7gsrLgs43gsrLgsr4g4LKl4LKw4LON4LKh4LONIOCyquCyvuCysOCzjeCyn+CyvyDgsoXgsqrgs43gsrLgsr/gspXgs4fgsrbgsqjgs43igI3igI3gspfgsrPgsqjgs43gsqjgs4Eg4LKo4LK/4LK34LON4LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiDgsqjgs4DgsrXgs4Eg4LKu4LKk4LON4LKk4LOK4LKu4LON4LKu4LOGIOCysOCzgOCyrOCzguCyn+CzjSDgsq7gsr7gsqHgsr/gsqbgsr7gspcg4LKF4LK14LOB4LKX4LKz4LKo4LON4LKo4LOBIOCyruCysOCzgeCyuOCzjeCypeCyvuCyquCyv+CyuOCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRfdGFza3NfdGl0bGUiIG1zZ2lkPSIzNjkxNzY0NjIzNjM4MTI3ODg4Ij4i4LKH4LKk4LON4LKk4LOA4LKa4LK/4LKo4LKm4LOBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fcmVjZW50X3Rhc2tzIiBtc2dpZD0iODc5NDkwNjY1ODczMjE5MzQ3MyI+IuCyr+CyvuCyteCzgeCypuCzhyDgsofgsqTgs43gsqTgs4Dgsprgsr/gsqgg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKX4LKz4LK/4LKy4LON4LKyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25zIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0MDg0NzcxNDAwODgwNTM2NjUiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKG4LKv4LON4LKV4LOG4LKX4LKz4LOBIjwvc3RyaW5nPgpAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCyiOCylyDgsrLgsr7gspXgs40g4LKu4LK+4LKh4LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCyteCyv+Cyt+Cyr+Cyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsrDgs4bgsq7gsr7gsqHgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgsrjgs4HgsrDgspXgs43gsrfgsr/gsqQg4LKu4LOL4LKh4LONIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgsrjgsr/gsrjgs43gsp/gsoIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCyteCziOCyr+CyleCzjeCypOCyv+CylSI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4LKV4LON4LKw4LOG4LKh4LK/4LKf4LONIOCyleCyvuCysOCzjeCyoeCzjSDgsrjgsoLgspbgs43gsq/gs4bgspfgsrPgs4Eg4LKu4LKk4LON4LKk4LOBIOCyquCyvuCyuOCzjeKAjOCyteCysOCzjeCyoeCzjeKAjOCyl+Cys+CyguCypOCyuSDgsrXgs4jgsq/gspXgs43gsqTgsr/gspUg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCykuCys+Cyl+CziuCyguCyoeCyv+CysOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IuCyquCzjeCysOCypuCysOCzjeCytuCyqOCypiDgsrXgsrDgs43gsqfgspXgsrXgsqjgs43gsqjgs4Eg4LKo4LK/4LKv4LKC4LKk4LON4LKw4LK/4LK44LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuCyquCzjeCysOCypuCysOCzjeCytuCyqOCypiDgsp3gs4Lgsq7gs40g4LKu4LKf4LON4LKfIOCyruCypOCzjeCypOCzgSDgsrjgs43gsqXgsr7gsqgg4LKo4LK/4LKw4LON4LKn4LK+4LKw4LK14LKo4LON4LKo4LOBIOCyqOCyv+Cyr+CyguCypOCzjeCysOCyv+CyuOCyvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgspfgs4bgsrjgs43gsprgsrDgs43igIzgspfgsrPgsqjgs43gsqjgs4Eg4LKu4LK+4LKh4LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLgsp/gs43gsq/gsr7gsqrgs40g4LKu4LK+4LKh4LKs4LK54LOB4LKm4LOBLCDgsrjgs43gsrXgs4jgsqrgs40g4LKu4LK+4LKh4LKs4LK54LOB4LKm4LOBLCDgsqrgsr/gsoLgsprgs40g4LKu4LK+4LKh4LKs4LK54LOB4LKm4LOBIOCyruCypOCzjeCypOCzgSDgsofgsqTgsrAg4LKX4LOG4LK44LON4LKa4LKw4LON4oCM4LKX4LKz4LKo4LON4LKo4LOBIOCyruCyvuCyoeCyrOCyueCzgeCypuCzgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgsrjgs43gsqXgsr/gsqTgsr8g4LKq4LKf4LON4LKf4LK/4LKv4LKo4LON4LKo4LOBIOCyqOCyv+Cyt+CzjeCyleCzjeCysOCyv+Cyr+Cyl+CziuCys+Cyv+CyuOCyvyDgsofgsrLgs43gsrLgsrXgs4cg4LKu4LK+4LKw4LON4LKq4LKh4LK/4LK44LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuCyuOCzjeCypeCyv+CypOCyvyDgsqrgsp/gs43gsp/gsr/gsq/gsqjgs43gsqjgs4Eg4LKo4LK/4LK34LON4LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LKy4LOBIOCyheCypeCyteCyviDgsrjgs4fgsrDgsr/gsrjgsrLgs4Eg4LKu4LKk4LON4LKk4LOBIOCyuOCyv+CyuOCzjeCyn+CygiDgspDgspXgsr7gsqjgs43igIzgspfgsrPgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LOBIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjOCyl+CzhiDgsoXgsrXgspXgsr7gsrYg4LKo4LOA4LKh4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLgsrjgs43gsqXgsr/gsqTgsr8g4LKq4LKf4LON4LKf4LK/4LKv4LK+4LKX4LK/4LKw4LKy4LOBIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4LKV4LON4LKv4LK+4LKu4LKw4LK+IOCyruCzguCysuCylSDgsprgsr/gsqTgs43gsrDgspfgsrPgs4Eg4LKu4LKk4LON4LKk4LOBIOCyteCzgOCyoeCyv+Cyr+CziuCyl+Cys+CyqOCzjeCyqOCzgSDgsrjgs4bgsrDgs4bgsrngsr/gsqHgsr/gsq/gsrLgs4Eg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCN4oCN4LKX4LOGIOCyheCyteCyleCyvuCytiDgsq7gsr7gsqHgsr/gspXgs4rgsqHgs4HgsqTgs43gsqTgsqbgs4YuIOCyiCDgsoXgsqjgs4Hgsq7gsqTgsr/gsq/gs4Eg4LKo4LK/4LKu4LON4LKuIOCyluCyvuCypOCysOCyvyDgsofgsrLgs43gsrLgsqbgs4bgsq/gs4cg4LKv4LK+4LK14LOB4LKm4LOHIOCyuOCyruCyr+CypuCysuCzjeCysuCyvyDgspXgs43gsq/gsr7gsq7gsrDgsr7gsrXgsqjgs43gsqjgs4Eg4LKs4LKz4LK44LKy4LOBIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjeKAjeCyl+CzhiDgsoXgsqjgs4Hgsq7gsqTgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCyteCziOCyrOCzjeCysOCzh+Cyt+CyqOCzjeKAjOKAjCDgsqjgsr/gsq/gsoLgsqTgs43gsrDgsr/gsrjgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCyteCziOCyrOCzjeCysOCzh+Cyn+CysOCzjeKAjCDgsqjgsr/gsq/gsoLgsqTgs43gsrDgsr/gsrjgsrLgs4Eg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKX4LOGIOCyheCyqOCzgeCyruCypOCyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LKr4LON4LKy4LON4LKv4LK+4LK24LON4oCM4LKy4LOI4LKf4LONIOCyqOCyv+Cyr+CyguCypOCzjeCysOCyv+CyuOCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4LKr4LON4LKy4LON4LKv4LK+4LK24LON4oCM4LKy4LOI4LKf4LONIOCyqOCyv+Cyr+CyguCypOCzjeCysOCyv+CyuOCysuCzgSDgsoXgsqrgs43gsrLgsr/gspXgs4fgsrbgsqjgs43igIzigIzgspfgs4Yg4LKF4LKo4LOB4LKu4LKk4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCyq+Czi+CyqOCzjSDgsrjgsoLgspbgs43gsq/gs4bgspfgsrPgsr/gspfgs4Yg4LKo4LOH4LKw4LK14LK+4LKX4LK/IOCyleCysOCzhiDgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LKo4LK/4LKu4LON4LKuIOCyueCyuOCzjeCypOCyleCzjeCyt+Czh+CyqiDgsofgsrLgs43gsrLgsqbgs4bgsq/gs4cg4LKr4LOL4LKo4LON4oCNIOCyuOCyguCyluCzjeCyr+CzhuCyl+Cys+Cyv+Cyl+CzhiDgspXgsrDgs4Yg4LKu4LK+4LKh4LKy4LOBIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjeKAjeCyl+CzhiDgsoXgsqjgs4Hgsq7gsqTgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIOCyh+CypuCzgSDgsoXgsqjgsr/gsrDgs4DgspXgs43gsrfgsr/gsqQg4LK24LOB4LKy4LON4LKV4LKX4LKz4LOBIOCyheCypeCyteCyviDgspXgsrDgs4bgspfgsrPgsr/gspfgs4Yg4LKV4LK+4LKw4LKj4LK14LK+4LKX4LKs4LK54LOB4LKm4LOBLiDgsqTgs4HgsrDgs43gsqTgs4Eg4LK44LKC4LKW4LON4LKv4LOG4LKX4LKz4LK/4LKX4LOGIOCyleCysOCzhuCyruCyvuCyoeCysuCzgSDgsogg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCNIOCyheCyqOCzgeCyruCypOCyv+CyuOCzgeCyteCzgeCypuCyv+CysuCzjeCysiDgso7gsoLgsqzgs4Hgsqbgs4Eg4LKX4LKu4LKo4LKm4LKy4LON4LKy4LK/4LKw4LKy4LK/LiDgsqbgs4HgsrDgs4Hgsqbgs43gsqbgs4fgsrbgsqrgs4LgsrDgsr/gsqQg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCN4oCN4LKX4LKz4LOBIOCyqOCyv+CyruCzjeCyriDgspbgsr7gsqTgsrDgsr8g4LKH4LKy4LON4LKy4LKm4LOG4LKv4LOHIOCyleCysOCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsq7gsr7gsqHgs4HgsrXgs4HgsqbgsrAg4LKu4LOC4LKy4LKVIOCyqOCyv+CyruCzjeCyriDgsrngsqMg4LKW4LKw4LON4LKa4LK+4LKX4LKs4LK54LOB4LKm4LOBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIOCyleCysOCzhiDgsrjgs4fgsrXgs4bgsq/gsqjgs43gsqjgs4Eg4LKq4LON4LKw4LK14LOH4LK24LK/4LK44LK/Ijwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLgspXgsqTgs43gsqTgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuCyqOCyleCysuCyv+CyuOCzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCyheCyguCyn+Cyv+CyuOCyvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LK44LKw4LKzIOCyquCyoOCzjeCyr+CypuCyguCypOCzhiDgsoXgsoLgsp/gsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuCyuOCzjeCypeCyvuCyqOCyvuCyguCypOCysOCyv+CyuOCzgS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLgsoXgsrPgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDgsqjgspXgsrLgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgsqrgsqDgs43gsq/gsrXgsqjgs43gsqjgs4Eg4LKG4LKv4LON4LKV4LOG4LKu4LK+4LKh4LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgsrDgsqbgs43gsqbgs4Hgspfgs4rgsrPgsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCyquCzgeCyqOCygyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LKq4LKg4LON4LKv4LKmIOCyhuCyr+CzjeCyleCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgsqjgsr/gspjgsoLgsp/gsr/gspfgs4Yg4LK44LOH4LKw4LK/4LK44LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgsoXgsrPgsr/gsrjgs4EiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LK14LK+4LKy4LON4oCM4LKq4LOH4LKq4LKw4LONIOCyrOCypuCysuCyv+CyuOCyvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCyheCyp+Cyv+CyuOCzguCymuCyqOCzhiDgspXgs4fgsrPgs4HgspciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCyleCyguCyoeCzgOCytuCyqOCzjSDgsqrgs4LgsrDgs4jgspXgs4bgsqbgsr7gsrDgsrDgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4Yg4LK44LK54LK+4LKv4LKVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKC4LKh4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCyruCzguCysuCylSBWUE4g4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKC4LKh4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4LKo4LOG4LKf4LON4oCN4LK14LKw4LON4LKV4LONIOCyqOCyv+CysOCzjeCyteCyueCyv+CyuOCysuCzgSDgsrjgs43gsqrgsrDgs43gsrbgsr/gsrjgsr8iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LKo4LK/4LKu4LON4LKuIOCyqOCyv+CysOCzjeCyteCyvuCyueCyleCysOCyv+CyguCypiDgsqjgsrXgs4DgspXgsrDgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCyqOCyv+CyruCzjeCyriDgsqjgsr/gsrDgs43gsrXgsr7gsrngspXgsrDgsr/gsoLgsqYg4LKF4LKz4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgsqjgsr/gsq7gs43gsq4g4LKs4LON4LKv4LK+4LKf4LKw4LK/4LKvIOCyrOCyvuCys+Cyv+CyleCzhuCyr+CyqOCzjeCyqOCzgSDgsrjgs4Hgsqfgsr7gsrDgsr/gsrjgsrLgs4Eg4LK44LK54LK+4LKvIOCyruCyvuCyoeCysuCzgSwg4LKs4LON4LKv4LK+4LKf4LKw4LK/IOCyieCys+Cyv+CyleCzhuCyr+CzgSDgsqjgsr/gsq7gs43gsq4g4LK44LK+4LKn4LKo4LKmIOCyleCyvuCysOCzjeCyr+CyleCzjeCyt+CyruCypOCzhuCyr+CyqOCzjeCyqOCzgSDgspXgsqHgsr/gsq7gs4Yg4LKu4LK+4LKh4LOB4LKk4LON4LKk4LKm4LOGIOCyruCypOCzjeCypOCzgSDgsrXgs4jgsqzgs43gsrDgs4fgsrfgsqjgs40sIOCyuOCzjeCypeCysyDgsrjgs4fgsrXgs4bgspfgsrPgs4Eg4LK54LK+4LKX4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrngsr/gsqjgs43gsqjgs4bgsrLgs4Yg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyruCyv+CypOCyv+Cyl+CziuCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4g4LK44LK/4LKC4LKV4LONIOCyruCyvuCyoeCzgeCyteCzgeCypuCyqOCzjeCyqOCzgSDgsoXgsrXgsrLgsoLgsqzgsr/gsrjgsr/gsrDgs4HgsrUg4LKH4LKu4LOH4LKy4LONLCDgsrjgsoLgsqbgs4fgsrYg4LKV4LKz4LOB4LK54LK/4LK44LOB4LK14LK/4LKV4LOGLCDgsq7gsqTgs43gsqTgs4Eg4LKH4LKk4LKwIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjOCyl+Cys+CzgSDgsqjgs4DgsrXgs4Eg4LKk4LOG4LKw4LOG4LKv4LKmIOCyueCziuCysOCypOCzgSDgsqjgsrXgs4DgspXgsrDgsqPgspfgs4rgsrPgs43gsrPgs4HgsrXgs4Hgsqbgsr/gsrLgs43gsrIuXG5cbuCyqOCyv+CyruCzjeCyriDgsrjgsr7gsqfgsqjgsrXgs4Eg4LKa4LK+4LKw4LON4LKc4LONIOCyhuCyl+CzgeCypOCzjeCypOCyv+CysOCzgeCytSDgsrjgsq7gsq/gsqbgsrLgs43gsrLgsr8g4LKs4LON4LKv4LK+4LKf4LKw4LK/IOCyieCys+Cyv+CyleCzhuCyr+CzgSDgsobgsqvgs40g4LKG4LKX4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4LKo4LK/4LKw4LON4LKs4LKC4LKn4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGOiDgsogg4LKF4LKn4LK/4LK44LOC4LKa4LKo4LOG4LKX4LKz4LKo4LON4LKo4LOBIOCyjuCyguCypuCyv+Cyl+CzgiDgsqTgs4vgsrDgsr/gsrjgsqzgs4fgsqEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LKV4LKh4LK/4LKu4LOGOiDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4Yg4LKq4LKf4LON4LKf4LK/4LKvIOCyleCzhuCys+CyreCyvuCyl+CypuCysuCzjeCysuCyvyDgsrjgs43gsqXgsqzgs43gsqfgsrXgsr7gspfgsr8g4LKk4LOL4LKw4LK/4LK44LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgsrjgsr7gsq7gsr7gsqjgs43gsq86IOCyiCDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LK44LON4LKl4LKs4LON4LKn4LK14LK+4LKX4LK/IOCypOCzi+CysOCyv+CyuOCzgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LKF4LKn4LK/4LKVOiDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrMg4LKq4LKf4LON4LKf4LK/4LKvIOCyruCzh+CysuCzjeCyreCyvuCyl+CypuCysuCzjeCysuCyvyDgsqTgs4vgsrDgsr/gsrjgs4Eg4LKu4LKk4LON4LKk4LOBIOCyp+CzjeCyteCyqOCyvyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LKk4LOB4LKw4LON4LKk4LOBOiDgsqrgsrDgsqbgs4bgsq/gsqjgs43gsqjgs4Eg4LK14LOA4LKV4LON4LK34LK/4LK44LK/IOCyruCypOCzjeCypOCzgSDgsqfgs43gsrXgsqjgsr8g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCDgsqjgsr/gsq7gsr/gsrfgspfgsrPgsrXgsrDgs4bgspfgs4YgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCyteCysOCzhuCyl+Czhik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4LKo4LK/4LKu4LK/4LK34LKX4LKz4LK14LKw4LOG4LKX4LOGICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgsrXgsrDgs4bgspfgs4YpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IOCyhuCyr+CzjeCyleCzhuCyruCyvuCyoeCysuCyvuCyl+Cyv+CypuCzhjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuCyh+CypOCysOCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLgsqjgs4DgsrXgs4Eg4LKIIOCyheCyp+Cyv+CyuOCzguCymuCyqOCzhuCyl+CysyDgsqrgs43gsrDgsr7gsq7gs4Hgspbgs43gsq/gsqTgs4bgsq/gsqjgs43gsqjgs4Eg4LK54LOK4LKC4LKm4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i4LKc4LKo4LKw4LOBIOCypOCziuCyoeCyl+Cyv+CyleCziuCyguCyoeCyv+CysOCzgeCytSDgspXgsr7gsrDgsqMg4LKH4LKm4LOBIOCyheCypOCzjeCyr+CyguCypCDgsqrgs43gsrDgsq7gs4HgspbgsrXgsr7gspfgsr/gsqbgs4YuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCA4NWY0NmQxLi40YzQ3OGFhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLsp4DquIgg7J6g6re46riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz7qsJwpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuyIqOqyqOynhCDsvZjthZDsuKAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLslYjsoIQg66qo65OcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDsi5zsiqTthZwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuqwnOyduCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i7Iug7Jqp7Lm065OcIOuyiO2YuOyZgCDruYTrsIDrsojtmLgg65Ox7J2YIOqwnOyduCDrjbDsnbTthLDrpbwg7Y+s7ZWo7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i65SU7Iqk7ZSM66CI7J20IOuwsOycqCDsoJzslrQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i65SU7Iqk7ZSM66CI7J207J2YIO2ZleuMgC/stpXshowg7IiY7KSAIOuwjyDsnITsuZjrpbwg7KCc7Ja07ZWp64uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuuPmeyekSDsi6TtlokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+Iu2DrSwg7Iqk7JmA7J207ZSELCDtmZXrjIAv7LaV7IaMIOuwjyDquLDtg4Ag64+Z7J6R7J2EIOyLpO2Wie2VoCDsiJgg7J6I7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuyDge2DnCDtkZzsi5zspIQg7IKs7JqpIOykkeyngCDrmJDripQg7IiY7KCVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuyVseydtCDsg4Htg5wg7ZGc7Iuc7KSE7J2EIOyCrOyaqeykkeyngO2VmOqxsOuCmCDsi5zsiqTthZwg7JWE7J207L2Y7J2EIOy2lOqwgCDrsI8g7KCc6rGw7ZWgIOyImCDsnojrj4TroZ0g7ZeI7Jqp7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLsg4Htg5wg7ZGc7Iuc7KSE7JeQIOychOy5mCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuyVseydtCDsubTrqZTrnbzroZwg7IKs7KeE6rO8IOuPmeyYgeyDgeydhCDssI3snYQg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydtCDqtoztlZzsnYQg7IKs7Jqp7ZWY66m0IOyVseydtCDslrjsoJzrk6Dsp4Ag7IKs7Jqp7J6Q7J2YIO2ZleyduCDsl4bsnbQg7Lm066mU652866W8IOyCrOyaqe2VoCDsiJgg7J6I7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLsp4Trj5kg7KCc7Ja0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLslbHsnbQg7KeE64+Z7J2EIOygnOyWtO2VoCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i7Lm066mU6528IO2UjOuemOyLnCDsoJzslrQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuyVseydtCDsubTrqZTrnbwg7ZSM656Y7Iuc66W8IOygnOyWtO2VoCDsiJgg7J6I64+E66GdIO2XiOyaqe2VqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLsoITtmZTrsojtmLgg7J6Q64+ZIOyXsOqysCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLslbHsnbQg7IKs7Jqp7J6Q7J2YIOyhsOyekSDsl4bsnbQg7KCE7ZmU67KI7Zi466GcIOyghO2ZlOulvCDqsbgg7IiYIOyeiOuPhOuhnSDtl4jsmqntlanri4jri6QuIOydtCDqsr3smrAg7JiI7IOB7LmYIOuqu+2VnCDthrXtmZQg7JqU6riI7J20IOu2gOqzvOuQoCDsiJgg7J6I7Iq164uI64ukLiDslbHsnbQg67mE7IOBIOyghO2ZlOulvCDqsbjrj4TroZ0g7ZWY64qUIOq2jO2VnOydgCDso7zslrTsp4Dsp4Ag7JWK7Iq164uI64ukLiDslYXshLEg7JWx7J20IOyCrOyaqeyekOydmCDtmZXsnbgg7JeG7J20IOyghO2ZlOulvCDqsbjslrQg7JqU6riI7J20IOu2gOqzvOuQoCDsiJgg7J6I7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iSU1TIO2Gte2ZlCDshJzruYTsiqTsl5Ag7JWh7IS47IqkIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLsnpjrnbzrgrTquLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuuzteyCrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Iuu2meyXrOuEo+q4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i7J2867CYIO2FjeyKpO2KuOuhnCDrtpnsl6zrhKPquLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuuwlOq+uOq4sC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLsgq3soJwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCDrs7XsgqwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLthY3siqTtirgg7ISg7YOdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLsi6Ttlonst6jshowiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuuLpOyLnCDsi6TtlokiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i7YWN7Iqk7Yq4IOyEoO2DnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLsgqzsoITsl5Ag7LaU6rCAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLsgq3soJwiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i67Cw6rK97ZmU66m0IOuzgOqyvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuyVjOumvCDsiJjsi6DquLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuyhsOqxtCDsoJzqs7XsnpAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLslYzrprwg7Ja07Iuc7Iqk7YS07Yq4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE7snbQg7Zmc7ISx7ZmU65CoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBO7J20IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuyXkCDsnZjtlbQg7Zmc7ISx7ZmU65CoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i64Sk7Yq47JuM7YGs66W8IOq0gOumrO2VmOugpOuptCDthLDsuZjtlZjshLjsmpQuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Iuq0gOumrOyekOyXkCDsnZjtlbQg7JeF642w7J207Yq465CoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLqtIDrpqzsnpDqsIAg7IKt7KCc7ZWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLrsLDthLDrpqwg7IiY66qFIOqwnOyEoOydhCDsnITtlbQsIOuwsO2EsOumrCDshLjsnbTrsoTripQg6riw6riw7J2YIOyEseuKpeydhCDspITsnbTqs6Ag7KeE64+ZLCDsnITsuZgg7ISc67mE7IqkIOuwjyDrjIDrtoDrtoTsnZgg67Cx6re465287Jq065OcIOuNsOydtO2EsOulvCDsoJztlZztlanri4jri6QuIOydtOuplOydvCwg66mU7Iuc7KeAIOuwjyDrj5nquLDtmZTsl5Ag7J2Y7KG07ZWY64qUIOq4sO2DgCDslbHsnYAg7JWx7J2EIOyXtCDrlYzquYzsp4Ag7JeF642w7J207Yq465CY7KeAIOyViuydhCDsiJgg7J6I7Iq164uI64ukLlxuXG7rsLDthLDrpqwg7IS47J2067KE64qUIOq4sOq4sOulvCDstqnsoIQg7KSR7J28IOuVjOuKlCDsnpDrj5nsnLzroZwg7IKs7JqpIOykkeyngOuQqeuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuywqOuLqDog7JWM66a8IOuLpOyLnCDtkZzsi5wg7JWI7ZWoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuuCruydjDog7JWM66a8IOuqqeuhnSDtlZjri6jsl5Ag66y07J2M7Jy866GcIO2RnOyLnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i7J2867CYOiDrrLTsnYzsnLzroZwg7JWM66a8IO2RnOyLnCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i64aS7J2MOiDslYzrprwg66qp66GdIOyDgeuLqOyXkCDtkZzsi5ztlZjqs6Ag7IaM66as66GcIOyVjOumvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLquLTquIk6IO2ZlOuptOyXkCDtkZzsi5ztlZjqs6Ag7IaM66as66GcIOyVjOumvCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZOu2hCDrj5nslYgoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz7quYzsp4ApPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Meu2hCDrj5nslYgoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz7quYzsp4ApPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPuqwnCDshKDtg53rkKg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLquLDtg4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i7J2065+s7ZWcIOyVjOumvOydmCDspJHsmpTrj4Trpbwg7ISk7KCV7ZaI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i6rSA66Co65CcIOyCrOyaqeyekOqwgCDsnojsnLzrr4DroZwg7KSR7JqU7ZWp64uI64ukLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAppbmRleCBiYjFjZDdmLi5lOWIwMWQxIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItCQ0LfRi9GAINC60YPQu9C/0YPQu9C+0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JzQsNC30LzRg9C90LTQsNGAINC20LDRiNGL0YDRi9C70LPQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JrQvtC+0L/RgdGD0Lcg0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg0KLRg9GC0YPQvNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQltC10LrQtSI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i0JrRgNC10LTQuNGC0YLQuNC6INC60LDRgNGC0LAg0L3QvtC80YPRgNC70LDRgNGLINC20LDQvdCwINGB0YvRgNGB06nQt9C006nRgCDRgdGL0Y/QutGC0YPRgyDTqdC30LTSr9C6INCx0LXRgNC40LvQuNGI0YLQtdGA0LTQuCDQutCw0LzRgtGL0LnRgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+ItCU0LjRgdC/0LvQtdC50LTQuCDRh9C+0qPQvtC50YLRg9GD0L3RgyDQsdCw0YjQutCw0YDRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItCt0LrRgNCw0L3QtNCw0LPRiyDRgdKv0YDTqdGC0YLSr9C9INOp0LvRh9Op0LzSr9C9INOp0LfQs9Op0YDRgtKv0q8g0LbQsNC90LAg0LbQsNC50LPQsNGI0YLRi9GA0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLQltCw0qPRgdC+0L7Qu9C+0YDQtNGDINCw0YLQutCw0YDRg9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLQotCw0L/RgtCw0L8sINGB0LXRgNC/0LjQvywg0YfRi9C80YfRi9C/INC20LDQvdCwINCx0LDRiNC60LAg0LbQsNKj0YHQvtC+0LvQvtGA0LTRgyDQsNGC0LrQsNGA0LAg0LDQu9Cw0YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i0LDQsdCw0Lsg0YLQuNC70LrQtdGB0LjQvSDTqdGH0q/RgNKv0q8g0LbQtSDTqdC30LPTqdGA0YLSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ItCa0L7Qu9C00L7QvdC80L7Qs9C+INCw0LHQsNC7INGC0LjQu9C60LXRgdC40L0g06nRh9Kv0YDSr9KvINC20LUg0YLRg9GC0YPQvCDRgdKv0YDTqdGC0YfTqdC706nRgNKv0L0g0LrQvtGI0YPRgyDQttC1INCw0LvRi9C/INGB0LDQu9GD0YMg0LzSr9C80LrSr9C90YfSr9C70q/Qs9Kv0L0g0LHQtdGA0LXRgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i0LDQsdCw0Lsg0YLQuNC70LrQtdGB0LjQvdC40L0g0LzQuNC70LTQtdGC0LjQvSDQsNGC0LrQsNGA0YPRgyI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCa0L7Qu9C00L7QvdC80L7Qs9C+INC60LDQvNC10YDQsCDQsNGA0LrRi9C70YPRgyDQstC40LTQtdC+INC20LDQvdCwINGB0q/RgNOp0YIg0YLQsNGA0YLRg9GDINGD0YDRg9C60YHQsNGC0YvQvSDQsdC10YDQtdGCLiDQkdGD0Lsg0YPRgNGD0LrRgdCw0YIsINC60LDQvNC10YDQsNC90Ysg0LrQsNCw0LvQsNCz0LDQvSDRg9Cx0LDQutGC0LAsINGB0LjQt9C00LjQvSDRi9GA0LDRgdGC0L7QvtKj0YPQt9GB0YPQtyDQutC+0LvQtNC+0L3Rg9GDINGD0YDRg9C60YHQsNGC0YvQvSDQsdC10YDQtdGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLRgtC40YLQuNGA06nTqdC90q8g0LHQsNGI0LrQsNGA0YPRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0JrQvtC70LTQvtC90LzQvtCz0L4g0LTQuNGA0LjQu9C00LXQs9C40YfRgtC4INC606nQt9Op0LzTqdC70LTTqdOpINC80q/QvNC60q/QvdGH0q/Qu9Kv0LPSr9C9INCx0LXRgNC10YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItC60L7QuyDRh9GL0YDQsNC60YLRiyDQutOp0LfTqdC806nQu9C006nTqSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0JrQvtC70LTQvtC90LzQvtCz0L4g0LrQvtC70YfRi9GA0LDQutGC0Ysg0LrTqdC306nQvNOp0LvQtNOp06kg0LzSr9C80LrSr9C90YfSr9C70q/Qs9Kv0L0g0LHQtdGA0LXRgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLRgtC10LvQtdGE0L7QvSDQvdC+0LzQtdGA0LvQtdGA0LjQvdC1INGC0q/QtyDRh9Cw0LvRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCa0L7Qu9C00L7QvdC80L7Qs9C+INGB0LjQt9C00LjQvSDQutCw0YLRi9GI0YPRg9Kj0YPQt9GB0YPQtyDRgtC10LvQtdGE0L7QvSDQvdC+0LzRg9GA0LvQsNGA0LPQsCDRh9Cw0LvRg9GDINGD0YDRg9C60YHQsNGC0YvQvSDQsdC10YDQtdGCLiDQkdGD0Lsg0YHQuNC3INC60q/RgtC/06nQs9Op0L0g0YfRi9Cz0YvQvNC00LDRgNCz0LAg0LbQtSDRh9Cw0LvRg9GD0LvQsNGA0LPQsCDQsNC70YvQvyDQutC10LvQuNGI0Lgg0LzSr9C80LrSr9C9LiDQkdGD0Lsg0LrRg9GC0LrQsNGA0YPRg9GH0YPQu9Cw0YDQtNGL0L0g0L3QvtC80YPRgNC70LDRgNGL0L3QsCDRh9Cw0LvRg9GD0LPQsCDRg9GA0YPQutGB0LDRgiDQsdC10YDQsdC10Lkg0YLRg9GA0LPQsNC90LTRi9Cz0YvQvSDRjdGB0LrQtSDQsNC70YvSo9GL0LcuINCX0YvRj9C90LTRg9GDINC60L7Qu9C00L7QvdC80L7Qu9C+0YAsINGB0LjQt9C00LjQvSDRi9GA0LDRgdGC0L7QvtKj0YPQt9GB0YPQtyDRh9Cw0LvRg9GD0LvQsNGA0LTRiyDQsNGC0LrQsNGA0YvQvywg0LrTqdC/INGH0YvQs9GL0LzQtNCw0YDQs9CwINGB0LXQsdC10L/QutC10YAg0LHQvtC70YPRiNGDINC80q/QvNC60q/QvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDRh9Cw0LvRg9GDINC60YvQt9C80LDRgtGL0L3QsCDQvNKv0LzQutKv0L3Rh9Kv0LvSr9C6INCw0LvRg9GDIjwvc3RyaW5nPgpAQCAtODU5LDEwICs4NjAsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQmtC10YHSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtOp0YfSr9GA0q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCn0LDQv9GC0L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i0JbTqdC906nQutOp0Lkg0YLQtdC60YHRgiDQutCw0YLQsNGA0Ysg0YfQsNC/0YLQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLQkNC70LzQsNGI0YLRi9GA0YPRg+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQltC+0Log0LrRi9C70YPRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMINC606nRh9Kv0YDQvNOp0LvTqdOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0KLQtdC60YHRgiDRgtCw0L3QtNC+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCQ0YDRgtC60LAg0LrQsNC50YLQsNGA0YPRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i0JrQsNC50YLQsNC70L7QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQotC10LrRgdGCINGC0LDQvdC00L7QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQodOp0LfQtNKv0LrQutOpINC60L7RiNGD0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+ItCW0L7QuiDQutGL0LvRg9GDIjwvc3RyaW5nPgpAQCAtMTEwOCw2ICsxMTEyLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCi0YPRiNC60LDQs9Cw0LfQtNGLINOp0LfQs9Op0YDRgtKv0q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLQrdGB0LrQtdGA0YLSr9KvINGC0YvSo9GI0LDQs9GL0YfRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0KjQsNGA0YIg0YLSr9C30q/Sr9GH0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLQrdGB0LrQtdGA0YLQvNC1INC20LDRgNC00LDQvNGH0YvRgdGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g0LjRiNGC0LXRgtC40LvQtNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQsNGA0LrRi9C70YPRgyDQttCw0L3QtNGL0YDRi9C70LTRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+ItC20LXQu9C10L3QuCDQsdCw0YjQutCw0YDRg9GDINKv0YfSr9C9INCx0LDRgdGL0qPRi9C3LiI8L3N0cmluZz4KQEAgLTE0NDEsMTEgKzE0NDYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLQkNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNGD0qPRg9C3INC20LDSo9GL0YDRgtC60LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i0JDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDRg9Kj0YPQtyDRgtCw0YDQsNCx0YvQvdCw0L0g0LbQvtC6INC60YvQu9GL0L3Qs9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+ItCR0LDRgtCw0YDQtdGP0L3Ri9C9INOp0LzSr9GA0q/QvSDRg9C30LDRgNGC0YPRgyDSr9GH0q/QvSwg0LHQsNGC0LDRgNC10Y/QvdGLINKv0L3TqdC80LTTqdCz0q/RhyDRgtKv0LfQvNOp0LPSr9Kj0q/Qt9C00q/QvSDQuNGI0LjQvdC40L0g0LzQsNC50L3QsNC/0YLRg9GD0LvRg9Cz0YPQvSDQsNC30LDQudGC0YvQvywg0LTQuNGA0LjQu9C006nTqSwg0LbQsNC50LPQsNGI0LrQsNC9INC20LXRgNC00Lgg0LDQvdGL0LrRgtC+0L4g0LrRi9C30LzQsNGC0YLQsNGA0Ysg0LbQsNC90LAg0YTQvtC90LTRg9C6INC00LDQudGL0L3QtNCw0YDQtNGL0L0g0LrTqdC/0YfSr9C70q/Qs9Kv0L0g0YfQtdC60YLQtdC/INC60L7RkdGCLiDQrdC70LXQutGC0YDQvtC90LTRg9C6INC/0L7Rh9GC0LAsINCx0LjQu9C00LjRgNKv0q8g0LbQsNC30YvRiNGD0YMg0LbQsNC90LAg0LHQsNGI0LrQsCDRiNCw0LnQutC10YjRgtC10YjRgtC40YDSr9Kv0LPTqSDQsdCw0LnQu9Cw0L3Ri9GI0YLRg9GDINC60L7Qu9C00L7QvdC80L7Qu9C+0YAg0LDRh9GL0LvQvNCw0LnRi9C90YfQsCDQttCw0qPRi9GA0YLRi9C70LHQsNC5INC60LDQu9GL0YjRiyDQvNKv0LzQutKv0L0uXG5cbtCR0LDRgtCw0YDQtdGPINKv0L3TqdC80LTTqdCz0q/RhyDRgtKv0LfQvNOp0LPSr9Kj0q/QtyDQutGD0LHQsNGC0YLQsNC70YvQvyDQttCw0YLQutCw0L3QtNCwINCw0LLRgtC+0LzQsNGC0YLRi9C6INGC0q/RgNC006kg06nRh9Kv0L8g0LrQsNC70LDRgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+ItCR06nQs9Op0YLRgtOp0LvQs9Op0L06INCR0YPQuyDRjdGB0LrQtdGA0YLQvNC10LvQtdGAINGN0Ycg0LrQsNGH0LDQvSDQutOp0YDRgdOp0YLSr9C70LHTqdGB0q/QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQotOp0LzTqdC9OiDQrdGB0LrQtdGA0YLQvNC10LvQtdGAINGC0LjQt9C80LXRgdC40L3QuNC9INGN0qMg0YvQu9C00YvQudGL0L3QtNCwINC606nRgNGB06nRgtKv0LvRgdKv0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCa0LDQtNC40LzQutC4OiDQkdGD0Lsg0Y3RgdC60LXRgNGC0LzQtdC70LXRgCDQsNC60YvRgNGL0L0g0LrTqdGA0YHTqdGC0q/Qu9GB0q/QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JbQvtCz0L7RgNGDOiDQrdGB0LrQtdGA0YLQvNC10LvQtdGAINGC0LjQt9C80LXRgdC40L3QuNC9INGN0qMg0LbQvtCz0L7RgNGD0YHRg9C90LTQsCDSr9C9INGH0YvQs9Cw0YDRi9C/INC606nRgNGB06nRgtKv0LvRgdKv0L0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i0KjQsNGI0YvQu9GL0Yg6INKu0L0g0LzQtdC90LXQvSDQutC+0YjRgtC+0LvRg9C/LCDRjdC60YDQsNC90LPQsCDRh9GL0LPQsNGA0YvQu9GB0YvQvSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDQvNKv0L3TqdGC0LrTqSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g0YfQtdC50LjQvSk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7QkdC40YAg0LzSr9C906nRgtC606kgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+INGH0LXQudC40L0pPC9pdGVtPgpAQCAtMTUxMSw0ICsxNTExLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDRgtCw0L3QtNCw0LvQtNGLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i0JrQsNC70LPQsNC9LdC60LDRgtC60LDQvdC00LDRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLQkdGD0Lsg0Y3RgdC60LXRgNGC0LzQtdC70LXRgNC00LjQvSDQvNCw0LDQvdC40LvSr9Kv0LvSr9Cz0q/QvSDQsdC10LvQs9C40LvQtdC00LjSo9C40LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLQkdGD0LvQsNGAINGB0LjQtyDSr9GH0q/QvSDQvNCw0LDQvdC40LvSr9KvINCw0LTQsNC80LTQsNGALiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2NvbmZpZy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxhbmQvY29uZmlnLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzA4ZGM1Ci0tLSAvZGV2L251bGwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sYW5kL2NvbmZpZy54bWwKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICAtLT4KKzxyZXNvdXJjZXM+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX2RvY2tlZFN0YWNrRGl2aWRlclNuYXBNb2RlIj4yPC9pbnRlZ2VyPgorPC9yZXNvdXJjZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCBiYzU4ZWE2Li5jZjIxOTQ0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC6peC6seC6reC6geKAi+C6lOC6veC6p+KAi+C6meC6teC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgu4Dgupngurfgu4nguq3guqvgurLigIvgupbgurfguoHigIvgu4Dguorgurfgu4jguq3guofigIvgu4Tguqfgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLguqXgurDguprgurvgupogQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4oCL4Lqq4LuI4Lqn4LqZ4oCL4LuC4LqVIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLguq7guqfguqHgupfgurHguofguoLgu43gu4nguqHgurngupnguqrgu4jguqfgupngu4LgupXgu4DguorgurHgu4jgupk6IOC7gOC6peC6geC6muC6seC6lOC7gOC6hOC6o+C6lOC6tOC6lCDgu4HguqXgurDguqXgurDguqvgurHgupTgupzgu4jgurLgupkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLguoTguqfguprguoTgurjguqHguoHgurLgupnguoLgurDguqvguo3gurLguo3guojgu43guqrgurDgu4HgupTguofgupzgurvgupkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4LqE4Lqn4Lqa4LqE4Lq44Lqh4Lql4Lqw4LqU4Lqx4Lqa4LqB4Lqy4LqZ4LqK4Lq54LqhIOC7geC6peC6sOC6geC6suC6meC6p+C6suC6h+C6leC6s+C7geC7nOC7iOC6h+C6guC6reC6h+C6iOC7jeC6quC6sOC7geC6lOC6h+C6nOC6u+C6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgupTgurPgu4DgupngurXgupngupfgu4jgurLgupfgurLguofgupXgu4jgurLguofgu4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IuC6quC6suC6oeC6suC6lOC7geC6leC6sCwg4Lqb4Lqx4LqU4LqZ4Lq14LuJ4Lqn4Lqh4Lq3LCDguqLgurTguprgupngurTgu4nguqfguqHgurcg4LuB4Lql4LqwIOC6lOC6s+C7gOC6meC6teC6meC6l+C7iOC6suC6l+C6suC6h+C6reC6t+C7iOC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgupvgurTgupTguoHgurLgupngupngupngurPgu4Pguorgu4kg4Lqr4Lq84Lq3IOC7geC6geC7ieC7hOC6guC7geC6luC6muC6quC6sOC6luC6suC6meC6sCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq/gupvgurTgupTguoHgurLgupngu4Dguq7gurHgupTguqfgur3guoHguoLguq3guofgu4HgupbguprguqrgurDgupbgurLgupngurAg4Lqr4Lq84Lq34LuA4Lqe4Lq14LuI4LqhIOC7geC6peC6sOC6peC6tuC6muC7hOC6reC6hOC6reC6meC6peC6sOC6muC6u+C6muC6reC6reC6geC7hOC6lOC7iS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i4LuA4Lqb4Lqx4LqZ4oCL4LuB4LqW4Lqa4oCL4Lqq4Lqw4oCL4LqW4Lqy4oCL4LqZ4LqwIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4Lqv4LqW4LuI4Lqy4LqN4Lqu4Lq54LqaIOC7geC6peC6sOC6p+C6tOC6lOC6teC7guC6reC6lOC7ieC6p+C6jeC6geC7ieC6reC6h+C6luC7iOC6suC6jeC6ruC6ueC6mi4g4LqB4Lqy4LqZ4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LqZ4Lq14LuJ4LqI4Lqw4Lqt4Lqy4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4LqvIOC6quC6suC6oeC6suC6lOC7g+C6iuC7ieC6geC7ieC6reC6h+C6luC7iOC6suC6jeC6ruC6ueC6muC7hOC6lOC7ieC6leC6sOC6q+C6peC6reC6lOC7gOC6p+C6peC6siDgu4LgupTguo3guprgu43gu4jgupXgu4nguq3guofgupbgu4ngurLguoHgurLgupnguqLgurfgupnguqLgurHgupnguojgurLguoHgupfgu4jgurLgupkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuC6hOC6p+C6muC6hOC6uOC6oeC6geC6suC6meC6quC6seC7iOC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Lqt4Lqw4LqZ4Lq44LqN4Lqy4LqU4LuD4Lqr4LuJ4LuB4Lqt4Lqx4Lqa4Lqv4LqE4Lqn4Lqa4LqE4Lq44Lqh4LuC4LqV4Lqq4Lqx4LuI4LqZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLguoTguqfguprguoTgurjguqHgu4Tgup/gu4Hgup/guqXgupQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6ryDguoTguqfguprguoTgurjguqHgu4Tgup/gu4Hgup/guqXgupQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4LuC4LqX4Lqr4Lqy4LuA4Lqa4Lq14LuC4LqX4Lql4Lqw4Lqq4Lqx4Lqa4LuC4LqU4LqN4LqB4Lq74LqHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuC6reC6sOC6meC6uOC6jeC6suC6lOC7g+C6q+C7ieC7geC6reC6seC6muC6r+C7guC6l+C6q+C6suC7gOC6muC6teC7guC6l+C6peC6sOC6quC6seC6muC7hOC6lOC7iSDgu4LgupTguo3guprgu43gu4jgupXgu4nguq3guofgupbgu4ngurLguoHgurLgupngupTgurPgu4DgupngurXgupnguoHgurLgupngu4PgupTgu4bguojgurLguoHgupfgu4jgurLgupkuIOC6hOC6uOC6meC6quC6u+C6oeC6muC6seC6lOC6meC6teC7ieC6reC6suC6lOC6geC7jeC7iOC7g+C6q+C7ieC7gOC6geC6teC6lOC6hOC7iOC6suC7g+C6iuC7ieC6iOC7iOC6suC6jeC7g+C6meC6geC6suC6meC7guC6l+C6l+C6teC7iOC6muC7jeC7iOC6hOC6suC6lOC6hOC6tOC6lOC7hOC6lOC7iS4g4Lud4Lqy4LqN4LuA4Lqr4LqUOiDguoTgurjgupnguqrgurvguqHguprgurHgupTgupngurXgu4nguprgu43gu4jgu4TgupTgu4ngu4DgupvgurHgupnguoHgurLgupnguq3gurDgupngurjguo3gurLgupTgu4Pguqvgu4ngu4Hguq3gurHguprguq8g4Lqq4Lqy4Lqh4Lqy4LqU4LuC4LqX4Lqr4Lqy4LuA4Lqa4Lq14Lqq4Lq44LqB4LuA4Lqq4Lq14LqZLiDgu4Hguq3gurHguprguq/gupfgurXgu4jgu4DgupvgurHgupnguq3gurHgupngupXgurDguqXgurLguo3guq3gurLgupTgu4Dguq7gurHgupTgu4Pguqvgu4ngupfgu4jgurLgupkg4LqV4LuJ4Lqt4LqH4LuA4Lqq4LqN4LqE4LuI4Lqy4LuC4LqX4LuC4LqU4LqN4LqX4Lq14LuI4Lqa4LuN4LuI4LuE4LqU4LuJ4LqE4Lqy4LqU4LqE4Lq04LqULiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i4LuA4LqC4Lq74LuJ4Lqy4oCL4Lqr4Lqy4oCL4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4LuC4LqXIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4LqV4Lqx4LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLguqrgurPgu4DgupngurvgurIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLguqfgurLguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuC6p+C6suC6h+C7gOC6m+C6seC6meC6guC7jeC7ieC6hOC6p+C6suC6oeC6l+C6s+C6oeC6sOC6lOC6siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4LuB4LqX4LqZ4LqX4Lq14LuI4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC6peC6tuC6miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4Lqq4Lqz4LuA4LqZ4Lq74LqyIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC7gOC6peC6t+C6reC6geC6guC7jeC7ieC6hOC6p+C6suC6oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4Lqa4LuN4LuI4oCL4LuA4Lqu4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgu4Dguq7gurHgupTgu4Pgu53gu4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LqB4Lqy4LqZ4LuA4Lql4Lq34Lqt4LqB4LqC4LuN4LuJ4LqE4Lqn4Lqy4LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC7gOC6nuC6teC7iOC6oeC7hOC6m+C6l+C6teC7iOC6p+C6seC6lOC6iOC6sOC6meC6suC6meC6uOC6geC6u+C6oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4Lql4Lq24LqaIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuC6m+C7iOC6veC6meC6nuC6suC6muC6nuC6t+C7ieC6meC6q+C6vOC6seC6hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC7guC6leC6n+C6seC6h+C6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4oCL4Lqc4Lq54LuI4oCL4Lqq4Lqw4oCL4Luc4Lqt4LqH4oCL4LuA4LqH4Lq34LuI4Lqt4LqZ4oCL4LuE4LqCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4LqV4Lq74Lqn4LqK4LuI4Lqn4LqN4oCL4LqB4Lqy4LqZ4oCL4LuB4LqI4LuJ4LqH4oCL4LuA4LqV4Lq34Lqt4LqZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLgu4DgupvgurXgupTgupngurPgu4Pguorgu4kgVlBOIOC7geC6peC7ieC6pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IuC7gOC6m+C6teC6lOC7g+C6iuC7iSBWUE4g4LuC4LqU4LqNIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IuC7geC6leC6sOC7gOC6nuC6t+C7iOC6reC6iOC6seC6lOC6geC6suC6meC7gOC6hOC6t+C6reC6guC7iOC6suC6jS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4Lqt4Lqx4Lqa4oCL4LuA4LqU4LqU4oCL4LuC4LqU4LqN4oCL4Lqc4Lq54LuJ4oCL4LqE4Lqn4Lqa4oCL4LqE4Lq44Lqh4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgupbgurfguoHigIvgupzgurngu4nigIvguoTguqfguprigIvguoTgurjguqHigIvguoLguq3guofigIvgupfgu4jgurLgupnigIvguqXgurbguprigIvgu4TgupvigIvgu4HguqXgu4nguqciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuC7gOC6nuC6t+C7iOC6reKAi+C6iuC7iOC6p+C6jeKAi+C7gOC6nuC6teC7iOC6oeKAi+C6reC6suKAi+C6jeC6uOKAi+C7geC6muC6seC6lOKAi+C7gOC6leC6teKAi+C6o+C6tSwg4LqV4Lq74Lqn4oCL4Lqb4Lqw4oCL4Lqi4Lqx4LqU4oCL4LuE4Lqf4oCL4LuB4Lqa4Lqx4LqU4oCL4LuA4LqV4Lq14oCL4Lqj4Lq14oCL4Lqr4Lq84Lq44LqU4oCL4Lqb4Lqw4oCL4Lqq4Lq04LqU4oCL4LqX4Lq04oCL4Lqe4Lqy4Lqa4oCL4LqB4Lqy4LqZ4oCL4LuA4Lqu4Lqx4LqU4oCL4Lqn4Lq94LqB4oCL4LqC4Lqt4LqH4oCL4Lqt4Lq44oCL4Lqb4Lqw4oCL4LqB4Lqt4LqZ4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4Lql4Lq74LqHIOC7geC6peC6sOKAi+C6iOC6s+KAi+C6geC6seC6lOKAi+C6geC6suC6meKAi+C6quC6seC7iOC6mSwg4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4Lqr4Lqy4LqX4Lq14LuI4LqV4Lqx4LuJ4LqHLCDgu4HguqXgurDigIvguoLgu43gu4nigIvguqHgurngupnigIvgup7gurfgu4ngupnigIvguqvgurzgurHguofigIvgu4DguoHgurfguq3guprigIvgupfgurHguofigIvgu53gurvgupQuIOC6reC6teKAi+C7gOC6oeC6pywg4LqB4Lqy4LqZ4oCL4Lqq4Lq74LuI4LqH4oCL4LqC4LuN4LuJ4oCL4LqE4Lqn4Lqy4LqhLCDgu4HguqXgurDigIvgu4Hguq3gurHguprguq3gurfgu4jgupngu4bigIvgupfgurXgu4jguq3gurLigIvgu4TguqrguoHgurLgupnigIvguorgurTguofigIvguoTgu4zigIvguq3gurLgupTigIvguojgurDigIvguprgu43gu4jigIvguq3gurHguprigIvgu4DgupTgupQg4LqZ4Lqt4LqB4oCL4LqI4Lqy4LqB4Lqn4LuI4Lqy4oCL4LqX4LuI4Lqy4LqZ4oCL4LuA4Lqb4Lq14LqU4oCL4Lqh4Lqx4LqZLlxuXG7gupXgurvguqfigIvgupvgurDigIvguqLgurHgupTigIvgu4Tgup/igIvgu4HguprgurHgupTigIvgu4DgupXgurXigIvguqPgurXguojgurDigIvgupvgurTgupTigIvguq3gurHgupTigIvgupXgurDigIvgu4LgupnigIvguqHgurHgupQg4LuA4Lqh4Lq34LuI4Lqt4oCL4Lqt4Lq44oCL4Lqb4Lqw4oCL4LqB4Lqt4LqZ4oCL4LqC4Lqt4LqH4oCL4LqX4LuI4Lqy4LqZ4oCL4LqB4Lqz4oCL4Lql4Lqx4LqH4oCL4Lqq4Lqy4LqB4Lqi4Lq54LuILiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4Lqa4Lql4Lqx4Lqt4LqB4LuB4Lql4LuJ4LqnOiDguqLgu4jgurLguqrgurDgu4HgupTguofguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4Dguqvgurzgurvgu4jgurLgupngurXgu4kiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LqV4LuN4LuI4LqyOiDguqrgurDgu4HgupTguofguqLgurngu4jguqrgu4jguqfgupnguqXgurjgu4jguqHguoLguq3guofguqXgurLguo3guoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4HguprguprguqHgurXguprgu43gu4jguqrgur3guociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuC6m+C6u+C6geC6geC6sOC6leC6tDog4Lqq4Lqw4LuB4LqU4LqH4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LuA4Lqr4Lq84Lq74LuI4Lqy4LqZ4Lq14LuJ4LuB4Lqa4Lqa4Lqa4LuN4LuI4Lqh4Lq14Lqq4Lq94LqHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLguqrgurnguoc6IOC6quC6sOC7geC6lOC6h+C6ouC6ueC7iOC6quC7iOC6p+C6meC7gOC6l+C6tOC6h+C6guC6reC6h+C6peC6suC6jeC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSDgu4HguqXgurDguqrgurvgu4jguofguqrgur3guofgupTgurHguociPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LqU4LuI4Lqn4LqZOiDgu4DgupTgurHgu4nguofguoLgurbgu4ngupngu4DgupfgurTguofguqvgupngu4ngurLguojgu40g4LuB4Lql4Lqw4Lqq4Lq74LuI4LqH4Lqq4Lq94LqH4LqU4Lqx4LqHIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7gu4DgupvgurHgupnigIvgu4DguqfigIvguqXgurIgJTEkZCDgupngurLigIvgupfgurUgKOC6iOC6u+C6meKAi+C6ruC6reC6lCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7igIvgu4DgupvgurHgupnigIvgu4DguqfigIvguqXgurIgMSDgupngurLigIvgupfgurUgKOC6iOC6u+C6meKAi+C6ruC6reC6lCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IOC6luC6t+C6geC7gOC6peC6t+C6reC6geKAi+C7geC6peC7ieC6pzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuC6reC6t+C7iOC6meC7hiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLgupfgu4jgurLgupngupXgurHgu4nguofguoTguqfgurLguqHguqrgurPguoTgurHgupnguoLguq3guofguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4Dguqvgurzgurvgu4jgurLgupngurXgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLguoLgu43gu4nguoTguqfgurLguqHgupngurXgu4nguqrgurPguoTgurHgupngu4Dgupngurfgu4jguq3guofguojgurLguoHguprgurjguoHguoTgurvgupngupfgurXgu4jguoHgu4jgur3guqfguoLgu4nguq3guocuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAppbmRleCBiMTQ4ZDJjLi5mMTE0M2ZlIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJVxb5yYWtpbnRpIGRhYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlR1cmlueXMgcGFzbMSXcHRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlNhdWdvcyByZcW+aW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IuKAnkFuZHJvaWTigJwgc2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iQXNtZW5pbsSXIjwvc3RyaW5nPgpAQCAtMjU3LDYgKzI1OCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLErnRyYXVraWFtaSBhc21lbmluaWFpIGR1b21lbnlzLCBwYXZ5emTFvml1aSwga3JlZGl0byBrb3J0ZWxpxbMgbnVtZXJpYWkgaXIgc2xhcHRhxb5vZMW+aWFpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iRWtyYW5vIGRpZGluaW1vIHZhbGR5bWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IlZhbGR5a2l0ZSBla3Jhbm8gbWFzdGVsaW8ga2VpdGltbyBseWfEryBpciBwb3ppY2lqb3MgbnVzdGF0eW3EhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJWZWlrc21haSBnZXN0YWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJHYWxpbWEgcGFsaWVzdGksIHBlcmJyYXVrdGksIHN1aW10aSBpciBhdGxpa3RpIGtpdHVzIHZlaWtzbXVzIGdlc3RhaXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iacWhanVuZ3RpIGFyIGtlaXN0aSBixatzZW5vcyBqdW9zdMSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkxlaWTFvmlhbWEgcHJvZ3JhbWFpIG5lbGVpc3RpIGLFq3Nlbm9zIGp1b3N0b3MgYXJiYSBwcmlkxJd0aSBpciBwYcWhYWxpbnRpIHNpc3RlbW9zIHBpa3RvZ3JhbWFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJixat0aSBixatzZW5vcyBqdW9zdGEiPC9zdHJpbmc+CkBAIC0zNTUsOCArMzU4LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJMZWlkxb5pYW1hIHByb2dyYW1haSBmb3RvZ3JhZnVvdGkgaXIgZmlsbXVvdGkga2FtZXJhLiDFoGlzIGxlaWRpbWFzIHN1dGVpa2lhIHRlaXPEmSBwcm9ncmFtYWkgbmF1ZG90aSBrYW1lcsSFIGJldCBrYWRhIGJlIGrFq3PFsyBwYXR2aXJ0aW5pbW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InZhbGR5dGkgdmlicmFjaWrEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTGVpZMW+aWFtYSBwcm9ncmFtYWkgdmFsZHl0aSB2aWJyYXZpbcSFLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJ2YWxkeXRpIMWhdmllc29zIHNpZ25hbMSFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJMZWlkxb5pYW1hIHByb2dyYW1haSB2YWxkeXRpIMWhdmllc29zIHNpZ25hbMSFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InNrYW1iaW50aSB0aWVzaW9naWFpIHRlbGVmb25vIG51bWVyaWFpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJMZWlkxb5pYW1hIHByb2dyYW1haSBza2FtYmludGkgdGVsZWZvbsWzIG51bWVyaWFpcyBiZSBqxatzxbMgxK9zaWtpxaFpbW8uIETEl2wgdG8gZ2FsaSBhdHNpcmFzdGkgbmVudW1hdHl0xbMgYXBtb2tlc3RpbmltxbMgYXIgc2thbWJ1xI1pxbMuIEF0bWlua2l0ZSwga2FkIHByb2dyYW1haSBuZWxlaWTFvmlhbWEgc2thbWJpbnRpIHBhZ2FsYm9zIHRlbGVmb27FsyBudW1lcmlhaXMuIEtlbmvEl2ppxaFrb3MgcHJvZ3JhbW9zIGdhbGkgc2thbWJpbnRpIGJlIGrFq3PFsyBwYXR2aXJ0aW5pbW8sIG8gZMSXbCB0byBqdW1zIGdhbGkgYsWrdGkgdGFpa29taSBtb2tlc8SNaWFpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4icGFzaWVrdGkgSU1TIHNrYW1idcSNacWzIHBhc2xhdWfEhSI8L3N0cmluZz4KQEAgLTg2OCwxMCArODY5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iScWha2lycHRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BpanVvdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLErmtsaWp1b3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLErmtsaWp1b3RpIGthaXAgZ3J5bsSFasSvIHRla3N0xIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlBha2Vpc3Rp4oCiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IknFoXRyaW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waWp1b3RpIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlBhc2lyaW5rdGkgdGVrc3TEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW51bGl1b3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJHcsSFxb5pbnRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IlRla3N0byBwYXNpcmlua2ltYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iUHJpZMSXdGkgcHJpZSDFvm9keW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJJxaF0cmludGkiPC9zdHJpbmc+CkBAIC0xMTIxLDYgKzExMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iS2Vpc3RpIGRhcmJhbGF1a2lvIGZvbsSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iUHJhbmXFoWltxbMgc2thaXR5bW8gcHJpZW1vbsSXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJTxIVseWdvcyB0ZWlrxJdqYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJQcmFuZcWhaW3FsyBwYWdlbGJpa2xpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIHN1YWt0eXZpbnRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBzdWFrdHl2aW5vIOKAnjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlBhbGllc2tpdGUsIGthZCB2YWxkeXR1bcSXdGUgdGlua2zEhS4iPC9zdHJpbmc+CkBAIC0xNDU4LDExICsxNDYzLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQXRuYXVqaW5vIGFkbWluaXN0cmF0b3JpdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IknFoXRyeW7ElyBhZG1pbmlzdHJhdG9yaXVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJLYWQgdGF1c290xbMgYWt1bXVsaWF0b3JpYXVzIGVuZXJnaWrEhSBha3VtdWxpYXRvcmlhdXMgdGF1c29qaW1vIHByaWVtb27ElyBzdW1hxb5pbmEgxK9yZW5naW5pbyB2ZWlraW3EhSBpciBhcHJpYm9qYSB2aWJyYXZpbcSFLCB2aWV0b3bEl3MgcGFzbGF1Z2FzIGJlaSBkYXVndW3EhSBmb25pbmnFsyBkdW9tZW7Fsy4gRWwuIHBhxaF0bywgc3VzaXJhxaFpbsSXamltbyBpciBraXRvcyBwcm9ncmFtb3MsIGt1cmlvcyB2ZWlraWEgc2luY2hyb25pemF2aW1vIHBhZ3JpbmR1LCBnYWxpIGLFq3RpIG5lYXRuYXVqaW50b3MsIG5lYmVudCBqYXMgYXRpZGFyeXNpdGUuXG5cbkFrdW11bGlhdG9yaWF1cyB0YXVzb2ppbW8gcHJpZW1vbsSXIGF1dG9tYXRpxaFrYWkgacWhanVuZ2lhbWEsIGthaSDEr3JlbmdpbnlzIMSva3JhdW5hbWFzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iVcW+Ymxva3VvdGE6IG5pZWthZGEgbmVyb2R5dGkgxaFpxbMgcHJhbmXFoWltxbMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWHFvmE6IHR5bGlhaSByb2R5dGkgcHJhbmXFoWltxbMgc8SFcmHFoW8gYXBhxI1pb2plIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLErnByYXN0YTogdHlsaWFpIHJvZHl0aSDFoWl1b3MgcHJhbmXFoWltdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkRpZGVsxJc6IHJvZHl0aSBwcmFuZcWhaW3FsyBzxIVyYcWhbyB2aXLFoXVqZSBpciBza2FtYsSXdGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iU2t1YnU6IHJvZHl0aSBla3JhbmUgaXIgc2thbWLEl3RpIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCBtaW51dMSZIChpa2kgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCBtaW51dGVzIChpa2kgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Niw0ICsxNTQ2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+UGFzaXIuIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBlbGVtLjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IsSudmFpcsWrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJHYWxpdGUgbnVzdGF0eXRpIMWhacWzIHByYW5lxaFpbcWzIHN2YXJixIUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJUYWkgc3ZhcmJ1IGTEl2wgc3VzaWp1c2nFsyDFvm1vbmnFsy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCmluZGV4IDg5MjQwMmIuLmY4NjQ0MDA0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG/Et8STdCB0xatsxKt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiJQxIFyc25pZWR6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNhdHVycyBwYXNsxJNwdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJEcm/FoWFpcyByZcW+xKttcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQgc2lzdMSTbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbmlza3MiPC9zdHJpbmc+CkBAIC0yNTYsNiArMjU3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IklldHZlciBwZXJzb25hcyBkYXR1cywgcGllbcSTcmFtLCBrcmVkxKt0a2FydGVzIG51bXVydXMgdW4gcGFyb2xlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkRpc3BsZWphIHBhbGllbGluxIFqdW1hIGtvbnRyb2xlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IktvbnRyb2zEk2ppZXQgZGlzcGxlamEgdMSBbHVtbWFpxYZhcyBsxKttZW5pIHVuIHBvemljaW9uxJPFoWFudS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLFvWVzdHUgaXpwaWxkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iQXRiYWxzdGEgcGllc2thcsWhYW5vcywgdmlsa8WhYW51LCBzYXZpbGvFoWFudSB1biBjaXR1cyDFvmVzdHVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImF0c3DEk2pvdCB2YWkgcMSBcnZlaWRvdCBzdGF0dXNhIGpvc2x1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IsS7YXVqIGxpZXRvdG5laSBhdHNwxJNqb3Qgc3RhdHVzYSBqb3NsdSB2YWkgcGlldmllbm90IHVuIG5vxYZlbXQgc2lzdMSTbWFzIGlrb25hcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iQsWrdCBwYXIgc3RhdHVzYSBqb3NsdSI8L3N0cmluZz4KQEAgLTM1NCw4ICszNTcsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IsS7YXVqIGxpZXRvdG5laSB1esWGZW10IGF0dMSTbHVzIHVuIHZpZGVva2xpcHVzIGFyIGthbWVydS4gQXIgxaFvIGF0xLxhdWp1IGxpZXRvdG5lIHZhciBqZWJrdXLEgSBicsSrZMSrIGl6bWFudG90IGthbWVydSBiZXogasWrc3UgYXBzdGlwcmluxIFqdW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrb250cm9sxJN0IHZpYnJvc2lnbsSBbHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IsS7YXVqIGxpZXRvdG5laSBrb250cm9sxJN0IHZpYnJvc2lnbsSBbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImtvbnRyb2zEk3QgdXpsaWVzbW9qdW11Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLEu2F1aiBsaWV0b3RuZWkga29udHJvbMSTdCB6aWJzcHVsZHppLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InRpZcWhaSB6dmFuxKt0IHV6IHTEgWxydcWGYSBudW11cmllbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLEu2F1aiBsaWV0b3RuZWkgenZhbsSrdCB1eiB0xIFscnXFhmEgbnVtdXJpZW0gYmV6IGrFq3N1IGllamF1a8WhYW7EgXMuIFRhcyB2YXIgcmFkxKt0IG5lcGFyZWR6xJN0YXMgaXptYWtzYXMgdmFpIHp2YW51cy4gxYVlbWlldCB2xJNyxIEsIGthIGxpZXRvdG5laSBuYXYgYXTEvGF1dHMgenZhbsSrdCB1eiB0xIFscnXFhmEgbnVtdXJpZW0gxIFya8SBcnRhcyBzaXR1xIFjaWrEgW0uIMS7YXVucHLEgXTEq2dhcyBsaWV0b3RuZXMgdmFyIHJhZMSrdCBqdW1zIGl6bWFrc2FzLCB2ZWljb3QgenZhbnVzIGJleiBqxatzdSBhcHN0aXByaW7EgWp1bWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwaWVrxLzFq3QgdMWrbMSrdMSTasSBcyB6acWGb2p1bWFwbWFpxYZhcyBwYWthbHBvanVtYW0sIGxhaSB2ZWlrdHUgenZhbnVzIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjQsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJemdyaWV6dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29wxJN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iSWVsxKttxJN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJZWzEq23Ek3Qga8SBIHZpZW5rxIFyxaF1IHRla3N0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQWl6c3TEgXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRHrEk3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3DEk3QgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iQXRsYXPEq3QgdGVrc3R1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJBdHNhdWt0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJBdGNlbHQgYXRzYXVrxaFhbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGVrc3RhIGF0bGFzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJQaWV2aWVub3QgdsSBcmRuxKtjYWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkR6xJNzdCI8L3N0cmluZz4KQEAgLTExMTQsNiArMTExOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJUYXBldGVzIG1hacWGYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlBhemnFhm9qdW11IHV6dHbEk3LEk2pzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJOb3NhY8SranVtdSBzbmllZHrEk2pzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iUGF6acWGb2p1bXUgcGFsxKtncyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGlyIGFrdGl2aXrEk3RzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IkxpZXRvanVtcHJvZ3JhbW1hIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBha3Rpdml6xJNqYSBWUE4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iUGllc2thcmlldGllcywgbGFpIHDEgXJ2YWxkxKt0dSB0xKtrbHUuIjwvc3RyaW5nPgpAQCAtMTQ0OSwxMSArMTQ1NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0amF1bmluxIFqYSBhZG1pbmlzdHJhdG9ycyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXpkesSTc2EgasWrc3UgYWRtaW5pc3RyYXRvcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IkxhaSBwYWlsZHppbsSBdHUgYWt1bXVsYXRvcmEgZGFyYsSrYnUsIGFrdW11bGF0b3JhIGphdWRhcyB0YXVwxKvFoWFuYXMgcmXFvsSrbcSBIHRpZWsgc2FtYXppbsSBdGEgaWVyxKtjZXMgdmVpa3RzcMSTamEgdW4gdGllayBpZXJvYmXFvm90YSB2aWJyxIFjaWphLCBhdHJhxaFhbsSBcyB2aWV0dSBwYWthbHBvanVtaSB1biBsaWVsxIFrxIEgZGHEvGEgZm9uYSBkYXR1LiBFLXBhc3RhLCB6acWGb2p1bWFwbWFpxYZhcyB1biBjaXRhIHZlaWRhIGxpZXRvdG5lcywga3VydSBkYXJixKtiYXMgcGFtYXTEgSBpciBkYXR1IHNpbmhyb25pesSBY2lqYSwgdmFyIG5ldGlrdCBhdGphdW5pbsSBdGFzLCBqYSB0xIFzIG5lYXR2ZXJhdC5cblxuVGlrbMSrZHogdGllayBzxIFrdGEgaWVyxKtjZXMgdXpsxIFkZSwgYWt1bXVsYXRvcmEgamF1ZGFzIHRhdXDEq8WhYW5hcyByZcW+xKttcyBhdXRvbcSBdGlza2kgdGllayBpenNsxJNndHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG/Et8STdHM6IG5la2FkIG5lcsSBZMSrdCDFoW9zIHBhemnFhm9qdW11cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJaZW11OiByxIFkxKt0IHBhemnFhm9qdW11IHNhcmFrc3RhIGFwYWvFoWRhxLzEgSBiZXogc2thxYZhcyBzaWduxIFsYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybcSBbGk6IHLEgWTEq3QgxaFvcyBwYXppxYZvanVtdXMgYmV6IHNrYcWGYXMgc2lnbsSBbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkF1Z3N0dTogcsSBZMSrdCBwYXppxYZvanVtdSBzYXJha3N0YSBhdWfFoWRhxLzEgSB1biBhciBza2HFhmFzIHNpZ27EgWx1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlN0ZWlkemFtaTogcsSBZMSrdCBla3LEgW7EgSBhciBza2HFhmFzIHNpZ27EgWx1Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Inplcm8iPiUxJGTCoG1pbsWrdGVzIChsxKtkeiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkwqBtaW7Fq3RpIChsxKtkeiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTI4LDQgKzE1MjgsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz7CoGF0bGFzxKt0aTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRhxb7EgWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkrFq3MgaWVzdGF0xKtqxIF0IMWhbyBwYXppxYZvanVtdSBzdmFyxKtndW1hIGzEq21lbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJUYXMgaXIgc3ZhcsSrZ2kgaWVzYWlzdMSrdG8gcGVyc29udSBkxJPEvC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbWNjMzEwLW1uYzI2MC1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1jYzMxMC1tbmMyNjAtYitzcitMYXRuL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTA5NDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1jYzMxMC1tbmMyNjAtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMzIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoKKyoqIENvcHlyaWdodCAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzwhLS0gIFRoZXNlIHJlc291cmNlcyBhcmUgYXJvdW5kIGp1c3QgdG8gYWxsb3cgdGhlaXIgdmFsdWVzIHRvIGJlIGN1c3RvbWl6ZWQKKyAgICAgZm9yIGRpZmZlcmVudCBoYXJkd2FyZSBhbmQgcHJvZHVjdCBidWlsZHMuICAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICA8c3RyaW5nLWFycmF5IG5hbWU9IndmY09wZXJhdG9yRXJyb3JBbGVydE1lc3NhZ2VzIj4KKyAgICA8aXRlbSBtc2dpZD0iNzIzOTAzOTM0ODY0ODg0ODI4OCI+IkRhIGJpc3RlIHVwdcSHaXZhbGkgcG96aXZlIGkgc2xhbGkgcG9ydWtlIHByZWtvIFdpLUZpLWphLCBwcnZvIHphdHJhxb5pdGUgb2QgbW9iaWxub2cgb3BlcmF0ZXJhIGRhIHZhbSBvbW9ndcSHaSBvdnUgdXNsdWd1LiBaYXRpbSB1IFBvZGXFoWF2YW5qaW1hIHBvbm92byB1a2xqdcSNaXRlIFBveml2YW5qZSBwcmVrbyBXaS1GaS1qYS4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJ3ZmNPcGVyYXRvckVycm9yTm90aWZpY2F0aW9uTWVzc2FnZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI0ODM4NDczMjc0NjczMzEyOTgiPiJSZWdpc3RydWp0ZSBzZSBrb2QgbW9iaWxub2cgb3BlcmF0ZXJhIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJ3ZmNTcG5Gb3JtYXQiIG1zZ2lkPSI0OTgyOTM4NTUxNDk4NjA5NDQyIj4iV2ktRmkgcG96aXZhbmplIHByZWtvIG9wZXJhdGVyYSAlcyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCA5Y2ZhNmNmLi40ODRlNWE2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+ItCX0LDQutC70YPRh9C4INGB0LXQs9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCh0L7QtNGA0LbQuNC90LjRgtC1INGB0LUg0YHQutGA0LjQtdC90LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQsdC10LTQtdC9INGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodC40YHRgtC10LwgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0L3QuCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i0J7Qv9GE0LDRnNCwINC70LjRh9C90Lgg0L/QvtC00LDRgtC+0YbQuCDQutCw0LrQviDRiNGC0L4g0YHQtSDQsdGA0L7QtdCy0Lgg0L3QsCDQutGA0LXQtNC40YLQvdC4INC60LDRgNGC0LjRh9C60Lgg0Lgg0LvQvtC30LjQvdC60LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLQmtC+0L3RgtGA0L7Qu9C40YDQsNGY0YLQtSDQs9C+INC30LPQvtC70LXQvNGD0LLQsNGa0LXRgtC+INC90LAg0LXQutGA0LDQvdC+0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i0JrQvtC90YLRgNC+0LvQuNGA0LDRmNGC0LUg0LPQviDQvdC40LLQvtGC0L4g0L3QsCDQt9GD0LzQuNGA0LDRmtC1INC4INC/0L7Qt9C40YbQuNC+0L3QuNGA0LDRmtC1INC90LAg0LXQutGA0LDQvdC+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i0JrQvtGA0LjRgdGC0LXRgtC1INC00LLQuNC20LXRmtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLQnNC+0LbQtSDQtNCwINC00L7Qv9GA0LXRgtC1LCDQv9C+0LLQu9C10YfQtdGC0LUsINGI0YLQuNC/0L3QtdGC0LUg0Lgg0LTQsCDQutC+0YDQuNGB0YLQuNGC0LUg0LTRgNGD0LPQuCDQtNCy0LjQttC10ZrQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLQvtC90LXQstC+0LfQvNC+0LbQuCDQuNC70Lgg0LjQt9C80LXQvdC4INGB0YLQsNGC0YPRgdC90LAg0LvQtdC90YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLQlNC+0LfQstC+0LvRg9Cy0LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwINC00LAg0ZjQsCDQvtC90LXQstC+0LfQvNC+0LbQuCDRgdGC0LDRgtGD0YHQvdCw0YLQsCDQu9C10L3RgtCwINC40LvQuCDQtNCwINC00L7QtNCw0LLQsCDQuNC70Lgg0L7RgtGB0YLRgNCw0L3Rg9Cy0LAg0YHQuNGB0YLQtdC80YHQutC4INC40LrQvtC90LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ItC00LAg0YHRgtCw0L3QtSDRgdGC0LDRgtGD0YHQvdCwINC70LXQvdGC0LAiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLQntCy0L7Qt9C80L7QttGD0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQsNGC0LAg0LTQsCDQv9GA0LDQstC4INGE0L7RgtC+0LPRgNCw0YTQuNC4INC4INC00LAg0YHQvdC40LzQsCDQstC40LTQtdCwINGB0L4g0LrQsNC80LXRgNCw0YLQsC4g0J7QstCw0LAg0LTQvtC30LLQvtC70LAg0L7QstC+0LfQvNC+0LbRg9Cy0LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwINC00LAg0ZjQsCDQutC+0YDQuNGB0YLQuCDQutCw0LzQtdGA0LDRgtCwINCy0L4g0LrQvtC1INCx0LjQu9C+INCy0YDQtdC80LUg0LHQtdC3INCy0LDRiNCwINC/0L7RgtCy0YDQtNCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQutC+0L3RgtGA0L7Qu9C40YDQsNGYINCy0LjQsdGA0LDRhtC40LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItCU0L7Qt9Cy0L7Qu9GD0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQsNGC0LAg0LTQsCDQs9C4INC60L7QvdGC0YDQvtC70LjRgNCwINCy0LjQsdGA0LDRhtC40LjRgtC1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQutC+0L3RgtGA0L7Qu9C40YDQsNGYINGB0LjRmNCw0LvQuNGH0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i0JTQvtC30LLQvtC70YPQstCwINCw0L/Qu9C40LrQsNGG0LjRmNCw0YLQsCDQtNCwINGY0LAg0LrQvtC90YLRgNC+0LvQuNGA0LAg0LHQsNGC0LXRgNC40YHQutCw0YLQsCDQu9Cw0LzQsdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItC00LjRgNC10LrRgtC90L4g0LjQt9Cx0LjRgNCw0Zgg0YLQtdC70LXRhNC+0L3RgdC60Lgg0LHRgNC+0LXQstC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCe0LLQvtC30LzQvtC20YPQstCwINCw0L/Qu9C40LrQsNGG0LjRmNCw0YLQsCDQtNCwINC/0L7QstC40LrRg9Cy0LAg0YLQtdC70LXRhNC+0L3RgdC60Lgg0LHRgNC+0LXQstC4INCx0LXQtyDQstCw0YjQsCDQuNC90YLQtdGA0LLQtdC90YbQuNGY0LAuINCe0LLQsCDQvNC+0LbQtSDQtNCwINC/0YDQtdC00LjQt9Cy0LjQutCwINC90LXQvtGH0LXQutGD0LLQsNC90Lgg0YLRgNC+0YjQvtGG0Lgg0LjQu9C4INC/0L7QstC40YbQuC4g0JjQvNCw0ZjRgtC1INC90LAg0YPQvCDQtNC10LrQsCDQvtCy0LAg0L3QtSDQtNC+0LfQstC+0LvRg9Cy0LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwINC00LAg0L/QvtCy0LjQutGD0LLQsCDQsdGA0L7QtdCy0Lgg0L3QsCDRgdC70YPQttCx0Lgg0LfQsCDQuNGC0L3QsCDQv9C+0LzQvtGILiDQl9C70L7QvdCw0LzQtdGA0L3QuNGC0LUg0LDQv9C70LjQutCw0YbQuNC4INC80L7QttC1INC00LAg0LLQtSDRh9C40L3QsNGCINC/0LDRgNC4INC/0L7RgNCw0LTQuCDQv9C+0LLQuNGG0Lgg0LHQtdC3INCy0LDRiNCwINC/0L7RgtCy0YDQtNCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i0L/RgNC40YHRgtCw0L/QuCDQtNC+INGD0YHQu9GD0LPQsNGC0LAg0LfQsCDQv9C+0LLQuNGG0LggSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQmNGB0LXRh9C4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtC+0L/QuNGA0LDRmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCX0LDQu9C10L/QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i0JfQsNC70LXQv9C4INC60LDQutC+INC+0LHQuNGH0LXQvSDRgtC10LrRgdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLQl9Cw0LzQtdC90LguLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0JjQt9Cx0YDQuNGI0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+ItCa0L7Qv9C40YDQsNGYINCj0KDQmyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCY0LfQsdC10YDQuCDRgtC10LrRgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLQktGA0LDRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLQn9C+0LLRgtC+0YDQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQmNC30LHQvtGAINC90LAg0YLQtdC60YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQlNC+0LTQsNGYINCy0L4g0YDQtdGH0L3QuNC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLQmNC30LHRgNC40YjQuCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQn9GA0L7QvNC10L3QuCDRgtCw0L/QtdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i0KHQu9GD0YjQsNGC0LXQuyDQvdCwINC40LfQstC10YHRgtGD0LLQsNGa0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+ItCU0LDQstCw0YLQtdC7INC90LAg0YPRgdC70L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCf0L7QvNC+0YjQvdC40Log0LfQsCDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLQkNC60YLQuNCy0LjRgNCw0L3QsCBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4g0LUg0LDQutGC0LjQstC40YDQsNC90LAg0YHQviA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQlNC+0L/RgNC4INC30LAg0LTQsCDRg9C/0YDQsNCy0YPQstCw0Ygg0YHQviDQvNGA0LXQttCw0YLQsC4iPC9zdHJpbmc+CkBAIC0xMjUwLDcgKzEyNTUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZSIgbXNnaWQ9IjE3NTE2MTg1NTQ1MzkwODc2MjIiPiLQn9C+0LLRgNC30Lgg0YHQtSDRgdC+INGD0YDQtdC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl90aXRsZV9mb3JfcmVtb3RlX2Rpc3BsYXkiIG1zZ2lkPSIzMzk1NTQxNzQ1ODcyMDE3NTgzIj4i0J/RgNC10YTRgNC70Lgg0LXQutGA0LDQvSDQvdCwINGD0YDQtdC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfY2hvb3Nlcl9zZWFyY2hpbmciIG1zZ2lkPSI0Nzc2MjM2MjAyNjEwODI4NzA2Ij4i0J/RgNC10LHQsNGA0YPQstCw0ZrQtSDQt9CwINGD0YDQtdC00LguLi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jaG9vc2VyX2V4dGVuZGVkX3NldHRpbmdzIiBtc2dpZD0iODcwMTU1MzQyMzY3MDE2MDQiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3JvdXRlX2Nob29zZXJfZXh0ZW5kZWRfc2V0dGluZ3MiIG1zZ2lkPSI4NzAxNTUzNDIzNjcwMTYwNCI+ItCf0L7RgdGC0LDQstC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9jb250cm9sbGVyX2Rpc2Nvbm5lY3QiIG1zZ2lkPSI4OTY2MTIwMjg2Mzc0MTU4NjQ5Ij4i0JjRgdC60LvRg9GH0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9yb3V0ZV9zdGF0dXNfc2Nhbm5pbmciIG1zZ2lkPSI3Mjc5OTA4NzYxNzU4MjkzNzgzIj4i0KHQutC10L3QuNGA0LDRmtC1Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcm91dGVfc3RhdHVzX2Nvbm5lY3RpbmciIG1zZ2lkPSI2NDIyNTcxNzE2MDA3ODI1NDQwIj4i0KHQtSDQv9C+0LLRgNC30YPQstCwLi4uIjwvc3RyaW5nPgpAQCAtMTQ0MiwxMSArMTQ0Nyw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCQ0LbRg9GA0LjRgNCw0L3QviDQvtC0INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7RgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i0JjQt9Cx0YDQuNGI0LDQvdC+INC+0LQg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YDQvtGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLQl9CwINC00LAg0LLQuCDQv9C+0LzQvtCz0L3QtSDQtNCwINGY0LAg0L/QvtC00L7QsdGA0LjRgtC1INGC0YDQsNGY0L3QvtGB0YLQsCDQvdCwINCx0LDRgtC10YDQuNGY0LDRgtCwLCDRiNGC0LXQtNCw0YfQvtGCINC90LAg0LHQsNGC0LXRgNC40ZjQsNGC0LAg0ZjQsCDQvdCw0LzQsNC70YPQstCwINC40LfQstC10LTQsdCw0YLQsCDQvdCwINGD0YDQtdC00L7RgiDQuCDQs9C+INC+0LPRgNCw0L3QuNGH0YPQstCwINCy0LjQsdGA0LjRgNCw0ZrQtdGC0L4sINGD0YHQu9GD0LPQuNGC0LUg0LfQsCDQu9C+0LrQsNGG0LjRmNCwINC4INC/0L7QstC10ZzQtdGC0L4g0L/QvtC00LDRgtC+0YbQuCDQvtC0INC30LDQtNC90LjQvdCwLiDQlS3Qv9C+0YjRgtCw0YLQsCwg0LjRgdC/0YDQsNGc0LDRmtC10YLQviDQv9C+0YDQsNC60Lgg0Lgg0LTRgNGD0LPQuNGC0LUg0LDQv9C70LjQutCw0YbQuNC4INC60L7QuCDRgdC1INC/0L7RgtC/0LjRgNCw0LDRgiDQvdCwINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGY0LAg0LzQvtC20LXQsdC4INC90LXQvNCwINC00LAg0YHQtSDQsNC20YPRgNC40YDQsNCw0YIg0LTQvtC60L7Qu9C60YMg0L3QtSDQs9C4INC+0YLQstC+0YDQuNGC0LUuXG5cbtCo0YLQtdC00LDRh9C+0YIg0L3QsCDQsdCw0YLQtdGA0LjRmNCw0YLQsCDQsNCy0YLQvtC80LDRgtGB0LrQuCDRgdC1INC40YHQutC70YPRh9GD0LLQsCDQutC+0LPQsCDRg9GA0LXQtNC+0YIg0YHQtSDQv9C+0LvQvdC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i0JHQu9C+0LrQuNGA0LDQvdC+OiDQvdC40LrQvtCz0LDRiCDQvdC1INC/0L7QutCw0LbRg9Cy0LDRmCDQs9C4INC+0LLQuNC1INC40LfQstC10YHRgtGD0LLQsNGa0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0J3QuNGB0LrQvjog0L/QvtC60LDQttGD0LLQsNGYINCz0Lgg0YLQuNCy0LrQviDQvdCwINC00L3QvtGC0L4g0L3QsCDRgdC/0LjRgdC+0LrQvtGCINGB0L4g0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i0J3QvtGA0LzQsNC70L3Qvjog0L/QvtC60LDQttGD0LLQsNGYINCz0Lgg0L7QstC40LUg0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsCDRgtC40LLQutC+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLQktC40YHQvtC60L46INC/0L7QutCw0LbRg9Cy0LDRmCDQs9C4INC90LAg0LLRgNCyINC90LAg0YHQv9C40YHQvtC60L7RgiDRgdC+INC40LfQstC10YHRgtGD0LLQsNGa0LAg0Lgg0LTQsNGYINC30LLRg9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCY0YLQvdC+OiDQvdC10LrQsCDRgdC1INC/0L7RmNCw0LLQsNGCINC90LAg0LXQutGA0LDQvdC+0YIg0Lgg0LTQsNGYINC40Lwg0LfQstGD0LoiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7Ql9CwICUxJGQg0LzQuNC90YPRgtCwICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0JfQsCAlMSRkINC80LjQvdGD0YLQuCAo0LTQviA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEyLDQgKzE1MTIsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4g0YHQtSDQuNC30LHRgNCw0L3QuDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+ItCg0LDQt9C90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i0IjQsCDQv9C+0YHRgtCw0LLQuNCy0YLQtSDQstCw0LbQvdC+0YHRgtCwINC90LAg0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsNCy0LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLQntCy0LAg0LUg0LLQsNC20L3QviDQt9Cw0YDQsNC00Lgg0LvRg9GT0LXRgtC+INC60L7QuCDRgdC1INCy0LrQu9GD0YfQtdC90LguIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCmluZGV4IDNhM2VjNDEuLjQyYTlhODIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4LSH4LSq4LWN4LSq4LWL4LW+IOC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgtJXgtYvgtbrgtJ/gtL7gtJXgtY3igIzgtLHgtY3gtLHgtYHgtJXgtb4g4LSu4LSx4LSa4LWN4LSa4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4LS44LWB4LSw4LSV4LWN4LS34LS/4LSkIOC0ruC1i+C0oeC1jSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg4LS44LS/4LS44LWN4LSx4LWN4LSx4LSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLgtLXgtY3gtK/gtJXgtY3gtKTgtL/gtJfgtKTgtIIiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuC0leC1jeC0sOC1huC0oeC0v+C0seC1jeC0seC1jSDgtJXgtL7gtbzgtKHgtY0g4LSo4LSu4LWN4LSq4LSx4LWB4LSV4LSz4LWB4LSCIOC0quC0vuC0uOC1jeKAjOC0teC1h+C0oeC1geC0leC0s+C1geC0giDgtKrgtYvgtLLgtYHgtLPgtY3gtLMg4LS14LWN4LSv4LSV4LWN4LSk4LS/4LSX4LSkIOC0oeC0vuC0seC1jeC0sSDgtIngtb7gtKrgtY3gtKrgtYbgtJ/gtYHgtKjgtY3gtKjgtYEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLgtKHgtL/gtLjgtY3gtKrgtY3gtLLgtYcg4LSu4LS+4LSX4LWN4LSo4LS/4LSr4LS/4LSV4LWN4LSV4LWH4LS34LW7IOC0qOC0v+C0r+C0qOC1jeC0pOC1jeC0sOC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLgtKHgtL/gtLjgtY3gtKrgtY3gtLLgtYfgtK/gtYHgtJ/gtYYg4LS44LWC4LSCIOC0qOC0v+C0suC0r+C1geC0giDgtKrgtYrgtLjgtL/gtLfgtKjgtL/gtILgtJfgtYHgtIIg4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuC0nOC1huC0uOC1jeKAjOC0seC1jeC0seC0seC1geC0leC1viDgtKjgtL/gtbzgtLXgtLngtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IuC0n+C0vuC0quC1jeC0quC1geC0muC1huC0r+C1jeC0r+C0vuC0qOC1iyDgtLjgtY3gtLXgtYjgtKrgtY3gtKrgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtKjgtYsg4LSq4LS/4LSe4LWN4LSa4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LSo4LWLIOC0ruC0seC1jeC0seC1jSDgtJzgtYbgtLjgtY3igIzgtLHgtY3gtLHgtLHgtYHgtJXgtb4g4LSo4LS/4LW84LS14LS54LS/4LSV4LWN4LSV4LS+4LSo4LWLIOC0leC0tOC0v+C0r+C1geC0gi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgtLjgtY3gtLHgtY3gtLHgtL7gtLHgtY3gtLHgtLjgtY0g4LSs4LS+4LW8IOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0sOC0ueC0v+C0pOC0ruC0vuC0leC1jeC0leC1geC0lSDgtIXgtLLgtY3gtLLgtYbgtJngtY3gtJXgtL/gtb0g4LSq4LSw4LS/4LS34LWN4oCM4LSV4LWN4LSV4LSw4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuC0qOC0v+C0siDgtKzgtL7gtbwg4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSw4LS54LS/4LSk4LSu4LS+4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNIOC0heC0suC1jeC0suC1huC0meC1jeC0leC0v+C1vSDgtLjgtL/gtLjgtY3igIzgtLHgtY3gtLHgtIIg4LSQ4LSV4LWN4LSV4LSj4LWB4LSV4LW+IOC0muC1h+C1vOC0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC1geC0giDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtYHgtIIg4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWGIOC0heC0qOC1geC0teC0puC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC1gS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i4LS44LWN4LSx4LWN4LSx4LS+4LSx4LWN4LSx4LS44LWNIOC0rOC0vuC1vCDgtIbgtK/gtL/gtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgtJXgtY3gtK/gtL7gtK7gtLEg4LSJ4LSq4LSv4LWL4LSX4LS/4LSa4LWN4LSa4LWNIOC0muC0v+C0pOC1jeC0sOC0meC1jeC0meC0s+C1geC0giDgtLXgtYDgtKHgtL/gtK/gtYvgtJXgtLPgtYHgtIIg4LSO4LSf4LWB4LSV4LWN4LSV4LS+4LW7IOC0heC0quC1jeC0suC0v+C0leC1jeC0leC1h+C0t+C0qOC1hiDgtIXgtKjgtYHgtLXgtKbgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEuIOC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtLjgtY3gtKXgtL/gtLDgtYDgtJXgtLDgtKPgtK7gtL/gtLLgtY3gtLLgtL7gtKTgtYYg4LSP4LSk4LWB4LS44LSu4LSv4LSk4LWN4LSk4LWB4LSCIOC0leC1jeC0r+C0vuC0ruC0sSDgtIngtKrgtK/gtYvgtJfgtL/gtJXgtY3gtJXgtL7gtbsg4LSIIOC0heC0qOC1geC0ruC0pOC0vyDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYYg4LSF4LSo4LWB4LS14LSm4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgtLXgtYjgtKzgtY3gtLDgtYfgtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3gtK/gtb0g4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgtLXgtYjgtKzgtY3gtLDgtYfgtLHgtY3gtLHgtbwg4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNIOC0heC0quC1jeC0suC0v+C0leC1jeC0leC1h+C0t+C0qOC1hiDgtIXgtKjgtYHgtLXgtKbgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuC0n+C1i+C1vOC0muC1jeC0muC1jSDgtKjgtL/gtK/gtKjgtY3gtKTgtY3gtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuC0q+C1jeC0suC0vuC0t+C1jeC0suC1iOC0seC1jeC0seC0v+C0qOC1hiDgtKjgtL/gtK/gtKjgtY3gtKTgtY3gtLDgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtKTgtL/gtKjgtY0g4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWGIOC0heC0qOC1geC0teC0puC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC1gS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgtKvgtYvgtbog4LSo4LSu4LWN4LSq4LSx4LWB4LSV4LSz4LS/4LSy4LWH4LSV4LWN4LSV4LWNIOC0qOC1h+C0sOC0v+C0n+C1jeC0n+C1jSDgtLXgtL/gtLPgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0h+C0n+C0quC1huC0n+C1vSDgtIfgtLLgtY3gtLLgtL7gtKTgtYYg4LSr4LWL4LW6IOC0qOC0ruC1jeC0quC0seC1geC0leC0s+C0v+C0suC1h+C0leC1jeC0leC1jSDgtJXgtYvgtb4g4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0heC0quC1jeC0suC0v+C0leC1jeC0leC1h+C0t+C0qOC1hiDgtIXgtKjgtYHgtLXgtKbgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEuIOC0h+C0pOC1jSDgtIXgtKrgtY3gtLDgtKTgtYDgtJXgtY3gtLfgtL/gtKQg4LSo4LS/4LSw4LSV4LWN4LSV4LWB4LSV4LW+4LSV4LWN4LSV4LWLIOC0leC1i+C0s+C1geC0leC1vuC0leC1jeC0leC1iyDgtIfgtJ/gtK/gtL7gtJXgtY3gtJXgtL7gtIIuIOC0h+C0pOC1jSDgtIXgtJ/gtL/gtK/gtKjgtY3gtKTgtLAg4LSo4LSu4LWN4LSq4LSx4LWB4LSV4LSz4LS/4LSy4LWH4LSV4LWN4LSV4LWNIOC0teC0v+C0s+C0v+C0leC1jeC0leC0vuC1uyDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYYg4LSF4LSo4LWB4LS14LSm4LS/4LSV4LWN4LSV4LS/4LSy4LWN4LSy4LWG4LSo4LWN4LSoIOC0leC0vuC0sOC1jeC0r+C0giDgtLbgtY3gtLDgtKbgtY3gtKfgtL/gtJXgtY3gtJXgtYHgtJUuIOC0leC1jeC0t+C1geC0puC1jeC0sOC0leC0sOC0ruC0vuC0ryDgtIXgtKrgtY3gtLLgtL/gtJXgtY3gtJXgtYfgtLfgtKjgtYHgtJXgtb4g4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0uOC1jeC0peC0v+C0sOC1gOC0leC0sOC0o+C0ruC0v+C0suC1jeC0suC0vuC0pOC1hiDgtJXgtYvgtLPgtYHgtJXgtb4g4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LWNIOC0quC0o+C0muC1jeC0muC1huC0suC0teC0v+C0qOC0v+C0n+C0r+C0vuC0leC1jeC0leC0vuC0gi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgtJXgtYvgtb4g4LS44LWH4LS14LSo4LSCIOC0huC0leC1jeC0uOC0uOC1jSDgtJrgtYbgtK/gtY3gtK/gtYHgtJUiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuC0ruC1geC0seC0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4LSq4LSV4LSw4LWN4oCN4LSk4LWN4LSk4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4LSS4LSf4LWN4LSf4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgtKrgtY3gtLLgtYbgtK/gtL/gtbsg4LSf4LWG4LSV4LWN4oCM4LS44LWN4LSx4LWN4LSx4LS+4LSv4LS/IOC0kuC0n+C1jeC0n+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4LSu4LS+4LSx4LWN4LSx4LS/4LS44LWN4LSl4LS+4LSq4LS/4LSV4LWN4LSV4LWB4LSVLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOC0quC0leC1vOC0pOC1jeC0pOC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC0n+C1huC0leC1jeKAjOC0uOC1jeKAjOC0seC1jeC0seC1jSDgtKTgtL/gtLDgtJ7gtY3gtJ7gtYbgtJ/gtYHgtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuC0quC0tOC0r+C0quC0n+C0v+C0r+C0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i4LS14LWA4LSj4LWN4LSf4LWB4LSCIOC0muC1huC0r+C1jeC0r+C1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgtJ/gtYbgtJXgtY3igIzgtLjgtY3gtLHgtY3gtLHgtY0g4LSk4LS/4LSw4LSe4LWN4LSe4LWG4LSf4LWB4LSV4LWN4LSV4LW9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC0qOC0v+C0mOC0o+C1jeC0n+C1geC0teC0v+C1vSDgtJrgtYfgtbzgtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgtLXgtL7gtb7gtKrgtYfgtKrgtY3gtKrgtbwg4LSu4LS+4LSx4LWN4LSx4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWNIOC0suC0v+C0uOC0o+C1vCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4LSV4LSj4LWN4LSf4LWA4LS34LW7IOC0puC0vuC0pOC0vuC0teC1jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IuC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1jSDgtLjgtLngtL7gtK/gtL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDgtLjgtJzgtYDgtLXgtK7gtL7gtJXgtY3gtJXgtL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LSJ4LSq4LSv4LWL4LSX4LS/4LSa4LWN4LSa4LWNIFZQTiDgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtJXgtY3gtLfgtK7gtK7gtL7gtJXgtY3gtJXgtL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgtKjgtYbgtLHgtY3gtLHgtY3igIzgtLXgtbzgtJXgtY3gtJXgtY0g4LSo4LS/4LSv4LSo4LWN4LSk4LWN4LSw4LS/4LSV4LWN4LSV4LS+4LW7IOC0uOC1jeKAjOC0quC1vOC0tuC0v+C0leC1jeC0leC1geC0lS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0heC0oeC1jeKAjOC0ruC0v+C0qOC0v+C0uOC1jeKAjOC0n+C1jeC0sOC1h+C0seC1jeC0seC1vCDgtIXgtKrgtY3igIzgtKHgtYfgtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3igIzgtKTgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIXgtKHgtY3igIzgtK7gtL/gtKjgtL/gtLjgtY3igIzgtJ/gtY3gtLDgtYfgtLHgtY3gtLHgtbwg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgtKzgtL7gtLHgtY3gtLHgtLHgtL8g4LSG4LSv4LWB4LS44LWN4LS44LWNIOC0ruC1huC0muC1jeC0muC0quC1jeC0quC1huC0n+C1geC0pOC1jeC0pOC0vuC1uyDgtLjgtLngtL7gtK/gtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtKTgtL/gtKjgtY0sIOC0rOC0vuC0seC1jeC0seC0seC0vyDgtLjgtYfgtLXgtbwg4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0ieC0quC0leC0sOC0o+C0pOC1jeC0pOC0v+C0qOC1jeC0seC1hiDgtKrgtY3gtLDgtJXgtJ/gtKjgtKTgtY3gtKTgtYYg4LSV4LWB4LSx4LSv4LWN4oCM4LSV4LWN4LSV4LWB4LSV4LSv4LWB4LSCIOC0teC1iOC0rOC1jeC0sOC1h+C0t+C0qOC1huC0r+C1geC0giDgtK7gtL/gtJXgtY3gtJUg4LSq4LS24LWN4LSa4LS+4LSk4LWN4LSk4LSyIOC0teC0v+C0teC0sOC0pOC1jeC0pOC1huC0r+C1geC0giDgtKrgtLDgtL/gtK7gtL/gtKTgtKrgtY3gtKrgtYbgtJ/gtYHgtKTgtY3gtKTgtYHgtJXgtK/gtYHgtIIg4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LWBLiDgtIfgtK7gtYbgtK/gtL/gtb0sIOC0uOC0qOC1jeC0puC1h+C0tuC0ruC0r+C0r+C1jeKAjOC0leC1jeC0leC1vSwg4LS44LSu4LSo4LWN4LS14LSv4LS/4LSq4LWN4LSq4LS/4LSV4LWN4LSV4LSy4LS/4LSo4LWGIOC0huC0tuC1jeC0sOC0r+C0v+C0muC1jeC0muC1geC0s+C1jeC0syDgtK7gtLHgtY3gtLHgtY0g4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWB4LSV4LW+IOC0juC0qOC1jeC0qOC0v+C0tSDgtKjgtL/gtJngtY3gtJngtb4g4LSk4LWB4LSx4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LWB4LS14LSw4LWGIOC0heC0quC1jeKAjOC0oeC1h+C0seC1jeC0seC1geC0muC1huC0r+C1jeC0r+C0vuC0qOC0v+C0n+C0r+C0v+C0suC1jeC0si5cblxu4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0ieC0quC0leC0sOC0o+C0giDgtJrgtL7gtbzgtJzgtY3gtJzgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtK7gtY3gtKrgtYvgtb4g4LSs4LS+4LSx4LWN4LSx4LSx4LS/IOC0uOC1h+C0teC1vCDgtLjgtY3gtLXgtK/gtIIg4LST4LSr4LS+4LSV4LWB4LSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4LSs4LWN4LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSk4LWBOiDgtIgg4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWB4LSV4LW+IOC0kuC0sOC0v+C0leC1jeC0leC0suC1geC0giDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtLDgtYHgtKTgtY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LSk4LS+4LS04LWN4LSo4LWN4LSo4LSk4LWNOiDgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtY0g4LSy4LS/4LS44LWN4LSx4LWN4LSx4LS/4LSo4LWN4LSx4LWGIOC0pOC0vuC0tOC1hiDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtL7gtKTgtYYg4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgtLjgtL7gtKfgtL7gtLDgtKPgtII6IOC0iCDgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtYHgtJXgtb4g4LSo4LS/4LS24LSs4LWN4LSm4LSu4LS+4LSv4LS/IOC0leC0vuC0o+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LSJ4LSv4LW84LSo4LWN4LSo4LSk4LWNOiDgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtY0g4LSy4LS/4LS44LWN4LSx4LWN4LSx4LS/4LSo4LWN4LSx4LWGIOC0j+C0seC1jeC0seC0teC1geC0giDgtK7gtYHgtJXgtLPgtL/gtb0g4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVLCDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LSF4LSf4LS/4LSv4LSo4LWN4LSk4LSw4LSCOiDgtLjgtY3gtJXgtY3gtLDgtYDgtKjgtL/gtb0g4LSm4LWD4LS24LWN4LSv4LSu4LS+4LSV4LWN4LSV4LWB4LSVLCDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiUxJGQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNIOC0uOC0ruC0r+C0pOC1jeC0pOC1h+C0leC1jeC0leC1jSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4LS14LSw4LWGKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuC0kuC0sOC1gSDgtK7gtL/gtKjgtL/gtLHgtY3gtLHgtY0g4LS44LSu4LSv4LSk4LWN4LSk4LWH4LSV4LWN4LSV4LWNICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDgtLXgtLDgtYYpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDgtKTgtL/gtLDgtJ7gtY3gtJ7gtYbgtJ/gtYHgtKTgtY3gtKTgtYE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLgtKrgtLLgtLXgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i4LSIIOC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1geC0leC0s+C1geC0n+C1hiDgtKrgtY3gtLDgtL7gtKfgtL7gtKjgtY3gtK/gtIIg4LSo4LS/4LSZ4LWN4LSZ4LW+IOC0uOC0nOC1jeC0nOC1gOC0leC0sOC0v+C0muC1jeC0muC1gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuC0ieC1vuC0quC1jeC0quC1huC0n+C1jeC0n+C0v+C0n+C1jeC0n+C1geC0s+C1jeC0syDgtIbgtLPgtYHgtJXgtLPgtYYg4LSV4LSj4LSV4LWN4LSV4LS/4LSy4LWG4LSf4LWB4LSV4LWN4LSV4LWB4LSu4LWN4LSq4LWL4LSz4LWN4oCNIOC0h+C0pOC1jSDgtKrgtY3gtLDgtKfgtL7gtKjgtKrgtY3gtKrgtYbgtJ/gtY3gtJ/gtKTgtL7gtKPgtY3igIwuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCmluZGV4IGFiMjI4NWIuLjkxYjllYTcgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i0J7QtNC+0L4g0YLSr9Cz0LbQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCa0L7QvdGC0LXQvdGC0YvQsyDQvdGD0YPRgdCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkNGO0YPQu9Cz0q/QuSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i0JDQvdC00YDQvtC50LQg0YHQuNGB0YLQtdC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQpdGD0LLQuNC50L0iPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+ItCa0YDQtdC00LjRgiDQutCw0YDRgtGL0L0g0LTRg9Cz0LDQsNGAINCx0L7Qu9C+0L0g0L3Rg9GD0YYg0q/QsyDQt9GN0YDRjdCzINGF0YPQstC40LnQvSDQtNCw0YLQsNCzINCw0LPRg9GD0LvQtiDQsdCw0LnQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i0JTRjdC70LPRjdGG0LjQudC9INOp0YHQs9Op0LvRgtC40LnQsyDRhdGP0L3QsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDRgtC+0LzRgNGD0YPQu9Cw0YUg0YLSr9Cy0YjQuNC9INCx0L7Qu9C+0L0g0LHQsNC50YDRiNC70YvQsyDRhdGP0L3QsNGFLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+ItCX0LDQvdCz0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i0KLQvtCy0YjQuNGFLCDRiNGD0LTRgNCw0YUsINC20LjQttC40LPRgNKv0q/Qu9GN0YUg0LHQvtC70L7QvSDQsdGD0YHQsNC0INC30LDQvdCz0LDQsNCzINGF0LjQudGFINCx0L7Qu9C+0LzQttGC0L7QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLRgdGC0LDRgtGD0YEg0YHQsNC80LHQsNGA0YvQsyDQuNC00Y3QstGF0LPSr9C5INCx0L7Qu9Cz0L7RhSDQsdC+0LvQvtC9INOp06nRgNGH0LvTqdGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ItCQ0L/QvyDQvdGMINGB0YLQsNGC0YPRgSDRgdCw0LzQsdCw0YDRi9CzINC40LTRjdCy0YXQs9Kv0Lkg0LHQvtC70LPQvtGFINGN0YHQstGN0Lsg0YHQuNGB0YLQtdC8INC00q/RgNGB0LjQudCzINC90Y3QvNGN0YUsINGF0LDRgdCw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLRgdGC0LDRgtGD0YHRi9C9INGF0Y3RgdGN0LMg0LHQvtC70L7RhSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+ItCQ0L/QvyDQvdGMINC60LDQvNC10YDQsNCw0YAg0LfRg9GA0LDQsyDQsNCy0LDRhSDQsdC+0LvQvtC9INCy0LjQtNC10L4g0LHQuNGH0LjRhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3RjSDQt9Op0LLRiNOp06nRgNOp0Lsg0L3RjCDQsNC/0L8t0LQg0Y/QvNCw0YAg0Ycg0q/QtdC0INGC0LDQvdGLINC306nQstGI06nTqdGA06nQu9Cz0q/QudCz0Y3RjdGAINC60LDQvNC10YAg0LDRiNC40LPQu9Cw0YUg0LHQvtC70L7QvNC20LjQudCzINC+0LvQs9C+0L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0YfQuNGH0LjRgNCz0Y3RjdCzINGD0LTQuNGA0LTQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLQkNC/0L8g0L3RjCDRh9C40YfQuNGA0LPRjdGN0LMg0YPQtNC40YDQtNCw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQs9Cw0YAg0YfQuNC50LTRjdC9INGD0LTQuNGA0LTQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQkNC/0L8g0L3RjCDQs9Cw0YAg0YfQuNC50LTRjdC90LMg0YPQtNC40YDQtNCw0YUg0LHQvtC70L7QvNC20YLQvtC5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItGD0YLQsNGB0L3RiyDQtNGD0LPQsNCw0YDRgiDRiNGD0YPQtCDQtNGD0YPQtNC70LDQs9CwINGF0LjQudGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCQ0L/QvyDQvdGMINGC0LDQvdGLINC+0YDQvtC70YbQvtC+0LPSr9C50LPRjdGN0YAg0LTRg9GD0LTQu9Cw0LPQsCDRhdC40LnRhSDQsdC+0LvQvtC80LbRgtC+0LkuINCt0L3RjSDQvdGMINGC06nQu9Op0LLQu9Op0LPQtNOp06nQs9Kv0Lkg0YLTqdC70LHTqdGA0YIg0L7RgNGD0YPQu9Cw0YUg0Y3RgdCy0Y3QuyDQtNGD0YPQtNC70LDQs9CwINGF0LjQudC90Y0uINCt0L3RjSDQvdGMINCw0L/Qvy3QsyDRj9Cw0YDQsNC70YLQsNC5INC00YPQs9Cw0LDRgNGCINC00YPRg9C00LvQsNCz0LAg0YXQuNC50YXQudCzINC306nQstGI06nTqdGA06nRhdCz0q/QuS4g0KXQvtGA0YLQvtC5INCw0L/QvyDQvdGMINGC0LDQvdGLINC306nQstGI06nTqdGA06nQu9Cz0q/QudCz0Y3RjdGAINC00YPRg9C00LvQsNCz0LAg0YXQuNC50LYg0YLQsNC90YvQsyDRgtOp0LvQsdOp0YDRgiDQvtGA0YPRg9C70LYg0LHQvtC70LfQvtGI0LPSr9C5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg0LTRg9GD0LTQu9Cw0LPRi9C9INKv0LnQu9GH0LjQu9Cz0Y3RjdC90LQg0YXQsNC90LTQsNGFIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQotCw0YHQu9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCl0YPRg9C70LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCR0YPRg9C70LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQpdC+0L7RgdC+0L0g0YLQtdC60YHRgiDRhdGN0LvQsdGN0YDRjdGN0YAg0LHRg9GD0LvQs9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCe0YDQu9GD0YPQu9Cw0YXigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg0YXRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0KLQtdC60YHRgiDRgdC+0L3Qs9C+0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCR0YPRhtCw0LDRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i0JTQsNGF0LjQvSDRhdC40LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQotC10LrRgdGCINGB0L7QvdCz0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQotC+0LvRjCDQsdC40YfQuNCz0YIg0L3RjdC80Y3RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0KPRgdGC0LPQsNGFIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+ItCl0LDQvdGL0L0g0LfRg9GA0LDQsyDRgdC+0LvQuNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i0JzRjdC00Y3Qs9C00Y3QuyDRgdC+0L3RgdC+0LPRhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0J3TqdGF0YbTqdC7INC90LjQudC70q/Sr9C70Y3Qs9GHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i0JzRjdC00Y3Qs9C00LvQuNC50L0g0YLRg9GB0LvQsNCz0YciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDQuNC00Y3QstGF0YLRjdC5INCx0L7Qu9C+0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4t0LMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC40LTRjdCy0YXRgtGN0Lkg0LHQvtC70LPQvtCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0KHSr9C70LbRjdGN0LMg0YPQtNC40YDQtNCw0YUg0LHQvtC7INGF0q/RgNC90Y0g0q/Sry4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i0KLQsNC90LDQuSDQsNC00LzQuNC9INGI0LjQvdGN0YfQuNC70YHRjdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQotCw0L3RiyDQsNC00LzQuNC9INGD0YHRgtCz0LDRgdCw0L0g0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0JHQsNGC0LDRgNC10Lkg0YXQsNC00LPQsNC70LDRhSDRhNGD0L3QutGGINC90Ywg0YLQsNC90Ysg0YLTqdGF06nTqdGA06nQvNC20LjQudC9INGG0Y3QvdGN0LPQuNC50LMg0YXQsNC00LPQsNC70LDRhdGL0L0g0YLRg9C70LQg0LPSr9C50YbRjdGC0LPRjdC70LjQudCzINCx0LDQs9Cw0YHQs9Cw0LYsINGH0LjRh9GA0Y3Qu9GC0LjQudCzINCx0YPRg9GA0YPRg9C70LYsINCx0LDQudGA0YjQu9GL0L0g0q/QudC70YfQuNC70LPRjdGN0L3Sr9Kv0LQg0LHQvtC70L7QvSDQsdGD0YHQsNC0INOp0LPTqdCz0LTQu9C40LnQvSDRhdGN0LzQttGN0Y3QsyDQsdCw0LPQsNGB0LPQsNC00LDQsyDRjtC8LiDQmC3QvNGN0LnQuywg0LzQtdGB0YHQtdC2INCx0L7Qu9C+0L0g0LHRg9GB0LDQtCDRgdC40L3RhdGA0L7QvSDRhdC40LnQtNGN0LMg0LDQv9C70LjQutC10LnRiNC90q/Sr9C0INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvdGN0Y3Qs9C00Y3RhSDRhdKv0YDRgtC70Y3RjSDQsNCy0YLQvtC80LDRgtCw0LDRgCDRiNC40L3RjdGH0LvRjdC70YIg0YXQuNC50YXQs9Kv0LkuXG5cbtCc06nQvSDQsdCw0YLQsNGA0LXQuSDRhdCw0LTQs9Cw0LvQsNGFINGE0YPQvdC60YYg0L3RjCDRgtCw0L3Ri9CzINGC06nRhdOp06nRgNOp0LzQttOp06kg0YbRjdC90Y3Qs9C70Y3RhSDSr9C10LQg0LDQstGC0L7QvNCw0YLQsNCw0YAg0YPQvdGC0YDQsNGFINGO0LwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQkdC70L7QutC70L7RgdC+0L06INCt0LTQs9GN0Y3RgCDQvNGN0LTRjdCz0LTQu9C40LnQsyDRhdGN0LfRjdGNINGHINGF0LDRgNGD0YPQu9Cw0YXQs9Kv0LkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0JHQsNCz0LA6INCc0Y3QtNGN0LPQtNC70LjQudCzINC20LDQs9GB0LDQsNC70YLRi9C9INC00L7QvtC0INGF0Y3RgdGN0LPRgiDQtNGD0YPQs9Kv0Lkg0YXQsNGA0YPRg9C70LDRhSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i0JXRgNC00LjQudC9OiDQrdC00LPRjdGN0YAg0LzRjdC00Y3Qs9C00LvQuNC50LMg0LTRg9GD0LPSr9C5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+ItOo0L3QtNOp0YA6INC80Y3QtNGN0LPQtNC70LjQudCzINC20LDQs9GB0LDQsNC70YLRi9C9INGN0YXRjdC90LQg0LTRg9GD0YLQsNC5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i0K/QsNGA0LDQu9GC0LDQuTog0JTRjdC70LPRjdGG0Y3QvdC0INGP0LDRgNCw0LvRgtCw0LksINC00YPRg9GC0LDQuSDQs9Cw0YDQs9Cw0YUiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPiAlMSRkINC80LjQvdGD0YLRi9C9INGC0YPRgNGIICggPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g0YXSr9GA0YLRjdC7KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtC90Y3QsyDQvNC40L3Rg9GC0YvQvSDRgtGD0YDRiCAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4g0YXSr9GA0YLRjdC7KTwvaXRlbT4KQEAgLTE1MDgsNCArMTUwOCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4g0YHQvtC90LPQvtGB0L7QvTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+ItCR0YPRgdCw0LQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i0KLQsCDRjdC00LPRjdGN0YAg0LzRjdC00Y3Qs9C00LvQuNC50L0g0LDRhyDRhdC+0LvQsdC+0LPQtNC70YvQsyDRgtC+0LPRgtC+0L7RgdC+0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLQntGA0L7Qu9GG0YHQvtC9INGF0q/QvNKv0q/RgdGN0Y3RgSDRiNCw0LvRgtCz0LDQsNC70LDQvSDRjdC90Y0g0L3RjCDTqdC90LTTqdGAINCw0Ycg0YXQvtC70LHQvtCz0LTQvtC70YLQvtC5LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCA5MmYxMTRhLi4wY2IzN2RhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCkhuCkpOCkviDgpLLgpYngpJUg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCksuCkquCkteCkv+CksuClh+CksuClgCDgpLjgpL7gpK7gpJfgpY3gpLDgpYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgpLjgpL/gpLjgpY3igI3gpJ/gpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCkteCliOCkr+CkleCljeCkpOCkv+CklSI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KSV4KWN4KSw4KWH4KSh4KS/4KSfIOCkleCkvuCksOCljeCkoSDgpKjgpILgpKzgpLAg4KSG4KSj4KS/IOCkuOCkguCkleClh+CkpOCktuCkrOCljeKAjeCkpiDgpK/gpL7gpLjgpL7gpLDgpJbgpL4g4KS14KWI4KSv4KSV4KWN4KSk4KS/4KSVIOCkoeClh+Ckn+CkviDgpLjgpK7gpL7gpLXgpL/gpLfgpY3igI3gpJ8g4KSV4KSw4KSk4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkteCkv+CkuOCljeCkpOClg+CkpOClgOCkleCksOCkoyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuCkquCljeCksOCkpuCksOCljeCktuCkqOCkvuCkmuCkviDgpJ3gpYLgpK4g4KS44KWN4KSk4KSwIOCkhuCko+CkvyDgpLjgpY3gpKXgpL/gpKTgpYAg4KSo4KS/4KSw4KWN4KSn4KS+4KSw4KSjIOCkqOCkv+Ckr+CkguCkpOCljeCksOCkv+CkpCDgpJXgpLDgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i4KSc4KWH4KS24KWN4KSa4KSwIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4KSf4KWF4KSqLCDgpLjgpY3gpLXgpL7gpIfgpKosIOCkquCkv+CkguCkmiDgpIbgpKPgpL8g4KSH4KSk4KSwIOCknOClh+CktuCljeCkmuCksCDgpJXgpLDgpYIg4KS24KSV4KSk4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuCkuOCljeCkn+Clh+Ckn+CkuCDgpKzgpL7gpLAg4KSF4KSV4KWN4KS34KSuIOCkleCksOCkviDgpJXgpL/gpILgpLXgpL4g4KS44KWB4KSn4KS+4KSw4KS/4KSkIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgpLjgpY3gpJ/gpYfgpJ/gpLgg4KSs4KS+4KSwIOCkheCkleCljeCkt+CkriDgpJXgpLDgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KSV4KS/4KSC4KS14KS+IOCkuOCkv+CkuOCljeCkn+ClgOCkriDgpJrgpL/gpKjgpY3gpLngpYcg4KSc4KWL4KSh4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkhuCko+CkvyDgpJXgpL7gpKLgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KSF4KWF4KSqIOCksuCkviDgpIXgpKjgpYHgpK7gpKTgpYAg4KSm4KWH4KSk4KWHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLgpLjgpY3gpJ/gpYfgpJ/gpLgg4KSs4KS+4KSwIOCkueCli+CkiiDgpKbgpY3gpK/gpL4iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLgpJXgpYXgpK7gpYfgpLDgpY3igI3gpK/gpL7gpLjgpLkg4KSa4KS/4KSk4KWN4KSw4KWHIOCkhuCko+CkvyDgpLXgpY3gpLngpL/gpKHgpL/gpJMg4KSY4KWH4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheClheCkqiDgpLLgpL4g4KSF4KSo4KWB4KSu4KSk4KWAIOCkpuClh+CkpOClhy4g4KS54KWAIOCkquCksOCkteCkvuCkqOCkl+ClgCDgpIbgpKrgpLLgpY3gpK/gpL4g4KSq4KWB4KS34KWN4KSf4KWA4KSV4KSw4KSj4KS+4KS24KS/4KS14KS+4KSvIOCkleCli+Cko+CkpOCljeCkr+CkvuCkueClgCDgpLXgpYfgpLPgpYAg4KSV4KWF4KSu4KWH4KSw4KS+IOCkteCkvuCkquCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpIXgpYXgpKog4KSy4KS+IOCkquCksOCkteCkvuCkqOCkl+ClgCDgpKbgpYfgpKTgpYcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCkleCkguCkquCkqCDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgpIXgpYXgpKog4KSy4KS+IOCkteCljeCkueCkvuCkr+CkrOCljeCksOClh+Ckn+CksCDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkheCkqOClgeCkruCkpOClgCDgpKbgpYfgpKTgpYcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCkq+CljeCksuClheCktuCksuCkvuCkh+CknyDgpKjgpL/gpK/gpILgpKTgpY3gpLDgpL/gpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgpKvgpY3gpLLgpYXgpLbgpLLgpL7gpIfgpJ8g4KSo4KS/4KSv4KSC4KSk4KWN4KSw4KS/4KSkIOCkleCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpIXgpYXgpKog4KSy4KS+IOCkheCkqOClgeCkruCkpOClgCDgpKbgpYfgpKTgpYcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4KSr4KWL4KSoIOCkqOCkguCkrOCksOCkteCksCDgpKrgpY3gpLDgpKTgpY3gpK/gpJXgpY3gpLcg4KSV4KWJ4KSyIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLgpIbgpKrgpLLgpY3gpK/gpL4g4KS54KS44KWN4KSk4KSV4KWN4KS34KWH4KSq4KS+4KS24KS/4KS14KS+4KSvIOCkq+Cli+CkqCDgpKjgpILgpKzgpLDgpLXgpLAg4KSV4KWJ4KSyIOCkleCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpIXgpYXgpKog4KSy4KS+IOCkheCkqOClgeCkruCkpOClgCDgpKbgpYfgpKTgpYcuIOCkr+CkvuCkruClgeCks+ClhyDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KS24KWB4KSy4KWN4KSVIOCkleCkv+CkguCkteCkviDgpJXgpYngpLIg4KSy4KS+4KSX4KWCIOCktuCkleCkpOCkvuCkpC4g4KSy4KSV4KWN4KS34KS+4KSkIOCkoOClh+CkteCkviDgpJXgpYAg4KS54KWHIOCkhuCko+ClgOCkrOCkvuCko+ClgOCkmuCljeCkr+CkviDgpKjgpILgpKzgpLDgpLXgpLAg4KSV4KWJ4KSyIOCkleCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpIXgpYXgpKog4KSy4KS+IOCkheCkqOClgeCkruCkpOClgCDgpKbgpYfgpKQg4KSo4KS+4KS54KWALiDgpKbgpYHgpLDgpY3gpK3gpL7gpLXgpKjgpL7gpKrgpYLgpLDgpY3gpKMg4KSF4KWF4KSq4KWN4KS4IOCkqOClgCDgpIbgpKrgpLLgpY3gpK/gpL4g4KSq4KWB4KS34KWN4KSf4KS/4KSV4KSw4KSj4KS+4KS24KS/4KS14KS+4KSvIOCkleClieCksiDgpJXgpYfgpLLgpY3gpK/gpL7gpK7gpYHgpLPgpYcg4KSG4KSq4KSy4KWHIOCkquCliOCkuOClhyDgpJbgpLDgpY3gpJog4KS54KWL4KSKIOCktuCkleCkpOCkvuCkpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgpJXgpYngpLIg4KS44KWH4KS14KWH4KSu4KSn4KWN4oCN4KSv4KWHIOCkquCljeCksOCkteClh+CktiDgpJXgpLDgpL4iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCknyDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IuCkleClieCkquClgCDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLgpKrgpYfgpLjgpY3gpJ8g4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgpLjgpL7gpKfgpL4g4KSu4KSc4KSV4KWC4KSwIOCkruCljeCkueCko+ClguCkqCDgpKrgpYfgpLjgpY3gpJ8g4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgpKrgpYHgpKjgpLDgpY3gpLjgpY3gpKXgpL/gpKQg4KSV4KSw4KS+4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCkueCkn+CkteCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCkleClieCkquClgCDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgpK7gpJzgpJXgpYLgpLAg4KSo4KS/4KS14KSh4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgpKrgpYLgpLDgpY3gpLXgpLXgpKQg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgpKrgpYHgpKjgpY3gpLngpL4g4KSV4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuCkruCknOCkleClguCksCDgpKjgpL/gpLXgpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4KS24KSs4KWN4KSm4KSV4KWL4KS24KS+4KSkIOCknOCli+CkoeCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4KS54KSf4KS14KS+Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuCkteClieCksuCkquClh+CkquCksCDgpKzgpKbgpLLgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KSQ4KSV4KSj4KS+4KSw4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgpIXgpJ8g4KSq4KWN4KSw4KSm4KS+4KSk4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4KS44KWC4KSa4KSo4KS+IOCkuOCkueCkvuCkr+CljeCkr+CklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOCkuOCkleCljeCksOCkv+CkryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpKbgpY3gpLXgpL7gpLDgpYcgVlBOIOCkuOCkleCljeCksOCkv+CkryDgpJXgpYfgpLLgpYcg4KSG4KS54KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkteCljeCkr+CkteCkuOCljeCkpeCkvuCkquCkv+CkpCDgpJXgpLDgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOCkvi4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4KSG4KSq4KSy4KWN4KSv4KS+IOCkquCljeCksOCktuCkvuCkuOCkleCkvuCkpuCljeCkteCkvuCksOClhyDgpIXgpKbgpY3gpK/gpKTgpKjgpL/gpKQg4KSV4KWH4KSy4KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgpIbgpKrgpLLgpY3gpK/gpL4g4KSq4KWN4KSw4KS24KS+4KS44KSV4KS+4KSm4KWN4KS14KS+4KSw4KWHIOCkueCkn+CkteCkv+CksuClhyDgpIbgpLngpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCkrOClheCkn+CksOClgOCkmuClhyDgpIbgpK/gpYHgpLfgpY3gpK8g4KS44KWB4KSn4KS+4KSw4KS/4KSkIOCkleCksOCko+CljeKAjeCkr+CkvuCkpCDgpK7gpKbgpKQg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWALCDgpKzgpYXgpJ/gpLDgpYAg4KSs4KSa4KSk4KSV4KSw4KWN4KSk4KS+IOCkhuCkquCksuCljeCkr+CkviDgpKHgpL/gpLXgpY3gpLngpL7gpIfgpLjgpJrgpYcg4KSV4KS+4KSw4KWN4KSv4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkleCkruClgCDgpJXgpLDgpKTgpYsg4KSG4KSj4KS/IOCkleCkguCkquCkqCwg4KS44KWN4KSl4KS+4KSoIOCkuOClh+CkteCkviDgpIbgpKPgpL8g4KSs4KSw4KS+4KSaIOCkquCkvuCksOCljeCktuCljeCkteCkreClguCkruClgCDgpKHgpYfgpJ/gpL4g4KSu4KSw4KWN4KSv4KS+4KSm4KS/4KSkIOCkleCksOCkpOCliy4g4KS44KSC4KSV4KS+4KSy4KSo4KS+4KS14KSwIOCkheCkteCksuCkguCkrOClguCkqCDgpIXgpLjgpKPgpL7gpLDgpYcg4KSI4KSu4KWH4KSyLCDgpLjgpILgpKbgpYfgpLbgpKgg4KSG4KSj4KS/IOCkh+CkpOCksCDgpIXigI3gpYXgpKrgpY3gpLgg4KSG4KSq4KSjIOCkieCkmOCkoeCksuCljeCkr+CkvuCktuCkv+CkteCkvuCkryDgpIXgpKbgpY3gpK/gpKTgpKjgpL/gpKQg4KS54KWL4KSKIOCktuCkleCkpCDgpKjgpL7gpLngpYDgpKQuXG5cbuCkhuCkquCksuClhyDgpKHgpL/gpLXgpY3gpLngpL7gpIfgpLgg4KSa4KS+4KSw4KWN4KScIOCkueCli+CkpCDgpIXgpLjgpKTgpYcg4KSk4KWH4KS14KWN4KS54KS+IOCkrOClheCkn+CksOClgCDgpKzgpJrgpKTgpJXgpLDgpY3gpKTgpL4g4KS44KWN4KS14KSv4KSC4KSa4KSy4KS/4KSk4KSq4KSj4KWHIOCkrOCkguCkpiDgpLngpYvgpKTgpYsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgpIXgpLXgpLDgpYvgpKfgpL/gpKQg4KSV4KWH4KSy4KWHOiDgpK/gpL4g4KS44KWC4KSa4KSo4KS+IOCkleCkp+ClgOCkueClgCDgpKbgpLDgpY3gpLbgpLXgpYIg4KSo4KSV4KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuCkleCkruClgDog4KS24KS+4KSC4KSk4KSq4KSj4KWHIOCkuOClguCkmuCkqOCkviDgpLjgpYLgpJrgpYDgpJrgpY3gpK/gpL4g4KSk4KSz4KS+4KS24KWAIOCkpuCksOCljeCktuCkteCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4KS44KS+4KSu4KS+4KSo4KWN4KSvOiDgpK/gpL4g4KS44KWC4KSa4KSo4KS+IOCktuCkvuCkguCkpOCkquCko+ClhyDgpKbgpLDgpY3gpLbgpLXgpL4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCkuOCksOCljeCkteCli+CkmuCljeCkmjog4KS44KWC4KSa4KSo4KS+IOCkuOClguCkmuClgOCkmuCljeCkr+CkviDgpLbgpYDgpLDgpY3gpLfgpLjgpY3gpKXgpL7gpKjgpYAg4KSm4KSw4KWN4KS24KS14KS+IOCkhuCko+CkvyDgpKfgpY3gpLXgpKjgpYAg4KSa4KS+4KSy4KWCIOCkleCksOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgpKTgpY3gpLXgpLDgpL/gpKQ6IOCkuOCljeCkleCljeCksOClgOCkqOCkteCksCDgpKHgpYvgpJXgpL7gpLXgpYLgpKgg4KSq4KS54KS+IOCkhuCko+CkvyDgpKfgpY3gpLXgpKjgpYAg4KSa4KS+4KSy4KWCIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg4KSu4KS/4KSo4KS/4KSf4KS+4KS44KS+4KSg4KWAICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgpKrgpLDgpY3gpK/gpILgpKQpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIOCkruCkv+CkqOCkv+Ckn+CkvuCkguCkuOCkvuCkoOClgCAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4KSq4KSw4KWN4KSv4KSC4KSkKTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiDgpKjgpL/gpLXgpKHgpLLgpYc8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLgpLjgpILgpJXgpYDgpLDgpY3gpKMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i4KSG4KSq4KSjIOCkr+CkviDgpLjgpYLgpJrgpKjgpL7gpILgpJrgpYcg4KSu4KS54KSk4KWN4KSk4KWN4KS1IOCkuOClh+CknyDgpJXgpYfgpLLgpYcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgpLjgpL7gpK7gpYDgpLIg4KSF4KS44KSy4KWH4KSy4KWN4KSv4KS+IOCksuCli+CkleCkvuCkguCkruClgeCks+ClhyDgpLngpYcg4KSu4KS54KSk4KWN4KS14KS+4KSa4KWHIOCkhuCkueClhy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKaW5kZXggYWI2ODNmY2IuLmQ0MGM3ZDEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iS3VuY2kgc2VrYXJhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iS2FuZHVuZ2FuIHRlcnNlbWJ1bnlpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kIHNlbGFtYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW0gQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyaWJhZGkiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlRlcm1hc3VrIGRhdGEgcGVyaWJhZGkgc2VwZXJ0aSBub21ib3Iga2FkIGtyZWRpdCBkYW4ga2F0YSBsYWx1YW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJLYXdhbCBwZW1iZXNhcmFuIHBhcGFyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iS2F3YWwgdGFoYXAgenVtIGRhbiBrZWR1ZHVrYW4gcGFwYXJhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJMYWt1a2FuIGdlcmFrIGlzeWFyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkJvbGVoIGtldGlrLCBsZXJldCwgY3ViaXQgZGFuIGxha3NhbmFrYW4gZ2VyYWsgaXN5YXJhdCBsYWluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Imx1bXB1aGthbiBhdGF1IHViYWggc3VhaSBiYXIgc3RhdHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+Ik1lbWJlbmFya2FuIGFwbCBtZWx1bXB1aGthbiBiYXIgc3RhdHVzIGF0YXUgbWVuYW1iYWggZGFuIG1lbmdhbGloIGtlbHVhciBpa29uIHNpc3RlbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iamFkaSBiYXIgc3RhdHVzIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhbWJpbCBnYW1iYXIgZGFuIHZpZGVvIG1lbmdndW5ha2FuIGthbWVyYS4gS2ViZW5hcmFuIGluaSBtZW1iZW5hcmthbiBhcGwgdW50dWsgbWVuZ2d1bmFrYW4ga2FtZXJhIHBhZGEgYmlsYS1iaWxhIG1hc2EgdGFucGEgcGVuZ2VzYWhhbiBhbmRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrYXdhbCBnZXRhcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJNZW1iZW5hcmthbiBhcGwgbWVuZ2F3YWwgcGVuZ2dldGFyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJtZW5nYXdhbCBsYW1wdSBzdWx1aCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTWVtYmVuYXJrYW4gYXBsIG1lbmdhd2FsIGxhbXB1IHN1bHVoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InBhbmdnaWwgdGVydXMgbm9tYm9yIHRlbGVmb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iTWVtYmVuYXJrYW4gYXBsIG1lbWFuZ2dpbCBub21ib3IgdGVsZWZvbiB0YW5wYSBjYW1wdXIgdGFuZ2FuIGFuZGEuIEluaSBtdW5na2luIG1lbnllYmFia2FuIGNhaiBhdGF1IHBhbmdnaWxhbiB5YW5nIGRpIGx1YXIgamFuZ2thYW4uIEFwbCBoYXNhZCBib2xlaCBtZW55ZWJhYmthbiBhbmRhIGtlcnVnaWFuIHdhbmcgZGVuZ2FuIG1lbWJ1YXQgcGFuZ2dpbGFuIHRhbnBhIHBlbmdlc2FoYW4gYW5kYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImFrc2VzIHBlcmtoaWRtYXRhbiBwYW5nZ2lsYW4gSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJQb3RvbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IlNhbGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iVGFtcGFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJUYW1wYWwgc2ViYWdhaSB0ZWtzIGJpYXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJHYW50aS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJQYWRhbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iU2FsaW4gVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iUGlsaWggdGVrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQnVhdCBhc2FsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJCdWF0IHNlbXVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJQZW1pbGloYW4gdGVrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJUYW1iYWgga2Uga2FtdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlBhZGFtIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlR1a2FyIGtlcnRhcyBkaW5kaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iUGVuZGVuZ2FyIHBlbWJlcml0YWh1YW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlBlbWJla2FsIGtlYWRhYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJQZW1iYW50dSBwZW1iZXJpdGFodWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gZGlha3RpZmthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBkaWFrdGlma2FuIG9sZWggPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iU2VudHVoIHVudHVrIG1lbmd1cnVzIHJhbmdrYWlhbi4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iRGlrZW1hcyBraW5pIG9sZWggcGVudGFkYmlyIGFuZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IkRpcGFkYW1rYW4gb2xlaCBwZW50YWRiaXIgYW5kYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVW50dWsgbWVtYmFudHUgbWVtcGVyYmFpayBoYXlhdCBiYXRlcmksIHBlbmppbWF0IGJhdGVyaSBtZW5ndXJhbmdrYW4gcHJlc3Rhc2kgcGVyYW50aSBhbmRhIGRhbiBtZW5nZWhhZGthbiBnZXRhcmFuLCBwZXJraGlkbWF0YW4gbG9rYXNpIGRhbiBrZWJhbnlha2FuIGRhdGEgbGF0YXIgYmVsYWthbmcuIEUtbWVsLCBwZW1lc2VqYW4gZGFuIGFwbCBsYWluIHlhbmcgYmVyZ2FudHVuZyBrZXBhZGEgcGVueWVnZXJha2FuIG11bmdraW4gdGlkYWsgbWVuZ2VtYXMga2luaSwgbWVsYWlua2FuIGFuZGEgbWVtYnVrYSBhcGwgaXR1LlxuXG5QZW5qaW1hdCBiYXRlcmkgZGltYXRpa2FuIHNlY2FyYSBhdXRvbWF0aWsgc2VtYXNhIHBlcmFudGkgYW5kYSBzZWRhbmcgZGljYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJEaXNla2F0OiBKYW5nYW4gc2VrYWxpLWthbGkgdHVuanVra2FuIHBlbWJlcml0YWh1YW4gaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IlJlbmRhaDogVHVuanVra2FuIHBhZGEgYmFoYWdpYW4gYmF3YWggc2VuYXJhaSBwZW1iZXJpdGFodWFuIHNlY2FyYSBzZW55YXAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IkJpYXNhOiBUdW5qdWtrYW4gcGVtYmVyaXRhaHVhbiBpbmkgc2VjYXJhIHNlbnlhcCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iVGluZ2dpOiBUdW5qdWtrYW4gcGFkYSBiYWhhZ2lhbiBhdGFzIHNlbmFyYWkgcGVtYmVyaXRhaHVhbiBkYW4gYnVueWlrYW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iU2VnZXJhOiBJbnRhaSBwYWRhIHNrcmluIGRhbiBidW55aWthbiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U2VsYW1hICUxJGQgbWluaXQgKHNlaGluZ2dhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNlbGFtYSBzYXR1IG1pbml0IChzZWhpbmdnYSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IGRpcGlsaWg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJQZWxiYWdhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJBbmRhIG1lbmV0YXBrYW4ga2VwZW50aW5nYW4gcGVtYmVyaXRhaHVhbiBpbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJNZXNlaiBpbmkgcGVudGluZyBkaXNlYmFia2FuIG9yYW5nIHlhbmcgdGVybGliYXQuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDg3MDljN2MuLjI4YTRkMGYgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4YCa4YCB4YCvIOGAnuGAseGArOGAt+GAleGAreGAkOGAuuGAm+GAlOGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4i4YGJ4YGJ4YGJKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhgKHhgIDhgLzhgLHhgKzhgIThgLrhgLjhgKHhgJvhgKzhgJnhgLvhgKzhgLgg4YCd4YC+4YCA4YC64YCR4YCs4YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i4YCh4YCU4YC54YCQ4YCb4YCs4YCa4YC64YCA4YCE4YC64YC44YCZ4YC+4YCvIOGAheGAlOGAheGAuihTYWZlIG1vZGUpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZMKg4YCF4YCU4YCF4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLhgIDhgK3hgK/hgJrhgLrhgJvhgLHhgLgiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuGAoeGAm+GAseGAuOGAgOGAvOGAruGAuOGAnuGAseGArCDhgIDhgK3hgK/hgJrhgLrhgJvhgLHhgLjhgKHhgIHhgLvhgIDhgLrhgKHhgJzhgIDhgLrhgJnhgLvhgKzhgLjhgJbhgLzhgIXhgLrhgJDhgLLhgLcg4YCB4YCb4YCA4YC64YCS4YCF4YC64YCA4YCS4YC64YCU4YC24YCV4YCr4YCQ4YC64YCZ4YC74YCs4YC44YCU4YC+4YCE4YC34YC6IOGAheGAgOGArOGAuOGAneGAvuGAgOGAuuGAmeGAu+GArOGAuCDhgJXhgKvhgJ3hgIThgLrhgJXhgKvhgJDhgJrhgLouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCB4YC74YCy4YC34YCB4YC84YCE4YC64YC44YCA4YCt4YCvIOGAkeGAreGAlOGAuuGAuOGAgeGAu+GAr+GAleGAuuGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCB4YC74YCy4YC34YCB4YC84YCE4YC64YC44YCU4YC+4YCE4YC34YC6IOGAlOGAseGAm+GArOGAgeGAu+GAkeGArOGAuOGAgeGAvOGAhOGAuuGAuOGAgOGAreGAryDhgJHhgK3hgJThgLrhgLjhgIHhgLvhgK/hgJXhgLrhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLhgJzhgIDhgLrhgJ/hgJThgLrhgJnhgLvhgKzhgLgg4YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLhgJDhgK3hgK/hgLfhgIHhgLzhgIThgLrhgLjhgYog4YCV4YC94YCQ4YC64YCG4YC94YCy4YCB4YC84YCE4YC64YC44YGKIOGAlOGAvuGAhOGAt+GAuiDhgKHhgIHhgLzhgKzhgLgg4YCc4YCA4YC64YCf4YCU4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAlOGAreGAr+GAhOGAuuGAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+IuGAoeGAgeGAvOGAseGAoeGAlOGAseGAleGAvOGAmOGArOGAuOGAoeGArOGAuCDhgKHhgJzhgK/hgJXhgLrhgJnhgJzhgK/hgJXhgLrhgIHhgK3hgK/hgIThgLrhgLjhgJvhgJThgLrhgJ7hgK3hgK/hgLfhgJnhgJ/hgK/hgJDhgLog4YCZ4YC94YCZ4YC64YC44YCZ4YC24YCb4YCU4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+ImFwcOGAoeGArOGAuCDhgKHhgIHhgLzhgLHhgKHhgJThgLHhgJXhgLwg4YCY4YCs4YC44YCA4YCt4YCvIOGAleGAreGAkOGAuuGAgeGAveGAhOGAt+GAuiDhgJ7hgK3hgK/hgLfhgJnhgJ/hgJDhgLog4YCF4YCU4YCF4YC6IOGAoeGAreGAr+GAhOGAuuGAgOGAveGAlOGAuuGAmeGAu+GArOGAuOGAgOGAreGAryDhgJHhgIrhgLfhgLrhgIHhgLzhgIThgLrhgLgg4YCW4YCa4YC64YCb4YC+4YCs4YC44YCB4YC84YCE4YC64YC4IOGAleGAvOGAr+GAnOGAr+GAleGAuuGAgeGAveGAhOGAt+GAuiDhgJXhgLzhgK/hgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i4YCh4YCB4YC84YCx4YCh4YCU4YCx4YCV4YC8IOGAmOGArOGAuOGAluGAvOGAheGAuuGAleGAq+GAheGAsSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuGAoeGAleGAnOGAruGAgOGAseGAuOGAm+GAvuGAhOGAuuGAuOGAoeGArOGAuCDhgKHhgJzhgK3hgK/hgKHhgJzhgLvhgLHhgKzhgIDhgLog4YCT4YCs4YCQ4YC64YCV4YCv4YC24YCb4YCt4YCv4YCA4YC64YCB4YC94YCE4YC34YC64YGKIOGAl+GAruGAkuGAruGAmuGAreGAryDhgJvhgK3hgK/hgIDhgLrhgIDhgLDhgLjhgIHhgL3hgIThgLfhgLog4YCV4YC84YCv4YCV4YCr4YGLIOGAkuGAruGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAgeGAu+GAgOGAuuGAgCDhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgIDhgK3hgK8g4YCh4YCB4YC74YCt4YCU4YC64YCZ4YCb4YC94YCx4YC4IOGAgOGAhOGAuuGAmeGAm+GArOGAoeGArOGAuCDhgIHhgL3hgIThgLfhgLrhgJXhgLzhgK/hgIHhgLvhgIDhgLog4YCZ4YCc4YCt4YCv4YCh4YCV4YC64YCV4YCyIOGAnuGAr+GAtuGAuOGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLhgJDhgK/hgJThgLrhgIHhgK/hgJThgLrhgJnhgL7hgK/hgKHhgKzhgLgg4YCR4YCt4YCU4YC64YC44YCB4YC74YCv4YCV4YC64YCB4YC84YCE4YC64YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJhcHDhgKHhgKzhgLgg4YCQ4YCv4YCU4YC64YCB4YCr4YCF4YCA4YC64YCA4YCt4YCvIOGAkeGAreGAlOGAuuGAuOGAgeGAu+GAr+GAleGAuuGAgeGAveGAhOGAt+GAuiDhgJXhgLzhgK/hgJ7hgIrhgLrhgYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4YCT4YCr4YCQ4YC64YCZ4YCu4YC44YCh4YCs4YC4IOGAkeGAreGAlOGAuuGAuOGAnuGAreGAmeGAuuGAuOGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iYXBw4YCh4YCs4YC4IOGAgOGArOGAuCDhgJbhgJzhgIDhgLrhgJvhgL7hgJnhgK7hgLjhgIDhgK3hgK8g4YCR4YCt4YCU4YC64YC44YCB4YC74YCv4YCV4YC64YCB4YC94YCE4YC34YC6IOGAleGAvOGAr+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuGAluGAr+GAlOGAuuGAuOGAlOGAtuGAleGAq+GAkOGAuuGAmeGAu+GArOGAuOGAgOGAreGAr+GAkOGAreGAr+GAgOGAuuGAm+GAreGAr+GAgOGAuuGAgeGAseGAq+GAuuGAhuGAreGAr+GAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgKHhgKzhgLgg4YCh4YCc4YCt4YCv4YCh4YCc4YC74YCx4YCs4YCA4YC6IOGAluGAr+GAlOGAuuGAuOGAgeGAseGAq+GAuuGAgeGAveGAhOGAt+GAuiDhgJXhgLzhgK/hgJXhgKvhgYsg4YCZ4YCc4YCt4YCv4YCh4YCV4YC64YCe4YCx4YCsIOGAluGAr+GAlOGAuuGAuOGAgSDhgJnhgLvhgKzhgLgg4YCW4YC84YCF4YC64YCV4YCx4YCr4YC64YCU4YCt4YCv4YCE4YC64YCV4YCr4YCe4YCK4YC64YGLIOGAkuGAruGAgeGAveGAhOGAt+GAuuGAleGAvOGAr+GAgeGAvOGAhOGAuuGAuOGAmeGAvuGArCDhgKHhgJvhgLHhgLjhgJXhgLHhgKvhgLrhgJbhgK/hgJThgLrhgLjhgIHhgLHhgKvhgLrhgIHhgLzhgIThgLrhgLgg4YCZ4YCV4YCr4YCd4YCE4YC64YCV4YCr4YGLIOGAnuGAtuGAnuGAmuGAluGAvOGAheGAuuGAheGAm+GArCDhgKHhgJXhgJzhgK7hgIDhgLHhgLjhgJvhgL7hgIThgLrhgLjhgJnhgLvhgKzhgLjhgIAg4YCe4YCE4YC34YC64YCZ4YCe4YCt4YCV4YCyIOGAluGAr+GAlOGAuuGAuOGAgeGAseGAq+GAuuGAgeGAvOGAhOGAuuGAuOGAluGAvOGAhOGAt+GAuiDhgJbhgK/hgJThgLrhgLjhgIEg4YCV4YCt4YCv4YCZ4YCt4YCv4YCA4YC74YCU4YCt4YCv4YCE4YC64YCV4YCr4YCe4YCK4YC64YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4YCW4YCv4YCU4YC64YC44YCB4YCx4YCr4YC64YCG4YCt4YCv4YCZ4YC+4YCvIOGAneGAlOGAuuGAhuGAseGArOGAhOGAuuGAjOGArOGAlCDhgJ3hgIThgLrhgIDhgLzhgIrhgLfhgLrhgJXhgKsiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuGAluGAvOGAkOGAuuGAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4YCA4YCw4YC44YCB4YC84YCE4YC64YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGFzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuGAheGArOGAnuGArOGAuOGAoeGAkOGAreGAr+GAhOGAuuGAuCDhgIDhgLDhgLjhgJHhgIrhgLfhgLrhgJXhgKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IuGAoeGAheGArOGAuOGAkeGAreGAr+GAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLhgJbhgLvhgIDhgLrhgJXhgIXhgLrhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTOGAoeGArOGAuCDhgIDhgLDhgLjhgIHhgLzhgIThgLrhgLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLhgIXhgKzhgJ7hgKzhgLgg4YCb4YC94YCx4YC44YCb4YCU4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLhgJXhgLzhgJThgLrhgJbhgLvhgIDhgLrhgJvhgJThgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuGAkeGAleGAuuGAnOGAr+GAleGAuuGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLhgIXhgKzhgJDhgK3hgK/hgJvhgL3hgLHhgLjhgIHhgLvhgJrhgLrhgJnhgL7hgK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4YCh4YCY4YCt4YCT4YCs4YCU4YC64YCR4YCyIOGAkeGAiuGAt+GAuuGAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4YCW4YC74YCA4YC64YCV4YCF4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuGAlOGAseGArOGAgOGAuuGAgeGAtuGAleGAvOGAseGArOGAhOGAuuGAuOGAgeGAvOGAhOGAuuGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuGAoeGAgOGAvOGAseGArOGAhOGAuuGAuOGAgOGAvOGArOGAuOGAgeGAu+GAgOGAuiDhgJThgKzhgLjhgJDhgLHhgKzhgIThgLrhgJ7hgLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuGAoeGAgeGAvOGAseGAoeGAlOGAsSDhgIXhgK7hgJnhgLbhgJXhgLHhgLjhgJ7hgLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLog4YCh4YCA4YCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4YCW4YC94YCE4YC34YC64YCR4YCs4YC44YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4YCZ4YC+VlBO4YCh4YCc4YCv4YCV4YC64YCc4YCv4YCV4YC64YCU4YCx4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4YCA4YC94YCU4YC64YCb4YCA4YC6IOGAkeGAreGAlOGAuuGAuOGAnuGAreGAmeGAuuGAuOGAm+GAlOGAuiDhgJDhgK3hgK/hgLfhgJHhgK3hgJXhgKsiPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4YCe4YCE4YC34YC64YCF4YCu4YCZ4YC24YCB4YCU4YC34YC64YCB4YC94YCy4YCe4YCw4YCZ4YC+IOGAoeGAhuGAhOGAt+GAuuGAmeGAvOGAvuGAhOGAt+GAuuGAkeGArOGAuOGAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4YCe4YCE4YC34YC6IOGAoeGAgOGAuuGAkuGAmeGAhOGAuuGAoeGArOGAuCDhgJbhgLvhgIDhgLrhgJXhgIXhgLrhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuGAmOGAgOGAuuGAkeGAm+GAruGAnuGAgOGAuuGAkOGAmeGAuuGAuCDhgIDhgLzhgKzhgJvhgL7hgIrhgLrhgIHhgLbhgJvhgJThgLrhgYog4YCY4YCA4YC64YCR4YCb4YCu4YCh4YCs4YC44YCR4YCt4YCU4YC64YC44YCe4YCK4YC6IOGAnuGAhOGAt+GAuuGAgOGAreGAm+GAreGAmuGArOGBjyDhgIbhgLHhgKzhgIThgLrhgJvhgL3hgIDhgLrhgIHhgLvhgIDhgLrhgIDhgK3hgK8gIOGAnOGAu+GAvuGAseGArOGAt+GAleGAseGAuOGAleGAvOGAruGAuCDhgJDhgK/hgJThgLrhgIHhgKvhgJnhgL7hgK/hgYog4YCQ4YCK4YC64YCU4YCx4YCb4YCs4YCd4YCU4YC64YCG4YCx4YCs4YCE4YC64YCZ4YC+4YCv4YCZ4YC74YCs4YC44YCU4YC+4YCE4YC34YC64YGKIOGAlOGAseGArOGAgOGAuuGAgeGAtuGAkuGAseGAkOGArOGAoeGAmeGAu+GArOGAuOGAheGAr+GAgOGAreGAryDhgIDhgJThgLfhgLrhgJ7hgJDhgLrhgJXhgLHhgLjhgY/hgYsg4YCF4YCE4YC34YC64YCc4YCv4YCV4YC64YCV4YCx4YC44YCb4YCc4YCx4YC34YCb4YC+4YCt4YCe4YCK4YC34YC6IOGAoeGAruGAuOGAmeGAseGAuOGBiiDhgIXhgKzhgJXhgK3hgK/hgLfhgIHhgLzhgIThgLrhgLjhgJThgL7hgIThgLfhgLrhgYog4YCh4YCB4YC84YCs4YC44YCh4YCV4YCc4YCu4YCA4YCx4YC44YCb4YC+4YCE4YC64YC44YCZ4YC74YCs4YC44YCA4YCt4YCvIOGBjuGAhOGAuuGAuOGAkOGAreGAr+GAt+GAoeGArOGAuCDhgJ7hgIThgLog4YCW4YC94YCE4YC34YC64YCZ4YC+4YCe4YCsIOGAoeGAhuGAhOGAt+GAuuGAmeGAvOGAvuGAhOGAt+GAuuGAmeGAveGAmeGAuuGAuOGAmeGAtuGAmeGAiuGAuuGAluGAvOGAheGAuuGBj+GBiyBcblxuIOGAgOGAreGAm+GAreGAmuGArOGAoeGArOGAuCDhgKHhgKzhgLjhgJ7hgL3hgIThgLrhgLjhgJThgLHhgIXhgInhgLog4YCY4YCA4YC64YCR4YCb4YCu4YCh4YCs4YC44YCR4YCt4YCU4YC64YC44YCh4YCs4YC4IOGAoeGAnOGAreGAr+GAoeGAnOGAu+GAseGArOGAgOGAuiDhgJXhgK3hgJDhgLrhgJHhgKzhgLjhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuGAleGAreGAkOGAuuGAhuGAreGAr+GAt+GAkeGArOGAuC0g4YCk4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAmOGAmuGAuuGAkOGAseGArOGAt+GAmeGAviDhgJnhgJXhgLzhgJXhgKvhgJThgL7hgIThgLfhgLoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4YCU4YCt4YCZ4YC34YC6LSDhgJDhgK3hgJDhgLrhgIbhgK3hgJDhgLrhgIXhgL3hgKwg4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YGPIOGAheGArOGAm+GAhOGAuuGAuCDhgKHhgLHhgKzhgIDhgLrhgJXhgK3hgK/hgIThgLrhgLjhgJnhgL7hgKwg4YCV4YC84YCV4YCrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJcJ+GAleGAr+GAtuGAmeGAvuGAlOGAui0g4YCk4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAkOGAreGAkOGAuuGAhuGAreGAkOGAuuGAheGAveGArCDhgJXhgLzhgJXhgKsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuGAmeGAvOGAhOGAt+GAuuGAmeGArOGAuC0g4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCZ4YC74YCs4YC44YGPIOGAheGArOGAm+GAhOGAuuGAuOGAkeGAreGAleGAuuGAmeGAvuGArCDhgJXhgLzhgJzhgLvhgIDhgLog4YCh4YCe4YC24YCZ4YC84YCK4YC64YCV4YCx4YC44YCV4YCrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IuGAoeGAm+GAseGAuOGAgOGAvOGAruGAuC0gOiDhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLrhgJnhgL7hgKwg4YCV4YC84YCV4YCx4YC44YCc4YC74YCA4YC6IOGAoeGAnuGAtuGAmeGAvOGAiuGAuuGAleGAseGAuOGAleGAqyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDhgJnhgK3hgJThgIXhgLrhgJDhgL3hgIThgLogKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+4YCh4YCR4YCtKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGAkOGAheGAuuGAmeGAreGAlOGAheGAuuGAkOGAveGAhOGAuiAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4g4YCh4YCR4YCtKTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4g4YCb4YC94YCx4YC44YCB4YC74YCa4YC64YCV4YC84YCu4YC44YCV4YCr4YCV4YC84YCuPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4YCh4YCR4YC94YCx4YCR4YC94YCxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuGApOGAoeGAnuGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuOGBjyDhgKHhgJvhgLHhgLjhgJXhgKvhgJnhgL7hgK/hgIDhgK3hgK/hgJ7hgIThgLrhgJ7hgJDhgLrhgJnhgL7hgJDhgLrhgJXhgLzhgK7hgLjhgJXhgKvhgJXhgLzhgK7hgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuGAleGAq+GAneGAhOGAuuGAnuGAiuGAt+GAuuGAnOGAsOGAmeGAu+GArOGAuOGAgOGAvOGAseGArOGAhOGAt+GAuiDhgKHhgJvhgLHhgLjhgJXhgKvhgJXhgKvhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IGM5NjZlMzguLjdlOTA5ZTQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkzDpXMgbsOlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IklubmhvbGRldCBlciBza2p1bHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTaWtrZXJtb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25saWciPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkRldHRlIG9tZmF0dGVyIHBlcnNvbmxpZ2UgZGF0YSwgc29tIGtyZWRpdHRrb3J0bnVtcmUgb2cgcGFzc29yZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IktvbnRyb2xsw6lyIGZvcnN0w7hycmVsc2UgZm9yIHNramVybWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IktvbnRyb2xsw6lyIHpvb21lbml2w6VldCBvZyBwbGFzc2VyaW5nZW4gZm9yIHNramVybWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+Ikdqw7hyZSBiZXZlZ2Vsc2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJLYW4gdHJ5a2tlLCBzdmVpcGUsIGtseXBlIG9nIGdqw7hyZSBhbmRyZSBiZXZlZ2Vsc2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImRlYWt0aXZlcmUgZWxsZXIgZW5kcmUgc3RhdHVzZmVsdGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkxhciBhcHBlbiBkZWFrdGl2ZXJlIHN0YXR1c2ZlbHRldCBlbGxlciBsZWdnZSB0aWwgb2cgZmplcm5lIHN5c3RlbWlrb25lci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4idmlzZSBhcHBlbiBpIHN0YXR1c2ZlbHRldCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkFwcGVuIHRpbGxhdGVzIMOlIHRhIGJpbGRlciBvZyBmaWxtZSBtZWQga2FtZXJhZXQuIERldCBiZXR5ciBhdCBhcHBlbiBrYW4gYnJ1a2Uga2FtZXJhZXQgbsOlciBzb20gaGVsc3QgdXRlbiBiZWtyZWZ0ZWxzZSBmcmEgZGVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJrb250cm9sbGVyZSB2aWJyZXJpbmdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTGFyIGFwcGVuIGtvbnRyb2xsZXJlIHZpYnJlcmluZ3NmdW5rc2pvbmVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9sbGVyZSBsb21tZWx5a3RlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iTGFyIGFwcGVuIGtvbnRyb2xsZXJlIGxvbW1lbHlrdGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+InJpbmdlIHRlbGVmb25udW1tZXIgZGlyZWt0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJMYXIgYXBwZW4gcmluZ2UgdGVsZWZvbm51bXJlIHV0ZW4gYXQgZHUgZ2rDuHIgbm9lLiBEZXR0ZSBrYW4gcmVzdWx0ZXJlIGkgdXZlbnRlZGUgb3BwcmluZ25pbmdlciBvZyBrb3N0bmFkZXIuIEFwcGVuIGthbiBpbWlkbGVydGlkIGlra2UgcmluZ2UgbsO4ZG51bXJlLiBNZXJrIGF0IHNrYWRlbGlnZSBhcHBlciBrYW4gcMOlZsO4cmUgZGVnIGtvc3RuYWRlciB2ZWQgw6UgcmluZ2UgdXRlbiBiZWtyZWZ0ZWxzZSBmcmEgZGVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iZsOlIHRpbGdhbmcgdGlsIG5ldHRwcmF0dGplbmVzdGVuIGZvciByaW5naW5nIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLbGlwcCB1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iTGltIGlubiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iTGltIGlubiBzb20gcmVuIHRla3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJFcnN0YXR0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlNsZXR0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJLb3BpZXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTWFya2VyIHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJBbmdyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iVXRmw7hyIGxpa2V2ZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iTWVya2V0IHRla3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkxlZ2cgdGlsIGkgb3JkbGlzdGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTbGV0dCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJWZWxnIGJha2dydW5uc2JpbGRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iVmFyc2VsbHl0dGVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkJldGluZ2Vsc2VzbGV2ZXJhbmTDuHIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJWYXJzZWxhc3Npc3RlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBlciBha3RpdmVydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBlciBha3RpdmVydCBhdiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUcnlrayBmb3Igw6UgYWRtaW5pc3RyZXJlIG5ldHR2ZXJrZXQuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik9wcGRhdGVydCBhdiBhZG1pbmlzdHJhdG9yZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IlNsZXR0ZXQgYXYgYWRtaW5pc3RyYXRvcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJGb3Igw6UgZm9ybGVuZ2UgYmF0dGVyaWxldmV0aWRlbiByZWR1c2VyZXIgYmF0dGVyaXNwYXJlcmVuIHl0ZWxzZW4gdGlsIGVuaGV0ZW4gZGluIG9nIGJlZ3JlbnNlciB2aWJyZXJpbmcsIHBvc2lzam9uc3RqZW5lc3RlciBvZyBtZXN0ZXBhcnRlbiBhdiBiYWtncnVubnNkYXRhZW5lLiBFLXBvc3QsIHNlbmRpbmcgYXYgbWVsZGluZ2VyIG9nIGFuZHJlIGFwcGVyIHNvbSBlciBhdmhlbmdpZyBhdiBzeW5rcm9uaXNlcmluZywgb3BwZGF0ZXJlcyBrYW5za2plIGlra2UgbWVkIG1pbmRyZSBkdSDDpXBuZXIgZGVtLlxuXG5CYXR0ZXJpc3BhcmluZyBzbMOlcyBhdiBhdXRvbWF0aXNrIG7DpXIgZW5oZXRlbiBsYWRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkJsb2trZXJ0OiBBbGRyaSB2aXMgZGlzc2UgdmFyc2xlbmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTGF2dDogVmlzIG5lZGVyc3QgaSB2YXJzZWxsaXN0ZW4gdXRlbiBseWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbHQ6IFZpcyBkaXNzZSB2YXJzbGVuZSB1dGVuIGx5ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSMO4eXQ6IFZpcyDDuHZlcnN0IGkgdmFyc2VsbGlzdGVuIG1lZCBseWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iSGFzdGVyOiBWaXNlcyBmb3J0IHDDpSBza2plcm1lbiBtZWQgbHlkIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5JICUxJGQgbWludXR0ZXIgKHRpbCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5JIDEgbWludXR0ICh0aWwgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBlciB2YWxndDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRpdmVyc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iRHUgYW5naXIgdmlrdGlnaGV0ZW4gZm9yIGRpc3NlIHZhcnNsZW5lLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iRGV0dGUgZXIgdmlrdGlnIHDDpSBncnVubiBhdiBmb2xrZW5lIHNvbSBlciBpbnZvbHZlcnQuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDkzMWM4ODAuLjE1Mjc3YTIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4KSF4KSsIOCkrOCkqOCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+IuClr+Clr+ClrysiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4KSy4KWB4KSV4KWH4KSV4KS+IOCkuOCkvuCkruCkvuCkl+CljeCksOClgOCkueCksOClgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpK7gpYvgpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLgpI/gpKjgpY3gpKHgpY3gpLDgpYvgpIfgpKEg4KSq4KWN4KSw4KSj4KS+4KSy4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLgpLXgpY3gpK/gpJXgpY3gpKTgpL/gpJfgpKQiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuCkteCljeCkr+CkleCljeCkpOCkv+Ckl+CkpCDgpKHgpYfgpJ/gpL4g4KSc4KS44KWN4KSk4KWIIOCkleCljeCksOClh+CkoeCkv+CknyDgpJXgpL7gpLDgpY3gpKEg4KSo4KSu4KWN4KSs4KSw4KS54KSw4KWCIOCksCDgpKrgpL7gpLjgpLXgpLDgpY3gpKHgpLngpLDgpYIg4KS44KSu4KS+4KS14KWH4KS2IOCkl+CksOCljeCkpuCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkhuCkteCksOCljeCkp+CkqCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuCkquCljeCksOCkpuCksOCljeCktuCkqOCkleCliyDgpJzgpYHgpK4g4KS44KWN4KSk4KSwIOCksCDgpLjgpY3gpKXgpL/gpKTgpL8g4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuCkh+CkuOCkvuCksOCkvuCkueCksOClgiDgpLjgpK7gpY3gpKzgpKjgpY3gpKfgpYAg4KSV4KS+4KSw4KWN4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4KSf4KWN4KSv4KS+4KSqLCDgpLjgpY3gpLXgpL7gpIfgpKog4KSX4KSw4KWN4KSoLCDgpKXgpL/gpJrgpY3gpKgg4KSwIOCkheCkqOCljeCkryDgpIfgpLjgpL7gpLDgpL7gpLngpLDgpYIg4KS44KSu4KWN4KSs4KSo4KWN4KSn4KWAIOCkleCkvuCksOCljeCkryDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWN4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+Ckv+CksuCkvuCkiCDgpIXgpJXgpY3gpLfgpK4g4KS14KS+IOCkuOCkguCktuCli+Ckp+Ckv+CkpCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4KS44KWN4KSl4KS/4KSk4KS/IOCkquCkn+CljeCkn+CkvyDgpIXgpLjgpJXgpY3gpLfgpK4g4KSq4KS+4KSw4KWN4KSoIOCkteCkviDgpKrgpY3gpLDgpKPgpL7gpLLgpYAg4KSG4KSH4KSV4KSo4KS54KSw4KWCIOCkpeCkquCljeCkqCDgpLAg4KS54KSf4KS+4KSJ4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuCkteCkuOCljeCkpOClgeCkuOCljeCkpeCkv+CkpOCkvyDgpKrgpJ/gpY3gpJ/gpYAg4KS54KWB4KSoIOCkpuCkv+CkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpJXgpY3gpK/gpL7gpK7gpYfgpLDgpL7gpLjgpIHgpJcg4KSk4KS44KWN4KSs4KS/4KSwIOCksCDgpK3gpL/gpKHgpL/gpK/gpYvgpLngpLDgpYIg4KSy4KS/4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQg4KSv4KS4IOCkheCkqOClgeCkruCkpOCkv+CksuClhyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSk4KSq4KS+4KSI4KSC4KSV4KWLIOCkquClgeCkt+CljeCkn+Ckv+CkleCksOCkoyDgpKzgpL/gpKjgpL4g4KSV4KWB4KSo4KWIIOCkquCkqOCkvyDgpLjgpK7gpK/gpK7gpL4g4KSV4KWN4KSv4KS+4KSu4KWH4KSw4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKgg4KS44KWN4KS14KWA4KSV4KWD4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgpJXgpK7gpY3gpKrgpKgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkreCkvuCkh+CkrOCljeCksOClh+Ckn+CksCDgpKjgpL/gpK/gpKjgpY3gpKTgpY3gpLDgpKMg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkruCkpOCkvyDgpKbgpL/gpKjgpY3gpJvgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4KSr4KWN4KSy4KWN4KSv4KS+4KS44KSy4KS+4KSI4KSfIOCkqOCkv+Ckr+CkqOCljeCkpOCljeCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCkq+CljeCksuCljeCkr+CkvuCkuCDgpKrgpY3gpLDgpJXgpL7gpLbgpLLgpL7gpIgg4KSo4KS/4KSv4KSo4KWN4KSk4KWN4KSw4KSjIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpLLgpL7gpIgg4KSF4KSo4KWB4KSu4KSk4KS/IOCkpuCkv+CkqOCljeCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCkq+Cli+CkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYLgpK7gpL4g4KS44KS/4KSn4KWIIOCkleCksiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkueCkuOCljeCkpOCkleCljeCkt+Clh+CkqiDgpKzgpYfgpJfgpLDgpYgg4KSr4KWL4KSoIOCkqOCkruCljeCkrOCksCDgpJXgpLIg4KSX4KSw4KWN4KSoIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSo4KWN4KSb4KWkIOCkr+CkuOCksuClhyDgpIXgpKjgpKrgpYfgpJXgpY3gpLfgpL/gpKQg4KS24KWB4KSy4KWN4KSVIOCkteCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KS+4KSJ4KSoIOCkuOCkleCljeCkm+ClpCDgpK/gpLjgpLLgpYcg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KSy4KS+4KSIIOCkhuCkquCkpOCkleCkvuCksuClgOCkqCDgpKjgpK7gpY3gpKzgpLDgpLngpLDgpYIg4KSV4KSyIOCkl+CksOCljeCkqCDgpIXgpKjgpYHgpK7gpKTgpL8g4KSm4KS/4KSB4KSm4KWI4KSoIOCkteCkv+CkmuCkvuCksCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQg4KSW4KSw4KS+4KSsIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClguCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkrOCkv+CkqOCkviDgpJXgpLLgpLngpLDgpYIg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpKzgpKLgpYAg4KSq4KWI4KS44KS+IOCkpOCkv+CksOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgpJXgpLIg4KS44KWH4KS14KS+IOCkquCkueClgeCkgeCkmiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCkleCkvuCkn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KSq4KWN4KSw4KSk4KS/4KSy4KS/4KSq4KS/IOCkrOCkqOCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCkn+CkvuCkgeCkuOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkquCkvuCkoOCkleCliyDgpLDgpYLgpKrgpK7gpL4g4KSf4KS+4KSB4KS44KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgpLXgpL/gpLjgpY3gpKXgpL7gpKrgpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCkruClh+Ckn+CljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCkleCliyDgpKrgpY3gpLDgpKTgpL/gpLLgpL/gpKog4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i4KSq4KS+4KSgIOCkmuCkr+CkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuCkheCkqOCkoeClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCksOCkv+CkoeClgiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4KSq4KS+4KSgIOCkmuCkr+CkqOCkpOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgpLbgpKzgpY3gpKbgpJXgpYvgpLbgpK7gpL4g4KSl4KSq4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgpK7gpYfgpJ/gpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC0xMTEzLDYgKzExMTcsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4KS14KS+4KSy4KSq4KWH4KSq4KSwIOCkquCksOCkv+CkteCksOCljeCkpOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWB4KSo4KWN4KSo4KWH4KS14KS+4KSy4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgpLjgpLDgpY3gpKQg4KSq4KWN4KSw4KSm4KS+4KSv4KSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4KS44KWC4KSa4KSo4KS+IOCkuOCkueCkvuCkr+CklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOCkuOCkleCljeCksOCkv+CkryDgpK3gpK/gpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4KSm4KWN4KS14KS+4KSw4KS+IOCkuOCkleCljeCksOCkv+CkryDgpJfgpLDgpL/gpI/gpJXgpYsg4KS54KWLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4KSo4KWH4KSf4KS14KSw4KWN4KSVIOCkquCljeCksOCkrOCkqOCljeCkpyDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgpAQCAtMTQ0NiwxMSArMTQ1MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpKrgpY3gpLDgpLbgpL7gpLjgpJXgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkl+CksOCkv+Ckj+CkleCliyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkquCljeCksOCktuCkvuCkuOCkleCkpuCljeCkteCkvuCksOCkviDgpLngpJ/gpL7gpIfgpI/gpJXgpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuCkrOCljeCkr+CkvuCkn+CljeCksOClgOCkleCliyDgpIbgpK/gpYEg4KS44KWB4KSn4KS+4KSw4KWN4KSoLCDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KS44KSC4KSw4KSV4KWN4KS34KSV4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpK/gpKjgpY3gpKTgpY3gpLDgpJXgpYsg4KSV4KS+4KSw4KWN4KSv4KS44KSu4KWN4KSq4KS+4KSm4KSoIOCkmOCkn+CkvuCkieCkgeCkmyDgpLAg4KSt4KS+4KSH4KSs4KWN4KSw4KWH4KS44KSoLCDgpLjgpY3gpKXgpL7gpKgg4KS44KWH4KS14KS+IOCksCDgpKzgpLngpYHgpLjgpILgpJbgpY3gpK/gpJUg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpLjgpYDgpK7gpL/gpKQg4KSX4KSw4KWN4KSm4KSb4KWkIOCkh+CkruClh+Cksiwg4KS44KSo4KWN4KSm4KWH4KS2LCDgpLAg4KSF4KSo4KWN4KSvIOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CkueCksOClgiDgpJzgpYHgpKgg4KS44KS/4KSZ4KWN4KSV4KSu4KS+IOCkreCksCDgpKrgpLDgpY3gpJvgpKjgpY0g4KSF4KSm4KWN4KSv4KS+4KS14KSn4KS/4KSVIOCkqOCkueClgeCkqCDgpLjgpJXgpY3gpJvgpKjgpY0g4KSc4KSs4KS44KSu4KWN4KSuIOCkpOCkquCkvuCkiOCkgSDgpKTgpL/gpKjgpYDgpLngpLDgpYLgpLLgpL7gpIgg4KSW4KWL4KSy4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSoXG5cbiDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KS44KSC4KSw4KSV4KWN4KS34KSVIOCkuOCljeCkteCkpDog4KSo4KS/4KS44KWN4KSV4KWD4KSvIOCkueClgeCkqOCljeCkmyDgpJzgpKwg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkr+CkqOCljeCkpOCljeCksCDgpJrgpL7gpLDgpY3gpJwg4KS54KWB4KSB4KSm4KWIIOCkueClgeCkqOCljeCkm+ClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4KSw4KWL4KSV4KS/4KSP4KSV4KWLOiDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkleCkueCkv+CksuCljeCkr+CliCDgpKjgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4KSV4KSuOiDgpJrgpYHgpKrgpJrgpL7gpKog4KS44KWC4KSa4KSo4KS+IOCkuOClguCkmuClgOCkleCliyDgpKvgpYfgpKbgpK7gpL4g4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK86IOCkmuClgeCkquCkmuCkvuCkqiDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWCIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4KSJ4KSa4KWN4KSaOiDgpLjgpYLgpJrgpKjgpL4g4KS44KWC4KSa4KWA4KSV4KWLIOCktuClgOCksOCljeCkt+CkruCkviDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0g4KSwIOCkhuCkteCkvuCknCDgpKjgpL/gpJXgpL7gpLLgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4KSc4KSw4KWB4KSw4KWAOiDgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpK7gpL4g4KSd4KSy4KSV4KWN4KSVIOCkueClh+CksOCljeCkqOClgeCkueCli+CkuOCljSDgpLAg4KSG4KS14KS+4KScIOCkqOCkv+CkleCkvuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+ICUxJGQg4KSu4KS/4KSo4KWH4KSf4KSV4KWLIOCksuCkvuCkl+CkvyAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g4KS44KSu4KWN4KSuKTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuCkj+CklSDgpK7gpL/gpKjgpYfgpJ/gpJXgpYsg4KSy4KS+4KSX4KS/ICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDgpLjgpK7gpY3gpK4pPC9pdGVtPgpAQCAtMTUxNiw0ICsxNTE2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDgpJrgpK/gpKgg4KSX4KSw4KS/4KSv4KWLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4KS14KS/4KS14KS/4KSnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpK/gpYAg4KS44KWC4KSa4KSo4KS+4KS54KSw4KWC4KSV4KWLIOCkruCkueCkpOCljeCkpOCljeCktSDgpLjgpYfgpJ8g4KSX4KSw4KWN4KSo4KWB4KS54KWB4KSo4KWN4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgpK/gpLjgpK7gpL4g4KS44KSZ4KWN4KSy4KSX4KWN4KSoIOCkreCkj+CkleCkviDgpK7gpL7gpKjgpL/gpLjgpLngpLDgpYLgpJXgpYsg4KSV4KS+4KSw4KSj4KSy4KWHIOCkl+CksOCljeCkpuCkviDgpK/gpYsg4KSu4KS54KSk4KWN4KS14KSq4KWC4KSw4KWN4KSjIOCkm+ClpCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKaW5kZXggZWU0ZjYzYS4uYjgxYjQ2ZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iTnUgdmVyZ3JlbmRlbGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkgKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmhvdWQgdmVyYm9yZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVmVpbGlnZSBtb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQtc3lzdGVlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29vbmxpamsiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+Ik9tdmF0IHBlcnNvb25saWprZSBnZWdldmVucyB6b2FscyBjcmVkaXRjYXJkbnVtbWVycyBlbiB3YWNodHdvb3JkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJTY2hlcm12ZXJncm90aW5nIGJlZGllbmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkJlZGllbiBoZXQgem9vbW5pdmVhdSBlbiBkZSBwb3NpdGlvbmVyaW5nIHZhbiBoZXQgc2NoZXJtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IkdlYmFyZW4gdWl0dm9lcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJLYW4gdGlra2VuLCB2ZWdlbiwgc2FtZW5rbmlqcGVuIGVuIGFuZGVyZSBnZWJhcmVuIHVpdHZvZXJlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJzdGF0dXNiYWxrIHVpdHNjaGFrZWxlbiBvZiB3aWp6aWdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJIaWVybWVlIGthbiBkZSBhcHAgZGUgc3RhdHVzYmFsayB1aXRzY2hha2VsZW4gb2Ygc3lzdGVlbXBpY3RvZ3JhbW1lbiB0b2V2b2VnZW4gZW4gdmVyd2lqZGVyZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ImRlIHN0YXR1c2JhbGsgemlqbiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkhpZXJtZWUga2FuIGRlIGFwcCBmb3RvXCdzIGVuIHZpZGVvXCdzIG1ha2VuIG1ldCBkZSBjYW1lcmEuIE1ldCBkZXplIHRvZXN0ZW1taW5nIGthbiBkZSBhcHAgZGUgY2FtZXJhIGFsdGlqZCBnZWJydWlrZW4sIHpvbmRlciBqZSBiZXZlc3RpZ2luZy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4idHJpbGxpbmcgYmVoZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iSGllcm1lZSBrYW4gZGUgYXBwIGRlIHRyaWxzdGFuZCBiZWhlcmVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJ6YWtsYW1wIGJlZGllbmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJIaWVybWVlIGthbiBkZSBhcHAgZGUgemFrbGFtcCBiZWRpZW5lbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJ0ZWxlZm9vbm51bW1lcnMgcmVjaHRzdHJlZWtzIGJlbGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJIaWVybWVlIGthbiBkZSBhcHAgem9uZGVyIGplIHR1c3NlbmtvbXN0IHRlbGVmb29ubnVtbWVycyBiZWxsZW4uIERpdCBrYW4gdG90IG9udmVyd2FjaHRlIGtvc3RlbiBvZiBvcHJvZXBlbiBsZWlkZW4uIERlIGFwcCBrYW4gaGllcm1lZSBnZWVuIG5vb2RudW1tZXJzIGJlbGxlbi4gU2NoYWRlbGlqa2UgYXBwcyBrdW5uZW4gdSBnZWxkIGtvc3RlbiBkb29yIG51bW1lcnMgdGUgYmVsbGVuIHpvbmRlciBvbSBqZSBiZXZlc3RpZ2luZyB0ZSB2cmFnZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJ0b2VnYW5nIHRvdCBJTVMtc2VydmljZSB2b29yIGJlbGxlbiI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iS25pcHBlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29wacOrcmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iUGxha2tlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iUGxha2tlbiBhbHMgcGxhdHRlIHRla3N0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJWZXJ2YW5nZW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVmVyd2lqZGVyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTCBrb3Bpw6tyZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJUZWtzdCBzZWxlY3RlcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJPbmdlZGFhbiBtYWtlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iT3BuaWV1dyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJUZWtzdHNlbGVjdGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IlRvZXZvZWdlbiBhYW4gd29vcmRlbmJvZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlZlcndpamRlcmVuIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkFjaHRlcmdyb25kIHdpanppZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTGlzdGVuZXIgdm9vciBtZWxkaW5nZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlByb3ZpZGVyIHZhbiB2b29yd2FhcmRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik1lbGRpbmdzYXNzaXN0ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gaXMgZ2VhY3RpdmVlcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gd29yZHQgZ2VhY3RpdmVlcmQgZG9vciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJSYWFrIGFhbiBvbSBoZXQgbmV0d2VyayB0ZSBiZWhlcmVuLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJHZcO8cGRhdGV0IGRvb3IgamUgYmVoZWVyZGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJWZXJ3aWpkZXJkIGRvb3IgamUgYmVoZWVyZGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJBY2N1YmVzcGFyaW5nIGJlcGVya3QgZGUgcHJlc3RhdGllcyB2YW4gamUgYXBwYXJhYXQsIGRlIHRyaWxzdGFuZCwgbG9jYXRpZXNlcnZpY2VzIGVuIGRlIG1lZXN0ZSBhY2h0ZXJncm9uZGdlZ2V2ZW5zIG9tIGRlIGdlYnJ1aWtzZHV1ciB2YW4gZGUgYWNjdSB0ZSB2ZXJsZW5nZW4uXG5cbkFjY3ViZXNwYXJpbmcgd29yZHQgYXV0b21hdGlzY2ggdWl0Z2VzY2hha2VsZCB0ZXJ3aWpsIGplIGFwcGFyYWF0IHdvcmR0IG9wZ2VsYWRlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkdlYmxva2tlZXJkOiBkZXplIG1lbGRpbmdlbiBub29pdCB3ZWVyZ2V2ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTGFhZzogem9uZGVyIGdlbHVpZCBvbmRlciBhYW4gZGUgbGlqc3QgbWV0IG1lbGRpbmdlbiB3ZWVyZ2V2ZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hYWw6IGRlemUgbWVsZGluZ2VuIHpvbmRlciBnZWx1aWQgd2VlcmdldmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIb29nOiBib3ZlbiBhYW4gZGUgbGlqc3QgbWV0IG1lbGRpbmdlbiB3ZWVyZ2V2ZW4gZW4gZ2VsdWlkIGxhdGVuIGhvcmVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudDogb3AgaGV0IHNjaGVybSB3ZWVyZ2V2ZW4gZW4gZ2VsdWlkIGxhdGVuIGhvcmVuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIG1pbnV0ZW4gKHRvdCA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Fw6luIG1pbnV1dCAodG90IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gZ2VzZWxlY3RlZXJkPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iRGl2ZXJzZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iSmUgc3RlbHQgaGV0IGJlbGFuZyB2YW4gZGV6ZSBtZWxkaW5nZW4gaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJEaXQgaXMgYmVsYW5ncmlqayB2YW53ZWdlIGRlIGJldHJva2tlbiBtZW5zZW4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCmluZGV4IGRkYzdiNzMuLjE5MmMxODEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4Ki54KmB4KijIOCosuCpjOColSDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Ki44Kiu4Kmx4KiX4Kiw4KmA4KiG4KiCIOCosuCpgeColeCovuCoiOCohuCogiDgqJfgqIjgqIbgqIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgqLjgqYHgqLDgqbHgqJbgqL/gqIXgqKQg4Kiu4KmL4KihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCBTeXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuCoqOCov+CpseConOCpgCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4KiH4Ki4IOCoteCov+CpseComiDgqKjgqL/gqbHgqJzgqYAg4Kih4Ki+4Kif4Ki+IOCouOCovOCovuCoruCosiDgqLngqYgg4Kic4Ki/4Ki14KmH4KiCIOColeCpjeCosOCpiOCooeCov+ConyDgqJXgqL7gqLDgqKEg4Kio4Kmw4Kis4KiwIOCoheCopOCphyDgqKrgqL7gqLjgqLXgqLDgqKHgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IuCooeCov+CouOCoquCosuCphyDgqLXgqbHgqKHgqKbgqLDgqLjgqLzgqYAg4Kio4KmC4KmwIOCoqOCov+Cor+CpsOCopOCpjeCosOCov+CopCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i4Kih4Ki/4Ki44Kiq4Kiy4KmHIOCopuCphyDgqJzgqLzgqYLgqK4g4Kiq4Kmx4Kin4KiwIOCoheCopOCphyDgqLjgqKXgqL/gqKTgqYAg4Kio4KmC4KmwIOCoqOCov+Cor+CpsOCopOCpjeCosOCov+CopCDgqJXgqLDgqYvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgqLjgqbDgqJXgqYfgqKQg4KiV4Kiw4Kim4KmAIOCoueCpiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4Kif4KmI4KiqIOColeCosCDgqLjgqJXgqKbgqYAg4Ki54KmILCDgqLjgqLXgqL7gqIjgqKog4KiV4KiwIOCouOColeCopuCpgCDgqLngqYgsIOCoquCov+CpsOComiDgqJXgqLAg4Ki44KiV4Kim4KmAIOCoueCpiCwg4KiF4Kik4KmHIOCoueCpi+CosCDgqLjgqbDgqJXgqYfgqKQg4KiV4KiwIOCouOColeCopuCpgCDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgqLjgqKXgqL/gqKTgqYAg4Kis4Ki+4KiwIOCoheCouOCoruCosOCpseCopSDgqKzgqKPgqL7gqJMg4Kic4Ki+4KiCIOCouOCpsOCouOCovOCpi+Cop+Cov+CopCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i4KiQ4KiqIOCoqOCpguCpsCDgqLjgqKXgqL/gqKTgqYAg4Kis4Ki+4KiwIOCoqOCpguCpsCDgqIXgqLjgqK7gqLDgqbHgqKUg4Kis4Kij4Ki+4KiJ4KijIOConOCovuCogiDgqLjgqL/gqLjgqJ/gqK4g4KiG4KiI4KiV4Kio4Ki+4KiCIOCoqOCpguCpsCDgqJzgqYvgqZzgqKgg4KiF4Kik4KmHIOCoueCon+CovuCoieCooyDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCopuCov+CpsOCopuCoviDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4i4Ki44Kil4Ki/4Kik4KmAIOCoquCpseCon+CpgCDgqKzgqKPgqKgg4Kim4Ki/4KiTIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4KiQ4KiqIOCoqOCpguCpsCDgqJXgqYjgqK7gqLDgqYcg4Kio4Ki+4KiyIOCopOCouOCoteCpgOCosOCovuCogiDgqIXgqKTgqYcg4Ki14KmA4Kih4KmA4KiTIOCosuCpiOCooyDgqKbgqYAg4KiG4KiX4Ki/4KiGIOCopuCov+CpsOCopuCoviDgqLngqYjgpaQg4KiH4Ki5IOCoheCoqOCpgeCoruCopOCpgCDgqJDgqKog4Kio4KmC4KmwIOCopOCpgeCoueCovuCooeCpgCDgqKrgqYHgqLjgqLzgqJ/gqYAg4Kik4KmL4KiCIOCorOCov+CoqOCovuCogiDgqJXgqL/gqLjgqYcg4Ki14KmAIOCouOCoruCph+CogiDgqJXgqYjgqK7gqLDgqL4g4Ki14Kiw4Kik4KijIOCopuCpgCDgqIbgqJfgqL/gqIYg4Kim4Ki/4Kmw4Kim4KmAIOCoueCpiOClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgqLXgqL7gqIjgqKzgqY3gqLDgqYfgqLjgqLzgqKgg4Kik4KmHIOCoqOCov+Cor+CpsOCopOCosOCooyDgqKrgqL7gqJMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCokOCoqiDgqKjgqYLgqbAg4Ki14Ki+4KiI4Kis4KmN4Kiw4KmH4Kif4KiwIOCopOCphyDgqKjgqL/gqK/gqbDgqKTgqLDgqKMg4Kiq4Ki+4KiJ4KijIOCopuCpgCDgqIbgqJfgqL/gqIYg4Kim4Ki/4Kmw4Kim4Ki+IOCoueCpiOClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLgqKvgqLLgqYjgqLjgqLzgqLLgqL7gqIjgqJ8g4Kik4KmHIOCoqOCov+Cor+CpsOCopOCosOCooyDgqKrgqL7gqJMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCokOCoqiDgqKjgqYLgqbAg4Kir4Kiy4KmI4Ki44Ki84Kiy4Ki+4KiI4KifIOCopOCphyDgqKjgqL/gqK/gqbDgqKTgqLDgqKMg4Kiq4Ki+4KiJ4KijIOCopuCpgCDgqIbgqJfgqL/gqIYg4Kim4Ki/4Kmw4Kim4Ki+IOCoueCpiOClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuCoq+Cpi+CoqCDgqKjgqbDgqKzgqLDgqL7gqIIg4Kik4KmHIOCouOCov+CpseCop+CphyDgqJXgqL7gqLIg4KiV4Kiw4KmLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCokOCoqiDgqKjgqYLgqbAg4Kik4KmB4Ki54Ki+4Kih4KmHIOCopuColuCovOCosiDgqKTgqYvgqIIg4Kis4Ki/4Kio4Ki+4KiCIOCoq+Cpi+CoqCDgqKjgqbDgqKzgqLDgqL7gqIIg4Kik4KmHIOColeCovuCosiDgqJXgqLDgqKgg4Kim4KmAIOCohuCol+Cov+CohiDgqKbgqL/gqbDgqKbgqL4g4Ki54KmI4KWkIOCoh+CouOCopuCphyDgqLjgqL/gqbHgqJ/gqYcg4Ki14Kic4KmL4KiCIOCoheColeCosuCoquCov+CopCDgqJbgqLzgqLDgqJrgqYcg4Kic4Ki+4KiCIOColeCovuCosuCovuCogiDgqLngqYsg4Ki44KiV4Kim4KmA4KiG4KiCIOCoueCoqOClpCDgqKfgqL/gqIbgqKgg4Kim4Ki/4KiTIOColeCovyDgqIfgqLkg4KiQ4KiqIOCoqOCpguCpsCDgqJDgqK7gqLDgqJzgqYjgqILgqLjgqYAg4Kio4Kmw4Kis4Kiw4Ki+4KiCIOCopOCphyDgqJXgqL7gqLIg4KiV4Kiw4KioIOCopuCpgCDgqIbgqJfgqL/gqIYg4Kio4Ki54KmA4KiCIOCopuCov+CpsOCopuCovuClpCDgqJbgqLzgqLDgqL7gqKwg4KiQ4Kiq4Ki4IOCopOCpgeCoueCovuCooeCpgCDgqKrgqYHgqLjgqLzgqJ/gqYAg4Kik4KmL4KiCIOCorOCov+CoqOCovuCogiDgqJXgqL7gqLLgqL7gqIIg4KiV4Kiw4KiV4KmHIOCopOCpgeCoueCovuCoqOCpguCpsCDgqJbgqLzgqLDgqJrgqYcg4Kiq4Ki+IOCouOColeCopuCphyDgqLngqKjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgqJXgqL7gqLIg4Ki44KmH4Ki14Ki+IOCopOCpseColSDgqKrgqLngqYHgqbDgqJoiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuColeCpseCon+CpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4KiV4Ki+4Kiq4KmAIOColeCosOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCoquCph+CouOConyDgqJXgqLDgqYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuCouOCop+CovuCosOCoqCDgqLLgqL/gqJbgqKQg4Kim4KmHIOCopOCpjOCosCBcJ+CopOCphyDgqKrgqYfgqLjgqJ8g4KiV4Kiw4KmLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgqKzgqKbgqLLgqYvigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i4Kiu4Ki/4Kif4Ki+4KiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJVUkwg4KiV4Ki+4Kiq4KmAIOColeCosOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuCon+CpiOColeCouOConyDgqJrgqYHgqKPgqYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuCoquCoueCov+CosuCovuCogiDgqLXgqLDgqJfgqL4g4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgqK7gqYHgqZwt4KiT4Ki54KmAIOColeCosOCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgqJ/gqYjgqJXgqLjgqJ8g4Kia4KmL4KijIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuCouOCovOCorOCopuColeCpi+CouOCovCDgqLXgqL/gqbHgqJog4Kic4KmL4Kmc4KmLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgqK7gqL/gqJ/gqL7gqJMiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4Ki14Ki+4Kiy4Kiq4KmH4Kiq4KiwIOCorOCopuCosuCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCouOCpguComuCoqOCoviDgqLjgqYHgqKPgqKgg4Ki14Ki+4Kiy4Ki+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgqLjgqKXgqL/gqKTgqYAg4Kiq4KmN4Kiw4Kim4Ki+4Kik4Ki+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Ki44KmC4Kia4Kio4Ki+IOCouOCoueCovuCoh+ColSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOCouOColeCov+CosOCov+CohiDgqJXgqYDgqKTgqL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCosOCovuCoueCpgOCogiDgqLjgqJXgqL/gqLDgqL/gqIYg4Kis4Kij4Ki+4KiH4KiGIOCol+Cov+CohiDgqLngqYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgqKjgqYjgqJ/gqLXgqLDgqJUg4Ki14Ki/4Ki14Ki44Kil4Ki/4KikIOColeCosOCoqCDgqLLgqIgg4Kib4KmL4Ki54Ki14KmL4KWkIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCopOCpgeCoueCovuCooeCphyDgqKrgqY3gqLDgqLjgqLzgqL7gqLjgqJUg4Kim4KmB4KiG4Kiw4Ki+IOCoheCoquCooeCph+ConyDgqJXgqYDgqKTgqL4g4KiX4Ki/4KiGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgqKTgqYHgqLngqL7gqKHgqYcg4Kiq4KmN4Kiw4Kis4Kmw4Kin4KiVIOCoteCpseCosuCpi+CogiDgqK7gqL/gqJ/gqL7gqIfgqIYg4KiX4Ki/4KiGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgqKzgqYjgqJ/gqLDgqYAg4Ki44Kiu4Kiw4Kmx4Kil4Ki+IOCoqOCpguCpsCDgqKzgqL/gqLngqKTgqLAg4Ki44Ki54Ki+4KiH4Kik4Ki+IOColeCosOCoqCDgqLLgqIgsIOCorOCpiOCon+CosOCpgCDgqLjgqYfgqLXgqLAg4Kik4KmB4Ki54Ki+4Kih4KmAIOCooeCov+CoteCovuCoiOCouCDgqKbgqL4g4Kiq4KmN4Kiw4Kim4Kiw4Ki44Ki84KioIOComOCon+CovuCoieCoguCopuCoviDgqLngqYgg4KiF4Kik4KmHIOCoteCovuCoiOCorOCpjeCosOCph+CouOCovOCoqCwg4Kio4Ki/4Kiw4Kin4Ki+4Kiw4Ki/4KikIOCouOCopeCovuCoqCDgqLjgqYfgqLXgqL7gqLXgqL7gqIIg4KiF4Kik4KmHIOConOCovOCov+CohuCopuCovuCopOCosCDgqKrgqL/gqJvgqYvgqJXgqZwg4Kih4Ki+4Kif4Ki+IOCoqOCpguCpsCDgqLjgqYDgqK7gqL/gqKQg4KiV4Kiw4Kim4Ki+IOCoueCpiOClpCDgqIjgqK7gqYfgqLIsIOCoruCpiOCouOCph+ConOCov+CpsOColyDgqIXgqKTgqYcg4Ki54KmL4KiwIOCokOCoquCouCwg4Kic4KmLIOCouOCov+CpsOColeCov+CpsOColyDgqKTgqYcg4Kio4Ki/4Kiw4Kit4KiwIOCoueCoqCwg4KiJ4Ki5IOCoieCopuCpi+CogiDgqKTgqbHgqJUg4KiF4Kiq4Kih4KmH4KifIOCoqOCoueCpgOCogiDgqJXgqYDgqKTgqYcg4Kic4Ki+IOCouOColeCopuCphyDgqJzgqKbgqYvgqIIg4Kik4Kmx4KiVIOCopOCpgeCouOCpgOCogiDgqIngqLngqKjgqL7gqIIg4Kio4KmC4KmwIOColuCpi+CosuCpjeCoueCopuCphyDgqKjgqLngqYDgqILgpaRcblxu4Kis4KmI4Kif4Kiw4KmAIOCouOCph+CoteCosCDgqIbgqJ/gqYvgqK7gqYjgqJ/gqL/gqJXgqLLgqYAg4Kis4Kmw4KimIOCoueCpgeCpsOCopuCoviDgqLngqYgg4Kic4Kim4KmL4KiCIOCopOCpgeCoueCovuCooeCpgCDgqKHgqL/gqLXgqL7gqIjgqLgg4Kia4Ki+4Kiw4KicIOCoueCpiyDgqLDgqLngqYAg4Ki54KmB4Kmw4Kim4KmAIOCoueCpiOClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4Kis4Kiy4KmM4KiVIOColeCpgOCopOCovjog4KiH4Ki5IOCouOCpguComuCoqOCovuCoteCovuCogiDgqJXgqKbgqYcg4Kio4Ki+IOCoteCov+ColuCovuCokyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLgqJjgqbHgqJ86IOComuCpgeCpseCoquComuCovuCoqiDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCouOCpguComuCoqOCoviDgqLjgqYLgqJrgqYAg4Kim4KmHIOCoueCph+CooOCovuCogiDgqLXgqL/gqJbgqL7gqJMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCouOCop+CovuCosOCoqDog4KiH4Ki5IOCouOCpguComuCoqOCovuCoteCovuCogiDgqJrgqYHgqbHgqKrgqJrgqL7gqKog4Kii4Kmw4KiXIOCoqOCovuCosiDgqLXgqL/gqJbgqL7gqJMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCoteCpseCopzog4Ki44KmC4Kia4Kio4Ki+4Ki14Ki+4KiCIOCouOCpguComuCpgCDgqKbgqYcg4Ki44Ki/4KiW4KiwIFwn4Kik4KmHIOCoteCov+ColuCovuCokyDgqIXgqKTgqYcg4KiG4Ki14Ki+4Kic4Ki8IOColeCosOCpiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgqJzgqLzgqLDgqYLgqLDgqYA6IOCouOColeCosOCpgOCoqCBcJ+CopOCphyDgqJ3gqL7gqKTgqYAg4Kiu4Ki+4Kiw4KmLIOCoheCopOCphyDgqIbgqLXgqL7gqJzgqLwg4KiV4Kiw4KmLIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+JTEkZCDgqK7gqL/gqbDgqJ/gqL7gqIIg4Kik4Kmx4KiVICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgqKTgqbHgqJUpIDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgqK7gqL/gqbDgqJ/gqL7gqIIg4Kik4Kmx4KiVICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgqKTgqbHgqJUpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IOComuCpgeCoo+Cov+CohiDgqJfgqL/gqIY8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLgqLXgqL/gqLXgqL/gqKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i4Kik4KmB4Ki44KmA4KiCIOCoh+CoueCoqOCovuCogiDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIg4Kim4KmAIOCoruCoueCpseCopOCopOCoviDgqLjgqYjgqbHgqJ8g4KiV4KmA4Kik4KmA4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLgqIfgqLkg4Ki44Ki84Ki+4Kiu4KiyIOCosuCpi+ColeCovuCogiDgqKbgqYcg4KiV4Ki+4Kiw4KioIOCoruCoueCpseCopOCoteCoquCpguCosOCoqCDgqLngqYjgpaQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCmluZGV4IDc0MzBkNTQuLjM4NDM3ZmEgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbApAQCAtMjI1LDYgKzIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IlphYmxva3VqIHRlcmF6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiImZ3Q7OTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlRyZcWbY2kgdWtyeXRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iVHJ5YiBhd2FyeWpueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3RlbSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJPc29iaXN0ZSI8L3N0cmluZz4KQEAgLTI1Nyw2ICsyNTgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iT2Jlam11amUgaW5mb3JtYWNqZSBvc29iaXN0ZSwgdGFraWUgamFrIG51bWVyeSBrYXJ0IGtyZWR5dG93eWNoIGkgaGFzxYJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iUmVndWxvd2FuaWUgcG93acSZa3N6ZW5pYSBla3JhbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iUmVndWxvd2FuaWUgcG96aW9tdSBpIG9ic3phcnUgcG93acSZa3N6ZW5pYSBla3JhbnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iT2JzxYJ1Z2EgZ2VzdMOzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iT2JzxYJ1Z3VqZSBrbGlrbmnEmWNpYSwgcHJ6ZXN1bmnEmWNpYSwgxZtjacSFZ25pxJljaWEgcGFsY8OzdyBpIGlubmUgZ2VzdHkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4id3nFgsSFY3phbmllIGx1YiB6bWllbmlhbmllIHBhc2thIHN0YW51Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHd5xYLEhWN6YW5pZSBwYXNrYSBzdGFudSBvcmF6IGRvZGF3YW5pZSBpIHVzdXdhbmllIGlrb24gc3lzdGVtb3d5Y2guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ImR6aWHFgmFuaWUgamFrbyBwYXNlayBzdGFudSI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTgsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHJvYmllbmllIHpkasSZxIcgaSBuYWdyeXdhbmllIGZpbG3Ds3cgcHJ6eSB1xbx5Y2l1IGFwYXJhdHUuIEFwbGlrYWNqYSB6IHR5bSB1cHJhd25pZW5pZW0gbW/FvGUgdcW8ecSHIGFwYXJhdHUgdyBkb3dvbG55bSBtb21lbmNpZSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJzdGVyb3dhbmllIHdpYnJhY2phbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBvendhbGEgYXBsaWthY2ppIG5hIHN0ZXJvd2FuaWUgd2licmFjamFtaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbG93YW5pZSBsYXRhcmtpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQb3p3YWxhIGFwbGlrYWNqaSBuYSBzdGVyb3dhbmllIGxhdGFya8SFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImJlenBvxZtyZWRuaWUgd3liaWVyYW5pZSBudW1lcsOzdyB0ZWxlZm9uw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBvendhbGEgYXBsaWthY2ppIG5hIGR6d29uaWVuaWUgcG9kIG51bWVyeSB0ZWxlZm9uw7N3IGJleiBUd29qZWogd2llZHp5LiBNb8W8ZSB0byBza3V0a293YcSHIG5pZW9jemVraXdhbnltaSBvcMWCYXRhbWkgbHViIHBvxYLEhWN6ZW5pYW1pLiBBcGxpa2FjamEgbmllIG1vxbxlIGR6d29uacSHIHBvZCBudW1lcnkgYWxhcm1vd2UuIFrFgm/Fm2xpd2UgYXBsaWthY2plIG1vZ8SFIGdlbmVyb3dhxIcga29zenR5LCB3eWtvbnVqxIVjIHBvxYLEhWN6ZW5pYSBiZXogVHdvamVnbyBwb3R3aWVyZHplbmlhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4idXPFgnVnYSB0ZWxlZm9uaWN6bmEgeiBkb3N0xJlwZW0gZG8ga29tdW5pa2F0b3JhIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJXeXRuaWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGl1aiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IldrbGVqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJXa2xlaiBqYWtvIHp3eWvFgnkgdGVrc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Ilphc3TEhXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVXN1xYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGl1aiBhZHJlcyBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJaYXpuYWN6IHRla3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJDb2ZuaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlBvbsOzdyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJaYXpuYWN6YW5pZSB0ZWtzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRG9kYWogZG8gc8WCb3duaWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJVc3XFhCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJabWllxYQgdGFwZXTEmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik9kYmlvcm5payBwb3dpYWRvbWllxYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkRvc3Rhd2NhIHdhcnVua8OzdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzeXN0ZW50IHBvd2lhZG9taWXFhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGFrdHl3bnkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJPYnPFgnVnYSBzaWVjaSBWUE4gem9zdGHFgmEgd8WCxIVjem9uYSBwcnpleiBhcGxpa2FjasSZIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkRvdGtuaWosIGFieSB6YXJ6xIVkemHEhyBzaWVjacSFLiI8L3N0cmluZz4KQEAgLTE0NTgsMTEgKzE0NjMsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJaYWt0dWFsaXpvd2FuZSBwcnpleiBhZG1pbmlzdHJhdG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iVXN1bmnEmXR5IHByemV6IGFkbWluaXN0cmF0b3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJBYnkgd3lkxYJ1xbx5xIcgY3phcyBwcmFjeSBiYXRlcmlpLCBPc3pjesSZZHphbmllIGJhdGVyaWkgb2dyYW5pY3phIGFrdHl3bm/Fm8SHIHVyesSFZHplbmlhLCB3IHR5bSB3aWJyYWNqZSwgdXPFgnVnaSBsb2thbGl6YWN5am5lIGkgcHJ6ZXR3YXJ6YW5pZSB3acSZa3N6b8WbY2kgZGFueWNoIHcgdGxlLiBQb2N6dGEsIGN6YXQgaSBpbm5lIHN5bmNocm9uaXpvd2FuZSBhcGxpa2FjamUgbW9nxIUgbmllIGFrdHVhbGl6b3dhxIcgc3dvamVqIHphd2FydG/Fm2NpLCBkb3DDs2tpIGljaCBuaWUgb3R3b3J6eXN6LlxuXG5Pc3pjesSZZHphbmllIGJhdGVyaWkgd3nFgsSFY3phIHNpxJkgYXV0b21hdHljem5pZSBwb2RjemFzIMWCYWRvd2FuaWEgdXJ6xIVkemVuaWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJaYWJsb2tvd2FuYTogbmlnZHkgbmllIHBva2F6dWogdHljaCBwb3dpYWRvbWllxYQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTmlza2E6IHBva2F6dWogbmEgZG9sZSBsaXN0eSBwb3dpYWRvbWllxYQgYmV6IHN5Z25hxYJ1IGTFundpxJlrb3dlZ28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbG5hOiBwb2thenVqIHRlIHBvd2lhZG9taWVuaWEgYmV6IHN5Z25hxYJ1IGTFundpxJlrb3dlZ28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Ild5c29rYTogcG9rYXp1aiBuYSBwb2N6xIV0a3UgbGlzdHkgcG93aWFkb21pZcWEIGkgb2R0d2FyemFqIGTFundpxJlrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlBpbG5hOiB3ecWbd2lldGxhaiBuYSBla3JhbmllIGkgb2R0d2FyemFqIGTFundpxJlrIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+UHJ6ZXogJTEkZCBtaW51dHkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij5QcnpleiAlMSRkIG1pbnV0IChkbyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTQ2LDQgKzE1NDYsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+V3licmFubyA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJJbm5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IlVzdGF3acWCZcWbIHdhxbxub8WbxIcgdHljaCBwb3dpYWRvbWllxYQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJUYSB3aWFkb21vxZvEhyBqZXN0IHdhxbxuYSB6ZSB3emdsxJlkdSBuYSBvc29ieSB1Y3plc3RuaWN6xIVjZSB3IHfEhXRrdS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKaW5kZXggZjc4NzQ5OS4uOTE4MjFhNCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9xdWVhciBhZ29yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZcO6ZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTW9kbyBkZSBzZWd1cmFuw6dhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iU2lzdGVtYSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXNzb2FsIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJJbmNsdWkgZGFkb3MgcGVzc29haXMsIGNvbW8gbsO6bWVyb3MgZGUgY2FydMOjbyBkZSBjcsOpZGl0byBlIHNlbmhhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkNvbnRyb2xhciBhbXBsaWHDp8OjbyBkYSB0ZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkNvbnRyb2xhciBvIHBvc2ljaW9uYW1lbnRvIGUgbsOtdmVsIGRlIHpvb20gZGEgdGVsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJGYXplciBnZXN0b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IlRvcXVlLCBkZXNsaXplLCBmYcOnYSBnZXN0b3MgZGUgcGluw6dhIGUgZmHDp2Egb3V0cm9zIGdlc3Rvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkZXNhdGl2YXIgb3UgbW9kaWZpY2FyIGEgYmFycmEgZGUgc3RhdHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlBlcm1pdGUgcXVlIG8gYXBwIGRlc2F0aXZlIGEgYmFycmEgZGUgc3RhdHVzIG91IGFkaWNpb25lIGUgcmVtb3ZhIMOtY29uZXMgZG8gc2lzdGVtYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4ic2VyIGEgYmFycmEgZGUgc3RhdHVzIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iUGVybWl0ZSBxdWUgbyBhcHAgdGlyZSBmb3RvcyBlIGZpbG1lIHbDrWRlb3MgY29tIGEgY8OibWVyYS4gRXN0YSBwZXJtaXNzw6NvIGF1dG9yaXphIG8gYXBwIGEgdXNhciBhIGPDom1lcmEgYSBxdWFscXVlciBtb21lbnRvIHNlbSBzdWEgY29uZmlybWHDp8Ojby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGFyIHZpYnJhw6fDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBlcm1pdGUgcXVlIG8gYXBwIGNvbnRyb2xlIGEgdmlicmHDp8Ojby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iY29udHJvbGFyIGxhbnRlcm5hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJQZXJtaXRlIHF1ZSBvIGFwcCBjb250cm9sZSBhIGxhbnRlcm5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImxpZ2FyIGRpcmV0YW1lbnRlIHBhcmEgbsO6bWVyb3MgZGUgdGVsZWZvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWl0ZSBxdWUgbyBhcHAgbGlndWUgcGFyYSBuw7ptZXJvcyBkZSB0ZWxlZm9uZSBzZW0gc3VhIGludGVydmVuw6fDo28uIElzc28gcG9kZSByZXN1bHRhciBlbSBjb2JyYW7Dp2FzIG91IGNoYW1hZGFzIGluZXNwZXJhZGFzLiBFc3RhIG9ww6fDo28gbsOjbyBwZXJtaXRlIHF1ZSBvIGFwcCBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIGVtZXJnw6puY2lhLiBBcHBzIG1hbGljaW9zb3MgcG9kZW0gZ2VyYXIgY3VzdG9zIGNvbSBjaGFtYWRhcyBmZWl0YXMgc2VtIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNlc3NhciBzZXJ2acOnbyBkZSBtZW5zYWdlbnMgaW5zdGFudMOibmVhcyBwYXJhIGNoYW1hZGFzIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJSZWNvcnRhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iQ29sYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkNvbGFyIGNvbW8gdGV4dG8gc2ltcGxlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iU3Vic3RpdHVpci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJFeGNsdWlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJDb3BpYXIgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iU2VsZWNpb25hciB0ZXh0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iRGVzZmF6ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZmF6ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZcOnw6NvIGRlIHRleHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkFkaWNpb25hciBhbyBkaWNpb27DoXJpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRXhjbHVpciI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJBbHRlcmFyIHBsYW5vIGRlIGZ1bmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iT3V2aW50ZSBkZSBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUHJvdmVkb3IgZGUgY29uZGnDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RlbnRlIGRlIG5vdGlmaWNhw6fDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iQSBWUE4gZXN0w6EgYXRpdmFkYSBwb3IgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9xdWUgcGFyYSBnZXJlbmNpYXIgYSByZWRlLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJBdHVhbGl6YWRvIHBlbG8gYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iRXhjbHXDrWRvIHBlbG8gc2V1IGFkbWluaXN0cmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlBhcmEgYWp1ZGFyIGEgbWVsaG9yYXIgYSBkdXJhw6fDo28gZGEgYmF0ZXJpYSwgbyBlY29ub21pemFkb3IgZGUgYmF0ZXJpYSByZWR1eiBvIGRlc2VtcGVuaG8gZSBvcyBsaW1pdGVzIGRlIHZpYnJhw6fDo28gZG8gZGlzcG9zaXRpdm8sIG9zIHNlcnZpw6dvcyBkZSBsb2NhbGl6YcOnw6NvIGUgYSBtYWlvcmlhIGRvcyBkYWRvcyBkZSBzZWd1bmRvIHBsYW5vLiBFLW1haWwsIG1lbnNhZ2VucyBlIG91dHJvcyBhcGxpY2F0aXZvcyBxdWUgZGVwZW5kZW0gZGUgc2luY3Jvbml6YcOnw6NvIG7Do28gcG9kZW0gc2VyIGF0dWFsaXphZG9zLCBhIG7Do28gc2VyIHF1ZSB2b2PDqiBvcyBhYnJhLlxuXG5PIGVjb25vbWl6YWRvciBkZSBiYXRlcmlhIMOpIGRlc2xpZ2FkbyBhdXRvbWF0aWNhbWVudGUgcXVhbmRvIG8gZGlzcG9zaXRpdm8gZXN0w6Egc2VuZG8gY2FycmVnYWRvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvcXVlYWRhOiBudW5jYSBtb3N0cmFyIGVzc2FzIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IkJhaXhhOiBtb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogbW9zdHJhciBlc3NhcyBub3RpZmljYcOnw7VlcyBkZSBmb3JtYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJBbHRhOiBtb3N0cmFyIG5hIHBhcnRlIHN1cGVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnRlOiBtb3N0cmFyIHBhcmNpYWxtZW50ZSBuYSB0ZWxhIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlBvciAlMSRkIG1pbnV0b3MgKGF0w6kgw6BzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+UG9yICUxJGQgbWludXRvcyAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IHNlbGVjaW9uYWRvczwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRpdmVyc29zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IlZvY8OqIGRlZmluaXUgYSBpbXBvcnTDom5jaWEgZGVzc2FzIG5vdGlmaWNhw6fDtWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iSXNzbyDDqSBpbXBvcnRhbnRlIHBvciBjYXVzYSBkYXMgcGVzc29hcyBlbnZvbHZpZGFzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCA4MjY3NzFlLi5mMzdkM2E2IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb3F1ZWFyIGFnb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlw7pkbyBvY3VsdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RvIHNlZ3VybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbWEgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVzc29hbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iSW5jbHVpIGRhZG9zIHBlc3NvYWlzLCBjb21vIG7Dum1lcm9zIGRlIGNhcnTDtWVzIGRlIGNyw6lkaXRvIGUgcGFsYXZyYXMtcGFzc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJDb250cm9sYXIgYSBhbXBsaWHDp8OjbyBkbyBlY3LDoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sYXIgbyBuw612ZWwgZGUgem9vbSBlIG8gcG9zaWNpb25hbWVudG8gZG8gZWNyw6MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iUmVhbGl6YXIgZ2VzdG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLDiSBwb3Nzw612ZWwgdG9jYXIsIGRlc2xpemFyIHJhcGlkYW1lbnRlLCBqdW50YXIgb3MgZGVkb3MgZSByZWFsaXphciBvdXRyb3MgZ2VzdG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iZGVzYXRpdmFyIG91IG1vZGlmaWNhciBiYXJyYSBkZSBlc3RhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iUGVybWl0ZSDDoCBhcGxpY2HDp8OjbyBkZXNhdGl2YXIgYSBiYXJyYSBkZSBlc3RhZG8gb3UgYWRpY2lvbmFyIGUgcmVtb3ZlciDDrWNvbmVzIGRvIHNpc3RlbWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InNlciBhcHJlc2VudGFkYSBuYSBiYXJyYSBkZSBlc3RhZG8iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBhIGFwbGljYcOnw6NvIHRpcmUgZm90b2dyYWZpYXMgZSBncmF2ZSB2w61kZW9zIGNvbSBhIGPDom1hcmEuIEVzdGEgYXV0b3JpemHDp8OjbyBwZXJtaXRlIHF1ZSBhIGFwbGljYcOnw6NvIHV0aWxpemUgYSBjw6JtYXJhIHNlbSBhIHN1YSBjb25maXJtYcOnw6NvIGVtIHF1YWxxdWVyIGFsdHVyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iY29udHJvbGFyIHZpYnJhw6fDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBlcm1pdGUgw6AgYXBsaWNhw6fDo28gY29udHJvbGFyIG8gdmlicmFkb3IuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ImNvbnRyb2xhciBsYW50ZXJuYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iUGVybWl0ZSDDoCBhcGxpY2HDp8OjbyBjb250cm9sYXIgYSBsYW50ZXJuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJtYXJjYXIgbsO6bWVyb3MgZGUgdGVsZWZvbmUgZGlyZXRhbWVudGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iUGVybWl0ZSBxdWUgYSBhcGxpY2HDp8OjbyBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIHRlbGVmb25lIHNlbSBhIGludGVydmVuw6fDo28gZG8gdXRpbGl6YWRvci4gRXN0YSBhw6fDo28gcG9kZSByZXN1bHRhciBlbSBjb2JyYW7Dp2FzIG91IGNoYW1hZGFzIGluZXNwZXJhZGFzLiBUZW5oYSBlbSBhdGVuw6fDo28gcXVlIGlzdG8gbsOjbyBwZXJtaXRlIHF1ZSBhIGFwbGljYcOnw6NvIGxpZ3VlIHBhcmEgbsO6bWVyb3MgZGUgZW1lcmfDqm5jaWEuIEFzIGFwbGljYcOnw7VlcyBtYWxpY2lvc2FzIHBvZGVtIGZhemVyIGNvbSBxdWUgaW5jb3JyYSBlbSBjdXN0b3MsIGZhemVuZG8gY2hhbWFkYXMgc2VtIGEgc3VhIGNvbmZpcm1hw6fDo28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2VkZXIgYW8gc2VydmnDp28gZGUgY2hhbWFkYXMgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJDb3J0YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IkNvcGlhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkNvbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJDb2xhciBjb21vIHRleHRvIHNpbXBsZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IlN1YnN0aXR1aXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRWxpbWluYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJBbnVsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlZmF6ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iU2VsZWPDp8OjbyBkZSB0ZXh0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZGljaW9uYXIgYW8gZGljaW9uw6FyaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkVsaW1pbmFyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkFsdGVyYXIgaW1hZ2VtIGRlIGZ1bmRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iU2VydmnDp28gZGUgZXNjdXRhIGRlIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJGb3JuZWNlZG9yIGRlIGNvbmRpw6fDo28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc3Npc3RlbnRlIGRlIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYXRpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IkEgVlBOIGZvaSBhdGl2YWRhIHBlbG8gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVG9xdWUgcGFyYSBnZXJpciBhIHJlZGUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0dWFsaXphZG8gcGVsbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFbGltaW5hZG8gcGVsbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQYXJhIGFqdWRhciBhIG1lbGhvcmFyIGEgYXV0b25vbWlhIGRhIGJhdGVyaWEsIGEgcG91cGFuw6dhIGRlIGJhdGVyaWEgcmVkdXogbyBkZXNlbXBlbmhvIGRvIHNldSBkaXNwb3NpdGl2byBlIGxpbWl0YSBhIHZpYnJhw6fDo28sIG9zIHNlcnZpw6dvcyBkZSBsb2NhbGl6YcOnw6NvIGUgYSBtYWlvcmlhIGRvcyBkYWRvcyBlbSBzZWd1bmRvIHBsYW5vLiBPIGVtYWlsLCBhcyBtZW5zYWdlbnMgZSBvdXRyYXMgYXBsaWNhw6fDtWVzIHF1ZSBkZXBlbmRlbSBkYSBzaW5jcm9uaXphw6fDo28gbsOjbyBwb2RlbSBzZXIgYXR1YWxpemFkb3MgZXhjZXRvIHNlIG9zIGFicmlyLlxuXG5BIHBvdXBhbsOnYSBkZSBiYXRlcmlhIGRlc2xpZ2Etc2UgYXV0b21hdGljYW1lbnRlIHF1YW5kbyBvIGRpc3Bvc2l0aXZvIGVzdMOhIGEgY2FycmVnYXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZG86IG51bmNhIG1vc3RyYXIgZXN0YXMgbm90aWZpY2HDp8O1ZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFpeG86IG1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgc2VtIHNvbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzdGFzIG5vdGlmaWNhw6fDtWVzIHNlbSBzb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkVsZXZhZG86IG1vc3RyYXIgbmEgcGFydGUgc3VwZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgY29tIHNvbSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJVcmdlbnRlOiBtb3N0cmFyIG5vIGVjcsOjIGNvbSBzb20iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkR1cmFudGUgJTEkZCBtaW51dG9zIChhdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5EdXJhbnRlIHVtIG1pbnV0byAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkR1cmFudGUgMSBoPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX3VudGlsIiBtc2dpZD0iNzMzNjMwODQ5MjI4OTg3NTA4OCI+IkF0w6kgw6BzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2FsYXJtIiBtc2dpZD0iOTEyODIwNTcyMTMwMTMzMDc5NyI+IkF0w6kgw6BzIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FIj4lMSRzPC94bGlmZjpnPiAocHLDs3hpbW8gYWxhcm1lKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX2FsYXJtIiBtc2dpZD0iOTEyODIwNTcyMTMwMTMzMDc5NyI+IkF0w6kgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUUiPiUxJHM8L3hsaWZmOmc+IChwcsOzeGltbyBhbGFybWUpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iemVuX21vZGVfZm9yZXZlciIgbXNnaWQ9Ijc0MjAwMTE5MzY3NzAwODY5OTMiPiJBdMOpIHF1ZSBvIHV0aWxpemFkb3IgZGVzYXRpdmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9mb3JldmVyX2RuZCIgbXNnaWQ9IjM3OTIxMzI2OTY1NzIxODkwODEiPiJBdMOpIGRlc2F0aXZhciBOw6NvIGluY29tb2RhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9tb2RlX3J1bGVfbmFtZV9jb21iaW5hdGlvbiIgbXNnaWQ9IjE5MTEwOTkzOTk2ODA3NjQ3NyI+Ijx4bGlmZjpnIGlkPSJGSVJTVCI+JTEkczwveGxpZmY6Zz4vPHhsaWZmOmcgaWQ9IlJFU1QiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBzZWxlY2lvbmFkbzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkRpdmVyc29zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkRlZmluaXUgYSBpbXBvcnTDom5jaWEgZGVzdGFzIG5vdGlmaWNhw6fDtWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iw4kgaW1wb3J0YW50ZSBkZXZpZG8gw6BzIHBlc3NvYXMgZW52b2x2aWRhcy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IGY3ODc0OTkuLjkxODIxYTQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkJsb3F1ZWFyIGFnb3JhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiImZ3Q7OTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlw7pkbyBvY3VsdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJNb2RvIGRlIHNlZ3VyYW7Dp2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW1hIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlc3NvYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluY2x1aSBkYWRvcyBwZXNzb2FpcywgY29tbyBuw7ptZXJvcyBkZSBjYXJ0w6NvIGRlIGNyw6lkaXRvIGUgc2VuaGFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iQ29udHJvbGFyIGFtcGxpYcOnw6NvIGRhIHRlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iQ29udHJvbGFyIG8gcG9zaWNpb25hbWVudG8gZSBuw612ZWwgZGUgem9vbSBkYSB0ZWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IkZhemVyIGdlc3RvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iVG9xdWUsIGRlc2xpemUsIGZhw6dhIGdlc3RvcyBkZSBwaW7Dp2EgZSBmYcOnYSBvdXRyb3MgZ2VzdG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImRlc2F0aXZhciBvdSBtb2RpZmljYXIgYSBiYXJyYSBkZSBzdGF0dXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iUGVybWl0ZSBxdWUgbyBhcHAgZGVzYXRpdmUgYSBiYXJyYSBkZSBzdGF0dXMgb3UgYWRpY2lvbmUgZSByZW1vdmEgw61jb25lcyBkbyBzaXN0ZW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJzZXIgYSBiYXJyYSBkZSBzdGF0dXMiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIHF1ZSBvIGFwcCB0aXJlIGZvdG9zIGUgZmlsbWUgdsOtZGVvcyBjb20gYSBjw6JtZXJhLiBFc3RhIHBlcm1pc3PDo28gYXV0b3JpemEgbyBhcHAgYSB1c2FyIGEgY8OibWVyYSBhIHF1YWxxdWVyIG1vbWVudG8gc2VtIHN1YSBjb25maXJtYcOnw6NvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sYXIgdmlicmHDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGVybWl0ZSBxdWUgbyBhcHAgY29udHJvbGUgYSB2aWJyYcOnw6NvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sYXIgbGFudGVybmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBlcm1pdGUgcXVlIG8gYXBwIGNvbnRyb2xlIGEgbGFudGVybmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4ibGlnYXIgZGlyZXRhbWVudGUgcGFyYSBuw7ptZXJvcyBkZSB0ZWxlZm9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJQZXJtaXRlIHF1ZSBvIGFwcCBsaWd1ZSBwYXJhIG7Dum1lcm9zIGRlIHRlbGVmb25lIHNlbSBzdWEgaW50ZXJ2ZW7Dp8Ojby4gSXNzbyBwb2RlIHJlc3VsdGFyIGVtIGNvYnJhbsOnYXMgb3UgY2hhbWFkYXMgaW5lc3BlcmFkYXMuIEVzdGEgb3DDp8OjbyBuw6NvIHBlcm1pdGUgcXVlIG8gYXBwIGxpZ3VlIHBhcmEgbsO6bWVyb3MgZGUgZW1lcmfDqm5jaWEuIEFwcHMgbWFsaWNpb3NvcyBwb2RlbSBnZXJhciBjdXN0b3MgY29tIGNoYW1hZGFzIGZlaXRhcyBzZW0gc3VhIGNvbmZpcm1hw6fDo28uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJhY2Vzc2FyIHNlcnZpw6dvIGRlIG1lbnNhZ2VucyBpbnN0YW50w6JuZWFzIHBhcmEgY2hhbWFkYXMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlJlY29ydGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJDb3BpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJDb2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iQ29sYXIgY29tbyB0ZXh0byBzaW1wbGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJTdWJzdGl0dWlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkV4Y2x1aXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IkNvcGlhciBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJTZWxlY2lvbmFyIHRleHRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJEZXNmYXplciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUmVmYXplciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlw6fDo28gZGUgdGV4dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iQWRpY2lvbmFyIGFvIGRpY2lvbsOhcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJFeGNsdWlyIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkFsdGVyYXIgcGxhbm8gZGUgZnVuZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJPdXZpbnRlIGRlIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJQcm92ZWRvciBkZSBjb25kacOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzc2lzdGVudGUgZGUgbm90aWZpY2HDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJBIFZQTiBlc3TDoSBhdGl2YWRhIHBvciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUb3F1ZSBwYXJhIGdlcmVuY2lhciBhIHJlZGUuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkF0dWFsaXphZG8gcGVsbyBhZG1pbmlzdHJhZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJFeGNsdcOtZG8gcGVsbyBzZXUgYWRtaW5pc3RyYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGFyYSBhanVkYXIgYSBtZWxob3JhciBhIGR1cmHDp8OjbyBkYSBiYXRlcmlhLCBvIGVjb25vbWl6YWRvciBkZSBiYXRlcmlhIHJlZHV6IG8gZGVzZW1wZW5obyBlIG9zIGxpbWl0ZXMgZGUgdmlicmHDp8OjbyBkbyBkaXNwb3NpdGl2bywgb3Mgc2VydmnDp29zIGRlIGxvY2FsaXphw6fDo28gZSBhIG1haW9yaWEgZG9zIGRhZG9zIGRlIHNlZ3VuZG8gcGxhbm8uIEUtbWFpbCwgbWVuc2FnZW5zIGUgb3V0cm9zIGFwbGljYXRpdm9zIHF1ZSBkZXBlbmRlbSBkZSBzaW5jcm9uaXphw6fDo28gbsOjbyBwb2RlbSBzZXIgYXR1YWxpemFkb3MsIGEgbsOjbyBzZXIgcXVlIHZvY8OqIG9zIGFicmEuXG5cbk8gZWNvbm9taXphZG9yIGRlIGJhdGVyaWEgw6kgZGVzbGlnYWRvIGF1dG9tYXRpY2FtZW50ZSBxdWFuZG8gbyBkaXNwb3NpdGl2byBlc3TDoSBzZW5kbyBjYXJyZWdhZG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9xdWVhZGE6IG51bmNhIG1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iQmFpeGE6IG1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsOiBtb3N0cmFyIGVzc2FzIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IkFsdGE6IG1vc3RyYXIgbmEgcGFydGUgc3VwZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlVyZ2VudGU6IG1vc3RyYXIgcGFyY2lhbG1lbnRlIG5hIHRlbGEgZSBlbWl0aXIgc29tIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+UG9yICUxJGQgbWludXRvcyAoYXTDqSDDoHMgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Qb3IgJTEkZCBtaW51dG9zIChhdMOpIMOgcyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gc2VsZWNpb25hZG9zPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iRGl2ZXJzb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVm9jw6ogZGVmaW5pdSBhIGltcG9ydMOibmNpYSBkZXNzYXMgbm90aWZpY2HDp8O1ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJJc3NvIMOpIGltcG9ydGFudGUgcG9yIGNhdXNhIGRhcyBwZXNzb2FzIGVudm9sdmlkYXMuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCBmNDlkNmExLi5iMjM1YjdhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJCbG9jYcibaSBhY3VtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLLgzk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb27Im2ludXR1bCBlc3RlIGFzY3VucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZCBzaWd1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbXVsIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IlBlcnNvbmFsIjwvc3RyaW5nPgpAQCAtMjU2LDYgKzI1Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJJbmNsdWRlIGRhdGUgcGVyc29uYWxlLCBjdW0gYXIgZmkgbnVtZXJlIGFsZSBjYXJkdXJpbG9yIGRlIGNyZWRpdCBzYXUgcGFyb2xlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iQ29udHJvbGHIm2kgbcSDcmlyZWEgcGUgYWZpyJlhaiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJDb250cm9sYcibaSBuaXZlbHVsIGRlIHpvb20gyJlpIHBvemnIm2lvbmFyZWEgYWZpyJlhanVsdWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iRm9sb3NpyJtpIGdlc3R1cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IlNlIHBvYXRlIGF0aW5nZSwgZ2xpc2EsIGNpdXBpIMiZaSBzZSBwb3QgZm9sb3NpIGFsdGUgZ2VzdHVyaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkZXphY3RpdmFyZSBzYXUgbW9kaWZpY2FyZSBiYXJlIGRlIHN0YXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlBlcm1pdGUgYXBsaWNhyJtpZWkgc8SDIGRlemFjdGl2ZXplIGJhcmEgZGUgc3RhcmUgc2F1IHPEgyBhZGF1Z2UgyJlpIHPEgyBlbGltaW5lIHBpY3RvZ3JhbWUgZGUgc2lzdGVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJzxIMgZmllIGJhcmEgZGUgc3RhcmUiPC9zdHJpbmc+CkBAIC0zNTQsOCArMzU3LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQZXJtaXRlIGFwbGljYcibaWVpIHPEgyByZWFsaXplemUgZm90b2dyYWZpaSDImWkgdmlkZW9jbGlwdXJpIGN1IGNhbWVyYSBmb3RvLiBDdSBhY2Vhc3TEgyBwZXJtaXNpdW5lIGFwbGljYcibaWEgdXRpbGl6ZWF6xIMgY2FtZXJhIGZvdG8gb3JpY8OibmQgyJlpIGbEg3LEgyBjb25maXJtYXJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJjb250cm9sZWF6xIMgdmlicmFyZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IlBlcm1pdGUgYXBsaWNhyJtpZWkgc8SDIGNvbnRyb2xlemUgbWVjYW5pc211bCBkZSB2aWJyYXJlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJjb250cm9sIGxhbnRlcm7EgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iUGVybWl0ZSBhcGxpY2HIm2llaSBzxIMgY29udHJvbGV6ZSBsYW50ZXJuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJhcGVsYXJlIGRpcmVjdMSDIG51bWVyZSBkZSB0ZWxlZm9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBlcm1pdGUgYXBsaWNhyJtpZWkgc8SDIGFwZWxlemUgbnVtZXJlIGRlIHRlbGVmb24gZsSDcsSDIGludGVydmVuxaNpYSBkdnMuIEFjZXN0IGx1Y3J1IHBvYXRlIGRldGVybWluYSBhcGFyacibaWEgdW5vciB0YXhlIHNhdSBhIHVub3IgYXBlbHVyaSBuZWHFn3RlcHRhdGUuIEN1IGFjZWFzdMSDIHBlcm1pc2l1bmUgYXBsaWNhyJtpYSBudSBwb2F0ZSBhcGVsYSBudW1lcmVsZSBkZSB1cmdlbsWjxIMuIEFwbGljYcWjaWlsZSByxIN1IGludGVuxaNpb25hdGUgcG90IGFjdW11bGEgY29zdHVyaSBwcmluIGVmZWN0dWFyZWEgdW5vciBhcGVsdXJpIGbEg3LEgyBjb25maXJtYXJlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iYWNjZXNlYXrEgyBzZXJ2aWNpdWwgZGUgYXBlbGFyZSBJTVMiPC9zdHJpbmc+CkBAIC04NjMsMTAgKzg2NCwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkRlY3VwYcWjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iQ29waWHIm2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJJbnNlcmHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+Ikluc2VyYcibaSBjYSB0ZXh0IHNpbXBsdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iw45ubG9jdWnFo2kuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iyJh0ZXJnZcibaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iQ29waWHIm2kgYWRyZXNhIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlNlbGVjdGHIm2kgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iQW51bGHIm2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlcGV0YcibaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJTZWxlY3RhcmUgdGV4dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJBZMSDdWdhyJtpIMOubiBkaWPFo2lvbmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLImHRlcmdlyJtpIjwvc3RyaW5nPgpAQCAtMTExNCw2ICsxMTE4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+Ik1vZGlmaWNhxaNpIGltYWdpbmVhIGRlIGZ1bmRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IlNlcnZpY2l1IGRlIGNpdGlyZSBhIG5vdGlmaWPEg3JpbG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJGdXJuaXpvciBkZSBjb25kacibaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudCBwZW50cnUgbm90aWZpY8SDcmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBhY3RpdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGVzdGUgYWN0aXZhdMSDIGRlIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkF0aW5nZcibaSBwZW50cnUgYSBnZXN0aW9uYSByZcWjZWF1YS4iPC9zdHJpbmc+CkBAIC0xNDQ5LDExICsxNDU0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iQWN0dWFsaXphdCBkZSB1biBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLImHRlcnMgZGUgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGVudHJ1IGEgw65tYnVuxIN0xIPIm2kgYXV0b25vbWlhIGJhdGVyaWVpLCBmdW5jyJtpYSBkZSBlY29ub21pc2lyZSBhIGVuZXJnaWVpIHJlZHVjZSBwZXJmb3JtYW7Im2VsZSBkaXNwb3ppdGl2dWx1aSDImWkgbGltaXRlYXrEgyB2aWJyYcibaWlsZSwgc2VydmljaWlsZSBkZSBsb2NhbGl6YXJlIMiZaSBtYWpvcml0YXRlYSBkYXRlbG9yIGRlIGZ1bmRhbC4gRXN0ZSBwb3NpYmlsIGNhIGUtbWFpbHVyaWxlLCBtZXNhZ2VyaWEgyJlpIGFsdGUgYXBsaWNhyJtpaSBjYXJlIGRlcGluZCBkZSBzaW5jcm9uaXphcmUgc8SDIG51IHNlIGFjdHVhbGl6ZXplIGRhY8SDIG51IGxlIGRlc2NoaWRlyJtpLlxuXG5GdW5jyJtpYSBkZSBlY29ub21pc2lyZSBhIGVuZXJnaWVpIHNlIGRlemFjdGl2ZWF6xIMgYXV0b21hdCBjw6JuZCBkaXNwb3ppdGl2dWwgc2Ugw65uY2FyY8SDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvY2F0ZTogYWNlc3RlIG5vdGlmaWPEg3JpIG51IHNlIGFmaciZZWF6xIMgbmljaW9kYXTEgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJSZWR1c8SDOiBzZSBhZmnImWVhesSDIMOubiBwYXJ0ZWEgZGUgam9zIGEgbGlzdGVpIGN1IG5vdGlmaWPEg3JpIGbEg3LEgyBhIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWzEgzogYWNlc3RlIG5vdGlmaWPEg3JpIHNlIGFmaciZZWF6xIMgZsSDcsSDIGEgc2UgZW1pdGUgdW4gc3VuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IlJpZGljYXTEgzogc2UgYWZpyJllYXrEgyDDrm4gcGFydGVhIGRlIHN1cyBhIGxpc3RlaSBjdSBub3RpZmljxINyaSDImWkgc2UgZW1pdGUgdW4gc3VuZXQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnZW50ZTogc2UgYWZpyJllYXrEgyBwZW50cnUgbyBzY3VydMSDIGR1cmF0xIMgcGUgZWNyYW4gyJlpIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+VGltcCBkZSAlMSRkIG1pbnV0ZSAocMOibsSDIGxhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VGltcCBkZSAlMSRkIGRlIG1pbnV0ZSAocMOibsSDIGxhIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MjgsNCArMTUyOCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4gc2VsZWN0YXQ8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJEaXZlcnNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkR2cy4gc2V0YcibaSBpbXBvcnRhbsibYSBhY2VzdG9yIG5vdGlmaWPEg3JpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iTm90aWZpY2FyZWEgZXN0ZSBpbXBvcnRhbnTEgyBhdsOibmQgw65uIHZlZGVyZSBwZXJzb2FuZWxlIGltcGxpY2F0ZS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IGNlZTI0ZGEuLjBjNWZiMDliIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQl9Cw0LHQu9C+0LrQuNGA0L7QstCw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iJmd0Ozk5OSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodC+0LTQtdGA0LbQuNC80L7QtSDRgdC60YDRi9GC0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLQkdC10LfQvtC/0LDRgdC90YvQuSDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4i0KHQuNGB0YLQtdC80LAgQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i0JvQuNGH0L3Ri9C1INC00LDQvdC90YvQtSI8L3N0cmluZz4KQEAgLTI1Nyw2ICsyNTgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i0JIg0YLQvtC8INGH0LjRgdC70LUg0LvQuNGH0L3Ri9C1INC00LDQvdC90YvQtSwg0L3QsNC/0YDQuNC80LXRgCDQvdC+0LzQtdGA0LAg0LrRgNC10LTQuNGC0L3Ri9GFINC60LDRgNGCINC4INC/0LDRgNC+0LvQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+ItCj0L/RgNCw0LLQu9GP0YLRjCDQvNCw0YHRiNGC0LDQsdC+0Lwg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLQo9C/0YDQsNCy0LvRj9GC0Ywg0L/QvtC30LjRhtC40L7QvdC40YDQvtCy0LDQvdC40LXQvCDQuCDRgNCw0LfQvNC10YDQvtC8INC40LfQvtCx0YDQsNC20LXQvdC40Y8g0L3QsCDRjdC60YDQsNC90LUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i0JbQtdGB0YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i0JzQvtC20LXRgiDQstGL0L/QvtC70L3Rj9GC0Ywg0LbQtdGB0YLRiyDQvdCw0LbQsNGC0LjRjywg0L/RgNC+0LvQuNGB0YLRi9Cy0LDQvdC40Y8sINC80LDRgdGI0YLQsNCx0LjRgNC+0LLQsNC90LjRjyDQuMKg0YIuwqDQtC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLQntGC0LrQu9GO0YfQtdC90LjQtS/QuNC30LzQtdC90LXQvdC40LUg0YHRgtGA0L7QutC4INGB0L7RgdGC0L7Rj9C90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0L7RgtC60LvRjtGH0LDRgtGMINGB0YLRgNC+0LrRgyDRgdC+0YHRgtC+0Y/QvdC40Y8sINCwINGC0LDQutC20LUg0LTQvtCx0LDQstC70Y/RgtGMINC4INGD0LTQsNC70Y/RgtGMINGB0LjRgdGC0LXQvNC90YvQtSDQt9C90LDRh9C60LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ItCX0LDQvNC10L3QsCDRgdGC0YDQvtC60Lgg0YHQvtGB0YLQvtGP0L3QuNGPIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1OCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINGB0L3QuNC80LDRgtGMINGE0L7RgtC+0LPRgNCw0YTQuNC4INC4INCy0LjQtNC10L7RgNC+0LvQuNC60Lgg0YEg0L/QvtC80L7RidGM0Y4g0LrQsNC80LXRgNGLINCyINC70Y7QsdC+0LUg0LLRgNC10LzRjyDQsdC10Lcg0LLQsNGI0LXQs9C+INGA0LDQt9GA0LXRiNC10L3QuNGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQo9C/0YDQsNCy0LvQtdC90LjQtSDRhNGD0L3QutGG0LjQtdC5INCy0LjQsdGA0L7RgdC40LPQvdCw0LvQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0J/RgNC40LvQvtC20LXQvdC40LUg0YHQvNC+0LbQtdGCINC60L7QvdGC0YDQvtC70LjRgNC+0LLQsNGC0Ywg0LLQuNCx0YDQvtGB0LjQs9C90LDQu9GLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQo9C/0YDQsNCy0LvQtdC90LjQtSDQstGB0L/Ri9GI0LrQvtC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0LrQvtC90YLRgNC+0LvQuNGA0L7QstCw0YLRjCDQstGB0L/Ri9GI0LrRgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLQntGB0YPRidC10YHRgtCy0LvQtdC90LjQtSDRgtC10LvQtdGE0L7QvdC90YvRhSDQstGL0LfQvtCy0L7QsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLQn9GA0LjQu9C+0LbQtdC90LjQtSDRgdC80L7QttC10YIg0LHQtdC3INCy0LDRiNC10LPQviDRg9GH0LDRgdGC0LjRjyDQt9Cy0L7QvdC40YLRjCDQvdCwINC70Y7QsdC+0Lkg0L3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwLiDQrdGC0L4g0L3QtSDQvtGC0L3QvtGB0LjRgtGB0Y8g0Log0L3QvtC80LXRgNCw0Lwg0Y3QutGB0YLRgNC10L3QvdGL0YUg0YHQu9GD0LbQsS4g0JLRgNC10LTQvtC90L7RgdC90YvQtSDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQvNC+0LPRg9GCINGB0L7QstC10YDRiNCw0YLRjCDQstGL0LfQvtCy0Ysg0LHQtdC3INCy0LDRiNC10LPQviDRgNCw0LfRgNC10YjQtdC90LjRjywg0YfRgtC+INC80L7QttC10YIg0L/RgNC40LLQtdGB0YLQuCDQuiDQvdC10L/RgNC10LTQstC40LTQtdC90L3Ri9C8INGA0LDRgdGF0L7QtNCw0LwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLRgdC+0LLQtdGA0YjQtdC90LjQtSDQt9Cy0L7QvdC60L7QsiDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC70YPQttCx0YsgSU1TIjwvc3RyaW5nPgpAQCAtODY4LDEwICs4NjksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQktGL0YDQtdC30LDRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtC+0L/QuNGA0L7QstCw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCS0YHRgtCw0LLQuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+ItCS0YHRgtCw0LLQuNGC0Ywg0LrQsNC6INC+0LHRi9GH0L3Ri9C5INGC0LXQutGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+ItCX0LDQvNC10L3QuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i0KPQtNCw0LvQuNGC0YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+ItCa0L7Qv9C40YDQvtCy0LDRgtGMIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCS0YvQsdGA0LDRgtGMINGC0LXQutGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCe0YLQvNC10L3QuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItCf0L7QstGC0L7RgNC40YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQktGL0LHQvtGAINGC0LXQutGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQlNC+0LHQsNCy0LjRgtGMINCyINGB0LvQvtCy0LDRgNGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLQo9C00LDQu9C40YLRjCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQodC80LXQvdC40YLRjCDQvtCx0L7QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCh0LvRg9C20LHQsCDQv9GA0L7RgdC80L7RgtGA0LAg0YPQstC10LTQvtC80LvQtdC90LjQuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i0J/QvtGB0YLQsNCy0YnQuNC6INGD0YHQu9C+0LLQuNC5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i0JDRgdGB0LjRgdGC0LXQvdGCINGD0LLQtdC00L7QvNC70LXQvdC40LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+ItCh0LXRgtGMIFZQTiDQsNC60YLQuNCy0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+ItCh0LXRgtGMIFZQTiDQsNC60YLQuNCy0LjRgNC+0LLQsNC90LAg0L/RgNC40LvQvtC20LXQvdC40LXQvCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQndCw0LbQvNC40YLQtSwg0YfRgtC+0LHRiyDQvtGC0LrRgNGL0YLRjCDQvdCw0YHRgtGA0L7QudC60LguIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMSArMTQ2Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCe0LHQvdC+0LLQu9C10L3QviDQsNC00LzQuNC90LjRgdGC0YDQsNGC0L7RgNC+0LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+ItCj0LTQsNC70LXQvdC+INCw0LTQvNC40L3QuNGB0YLRgNCw0YLQvtGA0L7QvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0KfRgtC+0LHRiyDQv9GA0L7QtNC70LjRgtGMINCy0YDQtdC80Y8g0YDQsNCx0L7RgtGLINGD0YHRgtGA0L7QudGB0YLQstCwINC+0YIg0LHQsNGC0LDRgNC10LgsINCyINGA0LXQttC40LzQtSDRjdC90LXRgNCz0L7RgdCx0LXRgNC10LbQtdC90LjRjyDRgdC90LjQttCw0LXRgtGB0Y8g0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtGMLCDQsCDRgtCw0LrQttC1INC+0LPRgNCw0L3QuNGH0LjQstCw0LXRgtGB0Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LUg0LLQuNCx0YDQsNGG0LjQuCwg0LPQtdC+0LvQvtC60LDRhtC40Lgg0Lgg0YTQvtC90L7QstC+0Lkg0L/QtdGA0LXQtNCw0YfQuCDQtNCw0L3QvdGL0YUuINCU0LDQvdC90YvQtSwg0YLRgNC10LHRg9GO0YnQuNC1INGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNC4LCDQvNC+0LPRg9GCINC+0LHQvdC+0LLQu9GP0YLRjNGB0Y8g0YLQvtC70YzQutC+INC60L7Qs9C00LAg0LLRiyDQvtGC0LrRgNC+0LXRgtC1INC/0YDQuNC70L7QttC10L3QuNC1LlxuXG7QoNC10LbQuNC8INGN0L3QtdGA0LPQvtGB0LHQtdGA0LXQttC10L3QuNGPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC+0YLQutC70Y7Rh9Cw0LXRgtGB0Y8g0LLQviDQstGA0LXQvNGPINC30LDRgNGP0LTQutC4INGD0YHRgtGA0L7QudGB0YLQstCwLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i0JfQsNCx0LvQvtC60LjRgNC+0LLQsNC90L46INC90LUg0L/QvtC60LDQt9GL0LLQsNGC0Ywg0Y3RgtC4INGD0LLQtdC00L7QvNC70LXQvdC40Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0J3QuNC30LrQsNGPOiDQv9C+0LrQsNC30YvQstCw0YLRjCDQsdC10Lcg0LfQstGD0LrQsCDQsiDQutC+0L3RhtC1INGB0L/QuNGB0LrQsCDRg9Cy0LXQtNC+0LzQu9C10L3QuNC5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLQntCx0YvRh9C90LDRjzog0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YPQstC10LTQvtC80LvQtdC90LjRjyDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JLRi9GB0L7QutCw0Y86INC/0L7QutCw0LfRi9Cy0LDRgtGMINGB0L4g0LfQstGD0LrQvtC8INCyINC90LDRh9Cw0LvQtSDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQodGA0L7Rh9C90L46INC/0L7QutCw0LfRi9Cy0LDRgtGMINGB0L4g0LfQstGD0LrQvtCy0YvQvCDRgdC40LPQvdCw0LvQvtC8INC/0L7QstC10YDRhSDQstGB0LXRhSDQvtC60L7QvSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiUxJGQg0LzQuNC90YPRgtCwICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQg0LzQuNC90YPRgtGLICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1NDYsNCArMTU0Niw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCS0YvQsdGA0LDQvdC+OiA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLQlNGA0YPQs9C+0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i0JLRiyDQvtC/0YDQtdC00LXQu9GP0LXRgtC1INCy0LDQttC90L7RgdGC0Ywg0Y3RgtC40YUg0YPQstC10LTQvtC80LvQtdC90LjQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+ItCS0LDQttC90L7QtSAo0LvRjtC00LgpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCmluZGV4IGM4YTQ1ZWIxLi4xN2YwZjk3IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC2r+C3kOC2seC3iiDgtoXgtpzgt5Tgt4Xgt5Qg4Lav4La44Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC3g+C3kOC2n+C3gOC3lOC2q+C3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLgtobgtrvgtprgt4rigI3gt4Lgt5Lgtq0g4LaG4Laa4LeP4La74La6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDgtrTgtq/gt4rgtrDgtq3gt5LgtroiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuC2tOC3nuC2r+C3iuC2nOC2veC3kuC2miI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i4Lar4La64LeA4La74La04Lat4LeKIOC2heC2guC2miDgt4Pgt4Qg4La44LeU4La74La04LavIOC3gOC3kOC2seC3kiDgtrTgt5Tgtq/gt4rgtpzgtr3gt5Lgtpog4Lav4Lat4LeK4LatIOC2h+C2reC3lOC3heC2reC3iiDgt4Dgt5ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLgt4PgtoLgtq/gtrvgt4rgt4HgtrEg4LeA4LeS4LeB4LeP4La94LaxIOC2uOC2p+C3iuC2p+C2uCDgtrTgt4/gtr3gtrHgtrog4Laa4LeS4La74LeT4La4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuC3g+C2guC2r+C2u+C3iuC3geC2seC2uuC3miDgt4Dgt5Lgt4Hgt4/gtr3gtrEg4La44Lan4LeK4Lan4La4IOC3g+C3hCDgtrTgt5Lgt4Tgt5Lgtqfgt5Pgtrgg4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgtoXgtrfgt5LgtrEg4LeD4LeS4Lav4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4Lat4Lan4LeK4Lan4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4LeD4LeK4LeA4La64LeS4La04LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4La04LeS4Lax4LeK4Lag4LeKIOC2muC3kuC2u+C3k+C2uOC2pywg4LeD4LeEIOC3gOC3meC2seC2reC3iiDgtoXgtrfgt5LgtrEg4LeD4LeS4Lav4LeUIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt5Dgtprgt5LgtrouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4Lat4Lat4LeK4LeAIOC2reC3k+C2u+C3lOC3gCDgtoXgtrbgtr0g4Laa4La74Lax4LeK4LaxIOC3hOC3nSDgt4Dgt5ngtrHgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuC2reC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4LaF4Laa4LeK4oCN4La74LeS4La6IOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4La04Lav4LeK4Law4Lat4LeSIOC2seC3kuC2u+C3luC2tOC2miDgtpHgtprgtq3gt5Qg4LeE4LedIOC2ieC3gOC2reC3iiDgtprgt5Lgtrvgt5Pgtrjgtqcg4La64LeZ4Lav4LeU4La44LanIOC2heC3gOC3g+C2uyDgtq/gt5ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuC2reC2reC3iuC2reC3iuC3gCDgtq3gt5Pgtrvgt5Tgt4Ag4La24LeA4LanIOC2tOC2reC3iuC3gOC3k+C2uCI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuC2muC3kOC2uOC2u+C3j+C3gOC3meC2seC3iiDgtrTgt5LgtrHgt4rgtq3gt5bgtrsg4Lac4LeQ4Lax4LeT4La44LanIOC3g+C3hCDgt4Dgt5Pgtqngt5Lgtrrgt50g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngtrgg4LaF4LeA4LeD4La74La6IOC2uOC2n+C3kuC2seC3iiDgtpTgtrbgtpzgt5og4LaF4Lax4LeU4Lav4LeQ4Lax4LeU4La44Laa4LeS4Lax4LeKIOC2reC3nOC2u+C3gCDgtpXgtrHgt5Hgtrgg4LeA4Lea4La94LeP4LeA4Laa4Lav4LeTIOC2muC3kOC2uOC2u+C3j+C3gCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4LeS4La74LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgtprgtrjgt4rgtrTgtrHgtrog4La04LeP4La94Lax4La6IOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Laa4La44LeK4La04Laa4La6IOC2tOC3j+C2veC2seC2uuC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2r+C3meC2seC3iuC2sS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4LeD4LeQ4Lar4LeZ4LeF4LeSIOC2huC2veC3neC2muC2uiDgtrTgt4/gtr3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLgt4Pgt5Dgtqvgt5ngt4Xgt5Lgtrog4La04LeP4La94Lax4La64LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LeA4LeZ4LatIOC2jeC2ouC3lOC3gOC2uCDgtoXgtrjgtq3gtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i4LaU4La24Lac4LeaIOC2uOC3kOC2r+C3kuC3hOC2reC3iiDgt4Dgt5Pgtrjgtprgt4og4Lax4Lec4La44LeQ4Lat4LeS4LeAIOC2r+C3lOC2u+C2muC2ruC2sSDgtoXgtoLgtpog4LaH4La44Lat4LeT4La44LanIOC2uuC3meC2r+C3lOC2uOC2pyDgtoXgt4Dgt4Pgtrsg4Lav4LeZ4Lax4LeK4LaxLiDgtrjgt5ngt4Tgt5Ig4La04LeK4oCN4La74Lat4LeS4LaR4La94La6IOC3gOC2seC3iuC2seC3miDgtoXgtrHgtrTgt5rgtprgt4rgt4Lgt5Lgtq0g4LaF4La64Laa4LeS4La74LeT4La44LeKIOC3hOC3nSDgtofgtrjgtq3gt5Tgtrjgt4og4LaH4Lat4LeS4LeA4LeT4La44La64LeSLiDgtrjgt5ngtrrgtrHgt4og4LeE4Lav4LeS4LeD4LeSIOC2heC2guC2miDgt4Dgtr3gtqcg4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC2pyDgtrrgt5ngtq/gt5Tgtrjgtqcg4LaF4LeA4LeD4La7IOC2seC3nOC2r+C3meC2sSDgtrbgt4Dgtqcg4LeD4Lan4LeE4Lax4LeKIOC2muC2u+C2nOC2seC3iuC2sS4g4LaU4La24Lac4LeaIOC2heC2seC3lOC2r+C3kOC2seC3lOC2uOC2muC3iiDgtrHgt5zgtrjgt5Dgtq3gt5Lgt4Ag4LaH4La44Lat4LeU4La44LeKIOC2nOC3kOC2seC3k+C2uOC3meC2seC3iiDgtoXgtrHgt5Lgt4Lgt4rgtqcg4La64LeZ4Lav4LeU4La44LeKIOC2lOC2tuC2nOC3miDgtrjgt5Tgtq/gtr3gt4og4Lax4LeS4Laa4La74LeU4Lar4LeaIOC3gOC3kOC2uiDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4LaH4La44Lat4LeU4La44LeKIOC3g+C3muC3gOC3j+C3gOC2pyDgtrTgt5Lgt4Dgt5Lgt4Pgt5ngtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC04NjAsMTAgKzg2MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuC2muC2tOC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4La04LeS4Lan4La04Lat4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuC2heC2veC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LeD4La74La9IOC2tOC3meC3hSDgtr3gt5ngt4Mg4LaF4La94LeA4Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgtrTgt4rigI3gtrvgtq3gt5Lgt4Pgt4rgtq7gt4/gtrTgtrHgtrog4Laa4La74Lax4LeK4LaxLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC2uOC2muC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOC2tOC3kuC2p+C2tOC2reC3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgtrTgt5ngt4Ug4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgtoXgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLgtrrgt4Xgt5Ig4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IuC2tOC3meC3hSDgtq3gt5rgtrvgt5PgtrgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i4LeB4La24LeK4LavIOC2muC3neC3guC2uuC2pyDgtpHgtprgtq3gt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgtrjgtprgtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC0xMTA5LDYgKzExMTMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4La24LeS4Lat4LeU4La04LatIOC3gOC3meC2seC3g+C3iiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LaF4LeD4Lax4LeK4Lax4LePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLgtq3gtq3gt4rgtq3gt4rgt4Dgtrog4LeD4La04La64Lax4LeK4Lax4LePIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC3g+C3hOC3j+C2uuC2miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2muC2uuC3kiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgtrjgtp/gt5LgtrHgt4ogVlBOIOC3g+C2muC3iuKAjeC2u+C3k+C2uiDgtprgtrvgtrEg4La94Lav4LeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4Lai4LeP4La94La6IOC2muC3heC2uOC2seC3j+C2muC2u+C2q+C2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+CkBAIC0xNDQyLDExICsxNDQ3LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LaU4La24Lac4LeaIOC2tOC2u+C3kuC2tOC3j+C2veC2miDgt4Dgt5Lgt4Pgt5LgtrHgt4og4La64LeP4LeA4Lat4LeK4Laa4LeP4La94LeT4LaxIOC2muC2u+C2sSDgtr3gtq/gt5MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuC2lOC2tuC2nOC3miDgtrTgtrvgt5LgtrTgt4/gtr3gtpog4LeA4LeS4LeD4LeS4Lax4LeKIOC2uOC2muC2sSDgtr3gtq8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuC2tuC3kOC2p+C2u+C3kiDgtobgtrrgt5Qg4Laa4LeP4La94La6IOC3gOC3kOC2qeC3kuC2r+C3kuC2uuC3lOC2q+C3lCDgtprgt5Lgtrvgt5Pgtrjgtqcg4LaL4Lav4LeA4LeUIOC2muC3kuC2u+C3k+C2uOC2pywg4La24LeQ4Lan4La74LeSIOC3g+C3lOC2u+C3kOC2muC3lOC2uCDgtpTgtrbgt5og4LaL4La04LeP4LaC4Lac4La64LeaIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3k+C2reC3iuC3gOC2uiDgtoXgtqngt5TgtprgtrvgtrEg4LaF4Lat4La7IOC2muC2uOC3iuC2tOC2seC2uiwg4La04LeS4LeE4LeS4Lan4LeT4La44LeKIOC3g+C3muC3gOC3jywg4LeD4LeEIOC2tuC3nOC3hOC3neC2uOC2uuC2muC3iiDgtrTgt4Pgt5Tgtrbgt5Lgtrjgt4og4Lav4Lat4LeK4LatIOC3g+C3k+C2uOC3jyDgtprgtrvgtrrgt5IuIOC2lOC2tiDgtpLgt4Dgt48g4LeA4LeS4LeA4LeY4LatIOC2seC3nOC2muC2u+C2seC3iuC2seC3miDgtrHgtrjgt4og4La44LeS4LeDIOC2iuC2uOC3muC2veC3iiwg4La04Lar4LeS4LeA4LeS4Lap4Laa4La74Lar4La6LCDgt4Pgt4Qg4LeD4La44La44LeU4LeE4LeU4La74LeK4LatIOC2muC3kuC2u+C3k+C2uCDgtrjgtq0g4La74Laz4LePIOC2tOC3gOC2reC3kuC2sSDgt4Dgt5ngtrHgtq3gt4og4La64LeZ4Lav4LeU4La44LeKIOC2uuC3j+C3gOC2reC3iuC2muC3j+C2veC3k+C2sSDgtrHgt5zgt4Dgt5Lgtrog4LeE4LeQ4Laa4LeS4La6LlxuXG7gtpTgtrbgt5og4LaL4La04LeP4LaC4Lac4La6IOC2huC2u+C3neC2tOC2q+C2uiDgt4DgtrEg4LeA4LeS4LanIOC2tuC3kOC2p+C2u+C3kiDgt4Pgt5Tgtrvgt5Dgtprgt5Tgtrgg4LeD4LeK4LeA4La64LaC4Laa4LeK4oCN4La74LeS4La64LeAIOC2heC2muC3iuKAjeC2u+C3kuC2uiDgt4Dgt5ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgtoXgt4Dgt4Tgt5Lgtrsg4Laa4LeFOiDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2muC3kuC3g+C3kuC2r+C3jyDgtrHgt5zgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LaF4Lap4LeUOiDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4LeE4LeSIOC2tOC3hOC3heC3kuC2seC3iuC2uCDgtrHgt5Lgt4Hgt4rgt4Hgtrbgt4rgtq/gt4Ag4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLgt4Pgt4/gtrjgt4/gtrHgt4rigI3gtro6IOC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C3gCDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LeA4LeQ4Lap4LeSOiDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4La94LeQ4La64LeS4LeD4LeK4Lat4LeU4LeA4LeZ4LeE4LeSIOC2ieC3hOC3heC3kuC2seC3iuC2uCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEg4LeD4LeEIOC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4LeE4Lav4LeS4LeD4LeSOiDgtq3gt5Lgtrvgtrrgtqcg4La04LeQ4La44LeS4LarIOC3geC2tuC3iuC2ryDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJTEkZCDgtprgt4og4LeD4Laz4LeE4LePICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgtq3gt5ngtprgt4opPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7gtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5QgJTEkZCDgtprgt4og4LeD4Laz4LeE4LePICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgtq3gt5ngtprgt4opPC9pdGVtPgpAQCAtMTUxMiw0ICsxNTEyLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IOC2muC3iiDgtq3gt53gtrvgtrEg4La94Lav4LeSPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i4LeA4LeS4LeA4LeS4Law4LeP4Laa4LeP4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuC2lOC2tiDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeK4LeA4La9IOC3gOC3kOC2r+C2nOC2reC3iuC2muC2uCDgt4Pgtprgt4Pgt48g4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i4LeD4La44LeK4La24Lax4LeK4LawIOC3gOC3liDgtrTgt5Tgtq/gt4rgtpzgtr3gtrrgtrHgt4og4Lax4LeS4LeD4LePIOC2uOC3meC2uiDgt4Dgt5Dgtq/gtpzgtq3gt4og4LeA4LeaLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggMjQyYTg0NC4uZDljNzlmMiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iVXphbWtuw7rFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTa3J5dMO9IG9ic2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTsO6ZHpvdsO9IHJlxb5pbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlN5c3TDqW0gQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iT3NvYm7DqSI8L3N0cmluZz4KQEAgLTI1Nyw2ICsyNTgsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iU2xlZG92YW5pZSB6YWjFlcWIYSBvc29ibsOpIMO6ZGFqZSBha28gc8O6IMSNw61zbGEga3JlZGl0bsO9Y2gga2FyaWV0IGHCoGhlc2zDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+Ik92bMOhZGFuaWUgcHJpYmzDrcW+ZW5pYSBvYnJhem92a3kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iT3Zsw6FkYWp0ZSDDunJvdmXFiCBwcmlibMOtxb5lbmlhL29kZGlhbGVuaWEgb2JyYXpvdmt5IGHCoHVtaWVzdG5lbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iR2VzdMOhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJKZSBtb8W+bsOpIHBvdcW+acWlIGtsZXBudXRpZSwgcHJlamRlbmllLCBzdGlhaG51dGllIHByc3RhbWkgYcKgxI9hbMWhaWUgZ2VzdMOhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Inpha8OhemFuaWUgYWxlYm8gem1lbnkgc3Rhdm92w6lobyByaWFka2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHZ5cG7DusWlIHN0YXZvdsO9IHJpYWRvayBhbGVibyBwcmlkYcWlIGEgb2RzdHLDoW5pxaUgc3lzdMOpbW92w6kgaWtvbnkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InZ5ZMOhdmFuaWUgc2EgemHCoHN0YXZvdsO9IHJpYWRvayI8L3N0cmluZz4KQEAgLTM1NSw4ICszNTgsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IlVtb8W+xYh1amUgYXBsaWvDoWNpaSBmb3RvZ3JhZm92YcWlIGEgbmFocsOhdmHFpSB2aWRlw6EgcG9tb2NvdSBmb3RvYXBhcsOhdHUuIFRvdG8gcG92b2xlbmllIHVtb8W+xYh1amUgYXBsaWvDoWNpaSBwb3XFvsOtdmHFpSBmb3RvYXBhcsOhdCBrZWR5a2/EvnZlayBhIGJleiB2w6HFoWhvIHBvdHZyZGVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Im92bMOhZGHFpSB2aWJyb3ZhbmllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJVbW/FvsWIdWplIGFwbGlrw6FjaWkgb3Zsw6FkYcWlIHZpYnLDoWNpZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ib3Zsw6FkYcWlIGtvbnRyb2xrdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIG92bMOhZGHFpSBzdmV0bG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4icHJpYW1vIHZvbGHFpSBuYSB0ZWxlZsOzbm5lIMSNw61zbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVW1vxb7FiHVqZSBhcGxpa8OhY2lpIHZvbGHFpSB0ZWxlZsOzbm5lIMSNw61zbGEgYmV6IHbDocWhaG8gesOhc2FodS4gViBkw7RzbGVka3UgdG9obyBzYSBtw7TFvnUgw7rEjXRvdmHFpSBuZW/EjWFrw6F2YW7DqSBwb3BsYXRreSBhbGVibyBzYSBtw7TFvnUgdXNrdXRvxI1uacWlIG5lb8SNYWvDoXZhbsOpIGhvdm9yeS4gVG90byBwb3ZvbGVuaWUgbmV1bW/FvsWIdWplIGFwbGlrw6FjaWkgdm9sYcWlIG5hIMSNw61zbGEgdGllc8WIb3bDqWhvIHZvbGFuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJwcsOtc3R1cCBrIHNsdcW+YmUgdm9sYW5pYSBJTVMiPC9zdHJpbmc+CkBAIC04NjgsMTAgKzg2OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IlZ5c3RyaWhuw7rFpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29ww61yb3ZhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQcmlsZXBpxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IlByaWxlcGnFpSBha28gb2J5xI1ham7DvSB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJOYWhyYWRpxaXigKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iT2RzdHLDoW5pxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlNrb3DDrXJvdmHFpSB3ZWJvdsO6IGFkcmVzdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlZ5YnJhxaUgdGV4dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iU3DDpMWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJabm92YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJWw71iZXIgdGV4dHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iUHJpZGHFpSBkbyBzbG92bsOta2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ik9kc3Ryw6FuacWlIjwvc3RyaW5nPgpAQCAtMTEyMSw2ICsxMTI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IlptZW5pxaUgdGFwZXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iQXBsaWvDoWNpYSBuYSBwb8SNw7p2YW5pZSB1cG96b3JuZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iUG9za3l0b3ZhdGXEviBwb2RtaWVua3kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJBc2lzdGVudCB1cG96b3JuZW7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iU2llxaUgVlBOIGplIGFrdGl2b3ZhbsOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iQXBsaWvDoWNpdSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYWt0aXZvdmFsYSBzaWXFpSBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJEb3R5a29tIG3DtMW+ZXRlIHNwcmF2b3ZhxaUgc2llxaUuIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMSArMTQ2Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFrdHVhbGl6b3ZhbsOpIHNwcsOhdmNvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iT2RzdHLDoW5lbsO9IHNwcsOhdmNvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUyBjaWXEvm9tIHByZWTEusW+acWlIHbDvWRyxb4gYmF0w6lyaWUgem7DrcW+aSDFoWV0cmnEjSBiYXTDqXJpZSB2w71rb25ub3PFpSB6YXJpYWRlbmlhIGHCoG9ibWVkesOtIHZpYnLDoWNpZSwgc2x1xb5ieSB1csSNb3ZhbmlhIHBvbG9oeSBhwqBkw6F0b3bDqSBwcmVub3N5IG5hIHBvemFkw60uIFBvxaF0YSwgxI1ldCBhIMSPYWzFoWllIGFwbGlrw6FjaWUsIGt0b3LDqSBzYSBzcG9saWVoYWrDuiBuYSBzeW5jaHJvbml6w6FjaXUsIHNhIG1vxb5ubyBuZWJ1ZMO6IGFrdHVhbGl6b3ZhxaUsIGRva2lhxL4gaWNoIG5lb3R2b3LDrXRlLlxuXG5QcmkgbmFiw61qYW7DrSB6YXJpYWRlbmlhIHNhIMWhZXRyacSNIGJhdMOpcmllIGF1dG9tYXRpY2t5IHZ5cG5lLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva292YW7DqTogVGlldG8gdXBvem9ybmVuaWEgbmlrZHkgbmV6b2JyYXpvdmHFpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJOw616a2U6IFpvYnJhem92YcWlIHbCoGRvbG5laiDEjWFzdGkgem96bmFtdSB1cG96b3JuZW7DrSBiZXogenZ1a292w6lobyBzaWduw6FsdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybcOhbG5lOiBUaWV0byB1cG96b3JuZW5pYSB6b2JyYXpvdmHFpSBiZXogenZ1a292w6lobyBzaWduw6FsdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iVnlzb2vDqTogWm9icmF6b3ZhxaUgdsKgaG9ybmVqIMSNYXN0aSB6b3puYW11IHVwb3pvcm5lbsOtIHNvIHp2dWtvdsO9bSBzaWduw6Fsb20iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iTmVvZGtsYWRuw6k6IFpvYnJhemnFpSBjZXogb2JyYXpvdmt1IHNvIHp2dWtvdsO9bSBzaWduw6Fsb20iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij4lMSRkIG1pbsO6dHkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij4lMSRkIG1pbsO6dHkgKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1NDYsNCArMTU0Niw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5WeWJyYW7DqTogPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iUsO0em5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+Ik5hc3RhdmlsaSBzdGUgZMO0bGXFvml0b3PFpSB0w71jaHRvIHVwb3pvcm5lbsOtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iVMOhdG8gc3Byw6F2YSBqZSBkw7RsZcW+aXTDoSB2emjEvmFkb20gbmEgb3NvYnksIGt0b3LDvWNoIHNhIHRvIHTDvWthLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKaW5kZXggM2Y2NzY5Yy4uOGUyOTNlMSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCkBAIC0yMjUsNiArMjI1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iWmFrbGVuaSB6ZGFqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiI5OTkgKyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJWc2ViaW5hIGplIHNrcml0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlZhcm5pIG5hxI1pbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IlNpc3RlbSBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJPc2Vibm8iPC9zdHJpbmc+CkBAIC0yNTcsNiArMjU4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IlZrbGp1xI11amUgb3NlYm5lIHBvZGF0a2UsIGtvdCBzbyDFoXRldmlsa2Uga3JlZGl0bmloIGthcnRpYyBpbiBnZXNsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+Ik5hZHppcmFuamUgcG92ZcSNYXZlIHByaWthemEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iTmFkemlyYW5qZSBzdG9wbmplIHBvdmXEjWF2ZSBpbiBwb2xvxb5hamEgcHJpa2F6YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJJenZhamFuamUgcG90ZXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+Ik1vZ2/EjWUgamUgaXp2YWphbmplIGRvdGlrb3YsIHZsZcSNZW5qYSwgdmxlxI1lbmphIHByc3RvdiBza3VwYWogaW4gZHJ1Z2loIHBvdGV6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+Im9uZW1vZ2/EjWFuamUgYWxpIHNwcmVtaW5qYW5qZSB2cnN0aWNlIHN0YW5qYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJBcGxpa2FjaWphbSBvbW9nb8SNYSBvbmVtb2dvxI1lbmplIHZyc3RpY2Ugc3RhbmphIGFsaSBkb2RhamFuamUgaW4gb2RzdHJhbmpldmFuamUgaWtvbiBzaXN0ZW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJwb3N0YW5lIHZyc3RpY2Egc3RhbmphIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1OCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iQXBsaWthY2lqaSBvbW9nb8SNYSBmb3RvZ3JhZmlyYW5qZSBpbiBzbmVtYW5qZSB2aWRlb3Bvc25ldGtvdiBzIGthbWVyby4gUyB0ZW0gZG92b2xqZW5qZW0gbGFoa28gYXBsaWthY2lqYSBrYWRhciBrb2xpIHVwb3JhYmxqYSBrYW1lcm8gYnJleiB2YcWhZSBwb3RyZGl0dmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+Im5hZHpvciB2aWJyaXJhbmphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJBcGxpa2FjaWppIG9tb2dvxI1hIG5hZHpvciB2aWJyaXJhbmphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJuYWR6b3Igc3ZldGlsa2UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IkFwbGlrYWNpamkgb21vZ2/EjWEgbmFkem9yIHN2ZXRpbGtlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Im5lcG9zcmVkbm8ga2xpY2FuamUgdGVsZWZvbnNraWggxaF0ZXZpbGsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iQXBsaWthY2lqaSBvbW9nb8SNYSBrbGljYW5qZSB0ZWxlZm9uc2tpaCDFoXRldmlsayBicmV6IHZhxaFlZ2EgcG9zcmVkb3ZhbmphLiBaYXJhZGkgdGVnYSBsYWhrbyBwcmlkZSBkbyBuZXByacSNYWtvdmFuaWggc3Ryb8Wha292IGFsaSBrbGljZXYuIEFwbGlrYWNpamkgdG8gbmUgZG92b2xqdWplIG9wcmF2bGphbmphIGtsaWNldiB2IHNpbGkuIFpsb25hbWVybmUgYXBsaWthY2lqZSBsYWhrbyBrbGnEjWVqbyBicmV6IHZhxaFlIHBvdHJkaXR2ZSwga2FyIHZhcyBsYWhrbyBkcmFnbyBzdGFuZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+ImRvc3RvcCBkbyBzdG9yaXR2ZSB6YSBrbGljYW5qZSBJTVMiPC9zdHJpbmc+CkBAIC04NjgsMTAgKzg2OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+Ikl6cmXFvmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGlyYWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJQcmlsZXBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJQcmlsZXBpIGtvdCBuYXZhZG5vIGJlc2VkaWxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJaYW1lbmphaiDigKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iSXpicmnFoWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGlyYWogVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iSXpiaXJhIGJlc2VkaWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJSYXp2ZWxqYXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJVdmVsamF2aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiJJemJyYW5vIGJlc2VkaWxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IkRvZGFqIHYgc2xvdmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJJemJyacWhaSI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJTcHJlbWluamFuamUgb3phZGphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iUG9zbHXFoWFsZWMgb2J2ZXN0aWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlBvbnVkbmlrIHBvZ29qZXYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJQb21vxI1uaWsgemEgb2J2ZXN0aWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4gYWt0aXZpcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGplIGFrdGl2aXJhbGEgYXBsaWthY2lqYSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJEb3Rha25pdGUgc2UsIMSNZSDFvmVsaXRlIHVwcmF2bGphdGkgb21yZcW+amUuIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMSArMTQ2Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlBvc29kb2JpbCBza3JibmlrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJJemJyaXNhbCBza3JibmlrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJWYXLEjWV2YW5qZSB6IGVuZXJnaWpvIGFrdW11bGF0b3JqYSBwb2RhbGrFoWEgxI1hcyBuamVnb3ZlZ2EgZGVsb3ZhbmphIHRha28sIGRhIHptYW5qxaFhIHptb2dsaml2b3N0IGRlbG92YW5qYSBuYXByYXZlIGluIG9tZWppIHZpYnJpcmFuamUsIGxva2FjaWpza2Ugc3Rvcml0dmUgdGVyIHByZW5vcyB2ZcSNaW5lIHBvZGF0a292IHYgb3phZGp1LiBBcGxpa2FjaWplIHphIGUtcG/FoXRvLCBzcG9yb8SNYW5qZSBpbiBkcnVnbywga2kgdXBvcmFibGpham8gc2luaHJvbml6aXJhbmplLCBzZSBtb3JkYSBuZSBwb3NvZGFibGpham8sIHJhemVuIMSNZSBqaWggb2RwcmV0ZS5cblxuVmFyxI1ldmFuamUgeiBlbmVyZ2lqbyBha3VtdWxhdG9yamEgc2Ugc2Ftb2Rlam5vIGl6a2xvcGkgbWVkIHBvbG5qZW5qZW0gYWt1bXVsYXRvcmphIG5hcHJhdmUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiJCbG9raXJhbm86IG5pa29saSBuZSBwcmlrYcW+aSB0ZWggb2J2ZXN0aWwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iTWFuaiBwb21lbWJubzogcHJpa2HFvmkgbmEgZG51IHNlem5hbWEgb2J2ZXN0aWwgYnJleiB6dm9rYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iT2JpxI1ham5vOiBwcmlrYcW+aSB0YSBvYnZlc3RpbGEgYnJleiB6dm9rYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iUG9tZW1ibm86IHByaWthxb5pIG5hIHZyaHUgc2V6bmFtYSBvYnZlc3RpbCBpbiBwcmVkdmFqYWogenZvayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJOdWpubzogemEgaGlwIHBva2HFvmkgcHJlZG9nbGVkIG5hIHphc2xvbnUgaW4gcHJlZHZhamFqIHp2b2siPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lZCBtaW51dG8gKGRvIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJ0d28iPiVkIG1pbnV0aSAoZG8gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Niw0ICsxNTQ2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGl6YnJhbmloPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iUmF6bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVmkgZG9sb8SNaXRlIHJhdmVuIHBvbWVtYm5vc3RpIHRlaCBvYnZlc3RpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlBvbWVtYm5vIHphcmFkaSB1ZGVsZcW+ZW5paCBsanVkaS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKaW5kZXggMjY1M2M3MS4uYTI0ZTgyZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJLecOnIHRhbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iUMOrcm1iYWp0amV0IGphbsOrIHTDqyBmc2hlaHVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Ik1vZGFsaXRldGkgaSBzaWd1cmlzw6siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJTaXN0ZW1pIFwiYW5kcm9pZFwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiJQZXJzb25hbCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iUMOrcmZzaGkgdMOrIGRow6tuYXQgcGVyc29uYWxlIHNpIG51bXJhdCBlIGthcnRhdmUgdMOrIGtyZWRpdGl0IHNpIGRoZSBmamFsw6trYWxpbWV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iS29udHJvbGxvIHptYWRoaW1pbiBlIGVrcmFuaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iS29udHJvbGxvIG5pdmVsaW4gZGhlIHBvemljaW9uaW1pbiBlIHptYWRoaW1pdCB0w6sgZWtyYW5pdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJLcnllbiBnamVzdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+Ik11bmQgdMOrIHRyb2thc8OrLCBycsOrc2hxYXPDqywgYmFzaGtvasOrIGdpc2h0YXQgZGhlIGtyeWVqw6sgZ2plc3RlIHTDqyB0amVyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLDp2FrdGl2aXpvIG9zZSBtb2RpZmlrbyBzaGlyaXRpbiBlIHN0YXR1c2l0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+Ikxlam9uIGFwbGlrYWNpb25pbiB0w6sgw6dha3Rpdml6b2rDqyBzaGlyaXRpbiBlIHN0YXR1c2l0IGRoZSB0w6sgaGVxw6sgaWtvbmF0IGUgc2lzdGVtaXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InTDqyBiw6toZXQgc2hpcml0aSBpIHN0YXR1c2l0Ijwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iTGVqb24gYXBsaWthY2lvbiB0w6sga3Jpam9qw6sgZm90b2dyYWZpIGRoZSB2aWRlbyBtZSBrYW1lcsOrbi4gS2pvIGxlamUgbXVuZMOrc29uIHDDq3Jkb3JpbWluIGUga2FtZXLDq3MgbsOrIMOnZG8ga29ow6sgcGEga29uZmlybWltaW4gdMOrbmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+ImtvbnRyb2xsbyBkcmlkaGplbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iTGVqb24gYXBsaWthY2lvbmluIHTDqyBrb250cm9sbG9qw6sgZHJpZGjDq3Npbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia29udHJvbGxvIGVsZWt0cmlrdW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Ikxlam9uIGFwbGlrYWNpb25pbiB0w6sga29udHJvbGxvasOrIGVsZWt0cmlrdW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbm8gZHJlanRww6tyZHJlanQgbnVtcmF0IGUgdGVsZWZvbml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+Ikxlam9uIGFwbGlrYWNpb25pbiB0w6sgdGVsZWZvbm9qw6sgbnVtcmEgcGEgbmTDq3JoeXJqZW4gdMOrbmRlLiBLam8gbXVuZCB0w6sgcmV6dWx0b2rDqyBuw6sgdGFyaWZhIG9zZSB0ZWxlZm9uYXRhIHTDqyBwYXByaXR1cmEuIEtpIHBhcmFzeXNoIHNlIGtqbyBudWsgZSBsZWpvbiBhcGxpa2FjaW9uaW4gdMOrIHRlbGVmb25vasOrIG51bXJhIHVyZ2plbmNlLiBBcGxpa2FjaW9uZSBrZXFkYXNow6tzZSBtdW5kIHTDqyB0w6sga3VzaHRvam7DqyBwYXJhIGR1a2Uga3J5ZXIgdGVsZWZvbmF0YSBwYSBrb25maXJtaW1pbiB0w6tuZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InFhc2plIG7DqyBzaMOrcmJpbWluIGUgdGVsZWZvbmF0YXZlIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4iUHJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiJLb3BqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+Ik5naml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJOZ2ppdGUgc2kgdGVrc3QgdMOrIHRoamVzaHTDqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iWsOrdmVuZMOrc2/igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iRnNoaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29wam8gVVJMLW7DqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlDDq3J6Z2ppZGggdGVrc3RpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iWmhiw6tqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiJSaWLDq2oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUMOrcnpnamVkaGphIGUgdGVrc3RpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJTaHRvIG7DqyBmamFsb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IkZzaGkiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iTmRyeXNobyBpbWF6aGluIGUgc2ZvbmRpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IkTDq2dqdWVzIG5qb2Z0aW1lc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Ik9mcnVlcyBrdXNodGVzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkFzaXN0ZW50aSBpIG5qb2Z0aW1ldmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTi1qYSB1IGFrdGl2aXp1YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTi1qYSDDq3NodMOrIGFrdGl2aXp1YXIgbmdhIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlByZWsgcMOrciB0w6sgbWVuYXhodWFyIHJyamV0aW4uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IlDDq3JkaXTDq3N1YXIgbmdhIGFkbWluaXN0cmF0b3JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJVIGZzaGkgbmdhIGFkbWluaXN0cmF0b3JpIHl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJQw6tyIHTDqyBww6tybWlyw6tzdWFyIGpldMOrZ2phdMOrc2luw6sgZSBiYXRlcmlzw6ssIG9wc2lvbmkgaSBrdXJzaW1pdCB0w6sgYmF0ZXJpc8OrIHVsIHJlbmRpbWVudGluIGUgcGFqaXNqZXMgdMOrbmRlIHNpIGRoZSBrdWZpem9uIGRyaWRoamV0IGRoZSBzaHVtaWPDq24gZSB0w6sgZGjDq25hdmUgbsOrIHNmb25kLiBNYWlsLWksIG1lc2F6aGV0IGRoZSBhcGxpa2FjaW9uZXQgZSB0amVyYSBxw6sgc2lua3Jvbml6b2hlbiBhdXRvbWF0aWtpc2h0IG11bmQgdMOrIG1vcyBww6tyZGl0w6tzb2hlbiBwYSBpIGhhcHVyLlxuXG5LdXJzaW1pIGkgYmF0ZXJpc8OrIMOnYWt0aXZpem9oZXQgYXV0b21hdGlraXNodCBrdXIgcGFqaXNqYSB2aWhldCBuw6sgbmdhcmtpbS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IlTDqyBibGxva3VhcmE6IE1vcyBpIHNoZmFxIGFzbmrDq2hlcsOrIGvDq3RvIG5qb2Z0aW1lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IlTDqyB1bMOrdGE6IFNoZmFxaSBuw6sgaGVzaHRqZSBuw6sgZnVuZCB0w6sgbGlzdMOrcyBzw6sgbmpvZnRpbWV2ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iTm9ybWFsZTogU2hmYXFpIGvDq3RvIG5qb2Z0aW1lIG7DqyBoZXNodGplIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJUw6sgbGFydGE6IFNoZmFxaSBuw6sga3J5ZSB0w6sgbGlzdMOrcyBzw6sgbmpvZnRpbWV2ZSBkaGUgbMOrc2hvIHRpbmd1bGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iVXJnamVudGU6IFNoZmFxIG5qw6sgdsOrc2h0cmltIHTDqyBzaHBlanTDqyBuw6sgZWtyYW4gZGhlIGzDq3NobyB0aW5ndWxsIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Qw6tyICUxJGQgbWludXRhIChkZXJpIG7DqyA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Qw6tyIG5qw6sgbWludXTDqyAoZGVyaSBuw6sgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBpIHpnamVkaHVyPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iVMOrIG5kcnlzaG1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IktlIGNha3R1YXIgcsOrbmTDq3NpbsOrIGUga8OrdHlyZSBuam9mdGltZXZlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iw4tzaHTDqyBpIHLDq25kw6tzaXNow6ttIHDDq3Igc2hrYWsgdMOrIHBlcnNvbmF2ZSB0w6sgcMOrcmZzaGlyw6suIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAwNjlkNzE3Li5jNzA2MjY0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTIyNCw2ICsyMjQsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQl9Cw0LrRmdGD0YfQsNGYINC+0LTQvNCw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0KHQsNC00YDQttCw0Zgg0ZjQtSDRgdCw0LrRgNC40LLQtdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JHQtdC30LHQtdC00L3QuCDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDRgdC40YHRgtC10LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+ItCb0LjRh9C90L4iPC9zdHJpbmc+CkBAIC0yNTYsNiArMjU3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+ItCe0LHRg9GF0LLQsNGC0LAg0LvQuNGH0L3QtSDQv9C+0LTQsNGC0LrQtSDQutCw0L4g0YjRgtC+INGB0YMg0LHRgNC+0ZjQtdCy0Lgg0LrRgNC10LTQuNGC0L3QuNGFINC60LDRgNGC0LjRhtCwINC4INC70L7Qt9C40L3QutC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i0KPQv9GA0LDQstGZ0LDRmCDRg9Cy0LXRm9Cw0ZrQtdC8INC/0YDQuNC60LDQt9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItCj0L/RgNCw0LLRmdCwINC90LjQstC+0L7QvCDQt9GD0LzQuNGA0LDRmtCwINC/0YDQuNC60LDQt9CwINC4INC+0LTRgNC10ZLQuNCy0LDRmtC10Lwg0L/QvtC70L7QttCw0ZjQsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLQntCx0LDQstGZ0LDRmtC1INC/0L7QutGA0LXRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLQnNC+0LbQtSDQtNCwINC00L7QtNC40YDRg9GY0LUsINC70LjRgdGC0LAsINGB0LrRg9C/0ZnQsCDQv9GA0LjQutCw0Lcg0Lgg0L7QsdCw0LLRmdCwINC00YDRg9Cz0LUg0L/QvtC60YDQtdGC0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i0L7QvdC10LzQvtCz0YPRm9Cw0LLQsNGa0LUg0LjQu9C4INC40LfQvNC10L3QsCDRgdGC0LDRgtGD0YHQvdC1INGC0YDQsNC60LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0L7QvdC10LzQvtCz0YPRm9C4INGB0YLQsNGC0YPRgdC90YMg0YLRgNCw0LrRgyDQuNC70Lgg0LTQsCDQtNC+0LTQsNGY0LUg0Lgg0YPQutC70LDRmtCwINGB0LjRgdGC0LXQvNGB0LrQtSDQuNC60L7QvdC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLRhNGD0L3QutGG0LjQvtC90LjRgdCw0ZrQtSDQutCw0L4g0YHRgtCw0YLRg9GB0L3QsCDRgtGA0LDQutCwIjwvc3RyaW5nPgpAQCAtMzU0LDggKzM1Nyw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0YHQvdC40LzQsCDRgdC70LjQutC1INC4INCy0LjQtNC10L4g0YHQvdC40LzQutC1INC60LDQvNC10YDQvtC8LiDQntCy0LAg0LTQvtC30LLQvtC70LAg0L7QvNC+0LPRg9Gb0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0YMg0LHQuNC70L4g0LrQvtC8INGC0YDQtdC90YPRgtC60YMg0LrQvtGA0LjRgdGC0Lgg0LrQsNC80LXRgNGDINCx0LXQtyDQstCw0YjQtSDQv9C+0YLQstGA0LTQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i0LrQvtC90YLRgNC+0LvQsCDQstC40LHRgNCw0YbQuNGY0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINC60L7QvdGC0YDQvtC70LjRiNC1INCy0LjQsdGA0LDRhtC40ZjRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i0LrQvtC90YLRgNC+0LvQsCDQvtGB0LLQtdGC0ZnQtdGa0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINC60L7QvdGC0YDQvtC70LjRiNC1INCx0LvQuNGGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ItC00LjRgNC10LrRgtC90L4g0L/QvtC30LjQstCw0ZrQtSDQsdGA0L7RmNC10LLQsCDRgtC10LvQtdGE0L7QvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCU0L7Qt9Cy0L7RmdCw0LLQsCDQsNC/0LvQuNC60LDRhtC40ZjQuCDQtNCwINC/0L7Qt9C40LLQsCDQsdGA0L7RmNC10LLQtSDRgtC10LvQtdGE0L7QvdCwINCx0LXQtyDQstCw0YjQtSDQtNC+0LfQstC+0LvQtS4g0J7QstC+INC80L7QttC1INC00LAg0LTQvtCy0LXQtNC1INC00L4g0L3QtdC+0YfQtdC60LjQstCw0L3QuNGFINGC0YDQvtGI0LrQvtCy0LAg0LjQu9C4INC/0L7Qt9C40LLQsC4g0JjQvNCw0ZjRgtC1INC90LAg0YPQvNGDINC00LAg0L7QstC+INC90LUg0LTQvtC30LLQvtGZ0LDQstCwINCw0L/Qu9C40LrQsNGG0LjRmNC4INC00LAg0L/QvtC30LjQstCwINCx0YDQvtGY0LXQstC1INC30LAg0YXQuNGC0L3QtSDRgdC70YPRh9Cw0ZjQtdCy0LUuINCX0LvQvtC90LDQvNC10YDQvdC1INCw0L/Qu9C40LrQsNGG0LjRmNC1INC80L7Qs9GDINC00LAg0L/QvtC30LjQstCw0ZjRgyDQsdC10Lcg0LLQsNGI0LUg0L/QvtGC0LLRgNC00LUsINGI0YLQviDQvNC+0LbQtSDQtNCwINC00L7QstC10LTQtSDQtNC+INGC0YDQvtGI0LrQvtCy0LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLQv9GA0LjRgdGC0YPQvyDRg9GB0LvRg9C30Lgg0L/QvtC30LjQstCwINC/0L7QvNC+0ZvRgyDRgNCw0LfQvNC10L3QtSDRgtGA0LXQvdGD0YLQvdC40YUg0L/QvtGA0YPQutCwIjwvc3RyaW5nPgpAQCAtODYzLDEwICs4NjQsMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLQmNGB0LXRhtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLQmtC+0L/QuNGA0LDRmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+ItCd0LDQu9C10L/QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i0J3QsNC70LXQv9C4INC60LDQviDQvtCx0LjRh9Cw0L0g0YLQtdC60YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i0JfQsNC80LXQvdC4Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+ItCY0LfQsdGA0LjRiNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQmtC+0L/QuNGA0LDRmCBVUkwg0LDQtNGA0LXRgdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i0JjQt9Cw0LHQtdGA0Lgg0YLQtdC60YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i0J7Qv9C+0LfQvtCy0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+ItCf0L7QvdC+0LLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLQmNC30LHQvtGAINGC0LXQutGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLQlNC+0LTQsNGYINGDINGA0LXRh9C90LjQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0JjQt9Cx0YDQuNGI0LgiPC9zdHJpbmc+CkBAIC0xMTE0LDYgKzExMTgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i0J/RgNC+0LzQtdC90LAg0L/QvtC30LDQtNC40L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCc0L7QvdC40YLQvtGAINC+0LHQsNCy0LXRiNGC0LXRmtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLQlNC+0LHQsNCy0ZnQsNGHINGD0YHQu9C+0LLQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCf0L7QvNC+0ZvQvdC40Log0LfQsCDQvtCx0LDQstC10YjRgtC10ZrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOINGY0LUg0LDQutGC0LjQstC40YDQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i0JDQv9C70LjQutCw0YbQuNGY0LAgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INGY0LUg0LDQutGC0LjQstC40YDQsNC70LAgVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i0JTQvtC00LjRgNC90LjRgtC1INC00LAg0LHQuNGB0YLQtSDRg9C/0YDQsNCy0ZnQsNC70Lgg0LzRgNC10LbQvtC8LiI8L3N0cmluZz4KQEAgLTE0NDksMTEgKzE0NTQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLQkNC20YPRgNC40YDQsNC+INGY0LUg0LDQtNC80LjQvdC40YHRgtGA0LDRgtC+0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+ItCY0LfQsdGA0LjRgdCw0L4g0ZjQtSDQstCw0Ygg0LDQtNC80LjQuNGB0YLRgNCw0YLQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLQlNCwINCx0Lgg0L/RgNC+0LTRg9C20LjQu9CwINCy0YDQtdC80LUg0YLRgNCw0ZjQsNGa0LAg0LHQsNGC0LXRgNC40ZjQtSwg0YPRiNGC0LXQtNCwINCx0LDRgtC10YDQuNGY0LUg0YHQvNCw0ZrRg9GY0LUg0L/QtdGA0YTQvtGA0LzQsNC90YHQtSDRg9GA0LXRktCw0ZjQsCDQuCDQvtCz0YDQsNC90LjRh9Cw0LLQsCDQstC40LHRgNCw0YbQuNGY0YMsINGD0YHQu9GD0LPQtSDQu9C+0LrQsNGG0LjRmNC1INC4INCy0LXRm9C40L3RgyDQv9C+0LfQsNC00LjQvdGB0LrQuNGFINC/0L7QtNCw0YLQsNC60LAuINCY0LzQtdGY0LssINGA0LDQt9C80LXQvdCwINC/0L7RgNGD0LrQsCDQuCDQtNGA0YPQs9C1INCw0L/Qu9C40LrQsNGG0LjRmNC1INC60L7RmNC1INGB0LUg0L7RgdC70LDRmtCw0ZjRgyDQvdCwINGB0LjQvdGF0YDQvtC90LjQt9Cw0YbQuNGY0YMg0LzQvtC20LTQsCDQvdC10ZvQtSDQtNCwINGB0LUg0LDQttGD0YDQuNGA0LDRmNGDINCw0LrQviDQuNGFINC90LUg0L7RgtCy0L7RgNC40YLQtS5cblxu0KPRiNGC0LXQtNCwINCx0LDRgtC10YDQuNGY0LUg0YHQtSDQsNGD0YLQvtC80LDRgtGB0LrQuCDQuNGB0LrRmdGD0YfRg9GY0LUg0LrQsNC00LAg0YHQtSDRg9GA0LXRktCw0Zgg0L/Rg9C90LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQkdC70L7QutC40YDQsNC90LA6INCe0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDRgdC1INC90LjQutCw0LTQsCDQvdC1INC/0YDQuNC60LDQt9GD0ZjRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLQndC40YHQutCwOiDQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQtNC90YMg0LvQuNGB0YLQtSDQvtCx0LDQstC10YjRgtC10ZrQsCDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i0KPQvtCx0LjRh9Cw0ZjQtdC90LA6INCe0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDRgdC1INC/0YDQuNC60LDQt9GD0ZjRgyDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i0JLQuNGB0L7QutCwOiDQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQstGA0YXRgyDQu9C40YHRgtC1INC+0LHQsNCy0LXRiNGC0LXRmtCwINC4INCw0LrRgtC40LLQuNGA0LAg0YHQtSDQt9Cy0YPRh9C90Lgg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+ItCl0LjRgtC90LA6INCd0LDQutGA0LDRgtC60L4g0YHQtSDQv9GA0LjQutCw0LfRg9GY0YMg0L3QsCDQtdC60YDQsNC90YMg0Lgg0LDQutGC0LjQstC40YDQsCDRgdC1INC30LLRg9GH0L3QuCDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkINC80LjQvdGD0YIgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+JTEkZCDQvNC40L3Rg9GC0LAgKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUyOCw0ICsxNTI4LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0JjQt9Cw0LHRgNCw0L3QviDRmNC1IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiDRgdGC0LDQstC60Lg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLQoNCw0LfQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+ItCS0Lgg0L/QvtC00LXRiNCw0LLQsNGC0LUg0LLQsNC20L3QvtGB0YIg0L7QstC40YUg0L7QsdCw0LLQtdGI0YLQtdGa0LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLQntCy0L4g0ZjQtSDQstCw0LbQvdC+INC30LHQvtCzINGZ0YPQtNC4INC60L7RmNC4INGD0YfQtdGB0YLQstGD0ZjRgy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCmluZGV4IDc0ODI1N2EuLmVjYzZkNGUgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkzDpXMgbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5uZWjDpWxsIGhhciBkb2x0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IlPDpGtlcnQgbMOkZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkLXN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29ubGlndCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iT21mYXR0YXIgcGVyc29udXBwZ2lmdGVyIHNvbSBrcmVkaXRrb3J0c251bW1lciBvY2ggbMO2c2Vub3JkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iU3R5ciBza8Okcm1mw7Zyc3RvcmluZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IlN0eXIgc2vDpHJtZW5zIHpvb21uaXbDpSBvY2ggcG9zaXRpb25lcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiJHw7ZyYSByw7ZyZWxzZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkthbiB0cnlja2EsIHN2ZXBhLCBueXBhIG9jaCBnw7ZyYSBhbmRyYSByw7ZyZWxzZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iaW5ha3RpdmVyYSBlbGxlciDDpG5kcmEgc3RhdHVzZsOkbHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiBpbmFrdGl2ZXJhciBzdGF0dXNmw6RsdGV0IGVsbGVyIGzDpGdnZXIgdGlsbCBvY2ggdGFyIGJvcnQgc3lzdGVtaWtvbmVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJ2aXNhcyBpIHN0YXR1c2bDpGx0ZXQiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJUaWxsw6V0ZXIgYXR0IGFwcGVuIHRhciBiaWxkZXIgb2NoIHNwZWxhciBpbiB2aWRlb3IgbWVkIGthbWVyYW4uIE1lZCBkZW4gaMOkciBiZWjDtnJpZ2hldGVuIHRpbGzDpXRzIGFwcGVuIGF0dCBhbnbDpG5kYSBrYW1lcmFuIG7DpHIgc29tIGhlbHN0IHV0YW4gZGl0dCBnb2Rrw6RubmFuZGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InN0eXJhIHZpYnJhdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVGlsbMOldGVyIGF0dCBhcHBlbiBzdHlyIHZpYnJhdGlvbmVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJzdHlyYSBsYW1wYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVGlsbMOldGVyIGF0dCBhcHBlbiBzdHlyIGxhbXBhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJyaW5nYSB0ZWxlZm9ubnVtbWVyIGRpcmVrdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJUaWxsw6V0ZXIgYXR0IGFwcGVuIHJpbmdlciB0ZWxlZm9ubnVtbWVyIHV0YW4gbsOlZ29uIGFrdGl2IMOldGfDpHJkIGZyw6VuIGRpZy4gRGV0dGEga2FuIGxlZGEgdGlsbCBvdsOkbnRhZGUgYXZnaWZ0ZXIgb2NoIHNhbXRhbC4gT2JzZXJ2ZXJhIGF0dCBhcHBlbiBpbnRlIHRpbGzDpXRzIHJpbmdhIG7DtmRzYW10YWwuIFNrYWRsaWdhIGFwcGFyIGthbiByaW5nYSB1dGFuIGRpdHQgZ29ka8Okbm5hbmRlIG9jaCBkZXR0YSBrYW4ga29zdGEgcGVuZ2FyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4idGlsbGfDpW5nIHRpbGwgdGrDpG5zdGVuIGbDtnIgc25hYmJtZWRkZWxhbmRlbiB2aWQgc2FtdGFsIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJLbGlwcCB1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29waWVyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IktsaXN0cmEgaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IktsaXN0cmEgaW4gc29tIG9mb3JtYXRlcmFkIHRleHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkVyc8OkdHQuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4iVGEgYm9ydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29waWVyYSB3ZWJiYWRyZXNzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTWFya2VyYSB0ZXh0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLDhW5ncmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkfDtnIgb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVGV4dG1hcmtlcmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMw6RnZyB0aWxsIGkgb3JkbGlzdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IlRhIGJvcnQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iw4RuZHJhIGJha2dydW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4iTWVkZGVsYW5kZWx5c3NuYXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiJMZXZlcmFudMO2ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkF2aXNlcmluZ3Nhc3Npc3RlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDDpHIgYWt0aXZlcmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOIGFrdGl2ZXJhcyBhdiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiJUcnljayBvbSBkdSB2aWxsIGhhbnRlcmEgbsOkdHZlcmtldC4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iVXBwZGF0ZXJhdCBhdiBhZG1pbmlzdHJhdMO2cmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJQYWtldGV0IGhhciByYWRlcmF0cyBhdiBhZG1pbmlzdHJhdMO2cmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJJIGJhdHRlcmlzcGFybMOkZ2V0IHJlZHVjZXJhcyBlbmhldGVucyBwcmVzdGFuZGEgc8OlIGF0dCBiYXR0ZXJpZXQgc2thIHLDpGNrYSBsw6RuZ3JlIG9jaCB2aWJyYXRpb24sIHBsYXRzdGrDpG5zdGVyIHNhbXQgZGVuIG1lc3RhIGFudsOkbmRuaW5nZW4gYXYgYmFrZ3J1bmRzZGF0YSBiZWdyw6Ruc2FzLiBEZXQga2FuIGjDpG5kYSBhdHQgYXBwYXIgZsO2ciBlLXBvc3QsIHNtcyBvY2ggYW5uYXQgc29tIGtyw6R2ZXIgc3lua3JvbmlzZXJpbmcgaW50ZSB1cHBkYXRlcmFzIGbDtnJyw6RuIGR1IMO2cHBuYXIgZGVtLlxuXG5CYXR0ZXJpc3BhcmzDpGdldCBpbmFrdGl2ZXJhcyBhdXRvbWF0aXNrdCBuw6RyIGVuaGV0ZW4gbGFkZGFzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxvY2tlcmFkOiBWaXNhIGFsZHJpZyBkZXNzYSBhdmlzZXJpbmdhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJMw6VnOiBWaXNhIGzDpG5nc3QgbmVkIGkgYXZpc2VyaW5nc2xpc3RhbiDigJMgdXRhbiBsanVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IFZpc2EgYXZpc2VyaW5nYXJuYSDigJMgdXRhbiBsanVkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJIw7ZnOiBWaXNhIGjDtmdzdCB1cHAgaSBhdmlzZXJpbmdzbGlzdGFuIOKAkyBtZWQgbGp1ZCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJCcsOlZHNrYW5kZTogVmlzYSBww6Ugc2vDpHJtZW4g4oCTIG1lZCBsanVkIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5JICUxJGQgbWludXRlciAodGlsbCBrbC4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+SSBlbiBtaW51dCAodGlsbCBrbC4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiBoYXIgdmFsdHM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJEaXZlcnNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkR1IGFuZ2VyIGh1ciB2aWt0aWdhIGF2aXNlcmluZ2FybmEgw6RyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iRGV0dGEgw6RyIHZpa3RpZ3QgcMOlIGdydW5kIGF2IHBlcnNvbmVybmEgc29tIGRlbHRhci4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IGNkYjg2YWUuLmQxZTZkOTcgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMjI1LDYgKzIyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IkZ1bmdhIHNhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iTWF1ZGh1aSB5YW1lZmljaHdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4iTXRpbmRvIHNhbGFtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+Ik1mdW1vIHdhIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IkJpbmFmc2kiPC9zdHJpbmc+CkBAIC0yNTcsNiArMjU4LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IkluYWp1bXVpc2hhIGRhdGEgYmluYWZzaSBrYW1hIHZpbGUgbmFtYmFyaSB6YSBrYWRpIHlhIG1rb3BvIG5hIG1hbmVub3NpcmkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJEaGliaXRpIHVrdXphamkgd2Egb255ZXNobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJEaGliaXRpIGtpd2FuZ28gY2hhIGt1a3V6YSBuYSBuYWZhc2kgY2hhIG9ueWVzaG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iVGVrZWxlemEgaXNoYXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJVbmF3ZXphIGt1Z29uZ2EsIGt1dGVsZXplc2hhIGtpZG9sZSwga3ViYW5hIG5hIGt1dGVrZWxlemEgaXNoYXJhIHppbmdpbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4iemltYSBhdSByZWtlYmlzaGEgbXdhbWJhYSBoYWxpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdWxlbWF6YSB1cGF1IHdhIGhhbGkgYXUga3VvbmdlemEgbmEga3V0b2EgaWtvbmkgemEgbWZ1bW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+Imt1d2Egc2VoZW11IHlhIGFyaWZhIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1OCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iSW5hcnVodXN1IHByb2dyYW11IGt1cGlnYSBwaWNoYSBuYSB2aWRlbyBrd2Ega2FtZXJhLiBLaWJhbGkgaGlraSBraW5hcnVodXN1IHByb2dyYW11IGt1dHVtaWEga2FtZXJhIGt3YSB3YWthdGkgd293b3RlIGJpbGEgdXRoaWJpdGlzaG8gd2Frby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4iS3VkaGliaXRpIG10ZXRlbW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdWRoaWJpdGkga2l0aW5naXNoaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iZGhpYml0aSB0b2NoaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iSW5hcnVodXN1IHByb2dyYW11IGt1ZGhpYml0aSB0b2NoaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJwaWdhIHNpbXUgbW9qYSBrd2EgbW9qYSBrd2EgbmFtYmFyaSB6YSBzaW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkluYXJ1aHVzdSBwcm9ncmFtdSBrdXBpZ2EgbmFtYmFyaSB6YSBzaW11IGJpbGEgeWEgd2V3ZSBrdWluZ2lsaWEga2F0aS4gSGlpIGluYXdlemEga3VzYWJhYmlzaGEgZ2hhcmFtYSB6aXNpem90YXJhaml3YSBhdSBzaW11LiBLdW1idWthIGt1d2EgaGlpIGhhaXJ1aHVzdSBwcm9ncmFtdSBrdXBpZ2EgbmFtYmFyaSB6YSBkaGFydXJhLiBQcm9ncmFtdSBoYXNpZGkgemluYXdlemEga3VrdWdoYXJpbXUgcGVzYSBrd2Ega3VwaWdhIHNpbXUgYmlsYSB1dGhpYml0aXNobyB3YWtvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4iZmlraWEgaHVkdW1hIHlhIHNpbXUgeWEgSU1TIjwvc3RyaW5nPgpAQCAtNzk0LDcgKzc5NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX3JlbWVtYmVyIiBtc2dpZD0iNjQ5MTg3OTY3ODk5Njc0OTQ2NiI+Ikt1bWJ1a2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYXZlX3Bhc3N3b3JkX25ldmVyIiBtc2dpZD0iODI3NDMzMDI5Njc4NTg1NTEwNSI+IkthdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvcGVuX3Blcm1pc3Npb25fZGVueSIgbXNnaWQ9IjczNzQwMzY3MDgzMTY2Mjk4MDAiPiJIYXVuYSBpZGhpbmkgeWEga3VmdW5ndWEgdWt1cmFzYSBodXUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idGV4dF9jb3BpZWQiIG1zZ2lkPSI0OTg1NzI5NTI0NjcwMTMxMzg1Ij4iTWFhbmRpc2hpIHlhbWVuYWtpbGl3YSBrd2VueWUgdWJhbyBrbGlwdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0ZXh0X2NvcGllZCIgbXNnaWQ9IjQ5ODU3Mjk1MjQ2NzAxMzEzODUiPiJNYWFuZGlzaGkgeWFtZW5ha2lsaXdhIGt3ZW55ZSB1YmFvIHdhIGt1bmFraWxpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1vcmVfaXRlbV9sYWJlbCIgbXNnaWQ9IjQ2NTA5MTg5MjMwODMzMjA0OTUiPiJaYWlkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByZXBlbmRfc2hvcnRjdXRfbGFiZWwiIG1zZ2lkPSIyNTcyMjE0NDYxNjc2MDE1NjQyIj4iTWVueXUrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zcGFjZV9zaG9ydGN1dF9sYWJlbCIgbXNnaWQ9IjI0MTAzMjg2MzkyNzIxNjI1MzciPiJtd2FueWEiPC9zdHJpbmc+CkBAIC04NjAsMTAgKzg2MSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IkthdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Ik5ha2FsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IkJhbmRpa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IkJhbmRpa2Ega2FtYSBtYWFuZGlzaGkgZGhhaGlyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iQmFkaWxpc2hhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IkZ1dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+Ik5ha2lsaSBVUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJDaGFndWEgbWFhbmRpc2hpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJUZW5kdWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlJlamVzaGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iVWNoYWd1emkgd2EgbWFhbmRpc2hpPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJPbmdlemEga3dlbnllIGthbXVzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iRnV0YSI8L3N0cmluZz4KQEAgLTExMDksNiArMTExMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJCYWRpbGlzaGEgbWFuZGhhcmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJLaXNpa2lsaXppIGNoYSBhcmlmYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iTXRvYSBtYXNoYXJ0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+Ik1yYXRpYnUgd2EgYXJpZmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBpbWV3ZXplc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+IlZQTiBpbWVhbWlsaXNod2EgbmEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iR3VzYSBpbGkga3VkaGliaXRpIG10YW5kYW8uIjwvc3RyaW5nPgpAQCAtMTQ0MiwxMSArMTQ0Nyw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IktpbWVzYXNpc3dhIG5hIG1zaW1hbWl6aSB3YWtvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJLaWxpZnV0d2EgbmEgbXNpbWFtaXppIHdha28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+Ikt1c2FpZGlhIGt1Ym9yZXNoYSBtdWRhIHdhIG1hdHVtaXppIHlhIGJldHJpLCBpbmF5b29rb2EgYmV0cmkgaHVwdW5ndXphIHV0ZW5kYWppIHdhIGtpZmFhIGNoYWtvIG5hIGt1cHVuZ3V6YSBtdGV0ZW1vLCBodWR1bWEgemEgdXRhbWJ1emkgd2EgbWFoYWxpLCBuYSBkYXRhIG55aW5naSB5YSBjaGluaSBjaGluaS4gQmFydWEgcGVwZSwgdWp1bWJlIG5hIHByb2dyYW11IG55aW5naW5lIHppbmF6b3RlZ2UsZWEgdXNhd2F6aXNoYWppIGh1ZW5kYSB6aXNpc2FzaXNod2UgdXNpcG96aWZ1bmd1YS5cblxuSW5heW9va29hIGJldHJpIGh1aml6aW1hIGtpb3RvbWF0aWtpIGtpZmFhIGNoYWtvIGtpbmFwb2t1d2Ega2luYWNoYWppLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iSW1lenVpd2E6IFVzaW9ueWVzaGUgYXJpZmEgaGl6aSBrYW13ZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJDaGluaTogT255ZXNoYSBrYXRpa2Egc2VoZW11IHlhIGNoaW5pIHlhIG9yb2RoYSB5YSBhcmlmYSBiaWxhIGt1dG9hIHNhdXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJLYXdhaWRhOiBPbnllc2hhIGFyaWZhIGhpemkgYmlsYSBzYXV0aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iSnV1OiBPbnllc2hhIGthdGlrYSBzZWhlbXUgeWEganV1IHlhIG9yb2RoYSB5YSBhcmlmYSBuYSBpdG9lIHNhdXRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Ik11aGltdTogV2VrYSBvbnllc2hvIGxhIGt1Y2h1bmd1bGlhIGt3ZW55ZSBza3JpbmkgbmEgaXRvZSBzYXV0aSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+S3dhIGRha2lrYSAlMSRkIChoYWRpIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkt3YSBkYWtpa2EgbW9qYSAoaGFkaSA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEyLDQgKzE1MTIsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IGtpbWVjaGFndWxpd2E8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJBbnV3YWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iVWxpd2VrYSB1bXVoaW11IHdhIGFyaWZhIGhpemkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJIaWkgbmkgbXVoaW11IGt3YSBzYWJhYnUgeWEgd2F0dSB3YWxpb2h1c2lrYS4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtc3c2MDBkcC9jb25maWcueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKaW5kZXggNWEwMDdjZS4uN2Y1N2RlZCAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy1zdzYwMGRwL2NvbmZpZy54bWwKQEAgLTQwLDUgKzQwLDYgQEAKICAgICA8IS0tIFVzZSBhIGxhcmdlciBzY2FsaW5nIHNwYW4gZm9yIGxhcmdlciBzY3JlZW4gZGV2aWNlcy4gLS0+CiAgICAgPGRpbWVuIG5hbWU9ImNvbmZpZ19taW5TY2FsaW5nU3BhbiI+MzJtbTwvZGltZW4+CiAKKyAgICA8aW50ZWdlciBuYW1lPSJjb25maWdfZG9ja2VkU3RhY2tEaXZpZGVyU25hcE1vZGUiPjE8L2ludGVnZXI+CiA8L3Jlc291cmNlcz4KIApkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCAyNDVmMWNhLi5lYWNjOWE5IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuCuh+CuquCvjeCuquCvi+CupOCvgSDgrqrgr4Lgrp/gr43grp/gr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4K6u4K6x4K+I4K6o4K+N4K6k4K+B4K6z4K+N4K6zIOCuieCus+CvjeCus+Cun+CuleCvjeCuleCuruCvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCuquCuvuCupOCvgeCuleCuvuCuquCvjeCuquCvgSDgrqrgrq/grqngr43grq7gr4HgrrHgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOCuheCuruCviOCuquCvjeCuquCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4K6k4K6p4K6/4K6q4K+N4K6q4K6f4K+N4K6fIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLgrpXgrr/grrDgr4bgrp/grr/grp/gr40g4K6V4K6+4K6w4K+N4K6f4K+BIOCujuCuo+CvjeCuleCus+CvjSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6V4K6f4K614K+B4K6a4K+N4K6a4K+K4K6x4K+N4K6V4K6z4K+NIOCuquCvi+CuqeCvjeCusSDgrqTgrqngrr/grqrgr43grqrgrp/gr43grp8g4K6k4K6V4K614K6y4K+B4K6u4K+NIOCuieCus+CvjeCus+Cun+CumeCvjeCuleCvgeCuruCvjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IuCupOCuv+CusOCviOCur+Cuv+CuqeCvjSDgrongrrDgr4Hgrqrgr43grqrgr4bgrrDgr4HgrpXgr43grpXgrqTgr43grqTgr4jgrpXgr40g4K6V4K6f4K+N4K6f4K+B4K6q4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K+B4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuCupOCuv+CusOCviOCur+Cuv+CuqeCvjSDgrpzgr4Lgrq7gr40g4K6F4K6z4K614K+I4K6v4K+B4K6u4K+NIOCuqOCuv+CusuCviOCur+CviOCur+CvgeCuruCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqTgrrLgrr7grq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i4K6a4K+I4K6V4K+I4K6V4K6z4K+I4K6a4K+NIOCumuCvhuCur+CusuCvjeCuquCun+CvgeCupOCvjeCupOCvgeCupOCusuCvjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4K6k4K6f4K+N4K6f4K6y4K6+4K6u4K+NLCDgrrjgr43grrXgr4jgrqrgr40g4K6a4K+G4K6v4K+N4K6v4K6y4K6+4K6u4K+NLCDgrqrgrr/grqngr43grprgr40g4K6a4K+G4K6v4K+N4K6v4K6y4K6+4K6u4K+NIOCuruCuseCvjeCuseCvgeCuruCvjSDgrqrgrr/grrEg4K6a4K+I4K6V4K+I4K6V4K6z4K+I4K6a4K+NIOCumuCvhuCur+CusuCvjeCuquCun+CvgeCupOCvjeCupOCusuCuvuCuruCvjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLgrqjgrr/grrLgr4jgrqrgr40g4K6q4K6f4K+N4K6f4K6/4K6v4K+IIOCuruCvgeCun+CuleCvjeCuleCvgeCupOCusuCvjSDgroXgrrLgr43grrLgrqTgr4Eg4K6u4K6+4K6x4K+N4K6x4K+B4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuCuqOCuv+CusuCviOCuquCvjSDgrqrgrp/gr43grp/grr/grq/gr4gg4K6u4K+B4K6f4K6V4K+N4K6VIOCuheCusuCvjeCusuCupOCvgSDgrq7gr4HgrrHgr4jgrq7gr4jgrq/grr/grrLgr40g4K6Q4K6V4K6+4K6p4K+N4K6V4K6z4K+I4K6a4K+NIOCumuCvh+CusOCvjeCuleCvjeCulSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6F4K6V4K6x4K+N4K6xIOCuquCur+CuqeCvjeCuquCuvuCun+CvjeCun+CviCDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgrr/grrHgrqTgr4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuCuqOCuv+CusuCviOCuquCvjSDgrqrgrp/gr43grp/grr/grq/grr/grrLgr40g4K6H4K6w4K+B4K6V4K+N4K6V4K+B4K6u4K+NIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i4K6V4K+H4K6u4K6w4K6+IOCuruCvguCusuCuruCuvuCuleCuquCvjSDgrqrgrp/grpngr43grpXgrrPgr4jgrq/gr4Hgrq7gr40sIOCuteCvgOCun+Cuv+Cur+Cvi+CuleCvjeCuleCus+CviOCur+CvgeCuruCvjSDgro7grp/gr4HgrpXgr43grpUg4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4g4K6J4K6Z4K+N4K6V4K6z4K+NIOCuieCuseCvgeCupOCuv+CuquCvjeCuquCun+CvgeCupOCvjeCupOCusuCvjSDgrofgrqngr43grrHgrr8g4K6V4K+H4K6u4K6w4K6+4K614K+IIOCujuCuqOCvjeCuqOCvh+CusOCupOCvjeCupOCuv+CusuCvgeCuruCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuh+CupOCvgSDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgrr/grrHgrqTgr4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuCuheCupOCuv+CusOCvjeCuteCviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqTgr4HgrqTgrrLgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuCuheCupOCuv+CusOCvjeCuteCviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i4K6D4K6q4K+N4K6y4K6+4K634K+N4K6y4K+I4K6f4K+N4K6f4K+IIOCuh+Cur+CuleCvjeCuleCvgeCupOCusuCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4K6D4K6q4K+N4K6z4K6+4K634K+NIOCusuCviOCun+CvjeCun+CviOCuleCvjSDgrpXgrp/gr43grp/gr4Hgrqrgr43grqrgrp/gr4HgrqTgr43grqQsIOCuquCur+CuqeCvjeCuquCuvuCun+CvjeCun+CviCDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgrr/grrHgrqTgr4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4K6k4K+K4K6y4K+I4K6q4K+H4K6a4K6/IOCujuCuo+CvjeCuleCus+CviCDgrqjgr4fgrrDgrp/grr/grq/grr7grpUg4K6F4K604K+I4K6k4K+N4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCuieCumeCvjeCuleCus+CvjSDgrqTgrrLgr4jgrq/gr4Dgrp/gr43grp/grr/grqngr43grrHgrr8g4K6u4K+K4K6q4K+I4K6y4K+NIOCujuCuo+CvjeCuleCus+CviCDgroXgrrTgr4jgrpXgr43grpXgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K+IIOCuheCuqeCvgeCuruCupOCuv+CuleCvjeCuleCuv+CuseCupOCvgS4g4K6H4K6k4K6p4K+NIOCuteCuv+Cus+CviOCuteCuvuCulSDgro7grqTgrr/grrDgr43grqrgrr7grrDgrr7grqQg4K6V4K6f4K+N4K6f4K6j4K6Z4K+N4K6V4K6z4K+LIOCuheCutOCviOCuquCvjeCuquCvgeCuleCus+CviyDgro/grrHgr43grqrgrp/grrLgrr7grq7gr40uIOCuheCuteCumuCusOCuleCuvuCusiDgro7grqPgr43grpXgrrPgr4gg4K6F4K604K+I4K6V4K+N4K6VIOCuh+CupOCvgSDgrqrgrq/grqngr43grqrgrr7grp/gr43grp/gr4gg4K6F4K6p4K+B4K6u4K6k4K6/4K6V4K+N4K6V4K6+4K6k4K+BIOCujuCuqeCvjeCuquCupOCviCDgrqjgrr/grqngr4jgrrXgrr/grrLgr43grpXgr4rgrrPgr43grrPgrrXgr4Hgrq7gr40uIOCupOCvgOCumeCvjeCuleCuv+CutOCviOCuleCvjeCuleCvgeCuruCvjSDgrqrgrq/grqngr43grqrgrr7grp/gr4HgrpXgrrPgr40sIOCuieCumeCvjeCuleCus+CvjSDgrongrrHgr4HgrqTgrr/grqrgr43grqrgrp/gr4HgrqTgr43grqTgrrLgr40g4K6H4K6p4K+N4K6x4K6/IOCuheCutOCviOCuquCvjeCuquCvgeCuleCus+CviOCumuCvjSDgrprgr4bgrq/gr43grrXgrqTgrr7grrLgr40g4K6J4K6Z4K+N4K6V4K6z4K+B4K6V4K+N4K6V4K+B4K6a4K+NIOCumuCvhuCusuCuteCvgSDgro/grrHgr43grqrgrp/grpXgr43grpXgr4Lgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMg4K6F4K604K+I4K6q4K+N4K6q4K+B4K6a4K+NIOCumuCvh+CuteCviOCur+CviCDgroXgrqPgr4HgrpXgr4HgrqTgrrLgr40iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCuteCvhuCun+CvjeCun+CvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4K6o4K6V4K6y4K+G4K6f4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i4K6S4K6f4K+N4K6f4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLgro7grrPgrr/grq8g4K6J4K6w4K+I4K6v4K6+4K6VIOCukuCun+CvjeCun+CvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4K6u4K6+4K6x4K+N4K6x4K+BLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCuqOCvgOCuleCvjeCuleCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJMIOCukCDgrqjgrpXgrrLgr4bgrp/gr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgrongrrDgr4jgrq/gr4jgrqTgr40g4K6k4K+H4K6w4K+N4K614K+B4K6a4K+G4K6v4K+N4K6VIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgrprgr4bgrq/grrLgr43grqTgrrXgrr/grrDgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IuCuruCvgOCuo+CvjeCun+CvgeCuruCvjeCumuCvhuCur+CvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLgrongrrDgr4gg4K6k4K+H4K6w4K+N4K6o4K+N4K6k4K+G4K6f4K+B4K6k4K+N4K6k4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuCuheCuleCusOCuvuCupOCuv+Cur+Cuv+CusuCvjSDgrprgr4fgrrDgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuCuqOCvgOCuleCvjeCuleCvgSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLgrrXgrr7grrLgr43grqrgr4fgrqrgr43grqrgrrDgr4gg4K6u4K6+4K6x4K+N4K6x4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+I4K6V4K+NIOCuleCuo+CvjeCuleCuvuCuo+Cuv+CuleCvjeCuleCvgeCuruCvjSDgrprgr4fgrrXgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCuqOCuv+CuquCuqOCvjeCupOCuqeCviCDgrrXgrrTgrpngr43grpXgr4HgrqjgrrDgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgroXgrrHgrr/grrXgrr/grqrgr43grqrgr4Eg4K6J4K6k4K614K6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCuhuCusuCvjSBWUE4g4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4K6o4K+G4K6f4K+N4K614K+K4K6w4K+N4K6V4K+N4K6V4K+IIOCuqOCuv+CusOCvjeCuteCuleCuv+CuleCvjeCuleCupOCvjSDgrqTgr4rgrp/grrXgr4Hgrq7gr40uIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuCuieCumeCvjeCuleCus+CvjSDgrqjgrr/grrDgr43grrXgrr7grpXgrr8g4K6q4K+B4K6k4K+B4K6q4K+N4K6q4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K6+4K6w4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLgrqjgrr/grrDgr43grrXgrr7grpXgrr8g4K6o4K+A4K6V4K+N4K6V4K6/4K614K6/4K6f4K+N4K6f4K6+4K6w4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgrqrgr4fgrp/gr43grp/grrDgrr8g4K6G4K6v4K+B4K6z4K+IIOCuruCvh+CuruCvjeCuquCun+CvgeCupOCvjeCupCwg4K6q4K+H4K6f4K+N4K6f4K6w4K6/IOCumuCvh+CuruCuv+CuquCvjeCuquCuvuCuqeCvjSDgrongrpngr43grpXgrrPgr40g4K6a4K6+4K6k4K6p4K6k4K+N4K6k4K6/4K6p4K+NIOCumuCvhuCur+CusuCvjeCupOCuv+CuseCuqeCviOCuleCvjSDgrpXgr4HgrrHgr4jgrqTgr43grqTgr4EsIOCuheCupOCuv+CusOCvjeCuteCvgSwg4K6H4K6f4K6a4K+NIOCumuCvh+CuteCviOCuleCus+CvjSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6q4K+G4K6w4K+B4K6u4K+N4K6q4K6+4K6y4K6+4K6pIOCuquCuv+CuqeCvjeCuquCvgeCusuCupOCvjSDgrqTgrrDgrrXgr4Eg4K6q4K+L4K6p4K+N4K6x4K614K6x4K+N4K6x4K+I4K6V4K+NIOCuleCun+CvjeCun+CvgeCuquCvjeCuquCun+CvgeCupOCvjeCupOCvgeCuleCuv+CuseCupOCvgS4g4K6S4K6k4K+N4K6k4K6/4K6a4K+I4K614K+I4K6a4K+NIOCumuCuvuCusOCvjeCuqOCvjeCupOCvgeCus+CvjeCusyDgrq7grr/grqngr43grqngrp7gr43grprgrrLgr40sIOCumuCvhuCur+CvjeCupOCuv+Cur+Cuv+Cun+CusuCvjSDgrq7grrHgr43grrHgr4Hgrq7gr40g4K6q4K6/4K6xIOCuquCur+CuqeCvjeCuquCuvuCun+CvgeCuleCus+CvjSDgrqTgrr/grrHgrpXgr43grpXgr4Hgrq7gr43grrXgrrDgr4gsIOCuheCuteCviCDgrqrgr4HgrqTgr4Hgrqrgr43grqrgrr/grpXgr43grpXgrqrgr43grqrgrp/grr7grq7grrLgr40g4K6H4K6w4K+B4K6V4K+N4K6V4K6y4K6+4K6u4K+NLlxuXG7grongrpngr43grpXgrrPgr40g4K6D4K6q4K+L4K6p4K+NIOCumuCuvuCusOCvjeCunOCvjSDgrprgr4bgrq/gr43grq/grqrgr43grqrgrp/gr4Hgrq7gr43grqrgr4vgrqTgr4EsIOCuquCvh+Cun+CvjeCun+CusOCuvyDgrprgr4fgrq7grr/grqrgr43grqrgrr7grqngr40g4K6k4K6+4K6p4K6+4K6V4K614K+HIOCuruCvgeCun+CumeCvjeCuleCvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuCupOCun+CvgeCuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgTog4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviCDgrpLgrrDgr4Hgrqrgr4vgrqTgr4Hgrq7gr40g4K6V4K6+4K6f4K+N4K6f4K6+4K6k4K+BIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuCuleCvgeCuseCviOCuteCvgTog4K6S4K6y4K6/4K6v4K6/4K6p4K+N4K6x4K6/IOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuquCvjSDgrqrgrp/gr43grp/grr/grq/grrLgrr/grqngr40g4K6V4K+A4K604K+HIOCuleCuvuCun+CvjeCun+CvgeCuruCvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i4K6H4K6v4K6y4K+N4K6q4K+BOiDgrpLgrrLgrr/grq/grr/grqngr43grrHgrr8g4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviOCuleCvjSDgrpXgrr7grp/gr43grp/gr4Hgrq7gr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IuCuheCupOCuv+CuleCuruCvjTog4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCuquCun+CvjeCun+Cuv+Cur+CusuCuv+CuqeCvjSDgrq7gr4fgrrLgr40g4K6q4K6V4K+B4K6k4K6/4K6v4K6/4K6y4K+NIOCukuCusuCuv+Cur+CvgeCun+CuqeCvjSDgrpXgrr7grp/gr43grp/gr4Hgrq7gr40iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i4K6F4K614K6a4K6w4K6u4K+NOiDgrpLgrrLgrr/grq/gr4Hgrp/grqngr40g4K6k4K6/4K6w4K+I4K6v4K6/4K6y4K+NIOCupOCvi+CuqeCvjeCuseCvgeCuruCvjSI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr4HgrpXgr43grpXgr4EgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+IOCuteCusOCviCk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7grpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6k4K+N4K6k4K6/4K6x4K+N4K6V4K+BICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPiDgrrXgrrDgr4gpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDgrqTgr4fgrrDgr43grqjgr43grqTgr4bgrp/gr4HgrpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4E8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLgrofgrqTgrrAg4K6F4K6u4K+I4K6q4K+N4K6q4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IuCuh+CuqOCvjeCupCDgroXgrrHgrr/grrXgrr/grqrgr43grqrgr4HgrpXgrrPgrr/grqngr40g4K6u4K+B4K6V4K+N4K6V4K6/4K6v4K6k4K+N4K6k4K+B4K614K6k4K+N4K6k4K+IIOCuheCuruCviOCupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuCuiOCun+CvgeCuquCun+CvjeCun+CvgeCus+CvjeCus+CuteCusOCvjeCuleCus+Cuv+CuqeCvjSDgrpXgrr7grrDgrqPgrq7grr7grpUsIOCuh+CupOCvgSDgrq7gr4HgrpXgr43grpXgrr/grq/grq7grr7grqngrqTgr4EuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCmluZGV4IDFiNjNjMmYuLjA0NDAxMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i4LCH4LCq4LGN4LCq4LGB4LCh4LGBIOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsILgsKHgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LCV4LCC4LCf4LGG4LCC4LCf4LGN4oCM4LCy4LGBIOCwpuCwvuCwmuCwrOCwoeCxjeCwoeCwvuCwr+CwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuCwuOCxgeCwsOCwleCxjeCwt+Cwv+CwpCDgsK7gsYvgsKHgsY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIOCwuOCwv+CwuOCxjeCwn+CwruCxjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4LC14LGN4LCv4LCV4LGN4LCk4LC/4LCX4LCk4LCCIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLgsJXgsY3gsLDgsYbgsKHgsL/gsJ/gsY0g4LCV4LC+4LCw4LGN4LCh4LGBIOCwqOCwguCwrOCwsOCxjeKAjOCwsuCxgSDgsK7gsLDgsL/gsK/gsYEg4LCq4LC+4LC44LGN4oCM4LC14LCw4LGN4LCh4LGN4oCM4LCyIOCwteCwguCwn+CwvyDgsLXgsY3gsK/gsJXgsY3gsKTgsL/gsJfgsKQg4LCh4LGH4LCf4LC+4LCo4LGBIOCwleCwsuCwv+Cwl+CwvyDgsIngsILgsJ/gsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLgsKHgsL/gsLjgsY3igIzgsKrgsY3gsLLgsYcg4LCu4LC+4LCX4LGN4LCo4LC/4LCr4LC/4LCV4LGH4LC34LCo4LGN4oCM4LCo4LGBIOCwqOCwv+Cwr+CwguCwpOCxjeCwsOCwv+CwguCwmuCwguCwoeCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLgsKHgsL/gsLjgsY3igIzgsKrgsY3gsLLgsYcg4LCc4LGC4LCu4LGNIOCwuOCxjeCwpeCwvuCwr+CwvyDgsK7gsLDgsL/gsK/gsYEg4LC44LGN4LCl4LC+4LCo4LC+4LCo4LGN4LCo4LC/IOCwqOCwv+Cwr+CwguCwpOCxjeCwsOCwv+CwuOCxjeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLgsLjgsILgsJzgsY3gsJ7gsLLgsKjgsYEg4LCa4LGH4LCv4LCh4LCCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLgsKjgsYrgsJXgsY3gsJXgsJfgsLLgsLDgsYEsIOCwuOCxjeCwteCxiOCwquCxjSDgsJrgsYfgsK/gsJfgsLLgsLDgsYEsIOCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwquCxiCDgsLDgsYbgsILgsKHgsYEg4LC14LGH4LCz4LGN4LCy4LCo4LGBIOCwieCwguCwmuCwvyDgsIYg4LC14LGH4LCz4LGN4LCy4LCo4LGBIOCwpuCwl+CxjeCwl+CwsOCwleCxgSDgsLLgsYfgsKbgsL4g4LCm4LGC4LCw4LC+4LCo4LC/4LCV4LC/IOCwsuCwvuCwl+Cwl+CwsuCwsOCxgSDgsK7gsLDgsL/gsK/gsYEg4LCH4LCk4LCwIOCwuOCwguCwnOCxjeCwnuCwsuCwqOCxgSDgsJrgsYfgsK/gsJfgsLLgsLDgsYEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4LC44LGN4LCl4LC/4LCk4LC/IOCwrOCwvuCwsOCxjeKAjOCwqOCxgSDgsKjgsL/gsLLgsL/gsKrgsL/gsLXgsYfgsK/gsKHgsIIg4LCy4LGH4LCm4LC+IOCwuOCwteCwsOCwv+CwguCwmuCwoeCwgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLgsLjgsY3gsKXgsL/gsKTgsL8g4LCs4LC+4LCw4LGN4oCM4LCo4LGBIOCwqOCwv+CwsuCwv+CwquCwv+CwteCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyDgsLLgsYfgsKbgsL4g4LC44LC/4LC44LGN4LCf4LCu4LGNIOCwmuCwv+CwueCxjeCwqOCwvuCwsuCwqOCxgSDgsJzgsYvgsKHgsL/gsILgsJrgsKHgsL7gsKjgsL/gsJXgsL8g4LCu4LCw4LC/4LCv4LGBIOCwpOCxgOCwuOCwv+CwteCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsKjgsY3gsKjgsL8g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLgsLjgsY3gsKXgsL/gsKTgsL8g4LCq4LCf4LGN4LCf4LGA4LCX4LC+IOCwieCwguCwoeCwn+CwgiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuCwleCxhuCwruCxhuCwsOCwvuCwpOCxiyDgsJrgsL/gsKTgsY3gsLDgsL7gsLLgsYEg4LCu4LCw4LC/4LCv4LGBIOCwteCxgOCwoeCwv+Cwr+Cxi+CwsuCwqOCxgSDgsKTgsYDgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwqOCxgeCwruCwpOCwv+CwuOCxjeCwpOCxgeCwguCwpuCwvy4g4LCIIOCwheCwqOCxgeCwruCwpOCwvyDgsK7gsYAg4LCo4LC/4LCw4LGN4LCn4LC+4LCw4LCjIOCwsuCxh+CwleCxgeCwguCwoeCwvuCwqOCxhyDgsI7gsKrgsY3gsKrgsYHgsKHgsYjgsKjgsL4g4LCV4LGG4LCu4LGG4LCw4LC+4LCo4LGBIOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsKjgsY3gsKjgsL8g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLgsLXgsYjgsKzgsY3gsLDgsYfgsLfgsKjgsY3igIzgsKjgsYEg4LCo4LC/4LCv4LCC4LCk4LGN4LCw4LC/4LCC4LCa4LCh4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLgsLXgsYjgsKzgsY3gsLDgsYfgsJ/gsLDgsY3igIzgsKjgsYEg4LCo4LC/4LCv4LCC4LCk4LGN4LCw4LC/4LCC4LCa4LCh4LC+4LCo4LC/4LCV4LC/IOCwheCwqOCxgeCwteCwsOCxjeCwpOCwqOCwvuCwqOCxjeCwqOCwvyDgsIXgsKjgsYHgsK7gsKTgsL/gsLjgsY3gsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuCwq+CxjeCwsuCwvuCwt+CxjeKAjOCwleCwvuCwguCwpOCwv+CwqOCwvyDgsKjgsL/gsK/gsILgsKTgsY3gsLDgsL/gsILgsJrgsKHgsIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuCwq+CxjeCwsuCwvuCwt+CxjeKAjOCwsuCxiOCwn+CxjeKAjOCwqOCxgSDgsKjgsL/gsK/gsILgsKTgsY3gsLDgsL/gsILgsJrgsKHgsL7gsKjgsL/gsJXgsL8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwqOCxgeCwruCwpOCwv+CwuOCxjeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLgsKvgsYvgsKjgsY0g4LCo4LCC4LCs4LCw4LGN4oCM4LCy4LCV4LGBIOCwqOCxh+CwsOCxgeCwl+CwviDgsJXgsL7gsLLgsY0g4LCa4LGH4LCv4LCh4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuCwruCxgCDgsKrgsY3gsLDgsK7gsYfgsK/gsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwq+Cxi+CwqOCxjSDgsKjgsILgsKzgsLDgsY3igIzgsLLgsJXgsYEg4LCV4LC+4LCy4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsKjgsY3gsKjgsL8g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiDgsKbgsYDgsKjgsL8g4LC14LCy4LCoIOCwheCwqOCxgeCwleCxi+CwqOCwvyDgsJvgsL7gsLDgsY3gsJzgsYDgsLLgsYEg4LC14LC/4LCn4LC/4LCC4LCa4LCs4LCh4LC14LCa4LGN4LCa4LGBIOCwsuCxh+CwpuCwviDgsJXgsL7gsLLgsY3igIzgsLLgsYEg4LCw4LC+4LC14LCa4LGN4LCa4LGBLiDgsIfgsKbgsL8g4LCF4LCk4LGN4LCv4LC14LC44LCwIOCwqOCwguCwrOCwsOCxjeKAjOCwsuCwleCxgSDgsJXgsL7gsLLgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwheCwqOCxgeCwteCwsOCxjeCwpOCwqOCwvuCwqOCxjeCwqOCwvyDgsIXgsKjgsYHgsK7gsKTgsL/gsILgsJrgsKbgsKjgsL8g4LCX4LGB4LCw4LGN4LCk4LGB4LCC4LCa4LGB4LCV4LGL4LCC4LCh4LC/LiDgsLngsL7gsKjgsL/gsJXgsLDgsK7gsYjgsKgg4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCy4LGBIOCwruCxgCDgsKjgsL/gsLDgsY3gsKfgsL7gsLDgsKMg4LCy4LGH4LCV4LGB4LCC4LCh4LC+4LCo4LGHIOCwleCwvuCwsuCxjeKAjOCwsuCxgSDgsJrgsYfgsK/gsKHgsIIg4LCm4LGN4LC14LC+4LCw4LC+IOCwruCxgOCwleCxgSDgsKHgsKzgsY3gsKzgsYEg4LCW4LCw4LGN4LCa4LCv4LGN4LCv4LGH4LCy4LC+IOCwmuCxh+Cwr+CwteCwmuCxjeCwmuCxgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IklNUyDgsJXgsL7gsLLgsY0g4LC44LGH4LC1IOCwquCxjeCwsOCwvuCwquCxjeCwr+CwpCDgsIXgsKjgsYHgsK7gsKTgsL8iPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuCwleCwpOCxjeCwpOCwv+CwsOCwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i4LCV4LC+4LCq4LGAIOCwmuCxh+Cwr+CwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuCwheCwpOCwv+CwleCwv+CwguCwmuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i4LC44LC+4LCm4LC+IOCwteCwmuCwqOCwgiDgsLXgsLLgsYYg4LCF4LCk4LC/4LCV4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLgsK3gsLDgsY3gsKTgsYAg4LCa4LGH4LCv4LCC4LCh4LC/Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuCwpOCxiuCwsuCwl+Cwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJM4LCo4LC/IOCwleCwvuCwquCxgCDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLgsLXgsJrgsKjgsL7gsKjgsY3gsKjgsL8g4LCO4LCC4LCa4LGB4LCV4LGL4LCC4LCh4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLgsJrgsLDgsY3gsK8g4LCw4LCm4LGN4LCm4LGBIOCwmuCxh+Cwr+CwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i4LCa4LCw4LGN4LCv4LCo4LGBIOCwquCxgeCwqOCwsOCwvuCwteCxg+CwpOCwgiDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LC14LCa4LCoIOCwjuCwguCwquCwv+CwlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLgsKjgsL/gsJjgsILgsJ/gsYHgsLXgsYHgsJXgsYEg4LCc4LGL4LCh4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLgsKTgsYrgsLLgsJfgsL/gsILgsJrgsYEiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i4LC14LC+4LCy4LGN4oCM4LCq4LGH4LCq4LCw4LGN4oCM4LCo4LGBIOCwruCwvuCwsOCxjeCwmuCwguCwoeCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjSDgsKrgsLDgsL/gsLbgsYDgsLLgsKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuCwt+CwsOCwpOCxgSDgsKrgsY3gsLDgsKbgsL7gsKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY0g4LC44LC54LC+4LCv4LCV4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LC44LCV4LGN4LCw4LC/4LCv4LCCIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgsKbgsY3gsLXgsL7gsLDgsL4gVlBOIOCwuOCwleCxjeCwsOCwv+Cwr+CwgiDgsJrgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLgsKjgsYbgsJ/gsY3igIzgsLXgsLDgsY3gsJXgsY3igIzgsKjgsYEg4LCo4LC/4LCw4LGN4LC14LC54LC/4LCC4LCa4LCh4LC+4LCo4LC/4LCV4LC/IOCwpOCwvuCwleCwguCwoeCwvy4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i4LCu4LGAIOCwqOCwv+CwsOCxjeCwteCwvuCwueCwleCxgeCwoeCxgSDgsKjgsLXgsYDgsJXgsLDgsL/gsILgsJrgsL7gsLDgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuCwruCxgCDgsKjgsL/gsLDgsY3gsLXgsL7gsLngsJXgsYHgsLLgsYEg4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LC+4LCw4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLgsKzgsY3gsK/gsL7gsJ/gsLDgsYAg4LCc4LGA4LC14LC/4LCk4LCV4LC+4LCy4LC+4LCo4LGN4LCo4LC/IOCwruCxhuCwsOCxgeCwl+CxgeCwquCwsOCwmuCwoeCwguCwsuCxiyDgsLjgsLngsL7gsK/gsKrgsKHgsJ/gsL7gsKjgsL/gsJXgsL8sIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLjgsYfgsLXgsLDgsY0g4LCu4LGAIOCwquCwsOCwv+CwleCwsOCwgiDgsKrgsKjgsL/gsKTgsYDgsLDgsYHgsKjgsYEg4LCk4LCX4LGN4LCX4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/IOCwruCwsOCwv+Cwr+CxgSDgsLXgsYjgsKzgsY3gsLDgsYfgsLfgsKjgsY3igIzgsKjgsYEsIOCwuOCxjeCwpeCwvuCwqCDgsLjgsYfgsLXgsLLgsKjgsYEg4LCu4LCw4LC/4LCv4LGBIOCwjuCwleCxjeCwleCxgeCwtSDgsKjgsYfgsKrgsKXgsY3gsK8g4LCh4LGH4LCf4LC+4LCo4LGBIOCwquCwsOCwv+CwruCwv+CwpOCwgiDgsJrgsYfgsLjgsY3gsKTgsYHgsILgsKbgsL8uIOCwh+CwruCxhuCwr+Cwv+CwsuCxjSwg4LCu4LGG4LC44LGH4LCc4LC/4LCC4LCX4LGNIOCwruCwsOCwv+Cwr+CxgSDgsLjgsK7gsJXgsL7gsLLgsYDgsJXgsLDgsKPgsKrgsYgg4LCG4LCn4LC+4LCw4LCq4LCh4LGHIOCwh+CwpOCwsCDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsLLgsYEg4LCu4LGA4LCw4LGBIOCwteCwvuCwn+Cwv+CwqOCwvyDgsKTgsYbgsLDgsL/gsLjgsY3gsKTgsYcg4LCu4LC/4LCo4LC54LC+IOCwqOCwteCxgOCwleCwsOCwv+CwguCwmuCwrOCwoeCwteCxgS5cblxu4LCu4LGAIOCwquCwsOCwv+CwleCwsOCwgiDgsJvgsL7gsLDgsY3gsJzgsY0g4LCF4LC14LGB4LCk4LGB4LCo4LGN4LCo4LCq4LGN4LCq4LGB4LCh4LGBIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLjgsYfgsLXgsLDgsY0g4LC44LGN4LC14LCv4LCC4LCa4LC+4LCy4LCV4LCC4LCX4LC+IOCwhuCwq+CxjSDgsIXgsLXgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLgsKzgsY3gsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/OiDgsIgg4LCo4LGL4LCf4LC/4LCr4LC/4LCV4LGH4LC34LCo4LGN4oCM4LCy4LCo4LGBIOCwjuCwquCxjeCwquCxgeCwoeCxgiDgsJrgsYLgsKrgsKbgsYEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LCk4LCV4LGN4LCV4LGB4LC1OiDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLIg4LCc4LC+4LCs4LC/4LCk4LC+IOCwpuCwv+Cwl+CxgeCwtSDgsK3gsL7gsJfgsILgsLLgsYsg4LC24LCs4LGN4LCm4LCCIOCwsuCxh+CwleCxgeCwguCwoeCwviDgsJrgsYLgsKrgsYHgsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuCwuOCwvuCwp+CwvuCwsOCwo+Cwgjog4LCIIOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsuCwqOCxgSDgsLbgsKzgsY3gsKbgsIIg4LCy4LGH4LCV4LGB4LCC4LCh4LC+IOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i4LCF4LCn4LC/4LCV4LCCOiDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLIg4LCc4LC+4LCs4LC/4LCk4LC+IOCwjuCwl+CxgeCwtSDgsK3gsL7gsJfgsILgsLLgsYsg4LC24LCs4LGN4LCm4LCC4LCk4LGLIOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLgsIXgsKTgsY3gsK/gsLXgsLjgsLDgsII6IOCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwquCxiCDgsLbgsYDgsJjgsY3gsLDgsILgsJfgsL4g4LC24LCs4LGN4LCm4LCC4LCk4LGLIOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLIg4LCq4LC+4LCf4LGBICg8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPiDgsLXgsLDgsJXgsYEpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4LCS4LCVIOCwqOCwv+CwruCwv+Cwt+CwgiDgsKrgsL7gsJ/gsYEgKDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+IOCwteCwsOCwleCxgSk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IOCwjuCwguCwmuCxgeCwleCxi+CwrOCwoeCwv+CwguCwpuCwvzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuCwh+CwpOCwsOCwvuCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLgsK7gsYDgsLDgsYEg4LCIIOCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsiDgsKrgsY3gsLDgsL7gsK7gsYHgsJbgsY3gsK/gsKTgsKjgsYEg4LC44LGG4LCf4LGNIOCwmuCxh+CwuOCwvuCwsOCxgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuCwh+CwguCwpuCxgeCwsuCxiyDgsKrgsYfgsLDgsY3gsJXgsYrgsKjgsKzgsKHgsL/gsKgg4LC14LGN4LCv4LCV4LGN4LCk4LGB4LCy4LCo4LGBIOCwrOCwn+CxjeCwn+CwvyDgsIfgsKbgsL8g4LCa4LC+4LCy4LC+IOCwruCxgeCwluCxjeCwr+CwruCxiOCwqOCwpuCwvy4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCmluZGV4IDU3Yjk1OTguLjVkMjc5NDMgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+IuC4peC5h+C4reC4geC5gOC4peC4oiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLguYDguJnguLfguYnguK3guKvguLLguJbguLnguIHguIvguYjguK3guJnguYTguKfguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiLguYLguKvguKHguJTguJvguKXguK3guJTguKDguLHguKIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLguKPguLDguJrguJogQW5kcm9pZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4i4Liq4LmI4Lin4LiZ4LiV4Lix4LinIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLguKPguKfguKHguJbguLbguIfguILguYnguK3guKHguLnguKXguKrguYjguKfguJnguJrguLjguITguITguKUg4LmA4LiK4LmI4LiZIOC4q+C4oeC4suC4ouC5gOC4peC4guC4muC4seC4leC4o+C5gOC4hOC4o+C4lOC4tOC4leC5geC4peC4sOC4o+C4q+C4seC4quC4nOC5iOC4suC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i4LiE4Lin4Lia4LiE4Li44Lih4LiB4Liy4Lij4LiC4Lii4Liy4Lii4LiB4Liy4Lij4LmB4Liq4LiU4LiH4Lic4LilIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuC4hOC4p+C4muC4hOC4uOC4oeC4o+C4sOC4lOC4seC4muC4geC4suC4o+C4i+C4ueC4oeC5geC4peC4sOC4geC4suC4o+C4p+C4suC4h+C4leC4s+C5geC4q+C4meC5iOC4h+C4guC4reC4h+C4geC4suC4o+C5geC4quC4lOC4h+C4nOC4pSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuC4l+C4s+C4l+C5iOC4suC4l+C4suC4h+C4quC4seC4oeC4nOC4seC4qiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i4Liq4Liy4Lih4Liy4Lij4LiW4LmB4LiV4LiwIOC5gOC4peC4t+C5iOC4reC4mSDguJrguLXguJog4LmB4Lil4Liw4LiX4Liz4LiX4LmI4Liy4LiX4Liy4LiH4Liq4Lix4Lih4Lic4Lix4Liq4Lit4Li34LmI4LiZ4LmGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i4Lib4Li04LiU4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4Lir4Lij4Li34Lit4LmB4LiB4LmJ4LmE4LiC4LmB4LiW4Lia4Liq4LiW4Liy4LiZ4LiwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4m+C4tOC4lOC5g+C4iuC5ieC4h+C4suC4meC5geC4luC4muC4quC4luC4suC4meC4sOC4q+C4o+C4t+C4reC5gOC4nuC4tOC5iOC4oeC5geC4peC4sOC4meC4s+C5hOC4reC4hOC4reC4meC4o+C4sOC4muC4muC4reC4reC4gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLguYDguJvguYfguJnguYHguJbguJrguKrguJbguLLguJnguLAiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLguK3guJnguLjguI3guLLguJXguYPguKvguYnguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguJbguYjguLLguKLguKDguLLguJ7guYHguKXguLDguKfguLTguJTguLXguYLguK3guJTguYnguKfguKLguIHguKXguYnguK3guIfguJbguYjguLLguKLguKPguLnguJvguJnguLXguYkg4LiB4Liy4Lij4Lit4LiZ4Li44LiN4Liy4LiV4LiZ4Li14LmJ4LiI4Liw4LiX4Liz4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4Liq4Liy4Lih4Liy4Lij4LiW4LmD4LiK4LmJ4LiB4Lil4LmJ4Lit4LiH4LiW4LmI4Liy4Lii4Lij4Li54Lib4LmE4LiU4LmJ4LiX4Li44LiB4LmA4Lih4Li34LmI4Lit4LmC4LiU4Lii4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4Lij4Lit4LiB4Liy4Lij4Lii4Li34LiZ4Lii4Lix4LiZ4LiI4Liy4LiB4LiE4Li44LiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+IuC4hOC4p+C4muC4hOC4uOC4oeC4geC4suC4o+C4quC4seC5iOC4meC5gOC4leC4t+C4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiE4Lin4Lia4LiE4Li44Lih4LiB4Liy4Lij4Liq4Lix4LmI4LiZ4LmA4LiV4Li34Lit4LiZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+IuC4hOC4p+C4muC4hOC4uOC4oeC5hOC4n+C4ieC4suC4oiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LiE4Lin4Lia4LiE4Li44Lih4LmE4Lif4LiJ4Liy4LiiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i4LmC4LiX4Lij4LiV4Li04LiU4LiV4LmI4Lit4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmC4LiU4Lii4LiV4Lij4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IuC4reC4meC4uOC4jeC4suC4leC5g+C4q+C5ieC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC5guC4l+C4o+C5gOC4guC5ieC4suC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5guC4lOC4ouC5hOC4oeC5iOC4leC5ieC4reC4h+C5g+C4q+C5ieC4hOC4uOC4k+C4iOC4seC4lOC4geC4suC4oyDguIvguLbguYjguIfguK3guLLguIjguJfguLPguYPguKvguYnguKHguLXguIHguLLguKPguYDguKPguLXguKLguIHguYDguIHguYfguJrguYDguIfguLTguJnguKvguKPguLfguK3guIHguLLguKPguYLguJfguKPguJfguLXguYjguYTguKHguYjguITguLLguJTguITguLTguJQg4LmC4Lib4Lij4LiU4LiX4Lij4Liy4Lia4Lin4LmI4Liy4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZ4LiZ4Li14LmJ4LmE4Lih4LmI4LmE4LiU4LmJ4Lit4LiZ4Li44LiN4Liy4LiV4LmD4Lir4LmJ4LmB4Lit4Lib4Lie4Lil4Li04LmA4LiE4LiK4Lix4LiZ4LmC4LiX4Lij4LmE4Lib4Lir4Lih4Liy4Lii4LmA4Lil4LiC4LiJ4Li44LiB4LmA4LiJ4Li04LiZIOC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4meC4l+C4teC5iOC5gOC4m+C5h+C4meC4reC4seC4meC4leC4o+C4suC4ouC4reC4suC4iOC4l+C4s+C5g+C4q+C5ieC4hOC4uOC4k+C4leC5ieC4reC4h+C5gOC4quC4teC4ouC4hOC5iOC4suC4muC4o+C4tOC4geC4suC4o+C4lOC5ieC4p+C4ouC4geC4suC4o+C5guC4l+C4o+C5guC4lOC4ouC5hOC4oeC5iOC4guC4reC4geC4suC4o+C4ouC4t+C4meC4ouC4seC4meC4iOC4suC4geC4hOC4uOC4kyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfYWNjZXNzSW1zQ2FsbFNlcnZpY2UiIG1zZ2lkPSIzNTc0OTQzODQ3MTgxNzkzOTE4Ij4i4LmA4LiC4LmJ4Liy4LiW4Li24LiH4Lia4Lij4Li04LiB4Liy4Lij4LmC4LiX4LijIElNUyI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i4LiV4Lix4LiUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLguITguLHguJTguKXguK3guIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLguKfguLLguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuC4p+C4suC4h+C5gOC4m+C5h+C4meC4guC5ieC4reC4hOC4p+C4suC4oeC4mOC4o+C4o+C4oeC4lOC4siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i4LmB4LiX4LiZ4LiX4Li14LmILi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuC4peC4miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i4LiE4Lix4LiU4Lil4Lit4LiBIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IuC5gOC4peC4t+C4reC4geC4guC5ieC4reC4hOC4p+C4suC4oSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i4LmA4Lil4Li04LiB4LiX4LizIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLguJfguLPguIvguYnguLMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i4LiB4Liy4Lij4LmA4Lil4Li34Lit4LiB4LiC4LmJ4Lit4LiE4Lin4Liy4LihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+IuC5gOC4nuC4tOC5iOC4oeC5g+C4meC4nuC4iOC4meC4suC4meC4uOC4geC4o+C4oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i4Lil4LiaIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuC5gOC4m+C4peC4teC5iOC4ouC4meC4p+C4reC4peC5gOC4m+C5gOC4m+C4reC4o+C5jCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IuC4leC4seC4p+C4n+C4seC4h+C4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i4Lic4Li54LmJ4LmA4Liq4LiZ4Lit4LmA4LiH4Li34LmI4Lit4LiZ4LmE4LiCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i4Lic4Li54LmJ4LiK4LmI4Lin4Lii4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJWUE4g4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4i4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZIFZQTiDguYLguJTguKIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i4LmB4LiV4Liw4LmA4Lie4Li34LmI4Lit4LiI4Lix4LiU4LiB4Liy4Lij4LmA4LiE4Lij4Li34Lit4LiC4LmI4Liy4LiiIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuC4reC4seC4m+C5gOC4lOC4leC5guC4lOC4ouC4nOC4ueC5ieC4lOC4ueC5geC4peC4o+C4sOC4muC4miI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i4Lil4Lia4LmC4LiU4Lii4Lic4Li54LmJ4LiU4Li54LmB4Lil4Lij4Liw4Lia4Lia4LiC4Lit4LiH4LiE4Li44LiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLguYDguJ7guLfguYjguK3guIrguYjguKfguKLguJvguKPguLHguJrguJvguKPguLjguIfguK3guLLguKLguLjguIHguLLguKPguYPguIrguYnguIfguLLguJnguYHguJrguJXguYDguJXguK3guKPguLXguYgg4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmI4LiI4Liw4Lil4LiU4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZ4LiC4Lit4LiH4Lit4Li44Lib4LiB4Lij4LiT4LmM4LmB4Lil4Liw4LiI4Liz4LiB4Lix4LiU4LiB4Liy4Lij4Liq4Lix4LmI4LiZIOC4muC4o+C4tOC4geC4suC4o+C4leC4s+C5geC4q+C4meC5iOC4hyDguYHguKXguLDguILguYnguK3guKHguLnguKXguYHguJrguYfguIHguIHguKPguLLguKfguJTguYzguKrguYjguKfguJnguYPguKvguI3guYgg4Liq4Liz4Lir4Lij4Lix4Lia4Lit4Li14LmA4Lih4LilIOC4geC4suC4o+C4o+C4seC4muC4quC5iOC4h+C4guC5ieC4reC4hOC4p+C4suC4oSDguYHguKXguLDguYHguK3guJvguK3guLfguYjguJnguYYg4LiX4Li14LmI4LmD4LiK4LmJ4LiB4Liy4Lij4LiL4Li04LiH4LiE4LmM4LiI4Liw4LmE4Lih4LmI4Lit4Lix4Lib4LmA4LiU4LiV4Lir4Liy4LiB4LiE4Li44LiT4LmE4Lih4LmI4LmA4Lib4Li04LiU4LiC4Li24LmJ4LiZ4Lih4LiyXG5cbuC5guC4q+C4oeC4lOC4m+C4o+C4sOC4q+C4ouC4seC4lOC5geC4muC4leC5gOC4leC4reC4o+C4teC5iOC4iOC4sOC4m+C4tOC4lOC5guC4lOC4ouC4reC4seC4leC5guC4meC4oeC4seC4leC4tOC4guC4k+C4sOC4iuC4suC4o+C5jOC4iOC4reC4uOC4m+C4geC4o+C4k+C5jCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i4Lia4Lil4LmH4Lit4LiBOiDguK3guKLguYjguLLguYHguKrguJTguIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYDguKvguKXguYjguLLguJnguLXguYkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i4LiV4LmI4LizOiDguYHguKrguJTguIfguJfguLXguYjguJTguYnguLLguJnguKXguYjguLLguIfguILguK3guIfguKPguLLguKLguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYLguJTguKLguYTguKHguYjguKrguYjguIfguYDguKrguLXguKLguIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuC4m+C4geC4leC4tDog4LmB4Liq4LiU4LiH4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmA4Lir4Lil4LmI4Liy4LiZ4Li14LmJ4LmC4LiU4Lii4LmE4Lih4LmI4Liq4LmI4LiH4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLguKrguLnguIc6IOC5geC4quC4lOC4h+C4l+C4teC5iOC4lOC5ieC4suC4meC4muC4meC4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC5geC4peC4sOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLguJTguYjguKfguJk6IOC5geC4quC4lOC4h+C4muC4meC4q+C4meC5ieC4suC4iOC4reC5g+C4meC4iuC5iOC4p+C4h+C5gOC4p+C4peC4suC4quC4seC5ieC4meC5hiDguYHguKXguLDguKrguYjguIfguYDguKrguLXguKLguIciPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuC4o+C4sOC4ouC4sOC5gOC4p+C4peC4siAlMSRkIOC4meC4suC4l+C4tSAo4LiI4LiZ4LiW4Li24LiH4LmA4Lin4Lil4LiyIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuC4o+C4sOC4ouC4sOC5gOC4p+C4peC4siAxIOC4meC4suC4l+C4tSAo4LiI4LiZ4LiW4Li24LiH4LmA4Lin4Lil4LiyIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7guYDguKXguLfguK3guIHguYTguKfguYkgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IOC4o+C4suC4ouC4geC4suC4ozwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IuC5gOC4muC5h+C4lOC5gOC4leC4peC5h+C4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiLguITguLjguJPguJXguLHguYnguIfguITguYjguLLguITguKfguLLguKHguKrguLPguITguLHguI3guILguK3guIfguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYDguKvguKXguYjguLLguJnguLXguYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IuC4guC5ieC4reC4hOC4p+C4suC4oeC4meC4teC5ieC4quC4s+C4hOC4seC4jeC5gOC4meC4t+C5iOC4reC4h+C4iOC4suC4geC4muC4uOC4hOC4hOC4peC4l+C4teC5iOC5gOC4geC4teC5iOC4ouC4p+C4guC5ieC4reC4hyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggOGNjYTY3Ni4uNDc5ZWZkZiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iSS1sb2NrIG5nYXlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJOYWthdGFnbyBhbmcgbWdhIGNvbnRlbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJTYWZlIG1vZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIFN5c3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iUGVyc29uYWwiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+Ik1heSBrYXNhbWFuZyBwZXJzb25hbCBuYSBkYXRhIHR1bGFkIG5nIG1nYSBudW1lcm8gbmcgY3JlZGl0IGNhcmQgYXQgcGFzc3dvcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJLb250cm9saW4gYW5nIHBhZy1tYWduaWZ5IG5nIGRpc3BsYXkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iS29udHJvbGluIGFuZyBhbnRhcyBuZyBwYWctem9vbSBhdCBwYWdwb3Bvc2lzeW9uIG5nIGRpc3BsYXkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iTWFnc2FnYXdhIG5nIG1nYSBnYWxhdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4iTWF5IGtha2F5YWhhbmcgbWFnLXRhcCwgbWFnLXN3aXBlLCBtYWctcGluY2ggYXQgbWFnc2FnYXdhIG5nIGliYSBwYW5nIG1nYSBnYWxhdy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJodXdhZyBwYWdhbmFoaW4gbyBiYWd1aGluIGFuZyBzdGF0dXMgYmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgaHV3YWcgcGFnYW5haGluIGFuZyBzdGF0dXMgYmFyIG8gbWFnZGFnZGFnIGF0IG1hZy1hbGlzIG5nIG1nYSBpY29uIG5nIHN5c3RlbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4ibWFnaW5nIHN0YXR1cyBiYXIiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJQaW5hcGF5YWdhbiBhbmcgYXBwIG5hIGt1bXVoYSBuZyBtZ2EgbGFyYXdhbiBhdCB2aWRlbyBnYW1pdCBhbmcgY2FtZXJhLiBQaW5hcGF5YWdhbiBuZyBwYWhpbnR1bG90IG5hIGl0byBhbmcgYXBwIG5hIGdhbWl0aW4gYW5nIGNhbWVyYSBhbnVtYW5nIG9yYXMgbmFuZyB3YWxhIG5nIGl5b25nIGt1bXBpcm1hc3lvbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ia29udHJvbGluIGFuZyBwYWctdmlicmF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iUGluYXBheWFnYW4gYW5nIGFwcCBuYSBrb250cm9saW4gYW5nIHZpYnJhdG9yLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiJrb250cm9saW4gYW5nIGZsYXNobGlnaHQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEga29udHJvbGluIGFuZyBmbGFzaGxpZ2h0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+ImRpcmVrdGFuZyB0YXdhZ2FuIGFuZyBtZ2EgbnVtZXJvIG5nIHRlbGVwb25vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IlBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgdHVtYXdhZyBzYSBtZ2EgbnVtZXJvIG5nIHRlbGVwb25vIG5hbmcgd2FsYSBuZyBpeW9uZyBwYW5naGloaW1hc29rLiBNYWFhcmkgaXRvbmcgbWFncmVzdWx0YSBzYSBtZ2EgaGluZGkgaW5hYXNhaGFuZyBwYWdzaW5naWwgbyB0YXdhZy4gVGFuZGFhbiBuYSBoaW5kaSBuaXRvIHBpbmFwYXlhZ2FuIGFuZyBhcHAgbmEgdHVtYXdhZyBzYSBtZ2EgbnVtZXJvbmcgcGFuZy1lbWVyZ2VuY3kuIE1hYWFyaW5nIG1hZ3BhZ2FzdG9zIHNhIGl5byBuZyBwZXJhIGFuZyBuYWtha2FoYW1hayBuYSBhcHBzIHNhIHBhbWFtYWdpdGFuIG5nIHBhZ3Rhd2FnIG5hbmcgd2FsYSBuZyBpeW9uZyBrdW1waXJtYXN5b24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJpLWFjY2VzcyBhbmcgc2VyYmlzeW8gc2EgdGF3YWcgbmcgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJJLWN1dCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFoaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJJLXBhc3RlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJJLXBhc3RlIGJpbGFuZyBwbGFpbiB0ZXh0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiJQYWxpdGFuLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlRhbmdnYWxpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iS29weWFoaW4gYW5nIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IlB1bWlsaSBuZyB0ZWtzdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkktdW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iR2F3aW5nIG11bGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iUGFncGlsaSBuZyB0ZWtzdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iSWRhZ2RhZyBzYSBkaWtzeXVuYXJ5byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iVGFuZ2dhbGluIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IkJhZ3VoaW4gYW5nIHdhbGxwYXBlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Ik5vdGlmaWNhdGlvbiBsaXN0ZW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iTmFnYmliaWdheSBuZyBrdW5kaXN5b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJOb3RpZmljYXRpb24gYXNzaXN0YW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiJOYWthLWFjdGl2YXRlIGFuZyBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJJc2luYWFrdGlibyBhbmcgVlBOIG5nIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IlBpbmR1dGluIHVwYW5nIHBhbWFoYWxhYW4gYW5nIG5ldHdvcmsuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Ik5hLXVwZGF0ZSBuZyBpeW9uZyBhZG1pbmlzdHJhdG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJOYS1kZWxldGUgbmcgaXlvbmcgYWRtaW5pc3RyYXRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iVXBhbmcgbWF0dWx1bmdhbmcgcGFnYnV0aWhpbiBhbmcgdGFnYWwgbmcgYmF0ZXJ5YSwgYmluYWJhd2FzYW4gbmcgcGFuZ3RpcGlkIG5nIGJhdGVyeWEgYW5nIHBhZ2dhbmFwIG5nIGl5b25nIGRldmljZSBhdCBuaWxpbGltaXRhaGFuIGFuZyBwYWctdmlicmF0ZSwgbWdhIHNlcmJpc3lvIG5nIGxva2FzeW9uIGF0IGthcmFtaWhhbiBzYSBkYXRhIG5nIGJhY2tncm91bmQuIE1hYWFyaW5nIGhpbmRpIG1hZy11cGRhdGUgYW5nIGVtYWlsLCBwYWdtZW1lbnNhaGUgYXQgaWJhIHBhbmcgbWdhIGFwcCBuYSB1bWFhc2Egc2EgcGFnc2ktc3luYyBtYWxpYmFuIGt1bmcgYnVrc2FuIG1vIGFuZyBtZ2EgaXlvbi5cblxuQXd0b21hdGlrb25nIG5hZy1vLW9mZiBhbmcgcGFuZ3RpcGlkIG5nIGJhdGVyeWEga2FwYWcgbmFnY2hhLWNoYXJnZSBhbmcgaXlvbmcgZGV2aWNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iTmFrYS1ibG9jazogSHV3YWcga2FpbGFubWFuIGlwYWtpdGEgYW5nIG1nYSBub3RpZmljYXRpb24gbmEgaXRvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+Ik1hYmFiYTogVGFoaW1payBuYSBpcGFraXRhIHNhIGliYWJhIG5nIGxpc3RhaGFuIG5nIG1nYSBub3RpZmljYXRpb24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+Ik5vcm1hbDogVGFoaW1payBuYSBpcGFraXRhIGFuZyBtZ2Egbm90aWZpY2F0aW9uIG5hIGl0byI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iTWF0YWFzOiBJcGFraXRhIHNhIHRhYXMgbmcgbGlzdGFoYW4gbmcgbWdhIG5vdGlmaWNhdGlvbiBhdCBtYWctcGxheSBuZyB0dW5vZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiJBZ2FyYW46IElwYXNpbGlwIHNhIHNjcmVlbiBhdCBtYWctcGxheSBuZyB0dW5vZyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNhIGxvb2IgbmcgJTEkZCBtaW51dG8gKGhhbmdnYW5nIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U2EgbG9vYiBuZyAlMSRkIG5hIG1pbnV0byAoaGFuZ2dhbmcgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGFuZyBuYXBpbGk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJJYmEgUGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4iSWthdyBhbmcgbWFndGF0YWtkYSBuZyBrYWhhbGFnYWhhbiBuZyBtZ2Egbm90aWZpY2F0aW9uIG5hIGl0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+Ik1haGFsYWdhIGl0byBkYWhpbCBzYSBtZ2EgdGFvbmcga2FzYW5na290LiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggNjBlZWUxMi4uYjBjNmQ1YSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4ixZ5pbWRpIGtpbGl0bGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4ixLDDp2VyaWsgZ2l6bGVuZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJHw7x2ZW5saSBtb2QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIFNpc3RlbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IktpxZ9pc2VsIjwvc3RyaW5nPgpAQCAtMjU1LDYgKzI1Niw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiJLcmVkaSBrYXJ0xLEgdmUgxZ9pZnJlIGdpYmkga2nFn2lzZWwgYmlsZ2lsZXIgacOnZXJpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+IkVrcmFuIGLDvHnDvHRlY2luaSBrb250cm9sIGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IkVrcmFuxLFuIHlha8SxbmxhxZ90xLFybWEgc2V2aXllc2luaSB2ZSBrb251bXVudSBrb250cm9sIGVkaW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iSGFyYWtldGxlcmkgeWFwbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iODI5NjM3MzAyMTYzNjk4MTI0OSI+IkhhZmlmw6dlIGRva3VuYWJpbGlyLCBoxLF6bMSxY2Ega2F5ZMSxcmFiaWxpciwgc8Sxa8SxxZ90xLFyYWJpbGlyIHZlIGRpxJ9lciBoYXJla2V0bGVyaSB5YXBhYmlsaXJzaW5pei4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiJkdXJ1bSDDp3VidcSfdW51IGRldnJlIGTEscWfxLEgYsSxcmFrIHZleWEgZGXEn2nFn3RpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJVeWd1bGFtYXlhLCBkdXJ1bSDDp3VidcSfdW51IGRldnJlIGTEscWfxLEgYsSxcmFrbWEgdmUgc2lzdGVtIHNpbWdlbGVyaW5pIGVrbGV5aXAga2FsZMSxcm1hIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ImR1cnVtIMOndWJ1xJ91bmRhIG9sbWEiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJVeWd1bGFtYXlhIGthbWVyYXlsYSBmb3RvxJ9yYWYgdmUgdmlkZW8gw6dla21lIGl6bmkgdmVyaXIuIEJ1IGl6aW4sIHV5Z3VsYW1hbsSxbiBzaXppbiBvbmF5xLFuxLF6IG9sbWFkYW4gaXN0ZWRpxJ9pIHphbWFuIGthbWVyYXnEsSBrdWxsYW5tYXPEsW5hIG9sYW5hayBzYcSfbGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiJ0aXRyZcWfaW1pIGRlbmV0bGVtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4iVXlndWxhbWF5YSwgdGl0cmXFn2ltaSBkZW5ldGxlbWUgaXpuaSB2ZXJpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iZWwgZmVuZXJpbmkgZGVuZXRsZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iVXlndWxhbWF5YSwgZWwgZmVuZXJpbmkgZGVuZXRsZW1lIGl6bmkgdmVyaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbiBudW1hcmFsYXLEsW5hIGRvxJ9ydWRhbiDDp2HEn3LEsSB5YXAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iVXlndWxhbWF5YSBzaXppbiBtw7xkYWhhbGVuaXogb2xtYWRhbiB0ZWxlZm9uIG51bWFyYWxhcsSxbmEgw6dhxJ9yxLEgeWFwbWEgaXpuaSB2ZXJpci4gQnUgZHVydW0gYmVrbGVubWV5ZW4gw7ZkZW1lbGVyZSB2ZXlhIMOnYcSfcsSxbGFyYSBuZWRlbiBvbGFiaWxpci4gQW5jYWsgYnUgaXpuaW4sIHV5Z3VsYW1hbsSxbiBhY2lsIG51bWFyYWxhcmEgw6dhxJ9yxLEgeWFwbWFzxLFuYSBvbGFuYWsgc2HEn2xhbWFkxLHEn8SxbsSxIHVudXRtYXnEsW4uIEvDtnTDvCBhbWHDp2zEsSB1eWd1bGFtYWxhciBvbmF5xLFuxLF6IG9sbWFkYW4gw6dhxJ9yxLFsYXIgeWFwYXJhayBzaXppIHphcmFyYSBzb2thYmlsaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMgw6dhxJ9yxLEgaGl6bWV0aW5lIGVyacWfbWUiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IktlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iS29weWFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IllhcMSxxZ90xLFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJEw7x6IG1ldGluIG9sYXJhayB5YXDEscWfdMSxciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iRGXEn2nFn3Rpci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJTaWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IlVSTFwneWkga29weWFsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+Ik1ldGluIHNlw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkdlcmkgYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlllbmlkZW4geWFwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik1ldGluIHNlw6dpbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iU8O2emzDvMSfZSBla2xlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiJTaWwiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iRHV2YXIga2HEn8SxZMSxbsSxIGRlxJ9pxZ90aXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJCaWxkaXJpbSBkaW5sZXlpY2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IkR1cnVtIHNhxJ9sYXnEsWPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkJpbGRpcmltIHlhcmTEsW1jxLFzxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBldGtpbmxlxZ90aXJpbGRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlX2xvbmciIG1zZ2lkPSI2NDAwNzE0Nzk4MDQ5MjUyMjk0Ij4iVlBOLCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gdGFyYWbEsW5kYW4gZXRraW5sZcWfdGlyaWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkHEn8SxIHnDtm5ldG1layBpw6dpbiBkb2t1bnVuLiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiJZw7ZuZXRpY2luaXogdGFyYWbEsW5kYW4gZ8O8bmNlbGxlbmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiJZw7ZuZXRpY2luaXogdGFyYWbEsW5kYW4gc2lsaW5kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4iUGlsIHRhc2FycnVmdSDDtnplbGxpxJ9pLCBwaWwgw7ZtcsO8bsO8IGl5aWxlxZ90aXJtZXllIHlhcmTEsW1jxLEgb2xtYWsgacOnaW4gY2loYXrEsW4gcGVyZm9ybWFuc8SxbsSxIGTDvMWfw7xyw7xyLCB0aXRyZcWfaW1pLCBrb251bSBoaXptZXRsZXJpbmkgdmUgYXJrYSBwbGFuIHZlcmlsZXJpbmluIMOnb8SfdW51IHPEsW7EsXJsYXIuIFNlbmtyb25pemFzeW9uYSBkYXlhbMSxIG9sYXJhayDDp2FsxLHFn2FuIGUtcG9zdGEsIG1lc2FqbGHFn21hIHV5Z3VsYW1hbGFyxLEgdmUgZGnEn2VyIHV5Z3VsYW1hbGFyLCBidW5sYXLEsSBhw6dtYWTEscSfxLFuxLF6IHPDvHJlY2UgZ8O8bmNlbGxlbm1leWViaWxpci5cblxuQ2loYXrEsW7EsXogxZ9hcmogb2x1cmtlbiBwaWwgdGFzYXJydWZ1IG90b21hdGlrIG9sYXJhayBrYXBhdMSxbMSxci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IkVuZ2VsbGVuZGk6IEJ1IGJpbGRpcmltbGVyaSBoacOnYmlyIHphbWFuIGfDtnN0ZXJtZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJEw7zFn8O8azogQmlsZGlyaW0gbGlzdGVzaW5pbiBhbHTEsW5kYSBzZXNzaXpjZSBnw7ZzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJOb3JtYWw6IEJ1IGJpbGRpcmltbGVyaSBzZXNzaXpjZSBnw7ZzdGVyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJZw7xrc2VrOiBCaWxkaXJpbSBsaXN0ZXNpbmluIMO8c3TDvG5kZSBnw7ZzdGVyIHZlIHNlcyDDp8Sxa2FyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IkFjaWw6IEVrcmFuYSBnZXRpciB2ZSBzZXMgw6fEsWthciI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCBkYWtpa2EgacOnaW4gKMWfdSBzYWF0ZSBrYWRhcjogPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QmlyIGRha2lrYSBpw6dpbiAoxZ91IHNhYXRlIGthZGFyOiA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IMO2xJ9lIHNlw6dpbGRpPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iw4dlxZ9pdGxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IkJ1IGJpbGRpcmltbGVyaW4gw7ZuZW0gZGVyZWNlc2luaSBheWFybGFkxLFuxLF6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4iQnUsIGRhaGlsIG9sYW4ga2nFn2lsZXIgbmVkZW5peWxlIMO2bmVtbGlkaXIuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAppbmRleCBhZGY2MjM0Li5hZjEzNTRhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTIyNSw2ICsyMjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLQkdC70L7QutGD0LLQsNGC0Lgg0LfQsNGA0LDQtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQktC80ZbRgdGCINGB0YXQvtCy0LDQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i0JHQtdC30L8uINGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLQodC40YHRgtC10LzQsCBBbmRyb2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLQntGB0L7QsdC40YHRgtGWINC00LDQvdGWIjwvc3RyaW5nPgpAQCAtMjU3LDYgKzI1OCw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuUmVxdWVzdEZpbHRlcktleUV2ZW50cyIgbXNnaWQ9Ijc0NjMxMzUyOTIyMDQxNTI4MTgiPiLQktC60LvRjtGH0LDRlCDQvtGB0L7QsdC40YHRgtGWINC00LDQvdGWLCDRj9C6LdC+0YIg0L3QvtC80LXRgNC4INC60YDQtdC00LjRgtC90LjRhSDQutCw0YDRgtC+0Log0ZYg0L/QsNGA0L7Qu9GWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i0JrQvtC90YLRgNC+0LvRjtCy0LDRgtC4INC30LHRltC70YzRiNC10L3QvdGPINC10LrRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiLQmtC+0L3RgtGA0L7Qu9GO0LLQsNGC0Lgg0LzQsNGB0YjRgtCw0LEg0ZYg0YDQvtC30YLQsNGI0YPQstCw0L3QvdGPINC10LrRgNCw0L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9Ijc0MTg5ODQ3MzAzNjI1NzY4NjIiPiLQktC40LrQvtC90LDQvdC90Y8g0LbQtdGB0YLRltCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLQnNC+0LbQvdCwINGC0L7RgNC60LDRgtC40YHRjywg0L/RgNC+0LLQvtC00LjRgtC4INC/0LDQu9GM0YbQtdC8LCDRgdGC0LjRgdC60LDRgtC4INC/0LDQu9GM0YbRliDRgtCwINCy0LjQutC+0L3Rg9Cy0LDRgtC4INGW0L3RiNGWINC20LXRgdGC0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i0LLQuNC80LjQutCw0YLQuCDRh9C4INC30LzRltC9LiDRgNGP0LTQvtC6INGB0YLQsNC90YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINCy0LjQvNC40LrQsNGC0Lgg0YDRj9C00L7QuiDRgdGC0LDQvdGDINGH0Lgg0LTQvtC00LDQstCw0YLQuCDRgtCwINCy0LjQtNCw0LvRj9GC0Lgg0L/RltC60YLQvtCz0YDQsNC80Lgg0YHQuNGB0YLQtdC80LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+ItCy0ZbQtNC+0LHRgNCw0LbQsNGC0LjRgdGPINGP0Log0YDRj9C00L7QuiDRgdGC0LDQvdGDIjwvc3RyaW5nPgpAQCAtMzU1LDggKzM1OCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINGE0L7RgtC+0LPRgNCw0YTRg9Cy0LDRgtC4INGC0LAg0LfQvdGW0LzQsNGC0Lgg0LLRltC00LXQviDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQutCw0LzQtdGA0LguINCi0LDQutC40Lkg0LTQvtC30LLRltC7INC00LDRlCDQv9GA0L7Qs9GA0LDQvNGWINC30LzQvtCz0YMg0LHRg9C00Ywt0LrQvtC70Lgg0LLQuNC60L7RgNC40YHRgtC+0LLRg9Cy0LDRgtC4INC60LDQvNC10YDRgyDQsdC10Lcg0LLQsNGI0L7Qs9C+INC/0ZbQtNGC0LLQtdGA0LTQttC10L3QvdGPLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLQutC+0L3RgtGA0L7Qu9GO0LLQsNGC0Lgg0LLRltCx0YDQvtGB0LjQs9C90LDQuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiIG1zZ2lkPSI2Mjg0OTg5MjQ1OTAyMzAwOTQ1Ij4i0JTQvtC30LLQvtC70Y/RlCDQv9GA0L7Qs9GA0LDQvNGWINC60L7QvdGC0YDQvtC70Y7QstCw0YLQuCDQstGW0LHRgNC+0YHQuNCz0L3QsNC7LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLQutC+0L3RgtGALiDQsdC70LjQvC4g0YHQstGW0YLQu9C+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLQlNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0LrQvtC90YLRgNC+0LvRjtCy0LDRgtC4INGB0LLRltGC0LvQvtCy0LjQuSDRgdC40LPQvdCw0LsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4i0L/RgNGP0LzQviDQvdCw0LHQuNGA0LDRgtC4INC90L7QvNC10YDQuCDRgtC10LsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+ItCU0L7Qt9Cy0L7Qu9GP0ZQg0L/RgNC+0LPRgNCw0LzRliDQvdCw0LHQuNGA0LDRgtC4INC90L7QvNC10YDQuCDRgtC10LvQtdGE0L7QvdGDINCx0LXQtyDQstCw0YjQvtCz0L4g0LLRltC00L7QvNCwLiDQptC1INC80L7QttC1INGB0L/RgNC40YfQuNC90LjRgtC4INC90LXQvtGH0ZbQutGD0LLQsNC90LUg0YHRgtGP0LPQvdC10L3QvdGPINC/0LvQsNGC0Lgg0YfQuCDQt9C00ZbQudGB0L3QtdC90L3RjyDQtNC30LLRltC90LrRltCyLiDQl9Cw0YPQstCw0LbRgtC1LCDRidC+INGG0LUg0L3QtSDQtNC+0LfQstC+0LvRj9GUINC/0YDQvtCz0YDQsNC80ZYg0L3QsNCx0LjRgNCw0YLQuCDQtdC60YHRgtGA0LXQvdGWINC90L7QvNC10YDQuC4g0KjQutGW0LTQu9C40LLRliDQv9GA0L7Qs9GA0LDQvNC4INC80L7QttGD0YLRjCDQt9C00ZbQudGB0L3RjtCy0LDRgtC4INC00LfQstGW0L3QutC4INCx0LXQtyDQstCw0YjQvtCz0L4g0L/RltC00YLQstC10YDQtNC20LXQvdC90Y8sINC30LAg0YnQviDQtyDQstCw0YEg0YHRgtGP0LPRg9Cy0LDRgtC40LzRg9GC0YzRgdGPINC60L7RiNGC0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLQvtGC0YDQuNC80YPQstCw0YLQuCDQtNC+0YHRgtGD0L8g0LTQviDRgtC10LvQtdGE0L7QvdC90L7RlyDRgdC70YPQttCx0LggSU1TIjwvc3RyaW5nPgpAQCAtNTQyLDggKzU0Myw4IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjkxOTI1MTQ4MDY5NzU4OTg5NjEiPiLQo9C60LDQt9Cw0YLQuCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9ImVtYWlsQWRkcmVzc1R5cGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iODA3Mzk5NDM1Mjk1NjEyOTEyNyI+ItCU0L7QvC4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI3MDg0MjM3MzU2NjAyNjI1NjA0Ij4i0KDQvtCxLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjgwNzM5OTQzNTI5NTYxMjkxMjciPiLQlNC+0LzQsNGI0L3RjyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjcwODQyMzczNTY2MDI2MjU2MDQiPiLQoNC+0LHQvtGH0LAiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSIxMTEyMDQ0NDEwNjU5MDExMDIzIj4i0IbQvdGI0LUiPC9pdGVtPgogICAgIDxpdGVtIG1zZ2lkPSIyMzc0OTEzOTUyODcwMTEwNjE4Ij4i0KPQutCw0LfQsNGC0LgiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KQEAgLTg2OCwxMCArODY5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i0JLQuNGA0ZbQty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+ItCa0L7Qv9GW0Y7Qsi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLQktGB0YLQsNCy0LjRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLQktGB0YLQsNCy0LjRgtC4INGP0Log0L/RgNC+0YHRgtC40Lkg0YLQtdC60YHRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i0JfQsNC80ZbQvdC40YLQuC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLQktC40LTQsNC70LjRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLQmtC+0L/RltGO0LIuIFVSTCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+ItCS0LjQsdGA0LDRgtC4INGC0LXQutGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+ItCS0ZbQtNC80ZbQvdC40YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i0J/QvtCy0YLQvtGA0LjRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+ItCS0LjQsdGW0YAg0YLQtdC60YHRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItCU0L7QtNCw0YLQuCDQsiDRgdC70L7QstC90LjQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i0JLQuNC00LDQu9C40YLQuCI8L3N0cmluZz4KQEAgLTExMjEsNiArMTEyNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLQl9C80ZbQvdC40YLQuCDRhNC+0L3QvtCy0LjQuSDQvNCw0LvRjtC90L7QuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+ItCh0LvRg9C20LHQsCDRh9C40YLQsNC90L3RjyDRgdC/0L7QstGW0YnQtdC90YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+ItCf0L7RgdGC0LDRh9Cw0LvRjNC90LjQuiDRg9C80L7QsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+ItCU0LjRgdC/0LXRgtGH0LXRgCDRgdC/0L7QstGW0YnQtdC90YwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+ItCc0LXRgNC10LbRgyBWUE4g0LDQutGC0LjQstC+0LLQsNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLQnNC10YDQtdC20YMgVlBOINCw0LrRgtC40LLQvtCy0LDQvdC+INC/0YDQvtCz0YDQsNC80L7RjiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINC60LXRgNGD0LLQsNGC0Lgg0LzQtdGA0LXQttC10Y4uIjwvc3RyaW5nPgpAQCAtMTQ1OCwxMSArMTQ2Myw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+ItCe0L3QvtCy0LvQtdC90L4g0LDQtNC80ZbQvdGW0YHRgtGA0LDRgtC+0YDQvtC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLQktC40LTQsNC70LjQsiDQsNC00LzRltC90ZbRgdGC0YDQsNGC0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i0KnQvtCxINC/0L7QtNC+0LLQttC40YLQuCDRh9Cw0YEg0YDQvtCx0L7RgtC4INCw0LrRg9C80YPQu9GP0YLQvtGA0LAsINGE0YPQvdC60YbRltGPINC30LDQvtGJ0LDQtNC20LXQvdC90Y8g0LfQsNGA0Y/QtNGDINCw0LrRg9C80YPQu9GP0YLQvtGA0LAg0LfQvdC40LbRg9GUINC/0YDQvtC00YPQutGC0LjQstC90ZbRgdGC0Ywg0L/RgNC40YHRgtGA0L7Rjiwg0LAg0YLQsNC60L7QtiDQvtCx0LzQtdC20YPRlCDQstGW0LHRgNCw0YbRltGOLCDRhNGD0L3QutGG0ZbRlyDRgdC70YPQttCxINC70L7QutCw0YbRltGXINGC0LAg0L/QtdGA0LXQtNCw0LLQsNC90L3RjyDQsdGW0LvRjNGI0L7RgdGC0ZYg0YTQvtC90L7QstC40YUg0LTQsNC90LjRhS4g0JXQu9C10LrRgtGA0L7QvdC90LAg0L/QvtGI0YLQsCwg0YfQsNGC0Lgg0Lkg0ZbQvdGI0ZYg0LTQvtC00LDRgtC60LgsINGP0LrRliDRgdC40L3RhdGA0L7QvdGW0LfRg9GO0YLRjNGB0Y8sINC80L7QttGD0YLRjCDQvdC1INC+0L3QvtCy0LvRjtCy0LDRgtC40YHRjywg0LTQvtC60Lgg0LLQuCDRl9GFINC90LUg0LLRltC00LrRgNC40ZTRgtC1LlxuXG7QpNGD0L3QutGG0ZbRjyDQt9Cw0L7RidCw0LTQttC10L3QvdGPINC30LDRgNGP0LTRgyDQsNC60YPQvNGD0LvRj9GC0L7RgNCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0LLQuNC80LjQutCw0ZTRgtGM0YHRjyDQv9GW0LQg0YfQsNGBINC30LDRgNGP0LTQttCw0L3QvdGPINC/0YDQuNGB0YLRgNC+0Y4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLQl9Cw0LHQu9C+0LrQvtCy0LDQvdC+OiDQvdC1INC/0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i0J3QuNC30YzQutC40Lkg0L/RgNGW0L7RgNC40YLQtdGCOiDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPINCy0L3QuNC30YMg0YHQv9C40YHQutGDINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+ItCh0YLQsNC90LTQsNGA0YLQvdC40Lkg0L/RgNGW0L7RgNC40YLQtdGCOiDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+ItCS0LjRgdC+0LrQuNC5INC/0YDRltC+0YDQuNGC0LXRgjog0L/QvtC60LDQt9GD0LLQsNGC0Lgg0YbRliDRgdC/0L7QstGW0YnQtdC90L3RjyDQstCz0L7RgNGWINGB0L/QuNGB0LrRgyDQt9GWINC30LLRg9C60L7QstC40Lwg0YHQuNCz0L3QsNC70L7QvCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLQotC10YDQvNGW0L3QvtCy0L46INC/0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0L3QsCDQtdC60YDQsNC90ZYg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj4lMSRkINGF0LLQuNC70LjQvdGDICjQtNC+IDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPiUxJGQg0YXQstC40LvQuNC90LggKNC00L4gPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTU0Niw0ICsxNTQ2LDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0JLQuNCx0YDQsNC90L4gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i0IbQvdGI0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i0JLQuCDQstC60LDQt9GD0ZTRgtC1INC/0YDRltC+0YDQuNGC0LXRgiDRhtC40YUg0YHQv9C+0LLRltGJ0LXQvdGMLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i0JLQsNC20LvQuNCy0LUg0Lcg0L7Qs9C70Y/QtNGDINC90LAg0YPRh9Cw0YHQvdC40LrRltCyLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAppbmRleCA1NGFmMzFlLi44MmJmN2FiIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Itin2KjavtuMINmF2YLZgdmEINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLigI45OTkr4oCOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2YjYp9ivINmF2K7ZgduMINuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+Itit2YHYp9i42KrbjCDZiNi22LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiLigI9BbmRyb2lkINiz2LPZudmFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLYsNin2KrbjCI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i2KfYsyDZhduM2rog2LDYp9iq24wg2ojbjNm52Kcg2KzbjNiz25Ig2qnYsduM2ojZuSDaqdin2LHaiCDZhtmF2KjYsdiyINin2YjYsSDZvtin2LMg2YjYsdqI2LIg2LTYp9mF2YQg24HbjNq625QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+ItqI2LPZvtmE25Ig2KjakdinINqp2LHZhtuSINqp25Ig2LnZhdmEINqp2Ygg2qnZhtm52LHZiNmEINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+ItqI2LPZvtmE25Ig2qnbkiDYstmI2YUg2qnbjCDYs9i32K0g2KfZiNixINm+2YjYstuM2LTZhiDaqdmIINqp2YbZudix2YjZhCDaqdix24zautuUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i2KfYtNin2LHbkiDYp9mG2KzYp9mFINiv24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i2Kravtm+2Kravtm+2KfZhtin2Iwg2LPZiNin2KbZviDaqdix2YbYp9iMINqG2bnaqduMINio2r7YsdmG2Kcg2KfZiNixINiv24zar9ixINin2LTYp9ix25Ig2KfZhtis2KfZhSDYr9uSINiz2qnYqtuMINuB25IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLYp9iz2bnbjNm52LMg2KjYp9ixINqp2Ygg2LrbjNixINmB2LnYp9mEINuM2Kcg2KfYsyDZhduM2rog2KrYsdmF24zZhSDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiLYp9uM2b4g2qnZiCDYp9iz2bnbjNm52LMg2KjYp9ixINi624zYsSDZgdi52KfZhCDaqdix2YbbkiDbjNinINiz2LPZudmFINii2KbbjNqp2YbYsiDYtNin2YXZhCDaqdix2YbbkiDYp9mI2LEg24HZudin2YbbkiDaqduMINin2KzYp9iy2Kog2K/bjNiq2Kcg24HbktuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+Itio2LfZiNixINin2LPZuduM2bnYsyDYqNin2LEg2qnYp9mFINmE24zauiI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+Itin24zZviDaqdmIINqp24zZhdix25Ig2LPbkiDYqti12YjbjNix24zauiDZhNuM2YbbkiDYp9mI2LEg2YjbjNqI24zZiNiyINio2YbYp9mG25Ig2qnbjCDYp9is2KfYstiqINiv24zYqtinINuB25LblCDbjNuBINin2KzYp9iy2Kog2KfbjNm+INqp2Ygg2KLZviDaqduMINiq2LXYr9uM2YIg2qnbkiDYqNi624zYsSDaqdiz24wg2KjavtuMINmI2YLYqiDaqduM2YXYsdinINin2LPYqti52YXYp9mEINqp2LHZhtuSINqp24wg2KfYrNin2LLYqiDYr9uM2KrbjCDbgduS25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i2KfYsdiq2LnYp9i0INqp2Ygg2qnZhtm52LHZiNmEINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLYp9uM2b4g2qnZiCDZiNin2KbYqNix24zZudixINqp2YbZudix2YjZhCDaqdix2YbbkiDaqduMINin2KzYp9iy2Kog2K/bjNiq2Kcg24HbktuUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+ItmB2YTbjNi0INmE2KfYptm5INqp2YbZudix2YjZhCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4i2KfbjNm+INqp2Ygg2YHZhNuM2LQg2YTYp9im2bkg2qnZhtm52LHZiNmEINqp2LHZhtuSINqp24wg2KfYrNin2LLYqiDYr9uM2KrYpyDbgduS25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLYqNix2KfbgSDYsdin2LPYqiDZgdmI2YYg2YbZhdio2LHYsiDZvtixINqp2KfZhCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLYp9uM2b4g2qnZiCDYotm+INqp24wg2YXYr9in2K7ZhNiqINqp25Ig2KjYutuM2LEg2YHZiNmGINmG2YXYqNix2YjauiDZvtixINqp2KfZhCDaqdix2YbbkiDaqduMINin2KzYp9iy2Kog2K/bjNiq2Kcg24HbktuUINin2LMg2qnbkiDZhtiq24zYrNuSINmF24zauiDYutuM2LEg2YXYqtmI2YLYuSDahtin2LHYrNiyINuM2Kcg2qnYp9mE24zauiDbgdmI2LPaqdiq24wg24HbjNq625Qg2YbZiNm5INqp2LHZhNuM2rog2qnbgSDbjNuBINin24zZviDaqdmIINuB2Ybar9in2YXbjCDZhtmF2KjYsdmI2rog2b7YsSDaqdin2YQg2qnYsdmG25Ig2qnbjCDYp9is2KfYstiqINmG24HbjNq6INiv24zYqtinINuB25LblCDZhtmC2LXYp9mGINiv24Eg2KfbjNm+2LMg2KLZviDaqduMINiq2LXYr9uM2YIg2qnbkiDYqNi624zYsSDaqdin2YTbjNq6INqp2LHaqduSINii2b4g2qnbjCDYsdmC2YUg2LXYsdmBINqp2LHZiNinINiz2qnYqtuSINuB24zautuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLigI9JTVMg2qnYp9mEINiz2LHZiNizINiq2qkg2LHYs9in2KbbjCDYrdin2LXZhCDaqdix24zauiI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i2qnYp9m524zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i2qnYp9m+24wg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLZvtuM2LPZuSDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i2LPYp9iv24Eg2YXYqtmGINqp25Ig2LfZiNixINm+2LEg2b7bjNiz2bkg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Itiq2KjYr9uM2YQg2qnYsduM2rrigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i2K3YsNmBINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLigI9VUkwg2qnYp9m+24wg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLZhdiq2YYg2YXZhtiq2K7YqCDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i2qnYp9mE2LnYr9mFINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLYr9mI2KjYp9ix24Eg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i2YXYqtmGINqp2Kcg2KfZhtiq2K7Yp9ioIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+ItmE2LrYqiDZhduM2rog2LTYp9mF2YQg2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Itit2LDZgSDaqdix24zauiI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLZiNin2YQg2b7bjNm+2LEg2KrYqNiv24zZhCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+Itin2LfZhNin2Lkg2LPZhtmG25Ig2YjYp9mE2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+Iti02LHYtyDZgdix2KfbgdmFINqp2YbZhtiv24EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLYp9i32YTYp9i5INqp2Kcg2YXYudin2YjZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4i4oCPVlBOINmB2LnYp9mEINuB2Yjar9uM2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiLigI88eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2qnbkiDYsNix24zYuduBIFZQTiDZgdi52KfZhCDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i2YbbjNm5INmI2LHaqSDaqdinINmG2LjZhSDaqdix2YbbkiDaqduM2YTYptuSINqG2r7ZiNim24zautuUIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+Itii2b4g2qnbkiDZhdmG2KrYuNmFINmG25Ig2KfZviDaiNmK2bkg2qnYsSDYr9uM2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+Itii2b4g2qnbkiDZhdmG2KrYuNmFINqp24wg2KzYp9mG2Kgg2LPbkiDYrdiw2YEg2qnYsSDYr9uM2Kcg2q/bjNinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLYqNuM2bnYsduMINqp24wg2YXbjNi52KfYryDYqNuB2KrYsSDaqdix2YbbkiDZhduM2rog2YXYr9ivINqp2LHZhtuSINqp24zZhNim25LYjCDYqNuM2bnYsduMINiz24zZiNixINii2b4g2qnbkiDYotmE24Eg2qnbjCDaqdin2LHaqdix2K/ar9uMINqp2YUg2qnYsSDYr9uM2KrbjCDbgduSINin2YjYsSDZiNin2KbYqNix24zYtNmG2Iwg2YXZgtin2YUg2qnbjCDYs9ix2YjYs9iyINin2YjYsSDZvtizINmF2YbYuNixINqp2Kcg2KjbjNi02KrYsSDaiNuM2bnYpyDZhdit2K/ZiNivINqp2LEg2K/bjNiq24wg24HbktuUINin24wg2YXbjNmE2Iwg2b7bjNi62KfZhSDYsdiz2KfZhtuMINin2YjYsSDZhdi32KfYqNmC2Kog2b7YsNuM2LHbjCDZvtixINmF2YbYrdi12LEg2K/bjNqv2LEg2KfbjNm+2LMg2YXZhdqp2YYg24HbkiDYp9izINmI2YLYqiDYqtqpINin2b4g2ojbjNm5INmG24Eg24HZiNq6INis2Kgg2KraqSDYotm+INin2YbbgduM2rog2YbbgSDaqdq+2YjZhNuM2rrblFxuXG7Yotm+INqp2Kcg2KLZhNuBINqG2KfYsdisINuB2YjYqtuSINmI2YLYqiDYqNuM2bnYsduMINiz24zZiNixINiu2YjYryDYqNiu2YjYryDYotmBINuB2Ygg2KzYp9iq24wg24HbktuUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLZhdiz2K/ZiNivINqp2LHYr9uBOiDbjNuBINin2LfZhNin2LnYp9iqINqp2KjavtuMINmF2Kog2K/aqdq+2KfYptuM2roiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i2b7Ys9iqOiDYp9i32YTYp9i52KfYqiDaqduMINmB24HYsdiz2Kog2qnbkiDZhtuM2obbkiDYrtin2YXZiNi024wg2LPbkiDYr9qp2r7Yp9im24zauiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i2LnYp9mFOiDYrtin2YXZiNi024wg2LPbkiDbjNuBINin2LfZhNin2LnYp9iqINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLYp9i52YTbjDog2KfYt9mE2KfYudin2Kog2qnbjCDZgduB2LHYs9iqINm+2LEg2LPYqCDYs9uSINin2YjZvtixINiv2qnavtin2KbbjNq6INin2YjYsSDYotmI2KfYsiDahtmE2KfYptuM2roiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i2KfYsdis2YbZuTog2KfYs9qp2LHbjNmGINm+2LEg2K/aqdq+2KfYptuM2rog2KfZiNixINii2YjYp9iyINqG2YTYp9im24zauiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4oCPJTEkZCDZhdmG2bkg2qnbjNmE2KbbkiAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4g2KraqSk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7Yp9uM2qkg2YXZhtm5INqp24zZhNim25IgKNiq2qkgPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDZhdmG2KrYrtioINqp2LHYr9uBPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i2YXYqtmB2LHZgtin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i2KfZhiDYp9i32YTYp9i52KfYqiDaqduMINin24HZhduM2Kog2KLZviDZhdmC2LHYsSDaqdix2KrbkiDbgduM2rrblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i2KfYsyDZhduM2rog2YXZiNis2YjYryDZhNmI2q/ZiNq6INqp24wg2YjYrNuBINiz25Ig24zbgSDYp9uB2YUg24HbktuUIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCmluZGV4IGM0NzAxYjYuLmM0YmUwYjkgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCkBAIC00MCw3ICs0MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJkdXJhdGlvblNlY29uZHMiIG1zZ2lkPSI4MDUwMDg4NTA1MjM4MjQxNDA1Ij4iPHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUxJGQ8L3hsaWZmOmc+IHNvbml5YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uU2Vjb25kIiBtc2dpZD0iOTg1NjY5NjIyMjc2NDIwMzMxIj4iPHhsaWZmOmcgaWQ9IlNFQ09ORFMiPiUxJGQ8L3hsaWZmOmc+IHNvbml5YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVudGl0bGVkIiBtc2dpZD0iNDYzODk1Njk1NDg1Mjc4MjU3NiI+IiZsdDtOb21zaXomZ3Q7Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZW1wdHlQaG9uZU51bWJlciIgbXNnaWQ9Ijc2OTQwNjMwNDIwNzk2NzY1MTciPiIoVGVsZWZvbiByYXFhbWxhcmkgeW/igJhxKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5UGhvbmVOdW1iZXIiIG1zZ2lkPSI3Njk0MDYzMDQyMDc5Njc2NTE3Ij4iKFRlbGVmb24gcmFxYW1pIHlv4oCYcSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1bmtub3duTmFtZSIgbXNnaWQ9IjY4Njc4MTE3NjUzNzAzNTAyNjkiPiJOb21h4oCZbHVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdFZvaWNlTWFpbEFscGhhVGFnIiBtc2dpZD0iMjY2MDAyMDk5MDA5NzczMzA3NyI+Ik92b3psaSB4YWJhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRNc2lzZG5BbHBoYVRhZyIgbXNnaWQ9IjI4NTA4ODk3NTQ5MTk1ODQ2NzQiPiJNU0lTRE4xIjwvc3RyaW5nPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZWVyVHR5TW9kZUhjbyIgbXNnaWQ9IjU3Mjg2MDIxNjA2NjkyMTY3ODQiPiJUZW5nIGh1cXVxbGkgaXNodGlyb2tjaGkgdGVsZXRheXAgcmVqaW1pbmkgSENPIChlc2hpdGFkaSwgZ2FwaXJvbG1heWRpKSBxaWxpYiBv4oCYemdhcnRpcmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVlclR0eU1vZGVWY28iIG1zZ2lkPSIxNzQyNDA0OTc4Njg2NTM4MDQ5Ij4iVGVuZyBodXF1cWxpIGlzaHRpcm9rY2hpIHRlbGV0YXlwIHJlamltaW5pIFZDTyAoZ2FwaXJhZGksIGVzaGl0b2xtYXlkaSkgcWlsaWIgb+KAmHpnYXJ0aXJkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlZXJUdHlNb2RlT2ZmIiBtc2dpZD0iMzI4MDgxOTcxNzg1MDYwMjIwNSI+IlRlbmcgaHVxdXFsaSBpc2h0aXJva2NoaSB0ZWxldGF5cCByZWppbWluaSBPRkYgKG/igJhjaGlyaWxnYW4pIHFpbGliIG/igJh6Z2FydGlyZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NWb2ljZSIgbXNnaWQ9IjEyNTgzOTM4MTIzMzUyNTgwMTkiPiJPdm96Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzVm9pY2UiIG1zZ2lkPSIxMjU4MzkzODEyMzM1MjU4MDE5Ij4iT3ZvemxpIGFsb3FhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZUNsYXNzRGF0YSIgbXNnaWQ9Ijg3MjQ1Njc4MjA3NzkzNzg5MyI+Ik1h4oCZbHVtb3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZXJ2aWNlQ2xhc3NGQVgiIG1zZ2lkPSI1NTY2NjI0OTk4ODQwNDg2NDc1Ij4iRkFLUyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlcnZpY2VDbGFzc1NNUyIgbXNnaWQ9IjIwMTU0NjAzNzM3MDE1Mjc0ODkiPiJTTVMiPC9zdHJpbmc+CkBAIC0yMDYsMTQgKzIwNiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQwODQ3NzE0MDA4ODA1MzY2NSI+IlBsYW5zaGV0IHNvemxhbWFsYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNzI0MDM4NjQ2MjUwODE4Mjk3NiI+IlRWIHRhbmxhbWFsYXJpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnMiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIyNDA2NDE2ODMxNTQxNjE1MjU4Ij4iVGVsZWZvbiBzb3psYW1hbGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9jayIgbXNnaWQ9IjI4NDQ5NDUxOTE3OTIxMTk3MTIiPiJFa3Jhbm5pIHF1bGZsYXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrIiBtc2dpZD0iMjg0NDk0NTE5MTc5MjExOTcxMiI+IkVrcmFuIHF1bGZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9wb3dlcl9vZmYiIG1zZ2lkPSI0NDcxODc5NDQwODM5ODc5NzIyIj4iT+KAmGNoaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2J1Z19yZXBvcnQiIG1zZ2lkPSI3OTM0MDEwNTc4OTIyMzA0Nzk5Ij4iTm9zb3psaWsgaGFxaWRhIG1h4oCZbHVtb3QgYmVyaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiBtc2dpZD0iMjY2NzQ5NDgwMzc0MjU0ODUzMyI+IlhhdG9saWtsYXIgaGlzb2JvdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgbXNnaWQ9IjM5ODQ0NzA0ODc1MDM1MDQ1NiI+IlF1cmlsbWFuZ2l6IGhvbGF0aSBoYXFpZGFnaSBtYeKAmWx1bW90bGFyIHRv4oCYcGxhbmliLCBlLXBvY2h0YSBvcnFhbGkgeXVib3JpbGFkaS4gSGlzb2JvdG5pIHRheXlvcmxhc2ggYmlyb3ogdmFxdCBvbGlzaGkgbXVta2luLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+Ik92b3pzaXogdXN1bCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fdG9nZ2xlX3NpbGVudF9tb2RlIiBtc2dpZD0iODIxOTUyNTM0NDI0NjgxMDkyNSI+Ik92b3pzaXogcmVqaW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29uX3N0YXR1cyIgbXNnaWQ9IjMyODk4NDE5MzcwMDM3NTg4MDYiPiJUb3Z1c2ggb+KAmGNoaXJpbGdhbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fc2lsZW50X21vZGVfb2ZmX3N0YXR1cyIgbXNnaWQ9IjE1MDYwNDY1NzkxNzcwNjY0MTkiPiJUb3Z1c2ggeW9xaWxnYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX3NpbGVudF9tb2RlX29mZl9zdGF0dXMiIG1zZ2lkPSIxNTA2MDQ2NTc5MTc3MDY2NDE5Ij4iWU9OSVEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uc190b2dnbGVfYWlycGxhbmVfbW9kZSIgbXNnaWQ9IjU4ODQzMzAzMDY5MjYzMDc0NTYiPiJQYXJ2b3ogcmVqaW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vbl9zdGF0dXMiIG1zZ2lkPSIyNzE5NTU3OTgyNjA4OTE5NzUwIj4iUGFydm96IHVzdWxpIHlvcWlsZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbnNfYWlycGxhbmVfbW9kZV9vZmZfc3RhdHVzIiBtc2dpZD0iNTA3NTA3MDQ0Mjg1NDQ5MDI5NiI+IlBhcnZveiByZWppbWkgb+KAmGNoaXJpbGdhbiI8L3N0cmluZz4KQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJRdWxmbGFzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLb250ZW50IHlhc2hpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJYYXZmc2l6IHVzdWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJBbmRyb2lkIHRpemltaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZXJfb3duZXJfbGFiZWwiIG1zZ2lkPSIyODA0MzUxODk4MDAxMDM4OTUxIj4iU2hheHNpeSI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iQnVuZ2Ega3JlZGl0IGthcnRhIHJhcWFtbGFyaSB2YSBwYXJvbGxhciBrYWJpIHNoYXhzaXkgbWHigJlsdW1vdGxhciBraXJhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiJFa3Jhbm5pIGthdHRhbGFzaHRpcmlzaG5pIGJvc2hxYXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4iRWtyYW5uaSBrYXR0YWxhc2h0aXJpc2ggZGFyYWphc2kgdmEgam95bGFzaHV2aW5pIGJvc2hxYXJhZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iSW1vLWlzaG9yYWxhciBiaWxhbiBib3NocWFyaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJCb3Npc2gsIHN1cmlzaDsgamlwc2xhc2h0aXJpc2ggdmEgYm9zaHFhIGltby1pc2hvcmFsYXJuaSBhbWFsZ2Egb3NoaXJpc2ggbXVta2luLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImhvbGF0IHBhbmVsaW5pIG/igJh6Z2FydGlyaXNoIHlva2kgb+KAmGNoaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iSWxvdmEgaG9sYXQgcGFuZWxpbmkgb+KAmGNoaXJpYiBxb+KAmHlpc2hpIGhhbWRhIHRpemltIGlrb25rYWxhcmluaSBxb+KAmHNoaXNoaSB5b2tpIG9saWIgdGFzaGxhc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhclNlcnZpY2UiIG1zZ2lkPSI0ODI2ODM1NTA4MjI2MTM5Njg4Ij4iaG9sYXQgcWF0b3JpZGEga2/igJhyaW5pc2hpIjwvc3RyaW5nPgpAQCAtMzA3LDcgKzMxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNzM5MDMwNDY2NDExNjg4MDcwNCI+Iklsb3ZhIHRpemltIHFheXRhIHlvcWlsZ2FuaWRhbiBzb+KAmG5nIG/igJh6aW5pIGlzaGdhIHR1c2hpcmlzaGkgbXVta2luLiBCdSBwbGFuc2hldG5pbmcgeW9uaXNoIHZhcXRpbmkgdXpheXRpcmlzaGkgdmEgZG9pbWl5IGlzaGxhYiB0dXJpdmNoaSBpbG92YSB0dWZheWxpIHVuaW5nIHRlemtvciBpc2hsYXNoaW5pIGthbWF5dGlyaXNoaSBtdW1raW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfcmVjZWl2ZUJvb3RDb21wbGV0ZWQiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNDUyNTg5MDEyMjIwOTY3MzYyMSI+Iklsb3ZhZ2EgdGl6aW0gaXNoZ2EgdHVzaGlzaGkgYmlsYW5vcSBv4oCYemkgaGFtIGlzaGdhIHR1c2hhZGlnYW4gcWlsaWIgcW/igJh5aXNoIGh1cXVxaW5pIGJlcmFkaS4gQnVuaW5nIG5hdGlqYXNpZGEgdGVsZXZpem9ybmluZyBpc2hnYSB0dXNoaXNoaSBzZWtpbmxhc2hpc2hpIGhhbWRhIGlsb3ZhbmluZyBkb2ltaXkgcmF2aXNoZGEgaXNobGFiIHR1cmlzaGkgb3FpYmF0aWRhIGJ1dHVuIHBsYW5zaGV0bmluZyBpc2hsYXNoaSBzZWtpbmxhc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19yZWNlaXZlQm9vdENvbXBsZXRlZCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjUxMzk1MDU4OTEwMjYxNzUwNCI+Iklsb3ZhIHRpemltIHFheXRhIHlvcWlsZ2FuaWRhbiBzb+KAmG5nIG/igJh6aW5pIGlzaGdhIHR1c2hpcmlzaGkgbXVta2luLiBCdSB0ZWxlZm9ubmluZyB5b25pc2ggdmFxdGluaSB1emF5dGlyaXNoaSB2YSBkb2ltaXkgaXNobGFiIHR1cml2Y2hpIGlsb3ZhIHR1ZmF5bGkgdW5pbmcgdGV6a29yIGlzaGxhc2hpbmkga2FtYXl0aXJpc2hpIG11bWtpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJ5b3Bpc2hxb3EgcmFkaW91emF0aXNobGFybmkgam/igJhuYXRpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2Jyb2FkY2FzdFN0aWNreSIgbXNnaWQ9Ijc5MTkxMjYzNzI2MDY4ODE2MTQiPiJ4YWJhcmxhcm5pIGtleWluY2hhbGlrIHNhcWxhc2ggc2hhcnRpIGJpbGFuIHl1Ym9yaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI3NzQ5NzYwNDk0Mzk5OTE1NjUxIj4iSWxvdmFnYSB1emF0aXNoIHR1Z2FnYW5kYW4ga2V5aW4gaGFtIHFvbGFkaWdhbiB5b3Bpc2hxb3EgdXphdGlzaGxhcm5pIGpv4oCYbmF0aXNoZ2EgcnV4c2F0IGJlcmFkaS4gQnUgdXphdGlzaGRhbiBqdWRhIGtv4oCYcCBmb3lkYWxhbmlzaCBrb+KAmHAgeG90aXJhZGFuIGZveWRhbGFuaXNoZ2Egb2xpYiBrZWxhZGkgdmEgbmF0aWphZGEgcGxhbnNoZXQgc2VraW4geW9raSBiZXFhcm9yIGlzaGxhc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19icm9hZGNhc3RTdGlja3kiIHByb2R1Y3Q9InR2IiBtc2dpZD0iNjgzOTI4NTY5NzU2NTM4OTQ2NyI+Iklsb3ZhZ2EgZWZpciB0dWdhZ2FuZGFuIHNv4oCYbmcgaGFtIHNhcWxhbmliIHFvbGFkaWdhbiB0dXJn4oCYdW4gdHJhbnNsYXRzaXlhbGFybmkgdXphdGlzaCBodXF1cWluaSBiZXJhZGkuIFVuZGFuIG9ydGlxY2hhIGZveWRhbGFuaXNoIHRlbGV2aXpvcmluZ2l6bmkgc2VraW5sYXRpc2hpIHlva2kga2/igJhwIHhvdGlyYSBzYXJmbGF5ZGlnYW4gcWlsaWIgcW/igJh5aXNoaSBtdW1raW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfYnJvYWRjYXN0U3RpY2t5IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMjgyNTgwMzc2NDIzMjQ0NTA5MSI+Iklsb3ZhZ2EgdXphdGlzaCB0dWdhZ2FuZGFuIGtleWluIGhhbSBxb2xhZGlnYW4geW9waXNocW9xIHV6YXRpc2hsYXJuaSBqb+KAmG5hdGlzaGdhIHJ1eHNhdCBiZXJhZGkuIEJ1IHV6YXRpc2hkYW4ganVkYSBrb+KAmHAgZm95ZGFsYW5pc2gga2/igJhwIHhvdGlyYWRhbiBmb3lkYWxhbmlzaGdhIG9saWIga2VsYWRpIHZhIG5hdGlqYWRhIHRlbGVmb24gc2VraW4geW9raSBiZXFhcm9yIGlzaGxhc2hpIG11bWtpbi4iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiJJbG92YWdhIGthbWVyYWRhbiBmb3lkYWxhbmliIHJhc20gdmEgdmlkZW9nYSBvbGlzaGdhIHJ1eHNhdCBiZXJhZGkuIEJ1IHJ1eHNhdCBpbG92YWdhIHNpemRhbiB0YXNkaXFsYXNobmkgc2/igJhyYW1hc2RhbiBrYW1lcmFkYW4gZm95ZGFsYW5pc2hnYSBpbWtvbiBiZXJhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl92aWJyYXRlIiBtc2dpZD0iNzY5NjQyNzAyNjA1NzcwNTgzNCI+InRlYnJhbmlzaG5pIGJvc2hxYXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+Iklsb3ZhIHRlYnJhbmlzaGxpIHNpZ25hbGxhcm5pIGJvc2hxYXJpc2hpIG11bWtpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4iY2hpcm9xIGNoYXFuYXNoaW5pIGJvc2hxYXJpc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+Iklsb3ZhIGNoYXFub3FuaSBib3NocWFyaXNoaSBtdW1raW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiIG1zZ2lkPSIzOTI1ODM2MzQ3NjgxODQ3OTU0Ij4idGVsZWZvbiByYXFhbWxhcmlnYSB0b2figJhyaWRhbiB0b+KAmGfigJhyaSBxb+KAmG5n4oCYaXJvcSBxaWxpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4iSWxvdmFnYSBzaXpuaW5nIHlvcmRhbWluZ2l6c2l6IHRlbGVmb25nYSBxb+KAmG5n4oCYaXJvcSBxaWxpc2ggaW1rb25pbmkgYmVyYWRpLiBCdSBrdXRpbG1hZ2FuIHFv4oCYbmfigJhpcm9xbGFybmkgYW1hbGdhIG9zaGlyaXNoaSB5b2tpIG9ydGlxY2hhIHRv4oCYbG92bGFybmkgeXV6YWdhIGtlbHRpcmlzaGkgbXVta2luLiBTaHVuZ2EgZeKAmXRpYm9yIHFpbGlua2ksIHUgZmF2cXVsb2RkYSB0ZWxlZm9uIHJhcWFtbGFyaWdhIHFv4oCYbmfigJhpcm9xbGFyIHFpbGlzaGdhIHJ1eHNhdCBiZXJtYXlkaS4gWmFyYXJsaSBpbG92YWxhciBzaXpkYW4gc2/igJhyYW1hc2RhbiBxb+KAmG5n4oCYaXJvcWxhcm5pIGFtYWxnYSBvc2hpcmliLCBwdWxpbmdpem5pIHNhcmZsYXNoaSBtdW1raW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJJTVMgcW/igJhuZ+KAmGlyb3EgeGl6bWF0aWdhIGtpcmlzaCI8L3N0cmluZz4KQEAgLTM3NSw3ICszNzYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0V2FsbHBhcGVyIiBtc2dpZD0iNzM3MzQ0NzkyMDk3NzYyNDc0NSI+Iklsb3ZhIHRpemltIHVjaHVuIG9ycWEgZm9uIHJhc21sYXJpbmkgb+KAmHJuYXRpc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iMzI3ODYwODE2NTk3NzczNjUzOCI+ImZvbiByYXNtaSBv4oCYbGNoYW1pbmkgbW9zbGFzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFdhbGxwYXBlckhpbnRzIiBtc2dpZD0iODIzNTc4NDM4NDIyMzczMDA5MSI+Iklsb3ZhIHRpemltbmluZyBvcnFhIGZvbiByYXNtbGFyaSB1Y2h1biBv4oCYbGNoYW1sYXJpbmkga2/igJhyc2F0aXNoaSBtdW1raW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiJ2YXF0IGh1ZHVkaW5pIG/igJhybmF0aXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zZXRUaW1lWm9uZSIgbXNnaWQ9IjI5NDUwNzk4MDEwMTMwNzczNDAiPiJ2YXF0IG1pbnRhcWFzaW5pIHNvemxhc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zZXRUaW1lWm9uZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMTY3Njk4MzcxMjMxNTgyNzY0NSI+Iklsb2JhIHBsYW5zaGV0ZGFnaSB2YXF0IHpvbmFzaW5pIG/igJh6Z2FydGlyaXNoaSBtdW1raW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc2V0VGltZVpvbmUiIHByb2R1Y3Q9InR2IiBtc2dpZD0iODg4ODY0NjUzOTQ2MTc1OTU1Ij4iSWxvdmFnYSB0ZWxldml6b3JuaW5nIHZhcXQgem9uYXNpbmkgb+KAmHpnYXJ0aXJpc2ggaHVxdXFpbmkgYmVyYWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3NldFRpbWVab25lIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDQ5OTk0MzQ4ODQzNjYzMzM5OCI+Iklsb3ZhIHRlbGVmb25kYWdpIHZhcXQgem9uYXNpbmkgb+KAmHpnYXJ0aXJpc2hpIG11bWtpbi4iPC9zdHJpbmc+CkBAIC03MDIsNyArNzAzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2ZvcmdvdF9wYXR0ZXJuIiBtc2dpZD0iMjU4ODUyMTUwMTE2NjAzMjc0NyI+IlF1bGZuaSBvY2hpc2ggaGlzb2JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSIyNzUxMzY4NjA1Mjg3Mjg4ODA4Ij4iQ2hpem1hbGkgcGFyb2xuaSBvY2hpc2hnYSBqdWRhIGtv4oCYcCB1cmluaWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX2luc3RydWN0aW9ucyIgbXNnaWQ9IjM5MzE4MTYyNTYxMDA3MDc3ODQiPiJRdWxmbmkgb2NoaXNoIHVjaHVuIEdvb2dsZSBoaXNvYmluZ2l6IGJpbGFuIGtpcmluZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl91c2VybmFtZV9oaW50IiBtc2dpZD0iODg0Njg4MTQyNDEwNjQ4NDQ0NyI+IkZveWRhbGFudXZjaGkgKGUtcG9jaHRhKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxvY2tzY3JlZW5fZ2xvZ2luX3VzZXJuYW1lX2hpbnQiIG1zZ2lkPSI4ODQ2ODgxNDI0MTA2NDg0NDQ3Ij4iRm95ZGFsYW51dmNoaSBub21pIChlLXBvY2h0YSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9wYXNzd29yZF9oaW50IiBtc2dpZD0iNTk1ODAyODM4Mzk1NDczODUyOCI+IlBhcm9sIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9ja3NjcmVlbl9nbG9naW5fc3VibWl0X2J1dHRvbiIgbXNnaWQ9IjcxMzA4OTM2OTQ3OTU3ODYzMDAiPiJLaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2Nrc2NyZWVuX2dsb2dpbl9pbnZhbGlkX2lucHV0IiBtc2dpZD0iMTM2NDA1MTQ3MzM0NzQ4NTkwOCI+IkZveWRhbGFudXZjaGkgbm9taSB5b2tpIHBhcm9saSBub+KAmHRv4oCYZ+KAmHJpLiI8L3N0cmluZz4KQEAgLTg1NywxMSArODU4LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RBbGwiIG1zZ2lkPSI2ODc2NTE4OTI1ODQ0MTI5MzMxIj4iQmFyY2hhc2luaSB0YW5sYXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+Iktlc2lzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iTnVzeGEgb2xpc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJRb+KAmHlpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJKb3lsYXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiJPZGRpeSBtYXRuIHNpZmF0aWRhIGpveWxhc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkFsbWFzaHRpcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJP4oCYY2hpcmlzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4iVVJM4oCZZGFuIG51c3hhIG9saXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iTWF0bm5pIHRhbmxhc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IkJla29yIHFpbGlzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4iUWF5dGFyaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Ik1hdG5pIGJlbGdpbGFzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiJMdWfigJhhdGdhIHFv4oCYc2hpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+Ik/igJhjaGlyaXNoIjwvc3RyaW5nPgpAQCAtOTM3LDExICs5NDEsMTEgQEAKICAgICA8c3RyaW5nIG5hbWU9ImR1bXBfaGVhcF90aXRsZSIgbXNnaWQ9IjU4NjQyOTIyNjQzMDc2NTE2NzMiPiJIaXAtZGFtcCBtYeKAmWx1bW90bGFyaSBiaWxhbiB1bGFzaGFzaXptaT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkdW1wX2hlYXBfdGV4dCIgbXNnaWQ9IjQ4MDk0MTczMzcyNDAzMzQ5NDEiPiI8eGxpZmY6ZyBpZD0iUFJPQyI+JTEkczwveGxpZmY6Zz4gamFyYXlvbmkgb+KAmHppIHVjaHVuIGFqcmF0aWxnYW4gPHhsaWZmOmcgaWQ9IlNJWkUiPiUyJHM8L3hsaWZmOmc+IHhvdGlyYSBjaGVnYXJhc2lkYW4gb+KAmHRpYiBrZXRkaS4gSWxvdmEgZGFzdHVyY2hpc2kgYmlsYW4gdWxhc2hpc2hpbmdpeiB1Y2h1biBoaXAtZGFtcCBtYeKAmWx1bW90bGFyaSB5aWfigJhpbGliIHFvbGRpLiBFaHRpeW90IGJvXCdsaW5nOiB1c2hidSBoaXAtZGFtcGRhIGlsb3ZhIHVjaHVuIGZveWRhbGFuaXNoZ2EgcnV4c2F0IGJlcmlsZ2FuIHNoYXhzaXkgbWHigJlsdW1vdGxhcmluZ2l6IGJv4oCYbGlzaGkgbXVta2luLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbmRUZXh0IiBtc2dpZD0iNTIwOTg3NDU3MTk1OTQ2OTE0MiI+Ik1hdG4gdWNodW4gYW1hbG5pIHRhbmxhc2giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfcmluZ3RvbmUiIG1zZ2lkPSI2ODg1NDIxNDA2ODQ1NzM0NjUwIj4iUW/igJhuZ+KAmGlyb3EgdG92dXNoaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9yaW5ndG9uZSIgbXNnaWQ9IjY4ODU0MjE0MDY4NDU3MzQ2NTAiPiJKaXJpbmdsYWdhbmRhIG92b3ogYmFsYW5kbGlnaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZV9tdXNpYyIgbXNnaWQ9IjU0MjE2NTExNTcxMzg2MjgxNzEiPiJNdWx0aW1lZGlhIG92b3ppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfcGxheWluZ190aHJvdWdoX2JsdWV0b290aCIgbXNnaWQ9IjkxNjU5ODQzNzkzOTQ2MDE1MzMiPiJCbHVldG9vdGggb3JxYWxpIGlqcm8gZXRpbG1vcWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX211c2ljX2hpbnRfc2lsZW50X3Jpbmd0b25lX3NlbGVjdGVkIiBtc2dpZD0iODMxMDczOTk2MDk3MzE1NjI3MiI+Ik92b3pzaXogcmVqaW0gdGFubGFuZGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfY2FsbCIgbXNnaWQ9IjM5NDE2ODAwNDEyODI3ODg3MTEiPiJLaXJ1dmNoaSBxb+KAmG5n4oCYaXJvcSBiYWxhbmRsaWdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX2NhbGwiIG1zZ2lkPSIzOTQxNjgwMDQxMjgyNzg4NzExIj4iU3VoYmF0IHZhcXRpZGFnaSBvdm96IGJhbGFuZGxpZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYmx1ZXRvb3RoX2NhbGwiIG1zZ2lkPSIyMDAyODkxOTI2MzUxMTUxNTM0Ij4iS2lydXZjaGkgYmx1ZXRvb3RoIHRvdnVzaGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfYWxhcm0iIG1zZ2lkPSIxOTg1MTkxNjE2MDQyNjg5MTAwIj4iU2lnbmFsIG92b3ppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1lX25vdGlmaWNhdGlvbiIgbXNnaWQ9IjI0MjIyNjU2NTY3NDQyNzY3MTUiPiJFc2xhdG1hIHRvdnVzaGkiPC9zdHJpbmc+CkBAIC05OTIsNyArOTk2LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9IndpZmlfcDJwX2ZyZXF1ZW5jeV9jb25mbGljdF9tZXNzYWdlIiBwcm9kdWN0PSJ0diIgbXNnaWQ9IjMwODc4NTgyMzUwNjk0MjExMjgiPiJUZWxldml6b3IgPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBxdXJpbG1hc2lnYSB1bGFuZ2FuIHZhcXRkYSBXaS1GaSB0YXJtb2figJhpZGFuIHZhcXRpbmNoYWxpayB1emlsYWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0id2lmaV9wMnBfZnJlcXVlbmN5X2NvbmZsaWN0X21lc3NhZ2UiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MzYzOTA3MjEzNzg3NDY5MTUxIj4iVGVsZWZvbiA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+Z2EgdWxhbmdhbmxpZ2kgdHVmYXlsaSB2YXF0aW5jaGEgV2ktRmkgdGFybW9n4oCYaWRhbiB1emlsZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2NoYXJhY3RlciIgbXNnaWQ9IjMzNjU1NTAxMjA2MTc3MDE3NDUiPiJCZWxnaWxhcm5pIGtpcml0aW5nIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfdGl0bGUiIG1zZ2lkPSI3Mjk2NjEyNzgxMTI4OTE3NzE5Ij4iU01TIHhhYmFybGFyIGpv4oCYbmF0aWxtb3FkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNtc19jb250cm9sX3RpdGxlIiBtc2dpZD0iNzI5NjYxMjc4MTEyODkxNzcxOSI+IlNNUyB4YWJhcmxhciB5dWJvcmlsbW9xZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9tZXNzYWdlIiBtc2dpZD0iMzg2Nzg5OTE2OTY1MTQ5NjQzMyI+IiZsdDtiJmd0Ozx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4mbHQ7L2ImZ3Q7IGthdHRhIG1pcWRvcmRhZ2kgU01TIHhhYmFybGFyaW5pIGpv4oCYbmF0bW9xZGEuIFVzaGJ1IGlsb3ZhZ2EgeGFiYXJsYXIgam/igJhuYXRpc2huaSBkYXZvbSBldHRpcmlzaGdhIHJ1eHNhdCBiZXJhc2l6bWk/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic21zX2NvbnRyb2xfeWVzIiBtc2dpZD0iMzY2MzcyNTk5Mzg1NTgxNjgwNyI+IlJ1eHNhdCBiZXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzbXNfY29udHJvbF9ubyIgbXNnaWQ9IjYyNTQzODU2MTM5NTUzNDk4MiI+IlJhZCBxaWxpc2giPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iRm9uIHJhc21pbmkgb+KAmHpnYXJ0aXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJCaWxkaXJpc2hub21hIHRpbmdsb3ZjaGlzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iU2hhcnRsYXJuaSB0YXFkaW0gZXR1dmNoaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IkJpbGRpcmlzaG5vbWEgeW9yZGFtY2hpc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiBmYW9sbGFzaHRpcmlsZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHRvbW9uaWRhbiBmYW9sbGFzaHRpcmlsZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVGFybW9xbmkgYm9zaHFhcmlzaCB1Y2h1biBib3NpbmcuIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IkFkbWluaXN0cmF0b3JpbmdpeiB0b21vbmlkYW4geWFuZ2lsYW5kaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iQWRtaW5pc3RyYXRvcmluZ2l6IHRvbW9uaWRhbiBv4oCYY2hpcmlsZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiJCYXRhcmV5YSBxdXZ2YXRpbmkgdXpvcXJvcSB2YXF0Z2EgeWV0a2F6aXNoIHVjaHVuIHF1dnZhdCB0ZWphc2ggZnVua3NpeWFzaSBxdXJpbG1hbmdpeiB1bnVtZG9ybGlnaW5pIGthbWF5dGlyYWRpIGhhbWRhIHVuaW5nIHRlYnJhbmlzaGkgdmEgb3JxYSBmb25kYSBpbnRlcm5ldGRhbiBmb3lkYWxhbmlzaGluaSBjaGVrbGF5ZGkuIFNpbnhyb25sYW5pc2huaSB0YWxhYiBxaWxhZGlnYW4gZS1wb2NodGEsIHhhYmFyIGFsbWFzaGludXYgdmEgYm9zaHFhIGlsb3ZhbGFyIGVzYSBxYWNob25raSB1bGFybmkgaXNoZ2EgdHVzaGlyZ2FuaW5naXpkYSB5YW5naWxhbmFkaS5cblxuUXVyaWxtYSBxdXZ2YXQgb2xheW90Z2FuZGEgcXV2dmF0IHRlamFzaCBmdW5rc2l5YXNpIGF2dG9tYXRpayB0YXJ6ZGEgb+KAmGNoYWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iQmxva2xhbmdhbjogYmlsZGlyaXNobm9tYWxhciBoZWNoIHFhY2hvbiBrb+KAmHJzYXRpbG1hc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IlBhc3Q6IGJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgcGFzdGlkYSBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiJPZGRpeTogYmlsZGlyaXNobm9tYWxhciBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiJZdXFvcmk6IGJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgeXVxb3Jpc2lkYSBvdm96IGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+IlNob3NoaWxpbmNoOiBiYXJjaGEgb3luYWxhciB1c3RpZGEgc2lnbmFsIG92b3ppIGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj4lMSRkIGRhcWlxYSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4gZ2FjaGEpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QmlyIGRhcWlxYSAoPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4gZ2FjaGEpPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiB0YSB0YW5sYW5kaTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X25vdGlmaWNhdGlvbl90b3BpY19sYWJlbCIgbXNnaWQ9IjIyNzU4NjE0NTc5MTg3MDgyOSI+IkJvc2hxYSBiZWxnaWxhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJTaXogdXNoYnUgYmlsZGlyaXNobm9tYWxhcm5pbmcgbXVoaW1saWdpbmkgYmVsZ2lsYWdhbnNpei4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IkJ1IG9kYW1sYXIgc2l6IHVjaHVuIG11aGltLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggMzM2ZjEwYS4uNjliMGI5OSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4iS2jDs2EgbmdheSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJO4buZaSBkdW5nIGLhu4sg4bqpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IkNo4bq/IMSR4buZIGFuIHRvw6BuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iSOG7hyB0aOG7kW5nIEFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IkPDoSBuaMOibiI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4iQmFvIGfhu5NtIGThu68gbGnhu4d1IGPDoSBuaMOibiBjaOG6s25nIGjhuqFuIG5oxrAgc+G7kSB0aOG6uyB0w61uIGThu6VuZyB2w6AgbeG6rXQga2jhuql1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4iS2nhu4NtIHNvw6F0IHRodSBwaMOzbmcgbcOgbiBow6xuaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJLaeG7g20gc2/DoXQgduG7iyB0csOtIHbDoCBt4bupYyB0aHUgcGjDs25nIGPhu6dhIG3DoG4gaMOsbmguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iVGjhu7FjIGhp4buHbiBj4butIGNo4buJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJDw7MgdGjhu4MgbmjhuqVuLCB2deG7kXQsIGNo4bulbSB2w6AgdGjhu7FjIGhp4buHbiBjw6FjIGPhu60gY2jhu4kga2jDoWMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4idsO0IGhp4buHdSBow7NhIGhv4bq3YyBz4butYSDEkeG7lWkgdGhhbmggdHLhuqFuZyB0aMOhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3N0YXR1c0JhciIgbXNnaWQ9Ijg0MzQ2Njk1NDk1MDQyOTA5NzUiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIHbDtCBoaeG7h3UgaMOzYSB0aGFuaCB0cuG6oW5nIHRow6FpIGhv4bq3YyB0aMOqbSB2w6AgeMOzYSBiaeG7g3UgdMaw4bujbmcgaOG7hyB0aOG7kW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiJ0cuG7nyB0aMOgbmggdGhhbmggdHLhuqFuZyB0aMOhaSI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgY2jhu6VwIOG6o25oIHbDoCBxdWF5IHZpZGVvIGLhurFuZyBtw6F5IOG6o25oLiBRdXnhu4FuIG7DoHkgY2hvIHBow6lwIOG7qW5nIGThu6VuZyBz4butIGThu6VuZyBtw6F5IOG6o25oIGLhuqV0IGvhu7MgbMO6YyBuw6BvIG3DoCBraMO0bmcgY+G6p24gc+G7sSB4w6FjIG5o4bqtbiBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ia2nhu4NtIHNvw6F0IHJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcga2nhu4NtIHNvw6F0IGLhu5kgcnVuZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4ia2nhu4NtIHNvw6F0IMSRw6huIG5ow6F5Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiJDaG8gcGjDqXAg4bupbmcgZOG7pW5nIGtp4buDbSBzb8OhdCDEkcOobiBuaMOheS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiJn4buNaSB0cuG7sWMgdGnhur9wIHPhu5EgxJFp4buHbiB0aG/huqFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIiBtc2dpZD0iMzc0MDc5NzU3NjExMzc2MDgyNyI+IkNobyBwaMOpcCDhu6luZyBk4bulbmcgZ+G7jWkgY8OhYyBz4buRIMSRaeG7h24gdGhv4bqhaSBtw6Aga2jDtG5nIGPhuqduIHPhu7EgY2FuIHRoaeG7h3AgY+G7p2EgYuG6oW4uIFZp4buHYyBuw6B5IGPDsyB0aOG7gyBk4bqrbiDEkeG6v24gY8OhYyBraG/huqNuIHBow60gaG/hurdjIGN14buZYyBn4buNaSBraMO0bmcgbW9uZyBtdeG7kW4uIEzGsHUgw70gcuG6sW5nIHF1eeG7gW4gbsOgeSBraMO0bmcgY2hvIHBow6lwIOG7qW5nIGThu6VuZyBn4buNaSBjw6FjIHPhu5Ega2jhuqluIGPhuqVwLiBDw6FjIOG7qW5nIGThu6VuZyDEkeG7mWMgaOG6oWkgY8OzIHRo4buDIGtoaeG6v24gYuG6oW4gdOG7kW4gdGnhu4FuIGRvIHRo4buxYyBoaeG7h24gY3Xhu5ljIGfhu41pIG3DoCBraMO0bmcgY+G6p24gc+G7sSB4w6FjIG5o4bqtbiBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+InRydXkgY+G6rXAgZOG7i2NoIHbhu6UgZ+G7jWkgxJFp4buHbiBxdWEgSU1TIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiJD4bqvdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4iU2FvIGNow6lwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4iRMOhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iRMOhbiBkxrDhu5tpIGThuqFuZyB2xINuIGLhuqNuIHRodeG6p24gdMO6eSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4iVGhheSB0aOG6vy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiJYw7NhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiJTYW8gY2jDqXAgVVJMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4iQ2jhu41uIHbEg24gYuG6o24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+Ikhvw6BuIHTDoWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IkzDoG0gbOG6oWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4iTOG7sWEgY2jhu41uIHbEg24gYuG6o24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iVGjDqm0gdsOgbyB04burIMSRaeG7g24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IljDs2EiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4iVGhheSDEkeG7lWkgaMOsbmggbuG7gW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJUcsOsbmggeOG7rSBsw70gdGjDtG5nIGLDoW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IlRyw6xuaCBjdW5nIGPhuqVwIMSRaeG7gXUga2nhu4duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4iVHLhu6MgbMO9IHRow7RuZyBiw6FvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLEkMOjIGvDrWNoIGhv4bqhdCBWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiJWUE4gxJHGsOG7o2MgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGvDrWNoIGhv4bqhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+IkNo4bqhbSDEkeG7gyBxdeG6o24gbMO9IG3huqFuZy4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4ixJDGsOG7o2MgY+G6rXAgbmjhuq10IGLhu59pIHF14bqjbiB0cuG7iyB2acOqbiBj4bunYSBi4bqhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4ixJDDoyBi4buLIHjDs2EgYuG7n2kgcXXhuqNuIHRy4buLIHZpw6puIGPhu6dhIGLhuqFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLEkOG7gyBnacO6cCB0xINuZyB0deG7lWkgdGjhu40gcGluLCB0csOsbmggdGnhur90IGtp4buHbSBwaW4gc+G6vSBnaeG6o20gaGnhu4d1IHN14bqldCB0aGnhur90IGLhu4sgY+G7p2EgYuG6oW4gdsOgIGjhuqFuIGNo4bq/IHJ1bmcsIGThu4tjaCB24bulIHbhu4sgdHLDrSB2w6AgaOG6p3UgaOG6v3QgZOG7ryBsaeG7h3UgbuG7gW4uIEVtYWlsLCBuaOG6r24gdGluIHbDoCBjw6FjIOG7qW5nIGThu6VuZyBraMOhYyBk4buxYSB0csOqbiDEkeG7k25nIGLhu5kgaMOzYSBjw7MgdGjhu4Mga2jDtG5nIGPhuq1wIG5o4bqtdCBu4bq/dSBi4bqhbiBraMO0bmcgbeG7nyBjaMO6bmcuXG5cblRyw6xuaCB0aeG6v3Qga2nhu4dtIHBpbiB04buxIMSR4buZbmcgdOG6r3Qga2hpIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbiDEkWFuZyBz4bqhYy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IsSQw6MgY2jhurduOiBLaMO0bmcgYmFvIGdp4budIGhp4buDbiB0aOG7iyBjw6FjIHRow7RuZyBiw6FvIG7DoHkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4iVGjhuqVwOiBIaeG7g24gdGjhu4sgaW0gbOG6t25nIOG7nyBjdeG7kWkgZGFuaCBzw6FjaCB0aMO0bmcgYsOhbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iQsOsbmggdGjGsOG7nW5nOiBIaeG7g24gdGjhu4sgaW0gbOG6t25nIGPDoWMgdGjDtG5nIGLDoW8gbsOgeSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4iQ2FvOiBIaeG7g24gdGjhu4sg4bufIMSR4bqndSBkYW5oIHPDoWNoIHRow7RuZyBiw6FvIHbDoCBwaMOhdCByYSDDom0gdGhhbmgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iS2jhuqluIGPhuqVwOiBIaeG7g24gdGjhu4sgdHLDqm4gbcOgbiBow6xuaCB2w6AgcGjDoXQgcmEgw6JtIHRoYW5oIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Ucm9uZyAlMSRkIHBow7p0IChjaG8gxJHhur9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRyb25nIG3hu5l0IHBow7p0IChjaG8gxJHhur9uIDx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzAiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KQEAgLTE1MTAsNCArMTUxMCw2IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7EkMOjIGNo4buNbiA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiJLaMOhYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJC4bqhbiDEkeG6t3QgdOG6p20gcXVhbiB0cuG7jW5nIGPhu6dhIGPDoWMgdGjDtG5nIGLDoW8gbsOgeS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIiBtc2dpZD0iOTE2MDEzMzU5NzI2MjkzODI5NiI+IlRow7RuZyBiw6FvIG7DoHkgcXVhbiB0cuG7jW5nIHbDrCBuaOG7r25nIG5nxrDhu51pIGPDsyBsacOqbiBxdWFuLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCBkNTRlYjFlLi40YzdiZmQzIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMjIzLDYgKzIyMyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJnbG9iYWxfYWN0aW9uX2xvY2tkb3duIiBtc2dpZD0iODc1MTU0MjUxNDcyNDMzMjg3MyI+Iueri+WNs+mUgeWumiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4i77yIPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4g5p2h77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuWGheWuueW3sumakOiXjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuWuieWFqOaooeW8jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg57O757ufIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLkuKrkuroiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuWMheWQq+S4quS6uuaVsOaNru+8jOS+i+WmguS/oeeUqOWNoeWPt+WSjOWvhueggeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i5o6n5Yi25pi+56S65YaF5a655pS+5aSn5Yqf6IO9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuaOp+WItuaYvuekuuWGheWuueeahOe8qeaUvue6p+WIq+WSjOS9jee9ruOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuaJp+ihjOaJi+WKvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i5Y+v5omn6KGM54K55oyJ44CB5ruR5Yqo44CB5Y+M5oyH5byg5ZCI562J5omL5Yq/44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i5YGc55So5oiW5L+u5pS554q25oCB5qCPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuWFgeiuuOW6lOeUqOWBnOeUqOeKtuaAgeagj+aIluiAheWinuWIoOezu+e7n+Wbvuagh+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLnlKjkvZznirbmgIHmoI8iPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLlhYHorrjor6XlupTnlKjkvb/nlKjnm7jmnLrmi43mkYTnhafniYflkozop4bpopHjgILmraTmnYPpmZDlj6/orqnor6XlupTnlKjpmo/ml7bkvb/nlKjnm7jmnLrvvIzogIzml6DpnIDmgqjnmoTnoa7orqTjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i5o6n5Yi25oyv5YqoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLlhYHorrjlupTnlKjmjqfliLbmjK/liqjlmajjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i5o6n5Yi26Zeq5YWJ54GvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLlhYHorrjlupTnlKjmjqfliLbpl6rlhYnnga/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLnm7TmjqXmi6jmiZPnlLXor53lj7fnoIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i5YWB6K646K+l5bqU55So5Zyo5oKo5pyq5omn6KGM5pON5L2c55qE5oOF5Ya15LiL5ouo5omT55S16K+d5Y+356CB44CC5q2k5p2D6ZmQ5Y+v6IO95Lya5a+86Ie05oSP5aSW5pS26LS55oiW5ZG85Y+r44CC6K+35rOo5oSP77yM5q2k5p2D6ZmQ5LiN5YWB6K646K+l5bqU55So5ouo5omT57Sn5oCl55S16K+d5Y+356CB44CC5oG25oSP5bqU55So5Y+v6YCa6L+H5ouo5omT55S16K+d5Lqn55Sf55u45YWz6LS555So77yM6ICM5peg6ZyA5oKo55qE56Gu6K6k44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLkvb/nlKjljbPml7bpgJrorq/pgJror53mnI3liqEiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+IuWJquWIhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHkiIG1zZ2lkPSIyNjgxOTQ2MjI5NTMzNTExOTg3Ij4i5aSN5Yi2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFzdGUiIG1zZ2lkPSI1NjI5ODgwODM2ODA1MDM2NDMzIj4i57KY6LS0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icGFzdGVfYXNfcGxhaW5fdGV4dCIgbXNnaWQ9IjU0Mjc3OTI3NDE5MDgwMTA2NzUiPiLku6Xnuq/mlofmnKzlvaLlvI/nspjotLQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+Iuabv+aNoi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZSIgbXNnaWQ9IjYwOTg2ODQ4NDQwMjE2OTc3ODkiPiLliKDpmaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IuWkjeWItue9keWdgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNlbGVjdFRleHRNb2RlIiBtc2dpZD0iMTAxODY5MTgxNTE0MzE2NTMyNiI+IumAieaLqeaWh+WtlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4i5pKk5raIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVkbyIgbXNnaWQ9Ijc3NTk0NjQ4NzY1NjY4MDM4ODgiPiLph43lgZoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0ZXh0U2VsZWN0aW9uQ0FCVGl0bGUiIG1zZ2lkPSI1MjM2ODUwMzk0MzcwODIwMzU3Ij4i5paH5a2X6YCJ5oupIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWRkVG9EaWN0aW9uYXJ5IiBtc2dpZD0iNDM1MjE2MTUzNDUxMDA1Nzg3NCI+Iua3u+WKoOWIsOWtl+WFuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4i5Yig6ZmkIjwvc3RyaW5nPgpAQCAtMTEwNyw2ICsxMTExLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNob29zZXJfd2FsbHBhcGVyIiBtc2dpZD0iNzg3MzQ3NjE5OTI5NTE5MDI3OSI+IuabtOaUueWjgee6uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMjAxNDE2MjgzNTQ4MTkwNjQyOSI+IumAmuefpeS+puWQrOWZqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4i5p2h5Lu25o+Q5L6b56iL5bqPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2Fzc2lzdGFudF9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iOTA5NDU2MDU1NTY5MTAyOTUyIj4i6YCa55+l5Yqp5omLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RpdGxlIiBtc2dpZD0iMTk2MTUyMTM1NTIwNDI4MjciPiLlt7Lmv4DmtLtWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7lt7Lmv4DmtLtWUE4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGV4dCIgbXNnaWQ9IjMwMTEzMDY2MDcxMjY0NTAzMjIiPiLop6bmkbjlj6/nrqHnkIbnvZHnu5zjgIIiPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4i55Sx5oKo5Y2V5L2N55qE566h55CG5ZGY5pu05pawIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV9kZWxldGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijc2NTA1NzczODc0OTMxMDEzNTMiPiLlt7LooqvnrqHnkIblkZjliKDpmaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IuS4uuS6huW7tumVv+eUteaxoOeahOe7reiIquaXtumXtO+8jOiKgueUteWKqeaJi+S8mumZjeS9juiuvuWkh+eahOaAp+iDve+8jOW5tumZkOWItuaMr+WKqOOAgeS9jee9ruS/oeaBr+acjeWKoeWSjOWkp+mDqOWIhuWQjuWPsOa1gemHj+OAguWvueS6jueUteWtkOmCruS7tuOAgeiBiuWkqeW3peWFt+etieS+nei1luS6juWQjOatpeWKn+iDveeahOW6lOeUqO+8jOWPr+iDveimgeaJk+W8gOi/meexu+W6lOeUqOaXtuaJjeiDveaUtuWIsOaWsOS/oeaBr+OAglxuXG7oioLnlLXliqnmiYvkvJrlnKjorr7lpIflhYXnlLXml7boh6rliqjlhbPpl63jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iNzExODgyNjkwMDc2NzA0NzEyNSI+IuWxj+iUve+8muS4gOW+i+S4jeaYvuekuui/meS6m+mAmuefpSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiLkvY7vvJrlnKjpgJrnn6XliJfooajlupXpg6jmmL7npLrvvIzkuI3lj5Hlh7rmj5DnpLrpn7MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNzk5MTE1NzY5NzYwOTU3NTI3MSI+IuS4gOiIrO+8muaYvuekuui/meS6m+mAmuefpe+8jOS9huS4jeWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMTUyMjM4NjM3NzM3MjE1NjU0Ij4i6auY77ya5Zyo6YCa55+l5YiX6KGo6aG26YOo5pi+56S677yM5bm25Y+R5Ye65o+Q56S66Z+zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iMTE1MzY5MzA4MDQ2NzkwNDQ3NCI+Iue0p+aApe+8muWcqOWxj+W5leS4iuaMgee7reaYvuekuu+8jOW5tuWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JTEkZCDliIbpkp/vvIjliLA8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8xIj4lMiRzPC94bGlmZjpnPu+8iTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjEg5YiG6ZKf77yI5YiwPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz7vvIk8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5bey6YCJ5oupIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDpobk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLlhbbku5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i6L+Z5Lqb6YCa55+l55qE6YeN6KaB5oCn55Sx5oKo5p2l6K6+572u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLov5nmnaHpgJrnn6Xmtonlj4rnibnlrprnmoTkurrvvIzlm6DmraTooqvlvZLkuLrph43opoHpgJrnn6XjgIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKaW5kZXggYTU4M2UzNy4uZDZjYWNiNyAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiLnq4vljbPpjpblrpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbmZvX292ZXJmbG93IiBtc2dpZD0iNTMwMTk4MTc0MTcwNTM1NDk5MyI+Ijk5OSsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiBtc2dpZD0iMTc2OTQyNTQ3MzE2ODM0NzgzOSI+Iig8eGxpZmY6ZyBpZD0iTk9USUZJQ0FUSU9OQ09VTlQiPiVkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i5YWn5a655bey6Zqx6JePIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiIG1zZ2lkPSIyNzg4MjI4MDYxNTQ3OTMwMjQ2Ij4i5a6J5YWo5qih5byPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYW5kcm9pZF9zeXN0ZW1fbGFiZWwiIG1zZ2lkPSI2NTc3Mzc1MzM1NzI4NTUxMzM2Ij4iQW5kcm9pZCDns7vntbEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+IuWAi+S6uiI8L3N0cmluZz4KQEAgLTI1NSw2ICsyNTYsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblJlcXVlc3RGaWx0ZXJLZXlFdmVudHMiIG1zZ2lkPSI3NDYzMTM1MjkyMjA0MTUyODE4Ij4i5YyF5ous5YCL5Lq66LOH5paZ77yM5aaC5L+h55So5Y2h6Jmf56K85ZKM5a+G56K844CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjM1OTM0OTMyODEwNTk0MjQ4NTUiPiLmjqfliLbpoa/npLrlsY/nmoTmlL7lpKflip/og70iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSI0NzkxODU4MjAzNTY4MzgzNzczIj4i5o6n5Yi26aGv56S65bGP55qE57iu5pS+56iL5bqm5ZKM5L2N572u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4i5Z+36KGM5omL5YuiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiLlj6/ku6XovJXmjInjgIHlv6vpgJ/mu5Hli5XlkozlhanmjIfnuK7mlL7vvIzkuKbln7fooYzlhbbku5bmiYvli6LjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3N0YXR1c0JhciIgbXNnaWQ9Ijc0MTcxOTI2Mjk2MDE4OTA3OTEiPiLlgZznlKjmiJbkv67mlLnni4DmhYvliJciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4i5YWB6Kix5oeJ55So56iL5byP5YGc55So54uA5oWL5YiX77yM5Lim5Y+v5paw5aKe5oiW56e76Zmk57O757Wx5ZyW56S644CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+IuaIkOeCuueLgOaFi+WIlyI8L3N0cmluZz4KQEAgLTM1Myw4ICszNTYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FtZXJhIiBtc2dpZD0iODQ5NzIxNjUyNDczNTUzNTAwOSI+IuWFgeioseaHieeUqOeoi+W8j+S9v+eUqOebuOapn+aLjeeFp+WSjOmMhOW9seOAgumAmemgheasiumZkOWFgeioseaHieeUqOeoi+W8j+maqOaZguS9v+eUqOebuOapn++8jOiAjOS4jemcgOe2k+aCqOeiuuiqjeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfdmlicmF0ZSIgbXNnaWQ9Ijc2OTY0MjcwMjYwNTc3MDU4MzQiPiLmjqfliLbpnIfli5UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY192aWJyYXRlIiBtc2dpZD0iNjI4NDk4OTI0NTkwMjMwMDk0NSI+IuWFgeioseaHieeUqOeoi+W8j+aOp+WItumch+WLleOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfZmxhc2hsaWdodCIgbXNnaWQ9IjIxNTU5MjA4MTAxMjE5ODQyMTUiPiLmjqfliLbploPlhYnnh4giPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19mbGFzaGxpZ2h0IiBtc2dpZD0iNjUyMjI4NDc5NDU2ODM2ODMxMCI+IuWFgeioseaHieeUqOeoi+W8j+aOp+WItumWg+WFieeHiOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+IuebtOaOpeaSpeaJk+mbu+ipseiZn+eivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiLlhYHoqLHmh4nnlKjnqIvlvI/nuZ7pgY7mgqjoh6rooYzmkqXmiZPpm7voqbHomZ/norzvvIzkvYblj6/og73mnIPnlKLnlJ/mnKrpoJDmnJ/nmoTosrvnlKjmiJbmkqXmiZPmnKrpoJDmnJ/nmoTpm7voqbHjgILms6jmhI/vvJrpgJnpoIXmrIrpmZDkuI3lhYHoqLHmh4nnlKjnqIvlvI/mkqXmiZPnt4rmgKXpm7voqbHjgILmg6HmhI/mh4nnlKjnqIvlvI/lj6/og73mnKrntpPmgqjnorroqo3mk4Xoh6rmkqXmiZPpm7voqbHvvIzlop7liqDmgqjnmoTmlK/lh7rjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2FjY2Vzc0ltc0NhbGxTZXJ2aWNlIiBtc2dpZD0iMzU3NDk0Mzg0NzE4MTc5MzkxOCI+IuS9v+eUqCBJTVMg6YCa6Kmx5pyN5YuZIjwvc3RyaW5nPgpAQCAtODU4LDEwICs4NTksMTMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImN1dCIgbXNnaWQ9IjMwOTI1Njk0MDg0Mzg2MjYyNjEiPiLliarkuIsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+Iuikh+ijvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIiBtc2dpZD0iNTYyOTg4MDgzNjgwNTAzNjQzMyI+IuiyvOS4iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4i5Lul57SU5paH5a2X5qC85byP6LK85LiKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSIgbXNnaWQ9IjU3ODE2ODYwNTkwNjMxNDg5MzAiPiLlj5bku6MuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGUiIG1zZ2lkPSI2MDk4Njg0ODQ0MDIxNjk3Nzg5Ij4i5Yiq6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weVVybCIgbXNnaWQ9IjI1MzgyMTE1Nzk1OTYwNjc0MDIiPiLopIfoo73ntrLlnYAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiLpgbjlj5bmloflrZciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmRvIiBtc2dpZD0iNzkwNTc4ODUwMjQ5MTc0MjMyOCI+IuW+qeWOnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlZG8iIG1zZ2lkPSI3NzU5NDY0ODc2NTY2ODAzODg4Ij4i5Y+W5raI5b6p5Y6fIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+IumBuOWPluaWh+WtlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZFRvRGljdGlvbmFyeSIgbXNnaWQ9IjQzNTIxNjE1MzQ1MTAwNTc4NzQiPiLliqDlhaXlrZflhbgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZWxldGVUZXh0IiBtc2dpZD0iNjk3OTY2ODQyODQ1ODE5OTAzNCI+IuWIqumZpCI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiLorormm7TmoYzluIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiLpgJrnn6XmjqXogb3lmagiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIiBtc2dpZD0iMTMyMTM0MzM1MjkwNjUyNDU2NCI+IuaineS7tuS+m+aHieWVhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjkwOTQ1NjA1NTU2OTEwMjk1MiI+IumAmuefpeWwj+W5q+aJiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZSIgbXNnaWQ9IjE5NjE1MjEzNTUyMDQyODI3Ij4iVlBOIOW3suWVn+eUqOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDlt7LllZ/nlKggVlBOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4i6LyV6Ke45Y2z5Y+v566h55CG57ay57Wh44CCIjwvc3RyaW5nPgpAQCAtMTQ0MCwxMSArMTQ0NSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX3VwZGF0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iODg1NjYzMTMyMjQ0MDE4NzA3MSI+IuW3sueUseaCqOeahOeuoeeQhuWToeabtOaWsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4i5bey55Sx566h55CG5ZOh5Yiq6ZmkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiIgbXNnaWQ9IjE5NjA0MzExMjM4MTYyNTMwMzQiPiLnr4DntITpm7vmsaDnlKjph4/mqKHlvI/mnInliqnmlrzlu7bplbfpm7vmsaDlo73lkb3vvIzkvYbpgJnmnIPpmY3kvY7oo53nva7mlYjog73vvIzkuKbpmZDliLbpnIfli5XjgIHlrprkvY3mnI3li5nlj4rlpKfpg6jliIbog4zmma/mlbjmk5rlgrPovLjjgILpmaTpnZ7mgqjllZ/nlKjvvIzlkKbliYfpm7vpg7XjgIHnn63oqIrlj4rlhbbku5bpnIDopoHkvb/nlKjlkIzmraXlip/og73nmoTmh4nnlKjnqIvlvI/lnYfkuI3mnIPmm7TmlrDjgIJcblxu55W26KOd572u5YWF6Zu75pmC77yM56+A57SE6Zu75rGg55So6YeP5qih5byP5pyD6Ieq5YuV6Zec6ZaJ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjcxMTg4MjY5MDA3NjcwNDcxMjUiPiLlt7LlsIHpjpbvvJrmsLjkuI3poa/npLrpgJnkupvpgJrnn6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI2NDQ3NjQwNDQ5OTE4NDI3MTg3Ij4i5L2O77ya5Lul6Z2c6Z+z5pa55byP6aGv56S65Zyo6YCa55+l5riF5Zau5bqV6YOoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9Ijc5OTExNTc2OTc2MDk1NzUyNzEiPiLkuIDoiKzvvJrku6XpnZzpn7PmlrnlvI/poa/npLrpgJnkupvpgJrnn6UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+IumrmO+8mumhr+ekuuWcqOmAmuefpea4heWWrumggumDqOS4pueZvOWHuumfs+aViCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjExNTM2OTMwODA0Njc5MDQ0NzQiPiLnt4rmgKXvvJrkuI3mmYLmlrzonqLluZXlh7rnj77kuKbnmbzlh7rpn7PmlYgiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0iemVuX21vZGVfZHVyYXRpb25fbWludXRlc19zdW1tYXJ5IiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNDM2Nzg3NzQwODA3MjAwMDg0OCI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPumcgOaZgiAlMSRkIOWIhumQmCAo5a6M5oiQ5pmC6ZaT77yaPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+6ZyA5pmCIDEg5YiG6ZCYICjlrozmiJDmmYLplpPvvJo8eGxpZmY6ZyBpZD0iRk9STUFUVEVEVElNRV8wIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC0xNTEwLDQgKzE1MTAsNiBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5bey6YG45Y+WIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRkPC94bGlmZjpnPiDlgIvpoIXnm648L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiIG1zZ2lkPSIyMjc1ODYxNDU3OTE4NzA4MjkiPiLlhbbku5YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fdG9waWMiIG1zZ2lkPSIzNTcyMjgwNDM5ODgwMDIzMjMzIj4i5oKo5Y+v5Lul54K66YCZ5Lqb6YCa55+l6Kit5a6a6YeN6KaB5oCn44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiLliJfngrrph43opoHnmoTljp/lm6DvvJrmtonlj4rnmoTkurrjgIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggMGQzNjA0OTMuLmE0N2Y3M2QgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCkBAIC0yMjMsNiArMjIzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9Imdsb2JhbF9hY3Rpb25fbG9ja2Rvd24iIG1zZ2lkPSI4NzUxNTQyNTE0NzI0MzMyODczIj4i56uL5Y2z6Y6W5a6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub3RpZmljYXRpb25faW5mb19vdmVyZmxvdyIgbXNnaWQ9IjUzMDE5ODE3NDE3MDUzNTQ5OTMiPiLotoXpgY4gOTk5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2NoaWxkcmVuX2NvdW50X2JyYWNrZXRlZCIgbXNnaWQ9IjE3Njk0MjU0NzMxNjgzNDc4MzkiPiIoPHhsaWZmOmcgaWQ9Ik5PVElGSUNBVElPTkNPVU5UIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuWFp+WuueW3sumaseiXjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNhZmVNb2RlIiBtc2dpZD0iMjc4ODIyODA2MTU0NzkzMDI0NiI+IuWuieWFqOaooeW8jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFuZHJvaWRfc3lzdGVtX2xhYmVsIiBtc2dpZD0iNjU3NzM3NTMzNTcyODU1MTMzNiI+IkFuZHJvaWQg57O757WxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idXNlcl9vd25lcl9sYWJlbCIgbXNnaWQ9IjI4MDQzNTE4OTgwMDEwMzg5NTEiPiLlgIvkuroiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+IuWMheaLrOWAi+S6uuizh+aWme+8jOWmguS/oeeUqOWNoeiZn+eivOWSjOWvhueivOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIG1zZ2lkPSIzNTkzNDkzMjgxMDU5NDI0ODU1Ij4i5o6n566h6aGv56S655Wr6Z2i5pS+5aSn5Yqf6IO9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iNDc5MTg1ODIwMzU2ODM4Mzc3MyI+IuaOp+euoemhr+ekuueVq+mdoueahOe4ruaUvuetiee0muWSjOS9jee9ruOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfdGl0bGVfY2FuUGVyZm9ybUdlc3R1cmVzIiBtc2dpZD0iNzQxODk4NDczMDM2MjU3Njg2MiI+IuS9v+eUqOaJi+WLoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI4Mjk2MzczMDIxNjM2OTgxMjQ5Ij4i5Y+v5L2/55So6LyV5oyJ44CB5ruR5YuV5ZKM6ZuZ5oyH5pKl5YuV562J5omL5Yui44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXIiIG1zZ2lkPSI3NDE3MTkyNjI5NjAxODkwNzkxIj4i5YGc55So5oiW6K6K5pu054uA5oWL5YiXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2Nfc3RhdHVzQmFyIiBtc2dpZD0iODQzNDY2OTU0OTUwNDI5MDk3NSI+IuWFgeioseaHieeUqOeoi+W8j+WBnOeUqOeLgOaFi+WIl++8jOS4puWPr+aWsOWinuaIluenu+mZpOezu+e1seWcluekuuOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyU2VydmljZSIgbXNnaWQ9IjQ4MjY4MzU1MDgyMjYxMzk2ODgiPiLku6Xni4DmhYvliJfpoa/npLoiPC9zdHJpbmc+CkBAIC0zNTMsOCArMzU2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbWVyYSIgbXNnaWQ9Ijg0OTcyMTY1MjQ3MzU1MzUwMDkiPiLlhYHoqLHmh4nnlKjnqIvlvI/kvb/nlKjnm7jmqZ/mi43nhaflkozpjITlvbHjgILpgJnpoIXmrIrpmZDlj6/orpPmh4nnlKjnqIvlvI/pmqjmmYLkvb/nlKjnm7jmqZ/vvIzogIzkuI3pnIDoq4vmsYLmgqjpgLLooYznorroqo3jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4i5o6n5Yi26ZyH5YuVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiLlhYHoqLHmh4nnlKjnqIvlvI/mjqfliLbpnIfli5XjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiIG1zZ2lkPSIyMTU1OTIwODEwMTIxOTg0MjE1Ij4i5o6n5Yi26ZaD5YWJ54eIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCIgbXNnaWQ9IjY1MjIyODQ3OTQ1NjgzNjgzMTAiPiLlhYHoqLHmh4nnlKjnqIvlvI/mjqfliLbploPlhYnnh4jjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2NhbGxQaG9uZSIgbXNnaWQ9IjM5MjU4MzYzNDc2ODE4NDc5NTQiPiLnm7TmjqXmkqXmiZPpm7voqbHomZ/norwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYWxsUGhvbmUiIG1zZ2lkPSIzNzQwNzk3NTc2MTEzNzYwODI3Ij4i5YWB6Kix5oeJ55So56iL5byP6Ieq6KGM5pKl5omT6Zu76Kmx77yM5L2G5Y+v6IO955Si55Sf6Z2e6aCQ5pyf55qE6LK755So5oiW5pKl5omT6Z2e6aCQ5pyf55qE6Zu76Kmx44CC5rOo5oSP77ya6YCZ6aCF5qyK6ZmQ5LiN5YWB6Kix5oeJ55So56iL5byP5pKl5omT57eK5oCl6Zu76Kmx44CC5oOh5oSP5oeJ55So56iL5byP5Y+v6IO95Yip55So5q2k5Yqf6IO95pOF6Ieq5pKl5omT6Zu76Kmx77yM5aKe5Yqg5oKo5LiN5b+F6KaB55qE6aGN5aSW5pSv5Ye644CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiLlrZjlj5YgSU1TIOaSpeiZn+acjeWLmSI8L3N0cmluZz4KQEAgLTg1OCwxMCArODU5LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJjdXQiIG1zZ2lkPSIzMDkyNTY5NDA4NDM4NjI2MjYxIj4i5Ymq5LiLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29weSIgbXNnaWQ9IjI2ODE5NDYyMjk1MzM1MTE5ODciPiLopIfoo70iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiLosrzkuIoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0IiBtc2dpZD0iNTQyNzc5Mjc0MTkwODAxMDY3NSI+IuS7pee0lOaWh+Wtl+iyvOS4iiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlcGxhY2UiIG1zZ2lkPSI1NzgxNjg2MDU5MDYzMTQ4OTMwIj4i5Y+W5Luj4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IuWIqumZpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvcHlVcmwiIG1zZ2lkPSIyNTM4MjExNTc5NTk2MDY3NDAyIj4i6KSH6KO957ay5Z2AIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0VGV4dE1vZGUiIG1zZ2lkPSIxMDE4NjkxODE1MTQzMTY1MzI2Ij4i6YG45Y+W5paH5a2XIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiLlvqnljp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IumHjeWBmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgbXNnaWQ9IjUyMzY4NTAzOTQzNzA4MjAzNTciPiLpgbjlj5bmloflrZciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4i5Yqg5YWl5a2X5YW4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlVGV4dCIgbXNnaWQ9IjY5Nzk2Njg0Mjg0NTgxOTkwMzQiPiLliKrpmaQiPC9zdHJpbmc+CkBAIC0xMTA3LDYgKzExMTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3Nlcl93YWxscGFwZXIiIG1zZ2lkPSI3ODczNDc2MTk5Mjk1MTkwMjc5Ij4i6K6K5pu05qGM5biDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIyMDE0MTYyODM1NDgxOTA2NDI5Ij4i6YCa55+l5o6l6IG95ZmoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29uZGl0aW9uX3Byb3ZpZGVyX3NlcnZpY2VfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjEzMjEzNDMzNTI5MDY1MjQ1NjQiPiLmop3ku7bmj5DkvpvogIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiLpgJrnn6XlsI/luavmiYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IlZQTiDlt7LllZ/nlKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGVfbG9uZyIgbXNnaWQ9IjY0MDA3MTQ3OTgwNDkyNTIyOTQiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g5bey5ZWf55SoIFZQTiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90ZXh0IiBtc2dpZD0iMzAxMTMwNjYwNzEyNjQ1MDMyMiI+Iui8leinuOWNs+WPr+euoeeQhue2sui3r+OAgiI8L3N0cmluZz4KQEAgLTE0NDAsMTEgKzE0NDUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0icGFja2FnZV91cGRhdGVkX2RldmljZV9vd25lciIgbXNnaWQ9Ijg4NTY2MzEzMjI0NDAxODcwNzEiPiLnlLHmgqjnmoTnrqHnkIblk6Hmm7TmlrAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYWNrYWdlX2RlbGV0ZWRfZGV2aWNlX293bmVyIiBtc2dpZD0iNzY1MDU3NzM4NzQ5MzEwMTM1MyI+IuW3sumBreeuoeeQhuWToeWIqumZpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfZGVzY3JpcHRpb24iIG1zZ2lkPSIxOTYwNDMxMTIzODE2MjUzMDM0Ij4i56+A57SE6ICX6Zu76YeP5qih5byP5pyD6YCP6YGO6ZmN5L2O6KOd572u5pWI6IO944CB6ZyH5YuV6ZmQ5Yi244CB5a6a5L2N5pyN5YuZ6ZmQ5Yi25ZKM5aSn5aSa5pW46IOM5pmv6LOH5paZ6YGL5L2c6ZmQ5Yi2562J5pa55byP77yM5bu26ZW36Zu75rGg57qM6Iiq5Yqb44CC5q2k5aSW77yM5aaC5p6c5pyq6ZaL5ZWf6Zu75a2Q6YO15Lu244CB57Ch6KiK5ZKM5YW25LuW6ZyA6KaB5L2/55So5ZCM5q2l5Yqf6IO955qE5oeJ55So56iL5byP77yM57O757Wx5bCH5LiN5pyD6Ieq5YuV5pu05paw6YCZ5Lqb5oeJ55So56iL5byP44CCXG5cbueVtuaCqOeCuuijnee9ruWFhembu+aZgu+8jOevgOe0hOiAl+mbu+mHj+aooeW8j+acg+iHquWLlemXnOmWieOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4i5bCB6Y6W77ya5LiA5b6L5LiN6aGv56S66YCZ5Lqb6YCa55+lIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNjQ0NzY0MDQ0OTkxODQyNzE4NyI+IuS9ju+8mumhr+ekuuWcqOmAmuefpea4heWWruW6lemDqOS4lOS4jeeZvOWHuuS7u+S9lemfs+aViCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4i5LiA6Iis77ya6aGv56S66YCZ5Lqb6YCa55+l5LiU5LiN55m85Ye65Lu75L2V6Z+z5pWIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMxNTIyMzg2Mzc3MzcyMTU2NTQiPiLpq5jvvJrpoa/npLrlnKjpgJrnn6XmuIXllq7poILnq6/kuKbnmbzlh7rpn7PmlYgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4i57eK5oCl77ya5oyB57qM6aGv56S65Zyo6J6i5bmV5LiK5Lim55m85Ye66Z+z5pWIIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9Inplbl9tb2RlX2R1cmF0aW9uX21pbnV0ZXNfc3VtbWFyeSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjQzNjc4Nzc0MDgwNzIwMDA4NDgiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7mjIHnuowgJTEkZCDliIbpkJggKOe1kOadn+aZgumWk++8mjx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuaMgee6jCAxIOWIhumQmCAo57WQ5p2f5pmC6ZaT77yaPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMCI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuW3sumBuOWPliA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4g5YCL6aCF55uuPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4i5YW25LuWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIiBtc2dpZD0iMzU3MjI4MDQzOTg4MDAyMzIzMyI+IumAmeS6m+mAmuefpeeahOmHjeimgeaAp+eUseaCqOaxuuWumuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV9wZXJzb24iIG1zZ2lkPSI5MTYwMTMzNTk3MjYyOTM4Mjk2Ij4i6YCZ5YmH6YCa55+l5raJ5Y+K54m55a6a5Lq65aOr77yM5Zug5q2k6KKr5q2454K66YeN6KaB6YCa55+l44CCIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCBhYzg4ODUxLi5iMzQ1OTRmIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTIyMyw2ICsyMjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iZ2xvYmFsX2FjdGlvbl9sb2NrZG93biIgbXNnaWQ9Ijg3NTE1NDI1MTQ3MjQzMzI4NzMiPiJLaGl5YSBtYW5qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2luZm9fb3ZlcmZsb3ciIG1zZ2lkPSI1MzAxOTgxNzQxNzA1MzU0OTkzIj4iOTk5KyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9jaGlsZHJlbl9jb3VudF9icmFja2V0ZWQiIG1zZ2lkPSIxNzY5NDI1NDczMTY4MzQ3ODM5Ij4iKDx4bGlmZjpnIGlkPSJOT1RJRklDQVRJT05DT1VOVCI+JWQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJPa3VxdWtldGh3ZSBrdWZpaGxpd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzYWZlTW9kZSIgbXNnaWQ9IjI3ODgyMjgwNjE1NDc5MzAyNDYiPiJJbW9kaSBlcGhlcGhpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbmRyb2lkX3N5c3RlbV9sYWJlbCIgbXNnaWQ9IjY1NzczNzUzMzU3Mjg1NTEzMzYiPiJVaGxlbG8gbHdlLUFuZHJvaWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VyX293bmVyX2xhYmVsIiBtc2dpZD0iMjgwNDM1MTg5ODAwMTAzODk1MSI+Ik9rb211bnR1IHNpcXUiPC9zdHJpbmc+CkBAIC0yNTUsNiArMjU2LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5SZXF1ZXN0RmlsdGVyS2V5RXZlbnRzIiBtc2dpZD0iNzQ2MzEzNTI5MjIwNDE1MjgxOCI+Ikt1ZmFrYSBwaGFrYXRoaSBpZGF0aGEgeW9tdW50dSBzaXF1IGVmYW5hIG5lemlub21ib2xvIHpla2hhZGkgbGVzaWt3ZWxldHUgbmFtYXBoYXNpd2VkaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiBtc2dpZD0iMzU5MzQ5MzI4MTA1OTQyNDg1NSI+Ikxhd3VsYSB1a3VsdW5naXN3YSBrd2VzaWJvbmlzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgbXNnaWQ9IjQ3OTE4NTgyMDM1NjgzODM3NzMiPiJMYXd1bGEgaWxldmVsaSB5b2t1c29uZGV6YSB5ZXNpYm9uaXNpIG5lbmRhd28uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIG1zZ2lkPSI3NDE4OTg0NzMwMzYyNTc2ODYyIj4iWWVuemEgdWt1dGhpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgbXNnaWQ9IjgyOTYzNzMwMjE2MzY5ODEyNDkiPiJJbmdhdGhlcGhhLCBpc3dheWlwaGUsIGluY2luemUsIGZ1dGhpIHllbnplIG9rdW55ZSB1a3V0aGludHdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfc3RhdHVzQmFyIiBtc2dpZD0iNzQxNzE5MjYyOTYwMTg5MDc5MSI+ImtodWJhemEgbm9tYSBndXF1bGEgaWJoYSB5b211bW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19zdGF0dXNCYXIiIG1zZ2lkPSI4NDM0NjY5NTQ5NTA0MjkwOTc1Ij4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1dGhpIHllbnplIHVtdWR3YSBvY2hhemEgbmdlc2ltbyB1a3V0aGkgdW5nYXNlYmVuemkgbm9tYSB1a3VmYWthIG5vbWEgdWt1a2hpcGhhIGl6aXRob25qYW5hIHpvaGxlbG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9zdGF0dXNCYXJTZXJ2aWNlIiBtc2dpZD0iNDgyNjgzNTUwODIyNjEzOTY4OCI+InlpYmEgeWliaGEgeWVzaW1vIjwvc3RyaW5nPgpAQCAtMzUzLDggKzM1Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJwZXJtZGVzY19jYW1lcmEiIG1zZ2lkPSI4NDk3MjE2NTI0NzM1NTM1MDA5Ij4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1dGhhdGhhIGl6aXRob21iZSBuYW1hdmlkaXlvIG5nZWtoYW1lcmEuIExlIG12dW1lIGl2dW1lbGEgdWhsZWxvIGxva3VzZWJlbnphIHVrdXNlYmVuemlzYSBpa2hhbWVyYSBuZ2Fub21hIGlzaXBoaSBpc2lraGF0aGkgbmdhcGhhbmRsZSBrd2VtdnVtZSB5YWtoby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX3ZpYnJhdGUiIG1zZ2lkPSI3Njk2NDI3MDI2MDU3NzA1ODM0Ij4ibGF3dWxhIHVrdWRsaWRsaXphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfdmlicmF0ZSIgbXNnaWQ9IjYyODQ5ODkyNDU5MDIzMDA5NDUiPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3VsYXd1bGEgaXNpZGxpZGxpemkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9mbGFzaGxpZ2h0IiBtc2dpZD0iMjE1NTkyMDgxMDEyMTk4NDIxNSI+Imxhd3VsYSB1a3VraGFueWEga3dlZnVsYXNoaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2ZsYXNobGlnaHQiIG1zZ2lkPSI2NTIyMjg0Nzk0NTY4MzY4MzEwIj4iSXZ1bWVsYSB1aGxlbG8gbG9rdXNlYmVuemEgdWt1bGF3dWxhIHVrdWtoYW55YSBrd2VmdWxlc2hpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1sYWJfY2FsbFBob25lIiBtc2dpZD0iMzkyNTgzNjM0NzY4MTg0Nzk1NCI+Im5nb2t1cW9uZGlsZSBzaGF5ZWxhIGl6aW5vbWJvbG8gem9jaW5nbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX2NhbGxQaG9uZSIgbXNnaWQ9IjM3NDA3OTc1NzYxMTM3NjA4MjciPiJJdnVtZWxhIHVobGVsbyBsb2t1c2ViZW56YSB1a3VzaGF5ZWxhIGl6aW5vbWJvbG8gemVmb25pIG5nYXBoYW5kbGUga29rdWhsYW5nYW55ZWxhIGt3YWtoby4gTG9raHUga3VuZ2Fob2xlbGEgZW1hc2hhamluaSBub21hIGFtYWtob2xpIGFuZ2FsaW5kZWxla2lsZS4gUWFwaGVsYSB1a3V0aGkgbG9raHUgYWt1dnVtZWxpIHVobGVsbyBsb2t1c2ViZW56YSB1a3VzaGF5ZWxhIGl6aW5vbWJvbG8gemVzaW1vIGVzaXBodXRodW1heW8uIEl6aW5obGVsbyB6b2t1c2ViZW56YSBlemluZ2FsdW5naWxlIHppbmdhYml6YSBpbWFsaSBuZ29rd2VuemUgYW1ha2hvbGkgbmdhcGhhbmRsZSBrb2t1cWluaXNla2lzYSBrd2FraG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9hY2Nlc3NJbXNDYWxsU2VydmljZSIgbXNnaWQ9IjM1NzQ5NDM4NDcxODE3OTM5MTgiPiJmaW55ZWxlbGEga3VzZXZpc2kgeWVraG9saSB5ZS1JTVMiPC9zdHJpbmc+CkBAIC04NTgsMTAgKzg1OSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY3V0IiBtc2dpZD0iMzA5MjU2OTQwODQzODYyNjI2MSI+Ik5xYW11bGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5IiBtc2dpZD0iMjY4MTk0NjIyOTUzMzUxMTk4NyI+IktvcGlzaGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwYXN0ZSIgbXNnaWQ9IjU2Mjk4ODA4MzY4MDUwMzY0MzMiPiJOYW1hdGhpc2VsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIG1zZ2lkPSI1NDI3NzkyNzQxOTA4MDEwNjc1Ij4iTmFtYXRoaXNlbGEgbmplbmdvbWJoYWxvIG9zb2JhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXBsYWNlIiBtc2dpZD0iNTc4MTY4NjA1OTA2MzE0ODkzMCI+IkJ1eWlzZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVsZXRlIiBtc2dpZD0iNjA5ODY4NDg0NDAyMTY5Nzc4OSI+IlN1c2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb3B5VXJsIiBtc2dpZD0iMjUzODIxMTU3OTU5NjA2NzQwMiI+IktvcGlzaGEgaS1VUkwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSIgbXNnaWQ9IjEwMTg2OTE4MTUxNDMxNjUzMjYiPiJLaGV0aGEgdW1iaGFsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVuZG8iIG1zZ2lkPSI3OTA1Nzg4NTAyNDkxNzQyMzI4Ij4iSGxlaGxpc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIiBtc2dpZD0iNzc1OTQ2NDg3NjU2NjgwMzg4OCI+IlllbnphIGZ1dGhpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGV4dFNlbGVjdGlvbkNBQlRpdGxlIiBtc2dpZD0iNTIzNjg1MDM5NDM3MDgyMDM1NyI+Iklua2V0aG8geW9tYmhhbG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhZGRUb0RpY3Rpb25hcnkiIG1zZ2lkPSI0MzUyMTYxNTM0NTEwMDU3ODc0Ij4iRW5nZXphIGt3aXNpY2hhemFtYXp3aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbGV0ZVRleHQiIG1zZ2lkPSI2OTc5NjY4NDI4NDU4MTk5MDM0Ij4iU3VzYSI8L3N0cmluZz4KQEAgLTExMDcsNiArMTExMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VyX3dhbGxwYXBlciIgbXNnaWQ9Ijc4NzM0NzYxOTkyOTUxOTAyNzkiPiJTaGludHNoYSBpcGhlcGhhZG9uZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbGlzdGVuZXJfYmluZGluZ19sYWJlbCIgbXNnaWQ9IjIwMTQxNjI4MzU0ODE5MDY0MjkiPiJVbWxhbGVsaSB3ZXNhemlzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSIxMzIxMzQzMzUyOTA2NTI0NTY0Ij4iVW1obGluemVraSB3ZXNpbW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fYXNzaXN0YW50X2JpbmRpbmdfbGFiZWwiIG1zZ2lkPSI5MDk0NTYwNTU1NjkxMDI5NTIiPiJVbXNpemkgd2VzYXppc28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fdGl0bGUiIG1zZ2lkPSIxOTYxNTIxMzU1MjA0MjgyNyI+IkktVlBOIGlzaXlhc2ViZW56YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZwbl90aXRsZV9sb25nIiBtc2dpZD0iNjQwMDcxNDc5ODA0OTI1MjI5NCI+ImktVlBOIGl2dXN3ZSBuZ3UgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3RleHQiIG1zZ2lkPSIzMDExMzA2NjA3MTI2NDUwMzIyIj4iVGhpbnRhIHVrdXplIHdlbmdhbWVsZSBpbmV0aGl3ZWtoaS4iPC9zdHJpbmc+CkBAIC0xNDQwLDExICsxNDQ1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfdXBkYXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI4ODU2NjMxMzIyNDQwMTg3MDcxIj4iSWJ1eWVrZXp3ZSBuZ3VtcW9uZGlzaSB3YWtobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InBhY2thZ2VfZGVsZXRlZF9kZXZpY2Vfb3duZXIiIG1zZ2lkPSI3NjUwNTc3Mzg3NDkzMTAxMzUzIj4iSXN1c3dlIG5ndW1sYXd1bGkgd2FraG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2Rlc2NyaXB0aW9uIiBtc2dpZD0iMTk2MDQzMTEyMzgxNjI1MzAzNCI+IlVrdXNpemEgdWt1dGh1dGh1a2lzYSBpbXBpbG8geWViaGV0aHJpLCBpc2lsb25kb2xvemUgc2ViaGV0aHJpIHNlaGxpc2EgdWt1c2ViZW56YSBrd2VkaXZheWlzaSB5YWtobyBmdXRoaSBzaWtoYXd1bGVsZSB1a3VkbGlkbGl6YSwgYW1hc2V2aXNpIHdlbmRhd28sIG5lZGF0aGEgZW5pbmdpIHlhbmdhc2VtdXZhLiBJLWltZXlpbGksIGltaWxheWV6bywgbmV6aW55ZSBpemluaGxlbG8gem9rdXNlYmVuemEgZXppbmNpa2UgZWt1dnVtZWxhbmlzZW5pIHppbmdhaGxlIHppbmdhYnV5ZWtlendhIG5nYXBoYW5kbGUga29rdXRoaSB1eml2dWxlLlxuXG5Jc2lsb25kb2xvemkgc2ViaGV0aHJpIHNpeWF2YWxla2Egbmdva3V6ZW56YWthbGVsYXlvIHVtYSBpZGl2YXlpc2kgeWFraG8gaXNoYWphLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSI3MTE4ODI2OTAwNzY3MDQ3MTI1Ij4iT2t1dmluaml3ZTogVW5nYWxva290aGkgdWJvbmlzZSBsZXppIHphemlzbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjY0NDc2NDA0NDk5MTg0MjcxODciPiJPa3VwaGFuc2k6IEJvbmlzYSBuZ29rdXRodWxpbGUgbmdhcGhhbnNpIGtvaGx1IGx3ZXNhemlzbyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI3OTkxMTU3Njk3NjA5NTc1MjcxIj4iT2t1andheWVsZWtpbGU6IEJvbmlzYSBuZ29rdXRodWxpbGUgbGV6aSB6YXppc28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzE1MjIzODYzNzczNzIxNTY1NCI+Ik9rdXBoZXp1bHU6IEJvbmlzYSBuZ2FwaGV6dWx1IGtvaGx1IGx3ZXphemlzbyB1cGhpbmRlIHdlbnplIHVtc2luZG8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSIxMTUzNjkzMDgwNDY3OTA0NDc0Ij4iT2t1cGh1dGh1bWF5bzogQmhla2Ega3VzaWtyaW5pIHVwaGluZGUgd2VuemUgdW1zaW5kbyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI0MzY3ODc3NDA4MDcyMDAwODQ4Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk9rd2FtYW1pbml0aGkgYW5ndS0lMSRkIChrdXplIGt1YmUgbmdvLTx4bGlmZjpnIGlkPSJGT1JNQVRURURUSU1FXzEiPiUyJHM8L3hsaWZmOmc+KTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+T2t3YW1hbWluaXRoaSBhbmd1LSUxJGQgKGt1emUga3ViZSBuZ28tPHhsaWZmOmcgaWQ9IkZPUk1BVFRFRFRJTUVfMSI+JTIkczwveGxpZmY6Zz4pPC9pdGVtPgpAQCAtMTUxMCw0ICsxNTEwLDYgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IG9rdWtoZXRoaXdlPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfbm90aWZpY2F0aW9uX3RvcGljX2xhYmVsIiBtc2dpZD0iMjI3NTg2MTQ1NzkxODcwODI5Ij4iT2t3YWhsdWthaGx1a2VuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgbXNnaWQ9IjM1NzIyODA0Mzk4ODAwMjMyMzMiPiJVc2V0aGUgdWt1YmFsdWxla2Ega3dhbGV6aSB6YXppc28uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgbXNnaWQ9IjkxNjAxMzM1OTcyNjI5MzgyOTYiPiJMb2todSBrdWJhbHVsZWtpbGUgbmdlbnhhIHlhYmFudHUgYWJhYmFuZGFrYW55ZWtheW8uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCmluZGV4IDliY2EzZDYuLmUwZjllY2EgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvYXR0cnMueG1sCkBAIC0yNzkxLDYgKzI3OTEsNTYgQEAKICAgICAgICAgICAgIDxmbGFnIG5hbWU9ImVuZCIgdmFsdWU9IjB4MjAiIC8+CiAgICAgICAgIDwvYXR0cj4KIAorICAgICAgICA8YXR0ciBuYW1lPSJwb2ludGVyU2hhcGUiPgorICAgICAgICAgICAgPCEtLSBOdWxsIGljb24sIHBvaW50ZXIgYmVjb21lcyBpbnZpc2libGUuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0ibm9uZSIgdmFsdWU9IjAiIC8+CisgICAgICAgICAgICA8IS0tIFRoZSBkZWZhdWx0IGljb24gb2YgYXJyb3cgcG9pbnRlci4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJhcnJvdyIgdmFsdWU9IjEwMDAiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBpbmRpY2F0aW5nIGNvbnRleHQtbWVudSB3aWxsIGFwcGVhci4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJjb250ZXh0X21lbnUiIHZhbHVlPSIxMDAxIiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgYSBoYW5kIHdpdGggdGhlIGluZGV4IGZpbmdlci4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJoYW5kIiB2YWx1ZT0iMTAwMiIgLz4KKyAgICAgICAgICAgIDwhLS0gUG9pbnRlciBpY29uIGluZGljYXRpbmcgaGVscC4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJoZWxwIiB2YWx1ZT0iMTAwMyIgLz4KKyAgICAgICAgICAgIDwhLS0gUG9pbnRlciBpY29uIGluZGljYXRpbmcgc29tZXRoaW5nIGlzIGdvaW5nIG9uIGFuZCB3YWl0aW5nLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9IndhaXQiIHZhbHVlPSIxMDA0IiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gZm9yIGNlbGwgYW5kIGdyaWQuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0iY2VsbCIgdmFsdWU9IjEwMDYiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiBjcm9zc2hhaXIsIGluZGljYXRpbmcgdG8gc3BvdCBhIGxvY2F0aW9uLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImNyb3NzaGFpciIgdmFsdWU9IjEwMDciIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiBJLWJlYW0sIHVzdWFsbHkgZm9yIHRleHQuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0idGV4dCIgdmFsdWU9IjEwMDgiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiBJLWJlYW0gd2l0aCA5MC1kZWdyZWUgcm90YXRlZCwgZm9yIHZlcnRpY2FsIHRleHQuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0idmVydGljYWxfdGV4dCIgdmFsdWU9IjEwMDkiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiAnYWxpYXMnLCBpbmRpY2F0aW5nIGFuIGFsaWFzIG9mL3Nob3J0Y3V0IHRvIHNvbWV0aGluZyBpcyB0byBiZQorICAgICAgICAgICAgICAgICBjcmVhdGVkLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImFsaWFzIiB2YWx1ZT0iMTAxMCIgLz4KKyAgICAgICAgICAgIDwhLS0gUG9pbnRlciBpY29uIG9mICdjb3B5JywgdXNlZCBmb3IgZHJhZy9kcm9wLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImNvcHkiIHZhbHVlPSIxMDExIiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgJ25vLWRyb3AnLCBpbmRpY2F0aW5nIHRoZSBkcm9wIHdpbGwgbm90IGJlIGFjY2VwdGVkIGF0IHRoZQorICAgICAgICAgICAgICAgICBjdXJyZW50IGxvY2F0aW9uLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9Im5vX2Ryb3AiIHZhbHVlPSIxMDEyIiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgZm91ci13YXkgYXJyb3dzLCBpbmRpY2F0aW5nIHNjcm9sbGluZyBhbGwgZGlyZWN0aW9uLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9ImFsbF9zY3JvbGwiIHZhbHVlPSIxMDEzIiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgaG9yaXpvbnRhbCBkb3VibGUgYXJyb3csIGluZGljYXRpbmcgaG9yaXpvbnRhbCByZXNpemUuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0iaG9yaXpvbnRhbF9kb3VibGVfYXJyb3ciIHZhbHVlPSIxMDE0IiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgdmVydGljYWwgZG91YmxlIGFycm93LCBpbmRpY2F0aW5nIHZlcnRpY2FsIHJlc2l6ZS4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJ2ZXJ0aWNhbF9kb3VibGVfYXJyb3ciIHZhbHVlPSIxMDE1IiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gb2YgZGlhZ29uYWwgZG91YmxlIGFycm93LCBzdGFydGluZyBmcm9tIHRvcC1yaWdodCB0byBib3R0b20tbGVmdC4KKyAgICAgICAgICAgICAgICAgSW5kaWNhdGluZyBmcmVlZm9ybSByZXNpemUuIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0idG9wX3JpZ2h0X2RpYWdvbmFsX2RvdWJsZV9hcnJvdyIgdmFsdWU9IjEwMTYiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiBkaWFnb25hbCBkb3VibGUgYXJyb3csIHN0YXJ0aW5nIGZyb20gdG9wLWxlZnQgdG8gYm90dG9tLXJpZ2h0LgorICAgICAgICAgICAgICAgICBJbmRpY2F0aW5nIGZyZWVmb3JtIHJlc2l6ZS4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJ0b3BfbGVmdF9kaWFnb25hbF9kb3VibGVfYXJyb3ciIHZhbHVlPSIxMDE3IiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gaW5kaWNhdGluZyB6b29tLWluLiAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9Inpvb21faW4iIHZhbHVlPSIxMDE4IiAvPgorICAgICAgICAgICAgPCEtLSBQb2ludGVyIGljb24gaW5kaWNhdGluZyB6b29tLW91dC4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJ6b29tX291dCIgdmFsdWU9IjEwMTkiIC8+CisgICAgICAgICAgICA8IS0tIFBvaW50ZXIgaWNvbiBvZiBhIGhhbmQgc2lnbiB0byBncmFiIHNvbWV0aGluZy4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJncmFiIiB2YWx1ZT0iMTAyMCIgLz4KKyAgICAgICAgICAgIDwhLS0gUG9pbnRlciBpY29uIG9mIGEgaGFuZCBzaWduIHdoaWxlIGdyYWJiaW5nIHNvbWV0aGluZy4gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJncmFiYmluZyIgdmFsdWU9IjEwMjEiIC8+CisgICAgICAgIDwvYXR0cj4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCiAgICAgPCEtLSBBdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIGEgdGFnIGZvciBhIHBhcnRpY3VsYXIgVmlldy4gLS0+CkBAIC0zMDQyLDcgKzMwOTIsOCBAQAogICAgICAgICA8YXR0ciBuYW1lPSJpbWVTdWJ0eXBlTG9jYWxlIiBmb3JtYXQ9InN0cmluZyIgLz4KICAgICAgICAgPCEtLSBUaGUgbW9kZSBvZiB0aGUgc3VidHlwZS4gVGhpcyBzdHJpbmcgY2FuIGJlIGEgbW9kZSAoZS5nLiB2b2ljZSwga2V5Ym9hcmQuLi4pIGFuZCB0aGlzCiAgICAgICAgICAgICAgc3RyaW5nIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBJTUUgd2hlbiB0aGUgZnJhbWV3b3JrIGNhbGxzIHRoZSBJTUUgd2l0aCB0aGUKLSAgICAgICAgICAgICBzdWJ0eXBlLiAgLS0+CisgICAgICAgICAgICAgc3VidHlwZS4gIHtAbGluayBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RTdWJ0eXBlI2dldExvY2FsZSgpfSByZXR1cm5zIHRoZQorICAgICAgICAgICAgIHZhbHVlIHNwZWNpZmllZCBpbiB0aGlzIGF0dHJpYnV0ZS4gIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJpbWVTdWJ0eXBlTW9kZSIgZm9ybWF0PSJzdHJpbmciIC8+CiAgICAgICAgIDwhLS0gU2V0IHRydWUgaWYgdGhlIHN1YnR5cGUgaXMgYXV4aWxpYXJ5LiAgQW4gYXV4aWxpYXJ5IHN1YnR5cGUgd29uJ3QgYmUgc2hvd24gaW4gdGhlCiAgICAgICAgICAgICAgaW5wdXQgbWV0aG9kIHNlbGVjdGlvbiBsaXN0IGluIHRoZSBzZXR0aW5ncyBhcHAuCkBAIC0zMDY3LDYgKzMxMTgsOSBAQAogICAgICAgICAgICAgIHRoaXMgc3VidHlwZS4gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBtYW55IHBhc3N3b3JkIGZpZWxkcyBvbmx5IGFsbG93CiAgICAgICAgICAgICAgQVNDSUktY2hhcmFjdGVycy4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9ImlzQXNjaWlDYXBhYmxlIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CisgICAgICAgIDwhLS0gVGhlIEJDUC00NyBMYW5ndWFnZSBUYWcgb2YgdGhlIHN1YnR5cGUuICBUaGlzIHJlcGxhY2VzCisgICAgICAgIHtAbGluayBhbmRyb2lkLlIuc3R5bGVhYmxlI0lucHV0TWV0aG9kX1N1YnR5cGVfaW1lU3VidHlwZUxvY2FsZX0uICAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0ibGFuZ3VhZ2VUYWciIGZvcm1hdD0ic3RyaW5nIiAvPgogICAgIDwvZGVjbGFyZS1zdHlsZWFibGU+CiAKICAgICA8IS0tIFVzZSA8Y29kZT5zcGVsbC1jaGVja2VyPC9jb2RlPiBhcyB0aGUgcm9vdCB0YWcgb2YgdGhlIFhNTCByZXNvdXJjZSB0aGF0CkBAIC0zMDkwLDcgKzMxNDQsOCBAQAogICAgICAgICA8YXR0ciBuYW1lPSJsYWJlbCIgLz4KICAgICAgICAgPCEtLSBUaGUgbG9jYWxlIG9mIHRoZSBzdWJ0eXBlLiBUaGlzIHN0cmluZyBzaG91bGQgYmUgYSBsb2NhbGUgKGUuZy4gZW5fVVMsIGZyX0ZSLi4uKQogICAgICAgICAgICAgIFRoaXMgaXMgYWxzbyB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8ga25vdyB0aGUgc3VwcG9ydGVkIGxvY2FsZXMKLSAgICAgICAgICAgICBvZiB0aGUgc3BlbGwgY2hlY2tlci4gIC0tPgorICAgICAgICAgICAgIG9mIHRoZSBzcGVsbCBjaGVja2VyLiB7QGxpbmsgYW5kcm9pZC52aWV3LnRleHRzZXJ2aWNlLlNwZWxsQ2hlY2tlclN1YnR5cGUjZ2V0TG9jYWxlKCl9CisgICAgICAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoaXMgYXR0cmlidXRlLiAgLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InN1YnR5cGVMb2NhbGUiIGZvcm1hdD0ic3RyaW5nIiAvPgogICAgICAgICA8IS0tIFRoZSBleHRyYSB2YWx1ZSBvZiB0aGUgc3VidHlwZS4gVGhpcyBzdHJpbmcgY2FuIGJlIGFueSBzdHJpbmcgYW5kIHdpbGwgYmUgcGFzc2VkIHRvCiAgICAgICAgICAgICAgdGhlIFNwZWxsQ2hlY2tlci4gIC0tPgpAQCAtMzEwMiw2ICszMTU3LDkgQEAKICAgICAgICAgICAgICB7QGNvZGUgQXJyYXlzLmhhc2hDb2RlKG5ldyBPYmplY3RbXSB7c3VidHlwZUxvY2FsZSwgZXh0cmFWYWx1ZX0pIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgICAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0ic3VidHlwZUlkIiAvPgorICAgICAgICA8IS0tIFRoZSBCQ1AtNDcgTGFuZ3VhZ2UgVGFnIG9mIHRoZSBzdWJ0eXBlLiAgVGhpcyByZXBsYWNlcworICAgICAgICB7QGxpbmsgYW5kcm9pZC5SLnN0eWxlYWJsZSNTcGVsbENoZWNrZXJfU3VidHlwZV9zdWJ0eXBlTG9jYWxlfS4gIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJsYW5ndWFnZVRhZyIgLz4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCiAgICAgPCEtLSBVc2UgPGNvZGU+YWNjZXNzaWJpbGl0eS1zZXJ2aWNlPC9jb2RlPiBhcyB0aGUgcm9vdCB0YWcgb2YgdGhlIFhNTCByZXNvdXJjZSB0aGF0CkBAIC0zMjU4LDcgKzMzMTYsMTQgQEAKICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0iY2FuQ29udHJvbE1hZ25pZmljYXRpb24iIGZvcm1hdD0iYm9vbGVhbiIgLz4KLSAgICAgICAgPCEtLSBTaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgYWNjZXNzaWJpbGl0eSBzZXJpdmNlIHB1cnBvc2Ugb3IgYmVoYXZpb3IuLS0+CisgICAgICAgIDwhLS0gQXR0cmlidXRlIHdoZXRoZXIgdGhlIGFjY2Vzc2liaWxpdHkgc2VydmljZSB3YW50cyB0byBiZSBhYmxlIHRvIHBlcmZvcm0gZ2VzdHVyZXMuCisgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgUmVxdWlyZWQgdG8gYWxsb3cgc2V0dGluZyB0aGUge0BsaW5rIGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UKKyAgICAgICAgICAgICAjQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvI0ZMQUdfQ0FOX1BFUkZPUk1fR0VTVFVSRVN9IGZsYWcuCisgICAgICAgICAgICAgPC9wPgorICAgICAgICAgLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImNhblBlcmZvcm1HZXN0dXJlcyIgZm9ybWF0PSJib29sZWFuIiAvPgorICAgICAgICA8IS0tIFNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHNlcnZpY2UgcHVycG9zZSBvciBiZWhhdmlvci4tLT4KICAgICAgICAgPGF0dHIgbmFtZT0iZGVzY3JpcHRpb24iIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIApAQCAtMzk4MSw5ICs0MDQ2LDkgQEAKICAgICAgICAgICAgICBzaG91bGQgYWx3YXlzIGJlIGZhbHNlIGZvciBNYXRlcmlhbCBhbmQgIGJleW9uZC4KICAgICAgICAgICAgICBAaGlkZSBEZXZlbG9wZXJzIHNob3VsZG4ndCBuZWVkIHRvIGNoYW5nZSB0aGlzLiAtLT4KICAgICAgICAgPGF0dHIgbmFtZT0idXNlRGlzYWJsZWRBbHBoYSIgZm9ybWF0PSJib29sZWFuIiAvPgotICAgICAgICA8IS0tIFRpbnQgdG8gYXBwbHkgdG8gdGhlIGJ1dHRvbiBncmFwaGljLiAtLT4KKyAgICAgICAgPCEtLSBUaW50IHRvIGFwcGx5IHRvIHRoZSB0aHVtYiBkcmF3YWJsZS4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InRodW1iVGludCIgZm9ybWF0PSJjb2xvciIgLz4KLSAgICAgICAgPCEtLSBCbGVuZGluZyBtb2RlIHVzZWQgdG8gYXBwbHkgdGhlIGJ1dHRvbiBncmFwaGljIHRpbnQuIC0tPgorICAgICAgICA8IS0tIEJsZW5kaW5nIG1vZGUgdXNlZCB0byBhcHBseSB0aGUgdGh1bWIgdGludC4gLS0+CiAgICAgICAgIDxhdHRyIG5hbWU9InRodW1iVGludE1vZGUiPgogICAgICAgICAgICAgPCEtLSBUaGUgdGludCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIGRyYXdhYmxlLgogICAgICAgICAgICAgICAgICBbU2EgKyAoMSAtIFNhKSpEYSwgUmMgPSBTYyArICgxIC0gU2EpKkRjXSAtLT4KQEAgLTQwMDMsNiArNDA2OCwzMCBAQAogICAgICAgICAgICAgICAgICByZXN1bHQgdG8gdmFsaWQgY29sb3IgdmFsdWVzLiBTYXR1cmF0ZShTICsgRCkgLS0+CiAgICAgICAgICAgICA8ZW51bSBuYW1lPSJhZGQiIHZhbHVlPSIxNiIgLz4KICAgICAgICAgPC9hdHRyPgorICAgICAgICA8IS0tIERyYXdhYmxlIGRpc3BsYXllZCBhdCBlYWNoIHByb2dyZXNzIHBvc2l0aW9uIG9uIGEgc2Vla2Jhci4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRpY2tNYXJrIiBmb3JtYXQ9InJlZmVyZW5jZSIgLz4KKyAgICAgICAgPCEtLSBUaW50IHRvIGFwcGx5IHRvIHRoZSB0aWNrIG1hcmsgZHJhd2FibGUuIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJ0aWNrTWFya1RpbnQiIGZvcm1hdD0iY29sb3IiIC8+CisgICAgICAgIDwhLS0gQmxlbmRpbmcgbW9kZSB1c2VkIHRvIGFwcGx5IHRoZSB0aWNrIG1hcmsgdGludC4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InRpY2tNYXJrVGludE1vZGUiPgorICAgICAgICAgICAgPCEtLSBUaGUgdGludCBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIGRyYXdhYmxlLgorICAgICAgICAgICAgICAgICBbU2EgKyAoMSAtIFNhKSpEYSwgUmMgPSBTYyArICgxIC0gU2EpKkRjXSAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9InNyY19vdmVyIiB2YWx1ZT0iMyIgLz4KKyAgICAgICAgICAgIDwhLS0gVGhlIHRpbnQgaXMgbWFza2VkIGJ5IHRoZSBhbHBoYSBjaGFubmVsIG9mIHRoZSBkcmF3YWJsZS4gVGhlIGRyYXdhYmxl4oCZcworICAgICAgICAgICAgICAgICBjb2xvciBjaGFubmVscyBhcmUgdGhyb3duIG91dC4gW1NhICogRGEsIFNjICogRGFdIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0ic3JjX2luIiB2YWx1ZT0iNSIgLz4KKyAgICAgICAgICAgIDwhLS0gVGhlIHRpbnQgaXMgZHJhd24gYWJvdmUgdGhlIGRyYXdhYmxlLCBidXQgd2l0aCB0aGUgZHJhd2FibGXigJlzIGFscGhhCisgICAgICAgICAgICAgICAgIGNoYW5uZWwgbWFza2luZyB0aGUgcmVzdWx0LiBbRGEsIFNjICogRGEgKyAoMSAtIFNhKSAqIERjXSAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9InNyY19hdG9wIiB2YWx1ZT0iOSIgLz4KKyAgICAgICAgICAgIDwhLS0gTXVsdGlwbGllcyB0aGUgY29sb3IgYW5kIGFscGhhIGNoYW5uZWxzIG9mIHRoZSBkcmF3YWJsZSB3aXRoIHRob3NlIG9mCisgICAgICAgICAgICAgICAgIHRoZSB0aW50LiBbU2EgKiBEYSwgU2MgKiBEY10gLS0+CisgICAgICAgICAgICA8ZW51bSBuYW1lPSJtdWx0aXBseSIgdmFsdWU9IjE0IiAvPgorICAgICAgICAgICAgPCEtLSBbU2EgKyBEYSAtIFNhICogRGEsIFNjICsgRGMgLSBTYyAqIERjXSAtLT4KKyAgICAgICAgICAgIDxlbnVtIG5hbWU9InNjcmVlbiIgdmFsdWU9IjE1IiAvPgorICAgICAgICAgICAgPCEtLSBDb21iaW5lcyB0aGUgdGludCBhbmQgZHJhd2FibGUgY29sb3IgYW5kIGFscGhhIGNoYW5uZWxzLCBjbGFtcGluZyB0aGUKKyAgICAgICAgICAgICAgICAgcmVzdWx0IHRvIHZhbGlkIGNvbG9yIHZhbHVlcy4gU2F0dXJhdGUoUyArIEQpIC0tPgorICAgICAgICAgICAgPGVudW0gbmFtZT0iYWRkIiB2YWx1ZT0iMTYiIC8+CisgICAgICAgIDwvYXR0cj4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCiAgICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9IlN0YWNrVmlldyI+CkBAIC03Nzc4LDYgKzc4NjcsMTIgQEAKICAgICAgICAgPGF0dHIgbmFtZT0ibGFiZWwiIC8+CiAgICAgICAgIDwhLS0gVGhlIGtleSBjaGFyYWN0ZXIgbWFwIGZpbGUgcmVzb3VyY2UuIC0tPgogICAgICAgICA8YXR0ciBuYW1lPSJrZXlib2FyZExheW91dCIgZm9ybWF0PSJyZWZlcmVuY2UiIC8+CisgICAgICAgIDwhLS0gVGhlIGxvY2FsZXMgdGhlIGdpdmVuIGtleWJvYXJkIGxheW91dCBjb3JyZXNwb25kcyB0by4gLS0+CisgICAgICAgIDxhdHRyIG5hbWU9ImxvY2FsZSIgZm9ybWF0PSJzdHJpbmciIC8+CisgICAgICAgIDwhLS0gVGhlIHZlbmRvciBJRCBvZiB0aGUgaGFyZHdhcmUgdGhlIGdpdmVuIGxheW91dCBjb3JyZXNwb25kcyB0by4gQGhpZGUgLS0+CisgICAgICAgIDxhdHRyIG5hbWU9InZlbmRvcklkIiBmb3JtYXQ9ImludGVnZXIiIC8+CisgICAgICAgIDwhLS0gVGhlIHByb2R1Y3QgSUQgb2YgdGhlIGhhcmR3YXJlIHRoZSBnaXZlbiBsYXlvdXQgY29ycmVzcG9uZHMgdG8uIEBoaWRlIC0tPgorICAgICAgICA8YXR0ciBuYW1lPSJwcm9kdWN0SWQiIGZvcm1hdD0iaW50ZWdlciIgLz4KICAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgogCiAgICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9Ik1lZGlhUm91dGVCdXR0b24iPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9hdHRyc19tYW5pZmVzdC54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzX21hbmlmZXN0LnhtbAppbmRleCAyYTExMDgxLi42ZWJhNzhhIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzX21hbmlmZXN0LnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2F0dHJzX21hbmlmZXN0LnhtbApAQCAtMTc0OCw2ICsxNzQ4LDEwIEBACiAgICAgICAgIDxhdHRyIG5hbWU9Imlzb2xhdGVkUHJvY2VzcyIgZm9ybWF0PSJib29sZWFuIiAvPgogICAgICAgICA8YXR0ciBuYW1lPSJzaW5nbGVVc2VyIiAvPgogICAgICAgICA8YXR0ciBuYW1lPSJlbmNyeXB0aW9uQXdhcmUiIC8+CisgICAgICAgIDwhLS0gSWYgdGhlIHNlcnZpY2UgaXMgYW4ge0BsaW5rIGFuZHJvaWQuUi5hdHRyI2lzb2xhdGVkUHJvY2Vzc30gc2VydmljZSwgdGhpcyBwZXJtaXRzIGEKKyAgICAgICAgICAgICBjbGllbnQgdG8gYmluZCB0byB0aGUgc2VydmljZSBhcyBpZiBpdCB3ZXJlIHJ1bm5pbmcgaXQgaXRzIG93biBwYWNrYWdlLiAgVGhlIHNlcnZpY2UKKyAgICAgICAgICAgICBtdXN0IGFsc28gYmUge0BsaW5rIGFuZHJvaWQuUi5hdHRyI2V4cG9ydGVkfSBpZiB0aGlzIGZsYWcgaXMgc2V0LiAtLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iZXh0ZXJuYWxTZXJ2aWNlIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gVGhlIDxjb2RlPnJlY2VpdmVyPC9jb2RlPiB0YWcgZGVjbGFyZXMgYW4KQEAgLTE4NTcsNiArMTg2MSwxMSBAQAogICAgICAgICA8YXR0ciBuYW1lPSJsb2NrVGFza01vZGUiIC8+CiAgICAgICAgIDxhdHRyIG5hbWU9InNob3dGb3JBbGxVc2VycyIgLz4KICAgICAgICAgPGF0dHIgbmFtZT0iZW5jcnlwdGlvbkF3YXJlIiAvPgorICAgICAgICA8IS0tIEBoaWRlIFRoaXMgYWN0aXZpdHkgaXMgYWx3YXlzIGZvY3VzYWJsZSByZWdhcmRsZXNzIG9mIGlmIGl0IGlzIGluIGEgdGFzay9zdGFjayB3aG9zZQorICAgICAgICAgICAgIGFjdGl2aXRpZXMgYXJlIG5vcm1hbGx5IG5vdCBmb2N1c2FibGUuCisgICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHtAbGluayBhbmRyb2lkLlIuYXR0ciNzdXBwb3J0c1BpY3R1cmVJblBpY3R1cmV9IGFjdGl2aXRpZXMgYXJlIHBsYWNlZAorICAgICAgICAgICAgIGluIGEgdGFzay9zdGFjayB0aGF0IGlzbid0IGZvY3VzYWJsZS4gVGhpcyBmbGFnIGFsbG93cyB0aGVtIHRvIGJlIGZvY3VzYWJsZS4tLT4KKyAgICAgICAgPGF0dHIgbmFtZT0iYWx3YXlzRm9jdXNhYmxlIiBmb3JtYXQ9ImJvb2xlYW4iIC8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIAogICAgIDwhLS0gVGhlIDxjb2RlPmFjdGl2aXR5LWFsaWFzPC9jb2RlPiB0YWcgZGVjbGFyZXMgYSBuZXcKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzLnhtbAppbmRleCBhZjhmZjJlLi43NzExODI1IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9ycy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCkBAIC0xMzAsOCArMTMwLDggQEAKICAgICA8ZHJhd2FibGUgbmFtZT0ibm90aWZpY2F0aW9uX3RlbXBsYXRlX2RpdmlkZXIiPiMyOTAwMDAwMDwvZHJhd2FibGU+CiAgICAgPGRyYXdhYmxlIG5hbWU9Im5vdGlmaWNhdGlvbl90ZW1wbGF0ZV9kaXZpZGVyX21lZGlhIj4jMjlmZmZmZmY8L2RyYXdhYmxlPgogCi0gICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9pY29uX2RlZmF1bHRfY29sb3IiPiNmZjYxNjE2MTwvY29sb3I+Ci0gICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9hY3Rpb25fY29sb3JfZmlsdGVyIj5AY29sb3Ivc2Vjb25kYXJ5X3RleHRfbWF0ZXJpYWxfbGlnaHQ8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJub3RpZmljYXRpb25fZGVmYXVsdF9jb2xvciI+Izc1NzU3NTwvY29sb3I+IDwhLS0gR3JheSA2MDAgLS0+CisgICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9pY29uX2RlZmF1bHRfY29sb3IiPkBjb2xvci9ub3RpZmljYXRpb25fZGVmYXVsdF9jb2xvcjwvY29sb3I+CiAKICAgICA8Y29sb3IgbmFtZT0ibm90aWZpY2F0aW9uX3Byb2dyZXNzX2JhY2tncm91bmRfY29sb3IiPkBjb2xvci9zZWNvbmRhcnlfdGV4dF9tYXRlcmlhbF9saWdodDwvY29sb3I+CiAKZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzX21hdGVyaWFsLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29sb3JzX21hdGVyaWFsLnhtbAppbmRleCA3Mzk5ZmE5Li5kZDE4NTQ0IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbG9yc19tYXRlcmlhbC54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb2xvcnNfbWF0ZXJpYWwueG1sCkBAIC00OCw2ICs0OCw4IEBACiAgICAgPGNvbG9yIG5hbWU9InByaW1hcnlfdGV4dF9kZWZhdWx0X21hdGVyaWFsX2xpZ2h0Ij4jZGUwMDAwMDA8L2NvbG9yPgogICAgIDwhLS0gNTQlIGJsYWNrIC0tPgogICAgIDxjb2xvciBuYW1lPSJzZWNvbmRhcnlfdGV4dF9kZWZhdWx0X21hdGVyaWFsX2xpZ2h0Ij4jOGEwMDAwMDA8L2NvbG9yPgorICAgIDwhLS0gMzglIGJsYWNrIC0tPgorICAgIDxjb2xvciBuYW1lPSJ0ZXJ0aWFyeV90ZXh0X2RlZmF1bHRfbWF0ZXJpYWxfbGlnaHQiPiM2MTAwMDAwMDwvY29sb3I+CiAKICAgICA8IS0tIDEwMCUgd2hpdGUgLS0+CiAgICAgPGNvbG9yIG5hbWU9InByaW1hcnlfdGV4dF9kZWZhdWx0X21hdGVyaWFsX2RhcmsiPiNmZmZmZmZmZjwvY29sb3I+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbmZpZy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2NvbmZpZy54bWwKaW5kZXggOTdjMGUwNy4uNThjNDA0NiAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9jb25maWcueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvY29uZmlnLnhtbApAQCAtMTAxOCw2ICsxMDE4LDEwIEBACiAgICAgPCEtLSBMaWdodCBzZW5zb3IgZXZlbnQgcmF0ZSBpbiBtaWxsaXNlY29uZHMgZm9yIGF1dG9tYXRpYyBicmlnaHRuZXNzIGNvbnRyb2wuIC0tPgogICAgIDxpbnRlZ2VyIG5hbWU9ImNvbmZpZ19hdXRvQnJpZ2h0bmVzc0xpZ2h0U2Vuc29yUmF0ZSI+MjUwPC9pbnRlZ2VyPgogCisgICAgPCEtLSBUaGUgbWF4aW11bSByYW5nZSBvZiBnYW1tYSBhZGp1c3RtZW50IHBvc3NpYmxlIHVzaW5nIHRoZSBzY3JlZW4KKyAgICAgICAgIGF1dG8tYnJpZ2h0bmVzcyBhZGp1c3RtZW50IHNldHRpbmcuIC0tPgorICAgIDxmcmFjdGlvbiBuYW1lPSJjb25maWdfYXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEiPjMwMCU8L2ZyYWN0aW9uPgorCiAgICAgPCEtLSBJZiB3ZSBhbGxvdyBhdXRvbWF0aWMgYWRqdXN0bWVudCBvZiBzY3JlZW4gYnJpZ2h0bmVzcyB3aGlsZSBkb3ppbmcsIGhvdyBtYW55IHRpbWVzIHdlIHdhbnQKICAgICAgICAgIHRvIHJlZHVjZSBpdCB0byBwcmVzZXJ2ZSB0aGUgYmF0dGVyeS4gVmFsdWUgb2YgMTAwJSBtZWFucyBubyBzY2FsaW5nLiAtLT4KICAgICA8ZnJhY3Rpb24gbmFtZT0iY29uZmlnX3NjcmVlbkF1dG9CcmlnaHRuZXNzRG96ZVNjYWxlRmFjdG9yIj4xMDAlPC9mcmFjdGlvbj4KQEAgLTEwMzUsNiArMTAzOSw5IEBACiAgICAgICAgICBhZGFwdCB0byB0aGUgZW52aXJvbm1lbnQuICBUaGlzIG1vZGUgbWF5IGJlIGJldHRlciBzdWl0ZWQgZm9yIHdhdGNoZXMuIC0tPgogICAgIDxib29sIG5hbWU9ImNvbmZpZ19hdXRvQnJpZ2h0bmVzc1Jlc2V0QW1iaWVudEx1eEFmdGVyV2FybVVwIj50cnVlPC9ib29sPgogCisgICAgPCEtLSBQZXJpb2Qgb2YgdGltZSBpbiB3aGljaCB0byBjb25zaWRlciBsaWdodCBzYW1wbGVzIGluIG1pbGxpc2Vjb25kcy4gLS0+CisgICAgPGludGVnZXIgbmFtZT0iY29uZmlnX2F1dG9CcmlnaHRuZXNzQW1iaWVudExpZ2h0SG9yaXpvbiI+MTAwMDA8L2ludGVnZXI+CisKICAgICA8IS0tIFNjcmVlbiBicmlnaHRuZXNzIHVzZWQgdG8gZGltIHRoZSBzY3JlZW4gd2hlbiB0aGUgdXNlciBhY3Rpdml0eQogICAgICAgICAgdGltZW91dCBleHBpcmVzLiAgTWF5IGJlIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbGxvd2VkIGJyaWdodG5lc3Mgc2V0dGluZwogICAgICAgICAgdGhhdCBjYW4gYmUgc2V0IGJ5IHRoZSB1c2VyLiAtLT4KQEAgLTIxNTQsMTEgKzIxNjEsNiBAQAogICAgICAgICBzdHJpbmcgdGhhdCdzIHN0b3JlZCBpbiA4LWJpdCB1bnBhY2tlZCBmb3JtYXQpIGNoYXJhY3RlcnMuLS0+CiAgICAgPGJvb2wgdHJhbnNsYXRhYmxlPSJmYWxzZSIgbmFtZT0iY29uZmlnX3Ntc19kZWNvZGVfZ3NtXzhiaXRfZGF0YSI+ZmFsc2U8L2Jvb2w+CiAKLSAgICA8IS0tIExpc3Qgb2YgcGFja2FnZSBuYW1lcyAob3JkZXJlZCBieSBwcmVmZXJlbmNlKSBwcm92aWRpbmcgV2ViVmlldyBpbXBsZW1lbnRhdGlvbnMuIC0tPgotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29uZmlnX3dlYlZpZXdQYWNrYWdlTmFtZXMiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPgotICAgICAgPGl0ZW0+Y29tLmFuZHJvaWQud2VidmlldzwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQogICAgIDwhLS0gSWYgRU1TIGlzIG5vdCBzdXBwb3J0ZWQsIGZyYW1ld29yayBicmVha3MgZG93biBFTVMgaW50byBzaW5nbGUgc2VnbWVudCBTTVMKICAgICAgICAgIGFuZCBhZGRzIHBhZ2UgaW5mbyAiIHgveSIuIFRoaXMgY29uZmlnIGlzIHVzZWQgdG8gc2V0IHdoaWNoIGNhcnJpZXIgZG9lc24ndAogICAgICAgICAgc3VwcG9ydCBFTVMgYW5kIHdoZXRoZXIgcGFnZSBpbmZvIHNob3VsZCBiZSBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQuCkBAIC0yMzY4LDcgKzIzNzAsNyBAQAogICAgIDwhLS0gU2V0IGluaXRpYWwgTWF4UmV0cnkgdmFsdWUgZm9yIG9wZXJhdG9ycyAtLT4KICAgICA8aW50ZWdlciBuYW1lPSJjb25maWdfbWRjX2luaXRpYWxfbWF4X3JldHJ5Ij4xPC9pbnRlZ2VyPgogCi0gICAgPCEtLSBUaGUgT0VNIHNwZWNpZmllZCBzZW5zb3IgdHlwZSBmb3IgdGhlIGdlc3R1cmUgdG8gbGF1bmNoIHRoZSBjYW1lYXIgYXBwLiAtLT4KKyAgICA8IS0tIFRoZSBPRU0gc3BlY2lmaWVkIHNlbnNvciB0eXBlIGZvciB0aGUgZ2VzdHVyZSB0byBsYXVuY2ggdGhlIGNhbWVyYSBhcHAuIC0tPgogICAgIDxpbnRlZ2VyIG5hbWU9ImNvbmZpZ19jYW1lcmFMYXVuY2hHZXN0dXJlU2Vuc29yVHlwZSI+LTE8L2ludGVnZXI+CiAgICAgPCEtLSBUaGUgT0VNIHNwZWNpZmllZCBzZW5zb3Igc3RyaW5nIHR5cGUgZm9yIHRoZSBnZXN0dXJlIHRvIGxhdW5jaCBjYW1lcmEgYXBwLCB0aGlzIHZhbHVlCiAgICAgICAgICBtdXN0IG1hdGNoIHRoZSB2YWx1ZSBvZiBjb25maWdfY2FtZXJhTGF1bmNoR2VzdHVyZVNlbnNvclR5cGUgaW4gT0VNJ3MgSEFMIC0tPgpAQCAtMjQwNSw0ICsyNDA3LDE4IEBACiAgICAgICAgICB0aGF0IGhhdmUgbm90IHJlcXVlc3RlZCBkb2luZyBzbyAodmlhIHRoZSBXaW5kb3dNYW5hZ2VyLkZMQUdfRFJBV1NfU1lTVEVNX0JBUl9CQUNLR1JPVU5EUwogICAgICAgICAgZmxhZykuIC0tPgogICAgIDxib29sIG5hbWU9ImNvbmZpZ19mb3JjZVdpbmRvd0RyYXdzU3RhdHVzQmFyQmFja2dyb3VuZCI+dHJ1ZTwvYm9vbD4KKworICAgIDwhLS0gRGVmYXVsdCBib3VuZHMgW2xlZnQgdG9wIHJpZ2h0IGJvdHRvbV0gb24gc2NyZWVuIGZvciBwaWN0dXJlLWluLXBpY3R1cmUgd2luZG93cy4gLS0+CisgICAgPHN0cmluZyB0cmFuc2xhdGFibGU9ImZhbHNlIiBuYW1lPSJjb25maWdfZGVmYXVsdFBpY3R1cmVJblBpY3R1cmVCb3VuZHMiPiIwIDAgMTAwIDEwMCI8L3N0cmluZz4KKworICAgIDwhLS0gQ29udHJvbHMgdGhlIHNuYXAgbW9kZSBmb3IgdGhlIGRvY2tlZCBzdGFjayBkaXZpZGVyCisgICAgICAgICAgICAgMCAtIDMgc25hcCB0YXJnZXRzOiBsZWZ0L3RvcCBoYXMgMTY6OSByYXRpbywgMToxLCBhbmQgcmlnaHQvYm90dG9tIGhhcyAxNjo5IHJhdGlvCisgICAgICAgICAgICAgMSAtIDMgc25hcCB0YXJnZXRzOiBmaXhlZCByYXRpbywgMToxLCAoMSAtIGZpeGVkIHJhdGlvKQorICAgICAgICAgICAgIDIgLSAxIHNuYXAgdGFyZ2V0OiAxOjEKKyAgICAtLT4KKyAgICA8aW50ZWdlciBuYW1lPSJjb25maWdfZG9ja2VkU3RhY2tEaXZpZGVyU25hcE1vZGUiPjA8L2ludGVnZXI+CisKKyAgICA8IS0tIExpc3Qgb2YgY29tbWEgc2VwYXJhdGVkIHBhY2thZ2UgbmFtZXMgZm9yIHdoaWNoIHdlIHRoZSBzeXN0ZW0gd2lsbCBub3Qgc2hvdyBjcmFzaCwgQU5SLAorICAgICAgICAgZXRjLiBkaWFsb2dzLiAtLT4KKyAgICA8c3RyaW5nIHRyYW5zbGF0YWJsZT0iZmFsc2UiIG5hbWU9ImNvbmZpZ19hcHBzTm90UmVwb3J0aW5nQ3Jhc2hlcyI+PC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCBiMTY3NzExLi5iMjQ4MmNkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCkBAIC0zNSw2ICszNSwxMyBAQAogICAgIDxkaW1lbiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl9oZWlnaHRfbGFuZHNjYXBlIj40OGRwPC9kaW1lbj4KICAgICA8IS0tIFdpZHRoIG9mIHRoZSBuYXZpZ2F0aW9uIGJhciB3aGVuIGl0IGlzIHBsYWNlZCB2ZXJ0aWNhbGx5IG9uIHRoZSBzY3JlZW4gLS0+CiAgICAgPGRpbWVuIG5hbWU9Im5hdmlnYXRpb25fYmFyX3dpZHRoIj40OGRwPC9kaW1lbj4KKyAgICA8IS0tIEhlaWdodCBvZiB0aGUgYm90dG9tIG5hdmlnYXRpb24gLyBzeXN0ZW0gYmFyIGluIGNhciBtb2RlLiAtLT4KKyAgICA8ZGltZW4gbmFtZT0ibmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2Nhcl9tb2RlIj45NmRwPC9kaW1lbj4KKyAgICA8IS0tIEhlaWdodCBvZiB0aGUgYm90dG9tIG5hdmlnYXRpb24gYmFyIGluIHBvcnRyYWl0OyBvZnRlbiB0aGUgc2FtZSBhcworICAgICAgICAgQGRpbWVuL25hdmlnYXRpb25fYmFyX2hlaWdodF9jYXJfbW9kZSAtLT4KKyAgICA8ZGltZW4gbmFtZT0ibmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2xhbmRzY2FwZV9jYXJfbW9kZSI+OTZkcDwvZGltZW4+CisgICAgPCEtLSBXaWR0aCBvZiB0aGUgbmF2aWdhdGlvbiBiYXIgd2hlbiBpdCBpcyBwbGFjZWQgdmVydGljYWxseSBvbiB0aGUgc2NyZWVuIGluIGNhciBtb2RlIC0tPgorICAgIDxkaW1lbiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl93aWR0aF9jYXJfbW9kZSI+OTZkcDwvZGltZW4+CiAgICAgPCEtLSBIZWlnaHQgb2Ygbm90aWZpY2F0aW9uIGljb25zIGluIHRoZSBzdGF0dXMgYmFyIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzdGF0dXNfYmFyX2ljb25fc2l6ZSI+MjRkaXA8L2RpbWVuPgogICAgIDwhLS0gU2l6ZSBvZiB0aGUgZ2lhbnQgbnVtYmVyICh1bnJlYWQgY291bnQpIGluIHRoZSBub3RpZmljYXRpb25zIC0tPgpAQCAtNDcsNyArNTQsNyBAQAogCiAgICAgPCEtLSBIb3cgbXVjaCB0aGUgY29udGVudCBpbiB0aGUgZGl2aWRlciBpcyBpbnNldCBmcm9tIHRoZSB3aW5kb3cgYm91bmRzIHdoZW4gcmVzdGluZy4gVXNlZCB0bwogICAgICAgICAgY2FsY3VsYXRlIHRoZSBib3VuZHMgb2YgdGhlIHN0YWNrcy0tPgotICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9pbnNldHMiPjE4ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9pbnNldHMiPjE5ZHA8L2RpbWVuPgogCiAgICAgPCEtLSBNaW4gd2lkdGggZm9yIGEgdGFibGV0IGRldmljZSAtLT4KICAgICA8ZGltZW4gbmFtZT0ibWluX3hsYXJnZV9zY3JlZW5fd2lkdGgiPjgwMGRwPC9kaW1lbj4KQEAgLTE0Miw2ICsxNDksOSBAQAogICAgIDwhLS0gaGVpZ2h0IG9mIHRoZSBjb250ZW50IG1hcmdpbiB0byBhY2NvbW9kYXRlIGZvciB0aGUgaGVhZGVyIC0tPgogICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fdG9wIj4zMGRwPC9kaW1lbj4KIAorICAgIDwhLS0gaGVpZ2h0IG9mIHRoZSBjb250ZW50IG1hcmdpbiBvbiB0aGUgYm90dG9tIC0tPgorICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fYm90dG9tIj4xM2RwPC9kaW1lbj4KKwogICAgIDwhLS0gaGVpZ2h0IG9mIG5vdGlmaWNhdGlvbiBoZWFkZXIgdmlldyBpZiBwcmVzZW50IC0tPgogICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25faGVhZGVyX2hlaWdodCI+MzJkcDwvZGltZW4+CiAKQEAgLTE1MywxNCArMTYzLDExIEBACiAgICAgPCEtLSBUaGUgd2lkdGggb2YgdGhlIGJpZyBpY29ucyBpbiBub3RpZmljYXRpb25zLiAtLT4KICAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX2xhcmdlX2ljb25faGVpZ2h0Ij42NGRwPC9kaW1lbj4KIAotICAgIDwhLS0gIE1pbiBoZWlnaHQgb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250ZW50LiAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21pbl9jb250ZW50X2hlaWdodCI+NTRkcDwvZGltZW4+Ci0KICAgICA8IS0tIFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBhcHAgbmFtZSBpbiB0aGUgaGVhZGVyIGlmIGl0IHNocmlua3MgLS0+CiAgICAgPGRpbWVuIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfc2hyaW5rX21pbl93aWR0aCI+NzJkcDwvZGltZW4+CiAKLSAgICA8IS0tIFRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGUgY29udGVudCBpZiB0aGVyZSBpcyBhIHBpY3R1cmUgcHJlc2VudCB3aXRoIGJpZyBwaWN0dXJlIC0tPgotICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fYmlnX3BpY3R1cmVfY29udGVudF9taW5faGVpZ2h0X3dpdGhfcGljdHVyZSI+NDFkcDwvZGltZW4+CisgICAgPCEtLSBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGNvbnRlbnQgaWYgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byBsaW5lcyBvciBhIHBpY3R1cmUtLT4KKyAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21pbl9jb250ZW50X2hlaWdodCI+NDFkcDwvZGltZW4+CiAKICAgICA8IS0tIFByZWZlcnJlZCB3aWR0aCBvZiB0aGUgc2VhcmNoIHZpZXcuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJzZWFyY2hfdmlld19wcmVmZXJyZWRfd2lkdGgiPjMyMGRpcDwvZGltZW4+CkBAIC00MjksNCArNDM2LDYgQEAKIAogICAgIDxpdGVtIHR5cGU9ImRpbWVuIiBmb3JtYXQ9ImludGVnZXIiIG5hbWU9InRpbWVfcGlja2VyX2NvbHVtbl9zdGFydF9tYXRlcmlhbCI+MDwvaXRlbT4KICAgICA8aXRlbSB0eXBlPSJkaW1lbiIgZm9ybWF0PSJpbnRlZ2VyIiBuYW1lPSJ0aW1lX3BpY2tlcl9jb2x1bW5fZW5kX21hdGVyaWFsIj4xPC9pdGVtPgorCisgICAgPGl0ZW0gdHlwZT0iZnJhY3Rpb24iIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2ZpeGVkX3JhdGlvIj4zNC4xNSU8L2l0ZW0+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvbG9jYWxlX2NvbmZpZy54bWwgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2xvY2FsZV9jb25maWcueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmQ5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL2xvY2FsZV9jb25maWcueG1sCkBAIC0wLDAgKzEsNDk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorKiogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKy0tPgorPHJlc291cmNlcyB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisKKyAgICA8c3RyaW5nLWFycmF5IHRyYW5zbGF0YWJsZT0iZmFsc2UiIG5hbWU9InN1cHBvcnRlZF9sb2NhbGVzIj4KKyAgICAgICAgPGl0ZW0+YWYtTkE8L2l0ZW0+IDwhLS0gQWZyaWthYW5zIChOYW1pYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YWYtWkE8L2l0ZW0+IDwhLS0gQWZyaWthYW5zIChTb3V0aCBBZnJpY2EpIC0tPgorICAgICAgICA8aXRlbT5hZ3EtQ008L2l0ZW0+IDwhLS0gQWdoZW0gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+YWstR0g8L2l0ZW0+IDwhLS0gQWthbiAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5hbS1FVDwvaXRlbT4gPCEtLSBBbWhhcmljIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPmFyLUFFPC9pdGVtPiA8IS0tIEFyYWJpYyAoVW5pdGVkIEFyYWIgRW1pcmF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5hci1CSDwvaXRlbT4gPCEtLSBBcmFiaWMgKEJhaHJhaW4pIC0tPgorICAgICAgICA8aXRlbT5hci1ESjwvaXRlbT4gPCEtLSBBcmFiaWMgKERqaWJvdXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItRFo8L2l0ZW0+IDwhLS0gQXJhYmljIChBbGdlcmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItRUc8L2l0ZW0+IDwhLS0gQXJhYmljIChFZ3lwdCkgLS0+CisgICAgICAgIDxpdGVtPmFyLUVIPC9pdGVtPiA8IS0tIEFyYWJpYyAoV2VzdGVybiBTYWhhcmEpIC0tPgorICAgICAgICA8aXRlbT5hci1FUjwvaXRlbT4gPCEtLSBBcmFiaWMgKEVyaXRyZWEpIC0tPgorICAgICAgICA8aXRlbT5hci1JTDwvaXRlbT4gPCEtLSBBcmFiaWMgKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmFyLUlRPC9pdGVtPiA8IS0tIEFyYWJpYyAoSXJhcSkgLS0+CisgICAgICAgIDxpdGVtPmFyLUpPPC9pdGVtPiA8IS0tIEFyYWJpYyAoSm9yZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItS008L2l0ZW0+IDwhLS0gQXJhYmljIChDb21vcm9zKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItS1c8L2l0ZW0+IDwhLS0gQXJhYmljIChLdXdhaXQpIC0tPgorICAgICAgICA8aXRlbT5hci1MQjwvaXRlbT4gPCEtLSBBcmFiaWMgKExlYmFub24pIC0tPgorICAgICAgICA8aXRlbT5hci1MWTwvaXRlbT4gPCEtLSBBcmFiaWMgKExpYnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItTUE8L2l0ZW0+IDwhLS0gQXJhYmljIChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItTVI8L2l0ZW0+IDwhLS0gQXJhYmljIChNYXVyaXRhbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItT008L2l0ZW0+IDwhLS0gQXJhYmljIChPbWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItUFM8L2l0ZW0+IDwhLS0gQXJhYmljIChQYWxlc3RpbmUpIC0tPgorICAgICAgICA8aXRlbT5hci1RQTwvaXRlbT4gPCEtLSBBcmFiaWMgKFFhdGFyKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU0E8L2l0ZW0+IDwhLS0gQXJhYmljIChTYXVkaSBBcmFiaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1TRDwvaXRlbT4gPCEtLSBBcmFiaWMgKFN1ZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU088L2l0ZW0+IDwhLS0gQXJhYmljIChTb21hbGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXItU1M8L2l0ZW0+IDwhLS0gQXJhYmljIChTb3V0aCBTdWRhbikgLS0+CisgICAgICAgIDxpdGVtPmFyLVNZPC9pdGVtPiA8IS0tIEFyYWJpYyAoU3lyaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1URDwvaXRlbT4gPCEtLSBBcmFiaWMgKENoYWQpIC0tPgorICAgICAgICA8aXRlbT5hci1UTjwvaXRlbT4gPCEtLSBBcmFiaWMgKFR1bmlzaWEpIC0tPgorICAgICAgICA8aXRlbT5hci1YQjwvaXRlbT4gPCEtLSBSaWdodC10by1sZWZ0IHBzZXVkb2xvY2FsZSAtLT4KKyAgICAgICAgPGl0ZW0+YXItWUU8L2l0ZW0+IDwhLS0gQXJhYmljIChZZW1lbikgLS0+CisgICAgICAgIDxpdGVtPmFzLUlOPC9pdGVtPiA8IS0tIEFzc2FtZXNlIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmFzYS1UWjwvaXRlbT4gPCEtLSBBc3UgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YXotQ3lybC1BWjwvaXRlbT4gPCEtLSBBemVyYmFpamFuaSAoQ3lyaWxsaWMsQXplcmJhaWphbikgLS0+CisgICAgICAgIDxpdGVtPmF6LUxhdG4tQVo8L2l0ZW0+IDwhLS0gQXplcmJhaWphbmkgKExhdGluLEF6ZXJiYWlqYW4pIC0tPgorICAgICAgICA8aXRlbT5iYXMtQ008L2l0ZW0+IDwhLS0gQmFzYWEgKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+YmUtQlk8L2l0ZW0+IDwhLS0gQmVsYXJ1c2lhbiAoQmVsYXJ1cykgLS0+CisgICAgICAgIDxpdGVtPmJlbS1aTTwvaXRlbT4gPCEtLSBCZW1iYSAoWmFtYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YmV6LVRaPC9pdGVtPiA8IS0tIEJlbmEgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YmctQkc8L2l0ZW0+IDwhLS0gQnVsZ2FyaWFuIChCdWxnYXJpYSkgLS0+CisgICAgICAgIDxpdGVtPmJtLU1MPC9pdGVtPiA8IS0tIEJhbWJhcmEgKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5ibi1CRDwvaXRlbT4gPCEtLSBCZW5nYWxpIChCYW5nbGFkZXNoKSAtLT4KKyAgICAgICAgPGl0ZW0+Ym4tSU48L2l0ZW0+IDwhLS0gQmVuZ2FsaSAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5iby1DTjwvaXRlbT4gPCEtLSBUaWJldGFuIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPmJvLUlOPC9pdGVtPiA8IS0tIFRpYmV0YW4gKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+YnItRlI8L2l0ZW0+IDwhLS0gQnJldG9uIChGcmFuY2UpIC0tPgorICAgICAgICA8aXRlbT5icngtSU48L2l0ZW0+IDwhLS0gQm9kbyAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5icy1DeXJsLUJBPC9pdGVtPiA8IS0tIEJvc25pYW4gKEN5cmlsbGljLEJvc25pYSAmIEhlcnplZ292aW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+YnMtTGF0bi1CQTwvaXRlbT4gPCEtLSBCb3NuaWFuIChMYXRpbixCb3NuaWEgJiBIZXJ6ZWdvdmluYSkgLS0+CisgICAgICAgIDxpdGVtPmNhLUFEPC9pdGVtPiA8IS0tIENhdGFsYW4gKEFuZG9ycmEpIC0tPgorICAgICAgICA8aXRlbT5jYS1FUzwvaXRlbT4gPCEtLSBDYXRhbGFuIChTcGFpbikgLS0+CisgICAgICAgIDxpdGVtPmNhLUZSPC9pdGVtPiA8IS0tIENhdGFsYW4gKEZyYW5jZSkgLS0+CisgICAgICAgIDxpdGVtPmNhLUlUPC9pdGVtPiA8IS0tIENhdGFsYW4gKEl0YWx5KSAtLT4KKyAgICAgICAgPGl0ZW0+Y2UtUlU8L2l0ZW0+IDwhLS0gQ2hlY2hlbiAoUnVzc2lhKSAtLT4KKyAgICAgICAgPGl0ZW0+Y2dnLVVHPC9pdGVtPiA8IS0tIENoaWdhIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5jaHItVVM8L2l0ZW0+IDwhLS0gQ2hlcm9rZWUgKFVuaXRlZCBTdGF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5jcy1DWjwvaXRlbT4gPCEtLSBDemVjaCAoQ3plY2ggUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5jeS1HQjwvaXRlbT4gPCEtLSBXZWxzaCAoVW5pdGVkIEtpbmdkb20pIC0tPgorICAgICAgICA8aXRlbT5kYS1ESzwvaXRlbT4gPCEtLSBEYW5pc2ggKERlbm1hcmspIC0tPgorICAgICAgICA8aXRlbT5kYS1HTDwvaXRlbT4gPCEtLSBEYW5pc2ggKEdyZWVubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmRhdi1LRTwvaXRlbT4gPCEtLSBUYWl0YSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5kZS1BVDwvaXRlbT4gPCEtLSBHZXJtYW4gKEF1c3RyaWEpIC0tPgorICAgICAgICA8aXRlbT5kZS1CRTwvaXRlbT4gPCEtLSBHZXJtYW4gKEJlbGdpdW0pIC0tPgorICAgICAgICA8aXRlbT5kZS1DSDwvaXRlbT4gPCEtLSBHZXJtYW4gKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtREU8L2l0ZW0+IDwhLS0gR2VybWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtTEk8L2l0ZW0+IDwhLS0gR2VybWFuIChMaWVjaHRlbnN0ZWluKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGUtTFU8L2l0ZW0+IDwhLS0gR2VybWFuIChMdXhlbWJvdXJnKSAtLT4KKyAgICAgICAgPGl0ZW0+ZGplLU5FPC9pdGVtPiA8IS0tIFphcm1hIChOaWdlcikgLS0+CisgICAgICAgIDxpdGVtPmRzYi1ERTwvaXRlbT4gPCEtLSBMb3dlciBTb3JiaWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZHVhLUNNPC9pdGVtPiA8IS0tIER1YWxhIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmR5by1TTjwvaXRlbT4gPCEtLSBKb2xhLUZvbnlpIChTZW5lZ2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+ZHotQlQ8L2l0ZW0+IDwhLS0gRHpvbmdraGEgKEJodXRhbikgLS0+CisgICAgICAgIDxpdGVtPmVidS1LRTwvaXRlbT4gPCEtLSBFbWJ1IChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmVlLUdIPC9pdGVtPiA8IS0tIEV3ZSAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5lZS1URzwvaXRlbT4gPCEtLSBFd2UgKFRvZ28pIC0tPgorICAgICAgICA8aXRlbT5lbC1DWTwvaXRlbT4gPCEtLSBHcmVlayAoQ3lwcnVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZWwtR1I8L2l0ZW0+IDwhLS0gR3JlZWsgKEdyZWVjZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUFHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEFudGlndWEgJiBCYXJidWRhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQUk8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQW5ndWlsbGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1BUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChBbWVyaWNhbiBTYW1vYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUFUPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEF1c3RyaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1BVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChBdXN0cmFsaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1CQjwvaXRlbT4gPCEtLSBFbmdsaXNoIChCYXJiYWRvcykgLS0+CisgICAgICAgIDxpdGVtPmVuLUJFPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJlbGdpdW0pIC0tPgorICAgICAgICA8aXRlbT5lbi1CSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChCdXJ1bmRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQmVybXVkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUJTPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJhaGFtYXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1CVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChCb3Rzd2FuYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUJaPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEJlbGl6ZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUNBPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENhbmFkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUNDPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENvY29zIChLZWVsaW5nKSBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tQ0g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1DSzwvaXRlbT4gPCEtLSBFbmdsaXNoIChDb29rIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1DTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmVuLUNYPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKENocmlzdG1hcyBJc2xhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1DWTwvaXRlbT4gPCEtLSBFbmdsaXNoIChDeXBydXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1ERTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tREc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRGllZ28gR2FyY2lhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tREs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRGVubWFyaykgLS0+CisgICAgICAgIDxpdGVtPmVuLURNPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKERvbWluaWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRVI8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRXJpdHJlYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUZJPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEZpbmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5lbi1GSjwvaXRlbT4gPCEtLSBFbmdsaXNoIChGaWppKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRks8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoRmFsa2xhbmQgSXNsYW5kcyAoSXNsYXMgTWFsdmluYXMpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tRk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWljcm9uZXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUdCPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFVuaXRlZCBLaW5nZG9tKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR0Q8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR3JlbmFkYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUdHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKEd1ZXJuc2V5KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR0g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR2hhbmEpIC0tPgorICAgICAgICA8aXRlbT5lbi1HSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHaWJyYWx0YXIpIC0tPgorICAgICAgICA8aXRlbT5lbi1HTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHYW1iaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1HVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChHdWFtKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tR1k8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoR3V5YW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSEs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSG9uZyBLb25nKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSUU8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSXJlbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmVuLUlMPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmVuLUlNPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKElzbGUgb2YgTWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tSU48L2l0ZW0+IDwhLS0gRW5nbGlzaCAoSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1JTzwvaXRlbT4gPCEtLSBFbmdsaXNoIChCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkpIC0tPgorICAgICAgICA8aXRlbT5lbi1KRTwvaXRlbT4gPCEtLSBFbmdsaXNoIChKZXJzZXkpIC0tPgorICAgICAgICA8aXRlbT5lbi1KTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChKYW1haWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tS0U8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1LSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChLaXJpYmF0aSkgLS0+CisgICAgICAgIDxpdGVtPmVuLUtOPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN0LiBLaXR0cyAmIE5ldmlzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tS1k8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQ2F5bWFuIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1MQzwvaXRlbT4gPCEtLSBFbmdsaXNoIChTdC4gTHVjaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1MUjwvaXRlbT4gPCEtLSBFbmdsaXNoIChMaWJlcmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTFM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTGVzb3RobykgLS0+CisgICAgICAgIDxpdGVtPmVuLU1HPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE1hZGFnYXNjYXIpIC0tPgorICAgICAgICA8aXRlbT5lbi1NSDwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYXJzaGFsbCBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTU88L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWFjYXUpIC0tPgorICAgICAgICA8aXRlbT5lbi1NUDwvaXRlbT4gPCEtLSBFbmdsaXNoIChOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1NUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChNb250c2VycmF0KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTVQ8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTWFsdGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1NVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYXVyaXRpdXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1NVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYWxhd2kpIC0tPgorICAgICAgICA8aXRlbT5lbi1NWTwvaXRlbT4gPCEtLSBFbmdsaXNoIChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5BPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5hbWliaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1ORjwvaXRlbT4gPCEtLSBFbmdsaXNoIChOb3Jmb2xrIElzbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5HPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1OTDwvaXRlbT4gPCEtLSBFbmdsaXNoIChOZXRoZXJsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLU5SPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5hdXJ1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tTlU8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoTml1ZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLU5aPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKE5ldyBaZWFsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUEc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUGFwdWEgTmV3IEd1aW5lYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVBIPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFBoaWxpcHBpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUEs8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUGFraXN0YW4pIC0tPgorICAgICAgICA8aXRlbT5lbi1QTjwvaXRlbT4gPCEtLSBFbmdsaXNoIChQaXRjYWlybiBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tUFI8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoUHVlcnRvIFJpY28pIC0tPgorICAgICAgICA8aXRlbT5lbi1QVzwvaXRlbT4gPCEtLSBFbmdsaXNoIChQYWxhdSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVJXPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFJ3YW5kYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNCPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNvbG9tb24gSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVNDPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNleWNoZWxsZXMpIC0tPgorICAgICAgICA8aXRlbT5lbi1TRDwvaXRlbT4gPCEtLSBFbmdsaXNoIChTdWRhbikgLS0+CisgICAgICAgIDxpdGVtPmVuLVNFPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN3ZWRlbikgLS0+CisgICAgICAgIDxpdGVtPmVuLVNHPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNpbmdhcG9yZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNIPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFN0LiBIZWxlbmEpIC0tPgorICAgICAgICA8aXRlbT5lbi1TSTwvaXRlbT4gPCEtLSBFbmdsaXNoIChTbG92ZW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNMPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNpZXJyYSBMZW9uZSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVNTPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFNvdXRoIFN1ZGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tU1g8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU2ludCBNYWFydGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tU1o8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3dhemlsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVEM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVHVya3MgJiBDYWljb3MgSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVRLPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFRva2VsYXUpIC0tPgorICAgICAgICA8aXRlbT5lbi1UTzwvaXRlbT4gPCEtLSBFbmdsaXNoIChUb25nYSkgLS0+CisgICAgICAgIDxpdGVtPmVuLVRUPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFRyaW5pZGFkICYgVG9iYWdvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVFY8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVHV2YWx1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVFo8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5lbi1VRzwvaXRlbT4gPCEtLSBFbmdsaXNoIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5lbi1VTTwvaXRlbT4gPCEtLSBFbmdsaXNoIChVLlMuIE91dGx5aW5nIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1VUzwvaXRlbT4gPCEtLSBFbmdsaXNoIChVbml0ZWQgU3RhdGVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVkM8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU3QuIFZpbmNlbnQgJiBHcmVuYWRpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tVkc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoQnJpdGlzaCBWaXJnaW4gSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmVuLVZJPC9pdGVtPiA8IS0tIEVuZ2xpc2ggKFUuUy4gVmlyZ2luIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5lbi1WVTwvaXRlbT4gPCEtLSBFbmdsaXNoIChWYW51YXR1KSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tV1M8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU2Ftb2EpIC0tPgorICAgICAgICA8aXRlbT5lbi1YQTwvaXRlbT4gPCEtLSBMZWZ0LXRvLXJpZ2h0IHBzZXVkb2xvY2FsZSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWkE8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoU291dGggQWZyaWNhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWk08L2l0ZW0+IDwhLS0gRW5nbGlzaCAoWmFtYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZW4tWlc8L2l0ZW0+IDwhLS0gRW5nbGlzaCAoWmltYmFid2UpIC0tPgorICAgICAgICA8aXRlbT5lcy1BUjwvaXRlbT4gPCEtLSBTcGFuaXNoIChBcmdlbnRpbmEpIC0tPgorICAgICAgICA8aXRlbT5lcy1CTzwvaXRlbT4gPCEtLSBTcGFuaXNoIChCb2xpdmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtQ0w8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoQ2hpbGUpIC0tPgorICAgICAgICA8aXRlbT5lcy1DTzwvaXRlbT4gPCEtLSBTcGFuaXNoIChDb2xvbWJpYSkgLS0+CisgICAgICAgIDxpdGVtPmVzLUNSPC9pdGVtPiA8IS0tIFNwYW5pc2ggKENvc3RhIFJpY2EpIC0tPgorICAgICAgICA8aXRlbT5lcy1DVTwvaXRlbT4gPCEtLSBTcGFuaXNoIChDdWJhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRE88L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRG9taW5pY2FuIFJlcHVibGljKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRUE8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoQ2V1dGEgJiBNZWxpbGxhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtRUM8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRWN1YWRvcikgLS0+CisgICAgICAgIDxpdGVtPmVzLUVTPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFNwYWluKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtR1E8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoRXF1YXRvcmlhbCBHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5lcy1HVDwvaXRlbT4gPCEtLSBTcGFuaXNoIChHdWF0ZW1hbGEpIC0tPgorICAgICAgICA8aXRlbT5lcy1ITjwvaXRlbT4gPCEtLSBTcGFuaXNoIChIb25kdXJhcykgLS0+CisgICAgICAgIDxpdGVtPmVzLUlDPC9pdGVtPiA8IS0tIFNwYW5pc2ggKENhbmFyeSBJc2xhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtTVg8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoTWV4aWNvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtTkk8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoTmljYXJhZ3VhKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUEE8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUGFuYW1hKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUEU8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUGVydSkgLS0+CisgICAgICAgIDxpdGVtPmVzLVBIPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFBoaWxpcHBpbmVzKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtUFI8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoUHVlcnRvIFJpY28pIC0tPgorICAgICAgICA8aXRlbT5lcy1QWTwvaXRlbT4gPCEtLSBTcGFuaXNoIChQYXJhZ3VheSkgLS0+CisgICAgICAgIDxpdGVtPmVzLVNWPC9pdGVtPiA8IS0tIFNwYW5pc2ggKEVsIFNhbHZhZG9yKSAtLT4KKyAgICAgICAgPGl0ZW0+ZXMtVVM8L2l0ZW0+IDwhLS0gU3BhbmlzaCAoVW5pdGVkIFN0YXRlcykgLS0+CisgICAgICAgIDxpdGVtPmVzLVVZPC9pdGVtPiA8IS0tIFNwYW5pc2ggKFVydWd1YXkpIC0tPgorICAgICAgICA8aXRlbT5lcy1WRTwvaXRlbT4gPCEtLSBTcGFuaXNoIChWZW5lenVlbGEpIC0tPgorICAgICAgICA8aXRlbT5ldC1FRTwvaXRlbT4gPCEtLSBFc3RvbmlhbiAoRXN0b25pYSkgLS0+CisgICAgICAgIDxpdGVtPmV1LUVTPC9pdGVtPiA8IS0tIEJhc3F1ZSAoU3BhaW4pIC0tPgorICAgICAgICA8aXRlbT5ld28tQ008L2l0ZW0+IDwhLS0gRXdvbmRvIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZhLUFGPC9pdGVtPiA8IS0tIFBlcnNpYW4gKEFmZ2hhbmlzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+ZmEtSVI8L2l0ZW0+IDwhLS0gUGVyc2lhbiAoSXJhbikgLS0+CisgICAgICAgIDxpdGVtPmZmLUNNPC9pdGVtPiA8IS0tIEZ1bGFoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZmLUdOPC9pdGVtPiA8IS0tIEZ1bGFoIChHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5mZi1NUjwvaXRlbT4gPCEtLSBGdWxhaCAoTWF1cml0YW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmZmLVNOPC9pdGVtPiA8IS0tIEZ1bGFoIChTZW5lZ2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+ZmktRkk8L2l0ZW0+IDwhLS0gRmlubmlzaCAoRmlubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmZpbC1QSDwvaXRlbT4gPCEtLSBGaWxpcGlubyAoUGhpbGlwcGluZXMpIC0tPgorICAgICAgICA8aXRlbT5mby1ESzwvaXRlbT4gPCEtLSBGYXJvZXNlIChEZW5tYXJrKSAtLT4KKyAgICAgICAgPGl0ZW0+Zm8tRk88L2l0ZW0+IDwhLS0gRmFyb2VzZSAoRmFyb2UgSXNsYW5kcykgLS0+CisgICAgICAgIDxpdGVtPmZyLUJFPC9pdGVtPiA8IS0tIEZyZW5jaCAoQmVsZ2l1bSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUJGPC9pdGVtPiA8IS0tIEZyZW5jaCAoQnVya2luYSBGYXNvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQkk8L2l0ZW0+IDwhLS0gRnJlbmNoIChCdXJ1bmRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQko8L2l0ZW0+IDwhLS0gRnJlbmNoIChCZW5pbikgLS0+CisgICAgICAgIDxpdGVtPmZyLUJMPC9pdGVtPiA8IS0tIEZyZW5jaCAoU3QuIEJhcnRow6lsZW15KSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0E8L2l0ZW0+IDwhLS0gRnJlbmNoIChDYW5hZGEpIC0tPgorICAgICAgICA8aXRlbT5mci1DRDwvaXRlbT4gPCEtLSBGcmVuY2ggKENvbmdvIChEUkMpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0Y8L2l0ZW0+IDwhLS0gRnJlbmNoIChDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5mci1DRzwvaXRlbT4gPCEtLSBGcmVuY2ggKENvbmdvIChSZXB1YmxpYykpIC0tPgorICAgICAgICA8aXRlbT5mci1DSDwvaXRlbT4gPCEtLSBGcmVuY2ggKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ0k8L2l0ZW0+IDwhLS0gRnJlbmNoIChDw7R0ZSBk4oCZSXZvaXJlKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItQ008L2l0ZW0+IDwhLS0gRnJlbmNoIChDYW1lcm9vbikgLS0+CisgICAgICAgIDxpdGVtPmZyLURKPC9pdGVtPiA8IS0tIEZyZW5jaCAoRGppYm91dGkpIC0tPgorICAgICAgICA8aXRlbT5mci1EWjwvaXRlbT4gPCEtLSBGcmVuY2ggKEFsZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1GUjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyYW5jZSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdBPC9pdGVtPiA8IS0tIEZyZW5jaCAoR2Fib24pIC0tPgorICAgICAgICA8aXRlbT5mci1HRjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyZW5jaCBHdWlhbmEpIC0tPgorICAgICAgICA8aXRlbT5mci1HTjwvaXRlbT4gPCEtLSBGcmVuY2ggKEd1aW5lYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdQPC9pdGVtPiA8IS0tIEZyZW5jaCAoR3VhZGVsb3VwZSkgLS0+CisgICAgICAgIDxpdGVtPmZyLUdRPC9pdGVtPiA8IS0tIEZyZW5jaCAoRXF1YXRvcmlhbCBHdWluZWEpIC0tPgorICAgICAgICA8aXRlbT5mci1IVDwvaXRlbT4gPCEtLSBGcmVuY2ggKEhhaXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItS008L2l0ZW0+IDwhLS0gRnJlbmNoIChDb21vcm9zKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTFU8L2l0ZW0+IDwhLS0gRnJlbmNoIChMdXhlbWJvdXJnKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTUE8L2l0ZW0+IDwhLS0gRnJlbmNoIChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+ZnItTUM8L2l0ZW0+IDwhLS0gRnJlbmNoIChNb25hY28pIC0tPgorICAgICAgICA8aXRlbT5mci1NRjwvaXRlbT4gPCEtLSBGcmVuY2ggKFN0LiBNYXJ0aW4pIC0tPgorICAgICAgICA8aXRlbT5mci1NRzwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hZGFnYXNjYXIpIC0tPgorICAgICAgICA8aXRlbT5mci1NTDwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5mci1NUTwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hcnRpbmlxdWUpIC0tPgorICAgICAgICA8aXRlbT5mci1NUjwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hdXJpdGFuaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1NVTwvaXRlbT4gPCEtLSBGcmVuY2ggKE1hdXJpdGl1cykgLS0+CisgICAgICAgIDxpdGVtPmZyLU5DPC9pdGVtPiA8IS0tIEZyZW5jaCAoTmV3IENhbGVkb25pYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLU5FPC9pdGVtPiA8IS0tIEZyZW5jaCAoTmlnZXIpIC0tPgorICAgICAgICA8aXRlbT5mci1QRjwvaXRlbT4gPCEtLSBGcmVuY2ggKEZyZW5jaCBQb2x5bmVzaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1QTTwvaXRlbT4gPCEtLSBGcmVuY2ggKFN0LiBQaWVycmUgJiBNaXF1ZWxvbikgLS0+CisgICAgICAgIDxpdGVtPmZyLVJFPC9pdGVtPiA8IS0tIEZyZW5jaCAoUsOpdW5pb24pIC0tPgorICAgICAgICA8aXRlbT5mci1SVzwvaXRlbT4gPCEtLSBGcmVuY2ggKFJ3YW5kYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLVNDPC9pdGVtPiA8IS0tIEZyZW5jaCAoU2V5Y2hlbGxlcykgLS0+CisgICAgICAgIDxpdGVtPmZyLVNOPC9pdGVtPiA8IS0tIEZyZW5jaCAoU2VuZWdhbCkgLS0+CisgICAgICAgIDxpdGVtPmZyLVNZPC9pdGVtPiA8IS0tIEZyZW5jaCAoU3lyaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1URDwvaXRlbT4gPCEtLSBGcmVuY2ggKENoYWQpIC0tPgorICAgICAgICA8aXRlbT5mci1URzwvaXRlbT4gPCEtLSBGcmVuY2ggKFRvZ28pIC0tPgorICAgICAgICA8aXRlbT5mci1UTjwvaXRlbT4gPCEtLSBGcmVuY2ggKFR1bmlzaWEpIC0tPgorICAgICAgICA8aXRlbT5mci1WVTwvaXRlbT4gPCEtLSBGcmVuY2ggKFZhbnVhdHUpIC0tPgorICAgICAgICA8aXRlbT5mci1XRjwvaXRlbT4gPCEtLSBGcmVuY2ggKFdhbGxpcyAmIEZ1dHVuYSkgLS0+CisgICAgICAgIDxpdGVtPmZyLVlUPC9pdGVtPiA8IS0tIEZyZW5jaCAoTWF5b3R0ZSkgLS0+CisgICAgICAgIDxpdGVtPmZ1ci1JVDwvaXRlbT4gPCEtLSBGcml1bGlhbiAoSXRhbHkpIC0tPgorICAgICAgICA8aXRlbT5meS1OTDwvaXRlbT4gPCEtLSBXZXN0ZXJuIEZyaXNpYW4gKE5ldGhlcmxhbmRzKSAtLT4KKyAgICAgICAgPGl0ZW0+Z2EtSUU8L2l0ZW0+IDwhLS0gSXJpc2ggKElyZWxhbmQpIC0tPgorICAgICAgICA8aXRlbT5nZC1HQjwvaXRlbT4gPCEtLSBTY290dGlzaCBHYWVsaWMgKFVuaXRlZCBLaW5nZG9tKSAtLT4KKyAgICAgICAgPGl0ZW0+Z2wtRVM8L2l0ZW0+IDwhLS0gR2FsaWNpYW4gKFNwYWluKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3N3LUNIPC9pdGVtPiA8IS0tIFN3aXNzIEdlcm1hbiAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5nc3ctRlI8L2l0ZW0+IDwhLS0gU3dpc3MgR2VybWFuIChGcmFuY2UpIC0tPgorICAgICAgICA8aXRlbT5nc3ctTEk8L2l0ZW0+IDwhLS0gU3dpc3MgR2VybWFuIChMaWVjaHRlbnN0ZWluKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3UtSU48L2l0ZW0+IDwhLS0gR3VqYXJhdGkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+Z3V6LUtFPC9pdGVtPiA8IS0tIEd1c2lpIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmd2LUlNPC9pdGVtPiA8IS0tIE1hbnggKElzbGUgb2YgTWFuKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtR0g8L2l0ZW0+IDwhLS0gSGF1c2EgKEdoYW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtTkU8L2l0ZW0+IDwhLS0gSGF1c2EgKE5pZ2VyKSAtLT4KKyAgICAgICAgPGl0ZW0+aGEtTkc8L2l0ZW0+IDwhLS0gSGF1c2EgKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5oYXctVVM8L2l0ZW0+IDwhLS0gSGF3YWlpYW4gKFVuaXRlZCBTdGF0ZXMpIC0tPgorICAgICAgICA8aXRlbT5pdy1JTDwvaXRlbT4gPCEtLSBIZWJyZXcgKElzcmFlbCkgLS0+CisgICAgICAgIDxpdGVtPmhpLUlOPC9pdGVtPiA8IS0tIEhpbmRpIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmhyLUJBPC9pdGVtPiA8IS0tIENyb2F0aWFuIChCb3NuaWEgJiBIZXJ6ZWdvdmluYSkgLS0+CisgICAgICAgIDxpdGVtPmhyLUhSPC9pdGVtPiA8IS0tIENyb2F0aWFuIChDcm9hdGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+aHNiLURFPC9pdGVtPiA8IS0tIFVwcGVyIFNvcmJpYW4gKEdlcm1hbnkpIC0tPgorICAgICAgICA8aXRlbT5odS1IVTwvaXRlbT4gPCEtLSBIdW5nYXJpYW4gKEh1bmdhcnkpIC0tPgorICAgICAgICA8aXRlbT5oeS1BTTwvaXRlbT4gPCEtLSBBcm1lbmlhbiAoQXJtZW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmluLUlEPC9pdGVtPiA8IS0tIEluZG9uZXNpYW4gKEluZG9uZXNpYSkgLS0+CisgICAgICAgIDxpdGVtPmlnLU5HPC9pdGVtPiA8IS0tIElnYm8gKE5pZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5paS1DTjwvaXRlbT4gPCEtLSBTaWNodWFuIFlpIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPmlzLUlTPC9pdGVtPiA8IS0tIEljZWxhbmRpYyAoSWNlbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPml0LUNIPC9pdGVtPiA8IS0tIEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+aXQtSVQ8L2l0ZW0+IDwhLS0gSXRhbGlhbiAoSXRhbHkpIC0tPgorICAgICAgICA8aXRlbT5pdC1TTTwvaXRlbT4gPCEtLSBJdGFsaWFuIChTYW4gTWFyaW5vKSAtLT4KKyAgICAgICAgPGl0ZW0+amEtSlA8L2l0ZW0+IDwhLS0gSmFwYW5lc2UgKEphcGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+amdvLUNNPC9pdGVtPiA8IS0tIE5nb21iYSAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5qbWMtVFo8L2l0ZW0+IDwhLS0gTWFjaGFtZSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5rYS1HRTwvaXRlbT4gPCEtLSBHZW9yZ2lhbiAoR2VvcmdpYSkgLS0+CisgICAgICAgIDxpdGVtPmthYi1EWjwvaXRlbT4gPCEtLSBLYWJ5bGUgKEFsZ2VyaWEpIC0tPgorICAgICAgICA8aXRlbT5rYW0tS0U8L2l0ZW0+IDwhLS0gS2FtYmEgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2RlLVRaPC9pdGVtPiA8IS0tIE1ha29uZGUgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2VhLUNWPC9pdGVtPiA8IS0tIEthYnV2ZXJkaWFudSAoQ2FwZSBWZXJkZSkgLS0+CisgICAgICAgIDxpdGVtPmtocS1NTDwvaXRlbT4gPCEtLSBLb3lyYSBDaGlpbmkgKE1hbGkpIC0tPgorICAgICAgICA8aXRlbT5raS1LRTwvaXRlbT4gPCEtLSBLaWt1eXUgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a2stS1o8L2l0ZW0+IDwhLS0gS2F6YWtoIChLYXpha2hzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+a2tqLUNNPC9pdGVtPiA8IS0tIEtha28gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+a2wtR0w8L2l0ZW0+IDwhLS0gS2FsYWFsbGlzdXQgKEdyZWVubGFuZCkgLS0+CisgICAgICAgIDxpdGVtPmtsbi1LRTwvaXRlbT4gPCEtLSBLYWxlbmppbiAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5rbS1LSDwvaXRlbT4gPCEtLSBLaG1lciAoQ2FtYm9kaWEpIC0tPgorICAgICAgICA8aXRlbT5rbi1JTjwvaXRlbT4gPCEtLSBLYW5uYWRhIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPmtvLUtQPC9pdGVtPiA8IS0tIEtvcmVhbiAoTm9ydGggS29yZWEpIC0tPgorICAgICAgICA8aXRlbT5rby1LUjwvaXRlbT4gPCEtLSBLb3JlYW4gKFNvdXRoIEtvcmVhKSAtLT4KKyAgICAgICAgPGl0ZW0+a29rLUlOPC9pdGVtPiA8IS0tIEtvbmthbmkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+a3NiLVRaPC9pdGVtPiA8IS0tIFNoYW1iYWxhIChUYW56YW5pYSkgLS0+CisgICAgICAgIDxpdGVtPmtzZi1DTTwvaXRlbT4gPCEtLSBCYWZpYSAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5rc2gtREU8L2l0ZW0+IDwhLS0gQ29sb2duaWFuIChHZXJtYW55KSAtLT4KKyAgICAgICAgPGl0ZW0+a3ctR0I8L2l0ZW0+IDwhLS0gQ29ybmlzaCAoVW5pdGVkIEtpbmdkb20pIC0tPgorICAgICAgICA8aXRlbT5reS1LRzwvaXRlbT4gPCEtLSBLeXJneXogKEt5cmd5enN0YW4pIC0tPgorICAgICAgICA8aXRlbT5sYWctVFo8L2l0ZW0+IDwhLS0gTGFuZ2kgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bGItTFU8L2l0ZW0+IDwhLS0gTHV4ZW1ib3VyZ2lzaCAoTHV4ZW1ib3VyZykgLS0+CisgICAgICAgIDxpdGVtPmxnLVVHPC9pdGVtPiA8IS0tIEdhbmRhIChVZ2FuZGEpIC0tPgorICAgICAgICA8aXRlbT5sa3QtVVM8L2l0ZW0+IDwhLS0gTGFrb3RhIChVbml0ZWQgU3RhdGVzKSAtLT4KKyAgICAgICAgPGl0ZW0+bG4tQU88L2l0ZW0+IDwhLS0gTGluZ2FsYSAoQW5nb2xhKSAtLT4KKyAgICAgICAgPGl0ZW0+bG4tQ0Q8L2l0ZW0+IDwhLS0gTGluZ2FsYSAoQ29uZ28gKERSQykpIC0tPgorICAgICAgICA8aXRlbT5sbi1DRjwvaXRlbT4gPCEtLSBMaW5nYWxhIChDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMpIC0tPgorICAgICAgICA8aXRlbT5sbi1DRzwvaXRlbT4gPCEtLSBMaW5nYWxhIChDb25nbyAoUmVwdWJsaWMpKSAtLT4KKyAgICAgICAgPGl0ZW0+bG8tTEE8L2l0ZW0+IDwhLS0gTGFvIChMYW9zKSAtLT4KKyAgICAgICAgPGl0ZW0+bHQtTFQ8L2l0ZW0+IDwhLS0gTGl0aHVhbmlhbiAoTGl0aHVhbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bHUtQ0Q8L2l0ZW0+IDwhLS0gTHViYS1LYXRhbmdhIChDb25nbyAoRFJDKSkgLS0+CisgICAgICAgIDxpdGVtPmx1by1LRTwvaXRlbT4gPCEtLSBMdW8gKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bHV5LUtFPC9pdGVtPiA8IS0tIEx1eWlhIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPmx2LUxWPC9pdGVtPiA8IS0tIExhdHZpYW4gKExhdHZpYSkgLS0+CisgICAgICAgIDxpdGVtPm1hcy1LRTwvaXRlbT4gPCEtLSBNYXNhaSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5tYXMtVFo8L2l0ZW0+IDwhLS0gTWFzYWkgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bWVyLUtFPC9pdGVtPiA8IS0tIE1lcnUgKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bWZlLU1VPC9pdGVtPiA8IS0tIE1vcmlzeWVuIChNYXVyaXRpdXMpIC0tPgorICAgICAgICA8aXRlbT5tZy1NRzwvaXRlbT4gPCEtLSBNYWxhZ2FzeSAoTWFkYWdhc2NhcikgLS0+CisgICAgICAgIDxpdGVtPm1naC1NWjwvaXRlbT4gPCEtLSBNYWtodXdhLU1lZXR0byAoTW96YW1iaXF1ZSkgLS0+CisgICAgICAgIDxpdGVtPm1nby1DTTwvaXRlbT4gPCEtLSBNZXRhyrwgKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+bWstTUs8L2l0ZW0+IDwhLS0gTWFjZWRvbmlhbiAoTWFjZWRvbmlhIChGWVJPTSkpIC0tPgorICAgICAgICA8aXRlbT5tbC1JTjwvaXRlbT4gPCEtLSBNYWxheWFsYW0gKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bW4tTU48L2l0ZW0+IDwhLS0gTW9uZ29saWFuIChNb25nb2xpYSkgLS0+CisgICAgICAgIDxpdGVtPm1yLUlOPC9pdGVtPiA8IS0tIE1hcmF0aGkgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bXMtQk48L2l0ZW0+IDwhLS0gTWFsYXkgKEJydW5laSkgLS0+CisgICAgICAgIDxpdGVtPm1zLU1ZPC9pdGVtPiA8IS0tIE1hbGF5IChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPm1zLVNHPC9pdGVtPiA8IS0tIE1hbGF5IChTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT5tdC1NVDwvaXRlbT4gPCEtLSBNYWx0ZXNlIChNYWx0YSkgLS0+CisgICAgICAgIDxpdGVtPm15LU1NPC9pdGVtPiA8IS0tIEJ1cm1lc2UgKE15YW5tYXIgKEJ1cm1hKSkgLS0+CisgICAgICAgIDxpdGVtPm16bi1JUjwvaXRlbT4gPCEtLSBNYXphbmRlcmFuaSAoSXJhbikgLS0+CisgICAgICAgIDxpdGVtPm5hcS1OQTwvaXRlbT4gPCEtLSBOYW1hIChOYW1pYmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+bmItTk88L2l0ZW0+IDwhLS0gTm9yd2VnaWFuIEJva23DpWwgKE5vcndheSkgLS0+CisgICAgICAgIDxpdGVtPm5iLVNKPC9pdGVtPiA8IS0tIE5vcndlZ2lhbiBCb2ttw6VsIChTdmFsYmFyZCAmIEphbiBNYXllbikgLS0+CisgICAgICAgIDxpdGVtPm5kLVpXPC9pdGVtPiA8IS0tIE5vcnRoIE5kZWJlbGUgKFppbWJhYndlKSAtLT4KKyAgICAgICAgPGl0ZW0+bmUtSU48L2l0ZW0+IDwhLS0gTmVwYWxpIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPm5lLU5QPC9pdGVtPiA8IS0tIE5lcGFsaSAoTmVwYWwpIC0tPgorICAgICAgICA8aXRlbT5ubC1BVzwvaXRlbT4gPCEtLSBEdXRjaCAoQXJ1YmEpIC0tPgorICAgICAgICA8aXRlbT5ubC1CRTwvaXRlbT4gPCEtLSBEdXRjaCAoQmVsZ2l1bSkgLS0+CisgICAgICAgIDxpdGVtPm5sLUJRPC9pdGVtPiA8IS0tIER1dGNoIChDYXJpYmJlYW4gTmV0aGVybGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5ubC1DVzwvaXRlbT4gPCEtLSBEdXRjaCAoQ3VyYcOnYW8pIC0tPgorICAgICAgICA8aXRlbT5ubC1OTDwvaXRlbT4gPCEtLSBEdXRjaCAoTmV0aGVybGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5ubC1TUjwvaXRlbT4gPCEtLSBEdXRjaCAoU3VyaW5hbWUpIC0tPgorICAgICAgICA8aXRlbT5ubC1TWDwvaXRlbT4gPCEtLSBEdXRjaCAoU2ludCBNYWFydGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+bm1nLUNNPC9pdGVtPiA8IS0tIEt3YXNpbyAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5ubi1OTzwvaXRlbT4gPCEtLSBOb3J3ZWdpYW4gTnlub3JzayAoTm9yd2F5KSAtLT4KKyAgICAgICAgPGl0ZW0+bm5oLUNNPC9pdGVtPiA8IS0tIE5naWVtYm9vbiAoQ2FtZXJvb24pIC0tPgorICAgICAgICA8aXRlbT5udXMtU1M8L2l0ZW0+IDwhLS0gTnVlciAoU291dGggU3VkYW4pIC0tPgorICAgICAgICA8aXRlbT5ueW4tVUc8L2l0ZW0+IDwhLS0gTnlhbmtvbGUgKFVnYW5kYSkgLS0+CisgICAgICAgIDxpdGVtPm9tLUVUPC9pdGVtPiA8IS0tIE9yb21vIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPm9tLUtFPC9pdGVtPiA8IS0tIE9yb21vIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPm9yLUlOPC9pdGVtPiA8IS0tIE9yaXlhIChJbmRpYSkgLS0+CisgICAgICAgIDxpdGVtPm9zLUdFPC9pdGVtPiA8IS0tIE9zc2V0aWMgKEdlb3JnaWEpIC0tPgorICAgICAgICA8aXRlbT5vcy1SVTwvaXRlbT4gPCEtLSBPc3NldGljIChSdXNzaWEpIC0tPgorICAgICAgICA8aXRlbT5wYS1BcmFiLVBLPC9pdGVtPiA8IS0tIFB1bmphYmkgKEFyYWJpYyxQYWtpc3RhbikgLS0+CisgICAgICAgIDxpdGVtPnBhLUd1cnUtSU48L2l0ZW0+IDwhLS0gUHVuamFiaSAoR3VybXVraGksSW5kaWEpIC0tPgorICAgICAgICA8aXRlbT5wbC1QTDwvaXRlbT4gPCEtLSBQb2xpc2ggKFBvbGFuZCkgLS0+CisgICAgICAgIDxpdGVtPnBzLUFGPC9pdGVtPiA8IS0tIFBhc2h0byAoQWZnaGFuaXN0YW4pIC0tPgorICAgICAgICA8aXRlbT5wdC1BTzwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChBbmdvbGEpIC0tPgorICAgICAgICA8aXRlbT5wdC1CUjwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChCcmF6aWwpIC0tPgorICAgICAgICA8aXRlbT5wdC1DVjwvaXRlbT4gPCEtLSBQb3J0dWd1ZXNlIChDYXBlIFZlcmRlKSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtR1c8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoR3VpbmVhLUJpc3NhdSkgLS0+CisgICAgICAgIDxpdGVtPnB0LU1PPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKE1hY2F1KSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtTVo8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoTW96YW1iaXF1ZSkgLS0+CisgICAgICAgIDxpdGVtPnB0LVBUPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKFBvcnR1Z2FsKSAtLT4KKyAgICAgICAgPGl0ZW0+cHQtU1Q8L2l0ZW0+IDwhLS0gUG9ydHVndWVzZSAoU8OjbyBUb23DqSAmIFByw61uY2lwZSkgLS0+CisgICAgICAgIDxpdGVtPnB0LVRMPC9pdGVtPiA8IS0tIFBvcnR1Z3Vlc2UgKFRpbW9yLUxlc3RlKSAtLT4KKyAgICAgICAgPGl0ZW0+cXUtQk88L2l0ZW0+IDwhLS0gUXVlY2h1YSAoQm9saXZpYSkgLS0+CisgICAgICAgIDxpdGVtPnF1LUVDPC9pdGVtPiA8IS0tIFF1ZWNodWEgKEVjdWFkb3IpIC0tPgorICAgICAgICA8aXRlbT5xdS1QRTwvaXRlbT4gPCEtLSBRdWVjaHVhIChQZXJ1KSAtLT4KKyAgICAgICAgPGl0ZW0+cm0tQ0g8L2l0ZW0+IDwhLS0gUm9tYW5zaCAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5ybi1CSTwvaXRlbT4gPCEtLSBSdW5kaSAoQnVydW5kaSkgLS0+CisgICAgICAgIDxpdGVtPnJvLU1EPC9pdGVtPiA8IS0tIFJvbWFuaWFuIChNb2xkb3ZhKSAtLT4KKyAgICAgICAgPGl0ZW0+cm8tUk88L2l0ZW0+IDwhLS0gUm9tYW5pYW4gKFJvbWFuaWEpIC0tPgorICAgICAgICA8aXRlbT5yb2YtVFo8L2l0ZW0+IDwhLS0gUm9tYm8gKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+cnUtQlk8L2l0ZW0+IDwhLS0gUnVzc2lhbiAoQmVsYXJ1cykgLS0+CisgICAgICAgIDxpdGVtPnJ1LUtHPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKEt5cmd5enN0YW4pIC0tPgorICAgICAgICA8aXRlbT5ydS1LWjwvaXRlbT4gPCEtLSBSdXNzaWFuIChLYXpha2hzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+cnUtTUQ8L2l0ZW0+IDwhLS0gUnVzc2lhbiAoTW9sZG92YSkgLS0+CisgICAgICAgIDxpdGVtPnJ1LVJVPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKFJ1c3NpYSkgLS0+CisgICAgICAgIDxpdGVtPnJ1LVVBPC9pdGVtPiA8IS0tIFJ1c3NpYW4gKFVrcmFpbmUpIC0tPgorICAgICAgICA8aXRlbT5ydy1SVzwvaXRlbT4gPCEtLSBLaW55YXJ3YW5kYSAoUndhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+cndrLVRaPC9pdGVtPiA8IS0tIFJ3YSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5zYWgtUlU8L2l0ZW0+IDwhLS0gU2FraGEgKFJ1c3NpYSkgLS0+CisgICAgICAgIDxpdGVtPnNhcS1LRTwvaXRlbT4gPCEtLSBTYW1idXJ1IChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPnNicC1UWjwvaXRlbT4gPCEtLSBTYW5ndSAoVGFuemFuaWEpIC0tPgorICAgICAgICA8aXRlbT5zZS1GSTwvaXRlbT4gPCEtLSBOb3J0aGVybiBTYW1pIChGaW5sYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+c2UtTk88L2l0ZW0+IDwhLS0gTm9ydGhlcm4gU2FtaSAoTm9yd2F5KSAtLT4KKyAgICAgICAgPGl0ZW0+c2UtU0U8L2l0ZW0+IDwhLS0gTm9ydGhlcm4gU2FtaSAoU3dlZGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+c2VoLU1aPC9pdGVtPiA8IS0tIFNlbmEgKE1vemFtYmlxdWUpIC0tPgorICAgICAgICA8aXRlbT5zZXMtTUw8L2l0ZW0+IDwhLS0gS295cmFib3JvIFNlbm5pIChNYWxpKSAtLT4KKyAgICAgICAgPGl0ZW0+c2ctQ0Y8L2l0ZW0+IDwhLS0gU2FuZ28gKENlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYykgLS0+CisgICAgICAgIDxpdGVtPnNpLUxLPC9pdGVtPiA8IS0tIFNpbmhhbGEgKFNyaSBMYW5rYSkgLS0+CisgICAgICAgIDxpdGVtPnNrLVNLPC9pdGVtPiA8IS0tIFNsb3ZhayAoU2xvdmFraWEpIC0tPgorICAgICAgICA8aXRlbT5zbC1TSTwvaXRlbT4gPCEtLSBTbG92ZW5pYW4gKFNsb3ZlbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+c21uLUZJPC9pdGVtPiA8IS0tIEluYXJpIFNhbWkgKEZpbmxhbmQpIC0tPgorICAgICAgICA8aXRlbT5zbi1aVzwvaXRlbT4gPCEtLSBTaG9uYSAoWmltYmFid2UpIC0tPgorICAgICAgICA8aXRlbT5zby1ESjwvaXRlbT4gPCEtLSBTb21hbGkgKERqaWJvdXRpKSAtLT4KKyAgICAgICAgPGl0ZW0+c28tRVQ8L2l0ZW0+IDwhLS0gU29tYWxpIChFdGhpb3BpYSkgLS0+CisgICAgICAgIDxpdGVtPnNvLUtFPC9pdGVtPiA8IS0tIFNvbWFsaSAoS2VueWEpIC0tPgorICAgICAgICA8aXRlbT5zby1TTzwvaXRlbT4gPCEtLSBTb21hbGkgKFNvbWFsaWEpIC0tPgorICAgICAgICA8aXRlbT5zcS1BTDwvaXRlbT4gPCEtLSBBbGJhbmlhbiAoQWxiYW5pYSkgLS0+CisgICAgICAgIDxpdGVtPnNxLU1LPC9pdGVtPiA8IS0tIEFsYmFuaWFuIChNYWNlZG9uaWEgKEZZUk9NKSkgLS0+CisgICAgICAgIDxpdGVtPnNxLVhLPC9pdGVtPiA8IS0tIEFsYmFuaWFuIChLb3Nvdm8pIC0tPgorICAgICAgICA8aXRlbT5zci1DeXJsLUJBPC9pdGVtPiA8IS0tIFNlcmJpYW4gKEN5cmlsbGljLEJvc25pYSAmIEhlcnplZ292aW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ItQ3lybC1NRTwvaXRlbT4gPCEtLSBTZXJiaWFuIChDeXJpbGxpYyxNb250ZW5lZ3JvKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ItQ3lybC1SUzwvaXRlbT4gPCEtLSBTZXJiaWFuIChDeXJpbGxpYyxTZXJiaWEpIC0tPgorICAgICAgICA8aXRlbT5zci1DeXJsLVhLPC9pdGVtPiA8IS0tIFNlcmJpYW4gKEN5cmlsbGljLEtvc292bykgLS0+CisgICAgICAgIDxpdGVtPnNyLUxhdG4tQkE8L2l0ZW0+IDwhLS0gU2VyYmlhbiAoTGF0aW4sQm9zbmlhICYgSGVyemVnb3ZpbmEpIC0tPgorICAgICAgICA8aXRlbT5zci1MYXRuLU1FPC9pdGVtPiA8IS0tIFNlcmJpYW4gKExhdGluLE1vbnRlbmVncm8pIC0tPgorICAgICAgICA8aXRlbT5zci1MYXRuLVJTPC9pdGVtPiA8IS0tIFNlcmJpYW4gKExhdGluLFNlcmJpYSkgLS0+CisgICAgICAgIDxpdGVtPnNyLUxhdG4tWEs8L2l0ZW0+IDwhLS0gU2VyYmlhbiAoTGF0aW4sS29zb3ZvKSAtLT4KKyAgICAgICAgPGl0ZW0+c3YtQVg8L2l0ZW0+IDwhLS0gU3dlZGlzaCAow4VsYW5kIElzbGFuZHMpIC0tPgorICAgICAgICA8aXRlbT5zdi1GSTwvaXRlbT4gPCEtLSBTd2VkaXNoIChGaW5sYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+c3YtU0U8L2l0ZW0+IDwhLS0gU3dlZGlzaCAoU3dlZGVuKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ctQ0Q8L2l0ZW0+IDwhLS0gU3dhaGlsaSAoQ29uZ28gKERSQykpIC0tPgorICAgICAgICA8aXRlbT5zdy1LRTwvaXRlbT4gPCEtLSBTd2FoaWxpIChLZW55YSkgLS0+CisgICAgICAgIDxpdGVtPnN3LVRaPC9pdGVtPiA8IS0tIFN3YWhpbGkgKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+c3ctVUc8L2l0ZW0+IDwhLS0gU3dhaGlsaSAoVWdhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGEtSU48L2l0ZW0+IDwhLS0gVGFtaWwgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGEtTEs8L2l0ZW0+IDwhLS0gVGFtaWwgKFNyaSBMYW5rYSkgLS0+CisgICAgICAgIDxpdGVtPnRhLU1ZPC9pdGVtPiA8IS0tIFRhbWlsIChNYWxheXNpYSkgLS0+CisgICAgICAgIDxpdGVtPnRhLVNHPC9pdGVtPiA8IS0tIFRhbWlsIChTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT50ZS1JTjwvaXRlbT4gPCEtLSBUZWx1Z3UgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGVvLUtFPC9pdGVtPiA8IS0tIFRlc28gKEtlbnlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dGVvLVVHPC9pdGVtPiA8IS0tIFRlc28gKFVnYW5kYSkgLS0+CisgICAgICAgIDxpdGVtPnRoLVRIPC9pdGVtPiA8IS0tIFRoYWkgKFRoYWlsYW5kKSAtLT4KKyAgICAgICAgPGl0ZW0+dGktRVI8L2l0ZW0+IDwhLS0gVGlncmlueWEgKEVyaXRyZWEpIC0tPgorICAgICAgICA8aXRlbT50aS1FVDwvaXRlbT4gPCEtLSBUaWdyaW55YSAoRXRoaW9waWEpIC0tPgorICAgICAgICA8aXRlbT50by1UTzwvaXRlbT4gPCEtLSBUb25nYW4gKFRvbmdhKSAtLT4KKyAgICAgICAgPGl0ZW0+dHItQ1k8L2l0ZW0+IDwhLS0gVHVya2lzaCAoQ3lwcnVzKSAtLT4KKyAgICAgICAgPGl0ZW0+dHItVFI8L2l0ZW0+IDwhLS0gVHVya2lzaCAoVHVya2V5KSAtLT4KKyAgICAgICAgPGl0ZW0+dHdxLU5FPC9pdGVtPiA8IS0tIFRhc2F3YXEgKE5pZ2VyKSAtLT4KKyAgICAgICAgPGl0ZW0+dHptLU1BPC9pdGVtPiA8IS0tIENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IChNb3JvY2NvKSAtLT4KKyAgICAgICAgPGl0ZW0+dWctQ048L2l0ZW0+IDwhLS0gVXlnaHVyIChDaGluYSkgLS0+CisgICAgICAgIDxpdGVtPnVrLVVBPC9pdGVtPiA8IS0tIFVrcmFpbmlhbiAoVWtyYWluZSkgLS0+CisgICAgICAgIDxpdGVtPnVyLUlOPC9pdGVtPiA8IS0tIFVyZHUgKEluZGlhKSAtLT4KKyAgICAgICAgPGl0ZW0+dXItUEs8L2l0ZW0+IDwhLS0gVXJkdSAoUGFraXN0YW4pIC0tPgorICAgICAgICA8aXRlbT51ei1BcmFiLUFGPC9pdGVtPiA8IS0tIFV6YmVrIChBcmFiaWMsQWZnaGFuaXN0YW4pIC0tPgorICAgICAgICA8aXRlbT51ei1DeXJsLVVaPC9pdGVtPiA8IS0tIFV6YmVrIChDeXJpbGxpYyxVemJla2lzdGFuKSAtLT4KKyAgICAgICAgPGl0ZW0+dXotTGF0bi1VWjwvaXRlbT4gPCEtLSBVemJlayAoTGF0aW4sVXpiZWtpc3RhbikgLS0+CisgICAgICAgIDxpdGVtPnZpLVZOPC9pdGVtPiA8IS0tIFZpZXRuYW1lc2UgKFZpZXRuYW0pIC0tPgorICAgICAgICA8aXRlbT52dW4tVFo8L2l0ZW0+IDwhLS0gVnVuam8gKFRhbnphbmlhKSAtLT4KKyAgICAgICAgPGl0ZW0+d2FlLUNIPC9pdGVtPiA8IS0tIFdhbHNlciAoU3dpdHplcmxhbmQpIC0tPgorICAgICAgICA8aXRlbT54b2ctVUc8L2l0ZW0+IDwhLS0gU29nYSAoVWdhbmRhKSAtLT4KKyAgICAgICAgPGl0ZW0+eWF2LUNNPC9pdGVtPiA8IS0tIFlhbmdiZW4gKENhbWVyb29uKSAtLT4KKyAgICAgICAgPGl0ZW0+eW8tQko8L2l0ZW0+IDwhLS0gWW9ydWJhIChCZW5pbikgLS0+CisgICAgICAgIDxpdGVtPnlvLU5HPC9pdGVtPiA8IS0tIFlvcnViYSAoTmlnZXJpYSkgLS0+CisgICAgICAgIDxpdGVtPnpnaC1NQTwvaXRlbT4gPCEtLSBTdGFuZGFyZCBNb3JvY2NhbiBUYW1hemlnaHQgKE1vcm9jY28pIC0tPgorICAgICAgICA8aXRlbT56aC1IYW5zLUNOPC9pdGVtPiA8IS0tIENoaW5lc2UgKFNpbXBsaWZpZWQgSGFuLENoaW5hKSAtLT4KKyAgICAgICAgPGl0ZW0+emgtSGFucy1ISzwvaXRlbT4gPCEtLSBDaGluZXNlIChTaW1wbGlmaWVkIEhhbixIb25nIEtvbmcpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW5zLU1PPC9pdGVtPiA8IS0tIENoaW5lc2UgKFNpbXBsaWZpZWQgSGFuLE1hY2F1KSAtLT4KKyAgICAgICAgPGl0ZW0+emgtSGFucy1TRzwvaXRlbT4gPCEtLSBDaGluZXNlIChTaW1wbGlmaWVkIEhhbixTaW5nYXBvcmUpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW50LUhLPC9pdGVtPiA8IS0tIENoaW5lc2UgKFRyYWRpdGlvbmFsIEhhbixIb25nIEtvbmcpIC0tPgorICAgICAgICA8aXRlbT56aC1IYW50LU1PPC9pdGVtPiA8IS0tIENoaW5lc2UgKFRyYWRpdGlvbmFsIEhhbixNYWNhdSkgLS0+CisgICAgICAgIDxpdGVtPnpoLUhhbnQtVFc8L2l0ZW0+IDwhLS0gQ2hpbmVzZSAoVHJhZGl0aW9uYWwgSGFuLFRhaXdhbikgLS0+CisgICAgICAgIDxpdGVtPnp1LVpBPC9pdGVtPiA8IS0tIFp1bHUgKFNvdXRoIEFmcmljYSkgLS0+CisgICAgPC9zdHJpbmctYXJyYXk+CisKKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9wdWJsaWMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9wdWJsaWMueG1sCmluZGV4IGI2YjJlMjAuLmM4ODNiMWY4IDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3B1YmxpYy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9wdWJsaWMueG1sCkBAIC0yNjgzLDI0ICsyNjgzLDE2IEBACiAgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJlbmNyeXB0aW9uQXdhcmUiIC8+CiAgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJwcmVmZXJlbmNlRnJhZ21lbnRTdHlsZSIgLz4KICAgICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9ImNhbkNvbnRyb2xNYWduaWZpY2F0aW9uIiAvPgorICAgIDxwdWJsaWMgdHlwZT0iYXR0ciIgbmFtZT0ibGFuZ3VhZ2VUYWciIC8+CisgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJwb2ludGVyU2hhcGUiIC8+CisgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJ0aWNrTWFyayIgLz4KKyAgICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9InRpY2tNYXJrVGludCIgLz4KKyAgICA8cHVibGljIHR5cGU9ImF0dHIiIG5hbWU9InRpY2tNYXJrVGludE1vZGUiIC8+CisgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJjYW5QZXJmb3JtR2VzdHVyZXMiIC8+CisgICAgPHB1YmxpYyB0eXBlPSJhdHRyIiBuYW1lPSJleHRlcm5hbFNlcnZpY2UiIC8+CiAKLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodCIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EYXJrQWN0aW9uQmFyIiAvPgotICAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZyIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2cuQWxlcnQiIC8+Ci0gICAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuRGlhbG9nLk1pbldpZHRoIiAvPgotICAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZy5Ob0FjdGlvbkJhciIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2cuTm9BY3Rpb25CYXIuTWluV2lkdGgiIC8+Ci0gICAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuRGlhbG9nLlByZXNlbnRhdGlvbiIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2dXaGVuTGFyZ2UiIC8+Ci0gICAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuRGlhbG9nV2hlbkxhcmdlLk5vQWN0aW9uQmFyIiAvPgotICAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0Lk5vQWN0aW9uQmFyIiAvPgotICAgIDxwdWJsaWMgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0Lk5vQWN0aW9uQmFyLkZ1bGxzY3JlZW4iIC8+Ci0gICAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuTm9BY3Rpb25CYXIuT3ZlcnNjYW4iIC8+Ci0gICAgPHB1YmxpYyB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuTm9BY3Rpb25CYXIuVHJhbnNsdWNlbnREZWNvciIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5QYW5lbCIgLz4KICAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5MaWdodC5EaWFsb2dXaGVuTGFyZ2UuRGFya0FjdGlvbkJhciIgLz4KLSAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2dXaGVuTGFyZ2UuRGFya0FjdGlvbkJhciIgLz4KKyAgICA8cHVibGljIHR5cGU9InN0eWxlIiBuYW1lPSJXaWRnZXQuTWF0ZXJpYWwuU2Vla0Jhci5EaXNjcmV0ZSIgLz4KIAogICAgIDxwdWJsaWMgdHlwZT0iaWQiIG5hbWU9ImFjY2Vzc2liaWxpdHlBY3Rpb25TZXRQcm9ncmVzcyIgLz4KICAgICA8cHVibGljIHR5cGU9ImlkIiBuYW1lPSJpY29uX2ZyYW1lIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKaW5kZXggZTU0MTVkZi4uOTk3MzcxZSAxMDA2NDQKLS0tIGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC00ODcsMTAgKzQ4NywzNCBAQAogICAgIDwhLS0gVGFrZSBidWcgcmVwb3J0IG1lbnUgdGl0bGUgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdGl0bGUiPlRha2UgYnVnIHJlcG9ydDwvc3RyaW5nPgogICAgIDwhLS0gTWVzc2FnZSBpbiBidWdyZXBvcnQgZGlhbG9nIGRlc2NyaWJpbmcgd2hhdCBpdCBkb2VzIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDwhLS0gVE9ETzogcmVtb3ZlIGlmIG5vdCB1c2VkIGFueW1vcmUgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSI+VGhpcyB3aWxsIGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgeW91cgogICAgICAgICBjdXJyZW50IGRldmljZSBzdGF0ZSwgdG8gc2VuZCBhcyBhbiBlLW1haWwgbWVzc2FnZS4gIEl0IHdpbGwgdGFrZSBhIGxpdHRsZQogICAgICAgICB0aW1lIGZyb20gc3RhcnRpbmcgdGhlIGJ1ZyByZXBvcnQgdW50aWwgaXQgaXMgcmVhZHkgdG8gYmUgc2VudDsgcGxlYXNlIGJlCiAgICAgICAgIHBhdGllbnQuPC9zdHJpbmc+CisgICAgPCEtLSBUaXRsZSBpbiB0aGUgYnVncmVwb3J0IGRpYWxvZyBmb3IgdGhlIGludGVyYWN0aXZlIHdvcmtmbG93LiBbQ0hBUiBMSU1JVD0yMF0gLS0+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIFlFVDogZmluYWwgcGhyYXNpbmcgc3RpbGwgYmVpbmcgZGlzY3Vzc2VkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9pbnRlcmFjdGl2ZV90aXRsZSI+SW50ZXJhY3RpdmUgcmVwb3J0PC9zdHJpbmc+CisgICAgPCEtLSBTdW1tYXJ5IGluIHRoZSBidWdyZXBvcnQgZGlhbG9nIGZvciB0aGUgaW50ZXJhY3RpdmUgd29ya2Zsb3cuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDwhLS0gRE8gTk9UIFRSQU5TTEFURSBZRVQ6IGZpbmFsIHBocmFzaW5nIHN0aWxsIGJlaW5nIGRpc2N1c3NlZCAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9vcHRpb25faW50ZXJhY3RpdmVfc3VtbWFyeSI+VXNlIHRoaXMgdW5kZXIgbW9zdCBjaXJjdW1zdGFuY2VzLgorICAgICAgICBJdCBhbGxvd3MgeW91IHRvIHRyYWNrIHByb2dyZXNzIG9mIHRoZSByZXBvcnQgYW5kIGVudGVyIG1vcmUgZGV0YWlscyBhYm91dCB0aGUgcHJvYmxlbS4KKyAgICAgICAgSXQgbWlnaHQgb21pdCBzb21lIGxlc3MtdXNlZCBzZWN0aW9ucyB0aGF0IHRha2UgYSBsb25nIHRpbWUgdG8gcmVwb3J0Ljwvc3RyaW5nPgorICAgIDwhLS0gVGl0bGUgaW4gdGhlIGJ1Z3JlcG9ydCBkaWFsb2cgZm9yIHRoZSBmdWxsIHdvcmtmbG93LiBbQ0hBUiBMSU1JVD0yMF0gLS0+CisgICAgPCEtLSBETyBOT1QgVFJBTlNMQVRFIFlFVDogZmluYWwgcGhyYXNpbmcgc3RpbGwgYmVpbmcgZGlzY3Vzc2VkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9mdWxsX3RpdGxlIj5GdWxsIHJlcG9ydDwvc3RyaW5nPgorICAgIDwhLS0gU3VtbWFyeSBpbiB0aGUgYnVncmVwb3J0IGRpYWxvZyBmb3IgdGhlIGZ1bGwgd29ya2Zsb3cuIFtDSEFSIExJTUlUPTIwXSAtLT4KKyAgICA8IS0tIERPIE5PVCBUUkFOU0xBVEUgWUVUOiBmaW5hbCBwaHJhc2luZyBzdGlsbCBiZWluZyBkaXNjdXNzZWQgLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfb3B0aW9uX2Z1bGxfc3VtbWFyeSI+VXNlIHRoaXMgb3B0aW9uIGZvciBtaW5pbWFsIGludGVyZmVyZW5jZSB3aGVuCisgICAgICAgIHlvdXIgZGV2aWNlIGlzIHVucmVzcG9uc2l2ZSBvciB0b28gc2xvdywgb3Igd2hlbiB5b3UgbmVlZCBhbGwgc2VjdGlvbnMuCisgICAgICAgIERvZXMgbm90IHRha2UgYSBzY3JlZW5zaG90IG9yIGFsbG93IHlvdSB0byBlbnRlciBtb3JlIGRldGFpbHMuPC9zdHJpbmc+CisgICAgPCEtLSAgVG9hc3QgbWVzc2FnZSBpbmZvcm1pbmcgdXNlciBpbiBob3cgbWFueSBzZWNvbmRzIGEgYnVncmVwb3J0IHNjcmVlbnNob3Qgd2lsbCBiZSB0YWtlbiAtLT4KKyAgICA8IS0tIERPIE5PVCBUUkFOU0xBVEUgWUVUOiBmaW5hbCBwaHJhc2luZyBzdGlsbCBiZWluZyBkaXNjdXNzZWQgLS0+CisgICAgPHBsdXJhbHMgbmFtZT0iYnVncmVwb3J0X2NvdW50ZG93biI+CisgICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRha2luZyBzY3JlZW5zaG90IGZvciBidWcgcmVwb3J0IGluIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBzZWNvbmQuPC9pdGVtPgorICAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlRha2luZyBzY3JlZW5zaG90IGZvciBidWcgcmVwb3J0IGluIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLjwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisKICAgICA8IS0tIEZvcm1hdCBmb3IgYnVpbGQgc3VtbWFyeSBpbmZvIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0YXR1cyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+JXMgKCVzKTwvc3RyaW5nPgogCkBAIC01MzcsNiArNTYxLDkgQEAKICAgICA8IS0tIFRoZSBkaXZpZGVyIHN5bWJvbCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgbm90aWZpY2F0aW9uIGhlYWRlci4gbm90IHRyYW5zbGF0YWJsZSBbQ0hBUiBMSU1JVD0xXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfZGl2aWRlcl9zeW1ib2wiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPuKAojwvc3RyaW5nPgogCisgICAgPCEtLSBUZXh0IHNob3duIGluIHBsYWNlIG9mIG5vdGlmaWNhdGlvbiBjb250ZW50cyB3aGVuIHRoZSBub3RpZmljYXRpb24gaXMgaGlkZGVuIG9uIGEgc2VjdXJlIGxvY2tzY3JlZW4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiPkNvbnRlbnRzIGhpZGRlbjwvc3RyaW5nPgorCiAgICAgPCEtLSBEaXNwbGF5ZWQgdG8gdGhlIHVzZXIgdG8gdGVsbCB0aGVtIHRoYXQgdGhleSBoYXZlIHN0YXJ0ZWQgdXAgdGhlIHBob25lIGluICJzYWZlIG1vZGUiIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ic2FmZU1vZGUiPlNhZmUgbW9kZTwvc3RyaW5nPgogCkBAIC02MjUsNiArNjUyLDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X2Rlc2NfY2FuQ29udHJvbE1hZ25pZmljYXRpb24iPkNvbnRyb2wgdGhlIGRpc3BsYXlcJ3Mgem9vbSBsZXZlbCBhbmQKICAgICAgICAgcG9zaXRpb25pbmcuPC9zdHJpbmc+CiAKKyAgICA8IS0tIFRpdGxlIGZvciB0aGUgY2FwYWJpbGl0eSBvZiBhbiBhY2Nlc3NpYmlsaXR5IHNlcnZpY2UgdG8gcGVyZm9ybSBnZXN0dXJlcy4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjYXBhYmlsaXR5X3RpdGxlX2NhblBlcmZvcm1HZXN0dXJlcyI+UGVyZm9ybSBnZXN0dXJlczwvc3RyaW5nPgorICAgIDwhLS0gRGVzY3JpcHRpb24gZm9yIHRoZSBjYXBhYmlsaXR5IG9mIGFuIGFjY2Vzc2liaWxpdHkgc2VydmljZSB0byBwZXJmb3JtIGdlc3R1cmVzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5QZXJmb3JtR2VzdHVyZXMiPkNhbiB0YXAsIHN3aXBlLCBwaW5jaCwgYW5kIHBlcmZvcm0gb3RoZXIKKyAgICAgICAgZ2VzdHVyZXMuPC9zdHJpbmc+CisKICAgICA8IS0tICBQZXJtaXNzaW9ucyAtLT4KIAogICAgIDwhLS0gVGl0bGUgb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgpAQCAtOTk5LDExICsxMDMyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9InBlcm1kZXNjX3ZpYnJhdGUiPkFsbG93cyB0aGUgYXBwIHRvIGNvbnRyb2wgdGhlIHZpYnJhdG9yLjwvc3RyaW5nPgogCiAgICAgPCEtLSBUaXRsZSBvZiBhbiBhcHBsaWNhdGlvbiBwZXJtaXNzaW9uLCBsaXN0ZWQgc28gdGhlIHVzZXIgY2FuIGNob29zZSB3aGV0aGVyIHRoZXkgd2FudCB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24gdG8gZG8gdGhpcy4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJwZXJtbGFiX2ZsYXNobGlnaHQiPmNvbnRyb2wgZmxhc2hsaWdodDwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgotICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfZmxhc2hsaWdodCI+QWxsb3dzIHRoZSBhcHAgdG8gY29udHJvbCB0aGUgZmxhc2hsaWdodC48L3N0cmluZz4KLQotICAgIDwhLS0gVGl0bGUgb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWxhYl9jYWxsUGhvbmUiPmRpcmVjdGx5IGNhbGwgcGhvbmUgbnVtYmVyczwvc3RyaW5nPgogICAgIDwhLS0gRGVzY3JpcHRpb24gb2YgYW4gYXBwbGljYXRpb24gcGVybWlzc2lvbiwgbGlzdGVkIHNvIHRoZSB1c2VyIGNhbiBjaG9vc2Ugd2hldGhlciB0aGV5IHdhbnQgdG8gYWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvIGRvIHRoaXMuIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icGVybWRlc2NfY2FsbFBob25lIj5BbGxvd3MgdGhlIGFwcCB0byBjYWxsIHBob25lIG51bWJlcnMKQEAgLTI0NTMsNiArMjQ4MSw5IEBACiAgICAgPCEtLSBJdGVtIG9uIEVkaXRUZXh0IGNvbnRleHQgbWVudS4gVGhpcyBhY3Rpb24gaXMgdXNlZCB0byBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQgaW50byB0aGUgZWlkdCBmaWVsZCAtLT4KICAgICA8c3RyaW5nIG5hbWU9InBhc3RlIj5QYXN0ZTwvc3RyaW5nPgogCisgICAgPCEtLSBJdGVtIG9uIEVkaXRUZXh0IGNvbnRleHQgbWVudS4gVGhpcyBhY3Rpb24gaXMgdXNlZCB0byBwYXN0ZSBmcm9tIHRoZSBjbGlwYm9hcmQgaW50byB0aGUgZWlkdCBmaWVsZCB3aXRob3V0IGZvcm1hdHRpbmcgLS0+CisgICAgPHN0cmluZyBuYW1lPSJwYXN0ZV9hc19wbGFpbl90ZXh0Ij5QYXN0ZSBhcyBwbGFpbiB0ZXh0PC9zdHJpbmc+CisKICAgICA8IS0tIEl0ZW0gb24gRWRpdFRleHQgY29udGV4dCBtZW51LiBUaGlzIGFjdGlvbiBpcyB1c2VkIHRvIHJlcGxhY2UgdGhlIGN1cnJlbnQgd29yZCBieSBvdGhlciBzdWdnZXN0ZWQgd29yZHMsIHN1Z2dlc3RlZCBieSB0aGUgSU1FIG9yIHRoZSBzcGVsbCBjaGVja2VyIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icmVwbGFjZSI+UmVwbGFjZVx1MjAyNjwvc3RyaW5nPgogCkBAIC0yNDY1LDYgKzI0OTYsMTIgQEAKICAgICA8IS0tIEl0ZW0gb24gRWRpdFRleHQgY29udGV4dCBtZW51LiBBZGRlZCBvbmx5IHdoZW4gdGhlIGNvbnRleHQgbWVudSBpcyBub3QgZW1wdHksIGl0IGVuYWJsZSBzZWxlY3Rpb24gY29udGV4dCBtb2RlLiBbQ0hBUiBMSU1JVD0yMF0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RUZXh0TW9kZSI+U2VsZWN0IHRleHQ8L3N0cmluZz4KIAorICAgIDwhLS0gSXRlbSBvbiBFZGl0VGV4dCBjb250ZXh0IG1lbnUuIFRoaXMgYWN0aW9uIGlzIHVzZWQgdG8gdW5kbyBhIHRleHQgZWRpdCBvcGVyYXRpb24uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyI+VW5kbzwvc3RyaW5nPgorCisgICAgPCEtLSBJdGVtIG9uIEVkaXRUZXh0IGNvbnRleHQgbWVudS4gVGhpcyBhY3Rpb24gaXMgdXNlZCB0byByZWRvIGEgdGV4dCBlZGl0IG9wZXJhdGlvbi4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJyZWRvIj5SZWRvPC9zdHJpbmc+CisKICAgICA8IS0tIFRleHQgc2VsZWN0aW9uIGNvbnRleHR1YWwgbW9kZSB0aXRsZSwgZGlzcGxheWVkIGluIHRoZSBDQUIuIFtDSEFSIExJTUlUPTIwXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSI+VGV4dCBzZWxlY3Rpb248L3N0cmluZz4KIApAQCAtMzA2OSw2ICszMTA2LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9saXN0ZW5lcl9iaW5kaW5nX2xhYmVsIj5Ob3RpZmljYXRpb24gbGlzdGVuZXI8L3N0cmluZz4KICAgICA8IS0tIExhYmVsIHRvIHNob3cgZm9yIGEgc2VydmljZSB0aGF0IGlzIHJ1bm5pbmcgYmVjYXVzZSBpdCBpcyBwcm92aWRpbmcgY29uZGl0aW9ucy4gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJjb25kaXRpb25fcHJvdmlkZXJfc2VydmljZV9iaW5kaW5nX2xhYmVsIj5Db25kaXRpb24gcHJvdmlkZXI8L3N0cmluZz4KKyAgICA8IS0tIExhYmVsIHRvIHNob3cgZm9yIGEgc2VydmljZSB0aGF0IGlzIHJ1bm5pbmcgYmVjYXVzZSBpdCBpcyBvYnNlcnZpbmcgYW5kIG1vZGlmeWluZyB0aGUKKyAgICAgICAgIGltcG9ydGFuY2Ugb2YgdGhlIHVzZXIncyBub3RpZmljYXRpb25zLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCI+Tm90aWZpY2F0aW9uIGFzc2lzdGFudDwvc3RyaW5nPgogCiAgICAgPCEtLSBEbyBOb3QgVHJhbnNsYXRlOiBBbHRlcm5hdGUgZXJpLnhtbCAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImFsdGVybmF0ZV9lcmlfZmlsZSI+L2RhdGEvZXJpLnhtbDwvc3RyaW5nPgpAQCAtMzk1NCwyMiArMzk5NCw2IEBACiAgICAgPCEtLSBbQ0hBUl9MSU1JVD1OT05FXSBCYXR0ZXJ5IHNhdmVyOiBGZWF0dXJlIGRlc2NyaXB0aW9uIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9kZXNjcmlwdGlvbiI+VG8gaGVscCBpbXByb3ZlIGJhdHRlcnkgbGlmZSwgYmF0dGVyeSBzYXZlciByZWR1Y2VzIHlvdXIgZGV2aWNl4oCZcyBwZXJmb3JtYW5jZSBhbmQgbGltaXRzIHZpYnJhdGlvbiwgbG9jYXRpb24gc2VydmljZXMsIGFuZCBtb3N0IGJhY2tncm91bmQgZGF0YS4gRW1haWwsIG1lc3NhZ2luZywgYW5kIG90aGVyIGFwcHMgdGhhdCByZWx5IG9uIHN5bmNpbmcgbWF5IG5vdCB1cGRhdGUgdW5sZXNzIHlvdSBvcGVuIHRoZW0uXG5cbkJhdHRlcnkgc2F2ZXIgdHVybnMgb2ZmIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3VyIGRldmljZSBpcyBjaGFyZ2luZy48L3N0cmluZz4KIAotCi0gICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBJbXBvcnRhbmNlIHNsaWRlcjogYmxvY2tlZCBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCI+QmxvY2tlZDogTmV2ZXIgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBsb3cgaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyI+TG93OiBTaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0PC9zdHJpbmc+Ci0KLSAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBub3JtYWwgaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiPk5vcm1hbDogU2lsZW50bHkgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBoaWdoIGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIj5IaWdoOiBTaG93IGF0IHRoZSB0b3Agb2YgdGhlIG5vdGlmaWNhdGlvbnMgbGlzdCBhbmQgbWFrZSBzb3VuZDwvc3RyaW5nPgotCi0gICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBJbXBvcnRhbmNlIHNsaWRlcjogbWF4IGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiPlVyZ2VudDogUGVlayBvbnRvIHRoZSBzY3JlZW4gYW5kIG1ha2Ugc291bmQ8L3N0cmluZz4KLQogICAgIDwhLS0gWmVuIG1vZGUgY29uZGl0aW9uIC0gc3VtbWFyeTogdGltZSBkdXJhdGlvbiBpbiBtaW51dGVzLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KICAgICA8cGx1cmFscyBuYW1lPSJ6ZW5fbW9kZV9kdXJhdGlvbl9taW51dGVzX3N1bW1hcnkiPgogICAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Gb3Igb25lIG1pbnV0ZSAodW50aWwgPHhsaWZmOmcgaWQ9ImZvcm1hdHRlZFRpbWUiIGV4YW1wbGU9IjEwOjAwIFBNIj4lMiRzPC94bGlmZjpnPik8L2l0ZW0+CkBAIC00MTAyLDQgKzQxMjYsNyBAQAogICAgIDwvcGx1cmFscz4KIAogICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwiPk1pc2NlbGxhbmVvdXM8L3N0cmluZz4KKworICAgIDxzdHJpbmcgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3RvcGljIj5Zb3Ugc2V0IHRoZSBpbXBvcnRhbmNlIG9mIHRoZXNlIG5vdGlmaWNhdGlvbnMuPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbXBvcnRhbmNlX2Zyb21fcGVyc29uIj5UaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIG9mIHRoZSBwZW9wbGUgaW52b2x2ZWQuPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbCBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAppbmRleCA5YTQwMTZiLi45MzdkODNkIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlcy54bWwKKysrIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0xMjM1LDcgKzEyMzUsNyBAQAogICAgICAgICA8aXRlbSBuYW1lPSJzdWJ0aXRsZVRleHRBcHBlYXJhbmNlIj5Ac3R5bGUvVGV4dEFwcGVhcmFuY2UuV2lkZ2V0LlRvb2xiYXIuU3VidGl0bGU8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Im1pbkhlaWdodCI+P2F0dHIvYWN0aW9uQmFyU2l6ZTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGl0bGVNYXJnaW4iPjRkcDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0ibWF4QnV0dG9uSGVpZ2h0Ij41NmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJtYXhCdXR0b25IZWlnaHQiPkBkaW1lbi9hY3Rpb25fYmFyX2RlZmF1bHRfaGVpZ2h0X21hdGVyaWFsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJidXR0b25HcmF2aXR5Ij50b3A8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9Im5hdmlnYXRpb25CdXR0b25TdHlsZSI+QHN0eWxlL1dpZGdldC5Ub29sYmFyLkJ1dHRvbi5OYXZpZ2F0aW9uPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJjb2xsYXBzZUljb24iPj9hdHRyL2hvbWVBc1VwSW5kaWNhdG9yPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWF0ZXJpYWwueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWF0ZXJpYWwueG1sCmluZGV4IGFkY2I3OWIuLjNkNWY2YWIgMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX21hdGVyaWFsLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19tYXRlcmlhbC54bWwKQEAgLTQzMiw2ICs0MzIsOCBAQAogICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0U2l6ZSI+QGRpbWVuL25vdGlmaWNhdGlvbl90ZXh0X3NpemU8L2l0ZW0+CiAgICAgPC9zdHlsZT4KIAorICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uUmVwbHkiIC8+CisKICAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlRpdGxlIj4KICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yIj5AY29sb3IvcHJpbWFyeV90ZXh0X2RlZmF1bHRfbWF0ZXJpYWxfbGlnaHQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRleHRTaXplIj5AZGltZW4vbm90aWZpY2F0aW9uX3RpdGxlX3RleHRfc2l6ZTwvaXRlbT4KQEAgLTQ0MiwxMiArNDQ0LDExIEBACiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uSW5mbyI+CisgICAgICAgIDxpdGVtIG5hbWU9InRleHRDb2xvciI+QGNvbG9yL3RlcnRpYXJ5X3RleHRfZGVmYXVsdF9tYXRlcmlhbF9saWdodDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dFNpemUiPkBkaW1lbi9ub3RpZmljYXRpb25fc3VidGV4dF9zaXplPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKLSAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlRpbWUiPgotICAgICAgICA8aXRlbSBuYW1lPSJ0ZXh0U2l6ZSI+QGRpbWVuL25vdGlmaWNhdGlvbl9zdWJ0ZXh0X3NpemU8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlRpbWUiIHBhcmVudD0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLkluZm8iIC8+CiAKICAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLkVtcGhhc2lzIj4KICAgICAgICAgPGl0ZW0gbmFtZT0idGV4dENvbG9yIj4jNjYwMDAwMDA8L2l0ZW0+CkBAIC03NDQsNiArNzQ1LDExIEBACiAgICAgICAgIDxpdGVtIG5hbWU9ImJhY2tncm91bmQiPkBkcmF3YWJsZS9jb250cm9sX2JhY2tncm91bmRfMzJkcF9tYXRlcmlhbDwvaXRlbT4KICAgICA8L3N0eWxlPgogCisgICAgPCEtLSBBIHNlZWsgYmFyIHdpdGggdGljayBtYXJrcyBhdCBlYWNoIHByb2dyZXNzIHZhbHVlLiAtLT4KKyAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0Lk1hdGVyaWFsLlNlZWtCYXIuRGlzY3JldGUiPgorICAgICAgICA8aXRlbSBuYW1lPSJ0aWNrTWFyayI+QGRyYXdhYmxlL3NlZWtiYXJfdGlja19tYXJrX21hdGVyaWFsPC9pdGVtPgorICAgIDwvc3R5bGU+CisKICAgICA8c3R5bGUgbmFtZT0iV2lkZ2V0Lk1hdGVyaWFsLlJhdGluZ0JhciIgcGFyZW50PSJXaWRnZXQuUmF0aW5nQmFyIj4KICAgICAgICAgPGl0ZW0gbmFtZT0icHJvZ3Jlc3NEcmF3YWJsZSI+QGRyYXdhYmxlL3JhdGluZ2Jhcl9tYXRlcmlhbDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iaW5kZXRlcm1pbmF0ZURyYXdhYmxlIj5AZHJhd2FibGUvcmF0aW5nYmFyX21hdGVyaWFsPC9pdGVtPgpkaWZmIC0tZ2l0IGEvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWljcm8ueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zdHlsZXNfbWljcm8ueG1sCmluZGV4IDA1ODM1ZTcuLjdkZGU1ZjggMTAwNjQ0Ci0tLSBhL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3R5bGVzX21pY3JvLnhtbAorKysgYi9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N0eWxlc19taWNyby54bWwKQEAgLTI2LDYgKzI2LDEwIEBACiAgICAgICAgIDxpdGVtIG5hbWU9InRhc2tPcGVuRXhpdEFuaW1hdGlvbiI+QG51bGw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9InRhc2tDbG9zZUVudGVyQW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0idGFza0Nsb3NlRXhpdEFuaW1hdGlvbiI+QGFuaW0vc2xpZGVfb3V0X21pY3JvPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJ0YXNrVG9Gcm9udEVudGVyQW5pbWF0aW9uIj5AYW5pbS9zbGlkZV9pbl9taWNybzwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGFza1RvRnJvbnRFeGl0QW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGFza1RvQmFja0VudGVyQW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0idGFza1RvQmFja0V4aXRBbmltYXRpb24iPkBhbmltL3NsaWRlX291dF9taWNybzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0id2FsbHBhcGVyT3BlbkVudGVyQW5pbWF0aW9uIj5AbnVsbDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0id2FsbHBhcGVyT3BlbkV4aXRBbmltYXRpb24iPkBhbmltL3NsaWRlX291dF9taWNybzwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0id2FsbHBhcGVyQ2xvc2VFbnRlckFuaW1hdGlvbiI+QGFuaW0vc2xpZGVfaW5fbWljcm88L2l0ZW0+CmRpZmYgLS1naXQgYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sIGIvY29yZS9yZXMvcmVzL3ZhbHVlcy9zeW1ib2xzLnhtbAppbmRleCBlYWRjYWUwLi43MDZkZDIwIDEwMDY0NAotLS0gYS9jb3JlL3Jlcy9yZXMvdmFsdWVzL3N5bWJvbHMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy92YWx1ZXMvc3ltYm9scy54bWwKQEAgLTE2LDEwICsxNiw2IEBACiAqLwogLS0+CiA8cmVzb3VyY2VzPgotICA8IS0tIFdlIGRvbid0IHdhbnQgdG8gcHVibGlzaCBwcml2YXRlIHN5bWJvbHMgaW4gYW5kcm9pZC5SIGFzIHBhcnQgb2YgdGhlCi0gICAgICAgU0RLLiAgSW5zdGVhZCwgcHV0IHRoZW0gaGVyZS4gLS0+Ci0gIDxwcml2YXRlLXN5bWJvbHMgcGFja2FnZT0iY29tLmFuZHJvaWQuaW50ZXJuYWwiIC8+Ci0KICAgPCEtLSBQcml2YXRlIHN5bWJvbHMgdGhhdCB3ZSBuZWVkIHRvIHJlZmVyZW5jZSBmcm9tIGZyYW1ld29yayBjb2RlLiAgU2VlCiAgICAgICAgZnJhbWV3b3Jrcy9iYXNlL2NvcmUvcmVzL01ha2VKYXZhU3ltYm9scy5zZWQgZm9yIGhvdyB0byBlYXNpbHkgZ2VuZXJhdGUKICAgICAgICB0aGlzLgpAQCAtMzA3LDYgKzMwMyw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJib29sIiBuYW1lPSJjb25maWdfc3VwcG9ydE1pY05lYXJVbHRyYXNvdW5kIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iYm9vbCIgbmFtZT0iY29uZmlnX3N1cHBvcnRTcGVha2VyTmVhclVsdHJhc291bmQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJib29sIiBuYW1lPSJjb25maWdfZnJlZWZvcm1XaW5kb3dNYW5hZ2VtZW50IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJjb25maWdfZGVmYXVsdFBpY3R1cmVJblBpY3R1cmVCb3VuZHMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfd2lmaV9mcmFtZXdvcmtfNUdIel9wcmVmZXJlbmNlX2Jvb3N0X3RocmVzaG9sZCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ193aWZpX2ZyYW1ld29ya181R0h6X3ByZWZlcmVuY2VfYm9vc3RfZmFjdG9yIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaW50ZWdlciIgbmFtZT0iY29uZmlnX3dpZmlfZnJhbWV3b3JrXzVHSHpfcHJlZmVyZW5jZV9wZW5hbHR5X3RocmVzaG9sZCIgLz4KQEAgLTQ1OSw3ICs0NTYsMTAgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJwZXJtaXNzaW9uX3JlcXVlc3Rfbm90aWZpY2F0aW9uX3dpdGhfc3VidGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InByZXBlbmRfc2hvcnRjdXRfbGFiZWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InBhc3RlX2FzX3BsYWluX3RleHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InJlcGxhY2UiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InVuZG8iIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InJlZG8iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9InRleHRTZWxlY3Rpb25DQUJUaXRsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iQmFNbWkiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9IkNMSVJEZWZhdWx0T2ZmTmV4dENhbGxPZmYiIC8+CkBAIC01NjEsNiArNTYxLDggQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5SZXRyaWV2ZVdpbmRvd0NvbnRlbnQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNhcGFiaWxpdHlfZGVzY19jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5Db250cm9sTWFnbmlmaWNhdGlvbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY2FwYWJpbGl0eV9kZXNjX2NhblBlcmZvcm1HZXN0dXJlcyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY2FwYWJpbGl0eV90aXRsZV9jYW5QZXJmb3JtR2VzdHVyZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNmVGVtcGxhdGVGb3J3YXJkZWRUaW1lIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJjZlRlbXBsYXRlTm90Rm9yd2FyZGVkIiAvPgpAQCAtNTc1LDYgKzU3Nyw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbmZpZ19udHBTZXJ2ZXIiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbmZpZ191c2VyYWdlbnRwcm9maWxlX3VybCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY29uZmlnX3dpZmlfcDJwX2RldmljZV90eXBlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJjb25maWdfYXBwc05vdFJlcG9ydGluZ0NyYXNoZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbnRlbnRTZXJ2aWNlU3luYyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY29udGVudFNlcnZpY2VTeW5jTm90aWZpY2F0aW9uVGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbnRlbnRTZXJ2aWNlVG9vTWFueURlbGV0ZXNOb3RpZmljYXRpb25EZXNjIiAvPgpAQCAtMTEwNCw2ICsxMTA3LDcgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iY29uZmlnX2V0aGVybmV0X3RjcF9idWZmZXJzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJjb25maWdfd2lmaV90Y3BfYnVmZmVycyIgLz4KIAorICA8amF2YS1zeW1ib2wgdHlwZT0icGx1cmFscyIgbmFtZT0iYnVncmVwb3J0X2NvdW50ZG93biIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InBsdXJhbHMiIG5hbWU9ImR1cmF0aW9uX2hvdXJzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0icGx1cmFscyIgbmFtZT0iZHVyYXRpb25fbWludXRlcyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InBsdXJhbHMiIG5hbWU9ImR1cmF0aW9uX3NlY29uZHMiIC8+CkBAIC0xMTI0LDYgKzExMjgsNyBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iYXJyYXkiIG5hbWU9InNpbV9jb2xvcnMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0ic3BlY2lhbF9sb2NhbGVfY29kZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0ic3BlY2lhbF9sb2NhbGVfbmFtZXMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0ic3VwcG9ydGVkX2xvY2FsZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0iY29uZmlnX2NkbWFfZHVuX3N1cHBvcnRlZF90eXBlcyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImFycmF5IiBuYW1lPSJjb25maWdfZGlzYWJsZWRVbnRpbFVzZWRQcmVpbnN0YWxsZWRJbWVzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iYXJyYXkiIG5hbWU9ImNvbmZpZ19kaXNhYmxlZFVudGlsVXNlZFByZWluc3RhbGxlZENhcnJpZXJBcHBzIiAvPgpAQCAtMTI0Nyw2ICsxMjUyLDcgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJjbGluZ19hcnJvd191cCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJjbGluZ19iZyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJpY19jb3JwX2JhZGdlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImljX2NvcnBfYmFkZ2Vfb2ZmIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImljX2NvcnBfaWNvbl9iYWRnZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJpY19jb3JwX2ljb24iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iaWNfY29ycF9zdGF0dXNiYXJfaWNvbiIgLz4KQEAgLTE0ODksOSArMTQ5NSwxNCBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iYm9vbCIgbmFtZT0idGFyZ2V0X2hvbmV5Y29tYl9uZWVkc19vcHRpb25zX21lbnUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0iZG9ja2VkX3N0YWNrX2RpdmlkZXJfdGhpY2tuZXNzIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2luc2V0cyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19kb2NrZWRTdGFja0RpdmlkZXJTbmFwTW9kZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImZyYWN0aW9uIiBuYW1lPSJkb2NrZWRfc3RhY2tfZGl2aWRlcl9maXhlZF9yYXRpbyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl9oZWlnaHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ibmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2xhbmRzY2FwZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl93aWR0aCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl9oZWlnaHRfY2FyX21vZGUiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ibmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2xhbmRzY2FwZV9jYXJfbW9kZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJuYXZpZ2F0aW9uX2Jhcl93aWR0aF9jYXJfbW9kZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJzdGF0dXNfYmFyX2hlaWdodCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJpY19qb2dfZGlhbF9zb3VuZF9vZmYiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iaWNfam9nX2RpYWxfc291bmRfb24iIC8+CkBAIC0xNTYyLDkgKzE1NzMsMTMgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iYW5kcm9pZF9wcmVwYXJpbmdfYXBrIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJhbmRyb2lkX3N0YXJ0X3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJhbmRyb2lkX3VwZ3JhZGluZ190aXRsZSIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iYnVncmVwb3J0X3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfbWVzc2FnZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9mdWxsX3N1bW1hcnkiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImJ1Z3JlcG9ydF9vcHRpb25fZnVsbF90aXRsZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iYnVncmVwb3J0X29wdGlvbl9pbnRlcmFjdGl2ZV9zdW1tYXJ5IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfb3B0aW9uX2ludGVyYWN0aXZlX3RpdGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfc3RhdHVzIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJidWdyZXBvcnRfdGl0bGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbmZpZ19vcmllbnRhdGlvblNlbnNvclR5cGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImZhY2V1bmxvY2tfbXVsdGlwbGVfZmFpbHVyZXMiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Imdsb2JhbF9hY3Rpb25fcG93ZXJfb2ZmIiAvPgpAQCAtMTY5Nyw2ICsxNzEyLDggQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImZyYWN0aW9uIiBuYW1lPSJjb25maWdfZGltQmVoaW5kRmFkZUR1cmF0aW9uIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZnJhY3Rpb24iIG5hbWU9ImNvbmZpZ19kaXNwbGF5RnJhY3Rpb25Gb3JEZWZhdWx0TWluaW1hbFNpemVPZlJlc2l6ZWFibGVUYXNrIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZnJhY3Rpb24iIG5hbWU9ImNvbmZpZ19zY3JlZW5BdXRvQnJpZ2h0bmVzc0RvemVTY2FsZUZhY3RvciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImZyYWN0aW9uIiBuYW1lPSJjb25maWdfYXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfYXV0b0JyaWdodG5lc3NBbWJpZW50TGlnaHRIb3Jpem9uIi8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpbnRlZ2VyIiBuYW1lPSJjb25maWdfYXV0b0JyaWdodG5lc3NCcmlnaHRlbmluZ0xpZ2h0RGVib3VuY2UiLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19hdXRvQnJpZ2h0bmVzc0RhcmtlbmluZ0xpZ2h0RGVib3VuY2UiLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImludGVnZXIiIG5hbWU9ImNvbmZpZ19hdXRvQnJpZ2h0bmVzc0xpZ2h0U2Vuc29yUmF0ZSIvPgpAQCAtMTgwNyw2ICsxODI0LDcgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibG93X2ludGVybmFsX3N0b3JhZ2Vfdmlld190aXRsZSIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibm90aWZpY2F0aW9uX2xpc3RlbmVyX2JpbmRpbmdfbGFiZWwiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImNvbmRpdGlvbl9wcm92aWRlcl9zZXJ2aWNlX2JpbmRpbmdfbGFiZWwiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0icmVwb3J0IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfaW5wdXRfbWV0aG9kIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3Rfa2V5Ym9hcmRfbGF5b3V0X25vdGlmaWNhdGlvbl90aXRsZSIgLz4KQEAgLTE4NzgsNyArMTg5Niw2IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJsYXlvdXQiIG5hbWU9Im5vdGlmaWNhdGlvbl90ZW1wbGF0ZV9tYXRlcmlhbF9iaWdfdGV4dCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0ibm90aWZpY2F0aW9uX3RlbXBsYXRlX2hlYWRlciIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0ibm90aWZpY2F0aW9uX21hdGVyaWFsX21lZGlhX2FjdGlvbiIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImNvbG9yIiBuYW1lPSJub3RpZmljYXRpb25fYWN0aW9uX2NvbG9yX2ZpbHRlciIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImNvbG9yIiBuYW1lPSJub3RpZmljYXRpb25faWNvbl9kZWZhdWx0X2NvbG9yIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iY29sb3IiIG5hbWU9Im5vdGlmaWNhdGlvbl9wcm9ncmVzc19iYWNrZ3JvdW5kX2NvbG9yIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9Im1lZGlhX2FjdGlvbnMiIC8+CkBAIC0xOTU4LDkgKzE5NzUsMTIgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImJvb2wiIG5hbWU9ImNvbmZpZ19idWlsdF9pbl9zaXBfcGhvbmUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibWF4aW1pemVfd2luZG93IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImNsb3NlX3dpbmRvdyIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0iZGVjb3JfY2FwdGlvbl9saWdodCIgLz4KLSAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0iZGVjb3JfY2FwdGlvbl9kYXJrIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJkZWNvcl9jYXB0aW9uIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImRlY29yX2NhcHRpb25fdGl0bGVfZm9jdXNlZCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJkZWNvcl9jbG9zZV9idXR0b25fZGFyayIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJkZWNvcl9jbG9zZV9idXR0b25fbGlnaHQiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iZGVjb3JfbWF4aW1pemVfYnV0dG9uX2RhcmsiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iZGVjb3JfbWF4aW1pemVfYnV0dG9uX2xpZ2h0IiAvPgogCiAgIDwhLS0gRnJvbSBUZWxlcGhvbnlQcm92aWRlciAtLT4KICAgPGphdmEtc3ltYm9sIHR5cGU9InhtbCIgbmFtZT0iYXBucyIgLz4KQEAgLTIwMjAsNyArMjA0MCw3IEBACiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJhdHRyIiBuYW1lPSJhY3Rpb25Nb2RlV2ViU2VhcmNoRHJhd2FibGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9IndlYnNlYXJjaCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRyYXdhYmxlIiBuYW1lPSJpY19tZWRpYV92aWRlb19wb3N0ZXIiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJhcnJheSIgbmFtZT0iY29uZmlnX3dlYlZpZXdQYWNrYWdlTmFtZXMiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJ4bWwiIG5hbWU9ImNvbmZpZ193ZWJ2aWV3X3BhY2thZ2VzIiAvPgogCiAgIDwhLS0gRnJvbSBTdWJ0aXRsZVZpZXcgLS0+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ic3VidGl0bGVfY29ybmVyX3JhZGl1cyIgLz4KQEAgLTIwODUsMTEgKzIxMDUsNiBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iYXJyYXkiIG5hbWU9ImNvbmZpZ19zeXN0ZW1fY29uZGl0aW9uX3Byb3ZpZGVycyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0ibXV0ZWRfYnkiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Inplbl9tb2RlX2FsYXJtIiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIC8+Ci0gIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgLz4KIAogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfZGF5IiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJzZWxlY3RfeWVhciIgLz4KQEAgLTIyNjcsNiArMjI4Miw3IEBACiAKICAgPCEtLSBGbG9hdGluZyB0b29sYmFyIC0tPgogICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9ImZsb2F0aW5nX3Rvb2xiYXJfbWVudV9pdGVtX2ltYWdlX2J1dHRvbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJvdmVyZmxvdyIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0iZmxvYXRpbmdfcG9wdXBfY29udGFpbmVyIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJmbG9hdGluZ19wb3B1cF9tZW51X2J1dHRvbiIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImxheW91dCIgbmFtZT0iZmxvYXRpbmdfcG9wdXBfb3Blbl9vdmVyZmxvd19idXR0b24iIC8+CkBAIC0yMzU4LDcgKzIzNzQsMTMgQEAKICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJhZGRUb0RpY3Rpb25hcnlCdXR0b24iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0iZGVsZXRlQnV0dG9uIiAvPgogCisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X2NvbnRhaW5lciIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJub3RpZmljYXRpb25fbWF0ZXJpYWxfcmVwbHlfdGV4dF8xIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iaWQiIG5hbWU9Im5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yZXBseV90ZXh0XzIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0ibm90aWZpY2F0aW9uX21hdGVyaWFsX3JlcGx5X3RleHRfMyIgLz4KKwogICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25fY2hpbGRyZW5fY291bnRfYnJhY2tldGVkIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3RyaW5nIiBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0iYXBwX25hbWVfdGV4dCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImlkIiBuYW1lPSJudW1iZXJfb2ZfY2hpbGRyZW4iIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0iaGVhZGVyX3N1Yl90ZXh0IiAvPgpAQCAtMjM3NCwxMCArMjM5NiwzNCBAQAogICA8amF2YS1zeW1ib2wgdHlwZT0iZHJhd2FibGUiIG5hbWU9ImljX2V4cGFuZF9idW5kbGUiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0iaWNfY29sbGFwc2VfYnVuZGxlIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9oZWFkZXJfaGVpZ2h0IiAvPgotICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9iaWdfcGljdHVyZV9jb250ZW50X21pbl9oZWlnaHRfd2l0aF9waWN0dXJlIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9taW5fY29udGVudF9oZWlnaHQiIC8+CiAgIDxqYXZhLXN5bWJvbCB0eXBlPSJkaW1lbiIgbmFtZT0ibm90aWZpY2F0aW9uX2hlYWRlcl9zaHJpbmtfbWluX3dpZHRoIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIgLz4KICAgPGphdmEtc3ltYm9sIHR5cGU9ImRpbWVuIiBuYW1lPSJub3RpZmljYXRpb25fY29udGVudF9tYXJnaW5fZW5kIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9jb250ZW50X3BpY3R1cmVfbWFyZ2luIiAvPgogICA8amF2YS1zeW1ib2wgdHlwZT0iZGltZW4iIG5hbWU9Im5vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl90b3AiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHJpbmciIG5hbWU9ImltcG9ydGFuY2VfZnJvbV90b3BpYyIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0cmluZyIgbmFtZT0iaW1wb3J0YW5jZV9mcm9tX3BlcnNvbiIgLz4KKworICA8amF2YS1zeW1ib2wgdHlwZT0ibGF5b3V0IiBuYW1lPSJ3b3JrX3dpZGdldF9tYXNrX3ZpZXciIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJpZCIgbmFtZT0id29ya193aWRnZXRfYXBwX2ljb24iIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJkcmF3YWJsZSIgbmFtZT0id29ya193aWRnZXRfbWFza192aWV3X2JhY2tncm91bmQiIC8+CisKKyAgPCEtLSBGcmFtZXdvcmstcHJpdmF0ZSBNYXRlcmlhbC5EYXlOaWdodCBzdHlsZXMuIC0tPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0IiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRhcmtBY3Rpb25CYXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuRGlhbG9nIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZy5BbGVydCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2cuTWluV2lkdGgiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuRGlhbG9nLk5vQWN0aW9uQmFyIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZy5Ob0FjdGlvbkJhci5NaW5XaWR0aCIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2cuUHJlc2VudGF0aW9uIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZ1doZW5MYXJnZSIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5EaWFsb2dXaGVuTGFyZ2UuTm9BY3Rpb25CYXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuTm9BY3Rpb25CYXIiIC8+CisgIDxqYXZhLXN5bWJvbCB0eXBlPSJzdHlsZSIgbmFtZT0iVGhlbWUuTWF0ZXJpYWwuRGF5TmlnaHQuTm9BY3Rpb25CYXIuRnVsbHNjcmVlbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5Ob0FjdGlvbkJhci5PdmVyc2NhbiIgLz4KKyAgPGphdmEtc3ltYm9sIHR5cGU9InN0eWxlIiBuYW1lPSJUaGVtZS5NYXRlcmlhbC5EYXlOaWdodC5Ob0FjdGlvbkJhci5UcmFuc2x1Y2VudERlY29yIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LlBhbmVsIiAvPgorICA8amF2YS1zeW1ib2wgdHlwZT0ic3R5bGUiIG5hbWU9IlRoZW1lLk1hdGVyaWFsLkRheU5pZ2h0LkRpYWxvZ1doZW5MYXJnZS5EYXJrQWN0aW9uQmFyIiAvPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwgYi9jb3JlL3Jlcy9yZXMveG1sL2NvbmZpZ193ZWJ2aWV3X3BhY2thZ2VzLnhtbApzaW1pbGFyaXR5IGluZGV4IDY4JQpjb3B5IGZyb20gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCmNvcHkgdG8gY29yZS9yZXMvcmVzL3htbC9jb25maWdfd2Vidmlld19wYWNrYWdlcy54bWwKaW5kZXggN2QyOGY5Yy4uZjA2MmI1OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCisrKyBiL2NvcmUvcmVzL3Jlcy94bWwvY29uZmlnX3dlYnZpZXdfcGFja2FnZXMueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzwhLS0gQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNCw2ICsxNCw4IEBACiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiAKLTxyZXNvdXJjZXM+Ci0gICAgPGl0ZW0gbmFtZT0iZG9jc19hY3Rpdml0eSIgdHlwZT0ibGF5b3V0Ij5AbGF5b3V0L2ZpeGVkX2xheW91dDwvaXRlbT4KLTwvcmVzb3VyY2VzPgorPHdlYnZpZXdwcm92aWRlcnM+CisgICAgPCEtLSBUaGUgZGVmYXVsdCBXZWJWaWV3IGltcGxlbWVudGF0aW9uIC0tPgorICAgIDx3ZWJ2aWV3cHJvdmlkZXIgZGVzY3JpcHRpb249IkFuZHJvaWQgV2ViVmlldyIgcGFja2FnZU5hbWU9ImNvbS5hbmRyb2lkLndlYnZpZXciIGF2YWlsYWJsZUJ5RGVmYXVsdD0idHJ1ZSI+CisgICAgPC93ZWJ2aWV3cHJvdmlkZXI+Cis8L3dlYnZpZXdwcm92aWRlcnM+CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL0Nvbm5lY3Rpdml0eU1hbmFnZXJUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwgYi9jb3JlL3Rlc3RzL0Nvbm5lY3Rpdml0eU1hbmFnZXJUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNmJkOGY2ZS4uYTM5MWUxZiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9Db25uZWN0aXZpdHlNYW5hZ2VyVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL2NvcmUvdGVzdHMvQ29ubmVjdGl2aXR5TWFuYWdlclRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtNzUsNiArNzUsNyBAQAogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfU0VDVVJFX1NFVFRJTkdTIiAvPgogICAgIDwhLS0gVGhpcyBwZXJtaXNzaW9uIGlzIGFkZGVkIGZvciBBUEkgY2FsbCBzZXRBaXJwbGFuZU1vZGUoKSBpbiBDb25uZWN0aXZpdHlNYW5hZ2VyIC0tPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ09OTkVDVElWSVRZX0lOVEVSTkFMIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uVEVUSEVSX1BSSVZJTEVHRUQiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5XQUtFX0xPQ0siIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5ERVZJQ0VfUE9XRVIiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFIiAvPgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5tayBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWQubWsKaW5kZXggN2NkMjVhZi4uZWU4OTIxZSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZC5taworKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkLm1rCkBAIC0yMiw3ICsyMiw3IEBACiAJJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBFbmFibGVkVGVzdEFwcC9zcmMpCiAKIExPQ0FMX0RYX0ZMQUdTIDo9IC0tY29yZS1saWJyYXJ5Ci1MT0NBTF9BQVBUX0ZMQUdTID0gLTAgZGF0IC0wIGdsZAorTE9DQUxfQUFQVF9GTEFHUyA9IC0wIGRhdCAtMCBnbGQgLWMgZmEKIExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCiAgICAgY29yZS10ZXN0cy1zdXBwb3J0IFwKICAgICBhbmRyb2lkLWNvbW1vbiBcCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCA1MTc3ODM2Li5jMDQ1M2Y4IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTE0Niw2ICsxNDYsMTYgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9hY3Rpdml0eT4KIAorICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLndpZGdldC5EYXRlUGlja2VyQWN0aXZpdHkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iRGF0ZVBpY2tlckFjdGl2aXR5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NyZWVuT3JpZW50YXRpb249InBvcnRyYWl0IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk1hdGVyaWFsLkxpZ2h0Ij4KKyAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgorICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KKyAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5GUkFNRVdPUktfSU5TVFJVTUVOVEFUSU9OX1RFU1QiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvYWN0aXZpdHk+CisKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC53aWRnZXQuZm9jdXMuRGVzY2VuZGFudEZvY3VzYWJpbGl0eSIgYW5kcm9pZDpsYWJlbD0iRGVzY2VuZGFudEZvY3VzYWJpbGl0eSI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KICAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvbGF5b3V0L2FjdGl2aXR5X3RleHRfdmlldy54bWwgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvbGF5b3V0L2FjdGl2aXR5X3RleHRfdmlldy54bWwKaW5kZXggN2FiMGIxMy4uZTc5NWMxMCAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL2xheW91dC9hY3Rpdml0eV90ZXh0X3ZpZXcueG1sCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy9sYXlvdXQvYWN0aXZpdHlfdGV4dF92aWV3LnhtbApAQCAtMjMsNiArMjMsNiBAQAogICAgIDxFZGl0VGV4dAogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90ZXh0dmlldyIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgLz4KKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgogCi08L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy9sYXlvdXQvZGF0ZXBpY2tlcl9sYXlvdXQueG1sIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL2xheW91dC9kYXRlcGlja2VyX2xheW91dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5Zjg3ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy9sYXlvdXQvZGF0ZXBpY2tlcl9sYXlvdXQueG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxSZWxhdGl2ZUxheW91dAorICAgICAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KKyAgICA8RGF0ZVBpY2tlcgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kYXRlUGlja2VyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySW5QYXJlbnQ9InRydWUiLz4KKyAgICA8RWRpdFRleHQKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYmVsb3dQaWNrZXIiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IlNvbWUgVGV4dCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBpZC9kYXRlUGlja2VyIi8+Cis8L1JlbGF0aXZlTGF5b3V0PgpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbCBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZjVmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTAsMCArMSw0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPHJlc291cmNlcz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1bW15X3N0cmluZyI+2LHYtNiq2YfZlCDYp9mE2qnbjDwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCAwNGIwNDc4Li5lZjkxNWJiIDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTEzOSw0ICsxMzksNyBAQAogICAgIDwhLS0gUmVzdHJpY3Rpb25zTWFuYWdlclRlc3QgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cmljdGlvbk1hbmFnZXJfdGl0bGUiPlRpdGxlPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0cmljdGlvbk1hbmFnZXJfZGVzYyI+RGVzY3JpcHRpb248L3N0cmluZz4KKworICAgIDwhLS0gUmVzb3VyY2VzTG9jYWxlUmVzb2x1dGlvblRlc3QgLS0+CisgICAgPHN0cmluZyBuYW1lPSJkdW1teV9zdHJpbmciPmR1bW15IHN0cmluZzwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9jb250ZW50L3BtL0FwcHNRdWVyeUhlbHBlclRlc3RzLmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC9jb250ZW50L3BtL0FwcHNRdWVyeUhlbHBlclRlc3RzLmphdmEKaW5kZXggZGNmMmM4OS4uOWMwM2UxYSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9BcHBzUXVlcnlIZWxwZXJUZXN0cy5qYXZhCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcG0vQXBwc1F1ZXJ5SGVscGVyVGVzdHMuamF2YQpAQCAtOTAsNiArOTAsMTggQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzSWdub3JlT3JkZXIoQXJyYXlzLmFzTGlzdCgic3lzX2FwcDEiLCAiYXBwNCIpLCBhcHBzKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UXVlcnlBcHBzUmVxdWlyZWRGb3JTeXN0ZW1Vc2VyKCkgeworICAgICAgICAvLyBUZXN0IHF1ZXJ5IG9ubHkgc3lzdGVtIGFwcHMgcmVxdWlyZWQgZm9yIHN5c3RlbSB1c2VyCisgICAgICAgIExpc3Q8U3RyaW5nPiBhcHBzID0gbUFwcHNRdWVyeUhlbHBlci5xdWVyeUFwcHMoQXBwc1F1ZXJ5SGVscGVyLkdFVF9SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVIsCisgICAgICAgICAgICAgICAgdHJ1ZSwgVXNlckhhbmRsZS5TWVNURU0pOworICAgICAgICBhc3NlcnRFcXVhbHNJZ25vcmVPcmRlcihBcnJheXMuYXNMaXN0KCJzeXNfYXBwMyIpLCBhcHBzKTsKKworICAgICAgICAvLyBUZXN0IHF1ZXJ5IGFsbCBhcHBzIHJlcXVpcmVkIGZvciBzeXN0ZW0gdXNlcgorICAgICAgICBhcHBzID0gbUFwcHNRdWVyeUhlbHBlci5xdWVyeUFwcHMoQXBwc1F1ZXJ5SGVscGVyLkdFVF9SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVIsIGZhbHNlLAorICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuU1lTVEVNKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzSWdub3JlT3JkZXIoQXJyYXlzLmFzTGlzdCgic3lzX2FwcDMiLCAiYXBwNCIpLCBhcHBzKTsKKyAgICB9CisKICAgICBwcml2YXRlIGNsYXNzIEFwcHNRdWVyeUhlbHBlclRlc3RhYmxlIGV4dGVuZHMgQXBwc1F1ZXJ5SGVscGVyIHsKIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTEwNCw3ICsxMTYsOSBAQAogICAgICAgICAgICAgZmluYWwgQXBwbGljYXRpb25JbmZvIGFpMyA9IG5ldyBBcHBsaWNhdGlvbkluZm8oKTsKICAgICAgICAgICAgIGFpMy5wYWNrYWdlTmFtZSA9ICJzeXNfYXBwMyI7CiAgICAgICAgICAgICBhaTMuZmxhZ3MgfD0gQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNOworICAgICAgICAgICAgYWkzLnByaXZhdGVGbGFncyB8PSBBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX1JFUVVJUkVEX0ZPUl9TWVNURU1fVVNFUjsKICAgICAgICAgICAgIGZpbmFsIEFwcGxpY2F0aW9uSW5mbyBhaTQgPSBuZXcgQXBwbGljYXRpb25JbmZvKCk7CisgICAgICAgICAgICBhaTQucHJpdmF0ZUZsYWdzIHw9IEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfUkVRVUlSRURfRk9SX1NZU1RFTV9VU0VSOwogICAgICAgICAgICAgYWk0LnBhY2thZ2VOYW1lID0gImFwcDQiOwogICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoYWkxLCBhaTIsIGFpMywgYWk0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9NYW5pZmVzdERpZ2VzdFRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcG0vTWFuaWZlc3REaWdlc3RUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NDk1ZTEuLjAwMDAwMDAKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9NYW5pZmVzdERpZ2VzdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuY29udGVudC5wbTsKLQotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBNYW5pZmVzdERpZ2VzdFRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBNRVNTQUdFXzEgPSB7Ci0gICAgICAgICAgICAoYnl0ZSkgMHgwMCwgKGJ5dGUpIDB4QUEsIChieXRlKSAweDU1LCAoYnl0ZSkgMHhGRgotICAgIH07Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0TWFuaWZlc3REaWdlc3RfRnJvbUlucHV0U3RyZWFtX051bGwoKSB7Ci0gICAgICAgIGFzc2VydE51bGwoIkF0dHJpYnV0ZXMgd2VyZSBudWxsLCBzbyBNYW5pZmVzdERpZ2VzdC5mcm9tQXR0cmlidXRlcyBzaG91bGQgcmV0dXJuIG51bGwiLAotICAgICAgICAgICAgICAgIE1hbmlmZXN0RGlnZXN0LmZyb21JbnB1dFN0cmVhbShudWxsKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1hbmlmZXN0RGlnZXN0X0Zyb21JbnB1dFN0cmVhbV9UaHJvd3NJb0V4Y2VwdGlvbigpIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgSW5wdXRTdHJlYW0oKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgYXNzZXJ0TnVsbCgiSW5wdXRTdHJlYW0gdGhyZXcgZXhjZXB0aW9uLCBzbyBNYW5pZmVzdERpZ2VzdCBzaG91bGQgYmUgbnVsbCIsCi0gICAgICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QuZnJvbUlucHV0U3RyZWFtKGlzKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1hbmlmZXN0RGlnZXN0X0VxdWFscygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShNRVNTQUdFXzEpOwotCi0gICAgICAgIE1hbmlmZXN0RGlnZXN0IGV4cGVjdGVkID0KLSAgICAgICAgICAgICAgICBuZXcgTWFuaWZlc3REaWdlc3QoTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBLTI1NiIpLmRpZ2VzdChNRVNTQUdFXzEpKTsKLQotICAgICAgICBNYW5pZmVzdERpZ2VzdCBhY3R1YWwgPSBNYW5pZmVzdERpZ2VzdC5mcm9tSW5wdXRTdHJlYW0oaXMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGFjdHVhbCk7Ci0KLSAgICAgICAgTWFuaWZlc3REaWdlc3QgdW5leHBlY3RlZCA9IG5ldyBNYW5pZmVzdERpZ2VzdChuZXcgYnl0ZVswXSk7Ci0gICAgICAgIGFzc2VydEZhbHNlKHVuZXhwZWN0ZWQuZXF1YWxzKGFjdHVhbCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RNYW5pZmVzdERpZ2VzdF9QYXJjZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oTUVTU0FHRV8xKTsKLQotICAgICAgICBNYW5pZmVzdERpZ2VzdCBkaWdlc3QgPSBNYW5pZmVzdERpZ2VzdC5mcm9tSW5wdXRTdHJlYW0oaXMpOwotCi0gICAgICAgIFBhcmNlbCBwID0gUGFyY2VsLm9idGFpbigpOwotICAgICAgICBkaWdlc3Qud3JpdGVUb1BhcmNlbChwLCAwKTsKLSAgICAgICAgcC5zZXREYXRhUG9zaXRpb24oMCk7Ci0KLSAgICAgICAgTWFuaWZlc3REaWdlc3QgZnJvbVBhcmNlbCA9IE1hbmlmZXN0RGlnZXN0LkNSRUFUT1IuY3JlYXRlRnJvbVBhcmNlbChwKTsKLQotICAgICAgICBhc3NlcnRFcXVhbHMoIk1hbmlmZXN0RGlnZXN0IGdvaW5nIHRocm91Z2ggcGFyY2VsaW5nIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBiZWZvcmU6ICIKLSAgICAgICAgICAgICAgICArIGRpZ2VzdC50b1N0cmluZygpICsgIiBhbmQgIiArIGZyb21QYXJjZWwudG9TdHJpbmcoKSwgZGlnZXN0LAotICAgICAgICAgICAgICAgIGZyb21QYXJjZWwpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcG0vVmVyaWZpY2F0aW9uUGFyYW1zVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKaW5kZXggOWIyMTZjYi4uZDk2MzgxMiAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9wbS9WZXJpZmljYXRpb25QYXJhbXNUZXN0LmphdmEKQEAgLTE2LDcgKzE2LDYgQEAKIAogcGFja2FnZSBhbmRyb2lkLmNvbnRlbnQucG07CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWNhdGlvblBhcmFtczsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CkBAIC0zMyw3ICszMiw2IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFZFUklGSUNBVElPTl9VUklfU1RSSU5HID0gImh0dHA6Ly92ZXJpZmljYXRpb24udXJpL3BhdGgiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBPUklHSU5BVElOR19VUklfU1RSSU5HID0gImh0dHA6Ly9vcmlnaW5hdGluZy51cmkvcGF0aCI7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFJFRkVSUkVSX1NUUklORyA9ICJodHRwOi8vcmVmZXJyZXIudXJpL3BhdGgiOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJ5dGVbXSBESUdFU1RfQllURVMgPSAiZmFrZSBkaWdlc3QiLmdldEJ5dGVzKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IElOU1RBTExFUl9VSUQgPSA0MjsKIAogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFVyaSBWRVJJRklDQVRJT05fVVJJID0gVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKTsKQEAgLTQyLDExICs0MCw5IEBACiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1JJR0lOQVRJTkdfVUlEID0gMTAwNDI7CiAKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBNYW5pZmVzdERpZ2VzdCBNQU5JRkVTVF9ESUdFU1QgPSBuZXcgTWFuaWZlc3REaWdlc3QoRElHRVNUX0JZVEVTKTsKLQogICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJjZWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIGV4cGVjdGVkID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBQYXJjZWwgcGFyY2VsID0gUGFyY2VsLm9idGFpbigpOwogICAgICAgICBleHBlY3RlZC53cml0ZVRvUGFyY2VsKHBhcmNlbCwgMCk7CkBAIC02MSw4NSArNTcsNzAgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKFJFRkVSUkVSLCBhY3R1YWwuZ2V0UmVmZXJyZXIoKSk7CiAKICAgICAgICAgYXNzZXJ0RXF1YWxzKE9SSUdJTkFUSU5HX1VJRCwgYWN0dWFsLmdldE9yaWdpbmF0aW5nVWlkKCkpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhNQU5JRkVTVF9ESUdFU1QsIGFjdHVhbC5nZXRNYW5pZmVzdERpZ2VzdCgpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1N1Y2Nlc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEVxdWFscyhwYXJhbXMxLCBwYXJhbXMyKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1ZlcmlmaWNhdGlvblVyaV9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKCJodHRwOi8vYS5kaWZmZXJlbnQudXJpLyIpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX09yaWdpbmF0aW5nVXJpX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoImh0dHA6Ly9hLmRpZmZlcmVudC51cmkvIiksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX1JlZmVycmVyX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoT1JJR0lOQVRJTkdfVVJJX1NUUklORyksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKCJodHRwOi8vYS5kaWZmZXJlbnQudXJpLyIpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZSgiaHR0cDovL2EuZGlmZmVyZW50LnVyaS8iKSwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBhc3NlcnRGYWxzZShwYXJhbXMxLmVxdWFscyhwYXJhbXMyKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEVxdWFsc19PcmlnaW5hdGluZ19VaWRfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKAogICAgICAgICAgICAgICAgIFVyaS5wYXJzZShWRVJJRklDQVRJT05fVVJJX1NUUklORyksIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKLQotICAgICAgICBhc3NlcnRGYWxzZShwYXJhbXMxLmVxdWFscyhwYXJhbXMyKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdEVxdWFsc19NYW5pZmVzdERpZ2VzdF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKLQotICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KCJhIGRpZmZlcmVudCBkaWdlc3QiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuZXF1YWxzKHBhcmFtczIpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzX0luc3RhbGxlclVpZF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlEKTsKICAgICAgICAgcGFyYW1zMi5zZXRJbnN0YWxsZXJVaWQoSU5TVEFMTEVSX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5lcXVhbHMocGFyYW1zMikpOwpAQCAtMTQ3LDc4ICsxMjgsNjUgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9TdWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsIG5ldyBNYW5pZmVzdERpZ2VzdChESUdFU1RfQllURVMpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMocGFyYW1zMS5oYXNoQ29kZSgpLCBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9WZXJpZmljYXRpb25VcmlfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKG51bGwsIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlELCBuZXcgTWFuaWZlc3REaWdlc3QoRElHRVNUX0JZVEVTKSk7CisgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5oYXNoQ29kZSgpID09IHBhcmFtczIuaGFzaENvZGUoKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEhhc2hDb2RlX09yaWdpbmF0aW5nVXJpX0ZhaWx1cmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczEgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKFZFUklGSUNBVElPTl9VUkksIE9SSUdJTkFUSU5HX1VSSSwKLSAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlELCBNQU5JRkVTVF9ESUdFU1QpOworICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMyID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBVcmkucGFyc2UoVkVSSUZJQ0FUSU9OX1VSSV9TVFJJTkcpLCBVcmkucGFyc2UoImh0dHA6Ly9hLmRpZmZlcmVudC51cmkvIiksCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9SZWZlcnJlcl9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLCBudWxsLAotICAgICAgICAgICAgICAgIE9SSUdJTkFUSU5HX1VJRCwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOworICAgICAgICAgICAgICAgIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgYXNzZXJ0RmFsc2UocGFyYW1zMS5oYXNoQ29kZSgpID09IHBhcmFtczIuaGFzaENvZGUoKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEhhc2hDb2RlX09yaWdpbmF0aW5nX1VpZF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKKyAgICAgICAgICAgICAgICBSRUZFUlJFUiwgT1JJR0lOQVRJTkdfVUlEKTsKIAogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCiAgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCAxMjM0NSwgbmV3IE1hbmlmZXN0RGlnZXN0KERJR0VTVF9CWVRFUykpOwotCi0gICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9NYW5pZmVzdERpZ2VzdF9GYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFZlcmlmaWNhdGlvblBhcmFtcyBwYXJhbXMxID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcyhWRVJJRklDQVRJT05fVVJJLCBPUklHSU5BVElOR19VUkksCi0gICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCwgTUFOSUZFU1RfRElHRVNUKTsKLQotICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMiA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoCi0gICAgICAgICAgICAgICAgVXJpLnBhcnNlKFZFUklGSUNBVElPTl9VUklfU1RSSU5HKSwgVXJpLnBhcnNlKE9SSUdJTkFUSU5HX1VSSV9TVFJJTkcpLAotICAgICAgICAgICAgICAgIFVyaS5wYXJzZShSRUZFUlJFUl9TVFJJTkcpLCBPUklHSU5BVElOR19VSUQsCi0gICAgICAgICAgICAgICAgbmV3IE1hbmlmZXN0RGlnZXN0KCJhIGRpZmZlcmVudCBkaWdlc3QiLmdldEJ5dGVzKCkpKTsKKyAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgMTIzNDUpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIYXNoQ29kZV9JbnN0YWxsZXJVaWRfRmFpbHVyZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBWZXJpZmljYXRpb25QYXJhbXMgcGFyYW1zMSA9IG5ldyBWZXJpZmljYXRpb25QYXJhbXMoVkVSSUZJQ0FUSU9OX1VSSSwgT1JJR0lOQVRJTkdfVVJJLAotICAgICAgICAgICAgICAgIFJFRkVSUkVSLCBPUklHSU5BVElOR19VSUQsIE1BTklGRVNUX0RJR0VTVCk7CisgICAgICAgICAgICAgICAgUkVGRVJSRVIsIE9SSUdJTkFUSU5HX1VJRCk7CiAKICAgICAgICAgVmVyaWZpY2F0aW9uUGFyYW1zIHBhcmFtczIgPSBuZXcgVmVyaWZpY2F0aW9uUGFyYW1zKAogICAgICAgICAgICAgICAgIFVyaS5wYXJzZShWRVJJRklDQVRJT05fVVJJX1NUUklORyksIFVyaS5wYXJzZShPUklHSU5BVElOR19VUklfU1RSSU5HKSwKLSAgICAgICAgICAgICAgICBVcmkucGFyc2UoUkVGRVJSRVJfU1RSSU5HKSwgT1JJR0lOQVRJTkdfVUlELAotICAgICAgICAgICAgICAgIG5ldyBNYW5pZmVzdERpZ2VzdCgiYSBkaWZmZXJlbnQgZGlnZXN0Ii5nZXRCeXRlcygpKSk7CisgICAgICAgICAgICAgICAgVXJpLnBhcnNlKFJFRkVSUkVSX1NUUklORyksIE9SSUdJTkFUSU5HX1VJRCk7CiAgICAgICAgIHBhcmFtczIuc2V0SW5zdGFsbGVyVWlkKElOU1RBTExFUl9VSUQpOwogCiAgICAgICAgIGFzc2VydEZhbHNlKHBhcmFtczEuaGFzaENvZGUoKSA9PSBwYXJhbXMyLmhhc2hDb2RlKCkpOwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvUmVzb3VyY2VzTG9jYWxlUmVzb2x1dGlvblRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlc0xvY2FsZVJlc29sdXRpb25UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjMDAzMQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL1Jlc291cmNlc0xvY2FsZVJlc29sdXRpb25UZXN0LmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoKKyogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqCisqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqCisqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworCitwYWNrYWdlIGFuZHJvaWQuY29udGVudC5yZXM7CisKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2NhbGVMaXN0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VzTG9jYWxlUmVzb2x1dGlvblRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0UmVzb2x2ZWRMb2NhbGVfZW5nbGlzaElzQWx3YXlzQ29uc2lkZXJlZFN1cHBvcnRlZCgpIHsKKyAgICAgICAgLy8gRmlyc3QgbWFrZSBzdXJlIEVuZ2xpc2ggaGFzIG5vIGV4cGxpY2l0IGFzc2V0cyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IGFzc2V0cworICAgICAgICBmaW5hbCBBc3NldE1hbmFnZXIgYXNzZXRzID0gZ2V0Q29udGV4dCgpLmdldEFzc2V0cygpOworICAgICAgICBmaW5hbCBTdHJpbmcgc3VwcG9ydGVkTG9jYWxlc1tdID0gYXNzZXRzLmdldE5vblN5c3RlbUxvY2FsZXMoKTsKKyAgICAgICAgZm9yIChTdHJpbmcgbGFuZ3VhZ2VUYWcgOiBzdXBwb3J0ZWRMb2NhbGVzKSB7CisgICAgICAgICAgICBpZiAoImVuLVhBIi5lcXVhbHMobGFuZ3VhZ2VUYWcpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnRGYWxzZSgKKyAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCBsb2NhbGVzOiAiICsgQXJyYXlzLnRvU3RyaW5nKHN1cHBvcnRlZExvY2FsZXMpLAorICAgICAgICAgICAgICAgICAgICAiZW4iLmVxdWFscyhMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcobGFuZ3VhZ2VUYWcpLmdldExhbmd1YWdlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIERpc3BsYXlNZXRyaWNzIGRtID0gbmV3IERpc3BsYXlNZXRyaWNzKCk7CisgICAgICAgIGRtLnNldFRvRGVmYXVsdHMoKTsKKyAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjZmcgPSBuZXcgQ29uZmlndXJhdGlvbigpOworICAgICAgICBjZmcuc2V0VG9EZWZhdWx0cygpOworICAgICAgICAvLyBBdmVzdGFuIGFuZCBFbmdsaXNoIGhhdmUgbm8gYXNzZXRzLCBidXQgUGVyc2lhbiBkb2VzLgorICAgICAgICBjZmcuc2V0TG9jYWxlcyhMb2NhbGVMaXN0LmZvckxhbmd1YWdlVGFncygiYWUsZW4sZmEiKSk7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBuZXcgUmVzb3VyY2VzKGFzc2V0cywgZG0sIGNmZyk7CisgICAgICAgIC8vIFdlIHNob3VsZCBnZXQgRW5nbGlzaCwgYmVjYXVzZSBpdCBpcyBhbHdheXMgY29uc2lkZXJlZCBzdXBwb3J0ZWQuCisgICAgICAgIGFzc2VydEVxdWFscygiZW4iLCByZXMuZ2V0UmVzb2x2ZWRMb2NhbGUoKS50b0xhbmd1YWdlVGFnKCkpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdXRpbC9Mb2NhbGVMaXN0VGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdXRpbC9Mb2NhbGVMaXN0VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTM4MmQKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC91dGlsL0xvY2FsZUxpc3RUZXN0LmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGFuZHJvaWQudXRpbDsKKworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvY2FsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitwdWJsaWMgY2xhc3MgTG9jYWxlTGlzdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDb25zdHJ1Y3RvcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBMb2NhbGVMaXN0IGxsOworICAgICAgICBsbCA9IG5ldyBMb2NhbGVMaXN0KExvY2FsZS5mb3JMYW5ndWFnZVRhZygiZnIiKSwgbnVsbCk7CisgICAgICAgIGFzc2VydEVxdWFscygiZnIiLCBsbC50b0xhbmd1YWdlVGFncygpKTsKKworICAgICAgICBsbCA9IG5ldyBMb2NhbGVMaXN0KExvY2FsZS5mb3JMYW5ndWFnZVRhZygiZnIiKSwgTG9jYWxlTGlzdC5nZXRFbXB0eUxvY2FsZUxpc3QoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZnIiLCBsbC50b0xhbmd1YWdlVGFncygpKTsKKworICAgICAgICBsbCA9IG5ldyBMb2NhbGVMaXN0KExvY2FsZS5mb3JMYW5ndWFnZVRhZygiZnIiKSwgTG9jYWxlTGlzdC5mb3JMYW5ndWFnZVRhZ3MoImZyIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoImZyIiwgbGwudG9MYW5ndWFnZVRhZ3MoKSk7CisKKyAgICAgICAgbGwgPSBuZXcgTG9jYWxlTGlzdChMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcoImZyIiksIExvY2FsZUxpc3QuZm9yTGFuZ3VhZ2VUYWdzKCJkZSIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmcixkZSIsIGxsLnRvTGFuZ3VhZ2VUYWdzKCkpOworCisgICAgICAgIGxsID0gbmV3IExvY2FsZUxpc3QoTG9jYWxlLmZvckxhbmd1YWdlVGFnKCJmciIpLCBMb2NhbGVMaXN0LmZvckxhbmd1YWdlVGFncygiZGUsamEiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZnIsZGUsamEiLCBsbC50b0xhbmd1YWdlVGFncygpKTsKKworICAgICAgICBsbCA9IG5ldyBMb2NhbGVMaXN0KExvY2FsZS5mb3JMYW5ndWFnZVRhZygiZnIiKSwgTG9jYWxlTGlzdC5mb3JMYW5ndWFnZVRhZ3MoImRlLGZyLGphIikpOworICAgICAgICBhc3NlcnRFcXVhbHMoImZyLGRlLGphIiwgbGwudG9MYW5ndWFnZVRhZ3MoKSk7CisKKyAgICAgICAgbGwgPSBuZXcgTG9jYWxlTGlzdChMb2NhbGUuZm9yTGFuZ3VhZ2VUYWcoImZyIiksIExvY2FsZUxpc3QuZm9yTGFuZ3VhZ2VUYWdzKCJkZSxmciIpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmcixkZSIsIGxsLnRvTGFuZ3VhZ2VUYWdzKCkpOworCisgICAgICAgIGxsID0gbmV3IExvY2FsZUxpc3QoTG9jYWxlLmZvckxhbmd1YWdlVGFnKCJmciIpLCBMb2NhbGVMaXN0LmZvckxhbmd1YWdlVGFncygiZnIsZGUiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiZnIsZGUiLCBsbC50b0xhbmd1YWdlVGFncygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdENvbnN0cnVjdG9yX251bGxUaHJvd3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIExvY2FsZUxpc3QgbGwgPSBuZXcgTG9jYWxlTGlzdChudWxsLCBMb2NhbGVMaXN0LmdldEVtcHR5TG9jYWxlTGlzdCgpKTsKKyAgICAgICAgICAgIGZhaWwoIkNvbnN0cnVjdGluZyB3aXRoIGxvY2FsZSBhbmQgbG9jYWxlIGxpc3Qgc2hvdWxkIHRocm93IHdpdGggYSBudWxsIGxvY2FsZS4iKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhOdWxsUG9pbnRlckV4Y2VwdGlvbi5jbGFzcywgZS5nZXRDbGFzcygpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0RGVmYXVsdF9sb2NhbGVTZXREZWZhdWx0Q2FsbGVkQnV0Tm9DaGFuZ2VOZWNlc3NhcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgTG9jYWxlIG9yaWdpbmFsTG9jYWxlID0gTG9jYWxlLmdldERlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgTG9jYWxlTGlzdCBvcmlnaW5hbExvY2FsZUxpc3QgPSBMb2NhbGVMaXN0LmdldERlZmF1bHQoKTsKKyAgICAgICAgZmluYWwgaW50IG9yaWdpbmFsTG9jYWxlSW5kZXggPSBvcmlnaW5hbExvY2FsZUxpc3QuaW5kZXhPZihvcmlnaW5hbExvY2FsZSk7CisKKyAgICAgICAgLy8gVGhpcyBzaW11bGF0ZXMgYSBzaXR1YXRpb24gcG90ZW50aWFsbHkgc2V0IGJ5IHRoZSBzeXN0ZW0gcHJvY2Vzc2VzCisgICAgICAgIExvY2FsZUxpc3Quc2V0RGVmYXVsdChMb2NhbGVMaXN0LmZvckxhbmd1YWdlVGFncygiYWUsZW4samEiKSwgMSAvKiBlbiAqLyk7CisKKyAgICAgICAgLy8gY2hlY2sgb3VyIGFzc3VtcHRpb25zIGFib3V0IGlucHV0CisgICAgICAgIGFzc2VydEVxdWFscygiZW4iLCBMb2NhbGUuZ2V0RGVmYXVsdCgpLnRvTGFuZ3VhZ2VUYWcoKSk7CisgICAgICAgIGZpbmFsIExvY2FsZUxpc3QgZmlyc3RSZXN1bHQgPSBMb2NhbGVMaXN0LmdldERlZmF1bHQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJhZSxlbixqYSIsIExvY2FsZUxpc3QuZ2V0RGVmYXVsdCgpLnRvTGFuZ3VhZ2VUYWdzKCkpOworCisgICAgICAgIExvY2FsZS5zZXREZWZhdWx0KExvY2FsZS5mb3JMYW5ndWFnZVRhZygiYWUiKSk7CisgICAgICAgIGFzc2VydFNhbWUoZmlyc3RSZXN1bHQsIExvY2FsZUxpc3QuZ2V0RGVmYXVsdCgpKTsKKworICAgICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCB2YWx1ZXMKKyAgICAgICAgTG9jYWxlTGlzdC5zZXREZWZhdWx0KG9yaWdpbmFsTG9jYWxlTGlzdCwgb3JpZ2luYWxMb2NhbGVJbmRleCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdXRpbC9QYXR0ZXJuc1Rlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3V0aWwvUGF0dGVybnNUZXN0LmphdmEKaW5kZXggMjUzZWIyNS4uZDM4Mzc3NSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdXRpbC9QYXR0ZXJuc1Rlc3QuamF2YQorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC91dGlsL1BhdHRlcm5zVGVzdC5qYXZhCkBAIC0xNywxNCArMTcsMTYgQEAKIAogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlN1cHByZXNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5QYXR0ZXJuczsKIAogaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwogCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogCiBwdWJsaWMgY2xhc3MgUGF0dGVybnNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewogCisgICAgLy9UZXN0cyBmb3IgUGF0dGVybnMuVE9QX0xFVkVMX0RPTUFJTgorCiAgICAgQFNtYWxsVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RUbGRQYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGJvb2xlYW4gdDsKQEAgLTQwLDcgKzQyLDcgQEAKICAgICAgICAgdCA9IFBhdHRlcm5zLlRPUF9MRVZFTF9ET01BSU4ubWF0Y2hlcigieG4tLTB6d201NmQiKS5tYXRjaGVzKCk7CiAgICAgICAgIGFzc2VydFRydWUoIk1pc3NlZCB2YWxpZCBUTEQiLCB0KTsKIAotICAgICAgICAvLyBPbmUgb2YgdGhlIG5ldyB0b3AgbGV2ZWwgaW50ZXJuYXRpb25hbGl6ZWQgZG9tYWluLgorICAgICAgICAvLyBPbmUgb2YgdGhlIG5ldyB0b3AgbGV2ZWwgdW5pY29kZSBkb21haW4uCiAgICAgICAgIHQgPSBQYXR0ZXJucy5UT1BfTEVWRUxfRE9NQUlOLm1hdGNoZXIoIlx1RDU1Q1x1QUQ2RCIpLm1hdGNoZXMoKTsKICAgICAgICAgYXNzZXJ0VHJ1ZSgiTWlzc2VkIHZhbGlkIFRMRCIsIHQpOwogCkBAIC01NCw2MCArNTYsMzcyIEBACiAgICAgICAgIGFzc2VydEZhbHNlKCJNYXRjaGVkIGludmFsaWQgVExEISIsIHQpOwogICAgIH0KIAorICAgIC8vVGVzdHMgZm9yIFBhdHRlcm5zLklBTkFfVE9QX0xFVkVMX0RPTUFJTlMKKwogICAgIEBTbWFsbFRlc3QKLSAgICBAU3VwcHJlc3MgLy8gRmFpbGluZy4KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VXJsUGF0dGVybigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBib29sZWFuIHQ7Ci0KLSAgICAgICAgdCA9IFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcigiaHR0cDovL3d3dy5nb29nbGUuY29tIikubWF0Y2hlcygpOwotICAgICAgICBhc3NlcnRUcnVlKCJWYWxpZCBVUkwiLCB0KTsKLQotICAgICAgICAvLyBHb29nbGUgaW4gb25lIG9mIHRoZSBuZXcgdG9wIGxldmVsIGRvbWFpbi4KLSAgICAgICAgdCA9IFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcigiaHR0cDovL3d3dy5nb29nbGUubWUiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydFRydWUoIlZhbGlkIFVSTCIsIHQpOwotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJnb29nbGUubWUiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydFRydWUoIlZhbGlkIFVSTCIsIHQpOwotCi0gICAgICAgIC8vIFRlc3QgdXJsIGluIENoaW5lc2U6IGh0dHA6Ly94bi0tZnNxdTAwYS54bi0tMHp3bTU2ZAotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJodHRwOi8veG4tLWZzcXUwMGEueG4tLTB6d201NmQiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydFRydWUoIlZhbGlkIFVSTCIsIHQpOwotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJ4bi0tZnNxdTAwYS54bi0tMHp3bTU2ZCIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgVVJMIiwgdCk7Ci0KLSAgICAgICAgLy8gVXJsIGZvciB0ZXN0aW5nIHRvcCBsZXZlbCBBcmFiaWMgY291bnRyeSBjb2RlIGRvbWFpbiBpbiBQdW55Y29kZToKLSAgICAgICAgLy8gICBodHRwOi8veG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjL2FyL2RlZmF1bHQuYXNweAotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJodHRwOi8veG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjL2FyL2RlZmF1bHQuYXNweCIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgVVJMIiwgdCk7Ci0gICAgICAgIHQgPSBQYXR0ZXJucy5XRUJfVVJMLm1hdGNoZXIoInhuLS00Z2JyaW0ueG4tLS0tcm1ja2JiYWpsYzZkajdieG5lMmMueG4tLXdnYmgxYy9hci9kZWZhdWx0LmFzcHgiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydFRydWUoIlZhbGlkIFVSTCIsIHQpOwotCi0gICAgICAgIC8vIEludGVybmF0aW9uYWxpemVkIFVSTC4KLSAgICAgICAgdCA9IFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcigiaHR0cDovL1x1RDYwNFx1QUUwOFx1QzYwMVx1QzIxOFx1Qzk5RC5rciIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgVVJMIiwgdCk7Ci0gICAgICAgIHQgPSBQYXR0ZXJucy5XRUJfVVJMLm1hdGNoZXIoIlx1RDYwNFx1QUUwOFx1QzYwMVx1QzIxOFx1Qzk5RC5rciIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgVVJMIiwgdCk7Ci0gICAgICAgIC8vIFVSTCB3aXRoIGludGVybmF0aW9uYWwgVExELgotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJcdUIzQzRcdUJBNTRcdUM3NzguXHVENTVDXHVBRDZEIikubWF0Y2hlcygpOwotICAgICAgICBhc3NlcnRUcnVlKCJWYWxpZCBVUkwiLCB0KTsKLQotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJodHRwOi8vYnJhaW5zdG9ybXRlY2guYmxvZ3MuZm9ydHVuZS5jbm4uY29tLzIwMTAvMDMvMTEvIiArCi0gICAgICAgICAgICAidG9wLWZpdmUtbW9tZW50cy1mcm9tLWVyaWMtc2NobWlkdFx1MjAxOXMtdGFsay1pbi1hYnUtZGhhYmkvIikubWF0Y2hlcygpOwotICAgICAgICBhc3NlcnRUcnVlKCJWYWxpZCBVUkwiLCB0KTsKLQotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJmdHA6Ly93d3cuZXhhbXBsZS5jb20iKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKCJNYXRjaGVkIGludmFsaWQgcHJvdG9jb2wiLCB0KTsKLQotICAgICAgICB0ID0gUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydFRydWUoIkRpZG4ndCBtYXRjaCB2YWxpZCBVUkwgd2l0aCBwb3J0IiwgdCk7Ci0KLSAgICAgICAgdCA9IFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcigiaHR0cDovL3d3dy5leGFtcGxlLmNvbTo4MDgwLz9mb289YmFyIikubWF0Y2hlcygpOwotICAgICAgICBhc3NlcnRUcnVlKCJEaWRuJ3QgbWF0Y2ggdmFsaWQgVVJMIHdpdGggcG9ydCBhbmQgcXVlcnkgYXJncyIsIHQpOwotCi0gICAgICAgIHQgPSBQYXR0ZXJucy5XRUJfVVJMLm1hdGNoZXIoImh0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9+dXNlci8/Zm9vPWJhciIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiRGlkbid0IG1hdGNoIHZhbGlkIFVSTCB3aXRoIH4iLCB0KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SWFuYVRvcExldmVsRG9tYWluc19tYXRjaGVzVmFsaWRUbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKFBhdHRlcm5zLklBTkFfVE9QX0xFVkVMX0RPTUFJTlMpOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggJ2NvbSciLCBwYXR0ZXJuLm1hdGNoZXIoImNvbSIpLm1hdGNoZXMoKSk7CiAgICAgfQogCiAgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJYW5hVG9wTGV2ZWxEb21haW5zX21hdGNoZXNWYWxpZE5ld1RsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoUGF0dGVybnMuSUFOQV9UT1BfTEVWRUxfRE9NQUlOUyk7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCAnbWUnIiwgcGF0dGVybi5tYXRjaGVyKCJtZSIpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJYW5hVG9wTGV2ZWxEb21haW5zX21hdGNoZXNQdW55Y29kZVRsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoUGF0dGVybnMuSUFOQV9UT1BfTEVWRUxfRE9NQUlOUyk7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBQdW55Y29kZSBUTEQiLCBwYXR0ZXJuLm1hdGNoZXIoInhuLS1xeGFtIikubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdElhbmFUb3BMZXZlbERvbWFpbnNfbWF0Y2hlc0lyaVRMRCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoUGF0dGVybnMuSUFOQV9UT1BfTEVWRUxfRE9NQUlOUyk7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBJUkkgVExEIiwgcGF0dGVybi5tYXRjaGVyKCJcdUQ1NUNcdUFENkQiKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SWFuYVRvcExldmVsRG9tYWluc19kb2VzTm90TWF0Y2hXcm9uZ1RsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoUGF0dGVybnMuSUFOQV9UT1BfTEVWRUxfRE9NQUlOUyk7CisgICAgICAgIGFzc2VydEZhbHNlKCJTaG91bGQgbm90IG1hdGNoICdtZW0nIiwgcGF0dGVybi5tYXRjaGVyKCJtZW0iKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SWFuYVRvcExldmVsRG9tYWluc19kb2VzTm90TWF0Y2hXcm9uZ1B1bnljb2RlVGxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZShQYXR0ZXJucy5JQU5BX1RPUF9MRVZFTF9ET01BSU5TKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggaW52YWxpZCBQdW55Y29kZSBUTEQiLCBwYXR0ZXJuLm1hdGNoZXIoInhuIikubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICAvL1Rlc3RzIGZvciBQYXR0ZXJucy5XRUJfVVJMCisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFdlYlVybF9tYXRjaGVzVmFsaWRVcmxXaXRoU2NoZW1lQW5kSG9zdG5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmFuZHJvaWQuY29tIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIHNjaGVtZSBhbmQgaG9zdG5hbWUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1ZhbGlkVXJsV2l0aFNjaGVtZUhvc3RuYW1lQW5kTmV3VGxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL3d3dy5hbmRyb2lkLm1lIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIHNjaGVtZSwgaG9zdG5hbWUgYW5kIG5ldyBUTEQiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1ZhbGlkVXJsV2l0aEhvc3RuYW1lQW5kTmV3VGxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiYW5kcm9pZC5tZSI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBVUkwgd2l0aCBob3N0bmFtZSBhbmQgbmV3IFRMRCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFdlYlVybF9tYXRjaGVzQ2hpbmVzZVB1bnljb2RlVXJsV2l0aFByb3RvY29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL3huLS1mc3F1MDBhLnhuLS0wendtNTZkIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIENoaW5lc2UgUHVueWNvZGUgVVJMIHdpdGggcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc0NoaW5lc2VQdW55Y29kZVVybFdpdGhvdXRQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gInhuLS1mc3F1MDBhLnhuLS0wendtNTZkIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIENoaW5lc2UgUHVueWNvZGUgVVJMIHdpdGhvdXQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFdlYlVybF9tYXRjaGVzQXJhYmljUHVueWNvZGVVcmxXaXRoUHJvdG9jb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8veG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjL2FyL2RlZmF1bHQuYXNweCI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBhcmFiaWMgUHVueWNvZGUgVVJMIHdpdGggcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc0FyYWJpY1B1bnljb2RlVXJsV2l0aG91dFByb3RvY29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAieG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjL2FyL2RlZmF1bHQuYXNweCI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBBcmFiaWMgUHVueWNvZGUgVVJMIHdpdGhvdXQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1VybFdpdGhVbmljb2RlRG9tYWluTmFtZVdpdGhQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9cdUQ2MDRcdUFFMDhcdUM2MDFcdUMyMThcdUM5OUQua3IiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggVW5pY29kZSBkb21haW4gbmFtZSIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFdlYlVybF9tYXRjaGVzVXJsV2l0aFVuaWNvZGVEb21haW5OYW1lV2l0aG91dFByb3RvY29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiXHVENjA0XHVBRTA4XHVDNjAxXHVDMjE4XHVDOTlELmtyIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRob3V0IHByb3RvY29sIGFuZCB3aXRoIFVuaWNvZGUgZG9tYWluIG5hbWUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1VybFdpdGhVbmljb2RlVGxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiXHVCM0M0XHVCQTU0XHVDNzc4Llx1RDU1Q1x1QUQ2RCI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBVUkwgd2l0aCBVbmljb2RlIFRMRCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFdlYlVybF9tYXRjaGVzVXJsV2l0aFVuaWNvZGVQYXRoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL2JyYWluc3Rvcm10ZWNoLmJsb2dzLmZvcnR1bmUuY25uLmNvbS8yMDEwLzAzLzExLyIgKworICAgICAgICAgICAgICAgICJ0b3AtZml2ZS1tb21lbnRzLWZyb20tZXJpYy1zY2htaWR0XHUyMDE5cy10YWxrLWluLWFidS1kaGFiaS8iOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggVW5pY29kZSBwYXRoIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0V2ViVXJsX2RvZXNOb3RNYXRjaFZhbGlkVXJsV2l0aEludmFsaWRQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImZ0cDovL3d3dy5leGFtcGxlLmNvbSI7CisgICAgICAgIGFzc2VydEZhbHNlKCJTaG91bGQgbm90IG1hdGNoIFVSTCB3aXRoIGludmFsaWQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1ZhbGlkVXJsV2l0aFBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggcG9ydCIsIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1VybFdpdGhQb3J0QW5kUXVlcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAvP2Zvbz1iYXIiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggcG9ydCBhbmQgcXVlcnkiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1VybFdpdGhUaWxkZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MC9+dXNlci8/Zm9vPWJhciI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBVUkwgd2l0aCB0aWxkZSIsIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJVcmxfbWF0Y2hlc1Byb3RvY29sQ2FzZUluc2Vuc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaFR0UDovL2FuZHJvaWQuY29tIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiUHJvdG9jb2wgbWF0Y2hpbmcgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLldFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgLy9UZXN0cyBmb3IgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTAorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVmFsaWRVcmxXaXRoU2NoZW1lQW5kSG9zdG5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmFuZHJvaWQuY29tIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIHNjaGVtZSBhbmQgaG9zdG5hbWUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVmFsaWRVcmxXaXRoU2NoZW1lSG9zdG5hbWVBbmROZXdUbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmFuZHJvaWQubWUiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggc2NoZW1lLCBob3N0bmFtZSBhbmQgbmV3IFRMRCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX21hdGNoZXNWYWxpZFVybFdpdGhIb3N0bmFtZUFuZE5ld1RsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImFuZHJvaWQubWUiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggaG9zdG5hbWUgYW5kIG5ldyBUTEQiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisKKyAgICAgICAgdXJsID0gImFuZHJvaWQuY2FtZXJhIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIGhvc3RuYW1lIGFuZCBuZXcgVExEIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc0NoaW5lc2VQdW55Y29kZVVybFdpdGhQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly94bi0tZnNxdTAwYS54bi0tMHp3bTU2ZCI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBDaGluZXNlIFB1bnljb2RlIFVSTCB3aXRoIHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc0NoaW5lc2VQdW55Y29kZVVybFdpdGhvdXRQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gInhuLS1mc3F1MDBhLnhuLS0wendtNTZkIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIENoaW5lc2UgUHVueWNvZGUgVVJMIHdpdGhvdXQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzQXJhYmljUHVueWNvZGVVcmxXaXRoUHJvdG9jb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8veG4tLTRnYnJpbS54bi0tcm1ja2JiYWpsYzZkajdieG5lMmMueG4tLXdnYmgxYy9hci9kZWZhdWx0LmFzcHgiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggQXJhYmljIFB1bnljb2RlIFVSTCB3aXRoIHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc0FyYWJpY1B1bnljb2RlVXJsV2l0aG91dFByb3RvY29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAieG4tLTRnYnJpbS54bi0tcm1ja2JiYWpsYzZkajdieG5lMmMueG4tLXdnYmgxYy9hci9kZWZhdWx0LmFzcHgiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggQXJhYmljIFB1bnljb2RlIFVSTCB3aXRob3V0IHByb3RvY29sIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfZG9lc05vdE1hdGNoUHVueWNvZGVUbGRUaGF0U3RhcnRzV2l0aERhc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8veG4tLWZzcXUwMGEuLXhuLS0wendtNTZkIjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggUHVueWNvZGUgVExEIHRoYXQgc3RhcnRzIHdpdGggZGFzaCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX2RvZXNOb3RNYXRjaFB1bnljb2RlVGxkVGhhdEVuZHNXaXRoRGFzaCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly94bi0tZnNxdTAwYS54bi0tMHp3bTU2ZC0iOworICAgICAgICBhc3NlcnRGYWxzZSgiU2hvdWxkIG5vdCBtYXRjaCBQdW55Y29kZSBUTEQgdGhhdCBlbmRzIHdpdGggZGFzaCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX21hdGNoZXNVcmxXaXRoVW5pY29kZURvbWFpbk5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vXHVENjA0XHVBRTA4XHVDNjAxXHVDMjE4XHVDOTlELmtyIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIFVuaWNvZGUgZG9tYWluIG5hbWUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisKKyAgICAgICAgdXJsID0gIlx1RDYwNFx1QUUwOFx1QzYwMVx1QzIxOFx1Qzk5RC5rciI7CisgICAgICAgIGFzc2VydFRydWUoImhvdWxkIG1hdGNoIFVSTCB3aXRob3V0IHByb3RvY29sIGFuZCB3aXRoIFVuaWNvZGUgZG9tYWluIG5hbWUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVXJsV2l0aFVuaWNvZGVUbGQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJcdUIzQzRcdUJBNTRcdUM3NzguXHVENTVDXHVBRDZEIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIFVuaWNvZGUgVExEIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc1VybFdpdGhVbmljb2RlUGF0aCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9icmFpbnN0b3JtdGVjaC5ibG9ncy5mb3J0dW5lLmNubi5jb20vMjAxMC8wMy8xMS8iICsKKyAgICAgICAgICAgICAgICAidG9wLWZpdmUtbW9tZW50cy1mcm9tLWVyaWMtc2NobWlkdFx1MjAxOXMtdGFsay1pbi1hYnUtZGhhYmkvIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIFVuaWNvZGUgcGF0aCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX2RvZXNOb3RNYXRjaFZhbGlkVXJsV2l0aEludmFsaWRQcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImZ0cDovL3d3dy5leGFtcGxlLmNvbSI7CisgICAgICAgIGFzc2VydEZhbHNlKCJTaG91bGQgbm90IG1hdGNoIFVSTCB3aXRoIGludmFsaWQgcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVmFsaWRVcmxXaXRoUG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb206ODA4MCI7CisgICAgICAgIGFzc2VydFRydWUoIlNob3VsZCBtYXRjaCBVUkwgd2l0aCBwb3J0IiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc1VybFdpdGhQb3J0QW5kUXVlcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tOjgwODAvP2Zvbz1iYXIiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggcG9ydCBhbmQgcXVlcnkiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVXJsV2l0aFRpbGRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbTo4MDgwL351c2VyLz9mb289YmFyIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFVSTCB3aXRoIHRpbGRlIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b0xpbmtXZWJVcmxfbWF0Y2hlc1Byb3RvY29sQ2FzZUluc2Vuc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaFR0UDovL2FuZHJvaWQuY29tIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiUHJvdG9jb2wgbWF0Y2hpbmcgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVXJsU3RhcnRpbmdXaXRoSHR0cEFuZERvZXNOb3RIYXZlVGxkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiaHR0cDovL2FuZHJvaWQvI25vdGxkLy8vYS9uL2Qvci9vL2kvZCZwMT0xJnAyPTIiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGhvdXQgYSBUTEQgYW5kIHN0YXJ0aW5nIHdpdGggaHR0cCAiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9kb2VzTm90TWF0Y2hVcmxzV2l0aG91dFByb3RvY29sQW5kV2l0aFVua25vd25UbGQoKQorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAidGhhbmsueW91IjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggVVJMIHRoYXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIHByb3RvY29sIGFuZCAiICsKKyAgICAgICAgICAgICAgICAiZG9lcyBub3QgY29udGFpbiBhIGtub3duIFRMRCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX2RvZXNOb3RNYXRjaFVybFdpdGhJbnZhbGlkUmVxdWVzdFBhcmFtZXRlcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9hbmRyb2lkLmNvbT9wPXZhbHVlIjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggVVJMIHdpdGggaW52YWxpZCByZXF1ZXN0IHBhcmFtZXRlciIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX2RvZXNOb3RQYXJ0aWFsbHlNYXRjaFVua25vd25Qcm90b2NvbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImZ0cDovL2Zvby5iYXIvYmF6IjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgcGFydGlhbGx5IG1hdGNoIFVSTCB3aXRoIHVua25vd24gcHJvdG9jb2wiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLmZpbmQoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzVmFsaWRVcmxXaXRoRW1vamkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJUaGFua1x1MjYzQS5jb20iOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVVJMIHdpdGggZW1vamkiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9kb2VzTm90TWF0Y2hVcmxzV2l0aEVtb2ppV2l0aG91dFByb3RvY29sQW5kV2l0aG91dEtub3duVGxkKCkKKyAgICAgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gIlRoYW5rXHUyNjNBLnlvdSI7CisgICAgICAgIGFzc2VydEZhbHNlKCJTaG91bGQgbm90IG1hdGNoIFVSTHMgY29udGFpbmluZyBlbW9qaSBhbmQgd2l0aCB1bmtub3duIFRMRCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX2RvZXNOb3RNYXRjaEVtYWlsQWRkcmVzcygpCisgICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJhbmRyb2lkQGFuZHJvaWQuY29tIjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggZW1haWwgYWRkcmVzcyIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX21hdGNoZXNEb21haW5OYW1lV2l0aFN1cnJvZ2F0ZVBhaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyB1cmwgPSAiYW5kcm9pZFx1RDgzQ1x1REYzOC5jb20iOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggZG9tYWluIG5hbWUgd2l0aCBVbmljb2RlIHN1cnJvZ2F0ZSBwYWlycyIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuQVVUT0xJTktfV0VCX1VSTC5tYXRjaGVyKHVybCkubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEF1dG9MaW5rV2ViVXJsX21hdGNoZXNUbGRXaXRoU3Vycm9nYXRlUGFpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vYW5kcm9pZC5cdUQ4M0NcdURGMzhjb20iOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggVExEIHdpdGggVW5pY29kZSBzdXJyb2dhdGUgcGFpcnMiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9tYXRjaGVzUGF0aFdpdGhTdXJyb2dhdGVQYWlycygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gImh0dHA6Ly9hbmRyb2lkLmNvbS9wYXRoLXdpdGgtXHVEODNDXHVERjM4P3Y9XHVEODNDXHVERjM4IjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIHBhdGggYW5kIHF1ZXJ5IHdpdGggVW5pY29kZSBzdXJyb2dhdGUgcGFpcnMiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkFVVE9MSU5LX1dFQl9VUkwubWF0Y2hlcih1cmwpLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBdXRvTGlua1dlYlVybF9kb2VzTm90TWF0Y2hVcmxXaXRoRXhjbHVkZWRTdXJyb2dhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHVybCA9ICJodHRwOi8vYW5kcm9pZFx1RDgzRlx1REZGRS5jb20iOworICAgICAgICBhc3NlcnRGYWxzZSgiU2hvdWxkIG5vdCBtYXRjaCBVUkwgd2l0aCBleGNsdWRlZCBVbmljb2RlIHN1cnJvZ2F0ZSBwYWlyIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5BVVRPTElOS19XRUJfVVJMLm1hdGNoZXIodXJsKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIC8vVGVzdHMgZm9yIFBhdHRlcm5zLklQX0FERFJFU1MKKworICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SXBQYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGJvb2xlYW4gdDsKIApAQCAtMTE4LDM0ICs0MzIsODUgQEAKICAgICAgICAgYXNzZXJ0RmFsc2UoIkludmFsaWQgSVAiLCB0KTsKICAgICB9CiAKKyAgICAvL1Rlc3RzIGZvciBQYXR0ZXJucy5ET01BSU5fTkFNRQorCiAgICAgQFNtYWxsVGVzdAotICAgIEBTdXBwcmVzcyAvLyBGYWlsaW5nLgotICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5QYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGJvb2xlYW4gdDsKLQotICAgICAgICB0ID0gUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcigibWFpbC5leGFtcGxlLmNvbSIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgZG9tYWluIiwgdCk7Ci0KLSAgICAgICAgdCA9IFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoImdvb2dsZS5tZSIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgZG9tYWluIiwgdCk7Ci0KLSAgICAgICAgLy8gSW50ZXJuYXRpb25hbGl6ZWQgZG9tYWlucy4KLSAgICAgICAgdCA9IFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoIlx1RDYwNFx1QUUwOFx1QzYwMVx1QzIxOFx1Qzk5RC5rciIpLm1hdGNoZXMoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiVmFsaWQgZG9tYWluIiwgdCk7Ci0KLSAgICAgICAgdCA9IFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoIl9fKyY0Mi54ZXIiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKCJJbnZhbGlkIGRvbWFpbiIsIHQpOwotCi0gICAgICAgIC8vIE9ic29sZXRlIGRvbWFpbiAueXUKLSAgICAgICAgdCA9IFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoInRlc3QueXUiKS5tYXRjaGVzKCk7Ci0gICAgICAgIGFzc2VydEZhbHNlKCJPYnNvbGV0ZSBjb3VudHJ5IGNvZGUgdG9wIGxldmVsIGRvbWFpbiIsIHQpOwotCi0gICAgICAgIC8vIFRlc3RpbmcgdG9wIGxldmVsIEFyYWJpYyBjb3VudHJ5IGNvZGUgZG9tYWluIGluIFB1bnljb2RlOgotICAgICAgICB0ID0gUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcigieG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjIikubWF0Y2hlcygpOwotICAgICAgICBhc3NlcnRUcnVlKCJWYWxpZCBkb21haW4iLCB0KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tYWluX21hdGNoZXNQdW55Y29kZVRsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgZG9tYWluID0gInhuLS1mc3F1MDBhLnhuLS0wendtNTZkIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIGRvbWFpbiBuYW1lIGluIFB1bnljb2RlIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5ET01BSU5fTkFNRS5tYXRjaGVyKGRvbWFpbikubWF0Y2hlcygpKTsKICAgICB9CiAKICAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERvbWFpbl9kb2VzTm90TWF0Y2hQdW55Y29kZVRoYXRTdGFydHNXaXRoRGFzaCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgZG9tYWluID0gInhuLS1mc3F1MDBhLi14bi0tMHp3bTU2ZCI7CisgICAgICAgIGFzc2VydEZhbHNlKCJTaG91bGQgbm90IG1hdGNoIFB1bnljb2RlIFRMRCB0aGF0IHN0YXJ0cyB3aXRoIGEgZGFzaCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcihkb21haW4pLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5fZG9lc05vdE1hdGNoUHVueWNvZGVUaGF0RW5kc1dpdGhEYXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBkb21haW4gPSAieG4tLWZzcXUwMGEueG4tLTB6d201NmQtIjsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggUHVueWNvZGUgVExEIHRoYXQgZW5kcyB3aXRoIGEgZGFzaCIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcihkb21haW4pLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5fZG9lc05vdE1hdGNoUHVueWNvZGVMb25nZXJUaGFuQWxsb3dlZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdGxkID0gInhuLS0iOworICAgICAgICBmb3IoaW50IGk9MDsgaTw9NjsgaSsrKSB7CisgICAgICAgICAgICB0bGQgKz0gIjAxMjM0NTY3ODkiOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBkb21haW4gPSAieG4tLWZzcXUwMGEuIiArIHRsZDsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNob3VsZCBub3QgbWF0Y2ggUHVueWNvZGUgVExEIHRoYXQgaXMgbG9uZ2VyIHRoYW4gNjMgY2hhcnMiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoZG9tYWluKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tYWluX21hdGNoZXNPYnNvbGV0ZVRsZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgZG9tYWluID0gInRlc3QueXUiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggZG9tYWluIG5hbWVzIHdpdGggb2Jzb2xldGUgVExEIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5ET01BSU5fTkFNRS5tYXRjaGVyKGRvbWFpbikubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERvbWFpbl9tYXRjaGVzV2l0aFN1YkRvbWFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgZG9tYWluID0gIm1haWwuZXhhbXBsZS5jb20iOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggZG9tYWluIG5hbWVzIHdpdGggc3ViZG9tYWlucyIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcihkb21haW4pLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5fbWF0Y2hlc1dpdGhvdXRTdWJEb21haW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGRvbWFpbiA9ICJhbmRyb2lkLm1lIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIGRvbWFpbiBuYW1lcyB3aXRob3V0IHN1YmRvbWFpbnMiLAorICAgICAgICAgICAgICAgIFBhdHRlcm5zLkRPTUFJTl9OQU1FLm1hdGNoZXIoZG9tYWluKS5tYXRjaGVzKCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tYWluX21hdGNoZXNVbmljb2RlRG9tYWluTmFtZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIGRvbWFpbiA9ICJcdUQ2MDRcdUFFMDhcdUM2MDFcdUMyMThcdUM5OUQua3IiOworICAgICAgICBhc3NlcnRUcnVlKCJTaG91bGQgbWF0Y2ggdW5pY29kZWRvbWFpbiBuYW1lcyIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcihkb21haW4pLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3REb21haW5fZG9lc05vdE1hdGNoSW52YWxpZERvbWFpbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgZG9tYWluID0gIl9fKyY0Mi54ZXIiOworICAgICAgICBhc3NlcnRGYWxzZSgiU2hvdWxkIG5vdCBtYXRjaCBpbnZhbGlkIGRvbWFpbiBuYW1lIiwKKyAgICAgICAgICAgICAgICBQYXR0ZXJucy5ET01BSU5fTkFNRS5tYXRjaGVyKGRvbWFpbikubWF0Y2hlcygpKTsKKyAgICB9CisKKyAgICBAU21hbGxUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERvbWFpbl9tYXRjaGVzUHVueWNvZGVBcmFiaWNEb21haW5OYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBkb21haW4gPSAieG4tLTRnYnJpbS54bi0tLS1ybWNrYmJhamxjNmRqN2J4bmUyYy54bi0td2diaDFjIjsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiU2hvdWxkIG1hdGNoIFB1bnljb2RlIEFyYWJpYyBkb21haW4gbmFtZSIsCisgICAgICAgICAgICAgICAgUGF0dGVybnMuRE9NQUlOX05BTUUubWF0Y2hlcihkb21haW4pLm1hdGNoZXMoKSk7CisgICAgfQorCisgICAgLy9UZXN0cyBmb3IgUGF0dGVybnMuUEhPTkUKKworICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGhvbmVQYXR0ZXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGJvb2xlYW4gdDsKIApkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTdWJ0eXBlVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvdmlldy90ZXh0c2VydmljZS9TcGVsbENoZWNrZXJTdWJ0eXBlVGVzdC5qYXZhCmluZGV4IDczZmRiMTAuLjRhMWM0MTQgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3ZpZXcvdGV4dHNlcnZpY2UvU3BlbGxDaGVja2VyU3VidHlwZVRlc3QuamF2YQorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC92aWV3L3RleHRzZXJ2aWNlL1NwZWxsQ2hlY2tlclN1YnR5cGVUZXN0LmphdmEKQEAgLTMwLDExICszMCwxNiBAQAogICovCiBwdWJsaWMgY2xhc3MgU3BlbGxDaGVja2VyU3VidHlwZVRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FID0gMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfTk9ORSA9ICIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX05PTkUgPSAiIjsKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BID0gImVuX0dCIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BID0gImVuLUdCIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VCVFlQRV9OQU1FX1JFU19JRF9BID0gMHgxMjM0NTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCVFlQRV9FWFRSQV9WQUxVRV9BID0gIktleTE9VmFsdWUxLEtleTI9VmFsdWUyIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VCVFlQRV9TVUJUWVBFX0lEX0EgPSA0MjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQiA9ICJlbl9JTiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQiA9ICJlbi1JTiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVQlRZUEVfTkFNRV9SRVNfSURfQiA9IDB4NTQzMjE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNVQlRZUEVfRVhUUkFfVkFMVUVfQiA9ICJLZXkzPVZhbHVlMyxLZXk0PVZhbHVlNCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNVQlRZUEVfU1VCVFlQRV9JRF9CID0gLTQyOwpAQCAtNjAsOSArNjUsMTEgQEAKICAgICBAU21hbGxUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFN1YnR5cGVXaXRoTm9TdWJ0eXBlSWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3BlbGxDaGVja2VyU3VidHlwZSBzdWJ0eXBlID0gbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLAotICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpOworICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwKKyAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgc3VidHlwZS5nZXROYW1lUmVzSWQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLCBzdWJ0eXBlLmdldExvY2FsZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgc3VidHlwZS5nZXRMYW5ndWFnZVRhZygpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTEiLCBzdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTIiLCBzdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MiIpKTsKICAgICAgICAgLy8gSGlzdG9yaWNhbGx5IHdlIGhhdmUgdXNlZCBTcGVsbENoZWNrZXJTdWJ0eXBlI2hhc2hDb2RlKCkgdG8gdHJhY2sgd2hpY2ggc3VidHlwZSBpcwpAQCAtNzUsNiArODIsNyBAQAogICAgICAgICBmaW5hbCBTcGVsbENoZWNrZXJTdWJ0eXBlIGNsb25lZFN1YnR5cGUgPSBjbG9uZVZpYVBhcmNlbChzdWJ0eXBlKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgY2xvbmVkU3VidHlwZS5nZXROYW1lUmVzSWQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLCBjbG9uZWRTdWJ0eXBlLmdldExvY2FsZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgY2xvbmVkU3VidHlwZS5nZXRMYW5ndWFnZVRhZygpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTEiLCBjbG9uZWRTdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTIiLCBjbG9uZWRTdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MiIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKApAQCAtODQsMTAgKzkyLDEyIEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U3VidHlwZVdpdGhTdWJ0eXBlSWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3BlbGxDaGVja2VyU3VidHlwZSBzdWJ0eXBlID0gbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLAotICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX0EpOworICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwKKyAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9BKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBzdWJ0eXBlLmdldE5hbWVSZXNJZCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsIHN1YnR5cGUuZ2V0TG9jYWxlKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBzdWJ0eXBlLmdldExhbmd1YWdlVGFnKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlZhbHVlMSIsIHN1YnR5cGUuZ2V0RXh0cmFWYWx1ZU9mKCJLZXkxIikpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIlZhbHVlMiIsIHN1YnR5cGUuZ2V0RXh0cmFWYWx1ZU9mKCJLZXkyIikpOwogICAgICAgICAvLyBTaW1pbGFyIHRvICJTdWJ0eXBlSWQiIGluIElucHV0TWV0aG9kU3VidHlwZSwgIlN1YnR5cGVJZCIgaW4gU3BlbGxDaGVja2VyU3VidHlwZSBlbmFibGVzCkBAIC05Nyw2ICsxMDcsNyBAQAogICAgICAgICBmaW5hbCBTcGVsbENoZWNrZXJTdWJ0eXBlIGNsb25lZFN1YnR5cGUgPSBjbG9uZVZpYVBhcmNlbChzdWJ0eXBlKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgY2xvbmVkU3VidHlwZS5nZXROYW1lUmVzSWQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLCBjbG9uZWRTdWJ0eXBlLmdldExvY2FsZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgY2xvbmVkU3VidHlwZS5nZXRMYW5ndWFnZVRhZygpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTEiLCBjbG9uZWRTdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MSIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJWYWx1ZTIiLCBjbG9uZWRTdWJ0eXBlLmdldEV4dHJhVmFsdWVPZigiS2V5MiIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKFNVQlRZUEVfU1VCVFlQRV9JRF9BLCBjbG9uZWRTdWJ0eXBlLmhhc2hDb2RlKCkpOwpAQCAtMTA0LDMwICsxMTUsNDIgQEAKIAogICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0TG9jYWxlT2JqZWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9jYWxlKCJlbiIpLCBuZXcgU3BlbGxDaGVja2VyU3VidHlwZSgKLSAgICAgICAgICAgICAgICBTVUJUWVBFX05BTUVfUkVTX0lEX0EsICJlbiIsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSkuZ2V0TG9jYWxlT2JqZWN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvY2FsZSgiZW4iLCAiVVMiKSwgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoCi0gICAgICAgICAgICAgICAgU1VCVFlQRV9OQU1FX1JFU19JRF9BLCAiZW5fVVMiLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EpLmdldExvY2FsZU9iamVjdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb2NhbGUoImVuIiwgIlVTIiwgIlBPU0lYIiksIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKAotICAgICAgICAgICAgICAgIFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgImVuX1VTX1BPU0lYIiwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BKS5nZXRMb2NhbGVPYmplY3QoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9jYWxlKCJlbiIsICJHQiIpLAorICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgImVuX0dCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfTk9ORSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLmdldExvY2FsZU9iamVjdCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb2NhbGUoImVuIiwgIkdCIiksCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgImVuLUdCIiwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLmdldExvY2FsZU9iamVjdCgpKTsKIAotICAgICAgICAvLyBTcGVjaWFsIHJld3JpdGUgcnVsZSBmb3IgInRsIiBmb3IgdmVyc2lvbnMgb2YgQW5kcm9pZCBlYXJsaWVyIHRoYW4gTG9sbGlwb3AgdGhhdCBkaWQgbm90Ci0gICAgICAgIC8vIHN1cHBvcnQgdGhyZWUgbGV0dGVyIGxhbmd1YWdlIGNvZGVzLCBhbmQgdXNlZCAidGwiIChUYWdhbG9nKSBhcyB0aGUgbGFuZ3VhZ2Ugc3RyaW5nIGZvcgotICAgICAgICAvLyAiZmlsIiAoRmlsaXBpbm8pLgotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvY2FsZSgiZmlsIiksIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKAotICAgICAgICAgICAgICAgIFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgInRsIiwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BKS5nZXRMb2NhbGVPYmplY3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9jYWxlKCJmaWwiLCAiUEgiKSwgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoCi0gICAgICAgICAgICAgICAgU1VCVFlQRV9OQU1FX1JFU19JRF9BLCAidGxfUEgiLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EpLmdldExvY2FsZU9iamVjdCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb2NhbGUoImZpbCIsICJQSCIsICJQT1NJWCIpLCBuZXcgU3BlbGxDaGVja2VyU3VidHlwZSgKLSAgICAgICAgICAgICAgICBTVUJUWVBFX05BTUVfUkVTX0lEX0EsICJ0bF9QSF9QT1NJWCIsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSkuZ2V0TG9jYWxlT2JqZWN0KCkpOworICAgICAgICAvLyBJZiBuZWl0aGVyIGxvY2FsZSBzdHJpbmcgbm9yIGxhbmd1YWdlIHRhZyBpcyBzcGVjaWZpZWQsCisgICAgICAgIC8vIHtAbGluayBTcGVsbENoZWNrZXJTdWJ0eXBlI2dldExvY2FsZU9iamVjdH0gcmV0dXJucyBudWxsLgorICAgICAgICBhc3NlcnROdWxsKAorICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfTk9ORSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLmdldExvY2FsZU9iamVjdCgpKTsKIAotICAgICAgICAvLyBTbyBmYXIgcmVqZWN0aW5nIGludmFsaWQvdW5leHBlY3RlZCBsb2NhbGUgc3RyaW5ncyBpcyBvdXQgb2YgdGhlIHNjb3BlLgotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvY2FsZSgiYSIpLCBuZXcgU3BlbGxDaGVja2VyU3VidHlwZSgKLSAgICAgICAgICAgICAgICBTVUJUWVBFX05BTUVfUkVTX0lEX0EsICJhIiwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BKS5nZXRMb2NhbGVPYmplY3QoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhuZXcgTG9jYWxlKCJhIGIgYyIpLCBuZXcgU3BlbGxDaGVja2VyU3VidHlwZSgKLSAgICAgICAgICAgICAgICBTVUJUWVBFX05BTUVfUkVTX0lEX0EsICJhIGIgYyIsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSkuZ2V0TG9jYWxlT2JqZWN0KCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvY2FsZSgiZW4tVVMiKSwgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoCi0gICAgICAgICAgICAgICAgU1VCVFlQRV9OQU1FX1JFU19JRF9BLCAiZW4tVVMiLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EpLmdldExvY2FsZU9iamVjdCgpKTsKKyAgICAgICAgLy8gSWYgYm90aCBsb2NhbGUgc3RyaW5nIGFuZCBsYW5ndWFnZSB0YWcgYXJlIHNwZWNpZmllZCwKKyAgICAgICAgLy8ge0BsaW5rIFNwZWxsQ2hlY2tlclN1YnR5cGUjZ2V0TG9jYWxlT2JqZWN0fSB1c2VzIGxhbmd1YWdlIHRhZy4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKG5ldyBMb2NhbGUoImVuIiwgIkdCIiksCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCAiZW5fVVMiLCAiZW4tR0IiLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkuZ2V0TG9jYWxlT2JqZWN0KCkpOworCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0ICJ0bF9QSCIgaXMgcmV3cml0dGVuIHRvICJmaWxfUEgiIGZvciBzcGVsbCBjaGVja2VycyB0aGF0IG5lZWQgdG8gc3VwcG9ydAorICAgICAgICAvLyBBbmRyb2lkIEtpdEthdCBhbmQgcHJpb3IsIHdoaWNoIGRvIG5vdCBzdXBwb3J0IDMtbGV0dGVyIGxhbmd1YWdlIGNvZGVzLgorICAgICAgICBhc3NlcnRFcXVhbHMobmV3IExvY2FsZSgiZmlsIiwgIlBIIiksCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCAidGxfUEgiLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19OT05FLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkuZ2V0TG9jYWxlT2JqZWN0KCkpOworCisgICAgICAgIC8vICJsYW5ndWFnZVRhZyIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBBbmRyb2lkIE4gYW5kIGxhdGVyLCB3aGVyZSAzLWxldHRlciBjb3VudHJ5IGNvZGVzCisgICAgICAgIC8vIGFyZSBndWFyYW50ZWVkIHRvIGJlIGF2YWlsYWJsZS4gIEl0J3MgZGV2ZWxvcGVycycgcmVzcG9uc2liaWxpdHkgZm9yIHNwZWNpZnlpbmcgYSB2YWxpZAorICAgICAgICAvLyBjb3VudHJ5IHN1YnRhZ3MgaGVyZSBhbmQgd2UgZG8gbm90IHJld3JpdGUgInRsIiB0byAiZmlsIiBmb3Igc2ltcGxpY2l0eS4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ0bCIsCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgInRsLVBIIiwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRMb2NhbGVPYmplY3QoKS5nZXRMYW5ndWFnZSgpKTsKICAgICB9CiAKICAgICBAU21hbGxUZXN0CkBAIC0xNTYsNTAgKzE3OSw4MyBAQAogICAgICAgICAvLyBJZiBzdWJ0eXBlIElEIGlzIDAgKD09IFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSwgd2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvci4KICAgICAgICAgYXNzZXJ0RXF1YWxzKAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSksCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkpOworICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkpOwogICAgICAgICBhc3NlcnROb3RFcXVhbCgKICAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQiwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpKTsKICAgICAgICAgYXNzZXJ0Tm90RXF1YWwoCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSksCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSwKICAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSk7CiAgICAgICAgIGFzc2VydE5vdEVxdWFsKAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX05PTkUpLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSksCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9CLCBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkpOworICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19CLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfTk9ORSkpOworICAgICAgICBhc3NlcnROb3RFcXVhbCgKKyAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSwKKyAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9OT05FKSk7CiAKICAgICAgICAgLy8gSWYgc3VidHlwZSBJRCBpcyBub3QgMCwgd2UgdGVzdCB0aGUgZXF1YWxpdHkgYmFzZWQgb25seSBvbiB0aGUgc3VidHlwZSBJRC4KICAgICAgICAgYXNzZXJ0RXF1YWxzKAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSksCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfQSkpOworICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLCBTVUJUWVBFX1NVQlRZUEVfSURfQSksCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9BKSwKICAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0IsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0IsCi0gICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9BKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfTEFOR1VBR0VfVEFHX0EsIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9JRF9BKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygKICAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX0EpLAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX0EpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX0EpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX0EpLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSksCiAgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAotICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9FWFRSQV9WQUxVRV9CLCBTVUJUWVBFX1NVQlRZUEVfSURfQSkpOworICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19CLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSkpOworICAgICAgICBhc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSksCisgICAgICAgICAgICAgICAgbmV3IFNwZWxsQ2hlY2tlclN1YnR5cGUoU1VCVFlQRV9OQU1FX1JFU19JRF9BLCBTVUJUWVBFX1NVQlRZUEVfTE9DQUxFX1NUUklOR19BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0xBTkdVQUdFX1RBR19BLCBTVUJUWVBFX0VYVFJBX1ZBTFVFX0IsCisgICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX1NVQlRZUEVfSURfQSkpOwogICAgICAgICBhc3NlcnROb3RFcXVhbCgKICAgICAgICAgICAgICAgICBuZXcgU3BlbGxDaGVja2VyU3VidHlwZShTVUJUWVBFX05BTUVfUkVTX0lEX0EsIFNVQlRZUEVfU1VCVFlQRV9MT0NBTEVfU1RSSU5HX0EsCi0gICAgICAgICAgICAgICAgICAgICAgICBTVUJUWVBFX0VYVFJBX1ZBTFVFX0EsIFNVQlRZUEVfU1VCVFlQRV9JRF9BKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX0EpLAogICAgICAgICAgICAgICAgIG5ldyBTcGVsbENoZWNrZXJTdWJ0eXBlKFNVQlRZUEVfTkFNRV9SRVNfSURfQSwgU1VCVFlQRV9TVUJUWVBFX0xPQ0FMRV9TVFJJTkdfQSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfRVhUUkFfVkFMVUVfQSwgU1VCVFlQRV9TVUJUWVBFX0lEX0IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNVQlRZUEVfU1VCVFlQRV9MQU5HVUFHRV9UQUdfQSwgU1VCVFlQRV9FWFRSQV9WQUxVRV9BLAorICAgICAgICAgICAgICAgICAgICAgICAgU1VCVFlQRV9TVUJUWVBFX0lEX0IpKTsKICAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyQWN0aXZpdHkuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyQWN0aXZpdHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2IyNWExCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJBY3Rpdml0eS5qYXZhCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgY29tLmFuZHJvaWQuZnJhbWV3b3Jrcy5jb3JldGVzdHMuUjsKKworLyoqCisgKiBBIG1pbmltYWwgYXBwbGljYXRpb24gZm9yIERhdGVQaWNrZXJGb2N1c1Rlc3QuCisgKi8KK3B1YmxpYyBjbGFzcyBEYXRlUGlja2VyQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOworICAgICAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5kYXRlcGlja2VyX2xheW91dCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L0RhdGVQaWNrZXJGb2N1c1Rlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyRm9jdXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZTQwZgotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9EYXRlUGlja2VyRm9jdXNUZXN0LmphdmEKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQud2lkZ2V0OworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5hcHAuSW5zdHJ1bWVudGF0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UyOworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmZyYW1ld29ya3MuY29yZXRlc3RzLlI7CisKKy8qKgorICogVGVzdCB7QGxpbmsgRGF0ZVBpY2tlcn0gZm9jdXMgY2hhbmdlcy4KKyAqLworcHVibGljIGNsYXNzIERhdGVQaWNrZXJGb2N1c1Rlc3QgZXh0ZW5kcyBBY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlMjxEYXRlUGlja2VyQWN0aXZpdHk+IHsKKworICAgIHByaXZhdGUgQWN0aXZpdHkgbUFjdGl2aXR5OworICAgIHByaXZhdGUgSW5zdHJ1bWVudGF0aW9uIG1JbnN0cnVtZW50YXRpb247CisgICAgcHJpdmF0ZSBEYXRlUGlja2VyIG1EYXRlUGlja2VyOworCisgICAgcHVibGljIERhdGVQaWNrZXJGb2N1c1Rlc3QoKSB7CisgICAgICAgIHN1cGVyKERhdGVQaWNrZXJBY3Rpdml0eS5jbGFzcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKworICAgICAgICBtQWN0aXZpdHkgPSBnZXRBY3Rpdml0eSgpOworICAgICAgICBtSW5zdHJ1bWVudGF0aW9uID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCk7CisKKyAgICAgICAgbURhdGVQaWNrZXIgPSAoRGF0ZVBpY2tlcikgbUFjdGl2aXR5LmZpbmRWaWV3QnlJZChSLmlkLmRhdGVQaWNrZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRhYnMgKGZvcndhcmQgYW5kIGJhY2t3YXJkKSB0aHJvdWdoIHRoZSBEYXRlUGlja2VyIHRvIGVuc3VyZSB0aGUgY29ycmVjdAorICAgICAqIFZpZXdzIGdhaW4gZm9jdXMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdEZvY3VzVHJhdmVsKCkgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGFzc2VydFRydWUobURhdGVQaWNrZXIucmVxdWVzdEZvY3VzKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF0ZV9waWNrZXJfaGVhZGVyX3llYXIpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQucHJldik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5uZXh0KTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9waWNrZXJfdmlld19wYWdlcik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoUi5pZC5iZWxvd1BpY2tlcik7CisgICAgICAgIHNlbmRTaGlmdEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9waWNrZXJfdmlld19wYWdlcik7CisgICAgICAgIHNlbmRTaGlmdEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLm5leHQpOworICAgICAgICBzZW5kU2hpZnRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5wcmV2KTsKKyAgICAgICAgc2VuZFNoaWZ0S2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF0ZV9waWNrZXJfaGVhZGVyX3llYXIpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kS2V5KGludCBrZXljb2RlKSB7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24uc2VuZEtleURvd25VcFN5bmMoa2V5Y29kZSk7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24ud2FpdEZvcklkbGVTeW5jKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFZpZXdIYXNGb2N1cyhmaW5hbCBpbnQgaWQpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBydW5UZXN0T25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBWaWV3IHZpZXcgPSBtQWN0aXZpdHkuZmluZFZpZXdCeUlkKGlkKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHZpZXcuaGFzRm9jdXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZW5kU2hpZnRLZXkoaW50IGtleWNvZGUpIHsKKyAgICAgICAgZmluYWwgS2V5RXZlbnQgc2hpZnREb3duID0gbmV3IEtleUV2ZW50KEtleUV2ZW50LkFDVElPTl9ET1dOLCBLZXlFdmVudC5LRVlDT0RFX1NISUZUX0xFRlQpOworICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLnNlbmRLZXlTeW5jKHNoaWZ0RG93bik7CisKKyAgICAgICAgZmluYWwgS2V5RXZlbnQga2V5RG93biA9IG5ldyBLZXlFdmVudChTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSwKKyAgICAgICAgICAgICAgICBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSwgS2V5RXZlbnQuQUNUSU9OX0RPV04sIGtleWNvZGUsIDAsCisgICAgICAgICAgICAgICAgS2V5RXZlbnQuTUVUQV9TSElGVF9PTik7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24uc2VuZEtleVN5bmMoa2V5RG93bik7CisKKyAgICAgICAgZmluYWwgS2V5RXZlbnQga2V5VXAgPSBuZXcgS2V5RXZlbnQoU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCksCisgICAgICAgICAgICAgICAgU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCksIEtleUV2ZW50LkFDVElPTl9VUCwga2V5Y29kZSwgMCwKKyAgICAgICAgICAgICAgICBLZXlFdmVudC5NRVRBX1NISUZUX09OKTsKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi5zZW5kS2V5U3luYyhrZXlVcCk7CisKKyAgICAgICAgZmluYWwgS2V5RXZlbnQgc2hpZnRVcCA9IG5ldyBLZXlFdmVudChLZXlFdmVudC5BQ1RJT05fVVAsIEtleUV2ZW50LktFWUNPREVfU0hJRlRfTEVGVCk7CisgICAgICAgIG1JbnN0cnVtZW50YXRpb24uc2VuZEtleVN5bmMoc2hpZnRVcCk7CisKKyAgICAgICAgbUluc3RydW1lbnRhdGlvbi53YWl0Rm9ySWRsZVN5bmMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0cyB0byBlbnN1cmUgdGhlIGtleWJvYXJkIGNhbiBzZWxlY3QgdGhlIGN1cnJlbnQgeWVhci4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0WWVhckNob2ljZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBzZXRLbm93bkRhdGUoKTsKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgVmlldyB5ZWFyID0gbURhdGVQaWNrZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl9oZWFkZXJfeWVhcik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh5ZWFyLnJlcXVlc3RGb2N1cygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFZpZXcgeWVhclNlbGVjdCA9IG1EYXRlUGlja2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF0ZV9waWNrZXJfeWVhcl9waWNrZXIpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyh5ZWFyU2VsZWN0LCBtRGF0ZVBpY2tlci5maW5kRm9jdXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIFZpZXcgeWVhclNlbGVjdCA9IG1EYXRlUGlja2VyLgorICAgICAgICAgICAgICAgICAgICAgICAgZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF0ZV9waWNrZXJfeWVhcl9waWNrZXIpOworICAgICAgICAgICAgICAgIGFzc2VydE5vdFNhbWUoVmlldy5WSVNJQkxFLCB5ZWFyU2VsZWN0LmdldFZpc2liaWxpdHkoKSk7CisgICAgICAgICAgICAgICAgVmlldyB5ZWFyID0gbURhdGVQaWNrZXIuCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5kYXRlX3BpY2tlcl9oZWFkZXJfeWVhcik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh5ZWFyLmhhc0ZvY3VzKCkpOworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDE0LCBtRGF0ZVBpY2tlci5nZXRZZWFyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXJyb3dUaHJvdWdoRGF5cygpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBzZXRLbm93bkRhdGUoKTsKKyAgICAgICAgcnVuVGVzdE9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgVmlldyBwcmV2ID0gbURhdGVQaWNrZXIuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubmV4dCk7CisgICAgICAgICAgICAgICAgcHJldi5yZXF1ZXN0Rm9jdXMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9UQUIpOworICAgICAgICAvLyBTaG91bGQgc2VsZWN0IHRoZSBjdXJyZW50IGRhdGUgYW5kIHRoZSBkYXRlIHNob3VsZG4ndCBjaGFuZ2UKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEyLCAzMSwgMjAxNSk7CisgICAgICAgIC8vIE1vdmUgcmlnaHQgdG8gSmFudWFyeSAyNCwgMjAxNgorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9SSUdIVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxLCAyNCwgMjAxNik7CisgICAgICAgIC8vIE1vdmUgZG93biB0byBKYW51YXJ5IDMxLCAyMDE2CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnREYXRlSXMoMSwgMzEsIDIwMTYpOworICAgICAgICAvLyBNb3ZlIHVwIHRvIEphbnVhcnkgNSwgMjAxNgorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1VQKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9VUCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1JJR0hUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfUklHSFQpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnREYXRlSXMoMSwgNSwgMjAxNik7CisgICAgICAgIC8vIE1vdmUgdXAgdG8gcHJldiBhcnJvdyBrZXkKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApOworICAgICAgICBhc3NlcnRWaWV3SGFzRm9jdXMoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5wcmV2KTsKKyAgICAgICAgLy8gdGFiIGJhY2sgaW50byB0aGUgZGF5LXNlbGVjdGlvbiBwYWdlcgorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfVEFCKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX1RBQik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydFZpZXdIYXNGb2N1cyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmRheV9waWNrZXJfdmlld19wYWdlcik7CisgICAgICAgIGFzc2VydERhdGVJcygxLCA1LCAyMDE2KTsKKworICAgICAgICAvLyBNb3ZlIHVwIG91dCBhZ2FpbiwgdGhlbiBkb3duIGJhY2sgaW50byB0aGUgZGF5LXNlbGVjdGlvbiBwYWdlci4KKyAgICAgICAgLy8gSXQgc2hvdWxkIGxhbmQgcmlnaHQgYmVsb3cgdGhlIHByZXYgYnV0dG9uICgxLzMvMjAxNikKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfVVApOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9ET1dOKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0Vmlld0hhc0ZvY3VzKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZGF5X3BpY2tlcl92aWV3X3BhZ2VyKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEsIDMsIDIwMTYpOworCisgICAgICAgIC8vIE1vdmUgbGVmdCB0byBwcmV2aW91cyBtb250aCAoMTIvMTIvMjAxNSkKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfTEVGVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxMiwgMTIsIDIwMTUpOworICAgICAgICAvLyBOb3cgbWFrZSBzdXJlIHRoZSBzdGFydCBvZiB0aGUgbW9udGggd29ya3MKKyAgICAgICAgLy8gTW92ZSB1cCB0byAxMi81LzIwMTUgYW5kIHJpZ2h0IHRvIDEvMS8yMDE2CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX1VQKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfUklHSFQpOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRU5URVIpOworICAgICAgICBhc3NlcnREYXRlSXMoMSwgMSwgMjAxNik7CisgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhlIGxlZnQga2V5IGdvZXMgYmFjayB0byBwcmV2aW91cyBtb250aCAoMTIvNS8yMDE1KQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9MRUZUKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0VOVEVSKTsKKyAgICAgICAgYXNzZXJ0RGF0ZUlzKDEyLCA1LCAyMDE1KTsKKyAgICAgICAgLy8gTm93IGdvIHRvIGEgbWlzbWF0Y2hlZCByb3cgKG5vIHN1Y2ggcm93IG9uIHByZXZpb3VzIG1vbnRoKQorICAgICAgICAvLyBUaGlzIG1vdmVzIG92ZXIgdG8gMS8zMS8yMDE2IGFuZCB0aGVuIGxlZnQgdG8gMTIvMzEvMjAxNQorICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9ET1dOKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfRE9XTik7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9SSUdIVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9EUEFEX0RPV04pOworICAgICAgICBzZW5kS2V5KEtleUV2ZW50LktFWUNPREVfRFBBRF9ET1dOKTsKKyAgICAgICAgc2VuZEtleShLZXlFdmVudC5LRVlDT0RFX0RQQURfTEVGVCk7CisgICAgICAgIHNlbmRLZXkoS2V5RXZlbnQuS0VZQ09ERV9FTlRFUik7CisgICAgICAgIGFzc2VydERhdGVJcygxMiwgMzEsIDIwMTUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhc3NlcnREYXRlSXMoaW50IG1vbnRoLCBmaW5hbCBpbnQgZGF5LCBmaW5hbCBpbnQgeWVhcikgdGhyb3dzIFRocm93YWJsZSB7CisgICAgICAgIGZpbmFsIGludCBtb250aEludCA9IG1vbnRoIC0gMTsgLy8gbW9udGhzIGFyZSAwLWJhc2VkCisgICAgICAgIHJ1blRlc3RPblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhkYXksIG1EYXRlUGlja2VyLmdldERheU9mTW9udGgoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHllYXIsIG1EYXRlUGlja2VyLmdldFllYXIoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKG1vbnRoSW50LCBtRGF0ZVBpY2tlci5nZXRNb250aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEtub3duRGF0ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICBydW5UZXN0T25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBtRGF0ZVBpY2tlci51cGRhdGVEYXRlKDIwMTUsIDExLCAzMSk7IC8vIERlY2VtYmVyIDMxLCAyMDE1CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtSW5zdHJ1bWVudGF0aW9uLndhaXRGb3JJZGxlU3luYygpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9UZXh0Vmlld0FjdGl2aXR5TW91c2VUZXN0LmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvVGV4dFZpZXdBY3Rpdml0eU1vdXNlVGVzdC5qYXZhCmluZGV4IGRkYmRjODcuLmFmZDBiYzQgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9UZXh0Vmlld0FjdGl2aXR5TW91c2VUZXN0LmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3QWN0aXZpdHlNb3VzZVRlc3QuamF2YQpAQCAtMTYsMjEgKzE2LDM1IEBACiAKIHBhY2thZ2UgYW5kcm9pZC53aWRnZXQ7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uRHJhZ0hhbmRsZVV0aWxzLmFzc2VydE5vU2VsZWN0aW9uSGFuZGxlczsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uRHJhZ0hhbmRsZVV0aWxzLm9uSGFuZGxlVmlldzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBY3Rpb25zLm1vdXNlQ2xpY2tPblRleHRBdEluZGV4OwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5UZXh0Vmlld0FjdGlvbnMubW91c2VEb3VibGVDbGlja09uVGV4dEF0SW5kZXg7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLlRleHRWaWV3QWN0aW9ucy5tb3VzZUxvbmdDbGlja09uVGV4dEF0SW5kZXg7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLlRleHRWaWV3QWN0aW9ucy5tb3VzZURvdWJsZUNsaWNrQW5kRHJhZ09uVGV4dDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBY3Rpb25zLm1vdXNlRHJhZ09uVGV4dDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBY3Rpb25zLm1vdXNlTG9uZ0NsaWNrQW5kRHJhZ09uVGV4dDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBY3Rpb25zLm1vdXNlVHJpcGxlQ2xpY2tBbmREcmFnT25UZXh0OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5UZXh0Vmlld0FjdGlvbnMubW91c2VUcmlwbGVDbGlja09uVGV4dEF0SW5kZXg7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLlRleHRWaWV3QXNzZXJ0aW9ucy5oYXNJbnNlcnRpb25Qb2ludGVyQXRJbmRleDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBc3NlcnRpb25zLmhhc1NlbGVjdGlvbjsKKwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5Fc3ByZXNzby5vblZpZXc7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLkVzcHJlc3NvLnByZXNzQmFjazsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYWN0aW9uLlZpZXdBY3Rpb25zLmNsaWNrOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uVmlld0FjdGlvbnMucmVwbGFjZVRleHQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFjdGlvbi5WaWV3QWN0aW9ucy50eXBlVGV4dEludG9Gb2N1c2VkVmlldzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYXNzZXJ0aW9uLlZpZXdBc3NlcnRpb25zLm1hdGNoZXM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmlzRGlzcGxheWVkOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy53aXRoSWQ7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cy5SOwogCitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uRXNwcmVzc287CiBpbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UyOwogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLkNvbnRleHRNZW51VXRpbHM7CiAKIC8qKgogICogVGVzdHMgbW91c2UgaW50ZXJhY3Rpb24gb2YgdGhlIFRleHRWaWV3IHdpZGdldCBmcm9tIGFuIEFjdGl2aXR5CkBAIC00MSwyMyArNTUsMzcgQEAKICAgICAgICAgc3VwZXIoVGV4dFZpZXdBY3Rpdml0eS5jbGFzcyk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB7CisgICAgICAgIGdldEFjdGl2aXR5KCk7CisgICAgfQorCiAgICAgQFNtYWxsVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlEcmFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldEFjdGl2aXR5KCk7Ci0KICAgICAgICAgZmluYWwgU3RyaW5nIGhlbGxvV29ybGQgPSAiSGVsbG8gd29ybGQhIjsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyhoZWxsb1dvcmxkKSk7CisKKyAgICAgICAgYXNzZXJ0Tm9TZWxlY3Rpb25IYW5kbGVzKCk7CisKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKICAgICAgICAgICAgICAgICBtb3VzZURyYWdPblRleHQoaGVsbG9Xb3JsZC5pbmRleE9mKCJsbG8iKSwgaGVsbG9Xb3JsZC5pbmRleE9mKCJsZCEiKSkpOwogCiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigibGxvIHdvciIpKTsKKworICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fc3RhcnRfaGFuZGxlKQorICAgICAgICAgICAgICAgIC5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX2VuZF9oYW5kbGUpCisgICAgICAgICAgICAgICAgLmNoZWNrKG1hdGNoZXMoaXNEaXNwbGF5ZWQoKSkpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0obW91c2VDbGlja09uVGV4dEF0SW5kZXgoaGVsbG9Xb3JsZC5pbmRleE9mKCJ3IikpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCIiKSk7CisKKyAgICAgICAgYXNzZXJ0Tm9TZWxlY3Rpb25IYW5kbGVzKCk7CiAgICAgfQogCiAgICAgQFNtYWxsVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlEcmFnX3JldmVyc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZ2V0QWN0aXZpdHkoKTsKLQogICAgICAgICBmaW5hbCBTdHJpbmcgaGVsbG9Xb3JsZCA9ICJIZWxsbyB3b3JsZCEiOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KGhlbGxvV29ybGQpKTsKQEAgLTY4LDkgKzk2LDU2IEBACiAgICAgfQogCiAgICAgQFNtYWxsVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlMb25nQ2xpY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgZ2V0QWN0aXZpdHkoKTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29udGV4dE1lbnUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiYWJjIGRlZiBnaGkuIjsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CiAKKyAgICAgICAgQ29udGV4dE1lbnVVdGlscy5hc3NlcnRDb250ZXh0TWVudUlzTm90RGlzcGxheWVkKCk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKKyAgICAgICAgICAgICAgICBtb3VzZUNsaWNrT25UZXh0QXRJbmRleCh0ZXh0LmluZGV4T2YoImQiKSwgTW90aW9uRXZlbnQuQlVUVE9OX1NFQ09OREFSWSkpOworCisgICAgICAgIENvbnRleHRNZW51VXRpbHMuYXNzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1EaXNhYmxlZCgKKyAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jb3B5KSk7CisgICAgICAgIENvbnRleHRNZW51VXRpbHMuYXNzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1FbmFibGVkKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnVuZG8pKTsKKworICAgICAgICAvLyBIaWRlIGNvbnRleHQgbWVudS4KKyAgICAgICAgcHJlc3NCYWNrKCk7CisgICAgICAgIENvbnRleHRNZW51VXRpbHMuYXNzZXJ0Q29udGV4dE1lbnVJc05vdERpc3BsYXllZCgpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oCisgICAgICAgICAgICAgICAgbW91c2VEcmFnT25UZXh0KHRleHQuaW5kZXhPZigiYyIpLCB0ZXh0LmluZGV4T2YoImgiKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAorICAgICAgICAgICAgICAgIG1vdXNlQ2xpY2tPblRleHRBdEluZGV4KHRleHQuaW5kZXhPZigiZCIpLCBNb3Rpb25FdmVudC5CVVRUT05fU0VDT05EQVJZKSk7CisKKyAgICAgICAgQ29udGV4dE1lbnVVdGlscy5hc3NlcnRDb250ZXh0TWVudUNvbnRhaW5zSXRlbUVuYWJsZWQoCisgICAgICAgICAgICAgICAgZ2V0QWN0aXZpdHkoKS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29weSkpOworICAgICAgICBDb250ZXh0TWVudVV0aWxzLmFzc2VydENvbnRleHRNZW51Q29udGFpbnNJdGVtRW5hYmxlZCgKKyAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy51bmRvKSk7CisKKyAgICAgICAgLy8gSGlkZSBjb250ZXh0IG1lbnUuCisgICAgICAgIHByZXNzQmFjaygpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiYyBkZWYgZyIpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAorICAgICAgICAgICAgICAgIG1vdXNlQ2xpY2tPblRleHRBdEluZGV4KHRleHQuaW5kZXhPZigiaSIpLCBNb3Rpb25FdmVudC5CVVRUT05fU0VDT05EQVJZKSk7CisgICAgICAgIENvbnRleHRNZW51VXRpbHMuYXNzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1EaXNhYmxlZCgKKyAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jb3B5KSk7CisgICAgICAgIENvbnRleHRNZW51VXRpbHMuYXNzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1FbmFibGVkKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnVuZG8pKTsKKworICAgICAgICAvLyBIaWRlIGNvbnRleHQgbWVudS4KKyAgICAgICAgcHJlc3NCYWNrKCk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCIiKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc0luc2VydGlvblBvaW50ZXJBdEluZGV4KHRleHQuaW5kZXhPZigiaSIpKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlMb25nQ2xpY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3RyaW5nIGhlbGxvV29ybGQgPSAiSGVsbG8gd29ybGQhIjsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyhoZWxsb1dvcmxkKSk7CkBAIC04OSwxMiArMTY0LDEzIEBACiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0obW91c2VMb25nQ2xpY2tPblRleHRBdEluZGV4KAogICAgICAgICAgICAgICAgIGhlbGxvV29ybGQuaW5kZXhPZigicmxkIikpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCJ3b3JsZCIpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKG1vdXNlTG9uZ0NsaWNrT25UZXh0QXRJbmRleChoZWxsb1dvcmxkLmxlbmd0aCgpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiISIpKTsKICAgICB9CiAKICAgICBAU21hbGxUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFNlbGVjdFRleHRCeURvdWJsZUNsaWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldEFjdGl2aXR5KCk7Ci0KICAgICAgICAgZmluYWwgU3RyaW5nIGhlbGxvV29ybGQgPSAiSGVsbG8gd29ybGQhIjsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyhoZWxsb1dvcmxkKSk7CkBAIC0xMTMsMTIgKzE4OSwxMyBAQAogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKG1vdXNlRG91YmxlQ2xpY2tPblRleHRBdEluZGV4KAogICAgICAgICAgICAgICAgIGhlbGxvV29ybGQuaW5kZXhPZigicmxkIikpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCJ3b3JsZCIpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKG1vdXNlRG91YmxlQ2xpY2tPblRleHRBdEluZGV4KGhlbGxvV29ybGQubGVuZ3RoKCkpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCIhIikpOwogICAgIH0KIAogICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0VGV4dEJ5RG91YmxlQ2xpY2tBbmREcmFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldEFjdGl2aXR5KCk7Ci0KICAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiYWJjZCBlZmcgaGlqayBsbW4iOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KHRleHQpKTsKQEAgLTEzMCw4ICsyMDcsNiBAQAogCiAgICAgQFNtYWxsVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlEb3VibGVDbGlja0FuZERyYWdfcmV2ZXJzZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBnZXRBY3Rpdml0eSgpOwotCiAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImFiY2QgZWZnIGhpamsgbG1uIjsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CkBAIC0xNDMsOCArMjE4LDYgQEAKIAogICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0VGV4dEJ5TG9uZ1ByZXNzQW5kRHJhZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBnZXRBY3Rpdml0eSgpOwotCiAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImFiY2QgZWZnIGhpamsgbG1uIjsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CkBAIC0xNTYsOCArMjI5LDYgQEAKIAogICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0VGV4dEJ5TG9uZ1ByZXNzQW5kRHJhZ19yZXZlcnNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGdldEFjdGl2aXR5KCk7Ci0KICAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiYWJjZCBlZmcgaGlqayBsbW4iOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KHRleHQpKTsKQEAgLTE2Niw0ICsyMzcsOTYgQEAKICAgICAgICAgICAgICAgICBtb3VzZUxvbmdDbGlja0FuZERyYWdPblRleHQodGV4dC5pbmRleE9mKCJqIiksIHRleHQuaW5kZXhPZigiZiIpKSk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiZWZnIGhpamsiKSk7CiAgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlUcmlwbGVDbGljaygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiRmlyc3QgcGFyYWdyYXBoLlxuIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJTZWNvbmQgcGFyYWdyYXBoLiIpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgVGhpcyBwYXJhZ3JhcGggaXMgdmVyeSBsb25nLiIpOworICAgICAgICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiVGhpcmQgcGFyYWdyYXBoLiIpOworICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHJlcGxhY2VUZXh0KHRleHQpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAorICAgICAgICAgICAgICAgIG1vdXNlVHJpcGxlQ2xpY2tPblRleHRBdEluZGV4KHRleHQuaW5kZXhPZigicnN0IikpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCJGaXJzdCBwYXJhZ3JhcGguXG4iKSk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKKyAgICAgICAgICAgICAgICBtb3VzZVRyaXBsZUNsaWNrT25UZXh0QXRJbmRleCh0ZXh0LmluZGV4T2YoImNvbmQiKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oCisgICAgICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCJTZWNvbmQiKSwgdGV4dC5pbmRleE9mKCJUaGlyZCIpKSkpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oCisgICAgICAgICAgICAgICAgbW91c2VUcmlwbGVDbGlja09uVGV4dEF0SW5kZXgodGV4dC5pbmRleE9mKCJpcmQiKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oIlRoaXJkIHBhcmFncmFwaC4iKSk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKKyAgICAgICAgICAgICAgICBtb3VzZVRyaXBsZUNsaWNrT25UZXh0QXRJbmRleCh0ZXh0LmluZGV4T2YoInZlcnkgbG9uZyIpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigKKyAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoIlNlY29uZCIpLCB0ZXh0LmluZGV4T2YoIlRoaXJkIikpKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3RUZXh0QnlUcmlwbGVDbGlja0FuZERyYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIkZpcnN0IHBhcmFncmFwaC5cbiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU2Vjb25kIHBhcmFncmFwaC4iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIFRoaXMgcGFyYWdyYXBoIGlzIHZlcnkgbG9uZy4iKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlRoaXJkIHBhcmFncmFwaC4iKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShyZXBsYWNlVGV4dCh0ZXh0KSk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKKyAgICAgICAgICAgICAgICBtb3VzZVRyaXBsZUNsaWNrQW5kRHJhZ09uVGV4dCh0ZXh0LmluZGV4T2YoImlyc3QiKSwgdGV4dC5pbmRleE9mKCJzdCIpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiRmlyc3QgcGFyYWdyYXBoLlxuIikpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oCisgICAgICAgICAgICAgICAgbW91c2VUcmlwbGVDbGlja0FuZERyYWdPblRleHQodGV4dC5pbmRleE9mKCJjb25kIiksIHRleHQuaW5kZXhPZigiVGhpcmQiKSAtIDIpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKAorICAgICAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZigiU2Vjb25kIiksIHRleHQuaW5kZXhPZigiVGhpcmQiKSkpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAorICAgICAgICAgICAgICAgIG1vdXNlVHJpcGxlQ2xpY2tBbmREcmFnT25UZXh0KHRleHQuaW5kZXhPZigiRmlyc3QiKSwgdGV4dC5pbmRleE9mKCJpcmQiKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24odGV4dCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0VGV4dEJ5VHJpcGxlQ2xpY2tBbmREcmFnX3JldmVyc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIkZpcnN0IHBhcmFncmFwaC5cbiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU2Vjb25kIHBhcmFncmFwaC4iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIFRoaXMgcGFyYWdyYXBoIGlzIHZlcnkgbG9uZy4iKTsKKyAgICAgICAgfQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlRoaXJkIHBhcmFncmFwaC4iKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShyZXBsYWNlVGV4dCh0ZXh0KSk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSgKKyAgICAgICAgICAgICAgICBtb3VzZVRyaXBsZUNsaWNrQW5kRHJhZ09uVGV4dCh0ZXh0LmluZGV4T2YoInN0IiksIHRleHQuaW5kZXhPZigiaXJzdCIpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiRmlyc3QgcGFyYWdyYXBoLlxuIikpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oCisgICAgICAgICAgICAgICAgbW91c2VUcmlwbGVDbGlja0FuZERyYWdPblRleHQodGV4dC5pbmRleE9mKCJUaGlyZCIpIC0gMiwgdGV4dC5pbmRleE9mKCJjb25kIikpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKAorICAgICAgICAgICAgICAgIHRleHQuc3Vic3RyaW5nKHRleHQuaW5kZXhPZigiU2Vjb25kIiksIHRleHQuaW5kZXhPZigiVGhpcmQiKSkpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAorICAgICAgICAgICAgICAgIG1vdXNlVHJpcGxlQ2xpY2tBbmREcmFnT25UZXh0KHRleHQuaW5kZXhPZigiaXJkIiksIHRleHQuaW5kZXhPZigiRmlyc3QiKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24odGV4dCkpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9UZXh0Vmlld0FjdGl2aXR5VGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3QWN0aXZpdHlUZXN0LmphdmEKaW5kZXggNDYxNDUwNS4uZTU0NzIzZSAxMDA2NDQKLS0tIGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3QWN0aXZpdHlUZXN0LmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L1RleHRWaWV3QWN0aXZpdHlUZXN0LmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5EcmFnSGFuZGxlVXRpbHMuYXNzZXJ0Tm9TZWxlY3Rpb25IYW5kbGVzOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5EcmFnSGFuZGxlVXRpbHMub25IYW5kbGVWaWV3OwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5UZXh0Vmlld0FjdGlvbnMuY2xpY2tPblRleHRBdEluZGV4OwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5UZXh0Vmlld0FjdGlvbnMuZG91YmxlVGFwQW5kRHJhZ09uVGV4dDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uVGV4dFZpZXdBY3Rpb25zLmRvdWJsZUNsaWNrT25UZXh0QXRJbmRleDsKQEAgLTI2LDI0ICsyOCwyMiBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLndpZGdldC5lc3ByZXNzby5UZXh0Vmlld0Fzc2VydGlvbnMuaGFzSW5zZXJ0aW9uUG9pbnRlckF0SW5kZXg7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLlRleHRWaWV3QXNzZXJ0aW9ucy5oYXNTZWxlY3Rpb247CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLkZsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMuYXNzZXJ0RmxvYXRpbmdUb29sYmFySXNEaXNwbGF5ZWQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLkZsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMuYXNzZXJ0RmxvYXRpbmdUb29sYmFySXNOb3REaXNwbGF5ZWQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLkZsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMuc2xlZXBGb3JGbG9hdGluZ1Rvb2xiYXJQb3B1cDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC53aWRnZXQuZXNwcmVzc28uRmxvYXRpbmdUb29sYmFyRXNwcmVzc29VdGlscy5hc3NlcnRGbG9hdGluZ1Rvb2xiYXJDb250YWluc0l0ZW07CitpbXBvcnQgc3RhdGljIGFuZHJvaWQud2lkZ2V0LmVzcHJlc3NvLkZsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMuYXNzZXJ0RmxvYXRpbmdUb29sYmFyRG9lc05vdENvbnRhaW5JdGVtOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5Fc3ByZXNzby5vblZpZXc7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFjdGlvbi5WaWV3QWN0aW9ucy5jbGljazsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYWN0aW9uLlZpZXdBY3Rpb25zLnByZXNzS2V5OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uVmlld0FjdGlvbnMucmVwbGFjZVRleHQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFjdGlvbi5WaWV3QWN0aW9ucy50eXBlVGV4dEludG9Gb2N1c2VkVmlldzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYXNzZXJ0aW9uLlZpZXdBc3NlcnRpb25zLm1hdGNoZXM7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuUm9vdE1hdGNoZXJzLndpdGhEZWNvclZpZXc7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmhhc0Rlc2NlbmRhbnQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmlzQXNzaWduYWJsZUZyb207CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmlzRGlzcGxheWVkOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy53aXRoSWQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLndpdGhUZXh0OwotaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuYWxsT2Y7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5mcmFtZXdvcmtzLmNvcmV0ZXN0cy5SOwogCi1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uTm9NYXRjaGluZ1ZpZXdFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uVmlld0ludGVyYWN0aW9uOwogaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlMjsKIGltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKQEAgLTE1MywxOSArMTUzLDExNSBAQAogCiAgICAgQFNtYWxsVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RUb29sYmFyQXBwZWFyc0FmdGVyU2VsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIEl0J2xsIGJlIG5pY2UgdG8gY2hlY2sgdGhhdCB0aGUgdG9vbGJhciBpcyBub3QgdmlzaWJsZSAob3IgZG9lcyBub3QgZXhpc3QpIGhlcmUKLSAgICAgICAgLy8gSSBjYW4ndCBjdXJyZW50bHkgZmluZCBhIHdheSB0byBkbyB0aGlzLiBJJ2xsIGdldCB0byBpdCBsYXRlci4KLQogICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9ICJUb29sYmFyIGFwcGVhcnMgYWZ0ZXIgc2VsZWN0aW9uLiI7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oY2xpY2soKSk7CisgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhcklzTm90RGlzcGxheWVkKCk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0odHlwZVRleHRJbnRvRm9jdXNlZFZpZXcodGV4dCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKAogICAgICAgICAgICAgICAgIGxvbmdQcmVzc09uVGV4dEF0SW5kZXgodGV4dC5pbmRleE9mKCJhcHBlYXJzIikpKTsKIAotICAgICAgICAvLyBJdCB0YWtlcyB0aGUgdG9vbGJhciBsZXNzIHRoYW4gMTAwbXMgdG8gc3RhcnQgdG8gYW5pbWF0ZSBpbnRvIHNjcmVlbi4KLSAgICAgICAgLy8gSWRlYWxseSwgd2UnbGwgd2FpdCB1c2luZyB0aGUgVWlDb250cm9sbGVyLCBidXQgSSBndWVzcyB0aGlzIHdvcmtzIGZvciBub3cuCi0gICAgICAgIFRocmVhZC5zbGVlcCgxMDApOwotICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJJc0Rpc3BsYXllZChnZXRBY3Rpdml0eSgpKTsKKyAgICAgICAgc2xlZXBGb3JGbG9hdGluZ1Rvb2xiYXJQb3B1cCgpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJJc0Rpc3BsYXllZCgpOworCisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0MiA9ICJUb29sYmFyIGRpc2FwcGVhcnMgYWZ0ZXIgdHlwaW5nIHRleHQuIjsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0MikpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJJc05vdERpc3BsYXllZCgpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VG9vbGJhckFuZEluc2VydGlvbkhhbmRsZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9ICJ0ZXh0IjsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oY2xpY2tPblRleHRBdEluZGV4KHRleHQubGVuZ3RoKCkpKTsKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFySXNOb3REaXNwbGF5ZWQoKTsKKworICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5pbnNlcnRpb25faGFuZGxlKS5wZXJmb3JtKGNsaWNrKCkpOworICAgICAgICBzbGVlcEZvckZsb2F0aW5nVG9vbGJhclBvcHVwKCk7CisgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhcklzRGlzcGxheWVkKCk7CisKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLnNlbGVjdEFsbCkpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJEb2VzTm90Q29udGFpbkl0ZW0oCisgICAgICAgICAgICAgICAgZ2V0QWN0aXZpdHkoKS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29weSkpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJEb2VzTm90Q29udGFpbkl0ZW0oCisgICAgICAgICAgICAgICAgZ2V0QWN0aXZpdHkoKS5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY3V0KSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RUb29sYmFyQW5kU2VsZWN0aW9uSGFuZGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImFiY2QgZWZnIGhpamsiOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KHRleHQpKTsKKworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGxvbmdQcmVzc09uVGV4dEF0SW5kZXgodGV4dC5pbmRleE9mKCJmIikpKTsKKyAgICAgICAgc2xlZXBGb3JGbG9hdGluZ1Rvb2xiYXJQb3B1cCgpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJJc0Rpc3BsYXllZCgpOworCisgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhckNvbnRhaW5zSXRlbSgKKyAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5zZWxlY3RBbGwpKTsKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmNvcHkpKTsKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmN1dCkpOworCisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KSBnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX3N0YXJ0X2hhbmRsZSkKKyAgICAgICAgICAgICAgICAucGVyZm9ybShkcmFnSGFuZGxlKHRleHRWaWV3LCBIYW5kbGUuU0VMRUNUSU9OX1NUQVJULCB0ZXh0LmluZGV4T2YoJ2EnKSkpOworICAgICAgICBzbGVlcEZvckZsb2F0aW5nVG9vbGJhclBvcHVwKCk7CisgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhcklzRGlzcGxheWVkKCk7CisKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX2VuZF9oYW5kbGUpCisgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLlNFTEVDVElPTl9FTkQsIHRleHQubGVuZ3RoKCkpKTsKKyAgICAgICAgc2xlZXBGb3JGbG9hdGluZ1Rvb2xiYXJQb3B1cCgpOworICAgICAgICBhc3NlcnRGbG9hdGluZ1Rvb2xiYXJJc0Rpc3BsYXllZCgpOworCisgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhckRvZXNOb3RDb250YWluSXRlbSgKKyAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5zZWxlY3RBbGwpKTsKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmNvcHkpKTsKKyAgICAgICAgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKAorICAgICAgICAgICAgICAgIGdldEFjdGl2aXR5KCkuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmN1dCkpOworICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0aW9uSGFuZGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImFiY2QgZWZnIGhpamsgIjsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGljaygpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CisKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGlja09uVGV4dEF0SW5kZXgodGV4dC5sZW5ndGgoKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNJbnNlcnRpb25Qb2ludGVyQXRJbmRleCh0ZXh0Lmxlbmd0aCgpKSk7CisKKyAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIGdldEFjdGl2aXR5KCkuZmluZFZpZXdCeUlkKFIuaWQudGV4dHZpZXcpOworCisgICAgICAgIG9uSGFuZGxlVmlldyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmluc2VydGlvbl9oYW5kbGUpCisgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLklOU0VSVElPTiwgdGV4dC5pbmRleE9mKCdhJykpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzSW5zZXJ0aW9uUG9pbnRlckF0SW5kZXgodGV4dC5pbmRleE9mKCJhIikpKTsKKworICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5pbnNlcnRpb25faGFuZGxlKQorICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5JTlNFUlRJT04sIHRleHQuaW5kZXhPZignZicpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc0luc2VydGlvblBvaW50ZXJBdEluZGV4KHRleHQuaW5kZXhPZigiZiIpKSk7CisgICAgfQorCisgICAgQFNtYWxsVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RJbnNlcnRpb25IYW5kbGVfbXVsdGlMaW5lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gImFiY2RcbiIgKyAiZWZnXG4iICsgImhpamtcbiI7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oY2xpY2soKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0odHlwZVRleHRJbnRvRm9jdXNlZFZpZXcodGV4dCkpOworCisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oY2xpY2tPblRleHRBdEluZGV4KHRleHQubGVuZ3RoKCkpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzSW5zZXJ0aW9uUG9pbnRlckF0SW5kZXgodGV4dC5sZW5ndGgoKSkpOworCisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KSBnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKKworICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5pbnNlcnRpb25faGFuZGxlKQorICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5JTlNFUlRJT04sIHRleHQuaW5kZXhPZignYScpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc0luc2VydGlvblBvaW50ZXJBdEluZGV4KHRleHQuaW5kZXhPZigiYSIpKSk7CisKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuaW5zZXJ0aW9uX2hhbmRsZSkKKyAgICAgICAgICAgICAgICAucGVyZm9ybShkcmFnSGFuZGxlKHRleHRWaWV3LCBIYW5kbGUuSU5TRVJUSU9OLCB0ZXh0LmluZGV4T2YoJ2YnKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNJbnNlcnRpb25Qb2ludGVyQXRJbmRleCh0ZXh0LmluZGV4T2YoImYiKSkpOwogICAgIH0KIAogICAgIEBTbWFsbFRlc3QKQEAgLTE4Myw3ICsyNzksNyBAQAogICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fZW5kX2hhbmRsZSkKICAgICAgICAgICAgICAgICAuY2hlY2sobWF0Y2hlcyhpc0Rpc3BsYXllZCgpKSk7CiAKLSAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpZ2V0QWN0aXZpdHkoKS5maW5kVmlld0J5SWQoUi5pZC50ZXh0dmlldyk7CisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KSBnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKICAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX3N0YXJ0X2hhbmRsZSkKICAgICAgICAgICAgICAgICAucGVyZm9ybShkcmFnSGFuZGxlKHRleHRWaWV3LCBIYW5kbGUuU0VMRUNUSU9OX1NUQVJULCB0ZXh0LmluZGV4T2YoJ2EnKSkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oImFiY2QgZWZnIikpOwpAQCAtMjAwLDcgKzI5Niw3IEBACiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0odHlwZVRleHRJbnRvRm9jdXNlZFZpZXcodGV4dCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGRvdWJsZUNsaWNrT25UZXh0QXRJbmRleCh0ZXh0LmluZGV4T2YoJ2knKSkpOwogCi0gICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KWdldEFjdGl2aXR5KCkuZmluZFZpZXdCeUlkKFIuaWQudGV4dHZpZXcpOworICAgICAgICBmaW5hbCBUZXh0VmlldyB0ZXh0VmlldyA9IChUZXh0VmlldykgZ2V0QWN0aXZpdHkoKS5maW5kVmlld0J5SWQoUi5pZC50ZXh0dmlldyk7CiAgICAgICAgIG9uSGFuZGxlVmlldyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnNlbGVjdGlvbl9zdGFydF9oYW5kbGUpCiAgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLlNFTEVDVElPTl9TVEFSVCwgdGV4dC5pbmRleE9mKCdlJykpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKCJlZmdcbmhpamsiKSk7CkBAIC0yMTksMTMgKzMxNSw0NiBAQAogICAgIH0KIAogICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uSGFuZGxlc19tdWx0aUxpbmVfcnRsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIEFyYWJpYyB0ZXh0LgorICAgICAgICBmaW5hbCBTdHJpbmcgdGV4dCA9ICJcdTA2MkFcdTA2MkJcdTA2MkNcbiIgKyAiXHUwNjJEXHUwNjJFXHUwNjJGXG4iCisgICAgICAgICAgICAgICAgKyAiXHUwNjMwXHUwNjMxXHUwNjMyXG4iICsgIlx1MDYzM1x1MDYzNFx1MDYzNVxuIiArICJcdTA2MzZcdTA2MzdcdTA2MzhcbiIKKyAgICAgICAgICAgICAgICArICJcdTA2MzlcdTA2M0FcdTA2M0IiOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHJlcGxhY2VUZXh0KHRleHQpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShjbGlja09uVGV4dEF0SW5kZXgodGV4dC5sZW5ndGgoKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGRvdWJsZUNsaWNrT25UZXh0QXRJbmRleCh0ZXh0LmluZGV4T2YoJ1x1MDYzNCcpKSk7CisKKyAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpZ2V0QWN0aXZpdHkoKS5maW5kVmlld0J5SWQoUi5pZC50ZXh0dmlldyk7CisgICAgICAgIG9uSGFuZGxlVmlldyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnNlbGVjdGlvbl9zdGFydF9oYW5kbGUpCisgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLlNFTEVDVElPTl9TVEFSVCwgdGV4dC5pbmRleE9mKCdcdTA2MkUnKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oCisgICAgICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCdcdTA2MkQnKSwgdGV4dC5pbmRleE9mKCdcdTA2MzUnKSArIDEpKSk7CisKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX3N0YXJ0X2hhbmRsZSkKKyAgICAgICAgICAgICAgICAucGVyZm9ybShkcmFnSGFuZGxlKHRleHRWaWV3LCBIYW5kbGUuU0VMRUNUSU9OX1NUQVJULCB0ZXh0LmluZGV4T2YoJ1x1MDYyQScpKSk7CisgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigKKyAgICAgICAgICAgICAgICB0ZXh0LnN1YnN0cmluZyh0ZXh0LmluZGV4T2YoJ1x1MDYyQScpLCB0ZXh0LmluZGV4T2YoJ1x1MDYzNScpICsgMSkpKTsKKworICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fZW5kX2hhbmRsZSkKKyAgICAgICAgICAgICAgICAucGVyZm9ybShkcmFnSGFuZGxlKHRleHRWaWV3LCBIYW5kbGUuU0VMRUNUSU9OX0VORCwgdGV4dC5pbmRleE9mKCdcdTA2MzgnKSkpOworICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oCisgICAgICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCdcdTA2MkEnKSwgdGV4dC5pbmRleE9mKCdcdTA2MzgnKSArIDEpKSk7CisKKyAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX2VuZF9oYW5kbGUpCisgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLlNFTEVDVElPTl9FTkQsIHRleHQuaW5kZXhPZignXHUwNjNCJykpKTsKKyAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkuY2hlY2soaGFzU2VsZWN0aW9uKHRleHQpKTsKKyAgICB9CisKKworICAgIEBTbWFsbFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uSGFuZGxlc19kb2VzTm90UGFzc0Fub3RoZXJIYW5kbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSAiYWJjZCBlZmcgaGlqayBsbW4iOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKGNsaWNrKCkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KHRleHQpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShkb3VibGVDbGlja09uVGV4dEF0SW5kZXgodGV4dC5pbmRleE9mKCdmJykpKTsKIAotICAgICAgICBmaW5hbCBUZXh0VmlldyB0ZXh0VmlldyA9IChUZXh0VmlldylnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKKyAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIGdldEFjdGl2aXR5KCkuZmluZFZpZXdCeUlkKFIuaWQudGV4dHZpZXcpOwogICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fc3RhcnRfaGFuZGxlKQogICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5TRUxFQ1RJT05fU1RBUlQsIHRleHQuaW5kZXhPZignbCcpKSk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiZyIpKTsKQEAgLTI0Myw3ICszNzIsNyBAQAogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5wZXJmb3JtKHR5cGVUZXh0SW50b0ZvY3VzZWRWaWV3KHRleHQpKTsKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybShkb3VibGVDbGlja09uVGV4dEF0SW5kZXgodGV4dC5pbmRleE9mKCdpJykpKTsKIAotICAgICAgICBmaW5hbCBUZXh0VmlldyB0ZXh0VmlldyA9IChUZXh0VmlldylnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKKyAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpIGdldEFjdGl2aXR5KCkuZmluZFZpZXdCeUlkKFIuaWQudGV4dHZpZXcpOwogICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fc3RhcnRfaGFuZGxlKQogICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5TRUxFQ1RJT05fU1RBUlQsIHRleHQuaW5kZXhPZigncicpICsgMSkpOwogICAgICAgICBvblZpZXcod2l0aElkKFIuaWQudGV4dHZpZXcpKS5jaGVjayhoYXNTZWxlY3Rpb24oImsiKSk7CkBAIC0yNjEsNyArMzkwLDcgQEAKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oZG91YmxlQ2xpY2tPblRleHRBdEluZGV4KHRleHQuaW5kZXhPZignaScpKSk7CiAKLSAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpZ2V0QWN0aXZpdHkoKS5maW5kVmlld0J5SWQoUi5pZC50ZXh0dmlldyk7CisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KSBnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKIAogICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fc3RhcnRfaGFuZGxlKQogICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5TRUxFQ1RJT05fU1RBUlQsIHRleHQuaW5kZXhPZignZicpKSk7CkBAIC0zMTQsNyArNDQzLDcgQEAKICAgICAgICAgb25WaWV3KHdpdGhJZChSLmlkLnRleHR2aWV3KSkucGVyZm9ybSh0eXBlVGV4dEludG9Gb2N1c2VkVmlldyh0ZXh0KSk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLnBlcmZvcm0oZG91YmxlQ2xpY2tPblRleHRBdEluZGV4KHRleHQuaW5kZXhPZignbScpKSk7CiAKLSAgICAgICAgZmluYWwgVGV4dFZpZXcgdGV4dFZpZXcgPSAoVGV4dFZpZXcpZ2V0QWN0aXZpdHkoKS5maW5kVmlld0J5SWQoUi5pZC50ZXh0dmlldyk7CisgICAgICAgIGZpbmFsIFRleHRWaWV3IHRleHRWaWV3ID0gKFRleHRWaWV3KSBnZXRBY3Rpdml0eSgpLmZpbmRWaWV3QnlJZChSLmlkLnRleHR2aWV3KTsKIAogICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fc3RhcnRfaGFuZGxlKQogICAgICAgICAgICAgICAgIC5wZXJmb3JtKGRyYWdIYW5kbGUodGV4dFZpZXcsIEhhbmRsZS5TRUxFQ1RJT05fU1RBUlQsIHRleHQuaW5kZXhPZignYycpKSk7CkBAIC0zNDIsMjUgKzQ3MSw0IEBACiAgICAgICAgICAgICAgICAgLnBlcmZvcm0oZHJhZ0hhbmRsZSh0ZXh0VmlldywgSGFuZGxlLlNFTEVDVElPTl9FTkQsIHRleHQuaW5kZXhPZignaScpKSk7CiAgICAgICAgIG9uVmlldyh3aXRoSWQoUi5pZC50ZXh0dmlldykpLmNoZWNrKGhhc1NlbGVjdGlvbigiaGlqayIpKTsKICAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydE5vU2VsZWN0aW9uSGFuZGxlcygpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG9uSGFuZGxlVmlldyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnNlbGVjdGlvbl9zdGFydF9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIC5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKLSAgICAgICAgfSBjYXRjaCAoTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb24gfCBOb01hdGNoaW5nVmlld0V4Y2VwdGlvbiB8IEFzc2VydGlvbkVycm9yIGUpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX2VuZF9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAuY2hlY2sobWF0Y2hlcyhpc0Rpc3BsYXllZCgpKSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOb01hdGNoaW5nUm9vdEV4Y2VwdGlvbiB8IE5vTWF0Y2hpbmdWaWV3RXhjZXB0aW9uIHwgQXNzZXJ0aW9uRXJyb3IgZTEpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJTZWxlY3Rpb24gaGFuZGxlIGZvdW5kIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVmlld0ludGVyYWN0aW9uIG9uSGFuZGxlVmlldyhpbnQgaWQpCi0gICAgICAgICAgICB0aHJvd3MgTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb24sIE5vTWF0Y2hpbmdWaWV3RXhjZXB0aW9uLCBBc3NlcnRpb25FcnJvciB7Ci0gICAgICAgIHJldHVybiBvblZpZXcoYWxsT2Yod2l0aElkKGlkKSwgaXNBc3NpZ25hYmxlRnJvbShFZGl0b3IuSGFuZGxlVmlldy5jbGFzcykpKQotICAgICAgICAgICAgICAgIC5pblJvb3Qod2l0aERlY29yVmlldyhoYXNEZXNjZW5kYW50KHdpdGhJZChpZCkpKSk7Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL0NvbnRleHRNZW51VXRpbHMuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9Db250ZXh0TWVudVV0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyMThhYQotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9Db250ZXh0TWVudVV0aWxzLmphdmEKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQuZXNwcmVzc287CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uRXNwcmVzc28ub25WaWV3OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hc3NlcnRpb24uVmlld0Fzc2VydGlvbnMubWF0Y2hlczsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5Sb290TWF0Y2hlcnMud2l0aERlY29yVmlldzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaGFzRGVzY2VuZGFudDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaGFzRm9jdXM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmlzQXNzaWduYWJsZUZyb207CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLmlzRGlzcGxheWVkOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy5pc0VuYWJsZWQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLndpdGhUZXh0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuYWxsT2Y7CitpbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5ub3Q7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC52aWV3Lm1lbnUuTGlzdE1lbnVJdGVtVmlldzsKKworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLk5vTWF0Y2hpbmdSb290RXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLk5vTWF0Y2hpbmdWaWV3RXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLlZpZXdJbnRlcmFjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVyczsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5NZW51UG9wdXBXaW5kb3cuTWVudURyb3BEb3duTGlzdFZpZXc7CisKKy8qKgorICogRXNwcmVzc28gdXRpbGl0eSBtZXRob2RzIGZvciB0aGUgY29udGV4dCBtZW51LgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQ29udGV4dE1lbnVVdGlscyB7CisgICAgcHJpdmF0ZSBDb250ZXh0TWVudVV0aWxzKCkge30KKworICAgIHByaXZhdGUgc3RhdGljIFZpZXdJbnRlcmFjdGlvbiBvbkNvbnRleHRNZW51KCkgeworICAgICAgICAvLyBUT0RPOiBIYXZlIG1vcmUgcmVsaWFibGUgd2F5IHRvIGdldCBjb250ZXh0IG1lbnUuCisgICAgICAgIHJldHVybiBvblZpZXcoVmlld01hdGNoZXJzLmlzQXNzaWduYWJsZUZyb20oTWVudURyb3BEb3duTGlzdFZpZXcuY2xhc3MpKQorICAgICAgICAgICAgICAgIC5pblJvb3Qod2l0aERlY29yVmlldyhoYXNGb2N1cygpKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzZXJ0cyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydENvbnRleHRNZW51SXNEaXNwbGF5ZWQoKSB7CisgICAgICAgIG9uQ29udGV4dE1lbnUoKS5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIGNvbnRleHQgbWVudSBpcyBub3QgZGlzcGxheWVkCisgICAgICoKKyAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0Q29udGV4dE1lbnVJc05vdERpc3BsYXllZCgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGFzc2VydENvbnRleHRNZW51SXNEaXNwbGF5ZWQoKTsKKyAgICAgICAgfSBjYXRjaCAoTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb24gfCBOb01hdGNoaW5nVmlld0V4Y2VwdGlvbiB8IEFzc2VydGlvbkVycm9yIGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkNvbnRleHQgbWVudSBpcyBkaXNwbGF5ZWQiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIGNvbnRleHQgbWVudSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGl0ZW0gYW5kIHRoZSBpdGVtIGhhcyBzcGVjaWZpZWQgZW5hYmxlZAorICAgICAqICBzdGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtTGFiZWwgbGFiZWwgb2YgdGhlIGl0ZW0uCisgICAgICogQHBhcmFtIGVuYWJsZWQgZW5hYmxlZCBzdGF0ZSBvZiB0aGUgaXRlbS4KKyAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc3NlcnRDb250ZXh0TWVudUNvbnRhaW5zSXRlbVdpdGhFbmFibGVkU3RhdGUoU3RyaW5nIGl0ZW1MYWJlbCwKKyAgICAgICAgICAgIGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBvbkNvbnRleHRNZW51KCkuY2hlY2sobWF0Y2hlcygKKyAgICAgICAgICAgICAgICBoYXNEZXNjZW5kYW50KGFsbE9mKAorICAgICAgICAgICAgICAgICAgICAgICAgaXNBc3NpZ25hYmxlRnJvbShMaXN0TWVudUl0ZW1WaWV3LmNsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgPyBpc0VuYWJsZWQoKSA6IG5vdChpc0VuYWJsZWQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXNjZW5kYW50KHdpdGhUZXh0KGl0ZW1MYWJlbCkpKSkpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIGNvbnRleHQgbWVudSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGl0ZW0gYW5kIHRoZSBpdGVtIGlzIGVuYWJsZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaXRlbUxhYmVsIGxhYmVsIG9mIHRoZSBpdGVtLgorICAgICAqIEB0aHJvd3MgQXNzZXJ0aW9uRXJyb3IgaWYgdGhlIGFzc2VydGlvbiBmYWlscworICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRDb250ZXh0TWVudUNvbnRhaW5zSXRlbUVuYWJsZWQoU3RyaW5nIGl0ZW1MYWJlbCkgeworICAgICAgICBhc3NzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1XaXRoRW5hYmxlZFN0YXRlKGl0ZW1MYWJlbCwgdHJ1ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzZXJ0cyB0aGF0IHRoZSBjb250ZXh0IG1lbnUgY29udGFpbnMgdGhlIHNwZWNpZmllZCBpdGVtIGFuZCB0aGUgaXRlbSBpcyBkaXNhYmxlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtTGFiZWwgbGFiZWwgb2YgdGhlIGl0ZW0uCisgICAgICogQHRocm93cyBBc3NlcnRpb25FcnJvciBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydENvbnRleHRNZW51Q29udGFpbnNJdGVtRGlzYWJsZWQoU3RyaW5nIGl0ZW1MYWJlbCkgeworICAgICAgICBhc3NzZXJ0Q29udGV4dE1lbnVDb250YWluc0l0ZW1XaXRoRW5hYmxlZFN0YXRlKGl0ZW1MYWJlbCwgZmFsc2UpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9EcmFnQWN0aW9uLmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vRHJhZ0FjdGlvbi5qYXZhCmluZGV4IGNlOTc1NjguLmIyYzhlMzggMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9EcmFnQWN0aW9uLmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL0RyYWdBY3Rpb24uamF2YQpAQCAtMTU3LDYgKzE1Nyw1OSBAQAogICAgICAgICB9LAogCiAgICAgICAgIC8qKgorICAgICAgICAgKiBTdGFydHMgYSBkcmFnIHdpdGggYSBtb3VzZSB0cmlwbGUgY2xpY2suCisgICAgICAgICAqLworICAgICAgICBNT1VTRV9UUklQTEVfQ0xJQ0sgeworICAgICAgICAgICAgcHJpdmF0ZSBEb3duTW90aW9uUGVyZm9ybWVyIGRvd25Nb3Rpb24gPSBuZXcgRG93bk1vdGlvblBlcmZvcm1lcigpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBATnVsbGFibGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgTW90aW9uRXZlbnQgcGVyZm9ybSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFVpQ29udHJvbGxlciB1aUNvbnRyb2xsZXIsIGZsb2F0W10gY29vcmRpbmF0ZXMsIGZsb2F0W10gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIE1vdGlvbkV2ZW50IGRvd25FdmVudCA9IE1vdGlvbkV2ZW50cy5zZW5kRG93bigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIsIGNvb3JkaW5hdGVzLCBwcmVjaXNpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRvd247CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTW90aW9uRXZlbnRzLnNlbmRVcCh1aUNvbnRyb2xsZXIsIGRvd25FdmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvZ01lc3NhZ2UgPSAiSW5qZWN0aW9uIG9mIHVwIGV2ZW50IGFzIHBhcnQgb2YgdGhlIHRyaXBsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiY2xpY2sgZmFpbGVkLiBTZW5kaW5nIGNhbmNlbCBldmVudC4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsIGxvZ01lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3Rpb25FdmVudHMuc2VuZENhbmNlbCh1aUNvbnRyb2xsZXIsIGRvd25FdmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlVGFwTWluaW11bVRpbWVvdXQgPSBWaWV3Q29uZmlndXJhdGlvbi5nZXREb3VibGVUYXBNaW5UaW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmxvb3BNYWluVGhyZWFkRm9yQXRMZWFzdChkb3VibGVUYXBNaW5pbXVtVGltZW91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25FdmVudC5yZWN5Y2xlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkb3duRXZlbnQgPSBNb3Rpb25FdmVudHMuc2VuZERvd24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlciwgY29vcmRpbmF0ZXMsIHByZWNpc2lvbikuZG93bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG93bkV2ZW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0YXR1cyBzZW5kU3dpcGUoCisgICAgICAgICAgICAgICAgICAgIFVpQ29udHJvbGxlciB1aUNvbnRyb2xsZXIsCisgICAgICAgICAgICAgICAgICAgIGZsb2F0W10gc3RhcnRDb29yZGluYXRlcywgZmxvYXRbXSBlbmRDb29yZGluYXRlcywgZmxvYXRbXSBwcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VuZExpbmVhckRyYWcoCisgICAgICAgICAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIsIGRvd25Nb3Rpb24sIHN0YXJ0Q29vcmRpbmF0ZXMsIGVuZENvb3JkaW5hdGVzLCBwcmVjaXNpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJtb3VzZSB0cmlwbGUgY2xpY2sgYW5kIGRyYWcgdG8gc2VsZWN0IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgVWlDb250cm9sbGVyIHdyYXBVaUNvbnRyb2xsZXIoVWlDb250cm9sbGVyIHVpQ29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW91c2VVaUNvbnRyb2xsZXIodWlDb250cm9sbGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvKioKICAgICAgICAgICogU3RhcnRzIGEgZHJhZyB3aXRoIGEgdGFwLgogICAgICAgICAgKi8KICAgICAgICAgVEFQIHsKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9EcmFnSGFuZGxlVXRpbHMuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9EcmFnSGFuZGxlVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzQ0Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL0RyYWdIYW5kbGVVdGlscy5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCisKK3BhY2thZ2UgYW5kcm9pZC53aWRnZXQuZXNwcmVzc287CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uRXNwcmVzc28ub25WaWV3OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hc3NlcnRpb24uVmlld0Fzc2VydGlvbnMubWF0Y2hlczsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5Sb290TWF0Y2hlcnMud2l0aERlY29yVmlldzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaGFzRGVzY2VuZGFudDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaXNBc3NpZ25hYmxlRnJvbTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaXNEaXNwbGF5ZWQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLndpdGhJZDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmFsbE9mOworCitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uTm9NYXRjaGluZ1ZpZXdFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uVmlld0ludGVyYWN0aW9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRvcjsKKworcHVibGljIGNsYXNzIERyYWdIYW5kbGVVdGlscyB7CisgICAgcHJpdmF0ZSBEcmFnSGFuZGxlVXRpbHMoKSB7CisKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0Tm9TZWxlY3Rpb25IYW5kbGVzKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgb25IYW5kbGVWaWV3KGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc2VsZWN0aW9uX3N0YXJ0X2hhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgLmNoZWNrKG1hdGNoZXMoaXNEaXNwbGF5ZWQoKSkpOworICAgICAgICB9IGNhdGNoIChOb01hdGNoaW5nUm9vdEV4Y2VwdGlvbiB8IE5vTWF0Y2hpbmdWaWV3RXhjZXB0aW9uIHwgQXNzZXJ0aW9uRXJyb3IgZSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvbkhhbmRsZVZpZXcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5zZWxlY3Rpb25fZW5kX2hhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE5vTWF0Y2hpbmdSb290RXhjZXB0aW9uIHwgTm9NYXRjaGluZ1ZpZXdFeGNlcHRpb24gfCBBc3NlcnRpb25FcnJvciBlMSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlNlbGVjdGlvbiBoYW5kbGUgZm91bmQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFZpZXdJbnRlcmFjdGlvbiBvbkhhbmRsZVZpZXcoaW50IGlkKQorICAgICAgICAgICAgdGhyb3dzIE5vTWF0Y2hpbmdSb290RXhjZXB0aW9uLCBOb01hdGNoaW5nVmlld0V4Y2VwdGlvbiwgQXNzZXJ0aW9uRXJyb3IgeworICAgICAgICByZXR1cm4gb25WaWV3KGFsbE9mKHdpdGhJZChpZCksIGlzQXNzaWduYWJsZUZyb20oRWRpdG9yLkhhbmRsZVZpZXcuY2xhc3MpKSkKKyAgICAgICAgICAgICAgICAuaW5Sb290KHdpdGhEZWNvclZpZXcoaGFzRGVzY2VuZGFudCh3aXRoSWQoaWQpKSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9GbG9hdGluZ1Rvb2xiYXJFc3ByZXNzb1V0aWxzLmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vRmxvYXRpbmdUb29sYmFyRXNwcmVzc29VdGlscy5qYXZhCmluZGV4IGZjMDFkODQuLmYwMmZlMDAgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9GbG9hdGluZ1Rvb2xiYXJFc3ByZXNzb1V0aWxzLmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL0Zsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMuamF2YQpAQCAtMTksMzEgKzE5LDEzMyBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5Fc3ByZXNzby5vblZpZXc7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFzc2VydGlvbi5WaWV3QXNzZXJ0aW9ucy5tYXRjaGVzOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlJvb3RNYXRjaGVycy53aXRoRGVjb3JWaWV3OworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy5oYXNEZXNjZW5kYW50OwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy5pc0Rpc3BsYXllZDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnMuaXNSb290OwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5tYXRjaGVyLlZpZXdNYXRjaGVycy53aXRoVGFnVmFsdWU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLm1hdGNoZXIuVmlld01hdGNoZXJzLndpdGhJZDsKK2ltcG9ydCBzdGF0aWMgb3JnLmhhbWNyZXN0Lk1hdGNoZXJzLmFsbE9mOwogaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuaXM7Ci1pbXBvcnQgc3RhdGljIG9yZy5oYW1jcmVzdC5NYXRjaGVycy5ub3Q7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKK2ltcG9ydCBvcmcuaGFtY3Jlc3QuTWF0Y2hlcjsKKworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLk5vTWF0Y2hpbmdSb290RXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLk5vTWF0Y2hpbmdWaWV3RXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLlVpQ29udHJvbGxlcjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5WaWV3QWN0aW9uOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLlZpZXdJbnRlcmFjdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uVmlld0FjdGlvbnM7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28ubWF0Y2hlci5WaWV3TWF0Y2hlcnM7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CisKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC53aWRnZXQuRmxvYXRpbmdUb29sYmFyOwogCiAvKioKICAqIEVzcHJlc3NvIHV0aWxpdHkgbWV0aG9kcyBmb3IgdGhlIGZsb2F0aW5nIHRvb2xiYXIuCiAgKi8KIHB1YmxpYyBjbGFzcyBGbG9hdGluZ1Rvb2xiYXJFc3ByZXNzb1V0aWxzIHsKLQorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIE9iamVjdCBUQUcgPSBGbG9hdGluZ1Rvb2xiYXIuRkxPQVRJTkdfVE9PTEJBUl9UQUc7CiAKICAgICBwcml2YXRlIEZsb2F0aW5nVG9vbGJhckVzcHJlc3NvVXRpbHMoKSB7fQogCisgICAgcHJpdmF0ZSBzdGF0aWMgVmlld0ludGVyYWN0aW9uIG9uRmxvYXRpbmdUb29sQmFyKCkgeworICAgICAgICByZXR1cm4gb25WaWV3KHdpdGhUYWdWYWx1ZShpcyhUQUcpKSkKKyAgICAgICAgICAgICAgICAuaW5Sb290KHdpdGhEZWNvclZpZXcoaGFzRGVzY2VuZGFudCh3aXRoVGFnVmFsdWUoaXMoVEFHKSkpKSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQXNzZXJ0cyB0aGF0IHRoZSBmbG9hdGluZyB0b29sYmFyIGlzIGRpc3BsYXllZCBvbiBzY3JlZW4uCiAgICAgICoKICAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RmxvYXRpbmdUb29sYmFySXNEaXNwbGF5ZWQoQWN0aXZpdHkgYWN0aXZpdHkpIHsKLSAgICAgICAgb25WaWV3KHdpdGhUYWdWYWx1ZShpcygoT2JqZWN0KSBGbG9hdGluZ1Rvb2xiYXIuRkxPQVRJTkdfVE9PTEJBUl9UQUcpKSkKLSAgICAgICAgICAgICAgICAuaW5Sb290KHdpdGhEZWNvclZpZXcobm90KGlzKGFjdGl2aXR5LmdldFdpbmRvdygpLmdldERlY29yVmlldygpKSkpKQotICAgICAgICAgICAgICAgIC5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RmxvYXRpbmdUb29sYmFySXNEaXNwbGF5ZWQoKSB7CisgICAgICAgIG9uRmxvYXRpbmdUb29sQmFyKCkuY2hlY2sobWF0Y2hlcyhpc0Rpc3BsYXllZCgpKSk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQXNzZXJ0cyB0aGF0IHRoZSBmbG9hdGluZyB0b29sYmFyIGlzIG5vdCBkaXNwbGF5ZWQgb24gc2NyZWVuLgorICAgICAqCisgICAgICogQHRocm93cyBBc3NlcnRpb25FcnJvciBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEZsb2F0aW5nVG9vbGJhcklzTm90RGlzcGxheWVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgb25GbG9hdGluZ1Rvb2xCYXIoKS5jaGVjayhtYXRjaGVzKGlzRGlzcGxheWVkKCkpKTsKKyAgICAgICAgfSBjYXRjaCAoTm9NYXRjaGluZ1Jvb3RFeGNlcHRpb24gfCBOb01hdGNoaW5nVmlld0V4Y2VwdGlvbiB8IEFzc2VydGlvbkVycm9yIGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkZsb2F0aW5nIHRvb2xiYXIgaXMgZGlzcGxheWVkIik7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0b2dnbGVPdmVyZmxvdygpIHsKKyAgICAgICAgZmluYWwgaW50IGlkID0gY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5vdmVyZmxvdzsKKyAgICAgICAgb25WaWV3KGFsbE9mKHdpdGhJZChpZCksIGlzRGlzcGxheWVkKCkpKQorICAgICAgICAgICAgICAgIC5pblJvb3Qod2l0aERlY29yVmlldyhoYXNEZXNjZW5kYW50KHdpdGhJZChpZCkpKSkKKyAgICAgICAgICAgICAgICAucGVyZm9ybShWaWV3QWN0aW9ucy5jbGljaygpKTsKKyAgICAgICAgb25WaWV3KGlzUm9vdCgpKS5wZXJmb3JtKFNMRUVQKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2xlZXBGb3JGbG9hdGluZ1Rvb2xiYXJQb3B1cCgpIHsKKyAgICAgICAgb25WaWV3KGlzUm9vdCgpKS5wZXJmb3JtKFNMRUVQKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIGZsb2F0aW5nIHRvb2xiYXIgY29udGFpbnMgdGhlIHNwZWNpZmllZCBpdGVtLgorICAgICAqCisgICAgICogQHBhcmFtIGl0ZW1MYWJlbCBsYWJlbCBvZiB0aGUgaXRlbS4KKyAgICAgKiBAdGhyb3dzIEFzc2VydGlvbkVycm9yIGlmIHRoZSBhc3NlcnRpb24gZmFpbHMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0RmxvYXRpbmdUb29sYmFyQ29udGFpbnNJdGVtKFN0cmluZyBpdGVtTGFiZWwpIHsKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgb25GbG9hdGluZ1Rvb2xCYXIoKS5jaGVjayhtYXRjaGVzKGhhc0Rlc2NlbmRhbnQoVmlld01hdGNoZXJzLndpdGhUZXh0KGl0ZW1MYWJlbCkpKSk7CisgICAgICAgIH0gY2F0Y2ggKEFzc2VydGlvbkVycm9yIGUpIHsKKyAgICAgICAgICAgIHRyeXsKKyAgICAgICAgICAgICAgICB0b2dnbGVPdmVyZmxvdygpOworICAgICAgICAgICAgfSBjYXRjaCAoTm9NYXRjaGluZ1ZpZXdFeGNlcHRpb24gfCBOb01hdGNoaW5nUm9vdEV4Y2VwdGlvbiBlMikgeworICAgICAgICAgICAgICAgIC8vIE5vIG92ZXJmbG93IGl0ZW1zLgorICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnl7CisgICAgICAgICAgICAgICAgb25GbG9hdGluZ1Rvb2xCYXIoKS5jaGVjayhtYXRjaGVzKGhhc0Rlc2NlbmRhbnQoVmlld01hdGNoZXJzLndpdGhUZXh0KGl0ZW1MYWJlbCkpKSk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIHRvZ2dsZU92ZXJmbG93KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBc3NlcnRzIHRoYXQgdGhlIGZsb2F0aW5nIHRvb2xiYXIgZG9lc24ndCBjb250YWluIHRoZSBzcGVjaWZpZWQgaXRlbS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpdGVtTGFiZWwgbGFiZWwgb2YgdGhlIGl0ZW0uCisgICAgICogQHRocm93cyBBc3NlcnRpb25FcnJvciBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxzCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydEZsb2F0aW5nVG9vbGJhckRvZXNOb3RDb250YWluSXRlbShTdHJpbmcgaXRlbUxhYmVsKSB7CisgICAgICAgIHRyeXsKKyAgICAgICAgICAgIGFzc2VydEZsb2F0aW5nVG9vbGJhckNvbnRhaW5zSXRlbShpdGVtTGFiZWwpOworICAgICAgICB9IGNhdGNoIChBc3NlcnRpb25FcnJvciBlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJGbG9hdGluZyB0b29sYmFyIGNvbnRhaW5zICIgKyBpdGVtTGFiZWwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFZpZXdBY3Rpb24gdG8gc2xlZXAgdG8gd2FpdCBmbG9hdGluZyB0b29sYmFyJ3MgYW5pbWF0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFZpZXdBY3Rpb24gU0xFRVAgPSBuZXcgVmlld0FjdGlvbigpIHsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBTTEVFUF9EVVJBVElPTiA9IDQwMDsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIE1hdGNoZXI8Vmlldz4gZ2V0Q29uc3RyYWludHMoKSB7CisgICAgICAgICAgICByZXR1cm4gaXNEaXNwbGF5ZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERlc2NyaXB0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuICJTbGVlcCAiICsgU0xFRVBfRFVSQVRJT04gKyAiIG1zLiI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcGVyZm9ybShVaUNvbnRyb2xsZXIgdWlDb250cm9sbGVyLCBWaWV3IHZpZXcpIHsKKyAgICAgICAgICAgIHVpQ29udHJvbGxlci5sb29wTWFpblRocmVhZEZvckF0TGVhc3QoU0xFRVBfRFVSQVRJT04pOworICAgICAgICB9CisgICAgfTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9Nb3VzZUNsaWNrQWN0aW9uLmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vTW91c2VDbGlja0FjdGlvbi5qYXZhCmluZGV4IGRlNjQwY2EuLmI4ZWEyZGUgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9Nb3VzZUNsaWNrQWN0aW9uLmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL01vdXNlQ2xpY2tBY3Rpb24uamF2YQpAQCAtMjIsMjAgKzIyLDg2IEBACiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uVmlld0FjdGlvbjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uQ29vcmRpbmF0ZXNQcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uR2VuZXJhbENsaWNrQWN0aW9uOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFjdGlvbi5QcmVjaXNpb25EZXNjcmliZXI7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYWN0aW9uLk1vdGlvbkV2ZW50czsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5hY3Rpb24uTW90aW9uRXZlbnRzLkRvd25SZXN1bHRIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYWN0aW9uLlByZXNzOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC50ZXN0LmVzcHJlc3NvLmFjdGlvbi5UYXBwZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIAogLyoqCiAgKiBWaWV3QWN0aW9uIGZvciBwZXJmb3JtaW5nIGFuIGNsaWNrIG9uIFZpZXcgYnkgYSBtb3VzZS4KICAqLwogcHVibGljIGZpbmFsIGNsYXNzIE1vdXNlQ2xpY2tBY3Rpb24gaW1wbGVtZW50cyBWaWV3QWN0aW9uIHsKICAgICBwcml2YXRlIGZpbmFsIEdlbmVyYWxDbGlja0FjdGlvbiBtR2VuZXJhbENsaWNrQWN0aW9uOworICAgIEBNb3VzZVVpQ29udHJvbGxlci5Nb3VzZUJ1dHRvbgorICAgIHByaXZhdGUgZmluYWwgaW50IG1CdXR0b247CiAKKyAgICBwdWJsaWMgZW51bSBDTElDSyBpbXBsZW1lbnRzIFRhcHBlciB7CisgICAgICAgIFRSSVBMRSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBUYXBwZXIuU3RhdHVzIHNlbmRUYXAoVWlDb250cm9sbGVyIHVpQ29udHJvbGxlciwgZmxvYXRbXSBjb29yZGluYXRlcywKKyAgICAgICAgICAgICAgICAgICAgZmxvYXRbXSBwcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICBUYXBwZXIuU3RhdHVzIHN0YXQgPSBzZW5kU2luZ2xlVGFwKHVpQ29udHJvbGxlciwgY29vcmRpbmF0ZXMsIHByZWNpc2lvbik7CisgICAgICAgICAgICAgICAgYm9vbGVhbiB3YXJuaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKHN0YXQgPT0gVGFwcGVyLlN0YXR1cy5GQUlMVVJFKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXBwZXIuU3RhdHVzLkZBSUxVUkU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ID09IFRhcHBlci5TdGF0dXMuV0FSTklORykgeworICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsb25nIGRvdWJsZVRhcE1pbmltdW1UaW1lb3V0ID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0RG91YmxlVGFwTWluVGltZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgwIDwgZG91YmxlVGFwTWluaW11bVRpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci5sb29wTWFpblRocmVhZEZvckF0TGVhc3QoZG91YmxlVGFwTWluaW11bVRpbWVvdXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBzZW5kU2luZ2xlVGFwKHVpQ29udHJvbGxlciwgY29vcmRpbmF0ZXMsIHByZWNpc2lvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ID09IFRhcHBlci5TdGF0dXMuRkFJTFVSRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRhcHBlci5TdGF0dXMuRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ID09IFRhcHBlci5TdGF0dXMuV0FSTklORykgeworICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2FybmluZykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFwcGVyLlN0YXR1cy5XQVJOSU5HOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXBwZXIuU3RhdHVzLlNVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHByaXZhdGUgc3RhdGljIFRhcHBlci5TdGF0dXMgc2VuZFNpbmdsZVRhcChVaUNvbnRyb2xsZXIgdWlDb250cm9sbGVyLAorICAgICAgICAgICAgICAgIGZsb2F0W10gY29vcmRpbmF0ZXMsIGZsb2F0W10gcHJlY2lzaW9uKSB7CisgICAgICAgICAgICBEb3duUmVzdWx0SG9sZGVyIHJlcyA9IE1vdGlvbkV2ZW50cy5zZW5kRG93bih1aUNvbnRyb2xsZXIsIGNvb3JkaW5hdGVzLCBwcmVjaXNpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoIU1vdGlvbkV2ZW50cy5zZW5kVXAodWlDb250cm9sbGVyLCByZXMuZG93bikpIHsKKyAgICAgICAgICAgICAgICAgICAgTW90aW9uRXZlbnRzLnNlbmRDYW5jZWwodWlDb250cm9sbGVyLCByZXMuZG93bik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUYXBwZXIuU3RhdHVzLkZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICByZXMuZG93bi5yZWN5Y2xlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzLmxvbmdQcmVzcyA/IFRhcHBlci5TdGF0dXMuV0FSTklORyA6IFRhcHBlci5TdGF0dXMuU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgTW91c2VDbGlja0FjdGlvbihUYXBwZXIgdGFwcGVyLCBDb29yZGluYXRlc1Byb3ZpZGVyIGNvb3JkaW5hdGVzUHJvdmlkZXIpIHsKKyAgICAgICAgdGhpcyh0YXBwZXIsIGNvb3JkaW5hdGVzUHJvdmlkZXIsIE1vdGlvbkV2ZW50LkJVVFRPTl9QUklNQVJZKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIE1vdXNlQ2xpY2tBY3Rpb24KKyAgICAgKgorICAgICAqIEBwYXJhbSB0YXBwZXIgdGhlIHRhcHBlcgorICAgICAqIEBwYXJhbSBjb29yZGluYXRlc1Byb3ZpZGVyIHRoZSBwcm92aWRlciBvZiB0aGUgZXZlbnQgY29vcmRpbmF0ZXMKKyAgICAgKiBAcGFyYW0gYnV0dG9uIHRoZSBtb3VzZSBidXR0b24gdXNlZCB0byBzZW5kIG1vdGlvbiBldmVudHMKKyAgICAgKi8KICAgICBwdWJsaWMgTW91c2VDbGlja0FjdGlvbihUYXBwZXIgdGFwcGVyLCBDb29yZGluYXRlc1Byb3ZpZGVyIGNvb3JkaW5hdGVzUHJvdmlkZXIsCi0gICAgICAgICAgICBQcmVjaXNpb25EZXNjcmliZXIgcHJlY2lzaW9uRGVzY3JpYmVyKSB7Ci0gICAgICAgIG1HZW5lcmFsQ2xpY2tBY3Rpb24gPSBuZXcgR2VuZXJhbENsaWNrQWN0aW9uKHRhcHBlciwgY29vcmRpbmF0ZXNQcm92aWRlciwKLSAgICAgICAgICAgICAgICBwcmVjaXNpb25EZXNjcmliZXIpOworICAgICAgICAgICAgQE1vdXNlVWlDb250cm9sbGVyLk1vdXNlQnV0dG9uIGludCBidXR0b24pIHsKKyAgICAgICAgbUdlbmVyYWxDbGlja0FjdGlvbiA9IG5ldyBHZW5lcmFsQ2xpY2tBY3Rpb24odGFwcGVyLCBjb29yZGluYXRlc1Byb3ZpZGVyLCBQcmVzcy5QSU5QT0lOVCk7CisgICAgICAgIG1CdXR0b24gPSBidXR0b247CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01MCw2ICsxMTYsMTQgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHBlcmZvcm0oVWlDb250cm9sbGVyIHVpQ29udHJvbGxlciwgVmlldyB2aWV3KSB7Ci0gICAgICAgIG1HZW5lcmFsQ2xpY2tBY3Rpb24ucGVyZm9ybShuZXcgTW91c2VVaUNvbnRyb2xsZXIodWlDb250cm9sbGVyKSwgdmlldyk7CisgICAgICAgIG1HZW5lcmFsQ2xpY2tBY3Rpb24ucGVyZm9ybShuZXcgTW91c2VVaUNvbnRyb2xsZXIodWlDb250cm9sbGVyLCBtQnV0dG9uKSwgdmlldyk7CisgICAgICAgIGxvbmcgZG91YmxlVGFwVGltZW91dCA9IFZpZXdDb25maWd1cmF0aW9uLmdldERvdWJsZVRhcFRpbWVvdXQoKTsKKyAgICAgICAgaWYgKDAgPCBkb3VibGVUYXBUaW1lb3V0KSB7CisgICAgICAgICAgICAvLyBXYWl0IHRvIGF2b2lkIGZhbHNlIGdlc3R1cmUgZGV0ZWN0aW9uLiBXaXRob3V0IHRoaXMgd2FpdCwgY29uc2VjdXRpdmUgY2xpY2tzIGNhbiBiZQorICAgICAgICAgICAgLy8gZGV0ZWN0ZWQgYXMgYSB0cmlwbGUgY2xpY2suIGUuZy4gMiBkb3VibGUgY2xpY2tzIGFyZSBkZXRlY3RlZCBhcyBhIHRyaXBsZSBjbGljayBhbmQKKyAgICAgICAgICAgIC8vIGEgc2luZ2xlIGNsaWNrIGJlY2F1c2UgZXNwcmVzc28gaXNuJ3QgYXdhcmUgb2YgdHJpcGxlIGNsaWNrIGRldGVjdGlvbiBsb2dpYywgd2hpY2gKKyAgICAgICAgICAgIC8vIGlzIFRleHRWaWV3IHNwZWNpZmljIGdlc3R1cmUuCisgICAgICAgICAgICB1aUNvbnRyb2xsZXIubG9vcE1haW5UaHJlYWRGb3JBdExlYXN0KGRvdWJsZVRhcFRpbWVvdXQpOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL01vdXNlVWlDb250cm9sbGVyLmphdmEgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vTW91c2VVaUNvbnRyb2xsZXIuamF2YQppbmRleCBmMTM4N2Y4Li4wMjJiZTc2IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vTW91c2VVaUNvbnRyb2xsZXIuamF2YQorKysgYi9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vTW91c2VVaUNvbnRyb2xsZXIuamF2YQpAQCAtMTYsNiArMTYsMTIgQEAKIAogcGFja2FnZSBhbmRyb2lkLndpZGdldC5lc3ByZXNzbzsKIAoraW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uSW5qZWN0RXZlbnRTZWN1cml0eUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby5VaUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklucHV0RGV2aWNlOwpAQCAtMjYsMTEgKzMyLDI4IEBACiAgKiBDbGFzcyB0byB3cmFwIGFuIFVpQ29udHJvbGxlciB0byBvdmVyd3JpdGUgc291cmNlIG9mIG1vdGlvbiBldmVudHMgdG8gU09VUkNFX01PVVNFLgogICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBjaGFuZ2UgdGhlIHRvb2wgdHlwZS4KICAqLwotcHVibGljIGNsYXNzIE1vdXNlVWlDb250cm9sbGVyIGltcGxlbWVudHMgVWlDb250cm9sbGVyIHsKK3B1YmxpYyBmaW5hbCBjbGFzcyBNb3VzZVVpQ29udHJvbGxlciBpbXBsZW1lbnRzIFVpQ29udHJvbGxlciB7CisgICAgQFJldGVudGlvbihSZXRlbnRpb25Qb2xpY3kuU09VUkNFKQorICAgIEBJbnREZWYoe01vdGlvbkV2ZW50LkJVVFRPTl9QUklNQVJZLCBNb3Rpb25FdmVudC5CVVRUT05fU0VDT05EQVJZLCBNb3Rpb25FdmVudC5CVVRUT05fVEVSVElBUll9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIE1vdXNlQnV0dG9uIHt9CisKICAgICBwcml2YXRlIGZpbmFsIFVpQ29udHJvbGxlciBtVWlDb250cm9sbGVyOworICAgIEBNb3VzZUJ1dHRvbgorICAgIHByaXZhdGUgZmluYWwgaW50IG1CdXR0b247CiAKICAgICBwdWJsaWMgTW91c2VVaUNvbnRyb2xsZXIoVWlDb250cm9sbGVyIHVpQ29udHJvbGxlcikgewotICAgICAgICBtVWlDb250cm9sbGVyID0gdWlDb250cm9sbGVyOworICAgICAgICB0aGlzKHVpQ29udHJvbGxlciwgTW90aW9uRXZlbnQuQlVUVE9OX1BSSU1BUlkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgTW91c2VVaUNvbnRyb2xsZXIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdWlDb250cm9sbGVyIHRoZSB1aUNvbnRyb2xsZXIgdG8gd3JhcAorICAgICAqIEBwYXJhbSBidXR0b24gdGhlIGJ1dHRvbiB0byBiZSB1c2VkIGZvciBnZW5lcmF0aW5nIGlucHV0IGV2ZW50cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgTW91c2VVaUNvbnRyb2xsZXIoVWlDb250cm9sbGVyIHVpQ29udHJvbGxlciwgQE1vdXNlQnV0dG9uIGludCBidXR0b24pIHsKKyAgICAgICAgbVVpQ29udHJvbGxlciA9IGNoZWNrTm90TnVsbCh1aUNvbnRyb2xsZXIpOworICAgICAgICBtQnV0dG9uID0gYnV0dG9uOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDAsOSArNjMsMTEgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGluamVjdE1vdGlvbkV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgSW5qZWN0RXZlbnRTZWN1cml0eUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIE1vZGlmeSB0aGUgZXZlbnQgdG8gbWltaWMgbW91c2UgcHJpbWFyeSBidXR0b24gZXZlbnQuCisgICAgICAgIC8vIE1vZGlmeSB0aGUgZXZlbnQgdG8gbWltaWMgbW91c2UgZXZlbnQuCiAgICAgICAgIGV2ZW50LnNldFNvdXJjZShJbnB1dERldmljZS5TT1VSQ0VfTU9VU0UpOwotICAgICAgICBldmVudC5zZXRCdXR0b25TdGF0ZShNb3Rpb25FdmVudC5CVVRUT05fUFJJTUFSWSk7CisgICAgICAgIGlmIChldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fVVApIHsKKyAgICAgICAgICAgIGV2ZW50LnNldEJ1dHRvblN0YXRlKG1CdXR0b24pOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtVWlDb250cm9sbGVyLmluamVjdE1vdGlvbkV2ZW50KGV2ZW50KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9UZXh0Vmlld0FjdGlvbnMuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9hbmRyb2lkL3dpZGdldC9lc3ByZXNzby9UZXh0Vmlld0FjdGlvbnMuamF2YQppbmRleCAzMmNjNmQ2Li4xZGQ2ZTE3IDEwMDY0NAotLS0gYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvYW5kcm9pZC93aWRnZXQvZXNwcmVzc28vVGV4dFZpZXdBY3Rpb25zLmphdmEKKysrIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2FuZHJvaWQvd2lkZ2V0L2VzcHJlc3NvL1RleHRWaWV3QWN0aW9ucy5qYXZhCkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QuZXNwcmVzc28uYWN0aW9uLlRhcDsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudGVzdC5lc3ByZXNzby51dGlsLkh1bWFuUmVhZGFibGVzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5MYXlvdXQ7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRvcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKQEAgLTYzLDggKzY0LDI0IEBACiAgICAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgVGV4dFZpZXcncyB0ZXh0IHRvIGNsaWNrIG9uLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgVmlld0FjdGlvbiBtb3VzZUNsaWNrT25UZXh0QXRJbmRleChpbnQgaW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIG1vdXNlQ2xpY2tPblRleHRBdEluZGV4KGluZGV4LCBNb3Rpb25FdmVudC5CVVRUT05fUFJJTUFSWSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBhbiBhY3Rpb24gdGhhdCBjbGlja3MgYnkgbW91c2Ugb24gdGV4dCBhdCBhbiBpbmRleCBvbiB0aGUgVGV4dFZpZXcuPGJyPgorICAgICAqIDxicj4KKyAgICAgKiBWaWV3IGNvbnN0cmFpbnRzOgorICAgICAqIDx1bD4KKyAgICAgKiA8bGk+bXVzdCBiZSBhIFRleHRWaWV3IGRpc3BsYXllZCBvbiBzY3JlZW4KKyAgICAgKiA8dWw+CisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBUZXh0VmlldydzIHRleHQgdG8gY2xpY2sgb24uCisgICAgICogQHBhcmFtIGJ1dHRvbiB0aGUgbW91c2UgYnV0dG9uIHRvIHVzZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFZpZXdBY3Rpb24gbW91c2VDbGlja09uVGV4dEF0SW5kZXgoaW50IGluZGV4LAorICAgICAgICAgICAgQE1vdXNlVWlDb250cm9sbGVyLk1vdXNlQnV0dG9uIGludCBidXR0b24pIHsKICAgICAgICAgcmV0dXJuIGFjdGlvbldpdGhBc3NlcnRpb25zKAotICAgICAgICAgICAgICAgIG5ldyBNb3VzZUNsaWNrQWN0aW9uKFRhcC5TSU5HTEUsIG5ldyBUZXh0Q29vcmRpbmF0ZXMoaW5kZXgpLCBQcmVzcy5QSU5QT0lOVCkpOworICAgICAgICAgICAgICAgIG5ldyBNb3VzZUNsaWNrQWN0aW9uKFRhcC5TSU5HTEUsIG5ldyBUZXh0Q29vcmRpbmF0ZXMoaW5kZXgpLCBidXR0b24pKTsKICAgICB9CiAKICAgICAvKioKQEAgLTk0LDcgKzExMSw3IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBWaWV3QWN0aW9uIG1vdXNlRG91YmxlQ2xpY2tPblRleHRBdEluZGV4KGludCBpbmRleCkgewogICAgICAgICByZXR1cm4gYWN0aW9uV2l0aEFzc2VydGlvbnMoCi0gICAgICAgICAgICAgICAgbmV3IE1vdXNlQ2xpY2tBY3Rpb24oVGFwLkRPVUJMRSwgbmV3IFRleHRDb29yZGluYXRlcyhpbmRleCksIFByZXNzLlBJTlBPSU5UKSk7CisgICAgICAgICAgICAgICAgbmV3IE1vdXNlQ2xpY2tBY3Rpb24oVGFwLkRPVUJMRSwgbmV3IFRleHRDb29yZGluYXRlcyhpbmRleCkpKTsKICAgICB9CiAKICAgICAvKioKQEAgLTEyNCw3ICsxNDEsMjIgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFZpZXdBY3Rpb24gbW91c2VMb25nQ2xpY2tPblRleHRBdEluZGV4KGludCBpbmRleCkgewogICAgICAgICByZXR1cm4gYWN0aW9uV2l0aEFzc2VydGlvbnMoCi0gICAgICAgICAgICAgICAgbmV3IE1vdXNlQ2xpY2tBY3Rpb24oVGFwLkxPTkcsIG5ldyBUZXh0Q29vcmRpbmF0ZXMoaW5kZXgpLCBQcmVzcy5QSU5QT0lOVCkpOworICAgICAgICAgICAgICAgIG5ldyBNb3VzZUNsaWNrQWN0aW9uKFRhcC5MT05HLCBuZXcgVGV4dENvb3JkaW5hdGVzKGluZGV4KSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYW4gYWN0aW9uIHRoYXQgdHJpcGxlLWNsaWNrcyBieSBtb3VzZSBvbiB0ZXh0IGF0IGFuIGluZGV4IG9uIHRoZSBUZXh0Vmlldy48YnI+CisgICAgICogPGJyPgorICAgICAqIFZpZXcgY29uc3RyYWludHM6CisgICAgICogPHVsPgorICAgICAqIDxsaT5tdXN0IGJlIGEgVGV4dFZpZXcgZGlzcGxheWVkIG9uIHNjcmVlbgorICAgICAqIDx1bD4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIFRleHRWaWV3J3MgdGV4dCB0byB0cmlwbGUtY2xpY2sgb24uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBWaWV3QWN0aW9uIG1vdXNlVHJpcGxlQ2xpY2tPblRleHRBdEluZGV4KGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gYWN0aW9uV2l0aEFzc2VydGlvbnMoCisgICAgICAgICAgICAgICAgbmV3IE1vdXNlQ2xpY2tBY3Rpb24oTW91c2VDbGlja0FjdGlvbi5DTElDSy5UUklQTEUsIG5ldyBUZXh0Q29vcmRpbmF0ZXMoaW5kZXgpKSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMzcsNiArMjY5LDI4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Vmlldy5jbGFzcykpOwogICAgIH0KIAorICAgIC8qKgorICAgICogUmV0dXJucyBhbiBhY3Rpb24gdGhhdCB0cmlwbGUgY2xpY2sgdGhlbiBkcmFncyBieSBtb3VzZSBvbiB0ZXh0IGZyb20gc3RhcnRJbmRleCB0byBlbmRJbmRleAorICAgICogb24gdGhlIFRleHRWaWV3Ljxicj4KKyAgICAqIDxicj4KKyAgICAqIFZpZXcgY29uc3RyYWludHM6CisgICAgKiA8dWw+CisgICAgKiA8bGk+bXVzdCBiZSBhIFRleHRWaWV3IGRpc3BsYXllZCBvbiBzY3JlZW4KKyAgICAqIDx1bD4KKyAgICAqCisgICAgKiBAcGFyYW0gc3RhcnRJbmRleCBUaGUgaW5kZXggb2YgdGhlIFRleHRWaWV3J3MgdGV4dCB0byBzdGFydCBhIGRyYWcgZnJvbQorICAgICogQHBhcmFtIGVuZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgVGV4dFZpZXcncyB0ZXh0IHRvIGVuZCB0aGUgZHJhZyBhdAorICAgICovCisgICBwdWJsaWMgc3RhdGljIFZpZXdBY3Rpb24gbW91c2VUcmlwbGVDbGlja0FuZERyYWdPblRleHQoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkgeworICAgICAgIHJldHVybiBhY3Rpb25XaXRoQXNzZXJ0aW9ucygKKyAgICAgICAgICAgICAgIG5ldyBEcmFnQWN0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICBEcmFnQWN0aW9uLkRyYWcuTU9VU0VfVFJJUExFX0NMSUNLLAorICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dENvb3JkaW5hdGVzKHN0YXJ0SW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dENvb3JkaW5hdGVzKGVuZEluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHJlc3MuUElOUE9JTlQsCisgICAgICAgICAgICAgICAgICAgICAgIFRleHRWaWV3LmNsYXNzKSk7CisgICB9CisKICAgICBwdWJsaWMgZW51bSBIYW5kbGUgewogICAgICAgICBTRUxFQ1RJT05fU1RBUlQsCiAgICAgICAgIFNFTEVDVElPTl9FTkQsCmRpZmYgLS1naXQgYS9jb3JlL3Rlc3RzL2NvcmV0ZXN0cy9zcmMvY29tL2FuZHJvaWQvaW50ZXJuYWwvcG9saWN5L1Bob25lV2luZG93QWN0aW9uTW9kZVRlc3QuamF2YSBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvUGhvbmVXaW5kb3dBY3Rpb25Nb2RlVGVzdC5qYXZhCmluZGV4IDQ4NTkwYzEuLjE5NjYzMTMgMTAwNjQ0Ci0tLSBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvUGhvbmVXaW5kb3dBY3Rpb25Nb2RlVGVzdC5qYXZhCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC9wb2xpY3kvUGhvbmVXaW5kb3dBY3Rpb25Nb2RlVGVzdC5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkFjdGlvbk1vZGUuQ2FsbGJhY2s7CiBpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlib2FyZFNob3J0Y3V0R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CkBAIC0zMiw2ICszMyw4IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlFdmVudDsKIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OworCiAvKioKICAqIFRlc3RzIHtAbGluayBQaG9uZVdpbmRvd30ncyB7QGxpbmsgQWN0aW9uTW9kZX0gcmVsYXRlZCBtZXRob2RzLgogICovCkBAIC0yODgsNiArMjkxLDkgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25BY3Rpb25Nb2RlRmluaXNoZWQoQWN0aW9uTW9kZSBtb2RlKSB7fQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVLZXlib2FyZFNob3J0Y3V0cyhMaXN0PEtleWJvYXJkU2hvcnRjdXRHcm91cD4gZGF0YSwgTWVudSBtZW51KSB7fQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIE1vY2tBY3Rpb25Nb2RlQ2FsbGJhY2sgaW1wbGVtZW50cyBBY3Rpb25Nb2RlLkNhbGxiYWNrIHsKZGlmZiAtLWdpdCBhL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0xpbmVCcmVha0J1ZmZlcmVkV3JpdGVyVGVzdC5qYXZhIGIvY29yZS90ZXN0cy9jb3JldGVzdHMvc3JjL2NvbS9hbmRyb2lkL2ludGVybmFsL3V0aWwvTGluZUJyZWFrQnVmZmVyZWRXcml0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhZTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2NvcmUvdGVzdHMvY29yZXRlc3RzL3NyYy9jb20vYW5kcm9pZC9pbnRlcm5hbC91dGlsL0xpbmVCcmVha0J1ZmZlcmVkV3JpdGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogVGVzdHMgZm9yIHtAbGluayBJbmRlbnRpbmdQcmludFdyaXRlcn0uCisgKi8KK3B1YmxpYyBjbGFzcyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBtU3RyZWFtOworICAgIHByaXZhdGUgUmVjb3JkaW5nV3JpdGVyIG1Xcml0ZXI7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworCisgICAgICAgIG1Xcml0ZXIgPSBuZXcgUmVjb3JkaW5nV3JpdGVyKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdExlc3NUaGFuQnVmZmVyU2l6ZSgpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMTAwMCk7CisKKyAgICAgICAgbHcucHJpbnRsbigiSGVsbG8iKTsKKyAgICAgICAgbHcucHJpbnRsbigiV29ybGQiKTsKKyAgICAgICAgbHcucHJpbnRsbigiVGVzdCIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiSGVsbG9cbldvcmxkXG5UZXN0XG4iKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplTm9MaW5lQnJlYWtzKCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAyMCk7CisKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSAiYWFhYWFhYWFhYWFhYWFhIjsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbCk7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIC8vIEhhdmUgdG8gbWFudWFsbHkgaW5zcGVjdCBvdXRwdXQuCisgICAgICAgIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBtV3JpdGVyLmdldFN0cmluZ3MoKTsKKyAgICAgICAgLy8gRXhwZWN0IHR3byBzdHJpbmdzLgorICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcmVzdWx0LnNpemUoKSk7CisgICAgICAgIC8vIEV4cGVjdCB0aGUgc3RyaW5ncyB0byBzdW0gdXAgdG8gdGhlIG9yaWdpbmFsIGlucHV0LgorICAgICAgICBhc3NlcnRFcXVhbHMoMiAqIGxpdGVyYWwubGVuZ3RoKCksIHJlc3VsdC5nZXQoMCkubGVuZ3RoKCkgKyByZXN1bHQuZ2V0KDEpLmxlbmd0aCgpKTsKKyAgICAgICAgLy8gU3RyaW5ncyBzaG91bGQgb25seSBiZSBhLgorICAgICAgICBmb3IgKFN0cmluZyBzIDogcmVzdWx0KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscygnYScsIHMuY2hhckF0KGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVOb0xpbmVCcmVha3NTaW5nbGVTdHJpbmcoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9ICJhYWFhYWFhYWFhYWFhYWEiOworICAgICAgICBsdy5wcmludChsaXRlcmFsICsgbGl0ZXJhbCk7CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgLy8gSGF2ZSB0byBtYW51YWxseSBpbnNwZWN0IG91dHB1dC4KKyAgICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG1Xcml0ZXIuZ2V0U3RyaW5ncygpOworICAgICAgICAvLyBFeHBlY3QgdHdvIHN0cmluZ3MuCisgICAgICAgIGFzc2VydEVxdWFscygyLCByZXN1bHQuc2l6ZSgpKTsKKyAgICAgICAgLy8gRXhwZWN0IHRoZSBzdHJpbmdzIHRvIHN1bSB1cCB0byB0aGUgb3JpZ2luYWwgaW5wdXQuCisgICAgICAgIGFzc2VydEVxdWFscygyICogbGl0ZXJhbC5sZW5ndGgoKSwgcmVzdWx0LmdldCgwKS5sZW5ndGgoKSArIHJlc3VsdC5nZXQoMSkubGVuZ3RoKCkpOworICAgICAgICAvLyBTdHJpbmdzIHNob3VsZCBvbmx5IGJlIGEuCisgICAgICAgIGZvciAoU3RyaW5nIHMgOiByZXN1bHQpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCdhJywgcy5jaGFyQXQoaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1vcmVUaGFuQnVmZmVyU2l6ZUxpbmVCcmVha0JlZm9yZSgpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMjApOworCisgICAgICAgIFN0cmluZyBsaXRlcmFsMSA9ICJhYWFhYWFhYWFhXG5iYmJiIjsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwyID0gImNjY2NjY2NjY2MiOworICAgICAgICBsdy5wcmludChsaXRlcmFsMSk7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwyKTsKKyAgICAgICAgbHcuZmx1c2goKTsKKworICAgICAgICBhc3NlcnRPdXRwdXQoImFhYWFhYWFhYWEiLCAiYmJiYmNjY2NjY2NjY2MiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplTGluZUJyZWFrQmVmb3JlU2luZ2xlU3RyaW5nKCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAyMCk7CisKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwxID0gImFhYWFhYWFhYWFcbmJiYmIiOworICAgICAgICBTdHJpbmcgbGl0ZXJhbDIgPSAiY2NjY2NjY2NjYyI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxICsgbGl0ZXJhbDIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiYWFhYWFhYWFhYSIsICJiYmJiY2NjY2NjY2NjYyIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVMaW5lQnJlYWtOZXcoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbDEgPSAiYWFhYWFhYWFhYWJiYmJiIjsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwyID0gImNcbmRcbmRkZGRkZGRkZCI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxKTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiYWFhYWFhYWFhYWJiYmJiY1xuZCIsICJkZGRkZGRkZGQiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplTGluZUJyZWFrQmVmb3JlQW5kTmV3KCkgeworICAgICAgICBmaW5hbCBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlciBsdyA9IG5ldyBMaW5lQnJlYWtCdWZmZXJlZFdyaXRlcihtV3JpdGVyLCAyMCk7CisKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwxID0gImFhYWFhYWFhYWFcbmJiYmJiIjsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwyID0gImNcbmRcbmRkZGRkZGRkZCI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxKTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiYWFhYWFhYWFhYVxuYmJiYmJjXG5kIiwgImRkZGRkZGRkZCIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RNb3JlVGhhbkJ1ZmZlclNpemVJbnQoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDE1KTsKKworICAgICAgICBpbnQgbGl0ZXJhbDEgPSAxMjM0NTY3ODkwOworICAgICAgICBpbnQgbGl0ZXJhbDIgPSA5ODc2NTQzMjE7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxKTsKKyAgICAgICAgbHcucHJpbnQobGl0ZXJhbDIpOworICAgICAgICBsdy5mbHVzaCgpOworCisgICAgICAgIGFzc2VydE91dHB1dCgiMTIzNDU2Nzg5MDk4NzY1IiwgIjQzMjEiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplQ2hhcigpIHsKKyAgICAgICAgZmluYWwgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIgbHcgPSBuZXcgTGluZUJyZWFrQnVmZmVyZWRXcml0ZXIobVdyaXRlciwgMTUpOworCisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBsdy5wcmludCgnJCcpOworICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICBsdy5wcmludCgnJScpOworICAgICAgICB9CisgICAgICAgIGx3LmZsdXNoKCk7CisKKyAgICAgICAgYXNzZXJ0T3V0cHV0KCIkJCQkJCQkJCQkJSUlJSUiLCAiJSUlJSUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9yZVRoYW5CdWZmZXJTaXplTGluZUJyZWFrTmV3Q2hhcnMoKSB7CisgICAgICAgIGZpbmFsIExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyIGx3ID0gbmV3IExpbmVCcmVha0J1ZmZlcmVkV3JpdGVyKG1Xcml0ZXIsIDIwKTsKKworICAgICAgICBTdHJpbmcgbGl0ZXJhbDEgPSAiYWFhYWFhYWFhYWJiYmJiIjsKKyAgICAgICAgU3RyaW5nIGxpdGVyYWwyID0gImNcbmRcbmRkZGRkZGRkZCI7CisgICAgICAgIGx3LnByaW50KGxpdGVyYWwxLnRvQ2hhckFycmF5KCkpOworICAgICAgICBsdy5wcmludChsaXRlcmFsMi50b0NoYXJBcnJheSgpKTsKKyAgICAgICAgbHcuZmx1c2goKTsKKworICAgICAgICBhc3NlcnRPdXRwdXQoImFhYWFhYWFhYWFiYmJiYmNcbmQiLCAiZGRkZGRkZGRkIik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydE91dHB1dChTdHJpbmcuLi4gZ29sZGVuKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBnb2xkTGlzdCA9IGNyZWF0ZVRlc3RHb2xkZW4oZ29sZGVuKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKGdvbGRMaXN0LCBtV3JpdGVyLmdldFN0cmluZ3MoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGNyZWF0ZVRlc3RHb2xkZW4oU3RyaW5nLi4uIGFyZ3MpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IHJldCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBmb3IgKFN0cmluZyBzIDogYXJncykgeworICAgICAgICAgICAgcmV0LmFkZChzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8vIEEgd3JpdGVyIHJlY29yZGluZyBjYWxscyB0byB3cml0ZS4KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjbGFzcyBSZWNvcmRpbmdXcml0ZXIgZXh0ZW5kcyBXcml0ZXIgeworCisgICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHN0cmluZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworICAgICAgICBwdWJsaWMgUmVjb3JkaW5nV3JpdGVyKCkgeworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRTdHJpbmdzKCkgeworICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3M7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGUoY2hhcltdIGNidWYsIGludCBvZmYsIGludCBsZW4pIHsKKyAgICAgICAgICAgIHN0cmluZ3MuYWRkKG5ldyBTdHJpbmcoY2J1Ziwgb2ZmLCBsZW4pKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBmbHVzaCgpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZS4KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZS4KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2RhdGEvZXRjL3BsYXRmb3JtLnhtbCBiL2RhdGEvZXRjL3BsYXRmb3JtLnhtbAppbmRleCA1MTAxOWNjLi45OTlkNDdiIDEwMDY0NAotLS0gYS9kYXRhL2V0Yy9wbGF0Zm9ybS54bWwKKysrIGIvZGF0YS9ldGMvcGxhdGZvcm0ueG1sCkBAIC00NCw2ICs0NCw3IEBACiAKICAgICA8cGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIX1NUQUNLIiA+CiAgICAgICAgIDxncm91cCBnaWQ9Im5ldF9idF9zdGFjayIgLz4KKyAgICAgICAgPGdyb3VwIGdpZD0id2FrZWxvY2siIC8+CiAgICAgPC9wZXJtaXNzaW9uPgogCiAgICAgPHBlcm1pc3Npb24gbmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk5FVF9UVU5ORUxJTkciID4KQEAgLTEwNiw2ICsxMDcsNyBAQAogICAgIDwvcGVybWlzc2lvbj4KIAogICAgIDxwZXJtaXNzaW9uIG5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfRk1fUkFESU8iID4KKyAgICAgICAgPCEtLSAvZGV2L2ZtIGlzIGdpZCBtZWRpYSwgbm90IGF1ZGlvIC0tPgogICAgICAgICA8Z3JvdXAgZ2lkPSJtZWRpYSIgLz4KICAgICA8L3Blcm1pc3Npb24+CiAKQEAgLTEyOCw2ICsxMzAsMTIgQEAKICAgICA8YXNzaWduLXBlcm1pc3Npb24gbmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlVQREFURV9BUFBfT1BTX1NUQVRTIiB1aWQ9Im1lZGlhIiAvPgogICAgIDxhc3NpZ24tcGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX1BST0NFU1NfU1RBVEVfQU5EX09PTV9TQ09SRSIgdWlkPSJtZWRpYSIgLz4KIAorICAgIDxhc3NpZ24tcGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX0FVRElPX1NFVFRJTkdTIiB1aWQ9ImF1ZGlvc2VydmVyIiAvPgorICAgIDxhc3NpZ24tcGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1NVUkZBQ0VfRkxJTkdFUiIgdWlkPSJhdWRpb3NlcnZlciIgLz4KKyAgICA8YXNzaWduLXBlcm1pc3Npb24gbmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSyIgdWlkPSJhdWRpb3NlcnZlciIgLz4KKyAgICA8YXNzaWduLXBlcm1pc3Npb24gbmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlVQREFURV9ERVZJQ0VfU1RBVFMiIHVpZD0iYXVkaW9zZXJ2ZXIiIC8+CisgICAgPGFzc2lnbi1wZXJtaXNzaW9uIG5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5VUERBVEVfQVBQX09QU19TVEFUUyIgdWlkPSJhdWRpb3NlcnZlciIgLz4KKwogICAgIDxhc3NpZ24tcGVybWlzc2lvbiBuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1NVUkZBQ0VfRkxJTkdFUiIgdWlkPSJncmFwaGljcyIgLz4KIAogICAgIDwhLS0gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIHRoZSBsaWJyYXJpZXMgYXZhaWxhYmxlIGZvciBhcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvZGF0YS9mb250cy9BbmRyb2lkLm1rIGIvZGF0YS9mb250cy9BbmRyb2lkLm1rCmluZGV4IDMxODEwMTcuLmQyYmQxMDYgMTAwNjQ0Ci0tLSBhL2RhdGEvZm9udHMvQW5kcm9pZC5taworKysgYi9kYXRhL2ZvbnRzL0FuZHJvaWQubWsKQEAgLTE3LDExICsxNyw2IEBACiAKIExPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKIAotIyBVc2UgZnVsbCBOb3RvIFNhbnMgSmFwYW5lc2UgZm9udCBvbiBub24tc21hbGxlciBmb290cHJpbnRzCi1pZm5lcSAoJChTTUFMTEVSX0ZPTlRfRk9PVFBSSU5UKSx0cnVlKQotRk9OVF9OT1RPU0FOU19KUF9GVUxMIDo9IHRydWUKLWVuZGlmCi0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjcmVhdGUgc3ltbGluayBmb3IgZ2l2ZW4gZm9udAogIyAkKDEpOiBuZXcgZm9udCAkKDIpOiBsaW5rIHRhcmdldApAQCAtNTIsMjQgKzQ3LDYgQEAKICAgICBEcm9pZFNhbnMtQm9sZC50dGYKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRG8gbm90IGluY2x1ZGUgTW90b3lhIG9uIHNwYWNlLWNvbnN0cmFpbmVkIGRldmljZXMKLWlmbmVxICgkKFNNQUxMRVJfRk9OVF9GT09UUFJJTlQpLHRydWUpCi0jIERvIG5vdCBpbmNsdWRlIE1vdG95YSBpZiB3ZSBhcmUgaW5jbHVkaW5nIE5vdG8gU2FucyBKYXBhbmVzZQotaWZuZXEgKCQoRk9OVF9OT1RPU0FOU19KUF9GVUxMKSx0cnVlKQotCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBNVExtcjNtLnR0ZgotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfTU9EVUxFKQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVCkvZm9udHMKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWV4dHJhX2ZvbnRfZmlsZXMgKz0gTVRMbXIzbS50dGYKLQotZW5kaWYgICMgIUZPTlRfTk9UT1NBTlNfSlBfRlVMTAotZW5kaWYgICMgIVNNQUxMRVJfRk9OVF9GT09UUFJJTlQKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgVXNlIERyb2lkU2Fuc01vbm8gdG8gaGFuZyBleHRyYV9mb250X2ZpbGVzIG9uCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIExPQ0FMX01PRFVMRSA6PSBEcm9pZFNhbnNNb25vLnR0ZgpkaWZmIC0tZ2l0IGEvZGF0YS9mb250cy9mb250cy54bWwgYi9kYXRhL2ZvbnRzL2ZvbnRzLnhtbAppbmRleCAwZTY2Mzc0Li43MzFiZjQyIDEwMDY0NAotLS0gYS9kYXRhL2ZvbnRzL2ZvbnRzLnhtbAorKysgYi9kYXRhL2ZvbnRzL2ZvbnRzLnhtbApAQCAtMzMwLDI5ICszMzAsMjYgQEAKICAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zU3ltYm9scy1SZWd1bGFyLVN1YnNldHRlZC50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseSBsYW5nPSJ6aC1IYW5zIj4KLSAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zU0MtUmVndWxhci5vdGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIiBpbmRleD0iMiI+Tm90b1NhbnNDSkstUmVndWxhci50dGM8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseSBsYW5nPSJ6aC1IYW50Ij4KLSAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiPk5vdG9TYW5zVEMtUmVndWxhci5vdGY8L2ZvbnQ+CisgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIiBpbmRleD0iMyI+Tm90b1NhbnNDSkstUmVndWxhci50dGM8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+CiAgICAgPGZhbWlseSBsYW5nPSJqYSI+Ci0gICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ob3RvU2Fuc0pQLVJlZ3VsYXIub3RmPC9mb250PgorICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCIgaW5kZXg9IjAiPk5vdG9TYW5zQ0pLLVJlZ3VsYXIudHRjPC9mb250PgogICAgIDwvZmFtaWx5PgogICAgIDxmYW1pbHkgbGFuZz0ia28iPgotICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b1NhbnNLUi1SZWd1bGFyLm90ZjwvZm9udD4KKyAgICAgICAgPGZvbnQgd2VpZ2h0PSI0MDAiIHN0eWxlPSJub3JtYWwiIGluZGV4PSIxIj5Ob3RvU2Fuc0NKSy1SZWd1bGFyLnR0YzwvZm9udD4KICAgICA8L2ZhbWlseT4KICAgICA8ZmFtaWx5PgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+TmFudW1Hb3RoaWMudHRmPC9mb250PgogICAgIDwvZmFtaWx5PgotICAgIDxmYW1pbHkgbGFuZz0idW5kLVFhYWUiPgorICAgIDxmYW1pbHkgbGFuZz0idW5kLVpzeWUiPgogICAgICAgICA8Zm9udCB3ZWlnaHQ9IjQwMCIgc3R5bGU9Im5vcm1hbCI+Tm90b0NvbG9yRW1vamkudHRmPC9mb250PgogICAgIDwvZmFtaWx5PgogICAgIDxmYW1pbHk+CiAgICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5Ecm9pZFNhbnNGYWxsYmFjay50dGY8L2ZvbnQ+CiAgICAgPC9mYW1pbHk+Ci0gICAgPGZhbWlseSBsYW5nPSJqYSI+Ci0gICAgICAgIDxmb250IHdlaWdodD0iNDAwIiBzdHlsZT0ibm9ybWFsIj5NVExtcjNtLnR0ZjwvZm9udD4KLSAgICA8L2ZhbWlseT4KICAgICA8IS0tCiAgICAgICAgIFRhaSBMZSBhbmQgTW9uZ29saWFuIGFyZSBpbnRlbnRpb25hbGx5IGtlcHQgbGFzdCwgdG8gbWFrZSBzdXJlIHRoZXkgZG9uJ3Qgb3ZlcnJpZGUKICAgICAgICAgdGhlIEVhc3QgQXNpYW4gcHVuY3R1YXRpb24gZm9yIENoaW5lc2UuCmRpZmYgLS1naXQgYS9kb2NzL2h0bWwvdG9vbHMvaGVscC9pbmRleC5qZCBiL2RvY3MvaHRtbC90b29scy9oZWxwL2luZGV4LmpkCmluZGV4IGY5MGQwMjkuLjUzMjQ3ZDEgMTAwNjQ0Ci0tLSBhL2RvY3MvaHRtbC90b29scy9oZWxwL2luZGV4LmpkCisrKyBiL2RvY3MvaHRtbC90b29scy9oZWxwL2luZGV4LmpkCkBAIC0xMDAsMTAgKzEwMCw2IEBACiAgIDxkdD48YSBocmVmPSJ7QGRvY1Jvb3R9dG9vbHMvaGVscC90cmFjZXZpZXcuaHRtbCI+dHJhY2V2aWV3PC9hPjwvZHQ+CiAgICAgPGRkPlByb3ZpZGVzIGEgZ3JhcGhpY2FsIHZpZXdlciBmb3IgZXhlY3V0aW9uIGxvZ3Mgc2F2ZWQgYnkgeW91ciBhcHBsaWNhdGlvbi48L2RkPgogCi0gIDxkdD48YSBocmVmPSJ7QGRvY1Jvb3R9dG9vbHMvaGVscC9zeXN0cmFjZS5odG1sIj5TeXN0cmFjZTwvYT48L2R0PgotICAgIDxkZD5MZXRzIHlvdSBhbmFseXplIHRoZSBleGVjdXRpb24gb2YgeW91ciBhcHBsaWNhdGlvbiBpbiB0aGUgY29udGV4dCBvZiBzeXN0ZW0gcHJvY2Vzc2VzLAotICAgIHRvIGhlbHAgZGlhZ25vc2UgZGlzcGxheSBhbmQgcGVyZm9ybWFuY2UgaXNzdWVzLjwvZGQ+Ci0KIDwvZGw+CiAKIApkaWZmIC0tZ2l0IGEvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtSW5mby5qYXZhIGIvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtSW5mby5qYXZhCmluZGV4IDIyZDA2YzcuLjhjNDMyNTIgMTAwNjQ0Ci0tLSBhL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybUluZm8uamF2YQorKysgYi9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1JbmZvLmphdmEKQEAgLTE3LDYgKzE3LDcgQEAKIHBhY2thZ2UgYW5kcm9pZC5kcm07CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogCkBAIC01Miw3ICs1Myw3IEBACiAgICAgICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gImluZm9UeXBlOiAiICsgaW5mb1R5cGUgKyAiLCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaW1lVHlwZTogIiArIG1pbWVUeXBlICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YTogIiArIGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGE6ICIgKyBBcnJheXMudG9TdHJpbmcoZGF0YSk7CiAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQpAQCAtNzksNyArODAsNyBAQAogICAgICAgICBpZiAoIWlzVmFsaWQoKSkgewogICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9ICJpbmZvVHlwZTogIiArIGluZm9UeXBlICsgIiwiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWltZVR5cGU6ICIgKyBtaW1lVHlwZSArICIsIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRhdGE6ICIgKyBtRGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YTogIiArIEFycmF5cy50b1N0cmluZyhtRGF0YSk7CiAKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudC5qYXZhIGIvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtTWFuYWdlckNsaWVudC5qYXZhCmluZGV4IGMwNWVhMmUuLjcwNGYwY2UgMTAwNjQ0Ci0tLSBhL2RybS9qYXZhL2FuZHJvaWQvZHJtL0RybU1hbmFnZXJDbGllbnQuamF2YQorKysgYi9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1NYW5hZ2VyQ2xpZW50LmphdmEKQEAgLTM4LDEzICszOCwxNCBAQAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwogCiAvKioKICAqIFRoZSBtYWluIHByb2dyYW1taW5nIGludGVyZmFjZSBmb3IgdGhlIERSTSBmcmFtZXdvcmsuIEFuIGFwcGxpY2F0aW9uIG11c3QgaW5zdGFudGlhdGUgdGhpcyBjbGFzcwogICogdG8gYWNjZXNzIERSTSBhZ2VudHMgdGhyb3VnaCB0aGUgRFJNIGZyYW1ld29yay4KICAqCiAgKi8KLXB1YmxpYyBjbGFzcyBEcm1NYW5hZ2VyQ2xpZW50IHsKK3B1YmxpYyBjbGFzcyBEcm1NYW5hZ2VyQ2xpZW50IGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSB7CiAgICAgLyoqCiAgICAgICogSW5kaWNhdGVzIHRoYXQgYSByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsIG9yIHRoYXQgbm8gZXJyb3Igb2NjdXJyZWQuCiAgICAgICovCkBAIC02MSw2ICs2Miw3IEBACiAgICAgSGFuZGxlclRocmVhZCBtRXZlbnRUaHJlYWQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEcm1NYW5hZ2VyQ2xpZW50IjsKIAorICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtQ2xvc2VkID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKICAgICBwcml2YXRlIGZpbmFsIENsb3NlR3VhcmQgbUNsb3NlR3VhcmQgPSBDbG9zZUd1YXJkLmdldCgpOwogCiAgICAgc3RhdGljIHsKQEAgLTExNyw3ICsxMTksNiBAQAogCiAgICAgcHJpdmF0ZSBpbnQgbVVuaXF1ZUlkOwogICAgIHByaXZhdGUgbG9uZyBtTmF0aXZlQ29udGV4dDsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gbVJlbGVhc2VkOwogICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIEluZm9IYW5kbGVyIG1JbmZvSGFuZGxlcjsKICAgICBwcml2YXRlIEV2ZW50SGFuZGxlciBtRXZlbnRIYW5kbGVyOwpAQCAtMjYxLDQxICsyNjIsNDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgaWYgKG1DbG9zZUd1YXJkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQ2xvc2VHdWFyZC53YXJuSWZPcGVuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWxlYXNlKCk7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC53YXJuSWZPcGVuKCk7CisgICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgc2Vzc2lvbiBvZiBEcm1NYW5hZ2VyQ2xpZW50LgotICAgICAqCi0gICAgICogSXQgaXMgY29uc2lkZXJlZCBnb29kIHByYWN0aWNlIHRvIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiB0aGUge0BsaW5rIERybU1hbmFnZXJDbGllbnR9IG9iamVjdAotICAgICAqIGlzIG5vIGxvbmdlciBuZWVkZWQgaW4geW91ciBhcHBsaWNhdGlvbi4gQWZ0ZXIgcmVsZWFzZSgpIGlzIGNhbGxlZCwKLSAgICAgKiB7QGxpbmsgRHJtTWFuYWdlckNsaWVudH0gaXMgbm8gbG9uZ2VyIHVzYWJsZSBzaW5jZSBpdCBoYXMgbG9zdCBhbGwgb2YgaXRzIHJlcXVpcmVkIHJlc291cmNlLgorICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgc2Vzc2lvbiBvZgorICAgICAqIERybU1hbmFnZXJDbGllbnQuIEl0IGlzIGNvbnNpZGVyZWQgZ29vZCBwcmFjdGljZSB0byBjYWxsIHRoaXMgbWV0aG9kIHdoZW4KKyAgICAgKiB0aGUge0BsaW5rIERybU1hbmFnZXJDbGllbnR9IG9iamVjdCBpcyBubyBsb25nZXIgbmVlZGVkIGluIHlvdXIKKyAgICAgKiBhcHBsaWNhdGlvbi4gQWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB7QGxpbmsgRHJtTWFuYWdlckNsaWVudH0gaXMgbm8KKyAgICAgKiBsb25nZXIgdXNhYmxlIHNpbmNlIGl0IGhhcyBsb3N0IGFsbCBvZiBpdHMgcmVxdWlyZWQgcmVzb3VyY2UuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAgaWYgKG1SZWxlYXNlZCkgcmV0dXJuOwotICAgICAgICBtUmVsZWFzZWQgPSB0cnVlOwotCi0gICAgICAgIGlmIChtRXZlbnRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1FdmVudFRocmVhZC5xdWl0KCk7Ci0gICAgICAgICAgICBtRXZlbnRUaHJlYWQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtSW5mb0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbUluZm9UaHJlYWQucXVpdCgpOwotICAgICAgICAgICAgbUluZm9UaHJlYWQgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIG1FdmVudEhhbmRsZXIgPSBudWxsOwotICAgICAgICBtSW5mb0hhbmRsZXIgPSBudWxsOwotICAgICAgICBtT25FdmVudExpc3RlbmVyID0gbnVsbDsKLSAgICAgICAgbU9uSW5mb0xpc3RlbmVyID0gbnVsbDsKLSAgICAgICAgbU9uRXJyb3JMaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIF9yZWxlYXNlKG1VbmlxdWVJZCk7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CiAgICAgICAgIG1DbG9zZUd1YXJkLmNsb3NlKCk7CisgICAgICAgIGlmIChtQ2xvc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICBpZiAobUV2ZW50SGFuZGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUV2ZW50VGhyZWFkLnF1aXQoKTsKKyAgICAgICAgICAgICAgICBtRXZlbnRUaHJlYWQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1JbmZvSGFuZGxlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUluZm9UaHJlYWQucXVpdCgpOworICAgICAgICAgICAgICAgIG1JbmZvVGhyZWFkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1FdmVudEhhbmRsZXIgPSBudWxsOworICAgICAgICAgICAgbUluZm9IYW5kbGVyID0gbnVsbDsKKyAgICAgICAgICAgIG1PbkV2ZW50TGlzdGVuZXIgPSBudWxsOworICAgICAgICAgICAgbU9uSW5mb0xpc3RlbmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1PbkVycm9yTGlzdGVuZXIgPSBudWxsOworICAgICAgICAgICAgX3JlbGVhc2UobVVuaXF1ZUlkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjY2xvc2UoKX0uCisgICAgICovCisgICAgQERlcHJlY2F0ZWQKKyAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgeworICAgICAgICBjbG9zZSgpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvZHJtL2phdmEvYW5kcm9pZC9kcm0vRHJtUmlnaHRzLmphdmEgYi9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1SaWdodHMuamF2YQppbmRleCBhOWI0ZjA1Li44NzQ3Zjc3IDEwMDY0NAotLS0gYS9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1SaWdodHMuamF2YQorKysgYi9kcm0vamF2YS9hbmRyb2lkL2RybS9Ecm1SaWdodHMuamF2YQpAQCAtMTgsNiArMTgsNyBAQAogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAogLyoqCiAgKiBBbiBlbnRpdHkgY2xhc3MgdGhhdCB3cmFwcyB0aGUgbGljZW5zZSBpbmZvcm1hdGlvbiByZXRyaWV2ZWQgZnJvbSB0aGUgb25saW5lIERSTSBzZXJ2ZXIuCkBAIC0xMDMsNyArMTA0LDcgQEAKICAgICAgICAgbU1pbWVUeXBlID0gbWltZVR5cGU7CiAgICAgICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gIm1pbWVUeXBlOiAiICsgbU1pbWVUeXBlICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YTogIiArIG1EYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhOiAiICsgQXJyYXlzLnRvU3RyaW5nKG1EYXRhKTsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyNyw3ICsxMjgsNyBAQAogCiAgICAgICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbXNnID0gIm1pbWVUeXBlOiAiICsgbU1pbWVUeXBlICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YTogIiArIG1EYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhOiAiICsgQXJyYXlzLnRvU3RyaW5nKG1EYXRhKTsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeS5qYXZhCmluZGV4IGRhNTg4ODQuLjQ0N2E0YzQgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5LmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0JpdG1hcEZhY3RvcnkuamF2YQpAQCAtMTYzLDggKzE2MywxMSBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpblByZW11bHRpcGxpZWQ7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIElmIGRpdGhlciBpcyB0cnVlLCB0aGUgZGVjb2RlciB3aWxsIGF0dGVtcHQgdG8gZGl0aGVyIHRoZSBkZWNvZGVkCi0gICAgICAgICAqIGltYWdlLgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBBcyBvZiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059LCB0aGlzIGlzCisgICAgICAgICAqIGlnbm9yZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEluIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTX0gYW5kIGJlbG93LCBpZiBkaXRoZXIgaXMKKyAgICAgICAgICogdHJ1ZSwgdGhlIGRlY29kZXIgd2lsbCBhdHRlbXB0IHRvIGRpdGhlciB0aGUgZGVjb2RlZCBpbWFnZS4KICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluRGl0aGVyOwogCkBAIC0zMDgsNyArMzExLDExIEBACiAgICAgICAgIHB1YmxpYyBib29sZWFuIGluSW5wdXRTaGFyZWFibGU7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIElmIGluUHJlZmVyUXVhbGl0eU92ZXJTcGVlZCBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGRlY29kZXIgd2lsbCB0cnkgdG8KKyAgICAgICAgICogQGRlcHJlY2F0ZWQgQXMgb2Yge0BsaW5rIGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUyNOfSwgdGhpcyBpcworICAgICAgICAgKiBpZ25vcmVkLiAgVGhlIG91dHB1dCB3aWxsIGFsd2F5cyBiZSBoaWdoIHF1YWxpdHkuCisgICAgICAgICAqCisgICAgICAgICAqIEluIHtAbGluayBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMjTX0gYW5kIGJlbG93LCBpZgorICAgICAgICAgKiBpblByZWZlclF1YWxpdHlPdmVyU3BlZWQgaXMgc2V0IHRvIHRydWUsIHRoZSBkZWNvZGVyIHdpbGwgdHJ5IHRvCiAgICAgICAgICAqIGRlY29kZSB0aGUgcmVjb25zdHJ1Y3RlZCBpbWFnZSB0byBhIGhpZ2hlciBxdWFsaXR5IGV2ZW4gYXQgdGhlCiAgICAgICAgICAqIGV4cGVuc2Ugb2YgdGhlIGRlY29kaW5nIHNwZWVkLiBDdXJyZW50bHkgdGhlIGZpZWxkIG9ubHkgYWZmZWN0cyBKUEVHCiAgICAgICAgICAqIGRlY29kZSwgaW4gdGhlIGNhc2Ugb2Ygd2hpY2ggYSBtb3JlIGFjY3VyYXRlLCBidXQgc2xpZ2h0bHkgc2xvd2VyLApAQCAtMzQ3LDkgKzM1NCwxMCBAQAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGJ5dGVbXSBpblRlbXBTdG9yYWdlOwogCi0gICAgICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgcmVxdWVzdENhbmNlbCgpOwotCiAgICAgICAgIC8qKgorICAgICAgICAgKiBAZGVwcmVjYXRlZCBBcyBvZiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059LCBzZWUKKyAgICAgICAgICogY29tbWVudHMgb24ge0BsaW5rICNyZXF1ZXN0Q2FuY2VsRGVjb2RlKCl9LgorICAgICAgICAgKgogICAgICAgICAgKiBGbGFnIHRvIGluZGljYXRlIHRoYXQgY2FuY2VsIGhhcyBiZWVuIGNhbGxlZCBvbiB0aGlzIG9iamVjdC4gIFRoaXMKICAgICAgICAgICogaXMgdXNlZnVsIGlmIHRoZXJlJ3MgYW4gaW50ZXJtZWRpYXJ5IHRoYXQgd2FudHMgdG8gZmlyc3QgZGVjb2RlIHRoZQogICAgICAgICAgKiBib3VuZHMgYW5kIHRoZW4gZGVjb2RlIHRoZSBpbWFnZS4gIEluIHRoYXQgY2FzZSB0aGUgaW50ZXJtZWRpYXJ5CkBAIC0zNTksMTYgKzM2NywxOSBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtQ2FuY2VsOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQgd2hpbGUgdGhpcyBvcHRpb25zIG9iamVjdCBpcwotICAgICAgICAgKiAgaW5zaWRlIGEgZGVjb2RlLi4uIGNhbGwuIENhbGxpbmcgdGhpcyB3aWxsIG5vdGlmeSB0aGUgZGVjb2RlciB0aGF0Ci0gICAgICAgICAqICBpdCBzaG91bGQgY2FuY2VsIGl0cyBvcGVyYXRpb24uIFRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gY2FuY2VsCi0gICAgICAgICAqICB0aGUgZGVjb2RlLCBidXQgaWYgaXQgZG9lcywgdGhlIGRlY29kZXIuLi4gb3BlcmF0aW9uIHdpbGwgcmV0dXJuCi0gICAgICAgICAqICBudWxsLCBvciBpZiBpbkp1c3REZWNvZGVCb3VuZHMgaXMgdHJ1ZSwgd2lsbCBzZXQgb3V0V2lkdGgvb3V0SGVpZ2h0CisgICAgICAgICAqICBAZGVwcmVjYXRlZCBBcyBvZiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI059LCB0aGlzCisgICAgICAgICAqICB3aWxsIG5vdCBhZmZlY3QgdGhlIGRlY29kZSwgdGhvdWdoIGl0IHdpbGwgc3RpbGwgc2V0IG1DYW5jZWwuCisgICAgICAgICAqCisgICAgICAgICAqICBJbiB7QGxpbmsgYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTI019IGFuZCBiZWxvdywgaWYgdGhpcyBjYW4KKyAgICAgICAgICogIGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkIHdoaWxlIHRoaXMgb3B0aW9ucyBvYmplY3QgaXMgaW5zaWRlCisgICAgICAgICAqICBhIGRlY29kZS4uLiBjYWxsLiBDYWxsaW5nIHRoaXMgd2lsbCBub3RpZnkgdGhlIGRlY29kZXIgdGhhdCBpdAorICAgICAgICAgKiAgc2hvdWxkIGNhbmNlbCBpdHMgb3BlcmF0aW9uLiBUaGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIGNhbmNlbCB0aGUKKyAgICAgICAgICogIGRlY29kZSwgYnV0IGlmIGl0IGRvZXMsIHRoZSBkZWNvZGVyLi4uIG9wZXJhdGlvbiB3aWxsIHJldHVybiBudWxsLAorICAgICAgICAgKiAgb3IgaWYgaW5KdXN0RGVjb2RlQm91bmRzIGlzIHRydWUsIHdpbGwgc2V0IG91dFdpZHRoL291dEhlaWdodAogICAgICAgICAgKiAgdG8gLTEKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RDYW5jZWxEZWNvZGUoKSB7CiAgICAgICAgICAgICBtQ2FuY2VsID0gdHJ1ZTsKLSAgICAgICAgICAgIHJlcXVlc3RDYW5jZWwoKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0NhbnZhcy5qYXZhCmluZGV4IDVhY2MxYTMuLjFjYzUzNDYgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9DYW52YXMuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzLmphdmEKQEAgLTY1NCw2ICs2NTQsMTIgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm4sIGluIGN0bSwgdGhlIGN1cnJlbnQgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBUaGlzIGRvZXMgbm90IGFsdGVyCiAgICAgICogdGhlIG1hdHJpeCBpbiB0aGUgY2FudmFzLCBidXQganVzdCByZXR1cm5zIGEgY29weSBvZiBpdC4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIHtAbGluayAjaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkgSGFyZHdhcmUgYWNjZWxlcmF0ZWR9IGNhbnZhc2VzIG1heSBoYXZlIGFueQorICAgICAqIG1hdHJpeCB3aGVuIHBhc3NlZCB0byBhIFZpZXcgb3IgRHJhd2FibGUsIGFzIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hlcmUgaW4gdGhlCisgICAgICogaGllcmFyY2h5IHN1Y2ggY2FudmFzZXMgYXJlIGNyZWF0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIGluIHN1Y2ggY2FzZXMgdG8gZWl0aGVyIGRyYXcgY29udGVudHMKKyAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGN1cnJlbnQgbWF0cml4LCBvciB0byB0cmFjayByZWxldmFudCB0cmFuc2Zvcm0gc3RhdGUgb3V0c2lkZSBvZiB0aGUKKyAgICAgKiBjYW52YXMuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCBnZXRNYXRyaXgoQE5vbk51bGwgTWF0cml4IGN0bSkgewpAQCAtNjYzLDYgKzY2OSwxMiBAQAogICAgIC8qKgogICAgICAqIFJldHVybiBhIG5ldyBtYXRyaXggd2l0aCBhIGNvcHkgb2YgdGhlIGNhbnZhcycgY3VycmVudCB0cmFuc2Zvcm1hdGlvbgogICAgICAqIG1hdHJpeC4KKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIHtAbGluayAjaXNIYXJkd2FyZUFjY2VsZXJhdGVkKCkgSGFyZHdhcmUgYWNjZWxlcmF0ZWR9IGNhbnZhc2VzIG1heSBoYXZlIGFueQorICAgICAqIG1hdHJpeCB3aGVuIHBhc3NlZCB0byBhIFZpZXcgb3IgRHJhd2FibGUsIGFzIGl0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQgd2hlcmUgaW4gdGhlCisgICAgICogaGllcmFyY2h5IHN1Y2ggY2FudmFzZXMgYXJlIGNyZWF0ZWQuIEl0IGlzIHJlY29tbWVuZGVkIGluIHN1Y2ggY2FzZXMgdG8gZWl0aGVyIGRyYXcgY29udGVudHMKKyAgICAgKiBpcnJlc3BlY3RpdmUgb2YgdGhlIGN1cnJlbnQgbWF0cml4LCBvciB0byB0cmFjayByZWxldmFudCB0cmFuc2Zvcm0gc3RhdGUgb3V0c2lkZSBvZiB0aGUKKyAgICAgKiBjYW52YXMuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgZmluYWwgQE5vbk51bGwgTWF0cml4IGdldE1hdHJpeCgpIHsKQEAgLTgxMiw2ICs4MjQsNyBAQAogICAgICAqIEBkZXByZWNhdGVkIFVubGlrZSBhbGwgb3RoZXIgY2xpcCBjYWxscyB0aGlzIEFQSSBkb2VzIG5vdCByZXNwZWN0IHRoZQogICAgICAqICAgICAgICAgICAgIGN1cnJlbnQgbWF0cml4LiBVc2Uge0BsaW5rICNjbGlwUmVjdChSZWN0KX0gYXMgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVnaW9uKEBOb25OdWxsIFJlZ2lvbiByZWdpb24sIEBOb25OdWxsIFJlZ2lvbi5PcCBvcCkgewogICAgICAgICByZXR1cm4gbmF0aXZlX2NsaXBSZWdpb24obU5hdGl2ZUNhbnZhc1dyYXBwZXIsIHJlZ2lvbi5uaSgpLCBvcC5uYXRpdmVJbnQpOwogICAgIH0KQEAgLTgyOSw2ICs4NDIsNyBAQAogICAgICAqIEBkZXByZWNhdGVkIFVubGlrZSBhbGwgb3RoZXIgY2xpcCBjYWxscyB0aGlzIEFQSSBkb2VzIG5vdCByZXNwZWN0IHRoZQogICAgICAqICAgICAgICAgICAgIGN1cnJlbnQgbWF0cml4LiBVc2Uge0BsaW5rICNjbGlwUmVjdChSZWN0KX0gYXMgYW4gYWx0ZXJuYXRpdmUuCiAgICAgICovCisgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgYm9vbGVhbiBjbGlwUmVnaW9uKEBOb25OdWxsIFJlZ2lvbiByZWdpb24pIHsKICAgICAgICAgcmV0dXJuIGNsaXBSZWdpb24ocmVnaW9uLCBSZWdpb24uT3AuSU5URVJTRUNUKTsKICAgICB9CkBAIC0xMDc5LDExICsxMDkzLDEyIEBACiAgICAgICogICAgICAgICAgICAgICAgIChjb3VudCA+PiAyKS4KICAgICAgKiBAcGFyYW0gcGFpbnQgICAgVGhlIHBhaW50IHVzZWQgdG8gZHJhdyB0aGUgcG9pbnRzCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgZHJhd0xpbmVzKEBTaXplKG1pbj00LG11bHRpcGxlPTIpIGZsb2F0W10gcHRzLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsIFBhaW50IHBhaW50KSB7CisgICAgcHVibGljIHZvaWQgZHJhd0xpbmVzKEBTaXplKG11bHRpcGxlPTQpIEBOb25OdWxsIGZsb2F0W10gcHRzLCBpbnQgb2Zmc2V0LCBpbnQgY291bnQsCisgICAgICAgICAgICBATm9uTnVsbCBQYWludCBwYWludCkgewogICAgICAgICBuYXRpdmVfZHJhd0xpbmVzKG1OYXRpdmVDYW52YXNXcmFwcGVyLCBwdHMsIG9mZnNldCwgY291bnQsIHBhaW50LmdldE5hdGl2ZUluc3RhbmNlKCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGRyYXdMaW5lcyhAU2l6ZShtaW49NCxtdWx0aXBsZT0yKSBATm9uTnVsbCBmbG9hdFtdIHB0cywgQE5vbk51bGwgUGFpbnQgcGFpbnQpIHsKKyAgICBwdWJsaWMgdm9pZCBkcmF3TGluZXMoQFNpemUobXVsdGlwbGU9NCkgQE5vbk51bGwgZmxvYXRbXSBwdHMsIEBOb25OdWxsIFBhaW50IHBhaW50KSB7CiAgICAgICAgIGRyYXdMaW5lcyhwdHMsIDAsIHB0cy5sZW5ndGgsIHBhaW50KTsKICAgICB9CiAKQEAgLTE4MjksMTYgKzE4NDQsMTYgQEAKICAgICAgKiBEcmF3IHRoZSB0ZXh0IGluIHRoZSBhcnJheSwgd2l0aCBlYWNoIGNoYXJhY3RlcidzIG9yaWdpbiBzcGVjaWZpZWQgYnkKICAgICAgKiB0aGUgcG9zIGFycmF5LgogICAgICAqCi0gICAgICogVGhpcyBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBnbHlwaCBjb21wb3NpdGlvbiBhbmQgZGVjb21wb3NpdGlvbiBhbmQKLSAgICAgKiBzaG91bGQgdGhlcmVmb3JlIG5vdCBiZSB1c2VkIHRvIHJlbmRlciBjb21wbGV4IHNjcmlwdHMuIEl0IGFsc28gZG9lc24ndAotICAgICAqIGhhbmRsZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgKGVnIGVtb2ppKS4KLSAgICAgKgogICAgICAqIEBwYXJhbSB0ZXh0ICAgICBUaGUgdGV4dCB0byBiZSBkcmF3bgogICAgICAqIEBwYXJhbSBpbmRleCAgICBUaGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciB0byBkcmF3CiAgICAgICogQHBhcmFtIGNvdW50ICAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBkcmF3LCBzdGFydGluZyBmcm9tIGluZGV4LgogICAgICAqIEBwYXJhbSBwb3MgICAgICBBcnJheSBvZiBbeCx5XSBwb3NpdGlvbnMsIHVzZWQgdG8gcG9zaXRpb24gZWFjaAogICAgICAqICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIKICAgICAgKiBAcGFyYW0gcGFpbnQgICAgVGhlIHBhaW50IHVzZWQgZm9yIHRoZSB0ZXh0IChlLmcuIGNvbG9yLCBzaXplLCBzdHlsZSkKKyAgICAgKgorICAgICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgZ2x5cGggY29tcG9zaXRpb24gYW5kIGRlY29tcG9zaXRpb24gYW5kCisgICAgICogc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgdXNlZCB0byByZW5kZXIgY29tcGxleCBzY3JpcHRzLiBJdCBhbHNvIGRvZXNuJ3QKKyAgICAgKiBoYW5kbGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIChlZyBlbW9qaSkuCiAgICAgICovCiAgICAgQERlcHJlY2F0ZWQKICAgICBwdWJsaWMgdm9pZCBkcmF3UG9zVGV4dChATm9uTnVsbCBjaGFyW10gdGV4dCwgaW50IGluZGV4LCBpbnQgY291bnQsCkBAIC0xODU2LDEzICsxODcxLDEzIEBACiAgICAgICogRHJhdyB0aGUgdGV4dCBpbiB0aGUgYXJyYXksIHdpdGggZWFjaCBjaGFyYWN0ZXIncyBvcmlnaW4gc3BlY2lmaWVkIGJ5CiAgICAgICogdGhlIHBvcyBhcnJheS4KICAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgZ2x5cGggY29tcG9zaXRpb24gYW5kIGRlY29tcG9zaXRpb24gYW5kCi0gICAgICogc2hvdWxkIHRoZXJlZm9yZSBub3QgYmUgdXNlZCB0byByZW5kZXIgY29tcGxleCBzY3JpcHRzLiBJdCBhbHNvIGRvZXNuJ3QKLSAgICAgKiBoYW5kbGUgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIChlZyBlbW9qaSkuCi0gICAgICoKICAgICAgKiBAcGFyYW0gdGV4dCAgVGhlIHRleHQgdG8gYmUgZHJhd24KICAgICAgKiBAcGFyYW0gcG9zICAgQXJyYXkgb2YgW3gseV0gcG9zaXRpb25zLCB1c2VkIHRvIHBvc2l0aW9uIGVhY2ggY2hhcmFjdGVyCiAgICAgICogQHBhcmFtIHBhaW50IFRoZSBwYWludCB1c2VkIGZvciB0aGUgdGV4dCAoZS5nLiBjb2xvciwgc2l6ZSwgc3R5bGUpCisgICAgICoKKyAgICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IGdseXBoIGNvbXBvc2l0aW9uIGFuZCBkZWNvbXBvc2l0aW9uIGFuZAorICAgICAqIHNob3VsZCB0aGVyZWZvcmUgbm90IGJlIHVzZWQgdG8gcmVuZGVyIGNvbXBsZXggc2NyaXB0cy4gSXQgYWxzbyBkb2Vzbid0CisgICAgICogaGFuZGxlIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyAoZWcgZW1vamkpLgogICAgICAqLwogICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIHZvaWQgZHJhd1Bvc1RleHQoQE5vbk51bGwgU3RyaW5nIHRleHQsIEBOb25OdWxsIEBTaXplKG11bHRpcGxlPTIpIGZsb2F0W10gcG9zLApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0ZvbnRGYW1pbHkuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Gb250RmFtaWx5LmphdmEKaW5kZXggYjhiN2U3Ni4uNjMwOWVkMyAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL0ZvbnRGYW1pbHkuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvRm9udEZhbWlseS5qYXZhCkBAIC01OCwxMiArNTgsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGFkZEZvbnQoU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgcmV0dXJuIG5BZGRGb250KG1OYXRpdmVQdHIsIHBhdGgpOworICAgIHB1YmxpYyBib29sZWFuIGFkZEZvbnQoU3RyaW5nIHBhdGgsIGludCB0dGNJbmRleCkgeworICAgICAgICByZXR1cm4gbkFkZEZvbnQobU5hdGl2ZVB0ciwgcGF0aCwgdHRjSW5kZXgpOwogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIGFkZEZvbnRXZWlnaHRTdHlsZShTdHJpbmcgcGF0aCwgaW50IHdlaWdodCwgYm9vbGVhbiBzdHlsZSkgewotICAgICAgICByZXR1cm4gbkFkZEZvbnRXZWlnaHRTdHlsZShtTmF0aXZlUHRyLCBwYXRoLCB3ZWlnaHQsIHN0eWxlKTsKKyAgICBwdWJsaWMgYm9vbGVhbiBhZGRGb250V2VpZ2h0U3R5bGUoU3RyaW5nIHBhdGgsIGludCB0dGNJbmRleCwgaW50IHdlaWdodCwgYm9vbGVhbiBzdHlsZSkgeworICAgICAgICByZXR1cm4gbkFkZEZvbnRXZWlnaHRTdHlsZShtTmF0aXZlUHRyLCBwYXRoLCB0dGNJbmRleCwgd2VpZ2h0LCBzdHlsZSk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gYWRkRm9udEZyb21Bc3NldChBc3NldE1hbmFnZXIgbWdyLCBTdHJpbmcgcGF0aCkgewpAQCAtNzIsOSArNzIsOSBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbkNyZWF0ZUZhbWlseShTdHJpbmcgbGFuZywgaW50IHZhcmlhbnQpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5VbnJlZkZhbWlseShsb25nIG5hdGl2ZVB0cik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkFkZEZvbnQobG9uZyBuYXRpdmVGYW1pbHksIFN0cmluZyBwYXRoKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuQWRkRm9udChsb25nIG5hdGl2ZUZhbWlseSwgU3RyaW5nIHBhdGgsIGludCB0dGNJbmRleCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkFkZEZvbnRXZWlnaHRTdHlsZShsb25nIG5hdGl2ZUZhbWlseSwgU3RyaW5nIHBhdGgsCi0gICAgICAgICAgICBpbnQgd2VpZ2h0LCBib29sZWFuIGlzSXRhbGljKTsKKyAgICAgICAgICAgIGludCB0dGNJbmRleCwgaW50IHdlaWdodCwgYm9vbGVhbiBpc0l0YWxpYyk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkFkZEZvbnRGcm9tQXNzZXQobG9uZyBuYXRpdmVGYW1pbHksIEFzc2V0TWFuYWdlciBtZ3IsCiAgICAgICAgICAgICBTdHJpbmcgcGF0aCk7CiB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvRm9udExpc3RQYXJzZXIuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Gb250TGlzdFBhcnNlci5qYXZhCmluZGV4IDk3MDgxZjkuLjc3NGY2YjggMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Gb250TGlzdFBhcnNlci5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9Gb250TGlzdFBhcnNlci5qYXZhCkBAIC00MywxMiArNDMsMTQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZvbnQgewotICAgICAgICBGb250KFN0cmluZyBmb250TmFtZSwgaW50IHdlaWdodCwgYm9vbGVhbiBpc0l0YWxpYykgeworICAgICAgICBGb250KFN0cmluZyBmb250TmFtZSwgaW50IHR0Y0luZGV4LCBpbnQgd2VpZ2h0LCBib29sZWFuIGlzSXRhbGljKSB7CiAgICAgICAgICAgICB0aGlzLmZvbnROYW1lID0gZm9udE5hbWU7CisgICAgICAgICAgICB0aGlzLnR0Y0luZGV4ID0gdHRjSW5kZXg7CiAgICAgICAgICAgICB0aGlzLndlaWdodCA9IHdlaWdodDsKICAgICAgICAgICAgIHRoaXMuaXNJdGFsaWMgPSBpc0l0YWxpYzsKICAgICAgICAgfQogICAgICAgICBwdWJsaWMgU3RyaW5nIGZvbnROYW1lOworICAgICAgICBwdWJsaWMgaW50IHR0Y0luZGV4OwogICAgICAgICBwdWJsaWMgaW50IHdlaWdodDsKICAgICAgICAgcHVibGljIGJvb2xlYW4gaXNJdGFsaWM7CiAgICAgfQpAQCAtMTEyLDEyICsxMTQsMTQgQEAKICAgICAgICAgICAgIGlmIChwYXJzZXIuZ2V0RXZlbnRUeXBlKCkgIT0gWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcpIGNvbnRpbnVlOwogICAgICAgICAgICAgU3RyaW5nIHRhZyA9IHBhcnNlci5nZXROYW1lKCk7CiAgICAgICAgICAgICBpZiAodGFnLmVxdWFscygiZm9udCIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHR0Y0luZGV4U3RyID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJpbmRleCIpOworICAgICAgICAgICAgICAgIGludCB0dGNJbmRleCA9IHR0Y0luZGV4U3RyID09IG51bGwgPyAwIDogSW50ZWdlci5wYXJzZUludCh0dGNJbmRleFN0cik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHdlaWdodFN0ciA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAid2VpZ2h0Iik7CiAgICAgICAgICAgICAgICAgaW50IHdlaWdodCA9IHdlaWdodFN0ciA9PSBudWxsID8gNDAwIDogSW50ZWdlci5wYXJzZUludCh3ZWlnaHRTdHIpOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNJdGFsaWMgPSAiaXRhbGljIi5lcXVhbHMocGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJzdHlsZSIpKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXJzZXIubmV4dFRleHQoKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZnVsbEZpbGVuYW1lID0gIi9zeXN0ZW0vZm9udHMvIiArIGZpbGVuYW1lOwotICAgICAgICAgICAgICAgIGZvbnRzLmFkZChuZXcgRm9udChmdWxsRmlsZW5hbWUsIHdlaWdodCwgaXNJdGFsaWMpKTsKKyAgICAgICAgICAgICAgICBmb250cy5hZGQobmV3IEZvbnQoZnVsbEZpbGVuYW1lLCB0dGNJbmRleCwgd2VpZ2h0LCBpc0l0YWxpYykpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBza2lwKHBhcnNlcik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvVHlwZWZhY2UuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCmluZGV4IDdlYjU1ODQuLjEyOTQzMjMgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9UeXBlZmFjZS5qYXZhCkBAIC0yMDksNyArMjA5LDcgQEAKICAgICBwdWJsaWMgc3RhdGljIFR5cGVmYWNlIGNyZWF0ZUZyb21GaWxlKFN0cmluZyBwYXRoKSB7CiAgICAgICAgIGlmIChzRmFsbGJhY2tGb250cyAhPSBudWxsKSB7CiAgICAgICAgICAgICBGb250RmFtaWx5IGZvbnRGYW1pbHkgPSBuZXcgRm9udEZhbWlseSgpOwotICAgICAgICAgICAgaWYgKGZvbnRGYW1pbHkuYWRkRm9udChwYXRoKSkgeworICAgICAgICAgICAgaWYgKGZvbnRGYW1pbHkuYWRkRm9udChwYXRoLCAwIC8qIHR0Y0luZGV4ICovKSkgewogICAgICAgICAgICAgICAgIEZvbnRGYW1pbHlbXSBmYW1pbGllcyA9IHsgZm9udEZhbWlseSB9OwogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVGcm9tRmFtaWxpZXNXaXRoRGVmYXVsdChmYW1pbGllcyk7CiAgICAgICAgICAgICB9CkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBGb250RmFtaWx5IG1ha2VGYW1pbHlGcm9tUGFyc2VkKEZvbnRMaXN0UGFyc2VyLkZhbWlseSBmYW1pbHkpIHsKICAgICAgICAgRm9udEZhbWlseSBmb250RmFtaWx5ID0gbmV3IEZvbnRGYW1pbHkoZmFtaWx5LmxhbmcsIGZhbWlseS52YXJpYW50KTsKICAgICAgICAgZm9yIChGb250TGlzdFBhcnNlci5Gb250IGZvbnQgOiBmYW1pbHkuZm9udHMpIHsKLSAgICAgICAgICAgIGZvbnRGYW1pbHkuYWRkRm9udFdlaWdodFN0eWxlKGZvbnQuZm9udE5hbWUsIGZvbnQud2VpZ2h0LCBmb250LmlzSXRhbGljKTsKKyAgICAgICAgICAgIGZvbnRGYW1pbHkuYWRkRm9udFdlaWdodFN0eWxlKGZvbnQuZm9udE5hbWUsIGZvbnQudHRjSW5kZXgsIGZvbnQud2VpZ2h0LCBmb250LmlzSXRhbGljKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZm9udEZhbWlseTsKICAgICB9CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0ZWRWZWN0b3JEcmF3YWJsZS5qYXZhIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0FuaW1hdGVkVmVjdG9yRHJhd2FibGUuamF2YQppbmRleCAxODU3MzQ1Li44NGNhNTQ2IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvQW5pbWF0ZWRWZWN0b3JEcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9BbmltYXRlZFZlY3RvckRyYXdhYmxlLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvclNldDsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvci5BbmltYXRvckxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3Q7CkBAIC0xNDAsNiArMTQxLDE1IEBACiAgICAgLyoqIExvY2FsLCBtdXRhYmxlIGFuaW1hdG9yIHNldC4gKi8KICAgICBwcml2YXRlIGZpbmFsIEFuaW1hdG9yU2V0IG1BbmltYXRvclNldCA9IG5ldyBBbmltYXRvclNldCgpOwogCisKKyAgICBwcml2YXRlIGZpbmFsIFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lciBtVXBkYXRlTGlzdGVuZXIgPQorICAgICAgICAgICAgbmV3IFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvblVwZGF0ZShWYWx1ZUFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlU2VsZigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKICAgICAvKioKICAgICAgKiBUaGUgcmVzb3VyY2VzIGFnYWluc3Qgd2hpY2ggdGhpcyBkcmF3YWJsZSB3YXMgY3JlYXRlZC4gVXNlZCB0byBhdHRlbXB0CiAgICAgICogdG8gaW5mbGF0ZSBhbmltYXRvcnMgaWYgYXBwbHlUaGVtZSgpIGRvZXNuJ3QgZ2V0IGNhbGxlZC4KQEAgLTIwMSw5ICsyMTEsNiBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBtQW5pbWF0ZWRWZWN0b3JTdGF0ZS5tVmVjdG9yRHJhd2FibGUuZHJhdyhjYW52YXMpOwotICAgICAgICBpZiAoaXNTdGFydGVkKCkpIHsKLSAgICAgICAgICAgIGludmFsaWRhdGVTZWxmKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTQ4Niw2ICs0OTMsNyBAQAogICAgICAgICAgKiAgICAgICAgICAgIGFuaW1hdG9ycywgb3Ige0Bjb2RlIG51bGx9IGlmIG5vdCBhdmFpbGFibGUKICAgICAgICAgICovCiAgICAgICAgIHB1YmxpYyB2b2lkIHByZXBhcmVMb2NhbEFuaW1hdG9ycyhATm9uTnVsbCBBbmltYXRvclNldCBhbmltYXRvclNldCwKKyAgICAgICAgICAgICAgICBATm9uTnVsbCBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIgdXBkYXRlTGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgQE51bGxhYmxlIFJlc291cmNlcyByZXMpIHsKICAgICAgICAgICAgIC8vIENoZWNrIGZvciB1bmluZmxhdGVkIGFuaW1hdG9ycy4gV2UgY2FuIHJlbW92ZSB0aGlzIGFmdGVyIHdlIGFkZAogICAgICAgICAgICAgLy8gc3VwcG9ydCBmb3IgQW5pbWF0b3IuYXBwbHlUaGVtZSgpLiBTZWUgY29tbWVudHMgaW4gaW5mbGF0ZSgpLgpAQCAtNTExLDYgKzUxOSwxNyBAQAogICAgICAgICAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBuZXh0QW5pbSA9IHByZXBhcmVMb2NhbEFuaW1hdG9yKGkpOwogICAgICAgICAgICAgICAgICAgICBidWlsZGVyLndpdGgobmV4dEFuaW0pOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFNldHVwIGEgdmFsdWUgYW5pbWF0b3IgdG8gZ2V0IGFuaW1hdGlvbiB1cGRhdGUgY2FsbGJhY2tzLgorICAgICAgICAgICAgICAgIGxvbmcgdG90YWxEdXJhdGlvbiA9IGFuaW1hdG9yU2V0LmdldFRvdGFsRHVyYXRpb24oKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUFuaW1hdG9yIHVwZGF0ZUFuaW0gPSBWYWx1ZUFuaW1hdG9yLm9mRmxvYXQoMGYsIDFmKTsKKyAgICAgICAgICAgICAgICBpZiAodG90YWxEdXJhdGlvbiA9PSBWYWx1ZUFuaW1hdG9yLkRVUkFUSU9OX0lORklOSVRFKSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUFuaW0uc2V0UmVwZWF0Q291bnQoVmFsdWVBbmltYXRvci5JTkZJTklURSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW5pbS5zZXREdXJhdGlvbih0b3RhbER1cmF0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXBkYXRlQW5pbS5hZGRVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgYnVpbGRlci53aXRoKHVwZGF0ZUFuaW0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTYwMyw3ICs2MjIsNyBAQAogICAgIEBOb25OdWxsCiAgICAgcHJpdmF0ZSB2b2lkIGVuc3VyZUFuaW1hdG9yU2V0KCkgewogICAgICAgICBpZiAoIW1IYXNBbmltYXRvclNldCkgewotICAgICAgICAgICAgbUFuaW1hdGVkVmVjdG9yU3RhdGUucHJlcGFyZUxvY2FsQW5pbWF0b3JzKG1BbmltYXRvclNldCwgbVJlcyk7CisgICAgICAgICAgICBtQW5pbWF0ZWRWZWN0b3JTdGF0ZS5wcmVwYXJlTG9jYWxBbmltYXRvcnMobUFuaW1hdG9yU2V0LCBtVXBkYXRlTGlzdGVuZXIsIG1SZXMpOwogICAgICAgICAgICAgbUhhc0FuaW1hdG9yU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIG1SZXMgPSBudWxsOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0ljb24uYWlkbApzaW1pbGFyaXR5IGluZGV4IDY3JQpjb3B5IGZyb20gY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbApjb3B5IHRvIGdyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9JY29uLmFpZGwKaW5kZXggYTdkNWNkYS4uYjgyY2ZjNCAxMDA2NDQKLS0tIGEvY29yZS9qYXZhL2FuZHJvaWQvdmlldy9JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIuYWlkbAorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvSWNvbi5haWRsCkBAIC0xNCwxNCArMTQsNiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBhbmRyb2lkLnZpZXc7CitwYWNrYWdlIGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGU7CiAKLS8qKgotICAqIExpc3RlbmVyIGZvciBzaG93aW5nL2hpZGluZyBvZiB0aGUgZG9jayBkaXZpZGVyLiBXaWxsIGZpcmUgd2hlbiBhbiBhcHAgaXMgc2hvd24gaW4gc2lkZSBieSBzaWRlCi0gICogbW9kZSBhbmQgYSBkaXZpZGVyIHNob3VsZCBiZSBzaG93bi4KLSAgKgotICAqIEBoaWRlCi0gICovCi1vbmV3YXkgaW50ZXJmYWNlIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciB7Ci0gICAgdm9pZCBvbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKTsKLX0KK3BhcmNlbGFibGUgSWNvbjsKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9MYXllckRyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvTGF5ZXJEcmF3YWJsZS5qYXZhCmluZGV4IDY1MWI0NTMuLmUyMTUwYzAgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9MYXllckRyYXdhYmxlLmphdmEKKysrIGIvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL0xheWVyRHJhd2FibGUuamF2YQpAQCAtODIsOCArODIsMTMgQEAKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQQURESU5HX01PREVfU1RBQ0sgPSAxOwogCi0gICAgLyoqIFZhbHVlIHVzZWQgZm9yIHVuZGVmaW5lZCBzdGFydCBhbmQgZW5kIGluc2V0cy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5ERUZJTkVEX0lOU0VUID0gSW50ZWdlci5NSU5fVkFMVUU7CisgICAgLyoqCisgICAgICogVmFsdWUgdXNlZCBmb3IgdW5kZWZpbmVkIHN0YXJ0IGFuZCBlbmQgaW5zZXRzLgorICAgICAqCisgICAgICogQHNlZSAjZ2V0TGF5ZXJJbnNldFN0YXJ0KGludCkKKyAgICAgKiBAc2VlICNnZXRMYXllckluc2V0RW5kKGludCkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTkRFRklORURfSU5TRVQgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKIAogICAgIExheWVyU3RhdGUgbUxheWVyU3RhdGU7CiAKQEAgLTg2Nyw3ICs4NzIsOCBAQAogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGluZGV4IHRoZSBpbmRleCBvZiB0aGUgbGF5ZXIKLSAgICAgKiBAcmV0dXJuIG51bWJlciBvZiBwaXhlbHMgdG8gaW5zZXQgZnJvbSB0aGUgc3RhcnQgYm91bmQKKyAgICAgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGluc2V0IGZyb20gdGhlIHN0YXJ0IGJvdW5kLCBvcgorICAgICAqICAgICAgICAge0BsaW5rICNVTkRFRklORURfSU5TRVR9IGlmIG5vdCBzcGVjaWZpZWQKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNMYXllckRyYXdhYmxlSXRlbV9zdGFydAogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0TGF5ZXJJbnNldFN0YXJ0KGludCBpbmRleCkgewpAQCAtODc3LDcgKzg4Myw4IEBACiAKICAgICAvKioKICAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBsYXllciB0byBhZGp1c3QKLSAgICAgKiBAcGFyYW0gZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGluc2V0IGZyb20gdGhlIGVuZCBib3VuZAorICAgICAqIEBwYXJhbSBlIG51bWJlciBvZiBwaXhlbHMgdG8gaW5zZXQgZnJvbSB0aGUgZW5kIGJvdW5kLCBvcgorICAgICAqICAgICAgICAge0BsaW5rICNVTkRFRklORURfSU5TRVR9IGlmIG5vdCBzcGVjaWZpZWQKICAgICAgKiBAYXR0ciByZWYgYW5kcm9pZC5SLnN0eWxlYWJsZSNMYXllckRyYXdhYmxlSXRlbV9lbmQKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRMYXllckluc2V0RW5kKGludCBpbmRleCwgaW50IGUpIHsKQEAgLTk3NywzNCArOTg0LDMzIEBACiAgICAgICAgICAgICBjb21wdXRlU3RhY2tlZFBhZGRpbmcocGFkZGluZyk7CiAgICAgICAgIH0KIAorICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ1QgPSBsYXllclN0YXRlLm1QYWRkaW5nVG9wOworICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ0IgPSBsYXllclN0YXRlLm1QYWRkaW5nQm90dG9tOworCisgICAgICAgIC8vIFJlc29sdmUgcGFkZGluZyBmb3IgUlRMLiBSZWxhdGl2ZSBwYWRkaW5nIG92ZXJyaWRlcyBhYnNvbHV0ZQorICAgICAgICAvLyBwYWRkaW5nLgorICAgICAgICBmaW5hbCBib29sZWFuIGlzTGF5b3V0UnRsID0gZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT0gTGF5b3V0RGlyZWN0aW9uLlJUTDsKKyAgICAgICAgZmluYWwgaW50IHBhZGRpbmdSdGxMID0gaXNMYXlvdXRSdGwgPyBsYXllclN0YXRlLm1QYWRkaW5nRW5kIDogbGF5ZXJTdGF0ZS5tUGFkZGluZ1N0YXJ0OworICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ1J0bFIgPSBpc0xheW91dFJ0bCA/IGxheWVyU3RhdGUubVBhZGRpbmdTdGFydCA6IGxheWVyU3RhdGUubVBhZGRpbmdFbmQ7CisgICAgICAgIGZpbmFsIGludCBwYWRkaW5nTCA9IHBhZGRpbmdSdGxMID49IDAgPyBwYWRkaW5nUnRsTCA6IGxheWVyU3RhdGUubVBhZGRpbmdMZWZ0OworICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ1IgPSBwYWRkaW5nUnRsUiA+PSAwID8gcGFkZGluZ1J0bFIgOiBsYXllclN0YXRlLm1QYWRkaW5nUmlnaHQ7CisKICAgICAgICAgLy8gSWYgcGFkZGluZyB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQgKGUuZy4gbm90IC0xKSB0aGVuIG92ZXJyaWRlIHRoZQogICAgICAgICAvLyBjb21wdXRlZCBwYWRkaW5nIGluIHRoYXQgZGltZW5zaW9uLgotICAgICAgICBpZiAobGF5ZXJTdGF0ZS5tUGFkZGluZ1RvcCA+PSAwKSB7Ci0gICAgICAgICAgICBwYWRkaW5nLnRvcCA9IGxheWVyU3RhdGUubVBhZGRpbmdUb3A7CisgICAgICAgIGlmIChwYWRkaW5nTCA+PSAwKSB7CisgICAgICAgICAgICBwYWRkaW5nLmxlZnQgPSBwYWRkaW5nTDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXllclN0YXRlLm1QYWRkaW5nQm90dG9tID49IDApIHsKLSAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gbGF5ZXJTdGF0ZS5tUGFkZGluZ0JvdHRvbTsKKyAgICAgICAgaWYgKHBhZGRpbmdUID49IDApIHsKKyAgICAgICAgICAgIHBhZGRpbmcudG9wID0gcGFkZGluZ1Q7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ1J0bExlZnQ7Ci0gICAgICAgIGZpbmFsIGludCBwYWRkaW5nUnRsUmlnaHQ7Ci0gICAgICAgIGlmIChnZXRMYXlvdXREaXJlY3Rpb24oKSA9PSBMYXlvdXREaXJlY3Rpb24uUlRMKSB7Ci0gICAgICAgICAgICBwYWRkaW5nUnRsTGVmdCA9IGxheWVyU3RhdGUubVBhZGRpbmdFbmQ7Ci0gICAgICAgICAgICBwYWRkaW5nUnRsUmlnaHQgPSBsYXllclN0YXRlLm1QYWRkaW5nU3RhcnQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYWRkaW5nUnRsTGVmdCA9IGxheWVyU3RhdGUubVBhZGRpbmdTdGFydDsKLSAgICAgICAgICAgIHBhZGRpbmdSdGxSaWdodCA9IGxheWVyU3RhdGUubVBhZGRpbmdFbmQ7CisgICAgICAgIGlmIChwYWRkaW5nUiA+PSAwKSB7CisgICAgICAgICAgICBwYWRkaW5nLnJpZ2h0ID0gcGFkZGluZ1I7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBpbnQgcGFkZGluZ0xlZnQgPSAgcGFkZGluZ1J0bExlZnQgPj0gMCA/IHBhZGRpbmdSdGxMZWZ0IDogbGF5ZXJTdGF0ZS5tUGFkZGluZ0xlZnQ7Ci0gICAgICAgIGlmIChwYWRkaW5nTGVmdCA+PSAwKSB7Ci0gICAgICAgICAgICBwYWRkaW5nLmxlZnQgPSBwYWRkaW5nTGVmdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCBwYWRkaW5nUmlnaHQgPSAgcGFkZGluZ1J0bFJpZ2h0ID49IDAgPyBwYWRkaW5nUnRsUmlnaHQgOiBsYXllclN0YXRlLm1QYWRkaW5nUmlnaHQ7Ci0gICAgICAgIGlmIChwYWRkaW5nUmlnaHQgPj0gMCkgewotICAgICAgICAgICAgcGFkZGluZy5yaWdodCA9IHBhZGRpbmdSaWdodDsKKyAgICAgICAgaWYgKHBhZGRpbmdCID49IDApIHsKKyAgICAgICAgICAgIHBhZGRpbmcuYm90dG9tID0gcGFkZGluZ0I7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gcGFkZGluZy5sZWZ0ICE9IDAgfHwgcGFkZGluZy50b3AgIT0gMCB8fCBwYWRkaW5nLnJpZ2h0ICE9IDAgfHwgcGFkZGluZy5ib3R0b20gIT0gMDsKQEAgLTE0NzEsNTggKzE0NzcsNTkgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGF5ZXJCb3VuZHMoUmVjdCBib3VuZHMpIHsKLSAgICAgICAgaW50IHBhZEwgPSAwOwotICAgICAgICBpbnQgcGFkVCA9IDA7Ci0gICAgICAgIGludCBwYWRSID0gMDsKLSAgICAgICAgaW50IHBhZEIgPSAwOworICAgICAgICBpbnQgcGFkZGluZ0wgPSAwOworICAgICAgICBpbnQgcGFkZGluZ1QgPSAwOworICAgICAgICBpbnQgcGFkZGluZ1IgPSAwOworICAgICAgICBpbnQgcGFkZGluZ0IgPSAwOwogCiAgICAgICAgIGZpbmFsIFJlY3Qgb3V0UmVjdCA9IG1UbXBPdXRSZWN0OwogICAgICAgICBmaW5hbCBpbnQgbGF5b3V0RGlyZWN0aW9uID0gZ2V0TGF5b3V0RGlyZWN0aW9uKCk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbmVzdCA9IG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSA9PSBQQURESU5HX01PREVfTkVTVDsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpc0xheW91dFJ0bCA9IGxheW91dERpcmVjdGlvbiA9PSBMYXlvdXREaXJlY3Rpb24uUlRMOworICAgICAgICBmaW5hbCBib29sZWFuIGlzUGFkZGluZ05lc3RlZCA9IG1MYXllclN0YXRlLm1QYWRkaW5nTW9kZSA9PSBQQURESU5HX01PREVfTkVTVDsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwotICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbUxheWVyU3RhdGUubU51bTsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIENoaWxkRHJhd2FibGUgciA9IGFycmF5W2ldOwogICAgICAgICAgICAgZmluYWwgRHJhd2FibGUgZCA9IHIubURyYXdhYmxlOwogICAgICAgICAgICAgaWYgKGQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmaW5hbCBSZWN0IGNvbnRhaW5lciA9IG1UbXBDb250YWluZXI7Ci0gICAgICAgICAgICBjb250YWluZXIuc2V0KGQuZ2V0Qm91bmRzKCkpOworICAgICAgICAgICAgZmluYWwgaW50IGluc2V0VCA9IHIubUluc2V0VDsKKyAgICAgICAgICAgIGZpbmFsIGludCBpbnNldEIgPSByLm1JbnNldEI7CiAKLSAgICAgICAgICAgIC8vIFRha2UgdGhlIHJlc29sdmVkIGxheW91dCBkaXJlY3Rpb24gaW50byBhY2NvdW50LiBJZiBzdGFydCAvIGVuZAotICAgICAgICAgICAgLy8gcGFkZGluZyBhcmUgZGVmaW5lZCwgdGhleSB3aWxsIGJlIHJlc29sdmVkIChoZW5jZSBvdmVycmlkaW5nKSB0bwotICAgICAgICAgICAgLy8gbGVmdCAvIHJpZ2h0IG9yIHJpZ2h0IC8gbGVmdCBkZXBlbmRpbmcgb24gdGhlIHJlc29sdmVkIGxheW91dAotICAgICAgICAgICAgLy8gZGlyZWN0aW9uLiBJZiBzdGFydCAvIGVuZCBwYWRkaW5nIGFyZSBub3QgZGVmaW5lZCwgdXNlIHRoZQotICAgICAgICAgICAgLy8gbGVmdCAvIHJpZ2h0IG9uZXMuCi0gICAgICAgICAgICBmaW5hbCBpbnQgaW5zZXRMLCBpbnNldFI7Ci0gICAgICAgICAgICBpZiAobGF5b3V0RGlyZWN0aW9uID09IExheW91dERpcmVjdGlvbi5SVEwpIHsKLSAgICAgICAgICAgICAgICBpbnNldEwgPSByLm1JbnNldEUgPT0gVU5ERUZJTkVEX0lOU0VUID8gci5tSW5zZXRMIDogci5tSW5zZXRFOwotICAgICAgICAgICAgICAgIGluc2V0UiA9IHIubUluc2V0UyA9PSBVTkRFRklORURfSU5TRVQgPyByLm1JbnNldFIgOiByLm1JbnNldFM7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGluc2V0TCA9IHIubUluc2V0UyA9PSBVTkRFRklORURfSU5TRVQgPyByLm1JbnNldEwgOiByLm1JbnNldFM7Ci0gICAgICAgICAgICAgICAgaW5zZXRSID0gci5tSW5zZXRFID09IFVOREVGSU5FRF9JTlNFVCA/IHIubUluc2V0UiA6IHIubUluc2V0RTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJlc29sdmUgaW5zZXRzIGZvciBSVEwuIFJlbGF0aXZlIGluc2V0cyBvdmVycmlkZSBhYnNvbHV0ZQorICAgICAgICAgICAgLy8gaW5zZXRzLgorICAgICAgICAgICAgZmluYWwgaW50IGluc2V0UnRsTCA9IGlzTGF5b3V0UnRsID8gci5tSW5zZXRFIDogci5tSW5zZXRTOworICAgICAgICAgICAgZmluYWwgaW50IGluc2V0UnRsUiA9IGlzTGF5b3V0UnRsID8gci5tSW5zZXRTIDogci5tSW5zZXRFOworICAgICAgICAgICAgZmluYWwgaW50IGluc2V0TCA9IGluc2V0UnRsTCA9PSBVTkRFRklORURfSU5TRVQgPyByLm1JbnNldEwgOiBpbnNldFJ0bEw7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW5zZXRSID0gaW5zZXRSdGxSID09IFVOREVGSU5FRF9JTlNFVCA/IHIubUluc2V0UiA6IGluc2V0UnRsUjsKIAogICAgICAgICAgICAgLy8gRXN0YWJsaXNoIGNvbnRhaW5pbmcgcmVnaW9uIGJhc2VkIG9uIGFnZ3JlZ2F0ZSBwYWRkaW5nIGFuZAogICAgICAgICAgICAgLy8gcmVxdWVzdGVkIGluc2V0cyBmb3IgdGhlIGN1cnJlbnQgbGF5ZXIuCi0gICAgICAgICAgICBjb250YWluZXIuc2V0KGJvdW5kcy5sZWZ0ICsgaW5zZXRMICsgcGFkTCwgYm91bmRzLnRvcCArIHIubUluc2V0VCArIHBhZFQsCi0gICAgICAgICAgICAgICAgICAgIGJvdW5kcy5yaWdodCAtIGluc2V0UiAtIHBhZFIsIGJvdW5kcy5ib3R0b20gLSByLm1JbnNldEIgLSBwYWRCKTsKKyAgICAgICAgICAgIGZpbmFsIFJlY3QgY29udGFpbmVyID0gbVRtcENvbnRhaW5lcjsKKyAgICAgICAgICAgIGNvbnRhaW5lci5zZXQoYm91bmRzLmxlZnQgKyBpbnNldEwgKyBwYWRkaW5nTCwgYm91bmRzLnRvcCArIGluc2V0VCArIHBhZGRpbmdULAorICAgICAgICAgICAgICAgICAgICBib3VuZHMucmlnaHQgLSBpbnNldFIgLSBwYWRkaW5nUiwgYm91bmRzLmJvdHRvbSAtIGluc2V0QiAtIHBhZGRpbmdCKTsKIAotICAgICAgICAgICAgLy8gQXBwbHkgcmVzb2x2ZWQgZ3Jhdml0eSB0byBkcmF3YWJsZSBiYXNlZCBvbiByZXNvbHZlZCBzaXplLgotICAgICAgICAgICAgZmluYWwgaW50IGdyYXZpdHkgPSByZXNvbHZlR3Jhdml0eShyLm1HcmF2aXR5LCByLm1XaWR0aCwgci5tSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICBkLmdldEludHJpbnNpY1dpZHRoKCksIGQuZ2V0SW50cmluc2ljSGVpZ2h0KCkpOwotICAgICAgICAgICAgZmluYWwgaW50IHcgPSByLm1XaWR0aCA8IDAgPyBkLmdldEludHJpbnNpY1dpZHRoKCkgOiByLm1XaWR0aDsKLSAgICAgICAgICAgIGZpbmFsIGludCBoID0gci5tSGVpZ2h0IDwgMCA/IGQuZ2V0SW50cmluc2ljSGVpZ2h0KCkgOiByLm1IZWlnaHQ7Ci0gICAgICAgICAgICBHcmF2aXR5LmFwcGx5KGdyYXZpdHksIHcsIGgsIGNvbnRhaW5lciwgb3V0UmVjdCwgbGF5b3V0RGlyZWN0aW9uKTsKKyAgICAgICAgICAgIC8vIENvbXB1dGUgYSByZWFzb25hYmxlIGRlZmF1bHQgZ3Jhdml0eSBiYXNlZCBvbiB0aGUgaW50cmluc2ljIGFuZAorICAgICAgICAgICAgLy8gZXhwbGljaXQgZGltZW5zaW9ucywgaWYgc3BlY2lmaWVkLgorICAgICAgICAgICAgZmluYWwgaW50IGludHJpbnNpY1cgPSBkLmdldEludHJpbnNpY1dpZHRoKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW50cmluc2ljSCA9IGQuZ2V0SW50cmluc2ljSGVpZ2h0KCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgbGF5ZXJXID0gci5tV2lkdGg7CisgICAgICAgICAgICBmaW5hbCBpbnQgbGF5ZXJIID0gci5tSGVpZ2h0OworICAgICAgICAgICAgZmluYWwgaW50IGdyYXZpdHkgPSByZXNvbHZlR3Jhdml0eShyLm1HcmF2aXR5LCBsYXllclcsIGxheWVySCwgaW50cmluc2ljVywgaW50cmluc2ljSCk7CisKKyAgICAgICAgICAgIC8vIEV4cGxpY2l0IGRpbWVuc2lvbnMgb3ZlcnJpZGUgaW50cmluc2ljIGRpbWVuc2lvbnMuCisgICAgICAgICAgICBmaW5hbCBpbnQgcmVzb2x2ZWRXID0gbGF5ZXJXIDwgMCA/IGludHJpbnNpY1cgOiBsYXllclc7CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVzb2x2ZWRIID0gbGF5ZXJIIDwgMCA/IGludHJpbnNpY0ggOiBsYXllckg7CisgICAgICAgICAgICBHcmF2aXR5LmFwcGx5KGdyYXZpdHksIHJlc29sdmVkVywgcmVzb2x2ZWRILCBjb250YWluZXIsIG91dFJlY3QsIGxheW91dERpcmVjdGlvbik7CiAgICAgICAgICAgICBkLnNldEJvdW5kcyhvdXRSZWN0KTsKIAotICAgICAgICAgICAgaWYgKG5lc3QpIHsKLSAgICAgICAgICAgICAgICBwYWRMICs9IG1QYWRkaW5nTFtpXTsKLSAgICAgICAgICAgICAgICBwYWRSICs9IG1QYWRkaW5nUltpXTsKLSAgICAgICAgICAgICAgICBwYWRUICs9IG1QYWRkaW5nVFtpXTsKLSAgICAgICAgICAgICAgICBwYWRCICs9IG1QYWRkaW5nQltpXTsKKyAgICAgICAgICAgIGlmIChpc1BhZGRpbmdOZXN0ZWQpIHsKKyAgICAgICAgICAgICAgICBwYWRkaW5nTCArPSBtUGFkZGluZ0xbaV07CisgICAgICAgICAgICAgICAgcGFkZGluZ1IgKz0gbVBhZGRpbmdSW2ldOworICAgICAgICAgICAgICAgIHBhZGRpbmdUICs9IG1QYWRkaW5nVFtpXTsKKyAgICAgICAgICAgICAgICBwYWRkaW5nQiArPSBtUGFkZGluZ0JbaV07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTc4LDYgKzE1ODUsNyBAQAogICAgICAgICBpbnQgcGFkUiA9IDA7CiAKICAgICAgICAgZmluYWwgYm9vbGVhbiBuZXN0ID0gbUxheWVyU3RhdGUubVBhZGRpbmdNb2RlID09IFBBRERJTkdfTU9ERV9ORVNUOworICAgICAgICBmaW5hbCBib29sZWFuIGlzTGF5b3V0UnRsID0gZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT0gTGF5b3V0RGlyZWN0aW9uLlJUTDsKICAgICAgICAgZmluYWwgQ2hpbGREcmF3YWJsZVtdIGFycmF5ID0gbUxheWVyU3RhdGUubUNoaWxkcmVuOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1MYXllclN0YXRlLm1OdW07CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CkBAIC0xNTkxLDE1ICsxNTk5LDEwIEBACiAgICAgICAgICAgICAvLyBsZWZ0IC8gcmlnaHQgb3IgcmlnaHQgLyBsZWZ0IGRlcGVuZGluZyBvbiB0aGUgcmVzb2x2ZWQgbGF5b3V0CiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24uIElmIHN0YXJ0IC8gZW5kIHBhZGRpbmcgYXJlIG5vdCBkZWZpbmVkLCB1c2UgdGhlCiAgICAgICAgICAgICAvLyBsZWZ0IC8gcmlnaHQgb25lcy4KLSAgICAgICAgICAgIGZpbmFsIGludCBpbnNldEwsIGluc2V0UjsKLSAgICAgICAgICAgIGZpbmFsIGludCBsYXlvdXREaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChsYXlvdXREaXJlY3Rpb24gPT0gTGF5b3V0RGlyZWN0aW9uLlJUTCkgewotICAgICAgICAgICAgICAgIGluc2V0TCA9IHIubUluc2V0RSA9PSBVTkRFRklORURfSU5TRVQgPyByLm1JbnNldEwgOiByLm1JbnNldEU7Ci0gICAgICAgICAgICAgICAgaW5zZXRSID0gci5tSW5zZXRTID09IFVOREVGSU5FRF9JTlNFVCA/IHIubUluc2V0UiA6IHIubUluc2V0UzsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW5zZXRMID0gci5tSW5zZXRTID09IFVOREVGSU5FRF9JTlNFVCA/IHIubUluc2V0TCA6IHIubUluc2V0UzsKLSAgICAgICAgICAgICAgICBpbnNldFIgPSByLm1JbnNldEUgPT0gVU5ERUZJTkVEX0lOU0VUID8gci5tSW5zZXRSIDogci5tSW5zZXRFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgaW50IGluc2V0UnRsTCA9IGlzTGF5b3V0UnRsID8gci5tSW5zZXRFIDogci5tSW5zZXRTOworICAgICAgICAgICAgZmluYWwgaW50IGluc2V0UnRsUiA9IGlzTGF5b3V0UnRsID8gci5tSW5zZXRTIDogci5tSW5zZXRFOworICAgICAgICAgICAgZmluYWwgaW50IGluc2V0TCA9IGluc2V0UnRsTCA9PSBVTkRFRklORURfSU5TRVQgPyByLm1JbnNldEwgOiBpbnNldFJ0bEw7CisgICAgICAgICAgICBmaW5hbCBpbnQgaW5zZXRSID0gaW5zZXRSdGxSID09IFVOREVGSU5FRF9JTlNFVCA/IHIubUluc2V0UiA6IGluc2V0UnRsUjsKIAogICAgICAgICAgICAgLy8gRG9uJ3QgYXBwbHkgcGFkZGluZyBhbmQgaW5zZXRzIGZvciBjaGlsZHJlbiB0aGF0IGRvbid0IGhhdmUKICAgICAgICAgICAgIC8vIGFuIGludHJpbnNpYyBkaW1lbnNpb24uCkBAIC0xNjU5LDggKzE2NjIsOCBAQAogICAgICAgICBpZiAoci5tRHJhd2FibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgZmluYWwgUmVjdCByZWN0ID0gbVRtcFJlY3Q7CiAgICAgICAgICAgICByLm1EcmF3YWJsZS5nZXRQYWRkaW5nKHJlY3QpOwotICAgICAgICAgICAgaWYgKHJlY3QubGVmdCAhPSBtUGFkZGluZ0xbaV0gfHwgcmVjdC50b3AgIT0gbVBhZGRpbmdUW2ldIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgIT0gbVBhZGRpbmdSW2ldIHx8IHJlY3QuYm90dG9tICE9IG1QYWRkaW5nQltpXSkgeworICAgICAgICAgICAgaWYgKHJlY3QubGVmdCAhPSBtUGFkZGluZ0xbaV0gfHwgcmVjdC50b3AgIT0gbVBhZGRpbmdUW2ldCisgICAgICAgICAgICAgICAgICAgIHx8IHJlY3QucmlnaHQgIT0gbVBhZGRpbmdSW2ldIHx8IHJlY3QuYm90dG9tICE9IG1QYWRkaW5nQltpXSkgewogICAgICAgICAgICAgICAgIG1QYWRkaW5nTFtpXSA9IHJlY3QubGVmdDsKICAgICAgICAgICAgICAgICBtUGFkZGluZ1RbaV0gPSByZWN0LnRvcDsKICAgICAgICAgICAgICAgICBtUGFkZGluZ1JbaV0gPSByZWN0LnJpZ2h0OwpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JpcHBsZUJhY2tncm91bmQuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9SaXBwbGVCYWNrZ3JvdW5kLmphdmEKaW5kZXggZDMxM2FhNS4uNmJkMjY0NiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JpcHBsZUJhY2tncm91bmQuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlQmFja2dyb3VuZC5qYXZhCkBAIC0zMyw2ICszMyw3IEBACiAgKiBEcmF3cyBhIHJpcHBsZSBiYWNrZ3JvdW5kLgogICovCiBjbGFzcyBSaXBwbGVCYWNrZ3JvdW5kIGV4dGVuZHMgUmlwcGxlQ29tcG9uZW50IHsKKwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbWVJbnRlcnBvbGF0b3IgTElORUFSX0lOVEVSUE9MQVRPUiA9IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3IoKTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBPUEFDSVRZX0VOVEVSX0RVUkFUSU9OID0gNjAwOwpAQCAtNDgsOCArNDksMTQgQEAKICAgICAvLyBTb2Z0d2FyZSByZW5kZXJpbmcgcHJvcGVydGllcy4KICAgICBwcml2YXRlIGZsb2F0IG1PcGFjaXR5ID0gMDsKIAotICAgIHB1YmxpYyBSaXBwbGVCYWNrZ3JvdW5kKFJpcHBsZURyYXdhYmxlIG93bmVyLCBSZWN0IGJvdW5kcywgYm9vbGVhbiBmb3JjZVNvZnR3YXJlKSB7CisgICAgLyoqIFdoZXRoZXIgdGhpcyByaXBwbGUgaXMgYm91bmRlZC4gKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gbUlzQm91bmRlZDsKKworICAgIHB1YmxpYyBSaXBwbGVCYWNrZ3JvdW5kKFJpcHBsZURyYXdhYmxlIG93bmVyLCBSZWN0IGJvdW5kcywgYm9vbGVhbiBpc0JvdW5kZWQsCisgICAgICAgICAgICBib29sZWFuIGZvcmNlU29mdHdhcmUpIHsKICAgICAgICAgc3VwZXIob3duZXIsIGJvdW5kcywgZm9yY2VTb2Z0d2FyZSk7CisKKyAgICAgICAgbUlzQm91bmRlZCA9IGlzQm91bmRlZDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1Zpc2libGUoKSB7CkBAIC0xMDUsNyArMTEyLDggQEAKICAgICAgICAgZmluYWwgQW5pbWF0b3JTZXQuQnVpbGRlciBidWlsZGVyID0gc2V0LnBsYXkoZXhpdCk7CiAKICAgICAgICAgLy8gTGluZWFyICJmYXN0IiBlbnRlciBiYXNlZCBvbiBjdXJyZW50IG9wYWNpdHkuCi0gICAgICAgIGZpbmFsIGludCBmYXN0RW50ZXJEdXJhdGlvbiA9IChpbnQpICgoMSAtIG1PcGFjaXR5KSAqIE9QQUNJVFlfRU5URVJfRFVSQVRJT05fRkFTVCk7CisgICAgICAgIGZpbmFsIGludCBmYXN0RW50ZXJEdXJhdGlvbiA9IG1Jc0JvdW5kZWQgPworICAgICAgICAgICAgICAgIChpbnQpICgoMSAtIG1PcGFjaXR5KSAqIE9QQUNJVFlfRU5URVJfRFVSQVRJT05fRkFTVCkgOiAwOwogICAgICAgICBpZiAoZmFzdEVudGVyRHVyYXRpb24gPiAwKSB7CiAgICAgICAgICAgICBmaW5hbCBPYmplY3RBbmltYXRvciBlbnRlciA9IE9iamVjdEFuaW1hdG9yLm9mRmxvYXQodGhpcywgUmlwcGxlQmFja2dyb3VuZC5PUEFDSVRZLCAxKTsKICAgICAgICAgICAgIGVudGVyLnNldEludGVycG9sYXRvcihMSU5FQVJfSU5URVJQT0xBVE9SKTsKQEAgLTEzMSwxNSArMTM5LDE4IEBACiAgICAgICAgIG1Qcm9wWCA9IENhbnZhc1Byb3BlcnR5LmNyZWF0ZUZsb2F0KDApOwogICAgICAgICBtUHJvcFkgPSBDYW52YXNQcm9wZXJ0eS5jcmVhdGVGbG9hdCgwKTsKIAotICAgICAgICBmaW5hbCBpbnQgZmFzdEVudGVyRHVyYXRpb24gPSAoaW50KSAoKDEgLSBtT3BhY2l0eSkgKiBPUEFDSVRZX0VOVEVSX0RVUkFUSU9OX0ZBU1QpOworICAgICAgICBmaW5hbCBpbnQgZmFzdEVudGVyRHVyYXRpb24gPSBtSXNCb3VuZGVkID8KKyAgICAgICAgICAgICAgICAoaW50KSAoKDEgLSBtT3BhY2l0eSkgKiBPUEFDSVRZX0VOVEVSX0RVUkFUSU9OX0ZBU1QpIDogMDsKIAogICAgICAgICAvLyBMaW5lYXIgZXhpdCBhZnRlciBlbnRlciBpcyBjb21wbGV0ZWQuCiAgICAgICAgIGZpbmFsIFJlbmRlck5vZGVBbmltYXRvciBleGl0ID0gbmV3IFJlbmRlck5vZGVBbmltYXRvcigKICAgICAgICAgICAgICAgICBtUHJvcFBhaW50LCBSZW5kZXJOb2RlQW5pbWF0b3IuUEFJTlRfQUxQSEEsIDApOwogICAgICAgICBleGl0LnNldEludGVycG9sYXRvcihMSU5FQVJfSU5URVJQT0xBVE9SKTsKICAgICAgICAgZXhpdC5zZXREdXJhdGlvbihPUEFDSVRZX0VYSVRfRFVSQVRJT04pOwotICAgICAgICBleGl0LnNldFN0YXJ0RGVsYXkoZmFzdEVudGVyRHVyYXRpb24pOwotICAgICAgICBleGl0LnNldFN0YXJ0VmFsdWUodGFyZ2V0QWxwaGEpOworICAgICAgICBpZiAoZmFzdEVudGVyRHVyYXRpb24gPiAwKSB7CisgICAgICAgICAgICBleGl0LnNldFN0YXJ0RGVsYXkoZmFzdEVudGVyRHVyYXRpb24pOworICAgICAgICAgICAgZXhpdC5zZXRTdGFydFZhbHVlKHRhcmdldEFscGhhKTsKKyAgICAgICAgfQogICAgICAgICBzZXQuYWRkKGV4aXQpOwogCiAgICAgICAgIC8vIExpbmVhciAiZmFzdCIgZW50ZXIgYmFzZWQgb24gY3VycmVudCBvcGFjaXR5LgpkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MvamF2YS9hbmRyb2lkL2dyYXBoaWNzL2RyYXdhYmxlL1JpcHBsZURyYXdhYmxlLmphdmEgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlRHJhd2FibGUuamF2YQppbmRleCA1MjEzZTEwLi45YzY5MWU1IDEwMDY0NAotLS0gYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlRHJhd2FibGUuamF2YQorKysgYi9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvUmlwcGxlRHJhd2FibGUuamF2YQpAQCAtNTQwLDcgKzU0MCw4IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHRyeUJhY2tncm91bmRFbnRlcihib29sZWFuIGZvY3VzZWQpIHsKICAgICAgICAgaWYgKG1CYWNrZ3JvdW5kID09IG51bGwpIHsKLSAgICAgICAgICAgIG1CYWNrZ3JvdW5kID0gbmV3IFJpcHBsZUJhY2tncm91bmQodGhpcywgbUhvdHNwb3RCb3VuZHMsIG1Gb3JjZVNvZnR3YXJlKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNCb3VuZGVkID0gaXNCb3VuZGVkKCk7CisgICAgICAgICAgICBtQmFja2dyb3VuZCA9IG5ldyBSaXBwbGVCYWNrZ3JvdW5kKHRoaXMsIG1Ib3RzcG90Qm91bmRzLCBpc0JvdW5kZWQsIG1Gb3JjZVNvZnR3YXJlKTsKICAgICAgICAgfQogCiAgICAgICAgIG1CYWNrZ3JvdW5kLnNldHVwKG1TdGF0ZS5tTWF4UmFkaXVzLCBtRGVuc2l0eSk7CmRpZmYgLS1naXQgYS9ncmFwaGljcy9qYXZhL2FuZHJvaWQvZ3JhcGhpY3MvZHJhd2FibGUvVmVjdG9yRHJhd2FibGUuamF2YSBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCmluZGV4IDM3NjFhOTkuLjY1MjYwMjEgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCisrKyBiL2dyYXBoaWNzL2phdmEvYW5kcm9pZC9ncmFwaGljcy9kcmF3YWJsZS9WZWN0b3JEcmF3YWJsZS5qYXZhCkBAIC0yMCwxNSArMjAsOSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLlRoZW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbnNldHM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhdGg7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYXRoTWVhc3VyZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKQEAgLTM4LDcgKzMyLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxheW91dERpcmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5NYXRoVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhdGhQYXJzZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIApAQCAtNDgsNiArNDEsOCBAQAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlN0YWNrOwogCkBAIC0xOTYsMjEgKzE5MSw2IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVBFX1BBVEggPSAicGF0aCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNIQVBFX1ZFQ1RPUiA9ICJ2ZWN0b3IiOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVDQVBfQlVUVCA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVDQVBfUk9VTkQgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FQ0FQX1NRVUFSRSA9IDI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTElORUpPSU5fTUlURVIgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMSU5FSk9JTl9ST1VORCA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExJTkVKT0lOX0JFVkVMID0gMjsKLQotICAgIC8vIENhcCB0aGUgYml0bWFwIHNpemUsIHN1Y2ggdGhhdCBpdCB3b24ndCBodXJ0IHRoZSBwZXJmb3JtYW5jZSB0b28gbXVjaAotICAgIC8vIGFuZCBpdCB3b24ndCBjcmFzaCBkdWUgdG8gYSB2ZXJ5IGxhcmdlIHNjYWxlLgotICAgIC8vIFRoZSBkcmF3YWJsZSB3aWxsIGxvb2sgYmx1cnJ5IGFib3ZlIHRoaXMgc2l6ZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NBQ0hFRF9CSVRNQVBfU0laRSA9IDIwNDg7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERCR19WRUNUT1JfRFJBV0FCTEUgPSBmYWxzZTsKLQogICAgIHByaXZhdGUgVmVjdG9yRHJhd2FibGVTdGF0ZSBtVmVjdG9yU3RhdGU7CiAKICAgICBwcml2YXRlIFBvcnRlckR1ZmZDb2xvckZpbHRlciBtVGludEZpbHRlcjsKQEAgLTIxOCwxMCArMTk4LDYgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtTXV0YXRlZDsKIAotICAgIC8vIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUgbmVlZHMgdG8gdHVybiBvZmYgdGhlIGNhY2hlIGFsbCB0aGUgdGltZSwgb3RoZXJ3aXNlLAotICAgIC8vIGNhY2hpbmcgdGhlIGJpdG1hcCBieSBkZWZhdWx0IGlzIGFsbG93ZWQuCi0gICAgcHJpdmF0ZSBib29sZWFuIG1BbGxvd0NhY2hpbmcgPSB0cnVlOwotCiAgICAgLyoqIFRoZSBkZW5zaXR5IG9mIHRoZSBkaXNwbGF5IG9uIHdoaWNoIHRoaXMgZHJhd2FibGUgd2lsbCBiZSByZW5kZXJlZC4gKi8KICAgICBwcml2YXRlIGludCBtVGFyZ2V0RGVuc2l0eTsKIApAQCAtMjM1LDggKzIxMSw2IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1EcGlTY2FsZWREaXJ0eSA9IHRydWU7CiAKICAgICAvLyBUZW1wIHZhcmlhYmxlLCBvbmx5IGZvciBzYXZpbmcgIm5ldyIgb3BlcmF0aW9uIGF0IHRoZSBkcmF3KCkgdGltZS4KLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVRtcEZsb2F0cyA9IG5ldyBmbG9hdFs5XTsKLSAgICBwcml2YXRlIGZpbmFsIE1hdHJpeCBtVG1wTWF0cml4ID0gbmV3IE1hdHJpeCgpOwogICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wQm91bmRzID0gbmV3IFJlY3QoKTsKIAogICAgIHB1YmxpYyBWZWN0b3JEcmF3YWJsZSgpIHsKQEAgLTI0OSw3ICsyMjMsNiBAQAogICAgICAqLwogICAgIHByaXZhdGUgVmVjdG9yRHJhd2FibGUoQE5vbk51bGwgVmVjdG9yRHJhd2FibGVTdGF0ZSBzdGF0ZSwgQE51bGxhYmxlIFJlc291cmNlcyByZXMpIHsKICAgICAgICAgbVZlY3RvclN0YXRlID0gc3RhdGU7Ci0KICAgICAgICAgdXBkYXRlTG9jYWxTdGF0ZShyZXMpOwogICAgIH0KIApAQCAtMjYyLDcgKzIzNSw3IEBACiAgICAgICogICAgICAgICAgICBkaXNwbGF5ZWQsIG9yIHtAY29kZSBudWxsfSB0byB1c2UgdGhlIGNvbnN0YW50IHN0YXRlIGRlZmF1bHRzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxvY2FsU3RhdGUoUmVzb3VyY2VzIHJlcykgewotICAgICAgICBmaW5hbCBpbnQgZGVuc2l0eSA9IERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHJlcywgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1EZW5zaXR5KTsKKyAgICAgICAgZmluYWwgaW50IGRlbnNpdHkgPSBEcmF3YWJsZS5yZXNvbHZlRGVuc2l0eShyZXMsIG1WZWN0b3JTdGF0ZS5tRGVuc2l0eSk7CiAgICAgICAgIGlmIChtVGFyZ2V0RGVuc2l0eSAhPSBkZW5zaXR5KSB7CiAgICAgICAgICAgICBtVGFyZ2V0RGVuc2l0eSA9IGRlbnNpdHk7CiAgICAgICAgICAgICBtRHBpU2NhbGVkRGlydHkgPSB0cnVlOwpAQCAtMjg5LDcgKzI2Miw3IEBACiAgICAgfQogCiAgICAgT2JqZWN0IGdldFRhcmdldEJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAuZ2V0KG5hbWUpOworICAgICAgICByZXR1cm4gbVZlY3RvclN0YXRlLm1WR1RhcmdldHNNYXAuZ2V0KG5hbWUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzEwLDYxICsyODMsMjMgQEAKIAogICAgICAgICAvLyBDb2xvciBmaWx0ZXJzIGFsd2F5cyBvdmVycmlkZSB0aW50IGZpbHRlcnMuCiAgICAgICAgIGZpbmFsIENvbG9yRmlsdGVyIGNvbG9yRmlsdGVyID0gKG1Db2xvckZpbHRlciA9PSBudWxsID8gbVRpbnRGaWx0ZXIgOiBtQ29sb3JGaWx0ZXIpOwotCi0gICAgICAgIC8vIFRoZSBpbWFnZVZpZXcgY2FuIHNjYWxlIHRoZSBjYW52YXMgaW4gZGlmZmVyZW50IHdheXMsIGluIG9yZGVyIHRvCi0gICAgICAgIC8vIGF2b2lkIGJsdXJyeSBzY2FsaW5nLCB3ZSBoYXZlIHRvIGRyYXcgaW50byBhIGJpdG1hcCB3aXRoIGV4YWN0IHBpeGVsCi0gICAgICAgIC8vIHNpemUgZmlyc3QuIFRoaXMgYml0bWFwIHNpemUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYm91bmRzIGFuZCB0aGUKLSAgICAgICAgLy8gY2FudmFzIHNjYWxlLgotICAgICAgICBjYW52YXMuZ2V0TWF0cml4KG1UbXBNYXRyaXgpOwotICAgICAgICBtVG1wTWF0cml4LmdldFZhbHVlcyhtVG1wRmxvYXRzKTsKLSAgICAgICAgZmxvYXQgY2FudmFzU2NhbGVYID0gTWF0aC5hYnMobVRtcEZsb2F0c1tNYXRyaXguTVNDQUxFX1hdKTsKLSAgICAgICAgZmxvYXQgY2FudmFzU2NhbGVZID0gTWF0aC5hYnMobVRtcEZsb2F0c1tNYXRyaXguTVNDQUxFX1ldKTsKLSAgICAgICAgaW50IHNjYWxlZFdpZHRoID0gKGludCkgKG1UbXBCb3VuZHMud2lkdGgoKSAqIGNhbnZhc1NjYWxlWCk7Ci0gICAgICAgIGludCBzY2FsZWRIZWlnaHQgPSAoaW50KSAobVRtcEJvdW5kcy5oZWlnaHQoKSAqIGNhbnZhc1NjYWxlWSk7Ci0gICAgICAgIHNjYWxlZFdpZHRoID0gTWF0aC5taW4oTUFYX0NBQ0hFRF9CSVRNQVBfU0laRSwgc2NhbGVkV2lkdGgpOwotICAgICAgICBzY2FsZWRIZWlnaHQgPSBNYXRoLm1pbihNQVhfQ0FDSEVEX0JJVE1BUF9TSVpFLCBzY2FsZWRIZWlnaHQpOwotCi0gICAgICAgIGlmIChzY2FsZWRXaWR0aCA8PSAwIHx8IHNjYWxlZEhlaWdodCA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgc2F2ZUNvdW50ID0gY2FudmFzLnNhdmUoKTsKLSAgICAgICAgY2FudmFzLnRyYW5zbGF0ZShtVG1wQm91bmRzLmxlZnQsIG1UbXBCb3VuZHMudG9wKTsKLQotICAgICAgICAvLyBIYW5kbGUgUlRMIG1pcnJvcmluZy4KLSAgICAgICAgZmluYWwgYm9vbGVhbiBuZWVkTWlycm9yaW5nID0gbmVlZE1pcnJvcmluZygpOwotICAgICAgICBpZiAobmVlZE1pcnJvcmluZykgewotICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZShtVG1wQm91bmRzLndpZHRoKCksIDApOwotICAgICAgICAgICAgY2FudmFzLnNjYWxlKC0xLjBmLCAxLjBmKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGNhbnZhcyBoYXMgYmVlbiB0cmFuc2xhdGVkIHRvIHRoZSByaWdodCBwb3NpdGlvbi4KLSAgICAgICAgLy8gQW5kIHdlIHVzZSB0aGlzIGJvdW5kIGZvciB0aGUgZGVzdGluYXRpb24gcmVjdCBmb3IgdGhlIGRyYXdCaXRtYXAsIHNvCi0gICAgICAgIC8vIHdlIG9mZnNldCB0byAoMCwgMCk7Ci0gICAgICAgIG1UbXBCb3VuZHMub2Zmc2V0VG8oMCwgMCk7Ci0KLSAgICAgICAgbVZlY3RvclN0YXRlLmNyZWF0ZUNhY2hlZEJpdG1hcElmTmVlZGVkKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgICBpZiAoIW1BbGxvd0NhY2hpbmcpIHsKLSAgICAgICAgICAgIG1WZWN0b3JTdGF0ZS51cGRhdGVDYWNoZWRCaXRtYXAoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIW1WZWN0b3JTdGF0ZS5jYW5SZXVzZUNhY2hlKCkpIHsKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUudXBkYXRlQ2FjaGVkQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgICAgICAgICAgIG1WZWN0b3JTdGF0ZS51cGRhdGVDYWNoZVN0YXRlcygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1WZWN0b3JTdGF0ZS5kcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShjYW52YXMsIGNvbG9yRmlsdGVyLCBtVG1wQm91bmRzKTsKLSAgICAgICAgY2FudmFzLnJlc3RvcmVUb0NvdW50KHNhdmVDb3VudCk7CisgICAgICAgIGZpbmFsIGxvbmcgY29sb3JGaWx0ZXJOYXRpdmVJbnN0YW5jZSA9IGNvbG9yRmlsdGVyID09IG51bGwgPyAwIDoKKyAgICAgICAgICAgICAgICBjb2xvckZpbHRlci5uYXRpdmVfaW5zdGFuY2U7CisgICAgICAgIGJvb2xlYW4gY2FuUmV1c2VDYWNoZSA9IG1WZWN0b3JTdGF0ZS5jYW5SZXVzZUNhY2hlKCk7CisgICAgICAgIG5EcmF3KG1WZWN0b3JTdGF0ZS5nZXROYXRpdmVSZW5kZXJlcigpLCBjYW52YXMuZ2V0TmF0aXZlQ2FudmFzV3JhcHBlcigpLAorICAgICAgICAgICAgICAgIGNvbG9yRmlsdGVyTmF0aXZlSW5zdGFuY2UsIG1UbXBCb3VuZHMsIG5lZWRNaXJyb3JpbmcoKSwKKyAgICAgICAgICAgICAgICBjYW5SZXVzZUNhY2hlKTsKICAgICB9CiAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0QWxwaGEoKSB7Ci0gICAgICAgIHJldHVybiBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIuZ2V0Um9vdEFscGhhKCk7CisgICAgICAgIHJldHVybiAoaW50KSAobVZlY3RvclN0YXRlLmdldEFscGhhKCkgKiAyNTUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGludCBhbHBoYSkgewotICAgICAgICBpZiAobVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpICE9IGFscGhhKSB7Ci0gICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIuc2V0Um9vdEFscGhhKGFscGhhKTsKKyAgICAgICAgaWYgKG1WZWN0b3JTdGF0ZS5zZXRBbHBoYShhbHBoYSAvIDI1NWYpKSB7CiAgICAgICAgICAgICBpbnZhbGlkYXRlU2VsZigpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDEwLDcgKzM0NSw3IEBACiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogCiAgICAgICAgIGZpbmFsIFZlY3RvckRyYXdhYmxlU3RhdGUgc3RhdGUgPSBtVmVjdG9yU3RhdGU7Ci0gICAgICAgIGlmIChzdGF0ZS5tVlBhdGhSZW5kZXJlciAhPSBudWxsICYmIHN0YXRlLm1WUGF0aFJlbmRlcmVyLm9uU3RhdGVDaGFuZ2Uoc3RhdGVTZXQpKSB7CisgICAgICAgIGlmIChzdGF0ZS5vblN0YXRlQ2hhbmdlKHN0YXRlU2V0KSkgewogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBzdGF0ZS5tQ2FjaGVEaXJ0eSA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQ1NywxNiArMzkyLDE1IEBACiAgICAgICogZnJvbSB0aGUgc291cmNlIGRlbnNpdHkgYWdhaW5zdCB3aGljaCB0aGUgY29uc3RhbnQgc3RhdGUgd2FzIGxvYWRlZC4KICAgICAgKi8KICAgICB2b2lkIGNvbXB1dGVWZWN0b3JTaXplKCkgewotICAgICAgICBmaW5hbCBWUGF0aFJlbmRlcmVyIHBhdGhSZW5kZXJlciA9IG1WZWN0b3JTdGF0ZS5tVlBhdGhSZW5kZXJlcjsKLSAgICAgICAgZmluYWwgSW5zZXRzIG9wdGljYWxJbnNldHMgPSBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHM7CisgICAgICAgIGZpbmFsIEluc2V0cyBvcHRpY2FsSW5zZXRzID0gbVZlY3RvclN0YXRlLm1PcHRpY2FsSW5zZXRzOwogCi0gICAgICAgIGZpbmFsIGludCBzb3VyY2VEZW5zaXR5ID0gcGF0aFJlbmRlcmVyLm1EZW5zaXR5OworICAgICAgICBmaW5hbCBpbnQgc291cmNlRGVuc2l0eSA9IG1WZWN0b3JTdGF0ZS5tRGVuc2l0eTsKICAgICAgICAgZmluYWwgaW50IHRhcmdldERlbnNpdHkgPSBtVGFyZ2V0RGVuc2l0eTsKICAgICAgICAgaWYgKHRhcmdldERlbnNpdHkgIT0gc291cmNlRGVuc2l0eSkgewogICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKLSAgICAgICAgICAgICAgICAgICAgKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGgsIHNvdXJjZURlbnNpdHksIHRhcmdldERlbnNpdHksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAoaW50KSBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aCwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKLSAgICAgICAgICAgICAgICAgICAgKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0LHNvdXJjZURlbnNpdHksIHRhcmdldERlbnNpdHksIHRydWUpOworICAgICAgICAgICAgICAgICAgICAoaW50KSBtVmVjdG9yU3RhdGUubUJhc2VIZWlnaHQsc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgdHJ1ZSk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgbGVmdCA9IERyYXdhYmxlLnNjYWxlRnJvbURlbnNpdHkoCiAgICAgICAgICAgICAgICAgICAgIG9wdGljYWxJbnNldHMubGVmdCwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgZmFsc2UpOwogICAgICAgICAgICAgZmluYWwgaW50IHJpZ2h0ID0gRHJhd2FibGUuc2NhbGVGcm9tRGVuc2l0eSgKQEAgLTQ3Nyw4ICs0MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICBvcHRpY2FsSW5zZXRzLmJvdHRvbSwgc291cmNlRGVuc2l0eSwgdGFyZ2V0RGVuc2l0eSwgZmFsc2UpOwogICAgICAgICAgICAgbURwaVNjYWxlZEluc2V0cyA9IEluc2V0cy5vZihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGg7Ci0gICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gKGludCkgcGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0OworICAgICAgICAgICAgbURwaVNjYWxlZFdpZHRoID0gKGludCkgbVZlY3RvclN0YXRlLm1CYXNlV2lkdGg7CisgICAgICAgICAgICBtRHBpU2NhbGVkSGVpZ2h0ID0gKGludCkgbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0OwogICAgICAgICAgICAgbURwaVNjYWxlZEluc2V0cyA9IG9wdGljYWxJbnNldHM7CiAgICAgICAgIH0KIApAQCAtNDk5LDggKzQzMyw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBWUGF0aFJlbmRlcmVyIHBhdGggPSBzdGF0ZS5tVlBhdGhSZW5kZXJlcjsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBjaGFuZ2VkRGVuc2l0eSA9IHBhdGguc2V0RGVuc2l0eSgKKyAgICAgICAgZmluYWwgYm9vbGVhbiBjaGFuZ2VkRGVuc2l0eSA9IG1WZWN0b3JTdGF0ZS5zZXREZW5zaXR5KAogICAgICAgICAgICAgICAgIERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHQuZ2V0UmVzb3VyY2VzKCksIDApKTsKICAgICAgICAgbURwaVNjYWxlZERpcnR5IHw9IGNoYW5nZWREZW5zaXR5OwogCkBAIC01MTEsNyArNDQ0LDcgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS5tQ2FjaGVEaXJ0eSA9IHRydWU7CiAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShhKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHJldGhyb3dBc1J1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIGEucmVjeWNsZSgpOwogICAgICAgICAgICAgfQpAQCAtNTI1LDggKzQ1OCw4IEBACiAgICAgICAgICAgICBzdGF0ZS5tVGludCA9IHN0YXRlLm1UaW50Lm9idGFpbkZvclRoZW1lKHQpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBhdGggIT0gbnVsbCAmJiBwYXRoLmNhbkFwcGx5VGhlbWUoKSkgewotICAgICAgICAgICAgcGF0aC5hcHBseVRoZW1lKHQpOworICAgICAgICBpZiAobVZlY3RvclN0YXRlICE9IG51bGwgJiYgbVZlY3RvclN0YXRlLmNhbkFwcGx5VGhlbWUoKSkgeworICAgICAgICAgICAgbVZlY3RvclN0YXRlLmFwcGx5VGhlbWUodCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgbG9jYWwgcHJvcGVydGllcy4KQEAgLTU0MCwxNyArNDczLDE3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgZmxvYXQgZ2V0UGl4ZWxTaXplKCkgewotICAgICAgICBpZiAobVZlY3RvclN0YXRlID09IG51bGwgfHwgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubUJhc2VXaWR0aCA9PSAwIHx8Ci0gICAgICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1CYXNlSGVpZ2h0ID09IDAgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0ID09IDAgfHwKLSAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGggPT0gMCkgeworICAgICAgICBpZiAobVZlY3RvclN0YXRlID09IG51bGwgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aCA9PSAwIHx8CisgICAgICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0ID09IDAgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZpZXdwb3J0SGVpZ2h0ID09IDAgfHwKKyAgICAgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVZpZXdwb3J0V2lkdGggPT0gMCkgewogICAgICAgICAgICAgcmV0dXJuIDE7IC8vIGZhbGwgYmFjayB0byAxOjEgcGl4ZWwgbWFwcGluZy4KICAgICAgICAgfQotICAgICAgICBmbG9hdCBpbnRyaW5zaWNXaWR0aCA9IG1WZWN0b3JTdGF0ZS5tVlBhdGhSZW5kZXJlci5tQmFzZVdpZHRoOwotICAgICAgICBmbG9hdCBpbnRyaW5zaWNIZWlnaHQgPSBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubUJhc2VIZWlnaHQ7Ci0gICAgICAgIGZsb2F0IHZpZXdwb3J0V2lkdGggPSBtVmVjdG9yU3RhdGUubVZQYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGg7Ci0gICAgICAgIGZsb2F0IHZpZXdwb3J0SGVpZ2h0ID0gbVZlY3RvclN0YXRlLm1WUGF0aFJlbmRlcmVyLm1WaWV3cG9ydEhlaWdodDsKKyAgICAgICAgZmxvYXQgaW50cmluc2ljV2lkdGggPSBtVmVjdG9yU3RhdGUubUJhc2VXaWR0aDsKKyAgICAgICAgZmxvYXQgaW50cmluc2ljSGVpZ2h0ID0gbVZlY3RvclN0YXRlLm1CYXNlSGVpZ2h0OworICAgICAgICBmbG9hdCB2aWV3cG9ydFdpZHRoID0gbVZlY3RvclN0YXRlLm1WaWV3cG9ydFdpZHRoOworICAgICAgICBmbG9hdCB2aWV3cG9ydEhlaWdodCA9IG1WZWN0b3JTdGF0ZS5tVmlld3BvcnRIZWlnaHQ7CiAgICAgICAgIGZsb2F0IHNjYWxlWCA9IHZpZXdwb3J0V2lkdGggLyBpbnRyaW5zaWNXaWR0aDsKICAgICAgICAgZmxvYXQgc2NhbGVZID0gdmlld3BvcnRIZWlnaHQgLyBpbnRyaW5zaWNIZWlnaHQ7CiAgICAgICAgIHJldHVybiBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSk7CkBAIC01ODIsMjAgKzUxNSwyMCBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgYXBwbHlBbHBoYShpbnQgY29sb3IsIGZsb2F0IGFscGhhKSB7Ci0gICAgICAgIGludCBhbHBoYUJ5dGVzID0gQ29sb3IuYWxwaGEoY29sb3IpOwotICAgICAgICBjb2xvciAmPSAweDAwRkZGRkZGOwotICAgICAgICBjb2xvciB8PSAoKGludCkgKGFscGhhQnl0ZXMgKiBhbHBoYSkpIDw8IDI0OwotICAgICAgICByZXR1cm4gY29sb3I7Ci0gICAgfQotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5mbGF0ZShATm9uTnVsbCBSZXNvdXJjZXMgciwgQE5vbk51bGwgWG1sUHVsbFBhcnNlciBwYXJzZXIsCiAgICAgICAgICAgICBATm9uTnVsbCBBdHRyaWJ1dGVTZXQgYXR0cnMsIEBOdWxsYWJsZSBUaGVtZSB0aGVtZSkKICAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtVmVjdG9yU3RhdGUubVJvb3RHcm91cCAhPSBudWxsIHx8IG1WZWN0b3JTdGF0ZS5tTmF0aXZlUmVuZGVyZXJQdHIgIT0gMCkgeworICAgICAgICAgICAgLy8gVGhpcyBWRCBoYXMgYmVlbiB1c2VkIHRvIGRpc3BsYXkgb3RoZXIgVkQgcmVzb3VyY2UgY29udGVudCwgY2xlYW4gdXAuCisgICAgICAgICAgICBtVmVjdG9yU3RhdGUubVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoKTsKKyAgICAgICAgICAgIGlmIChtVmVjdG9yU3RhdGUubU5hdGl2ZVJlbmRlcmVyUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveVJlbmRlcmVyKG1WZWN0b3JTdGF0ZS5tTmF0aXZlUmVuZGVyZXJQdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbVZlY3RvclN0YXRlLm1OYXRpdmVSZW5kZXJlclB0ciA9IG5DcmVhdGVSZW5kZXJlcihtVmVjdG9yU3RhdGUubVJvb3RHcm91cC5tTmF0aXZlUHRyKTsKKyAgICAgICAgfQogICAgICAgICBmaW5hbCBWZWN0b3JEcmF3YWJsZVN0YXRlIHN0YXRlID0gbVZlY3RvclN0YXRlOwotICAgICAgICBzdGF0ZS5tVlBhdGhSZW5kZXJlciA9IG5ldyBWUGF0aFJlbmRlcmVyKCk7Ci0gICAgICAgIHN0YXRlLm1WUGF0aFJlbmRlcmVyLnNldERlbnNpdHkoRHJhd2FibGUucmVzb2x2ZURlbnNpdHkociwgMCkpOworICAgICAgICBzdGF0ZS5zZXREZW5zaXR5KERyYXdhYmxlLnJlc29sdmVEZW5zaXR5KHIsIDApKTsKIAogICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGEgPSBvYnRhaW5BdHRyaWJ1dGVzKHIsIHRoZW1lLCBhdHRycywgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGUpOwogICAgICAgICB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KGEpOwpAQCAtNjEyLDcgKzU0NSw2IEBACiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShUeXBlZEFycmF5IGEpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgVmVjdG9yRHJhd2FibGVTdGF0ZSBzdGF0ZSA9IG1WZWN0b3JTdGF0ZTsKLSAgICAgICAgZmluYWwgVlBhdGhSZW5kZXJlciBwYXRoUmVuZGVyZXIgPSBzdGF0ZS5tVlBhdGhSZW5kZXJlcjsKIAogICAgICAgICAvLyBBY2NvdW50IGZvciBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgogICAgICAgICBzdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucyB8PSBhLmdldENoYW5naW5nQ29uZmlndXJhdGlvbnMoKTsKQEAgLTYzMyw2MyArNTY1LDYzIEBACiAgICAgICAgIHN0YXRlLm1BdXRvTWlycm9yZWQgPSBhLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfYXV0b01pcnJvcmVkLCBzdGF0ZS5tQXV0b01pcnJvcmVkKTsKIAotICAgICAgICBwYXRoUmVuZGVyZXIubVZpZXdwb3J0V2lkdGggPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX3ZpZXdwb3J0V2lkdGgsIHBhdGhSZW5kZXJlci5tVmlld3BvcnRXaWR0aCk7Ci0gICAgICAgIHBhdGhSZW5kZXJlci5tVmlld3BvcnRIZWlnaHQgPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX3ZpZXdwb3J0SGVpZ2h0LCBwYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0KTsKKyAgICAgICAgZmxvYXQgdmlld3BvcnRXaWR0aCA9IGEuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfdmlld3BvcnRXaWR0aCwgc3RhdGUubVZpZXdwb3J0V2lkdGgpOworICAgICAgICBmbG9hdCB2aWV3cG9ydEhlaWdodCA9IGEuZ2V0RmxvYXQoCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfdmlld3BvcnRIZWlnaHQsIHN0YXRlLm1WaWV3cG9ydEhlaWdodCk7CisgICAgICAgIHN0YXRlLnNldFZpZXdwb3J0U2l6ZSh2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7CiAKLSAgICAgICAgaWYgKHBhdGhSZW5kZXJlci5tVmlld3BvcnRXaWR0aCA8PSAwKSB7CisgICAgICAgIGlmIChzdGF0ZS5tVmlld3BvcnRXaWR0aCA8PSAwKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbihhLmdldFBvc2l0aW9uRGVzY3JpcHRpb24oKSArCiAgICAgICAgICAgICAgICAgICAgICI8dmVjdG9yPiB0YWcgcmVxdWlyZXMgdmlld3BvcnRXaWR0aCA+IDAiKTsKLSAgICAgICAgfSBlbHNlIGlmIChwYXRoUmVuZGVyZXIubVZpZXdwb3J0SGVpZ2h0IDw9IDApIHsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5tVmlld3BvcnRIZWlnaHQgPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIHZpZXdwb3J0SGVpZ2h0ID4gMCIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGggPSBhLmdldERpbWVuc2lvbigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV93aWR0aCwgcGF0aFJlbmRlcmVyLm1CYXNlV2lkdGgpOwotICAgICAgICBwYXRoUmVuZGVyZXIubUJhc2VIZWlnaHQgPSBhLmdldERpbWVuc2lvbigKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9oZWlnaHQsIHBhdGhSZW5kZXJlci5tQmFzZUhlaWdodCk7CisgICAgICAgIHN0YXRlLm1CYXNlV2lkdGggPSBhLmdldERpbWVuc2lvbigKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV93aWR0aCwgc3RhdGUubUJhc2VXaWR0aCk7CisgICAgICAgIHN0YXRlLm1CYXNlSGVpZ2h0ID0gYS5nZXREaW1lbnNpb24oCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfaGVpZ2h0LCBzdGF0ZS5tQmFzZUhlaWdodCk7CiAKLSAgICAgICAgaWYgKHBhdGhSZW5kZXJlci5tQmFzZVdpZHRoIDw9IDApIHsKKyAgICAgICAgaWYgKHN0YXRlLm1CYXNlV2lkdGggPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIHdpZHRoID4gMCIpOwotICAgICAgICB9IGVsc2UgaWYgKHBhdGhSZW5kZXJlci5tQmFzZUhlaWdodCA8PSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubUJhc2VIZWlnaHQgPD0gMCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oYS5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkgKwogICAgICAgICAgICAgICAgICAgICAiPHZlY3Rvcj4gdGFnIHJlcXVpcmVzIGhlaWdodCA+IDAiKTsKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBpbnNldExlZnQgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldExlZnQsIHBhdGhSZW5kZXJlci5tT3B0aWNhbEluc2V0cy5sZWZ0KTsKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRMZWZ0LCBzdGF0ZS5tT3B0aWNhbEluc2V0cy5sZWZ0KTsKICAgICAgICAgZmluYWwgaW50IGluc2V0VG9wID0gYS5nZXREaW1lbnNpb25QaXhlbE9mZnNldCgKLSAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRUb3AsIHBhdGhSZW5kZXJlci5tT3B0aWNhbEluc2V0cy50b3ApOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFRvcCwgc3RhdGUubU9wdGljYWxJbnNldHMudG9wKTsKICAgICAgICAgZmluYWwgaW50IGluc2V0UmlnaHQgPSBhLmdldERpbWVuc2lvblBpeGVsT2Zmc2V0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFJpZ2h0LCBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHMucmlnaHQpOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX29wdGljYWxJbnNldFJpZ2h0LCBzdGF0ZS5tT3B0aWNhbEluc2V0cy5yaWdodCk7CiAgICAgICAgIGZpbmFsIGludCBpbnNldEJvdHRvbSA9IGEuZ2V0RGltZW5zaW9uUGl4ZWxPZmZzZXQoCi0gICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVfb3B0aWNhbEluc2V0Qm90dG9tLCBwYXRoUmVuZGVyZXIubU9wdGljYWxJbnNldHMuYm90dG9tKTsKLSAgICAgICAgcGF0aFJlbmRlcmVyLm1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZV9vcHRpY2FsSW5zZXRCb3R0b20sIHN0YXRlLm1PcHRpY2FsSW5zZXRzLmJvdHRvbSk7CisgICAgICAgIHN0YXRlLm1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKIAogICAgICAgICBmaW5hbCBmbG9hdCBhbHBoYUluRmxvYXQgPSBhLmdldEZsb2F0KAotICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX2FscGhhLCBwYXRoUmVuZGVyZXIuZ2V0QWxwaGEoKSk7Ci0gICAgICAgIHBhdGhSZW5kZXJlci5zZXRBbHBoYShhbHBoYUluRmxvYXQpOworICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX2FscGhhLCBzdGF0ZS5nZXRBbHBoYSgpKTsKKyAgICAgICAgc3RhdGUuc2V0QWxwaGEoYWxwaGFJbkZsb2F0KTsKIAogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlX25hbWUpOwogICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBwYXRoUmVuZGVyZXIubVJvb3ROYW1lID0gbmFtZTsKLSAgICAgICAgICAgIHBhdGhSZW5kZXJlci5tVkdUYXJnZXRzTWFwLnB1dChuYW1lLCBwYXRoUmVuZGVyZXIpOworICAgICAgICAgICAgc3RhdGUubVJvb3ROYW1lID0gbmFtZTsKKyAgICAgICAgICAgIHN0YXRlLm1WR1RhcmdldHNNYXAucHV0KG5hbWUsIHN0YXRlKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBpbmZsYXRlQ2hpbGRFbGVtZW50cyhSZXNvdXJjZXMgcmVzLCBYbWxQdWxsUGFyc2VyIHBhcnNlciwgQXR0cmlidXRlU2V0IGF0dHJzLAogICAgICAgICAgICAgVGhlbWUgdGhlbWUpIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFZlY3RvckRyYXdhYmxlU3RhdGUgc3RhdGUgPSBtVmVjdG9yU3RhdGU7Ci0gICAgICAgIGZpbmFsIFZQYXRoUmVuZGVyZXIgcGF0aFJlbmRlcmVyID0gc3RhdGUubVZQYXRoUmVuZGVyZXI7CiAgICAgICAgIGJvb2xlYW4gbm9QYXRoVGFnID0gdHJ1ZTsKIAogICAgICAgICAvLyBVc2UgYSBzdGFjayB0byBoZWxwIHRvIGJ1aWxkIHRoZSBncm91cCB0cmVlLgogICAgICAgICAvLyBUaGUgdG9wIG9mIHRoZSBzdGFjayBpcyBhbHdheXMgdGhlIGN1cnJlbnQgZ3JvdXAuCiAgICAgICAgIGZpbmFsIFN0YWNrPFZHcm91cD4gZ3JvdXBTdGFjayA9IG5ldyBTdGFjazxWR3JvdXA+KCk7Ci0gICAgICAgIGdyb3VwU3RhY2sucHVzaChwYXRoUmVuZGVyZXIubVJvb3RHcm91cCk7CisgICAgICAgIGdyb3VwU3RhY2sucHVzaChzdGF0ZS5tUm9vdEdyb3VwKTsKIAogICAgICAgICBpbnQgZXZlbnRUeXBlID0gcGFyc2VyLmdldEV2ZW50VHlwZSgpOwogICAgICAgICB3aGlsZSAoZXZlbnRUeXBlICE9IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSB7CkBAIC03MDIsNyArNjM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aC5pbmZsYXRlKHJlcywgYXR0cnMsIHRoZW1lKTsKICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdyb3VwLmFkZENoaWxkKHBhdGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGF0aC5nZXRQYXRoTmFtZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhSZW5kZXJlci5tVkdUYXJnZXRzTWFwLnB1dChwYXRoLmdldFBhdGhOYW1lKCksIHBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubVZHVGFyZ2V0c01hcC5wdXQocGF0aC5nZXRQYXRoTmFtZSgpLCBwYXRoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBub1BhdGhUYWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUubUNoYW5naW5nQ29uZmlndXJhdGlvbnMgfD0gcGF0aC5tQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKQEAgLTcxMSw3ICs2NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXRoLmluZmxhdGUocmVzLCBhdHRycywgdGhlbWUpOwogICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ2hpbGQocGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLmdldFBhdGhOYW1lKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAucHV0KHBhdGguZ2V0UGF0aE5hbWUoKSwgcGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tVkdUYXJnZXRzTWFwLnB1dChwYXRoLmdldFBhdGhOYW1lKCksIHBhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zIHw9IHBhdGgubUNoYW5naW5nQ29uZmlndXJhdGlvbnM7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTSEFQRV9HUk9VUC5lcXVhbHModGFnTmFtZSkpIHsKQEAgLTcyMCw3ICs2NTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXAuYWRkQ2hpbGQobmV3Q2hpbGRHcm91cCk7CiAgICAgICAgICAgICAgICAgICAgIGdyb3VwU3RhY2sucHVzaChuZXdDaGlsZEdyb3VwKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkR3JvdXAuZ2V0R3JvdXBOYW1lKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFJlbmRlcmVyLm1WR1RhcmdldHNNYXAucHV0KG5ld0NoaWxkR3JvdXAuZ2V0R3JvdXBOYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tVkdUYXJnZXRzTWFwLnB1dChuZXdDaGlsZEdyb3VwLmdldEdyb3VwTmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGlsZEdyb3VwKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tQ2hhbmdpbmdDb25maWd1cmF0aW9ucyB8PSBuZXdDaGlsZEdyb3VwLm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwpAQCAtNzM0LDExICs2NjYsNiBAQAogICAgICAgICAgICAgZXZlbnRUeXBlID0gcGFyc2VyLm5leHQoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFByaW50IHRoZSB0cmVlIG91dCBmb3IgZGVidWcuCi0gICAgICAgIGlmIChEQkdfVkVDVE9SX0RSQVdBQkxFKSB7Ci0gICAgICAgICAgICBwYXRoUmVuZGVyZXIucHJpbnRHcm91cFRyZWUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmIChub1BhdGhUYWcpIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ0J1ZmZlciB0YWcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAKQEAgLTc1Nyw3ICs2ODQsNyBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0QWxsb3dDYWNoaW5nKGJvb2xlYW4gYWxsb3dDYWNoaW5nKSB7Ci0gICAgICAgIG1BbGxvd0NhY2hpbmcgPSBhbGxvd0NhY2hpbmc7CisgICAgICAgIG5TZXRBbGxvd0NhY2hpbmcobVZlY3RvclN0YXRlLmdldE5hdGl2ZVJlbmRlcmVyKCksIGFsbG93Q2FjaGluZyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIG5lZWRNaXJyb3JpbmcoKSB7CkBAIC03NzgsODQgKzcwNSw2OCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFZlY3RvckRyYXdhYmxlU3RhdGUgZXh0ZW5kcyBDb25zdGFudFN0YXRlIHsKKyAgICAgICAgLy8gVmFyaWFibGVzIGJlbG93IG5lZWQgdG8gYmUgY29waWVkIChkZWVwIGNvcHkgaWYgYXBwbGljYWJsZSkgZm9yIG11dGF0aW9uLgogICAgICAgICBpbnRbXSBtVGhlbWVBdHRyczsKICAgICAgICAgaW50IG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICBWUGF0aFJlbmRlcmVyIG1WUGF0aFJlbmRlcmVyOwogICAgICAgICBDb2xvclN0YXRlTGlzdCBtVGludCA9IG51bGw7CiAgICAgICAgIE1vZGUgbVRpbnRNb2RlID0gREVGQVVMVF9USU5UX01PREU7CiAgICAgICAgIGJvb2xlYW4gbUF1dG9NaXJyb3JlZDsKIAotICAgICAgICBCaXRtYXAgbUNhY2hlZEJpdG1hcDsKKyAgICAgICAgZmxvYXQgbUJhc2VXaWR0aCA9IDA7CisgICAgICAgIGZsb2F0IG1CYXNlSGVpZ2h0ID0gMDsKKyAgICAgICAgZmxvYXQgbVZpZXdwb3J0V2lkdGggPSAwOworICAgICAgICBmbG9hdCBtVmlld3BvcnRIZWlnaHQgPSAwOworICAgICAgICBJbnNldHMgbU9wdGljYWxJbnNldHMgPSBJbnNldHMuTk9ORTsKKyAgICAgICAgU3RyaW5nIG1Sb290TmFtZSA9IG51bGw7CisgICAgICAgIFZHcm91cCBtUm9vdEdyb3VwOworICAgICAgICBsb25nIG1OYXRpdmVSZW5kZXJlclB0cjsKKworICAgICAgICBpbnQgbURlbnNpdHkgPSBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFRkFVTFQ7CisgICAgICAgIGZpbmFsIEFycmF5TWFwPFN0cmluZywgT2JqZWN0PiBtVkdUYXJnZXRzTWFwID0gbmV3IEFycmF5TWFwPD4oKTsKKworICAgICAgICAvLyBGaWVsZHMgZm9yIGNhY2hlCiAgICAgICAgIGludFtdIG1DYWNoZWRUaGVtZUF0dHJzOwogICAgICAgICBDb2xvclN0YXRlTGlzdCBtQ2FjaGVkVGludDsKICAgICAgICAgTW9kZSBtQ2FjaGVkVGludE1vZGU7Ci0gICAgICAgIGludCBtQ2FjaGVkUm9vdEFscGhhOwogICAgICAgICBib29sZWFuIG1DYWNoZWRBdXRvTWlycm9yZWQ7CiAgICAgICAgIGJvb2xlYW4gbUNhY2hlRGlydHk7Ci0gICAgICAgIC8qKiBUZW1wb3JhcnkgcGFpbnQgb2JqZWN0IHVzZWQgdG8gZHJhdyBjYWNoZWQgYml0bWFwcy4gKi8KLSAgICAgICAgUGFpbnQgbVRlbXBQYWludDsKIAogICAgICAgICAvLyBEZWVwIGNvcHkgZm9yIG11dGF0ZSgpIG9yIGltcGxpY2l0bHkgbXV0YXRlLgogICAgICAgICBwdWJsaWMgVmVjdG9yRHJhd2FibGVTdGF0ZShWZWN0b3JEcmF3YWJsZVN0YXRlIGNvcHkpIHsKICAgICAgICAgICAgIGlmIChjb3B5ICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtVGhlbWVBdHRycyA9IGNvcHkubVRoZW1lQXR0cnM7CiAgICAgICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBjb3B5Lm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICAgICAgICAgIG1WUGF0aFJlbmRlcmVyID0gbmV3IFZQYXRoUmVuZGVyZXIoY29weS5tVlBhdGhSZW5kZXJlcik7CiAgICAgICAgICAgICAgICAgbVRpbnQgPSBjb3B5Lm1UaW50OwogICAgICAgICAgICAgICAgIG1UaW50TW9kZSA9IGNvcHkubVRpbnRNb2RlOwogICAgICAgICAgICAgICAgIG1BdXRvTWlycm9yZWQgPSBjb3B5Lm1BdXRvTWlycm9yZWQ7CisgICAgICAgICAgICAgICAgbVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoY29weS5tUm9vdEdyb3VwLCBtVkdUYXJnZXRzTWFwKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUmVuZGVyZXJQdHIgPSBuQ3JlYXRlUmVuZGVyZXIobVJvb3RHcm91cC5tTmF0aXZlUHRyKTsKKworICAgICAgICAgICAgICAgIG1CYXNlV2lkdGggPSBjb3B5Lm1CYXNlV2lkdGg7CisgICAgICAgICAgICAgICAgbUJhc2VIZWlnaHQgPSBjb3B5Lm1CYXNlSGVpZ2h0OworICAgICAgICAgICAgICAgIHNldFZpZXdwb3J0U2l6ZShjb3B5Lm1WaWV3cG9ydFdpZHRoLCBjb3B5Lm1WaWV3cG9ydEhlaWdodCk7CisgICAgICAgICAgICAgICAgbU9wdGljYWxJbnNldHMgPSBjb3B5Lm1PcHRpY2FsSW5zZXRzOworCisgICAgICAgICAgICAgICAgbVJvb3ROYW1lID0gY29weS5tUm9vdE5hbWU7CisgICAgICAgICAgICAgICAgbURlbnNpdHkgPSBjb3B5Lm1EZW5zaXR5OworICAgICAgICAgICAgICAgIGlmIChjb3B5Lm1Sb290TmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1WR1RhcmdldHNNYXAucHV0KGNvcHkubVJvb3ROYW1lLCB0aGlzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgUmVjdCBvcmlnaW5hbEJvdW5kcykgewotICAgICAgICAgICAgLy8gVGhlIGJpdG1hcCdzIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIGJvdW5kcy4KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IHAgPSBnZXRQYWludChmaWx0ZXIpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAobUNhY2hlZEJpdG1hcCwgbnVsbCwgb3JpZ2luYWxCb3VuZHMsIHApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNsdWNlbnRSb290KCkgewotICAgICAgICAgICAgcmV0dXJuIG1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpIDwgMjU1OwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEByZXR1cm4gbnVsbCB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFscGhhIHBhaW50LgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFBhaW50IGdldFBhaW50KENvbG9yRmlsdGVyIGZpbHRlcikgewotICAgICAgICAgICAgaWYgKCFoYXNUcmFuc2x1Y2VudFJvb3QoKSAmJiBmaWx0ZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUmVuZGVyZXJQdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIG5EZXN0cm95UmVuZGVyZXIobU5hdGl2ZVJlbmRlcmVyUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUmVuZGVyZXJQdHIgPSAwOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobVRlbXBQYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVRlbXBQYWludCA9IG5ldyBQYWludCgpOwotICAgICAgICAgICAgICAgIG1UZW1wUGFpbnQuc2V0RmlsdGVyQml0bWFwKHRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVRlbXBQYWludC5zZXRBbHBoYShtVlBhdGhSZW5kZXJlci5nZXRSb290QWxwaGEoKSk7Ci0gICAgICAgICAgICBtVGVtcFBhaW50LnNldENvbG9yRmlsdGVyKGZpbHRlcik7Ci0gICAgICAgICAgICByZXR1cm4gbVRlbXBQYWludDsKKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVDYWNoZWRCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICAgICAgICBtQ2FjaGVkQml0bWFwLmVyYXNlQ29sb3IoQ29sb3IuVFJBTlNQQVJFTlQpOwotICAgICAgICAgICAgQ2FudmFzIHRtcENhbnZhcyA9IG5ldyBDYW52YXMobUNhY2hlZEJpdG1hcCk7Ci0gICAgICAgICAgICBtVlBhdGhSZW5kZXJlci5kcmF3KHRtcENhbnZhcywgd2lkdGgsIGhlaWdodCwgbnVsbCk7Ci0gICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBjcmVhdGVDYWNoZWRCaXRtYXBJZk5lZWRlZChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgICAgIGlmIChtQ2FjaGVkQml0bWFwID09IG51bGwgfHwgIWNhblJldXNlQml0bWFwKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgbUNhY2hlZEJpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAod2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKLSAgICAgICAgICAgICAgICBtQ2FjaGVEaXJ0eSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNhblJldXNlQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICAgICAgaWYgKHdpZHRoID09IG1DYWNoZWRCaXRtYXAuZ2V0V2lkdGgoKQotICAgICAgICAgICAgICAgICAgICAmJiBoZWlnaHQgPT0gbUNhY2hlZEJpdG1hcC5nZXRIZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBsb25nIGdldE5hdGl2ZVJlbmRlcmVyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVSZW5kZXJlclB0cjsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGNhblJldXNlQ2FjaGUoKSB7CkBAIC04NjMsMTAgKzc3NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGhlbWVBdHRycyA9PSBtVGhlbWVBdHRycwogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGludCA9PSBtVGludAogICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkVGludE1vZGUgPT0gbVRpbnRNb2RlCi0gICAgICAgICAgICAgICAgICAgICYmIG1DYWNoZWRBdXRvTWlycm9yZWQgPT0gbUF1dG9NaXJyb3JlZAotICAgICAgICAgICAgICAgICAgICAmJiBtQ2FjaGVkUm9vdEFscGhhID09IG1WUGF0aFJlbmRlcmVyLmdldFJvb3RBbHBoYSgpKSB7CisgICAgICAgICAgICAgICAgICAgICYmIG1DYWNoZWRBdXRvTWlycm9yZWQgPT0gbUF1dG9NaXJyb3JlZCkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgdXBkYXRlQ2FjaGVTdGF0ZXMoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC04NzYsMjEgKzc4NywyNSBAQAogICAgICAgICAgICAgbUNhY2hlZFRoZW1lQXR0cnMgPSBtVGhlbWVBdHRyczsKICAgICAgICAgICAgIG1DYWNoZWRUaW50ID0gbVRpbnQ7CiAgICAgICAgICAgICBtQ2FjaGVkVGludE1vZGUgPSBtVGludE1vZGU7Ci0gICAgICAgICAgICBtQ2FjaGVkUm9vdEFscGhhID0gbVZQYXRoUmVuZGVyZXIuZ2V0Um9vdEFscGhhKCk7CiAgICAgICAgICAgICBtQ2FjaGVkQXV0b01pcnJvcmVkID0gbUF1dG9NaXJyb3JlZDsKICAgICAgICAgICAgIG1DYWNoZURpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKKyAgICAgICAgICAgIG1Sb290R3JvdXAuYXBwbHlUaGVtZSh0KTsKKyAgICAgICAgfQorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBjYW5BcHBseVRoZW1lKCkgewogICAgICAgICAgICAgcmV0dXJuIG1UaGVtZUF0dHJzICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgfHwgKG1WUGF0aFJlbmRlcmVyICE9IG51bGwgJiYgbVZQYXRoUmVuZGVyZXIuY2FuQXBwbHlUaGVtZSgpKQorICAgICAgICAgICAgICAgICAgICB8fCAobVJvb3RHcm91cCAhPSBudWxsICYmIG1Sb290R3JvdXAuY2FuQXBwbHlUaGVtZSgpKQogICAgICAgICAgICAgICAgICAgICB8fCAobVRpbnQgIT0gbnVsbCAmJiBtVGludC5jYW5BcHBseVRoZW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIHx8IHN1cGVyLmNhbkFwcGx5VGhlbWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBWZWN0b3JEcmF3YWJsZVN0YXRlKCkgewotICAgICAgICAgICAgbVZQYXRoUmVuZGVyZXIgPSBuZXcgVlBhdGhSZW5kZXJlcigpOworICAgICAgICAgICAgbVJvb3RHcm91cCA9IG5ldyBWR3JvdXAoKTsKKyAgICAgICAgICAgIG1OYXRpdmVSZW5kZXJlclB0ciA9IG5DcmVhdGVSZW5kZXJlcihtUm9vdEdyb3VwLm1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05MTEsODAgKzgyNiwxMyBAQAogCiAgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU3RhdGVmdWwoKSB7CiAgICAgICAgICAgICByZXR1cm4gKG1UaW50ICE9IG51bGwgJiYgbVRpbnQuaXNTdGF0ZWZ1bCgpKQotICAgICAgICAgICAgICAgICAgICB8fCAobVZQYXRoUmVuZGVyZXIgIT0gbnVsbCAmJiBtVlBhdGhSZW5kZXJlci5pc1N0YXRlZnVsKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVlBhdGhSZW5kZXJlciB7Ci0gICAgICAgIC8qIFJpZ2h0IG5vdyB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgaXMgb3JnYW5pemVkIGFzIGEgdHJlZS4KLSAgICAgICAgICogRWFjaCBub2RlIGNhbiBiZSBhIGdyb3VwIG5vZGUsIG9yIGEgcGF0aC4KLSAgICAgICAgICogQSBncm91cCBub2RlIGNhbiBoYXZlIGdyb3VwcyBvciBwYXRocyBhcyBjaGlsZHJlbiwgYnV0IGEgcGF0aCBub2RlIGhhcwotICAgICAgICAgKiBubyBjaGlsZHJlbi4KLSAgICAgICAgICogT25lIGV4YW1wbGUgY2FuIGJlOgotICAgICAgICAgKiAgICAgICAgICAgICAgICAgUm9vdCBHcm91cAotICAgICAgICAgKiAgICAgICAgICAgICAgICAvICAgIHwgICAgIFwKLSAgICAgICAgICogICAgICAgICAgIEdyb3VwICAgIFBhdGggICAgR3JvdXAKLSAgICAgICAgICogICAgICAgICAgLyAgICAgXCAgICAgICAgICAgICB8Ci0gICAgICAgICAqICAgICAgICAgUGF0aCAgIFBhdGggICAgICAgICBQYXRoCi0gICAgICAgICAqCi0gICAgICAgICAqLwotICAgICAgICAvLyBWYXJpYWJsZXMgdGhhdCBvbmx5IHVzZWQgdGVtcG9yYXJpbHkgaW5zaWRlIHRoZSBkcmF3KCkgY2FsbCwgc28gdGhlcmUKLSAgICAgICAgLy8gaXMgbm8gbmVlZCBmb3IgZGVlcCBjb3B5aW5nLgotICAgICAgICBwcml2YXRlIGZpbmFsIFRlbXBTdGF0ZSBtVGVtcFN0YXRlID0gbmV3IFRlbXBTdGF0ZSgpOwotCi0gICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgICAgIC8vIFZhcmlhYmxlcyBiZWxvdyBuZWVkIHRvIGJlIGNvcGllZCAoZGVlcCBjb3B5IGlmIGFwcGxpY2FibGUpIGZvciBtdXRhdGlvbi4KLSAgICAgICAgcHJpdmF0ZSBpbnQgbUNoYW5naW5nQ29uZmlndXJhdGlvbnM7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgVkdyb3VwIG1Sb290R3JvdXA7Ci0gICAgICAgIGZsb2F0IG1CYXNlV2lkdGggPSAwOwotICAgICAgICBmbG9hdCBtQmFzZUhlaWdodCA9IDA7Ci0gICAgICAgIGZsb2F0IG1WaWV3cG9ydFdpZHRoID0gMDsKLSAgICAgICAgZmxvYXQgbVZpZXdwb3J0SGVpZ2h0ID0gMDsKLSAgICAgICAgSW5zZXRzIG1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLk5PTkU7Ci0gICAgICAgIGludCBtUm9vdEFscGhhID0gMHhGRjsKLSAgICAgICAgU3RyaW5nIG1Sb290TmFtZSA9IG51bGw7Ci0KLSAgICAgICAgaW50IG1EZW5zaXR5ID0gRGlzcGxheU1ldHJpY3MuREVOU0lUWV9ERUZBVUxUOwotCi0gICAgICAgIGZpbmFsIEFycmF5TWFwPFN0cmluZywgT2JqZWN0PiBtVkdUYXJnZXRzTWFwID0gbmV3IEFycmF5TWFwPD4oKTsKLQotICAgICAgICBwdWJsaWMgVlBhdGhSZW5kZXJlcigpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAgPSBuZXcgVkdyb3VwKCk7CisgICAgICAgICAgICAgICAgICAgIHx8IChtUm9vdEdyb3VwICE9IG51bGwgJiYgbVJvb3RHcm91cC5pc1N0YXRlZnVsKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgc2V0Um9vdEFscGhhKGludCBhbHBoYSkgewotICAgICAgICAgICAgbVJvb3RBbHBoYSA9IGFscGhhOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRSb290QWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvb3RBbHBoYTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNldEFscGhhKCkgYW5kIGdldEFscGhhKCkgYXJlIHVzZWQgbW9zdGx5IGZvciBhbmltYXRpb24gcHVycG9zZSwgc2luY2UKLSAgICAgICAgLy8gQW5pbWF0b3IgbGlrZSB0byB1c2UgYWxwaGEgZnJvbSAwIHRvIDEuCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7Ci0gICAgICAgICAgICBzZXRSb290QWxwaGEoKGludCkgKGFscGhhICogMjU1KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICAgICAgcHVibGljIGZsb2F0IGdldEFscGhhKCkgewotICAgICAgICAgICAgcmV0dXJuIGdldFJvb3RBbHBoYSgpIC8gMjU1LjBmOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFZQYXRoUmVuZGVyZXIoVlBhdGhSZW5kZXJlciBjb3B5KSB7Ci0gICAgICAgICAgICBtUm9vdEdyb3VwID0gbmV3IFZHcm91cChjb3B5Lm1Sb290R3JvdXAsIG1WR1RhcmdldHNNYXApOwotICAgICAgICAgICAgbUJhc2VXaWR0aCA9IGNvcHkubUJhc2VXaWR0aDsKLSAgICAgICAgICAgIG1CYXNlSGVpZ2h0ID0gY29weS5tQmFzZUhlaWdodDsKLSAgICAgICAgICAgIG1WaWV3cG9ydFdpZHRoID0gY29weS5tVmlld3BvcnRXaWR0aDsKLSAgICAgICAgICAgIG1WaWV3cG9ydEhlaWdodCA9IGNvcHkubVZpZXdwb3J0SGVpZ2h0OwotICAgICAgICAgICAgbU9wdGljYWxJbnNldHMgPSBjb3B5Lm1PcHRpY2FsSW5zZXRzOwotICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgPSBjb3B5Lm1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwotICAgICAgICAgICAgbVJvb3RBbHBoYSA9IGNvcHkubVJvb3RBbHBoYTsKLSAgICAgICAgICAgIG1Sb290TmFtZSA9IGNvcHkubVJvb3ROYW1lOwotICAgICAgICAgICAgbURlbnNpdHkgPSBjb3B5Lm1EZW5zaXR5OwotICAgICAgICAgICAgaWYgKGNvcHkubVJvb3ROYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtVkdUYXJnZXRzTWFwLnB1dChjb3B5Lm1Sb290TmFtZSwgdGhpcyk7Ci0gICAgICAgICAgICB9CisgICAgICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGZsb2F0IHZpZXdwb3J0V2lkdGgsIGZsb2F0IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgICAgICAgICBtVmlld3BvcnRXaWR0aCA9IHZpZXdwb3J0V2lkdGg7CisgICAgICAgICAgICBtVmlld3BvcnRIZWlnaHQgPSB2aWV3cG9ydEhlaWdodDsKKyAgICAgICAgICAgIG5TZXRSZW5kZXJlclZpZXdwb3J0U2l6ZShnZXROYXRpdmVSZW5kZXJlcigpLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzZXREZW5zaXR5KGludCB0YXJnZXREZW5zaXR5KSB7CkBAIC0xMDEyLDY4ICs4NjAsNTAgQEAKICAgICAgICAgICAgIG1PcHRpY2FsSW5zZXRzID0gSW5zZXRzLm9mKGluc2V0TGVmdCwgaW5zZXRUb3AsIGluc2V0UmlnaHQsIGluc2V0Qm90dG9tKTsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNhbkFwcGx5VGhlbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJvb3RHcm91cC5jYW5BcHBseVRoZW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAuYXBwbHlUaGVtZSh0KTsKLSAgICAgICAgfQotCiAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uU3RhdGVDaGFuZ2UoaW50W10gc3RhdGVTZXQpIHsKICAgICAgICAgICAgIHJldHVybiBtUm9vdEdyb3VwLm9uU3RhdGVDaGFuZ2Uoc3RhdGVTZXQpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm9vdEdyb3VwLmlzU3RhdGVmdWwoKTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIHNldEFscGhhKCkgYW5kIGdldEFscGhhKCkgYXJlIHVzZWQgbW9zdGx5IGZvciBhbmltYXRpb24gcHVycG9zZS4gUmV0dXJuIHRydWUgaWYgYWxwaGEKKyAgICAgICAgICogaGFzIGNoYW5nZWQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgYm9vbGVhbiBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeworICAgICAgICAgICAgcmV0dXJuIG5TZXRSb290QWxwaGEobU5hdGl2ZVJlbmRlcmVyUHRyLCBhbHBoYSk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIGludCB3LCBpbnQgaCwgQ29sb3JGaWx0ZXIgZmlsdGVyKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzY2FsZVggPSB3IC8gbVZpZXdwb3J0V2lkdGg7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBzY2FsZVkgPSBoIC8gbVZpZXdwb3J0SGVpZ2h0OwotICAgICAgICAgICAgbVJvb3RHcm91cC5kcmF3KGNhbnZhcywgbVRlbXBTdGF0ZSwgTWF0cml4LklERU5USVRZX01BVFJJWCwgZmlsdGVyLCBzY2FsZVgsIHNjYWxlWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcmludEdyb3VwVHJlZSgpIHsKLSAgICAgICAgICAgIG1Sb290R3JvdXAucHJpbnRHcm91cFRyZWUoIiIpOworICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKKyAgICAgICAgcHVibGljIGZsb2F0IGdldEFscGhhKCkgeworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb290QWxwaGEobU5hdGl2ZVJlbmRlcmVyUHRyKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFZHcm91cCBpbXBsZW1lbnRzIFZPYmplY3QgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgR1JPVVBfSU5ERU5UID0gIiAgICAiOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUk9UQVRFX0lOREVYID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBJVk9UX1hfSU5ERVggPSAxOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUElWT1RfWV9JTkRFWCA9IDI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTQ0FMRV9YX0lOREVYID0gMzsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNDQUxFX1lfSU5ERVggPSA0OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRFX1hfSU5ERVggPSA1OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNMQVRFX1lfSU5ERVggPSA2OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNGT1JNX1BST1BFUlRZX0NPVU5UID0gNzsKIAotICAgICAgICAvLyBtU3RhY2tlZE1hdHJpeCBpcyBvbmx5IHVzZWQgdGVtcG9yYXJpbHkgd2hlbiBkcmF3aW5nLCBpdCBjb21iaW5lcyBhbGwKLSAgICAgICAgLy8gdGhlIHBhcmVudHMnIGxvY2FsIG1hdHJpY2VzIHdpdGggdGhlIGN1cnJlbnQgb25lLgotICAgICAgICBwcml2YXRlIGZpbmFsIE1hdHJpeCBtU3RhY2tlZE1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLQorICAgICAgICAvLyBUZW1wIGFycmF5IHRvIHN0b3JlIHRyYW5zZm9ybSB2YWx1ZXMgb2J0YWluZWQgZnJvbSBuYXRpdmUuCisgICAgICAgIHByaXZhdGUgZmxvYXRbXSBtVHJhbnNmb3JtOwogICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICAgICAvLyBWYXJpYWJsZXMgYmVsb3cgbmVlZCB0byBiZSBjb3BpZWQgKGRlZXAgY29weSBpZiBhcHBsaWNhYmxlKSBmb3IgbXV0YXRpb24uCiAgICAgICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFZPYmplY3Q+IG1DaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgICAgIHByaXZhdGUgZmxvYXQgbVJvdGF0ZSA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVBpdm90WCA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVBpdm90WSA9IDA7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVNjYWxlWCA9IDE7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVNjYWxlWSA9IDE7Ci0gICAgICAgIHByaXZhdGUgZmxvYXQgbVRyYW5zbGF0ZVggPSAwOwotICAgICAgICBwcml2YXRlIGZsb2F0IG1UcmFuc2xhdGVZID0gMDsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1N0YXRlZnVsOwogCiAgICAgICAgIC8vIG1Mb2NhbE1hdHJpeCBpcyB1cGRhdGVkIGJhc2VkIG9uIHRoZSB1cGRhdGUgb2YgdHJhbnNmb3JtYXRpb24gaW5mb3JtYXRpb24sCiAgICAgICAgIC8vIGVpdGhlciBwYXJzZWQgZnJvbSB0aGUgWE1MIG9yIGJ5IGFuaW1hdGlvbi4KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXRyaXggbUxvY2FsTWF0cml4ID0gbmV3IE1hdHJpeCgpOwogICAgICAgICBwcml2YXRlIGludCBtQ2hhbmdpbmdDb25maWd1cmF0aW9uczsKICAgICAgICAgcHJpdmF0ZSBpbnRbXSBtVGhlbWVBdHRyczsKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbUdyb3VwTmFtZSA9IG51bGw7CisgICAgICAgIHByaXZhdGUgbG9uZyBtTmF0aXZlUHRyID0gMDsKIAogICAgICAgICBwdWJsaWMgVkdyb3VwKFZHcm91cCBjb3B5LCBBcnJheU1hcDxTdHJpbmcsIE9iamVjdD4gdGFyZ2V0c01hcCkgewotICAgICAgICAgICAgbVJvdGF0ZSA9IGNvcHkubVJvdGF0ZTsKLSAgICAgICAgICAgIG1QaXZvdFggPSBjb3B5Lm1QaXZvdFg7Ci0gICAgICAgICAgICBtUGl2b3RZID0gY29weS5tUGl2b3RZOwotICAgICAgICAgICAgbVNjYWxlWCA9IGNvcHkubVNjYWxlWDsKLSAgICAgICAgICAgIG1TY2FsZVkgPSBjb3B5Lm1TY2FsZVk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWCA9IGNvcHkubVRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWSA9IGNvcHkubVRyYW5zbGF0ZVk7CisKICAgICAgICAgICAgIG1Jc1N0YXRlZnVsID0gY29weS5tSXNTdGF0ZWZ1bDsKICAgICAgICAgICAgIG1UaGVtZUF0dHJzID0gY29weS5tVGhlbWVBdHRyczsKICAgICAgICAgICAgIG1Hcm91cE5hbWUgPSBjb3B5Lm1Hcm91cE5hbWU7CkBAIC0xMDgxLDE1ICs5MTEsMTQgQEAKICAgICAgICAgICAgIGlmIChtR3JvdXBOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0YXJnZXRzTWFwLnB1dChtR3JvdXBOYW1lLCB0aGlzKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxvY2FsTWF0cml4LnNldChjb3B5Lm1Mb2NhbE1hdHJpeCk7CisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUdyb3VwKGNvcHkubU5hdGl2ZVB0cik7CiAKICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxWT2JqZWN0PiBjaGlsZHJlbiA9IGNvcHkubUNoaWxkcmVuOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGZpbmFsIFZPYmplY3QgY29weUNoaWxkID0gY2hpbGRyZW4uZ2V0KGkpOwogICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQgaW5zdGFuY2VvZiBWR3JvdXApIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgVkdyb3VwIGNvcHlHcm91cCA9IChWR3JvdXApIGNvcHlDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgbUNoaWxkcmVuLmFkZChuZXcgVkdyb3VwKGNvcHlHcm91cCwgdGFyZ2V0c01hcCkpOworICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChuZXcgVkdyb3VwKGNvcHlHcm91cCwgdGFyZ2V0c01hcCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZQYXRoIG5ld1BhdGg7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5Q2hpbGQgaW5zdGFuY2VvZiBWRnVsbFBhdGgpIHsKQEAgLTEwOTksNyArOTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVua25vd24gb2JqZWN0IGluIHRoZSB0cmVlISIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1DaGlsZHJlbi5hZGQobmV3UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKG5ld1BhdGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3UGF0aC5tUGF0aE5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0c01hcC5wdXQobmV3UGF0aC5tUGF0aE5hbWUsIG5ld1BhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTA4LDQzICs5MzcsMjMgQEAKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBWR3JvdXAoKSB7CisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUdyb3VwKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwTmFtZSgpIHsKICAgICAgICAgICAgIHJldHVybiBtR3JvdXBOYW1lOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIE1hdHJpeCBnZXRMb2NhbE1hdHJpeCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtTG9jYWxNYXRyaXg7Ci0gICAgICAgIH0KLQogICAgICAgICBwdWJsaWMgdm9pZCBhZGRDaGlsZChWT2JqZWN0IGNoaWxkKSB7CisgICAgICAgICAgICBuQWRkQ2hpbGQobU5hdGl2ZVB0ciwgY2hpbGQuZ2V0TmF0aXZlUHRyKCkpOwogICAgICAgICAgICAgbUNoaWxkcmVuLmFkZChjaGlsZCk7CiAKICAgICAgICAgICAgIG1Jc1N0YXRlZnVsIHw9IGNoaWxkLmlzU3RhdGVmdWwoKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIFRlbXBTdGF0ZSB0ZW1wLCBNYXRyaXggY3VycmVudE1hdHJpeCwKLSAgICAgICAgICAgICAgICBDb2xvckZpbHRlciBmaWx0ZXIsIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSB7Ci0gICAgICAgICAgICAvLyBDYWxjdWxhdGUgY3VycmVudCBncm91cCdzIG1hdHJpeCBieSBwcmVDb25jYXQgdGhlIHBhcmVudCdzIGFuZAotICAgICAgICAgICAgLy8gYW5kIHRoZSBjdXJyZW50IG9uZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgICAgICAgICAgIC8vIEJhc2ljYWxseSB0aGUgTWZpbmFsID0gTXZpZXdwb3J0ICogTTAgKiBNMSAqIE0yOwotICAgICAgICAgICAgLy8gTWkgdGhlIGxvY2FsIG1hdHJpeCBhdCBsZXZlbCBpIG9mIHRoZSBncm91cCB0cmVlLgotICAgICAgICAgICAgbVN0YWNrZWRNYXRyaXguc2V0KGN1cnJlbnRNYXRyaXgpOwotICAgICAgICAgICAgbVN0YWNrZWRNYXRyaXgucHJlQ29uY2F0KG1Mb2NhbE1hdHJpeCk7Ci0KLSAgICAgICAgICAgIC8vIFNhdmUgdGhlIGN1cnJlbnQgY2xpcCBpbmZvcm1hdGlvbiwgd2hpY2ggaXMgbG9jYWwgdG8gdGhpcyBncm91cC4KLSAgICAgICAgICAgIGNhbnZhcy5zYXZlKCk7Ci0KLSAgICAgICAgICAgIC8vIERyYXcgdGhlIGdyb3VwIHRyZWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFhNTCBmaWxlLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvdW50ID0gbUNoaWxkcmVuLnNpemUoKTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBWT2JqZWN0IGNoaWxkID0gbUNoaWxkcmVuLmdldChpKTsKLSAgICAgICAgICAgICAgICBjaGlsZC5kcmF3KGNhbnZhcywgdGVtcCwgbVN0YWNrZWRNYXRyaXgsIGZpbHRlciwgc2NhbGVYLCBzY2FsZVkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBwcmV2aW91cyBjbGlwIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlUHRyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVQdHI7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTExNTUsMjcgKzk2NCw0MyBAQAogICAgICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RhdGVGcm9tVHlwZWRBcnJheShUeXBlZEFycmF5IGEpIHsKKyAgICAgICAgdm9pZCB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KFR5cGVkQXJyYXkgYSkgewogICAgICAgICAgICAgLy8gQWNjb3VudCBmb3IgYW55IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4KICAgICAgICAgICAgIG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zIHw9IGEuZ2V0Q2hhbmdpbmdDb25maWd1cmF0aW9ucygpOwogCiAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSB0aGVtZSBhdHRyaWJ1dGVzLCBpZiBhbnkuCiAgICAgICAgICAgICBtVGhlbWVBdHRycyA9IGEuZXh0cmFjdFRoZW1lQXR0cnMoKTsKLQotICAgICAgICAgICAgbVJvdGF0ZSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9yb3RhdGlvbiwgbVJvdGF0ZSk7Ci0gICAgICAgICAgICBtUGl2b3RYID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WCwgbVBpdm90WCk7Ci0gICAgICAgICAgICBtUGl2b3RZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WSwgbVBpdm90WSk7Ci0gICAgICAgICAgICBtU2NhbGVYID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3NjYWxlWCwgbVNjYWxlWCk7Ci0gICAgICAgICAgICBtU2NhbGVZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3NjYWxlWSwgbVNjYWxlWSk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVYLCBtVHJhbnNsYXRlWCk7Ci0gICAgICAgICAgICBtVHJhbnNsYXRlWSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVZLCBtVHJhbnNsYXRlWSk7CisgICAgICAgICAgICBpZiAobVRyYW5zZm9ybSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gTGF6eSBpbml0aWFsaXphdGlvbjogSWYgdGhlIGdyb3VwIGlzIGNyZWF0ZWQgdGhyb3VnaCBjb3B5IGNvbnN0cnVjdG9yLCB0aGlzIG1heQorICAgICAgICAgICAgICAgIC8vIG5ldmVyIGdldCBjYWxsZWQuCisgICAgICAgICAgICAgICAgbVRyYW5zZm9ybSA9IG5ldyBmbG9hdFtUUkFOU0ZPUk1fUFJPUEVSVFlfQ09VTlRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gbkdldEdyb3VwUHJvcGVydGllcyhtTmF0aXZlUHRyLCBtVHJhbnNmb3JtLCBUUkFOU0ZPUk1fUFJPUEVSVFlfQ09VTlQpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yOiBpbmNvbnNpc3RlbnQgcHJvcGVydHkgY291bnQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsb2F0IHJvdGF0ZSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9yb3RhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybVtST1RBVEVfSU5ERVhdKTsKKyAgICAgICAgICAgIGZsb2F0IHBpdm90WCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9waXZvdFgsCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bUElWT1RfWF9JTkRFWF0pOworICAgICAgICAgICAgZmxvYXQgcGl2b3RZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3Bpdm90WSwKKyAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybVtQSVZPVF9ZX0lOREVYXSk7CisgICAgICAgICAgICBmbG9hdCBzY2FsZVggPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlR3JvdXBfc2NhbGVYLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtW1NDQUxFX1hfSU5ERVhdKTsKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlWSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF9zY2FsZVksCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bU0NBTEVfWV9JTkRFWF0pOworICAgICAgICAgICAgZmxvYXQgdHJhbnNsYXRlWCA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVHcm91cF90cmFuc2xhdGVYLAorICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtW1RSQU5TTEFURV9YX0lOREVYXSk7CisgICAgICAgICAgICBmbG9hdCB0cmFuc2xhdGVZID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUdyb3VwX3RyYW5zbGF0ZVksCisgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1bVFJBTlNMQVRFX1lfSU5ERVhdKTsKIAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGdyb3VwTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlR3JvdXBfbmFtZSk7CiAgICAgICAgICAgICBpZiAoZ3JvdXBOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtR3JvdXBOYW1lID0gZ3JvdXBOYW1lOworICAgICAgICAgICAgICAgIG5TZXROYW1lKG1OYXRpdmVQdHIsIG1Hcm91cE5hbWUpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOworICAgICAgICAgICAgIG5VcGRhdGVHcm91cFByb3BlcnRpZXMobU5hdGl2ZVB0ciwgcm90YXRlLCBwaXZvdFgsIHBpdm90WSwgc2NhbGVYLCBzY2FsZVksCisgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTIxNiw2ICsxMDQxLDE2IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveShtTmF0aXZlUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUHRyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KKworCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBhcHBseVRoZW1lKFRoZW1lIHQpIHsKICAgICAgICAgICAgIGlmIChtVGhlbWVBdHRycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgVHlwZWRBcnJheSBhID0gdC5yZXNvbHZlQXR0cmlidXRlcyhtVGhlbWVBdHRycywKQEAgLTEyMzYsMTI0ICsxMDcxLDc1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlTG9jYWxNYXRyaXgoKSB7Ci0gICAgICAgICAgICAvLyBUaGUgb3JkZXIgd2UgYXBwbHkgaXMgdGhlIHNhbWUgYXMgdGhlCi0gICAgICAgICAgICAvLyBSZW5kZXJOb2RlLmNwcDo6YXBwbHlWaWV3UHJvcGVydHlUcmFuc2Zvcm1zKCkuCi0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucmVzZXQoKTsKLSAgICAgICAgICAgIG1Mb2NhbE1hdHJpeC5wb3N0VHJhbnNsYXRlKC1tUGl2b3RYLCAtbVBpdm90WSk7Ci0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucG9zdFNjYWxlKG1TY2FsZVgsIG1TY2FsZVkpOwotICAgICAgICAgICAgbUxvY2FsTWF0cml4LnBvc3RSb3RhdGUobVJvdGF0ZSwgMCwgMCk7Ci0gICAgICAgICAgICBtTG9jYWxNYXRyaXgucG9zdFRyYW5zbGF0ZShtVHJhbnNsYXRlWCArIG1QaXZvdFgsIG1UcmFuc2xhdGVZICsgbVBpdm90WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcmludEdyb3VwVHJlZShTdHJpbmcgaW5kZW50KSB7Ci0gICAgICAgICAgICBMb2cudihMT0dUQUcsIGluZGVudCArICJncm91cDoiICsgZ2V0R3JvdXBOYW1lKCkgKyAiIHJvdGF0aW9uIGlzICIgKyBtUm90YXRlKTsKLSAgICAgICAgICAgIExvZy52KExPR1RBRywgaW5kZW50ICsgIm1hdHJpeDoiICsgZ2V0TG9jYWxNYXRyaXgoKS50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgZmluYWwgaW50IGNvdW50ID0gbUNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgICBpbmRlbnQgKz0gR1JPVVBfSU5ERU5UOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUaGVuIHByaW50IGFsbCB0aGUgY2hpbGRyZW4gZ3JvdXBzLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVk9iamVjdCBjaGlsZCA9IG1DaGlsZHJlbi5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVkdyb3VwKSB7Ci0gICAgICAgICAgICAgICAgICAgICgoVkdyb3VwKSBjaGlsZCkucHJpbnRHcm91cFRyZWUoaW5kZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQogICAgICAgICAvKiBTZXR0ZXJzIGFuZCBHZXR0ZXJzLCB1c2VkIGJ5IGFuaW1hdG9yIGZyb20gQW5pbWF0ZWRWZWN0b3JEcmF3YWJsZS4gKi8KICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRSb3RhdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm90YXRlOworICAgICAgICAgICAgcmV0dXJuIG5HZXRSb3RhdGlvbihtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgdm9pZCBzZXRSb3RhdGlvbihmbG9hdCByb3RhdGlvbikgewotICAgICAgICAgICAgaWYgKHJvdGF0aW9uICE9IG1Sb3RhdGUpIHsKLSAgICAgICAgICAgICAgICBtUm90YXRlID0gcm90YXRpb247Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRSb3RhdGlvbihtTmF0aXZlUHRyLCByb3RhdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIGZsb2F0IGdldFBpdm90WCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtUGl2b3RYOworICAgICAgICAgICAgcmV0dXJuIG5HZXRQaXZvdFgobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0UGl2b3RYKGZsb2F0IHBpdm90WCkgewotICAgICAgICAgICAgaWYgKHBpdm90WCAhPSBtUGl2b3RYKSB7Ci0gICAgICAgICAgICAgICAgbVBpdm90WCA9IHBpdm90WDsKLSAgICAgICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgblNldFBpdm90WChtTmF0aXZlUHRyLCBwaXZvdFgpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRQaXZvdFkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVBpdm90WTsKKyAgICAgICAgICAgIHJldHVybiBuR2V0UGl2b3RZKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFBpdm90WShmbG9hdCBwaXZvdFkpIHsKLSAgICAgICAgICAgIGlmIChwaXZvdFkgIT0gbVBpdm90WSkgewotICAgICAgICAgICAgICAgIG1QaXZvdFkgPSBwaXZvdFk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRQaXZvdFkobU5hdGl2ZVB0ciwgcGl2b3RZKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgZmxvYXQgZ2V0U2NhbGVYKCkgewotICAgICAgICAgICAgcmV0dXJuIG1TY2FsZVg7CisgICAgICAgICAgICByZXR1cm4gbkdldFNjYWxlWChtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgdm9pZCBzZXRTY2FsZVgoZmxvYXQgc2NhbGVYKSB7Ci0gICAgICAgICAgICBpZiAoc2NhbGVYICE9IG1TY2FsZVgpIHsKLSAgICAgICAgICAgICAgICBtU2NhbGVYID0gc2NhbGVYOwotICAgICAgICAgICAgICAgIHVwZGF0ZUxvY2FsTWF0cml4KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuU2V0U2NhbGVYKG1OYXRpdmVQdHIsIHNjYWxlWCk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIGZsb2F0IGdldFNjYWxlWSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtU2NhbGVZOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTY2FsZVkobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0U2NhbGVZKGZsb2F0IHNjYWxlWSkgewotICAgICAgICAgICAgaWYgKHNjYWxlWSAhPSBtU2NhbGVZKSB7Ci0gICAgICAgICAgICAgICAgbVNjYWxlWSA9IHNjYWxlWTsKLSAgICAgICAgICAgICAgICB1cGRhdGVMb2NhbE1hdHJpeCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgblNldFNjYWxlWShtTmF0aXZlUHRyLCBzY2FsZVkpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGVYKCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVYOworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGVYKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0ZVgoZmxvYXQgdHJhbnNsYXRlWCkgewotICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVggIT0gbVRyYW5zbGF0ZVgpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNsYXRlWCA9IHRyYW5zbGF0ZVg7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGVYKG1OYXRpdmVQdHIsIHRyYW5zbGF0ZVgpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyBmbG9hdCBnZXRUcmFuc2xhdGVZKCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVZOworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmFuc2xhdGVZKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zbGF0ZVkoZmxvYXQgdHJhbnNsYXRlWSkgewotICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZVkgIT0gbVRyYW5zbGF0ZVkpIHsKLSAgICAgICAgICAgICAgICBtVHJhbnNsYXRlWSA9IHRyYW5zbGF0ZVk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTG9jYWxNYXRyaXgoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5TZXRUcmFuc2xhdGVZKG1OYXRpdmVQdHIsIHRyYW5zbGF0ZVkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzYyLDYgKzExNDgsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIFZQYXRoIGltcGxlbWVudHMgVk9iamVjdCB7CiAgICAgICAgIHByb3RlY3RlZCBQYXRoUGFyc2VyLlBhdGhEYXRhIG1QYXRoRGF0YSA9IG51bGw7CisKICAgICAgICAgU3RyaW5nIG1QYXRoTmFtZTsKICAgICAgICAgaW50IG1DaGFuZ2luZ0NvbmZpZ3VyYXRpb25zOwogCkBAIC0xMzc5LDEwICsxMTY2LDYgQEAKICAgICAgICAgICAgIHJldHVybiBtUGF0aE5hbWU7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NsaXBQYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgLyogU2V0dGVycyBhbmQgR2V0dGVycywgdXNlZCBieSBhbmltYXRvciBmcm9tIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUuICovCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBwdWJsaWMgUGF0aFBhcnNlci5QYXRoRGF0YSBnZXRQYXRoRGF0YSgpIHsKQEAgLTEzOTMsNzkgKzExNzYsNyBAQAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgcHVibGljIHZvaWQgc2V0UGF0aERhdGEoUGF0aFBhcnNlci5QYXRoRGF0YSBwYXRoRGF0YSkgewogICAgICAgICAgICAgbVBhdGhEYXRhLnNldFBhdGhEYXRhKHBhdGhEYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgZmluYWwgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIFRlbXBTdGF0ZSB0ZW1wLCBNYXRyaXggZ3JvdXBTdGFja2VkTWF0cml4LAotICAgICAgICAgICAgICAgIENvbG9yRmlsdGVyIGZpbHRlciwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIHsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IG1hdHJpeFNjYWxlID0gVlBhdGguZ2V0TWF0cml4U2NhbGUoZ3JvdXBTdGFja2VkTWF0cml4KTsKLSAgICAgICAgICAgIGlmIChtYXRyaXhTY2FsZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiBlaXRoZXIgeCBvciB5IGlzIHNjYWxlZCB0byAwLCB3ZSBkb24ndCBuZWVkIHRvIGRyYXcgYW55dGhpbmcuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBQYXRoIHBhdGggPSB0ZW1wLnBhdGg7Ci0gICAgICAgICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICB0b1BhdGgodGVtcCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIE1hdHJpeCBwYXRoTWF0cml4ID0gdGVtcC5wYXRoTWF0cml4OwotICAgICAgICAgICAgcGF0aE1hdHJpeC5zZXQoZ3JvdXBTdGFja2VkTWF0cml4KTsKLSAgICAgICAgICAgIHBhdGhNYXRyaXgucG9zdFNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKLQotICAgICAgICAgICAgZmluYWwgUGF0aCByZW5kZXJQYXRoID0gdGVtcC5yZW5kZXJQYXRoOwotICAgICAgICAgICAgcmVuZGVyUGF0aC5yZXNldCgpOwotICAgICAgICAgICAgcmVuZGVyUGF0aC5hZGRQYXRoKHBhdGgsIHBhdGhNYXRyaXgpOwotCi0gICAgICAgICAgICBmaW5hbCBmbG9hdCBtaW5TY2FsZSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKTsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHN0cm9rZVNjYWxlID0gbWluU2NhbGUgKiBtYXRyaXhTY2FsZTsKLSAgICAgICAgICAgIGRyYXdQYXRoKHRlbXAsIHJlbmRlclBhdGgsIGNhbnZhcywgZmlsdGVyLCBzdHJva2VTY2FsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogV3JpdGVzIHRoZSBwYXRoJ3Mgbm9kZXMgdG8gYW4gb3V0cHV0IFBhdGggZm9yIHJlbmRlcmluZy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHRlbXAgdGVtcG9yYXJ5IHN0YXRlIHZhcmlhYmxlcwotICAgICAgICAgKiBAcGFyYW0gb3V0UGF0aCB0aGUgb3V0cHV0IHBhdGgKLSAgICAgICAgICovCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHRvUGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCBvdXRQYXRoKSB7Ci0gICAgICAgICAgICBpZiAobVBhdGhEYXRhICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBQYXRoUGFyc2VyLmNyZWF0ZVBhdGhGcm9tUGF0aERhdGEob3V0UGF0aCwgbVBhdGhEYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBEcmF3cyB0aGUgc3BlY2lmaWVkIHBhdGggaW50byB0aGUgc3VwcGxpZWQgY2FudmFzLgotICAgICAgICAgKi8KLSAgICAgICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZHJhd1BhdGgoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywKLSAgICAgICAgICAgICAgICBDb2xvckZpbHRlciBmaWx0ZXIsIGZsb2F0IHN0cm9rZVNjYWxlKTsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmbG9hdCBnZXRNYXRyaXhTY2FsZShNYXRyaXggZ3JvdXBTdGFja2VkTWF0cml4KSB7Ci0gICAgICAgICAgICAvLyBHaXZlbiB1bml0IHZlY3RvcnMgQSA9ICgwLCAxKSBhbmQgQiA9ICgxLCAwKS4KLSAgICAgICAgICAgIC8vIEFmdGVyIG1hdHJpeCBtYXBwaW5nLCB3ZSBnb3QgQScgYW5kIEInLiBMZXQgdGhldGEgPSB0aGUgYW5nZWwgYi90IEEnIGFuZCBCJy4KLSAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgdGhlIGZpbmFsIHNjYWxlIHdlIHdhbnQgaXMgbWluKHxBJ3wgKiBzaW4odGhldGEpLCB8Qid8ICogc2luKHRoZXRhKSksCi0gICAgICAgICAgICAvLyB3aGljaCBpcyAofEEnfCAqIHxCJ3wgKiBzaW4odGhldGEpKSAvIG1heCAofEEnfCwgfEInfCk7Ci0gICAgICAgICAgICAvLyBJZiAgbWF4ICh8QSd8LCB8Qid8KSA9IDAsIHRoYXQgbWVhbnMgZWl0aGVyIHggb3IgeSBoYXMgYSBzY2FsZSBvZiAwLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZvciBub24tc2tldyBjYXNlLCB3aGljaCBpcyBtb3N0IG9mIHRoZSBjYXNlcywgbWF0cml4IHNjYWxlIGlzIGNvbXB1dGluZyBleGFjdGx5IHRoZQotICAgICAgICAgICAgLy8gc2NhbGUgb24geCBhbmQgeSBheGlzLCBhbmQgdGFrZSB0aGUgbWluaW1hbCBvZiB0aGVzZSB0d28uCi0gICAgICAgICAgICAvLyBGb3Igc2tldyBjYXNlLCBhbiB1bml0IHNxdWFyZSB3aWxsIG1hcHBlZCB0byBhIHBhcmFsbGVsb2dyYW0uIEFuZCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAgICAgICAgICAgIC8vIHJldHVybiB0aGUgbWluaW1hbCBoZWlnaHQgb2YgdGhlIDIgYmFzZXMuCi0gICAgICAgICAgICBmbG9hdFtdIHVuaXRWZWN0b3JzID0gbmV3IGZsb2F0W10gezAsIDEsIDEsIDB9OwotICAgICAgICAgICAgZ3JvdXBTdGFja2VkTWF0cml4Lm1hcFZlY3RvcnModW5pdFZlY3RvcnMpOwotICAgICAgICAgICAgZmxvYXQgc2NhbGVYID0gTWF0aFV0aWxzLm1hZyh1bml0VmVjdG9yc1swXSwgdW5pdFZlY3RvcnNbMV0pOwotICAgICAgICAgICAgZmxvYXQgc2NhbGVZID0gTWF0aFV0aWxzLm1hZyh1bml0VmVjdG9yc1syXSwgdW5pdFZlY3RvcnNbM10pOwotICAgICAgICAgICAgZmxvYXQgY3Jvc3NQcm9kdWN0ID0gTWF0aFV0aWxzLmNyb3NzKHVuaXRWZWN0b3JzWzBdLCB1bml0VmVjdG9yc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgdW5pdFZlY3RvcnNbMl0sIHVuaXRWZWN0b3JzWzNdKTsKLSAgICAgICAgICAgIGZsb2F0IG1heFNjYWxlID0gTWF0aFV0aWxzLm1heChzY2FsZVgsIHNjYWxlWSk7Ci0KLSAgICAgICAgICAgIGZsb2F0IG1hdHJpeFNjYWxlID0gMDsKLSAgICAgICAgICAgIGlmIChtYXhTY2FsZSA+IDApIHsKLSAgICAgICAgICAgICAgICBtYXRyaXhTY2FsZSA9IE1hdGhVdGlscy5hYnMoY3Jvc3NQcm9kdWN0KSAvIG1heFNjYWxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKERCR19WRUNUT1JfRFJBV0FCTEUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChMT0dUQUcsICJTY2FsZSB4ICIgKyBzY2FsZVggKyAiIHkgIiArIHNjYWxlWSArICIgZmluYWwgIiArIG1hdHJpeFNjYWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtYXRyaXhTY2FsZTsKKyAgICAgICAgICAgIG5TZXRQYXRoRGF0YShnZXROYXRpdmVQdHIoKSwgbVBhdGhEYXRhLmdldE5hdGl2ZVB0cigpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ3MywyMSArMTE4NCwzMSBAQAogICAgICAqIENsaXAgcGF0aCwgd2hpY2ggb25seSBoYXMgbmFtZSBhbmQgcGF0aERhdGEuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVkNsaXBQYXRoIGV4dGVuZHMgVlBhdGggeworICAgICAgICBsb25nIG1OYXRpdmVQdHIgPSAwOwogICAgICAgICBwdWJsaWMgVkNsaXBQYXRoKCkgeworICAgICAgICAgICAgbU5hdGl2ZVB0ciA9IG5DcmVhdGVDbGlwUGF0aCgpOwogICAgICAgICAgICAgLy8gRW1wdHkgY29uc3RydWN0b3IuCiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgVkNsaXBQYXRoKFZDbGlwUGF0aCBjb3B5KSB7CiAgICAgICAgICAgICBzdXBlcihjb3B5KTsKKyAgICAgICAgICAgIG1OYXRpdmVQdHIgPSBuQ3JlYXRlQ2xpcFBhdGgoY29weS5tTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3UGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCByZW5kZXJQYXRoLCBDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIHsKLSAgICAgICAgICAgIGNhbnZhcy5jbGlwUGF0aChyZW5kZXJQYXRoKTsKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0TmF0aXZlUHRyKCkgeworICAgICAgICAgICAgcmV0dXJuIG1OYXRpdmVQdHI7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgZmluYWxpemUoKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIGlmIChtTmF0aXZlUHRyICE9IDApIHsKKyAgICAgICAgICAgICAgICBuRGVzdHJveShtTmF0aXZlUHRyKTsKKyAgICAgICAgICAgICAgICBtTmF0aXZlUHRyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGluZmxhdGUoUmVzb3VyY2VzIHIsIEF0dHJpYnV0ZVNldCBhdHRycywgVGhlbWUgdGhlbWUpIHsKICAgICAgICAgICAgIGZpbmFsIFR5cGVkQXJyYXkgYSA9IG9idGFpbkF0dHJpYnV0ZXMociwgdGhlbWUsIGF0dHJzLAogICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZUNsaXBQYXRoKTsKQEAgLTE1MjIsOTUgKzEyNDMsNTQgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlQ2xpcFBhdGhfbmFtZSk7CiAgICAgICAgICAgICBpZiAocGF0aE5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1QYXRoTmFtZSA9IHBhdGhOYW1lOworICAgICAgICAgICAgICAgIG5TZXROYW1lKG1OYXRpdmVQdHIsIG1QYXRoTmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoRGF0YVN0cmluZyA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlQ2xpcFBhdGhfcGF0aERhdGEpOwogICAgICAgICAgICAgaWYgKHBhdGhEYXRhU3RyaW5nICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtUGF0aERhdGEgPSBuZXcgUGF0aFBhcnNlci5QYXRoRGF0YShwYXRoRGF0YVN0cmluZyk7CisgICAgICAgICAgICAgICAgblNldFBhdGhTdHJpbmcobU5hdGl2ZVB0ciwgcGF0aERhdGFTdHJpbmcsIHBhdGhEYXRhU3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NsaXBQYXRoKCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBOb3JtYWwgcGF0aCwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBmaWxsIC8gcGFpbnQgaW5mb3JtYXRpb24uCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVkZ1bGxQYXRoIGV4dGVuZHMgVlBhdGggeworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX1dJRFRIX0lOREVYID0gMDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUUk9LRV9DT0xPUl9JTkRFWCA9IDE7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVFJPS0VfQUxQSEFfSU5ERVggPSAyOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklMTF9DT0xPUl9JTkRFWCA9IDM7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSUxMX0FMUEhBX0lOREVYID0gNDsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSSU1fUEFUSF9TVEFSVF9JTkRFWCA9IDU7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUUklNX1BBVEhfRU5EX0lOREVYID0gNjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRSSU1fUEFUSF9PRkZTRVRfSU5ERVggPSA3OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX0xJTkVfQ0FQX0lOREVYID0gODsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUUk9LRV9MSU5FX0pPSU5fSU5ERVggPSA5OworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RST0tFX01JVEVSX0xJTUlUX0lOREVYID0gMTA7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUT1RBTF9QUk9QRVJUWV9DT1VOVCA9IDExOworCisgICAgICAgIC8vIFRlbXAgYXJyYXkgdG8gc3RvcmUgcHJvcGVydHkgZGF0YSBvYnRhaW5lZCBmcm9tIG5hdGl2ZSBnZXR0ZXIuCisgICAgICAgIHByaXZhdGUgYnl0ZVtdIG1Qcm9wZXJ0eURhdGE7CiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgICAgIC8vIFZhcmlhYmxlcyBiZWxvdyBuZWVkIHRvIGJlIGNvcGllZCAoZGVlcCBjb3B5IGlmIGFwcGxpY2FibGUpIGZvciBtdXRhdGlvbi4KICAgICAgICAgcHJpdmF0ZSBpbnRbXSBtVGhlbWVBdHRyczsKLQogICAgICAgICBDb2xvclN0YXRlTGlzdCBtU3Ryb2tlQ29sb3JzID0gbnVsbDsKLSAgICAgICAgaW50IG1TdHJva2VDb2xvciA9IENvbG9yLlRSQU5TUEFSRU5UOwotICAgICAgICBmbG9hdCBtU3Ryb2tlV2lkdGggPSAwOwotCiAgICAgICAgIENvbG9yU3RhdGVMaXN0IG1GaWxsQ29sb3JzID0gbnVsbDsKLSAgICAgICAgaW50IG1GaWxsQ29sb3IgPSBDb2xvci5UUkFOU1BBUkVOVDsKLSAgICAgICAgZmxvYXQgbVN0cm9rZUFscGhhID0gMS4wZjsKLSAgICAgICAgaW50IG1GaWxsUnVsZTsKLSAgICAgICAgZmxvYXQgbUZpbGxBbHBoYSA9IDEuMGY7Ci0gICAgICAgIGZsb2F0IG1UcmltUGF0aFN0YXJ0ID0gMDsKLSAgICAgICAgZmxvYXQgbVRyaW1QYXRoRW5kID0gMTsKLSAgICAgICAgZmxvYXQgbVRyaW1QYXRoT2Zmc2V0ID0gMDsKLQotICAgICAgICBQYWludC5DYXAgbVN0cm9rZUxpbmVDYXAgPSBQYWludC5DYXAuQlVUVDsKLSAgICAgICAgUGFpbnQuSm9pbiBtU3Ryb2tlTGluZUpvaW4gPSBQYWludC5Kb2luLk1JVEVSOwotICAgICAgICBmbG9hdCBtU3Ryb2tlTWl0ZXJsaW1pdCA9IDQ7CisgICAgICAgIHByaXZhdGUgbG9uZyBtTmF0aXZlUHRyID0gMDsKIAogICAgICAgICBwdWJsaWMgVkZ1bGxQYXRoKCkgewogICAgICAgICAgICAgLy8gRW1wdHkgY29uc3RydWN0b3IuCisgICAgICAgICAgICBtTmF0aXZlUHRyID0gbkNyZWF0ZUZ1bGxQYXRoKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgVkZ1bGxQYXRoKFZGdWxsUGF0aCBjb3B5KSB7CiAgICAgICAgICAgICBzdXBlcihjb3B5KTsKLQorICAgICAgICAgICAgbU5hdGl2ZVB0ciA9IG5DcmVhdGVGdWxsUGF0aChjb3B5Lm1OYXRpdmVQdHIpOwogICAgICAgICAgICAgbVRoZW1lQXR0cnMgPSBjb3B5Lm1UaGVtZUF0dHJzOwotCiAgICAgICAgICAgICBtU3Ryb2tlQ29sb3JzID0gY29weS5tU3Ryb2tlQ29sb3JzOwotICAgICAgICAgICAgbVN0cm9rZUNvbG9yID0gY29weS5tU3Ryb2tlQ29sb3I7Ci0gICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSBjb3B5Lm1TdHJva2VXaWR0aDsKLSAgICAgICAgICAgIG1TdHJva2VBbHBoYSA9IGNvcHkubVN0cm9rZUFscGhhOwogICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBjb3B5Lm1GaWxsQ29sb3JzOwotICAgICAgICAgICAgbUZpbGxDb2xvciA9IGNvcHkubUZpbGxDb2xvcjsKLSAgICAgICAgICAgIG1GaWxsUnVsZSA9IGNvcHkubUZpbGxSdWxlOwotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGNvcHkubUZpbGxBbHBoYTsKLSAgICAgICAgICAgIG1UcmltUGF0aFN0YXJ0ID0gY29weS5tVHJpbVBhdGhTdGFydDsKLSAgICAgICAgICAgIG1UcmltUGF0aEVuZCA9IGNvcHkubVRyaW1QYXRoRW5kOwotICAgICAgICAgICAgbVRyaW1QYXRoT2Zmc2V0ID0gY29weS5tVHJpbVBhdGhPZmZzZXQ7Ci0KLSAgICAgICAgICAgIG1TdHJva2VMaW5lQ2FwID0gY29weS5tU3Ryb2tlTGluZUNhcDsKLSAgICAgICAgICAgIG1TdHJva2VMaW5lSm9pbiA9IGNvcHkubVN0cm9rZUxpbmVKb2luOwotICAgICAgICAgICAgbVN0cm9rZU1pdGVybGltaXQgPSBjb3B5Lm1TdHJva2VNaXRlcmxpbWl0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBQYWludC5DYXAgZ2V0U3Ryb2tlTGluZUNhcChpbnQgaWQsIFBhaW50LkNhcCBkZWZWYWx1ZSkgewotICAgICAgICAgICAgc3dpdGNoIChpZCkgewotICAgICAgICAgICAgICAgIGNhc2UgTElORUNBUF9CVVRUOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuQ2FwLkJVVFQ7Ci0gICAgICAgICAgICAgICAgY2FzZSBMSU5FQ0FQX1JPVU5EOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuQ2FwLlJPVU5EOwotICAgICAgICAgICAgICAgIGNhc2UgTElORUNBUF9TUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYWludC5DYXAuU1FVQVJFOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUGFpbnQuSm9pbiBnZXRTdHJva2VMaW5lSm9pbihpbnQgaWQsIFBhaW50LkpvaW4gZGVmVmFsdWUpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoaWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX01JVEVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5NSVRFUjsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX1JPVU5EOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5ST1VORDsKLSAgICAgICAgICAgICAgICBjYXNlIExJTkVKT0lOX0JFVkVMOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFpbnQuSm9pbi5CRVZFTDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmVmFsdWU7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTE2MTgsMTcgKzEyOTgsMjIgQEAKICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBpZiAobVN0cm9rZUNvbG9ycyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZFN0cm9rZUNvbG9yID0gbVN0cm9rZUNvbG9yOwotICAgICAgICAgICAgICAgIG1TdHJva2VDb2xvciA9IG1TdHJva2VDb2xvcnMuZ2V0Q29sb3JGb3JTdGF0ZShzdGF0ZVNldCwgb2xkU3Ryb2tlQ29sb3IpOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gb2xkU3Ryb2tlQ29sb3IgIT0gbVN0cm9rZUNvbG9yOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBvbGRTdHJva2VDb2xvciA9IGdldFN0cm9rZUNvbG9yKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1N0cm9rZUNvbG9yID0gbVN0cm9rZUNvbG9ycy5nZXRDb2xvckZvclN0YXRlKHN0YXRlU2V0LCBvbGRTdHJva2VDb2xvcik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRTdHJva2VDb2xvciAhPSBuZXdTdHJva2VDb2xvcjsKKyAgICAgICAgICAgICAgICBpZiAob2xkU3Ryb2tlQ29sb3IgIT0gbmV3U3Ryb2tlQ29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgblNldFN0cm9rZUNvbG9yKG1OYXRpdmVQdHIsIG5ld1N0cm9rZUNvbG9yKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtRmlsbENvbG9ycyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IG9sZEZpbGxDb2xvciA9IG1GaWxsQ29sb3I7Ci0gICAgICAgICAgICAgICAgbUZpbGxDb2xvciA9IG1GaWxsQ29sb3JzLmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIG9sZEZpbGxDb2xvcik7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRGaWxsQ29sb3IgIT0gbUZpbGxDb2xvcjsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkRmlsbENvbG9yID0gZ2V0RmlsbENvbG9yKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld0ZpbGxDb2xvciA9IG1GaWxsQ29sb3JzLmdldENvbG9yRm9yU3RhdGUoc3RhdGVTZXQsIG9sZEZpbGxDb2xvcik7CisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvbGRGaWxsQ29sb3IgIT0gbmV3RmlsbENvbG9yOworICAgICAgICAgICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gbmV3RmlsbENvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgIG5TZXRGaWxsQ29sb3IobU5hdGl2ZVB0ciwgbmV3RmlsbENvbG9yKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgICAgICB9CiAKQEAgLTE2MzgsMTAxICsxMzIzLDggQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB0b1BhdGgoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCkgewotICAgICAgICAgICAgc3VwZXIudG9QYXRoKHRlbXAsIHBhdGgpOwotCi0gICAgICAgICAgICBpZiAobVRyaW1QYXRoU3RhcnQgIT0gMC4wZiB8fCBtVHJpbVBhdGhFbmQgIT0gMS4wZikgewotICAgICAgICAgICAgICAgIFZGdWxsUGF0aC5hcHBseVRyaW0odGVtcCwgcGF0aCwgbVRyaW1QYXRoU3RhcnQsIG1UcmltUGF0aEVuZCwgbVRyaW1QYXRoT2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBkcmF3UGF0aChUZW1wU3RhdGUgdGVtcCwgUGF0aCBwYXRoLCBDYW52YXMgY2FudmFzLCBDb2xvckZpbHRlciBmaWx0ZXIsCi0gICAgICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIHsKLSAgICAgICAgICAgIGRyYXdQYXRoRmlsbCh0ZW1wLCBwYXRoLCBjYW52YXMsIGZpbHRlcik7Ci0gICAgICAgICAgICBkcmF3UGF0aFN0cm9rZSh0ZW1wLCBwYXRoLCBjYW52YXMsIGZpbHRlciwgc3Ryb2tlU2NhbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIERyYXdzIHRoaXMgcGF0aCdzIGZpbGwsIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgdm9pZCBkcmF3UGF0aEZpbGwoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywgQ29sb3JGaWx0ZXIgZmlsdGVyKSB7Ci0gICAgICAgICAgICBpZiAobUZpbGxDb2xvciA9PSBDb2xvci5UUkFOU1BBUkVOVCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRlbXAubUZpbGxQYWludCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGVtcC5tRmlsbFBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgdGVtcC5tRmlsbFBhaW50LnNldFN0eWxlKFBhaW50LlN0eWxlLkZJTEwpOwotICAgICAgICAgICAgICAgIHRlbXAubUZpbGxQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IGZpbGxQYWludCA9IHRlbXAubUZpbGxQYWludDsKLSAgICAgICAgICAgIGZpbGxQYWludC5zZXRDb2xvcihhcHBseUFscGhhKG1GaWxsQ29sb3IsIG1GaWxsQWxwaGEpKTsKLSAgICAgICAgICAgIGZpbGxQYWludC5zZXRDb2xvckZpbHRlcihmaWx0ZXIpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdQYXRoKHBhdGgsIGZpbGxQYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRHJhd3MgdGhpcyBwYXRoJ3Mgc3Ryb2tlLCBpZiBuZWNlc3NhcnkuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHZvaWQgZHJhd1BhdGhTdHJva2UoVGVtcFN0YXRlIHRlbXAsIFBhdGggcGF0aCwgQ2FudmFzIGNhbnZhcywgQ29sb3JGaWx0ZXIgZmlsdGVyLAotICAgICAgICAgICAgICAgIGZsb2F0IHN0cm9rZVNjYWxlKSB7Ci0gICAgICAgICAgICBpZiAobVN0cm9rZUNvbG9yID09IENvbG9yLlRSQU5TUEFSRU5UKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVtcC5tU3Ryb2tlUGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRlbXAubVN0cm9rZVBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICAgICAgdGVtcC5tU3Ryb2tlUGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuU1RST0tFKTsKLSAgICAgICAgICAgICAgICB0ZW1wLm1TdHJva2VQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFBhaW50IHN0cm9rZVBhaW50ID0gdGVtcC5tU3Ryb2tlUGFpbnQ7Ci0gICAgICAgICAgICBpZiAobVN0cm9rZUxpbmVKb2luICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBzdHJva2VQYWludC5zZXRTdHJva2VKb2luKG1TdHJva2VMaW5lSm9pbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtU3Ryb2tlTGluZUNhcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0U3Ryb2tlQ2FwKG1TdHJva2VMaW5lQ2FwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0U3Ryb2tlTWl0ZXIobVN0cm9rZU1pdGVybGltaXQpOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0Q29sb3IoYXBwbHlBbHBoYShtU3Ryb2tlQ29sb3IsIG1TdHJva2VBbHBoYSkpOwotICAgICAgICAgICAgc3Ryb2tlUGFpbnQuc2V0Q29sb3JGaWx0ZXIoZmlsdGVyKTsKLSAgICAgICAgICAgIHN0cm9rZVBhaW50LnNldFN0cm9rZVdpZHRoKG1TdHJva2VXaWR0aCAqIHN0cm9rZVNjYWxlKTsKLSAgICAgICAgICAgIGNhbnZhcy5kcmF3UGF0aChwYXRoLCBzdHJva2VQYWludCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQXBwbGllcyB0cmltbWluZyB0byB0aGUgc3BlY2lmaWVkIHBhdGguCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFwcGx5VHJpbShUZW1wU3RhdGUgdGVtcCwgUGF0aCBwYXRoLCBmbG9hdCBtVHJpbVBhdGhTdGFydCwKLSAgICAgICAgICAgICAgICBmbG9hdCBtVHJpbVBhdGhFbmQsIGZsb2F0IG1UcmltUGF0aE9mZnNldCkgewotICAgICAgICAgICAgaWYgKG1UcmltUGF0aFN0YXJ0ID09IDAuMGYgJiYgbVRyaW1QYXRoRW5kID09IDEuMGYpIHsKLSAgICAgICAgICAgICAgICAvLyBObyB0cmltbWluZyBuZWNlc3NhcnkuCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGVtcC5tUGF0aE1lYXN1cmUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRlbXAubVBhdGhNZWFzdXJlID0gbmV3IFBhdGhNZWFzdXJlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBQYXRoTWVhc3VyZSBwYXRoTWVhc3VyZSA9IHRlbXAubVBhdGhNZWFzdXJlOwotICAgICAgICAgICAgcGF0aE1lYXN1cmUuc2V0UGF0aChwYXRoLCBmYWxzZSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IGxlbiA9IHBhdGhNZWFzdXJlLmdldExlbmd0aCgpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgc3RhcnQgPSBsZW4gKiAoKG1UcmltUGF0aFN0YXJ0ICsgbVRyaW1QYXRoT2Zmc2V0KSAlIDEuMGYpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgZW5kID0gbGVuICogKChtVHJpbVBhdGhFbmQgKyBtVHJpbVBhdGhPZmZzZXQpICUgMS4wZik7Ci0gICAgICAgICAgICBwYXRoLnJlc2V0KCk7Ci0gICAgICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHsKLSAgICAgICAgICAgICAgICBwYXRoTWVhc3VyZS5nZXRTZWdtZW50KHN0YXJ0LCBsZW4sIHBhdGgsIHRydWUpOwotICAgICAgICAgICAgICAgIHBhdGhNZWFzdXJlLmdldFNlZ21lbnQoMCwgZW5kLCBwYXRoLCB0cnVlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGF0aE1lYXN1cmUuZ2V0U2VnbWVudChzdGFydCwgZW5kLCBwYXRoLCB0cnVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRml4IGJ1ZyBpbiBtZWFzdXJlLgotICAgICAgICAgICAgcGF0aC5yTGluZVRvKDAsIDApOworICAgICAgICBwdWJsaWMgbG9uZyBnZXROYXRpdmVQdHIoKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdGl2ZVB0cjsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTc0Myw3ICsxMzM1LDQ0IEBACiAgICAgICAgICAgICBhLnJlY3ljbGUoKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICAgICAgaWYgKG1OYXRpdmVQdHIgIT0gMCkgeworICAgICAgICAgICAgICAgIG5EZXN0cm95KG1OYXRpdmVQdHIpOworICAgICAgICAgICAgICAgIG1OYXRpdmVQdHIgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgdm9pZCB1cGRhdGVTdGF0ZUZyb21UeXBlZEFycmF5KFR5cGVkQXJyYXkgYSkgeworICAgICAgICAgICAgaW50IGJ5dGVDb3VudCA9IFRPVEFMX1BST1BFUlRZX0NPVU5UICogNDsKKyAgICAgICAgICAgIGlmIChtUHJvcGVydHlEYXRhID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBMYXp5IGluaXRpYWxpemF0aW9uOiBJZiB0aGUgcGF0aCBpcyBjcmVhdGVkIHRocm91Z2ggY29weSBjb25zdHJ1Y3RvciwgdGhpcyBtYXkKKyAgICAgICAgICAgICAgICAvLyBuZXZlciBnZXQgY2FsbGVkLgorICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eURhdGEgPSBuZXcgYnl0ZVtieXRlQ291bnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVGhlIGJ1bGsgZ2V0dGVycy9zZXR0ZXJzIG9mIHByb3BlcnR5IGRhdGEgKGUuZy4gc3Ryb2tlIHdpZHRoLCBjb2xvciwgZXRjKSBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIHB1bGwgY3VycmVudCB2YWx1ZXMgZnJvbSBuYXRpdmUgYW5kIHN0b3JlIG1vZGlmaWNhdGlvbnMgd2l0aCBvbmx5IHR3byBtZXRob2RzLAorICAgICAgICAgICAgLy8gbWluaW1pemluZyBKTkkgb3ZlcmhlYWQuCisgICAgICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBuR2V0RnVsbFBhdGhQcm9wZXJ0aWVzKG1OYXRpdmVQdHIsIG1Qcm9wZXJ0eURhdGEsIGJ5dGVDb3VudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3I6IGluY29uc2lzdGVudCBwcm9wZXJ0eSBjb3VudCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBCeXRlQnVmZmVyIHByb3BlcnRpZXMgPSBCeXRlQnVmZmVyLndyYXAobVByb3BlcnR5RGF0YSk7CisgICAgICAgICAgICBwcm9wZXJ0aWVzLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gcHJvcGVydGllcy5nZXRGbG9hdChTVFJPS0VfV0lEVEhfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGludCBzdHJva2VDb2xvciA9IHByb3BlcnRpZXMuZ2V0SW50KFNUUk9LRV9DT0xPUl9JTkRFWCAqIDQpOworICAgICAgICAgICAgZmxvYXQgc3Ryb2tlQWxwaGEgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFNUUk9LRV9BTFBIQV9JTkRFWCAqIDQpOworICAgICAgICAgICAgaW50IGZpbGxDb2xvciA9ICBwcm9wZXJ0aWVzLmdldEludChGSUxMX0NPTE9SX0lOREVYICogNCk7CisgICAgICAgICAgICBmbG9hdCBmaWxsQWxwaGEgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KEZJTExfQUxQSEFfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHRyaW1QYXRoU3RhcnQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFRSSU1fUEFUSF9TVEFSVF9JTkRFWCAqIDQpOworICAgICAgICAgICAgZmxvYXQgdHJpbVBhdGhFbmQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFRSSU1fUEFUSF9FTkRfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHRyaW1QYXRoT2Zmc2V0ID0gcHJvcGVydGllcy5nZXRGbG9hdChUUklNX1BBVEhfT0ZGU0VUX0lOREVYICogNCk7CisgICAgICAgICAgICBpbnQgc3Ryb2tlTGluZUNhcCA9ICBwcm9wZXJ0aWVzLmdldEludChTVFJPS0VfTElORV9DQVBfSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGludCBzdHJva2VMaW5lSm9pbiA9IHByb3BlcnRpZXMuZ2V0SW50KFNUUk9LRV9MSU5FX0pPSU5fSU5ERVggKiA0KTsKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQgPSBwcm9wZXJ0aWVzLmdldEZsb2F0KFNUUk9LRV9NSVRFUl9MSU1JVF9JTkRFWCAqIDQpOworCiAgICAgICAgICAgICAvLyBBY2NvdW50IGZvciBhbnkgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgogICAgICAgICAgICAgbUNoYW5naW5nQ29uZmlndXJhdGlvbnMgfD0gYS5nZXRDaGFuZ2luZ0NvbmZpZ3VyYXRpb25zKCk7CiAKQEAgLTE3NTMsMTEgKzEzODIsMTMgQEAKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoTmFtZSA9IGEuZ2V0U3RyaW5nKFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9uYW1lKTsKICAgICAgICAgICAgIGlmIChwYXRoTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbVBhdGhOYW1lID0gcGF0aE5hbWU7CisgICAgICAgICAgICAgICAgblNldE5hbWUobU5hdGl2ZVB0ciwgbVBhdGhOYW1lKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhdGhTdHJpbmcgPSBhLmdldFN0cmluZyhSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfcGF0aERhdGEpOwogICAgICAgICAgICAgaWYgKHBhdGhTdHJpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1QYXRoRGF0YSA9IG5ldyBQYXRoUGFyc2VyLlBhdGhEYXRhKHBhdGhTdHJpbmcpOworICAgICAgICAgICAgICAgIG5TZXRQYXRoU3RyaW5nKG1OYXRpdmVQdHIsIHBhdGhTdHJpbmcsIHBhdGhTdHJpbmcubGVuZ3RoKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBmaW5hbCBDb2xvclN0YXRlTGlzdCBmaWxsQ29sb3JzID0gYS5nZXRDb2xvclN0YXRlTGlzdCgKQEAgLTE3NjYsNyArMTM5Nyw3IEBACiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbG9yIHN0YXRlIGxpc3QgaXNuJ3Qgc3RhdGVmdWwsIGRpc2NhcmQgdGhlIHN0YXRlCiAgICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQga2VlcCB0aGUgZGVmYXVsdCAoZS5nLiB0aGUgb25seSkgY29sb3IuCiAgICAgICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBmaWxsQ29sb3JzLmlzU3RhdGVmdWwoKSA/IGZpbGxDb2xvcnMgOiBudWxsOwotICAgICAgICAgICAgICAgIG1GaWxsQ29sb3IgPSBmaWxsQ29sb3JzLmdldERlZmF1bHRDb2xvcigpOworICAgICAgICAgICAgICAgIGZpbGxDb2xvciA9IGZpbGxDb2xvcnMuZ2V0RGVmYXVsdENvbG9yKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIENvbG9yU3RhdGVMaXN0IHN0cm9rZUNvbG9ycyA9IGEuZ2V0Q29sb3JTdGF0ZUxpc3QoCkBAIC0xNzc1LDIzICsxNDA2LDMwIEBACiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNvbG9yIHN0YXRlIGxpc3QgaXNuJ3Qgc3RhdGVmdWwsIGRpc2NhcmQgdGhlIHN0YXRlCiAgICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQga2VlcCB0aGUgZGVmYXVsdCAoZS5nLiB0aGUgb25seSkgY29sb3IuCiAgICAgICAgICAgICAgICAgbVN0cm9rZUNvbG9ycyA9IHN0cm9rZUNvbG9ycy5pc1N0YXRlZnVsKCkgPyBzdHJva2VDb2xvcnMgOiBudWxsOwotICAgICAgICAgICAgICAgIG1TdHJva2VDb2xvciA9IHN0cm9rZUNvbG9ycy5nZXREZWZhdWx0Q29sb3IoKTsKKyAgICAgICAgICAgICAgICBzdHJva2VDb2xvciA9IHN0cm9rZUNvbG9ycy5nZXREZWZhdWx0Q29sb3IoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbGxBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX2ZpbGxBbHBoYSwgZmlsbEFscGhhKTsKIAotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX2ZpbGxBbHBoYSwgbUZpbGxBbHBoYSk7Ci0gICAgICAgICAgICBtU3Ryb2tlTGluZUNhcCA9IGdldFN0cm9rZUxpbmVDYXAoYS5nZXRJbnQoCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VMaW5lQ2FwLCAtMSksIG1TdHJva2VMaW5lQ2FwKTsKLSAgICAgICAgICAgIG1TdHJva2VMaW5lSm9pbiA9IGdldFN0cm9rZUxpbmVKb2luKGEuZ2V0SW50KAotICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfc3Ryb2tlTGluZUpvaW4sIC0xKSwgbVN0cm9rZUxpbmVKb2luKTsKLSAgICAgICAgICAgIG1TdHJva2VNaXRlcmxpbWl0ID0gYS5nZXRGbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZU1pdGVyTGltaXQsIG1TdHJva2VNaXRlcmxpbWl0KTsKLSAgICAgICAgICAgIG1TdHJva2VBbHBoYSA9IGEuZ2V0RmxvYXQoUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUFscGhhLCBtU3Ryb2tlQWxwaGEpOwotICAgICAgICAgICAgbVN0cm9rZVdpZHRoID0gYS5nZXRGbG9hdChSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfc3Ryb2tlV2lkdGgsIG1TdHJva2VXaWR0aCk7Ci0gICAgICAgICAgICBtVHJpbVBhdGhFbmQgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aEVuZCwgbVRyaW1QYXRoRW5kKTsKLSAgICAgICAgICAgIG1UcmltUGF0aE9mZnNldCA9IGEuZ2V0RmxvYXQoCi0gICAgICAgICAgICAgICAgICAgIFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aE9mZnNldCwgbVRyaW1QYXRoT2Zmc2V0KTsKLSAgICAgICAgICAgIG1UcmltUGF0aFN0YXJ0ID0gYS5nZXRGbG9hdCgKLSAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3RyaW1QYXRoU3RhcnQsIG1UcmltUGF0aFN0YXJ0KTsKKyAgICAgICAgICAgIHN0cm9rZUxpbmVDYXAgPSBhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUxpbmVDYXAsIHN0cm9rZUxpbmVDYXApOworICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW4gPSBhLmdldEludCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZUxpbmVKb2luLCBzdHJva2VMaW5lSm9pbik7CisgICAgICAgICAgICBzdHJva2VNaXRlckxpbWl0ID0gYS5nZXRGbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuVmVjdG9yRHJhd2FibGVQYXRoX3N0cm9rZU1pdGVyTGltaXQsIHN0cm9rZU1pdGVyTGltaXQpOworICAgICAgICAgICAgc3Ryb2tlQWxwaGEgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlQWxwaGEpOworICAgICAgICAgICAgc3Ryb2tlV2lkdGggPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF9zdHJva2VXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGgpOworICAgICAgICAgICAgdHJpbVBhdGhFbmQgPSBhLmdldEZsb2F0KFIuc3R5bGVhYmxlLlZlY3RvckRyYXdhYmxlUGF0aF90cmltUGF0aEVuZCwKKyAgICAgICAgICAgICAgICAgICAgdHJpbVBhdGhFbmQpOworICAgICAgICAgICAgdHJpbVBhdGhPZmZzZXQgPSBhLmdldEZsb2F0KAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfdHJpbVBhdGhPZmZzZXQsIHRyaW1QYXRoT2Zmc2V0KTsKKyAgICAgICAgICAgIHRyaW1QYXRoU3RhcnQgPSBhLmdldEZsb2F0KAorICAgICAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5WZWN0b3JEcmF3YWJsZVBhdGhfdHJpbVBhdGhTdGFydCwgdHJpbVBhdGhTdGFydCk7CisKKyAgICAgICAgICAgIG5VcGRhdGVGdWxsUGF0aFByb3BlcnRpZXMobU5hdGl2ZVB0ciwgc3Ryb2tlV2lkdGgsIHN0cm9rZUNvbG9yLCBzdHJva2VBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yLCBmaWxsQWxwaGEsIHRyaW1QYXRoU3RhcnQsIHRyaW1QYXRoRW5kLCB0cmltUGF0aE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc3Ryb2tlTWl0ZXJMaW1pdCwgc3Ryb2tlTGluZUNhcCwgc3Ryb2tlTGluZUpvaW4pOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xODEzLDEwNCArMTQ1MSwxNjkgQEAKICAgICAgICAgLyogU2V0dGVycyBhbmQgR2V0dGVycywgdXNlZCBieSBhbmltYXRvciBmcm9tIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUuICovCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBpbnQgZ2V0U3Ryb2tlQ29sb3IoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZUNvbG9yOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VDb2xvcihtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGludCBzdHJva2VDb2xvcikgewogICAgICAgICAgICAgbVN0cm9rZUNvbG9ycyA9IG51bGw7Ci0gICAgICAgICAgICBtU3Ryb2tlQ29sb3IgPSBzdHJva2VDb2xvcjsKKyAgICAgICAgICAgIG5TZXRTdHJva2VDb2xvcihtTmF0aXZlUHRyLCBzdHJva2VDb2xvcik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgZmxvYXQgZ2V0U3Ryb2tlV2lkdGgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZVdpZHRoOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VXaWR0aChtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSB7Ci0gICAgICAgICAgICBtU3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICAgICAgICAgIG5TZXRTdHJva2VXaWR0aChtTmF0aXZlUHRyLCBzdHJva2VXaWR0aCk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgZmxvYXQgZ2V0U3Ryb2tlQWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVN0cm9rZUFscGhhOworICAgICAgICAgICAgcmV0dXJuIG5HZXRTdHJva2VBbHBoYShtTmF0aXZlUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICB2b2lkIHNldFN0cm9rZUFscGhhKGZsb2F0IHN0cm9rZUFscGhhKSB7Ci0gICAgICAgICAgICBtU3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTsKKyAgICAgICAgICAgIG5TZXRTdHJva2VBbHBoYShtTmF0aXZlUHRyLCBzdHJva2VBbHBoYSk7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgaW50IGdldEZpbGxDb2xvcigpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmlsbENvbG9yOworICAgICAgICAgICAgcmV0dXJuIG5HZXRGaWxsQ29sb3IobU5hdGl2ZVB0cik7CiAgICAgICAgIH0KIAogICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKICAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoaW50IGZpbGxDb2xvcikgewogICAgICAgICAgICAgbUZpbGxDb2xvcnMgPSBudWxsOwotICAgICAgICAgICAgbUZpbGxDb2xvciA9IGZpbGxDb2xvcjsKKyAgICAgICAgICAgIG5TZXRGaWxsQ29sb3IobU5hdGl2ZVB0ciwgZmlsbENvbG9yKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRGaWxsQWxwaGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpbGxBbHBoYTsKKyAgICAgICAgICAgIHJldHVybiBuR2V0RmlsbEFscGhhKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0RmlsbEFscGhhKGZsb2F0IGZpbGxBbHBoYSkgewotICAgICAgICAgICAgbUZpbGxBbHBoYSA9IGZpbGxBbHBoYTsKKyAgICAgICAgICAgIG5TZXRGaWxsQWxwaGEobU5hdGl2ZVB0ciwgZmlsbEFscGhhKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aFN0YXJ0KCkgewotICAgICAgICAgICAgcmV0dXJuIG1UcmltUGF0aFN0YXJ0OworICAgICAgICAgICAgcmV0dXJuIG5HZXRUcmltUGF0aFN0YXJ0KG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhTdGFydChmbG9hdCB0cmltUGF0aFN0YXJ0KSB7Ci0gICAgICAgICAgICBtVHJpbVBhdGhTdGFydCA9IHRyaW1QYXRoU3RhcnQ7CisgICAgICAgICAgICBuU2V0VHJpbVBhdGhTdGFydChtTmF0aXZlUHRyLCB0cmltUGF0aFN0YXJ0KTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aEVuZCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVHJpbVBhdGhFbmQ7CisgICAgICAgICAgICByZXR1cm4gbkdldFRyaW1QYXRoRW5kKG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhFbmQoZmxvYXQgdHJpbVBhdGhFbmQpIHsKLSAgICAgICAgICAgIG1UcmltUGF0aEVuZCA9IHRyaW1QYXRoRW5kOworICAgICAgICAgICAgblNldFRyaW1QYXRoRW5kKG1OYXRpdmVQdHIsIHRyaW1QYXRoRW5kKTsKICAgICAgICAgfQogCiAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQogICAgICAgICBmbG9hdCBnZXRUcmltUGF0aE9mZnNldCgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVHJpbVBhdGhPZmZzZXQ7CisgICAgICAgICAgICByZXR1cm4gbkdldFRyaW1QYXRoT2Zmc2V0KG1OYXRpdmVQdHIpOwogICAgICAgICB9CiAKICAgICAgICAgQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAgICAgICAgIHZvaWQgc2V0VHJpbVBhdGhPZmZzZXQoZmxvYXQgdHJpbVBhdGhPZmZzZXQpIHsKLSAgICAgICAgICAgIG1UcmltUGF0aE9mZnNldCA9IHRyaW1QYXRoT2Zmc2V0OworICAgICAgICAgICAgblNldFRyaW1QYXRoT2Zmc2V0KG1OYXRpdmVQdHIsIHRyaW1QYXRoT2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBjbGFzcyBUZW1wU3RhdGUgewotICAgICAgICBmaW5hbCBNYXRyaXggcGF0aE1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKLSAgICAgICAgZmluYWwgUGF0aCBwYXRoID0gbmV3IFBhdGgoKTsKLSAgICAgICAgZmluYWwgUGF0aCByZW5kZXJQYXRoID0gbmV3IFBhdGgoKTsKLQotICAgICAgICBQYXRoTWVhc3VyZSBtUGF0aE1lYXN1cmU7Ci0gICAgICAgIFBhaW50IG1GaWxsUGFpbnQ7Ci0gICAgICAgIFBhaW50IG1TdHJva2VQYWludDsKLSAgICB9Ci0KICAgICBpbnRlcmZhY2UgVk9iamVjdCB7Ci0gICAgICAgIHZvaWQgZHJhdyhDYW52YXMgY2FudmFzLCBUZW1wU3RhdGUgdGVtcCwgTWF0cml4IGN1cnJlbnRNYXRyaXgsCi0gICAgICAgICAgICAgICAgQ29sb3JGaWx0ZXIgZmlsdGVyLCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSk7CisgICAgICAgIGxvbmcgZ2V0TmF0aXZlUHRyKCk7CiAgICAgICAgIHZvaWQgaW5mbGF0ZShSZXNvdXJjZXMgciwgQXR0cmlidXRlU2V0IGF0dHJzLCBUaGVtZSB0aGVtZSk7CiAgICAgICAgIGJvb2xlYW4gY2FuQXBwbHlUaGVtZSgpOwogICAgICAgICB2b2lkIGFwcGx5VGhlbWUoVGhlbWUgdCk7CiAgICAgICAgIGJvb2xlYW4gb25TdGF0ZUNoYW5nZShpbnRbXSBzdGF0ZSk7CiAgICAgICAgIGJvb2xlYW4gaXNTdGF0ZWZ1bCgpOwogICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVSZW5kZXJlcihsb25nIHJvb3RHcm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkRlc3Ryb3lSZW5kZXJlcihsb25nIHJlbmRlcmVyUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0UmVuZGVyZXJWaWV3cG9ydFNpemUobG9uZyByZW5kZXJlclB0ciwgZmxvYXQgdmlld3BvcnRXaWR0aCwKKyAgICAgICAgICAgIGZsb2F0IHZpZXdwb3J0SGVpZ2h0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuU2V0Um9vdEFscGhhKGxvbmcgcmVuZGVyZXJQdHIsIGZsb2F0IGFscGhhKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvb3RBbHBoYShsb25nIHJlbmRlcmVyUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0QWxsb3dDYWNoaW5nKGxvbmcgcmVuZGVyZXJQdHIsIGJvb2xlYW4gYWxsb3dDYWNoaW5nKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5EcmF3KGxvbmcgcmVuZGVyZXJQdHIsIGxvbmcgY2FudmFzV3JhcHBlclB0ciwKKyAgICAgICAgICAgIGxvbmcgY29sb3JGaWx0ZXJQdHIsIFJlY3QgYm91bmRzLCBib29sZWFuIG5lZWRzTWlycm9yaW5nLCBib29sZWFuIGNhblJldXNlQ2FjaGUpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVGdWxsUGF0aCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVGdWxsUGF0aChsb25nIG1OYXRpdmVGdWxsUGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbkdldEZ1bGxQYXRoUHJvcGVydGllcyhsb25nIHBhdGhQdHIsIGJ5dGVbXSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuVXBkYXRlRnVsbFBhdGhQcm9wZXJ0aWVzKGxvbmcgcGF0aFB0ciwgZmxvYXQgc3Ryb2tlV2lkdGgsCisgICAgICAgICAgICBpbnQgc3Ryb2tlQ29sb3IsIGZsb2F0IHN0cm9rZUFscGhhLCBpbnQgZmlsbENvbG9yLCBmbG9hdCBmaWxsQWxwaGEsIGZsb2F0IHRyaW1QYXRoU3RhcnQsCisgICAgICAgICAgICBmbG9hdCB0cmltUGF0aEVuZCwgZmxvYXQgdHJpbVBhdGhPZmZzZXQsIGZsb2F0IHN0cm9rZU1pdGVyTGltaXQsIGludCBzdHJva2VMaW5lQ2FwLAorICAgICAgICAgICAgaW50IHN0cm9rZUxpbmVKb2luKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVDbGlwUGF0aCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVDbGlwUGF0aChsb25nIGNsaXBQYXRoUHRyKTsKKworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVHcm91cCgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5DcmVhdGVHcm91cChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuRGVzdHJveShsb25nIG5vZGVQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXROYW1lKGxvbmcgbm9kZVB0ciwgU3RyaW5nIG5hbWUpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5HZXRHcm91cFByb3BlcnRpZXMobG9uZyBncm91cFB0ciwgZmxvYXRbXSBwcm9wZXJ0aWVzLAorICAgICAgICAgICAgaW50IGxlbmd0aCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblVwZGF0ZUdyb3VwUHJvcGVydGllcyhsb25nIGdyb3VwUHRyLCBmbG9hdCByb3RhdGUsIGZsb2F0IHBpdm90WCwKKyAgICAgICAgICAgIGZsb2F0IHBpdm90WSwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVksIGZsb2F0IHRyYW5zbGF0ZVgsIGZsb2F0IHRyYW5zbGF0ZVkpOworCisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbkFkZENoaWxkKGxvbmcgZ3JvdXBQdHIsIGxvbmcgbm9kZVB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBhdGhTdHJpbmcobG9uZyBwYXRoUHRyLCBTdHJpbmcgcGF0aFN0cmluZywgaW50IGxlbmd0aCk7CisKKyAgICAvKioKKyAgICAgKiBUaGUgc2V0dGVycyBhbmQgZ2V0dGVycyBiZWxvdyBmb3IgcGF0aHMgYW5kIGdyb3VwcyBhcmUgaGVyZSB0ZW1wb3JhcmlseSwgYW5kIHdpbGwgYmUKKyAgICAgKiByZW1vdmVkIG9uY2UgdGhlIGFuaW1hdGlvbiBpbiBBVkQgaXMgcmVwbGFjZWQgd2l0aCBSZW5kZXJOb2RlQW5pbWF0b3IsIGluIHdoaWNoIGNhc2UgdGhlCisgICAgICogYW5pbWF0aW9uIHdpbGwgbW9kaWZ5IHRoZXNlIHByb3BlcnRpZXMgaW4gbmF0aXZlLiBCeSB0aGVuIG5vIEpOSSBob3BwaW5nIHdvdWxkIGJlIG5lY2Vzc2FyeQorICAgICAqIGZvciBWRCBkdXJpbmcgYW5pbWF0aW9uLCBhbmQgdGhlc2Ugc2V0dGVycyBhbmQgZ2V0dGVycyB3aWxsIGJlIG9ic29sZXRlLgorICAgICAqLworICAgIC8vIFNldHRlcnMgYW5kIGdldHRlcnMgZHVyaW5nIGFuaW1hdGlvbi4KKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFJvdGF0aW9uKGxvbmcgZ3JvdXBQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRSb3RhdGlvbihsb25nIGdyb3VwUHRyLCBmbG9hdCByb3RhdGlvbik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRQaXZvdFgobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFBpdm90WChsb25nIGdyb3VwUHRyLCBmbG9hdCBwaXZvdFgpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0UGl2b3RZKGxvbmcgZ3JvdXBQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRQaXZvdFkobG9uZyBncm91cFB0ciwgZmxvYXQgcGl2b3RZKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFNjYWxlWChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U2NhbGVYKGxvbmcgZ3JvdXBQdHIsIGZsb2F0IHNjYWxlWCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRTY2FsZVkobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFNjYWxlWShsb25nIGdyb3VwUHRyLCBmbG9hdCBzY2FsZVkpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VHJhbnNsYXRlWChsb25nIGdyb3VwUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJhbnNsYXRlWChsb25nIGdyb3VwUHRyLCBmbG9hdCB0cmFuc2xhdGVYKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyYW5zbGF0ZVkobG9uZyBncm91cFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyYW5zbGF0ZVkobG9uZyBncm91cFB0ciwgZmxvYXQgdHJhbnNsYXRlWSk7CisKKyAgICAvLyBTZXR0ZXJzIGFuZCBnZXR0ZXJzIGZvciBWUGF0aCBkdXJpbmcgYW5pbWF0aW9uLgorICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5TZXRQYXRoRGF0YShsb25nIHBhdGhQdHIsIGxvbmcgcGF0aERhdGFQdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U3Ryb2tlV2lkdGgobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlV2lkdGgobG9uZyBwYXRoUHRyLCBmbG9hdCB3aWR0aCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0U3Ryb2tlQ29sb3IobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlQ29sb3IobG9uZyBwYXRoUHRyLCBpbnQgc3Ryb2tlQ29sb3IpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0U3Ryb2tlQWxwaGEobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0U3Ryb2tlQWxwaGEobG9uZyBwYXRoUHRyLCBmbG9hdCBhbHBoYSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuR2V0RmlsbENvbG9yKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEZpbGxDb2xvcihsb25nIHBhdGhQdHIsIGludCBmaWxsQ29sb3IpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0RmlsbEFscGhhKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldEZpbGxBbHBoYShsb25nIHBhdGhQdHIsIGZsb2F0IGZpbGxBbHBoYSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGZsb2F0IG5HZXRUcmltUGF0aFN0YXJ0KGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyaW1QYXRoU3RhcnQobG9uZyBwYXRoUHRyLCBmbG9hdCB0cmltUGF0aFN0YXJ0KTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgZmxvYXQgbkdldFRyaW1QYXRoRW5kKGxvbmcgcGF0aFB0cik7CisgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgblNldFRyaW1QYXRoRW5kKGxvbmcgcGF0aFB0ciwgZmxvYXQgdHJpbVBhdGhFbmQpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmbG9hdCBuR2V0VHJpbVBhdGhPZmZzZXQobG9uZyBwYXRoUHRyKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuU2V0VHJpbVBhdGhPZmZzZXQobG9uZyBwYXRoUHRyLCBmbG9hdCB0cmltUGF0aE9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuaCBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCmluZGV4IDNkNGU0N2QuLjkxNGFjM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCisrKyBiL2luY2x1ZGUvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5oCkBAIC0xMDAsMTYgKzEwMCwxNyBAQAogICAgICAqIHRoZW4gb24gc3VjY2VzcywgKmNvb2tpZSBpcyBzZXQgdG8gdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAgICAgICogbmV3bHktYWRkZWQgYXNzZXQgc291cmNlLgogICAgICAqLwotICAgIGJvb2wgYWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYj1mYWxzZSk7CisgICAgYm9vbCBhZGRBc3NldFBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50MzJfdCogY29va2llLAorICAgICAgICBib29sIGFwcEFzTGliPWZhbHNlLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogICAgIGJvb2wgYWRkT3ZlcmxheVBhdGgoY29uc3QgU3RyaW5nOCYgcGF0aCwgaW50MzJfdCogY29va2llKTsKIAotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKgogICAgICAqIENvbnZlbmllbmNlIGZvciBhZGRpbmcgdGhlIHN0YW5kYXJkIHN5c3RlbSBhc3NldHMuICBVc2VzIHRoZQogICAgICAqIEFORFJPSURfUk9PVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBmaW5kIHRoZW0uCiAgICAgICovCiAgICAgYm9vbCBhZGREZWZhdWx0QXNzZXRzKCk7CiAKLSAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgLyoKICAgICAgKiBJdGVyYXRlIG92ZXIgdGhlIGFzc2V0IHBhdGhzIGluIHRoaXMgbWFuYWdlci4gIChQcmV2aW91c2x5CiAgICAgICogYWRkZWQgdmlhIGFkZEFzc2V0UGF0aCgpIGFuZCBhZGREZWZhdWx0QXNzZXRzKCkuKSAgT24gZmlyc3QgY2FsbCwKICAgICAgKiAnY29va2llJyBtdXN0IGJlIDAsIHJlc3VsdGluZyBpbiB0aGUgZmlyc3QgY29va2llIGJlaW5nIHJldHVybmVkLgpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgICovCiAgICAgaW50MzJfdCBuZXh0QXNzZXRQYXRoKGNvbnN0IGludDMyX3QgY29va2llKSBjb25zdDsKIAotICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAvKgogICAgICAqIFJldHVybiBhbiBhc3NldCBwYXRoIGluIHRoZSBtYW5hZ2VyLiAgJ3doaWNoJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQKICAgICAgKiBjb3VudEFzc2V0UGF0aHMoKS4KICAgICAgKi8KQEAgLTIyMSwxMSArMjIyLDExIEBACiAgICAgICogdGhlIGN1cnJlbnQgZGF0YS4KICAgICAgKi8KICAgICBib29sIGlzVXBUb0RhdGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldCB0aGUga25vd24gbG9jYWxlcyBmb3IgdGhpcyBhc3NldCBtYW5hZ2VyIG9iamVjdC4KICAgICAgKi8KLSAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdDsKKyAgICB2b2lkIGdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzLCBib29sIGluY2x1ZGVTeXN0ZW1Mb2NhbGVzPXRydWUpIGNvbnN0OwogCiAgICAgLyoqCiAgICAgICogR2VuZXJhdGUgaWRtYXAgZGF0YSB0byB0cmFuc2xhdGUgcmVzb3VyY2VzIElEcyBiZXR3ZWVuIGEgcGFja2FnZSBhbmQgYQpAQCAtMjM3LDExICsyMzgsMTMgQEAKIHByaXZhdGU6CiAgICAgc3RydWN0IGFzc2V0X3BhdGgKICAgICB7Ci0gICAgICAgIGFzc2V0X3BhdGgoKSA6IHBhdGgoIiIpLCB0eXBlKGtGaWxlVHlwZVJlZ3VsYXIpLCBpZG1hcCgiIiksIGlzU3lzdGVtT3ZlcmxheShmYWxzZSkge30KKyAgICAgICAgYXNzZXRfcGF0aCgpIDogcGF0aCgiIiksIHR5cGUoa0ZpbGVUeXBlUmVndWxhciksIGlkbWFwKCIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaXNTeXN0ZW1PdmVybGF5KGZhbHNlKSwgaXNTeXN0ZW1Bc3NldChmYWxzZSkge30KICAgICAgICAgU3RyaW5nOCBwYXRoOwogICAgICAgICBGaWxlVHlwZSB0eXBlOwogICAgICAgICBTdHJpbmc4IGlkbWFwOwogICAgICAgICBib29sIGlzU3lzdGVtT3ZlcmxheTsKKyAgICAgICAgYm9vbCBpc1N5c3RlbUFzc2V0OwogICAgIH07CiAKICAgICBBc3NldCogb3BlbkluUGF0aExvY2tlZChjb25zdCBjaGFyKiBmaWxlTmFtZSwgQWNjZXNzTW9kZSBtb2RlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oIGIvaW5jbHVkZS9hbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oCmluZGV4IDQ5YjYzMzMuLjQyOGEyYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuaAorKysgYi9pbmNsdWRlL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmgKQEAgLTE1NTIsOSArMTU1Miw5IEBACiAKICAgICBzdGF0dXNfdCBhZGQoQXNzZXQqIGFzc2V0LCBjb25zdCBpbnQzMl90IGNvb2tpZT0tMSwgYm9vbCBjb3B5RGF0YT1mYWxzZSk7CiAgICAgc3RhdHVzX3QgYWRkKEFzc2V0KiBhc3NldCwgQXNzZXQqIGlkbWFwQXNzZXQsIGNvbnN0IGludDMyX3QgY29va2llPS0xLCBib29sIGNvcHlEYXRhPWZhbHNlLAotICAgICAgICAgICAgYm9vbCBhcHBBc0xpYj1mYWxzZSk7CisgICAgICAgICAgICBib29sIGFwcEFzTGliPWZhbHNlLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogCi0gICAgc3RhdHVzX3QgYWRkKFJlc1RhYmxlKiBzcmMpOworICAgIHN0YXR1c190IGFkZChSZXNUYWJsZSogc3JjLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogICAgIHN0YXR1c190IGFkZEVtcHR5KGNvbnN0IGludDMyX3QgY29va2llKTsKIAogICAgIHN0YXR1c190IGdldEVycm9yKCkgY29uc3Q7CkBAIC0xODIyLDkgKzE4MjIsOSBAQAogCiAgICAgLy8gUmV0dXJuIHRoZSBjb25maWd1cmF0aW9ucyAoUmVzVGFibGVfY29uZmlnKSB0aGF0IHdlIGtub3cgYWJvdXQKICAgICB2b2lkIGdldENvbmZpZ3VyYXRpb25zKFZlY3RvcjxSZXNUYWJsZV9jb25maWc+KiBjb25maWdzLCBib29sIGlnbm9yZU1pcG1hcD1mYWxzZSwKLSAgICAgICAgICAgIGJvb2wgaWdub3JlQW5kcm9pZFBhY2thZ2U9ZmFsc2UpIGNvbnN0OworICAgICAgICAgICAgYm9vbCBpZ25vcmVBbmRyb2lkUGFja2FnZT1mYWxzZSwgYm9vbCBpbmNsdWRlU3lzdGVtQ29uZmlncz10cnVlKSBjb25zdDsKIAotICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0OworICAgIHZvaWQgZ2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMsIGJvb2wgaW5jbHVkZVN5c3RlbUxvY2FsZXM9dHJ1ZSkgY29uc3Q7CiAKICAgICAvLyBHZW5lcmF0ZSBhbiBpZG1hcC4KICAgICAvLwpAQCAtMTg2MCw3ICsxODYwLDcgQEAKICAgICB0eXBlZGVmIFZlY3RvcjxUeXBlKj4gVHlwZUxpc3Q7CiAKICAgICBzdGF0dXNfdCBhZGRJbnRlcm5hbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCogaWRtYXBEYXRhLCBzaXplX3QgaWRtYXBEYXRhU2l6ZSwKLSAgICAgICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhKTsKKyAgICAgICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhLCBib29sIGlzU3lzdGVtQXNzZXQ9ZmFsc2UpOwogCiAgICAgc3NpemVfdCBnZXRSZXNvdXJjZVBhY2thZ2VJbmRleCh1aW50MzJfdCByZXNJRCkgY29uc3Q7CiAKQEAgLTE4NzMsMTAgKzE4NzMsMTEgQEAKICAgICAgICAgICAgIHNpemVfdCBuYW1lTGVuLCB1aW50MzJfdCogb3V0VHlwZVNwZWNGbGFncykgY29uc3Q7CiAKICAgICBzdGF0dXNfdCBwYXJzZVBhY2thZ2UoCi0gICAgICAgIGNvbnN0IFJlc1RhYmxlX3BhY2thZ2UqIGNvbnN0IHBrZywgY29uc3QgSGVhZGVyKiBjb25zdCBoZWFkZXIsIGJvb2wgYXBwQXNMaWIpOworICAgICAgICBjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2csIGNvbnN0IEhlYWRlciogY29uc3QgaGVhZGVyLAorICAgICAgICBib29sIGFwcEFzTGliLCBib29sIGlzU3lzdGVtQXNzZXQpOwogCiAgICAgdm9pZCBwcmludF92YWx1ZShjb25zdCBQYWNrYWdlKiBwa2csIGNvbnN0IFJlc192YWx1ZSYgdmFsdWUpIGNvbnN0OwotICAgIAorCiAgICAgbXV0YWJsZSBNdXRleCAgICAgICAgICAgICAgIG1Mb2NrOwogCiAgICAgc3RhdHVzX3QgICAgICAgICAgICAgICAgICAgIG1FcnJvcjsKZGlmZiAtLWdpdCBhL2tleXN0b3JlL2phdmEvYW5kcm9pZC9zZWN1cml0eS9LZXlDaGFpbi5qYXZhIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKaW5kZXggNDBmYjBkMy4uN2FkYWQ4YSAxMDA2NDQKLS0tIGEva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKKysrIGIva2V5c3RvcmUvamF2YS9hbmRyb2lkL3NlY3VyaXR5L0tleUNoYWluLmphdmEKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUge0Bjb2RlIFByaXZhdGVLZXl9IGZvciB0aGUgcmVxdWVzdGVkIGFsaWFzLCBvciBudWxsCi0gICAgICogaWYgbm8gdGhlcmUgaXMgbm8gcmVzdWx0LgorICAgICAqIGlmIHRoZXJlIGlzIG5vIHJlc3VsdC4KICAgICAgKgogICAgICAqIDxwPiBUaGlzIG1ldGhvZCBtYXkgYmxvY2sgd2hpbGUgd2FpdGluZyBmb3IgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIgcHJvY2VzcywgYW5kIG11c3QgbmV2ZXIKICAgICAgKiBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCkBAIC0zNzEsNyArMzcxLDcgQEAKICAgICAgICAgICAgIGZpbmFsIElLZXlDaGFpblNlcnZpY2Uga2V5Q2hhaW5TZXJ2aWNlID0ga2V5Q2hhaW5Db25uZWN0aW9uLmdldFNlcnZpY2UoKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXlJZCA9IGtleUNoYWluU2VydmljZS5yZXF1ZXN0UHJpdmF0ZUtleShhbGlhcyk7CiAgICAgICAgICAgICBpZiAoa2V5SWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBLZXlDaGFpbkV4Y2VwdGlvbigia2V5c3RvcmUgaGFkIGEgcHJvYmxlbSIpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEFuZHJvaWRLZXlTdG9yZVByb3ZpZGVyLmxvYWRBbmRyb2lkS2V5U3RvcmVQcml2YXRlS2V5RnJvbUtleXN0b3JlKAogICAgICAgICAgICAgICAgICAgICBLZXlTdG9yZS5nZXRJbnN0YW5jZSgpLCBrZXlJZCwgS2V5U3RvcmUuVUlEX1NFTEYpOwpkaWZmIC0tZ2l0IGEvbGlicy9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L0Fzc2V0TWFuYWdlci5jcHAKaW5kZXggOGEwM2I5NC4uNjkxM2Y0MyAxMDA2NDQKLS0tIGEvbGlicy9hbmRyb2lkZncvQXNzZXRNYW5hZ2VyLmNwcAorKysgYi9saWJzL2FuZHJvaWRmdy9Bc3NldE1hbmFnZXIuY3BwCkBAIC0xNzYsNyArMTc2LDggQEAKICAgICBkZWxldGVbXSBtVmVuZG9yOwogfQogCi1ib29sIEFzc2V0TWFuYWdlcjo6YWRkQXNzZXRQYXRoKGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYikKK2Jvb2wgQXNzZXRNYW5hZ2VyOjphZGRBc3NldFBhdGgoCisgICAgICAgIGNvbnN0IFN0cmluZzgmIHBhdGgsIGludDMyX3QqIGNvb2tpZSwgYm9vbCBhcHBBc0xpYiwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIEF1dG9NdXRleCBfbChtTG9jayk7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQAogICAgIH0KICAgICBkZWxldGUgbWFuaWZlc3RBc3NldDsKIAorICAgIGFwLmlzU3lzdGVtQXNzZXQgPSBpc1N5c3RlbUFzc2V0OwogICAgIG1Bc3NldFBhdGhzLmFkZChhcCk7CiAKICAgICAvLyBuZXcgcGF0aHMgYXJlIGFsd2F5cyBhZGRlZCBhdCB0aGUgZW5kCkBAIC0yMzMsNiArMjM1LDcgQEAKICAgICAvLyBMb2FkIG92ZXJsYXlzLCBpZiBhbnkKICAgICBhc3NldF9wYXRoIG9hcDsKICAgICBmb3IgKHNpemVfdCBpZHggPSAwOyBtWmlwU2V0LmdldE92ZXJsYXkoYXAucGF0aCwgaWR4LCAmb2FwKTsgaWR4KyspIHsKKyAgICAgICAgb2FwLmlzU3lzdGVtQXNzZXQgPSBpc1N5c3RlbUFzc2V0OwogICAgICAgICBtQXNzZXRQYXRocy5hZGQob2FwKTsKICAgICB9CiAjZW5kaWYKQEAgLTM0MCw3ICszNDMsNyBAQAogICAgIFN0cmluZzggcGF0aChyb290KTsKICAgICBwYXRoLmFwcGVuZFBhdGgoa1N5c3RlbUFzc2V0cyk7CiAKLSAgICByZXR1cm4gYWRkQXNzZXRQYXRoKHBhdGgsIE5VTEwpOworICAgIHJldHVybiBhZGRBc3NldFBhdGgocGF0aCwgTlVMTCwgZmFsc2UgLyogYXBwQXNMaWIgKi8sIHRydWUgLyogaXNTeXN0ZW1Bc3NldCAqLyk7CiB9CiAKIGludDMyX3QgQXNzZXRNYW5hZ2VyOjpuZXh0QXNzZXRQYXRoKGNvbnN0IGludDMyX3QgY29va2llKSBjb25zdApAQCAtNjgyLDEwICs2ODUsMTAgQEAKICAgICAgICAgQUxPR1YoIkluc3RhbGxpbmcgcmVzb3VyY2UgYXNzZXQgJXAgaW4gdG8gdGFibGUgJXBcbiIsIGFzcywgbVJlc291cmNlcyk7CiAgICAgICAgIGlmIChzaGFyZWRSZXMgIT0gTlVMTCkgewogICAgICAgICAgICAgQUxPR1YoIkNvcHlpbmcgZXhpc3RpbmcgcmVzb3VyY2VzIGZvciAlcyIsIGFwLnBhdGguc3RyaW5nKCkpOwotICAgICAgICAgICAgbVJlc291cmNlcy0+YWRkKHNoYXJlZFJlcyk7CisgICAgICAgICAgICBtUmVzb3VyY2VzLT5hZGQoc2hhcmVkUmVzLCBhcC5pc1N5c3RlbUFzc2V0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMT0dWKCJQYXJzaW5nIHJlc291cmNlcyBmb3IgJXMiLCBhcC5wYXRoLnN0cmluZygpKTsKLSAgICAgICAgICAgIG1SZXNvdXJjZXMtPmFkZChhc3MsIGlkbWFwLCBuZXh0RW50cnlJZHggKyAxLCAhc2hhcmVkLCBhcHBBc0xpYik7CisgICAgICAgICAgICBtUmVzb3VyY2VzLT5hZGQoYXNzLCBpZG1hcCwgbmV4dEVudHJ5SWR4ICsgMSwgIXNoYXJlZCwgYXBwQXNMaWIsIGFwLmlzU3lzdGVtQXNzZXQpOwogICAgICAgICB9CiAgICAgICAgIG9ubHlFbXB0eVJlc291cmNlcyA9IGZhbHNlOwogCkBAIC04MzEsMTEgKzgzNCwxMSBAQAogICAgIHJldHVybiBtWmlwU2V0LmlzVXBUb0RhdGUoKTsKIH0KIAotdm9pZCBBc3NldE1hbmFnZXI6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzKSBjb25zdAordm9pZCBBc3NldE1hbmFnZXI6OmdldExvY2FsZXMoVmVjdG9yPFN0cmluZzg+KiBsb2NhbGVzLCBib29sIGluY2x1ZGVTeXN0ZW1Mb2NhbGVzKSBjb25zdAogewogICAgIFJlc1RhYmxlKiByZXMgPSBtUmVzb3VyY2VzOwogICAgIGlmIChyZXMgIT0gTlVMTCkgewotICAgICAgICByZXMtPmdldExvY2FsZXMobG9jYWxlcyk7CisgICAgICAgIHJlcy0+Z2V0TG9jYWxlcyhsb2NhbGVzLCBpbmNsdWRlU3lzdGVtTG9jYWxlcyk7CiAgICAgfQogCiAgICAgY29uc3Qgc2l6ZV90IG51bUxvY2FsZXMgPSBsb2NhbGVzLT5zaXplKCk7CmRpZmYgLS1naXQgYS9saWJzL2FuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmNwcCBiL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCmluZGV4IDIxYjU0M2UuLjQ0ZjkyYzcgMTAwNjQ0Ci0tLSBhL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCisrKyBiL2xpYnMvYW5kcm9pZGZ3L1Jlc291cmNlVHlwZXMuY3BwCkBAIC0zMDgwLDEzICszMDgwLDE2IEBACiAvLyB0YWJsZSB0aGF0IGRlZmluZWQgdGhlIHBhY2thZ2UpOyB0aGUgb25lcyBhZnRlciBhcmUgc2tpbnMgb24gdG9wIG9mIGl0Lgogc3RydWN0IFJlc1RhYmxlOjpQYWNrYWdlR3JvdXAKIHsKLSAgICBQYWNrYWdlR3JvdXAoUmVzVGFibGUqIF9vd25lciwgY29uc3QgU3RyaW5nMTYmIF9uYW1lLCB1aW50MzJfdCBfaWQsIGJvb2wgYXBwQXNMaWIpCisgICAgUGFja2FnZUdyb3VwKAorICAgICAgICAgICAgUmVzVGFibGUqIF9vd25lciwgY29uc3QgU3RyaW5nMTYmIF9uYW1lLCB1aW50MzJfdCBfaWQsCisgICAgICAgICAgICBib29sIGFwcEFzTGliLCBib29sIF9pc1N5c3RlbUFzc2V0KQogICAgICAgICA6IG93bmVyKF9vd25lcikKICAgICAgICAgLCBuYW1lKF9uYW1lKQogICAgICAgICAsIGlkKF9pZCkKICAgICAgICAgLCBsYXJnZXN0VHlwZUlkKDApCiAgICAgICAgICwgYmFncyhOVUxMKQogICAgICAgICAsIGR5bmFtaWNSZWZUYWJsZShzdGF0aWNfY2FzdDx1aW50OF90PihfaWQpLCBhcHBBc0xpYikKKyAgICAgICAgLCBpc1N5c3RlbUFzc2V0KF9pc1N5c3RlbUFzc2V0KQogICAgIHsgfQogCiAgICAgflBhY2thZ2VHcm91cCgpIHsKQEAgLTMxNzgsNiArMzE4MSwxMCBAQAogICAgIC8vIGJ5IGhhdmluZyB0aGVzZSB0YWJsZXMgaW4gYSBwZXItcGFja2FnZSBzY29wZSByYXRoZXIgdGhhbgogICAgIC8vIHBlci1wYWNrYWdlLWdyb3VwLgogICAgIER5bmFtaWNSZWZUYWJsZSAgICAgICAgICAgICAgICAgZHluYW1pY1JlZlRhYmxlOworCisgICAgLy8gSWYgdGhlIHBhY2thZ2UgZ3JvdXAgY29tZXMgZnJvbSBhIHN5c3RlbSBhc3NldC4gVXNlZCBpbgorICAgIC8vIGRldGVybWluaW5nIG5vbi1zeXN0ZW0gbG9jYWxlcy4KKyAgICBjb25zdCBib29sICAgICAgICAgICAgICAgICAgICAgIGlzU3lzdGVtQXNzZXQ7CiB9OwogCiBzdHJ1Y3QgUmVzVGFibGU6OmJhZ19zZXQKQEAgLTM1NzIsOCArMzU3OSw5IEBACiAgICAgICAgICAgICBjb3B5RGF0YSk7CiB9CiAKLXN0YXR1c190IFJlc1RhYmxlOjphZGQoQXNzZXQqIGFzc2V0LCBBc3NldCogaWRtYXBBc3NldCwgY29uc3QgaW50MzJfdCBjb29raWUsIGJvb2wgY29weURhdGEsCi0gICAgICAgIGJvb2wgYXBwQXNMaWIpIHsKK3N0YXR1c190IFJlc1RhYmxlOjphZGQoCisgICAgICAgIEFzc2V0KiBhc3NldCwgQXNzZXQqIGlkbWFwQXNzZXQsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhLAorICAgICAgICBib29sIGFwcEFzTGliLCBib29sIGlzU3lzdGVtQXNzZXQpIHsKICAgICBjb25zdCB2b2lkKiBkYXRhID0gYXNzZXQtPmdldEJ1ZmZlcih0cnVlKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIEFMT0dXKCJVbmFibGUgdG8gZ2V0IGJ1ZmZlciBvZiByZXNvdXJjZSBhc3NldCBmaWxlIik7CkBAIC0zNTkyLDIwICszNjAwLDIxIEBACiAgICAgfQogCiAgICAgcmV0dXJuIGFkZEludGVybmFsKGRhdGEsIHN0YXRpY19jYXN0PHNpemVfdD4oYXNzZXQtPmdldExlbmd0aCgpKSwKLSAgICAgICAgICAgIGlkbWFwRGF0YSwgaWRtYXBTaXplLCBhcHBBc0xpYiwgY29va2llLCBjb3B5RGF0YSk7CisgICAgICAgICAgICBpZG1hcERhdGEsIGlkbWFwU2l6ZSwgYXBwQXNMaWIsIGNvb2tpZSwgY29weURhdGEsIGlzU3lzdGVtQXNzZXQpOwogfQogCi1zdGF0dXNfdCBSZXNUYWJsZTo6YWRkKFJlc1RhYmxlKiBzcmMpCitzdGF0dXNfdCBSZXNUYWJsZTo6YWRkKFJlc1RhYmxlKiBzcmMsIGJvb2wgaXNTeXN0ZW1Bc3NldCkKIHsKICAgICBtRXJyb3IgPSBzcmMtPm1FcnJvcjsKIAotICAgIGZvciAoc2l6ZV90IGk9MDsgaTxzcmMtPm1IZWFkZXJzLnNpemUoKTsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaT0wOyBpIDwgc3JjLT5tSGVhZGVycy5zaXplKCk7IGkrKykgewogICAgICAgICBtSGVhZGVycy5hZGQoc3JjLT5tSGVhZGVyc1tpXSk7CiAgICAgfQogCi0gICAgZm9yIChzaXplX3QgaT0wOyBpPHNyYy0+bVBhY2thZ2VHcm91cHMuc2l6ZSgpOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzcmMtPm1QYWNrYWdlR3JvdXBzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIFBhY2thZ2VHcm91cCogc3JjUGcgPSBzcmMtPm1QYWNrYWdlR3JvdXBzW2ldOwotICAgICAgICBQYWNrYWdlR3JvdXAqIHBnID0gbmV3IFBhY2thZ2VHcm91cCh0aGlzLCBzcmNQZy0+bmFtZSwgc3JjUGctPmlkLCBmYWxzZSk7CisgICAgICAgIFBhY2thZ2VHcm91cCogcGcgPSBuZXcgUGFja2FnZUdyb3VwKHRoaXMsIHNyY1BnLT5uYW1lLCBzcmNQZy0+aWQsCisgICAgICAgICAgICAgICAgZmFsc2UgLyogYXBwQXNMaWIgKi8sIGlzU3lzdGVtQXNzZXQgfHwgc3JjUGctPmlzU3lzdGVtQXNzZXQpOwogICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGo8c3JjUGctPnBhY2thZ2VzLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgICBwZy0+cGFja2FnZXMuYWRkKHNyY1BnLT5wYWNrYWdlc1tqXSk7CiAgICAgICAgIH0KQEAgLTM2NDYsNyArMzY1NSw3IEBACiB9CiAKIHN0YXR1c190IFJlc1RhYmxlOjphZGRJbnRlcm5hbChjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUsIGNvbnN0IHZvaWQqIGlkbWFwRGF0YSwgc2l6ZV90IGlkbWFwRGF0YVNpemUsCi0gICAgICAgIGJvb2wgYXBwQXNMaWIsIGNvbnN0IGludDMyX3QgY29va2llLCBib29sIGNvcHlEYXRhKQorICAgICAgICBib29sIGFwcEFzTGliLCBjb25zdCBpbnQzMl90IGNvb2tpZSwgYm9vbCBjb3B5RGF0YSwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIGlmICghZGF0YSkgewogICAgICAgICByZXR1cm4gTk9fRVJST1I7CkBAIC0zNzQ5LDcgKzM3NTgsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiAobUVycm9yPUJBRF9UWVBFKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHBhcnNlUGFja2FnZSgoUmVzVGFibGVfcGFja2FnZSopY2h1bmssIGhlYWRlciwgYXBwQXNMaWIpICE9IE5PX0VSUk9SKSB7CisgICAgICAgICAgICBpZiAocGFyc2VQYWNrYWdlKAorICAgICAgICAgICAgICAgICAgICAoUmVzVGFibGVfcGFja2FnZSopY2h1bmssIGhlYWRlciwgYXBwQXNMaWIsIGlzU3lzdGVtQXNzZXQpICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1FcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGN1clBhY2thZ2UrKzsKQEAgLTU2NjMsNyArNTY3Myw3IEBACiB9CiAKIHZvaWQgUmVzVGFibGU6OmdldENvbmZpZ3VyYXRpb25zKFZlY3RvcjxSZXNUYWJsZV9jb25maWc+KiBjb25maWdzLCBib29sIGlnbm9yZU1pcG1hcCwKLSAgICAgICAgYm9vbCBpZ25vcmVBbmRyb2lkUGFja2FnZSkgY29uc3QgeworICAgICAgICBib29sIGlnbm9yZUFuZHJvaWRQYWNrYWdlLCBib29sIGluY2x1ZGVTeXN0ZW1Db25maWdzKSBjb25zdCB7CiAgICAgY29uc3Qgc2l6ZV90IHBhY2thZ2VDb3VudCA9IG1QYWNrYWdlR3JvdXBzLnNpemUoKTsKICAgICBTdHJpbmcxNiBhbmRyb2lkKCJhbmRyb2lkIik7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYWNrYWdlQ291bnQ7IGkrKykgewpAQCAtNTY3MSw2ICs1NjgxLDkgQEAKICAgICAgICAgaWYgKGlnbm9yZUFuZHJvaWRQYWNrYWdlICYmIGFuZHJvaWQgPT0gcGFja2FnZUdyb3VwLT5uYW1lKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBpZiAoIWluY2x1ZGVTeXN0ZW1Db25maWdzICYmIHBhY2thZ2VHcm91cC0+aXNTeXN0ZW1Bc3NldCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICAgICAgICAgY29uc3Qgc2l6ZV90IHR5cGVDb3VudCA9IHBhY2thZ2VHcm91cC0+dHlwZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHR5cGVDb3VudDsgaisrKSB7CiAgICAgICAgICAgICBjb25zdCBUeXBlTGlzdCYgdHlwZUxpc3QgPSBwYWNrYWdlR3JvdXAtPnR5cGVzW2pdOwpAQCAtNTcwNywxMSArNTcyMCwxNCBAQAogICAgIH0KIH0KIAotdm9pZCBSZXNUYWJsZTo6Z2V0TG9jYWxlcyhWZWN0b3I8U3RyaW5nOD4qIGxvY2FsZXMpIGNvbnN0Cit2b2lkIFJlc1RhYmxlOjpnZXRMb2NhbGVzKFZlY3RvcjxTdHJpbmc4PiogbG9jYWxlcywgYm9vbCBpbmNsdWRlU3lzdGVtTG9jYWxlcykgY29uc3QKIHsKICAgICBWZWN0b3I8UmVzVGFibGVfY29uZmlnPiBjb25maWdzOwogICAgIEFMT0dWKCJjYWxsaW5nIGdldENvbmZpZ3VyYXRpb25zIik7Ci0gICAgZ2V0Q29uZmlndXJhdGlvbnMoJmNvbmZpZ3MpOworICAgIGdldENvbmZpZ3VyYXRpb25zKCZjb25maWdzLAorICAgICAgICAgICAgZmFsc2UgLyogaWdub3JlTWlwbWFwICovLAorICAgICAgICAgICAgZmFsc2UgLyogaWdub3JlQW5kcm9pZFBhY2thZ2UgKi8sCisgICAgICAgICAgICBpbmNsdWRlU3lzdGVtTG9jYWxlcyAvKiBpbmNsdWRlU3lzdGVtQ29uZmlncyAqLyk7CiAgICAgQUxPR1YoImNhbGxlZCBnZXRDb25maWd1cmF0aW9ucyBzaXplPSVkIiwgKGludCljb25maWdzLnNpemUoKSk7CiAgICAgY29uc3Qgc2l6ZV90IEkgPSBjb25maWdzLnNpemUoKTsKIApAQCAtNTkzNyw3ICs1OTUzLDcgQEAKIH0KIAogc3RhdHVzX3QgUmVzVGFibGU6OnBhcnNlUGFja2FnZShjb25zdCBSZXNUYWJsZV9wYWNrYWdlKiBjb25zdCBwa2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEhlYWRlciogY29uc3QgaGVhZGVyLCBib29sIGFwcEFzTGliKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBIZWFkZXIqIGNvbnN0IGhlYWRlciwgYm9vbCBhcHBBc0xpYiwgYm9vbCBpc1N5c3RlbUFzc2V0KQogewogICAgIGNvbnN0IHVpbnQ4X3QqIGJhc2UgPSAoY29uc3QgdWludDhfdCopcGtnOwogICAgIHN0YXR1c190IGVyciA9IHZhbGlkYXRlX2NodW5rKCZwa2ctPmhlYWRlciwgc2l6ZW9mKCpwa2cpIC0gc2l6ZW9mKHBrZy0+dHlwZUlkT2Zmc2V0KSwKQEAgLTU5ODUsOCArNjAwMSw4IEBACiAgICAgaWYgKGlkID49IDI1NikgewogICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJQYWNrYWdlIGlkIG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTk9fRVJST1I7Ci0gICAgfSBlbHNlIGlmIChpZCA9PSAwIHx8IGFwcEFzTGliKSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBsaWJyYXJ5IHNvIGFzc2lnbiBhbiBJRAorICAgIH0gZWxzZSBpZiAoaWQgPT0gMCB8fCBhcHBBc0xpYiB8fCBpc1N5c3RlbUFzc2V0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYSBsaWJyYXJ5IG9yIGEgc3lzdGVtIGFzc2V0LCBzbyBhc3NpZ24gYW4gSUQKICAgICAgICAgaWQgPSBtTmV4dFBhY2thZ2VJZCsrOwogICAgIH0KIApAQCAtNjAxOCw3ICs2MDM0LDcgQEAKIAogICAgICAgICBjaGFyMTZfdCB0bXBOYW1lW3NpemVvZihwa2ctPm5hbWUpL3NpemVvZihwa2ctPm5hbWVbMF0pXTsKICAgICAgICAgc3RyY3B5MTZfZHRvaCh0bXBOYW1lLCBwa2ctPm5hbWUsIHNpemVvZihwa2ctPm5hbWUpL3NpemVvZihwa2ctPm5hbWVbMF0pKTsKLSAgICAgICAgZ3JvdXAgPSBuZXcgUGFja2FnZUdyb3VwKHRoaXMsIFN0cmluZzE2KHRtcE5hbWUpLCBpZCwgYXBwQXNMaWIpOworICAgICAgICBncm91cCA9IG5ldyBQYWNrYWdlR3JvdXAodGhpcywgU3RyaW5nMTYodG1wTmFtZSksIGlkLCBhcHBBc0xpYiwgaXNTeXN0ZW1Bc3NldCk7CiAgICAgICAgIGlmIChncm91cCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBkZWxldGUgcGFja2FnZTsKICAgICAgICAgICAgIHJldHVybiAobUVycm9yPU5PX01FTU9SWSk7CmRpZmYgLS1naXQgYS9saWJzL2NvbW1vbl90aW1lL2NvbW1vbl90aW1lX3NlcnZlci5jcHAgYi9saWJzL2NvbW1vbl90aW1lL2NvbW1vbl90aW1lX3NlcnZlci5jcHAKaW5kZXggMDEzNzJlMC4uZjcyZmZhYSAxMDA2NDQKLS0tIGEvbGlicy9jb21tb25fdGltZS9jb21tb25fdGltZV9zZXJ2ZXIuY3BwCisrKyBiL2xpYnMvY29tbW9uX3RpbWUvY29tbW9uX3RpbWVfc2VydmVyLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBACiAKICAgICAvLyBDcmVhdGUgdGhlIGV2ZW50ZmQgd2Ugd2lsbCB1c2UgdG8gc2lnbmFsIG91ciB0aHJlYWQgdG8gd2FrZSB1cCB3aGVuCiAgICAgLy8gbmVlZGVkLgotICAgIG1XYWtldXBUaHJlYWRGRCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLKTsKKyAgICBtV2FrZXVwVGhyZWFkRkQgPSBldmVudGZkKDAsIEVGRF9OT05CTE9DSyB8IEVGRF9DTE9FWEVDKTsKIAogICAgIC8vIHNlZWQgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yICh1c2VkIHRvIGdlbmVyYXRlZCB0aW1lbGluZSBJRHMpCiAgICAgc3JhbmQ0OChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN5c3RlbVRpbWUoKSkpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0FuZHJvaWQubWsgYi9saWJzL2h3dWkvQW5kcm9pZC5tawppbmRleCAwZDFlZTQ2Li5iYmZjMDIyIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQW5kcm9pZC5taworKysgYi9saWJzL2h3dWkvQW5kcm9pZC5tawpAQCAtMiw3ICsyLDcgQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiAKLUhXVUlfTkVXX09QUyA6PSBmYWxzZQorSFdVSV9ORVdfT1BTIDo9IHRydWUKIAogaHd1aV9zcmNfZmlsZXMgOj0gXAogICAgIGZvbnQvQ2FjaGVUZXh0dXJlLmNwcCBcCkBAIC04Niw3ICs4Niw3IEBACiAgICAgVGV4dERyb3BTaGFkb3dDYWNoZS5jcHAgXAogICAgIFRleHR1cmUuY3BwIFwKICAgICBUZXh0dXJlQ2FjaGUuY3BwIFwKLSAgICBWZWN0b3JEcmF3YWJsZVBhdGguY3BwIFwKKyAgICBWZWN0b3JEcmF3YWJsZS5jcHAgXAogICAgIHByb3Rvcy9od3VpLnByb3RvCiAKIGh3dWlfdGVzdF9jb21tb25fc3JjX2ZpbGVzIDo9IFwKQEAgLTEwOCw3ICsxMDgsOSBAQAogICAgIGh3dWlfc3JjX2ZpbGVzICs9IFwKICAgICAgICAgQmFrZWRPcERpc3BhdGNoZXIuY3BwIFwKICAgICAgICAgQmFrZWRPcFJlbmRlcmVyLmNwcCBcCi0gICAgICAgIE9wUmVvcmRlcmVyLmNwcCBcCisgICAgICAgIEJha2VkT3BTdGF0ZS5jcHAgXAorICAgICAgICBGcmFtZUJ1aWxkZXIuY3BwIFwKKyAgICAgICAgTGF5ZXJCdWlsZGVyLmNwcCBcCiAgICAgICAgIFJlY29yZGluZ0NhbnZhcy5jcHAKIAogICAgIGh3dWlfY2ZsYWdzICs9IC1ESFdVSV9ORVdfT1BTCkBAIC0yMzUsOCArMjM3LDggQEAKIGlmZXEgKHRydWUsICQoSFdVSV9ORVdfT1BTKSkKICAgICBMT0NBTF9TUkNfRklMRVMgKz0gXAogICAgICAgICB0ZXN0cy91bml0L0Jha2VkT3BTdGF0ZVRlc3RzLmNwcCBcCi0gICAgICAgIHRlc3RzL3VuaXQvUmVjb3JkaW5nQ2FudmFzVGVzdHMuY3BwIFwKLSAgICAgICAgdGVzdHMvdW5pdC9PcFJlb3JkZXJlclRlc3RzLmNwcAorICAgICAgICB0ZXN0cy91bml0L0ZyYW1lQnVpbGRlclRlc3RzLmNwcCBcCisgICAgICAgIHRlc3RzL3VuaXQvUmVjb3JkaW5nQ2FudmFzVGVzdHMuY3BwCiBlbmRpZgogCiBpbmNsdWRlICQoQlVJTERfTkFUSVZFX1RFU1QpCkBAIC0yOTUsOSArMjk3LDkgQEAKICAgICB0ZXN0cy9taWNyb2JlbmNoL1BhdGhQYXJzZXJCZW5jaC5jcHAgXAogICAgIHRlc3RzL21pY3JvYmVuY2gvU2hhZG93QmVuY2guY3BwCiAKLWlmZXEgKHRydWUsICQoSFdVSV9ORVdfT1BTKSkKLSAgICBMT0NBTF9TUkNfRklMRVMgKz0gXAotICAgICAgICB0ZXN0cy9taWNyb2JlbmNoL09wUmVvcmRlcmVyQmVuY2guY3BwCi1lbmRpZgorIyBpZmVxICh0cnVlLCAkKEhXVUlfTkVXX09QUykpCisjICAgICBMT0NBTF9TUkNfRklMRVMgKz0gXAorIyAgICAgICAgIHRlc3RzL21pY3JvYmVuY2gvRnJhbWVCdWlsZGVyQmVuY2guY3BwCisjIGVuZGlmCiAKIGluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Jha2VkT3BEaXNwYXRjaGVyLmNwcCBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5jcHAKaW5kZXggM2QzNWRkNS4uNWIzNGY2YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Jha2VkT3BEaXNwYXRjaGVyLmNwcAorKysgYi9saWJzL2h3dWkvQmFrZWRPcERpc3BhdGNoZXIuY3BwCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiQ2FjaGVzLmgiCiAjaW5jbHVkZSAiR2xvcC5oIgogI2luY2x1ZGUgIkdsb3BCdWlsZGVyLmgiCisjaW5jbHVkZSAiUGF0Y2guaCIKICNpbmNsdWRlICJQYXRoVGVzc2VsbGF0b3IuaCIKICNpbmNsdWRlICJyZW5kZXJzdGF0ZS9PZmZzY3JlZW5CdWZmZXJQb29sLmgiCiAjaW5jbHVkZSAicmVuZGVyc3RhdGUvUmVuZGVyU3RhdGUuaCIKQEAgLTU2LDggKzU3LDYgQEAKICAgICBpZiAoZW50cnkpIHsKICAgICAgICAgZW50cnktPnV2TWFwcGVyLm1hcCh0ZXhDb29yZHMpOwogICAgIH0KLSAgICAvLyBpbml0IHRvIG5vbi1lbXB0eSwgc28gd2UgY2FuIHNhZmVseSBleHBhbmR0b0NvdmVyUmVjdAotICAgIFJlY3QgdG90YWxCb3VuZHMgPSBmaXJzdFN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9wTGlzdC5jb3VudDsgaSsrKSB7CiAgICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUgPSAqKG9wTGlzdC5zdGF0ZXNbaV0pOwogICAgICAgICBUZXh0dXJlVmVydGV4KiByZWN0VmVydHMgPSAmdmVydGljZXNbaSAqIDRdOwpAQCAtNjgsOCArNjcsNiBAQAogICAgICAgICB9CiAgICAgICAgIHN0b3JlVGV4dHVyZWRSZWN0KHJlY3RWZXJ0cywgb3BCb3VuZHMsIHRleENvb3Jkcyk7CiAgICAgICAgIHJlbmRlcmVyLmRpcnR5UmVuZGVyVGFyZ2V0KG9wQm91bmRzKTsKLQotICAgICAgICB0b3RhbEJvdW5kcy5leHBhbmRUb0NvdmVyKG9wQm91bmRzKTsKICAgICB9CiAKICAgICBjb25zdCBpbnQgdGV4dHVyZUZpbGxGbGFncyA9IChiaXRtYXAtPmNvbG9yVHlwZSgpID09IGtBbHBoYV84X1NrQ29sb3JUeXBlKQpAQCAtODAsOSArNzcsMTE3IEBACiAgICAgICAgICAgICAuc2V0TWVzaFRleHR1cmVkSW5kZXhlZFF1YWRzKHZlcnRpY2VzLCBvcExpc3QuY291bnQgKiA2KQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIGZpcnN0U3RhdGUub3AtPnBhaW50LCBmaXJzdFN0YXRlLmFscGhhKQogICAgICAgICAgICAgLnNldFRyYW5zZm9ybShNYXRyaXg0OjppZGVudGl0eSgpLCBUcmFuc2Zvcm1GbGFnczo6Tm9uZSkKLSAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdPZmZzZXRSZWN0KDAsIDAsIHRvdGFsQm91bmRzKSAvLyBkb24ndCBzbmFwIGhlcmUsIHdlIHNuYXAgcGVyLXF1YWQgYWJvdmUKKyAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdJZGVudGl0eUVtcHR5Qm91bmRzKCkKICAgICAgICAgICAgIC5idWlsZCgpOwotICAgIHJlbmRlcmVyLnJlbmRlckdsb3AobnVsbHB0ciwgb3BMaXN0LmNsaXBTaWRlRmxhZ3MgPyAmb3BMaXN0LmNsaXAgOiBudWxscHRyLCBnbG9wKTsKKyAgICBDbGlwUmVjdCByZW5kZXJUYXJnZXRDbGlwKG9wTGlzdC5jbGlwKTsKKyAgICBjb25zdCBDbGlwQmFzZSogY2xpcCA9IG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJnJlbmRlclRhcmdldENsaXAgOiBudWxscHRyOworICAgIHJlbmRlcmVyLnJlbmRlckdsb3AobnVsbHB0ciwgY2xpcCwgZ2xvcCk7Cit9CisKK3ZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uTWVyZ2VkUGF0Y2hPcHMoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwKKyAgICAgICAgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCkgeworICAgIGNvbnN0IFBhdGNoT3AmIGZpcnN0T3AgPSAqKHN0YXRpY19jYXN0PGNvbnN0IFBhdGNoT3AqPihvcExpc3Quc3RhdGVzWzBdLT5vcCkpOworICAgIGNvbnN0IEJha2VkT3BTdGF0ZSYgZmlyc3RTdGF0ZSA9ICoob3BMaXN0LnN0YXRlc1swXSk7CisgICAgQXNzZXRBdGxhczo6RW50cnkqIGVudHJ5ID0gcmVuZGVyZXIucmVuZGVyU3RhdGUoKS5hc3NldEF0bGFzKCkuZ2V0RW50cnkoCisgICAgICAgICAgICBmaXJzdE9wLmJpdG1hcC0+cGl4ZWxSZWYoKSk7CisKKyAgICAvLyBCYXRjaGVzIHdpbGwgdXN1YWxseSBjb250YWluIGEgc21hbGwgbnVtYmVyIG9mIGl0ZW1zIHNvIGl0J3MKKyAgICAvLyB3b3J0aCBwZXJmb3JtaW5nIGEgZmlyc3QgaXRlcmF0aW9uIHRvIGNvdW50IHRoZSBleGFjdCBudW1iZXIKKyAgICAvLyBvZiB2ZXJ0aWNlcyB3ZSBuZWVkIGluIHRoZSBuZXcgbWVzaAorICAgIHVpbnQzMl90IHRvdGFsVmVydGljZXMgPSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcExpc3QuY291bnQ7IGkrKykgeworICAgICAgICBjb25zdCBQYXRjaE9wJiBvcCA9ICooc3RhdGljX2Nhc3Q8Y29uc3QgUGF0Y2hPcCo+KG9wTGlzdC5zdGF0ZXNbaV0tPm9wKSk7CisKKyAgICAgICAgLy8gVE9ETzogY2FjaGUgbWVzaCBsb29rdXBzCisgICAgICAgIGNvbnN0IFBhdGNoKiBvcE1lc2ggPSByZW5kZXJlci5jYWNoZXMoKS5wYXRjaENhY2hlLmdldCgKKyAgICAgICAgICAgICAgICBlbnRyeSwgb3AuYml0bWFwLT53aWR0aCgpLCBvcC5iaXRtYXAtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgIG9wLnVubWFwcGVkQm91bmRzLmdldFdpZHRoKCksIG9wLnVubWFwcGVkQm91bmRzLmdldEhlaWdodCgpLCBvcC5wYXRjaCk7CisgICAgICAgIHRvdGFsVmVydGljZXMgKz0gb3BNZXNoLT52ZXJ0aWNlc0NvdW50OworICAgIH0KKworICAgIGNvbnN0IGJvb2wgZGlydHlSZW5kZXJUYXJnZXQgPSByZW5kZXJlci5vZmZzY3JlZW5SZW5kZXJUYXJnZXQoKTsKKworICAgIHVpbnQzMl90IGluZGV4Q291bnQgPSAwOworCisgICAgVGV4dHVyZVZlcnRleCB2ZXJ0aWNlc1t0b3RhbFZlcnRpY2VzXTsKKyAgICBUZXh0dXJlVmVydGV4KiB2ZXJ0ZXggPSAmdmVydGljZXNbMF07CisgICAgLy8gQ3JlYXRlIGEgbWVzaCB0aGF0IGNvbnRhaW5zIHRoZSB0cmFuc2Zvcm1lZCB2ZXJ0aWNlcyBmb3IgYWxsIHRoZQorICAgIC8vIDktcGF0Y2ggb2JqZWN0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBiYXRjaC4gTm90ZSB0aGF0IG9uRGVmZXIoKQorICAgIC8vIGVuZm9yY2VzIG9wcyBkcmF3biBieSB0aGlzIGZ1bmN0aW9uIHRvIGhhdmUgYSBwdXJlIHRyYW5zbGF0ZSBvcgorICAgIC8vIGlkZW50aXR5IG1hdHJpeAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BMaXN0LmNvdW50OyBpKyspIHsKKyAgICAgICAgY29uc3QgUGF0Y2hPcCYgb3AgPSAqKHN0YXRpY19jYXN0PGNvbnN0IFBhdGNoT3AqPihvcExpc3Quc3RhdGVzW2ldLT5vcCkpOworICAgICAgICBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlID0gKm9wTGlzdC5zdGF0ZXNbaV07CisKKyAgICAgICAgLy8gVE9ETzogY2FjaGUgbWVzaCBsb29rdXBzCisgICAgICAgIGNvbnN0IFBhdGNoKiBvcE1lc2ggPSByZW5kZXJlci5jYWNoZXMoKS5wYXRjaENhY2hlLmdldCgKKyAgICAgICAgICAgICAgICBlbnRyeSwgb3AuYml0bWFwLT53aWR0aCgpLCBvcC5iaXRtYXAtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgIG9wLnVubWFwcGVkQm91bmRzLmdldFdpZHRoKCksIG9wLnVubWFwcGVkQm91bmRzLmdldEhlaWdodCgpLCBvcC5wYXRjaCk7CisKKworICAgICAgICB1aW50MzJfdCB2ZXJ0ZXhDb3VudCA9IG9wTWVzaC0+dmVydGljZXNDb3VudDsKKyAgICAgICAgaWYgKHZlcnRleENvdW50ID09IDApIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIHVzZSB0aGUgYm91bmRzIHRvIGtub3cgd2hlcmUgdG8gdHJhbnNsYXRlIG91ciB2ZXJ0aWNlcworICAgICAgICAvLyBVc2luZyBwYXRjaE9wLT5zdGF0ZS5tQm91bmRzIHdvdWxkbid0IHdvcmsgYmVjYXVzZSB0aGVzZQorICAgICAgICAvLyBib3VuZHMgYXJlIGNsaXBwZWQKKyAgICAgICAgY29uc3QgZmxvYXQgdHggPSBmbG9vcmYoc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uZ2V0VHJhbnNsYXRlWCgpCisgICAgICAgICAgICAgICAgKyBvcC51bm1hcHBlZEJvdW5kcy5sZWZ0ICsgMC41Zik7CisgICAgICAgIGNvbnN0IGZsb2F0IHR5ID0gZmxvb3JmKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmdldFRyYW5zbGF0ZVkoKQorICAgICAgICAgICAgICAgICsgb3AudW5tYXBwZWRCb3VuZHMudG9wICsgMC41Zik7CisKKyAgICAgICAgLy8gQ29weSAmIHRyYW5zZm9ybSBhbGwgdGhlIHZlcnRpY2VzIGZvciB0aGUgY3VycmVudCBvcGVyYXRpb24KKyAgICAgICAgVGV4dHVyZVZlcnRleCogb3BWZXJ0aWNlcyA9IG9wTWVzaC0+dmVydGljZXMuZ2V0KCk7CisgICAgICAgIGZvciAodWludDMyX3QgaiA9IDA7IGogPCB2ZXJ0ZXhDb3VudDsgaisrLCBvcFZlcnRpY2VzKyspIHsKKyAgICAgICAgICAgIFRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgrKywKKyAgICAgICAgICAgICAgICAgICAgb3BWZXJ0aWNlcy0+eCArIHR4LCBvcFZlcnRpY2VzLT55ICsgdHksCisgICAgICAgICAgICAgICAgICAgIG9wVmVydGljZXMtPnUsIG9wVmVydGljZXMtPnYpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRGlydHkgdGhlIGN1cnJlbnQgbGF5ZXIgaWYgcG9zc2libGUuIFdoZW4gdGhlIDktcGF0Y2ggZG9lcyBub3QKKyAgICAgICAgLy8gY29udGFpbiBlbXB0eSBxdWFkcyB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBzaW1wbHkgc2V0IHRoZQorICAgICAgICAvLyBkaXJ0eSByZWN0IHRvIHRoZSBvYmplY3QncyBib3VuZHMuCisgICAgICAgIGlmIChkaXJ0eVJlbmRlclRhcmdldCkgeworICAgICAgICAgICAgaWYgKCFvcE1lc2gtPmhhc0VtcHR5UXVhZHMpIHsKKyAgICAgICAgICAgICAgICByZW5kZXJlci5kaXJ0eVJlbmRlclRhcmdldChSZWN0KHR4LCB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4ICsgb3AudW5tYXBwZWRCb3VuZHMuZ2V0V2lkdGgoKSwgdHkgKyBvcC51bm1hcHBlZEJvdW5kcy5nZXRIZWlnaHQoKSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgY291bnQgPSBvcE1lc2gtPnF1YWRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVjdCYgcXVhZEJvdW5kcyA9IG9wTWVzaC0+cXVhZHNbaV07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IHggPSB0eCArIHF1YWRCb3VuZHMubGVmdDsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgeSA9IHR5ICsgcXVhZEJvdW5kcy50b3A7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLmRpcnR5UmVuZGVyVGFyZ2V0KFJlY3QoeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICsgcXVhZEJvdW5kcy5nZXRXaWR0aCgpLCB5ICsgcXVhZEJvdW5kcy5nZXRIZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGluZGV4Q291bnQgKz0gb3BNZXNoLT5pbmRleENvdW50OworICAgIH0KKworCisgICAgVGV4dHVyZSogdGV4dHVyZSA9IGVudHJ5ID8gZW50cnktPnRleHR1cmUgOiByZW5kZXJlci5jYWNoZXMoKS50ZXh0dXJlQ2FjaGUuZ2V0KGZpcnN0T3AuYml0bWFwKTsKKyAgICBpZiAoIXRleHR1cmUpIHJldHVybjsKKyAgICBjb25zdCBBdXRvVGV4dHVyZSBhdXRvQ2xlYW51cCh0ZXh0dXJlKTsKKworICAgIC8vIDkgcGF0Y2hlcyBhcmUgYnVpbHQgZm9yIHN0cmV0Y2hpbmcgLSBhbHdheXMgZmlsdGVyCisgICAgaW50IHRleHR1cmVGaWxsRmxhZ3MgPSBUZXh0dXJlRmlsbEZsYWdzOjpGb3JjZUZpbHRlcjsKKyAgICBpZiAoZmlyc3RPcC5iaXRtYXAtPmNvbG9yVHlwZSgpID09IGtBbHBoYV84X1NrQ29sb3JUeXBlKSB7CisgICAgICAgIHRleHR1cmVGaWxsRmxhZ3MgfD0gVGV4dHVyZUZpbGxGbGFnczo6SXNBbHBoYU1hc2tUZXh0dXJlOworICAgIH0KKyAgICBHbG9wIGdsb3A7CisgICAgR2xvcEJ1aWxkZXIocmVuZGVyZXIucmVuZGVyU3RhdGUoKSwgcmVuZGVyZXIuY2FjaGVzKCksICZnbG9wKQorICAgICAgICAgICAgLnNldFJvdW5kUmVjdENsaXBTdGF0ZShmaXJzdFN0YXRlLnJvdW5kUmVjdENsaXBTdGF0ZSkKKyAgICAgICAgICAgIC5zZXRNZXNoVGV4dHVyZWRJbmRleGVkUXVhZHModmVydGljZXMsIGluZGV4Q291bnQpCisgICAgICAgICAgICAuc2V0RmlsbFRleHR1cmVQYWludCgqdGV4dHVyZSwgdGV4dHVyZUZpbGxGbGFncywgZmlyc3RPcC5wYWludCwgZmlyc3RTdGF0ZS5hbHBoYSkKKyAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3SWRlbnRpdHlFbXB0eUJvdW5kcygpCisgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICBDbGlwUmVjdCByZW5kZXJUYXJnZXRDbGlwKG9wTGlzdC5jbGlwKTsKKyAgICBjb25zdCBDbGlwQmFzZSogY2xpcCA9IG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJnJlbmRlclRhcmdldENsaXAgOiBudWxscHRyOworICAgIHJlbmRlcmVyLnJlbmRlckdsb3AobnVsbHB0ciwgY2xpcCwgZ2xvcCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbmRlclRleHRTaGFkb3coQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgRm9udFJlbmRlcmVyJiBmb250UmVuZGVyZXIsCkBAIC0xMjMsNyArMjI4LDcgQEAKIH07CiAKIHN0YXRpYyB2b2lkIHJlbmRlclRleHRPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBUZXh0T3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlLAotICAgICAgICBjb25zdCBSZWN0KiByZW5kZXJDbGlwLCBUZXh0UmVuZGVyVHlwZSByZW5kZXJUeXBlKSB7CisgICAgICAgIGNvbnN0IENsaXBCYXNlKiByZW5kZXJDbGlwLCBUZXh0UmVuZGVyVHlwZSByZW5kZXJUeXBlKSB7CiAgICAgRm9udFJlbmRlcmVyJiBmb250UmVuZGVyZXIgPSByZW5kZXJlci5jYWNoZXMoKS5mb250UmVuZGVyZXIuZ2V0Rm9udFJlbmRlcmVyKCk7CiAKICAgICBpZiAoQ0NfVU5MSUtFTFkoUGFpbnRVdGlsczo6aGFzVGV4dFNoYWRvdyhvcC5wYWludCkpKSB7CkBAIC0xNzEsNyArMjc2LDcgQEAKIAogICAgIGJvb2wgZm9yY2VGaW5pc2ggPSAocmVuZGVyVHlwZSA9PSBUZXh0UmVuZGVyVHlwZTo6Rmx1c2gpOwogICAgIGJvb2wgbXVzdERpcnR5UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIub2Zmc2NyZWVuUmVuZGVyVGFyZ2V0KCk7Ci0gICAgY29uc3QgUmVjdCogbG9jYWxPcENsaXAgPSBwdXJlVHJhbnNsYXRlID8gJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QgOiBudWxscHRyOworICAgIGNvbnN0IFJlY3QqIGxvY2FsT3BDbGlwID0gcHVyZVRyYW5zbGF0ZSA/ICZzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkgOiBudWxscHRyOwogICAgIGZvbnRSZW5kZXJlci5yZW5kZXJQb3NUZXh0KG9wLnBhaW50LCBsb2NhbE9wQ2xpcCwKICAgICAgICAgICAgIChjb25zdCBjaGFyKikgb3AuZ2x5cGhzLCBvcC5nbHlwaENvdW50LCB4LCB5LAogICAgICAgICAgICAgb3AucG9zaXRpb25zLCBtdXN0RGlydHlSZW5kZXJUYXJnZXQgPyAmbGF5ZXJCb3VuZHMgOiBudWxscHRyLCAmZnVuY3RvciwgZm9yY2VGaW5pc2gpOwpAQCAtMTg2LDcgKzI5MSw4IEBACiAKIHZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uTWVyZ2VkVGV4dE9wcyhCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLAogICAgICAgICBjb25zdCBNZXJnZWRCYWtlZE9wTGlzdCYgb3BMaXN0KSB7Ci0gICAgY29uc3QgUmVjdCogY2xpcCA9IG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJm9wTGlzdC5jbGlwIDogbnVsbHB0cjsKKyAgICBDbGlwUmVjdCByZW5kZXJUYXJnZXRDbGlwKG9wTGlzdC5jbGlwKTsKKyAgICBjb25zdCBDbGlwQmFzZSogY2xpcCA9IG9wTGlzdC5jbGlwU2lkZUZsYWdzID8gJnJlbmRlclRhcmdldENsaXAgOiBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3BMaXN0LmNvdW50OyBpKyspIHsKICAgICAgICAgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSA9ICoob3BMaXN0LnN0YXRlc1tpXSk7CiAgICAgICAgIGNvbnN0IFRleHRPcCYgb3AgPSAqKHN0YXRpY19jYXN0PGNvbnN0IFRleHRPcCo+KHN0YXRlLm9wKSk7CkBAIC0xOTYsMTggKzMwMiw2IEBACiAgICAgfQogfQogCi12b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvblJlbmRlck5vZGVPcChCYWtlZE9wUmVuZGVyZXImLCBjb25zdCBSZW5kZXJOb2RlT3AmLCBjb25zdCBCYWtlZE9wU3RhdGUmKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQgb3BlcmF0aW9uIik7Ci19Ci0KLXZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uQmVnaW5MYXllck9wKEJha2VkT3BSZW5kZXJlciYsIGNvbnN0IEJlZ2luTGF5ZXJPcCYsIGNvbnN0IEJha2VkT3BTdGF0ZSYpIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJ1bnN1cHBvcnRlZCBvcGVyYXRpb24iKTsKLX0KLQotdm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25FbmRMYXllck9wKEJha2VkT3BSZW5kZXJlciYsIGNvbnN0IEVuZExheWVyT3AmLCBjb25zdCBCYWtlZE9wU3RhdGUmKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQgb3BlcmF0aW9uIik7Ci19Ci0KIG5hbWVzcGFjZSBWZXJ0ZXhCdWZmZXJSZW5kZXJGbGFncyB7CiAgICAgZW51bSB7CiAgICAgICAgIE9mZnNldCA9IDB4MSwKQEAgLTI0NCw4ICszMzgsOCBAQAogc3RhdGljIHZvaWQgcmVuZGVyUGF0aFRleHR1cmUoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSwKICAgICAgICAgUGF0aFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IFJlY29yZGVkT3AmIG9wKSB7CiAgICAgUmVjdCBkZXN0KHRleHR1cmUud2lkdGgsIHRleHR1cmUuaGVpZ2h0KTsKLSAgICBkZXN0LnRyYW5zbGF0ZSh0ZXh0dXJlLmxlZnQgKyBvcC51bm1hcHBlZEJvdW5kcy5sZWZ0IC0gdGV4dHVyZS5vZmZzZXQsCi0gICAgICAgICAgICB0ZXh0dXJlLnRvcCArIG9wLnVubWFwcGVkQm91bmRzLnRvcCAtIHRleHR1cmUub2Zmc2V0KTsKKyAgICBkZXN0LnRyYW5zbGF0ZSh0ZXh0dXJlLmxlZnQgLSB0ZXh0dXJlLm9mZnNldCwKKyAgICAgICAgICAgIHRleHR1cmUudG9wIC0gdGV4dHVyZS5vZmZzZXQpOwogICAgIEdsb3AgZ2xvcDsKICAgICBHbG9wQnVpbGRlcihyZW5kZXJlci5yZW5kZXJTdGF0ZSgpLCByZW5kZXJlci5jYWNoZXMoKSwgJmdsb3ApCiAgICAgICAgICAgICAuc2V0Um91bmRSZWN0Q2xpcFN0YXRlKHN0YXRlLnJvdW5kUmVjdENsaXBTdGF0ZSkKQEAgLTMwNSwxMSArMzk5LDExNCBAQAogICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZFVuaXRRdWFkKHRleHR1cmUtPnV2TWFwcGVyKQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIG9wLnBhaW50LCBzdGF0ZS5hbHBoYSkKICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0sIFRyYW5zZm9ybUZsYWdzOjpOb25lKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld01hcFVuaXRUb1JlY3RTbmFwKFJlY3QoMCwgMCwgdGV4dHVyZS0+d2lkdGgsIHRleHR1cmUtPmhlaWdodCkpCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3TWFwVW5pdFRvUmVjdFNuYXAoUmVjdCh0ZXh0dXJlLT53aWR0aCwgdGV4dHVyZS0+aGVpZ2h0KSkKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgIHJlbmRlcmVyLnJlbmRlckdsb3Aoc3RhdGUsIGdsb3ApOwogfQogCit2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbkJpdG1hcE1lc2hPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBCaXRtYXBNZXNoT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7CisgICAgY29uc3Qgc3RhdGljIFV2TWFwcGVyIGRlZmF1bHRVdk1hcHBlcjsKKyAgICBjb25zdCB1aW50MzJfdCBlbGVtZW50Q291bnQgPSBvcC5tZXNoV2lkdGggKiBvcC5tZXNoSGVpZ2h0ICogNjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb2xvclRleHR1cmVWZXJ0ZXhbXT4gbWVzaChuZXcgQ29sb3JUZXh0dXJlVmVydGV4W2VsZW1lbnRDb3VudF0pOworICAgIENvbG9yVGV4dHVyZVZlcnRleCogdmVydGV4ID0gJm1lc2hbMF07CisKKyAgICBjb25zdCBpbnQqIGNvbG9ycyA9IG9wLmNvbG9yczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8aW50W10+IHRlbXBDb2xvcnM7CisgICAgaWYgKCFjb2xvcnMpIHsKKyAgICAgICAgdWludDMyX3QgY29sb3JzQ291bnQgPSAob3AubWVzaFdpZHRoICsgMSkgKiAob3AubWVzaEhlaWdodCArIDEpOworICAgICAgICB0ZW1wQ29sb3JzLnJlc2V0KG5ldyBpbnRbY29sb3JzQ291bnRdKTsKKyAgICAgICAgbWVtc2V0KHRlbXBDb2xvcnMuZ2V0KCksIDB4ZmYsIGNvbG9yc0NvdW50ICogc2l6ZW9mKGludCkpOworICAgICAgICBjb2xvcnMgPSB0ZW1wQ29sb3JzLmdldCgpOworICAgIH0KKworICAgIFRleHR1cmUqIHRleHR1cmUgPSByZW5kZXJlci5yZW5kZXJTdGF0ZSgpLmFzc2V0QXRsYXMoKS5nZXRFbnRyeVRleHR1cmUob3AuYml0bWFwLT5waXhlbFJlZigpKTsKKyAgICBjb25zdCBVdk1hcHBlciYgbWFwcGVyKHRleHR1cmUgJiYgdGV4dHVyZS0+dXZNYXBwZXIgPyAqdGV4dHVyZS0+dXZNYXBwZXIgOiBkZWZhdWx0VXZNYXBwZXIpOworCisgICAgZm9yIChpbnQzMl90IHkgPSAwOyB5IDwgb3AubWVzaEhlaWdodDsgeSsrKSB7CisgICAgICAgIGZvciAoaW50MzJfdCB4ID0gMDsgeCA8IG9wLm1lc2hXaWR0aDsgeCsrKSB7CisgICAgICAgICAgICB1aW50MzJfdCBpID0gKHkgKiAob3AubWVzaFdpZHRoICsgMSkgKyB4KSAqIDI7CisKKyAgICAgICAgICAgIGZsb2F0IHUxID0gZmxvYXQoeCkgLyBvcC5tZXNoV2lkdGg7CisgICAgICAgICAgICBmbG9hdCB1MiA9IGZsb2F0KHggKyAxKSAvIG9wLm1lc2hXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IHYxID0gZmxvYXQoeSkgLyBvcC5tZXNoSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgdjIgPSBmbG9hdCh5ICsgMSkgLyBvcC5tZXNoSGVpZ2h0OworCisgICAgICAgICAgICBtYXBwZXIubWFwKHUxLCB2MSwgdTIsIHYyKTsKKworICAgICAgICAgICAgaW50IGF4ID0gaSArIChvcC5tZXNoV2lkdGggKyAxKSAqIDI7CisgICAgICAgICAgICBpbnQgYXkgPSBheCArIDE7CisgICAgICAgICAgICBpbnQgYnggPSBpOworICAgICAgICAgICAgaW50IGJ5ID0gYnggKyAxOworICAgICAgICAgICAgaW50IGN4ID0gaSArIDI7CisgICAgICAgICAgICBpbnQgY3kgPSBjeCArIDE7CisgICAgICAgICAgICBpbnQgZHggPSBpICsgKG9wLm1lc2hXaWR0aCArIDEpICogMiArIDI7CisgICAgICAgICAgICBpbnQgZHkgPSBkeCArIDE7CisKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiB2ZXJ0aWNlcyA9IG9wLnZlcnRpY2VzOworICAgICAgICAgICAgQ29sb3JUZXh0dXJlVmVydGV4OjpzZXQodmVydGV4KyssIHZlcnRpY2VzW2R4XSwgdmVydGljZXNbZHldLCB1MiwgdjIsIGNvbG9yc1tkeCAvIDJdKTsKKyAgICAgICAgICAgIENvbG9yVGV4dHVyZVZlcnRleDo6c2V0KHZlcnRleCsrLCB2ZXJ0aWNlc1theF0sIHZlcnRpY2VzW2F5XSwgdTEsIHYyLCBjb2xvcnNbYXggLyAyXSk7CisgICAgICAgICAgICBDb2xvclRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgrKywgdmVydGljZXNbYnhdLCB2ZXJ0aWNlc1tieV0sIHUxLCB2MSwgY29sb3JzW2J4IC8gMl0pOworCisgICAgICAgICAgICBDb2xvclRleHR1cmVWZXJ0ZXg6OnNldCh2ZXJ0ZXgrKywgdmVydGljZXNbZHhdLCB2ZXJ0aWNlc1tkeV0sIHUyLCB2MiwgY29sb3JzW2R4IC8gMl0pOworICAgICAgICAgICAgQ29sb3JUZXh0dXJlVmVydGV4OjpzZXQodmVydGV4KyssIHZlcnRpY2VzW2J4XSwgdmVydGljZXNbYnldLCB1MSwgdjEsIGNvbG9yc1tieCAvIDJdKTsKKyAgICAgICAgICAgIENvbG9yVGV4dHVyZVZlcnRleDo6c2V0KHZlcnRleCsrLCB2ZXJ0aWNlc1tjeF0sIHZlcnRpY2VzW2N5XSwgdTIsIHYxLCBjb2xvcnNbY3ggLyAyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZSA9IHJlbmRlcmVyLmNhY2hlcygpLnRleHR1cmVDYWNoZS5nZXQob3AuYml0bWFwKTsKKyAgICAgICAgaWYgKCF0ZXh0dXJlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3QgQXV0b1RleHR1cmUgYXV0b0NsZWFudXAodGV4dHVyZSk7CisKKyAgICAvKgorICAgICAqIFRPRE86IGhhbmRsZSBhbHBoYV84IHRleHR1cmVzIGNvcnJlY3RseSBieSBhcHBseWluZyBwYWludCBjb2xvciwgYnV0ICpub3QqCisgICAgICogc2hhZGVyIGluIHRoYXQgY2FzZSB0byBtaW1pYyB0aGUgYmVoYXZpb3IgaW4gU2tpYUNhbnZhczo6ZHJhd0JpdG1hcE1lc2guCisgICAgICovCisgICAgY29uc3QgaW50IHRleHR1cmVGaWxsRmxhZ3MgPSBUZXh0dXJlRmlsbEZsYWdzOjpOb25lOworICAgIEdsb3AgZ2xvcDsKKyAgICBHbG9wQnVpbGRlcihyZW5kZXJlci5yZW5kZXJTdGF0ZSgpLCByZW5kZXJlci5jYWNoZXMoKSwgJmdsb3ApCisgICAgICAgICAgICAuc2V0Um91bmRSZWN0Q2xpcFN0YXRlKHN0YXRlLnJvdW5kUmVjdENsaXBTdGF0ZSkKKyAgICAgICAgICAgIC5zZXRNZXNoQ29sb3JlZFRleHR1cmVkTWVzaChtZXNoLmdldCgpLCBlbGVtZW50Q291bnQpCisgICAgICAgICAgICAuc2V0RmlsbFRleHR1cmVQYWludCgqdGV4dHVyZSwgdGV4dHVyZUZpbGxGbGFncywgb3AucGFpbnQsIHN0YXRlLmFscGhhKQorICAgICAgICAgICAgLnNldFRyYW5zZm9ybShzdGF0ZS5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybSwgIFRyYW5zZm9ybUZsYWdzOjpOb25lKQorICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3QoMCwgMCwgb3AudW5tYXBwZWRCb3VuZHMpCisgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICByZW5kZXJlci5yZW5kZXJHbG9wKHN0YXRlLCBnbG9wKTsKK30KKwordm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25CaXRtYXBSZWN0T3AoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgQml0bWFwUmVjdE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeworICAgIFRleHR1cmUqIHRleHR1cmUgPSByZW5kZXJlci5nZXRUZXh0dXJlKG9wLmJpdG1hcCk7CisgICAgaWYgKCF0ZXh0dXJlKSByZXR1cm47CisgICAgY29uc3QgQXV0b1RleHR1cmUgYXV0b0NsZWFudXAodGV4dHVyZSk7CisKKyAgICBSZWN0IHV2KHN0ZDo6bWF4KDAuMGYsIG9wLnNyYy5sZWZ0IC8gdGV4dHVyZS0+d2lkdGgpLAorICAgICAgICAgICAgc3RkOjptYXgoMC4wZiwgb3Auc3JjLnRvcCAvIHRleHR1cmUtPmhlaWdodCksCisgICAgICAgICAgICBzdGQ6Om1pbigxLjBmLCBvcC5zcmMucmlnaHQgLyB0ZXh0dXJlLT53aWR0aCksCisgICAgICAgICAgICBzdGQ6Om1pbigxLjBmLCBvcC5zcmMuYm90dG9tIC8gdGV4dHVyZS0+aGVpZ2h0KSk7CisKKyAgICBjb25zdCBpbnQgdGV4dHVyZUZpbGxGbGFncyA9IChvcC5iaXRtYXAtPmNvbG9yVHlwZSgpID09IGtBbHBoYV84X1NrQ29sb3JUeXBlKQorICAgICAgICAgICAgPyBUZXh0dXJlRmlsbEZsYWdzOjpJc0FscGhhTWFza1RleHR1cmUgOiBUZXh0dXJlRmlsbEZsYWdzOjpOb25lOworICAgIGNvbnN0IGJvb2wgdHJ5VG9TbmFwID0gTWF0aFV0aWxzOjphcmVFcXVhbChvcC5zcmMuZ2V0V2lkdGgoKSwgb3AudW5tYXBwZWRCb3VuZHMuZ2V0V2lkdGgoKSkKKyAgICAgICAgICAgICYmIE1hdGhVdGlsczo6YXJlRXF1YWwob3Auc3JjLmdldEhlaWdodCgpLCBvcC51bm1hcHBlZEJvdW5kcy5nZXRIZWlnaHQoKSk7CisgICAgR2xvcCBnbG9wOworICAgIEdsb3BCdWlsZGVyKHJlbmRlcmVyLnJlbmRlclN0YXRlKCksIHJlbmRlcmVyLmNhY2hlcygpLCAmZ2xvcCkKKyAgICAgICAgICAgIC5zZXRSb3VuZFJlY3RDbGlwU3RhdGUoc3RhdGUucm91bmRSZWN0Q2xpcFN0YXRlKQorICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZFV2UXVhZCh0ZXh0dXJlLT51dk1hcHBlciwgdXYpCisgICAgICAgICAgICAuc2V0RmlsbFRleHR1cmVQYWludCgqdGV4dHVyZSwgdGV4dHVyZUZpbGxGbGFncywgb3AucGFpbnQsIHN0YXRlLmFscGhhKQorICAgICAgICAgICAgLnNldFRyYW5zZm9ybShzdGF0ZS5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3TWFwVW5pdFRvUmVjdE9wdGlvbmFsU25hcCh0cnlUb1NuYXAsIG9wLnVubWFwcGVkQm91bmRzKQorICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgcmVuZGVyZXIucmVuZGVyR2xvcChzdGF0ZSwgZ2xvcCk7Cit9CisKK3ZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uRnVuY3Rvck9wKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IEZ1bmN0b3JPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKKyAgICByZW5kZXJlci5yZW5kZXJGdW5jdG9yKG9wLCBzdGF0ZSk7Cit9CisKIHZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uTGluZXNPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBMaW5lc09wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgewogICAgIFZlcnRleEJ1ZmZlciBidWZmZXI7CiAgICAgUGF0aFRlc3NlbGxhdG9yOjp0ZXNzZWxsYXRlTGluZXMob3AucG9pbnRzLCBvcC5mbG9hdENvdW50LCBvcC5wYWludCwKQEAgLTMzNCw2ICs1MzEsMzUgQEAKICAgICB9CiB9CiAKK3ZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uUGF0Y2hPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBQYXRjaE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeworICAgIC8vIDkgcGF0Y2hlcyBhcmUgYnVpbHQgZm9yIHN0cmV0Y2hpbmcgLSBhbHdheXMgZmlsdGVyCisgICAgaW50IHRleHR1cmVGaWxsRmxhZ3MgPSBUZXh0dXJlRmlsbEZsYWdzOjpGb3JjZUZpbHRlcjsKKyAgICBpZiAob3AuYml0bWFwLT5jb2xvclR5cGUoKSA9PSBrQWxwaGFfOF9Ta0NvbG9yVHlwZSkgeworICAgICAgICB0ZXh0dXJlRmlsbEZsYWdzIHw9IFRleHR1cmVGaWxsRmxhZ3M6OklzQWxwaGFNYXNrVGV4dHVyZTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBhdm9pZCByZWRvaW5nIHRoZSBiZWxvdyB3b3JrIGVhY2ggZnJhbWU6CisgICAgQXNzZXRBdGxhczo6RW50cnkqIGVudHJ5ID0gcmVuZGVyZXIucmVuZGVyU3RhdGUoKS5hc3NldEF0bGFzKCkuZ2V0RW50cnkob3AuYml0bWFwLT5waXhlbFJlZigpKTsKKyAgICBjb25zdCBQYXRjaCogbWVzaCA9IHJlbmRlcmVyLmNhY2hlcygpLnBhdGNoQ2FjaGUuZ2V0KAorICAgICAgICAgICAgZW50cnksIG9wLmJpdG1hcC0+d2lkdGgoKSwgb3AuYml0bWFwLT5oZWlnaHQoKSwKKyAgICAgICAgICAgIG9wLnVubWFwcGVkQm91bmRzLmdldFdpZHRoKCksIG9wLnVubWFwcGVkQm91bmRzLmdldEhlaWdodCgpLCBvcC5wYXRjaCk7CisKKyAgICBUZXh0dXJlKiB0ZXh0dXJlID0gZW50cnkgPyBlbnRyeS0+dGV4dHVyZSA6IHJlbmRlcmVyLmNhY2hlcygpLnRleHR1cmVDYWNoZS5nZXQob3AuYml0bWFwKTsKKyAgICBpZiAoQ0NfTElLRUxZKHRleHR1cmUpKSB7CisgICAgICAgIGNvbnN0IEF1dG9UZXh0dXJlIGF1dG9DbGVhbnVwKHRleHR1cmUpOworICAgICAgICBHbG9wIGdsb3A7CisgICAgICAgIEdsb3BCdWlsZGVyKHJlbmRlcmVyLnJlbmRlclN0YXRlKCksIHJlbmRlcmVyLmNhY2hlcygpLCAmZ2xvcCkKKyAgICAgICAgICAgICAgICAuc2V0Um91bmRSZWN0Q2xpcFN0YXRlKHN0YXRlLnJvdW5kUmVjdENsaXBTdGF0ZSkKKyAgICAgICAgICAgICAgICAuc2V0TWVzaFBhdGNoUXVhZHMoKm1lc2gpCisgICAgICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIG9wLnBhaW50LCBzdGF0ZS5hbHBoYSkKKyAgICAgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLCBUcmFuc2Zvcm1GbGFnczo6Tm9uZSkKKyAgICAgICAgICAgICAgICAuc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdFNuYXAob3AudW5tYXBwZWRCb3VuZHMubGVmdCwgb3AudW5tYXBwZWRCb3VuZHMudG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgUmVjdChvcC51bm1hcHBlZEJvdW5kcy5nZXRXaWR0aCgpLCBvcC51bm1hcHBlZEJvdW5kcy5nZXRIZWlnaHQoKSkpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgICAgIHJlbmRlcmVyLnJlbmRlckdsb3Aoc3RhdGUsIGdsb3ApOworICAgIH0KK30KKwogdm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25QYXRoT3AoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgUGF0aE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgewogICAgIFBhdGhUZXh0dXJlKiB0ZXh0dXJlID0gcmVuZGVyZXIuY2FjaGVzKCkucGF0aENhY2hlLmdldChvcC5wYXRoLCBvcC5wYWludCk7CiAgICAgY29uc3QgQXV0b1RleHR1cmUgaG9sZGVyKHRleHR1cmUpOwpAQCAtNDYwLDEzICs2ODYsNTcgQEAKIH0KIAogdm9pZCBCYWtlZE9wRGlzcGF0Y2hlcjo6b25UZXh0T3AoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgVGV4dE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgewotICAgIGNvbnN0IFJlY3QqIGNsaXAgPSBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3MgPyAmc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCA6IG51bGxwdHI7Ci0gICAgcmVuZGVyVGV4dE9wKHJlbmRlcmVyLCBvcCwgc3RhdGUsIGNsaXAsIFRleHRSZW5kZXJUeXBlOjpGbHVzaCk7CisgICAgcmVuZGVyVGV4dE9wKHJlbmRlcmVyLCBvcCwgc3RhdGUsIHN0YXRlLmNvbXB1dGVkU3RhdGUuZ2V0Q2xpcElmTmVlZGVkKCksIFRleHRSZW5kZXJUeXBlOjpGbHVzaCk7Cit9CisKK3ZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uVGV4dE9uUGF0aE9wKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IFRleHRPblBhdGhPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKKyAgICAvLyBOb3RlOiBjYW4ndCB0cnVzdCBjbGlwU2lkZUZsYWdzIHNpbmNlIHdlIHJlY29yZCB3aXRoIHVubWFwcGVkQm91bmRzID09IGNsaXAuCisgICAgLy8gVE9ETzogcmVzcGVjdCBjbGlwU2lkZUZsYWdzLCBvbmNlIHdlIHJlY29yZCB3aXRoIGJvdW5kcworICAgIGF1dG8gcmVuZGVyVGFyZ2V0Q2xpcCA9IHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFN0YXRlOworCisgICAgRm9udFJlbmRlcmVyJiBmb250UmVuZGVyZXIgPSByZW5kZXJlci5jYWNoZXMoKS5mb250UmVuZGVyZXIuZ2V0Rm9udFJlbmRlcmVyKCk7CisgICAgZm9udFJlbmRlcmVyLnNldEZvbnQob3AucGFpbnQsIFNrTWF0cml4OjpJKCkpOworICAgIGZvbnRSZW5kZXJlci5zZXRUZXh0dXJlRmlsdGVyaW5nKHRydWUpOworCisgICAgUmVjdCBsYXllckJvdW5kcyhGTFRfTUFYIC8gMi4wZiwgRkxUX01BWCAvIDIuMGYsIEZMVF9NSU4gLyAyLjBmLCBGTFRfTUlOIC8gMi4wZik7CisKKyAgICBpbnQgYWxwaGEgPSBQYWludFV0aWxzOjpnZXRBbHBoYURpcmVjdChvcC5wYWludCkgKiBzdGF0ZS5hbHBoYTsKKyAgICBTa1hmZXJtb2RlOjpNb2RlIG1vZGUgPSBQYWludFV0aWxzOjpnZXRYZmVybW9kZURpcmVjdChvcC5wYWludCk7CisgICAgVGV4dERyYXdGdW5jdG9yIGZ1bmN0b3IoJnJlbmRlcmVyLCAmc3RhdGUsIHJlbmRlclRhcmdldENsaXAsCisgICAgICAgICAgICAwLjBmLCAwLjBmLCBmYWxzZSwgYWxwaGEsIG1vZGUsIG9wLnBhaW50KTsKKworICAgIGJvb2wgbXVzdERpcnR5UmVuZGVyVGFyZ2V0ID0gcmVuZGVyZXIub2Zmc2NyZWVuUmVuZGVyVGFyZ2V0KCk7CisgICAgY29uc3QgUmVjdCBsb2NhbFNwYWNlQ2xpcCA9IHN0YXRlLmNvbXB1dGVkU3RhdGUuY29tcHV0ZUxvY2FsU3BhY2VDbGlwKCk7CisgICAgaWYgKGZvbnRSZW5kZXJlci5yZW5kZXJUZXh0T25QYXRoKG9wLnBhaW50LCAmbG9jYWxTcGFjZUNsaXAsCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihvcC5nbHlwaHMpLCBvcC5nbHlwaENvdW50LAorICAgICAgICAgICAgb3AucGF0aCwgb3AuaE9mZnNldCwgb3Audk9mZnNldCwKKyAgICAgICAgICAgIG11c3REaXJ0eVJlbmRlclRhcmdldCA/ICZsYXllckJvdW5kcyA6IG51bGxwdHIsICZmdW5jdG9yKSkgeworICAgICAgICBpZiAobXVzdERpcnR5UmVuZGVyVGFyZ2V0KSB7CisgICAgICAgICAgICAvLyBtYW51YWxseSBkaXJ0eSByZW5kZXIgdGFyZ2V0LCBzaW5jZSBUZXh0RHJhd0Z1bmN0b3Igd29uJ3QKKyAgICAgICAgICAgIHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLm1hcFJlY3QobGF5ZXJCb3VuZHMpOworICAgICAgICAgICAgcmVuZGVyZXIuZGlydHlSZW5kZXJUYXJnZXQobGF5ZXJCb3VuZHMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvblRleHR1cmVMYXllck9wKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IFRleHR1cmVMYXllck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeworICAgIGNvbnN0IGJvb2wgdHJ5VG9TbmFwID0gIW9wLmxheWVyLT5nZXRGb3JjZUZpbHRlcigpOworICAgIGZsb2F0IGFscGhhID0gKG9wLmxheWVyLT5nZXRBbHBoYSgpIC8gMjU1LjBmKSAqIHN0YXRlLmFscGhhOworICAgIEdsb3AgZ2xvcDsKKyAgICBHbG9wQnVpbGRlcihyZW5kZXJlci5yZW5kZXJTdGF0ZSgpLCByZW5kZXJlci5jYWNoZXMoKSwgJmdsb3ApCisgICAgICAgICAgICAuc2V0Um91bmRSZWN0Q2xpcFN0YXRlKHN0YXRlLnJvdW5kUmVjdENsaXBTdGF0ZSkKKyAgICAgICAgICAgIC5zZXRNZXNoVGV4dHVyZWRVdlF1YWQobnVsbHB0ciwgUmVjdCgwLCAxLCAxLCAwKSkgLy8gVE9ETzogc2ltcGxpZnkgd2l0aCBWQk8KKyAgICAgICAgICAgIC5zZXRGaWxsVGV4dHVyZUxheWVyKCoob3AubGF5ZXIpLCBhbHBoYSkKKyAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0sIFRyYW5zZm9ybUZsYWdzOjpOb25lKQorICAgICAgICAgICAgLnNldE1vZGVsVmlld01hcFVuaXRUb1JlY3RPcHRpb25hbFNuYXAodHJ5VG9TbmFwLCBSZWN0KG9wLmxheWVyLT5nZXRXaWR0aCgpLCBvcC5sYXllci0+Z2V0SGVpZ2h0KCkpKQorICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgcmVuZGVyZXIucmVuZGVyR2xvcChzdGF0ZSwgZ2xvcCk7CiB9CiAKIHZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uTGF5ZXJPcChCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBMYXllck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgewogICAgIE9mZnNjcmVlbkJ1ZmZlciogYnVmZmVyID0gKm9wLmxheWVySGFuZGxlOwogCisgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IHVzZSBvcC0+cGFpbnQgaGVyZSAtIGl0J3MgbmV2ZXIgc2V0IG9uIGEgTGF5ZXJPcAogICAgIGZsb2F0IGxheWVyQWxwaGEgPSBvcC5hbHBoYSAqIHN0YXRlLmFscGhhOwogICAgIEdsb3AgZ2xvcDsKICAgICBHbG9wQnVpbGRlcihyZW5kZXJlci5yZW5kZXJTdGF0ZSgpLCByZW5kZXJlci5jYWNoZXMoKSwgJmdsb3ApCkBAIC00ODQsNSArNzU0LDM3IEBACiAgICAgfQogfQogCit2b2lkIEJha2VkT3BEaXNwYXRjaGVyOjpvbkNvcHlUb0xheWVyT3AoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgQ29weVRvTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKCoob3AubGF5ZXJIYW5kbGUpICE9IG51bGxwdHIsICJsYXllciBhbHJlYWR5IGV4aXN0cyEiKTsKKyAgICAqKG9wLmxheWVySGFuZGxlKSA9IHJlbmRlcmVyLmNvcHlUb0xheWVyKHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CisgICAgTE9HX0FMV0FZU19GQVRBTF9JRigqb3AubGF5ZXJIYW5kbGUgPT0gbnVsbHB0ciwgImxheWVyIGNvcHkgZmFpbGVkIik7Cit9CisKK3ZvaWQgQmFrZWRPcERpc3BhdGNoZXI6Om9uQ29weUZyb21MYXllck9wKEJha2VkT3BSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IENvcHlGcm9tTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKCpvcC5sYXllckhhbmRsZSA9PSBudWxscHRyLCAibm8gbGF5ZXIgdG8gZHJhdyB1bmRlcm5lYXRoISIpOworICAgIGlmICghc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAob3AucGFpbnQgJiYgb3AucGFpbnQtPmdldEFscGhhKCkgPCAyNTUpIHsKKyAgICAgICAgICAgIFNrUGFpbnQgbGF5ZXJQYWludDsKKyAgICAgICAgICAgIGxheWVyUGFpbnQuc2V0QWxwaGEob3AucGFpbnQtPmdldEFscGhhKCkpOworICAgICAgICAgICAgbGF5ZXJQYWludC5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a0RzdEluX01vZGUpOworICAgICAgICAgICAgbGF5ZXJQYWludC5zZXRDb2xvckZpbHRlcihvcC5wYWludC0+Z2V0Q29sb3JGaWx0ZXIoKSk7CisgICAgICAgICAgICBSZWN0T3AgcmVjdE9wKHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcywgTWF0cml4NDo6aWRlbnRpdHkoKSwgbnVsbHB0ciwgJmxheWVyUGFpbnQpOworICAgICAgICAgICAgQmFrZWRPcERpc3BhdGNoZXI6Om9uUmVjdE9wKHJlbmRlcmVyLCByZWN0T3AsIHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIE9mZnNjcmVlbkJ1ZmZlciYgbGF5ZXIgPSAqKihvcC5sYXllckhhbmRsZSk7CisgICAgICAgIGF1dG8gbW9kZSA9IFBhaW50VXRpbHM6OmdldFhmZXJtb2RlRGlyZWN0KG9wLnBhaW50KTsKKyAgICAgICAgR2xvcCBnbG9wOworICAgICAgICBHbG9wQnVpbGRlcihyZW5kZXJlci5yZW5kZXJTdGF0ZSgpLCByZW5kZXJlci5jYWNoZXMoKSwgJmdsb3ApCisgICAgICAgICAgICAgICAgLnNldFJvdW5kUmVjdENsaXBTdGF0ZShzdGF0ZS5yb3VuZFJlY3RDbGlwU3RhdGUpCisgICAgICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZFV2UXVhZChudWxscHRyLCBsYXllci5nZXRUZXh0dXJlQ29vcmRpbmF0ZXMoKSkKKyAgICAgICAgICAgICAgICAuc2V0RmlsbExheWVyKGxheWVyLnRleHR1cmUsIG51bGxwdHIsIDEuMGYsIG1vZGUsIEJsZW5kOjpNb2RlT3JkZXJTd2FwOjpTd2FwKQorICAgICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0sIFRyYW5zZm9ybUZsYWdzOjpOb25lKQorICAgICAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdNYXBVbml0VG9SZWN0KHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcykKKyAgICAgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICAgICAgcmVuZGVyZXIucmVuZGVyR2xvcChzdGF0ZSwgZ2xvcCk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCiB9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQmFrZWRPcERpc3BhdGNoZXIuaCBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCmluZGV4IGVkMzRhZGEuLjRkZmRkM2YgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wRGlzcGF0Y2hlci5oCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgICAvLyBEZWNsYXJlcyBhbGwgIm9uTWVyZ2VkQml0bWFwT3BzKC4uLikiIHN0eWxlIG1ldGhvZHMgZm9yIG1lcmdlYWJsZSBvcCB0eXBlcwogI2RlZmluZSBYKFR5cGUpIFwKICAgICAgICAgc3RhdGljIHZvaWQgb25NZXJnZWQjI1R5cGUjI3MoQmFrZWRPcFJlbmRlcmVyJiByZW5kZXJlciwgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCk7Ci0gICAgTUFQX01FUkdFRF9PUFMoWCkKKyAgICBNQVBfTUVSR0VBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogICAgIC8vIERlY2xhcmVzIGFsbCAib25CaXRtYXBPcCguLi4pIiBzdHlsZSBtZXRob2RzIGZvciBldmVyeSBvcCB0eXBlCiAjZGVmaW5lIFgoVHlwZSkgXAogICAgICAgICBzdGF0aWMgdm9pZCBvbiMjVHlwZShCYWtlZE9wUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBUeXBlJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSk7Ci0gICAgTUFQX09QUyhYKQorICAgIE1BUF9SRU5ERVJBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogfTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9CYWtlZE9wUmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKaW5kZXggOTNhOTQwNi4uNDJmYjY2ZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5jcHAKQEAgLTYwLDI3ICs2MCw4MSBAQAogfQogCiB2b2lkIEJha2VkT3BSZW5kZXJlcjo6ZW5kTGF5ZXIoKSB7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQuc3RlbmNpbCkgeworICAgICAgICAvLyBpZiBzdGVuY2lsIHdhcyB1c2VkIGZvciBjbGlwcGluZywgZGV0YWNoIGl0IGFuZCByZXR1cm4gaXQgdG8gcG9vbAorICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQsIEdMX1JFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgIExPR19BTFdBWVNfRkFUQUxfSUYoR0xVdGlsczo6ZHVtcEdMRXJyb3JzKCksICJnbGZicmIgZW5kbGF5ZXIgZmFpbGVkIik7CisgICAgICAgIG1DYWNoZXMucmVuZGVyQnVmZmVyQ2FjaGUucHV0KG1SZW5kZXJUYXJnZXQuc3RlbmNpbCk7CisgICAgICAgIG1SZW5kZXJUYXJnZXQuc3RlbmNpbCA9IG51bGxwdHI7CisgICAgfQorICAgIG1SZW5kZXJUYXJnZXQubGFzdFN0ZW5jaWxDbGlwID0gbnVsbHB0cjsKKwogICAgIG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyLT51cGRhdGVNZXNoRnJvbVJlZ2lvbigpOwotICAgIG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtUmVuZGVyVGFyZ2V0Lm9mZnNjcmVlbkJ1ZmZlciA9IG51bGxwdHI7IC8vIEl0J3MgaW4gZHJhd0xheWVyT3AncyBoYW5kcyBub3cuCiAKICAgICAvLyBEZXRhY2ggdGhlIHRleHR1cmUgZnJvbSB0aGUgRkJPCiAgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIDAsIDApOwogICAgIExPR19BTFdBWVNfRkFUQUxfSUYoR0xVdGlsczo6ZHVtcEdMRXJyb3JzKCksICJlbmRMYXllciBGQUlMRUQiKTsKICAgICBtUmVuZGVyU3RhdGUuZGVsZXRlRnJhbWVidWZmZXIobVJlbmRlclRhcmdldC5mcmFtZUJ1ZmZlcklkKTsKLSAgICBtUmVuZGVyVGFyZ2V0LmZyYW1lQnVmZmVySWQgPSAtMTsKKyAgICBtUmVuZGVyVGFyZ2V0LmZyYW1lQnVmZmVySWQgPSAwOworfQorCitPZmZzY3JlZW5CdWZmZXIqIEJha2VkT3BSZW5kZXJlcjo6Y29weVRvTGF5ZXIoY29uc3QgUmVjdCYgYXJlYSkgeworICAgIE9mZnNjcmVlbkJ1ZmZlciogYnVmZmVyID0gbVJlbmRlclN0YXRlLmxheWVyUG9vbCgpLmdldChtUmVuZGVyU3RhdGUsCisgICAgICAgICAgICBhcmVhLmdldFdpZHRoKCksIGFyZWEuZ2V0SGVpZ2h0KCkpOworICAgIGlmICghYXJlYS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbUNhY2hlcy50ZXh0dXJlU3RhdGUoKS5hY3RpdmF0ZVRleHR1cmUoMCk7CisgICAgICAgIG1DYWNoZXMudGV4dHVyZVN0YXRlKCkuYmluZFRleHR1cmUoYnVmZmVyLT50ZXh0dXJlLmlkKTsKKworICAgICAgICBnbENvcHlUZXhTdWJJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgYXJlYS5sZWZ0LCBtUmVuZGVyVGFyZ2V0LnZpZXdwb3J0SGVpZ2h0IC0gYXJlYS5ib3R0b20sCisgICAgICAgICAgICAgICAgYXJlYS5nZXRXaWR0aCgpLCBhcmVhLmdldEhlaWdodCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAogdm9pZCBCYWtlZE9wUmVuZGVyZXI6OnN0YXJ0RnJhbWUodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIHsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKG1SZW5kZXJUYXJnZXQuZnJhbWVCdWZmZXJJZCAhPSAwLCAicHJpbWFyeSBmcmFtZWJ1ZmZlcklkIG11c3QgYmUgMCIpOwogICAgIG1SZW5kZXJTdGF0ZS5iaW5kRnJhbWVidWZmZXIoMCk7CiAgICAgc2V0Vmlld3BvcnQod2lkdGgsIGhlaWdodCk7Ci0gICAgbUNhY2hlcy5jbGVhckdhcmJhZ2UoKTsKIAogICAgIGlmICghbU9wYXF1ZSkgewogICAgICAgICBjbGVhckNvbG9yQnVmZmVyKHJlcGFpbnRSZWN0KTsKICAgICB9CisKKyAgICBtUmVuZGVyU3RhdGUuZGVidWdPdmVyZHJhdyh0cnVlLCB0cnVlKTsKIH0KIAotdm9pZCBCYWtlZE9wUmVuZGVyZXI6OmVuZEZyYW1lKCkgewordm9pZCBCYWtlZE9wUmVuZGVyZXI6OmVuZEZyYW1lKGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSB7CisgICAgaWYgKENDX1VOTElLRUxZKFByb3BlcnRpZXM6OmRlYnVnT3ZlcmRyYXcpKSB7CisgICAgICAgIENsaXBSZWN0IG92ZXJkcmF3Q2xpcChyZXBhaW50UmVjdCk7CisgICAgICAgIFJlY3Qgdmlld3BvcnRSZWN0KG1SZW5kZXJUYXJnZXQudmlld3BvcnRXaWR0aCwgbVJlbmRlclRhcmdldC52aWV3cG9ydEhlaWdodCk7CisgICAgICAgIC8vIG92ZXJkcmF3IHZpc3VhbGl6YXRpb24KKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gNDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaSA8IDQpIHsKKyAgICAgICAgICAgICAgICAvLyBudGggbGV2ZWwgb2Ygb3ZlcmRyYXcgdGVzdHMgZm9yIG4rMSBkcmF3cyBwZXIgcGl4ZWwKKyAgICAgICAgICAgICAgICBtUmVuZGVyU3RhdGUuc3RlbmNpbCgpLmVuYWJsZURlYnVnVGVzdChpICsgMSwgZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyA0dGggbGV2ZWwgdGVzdHMgZm9yIDQgb3IgaGlnaGVyIGRyYXdzIHBlciBwaXhlbAorICAgICAgICAgICAgICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZW5hYmxlRGVidWdUZXN0KDQsIHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTa1BhaW50IHBhaW50OworICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IobUNhY2hlcy5nZXRPdmVyZHJhd0NvbG9yKGkpKTsKKyAgICAgICAgICAgIEdsb3AgZ2xvcDsKKyAgICAgICAgICAgIEdsb3BCdWlsZGVyKG1SZW5kZXJTdGF0ZSwgbUNhY2hlcywgJmdsb3ApCisgICAgICAgICAgICAgICAgICAgIC5zZXRSb3VuZFJlY3RDbGlwU3RhdGUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAgICAgLnNldE1lc2hVbml0UXVhZCgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRGaWxsUGFpbnQocGFpbnQsIDEuMGYpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSwgVHJhbnNmb3JtRmxhZ3M6Ok5vbmUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdNYXBVbml0VG9SZWN0KHZpZXdwb3J0UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgICAgICAgICByZW5kZXJHbG9wKG51bGxwdHIsICZvdmVyZHJhd0NsaXAsIGdsb3ApOworICAgICAgICB9CisgICAgICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZGlzYWJsZSgpOworICAgIH0KKworICAgIG1DYWNoZXMuY2xlYXJHYXJiYWdlKCk7CiAgICAgbUNhY2hlcy5wYXRoQ2FjaGUudHJpbSgpOwogICAgIG1DYWNoZXMudGVzc2VsbGF0aW9uQ2FjaGUudHJpbSgpOwogCkBAIC0xMDcsNyArMTYxLDcgQEAKIH0KIAogdm9pZCBCYWtlZE9wUmVuZGVyZXI6OmNsZWFyQ29sb3JCdWZmZXIoY29uc3QgUmVjdCYgcmVjdCkgewotICAgIGlmIChSZWN0KG1SZW5kZXJUYXJnZXQudmlld3BvcnRXaWR0aCwgbVJlbmRlclRhcmdldC52aWV3cG9ydEhlaWdodCkuY29udGFpbnMocmVjdCkpIHsKKyAgICBpZiAocmVjdC5jb250YWlucyhSZWN0KG1SZW5kZXJUYXJnZXQudmlld3BvcnRXaWR0aCwgbVJlbmRlclRhcmdldC52aWV3cG9ydEhlaWdodCkpKSB7CiAgICAgICAgIC8vIEZ1bGwgdmlld3BvcnQgaXMgYmVpbmcgY2xlYXJlZCAtIGRpc2FibGUgc2Npc3NvcgogICAgICAgICBtUmVuZGVyU3RhdGUuc2Npc3NvcigpLnNldEVuYWJsZWQoZmFsc2UpOwogICAgIH0gZWxzZSB7CkBAIC0xMjgsMjIgKzE4MiwxNTYgQEAKICAgICByZXR1cm4gdGV4dHVyZTsKIH0KIAotdm9pZCBCYWtlZE9wUmVuZGVyZXI6OnJlbmRlckdsb3AoY29uc3QgUmVjdCogZGlydHlCb3VuZHMsIGNvbnN0IFJlY3QqIGNsaXAsIGNvbnN0IEdsb3AmIGdsb3ApIHsKKy8vIGNsZWFycyBhbmQgcmUtZmlsbHMgc3RlbmNpbCB3aXRoIHByb3ZpZGVkIHJlbmRlcnRhcmdldCBzcGFjZSBxdWFkcywKKy8vIGFuZCB0aGVuIHB1dCBzdGVuY2lsIGludG8gdGVzdCBtb2RlCit2b2lkIEJha2VkT3BSZW5kZXJlcjo6c2V0dXBTdGVuY2lsUXVhZHMoc3RkOjp2ZWN0b3I8VmVydGV4PiYgcXVhZFZlcnRpY2VzLAorICAgICAgICBpbnQgaW5jcmVtZW50VGhyZXNob2xkKSB7CisgICAgbVJlbmRlclN0YXRlLnN0ZW5jaWwoKS5lbmFibGVXcml0ZShpbmNyZW1lbnRUaHJlc2hvbGQpOworICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuY2xlYXIoKTsKKyAgICBHbG9wIGdsb3A7CisgICAgR2xvcEJ1aWxkZXIobVJlbmRlclN0YXRlLCBtQ2FjaGVzLCAmZ2xvcCkKKyAgICAgICAgICAgIC5zZXRSb3VuZFJlY3RDbGlwU3RhdGUobnVsbHB0cikKKyAgICAgICAgICAgIC5zZXRNZXNoSW5kZXhlZFF1YWRzKHF1YWRWZXJ0aWNlcy5kYXRhKCksIHF1YWRWZXJ0aWNlcy5zaXplKCkgLyA0KQorICAgICAgICAgICAgLnNldEZpbGxCbGFjaygpCisgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKE1hdHJpeDQ6OmlkZW50aXR5KCksIFRyYW5zZm9ybUZsYWdzOjpOb25lKQorICAgICAgICAgICAgLnNldE1vZGVsVmlld0lkZW50aXR5RW1wdHlCb3VuZHMoKQorICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgbVJlbmRlclN0YXRlLnJlbmRlcihnbG9wLCBtUmVuZGVyVGFyZ2V0Lm9ydGhvTWF0cml4KTsKKyAgICBtUmVuZGVyU3RhdGUuc3RlbmNpbCgpLmVuYWJsZVRlc3QoaW5jcmVtZW50VGhyZXNob2xkKTsKK30KKwordm9pZCBCYWtlZE9wUmVuZGVyZXI6OnNldHVwU3RlbmNpbFJlY3RMaXN0KGNvbnN0IENsaXBCYXNlKiBjbGlwKSB7CisgICAgTE9HX0FMV0FZU19GQVRBTF9JRihjbGlwLT5tb2RlICE9IENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0LCAiY2FuJ3QgcmVjdGxpc3QgY2xpcCB3aXRob3V0IHJlY3RsaXN0Iik7CisgICAgYXV0byYmIHJlY3RMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdExpc3QqPihjbGlwKS0+cmVjdExpc3Q7CisgICAgaW50IHF1YWRDb3VudCA9IHJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCk7CisgICAgc3RkOjp2ZWN0b3I8VmVydGV4PiByZWN0YW5nbGVWZXJ0aWNlczsKKyAgICByZWN0YW5nbGVWZXJ0aWNlcy5yZXNlcnZlKHF1YWRDb3VudCAqIDQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcXVhZENvdW50OyBpKyspIHsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtZWRSZWN0YW5nbGUmIHRyKHJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlKGkpKTsKKyAgICAgICAgY29uc3QgTWF0cml4NCYgdHJhbnNmb3JtID0gdHIuZ2V0VHJhbnNmb3JtKCk7CisgICAgICAgIFJlY3QgYm91bmRzID0gdHIuZ2V0Qm91bmRzKCk7CisgICAgICAgIGlmICh0cmFuc2Zvcm0ucmVjdFRvUmVjdCgpKSB7CisgICAgICAgICAgICAvLyBJZiByZWN0VG9SZWN0LCBjYW4gc2ltcGx5IG1hcCBib3VuZHMgYmVmb3JlIHN0b3JpbmcgdmVydHMKKyAgICAgICAgICAgIHRyYW5zZm9ybS5tYXBSZWN0KGJvdW5kcyk7CisgICAgICAgICAgICBib3VuZHMuZG9JbnRlcnNlY3QoY2xpcC0+cmVjdCk7CisgICAgICAgICAgICBpZiAoYm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyB3aWxsIGJlIG91dHNpZGUgb2Ygc2Npc3Nvciwgc2tpcAorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVjdGFuZ2xlVmVydGljZXMucHVzaF9iYWNrKFZlcnRleHtib3VuZHMubGVmdCwgYm91bmRzLnRvcH0pOworICAgICAgICByZWN0YW5nbGVWZXJ0aWNlcy5wdXNoX2JhY2soVmVydGV4e2JvdW5kcy5yaWdodCwgYm91bmRzLnRvcH0pOworICAgICAgICByZWN0YW5nbGVWZXJ0aWNlcy5wdXNoX2JhY2soVmVydGV4e2JvdW5kcy5sZWZ0LCBib3VuZHMuYm90dG9tfSk7CisgICAgICAgIHJlY3RhbmdsZVZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7Ym91bmRzLnJpZ2h0LCBib3VuZHMuYm90dG9tfSk7CisKKyAgICAgICAgaWYgKCF0cmFuc2Zvcm0ucmVjdFRvUmVjdCgpKSB7CisgICAgICAgICAgICAvLyBJZiBub3QgcmVjdFRvUmVjdCwgbXVzdCBtYXAgZWFjaCBwb2ludCBpbmRpdmlkdWFsbHkKKyAgICAgICAgICAgIGZvciAoYXV0byBjdXIgPSByZWN0YW5nbGVWZXJ0aWNlcy5lbmQoKSAtIDQ7IGN1ciA8IHJlY3RhbmdsZVZlcnRpY2VzLmVuZCgpOyBjdXIrKykgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5tYXBQb2ludChjdXItPngsIGN1ci0+eSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgc2V0dXBTdGVuY2lsUXVhZHMocmVjdGFuZ2xlVmVydGljZXMsIHJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCkpOworfQorCit2b2lkIEJha2VkT3BSZW5kZXJlcjo6c2V0dXBTdGVuY2lsUmVnaW9uKGNvbnN0IENsaXBCYXNlKiBjbGlwKSB7CisgICAgTE9HX0FMV0FZU19GQVRBTF9JRihjbGlwLT5tb2RlICE9IENsaXBNb2RlOjpSZWdpb24sICJjYW4ndCByZWdpb24gY2xpcCB3aXRob3V0IHJlZ2lvbiIpOworICAgIGF1dG8mJiByZWdpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWdpb24qPihjbGlwKS0+cmVnaW9uOworCisgICAgc3RkOjp2ZWN0b3I8VmVydGV4PiByZWdpb25WZXJ0aWNlczsKKyAgICBTa1JlZ2lvbjo6Q2xpcGVyYXRvciBpdChyZWdpb24sIGNsaXAtPnJlY3QudG9Ta0lSZWN0KCkpOworICAgIHdoaWxlICghaXQuZG9uZSgpKSB7CisgICAgICAgIGNvbnN0IFNrSVJlY3QmIHIgPSBpdC5yZWN0KCk7CisgICAgICAgIHJlZ2lvblZlcnRpY2VzLnB1c2hfYmFjayhWZXJ0ZXh7KGZsb2F0KXIuZkxlZnQsIChmbG9hdClyLmZUb3B9KTsKKyAgICAgICAgcmVnaW9uVmVydGljZXMucHVzaF9iYWNrKFZlcnRleHsoZmxvYXQpci5mUmlnaHQsIChmbG9hdClyLmZUb3B9KTsKKyAgICAgICAgcmVnaW9uVmVydGljZXMucHVzaF9iYWNrKFZlcnRleHsoZmxvYXQpci5mTGVmdCwgKGZsb2F0KXIuZkJvdHRvbX0pOworICAgICAgICByZWdpb25WZXJ0aWNlcy5wdXNoX2JhY2soVmVydGV4eyhmbG9hdClyLmZSaWdodCwgKGZsb2F0KXIuZkJvdHRvbX0pOworICAgICAgICBpdC5uZXh0KCk7CisgICAgfQorICAgIHNldHVwU3RlbmNpbFF1YWRzKHJlZ2lvblZlcnRpY2VzLCAwKTsKK30KKwordm9pZCBCYWtlZE9wUmVuZGVyZXI6OnByZXBhcmVSZW5kZXIoY29uc3QgUmVjdCogZGlydHlCb3VuZHMsIGNvbnN0IENsaXBCYXNlKiBjbGlwKSB7CisgICAgLy8gUHJlcGFyZSBzY2lzc29yIChkb25lIGJlZm9yZSBzdGVuY2lsLCB0byBzaW1wbGlmeSBmaWxsaW5nIHN0ZW5jaWwpCiAgICAgbVJlbmRlclN0YXRlLnNjaXNzb3IoKS5zZXRFbmFibGVkKGNsaXAgIT0gbnVsbHB0cik7CiAgICAgaWYgKGNsaXApIHsKLSAgICAgICAgbVJlbmRlclN0YXRlLnNjaXNzb3IoKS5zZXQoY2xpcC0+bGVmdCwgbVJlbmRlclRhcmdldC52aWV3cG9ydEhlaWdodCAtIGNsaXAtPmJvdHRvbSwKLSAgICAgICAgICAgIGNsaXAtPmdldFdpZHRoKCksIGNsaXAtPmdldEhlaWdodCgpKTsKKyAgICAgICAgbVJlbmRlclN0YXRlLnNjaXNzb3IoKS5zZXQobVJlbmRlclRhcmdldC52aWV3cG9ydEhlaWdodCwgY2xpcC0+cmVjdCk7CiAgICAgfQorCisgICAgLy8gSWYgc3RlbmNpbCBtYXkgYmUgdXNlZCBmb3IgY2xpcHBpbmcsIGVuYWJsZSBpdCwgZmlsbCBpdCwgb3IgZGlzYWJsZSBpdCBhcyBhcHByb3ByaWF0ZQorICAgIGlmIChDQ19MSUtFTFkoIVByb3BlcnRpZXM6OmRlYnVnT3ZlcmRyYXcpKSB7CisgICAgICAgIC8vIG9ubHkgbW9kaWZ5IHN0ZW5jaWwgbW9kZSBhbmQgY29udGVudCB3aGVuIGl0J3Mgbm90IHVzZWQgZm9yIG92ZXJkcmF3IHZpc3VhbGl6YXRpb24KKyAgICAgICAgaWYgKENDX1VOTElLRUxZKGNsaXAgJiYgY2xpcC0+bW9kZSAhPSBDbGlwTW9kZTo6UmVjdGFuZ2xlKSkgeworICAgICAgICAgICAgLy8gTk9URTogdGhpcyBwb2ludGVyIGNoZWNrIGlzIG9ubHkgc2FmZSBmb3Igbm9uLXJlY3QgY2xpcHMsCisgICAgICAgICAgICAvLyBzaW5jZSByZWN0IGNsaXBzIG1heSBiZSBjcmVhdGVkIG9uIHRoZSBzdGFjaworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXQubGFzdFN0ZW5jaWxDbGlwICE9IGNsaXApIHsKKyAgICAgICAgICAgICAgICAvLyBTdGVuY2lsIG5lZWRlZCwgYnV0IGN1cnJlbnQgc3RlbmNpbCBpc24ndCB1cCB0byBkYXRlCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC5sYXN0U3RlbmNpbENsaXAgPSBjbGlwOworCisgICAgICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXQuZnJhbWVCdWZmZXJJZCAhPSAwICYmICFtUmVuZGVyVGFyZ2V0LnN0ZW5jaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgT2Zmc2NyZWVuQnVmZmVyKiBsYXllciA9IG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyOworICAgICAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0LnN0ZW5jaWwgPSBtQ2FjaGVzLnJlbmRlckJ1ZmZlckNhY2hlLmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGVuY2lsOjpnZXRMYXllclN0ZW5jaWxGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllci0+dGV4dHVyZS53aWR0aCwgbGF5ZXItPnRleHR1cmUuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RlbmNpbCBpcyBib3VuZCArIGFsbG9jYXRlZCAtIGFzc29jaWF0ZSBpdCB3aXRoIGN1cnJlbnQgRkJPCisgICAgICAgICAgICAgICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xfRlJBTUVCVUZGRVIsIEdMX1NURU5DSUxfQVRUQUNITUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRU5ERVJCVUZGRVIsIG1SZW5kZXJUYXJnZXQuc3RlbmNpbC0+Z2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY2xpcC0+bW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdCkgeworICAgICAgICAgICAgICAgICAgICBzZXR1cFN0ZW5jaWxSZWN0TGlzdChjbGlwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXR1cFN0ZW5jaWxSZWdpb24oY2xpcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBzdGVuY2lsIGlzIHVwIHRvIGRhdGUgLSBqdXN0IG5lZWQgdG8gZW5zdXJlIGl0J3MgZW5hYmxlZCAoc2luY2UgYW4gdW5jbGlwcGVkCisgICAgICAgICAgICAgICAgLy8gb3Igc2Npc3Nvci1vbmx5IGNsaXBwZWQgb3AgbWF5IGhhdmUgYmVlbiBkcmF3biwgZGlzYWJsaW5nIHRoZSBzdGVuY2lsKQorICAgICAgICAgICAgICAgIGludCBpbmNyZW1lbnRUaHJlc2hvbGQgPSAwOworICAgICAgICAgICAgICAgIGlmIChDQ19MSUtFTFkoY2xpcC0+bW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYmIHJlY3RMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdExpc3QqPihjbGlwKS0+cmVjdExpc3Q7CisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudFRocmVzaG9sZCA9IHJlY3RMaXN0LmdldFRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZW5hYmxlVGVzdChpbmNyZW1lbnRUaHJlc2hvbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gZWl0aGVyIHNjaXNzb3Igb3Igbm8gY2xpcCwgc28gZGlzYWJsZSBzdGVuY2lsIHRlc3QKKyAgICAgICAgICAgIG1SZW5kZXJTdGF0ZS5zdGVuY2lsKCkuZGlzYWJsZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZGlydHkgb2Zmc2NyZWVuYnVmZmVyCiAgICAgaWYgKGRpcnR5Qm91bmRzICYmIG1SZW5kZXJUYXJnZXQub2Zmc2NyZWVuQnVmZmVyKSB7CiAgICAgICAgIC8vIHJlZ2lzdGVyIGxheWVyIGRhbWFnZSB0byBkcmF3LWJhY2sgcmVnaW9uCiAgICAgICAgIGFuZHJvaWQ6OlJlY3QgZGlydHkoZGlydHlCb3VuZHMtPmxlZnQsIGRpcnR5Qm91bmRzLT50b3AsCiAgICAgICAgICAgICAgICAgZGlydHlCb3VuZHMtPnJpZ2h0LCBkaXJ0eUJvdW5kcy0+Ym90dG9tKTsKICAgICAgICAgbVJlbmRlclRhcmdldC5vZmZzY3JlZW5CdWZmZXItPnJlZ2lvbi5vclNlbGYoZGlydHkpOwogICAgIH0KK30KKwordm9pZCBCYWtlZE9wUmVuZGVyZXI6OnJlbmRlckdsb3AoY29uc3QgUmVjdCogZGlydHlCb3VuZHMsIGNvbnN0IENsaXBCYXNlKiBjbGlwLAorICAgICAgICBjb25zdCBHbG9wJiBnbG9wKSB7CisgICAgcHJlcGFyZVJlbmRlcihkaXJ0eUJvdW5kcywgY2xpcCk7CiAgICAgbVJlbmRlclN0YXRlLnJlbmRlcihnbG9wLCBtUmVuZGVyVGFyZ2V0Lm9ydGhvTWF0cml4KTsKICAgICBpZiAoIW1SZW5kZXJUYXJnZXQuZnJhbWVCdWZmZXJJZCkgbUhhc0RyYXduID0gdHJ1ZTsKIH0KIAordm9pZCBCYWtlZE9wUmVuZGVyZXI6OnJlbmRlckZ1bmN0b3IoY29uc3QgRnVuY3Rvck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeworICAgIHByZXBhcmVSZW5kZXIoJnN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcywgc3RhdGUuY29tcHV0ZWRTdGF0ZS5nZXRDbGlwSWZOZWVkZWQoKSk7CisKKyAgICBEcmF3R2xJbmZvIGluZm87CisgICAgYXV0byYmIGNsaXAgPSBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCk7CisgICAgaW5mby5jbGlwTGVmdCA9IGNsaXAubGVmdDsKKyAgICBpbmZvLmNsaXBUb3AgPSBjbGlwLnRvcDsKKyAgICBpbmZvLmNsaXBSaWdodCA9IGNsaXAucmlnaHQ7CisgICAgaW5mby5jbGlwQm90dG9tID0gY2xpcC5ib3R0b207CisgICAgaW5mby5pc0xheWVyID0gb2Zmc2NyZWVuUmVuZGVyVGFyZ2V0KCk7CisgICAgaW5mby53aWR0aCA9IG1SZW5kZXJUYXJnZXQudmlld3BvcnRXaWR0aDsKKyAgICBpbmZvLmhlaWdodCA9IG1SZW5kZXJUYXJnZXQudmlld3BvcnRIZWlnaHQ7CisgICAgc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uY29weVRvKCZpbmZvLnRyYW5zZm9ybVswXSk7CisKKyAgICBtUmVuZGVyU3RhdGUuaW52b2tlRnVuY3RvcihvcC5mdW5jdG9yLCBEcmF3R2xJbmZvOjprTW9kZURyYXcsICZpbmZvKTsKK30KKwogdm9pZCBCYWtlZE9wUmVuZGVyZXI6OmRpcnR5UmVuZGVyVGFyZ2V0KGNvbnN0IFJlY3QmIHVpRGlydHkpIHsKICAgICBpZiAobVJlbmRlclRhcmdldC5vZmZzY3JlZW5CdWZmZXIpIHsKICAgICAgICAgYW5kcm9pZDo6UmVjdCBkaXJ0eSh1aURpcnR5LmxlZnQsIHVpRGlydHkudG9wLCB1aURpcnR5LnJpZ2h0LCB1aURpcnR5LmJvdHRvbSk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvQmFrZWRPcFJlbmRlcmVyLmggYi9saWJzL2h3dWkvQmFrZWRPcFJlbmRlcmVyLmgKaW5kZXggZDc2MDBkYi4uZTg1N2Y2YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0Jha2VkT3BSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9CYWtlZE9wUmVuZGVyZXIuaApAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSAiQmFrZWRPcFN0YXRlLmgiCiAjaW5jbHVkZSAiTWF0cml4LmgiCisjaW5jbHVkZSAidXRpbHMvTWFjcm9zLmgiCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKQEAgLTI3LDYgKzI4LDcgQEAKIHN0cnVjdCBHbG9wOwogY2xhc3MgTGF5ZXI7CiBjbGFzcyBSZW5kZXJTdGF0ZTsKK3N0cnVjdCBDbGlwQmFzZTsKIAogLyoqCiAgKiBNYWluIHJlbmRlcmluZyBtYW5hZ2VyIGZvciBhIGNvbGxlY3Rpb24gb2Ygd29yayAtIG9uZSBmcmFtZSArIGFueSBjb250YWluZWQgRkJPcy4KQEAgLTU5LDI4ICs2MSwzMyBAQAogICAgIENhY2hlcyYgY2FjaGVzKCkgeyByZXR1cm4gbUNhY2hlczsgfQogCiAgICAgdm9pZCBzdGFydEZyYW1lKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KTsKLSAgICB2b2lkIGVuZEZyYW1lKCk7Ci0gICAgT2Zmc2NyZWVuQnVmZmVyKiBzdGFydFRlbXBvcmFyeUxheWVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpOworICAgIHZvaWQgZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpOworICAgIFdBUk5fVU5VU0VEX1JFU1VMVCBPZmZzY3JlZW5CdWZmZXIqIHN0YXJ0VGVtcG9yYXJ5TGF5ZXIodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCk7CiAgICAgdm9pZCBzdGFydFJlcGFpbnRMYXllcihPZmZzY3JlZW5CdWZmZXIqIG9mZnNjcmVlbkJ1ZmZlciwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpOwogICAgIHZvaWQgZW5kTGF5ZXIoKTsKKyAgICBXQVJOX1VOVVNFRF9SRVNVTFQgT2Zmc2NyZWVuQnVmZmVyKiBjb3B5VG9MYXllcihjb25zdCBSZWN0JiBhcmVhKTsKIAogICAgIFRleHR1cmUqIGdldFRleHR1cmUoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCk7Ci0gICAgY29uc3QgTGlnaHRJbmZvJiBnZXRMaWdodEluZm8oKSB7IHJldHVybiBtTGlnaHRJbmZvOyB9CisgICAgY29uc3QgTGlnaHRJbmZvJiBnZXRMaWdodEluZm8oKSBjb25zdCB7IHJldHVybiBtTGlnaHRJbmZvOyB9CiAKICAgICB2b2lkIHJlbmRlckdsb3AoY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSwgY29uc3QgR2xvcCYgZ2xvcCkgewotICAgICAgICBib29sIHVzZVNjaXNzb3IgPSBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3MgIT0gT3BDbGlwU2lkZUZsYWdzOjpOb25lOwogICAgICAgICByZW5kZXJHbG9wKCZzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMsCi0gICAgICAgICAgICAgICAgdXNlU2Npc3NvciA/ICZzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0IDogbnVsbHB0ciwKKyAgICAgICAgICAgICAgICBzdGF0ZS5jb21wdXRlZFN0YXRlLmdldENsaXBJZk5lZWRlZCgpLAogICAgICAgICAgICAgICAgIGdsb3ApOwogICAgIH0KKyAgICB2b2lkIHJlbmRlckZ1bmN0b3IoY29uc3QgRnVuY3Rvck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSk7CiAKLSAgICB2b2lkIHJlbmRlckdsb3AoY29uc3QgUmVjdCogZGlydHlCb3VuZHMsIGNvbnN0IFJlY3QqIGNsaXAsIGNvbnN0IEdsb3AmIGdsb3ApOworICAgIHZvaWQgcmVuZGVyR2xvcChjb25zdCBSZWN0KiBkaXJ0eUJvdW5kcywgY29uc3QgQ2xpcEJhc2UqIGNsaXAsIGNvbnN0IEdsb3AmIGdsb3ApOwogICAgIGJvb2wgb2Zmc2NyZWVuUmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbVJlbmRlclRhcmdldC5vZmZzY3JlZW5CdWZmZXIgIT0gbnVsbHB0cjsgfQogICAgIHZvaWQgZGlydHlSZW5kZXJUYXJnZXQoY29uc3QgUmVjdCYgZGlydHlSZWN0KTsKLSAgICBib29sIGRpZERyYXcoKSB7IHJldHVybiBtSGFzRHJhd247IH0KKyAgICBib29sIGRpZERyYXcoKSBjb25zdCB7IHJldHVybiBtSGFzRHJhd247IH0KIHByaXZhdGU6CiAgICAgdm9pZCBzZXRWaWV3cG9ydCh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KTsKICAgICB2b2lkIGNsZWFyQ29sb3JCdWZmZXIoY29uc3QgUmVjdCYgY2xlYXJSZWN0KTsKKyAgICB2b2lkIHByZXBhcmVSZW5kZXIoY29uc3QgUmVjdCogZGlydHlCb3VuZHMsIGNvbnN0IENsaXBCYXNlKiBjbGlwKTsKKyAgICB2b2lkIHNldHVwU3RlbmNpbFJlY3RMaXN0KGNvbnN0IENsaXBCYXNlKiBjbGlwKTsKKyAgICB2b2lkIHNldHVwU3RlbmNpbFJlZ2lvbihjb25zdCBDbGlwQmFzZSogY2xpcCk7CisgICAgdm9pZCBzZXR1cFN0ZW5jaWxRdWFkcyhzdGQ6OnZlY3RvcjxWZXJ0ZXg+JiBxdWFkVmVydGljZXMsIGludCBpbmNyZW1lbnRUaHJlc2hvbGQpOwogCiAgICAgUmVuZGVyU3RhdGUmIG1SZW5kZXJTdGF0ZTsKICAgICBDYWNoZXMmIG1DYWNoZXM7CkBAIC05MCwxMCArOTcsMjMgQEAKICAgICAvLyByZW5kZXIgdGFyZ2V0IHN0YXRlIC0gc2V0dXAgYnkgc3RhcnQvZW5kIGxheWVyL2ZyYW1lCiAgICAgLy8gb25seSB2YWxpZCB0byB1c2UgaW4gYmV0d2VlbiBzdGFydC9lbmQgcGFpcnMuCiAgICAgc3RydWN0IHsKKyAgICAgICAgLy8gSWYgbm90IGRyYXdpbmcgdG8gYSBsYXllcjogZmJvID0gMCwgb2Zmc2NyZWVuQnVmZmVyID0gbnVsbCwKKyAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXNlIHJlZmVyIHRvIGN1cnJlbnRseSBwYWludGluZyBsYXllcidzIHN0YXRlCiAgICAgICAgIEdMdWludCBmcmFtZUJ1ZmZlcklkID0gMDsKICAgICAgICAgT2Zmc2NyZWVuQnVmZmVyKiBvZmZzY3JlZW5CdWZmZXIgPSBudWxscHRyOworCisgICAgICAgIC8vIFVzZWQgd2hlbiBkcmF3aW5nIHRvIGEgbGF5ZXIgYW5kIHVzaW5nIHN0ZW5jaWwgY2xpcHBpbmcuIG90aGVyd2lzZSBudWxsLgorICAgICAgICBSZW5kZXJCdWZmZXIqIHN0ZW5jaWwgPSBudWxscHRyOworCisgICAgICAgIC8vIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgQ2xpcFJlY3RMaXN0KiBvciBDbGlwUmVnaW9uKiBjdXJyZW50bHkgc3RvcmVkIGluCisgICAgICAgIC8vIHRoZSBzdGVuY2lsIG9mIHRoZSBjdXJyZW50IHJlbmRlciB0YXJnZXQKKyAgICAgICAgY29uc3QgQ2xpcEJhc2UqIGxhc3RTdGVuY2lsQ2xpcCA9IG51bGxwdHI7CisKKyAgICAgICAgLy8gU2l6ZSBvZiByZW5kZXJhYmxlIHJlZ2lvbiBpbiBjdXJyZW50IHJlbmRlciB0YXJnZXQgLSBmb3IgbGF5ZXJzLCBtYXkgbm90IG1hdGNoIGFjdHVhbAorICAgICAgICAvLyBib3VuZHMgb2YgRkJPIHRleHR1cmUuIG9mZnNjcmVlbkJ1ZmZlci0+dGV4dHVyZSBoYXMgdGhpcyBpbmZvcm1hdGlvbi4KICAgICAgICAgdWludDMyX3Qgdmlld3BvcnRXaWR0aCA9IDA7CiAgICAgICAgIHVpbnQzMl90IHZpZXdwb3J0SGVpZ2h0ID0gMDsKKwogICAgICAgICBNYXRyaXg0IG9ydGhvTWF0cml4OwogICAgIH0gbVJlbmRlclRhcmdldDsKIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5jcHAgYi9saWJzL2h3dWkvQmFrZWRPcFN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Nzg0NGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5jcHAKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJCYWtlZE9wU3RhdGUuaCIKKworI2luY2x1ZGUgIkNsaXBBcmVhLmgiCisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworUmVzb2x2ZWRSZW5kZXJTdGF0ZTo6UmVzb2x2ZWRSZW5kZXJTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90LAorICAgICAgICBjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wLCBib29sIGV4cGFuZEZvclN0cm9rZSkgeworICAgIC8vIHJlc29sdmVkTWF0cml4ID0gcGFyZW50TWF0cml4ICogbG9jYWxNYXRyaXgKKyAgICB0cmFuc2Zvcm0ubG9hZE11bHRpcGx5KCpzbmFwc2hvdC50cmFuc2Zvcm0sIHJlY29yZGVkT3AubG9jYWxNYXRyaXgpOworCisgICAgLy8gcmVzb2x2ZWRDbGlwcGVkQm91bmRzID0gaW50ZXJzZWN0KHJlc29sdmVkTWF0cml4ICogb3BCb3VuZHMsIHJlc29sdmVkQ2xpcFJlY3QpCisgICAgY2xpcHBlZEJvdW5kcyA9IHJlY29yZGVkT3AudW5tYXBwZWRCb3VuZHM7CisgICAgaWYgKENDX1VOTElLRUxZKGV4cGFuZEZvclN0cm9rZSkpIHsKKyAgICAgICAgLy8gYWNjb3VudCBmb3Igbm9uLWhhaXJsaW5lIHN0cm9rZQorICAgICAgICBjbGlwcGVkQm91bmRzLm91dHNldChyZWNvcmRlZE9wLnBhaW50LT5nZXRTdHJva2VXaWR0aCgpICogMC41Zik7CisgICAgfQorICAgIHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBwZWRCb3VuZHMpOworICAgIGlmIChDQ19VTkxJS0VMWShleHBhbmRGb3JTdHJva2UKKyAgICAgICAgICAgICYmICghdHJhbnNmb3JtLmlzUHVyZVRyYW5zbGF0ZSgpIHx8IHJlY29yZGVkT3AucGFpbnQtPmdldFN0cm9rZVdpZHRoKCkgPCAxLjBmKSkpIHsKKyAgICAgICAgLy8gYWNjb3VudCBmb3IgaGFpcmxpbmUgc3Ryb2tlIHdoZW4gc3Ryb2tlIG1heSBiZSA8IDEgc2NhbGVkIHBpeGVsCisgICAgICAgIC8vIE5vbiB0cmFuc2xhdGUgfHwgc3Ryb2tlV2lkdGggPCAxIGlzIGNvbnNlcnZhdGl2ZSwgYnV0IHdpbGwgY292ZXIgYWxsIGNhc2VzCisgICAgICAgIGNsaXBwZWRCb3VuZHMub3V0c2V0KDAuNWYpOworICAgIH0KKworICAgIC8vIHJlc29sdmVkQ2xpcFJlY3QgPSBpbnRlcnNlY3QocGFyZW50TWF0cml4ICogbG9jYWxDbGlwLCBwYXJlbnRDbGlwKQorICAgIGNsaXBTdGF0ZSA9IHNuYXBzaG90Lm11dGF0ZUNsaXBBcmVhKCkuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwKKyAgICAgICAgICAgIHJlY29yZGVkT3AubG9jYWxDbGlwLCAqKHNuYXBzaG90LnRyYW5zZm9ybSkpOworICAgIExPR19BTFdBWVNfRkFUQUxfSUYoIWNsaXBTdGF0ZSwgIm11c3QgY2xpcCEiKTsKKworICAgIGNvbnN0IFJlY3QmIGNsaXBSZWN0ID0gY2xpcFN0YXRlLT5yZWN0OworICAgIGlmIChDQ19VTkxJS0VMWShjbGlwUmVjdC5pc0VtcHR5KCkgfHwgIWNsaXBwZWRCb3VuZHMuaW50ZXJzZWN0cyhjbGlwUmVjdCkpKSB7CisgICAgICAgIC8vIFJlamVjdGVkIGJhc2VkIG9uIGVpdGhlciBlbXB0eSBjbGlwLCBvciBib3VuZHMgbm90IGludGVyc2VjdGluZyB3aXRoIGNsaXAKKworICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCByZXdpbmQgdGhlIGNsaXBTdGF0ZSBvYmplY3QgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGUgY2xpcFJlY3QgaXMgZW1wdHksCisgICAgICAgIC8vIGJ1dCAqb25seSogaWYgdGhlIGNhY2hpbmcgbG9naWMgd2l0aGluIENsaXBBcmVhIHdhcyBhd2FyZSBvZiB0aGUgcmV3aW5kLgorICAgICAgICBjbGlwU3RhdGUgPSBudWxscHRyOworICAgICAgICBjbGlwcGVkQm91bmRzLnNldEVtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTm90IHJlamVjdGVkISBjb21wdXRlIHRydWUgY2xpcHBlZEJvdW5kcyBhbmQgY2xpcFNpZGVGbGFncworICAgICAgICBpZiAoY2xpcFJlY3QubGVmdCA+IGNsaXBwZWRCb3VuZHMubGVmdCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OkxlZnQ7CisgICAgICAgIGlmIChjbGlwUmVjdC50b3AgPiBjbGlwcGVkQm91bmRzLnRvcCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OlRvcDsKKyAgICAgICAgaWYgKGNsaXBSZWN0LnJpZ2h0IDwgY2xpcHBlZEJvdW5kcy5yaWdodCkgY2xpcFNpZGVGbGFncyB8PSBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0OworICAgICAgICBpZiAoY2xpcFJlY3QuYm90dG9tIDwgY2xpcHBlZEJvdW5kcy5ib3R0b20pIGNsaXBTaWRlRmxhZ3MgfD0gT3BDbGlwU2lkZUZsYWdzOjpCb3R0b207CisgICAgICAgIGNsaXBwZWRCb3VuZHMuZG9JbnRlcnNlY3QoY2xpcFJlY3QpOworICAgIH0KK30KKworUmVzb2x2ZWRSZW5kZXJTdGF0ZTo6UmVzb2x2ZWRSZW5kZXJTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90KSB7CisgICAgdHJhbnNmb3JtID0gKnNuYXBzaG90LnRyYW5zZm9ybTsKKworICAgIC8vIFNpbmNlIHRoZSBvcCBkb2Vzbid0IGhhdmUga25vd24gYm91bmRzLCB3ZSBjb25zZXJ2YXRpdmVseSBzZXQgdGhlIG1hcHBlZCBib3VuZHMKKyAgICAvLyB0byB0aGUgY3VycmVudCBjbGlwUmVjdCwgYW5kIGNsaXBTaWRlRmxhZ3MgdG8gRnVsbC4KKyAgICBjbGlwU3RhdGUgPSBzbmFwc2hvdC5tdXRhdGVDbGlwQXJlYSgpLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKCFjbGlwU3RhdGUsICJjbGlwU3RhdGUgcmVxdWlyZWQiKTsKKyAgICBjbGlwcGVkQm91bmRzID0gY2xpcFN0YXRlLT5yZWN0OworICAgIGNsaXBTaWRlRmxhZ3MgPSBPcENsaXBTaWRlRmxhZ3M6OkZ1bGw7Cit9CisKK1Jlc29sdmVkUmVuZGVyU3RhdGU6OlJlc29sdmVkUmVuZGVyU3RhdGUoY29uc3QgQ2xpcFJlY3QqIHZpZXdwb3J0UmVjdCwgY29uc3QgUmVjdCYgZHN0UmVjdCkKKyAgICAgICAgOiB0cmFuc2Zvcm0oTWF0cml4NDo6aWRlbnRpdHkoKSkKKyAgICAgICAgLCBjbGlwU3RhdGUodmlld3BvcnRSZWN0KQorICAgICAgICAsIGNsaXBwZWRCb3VuZHMoZHN0UmVjdCkKKyAgICAgICAgLCBjbGlwU2lkZUZsYWdzKE9wQ2xpcFNpZGVGbGFnczo6Tm9uZSkge30KKworfSAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5oIGIvbGlicy9od3VpL0Jha2VkT3BTdGF0ZS5oCmluZGV4IDljODM2YTAuLjNkYjI4YzkgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9CYWtlZE9wU3RhdGUuaAorKysgYi9saWJzL2h3dWkvQmFrZWRPcFN0YXRlLmgKQEAgLTUyLDgyICs1Miw0MiBAQAogICovCiBjbGFzcyBSZXNvbHZlZFJlbmRlclN0YXRlIHsKIHB1YmxpYzoKLSAgICAvLyBUT0RPOiByZW1vdmUgdGhlIG1hcFJlY3RzL21hdHJpeCBtdWx0aXBseSB3aGVuIHNuYXBzaG90ICYgcmVjb3JkZWQgdHJhbnNmb3JtcyBhcmUgdHJhbnNsYXRlcwotICAgIFJlc29sdmVkUmVuZGVyU3RhdGUoY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wLCBib29sIGV4cGFuZEZvclN0cm9rZSkgewotICAgICAgICAvKiBUT0RPOiBiZW5jaG1hcmsgYSBmYXN0IHBhdGggZm9yIHRyYW5zbGF0ZS1vbmx5IG1hdHJpY2VzLCBzdWNoIGFzOgotICAgICAgICBpZiAoQ0NfTElLRUxZKHNuYXBzaG90LnRyYW5zZm9ybS0+Z2V0VHlwZSgpID09IE1hdHJpeDQ6OmtUeXBlVHJhbnNsYXRlCi0gICAgICAgICAgICAgICAgJiYgcmVjb3JkZWRPcC5sb2NhbE1hdHJpeC5nZXRUeXBlKCkgPT0gTWF0cml4NDo6a1R5cGVUcmFuc2xhdGUpKSB7Ci0gICAgICAgICAgICBmbG9hdCB0cmFuc2xhdGVYID0gc25hcHNob3QudHJhbnNmb3JtLT5nZXRUcmFuc2xhdGVYKCkgKyByZWNvcmRlZE9wLmxvY2FsTWF0cml4LmdldFRyYW5zbGF0ZVgoKTsKLSAgICAgICAgICAgIGZsb2F0IHRyYW5zbGF0ZVkgPSBzbmFwc2hvdC50cmFuc2Zvcm0tPmdldFRyYW5zbGF0ZVkoKSArIHJlY29yZGVkT3AubG9jYWxNYXRyaXguZ2V0VHJhbnNsYXRlWSgpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmxvYWRUcmFuc2xhdGUodHJhbnNsYXRlWCwgdHJhbnNsYXRlWSwgMCk7CisgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90LAorICAgICAgICAgICAgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgYm9vbCBleHBhbmRGb3JTdHJva2UpOwogCi0gICAgICAgICAgICAvLyByZXNvbHZlZENsaXBSZWN0ID0gaW50ZXJzZWN0KHBhcmVudE1hdHJpeCAqIGxvY2FsQ2xpcCwgcGFyZW50Q2xpcCkKLSAgICAgICAgICAgIGNsaXBSZWN0ID0gcmVjb3JkZWRPcC5sb2NhbENsaXBSZWN0OwotICAgICAgICAgICAgY2xpcFJlY3QudHJhbnNsYXRlKHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVkpOwotICAgICAgICAgICAgY2xpcFJlY3QuZG9JbnRlcnNlY3Qoc25hcHNob3QuZ2V0Q2xpcFJlY3QoKSk7Ci0gICAgICAgICAgICBjbGlwUmVjdC5zbmFwVG9QaXhlbEJvdW5kYXJpZXMoKTsKKyAgICAvLyBDb25zdHJ1Y3RvciBmb3IgdW5ib3VuZGVkIG9wcyB3aXRob3V0IHRyYW5zZm9ybS9jbGlwIChuYW1lbHkgc2hhZG93cykKKyAgICBSZXNvbHZlZFJlbmRlclN0YXRlKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLCBTbmFwc2hvdCYgc25hcHNob3QpOwogCi0gICAgICAgICAgICAvLyByZXNvbHZlZENsaXBwZWRCb3VuZHMgPSBpbnRlcnNlY3QocmVzb2x2ZWRNYXRyaXggKiBvcEJvdW5kcywgcmVzb2x2ZWRDbGlwUmVjdCkKLSAgICAgICAgICAgIGNsaXBwZWRCb3VuZHMgPSByZWNvcmRlZE9wLnVubWFwcGVkQm91bmRzOwotICAgICAgICAgICAgY2xpcHBlZEJvdW5kcy50cmFuc2xhdGUodHJhbnNsYXRlWCwgdHJhbnNsYXRlWSk7Ci0gICAgICAgIH0gLi4uICovCisgICAgLy8gQ29uc3RydWN0b3IgZm9yIHByaW1pdGl2ZSBvcHMgcHJvdmlkZWQgY2xpcCwgYW5kIG5vIHRyYW5zZm9ybQorICAgIFJlc29sdmVkUmVuZGVyU3RhdGUoY29uc3QgQ2xpcFJlY3QqIHZpZXdwb3J0UmVjdCwgY29uc3QgUmVjdCYgZHN0UmVjdCk7CiAKLSAgICAgICAgLy8gcmVzb2x2ZWRNYXRyaXggPSBwYXJlbnRNYXRyaXggKiBsb2NhbE1hdHJpeAotICAgICAgICB0cmFuc2Zvcm0ubG9hZE11bHRpcGx5KCpzbmFwc2hvdC50cmFuc2Zvcm0sIHJlY29yZGVkT3AubG9jYWxNYXRyaXgpOworICAgIFJlY3QgY29tcHV0ZUxvY2FsU3BhY2VDbGlwKCkgY29uc3QgeworICAgICAgICBNYXRyaXg0IGludmVyc2U7CisgICAgICAgIGludmVyc2UubG9hZEludmVyc2UodHJhbnNmb3JtKTsKIAotICAgICAgICAvLyByZXNvbHZlZENsaXBSZWN0ID0gaW50ZXJzZWN0KHBhcmVudE1hdHJpeCAqIGxvY2FsQ2xpcCwgcGFyZW50Q2xpcCkKLSAgICAgICAgY2xpcFJlY3QgPSByZWNvcmRlZE9wLmxvY2FsQ2xpcFJlY3Q7Ci0gICAgICAgIHNuYXBzaG90LnRyYW5zZm9ybS0+bWFwUmVjdChjbGlwUmVjdCk7Ci0gICAgICAgIGNsaXBSZWN0LmRvSW50ZXJzZWN0KHNuYXBzaG90LmdldFJlbmRlclRhcmdldENsaXAoKSk7Ci0gICAgICAgIGNsaXBSZWN0LnNuYXBUb1BpeGVsQm91bmRhcmllcygpOwotCi0gICAgICAgIC8vIHJlc29sdmVkQ2xpcHBlZEJvdW5kcyA9IGludGVyc2VjdChyZXNvbHZlZE1hdHJpeCAqIG9wQm91bmRzLCByZXNvbHZlZENsaXBSZWN0KQotICAgICAgICBjbGlwcGVkQm91bmRzID0gcmVjb3JkZWRPcC51bm1hcHBlZEJvdW5kczsKLSAgICAgICAgaWYgKENDX1VOTElLRUxZKGV4cGFuZEZvclN0cm9rZSkpIHsKLSAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIG5vbi1oYWlybGluZSBzdHJva2UKLSAgICAgICAgICAgIGNsaXBwZWRCb3VuZHMub3V0c2V0KHJlY29yZGVkT3AucGFpbnQtPmdldFN0cm9rZVdpZHRoKCkgKiAwLjVmKTsKLSAgICAgICAgfQotICAgICAgICB0cmFuc2Zvcm0ubWFwUmVjdChjbGlwcGVkQm91bmRzKTsKLSAgICAgICAgaWYgKENDX1VOTElLRUxZKGV4cGFuZEZvclN0cm9rZQotICAgICAgICAgICAgICAgICYmICghdHJhbnNmb3JtLmlzUHVyZVRyYW5zbGF0ZSgpIHx8IHJlY29yZGVkT3AucGFpbnQtPmdldFN0cm9rZVdpZHRoKCkgPCAxLjBmKSkpIHsKLSAgICAgICAgICAgIC8vIGFjY291bnQgZm9yIGhhaXJsaW5lIHN0cm9rZSB3aGVuIHN0cm9rZSBtYXkgYmUgPCAxIHNjYWxlZCBwaXhlbAotICAgICAgICAgICAgLy8gTm9uIHRyYW5zbGF0ZSB8fCBzdHJva2VXaWR0aCA8IDEgaXMgY29uc2VydmF0aXZlLCBidXQgd2lsbCBjb3ZlciBhbGwgY2FzZXMKLSAgICAgICAgICAgIGNsaXBwZWRCb3VuZHMub3V0c2V0KDAuNWYpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNsaXBSZWN0LmxlZnQgPiBjbGlwcGVkQm91bmRzLmxlZnQpIGNsaXBTaWRlRmxhZ3MgfD0gT3BDbGlwU2lkZUZsYWdzOjpMZWZ0OwotICAgICAgICBpZiAoY2xpcFJlY3QudG9wID4gY2xpcHBlZEJvdW5kcy50b3ApIGNsaXBTaWRlRmxhZ3MgfD0gT3BDbGlwU2lkZUZsYWdzOjpUb3A7Ci0gICAgICAgIGlmIChjbGlwUmVjdC5yaWdodCA8IGNsaXBwZWRCb3VuZHMucmlnaHQpIGNsaXBTaWRlRmxhZ3MgfD0gT3BDbGlwU2lkZUZsYWdzOjpSaWdodDsKLSAgICAgICAgaWYgKGNsaXBSZWN0LmJvdHRvbSA8IGNsaXBwZWRCb3VuZHMuYm90dG9tKSBjbGlwU2lkZUZsYWdzIHw9IE9wQ2xpcFNpZGVGbGFnczo6Qm90dG9tOwotICAgICAgICBjbGlwcGVkQm91bmRzLmRvSW50ZXJzZWN0KGNsaXBSZWN0KTsKLQotICAgICAgICAvKioKLSAgICAgICAgICogVE9ETzogb25jZSB3ZSBzdXBwb3J0IGNvbXBsZXggY2xpcHMsIHdlIG1heSB3YW50IHRvIHJlamVjdCB0byBhdm9pZCB0aGF0IHdvcmsgd2hlcmUKLSAgICAgICAgICogcG9zc2libGUuIFNob3VsZCB3ZToKLSAgICAgICAgICogMSAtIHF1aWNrcmVqZWN0IGJhc2VkIG9uIGNsaXBwZWRCb3VuZHMsIHF1aWNrIGVhcmx5IChkdXBsaWNhdGluZyBsb2dpYyBpbiByZXNvbHZlZE9wKQotICAgICAgICAgKiAyIC0gbWVyZ2Ugc3R1ZmYgaW50byB0cnlDb25zdHJ1Y3QgZmFjdG9yeSBtZXRob2QsIHNvIGl0IGNhbiBoYW5kbGUgcXVpY2tSZWplY3Rpb24KLSAgICAgICAgICogICAgICAgICBhbmQgZWFybHkgcmV0dXJuIG51bGwgaW4gb25lIHBsYWNlLgotICAgICAgICAgKi8KKyAgICAgICAgUmVjdCBvdXRDbGlwKGNsaXBSZWN0KCkpOworICAgICAgICBpbnZlcnNlLm1hcFJlY3Qob3V0Q2xpcCk7CisgICAgICAgIHJldHVybiBvdXRDbGlwOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yIGZvciB1bmJvdW5kZWQgb3BzIHdpdGhvdXQgdHJhbnNmb3JtL2NsaXAgKG5hbWVseSBzaGFkb3dzKQotICAgICAqCi0gICAgICogU2luY2UgdGhlIG9wIGRvZXNuJ3QgaGF2ZSBrbm93biBib3VuZHMsIHdlIGNvbnNlcnZhdGl2ZWx5IHNldCB0aGUgbWFwcGVkIGJvdW5kcwotICAgICAqIHRvIHRoZSBjdXJyZW50IGNsaXBSZWN0LCBhbmQgY2xpcFNpZGVGbGFncyB0byBGdWxsLgotICAgICAqLwotICAgIFJlc29sdmVkUmVuZGVyU3RhdGUoY29uc3QgU25hcHNob3QmIHNuYXBzaG90KSB7Ci0gICAgICAgIHRyYW5zZm9ybSA9ICpzbmFwc2hvdC50cmFuc2Zvcm07Ci0gICAgICAgIGNsaXBSZWN0ID0gc25hcHNob3QuZ2V0UmVuZGVyVGFyZ2V0Q2xpcCgpOwotICAgICAgICBjbGlwcGVkQm91bmRzID0gY2xpcFJlY3Q7Ci0gICAgICAgIHRyYW5zZm9ybS5tYXBSZWN0KGNsaXBwZWRCb3VuZHMpOwotICAgICAgICBjbGlwU2lkZUZsYWdzID0gT3BDbGlwU2lkZUZsYWdzOjpGdWxsOworICAgIGNvbnN0IFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeworICAgICAgICByZXR1cm4gY2xpcFN0YXRlLT5yZWN0OworICAgIH0KKworICAgIGJvb2wgcmVxdWlyZXNDbGlwKCkgY29uc3QgeworICAgICAgICByZXR1cm4gY2xpcFNpZGVGbGFncyAhPSBPcENsaXBTaWRlRmxhZ3M6Ok5vbmUKKyAgICAgICAgICAgICAgIHx8IENDX1VOTElLRUxZKGNsaXBTdGF0ZS0+bW9kZSAhPSBDbGlwTW9kZTo6UmVjdGFuZ2xlKTsKKyAgICB9CisKKyAgICAvLyByZXR1cm5zIHRoZSBjbGlwIGlmIGl0J3MgbmVlZGVkIHRvIGRyYXcgdGhlIG9wZXJhdGlvbiwgb3RoZXJ3aXNlIG51bGxwdHIKKyAgICBjb25zdCBDbGlwQmFzZSogZ2V0Q2xpcElmTmVlZGVkKCkgY29uc3QgeworICAgICAgICByZXR1cm4gcmVxdWlyZXNDbGlwKCkgPyBjbGlwU3RhdGUgOiBudWxscHRyOwogICAgIH0KIAogICAgIE1hdHJpeDQgdHJhbnNmb3JtOwotICAgIFJlY3QgY2xpcFJlY3Q7Ci0gICAgaW50IGNsaXBTaWRlRmxhZ3MgPSAwOworICAgIGNvbnN0IENsaXBCYXNlKiBjbGlwU3RhdGUgPSBudWxscHRyOwogICAgIFJlY3QgY2xpcHBlZEJvdW5kczsKKyAgICBpbnQgY2xpcFNpZGVGbGFncyA9IDA7CiB9OwogCiAvKioKQEAgLTEzOCw4ICs5OCwxMCBAQAogY2xhc3MgQmFrZWRPcFN0YXRlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgQmFrZWRPcFN0YXRlKiB0cnlDb25zdHJ1Y3QoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCi0gICAgICAgICAgICBjb25zdCBTbmFwc2hvdCYgc25hcHNob3QsIGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3ApIHsKLSAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gbmV3IChhbGxvY2F0b3IpIEJha2VkT3BTdGF0ZShzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICAgICAgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wKSB7CisgICAgICAgIGlmIChDQ19VTkxJS0VMWShzbmFwc2hvdC5nZXRSZW5kZXJUYXJnZXRDbGlwKCkuaXNFbXB0eSgpKSkgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IG5ldyAoYWxsb2NhdG9yKSBCYWtlZE9wU3RhdGUoCisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOwogICAgICAgICBpZiAoYmFrZWRTdGF0ZS0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gYm91bmRzIGFyZSBlbXB0eSwgc28gb3AgaXMgcmVqZWN0ZWQKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXdpbmRJZkxhc3RBbGxvYyhiYWtlZFN0YXRlKTsKQEAgLTE1NiwxNSArMTE4LDE3IEBACiAgICAgfTsKIAogICAgIHN0YXRpYyBCYWtlZE9wU3RhdGUqIHRyeVN0cm9rZWFibGVPcENvbnN0cnVjdChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKLSAgICAgICAgICAgIGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgU3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKKyAgICAgICAgICAgIFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgU3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKKyAgICAgICAgaWYgKENDX1VOTElLRUxZKHNuYXBzaG90LmdldFJlbmRlclRhcmdldENsaXAoKS5pc0VtcHR5KCkpKSByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgYm9vbCBleHBhbmRGb3JTdHJva2UgPSAoc3Ryb2tlQmVoYXZpb3IgPT0gU3Ryb2tlQmVoYXZpb3I6OlN0eWxlRGVmaW5lZCkKICAgICAgICAgICAgICAgICA/IChyZWNvcmRlZE9wLnBhaW50ICYmIHJlY29yZGVkT3AucGFpbnQtPmdldFN0eWxlKCkgIT0gU2tQYWludDo6a0ZpbGxfU3R5bGUpCiAgICAgICAgICAgICAgICAgOiB0cnVlOwogCiAgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IG5ldyAoYWxsb2NhdG9yKSBCYWtlZE9wU3RhdGUoCi0gICAgICAgICAgICAgICAgc25hcHNob3QsIHJlY29yZGVkT3AsIGV4cGFuZEZvclN0cm9rZSk7CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBzbmFwc2hvdCwgcmVjb3JkZWRPcCwgZXhwYW5kRm9yU3Ryb2tlKTsKICAgICAgICAgaWYgKGJha2VkU3RhdGUtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8vIGJvdW5kcyBhcmUgZW1wdHksIHNvIG9wIGlzIHJlamVjdGVkCisgICAgICAgICAgICAvLyBOT1RFOiB0aGlzIHdvbid0IHN1Y2NlZWQgaWYgYSBjbGlwIHdhcyBhbGxvY2F0ZWQKICAgICAgICAgICAgIGFsbG9jYXRvci5yZXdpbmRJZkxhc3RBbGxvYyhiYWtlZFN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CkBAIC0xNzIsMTEgKzEzNiwxNiBAQAogICAgIH0KIAogICAgIHN0YXRpYyBCYWtlZE9wU3RhdGUqIHRyeVNoYWRvd09wQ29uc3RydWN0KExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLAotICAgICAgICAgICAgY29uc3QgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBTaGFkb3dPcCogc2hhZG93T3BQdHIpIHsKLSAgICAgICAgaWYgKHNuYXBzaG90LmdldFJlbmRlclRhcmdldENsaXAoKS5pc0VtcHR5KCkpIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBTaGFkb3dPcCogc2hhZG93T3BQdHIpIHsKKyAgICAgICAgaWYgKENDX1VOTElLRUxZKHNuYXBzaG90LmdldFJlbmRlclRhcmdldENsaXAoKS5pc0VtcHR5KCkpKSByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAvLyBjbGlwIGlzbid0IGVtcHR5LCBzbyBjb25zdHJ1Y3QgdGhlIG9wCi0gICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRvcikgQmFrZWRPcFN0YXRlKHNuYXBzaG90LCBzaGFkb3dPcFB0cik7CisgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRvcikgQmFrZWRPcFN0YXRlKGFsbG9jYXRvciwgc25hcHNob3QsIHNoYWRvd09wUHRyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQmFrZWRPcFN0YXRlKiBkaXJlY3RDb25zdHJ1Y3QoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCisgICAgICAgICAgICBjb25zdCBDbGlwUmVjdCogY2xpcCwgY29uc3QgUmVjdCYgZHN0UmVjdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCkgeworICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0b3IpIEJha2VkT3BTdGF0ZShjbGlwLCBkc3RSZWN0LCByZWNvcmRlZE9wKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvcikgewpAQCAtMTg0LDcgKzE1Myw3IEBACiAgICAgfQogCiAgICAgLy8gY29tcHV0ZWQgc3RhdGU6Ci0gICAgY29uc3QgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBjb21wdXRlZFN0YXRlOworICAgIFJlc29sdmVkUmVuZGVyU3RhdGUgY29tcHV0ZWRTdGF0ZTsKIAogICAgIC8vIHNpbXBsZSBzdGF0ZSAoc3RyYWlnaHQgcG9pbnRlci92YWx1ZSBzdG9yYWdlKToKICAgICBjb25zdCBmbG9hdCBhbHBoYTsKQEAgLTE5MywxOSArMTYyLDI3IEBACiAgICAgY29uc3QgUmVjb3JkZWRPcCogb3A7CiAKIHByaXZhdGU6Ci0gICAgQmFrZWRPcFN0YXRlKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCwgYm9vbCBleHBhbmRGb3JTdHJva2UpCi0gICAgICAgICAgICA6IGNvbXB1dGVkU3RhdGUoc25hcHNob3QsIHJlY29yZGVkT3AsIGV4cGFuZEZvclN0cm9rZSkKKyAgICBCYWtlZE9wU3RhdGUoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsIFNuYXBzaG90JiBzbmFwc2hvdCwKKyAgICAgICAgICAgIGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3AsIGJvb2wgZXhwYW5kRm9yU3Ryb2tlKQorICAgICAgICAgICAgOiBjb21wdXRlZFN0YXRlKGFsbG9jYXRvciwgc25hcHNob3QsIHJlY29yZGVkT3AsIGV4cGFuZEZvclN0cm9rZSkKICAgICAgICAgICAgICwgYWxwaGEoc25hcHNob3QuYWxwaGEpCiAgICAgICAgICAgICAsIHJvdW5kUmVjdENsaXBTdGF0ZShzbmFwc2hvdC5yb3VuZFJlY3RDbGlwU3RhdGUpCiAgICAgICAgICAgICAsIHByb2plY3Rpb25QYXRoTWFzayhzbmFwc2hvdC5wcm9qZWN0aW9uUGF0aE1hc2spCiAgICAgICAgICAgICAsIG9wKCZyZWNvcmRlZE9wKSB7fQogCi0gICAgQmFrZWRPcFN0YXRlKGNvbnN0IFNuYXBzaG90JiBzbmFwc2hvdCwgY29uc3QgU2hhZG93T3AqIHNoYWRvd09wUHRyKQotICAgICAgICAgICAgOiBjb21wdXRlZFN0YXRlKHNuYXBzaG90KQorICAgIEJha2VkT3BTdGF0ZShMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwgU25hcHNob3QmIHNuYXBzaG90LCBjb25zdCBTaGFkb3dPcCogc2hhZG93T3BQdHIpCisgICAgICAgICAgICA6IGNvbXB1dGVkU3RhdGUoYWxsb2NhdG9yLCBzbmFwc2hvdCkKICAgICAgICAgICAgICwgYWxwaGEoc25hcHNob3QuYWxwaGEpCiAgICAgICAgICAgICAsIHJvdW5kUmVjdENsaXBTdGF0ZShzbmFwc2hvdC5yb3VuZFJlY3RDbGlwU3RhdGUpCiAgICAgICAgICAgICAsIHByb2plY3Rpb25QYXRoTWFzayhzbmFwc2hvdC5wcm9qZWN0aW9uUGF0aE1hc2spCiAgICAgICAgICAgICAsIG9wKHNoYWRvd09wUHRyKSB7fQorCisgICAgQmFrZWRPcFN0YXRlKGNvbnN0IENsaXBSZWN0KiB2aWV3cG9ydFJlY3QsIGNvbnN0IFJlY3QmIGRzdFJlY3QsIGNvbnN0IFJlY29yZGVkT3AmIHJlY29yZGVkT3ApCisgICAgICAgICAgICA6IGNvbXB1dGVkU3RhdGUodmlld3BvcnRSZWN0LCBkc3RSZWN0KQorICAgICAgICAgICAgLCBhbHBoYSgxLjBmKQorICAgICAgICAgICAgLCByb3VuZFJlY3RDbGlwU3RhdGUobnVsbHB0cikKKyAgICAgICAgICAgICwgcHJvamVjdGlvblBhdGhNYXNrKG51bGxwdHIpCisgICAgICAgICAgICAsIG9wKCZyZWNvcmRlZE9wKSB7fQogfTsKIAogfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DYWNoZXMuY3BwIGIvbGlicy9od3VpL0NhY2hlcy5jcHAKaW5kZXggOTRhMTFmMS4uZWFhMWMzMyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0NhY2hlcy5jcHAKKysrIGIvbGlicy9od3VpL0NhY2hlcy5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiB2b2lkIENhY2hlczo6dGVybWluYXRlKCkgewogICAgIGlmICghbUluaXRpYWxpemVkKSByZXR1cm47Ci0gICAgbVJlZ2lvbk1lc2gucmVsZWFzZSgpOworICAgIG1SZWdpb25NZXNoLnJlc2V0KG51bGxwdHIpOwogCiAgICAgZmJvQ2FjaGUuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0NhbnZhc1N0YXRlLmNwcCBiL2xpYnMvaHd1aS9DYW52YXNTdGF0ZS5jcHAKaW5kZXggNmE2Y2M0Mi4uY2YyNzI2YiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0NhbnZhc1N0YXRlLmNwcAorKysgYi9saWJzL2h3dWkvQ2FudmFzU3RhdGUuY3BwCkBAIC00NSw2ICs0NSwyMSBAQAogICAgIH0KIH0KIAordm9pZCBDYW52YXNTdGF0ZTo6aW5pdGlhbGl6ZVJlY29yZGluZ1NhdmVTdGFjayhpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgaWYgKG1XaWR0aCAhPSB2aWV3cG9ydFdpZHRoIHx8IG1IZWlnaHQgIT0gdmlld3BvcnRIZWlnaHQpIHsKKyAgICAgICAgbVdpZHRoID0gdmlld3BvcnRXaWR0aDsKKyAgICAgICAgbUhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0OworICAgICAgICBtRmlyc3RTbmFwc2hvdC5pbml0aWFsaXplVmlld3BvcnQodmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOworICAgICAgICBtQ2FudmFzLm9uVmlld3BvcnRJbml0aWFsaXplZCgpOworICAgIH0KKworICAgIGZyZWVBbGxTbmFwc2hvdHMoKTsKKyAgICBtU25hcHNob3QgPSBhbGxvY1NuYXBzaG90KCZtRmlyc3RTbmFwc2hvdCwKKyAgICAgICAgICAgIFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnIHwgU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnKTsKKyAgICBtU25hcHNob3QtPnNldFJlbGF0aXZlTGlnaHRDZW50ZXIoVmVjdG9yMygpKTsKKyAgICBtU2F2ZUNvdW50ID0gMTsKK30KKwogdm9pZCBDYW52YXNTdGF0ZTo6aW5pdGlhbGl6ZVNhdmVTdGFjaygKICAgICAgICAgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCwKICAgICAgICAgZmxvYXQgY2xpcExlZnQsIGZsb2F0IGNsaXBUb3AsCkBAIC0xOTIsNyArMjA3LDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogYm9vbCBDYW52YXNTdGF0ZTo6Y2xpcFJlY3QoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBTa1JlZ2lvbjo6T3Agb3ApIHsKLSAgICBtU25hcHNob3QtPmNsaXAobGVmdCwgdG9wLCByaWdodCwgYm90dG9tLCBvcCk7CisgICAgbVNuYXBzaG90LT5jbGlwKFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwgb3ApOwogICAgIG1EaXJ0eUNsaXAgPSB0cnVlOwogICAgIHJldHVybiAhbVNuYXBzaG90LT5jbGlwSXNFbXB0eSgpOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0NhbnZhc1N0YXRlLmggYi9saWJzL2h3dWkvQ2FudmFzU3RhdGUuaAppbmRleCA0NzA5ZWY0Li5iOWU4N2FlIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvQ2FudmFzU3RhdGUuaAorKysgYi9saWJzL2h3dWkvQ2FudmFzU3RhdGUuaApAQCAtODAsNiArODAsMTIgQEAKICAgICAgKiBJbml0aWFsaXplcyB0aGUgZmlyc3Qgc25hcHNob3QsIGNvbXB1dGluZyB0aGUgcHJvamVjdGlvbiBtYXRyaXgsCiAgICAgICogYW5kIHN0b3JlcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVuZGVyIHRhcmdldC4KICAgICAgKi8KKyAgICB2b2lkIGluaXRpYWxpemVSZWNvcmRpbmdTYXZlU3RhY2soaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCk7CisKKyAgICAvKioKKyAgICAgKiBJbml0aWFsaXplcyB0aGUgZmlyc3Qgc25hcHNob3QsIGNvbXB1dGluZyB0aGUgcHJvamVjdGlvbiBtYXRyaXgsCisgICAgICogYW5kIHN0b3JlcyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcmVuZGVyIHRhcmdldC4KKyAgICAgKi8KICAgICB2b2lkIGluaXRpYWxpemVTYXZlU3RhY2soaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCwKICAgICAgICAgICAgIGZsb2F0IGNsaXBMZWZ0LCBmbG9hdCBjbGlwVG9wLCBmbG9hdCBjbGlwUmlnaHQsIGZsb2F0IGNsaXBCb3R0b20sCiAgICAgICAgICAgICBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlcik7CkBAIC0xNjgsNiArMTc0LDcgQEAKICAgICB2b2lkIGZyZWVBbGxTbmFwc2hvdHMoKTsKIAogICAgIC8vLyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpcCBoYXMgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRpbWUgaXQgd2FzIGNvbnN1bWVkCisgICAgLy8gVE9ETzogZGVsZXRlIHdoZW4gc3dpdGNoaW5nIHRvIEhXVUlfTkVXX09QUwogICAgIGJvb2wgbURpcnR5Q2xpcDsKIAogICAgIC8vLyBEaW1lbnNpb25zIG9mIHRoZSBkcmF3aW5nIHN1cmZhY2UKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DbGlwQXJlYS5jcHAgYi9saWJzL2h3dWkvQ2xpcEFyZWEuY3BwCmluZGV4IGZkNmYwYjUuLjE2MDA5MGQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9DbGlwQXJlYS5jcHAKKysrIGIvbGlicy9od3VpL0NsaXBBcmVhLmNwcApAQCAtMTUsMTAgKzE1LDExIEBACiAgKi8KICNpbmNsdWRlICJDbGlwQXJlYS5oIgogCisjaW5jbHVkZSAidXRpbHMvTGluZWFyQWxsb2NhdG9yLmgiCisKICNpbmNsdWRlIDxTa1BhdGguaD4KICNpbmNsdWRlIDxsaW1pdHM+Ci0KLSNpbmNsdWRlICJSZWN0LmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKQEAgLTE3MSwxMiArMTcyLDE4IEBACiAgICAgcmV0dXJuIHJlY3RhbmdsZUxpc3RBc1JlZ2lvbjsKIH0KIAordm9pZCBSZWN0YW5nbGVMaXN0Ojp0cmFuc2Zvcm0oY29uc3QgTWF0cml4NCYgdHJhbnNmb3JtKSB7CisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG1UcmFuc2Zvcm1lZFJlY3RhbmdsZXNDb3VudDsgaW5kZXgrKykgeworICAgICAgICBtVHJhbnNmb3JtZWRSZWN0YW5nbGVzW2luZGV4XS50cmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICB9Cit9CisKIC8qCiAgKiBDbGlwQXJlYQogICovCiAKIENsaXBBcmVhOjpDbGlwQXJlYSgpCi0gICAgICAgIDogbU1vZGUoTW9kZTo6UmVjdGFuZ2xlKSB7CisgICAgICAgIDogbU1vZGUoQ2xpcE1vZGU6OlJlY3RhbmdsZSkgewogfQogCiAvKgpAQCAtMTg0LDQ1ICsxOTEsNDQgQEAKICAqLwogCiB2b2lkIENsaXBBcmVhOjpzZXRWaWV3cG9ydERpbWVuc2lvbnMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgbVBvc3RWaWV3cG9ydENsaXBPYnNlcnZlZCA9IGZhbHNlOwogICAgIG1WaWV3cG9ydEJvdW5kcy5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgbUNsaXBSZWN0ID0gbVZpZXdwb3J0Qm91bmRzOwogfQogCiB2b2lkIENsaXBBcmVhOjpzZXRFbXB0eSgpIHsKLSAgICBtTW9kZSA9IE1vZGU6OlJlY3RhbmdsZTsKKyAgICBvbkNsaXBVcGRhdGVkKCk7CisgICAgbU1vZGUgPSBDbGlwTW9kZTo6UmVjdGFuZ2xlOwogICAgIG1DbGlwUmVjdC5zZXRFbXB0eSgpOwogICAgIG1DbGlwUmVnaW9uLnNldEVtcHR5KCk7CiAgICAgbVJlY3RhbmdsZUxpc3Quc2V0RW1wdHkoKTsKIH0KIAogdm9pZCBDbGlwQXJlYTo6c2V0Q2xpcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pIHsKLSAgICBtTW9kZSA9IE1vZGU6OlJlY3RhbmdsZTsKKyAgICBvbkNsaXBVcGRhdGVkKCk7CisgICAgbU1vZGUgPSBDbGlwTW9kZTo6UmVjdGFuZ2xlOwogICAgIG1DbGlwUmVjdC5zZXQobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKICAgICBtQ2xpcFJlZ2lvbi5zZXRFbXB0eSgpOwogfQogCi12b2lkIENsaXBBcmVhOjpjbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwKLSAgICAgICAgZmxvYXQgYm90dG9tLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCkgewotICAgIFJlY3QgcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIGNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKLX0KLQogdm9pZCBDbGlwQXJlYTo6Y2xpcFJlY3RXaXRoVHJhbnNmb3JtKGNvbnN0IFJlY3QmIHIsIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwKICAgICAgICAgU2tSZWdpb246Ok9wIG9wKSB7CisgICAgb25DbGlwVXBkYXRlZCgpOwogICAgIHN3aXRjaCAobU1vZGUpIHsKLSAgICBjYXNlIE1vZGU6OlJlY3RhbmdsZToKKyAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGU6CiAgICAgICAgIHJlY3RhbmdsZU1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0ociwgdHJhbnNmb3JtLCBvcCk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTW9kZTo6UmVjdGFuZ2xlTGlzdDoKKyAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0OgogICAgICAgICByZWN0YW5nbGVMaXN0TW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNb2RlOjpSZWdpb246CisgICAgY2FzZSBDbGlwTW9kZTo6UmVnaW9uOgogICAgICAgICByZWdpb25Nb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKHIsIHRyYW5zZm9ybSwgb3ApOwogICAgICAgICBicmVhazsKICAgICB9CiB9CiAKIHZvaWQgQ2xpcEFyZWE6OmNsaXBSZWdpb24oY29uc3QgU2tSZWdpb24mIHJlZ2lvbiwgU2tSZWdpb246Ok9wIG9wKSB7CisgICAgb25DbGlwVXBkYXRlZCgpOwogICAgIGVudGVyUmVnaW9uTW9kZSgpOwogICAgIG1DbGlwUmVnaW9uLm9wKHJlZ2lvbiwgb3ApOwogICAgIG9uQ2xpcFJlZ2lvblVwZGF0ZWQoKTsKQEAgLTIzMCw2ICsyMzYsNyBAQAogCiB2b2lkIENsaXBBcmVhOjpjbGlwUGF0aFdpdGhUcmFuc2Zvcm0oY29uc3QgU2tQYXRoJiBwYXRoLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sCiAgICAgICAgIFNrUmVnaW9uOjpPcCBvcCkgeworICAgIG9uQ2xpcFVwZGF0ZWQoKTsKICAgICBTa01hdHJpeCBza1RyYW5zZm9ybTsKICAgICB0cmFuc2Zvcm0tPmNvcHlUbyhza1RyYW5zZm9ybSk7CiAgICAgU2tQYXRoIHRyYW5zZm9ybWVkOwpAQCAtMjQ3LDcgKzI1NCw3IEBACiAgICAgLy8gRW50ZXJpbmcgcmVjdGFuZ2xlIG1vZGUgZGlzY2FyZHMgYW55CiAgICAgLy8gZXhpc3RpbmcgY2xpcHBpbmcgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3RoZXIgbW9kZXMuCiAgICAgLy8gVGhlIG9ubHkgd2F5IHRoaXMgb2NjdXJzIGlzIGJ5IGEgY2xpcCBzZXR0aW5nIG9wZXJhdGlvbi4KLSAgICBtTW9kZSA9IE1vZGU6OlJlY3RhbmdsZTsKKyAgICBtTW9kZSA9IENsaXBNb2RlOjpSZWN0YW5nbGU7CiB9CiAKIHZvaWQgQ2xpcEFyZWE6OnJlY3RhbmdsZU1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oY29uc3QgUmVjdCYgciwKQEAgLTI3NCwxMyArMjgxLDYgQEAKICAgICByZWN0YW5nbGVMaXN0TW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKIH0KIAotdm9pZCBDbGlwQXJlYTo6cmVjdGFuZ2xlTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsCi0gICAgICAgIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKSB7Ci0gICAgUmVjdCByKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7Ci0gICAgcmVjdGFuZ2xlTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShyLCB0cmFuc2Zvcm0sIG9wKTsKLSAgICBtQ2xpcFJlY3QgPSBtUmVjdGFuZ2xlTGlzdC5jYWxjdWxhdGVCb3VuZHMoKTsKLX0KLQogLyoKICAqIFJlY3RhbmdsZUxpc3QgbW9kZSBpbXBsZW1lbnRhdGlvbgogICovCkBAIC0yODksOCArMjg5LDggQEAKICAgICAvLyBJcyBpcyBvbmx5IGxlZ2FsIHRvIGVudGVyIHJlY3RhbmdsZSBsaXN0IG1vZGUgZnJvbQogICAgIC8vIHJlY3RhbmdsZSBtb2RlLCBzaW5jZSByZWN0YW5nbGUgbGlzdCBtb2RlIGNhbm5vdCByZXByZXNlbnQKICAgICAvLyBhbGwgY2xpcCBhcmVhcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBieSBhIHJlZ2lvbi4KLSAgICBBTE9HX0FTU0VSVChtTW9kZSA9PSBNb2RlOjpSZWN0YW5nbGUpOwotICAgIG1Nb2RlID0gTW9kZTo6UmVjdGFuZ2xlTGlzdDsKKyAgICBBTE9HX0FTU0VSVChtTW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlKTsKKyAgICBtTW9kZSA9IENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0OwogICAgIG1SZWN0YW5nbGVMaXN0LnNldChtQ2xpcFJlY3QsIE1hdHJpeDQ6OmlkZW50aXR5KCkpOwogfQogCkBAIC0zMDMsMjMgKzMwMywxNiBAQAogICAgIH0KIH0KIAotdm9pZCBDbGlwQXJlYTo6cmVjdGFuZ2xlTGlzdE1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAotICAgICAgICBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCkgewotICAgIFJlY3QgcihsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwotICAgIHJlY3RhbmdsZUxpc3RNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKHIsIHRyYW5zZm9ybSwgb3ApOwotfQotCiAvKgogICogUmVnaW9uIG1vZGUgaW1wbGVtZW50YXRpb24KICAqLwogCiB2b2lkIENsaXBBcmVhOjplbnRlclJlZ2lvbk1vZGUoKSB7Ci0gICAgTW9kZSBvbGRNb2RlID0gbU1vZGU7Ci0gICAgbU1vZGUgPSBNb2RlOjpSZWdpb247Ci0gICAgaWYgKG9sZE1vZGUgIT0gTW9kZTo6UmVnaW9uKSB7Ci0gICAgICAgIGlmIChvbGRNb2RlID09IE1vZGU6OlJlY3RhbmdsZSkgewotICAgICAgICAgICAgbUNsaXBSZWdpb24uc2V0UmVjdChtQ2xpcFJlY3QubGVmdCwgbUNsaXBSZWN0LnRvcCwKLSAgICAgICAgICAgICAgICAgICAgbUNsaXBSZWN0LnJpZ2h0LCBtQ2xpcFJlY3QuYm90dG9tKTsKKyAgICBDbGlwTW9kZSBvbGRNb2RlID0gbU1vZGU7CisgICAgbU1vZGUgPSBDbGlwTW9kZTo6UmVnaW9uOworICAgIGlmIChvbGRNb2RlICE9IENsaXBNb2RlOjpSZWdpb24pIHsKKyAgICAgICAgaWYgKG9sZE1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSkgeworICAgICAgICAgICAgbUNsaXBSZWdpb24uc2V0UmVjdChtQ2xpcFJlY3QudG9Ta0lSZWN0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbUNsaXBSZWdpb24gPSBtUmVjdGFuZ2xlTGlzdC5jb252ZXJ0VG9SZWdpb24oY3JlYXRlVmlld3BvcnRSZWdpb24oKSk7CiAgICAgICAgICAgICBvbkNsaXBSZWdpb25VcGRhdGVkKCk7CkBAIC0zMzYsMTEgKzMyOSw2IEBACiAgICAgb25DbGlwUmVnaW9uVXBkYXRlZCgpOwogfQogCi12b2lkIENsaXBBcmVhOjpyZWdpb25Nb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwKLSAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApIHsKLSAgICByZWdpb25Nb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwgdHJhbnNmb3JtLCBvcCk7Ci19Ci0KIHZvaWQgQ2xpcEFyZWE6Om9uQ2xpcFJlZ2lvblVwZGF0ZWQoKSB7CiAgICAgaWYgKCFtQ2xpcFJlZ2lvbi5pc0VtcHR5KCkpIHsKICAgICAgICAgbUNsaXBSZWN0LnNldChtQ2xpcFJlZ2lvbi5nZXRCb3VuZHMoKSk7CkBAIC0zNTQsNSArMzQyLDE3MiBAQAogICAgIH0KIH0KIAorLyoqCisgKiBDbGlwIHNlcmlhbGl6YXRpb24KKyAqLworCitjb25zdCBDbGlwQmFzZSogQ2xpcEFyZWE6OnNlcmlhbGl6ZUNsaXAoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICBpZiAoIW1Qb3N0Vmlld3BvcnRDbGlwT2JzZXJ2ZWQpIHsKKyAgICAgICAgLy8gT25seSBpbml0aWFsIGNsaXAtdG8tdmlld3BvcnQgb2JzZXJ2ZWQsIHNvIG5vIHNlcmlhbGl6YXRpb24gb2YgY2xpcCBuZWNlc3NhcnkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8UmVjdD46OnZhbHVlLAorICAgICAgICAgICAgImV4cGVjdCBSZWN0IHRvIGJlIHRyaXZpYWxseSBkZXN0cnVjdGlibGUiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxSZWN0YW5nbGVMaXN0Pjo6dmFsdWUsCisgICAgICAgICAgICAiZXhwZWN0IFJlY3RhbmdsZUxpc3QgdG8gYmUgdHJpdmlhbGx5IGRlc3RydWN0aWJsZSIpOworCisgICAgaWYgKG1MYXN0U2VyaWFsaXphdGlvbiA9PSBudWxscHRyKSB7CisgICAgICAgIHN3aXRjaCAobU1vZGUpIHsKKyAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlOgorICAgICAgICAgICAgbUxhc3RTZXJpYWxpemF0aW9uID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVjdD4obUNsaXBSZWN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0OgorICAgICAgICAgICAgbUxhc3RTZXJpYWxpemF0aW9uID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVjdExpc3Q+KG1SZWN0YW5nbGVMaXN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWdpb246CisgICAgICAgICAgICBtTGFzdFNlcmlhbGl6YXRpb24gPSBhbGxvY2F0b3IuY3JlYXRlPENsaXBSZWdpb24+KG1DbGlwUmVnaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtTGFzdFNlcmlhbGl6YXRpb247Cit9CisKK2lubGluZSBzdGF0aWMgY29uc3QgUmVjdCYgZ2V0UmVjdChjb25zdCBDbGlwQmFzZSogc2NiKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3QqPihzY2IpLT5yZWN0OworfQorCitpbmxpbmUgc3RhdGljIGNvbnN0IFJlY3RhbmdsZUxpc3QmIGdldFJlY3RMaXN0KGNvbnN0IENsaXBCYXNlKiBzY2IpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdExpc3QqPihzY2IpLT5yZWN0TGlzdDsKK30KKworaW5saW5lIHN0YXRpYyBjb25zdCBTa1JlZ2lvbiYgZ2V0UmVnaW9uKGNvbnN0IENsaXBCYXNlKiBzY2IpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVnaW9uKj4oc2NiKS0+cmVnaW9uOworfQorCisvLyBDb25zZXJ2YXRpdmUgY2hlY2sgZm9yIHRvbyBtYW55IHJlY3RhbmdsZXMgdG8gZml0IGluIHJlY3RhbmdsZSBsaXN0LgorLy8gRm9yIHNpbXBsaWNpdHksIGRvZXNuJ3QgYWNjb3VudCBmb3IgcmVjdCBtZXJnaW5nCitzdGF0aWMgYm9vbCBjYW5ub3RGaXRJblJlY3RhbmdsZUxpc3QoY29uc3QgQ2xpcEFyZWEmIGNsaXBBcmVhLCBjb25zdCBDbGlwQmFzZSogc2NiKSB7CisgICAgaW50IGN1cnJlbnRSZWN0Q291bnQgPSBjbGlwQXJlYS5pc1JlY3RhbmdsZUxpc3QoKQorICAgICAgICAgICAgPyBjbGlwQXJlYS5nZXRSZWN0YW5nbGVMaXN0KCkuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKQorICAgICAgICAgICAgOiAxOworICAgIGludCByZWNvcmRlZFJlY3RDb3VudCA9IChzY2ItPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QpCisgICAgICAgICAgICA/IGdldFJlY3RMaXN0KHNjYikuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKQorICAgICAgICAgICAgOiAxOworICAgIHJldHVybiBjdXJyZW50UmVjdENvdW50ICsgcmVjb3JkZWRSZWN0Q291bnQgPiBSZWN0YW5nbGVMaXN0OjprTWF4VHJhbnNmb3JtZWRSZWN0YW5nbGVzOworfQorCitjb25zdCBDbGlwQmFzZSogQ2xpcEFyZWE6OnNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKKyAgICAgICAgY29uc3QgQ2xpcEJhc2UqIHJlY29yZGVkQ2xpcCwgY29uc3QgTWF0cml4NCYgcmVjb3JkZWRDbGlwVHJhbnNmb3JtKSB7CisgICAgLy8gaWYgbm8gcmVjb3JkZWRDbGlwIHBhc3NlZCwganVzdCBzZXJpYWxpemUgY3VycmVudCBzdGF0ZQorICAgIGlmICghcmVjb3JkZWRDbGlwKSByZXR1cm4gc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpOworCisgICAgaWYgKCFtTGFzdFJlc29sdXRpb25SZXN1bHQKKyAgICAgICAgICAgIHx8IHJlY29yZGVkQ2xpcCAhPSBtTGFzdFJlc29sdXRpb25DbGlwCisgICAgICAgICAgICB8fCByZWNvcmRlZENsaXBUcmFuc2Zvcm0gIT0gbUxhc3RSZXNvbHV0aW9uVHJhbnNmb3JtKSB7CisgICAgICAgIG1MYXN0UmVzb2x1dGlvbkNsaXAgPSByZWNvcmRlZENsaXA7CisgICAgICAgIG1MYXN0UmVzb2x1dGlvblRyYW5zZm9ybSA9IHJlY29yZGVkQ2xpcFRyYW5zZm9ybTsKKworICAgICAgICBpZiAoQ0NfTElLRUxZKG1Nb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUKKyAgICAgICAgICAgICAgICAmJiByZWNvcmRlZENsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZQorICAgICAgICAgICAgICAgICYmIHJlY29yZGVkQ2xpcFRyYW5zZm9ybS5yZWN0VG9SZWN0KCkpKSB7CisgICAgICAgICAgICAvLyBjb21tb24gY2FzZSAtIHJlc3VsdCBpcyBhIHNpbmdsZSByZWN0YW5nbGUKKyAgICAgICAgICAgIGF1dG8gcmVjdENsaXAgPSBhbGxvY2F0b3IuY3JlYXRlPENsaXBSZWN0PihnZXRSZWN0KHJlY29yZGVkQ2xpcCkpOworICAgICAgICAgICAgcmVjb3JkZWRDbGlwVHJhbnNmb3JtLm1hcFJlY3QocmVjdENsaXAtPnJlY3QpOworICAgICAgICAgICAgcmVjdENsaXAtPnJlY3QuZG9JbnRlcnNlY3QobUNsaXBSZWN0KTsKKyAgICAgICAgICAgIG1MYXN0UmVzb2x1dGlvblJlc3VsdCA9IHJlY3RDbGlwOworICAgICAgICB9IGVsc2UgaWYgKENDX1VOTElLRUxZKG1Nb2RlID09IENsaXBNb2RlOjpSZWdpb24KKyAgICAgICAgICAgICAgICB8fCByZWNvcmRlZENsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlZ2lvbgorICAgICAgICAgICAgICAgIHx8IGNhbm5vdEZpdEluUmVjdGFuZ2xlTGlzdCgqdGhpcywgcmVjb3JkZWRDbGlwKSkpIHsKKyAgICAgICAgICAgIC8vIHJlZ2lvbiBjYXNlCisgICAgICAgICAgICBTa1JlZ2lvbiBvdGhlcjsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3JkZWRDbGlwLT5tb2RlKSB7CisgICAgICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGU6CisgICAgICAgICAgICAgICAgaWYgKENDX0xJS0VMWShyZWNvcmRlZENsaXBUcmFuc2Zvcm0ucmVjdFRvUmVjdCgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBzaW1wbGUgdHJhbnNmb3JtLCBza2lwIGNyZWF0aW5nIFNrUGF0aAorICAgICAgICAgICAgICAgICAgICBSZWN0IHJlc3VsdENsaXAoZ2V0UmVjdChyZWNvcmRlZENsaXApKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkZWRDbGlwVHJhbnNmb3JtLm1hcFJlY3QocmVzdWx0Q2xpcCk7CisgICAgICAgICAgICAgICAgICAgIG90aGVyLnNldFJlY3QocmVzdWx0Q2xpcC50b1NrSVJlY3QoKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgU2tQYXRoIHRyYW5zZm9ybWVkUmVjdCA9IHBhdGhGcm9tVHJhbnNmb3JtZWRSZWN0YW5nbGUoZ2V0UmVjdChyZWNvcmRlZENsaXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkQ2xpcFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgIG90aGVyLnNldFBhdGgodHJhbnNmb3JtZWRSZWN0LCBjcmVhdGVWaWV3cG9ydFJlZ2lvbigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0OiB7CisgICAgICAgICAgICAgICAgUmVjdGFuZ2xlTGlzdCB0cmFuc2Zvcm1lZExpc3QoZ2V0UmVjdExpc3QocmVjb3JkZWRDbGlwKSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRMaXN0LnRyYW5zZm9ybShyZWNvcmRlZENsaXBUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIG90aGVyID0gdHJhbnNmb3JtZWRMaXN0LmNvbnZlcnRUb1JlZ2lvbihjcmVhdGVWaWV3cG9ydFJlZ2lvbigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ2xpcE1vZGU6OlJlZ2lvbjoKKyAgICAgICAgICAgICAgICBvdGhlciA9IGdldFJlZ2lvbihyZWNvcmRlZENsaXApOworCisgICAgICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIG5vbi10cmFuc2xhdGUgdHJhbnNmb3JtcyBwcm9wZXJseSEKKyAgICAgICAgICAgICAgICBvdGhlci50cmFuc2xhdGUocmVjb3JkZWRDbGlwVHJhbnNmb3JtLmdldFRyYW5zbGF0ZVgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZGVkQ2xpcFRyYW5zZm9ybS5nZXRUcmFuc2xhdGVZKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDbGlwUmVnaW9uKiByZWdpb25DbGlwID0gYWxsb2NhdG9yLmNyZWF0ZTxDbGlwUmVnaW9uPigpOworICAgICAgICAgICAgc3dpdGNoIChtTW9kZSkgeworICAgICAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVjdGFuZ2xlOgorICAgICAgICAgICAgICAgIHJlZ2lvbkNsaXAtPnJlZ2lvbi5vcChtQ2xpcFJlY3QudG9Ta0lSZWN0KCksIG90aGVyLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0OgorICAgICAgICAgICAgICAgIHJlZ2lvbkNsaXAtPnJlZ2lvbi5vcChtUmVjdGFuZ2xlTGlzdC5jb252ZXJ0VG9SZWdpb24oY3JlYXRlVmlld3BvcnRSZWdpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDbGlwTW9kZTo6UmVnaW9uOgorICAgICAgICAgICAgICAgIHJlZ2lvbkNsaXAtPnJlZ2lvbi5vcChtQ2xpcFJlZ2lvbiwgb3RoZXIsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlZ2lvbkNsaXAtPnJlY3Quc2V0KHJlZ2lvbkNsaXAtPnJlZ2lvbi5nZXRCb3VuZHMoKSk7CisgICAgICAgICAgICBtTGFzdFJlc29sdXRpb25SZXN1bHQgPSByZWdpb25DbGlwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byByZWN0TGlzdENsaXAgPSBhbGxvY2F0b3IuY3JlYXRlPENsaXBSZWN0TGlzdD4obVJlY3RhbmdsZUxpc3QpOworICAgICAgICAgICAgYXV0byYmIHJlY3RMaXN0ID0gcmVjdExpc3RDbGlwLT5yZWN0TGlzdDsKKyAgICAgICAgICAgIGlmIChtTW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlKSB7CisgICAgICAgICAgICAgICAgcmVjdExpc3Quc2V0KG1DbGlwUmVjdCwgTWF0cml4NDo6aWRlbnRpdHkoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWNvcmRlZENsaXAtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSkgeworICAgICAgICAgICAgICAgIHJlY3RMaXN0LmludGVyc2VjdFdpdGgoZ2V0UmVjdChyZWNvcmRlZENsaXApLCByZWNvcmRlZENsaXBUcmFuc2Zvcm0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdCBSZWN0YW5nbGVMaXN0JiBvdGhlciA9IGdldFJlY3RMaXN0KHJlY29yZGVkQ2xpcCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdGhlci5nZXRUcmFuc2Zvcm1lZFJlY3RhbmdsZXNDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYmIHRyID0gb3RoZXIuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGUoaSk7CisgICAgICAgICAgICAgICAgICAgIE1hdHJpeDQgdG90YWxUcmFuc2Zvcm0ocmVjb3JkZWRDbGlwVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgdG90YWxUcmFuc2Zvcm0ubXVsdGlwbHkodHIuZ2V0VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgICAgICAgICByZWN0TGlzdC5pbnRlcnNlY3RXaXRoKHRyLmdldEJvdW5kcygpLCB0b3RhbFRyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVjdExpc3RDbGlwLT5yZWN0ID0gcmVjdExpc3QuY2FsY3VsYXRlQm91bmRzKCk7CisgICAgICAgICAgICBtTGFzdFJlc29sdXRpb25SZXN1bHQgPSByZWN0TGlzdENsaXA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1MYXN0UmVzb2x1dGlvblJlc3VsdDsKK30KKwordm9pZCBDbGlwQXJlYTo6YXBwbHlDbGlwKGNvbnN0IENsaXBCYXNlKiBjbGlwLCBjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0pIHsKKyAgICBpZiAoIWNsaXApIHJldHVybjsgLy8gbm90aGluZyB0byBkbworCisgICAgaWYgKENDX0xJS0VMWShjbGlwLT5tb2RlID09IENsaXBNb2RlOjpSZWN0YW5nbGUpKSB7CisgICAgICAgIGNsaXBSZWN0V2l0aFRyYW5zZm9ybShnZXRSZWN0KGNsaXApLCAmdHJhbnNmb3JtLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgfSBlbHNlIGlmIChDQ19MSUtFTFkoY2xpcC0+bW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdCkpIHsKKyAgICAgICAgYXV0byYmIHJlY3RMaXN0ID0gZ2V0UmVjdExpc3QoY2xpcCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvJiYgdHIgPSByZWN0TGlzdC5nZXRUcmFuc2Zvcm1lZFJlY3RhbmdsZShpKTsKKyAgICAgICAgICAgIE1hdHJpeDQgdG90YWxUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICAgICAgICAgIHRvdGFsVHJhbnNmb3JtLm11bHRpcGx5KHRyLmdldFRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIGNsaXBSZWN0V2l0aFRyYW5zZm9ybSh0ci5nZXRCb3VuZHMoKSwgJnRvdGFsVHJhbnNmb3JtLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBTa1JlZ2lvbiByZWdpb24oZ2V0UmVnaW9uKGNsaXApKTsKKyAgICAgICAgLy8gVE9ETzogaGFuZGxlIG5vbi10cmFuc2xhdGUgdHJhbnNmb3JtcyBwcm9wZXJseSEKKyAgICAgICAgcmVnaW9uLnRyYW5zbGF0ZSh0cmFuc2Zvcm0uZ2V0VHJhbnNsYXRlWCgpLCB0cmFuc2Zvcm0uZ2V0VHJhbnNsYXRlWSgpKTsKKyAgICAgICAgY2xpcFJlZ2lvbihyZWdpb24sIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICB9Cit9CisKIH0gLyogbmFtZXNwYWNlIHVpcmVuZGVyZXIgKi8KIH0gLyogbmFtZXNwYWNlIGFuZHJvaWQgKi8KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9DbGlwQXJlYS5oIGIvbGlicy9od3VpL0NsaXBBcmVhLmgKaW5kZXggZjg4ZmQ5Mi4uNDc5Nzk2ZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0NsaXBBcmVhLmgKKysrIGIvbGlicy9od3VpL0NsaXBBcmVhLmgKQEAgLTE2LDE1ICsxNiwxNyBAQAogI2lmbmRlZiBDTElQQVJFQV9ICiAjZGVmaW5lIENMSVBBUkVBX0gKIAotI2luY2x1ZGUgPFNrUmVnaW9uLmg+Ci0KICNpbmNsdWRlICJNYXRyaXguaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAidXRpbHMvUGFpci5oIgogCisjaW5jbHVkZSA8U2tSZWdpb24uaD4KKwogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIHVpcmVuZGVyZXIgewogCitjbGFzcyBMaW5lYXJBbGxvY2F0b3I7CisKIFJlY3QgdHJhbnNmb3JtQW5kQ2FsY3VsYXRlQm91bmRzKGNvbnN0IFJlY3QmIHIsIGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSk7CiAKIGNsYXNzIFRyYW5zZm9ybWVkUmVjdGFuZ2xlIHsKQEAgLTUwLDYgKzUyLDEyIEBACiAgICAgICAgIHJldHVybiBtVHJhbnNmb3JtOwogICAgIH0KIAorICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSkgeworICAgICAgICBNYXRyaXg0IHQ7CisgICAgICAgIHQubG9hZE11bHRpcGx5KHRyYW5zZm9ybSwgbVRyYW5zZm9ybSk7CisgICAgICAgIG1UcmFuc2Zvcm0gPSB0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZWN0IG1Cb3VuZHM7CiAgICAgTWF0cml4NCBtVHJhbnNmb3JtOwpAQCAtNjYsMjcgKzc0LDYyIEBACiAgICAgdm9pZCBzZXRFbXB0eSgpOwogICAgIHZvaWQgc2V0KGNvbnN0IFJlY3QmIGJvdW5kcywgY29uc3QgTWF0cml4NCYgdHJhbnNmb3JtKTsKICAgICBib29sIGludGVyc2VjdFdpdGgoY29uc3QgUmVjdCYgYm91bmRzLCBjb25zdCBNYXRyaXg0JiB0cmFuc2Zvcm0pOworICAgIHZvaWQgdHJhbnNmb3JtKGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSk7CiAKICAgICBTa1JlZ2lvbiBjb252ZXJ0VG9SZWdpb24oY29uc3QgU2tSZWdpb24mIGNsaXApIGNvbnN0OwogICAgIFJlY3QgY2FsY3VsYXRlQm91bmRzKCkgY29uc3Q7CiAKLXByaXZhdGU6CiAgICAgZW51bSB7CiAgICAgICAgIGtNYXhUcmFuc2Zvcm1lZFJlY3RhbmdsZXMgPSA1CiAgICAgfTsKIAorcHJpdmF0ZToKICAgICBpbnQgbVRyYW5zZm9ybWVkUmVjdGFuZ2xlc0NvdW50OwogICAgIFRyYW5zZm9ybWVkUmVjdGFuZ2xlIG1UcmFuc2Zvcm1lZFJlY3RhbmdsZXNba01heFRyYW5zZm9ybWVkUmVjdGFuZ2xlc107CiB9OwogCi1jbGFzcyBDbGlwQXJlYSB7Ci1wcml2YXRlOgotICAgIGVudW0gY2xhc3MgTW9kZSB7Ci0gICAgICAgIFJlY3RhbmdsZSwKLSAgICAgICAgUmVnaW9uLAotICAgICAgICBSZWN0YW5nbGVMaXN0Ci0gICAgfTsKK2VudW0gY2xhc3MgQ2xpcE1vZGUgeworICAgIFJlY3RhbmdsZSwKKyAgICBSZWN0YW5nbGVMaXN0LAogCisgICAgLy8gcmVnaW9uIGFuZCBwYXRoIC0gaW50ZXJzZWN0ZWQuIGlmIGVpdGhlciBpcyBlbXB0eSwgZG9uJ3QgdXNlCisgICAgUmVnaW9uCit9OworCitzdHJ1Y3QgQ2xpcEJhc2UgeworICAgIENsaXBCYXNlKENsaXBNb2RlIG1vZGUpCisgICAgICAgICAgICA6IG1vZGUobW9kZSkge30KKyAgICBDbGlwQmFzZShjb25zdCBSZWN0JiByZWN0KQorICAgICAgICAgICAgOiBtb2RlKENsaXBNb2RlOjpSZWN0YW5nbGUpCisgICAgICAgICAgICAsIHJlY3QocmVjdCkge30KKyAgICBjb25zdCBDbGlwTW9kZSBtb2RlOworICAgIC8vIEJvdW5kcyBvZiB0aGUgY2xpcHBpbmcgYXJlYSwgdXNlZCB0byBkZWZpbmUgdGhlIHNjaXNzb3IsIGFuZCBkZWZpbmUgd2hpY2gKKyAgICAvLyBwb3J0aW9uIG9mIHRoZSBzdGVuY2lsIGlzIHVwZGF0ZWQvdXNlZAorICAgIFJlY3QgcmVjdDsKK307CisKK3N0cnVjdCBDbGlwUmVjdCA6IENsaXBCYXNlIHsKKyAgICBDbGlwUmVjdChjb25zdCBSZWN0JiByZWN0KQorICAgICAgICAgICAgOiBDbGlwQmFzZShyZWN0KSB7fQorfTsKKworc3RydWN0IENsaXBSZWN0TGlzdCA6IENsaXBCYXNlIHsKKyAgICBDbGlwUmVjdExpc3QoY29uc3QgUmVjdGFuZ2xlTGlzdCYgcmVjdExpc3QpCisgICAgICAgICAgICA6IENsaXBCYXNlKENsaXBNb2RlOjpSZWN0YW5nbGVMaXN0KQorICAgICAgICAgICAgLCByZWN0TGlzdChyZWN0TGlzdCkge30KKyAgICBSZWN0YW5nbGVMaXN0IHJlY3RMaXN0OworfTsKKworc3RydWN0IENsaXBSZWdpb24gOiBDbGlwQmFzZSB7CisgICAgQ2xpcFJlZ2lvbihjb25zdCBTa1JlZ2lvbiYgcmVnaW9uKQorICAgICAgICAgICAgOiBDbGlwQmFzZShDbGlwTW9kZTo6UmVnaW9uKQorICAgICAgICAgICAgLCByZWdpb24ocmVnaW9uKSB7fQorICAgIENsaXBSZWdpb24oKQorICAgICAgICAgICAgOiBDbGlwQmFzZShDbGlwTW9kZTo6UmVnaW9uKSB7fQorICAgIFNrUmVnaW9uIHJlZ2lvbjsKK307CisKK2NsYXNzIENsaXBBcmVhIHsKIHB1YmxpYzoKICAgICBDbGlwQXJlYSgpOwogCkBAIC05OCw4ICsxNDEsNiBAQAogCiAgICAgdm9pZCBzZXRFbXB0eSgpOwogICAgIHZvaWQgc2V0Q2xpcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20pOwotICAgIHZvaWQgY2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKLSAgICAgICAgICAgIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKTsKICAgICB2b2lkIGNsaXBSZWN0V2l0aFRyYW5zZm9ybShjb25zdCBSZWN0JiByLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sCiAgICAgICAgICAgICBTa1JlZ2lvbjo6T3Agb3ApOwogICAgIHZvaWQgY2xpcFJlZ2lvbihjb25zdCBTa1JlZ2lvbiYgcmVnaW9uLCBTa1JlZ2lvbjo6T3Agb3ApOwpAQCAtMTE5LDI2ICsxNjAsMjcgQEAKICAgICB9CiAKICAgICBib29sIGlzUmVnaW9uKCkgY29uc3QgewotICAgICAgICByZXR1cm4gTW9kZTo6UmVnaW9uID09IG1Nb2RlOworICAgICAgICByZXR1cm4gQ2xpcE1vZGU6OlJlZ2lvbiA9PSBtTW9kZTsKICAgICB9CiAKICAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbU1vZGUgPT0gTW9kZTo6UmVjdGFuZ2xlOworICAgICAgICByZXR1cm4gbU1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZTsKICAgICB9CiAKICAgICBib29sIGlzUmVjdGFuZ2xlTGlzdCgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1Nb2RlID09IE1vZGU6OlJlY3RhbmdsZUxpc3Q7CisgICAgICAgIHJldHVybiBtTW9kZSA9PSBDbGlwTW9kZTo6UmVjdGFuZ2xlTGlzdDsKICAgICB9CiAKKyAgICBjb25zdCBDbGlwQmFzZSogc2VyaWFsaXplQ2xpcChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvcik7CisgICAgY29uc3QgQ2xpcEJhc2UqIHNlcmlhbGl6ZUludGVyc2VjdGVkQ2xpcChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKKyAgICAgICAgICAgIGNvbnN0IENsaXBCYXNlKiByZWNvcmRlZENsaXAsIGNvbnN0IE1hdHJpeDQmIHJlY29yZGVkQ2xpcFRyYW5zZm9ybSk7CisgICAgdm9pZCBhcHBseUNsaXAoY29uc3QgQ2xpcEJhc2UqIHJlY29yZGVkQ2xpcCwgY29uc3QgTWF0cml4NCYgcmVjb3JkZWRDbGlwVHJhbnNmb3JtKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGVudGVyUmVjdGFuZ2xlTW9kZSgpOwogICAgIHZvaWQgcmVjdGFuZ2xlTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShjb25zdCBSZWN0JiByLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCk7Ci0gICAgdm9pZCByZWN0YW5nbGVNb2RlQ2xpcFJlY3RXaXRoVHJhbnNmb3JtKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsCi0gICAgICAgICAgICBmbG9hdCBib3R0b20sIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKTsKIAogICAgIHZvaWQgZW50ZXJSZWN0YW5nbGVMaXN0TW9kZSgpOwotICAgIHZvaWQgcmVjdGFuZ2xlTGlzdE1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oZmxvYXQgbGVmdCwgZmxvYXQgdG9wLAotICAgICAgICAgICAgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgbWF0NCogdHJhbnNmb3JtLCBTa1JlZ2lvbjo6T3Agb3ApOwogICAgIHZvaWQgcmVjdGFuZ2xlTGlzdE1vZGVDbGlwUmVjdFdpdGhUcmFuc2Zvcm0oY29uc3QgUmVjdCYgciwKICAgICAgICAgICAgIGNvbnN0IG1hdDQqIHRyYW5zZm9ybSwgU2tSZWdpb246Ok9wIG9wKTsKIApAQCAtMTQ3LDEyICsxODksMTcgQEAKICAgICB2b2lkIGVudGVyUmVnaW9uTW9kZSgpOwogICAgIHZvaWQgcmVnaW9uTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShjb25zdCBSZWN0JiByLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sCiAgICAgICAgICAgICBTa1JlZ2lvbjo6T3Agb3ApOwotICAgIHZvaWQgcmVnaW9uTW9kZUNsaXBSZWN0V2l0aFRyYW5zZm9ybShmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LAotICAgICAgICAgICAgZmxvYXQgYm90dG9tLCBjb25zdCBtYXQ0KiB0cmFuc2Zvcm0sIFNrUmVnaW9uOjpPcCBvcCk7CiAKICAgICB2b2lkIGVuc3VyZUNsaXBSZWdpb24oKTsKICAgICB2b2lkIG9uQ2xpcFJlZ2lvblVwZGF0ZWQoKTsKIAorICAgIC8vIENhbGxlZCBieSBldmVyeSBzdGF0ZSBtb2RpZnlpbmcgcHVibGljIG1ldGhvZC4KKyAgICB2b2lkIG9uQ2xpcFVwZGF0ZWQoKSB7CisgICAgICAgIG1Qb3N0Vmlld3BvcnRDbGlwT2JzZXJ2ZWQgPSB0cnVlOworICAgICAgICBtTGFzdFNlcmlhbGl6YXRpb24gPSBudWxscHRyOworICAgICAgICBtTGFzdFJlc29sdXRpb25SZXN1bHQgPSBudWxscHRyOworICAgIH0KKwogICAgIFNrUmVnaW9uIGNyZWF0ZVZpZXdwb3J0UmVnaW9uKCkgewogICAgICAgICByZXR1cm4gU2tSZWdpb24obVZpZXdwb3J0Qm91bmRzLnRvU2tJUmVjdCgpKTsKICAgICB9CkBAIC0xNjMsNyArMjEwLDIyIEBACiAgICAgICAgIHBhdGhBc1JlZ2lvbi5zZXRQYXRoKHBhdGgsIGNyZWF0ZVZpZXdwb3J0UmVnaW9uKCkpOwogICAgIH0KIAotICAgIE1vZGUgbU1vZGU7CisgICAgQ2xpcE1vZGUgbU1vZGU7CisgICAgYm9vbCBtUG9zdFZpZXdwb3J0Q2xpcE9ic2VydmVkID0gZmFsc2U7CisKKyAgICAvKioKKyAgICAgKiBJZiBtTGFzdFNlcmlhbGl6YXRpb24gaXMgbm9uLW51bGwsIGl0IHJlcHJlc2VudHMgYW4gYWxyZWFkeSBzZXJpYWxpemVkIGNvcHkKKyAgICAgKiBvZiB0aGUgY3VycmVudCBjbGlwIHN0YXRlLiBJZiBudWxsLCBpdCBoYXMgbm90IGJlZW4gY29tcHV0ZWQuCisgICAgICovCisgICAgY29uc3QgQ2xpcEJhc2UqIG1MYXN0U2VyaWFsaXphdGlvbiA9IG51bGxwdHI7CisKKyAgICAvKioKKyAgICAgKiBUaGlzIHBhaXIgb2YgcG9pbnRlcnMgaXMgYSBzaW5nbGUgZW50cnkgY2FjaGUgb2YgbW9zdCByZWNlbnRseSBzZWVuCisgICAgICovCisgICAgY29uc3QgQ2xpcEJhc2UqIG1MYXN0UmVzb2x1dGlvblJlc3VsdCA9IG51bGxwdHI7CisgICAgY29uc3QgQ2xpcEJhc2UqIG1MYXN0UmVzb2x1dGlvbkNsaXAgPSBudWxscHRyOworICAgIE1hdHJpeDQgbUxhc3RSZXNvbHV0aW9uVHJhbnNmb3JtOworCiAgICAgUmVjdCBtVmlld3BvcnRCb3VuZHM7CiAgICAgUmVjdCBtQ2xpcFJlY3Q7CiAgICAgU2tSZWdpb24gbUNsaXBSZWdpb247CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGVmZXJyZWRMYXllclVwZGF0ZXIuY3BwIGIvbGlicy9od3VpL0RlZmVycmVkTGF5ZXJVcGRhdGVyLmNwcAppbmRleCA3MDM4MzM0Li5mODMzYTU0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvRGVmZXJyZWRMYXllclVwZGF0ZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9EZWZlcnJlZExheWVyVXBkYXRlci5jcHAKQEAgLTUzLDggKzUzLDcgQEAKICAgICBTa1JlZkNudF9TYWZlQXNzaWduKG1Db2xvckZpbHRlciwgY29sb3JGaWx0ZXIpOwogfQogCi1ib29sIERlZmVycmVkTGF5ZXJVcGRhdGVyOjphcHBseSgpIHsKLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwordm9pZCBEZWZlcnJlZExheWVyVXBkYXRlcjo6YXBwbHkoKSB7CiAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBhcmUgYXBwbGllZCB0aGUgc2FtZSB0byBib3RoIGxheWVyIHR5cGVzCiAgICAgbUxheWVyLT5zZXRDb2xvckZpbHRlcihtQ29sb3JGaWx0ZXIpOwogICAgIG1MYXllci0+c2V0QWxwaGEobUFscGhhLCBtTW9kZSk7CkBAIC03Myw3ICs3Miw2IEBACiAgICAgICAgICAgICBzZXRUcmFuc2Zvcm0obnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKIHZvaWQgRGVmZXJyZWRMYXllclVwZGF0ZXI6OmRvVXBkYXRlVGV4SW1hZ2UoKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRGVmZXJyZWRMYXllclVwZGF0ZXIuaCBiL2xpYnMvaHd1aS9EZWZlcnJlZExheWVyVXBkYXRlci5oCmluZGV4IGRmN2M1OTQuLjZhM2M4OTAgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9EZWZlcnJlZExheWVyVXBkYXRlci5oCisrKyBiL2xpYnMvaHd1aS9EZWZlcnJlZExheWVyVXBkYXRlci5oCkBAIC03NywxMyArNzcsMTMgQEAKIAogICAgIEFORFJPSURfQVBJIHZvaWQgc2V0UGFpbnQoY29uc3QgU2tQYWludCogcGFpbnQpOwogCi0gICAgQU5EUk9JRF9BUEkgYm9vbCBhcHBseSgpOworICAgIHZvaWQgYXBwbHkoKTsKIAogICAgIExheWVyKiBiYWNraW5nTGF5ZXIoKSB7CiAgICAgICAgIHJldHVybiBtTGF5ZXI7CiAgICAgfQogCi0gICAgQU5EUk9JRF9BUEkgdm9pZCBkZXRhY2hTdXJmYWNlVGV4dHVyZSgpOworICAgIHZvaWQgZGV0YWNoU3VyZmFjZVRleHR1cmUoKTsKIAogcHJpdmF0ZToKICAgICAvLyBHZW5lcmljIHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9Gb250UmVuZGVyZXIuY3BwIGIvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKaW5kZXggOWM4NjQ5Zi4uZWQzMWEyYyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKKysrIGIvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5jcHAKQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgICAgIC5zZXRNZXNoVGV4dHVyZWRJbmRleGVkUXVhZHModGV4dHVyZS5tZXNoKCksIHRleHR1cmUubWVzaEVsZW1lbnRDb3VudCgpKQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQodGV4dHVyZS5nZXRUZXh0dXJlKCksIHRleHR1cmVGaWxsRmxhZ3MsIHBhaW50LCBiYWtlZFN0YXRlLT5hbHBoYSkKICAgICAgICAgICAgIC5zZXRUcmFuc2Zvcm0oYmFrZWRTdGF0ZS0+Y29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0sIHRyYW5zZm9ybUZsYWdzKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3QoMCwgMCwgUmVjdCgwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdJZGVudGl0eUVtcHR5Qm91bmRzKCkKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgIC8vIE5vdGU6IGRvbid0IHBhc3MgZGlydHkgYm91bmRzIGhlcmUsIHNvIHVzZXIgbXVzdCBtYW5hZ2UgcGFzc2luZyBkaXJ0eSBib3VuZHMgdG8gcmVuZGVyZXIKICAgICByZW5kZXJlci0+cmVuZGVyR2xvcChudWxscHRyLCBjbGlwLCBnbG9wKTsKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgICAgIC5zZXRNZXNoVGV4dHVyZWRJbmRleGVkUXVhZHModGV4dHVyZS5tZXNoKCksIHRleHR1cmUubWVzaEVsZW1lbnRDb3VudCgpKQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQodGV4dHVyZS5nZXRUZXh0dXJlKCksIHRleHR1cmVGaWxsRmxhZ3MsIHBhaW50LCByZW5kZXJlci0+Y3VycmVudFNuYXBzaG90KCktPmFscGhhKQogICAgICAgICAgICAgLnNldFRyYW5zZm9ybSgqKHJlbmRlcmVyLT5jdXJyZW50U25hcHNob3QoKSksIHRyYW5zZm9ybUZsYWdzKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3QoMCwgMCwgUmVjdCgwLCAwLCAwLCAwKSkKKyAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdPZmZzZXRSZWN0KDAsIDAsIFJlY3QoKSkKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgIHJlbmRlcmVyLT5yZW5kZXJHbG9wKGdsb3ApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmggYi9saWJzL2h3dWkvRm9udFJlbmRlcmVyLmgKaW5kZXggZmY0ZGM0YS4uOTk5NDQ5OCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0ZvbnRSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9Gb250UmVuZGVyZXIuaApAQCAtNDcsNiArNDcsNyBAQAogI2lmIEhXVUlfTkVXX09QUwogY2xhc3MgQmFrZWRPcFN0YXRlOwogY2xhc3MgQmFrZWRPcFJlbmRlcmVyOworc3RydWN0IENsaXBCYXNlOwogI2Vsc2UKIGNsYXNzIE9wZW5HTFJlbmRlcmVyOwogI2VuZGlmCkBAIC01Nyw3ICs1OCw3IEBACiAjaWYgSFdVSV9ORVdfT1BTCiAgICAgICAgICAgICBCYWtlZE9wUmVuZGVyZXIqIHJlbmRlcmVyLAogICAgICAgICAgICAgY29uc3QgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlLAotICAgICAgICAgICAgY29uc3QgUmVjdCogY2xpcCwKKyAgICAgICAgICAgIGNvbnN0IENsaXBCYXNlKiBjbGlwLAogI2Vsc2UKICAgICAgICAgICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlciwKICNlbmRpZgpAQCAtODEsNyArODIsNyBAQAogI2lmIEhXVUlfTkVXX09QUwogICAgIEJha2VkT3BSZW5kZXJlciogcmVuZGVyZXI7CiAgICAgY29uc3QgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlOwotICAgIGNvbnN0IFJlY3QqIGNsaXA7CisgICAgY29uc3QgQ2xpcEJhc2UqIGNsaXA7CiAjZWxzZQogICAgIE9wZW5HTFJlbmRlcmVyKiByZW5kZXJlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0ZyYW1lQnVpbGRlci5jcHAgYi9saWJzL2h3dWkvRnJhbWVCdWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGM2NTViCi0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL0ZyYW1lQnVpbGRlci5jcHAKQEAgLTAsMCArMSw3NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiRnJhbWVCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJMYXllclVwZGF0ZVF1ZXVlLmgiCisjaW5jbHVkZSAiUmVuZGVyTm9kZS5oIgorI2luY2x1ZGUgInJlbmRlcnN0YXRlL09mZnNjcmVlbkJ1ZmZlclBvb2wuaCIKKyNpbmNsdWRlICJ1dGlscy9GYXRWZWN0b3IuaCIKKyNpbmNsdWRlICJ1dGlscy9QYWludFV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvVHJhY2VVdGlscy5oIgorCisjaW5jbHVkZSA8U2tDYW52YXMuaD4KKyNpbmNsdWRlIDxTa1BhdGhPcHMuaD4KKyNpbmNsdWRlIDx1dGlscy9UeXBlSGVscGVycy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK0ZyYW1lQnVpbGRlcjo6RnJhbWVCdWlsZGVyKGNvbnN0IExheWVyVXBkYXRlUXVldWUmIGxheWVycywgY29uc3QgU2tSZWN0JiBjbGlwLAorICAgICAgICB1aW50MzJfdCB2aWV3cG9ydFdpZHRoLCB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCwKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8IHNwPFJlbmRlck5vZGU+ID4mIG5vZGVzLCBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlcikKKyAgICAgICAgOiBtQ2FudmFzU3RhdGUoKnRoaXMpIHsKKyAgICBBVFJBQ0VfTkFNRSgicHJlcGFyZSBkcmF3aW5nIGNvbW1hbmRzIik7CisKKyAgICBtTGF5ZXJCdWlsZGVycy5yZXNlcnZlKGxheWVycy5lbnRyaWVzKCkuc2l6ZSgpKTsKKyAgICBtTGF5ZXJTdGFjay5yZXNlcnZlKGxheWVycy5lbnRyaWVzKCkuc2l6ZSgpKTsKKworICAgIC8vIFByZXBhcmUgdG8gZGVmZXIgRmJvMAorICAgIGF1dG8gZmJvMCA9IG1BbGxvY2F0b3IuY3JlYXRlPExheWVyQnVpbGRlcj4odmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIFJlY3QoY2xpcCkpOworICAgIG1MYXllckJ1aWxkZXJzLnB1c2hfYmFjayhmYm8wKTsKKyAgICBtTGF5ZXJTdGFjay5wdXNoX2JhY2soMCk7CisgICAgbUNhbnZhc1N0YXRlLmluaXRpYWxpemVTYXZlU3RhY2sodmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsCisgICAgICAgICAgICBjbGlwLmZMZWZ0LCBjbGlwLmZUb3AsIGNsaXAuZlJpZ2h0LCBjbGlwLmZCb3R0b20sCisgICAgICAgICAgICBsaWdodENlbnRlcik7CisKKyAgICAvLyBSZW5kZXIgYWxsIGxheWVycyB0byBiZSB1cGRhdGVkLCBpbiBvcmRlci4gRGVmZXIgaW4gcmV2ZXJzZSBvcmRlciwgc28gdGhhdCB0aGV5J2xsIGJlCisgICAgLy8gdXBkYXRlZCBpbiB0aGUgb3JkZXIgdGhleSdyZSBwYXNzZWQgaW4gKG1MYXllckJ1aWxkZXJzIGFyZSBpc3N1ZWQgdG8gUmVuZGVyZXIgaW4gcmV2ZXJzZSkKKyAgICBmb3IgKGludCBpID0gbGF5ZXJzLmVudHJpZXMoKS5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBSZW5kZXJOb2RlKiBsYXllck5vZGUgPSBsYXllcnMuZW50cmllcygpW2ldLnJlbmRlck5vZGU7CisgICAgICAgIC8vIG9ubHkgc2NoZWR1bGUgcmVwYWludCBpZiBub2RlIHN0aWxsIG9uIGxheWVyIC0gcG9zc2libGUgaXQgbWF5IGhhdmUgYmVlbgorICAgICAgICAvLyByZW1vdmVkIGR1cmluZyBhIGRyb3BwZWQgZnJhbWUsIGJ1dCBsYXllcnMgbWF5IHN0aWxsIHJlbWFpbiBzY2hlZHVsZWQgc28KKyAgICAgICAgLy8gYXMgbm90IHRvIGxvc2UgaW5mbyBvbiB3aGF0IHBvcnRpb24gaXMgZGFtYWdlZAorICAgICAgICBpZiAoQ0NfTElLRUxZKGxheWVyTm9kZS0+Z2V0TGF5ZXIoKSAhPSBudWxscHRyKSkgeworICAgICAgICAgICAgY29uc3QgUmVjdCYgbGF5ZXJEYW1hZ2UgPSBsYXllcnMuZW50cmllcygpW2ldLmRhbWFnZTsKKyAgICAgICAgICAgIGxheWVyTm9kZS0+Y29tcHV0ZU9yZGVyaW5nKCk7CisKKyAgICAgICAgICAgIC8vIG1hcCBjdXJyZW50IGxpZ2h0IGNlbnRlciBpbnRvIFJlbmRlck5vZGUncyBjb29yZGluYXRlIHNwYWNlCisgICAgICAgICAgICBWZWN0b3IzIGxpZ2h0Q2VudGVyID0gbUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT5nZXRSZWxhdGl2ZUxpZ2h0Q2VudGVyKCk7CisgICAgICAgICAgICBsYXllck5vZGUtPmdldExheWVyKCktPmludmVyc2VUcmFuc2Zvcm1JbldpbmRvdy5tYXBQb2ludDNkKGxpZ2h0Q2VudGVyKTsKKworICAgICAgICAgICAgc2F2ZUZvckxheWVyKGxheWVyTm9kZS0+Z2V0V2lkdGgoKSwgbGF5ZXJOb2RlLT5nZXRIZWlnaHQoKSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJEYW1hZ2UsIGxpZ2h0Q2VudGVyLCBudWxscHRyLCBsYXllck5vZGUpOworCisgICAgICAgICAgICBpZiAobGF5ZXJOb2RlLT5nZXREaXNwbGF5TGlzdCgpKSB7CisgICAgICAgICAgICAgICAgZGVmZXJOb2RlT3BzKCpsYXllck5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdG9yZUZvckxheWVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBEZWZlciBGYm8wCisgICAgZm9yIChjb25zdCBzcDxSZW5kZXJOb2RlPiYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGlmIChub2RlLT5ub3RoaW5nVG9EcmF3KCkpIGNvbnRpbnVlOworICAgICAgICBub2RlLT5jb21wdXRlT3JkZXJpbmcoKTsKKworICAgICAgICBpbnQgY291bnQgPSBtQ2FudmFzU3RhdGUuc2F2ZShTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyk7CisgICAgICAgIGRlZmVyTm9kZVByb3BzQW5kT3BzKCpub2RlKTsKKyAgICAgICAgbUNhbnZhc1N0YXRlLnJlc3RvcmVUb0NvdW50KGNvdW50KTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpvblZpZXdwb3J0SW5pdGlhbGl6ZWQoKSB7fQorCit2b2lkIEZyYW1lQnVpbGRlcjo6b25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHt9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlck5vZGVQcm9wc0FuZE9wcyhSZW5kZXJOb2RlJiBub2RlKSB7CisgICAgY29uc3QgUmVuZGVyUHJvcGVydGllcyYgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcygpOworICAgIGNvbnN0IE91dGxpbmUmIG91dGxpbmUgPSBwcm9wZXJ0aWVzLmdldE91dGxpbmUoKTsKKyAgICBpZiAocHJvcGVydGllcy5nZXRBbHBoYSgpIDw9IDAKKyAgICAgICAgICAgIHx8IChvdXRsaW5lLmdldFNob3VsZENsaXAoKSAmJiBvdXRsaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHx8IHByb3BlcnRpZXMuZ2V0U2NhbGVYKCkgPT0gMAorICAgICAgICAgICAgfHwgcHJvcGVydGllcy5nZXRTY2FsZVkoKSA9PSAwKSB7CisgICAgICAgIHJldHVybjsgLy8gcmVqZWN0ZWQKKyAgICB9CisKKyAgICBpZiAocHJvcGVydGllcy5nZXRMZWZ0KCkgIT0gMCB8fCBwcm9wZXJ0aWVzLmdldFRvcCgpICE9IDApIHsKKyAgICAgICAgbUNhbnZhc1N0YXRlLnRyYW5zbGF0ZShwcm9wZXJ0aWVzLmdldExlZnQoKSwgcHJvcGVydGllcy5nZXRUb3AoKSk7CisgICAgfQorICAgIGlmIChwcm9wZXJ0aWVzLmdldFN0YXRpY01hdHJpeCgpKSB7CisgICAgICAgIG1DYW52YXNTdGF0ZS5jb25jYXRNYXRyaXgoKnByb3BlcnRpZXMuZ2V0U3RhdGljTWF0cml4KCkpOworICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5nZXRBbmltYXRpb25NYXRyaXgoKSkgeworICAgICAgICBtQ2FudmFzU3RhdGUuY29uY2F0TWF0cml4KCpwcm9wZXJ0aWVzLmdldEFuaW1hdGlvbk1hdHJpeCgpKTsKKyAgICB9CisgICAgaWYgKHByb3BlcnRpZXMuaGFzVHJhbnNmb3JtTWF0cml4KCkpIHsKKyAgICAgICAgaWYgKHByb3BlcnRpZXMuaXNUcmFuc2Zvcm1UcmFuc2xhdGVPbmx5KCkpIHsKKyAgICAgICAgICAgIG1DYW52YXNTdGF0ZS50cmFuc2xhdGUocHJvcGVydGllcy5nZXRUcmFuc2xhdGlvblgoKSwgcHJvcGVydGllcy5nZXRUcmFuc2xhdGlvblkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ2FudmFzU3RhdGUuY29uY2F0TWF0cml4KCpwcm9wZXJ0aWVzLmdldFRyYW5zZm9ybU1hdHJpeCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGludCB3aWR0aCA9IHByb3BlcnRpZXMuZ2V0V2lkdGgoKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gcHJvcGVydGllcy5nZXRIZWlnaHQoKTsKKworICAgIFJlY3Qgc2F2ZUxheWVyQm91bmRzOyAvLyB3aWxsIGJlIHNldCB0byBub24tZW1wdHkgaWYgc2F2ZUxheWVyIG5lZWRlZAorICAgIGNvbnN0IGJvb2wgaXNMYXllciA9IHByb3BlcnRpZXMuZWZmZWN0aXZlTGF5ZXJUeXBlKCkgIT0gTGF5ZXJUeXBlOjpOb25lOworICAgIGludCBjbGlwRmxhZ3MgPSBwcm9wZXJ0aWVzLmdldENsaXBwaW5nRmxhZ3MoKTsKKyAgICBpZiAocHJvcGVydGllcy5nZXRBbHBoYSgpIDwgMSkgeworICAgICAgICBpZiAoaXNMYXllcikgeworICAgICAgICAgICAgY2xpcEZsYWdzICY9IH5DTElQX1RPX0JPVU5EUzsgLy8gYm91bmRzIGNsaXBwaW5nIGRvbmUgYnkgbGF5ZXIKKyAgICAgICAgfQorICAgICAgICBpZiAoQ0NfTElLRUxZKGlzTGF5ZXIgfHwgIXByb3BlcnRpZXMuZ2V0SGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKSkpIHsKKyAgICAgICAgICAgIC8vIHNpbXBseSBzY2FsZSByZW5kZXJpbmcgY29udGVudCdzIGFscGhhCisgICAgICAgICAgICBtQ2FudmFzU3RhdGUuc2NhbGVBbHBoYShwcm9wZXJ0aWVzLmdldEFscGhhKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gc2NoZWR1bGUgc2F2ZUxheWVyIGJ5IGluaXRpYWxpemluZyBzYXZlTGF5ZXJCb3VuZHMKKyAgICAgICAgICAgIHNhdmVMYXllckJvdW5kcy5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAoY2xpcEZsYWdzKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRDbGlwcGluZ1JlY3RGb3JGbGFncyhjbGlwRmxhZ3MsICZzYXZlTGF5ZXJCb3VuZHMpOworICAgICAgICAgICAgICAgIGNsaXBGbGFncyA9IDA7IC8vIGFsbCBjbGlwcGluZyBkb25lIGJ5IHNhdmVsYXllcgorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKENDX1VOTElLRUxZKEFUUkFDRV9FTkFCTEVEKCkgJiYgcHJvcGVydGllcy5wcm9tb3RlZFRvTGF5ZXIoKSkpIHsKKyAgICAgICAgICAgIC8vIHByZXRlbmQgYWxwaGEgYWx3YXlzIGNhdXNlcyBzYXZlbGF5ZXIgdG8gd2FybiBhYm91dAorICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgcHJvYmxlbSBhZmZlY3Rpbmcgb2xkIHZlcnNpb25zCisgICAgICAgICAgICBBVFJBQ0VfRk9STUFUKCIlcyBhbHBoYSBjYXVzZWQgc2F2ZUxheWVyICVkeCVkIiwgbm9kZS5nZXROYW1lKCksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjbGlwRmxhZ3MpIHsKKyAgICAgICAgUmVjdCBjbGlwUmVjdDsKKyAgICAgICAgcHJvcGVydGllcy5nZXRDbGlwcGluZ1JlY3RGb3JGbGFncyhjbGlwRmxhZ3MsICZjbGlwUmVjdCk7CisgICAgICAgIG1DYW52YXNTdGF0ZS5jbGlwUmVjdChjbGlwUmVjdC5sZWZ0LCBjbGlwUmVjdC50b3AsIGNsaXBSZWN0LnJpZ2h0LCBjbGlwUmVjdC5ib3R0b20sCisgICAgICAgICAgICAgICAgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIH0KKworICAgIGlmIChwcm9wZXJ0aWVzLmdldFJldmVhbENsaXAoKS53aWxsQ2xpcCgpKSB7CisgICAgICAgIFJlY3QgYm91bmRzOworICAgICAgICBwcm9wZXJ0aWVzLmdldFJldmVhbENsaXAoKS5nZXRCb3VuZHMoJmJvdW5kcyk7CisgICAgICAgIG1DYW52YXNTdGF0ZS5zZXRDbGlwcGluZ1JvdW5kUmVjdChtQWxsb2NhdG9yLAorICAgICAgICAgICAgICAgIGJvdW5kcywgcHJvcGVydGllcy5nZXRSZXZlYWxDbGlwKCkuZ2V0UmFkaXVzKCkpOworICAgIH0gZWxzZSBpZiAocHJvcGVydGllcy5nZXRPdXRsaW5lKCkud2lsbENsaXAoKSkgeworICAgICAgICBtQ2FudmFzU3RhdGUuc2V0Q2xpcHBpbmdPdXRsaW5lKG1BbGxvY2F0b3IsICYocHJvcGVydGllcy5nZXRPdXRsaW5lKCkpKTsKKyAgICB9CisKKyAgICBpZiAoIW1DYW52YXNTdGF0ZS5xdWlja1JlamVjdENvbnNlcnZhdGl2ZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAvLyBub3QgcmVqZWN0ZWQsIHNvIGRlZmVyIHJlbmRlciBhcyBlaXRoZXIgTGF5ZXIsIG9yIGRpcmVjdCAocG9zc2libHkgd3JhcHBlZCBpbiBzYXZlTGF5ZXIpCisgICAgICAgIGlmIChub2RlLmdldExheWVyKCkpIHsKKyAgICAgICAgICAgIC8vIEhXIGxheWVyCisgICAgICAgICAgICBMYXllck9wKiBkcmF3TGF5ZXJPcCA9IG5ldyAobUFsbG9jYXRvcikgTGF5ZXJPcChub2RlKTsKKyAgICAgICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRPcFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUoKmRyYXdMYXllck9wKTsKKyAgICAgICAgICAgIGlmIChiYWtlZE9wU3RhdGUpIHsKKyAgICAgICAgICAgICAgICAvLyBOb2RlJ3MgbGF5ZXIgYWxyZWFkeSBkZWZlcnJlZCwgc2NoZWR1bGUgaXQgdG8gcmVuZGVyIGludG8gcGFyZW50IGxheWVyCisgICAgICAgICAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkT3BTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoQ0NfVU5MSUtFTFkoIXNhdmVMYXllckJvdW5kcy5pc0VtcHR5KCkpKSB7CisgICAgICAgICAgICAvLyBkcmF3IERpc3BsYXlMaXN0IGNvbnRlbnRzIHdpdGhpbiB0ZW1wb3JhcnksIHNpbmNlIHBlcnNpc3RlZCBsYXllciBjb3VsZCBub3QgYmUgdXNlZC4KKyAgICAgICAgICAgIC8vICh0ZW1wIGxheWVycyBhcmUgY2xpcHBlZCB0byB2aWV3cG9ydCwgc2luY2UgdGhleSBkb24ndCBwZXJzaXN0IG9mZnNjcmVlbiBjb250ZW50KQorICAgICAgICAgICAgU2tQYWludCBzYXZlTGF5ZXJQYWludDsKKyAgICAgICAgICAgIHNhdmVMYXllclBhaW50LnNldEFscGhhKHByb3BlcnRpZXMuZ2V0QWxwaGEoKSk7CisgICAgICAgICAgICBkZWZlckJlZ2luTGF5ZXJPcCgqbmV3IChtQWxsb2NhdG9yKSBCZWdpbkxheWVyT3AoCisgICAgICAgICAgICAgICAgICAgIHNhdmVMYXllckJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgTWF0cml4NDo6aWRlbnRpdHkoKSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgLy8gbm8gcmVjb3JkLXRpbWUgY2xpcCAtIG5lZWQgb25seSByZXNwZWN0IGRlZmVyLXRpbWUgb25lCisgICAgICAgICAgICAgICAgICAgICZzYXZlTGF5ZXJQYWludCkpOworICAgICAgICAgICAgZGVmZXJOb2RlT3BzKG5vZGUpOworICAgICAgICAgICAgZGVmZXJFbmRMYXllck9wKCpuZXcgKG1BbGxvY2F0b3IpIEVuZExheWVyT3AoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWZlck5vZGVPcHMobm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3R5cGVkZWYga2V5X3ZhbHVlX3BhaXJfdDxmbG9hdCwgY29uc3QgUmVuZGVyTm9kZU9wKj4gWlJlbmRlck5vZGVPcFBhaXI7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWPgorc3RhdGljIHZvaWQgYnVpbGRaU29ydGVkQ2hpbGRMaXN0KFYqIHpUcmFuc2xhdGVkTm9kZXMsCisgICAgICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRGlzcGxheUxpc3Q6OkNodW5rJiBjaHVuaykgeworICAgIGlmIChjaHVuay5iZWdpbkNoaWxkSW5kZXggPT0gY2h1bmsuZW5kQ2hpbGRJbmRleCkgcmV0dXJuOworCisgICAgZm9yIChzaXplX3QgaSA9IGNodW5rLmJlZ2luQ2hpbGRJbmRleDsgaSA8IGNodW5rLmVuZENoaWxkSW5kZXg7IGkrKykgeworICAgICAgICBSZW5kZXJOb2RlT3AqIGNoaWxkT3AgPSBkaXNwbGF5TGlzdC5nZXRDaGlsZHJlbigpW2ldOworICAgICAgICBSZW5kZXJOb2RlKiBjaGlsZCA9IGNoaWxkT3AtPnJlbmRlck5vZGU7CisgICAgICAgIGZsb2F0IGNoaWxkWiA9IGNoaWxkLT5wcm9wZXJ0aWVzKCkuZ2V0WigpOworCisgICAgICAgIGlmICghTWF0aFV0aWxzOjppc1plcm8oY2hpbGRaKSAmJiBjaHVuay5yZW9yZGVyQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIHpUcmFuc2xhdGVkTm9kZXMtPnB1c2hfYmFjayhaUmVuZGVyTm9kZU9wUGFpcihjaGlsZFosIGNoaWxkT3ApKTsKKyAgICAgICAgICAgIGNoaWxkT3AtPnNraXBJbk9yZGVyRHJhdyA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkLT5wcm9wZXJ0aWVzKCkuZ2V0UHJvamVjdEJhY2t3YXJkcygpKSB7CisgICAgICAgICAgICAvLyByZWd1bGFyLCBpbiBvcmRlciBkcmF3aW5nIERpc3BsYXlMaXN0CisgICAgICAgICAgICBjaGlsZE9wLT5za2lwSW5PcmRlckRyYXcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFogc29ydCBhbnkgM2QgY2hpbGRyZW4gKHN0YWJsZS1uZXNzIG1ha2VzIHogY29tcGFyZSBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgZHJhd2luZyBvcmRlcikKKyAgICBzdGQ6OnN0YWJsZV9zb3J0KHpUcmFuc2xhdGVkTm9kZXMtPmJlZ2luKCksIHpUcmFuc2xhdGVkTm9kZXMtPmVuZCgpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFY+CitzdGF0aWMgc2l6ZV90IGZpbmROb25OZWdhdGl2ZUluZGV4KGNvbnN0IFYmIHpUcmFuc2xhdGVkTm9kZXMpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHpUcmFuc2xhdGVkTm9kZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKHpUcmFuc2xhdGVkTm9kZXNbaV0ua2V5ID49IDAuMGYpIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gelRyYW5zbGF0ZWROb2Rlcy5zaXplKCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBWPgordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyM2RDaGlsZHJlbihDaGlsZHJlblNlbGVjdE1vZGUgbW9kZSwgY29uc3QgViYgelRyYW5zbGF0ZWROb2RlcykgeworICAgIGNvbnN0IGludCBzaXplID0gelRyYW5zbGF0ZWROb2Rlcy5zaXplKCk7CisgICAgaWYgKHNpemUgPT0gMAorICAgICAgICAgICAgfHwgKG1vZGUgPT0gQ2hpbGRyZW5TZWxlY3RNb2RlOjpOZWdhdGl2ZSYmIHpUcmFuc2xhdGVkTm9kZXNbMF0ua2V5ID4gMC4wZikKKyAgICAgICAgICAgIHx8IChtb2RlID09IENoaWxkcmVuU2VsZWN0TW9kZTo6UG9zaXRpdmUgJiYgelRyYW5zbGF0ZWROb2Rlc1tzaXplIC0gMV0ua2V5IDwgMC4wZikpIHsKKyAgICAgICAgLy8gbm8gM2QgY2hpbGRyZW4gdG8gZHJhdworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoqCisgICAgICogRHJhdyBzaGFkb3dzIGFuZCAocG90ZW50aWFsKSBjYXN0ZXJzIG1vc3RseSBpbiBvcmRlciwgYnV0IGFsbG93IHRoZSBzaGFkb3dzIG9mIGNhc3RlcnMKKyAgICAgKiB3aXRoIHZlcnkgc2ltaWxhciBaIGhlaWdodHMgdG8gZHJhdyB0b2dldGhlci4KKyAgICAgKgorICAgICAqIFRoaXMgd2F5LCBpZiBWaWV3cyBBICYgQiBoYXZlIHRoZSBzYW1lIFogaGVpZ2h0IGFuZCBhcmUgYm90aCBjYXN0aW5nIHNoYWRvd3MsIHRoZSBzaGFkb3dzIGFyZQorICAgICAqIHVuZGVybmVhdGggYm90aCwgYW5kIG5laXRoZXIncyBzaGFkb3cgaXMgZHJhd24gb24gdG9wIG9mIHRoZSBvdGhlci4KKyAgICAgKi8KKyAgICBjb25zdCBzaXplX3Qgbm9uTmVnYXRpdmVJbmRleCA9IGZpbmROb25OZWdhdGl2ZUluZGV4KHpUcmFuc2xhdGVkTm9kZXMpOworICAgIHNpemVfdCBkcmF3SW5kZXgsIHNoYWRvd0luZGV4LCBlbmRJbmRleDsKKyAgICBpZiAobW9kZSA9PSBDaGlsZHJlblNlbGVjdE1vZGU6Ok5lZ2F0aXZlKSB7CisgICAgICAgIGRyYXdJbmRleCA9IDA7CisgICAgICAgIGVuZEluZGV4ID0gbm9uTmVnYXRpdmVJbmRleDsKKyAgICAgICAgc2hhZG93SW5kZXggPSBlbmRJbmRleDsgLy8gZHJhdyBubyBzaGFkb3dzCisgICAgfSBlbHNlIHsKKyAgICAgICAgZHJhd0luZGV4ID0gbm9uTmVnYXRpdmVJbmRleDsKKyAgICAgICAgZW5kSW5kZXggPSBzaXplOworICAgICAgICBzaGFkb3dJbmRleCA9IGRyYXdJbmRleDsgLy8gcG90ZW50aWFsbHkgZHJhdyBzaGFkb3cgZm9yIGVhY2ggcG9zIFogY2hpbGQKKyAgICB9CisKKyAgICBmbG9hdCBsYXN0Q2FzdGVyWiA9IDAuMGY7CisgICAgd2hpbGUgKHNoYWRvd0luZGV4IDwgZW5kSW5kZXggfHwgZHJhd0luZGV4IDwgZW5kSW5kZXgpIHsKKyAgICAgICAgaWYgKHNoYWRvd0luZGV4IDwgZW5kSW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlck5vZGVPcCogY2FzdGVyTm9kZU9wID0gelRyYW5zbGF0ZWROb2Rlc1tzaGFkb3dJbmRleF0udmFsdWU7CisgICAgICAgICAgICBjb25zdCBmbG9hdCBjYXN0ZXJaID0gelRyYW5zbGF0ZWROb2Rlc1tzaGFkb3dJbmRleF0ua2V5OworICAgICAgICAgICAgLy8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHNoYWRvdyBpZiB0aGUgY2FzdGVyIGFib3V0IHRvIGJlIGRyYXduIGlzIGl0cyBjYXN0ZXIsCisgICAgICAgICAgICAvLyBPUiBpZiBpdHMgY2FzdGVyJ3MgWiB2YWx1ZSBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBwb3RlbnRpYWwgY2FzdGVyCisgICAgICAgICAgICBpZiAoc2hhZG93SW5kZXggPT0gZHJhd0luZGV4IHx8IGNhc3RlclogLSBsYXN0Q2FzdGVyWiA8IDAuMWYpIHsKKyAgICAgICAgICAgICAgICBkZWZlclNoYWRvdygqY2FzdGVyTm9kZU9wKTsKKworICAgICAgICAgICAgICAgIGxhc3RDYXN0ZXJaID0gY2FzdGVyWjsgLy8gbXVzdCBkbyB0aGlzIGV2ZW4gaWYgY3VycmVudCBjYXN0ZXIgbm90IGNhc3RpbmcgYSBzaGFkb3cKKyAgICAgICAgICAgICAgICBzaGFkb3dJbmRleCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUmVuZGVyTm9kZU9wKiBjaGlsZE9wID0gelRyYW5zbGF0ZWROb2Rlc1tkcmF3SW5kZXhdLnZhbHVlOworICAgICAgICBkZWZlclJlbmRlck5vZGVPcEltcGwoKmNoaWxkT3ApOworICAgICAgICBkcmF3SW5kZXgrKzsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclNoYWRvdyhjb25zdCBSZW5kZXJOb2RlT3AmIGNhc3Rlck5vZGVPcCkgeworICAgIGF1dG8mIG5vZGUgPSAqY2FzdGVyTm9kZU9wLnJlbmRlck5vZGU7CisgICAgYXV0byYgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcygpOworCisgICAgaWYgKHByb3BlcnRpZXMuZ2V0QWxwaGEoKSA8PSAwLjBmCisgICAgICAgICAgICB8fCBwcm9wZXJ0aWVzLmdldE91dGxpbmUoKS5nZXRBbHBoYSgpIDw9IDAuMGYKKyAgICAgICAgICAgIHx8ICFwcm9wZXJ0aWVzLmdldE91dGxpbmUoKS5nZXRQYXRoKCkKKyAgICAgICAgICAgIHx8IHByb3BlcnRpZXMuZ2V0U2NhbGVYKCkgPT0gMAorICAgICAgICAgICAgfHwgcHJvcGVydGllcy5nZXRTY2FsZVkoKSA9PSAwKSB7CisgICAgICAgIC8vIG5vIHNoYWRvdyB0byBkcmF3CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBTa1BhdGgqIGNhc3Rlck91dGxpbmVQYXRoID0gcHJvcGVydGllcy5nZXRPdXRsaW5lKCkuZ2V0UGF0aCgpOworICAgIGNvbnN0IFNrUGF0aCogcmV2ZWFsQ2xpcFBhdGggPSBwcm9wZXJ0aWVzLmdldFJldmVhbENsaXAoKS5nZXRQYXRoKCk7CisgICAgaWYgKHJldmVhbENsaXBQYXRoICYmIHJldmVhbENsaXBQYXRoLT5pc0VtcHR5KCkpIHJldHVybjsKKworICAgIGZsb2F0IGNhc3RlckFscGhhID0gcHJvcGVydGllcy5nZXRBbHBoYSgpICogcHJvcGVydGllcy5nZXRPdXRsaW5lKCkuZ2V0QWxwaGEoKTsKKworICAgIC8vIGhvbGRzIHRlbXBvcmFyeSBTa1BhdGggdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBpbnRlcnNlY3Rpb25zCisgICAgU2tQYXRoKiBmcmFtZUFsbG9jYXRlZFBhdGggPSBudWxscHRyOworICAgIGNvbnN0IFNrUGF0aCogY2FzdGVyUGF0aCA9IGNhc3Rlck91dGxpbmVQYXRoOworCisgICAgLy8gaW50ZXJzZWN0IHRoZSBzaGFkb3ctY2FzdGluZyBwYXRoIHdpdGggdGhlIHJldmVhbCwgaWYgcHJlc2VudAorICAgIGlmIChyZXZlYWxDbGlwUGF0aCkgeworICAgICAgICBmcmFtZUFsbG9jYXRlZFBhdGggPSBjcmVhdGVGcmFtZUFsbG9jYXRlZFBhdGgoKTsKKworICAgICAgICBPcCgqY2FzdGVyUGF0aCwgKnJldmVhbENsaXBQYXRoLCBrSW50ZXJzZWN0X1NrUGF0aE9wLCBmcmFtZUFsbG9jYXRlZFBhdGgpOworICAgICAgICBjYXN0ZXJQYXRoID0gZnJhbWVBbGxvY2F0ZWRQYXRoOworICAgIH0KKworICAgIC8vIGludGVyc2VjdCB0aGUgc2hhZG93LWNhc3RpbmcgcGF0aCB3aXRoIHRoZSBjbGlwQm91bmRzLCBpZiBwcmVzZW50CisgICAgaWYgKHByb3BlcnRpZXMuZ2V0Q2xpcHBpbmdGbGFncygpICYgQ0xJUF9UT19DTElQX0JPVU5EUykgeworICAgICAgICBpZiAoIWZyYW1lQWxsb2NhdGVkUGF0aCkgeworICAgICAgICAgICAgZnJhbWVBbGxvY2F0ZWRQYXRoID0gY3JlYXRlRnJhbWVBbGxvY2F0ZWRQYXRoKCk7CisgICAgICAgIH0KKyAgICAgICAgUmVjdCBjbGlwQm91bmRzOworICAgICAgICBwcm9wZXJ0aWVzLmdldENsaXBwaW5nUmVjdEZvckZsYWdzKENMSVBfVE9fQ0xJUF9CT1VORFMsICZjbGlwQm91bmRzKTsKKyAgICAgICAgU2tQYXRoIGNsaXBCb3VuZHNQYXRoOworICAgICAgICBjbGlwQm91bmRzUGF0aC5hZGRSZWN0KGNsaXBCb3VuZHMubGVmdCwgY2xpcEJvdW5kcy50b3AsCisgICAgICAgICAgICAgICAgY2xpcEJvdW5kcy5yaWdodCwgY2xpcEJvdW5kcy5ib3R0b20pOworCisgICAgICAgIE9wKCpjYXN0ZXJQYXRoLCBjbGlwQm91bmRzUGF0aCwga0ludGVyc2VjdF9Ta1BhdGhPcCwgZnJhbWVBbGxvY2F0ZWRQYXRoKTsKKyAgICAgICAgY2FzdGVyUGF0aCA9IGZyYW1lQWxsb2NhdGVkUGF0aDsKKyAgICB9CisKKyAgICBTaGFkb3dPcCogc2hhZG93T3AgPSBuZXcgKG1BbGxvY2F0b3IpIFNoYWRvd09wKGNhc3Rlck5vZGVPcCwgY2FzdGVyQWxwaGEsIGNhc3RlclBhdGgsCisgICAgICAgICAgICBtQ2FudmFzU3RhdGUuZ2V0TG9jYWxDbGlwQm91bmRzKCksCisgICAgICAgICAgICBtQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPmdldFJlbGF0aXZlTGlnaHRDZW50ZXIoKSk7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZE9wU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVNoYWRvd09wQ29uc3RydWN0KAorICAgICAgICAgICAgbUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCksIHNoYWRvd09wKTsKKyAgICBpZiAoQ0NfTElLRUxZKGJha2VkT3BTdGF0ZSkpIHsKKyAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkT3BTdGF0ZSwgT3BCYXRjaFR5cGU6OlNoYWRvdyk7CisgICAgfQorfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJQcm9qZWN0ZWRDaGlsZHJlbihjb25zdCBSZW5kZXJOb2RlJiByZW5kZXJOb2RlKSB7CisgICAgY29uc3QgU2tQYXRoKiBwcm9qZWN0aW9uUmVjZWl2ZXJPdXRsaW5lID0gcmVuZGVyTm9kZS5wcm9wZXJ0aWVzKCkuZ2V0T3V0bGluZSgpLmdldFBhdGgoKTsKKyAgICBpbnQgY291bnQgPSBtQ2FudmFzU3RhdGUuc2F2ZShTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7CisKKyAgICAvLyBjYW4ndCBiZSBudWxsLCBzaW5jZSBETD1udWxsIG5vZGUgcmVqZWN0aW9uIGhhcHBlbnMgYmVmb3JlIGRlZmVyTm9kZVByb3BzQW5kT3BzCisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0ID0gKihyZW5kZXJOb2RlLmdldERpc3BsYXlMaXN0KCkpOworCisgICAgY29uc3QgUmVjb3JkZWRPcCogb3AgPSAoZGlzcGxheUxpc3QuZ2V0T3BzKClbZGlzcGxheUxpc3QucHJvamVjdGlvblJlY2VpdmVJbmRleF0pOworICAgIGNvbnN0IFJlbmRlck5vZGVPcCogYmFja2dyb3VuZE9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyTm9kZU9wKj4ob3ApOworICAgIGNvbnN0IFJlbmRlclByb3BlcnRpZXMmIGJhY2tncm91bmRQcm9wcyA9IGJhY2tncm91bmRPcC0+cmVuZGVyTm9kZS0+cHJvcGVydGllcygpOworCisgICAgLy8gVHJhbnNmb3JtIHJlbmRlcmVyIHRvIG1hdGNoIGJhY2tncm91bmQgd2UncmUgcHJvamVjdGluZyBvbnRvCisgICAgLy8gKGJ5IG9mZnNldHRpbmcgY2FudmFzIGJ5IHRyYW5zbGF0aW9uWC9ZIG9mIGJhY2tncm91bmQgcmVuZGVybm9kZSwgc2luY2Ugb25seSB0aG9zZSBhcmUgc2V0KQorICAgIG1DYW52YXNTdGF0ZS50cmFuc2xhdGUoYmFja2dyb3VuZFByb3BzLmdldFRyYW5zbGF0aW9uWCgpLCBiYWNrZ3JvdW5kUHJvcHMuZ2V0VHJhbnNsYXRpb25ZKCkpOworCisgICAgLy8gSWYgdGhlIHByb2plY3Rpb24gcmVjZWl2ZXIgaGFzIGFuIG91dGxpbmUsIHdlIG1hc2sgcHJvamVjdGVkIGNvbnRlbnQgdG8gaXQKKyAgICAvLyAod2hpY2ggd2Uga25vdywgYXByaW9yaSwgYXJlIGFsbCB0ZXNzZWxsYXRlZCBwYXRocykKKyAgICBtQ2FudmFzU3RhdGUuc2V0UHJvamVjdGlvblBhdGhNYXNrKG1BbGxvY2F0b3IsIHByb2plY3Rpb25SZWNlaXZlck91dGxpbmUpOworCisgICAgLy8gZHJhdyBwcm9qZWN0ZWQgbm9kZXMKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlbmRlck5vZGUubVByb2plY3RlZE5vZGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFJlbmRlck5vZGVPcCogY2hpbGRPcCA9IHJlbmRlck5vZGUubVByb2plY3RlZE5vZGVzW2ldOworCisgICAgICAgIGludCByZXN0b3JlVG8gPSBtQ2FudmFzU3RhdGUuc2F2ZShTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyk7CisgICAgICAgIG1DYW52YXNTdGF0ZS5jb25jYXRNYXRyaXgoY2hpbGRPcC0+dHJhbnNmb3JtRnJvbUNvbXBvc2l0aW5nQW5jZXN0b3IpOworICAgICAgICBkZWZlclJlbmRlck5vZGVPcEltcGwoKmNoaWxkT3ApOworICAgICAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQocmVzdG9yZVRvKTsKKyAgICB9CisKKyAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQoY291bnQpOworfQorCisvKioKKyAqIFVzZWQgdG8gZGVmaW5lIGEgbGlzdCBvZiBsYW1iZGFzIHJlZmVyZW5jaW5nIHByaXZhdGUgRnJhbWVCdWlsZGVyOjpvblhYOjpkZWZlcigpIG1ldGhvZHMuCisgKgorICogVGhpcyBhbGxvd3Mgb3BJZHMgZW1iZWRkZWQgaW4gdGhlIFJlY29yZGVkT3BzIHRvIGJlIHVzZWQgZm9yIGRpc3BhdGNoaW5nIHRvIHRoZXNlIGxhbWJkYXMuCisgKiBFLmcuIGEgQml0bWFwT3Agb3AgdGhlbiB3b3VsZCBiZSBkaXNwYXRjaGVkIHRvIEZyYW1lQnVpbGRlcjo6b25CaXRtYXBPcChjb25zdCBCaXRtYXBPcCYpCisgKi8KKyNkZWZpbmUgT1BfUkVDRUlWRVIoVHlwZSkgXAorICAgICAgICBbXShGcmFtZUJ1aWxkZXImIGZyYW1lQnVpbGRlciwgY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsgZnJhbWVCdWlsZGVyLmRlZmVyIyNUeXBlKHN0YXRpY19jYXN0PGNvbnN0IFR5cGUmPihvcCkpOyB9LAordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyTm9kZU9wcyhjb25zdCBSZW5kZXJOb2RlJiByZW5kZXJOb2RlKSB7CisgICAgdHlwZWRlZiB2b2lkICgqT3BEaXNwYXRjaGVyKSAoRnJhbWVCdWlsZGVyJiBmcmFtZUJ1aWxkZXIsIGNvbnN0IFJlY29yZGVkT3AmIG9wKTsKKyAgICBzdGF0aWMgT3BEaXNwYXRjaGVyIHJlY2VpdmVyc1tdID0gQlVJTERfREVGRVJSQUJMRV9PUF9MVVQoT1BfUkVDRUlWRVIpOworCisgICAgLy8gY2FuJ3QgYmUgbnVsbCwgc2luY2UgREw9bnVsbCBub2RlIHJlamVjdGlvbiBoYXBwZW5zIGJlZm9yZSBkZWZlck5vZGVQcm9wc0FuZE9wcworICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCA9ICoocmVuZGVyTm9kZS5nZXREaXNwbGF5TGlzdCgpKTsKKyAgICBmb3IgKGNvbnN0IERpc3BsYXlMaXN0OjpDaHVuayYgY2h1bmsgOiBkaXNwbGF5TGlzdC5nZXRDaHVua3MoKSkgeworICAgICAgICBGYXRWZWN0b3I8WlJlbmRlck5vZGVPcFBhaXIsIDE2PiB6VHJhbnNsYXRlZE5vZGVzOworICAgICAgICBidWlsZFpTb3J0ZWRDaGlsZExpc3QoJnpUcmFuc2xhdGVkTm9kZXMsIGRpc3BsYXlMaXN0LCBjaHVuayk7CisKKyAgICAgICAgZGVmZXIzZENoaWxkcmVuKENoaWxkcmVuU2VsZWN0TW9kZTo6TmVnYXRpdmUsIHpUcmFuc2xhdGVkTm9kZXMpOworICAgICAgICBmb3IgKHNpemVfdCBvcEluZGV4ID0gY2h1bmsuYmVnaW5PcEluZGV4OyBvcEluZGV4IDwgY2h1bmsuZW5kT3BJbmRleDsgb3BJbmRleCsrKSB7CisgICAgICAgICAgICBjb25zdCBSZWNvcmRlZE9wKiBvcCA9IGRpc3BsYXlMaXN0LmdldE9wcygpW29wSW5kZXhdOworICAgICAgICAgICAgcmVjZWl2ZXJzW29wLT5vcElkXSgqdGhpcywgKm9wKTsKKworICAgICAgICAgICAgaWYgKENDX1VOTElLRUxZKCFyZW5kZXJOb2RlLm1Qcm9qZWN0ZWROb2Rlcy5lbXB0eSgpCisgICAgICAgICAgICAgICAgICAgICYmIGRpc3BsYXlMaXN0LnByb2plY3Rpb25SZWNlaXZlSW5kZXggPj0gMAorICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxpbnQ+KG9wSW5kZXgpID09IGRpc3BsYXlMaXN0LnByb2plY3Rpb25SZWNlaXZlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgZGVmZXJQcm9qZWN0ZWRDaGlsZHJlbihyZW5kZXJOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWZlcjNkQ2hpbGRyZW4oQ2hpbGRyZW5TZWxlY3RNb2RlOjpQb3NpdGl2ZSwgelRyYW5zbGF0ZWROb2Rlcyk7CisgICAgfQorfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJSZW5kZXJOb2RlT3BJbXBsKGNvbnN0IFJlbmRlck5vZGVPcCYgb3ApIHsKKyAgICBpZiAob3AucmVuZGVyTm9kZS0+bm90aGluZ1RvRHJhdygpKSByZXR1cm47CisgICAgaW50IGNvdW50ID0gbUNhbnZhc1N0YXRlLnNhdmUoU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnIHwgU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOworCisgICAgLy8gYXBwbHkgc3RhdGUgZnJvbSBSZWNvcmRlZE9wIChjbGlwIGZpcnN0LCBzaW5jZSBvcCdzIGNsaXAgaXMgdHJhbnNmb3JtZWQgYnkgY3VycmVudCBtYXRyaXgpCisgICAgbUNhbnZhc1N0YXRlLndyaXRhYmxlU25hcHNob3QoKS0+bXV0YXRlQ2xpcEFyZWEoKS5hcHBseUNsaXAob3AubG9jYWxDbGlwLAorICAgICAgICAgICAgKm1DYW52YXNTdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKTsKKyAgICBtQ2FudmFzU3RhdGUuY29uY2F0TWF0cml4KG9wLmxvY2FsTWF0cml4KTsKKworICAgIC8vIHRoZW4gYXBwbHkgc3RhdGUgZnJvbSBub2RlIHByb3BlcnRpZXMsIGFuZCBkZWZlciBvcHMKKyAgICBkZWZlck5vZGVQcm9wc0FuZE9wcygqb3AucmVuZGVyTm9kZSk7CisKKyAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQoY291bnQpOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJSZW5kZXJOb2RlT3AoY29uc3QgUmVuZGVyTm9kZU9wJiBvcCkgeworICAgIGlmICghb3Auc2tpcEluT3JkZXJEcmF3KSB7CisgICAgICAgIGRlZmVyUmVuZGVyTm9kZU9wSW1wbChvcCk7CisgICAgfQorfQorCisvKioKKyAqIERlZmVycyBhbiB1bm1lcmdlYWJsZSwgc3Ryb2tlYWJsZSBvcCwgYWNjb3VudGluZyBjb3JyZWN0bHkKKyAqIGZvciBwYWludCdzIHN0eWxlIG9uIHRoZSBib3VuZHMgYmVpbmcgY29tcHV0ZWQuCisgKi8KK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclN0cm9rZWFibGVPcChjb25zdCBSZWNvcmRlZE9wJiBvcCwgYmF0Y2hpZF90IGJhdGNoSWQsCisgICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKKyAgICAvLyBOb3RlOiBoZXJlIHdlIGFjY291bnQgZm9yIHN0cm9rZSB3aGVuIGJha2luZyB0aGUgb3AKKyAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVN0cm9rZWFibGVPcENvbnN0cnVjdCgKKyAgICAgICAgICAgIG1BbGxvY2F0b3IsICptQ2FudmFzU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpLCBvcCwgc3Ryb2tlQmVoYXZpb3IpOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBiYXRjaElkKTsKK30KKworLyoqCisgKiBSZXR1cm5zIGJhdGNoIGlkIGZvciB0ZXNzZWxsYXRhYmxlIHNoYXBlcywgYmFzZWQgb24gcGFpbnQuIENoZWNrcyB0byBzZWUgaWYgcGF0aCBlZmZlY3QvQUEgd2lsbAorICogYmUgdXNlZCwgc2luY2UgdGhleSB0cmlnZ2VyIHNpZ25pZmljYW50bHkgZGlmZmVyZW50IHJlbmRlcmluZyBwYXRocy4KKyAqCisgKiBOb3RlOiBub3QgdXNlZCBmb3IgbGluZXMvcG9pbnRzLCBzaW5jZSB0aGV5IGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHBhdGggZWZmZWN0cy4KKyAqLworc3RhdGljIGJhdGNoaWRfdCB0ZXNzQmF0Y2hJZChjb25zdCBSZWNvcmRlZE9wJiBvcCkgeworICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50ID0gKihvcC5wYWludCk7CisgICAgcmV0dXJuIHBhaW50LmdldFBhdGhFZmZlY3QoKQorICAgICAgICAgICAgPyBPcEJhdGNoVHlwZTo6QWxwaGFNYXNrVGV4dHVyZQorICAgICAgICAgICAgOiAocGFpbnQuaXNBbnRpQWxpYXMoKSA/IE9wQmF0Y2hUeXBlOjpBbHBoYVZlcnRpY2VzIDogT3BCYXRjaFR5cGU6OlZlcnRpY2VzKTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyQXJjT3AoY29uc3QgQXJjT3AmIG9wKSB7CisgICAgZGVmZXJTdHJva2VhYmxlT3Aob3AsIHRlc3NCYXRjaElkKG9wKSk7Cit9CisKK3N0YXRpYyBib29sIGhhc01lcmdlYWJsZUNsaXAoY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeworICAgIHJldHVybiBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBTdGF0ZQorICAgICAgICAgICAgfHwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwU3RhdGUtPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyQml0bWFwT3AoY29uc3QgQml0bWFwT3AmIG9wKSB7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUob3ApOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorCisgICAgLy8gRG9uJ3QgbWVyZ2Ugbm9uLXNpbXBseSB0cmFuc2Zvcm1lZCBvciBuZWcgc2NhbGUgb3BzLCBTRVRfVEVYVFVSRSBkb2Vzbid0IGhhbmRsZSByb3RhdGlvbgorICAgIC8vIERvbid0IG1lcmdlIEE4IGJpdG1hcHMgLSB0aGUgcGFpbnQncyBjb2xvciBpc24ndCBjb21wYXJlZCBieSBtZXJnZUlkLCBvciBpbgorICAgIC8vIE1lcmdpbmdEcmF3QmF0Y2g6OmNhbk1lcmdlV2l0aCgpCisgICAgaWYgKGJha2VkU3RhdGUtPmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzU2ltcGxlKCkKKyAgICAgICAgICAgICYmIGJha2VkU3RhdGUtPmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLnBvc2l0aXZlU2NhbGUoKQorICAgICAgICAgICAgJiYgUGFpbnRVdGlsczo6Z2V0WGZlcm1vZGVEaXJlY3Qob3AucGFpbnQpID09IFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUKKyAgICAgICAgICAgICYmIG9wLmJpdG1hcC0+Y29sb3JUeXBlKCkgIT0ga0FscGhhXzhfU2tDb2xvclR5cGUKKyAgICAgICAgICAgICYmIGhhc01lcmdlYWJsZUNsaXAoKmJha2VkU3RhdGUpKSB7CisgICAgICAgIG1lcmdlaWRfdCBtZXJnZUlkID0gcmVpbnRlcnByZXRfY2FzdDxtZXJnZWlkX3Q+KG9wLmJpdG1hcC0+Z2V0R2VuZXJhdGlvbklEKCkpOworICAgICAgICAvLyBUT0RPOiBBc3NldEF0bGFzIGluIG1lcmdlSWQKKyAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJNZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBPcEJhdGNoVHlwZTo6Qml0bWFwLCBtZXJnZUlkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCk7CisgICAgfQorfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJCaXRtYXBNZXNoT3AoY29uc3QgQml0bWFwTWVzaE9wJiBvcCkgeworICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IHRyeUJha2VPcFN0YXRlKG9wKTsKKyAgICBpZiAoIWJha2VkU3RhdGUpIHJldHVybjsgLy8gcXVpY2sgcmVqZWN0ZWQKKyAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCk7Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlckJpdG1hcFJlY3RPcChjb25zdCBCaXRtYXBSZWN0T3AmIG9wKSB7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUob3ApOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBPcEJhdGNoVHlwZTo6Qml0bWFwKTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyQ2lyY2xlUHJvcHNPcChjb25zdCBDaXJjbGVQcm9wc09wJiBvcCkgeworICAgIC8vIGFsbG9jYXRlIGEgdGVtcG9yYXJ5IG92YWwgb3AgKHdpdGggbUFsbG9jYXRvciwgc28gaXQgcGVyc2lzdHMgdW50aWwgcmVuZGVyKSwgc28gdGhlCisgICAgLy8gcmVuZGVyZXIgZG9lc24ndCBoYXZlIHRvIGhhbmRsZSB0aGUgUm91bmRSZWN0UHJvcHNPcCB0eXBlLCBhbmQgc28gc3RhdGUgYmFraW5nIGlzIHNpbXBsZS4KKyAgICBmbG9hdCB4ID0gKihvcC54KTsKKyAgICBmbG9hdCB5ID0gKihvcC55KTsKKyAgICBmbG9hdCByYWRpdXMgPSAqKG9wLnJhZGl1cyk7CisgICAgUmVjdCB1bm1hcHBlZEJvdW5kcyh4IC0gcmFkaXVzLCB5IC0gcmFkaXVzLCB4ICsgcmFkaXVzLCB5ICsgcmFkaXVzKTsKKyAgICBjb25zdCBPdmFsT3AqIHJlc29sdmVkT3AgPSBuZXcgKG1BbGxvY2F0b3IpIE92YWxPcCgKKyAgICAgICAgICAgIHVubWFwcGVkQm91bmRzLAorICAgICAgICAgICAgb3AubG9jYWxNYXRyaXgsCisgICAgICAgICAgICBvcC5sb2NhbENsaXAsCisgICAgICAgICAgICBvcC5wYWludCk7CisgICAgZGVmZXJPdmFsT3AoKnJlc29sdmVkT3ApOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJGdW5jdG9yT3AoY29uc3QgRnVuY3Rvck9wJiBvcCkgeworICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IHRyeUJha2VPcFN0YXRlKG9wKTsKKyAgICBpZiAoIWJha2VkU3RhdGUpIHJldHVybjsgLy8gcXVpY2sgcmVqZWN0ZWQKKyAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OkZ1bmN0b3IpOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJMaW5lc09wKGNvbnN0IExpbmVzT3AmIG9wKSB7CisgICAgYmF0Y2hpZF90IGJhdGNoID0gb3AucGFpbnQtPmlzQW50aUFsaWFzKCkgPyBPcEJhdGNoVHlwZTo6QWxwaGFWZXJ0aWNlcyA6IE9wQmF0Y2hUeXBlOjpWZXJ0aWNlczsKKyAgICBkZWZlclN0cm9rZWFibGVPcChvcCwgYmF0Y2gsIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OkZvcmNlZCk7Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlck92YWxPcChjb25zdCBPdmFsT3AmIG9wKSB7CisgICAgZGVmZXJTdHJva2VhYmxlT3Aob3AsIHRlc3NCYXRjaElkKG9wKSk7Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclBhdGNoT3AoY29uc3QgUGF0Y2hPcCYgb3ApIHsKKyAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZShvcCk7CisgICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCisKKyAgICBpZiAoYmFrZWRTdGF0ZS0+Y29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uaXNQdXJlVHJhbnNsYXRlKCkKKyAgICAgICAgICAgICYmIFBhaW50VXRpbHM6OmdldFhmZXJtb2RlRGlyZWN0KG9wLnBhaW50KSA9PSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlCisgICAgICAgICAgICAmJiBoYXNNZXJnZWFibGVDbGlwKCpiYWtlZFN0YXRlKSkgeworICAgICAgICBtZXJnZWlkX3QgbWVyZ2VJZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWVyZ2VpZF90PihvcC5iaXRtYXAtPmdldEdlbmVyYXRpb25JRCgpKTsKKyAgICAgICAgLy8gVE9ETzogQXNzZXRBdGxhcyBpbiBtZXJnZUlkCisKKyAgICAgICAgLy8gT25seSB1c2UgdGhlIE1lcmdlZFBhdGNoIGJhdGNoSWQgd2hlbiBtZXJnZWQsIHNvIEJpdG1hcCtQYXRjaCBkb24ndCB0cnkgdG8gbWVyZ2UgdG9nZXRoZXIKKyAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJNZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBPcEJhdGNoVHlwZTo6TWVyZ2VkUGF0Y2gsIG1lcmdlSWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFVzZSBCaXRtYXAgYmF0Y2hJZCBzaW5jZSBCaXRtYXArUGF0Y2ggdXNlIHNhbWUgc2hhZGVyCisgICAgICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBPcEJhdGNoVHlwZTo6Qml0bWFwKTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclBhdGhPcChjb25zdCBQYXRoT3AmIG9wKSB7CisgICAgZGVmZXJTdHJva2VhYmxlT3Aob3AsIE9wQmF0Y2hUeXBlOjpCaXRtYXApOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJQb2ludHNPcChjb25zdCBQb2ludHNPcCYgb3ApIHsKKyAgICBiYXRjaGlkX3QgYmF0Y2ggPSBvcC5wYWludC0+aXNBbnRpQWxpYXMoKSA/IE9wQmF0Y2hUeXBlOjpBbHBoYVZlcnRpY2VzIDogT3BCYXRjaFR5cGU6OlZlcnRpY2VzOworICAgIGRlZmVyU3Ryb2tlYWJsZU9wKG9wLCBiYXRjaCwgQmFrZWRPcFN0YXRlOjpTdHJva2VCZWhhdmlvcjo6Rm9yY2VkKTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyUmVjdE9wKGNvbnN0IFJlY3RPcCYgb3ApIHsKKyAgICBkZWZlclN0cm9rZWFibGVPcChvcCwgdGVzc0JhdGNoSWQob3ApKTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyUm91bmRSZWN0T3AoY29uc3QgUm91bmRSZWN0T3AmIG9wKSB7CisgICAgZGVmZXJTdHJva2VhYmxlT3Aob3AsIHRlc3NCYXRjaElkKG9wKSk7Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclJvdW5kUmVjdFByb3BzT3AoY29uc3QgUm91bmRSZWN0UHJvcHNPcCYgb3ApIHsKKyAgICAvLyBhbGxvY2F0ZSBhIHRlbXBvcmFyeSByb3VuZCByZWN0IG9wICh3aXRoIG1BbGxvY2F0b3IsIHNvIGl0IHBlcnNpc3RzIHVudGlsIHJlbmRlciksIHNvIHRoZQorICAgIC8vIHJlbmRlcmVyIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgdGhlIFJvdW5kUmVjdFByb3BzT3AgdHlwZSwgYW5kIHNvIHN0YXRlIGJha2luZyBpcyBzaW1wbGUuCisgICAgY29uc3QgUm91bmRSZWN0T3AqIHJlc29sdmVkT3AgPSBuZXcgKG1BbGxvY2F0b3IpIFJvdW5kUmVjdE9wKAorICAgICAgICAgICAgUmVjdCgqKG9wLmxlZnQpLCAqKG9wLnRvcCksICoob3AucmlnaHQpLCAqKG9wLmJvdHRvbSkpLAorICAgICAgICAgICAgb3AubG9jYWxNYXRyaXgsCisgICAgICAgICAgICBvcC5sb2NhbENsaXAsCisgICAgICAgICAgICBvcC5wYWludCwgKm9wLnJ4LCAqb3AucnkpOworICAgIGRlZmVyUm91bmRSZWN0T3AoKnJlc29sdmVkT3ApOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJTaW1wbGVSZWN0c09wKGNvbnN0IFNpbXBsZVJlY3RzT3AmIG9wKSB7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUob3ApOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBPcEJhdGNoVHlwZTo6VmVydGljZXMpOworfQorCitzdGF0aWMgYmF0Y2hpZF90IHRleHRCYXRjaElkKGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7CisgICAgLy8gVE9ETzogYmV0dGVyIGhhbmRsaW5nIG9mIHNoYWRlciAoc2luY2Ugd2Ugd29uJ3QgY2FyZSBhYm91dCBjb2xvciB0aGVuKQorICAgIHJldHVybiBwYWludC5nZXRDb2xvcigpID09IFNLX0NvbG9yQkxBQ0sgPyBPcEJhdGNoVHlwZTo6VGV4dCA6IE9wQmF0Y2hUeXBlOjpDb2xvclRleHQ7Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclRleHRPcChjb25zdCBUZXh0T3AmIG9wKSB7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUob3ApOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorCisgICAgYmF0Y2hpZF90IGJhdGNoSWQgPSB0ZXh0QmF0Y2hJZCgqKG9wLnBhaW50KSk7CisgICAgaWYgKGJha2VkU3RhdGUtPmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzUHVyZVRyYW5zbGF0ZSgpCisgICAgICAgICAgICAmJiBQYWludFV0aWxzOjpnZXRYZmVybW9kZURpcmVjdChvcC5wYWludCkgPT0gU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZQorICAgICAgICAgICAgJiYgaGFzTWVyZ2VhYmxlQ2xpcCgqYmFrZWRTdGF0ZSkpIHsKKyAgICAgICAgbWVyZ2VpZF90IG1lcmdlSWQgPSByZWludGVycHJldF9jYXN0PG1lcmdlaWRfdD4ob3AucGFpbnQtPmdldENvbG9yKCkpOworICAgICAgICBjdXJyZW50TGF5ZXIoKS5kZWZlck1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIGJhdGNoSWQsIG1lcmdlSWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBiYXRjaElkKTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlclRleHRPblBhdGhPcChjb25zdCBUZXh0T25QYXRoT3AmIG9wKSB7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUob3ApOworICAgIGlmICghYmFrZWRTdGF0ZSkgcmV0dXJuOyAvLyBxdWljayByZWplY3RlZAorICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCB0ZXh0QmF0Y2hJZCgqKG9wLnBhaW50KSkpOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJUZXh0dXJlTGF5ZXJPcChjb25zdCBUZXh0dXJlTGF5ZXJPcCYgb3ApIHsKKyAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZShvcCk7CisgICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCisgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIE9wQmF0Y2hUeXBlOjpUZXh0dXJlTGF5ZXIpOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6c2F2ZUZvckxheWVyKHVpbnQzMl90IGxheWVyV2lkdGgsIHVpbnQzMl90IGxheWVySGVpZ2h0LAorICAgICAgICBmbG9hdCBjb250ZW50VHJhbnNsYXRlWCwgZmxvYXQgY29udGVudFRyYW5zbGF0ZVksCisgICAgICAgIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0LAorICAgICAgICBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlciwKKyAgICAgICAgY29uc3QgQmVnaW5MYXllck9wKiBiZWdpbkxheWVyT3AsIFJlbmRlck5vZGUqIHJlbmRlck5vZGUpIHsKKyAgICBtQ2FudmFzU3RhdGUuc2F2ZShTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a01hdHJpeF9TYXZlRmxhZyk7CisgICAgbUNhbnZhc1N0YXRlLndyaXRhYmxlU25hcHNob3QoKS0+aW5pdGlhbGl6ZVZpZXdwb3J0KGxheWVyV2lkdGgsIGxheWVySGVpZ2h0KTsKKyAgICBtQ2FudmFzU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpLT5yb3VuZFJlY3RDbGlwU3RhdGUgPSBudWxscHRyOworICAgIG1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPnNldFJlbGF0aXZlTGlnaHRDZW50ZXIobGlnaHRDZW50ZXIpOworICAgIG1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPnRyYW5zZm9ybS0+bG9hZFRyYW5zbGF0ZSgKKyAgICAgICAgICAgIGNvbnRlbnRUcmFuc2xhdGVYLCBjb250ZW50VHJhbnNsYXRlWSwgMCk7CisgICAgbUNhbnZhc1N0YXRlLndyaXRhYmxlU25hcHNob3QoKS0+c2V0Q2xpcCgKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LmxlZnQsIHJlcGFpbnRSZWN0LnRvcCwgcmVwYWludFJlY3QucmlnaHQsIHJlcGFpbnRSZWN0LmJvdHRvbSk7CisKKyAgICAvLyBjcmVhdGUgYSBuZXcgbGF5ZXIgcmVwYWludCwgYW5kIHB1c2ggaXRzIGluZGV4IG9uIHRoZSBzdGFjaworICAgIG1MYXllclN0YWNrLnB1c2hfYmFjayhtTGF5ZXJCdWlsZGVycy5zaXplKCkpOworICAgIGF1dG8gbmV3RmJvID0gbUFsbG9jYXRvci5jcmVhdGU8TGF5ZXJCdWlsZGVyPihsYXllcldpZHRoLCBsYXllckhlaWdodCwKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LCBiZWdpbkxheWVyT3AsIHJlbmRlck5vZGUpOworICAgIG1MYXllckJ1aWxkZXJzLnB1c2hfYmFjayhuZXdGYm8pOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6cmVzdG9yZUZvckxheWVyKCkgeworICAgIC8vIHJlc3RvcmUgY2FudmFzLCBhbmQgcG9wIGZpbmlzaGVkIGxheWVyIG9mZiBvZiB0aGUgc3RhY2sKKyAgICBtQ2FudmFzU3RhdGUucmVzdG9yZSgpOworICAgIG1MYXllclN0YWNrLnBvcF9iYWNrKCk7Cit9CisKKy8vIFRPRE86IGRlZmVyIHRpbWUgcmVqZWN0aW9uICh3aGVuIGJvdW5kcyBiZWNvbWUgZW1wdHkpICsgdGVzdHMKKy8vIE9wdGlvbiAtIGp1c3Qgc2tpcCBsYXllcnMgd2l0aCBubyBib3VuZHMgYXQgcGxheWJhY2sgKyBkZWZlcj8KK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlckJlZ2luTGF5ZXJPcChjb25zdCBCZWdpbkxheWVyT3AmIG9wKSB7CisgICAgdWludDMyX3QgbGF5ZXJXaWR0aCA9ICh1aW50MzJfdCkgb3AudW5tYXBwZWRCb3VuZHMuZ2V0V2lkdGgoKTsKKyAgICB1aW50MzJfdCBsYXllckhlaWdodCA9ICh1aW50MzJfdCkgb3AudW5tYXBwZWRCb3VuZHMuZ2V0SGVpZ2h0KCk7CisKKyAgICBhdXRvIHByZXZpb3VzID0gbUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpOworICAgIFZlY3RvcjMgbGlnaHRDZW50ZXIgPSBwcmV2aW91cy0+Z2V0UmVsYXRpdmVMaWdodENlbnRlcigpOworCisgICAgLy8gQ29tYmluZSBhbGwgdHJhbnNmb3JtcyB1c2VkIHRvIHByZXNlbnQgc2F2ZUxheWVyIGNvbnRlbnQ6CisgICAgLy8gcGFyZW50IGNvbnRlbnQgdHJhbnNmb3JtICogY2FudmFzIHRyYW5zZm9ybSAqIGJvdW5kcyBvZmZzZXQKKyAgICBNYXRyaXg0IGNvbnRlbnRUcmFuc2Zvcm0oKihwcmV2aW91cy0+dHJhbnNmb3JtKSk7CisgICAgY29udGVudFRyYW5zZm9ybS5tdWx0aXBseShvcC5sb2NhbE1hdHJpeCk7CisgICAgY29udGVudFRyYW5zZm9ybS50cmFuc2xhdGUob3AudW5tYXBwZWRCb3VuZHMubGVmdCwgb3AudW5tYXBwZWRCb3VuZHMudG9wKTsKKworICAgIE1hdHJpeDQgaW52ZXJzZUNvbnRlbnRUcmFuc2Zvcm07CisgICAgaW52ZXJzZUNvbnRlbnRUcmFuc2Zvcm0ubG9hZEludmVyc2UoY29udGVudFRyYW5zZm9ybSk7CisKKyAgICAvLyBtYXAgdGhlIGxpZ2h0IGNlbnRlciBpbnRvIGxheWVyLXJlbGF0aXZlIHNwYWNlCisgICAgaW52ZXJzZUNvbnRlbnRUcmFuc2Zvcm0ubWFwUG9pbnQzZChsaWdodENlbnRlcik7CisKKyAgICAvLyBDbGlwIGJvdW5kcyBvZiB0ZW1wb3JhcnkgbGF5ZXIgdG8gcGFyZW50J3MgY2xpcCByZWN0LCBzbzoKKyAgICBSZWN0IHNhdmVMYXllckJvdW5kcyhsYXllcldpZHRoLCBsYXllckhlaWdodCk7CisgICAgLy8gICAgIDEpIHRyYW5zZm9ybSBSZWN0KHdpZHRoLCBoZWlnaHQpIGludG8gcGFyZW50J3Mgc3BhY2UKKyAgICAvLyAgICAgICAgbm90ZTogbGVmdC90b3Agb2Zmc2V0cyBwdXQgaW4gY29udGVudFRyYW5zZm9ybSBhYm92ZQorICAgIGNvbnRlbnRUcmFuc2Zvcm0ubWFwUmVjdChzYXZlTGF5ZXJCb3VuZHMpOworICAgIC8vICAgICAyKSBpbnRlcnNlY3Qgd2l0aCBwYXJlbnQncyBjbGlwCisgICAgc2F2ZUxheWVyQm91bmRzLmRvSW50ZXJzZWN0KHByZXZpb3VzLT5nZXRSZW5kZXJUYXJnZXRDbGlwKCkpOworICAgIC8vICAgICAzKSBhbmQgdHJhbnNmb3JtIGJhY2sKKyAgICBpbnZlcnNlQ29udGVudFRyYW5zZm9ybS5tYXBSZWN0KHNhdmVMYXllckJvdW5kcyk7CisgICAgc2F2ZUxheWVyQm91bmRzLmRvSW50ZXJzZWN0KFJlY3QobGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQpKTsKKyAgICBzYXZlTGF5ZXJCb3VuZHMucm91bmRPdXQoKTsKKworICAgIC8vIGlmIGJvdW5kcyBhcmUgcmVkdWNlZCwgd2lsbCBjbGlwIHRoZSBsYXllcidzIGFyZWEgYnkgcmVkdWNpbmcgcmVxdWlyZWQgYm91bmRzLi4uCisgICAgbGF5ZXJXaWR0aCA9IHNhdmVMYXllckJvdW5kcy5nZXRXaWR0aCgpOworICAgIGxheWVySGVpZ2h0ID0gc2F2ZUxheWVyQm91bmRzLmdldEhlaWdodCgpOworICAgIC8vIC4uLmFuZCBzaGlmdGluZyBkcmF3aW5nIGNvbnRlbnQgdG8gYWNjb3VudCBmb3IgbGVmdC90b3Agc2lkZSBjbGlwcGluZworICAgIGZsb2F0IGNvbnRlbnRUcmFuc2xhdGVYID0gLXNhdmVMYXllckJvdW5kcy5sZWZ0OworICAgIGZsb2F0IGNvbnRlbnRUcmFuc2xhdGVZID0gLXNhdmVMYXllckJvdW5kcy50b3A7CisKKyAgICBzYXZlRm9yTGF5ZXIobGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQsCisgICAgICAgICAgICBjb250ZW50VHJhbnNsYXRlWCwgY29udGVudFRyYW5zbGF0ZVksCisgICAgICAgICAgICBSZWN0KGxheWVyV2lkdGgsIGxheWVySGVpZ2h0KSwKKyAgICAgICAgICAgIGxpZ2h0Q2VudGVyLAorICAgICAgICAgICAgJm9wLCBudWxscHRyKTsKK30KKwordm9pZCBGcmFtZUJ1aWxkZXI6OmRlZmVyRW5kTGF5ZXJPcChjb25zdCBFbmRMYXllck9wJiAvKiBpZ25vcmVkICovKSB7CisgICAgY29uc3QgQmVnaW5MYXllck9wJiBiZWdpbkxheWVyT3AgPSAqY3VycmVudExheWVyKCkuYmVnaW5MYXllck9wOworICAgIGludCBmaW5pc2hlZExheWVySW5kZXggPSBtTGF5ZXJTdGFjay5iYWNrKCk7CisKKyAgICByZXN0b3JlRm9yTGF5ZXIoKTsKKworICAgIC8vIHJlY29yZCB0aGUgZHJhdyBvcGVyYXRpb24gaW50byB0aGUgcHJldmlvdXMgbGF5ZXIncyBsaXN0IG9mIGRyYXcgY29tbWFuZHMKKyAgICAvLyB1c2VzIHN0YXRlIGZyb20gdGhlIGFzc29jaWF0ZWQgYmVnaW5MYXllck9wLCBzaW5jZSBpdCBoYXMgYWxsIHRoZSBzdGF0ZSBuZWVkZWQgZm9yIGRyYXdpbmcKKyAgICBMYXllck9wKiBkcmF3TGF5ZXJPcCA9IG5ldyAobUFsbG9jYXRvcikgTGF5ZXJPcCgKKyAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC51bm1hcHBlZEJvdW5kcywKKyAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC5sb2NhbE1hdHJpeCwKKyAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC5sb2NhbENsaXAsCisgICAgICAgICAgICBiZWdpbkxheWVyT3AucGFpbnQsCisgICAgICAgICAgICAmKG1MYXllckJ1aWxkZXJzW2ZpbmlzaGVkTGF5ZXJJbmRleF0tPm9mZnNjcmVlbkJ1ZmZlcikpOworICAgIEJha2VkT3BTdGF0ZSogYmFrZWRPcFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUoKmRyYXdMYXllck9wKTsKKworICAgIGlmIChiYWtlZE9wU3RhdGUpIHsKKyAgICAgICAgLy8gTGF5ZXIgd2lsbCBiZSBkcmF3biBpbnRvIHBhcmVudCBsYXllciAod2hpY2ggaXMgbm93IGN1cnJlbnQsIHNpbmNlIHdlIHBvcHBlZCBtTGF5ZXJTdGFjaykKKyAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkT3BTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTGF5ZXIgd29uJ3QgYmUgZHJhd24gLSBkZWxldGUgaXRzIGRyYXdpbmcgYmF0Y2hlcyB0byBwcmV2ZW50IGl0IGZyb20gZG9pbmcgYW55IHdvcmsKKyAgICAgICAgLy8gVE9ETzogbmVlZCB0byBwcmV2ZW50IGFueSByZW5kZXIgd29yayBmcm9tIGJlaW5nIGRvbmUKKyAgICAgICAgLy8gLSBjcmVhdGUgbGF5ZXJvcCBlYXJsaWVyIGZvciByZWplY3QgcHVycG9zZXM/CisgICAgICAgIG1MYXllckJ1aWxkZXJzW2ZpbmlzaGVkTGF5ZXJJbmRleF0tPmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVCdWlsZGVyOjpkZWZlckJlZ2luVW5jbGlwcGVkTGF5ZXJPcChjb25zdCBCZWdpblVuY2xpcHBlZExheWVyT3AmIG9wKSB7CisgICAgTWF0cml4NCBib3VuZHNUcmFuc2Zvcm0oKihtQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSkpOworICAgIGJvdW5kc1RyYW5zZm9ybS5tdWx0aXBseShvcC5sb2NhbE1hdHJpeCk7CisKKyAgICBSZWN0IGRzdFJlY3Qob3AudW5tYXBwZWRCb3VuZHMpOworICAgIGJvdW5kc1RyYW5zZm9ybS5tYXBSZWN0KGRzdFJlY3QpOworICAgIGRzdFJlY3QuZG9JbnRlcnNlY3QobUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT5nZXRSZW5kZXJUYXJnZXRDbGlwKCkpOworCisgICAgLy8gQWxsb2NhdGUgYSBob2xkaW5nIHBvc2l0aW9uIGZvciB0aGUgbGF5ZXIgb2JqZWN0IChjb3B5VG8gd2lsbCBwcm9kdWNlLCBjb3B5RnJvbSB3aWxsIGNvbnN1bWUpCisgICAgT2Zmc2NyZWVuQnVmZmVyKiogbGF5ZXJIYW5kbGUgPSBtQWxsb2NhdG9yLmNyZWF0ZTxPZmZzY3JlZW5CdWZmZXIqPihudWxscHRyKTsKKworICAgIC8qKgorICAgICAqIEZpcnN0LCBkZWZlciBhbiBvcGVyYXRpb24gdG8gY29weSBvdXQgdGhlIGNvbnRlbnQgZnJvbSB0aGUgcmVuZGVydGFyZ2V0IGludG8gYSBsYXllci4KKyAgICAgKi8KKyAgICBhdXRvIGNvcHlUb09wID0gbmV3IChtQWxsb2NhdG9yKSBDb3B5VG9MYXllck9wKG9wLCBsYXllckhhbmRsZSk7CisgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjpkaXJlY3RDb25zdHJ1Y3QobUFsbG9jYXRvciwKKyAgICAgICAgICAgICYoY3VycmVudExheWVyKCkudmlld3BvcnRDbGlwKSwgZHN0UmVjdCwgKmNvcHlUb09wKTsKKyAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OkNvcHlUb0xheWVyKTsKKworICAgIC8qKgorICAgICAqIERlZmVyIGEgY2xlYXIgcmVjdCwgc28gdGhhdCBjbGVhcnMgZnJvbSBtdWx0aXBsZSB1bmNsaXBwZWQgbGF5ZXJzIGNhbiBiZSBkcmF3bgorICAgICAqIGJvdGggMSkgc2ltdWx0YW5lb3VzbHksIGFuZCAyKSBhcyBsb25nIGFmdGVyIHRoZSBjb3B5VG9MYXllciBleGVjdXRlcyBhcyBwb3NzaWJsZQorICAgICAqLworICAgIGN1cnJlbnRMYXllcigpLmRlZmVyTGF5ZXJDbGVhcihkc3RSZWN0KTsKKworICAgIC8qKgorICAgICAqIEFuZCBzdGFzaCBhbiBvcGVyYXRpb24gdG8gY29weSB0aGF0IGxheWVyIGJhY2sgdW5kZXIgdGhlIHJlbmRlcnRhcmdldCB1bnRpbAorICAgICAqIGEgYmFsYW5jZWQgRW5kVW5jbGlwcGVkTGF5ZXJPcCBpcyBzZWVuCisgICAgICovCisgICAgYXV0byBjb3B5RnJvbU9wID0gbmV3IChtQWxsb2NhdG9yKSBDb3B5RnJvbUxheWVyT3Aob3AsIGxheWVySGFuZGxlKTsKKyAgICBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjpkaXJlY3RDb25zdHJ1Y3QobUFsbG9jYXRvciwKKyAgICAgICAgICAgICYoY3VycmVudExheWVyKCkudmlld3BvcnRDbGlwKSwgZHN0UmVjdCwgKmNvcHlGcm9tT3ApOworICAgIGN1cnJlbnRMYXllcigpLmFjdGl2ZVVuY2xpcHBlZFNhdmVMYXllcnMucHVzaF9iYWNrKGJha2VkU3RhdGUpOworfQorCit2b2lkIEZyYW1lQnVpbGRlcjo6ZGVmZXJFbmRVbmNsaXBwZWRMYXllck9wKGNvbnN0IEVuZFVuY2xpcHBlZExheWVyT3AmIC8qIGlnbm9yZWQgKi8pIHsKKyAgICBMT0dfQUxXQVlTX0ZBVEFMX0lGKGN1cnJlbnRMYXllcigpLmFjdGl2ZVVuY2xpcHBlZFNhdmVMYXllcnMuZW1wdHkoKSwgIm5vIGxheWVyIHRvIGVuZCEiKTsKKworICAgIEJha2VkT3BTdGF0ZSogY29weUZyb21MYXllck9wID0gY3VycmVudExheWVyKCkuYWN0aXZlVW5jbGlwcGVkU2F2ZUxheWVycy5iYWNrKCk7CisgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGNvcHlGcm9tTGF5ZXJPcCwgT3BCYXRjaFR5cGU6OkNvcHlGcm9tTGF5ZXIpOworICAgIGN1cnJlbnRMYXllcigpLmFjdGl2ZVVuY2xpcHBlZFNhdmVMYXllcnMucG9wX2JhY2soKTsKK30KKworfSAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0ZyYW1lQnVpbGRlci5oIGIvbGlicy9od3VpL0ZyYW1lQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTczZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvRnJhbWVCdWlsZGVyLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJha2VkT3BTdGF0ZS5oIgorI2luY2x1ZGUgIkNhbnZhc1N0YXRlLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJMYXllckJ1aWxkZXIuaCIKKyNpbmNsdWRlICJSZWNvcmRlZE9wLmgiCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKworc3RydWN0IFNrUmVjdDsKKworbmFtZXNwYWNlIGFuZHJvaWQgeworbmFtZXNwYWNlIHVpcmVuZGVyZXIgeworCitjbGFzcyBCYWtlZE9wU3RhdGU7CitjbGFzcyBMYXllclVwZGF0ZVF1ZXVlOworY2xhc3MgT2Zmc2NyZWVuQnVmZmVyOworY2xhc3MgUmVjdDsKKworLyoqCisgKiBUcmF2ZXJzZXMgYWxsIG9mIHRoZSBkcmF3aW5nIGNvbW1hbmRzIGZyb20gdGhlIGxheWVycyBhbmQgUmVuZGVyTm9kZXMgcGFzc2VkIGludG8gaXQsIHByZXBhcmluZworICogdGhlbSB0byBiZSByZW5kZXJlZC4KKyAqCisgKiBSZXNvbHZlcyBmaW5hbCBkcmF3aW5nIHN0YXRlIGZvciBlYWNoIG9wZXJhdGlvbiAoaW5jbHVkaW5nIGNsaXAsIGFscGhhIGFuZCBtYXRyaXgpLCBhbmQgdGhlbgorICogcmVvcmRlciBhbmQgbWVyZ2UgZWFjaCBvcCBhcyBpdCBpcyByZXNvbHZlZCBmb3IgZHJhd2luZyBlZmZpY2llbmN5LiBFYWNoIGxheWVyIG9mIGNvbnRlbnQgKGVpdGhlcgorICogZnJvbSB0aGUgTGF5ZXJVcGRhdGVRdWV1ZSwgb3IgdGVtcG9yYXJ5IGxheWVycyBjcmVhdGVkIGJ5IHNhdmVMYXllciBvcGVyYXRpb25zIGluIHRoZQorICogZHJhdyBzdHJlYW0pIHdpbGwgY3JlYXRlIGRpZmZlcmVudCByZW9yZGVyIGNvbnRleHRzLCBlYWNoIGluIGl0cyBvd24gTGF5ZXJCdWlsZGVyLgorICoKKyAqIFRoZW4gdGhlIHByZXBhcmVkIG9yICdiYWtlZCcgZHJhd2luZyBjb21tYW5kcyBjYW4gYmUgaXNzdWVkIGJ5IGNhbGxpbmcgdGhlIHRlbXBsYXRlZAorICogcmVwbGF5QmFrZWRPcHMoKSBmdW5jdGlvbiwgd2hpY2ggd2lsbCBkaXNwYXRjaCB0aGVtIChpbmNsdWRpbmcgYW55IGNyZWF0ZWQgbWVyZ2VkIG9wIGNvbGxlY3Rpb25zKQorICogdG8gYSBEaXNwYXRjaGVyIGFuZCBSZW5kZXJlci4gU2VlIEJha2VkT3BEaXNwYXRjaGVyIGZvciBob3cgdGhlc2UgYmFrZWQgZHJhd2luZyBvcGVyYXRpb25zIGFyZQorICogcmVzb2x2ZWQgaW50byBHbG9wcyBhbmQgcmVuZGVyZWQgdmlhIEJha2VkT3BSZW5kZXJlci4KKyAqCisgKiBUaGlzIGNsYXNzIGlzIGFsc28gdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0cmF2ZXJzaW5nIFJlbmRlck5vZGVzLCBib3RoIGZvciBzdGFuZGFyZCBvcAorICogdHJhdmVyc2FsIHdpdGhpbiBhIERpc3BsYXlMaXN0LCBhbmQgZm9yIG91dCBvZiBvcmRlciBSZW5kZXJOb2RlIHRyYXZlcnNhbCBmb3IgWiBhbmQgcHJvamVjdGlvbi4KKyAqLworY2xhc3MgRnJhbWVCdWlsZGVyIDogcHVibGljIENhbnZhc1N0YXRlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBGcmFtZUJ1aWxkZXIoY29uc3QgTGF5ZXJVcGRhdGVRdWV1ZSYgbGF5ZXJzLCBjb25zdCBTa1JlY3QmIGNsaXAsCisgICAgICAgICAgICB1aW50MzJfdCB2aWV3cG9ydFdpZHRoLCB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCwKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPCBzcDxSZW5kZXJOb2RlPiA+JiBub2RlcywgY29uc3QgVmVjdG9yMyYgbGlnaHRDZW50ZXIpOworCisgICAgdmlydHVhbCB+RnJhbWVCdWlsZGVyKCkge30KKworICAgIC8qKgorICAgICAqIHJlcGxheUJha2VkT3BzKCkgaXMgdGVtcGxhdGVkIGJhc2VkIG9uIHdoYXQgY2xhc3Mgd2lsbCByZWNlaXZlIG9wcyBiZWluZyByZXBsYXllZC4KKyAgICAgKgorICAgICAqIEl0IGNvbnN0cnVjdHMgYSBsb29rdXAgYXJyYXkgb2YgbGFtYmRhcywgd2hpY2ggYWxsb3dzIGEgcmVjb3JkZWQgQmFrZU9wU3RhdGUgdG8gdXNlCisgICAgICogc3RhdGUtPm9wLT5vcElkIHRvIGxvb2t1cCBhIHJlY2VpdmVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgb3AgaXMgcmVwbGF5ZWQuCisgICAgICoKKyAgICAgKi8KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RhdGljRGlzcGF0Y2hlciwgdHlwZW5hbWUgUmVuZGVyZXI+CisgICAgdm9pZCByZXBsYXlCYWtlZE9wcyhSZW5kZXJlciYgcmVuZGVyZXIpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBhIHJlY29yZGVkIEJha2VkT3BTdGF0ZSB0byB1c2Ugc3RhdGUtPm9wLT5vcElkIHRvCisgICAgICAgICAqIGRpc3BhdGNoIHRoZSBvcCB2aWEgYSBtZXRob2Qgb24gYSBzdGF0aWMgZGlzcGF0Y2hlciB3aGVuIHRoZSBvcCBpcyByZXBsYXllZC4KKyAgICAgICAgICoKKyAgICAgICAgICogRm9yIGV4YW1wbGUgYSBCaXRtYXBPcCB3b3VsZCByZXNvbHZlLCB2aWEgdGhlIGxhbWJkYSBsb29rdXAsIHRvIGNhbGxpbmc6CisgICAgICAgICAqCisgICAgICAgICAqIFN0YXRpY0Rpc3BhdGNoZXI6Om9uQml0bWFwT3AoUmVuZGVyZXImIHJlbmRlcmVyLCBjb25zdCBCaXRtYXBPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpOworICAgICAgICAgKi8KKyAgICAgICAgI2RlZmluZSBYKFR5cGUpIFwKKyAgICAgICAgICAgICAgICBbXSh2b2lkKiByZW5kZXJlciwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgeyBcCisgICAgICAgICAgICAgICAgICAgIFN0YXRpY0Rpc3BhdGNoZXI6Om9uIyNUeXBlKCooc3RhdGljX2Nhc3Q8UmVuZGVyZXIqPihyZW5kZXJlcikpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZSY+KCooc3RhdGUub3ApKSwgc3RhdGUpOyBcCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgc3RhdGljIEJha2VkT3BSZWNlaXZlciB1bm1lcmdlZFJlY2VpdmVyc1tdID0gQlVJTERfUkVOREVSQUJMRV9PUF9MVVQoWCk7CisgICAgICAgICN1bmRlZiBYCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIERlZmluZXMgYSBMVVQgb2YgbGFtYmRhcyB3aGljaCBhbGxvdyBtZXJnZWQgYXJyYXlzIG9mIEJha2VkT3BTdGF0ZSogdG8gYmUgcGFzc2VkIHRvIGEKKyAgICAgICAgICogc3RhdGljIGRpc3BhdGNoZXIgd2hlbiB0aGUgZ3JvdXAgb2YgbWVyZ2VkIG9wcyBpcyByZXBsYXllZC4KKyAgICAgICAgICovCisgICAgICAgICNkZWZpbmUgWChUeXBlKSBcCisgICAgICAgICAgICAgICAgW10odm9pZCogcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAorICAgICAgICAgICAgICAgICAgICBTdGF0aWNEaXNwYXRjaGVyOjpvbk1lcmdlZCMjVHlwZSMjcygqKHN0YXRpY19jYXN0PFJlbmRlcmVyKj4ocmVuZGVyZXIpKSwgb3BMaXN0KTsgXAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgIHN0YXRpYyBNZXJnZWRPcFJlY2VpdmVyIG1lcmdlZFJlY2VpdmVyc1tdID0gQlVJTERfTUVSR0VBQkxFX09QX0xVVChYKTsKKyAgICAgICAgI3VuZGVmIFgKKworICAgICAgICAvLyBSZWxheSB0aHJvdWdoIGxheWVycyBpbiByZXZlcnNlIG9yZGVyLCBzaW5jZSBsYXllcnMKKyAgICAgICAgLy8gbGF0ZXIgaW4gdGhlIGxpc3Qgd2lsbCBiZSBkcmF3biBieSBlYXJsaWVyIG9uZXMKKyAgICAgICAgZm9yIChpbnQgaSA9IG1MYXllckJ1aWxkZXJzLnNpemUoKSAtIDE7IGkgPj0gMTsgaS0tKSB7CisgICAgICAgICAgICBMYXllckJ1aWxkZXImIGxheWVyID0gKihtTGF5ZXJCdWlsZGVyc1tpXSk7CisgICAgICAgICAgICBpZiAobGF5ZXIucmVuZGVyTm9kZSkgeworICAgICAgICAgICAgICAgIC8vIGNhY2hlZCBIVyBsYXllciAtIGNhbid0IHNraXAgbGF5ZXIgaWYgZW1wdHkKKyAgICAgICAgICAgICAgICByZW5kZXJlci5zdGFydFJlcGFpbnRMYXllcihsYXllci5vZmZzY3JlZW5CdWZmZXIsIGxheWVyLnJlcGFpbnRSZWN0KTsKKyAgICAgICAgICAgICAgICBsYXllci5yZXBsYXlCYWtlZE9wc0ltcGwoKHZvaWQqKSZyZW5kZXJlciwgdW5tZXJnZWRSZWNlaXZlcnMsIG1lcmdlZFJlY2VpdmVycyk7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuZW5kTGF5ZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxheWVyLmVtcHR5KCkpIHsgLy8gc2F2ZSBsYXllciAtIHNraXAgZW50aXJlIGxheWVyIGlmIGVtcHR5CisgICAgICAgICAgICAgICAgbGF5ZXIub2Zmc2NyZWVuQnVmZmVyID0gcmVuZGVyZXIuc3RhcnRUZW1wb3JhcnlMYXllcihsYXllci53aWR0aCwgbGF5ZXIuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBsYXllci5yZXBsYXlCYWtlZE9wc0ltcGwoKHZvaWQqKSZyZW5kZXJlciwgdW5tZXJnZWRSZWNlaXZlcnMsIG1lcmdlZFJlY2VpdmVycyk7CisgICAgICAgICAgICAgICAgcmVuZGVyZXIuZW5kTGF5ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IExheWVyQnVpbGRlciYgZmJvMCA9ICoobUxheWVyQnVpbGRlcnNbMF0pOworICAgICAgICByZW5kZXJlci5zdGFydEZyYW1lKGZibzAud2lkdGgsIGZibzAuaGVpZ2h0LCBmYm8wLnJlcGFpbnRSZWN0KTsKKyAgICAgICAgZmJvMC5yZXBsYXlCYWtlZE9wc0ltcGwoKHZvaWQqKSZyZW5kZXJlciwgdW5tZXJnZWRSZWNlaXZlcnMsIG1lcmdlZFJlY2VpdmVycyk7CisgICAgICAgIHJlbmRlcmVyLmVuZEZyYW1lKGZibzAucmVwYWludFJlY3QpOworICAgIH0KKworICAgIHZvaWQgZHVtcCgpIGNvbnN0IHsKKyAgICAgICAgZm9yIChhdXRvJiYgbGF5ZXIgOiBtTGF5ZXJCdWlsZGVycykgeworICAgICAgICAgICAgbGF5ZXItPmR1bXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLy8gQ2FudmFzU3RhdGVDbGllbnQgaW50ZXJmYWNlCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIHZpcnR1YWwgdm9pZCBvblZpZXdwb3J0SW5pdGlhbGl6ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgb25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgR0x1aW50IGdldFRhcmdldEZibygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDA7IH0KKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIENoaWxkcmVuU2VsZWN0TW9kZSB7CisgICAgICAgIE5lZ2F0aXZlLAorICAgICAgICBQb3NpdGl2ZQorICAgIH07CisgICAgdm9pZCBzYXZlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJXaWR0aCwgdWludDMyX3QgbGF5ZXJIZWlnaHQsCisgICAgICAgICAgICBmbG9hdCBjb250ZW50VHJhbnNsYXRlWCwgZmxvYXQgY29udGVudFRyYW5zbGF0ZVksCisgICAgICAgICAgICBjb25zdCBSZWN0JiByZXBhaW50UmVjdCwKKyAgICAgICAgICAgIGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyLAorICAgICAgICAgICAgY29uc3QgQmVnaW5MYXllck9wKiBiZWdpbkxheWVyT3AsIFJlbmRlck5vZGUqIHJlbmRlck5vZGUpOworICAgIHZvaWQgcmVzdG9yZUZvckxheWVyKCk7CisKKyAgICBMYXllckJ1aWxkZXImIGN1cnJlbnRMYXllcigpIHsgcmV0dXJuICoobUxheWVyQnVpbGRlcnNbbUxheWVyU3RhY2suYmFjaygpXSk7IH0KKworICAgIEJha2VkT3BTdGF0ZSogdHJ5QmFrZU9wU3RhdGUoY29uc3QgUmVjb3JkZWRPcCYgcmVjb3JkZWRPcCkgeworICAgICAgICByZXR1cm4gQmFrZWRPcFN0YXRlOjp0cnlDb25zdHJ1Y3QobUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCksIHJlY29yZGVkT3ApOworICAgIH0KKworICAgIC8vIHNob3VsZCBhbHdheXMgYmUgc3Vycm91bmRlZCBieSBhIHNhdmUvcmVzdG9yZSBwYWlyLCBhbmQgbm90IGNhbGxlZCBpZiBEaXNwbGF5TGlzdCBpcyBudWxsCisgICAgdm9pZCBkZWZlck5vZGVQcm9wc0FuZE9wcyhSZW5kZXJOb2RlJiBub2RlKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgorICAgIHZvaWQgZGVmZXIzZENoaWxkcmVuKENoaWxkcmVuU2VsZWN0TW9kZSBtb2RlLCBjb25zdCBWJiB6VHJhbnNsYXRlZE5vZGVzKTsKKworICAgIHZvaWQgZGVmZXJTaGFkb3coY29uc3QgUmVuZGVyTm9kZU9wJiBjYXN0ZXJPcCk7CisKKyAgICB2b2lkIGRlZmVyUHJvamVjdGVkQ2hpbGRyZW4oY29uc3QgUmVuZGVyTm9kZSYgcmVuZGVyTm9kZSk7CisKKyAgICB2b2lkIGRlZmVyTm9kZU9wcyhjb25zdCBSZW5kZXJOb2RlJiByZW5kZXJOb2RlKTsKKworICAgIHZvaWQgZGVmZXJSZW5kZXJOb2RlT3BJbXBsKGNvbnN0IFJlbmRlck5vZGVPcCYgb3ApOworCisgICAgdm9pZCByZXBsYXlCYWtlZE9wc0ltcGwodm9pZCogYXJnLCBCYWtlZE9wUmVjZWl2ZXIqIHJlY2VpdmVycyk7CisKKyAgICBTa1BhdGgqIGNyZWF0ZUZyYW1lQWxsb2NhdGVkUGF0aCgpIHsKKyAgICAgICAgcmV0dXJuIG1BbGxvY2F0b3IuY3JlYXRlPFNrUGF0aD4oKTsKKyAgICB9CisKKyAgICB2b2lkIGRlZmVyU3Ryb2tlYWJsZU9wKGNvbnN0IFJlY29yZGVkT3AmIG9wLCBiYXRjaGlkX3QgYmF0Y2hJZCwKKyAgICAgICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IgPSBCYWtlZE9wU3RhdGU6OlN0cm9rZUJlaGF2aW9yOjpTdHlsZURlZmluZWQpOworCisgICAgLyoqCisgICAgICogRGVjbGFyZXMgYWxsIEZyYW1lQnVpbGRlcjo6ZGVmZXJYWFhYT3AoKSBtZXRob2RzIGZvciBldmVyeSBSZWNvcmRlZE9wIHR5cGUuCisgICAgICoKKyAgICAgKiBUaGVzZSBwcml2YXRlIG1ldGhvZHMgYXJlIGNhbGxlZCBmcm9tIHdpdGhpbiBkZWZlckltcGwgdG8gZGVmZXIgZWFjaCBpbmRpdmlkdWFsIG9wCisgICAgICogdHlwZSBkaWZmZXJlbnRseS4KKyAgICAgKi8KKyNkZWZpbmUgWChUeXBlKSB2b2lkIGRlZmVyIyNUeXBlKGNvbnN0IFR5cGUmIG9wKTsKKyAgICBNQVBfREVGRVJSQUJMRV9PUFMoWCkKKyN1bmRlZiBYCisKKyAgICAvLyBMaXN0IG9mIGV2ZXJ5IGRlZmVycmVkIGxheWVyJ3MgcmVuZGVyIHN0YXRlLiBSZXBsYXllZCBpbiByZXZlcnNlIG9yZGVyIHRvIHJlbmRlciBhIGZyYW1lLgorICAgIHN0ZDo6dmVjdG9yPExheWVyQnVpbGRlcio+IG1MYXllckJ1aWxkZXJzOworCisgICAgLyoKKyAgICAgKiBTdGFjayBvZiBpbmRpY2VzIHdpdGhpbiBtTGF5ZXJCdWlsZGVycyByZXByZXNlbnRpbmcgY3VycmVudGx5IGFjdGl2ZSBsYXllcnMuIElmIGRyYXdpbmcKKyAgICAgKiBsYXllckEgd2l0aGluIGEgbGF5ZXJCLCB3aWxsIGNvbnRhaW4sIGluIG9yZGVyOgorICAgICAqICAtIDAgKHJlcHJlc2VudGluZyBGQk8gMCwgYWx3YXlzIHByZXNlbnQpCisgICAgICogIC0gbGF5ZXJCJ3MgaW5kZXgKKyAgICAgKiAgLSBsYXllckEncyBpbmRleAorICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB2ZWN0b3IgZG9lc24ndCBhbHdheXMgbWFwIG9udG8gYWxsIHZhbHVlcyBvZiBtTGF5ZXJCdWlsZGVycy4gV2hlbiBhCisgICAgICogbGF5ZXIgaXMgZmluaXNoZWQgZGVmZXJyaW5nLCBpdCB3aWxsIHN0aWxsIGJlIHJlcHJlc2VudGVkIGluIG1MYXllckJ1aWxkZXJzLCBidXQgaXQncyBpbmRleAorICAgICAqIHdvbid0IGJlIGluIG1MYXllclN0YWNrLiBUaGlzIGlzIGJlY2F1c2UgaXQgY2FuIGJlIHJlcGxheWVkLCBidXQgY2FuJ3QgaGF2ZSBhbnkgbW9yZSBkcmF3aW5nCisgICAgICogb3BzIGFkZGVkIHRvIGl0LgorICAgICovCisgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBtTGF5ZXJTdGFjazsKKworICAgIENhbnZhc1N0YXRlIG1DYW52YXNTdGF0ZTsKKworICAgIC8vIGNvbnRhaW5zIFJlc29sdmVkT3BzIGFuZCBCYXRjaGVzCisgICAgTGluZWFyQWxsb2NhdG9yIG1BbGxvY2F0b3I7Cit9OworCit9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9HYW1tYUZvbnRSZW5kZXJlci5oIGIvbGlicy9od3VpL0dhbW1hRm9udFJlbmRlcmVyLmgKaW5kZXggMTQ2ZDM4NS4uNTgxM2U3ZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0dhbW1hRm9udFJlbmRlcmVyLmgKKysrIGIvbGlicy9od3VpL0dhbW1hRm9udFJlbmRlcmVyLmgKQEAgLTMwLDcgKzMwLDcgQEAKICAgICBHYW1tYUZvbnRSZW5kZXJlcigpOwogCiAgICAgdm9pZCBjbGVhcigpIHsKLSAgICAgICAgbVJlbmRlcmVyLnJlbGVhc2UoKTsKKyAgICAgICAgbVJlbmRlcmVyLnJlc2V0KG51bGxwdHIpOwogICAgIH0KIAogICAgIHZvaWQgZmx1c2goKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvR2xvcC5oIGIvbGlicy9od3VpL0dsb3AuaAppbmRleCA0Nzg1ZWE0Li5lNzJmMzk2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvR2xvcC5oCisrKyBiL2xpYnMvaHd1aS9HbG9wLmgKQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICAvLyBDYW52YXMgdHJhbnNmb3JtIGlzbid0IGFwcGxpZWQgdG8gdGhlIG1lc2ggYXQgZHJhdyB0aW1lLAogICAgICAgICAvL3NpbmNlIGl0J3MgYWxyZWFkeSBidWlsdCBpbi4KLSAgICAgICAgTWVzaElnbm9yZXNDYW52YXNUcmFuc2Zvcm0gPSAxIDw8IDEsCisgICAgICAgIE1lc2hJZ25vcmVzQ2FudmFzVHJhbnNmb3JtID0gMSA8PCAxLCAvLyBUT0RPOiByZW1vdmUgZm9yIEhXVUlfTkVXX09QUwogICAgIH07CiB9OwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvR2xvcEJ1aWxkZXIuY3BwIGIvbGlicy9od3VpL0dsb3BCdWlsZGVyLmNwcAppbmRleCBmM2FjOTNiLi40NWZjMTZjIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvR2xvcEJ1aWxkZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9HbG9wQnVpbGRlci5jcHAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICBtT3V0R2xvcC0+bWVzaC52ZXJ0aWNlcyA9IHsKICAgICAgICAgICAgIHZibywKICAgICAgICAgICAgIFZlcnRleEF0dHJpYkZsYWdzOjpUZXh0dXJlQ29vcmQsCi0gICAgICAgICAgICBudWxscHRyLCBudWxscHRyLCBudWxscHRyLAorICAgICAgICAgICAgbnVsbHB0ciwgKGNvbnN0IHZvaWQqKSBrTWVzaFRleHR1cmVPZmZzZXQsIG51bGxwdHIsCiAgICAgICAgICAgICBrVGV4dHVyZVZlcnRleFN0cmlkZSB9OwogICAgIG1PdXRHbG9wLT5tZXNoLmVsZW1lbnRDb3VudCA9IGVsZW1lbnRDb3VudDsKICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMDEsNyArMTAxLDcgQEAKIEdsb3BCdWlsZGVyJiBHbG9wQnVpbGRlcjo6c2V0TWVzaFRleHR1cmVkVW5pdFF1YWQoY29uc3QgVXZNYXBwZXIqIHV2TWFwcGVyKSB7CiAgICAgaWYgKHV2TWFwcGVyKSB7CiAgICAgICAgIC8vIGNhbid0IHVzZSB1bml0IHF1YWQgVkJPLCBzbyBidWlsZCBVViB2ZXJ0aWNlcyBtYW51YWxseQotICAgICAgICByZXR1cm4gc2V0TWVzaFRleHR1cmVkVXZRdWFkKHV2TWFwcGVyLCBSZWN0KDAsIDAsIDEsIDEpKTsKKyAgICAgICAgcmV0dXJuIHNldE1lc2hUZXh0dXJlZFV2UXVhZCh1dk1hcHBlciwgUmVjdCgxLCAxKSk7CiAgICAgfQogCiAgICAgVFJJR0dFUl9TVEFHRShrTWVzaFN0YWdlKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9HbG9wQnVpbGRlci5oIGIvbGlicy9od3VpL0dsb3BCdWlsZGVyLmgKaW5kZXggYjY0N2I5MC4uNmU1Nzk3ZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0dsb3BCdWlsZGVyLmgKKysrIGIvbGlicy9od3VpL0dsb3BCdWlsZGVyLmgKQEAgLTk1LDYgKzk1LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdChvZmZzZXRYLCBvZmZzZXRZLCBzb3VyY2UpOwogICAgICAgICB9CiAgICAgfQorICAgIEdsb3BCdWlsZGVyJiBzZXRNb2RlbFZpZXdJZGVudGl0eUVtcHR5Qm91bmRzKCkgeworICAgICAgICAvLyBwYXNzIGVtcHR5IHJlY3Qgc2luY2Ugbm90IG5lZWRlZCBmb3IgZGFtYWdlIC8gc25hcAorICAgICAgICByZXR1cm4gc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdCgwLCAwLCBSZWN0KCkpOworICAgIH0KIAogICAgIEdsb3BCdWlsZGVyJiBzZXRSb3VuZFJlY3RDbGlwU3RhdGUoY29uc3QgUm91bmRSZWN0Q2xpcFN0YXRlKiByb3VuZFJlY3RDbGlwU3RhdGUpOwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvSmFua1RyYWNrZXIuY3BwIGIvbGlicy9od3VpL0phbmtUcmFja2VyLmNwcAppbmRleCBlYjliNTVmLi5jMzA1ZjY1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvSmFua1RyYWNrZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9KYW5rVHJhY2tlci5jcHAKQEAgLTI0Myw2ICsyNDMsNyBAQAogICAgIGRwcmludGYoZmQsICJcblRvdGFsIGZyYW1lcyByZW5kZXJlZDogJXUiLCBkYXRhLT50b3RhbEZyYW1lQ291bnQpOwogICAgIGRwcmludGYoZmQsICJcbkphbmt5IGZyYW1lczogJXUgKCUuMmYlJSkiLCBkYXRhLT5qYW5rRnJhbWVDb3VudCwKICAgICAgICAgICAgIChmbG9hdCkgZGF0YS0+amFua0ZyYW1lQ291bnQgLyAoZmxvYXQpIGRhdGEtPnRvdGFsRnJhbWVDb3VudCAqIDEwMC4wZik7CisgICAgZHByaW50ZihmZCwgIlxuNTB0aCBwZXJjZW50aWxlOiAldW1zIiwgZmluZFBlcmNlbnRpbGUoZGF0YSwgNTApKTsKICAgICBkcHJpbnRmKGZkLCAiXG45MHRoIHBlcmNlbnRpbGU6ICV1bXMiLCBmaW5kUGVyY2VudGlsZShkYXRhLCA5MCkpOwogICAgIGRwcmludGYoZmQsICJcbjk1dGggcGVyY2VudGlsZTogJXVtcyIsIGZpbmRQZXJjZW50aWxlKGRhdGEsIDk1KSk7CiAgICAgZHByaW50ZihmZCwgIlxuOTl0aCBwZXJjZW50aWxlOiAldW1zIiwgZmluZFBlcmNlbnRpbGUoZGF0YSwgOTkpKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9MYXllci5jcHAgYi9saWJzL2h3dWkvTGF5ZXIuY3BwCmluZGV4IDQ4OWViYzEuLjBmZTIwYWQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9MYXllci5jcHAKKysrIGIvbGlicy9od3VpL0xheWVyLmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBACiB2b2lkIExheWVyOjpjYW5jZWxEZWZlcigpIHsKICAgICByZW5kZXJOb2RlID0gbnVsbHB0cjsKICAgICBkZWZlcnJlZFVwZGF0ZVNjaGVkdWxlZCA9IGZhbHNlOwotICAgIGRlZmVycmVkTGlzdC5yZWxlYXNlKCk7CisgICAgZGVmZXJyZWRMaXN0LnJlc2V0KG51bGxwdHIpOwogfQogCiB2b2lkIExheWVyOjpmbHVzaCgpIHsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9MYXllckJ1aWxkZXIuY3BwIGIvbGlicy9od3VpL0xheWVyQnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE3MGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS9MYXllckJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIkxheWVyQnVpbGRlci5oIgorCisjaW5jbHVkZSAiQmFrZWRPcFN0YXRlLmgiCisjaW5jbHVkZSAiUmVuZGVyTm9kZS5oIgorI2luY2x1ZGUgInV0aWxzL1BhaW50VXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9UcmFjZVV0aWxzLmgiCisKKyNpbmNsdWRlIDx1dGlscy9UeXBlSGVscGVycy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK2NsYXNzIEJhdGNoQmFzZSB7CitwdWJsaWM6CisgICAgQmF0Y2hCYXNlKGJhdGNoaWRfdCBiYXRjaElkLCBCYWtlZE9wU3RhdGUqIG9wLCBib29sIG1lcmdpbmcpCisgICAgICAgICAgICA6IG1CYXRjaElkKGJhdGNoSWQpCisgICAgICAgICAgICAsIG1NZXJnaW5nKG1lcmdpbmcpIHsKKyAgICAgICAgbUJvdW5kcyA9IG9wLT5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHM7CisgICAgICAgIG1PcHMucHVzaF9iYWNrKG9wKTsKKyAgICB9CisKKyAgICBib29sIGludGVyc2VjdHMoY29uc3QgUmVjdCYgcmVjdCkgY29uc3QgeworICAgICAgICBpZiAoIXJlY3QuaW50ZXJzZWN0cyhtQm91bmRzKSkgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZvciAoY29uc3QgQmFrZWRPcFN0YXRlKiBvcCA6IG1PcHMpIHsKKyAgICAgICAgICAgIGlmIChyZWN0LmludGVyc2VjdHMob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYmF0Y2hpZF90IGdldEJhdGNoSWQoKSBjb25zdCB7IHJldHVybiBtQmF0Y2hJZDsgfQorICAgIGJvb2wgaXNNZXJnaW5nKCkgY29uc3QgeyByZXR1cm4gbU1lcmdpbmc7IH0KKworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEJha2VkT3BTdGF0ZSo+JiBnZXRPcHMoKSBjb25zdCB7IHJldHVybiBtT3BzOyB9CisKKyAgICB2b2lkIGR1bXAoKSBjb25zdCB7CisgICAgICAgIEFMT0dEKCIgICAgQmF0Y2ggJXAsIGlkICVkLCBtZXJnaW5nICVkLCBjb3VudCAlZCwgYm91bmRzICIgUkVDVF9TVFJJTkcsCisgICAgICAgICAgICAgICAgdGhpcywgbUJhdGNoSWQsIG1NZXJnaW5nLCAoaW50KSBtT3BzLnNpemUoKSwgUkVDVF9BUkdTKG1Cb3VuZHMpKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgYmF0Y2hpZF90IG1CYXRjaElkOworICAgIFJlY3QgbUJvdW5kczsKKyAgICBzdGQ6OnZlY3RvcjxCYWtlZE9wU3RhdGUqPiBtT3BzOworICAgIGJvb2wgbU1lcmdpbmc7Cit9OworCitjbGFzcyBPcEJhdGNoIDogcHVibGljIEJhdGNoQmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvYyhzaXplKTsKKyAgICB9CisKKyAgICBPcEJhdGNoKGJhdGNoaWRfdCBiYXRjaElkLCBCYWtlZE9wU3RhdGUqIG9wKQorICAgICAgICAgICAgOiBCYXRjaEJhc2UoYmF0Y2hJZCwgb3AsIGZhbHNlKSB7CisgICAgfQorCisgICAgdm9pZCBiYXRjaE9wKEJha2VkT3BTdGF0ZSogb3ApIHsKKyAgICAgICAgbUJvdW5kcy51bmlvbldpdGgob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CisgICAgICAgIG1PcHMucHVzaF9iYWNrKG9wKTsKKyAgICB9Cit9OworCitjbGFzcyBNZXJnaW5nT3BCYXRjaCA6IHB1YmxpYyBCYXRjaEJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2Moc2l6ZSk7CisgICAgfQorCisgICAgTWVyZ2luZ09wQmF0Y2goYmF0Y2hpZF90IGJhdGNoSWQsIEJha2VkT3BTdGF0ZSogb3ApCisgICAgICAgICAgICA6IEJhdGNoQmFzZShiYXRjaElkLCBvcCwgdHJ1ZSkKKyAgICAgICAgICAgICwgbUNsaXBTaWRlRmxhZ3Mob3AtPmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFncykgeworICAgIH0KKworICAgIC8qCisgICAgICogSGVscGVyIGZvciBkZXRlcm1pbmluZyBpZiBhIG5ldyBvcCBjYW4gbWVyZ2Ugd2l0aCBhIE1lcmdpbmdEcmF3QmF0Y2ggYmFzZWQgb24gdGhlaXIgYm91bmRzCisgICAgICogYW5kIGNsaXAgc2lkZSBmbGFncy4gUG9zaXRpdmUgYm91bmRzIGRlbHRhIG1lYW5zIG5ldyBib3VuZHMgZml0IGluIG9sZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tTaWRlKGNvbnN0IGludCBjdXJyZW50RmxhZ3MsIGNvbnN0IGludCBuZXdGbGFncywgY29uc3QgaW50IHNpZGUsCisgICAgICAgICAgICBmbG9hdCBib3VuZHNEZWx0YSkgeworICAgICAgICBib29sIGN1cnJlbnRDbGlwRXhpc3RzID0gY3VycmVudEZsYWdzICYgc2lkZTsKKyAgICAgICAgYm9vbCBuZXdDbGlwRXhpc3RzID0gbmV3RmxhZ3MgJiBzaWRlOworCisgICAgICAgIC8vIGlmIGN1cnJlbnQgaXMgY2xpcHBlZCwgd2UgbXVzdCBiZSBhYmxlIHRvIGZpdCBuZXcgYm91bmRzIGluIGN1cnJlbnQKKyAgICAgICAgaWYgKGJvdW5kc0RlbHRhID4gMCAmJiBjdXJyZW50Q2xpcEV4aXN0cykgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIGlmIG5ldyBpcyBjbGlwcGVkLCB3ZSBtdXN0IGJlIGFibGUgdG8gZml0IGN1cnJlbnQgYm91bmRzIGluIG5ldworICAgICAgICBpZiAoYm91bmRzRGVsdGEgPCAwICYmIG5ld0NsaXBFeGlzdHMpIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBwYWludElzRGVmYXVsdChjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICByZXR1cm4gcGFpbnQuZ2V0QWxwaGEoKSA9PSAyNTUKKyAgICAgICAgICAgICAgICAmJiBwYWludC5nZXRDb2xvckZpbHRlcigpID09IG51bGxwdHIKKyAgICAgICAgICAgICAgICAmJiBwYWludC5nZXRTaGFkZXIoKSA9PSBudWxscHRyOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHBhaW50c0FyZUVxdWl2YWxlbnQoY29uc3QgU2tQYWludCYgYSwgY29uc3QgU2tQYWludCYgYikgeworICAgICAgICAvLyBOb3RlOiBkb24ndCBjaGVjayBjb2xvciwgc2luY2UgYWxsIGN1cnJlbnRseSBtZXJnZWFibGUgb3BzIGNhbiBtZXJnZSBhY3Jvc3MgY29sb3JzCisgICAgICAgIHJldHVybiBhLmdldEFscGhhKCkgPT0gYi5nZXRBbHBoYSgpCisgICAgICAgICAgICAgICAgJiYgYS5nZXRDb2xvckZpbHRlcigpID09IGIuZ2V0Q29sb3JGaWx0ZXIoKQorICAgICAgICAgICAgICAgICYmIGEuZ2V0U2hhZGVyKCkgPT0gYi5nZXRTaGFkZXIoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENoZWNrcyBpZiBhIChtZXJnZWFibGUpIG9wIGNhbiBiZSBtZXJnZWQgaW50byB0aGlzIGJhdGNoCisgICAgICoKKyAgICAgKiBJZiB0cnVlLCB0aGUgb3AncyBtdWx0aURyYXcgbXVzdCBiZSBndWFyYW50ZWVkIHRvIGhhbmRsZSBib3RoIG9wcyBzaW11bHRhbmVvdXNseSwgc28gaXQgaXMKKyAgICAgKiBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBhaW50IGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgZHJhdyBjYWxscyBpbiBkZWNpZGluZyBib3RoIGEpIGlmIGFuCisgICAgICogb3AgdHJpZXMgdG8gbWVyZ2UgYXQgYWxsLCBhbmQgYikgaWYgdGhlIG9wIGNhbiBtZXJnZSB3aXRoIGFub3RoZXIgc2V0IG9mIG9wcworICAgICAqCisgICAgICogRmFsc2UgcG9zaXRpdmVzIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGZyb20gdGhlIHBhaW50cyBvZiBzdWJzZXF1ZW50IG1lcmdlZCBvcGVyYXRpb25zIGJlaW5nCisgICAgICogZHJvcHBlZCwgc28gd2UgbWFrZSBzaW1wbGlmeWluZyBxdWFsaWZpY2F0aW9ucyBvbiB0aGUgb3BzIHRoYXQgY2FuIG1lcmdlLCBwZXIgb3AgdHlwZS4KKyAgICAgKi8KKyAgICBib29sIGNhbk1lcmdlV2l0aChCYWtlZE9wU3RhdGUqIG9wKSBjb25zdCB7CisgICAgICAgIGJvb2wgaXNUZXh0QmF0Y2ggPSBnZXRCYXRjaElkKCkgPT0gT3BCYXRjaFR5cGU6OlRleHQKKyAgICAgICAgICAgICAgICB8fCBnZXRCYXRjaElkKCkgPT0gT3BCYXRjaFR5cGU6OkNvbG9yVGV4dDsKKworICAgICAgICAvLyBPdmVybGFwcGluZyBvdGhlciBvcGVyYXRpb25zIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGV4dCB3aXRob3V0IHNoYWRvdy4gRm9yIG90aGVyIG9wcywKKyAgICAgICAgLy8gbXVsdGlEcmF3IGlzbid0IGd1YXJhbnRlZWQgdG8gb3ZlcmRyYXcgY29ycmVjdGx5CisgICAgICAgIGlmICghaXNUZXh0QmF0Y2ggfHwgUGFpbnRVdGlsczo6aGFzVGV4dFNoYWRvdyhvcC0+b3AtPnBhaW50KSkgeworICAgICAgICAgICAgaWYgKGludGVyc2VjdHMob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcykpIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogbGhzID0gb3A7CisgICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogcmhzID0gbU9wc1swXTsKKworICAgICAgICBpZiAoIU1hdGhVdGlsczo6YXJlRXF1YWwobGhzLT5hbHBoYSwgcmhzLT5hbHBoYSkpIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBJZGVudGljYWwgcm91bmQgcmVjdCBjbGlwIHN0YXRlIG1lYW5zIGJvdGggb3BzIHdpbGwgY2xpcCBpbiB0aGUgc2FtZSB3YXksIG9yIG5vdCBhdCBhbGwuCisgICAgICAgIC8vIEFzIHRoZSBzdGF0ZSBvYmplY3RzIGFyZSBjb25zdCwgd2UgY2FuIGNvbXBhcmUgdGhlaXIgcG9pbnRlcnMgdG8gZGV0ZXJtaW5lIG1lcmdlYWJpbGl0eQorICAgICAgICBpZiAobGhzLT5yb3VuZFJlY3RDbGlwU3RhdGUgIT0gcmhzLT5yb3VuZFJlY3RDbGlwU3RhdGUpIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGxocy0+cHJvamVjdGlvblBhdGhNYXNrICE9IHJocy0+cHJvamVjdGlvblBhdGhNYXNrKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLyogQ2xpcHBpbmcgY29tcGF0aWJpbGl0eSBjaGVjaworICAgICAgICAgKgorICAgICAgICAgKiBFeHBsb2l0cyB0aGUgZmFjdCB0aGF0IGlmIGEgb3Agb3IgYmF0Y2ggaXMgY2xpcHBlZCBvbiBhIHNpZGUsIGl0cyBib3VuZHMgd2lsbCBlcXVhbCBpdHMKKyAgICAgICAgICogY2xpcCBmb3IgdGhhdCBzaWRlLgorICAgICAgICAgKi8KKyAgICAgICAgY29uc3QgaW50IGN1cnJlbnRGbGFncyA9IG1DbGlwU2lkZUZsYWdzOworICAgICAgICBjb25zdCBpbnQgbmV3RmxhZ3MgPSBvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwU2lkZUZsYWdzOworICAgICAgICBpZiAoY3VycmVudEZsYWdzICE9IE9wQ2xpcFNpZGVGbGFnczo6Tm9uZSB8fCBuZXdGbGFncyAhPSBPcENsaXBTaWRlRmxhZ3M6Ok5vbmUpIHsKKyAgICAgICAgICAgIGNvbnN0IFJlY3QmIG9wQm91bmRzID0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kczsKKyAgICAgICAgICAgIGZsb2F0IGJvdW5kc0RlbHRhID0gbUJvdW5kcy5sZWZ0IC0gb3BCb3VuZHMubGVmdDsKKyAgICAgICAgICAgIGlmICghY2hlY2tTaWRlKGN1cnJlbnRGbGFncywgbmV3RmxhZ3MsIE9wQ2xpcFNpZGVGbGFnczo6TGVmdCwgYm91bmRzRGVsdGEpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBib3VuZHNEZWx0YSA9IG1Cb3VuZHMudG9wIC0gb3BCb3VuZHMudG9wOworICAgICAgICAgICAgaWYgKCFjaGVja1NpZGUoY3VycmVudEZsYWdzLCBuZXdGbGFncywgT3BDbGlwU2lkZUZsYWdzOjpUb3AsIGJvdW5kc0RlbHRhKSkgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyByaWdodCBhbmQgYm90dG9tIGRlbHRhIGNhbGN1bGF0aW9uIHJldmVyc2VkIHRvIGFjY291bnQgZm9yIGRpcmVjdGlvbgorICAgICAgICAgICAgYm91bmRzRGVsdGEgPSBvcEJvdW5kcy5yaWdodCAtIG1Cb3VuZHMucmlnaHQ7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2lkZShjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzLCBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0LCBib3VuZHNEZWx0YSkpIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJvdW5kc0RlbHRhID0gb3BCb3VuZHMuYm90dG9tIC0gbUJvdW5kcy5ib3R0b207CisgICAgICAgICAgICBpZiAoIWNoZWNrU2lkZShjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzLCBPcENsaXBTaWRlRmxhZ3M6OkJvdHRvbSwgYm91bmRzRGVsdGEpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTa1BhaW50KiBuZXdQYWludCA9IG9wLT5vcC0+cGFpbnQ7CisgICAgICAgIGNvbnN0IFNrUGFpbnQqIG9sZFBhaW50ID0gbU9wc1swXS0+b3AtPnBhaW50OworCisgICAgICAgIGlmIChuZXdQYWludCA9PSBvbGRQYWludCkgeworICAgICAgICAgICAgLy8gaWYgcGFpbnRzIGFyZSBlcXVhbCwgdGhlbiBtb2RpZmllcnMgKyBwYWludCBhdHRyaWJzIGRvbid0IG5lZWQgdG8gYmUgY29tcGFyZWQKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG5ld1BhaW50ICYmICFvbGRQYWludCkgeworICAgICAgICAgICAgcmV0dXJuIHBhaW50SXNEZWZhdWx0KCpuZXdQYWludCk7CisgICAgICAgIH0gZWxzZSBpZiAoIW5ld1BhaW50ICYmIG9sZFBhaW50KSB7CisgICAgICAgICAgICByZXR1cm4gcGFpbnRJc0RlZmF1bHQoKm9sZFBhaW50KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGFpbnRzQXJlRXF1aXZhbGVudCgqbmV3UGFpbnQsICpvbGRQYWludCk7CisgICAgfQorCisgICAgdm9pZCBtZXJnZU9wKEJha2VkT3BTdGF0ZSogb3ApIHsKKyAgICAgICAgbUJvdW5kcy51bmlvbldpdGgob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CisgICAgICAgIG1PcHMucHVzaF9iYWNrKG9wKTsKKworICAgICAgICAvLyBCZWNhdXNlIGEgbmV3IG9wIG11c3QgaGF2ZSBwYXNzZWQgY2FuTWVyZ2VXaXRoKCksIHdlIGtub3cgaXQncyBwYXNzZWQgdGhlIGNsaXBwaW5nIGNvbXBhdAorICAgICAgICAvLyBjaGVjaywgYW5kIGRvZXNuJ3QgZXh0ZW5kIHBhc3QgYSBzaWRlIG9mIHRoZSBjbGlwIHRoYXQncyBpbiB1c2UgYnkgdGhlIG1lcmdlZCBiYXRjaC4KKyAgICAgICAgLy8gVGhlcmVmb3JlIGl0J3Mgc2FmZSB0byBzaW1wbHkgYWx3YXlzIG1lcmdlIGZsYWdzLCBhbmQgdXNlIHRoZSBib3VuZHMgYXMgdGhlIGNsaXAgcmVjdC4KKyAgICAgICAgbUNsaXBTaWRlRmxhZ3MgfD0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFnczsKKyAgICB9CisKKyAgICBpbnQgZ2V0Q2xpcFNpZGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1DbGlwU2lkZUZsYWdzOyB9CisgICAgY29uc3QgUmVjdCYgZ2V0Q2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtQm91bmRzOyB9CisKK3ByaXZhdGU6CisgICAgaW50IG1DbGlwU2lkZUZsYWdzOworfTsKKworTGF5ZXJCdWlsZGVyOjpMYXllckJ1aWxkZXIodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgY29uc3QgUmVjdCYgcmVwYWludFJlY3QsIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wLCBSZW5kZXJOb2RlKiByZW5kZXJOb2RlKQorICAgICAgICA6IHdpZHRoKHdpZHRoKQorICAgICAgICAsIGhlaWdodChoZWlnaHQpCisgICAgICAgICwgcmVwYWludFJlY3QocmVwYWludFJlY3QpCisgICAgICAgICwgb2Zmc2NyZWVuQnVmZmVyKHJlbmRlck5vZGUgPyByZW5kZXJOb2RlLT5nZXRMYXllcigpIDogbnVsbHB0cikKKyAgICAgICAgLCBiZWdpbkxheWVyT3AoYmVnaW5MYXllck9wKQorICAgICAgICAsIHJlbmRlck5vZGUocmVuZGVyTm9kZSkKKyAgICAgICAgLCB2aWV3cG9ydENsaXAoUmVjdCh3aWR0aCwgaGVpZ2h0KSkge30KKworLy8gaXRlcmF0ZSBiYWNrIHRvd2FyZCB0YXJnZXQgdG8gc2VlIGlmIGFueXRoaW5nIGRyYXduIHNpbmNlIHNob3VsZCBvdmVybGFwIHRoZSBuZXcgb3AKKy8vIGlmIG5vIHRhcmdldCwgbWVyZ2luZyBvcHMgc3RpbGwgaXRlcmF0ZSB0byBmaW5kIHNpbWlsYXIgYmF0Y2ggdG8gaW5zZXJ0IGFmdGVyCit2b2lkIExheWVyQnVpbGRlcjo6bG9jYXRlSW5zZXJ0SW5kZXgoaW50IGJhdGNoSWQsIGNvbnN0IFJlY3QmIGNsaXBwZWRCb3VuZHMsCisgICAgICAgIEJhdGNoQmFzZSoqIHRhcmdldEJhdGNoLCBzaXplX3QqIGluc2VydEJhdGNoSW5kZXgpIGNvbnN0IHsKKyAgICBmb3IgKGludCBpID0gbUJhdGNoZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgQmF0Y2hCYXNlKiBvdmVyQmF0Y2ggPSBtQmF0Y2hlc1tpXTsKKworICAgICAgICBpZiAob3ZlckJhdGNoID09ICp0YXJnZXRCYXRjaCkgYnJlYWs7CisKKyAgICAgICAgLy8gVE9ETzogYWxzbyBjb25zaWRlciBzaGFkZXIgc2hhcmVkIGJldHdlZW4gYmF0Y2ggdHlwZXMKKyAgICAgICAgaWYgKGJhdGNoSWQgPT0gb3ZlckJhdGNoLT5nZXRCYXRjaElkKCkpIHsKKyAgICAgICAgICAgICppbnNlcnRCYXRjaEluZGV4ID0gaSArIDE7CisgICAgICAgICAgICBpZiAoISp0YXJnZXRCYXRjaCkgYnJlYWs7IC8vIGZvdW5kIGluc2VydCBwb3NpdGlvbiwgcXVpdAorICAgICAgICB9CisKKyAgICAgICAgaWYgKG92ZXJCYXRjaC0+aW50ZXJzZWN0cyhjbGlwcGVkQm91bmRzKSkgeworICAgICAgICAgICAgLy8gTk9URTogaXQgbWF5IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIGZvciBzcGVjaWFsIGNhc2VzIHdoZXJlIHR3byBvcGVyYXRpb25zCisgICAgICAgICAgICAvLyBvZiB0aGUgc2FtZSBiYXRjaC9wYWludCBjb3VsZCBzd2FwIG9yZGVyLCBzdWNoIGFzIHdpdGggYSBub24tbWVyZ2VhYmxlCisgICAgICAgICAgICAvLyAoY2xpcHBlZCkgYW5kIGEgbWVyZ2VhYmxlIHRleHQgb3BlcmF0aW9uCisgICAgICAgICAgICAqdGFyZ2V0QmF0Y2ggPSBudWxscHRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJCdWlsZGVyOjpkZWZlckxheWVyQ2xlYXIoY29uc3QgUmVjdCYgcmVjdCkgeworICAgIG1DbGVhclJlY3RzLnB1c2hfYmFjayhyZWN0KTsKK30KKwordm9pZCBMYXllckJ1aWxkZXI6OmZsdXNoTGF5ZXJDbGVhcnMoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICBpZiAoQ0NfVU5MSUtFTFkoIW1DbGVhclJlY3RzLmVtcHR5KCkpKSB7CisgICAgICAgIGNvbnN0IGludCB2ZXJ0Q291bnQgPSBtQ2xlYXJSZWN0cy5zaXplKCkgKiA0OworICAgICAgICAvLyBwdXQgdGhlIHZlcnRzIGluIHRoZSBmcmFtZSBhbGxvY2F0b3IsIHNpbmNlCisgICAgICAgIC8vICAgICAxKSBTaW1wbGVSZWN0c09wcyBuZWVkcyB2ZXJ0cywgbm90IHJlY3RzCisgICAgICAgIC8vICAgICAyKSBldmVuIGlmIG1DbGVhclJlY3RzIHN0b3JlZCB2ZXJ0cywgc3RkOjp2ZWN0b3JzIHdpbGwgbW92ZSB0aGVpciBjb250ZW50cworICAgICAgICBWZXJ0ZXgqIGNvbnN0IHZlcnRzID0gKFZlcnRleCopIGFsbG9jYXRvci5hbGxvYyh2ZXJ0Q291bnQgKiBzaXplb2YoVmVydGV4KSk7CisKKyAgICAgICAgVmVydGV4KiBjdXJyZW50VmVydCA9IHZlcnRzOworICAgICAgICBSZWN0IGJvdW5kcyA9IG1DbGVhclJlY3RzWzBdOworICAgICAgICBmb3IgKGF1dG8mJiByZWN0IDogbUNsZWFyUmVjdHMpIHsKKyAgICAgICAgICAgIGJvdW5kcy51bmlvbldpdGgocmVjdCk7CisgICAgICAgICAgICBWZXJ0ZXg6OnNldChjdXJyZW50VmVydCsrLCByZWN0LmxlZnQsIHJlY3QudG9wKTsKKyAgICAgICAgICAgIFZlcnRleDo6c2V0KGN1cnJlbnRWZXJ0KyssIHJlY3QucmlnaHQsIHJlY3QudG9wKTsKKyAgICAgICAgICAgIFZlcnRleDo6c2V0KGN1cnJlbnRWZXJ0KyssIHJlY3QubGVmdCwgcmVjdC5ib3R0b20pOworICAgICAgICAgICAgVmVydGV4OjpzZXQoY3VycmVudFZlcnQrKywgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOworICAgICAgICB9CisgICAgICAgIG1DbGVhclJlY3RzLmNsZWFyKCk7IC8vIGRpc2NhcmQgcmVjdHMgYmVmb3JlIGRyYXdpbmcgc28gdGhpcyBtZXRob2QgaXNuJ3QgcmVlbnRyYW50CisKKyAgICAgICAgLy8gT25lIG9yIG1vcmUgdW5jbGlwcGVkIHNhdmVMYXllcnMgaGF2ZSBiZWVuIGVucXVldWVkLCB3aXRoIGRlZmVycmVkIGNsZWFycy4KKyAgICAgICAgLy8gRmx1c2ggYWxsIG9mIHRoZXNlIGNsZWFycyB3aXRoIGEgc2luZ2xlIGRyYXcKKyAgICAgICAgU2tQYWludCogcGFpbnQgPSBhbGxvY2F0b3IuY3JlYXRlPFNrUGFpbnQ+KCk7CisgICAgICAgIHBhaW50LT5zZXRYZmVybW9kZU1vZGUoU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOworICAgICAgICBTaW1wbGVSZWN0c09wKiBvcCA9IG5ldyAoYWxsb2NhdG9yKSBTaW1wbGVSZWN0c09wKGJvdW5kcywKKyAgICAgICAgICAgICAgICBNYXRyaXg0OjppZGVudGl0eSgpLCBudWxscHRyLCBwYWludCwKKyAgICAgICAgICAgICAgICB2ZXJ0cywgdmVydENvdW50KTsKKyAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjpkaXJlY3RDb25zdHJ1Y3QoYWxsb2NhdG9yLAorICAgICAgICAgICAgICAgICZ2aWV3cG9ydENsaXAsIGJvdW5kcywgKm9wKTsKKyAgICAgICAgZGVmZXJVbm1lcmdlYWJsZU9wKGFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OlZlcnRpY2VzKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJCdWlsZGVyOjpkZWZlclVubWVyZ2VhYmxlT3AoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCisgICAgICAgIEJha2VkT3BTdGF0ZSogb3AsIGJhdGNoaWRfdCBiYXRjaElkKSB7CisgICAgaWYgKGJhdGNoSWQgIT0gT3BCYXRjaFR5cGU6OkNvcHlUb0xheWVyKSB7CisgICAgICAgIC8vIGlmIGZpcnN0IG9wIGFmdGVyIG9uZSBvciBtb3JlIHVuY2xpcHBlZCBzYXZlTGF5ZXJzLCBmbHVzaCB0aGUgbGF5ZXIgY2xlYXJzCisgICAgICAgIGZsdXNoTGF5ZXJDbGVhcnMoYWxsb2NhdG9yKTsKKyAgICB9CisKKyAgICBPcEJhdGNoKiB0YXJnZXRCYXRjaCA9IG1CYXRjaExvb2t1cFtiYXRjaElkXTsKKworICAgIHNpemVfdCBpbnNlcnRCYXRjaEluZGV4ID0gbUJhdGNoZXMuc2l6ZSgpOworICAgIGlmICh0YXJnZXRCYXRjaCkgeworICAgICAgICBsb2NhdGVJbnNlcnRJbmRleChiYXRjaElkLCBvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLAorICAgICAgICAgICAgICAgIChCYXRjaEJhc2UqKikoJnRhcmdldEJhdGNoKSwgJmluc2VydEJhdGNoSW5kZXgpOworICAgIH0KKworICAgIGlmICh0YXJnZXRCYXRjaCkgeworICAgICAgICB0YXJnZXRCYXRjaC0+YmF0Y2hPcChvcCk7CisgICAgfSBlbHNlICB7CisgICAgICAgIC8vIG5ldyBub24tbWVyZ2luZyBiYXRjaAorICAgICAgICB0YXJnZXRCYXRjaCA9IG5ldyAoYWxsb2NhdG9yKSBPcEJhdGNoKGJhdGNoSWQsIG9wKTsKKyAgICAgICAgbUJhdGNoTG9va3VwW2JhdGNoSWRdID0gdGFyZ2V0QmF0Y2g7CisgICAgICAgIG1CYXRjaGVzLmluc2VydChtQmF0Y2hlcy5iZWdpbigpICsgaW5zZXJ0QmF0Y2hJbmRleCwgdGFyZ2V0QmF0Y2gpOworICAgIH0KK30KKwordm9pZCBMYXllckJ1aWxkZXI6OmRlZmVyTWVyZ2VhYmxlT3AoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IsCisgICAgICAgIEJha2VkT3BTdGF0ZSogb3AsIGJhdGNoaWRfdCBiYXRjaElkLCBtZXJnZWlkX3QgbWVyZ2VJZCkgeworICAgIGlmIChiYXRjaElkICE9IE9wQmF0Y2hUeXBlOjpDb3B5VG9MYXllcikgeworICAgICAgICAvLyBpZiBmaXJzdCBvcCBhZnRlciBvbmUgb3IgbW9yZSB1bmNsaXBwZWQgc2F2ZUxheWVycywgZmx1c2ggdGhlIGxheWVyIGNsZWFycworICAgICAgICBmbHVzaExheWVyQ2xlYXJzKGFsbG9jYXRvcik7CisgICAgfQorICAgIE1lcmdpbmdPcEJhdGNoKiB0YXJnZXRCYXRjaCA9IG51bGxwdHI7CisKKyAgICAvLyBUcnkgdG8gbWVyZ2Ugd2l0aCBhbnkgZXhpc3RpbmcgYmF0Y2ggd2l0aCBzYW1lIG1lcmdlSWQKKyAgICBhdXRvIGdldFJlc3VsdCA9IG1NZXJnaW5nQmF0Y2hMb29rdXBbYmF0Y2hJZF0uZmluZChtZXJnZUlkKTsKKyAgICBpZiAoZ2V0UmVzdWx0ICE9IG1NZXJnaW5nQmF0Y2hMb29rdXBbYmF0Y2hJZF0uZW5kKCkpIHsKKyAgICAgICAgdGFyZ2V0QmF0Y2ggPSBnZXRSZXN1bHQtPnNlY29uZDsKKyAgICAgICAgaWYgKCF0YXJnZXRCYXRjaC0+Y2FuTWVyZ2VXaXRoKG9wKSkgeworICAgICAgICAgICAgdGFyZ2V0QmF0Y2ggPSBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgc2l6ZV90IGluc2VydEJhdGNoSW5kZXggPSBtQmF0Y2hlcy5zaXplKCk7CisgICAgbG9jYXRlSW5zZXJ0SW5kZXgoYmF0Y2hJZCwgb3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcywKKyAgICAgICAgICAgIChCYXRjaEJhc2UqKikoJnRhcmdldEJhdGNoKSwgJmluc2VydEJhdGNoSW5kZXgpOworCisgICAgaWYgKHRhcmdldEJhdGNoKSB7CisgICAgICAgIHRhcmdldEJhdGNoLT5tZXJnZU9wKG9wKTsKKyAgICB9IGVsc2UgIHsKKyAgICAgICAgLy8gbmV3IG1lcmdpbmcgYmF0Y2gKKyAgICAgICAgdGFyZ2V0QmF0Y2ggPSBuZXcgKGFsbG9jYXRvcikgTWVyZ2luZ09wQmF0Y2goYmF0Y2hJZCwgb3ApOworICAgICAgICBtTWVyZ2luZ0JhdGNoTG9va3VwW2JhdGNoSWRdLmluc2VydChzdGQ6Om1ha2VfcGFpcihtZXJnZUlkLCB0YXJnZXRCYXRjaCkpOworCisgICAgICAgIG1CYXRjaGVzLmluc2VydChtQmF0Y2hlcy5iZWdpbigpICsgaW5zZXJ0QmF0Y2hJbmRleCwgdGFyZ2V0QmF0Y2gpOworICAgIH0KK30KKwordm9pZCBMYXllckJ1aWxkZXI6OnJlcGxheUJha2VkT3BzSW1wbCh2b2lkKiBhcmcsCisgICAgICAgIEJha2VkT3BSZWNlaXZlciogdW5tZXJnZWRSZWNlaXZlcnMsIE1lcmdlZE9wUmVjZWl2ZXIqIG1lcmdlZFJlY2VpdmVycykgY29uc3QgeworICAgIEFUUkFDRV9OQU1FKCJmbHVzaCBkcmF3aW5nIGNvbW1hbmRzIik7CisgICAgZm9yIChjb25zdCBCYXRjaEJhc2UqIGJhdGNoIDogbUJhdGNoZXMpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBiYXRjaC0+Z2V0T3BzKCkuc2l6ZSgpOworICAgICAgICBpZiAoc2l6ZSA+IDEgJiYgYmF0Y2gtPmlzTWVyZ2luZygpKSB7CisgICAgICAgICAgICBpbnQgb3BJZCA9IGJhdGNoLT5nZXRPcHMoKVswXS0+b3AtPm9wSWQ7CisgICAgICAgICAgICBjb25zdCBNZXJnaW5nT3BCYXRjaCogbWVyZ2luZ0JhdGNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWVyZ2luZ09wQmF0Y2gqPihiYXRjaCk7CisgICAgICAgICAgICBNZXJnZWRCYWtlZE9wTGlzdCBkYXRhID0geworICAgICAgICAgICAgICAgICAgICBiYXRjaC0+Z2V0T3BzKCkuZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICBtZXJnaW5nQmF0Y2gtPmdldENsaXBTaWRlRmxhZ3MoKSwKKyAgICAgICAgICAgICAgICAgICAgbWVyZ2luZ0JhdGNoLT5nZXRDbGlwUmVjdCgpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgbWVyZ2VkUmVjZWl2ZXJzW29wSWRdKGFyZywgZGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IEJha2VkT3BTdGF0ZSogb3AgOiBiYXRjaC0+Z2V0T3BzKCkpIHsKKyAgICAgICAgICAgICAgICB1bm1lcmdlZFJlY2VpdmVyc1tvcC0+b3AtPm9wSWRdKGFyZywgKm9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBMYXllckJ1aWxkZXI6OmR1bXAoKSBjb25zdCB7CisgICAgQUxPR0QoIkxheWVyQnVpbGRlciAlcCwgJXV4JXUgYnVmZmVyICVwLCBibG8gJXAsIHJuICVwIiwKKyAgICAgICAgICAgIHRoaXMsIHdpZHRoLCBoZWlnaHQsIG9mZnNjcmVlbkJ1ZmZlciwgYmVnaW5MYXllck9wLCByZW5kZXJOb2RlKTsKKyAgICBmb3IgKGNvbnN0IEJhdGNoQmFzZSogYmF0Y2ggOiBtQmF0Y2hlcykgeworICAgICAgICBiYXRjaC0+ZHVtcCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgorfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL0xheWVyQnVpbGRlci5oIGIvbGlicy9od3VpL0xheWVyQnVpbGRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OTY4ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvTGF5ZXJCdWlsZGVyLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNsaXBBcmVhLmgiCisjaW5jbHVkZSAiUmVjdC5oIgorI2luY2x1ZGUgInV0aWxzL01hY3Jvcy5oIgorCisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisKK3N0cnVjdCBTa1JlY3Q7CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKK25hbWVzcGFjZSB1aXJlbmRlcmVyIHsKKworY2xhc3MgQmFrZWRPcFN0YXRlOworc3RydWN0IEJlZ2luTGF5ZXJPcDsKK2NsYXNzIEJhdGNoQmFzZTsKK2NsYXNzIExpbmVhckFsbG9jYXRvcjsKK3N0cnVjdCBNZXJnZWRCYWtlZE9wTGlzdDsKK2NsYXNzIE1lcmdpbmdPcEJhdGNoOworY2xhc3MgT2Zmc2NyZWVuQnVmZmVyOworY2xhc3MgT3BCYXRjaDsKK2NsYXNzIFJlbmRlck5vZGU7CisKK3R5cGVkZWYgaW50IGJhdGNoaWRfdDsKK3R5cGVkZWYgY29uc3Qgdm9pZCogbWVyZ2VpZF90OworCituYW1lc3BhY2UgT3BCYXRjaFR5cGUgeworICAgIGVudW0geworICAgICAgICBCaXRtYXAsCisgICAgICAgIE1lcmdlZFBhdGNoLAorICAgICAgICBBbHBoYVZlcnRpY2VzLAorICAgICAgICBWZXJ0aWNlcywKKyAgICAgICAgQWxwaGFNYXNrVGV4dHVyZSwKKyAgICAgICAgVGV4dCwKKyAgICAgICAgQ29sb3JUZXh0LAorICAgICAgICBTaGFkb3csCisgICAgICAgIFRleHR1cmVMYXllciwKKyAgICAgICAgRnVuY3RvciwKKyAgICAgICAgQ29weVRvTGF5ZXIsCisgICAgICAgIENvcHlGcm9tTGF5ZXIsCisKKyAgICAgICAgQ291bnQgLy8gbXVzdCBiZSBsYXN0CisgICAgfTsKK30KKwordHlwZWRlZiB2b2lkICgqQmFrZWRPcFJlY2VpdmVyKSh2b2lkKiwgY29uc3QgQmFrZWRPcFN0YXRlJik7Cit0eXBlZGVmIHZvaWQgKCpNZXJnZWRPcFJlY2VpdmVyKSh2b2lkKiwgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCk7CisKKy8qKgorICogU3RvcmVzIHRoZSBkZWZlcnJlZCByZW5kZXIgb3BlcmF0aW9ucyBhbmQgc3RhdGUgdXNlZCB0byBjb21wdXRlIG9yZGVyaW5nCisgKiBmb3IgYSBzaW5nbGUgRkJPL2xheWVyLgorICovCitjbGFzcyBMYXllckJ1aWxkZXIgeworLy8gUHJldmVudCBjb3B5L2Fzc2lnbiBiZWNhdXNlIHVzZXJzIG1heSBzdGFzaCBwb2ludGVyIHRvIG9mZnNjcmVlbkJ1ZmZlciBhbmQgdmlld3BvcnRDbGlwCitQUkVWRU5UX0NPUFlfQU5EX0FTU0lHTihMYXllckJ1aWxkZXIpOworcHVibGljOgorICAgIC8vIENyZWF0ZSBMYXllckJ1aWxkZXIgZm9yIEZibzAKKyAgICBMYXllckJ1aWxkZXIodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpCisgICAgICAgICAgICA6IExheWVyQnVpbGRlcih3aWR0aCwgaGVpZ2h0LCByZXBhaW50UmVjdCwgbnVsbHB0ciwgbnVsbHB0cikge307CisKKyAgICAvLyBDcmVhdGUgTGF5ZXJCdWlsZGVyIGZvciBhbiBvZmZzY3JlZW4gbGF5ZXIsIHdoZXJlIGJlZ2luTGF5ZXJPcCBpcyBwcmVzZW50IGZvciBhCisgICAgLy8gc2F2ZUxheWVyLCByZW5kZXJOb2RlIGlzIHByZXNlbnQgZm9yIGEgSFcgbGF5ZXIuCisgICAgTGF5ZXJCdWlsZGVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisgICAgICAgICAgICBjb25zdCBSZWN0JiByZXBhaW50UmVjdCwgY29uc3QgQmVnaW5MYXllck9wKiBiZWdpbkxheWVyT3AsIFJlbmRlck5vZGUqIHJlbmRlck5vZGUpOworCisgICAgLy8gaXRlcmF0ZSBiYWNrIHRvd2FyZCB0YXJnZXQgdG8gc2VlIGlmIGFueXRoaW5nIGRyYXduIHNpbmNlIHNob3VsZCBvdmVybGFwIHRoZSBuZXcgb3AKKyAgICAvLyBpZiBubyB0YXJnZXQsIG1lcmdpbmcgb3BzIHN0aWxsIGl0ZXJhdGUgdG8gZmluZCBzaW1pbGFyIGJhdGNoIHRvIGluc2VydCBhZnRlcgorICAgIHZvaWQgbG9jYXRlSW5zZXJ0SW5kZXgoaW50IGJhdGNoSWQsIGNvbnN0IFJlY3QmIGNsaXBwZWRCb3VuZHMsCisgICAgICAgICAgICBCYXRjaEJhc2UqKiB0YXJnZXRCYXRjaCwgc2l6ZV90KiBpbnNlcnRCYXRjaEluZGV4KSBjb25zdDsKKworICAgIHZvaWQgZGVmZXJVbm1lcmdlYWJsZU9wKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLCBCYWtlZE9wU3RhdGUqIG9wLCBiYXRjaGlkX3QgYmF0Y2hJZCk7CisKKyAgICAvLyBpbnNlcnRpb24gcG9pbnQgb2YgYSBuZXcgYmF0Y2gsIHdpbGwgaG9wZWZ1bGx5IGJlIGltbWVkaWF0ZWx5IGFmdGVyIHNpbWlsYXIgYmF0Y2gKKyAgICAvLyAoZ2VuZXJhbGx5LCBzaG91bGQgYmUgc2ltaWxhciBzaGFkZXIpCisgICAgdm9pZCBkZWZlck1lcmdlYWJsZU9wKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLAorICAgICAgICAgICAgQmFrZWRPcFN0YXRlKiBvcCwgYmF0Y2hpZF90IGJhdGNoSWQsIG1lcmdlaWRfdCBtZXJnZUlkKTsKKworICAgIHZvaWQgcmVwbGF5QmFrZWRPcHNJbXBsKHZvaWQqIGFyZywgQmFrZWRPcFJlY2VpdmVyKiByZWNlaXZlcnMsIE1lcmdlZE9wUmVjZWl2ZXIqKSBjb25zdDsKKworICAgIHZvaWQgZGVmZXJMYXllckNsZWFyKGNvbnN0IFJlY3QmIGRzdFJlY3QpOworCisgICAgYm9vbCBlbXB0eSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1CYXRjaGVzLmVtcHR5KCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgbUJhdGNoZXMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoKSBjb25zdDsKKworICAgIGNvbnN0IHVpbnQzMl90IHdpZHRoOworICAgIGNvbnN0IHVpbnQzMl90IGhlaWdodDsKKyAgICBjb25zdCBSZWN0IHJlcGFpbnRSZWN0OworICAgIE9mZnNjcmVlbkJ1ZmZlciogb2Zmc2NyZWVuQnVmZmVyOworICAgIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wOworICAgIGNvbnN0IFJlbmRlck5vZGUqIHJlbmRlck5vZGU7CisgICAgY29uc3QgQ2xpcFJlY3Qgdmlld3BvcnRDbGlwOworCisgICAgLy8gbGlzdCBvZiBkZWZlcnJlZCBDb3B5RnJvbUxheWVyIG9wcywgdG8gYmUgZGVmZXJyZWQgdXBvbiBlbmNvdW50ZXJpbmcgRW5kVW5jbGlwcGVkTGF5ZXJPcHMKKyAgICBzdGQ6OnZlY3RvcjxCYWtlZE9wU3RhdGUqPiBhY3RpdmVVbmNsaXBwZWRTYXZlTGF5ZXJzOworcHJpdmF0ZToKKyAgICB2b2lkIGZsdXNoTGF5ZXJDbGVhcnMoTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpOworCisgICAgc3RkOjp2ZWN0b3I8QmF0Y2hCYXNlKj4gbUJhdGNoZXM7CisKKyAgICAvKioKKyAgICAgKiBNYXBzIHRoZSBtZXJnZWlkX3QgcmV0dXJuZWQgYnkgYW4gb3AncyBnZXRNZXJnZUlkKCkgdG8gdGhlIG1vc3QgcmVjZW50bHkgc2VlbgorICAgICAqIE1lcmdpbmdEcmF3QmF0Y2ggb2YgdGhhdCBpZC4gVGhlc2UgaWRzIGFyZSB1bmlxdWUgcGVyIGRyYXcgdHlwZSBhbmQgZ3VhcmFudGVlZCB0byBub3QKKyAgICAgKiBjb2xsaWRlLCB3aGljaCBhdm9pZHMgdGhlIG5lZWQgdG8gcmVzb2x2ZSBtZXJnZWlkIGNvbGxpc2lvbnMuCisgICAgICovCisgICAgc3RkOjp1bm9yZGVyZWRfbWFwPG1lcmdlaWRfdCwgTWVyZ2luZ09wQmF0Y2gqPiBtTWVyZ2luZ0JhdGNoTG9va3VwW09wQmF0Y2hUeXBlOjpDb3VudF07CisKKyAgICAvLyBNYXBzIGJhdGNoIGlkcyB0byB0aGUgbW9zdCByZWNlbnQgKm5vbi1tZXJnaW5nKiBiYXRjaCBvZiB0aGF0IGlkCisgICAgT3BCYXRjaCogbUJhdGNoTG9va3VwW09wQmF0Y2hUeXBlOjpDb3VudF0gPSB7IG51bGxwdHIgfTsKKworICAgIHN0ZDo6dmVjdG9yPFJlY3Q+IG1DbGVhclJlY3RzOworfTsKKworfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK307IC8vIG5hbWVzcGFjZSBhbmRyb2lkCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5jcHAgYi9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5jcHAKaW5kZXggZTllNWQ4MS4uMGNmNjQzZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL0xheWVyUmVuZGVyZXIuY3BwCisrKyBiL2xpYnMvaHd1aS9MYXllclJlbmRlcmVyLmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBACiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlcjo6dXBkYXRlVGV4dHVyZUxheWVyKExheWVyKiBsYXllciwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKLSAgICAgICAgYm9vbCBpc09wYXF1ZSwgYm9vbCBmb3JjZUZpbHRlciwgR0xlbnVtIHJlbmRlclRhcmdldCwgZmxvYXQqIHRleHR1cmVUcmFuc2Zvcm0pIHsKKyAgICAgICAgYm9vbCBpc09wYXF1ZSwgYm9vbCBmb3JjZUZpbHRlciwgR0xlbnVtIHJlbmRlclRhcmdldCwgY29uc3QgZmxvYXQqIHRleHR1cmVUcmFuc2Zvcm0pIHsKICAgICBpZiAobGF5ZXIpIHsKICAgICAgICAgbGF5ZXItPnNldEJsZW5kKCFpc09wYXF1ZSk7CiAgICAgICAgIGxheWVyLT5zZXRGb3JjZUZpbHRlcihmb3JjZUZpbHRlcik7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5oIGIvbGlicy9od3VpL0xheWVyUmVuZGVyZXIuaAppbmRleCBlNGE1NGIwLi4zOGMzNzA1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvTGF5ZXJSZW5kZXJlci5oCisrKyBiL2xpYnMvaHd1aS9MYXllclJlbmRlcmVyLmgKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBzdGF0aWMgTGF5ZXIqIGNyZWF0ZVJlbmRlckxheWVyKFJlbmRlclN0YXRlJiByZW5kZXJTdGF0ZSwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCk7CiAgICAgc3RhdGljIGJvb2wgcmVzaXplTGF5ZXIoTGF5ZXIqIGxheWVyLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVUZXh0dXJlTGF5ZXIoTGF5ZXIqIGxheWVyLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAotICAgICAgICAgICAgYm9vbCBpc09wYXF1ZSwgYm9vbCBmb3JjZUZpbHRlciwgR0xlbnVtIHJlbmRlclRhcmdldCwgZmxvYXQqIHRleHR1cmVUcmFuc2Zvcm0pOworICAgICAgICAgICAgYm9vbCBpc09wYXF1ZSwgYm9vbCBmb3JjZUZpbHRlciwgR0xlbnVtIHJlbmRlclRhcmdldCwgY29uc3QgZmxvYXQqIHRleHR1cmVUcmFuc2Zvcm0pOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lMYXllcihMYXllciogbGF5ZXIpOwogICAgIHN0YXRpYyBib29sIGNvcHlMYXllcihSZW5kZXJTdGF0ZSYgcmVuZGVyU3RhdGUsIExheWVyKiBsYXllciwgU2tCaXRtYXAqIGJpdG1hcCk7CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9MYXllclVwZGF0ZVF1ZXVlLmggYi9saWJzL2h3dWkvTGF5ZXJVcGRhdGVRdWV1ZS5oCmluZGV4IGJlNjEyZDIuLjViMWE4NTQgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9MYXllclVwZGF0ZVF1ZXVlLmgKKysrIGIvbGlicy9od3VpL0xheWVyVXBkYXRlUXVldWUuaApAQCAtNDIsNyArNDIsNyBAQAogICAgIExheWVyVXBkYXRlUXVldWUoKSB7fQogICAgIHZvaWQgZW5xdWV1ZUxheWVyV2l0aERhbWFnZShSZW5kZXJOb2RlKiByZW5kZXJOb2RlLCBSZWN0IGRpcnR5KTsKICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8RW50cnk+IGVudHJpZXMoKSBjb25zdCB7IHJldHVybiBtRW50cmllczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEVudHJ5PiYgZW50cmllcygpIGNvbnN0IHsgcmV0dXJuIG1FbnRyaWVzOyB9CiBwcml2YXRlOgogICAgIHN0ZDo6dmVjdG9yPEVudHJ5PiBtRW50cmllczsKIH07CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvTWF0cml4LmggYi9saWJzL2h3dWkvTWF0cml4LmgKaW5kZXggYzAxNzYzOC4uMWMyNWYyNiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL01hdHJpeC5oCisrKyBiL2xpYnMvaHd1aS9NYXRyaXguaApAQCAtMTM5LDkgKzEzOSwxMSBAQAogICAgIH0KIAogICAgIHZvaWQgbXVsdGlwbHkoY29uc3QgTWF0cml4NCYgdikgewotICAgICAgICBNYXRyaXg0IHU7Ci0gICAgICAgIHUubG9hZE11bHRpcGx5KCp0aGlzLCB2KTsKLSAgICAgICAgKnRoaXMgPSB1OworICAgICAgICBpZiAoIXYuaXNJZGVudGl0eSgpKSB7CisgICAgICAgICAgICBNYXRyaXg0IHU7CisgICAgICAgICAgICB1LmxvYWRNdWx0aXBseSgqdGhpcywgdik7CisgICAgICAgICAgICAqdGhpcyA9IHU7CisgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lkIG11bHRpcGx5KGZsb2F0IHYpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL09wUmVvcmRlcmVyLmNwcCBiL2xpYnMvaHd1aS9PcFJlb3JkZXJlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5NDhmMTguLjAwMDAwMDAKLS0tIGEvbGlicy9od3VpL09wUmVvcmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDkxNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgIk9wUmVvcmRlcmVyLmgiCi0KLSNpbmNsdWRlICJMYXllclVwZGF0ZVF1ZXVlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTm9kZS5oIgotI2luY2x1ZGUgInJlbmRlcnN0YXRlL09mZnNjcmVlbkJ1ZmZlclBvb2wuaCIKLSNpbmNsdWRlICJ1dGlscy9GYXRWZWN0b3IuaCIKLSNpbmNsdWRlICJ1dGlscy9QYWludFV0aWxzLmgiCi0jaW5jbHVkZSAidXRpbHMvVHJhY2VVdGlscy5oIgotCi0jaW5jbHVkZSA8U2tDYW52YXMuaD4KLSNpbmNsdWRlIDxTa1BhdGhPcHMuaD4KLSNpbmNsdWRlIDx1dGlscy9UeXBlSGVscGVycy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgdWlyZW5kZXJlciB7Ci0KLWNsYXNzIEJhdGNoQmFzZSB7Ci0KLXB1YmxpYzoKLSAgICBCYXRjaEJhc2UoYmF0Y2hpZF90IGJhdGNoSWQsIEJha2VkT3BTdGF0ZSogb3AsIGJvb2wgbWVyZ2luZykKLSAgICAgICAgICAgIDogbUJhdGNoSWQoYmF0Y2hJZCkKLSAgICAgICAgICAgICwgbU1lcmdpbmcobWVyZ2luZykgewotICAgICAgICBtQm91bmRzID0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kczsKLSAgICAgICAgbU9wcy5wdXNoX2JhY2sob3ApOwotICAgIH0KLQotICAgIGJvb2wgaW50ZXJzZWN0cyhjb25zdCBSZWN0JiByZWN0KSBjb25zdCB7Ci0gICAgICAgIGlmICghcmVjdC5pbnRlcnNlY3RzKG1Cb3VuZHMpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChjb25zdCBCYWtlZE9wU3RhdGUqIG9wIDogbU9wcykgewotICAgICAgICAgICAgaWYgKHJlY3QuaW50ZXJzZWN0cyhvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBiYXRjaGlkX3QgZ2V0QmF0Y2hJZCgpIGNvbnN0IHsgcmV0dXJuIG1CYXRjaElkOyB9Ci0gICAgYm9vbCBpc01lcmdpbmcoKSBjb25zdCB7IHJldHVybiBtTWVyZ2luZzsgfQotCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8QmFrZWRPcFN0YXRlKj4mIGdldE9wcygpIGNvbnN0IHsgcmV0dXJuIG1PcHM7IH0KLQotICAgIHZvaWQgZHVtcCgpIGNvbnN0IHsKLSAgICAgICAgQUxPR0QoIiAgICBCYXRjaCAlcCwgaWQgJWQsIG1lcmdpbmcgJWQsIGNvdW50ICVkLCBib3VuZHMgIiBSRUNUX1NUUklORywKLSAgICAgICAgICAgICAgICB0aGlzLCBtQmF0Y2hJZCwgbU1lcmdpbmcsIG1PcHMuc2l6ZSgpLCBSRUNUX0FSR1MobUJvdW5kcykpOwotICAgIH0KLXByb3RlY3RlZDoKLSAgICBiYXRjaGlkX3QgbUJhdGNoSWQ7Ci0gICAgUmVjdCBtQm91bmRzOwotICAgIHN0ZDo6dmVjdG9yPEJha2VkT3BTdGF0ZSo+IG1PcHM7Ci0gICAgYm9vbCBtTWVyZ2luZzsKLX07Ci0KLWNsYXNzIE9wQmF0Y2ggOiBwdWJsaWMgQmF0Y2hCYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvcikgewotICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jKHNpemUpOwotICAgIH0KLQotICAgIE9wQmF0Y2goYmF0Y2hpZF90IGJhdGNoSWQsIEJha2VkT3BTdGF0ZSogb3ApCi0gICAgICAgICAgICA6IEJhdGNoQmFzZShiYXRjaElkLCBvcCwgZmFsc2UpIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJhdGNoT3AoQmFrZWRPcFN0YXRlKiBvcCkgewotICAgICAgICBtQm91bmRzLnVuaW9uV2l0aChvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKLSAgICAgICAgbU9wcy5wdXNoX2JhY2sob3ApOwotICAgIH0KLX07Ci0KLWNsYXNzIE1lcmdpbmdPcEJhdGNoIDogcHVibGljIEJhdGNoQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgTGluZWFyQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvYyhzaXplKTsKLSAgICB9Ci0KLSAgICBNZXJnaW5nT3BCYXRjaChiYXRjaGlkX3QgYmF0Y2hJZCwgQmFrZWRPcFN0YXRlKiBvcCkKLSAgICAgICAgICAgIDogQmF0Y2hCYXNlKGJhdGNoSWQsIG9wLCB0cnVlKSB7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBIZWxwZXIgZm9yIGRldGVybWluaW5nIGlmIGEgbmV3IG9wIGNhbiBtZXJnZSB3aXRoIGEgTWVyZ2luZ0RyYXdCYXRjaCBiYXNlZCBvbiB0aGVpciBib3VuZHMKLSAgICAgKiBhbmQgY2xpcCBzaWRlIGZsYWdzLiBQb3NpdGl2ZSBib3VuZHMgZGVsdGEgbWVhbnMgbmV3IGJvdW5kcyBmaXQgaW4gb2xkLgotICAgICAqLwotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBjaGVja1NpZGUoY29uc3QgaW50IGN1cnJlbnRGbGFncywgY29uc3QgaW50IG5ld0ZsYWdzLCBjb25zdCBpbnQgc2lkZSwKLSAgICAgICAgICAgIGZsb2F0IGJvdW5kc0RlbHRhKSB7Ci0gICAgICAgIGJvb2wgY3VycmVudENsaXBFeGlzdHMgPSBjdXJyZW50RmxhZ3MgJiBzaWRlOwotICAgICAgICBib29sIG5ld0NsaXBFeGlzdHMgPSBuZXdGbGFncyAmIHNpZGU7Ci0KLSAgICAgICAgLy8gaWYgY3VycmVudCBpcyBjbGlwcGVkLCB3ZSBtdXN0IGJlIGFibGUgdG8gZml0IG5ldyBib3VuZHMgaW4gY3VycmVudAotICAgICAgICBpZiAoYm91bmRzRGVsdGEgPiAwICYmIGN1cnJlbnRDbGlwRXhpc3RzKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gaWYgbmV3IGlzIGNsaXBwZWQsIHdlIG11c3QgYmUgYWJsZSB0byBmaXQgY3VycmVudCBib3VuZHMgaW4gbmV3Ci0gICAgICAgIGlmIChib3VuZHNEZWx0YSA8IDAgJiYgbmV3Q2xpcEV4aXN0cykgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIHBhaW50SXNEZWZhdWx0KGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7Ci0gICAgICAgIHJldHVybiBwYWludC5nZXRBbHBoYSgpID09IDI1NQotICAgICAgICAgICAgICAgICYmIHBhaW50LmdldENvbG9yRmlsdGVyKCkgPT0gbnVsbHB0cgotICAgICAgICAgICAgICAgICYmIHBhaW50LmdldFNoYWRlcigpID09IG51bGxwdHI7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgcGFpbnRzQXJlRXF1aXZhbGVudChjb25zdCBTa1BhaW50JiBhLCBjb25zdCBTa1BhaW50JiBiKSB7Ci0gICAgICAgIHJldHVybiBhLmdldEFscGhhKCkgPT0gYi5nZXRBbHBoYSgpCi0gICAgICAgICAgICAgICAgJiYgYS5nZXRDb2xvckZpbHRlcigpID09IGIuZ2V0Q29sb3JGaWx0ZXIoKQotICAgICAgICAgICAgICAgICYmIGEuZ2V0U2hhZGVyKCkgPT0gYi5nZXRTaGFkZXIoKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIENoZWNrcyBpZiBhIChtZXJnZWFibGUpIG9wIGNhbiBiZSBtZXJnZWQgaW50byB0aGlzIGJhdGNoCi0gICAgICoKLSAgICAgKiBJZiB0cnVlLCB0aGUgb3AncyBtdWx0aURyYXcgbXVzdCBiZSBndWFyYW50ZWVkIHRvIGhhbmRsZSBib3RoIG9wcyBzaW11bHRhbmVvdXNseSwgc28gaXQgaXMKLSAgICAgKiBpbXBvcnRhbnQgdG8gY29uc2lkZXIgYWxsIHBhaW50IGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgZHJhdyBjYWxscyBpbiBkZWNpZGluZyBib3RoIGEpIGlmIGFuCi0gICAgICogb3AgdHJpZXMgdG8gbWVyZ2UgYXQgYWxsLCBhbmQgYikgaWYgdGhlIG9wIGNhbiBtZXJnZSB3aXRoIGFub3RoZXIgc2V0IG9mIG9wcwotICAgICAqCi0gICAgICogRmFsc2UgcG9zaXRpdmVzIGNhbiBsZWFkIHRvIGluZm9ybWF0aW9uIGZyb20gdGhlIHBhaW50cyBvZiBzdWJzZXF1ZW50IG1lcmdlZCBvcGVyYXRpb25zIGJlaW5nCi0gICAgICogZHJvcHBlZCwgc28gd2UgbWFrZSBzaW1wbGlmeWluZyBxdWFsaWZpY2F0aW9ucyBvbiB0aGUgb3BzIHRoYXQgY2FuIG1lcmdlLCBwZXIgb3AgdHlwZS4KLSAgICAgKi8KLSAgICBib29sIGNhbk1lcmdlV2l0aChCYWtlZE9wU3RhdGUqIG9wKSBjb25zdCB7Ci0gICAgICAgIGJvb2wgaXNUZXh0QmF0Y2ggPSBnZXRCYXRjaElkKCkgPT0gT3BCYXRjaFR5cGU6OlRleHQKLSAgICAgICAgICAgICAgICB8fCBnZXRCYXRjaElkKCkgPT0gT3BCYXRjaFR5cGU6OkNvbG9yVGV4dDsKLQotICAgICAgICAvLyBPdmVybGFwcGluZyBvdGhlciBvcGVyYXRpb25zIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGV4dCB3aXRob3V0IHNoYWRvdy4gRm9yIG90aGVyIG9wcywKLSAgICAgICAgLy8gbXVsdGlEcmF3IGlzbid0IGd1YXJhbnRlZWQgdG8gb3ZlcmRyYXcgY29ycmVjdGx5Ci0gICAgICAgIGlmICghaXNUZXh0QmF0Y2ggfHwgUGFpbnRVdGlsczo6aGFzVGV4dFNoYWRvdyhvcC0+b3AtPnBhaW50KSkgewotICAgICAgICAgICAgaWYgKGludGVyc2VjdHMob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcykpIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogbGhzID0gb3A7Ci0gICAgICAgIGNvbnN0IEJha2VkT3BTdGF0ZSogcmhzID0gbU9wc1swXTsKLQotICAgICAgICBpZiAoIU1hdGhVdGlsczo6YXJlRXF1YWwobGhzLT5hbHBoYSwgcmhzLT5hbHBoYSkpIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBJZGVudGljYWwgcm91bmQgcmVjdCBjbGlwIHN0YXRlIG1lYW5zIGJvdGggb3BzIHdpbGwgY2xpcCBpbiB0aGUgc2FtZSB3YXksIG9yIG5vdCBhdCBhbGwuCi0gICAgICAgIC8vIEFzIHRoZSBzdGF0ZSBvYmplY3RzIGFyZSBjb25zdCwgd2UgY2FuIGNvbXBhcmUgdGhlaXIgcG9pbnRlcnMgdG8gZGV0ZXJtaW5lIG1lcmdlYWJpbGl0eQotICAgICAgICBpZiAobGhzLT5yb3VuZFJlY3RDbGlwU3RhdGUgIT0gcmhzLT5yb3VuZFJlY3RDbGlwU3RhdGUpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGxocy0+cHJvamVjdGlvblBhdGhNYXNrICE9IHJocy0+cHJvamVjdGlvblBhdGhNYXNrKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLyogQ2xpcHBpbmcgY29tcGF0aWJpbGl0eSBjaGVjawotICAgICAgICAgKgotICAgICAgICAgKiBFeHBsb2l0cyB0aGUgZmFjdCB0aGF0IGlmIGEgb3Agb3IgYmF0Y2ggaXMgY2xpcHBlZCBvbiBhIHNpZGUsIGl0cyBib3VuZHMgd2lsbCBlcXVhbCBpdHMKLSAgICAgICAgICogY2xpcCBmb3IgdGhhdCBzaWRlLgotICAgICAgICAgKi8KLSAgICAgICAgY29uc3QgaW50IGN1cnJlbnRGbGFncyA9IG1DbGlwU2lkZUZsYWdzOwotICAgICAgICBjb25zdCBpbnQgbmV3RmxhZ3MgPSBvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwU2lkZUZsYWdzOwotICAgICAgICBpZiAoY3VycmVudEZsYWdzICE9IE9wQ2xpcFNpZGVGbGFnczo6Tm9uZSB8fCBuZXdGbGFncyAhPSBPcENsaXBTaWRlRmxhZ3M6Ok5vbmUpIHsKLSAgICAgICAgICAgIGNvbnN0IFJlY3QmIG9wQm91bmRzID0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kczsKLSAgICAgICAgICAgIGZsb2F0IGJvdW5kc0RlbHRhID0gbUJvdW5kcy5sZWZ0IC0gb3BCb3VuZHMubGVmdDsKLSAgICAgICAgICAgIGlmICghY2hlY2tTaWRlKGN1cnJlbnRGbGFncywgbmV3RmxhZ3MsIE9wQ2xpcFNpZGVGbGFnczo6TGVmdCwgYm91bmRzRGVsdGEpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBib3VuZHNEZWx0YSA9IG1Cb3VuZHMudG9wIC0gb3BCb3VuZHMudG9wOwotICAgICAgICAgICAgaWYgKCFjaGVja1NpZGUoY3VycmVudEZsYWdzLCBuZXdGbGFncywgT3BDbGlwU2lkZUZsYWdzOjpUb3AsIGJvdW5kc0RlbHRhKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyByaWdodCBhbmQgYm90dG9tIGRlbHRhIGNhbGN1bGF0aW9uIHJldmVyc2VkIHRvIGFjY291bnQgZm9yIGRpcmVjdGlvbgotICAgICAgICAgICAgYm91bmRzRGVsdGEgPSBvcEJvdW5kcy5yaWdodCAtIG1Cb3VuZHMucmlnaHQ7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrU2lkZShjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzLCBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0LCBib3VuZHNEZWx0YSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJvdW5kc0RlbHRhID0gb3BCb3VuZHMuYm90dG9tIC0gbUJvdW5kcy5ib3R0b207Ci0gICAgICAgICAgICBpZiAoIWNoZWNrU2lkZShjdXJyZW50RmxhZ3MsIG5ld0ZsYWdzLCBPcENsaXBTaWRlRmxhZ3M6OkJvdHRvbSwgYm91bmRzRGVsdGEpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBTa1BhaW50KiBuZXdQYWludCA9IG9wLT5vcC0+cGFpbnQ7Ci0gICAgICAgIGNvbnN0IFNrUGFpbnQqIG9sZFBhaW50ID0gbU9wc1swXS0+b3AtPnBhaW50OwotCi0gICAgICAgIGlmIChuZXdQYWludCA9PSBvbGRQYWludCkgewotICAgICAgICAgICAgLy8gaWYgcGFpbnRzIGFyZSBlcXVhbCwgdGhlbiBtb2RpZmllcnMgKyBwYWludCBhdHRyaWJzIGRvbid0IG5lZWQgdG8gYmUgY29tcGFyZWQKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5ld1BhaW50ICYmICFvbGRQYWludCkgewotICAgICAgICAgICAgcmV0dXJuIHBhaW50SXNEZWZhdWx0KCpuZXdQYWludCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW5ld1BhaW50ICYmIG9sZFBhaW50KSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFpbnRJc0RlZmF1bHQoKm9sZFBhaW50KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFpbnRzQXJlRXF1aXZhbGVudCgqbmV3UGFpbnQsICpvbGRQYWludCk7Ci0gICAgfQotCi0gICAgdm9pZCBtZXJnZU9wKEJha2VkT3BTdGF0ZSogb3ApIHsKLSAgICAgICAgbUJvdW5kcy51bmlvbldpdGgob3AtPmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgIG1PcHMucHVzaF9iYWNrKG9wKTsKLQotICAgICAgICBjb25zdCBpbnQgbmV3Q2xpcFNpZGVGbGFncyA9IG9wLT5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3M7Ci0gICAgICAgIG1DbGlwU2lkZUZsYWdzIHw9IG5ld0NsaXBTaWRlRmxhZ3M7Ci0KLSAgICAgICAgY29uc3QgUmVjdCYgb3BDbGlwID0gb3AtPmNvbXB1dGVkU3RhdGUuY2xpcFJlY3Q7Ci0gICAgICAgIGlmIChuZXdDbGlwU2lkZUZsYWdzICYgT3BDbGlwU2lkZUZsYWdzOjpMZWZ0KSBtQ2xpcFJlY3QubGVmdCA9IG9wQ2xpcC5sZWZ0OwotICAgICAgICBpZiAobmV3Q2xpcFNpZGVGbGFncyAmIE9wQ2xpcFNpZGVGbGFnczo6VG9wKSBtQ2xpcFJlY3QudG9wID0gb3BDbGlwLnRvcDsKLSAgICAgICAgaWYgKG5ld0NsaXBTaWRlRmxhZ3MgJiBPcENsaXBTaWRlRmxhZ3M6OlJpZ2h0KSBtQ2xpcFJlY3QucmlnaHQgPSBvcENsaXAucmlnaHQ7Ci0gICAgICAgIGlmIChuZXdDbGlwU2lkZUZsYWdzICYgT3BDbGlwU2lkZUZsYWdzOjpCb3R0b20pIG1DbGlwUmVjdC5ib3R0b20gPSBvcENsaXAuYm90dG9tOwotICAgIH0KLQotICAgIGJvb2wgZ2V0Q2xpcFNpZGVGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1DbGlwU2lkZUZsYWdzOyB9Ci0gICAgY29uc3QgUmVjdCYgZ2V0Q2xpcFJlY3QoKSBjb25zdCB7IHJldHVybiBtQ2xpcFJlY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbUNsaXBTaWRlRmxhZ3MgPSAwOwotICAgIFJlY3QgbUNsaXBSZWN0OwotfTsKLQotT3BSZW9yZGVyZXI6OkxheWVyUmVvcmRlcmVyOjpMYXllclJlb3JkZXJlcih1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAotICAgICAgICBjb25zdCBSZWN0JiByZXBhaW50UmVjdCwgY29uc3QgQmVnaW5MYXllck9wKiBiZWdpbkxheWVyT3AsIFJlbmRlck5vZGUqIHJlbmRlck5vZGUpCi0gICAgICAgIDogd2lkdGgod2lkdGgpCi0gICAgICAgICwgaGVpZ2h0KGhlaWdodCkKLSAgICAgICAgLCByZXBhaW50UmVjdChyZXBhaW50UmVjdCkKLSAgICAgICAgLCBvZmZzY3JlZW5CdWZmZXIocmVuZGVyTm9kZSA/IHJlbmRlck5vZGUtPmdldExheWVyKCkgOiBudWxscHRyKQotICAgICAgICAsIGJlZ2luTGF5ZXJPcChiZWdpbkxheWVyT3ApCi0gICAgICAgICwgcmVuZGVyTm9kZShyZW5kZXJOb2RlKSB7fQotCi0vLyBpdGVyYXRlIGJhY2sgdG93YXJkIHRhcmdldCB0byBzZWUgaWYgYW55dGhpbmcgZHJhd24gc2luY2Ugc2hvdWxkIG92ZXJsYXAgdGhlIG5ldyBvcAotLy8gaWYgbm8gdGFyZ2V0LCBtZXJnaW5nIG9wcyBzdGlsbCBpdGVyYXRlIHRvIGZpbmQgc2ltaWxhciBiYXRjaCB0byBpbnNlcnQgYWZ0ZXIKLXZvaWQgT3BSZW9yZGVyZXI6OkxheWVyUmVvcmRlcmVyOjpsb2NhdGVJbnNlcnRJbmRleChpbnQgYmF0Y2hJZCwgY29uc3QgUmVjdCYgY2xpcHBlZEJvdW5kcywKLSAgICAgICAgQmF0Y2hCYXNlKiogdGFyZ2V0QmF0Y2gsIHNpemVfdCogaW5zZXJ0QmF0Y2hJbmRleCkgY29uc3QgewotICAgIGZvciAoaW50IGkgPSBtQmF0Y2hlcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBCYXRjaEJhc2UqIG92ZXJCYXRjaCA9IG1CYXRjaGVzW2ldOwotCi0gICAgICAgIGlmIChvdmVyQmF0Y2ggPT0gKnRhcmdldEJhdGNoKSBicmVhazsKLQotICAgICAgICAvLyBUT0RPOiBhbHNvIGNvbnNpZGVyIHNoYWRlciBzaGFyZWQgYmV0d2VlbiBiYXRjaCB0eXBlcwotICAgICAgICBpZiAoYmF0Y2hJZCA9PSBvdmVyQmF0Y2gtPmdldEJhdGNoSWQoKSkgewotICAgICAgICAgICAgKmluc2VydEJhdGNoSW5kZXggPSBpICsgMTsKLSAgICAgICAgICAgIGlmICghKnRhcmdldEJhdGNoKSBicmVhazsgLy8gZm91bmQgaW5zZXJ0IHBvc2l0aW9uLCBxdWl0Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3ZlckJhdGNoLT5pbnRlcnNlY3RzKGNsaXBwZWRCb3VuZHMpKSB7Ci0gICAgICAgICAgICAvLyBOT1RFOiBpdCBtYXkgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgZm9yIHNwZWNpYWwgY2FzZXMgd2hlcmUgdHdvIG9wZXJhdGlvbnMKLSAgICAgICAgICAgIC8vIG9mIHRoZSBzYW1lIGJhdGNoL3BhaW50IGNvdWxkIHN3YXAgb3JkZXIsIHN1Y2ggYXMgd2l0aCBhIG5vbi1tZXJnZWFibGUKLSAgICAgICAgICAgIC8vIChjbGlwcGVkKSBhbmQgYSBtZXJnZWFibGUgdGV4dCBvcGVyYXRpb24KLSAgICAgICAgICAgICp0YXJnZXRCYXRjaCA9IG51bGxwdHI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6TGF5ZXJSZW9yZGVyZXI6OmRlZmVyVW5tZXJnZWFibGVPcChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKLSAgICAgICAgQmFrZWRPcFN0YXRlKiBvcCwgYmF0Y2hpZF90IGJhdGNoSWQpIHsKLSAgICBPcEJhdGNoKiB0YXJnZXRCYXRjaCA9IG1CYXRjaExvb2t1cFtiYXRjaElkXTsKLQotICAgIHNpemVfdCBpbnNlcnRCYXRjaEluZGV4ID0gbUJhdGNoZXMuc2l6ZSgpOwotICAgIGlmICh0YXJnZXRCYXRjaCkgewotICAgICAgICBsb2NhdGVJbnNlcnRJbmRleChiYXRjaElkLCBvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLAotICAgICAgICAgICAgICAgIChCYXRjaEJhc2UqKikoJnRhcmdldEJhdGNoKSwgJmluc2VydEJhdGNoSW5kZXgpOwotICAgIH0KLQotICAgIGlmICh0YXJnZXRCYXRjaCkgewotICAgICAgICB0YXJnZXRCYXRjaC0+YmF0Y2hPcChvcCk7Ci0gICAgfSBlbHNlICB7Ci0gICAgICAgIC8vIG5ldyBub24tbWVyZ2luZyBiYXRjaAotICAgICAgICB0YXJnZXRCYXRjaCA9IG5ldyAoYWxsb2NhdG9yKSBPcEJhdGNoKGJhdGNoSWQsIG9wKTsKLSAgICAgICAgbUJhdGNoTG9va3VwW2JhdGNoSWRdID0gdGFyZ2V0QmF0Y2g7Ci0gICAgICAgIG1CYXRjaGVzLmluc2VydChtQmF0Y2hlcy5iZWdpbigpICsgaW5zZXJ0QmF0Y2hJbmRleCwgdGFyZ2V0QmF0Y2gpOwotICAgIH0KLX0KLQotLy8gaW5zZXJ0aW9uIHBvaW50IG9mIGEgbmV3IGJhdGNoLCB3aWxsIGhvcGVmdWxseSBiZSBpbW1lZGlhdGVseSBhZnRlciBzaW1pbGFyIGJhdGNoCi0vLyAoZ2VuZXJhbGx5LCBzaG91bGQgYmUgc2ltaWxhciBzaGFkZXIpCi12b2lkIE9wUmVvcmRlcmVyOjpMYXllclJlb3JkZXJlcjo6ZGVmZXJNZXJnZWFibGVPcChMaW5lYXJBbGxvY2F0b3ImIGFsbG9jYXRvciwKLSAgICAgICAgQmFrZWRPcFN0YXRlKiBvcCwgYmF0Y2hpZF90IGJhdGNoSWQsIG1lcmdlaWRfdCBtZXJnZUlkKSB7Ci0gICAgTWVyZ2luZ09wQmF0Y2gqIHRhcmdldEJhdGNoID0gbnVsbHB0cjsKLQotICAgIC8vIFRyeSB0byBtZXJnZSB3aXRoIGFueSBleGlzdGluZyBiYXRjaCB3aXRoIHNhbWUgbWVyZ2VJZAotICAgIGF1dG8gZ2V0UmVzdWx0ID0gbU1lcmdpbmdCYXRjaExvb2t1cFtiYXRjaElkXS5maW5kKG1lcmdlSWQpOwotICAgIGlmIChnZXRSZXN1bHQgIT0gbU1lcmdpbmdCYXRjaExvb2t1cFtiYXRjaElkXS5lbmQoKSkgewotICAgICAgICB0YXJnZXRCYXRjaCA9IGdldFJlc3VsdC0+c2Vjb25kOwotICAgICAgICBpZiAoIXRhcmdldEJhdGNoLT5jYW5NZXJnZVdpdGgob3ApKSB7Ci0gICAgICAgICAgICB0YXJnZXRCYXRjaCA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzaXplX3QgaW5zZXJ0QmF0Y2hJbmRleCA9IG1CYXRjaGVzLnNpemUoKTsKLSAgICBsb2NhdGVJbnNlcnRJbmRleChiYXRjaElkLCBvcC0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzLAotICAgICAgICAgICAgKEJhdGNoQmFzZSoqKSgmdGFyZ2V0QmF0Y2gpLCAmaW5zZXJ0QmF0Y2hJbmRleCk7Ci0KLSAgICBpZiAodGFyZ2V0QmF0Y2gpIHsKLSAgICAgICAgdGFyZ2V0QmF0Y2gtPm1lcmdlT3Aob3ApOwotICAgIH0gZWxzZSAgewotICAgICAgICAvLyBuZXcgbWVyZ2luZyBiYXRjaAotICAgICAgICB0YXJnZXRCYXRjaCA9IG5ldyAoYWxsb2NhdG9yKSBNZXJnaW5nT3BCYXRjaChiYXRjaElkLCBvcCk7Ci0gICAgICAgIG1NZXJnaW5nQmF0Y2hMb29rdXBbYmF0Y2hJZF0uaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG1lcmdlSWQsIHRhcmdldEJhdGNoKSk7Ci0KLSAgICAgICAgbUJhdGNoZXMuaW5zZXJ0KG1CYXRjaGVzLmJlZ2luKCkgKyBpbnNlcnRCYXRjaEluZGV4LCB0YXJnZXRCYXRjaCk7Ci0gICAgfQotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpMYXllclJlb3JkZXJlcjo6cmVwbGF5QmFrZWRPcHNJbXBsKHZvaWQqIGFyZywKLSAgICAgICAgQmFrZWRPcFJlY2VpdmVyKiB1bm1lcmdlZFJlY2VpdmVycywgTWVyZ2VkT3BSZWNlaXZlciogbWVyZ2VkUmVjZWl2ZXJzKSBjb25zdCB7Ci0gICAgQVRSQUNFX05BTUUoImZsdXNoIGRyYXdpbmcgY29tbWFuZHMiKTsKLSAgICBmb3IgKGNvbnN0IEJhdGNoQmFzZSogYmF0Y2ggOiBtQmF0Y2hlcykgewotICAgICAgICBzaXplX3Qgc2l6ZSA9IGJhdGNoLT5nZXRPcHMoKS5zaXplKCk7Ci0gICAgICAgIGlmIChzaXplID4gMSAmJiBiYXRjaC0+aXNNZXJnaW5nKCkpIHsKLSAgICAgICAgICAgIGludCBvcElkID0gYmF0Y2gtPmdldE9wcygpWzBdLT5vcC0+b3BJZDsKLSAgICAgICAgICAgIGNvbnN0IE1lcmdpbmdPcEJhdGNoKiBtZXJnaW5nQmF0Y2ggPSBzdGF0aWNfY2FzdDxjb25zdCBNZXJnaW5nT3BCYXRjaCo+KGJhdGNoKTsKLSAgICAgICAgICAgIE1lcmdlZEJha2VkT3BMaXN0IGRhdGEgPSB7Ci0gICAgICAgICAgICAgICAgICAgIGJhdGNoLT5nZXRPcHMoKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgIHNpemUsCi0gICAgICAgICAgICAgICAgICAgIG1lcmdpbmdCYXRjaC0+Z2V0Q2xpcFNpZGVGbGFncygpLAotICAgICAgICAgICAgICAgICAgICBtZXJnaW5nQmF0Y2gtPmdldENsaXBSZWN0KCkKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBpZiAoZGF0YS5jbGlwU2lkZUZsYWdzKSB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgcmlnaHQgb3IgYm90dG9tIHNpZGVzIGFyZW4ndCB1c2VkIHRvIGNsaXAsIGluaXQgdGhlbSB0byB2aWV3cG9ydCBib3VuZHMKLSAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2xpcCByZWN0LCBzbyBpdCBjYW4gYmUgdXNlZCB0byBzY2lzc29yCi0gICAgICAgICAgICAgICAgaWYgKCEoZGF0YS5jbGlwU2lkZUZsYWdzICYgT3BDbGlwU2lkZUZsYWdzOjpSaWdodCkpIGRhdGEuY2xpcC5yaWdodCA9IHdpZHRoOwotICAgICAgICAgICAgICAgIGlmICghKGRhdGEuY2xpcFNpZGVGbGFncyAmIE9wQ2xpcFNpZGVGbGFnczo6Qm90dG9tKSkgZGF0YS5jbGlwLmJvdHRvbSA9IGhlaWdodDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lcmdlZFJlY2VpdmVyc1tvcElkXShhcmcsIGRhdGEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChjb25zdCBCYWtlZE9wU3RhdGUqIG9wIDogYmF0Y2gtPmdldE9wcygpKSB7Ci0gICAgICAgICAgICAgICAgdW5tZXJnZWRSZWNlaXZlcnNbb3AtPm9wLT5vcElkXShhcmcsICpvcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6OkxheWVyUmVvcmRlcmVyOjpkdW1wKCkgY29uc3QgewotICAgIEFMT0dEKCJMYXllclJlb3JkZXJlciAlcCwgJXV4JXUgYnVmZmVyICVwLCBibG8gJXAsIHJuICVwIiwKLSAgICAgICAgICAgIHRoaXMsIHdpZHRoLCBoZWlnaHQsIG9mZnNjcmVlbkJ1ZmZlciwgYmVnaW5MYXllck9wLCByZW5kZXJOb2RlKTsKLSAgICBmb3IgKGNvbnN0IEJhdGNoQmFzZSogYmF0Y2ggOiBtQmF0Y2hlcykgewotICAgICAgICBiYXRjaC0+ZHVtcCgpOwotICAgIH0KLX0KLQotT3BSZW9yZGVyZXI6Ok9wUmVvcmRlcmVyKGNvbnN0IExheWVyVXBkYXRlUXVldWUmIGxheWVycywgY29uc3QgU2tSZWN0JiBjbGlwLAotICAgICAgICB1aW50MzJfdCB2aWV3cG9ydFdpZHRoLCB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCwKLSAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8IHNwPFJlbmRlck5vZGU+ID4mIG5vZGVzLCBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlcikKLSAgICAgICAgOiBtQ2FudmFzU3RhdGUoKnRoaXMpIHsKLSAgICBBVFJBQ0VfTkFNRSgicHJlcGFyZSBkcmF3aW5nIGNvbW1hbmRzIik7Ci0KLSAgICBtTGF5ZXJSZW9yZGVyZXJzLnJlc2VydmUobGF5ZXJzLmVudHJpZXMoKS5zaXplKCkpOwotICAgIG1MYXllclN0YWNrLnJlc2VydmUobGF5ZXJzLmVudHJpZXMoKS5zaXplKCkpOwotCi0gICAgLy8gUHJlcGFyZSB0byBkZWZlciBGYm8wCi0gICAgbUxheWVyUmVvcmRlcmVycy5lbXBsYWNlX2JhY2sodmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIFJlY3QoY2xpcCkpOwotICAgIG1MYXllclN0YWNrLnB1c2hfYmFjaygwKTsKLSAgICBtQ2FudmFzU3RhdGUuaW5pdGlhbGl6ZVNhdmVTdGFjayh2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCwKLSAgICAgICAgICAgIGNsaXAuZkxlZnQsIGNsaXAuZlRvcCwgY2xpcC5mUmlnaHQsIGNsaXAuZkJvdHRvbSwKLSAgICAgICAgICAgIGxpZ2h0Q2VudGVyKTsKLQotICAgIC8vIFJlbmRlciBhbGwgbGF5ZXJzIHRvIGJlIHVwZGF0ZWQsIGluIG9yZGVyLiBEZWZlciBpbiByZXZlcnNlIG9yZGVyLCBzbyB0aGF0IHRoZXknbGwgYmUKLSAgICAvLyB1cGRhdGVkIGluIHRoZSBvcmRlciB0aGV5J3JlIHBhc3NlZCBpbiAobUxheWVyUmVvcmRlcmVycyBhcmUgaXNzdWVkIHRvIFJlbmRlcmVyIGluIHJldmVyc2UpCi0gICAgZm9yIChpbnQgaSA9IGxheWVycy5lbnRyaWVzKCkuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgUmVuZGVyTm9kZSogbGF5ZXJOb2RlID0gbGF5ZXJzLmVudHJpZXMoKVtpXS5yZW5kZXJOb2RlOwotICAgICAgICBjb25zdCBSZWN0JiBsYXllckRhbWFnZSA9IGxheWVycy5lbnRyaWVzKClbaV0uZGFtYWdlOwotICAgICAgICBsYXllck5vZGUtPmNvbXB1dGVPcmRlcmluZygpOwotCi0gICAgICAgIC8vIG1hcCBjdXJyZW50IGxpZ2h0IGNlbnRlciBpbnRvIFJlbmRlck5vZGUncyBjb29yZGluYXRlIHNwYWNlCi0gICAgICAgIFZlY3RvcjMgbGlnaHRDZW50ZXIgPSBtQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPmdldFJlbGF0aXZlTGlnaHRDZW50ZXIoKTsKLSAgICAgICAgbGF5ZXJOb2RlLT5nZXRMYXllcigpLT5pbnZlcnNlVHJhbnNmb3JtSW5XaW5kb3cubWFwUG9pbnQzZChsaWdodENlbnRlcik7Ci0KLSAgICAgICAgc2F2ZUZvckxheWVyKGxheWVyTm9kZS0+Z2V0V2lkdGgoKSwgbGF5ZXJOb2RlLT5nZXRIZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICAgICAgICBsYXllckRhbWFnZSwgbGlnaHRDZW50ZXIsIG51bGxwdHIsIGxheWVyTm9kZSk7Ci0KLSAgICAgICAgaWYgKGxheWVyTm9kZS0+Z2V0RGlzcGxheUxpc3QoKSkgewotICAgICAgICAgICAgZGVmZXJOb2RlT3BzKCpsYXllck5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3RvcmVGb3JMYXllcigpOwotICAgIH0KLQotICAgIC8vIERlZmVyIEZibzAKLSAgICBmb3IgKGNvbnN0IHNwPFJlbmRlck5vZGU+JiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5vdGhpbmdUb0RyYXcoKSkgY29udGludWU7Ci0gICAgICAgIG5vZGUtPmNvbXB1dGVPcmRlcmluZygpOwotCi0gICAgICAgIGludCBjb3VudCA9IG1DYW52YXNTdGF0ZS5zYXZlKFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnKTsKLSAgICAgICAgZGVmZXJOb2RlUHJvcHNBbmRPcHMoKm5vZGUpOwotICAgICAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQoY291bnQpOwotICAgIH0KLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25WaWV3cG9ydEluaXRpYWxpemVkKCkge30KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHt9Ci0KLXZvaWQgT3BSZW9yZGVyZXI6OmRlZmVyTm9kZVByb3BzQW5kT3BzKFJlbmRlck5vZGUmIG5vZGUpIHsKLSAgICBjb25zdCBSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzID0gbm9kZS5wcm9wZXJ0aWVzKCk7Ci0gICAgY29uc3QgT3V0bGluZSYgb3V0bGluZSA9IHByb3BlcnRpZXMuZ2V0T3V0bGluZSgpOwotICAgIGlmIChwcm9wZXJ0aWVzLmdldEFscGhhKCkgPD0gMAotICAgICAgICAgICAgfHwgKG91dGxpbmUuZ2V0U2hvdWxkQ2xpcCgpICYmIG91dGxpbmUuaXNFbXB0eSgpKQotICAgICAgICAgICAgfHwgcHJvcGVydGllcy5nZXRTY2FsZVgoKSA9PSAwCi0gICAgICAgICAgICB8fCBwcm9wZXJ0aWVzLmdldFNjYWxlWSgpID09IDApIHsKLSAgICAgICAgcmV0dXJuOyAvLyByZWplY3RlZAotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0aWVzLmdldExlZnQoKSAhPSAwIHx8IHByb3BlcnRpZXMuZ2V0VG9wKCkgIT0gMCkgewotICAgICAgICBtQ2FudmFzU3RhdGUudHJhbnNsYXRlKHByb3BlcnRpZXMuZ2V0TGVmdCgpLCBwcm9wZXJ0aWVzLmdldFRvcCgpKTsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnRpZXMuZ2V0U3RhdGljTWF0cml4KCkpIHsKLSAgICAgICAgbUNhbnZhc1N0YXRlLmNvbmNhdE1hdHJpeCgqcHJvcGVydGllcy5nZXRTdGF0aWNNYXRyaXgoKSk7Ci0gICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmdldEFuaW1hdGlvbk1hdHJpeCgpKSB7Ci0gICAgICAgIG1DYW52YXNTdGF0ZS5jb25jYXRNYXRyaXgoKnByb3BlcnRpZXMuZ2V0QW5pbWF0aW9uTWF0cml4KCkpOwotICAgIH0KLSAgICBpZiAocHJvcGVydGllcy5oYXNUcmFuc2Zvcm1NYXRyaXgoKSkgewotICAgICAgICBpZiAocHJvcGVydGllcy5pc1RyYW5zZm9ybVRyYW5zbGF0ZU9ubHkoKSkgewotICAgICAgICAgICAgbUNhbnZhc1N0YXRlLnRyYW5zbGF0ZShwcm9wZXJ0aWVzLmdldFRyYW5zbGF0aW9uWCgpLCBwcm9wZXJ0aWVzLmdldFRyYW5zbGF0aW9uWSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1DYW52YXNTdGF0ZS5jb25jYXRNYXRyaXgoKnByb3BlcnRpZXMuZ2V0VHJhbnNmb3JtTWF0cml4KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgaW50IHdpZHRoID0gcHJvcGVydGllcy5nZXRXaWR0aCgpOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBwcm9wZXJ0aWVzLmdldEhlaWdodCgpOwotCi0gICAgUmVjdCBzYXZlTGF5ZXJCb3VuZHM7IC8vIHdpbGwgYmUgc2V0IHRvIG5vbi1lbXB0eSBpZiBzYXZlTGF5ZXIgbmVlZGVkCi0gICAgY29uc3QgYm9vbCBpc0xheWVyID0gcHJvcGVydGllcy5lZmZlY3RpdmVMYXllclR5cGUoKSAhPSBMYXllclR5cGU6Ok5vbmU7Ci0gICAgaW50IGNsaXBGbGFncyA9IHByb3BlcnRpZXMuZ2V0Q2xpcHBpbmdGbGFncygpOwotICAgIGlmIChwcm9wZXJ0aWVzLmdldEFscGhhKCkgPCAxKSB7Ci0gICAgICAgIGlmIChpc0xheWVyKSB7Ci0gICAgICAgICAgICBjbGlwRmxhZ3MgJj0gfkNMSVBfVE9fQk9VTkRTOyAvLyBib3VuZHMgY2xpcHBpbmcgZG9uZSBieSBsYXllcgotICAgICAgICB9Ci0gICAgICAgIGlmIChDQ19MSUtFTFkoaXNMYXllciB8fCAhcHJvcGVydGllcy5nZXRIYXNPdmVybGFwcGluZ1JlbmRlcmluZygpKSkgewotICAgICAgICAgICAgLy8gc2ltcGx5IHNjYWxlIHJlbmRlcmluZyBjb250ZW50J3MgYWxwaGEKLSAgICAgICAgICAgIG1DYW52YXNTdGF0ZS5zY2FsZUFscGhhKHByb3BlcnRpZXMuZ2V0QWxwaGEoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBzY2hlZHVsZSBzYXZlTGF5ZXIgYnkgaW5pdGlhbGl6aW5nIHNhdmVMYXllckJvdW5kcwotICAgICAgICAgICAgc2F2ZUxheWVyQm91bmRzLnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgICAgIGlmIChjbGlwRmxhZ3MpIHsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldENsaXBwaW5nUmVjdEZvckZsYWdzKGNsaXBGbGFncywgJnNhdmVMYXllckJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgY2xpcEZsYWdzID0gMDsgLy8gYWxsIGNsaXBwaW5nIGRvbmUgYnkgc2F2ZWxheWVyCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoQ0NfVU5MSUtFTFkoQVRSQUNFX0VOQUJMRUQoKSAmJiBwcm9wZXJ0aWVzLnByb21vdGVkVG9MYXllcigpKSkgewotICAgICAgICAgICAgLy8gcHJldGVuZCBhbHBoYSBhbHdheXMgY2F1c2VzIHNhdmVsYXllciB0byB3YXJuIGFib3V0Ci0gICAgICAgICAgICAvLyBwZXJmb3JtYW5jZSBwcm9ibGVtIGFmZmVjdGluZyBvbGQgdmVyc2lvbnMKLSAgICAgICAgICAgIEFUUkFDRV9GT1JNQVQoIiVzIGFscGhhIGNhdXNlZCBzYXZlTGF5ZXIgJWR4JWQiLCBub2RlLmdldE5hbWUoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGNsaXBGbGFncykgewotICAgICAgICBSZWN0IGNsaXBSZWN0OwotICAgICAgICBwcm9wZXJ0aWVzLmdldENsaXBwaW5nUmVjdEZvckZsYWdzKGNsaXBGbGFncywgJmNsaXBSZWN0KTsKLSAgICAgICAgbUNhbnZhc1N0YXRlLmNsaXBSZWN0KGNsaXBSZWN0LmxlZnQsIGNsaXBSZWN0LnRvcCwgY2xpcFJlY3QucmlnaHQsIGNsaXBSZWN0LmJvdHRvbSwKLSAgICAgICAgICAgICAgICBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnRpZXMuZ2V0UmV2ZWFsQ2xpcCgpLndpbGxDbGlwKCkpIHsKLSAgICAgICAgUmVjdCBib3VuZHM7Ci0gICAgICAgIHByb3BlcnRpZXMuZ2V0UmV2ZWFsQ2xpcCgpLmdldEJvdW5kcygmYm91bmRzKTsKLSAgICAgICAgbUNhbnZhc1N0YXRlLnNldENsaXBwaW5nUm91bmRSZWN0KG1BbGxvY2F0b3IsCi0gICAgICAgICAgICAgICAgYm91bmRzLCBwcm9wZXJ0aWVzLmdldFJldmVhbENsaXAoKS5nZXRSYWRpdXMoKSk7Ci0gICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmdldE91dGxpbmUoKS53aWxsQ2xpcCgpKSB7Ci0gICAgICAgIG1DYW52YXNTdGF0ZS5zZXRDbGlwcGluZ091dGxpbmUobUFsbG9jYXRvciwgJihwcm9wZXJ0aWVzLmdldE91dGxpbmUoKSkpOwotICAgIH0KLQotICAgIGlmICghbUNhbnZhc1N0YXRlLnF1aWNrUmVqZWN0Q29uc2VydmF0aXZlKDAsIDAsIHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgIC8vIG5vdCByZWplY3RlZCwgc28gZGVmZXIgcmVuZGVyIGFzIGVpdGhlciBMYXllciwgb3IgZGlyZWN0IChwb3NzaWJseSB3cmFwcGVkIGluIHNhdmVMYXllcikKLSAgICAgICAgaWYgKG5vZGUuZ2V0TGF5ZXIoKSkgewotICAgICAgICAgICAgLy8gSFcgbGF5ZXIKLSAgICAgICAgICAgIExheWVyT3AqIGRyYXdMYXllck9wID0gbmV3IChtQWxsb2NhdG9yKSBMYXllck9wKG5vZGUpOwotICAgICAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZE9wU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZSgqZHJhd0xheWVyT3ApOwotICAgICAgICAgICAgaWYgKGJha2VkT3BTdGF0ZSkgewotICAgICAgICAgICAgICAgIC8vIE5vZGUncyBsYXllciBhbHJlYWR5IGRlZmVycmVkLCBzY2hlZHVsZSBpdCB0byByZW5kZXIgaW50byBwYXJlbnQgbGF5ZXIKLSAgICAgICAgICAgICAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRPcFN0YXRlLCBPcEJhdGNoVHlwZTo6Qml0bWFwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChDQ19VTkxJS0VMWSghc2F2ZUxheWVyQm91bmRzLmlzRW1wdHkoKSkpIHsKLSAgICAgICAgICAgIC8vIGRyYXcgRGlzcGxheUxpc3QgY29udGVudHMgd2l0aGluIHRlbXBvcmFyeSwgc2luY2UgcGVyc2lzdGVkIGxheWVyIGNvdWxkIG5vdCBiZSB1c2VkLgotICAgICAgICAgICAgLy8gKHRlbXAgbGF5ZXJzIGFyZSBjbGlwcGVkIHRvIHZpZXdwb3J0LCBzaW5jZSB0aGV5IGRvbid0IHBlcnNpc3Qgb2Zmc2NyZWVuIGNvbnRlbnQpCi0gICAgICAgICAgICBTa1BhaW50IHNhdmVMYXllclBhaW50OwotICAgICAgICAgICAgc2F2ZUxheWVyUGFpbnQuc2V0QWxwaGEocHJvcGVydGllcy5nZXRBbHBoYSgpKTsKLSAgICAgICAgICAgIG9uQmVnaW5MYXllck9wKCpuZXcgKG1BbGxvY2F0b3IpIEJlZ2luTGF5ZXJPcCgKLSAgICAgICAgICAgICAgICAgICAgc2F2ZUxheWVyQm91bmRzLAotICAgICAgICAgICAgICAgICAgICBNYXRyaXg0OjppZGVudGl0eSgpLAotICAgICAgICAgICAgICAgICAgICBzYXZlTGF5ZXJCb3VuZHMsCi0gICAgICAgICAgICAgICAgICAgICZzYXZlTGF5ZXJQYWludCkpOwotICAgICAgICAgICAgZGVmZXJOb2RlT3BzKG5vZGUpOwotICAgICAgICAgICAgb25FbmRMYXllck9wKCpuZXcgKG1BbGxvY2F0b3IpIEVuZExheWVyT3AoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZWZlck5vZGVPcHMobm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXR5cGVkZWYga2V5X3ZhbHVlX3BhaXJfdDxmbG9hdCwgY29uc3QgUmVuZGVyTm9kZU9wKj4gWlJlbmRlck5vZGVPcFBhaXI7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBWPgotc3RhdGljIHZvaWQgYnVpbGRaU29ydGVkQ2hpbGRMaXN0KFYqIHpUcmFuc2xhdGVkTm9kZXMsCi0gICAgICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRGlzcGxheUxpc3Q6OkNodW5rJiBjaHVuaykgewotICAgIGlmIChjaHVuay5iZWdpbkNoaWxkSW5kZXggPT0gY2h1bmsuZW5kQ2hpbGRJbmRleCkgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IGNodW5rLmJlZ2luQ2hpbGRJbmRleDsgaSA8IGNodW5rLmVuZENoaWxkSW5kZXg7IGkrKykgewotICAgICAgICBSZW5kZXJOb2RlT3AqIGNoaWxkT3AgPSBkaXNwbGF5TGlzdC5nZXRDaGlsZHJlbigpW2ldOwotICAgICAgICBSZW5kZXJOb2RlKiBjaGlsZCA9IGNoaWxkT3AtPnJlbmRlck5vZGU7Ci0gICAgICAgIGZsb2F0IGNoaWxkWiA9IGNoaWxkLT5wcm9wZXJ0aWVzKCkuZ2V0WigpOwotCi0gICAgICAgIGlmICghTWF0aFV0aWxzOjppc1plcm8oY2hpbGRaKSAmJiBjaHVuay5yZW9yZGVyQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHpUcmFuc2xhdGVkTm9kZXMtPnB1c2hfYmFjayhaUmVuZGVyTm9kZU9wUGFpcihjaGlsZFosIGNoaWxkT3ApKTsKLSAgICAgICAgICAgIGNoaWxkT3AtPnNraXBJbk9yZGVyRHJhdyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNoaWxkLT5wcm9wZXJ0aWVzKCkuZ2V0UHJvamVjdEJhY2t3YXJkcygpKSB7Ci0gICAgICAgICAgICAvLyByZWd1bGFyLCBpbiBvcmRlciBkcmF3aW5nIERpc3BsYXlMaXN0Ci0gICAgICAgICAgICBjaGlsZE9wLT5za2lwSW5PcmRlckRyYXcgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFogc29ydCBhbnkgM2QgY2hpbGRyZW4gKHN0YWJsZS1uZXNzIG1ha2VzIHogY29tcGFyZSBmYWxsIGJhY2sgdG8gc3RhbmRhcmQgZHJhd2luZyBvcmRlcikKLSAgICBzdGQ6OnN0YWJsZV9zb3J0KHpUcmFuc2xhdGVkTm9kZXMtPmJlZ2luKCksIHpUcmFuc2xhdGVkTm9kZXMtPmVuZCgpKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFY+Ci1zdGF0aWMgc2l6ZV90IGZpbmROb25OZWdhdGl2ZUluZGV4KGNvbnN0IFYmIHpUcmFuc2xhdGVkTm9kZXMpIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHpUcmFuc2xhdGVkTm9kZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKHpUcmFuc2xhdGVkTm9kZXNbaV0ua2V5ID49IDAuMGYpIHJldHVybiBpOwotICAgIH0KLSAgICByZXR1cm4gelRyYW5zbGF0ZWROb2Rlcy5zaXplKCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBWPgotdm9pZCBPcFJlb3JkZXJlcjo6ZGVmZXIzZENoaWxkcmVuKENoaWxkcmVuU2VsZWN0TW9kZSBtb2RlLCBjb25zdCBWJiB6VHJhbnNsYXRlZE5vZGVzKSB7Ci0gICAgY29uc3QgaW50IHNpemUgPSB6VHJhbnNsYXRlZE5vZGVzLnNpemUoKTsKLSAgICBpZiAoc2l6ZSA9PSAwCi0gICAgICAgICAgICB8fCAobW9kZSA9PSBDaGlsZHJlblNlbGVjdE1vZGU6Ok5lZ2F0aXZlJiYgelRyYW5zbGF0ZWROb2Rlc1swXS5rZXkgPiAwLjBmKQotICAgICAgICAgICAgfHwgKG1vZGUgPT0gQ2hpbGRyZW5TZWxlY3RNb2RlOjpQb3NpdGl2ZSAmJiB6VHJhbnNsYXRlZE5vZGVzW3NpemUgLSAxXS5rZXkgPCAwLjBmKSkgewotICAgICAgICAvLyBubyAzZCBjaGlsZHJlbiB0byBkcmF3Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEcmF3IHNoYWRvd3MgYW5kIChwb3RlbnRpYWwpIGNhc3RlcnMgbW9zdGx5IGluIG9yZGVyLCBidXQgYWxsb3cgdGhlIHNoYWRvd3Mgb2YgY2FzdGVycwotICAgICAqIHdpdGggdmVyeSBzaW1pbGFyIFogaGVpZ2h0cyB0byBkcmF3IHRvZ2V0aGVyLgotICAgICAqCi0gICAgICogVGhpcyB3YXksIGlmIFZpZXdzIEEgJiBCIGhhdmUgdGhlIHNhbWUgWiBoZWlnaHQgYW5kIGFyZSBib3RoIGNhc3Rpbmcgc2hhZG93cywgdGhlIHNoYWRvd3MgYXJlCi0gICAgICogdW5kZXJuZWF0aCBib3RoLCBhbmQgbmVpdGhlcidzIHNoYWRvdyBpcyBkcmF3biBvbiB0b3Agb2YgdGhlIG90aGVyLgotICAgICAqLwotICAgIGNvbnN0IHNpemVfdCBub25OZWdhdGl2ZUluZGV4ID0gZmluZE5vbk5lZ2F0aXZlSW5kZXgoelRyYW5zbGF0ZWROb2Rlcyk7Ci0gICAgc2l6ZV90IGRyYXdJbmRleCwgc2hhZG93SW5kZXgsIGVuZEluZGV4OwotICAgIGlmIChtb2RlID09IENoaWxkcmVuU2VsZWN0TW9kZTo6TmVnYXRpdmUpIHsKLSAgICAgICAgZHJhd0luZGV4ID0gMDsKLSAgICAgICAgZW5kSW5kZXggPSBub25OZWdhdGl2ZUluZGV4OwotICAgICAgICBzaGFkb3dJbmRleCA9IGVuZEluZGV4OyAvLyBkcmF3IG5vIHNoYWRvd3MKLSAgICB9IGVsc2UgewotICAgICAgICBkcmF3SW5kZXggPSBub25OZWdhdGl2ZUluZGV4OwotICAgICAgICBlbmRJbmRleCA9IHNpemU7Ci0gICAgICAgIHNoYWRvd0luZGV4ID0gZHJhd0luZGV4OyAvLyBwb3RlbnRpYWxseSBkcmF3IHNoYWRvdyBmb3IgZWFjaCBwb3MgWiBjaGlsZAotICAgIH0KLQotICAgIGZsb2F0IGxhc3RDYXN0ZXJaID0gMC4wZjsKLSAgICB3aGlsZSAoc2hhZG93SW5kZXggPCBlbmRJbmRleCB8fCBkcmF3SW5kZXggPCBlbmRJbmRleCkgewotICAgICAgICBpZiAoc2hhZG93SW5kZXggPCBlbmRJbmRleCkgewotICAgICAgICAgICAgY29uc3QgUmVuZGVyTm9kZU9wKiBjYXN0ZXJOb2RlT3AgPSB6VHJhbnNsYXRlZE5vZGVzW3NoYWRvd0luZGV4XS52YWx1ZTsKLSAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNhc3RlclogPSB6VHJhbnNsYXRlZE5vZGVzW3NoYWRvd0luZGV4XS5rZXk7Ci0gICAgICAgICAgICAvLyBhdHRlbXB0IHRvIHJlbmRlciB0aGUgc2hhZG93IGlmIHRoZSBjYXN0ZXIgYWJvdXQgdG8gYmUgZHJhd24gaXMgaXRzIGNhc3RlciwKLSAgICAgICAgICAgIC8vIE9SIGlmIGl0cyBjYXN0ZXIncyBaIHZhbHVlIGlzIHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIHBvdGVudGlhbCBjYXN0ZXIKLSAgICAgICAgICAgIGlmIChzaGFkb3dJbmRleCA9PSBkcmF3SW5kZXggfHwgY2FzdGVyWiAtIGxhc3RDYXN0ZXJaIDwgMC4xZikgewotICAgICAgICAgICAgICAgIGRlZmVyU2hhZG93KCpjYXN0ZXJOb2RlT3ApOwotCi0gICAgICAgICAgICAgICAgbGFzdENhc3RlclogPSBjYXN0ZXJaOyAvLyBtdXN0IGRvIHRoaXMgZXZlbiBpZiBjdXJyZW50IGNhc3RlciBub3QgY2FzdGluZyBhIHNoYWRvdwotICAgICAgICAgICAgICAgIHNoYWRvd0luZGV4Kys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBSZW5kZXJOb2RlT3AqIGNoaWxkT3AgPSB6VHJhbnNsYXRlZE5vZGVzW2RyYXdJbmRleF0udmFsdWU7Ci0gICAgICAgIGRlZmVyUmVuZGVyTm9kZU9wKCpjaGlsZE9wKTsKLSAgICAgICAgZHJhd0luZGV4Kys7Ci0gICAgfQotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpkZWZlclNoYWRvdyhjb25zdCBSZW5kZXJOb2RlT3AmIGNhc3Rlck5vZGVPcCkgewotICAgIGF1dG8mIG5vZGUgPSAqY2FzdGVyTm9kZU9wLnJlbmRlck5vZGU7Ci0gICAgYXV0byYgcHJvcGVydGllcyA9IG5vZGUucHJvcGVydGllcygpOwotCi0gICAgaWYgKHByb3BlcnRpZXMuZ2V0QWxwaGEoKSA8PSAwLjBmCi0gICAgICAgICAgICB8fCBwcm9wZXJ0aWVzLmdldE91dGxpbmUoKS5nZXRBbHBoYSgpIDw9IDAuMGYKLSAgICAgICAgICAgIHx8ICFwcm9wZXJ0aWVzLmdldE91dGxpbmUoKS5nZXRQYXRoKCkKLSAgICAgICAgICAgIHx8IHByb3BlcnRpZXMuZ2V0U2NhbGVYKCkgPT0gMAotICAgICAgICAgICAgfHwgcHJvcGVydGllcy5nZXRTY2FsZVkoKSA9PSAwKSB7Ci0gICAgICAgIC8vIG5vIHNoYWRvdyB0byBkcmF3Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb25zdCBTa1BhdGgqIGNhc3Rlck91dGxpbmVQYXRoID0gcHJvcGVydGllcy5nZXRPdXRsaW5lKCkuZ2V0UGF0aCgpOwotICAgIGNvbnN0IFNrUGF0aCogcmV2ZWFsQ2xpcFBhdGggPSBwcm9wZXJ0aWVzLmdldFJldmVhbENsaXAoKS5nZXRQYXRoKCk7Ci0gICAgaWYgKHJldmVhbENsaXBQYXRoICYmIHJldmVhbENsaXBQYXRoLT5pc0VtcHR5KCkpIHJldHVybjsKLQotICAgIGZsb2F0IGNhc3RlckFscGhhID0gcHJvcGVydGllcy5nZXRBbHBoYSgpICogcHJvcGVydGllcy5nZXRPdXRsaW5lKCkuZ2V0QWxwaGEoKTsKLQotICAgIC8vIGhvbGRzIHRlbXBvcmFyeSBTa1BhdGggdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBpbnRlcnNlY3Rpb25zCi0gICAgU2tQYXRoKiBmcmFtZUFsbG9jYXRlZFBhdGggPSBudWxscHRyOwotICAgIGNvbnN0IFNrUGF0aCogY2FzdGVyUGF0aCA9IGNhc3Rlck91dGxpbmVQYXRoOwotCi0gICAgLy8gaW50ZXJzZWN0IHRoZSBzaGFkb3ctY2FzdGluZyBwYXRoIHdpdGggdGhlIHJldmVhbCwgaWYgcHJlc2VudAotICAgIGlmIChyZXZlYWxDbGlwUGF0aCkgewotICAgICAgICBmcmFtZUFsbG9jYXRlZFBhdGggPSBjcmVhdGVGcmFtZUFsbG9jYXRlZFBhdGgoKTsKLQotICAgICAgICBPcCgqY2FzdGVyUGF0aCwgKnJldmVhbENsaXBQYXRoLCBrSW50ZXJzZWN0X1NrUGF0aE9wLCBmcmFtZUFsbG9jYXRlZFBhdGgpOwotICAgICAgICBjYXN0ZXJQYXRoID0gZnJhbWVBbGxvY2F0ZWRQYXRoOwotICAgIH0KLQotICAgIC8vIGludGVyc2VjdCB0aGUgc2hhZG93LWNhc3RpbmcgcGF0aCB3aXRoIHRoZSBjbGlwQm91bmRzLCBpZiBwcmVzZW50Ci0gICAgaWYgKHByb3BlcnRpZXMuZ2V0Q2xpcHBpbmdGbGFncygpICYgQ0xJUF9UT19DTElQX0JPVU5EUykgewotICAgICAgICBpZiAoIWZyYW1lQWxsb2NhdGVkUGF0aCkgewotICAgICAgICAgICAgZnJhbWVBbGxvY2F0ZWRQYXRoID0gY3JlYXRlRnJhbWVBbGxvY2F0ZWRQYXRoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgUmVjdCBjbGlwQm91bmRzOwotICAgICAgICBwcm9wZXJ0aWVzLmdldENsaXBwaW5nUmVjdEZvckZsYWdzKENMSVBfVE9fQ0xJUF9CT1VORFMsICZjbGlwQm91bmRzKTsKLSAgICAgICAgU2tQYXRoIGNsaXBCb3VuZHNQYXRoOwotICAgICAgICBjbGlwQm91bmRzUGF0aC5hZGRSZWN0KGNsaXBCb3VuZHMubGVmdCwgY2xpcEJvdW5kcy50b3AsCi0gICAgICAgICAgICAgICAgY2xpcEJvdW5kcy5yaWdodCwgY2xpcEJvdW5kcy5ib3R0b20pOwotCi0gICAgICAgIE9wKCpjYXN0ZXJQYXRoLCBjbGlwQm91bmRzUGF0aCwga0ludGVyc2VjdF9Ta1BhdGhPcCwgZnJhbWVBbGxvY2F0ZWRQYXRoKTsKLSAgICAgICAgY2FzdGVyUGF0aCA9IGZyYW1lQWxsb2NhdGVkUGF0aDsKLSAgICB9Ci0KLSAgICBTaGFkb3dPcCogc2hhZG93T3AgPSBuZXcgKG1BbGxvY2F0b3IpIFNoYWRvd09wKGNhc3Rlck5vZGVPcCwgY2FzdGVyQWxwaGEsIGNhc3RlclBhdGgsCi0gICAgICAgICAgICBtQ2FudmFzU3RhdGUuZ2V0TG9jYWxDbGlwQm91bmRzKCksCi0gICAgICAgICAgICBtQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCktPmdldFJlbGF0aXZlTGlnaHRDZW50ZXIoKSk7Ci0gICAgQmFrZWRPcFN0YXRlKiBiYWtlZE9wU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVNoYWRvd09wQ29uc3RydWN0KAotICAgICAgICAgICAgbUFsbG9jYXRvciwgKm1DYW52YXNTdGF0ZS5jdXJyZW50U25hcHNob3QoKSwgc2hhZG93T3ApOwotICAgIGlmIChDQ19MSUtFTFkoYmFrZWRPcFN0YXRlKSkgewotICAgICAgICBjdXJyZW50TGF5ZXIoKS5kZWZlclVubWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRPcFN0YXRlLCBPcEJhdGNoVHlwZTo6U2hhZG93KTsKLSAgICB9Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6OmRlZmVyUHJvamVjdGVkQ2hpbGRyZW4oY29uc3QgUmVuZGVyTm9kZSYgcmVuZGVyTm9kZSkgewotICAgIGNvbnN0IFNrUGF0aCogcHJvamVjdGlvblJlY2VpdmVyT3V0bGluZSA9IHJlbmRlck5vZGUucHJvcGVydGllcygpLmdldE91dGxpbmUoKS5nZXRQYXRoKCk7Ci0gICAgaW50IGNvdW50ID0gbUNhbnZhc1N0YXRlLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcpOwotCi0gICAgLy8gY2FuJ3QgYmUgbnVsbCwgc2luY2UgREw9bnVsbCBub2RlIHJlamVjdGlvbiBoYXBwZW5zIGJlZm9yZSBkZWZlck5vZGVQcm9wc0FuZE9wcwotICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCA9ICoocmVuZGVyTm9kZS5nZXREaXNwbGF5TGlzdCgpKTsKLQotICAgIGNvbnN0IFJlY29yZGVkT3AqIG9wID0gKGRpc3BsYXlMaXN0LmdldE9wcygpW2Rpc3BsYXlMaXN0LnByb2plY3Rpb25SZWNlaXZlSW5kZXhdKTsKLSAgICBjb25zdCBSZW5kZXJOb2RlT3AqIGJhY2tncm91bmRPcCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlck5vZGVPcCo+KG9wKTsKLSAgICBjb25zdCBSZW5kZXJQcm9wZXJ0aWVzJiBiYWNrZ3JvdW5kUHJvcHMgPSBiYWNrZ3JvdW5kT3AtPnJlbmRlck5vZGUtPnByb3BlcnRpZXMoKTsKLQotICAgIC8vIFRyYW5zZm9ybSByZW5kZXJlciB0byBtYXRjaCBiYWNrZ3JvdW5kIHdlJ3JlIHByb2plY3Rpbmcgb250bwotICAgIC8vIChieSBvZmZzZXR0aW5nIGNhbnZhcyBieSB0cmFuc2xhdGlvblgvWSBvZiBiYWNrZ3JvdW5kIHJlbmRlcm5vZGUsIHNpbmNlIG9ubHkgdGhvc2UgYXJlIHNldCkKLSAgICBtQ2FudmFzU3RhdGUudHJhbnNsYXRlKGJhY2tncm91bmRQcm9wcy5nZXRUcmFuc2xhdGlvblgoKSwgYmFja2dyb3VuZFByb3BzLmdldFRyYW5zbGF0aW9uWSgpKTsKLQotICAgIC8vIElmIHRoZSBwcm9qZWN0aW9uIHJlY2VpdmVyIGhhcyBhbiBvdXRsaW5lLCB3ZSBtYXNrIHByb2plY3RlZCBjb250ZW50IHRvIGl0Ci0gICAgLy8gKHdoaWNoIHdlIGtub3csIGFwcmlvcmksIGFyZSBhbGwgdGVzc2VsbGF0ZWQgcGF0aHMpCi0gICAgbUNhbnZhc1N0YXRlLnNldFByb2plY3Rpb25QYXRoTWFzayhtQWxsb2NhdG9yLCBwcm9qZWN0aW9uUmVjZWl2ZXJPdXRsaW5lKTsKLQotICAgIC8vIGRyYXcgcHJvamVjdGVkIG5vZGVzCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5kZXJOb2RlLm1Qcm9qZWN0ZWROb2Rlcy5zaXplKCk7IGkrKykgewotICAgICAgICBSZW5kZXJOb2RlT3AqIGNoaWxkT3AgPSByZW5kZXJOb2RlLm1Qcm9qZWN0ZWROb2Rlc1tpXTsKLQotICAgICAgICBpbnQgcmVzdG9yZVRvID0gbUNhbnZhc1N0YXRlLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwotICAgICAgICBtQ2FudmFzU3RhdGUuY29uY2F0TWF0cml4KGNoaWxkT3AtPnRyYW5zZm9ybUZyb21Db21wb3NpdGluZ0FuY2VzdG9yKTsKLSAgICAgICAgZGVmZXJSZW5kZXJOb2RlT3AoKmNoaWxkT3ApOwotICAgICAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQocmVzdG9yZVRvKTsKLSAgICB9Ci0KLSAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQoY291bnQpOwotfQotCi0vKioKLSAqIFVzZWQgdG8gZGVmaW5lIGEgbGlzdCBvZiBsYW1iZGFzIHJlZmVyZW5jaW5nIHByaXZhdGUgT3BSZW9yZGVyZXI6Om9uWFhYWE9wKCkgbWV0aG9kcy4KLSAqCi0gKiBUaGlzIGFsbG93cyBvcElkcyBlbWJlZGRlZCBpbiB0aGUgUmVjb3JkZWRPcHMgdG8gYmUgdXNlZCBmb3IgZGlzcGF0Y2hpbmcgdG8gdGhlc2UgbGFtYmRhcy4KLSAqIEUuZy4gYSBCaXRtYXBPcCBvcCB0aGVuIHdvdWxkIGJlIGRpc3BhdGNoZWQgdG8gT3BSZW9yZGVyZXI6Om9uQml0bWFwT3AoY29uc3QgQml0bWFwT3AmKQotICovCi0jZGVmaW5lIE9QX1JFQ0VJVkVSKFR5cGUpIFwKLSAgICAgICAgW10oT3BSZW9yZGVyZXImIHJlb3JkZXJlciwgY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsgcmVvcmRlcmVyLm9uIyNUeXBlKHN0YXRpY19jYXN0PGNvbnN0IFR5cGUmPihvcCkpOyB9LAotdm9pZCBPcFJlb3JkZXJlcjo6ZGVmZXJOb2RlT3BzKGNvbnN0IFJlbmRlck5vZGUmIHJlbmRlck5vZGUpIHsKLSAgICB0eXBlZGVmIHZvaWQgKCpPcERpc3BhdGNoZXIpIChPcFJlb3JkZXJlciYgcmVvcmRlcmVyLCBjb25zdCBSZWNvcmRlZE9wJiBvcCk7Ci0gICAgc3RhdGljIE9wRGlzcGF0Y2hlciByZWNlaXZlcnNbXSA9IHsKLSAgICAgICAgTUFQX09QUyhPUF9SRUNFSVZFUikKLSAgICB9OwotCi0gICAgLy8gY2FuJ3QgYmUgbnVsbCwgc2luY2UgREw9bnVsbCBub2RlIHJlamVjdGlvbiBoYXBwZW5zIGJlZm9yZSBkZWZlck5vZGVQcm9wc0FuZE9wcwotICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCA9ICoocmVuZGVyTm9kZS5nZXREaXNwbGF5TGlzdCgpKTsKLSAgICBmb3IgKGNvbnN0IERpc3BsYXlMaXN0OjpDaHVuayYgY2h1bmsgOiBkaXNwbGF5TGlzdC5nZXRDaHVua3MoKSkgewotICAgICAgICBGYXRWZWN0b3I8WlJlbmRlck5vZGVPcFBhaXIsIDE2PiB6VHJhbnNsYXRlZE5vZGVzOwotICAgICAgICBidWlsZFpTb3J0ZWRDaGlsZExpc3QoJnpUcmFuc2xhdGVkTm9kZXMsIGRpc3BsYXlMaXN0LCBjaHVuayk7Ci0KLSAgICAgICAgZGVmZXIzZENoaWxkcmVuKENoaWxkcmVuU2VsZWN0TW9kZTo6TmVnYXRpdmUsIHpUcmFuc2xhdGVkTm9kZXMpOwotICAgICAgICBmb3IgKHNpemVfdCBvcEluZGV4ID0gY2h1bmsuYmVnaW5PcEluZGV4OyBvcEluZGV4IDwgY2h1bmsuZW5kT3BJbmRleDsgb3BJbmRleCsrKSB7Ci0gICAgICAgICAgICBjb25zdCBSZWNvcmRlZE9wKiBvcCA9IGRpc3BsYXlMaXN0LmdldE9wcygpW29wSW5kZXhdOwotICAgICAgICAgICAgcmVjZWl2ZXJzW29wLT5vcElkXSgqdGhpcywgKm9wKTsKLQotICAgICAgICAgICAgaWYgKENDX1VOTElLRUxZKCFyZW5kZXJOb2RlLm1Qcm9qZWN0ZWROb2Rlcy5lbXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICYmIGRpc3BsYXlMaXN0LnByb2plY3Rpb25SZWNlaXZlSW5kZXggPj0gMAotICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxpbnQ+KG9wSW5kZXgpID09IGRpc3BsYXlMaXN0LnByb2plY3Rpb25SZWNlaXZlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgZGVmZXJQcm9qZWN0ZWRDaGlsZHJlbihyZW5kZXJOb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBkZWZlcjNkQ2hpbGRyZW4oQ2hpbGRyZW5TZWxlY3RNb2RlOjpQb3NpdGl2ZSwgelRyYW5zbGF0ZWROb2Rlcyk7Ci0gICAgfQotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpkZWZlclJlbmRlck5vZGVPcChjb25zdCBSZW5kZXJOb2RlT3AmIG9wKSB7Ci0gICAgaWYgKG9wLnJlbmRlck5vZGUtPm5vdGhpbmdUb0RyYXcoKSkgcmV0dXJuOwotICAgIGludCBjb3VudCA9IG1DYW52YXNTdGF0ZS5zYXZlKFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyB8IFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnKTsKLQotICAgIC8vIGFwcGx5IHN0YXRlIGZyb20gUmVjb3JkZWRPcAotICAgIG1DYW52YXNTdGF0ZS5jb25jYXRNYXRyaXgob3AubG9jYWxNYXRyaXgpOwotICAgIG1DYW52YXNTdGF0ZS5jbGlwUmVjdChvcC5sb2NhbENsaXBSZWN0LmxlZnQsIG9wLmxvY2FsQ2xpcFJlY3QudG9wLAotICAgICAgICAgICAgb3AubG9jYWxDbGlwUmVjdC5yaWdodCwgb3AubG9jYWxDbGlwUmVjdC5ib3R0b20sIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKLQotICAgIC8vIHRoZW4gYXBwbHkgc3RhdGUgZnJvbSBub2RlIHByb3BlcnRpZXMsIGFuZCBkZWZlciBvcHMKLSAgICBkZWZlck5vZGVQcm9wc0FuZE9wcygqb3AucmVuZGVyTm9kZSk7Ci0KLSAgICBtQ2FudmFzU3RhdGUucmVzdG9yZVRvQ291bnQoY291bnQpOwotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpvblJlbmRlck5vZGVPcChjb25zdCBSZW5kZXJOb2RlT3AmIG9wKSB7Ci0gICAgaWYgKCFvcC5za2lwSW5PcmRlckRyYXcpIHsKLSAgICAgICAgZGVmZXJSZW5kZXJOb2RlT3Aob3ApOwotICAgIH0KLX0KLQotLyoqCi0gKiBEZWZlcnMgYW4gdW5tZXJnZWFibGUsIHN0cm9rZWFibGUgb3AsIGFjY291bnRpbmcgY29ycmVjdGx5Ci0gKiBmb3IgcGFpbnQncyBzdHlsZSBvbiB0aGUgYm91bmRzIGJlaW5nIGNvbXB1dGVkLgotICovCi12b2lkIE9wUmVvcmRlcmVyOjpvblN0cm9rZWFibGVPcChjb25zdCBSZWNvcmRlZE9wJiBvcCwgYmF0Y2hpZF90IGJhdGNoSWQsCi0gICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3Igc3Ryb2tlQmVoYXZpb3IpIHsKLSAgICAvLyBOb3RlOiBoZXJlIHdlIGFjY291bnQgZm9yIHN0cm9rZSB3aGVuIGJha2luZyB0aGUgb3AKLSAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVN0cm9rZWFibGVPcENvbnN0cnVjdCgKLSAgICAgICAgICAgIG1BbGxvY2F0b3IsICptQ2FudmFzU3RhdGUuY3VycmVudFNuYXBzaG90KCksIG9wLCBzdHJva2VCZWhhdmlvcik7Ci0gICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCi0gICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIGJhdGNoSWQpOwotfQotCi0vKioKLSAqIFJldHVybnMgYmF0Y2ggaWQgZm9yIHRlc3NlbGxhdGFibGUgc2hhcGVzLCBiYXNlZCBvbiBwYWludC4gQ2hlY2tzIHRvIHNlZSBpZiBwYXRoIGVmZmVjdC9BQSB3aWxsCi0gKiBiZSB1c2VkLCBzaW5jZSB0aGV5IHRyaWdnZXIgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgcmVuZGVyaW5nIHBhdGhzLgotICoKLSAqIE5vdGU6IG5vdCB1c2VkIGZvciBsaW5lcy9wb2ludHMsIHNpbmNlIHRoZXkgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgcGF0aCBlZmZlY3RzLgotICovCi1zdGF0aWMgYmF0Y2hpZF90IHRlc3NCYXRjaElkKGNvbnN0IFJlY29yZGVkT3AmIG9wKSB7Ci0gICAgY29uc3QgU2tQYWludCYgcGFpbnQgPSAqKG9wLnBhaW50KTsKLSAgICByZXR1cm4gcGFpbnQuZ2V0UGF0aEVmZmVjdCgpCi0gICAgICAgICAgICA/IE9wQmF0Y2hUeXBlOjpBbHBoYU1hc2tUZXh0dXJlCi0gICAgICAgICAgICA6IChwYWludC5pc0FudGlBbGlhcygpID8gT3BCYXRjaFR5cGU6OkFscGhhVmVydGljZXMgOiBPcEJhdGNoVHlwZTo6VmVydGljZXMpOwotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpvbkFyY09wKGNvbnN0IEFyY09wJiBvcCkgewotICAgIG9uU3Ryb2tlYWJsZU9wKG9wLCB0ZXNzQmF0Y2hJZChvcCkpOwotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpvbkJpdG1hcE9wKGNvbnN0IEJpdG1hcE9wJiBvcCkgewotICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IHRyeUJha2VPcFN0YXRlKG9wKTsKLSAgICBpZiAoIWJha2VkU3RhdGUpIHJldHVybjsgLy8gcXVpY2sgcmVqZWN0ZWQKLQotICAgIC8vIERvbid0IG1lcmdlIG5vbi1zaW1wbHkgdHJhbnNmb3JtZWQgb3IgbmVnIHNjYWxlIG9wcywgU0VUX1RFWFRVUkUgZG9lc24ndCBoYW5kbGUgcm90YXRpb24KLSAgICAvLyBEb24ndCBtZXJnZSBBOCBiaXRtYXBzIC0gdGhlIHBhaW50J3MgY29sb3IgaXNuJ3QgY29tcGFyZWQgYnkgbWVyZ2VJZCwgb3IgaW4KLSAgICAvLyBNZXJnaW5nRHJhd0JhdGNoOjpjYW5NZXJnZVdpdGgoKQotICAgIGlmIChiYWtlZFN0YXRlLT5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybS5pc1NpbXBsZSgpCi0gICAgICAgICAgICAmJiBiYWtlZFN0YXRlLT5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybS5wb3NpdGl2ZVNjYWxlKCkKLSAgICAgICAgICAgICYmIFBhaW50VXRpbHM6OmdldFhmZXJtb2RlRGlyZWN0KG9wLnBhaW50KSA9PSBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlCi0gICAgICAgICAgICAmJiBvcC5iaXRtYXAtPmNvbG9yVHlwZSgpICE9IGtBbHBoYV84X1NrQ29sb3JUeXBlKSB7Ci0gICAgICAgIG1lcmdlaWRfdCBtZXJnZUlkID0gKG1lcmdlaWRfdCkgb3AuYml0bWFwLT5nZXRHZW5lcmF0aW9uSUQoKTsKLSAgICAgICAgLy8gVE9ETzogQXNzZXRBdGxhcyBpbiBtZXJnZUlkCi0gICAgICAgIGN1cnJlbnRMYXllcigpLmRlZmVyTWVyZ2VhYmxlT3AobUFsbG9jYXRvciwgYmFrZWRTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCwgbWVyZ2VJZCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIE9wQmF0Y2hUeXBlOjpCaXRtYXApOwotICAgIH0KLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25MaW5lc09wKGNvbnN0IExpbmVzT3AmIG9wKSB7Ci0gICAgYmF0Y2hpZF90IGJhdGNoID0gb3AucGFpbnQtPmlzQW50aUFsaWFzKCkgPyBPcEJhdGNoVHlwZTo6QWxwaGFWZXJ0aWNlcyA6IE9wQmF0Y2hUeXBlOjpWZXJ0aWNlczsKLSAgICBvblN0cm9rZWFibGVPcChvcCwgYmF0Y2gsIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OkZvcmNlZCk7Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6Om9uT3ZhbE9wKGNvbnN0IE92YWxPcCYgb3ApIHsKLSAgICBvblN0cm9rZWFibGVPcChvcCwgdGVzc0JhdGNoSWQob3ApKTsKLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25QYXRoT3AoY29uc3QgUGF0aE9wJiBvcCkgewotICAgIG9uU3Ryb2tlYWJsZU9wKG9wLCBPcEJhdGNoVHlwZTo6Qml0bWFwKTsKLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25Qb2ludHNPcChjb25zdCBQb2ludHNPcCYgb3ApIHsKLSAgICBiYXRjaGlkX3QgYmF0Y2ggPSBvcC5wYWludC0+aXNBbnRpQWxpYXMoKSA/IE9wQmF0Y2hUeXBlOjpBbHBoYVZlcnRpY2VzIDogT3BCYXRjaFR5cGU6OlZlcnRpY2VzOwotICAgIG9uU3Ryb2tlYWJsZU9wKG9wLCBiYXRjaCwgQmFrZWRPcFN0YXRlOjpTdHJva2VCZWhhdmlvcjo6Rm9yY2VkKTsKLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6b25SZWN0T3AoY29uc3QgUmVjdE9wJiBvcCkgewotICAgIG9uU3Ryb2tlYWJsZU9wKG9wLCB0ZXNzQmF0Y2hJZChvcCkpOwotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpvblJvdW5kUmVjdE9wKGNvbnN0IFJvdW5kUmVjdE9wJiBvcCkgewotICAgIG9uU3Ryb2tlYWJsZU9wKG9wLCB0ZXNzQmF0Y2hJZChvcCkpOwotfQotCi12b2lkIE9wUmVvcmRlcmVyOjpvblNpbXBsZVJlY3RzT3AoY29uc3QgU2ltcGxlUmVjdHNPcCYgb3ApIHsKLSAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZShvcCk7Ci0gICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCi0gICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIE9wQmF0Y2hUeXBlOjpWZXJ0aWNlcyk7Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6Om9uVGV4dE9wKGNvbnN0IFRleHRPcCYgb3ApIHsKLSAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSB0cnlCYWtlT3BTdGF0ZShvcCk7Ci0gICAgaWYgKCFiYWtlZFN0YXRlKSByZXR1cm47IC8vIHF1aWNrIHJlamVjdGVkCi0KLSAgICAvLyBUT0RPOiBiZXR0ZXIgaGFuZGxpbmcgb2Ygc2hhZGVyIChzaW5jZSB3ZSB3b24ndCBjYXJlIGFib3V0IGNvbG9yIHRoZW4pCi0gICAgYmF0Y2hpZF90IGJhdGNoSWQgPSBvcC5wYWludC0+Z2V0Q29sb3IoKSA9PSBTS19Db2xvckJMQUNLCi0gICAgICAgICAgICA/IE9wQmF0Y2hUeXBlOjpUZXh0IDogT3BCYXRjaFR5cGU6OkNvbG9yVGV4dDsKLQotICAgIGlmIChiYWtlZFN0YXRlLT5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybS5pc1B1cmVUcmFuc2xhdGUoKQotICAgICAgICAgICAgJiYgUGFpbnRVdGlsczo6Z2V0WGZlcm1vZGVEaXJlY3Qob3AucGFpbnQpID09IFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpIHsKLSAgICAgICAgbWVyZ2VpZF90IG1lcmdlSWQgPSByZWludGVycHJldF9jYXN0PG1lcmdlaWRfdD4ob3AucGFpbnQtPmdldENvbG9yKCkpOwotICAgICAgICBjdXJyZW50TGF5ZXIoKS5kZWZlck1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkU3RhdGUsIGJhdGNoSWQsIG1lcmdlSWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGN1cnJlbnRMYXllcigpLmRlZmVyVW5tZXJnZWFibGVPcChtQWxsb2NhdG9yLCBiYWtlZFN0YXRlLCBiYXRjaElkKTsKLSAgICB9Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6OnNhdmVGb3JMYXllcih1aW50MzJfdCBsYXllcldpZHRoLCB1aW50MzJfdCBsYXllckhlaWdodCwKLSAgICAgICAgZmxvYXQgY29udGVudFRyYW5zbGF0ZVgsIGZsb2F0IGNvbnRlbnRUcmFuc2xhdGVZLAotICAgICAgICBjb25zdCBSZWN0JiByZXBhaW50UmVjdCwKLSAgICAgICAgY29uc3QgVmVjdG9yMyYgbGlnaHRDZW50ZXIsCi0gICAgICAgIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wLCBSZW5kZXJOb2RlKiByZW5kZXJOb2RlKSB7Ci0gICAgbUNhbnZhc1N0YXRlLnNhdmUoU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnIHwgU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcpOwotICAgIG1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPmluaXRpYWxpemVWaWV3cG9ydChsYXllcldpZHRoLCBsYXllckhlaWdodCk7Ci0gICAgbUNhbnZhc1N0YXRlLndyaXRhYmxlU25hcHNob3QoKS0+cm91bmRSZWN0Q2xpcFN0YXRlID0gbnVsbHB0cjsKLSAgICBtQ2FudmFzU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpLT5zZXRSZWxhdGl2ZUxpZ2h0Q2VudGVyKGxpZ2h0Q2VudGVyKTsKLSAgICBtQ2FudmFzU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpLT50cmFuc2Zvcm0tPmxvYWRUcmFuc2xhdGUoCi0gICAgICAgICAgICBjb250ZW50VHJhbnNsYXRlWCwgY29udGVudFRyYW5zbGF0ZVksIDApOwotICAgIG1DYW52YXNTdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPnNldENsaXAoCi0gICAgICAgICAgICByZXBhaW50UmVjdC5sZWZ0LCByZXBhaW50UmVjdC50b3AsIHJlcGFpbnRSZWN0LnJpZ2h0LCByZXBhaW50UmVjdC5ib3R0b20pOwotCi0gICAgLy8gY3JlYXRlIGEgbmV3IGxheWVyIHJlcGFpbnQsIGFuZCBwdXNoIGl0cyBpbmRleCBvbiB0aGUgc3RhY2sKLSAgICBtTGF5ZXJTdGFjay5wdXNoX2JhY2sobUxheWVyUmVvcmRlcmVycy5zaXplKCkpOwotICAgIG1MYXllclJlb3JkZXJlcnMuZW1wbGFjZV9iYWNrKGxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCByZXBhaW50UmVjdCwgYmVnaW5MYXllck9wLCByZW5kZXJOb2RlKTsKLX0KLQotdm9pZCBPcFJlb3JkZXJlcjo6cmVzdG9yZUZvckxheWVyKCkgewotICAgIC8vIHJlc3RvcmUgY2FudmFzLCBhbmQgcG9wIGZpbmlzaGVkIGxheWVyIG9mZiBvZiB0aGUgc3RhY2sKLSAgICBtQ2FudmFzU3RhdGUucmVzdG9yZSgpOwotICAgIG1MYXllclN0YWNrLnBvcF9iYWNrKCk7Ci19Ci0KLS8vIFRPRE86IHRlc3QgcmVqZWN0aW9uIGF0IGRlZmVyIHRpbWUsIHdoZXJlIHRoZSBib3VuZHMgYmVjb21lIGVtcHR5Ci12b2lkIE9wUmVvcmRlcmVyOjpvbkJlZ2luTGF5ZXJPcChjb25zdCBCZWdpbkxheWVyT3AmIG9wKSB7Ci0gICAgdWludDMyX3QgbGF5ZXJXaWR0aCA9ICh1aW50MzJfdCkgb3AudW5tYXBwZWRCb3VuZHMuZ2V0V2lkdGgoKTsKLSAgICB1aW50MzJfdCBsYXllckhlaWdodCA9ICh1aW50MzJfdCkgb3AudW5tYXBwZWRCb3VuZHMuZ2V0SGVpZ2h0KCk7Ci0KLSAgICBhdXRvIHByZXZpb3VzID0gbUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpOwotICAgIFZlY3RvcjMgbGlnaHRDZW50ZXIgPSBwcmV2aW91cy0+Z2V0UmVsYXRpdmVMaWdodENlbnRlcigpOwotCi0gICAgLy8gQ29tYmluZSBhbGwgdHJhbnNmb3JtcyB1c2VkIHRvIHByZXNlbnQgc2F2ZUxheWVyIGNvbnRlbnQ6Ci0gICAgLy8gcGFyZW50IGNvbnRlbnQgdHJhbnNmb3JtICogY2FudmFzIHRyYW5zZm9ybSAqIGJvdW5kcyBvZmZzZXQKLSAgICBNYXRyaXg0IGNvbnRlbnRUcmFuc2Zvcm0oKnByZXZpb3VzLT50cmFuc2Zvcm0pOwotICAgIGNvbnRlbnRUcmFuc2Zvcm0ubXVsdGlwbHkob3AubG9jYWxNYXRyaXgpOwotICAgIGNvbnRlbnRUcmFuc2Zvcm0udHJhbnNsYXRlKG9wLnVubWFwcGVkQm91bmRzLmxlZnQsIG9wLnVubWFwcGVkQm91bmRzLnRvcCk7Ci0KLSAgICBNYXRyaXg0IGludmVyc2VDb250ZW50VHJhbnNmb3JtOwotICAgIGludmVyc2VDb250ZW50VHJhbnNmb3JtLmxvYWRJbnZlcnNlKGNvbnRlbnRUcmFuc2Zvcm0pOwotCi0gICAgLy8gbWFwIHRoZSBsaWdodCBjZW50ZXIgaW50byBsYXllci1yZWxhdGl2ZSBzcGFjZQotICAgIGludmVyc2VDb250ZW50VHJhbnNmb3JtLm1hcFBvaW50M2QobGlnaHRDZW50ZXIpOwotCi0gICAgLy8gQ2xpcCBib3VuZHMgb2YgdGVtcG9yYXJ5IGxheWVyIHRvIHBhcmVudCdzIGNsaXAgcmVjdCwgc286Ci0gICAgUmVjdCBzYXZlTGF5ZXJCb3VuZHMobGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQpOwotICAgIC8vICAgICAxKSB0cmFuc2Zvcm0gUmVjdCh3aWR0aCwgaGVpZ2h0KSBpbnRvIHBhcmVudCdzIHNwYWNlCi0gICAgLy8gICAgICAgIG5vdGU6IGxlZnQvdG9wIG9mZnNldHMgcHV0IGluIGNvbnRlbnRUcmFuc2Zvcm0gYWJvdmUKLSAgICBjb250ZW50VHJhbnNmb3JtLm1hcFJlY3Qoc2F2ZUxheWVyQm91bmRzKTsKLSAgICAvLyAgICAgMikgaW50ZXJzZWN0IHdpdGggcGFyZW50J3MgY2xpcAotICAgIHNhdmVMYXllckJvdW5kcy5kb0ludGVyc2VjdChwcmV2aW91cy0+Z2V0UmVuZGVyVGFyZ2V0Q2xpcCgpKTsKLSAgICAvLyAgICAgMykgYW5kIHRyYW5zZm9ybSBiYWNrCi0gICAgaW52ZXJzZUNvbnRlbnRUcmFuc2Zvcm0ubWFwUmVjdChzYXZlTGF5ZXJCb3VuZHMpOwotICAgIHNhdmVMYXllckJvdW5kcy5kb0ludGVyc2VjdChSZWN0KGxheWVyV2lkdGgsIGxheWVySGVpZ2h0KSk7Ci0gICAgc2F2ZUxheWVyQm91bmRzLnJvdW5kT3V0KCk7Ci0KLSAgICAvLyBpZiBib3VuZHMgYXJlIHJlZHVjZWQsIHdpbGwgY2xpcCB0aGUgbGF5ZXIncyBhcmVhIGJ5IHJlZHVjaW5nIHJlcXVpcmVkIGJvdW5kcy4uLgotICAgIGxheWVyV2lkdGggPSBzYXZlTGF5ZXJCb3VuZHMuZ2V0V2lkdGgoKTsKLSAgICBsYXllckhlaWdodCA9IHNhdmVMYXllckJvdW5kcy5nZXRIZWlnaHQoKTsKLSAgICAvLyAuLi5hbmQgc2hpZnRpbmcgZHJhd2luZyBjb250ZW50IHRvIGFjY291bnQgZm9yIGxlZnQvdG9wIHNpZGUgY2xpcHBpbmcKLSAgICBmbG9hdCBjb250ZW50VHJhbnNsYXRlWCA9IC1zYXZlTGF5ZXJCb3VuZHMubGVmdDsKLSAgICBmbG9hdCBjb250ZW50VHJhbnNsYXRlWSA9IC1zYXZlTGF5ZXJCb3VuZHMudG9wOwotCi0gICAgc2F2ZUZvckxheWVyKGxheWVyV2lkdGgsIGxheWVySGVpZ2h0LAotICAgICAgICAgICAgY29udGVudFRyYW5zbGF0ZVgsIGNvbnRlbnRUcmFuc2xhdGVZLAotICAgICAgICAgICAgUmVjdChsYXllcldpZHRoLCBsYXllckhlaWdodCksCi0gICAgICAgICAgICBsaWdodENlbnRlciwKLSAgICAgICAgICAgICZvcCwgbnVsbHB0cik7Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6Om9uRW5kTGF5ZXJPcChjb25zdCBFbmRMYXllck9wJiAvKiBpZ25vcmVkICovKSB7Ci0gICAgY29uc3QgQmVnaW5MYXllck9wJiBiZWdpbkxheWVyT3AgPSAqY3VycmVudExheWVyKCkuYmVnaW5MYXllck9wOwotICAgIGludCBmaW5pc2hlZExheWVySW5kZXggPSBtTGF5ZXJTdGFjay5iYWNrKCk7Ci0KLSAgICByZXN0b3JlRm9yTGF5ZXIoKTsKLQotICAgIC8vIHJlY29yZCB0aGUgZHJhdyBvcGVyYXRpb24gaW50byB0aGUgcHJldmlvdXMgbGF5ZXIncyBsaXN0IG9mIGRyYXcgY29tbWFuZHMKLSAgICAvLyB1c2VzIHN0YXRlIGZyb20gdGhlIGFzc29jaWF0ZWQgYmVnaW5MYXllck9wLCBzaW5jZSBpdCBoYXMgYWxsIHRoZSBzdGF0ZSBuZWVkZWQgZm9yIGRyYXdpbmcKLSAgICBMYXllck9wKiBkcmF3TGF5ZXJPcCA9IG5ldyAobUFsbG9jYXRvcikgTGF5ZXJPcCgKLSAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC51bm1hcHBlZEJvdW5kcywKLSAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC5sb2NhbE1hdHJpeCwKLSAgICAgICAgICAgIGJlZ2luTGF5ZXJPcC5sb2NhbENsaXBSZWN0LAotICAgICAgICAgICAgYmVnaW5MYXllck9wLnBhaW50LAotICAgICAgICAgICAgJm1MYXllclJlb3JkZXJlcnNbZmluaXNoZWRMYXllckluZGV4XS5vZmZzY3JlZW5CdWZmZXIpOwotICAgIEJha2VkT3BTdGF0ZSogYmFrZWRPcFN0YXRlID0gdHJ5QmFrZU9wU3RhdGUoKmRyYXdMYXllck9wKTsKLQotICAgIGlmIChiYWtlZE9wU3RhdGUpIHsKLSAgICAgICAgLy8gTGF5ZXIgd2lsbCBiZSBkcmF3biBpbnRvIHBhcmVudCBsYXllciAod2hpY2ggaXMgbm93IGN1cnJlbnQsIHNpbmNlIHdlIHBvcHBlZCBtTGF5ZXJTdGFjaykKLSAgICAgICAgY3VycmVudExheWVyKCkuZGVmZXJVbm1lcmdlYWJsZU9wKG1BbGxvY2F0b3IsIGJha2VkT3BTdGF0ZSwgT3BCYXRjaFR5cGU6OkJpdG1hcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gTGF5ZXIgd29uJ3QgYmUgZHJhd24gLSBkZWxldGUgaXRzIGRyYXdpbmcgYmF0Y2hlcyB0byBwcmV2ZW50IGl0IGZyb20gZG9pbmcgYW55IHdvcmsKLSAgICAgICAgbUxheWVyUmVvcmRlcmVyc1tmaW5pc2hlZExheWVySW5kZXhdLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6Om9uTGF5ZXJPcChjb25zdCBMYXllck9wJiBvcCkgewotICAgIExPR19BTFdBWVNfRkFUQUwoInVuc3VwcG9ydGVkIik7Ci19Ci0KLXZvaWQgT3BSZW9yZGVyZXI6Om9uU2hhZG93T3AoY29uc3QgU2hhZG93T3AmIG9wKSB7Ci0gICAgTE9HX0FMV0FZU19GQVRBTCgidW5zdXBwb3J0ZWQiKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL09wUmVvcmRlcmVyLmggYi9saWJzL2h3dWkvT3BSZW9yZGVyZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThiNjA3Yy4uMDAwMDAwMAotLS0gYS9saWJzL2h3dWkvT3BSZW9yZGVyZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hXVUlfT1BfUkVPUkRFUkVSX0gKLSNkZWZpbmUgQU5EUk9JRF9IV1VJX09QX1JFT1JERVJFUl9ICi0KLSNpbmNsdWRlICJCYWtlZE9wU3RhdGUuaCIKLSNpbmNsdWRlICJDYW52YXNTdGF0ZS5oIgotI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCi0jaW5jbHVkZSAiUmVjb3JkZWRPcC5oIgotCi0jaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0KLXN0cnVjdCBTa1JlY3Q7Ci0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLW5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKLQotY2xhc3MgQmFrZWRPcFN0YXRlOwotY2xhc3MgQmF0Y2hCYXNlOwotY2xhc3MgTGF5ZXJVcGRhdGVRdWV1ZTsKLWNsYXNzIE1lcmdpbmdPcEJhdGNoOwotY2xhc3MgT2Zmc2NyZWVuQnVmZmVyOwotY2xhc3MgT3BCYXRjaDsKLWNsYXNzIFJlY3Q7Ci0KLXR5cGVkZWYgaW50IGJhdGNoaWRfdDsKLXR5cGVkZWYgY29uc3Qgdm9pZCogbWVyZ2VpZF90OwotCi1uYW1lc3BhY2UgT3BCYXRjaFR5cGUgewotICAgIGVudW0gewotICAgICAgICBOb25lID0gMCwgLy8gRG9uJ3QgYmF0Y2gKLSAgICAgICAgQml0bWFwLAotICAgICAgICBQYXRjaCwKLSAgICAgICAgQWxwaGFWZXJ0aWNlcywKLSAgICAgICAgVmVydGljZXMsCi0gICAgICAgIEFscGhhTWFza1RleHR1cmUsCi0gICAgICAgIFRleHQsCi0gICAgICAgIENvbG9yVGV4dCwKLSAgICAgICAgU2hhZG93LAotCi0gICAgICAgIENvdW50IC8vIG11c3QgYmUgbGFzdAotICAgIH07Ci19Ci0KLWNsYXNzIE9wUmVvcmRlcmVyIDogcHVibGljIENhbnZhc1N0YXRlQ2xpZW50IHsKLSAgICB0eXBlZGVmIHZvaWQgKCpCYWtlZE9wUmVjZWl2ZXIpKHZvaWQqLCBjb25zdCBCYWtlZE9wU3RhdGUmKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpNZXJnZWRPcFJlY2VpdmVyKSh2b2lkKiwgY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCk7Ci0KLSAgICAvKioKLSAgICAgKiBTdG9yZXMgdGhlIGRlZmVycmVkIHJlbmRlciBvcGVyYXRpb25zIGFuZCBzdGF0ZSB1c2VkIHRvIGNvbXB1dGUgb3JkZXJpbmcKLSAgICAgKiBmb3IgYSBzaW5nbGUgRkJPL2xheWVyLgotICAgICAqLwotICAgIGNsYXNzIExheWVyUmVvcmRlcmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIENyZWF0ZSBMYXllclJlb3JkZXJlciBmb3IgRmJvMAotICAgICAgICBMYXllclJlb3JkZXJlcih1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBjb25zdCBSZWN0JiByZXBhaW50UmVjdCkKLSAgICAgICAgICAgICAgICA6IExheWVyUmVvcmRlcmVyKHdpZHRoLCBoZWlnaHQsIHJlcGFpbnRSZWN0LCBudWxscHRyLCBudWxscHRyKSB7fTsKLQotICAgICAgICAvLyBDcmVhdGUgTGF5ZXJSZW9yZGVyZXIgZm9yIGFuIG9mZnNjcmVlbiBsYXllciwgd2hlcmUgYmVnaW5MYXllck9wIGlzIHByZXNlbnQgZm9yIGEKLSAgICAgICAgLy8gc2F2ZUxheWVyLCByZW5kZXJOb2RlIGlzIHByZXNlbnQgZm9yIGEgSFcgbGF5ZXIuCi0gICAgICAgIExheWVyUmVvcmRlcmVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgY29uc3QgUmVjdCYgcmVwYWludFJlY3QsIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wLCBSZW5kZXJOb2RlKiByZW5kZXJOb2RlKTsKLQotICAgICAgICAvLyBpdGVyYXRlIGJhY2sgdG93YXJkIHRhcmdldCB0byBzZWUgaWYgYW55dGhpbmcgZHJhd24gc2luY2Ugc2hvdWxkIG92ZXJsYXAgdGhlIG5ldyBvcAotICAgICAgICAvLyBpZiBubyB0YXJnZXQsIG1lcmdpbmcgb3BzIHN0aWxsIGl0ZXJhdGUgdG8gZmluZCBzaW1pbGFyIGJhdGNoIHRvIGluc2VydCBhZnRlcgotICAgICAgICB2b2lkIGxvY2F0ZUluc2VydEluZGV4KGludCBiYXRjaElkLCBjb25zdCBSZWN0JiBjbGlwcGVkQm91bmRzLAotICAgICAgICAgICAgICAgIEJhdGNoQmFzZSoqIHRhcmdldEJhdGNoLCBzaXplX3QqIGluc2VydEJhdGNoSW5kZXgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgZGVmZXJVbm1lcmdlYWJsZU9wKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLCBCYWtlZE9wU3RhdGUqIG9wLCBiYXRjaGlkX3QgYmF0Y2hJZCk7Ci0KLSAgICAgICAgLy8gaW5zZXJ0aW9uIHBvaW50IG9mIGEgbmV3IGJhdGNoLCB3aWxsIGhvcGVmdWxseSBiZSBpbW1lZGlhdGVseSBhZnRlciBzaW1pbGFyIGJhdGNoCi0gICAgICAgIC8vIChnZW5lcmFsbHksIHNob3VsZCBiZSBzaW1pbGFyIHNoYWRlcikKLSAgICAgICAgdm9pZCBkZWZlck1lcmdlYWJsZU9wKExpbmVhckFsbG9jYXRvciYgYWxsb2NhdG9yLAotICAgICAgICAgICAgICAgIEJha2VkT3BTdGF0ZSogb3AsIGJhdGNoaWRfdCBiYXRjaElkLCBtZXJnZWlkX3QgbWVyZ2VJZCk7Ci0KLSAgICAgICAgdm9pZCByZXBsYXlCYWtlZE9wc0ltcGwodm9pZCogYXJnLCBCYWtlZE9wUmVjZWl2ZXIqIHJlY2VpdmVycywgTWVyZ2VkT3BSZWNlaXZlciopIGNvbnN0OwotCi0gICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdCB7Ci0gICAgICAgICAgICByZXR1cm4gbUJhdGNoZXMuZW1wdHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKSB7Ci0gICAgICAgICAgICBtQmF0Y2hlcy5jbGVhcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBkdW1wKCkgY29uc3Q7Ci0KLSAgICAgICAgY29uc3QgdWludDMyX3Qgd2lkdGg7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGhlaWdodDsKLSAgICAgICAgY29uc3QgUmVjdCByZXBhaW50UmVjdDsKLSAgICAgICAgT2Zmc2NyZWVuQnVmZmVyKiBvZmZzY3JlZW5CdWZmZXI7Ci0gICAgICAgIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wOwotICAgICAgICBjb25zdCBSZW5kZXJOb2RlKiByZW5kZXJOb2RlOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHN0ZDo6dmVjdG9yPEJhdGNoQmFzZSo+IG1CYXRjaGVzOwotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBNYXBzIHRoZSBtZXJnZWlkX3QgcmV0dXJuZWQgYnkgYW4gb3AncyBnZXRNZXJnZUlkKCkgdG8gdGhlIG1vc3QgcmVjZW50bHkgc2VlbgotICAgICAgICAgKiBNZXJnaW5nRHJhd0JhdGNoIG9mIHRoYXQgaWQuIFRoZXNlIGlkcyBhcmUgdW5pcXVlIHBlciBkcmF3IHR5cGUgYW5kIGd1YXJhbnRlZWQgdG8gbm90Ci0gICAgICAgICAqIGNvbGxpZGUsIHdoaWNoIGF2b2lkcyB0aGUgbmVlZCB0byByZXNvbHZlIG1lcmdlaWQgY29sbGlzaW9ucy4KLSAgICAgICAgICovCi0gICAgICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxtZXJnZWlkX3QsIE1lcmdpbmdPcEJhdGNoKj4gbU1lcmdpbmdCYXRjaExvb2t1cFtPcEJhdGNoVHlwZTo6Q291bnRdOwotCi0gICAgICAgIC8vIE1hcHMgYmF0Y2ggaWRzIHRvIHRoZSBtb3N0IHJlY2VudCAqbm9uLW1lcmdpbmcqIGJhdGNoIG9mIHRoYXQgaWQKLSAgICAgICAgT3BCYXRjaCogbUJhdGNoTG9va3VwW09wQmF0Y2hUeXBlOjpDb3VudF0gPSB7IG51bGxwdHIgfTsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgT3BSZW9yZGVyZXIoY29uc3QgTGF5ZXJVcGRhdGVRdWV1ZSYgbGF5ZXJzLCBjb25zdCBTa1JlY3QmIGNsaXAsCi0gICAgICAgICAgICB1aW50MzJfdCB2aWV3cG9ydFdpZHRoLCB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCwKLSAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPCBzcDxSZW5kZXJOb2RlPiA+JiBub2RlcywgY29uc3QgVmVjdG9yMyYgbGlnaHRDZW50ZXIpOwotCi0gICAgdmlydHVhbCB+T3BSZW9yZGVyZXIoKSB7fQotCi0gICAgLyoqCi0gICAgICogcmVwbGF5QmFrZWRPcHMoKSBpcyB0ZW1wbGF0ZWQgYmFzZWQgb24gd2hhdCBjbGFzcyB3aWxsIHJlY2VpdmUgb3BzIGJlaW5nIHJlcGxheWVkLgotICAgICAqCi0gICAgICogSXQgY29uc3RydWN0cyBhIGxvb2t1cCBhcnJheSBvZiBsYW1iZGFzLCB3aGljaCBhbGxvd3MgYSByZWNvcmRlZCBCYWtlT3BTdGF0ZSB0byB1c2UKLSAgICAgKiBzdGF0ZS0+b3AtPm9wSWQgdG8gbG9va3VwIGEgcmVjZWl2ZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBvcCBpcyByZXBsYXllZC4KLSAgICAgKgotICAgICAqLwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdGF0aWNEaXNwYXRjaGVyLCB0eXBlbmFtZSBSZW5kZXJlcj4KLSAgICB2b2lkIHJlcGxheUJha2VkT3BzKFJlbmRlcmVyJiByZW5kZXJlcikgewotICAgICAgICAvKioKLSAgICAgICAgICogZGVmaW5lcyBhIExVVCBvZiBsYW1iZGFzIHdoaWNoIGFsbG93IGEgcmVjb3JkZWQgQmFrZWRPcFN0YXRlIHRvIHVzZSBzdGF0ZS0+b3AtPm9wSWQgdG8KLSAgICAgICAgICogZGlzcGF0Y2ggdGhlIG9wIHZpYSBhIG1ldGhvZCBvbiBhIHN0YXRpYyBkaXNwYXRjaGVyIHdoZW4gdGhlIG9wIGlzIHJlcGxheWVkLgotICAgICAgICAgKgotICAgICAgICAgKiBGb3IgZXhhbXBsZSBhIEJpdG1hcE9wIHdvdWxkIHJlc29sdmUsIHZpYSB0aGUgbGFtYmRhIGxvb2t1cCwgdG8gY2FsbGluZzoKLSAgICAgICAgICoKLSAgICAgICAgICogU3RhdGljRGlzcGF0Y2hlcjo6b25CaXRtYXBPcChSZW5kZXJlciYgcmVuZGVyZXIsIGNvbnN0IEJpdG1hcE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSk7Ci0gICAgICAgICAqLwotICAgICAgICAjZGVmaW5lIFgoVHlwZSkgXAotICAgICAgICAgICAgICAgIFtdKHZvaWQqIHJlbmRlcmVyLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgU3RhdGljRGlzcGF0Y2hlcjo6b24jI1R5cGUoKihzdGF0aWNfY2FzdDxSZW5kZXJlcio+KHJlbmRlcmVyKSksIHN0YXRpY19jYXN0PGNvbnN0IFR5cGUmPigqKHN0YXRlLm9wKSksIHN0YXRlKTsgXAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIHN0YXRpYyBCYWtlZE9wUmVjZWl2ZXIgdW5tZXJnZWRSZWNlaXZlcnNbXSA9IHsKLSAgICAgICAgICAgIE1BUF9PUFMoWCkKLSAgICAgICAgfTsKLSAgICAgICAgI3VuZGVmIFgKLQotICAgICAgICAvKioKLSAgICAgICAgICogZGVmaW5lcyBhIExVVCBvZiBsYW1iZGFzIHdoaWNoIGFsbG93IG1lcmdlZCBhcnJheXMgb2YgQmFrZWRPcFN0YXRlKiB0byBiZSBwYXNzZWQgdG8gYQotICAgICAgICAgKiBzdGF0aWMgZGlzcGF0Y2hlciB3aGVuIHRoZSBncm91cCBvZiBtZXJnZWQgb3BzIGlzIHJlcGxheWVkLiBVbm1lcmdlYWJsZSBvcHMgdHJpZ2dlcgotICAgICAgICAgKiBhIExPR19BTFdBWVNfRkFUQUwoKS4KLSAgICAgICAgICovCi0gICAgICAgICNkZWZpbmUgWChUeXBlKSBcCi0gICAgICAgICAgICAgICAgW10odm9pZCogcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAotICAgICAgICAgICAgICAgICAgICBMT0dfQUxXQVlTX0ZBVEFMKCJvcCB0eXBlICVkIGRvZXMgbm90IHN1cHBvcnQgbWVyZ2luZyIsIG9wTGlzdC5zdGF0ZXNbMF0tPm9wLT5vcElkKTsgXAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICNkZWZpbmUgWShUeXBlKSBcCi0gICAgICAgICAgICAgICAgW10odm9pZCogcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAotICAgICAgICAgICAgICAgICAgICBTdGF0aWNEaXNwYXRjaGVyOjpvbk1lcmdlZCMjVHlwZSMjcygqKHN0YXRpY19jYXN0PFJlbmRlcmVyKj4ocmVuZGVyZXIpKSwgb3BMaXN0KTsgXAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgIHN0YXRpYyBNZXJnZWRPcFJlY2VpdmVyIG1lcmdlZFJlY2VpdmVyc1tdID0gewotICAgICAgICAgICAgTUFQX09QU19CQVNFRF9PTl9NRVJHRUFCSUxJVFkoWCwgWSkKLSAgICAgICAgfTsKLSAgICAgICAgI3VuZGVmIFgKLSAgICAgICAgI3VuZGVmIFkKLQotICAgICAgICAvLyBSZWxheSB0aHJvdWdoIGxheWVycyBpbiByZXZlcnNlIG9yZGVyLCBzaW5jZSBsYXllcnMKLSAgICAgICAgLy8gbGF0ZXIgaW4gdGhlIGxpc3Qgd2lsbCBiZSBkcmF3biBieSBlYXJsaWVyIG9uZXMKLSAgICAgICAgZm9yIChpbnQgaSA9IG1MYXllclJlb3JkZXJlcnMuc2l6ZSgpIC0gMTsgaSA+PSAxOyBpLS0pIHsKLSAgICAgICAgICAgIExheWVyUmVvcmRlcmVyJiBsYXllciA9IG1MYXllclJlb3JkZXJlcnNbaV07Ci0gICAgICAgICAgICBpZiAobGF5ZXIucmVuZGVyTm9kZSkgewotICAgICAgICAgICAgICAgIC8vIGNhY2hlZCBIVyBsYXllciAtIGNhbid0IHNraXAgbGF5ZXIgaWYgZW1wdHkKLSAgICAgICAgICAgICAgICByZW5kZXJlci5zdGFydFJlcGFpbnRMYXllcihsYXllci5vZmZzY3JlZW5CdWZmZXIsIGxheWVyLnJlcGFpbnRSZWN0KTsKLSAgICAgICAgICAgICAgICBsYXllci5yZXBsYXlCYWtlZE9wc0ltcGwoKHZvaWQqKSZyZW5kZXJlciwgdW5tZXJnZWRSZWNlaXZlcnMsIG1lcmdlZFJlY2VpdmVycyk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIuZW5kTGF5ZXIoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxheWVyLmVtcHR5KCkpIHsgLy8gc2F2ZSBsYXllciAtIHNraXAgZW50aXJlIGxheWVyIGlmIGVtcHR5Ci0gICAgICAgICAgICAgICAgbGF5ZXIub2Zmc2NyZWVuQnVmZmVyID0gcmVuZGVyZXIuc3RhcnRUZW1wb3JhcnlMYXllcihsYXllci53aWR0aCwgbGF5ZXIuaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBsYXllci5yZXBsYXlCYWtlZE9wc0ltcGwoKHZvaWQqKSZyZW5kZXJlciwgdW5tZXJnZWRSZWNlaXZlcnMsIG1lcmdlZFJlY2VpdmVycyk7Ci0gICAgICAgICAgICAgICAgcmVuZGVyZXIuZW5kTGF5ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IExheWVyUmVvcmRlcmVyJiBmYm8wID0gbUxheWVyUmVvcmRlcmVyc1swXTsKLSAgICAgICAgcmVuZGVyZXIuc3RhcnRGcmFtZShmYm8wLndpZHRoLCBmYm8wLmhlaWdodCwgZmJvMC5yZXBhaW50UmVjdCk7Ci0gICAgICAgIGZibzAucmVwbGF5QmFrZWRPcHNJbXBsKCh2b2lkKikmcmVuZGVyZXIsIHVubWVyZ2VkUmVjZWl2ZXJzLCBtZXJnZWRSZWNlaXZlcnMpOwotICAgICAgICByZW5kZXJlci5lbmRGcmFtZSgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcCgpIGNvbnN0IHsKLSAgICAgICAgZm9yIChhdXRvJiYgbGF5ZXIgOiBtTGF5ZXJSZW9yZGVyZXJzKSB7Ci0gICAgICAgICAgICBsYXllci5kdW1wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8vIENhbnZhc1N0YXRlQ2xpZW50IGludGVyZmFjZQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICB2aXJ0dWFsIHZvaWQgb25WaWV3cG9ydEluaXRpYWxpemVkKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uU25hcHNob3RSZXN0b3JlZChjb25zdCBTbmFwc2hvdCYgcmVtb3ZlZCwgY29uc3QgU25hcHNob3QmIHJlc3RvcmVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIEdMdWludCBnZXRUYXJnZXRGYm8oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDaGlsZHJlblNlbGVjdE1vZGUgewotICAgICAgICBOZWdhdGl2ZSwKLSAgICAgICAgUG9zaXRpdmUKLSAgICB9OwotICAgIHZvaWQgc2F2ZUZvckxheWVyKHVpbnQzMl90IGxheWVyV2lkdGgsIHVpbnQzMl90IGxheWVySGVpZ2h0LAotICAgICAgICAgICAgZmxvYXQgY29udGVudFRyYW5zbGF0ZVgsIGZsb2F0IGNvbnRlbnRUcmFuc2xhdGVZLAotICAgICAgICAgICAgY29uc3QgUmVjdCYgcmVwYWludFJlY3QsCi0gICAgICAgICAgICBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlciwKLSAgICAgICAgICAgIGNvbnN0IEJlZ2luTGF5ZXJPcCogYmVnaW5MYXllck9wLCBSZW5kZXJOb2RlKiByZW5kZXJOb2RlKTsKLSAgICB2b2lkIHJlc3RvcmVGb3JMYXllcigpOwotCi0gICAgTGF5ZXJSZW9yZGVyZXImIGN1cnJlbnRMYXllcigpIHsgcmV0dXJuIG1MYXllclJlb3JkZXJlcnNbbUxheWVyU3RhY2suYmFjaygpXTsgfQotCi0gICAgQmFrZWRPcFN0YXRlKiB0cnlCYWtlT3BTdGF0ZShjb25zdCBSZWNvcmRlZE9wJiByZWNvcmRlZE9wKSB7Ci0gICAgICAgIHJldHVybiBCYWtlZE9wU3RhdGU6OnRyeUNvbnN0cnVjdChtQWxsb2NhdG9yLCAqbUNhbnZhc1N0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLCByZWNvcmRlZE9wKTsKLSAgICB9Ci0KLSAgICAvLyBzaG91bGQgYWx3YXlzIGJlIHN1cnJvdW5kZWQgYnkgYSBzYXZlL3Jlc3RvcmUgcGFpciwgYW5kIG5vdCBjYWxsZWQgaWYgRGlzcGxheUxpc3QgaXMgbnVsbAotICAgIHZvaWQgZGVmZXJOb2RlUHJvcHNBbmRPcHMoUmVuZGVyTm9kZSYgbm9kZSk7Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4KLSAgICB2b2lkIGRlZmVyM2RDaGlsZHJlbihDaGlsZHJlblNlbGVjdE1vZGUgbW9kZSwgY29uc3QgViYgelRyYW5zbGF0ZWROb2Rlcyk7Ci0KLSAgICB2b2lkIGRlZmVyU2hhZG93KGNvbnN0IFJlbmRlck5vZGVPcCYgY2FzdGVyT3ApOwotCi0gICAgdm9pZCBkZWZlclByb2plY3RlZENoaWxkcmVuKGNvbnN0IFJlbmRlck5vZGUmIHJlbmRlck5vZGUpOwotCi0gICAgdm9pZCBkZWZlck5vZGVPcHMoY29uc3QgUmVuZGVyTm9kZSYgcmVuZGVyTm9kZSk7Ci0KLSAgICB2b2lkIGRlZmVyUmVuZGVyTm9kZU9wKGNvbnN0IFJlbmRlck5vZGVPcCYgb3ApOwotCi0gICAgdm9pZCByZXBsYXlCYWtlZE9wc0ltcGwodm9pZCogYXJnLCBCYWtlZE9wUmVjZWl2ZXIqIHJlY2VpdmVycyk7Ci0KLSAgICBTa1BhdGgqIGNyZWF0ZUZyYW1lQWxsb2NhdGVkUGF0aCgpIHsKLSAgICAgICAgbUZyYW1lQWxsb2NhdGVkUGF0aHMuZW1wbGFjZV9iYWNrKG5ldyBTa1BhdGgpOwotICAgICAgICByZXR1cm4gbUZyYW1lQWxsb2NhdGVkUGF0aHMuYmFjaygpLmdldCgpOwotICAgIH0KLQotICAgIHZvaWQgb25TdHJva2VhYmxlT3AoY29uc3QgUmVjb3JkZWRPcCYgb3AsIGJhdGNoaWRfdCBiYXRjaElkLAotICAgICAgICAgICAgQmFrZWRPcFN0YXRlOjpTdHJva2VCZWhhdmlvciBzdHJva2VCZWhhdmlvciA9IEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OlN0eWxlRGVmaW5lZCk7Ci0KLSAgICAvKioKLSAgICAgKiBEZWNsYXJlcyBhbGwgT3BSZW9yZGVyZXI6Om9uWFhYWE9wKCkgbWV0aG9kcyBmb3IgZXZlcnkgUmVjb3JkZWRPcCB0eXBlLgotICAgICAqCi0gICAgICogVGhlc2UgcHJpdmF0ZSBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB3aXRoaW4gZGVmZXJJbXBsIHRvIGRlZmVyIGVhY2ggaW5kaXZpZHVhbCBvcAotICAgICAqIHR5cGUgZGlmZmVyZW50bHkuCi0gICAgICovCi0jZGVmaW5lIElOVEVSTkFMX09QX0hBTkRMRVIoVHlwZSkgXAotICAgIHZvaWQgb24jI1R5cGUoY29uc3QgVHlwZSYgb3ApOwotICAgIE1BUF9PUFMoSU5URVJOQUxfT1BfSEFORExFUikKLQotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTa1BhdGg+ID4gbUZyYW1lQWxsb2NhdGVkUGF0aHM7Ci0KLSAgICAvLyBMaXN0IG9mIGV2ZXJ5IGRlZmVycmVkIGxheWVyJ3MgcmVuZGVyIHN0YXRlLiBSZXBsYXllZCBpbiByZXZlcnNlIG9yZGVyIHRvIHJlbmRlciBhIGZyYW1lLgotICAgIHN0ZDo6dmVjdG9yPExheWVyUmVvcmRlcmVyPiBtTGF5ZXJSZW9yZGVyZXJzOwotCi0gICAgLyoKLSAgICAgKiBTdGFjayBvZiBpbmRpY2VzIHdpdGhpbiBtTGF5ZXJSZW9yZGVyZXJzIHJlcHJlc2VudGluZyBjdXJyZW50bHkgYWN0aXZlIGxheWVycy4gSWYgZHJhd2luZwotICAgICAqIGxheWVyQSB3aXRoaW4gYSBsYXllckIsIHdpbGwgY29udGFpbiwgaW4gb3JkZXI6Ci0gICAgICogIC0gMCAocmVwcmVzZW50aW5nIEZCTyAwLCBhbHdheXMgcHJlc2VudCkKLSAgICAgKiAgLSBsYXllckIncyBpbmRleAotICAgICAqICAtIGxheWVyQSdzIGluZGV4Ci0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IHZlY3RvciBkb2Vzbid0IGFsd2F5cyBtYXAgb250byBhbGwgdmFsdWVzIG9mIG1MYXllclJlb3JkZXJlcnMuIFdoZW4gYQotICAgICAqIGxheWVyIGlzIGZpbmlzaGVkIGRlZmVycmluZywgaXQgd2lsbCBzdGlsbCBiZSByZXByZXNlbnRlZCBpbiBtTGF5ZXJSZW9yZGVyZXJzLCBidXQgaXQncyBpbmRleAotICAgICAqIHdvbid0IGJlIGluIG1MYXllclN0YWNrLiBUaGlzIGlzIGJlY2F1c2UgaXQgY2FuIGJlIHJlcGxheWVkLCBidXQgY2FuJ3QgaGF2ZSBhbnkgbW9yZSBkcmF3aW5nCi0gICAgICogb3BzIGFkZGVkIHRvIGl0LgotICAgICovCi0gICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBtTGF5ZXJTdGFjazsKLQotICAgIENhbnZhc1N0YXRlIG1DYW52YXNTdGF0ZTsKLQotICAgIC8vIGNvbnRhaW5zIFJlc29sdmVkT3BzIGFuZCBCYXRjaGVzCi0gICAgTGluZWFyQWxsb2NhdG9yIG1BbGxvY2F0b3I7Ci19OwotCi19OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfSFdVSV9PUF9SRU9SREVSRVJfSApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmNwcCBiL2xpYnMvaHd1aS9PcGVuR0xSZW5kZXJlci5jcHAKaW5kZXggZjQ5MjM3Yy4uOTJiNzU4ZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL09wZW5HTFJlbmRlcmVyLmNwcAorKysgYi9saWJzL2h3dWkvT3BlbkdMUmVuZGVyZXIuY3BwCkBAIC0xNDc0LDcgKzE0NzQsNyBAQAogICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZE1lc2godmVydGljZXMsIGJpdG1hcENvdW50ICogNikKICAgICAgICAgICAgIC5zZXRGaWxsVGV4dHVyZVBhaW50KCp0ZXh0dXJlLCB0ZXh0dXJlRmlsbEZsYWdzLCBwYWludCwgY3VycmVudFNuYXBzaG90KCktPmFscGhhKQogICAgICAgICAgICAgLnNldFRyYW5zZm9ybSgqY3VycmVudFNuYXBzaG90KCksIHRyYW5zZm9ybUZsYWdzKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3RPcHRpb25hbFNuYXAoc25hcCwgeCwgeSwgUmVjdCgwLCAwLCBib3VuZHMuZ2V0V2lkdGgoKSwgYm91bmRzLmdldEhlaWdodCgpKSkKKyAgICAgICAgICAgIC5zZXRNb2RlbFZpZXdPZmZzZXRSZWN0T3B0aW9uYWxTbmFwKHNuYXAsIHgsIHksIFJlY3QoYm91bmRzLmdldFdpZHRoKCksIGJvdW5kcy5nZXRIZWlnaHQoKSkpCiAgICAgICAgICAgICAuYnVpbGQoKTsKICAgICByZW5kZXJHbG9wKGdsb3AsIEdsb3BSZW5kZXJUeXBlOjpNdWx0aSk7CiB9CkBAIC0xNDk3LDcgKzE0OTcsNyBAQAogICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZFVuaXRRdWFkKHRleHR1cmUtPnV2TWFwcGVyKQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIHBhaW50LCBjdXJyZW50U25hcHNob3QoKS0+YWxwaGEpCiAgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKCpjdXJyZW50U25hcHNob3QoKSwgIFRyYW5zZm9ybUZsYWdzOjpOb25lKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld01hcFVuaXRUb1JlY3RTbmFwKFJlY3QoMCwgMCwgdGV4dHVyZS0+d2lkdGgsIHRleHR1cmUtPmhlaWdodCkpCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3TWFwVW5pdFRvUmVjdFNuYXAoUmVjdCh0ZXh0dXJlLT53aWR0aCwgdGV4dHVyZS0+aGVpZ2h0KSkKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgIHJlbmRlckdsb3AoZ2xvcCk7CiB9CkBAIC0xNjQyLDcgKzE2NDIsNyBAQAogICAgICAgICAgICAgLnNldE1lc2hQYXRjaFF1YWRzKCptZXNoKQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIHBhaW50LCBjdXJyZW50U25hcHNob3QoKS0+YWxwaGEpCiAgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKCpjdXJyZW50U25hcHNob3QoKSwgIFRyYW5zZm9ybUZsYWdzOjpOb25lKQotICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3RTbmFwKGxlZnQsIHRvcCwgUmVjdCgwLCAwLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpIC8vIFRPRE86IGdldCBtaW5pbWFsIGJvdW5kcyBmcm9tIHBhdGNoCisgICAgICAgICAgICAuc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdFNuYXAobGVmdCwgdG9wLCBSZWN0KHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSkgLy8gVE9ETzogZ2V0IG1pbmltYWwgYm91bmRzIGZyb20gcGF0Y2gKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgIHJlbmRlckdsb3AoZ2xvcCk7CiB9CkBAIC0xNjcyLDcgKzE2NzIsNyBAQAogICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZEluZGV4ZWRRdWFkcyh2ZXJ0aWNlcywgZWxlbWVudENvdW50KQogICAgICAgICAgICAgLnNldEZpbGxUZXh0dXJlUGFpbnQoKnRleHR1cmUsIHRleHR1cmVGaWxsRmxhZ3MsIHBhaW50LCBjdXJyZW50U25hcHNob3QoKS0+YWxwaGEpCiAgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKCpjdXJyZW50U25hcHNob3QoKSwgdHJhbnNmb3JtRmxhZ3MpCi0gICAgICAgICAgICAuc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdCgwLCAwLCBSZWN0KDAsIDAsIDAsIDApKQorICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3QoMCwgMCwgUmVjdCgpKQogICAgICAgICAgICAgLmJ1aWxkKCk7CiAgICAgcmVuZGVyR2xvcChnbG9wLCBHbG9wUmVuZGVyVHlwZTo6TXVsdGkpOwogfQpAQCAtMjI2OCw3ICsyMjY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLnNldE1lc2hUZXh0dXJlZEluZGV4ZWRRdWFkcyhsYXllci0+bWVzaCwgbGF5ZXItPm1lc2hFbGVtZW50Q291bnQpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRGaWxsTGF5ZXIobGF5ZXItPmdldFRleHR1cmUoKSwgbGF5ZXItPmdldENvbG9yRmlsdGVyKCksIGdldExheWVyQWxwaGEobGF5ZXIpLCBsYXllci0+Z2V0TW9kZSgpLCBCbGVuZDo6TW9kZU9yZGVyU3dhcDo6Tm9Td2FwKQogICAgICAgICAgICAgICAgICAgICAuc2V0VHJhbnNmb3JtKCpjdXJyZW50U25hcHNob3QoKSwgIFRyYW5zZm9ybUZsYWdzOjpOb25lKQotICAgICAgICAgICAgICAgICAgICAuc2V0TW9kZWxWaWV3T2Zmc2V0UmVjdFNuYXAoMCwgMCwgUmVjdCgwLCAwLCBsYXllci0+bGF5ZXIuZ2V0V2lkdGgoKSwgbGF5ZXItPmxheWVyLmdldEhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICAgICAgLnNldE1vZGVsVmlld09mZnNldFJlY3RTbmFwKDAsIDAsIFJlY3QobGF5ZXItPmxheWVyLmdldFdpZHRoKCksIGxheWVyLT5sYXllci5nZXRIZWlnaHQoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwogICAgICAgICAgICAgRFJBV19ET1VCTEVfU1RFTkNJTF9JRighbGF5ZXItPmhhc0RyYXduU2luY2VVcGRhdGUsIHJlbmRlckdsb3AoZ2xvcCkpOwogI2lmIERFQlVHX0xBWUVSU19BU19SRUdJT05TCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUGF0aFBhcnNlci5oIGIvbGlicy9od3VpL1BhdGhQYXJzZXIuaAppbmRleCA0Yzg3YjE4Li5jNGJiYjc0IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUGF0aFBhcnNlci5oCisrKyBiL2xpYnMvaHd1aS9QYXRoUGFyc2VyLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpZm5kZWYgQU5EUk9JRF9IV1VJX1BBVEhQQVJTRVJfSAogI2RlZmluZSBBTkRST0lEX0hXVUlfUEFUSFBBUlNFUl9ICiAKLSNpbmNsdWRlICJWZWN0b3JEcmF3YWJsZVBhdGguaCIKKyNpbmNsdWRlICJWZWN0b3JEcmF3YWJsZS5oIgogI2luY2x1ZGUgInV0aWxzL1ZlY3RvckRyYXdhYmxlVXRpbHMuaCIKIAogI2luY2x1ZGUgPGpuaS5oPgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1Byb3BlcnRpZXMuY3BwIGIvbGlicy9od3VpL1Byb3BlcnRpZXMuY3BwCmluZGV4IDA2Njk1OTYuLjA4M2FlYjcgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Qcm9wZXJ0aWVzLmNwcAorKysgYi9saWJzL2h3dWkvUHJvcGVydGllcy5jcHAKQEAgLTUzLDYgKzUzLDggQEAKIFByb2ZpbGVUeXBlIFByb3BlcnRpZXM6OnNQcm9maWxlVHlwZSA9IFByb2ZpbGVUeXBlOjpOb25lOwogYm9vbCBQcm9wZXJ0aWVzOjpzRGlzYWJsZVByb2ZpbGVCYXJzID0gZmFsc2U7CiAKK2Jvb2wgUHJvcGVydGllczo6d2FpdEZvckdwdUNvbXBsZXRpb24gPSBmYWxzZTsKKwogc3RhdGljIGludCBwcm9wZXJ0eV9nZXRfaW50KGNvbnN0IGNoYXIqIGtleSwgaW50IGRlZmF1bHRWYWx1ZSkgewogICAgIGNoYXIgYnVmW1BST1BFUlRZX1ZBTFVFX01BWF0gPSB7J1wwJyx9OwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvUHJvcGVydGllcy5oIGIvbGlicy9od3VpL1Byb3BlcnRpZXMuaAppbmRleCAxZGRlN2UwLi44OGYxZGJjIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvUHJvcGVydGllcy5oCisrKyBiL2xpYnMvaHd1aS9Qcm9wZXJ0aWVzLmgKQEAgLTI4NSw2ICsyODUsOSBAQAogCiAgICAgc3RhdGljIFByb2ZpbGVUeXBlIGdldFByb2ZpbGVUeXBlKCk7CiAKKyAgICAvLyBTaG91bGQgYmUgdXNlZCBvbmx5IGJ5IHRlc3QgYXBwcworICAgIHN0YXRpYyBib29sIHdhaXRGb3JHcHVDb21wbGV0aW9uOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBQcm9maWxlVHlwZSBzUHJvZmlsZVR5cGU7CiAgICAgc3RhdGljIGJvb2wgc0Rpc2FibGVQcm9maWxlQmFyczsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZWNvcmRlZE9wLmggYi9saWJzL2h3dWkvUmVjb3JkZWRPcC5oCmluZGV4IDhjZTU0NzMuLjMwZDVjMjkgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9SZWNvcmRlZE9wLmgKKysrIGIvbGlicy9od3VpL1JlY29yZGVkT3AuaApAQCAtMjQsNyArMjQsOCBAQAogI2luY2x1ZGUgInV0aWxzL0xpbmVhckFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCi0jaW5jbHVkZSAiU2tYZmVybW9kZS5oIgorI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+CisjaW5jbHVkZSA8U2tYZmVybW9kZS5oPgogCiBjbGFzcyBTa0JpdG1hcDsKIGNsYXNzIFNrUGFpbnQ7CkBAIC0zMiw2MCArMzMsMTE2IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiBuYW1lc3BhY2UgdWlyZW5kZXJlciB7CiAKK3N0cnVjdCBDbGlwQmFzZTsKIGNsYXNzIE9mZnNjcmVlbkJ1ZmZlcjsKIGNsYXNzIFJlbmRlck5vZGU7CiBzdHJ1Y3QgVmVydGV4OwogCiAvKioKLSAqIE9uIG9mIHRoZSBwcm92aWRlZCBtYWNyb3MgaXMgZXhlY3V0ZWQgZm9yIGVhY2ggb3AgdHlwZSBpbiBvcmRlci4gVGhlIGZpcnN0IHdpbGwgYmUgdXNlZCBmb3Igb3BzCi0gKiB0aGF0IGNhbm5vdCBtZXJnZSwgYW5kIHRoZSBzZWNvbmQgZm9yIHRob3NlIHRoYXQgY2FuLgorICogQXV0aG9yaXRhdGl2ZSBvcCBsaXN0LCB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBvcCBJRCBlbnVtLCBJRCBiYXNlZCBMVVRTLCBhbmQKKyAqIHRoZSBmdW5jdGlvbnMgdG8gd2hpY2ggdGhleSBkaXNwYXRjaC4gUGFyYW1ldGVyIG1hY3JvcyBhcmUgZXhlY3V0ZWQgZm9yIGVhY2ggb3AsCisgKiBpbiBvcmRlciwgYmFzZWQgb24gdGhlIG9wJ3MgdHlwZS4KICAqCi0gKiBUaGlzIHNlcnZlcyBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBsaXN0IG9mIG9wcywgdXNlZCBmb3IgZ2VuZXJhdGluZyBJRCBlbnVtLCBhbmQgSUQgYmFzZWQgTFVUcy4KKyAqIFRoZXJlIGFyZSA0IHR5cGVzIG9mIG9wLCB3aGljaCBkZWZpbmVzIGRpc3BhdGNoL0xVVCBjYXBhYmlsaXR5OgorICoKKyAqICAgICAgICAgICAgICB8IERpc3BsYXlMaXN0IHwgICBSZW5kZXIgICAgfCAgICBNZXJnZSAgICB8CisgKiAtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfAorICogUFJFIFJFTkRFUiAgIHwgICAgIFllcyAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAqIFJFTkRFUiBPTkxZICB8ICAgICAgICAgICAgIHwgICAgIFllcyAgICAgfCAgICAgICAgICAgICB8CisgKiBVTk1FUkdFQUJMRSAgfCAgICAgWWVzICAgICB8ICAgICBZZXMgICAgIHwgICAgICAgICAgICAgfAorICogTUVSR0VBQkxFICAgIHwgICAgIFllcyAgICAgfCAgICAgWWVzICAgICB8ICAgICBZZXMgICAgIHwKKyAqCisgKiBQUkUgUkVOREVSIC0gVGhlc2Ugb3BzIGFyZSByZWNvcmRlZCBpbnRvIERpc3BsYXlMaXN0cywgYnV0IGNhbid0IGJlIGRpcmVjdGx5IHJlbmRlcmVkLiBUaGlzCisgKiAgICAgIG1heSBiZSBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZCBpbnRvIG90aGVyIG9wIHR5cGVzIChlLmcuIENpcmNsZVByb3BzT3ApLAorICogICAgICBiZSB0cmF2ZXJzZWQgdG8gYWNjZXNzIG11bHRpcGxlIHJlbmRlcmFibGUgb3BzIHdpdGhpbiAoZS5nLiBSZW5kZXJOb2RlT3ApLCBvciBiZWNhdXNlIHRoZXkKKyAqICAgICAgbW9kaWZ5IHJlbmRlcmJ1ZmZlciBsaWZlY3ljbGUsIGluc3RlYWQgb2YgZGlyZWN0bHkgcmVuZGVyaW5nIGNvbnRlbnQgKHRoZSB2YXJpb3VzIExheWVyT3BzKS4KKyAqCisgKiBSRU5ERVIgT05MWSAtIFRoZXNlIG9wcyBjYW5ub3QgYmUgcmVjb3JkZWQgaW50byBEaXNwbGF5TGlzdHMsIGFuZCBhcmUgaW5zdGVhZCBpbXBsaWNpdGx5CisgKiAgICAgIGNvbnN0cnVjdGVkIGZyb20gb3RoZXIgY29tbWFuZHMvUmVuZGVyTm9kZSBwcm9wZXJ0aWVzLiBUaGV5IGNhbm5vdCBiZSBtZXJnZWQuCisgKgorICogVU5NRVJHRUFCTEUgLSBUaGVzZSBvcHMgY2FuIGJlIHJlY29yZGVkIGludG8gRGlzcGxheUxpc3RzIGFuZCByZW5kZXJlZCBkaXJlY3RseSwgYnV0IGRvIG5vdAorICogICAgICBzdXBwb3J0IG1lcmdlZCByZW5kZXJpbmcuCisgKgorICogTUVSR0VBQkxFIC0gVGhlc2Ugb3BzIGNhbiBiZSByZWNvcmRlZCBpbnRvIERpc3BsYXlMaXN0cyBhbmQgcmVuZGVyZWQgaW5kaXZpZHVhbGx5LCBvciBtZXJnZWQKKyAqICAgICAgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLgogICovCi0jZGVmaW5lIE1BUF9PUFNfQkFTRURfT05fTUVSR0VBQklMSVRZKFVfT1BfRk4sIE1fT1BfRk4pIFwKLSAgICAgICAgVV9PUF9GTihBcmNPcCkgXAotICAgICAgICBNX09QX0ZOKEJpdG1hcE9wKSBcCi0gICAgICAgIFVfT1BfRk4oTGluZXNPcCkgXAotICAgICAgICBVX09QX0ZOKE92YWxPcCkgXAotICAgICAgICBVX09QX0ZOKFBhdGhPcCkgXAotICAgICAgICBVX09QX0ZOKFBvaW50c09wKSBcCi0gICAgICAgIFVfT1BfRk4oUmVjdE9wKSBcCi0gICAgICAgIFVfT1BfRk4oUmVuZGVyTm9kZU9wKSBcCi0gICAgICAgIFVfT1BfRk4oUm91bmRSZWN0T3ApIFwKLSAgICAgICAgVV9PUF9GTihTaGFkb3dPcCkgXAotICAgICAgICBVX09QX0ZOKFNpbXBsZVJlY3RzT3ApIFwKLSAgICAgICAgTV9PUF9GTihUZXh0T3ApIFwKLSAgICAgICAgVV9PUF9GTihCZWdpbkxheWVyT3ApIFwKLSAgICAgICAgVV9PUF9GTihFbmRMYXllck9wKSBcCi0gICAgICAgIFVfT1BfRk4oTGF5ZXJPcCkKKyNkZWZpbmUgTUFQX09QU19CQVNFRF9PTl9UWVBFKFBSRV9SRU5ERVJfT1BfRk4sIFJFTkRFUl9PTkxZX09QX0ZOLCBVTk1FUkdFQUJMRV9PUF9GTiwgTUVSR0VBQkxFX09QX0ZOKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oUmVuZGVyTm9kZU9wKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oQ2lyY2xlUHJvcHNPcCkgXAorICAgICAgICBQUkVfUkVOREVSX09QX0ZOKFJvdW5kUmVjdFByb3BzT3ApIFwKKyAgICAgICAgUFJFX1JFTkRFUl9PUF9GTihCZWdpbkxheWVyT3ApIFwKKyAgICAgICAgUFJFX1JFTkRFUl9PUF9GTihFbmRMYXllck9wKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oQmVnaW5VbmNsaXBwZWRMYXllck9wKSBcCisgICAgICAgIFBSRV9SRU5ERVJfT1BfRk4oRW5kVW5jbGlwcGVkTGF5ZXJPcCkgXAorICAgICAgICBcCisgICAgICAgIFJFTkRFUl9PTkxZX09QX0ZOKFNoYWRvd09wKSBcCisgICAgICAgIFJFTkRFUl9PTkxZX09QX0ZOKExheWVyT3ApIFwKKyAgICAgICAgUkVOREVSX09OTFlfT1BfRk4oQ29weVRvTGF5ZXJPcCkgXAorICAgICAgICBSRU5ERVJfT05MWV9PUF9GTihDb3B5RnJvbUxheWVyT3ApIFwKKyAgICAgICAgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihBcmNPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihCaXRtYXBNZXNoT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oQml0bWFwUmVjdE9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKEZ1bmN0b3JPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihMaW5lc09wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKE92YWxPcCkgXAorICAgICAgICBVTk1FUkdFQUJMRV9PUF9GTihQYXRoT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oUG9pbnRzT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oUmVjdE9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKFJvdW5kUmVjdE9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKFNpbXBsZVJlY3RzT3ApIFwKKyAgICAgICAgVU5NRVJHRUFCTEVfT1BfRk4oVGV4dE9uUGF0aE9wKSBcCisgICAgICAgIFVOTUVSR0VBQkxFX09QX0ZOKFRleHR1cmVMYXllck9wKSBcCisgICAgICAgIFwKKyAgICAgICAgTUVSR0VBQkxFX09QX0ZOKEJpdG1hcE9wKSBcCisgICAgICAgIE1FUkdFQUJMRV9PUF9GTihQYXRjaE9wKSBcCisgICAgICAgIE1FUkdFQUJMRV9PUF9GTihUZXh0T3ApCiAKIC8qKgotICogVGhlIHByb3ZpZGVkIG1hY3JvIGlzIGV4ZWN1dGVkIGZvciBlYWNoIG9wIHR5cGUgaW4gb3JkZXIuIFRoaXMgaXMgdXNlZCBpbiBjYXNlcyB3aGVyZQotICogbWVyZ2UtYWJpbGl0eSBvZiBvcHMgZG9lc24ndCBtYXR0ZXIuCisgKiBMVVQgZ2VuZXJhdG9ycywgd2hpY2ggd2lsbCBpbnNlcnQgbnVsbHB0ciBmb3IgdW5zdXBwb3J0ZWQgb3BzCiAgKi8KLSNkZWZpbmUgTUFQX09QUyhPUF9GTikgXAotICAgICAgICBNQVBfT1BTX0JBU0VEX09OX01FUkdFQUJJTElUWShPUF9GTiwgT1BfRk4pCisjZGVmaW5lIE5VTExQVFJfT1BfRk4oVHlwZSkgbnVsbHB0ciwKIAorI2RlZmluZSBCVUlMRF9ERUZFUlJBQkxFX09QX0xVVChPUF9GTikgXAorICAgICAgICB7IE1BUF9PUFNfQkFTRURfT05fVFlQRShPUF9GTiwgTlVMTFBUUl9PUF9GTiwgT1BfRk4sIE9QX0ZOKSB9CisKKyNkZWZpbmUgQlVJTERfTUVSR0VBQkxFX09QX0xVVChPUF9GTikgXAorICAgICAgICB7IE1BUF9PUFNfQkFTRURfT05fVFlQRShOVUxMUFRSX09QX0ZOLCBOVUxMUFRSX09QX0ZOLCBOVUxMUFRSX09QX0ZOLCBPUF9GTikgfQorCisjZGVmaW5lIEJVSUxEX1JFTkRFUkFCTEVfT1BfTFVUKE9QX0ZOKSBcCisgICAgICAgIHsgTUFQX09QU19CQVNFRF9PTl9UWVBFKE5VTExQVFJfT1BfRk4sIE9QX0ZOLCBPUF9GTiwgT1BfRk4pIH0KKworLyoqCisgKiBPcCBtYXBwaW5nIGZ1bmN0aW9ucywgd2hpY2ggc2tpcCB1bnN1cHBvcnRlZCBvcHMuCisgKgorICogTm90ZTogRG8gbm90IHVzZSBmb3IgTFVUUywgc2luY2UgdGhlc2UgZG8gbm90IHByZXNlcnZlIElEIG9yZGVyLgorICovCiAjZGVmaW5lIE5VTExfT1BfRk4oVHlwZSkKIAotI2RlZmluZSBNQVBfTUVSR0VEX09QUyhPUF9GTikgXAotICAgICAgICBNQVBfT1BTX0JBU0VEX09OX01FUkdFQUJJTElUWShOVUxMX09QX0ZOLCBPUF9GTikKKyNkZWZpbmUgTUFQX0RFRkVSUkFCTEVfT1BTKE9QX0ZOKSBcCisgICAgICAgIE1BUF9PUFNfQkFTRURfT05fVFlQRShPUF9GTiwgTlVMTF9PUF9GTiwgT1BfRk4sIE9QX0ZOKQorCisjZGVmaW5lIE1BUF9NRVJHRUFCTEVfT1BTKE9QX0ZOKSBcCisgICAgICAgIE1BUF9PUFNfQkFTRURfT05fVFlQRShOVUxMX09QX0ZOLCBOVUxMX09QX0ZOLCBOVUxMX09QX0ZOLCBPUF9GTikKKworI2RlZmluZSBNQVBfUkVOREVSQUJMRV9PUFMoT1BfRk4pIFwKKyAgICAgICAgTUFQX09QU19CQVNFRF9PTl9UWVBFKE5VTExfT1BfRk4sIE9QX0ZOLCBPUF9GTiwgT1BfRk4pCiAKIC8vIEdlbmVyYXRlIE9wSWQgZW51bQogI2RlZmluZSBJREVOVElUWV9GTihUeXBlKSBUeXBlLAogbmFtZXNwYWNlIFJlY29yZGVkT3BJZCB7CiAgICAgZW51bSB7Ci0gICAgICAgIE1BUF9PUFMoSURFTlRJVFlfRk4pCisgICAgICAgIE1BUF9PUFNfQkFTRURfT05fVFlQRShJREVOVElUWV9GTiwgSURFTlRJVFlfRk4sIElERU5USVRZX0ZOLCBJREVOVElUWV9GTikKICAgICAgICAgQ291bnQsCiAgICAgfTsKIH0KLXN0YXRpY19hc3NlcnQoUmVjb3JkZWRPcElkOjpBcmNPcCA9PSAwLAorc3RhdGljX2Fzc2VydChSZWNvcmRlZE9wSWQ6OlJlbmRlck5vZGVPcCA9PSAwLAogICAgICAgICAiRmlyc3QgaW5kZXggbXVzdCBiZSB6ZXJvIGZvciBMVVRzIHRvIHdvcmsiKTsKIAotI2RlZmluZSBCQVNFX1BBUkFNUyBjb25zdCBSZWN0JiB1bm1hcHBlZEJvdW5kcywgY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IFJlY3QmIGxvY2FsQ2xpcFJlY3QsIGNvbnN0IFNrUGFpbnQqIHBhaW50Ci0jZGVmaW5lIEJBU0VfUEFSQU1TX1BBSU5UTEVTUyBjb25zdCBSZWN0JiB1bm1hcHBlZEJvdW5kcywgY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IFJlY3QmIGxvY2FsQ2xpcFJlY3QKLSNkZWZpbmUgU1VQRVIoVHlwZSkgUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlR5cGUsIHVubWFwcGVkQm91bmRzLCBsb2NhbE1hdHJpeCwgbG9jYWxDbGlwUmVjdCwgcGFpbnQpCi0jZGVmaW5lIFNVUEVSX1BBSU5UTEVTUyhUeXBlKSBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6VHlwZSwgdW5tYXBwZWRCb3VuZHMsIGxvY2FsTWF0cml4LCBsb2NhbENsaXBSZWN0LCBudWxscHRyKQorI2RlZmluZSBCQVNFX1BBUkFNUyBjb25zdCBSZWN0JiB1bm1hcHBlZEJvdW5kcywgY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IENsaXBCYXNlKiBsb2NhbENsaXAsIGNvbnN0IFNrUGFpbnQqIHBhaW50CisjZGVmaW5lIEJBU0VfUEFSQU1TX1BBSU5UTEVTUyBjb25zdCBSZWN0JiB1bm1hcHBlZEJvdW5kcywgY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IENsaXBCYXNlKiBsb2NhbENsaXAKKyNkZWZpbmUgU1VQRVIoVHlwZSkgUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlR5cGUsIHVubWFwcGVkQm91bmRzLCBsb2NhbE1hdHJpeCwgbG9jYWxDbGlwLCBwYWludCkKKyNkZWZpbmUgU1VQRVJfUEFJTlRMRVNTKFR5cGUpIFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpUeXBlLCB1bm1hcHBlZEJvdW5kcywgbG9jYWxNYXRyaXgsIGxvY2FsQ2xpcCwgbnVsbHB0cikKIAogc3RydWN0IFJlY29yZGVkT3AgewogICAgIC8qIElEIGZyb20gUmVjb3JkZWRPcElkIC0gZ2VuZXJhbGx5IHVzZWQgZm9yIGp1bXBpbmcgaW50byBmdW5jdGlvbiB0YWJsZXMgKi8KQEAgLTk3LDggKzE1NCw4IEBACiAgICAgLyogdHJhbnNmb3JtIGluIHJlY29yZGluZyBzcGFjZSAodnMgRGlzcGxheUxpc3Qgb3JpZ2luKSAqLwogICAgIGNvbnN0IE1hdHJpeDQgbG9jYWxNYXRyaXg7CiAKLSAgICAvKiBjbGlwIGluIHJlY29yZGluZyBzcGFjZSAqLwotICAgIGNvbnN0IFJlY3QgbG9jYWxDbGlwUmVjdDsKKyAgICAvKiBjbGlwIGluIHJlY29yZGluZyBzcGFjZSAtIG51bGxwdHIgaWYgbm90IGNsaXBwZWQgKi8KKyAgICBjb25zdCBDbGlwQmFzZSogbG9jYWxDbGlwOwogCiAgICAgLyogb3B0aW9uYWwgcGFpbnQsIHN0b3JlZCBpbiBiYXNlIG9iamVjdCB0byBzaW1wbGlmeSBtZXJnaW5nIGxvZ2ljICovCiAgICAgY29uc3QgU2tQYWludCogcGFpbnQ7CkBAIC0xMDcsNyArMTY0LDcgQEAKICAgICAgICAgICAgIDogb3BJZChvcElkKQogICAgICAgICAgICAgLCB1bm1hcHBlZEJvdW5kcyh1bm1hcHBlZEJvdW5kcykKICAgICAgICAgICAgICwgbG9jYWxNYXRyaXgobG9jYWxNYXRyaXgpCi0gICAgICAgICAgICAsIGxvY2FsQ2xpcFJlY3QobG9jYWxDbGlwUmVjdCkKKyAgICAgICAgICAgICwgbG9jYWxDbGlwKGxvY2FsQ2xpcCkKICAgICAgICAgICAgICwgcGFpbnQocGFpbnQpIHt9CiB9OwogCkBAIC0xNTIsNiArMjA5LDUwIEBACiAgICAgLy8gVE9ETzogYXNzZXQgYXRsYXMvdGV4dHVyZSBpZCBsb29rdXA/CiB9OwogCitzdHJ1Y3QgQml0bWFwTWVzaE9wIDogUmVjb3JkZWRPcCB7CisgICAgQml0bWFwTWVzaE9wKEJBU0VfUEFSQU1TLCBjb25zdCBTa0JpdG1hcCogYml0bWFwLCBpbnQgbWVzaFdpZHRoLCBpbnQgbWVzaEhlaWdodCwKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0KiB2ZXJ0aWNlcywgY29uc3QgaW50KiBjb2xvcnMpCisgICAgICAgICAgICA6IFNVUEVSKEJpdG1hcE1lc2hPcCkKKyAgICAgICAgICAgICwgYml0bWFwKGJpdG1hcCkKKyAgICAgICAgICAgICwgbWVzaFdpZHRoKG1lc2hXaWR0aCkKKyAgICAgICAgICAgICwgbWVzaEhlaWdodChtZXNoSGVpZ2h0KQorICAgICAgICAgICAgLCB2ZXJ0aWNlcyh2ZXJ0aWNlcykKKyAgICAgICAgICAgICwgY29sb3JzKGNvbG9ycykge30KKyAgICBjb25zdCBTa0JpdG1hcCogYml0bWFwOworICAgIGNvbnN0IGludCBtZXNoV2lkdGg7CisgICAgY29uc3QgaW50IG1lc2hIZWlnaHQ7CisgICAgY29uc3QgZmxvYXQqIHZlcnRpY2VzOworICAgIGNvbnN0IGludCogY29sb3JzOworfTsKKworc3RydWN0IEJpdG1hcFJlY3RPcCA6IFJlY29yZGVkT3AgeworICAgIEJpdG1hcFJlY3RPcChCQVNFX1BBUkFNUywgY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgUmVjdCYgc3JjKQorICAgICAgICAgICAgOiBTVVBFUihCaXRtYXBSZWN0T3ApCisgICAgICAgICAgICAsIGJpdG1hcChiaXRtYXApCisgICAgICAgICAgICAsIHNyYyhzcmMpIHt9CisgICAgY29uc3QgU2tCaXRtYXAqIGJpdG1hcDsKKyAgICBjb25zdCBSZWN0IHNyYzsKK307CisKK3N0cnVjdCBDaXJjbGVQcm9wc09wIDogUmVjb3JkZWRPcCB7CisgICAgQ2lyY2xlUHJvcHNPcChjb25zdCBNYXRyaXg0JiBsb2NhbE1hdHJpeCwgY29uc3QgQ2xpcEJhc2UqIGxvY2FsQ2xpcCwgY29uc3QgU2tQYWludCogcGFpbnQsCisgICAgICAgICAgICBmbG9hdCogeCwgZmxvYXQqIHksIGZsb2F0KiByYWRpdXMpCisgICAgICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpDaXJjbGVQcm9wc09wLCBSZWN0KCksIGxvY2FsTWF0cml4LCBsb2NhbENsaXAsIHBhaW50KQorICAgICAgICAgICAgLCB4KHgpCisgICAgICAgICAgICAsIHkoeSkKKyAgICAgICAgICAgICwgcmFkaXVzKHJhZGl1cykge30KKyAgICBjb25zdCBmbG9hdCogeDsKKyAgICBjb25zdCBmbG9hdCogeTsKKyAgICBjb25zdCBmbG9hdCogcmFkaXVzOworfTsKKworc3RydWN0IEZ1bmN0b3JPcCA6IFJlY29yZGVkT3AgeworICAgIEZ1bmN0b3JPcChCQVNFX1BBUkFNU19QQUlOVExFU1MsIEZ1bmN0b3IqIGZ1bmN0b3IpCisgICAgICAgICAgICA6IFNVUEVSX1BBSU5UTEVTUyhGdW5jdG9yT3ApCisgICAgICAgICAgICAsIGZ1bmN0b3IoZnVuY3Rvcikge30KKyAgICBGdW5jdG9yKiBmdW5jdG9yOworfTsKKwogc3RydWN0IExpbmVzT3AgOiBSZWNvcmRlZE9wIHsKICAgICBMaW5lc09wKEJBU0VfUEFSQU1TLCBjb25zdCBmbG9hdCogcG9pbnRzLCBjb25zdCBpbnQgZmxvYXRDb3VudCkKICAgICAgICAgICAgIDogU1VQRVIoTGluZXNPcCkKQEAgLTE2Niw2ICsyNjcsMTUgQEAKICAgICAgICAgICAgIDogU1VQRVIoT3ZhbE9wKSB7fQogfTsKIAorc3RydWN0IFBhdGNoT3AgOiBSZWNvcmRlZE9wIHsKKyAgICBQYXRjaE9wKEJBU0VfUEFSQU1TLCBjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBSZXNfcG5nXzlwYXRjaCogcGF0Y2gpCisgICAgICAgICAgICA6IFNVUEVSKFBhdGNoT3ApCisgICAgICAgICAgICAsIGJpdG1hcChiaXRtYXApCisgICAgICAgICAgICAsIHBhdGNoKHBhdGNoKSB7fQorICAgIGNvbnN0IFNrQml0bWFwKiBiaXRtYXA7CisgICAgY29uc3QgUmVzX3BuZ185cGF0Y2gqIHBhdGNoOworfTsKKwogc3RydWN0IFBhdGhPcCA6IFJlY29yZGVkT3AgewogICAgIFBhdGhPcChCQVNFX1BBUkFNUywgY29uc3QgU2tQYXRoKiBwYXRoKQogICAgICAgICAgICAgOiBTVVBFUihQYXRoT3ApCkBAIC0xOTYsNiArMzA2LDI0IEBACiAgICAgY29uc3QgZmxvYXQgcnk7CiB9OwogCitzdHJ1Y3QgUm91bmRSZWN0UHJvcHNPcCA6IFJlY29yZGVkT3AgeworICAgIFJvdW5kUmVjdFByb3BzT3AoY29uc3QgTWF0cml4NCYgbG9jYWxNYXRyaXgsIGNvbnN0IENsaXBCYXNlKiBsb2NhbENsaXAsIGNvbnN0IFNrUGFpbnQqIHBhaW50LAorICAgICAgICAgICAgZmxvYXQqIGxlZnQsIGZsb2F0KiB0b3AsIGZsb2F0KiByaWdodCwgZmxvYXQqIGJvdHRvbSwgZmxvYXQgKnJ4LCBmbG9hdCAqcnkpCisgICAgICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpSb3VuZFJlY3RQcm9wc09wLCBSZWN0KCksIGxvY2FsTWF0cml4LCBsb2NhbENsaXAsIHBhaW50KQorICAgICAgICAgICAgLCBsZWZ0KGxlZnQpCisgICAgICAgICAgICAsIHRvcCh0b3ApCisgICAgICAgICAgICAsIHJpZ2h0KHJpZ2h0KQorICAgICAgICAgICAgLCBib3R0b20oYm90dG9tKQorICAgICAgICAgICAgLCByeChyeCkKKyAgICAgICAgICAgICwgcnkocnkpIHt9CisgICAgY29uc3QgZmxvYXQqIGxlZnQ7CisgICAgY29uc3QgZmxvYXQqIHRvcDsKKyAgICBjb25zdCBmbG9hdCogcmlnaHQ7CisgICAgY29uc3QgZmxvYXQqIGJvdHRvbTsKKyAgICBjb25zdCBmbG9hdCogcng7CisgICAgY29uc3QgZmxvYXQqIHJ5OworfTsKKwogLyoqCiAgKiBSZWFsLXRpbWUsIGR5bmFtaWMtbGl0IHNoYWRvdy4KICAqCkBAIC0yMDYsMTIgKzMzNCwxMyBAQAogICovCiBzdHJ1Y3QgU2hhZG93T3AgOiBSZWNvcmRlZE9wIHsKICAgICBTaGFkb3dPcChjb25zdCBSZW5kZXJOb2RlT3AmIGNhc3Rlck9wLCBmbG9hdCBjYXN0ZXJBbHBoYSwgY29uc3QgU2tQYXRoKiBjYXN0ZXJQYXRoLAotICAgICAgICAgICAgY29uc3QgUmVjdCYgY2xpcFJlY3QsIGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyKQotICAgICAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6U2hhZG93T3AsIFJlY3QoKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgY2xpcFJlY3QsIG51bGxwdHIpCisgICAgICAgICAgICBjb25zdCBSZWN0JiBsb2NhbENsaXBSZWN0LCBjb25zdCBWZWN0b3IzJiBsaWdodENlbnRlcikKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OlNoYWRvd09wLCBSZWN0KCksIE1hdHJpeDQ6OmlkZW50aXR5KCksIG51bGxwdHIsIG51bGxwdHIpCiAgICAgICAgICAgICAsIHNoYWRvd01hdHJpeFhZKGNhc3Rlck9wLmxvY2FsTWF0cml4KQogICAgICAgICAgICAgLCBzaGFkb3dNYXRyaXhaKGNhc3Rlck9wLmxvY2FsTWF0cml4KQogICAgICAgICAgICAgLCBjYXN0ZXJBbHBoYShjYXN0ZXJBbHBoYSkKICAgICAgICAgICAgICwgY2FzdGVyUGF0aChjYXN0ZXJQYXRoKQorICAgICAgICAgICAgLCBsb2NhbENsaXBSZWN0KGxvY2FsQ2xpcFJlY3QpCiAgICAgICAgICAgICAsIGxpZ2h0Q2VudGVyKGxpZ2h0Q2VudGVyKSB7CiAgICAgICAgIGNvbnN0IFJlbmRlck5vZGUmIG5vZGUgPSAqY2FzdGVyT3AucmVuZGVyTm9kZTsKICAgICAgICAgbm9kZS5hcHBseVZpZXdQcm9wZXJ0eVRyYW5zZm9ybXMoc2hhZG93TWF0cml4WFksIGZhbHNlKTsKQEAgLTIyMSw2ICszNTAsNyBAQAogICAgIE1hdHJpeDQgc2hhZG93TWF0cml4WjsKICAgICBjb25zdCBmbG9hdCBjYXN0ZXJBbHBoYTsKICAgICBjb25zdCBTa1BhdGgqIGNhc3RlclBhdGg7CisgICAgY29uc3QgUmVjdCBsb2NhbENsaXBSZWN0OwogICAgIGNvbnN0IFZlY3RvcjMgbGlnaHRDZW50ZXI7CiB9OwogCkBAIC0yNDksMTEgKzM3OSwzNCBAQAogICAgIGNvbnN0IGZsb2F0IHk7CiB9OwogCitzdHJ1Y3QgVGV4dE9uUGF0aE9wIDogUmVjb3JkZWRPcCB7CisgICAgVGV4dE9uUGF0aE9wKEJBU0VfUEFSQU1TLCBjb25zdCBnbHlwaF90KiBnbHlwaHMsIGludCBnbHlwaENvdW50LAorICAgICAgICAgICAgY29uc3QgU2tQYXRoKiBwYXRoLCBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0KQorICAgICAgICAgICAgOiBTVVBFUihUZXh0T25QYXRoT3ApCisgICAgICAgICAgICAsIGdseXBocyhnbHlwaHMpCisgICAgICAgICAgICAsIGdseXBoQ291bnQoZ2x5cGhDb3VudCkKKyAgICAgICAgICAgICwgcGF0aChwYXRoKQorICAgICAgICAgICAgLCBoT2Zmc2V0KGhPZmZzZXQpCisgICAgICAgICAgICAsIHZPZmZzZXQodk9mZnNldCkge30KKyAgICBjb25zdCBnbHlwaF90KiBnbHlwaHM7CisgICAgY29uc3QgaW50IGdseXBoQ291bnQ7CisKKyAgICBjb25zdCBTa1BhdGgqIHBhdGg7CisgICAgY29uc3QgZmxvYXQgaE9mZnNldDsKKyAgICBjb25zdCBmbG9hdCB2T2Zmc2V0OworfTsKKworc3RydWN0IFRleHR1cmVMYXllck9wIDogUmVjb3JkZWRPcCB7CisgICAgVGV4dHVyZUxheWVyT3AoQkFTRV9QQVJBTVNfUEFJTlRMRVNTLCBMYXllciogbGF5ZXIpCisgICAgICAgICAgICA6IFNVUEVSX1BBSU5UTEVTUyhUZXh0dXJlTGF5ZXJPcCkKKyAgICAgICAgICAgICwgbGF5ZXIobGF5ZXIpIHt9CisgICAgTGF5ZXIqIGxheWVyOworfTsKKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gTGF5ZXJzCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKLQogLyoqCiAgKiBTdGF0ZWZ1bCBvcGVyYXRpb24hIGRlbm90ZXMgdGhlIGNyZWF0aW9uIG9mIGFuIG9mZi1zY3JlZW4gbGF5ZXIsCiAgKiBhbmQgdGhhdCBjb21tYW5kcyBmb2xsb3dpbmcgd2lsbCByZW5kZXIgaW50byBpdC4KQEAgLTI3MSw3ICs0MjQsNDcgQEAKICAqLwogc3RydWN0IEVuZExheWVyT3AgOiBSZWNvcmRlZE9wIHsKICAgICBFbmRMYXllck9wKCkKLSAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkVuZExheWVyT3AsIFJlY3QoMCwgMCksIE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMCwgMCksIG51bGxwdHIpIHt9CisgICAgICAgICAgICA6IFJlY29yZGVkT3AoUmVjb3JkZWRPcElkOjpFbmRMYXllck9wLCBSZWN0KCksIE1hdHJpeDQ6OmlkZW50aXR5KCksIG51bGxwdHIsIG51bGxwdHIpIHt9Cit9OworCitzdHJ1Y3QgQmVnaW5VbmNsaXBwZWRMYXllck9wIDogUmVjb3JkZWRPcCB7CisgICAgQmVnaW5VbmNsaXBwZWRMYXllck9wKEJBU0VfUEFSQU1TKQorICAgICAgICAgICAgOiBTVVBFUihCZWdpblVuY2xpcHBlZExheWVyT3ApIHt9Cit9OworCitzdHJ1Y3QgRW5kVW5jbGlwcGVkTGF5ZXJPcCA6IFJlY29yZGVkT3AgeworICAgIEVuZFVuY2xpcHBlZExheWVyT3AoKQorICAgICAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6RW5kVW5jbGlwcGVkTGF5ZXJPcCwgUmVjdCgpLCBNYXRyaXg0OjppZGVudGl0eSgpLCBudWxscHRyLCBudWxscHRyKSB7fQorfTsKKworc3RydWN0IENvcHlUb0xheWVyT3AgOiBSZWNvcmRlZE9wIHsKKyAgICBDb3B5VG9MYXllck9wKGNvbnN0IFJlY29yZGVkT3AmIG9wLCBPZmZzY3JlZW5CdWZmZXIqKiBsYXllckhhbmRsZSkKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkNvcHlUb0xheWVyT3AsCisgICAgICAgICAgICAgICAgICAgIG9wLnVubWFwcGVkQm91bmRzLAorICAgICAgICAgICAgICAgICAgICBvcC5sb2NhbE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgLy8gY2xpcCBpbnRlbnRpb25hbGx5IGlnbm9yZWQKKyAgICAgICAgICAgICAgICAgICAgb3AucGFpbnQpCisgICAgICAgICAgICAsIGxheWVySGFuZGxlKGxheWVySGFuZGxlKSB7fQorCisgICAgLy8gUmVjb3JkcyBhIGhhbmRsZSB0byB0aGUgTGF5ZXIgb2JqZWN0LCBzaW5jZSB0aGUgTGF5ZXIgaXRzZWxmIHdvbid0IGJlCisgICAgLy8gY29uc3RydWN0ZWQgdW50aWwgYWZ0ZXIgdGhpcyBvcGVyYXRpb24gaXMgY29uc3RydWN0ZWQuCisgICAgT2Zmc2NyZWVuQnVmZmVyKiogbGF5ZXJIYW5kbGU7Cit9OworCisKKy8vIGRyYXcgdGhlIHBhcmFtZXRlciBsYXllciB1bmRlcm5lYXRoCitzdHJ1Y3QgQ29weUZyb21MYXllck9wIDogUmVjb3JkZWRPcCB7CisgICAgQ29weUZyb21MYXllck9wKGNvbnN0IFJlY29yZGVkT3AmIG9wLCBPZmZzY3JlZW5CdWZmZXIqKiBsYXllckhhbmRsZSkKKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkNvcHlGcm9tTGF5ZXJPcCwKKyAgICAgICAgICAgICAgICAgICAgb3AudW5tYXBwZWRCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgIG9wLmxvY2FsTWF0cml4LAorICAgICAgICAgICAgICAgICAgICBudWxscHRyLCAvLyBjbGlwIGludGVudGlvbmFsbHkgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICBvcC5wYWludCkKKyAgICAgICAgICAgICwgbGF5ZXJIYW5kbGUobGF5ZXJIYW5kbGUpIHt9CisKKyAgICAvLyBSZWNvcmRzIGEgaGFuZGxlIHRvIHRoZSBMYXllciBvYmplY3QsIHNpbmNlIHRoZSBMYXllciBpdHNlbGYgd29uJ3QgYmUKKyAgICAvLyBjb25zdHJ1Y3RlZCB1bnRpbCBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBjb25zdHJ1Y3RlZC4KKyAgICBPZmZzY3JlZW5CdWZmZXIqKiBsYXllckhhbmRsZTsKIH07CiAKIC8qKgpAQCAtMjg1LDE4ICs0NzgsMTggQEAKICAgICBMYXllck9wKEJBU0VfUEFSQU1TLCBPZmZzY3JlZW5CdWZmZXIqKiBsYXllckhhbmRsZSkKICAgICAgICAgICAgIDogU1VQRVJfUEFJTlRMRVNTKExheWVyT3ApCiAgICAgICAgICAgICAsIGxheWVySGFuZGxlKGxheWVySGFuZGxlKQotICAgICAgICAgICAgLCBhbHBoYShwYWludC0+Z2V0QWxwaGEoKSAvIDI1NS4wZikKKyAgICAgICAgICAgICwgYWxwaGEocGFpbnQgPyBwYWludC0+Z2V0QWxwaGEoKSAvIDI1NS4wZiA6IDEuMGYpCiAgICAgICAgICAgICAsIG1vZGUoUGFpbnRVdGlsczo6Z2V0WGZlcm1vZGVEaXJlY3QocGFpbnQpKQotICAgICAgICAgICAgLCBjb2xvckZpbHRlcihwYWludC0+Z2V0Q29sb3JGaWx0ZXIoKSkKKyAgICAgICAgICAgICwgY29sb3JGaWx0ZXIocGFpbnQgPyBwYWludC0+Z2V0Q29sb3JGaWx0ZXIoKSA6IG51bGxwdHIpCiAgICAgICAgICAgICAsIGRlc3Ryb3kodHJ1ZSkge30KIAogICAgIExheWVyT3AoUmVuZGVyTm9kZSYgbm9kZSkKLSAgICAgICAgOiBSZWNvcmRlZE9wKFJlY29yZGVkT3BJZDo6TGF5ZXJPcCwgUmVjdChub2RlLmdldFdpZHRoKCksIG5vZGUuZ2V0SGVpZ2h0KCkpLCBNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KG5vZGUuZ2V0V2lkdGgoKSwgbm9kZS5nZXRIZWlnaHQoKSksIG51bGxwdHIpCi0gICAgICAgICwgbGF5ZXJIYW5kbGUobm9kZS5nZXRMYXllckhhbmRsZSgpKQotICAgICAgICAsIGFscGhhKG5vZGUucHJvcGVydGllcygpLmxheWVyUHJvcGVydGllcygpLmFscGhhKCkgLyAyNTUuMGYpCi0gICAgICAgICwgbW9kZShub2RlLnByb3BlcnRpZXMoKS5sYXllclByb3BlcnRpZXMoKS54ZmVyTW9kZSgpKQotICAgICAgICAsIGNvbG9yRmlsdGVyKG5vZGUucHJvcGVydGllcygpLmxheWVyUHJvcGVydGllcygpLmNvbG9yRmlsdGVyKCkpCi0gICAgICAgICwgZGVzdHJveShmYWxzZSkge30KKyAgICAgICAgICAgIDogUmVjb3JkZWRPcChSZWNvcmRlZE9wSWQ6OkxheWVyT3AsIFJlY3Qobm9kZS5nZXRXaWR0aCgpLCBub2RlLmdldEhlaWdodCgpKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgbnVsbHB0ciwgbnVsbHB0cikKKyAgICAgICAgICAgICwgbGF5ZXJIYW5kbGUobm9kZS5nZXRMYXllckhhbmRsZSgpKQorICAgICAgICAgICAgLCBhbHBoYShub2RlLnByb3BlcnRpZXMoKS5sYXllclByb3BlcnRpZXMoKS5hbHBoYSgpIC8gMjU1LjBmKQorICAgICAgICAgICAgLCBtb2RlKG5vZGUucHJvcGVydGllcygpLmxheWVyUHJvcGVydGllcygpLnhmZXJNb2RlKCkpCisgICAgICAgICAgICAsIGNvbG9yRmlsdGVyKG5vZGUucHJvcGVydGllcygpLmxheWVyUHJvcGVydGllcygpLmNvbG9yRmlsdGVyKCkpCisgICAgICAgICAgICAsIGRlc3Ryb3koZmFsc2UpIHt9CiAKICAgICAvLyBSZWNvcmRzIGEgaGFuZGxlIHRvIHRoZSBMYXllciBvYmplY3QsIHNpbmNlIHRoZSBMYXllciBpdHNlbGYgd29uJ3QgYmUKICAgICAvLyBjb25zdHJ1Y3RlZCB1bnRpbCBhZnRlciB0aGlzIG9wZXJhdGlvbiBpcyBjb25zdHJ1Y3RlZC4KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuY3BwIGIvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKaW5kZXggMTQ4Yzk0MC4uNzg4NTVlNSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKKysrIGIvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5jcHAKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIlJlY29yZGluZ0NhbnZhcy5oIgogCisjaW5jbHVkZSAiRGVmZXJyZWRMYXllclVwZGF0ZXIuaCIKICNpbmNsdWRlICJSZWNvcmRlZE9wLmgiCiAjaW5jbHVkZSAiUmVuZGVyTm9kZS5oIgogCkBAIC0zOCwxNCArMzksMTQgQEAKICAgICAgICAgICAgICJwcmVwYXJlRGlydHkgY2FsbGVkIGEgc2Vjb25kIHRpbWUgZHVyaW5nIGEgcmVjb3JkaW5nISIpOwogICAgIG1EaXNwbGF5TGlzdCA9IG5ldyBEaXNwbGF5TGlzdCgpOwogCi0gICAgbVN0YXRlLmluaXRpYWxpemVTYXZlU3RhY2sod2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgVmVjdG9yMygpKTsKKyAgICBtU3RhdGUuaW5pdGlhbGl6ZVJlY29yZGluZ1NhdmVTdGFjayh3aWR0aCwgaGVpZ2h0KTsKIAogICAgIG1EZWZlcnJlZEJhcnJpZXJUeXBlID0gRGVmZXJyZWRCYXJyaWVyVHlwZTo6SW5PcmRlcjsKICAgICBtU3RhdGUuc2V0RGlydHlDbGlwKGZhbHNlKTsKLSAgICBtUmVzdG9yZVNhdmVDb3VudCA9IC0xOwogfQogCiBEaXNwbGF5TGlzdCogUmVjb3JkaW5nQ2FudmFzOjpmaW5pc2hSZWNvcmRpbmcoKSB7CisgICAgcmVzdG9yZVRvQ291bnQoMSk7CiAgICAgbVBhaW50TWFwLmNsZWFyKCk7CiAgICAgbVJlZ2lvbk1hcC5jbGVhcigpOwogICAgIG1QYXRoTWFwLmNsZWFyKCk7CkBAIC04Miw2ICs4Myw4IEBACiB2b2lkIFJlY29yZGluZ0NhbnZhczo6b25TbmFwc2hvdFJlc3RvcmVkKGNvbnN0IFNuYXBzaG90JiByZW1vdmVkLCBjb25zdCBTbmFwc2hvdCYgcmVzdG9yZWQpIHsKICAgICBpZiAocmVtb3ZlZC5mbGFncyAmIFNuYXBzaG90OjprRmxhZ0lzRmJvTGF5ZXIpIHsKICAgICAgICAgYWRkT3AobmV3IChhbGxvYygpKSBFbmRMYXllck9wKCkpOworICAgIH0gZWxzZSBpZiAocmVtb3ZlZC5mbGFncyAmIFNuYXBzaG90OjprRmxhZ0lzTGF5ZXIpIHsKKyAgICAgICAgYWRkT3AobmV3IChhbGxvYygpKSBFbmRVbmNsaXBwZWRMYXllck9wKCkpOwogICAgIH0KIH0KIApAQCAtOTQsMjggKzk3LDE4IEBACiB9CiAKIHZvaWQgUmVjb3JkaW5nQ2FudmFzOjpSZWNvcmRpbmdDYW52YXM6OnJlc3RvcmUoKSB7Ci0gICAgaWYgKG1SZXN0b3JlU2F2ZUNvdW50IDwgMCkgewotICAgICAgICByZXN0b3JlVG9Db3VudChnZXRTYXZlQ291bnQoKSAtIDEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbVJlc3RvcmVTYXZlQ291bnQtLTsKICAgICBtU3RhdGUucmVzdG9yZSgpOwogfQogCiB2b2lkIFJlY29yZGluZ0NhbnZhczo6cmVzdG9yZVRvQ291bnQoaW50IHNhdmVDb3VudCkgewotICAgIG1SZXN0b3JlU2F2ZUNvdW50ID0gc2F2ZUNvdW50OwogICAgIG1TdGF0ZS5yZXN0b3JlVG9Db3VudChzYXZlQ291bnQpOwogfQogCi1pbnQgUmVjb3JkaW5nQ2FudmFzOjpzYXZlTGF5ZXIoZmxvYXQgbGVmdCwgZmxvYXQgdG9wLCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBjb25zdCBTa1BhaW50KiBwYWludCwKLSAgICAgICAgU2tDYW52YXM6OlNhdmVGbGFncyBmbGFncykgewotICAgIGlmICghKGZsYWdzICYgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZykpIHsKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgidW5jbGlwcGVkIGxheWVycyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgfQoraW50IFJlY29yZGluZ0NhbnZhczo6c2F2ZUxheWVyKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwKKyAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQsIFNrQ2FudmFzOjpTYXZlRmxhZ3MgZmxhZ3MpIHsKICAgICAvLyBmb3JjZSBtYXRyaXgvY2xpcCBpc29sYXRpb24gZm9yIGxheWVyCiAgICAgZmxhZ3MgfD0gU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnIHwgU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWc7Ci0KKyAgICBib29sIGNsaXBwZWRMYXllciA9IGZsYWdzICYgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZzsKIAogICAgIGNvbnN0IFNuYXBzaG90JiBwcmV2aW91cyA9ICptU3RhdGUuY3VycmVudFNuYXBzaG90KCk7CiAKQEAgLTEyMyw1MSArMTE2LDcwIEBACiAgICAgLy8gb3BlcmF0aW9ucyB3aWxsIGJlIGFibGUgdG8gc3RvcmUgYW5kIHJlc3RvcmUgdGhlIGN1cnJlbnQgY2xpcCBhbmQgdHJhbnNmb3JtIGluZm8sIGFuZAogICAgIC8vIHF1aWNrIHJlamVjdGlvbiB3aWxsIGJlIGNvcnJlY3QgKGZvciBkaXNwbGF5IGxpc3RzKQogCi0gICAgY29uc3QgUmVjdCB1bnRyYW5zZm9ybWVkQm91bmRzKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgY29uc3QgUmVjdCB1bm1hcHBlZEJvdW5kcyhsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogCiAgICAgLy8gZGV0ZXJtaW5lIGNsaXBwZWQgYm91bmRzIHJlbGF0aXZlIHRvIHByZXZpb3VzIHZpZXdwb3J0LgotICAgIFJlY3QgdmlzaWJsZUJvdW5kcyA9IHVudHJhbnNmb3JtZWRCb3VuZHM7CisgICAgUmVjdCB2aXNpYmxlQm91bmRzID0gdW5tYXBwZWRCb3VuZHM7CiAgICAgcHJldmlvdXMudHJhbnNmb3JtLT5tYXBSZWN0KHZpc2libGVCb3VuZHMpOwogCisgICAgaWYgKENDX1VOTElLRUxZKCFjbGlwcGVkTGF5ZXIKKyAgICAgICAgICAgICYmIHByZXZpb3VzLnRyYW5zZm9ybS0+cmVjdFRvUmVjdCgpCisgICAgICAgICAgICAmJiB2aXNpYmxlQm91bmRzLmNvbnRhaW5zKHByZXZpb3VzLmdldFJlbmRlclRhcmdldENsaXAoKSkpKSB7CisgICAgICAgIC8vIHVubGlrZWx5IGNhc2Ugd2hlcmUgYW4gdW5jbGlwcGVkIHNhdmVsYXllciBpcyByZWNvcmRlZCB3aXRoIGEgY2xpcCBpdCBjYW4gdXNlLAorICAgICAgICAvLyBhcyBub25lIG9mIGl0cyB1bmFmZmVjdGVkL3VuY2xpcHBlZCBhcmVhIGlzIHZpc2libGUKKyAgICAgICAgY2xpcHBlZExheWVyID0gdHJ1ZTsKKyAgICAgICAgZmxhZ3MgfD0gU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZzsKKyAgICB9CiAKICAgICB2aXNpYmxlQm91bmRzLmRvSW50ZXJzZWN0KHByZXZpb3VzLmdldFJlbmRlclRhcmdldENsaXAoKSk7CiAgICAgdmlzaWJsZUJvdW5kcy5zbmFwVG9QaXhlbEJvdW5kYXJpZXMoKTsKLQotICAgIFJlY3QgcHJldmlvdXNWaWV3cG9ydCgwLCAwLCBwcmV2aW91cy5nZXRWaWV3cG9ydFdpZHRoKCksIHByZXZpb3VzLmdldFZpZXdwb3J0SGVpZ2h0KCkpOwotICAgIHZpc2libGVCb3VuZHMuZG9JbnRlcnNlY3QocHJldmlvdXNWaWV3cG9ydCk7CisgICAgdmlzaWJsZUJvdW5kcy5kb0ludGVyc2VjdChSZWN0KHByZXZpb3VzLmdldFZpZXdwb3J0V2lkdGgoKSwgcHJldmlvdXMuZ2V0Vmlld3BvcnRIZWlnaHQoKSkpOwogCiAgICAgLy8gTWFwIHZpc2libGUgYm91bmRzIGJhY2sgdG8gbGF5ZXIgc3BhY2UsIGFuZCBpbnRlcnNlY3Qgd2l0aCBwYXJhbWV0ZXIgYm91bmRzCiAgICAgUmVjdCBsYXllckJvdW5kcyA9IHZpc2libGVCb3VuZHM7CiAgICAgTWF0cml4NCBpbnZlcnNlOwogICAgIGludmVyc2UubG9hZEludmVyc2UoKnByZXZpb3VzLnRyYW5zZm9ybSk7CiAgICAgaW52ZXJzZS5tYXBSZWN0KGxheWVyQm91bmRzKTsKLSAgICBsYXllckJvdW5kcy5kb0ludGVyc2VjdCh1bnRyYW5zZm9ybWVkQm91bmRzKTsKKyAgICBsYXllckJvdW5kcy5kb0ludGVyc2VjdCh1bm1hcHBlZEJvdW5kcyk7CiAKICAgICBpbnQgc2F2ZVZhbHVlID0gbVN0YXRlLnNhdmUoKGludCkgZmxhZ3MpOwogICAgIFNuYXBzaG90JiBzbmFwc2hvdCA9ICptU3RhdGUud3JpdGFibGVTbmFwc2hvdCgpOwogCi0gICAgLy8gbGF5ZXJCb3VuZHMgaXMgbm93IG9yaWdpbmFsIGJvdW5kcywgYnV0IHdpdGggY2xpcHBlZCB0byBjbGlwCi0gICAgLy8gYW5kIHZpZXdwb3J0IHRvIGVuc3VyZSBpdCdzIG1pbmltYWwgc2l6ZS4KLSAgICBpZiAobGF5ZXJCb3VuZHMuaXNFbXB0eSgpIHx8IHVudHJhbnNmb3JtZWRCb3VuZHMuaXNFbXB0eSgpKSB7CisgICAgLy8gbGF5ZXJCb3VuZHMgaXMgaW4gb3JpZ2luYWwgYm91bmRzIHNwYWNlLCBidXQgY2xpcHBlZCBieSBjdXJyZW50IHJlY29yZGluZyBjbGlwCisgICAgaWYgKGxheWVyQm91bmRzLmlzRW1wdHkoKSB8fCB1bm1hcHBlZEJvdW5kcy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHJlY29yZGluZyBsYXllciwgc2luY2UgaXQncyBiZWVuIHJlamVjdGVkCi0gICAgICAgIHNuYXBzaG90LnJlc2V0Q2xpcCgwLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKENDX0xJS0VMWShjbGlwcGVkTGF5ZXIpKSB7CisgICAgICAgICAgICBzbmFwc2hvdC5yZXNldENsaXAoMCwgMCwgMCwgMCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHNhdmVWYWx1ZTsKICAgICB9CiAKLSAgICBzbmFwc2hvdC5mbGFncyB8PSBTbmFwc2hvdDo6a0ZsYWdGYm9UYXJnZXQgfCBTbmFwc2hvdDo6a0ZsYWdJc0Zib0xheWVyOwotICAgIHNuYXBzaG90LmluaXRpYWxpemVWaWV3cG9ydCh1bnRyYW5zZm9ybWVkQm91bmRzLmdldFdpZHRoKCksIHVudHJhbnNmb3JtZWRCb3VuZHMuZ2V0SGVpZ2h0KCkpOwotICAgIHNuYXBzaG90LnRyYW5zZm9ybS0+bG9hZFRyYW5zbGF0ZSgtdW50cmFuc2Zvcm1lZEJvdW5kcy5sZWZ0LCAtdW50cmFuc2Zvcm1lZEJvdW5kcy50b3AsIDAuMGYpOworICAgIGlmIChDQ19MSUtFTFkoY2xpcHBlZExheWVyKSkgeworICAgICAgICBhdXRvIHByZXZpb3VzQ2xpcCA9IGdldFJlY29yZGVkQ2xpcCgpOyAvLyBub3RlOiBkb25lIGJlZm9yZSBuZXcgc25hcHNob3QncyBjbGlwIGhhcyBjaGFuZ2VkCiAKLSAgICBSZWN0IGNsaXAgPSBsYXllckJvdW5kczsKLSAgICBjbGlwLnRyYW5zbGF0ZSgtdW50cmFuc2Zvcm1lZEJvdW5kcy5sZWZ0LCAtdW50cmFuc2Zvcm1lZEJvdW5kcy50b3ApOwotICAgIHNuYXBzaG90LnJlc2V0Q2xpcChjbGlwLmxlZnQsIGNsaXAudG9wLCBjbGlwLnJpZ2h0LCBjbGlwLmJvdHRvbSk7Ci0gICAgc25hcHNob3Qucm91bmRSZWN0Q2xpcFN0YXRlID0gbnVsbHB0cjsKKyAgICAgICAgc25hcHNob3QuZmxhZ3MgfD0gU25hcHNob3Q6OmtGbGFnSXNMYXllciB8IFNuYXBzaG90OjprRmxhZ0lzRmJvTGF5ZXI7CisgICAgICAgIHNuYXBzaG90LmluaXRpYWxpemVWaWV3cG9ydCh1bm1hcHBlZEJvdW5kcy5nZXRXaWR0aCgpLCB1bm1hcHBlZEJvdW5kcy5nZXRIZWlnaHQoKSk7CisgICAgICAgIHNuYXBzaG90LnRyYW5zZm9ybS0+bG9hZFRyYW5zbGF0ZSgtdW5tYXBwZWRCb3VuZHMubGVmdCwgLXVubWFwcGVkQm91bmRzLnRvcCwgMC4wZik7CiAKLSAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEJlZ2luTGF5ZXJPcCgKLSAgICAgICAgICAgIFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKLSAgICAgICAgICAgICpwcmV2aW91cy50cmFuc2Zvcm0sIC8vIHRyYW5zZm9ybSB0byAqZHJhdyogd2l0aAotICAgICAgICAgICAgcHJldmlvdXMuZ2V0UmVuZGVyVGFyZ2V0Q2xpcCgpLCAvLyBjbGlwIHRvICpkcmF3KiB3aXRoCi0gICAgICAgICAgICByZWZQYWludChwYWludCkpKTsKKyAgICAgICAgUmVjdCBjbGlwID0gbGF5ZXJCb3VuZHM7CisgICAgICAgIGNsaXAudHJhbnNsYXRlKC11bm1hcHBlZEJvdW5kcy5sZWZ0LCAtdW5tYXBwZWRCb3VuZHMudG9wKTsKKyAgICAgICAgc25hcHNob3QucmVzZXRDbGlwKGNsaXAubGVmdCwgY2xpcC50b3AsIGNsaXAucmlnaHQsIGNsaXAuYm90dG9tKTsKKyAgICAgICAgc25hcHNob3Qucm91bmRSZWN0Q2xpcFN0YXRlID0gbnVsbHB0cjsKKworICAgICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEJlZ2luTGF5ZXJPcCgKKyAgICAgICAgICAgICAgICB1bm1hcHBlZEJvdW5kcywKKyAgICAgICAgICAgICAgICAqcHJldmlvdXMudHJhbnNmb3JtLCAvLyB0cmFuc2Zvcm0gdG8gKmRyYXcqIHdpdGgKKyAgICAgICAgICAgICAgICBwcmV2aW91c0NsaXAsIC8vIGNsaXAgdG8gKmRyYXcqIHdpdGgKKyAgICAgICAgICAgICAgICByZWZQYWludChwYWludCkpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzbmFwc2hvdC5mbGFncyB8PSBTbmFwc2hvdDo6a0ZsYWdJc0xheWVyOworCisgICAgICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgQmVnaW5VbmNsaXBwZWRMYXllck9wKAorICAgICAgICAgICAgICAgIHVubWFwcGVkQm91bmRzLAorICAgICAgICAgICAgICAgICptU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKKyAgICAgICAgICAgICAgICByZWZQYWludChwYWludCkpKTsKKyAgICB9CiAKICAgICByZXR1cm4gc2F2ZVZhbHVlOwogfQpAQCAtMTk3LDggKzIwOSw3IEBACiAKIC8vIENsaXAKIGJvb2wgUmVjb3JkaW5nQ2FudmFzOjpnZXRDbGlwQm91bmRzKFNrUmVjdCogb3V0UmVjdCkgY29uc3QgewotICAgIFJlY3QgYm91bmRzID0gbVN0YXRlLmdldExvY2FsQ2xpcEJvdW5kcygpOwotICAgICpvdXRSZWN0ID0gU2tSZWN0OjpNYWtlTFRSQihib3VuZHMubGVmdCwgYm91bmRzLnRvcCwgYm91bmRzLnJpZ2h0LCBib3VuZHMuYm90dG9tKTsKKyAgICAqb3V0UmVjdCA9IG1TdGF0ZS5nZXRMb2NhbENsaXBCb3VuZHMoKS50b1NrUmVjdCgpOwogICAgIHJldHVybiAhKG91dFJlY3QtPmlzRW1wdHkoKSk7CiB9CiBib29sIFJlY29yZGluZ0NhbnZhczo6cXVpY2tSZWplY3RSZWN0KGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSkgY29uc3QgewpAQCAtMjI5LDExICsyNDAsMTAgQEAKIH0KIAogdm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdQYWludChjb25zdCBTa1BhaW50JiBwYWludCkgewotICAgIC8vIFRPRE86IG1vcmUgZWZmaWNpZW50IHJlY29yZGluZz8KICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFJlY3RPcCgKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCAvLyBPSywgc2luY2Ugd2UndmUgbm90IHBhc3NlZCB0cmFuc2Zvcm0KICAgICAgICAgICAgIE1hdHJpeDQ6OmlkZW50aXR5KCksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpKSk7CiB9CiAKQEAgLTI1Myw3ICsyNjMsNyBAQAogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgUG9pbnRzT3AoCiAgICAgICAgICAgICBjYWxjQm91bmRzT2ZQb2ludHMocG9pbnRzLCBmbG9hdENvdW50KSwKICAgICAgICAgICAgICptU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksIHJlZkJ1ZmZlcjxmbG9hdD4ocG9pbnRzLCBmbG9hdENvdW50KSwgZmxvYXRDb3VudCkpOwogfQogCkBAIC0yNjQsNyArMjc0LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIExpbmVzT3AoCiAgICAgICAgICAgICBjYWxjQm91bmRzT2ZQb2ludHMocG9pbnRzLCBmbG9hdENvdW50KSwKICAgICAgICAgICAgICptU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksIHJlZkJ1ZmZlcjxmbG9hdD4ocG9pbnRzLCBmbG9hdENvdW50KSwgZmxvYXRDb3VudCkpOwogfQogCkBAIC0yNzIsNyArMjgyLDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFJlY3RPcCgKICAgICAgICAgICAgIFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSkpOwogfQogCkBAIC0zMDUsNyArMzE1LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFNpbXBsZVJlY3RzT3AoCiAgICAgICAgICAgICBSZWN0KGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSwgcmVjdERhdGEsIHZlcnRleENvdW50KSk7CiB9CiAKQEAgLTMzOSwyMCArMzQ5LDU4IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBSb3VuZFJlY3RPcCgKICAgICAgICAgICAgIFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSwgcngsIHJ5KSk7CiB9CiAKK3ZvaWQgUmVjb3JkaW5nQ2FudmFzOjpkcmF3Um91bmRSZWN0KAorICAgICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogbGVmdCwgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHRvcCwKKyAgICAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHJpZ2h0LCBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogYm90dG9tLAorICAgICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcngsIENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiByeSwKKyAgICAgICAgQ2FudmFzUHJvcGVydHlQYWludCogcGFpbnQpIHsKKyAgICBtRGlzcGxheUxpc3QtPnJlZihsZWZ0KTsKKyAgICBtRGlzcGxheUxpc3QtPnJlZih0b3ApOworICAgIG1EaXNwbGF5TGlzdC0+cmVmKHJpZ2h0KTsKKyAgICBtRGlzcGxheUxpc3QtPnJlZihib3R0b20pOworICAgIG1EaXNwbGF5TGlzdC0+cmVmKHJ4KTsKKyAgICBtRGlzcGxheUxpc3QtPnJlZihyeSk7CisgICAgbURpc3BsYXlMaXN0LT5yZWYocGFpbnQpOworICAgIHJlZkJpdG1hcHNJblNoYWRlcihwYWludC0+dmFsdWUuZ2V0U2hhZGVyKCkpOworICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgUm91bmRSZWN0UHJvcHNPcCgKKyAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCisgICAgICAgICAgICAmcGFpbnQtPnZhbHVlLAorICAgICAgICAgICAgJmxlZnQtPnZhbHVlLCAmdG9wLT52YWx1ZSwgJnJpZ2h0LT52YWx1ZSwgJmJvdHRvbS0+dmFsdWUsCisgICAgICAgICAgICAmcngtPnZhbHVlLCAmcnktPnZhbHVlKSk7Cit9CisKIHZvaWQgUmVjb3JkaW5nQ2FudmFzOjpkcmF3Q2lyY2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHJhZGl1cywgY29uc3QgU2tQYWludCYgcGFpbnQpIHsKKyAgICAvLyBUT0RPOiBtb3ZlIHRvIENhbnZhcy5oCiAgICAgaWYgKHJhZGl1cyA8PSAwKSByZXR1cm47CiAgICAgZHJhd092YWwoeCAtIHJhZGl1cywgeSAtIHJhZGl1cywgeCArIHJhZGl1cywgeSArIHJhZGl1cywgcGFpbnQpOwogfQogCit2b2lkIFJlY29yZGluZ0NhbnZhczo6ZHJhd0NpcmNsZSgKKyAgICAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHgsIENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiB5LAorICAgICAgICBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcmFkaXVzLCBDYW52YXNQcm9wZXJ0eVBhaW50KiBwYWludCkgeworICAgIG1EaXNwbGF5TGlzdC0+cmVmKHgpOworICAgIG1EaXNwbGF5TGlzdC0+cmVmKHkpOworICAgIG1EaXNwbGF5TGlzdC0+cmVmKHJhZGl1cyk7CisgICAgbURpc3BsYXlMaXN0LT5yZWYocGFpbnQpOworICAgIHJlZkJpdG1hcHNJblNoYWRlcihwYWludC0+dmFsdWUuZ2V0U2hhZGVyKCkpOworICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgQ2lyY2xlUHJvcHNPcCgKKyAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCisgICAgICAgICAgICAmcGFpbnQtPnZhbHVlLAorICAgICAgICAgICAgJngtPnZhbHVlLCAmeS0+dmFsdWUsICZyYWRpdXMtPnZhbHVlKSk7Cit9CisKKwogdm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdPdmFsKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgY29uc3QgU2tQYWludCYgcGFpbnQpIHsKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIE92YWxPcCgKICAgICAgICAgICAgIFJlY3QobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSkpOwogfQogCkBAIC0zNjEsNyArNDA5LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEFyY09wKAogICAgICAgICAgICAgUmVjdChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pLAogICAgICAgICAgICAgKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSksCi0gICAgICAgICAgICBtU3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCiAgICAgICAgICAgICByZWZQYWludCgmcGFpbnQpLAogICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSwgdXNlQ2VudGVyKSk7CiB9CkBAIC0zNzAsNyArNDE4LDcgQEAKICAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFBhdGhPcCgKICAgICAgICAgICAgIFJlY3QocGF0aC5nZXRCb3VuZHMoKSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksIHJlZlBhdGgoJnBhdGgpKSk7CiB9CiAKQEAgLTQxOCwxOSArNDY2LDM1IEBACiAgICAgICAgIGRyYXdCaXRtYXAoJmJpdG1hcCwgcGFpbnQpOwogICAgICAgICByZXN0b3JlKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiVE9ETyEiKTsKKyAgICAgICAgYWRkT3AobmV3IChhbGxvYygpKSBCaXRtYXBSZWN0T3AoCisgICAgICAgICAgICAgICAgUmVjdChkc3RMZWZ0LCBkc3RUb3AsIGRzdFJpZ2h0LCBkc3RCb3R0b20pLAorICAgICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAorICAgICAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAorICAgICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSwgcmVmQml0bWFwKGJpdG1hcCksCisgICAgICAgICAgICAgICAgUmVjdChzcmNMZWZ0LCBzcmNUb3AsIHNyY1JpZ2h0LCBzcmNCb3R0b20pKSk7CiAgICAgfQogfQogCiB2b2lkIFJlY29yZGluZ0NhbnZhczo6ZHJhd0JpdG1hcE1lc2goY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IG1lc2hXaWR0aCwgaW50IG1lc2hIZWlnaHQsCiAgICAgICAgICAgICBjb25zdCBmbG9hdCogdmVydGljZXMsIGNvbnN0IGludCogY29sb3JzLCBjb25zdCBTa1BhaW50KiBwYWludCkgewotICAgIExPR19BTFdBWVNfRkFUQUwoIlRPRE8hIik7CisgICAgaW50IHZlcnRleENvdW50ID0gKG1lc2hXaWR0aCArIDEpICogKG1lc2hIZWlnaHQgKyAxKTsKKyAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEJpdG1hcE1lc2hPcCgKKyAgICAgICAgICAgIGNhbGNCb3VuZHNPZlBvaW50cyh2ZXJ0aWNlcywgdmVydGV4Q291bnQgKiAyKSwKKyAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCisgICAgICAgICAgICByZWZQYWludChwYWludCksIHJlZkJpdG1hcChiaXRtYXApLCBtZXNoV2lkdGgsIG1lc2hIZWlnaHQsCisgICAgICAgICAgICByZWZCdWZmZXI8ZmxvYXQ+KHZlcnRpY2VzLCB2ZXJ0ZXhDb3VudCAqIDIpLCAvLyAyIGZsb2F0cyBwZXIgdmVydGV4CisgICAgICAgICAgICByZWZCdWZmZXI8aW50Pihjb2xvcnMsIHZlcnRleENvdW50KSkpOyAvLyAxIGNvbG9yIHBlciB2ZXJ0ZXgKIH0KIAotdm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdOaW5lUGF0Y2goY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYW5kcm9pZDo6UmVzX3BuZ185cGF0Y2gmIGNodW5rLAordm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdOaW5lUGF0Y2goY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgYW5kcm9pZDo6UmVzX3BuZ185cGF0Y2gmIHBhdGNoLAogICAgICAgICAgICAgZmxvYXQgZHN0TGVmdCwgZmxvYXQgZHN0VG9wLCBmbG9hdCBkc3RSaWdodCwgZmxvYXQgZHN0Qm90dG9tLAogICAgICAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJUT0RPISIpOworICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgUGF0Y2hPcCgKKyAgICAgICAgICAgIFJlY3QoZHN0TGVmdCwgZHN0VG9wLCBkc3RSaWdodCwgZHN0Qm90dG9tKSwKKyAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCisgICAgICAgICAgICByZWZQYWludChwYWludCksIHJlZkJpdG1hcChiaXRtYXApLCByZWZQYXRjaCgmcGF0Y2gpKSk7CiB9CiAKIC8vIFRleHQKQEAgLTQ0NSwzMCArNTA5LDM2IEBACiAgICAgYWRkT3AobmV3IChhbGxvYygpKSBUZXh0T3AoCiAgICAgICAgICAgICBSZWN0KGJvdW5kc0xlZnQsIGJvdW5kc1RvcCwgYm91bmRzUmlnaHQsIGJvdW5kc0JvdHRvbSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KCZwYWludCksIGdseXBocywgcG9zaXRpb25zLCBnbHlwaENvdW50LCB4LCB5KSk7CiAgICAgZHJhd1RleHREZWNvcmF0aW9ucyh4LCB5LCB0b3RhbEFkdmFuY2UsIHBhaW50KTsKIH0KIAotdm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdUZXh0T25QYXRoKGNvbnN0IHVpbnQxNl90KiBnbHlwaHMsIGludCBjb3VudCwgY29uc3QgU2tQYXRoJiBwYXRoLAordm9pZCBSZWNvcmRpbmdDYW52YXM6OmRyYXdUZXh0T25QYXRoKGNvbnN0IHVpbnQxNl90KiBnbHlwaHMsIGludCBnbHlwaENvdW50LCBjb25zdCBTa1BhdGgmIHBhdGgsCiAgICAgICAgICAgICBmbG9hdCBoT2Zmc2V0LCBmbG9hdCB2T2Zmc2V0LCBjb25zdCBTa1BhaW50JiBwYWludCkgewotICAgIC8vIE5PVEU6IGNhbid0IHVzZSByZWZQYWludCgpIGRpcmVjdGx5LCBzaW5jZSBpdCBmb3JjZXMgbGVmdCBhbGlnbm1lbnQKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJUT0RPISIpOworICAgIGlmICghZ2x5cGhzIHx8IGdseXBoQ291bnQgPD0gMCB8fCBQYWludFV0aWxzOjpwYWludFdpbGxOb3REcmF3VGV4dChwYWludCkpIHJldHVybjsKKyAgICBnbHlwaHMgPSByZWZCdWZmZXI8Z2x5cGhfdD4oZ2x5cGhzLCBnbHlwaENvdW50KTsKKyAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFRleHRPblBhdGhPcCgKKyAgICAgICAgICAgIG1TdGF0ZS5nZXRMb2NhbENsaXBCb3VuZHMoKSwgLy8gVE9ETzogZXhwbGljaXRseSBkZWZpbmUgYm91bmRzCisgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAorICAgICAgICAgICAgcmVmUGFpbnQoJnBhaW50KSwgZ2x5cGhzLCBnbHlwaENvdW50LCByZWZQYXRoKCZwYXRoKSwgaE9mZnNldCwgdk9mZnNldCkpOwogfQogCiB2b2lkIFJlY29yZGluZ0NhbnZhczo6ZHJhd0JpdG1hcChjb25zdCBTa0JpdG1hcCogYml0bWFwLCBjb25zdCBTa1BhaW50KiBwYWludCkgewogICAgIGFkZE9wKG5ldyAoYWxsb2MoKSkgQml0bWFwT3AoCi0gICAgICAgICAgICBSZWN0KDAsIDAsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSksCisgICAgICAgICAgICBSZWN0KGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSksCiAgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKLSAgICAgICAgICAgIG1TdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksCisgICAgICAgICAgICBnZXRSZWNvcmRlZENsaXAoKSwKICAgICAgICAgICAgIHJlZlBhaW50KHBhaW50KSwgcmVmQml0bWFwKCpiaXRtYXApKSk7CiB9CisKIHZvaWQgUmVjb3JkaW5nQ2FudmFzOjpkcmF3UmVuZGVyTm9kZShSZW5kZXJOb2RlKiByZW5kZXJOb2RlKSB7CiAgICAgYXV0byYmIHN0YWdpbmdQcm9wcyA9IHJlbmRlck5vZGUtPnN0YWdpbmdQcm9wZXJ0aWVzKCk7CiAgICAgUmVuZGVyTm9kZU9wKiBvcCA9IG5ldyAoYWxsb2MoKSkgUmVuZGVyTm9kZU9wKAogICAgICAgICAgICAgUmVjdChzdGFnaW5nUHJvcHMuZ2V0V2lkdGgoKSwgc3RhZ2luZ1Byb3BzLmdldEhlaWdodCgpKSwKICAgICAgICAgICAgICoobVN0YXRlLmN1cnJlbnRTbmFwc2hvdCgpLT50cmFuc2Zvcm0pLAotICAgICAgICAgICAgbVN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAogICAgICAgICAgICAgcmVuZGVyTm9kZSk7CiAgICAgaW50IG9wSW5kZXggPSBhZGRPcChvcCk7CiAgICAgaW50IGNoaWxkSW5kZXggPSBtRGlzcGxheUxpc3QtPmFkZENoaWxkKG9wKTsKQEAgLTQ4Myw2ICs1NTMsMzAgQEAKICAgICB9CiB9CiAKK3ZvaWQgUmVjb3JkaW5nQ2FudmFzOjpkcmF3TGF5ZXIoRGVmZXJyZWRMYXllclVwZGF0ZXIqIGxheWVySGFuZGxlKSB7CisgICAgLy8gV2UgcmVmIHRoZSBEZWZlcnJlZExheWVyVXBkYXRlciBkdWUgdG8gaXRzIHRocmVhZC1zYWZlIHJlZi1jb3VudGluZyBzZW1hbnRpY3MuCisgICAgbURpc3BsYXlMaXN0LT5yZWYobGF5ZXJIYW5kbGUpOworCisgICAgTGF5ZXIqIGxheWVyID0gbGF5ZXJIYW5kbGUtPmJhY2tpbmdMYXllcigpOworICAgIE1hdHJpeDQgdG90YWxUcmFuc2Zvcm0oKihtU3RhdGUuY3VycmVudFNuYXBzaG90KCktPnRyYW5zZm9ybSkpOworICAgIHRvdGFsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5nZXRUcmFuc2Zvcm0oKSk7CisKKyAgICBhZGRPcChuZXcgKGFsbG9jKCkpIFRleHR1cmVMYXllck9wKAorICAgICAgICAgICAgUmVjdChsYXllci0+Z2V0V2lkdGgoKSwgbGF5ZXItPmdldEhlaWdodCgpKSwKKyAgICAgICAgICAgIHRvdGFsVHJhbnNmb3JtLAorICAgICAgICAgICAgZ2V0UmVjb3JkZWRDbGlwKCksCisgICAgICAgICAgICBsYXllcikpOworfQorCit2b2lkIFJlY29yZGluZ0NhbnZhczo6Y2FsbERyYXdHTEZ1bmN0aW9uKEZ1bmN0b3IqIGZ1bmN0b3IpIHsKKyAgICBtRGlzcGxheUxpc3QtPmZ1bmN0b3JzLnB1c2hfYmFjayhmdW5jdG9yKTsKKyAgICBhZGRPcChuZXcgKGFsbG9jKCkpIEZ1bmN0b3JPcCgKKyAgICAgICAgICAgIG1TdGF0ZS5nZXRMb2NhbENsaXBCb3VuZHMoKSwgLy8gVE9ETzogZXhwbGljaXRseSBkZWZpbmUgYm91bmRzCisgICAgICAgICAgICAqKG1TdGF0ZS5jdXJyZW50U25hcHNob3QoKS0+dHJhbnNmb3JtKSwKKyAgICAgICAgICAgIGdldFJlY29yZGVkQ2xpcCgpLAorICAgICAgICAgICAgZnVuY3RvcikpOworfQorCiBzaXplX3QgUmVjb3JkaW5nQ2FudmFzOjphZGRPcChSZWNvcmRlZE9wKiBvcCkgewogICAgIC8vIFRPRE86IHZhbGlkYXRlIGlmICJhZGREcmF3T3AiIHF1aWNrcmVqZWN0aW9uIGxvZ2ljIGlzIHVzZWZ1bCBiZWZvcmUgYWRkaW5nCiAgICAgaW50IGluc2VydEluZGV4ID0gbURpc3BsYXlMaXN0LT5vcHMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5oIGIvbGlicy9od3VpL1JlY29yZGluZ0NhbnZhcy5oCmluZGV4IDE2YTI3NzEuLjhhYTc1MDYgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9SZWNvcmRpbmdDYW52YXMuaAorKysgYi9saWJzL2h3dWkvUmVjb3JkaW5nQ2FudmFzLmgKQEAgLTM2LDEwICszNiwxMSBAQAogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIHVpcmVuZGVyZXIgewogCi1jbGFzcyBPcFJlY2VpdmVyOworc3RydWN0IENsaXBCYXNlOworY2xhc3MgRGVmZXJyZWRMYXllclVwZGF0ZXI7CiBzdHJ1Y3QgUmVjb3JkZWRPcDsKIAotY2xhc3MgUmVjb3JkaW5nQ2FudmFzOiBwdWJsaWMgQ2FudmFzLCBwdWJsaWMgQ2FudmFzU3RhdGVDbGllbnQgeworY2xhc3MgQU5EUk9JRF9BUEkgUmVjb3JkaW5nQ2FudmFzOiBwdWJsaWMgQ2FudmFzLCBwdWJsaWMgQ2FudmFzU3RhdGVDbGllbnQgewogICAgIGVudW0gY2xhc3MgRGVmZXJyZWRCYXJyaWVyVHlwZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIEluT3JkZXIsCkBAIC01OSw4ICs2MCwxMyBAQAogICAgICAgICBtRGVmZXJyZWRCYXJyaWVyVHlwZSA9IGVuYWJsZVJlb3JkZXIKICAgICAgICAgICAgICAgICA/IERlZmVycmVkQmFycmllclR5cGU6Ok91dE9mT3JkZXIgOiBEZWZlcnJlZEJhcnJpZXJUeXBlOjpJbk9yZGVyOwogICAgIH0KKworICAgIHZvaWQgZHJhd0xheWVyKERlZmVycmVkTGF5ZXJVcGRhdGVyKiBsYXllckhhbmRsZSk7CiAgICAgdm9pZCBkcmF3UmVuZGVyTm9kZShSZW5kZXJOb2RlKiByZW5kZXJOb2RlKTsKIAorICAgIC8vIFRPRE86IHJlbmFtZSBmb3IgY29uc2lzdGVuY3kKKyAgICB2b2lkIGNhbGxEcmF3R0xGdW5jdGlvbihGdW5jdG9yKiBmdW5jdG9yKTsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gQ2FudmFzU3RhdGVDbGllbnQgaW50ZXJmYWNlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02OSw2ICs3NSwxNyBAQAogICAgIHZpcnR1YWwgR0x1aW50IGdldFRhcmdldEZibygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIC0xOyB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhXVUkgQ2FudmFzIGRyYXcgb3BlcmF0aW9ucworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdm9pZCBkcmF3Um91bmRSZWN0KENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiBsZWZ0LCBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogdG9wLAorICAgICAgICAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHJpZ2h0LCBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogYm90dG9tLAorICAgICAgICAgICAgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUqIHJ4LCBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogcnksCisgICAgICAgICAgICBDYW52YXNQcm9wZXJ0eVBhaW50KiBwYWludCk7CisgICAgdm9pZCBkcmF3Q2lyY2xlKENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiB4LCBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSogeSwKKyAgICAgICAgICAgIENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKiByYWRpdXMsIENhbnZhc1Byb3BlcnR5UGFpbnQqIHBhaW50KTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gYW5kcm9pZC9ncmFwaGljcy9DYW52YXMgaW50ZXJmYWNlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgdmlydHVhbCBTa0NhbnZhcyogYXNTa0NhbnZhcygpIG92ZXJyaWRlOwpAQCAtMTc1LDE0ICsxOTIsMTcgQEAKICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50KSBvdmVycmlkZTsKIAogICAgIC8vIFRleHQKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHQoY29uc3QgdWludDE2X3QqIGdseXBocywgY29uc3QgZmxvYXQqIHBvc2l0aW9ucywgaW50IGNvdW50LAorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dChjb25zdCB1aW50MTZfdCogZ2x5cGhzLCBjb25zdCBmbG9hdCogcG9zaXRpb25zLCBpbnQgZ2x5cGhDb3VudCwKICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCBib3VuZHNMZWZ0LCBmbG9hdCBib3VuZHNUb3AsCiAgICAgICAgICAgICBmbG9hdCBib3VuZHNSaWdodCwgZmxvYXQgYm91bmRzQm90dG9tLCBmbG9hdCB0b3RhbEFkdmFuY2UpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dE9uUGF0aChjb25zdCB1aW50MTZfdCogZ2x5cGhzLCBpbnQgY291bnQsIGNvbnN0IFNrUGF0aCYgcGF0aCwKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHRPblBhdGgoY29uc3QgdWludDE2X3QqIGdseXBocywgaW50IGdseXBoQ291bnQsIGNvbnN0IFNrUGF0aCYgcGF0aCwKICAgICAgICAgICAgIGZsb2F0IGhPZmZzZXQsIGZsb2F0IHZPZmZzZXQsIGNvbnN0IFNrUGFpbnQmIHBhaW50KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd1RleHRBYnNvbHV0ZVBvcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CisgICAgY29uc3QgQ2xpcEJhc2UqIGdldFJlY29yZGVkQ2xpcCgpIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS53cml0YWJsZVNuYXBzaG90KCktPm11dGF0ZUNsaXBBcmVhKCkuc2VyaWFsaXplQ2xpcChhbGxvYygpKTsKKyAgICB9CiAKICAgICB2b2lkIGRyYXdCaXRtYXAoY29uc3QgU2tCaXRtYXAqIGJpdG1hcCwgY29uc3QgU2tQYWludCogcGFpbnQpOwogICAgIHZvaWQgZHJhd1NpbXBsZVJlY3RzKGNvbnN0IGZsb2F0KiByZWN0cywgaW50IHZlcnRleENvdW50LCBjb25zdCBTa1BhaW50KiBwYWludCk7CkBAIC0yOTQsNyArMzE0LDYgQEAKICAgICBEaXNwbGF5TGlzdCogbURpc3BsYXlMaXN0ID0gbnVsbHB0cjsKICAgICBib29sIG1IaWdoQ29udHJhc3RUZXh0ID0gZmFsc2U7CiAgICAgU2tBdXRvVFVucmVmPFNrRHJhd0ZpbHRlcj4gbURyYXdGaWx0ZXI7Ci0gICAgaW50IG1SZXN0b3JlU2F2ZUNvdW50ID0gLTE7CiB9OyAvLyBjbGFzcyBSZWNvcmRpbmdDYW52YXMKIAogfTsgLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9SZW5kZXJOb2RlLmggYi9saWJzL2h3dWkvUmVuZGVyTm9kZS5oCmluZGV4IGI2ZjUwYjEuLjhlNGEzZGYgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9SZW5kZXJOb2RlLmgKKysrIGIvbGlicy9od3VpL1JlbmRlck5vZGUuaApAQCAtNDcsMTEgKzQ3LDExIEBACiBjbGFzcyBEaXNwbGF5TGlzdENhbnZhczsKIGNsYXNzIERpc3BsYXlMaXN0T3A7CiBjbGFzcyBPcGVuR0xSZW5kZXJlcjsKLWNsYXNzIE9wUmVvcmRlcmVyOwogY2xhc3MgUmVjdDsKIGNsYXNzIFNraWFTaGFkZXI7CiAKICNpZiBIV1VJX05FV19PUFMKK2NsYXNzIEZyYW1lQnVpbGRlcjsKIGNsYXNzIE9mZnNjcmVlbkJ1ZmZlcjsKIHN0cnVjdCBSZW5kZXJOb2RlT3A7CiB0eXBlZGVmIE9mZnNjcmVlbkJ1ZmZlciBsYXllcl90OwpAQCAtODcsNyArODcsNyBAQAogICovCiBjbGFzcyBSZW5kZXJOb2RlIDogcHVibGljIFZpcnR1YWxMaWdodFJlZkJhc2UgewogZnJpZW5kIGNsYXNzIFRlc3RVdGlsczsgLy8gYWxsb3cgVGVzdFV0aWxzIHRvIGFjY2VzcyBzeW5jRGlzcGxheUxpc3QgLyBzeW5jUHJvcGVydGllcwotZnJpZW5kIGNsYXNzIE9wUmVvcmRlcmVyOworZnJpZW5kIGNsYXNzIEZyYW1lQnVpbGRlcjsKIHB1YmxpYzoKICAgICBlbnVtIERpcnR5UHJvcGVydHlNYXNrIHsKICAgICAgICAgR0VORVJJQyAgICAgICAgID0gMSA8PCAxLApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NraWFDYW52YXNQcm94eS5jcHAgYi9saWJzL2h3dWkvU2tpYUNhbnZhc1Byb3h5LmNwcAppbmRleCAyZDVmNzBmLi45NzZmNzc1IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvU2tpYUNhbnZhc1Byb3h5LmNwcAorKysgYi9saWJzL2h3dWkvU2tpYUNhbnZhc1Byb3h5LmNwcApAQCAtMTM4LDE1ICsxMzgsNiBAQAogICAgIFNrREVCVUdGQUlMKCJTa2lhQ2FudmFzUHJveHk6Om9uRHJhd0JpdG1hcE5pbmUgaXMgbm90IHlldCBzdXBwb3J0ZWQiKTsKIH0KIAotdm9pZCBTa2lhQ2FudmFzUHJveHk6Om9uRHJhd1Nwcml0ZShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwKLSAgICAgICAgY29uc3QgU2tQYWludCogcGFpbnQpIHsKLSAgICAvLyBUT0RPOiBpZiBiaXRtYXAgaXMgYSBzdWJzZXQsIGRvIHdlIG5lZWQgdG8gYWRkIHBpeGVsUmVmT3JpZ2luIHRvIHNyYz8KLSAgICBtQ2FudmFzLT5zYXZlKFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7Ci0gICAgbUNhbnZhcy0+c2V0TWF0cml4KFNrTWF0cml4OjpJKCkpOwotICAgIG1DYW52YXMtPmRyYXdCaXRtYXAoYml0bWFwLCBsZWZ0LCB0b3AsIHBhaW50KTsKLSAgICBtQ2FudmFzLT5yZXN0b3JlKCk7Ci19Ci0KIHZvaWQgU2tpYUNhbnZhc1Byb3h5OjpvbkRyYXdWZXJ0aWNlcyhWZXJ0ZXhNb2RlIG1vZGUsIGludCB2ZXJ0ZXhDb3VudCwgY29uc3QgU2tQb2ludCB2ZXJ0aWNlc1tdLAogICAgICAgICBjb25zdCBTa1BvaW50IHRleHNbXSwgY29uc3QgU2tDb2xvciBjb2xvcnNbXSwgU2tYZmVybW9kZSosIGNvbnN0IHVpbnQxNl90IGluZGljZXNbXSwKICAgICAgICAgaW50IGluZGV4Q291bnQsIGNvbnN0IFNrUGFpbnQmIHBhaW50KSB7CkBAIC0xNzEsMTUgKzE2MiwxNSBAQAogICAgIG1DYW52YXMtPnNhdmUoU2tDYW52YXM6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKIH0KIAotU2tDYW52YXM6OlNhdmVMYXllclN0cmF0ZWd5IFNraWFDYW52YXNQcm94eTo6d2lsbFNhdmVMYXllcihjb25zdCBTa1JlY3QqIHJlY3RQdHIsCi0gICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50LCBTYXZlRmxhZ3MgZmxhZ3MpIHsKK1NrQ2FudmFzOjpTYXZlTGF5ZXJTdHJhdGVneSBTa2lhQ2FudmFzUHJveHk6OmdldFNhdmVMYXllclN0cmF0ZWd5KGNvbnN0IFNhdmVMYXllclJlYyYgc2F2ZUxheWVyUmVjKSB7CiAgICAgU2tSZWN0IHJlY3Q7Ci0gICAgaWYgKHJlY3RQdHIpIHsKLSAgICAgICAgcmVjdCA9ICpyZWN0UHRyOwotICAgIH0gZWxzZSBpZighbUNhbnZhcy0+Z2V0Q2xpcEJvdW5kcygmcmVjdCkpIHsKKyAgICBpZiAoc2F2ZUxheWVyUmVjLmZCb3VuZHMpIHsKKyAgICAgICAgcmVjdCA9ICpzYXZlTGF5ZXJSZWMuZkJvdW5kczsKKyAgICB9IGVsc2UgaWYgKCFtQ2FudmFzLT5nZXRDbGlwQm91bmRzKCZyZWN0KSkgewogICAgICAgICByZWN0ID0gU2tSZWN0OjpNYWtlRW1wdHkoKTsKICAgICB9Ci0gICAgbUNhbnZhcy0+c2F2ZUxheWVyKHJlY3QuZkxlZnQsIHJlY3QuZlRvcCwgcmVjdC5mUmlnaHQsIHJlY3QuZkJvdHRvbSwgcGFpbnQsIGZsYWdzKTsKKyAgICBtQ2FudmFzLT5zYXZlTGF5ZXIocmVjdC5mTGVmdCwgcmVjdC5mVG9wLCByZWN0LmZSaWdodCwgcmVjdC5mQm90dG9tLCBzYXZlTGF5ZXJSZWMuZlBhaW50LAorICAgICAgICAgICAgICAgICAgICAgICAoU2tDYW52YXM6OlNhdmVGbGFncykgU2F2ZUxheWVyRmxhZ3NUb1NhdmVGbGFncyhzYXZlTGF5ZXJSZWMuZlNhdmVMYXllckZsYWdzKSk7CiAgICAgcmV0dXJuIFNrQ2FudmFzOjprTm9MYXllcl9TYXZlTGF5ZXJTdHJhdGVneTsKIH0KIApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NraWFDYW52YXNQcm94eS5oIGIvbGlicy9od3VpL1NraWFDYW52YXNQcm94eS5oCmluZGV4IDJmZTQzMjcuLmUzNDJkMTkgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9Ta2lhQ2FudmFzUHJveHkuaAorKysgYi9saWJzL2h3dWkvU2tpYUNhbnZhc1Byb3h5LmgKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICB2aXJ0dWFsIFNrU3VyZmFjZSogb25OZXdTdXJmYWNlKGNvbnN0IFNrSW1hZ2VJbmZvJiwgY29uc3QgU2tTdXJmYWNlUHJvcHMmKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2F2ZSgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgU2F2ZUxheWVyU3RyYXRlZ3kgd2lsbFNhdmVMYXllcihjb25zdCBTa1JlY3QqLCBjb25zdCBTa1BhaW50KiwgU2F2ZUZsYWdzKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFNhdmVMYXllclN0cmF0ZWd5IGdldFNhdmVMYXllclN0cmF0ZWd5KGNvbnN0IFNhdmVMYXllclJlYyYpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVzdG9yZSgpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGRpZENvbmNhdChjb25zdCBTa01hdHJpeCYpIG92ZXJyaWRlOwpAQCAtNjYsOCArNjYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUGFpbnQqIHBhaW50LCBTcmNSZWN0Q29uc3RyYWludCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG9uRHJhd0JpdG1hcE5pbmUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgY29uc3QgU2tJUmVjdCYgY2VudGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNrUmVjdCYgZHN0LCBjb25zdCBTa1BhaW50Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9uRHJhd1Nwcml0ZShjb25zdCBTa0JpdG1hcCYsIGludCBsZWZ0LCBpbnQgdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQYWludCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBvbkRyYXdWZXJ0aWNlcyhWZXJ0ZXhNb2RlLCBpbnQgdmVydGV4Q291bnQsIGNvbnN0IFNrUG9pbnQgdmVydGljZXNbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tQb2ludCB0ZXhzW10sIGNvbnN0IFNrQ29sb3IgY29sb3JzW10sIFNrWGZlcm1vZGUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MTZfdCBpbmRpY2VzW10sIGludCBpbmRleENvdW50LApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1NuYXBzaG90LmNwcCBiL2xpYnMvaHd1aS9TbmFwc2hvdC5jcHAKaW5kZXggMmY1MzViYi4uYzZkODk3NyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL1NuYXBzaG90LmNwcAorKysgYi9saWJzL2h3dWkvU25hcHNob3QuY3BwCkBAIC04OCw5ICs4OCw5IEBACiAgICAgbUNsaXBBcmVhLT5jbGlwUmVnaW9uKHJlZ2lvbiwgb3ApOwogfQogCi12b2lkIFNuYXBzaG90OjpjbGlwKGZsb2F0IGxlZnQsIGZsb2F0IHRvcCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgU2tSZWdpb246Ok9wIG9wKSB7Cit2b2lkIFNuYXBzaG90OjpjbGlwKGNvbnN0IFJlY3QmIGxvY2FsQ2xpcCwgU2tSZWdpb246Ok9wIG9wKSB7CiAgICAgZmxhZ3MgfD0gU25hcHNob3Q6OmtGbGFnQ2xpcFNldDsKLSAgICBtQ2xpcEFyZWEtPmNsaXBSZWN0V2l0aFRyYW5zZm9ybShsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20sIHRyYW5zZm9ybSwgb3ApOworICAgIG1DbGlwQXJlYS0+Y2xpcFJlY3RXaXRoVHJhbnNmb3JtKGxvY2FsQ2xpcCwgdHJhbnNmb3JtLCBvcCk7CiB9CiAKIHZvaWQgU25hcHNob3Q6OmNsaXBQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCwgU2tSZWdpb246Ok9wIG9wKSB7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvU25hcHNob3QuaCBiL2xpYnMvaHd1aS9TbmFwc2hvdC5oCmluZGV4IDQ3ODliMzMuLmRiYWE5MDUgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9TbmFwc2hvdC5oCisrKyBiL2xpYnMvaHd1aS9TbmFwc2hvdC5oCkBAIC0xMTYsNyArMTE2LDcgQEAKICAgICAgICAgICogSW5kaWNhdGVzIHRoYXQgdGhpcyBzbmFwc2hvdCBvciBhbiBhbmNlc3RvciBzbmFwc2hvdCBpcwogICAgICAgICAgKiBhbiBGQk8gbGF5ZXIuCiAgICAgICAgICAqLwotICAgICAgICBrRmxhZ0Zib1RhcmdldCA9IDB4OCwKKyAgICAgICAga0ZsYWdGYm9UYXJnZXQgPSAweDgsIC8vIFRPRE86IHJlbW92ZSBmb3IgSFdVSV9ORVdfT1BTCiAgICAgfTsKIAogICAgIC8qKgpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICogdGhlIHNwZWNpZmllZCBvcGVyYXRpb24uIFRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGlzIHRyYW5zZm9ybWVkCiAgICAgICogYnkgdGhpcyBzbmFwc2hvdCdzIHRyYXNuZm9ybWF0aW9uLgogICAgICAqLwotICAgIHZvaWQgY2xpcChmbG9hdCBsZWZ0LCBmbG9hdCB0b3AsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIFNrUmVnaW9uOjpPcCBvcCk7CisgICAgdm9pZCBjbGlwKGNvbnN0IFJlY3QmIGxvY2FsQ2xpcCwgU2tSZWdpb246Ok9wIG9wKTsKIAogICAgIC8qKgogICAgICAqIE1vZGlmaWVzIHRoZSBjdXJyZW50IGNsaXAgd2l0aCB0aGUgbmV3IGNsaXAgcmVjdGFuZ2xlIGFuZApAQCAtMTY3LDYgKzE2Nyw3IEBACiAgICAgY29uc3QgU2tSZWdpb24mIGdldENsaXBSZWdpb24oKSBjb25zdCB7IHJldHVybiBtQ2xpcEFyZWEtPmdldENsaXBSZWdpb24oKTsgfQogICAgIGJvb2wgY2xpcElzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbUNsaXBBcmVhLT5pc1NpbXBsZSgpOyB9CiAgICAgY29uc3QgQ2xpcEFyZWEmIGdldENsaXBBcmVhKCkgY29uc3QgeyByZXR1cm4gKm1DbGlwQXJlYTsgfQorICAgIENsaXBBcmVhJiBtdXRhdGVDbGlwQXJlYSgpIHsgcmV0dXJuICptQ2xpcEFyZWE7IH0KIAogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgY2xpcCB0byB0aGUgc3BlY2lmaWVkIHJlY3QuCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuY3BwIGIvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmNiMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlLmNwcApAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJWZWN0b3JEcmF3YWJsZS5oIgorCisjaW5jbHVkZSAiUGF0aFBhcnNlci5oIgorI2luY2x1ZGUgIlNrSW1hZ2VJbmZvLmgiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisjaW5jbHVkZSAidXRpbHMvTWFjcm9zLmgiCisjaW5jbHVkZSAidXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIgorCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CituYW1lc3BhY2UgVmVjdG9yRHJhd2FibGUgeworCitjb25zdCBpbnQgVHJlZTo6TUFYX0NBQ0hFRF9CSVRNQVBfU0laRSA9IDIwNDg7CisKK3ZvaWQgUGF0aDo6ZHJhdyhDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tNYXRyaXgmIGdyb3VwU3RhY2tlZE1hdHJpeCwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpIHsKKyAgICBmbG9hdCBtYXRyaXhTY2FsZSA9IGdldE1hdHJpeFNjYWxlKGdyb3VwU3RhY2tlZE1hdHJpeCk7CisgICAgaWYgKG1hdHJpeFNjYWxlID09IDApIHsKKyAgICAgICAgLy8gV2hlbiBlaXRoZXIgeCBvciB5IGlzIHNjYWxlZCB0byAwLCB3ZSBkb24ndCBuZWVkIHRvIGRyYXcgYW55dGhpbmcuCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBTa1BhdGggdXBkYXRlZFBhdGggPSBnZXRVcGRhdGVkUGF0aCgpOworICAgIFNrTWF0cml4IHBhdGhNYXRyaXgoZ3JvdXBTdGFja2VkTWF0cml4KTsKKyAgICBwYXRoTWF0cml4LnBvc3RTY2FsZShzY2FsZVgsIHNjYWxlWSk7CisKKyAgICAvL1RPRE86IHRyeSBhcHBseSB0aGUgcGF0aCBtYXRyaXggdG8gdGhlIGNhbnZhcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IHBhdGguCisgICAgU2tQYXRoIHJlbmRlclBhdGg7CisgICAgcmVuZGVyUGF0aC5yZXNldCgpOworICAgIHJlbmRlclBhdGguYWRkUGF0aCh1cGRhdGVkUGF0aCwgcGF0aE1hdHJpeCk7CisKKyAgICBmbG9hdCBtaW5TY2FsZSA9IGZtaW4oc2NhbGVYLCBzY2FsZVkpOworICAgIGZsb2F0IHN0cm9rZVNjYWxlID0gbWluU2NhbGUgKiBtYXRyaXhTY2FsZTsKKyAgICBkcmF3UGF0aChvdXRDYW52YXMsIHJlbmRlclBhdGgsIHN0cm9rZVNjYWxlKTsKK30KKwordm9pZCBQYXRoOjpzZXRQYXRoRGF0YShjb25zdCBEYXRhJiBkYXRhKSB7CisgICAgaWYgKG1EYXRhID09IGRhdGEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBVcGRhdGVzIHRoZSBwYXRoIGRhdGEuIE5vdGUgdGhhdCB3ZSBkb24ndCBnZW5lcmF0ZSBhIG5ldyBTa2lhIHBhdGggcmlnaHQgYXdheQorICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBhbmltYXRpb24gaXMgY2hhbmdpbmcgdGhlIHBhdGggZGF0YSwgYnV0IHRoZSB2aWV3CisgICAgLy8gdGhhdCBob3N0cyB0aGUgVkQgaGFzIGdvbmUgb2ZmIHNjcmVlbiwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBldmVuIGRyYXcuIFNvIHdlCisgICAgLy8gcG9zdHBvbmUgdGhlIFNraWEgcGF0aCBnZW5lcmF0aW9uIHRvIHRoZSBkcmF3IHRpbWUuCisgICAgbURhdGEgPSBkYXRhOworICAgIG1Ta1BhdGhEaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgUGF0aDo6ZHVtcCgpIHsKKyAgICBBTE9HRCgiUGF0aDogJXMgaGFzICV6dSBwb2ludHMiLCBtTmFtZS5jX3N0cigpLCBtRGF0YS5wb2ludHMuc2l6ZSgpKTsKK30KKworZmxvYXQgUGF0aDo6Z2V0TWF0cml4U2NhbGUoY29uc3QgU2tNYXRyaXgmIGdyb3VwU3RhY2tlZE1hdHJpeCkgeworICAgIC8vIEdpdmVuIHVuaXQgdmVjdG9ycyBBID0gKDAsIDEpIGFuZCBCID0gKDEsIDApLgorICAgIC8vIEFmdGVyIG1hdHJpeCBtYXBwaW5nLCB3ZSBnb3QgQScgYW5kIEInLiBMZXQgdGhldGEgPSB0aGUgYW5nZWwgYi90IEEnIGFuZCBCJy4KKyAgICAvLyBUaGVyZWZvcmUsIHRoZSBmaW5hbCBzY2FsZSB3ZSB3YW50IGlzIG1pbih8QSd8ICogc2luKHRoZXRhKSwgfEInfCAqIHNpbih0aGV0YSkpLAorICAgIC8vIHdoaWNoIGlzICh8QSd8ICogfEInfCAqIHNpbih0aGV0YSkpIC8gbWF4ICh8QSd8LCB8Qid8KTsKKyAgICAvLyBJZiAgbWF4ICh8QSd8LCB8Qid8KSA9IDAsIHRoYXQgbWVhbnMgZWl0aGVyIHggb3IgeSBoYXMgYSBzY2FsZSBvZiAwLgorICAgIC8vCisgICAgLy8gRm9yIG5vbi1za2V3IGNhc2UsIHdoaWNoIGlzIG1vc3Qgb2YgdGhlIGNhc2VzLCBtYXRyaXggc2NhbGUgaXMgY29tcHV0aW5nIGV4YWN0bHkgdGhlCisgICAgLy8gc2NhbGUgb24geCBhbmQgeSBheGlzLCBhbmQgdGFrZSB0aGUgbWluaW1hbCBvZiB0aGVzZSB0d28uCisgICAgLy8gRm9yIHNrZXcgY2FzZSwgYW4gdW5pdCBzcXVhcmUgd2lsbCBtYXBwZWQgdG8gYSBwYXJhbGxlbG9ncmFtLiBBbmQgdGhpcyBmdW5jdGlvbiB3aWxsCisgICAgLy8gcmV0dXJuIHRoZSBtaW5pbWFsIGhlaWdodCBvZiB0aGUgMiBiYXNlcy4KKyAgICBTa1ZlY3RvciBza1ZlY3RvcnNbMl07CisgICAgc2tWZWN0b3JzWzBdLnNldCgwLCAxKTsKKyAgICBza1ZlY3RvcnNbMV0uc2V0KDEsIDApOworICAgIGdyb3VwU3RhY2tlZE1hdHJpeC5tYXBWZWN0b3JzKHNrVmVjdG9ycywgMik7CisgICAgZmxvYXQgc2NhbGVYID0gaHlwb3RmKHNrVmVjdG9yc1swXS5mWCwgc2tWZWN0b3JzWzBdLmZZKTsKKyAgICBmbG9hdCBzY2FsZVkgPSBoeXBvdGYoc2tWZWN0b3JzWzFdLmZYLCBza1ZlY3RvcnNbMV0uZlkpOworICAgIGZsb2F0IGNyb3NzUHJvZHVjdCA9IHNrVmVjdG9yc1swXS5jcm9zcyhza1ZlY3RvcnNbMV0pOworICAgIGZsb2F0IG1heFNjYWxlID0gZm1heChzY2FsZVgsIHNjYWxlWSk7CisKKyAgICBmbG9hdCBtYXRyaXhTY2FsZSA9IDA7CisgICAgaWYgKG1heFNjYWxlID4gMCkgeworICAgICAgICBtYXRyaXhTY2FsZSA9IGZhYnMoY3Jvc3NQcm9kdWN0KSAvIG1heFNjYWxlOworICAgIH0KKyAgICByZXR1cm4gbWF0cml4U2NhbGU7Cit9CitQYXRoOjpQYXRoKGNvbnN0IGNoYXIqIHBhdGhTdHIsIHNpemVfdCBzdHJMZW5ndGgpIHsKKyAgICBQYXRoUGFyc2VyOjpQYXJzZVJlc3VsdCByZXN1bHQ7CisgICAgUGF0aFBhcnNlcjo6Z2V0UGF0aERhdGFGcm9tU3RyaW5nKCZtRGF0YSwgJnJlc3VsdCwgcGF0aFN0ciwgc3RyTGVuZ3RoKTsKKyAgICBpZiAoIXJlc3VsdC5mYWlsdXJlT2NjdXJyZWQpIHsKKyAgICAgICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIG1EYXRhKTsKKyAgICB9Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgRGF0YSYgZGF0YSkgeworICAgIG1EYXRhID0gZGF0YTsKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBwYXRoCisgICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIGRhdGEpOworfQorCitQYXRoOjpQYXRoKGNvbnN0IFBhdGgmIHBhdGgpIDogTm9kZShwYXRoKSB7CisgICAgbURhdGEgPSBwYXRoLm1EYXRhOworICAgIFZlY3RvckRyYXdhYmxlVXRpbHM6OnZlcmJzVG9QYXRoKCZtU2tQYXRoLCBtRGF0YSk7Cit9CisKK2Jvb2wgUGF0aDo6Y2FuTW9ycGgoY29uc3QgRGF0YSYgbW9ycGhUbykgeworICAgIHJldHVybiBWZWN0b3JEcmF3YWJsZVV0aWxzOjpjYW5Nb3JwaChtRGF0YSwgbW9ycGhUbyk7Cit9CisKK2Jvb2wgUGF0aDo6Y2FuTW9ycGgoY29uc3QgUGF0aCYgcGF0aCkgeworICAgIHJldHVybiBjYW5Nb3JwaChwYXRoLm1EYXRhKTsKK30KKworY29uc3QgU2tQYXRoJiBQYXRoOjpnZXRVcGRhdGVkUGF0aCgpIHsKKyAgICBpZiAobVNrUGF0aERpcnR5KSB7CisgICAgICAgIG1Ta1BhdGgucmVzZXQoKTsKKyAgICAgICAgVmVjdG9yRHJhd2FibGVVdGlsczo6dmVyYnNUb1BhdGgoJm1Ta1BhdGgsIG1EYXRhKTsKKyAgICAgICAgbVNrUGF0aERpcnR5ID0gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBtU2tQYXRoOworfQorCit2b2lkIFBhdGg6OnNldFBhdGgoY29uc3QgY2hhciogcGF0aFN0ciwgc2l6ZV90IHN0ckxlbmd0aCkgeworICAgIFBhdGhQYXJzZXI6OlBhcnNlUmVzdWx0IHJlc3VsdDsKKyAgICBtU2tQYXRoRGlydHkgPSB0cnVlOworICAgIFBhdGhQYXJzZXI6OmdldFBhdGhEYXRhRnJvbVN0cmluZygmbURhdGEsICZyZXN1bHQsIHBhdGhTdHIsIHN0ckxlbmd0aCk7Cit9CisKK0Z1bGxQYXRoOjpGdWxsUGF0aChjb25zdCBGdWxsUGF0aCYgcGF0aCkgOiBQYXRoKHBhdGgpIHsKKyAgICBtU3Ryb2tlV2lkdGggPSBwYXRoLm1TdHJva2VXaWR0aDsKKyAgICBtU3Ryb2tlQ29sb3IgPSBwYXRoLm1TdHJva2VDb2xvcjsKKyAgICBtU3Ryb2tlQWxwaGEgPSBwYXRoLm1TdHJva2VBbHBoYTsKKyAgICBtRmlsbENvbG9yID0gcGF0aC5tRmlsbENvbG9yOworICAgIG1GaWxsQWxwaGEgPSBwYXRoLm1GaWxsQWxwaGE7CisgICAgbVRyaW1QYXRoU3RhcnQgPSBwYXRoLm1UcmltUGF0aFN0YXJ0OworICAgIG1UcmltUGF0aEVuZCA9IHBhdGgubVRyaW1QYXRoRW5kOworICAgIG1UcmltUGF0aE9mZnNldCA9IHBhdGgubVRyaW1QYXRoT2Zmc2V0OworICAgIG1TdHJva2VNaXRlckxpbWl0ID0gcGF0aC5tU3Ryb2tlTWl0ZXJMaW1pdDsKKyAgICBtU3Ryb2tlTGluZUNhcCA9IHBhdGgubVN0cm9rZUxpbmVDYXA7CisgICAgbVN0cm9rZUxpbmVKb2luID0gcGF0aC5tU3Ryb2tlTGluZUpvaW47Cit9CisKK2NvbnN0IFNrUGF0aCYgRnVsbFBhdGg6OmdldFVwZGF0ZWRQYXRoKCkgeworICAgIGlmICghbVNrUGF0aERpcnR5ICYmICFtVHJpbURpcnR5KSB7CisgICAgICAgIHJldHVybiBtVHJpbW1lZFNrUGF0aDsKKyAgICB9CisgICAgUGF0aDo6Z2V0VXBkYXRlZFBhdGgoKTsKKyAgICBpZiAobVRyaW1QYXRoU3RhcnQgIT0gMC4wZiB8fCBtVHJpbVBhdGhFbmQgIT0gMS4wZikgeworICAgICAgICBhcHBseVRyaW0oKTsKKyAgICAgICAgcmV0dXJuIG1UcmltbWVkU2tQYXRoOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBtU2tQYXRoOworICAgIH0KK30KKwordm9pZCBGdWxsUGF0aDo6dXBkYXRlUHJvcGVydGllcyhmbG9hdCBzdHJva2VXaWR0aCwgU2tDb2xvciBzdHJva2VDb2xvciwgZmxvYXQgc3Ryb2tlQWxwaGEsCisgICAgICAgIFNrQ29sb3IgZmlsbENvbG9yLCBmbG9hdCBmaWxsQWxwaGEsIGZsb2F0IHRyaW1QYXRoU3RhcnQsIGZsb2F0IHRyaW1QYXRoRW5kLAorICAgICAgICBmbG9hdCB0cmltUGF0aE9mZnNldCwgZmxvYXQgc3Ryb2tlTWl0ZXJMaW1pdCwgaW50IHN0cm9rZUxpbmVDYXAsIGludCBzdHJva2VMaW5lSm9pbikgeworICAgIG1TdHJva2VXaWR0aCA9IHN0cm9rZVdpZHRoOworICAgIG1TdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yOworICAgIG1TdHJva2VBbHBoYSA9IHN0cm9rZUFscGhhOworICAgIG1GaWxsQ29sb3IgPSBmaWxsQ29sb3I7CisgICAgbUZpbGxBbHBoYSA9IGZpbGxBbHBoYTsKKyAgICBtU3Ryb2tlTWl0ZXJMaW1pdCA9IHN0cm9rZU1pdGVyTGltaXQ7CisgICAgbVN0cm9rZUxpbmVDYXAgPSBTa1BhaW50OjpDYXAoc3Ryb2tlTGluZUNhcCk7CisgICAgbVN0cm9rZUxpbmVKb2luID0gU2tQYWludDo6Sm9pbihzdHJva2VMaW5lSm9pbik7CisKKyAgICAvLyBJZiBhbnkgdHJpbSBwcm9wZXJ0eSBjaGFuZ2VzLCBtYXJrIHRyaW0gZGlydHkgYW5kIHVwZGF0ZSB0aGUgdHJpbSBwYXRoCisgICAgc2V0VHJpbVBhdGhTdGFydCh0cmltUGF0aFN0YXJ0KTsKKyAgICBzZXRUcmltUGF0aEVuZCh0cmltUGF0aEVuZCk7CisgICAgc2V0VHJpbVBhdGhPZmZzZXQodHJpbVBhdGhPZmZzZXQpOworfQorCitpbmxpbmUgU2tDb2xvciBhcHBseUFscGhhKFNrQ29sb3IgY29sb3IsIGZsb2F0IGFscGhhKSB7CisgICAgaW50IGFscGhhQnl0ZXMgPSBTa0NvbG9yR2V0QShjb2xvcik7CisgICAgcmV0dXJuIFNrQ29sb3JTZXRBKGNvbG9yLCBhbHBoYUJ5dGVzICogYWxwaGEpOworfQorCit2b2lkIEZ1bGxQYXRoOjpkcmF3UGF0aChDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tQYXRoJiByZW5kZXJQYXRoLCBmbG9hdCBzdHJva2VTY2FsZSl7CisgICAgLy8gRHJhdyBwYXRoJ3MgZmlsbCwgaWYgZmlsbCBjb2xvciBpc24ndCB0cmFuc3BhcmVudC4KKyAgICBpZiAobUZpbGxDb2xvciAhPSBTS19Db2xvclRSQU5TUEFSRU5UKSB7CisgICAgICAgIG1QYWludC5zZXRTdHlsZShTa1BhaW50OjpTdHlsZTo6a0ZpbGxfU3R5bGUpOworICAgICAgICBtUGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICBtUGFpbnQuc2V0Q29sb3IoYXBwbHlBbHBoYShtRmlsbENvbG9yLCBtRmlsbEFscGhhKSk7CisgICAgICAgIG91dENhbnZhcy0+ZHJhd1BhdGgocmVuZGVyUGF0aCwgbVBhaW50KTsKKyAgICB9CisgICAgLy8gRHJhdyBwYXRoJ3Mgc3Ryb2tlLCBpZiBzdHJva2UgY29sb3IgaXNuJ3QgdHJhbnNwYXJlbnQKKyAgICBpZiAobVN0cm9rZUNvbG9yICE9IFNLX0NvbG9yVFJBTlNQQVJFTlQpIHsKKyAgICAgICAgbVBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OlN0eWxlOjprU3Ryb2tlX1N0eWxlKTsKKyAgICAgICAgbVBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgbVBhaW50LnNldFN0cm9rZUpvaW4obVN0cm9rZUxpbmVKb2luKTsKKyAgICAgICAgbVBhaW50LnNldFN0cm9rZUNhcChtU3Ryb2tlTGluZUNhcCk7CisgICAgICAgIG1QYWludC5zZXRTdHJva2VNaXRlcihtU3Ryb2tlTWl0ZXJMaW1pdCk7CisgICAgICAgIG1QYWludC5zZXRDb2xvcihhcHBseUFscGhhKG1TdHJva2VDb2xvciwgbVN0cm9rZUFscGhhKSk7CisgICAgICAgIG1QYWludC5zZXRTdHJva2VXaWR0aChtU3Ryb2tlV2lkdGggKiBzdHJva2VTY2FsZSk7CisgICAgICAgIG91dENhbnZhcy0+ZHJhd1BhdGgocmVuZGVyUGF0aCwgbVBhaW50KTsKKyAgICB9Cit9CisKKy8qKgorICogQXBwbGllcyB0cmltbWluZyB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisgKi8KK3ZvaWQgRnVsbFBhdGg6OmFwcGx5VHJpbSgpIHsKKyAgICBpZiAobVRyaW1QYXRoU3RhcnQgPT0gMC4wZiAmJiBtVHJpbVBhdGhFbmQgPT0gMS4wZikgeworICAgICAgICAvLyBObyB0cmltbWluZyBuZWNlc3NhcnkuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2tQYXRoTWVhc3VyZSBtZWFzdXJlKG1Ta1BhdGgsIGZhbHNlKTsKKyAgICBmbG9hdCBsZW4gPSBTa1NjYWxhclRvRmxvYXQobWVhc3VyZS5nZXRMZW5ndGgoKSk7CisgICAgZmxvYXQgc3RhcnQgPSBsZW4gKiBmbW9kKChtVHJpbVBhdGhTdGFydCArIG1UcmltUGF0aE9mZnNldCksIDEuMGYpOworICAgIGZsb2F0IGVuZCA9IGxlbiAqIGZtb2QoKG1UcmltUGF0aEVuZCArIG1UcmltUGF0aE9mZnNldCksIDEuMGYpOworCisgICAgbVRyaW1tZWRTa1BhdGgucmVzZXQoKTsKKyAgICBpZiAoc3RhcnQgPiBlbmQpIHsKKyAgICAgICAgbWVhc3VyZS5nZXRTZWdtZW50KHN0YXJ0LCBsZW4sICZtVHJpbW1lZFNrUGF0aCwgdHJ1ZSk7CisgICAgICAgIG1lYXN1cmUuZ2V0U2VnbWVudCgwLCBlbmQsICZtVHJpbW1lZFNrUGF0aCwgdHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVhc3VyZS5nZXRTZWdtZW50KHN0YXJ0LCBlbmQsICZtVHJpbW1lZFNrUGF0aCwgdHJ1ZSk7CisgICAgfQorICAgIG1UcmltRGlydHkgPSBmYWxzZTsKK30KKworaW5saW5lIGludCBwdXREYXRhKGludDhfdCogb3V0Qnl0ZXMsIGludCBzdGFydEluZGV4LCBmbG9hdCB2YWx1ZSkgeworICAgIGludCBzaXplID0gc2l6ZW9mKGZsb2F0KTsKKyAgICBtZW1jcHkoJm91dEJ5dGVzW3N0YXJ0SW5kZXhdLCAmdmFsdWUsIHNpemUpOworICAgIHJldHVybiBzaXplOworfQorCitpbmxpbmUgaW50IHB1dERhdGEoaW50OF90KiBvdXRCeXRlcywgaW50IHN0YXJ0SW5kZXgsIGludCB2YWx1ZSkgeworICAgIGludCBzaXplID0gc2l6ZW9mKGludCk7CisgICAgbWVtY3B5KCZvdXRCeXRlc1tzdGFydEluZGV4XSwgJnZhbHVlLCBzaXplKTsKKyAgICByZXR1cm4gc2l6ZTsKK30KKworc3RydWN0IEZ1bGxQYXRoUHJvcGVydGllcyB7CisgICAgLy8gVE9ETzogQ29uc2lkZXIgc3RvcmluZyBmdWxsIHBhdGggcHJvcGVydGllcyBpbiB0aGlzIHN0cnVjdCBpbnN0ZWFkIG9mIHRoZSBmaWVsZHMuCisgICAgZmxvYXQgc3Ryb2tlV2lkdGg7CisgICAgU2tDb2xvciBzdHJva2VDb2xvcjsKKyAgICBmbG9hdCBzdHJva2VBbHBoYTsKKyAgICBTa0NvbG9yIGZpbGxDb2xvcjsKKyAgICBmbG9hdCBmaWxsQWxwaGE7CisgICAgZmxvYXQgdHJpbVBhdGhTdGFydDsKKyAgICBmbG9hdCB0cmltUGF0aEVuZDsKKyAgICBmbG9hdCB0cmltUGF0aE9mZnNldDsKKyAgICBpbnQzMl90IHN0cm9rZUxpbmVDYXA7CisgICAgaW50MzJfdCBzdHJva2VMaW5lSm9pbjsKKyAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0OworfTsKKworUkVRVUlSRV9DT01QQVRJQkxFX0xBWU9VVChGdWxsUGF0aFByb3BlcnRpZXMpOworCitzdGF0aWNfYXNzZXJ0KHNpemVvZihmbG9hdCkgPT0gc2l6ZW9mKGludDMyX3QpLCAiZmxvYXQgaXMgbm90IHRoZSBzYW1lIHNpemUgYXMgaW50MzJfdCIpOworc3RhdGljX2Fzc2VydChzaXplb2YoU2tDb2xvcikgPT0gc2l6ZW9mKGludDMyX3QpLCAiU2tDb2xvciBpcyBub3QgdGhlIHNhbWUgc2l6ZSBhcyBpbnQzMl90Iik7CisKK2Jvb2wgRnVsbFBhdGg6OmdldFByb3BlcnRpZXMoaW50OF90KiBvdXRQcm9wZXJ0aWVzLCBpbnQgbGVuZ3RoKSB7CisgICAgaW50IHByb3BlcnR5RGF0YVNpemUgPSBzaXplb2YoRnVsbFBhdGhQcm9wZXJ0aWVzKTsKKyAgICBpZiAobGVuZ3RoICE9IHByb3BlcnR5RGF0YVNpemUpIHsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiUHJvcGVydGllcyBuZWVkcyBleGFjdGx5ICVkIGJ5dGVzLCBhIGJ5dGUgYXJyYXkgb2Ygc2l6ZSAlZCBpcyBwcm92aWRlZCIsCisgICAgICAgICAgICAgICAgcHJvcGVydHlEYXRhU2l6ZSwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBUT0RPOiBjb25zaWRlciByZXBsYWNpbmcgdGhlIHByb3BlcnR5IGZpZWxkcyB3aXRoIGEgRnVsbFBhdGhQcm9wZXJ0aWVzIHN0cnVjdC4KKyAgICBGdWxsUGF0aFByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgICBwcm9wZXJ0aWVzLnN0cm9rZVdpZHRoID0gbVN0cm9rZVdpZHRoOworICAgIHByb3BlcnRpZXMuc3Ryb2tlQ29sb3IgPSBtU3Ryb2tlQ29sb3I7CisgICAgcHJvcGVydGllcy5zdHJva2VBbHBoYSA9IG1TdHJva2VBbHBoYTsKKyAgICBwcm9wZXJ0aWVzLmZpbGxDb2xvciA9IG1GaWxsQ29sb3I7CisgICAgcHJvcGVydGllcy5maWxsQWxwaGEgPSBtRmlsbEFscGhhOworICAgIHByb3BlcnRpZXMudHJpbVBhdGhTdGFydCA9IG1UcmltUGF0aFN0YXJ0OworICAgIHByb3BlcnRpZXMudHJpbVBhdGhFbmQgPSBtVHJpbVBhdGhFbmQ7CisgICAgcHJvcGVydGllcy50cmltUGF0aE9mZnNldCA9IG1UcmltUGF0aE9mZnNldDsKKyAgICBwcm9wZXJ0aWVzLnN0cm9rZUxpbmVDYXAgPSBtU3Ryb2tlTGluZUNhcDsKKyAgICBwcm9wZXJ0aWVzLnN0cm9rZUxpbmVKb2luID0gbVN0cm9rZUxpbmVKb2luOworICAgIHByb3BlcnRpZXMuc3Ryb2tlTWl0ZXJMaW1pdCA9IG1TdHJva2VNaXRlckxpbWl0OworCisgICAgbWVtY3B5KG91dFByb3BlcnRpZXMsICZwcm9wZXJ0aWVzLCBsZW5ndGgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENsaXBQYXRoOjpkcmF3UGF0aChDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tQYXRoJiByZW5kZXJQYXRoLAorICAgICAgICBmbG9hdCBzdHJva2VTY2FsZSl7CisgICAgb3V0Q2FudmFzLT5jbGlwUGF0aCgmcmVuZGVyUGF0aCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworfQorCitHcm91cDo6R3JvdXAoY29uc3QgR3JvdXAmIGdyb3VwKSA6IE5vZGUoZ3JvdXApIHsKKyAgICBtUm90YXRlID0gZ3JvdXAubVJvdGF0ZTsKKyAgICBtUGl2b3RYID0gZ3JvdXAubVBpdm90WDsKKyAgICBtUGl2b3RZID0gZ3JvdXAubVBpdm90WTsKKyAgICBtU2NhbGVYID0gZ3JvdXAubVNjYWxlWDsKKyAgICBtU2NhbGVZID0gZ3JvdXAubVNjYWxlWTsKKyAgICBtVHJhbnNsYXRlWCA9IGdyb3VwLm1UcmFuc2xhdGVYOworICAgIG1UcmFuc2xhdGVZID0gZ3JvdXAubVRyYW5zbGF0ZVk7Cit9CisKK3ZvaWQgR3JvdXA6OmRyYXcoQ2FudmFzKiBvdXRDYW52YXMsIGNvbnN0IFNrTWF0cml4JiBjdXJyZW50TWF0cml4LCBmbG9hdCBzY2FsZVgsCisgICAgICAgIGZsb2F0IHNjYWxlWSkgeworICAgIC8vIFRPRE86IFRyeSBhcHBseSB0aGUgbWF0cml4IHRvIHRoZSBjYW52YXMgaW5zdGVhZCBvZiBwYXNzaW5nIGl0IGRvd24gdGhlIHRyZWUKKworICAgIC8vIENhbGN1bGF0ZSBjdXJyZW50IGdyb3VwJ3MgbWF0cml4IGJ5IHByZUNvbmNhdCB0aGUgcGFyZW50J3MgYW5kCisgICAgLy8gYW5kIHRoZSBjdXJyZW50IG9uZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKyAgICAvLyBCYXNpY2FsbHkgdGhlIE1maW5hbCA9IE12aWV3cG9ydCAqIE0wICogTTEgKiBNMjsKKyAgICAvLyBNaSB0aGUgbG9jYWwgbWF0cml4IGF0IGxldmVsIGkgb2YgdGhlIGdyb3VwIHRyZWUuCisgICAgU2tNYXRyaXggc3RhY2tlZE1hdHJpeDsKKyAgICBnZXRMb2NhbE1hdHJpeCgmc3RhY2tlZE1hdHJpeCk7CisgICAgc3RhY2tlZE1hdHJpeC5wb3N0Q29uY2F0KGN1cnJlbnRNYXRyaXgpOworCisgICAgLy8gU2F2ZSB0aGUgY3VycmVudCBjbGlwIGluZm9ybWF0aW9uLCB3aGljaCBpcyBsb2NhbCB0byB0aGlzIGdyb3VwLgorICAgIG91dENhbnZhcy0+c2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgIC8vIERyYXcgdGhlIGdyb3VwIHRyZWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFhNTCBmaWxlLgorICAgIGZvciAoTm9kZSogY2hpbGQgOiBtQ2hpbGRyZW4pIHsKKyAgICAgICAgY2hpbGQtPmRyYXcob3V0Q2FudmFzLCBzdGFja2VkTWF0cml4LCBzY2FsZVgsIHNjYWxlWSk7CisgICAgfQorICAgIC8vIFJlc3RvcmUgdGhlIHByZXZpb3VzIGNsaXAgaW5mb3JtYXRpb24uCisgICAgb3V0Q2FudmFzLT5yZXN0b3JlKCk7Cit9CisKK3ZvaWQgR3JvdXA6OmR1bXAoKSB7CisgICAgQUxPR0QoIkdyb3VwICVzIGhhcyAlenUgY2hpbGRyZW46ICIsIG1OYW1lLmNfc3RyKCksIG1DaGlsZHJlbi5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUNoaWxkcmVuLnNpemUoKTsgaSsrKSB7CisgICAgICAgIG1DaGlsZHJlbltpXS0+ZHVtcCgpOworICAgIH0KK30KKwordm9pZCBHcm91cDo6dXBkYXRlTG9jYWxNYXRyaXgoZmxvYXQgcm90YXRlLCBmbG9hdCBwaXZvdFgsIGZsb2F0IHBpdm90WSwKKyAgICAgICAgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVksIGZsb2F0IHRyYW5zbGF0ZVgsIGZsb2F0IHRyYW5zbGF0ZVkpIHsKKyAgICBzZXRSb3RhdGlvbihyb3RhdGUpOworICAgIHNldFBpdm90WChwaXZvdFgpOworICAgIHNldFBpdm90WShwaXZvdFkpOworICAgIHNldFNjYWxlWChzY2FsZVgpOworICAgIHNldFNjYWxlWShzY2FsZVkpOworICAgIHNldFRyYW5zbGF0ZVgodHJhbnNsYXRlWCk7CisgICAgc2V0VHJhbnNsYXRlWSh0cmFuc2xhdGVZKTsKK30KKwordm9pZCBHcm91cDo6Z2V0TG9jYWxNYXRyaXgoU2tNYXRyaXgqIG91dE1hdHJpeCkgeworICAgIG91dE1hdHJpeC0+cmVzZXQoKTsKKyAgICAvLyBUT0RPOiB1c2Ugcm90YXRlKG1Sb3RhdGUsIG1QaXZvdFgsIG1QaXZvdFkpIGFuZCBzY2FsZSB3aXRoIHBpdm90IHBvaW50LCBpbnN0ZWFkIG9mCisgICAgLy8gdHJhbnNsYXRpbmcgdG8gcGl2b3QgZm9yIHJvdGF0aW5nIGFuZCBzY2FsaW5nLCB0aGVuIHRyYW5zbGF0aW5nIGJhY2suCisgICAgb3V0TWF0cml4LT5wb3N0VHJhbnNsYXRlKC1tUGl2b3RYLCAtbVBpdm90WSk7CisgICAgb3V0TWF0cml4LT5wb3N0U2NhbGUobVNjYWxlWCwgbVNjYWxlWSk7CisgICAgb3V0TWF0cml4LT5wb3N0Um90YXRlKG1Sb3RhdGUsIDAsIDApOworICAgIG91dE1hdHJpeC0+cG9zdFRyYW5zbGF0ZShtVHJhbnNsYXRlWCArIG1QaXZvdFgsIG1UcmFuc2xhdGVZICsgbVBpdm90WSk7Cit9CisKK3ZvaWQgR3JvdXA6OmFkZENoaWxkKE5vZGUqIGNoaWxkKSB7CisgICAgbUNoaWxkcmVuLnB1c2hfYmFjayhjaGlsZCk7Cit9CisKK2Jvb2wgR3JvdXA6OmdldFByb3BlcnRpZXMoZmxvYXQqIG91dFByb3BlcnRpZXMsIGludCBsZW5ndGgpIHsKKyAgICBpbnQgcHJvcGVydHlDb3VudCA9IHN0YXRpY19jYXN0PGludD4oUHJvcGVydHk6OkNvdW50KTsKKyAgICBpZiAobGVuZ3RoICE9IHByb3BlcnR5Q291bnQpIHsKKyAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiUHJvcGVydGllcyBuZWVkcyBleGFjdGx5ICVkIGJ5dGVzLCBhIGJ5dGUgYXJyYXkgb2Ygc2l6ZSAlZCBpcyBwcm92aWRlZCIsCisgICAgICAgICAgICAgICAgcHJvcGVydHlDb3VudCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnR5Q291bnQ7IGkrKykgeworICAgICAgICBQcm9wZXJ0eSBjdXJyZW50UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxQcm9wZXJ0eT4oaSk7CisgICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlJvdGF0ZV9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtUm90YXRlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlBpdm90WF9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtUGl2b3RYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlBpdm90WV9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtUGl2b3RZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlNjYWxlWF9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtU2NhbGVYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlNjYWxlWV9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtU2NhbGVZOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHJvcGVydHk6OlRyYW5zbGF0ZVhfUHJvcGVydHk6CisgICAgICAgICAgICBvdXRQcm9wZXJ0aWVzW2ldID0gbVRyYW5zbGF0ZVg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQcm9wZXJ0eTo6VHJhbnNsYXRlWV9Qcm9wZXJ0eToKKyAgICAgICAgICAgIG91dFByb3BlcnRpZXNbaV0gPSBtVHJhbnNsYXRlWTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgTE9HX0FMV0FZU19GQVRBTCgiSW52YWxpZCBpbnB1dCBpbmRleDogJWQiLCBpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUcmVlOjpkcmF3KENhbnZhcyogb3V0Q2FudmFzLCBTa0NvbG9yRmlsdGVyKiBjb2xvckZpbHRlciwKKyAgICAgICAgY29uc3QgU2tSZWN0JiBib3VuZHMsIGJvb2wgbmVlZHNNaXJyb3JpbmcsIGJvb2wgY2FuUmV1c2VDYWNoZSkgeworICAgIC8vIFRoZSBpbWFnZVZpZXcgY2FuIHNjYWxlIHRoZSBjYW52YXMgaW4gZGlmZmVyZW50IHdheXMsIGluIG9yZGVyIHRvCisgICAgLy8gYXZvaWQgYmx1cnJ5IHNjYWxpbmcsIHdlIGhhdmUgdG8gZHJhdyBpbnRvIGEgYml0bWFwIHdpdGggZXhhY3QgcGl4ZWwKKyAgICAvLyBzaXplIGZpcnN0LiBUaGlzIGJpdG1hcCBzaXplIGlzIGRldGVybWluZWQgYnkgdGhlIGJvdW5kcyBhbmQgdGhlCisgICAgLy8gY2FudmFzIHNjYWxlLgorICAgIG91dENhbnZhcy0+Z2V0TWF0cml4KCZtQ2FudmFzTWF0cml4KTsKKyAgICBtQm91bmRzID0gYm91bmRzOworICAgIGZsb2F0IGNhbnZhc1NjYWxlWCA9IDEuMGY7CisgICAgZmxvYXQgY2FudmFzU2NhbGVZID0gMS4wZjsKKyAgICBpZiAobUNhbnZhc01hdHJpeC5nZXRTa2V3WCgpID09IDAgJiYgbUNhbnZhc01hdHJpeC5nZXRTa2V3WSgpID09IDApIHsKKyAgICAgICAgLy8gT25seSB1c2UgdGhlIHNjYWxlIHZhbHVlIHdoZW4gdGhlcmUncyBubyBza2V3IG9yIHJvdGF0aW9uIGluIHRoZSBjYW52YXMgbWF0cml4LgorICAgICAgICBjYW52YXNTY2FsZVggPSBtQ2FudmFzTWF0cml4LmdldFNjYWxlWCgpOworICAgICAgICBjYW52YXNTY2FsZVkgPSBtQ2FudmFzTWF0cml4LmdldFNjYWxlWSgpOworICAgIH0KKyAgICBpbnQgc2NhbGVkV2lkdGggPSAoaW50KSAobUJvdW5kcy53aWR0aCgpICogY2FudmFzU2NhbGVYKTsKKyAgICBpbnQgc2NhbGVkSGVpZ2h0ID0gKGludCkgKG1Cb3VuZHMuaGVpZ2h0KCkgKiBjYW52YXNTY2FsZVkpOworICAgIHNjYWxlZFdpZHRoID0gc3RkOjptaW4oVHJlZTo6TUFYX0NBQ0hFRF9CSVRNQVBfU0laRSwgc2NhbGVkV2lkdGgpOworICAgIHNjYWxlZEhlaWdodCA9IHN0ZDo6bWluKFRyZWU6Ok1BWF9DQUNIRURfQklUTUFQX1NJWkUsIHNjYWxlZEhlaWdodCk7CisKKyAgICBpZiAoc2NhbGVkV2lkdGggPD0gMCB8fCBzY2FsZWRIZWlnaHQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHNhdmVDb3VudCA9IG91dENhbnZhcy0+c2F2ZShTa0NhbnZhczo6U2F2ZUZsYWdzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7CisgICAgb3V0Q2FudmFzLT50cmFuc2xhdGUobUJvdW5kcy5mTGVmdCwgbUJvdW5kcy5mVG9wKTsKKworICAgIC8vIEhhbmRsZSBSVEwgbWlycm9yaW5nLgorICAgIGlmIChuZWVkc01pcnJvcmluZykgeworICAgICAgICBvdXRDYW52YXMtPnRyYW5zbGF0ZShtQm91bmRzLndpZHRoKCksIDApOworICAgICAgICBvdXRDYW52YXMtPnNjYWxlKC0xLjBmLCAxLjBmKTsKKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBjYW52YXMgaGFzIGJlZW4gdHJhbnNsYXRlZCB0byB0aGUgcmlnaHQgcG9zaXRpb24uCisgICAgLy8gQW5kIHdlIHVzZSB0aGlzIGJvdW5kIGZvciB0aGUgZGVzdGluYXRpb24gcmVjdCBmb3IgdGhlIGRyYXdCaXRtYXAsIHNvCisgICAgLy8gd2Ugb2Zmc2V0IHRvICgwLCAwKTsKKyAgICBtQm91bmRzLm9mZnNldFRvKDAsIDApOworCisgICAgY3JlYXRlQ2FjaGVkQml0bWFwSWZOZWVkZWQoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7CisgICAgaWYgKCFtQWxsb3dDYWNoaW5nKSB7CisgICAgICAgIHVwZGF0ZUNhY2hlZEJpdG1hcChzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWNhblJldXNlQ2FjaGUgfHwgbUNhY2hlRGlydHkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUNhY2hlZEJpdG1hcChzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShvdXRDYW52YXMsIGNvbG9yRmlsdGVyLCBtQm91bmRzKTsKKworICAgIG91dENhbnZhcy0+cmVzdG9yZVRvQ291bnQoc2F2ZUNvdW50KTsKK30KKwordm9pZCBUcmVlOjpkcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShDYW52YXMqIG91dENhbnZhcywgU2tDb2xvckZpbHRlciogZmlsdGVyLAorICAgICAgICBjb25zdCBTa1JlY3QmIG9yaWdpbmFsQm91bmRzKSB7CisgICAgU2tQYWludCogcGFpbnQ7CisgICAgaWYgKG1Sb290QWxwaGEgPT0gMS4wZiAmJiBmaWx0ZXIgPT0gTlVMTCkgeworICAgICAgICBwYWludCA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbVBhaW50LnNldEZpbHRlclF1YWxpdHkoa0xvd19Ta0ZpbHRlclF1YWxpdHkpOworICAgICAgICBtUGFpbnQuc2V0QWxwaGEobVJvb3RBbHBoYSAqIDI1NSk7CisgICAgICAgIG1QYWludC5zZXRDb2xvckZpbHRlcihmaWx0ZXIpOworICAgICAgICBwYWludCA9ICZtUGFpbnQ7CisgICAgfQorICAgIG91dENhbnZhcy0+ZHJhd0JpdG1hcChtQ2FjaGVkQml0bWFwLCAwLCAwLCBtQ2FjaGVkQml0bWFwLndpZHRoKCksIG1DYWNoZWRCaXRtYXAuaGVpZ2h0KCksCisgICAgICAgICAgICBvcmlnaW5hbEJvdW5kcy5mTGVmdCwgb3JpZ2luYWxCb3VuZHMuZlRvcCwgb3JpZ2luYWxCb3VuZHMuZlJpZ2h0LAorICAgICAgICAgICAgb3JpZ2luYWxCb3VuZHMuZkJvdHRvbSwgcGFpbnQpOworfQorCit2b2lkIFRyZWU6OnVwZGF0ZUNhY2hlZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICBtQ2FjaGVkQml0bWFwLmVyYXNlQ29sb3IoU0tfQ29sb3JUUkFOU1BBUkVOVCk7CisgICAgQ2FudmFzKiBvdXRDYW52YXMgPSBDYW52YXM6OmNyZWF0ZV9jYW52YXMobUNhY2hlZEJpdG1hcCk7CisgICAgZmxvYXQgc2NhbGVYID0gd2lkdGggLyBtVmlld3BvcnRXaWR0aDsKKyAgICBmbG9hdCBzY2FsZVkgPSBoZWlnaHQgLyBtVmlld3BvcnRIZWlnaHQ7CisgICAgbVJvb3ROb2RlLT5kcmF3KG91dENhbnZhcywgU2tNYXRyaXg6OkkoKSwgc2NhbGVYLCBzY2FsZVkpOworICAgIG1DYWNoZURpcnR5ID0gZmFsc2U7Cit9CisKK3ZvaWQgVHJlZTo6Y3JlYXRlQ2FjaGVkQml0bWFwSWZOZWVkZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgaWYgKCFjYW5SZXVzZUJpdG1hcCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBTa0ltYWdlSW5mbyBpbmZvID0gU2tJbWFnZUluZm86Ok1ha2Uod2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICBrTjMyX1NrQ29sb3JUeXBlLCBrUHJlbXVsX1NrQWxwaGFUeXBlKTsKKyAgICAgICAgbUNhY2hlZEJpdG1hcC5zZXRJbmZvKGluZm8pOworICAgICAgICAvLyBUT0RPOiBDb3VudCB0aGUgYml0bWFwIGNhY2hlIGFnYWluc3QgYXBwJ3MgamF2YSBoZWFwCisgICAgICAgIG1DYWNoZWRCaXRtYXAuYWxsb2NQaXhlbHMoaW5mbyk7CisgICAgICAgIG1DYWNoZURpcnR5ID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgVHJlZTo6Y2FuUmV1c2VCaXRtYXAoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgcmV0dXJuIHdpZHRoID09IG1DYWNoZWRCaXRtYXAud2lkdGgoKSAmJiBoZWlnaHQgPT0gbUNhY2hlZEJpdG1hcC5oZWlnaHQoKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFZlY3RvckRyYXdhYmxlCisKK307IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCit9OyAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlLmggYi9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg0YjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlLmgKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFORFJPSURfSFdVSV9WUEFUSF9ICisjZGVmaW5lIEFORFJPSURfSFdVSV9WUEFUSF9ICisKKyNpbmNsdWRlICJDYW52YXMuaCIKKyNpbmNsdWRlIDxTa0JpdG1hcC5oPgorI2luY2x1ZGUgPFNrQ29sb3IuaD4KKyNpbmNsdWRlIDxTa01hdHJpeC5oPgorI2luY2x1ZGUgPFNrUGFpbnQuaD4KKyNpbmNsdWRlIDxTa1BhdGguaD4KKyNpbmNsdWRlIDxTa1BhdGhNZWFzdXJlLmg+CisjaW5jbHVkZSA8U2tSZWN0Lmg+CisKKyNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8c3RyaW5nPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CituYW1lc3BhY2UgdWlyZW5kZXJlciB7CisKK25hbWVzcGFjZSBWZWN0b3JEcmF3YWJsZSB7CisjZGVmaW5lIFZEX1NFVF9QUk9QX1dJVEhfRkxBRyhmaWVsZCwgdmFsdWUsIGZsYWcpIChWRF9TRVRfUFJPUChmaWVsZCwgdmFsdWUpID8gKGZsYWcgPSB0cnVlLCB0cnVlKTogZmFsc2UpOworI2RlZmluZSBWRF9TRVRfUFJPUChmaWVsZCwgdmFsdWUpICh2YWx1ZSAhPSBmaWVsZCA/IChmaWVsZCA9IHZhbHVlLCB0cnVlKSA6IGZhbHNlKQorCisvKiBBIFZlY3RvckRyYXdhYmxlIGlzIGNvbXBvc2VkIG9mIGEgdHJlZSBvZiBub2Rlcy4KKyAqIEVhY2ggbm9kZSBjYW4gYmUgYSBncm91cCBub2RlLCBvciBhIHBhdGguCisgKiBBIGdyb3VwIG5vZGUgY2FuIGhhdmUgZ3JvdXBzIG9yIHBhdGhzIGFzIGNoaWxkcmVuLCBidXQgYSBwYXRoIG5vZGUgaGFzCisgKiBubyBjaGlsZHJlbi4KKyAqIE9uZSBleGFtcGxlIGNhbiBiZToKKyAqICAgICAgICAgICAgICAgICBSb290IEdyb3VwCisgKiAgICAgICAgICAgICAgICAvICAgIHwgICAgIFwKKyAqICAgICAgICAgICBHcm91cCAgICBQYXRoICAgIEdyb3VwCisgKiAgICAgICAgICAvICAgICBcICAgICAgICAgICAgIHwKKyAqICAgICAgICAgUGF0aCAgIFBhdGggICAgICAgICBQYXRoCisgKgorICovCitjbGFzcyBBTkRST0lEX0FQSSBOb2RlIHsKK3B1YmxpYzoKKyAgICBOb2RlKGNvbnN0IE5vZGUmIG5vZGUpIHsKKyAgICAgICAgbU5hbWUgPSBub2RlLm1OYW1lOworICAgIH0KKyAgICBOb2RlKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tNYXRyaXgmIGN1cnJlbnRNYXRyaXgsCisgICAgICAgICAgICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkgPSAwOworICAgIHZvaWQgc2V0TmFtZShjb25zdCBjaGFyKiBuYW1lKSB7CisgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICB9CisgICAgdmlydHVhbCB+Tm9kZSgpe30KK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnN0cmluZyBtTmFtZTsKK307CisKK2NsYXNzIEFORFJPSURfQVBJIFBhdGggOiBwdWJsaWMgTm9kZSB7CitwdWJsaWM6CisgICAgc3RydWN0IEFORFJPSURfQVBJIERhdGEgeworICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPiB2ZXJiczsKKyAgICAgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiB2ZXJiU2l6ZXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBwb2ludHM7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBEYXRhJiBkYXRhKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gdmVyYnMgPT0gZGF0YS52ZXJicyAmJiB2ZXJiU2l6ZXMgPT0gZGF0YS52ZXJiU2l6ZXMKKyAgICAgICAgICAgICAgICAgICAgJiYgcG9pbnRzID09IGRhdGEucG9pbnRzOworICAgICAgICB9CisgICAgfTsKKyAgICBQYXRoKGNvbnN0IERhdGEmIG5vZGVzKTsKKyAgICBQYXRoKGNvbnN0IFBhdGgmIHBhdGgpOworICAgIFBhdGgoY29uc3QgY2hhciogcGF0aCwgc2l6ZV90IHN0ckxlbmd0aCk7CisgICAgUGF0aCgpIHt9CisgICAgdm9pZCBkdW1wKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5Nb3JwaChjb25zdCBEYXRhJiBwYXRoKTsKKyAgICBib29sIGNhbk1vcnBoKGNvbnN0IFBhdGgmIHBhdGgpOworICAgIHZvaWQgZHJhdyhDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tNYXRyaXgmIGdyb3VwU3RhY2tlZE1hdHJpeCwKKyAgICAgICAgICAgIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFBhdGgoY29uc3QgY2hhciogcGF0aCwgc2l6ZV90IHN0ckxlbmd0aCk7CisgICAgdm9pZCBzZXRQYXRoRGF0YShjb25zdCBEYXRhJiBkYXRhKTsKKyAgICBzdGF0aWMgZmxvYXQgZ2V0TWF0cml4U2NhbGUoY29uc3QgU2tNYXRyaXgmIGdyb3VwU3RhY2tlZE1hdHJpeCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGNvbnN0IFNrUGF0aCYgZ2V0VXBkYXRlZFBhdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoQ2FudmFzICpvdXRDYW52YXMsIGNvbnN0IFNrUGF0aCYgcmVuZGVyUGF0aCwKKyAgICAgICAgICAgIGZsb2F0IHN0cm9rZVNjYWxlKSA9IDA7CisgICAgRGF0YSBtRGF0YTsKKyAgICBTa1BhdGggbVNrUGF0aDsKKyAgICBib29sIG1Ta1BhdGhEaXJ0eSA9IHRydWU7Cit9OworCitjbGFzcyBBTkRST0lEX0FQSSBGdWxsUGF0aDogcHVibGljIFBhdGggeworcHVibGljOgorICAgIEZ1bGxQYXRoKGNvbnN0IEZ1bGxQYXRoJiBwYXRoKTsgLy8gZm9yIGNsb25pbmcKKyAgICBGdWxsUGF0aChjb25zdCBjaGFyKiBwYXRoLCBzaXplX3Qgc3RyTGVuZ3RoKSA6IFBhdGgocGF0aCwgc3RyTGVuZ3RoKSB7fQorICAgIEZ1bGxQYXRoKCkgOiBQYXRoKCkge30KKyAgICBGdWxsUGF0aChjb25zdCBEYXRhJiBub2RlcykgOiBQYXRoKG5vZGVzKSB7fQorCisgICAgdm9pZCB1cGRhdGVQcm9wZXJ0aWVzKGZsb2F0IHN0cm9rZVdpZHRoLCBTa0NvbG9yIHN0cm9rZUNvbG9yLAorICAgICAgICAgICAgZmxvYXQgc3Ryb2tlQWxwaGEsIFNrQ29sb3IgZmlsbENvbG9yLCBmbG9hdCBmaWxsQWxwaGEsCisgICAgICAgICAgICBmbG9hdCB0cmltUGF0aFN0YXJ0LCBmbG9hdCB0cmltUGF0aEVuZCwgZmxvYXQgdHJpbVBhdGhPZmZzZXQsCisgICAgICAgICAgICBmbG9hdCBzdHJva2VNaXRlckxpbWl0LCBpbnQgc3Ryb2tlTGluZUNhcCwgaW50IHN0cm9rZUxpbmVKb2luKTsKKyAgICBmbG9hdCBnZXRTdHJva2VXaWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIG1TdHJva2VXaWR0aDsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCkgeworICAgICAgICBtU3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICB9CisgICAgU2tDb2xvciBnZXRTdHJva2VDb2xvcigpIHsKKyAgICAgICAgcmV0dXJuIG1TdHJva2VDb2xvcjsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJva2VDb2xvcihTa0NvbG9yIHN0cm9rZUNvbG9yKSB7CisgICAgICAgIG1TdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yOworICAgIH0KKyAgICBmbG9hdCBnZXRTdHJva2VBbHBoYSgpIHsKKyAgICAgICAgcmV0dXJuIG1TdHJva2VBbHBoYTsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJva2VBbHBoYShmbG9hdCBzdHJva2VBbHBoYSkgeworICAgICAgICBtU3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTsKKyAgICB9CisgICAgU2tDb2xvciBnZXRGaWxsQ29sb3IoKSB7CisgICAgICAgIHJldHVybiBtRmlsbENvbG9yOworICAgIH0KKyAgICB2b2lkIHNldEZpbGxDb2xvcihTa0NvbG9yIGZpbGxDb2xvcikgeworICAgICAgICBtRmlsbENvbG9yID0gZmlsbENvbG9yOworICAgIH0KKyAgICBmbG9hdCBnZXRGaWxsQWxwaGEoKSB7CisgICAgICAgIHJldHVybiBtRmlsbEFscGhhOworICAgIH0KKyAgICB2b2lkIHNldEZpbGxBbHBoYShmbG9hdCBmaWxsQWxwaGEpIHsKKyAgICAgICAgbUZpbGxBbHBoYSA9IGZpbGxBbHBoYTsKKyAgICB9CisgICAgZmxvYXQgZ2V0VHJpbVBhdGhTdGFydCgpIHsKKyAgICAgICAgcmV0dXJuIG1UcmltUGF0aFN0YXJ0OworICAgIH0KKyAgICB2b2lkIHNldFRyaW1QYXRoU3RhcnQoZmxvYXQgdHJpbVBhdGhTdGFydCkgeworICAgICAgICBWRF9TRVRfUFJPUF9XSVRIX0ZMQUcobVRyaW1QYXRoU3RhcnQsIHRyaW1QYXRoU3RhcnQsIG1UcmltRGlydHkpOworICAgIH0KKyAgICBmbG9hdCBnZXRUcmltUGF0aEVuZCgpIHsKKyAgICAgICAgcmV0dXJuIG1UcmltUGF0aEVuZDsKKyAgICB9CisgICAgdm9pZCBzZXRUcmltUGF0aEVuZChmbG9hdCB0cmltUGF0aEVuZCkgeworICAgICAgICBWRF9TRVRfUFJPUF9XSVRIX0ZMQUcobVRyaW1QYXRoRW5kLCB0cmltUGF0aEVuZCwgbVRyaW1EaXJ0eSk7CisgICAgfQorICAgIGZsb2F0IGdldFRyaW1QYXRoT2Zmc2V0KCkgeworICAgICAgICByZXR1cm4gbVRyaW1QYXRoT2Zmc2V0OworICAgIH0KKyAgICB2b2lkIHNldFRyaW1QYXRoT2Zmc2V0KGZsb2F0IHRyaW1QYXRoT2Zmc2V0KSB7CisgICAgICAgIFZEX1NFVF9QUk9QX1dJVEhfRkxBRyhtVHJpbVBhdGhPZmZzZXQsIHRyaW1QYXRoT2Zmc2V0LCBtVHJpbURpcnR5KTsKKyAgICB9CisgICAgYm9vbCBnZXRQcm9wZXJ0aWVzKGludDhfdCogb3V0UHJvcGVydGllcywgaW50IGxlbmd0aCk7CisKK3Byb3RlY3RlZDoKKyAgICBjb25zdCBTa1BhdGgmIGdldFVwZGF0ZWRQYXRoKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0aChDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tQYXRoJiByZW5kZXJQYXRoLAorICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIC8vIEFwcGxpZXMgdHJpbW1pbmcgdG8gdGhlIHNwZWNpZmllZCBwYXRoLgorICAgIHZvaWQgYXBwbHlUcmltKCk7CisgICAgZmxvYXQgbVN0cm9rZVdpZHRoID0gMDsKKyAgICBTa0NvbG9yIG1TdHJva2VDb2xvciA9IFNLX0NvbG9yVFJBTlNQQVJFTlQ7CisgICAgZmxvYXQgbVN0cm9rZUFscGhhID0gMTsKKyAgICBTa0NvbG9yIG1GaWxsQ29sb3IgPSBTS19Db2xvclRSQU5TUEFSRU5UOworICAgIGZsb2F0IG1GaWxsQWxwaGEgPSAxOworICAgIGZsb2F0IG1UcmltUGF0aFN0YXJ0ID0gMDsKKyAgICBmbG9hdCBtVHJpbVBhdGhFbmQgPSAxOworICAgIGZsb2F0IG1UcmltUGF0aE9mZnNldCA9IDA7CisgICAgYm9vbCBtVHJpbURpcnR5ID0gdHJ1ZTsKKyAgICBTa1BhaW50OjpDYXAgbVN0cm9rZUxpbmVDYXAgPSBTa1BhaW50OjpDYXA6OmtCdXR0X0NhcDsKKyAgICBTa1BhaW50OjpKb2luIG1TdHJva2VMaW5lSm9pbiA9IFNrUGFpbnQ6OkpvaW46OmtNaXRlcl9Kb2luOworICAgIGZsb2F0IG1TdHJva2VNaXRlckxpbWl0ID0gNDsKKyAgICBTa1BhdGggbVRyaW1tZWRTa1BhdGg7CisgICAgU2tQYWludCBtUGFpbnQ7Cit9OworCitjbGFzcyBBTkRST0lEX0FQSSBDbGlwUGF0aDogcHVibGljIFBhdGggeworcHVibGljOgorICAgIENsaXBQYXRoKGNvbnN0IENsaXBQYXRoJiBwYXRoKSA6IFBhdGgocGF0aCkge30KKyAgICBDbGlwUGF0aChjb25zdCBjaGFyKiBwYXRoLCBzaXplX3Qgc3RyTGVuZ3RoKSA6IFBhdGgocGF0aCwgc3RyTGVuZ3RoKSB7fQorICAgIENsaXBQYXRoKCkgOiBQYXRoKCkge30KKyAgICBDbGlwUGF0aChjb25zdCBEYXRhJiBub2RlcykgOiBQYXRoKG5vZGVzKSB7fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkcmF3UGF0aChDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tQYXRoJiByZW5kZXJQYXRoLAorICAgICAgICAgICAgZmxvYXQgc3Ryb2tlU2NhbGUpIG92ZXJyaWRlOworfTsKKworY2xhc3MgQU5EUk9JRF9BUEkgR3JvdXA6IHB1YmxpYyBOb2RlIHsKK3B1YmxpYzoKKyAgICBHcm91cChjb25zdCBHcm91cCYgZ3JvdXApOworICAgIEdyb3VwKCkge30KKyAgICBmbG9hdCBnZXRSb3RhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIG1Sb3RhdGU7CisgICAgfQorICAgIHZvaWQgc2V0Um90YXRpb24oZmxvYXQgcm90YXRpb24pIHsKKyAgICAgICAgbVJvdGF0ZSA9IHJvdGF0aW9uOworICAgIH0KKyAgICBmbG9hdCBnZXRQaXZvdFgoKSB7CisgICAgICAgIHJldHVybiBtUGl2b3RYOworICAgIH0KKyAgICB2b2lkIHNldFBpdm90WChmbG9hdCBwaXZvdFgpIHsKKyAgICAgICAgbVBpdm90WCA9IHBpdm90WDsKKyAgICB9CisgICAgZmxvYXQgZ2V0UGl2b3RZKCkgeworICAgICAgICByZXR1cm4gbVBpdm90WTsKKyAgICB9CisgICAgdm9pZCBzZXRQaXZvdFkoZmxvYXQgcGl2b3RZKSB7CisgICAgICAgIG1QaXZvdFkgPSBwaXZvdFk7CisgICAgfQorICAgIGZsb2F0IGdldFNjYWxlWCgpIHsKKyAgICAgICAgcmV0dXJuIG1TY2FsZVg7CisgICAgfQorICAgIHZvaWQgc2V0U2NhbGVYKGZsb2F0IHNjYWxlWCkgeworICAgICAgICBtU2NhbGVYID0gc2NhbGVYOworICAgIH0KKyAgICBmbG9hdCBnZXRTY2FsZVkoKSB7CisgICAgICAgIHJldHVybiBtU2NhbGVZOworICAgIH0KKyAgICB2b2lkIHNldFNjYWxlWShmbG9hdCBzY2FsZVkpIHsKKyAgICAgICAgbVNjYWxlWSA9IHNjYWxlWTsKKyAgICB9CisgICAgZmxvYXQgZ2V0VHJhbnNsYXRlWCgpIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2xhdGVYOworICAgIH0KKyAgICB2b2lkIHNldFRyYW5zbGF0ZVgoZmxvYXQgdHJhbnNsYXRlWCkgeworICAgICAgICBtVHJhbnNsYXRlWCA9IHRyYW5zbGF0ZVg7CisgICAgfQorICAgIGZsb2F0IGdldFRyYW5zbGF0ZVkoKSB7CisgICAgICAgIHJldHVybiBtVHJhbnNsYXRlWTsKKyAgICB9CisgICAgdm9pZCBzZXRUcmFuc2xhdGVZKGZsb2F0IHRyYW5zbGF0ZVkpIHsKKyAgICAgICAgbVRyYW5zbGF0ZVkgPSB0cmFuc2xhdGVZOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhDYW52YXMqIG91dENhbnZhcywgY29uc3QgU2tNYXRyaXgmIGN1cnJlbnRNYXRyaXgsCisgICAgICAgICAgICBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVMb2NhbE1hdHJpeChmbG9hdCByb3RhdGUsIGZsb2F0IHBpdm90WCwgZmxvYXQgcGl2b3RZLAorICAgICAgICAgICAgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVksIGZsb2F0IHRyYW5zbGF0ZVgsIGZsb2F0IHRyYW5zbGF0ZVkpOworICAgIHZvaWQgZ2V0TG9jYWxNYXRyaXgoU2tNYXRyaXgqIG91dE1hdHJpeCk7CisgICAgdm9pZCBhZGRDaGlsZChOb2RlKiBjaGlsZCk7CisgICAgdm9pZCBkdW1wKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBnZXRQcm9wZXJ0aWVzKGZsb2F0KiBvdXRQcm9wZXJ0aWVzLCBpbnQgbGVuZ3RoKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIFByb3BlcnR5IHsKKyAgICAgICAgUm90YXRlX1Byb3BlcnR5ID0gMCwKKyAgICAgICAgUGl2b3RYX1Byb3BlcnR5LAorICAgICAgICBQaXZvdFlfUHJvcGVydHksCisgICAgICAgIFNjYWxlWF9Qcm9wZXJ0eSwKKyAgICAgICAgU2NhbGVZX1Byb3BlcnR5LAorICAgICAgICBUcmFuc2xhdGVYX1Byb3BlcnR5LAorICAgICAgICBUcmFuc2xhdGVZX1Byb3BlcnR5LAorICAgICAgICAvLyBDb3VudCBvZiB0aGUgcHJvcGVydGllcywgbXVzdCBiZSBhdCB0aGUgZW5kLgorICAgICAgICBDb3VudCwKKyAgICB9OworICAgIGZsb2F0IG1Sb3RhdGUgPSAwOworICAgIGZsb2F0IG1QaXZvdFggPSAwOworICAgIGZsb2F0IG1QaXZvdFkgPSAwOworICAgIGZsb2F0IG1TY2FsZVggPSAxOworICAgIGZsb2F0IG1TY2FsZVkgPSAxOworICAgIGZsb2F0IG1UcmFuc2xhdGVYID0gMDsKKyAgICBmbG9hdCBtVHJhbnNsYXRlWSA9IDA7CisgICAgc3RkOjp2ZWN0b3I8Tm9kZSo+IG1DaGlsZHJlbjsKK307CisKK2NsYXNzIEFORFJPSURfQVBJIFRyZWUgeworcHVibGljOgorICAgIFRyZWUoR3JvdXAqIHJvb3ROb2RlKSA6IG1Sb290Tm9kZShyb290Tm9kZSkge30KKyAgICB2b2lkIGRyYXcoQ2FudmFzKiBvdXRDYW52YXMsIFNrQ29sb3JGaWx0ZXIqIGNvbG9yRmlsdGVyLAorICAgICAgICAgICAgY29uc3QgU2tSZWN0JiBib3VuZHMsIGJvb2wgbmVlZHNNaXJyb3JpbmcsIGJvb2wgY2FuUmV1c2VDYWNoZSk7CisgICAgdm9pZCBkcmF3Q2FjaGVkQml0bWFwV2l0aFJvb3RBbHBoYShDYW52YXMqIG91dENhbnZhcywgU2tDb2xvckZpbHRlciogZmlsdGVyLAorICAgICAgICAgICAgY29uc3QgU2tSZWN0JiBvcmlnaW5hbEJvdW5kcyk7CisKKyAgICB2b2lkIHVwZGF0ZUNhY2hlZEJpdG1hcChpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIHZvaWQgY3JlYXRlQ2FjaGVkQml0bWFwSWZOZWVkZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICBib29sIGNhblJldXNlQml0bWFwKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBzZXRBbGxvd0NhY2hpbmcoYm9vbCBhbGxvd0NhY2hpbmcpIHsKKyAgICAgICAgbUFsbG93Q2FjaGluZyA9IGFsbG93Q2FjaGluZzsKKyAgICB9CisgICAgYm9vbCBzZXRSb290QWxwaGEoZmxvYXQgcm9vdEFscGhhKSB7CisgICAgICAgIHJldHVybiBWRF9TRVRfUFJPUChtUm9vdEFscGhhLCByb290QWxwaGEpOworICAgIH0KKworICAgIGZsb2F0IGdldFJvb3RBbHBoYSgpIHsKKyAgICAgICAgcmV0dXJuIG1Sb290QWxwaGE7CisgICAgfQorICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGZsb2F0IHZpZXdwb3J0V2lkdGgsIGZsb2F0IHZpZXdwb3J0SGVpZ2h0KSB7CisgICAgICAgIG1WaWV3cG9ydFdpZHRoID0gdmlld3BvcnRXaWR0aDsKKyAgICAgICAgbVZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQ7CisgICAgfQorCitwcml2YXRlOgorICAgIC8vIENhcCB0aGUgYml0bWFwIHNpemUsIHN1Y2ggdGhhdCBpdCB3b24ndCBodXJ0IHRoZSBwZXJmb3JtYW5jZSB0b28gbXVjaAorICAgIC8vIGFuZCBpdCB3b24ndCBjcmFzaCBkdWUgdG8gYSB2ZXJ5IGxhcmdlIHNjYWxlLgorICAgIC8vIFRoZSBkcmF3YWJsZSB3aWxsIGxvb2sgYmx1cnJ5IGFib3ZlIHRoaXMgc2l6ZS4KKyAgICBjb25zdCBzdGF0aWMgaW50IE1BWF9DQUNIRURfQklUTUFQX1NJWkU7CisKKyAgICBib29sIG1DYWNoZURpcnR5ID0gdHJ1ZTsKKyAgICBib29sIG1BbGxvd0NhY2hpbmcgPSB0cnVlOworICAgIGZsb2F0IG1WaWV3cG9ydFdpZHRoID0gMDsKKyAgICBmbG9hdCBtVmlld3BvcnRIZWlnaHQgPSAwOworICAgIGZsb2F0IG1Sb290QWxwaGEgPSAxLjBmOworCisgICAgR3JvdXAqIG1Sb290Tm9kZTsKKyAgICBTa1JlY3QgbUJvdW5kczsKKyAgICBTa01hdHJpeCBtQ2FudmFzTWF0cml4OworICAgIFNrUGFpbnQgbVBhaW50OworICAgIFNrUGF0aE1lYXN1cmUgbVBhdGhNZWFzdXJlOworICAgIFNrQml0bWFwIG1DYWNoZWRCaXRtYXA7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFZlY3RvckRyYXdhYmxlCisKK3R5cGVkZWYgVmVjdG9yRHJhd2FibGU6OlBhdGg6OkRhdGEgUGF0aERhdGE7Cit9IC8vIG5hbWVzcGFjZSB1aXJlbmRlcmVyCit9IC8vIG5hbWVzcGFjZSBhbmRyb2lkCisKKyNlbmRpZiAvLyBBTkRST0lEX0hXVUlfVlBBVEhfSApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL1ZlY3RvckRyYXdhYmxlUGF0aC5jcHAgYi9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGVQYXRoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlhNTRjYS4uMDAwMDAwMAotLS0gYS9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGVQYXRoLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi0jaW5jbHVkZSAiVmVjdG9yRHJhd2FibGVQYXRoLmgiCi0KLSNpbmNsdWRlICJQYXRoUGFyc2VyLmgiCi0jaW5jbHVkZSAidXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgdWlyZW5kZXJlciB7Ci0KLQotVmVjdG9yRHJhd2FibGVQYXRoOjpWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgY2hhciogcGF0aFN0ciwgc2l6ZV90IHN0ckxlbmd0aCkgewotICAgIFBhdGhQYXJzZXI6OlBhcnNlUmVzdWx0IHJlc3VsdDsKLSAgICBQYXRoUGFyc2VyOjpnZXRQYXRoRGF0YUZyb21TdHJpbmcoJm1EYXRhLCAmcmVzdWx0LCBwYXRoU3RyLCBzdHJMZW5ndGgpOwotICAgIGlmICghcmVzdWx0LmZhaWx1cmVPY2N1cnJlZCkgewotICAgICAgICBWZWN0b3JEcmF3YWJsZVV0aWxzOjp2ZXJic1RvUGF0aCgmbVNrUGF0aCwgbURhdGEpOwotICAgIH0KLX0KLQotVmVjdG9yRHJhd2FibGVQYXRoOjpWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgUGF0aERhdGEmIGRhdGEpIHsKLSAgICBtRGF0YSA9IGRhdGE7Ci0gICAgLy8gTm93IHdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aAotICAgIFZlY3RvckRyYXdhYmxlVXRpbHM6OnZlcmJzVG9QYXRoKCZtU2tQYXRoLCBkYXRhKTsKLX0KLQotVmVjdG9yRHJhd2FibGVQYXRoOjpWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgVmVjdG9yRHJhd2FibGVQYXRoJiBwYXRoKSB7Ci0gICAgbURhdGEgPSBwYXRoLm1EYXRhOwotICAgIFZlY3RvckRyYXdhYmxlVXRpbHM6OnZlcmJzVG9QYXRoKCZtU2tQYXRoLCBtRGF0YSk7Ci19Ci0KLQotYm9vbCBWZWN0b3JEcmF3YWJsZVBhdGg6OmNhbk1vcnBoKGNvbnN0IFBhdGhEYXRhJiBtb3JwaFRvKSB7Ci0gICAgcmV0dXJuIFZlY3RvckRyYXdhYmxlVXRpbHM6OmNhbk1vcnBoKG1EYXRhLCBtb3JwaFRvKTsKLX0KLQotYm9vbCBWZWN0b3JEcmF3YWJsZVBhdGg6OmNhbk1vcnBoKGNvbnN0IFZlY3RvckRyYXdhYmxlUGF0aCYgcGF0aCkgewotICAgIHJldHVybiBjYW5Nb3JwaChwYXRoLm1EYXRhKTsKLX0KLQotCi19OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZVBhdGguaCBiL2xpYnMvaHd1aS9WZWN0b3JEcmF3YWJsZVBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU1NjM0OS4uMDAwMDAwMAotLS0gYS9saWJzL2h3dWkvVmVjdG9yRHJhd2FibGVQYXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2lmbmRlZiBBTkRST0lEX0hXVUlfVlBBVEhfSAotI2RlZmluZSBBTkRST0lEX0hXVUlfVlBBVEhfSAotCi0jaW5jbHVkZSA8Y3V0aWxzL2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSAiU2tQYXRoLmgiCi0jaW5jbHVkZSA8dmVjdG9yPgotCi1uYW1lc3BhY2UgYW5kcm9pZCB7Ci1uYW1lc3BhY2UgdWlyZW5kZXJlciB7Ci0KLXN0cnVjdCBBTkRST0lEX0FQSSBQYXRoRGF0YSB7Ci0gICAgLy8gVE9ETzogVHJ5IHVzaW5nIEZhdFZlY3RvciBpbnN0ZWFkIG9mIHN0ZDo6dmVjdG9yIGFuZCBkbyBhIG1pY3JvIGJlbmNobWFyayBvbiB0aGUgcGVyZm9ybWFuY2UKLSAgICAvLyBkaWZmZXJlbmNlLgotICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHZlcmJzOwotICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gdmVyYlNpemVzOwotICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiBwb2ludHM7Ci0gICAgYm9vbCBvcGVyYXRvcj09IChjb25zdCBQYXRoRGF0YSYgZGF0YSkgY29uc3QgewotICAgICAgICByZXR1cm4gdmVyYnMgPT0gZGF0YS52ZXJicyAmJiB2ZXJiU2l6ZXMgPT0gZGF0YS52ZXJiU2l6ZXMgJiYgcG9pbnRzID09IGRhdGEucG9pbnRzOwotICAgIH0KLQotfTsKLQotY2xhc3MgVmVjdG9yRHJhd2FibGVQYXRoIHsKLXB1YmxpYzoKLSAgICBWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgUGF0aERhdGEmIG5vZGVzKTsKLSAgICBWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgVmVjdG9yRHJhd2FibGVQYXRoJiBwYXRoKTsKLSAgICBWZWN0b3JEcmF3YWJsZVBhdGgoY29uc3QgY2hhciogcGF0aCwgc2l6ZV90IHN0ckxlbmd0aCk7Ci0gICAgYm9vbCBjYW5Nb3JwaChjb25zdCBQYXRoRGF0YSYgcGF0aCk7Ci0gICAgYm9vbCBjYW5Nb3JwaChjb25zdCBWZWN0b3JEcmF3YWJsZVBhdGgmIHBhdGgpOwotCi1wcml2YXRlOgotICAgIFBhdGhEYXRhIG1EYXRhOwotICAgIFNrUGF0aCBtU2tQYXRoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgotfSAvLyBuYW1lc3BhY2UgYW5kcm9pZAotCi0jZW5kaWYgLy8gQU5EUk9JRF9IV1VJX1ZQQVRIX0gKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9PZmZzY3JlZW5CdWZmZXJQb29sLmNwcCBiL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9PZmZzY3JlZW5CdWZmZXJQb29sLmNwcAppbmRleCA2YjQ0NTU3Li4yMjdiNjQwIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvcmVuZGVyc3RhdGUvT2Zmc2NyZWVuQnVmZmVyUG9vbC5jcHAKKysrIGIvbGlicy9od3VpL3JlbmRlcnN0YXRlL09mZnNjcmVlbkJ1ZmZlclBvb2wuY3BwCkBAIC01NCw2ICs1NCwxMiBAQAogICAgICAgICAgICAgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgbnVsbHB0cik7CiB9CiAKK1JlY3QgT2Zmc2NyZWVuQnVmZmVyOjpnZXRUZXh0dXJlQ29vcmRpbmF0ZXMoKSB7CisgICAgY29uc3QgZmxvYXQgdGV4WCA9IDEuMGYgLyBmbG9hdCh0ZXh0dXJlLndpZHRoKTsKKyAgICBjb25zdCBmbG9hdCB0ZXhZID0gMS4wZiAvIGZsb2F0KHRleHR1cmUuaGVpZ2h0KTsKKyAgICByZXR1cm4gUmVjdCgwLCB2aWV3cG9ydEhlaWdodCAqIHRleFksIHZpZXdwb3J0V2lkdGggKiB0ZXhYLCAwKTsKK30KKwogdm9pZCBPZmZzY3JlZW5CdWZmZXI6OnVwZGF0ZU1lc2hGcm9tUmVnaW9uKCkgewogICAgIC8vIGF2b2lkIFQtanVuY3Rpb25zIGFzIHRoZXkgY2F1c2UgYXJ0aWZhY3RzIGluIGJldHdlZW4gdGhlIHJlc3VsdGFudAogICAgIC8vIGdlb21ldHJ5IHdoZW4gY29tcGxleCB0cmFuc2Zvcm1zIG9jY3VyLgpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL09mZnNjcmVlbkJ1ZmZlclBvb2wuaCBiL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9PZmZzY3JlZW5CdWZmZXJQb29sLmgKaW5kZXggZmFjNmMzNS4uMmQ4ZDUyOSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL09mZnNjcmVlbkJ1ZmZlclBvb2wuaAorKysgYi9saWJzL2h3dWkvcmVuZGVyc3RhdGUvT2Zmc2NyZWVuQnVmZmVyUG9vbC5oCkBAIC00Niw2ICs0Niw4IEBACiAgICAgICAgICAgICB1aW50MzJfdCB2aWV3cG9ydFdpZHRoLCB1aW50MzJfdCB2aWV3cG9ydEhlaWdodCk7CiAgICAgfk9mZnNjcmVlbkJ1ZmZlcigpOwogCisgICAgUmVjdCBnZXRUZXh0dXJlQ29vcmRpbmF0ZXMoKTsKKwogICAgIC8vIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIHJlbmRlcmluZywgdG8gY29uc3RydWN0L3VwZGF0ZSB2ZXJ0ZXggYnVmZmVyCiAgICAgdm9pZCB1cGRhdGVNZXNoRnJvbVJlZ2lvbigpOwogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVyc3RhdGUvU2Npc3Nvci5jcHAgYi9saWJzL2h3dWkvcmVuZGVyc3RhdGUvU2Npc3Nvci5jcHAKaW5kZXggOTVkY2QxOC4uNjFkZDhjMyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuY3BwCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9TY2lzc29yLmNwcApAQCAtMTUsNiArMTUsOCBAQAogICovCiAjaW5jbHVkZSAicmVuZGVyc3RhdGUvU2Npc3Nvci5oIgogCisjaW5jbHVkZSAiUmVjdC5oIgorCiAjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKQEAgLTcxLDYgKzczLDI2IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNjaXNzb3I6OnNldChpbnQgdmlld3BvcnRIZWlnaHQsIGNvbnN0IFJlY3QmIGNsaXApIHsKKyAgICAvLyB0cmFuc2Zvcm0gdG8gWS1mbGlwcGVkIEdMIHNwYWNlLCBhbmQgcHJldmVudCBuZWdhdGl2ZXMKKyAgICBHTGludCB4ID0gc3RkOjptYXgoMCwgKGludCljbGlwLmxlZnQpOworICAgIEdMaW50IHkgPSBzdGQ6Om1heCgwLCB2aWV3cG9ydEhlaWdodCAtIChpbnQpY2xpcC5ib3R0b20pOworICAgIEdMaW50IHdpZHRoID0gc3RkOjptYXgoMCwgKChpbnQpY2xpcC5yaWdodCkgLSB4KTsKKyAgICBHTGludCBoZWlnaHQgPSBzdGQ6Om1heCgwLCAodmlld3BvcnRIZWlnaHQgLSAoaW50KWNsaXAudG9wKSAtIHkpOworCisgICAgaWYgKHggIT0gbVNjaXNzb3JYCisgICAgICAgICAgICB8fCB5ICE9IG1TY2lzc29yWQorICAgICAgICAgICAgfHwgd2lkdGggIT0gbVNjaXNzb3JXaWR0aAorICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IG1TY2lzc29ySGVpZ2h0KSB7CisgICAgICAgIGdsU2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICBtU2Npc3NvclggPSB4OworICAgICAgICBtU2Npc3NvclkgPSB5OworICAgICAgICBtU2Npc3NvcldpZHRoID0gd2lkdGg7CisgICAgICAgIG1TY2lzc29ySGVpZ2h0ID0gaGVpZ2h0OworICAgIH0KK30KKwogdm9pZCBTY2lzc29yOjpyZXNldCgpIHsKICAgICBtU2Npc3NvclggPSBtU2Npc3NvclkgPSBtU2Npc3NvcldpZHRoID0gbVNjaXNzb3JIZWlnaHQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuaCBiL2xpYnMvaHd1aS9yZW5kZXJzdGF0ZS9TY2lzc29yLmgKaW5kZXggYjM3ZWM1OC4uZjMwMjI0NCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnN0YXRlL1NjaXNzb3IuaAorKysgYi9saWJzL2h3dWkvcmVuZGVyc3RhdGUvU2Npc3Nvci5oCkBAIC0yMiwxMSArMjIsMTQgQEAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIG5hbWVzcGFjZSB1aXJlbmRlcmVyIHsKIAorY2xhc3MgUmVjdDsKKwogY2xhc3MgU2Npc3NvciB7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclN0YXRlOwogcHVibGljOgogICAgIGJvb2wgc2V0RW5hYmxlZChib29sIGVuYWJsZWQpOwogICAgIGJvb2wgc2V0KEdMaW50IHgsIEdMaW50IHksIEdMaW50IHdpZHRoLCBHTGludCBoZWlnaHQpOworICAgIHZvaWQgc2V0KGludCB2aWV3cG9ydEhlaWdodCwgY29uc3QgUmVjdCYgY2xpcCk7CiAgICAgdm9pZCByZXNldCgpOwogICAgIGJvb2wgaXNFbmFibGVkKCkgeyByZXR1cm4gbUVuYWJsZWQ7IH0KICAgICB2b2lkIGR1bXAoKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5jcHAgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0NhbnZhc0NvbnRleHQuY3BwCmluZGV4IGNhODVkZmIuLjI0ZDQzZGYgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5jcHAKKysrIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9DYW52YXNDb250ZXh0LmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgInV0aWxzL1RpbWVVdGlscy5oIgogCiAjaWYgSFdVSV9ORVdfT1BTCi0jaW5jbHVkZSAiT3BSZW9yZGVyZXIuaCIKKyNpbmNsdWRlICJGcmFtZUJ1aWxkZXIuaCIKICNlbmRpZgogCiAjaW5jbHVkZSA8Y3V0aWxzL3Byb3BlcnRpZXMuaD4KQEAgLTEyOCwxNCArMTI4LDEzIEBACiAgICAgbVN3YXBCZWhhdmlvciA9IHN3YXBCZWhhdmlvcjsKIH0KIAotYm9vbCBDYW52YXNDb250ZXh0Ojppbml0aWFsaXplKEFOYXRpdmVXaW5kb3cqIHdpbmRvdykgewordm9pZCBDYW52YXNDb250ZXh0Ojppbml0aWFsaXplKEFOYXRpdmVXaW5kb3cqIHdpbmRvdykgewogICAgIHNldFN1cmZhY2Uod2luZG93KTsKICNpZiAhSFdVSV9ORVdfT1BTCi0gICAgaWYgKG1DYW52YXMpIHJldHVybiBmYWxzZTsKKyAgICBpZiAobUNhbnZhcykgcmV0dXJuOwogICAgIG1DYW52YXMgPSBuZXcgT3BlbkdMUmVuZGVyZXIobVJlbmRlclRocmVhZC5yZW5kZXJTdGF0ZSgpKTsKICAgICBtQ2FudmFzLT5pbml0UHJvcGVydGllcygpOwogI2VuZGlmCi0gICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgQ2FudmFzQ29udGV4dDo6dXBkYXRlU3VyZmFjZShBTmF0aXZlV2luZG93KiB3aW5kb3cpIHsKQEAgLTE4MiwxNiArMTgxLDYgQEAKICAgICB9CiB9CiAKLXZvaWQgQ2FudmFzQ29udGV4dDo6cHJvY2Vzc0xheWVyVXBkYXRlKERlZmVycmVkTGF5ZXJVcGRhdGVyKiBsYXllclVwZGF0ZXIpIHsKLSNpZiAhSFdVSV9ORVdfT1BTCi0gICAgYm9vbCBzdWNjZXNzID0gbGF5ZXJVcGRhdGVyLT5hcHBseSgpOwotICAgIExPR19BTFdBWVNfRkFUQUxfSUYoIXN1Y2Nlc3MsICJGYWlsZWQgdG8gdXBkYXRlIGxheWVyISIpOwotICAgIGlmIChsYXllclVwZGF0ZXItPmJhY2tpbmdMYXllcigpLT5kZWZlcnJlZFVwZGF0ZVNjaGVkdWxlZCkgewotICAgICAgICBtQ2FudmFzLT5wdXNoTGF5ZXJVcGRhdGUobGF5ZXJVcGRhdGVyLT5iYWNraW5nTGF5ZXIoKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KIHN0YXRpYyBib29sIHdhc1NraXBwZWQoRnJhbWVJbmZvKiBpbmZvKSB7CiAgICAgcmV0dXJuIGluZm8gJiYgKCgqaW5mbylbRnJhbWVJbmZvSW5kZXg6OkZsYWdzXSAmIEZyYW1lSW5mb0ZsYWdzOjpTa2lwcGVkRnJhbWUpOwogfQpAQCAtMzQ5LDE0ICszMzgsMTMgQEAKICAgICBtRWdsTWFuYWdlci5kYW1hZ2VGcmFtZShmcmFtZSwgZGlydHkpOwogCiAjaWYgSFdVSV9ORVdfT1BTCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKG1MYXllclVwZGF0ZVF1ZXVlLCBkaXJ0eSwgZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihtTGF5ZXJVcGRhdGVRdWV1ZSwgZGlydHksIGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpLAogICAgICAgICAgICAgbVJlbmRlck5vZGVzLCBtTGlnaHRDZW50ZXIpOwogICAgIG1MYXllclVwZGF0ZVF1ZXVlLmNsZWFyKCk7CiAgICAgQmFrZWRPcFJlbmRlcmVyIHJlbmRlcmVyKENhY2hlczo6Z2V0SW5zdGFuY2UoKSwgbVJlbmRlclRocmVhZC5yZW5kZXJTdGF0ZSgpLAogICAgICAgICAgICAgbU9wYXF1ZSwgbUxpZ2h0SW5mbyk7CiAgICAgLy8gVE9ETzogcHJvZmlsZXIoKS5kcmF3KG1DYW52YXMpOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxCYWtlZE9wRGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwotCisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPEJha2VkT3BEaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgYm9vbCBkcmV3ID0gcmVuZGVyZXIuZGlkRHJhdygpOwogCiAjZWxzZQpAQCAtNTEzLDIwICs1MDEsMjIgQEAKIAogLy8gQ2FsbGVkIGJ5IGNob3Jlb2dyYXBoZXIgdG8gZG8gYW4gUlQtZHJpdmVuIGFuaW1hdGlvbgogdm9pZCBDYW52YXNDb250ZXh0Ojpkb0ZyYW1lKCkgewotICAgIGlmIChDQ19VTkxJS0VMWSghbUNhbnZhcyB8fCBtRWdsU3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyNpZiBIV1VJX05FV19PUFMKKyAgICBpZiAoQ0NfVU5MSUtFTFkobUVnbFN1cmZhY2UgPT0gRUdMX05PX1NVUkZBQ0UpKSByZXR1cm47CisjZWxzZQorICAgIGlmIChDQ19VTkxJS0VMWSghbUNhbnZhcyB8fCBtRWdsU3VyZmFjZSA9PSBFR0xfTk9fU1VSRkFDRSkpIHJldHVybjsKKyNlbmRpZgogICAgIHByZXBhcmVBbmREcmF3KG51bGxwdHIpOwogfQogCiB2b2lkIENhbnZhc0NvbnRleHQ6OnByZXBhcmVBbmREcmF3KFJlbmRlck5vZGUqIG5vZGUpIHsKICAgICBBVFJBQ0VfQ0FMTCgpOwogCisgICAgbnNlY3NfdCB2c3luYyA9IG1SZW5kZXJUaHJlYWQudGltZUxvcmQoKS5jb21wdXRlRnJhbWVUaW1lTmFub3MoKTsKICAgICBpbnQ2NF90IGZyYW1lSW5mb1tVSV9USFJFQURfRlJBTUVfSU5GT19TSVpFXTsKICAgICBVaUZyYW1lSW5mb0J1aWxkZXIoZnJhbWVJbmZvKQogICAgICAgICAuYWRkRmxhZyhGcmFtZUluZm9GbGFnczo6UlRBbmltYXRpb24pCi0gICAgICAgIC5zZXRWc3luYyhtUmVuZGVyVGhyZWFkLnRpbWVMb3JkKCkuY29tcHV0ZUZyYW1lVGltZU5hbm9zKCksCi0gICAgICAgICAgICAgICAgbVJlbmRlclRocmVhZC50aW1lTG9yZCgpLmxhdGVzdFZzeW5jKCkpOworICAgICAgICAuc2V0VnN5bmModnN5bmMsIHZzeW5jKTsKIAogICAgIFRyZWVJbmZvIGluZm8oVHJlZUluZm86Ok1PREVfUlRfT05MWSwgKnRoaXMpOwogICAgIHByZXBhcmVUcmVlKGluZm8sIGZyYW1lSW5mbywgc3lzdGVtVGltZShDTE9DS19NT05PVE9OSUMpLCBub2RlKTsKQEAgLTU4OCw3ICs1NzgsNyBAQAogICAgIG5vZGUtPnNldFByb3BlcnR5RmllbGRzRGlydHkoUmVuZGVyTm9kZTo6R0VORVJJQyk7CiAKICNpZiBIV1VJX05FV19PUFMKLSAgICBMT0dfQUxXQVlTX0ZBVEFMKCJ1bnN1cHBvcnRlZCIpOworICAgIC8vIFRPRE86IHN1cHBvcnQgYnVpbGRMYXllcgogI2Vsc2UKICAgICBtQ2FudmFzLT5tYXJrTGF5ZXJzQXNCdWlsZExheWVycygpOwogICAgIG1DYW52YXMtPmZsdXNoTGF5ZXJVcGRhdGVzKCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0NhbnZhc0NvbnRleHQuaCBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5oCmluZGV4IGQzNmNlOTkuLjhlNjRjYmIgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5oCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvQ2FudmFzQ29udGV4dC5oCkBAIC03Myw3ICs3Myw3IEBACiAgICAgLy8gV29uJ3QgdGFrZSBlZmZlY3QgdW50aWwgbmV4dCBFR0xTdXJmYWNlIGNyZWF0aW9uCiAgICAgdm9pZCBzZXRTd2FwQmVoYXZpb3IoU3dhcEJlaGF2aW9yIHN3YXBCZWhhdmlvcik7CiAKLSAgICBib29sIGluaXRpYWxpemUoQU5hdGl2ZVdpbmRvdyogd2luZG93KTsKKyAgICB2b2lkIGluaXRpYWxpemUoQU5hdGl2ZVdpbmRvdyogd2luZG93KTsKICAgICB2b2lkIHVwZGF0ZVN1cmZhY2UoQU5hdGl2ZVdpbmRvdyogd2luZG93KTsKICAgICBib29sIHBhdXNlU3VyZmFjZShBTmF0aXZlV2luZG93KiB3aW5kb3cpOwogICAgIGJvb2wgaGFzU3VyZmFjZSgpIHsgcmV0dXJuIG1OYXRpdmVXaW5kb3cuZ2V0KCk7IH0KQEAgLTgzLDcgKzgzLDYgQEAKICAgICB2b2lkIHNldExpZ2h0Q2VudGVyKGNvbnN0IFZlY3RvcjMmIGxpZ2h0Q2VudGVyKTsKICAgICB2b2lkIHNldE9wYXF1ZShib29sIG9wYXF1ZSk7CiAgICAgdm9pZCBtYWtlQ3VycmVudCgpOwotICAgIHZvaWQgcHJvY2Vzc0xheWVyVXBkYXRlKERlZmVycmVkTGF5ZXJVcGRhdGVyKiBsYXllclVwZGF0ZXIpOwogICAgIHZvaWQgcHJlcGFyZVRyZWUoVHJlZUluZm8mIGluZm8sIGludDY0X3QqIHVpRnJhbWVJbmZvLAogICAgICAgICAgICAgaW50NjRfdCBzeW5jUXVldWVkLCBSZW5kZXJOb2RlKiB0YXJnZXQpOwogICAgIHZvaWQgZHJhdygpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9EcmF3RnJhbWVUYXNrLmNwcCBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvRHJhd0ZyYW1lVGFzay5jcHAKaW5kZXggYWI4NjBjNy4uZThiOTcyNSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9EcmF3RnJhbWVUYXNrLmNwcAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0RyYXdGcmFtZVRhc2suY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICBDYWNoZXM6OmdldEluc3RhbmNlKCkudGV4dHVyZUNhY2hlLnJlc2V0TWFya0luVXNlKG1Db250ZXh0KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUxheWVycy5zaXplKCk7IGkrKykgewotICAgICAgICBtQ29udGV4dC0+cHJvY2Vzc0xheWVyVXBkYXRlKG1MYXllcnNbaV0uZ2V0KCkpOworICAgICAgICBtTGF5ZXJzW2ldLT5hcHBseSgpOwogICAgIH0KICAgICBtTGF5ZXJzLmNsZWFyKCk7CiAgICAgbUNvbnRleHQtPnByZXBhcmVUcmVlKGluZm8sIG1GcmFtZUluZm8sIG1TeW5jUXVldWVkLCBtVGFyZ2V0Tm9kZSk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0VnbE1hbmFnZXIuY3BwIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9FZ2xNYW5hZ2VyLmNwcAppbmRleCA3OGRmMjk3Li40NjZmZWY5ZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9FZ2xNYW5hZ2VyLmNwcAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL0VnbE1hbmFnZXIuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAKICNkZWZpbmUgR0xFU19WRVJTSU9OIDIKIAotI2RlZmluZSBXQUlUX0ZPUl9HUFVfQ09NUExFVElPTiAwCi0KIC8vIEFuZHJvaWQtc3BlY2lmaWMgYWRkaXRpb24gdGhhdCBpcyB1c2VkIHRvIHNob3cgd2hlbiBmcmFtZXMgYmVnYW4gaW4gc3lzdHJhY2UKIEVHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbEJlZ2luRnJhbWUoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZmFjZSk7CiAKQEAgLTE3OSw3ICsxNzcsMTAgQEAKIH0KIAogdm9pZCBFZ2xNYW5hZ2VyOjpjcmVhdGVDb250ZXh0KCkgewotICAgIEVHTGludCBhdHRyaWJzW10gPSB7IEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTEVTX1ZFUlNJT04sIEVHTF9OT05FIH07CisgICAgRUdMaW50IGF0dHJpYnNbXSA9IHsKKyAgICAgICAgICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCBHTEVTX1ZFUlNJT04sCisgICAgICAgICAgICBFR0xfTk9ORQorICAgIH07CiAgICAgbUVnbENvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KG1FZ2xEaXNwbGF5LCBtRWdsQ29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgYXR0cmlicyk7CiAgICAgTE9HX0FMV0FZU19GQVRBTF9JRihtRWdsQ29udGV4dCA9PSBFR0xfTk9fQ09OVEVYVCwKICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgY29udGV4dCwgZXJyb3IgPSAlcyIsIGVnbF9lcnJvcl9zdHIoKSk7CkBAIC0zMTgsMTIgKzMxOSwxMCBAQAogCiBib29sIEVnbE1hbmFnZXI6OnN3YXBCdWZmZXJzKGNvbnN0IEZyYW1lJiBmcmFtZSwgY29uc3QgU2tSZWN0JiBzY3JlZW5EaXJ0eSkgewogCi0jaWYgV0FJVF9GT1JfR1BVX0NPTVBMRVRJT04KLSAgICB7CisgICAgaWYgKENDX1VOTElLRUxZKFByb3BlcnRpZXM6OndhaXRGb3JHcHVDb21wbGV0aW9uKSkgewogICAgICAgICBBVFJBQ0VfTkFNRSgiRmluaXNoaW5nIEdQVSB3b3JrIik7CiAgICAgICAgIGZlbmNlKCk7CiAgICAgfQotI2VuZGlmCiAKICAgICBFR0xpbnQgcmVjdHNbNF07CiAgICAgZnJhbWUubWFwKHNjcmVlbkRpcnR5LCByZWN0cyk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclByb3h5LmNwcCBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyUHJveHkuY3BwCmluZGV4IDE1Y2NkNmEuLjQzMjgyYzkgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyUHJveHkuY3BwCisrKyBiL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyUHJveHkuY3BwCkBAIC0xNDAsMTQgKzE0MCwxNSBAQAogfQogCiBDUkVBVEVfQlJJREdFMihpbml0aWFsaXplLCBDYW52YXNDb250ZXh0KiBjb250ZXh0LCBBTmF0aXZlV2luZG93KiB3aW5kb3cpIHsKLSAgICByZXR1cm4gKHZvaWQqKSBhcmdzLT5jb250ZXh0LT5pbml0aWFsaXplKGFyZ3MtPndpbmRvdyk7CisgICAgYXJncy0+Y29udGV4dC0+aW5pdGlhbGl6ZShhcmdzLT53aW5kb3cpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIFJlbmRlclByb3h5Ojppbml0aWFsaXplKGNvbnN0IHNwPEFOYXRpdmVXaW5kb3c+JiB3aW5kb3cpIHsKK3ZvaWQgUmVuZGVyUHJveHk6OmluaXRpYWxpemUoY29uc3Qgc3A8QU5hdGl2ZVdpbmRvdz4mIHdpbmRvdykgewogICAgIFNFVFVQX1RBU0soaW5pdGlhbGl6ZSk7CiAgICAgYXJncy0+Y29udGV4dCA9IG1Db250ZXh0OwogICAgIGFyZ3MtPndpbmRvdyA9IHdpbmRvdy5nZXQoKTsKLSAgICByZXR1cm4gKGJvb2wpIHBvc3RBbmRXYWl0KHRhc2spOworICAgIHBvc3QodGFzayk7CiB9CiAKIENSRUFURV9CUklER0UyKHVwZGF0ZVN1cmZhY2UsIENhbnZhc0NvbnRleHQqIGNvbnRleHQsIEFOYXRpdmVXaW5kb3cqIHdpbmRvdykgewpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJQcm94eS5oIGIvbGlicy9od3VpL3JlbmRlcnRocmVhZC9SZW5kZXJQcm94eS5oCmluZGV4IDMzOGZhYjYuLjFkMzBlYjggMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS9yZW5kZXJ0aHJlYWQvUmVuZGVyUHJveHkuaAorKysgYi9saWJzL2h3dWkvcmVuZGVydGhyZWFkL1JlbmRlclByb3h5LmgKQEAgLTY2LDcgKzY2LDcgQEAKICAgICBBTkRST0lEX0FQSSBib29sIGxvYWRTeXN0ZW1Qcm9wZXJ0aWVzKCk7CiAgICAgQU5EUk9JRF9BUEkgdm9pZCBzZXROYW1lKGNvbnN0IGNoYXIqIG5hbWUpOwogCi0gICAgQU5EUk9JRF9BUEkgYm9vbCBpbml0aWFsaXplKGNvbnN0IHNwPEFOYXRpdmVXaW5kb3c+JiB3aW5kb3cpOworICAgIEFORFJPSURfQVBJIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBzcDxBTmF0aXZlV2luZG93PiYgd2luZG93KTsKICAgICBBTkRST0lEX0FQSSB2b2lkIHVwZGF0ZVN1cmZhY2UoY29uc3Qgc3A8QU5hdGl2ZVdpbmRvdz4mIHdpbmRvdyk7CiAgICAgQU5EUk9JRF9BUEkgYm9vbCBwYXVzZVN1cmZhY2UoY29uc3Qgc3A8QU5hdGl2ZVdpbmRvdz4mIHdpbmRvdyk7CiAgICAgQU5EUk9JRF9BUEkgdm9pZCBzZXR1cChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGZsb2F0IGxpZ2h0UmFkaXVzLApkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0U2NlbmUuaCBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFNjZW5lLmgKaW5kZXggZGY4ZDE5NC4uNzA2ZjJmZiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0U2NlbmUuaAorKysgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RTY2VuZS5oCkBAIC0zNyw2ICszNyw3IEBACiBwdWJsaWM6CiAgICAgc3RydWN0IE9wdGlvbnMgewogICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICBpbnQgcmVwb3J0RnJhbWV0aW1lV2VpZ2h0ID0gMDsKICAgICB9OwogCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RVdGlscy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RVdGlscy5jcHAKaW5kZXggNmNlZjg1Mi4uNjI0ZjNiZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0VXRpbHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFV0aWxzLmNwcApAQCAtMTYsNiArMTYsOSBAQAogCiAjaW5jbHVkZSAiVGVzdFV0aWxzLmgiCiAKKyNpbmNsdWRlICJEZWZlcnJlZExheWVyVXBkYXRlci5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXIuaCIKKwogbmFtZXNwYWNlIGFuZHJvaWQgewogbmFtZXNwYWNlIHVpcmVuZGVyZXIgewogCkBAIC0zNiwxNiArMzksMjkgQEAKICAgICAgICAgICAgIHwgKGludCkoKHN0YXJ0QiArIChpbnQpKGZyYWN0aW9uICogKGVuZEIgLSBzdGFydEIpKSkpOwogfQogCitzcDxEZWZlcnJlZExheWVyVXBkYXRlcj4gVGVzdFV0aWxzOjpjcmVhdGVUZXh0dXJlTGF5ZXJVcGRhdGVyKAorICAgICAgICByZW5kZXJ0aHJlYWQ6OlJlbmRlclRocmVhZCYgcmVuZGVyVGhyZWFkLCB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoTWF0cml4NCopPiB0cmFuc2Zvcm1TZXR1cENhbGxiYWNrKSB7CisgICAgYm9vbCBpc09wYXF1ZSA9IHRydWU7CisgICAgYm9vbCBmb3JjZUZpbHRlciA9IHRydWU7CisgICAgR0xlbnVtIHJlbmRlclRhcmdldCA9IEdMX1RFWFRVUkVfRVhURVJOQUxfT0VTOworCisgICAgTGF5ZXIqIGxheWVyID0gTGF5ZXJSZW5kZXJlcjo6Y3JlYXRlVGV4dHVyZUxheWVyKHJlbmRlclRocmVhZC5yZW5kZXJTdGF0ZSgpKTsKKyAgICBMYXllclJlbmRlcmVyOjp1cGRhdGVUZXh0dXJlTGF5ZXIobGF5ZXIsIHdpZHRoLCBoZWlnaHQsIGlzT3BhcXVlLCBmb3JjZUZpbHRlciwKKyAgICAgICAgICAgIHJlbmRlclRhcmdldCwgTWF0cml4NDo6aWRlbnRpdHkoKS5kYXRhKTsKKyAgICB0cmFuc2Zvcm1TZXR1cENhbGxiYWNrKCYobGF5ZXItPmdldFRyYW5zZm9ybSgpKSk7CisKKyAgICBzcDxEZWZlcnJlZExheWVyVXBkYXRlcj4gbGF5ZXJVcGRhdGVyID0gbmV3IERlZmVycmVkTGF5ZXJVcGRhdGVyKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXJVcGRhdGVyOworfQorCiB2b2lkIFRlc3RVdGlsczo6ZHJhd1RleHRUb0NhbnZhcyhUZXN0Q2FudmFzKiBjYW52YXMsIGNvbnN0IGNoYXIqIHRleHQsCiAgICAgICAgIGNvbnN0IFNrUGFpbnQmIHBhaW50LCBmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAgLy8gZHJhd2luZyB0ZXh0IHJlcXVpcmVzIEdseXBoSUQgVGV4dEVuY29kaW5nICh3aGljaCBKTkkgbGF5ZXIgd291bGQgaGF2ZSBkb25lKQogICAgIExPR19BTFdBWVNfRkFUQUxfSUYocGFpbnQuZ2V0VGV4dEVuY29kaW5nKCkgIT0gU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nLAogICAgICAgICAgICAgIm11c3QgdXNlIGdseXBoIGVuY29kaW5nIik7Ci0KLSAgICBTa01hdHJpeCBpZGVudGl0eTsKLSAgICBpZGVudGl0eS5zZXRJZGVudGl0eSgpOwogICAgIFNrU3VyZmFjZVByb3BzIHN1cmZhY2VQcm9wcygwLCBrVW5rbm93bl9Ta1BpeGVsR2VvbWV0cnkpOwotICAgIFNrQXV0b0dseXBoQ2FjaGVOb0dhbW1hIGF1dG9DYWNoZShwYWludCwgJnN1cmZhY2VQcm9wcywgJmlkZW50aXR5KTsKKyAgICBTa0F1dG9HbHlwaENhY2hlTm9HYW1tYSBhdXRvQ2FjaGUocGFpbnQsICZzdXJmYWNlUHJvcHMsICZTa01hdHJpeDo6SSgpKTsKIAogICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CiAgICAgc3RkOjp2ZWN0b3I8Z2x5cGhfdD4gZ2x5cGhzOwpAQCAtODksNSArMTA1LDIxIEBACiAgICAgICAgICAgICAgICAgYm91bmRzLmxlZnQsIGJvdW5kcy50b3AsIGJvdW5kcy5yaWdodCwgYm91bmRzLmJvdHRvbSwgdG90YWxBZHZhbmNlKTsKIH0KIAordm9pZCBUZXN0VXRpbHM6OmRyYXdUZXh0VG9DYW52YXMoVGVzdENhbnZhcyogY2FudmFzLCBjb25zdCBjaGFyKiB0ZXh0LAorICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tQYXRoJiBwYXRoKSB7CisgICAgLy8gZHJhd2luZyB0ZXh0IHJlcXVpcmVzIEdseXBoSUQgVGV4dEVuY29kaW5nICh3aGljaCBKTkkgbGF5ZXIgd291bGQgaGF2ZSBkb25lKQorICAgIExPR19BTFdBWVNfRkFUQUxfSUYocGFpbnQuZ2V0VGV4dEVuY29kaW5nKCkgIT0gU2tQYWludDo6a0dseXBoSURfVGV4dEVuY29kaW5nLAorICAgICAgICAgICAgIm11c3QgdXNlIGdseXBoIGVuY29kaW5nIik7CisgICAgU2tTdXJmYWNlUHJvcHMgc3VyZmFjZVByb3BzKDAsIGtVbmtub3duX1NrUGl4ZWxHZW9tZXRyeSk7CisgICAgU2tBdXRvR2x5cGhDYWNoZU5vR2FtbWEgYXV0b0NhY2hlKHBhaW50LCAmc3VyZmFjZVByb3BzLCAmU2tNYXRyaXg6OkkoKSk7CisKKyAgICBzdGQ6OnZlY3RvcjxnbHlwaF90PiBnbHlwaHM7CisgICAgd2hpbGUgKCp0ZXh0ICE9ICdcMCcpIHsKKyAgICAgICAgU2tVbmljaGFyIHVuaWNoYXIgPSBTa1VURjhfTmV4dFVuaWNoYXIoJnRleHQpOworICAgICAgICBnbHlwaHMucHVzaF9iYWNrKGF1dG9DYWNoZS5nZXRDYWNoZSgpLT51bmljaGFyVG9HbHlwaCh1bmljaGFyKSk7CisgICAgfQorICAgIGNhbnZhcy0+ZHJhd1RleHRPblBhdGgoZ2x5cGhzLmRhdGEoKSwgZ2x5cGhzLnNpemUoKSwgcGF0aCwgMCwgMCwgcGFpbnQpOworfQorCiB9IC8qIG5hbWVzcGFjZSB1aXJlbmRlcmVyICovCiB9IC8qIG5hbWVzcGFjZSBhbmRyb2lkICovCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RVdGlscy5oIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9UZXN0VXRpbHMuaAppbmRleCAwYWY5OTM5Li5lZGRlMzFlIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL1Rlc3RVdGlscy5oCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vVGVzdFV0aWxzLmgKQEAgLTUzLDYgKzUzLDEzIEBACiAgICAgICAgICAgICAmJiBNYXRoVXRpbHM6OmFyZUVxdWFsKGEucmlnaHQsIGIucmlnaHQpIFwKICAgICAgICAgICAgICYmIE1hdGhVdGlsczo6YXJlRXF1YWwoYS5ib3R0b20sIGIuYm90dG9tKSk7CiAKKyNkZWZpbmUgRVhQRUNUX0NMSVBfUkVDVChleHBSZWN0LCBjbGlwU3RhdGVQdHIpIFwKKyAgICAgICAgRVhQRUNUX05FKG51bGxwdHIsIChjbGlwU3RhdGVQdHIpKSA8PCAiT3AgaXMgdW5jbGlwcGVkIjsgXAorICAgICAgICBpZiAoKGNsaXBTdGF0ZVB0ciktPm1vZGUgPT0gQ2xpcE1vZGU6OlJlY3RhbmdsZSkgeyBcCisgICAgICAgICAgICBFWFBFQ1RfRVEoKGV4cFJlY3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0Kj4oY2xpcFN0YXRlUHRyKS0+cmVjdCk7IFwKKyAgICAgICAgfSBlbHNlIHsgXAorICAgICAgICAgICAgQUREX0ZBSUxVUkUoKSA8PCAiQ2xpcFN0YXRlIG5vdCBhIHJlY3QiOyBcCisgICAgICAgIH0KIC8qKgogICogTGlrZSBndGVzdCdzIFRFU1QsIGJ1dCBydW5zIG9uIHRoZSBSZW5kZXJUaHJlYWQsIGFuZCAncmVuZGVyVGhyZWFkJyBpcyBwYXNzZWQsIGluIHRvcCBsZXZlbCBzY29wZQogICogKGZvciBlLmcuIGFjY2Vzc2luZyBpdHMgUmVuZGVyU3RhdGUpCkBAIC05OCw3ICsxMDUsNyBAQAogCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxTbmFwc2hvdD4gbWFrZVNuYXBzaG90KGNvbnN0IE1hdHJpeDQmIHRyYW5zZm9ybSwgY29uc3QgUmVjdCYgY2xpcCkgewogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U25hcHNob3Q+IHNuYXBzaG90KG5ldyBTbmFwc2hvdCgpKTsKLSAgICAgICAgc25hcHNob3QtPmNsaXAoY2xpcC5sZWZ0LCBjbGlwLnRvcCwgY2xpcC5yaWdodCwgY2xpcC5ib3R0b20sIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIHNuYXBzaG90LT5jbGlwKGNsaXAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7IC8vIHN0b3JlIGNsaXAgZmlyc3QsIHNvIGl0IGlzbid0IHRyYW5zZm9ybWVkCiAgICAgICAgICooc25hcHNob3QtPnRyYW5zZm9ybSkgPSB0cmFuc2Zvcm07CiAgICAgICAgIHJldHVybiBzbmFwc2hvdDsKICAgICB9CkBAIC0xMTMsNiArMTIwLDEwIEBACiAgICAgICAgIHJldHVybiBiaXRtYXA7CiAgICAgfQogCisgICAgc3RhdGljIHNwPERlZmVycmVkTGF5ZXJVcGRhdGVyPiBjcmVhdGVUZXh0dXJlTGF5ZXJVcGRhdGVyKAorICAgICAgICAgICAgcmVuZGVydGhyZWFkOjpSZW5kZXJUaHJlYWQmIHJlbmRlclRocmVhZCwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKyAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChNYXRyaXg0Kik+IHRyYW5zZm9ybVNldHVwQ2FsbGJhY2spOworCiAgICAgdGVtcGxhdGU8Y2xhc3MgQ2FudmFzVHlwZT4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBjcmVhdGVEaXNwbGF5TGlzdChpbnQgd2lkdGgsIGludCBoZWlnaHQsCiAgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ2FudmFzVHlwZSYgY2FudmFzKT4gY2FudmFzQ2FsbGJhY2spIHsKQEAgLTE5MSw2ICsyMDIsOSBAQAogICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0VG9DYW52YXMoVGVzdENhbnZhcyogY2FudmFzLCBjb25zdCBjaGFyKiB0ZXh0LAogICAgICAgICAgICAgY29uc3QgU2tQYWludCYgcGFpbnQsIGZsb2F0IHgsIGZsb2F0IHkpOwogCisgICAgc3RhdGljIHZvaWQgZHJhd1RleHRUb0NhbnZhcyhUZXN0Q2FudmFzKiBjYW52YXMsIGNvbnN0IGNoYXIqIHRleHQsCisgICAgICAgICAgICBjb25zdCBTa1BhaW50JiBwYWludCwgY29uc3QgU2tQYXRoJiBwYXRoKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBzeW5jSGllcmFyY2h5UHJvcGVydGllc0FuZERpc3BsYXlMaXN0SW1wbChSZW5kZXJOb2RlKiBub2RlKSB7CiAgICAgICAgIG5vZGUtPnN5bmNQcm9wZXJ0aWVzKCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9DbGlwcGluZ0FuaW1hdGlvbi5jcHAgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9DbGlwcGluZ0FuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NDAyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL0NsaXBwaW5nQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlRlc3RTY2VuZUJhc2UuaCIKKworY2xhc3MgQ2xpcHBpbmdBbmltYXRpb247CisKK3N0YXRpYyBUZXN0U2NlbmU6OlJlZ2lzdHJhciBfUmVjdEdyaWQoVGVzdFNjZW5lOjpJbmZveworICAgICJjbGlwIiwKKyAgICAiQ29tcGxleCBjbGlwIGNhc2VzIgorICAgICJMb3cgQ1BVL0dQVSBsb2FkLiIsCisgICAgVGVzdFNjZW5lOjpzaW1wbGVDcmVhdGVTY2VuZTxDbGlwcGluZ0FuaW1hdGlvbj4KK30pOworCitjbGFzcyBDbGlwcGluZ0FuaW1hdGlvbiA6IHB1YmxpYyBUZXN0U2NlbmUgeworcHVibGljOgorICAgIHNwPFJlbmRlck5vZGU+IGNhcmQ7CisgICAgdm9pZCBjcmVhdGVDb250ZW50KGludCB3aWR0aCwgaW50IGhlaWdodCwgVGVzdENhbnZhcyYgY2FudmFzKSBvdmVycmlkZSB7CisgICAgICAgIGNhbnZhcy5kcmF3Q29sb3IoQ29sb3I6OldoaXRlLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgY2FyZCA9IFRlc3RVdGlsczo6Y3JlYXRlTm9kZSgwLCAwLCAyMDAsIDQwMCwKKyAgICAgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhbnZhcy5jbGlwUmVjdCgwLCAwLCAyMDAsIDIwMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoMTAwLCAxMDApOworICAgICAgICAgICAgICAgIGNhbnZhcy5yb3RhdGUoNDUpOworICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoLTEwMCwgLTEwMCk7CisgICAgICAgICAgICAgICAgY2FudmFzLmNsaXBSZWN0KDAsIDAsIDIwMCwgMjAwLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcihDb2xvcjo6Qmx1ZV81MDAsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKworICAgICAgICAgICAgY2FudmFzLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTa1BhdGggY2xpcENpcmNsZTsKKyAgICAgICAgICAgICAgICBjbGlwQ2lyY2xlLmFkZENpcmNsZSgxMDAsIDMwMCwgMTAwKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuY2xpcFBhdGgoJmNsaXBDaXJjbGUsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0NvbG9yKENvbG9yOjpSZWRfNTAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisKKyAgICAgICAgICAgIC8vIHB1dCBvbiBhIGxheWVyLCB0byB0ZXN0IHN0ZW5jaWwgYXR0YWNobWVudAorICAgICAgICAgICAgcHJvcHMubXV0YXRlTGF5ZXJQcm9wZXJ0aWVzKCkuc2V0VHlwZShMYXllclR5cGU6OlJlbmRlckxheWVyKTsKKyAgICAgICAgICAgIHByb3BzLnNldEFscGhhKDAuOWYpOworICAgICAgICB9KTsKKyAgICAgICAgY2FudmFzLmRyYXdSZW5kZXJOb2RlKGNhcmQuZ2V0KCkpOworICAgIH0KKyAgICB2b2lkIGRvRnJhbWUoaW50IGZyYW1lTnIpIG92ZXJyaWRlIHsKKyAgICAgICAgaW50IGN1ckZyYW1lID0gZnJhbWVOciAlIDE1MDsKKyAgICAgICAgY2FyZC0+bXV0YXRlU3RhZ2luZ1Byb3BlcnRpZXMoKS5zZXRUcmFuc2xhdGlvblgoY3VyRnJhbWUpOworICAgICAgICBjYXJkLT5tdXRhdGVTdGFnaW5nUHJvcGVydGllcygpLnNldFRyYW5zbGF0aW9uWShjdXJGcmFtZSk7CisgICAgICAgIGNhcmQtPnNldFByb3BlcnR5RmllbGRzRGlydHkoUmVuZGVyTm9kZTo6WCB8IFJlbmRlck5vZGU6OlkpOworICAgIH0KK307CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9PcFByb3BBbmltYXRpb24uY3BwIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvT3BQcm9wQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGZiMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvT3BQcm9wQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlRlc3RTY2VuZUJhc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9Db2xvci5oIgorCitjbGFzcyBPcFByb3BBbmltYXRpb247CisKK3N0YXRpYyBUZXN0U2NlbmU6OlJlZ2lzdHJhciBfU2hhcGVzKFRlc3RTY2VuZTo6SW5mb3sKKyAgICAib3Bwcm9wcyIsCisgICAgIkEgbWluaW1hbCBkZW1vbnN0cmF0aW9uIG9mIENhbnZhc1Byb3BlcnR5IGRyYXdpbmcgb3BlcmF0aW9ucy4iLAorICAgIFRlc3RTY2VuZTo6c2ltcGxlQ3JlYXRlU2NlbmU8T3BQcm9wQW5pbWF0aW9uPgorfSk7CisKK2NsYXNzIE9wUHJvcEFuaW1hdGlvbiA6IHB1YmxpYyBUZXN0U2NlbmUgeworcHVibGljOgorICAgIHNwPENhbnZhc1Byb3BlcnR5UGFpbnQ+IG1QYWludCA9IG5ldyBDYW52YXNQcm9wZXJ0eVBhaW50KFNrUGFpbnQoKSk7CisKKyAgICBzcDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZT4gbVJvdW5kUmVjdExlZnQgPSBuZXcgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUoMCk7CisgICAgc3A8Q2FudmFzUHJvcGVydHlQcmltaXRpdmU+IG1Sb3VuZFJlY3RUb3AgPSBuZXcgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUoMCk7CisgICAgc3A8Q2FudmFzUHJvcGVydHlQcmltaXRpdmU+IG1Sb3VuZFJlY3RSaWdodCA9IG5ldyBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSgwKTsKKyAgICBzcDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZT4gbVJvdW5kUmVjdEJvdHRvbSA9IG5ldyBDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZSgwKTsKKyAgICBzcDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZT4gbVJvdW5kUmVjdFJ4ID0gbmV3IENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKDApOworICAgIHNwPENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlPiBtUm91bmRSZWN0UnkgPSBuZXcgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUoMCk7CisKKyAgICBzcDxDYW52YXNQcm9wZXJ0eVByaW1pdGl2ZT4gbUNpcmNsZVggPSBuZXcgQ2FudmFzUHJvcGVydHlQcmltaXRpdmUoMCk7CisgICAgc3A8Q2FudmFzUHJvcGVydHlQcmltaXRpdmU+IG1DaXJjbGVZID0gbmV3IENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKDApOworICAgIHNwPENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlPiBtQ2lyY2xlUmFkaXVzID0gbmV3IENhbnZhc1Byb3BlcnR5UHJpbWl0aXZlKDApOworCisgICAgc3A8UmVuZGVyTm9kZT4gY29udGVudDsKKyAgICB2b2lkIGNyZWF0ZUNvbnRlbnQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBUZXN0Q2FudmFzJiBjYW52YXMpIG92ZXJyaWRlIHsKKyAgICAgICAgY29udGVudCA9IFRlc3RVdGlsczo6Y3JlYXRlTm9kZSgwLCAwLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIFt0aGlzLCB3aWR0aCwgaGVpZ2h0XShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgICAgICBtUGFpbnQtPnZhbHVlLnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgICAgIG1QYWludC0+dmFsdWUuc2V0Q29sb3IoQ29sb3I6OkJsdWVfNTAwKTsKKworICAgICAgICAgICAgbVJvdW5kUmVjdFJpZ2h0LT52YWx1ZSA9IHdpZHRoIC8gMjsKKyAgICAgICAgICAgIG1Sb3VuZFJlY3RCb3R0b20tPnZhbHVlID0gaGVpZ2h0IC8gMjsKKworICAgICAgICAgICAgbUNpcmNsZVgtPnZhbHVlID0gd2lkdGggKiAwLjc1OworICAgICAgICAgICAgbUNpcmNsZVktPnZhbHVlID0gaGVpZ2h0ICogMC43NTsKKworICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcihDb2xvcjo6V2hpdGUsIFNrWGZlcm1vZGU6Ok1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QobVJvdW5kUmVjdExlZnQuZ2V0KCksIG1Sb3VuZFJlY3RUb3AuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgIG1Sb3VuZFJlY3RSaWdodC5nZXQoKSwgbVJvdW5kUmVjdEJvdHRvbS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgbVJvdW5kUmVjdFJ4LmdldCgpLCBtUm91bmRSZWN0UnkuZ2V0KCksIG1QYWludC5nZXQoKSk7CisgICAgICAgICAgICBjYW52YXMuZHJhd0NpcmNsZShtQ2lyY2xlWC5nZXQoKSwgbUNpcmNsZVkuZ2V0KCksIG1DaXJjbGVSYWRpdXMuZ2V0KCksIG1QYWludC5nZXQoKSk7CisgICAgICAgIH0pOworICAgICAgICBjYW52YXMuZHJhd1JlbmRlck5vZGUoY29udGVudC5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCBkb0ZyYW1lKGludCBmcmFtZU5yKSBvdmVycmlkZSB7CisgICAgICAgIGZsb2F0IHZhbHVlID0gKGFicygoZnJhbWVOciAlIDIwMCkgLSAxMDApKSAvIDEwMC4wZjsKKyAgICAgICAgbVJvdW5kUmVjdFJ4LT52YWx1ZSA9IGRwKDEwKSArIHZhbHVlICogZHAoNDApOworICAgICAgICBtUm91bmRSZWN0UnktPnZhbHVlID0gZHAoMTApICsgdmFsdWUgKiBkcCg4MCk7CisgICAgICAgIG1DaXJjbGVSYWRpdXMtPnZhbHVlID0gdmFsdWUgKiBkcCgyMDApOworICAgICAgICBjb250ZW50LT5zZXRQcm9wZXJ0eUZpZWxkc0RpcnR5KFJlbmRlck5vZGU6OkdFTkVSSUMpOworICAgIH0KK307CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9PdmFsQW5pbWF0aW9uLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL092YWxBbmltYXRpb24uY3BwCmluZGV4IDA4MmM2MjguLmU1NmYyZjkgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL092YWxBbmltYXRpb24uY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL092YWxBbmltYXRpb24uY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgIlRlc3RTY2VuZUJhc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9Db2xvci5oIgogCiBjbGFzcyBPdmFsQW5pbWF0aW9uOwogCkBAIC0yOCwxMiArMjksMTIgQEAKIHB1YmxpYzoKICAgICBzcDxSZW5kZXJOb2RlPiBjYXJkOwogICAgIHZvaWQgY3JlYXRlQ29udGVudChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFRlc3RDYW52YXMmIGNhbnZhcykgb3ZlcnJpZGUgewotICAgICAgICBjYW52YXMuZHJhd0NvbG9yKDB4RkZGRkZGRkYsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICBjYW52YXMuZHJhd0NvbG9yKENvbG9yOjpXaGl0ZSwgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSk7CiAgICAgICAgIGNhcmQgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMjAwLCAyMDAsCiAgICAgICAgICAgICAgICAgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcHMsIFRlc3RDYW52YXMmIGNhbnZhcykgewogICAgICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAgICAgICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKLSAgICAgICAgICAgIHBhaW50LnNldENvbG9yKDB4RkYwMDAwMDApOworICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoQ29sb3I6OkJsYWNrKTsKICAgICAgICAgICAgIGNhbnZhcy5kcmF3T3ZhbCgwLCAwLCAyMDAsIDIwMCwgcGFpbnQpOwogICAgICAgICB9KTsKICAgICAgICAgY2FudmFzLmRyYXdSZW5kZXJOb2RlKGNhcmQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvU2F2ZUxheWVyQW5pbWF0aW9uLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL1NhdmVMYXllckFuaW1hdGlvbi5jcHAKaW5kZXggNzhmY2Q4Yi4uYzg5OTg1MCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvU2F2ZUxheWVyQW5pbWF0aW9uLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9TYXZlTGF5ZXJBbmltYXRpb24uY3BwCkBAIC0yOSwxNCArMjksMjcgQEAKIHB1YmxpYzoKICAgICBzcDxSZW5kZXJOb2RlPiBjYXJkOwogICAgIHZvaWQgY3JlYXRlQ29udGVudChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFRlc3RDYW52YXMmIGNhbnZhcykgb3ZlcnJpZGUgewotICAgICAgICBjYW52YXMuZHJhd0NvbG9yKDB4RkZGRkZGRkYsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOyAvLyBiYWNrZ3JvdW5kCisgICAgICAgIGNhbnZhcy5kcmF3Q29sb3IoQ29sb3I6OldoaXRlLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsgLy8gYmFja2dyb3VuZAogCi0gICAgICAgIGNhcmQgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMjAwLCAyMDAsCisgICAgICAgIGNhcmQgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgNDAwLCA4MDAsCiAgICAgICAgICAgICAgICAgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcHMsIFRlc3RDYW52YXMmIGNhbnZhcykgewotICAgICAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDAsIDAsIDIwMCwgMjAwLCAxMjgsIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpOwotICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcigweEZGMDBGRjAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsgLy8gb3V0ZXIsIHVuY2xpcHBlZAotICAgICAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDUwLCA1MCwgMTUwLCAxNTAsIDEyOCwgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZyk7Ci0gICAgICAgICAgICBjYW52YXMuZHJhd0NvbG9yKDB4RkYwMDAwRkYsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOyAvLyBpbm5lciwgY2xpcHBlZAorICAgICAgICAgICAgLy8gbmVzdGVkIGNsaXBwZWQgc2F2ZUxheWVycworICAgICAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDAsIDAsIDQwMCwgNDAwLCAyMDAsIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpOworICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcihDb2xvcjo6R3JlZW5fNzAwLCBTa1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgICAgIGNhbnZhcy5jbGlwUmVjdCg1MCwgNTAsIDM1MCwgMzUwLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMTAwLCAxMDAsIDMwMCwgMzAwLCAxMjgsIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpOworICAgICAgICAgICAgY2FudmFzLmRyYXdDb2xvcihDb2xvcjo6Qmx1ZV81MDAsIFNrWGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpOworICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisKKyAgICAgICAgICAgIC8vIHNpbmdsZSB1bmNsaXBwZWQgc2F2ZUxheWVyCisgICAgICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgwLCA0MDApOworICAgICAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDEwMCwgMTAwLCAzMDAsIDMwMCwgMTI4LCBTa0NhbnZhczo6U2F2ZUZsYWdzKDApKTsgLy8gdW5jbGlwcGVkCisgICAgICAgICAgICBTa1BhaW50IHBhaW50OworICAgICAgICAgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgcGFpbnQuc2V0Q29sb3IoQ29sb3I6OkdyZWVuXzcwMCk7CisgICAgICAgICAgICBjYW52YXMuZHJhd0NpcmNsZSgyMDAsIDIwMCwgMjAwLCBwYWludCk7CiAgICAgICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9TaGFwZUFuaW1hdGlvbi5jcHAgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9TaGFwZUFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiYTM0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL1NoYXBlQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJUZXN0U2NlbmVCYXNlLmgiCisjaW5jbHVkZSAidXRpbHMvQ29sb3IuaCIKKworI2luY2x1ZGUgPGNzdGRpbz4KKworY2xhc3MgU2hhcGVBbmltYXRpb247CisKK3N0YXRpYyBUZXN0U2NlbmU6OlJlZ2lzdHJhciBfU2hhcGVzKFRlc3RTY2VuZTo6SW5mb3sKKyAgICAic2hhcGVzIiwKKyAgICAiQSBncmlkIG9mIHNoYXBlIGRyYXdpbmcgdGVzdCBjYXNlcy4iLAorICAgIFRlc3RTY2VuZTo6c2ltcGxlQ3JlYXRlU2NlbmU8U2hhcGVBbmltYXRpb24+Cit9KTsKKworY2xhc3MgU2hhcGVBbmltYXRpb24gOiBwdWJsaWMgVGVzdFNjZW5lIHsKK3B1YmxpYzoKKyAgICBzcDxSZW5kZXJOb2RlPiBjYXJkOworICAgIHZvaWQgY3JlYXRlQ29udGVudChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFRlc3RDYW52YXMmIGNhbnZhcykgb3ZlcnJpZGUgeworICAgICAgICBjYXJkID0gVGVzdFV0aWxzOjpjcmVhdGVOb2RlKDAsIDAsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgW3dpZHRoXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVGVzdENhbnZhcyYsIGZsb2F0LCBjb25zdCBTa1BhaW50Jik+IG9wc1tdID0geworICAgICAgICAgICAgICAgIFtdKFRlc3RDYW52YXMmIGNhbnZhcywgZmxvYXQgc2l6ZSwgY29uc3QgU2tQYWludCYgcGFpbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdBcmMoMCwgMCwgc2l6ZSwgc2l6ZSwgNTAsIDE4OSwgdHJ1ZSwgcGFpbnQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgW10oVGVzdENhbnZhcyYgY2FudmFzLCBmbG9hdCBzaXplLCBjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd092YWwoMCwgMCwgc2l6ZSwgc2l6ZSwgcGFpbnQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgW10oVGVzdENhbnZhcyYgY2FudmFzLCBmbG9hdCBzaXplLCBjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICBTa1BhdGggZGlhbW9uZFBhdGg7CisgICAgICAgICAgICAgICAgICAgIGRpYW1vbmRQYXRoLm1vdmVUbyhzaXplIC8gMiwgMCk7CisgICAgICAgICAgICAgICAgICAgIGRpYW1vbmRQYXRoLmxpbmVUbyhzaXplLCBzaXplIC8gMik7CisgICAgICAgICAgICAgICAgICAgIGRpYW1vbmRQYXRoLmxpbmVUbyhzaXplIC8gMiwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGRpYW1vbmRQYXRoLmxpbmVUbygwLCBzaXplIC8gMik7CisgICAgICAgICAgICAgICAgICAgIGRpYW1vbmRQYXRoLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3UGF0aChkaWFtb25kUGF0aCwgcGFpbnQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgW10oVGVzdENhbnZhcyYgY2FudmFzLCBmbG9hdCBzaXplLCBjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCBkYXRhW10gPSB7MCwgMCwgc2l6ZSwgc2l6ZSwgMCwgc2l6ZSwgc2l6ZSwgMCB9OworICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd0xpbmVzKGRhdGEsIHNpemVvZihkYXRhKSAvIHNpemVvZihmbG9hdCksIHBhaW50KTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIFtdKFRlc3RDYW52YXMmIGNhbnZhcywgZmxvYXQgc2l6ZSwgY29uc3QgU2tQYWludCYgcGFpbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZGF0YVtdID0gezAsIDAsIHNpemUsIHNpemUsIDAsIHNpemUsIHNpemUsIDAgfTsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdQb2ludHMoZGF0YSwgc2l6ZW9mKGRhdGEpIC8gc2l6ZW9mKGZsb2F0KSwgcGFpbnQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgW10oVGVzdENhbnZhcyYgY2FudmFzLCBmbG9hdCBzaXplLCBjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgc2l6ZSwgc2l6ZSwgcGFpbnQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgW10oVGVzdENhbnZhcyYgY2FudmFzLCBmbG9hdCBzaXplLCBjb25zdCBTa1BhaW50JiBwYWludCkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCByYWQgPSBzaXplIC8gNDsKKyAgICAgICAgICAgICAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QoMCwgMCwgc2l6ZSwgc2l6ZSwgcmFkLCByYWQsIHBhaW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgZmxvYXQgY2VsbFNwYWNlID0gZHAoNCk7CisgICAgICAgICAgICBmbG9hdCBjZWxsU2l6ZSA9IGZsb29yZih3aWR0aCAvIDcgLSBjZWxsU3BhY2UpOworCisgICAgICAgICAgICAvLyBlYWNoIGNvbWJpbmF0aW9uIG9mIHN0cm9rZVdpZHRoICsgc3R5bGUgZ2V0cyBhIGNvbHVtbgorICAgICAgICAgICAgaW50IG91dGVyQ291bnQgPSBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICAgICAgU2tQYWludCBwYWludDsKKyAgICAgICAgICAgIHBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKKyAgICAgICAgICAgIFNrUGFpbnQ6OlN0eWxlIHN0eWxlc1tdID0geworICAgICAgICAgICAgICAgICAgICBTa1BhaW50OjprU3Ryb2tlX1N0eWxlLCBTa1BhaW50OjprRmlsbF9TdHlsZSwgU2tQYWludDo6a1N0cm9rZUFuZEZpbGxfU3R5bGUgfTsKKyAgICAgICAgICAgIGZvciAoYXV0byBzdHlsZSA6IHN0eWxlcykgeworICAgICAgICAgICAgICAgIHBhaW50LnNldFN0eWxlKHN0eWxlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gc3Ryb2tlV2lkdGggOiB7IDAuMGYsIDAuNWYsIDguMGYgfSkgeworICAgICAgICAgICAgICAgICAgICBwYWludC5zZXRTdHJva2VXaWR0aChzdHJva2VXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGZpbGwgY29sdW1uIHdpdGggZWFjaCBvcAorICAgICAgICAgICAgICAgICAgICBpbnQgbWlkZGxlQ291bnQgPSBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gb3AgOiBvcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbm5lckNvdW50ID0gY2FudmFzLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5jbGlwUmVjdCgwLCAwLCBjZWxsU2l6ZSwgY2VsbFNpemUsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5kcmF3Q29sb3IoQ29sb3I6OldoaXRlLCBTa1hmZXJtb2RlOjpNb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wKGNhbnZhcywgY2VsbFNpemUsIHBhaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChpbm5lckNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoY2VsbFNpemUgKyBjZWxsU3BhY2UsIDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChtaWRkbGVDb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoMCwgY2VsbFNpemUgKyBjZWxsU3BhY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChvdXRlckNvdW50KTsKKyAgICAgICAgfSk7CisgICAgICAgIGNhbnZhcy5kcmF3Q29sb3IoQ29sb3I6OkdyZXlfNTAwLCBTa1hmZXJtb2RlOjpNb2RlOjprU3JjT3Zlcl9Nb2RlKTsKKyAgICAgICAgY2FudmFzLmRyYXdSZW5kZXJOb2RlKGNhcmQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgZG9GcmFtZShpbnQgZnJhbWVOcikgb3ZlcnJpZGUgeworICAgICAgICBjYXJkLT5tdXRhdGVTdGFnaW5nUHJvcGVydGllcygpLnNldFRyYW5zbGF0aW9uWShmcmFtZU5yICUgMTUwKTsKKyAgICAgICAgY2FyZC0+c2V0UHJvcGVydHlGaWVsZHNEaXJ0eShSZW5kZXJOb2RlOjpZKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvVGVzdFNjZW5lQmFzZS5oIGIvbGlicy9od3VpL3Rlc3RzL2NvbW1vbi9zY2VuZXMvVGVzdFNjZW5lQmFzZS5oCmluZGV4IGFjNzgxMjQuLjkzNWRkY2YgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL1Rlc3RTY2VuZUJhc2UuaAorKysgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9UZXN0U2NlbmVCYXNlLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlICJ0ZXN0cy9jb21tb24vVGVzdENvbnRleHQuaCIKICNpbmNsdWRlICJ0ZXN0cy9jb21tb24vVGVzdFNjZW5lLmgiCiAjaW5jbHVkZSAidGVzdHMvY29tbW9uL1Rlc3RVdGlscy5oIgorI2luY2x1ZGUgInV0aWxzL0NvbG9yLmgiCiAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9UZXh0QW5pbWF0aW9uLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy9jb21tb24vc2NlbmVzL1RleHRBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MjNkYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzL2h3dWkvdGVzdHMvY29tbW9uL3NjZW5lcy9UZXh0QW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgIlRlc3RTY2VuZUJhc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9Db2xvci5oIgorCitjbGFzcyBUZXh0QW5pbWF0aW9uOworCitzdGF0aWMgVGVzdFNjZW5lOjpSZWdpc3RyYXIgX1RleHQoVGVzdFNjZW5lOjpJbmZveworICAgICJ0ZXh0IiwKKyAgICAiRHJhd3MgYSBidW5jaCBvZiB0ZXh0LiIsCisgICAgVGVzdFNjZW5lOjpzaW1wbGVDcmVhdGVTY2VuZTxUZXh0QW5pbWF0aW9uPgorfSk7CisKK2NsYXNzIFRleHRBbmltYXRpb24gOiBwdWJsaWMgVGVzdFNjZW5lIHsKK3B1YmxpYzoKKyAgICBzcDxSZW5kZXJOb2RlPiBjYXJkOworICAgIHZvaWQgY3JlYXRlQ29udGVudChpbnQgd2lkdGgsIGludCBoZWlnaHQsIFRlc3RDYW52YXMmIGNhbnZhcykgb3ZlcnJpZGUgeworICAgICAgICBjYW52YXMuZHJhd0NvbG9yKENvbG9yOjpXaGl0ZSwgU2tYZmVybW9kZTo6a1NyY092ZXJfTW9kZSk7CisgICAgICAgIGNhcmQgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgICAgICBTa1BhaW50IHBhaW50OworICAgICAgICAgICAgcGFpbnQuc2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisgICAgICAgICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgICAgICBwYWludC5zZXRUZXh0U2l6ZSg1MCk7CisKKyAgICAgICAgICAgIHBhaW50LnNldENvbG9yKENvbG9yOjpCbGFjayk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgICAgICAgICBUZXN0VXRpbHM6OmRyYXdUZXh0VG9DYW52YXMoJmNhbnZhcywgIlRlc3Qgc3RyaW5nIiwgcGFpbnQsIDQwMCwgaSAqIDEwMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNrUGF0aCBwYXRoOworICAgICAgICAgICAgcGF0aC5hZGRPdmFsKFNrUmVjdDo6TWFrZUxUUkIoMTAwLCAxMDAsIDMwMCwgMzAwKSk7CisKKyAgICAgICAgICAgIHBhaW50LnNldENvbG9yKENvbG9yOjpCbHVlXzUwMCk7CisgICAgICAgICAgICBUZXN0VXRpbHM6OmRyYXdUZXh0VG9DYW52YXMoJmNhbnZhcywgIlRoaXMgaXMgYSBuZWF0IGNpcmNsZSBvZiB0ZXh0ISIsIHBhaW50LCBwYXRoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVuZGVyTm9kZShjYXJkLmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGRvRnJhbWUoaW50IGZyYW1lTnIpIG92ZXJyaWRlIHsKKyAgICAgICAgaW50IGN1ckZyYW1lID0gZnJhbWVOciAlIDE1MDsKKyAgICAgICAgY2FyZC0+bXV0YXRlU3RhZ2luZ1Byb3BlcnRpZXMoKS5zZXRUcmFuc2xhdGlvblgoY3VyRnJhbWUpOworICAgICAgICBjYXJkLT5tdXRhdGVTdGFnaW5nUHJvcGVydGllcygpLnNldFRyYW5zbGF0aW9uWShjdXJGcmFtZSk7CisgICAgICAgIGNhcmQtPnNldFByb3BlcnR5RmllbGRzRGlydHkoUmVuZGVyTm9kZTo6WCB8IFJlbmRlck5vZGU6OlkpOworICAgIH0KK307CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvbWFjcm9iZW5jaC9UZXN0U2NlbmVSdW5uZXIuY3BwIGIvbGlicy9od3VpL3Rlc3RzL21hY3JvYmVuY2gvVGVzdFNjZW5lUnVubmVyLmNwcAppbmRleCA4MjYxMjIwLi5hODQzZTkyIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvbWFjcm9iZW5jaC9UZXN0U2NlbmVSdW5uZXIuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL1Rlc3RTY2VuZVJ1bm5lci5jcHAKQEAgLTM4LDYgKzM4LDMwIEBACiAgICAgfQogfTsKIAordGVtcGxhdGU8Y2xhc3MgVD4KK2NsYXNzIE1vZGlmaWVkTW92aW5nQXZlcmFnZSB7CitwdWJsaWM6CisgICAgTW9kaWZpZWRNb3ZpbmdBdmVyYWdlKGludCB3ZWlnaHQpIDogbVdlaWdodCh3ZWlnaHQpIHt9CisKKyAgICBUIGFkZChUIHRvZGF5KSB7CisgICAgICAgIGlmICghbUhhc1ZhbHVlKSB7CisgICAgICAgICAgICBtQXZlcmFnZSA9IHRvZGF5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUF2ZXJhZ2UgPSAoKChtV2VpZ2h0IC0gMSkgKiBtQXZlcmFnZSkgKyB0b2RheSkgLyBtV2VpZ2h0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtQXZlcmFnZTsKKyAgICB9CisKKyAgICBUIGF2ZXJhZ2UoKSB7CisgICAgICAgIHJldHVybiBtQXZlcmFnZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtSGFzVmFsdWUgPSBmYWxzZTsKKyAgICBpbnQgbVdlaWdodDsKKyAgICBUIG1BdmVyYWdlOworfTsKKwogdm9pZCBydW4oY29uc3QgVGVzdFNjZW5lOjpJbmZvJiBpbmZvLCBjb25zdCBUZXN0U2NlbmU6Ok9wdGlvbnMmIG9wdHMpIHsKICAgICAvLyBTd2l0Y2ggdG8gdGhlIHJlYWwgZGlzcGxheQogICAgIGdEaXNwbGF5ID0gZ2V0QnVpbHRJbkRpc3BsYXkoKTsKQEAgLTY3LDIyICs5MSwzNSBAQAogICAgIHByb3h5LT5zZXRMaWdodENlbnRlcigoVmVjdG9yMyl7bGlnaHRYLCBkcCgtMjAwLjBmKSwgZHAoODAwLjBmKX0pOwogCiAgICAgLy8gRG8gYSBmZXcgY29sZCBydW5zIHRoZW4gcmVzZXQgdGhlIHN0YXRzIHNvIHRoYXQgdGhlIGNhY2hlcyBhcmUgYWxsIGhvdAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyBpKyspIHsKICAgICAgICAgdGVzdENvbnRleHQud2FpdEZvclZzeW5jKCk7CiAgICAgICAgIG5zZWNzX3QgdnN5bmMgPSBzeXN0ZW1UaW1lKENMT0NLX01PTk9UT05JQyk7CiAgICAgICAgIFVpRnJhbWVJbmZvQnVpbGRlcihwcm94eS0+ZnJhbWVJbmZvKCkpLnNldFZzeW5jKHZzeW5jLCB2c3luYyk7CiAgICAgICAgIHByb3h5LT5zeW5jQW5kRHJhd0ZyYW1lKCk7CiAgICAgfQorCiAgICAgcHJveHktPnJlc2V0UHJvZmlsZUluZm8oKTsKKyAgICBwcm94eS0+ZmVuY2UoKTsKKworICAgIE1vZGlmaWVkTW92aW5nQXZlcmFnZTxkb3VibGU+IGF2Z01zKG9wdHMucmVwb3J0RnJhbWV0aW1lV2VpZ2h0KTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3B0cy5jb3VudDsgaSsrKSB7CiAgICAgICAgIHRlc3RDb250ZXh0LndhaXRGb3JWc3luYygpOwotCi0gICAgICAgIEFUUkFDRV9OQU1FKCJVSS1EcmF3IEZyYW1lIik7CiAgICAgICAgIG5zZWNzX3QgdnN5bmMgPSBzeXN0ZW1UaW1lKENMT0NLX01PTk9UT05JQyk7Ci0gICAgICAgIFVpRnJhbWVJbmZvQnVpbGRlcihwcm94eS0+ZnJhbWVJbmZvKCkpLnNldFZzeW5jKHZzeW5jLCB2c3luYyk7Ci0gICAgICAgIHNjZW5lLT5kb0ZyYW1lKGkpOwotICAgICAgICBwcm94eS0+c3luY0FuZERyYXdGcmFtZSgpOworICAgICAgICB7CisgICAgICAgICAgICBBVFJBQ0VfTkFNRSgiVUktRHJhdyBGcmFtZSIpOworICAgICAgICAgICAgVWlGcmFtZUluZm9CdWlsZGVyKHByb3h5LT5mcmFtZUluZm8oKSkuc2V0VnN5bmModnN5bmMsIHZzeW5jKTsKKyAgICAgICAgICAgIHNjZW5lLT5kb0ZyYW1lKGkpOworICAgICAgICAgICAgcHJveHktPnN5bmNBbmREcmF3RnJhbWUoKTsKKyAgICAgICAgfQorICAgICAgICBwcm94eS0+ZmVuY2UoKTsKKyAgICAgICAgbnNlY3NfdCBkb25lID0gc3lzdGVtVGltZShDTE9DS19NT05PVE9OSUMpOworICAgICAgICBpZiAob3B0cy5yZXBvcnRGcmFtZXRpbWVXZWlnaHQpIHsKKyAgICAgICAgICAgIGF2Z01zLmFkZCgoZG9uZSAtIHZzeW5jKSAvIDEwMDAwMDAuMCk7CisgICAgICAgICAgICBpZiAoaSAlIDEwID09IDkpIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIkF2ZXJhZ2UgZnJhbWV0aW1lICUuM2Ztc1xuIiwgYXZnTXMuYXZlcmFnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIHByb3h5LT5kdW1wUHJvZmlsZUluZm8oU1RET1VUX0ZJTEVOTywgMCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvbWFjcm9iZW5jaC9tYWluLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL21haW4uY3BwCmluZGV4IDYxOTcxM2MuLjE2MTZhOTUgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL21haW4uY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9tYWNyb2JlbmNoL21haW4uY3BwCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAidGVzdHMvY29tbW9uL1Rlc3RTY2VuZS5oIgogCiAjaW5jbHVkZSAicHJvdG9zL2h3dWkucGIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0aWVzLmgiCiAKICNpbmNsdWRlIDxnZXRvcHQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMjUsMjYgKzI2LDM4IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKwogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ7CiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6dWlyZW5kZXJlcjsKIHVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOjp1aXJlbmRlcmVyOjp0ZXN0OwogCi1zdGF0aWMgaW50IGdGcmFtZUNvdW50ID0gMTUwOwogc3RhdGljIGludCBnUmVwZWF0Q291bnQgPSAxOwogc3RhdGljIHN0ZDo6dmVjdG9yPFRlc3RTY2VuZTo6SW5mbz4gZ1J1blRlc3RzOworc3RhdGljIFRlc3RTY2VuZTo6T3B0aW9ucyBnT3B0czsKIAogdm9pZCBydW4oY29uc3QgVGVzdFNjZW5lOjpJbmZvJiBpbmZvLCBjb25zdCBUZXN0U2NlbmU6Ok9wdGlvbnMmIG9wdHMpOwogCiBzdGF0aWMgdm9pZCBwcmludEhlbHAoKSB7Ci0gICAgcHJpbnRmKCJcCi1VU0FHRTogaHd1aXRlc3QgW09QVElPTlNdIDxURVNUTkFNRT5cblwKLVxuXAotT1BUSU9OUzpcblwKLSAgLWMsIC0tY291bnQ9TlVNICAgICAgTlVNIGxvb3BzIGEgdGVzdCBzaG91bGQgcnVuIChleGFtcGxlLCBudW1iZXIgb2YgZnJhbWVzKVxuXAotICAtciwgLS1ydW5zPU5VTSAgICAgICBSZXBlYXQgdGhlIHRlc3QocykgTlVNIHRpbWVzXG5cCi0gIC1oLCAtLWhlbHAgICAgICAgICAgIERpc3BsYXkgdGhpcyBoZWxwXG5cCi0gIC0tbGlzdCAgICAgICAgICAgICAgIExpc3QgYWxsIHRlc3RzXG5cCi1cbiIpOworICAgIHByaW50ZihSIigKK1VTQUdFOiBod3VpdGVzdCBbT1BUSU9OU10gPFRFU1ROQU1FPgorCitPUFRJT05TOgorICAtYywgLS1jb3VudD1OVU0gICAgICBOVU0gbG9vcHMgYSB0ZXN0IHNob3VsZCBydW4gKGV4YW1wbGUsIG51bWJlciBvZiBmcmFtZXMpCisgIC1yLCAtLXJ1bnM9TlVNICAgICAgIFJlcGVhdCB0aGUgdGVzdChzKSBOVU0gdGltZXMKKyAgLWgsIC0taGVscCAgICAgICAgICAgRGlzcGxheSB0aGlzIGhlbHAKKyAgLS1saXN0ICAgICAgICAgICAgICAgTGlzdCBhbGwgdGVzdHMKKyAgLS13YWl0LWZvci1ncHUgICAgICAgU2V0IHRoaXMgdG8gd2FpdCBmb3IgdGhlIEdQVSBiZWZvcmUgcHJvZHVjaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGZyYW1lLiBOb3RlIHRoYXQgd2l0aG91dCBsb2NrZWQgY2xvY2tzIHRoaXMgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICBwYXRob2xvZ2ljYWxseSBiYWQgcGVyZm9ybWFuY2UgZHVlIHRvIGxhcmdlIGlkbGUgdGltZQorICAtLXJlcG9ydC1mcmFtZXRpbWVbPXdlaWdodF0gSWYgc2V0LCB0aGUgdGVzdCB3aWxsIHByaW50IHRvIHN0ZG91dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgbW92aW5nIGF2ZXJhZ2UgZnJhbWV0aW1lLiBXZWlnaHQgaXMgb3B0aW9uYWwsIGRlZmF1bHQgaXMgMTAKKyAgLS1jcHVzZXQ9bmFtZSAgICAgICAgQWRkcyB0aGUgdGVzdCB0byB0aGUgc3BlY2lmaWVkIGNwdXNldCBiZWZvcmUgcnVubmluZworICAgICAgICAgICAgICAgICAgICAgICBOb3Qgc3VwcG9ydGVkIG9uIGFsbCBkZXZpY2VzIGFuZCBuZWVkcyByb290CispIik7CiB9CiAKIHN0YXRpYyB2b2lkIGxpc3RUZXN0cygpIHsKQEAgLTc3LDExICs5MCw1NiBAQAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgbW92ZVRvQ3B1U2V0KGNvbnN0IGNoYXIqIGNwdXNldE5hbWUpIHsKKyAgICBpZiAoYWNjZXNzKCIvZGV2L2NwdXNldC90YXNrcyIsIEZfT0spKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gY3B1c2V0cywgc2tpcHBpbmcuLi5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0YXRpYyBjb25zdCBpbnQgQlVGX1NJWkUgPSAxMDA7CisgICAgY2hhciBidWZmZXJbQlVGX1NJWkVdOworCisgICAgaWYgKHNucHJpbnRmKGJ1ZmZlciwgQlVGX1NJWkUsICIvZGV2L2NwdXNldC8lcy90YXNrcyIsIGNwdXNldE5hbWUpID49IEJVRl9TSVpFKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIGNwdXNldE5hbWUgdG9vIGxhcmdlIHRvIGZpdCBpbiBidWZmZXIgJyVzJ1xuIiwgY3B1c2V0TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGZkID0gb3BlbihidWZmZXIsIE9fV1JPTkxZIHwgT19DTE9FWEVDKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGZpbGUgJWRcbiIsIGVycm5vKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwaWRfdCBwaWQgPSBnZXRwaWQoKTsKKworICAgIGludCB0b3dyaXRlID0gc25wcmludGYoYnVmZmVyLCBCVUZfU0laRSwgIiVsZCIsIChsb25nKSBwaWQpOworICAgIGlmICh0b3dyaXRlID49IEJVRl9TSVpFKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQnVmZmVyIHdhc24ndCBsYXJnZSBlbm91Z2g/XG4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAod3JpdGUoZmQsIGJ1ZmZlciwgdG93cml0ZSkgIT0gdG93cml0ZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gd3JpdGUsIGVycm5vPSVkIiwgZXJybm8pOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlKGZkKTsKK30KKworLy8gRm9yIG9wdGlvbnMgdGhhdCBvbmx5IGV4aXN0IGluIGxvbmctZm9ybS4gQW55dGhpbmcgaW4gdGhlCisvLyAwLTI1NSByYW5nZSBpcyByZXNlcnZlZCBmb3Igc2hvcnQgb3B0aW9ucyAod2hpY2gganVzdCB1c2UgdGhlaXIgQVNDSUkgdmFsdWUpCituYW1lc3BhY2UgTG9uZ09wdHMgeworZW51bSB7CisgICAgUmVzZXJ2ZWQgPSAyNTUsCisgICAgTGlzdCwKKyAgICBXYWl0Rm9yR3B1LAorICAgIFJlcG9ydEZyYW1ldGltZSwKKyAgICBDcHVTZXQsCit9OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBMT05HX09QVElPTlNbXSA9IHsKICAgICB7ICJmcmFtZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgbnVsbHB0ciwgJ2YnIH0sCiAgICAgeyAicmVwZWF0IiwgcmVxdWlyZWRfYXJndW1lbnQsIG51bGxwdHIsICdyJyB9LAogICAgIHsgImhlbHAiLCBub19hcmd1bWVudCwgbnVsbHB0ciwgJ2gnIH0sCi0gICAgeyAibGlzdCIsIG5vX2FyZ3VtZW50LCBudWxscHRyLCAnbCcgfSwKKyAgICB7ICJsaXN0Iiwgbm9fYXJndW1lbnQsIG51bGxwdHIsIExvbmdPcHRzOjpMaXN0IH0sCisgICAgeyAid2FpdC1mb3ItZ3B1Iiwgbm9fYXJndW1lbnQsIG51bGxwdHIsIExvbmdPcHRzOjpXYWl0Rm9yR3B1IH0sCisgICAgeyAicmVwb3J0LWZyYW1ldGltZSIsIG9wdGlvbmFsX2FyZ3VtZW50LCBudWxscHRyLCBMb25nT3B0czo6UmVwb3J0RnJhbWV0aW1lIH0sCisgICAgeyAiY3B1c2V0IiwgcmVxdWlyZWRfYXJndW1lbnQsIG51bGxwdHIsIExvbmdPcHRzOjpDcHVTZXQgfSwKICAgICB7IDAsIDAsIDAsIDAgfQogfTsKIApAQCAtODksOCArMTQ3LDYgQEAKIAogdm9pZCBwYXJzZU9wdGlvbnMoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewogICAgIGludCBjOwotICAgIC8vIHRlbXBvcmFyeSB2YXJpYWJsZQotICAgIGludCBjb3VudDsKICAgICBib29sIGVycm9yID0gZmFsc2U7CiAgICAgb3B0ZXJyID0gMDsKIApAQCAtMTEwLDMxICsxNjYsNTMgQEAKICAgICAgICAgICAgIC8vIChhbHRob3VnaCBub25lIG9mIHRoZSBjdXJyZW50IExPTkdfT1BUSU9OUyBkbyB0aGlzLi4uKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSAnbCc6CisgICAgICAgIGNhc2UgTG9uZ09wdHM6Okxpc3Q6CiAgICAgICAgICAgICBsaXN0VGVzdHMoKTsKICAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgY291bnQgPSBhdG9pKG9wdGFyZyk7Ci0gICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICBnT3B0cy5jb3VudCA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgIGlmICghZ09wdHMuY291bnQpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZnJhbWVzIGFyZ3VtZW50ICclcydcbiIsIG9wdGFyZyk7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBnRnJhbWVDb3VudCA9IChjb3VudCA+IDAgPyBjb3VudCA6IElOVF9NQVgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBjb3VudCA9IGF0b2kob3B0YXJnKTsKLSAgICAgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgIGdSZXBlYXRDb3VudCA9IGF0b2kob3B0YXJnKTsKKyAgICAgICAgICAgIGlmICghZ1JlcGVhdENvdW50KSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHJlcGVhdCBhcmd1bWVudCAnJXMnXG4iLCBvcHRhcmcpOwogICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZ1JlcGVhdENvdW50ID0gKGNvdW50ID4gMCA/IGNvdW50IDogSU5UX01BWCk7CisgICAgICAgICAgICAgICAgZ1JlcGVhdENvdW50ID0gKGdSZXBlYXRDb3VudCA+IDAgPyBnUmVwZWF0Q291bnQgOiBJTlRfTUFYKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgTG9uZ09wdHM6OlJlcG9ydEZyYW1ldGltZToKKyAgICAgICAgICAgIGlmIChvcHRhcmcpIHsKKyAgICAgICAgICAgICAgICBnT3B0cy5yZXBvcnRGcmFtZXRpbWVXZWlnaHQgPSBhdG9pKG9wdGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKCFnT3B0cy5yZXBvcnRGcmFtZXRpbWVXZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIHJlcG9ydCBmcmFtZXRpbWUgd2VpZ2h0ICclcydcbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdPcHRzLnJlcG9ydEZyYW1ldGltZVdlaWdodCA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb25nT3B0czo6V2FpdEZvckdwdToKKyAgICAgICAgICAgIFByb3BlcnRpZXM6OndhaXRGb3JHcHVDb21wbGV0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTG9uZ09wdHM6OkNwdVNldDoKKyAgICAgICAgICAgIGlmICghb3B0YXJnKSB7CisgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZVRvQ3B1U2V0KG9wdGFyZyk7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAgIHByaW50SGVscCgpOwogICAgICAgICAgICAgZXhpdChFWElUX1NVQ0NFU1MpOwpAQCAtMTcyLDEzICsyNTAsMTQgQEAKIH0KIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICAgIC8vIHNldCBkZWZhdWx0cworICAgIGdPcHRzLmNvdW50ID0gMTUwOworCiAgICAgcGFyc2VPcHRpb25zKGFyZ2MsIGFyZ3YpOwogCi0gICAgVGVzdFNjZW5lOjpPcHRpb25zIG9wdHM7Ci0gICAgb3B0cy5jb3VudCA9IGdGcmFtZUNvdW50OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ1JlcGVhdENvdW50OyBpKyspIHsKICAgICAgICAgZm9yIChhdXRvJiYgdGVzdCA6IGdSdW5UZXN0cykgewotICAgICAgICAgICAgcnVuKHRlc3QsIG9wdHMpOworICAgICAgICAgICAgcnVuKHRlc3QsIGdPcHRzKTsKICAgICAgICAgfQogICAgIH0KICAgICBwcmludGYoIlN1Y2Nlc3MhXG4iKTsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy9taWNyb2JlbmNoL09wUmVvcmRlcmVyQmVuY2guY3BwIGIvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvRnJhbWVCdWlsZGVyQmVuY2guY3BwCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGxpYnMvaHd1aS90ZXN0cy9taWNyb2JlbmNoL09wUmVvcmRlcmVyQmVuY2guY3BwCnJlbmFtZSB0byBsaWJzL2h3dWkvdGVzdHMvbWljcm9iZW5jaC9GcmFtZUJ1aWxkZXJCZW5jaC5jcHAKaW5kZXggNmJmZTVhOS4uNjdjOTVlMiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvT3BSZW9yZGVyZXJCZW5jaC5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvRnJhbWVCdWlsZGVyQmVuY2guY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTksOCArMTksOCBAQAogI2luY2x1ZGUgIkJha2VkT3BTdGF0ZS5oIgogI2luY2x1ZGUgIkJha2VkT3BEaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiQmFrZWRPcFJlbmRlcmVyLmgiCisjaW5jbHVkZSAiRnJhbWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiTGF5ZXJVcGRhdGVRdWV1ZS5oIgotI2luY2x1ZGUgIk9wUmVvcmRlcmVyLmgiCiAjaW5jbHVkZSAiUmVjb3JkZWRPcC5oIgogI2luY2x1ZGUgIlJlY29yZGluZ0NhbnZhcy5oIgogI2luY2x1ZGUgInRlc3RzL2NvbW1vbi9UZXN0Q29udGV4dC5oIgpAQCAtNjEsMjAgKzYxLDIwIEBACiAgICAgcmV0dXJuIHZlYzsKIH0KIAotQkVOQ0hNQVJLX05PX0FSRyhCTV9PcFJlb3JkZXJlcl9kZWZlcik7Ci12b2lkIEJNX09wUmVvcmRlcmVyX2RlZmVyOjpSdW4oaW50IGl0ZXJzKSB7CitCRU5DSE1BUktfTk9fQVJHKEJNX0ZyYW1lQnVpbGRlcl9kZWZlcik7Cit2b2lkIEJNX0ZyYW1lQnVpbGRlcl9kZWZlcjo6UnVuKGludCBpdGVycykgewogICAgIGF1dG8gbm9kZXMgPSBjcmVhdGVUZXN0Tm9kZUxpc3QoKTsKICAgICBTdGFydEJlbmNobWFya1RpbWluZygpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgewotICAgICAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMTAwLCAyMDApLCAxMDAsIDIwMCwKKyAgICAgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgxMDAsIDIwMCksIDEwMCwgMjAwLAogICAgICAgICAgICAgICAgIG5vZGVzLCBzTGlnaHRDZW50ZXIpOwotICAgICAgICBNaWNyb0JlbmNoOjpEb05vdE9wdGltaXplKCZyZW9yZGVyZXIpOworICAgICAgICBNaWNyb0JlbmNoOjpEb05vdE9wdGltaXplKCZmcmFtZUJ1aWxkZXIpOwogICAgIH0KICAgICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CiB9CiAKLUJFTkNITUFSS19OT19BUkcoQk1fT3BSZW9yZGVyZXJfZGVmZXJBbmRSZW5kZXIpOwotdm9pZCBCTV9PcFJlb3JkZXJlcl9kZWZlckFuZFJlbmRlcjo6UnVuKGludCBpdGVycykgeworQkVOQ0hNQVJLX05PX0FSRyhCTV9GcmFtZUJ1aWxkZXJfZGVmZXJBbmRSZW5kZXIpOwordm9pZCBCTV9GcmFtZUJ1aWxkZXJfZGVmZXJBbmRSZW5kZXI6OlJ1bihpbnQgaXRlcnMpIHsKICAgICBUZXN0VXRpbHM6OnJ1bk9uUmVuZGVyVGhyZWFkKFt0aGlzLCBpdGVyc10oUmVuZGVyVGhyZWFkJiB0aHJlYWQpIHsKICAgICAgICAgYXV0byBub2RlcyA9IGNyZWF0ZVRlc3ROb2RlTGlzdCgpOwogICAgICAgICBCYWtlZE9wUmVuZGVyZXI6OkxpZ2h0SW5mbyBsaWdodEluZm8gPSB7NTAuMGYsIDEyOCwgMTI4IH07CkBAIC04NCwxMSArODQsMTEgQEAKIAogICAgICAgICBTdGFydEJlbmNobWFya1RpbWluZygpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKLSAgICAgICAgICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgxMDAsIDIwMCksIDEwMCwgMjAwLAorICAgICAgICAgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgxMDAsIDIwMCksIDEwMCwgMjAwLAogICAgICAgICAgICAgICAgICAgICBub2Rlcywgc0xpZ2h0Q2VudGVyKTsKIAogICAgICAgICAgICAgQmFrZWRPcFJlbmRlcmVyIHJlbmRlcmVyKGNhY2hlcywgcmVuZGVyU3RhdGUsIHRydWUsIGxpZ2h0SW5mbyk7Ci0gICAgICAgICAgICByZW9yZGVyZXIucmVwbGF5QmFrZWRPcHM8QmFrZWRPcERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxCYWtlZE9wRGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgICAgICAgICAgTWljcm9CZW5jaDo6RG9Ob3RPcHRpbWl6ZSgmcmVuZGVyZXIpOwogICAgICAgICB9CiAgICAgICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKQEAgLTExNywxMCArMTE3LDEwIEBACiAgICAgYXV0byBub2RlcyA9IGdldFN5bmNlZFNjZW5lTm9kZXMoc2NlbmVOYW1lKTsKICAgICBiZW5jaG1hcmsuU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKLSAgICAgICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsCisgICAgICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwKICAgICAgICAgICAgICAgICBTa1JlY3Q6Ok1ha2VXSChnRGlzcGxheS53LCBnRGlzcGxheS5oKSwgZ0Rpc3BsYXkudywgZ0Rpc3BsYXkuaCwKICAgICAgICAgICAgICAgICBub2Rlcywgc0xpZ2h0Q2VudGVyKTsKLSAgICAgICAgTWljcm9CZW5jaDo6RG9Ob3RPcHRpbWl6ZSgmcmVvcmRlcmVyKTsKKyAgICAgICAgTWljcm9CZW5jaDo6RG9Ob3RPcHRpbWl6ZSgmZnJhbWVCdWlsZGVyKTsKICAgICB9CiAgICAgYmVuY2htYXJrLlN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKIH0KQEAgLTEzNiwyNSArMTM2LDI1IEBACiAKICAgICAgICAgYmVuY2htYXJrLlN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgewotICAgICAgICAgICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsCisgICAgICAgICAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsCiAgICAgICAgICAgICAgICAgICAgIFNrUmVjdDo6TWFrZVdIKGdEaXNwbGF5LncsIGdEaXNwbGF5LmgpLCBnRGlzcGxheS53LCBnRGlzcGxheS5oLAogICAgICAgICAgICAgICAgICAgICBub2Rlcywgc0xpZ2h0Q2VudGVyKTsKIAogICAgICAgICAgICAgQmFrZWRPcFJlbmRlcmVyIHJlbmRlcmVyKGNhY2hlcywgcmVuZGVyU3RhdGUsIHRydWUsIGxpZ2h0SW5mbyk7Ci0gICAgICAgICAgICByZW9yZGVyZXIucmVwbGF5QmFrZWRPcHM8QmFrZWRPcERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICAgICAgICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxCYWtlZE9wRGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgICAgICAgICAgTWljcm9CZW5jaDo6RG9Ob3RPcHRpbWl6ZSgmcmVuZGVyZXIpOwogICAgICAgICB9CiAgICAgICAgIGJlbmNobWFyay5TdG9wQmVuY2htYXJrVGltaW5nKCk7CiAgICAgfSk7CiB9CiAKLUJFTkNITUFSS19OT19BUkcoQk1fT3BSZW9yZGVyZXJfbGlzdHZpZXdfZGVmZXIpOwotdm9pZCBCTV9PcFJlb3JkZXJlcl9saXN0dmlld19kZWZlcjo6UnVuKGludCBpdGVycykgeworQkVOQ0hNQVJLX05PX0FSRyhCTV9GcmFtZUJ1aWxkZXJfbGlzdHZpZXdfZGVmZXIpOwordm9pZCBCTV9GcmFtZUJ1aWxkZXJfbGlzdHZpZXdfZGVmZXI6OlJ1bihpbnQgaXRlcnMpIHsKICAgICBiZW5jaERlZmVyU2NlbmUoKnRoaXMsIGl0ZXJzLCAibGlzdHZpZXciKTsKIH0KIAotQkVOQ0hNQVJLX05PX0FSRyhCTV9PcFJlb3JkZXJlcl9saXN0dmlld19kZWZlckFuZFJlbmRlcik7Ci12b2lkIEJNX09wUmVvcmRlcmVyX2xpc3R2aWV3X2RlZmVyQW5kUmVuZGVyOjpSdW4oaW50IGl0ZXJzKSB7CitCRU5DSE1BUktfTk9fQVJHKEJNX0ZyYW1lQnVpbGRlcl9saXN0dmlld19kZWZlckFuZFJlbmRlcik7Cit2b2lkIEJNX0ZyYW1lQnVpbGRlcl9saXN0dmlld19kZWZlckFuZFJlbmRlcjo6UnVuKGludCBpdGVycykgewogICAgIGJlbmNoRGVmZXJBbmRSZW5kZXJTY2VuZSgqdGhpcywgaXRlcnMsICJsaXN0dmlldyIpOwogfQogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvbWljcm9iZW5jaC9QYXRoUGFyc2VyQmVuY2guY3BwIGIvbGlicy9od3VpL3Rlc3RzL21pY3JvYmVuY2gvUGF0aFBhcnNlckJlbmNoLmNwcAppbmRleCAzZDlmYWZhLi5iZDc0MmM2IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvbWljcm9iZW5jaC9QYXRoUGFyc2VyQmVuY2guY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy9taWNyb2JlbmNoL1BhdGhQYXJzZXJCZW5jaC5jcHAKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxiZW5jaG1hcmsvQmVuY2htYXJrLmg+CiAKICNpbmNsdWRlICJQYXRoUGFyc2VyLmgiCi0jaW5jbHVkZSAiVmVjdG9yRHJhd2FibGVQYXRoLmgiCisjaW5jbHVkZSAiVmVjdG9yRHJhd2FibGUuaCIKIAogI2luY2x1ZGUgPFNrUGF0aC5oPgogCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvc2NyaXB0cy9wcmVwX3ZvbGFudGlzLnNoIGIvbGlicy9od3VpL3Rlc3RzL3NjcmlwdHMvcHJlcF92b2xhbnRpcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWQ0ODY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlicy9od3VpL3Rlc3RzL3NjcmlwdHMvcHJlcF92b2xhbnRpcy5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vYmFzaAorCisjIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworYWRiIHJvb3QKK2FkYiB3YWl0LWZvci1kZXZpY2UKK2FkYiBzaGVsbCBzdG9wIG1wZGVjaXNpb24KK2FkYiBzaGVsbCBzdG9wIHBlcmZkCithZGIgc2hlbGwgc3RvcAorZm9yIHBpZCBpbiAkKCBhZGIgc2hlbGwgcHMgfCBhd2sgJ3sgaWYgKCAkOSA9PSAic3VyZmFjZWZsaW5nZXIiICkgeyBwcmludCAkMiB9IH0nICk7IGRvCisgICAgYWRiIHNoZWxsIGtpbGwgJHBpZAorZG9uZQorYWRiIHNoZWxsIHNldHByb3AgZGVidWcuZWdsLnRyYWNlR3B1Q29tcGxldGlvbiAxCithZGIgc2hlbGwgZGFlbW9uaXplIHN1cmZhY2VmbGluZ2VyCitzbGVlcCAzCithZGIgc2hlbGwgc2V0cHJvcCBzZXJ2aWNlLmJvb3RhbmltLmV4aXQgMQorCisjIGNwdSBwb3NzaWJsZSBmcmVxdWVuY2llcworIyAyMDQwMDAgMjI5NTAwIDI1NTAwMCAyODA1MDAgMzA2MDAwIDMzMTUwMCAzNTcwMDAgMzgyNTAwIDQwODAwMCA0MzM1MDAgNDU5MDAwCisjIDQ4NDUwMCA1MTAwMDAgNTM1NTAwIDU2MTAwMCA1ODY1MDAgNjEyMDAwIDYzNzUwMCA2NjMwMDAgNjg4NTAwIDcxNDAwMCA3Mzk1MDAKKyMgNzY1MDAwIDc5MDUwMCA4MTYwMDAgODQxNTAwIDg2NzAwMCA4OTI1MDAgOTE4MDAwIDk0MzUwMCA5NjkwMDAgOTk0NTAwIDEwMjAwMDAKKyMgMTEyMjAwMCAxMjI0MDAwIDEzMjYwMDAgMTQyODAwMCAxNTMwMDAwIDE2MzIwMDAgMTczNDAwMCAxODM2MDAwIDE5MzgwMDAKKyMgMjAxNDUwMCAyMDkxMDAwIDIxOTMwMDAgMjI5NTAwMCAyMzk3MDAwIDI0OTkwMDAKKworUz0xMzI2MDAwCitlY2hvICJzZXQgY3B1ICRjcHUgdG8gJFMgaHoiOworYWRiIHNoZWxsICJlY2hvIHVzZXJzcGFjZSA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX2dvdmVybm9yIgorYWRiIHNoZWxsICJlY2hvICRTID4gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL3NjYWxpbmdfbWF4X2ZyZXEiCithZGIgc2hlbGwgImVjaG8gJFMgPiAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19taW5fZnJlcSIKK2FkYiBzaGVsbCAiZWNobyAkUyA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9zY2FsaW5nX3NldHNwZWVkIgorCisjZGlzYWJsZSBob3RwbHVnCithZGIgc2hlbGwgImVjaG8gMCA+IC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdXF1aWV0L3RlZ3JhX2NwdXF1aWV0L2VuYWJsZSIKKworIyBnYnVzIHBvc3NpYmxlIHJhdGVzCisjIDcyMDAwIDEwODAwMCAxODAwMDAgMjUyMDAwIDMyNDAwMCAzOTYwMDAgNDY4MDAwIDU0MDAwMCA2MTIwMDAgNjQ4MDAwCisjIDY4NDAwMCA3MDgwMDAgNzU2MDAwIDgwNDAwMCA4NTIwMDAgKGtIeikKKworUz0zMjQwMDAwMDAKK2VjaG8gInNldCBncHUgdG8gJHMgaHoiCithZGIgc2hlbGwgImVjaG8gMSA+IC9kL2Nsb2NrL292ZXJyaWRlLmdidXMvc3RhdGUiCithZGIgc2hlbGwgImVjaG8gJFMgPiAvZC9jbG9jay9vdmVycmlkZS5nYnVzL3JhdGUiCmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9CYWtlZE9wU3RhdGVUZXN0cy5jcHAgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9CYWtlZE9wU3RhdGVUZXN0cy5jcHAKaW5kZXggODMyMWZmOS4uMGY4ZTA0NyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvQmFrZWRPcFN0YXRlVGVzdHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0Jha2VkT3BTdGF0ZVRlc3RzLmNwcApAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxCYWtlZE9wU3RhdGUuaD4KKyNpbmNsdWRlIDxDbGlwQXJlYS5oPgogI2luY2x1ZGUgPFJlY29yZGVkT3AuaD4KICNpbmNsdWRlIDx0ZXN0cy9jb21tb24vVGVzdFV0aWxzLmg+CiAKQEAgLTI0LDMxICsyNSwzMyBAQAogbmFtZXNwYWNlIHVpcmVuZGVyZXIgewogCiBURVNUKFJlc29sdmVkUmVuZGVyU3RhdGUsIGNvbnN0cnVjdCkgeworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CiAgICAgTWF0cml4NCB0cmFuc2xhdGUxMHgyMDsKICAgICB0cmFuc2xhdGUxMHgyMC5sb2FkVHJhbnNsYXRlKDEwLCAyMCwgMCk7CiAKICAgICBTa1BhaW50IHBhaW50OwotICAgIFJlY3RPcCByZWNvcmRlZE9wKFJlY3QoMzAsIDQwLCAxMDAsIDIwMCksIHRyYW5zbGF0ZTEweDIwLCBSZWN0KDEwMCwgMjAwKSwgJnBhaW50KTsKKyAgICBDbGlwUmVjdCBjbGlwKFJlY3QoMTAwLCAyMDApKTsKKyAgICBSZWN0T3AgcmVjb3JkZWRPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCB0cmFuc2xhdGUxMHgyMCwgJmNsaXAsICZwYWludCk7CiAgICAgewogICAgICAgICAvLyByZWNvcmRlZCB3aXRoIHRyYW5zZm9ybSwgbm8gcGFyZW50IHRyYW5zZm9ybQogICAgICAgICBhdXRvIHBhcmVudFNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QoTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCkpOwotICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKCpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKGFsbG9jYXRvciwgKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCBmYWxzZSk7CiAgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKHN0YXRlLnRyYW5zZm9ybSwgdHJhbnNsYXRlMTB4MjApOwotICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCAxMDAsIDIwMCksIHN0YXRlLmNsaXBSZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAwLCAyMDApLCBzdGF0ZS5jbGlwUmVjdCgpKTsKICAgICAgICAgRVhQRUNUX0VRKFJlY3QoNDAsIDYwLCAxMDAsIDIwMCksIHN0YXRlLmNsaXBwZWRCb3VuZHMpOyAvLyB0cmFuc2xhdGVkIGFuZCBhbHNvIGNsaXBwZWQKICAgICAgICAgRVhQRUNUX0VRKE9wQ2xpcFNpZGVGbGFnczo6UmlnaHQgfCBPcENsaXBTaWRlRmxhZ3M6OkJvdHRvbSwgc3RhdGUuY2xpcFNpZGVGbGFncyk7CiAgICAgfQogICAgIHsKICAgICAgICAgLy8gcmVjb3JkZWQgd2l0aCB0cmFuc2Zvcm0gYW5kIHBhcmVudCB0cmFuc2Zvcm0KICAgICAgICAgYXV0byBwYXJlbnRTbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KHRyYW5zbGF0ZTEweDIwLCBSZWN0KDEwMCwgMjAwKSk7Ci0gICAgICAgIFJlc29sdmVkUmVuZGVyU3RhdGUgc3RhdGUoKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCBmYWxzZSk7CisgICAgICAgIFJlc29sdmVkUmVuZGVyU3RhdGUgc3RhdGUoYWxsb2NhdG9yLCAqcGFyZW50U25hcHNob3QsIHJlY29yZGVkT3AsIGZhbHNlKTsKIAogICAgICAgICBNYXRyaXg0IGV4cGVjdGVkVHJhbnNsYXRlOwogICAgICAgICBleHBlY3RlZFRyYW5zbGF0ZS5sb2FkVHJhbnNsYXRlKDIwLCA0MCwgMCk7CiAgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKGV4cGVjdGVkVHJhbnNsYXRlLCBzdGF0ZS50cmFuc2Zvcm0pOwogCiAgICAgICAgIC8vIGludGVyc2VjdGlvbiBvZiBwYXJlbnQgJiB0cmFuc2Zvcm1lZCBjaGlsZCBjbGlwCi0gICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAyMCwgMTAwLCAyMDApLCBzdGF0ZS5jbGlwUmVjdCk7CisgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAyMCwgMTAwLCAyMDApLCBzdGF0ZS5jbGlwUmVjdCgpKTsKIAogICAgICAgICAvLyB0cmFuc2xhdGVkIGFuZCBhbHNvIGNsaXBwZWQKICAgICAgICAgRVhQRUNUX0VRKFJlY3QoNTAsIDgwLCAxMDAsIDIwMCksIHN0YXRlLmNsaXBwZWRCb3VuZHMpOwpAQCAtNTYsNiArNTksMzAgQEAKICAgICB9CiB9CiAKK1RFU1QoUmVzb2x2ZWRSZW5kZXJTdGF0ZSwgY29tcHV0ZUxvY2FsU3BhY2VDbGlwKSB7CisgICAgTGluZWFyQWxsb2NhdG9yIGFsbG9jYXRvcjsKKyAgICBNYXRyaXg0IHRyYW5zbGF0ZTEweDIwOworICAgIHRyYW5zbGF0ZTEweDIwLmxvYWRUcmFuc2xhdGUoMTAsIDIwLCAwKTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDEwMCwgMjAwKSk7CisgICAgUmVjdE9wIHJlY29yZGVkT3AoUmVjdCgxMDAwLCAxMDAwKSwgdHJhbnNsYXRlMTB4MjAsICZjbGlwLCAmcGFpbnQpOworICAgIHsKKyAgICAgICAgLy8gcmVjb3JkZWQgd2l0aCB0cmFuc2Zvcm0sIG5vIHBhcmVudCB0cmFuc2Zvcm0KKyAgICAgICAgYXV0byBwYXJlbnRTbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMTAwLCAyMDApKTsKKyAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZShhbGxvY2F0b3IsICpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBFWFBFQ1RfRVEoUmVjdCgtMTAsIC0yMCwgOTAsIDE4MCksIHN0YXRlLmNvbXB1dGVMb2NhbFNwYWNlQ2xpcCgpKQorICAgICAgICAgICAgPDwgIkxvY2FsIGNsaXAgcmVjdCBzaG91bGQgYmUgMTAweDIwMCwgb2Zmc2V0IGJ5IC0xMCwtMjAiOworICAgIH0KKyAgICB7CisgICAgICAgIC8vIHJlY29yZGVkIHdpdGggdHJhbnNmb3JtICsgcGFyZW50IHRyYW5zZm9ybQorICAgICAgICBhdXRvIHBhcmVudFNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QodHJhbnNsYXRlMTB4MjAsIFJlY3QoMTAwLCAyMDApKTsKKyAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZShhbGxvY2F0b3IsICpwYXJlbnRTbmFwc2hvdCwgcmVjb3JkZWRPcCwgZmFsc2UpOworICAgICAgICBFWFBFQ1RfRVEoUmVjdCgtMTAsIC0yMCwgODAsIDE2MCksIHN0YXRlLmNvbXB1dGVMb2NhbFNwYWNlQ2xpcCgpKQorICAgICAgICAgICAgPDwgIkxvY2FsIGNsaXAgcmVjdCBzaG91bGQgYmUgOTB4MTkwLCBvZmZzZXQgYnkgLTEwLC0yMCI7CisgICAgfQorfQorCiBjb25zdCBmbG9hdCBIQUlSTElORSA9IDAuMGY7CiAKIC8vIE5vdGU6IGJvdW5kcyB3aWxsIGJlIGNvbnNlcnZhdGl2ZSwgYnV0IG5vdCBwcmVjaXNlIGZvciBub24taGFpcmxpbmUKQEAgLTEyNyw2ICsxNTQsNyBAQAogfTsKIAogVEVTVChSZXNvbHZlZFJlbmRlclN0YXRlLCBjb25zdHJ1Y3RfZXhwYW5kRm9yU3Ryb2tlKSB7CisgICAgTGluZWFyQWxsb2NhdG9yIGFsbG9jYXRvcjsKICAgICAvLyBMb29wIG92ZXIgdGFibGUgb2YgdGVzdCBjYXNlcyBhbmQgdmVyaWZ5IGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2Ygc3Ryb2tlIHdpZHRoIGFuZCB0cmFuc2Zvcm0KICAgICBmb3IgKGF1dG8mJiB0ZXN0Q2FzZSA6IHNTdHJva2VUZXN0Q2FzZXMpIHsKICAgICAgICAgU2tQYWludCBzdHJva2VkUGFpbnQ7CkBAIC0xMzQsNTggKzE2Miw2NCBAQAogICAgICAgICBzdHJva2VkUGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZV9TdHlsZSk7CiAgICAgICAgIHN0cm9rZWRQYWludC5zZXRTdHJva2VXaWR0aCh0ZXN0Q2FzZS5zdHJva2VXaWR0aCk7CiAKKyAgICAgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDIwMCwgMjAwKSk7CiAgICAgICAgIFJlY3RPcCByZWNvcmRlZE9wKFJlY3QoNTAsIDUwLCAxNTAsIDE1MCksCi0gICAgICAgICAgICAgICAgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgyMDAsIDIwMCksICZzdHJva2VkUGFpbnQpOworICAgICAgICAgICAgICAgIE1hdHJpeDQ6OmlkZW50aXR5KCksICZjbGlwLCAmc3Ryb2tlZFBhaW50KTsKIAogICAgICAgICBNYXRyaXg0IHNuYXBzaG90TWF0cml4OwogICAgICAgICBzbmFwc2hvdE1hdHJpeC5sb2FkU2NhbGUodGVzdENhc2Uuc2NhbGUsIHRlc3RDYXNlLnNjYWxlLCAxKTsKICAgICAgICAgYXV0byBwYXJlbnRTbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KHNuYXBzaG90TWF0cml4LCBSZWN0KDIwMCwgMjAwKSk7CiAKLSAgICAgICAgUmVzb2x2ZWRSZW5kZXJTdGF0ZSBzdGF0ZSgqcGFyZW50U25hcHNob3QsIHJlY29yZGVkT3AsIHRydWUpOworICAgICAgICBSZXNvbHZlZFJlbmRlclN0YXRlIHN0YXRlKGFsbG9jYXRvciwgKnBhcmVudFNuYXBzaG90LCByZWNvcmRlZE9wLCB0cnVlKTsKICAgICAgICAgdGVzdENhc2UudmFsaWRhdG9yKHN0YXRlKTsKICAgICB9CiB9CiAKIFRFU1QoQmFrZWRPcFN0YXRlLCB0cnlDb25zdHJ1Y3QpIHsKLSAgICBMaW5lYXJBbGxvY2F0b3IgYWxsb2NhdG9yOwotCiAgICAgTWF0cml4NCB0cmFuc2xhdGUxMDB4MDsKICAgICB0cmFuc2xhdGUxMDB4MC5sb2FkVHJhbnNsYXRlKDEwMCwgMCwgMCk7CiAKICAgICBTa1BhaW50IHBhaW50OwotICAgIHsKLSAgICAgICAgUmVjdE9wIHJlamVjdE9wKFJlY3QoMzAsIDQwLCAxMDAsIDIwMCksIHRyYW5zbGF0ZTEwMHgwLCBSZWN0KDEwMCwgMjAwKSwgJnBhaW50KTsKLSAgICAgICAgYXV0byBzbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMTAwLCAyMDApKTsKLSAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlDb25zdHJ1Y3QoYWxsb2NhdG9yLCAqc25hcHNob3QsIHJlamVjdE9wKTsKKyAgICBDbGlwUmVjdCBjbGlwKFJlY3QoMTAwLCAyMDApKTsKIAotICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYmFrZWRTdGF0ZSk7IC8vIHJlamVjdGVkIGJ5IGNsaXAsIHNvIG5vdCBjb25zdHJ1Y3RlZAotICAgICAgICBFWFBFQ1RfR1QoOHUsIGFsbG9jYXRvci51c2VkU2l6ZSgpKTsgLy8gbm8gc2lnbmlmaWNhbnQgYWxsb2NhdGlvbiBzcGFjZSB1c2VkIGZvciByZWplY3RlZCBvcAotICAgIH0KLSAgICB7Ci0gICAgICAgIFJlY3RPcCBzdWNjZXNzT3AoUmVjdCgzMCwgNDAsIDEwMCwgMjAwKSwgTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCksICZwYWludCk7Ci0gICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDEwMCwgMjAwKSk7Ci0gICAgICAgIEJha2VkT3BTdGF0ZSogYmFrZWRTdGF0ZSA9IEJha2VkT3BTdGF0ZTo6dHJ5Q29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCBzdWNjZXNzT3ApOworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgUmVjdE9wIHN1Y2Nlc3NPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCBNYXRyaXg0OjppZGVudGl0eSgpLCAmY2xpcCwgJnBhaW50KTsKKyAgICBhdXRvIHNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QoTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCkpOworICAgIEVYUEVDVF9ORShudWxscHRyLCBCYWtlZE9wU3RhdGU6OnRyeUNvbnN0cnVjdChhbGxvY2F0b3IsICpzbmFwc2hvdCwgc3VjY2Vzc09wKSkKKyAgICAgICAgICAgIDw8ICJzdWNjZXNzT3AgTk9UIHJlamVjdGVkIGJ5IGNsaXAsIHNvIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCI7CisgICAgc2l6ZV90IHN1Y2Nlc3NBbGxvY1NpemUgPSBhbGxvY2F0b3IudXNlZFNpemUoKTsKKyAgICBFWFBFQ1RfTEUoNjR1LCBzdWNjZXNzQWxsb2NTaXplKSA8PCAicmVsYXRpdmVseSBsYXJnZSBhbGxvYyBmb3Igbm9uLXJlamVjdGVkIG9wIjsKIAotICAgICAgICBFWFBFQ1RfTkUobnVsbHB0ciwgYmFrZWRTdGF0ZSk7IC8vIE5PVCByZWplY3RlZCBieSBjbGlwLCBzbyB3aWxsIGJlIGNvbnN0cnVjdGVkCi0gICAgICAgIEVYUEVDVF9MRSg2NHUsIGFsbG9jYXRvci51c2VkU2l6ZSgpKTsgLy8gcmVsYXRpdmVseSBsYXJnZSBhbGxvYyBmb3Igbm9uLXJlamVjdGVkIG9wCi0gICAgfQorICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDMwLCA0MCwgMTAwLCAyMDApLCB0cmFuc2xhdGUxMDB4MCwgJmNsaXAsICZwYWludCk7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIEJha2VkT3BTdGF0ZTo6dHJ5Q29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCByZWplY3RPcCkpCisgICAgICAgICAgICA8PCAicmVqZWN0T3AgcmVqZWN0ZWQgYnkgY2xpcCwgc28gc2hvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZCI7CisKKyAgICAvLyBOT1RFOiB0aGlzIHJlbGllcyBvbiB0aGUgY2xpcCBoYXZpbmcgYWxyZWFkeSBiZWVuIHNlcmlhbGl6ZWQgYnkgdGhlIG9wIGFib3ZlCisgICAgRVhQRUNUX0VRKHN1Y2Nlc3NBbGxvY1NpemUsIGFsbG9jYXRvci51c2VkU2l6ZSgpKSA8PCAibm8gZXh0cmEgYWxsb2NhdGlvbiB1c2VkIGZvciByZWplY3RlZCBvcCI7CiB9CiAKIFRFU1QoQmFrZWRPcFN0YXRlLCB0cnlTaGFkb3dPcENvbnN0cnVjdCkgeworICAgIE1hdHJpeDQgdHJhbnNsYXRlMTB4MjA7CisgICAgdHJhbnNsYXRlMTB4MjAubG9hZFRyYW5zbGF0ZSgxMCwgMjAsIDApOworCiAgICAgTGluZWFyQWxsb2NhdG9yIGFsbG9jYXRvcjsKICAgICB7Ci0gICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdChNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KCkpOyAvLyBOb3RlOiBlbXB0eSBjbGlwCisgICAgICAgIGF1dG8gc25hcHNob3QgPSBUZXN0VXRpbHM6Om1ha2VTbmFwc2hvdCh0cmFuc2xhdGUxMHgyMCwgUmVjdCgpKTsgLy8gTm90ZTogZW1wdHkgY2xpcAogICAgICAgICBCYWtlZE9wU3RhdGUqIGJha2VkU3RhdGUgPSBCYWtlZE9wU3RhdGU6OnRyeVNoYWRvd09wQ29uc3RydWN0KGFsbG9jYXRvciwgKnNuYXBzaG90LCAoU2hhZG93T3AqKTB4MTIzNCk7CiAKLSAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIGJha2VkU3RhdGUpOyAvLyByZWplY3RlZCBieSBjbGlwLCBzbyBub3QgY29uc3RydWN0ZWQKLSAgICAgICAgRVhQRUNUX0dUKDh1LCBhbGxvY2F0b3IudXNlZFNpemUoKSk7IC8vIG5vIHNpZ25pZmljYW50IGFsbG9jYXRpb24gc3BhY2UgdXNlZCBmb3IgcmVqZWN0ZWQgb3AKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIGJha2VkU3RhdGUpIDw8ICJvcCBzaG91bGQgYmUgcmVqZWN0ZWQgYnkgY2xpcCwgc28gbm90IGNvbnN0cnVjdGVkIjsKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBhbGxvY2F0b3IudXNlZFNpemUoKSkgPDwgIm5vIHNlcmlhbGl6YXRpb24sIGV2ZW4gZm9yIGNsaXAsIgorICAgICAgICAgICAgICAgICJzaW5jZSBvcCBpcyBxdWljayByZWplY3RlZCBiYXNlZCBvbiBzbmFwc2hvdCBjbGlwIjsKICAgICB9CiAgICAgewotICAgICAgICBhdXRvIHNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QoTWF0cml4NDo6aWRlbnRpdHkoKSwgUmVjdCgxMDAsIDIwMCkpOworICAgICAgICBhdXRvIHNuYXBzaG90ID0gVGVzdFV0aWxzOjptYWtlU25hcHNob3QodHJhbnNsYXRlMTB4MjAsIFJlY3QoMTAwLCAyMDApKTsKICAgICAgICAgQmFrZWRPcFN0YXRlKiBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlTaGFkb3dPcENvbnN0cnVjdChhbGxvY2F0b3IsICpzbmFwc2hvdCwgKFNoYWRvd09wKikweDEyMzQpOwogCi0gICAgICAgIEFTU0VSVF9ORShudWxscHRyLCBiYWtlZFN0YXRlKTsgLy8gTk9UIHJlamVjdGVkIGJ5IGNsaXAsIHNvIHdpbGwgYmUgY29uc3RydWN0ZWQKLSAgICAgICAgRVhQRUNUX0xFKDY0dSwgYWxsb2NhdG9yLnVzZWRTaXplKCkpOyAvLyByZWxhdGl2ZWx5IGxhcmdlIGFsbG9jIGZvciBub24tcmVqZWN0ZWQgb3AKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIGJha2VkU3RhdGUpIDw8ICJOT1QgcmVqZWN0ZWQgYnkgY2xpcCwgc28gb3Agc2hvdWxkIGJlIGNvbnN0cnVjdGVkIjsKKyAgICAgICAgRVhQRUNUX0xFKDY0dSwgYWxsb2NhdG9yLnVzZWRTaXplKCkpIDw8ICJyZWxhdGl2ZWx5IGxhcmdlIGFsbG9jIGZvciBub24tcmVqZWN0ZWQgb3AiOworCisgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKHRyYW5zbGF0ZTEweDIwLCBiYWtlZFN0YXRlLT5jb21wdXRlZFN0YXRlLnRyYW5zZm9ybSk7CisgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMjAwKSwgYmFrZWRTdGF0ZS0+Y29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKICAgICB9CiB9CiAKQEAgLTE5Niw3ICsyMzAsOCBAQAogICAgICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprU3Ryb2tlQW5kRmlsbF9TdHlsZSk7CiAgICAgICAgIHBhaW50LnNldFN0cm9rZVdpZHRoKDAuMGYpOwotICAgICAgICBSZWN0T3AgcmVqZWN0T3AoUmVjdCgwLCAwLCAxMDAsIDIwMCksIE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMTAwLCAyMDApLCAmcGFpbnQpOworICAgICAgICBDbGlwUmVjdCBjbGlwKFJlY3QoMTAwLCAyMDApKTsKKyAgICAgICAgUmVjdE9wIHJlamVjdE9wKFJlY3QoMTAwLCAyMDApLCBNYXRyaXg0OjppZGVudGl0eSgpLCAmY2xpcCwgJnBhaW50KTsKICAgICAgICAgYXV0byBzbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoKSk7IC8vIE5vdGU6IGVtcHR5IGNsaXAKICAgICAgICAgYXV0byBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlTdHJva2VhYmxlT3BDb25zdHJ1Y3QoYWxsb2NhdG9yLCAqc25hcHNob3QsIHJlamVjdE9wLAogICAgICAgICAgICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OlN0eWxlRGVmaW5lZCk7CkBAIC0yMDksNyArMjQ0LDggQEAKICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a1N0cm9rZUFuZEZpbGxfU3R5bGUpOwogICAgICAgICBwYWludC5zZXRTdHJva2VXaWR0aCgxMC4wZik7Ci0gICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDUwLCA1MCwgMTUwLCAxNTApLCBNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDIwMCwgMjAwKSwgJnBhaW50KTsKKyAgICAgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDIwMCwgMjAwKSk7CisgICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDUwLCA1MCwgMTUwLCAxNTApLCBNYXRyaXg0OjppZGVudGl0eSgpLCAmY2xpcCwgJnBhaW50KTsKICAgICAgICAgYXV0byBzbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMjAwLCAyMDApKTsKICAgICAgICAgYXV0byBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlTdHJva2VhYmxlT3BDb25zdHJ1Y3QoYWxsb2NhdG9yLCAqc25hcHNob3QsIHJlamVjdE9wLAogICAgICAgICAgICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OlN0eWxlRGVmaW5lZCk7CkBAIC0yMjMsNyArMjU5LDggQEAKICAgICAgICAgU2tQYWludCBwYWludDsKICAgICAgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwogICAgICAgICBwYWludC5zZXRTdHJva2VXaWR0aCgxMC4wZik7Ci0gICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDUwLCA1MCwgMTUwLCAxNTApLCBNYXRyaXg0OjppZGVudGl0eSgpLCBSZWN0KDIwMCwgMjAwKSwgJnBhaW50KTsKKyAgICAgICAgQ2xpcFJlY3QgY2xpcChSZWN0KDIwMCwgMjAwKSk7CisgICAgICAgIFJlY3RPcCByZWplY3RPcChSZWN0KDUwLCA1MCwgMTUwLCAxNTApLCBNYXRyaXg0OjppZGVudGl0eSgpLCAmY2xpcCwgJnBhaW50KTsKICAgICAgICAgYXV0byBzbmFwc2hvdCA9IFRlc3RVdGlsczo6bWFrZVNuYXBzaG90KE1hdHJpeDQ6OmlkZW50aXR5KCksIFJlY3QoMjAwLCAyMDApKTsKICAgICAgICAgYXV0byBiYWtlZFN0YXRlID0gQmFrZWRPcFN0YXRlOjp0cnlTdHJva2VhYmxlT3BDb25zdHJ1Y3QoYWxsb2NhdG9yLCAqc25hcHNob3QsIHJlamVjdE9wLAogICAgICAgICAgICAgICAgIEJha2VkT3BTdGF0ZTo6U3Ryb2tlQmVoYXZpb3I6OkZvcmNlZCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9DYW52YXNTdGF0ZVRlc3RzLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0NhbnZhc1N0YXRlVGVzdHMuY3BwCmluZGV4IGRmYmY2ZDMuLjRkZjI2ODcgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy91bml0L0NhbnZhc1N0YXRlVGVzdHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0NhbnZhc1N0YXRlVGVzdHMuY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgc2ltcGxlVHJhbnNsYXRlLmxvYWRUcmFuc2xhdGUoMTAsIDIwLCAwKTsKICAgICBzdGF0ZS5zZXRNYXRyaXgoc2ltcGxlVHJhbnNsYXRlKTsKIAotICAgIEFTU0VSVF9FUShzdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksIFJlY3QoMCwgMCwgMjAwLCAyMDApKTsKKyAgICBBU1NFUlRfRVEoc3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCBSZWN0KDIwMCwgMjAwKSk7CiAgICAgQVNTRVJUX0VRKHN0YXRlLmdldExvY2FsQ2xpcEJvdW5kcygpLCBSZWN0KC0xMCwgLTIwLCAxOTAsIDE4MCkpOwogICAgIEVYUEVDVF9UUlVFKGFwcHJveEVxdWFsKCpzdGF0ZS5jdXJyZW50VHJhbnNmb3JtKCksIHNpbXBsZVRyYW5zbGF0ZSkpOwogICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNsaXBJc1NpbXBsZSgpKTsKQEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgICAgIDAsIDAsIDIwMCwgMjAwLCBWZWN0b3IzKCkpOwogCiAgICAgc3RhdGUuY2xpcFJlY3QoMCwgMCwgMTAwLCAxMDAsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKLSAgICBBU1NFUlRfRVEoc3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCBSZWN0KDAsIDAsIDEwMCwgMTAwKSk7CisgICAgQVNTRVJUX0VRKHN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgUmVjdCgxMDAsIDEwMCkpOwogCiAgICAgc3RhdGUuY2xpcFJlY3QoMTAsIDEwLCAyMDAsIDIwMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOwogICAgIEFTU0VSVF9FUShzdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksIFJlY3QoMTAsIDEwLCAxMDAsIDEwMCkpOwpAQCAtMTIyLDEwICsxMjIsMTAgQEAKICAgICBzdGF0ZS5zYXZlKFNrQ2FudmFzOjprQ2xpcF9TYXZlRmxhZyk7CiAgICAgewogICAgICAgICBzdGF0ZS5jbGlwUmVjdCgwLCAwLCAxMCwgMTAsIFNrUmVnaW9uOjprSW50ZXJzZWN0X09wKTsKLSAgICAgICAgQVNTRVJUX0VRKHN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgUmVjdCgwLCAwLCAxMCwgMTApKTsKKyAgICAgICAgQVNTRVJUX0VRKHN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgUmVjdCgxMCwgMTApKTsKICAgICB9CiAgICAgc3RhdGUucmVzdG9yZSgpOwotICAgIEFTU0VSVF9FUShzdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksIFJlY3QoMCwgMCwgMjAwLCAyMDApKTsgLy8gdmVyaWZ5IHJlc3RvcmUKKyAgICBBU1NFUlRfRVEoc3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCBSZWN0KDIwMCwgMjAwKSk7IC8vIHZlcmlmeSByZXN0b3JlCiAKICAgICBNYXRyaXg0IHNpbXBsZVRyYW5zbGF0ZTsKICAgICBzaW1wbGVUcmFuc2xhdGUubG9hZFRyYW5zbGF0ZSgxMCwgMTAsIDApOwpAQCAtMTQ2LDEwICsxNDYsMTAgQEAKICAgICBzdGF0ZS5zYXZlKFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnKTsgLy8gTk9URTogY2xpcCBub3Qgc2F2ZWQKICAgICB7CiAgICAgICAgIHN0YXRlLmNsaXBSZWN0KDAsIDAsIDEwLCAxMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOwotICAgICAgICBBU1NFUlRfRVEoc3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCBSZWN0KDAsIDAsIDEwLCAxMCkpOworICAgICAgICBBU1NFUlRfRVEoc3RhdGUuZ2V0UmVuZGVyVGFyZ2V0Q2xpcEJvdW5kcygpLCBSZWN0KDEwLCAxMCkpOwogICAgIH0KICAgICBzdGF0ZS5yZXN0b3JlKCk7Ci0gICAgQVNTRVJUX0VRKHN0YXRlLmdldFJlbmRlclRhcmdldENsaXBCb3VuZHMoKSwgUmVjdCgwLCAwLCAxMCwgMTApKTsgLy8gdmVyaWZ5IG5vdCByZXN0b3JlZAorICAgIEFTU0VSVF9FUShzdGF0ZS5nZXRSZW5kZXJUYXJnZXRDbGlwQm91bmRzKCksIFJlY3QoMTAsIDEwKSk7IC8vIHZlcmlmeSBub3QgcmVzdG9yZWQKIAogICAgIE1hdHJpeDQgc2ltcGxlVHJhbnNsYXRlOwogICAgIHNpbXBsZVRyYW5zbGF0ZS5sb2FkVHJhbnNsYXRlKDEwLCAxMCwgMCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9DbGlwQXJlYVRlc3RzLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0NsaXBBcmVhVGVzdHMuY3BwCmluZGV4IGM0ZDMwNWUuLjRjYWU3MzcgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy91bml0L0NsaXBBcmVhVGVzdHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0NsaXBBcmVhVGVzdHMuY3BwCkBAIC0xMTksNSArMTE5LDEyMiBAQAogICAgIEVYUEVDVF9FUShleHBlY3RlZCwgYXJlYS5nZXRDbGlwUmVjdCgpKTsKIH0KIAorVEVTVChDbGlwQXJlYSwgc2VyaWFsaXplQ2xpcCkgeworICAgIENsaXBBcmVhIGFyZWEoY3JlYXRlQ2xpcEFyZWEoKSk7CisgICAgTGluZWFyQWxsb2NhdG9yIGFsbG9jYXRvcjsKKworICAgIC8vIHVuc2V0IGNsaXAKKyAgICBFWFBFQ1RfRVEobnVsbHB0ciwgYXJlYS5zZXJpYWxpemVDbGlwKGFsbG9jYXRvcikpOworCisgICAgLy8gcmVjdCBjbGlwCisgICAgYXJlYS5zZXRDbGlwKDAsIDAsIDIwMCwgMjAwKTsKKyAgICB7CisgICAgICAgIGF1dG8gc2VyaWFsaXplZENsaXAgPSBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKTsKKyAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIHNlcmlhbGl6ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWN0YW5nbGUsIHNlcmlhbGl6ZWRDbGlwLT5tb2RlKTsKKyAgICAgICAgYXV0byBjbGlwUmVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlY3QqPihzZXJpYWxpemVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUShSZWN0KDIwMCwgMjAwKSwgY2xpcFJlY3QtPnJlY3QpOworICAgICAgICBFWFBFQ1RfRVEoc2VyaWFsaXplZENsaXAsIGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpKQorICAgICAgICAgICAgICAgIDw8ICJSZXF1ZXJ5IG9mIGNsaXAgb24gdW5tb2RpZmllZCBDbGlwQXJlYSBtdXN0IHJldHVybiBzYW1lIHBvaW50ZXIuIjsKKyAgICB9CisKKyAgICAvLyByZWN0IGxpc3QKKyAgICBNYXRyaXg0IHJvdGF0ZTsKKyAgICByb3RhdGUubG9hZFJvdGF0ZSgyLjBmKTsKKyAgICBhcmVhLmNsaXBSZWN0V2l0aFRyYW5zZm9ybShSZWN0KDIwMCwgMjAwKSwgJnJvdGF0ZSwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgIHsKKyAgICAgICAgYXV0byBzZXJpYWxpemVkQ2xpcCA9IGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpOworICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgc2VyaWFsaXplZENsaXApOworICAgICAgICBBU1NFUlRfRVEoQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QsIHNlcmlhbGl6ZWRDbGlwLT5tb2RlKTsKKyAgICAgICAgYXV0byBjbGlwUmVjdExpc3QgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWN0TGlzdCo+KHNlcmlhbGl6ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKDIsIGNsaXBSZWN0TGlzdC0+cmVjdExpc3QuZ2V0VHJhbnNmb3JtZWRSZWN0YW5nbGVzQ291bnQoKSk7CisgICAgICAgIEVYUEVDVF9FUShzZXJpYWxpemVkQ2xpcCwgYXJlYS5zZXJpYWxpemVDbGlwKGFsbG9jYXRvcikpCisgICAgICAgICAgICAgICAgPDwgIlJlcXVlcnkgb2YgY2xpcCBvbiB1bm1vZGlmaWVkIENsaXBBcmVhIG11c3QgcmV0dXJuIHNhbWUgcG9pbnRlci4iOworICAgIH0KKworICAgIC8vIHJlZ2lvbgorICAgIFNrUGF0aCBjaXJjbGVQYXRoOworICAgIGNpcmNsZVBhdGguYWRkQ2lyY2xlKDEwMCwgMTAwLCAxMDApOworICAgIGFyZWEuY2xpcFBhdGhXaXRoVHJhbnNmb3JtKGNpcmNsZVBhdGgsICZNYXRyaXg0OjppZGVudGl0eSgpLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOworICAgIHsKKyAgICAgICAgYXV0byBzZXJpYWxpemVkQ2xpcCA9IGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpOworICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgc2VyaWFsaXplZENsaXApOworICAgICAgICBBU1NFUlRfRVEoQ2xpcE1vZGU6OlJlZ2lvbiwgc2VyaWFsaXplZENsaXAtPm1vZGUpOworICAgICAgICBhdXRvIGNsaXBSZWdpb24gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENsaXBSZWdpb24qPihzZXJpYWxpemVkQ2xpcCk7CisgICAgICAgIEFTU0VSVF9FUShTa0lSZWN0OjpNYWtlV0goMjAwLCAyMDApLCBjbGlwUmVnaW9uLT5yZWdpb24uZ2V0Qm91bmRzKCkpCisgICAgICAgICAgICAgICAgPDwgIkNsaXAgcmVnaW9uIHNob3VsZCBiZSAyMDB4MjAwIjsKKyAgICAgICAgRVhQRUNUX0VRKHNlcmlhbGl6ZWRDbGlwLCBhcmVhLnNlcmlhbGl6ZUNsaXAoYWxsb2NhdG9yKSkKKyAgICAgICAgICAgICAgICA8PCAiUmVxdWVyeSBvZiBjbGlwIG9uIHVubW9kaWZpZWQgQ2xpcEFyZWEgbXVzdCByZXR1cm4gc2FtZSBwb2ludGVyLiI7CisgICAgfQogfQorCitURVNUKENsaXBBcmVhLCBzZXJpYWxpemVJbnRlcnNlY3RlZENsaXApIHsKKyAgICBDbGlwQXJlYSBhcmVhKGNyZWF0ZUNsaXBBcmVhKCkpOworICAgIExpbmVhckFsbG9jYXRvciBhbGxvY2F0b3I7CisKKyAgICAvLyBzaW1wbGUgc3RhdGU7CisgICAgRVhQRUNUX0VRKG51bGxwdHIsIGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgbnVsbHB0ciwgTWF0cml4NDo6aWRlbnRpdHkoKSkpOworICAgIGFyZWEuc2V0Q2xpcCgwLCAwLCAyMDAsIDIwMCk7CisgICAgeworICAgICAgICBhdXRvIG9yaWdSZWN0Q2xpcCA9IGFyZWEuc2VyaWFsaXplQ2xpcChhbGxvY2F0b3IpOworICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgb3JpZ1JlY3RDbGlwKTsKKyAgICAgICAgRVhQRUNUX0VRKG9yaWdSZWN0Q2xpcCwgYXJlYS5zZXJpYWxpemVJbnRlcnNlY3RlZENsaXAoYWxsb2NhdG9yLCBudWxscHRyLCBNYXRyaXg0OjppZGVudGl0eSgpKSk7CisgICAgfQorCisgICAgLy8gcmVjdAorICAgIHsKKyAgICAgICAgQ2xpcFJlY3QgcmVjb3JkZWRDbGlwKFJlY3QoMTAwLCAxMDApKTsKKyAgICAgICAgTWF0cml4NCB0cmFuc2xhdGVTY2FsZTsKKyAgICAgICAgdHJhbnNsYXRlU2NhbGUubG9hZFRyYW5zbGF0ZSgxMDAsIDEwMCwgMCk7CisgICAgICAgIHRyYW5zbGF0ZVNjYWxlLnNjYWxlKDIsIDMsIDEpOworICAgICAgICBhdXRvIHJlc29sdmVkQ2xpcCA9IGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgJnJlY29yZGVkQ2xpcCwgdHJhbnNsYXRlU2NhbGUpOworICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgcmVzb2x2ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWN0YW5nbGUsIHJlc29sdmVkQ2xpcC0+bW9kZSk7CisgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMTAwLCAyMDAsIDIwMCksCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdCo+KHJlc29sdmVkQ2xpcCktPnJlY3QpOworCisgICAgICAgIEVYUEVDVF9FUShyZXNvbHZlZENsaXAsIGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgJnJlY29yZGVkQ2xpcCwgdHJhbnNsYXRlU2NhbGUpKQorICAgICAgICAgICAgICAgIDw8ICJNdXN0IHJldHVybiBwcmV2aW91cyBzZXJpYWxpemF0aW9uLCBzaW5jZSBpbnB1dCBpcyBzYW1lIjsKKworICAgICAgICBDbGlwUmVjdCByZWNvcmRlZENsaXAyKFJlY3QoMTAwLCAxMDApKTsKKyAgICAgICAgRVhQRUNUX05FKHJlc29sdmVkQ2xpcCwgYXJlYS5zZXJpYWxpemVJbnRlcnNlY3RlZENsaXAoYWxsb2NhdG9yLCAmcmVjb3JkZWRDbGlwMiwgdHJhbnNsYXRlU2NhbGUpKQorICAgICAgICAgICAgICAgIDw8ICJTaG91bGRuJ3QgcmV0dXJuIHByZXZpb3VzIHNlcmlhbGl6YXRpb24sIHNpbmNlIG1hdHJpeCBsb2NhdGlvbiBpcyBkaWZmZXJlbnQiOworICAgIH0KKworICAgIC8vIHJlY3QgbGlzdAorICAgIE1hdHJpeDQgcm90YXRlOworICAgIHJvdGF0ZS5sb2FkUm90YXRlKDIuMGYpOworICAgIGFyZWEuY2xpcFJlY3RXaXRoVHJhbnNmb3JtKFJlY3QoMjAwLCAyMDApLCAmcm90YXRlLCBTa1JlZ2lvbjo6a0ludGVyc2VjdF9PcCk7CisgICAgeworICAgICAgICBDbGlwUmVjdCByZWNvcmRlZENsaXAoUmVjdCgxMDAsIDEwMCkpOworICAgICAgICBhdXRvIHJlc29sdmVkQ2xpcCA9IGFyZWEuc2VyaWFsaXplSW50ZXJzZWN0ZWRDbGlwKGFsbG9jYXRvciwgJnJlY29yZGVkQ2xpcCwgTWF0cml4NDo6aWRlbnRpdHkoKSk7CisgICAgICAgIEFTU0VSVF9ORShudWxscHRyLCByZXNvbHZlZENsaXApOworICAgICAgICBBU1NFUlRfRVEoQ2xpcE1vZGU6OlJlY3RhbmdsZUxpc3QsIHJlc29sdmVkQ2xpcC0+bW9kZSk7CisgICAgICAgIGF1dG8gY2xpcFJlY3RMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdExpc3QqPihyZXNvbHZlZENsaXApOworICAgICAgICBFWFBFQ1RfRVEoMiwgY2xpcFJlY3RMaXN0LT5yZWN0TGlzdC5nZXRUcmFuc2Zvcm1lZFJlY3RhbmdsZXNDb3VudCgpKTsKKyAgICB9CisKKyAgICAvLyByZWdpb24KKyAgICBTa1BhdGggY2lyY2xlUGF0aDsKKyAgICBjaXJjbGVQYXRoLmFkZENpcmNsZSgxMDAsIDEwMCwgMTAwKTsKKyAgICBhcmVhLmNsaXBQYXRoV2l0aFRyYW5zZm9ybShjaXJjbGVQYXRoLCAmTWF0cml4NDo6aWRlbnRpdHkoKSwgU2tSZWdpb246OmtSZXBsYWNlX09wKTsKKyAgICB7CisgICAgICAgIFNrUGF0aCBvdmFsUGF0aDsKKyAgICAgICAgb3ZhbFBhdGguYWRkT3ZhbChTa1JlY3Q6Ok1ha2VMVFJCKDUwLCAwLCAxNTAsIDIwMCkpOworCisgICAgICAgIENsaXBSZWdpb24gcmVjb3JkZWRDbGlwOworICAgICAgICByZWNvcmRlZENsaXAucmVnaW9uLnNldFBhdGgob3ZhbFBhdGgsIFNrUmVnaW9uKFNrSVJlY3Q6Ok1ha2VXSCgyMDAsIDIwMCkpKTsKKworICAgICAgICBNYXRyaXg0IHRyYW5zbGF0ZTEweDIwOworICAgICAgICB0cmFuc2xhdGUxMHgyMC5sb2FkVHJhbnNsYXRlKDEwLCAyMCwgMCk7CisgICAgICAgIGF1dG8gcmVzb2x2ZWRDbGlwID0gYXJlYS5zZXJpYWxpemVJbnRlcnNlY3RlZENsaXAoYWxsb2NhdG9yLCAmcmVjb3JkZWRDbGlwLAorICAgICAgICAgICAgICAgIHRyYW5zbGF0ZTEweDIwKTsgLy8gTm90ZTogb25seSB0cmFuc2xhdGUgZm9yIG5vdywgb3RoZXJzIG5vdCBoYW5kbGVkIGNvcnJlY3RseQorICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgcmVzb2x2ZWRDbGlwKTsKKyAgICAgICAgQVNTRVJUX0VRKENsaXBNb2RlOjpSZWdpb24sIHJlc29sdmVkQ2xpcC0+bW9kZSk7CisgICAgICAgIGF1dG8gY2xpcFJlZ2lvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ2xpcFJlZ2lvbio+KHJlc29sdmVkQ2xpcCk7CisgICAgICAgIEVYUEVDVF9FUShTa0lSZWN0OjpNYWtlTFRSQig2MCwgMjAsIDE2MCwgMjAwKSwgY2xpcFJlZ2lvbi0+cmVnaW9uLmdldEJvdW5kcygpKTsKKyAgICB9CiB9CisKK30gLy8gbmFtZXNwYWNlIHVpcmVuZGVyZXIKK30gLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy91bml0L09wUmVvcmRlcmVyVGVzdHMuY3BwIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvRnJhbWVCdWlsZGVyVGVzdHMuY3BwCnNpbWlsYXJpdHkgaW5kZXggNzAlCnJlbmFtZSBmcm9tIGxpYnMvaHd1aS90ZXN0cy91bml0L09wUmVvcmRlcmVyVGVzdHMuY3BwCnJlbmFtZSB0byBsaWJzL2h3dWkvdGVzdHMvdW5pdC9GcmFtZUJ1aWxkZXJUZXN0cy5jcHAKaW5kZXggNWVhYzQ5OC4uYmRlZDUwYSAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvT3BSZW9yZGVyZXJUZXN0cy5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvRnJhbWVCdWlsZGVyVGVzdHMuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTcsOCArMTcsOSBAQAogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAKICNpbmNsdWRlIDxCYWtlZE9wU3RhdGUuaD4KKyNpbmNsdWRlIDxEZWZlcnJlZExheWVyVXBkYXRlci5oPgorI2luY2x1ZGUgPEZyYW1lQnVpbGRlci5oPgogI2luY2x1ZGUgPExheWVyVXBkYXRlUXVldWUuaD4KLSNpbmNsdWRlIDxPcFJlb3JkZXJlci5oPgogI2luY2x1ZGUgPFJlY29yZGVkT3AuaD4KICNpbmNsdWRlIDxSZWNvcmRpbmdDYW52YXMuaD4KICNpbmNsdWRlIDx0ZXN0cy9jb21tb24vVGVzdFV0aWxzLmg+CkBAIC02MywxNCArNjQsMTQgQEAKICAgICAgICAgQUREX0ZBSUxVUkUoKSA8PCAiTGF5ZXIgdXBkYXRlcyBub3QgZXhwZWN0ZWQgaW4gdGhpcyB0ZXN0IjsKICAgICB9CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RnJhbWUodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIHt9Ci0gICAgdmlydHVhbCB2b2lkIGVuZEZyYW1lKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIHt9CiAKICAgICAvLyBkZWZpbmUgdmlydHVhbCBkZWZhdWx0cyBmb3Igc2luZ2xlIGRyYXcgbWV0aG9kcwogI2RlZmluZSBYKFR5cGUpIFwKICAgICB2aXJ0dWFsIHZvaWQgb24jI1R5cGUoY29uc3QgVHlwZSYsIGNvbnN0IEJha2VkT3BTdGF0ZSYpIHsgXAogICAgICAgICBBRERfRkFJTFVSRSgpIDw8ICNUeXBlICIgbm90IGV4cGVjdGVkIGluIHRoaXMgdGVzdCI7IFwKICAgICB9Ci0gICAgTUFQX09QUyhYKQorICAgIE1BUF9SRU5ERVJBQkxFX09QUyhYKQogI3VuZGVmIFgKIAogICAgIC8vIGRlZmluZSB2aXJ0dWFsIGRlZmF1bHRzIGZvciBtZXJnZWQgZHJhdyBtZXRob2RzCkBAIC03OCw3ICs3OSw3IEBACiAgICAgdmlydHVhbCB2b2lkIG9uTWVyZ2VkIyNUeXBlIyNzKGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAogICAgICAgICBBRERfRkFJTFVSRSgpIDw8ICJNZXJnZWQgIiAjVHlwZSAicyBub3QgZXhwZWN0ZWQgaW4gdGhpcyB0ZXN0IjsgXAogICAgIH0KLSAgICBNQVBfTUVSR0VEX09QUyhYKQorICAgIE1BUF9NRVJHRUFCTEVfT1BTKFgpCiAjdW5kZWYgWAogCiAgICAgaW50IGdldEluZGV4KCkgeyByZXR1cm4gbUluZGV4OyB9CkBAIC05OCw3ICs5OSw3IEBACiAgICAgc3RhdGljIHZvaWQgb24jI1R5cGUoVGVzdFJlbmRlcmVyQmFzZSYgcmVuZGVyZXIsIGNvbnN0IFR5cGUmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSB7IFwKICAgICAgICAgcmVuZGVyZXIub24jI1R5cGUob3AsIHN0YXRlKTsgXAogICAgIH0KLSAgICBNQVBfT1BTKFgpOworICAgIE1BUF9SRU5ERVJBQkxFX09QUyhYKTsKICN1bmRlZiBYCiAKICAgICAvLyBkZWZpbmUgbWVyZ2VkIG9wIG1ldGhvZHMsIHdoaWNoIHJlZGlyZWN0IHRvIFRlc3RSZW5kZXJlckJhc2UKQEAgLTEwNiwxMyArMTA3LDEzIEBACiAgICAgc3RhdGljIHZvaWQgb25NZXJnZWQjI1R5cGUjI3MoVGVzdFJlbmRlcmVyQmFzZSYgcmVuZGVyZXIsIGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIHsgXAogICAgICAgICByZW5kZXJlci5vbk1lcmdlZCMjVHlwZSMjcyhvcExpc3QpOyBcCiAgICAgfQotICAgIE1BUF9NRVJHRURfT1BTKFgpOworICAgIE1BUF9NRVJHRUFCTEVfT1BTKFgpOwogI3VuZGVmIFgKIH07CiAKIGNsYXNzIEZhaWxSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHt9OwogCi1URVNUKE9wUmVvcmRlcmVyLCBzaW1wbGUpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzaW1wbGUpIHsKICAgICBjbGFzcyBTaW1wbGVUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIHN0YXJ0RnJhbWUodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIG92ZXJyaWRlIHsKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICB2b2lkIG9uQml0bWFwT3AoY29uc3QgQml0bWFwT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoMiwgbUluZGV4KyspOwogICAgICAgICB9Ci0gICAgICAgIHZvaWQgZW5kRnJhbWUoKSBvdmVycmlkZSB7CisgICAgICAgIHZvaWQgZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSgzLCBtSW5kZXgrKyk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMTM3LDE0ICsxMzgsMTQgQEAKICAgICAgICAgY2FudmFzLmRyYXdSZWN0KDAsIDAsIDEwMCwgMjAwLCBTa1BhaW50KCkpOwogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiaXRtYXAsIDEwLCAxMCwgbnVsbHB0cik7CiAgICAgfSk7Ci0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMjAwKSwgMTAwLCAyMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgxMDAsIDIwMCksIDEwMCwgMjAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CiAgICAgU2ltcGxlVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSg0LCByZW5kZXJlci5nZXRJbmRleCgpKTsgLy8gMiBvcHMgKyBzdGFydCArIGVuZAogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzaW1wbGVTdHJva2UpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzaW1wbGVTdHJva2UpIHsKICAgICBjbGFzcyBTaW1wbGVTdHJva2VUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIG9uUG9pbnRzT3AoY29uc3QgUG9pbnRzT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CkBAIC0xNjMsMTQgKzE2NCwxNCBAQAogICAgICAgICBzdHJva2VkUGFpbnQuc2V0U3Ryb2tlV2lkdGgoMTApOwogICAgICAgICBjYW52YXMuZHJhd1BvaW50KDUwLCA1MCwgc3Ryb2tlZFBhaW50KTsKICAgICB9KTsKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMTAwLCAyMDApLCAxMDAsIDIwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMjAwKSwgMTAwLCAyMDAsCiAgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKICAgICBTaW1wbGVTdHJva2VUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDEsIHJlbmRlcmVyLmdldEluZGV4KCkpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzaW1wbGVSZWplY3Rpb24pIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzaW1wbGVSZWplY3Rpb24pIHsKICAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMjAwLCAyMDAsCiAgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgUmVjb3JkaW5nQ2FudmFzJiBjYW52YXMpIHsKICAgICAgICAgY2FudmFzLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0NsaXBfU2F2ZUZsYWcpOwpAQCAtMTc4LDE0ICsxNzksMTQgQEAKICAgICAgICAgY2FudmFzLmRyYXdSZWN0KDAsIDAsIDQwMCwgNDAwLCBTa1BhaW50KCkpOwogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAorICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKICAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpLCBzTGlnaHRDZW50ZXIpOwogCiAgICAgRmFpbFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzaW1wbGVCYXRjaGluZykgeworVEVTVChGcmFtZUJ1aWxkZXIsIHNpbXBsZUJhdGNoaW5nKSB7CiAgICAgY29uc3QgaW50IExPT1BTID0gNTsKICAgICBjbGFzcyBTaW1wbGVCYXRjaGluZ1Rlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKICAgICBwdWJsaWM6CkBAIC0yMTMsMTUgKzIxNCw4MyBAQAogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwogCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CiAgICAgU2ltcGxlQmF0Y2hpbmdUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDIgKiBMT09QUywgcmVuZGVyZXIuZ2V0SW5kZXgoKSkKICAgICAgICAgICAgIDw8ICJFeHBlY3QgbnVtYmVyIG9mIG9wcyA9IDIgKiBsb29wIGNvdW50IjsKIH0KIAotVEVTVChPcFJlb3JkZXJlciwgdGV4dFN0cmlrZXRocm91Z2hCYXRjaGluZykgeworVEVTVChGcmFtZUJ1aWxkZXIsIGNsaXBwZWRNZXJnaW5nKSB7CisgICAgY2xhc3MgQ2xpcHBlZE1lcmdpbmdUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICB2b2lkIG9uTWVyZ2VkQml0bWFwT3BzKGNvbnN0IE1lcmdlZEJha2VkT3BMaXN0JiBvcExpc3QpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgpOworICAgICAgICAgICAgbUluZGV4ICs9IG9wTGlzdC5jb3VudDsKKyAgICAgICAgICAgIEVYUEVDVF9FUSg0dSwgb3BMaXN0LmNvdW50KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAxMCwgOTAsIDkwKSwgb3BMaXN0LmNsaXApOworICAgICAgICAgICAgRVhQRUNUX0VRKE9wQ2xpcFNpZGVGbGFnczo6TGVmdCB8IE9wQ2xpcFNpZGVGbGFnczo6VG9wIHwgT3BDbGlwU2lkZUZsYWdzOjpSaWdodCwKKyAgICAgICAgICAgICAgICAgICAgb3BMaXN0LmNsaXBTaWRlRmxhZ3MpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMTAwLCAxMDAsCisgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIFNrQml0bWFwIGJpdG1hcCA9IFRlc3RVdGlsczo6Y3JlYXRlU2tCaXRtYXAoMjAsIDIwKTsKKworICAgICAgICAvLyBsZWZ0IHNpZGUgY2xpcHBlZCAodG8gaW5zZXQgbGVmdCBoYWxmKQorICAgICAgICBjYW52YXMuY2xpcFJlY3QoMTAsIDAsIDUwLCAxMDAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJpdG1hcCwgMCwgNDAsIG51bGxwdHIpOworCisgICAgICAgIC8vIHRvcCBzaWRlIGNsaXBwZWQgKHRvIGluc2V0IHRvcCBoYWxmKQorICAgICAgICBjYW52YXMuY2xpcFJlY3QoMCwgMTAsIDEwMCwgNTAsIFNrUmVnaW9uOjprUmVwbGFjZV9PcCk7CisgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwKGJpdG1hcCwgNDAsIDAsIG51bGxwdHIpOworCisgICAgICAgIC8vIHJpZ2h0IHNpZGUgY2xpcHBlZCAodG8gaW5zZXQgcmlnaHQgaGFsZikKKyAgICAgICAgY2FudmFzLmNsaXBSZWN0KDUwLCAwLCA5MCwgMTAwLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOworICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiaXRtYXAsIDgwLCA0MCwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gYm90dG9tIG5vdCBjbGlwcGVkLCBqdXN0IGFidXR0aW5nIChpbnNldCBib3R0b20gaGFsZikKKyAgICAgICAgY2FudmFzLmNsaXBSZWN0KDAsIDUwLCAxMDAsIDkwLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOworICAgICAgICBjYW52YXMuZHJhd0JpdG1hcChiaXRtYXAsIDQwLCA3MCwgbnVsbHB0cik7CisgICAgfSk7CisKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMTAwKSwgMTAwLCAxMDAsCisgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKKyAgICBDbGlwcGVkTWVyZ2luZ1Rlc3RSZW5kZXJlciByZW5kZXJlcjsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBFWFBFQ1RfRVEoNCwgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7Cit9CisKK1RFU1QoRnJhbWVCdWlsZGVyLCB0ZXh0TWVyZ2luZykgeworICAgIGNsYXNzIFRleHRNZXJnaW5nVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBvbk1lcmdlZFRleHRPcHMoY29uc3QgTWVyZ2VkQmFrZWRPcExpc3QmIG9wTGlzdCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgRVhQRUNUX0VRKDAsIG1JbmRleCk7CisgICAgICAgICAgICBtSW5kZXggKz0gb3BMaXN0LmNvdW50OworICAgICAgICAgICAgRVhQRUNUX0VRKDJ1LCBvcExpc3QuY291bnQpOworICAgICAgICAgICAgRVhQRUNUX0VRKE9wQ2xpcFNpZGVGbGFnczo6VG9wLCBvcExpc3QuY2xpcFNpZGVGbGFncyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoT3BDbGlwU2lkZUZsYWdzOjpUb3AsIG9wTGlzdC5zdGF0ZXNbMF0tPmNvbXB1dGVkU3RhdGUuY2xpcFNpZGVGbGFncyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoT3BDbGlwU2lkZUZsYWdzOjpOb25lLCBvcExpc3Quc3RhdGVzWzFdLT5jb21wdXRlZFN0YXRlLmNsaXBTaWRlRmxhZ3MpOworICAgICAgICB9CisgICAgfTsKKyAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgNDAwLCA0MDAsCisgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgVGVzdENhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOworICAgICAgICBwYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIHBhaW50LnNldFRleHRTaXplKDUwKTsKKyAgICAgICAgVGVzdFV0aWxzOjpkcmF3VGV4dFRvQ2FudmFzKCZjYW52YXMsICJUZXN0IHN0cmluZzEiLCBwYWludCwgMTAwLCAwKTsgLy8gd2lsbCBiZSB0b3AgY2xpcHBlZAorICAgICAgICBUZXN0VXRpbHM6OmRyYXdUZXh0VG9DYW52YXMoJmNhbnZhcywgIlRlc3Qgc3RyaW5nMSIsIHBhaW50LCAxMDAsIDEwMCk7IC8vIG5vdCBjbGlwcGVkCisgICAgfSk7CisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCg0MDAsIDQwMCksIDQwMCwgNDAwLAorICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CisgICAgVGV4dE1lcmdpbmdUZXN0UmVuZGVyZXIgcmVuZGVyZXI7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgRVhQRUNUX0VRKDIsIHJlbmRlcmVyLmdldEluZGV4KCkpIDw8ICJFeHBlY3QgMiBvcHMiOworfQorCitURVNUKEZyYW1lQnVpbGRlciwgdGV4dFN0cmlrZXRocm91Z2gpIHsKICAgICBjb25zdCBpbnQgTE9PUFMgPSA1OwogICAgIGNsYXNzIFRleHRTdHJpa2V0aHJvdWdoVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgewogICAgIHB1YmxpYzoKQEAgLTI0NSwyMSArMzE0LDU0IEBACiAgICAgICAgICAgICBUZXN0VXRpbHM6OmRyYXdUZXh0VG9DYW52YXMoJmNhbnZhcywgInRlc3QgdGV4dCIsIHRleHRQYWludCwgMTAsIDEwMCAqIChpICsgMSkpOwogICAgICAgICB9CiAgICAgfSk7Ci0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwMCksIDIwMCwgMjAwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwMCksIDIwMCwgMjAwMCwKICAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpLCBzTGlnaHRDZW50ZXIpOwogICAgIFRleHRTdHJpa2V0aHJvdWdoVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSgyICogTE9PUFMsIHJlbmRlcmVyLmdldEluZGV4KCkpCi0gICAgICAgICAgICA8PCAiRXhwZWN0IG51bWJlciBvZiBvcHMgPSAyICogbG9vcCBjb3VudCI7IC8vIFRPRE86IGZvcmNlIG5vIG1lcmdpbmcKKyAgICAgICAgICAgIDw8ICJFeHBlY3QgbnVtYmVyIG9mIG9wcyA9IDIgKiBsb29wIGNvdW50IjsKIH0KIAotVEVTVChPcFJlb3JkZXJlciwgcmVuZGVyTm9kZSkgeworUkVOREVSVEhSRUFEX1RFU1QoRnJhbWVCdWlsZGVyLCB0ZXh0dXJlTGF5ZXIpIHsKKyAgICBjbGFzcyBUZXh0dXJlTGF5ZXJUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICB2b2lkIG9uVGV4dHVyZUxheWVyT3AoY29uc3QgVGV4dHVyZUxheWVyT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMCwgbUluZGV4KyspOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoNTAsIDUwLCAxNTAsIDE1MCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCg1MCwgNTAsIDEwNSwgMTA1KSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKKworICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZDsKKyAgICAgICAgICAgIGV4cGVjdGVkLmxvYWRUcmFuc2xhdGUoNSwgNSwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShleHBlY3RlZCwgc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0pOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8gbGF5ZXJVcGRhdGVyID0gVGVzdFV0aWxzOjpjcmVhdGVUZXh0dXJlTGF5ZXJVcGRhdGVyKHJlbmRlclRocmVhZCwgMTAwLCAxMDAsCisgICAgICAgICAgICBbXShNYXRyaXg0KiB0cmFuc2Zvcm0pIHsKKyAgICAgICAgdHJhbnNmb3JtLT5sb2FkVHJhbnNsYXRlKDUsIDUsIDApOworICAgIH0pOworCisgICAgYXV0byBub2RlID0gVGVzdFV0aWxzOjpjcmVhdGVOb2RlKDAsIDAsIDIwMCwgMjAwLAorICAgICAgICAgICAgWyZsYXllclVwZGF0ZXJdKFJlbmRlclByb3BlcnRpZXMmIHByb3BzLCBSZWNvcmRpbmdDYW52YXMmIGNhbnZhcykgeworICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuY2xpcFJlY3QoNTAsIDUwLCAxNTAsIDE1MCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICBjYW52YXMuZHJhd0xheWVyKGxheWVyVXBkYXRlci5nZXQoKSk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgfSk7CisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAorICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CisgICAgVGV4dHVyZUxheWVyVGVzdFJlbmRlcmVyIHJlbmRlcmVyOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIEVYUEVDVF9FUSgxLCByZW5kZXJlci5nZXRJbmRleCgpKTsKK30KKworVEVTVChGcmFtZUJ1aWxkZXIsIHJlbmRlck5vZGUpIHsKICAgICBjbGFzcyBSZW5kZXJOb2RlVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBvblJlY3RPcChjb25zdCBSZWN0T3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CiAgICAgICAgICAgICBzd2l0Y2gobUluZGV4KyspIHsKICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCAyMDAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgICAgIEVYUEVDVF9FUShTS19Db2xvckRLR1JBWSwgb3AucGFpbnQtPmdldENvbG9yKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAxOgpAQCAtMjc5LDMyICszODEsMzEgQEAKICAgICAgICAgY2FudmFzLmRyYXdSZWN0KDAsIDAsIDEwMCwgMTAwLCBwYWludCk7CiAgICAgfSk7CiAKLSAgICBSZW5kZXJOb2RlKiBjaGlsZFB0ciA9IGNoaWxkLmdldCgpOwogICAgIGF1dG8gcGFyZW50ID0gVGVzdFV0aWxzOjpjcmVhdGVOb2RlKDAsIDAsIDIwMCwgMjAwLAotICAgICAgICAgICAgW2NoaWxkUHRyXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgUmVjb3JkaW5nQ2FudmFzJiBjYW52YXMpIHsKKyAgICAgICAgICAgIFsmY2hpbGRdKFJlbmRlclByb3BlcnRpZXMmIHByb3BzLCBSZWNvcmRpbmdDYW52YXMmIGNhbnZhcykgewogICAgICAgICBTa1BhaW50IHBhaW50OwogICAgICAgICBwYWludC5zZXRDb2xvcihTS19Db2xvckRLR1JBWSk7CiAgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgwLCAwLCAyMDAsIDIwMCwgcGFpbnQpOwogCiAgICAgICAgIGNhbnZhcy5zYXZlKFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnIHwgU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnKTsKICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSg0MCwgNDApOwotICAgICAgICBjYW52YXMuZHJhd1JlbmRlck5vZGUoY2hpbGRQdHIpOworICAgICAgICBjYW52YXMuZHJhd1JlbmRlck5vZGUoY2hpbGQuZ2V0KCkpOwogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwogCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3QocGFyZW50KSwgc0xpZ2h0Q2VudGVyKTsKICAgICBSZW5kZXJOb2RlVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBjbGlwcGVkKSB7CitURVNUKEZyYW1lQnVpbGRlciwgY2xpcHBlZCkgewogICAgIGNsYXNzIENsaXBwZWRUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIG9uQml0bWFwT3AoY29uc3QgQml0bWFwT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoMCwgbUluZGV4KyspOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCAzMCwgNDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCAzMCwgNDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAyMCwgMzAsIDQwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCgpKTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzE1LDE0ICs0MTYsMTQgQEAKICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXAoYml0bWFwLCAwLCAwLCBudWxscHRyKTsKICAgICB9KTsKIAotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLAorICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwKICAgICAgICAgICAgIFNrUmVjdDo6TWFrZUxUUkIoMTAsIDIwLCAzMCwgNDApLCAvLyBjbGlwIHRvIHNtYWxsIGFyZWEsIHNob3VsZCBzZWUgaW4gcmVjZWl2ZXIKICAgICAgICAgICAgIDIwMCwgMjAwLCBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKICAgICBDbGlwcGVkVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzYXZlTGF5ZXJTaW1wbGUpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzYXZlTGF5ZXJfc2ltcGxlKSB7CiAgICAgY2xhc3MgU2F2ZUxheWVyU2ltcGxlVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgT2Zmc2NyZWVuQnVmZmVyKiBzdGFydFRlbXBvcmFyeUxheWVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpIG92ZXJyaWRlIHsKQEAgLTMzNyw4ICs0MzgsOCBAQAogICAgICAgICB2b2lkIG9uUmVjdE9wKGNvbnN0IFJlY3RPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtSW5kZXgrKyk7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMTAsIDE5MCwgMTkwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTgwLCAxODApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTgwLCAxODApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDE4MCwgMTgwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDE4MCwgMTgwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwUmVjdCgpKTsKIAogICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZFRyYW5zZm9ybTsKICAgICAgICAgICAgIGV4cGVjdGVkVHJhbnNmb3JtLmxvYWRUcmFuc2xhdGUoLTEwLCAtMTAsIDApOwpAQCAtMzQ3LDcgKzQ0OCw3IEBACiAgICAgICAgIHZvaWQgb25MYXllck9wKGNvbnN0IExheWVyT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoMywgbUluZGV4KyspOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDEwLCAxOTAsIDE5MCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCAyMDAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QpOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpOwogICAgICAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKTsKICAgICAgICAgfQogICAgIH07CkBAIC0zNTgsMTQgKzQ1OSwxNCBAQAogICAgICAgICBjYW52YXMuZHJhd1JlY3QoMTAsIDEwLCAxOTAsIDE5MCwgU2tQYWludCgpKTsKICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKICAgICB9KTsKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCiAgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKICAgICBTYXZlTGF5ZXJTaW1wbGVUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDQsIHJlbmRlcmVyLmdldEluZGV4KCkpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzYXZlTGF5ZXJOZXN0ZWQpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzYXZlTGF5ZXJfbmVzdGVkKSB7CiAgICAgLyogc2F2ZUxheWVyMSB7IHJlY3QxLCBzYXZlTGF5ZXIyIHsgcmVjdDIgfSB9IHdpbGwgcGxheSBiYWNrIGFzOgogICAgICAqIC0gc3RhcnRUZW1wb3JhcnlMYXllcjIsIHJlY3QyIGVuZExheWVyMgogICAgICAqIC0gc3RhcnRUZW1wb3JhcnlMYXllcjEsIHJlY3QxLCBkcmF3TGF5ZXIyLCBlbmRMYXllcjEKQEAgLTM5MywyNSArNDk0LDI1IEBACiAgICAgICAgIHZvaWQgc3RhcnRGcmFtZSh1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LCBjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgb3ZlcnJpZGUgewogICAgICAgICAgICAgRVhQRUNUX0VRKDcsIG1JbmRleCsrKTsKICAgICAgICAgfQotICAgICAgICB2b2lkIGVuZEZyYW1lKCkgb3ZlcnJpZGUgeworICAgICAgICB2b2lkIGVuZEZyYW1lKGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSBvdmVycmlkZSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoOSwgbUluZGV4KyspOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgb25SZWN0T3AoY29uc3QgUmVjdE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgewogICAgICAgICAgICAgY29uc3QgaW50IGluZGV4ID0gbUluZGV4Kys7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMSkgewotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDQwMCwgNDAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOyAvLyBpbm5lciByZWN0CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoNDAwLCA0MDApLCBvcC51bm1hcHBlZEJvdW5kcyk7IC8vIGlubmVyIHJlY3QKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gNCkgewotICAgICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDgwMCwgODAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOyAvLyBvdXRlciByZWN0CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoODAwLCA4MDApLCBvcC51bm1hcHBlZEJvdW5kcyk7IC8vIG91dGVyIHJlY3QKICAgICAgICAgICAgIH0gZWxzZSB7IEFERF9GQUlMVVJFKCk7IH0KICAgICAgICAgfQogICAgICAgICB2b2lkIG9uTGF5ZXJPcChjb25zdCBMYXllck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgewogICAgICAgICAgICAgY29uc3QgaW50IGluZGV4ID0gbUluZGV4Kys7CiAgICAgICAgICAgICBpZiAoaW5kZXggPT0gNSkgewogICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoT2Zmc2NyZWVuQnVmZmVyKikweDQwMCwgKm9wLmxheWVySGFuZGxlKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCA0MDAsIDQwMCksIG9wLnVubWFwcGVkQm91bmRzKTsgLy8gaW5uZXIgbGF5ZXIKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCg0MDAsIDQwMCksIG9wLnVubWFwcGVkQm91bmRzKTsgLy8gaW5uZXIgbGF5ZXIKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gOCkgewogICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoT2Zmc2NyZWVuQnVmZmVyKikweDgwMCwgKm9wLmxheWVySGFuZGxlKTsKLSAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCA4MDAsIDgwMCksIG9wLnVubWFwcGVkQm91bmRzKTsgLy8gb3V0ZXIgbGF5ZXIKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCg4MDAsIDgwMCksIG9wLnVubWFwcGVkQm91bmRzKTsgLy8gb3V0ZXIgbGF5ZXIKICAgICAgICAgICAgIH0gZWxzZSB7IEFERF9GQUlMVVJFKCk7IH0KICAgICAgICAgfQogICAgIH07CkBAIC00MzAsMTQgKzUzMSwxNCBAQAogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwogCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDgwMCwgODAwKSwgODAwLCA4MDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCg4MDAsIDgwMCksIDgwMCwgODAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CiAgICAgU2F2ZUxheWVyTmVzdGVkVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSgxMCwgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7CiB9CiAKLVRFU1QoT3BSZW9yZGVyZXIsIHNhdmVMYXllckNvbnRlbnRSZWplY3Rpb24pIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzYXZlTGF5ZXJfY29udGVudFJlamVjdGlvbikgewogICAgICAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMjAwLCAyMDAsCiAgICAgICAgICAgICAgICAgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcHMsIFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CiAgICAgICAgIGNhbnZhcy5zYXZlKFNrQ2FudmFzOjprTWF0cml4X1NhdmVGbGFnIHwgU2tDYW52YXM6OmtDbGlwX1NhdmVGbGFnKTsKQEAgLTQ1MCwxNSArNTUxLDE3MyBAQAogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAorICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKICAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpLCBzTGlnaHRDZW50ZXIpOwogCiAgICAgRmFpbFJlbmRlcmVyIHJlbmRlcmVyOwogICAgIC8vIHNob3VsZCBzZWUgbm8gb3BzLCBldmVuIHdpdGhpbiB0aGUgbGF5ZXIsIHNpbmNlIHRoZSBsYXllciBzaG91bGQgYmUgcmVqZWN0ZWQKLSAgICByZW9yZGVyZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKIH0KIAotUkVOREVSVEhSRUFEX1RFU1QoT3BSZW9yZGVyZXIsIGh3TGF5ZXJTaW1wbGUpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzYXZlTGF5ZXJVbmNsaXBwZWRfc2ltcGxlKSB7CisgICAgY2xhc3MgU2F2ZUxheWVyVW5jbGlwcGVkU2ltcGxlVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBvbkNvcHlUb0xheWVyT3AoY29uc3QgQ29weVRvTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgrKyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMTAsIDE5MCwgMTkwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKKyAgICAgICAgICAgIEVYUEVDVF9DTElQX1JFQ1QoUmVjdCgyMDAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFN0YXRlKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBvblNpbXBsZVJlY3RzT3AoY29uc3QgU2ltcGxlUmVjdHNPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxLCBtSW5kZXgrKyk7CisgICAgICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgb3AucGFpbnQpOworICAgICAgICAgICAgQVNTRVJUX0VRKFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlLCBQYWludFV0aWxzOjpnZXRYZmVybW9kZURpcmVjdChvcC5wYWludCkpOworICAgICAgICB9CisgICAgICAgIHZvaWQgb25SZWN0T3AoY29uc3QgUmVjdE9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgeworICAgICAgICAgICAgRVhQRUNUX0VRKDIsIG1JbmRleCsrKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDIwMCwgMjAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoc3RhdGUuY29tcHV0ZWRTdGF0ZS50cmFuc2Zvcm0uaXNJZGVudGl0eSgpKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIG9uQ29weUZyb21MYXllck9wKGNvbnN0IENvcHlGcm9tTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgzLCBtSW5kZXgrKyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMTAsIDE5MCwgMTkwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKKyAgICAgICAgICAgIEVYUEVDVF9DTElQX1JFQ1QoUmVjdCgyMDAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFN0YXRlKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYXV0byBub2RlID0gVGVzdFV0aWxzOjpjcmVhdGVOb2RlKDAsIDAsIDIwMCwgMjAwLAorICAgICAgICAgICAgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcHMsIFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMCwgMTAsIDE5MCwgMTkwLCAxMjgsIFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7CisgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgwLCAwLCAyMDAsIDIwMCwgU2tQYWludCgpKTsKKyAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICB9KTsKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCisgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKKyAgICBTYXZlTGF5ZXJVbmNsaXBwZWRTaW1wbGVUZXN0UmVuZGVyZXIgcmVuZGVyZXI7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgRVhQRUNUX0VRKDQsIHJlbmRlcmVyLmdldEluZGV4KCkpOworfQorCitURVNUKEZyYW1lQnVpbGRlciwgc2F2ZUxheWVyVW5jbGlwcGVkX21lcmdlZENsZWFycykgeworICAgIGNsYXNzIFNhdmVMYXllclVuY2xpcHBlZE1lcmdlZENsZWFyc1Rlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQgb25Db3B5VG9MYXllck9wKGNvbnN0IENvcHlUb0xheWVyT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBtSW5kZXgrKzsKKyAgICAgICAgICAgIEVYUEVDVF9HVCg0LCBpbmRleCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoNSwgb3AudW5tYXBwZWRCb3VuZHMuZ2V0V2lkdGgoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoNSwgb3AudW5tYXBwZWRCb3VuZHMuZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMTApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PSAxKSB7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTkwLCAwLCAyMDAsIDEwKSwgc3RhdGUuY29tcHV0ZWRTdGF0ZS5jbGlwcGVkQm91bmRzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT0gMikgeworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDE5MCwgMTAsIDIwMCksIHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcHBlZEJvdW5kcyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09IDMpIHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxOTAsIDE5MCwgMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZvaWQgb25TaW1wbGVSZWN0c09wKGNvbnN0IFNpbXBsZVJlY3RzT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoNCwgbUluZGV4KyspOworICAgICAgICAgICAgQVNTRVJUX0VRKG9wLnZlcnRleENvdW50LCAxNnUpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvcC52ZXJ0ZXhDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYXV0byB2ID0gb3AudmVydGljZXNbaV07CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUodi54ID09IDAgfHwgdi54ID09IDEwIHx8IHYueCA9PSAxOTAgfHwgdi54ID09IDIwMCk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUodi55ID09IDAgfHwgdi55ID09IDEwIHx8IHYueSA9PSAxOTAgfHwgdi55ID09IDIwMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBvblJlY3RPcChjb25zdCBSZWN0T3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoNSwgbUluZGV4KyspOworICAgICAgICB9CisgICAgICAgIHZvaWQgb25Db3B5RnJvbUxheWVyT3AoY29uc3QgQ29weUZyb21MYXllck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgeworICAgICAgICAgICAgRVhQRUNUX0xUKDUsIG1JbmRleCsrKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBhdXRvIG5vZGUgPSBUZXN0VXRpbHM6OmNyZWF0ZU5vZGUoMCwgMCwgMjAwLCAyMDAsCisgICAgICAgICAgICBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wcywgUmVjb3JkaW5nQ2FudmFzJiBjYW52YXMpIHsKKworICAgICAgICBpbnQgcmVzdG9yZVRvID0gY2FudmFzLnNhdmUoU2tDYW52YXM6OmtNYXRyaXhDbGlwX1NhdmVGbGFnKTsKKyAgICAgICAgY2FudmFzLnNjYWxlKDIsIDIpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMCwgMCwgNSwgNSwgMTI4LCBTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoOTUsIDAsIDEwMCwgNSwgMTI4LCBTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMCwgOTUsIDUsIDEwMCwgMTI4LCBTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoOTUsIDk1LCAxMDAsIDEwMCwgMTI4LCBTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgMTAwLCAxMDAsIFNrUGFpbnQoKSk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChyZXN0b3JlVG8pOworICAgIH0pOworICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKKyAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpLCBzTGlnaHRDZW50ZXIpOworICAgIFNhdmVMYXllclVuY2xpcHBlZE1lcmdlZENsZWFyc1Rlc3RSZW5kZXJlciByZW5kZXJlcjsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBFWFBFQ1RfRVEoMTAsIHJlbmRlcmVyLmdldEluZGV4KCkpCisgICAgICAgICAgICA8PCAiRXhwZWN0IDQgY29weVRvcywgNCBjb3B5RnJvbXMsIDEgY2xlYXIgU2ltcGxlUmVjdHMsIGFuZCAxIHJlY3QuIjsKK30KKworLyogc2F2ZUxheWVyVW5jbGlwcGVkIHsgc2F2ZUxheWVyIHsgc2F2ZUxheWVyVW5jbGlwcGVkIHsgcmVjdCB9IH0gfSB3aWxsIHBsYXkgYmFjayBhczoKKyAqIC0gc3RhcnRUZW1wb3JhcnlMYXllciwgb25Db3B5VG9MYXllciwgb25TaW1wbGVSZWN0cywgb25SZWN0LCBvbkNvcHlGcm9tTGF5ZXIsIGVuZExheWVyCisgKiAtIHN0YXJ0RnJhbWUsIG9uQ29weVRvTGF5ZXIsIG9uU2ltcGxlUmVjdHMsIGRyYXdMYXllciwgb25Db3B5RnJvbUxheWVyLCBlbmRmcmFtZQorICovCitURVNUKEZyYW1lQnVpbGRlciwgc2F2ZUxheWVyVW5jbGlwcGVkX2NvbXBsZXgpIHsKKyAgICBjbGFzcyBTYXZlTGF5ZXJVbmNsaXBwZWRDb21wbGV4VGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgT2Zmc2NyZWVuQnVmZmVyKiBzdGFydFRlbXBvcmFyeUxheWVyKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgwLCBtSW5kZXgrKyk7IC8vIHNhdmVsYXllciBmaXJzdAorICAgICAgICAgICAgcmV0dXJuIChPZmZzY3JlZW5CdWZmZXIqKTB4YWJjZDsKKyAgICAgICAgfQorICAgICAgICB2b2lkIG9uQ29weVRvTGF5ZXJPcChjb25zdCBDb3B5VG9MYXllck9wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgeworICAgICAgICAgICAgaW50IGluZGV4ID0gbUluZGV4Kys7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShpbmRleCA9PSAxIHx8IGluZGV4ID09IDcpOworICAgICAgICB9CisgICAgICAgIHZvaWQgb25TaW1wbGVSZWN0c09wKGNvbnN0IFNpbXBsZVJlY3RzT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBtSW5kZXgrKzsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGluZGV4ID09IDIgfHwgaW5kZXggPT0gOCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBvblJlY3RPcChjb25zdCBSZWN0T3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoMywgbUluZGV4KyspOworICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZDsKKyAgICAgICAgICAgIGV4cGVjdGVkLmxvYWRUcmFuc2xhdGUoLTEwMCwgLTEwMCwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMDAsIDEwMCwgMjAwLCAyMDApLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX01BVFJJWF9BUFBST1hfRVEoZXhwZWN0ZWQsIHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIG9uQ29weUZyb21MYXllck9wKGNvbnN0IENvcHlGcm9tTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IG1JbmRleCsrOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoaW5kZXggPT0gNCB8fCBpbmRleCA9PSAxMCk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBlbmRMYXllcigpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSg1LCBtSW5kZXgrKyk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBzdGFydEZyYW1lKHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoNiwgbUluZGV4KyspOworICAgICAgICB9CisgICAgICAgIHZvaWQgb25MYXllck9wKGNvbnN0IExheWVyT3AmIG9wLCBjb25zdCBCYWtlZE9wU3RhdGUmIHN0YXRlKSBvdmVycmlkZSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoOSwgbUluZGV4KyspOworICAgICAgICB9CisgICAgICAgIHZvaWQgZW5kRnJhbWUoY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUSgxMSwgbUluZGV4KyspOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8gbm9kZSA9IFRlc3RVdGlsczo6Y3JlYXRlTm9kZSgwLCAwLCA2MDAsIDYwMCwgLy8gNTAweDUwMCB0cmlnZ2VycyBjbGlwcGluZworICAgICAgICAgICAgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcHMsIFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgwLCAwLCA1MDAsIDUwMCwgMTI4LCAoU2tDYW52YXM6OlNhdmVGbGFncykwKTsgLy8gdW5jbGlwcGVkCisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMDAsIDEwMCwgNDAwLCA0MDAsIDEyOCwgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZyk7IC8vIGNsaXBwZWQKKyAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDIwMCwgMjAwLCAzMDAsIDMwMCwgMTI4LCAoU2tDYW52YXM6OlNhdmVGbGFncykwKTsgLy8gdW5jbGlwcGVkCisgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgyMDAsIDIwMCwgMzAwLCAzMDAsIFNrUGFpbnQoKSk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgfSk7CisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCg2MDAsIDYwMCksIDYwMCwgNjAwLAorICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3Qobm9kZSksIHNMaWdodENlbnRlcik7CisgICAgU2F2ZUxheWVyVW5jbGlwcGVkQ29tcGxleFRlc3RSZW5kZXJlciByZW5kZXJlcjsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBFWFBFQ1RfRVEoMTIsIHJlbmRlcmVyLmdldEluZGV4KCkpOworfQorCitSRU5ERVJUSFJFQURfVEVTVChGcmFtZUJ1aWxkZXIsIGh3TGF5ZXJfc2ltcGxlKSB7CiAgICAgY2xhc3MgSHdMYXllclNpbXBsZVRlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgc3RhcnRSZXBhaW50TGF5ZXIoT2Zmc2NyZWVuQnVmZmVyKiBvZmZzY3JlZW5CdWZmZXIsIGNvbnN0IFJlY3QmIHJlcGFpbnRSZWN0KSBvdmVycmlkZSB7CkBAIC00NzMsNyArNzMyLDcgQEAKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHN0YXRlLmNvbXB1dGVkU3RhdGUudHJhbnNmb3JtLmlzSWRlbnRpdHkoKSkKICAgICAgICAgICAgICAgICAgICAgPDwgIlRyYW5zZm9ybSBzaG91bGQgYmUgcmVzZXQgd2l0aGluIGxheWVyIjsKIAotICAgICAgICAgICAgRVhQRUNUX0VRKHN0YXRlLmNvbXB1dGVkU3RhdGUuY2xpcFJlY3QsIFJlY3QoMjUsIDI1LCA3NSwgNzUpKQorICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMjUsIDI1LCA3NSwgNzUpLCBzdGF0ZS5jb21wdXRlZFN0YXRlLmNsaXBSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIDw8ICJEYW1hZ2UgcmVjdCBzaG91bGQgYmUgdXNlZCB0byBjbGlwIGxheWVyIGNvbnRlbnQiOwogICAgICAgICB9CiAgICAgICAgIHZvaWQgZW5kTGF5ZXIoKSBvdmVycmlkZSB7CkBAIC00ODUsNyArNzQ0LDcgQEAKICAgICAgICAgdm9pZCBvbkxheWVyT3AoY29uc3QgTGF5ZXJPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKICAgICAgICAgICAgIEVYUEVDVF9FUSg0LCBtSW5kZXgrKyk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBlbmRGcmFtZSgpIG92ZXJyaWRlIHsKKyAgICAgICAgdm9pZCBlbmRGcmFtZShjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgb3ZlcnJpZGUgewogICAgICAgICAgICAgRVhQRUNUX0VRKDUsIG1JbmRleCsrKTsKICAgICAgICAgfQogICAgIH07CkBAIC01MDksMTcgKzc2OCwxNyBAQAogICAgIExheWVyVXBkYXRlUXVldWUgbGF5ZXJVcGRhdGVRdWV1ZTsgLy8gTm90ZTogZW5xdWV1ZSBkYW1hZ2UgcG9zdC1zeW5jLCBzbyBib3VuZHMgYXJlIHZhbGlkCiAgICAgbGF5ZXJVcGRhdGVRdWV1ZS5lbnF1ZXVlTGF5ZXJXaXRoRGFtYWdlKG5vZGUuZ2V0KCksIFJlY3QoMjUsIDI1LCA3NSwgNzUpKTsKIAotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihsYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAorICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIobGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKICAgICAgICAgICAgIHN5bmNlZE5vZGVMaXN0LCBzTGlnaHRDZW50ZXIpOwogICAgIEh3TGF5ZXJTaW1wbGVUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDYsIHJlbmRlcmVyLmdldEluZGV4KCkpOwogCiAgICAgLy8gY2xlYW4gdXAgbGF5ZXIgcG9pbnRlciwgc28gd2UgY2FuIHNhZmVseSBkZXN0cnVjdCBSZW5kZXJOb2RlCiAgICAgKmxheWVySGFuZGxlID0gbnVsbHB0cjsKIH0KIAotUkVOREVSVEhSRUFEX1RFU1QoT3BSZW9yZGVyZXIsIGh3TGF5ZXJDb21wbGV4KSB7CitSRU5ERVJUSFJFQURfVEVTVChGcmFtZUJ1aWxkZXIsIGh3TGF5ZXJfY29tcGxleCkgewogICAgIC8qIHBhcmVudExheWVyIHsgZ3JleVJlY3QsIHNhdmVMYXllciB7IGNoaWxkTGF5ZXIgeyB3aGl0ZVJlY3QgfSB9IH0gd2lsbCBwbGF5IGJhY2sgYXM6CiAgICAgICogLSBzdGFydFJlcGFpbnRMYXllcihjaGlsZCksIHJlY3QoZ3JleSksIGVuZExheWVyCiAgICAgICogLSBzdGFydFRlbXBvcmFyeUxheWVyLCBkcmF3TGF5ZXIoY2hpbGQpLCBlbmRMYXllcgpAQCAtNTc0LDcgKzgzMyw3IEBACiAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKDIwMHUsIGxheWVyLT52aWV3cG9ydEhlaWdodCk7CiAgICAgICAgICAgICB9IGVsc2UgeyBBRERfRkFJTFVSRSgpOyB9CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBlbmRGcmFtZSgpIG92ZXJyaWRlIHsKKyAgICAgICAgdm9pZCBlbmRGcmFtZShjb25zdCBSZWN0JiByZXBhaW50UmVjdCkgb3ZlcnJpZGUgewogICAgICAgICAgICAgRVhQRUNUX0VRKDEyLCBtSW5kZXgrKyk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNjEwLDEwICs4NjksMTAgQEAKICAgICBsYXllclVwZGF0ZVF1ZXVlLmVucXVldWVMYXllcldpdGhEYW1hZ2UoY2hpbGQuZ2V0KCksIFJlY3QoMTAwLCAxMDApKTsKICAgICBsYXllclVwZGF0ZVF1ZXVlLmVucXVldWVMYXllcldpdGhEYW1hZ2UocGFyZW50LmdldCgpLCBSZWN0KDIwMCwgMjAwKSk7CiAKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIobGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKGxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCiAgICAgICAgICAgICBzeW5jZWRMaXN0LCBzTGlnaHRDZW50ZXIpOwogICAgIEh3TGF5ZXJDb21wbGV4VGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSgxMywgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7CiAKICAgICAvLyBjbGVhbiB1cCBsYXllciBwb2ludGVycywgc28gd2UgY2FuIHNhZmVseSBkZXN0cnVjdCBSZW5kZXJOb2RlcwpAQCAtNjM1LDcgKzg5NCw3IEBACiAgICAgbm9kZS0+c2V0UHJvcGVydHlGaWVsZHNEaXJ0eShSZW5kZXJOb2RlOjpUUkFOU0xBVElPTl9aKTsKICAgICBjYW52YXMtPmRyYXdSZW5kZXJOb2RlKG5vZGUuZ2V0KCkpOyAvLyBjYW52YXMgdGFrZXMgcmVmZXJlbmNlL3NvbGUgb3duZXJzaGlwCiB9Ci1URVNUKE9wUmVvcmRlcmVyLCB6UmVvcmRlcikgeworVEVTVChGcmFtZUJ1aWxkZXIsIHpSZW9yZGVyKSB7CiAgICAgY2xhc3MgWlJlb3JkZXJUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICB2b2lkIG9uUmVjdE9wKGNvbnN0IFJlY3RPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKQEAgLTY1OSwxNCArOTE4LDE0IEBACiAgICAgICAgIGRyYXdPcmRlcmVkUmVjdCgmY2FudmFzLCA4KTsKICAgICAgICAgZHJhd09yZGVyZWROb2RlKCZjYW52YXMsIDksIC0xMC4wZik7IC8vIGluIHJlb3JkZXI9ZmFsc2UgYXQgdGhpcyBwb2ludCwgc28gcGxheWVkIGlub3JkZXIKICAgICB9KTsKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMTAwLCAxMDApLCAxMDAsIDEwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMTAwKSwgMTAwLCAxMDAsCiAgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChwYXJlbnQpLCBzTGlnaHRDZW50ZXIpOwogICAgIFpSZW9yZGVyVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSgxMCwgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7CiB9OwogCi1URVNUKE9wUmVvcmRlcmVyLCBwcm9qZWN0aW9uUmVvcmRlcikgeworVEVTVChGcmFtZUJ1aWxkZXIsIHByb2plY3Rpb25SZW9yZGVyKSB7CiAgICAgc3RhdGljIGNvbnN0IGludCBzY3JvbGxYID0gNTsKICAgICBzdGF0aWMgY29uc3QgaW50IHNjcm9sbFkgPSAxMDsKICAgICBjbGFzcyBQcm9qZWN0aW9uUmVvcmRlclRlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKQEAgLTc0MiwxMCArMTAwMSwxMCBAQAogICAgICAgICBjYW52YXMucmVzdG9yZSgpOwogICAgIH0pOwogCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMTAwKSwgMTAwLCAxMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgxMDAsIDEwMCksIDEwMCwgMTAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3QocGFyZW50KSwgc0xpZ2h0Q2VudGVyKTsKICAgICBQcm9qZWN0aW9uUmVvcmRlclRlc3RSZW5kZXJlciByZW5kZXJlcjsKLSAgICByZW9yZGVyZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKICAgICBFWFBFQ1RfRVEoMywgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7CiB9CiAKQEAgLTc2MSw3ICsxMDIwLDcgQEAKICAgICB9KTsKIH0KIAotVEVTVChPcFJlb3JkZXJlciwgc2hhZG93KSB7CitURVNUKEZyYW1lQnVpbGRlciwgc2hhZG93KSB7CiAgICAgY2xhc3MgU2hhZG93VGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBvblNoYWRvd09wKGNvbnN0IFNoYWRvd09wJiBvcCwgY29uc3QgQmFrZWRPcFN0YXRlJiBzdGF0ZSkgb3ZlcnJpZGUgewpAQCAtNzg1LDE0ICsxMDQ0LDE0IEBACiAgICAgICAgIGNhbnZhcy5kcmF3UmVuZGVyTm9kZShjcmVhdGVXaGl0ZVJlY3RTaGFkb3dDYXN0ZXIoNS4wZikuZ2V0KCkpOwogICAgIH0pOwogCi0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAogICAgICAgICAgICAgY3JlYXRlU3luY2VkTm9kZUxpc3QocGFyZW50KSwgc0xpZ2h0Q2VudGVyKTsKICAgICBTaGFkb3dUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDIsIHJlbmRlcmVyLmdldEluZGV4KCkpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCBzaGFkb3dTYXZlTGF5ZXIpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCBzaGFkb3dTYXZlTGF5ZXIpIHsKICAgICBjbGFzcyBTaGFkb3dTYXZlTGF5ZXJUZXN0UmVuZGVyZXIgOiBwdWJsaWMgVGVzdFJlbmRlcmVyQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBPZmZzY3JlZW5CdWZmZXIqIHN0YXJ0VGVtcG9yYXJ5TGF5ZXIodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkgb3ZlcnJpZGUgewpAQCAtODI2LDE0ICsxMDg1LDE0IEBACiAgICAgICAgIGNhbnZhcy5yZXN0b3JlVG9Db3VudChjb3VudCk7CiAgICAgfSk7CiAKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCiAgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChwYXJlbnQpLCAoVmVjdG9yMykgeyAxMDAsIDEwMCwgMTAwIH0pOwogICAgIFNoYWRvd1NhdmVMYXllclRlc3RSZW5kZXJlciByZW5kZXJlcjsKLSAgICByZW9yZGVyZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKKyAgICBmcmFtZUJ1aWxkZXIucmVwbGF5QmFrZWRPcHM8VGVzdERpc3BhdGNoZXI+KHJlbmRlcmVyKTsKICAgICBFWFBFQ1RfRVEoNSwgcmVuZGVyZXIuZ2V0SW5kZXgoKSk7CiB9CiAKLVJFTkRFUlRIUkVBRF9URVNUKE9wUmVvcmRlcmVyLCBzaGFkb3dId0xheWVyKSB7CitSRU5ERVJUSFJFQURfVEVTVChGcmFtZUJ1aWxkZXIsIHNoYWRvd0h3TGF5ZXIpIHsKICAgICBjbGFzcyBTaGFkb3dId0xheWVyVGVzdFJlbmRlcmVyIDogcHVibGljIFRlc3RSZW5kZXJlckJhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgdm9pZCBzdGFydFJlcGFpbnRMYXllcihPZmZzY3JlZW5CdWZmZXIqIG9mZnNjcmVlbkJ1ZmZlciwgY29uc3QgUmVjdCYgcmVwYWludFJlY3QpIG92ZXJyaWRlIHsKQEAgLTg3NiwxNyArMTEzNSwxNyBAQAogICAgIGF1dG8gc3luY2VkTGlzdCA9IGNyZWF0ZVN5bmNlZE5vZGVMaXN0KHBhcmVudCk7CiAgICAgTGF5ZXJVcGRhdGVRdWV1ZSBsYXllclVwZGF0ZVF1ZXVlOyAvLyBOb3RlOiBlbnF1ZXVlIGRhbWFnZSBwb3N0LXN5bmMsIHNvIGJvdW5kcyBhcmUgdmFsaWQKICAgICBsYXllclVwZGF0ZVF1ZXVlLmVucXVldWVMYXllcldpdGhEYW1hZ2UocGFyZW50LmdldCgpLCBSZWN0KDEwMCwgMTAwKSk7Ci0gICAgT3BSZW9yZGVyZXIgcmVvcmRlcmVyKGxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsCisgICAgRnJhbWVCdWlsZGVyIGZyYW1lQnVpbGRlcihsYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAogICAgICAgICAgICAgc3luY2VkTGlzdCwgKFZlY3RvcjMpIHsgMTAwLCAxMDAsIDEwMCB9KTsKICAgICBTaGFkb3dId0xheWVyVGVzdFJlbmRlcmVyIHJlbmRlcmVyOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSg1LCByZW5kZXJlci5nZXRJbmRleCgpKTsKIAogICAgIC8vIGNsZWFuIHVwIGxheWVyIHBvaW50ZXIsIHNvIHdlIGNhbiBzYWZlbHkgZGVzdHJ1Y3QgUmVuZGVyTm9kZQogICAgICpsYXllckhhbmRsZSA9IG51bGxwdHI7CiB9CiAKLVRFU1QoT3BSZW9yZGVyZXIsIHNoYWRvd0xheWVyaW5nKSB7CitURVNUKEZyYW1lQnVpbGRlciwgc2hhZG93TGF5ZXJpbmcpIHsKICAgICBjbGFzcyBTaGFkb3dMYXllcmluZ1Rlc3RSZW5kZXJlciA6IHB1YmxpYyBUZXN0UmVuZGVyZXJCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZvaWQgb25TaGFkb3dPcChjb25zdCBTaGFkb3dPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIG92ZXJyaWRlIHsKQEAgLTkwNSwxMCArMTE2NCwxMCBAQAogICAgICAgICBjYW52YXMuZHJhd1JlbmRlck5vZGUoY3JlYXRlV2hpdGVSZWN0U2hhZG93Q2FzdGVyKDUuMDAwMWYpLmdldCgpKTsKICAgICB9KTsKIAotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLAorICAgIEZyYW1lQnVpbGRlciBmcmFtZUJ1aWxkZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMjAwLCAyMDApLCAyMDAsIDIwMCwKICAgICAgICAgICAgIGNyZWF0ZVN5bmNlZE5vZGVMaXN0KHBhcmVudCksIHNMaWdodENlbnRlcik7CiAgICAgU2hhZG93TGF5ZXJpbmdUZXN0UmVuZGVyZXIgcmVuZGVyZXI7Ci0gICAgcmVvcmRlcmVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CisgICAgZnJhbWVCdWlsZGVyLnJlcGxheUJha2VkT3BzPFRlc3REaXNwYXRjaGVyPihyZW5kZXJlcik7CiAgICAgRVhQRUNUX0VRKDQsIHJlbmRlcmVyLmdldEluZGV4KCkpOwogfQogCkBAIC05MzMsMTQgKzExOTIsMTQgQEAKICAgICAgICAgY2FudmFzLmRyYXdSZWN0KDAsIDAsIDEwMCwgMTAwLCBwYWludCk7CiAgICAgfSk7CiAKLSAgICBPcFJlb3JkZXJlciByZW9yZGVyZXIoc0VtcHR5TGF5ZXJVcGRhdGVRdWV1ZSwgU2tSZWN0OjpNYWtlV0goMTAwLCAxMDApLCAyMDAsIDIwMCwKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDEwMCwgMTAwKSwgMjAwLCAyMDAsCiAgICAgICAgICAgICBjcmVhdGVTeW5jZWROb2RlTGlzdChub2RlKSwgc0xpZ2h0Q2VudGVyKTsKICAgICBQcm9wZXJ0eVRlc3RSZW5kZXJlciByZW5kZXJlcihvcFZhbGlkYXRlQ2FsbGJhY2spOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogICAgIEVYUEVDVF9FUSgxLCByZW5kZXJlci5nZXRJbmRleCgpKSA8PCAiU2hvdWxkIGhhdmUgc2VlbiBvbmUgb3AiOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCByZW5kZXJQcm9wT3ZlcmxhcHBpbmdSZW5kZXJpbmdBbHBoYSkgeworVEVTVChGcmFtZUJ1aWxkZXIsIHJlbmRlclByb3BPdmVybGFwcGluZ1JlbmRlcmluZ0FscGhhKSB7CiAgICAgdGVzdFByb3BlcnR5KFtdKFJlbmRlclByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsKICAgICAgICAgcHJvcGVydGllcy5zZXRBbHBoYSgwLjVmKTsKICAgICAgICAgcHJvcGVydGllcy5zZXRIYXNPdmVybGFwcGluZ1JlbmRlcmluZyhmYWxzZSk7CkBAIC05NDksNyArMTIwOCw3IEBACiAgICAgfSk7CiB9CiAKLVRFU1QoT3BSZW9yZGVyZXIsIHJlbmRlclByb3BDbGlwcGluZykgeworVEVTVChGcmFtZUJ1aWxkZXIsIHJlbmRlclByb3BDbGlwcGluZykgewogICAgIHRlc3RQcm9wZXJ0eShbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIHByb3BlcnRpZXMuc2V0Q2xpcFRvQm91bmRzKHRydWUpOwogICAgICAgICBwcm9wZXJ0aWVzLnNldENsaXBCb3VuZHMoUmVjdCgxMCwgMjAsIDMwMCwgNDAwKSk7CkBAIC05NTksNyArMTIxOCw3IEBACiAgICAgfSk7CiB9CiAKLVRFU1QoT3BSZW9yZGVyZXIsIHJlbmRlclByb3BSZXZlYWxDbGlwKSB7CitURVNUKEZyYW1lQnVpbGRlciwgcmVuZGVyUHJvcFJldmVhbENsaXApIHsKICAgICB0ZXN0UHJvcGVydHkoW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcGVydGllcykgewogICAgICAgICBwcm9wZXJ0aWVzLm11dGFibGVSZXZlYWxDbGlwKCkuc2V0KHRydWUsIDUwLCA1MCwgMjUpOwogICAgIH0sIFtdKGNvbnN0IFJlY3RPcCYgb3AsIGNvbnN0IEJha2VkT3BTdGF0ZSYgc3RhdGUpIHsKQEAgLTk3MCw3ICsxMjI5LDcgQEAKICAgICB9KTsKIH0KIAotVEVTVChPcFJlb3JkZXJlciwgcmVuZGVyUHJvcE91dGxpbmVDbGlwKSB7CitURVNUKEZyYW1lQnVpbGRlciwgcmVuZGVyUHJvcE91dGxpbmVDbGlwKSB7CiAgICAgdGVzdFByb3BlcnR5KFtdKFJlbmRlclByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsKICAgICAgICAgcHJvcGVydGllcy5tdXRhYmxlT3V0bGluZSgpLnNldFNob3VsZENsaXAodHJ1ZSk7CiAgICAgICAgIHByb3BlcnRpZXMubXV0YWJsZU91dGxpbmUoKS5zZXRSb3VuZFJlY3QoMTAsIDIwLCAzMCwgNDAsIDUuMGYsIDAuNWYpOwpAQCAtOTgyLDcgKzEyNDEsNyBAQAogICAgIH0pOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCByZW5kZXJQcm9wVHJhbnNmb3JtKSB7CitURVNUKEZyYW1lQnVpbGRlciwgcmVuZGVyUHJvcFRyYW5zZm9ybSkgewogICAgIHRlc3RQcm9wZXJ0eShbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIHByb3BlcnRpZXMuc2V0TGVmdFRvcFJpZ2h0Qm90dG9tKDEwLCAxMCwgMTEwLCAxMTApOwogCkBAIC0xMDc1LDE1ICsxMzM0LDE1IEBACiAgICAgfSk7CiAgICAgYXV0byBub2RlcyA9IGNyZWF0ZVN5bmNlZE5vZGVMaXN0KG5vZGUpOyAvLyBzeW5jIGJlZm9yZSBxdWVyeWluZyBoZWlnaHQKIAotICAgIE9wUmVvcmRlcmVyIHJlb3JkZXJlcihzRW1wdHlMYXllclVwZGF0ZVF1ZXVlLCBTa1JlY3Q6Ok1ha2VXSCgyMDAsIDIwMCksIDIwMCwgMjAwLCBub2Rlcywgc0xpZ2h0Q2VudGVyKTsKKyAgICBGcmFtZUJ1aWxkZXIgZnJhbWVCdWlsZGVyKHNFbXB0eUxheWVyVXBkYXRlUXVldWUsIFNrUmVjdDo6TWFrZVdIKDIwMCwgMjAwKSwgMjAwLCAyMDAsIG5vZGVzLCBzTGlnaHRDZW50ZXIpOwogICAgIFNhdmVMYXllckFscGhhQ2xpcFRlc3RSZW5kZXJlciByZW5kZXJlcihvdXRPYnNlcnZlZERhdGEpOwotICAgIHJlb3JkZXJlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOworICAgIGZyYW1lQnVpbGRlci5yZXBsYXlCYWtlZE9wczxUZXN0RGlzcGF0Y2hlcj4ocmVuZGVyZXIpOwogCiAgICAgLy8gYXNzZXJ0LCBzaW5jZSBvdXRwdXQgd29uJ3QgYmUgdmFsaWQgaWYgd2UgaGF2ZW4ndCBzZWVuIGEgc2F2ZSBsYXllciB0cmlnZ2VyZWQKICAgICBBU1NFUlRfRVEoNCwgcmVuZGVyZXIuZ2V0SW5kZXgoKSkgPDwgIlRlc3QgbXVzdCB0cmlnZ2VyIHNhdmVMYXllciBhbHBoYSBiZWhhdmlvci4iOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCByZW5kZXJQcm9wU2F2ZUxheWVyQWxwaGFDbGlwQmlnKSB7CitURVNUKEZyYW1lQnVpbGRlciwgcmVuZGVyUHJvcFNhdmVMYXllckFscGhhQ2xpcEJpZykgewogICAgIFNhdmVMYXllckFscGhhRGF0YSBvYnNlcnZlZERhdGE7CiAgICAgdGVzdFNhdmVMYXllckFscGhhQ2xpcCgmb2JzZXJ2ZWREYXRhLCBbXShSZW5kZXJQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKSB7CiAgICAgICAgIHByb3BlcnRpZXMuc2V0VHJhbnNsYXRpb25YKDEwKTsgLy8gb2Zmc2V0IHJlbmRlcmluZyBjb250ZW50CkBAIC0xMDkxLDcgKzEzNTAsNyBAQAogICAgIH0pOwogICAgIEVYUEVDVF9FUSgxOTB1LCBvYnNlcnZlZERhdGEubGF5ZXJXaWR0aCk7CiAgICAgRVhQRUNUX0VRKDIwMHUsIG9ic2VydmVkRGF0YS5sYXllckhlaWdodCk7Ci0gICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTkwLCAyMDApLCBvYnNlcnZlZERhdGEucmVjdENsaXBwZWRCb3VuZHMpCisgICAgRVhQRUNUX0VRKFJlY3QoMTkwLCAyMDApLCBvYnNlcnZlZERhdGEucmVjdENsaXBwZWRCb3VuZHMpCiAgICAgICAgICAgICA8PCAiZXhwZWN0IGNvbnRlbnQgdG8gYmUgY2xpcHBlZCB0byBzY3JlZW4gYXJlYSI7CiAgICAgTWF0cml4NCBleHBlY3RlZDsKICAgICBleHBlY3RlZC5sb2FkVHJhbnNsYXRlKDAsIC0yMDAwLCAwKTsKQEAgLTEwOTksNyArMTM1OCw3IEBACiAgICAgICAgICAgICA8PCAiZXhwZWN0IGNvbnRlbnQgdG8gYmUgdHJhbnNsYXRlZCBhcyBwYXJ0IG9mIGJlaW5nIGNsaXBwZWQiOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCByZW5kZXJQcm9wU2F2ZUxheWVyQWxwaGFSb3RhdGUpIHsKK1RFU1QoRnJhbWVCdWlsZGVyLCByZW5kZXJQcm9wU2F2ZUxheWVyQWxwaGFSb3RhdGUpIHsKICAgICBTYXZlTGF5ZXJBbHBoYURhdGEgb2JzZXJ2ZWREYXRhOwogICAgIHRlc3RTYXZlTGF5ZXJBbHBoYUNsaXAoJm9ic2VydmVkRGF0YSwgW10oUmVuZGVyUHJvcGVydGllcyYgcHJvcGVydGllcykgewogICAgICAgICAvLyBUcmFuc2xhdGUgYW5kIHJvdGF0ZSB0aGUgdmlldyBzbyB0aGF0IHRoZSBvbmx5IHZpc2libGUgcGFydCBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mCkBAIC0xMTE0LDExICsxMzczLDExIEBACiAgICAgLy8gY2VpbChzcXJ0KDIpIC8gMiAqIDIwMCkgPSAxNDIKICAgICBFWFBFQ1RfRVEoMTQydSwgb2JzZXJ2ZWREYXRhLmxheWVyV2lkdGgpOwogICAgIEVYUEVDVF9FUSgxNDJ1LCBvYnNlcnZlZERhdGEubGF5ZXJIZWlnaHQpOwotICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDE0MiwgMTQyKSwgb2JzZXJ2ZWREYXRhLnJlY3RDbGlwcGVkQm91bmRzKTsKKyAgICBFWFBFQ1RfRVEoUmVjdCgxNDIsIDE0MiksIG9ic2VydmVkRGF0YS5yZWN0Q2xpcHBlZEJvdW5kcyk7CiAgICAgRVhQRUNUX01BVFJJWF9BUFBST1hfRVEoTWF0cml4NDo6aWRlbnRpdHkoKSwgb2JzZXJ2ZWREYXRhLnJlY3RNYXRyaXgpOwogfQogCi1URVNUKE9wUmVvcmRlcmVyLCByZW5kZXJQcm9wU2F2ZUxheWVyQWxwaGFTY2FsZSkgeworVEVTVChGcmFtZUJ1aWxkZXIsIHJlbmRlclByb3BTYXZlTGF5ZXJBbHBoYVNjYWxlKSB7CiAgICAgU2F2ZUxheWVyQWxwaGFEYXRhIG9ic2VydmVkRGF0YTsKICAgICB0ZXN0U2F2ZUxheWVyQWxwaGFDbGlwKCZvYnNlcnZlZERhdGEsIFtdKFJlbmRlclByb3BlcnRpZXMmIHByb3BlcnRpZXMpIHsKICAgICAgICAgcHJvcGVydGllcy5zZXRQaXZvdFgoMCk7CkBAIC0xMTI4LDcgKzEzODcsNyBAQAogICAgIH0pOwogICAgIEVYUEVDVF9FUSgxMDB1LCBvYnNlcnZlZERhdGEubGF5ZXJXaWR0aCk7CiAgICAgRVhQRUNUX0VRKDQwMHUsIG9ic2VydmVkRGF0YS5sYXllckhlaWdodCk7Ci0gICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTAwLCA0MDApLCBvYnNlcnZlZERhdGEucmVjdENsaXBwZWRCb3VuZHMpOworICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgNDAwKSwgb2JzZXJ2ZWREYXRhLnJlY3RDbGlwcGVkQm91bmRzKTsKICAgICBFWFBFQ1RfTUFUUklYX0FQUFJPWF9FUShNYXRyaXg0OjppZGVudGl0eSgpLCBvYnNlcnZlZERhdGEucmVjdE1hdHJpeCk7CiB9CiAKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy91bml0L0xpbmVhckFsbG9jYXRvclRlc3RzLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy91bml0L0xpbmVhckFsbG9jYXRvclRlc3RzLmNwcAppbmRleCA3OGQ2NWRkLi41YzQ0MjkwMTAgMTAwNjQ0Ci0tLSBhL2xpYnMvaHd1aS90ZXN0cy91bml0L0xpbmVhckFsbG9jYXRvclRlc3RzLmNwcAorKysgYi9saWJzL2h3dWkvdGVzdHMvdW5pdC9MaW5lYXJBbGxvY2F0b3JUZXN0cy5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICAgICBpbnQgdHdvID0gMjsKIH07CiAKLVRFU1QoTGluZWFyQWxsb2NhdG9yLCBhbGxvYykgeworVEVTVChMaW5lYXJBbGxvY2F0b3IsIGNyZWF0ZSkgewogICAgIExpbmVhckFsbG9jYXRvciBsYTsKICAgICBFWFBFQ1RfRVEoMHUsIGxhLnVzZWRTaXplKCkpOwogICAgIGxhLmFsbG9jKDY0KTsKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAvLyBzbyB0aGUgdXNlZFNpemUgaXNuJ3Qgc3RyaWN0bHkgZGVmaW5lZAogICAgIEVYUEVDVF9MRSg2NHUsIGxhLnVzZWRTaXplKCkpOwogICAgIEVYUEVDVF9HVCg4MHUsIGxhLnVzZWRTaXplKCkpOwotICAgIGF1dG8gcGFpciA9IGxhLmFsbG9jPFNpbXBsZVBhaXI+KCk7CisgICAgYXV0byBwYWlyID0gbGEuY3JlYXRlPFNpbXBsZVBhaXI+KCk7CiAgICAgRVhQRUNUX0xFKDY0dSArIHNpemVvZihTaW1wbGVQYWlyKSwgbGEudXNlZFNpemUoKSk7CiAgICAgRVhQRUNUX0dUKDgwdSArIHNpemVvZihTaW1wbGVQYWlyKSwgbGEudXNlZFNpemUoKSk7CiAgICAgRVhQRUNUX0VRKDEsIHBhaXItPm9uZSk7CkBAIC00Nyw4ICs0Nyw4IEBACiAgICAgewogICAgICAgICBMaW5lYXJBbGxvY2F0b3IgbGE7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0gICAgICAgICAgICBsYS5hbGxvYzxUZXN0VXRpbHM6OlNpZ25hbGluZ0R0b3I+KCktPnNldFNpZ25hbChkZXN0cm95ZWQgKyBpKTsKLSAgICAgICAgICAgIGxhLmFsbG9jPFNpbXBsZVBhaXI+KCk7CisgICAgICAgICAgICBsYS5jcmVhdGU8VGVzdFV0aWxzOjpTaWduYWxpbmdEdG9yPigpLT5zZXRTaWduYWwoZGVzdHJveWVkICsgaSk7CisgICAgICAgICAgICBsYS5jcmVhdGU8U2ltcGxlUGFpcj4oKTsKICAgICAgICAgfQogICAgICAgICBsYS5hbGxvYygxMDApOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewpAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICBsYS5yZXdpbmRJZkxhc3RBbGxvYyhhZGRyLCAxMDApOwogICAgICAgICBFWFBFQ1RfR1QoMTZ1LCBsYS51c2VkU2l6ZSgpKTsKICAgICAgICAgc2l6ZV90IGVtcHR5U2l6ZSA9IGxhLnVzZWRTaXplKCk7Ci0gICAgICAgIGF1dG8gc2lnZHRvciA9IGxhLmFsbG9jPFRlc3RVdGlsczo6U2lnbmFsaW5nRHRvcj4oKTsKKyAgICAgICAgYXV0byBzaWdkdG9yID0gbGEuY3JlYXRlPFRlc3RVdGlsczo6U2lnbmFsaW5nRHRvcj4oKTsKICAgICAgICAgc2lnZHRvci0+c2V0U2lnbmFsKCZkZXN0cm95ZWQpOwogICAgICAgICBFWFBFQ1RfRVEoMCwgZGVzdHJveWVkKTsKICAgICAgICAgRVhQRUNUX0xFKGVtcHR5U2l6ZSwgbGEudXNlZFNpemUoKSk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9PZmZzY3JlZW5CdWZmZXJQb29sVGVzdHMuY3BwIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvT2Zmc2NyZWVuQnVmZmVyUG9vbFRlc3RzLmNwcAppbmRleCAyMTg3NjU0Li5lOTZlOWJhIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9PZmZzY3JlZW5CdWZmZXJQb29sVGVzdHMuY3BwCisrKyBiL2xpYnMvaHd1aS90ZXN0cy91bml0L09mZnNjcmVlbkJ1ZmZlclBvb2xUZXN0cy5jcHAKQEAgLTE1LDExICsxNSwxMSBAQAogICovCiAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPFJlY3QuaD4KICNpbmNsdWRlIDxyZW5kZXJzdGF0ZS9PZmZzY3JlZW5CdWZmZXJQb29sLmg+CiAKICNpbmNsdWRlIDx0ZXN0cy9jb21tb24vVGVzdFV0aWxzLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBhbmRyb2lkOwogdXNpbmcgbmFtZXNwYWNlIGFuZHJvaWQ6OnVpcmVuZGVyZXI7CiAKIFRFU1QoT2Zmc2NyZWVuQnVmZmVyLCBjb21wdXRlSWRlYWxEaW1lbnNpb24pIHsKQEAgLTQzLDYgKzQzLDE4IEBACiAgICAgfSk7CiB9CiAKK1RFU1QoT2Zmc2NyZWVuQnVmZmVyLCBnZXRUZXh0dXJlQ29vcmRpbmF0ZXMpIHsKKyAgICBUZXN0VXRpbHM6OnJ1bk9uUmVuZGVyVGhyZWFkKFtdIChyZW5kZXJ0aHJlYWQ6OlJlbmRlclRocmVhZCYgdGhyZWFkKSB7CisgICAgICAgIE9mZnNjcmVlbkJ1ZmZlciBsYXllckFsaWduZWQodGhyZWFkLnJlbmRlclN0YXRlKCksIENhY2hlczo6Z2V0SW5zdGFuY2UoKSwgMjU2dSwgMjU2dSk7CisgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDEsIDEsIDApLAorICAgICAgICAgICAgICAgIGxheWVyQWxpZ25lZC5nZXRUZXh0dXJlQ29vcmRpbmF0ZXMoKSk7CisKKyAgICAgICAgT2Zmc2NyZWVuQnVmZmVyIGxheWVyVW5hbGlnbmVkKHRocmVhZC5yZW5kZXJTdGF0ZSgpLCBDYWNoZXM6OmdldEluc3RhbmNlKCksIDIwMHUsIDIyNXUpOworICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAyMjUuMGYgLyAyNTYuMGYsIDIwMC4wZiAvIDI1Ni4wZiwgMCksCisgICAgICAgICAgICAgICAgbGF5ZXJVbmFsaWduZWQuZ2V0VGV4dHVyZUNvb3JkaW5hdGVzKCkpOworICAgIH0pOworfQorCiBURVNUKE9mZnNjcmVlbkJ1ZmZlclBvb2wsIGNvbnN0cnVjdCkgewogICAgIFRlc3RVdGlsczo6cnVuT25SZW5kZXJUaHJlYWQoW10gKHJlbmRlcnRocmVhZDo6UmVuZGVyVGhyZWFkJiB0aHJlYWQpIHsKICAgICAgICAgT2Zmc2NyZWVuQnVmZmVyUG9vbCBwb29sOwpAQCAtNTEsNyArNjMsNiBAQAogICAgICAgICBFWFBFQ1RfRVEoKHVpbnQzMl90KSBQcm9wZXJ0aWVzOjpsYXllclBvb2xTaXplLCBwb29sLmdldE1heFNpemUoKSkKICAgICAgICAgICAgICAgICA8PCAicG9vbCBtdXN0IHJlYWQgc2l6ZSBmcm9tIFByb3BlcnRpZXMiOwogICAgIH0pOwotCiB9CiAKIFRFU1QoT2Zmc2NyZWVuQnVmZmVyUG9vbCwgZ2V0UHV0Q2xlYXIpIHsKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy91bml0L1JlY29yZGluZ0NhbnZhc1Rlc3RzLmNwcCBiL2xpYnMvaHd1aS90ZXN0cy91bml0L1JlY29yZGluZ0NhbnZhc1Rlc3RzLmNwcAppbmRleCBiYTlkMTg1Li5mZjA5OGM4IDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdGVzdHMvdW5pdC9SZWNvcmRpbmdDYW52YXNUZXN0cy5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvUmVjb3JkaW5nQ2FudmFzVGVzdHMuY3BwCkBAIC00MSw2ICs0MSwyMiBAQAogICAgIHBsYXliYWNrT3BzKCpkbCwgW10oY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsgQUREX0ZBSUxVUkUoKTsgfSk7CiB9CiAKK1RFU1QoUmVjb3JkaW5nQ2FudmFzLCBjbGlwUmVjdCkgeworICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMTAwLCAxMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlKFNrQ2FudmFzOjprTWF0cml4Q2xpcF9TYXZlRmxhZyk7CisgICAgICAgIGNhbnZhcy5jbGlwUmVjdCgwLCAwLCAxMDAsIDEwMCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgNTAsIDUwLCBTa1BhaW50KCkpOworICAgICAgICBjYW52YXMuZHJhd1JlY3QoNTAsIDUwLCAxMDAsIDEwMCwgU2tQYWludCgpKTsKKyAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKKyAgICB9KTsKKworICAgIEFTU0VSVF9FUSgydSwgZGwtPmdldE9wcygpLnNpemUoKSkgPDwgIk11c3QgYmUgZXhhY3RseSB0d28gb3BzIjsKKyAgICBFWFBFQ1RfQ0xJUF9SRUNUKFJlY3QoMTAwLCAxMDApLCBkbC0+Z2V0T3BzKClbMF0tPmxvY2FsQ2xpcCk7CisgICAgRVhQRUNUX0NMSVBfUkVDVChSZWN0KDEwMCwgMTAwKSwgZGwtPmdldE9wcygpWzFdLT5sb2NhbENsaXApOworICAgIEVYUEVDVF9FUShkbC0+Z2V0T3BzKClbMF0tPmxvY2FsQ2xpcCwgZGwtPmdldE9wcygpWzFdLT5sb2NhbENsaXApCisgICAgICAgICAgICA8PCAiQ2xpcCBzaG91bGQgYmUgc2VyaWFsaXplZCBvbmNlIjsKK30KKwogVEVTVChSZWNvcmRpbmdDYW52YXMsIGRyYXdMaW5lcykgewogICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMTAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CiAgICAgICAgIFNrUGFpbnQgcGFpbnQ7CkBAIC01NCw3ICs3MCw3IEBACiAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6TGluZXNPcCwgb3AtPm9wSWQpOwogICAgIEVYUEVDVF9FUSg0LCAoKExpbmVzT3AqKW9wKS0+ZmxvYXRDb3VudCkKICAgICAgICAgICAgIDw8ICJmbG9hdCBjb3VudCBtdXN0IGJlIHJvdW5kZWQgZG93biB0byBjbG9zZXN0IG11bHRpcGxlIG9mIDQiOwotICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDIwLCAxMCksIG9wLT51bm1hcHBlZEJvdW5kcykKKyAgICBFWFBFQ1RfRVEoUmVjdCgyMCwgMTApLCBvcC0+dW5tYXBwZWRCb3VuZHMpCiAgICAgICAgICAgICA8PCAidW5tYXBwZWQgYm91bmRzIG11c3QgYmUgc2l6ZSBvZiBsaW5lLCBhbmQgbm90IG91dHNldCBmb3Igc3Ryb2tlIHdpZHRoIjsKIH0KIApAQCAtNjYsNyArODIsNyBAQAogICAgIEFTU0VSVF9FUSgxdSwgZGwtPmdldE9wcygpLnNpemUoKSkgPDwgIk11c3QgYmUgZXhhY3RseSBvbmUgb3AiOwogICAgIGF1dG8gb3AgPSAqKGRsLT5nZXRPcHMoKVswXSk7CiAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6UmVjdE9wLCBvcC5vcElkKTsKLSAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCAxMDAsIDIwMCksIG9wLmxvY2FsQ2xpcFJlY3QpOworICAgIEVYUEVDVF9FUShudWxscHRyLCBvcC5sb2NhbENsaXApOwogICAgIEVYUEVDVF9FUShSZWN0KDEwLCAyMCwgOTAsIDE4MCksIG9wLnVubWFwcGVkQm91bmRzKTsKIH0KIApAQCAtODMsNyArOTksNyBAQAogICAgIHBsYXliYWNrT3BzKCpkbCwgWyZjb3VudF0oY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsKICAgICAgICAgY291bnQrKzsKICAgICAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6VGV4dE9wLCBvcC5vcElkKTsKLSAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMjAwLCAyMDApLCBvcC5sb2NhbENsaXBSZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9wLmxvY2FsTWF0cml4LmlzSWRlbnRpdHkoKSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9wLnVubWFwcGVkQm91bmRzLmNvbnRhaW5zKDI1LCAxNSwgNTAsIDI1KSkKICAgICAgICAgICAgICAgICA8PCAiT3AgZXhwZWN0ZWQgdG8gYmUgMjUrIHBpeGVscyB3aWRlLCAxMCsgcGl4ZWxzIHRhbGwiOwpAQCAtMTg0LDggKzIwMCw4IEBACiAgICAgICAgICAgICBBU1NFUlRfRVEoUmVjb3JkZWRPcElkOjpSZWN0T3AsIG9wLm9wSWQpOwogICAgICAgICAgICAgQVNTRVJUX05FKG51bGxwdHIsIG9wLnBhaW50KTsKICAgICAgICAgICAgIEVYUEVDVF9FUShTS19Db2xvckJMVUUsIG9wLnBhaW50LT5nZXRDb2xvcigpKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDEwMCwgMjAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTAwLCAyMDApLCBvcC5sb2NhbENsaXBSZWN0KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMjAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CiAKICAgICAgICAgICAgIE1hdHJpeDQgZXhwZWN0ZWRNYXRyaXg7CiAgICAgICAgICAgICBleHBlY3RlZE1hdHJpeC5sb2FkSWRlbnRpdHkoKTsKQEAgLTE5Myw4ICsyMDksOCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUX0VRKFJlY29yZGVkT3BJZDo6Qml0bWFwT3AsIG9wLm9wSWQpOwogICAgICAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLnBhaW50KTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDI1LCAyNSksIG9wLnVubWFwcGVkQm91bmRzKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDEwMCwgMjAwKSwgb3AubG9jYWxDbGlwUmVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgyNSwgMjUpLCBvcC51bm1hcHBlZEJvdW5kcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgb3AubG9jYWxDbGlwKTsKIAogICAgICAgICAgICAgTWF0cml4NCBleHBlY3RlZE1hdHJpeDsKICAgICAgICAgICAgIGV4cGVjdGVkTWF0cml4LmxvYWRUcmFuc2xhdGUoMjUsIDI1LCAwKTsKQEAgLTIwOCw3ICsyMjQsNyBAQAogCiBURVNUKFJlY29yZGluZ0NhbnZhcywgc2F2ZUxheWVyX3NpbXBsZSkgewogICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMjAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7Ci0gICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMCwgMjAsIDE5MCwgMTgwLCAxMjgsIFNrQ2FudmFzOjprQVJHQl9DbGlwTGF5ZXJfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMTAsIDIwLCAxOTAsIDE4MCwgMTI4LCBTa0NhbnZhczo6a0NsaXBUb0xheWVyX1NhdmVGbGFnKTsKICAgICAgICAgY2FudmFzLmRyYXdSZWN0KDEwLCAyMCwgMTkwLCAxODAsIFNrUGFpbnQoKSk7CiAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CiAgICAgfSk7CkBAIC0yMTksMTIgKzIzNSwxMiBAQAogICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjb3JkZWRPcElkOjpCZWdpbkxheWVyT3AsIG9wLm9wSWQpOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCAxOTAsIDE4MCksIG9wLnVubWFwcGVkQm91bmRzKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDIwMCwgMjAwKSwgb3AubG9jYWxDbGlwUmVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgb3AubG9jYWxDbGlwKTsKICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG9wLmxvY2FsTWF0cml4LmlzSWRlbnRpdHkoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY29yZGVkT3BJZDo6UmVjdE9wLCBvcC5vcElkKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDE4MCwgMTYwKSwgb3AubG9jYWxDbGlwUmVjdCk7CisgICAgICAgICAgICBFWFBFQ1RfQ0xJUF9SRUNUKFJlY3QoMTgwLCAxNjApLCBvcC5sb2NhbENsaXApOwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMTAsIDIwLCAxOTAsIDE4MCksIG9wLnVubWFwcGVkQm91bmRzKTsKICAgICAgICAgICAgIGV4cGVjdGVkTWF0cml4LmxvYWRUcmFuc2xhdGUoLTEwLCAtMjAsIDApOwogICAgICAgICAgICAgRVhQRUNUX01BVFJJWF9BUFBST1hfRVEoZXhwZWN0ZWRNYXRyaXgsIG9wLmxvY2FsTWF0cml4KTsKQEAgLTI0MCwxMiArMjU2LDc4IEBACiAgICAgRVhQRUNUX0VRKDMsIGNvdW50KTsKIH0KIAorVEVTVChSZWNvcmRpbmdDYW52YXMsIHNhdmVMYXllcl9taXNzaW5nUmVzdG9yZSkgeworICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMjAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgwLCAwLCAyMDAsIDIwMCwgMTI4LCBTa0NhbnZhczo6a0NsaXBUb0xheWVyX1NhdmVGbGFnKTsKKyAgICAgICAgY2FudmFzLmRyYXdSZWN0KDAsIDAsIDIwMCwgMjAwLCBTa1BhaW50KCkpOworICAgICAgICAvLyBOb3RlOiByZXN0b3JlIG9taXR0ZWQsIHNob3VsZG4ndCByZXN1bHQgaW4gdW5tYXRjaGVkIHNhdmUKKyAgICB9KTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIHBsYXliYWNrT3BzKCpkbCwgWyZjb3VudF0oY29uc3QgUmVjb3JkZWRPcCYgb3ApIHsKKyAgICAgICAgaWYgKGNvdW50KysgPT0gMikgeworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY29yZGVkT3BJZDo6RW5kTGF5ZXJPcCwgb3Aub3BJZCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBFWFBFQ1RfRVEoMywgY291bnQpIDw8ICJNaXNzaW5nIGEgcmVzdG9yZSBzaG91bGRuJ3QgcmVzdWx0IGluIGFuIHVubWF0Y2hlZCBzYXZlTGF5ZXIiOworfQorCitURVNUKFJlY29yZGluZ0NhbnZhcywgc2F2ZUxheWVyX3NpbXBsZVVuY2xpcHBlZCkgeworICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMjAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMCwgMjAsIDE5MCwgMTgwLCAxMjgsIChTa0NhbnZhczo6U2F2ZUZsYWdzKTApOyAvLyB1bmNsaXBwZWQKKyAgICAgICAgY2FudmFzLmRyYXdSZWN0KDEwLCAyMCwgMTkwLCAxODAsIFNrUGFpbnQoKSk7CisgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CisgICAgfSk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBwbGF5YmFja09wcygqZGwsIFsmY291bnRdKGNvbnN0IFJlY29yZGVkT3AmIG9wKSB7CisgICAgICAgIHN3aXRjaChjb3VudCsrKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWNvcmRlZE9wSWQ6OkJlZ2luVW5jbGlwcGVkTGF5ZXJPcCwgb3Aub3BJZCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgxMCwgMjAsIDE5MCwgMTgwKSwgb3AudW5tYXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX0VRKG51bGxwdHIsIG9wLmxvY2FsQ2xpcCk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShvcC5sb2NhbE1hdHJpeC5pc0lkZW50aXR5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWNvcmRlZE9wSWQ6OlJlY3RPcCwgb3Aub3BJZCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEobnVsbHB0ciwgb3AubG9jYWxDbGlwKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwLCAyMCwgMTkwLCAxODApLCBvcC51bm1hcHBlZEJvdW5kcyk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShvcC5sb2NhbE1hdHJpeC5pc0lkZW50aXR5KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWNvcmRlZE9wSWQ6OkVuZFVuY2xpcHBlZExheWVyT3AsIG9wLm9wSWQpOworICAgICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGFzc2VydGluZyByZWNvcmRpbmcgc3RhdGUgZGF0YSAtIGl0J3Mgbm90IHVzZWQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQUREX0ZBSUxVUkUoKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIEVYUEVDVF9FUSgzLCBjb3VudCk7Cit9CisKK1RFU1QoUmVjb3JkaW5nQ2FudmFzLCBzYXZlTGF5ZXJfYWRkQ2xpcEZsYWcpIHsKKyAgICBhdXRvIGRsID0gVGVzdFV0aWxzOjpjcmVhdGVEaXNwbGF5TGlzdDxSZWNvcmRpbmdDYW52YXM+KDIwMCwgMjAwLCBbXShSZWNvcmRpbmdDYW52YXMmIGNhbnZhcykgeworICAgICAgICBjYW52YXMuc2F2ZShTa0NhbnZhczo6a01hdHJpeENsaXBfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuY2xpcFJlY3QoMTAsIDIwLCAxOTAsIDE4MCwgU2tSZWdpb246OmtJbnRlcnNlY3RfT3ApOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMTAsIDIwLCAxOTAsIDE4MCwgMTI4LCAoU2tDYW52YXM6OlNhdmVGbGFncykwKTsgLy8gdW5jbGlwcGVkCisgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgxMCwgMjAsIDE5MCwgMTgwLCBTa1BhaW50KCkpOworICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgIH0pOworICAgIGludCBjb3VudCA9IDA7CisgICAgcGxheWJhY2tPcHMoKmRsLCBbJmNvdW50XShjb25zdCBSZWNvcmRlZE9wJiBvcCkgeworICAgICAgICBpZiAoY291bnQrKyA9PSAwKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjb3JkZWRPcElkOjpCZWdpbkxheWVyT3AsIG9wLm9wSWQpCisgICAgICAgICAgICAgICAgICAgIDw8ICJDbGlwICsgdW5jbGlwcGVkIHNhdmVMYXllciBzaG91bGQgcmVzdWx0IGluIGEgY2xpcHBlZCBsYXllciI7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBFWFBFQ1RfRVEoMywgY291bnQpOworfQorCiBURVNUKFJlY29yZGluZ0NhbnZhcywgc2F2ZUxheWVyX3ZpZXdwb3J0Q3JvcCkgewogICAgIGF1dG8gZGwgPSBUZXN0VXRpbHM6OmNyZWF0ZURpc3BsYXlMaXN0PFJlY29yZGluZ0NhbnZhcz4oMjAwLCAyMDAsIFtdKFJlY29yZGluZ0NhbnZhcyYgY2FudmFzKSB7CiAgICAgICAgIC8vIHNob3VsZG4ndCBtYXR0ZXIsIHNpbmNlIHNhdmVMYXllciB3aWxsIGNsaXAgdG8gaXRzIGJvdW5kcwogICAgICAgICBjYW52YXMuY2xpcFJlY3QoLTEwMDAsIC0xMDAwLCAxMDAwLCAxMDAwLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOwogCi0gICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMDAsIDEwMCwgMzAwLCAzMDAsIDEyOCwgU2tDYW52YXM6OmtBUkdCX0NsaXBMYXllcl9TYXZlRmxhZyk7CisgICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgxMDAsIDEwMCwgMzAwLCAzMDAsIDEyOCwgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZyk7CiAgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgwLCAwLCA0MDAsIDQwMCwgU2tQYWludCgpKTsKICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKICAgICB9KTsKQEAgLTI1NCw5ICszMzYsOSBAQAogICAgICAgICBpZiAoY291bnQrKyA9PSAxKSB7CiAgICAgICAgICAgICBNYXRyaXg0IGV4cGVjdGVkTWF0cml4OwogICAgICAgICAgICAgRVhQRUNUX0VRKFJlY29yZGVkT3BJZDo6UmVjdE9wLCBvcC5vcElkKTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDEwMCwgMTAwKSwgb3AubG9jYWxDbGlwUmVjdCkgPDwgIlJlY29yZGVkIGNsaXAgcmVjdCBzaG91bGQgYmUiCi0gICAgICAgICAgICAgICAgICAgICIgaW50ZXJzZWN0aW9uIG9mIHZpZXdwb3J0IGFuZCBzYXZlTGF5ZXIgYm91bmRzLCBpbiBsYXllciBzcGFjZSI7Ci0gICAgICAgICAgICBFWFBFQ1RfRVEoUmVjdCgwLCAwLCA0MDAsIDQwMCksIG9wLnVubWFwcGVkQm91bmRzKTsKKyAgICAgICAgICAgIEVYUEVDVF9DTElQX1JFQ1QoUmVjdCgxMDAsIDEwMCksIG9wLmxvY2FsQ2xpcCkgLy8gUmVjb3JkZWQgY2xpcCByZWN0IHNob3VsZCBiZQorICAgICAgICAgICAgLy8gaW50ZXJzZWN0aW9uIG9mIHZpZXdwb3J0IGFuZCBzYXZlTGF5ZXIgYm91bmRzLCBpbiBsYXllciBzcGFjZTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDQwMCwgNDAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgZXhwZWN0ZWRNYXRyaXgubG9hZFRyYW5zbGF0ZSgtMTAwLCAtMTAwLCAwKTsKICAgICAgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKGV4cGVjdGVkTWF0cml4LCBvcC5sb2NhbE1hdHJpeCk7CiAgICAgICAgIH0KQEAgLTI3MSw3ICszNTMsNyBAQAogICAgICAgICBjYW52YXMucm90YXRlKDQ1KTsKICAgICAgICAgY2FudmFzLnRyYW5zbGF0ZSgtNTAsIC01MCk7CiAKLSAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDAsIDAsIDEwMCwgMTAwLCAxMjgsIFNrQ2FudmFzOjprQVJHQl9DbGlwTGF5ZXJfU2F2ZUZsYWcpOworICAgICAgICBjYW52YXMuc2F2ZUxheWVyQWxwaGEoMCwgMCwgMTAwLCAxMDAsIDEyOCwgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZyk7CiAgICAgICAgIGNhbnZhcy5kcmF3UmVjdCgwLCAwLCAxMDAsIDEwMCwgU2tQYWludCgpKTsKICAgICAgICAgY2FudmFzLnJlc3RvcmUoKTsKIApAQCAtMjgxLDggKzM2Myw4IEBACiAgICAgcGxheWJhY2tPcHMoKmRsLCBbJmNvdW50XShjb25zdCBSZWNvcmRlZE9wJiBvcCkgewogICAgICAgICBpZiAoY291bnQrKyA9PSAxKSB7CiAgICAgICAgICAgICBFWFBFQ1RfRVEoUmVjb3JkZWRPcElkOjpSZWN0T3AsIG9wLm9wSWQpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgMTAwLCAxMDApLCBvcC5sb2NhbENsaXBSZWN0KTsKLSAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDAsIDAsIDEwMCwgMTAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOworICAgICAgICAgICAgRVhQRUNUX0NMSVBfUkVDVChSZWN0KDEwMCwgMTAwKSwgb3AubG9jYWxDbGlwKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShSZWN0KDEwMCwgMTAwKSwgb3AudW5tYXBwZWRCb3VuZHMpOwogICAgICAgICAgICAgRVhQRUNUX01BVFJJWF9BUFBST1hfRVEoTWF0cml4NDo6aWRlbnRpdHkoKSwgb3AubG9jYWxNYXRyaXgpCiAgICAgICAgICAgICAgICAgICAgIDw8ICJSZWNvcmRlZCBvcCBzaG91bGRuJ3Qgc2VlIGFueSBjYW52YXMgdHJhbnNmb3JtIGJlZm9yZSB0aGUgc2F2ZUxheWVyIjsKICAgICAgICAgfQpAQCAtMjk4LDcgKzM4MCw3IEBACiAgICAgICAgIGNhbnZhcy50cmFuc2xhdGUoLTIwMCwgLTIwMCk7CiAKICAgICAgICAgLy8gYXJlYSBvZiBzYXZlTGF5ZXIgd2lsbCBiZSBjbGlwcGVkIHRvIHBhcmVudCB2aWV3cG9ydCwgc28gd2UgYXNrIGZvciA0MDB4NDAwLi4uCi0gICAgICAgIGNhbnZhcy5zYXZlTGF5ZXJBbHBoYSgwLCAwLCA0MDAsIDQwMCwgMTI4LCBTa0NhbnZhczo6a0FSR0JfQ2xpcExheWVyX1NhdmVGbGFnKTsKKyAgICAgICAgY2FudmFzLnNhdmVMYXllckFscGhhKDAsIDAsIDQwMCwgNDAwLCAxMjgsIFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpOwogICAgICAgICBjYW52YXMuZHJhd1JlY3QoMCwgMCwgNDAwLCA0MDAsIFNrUGFpbnQoKSk7CiAgICAgICAgIGNhbnZhcy5yZXN0b3JlKCk7CiAKQEAgLTMxMiw4ICszOTQsMTcgQEAKIAogICAgICAgICAgICAgLy8gLi4uYW5kIGdldCBhYm91dCA1OC42LCA1OC42LCAzNDEuNCAzNDEuNCwgYmVjYXVzZSB0aGUgYm91bmRzIGFyZSBjbGlwcGVkIGJ5CiAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IDIwMHgyMDAgdmlld3BvcnQsIGJ1dCBwcmlvciB0byByb3RhdGlvbgotICAgICAgICAgICAgRVhQRUNUX1JFQ1RfQVBQUk9YX0VRKFJlY3QoNTguNTc4NjQsIDU4LjU3ODY0LCAzNDEuNDIxMzYsIDM0MS40MjEzNiksIG9wLmxvY2FsQ2xpcFJlY3QpOwotICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoMCwgMCwgNDAwLCA0MDApLCBvcC51bm1hcHBlZEJvdW5kcyk7CisgICAgICAgICAgICBBU1NFUlRfTkUobnVsbHB0ciwgb3AubG9jYWxDbGlwKTsKKyAgICAgICAgICAgIEFTU0VSVF9FUShDbGlwTW9kZTo6UmVjdGFuZ2xlLCBvcC5sb2NhbENsaXAtPm1vZGUpOworICAgICAgICAgICAgLy8gTk9URTogdGhpcyBjaGVjayByZWxpZXMgb24gc2F2ZUxheWVyIGFsdGVyaW5nIHRoZSBjbGlwIHBvc3Qtdmlld3BvcnQgaW5pdC4gVGhpcworICAgICAgICAgICAgLy8gY2F1c2VzIHRoZSBjbGlwIHRvIGJlIHJlY29yZGVkIGJ5IGNvbnRhaW5lZCBkcmF3IGNvbW1hbmRzLCB0aG91Z2ggaXQncyBub3QgbmVjZXNzYXJ5CisgICAgICAgICAgICAvLyBzaW5jZSB0aGUgc2FtZSBjbGlwIHdpbGwgYmUgY29tcHV0ZWQgYXQgZHJhdyB0aW1lLiBJZiBzdWNoIGEgY2hhbmdlIGlzIG1hZGUsIHRoaXMKKyAgICAgICAgICAgIC8vIGNoZWNrIGNvdWxkIGJlIGRvbmUgYXQgcmVjb3JkIHRpbWUgYnkgcXVlcnlpbmcgdGhlIGNsaXAsIG9yIHRoZSBjbGlwIGNvdWxkIGJlIGFsdGVyZWQKKyAgICAgICAgICAgIC8vIHNsaWdodGx5IHNvIHRoYXQgaXQgaXMgc2VyaWFsaXplZC4KKyAgICAgICAgICAgIEVYUEVDVF9SRUNUX0FQUFJPWF9FUShSZWN0KDU4LjU3ODY0LCA1OC41Nzg2NCwgMzQxLjQyMTM2LCAzNDEuNDIxMzYpLAorICAgICAgICAgICAgICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBDbGlwUmVjdCo+KG9wLmxvY2FsQ2xpcCkpLT5yZWN0KTsKKworICAgICAgICAgICAgRVhQRUNUX0VRKFJlY3QoNDAwLCA0MDApLCBvcC51bm1hcHBlZEJvdW5kcyk7CiAgICAgICAgICAgICBleHBlY3RlZE1hdHJpeC5sb2FkSWRlbnRpdHkoKTsKICAgICAgICAgICAgIEVYUEVDVF9NQVRSSVhfQVBQUk9YX0VRKGV4cGVjdGVkTWF0cml4LCBvcC5sb2NhbE1hdHJpeCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS90ZXN0cy91bml0L1ZlY3RvckRyYXdhYmxlVGVzdHMuY3BwIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvVmVjdG9yRHJhd2FibGVUZXN0cy5jcHAKaW5kZXggNzdkZDczYS4uNzIwODU0NyAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3Rlc3RzL3VuaXQvVmVjdG9yRHJhd2FibGVUZXN0cy5jcHAKKysrIGIvbGlicy9od3VpL3Rlc3RzL3VuaXQvVmVjdG9yRHJhd2FibGVUZXN0cy5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiAjaW5jbHVkZSAiUGF0aFBhcnNlci5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCiAjaW5jbHVkZSAidXRpbHMvTWF0aFV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIgogCkBAIC05OCw2ICs5OSw2NSBAQAogICAgICAgICB9CiAgICAgfSwKIAorICAgIC8vIENoZWNrIGJveCBWZWN0b3JEcmF3YWJsZSBwYXRoIGRhdGEKKyAgICB7CisgICAgICAgIC8vIFBhdGgKKyAgICAgICAgIk0gMC4wLC0xLjAgbCAwLjAsMC4wIGMgMC41NTIyODQ3NDk4LDAuMCAxLjAsMC40NDc3MTUyNTAyIDEuMCwxLjAgbCAwLjAsMC4wIGMgMC4wLDAuNTUyMjg0NzQ5OCAtMC40NDc3MTUyNTAyLDEuMCAtMS4wLDEuMCBsIDAuMCwwLjAgYyAtMC41NTIyODQ3NDk4LDAuMCAtMS4wLC0wLjQ0NzcxNTI1MDIgLTEuMCwtMS4wIGwgMC4wLDAuMCBjIDAuMCwtMC41NTIyODQ3NDk4IDAuNDQ3NzE1MjUwMiwtMS4wIDEuMCwtMS4wIFogTSA3LjAsLTkuMCBjIDAuMCwwLjAgLTE0LjAsMC4wIC0xNC4wLDAuMCBjIC0xLjEwNDQ5MjE4NzUsMC4wIC0yLjAsMC44OTU1MDc4MTI1IC0yLjAsMi4wIGMgMC4wLDAuMCAwLjAsMTQuMCAwLjAsMTQuMCBjIDAuMCwxLjEwNDQ5MjE4NzUgMC44OTU1MDc4MTI1LDIuMCAyLjAsMi4wIGMgMC4wLDAuMCAxNC4wLDAuMCAxNC4wLDAuMCBjIDEuMTA0NDkyMTg3NSwwLjAgMi4wLC0wLjg5NTUwNzgxMjUgMi4wLC0yLjAgYyAwLjAsMC4wIDAuMCwtMTQuMCAwLjAsLTE0LjAgYyAwLjAsLTEuMTA0NDkyMTg3NSAtMC44OTU1MDc4MTI1LC0yLjAgLTIuMCwtMi4wIGMgMC4wLDAuMCAwLjAsMC4wIDAuMCwwLjAgWiIsCisgICAgICAgIHsKKyAgICAgICAgICAgIHsnTScsICdsJywgJ2MnLCAnbCcsICdjJywgJ2wnLCAnYycsICdsJywgJ2MnLCAnWicsICdNJywgJ2MnLCAnYycsICdjJywgJ2MnLCAnYycsICdjJywgJ2MnLCAnYycsICdjJywgJ1onfSwKKyAgICAgICAgICAgIHsyLCAyLCA2LCAyLCA2LCAyLCA2LCAyLCA2LCAwLCAyLCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCAwfSwKKyAgICAgICAgICAgIHswLjAsIC0xLjAsIDAuMCwgMC4wLCAwLjU1MjI4NDgsIDAuMCwgMS4wLCAwLjQ0NzcxNTI1LCAxLjAsIDEuMCwgMC4wLCAwLjAsIDAuMCwgMC41NTIyODQ4LCAtMC40NDc3MTUyNSwgMS4wLCAtMS4wLCAxLjAsIDAuMCwgMC4wLCAtMC41NTIyODQ4LCAwLjAsIC0xLjAsIC0wLjQ0NzcxNTI1LCAtMS4wLCAtMS4wLCAwLjAsIDAuMCwgMC4wLCAtMC41NTIyODQ4LCAwLjQ0NzcxNTI1LCAtMS4wLCAxLjAsIC0xLjAsIDcuMCwgLTkuMCwgMC4wLCAwLjAsIC0xNC4wLCAwLjAsIC0xNC4wLCAwLjAsIC0xLjEwNDQ5MjIsIDAuMCwgLTIuMCwgMC44OTU1MDc4LCAtMi4wLCAyLjAsIDAuMCwgMC4wLCAwLjAsIDE0LjAsIDAuMCwgMTQuMCwgMC4wLCAxLjEwNDQ5MjIsIDAuODk1NTA3OCwgMi4wLCAyLjAsIDIuMCwgMC4wLCAwLjAsIDE0LjAsIDAuMCwgMTQuMCwgMC4wLCAxLjEwNDQ5MjIsIDAuMCwgMi4wLCAtMC44OTU1MDc4LCAyLjAsIC0yLjAsIDAuMCwgMC4wLCAwLjAsIC0xNC4wLCAwLjAsIC0xNC4wLCAwLjAsIC0xLjEwNDQ5MjIsIC0wLjg5NTUwNzgsIC0yLjAsIC0yLjAsIC0yLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjB9LAorICAgICAgICB9LAorICAgICAgICBbXShTa1BhdGgqIG91dFBhdGgpIHsKKyAgICAgICAgICAgIG91dFBhdGgtPm1vdmVUbygwLjAsIC0xLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckxpbmVUbygwLjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjU1MjI4NDgsIDAuMCwgMS4wLCAwLjQ0NzcxNTI1LCAxLjAsIDEuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yTGluZVRvKDAuMCwgMC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMC41NTIyODQ4LCAtMC40NDc3MTUyNSwgMS4wLCAtMS4wLCAxLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckxpbmVUbygwLjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygtMC41NTIyODQ4LCAwLjAsIC0xLjAsIC0wLjQ0NzcxNTI1LCAtMS4wLCAtMS4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJMaW5lVG8oMC4wLCAwLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAtMC41NTIyODQ4LCAwLjQ0NzcxNTI1LCAtMS4wLCAxLjAsIC0xLjApOworICAgICAgICAgICAgb3V0UGF0aC0+Y2xvc2UoKTsKKyAgICAgICAgICAgIG91dFBhdGgtPm1vdmVUbygwLjAsIC0xLjApOworICAgICAgICAgICAgb3V0UGF0aC0+bW92ZVRvKDcuMCwgLTkuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjAsIDAuMCwgLTE0LjAsIDAuMCwgLTE0LjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygtMS4xMDQ0OTIyLCAwLjAsIC0yLjAsIDAuODk1NTA3OCwgLTIuMCwgMi4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMC4wLCAwLjAsIDE0LjAsIDAuMCwgMTQuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygwLjAsIDEuMTA0NDkyMiwgMC44OTU1MDc4LCAyLjAsIDIuMCwgMi4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMC4wLCAxNC4wLCAwLjAsIDE0LjAsIDAuMCk7CisgICAgICAgICAgICBvdXRQYXRoLT5yQ3ViaWNUbygxLjEwNDQ5MjIsIDAuMCwgMi4wLCAtMC44OTU1MDc4LCAyLjAsIC0yLjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAwLjAsIDAuMCwgLTE0LjAsIDAuMCwgLTE0LjApOworICAgICAgICAgICAgb3V0UGF0aC0+ckN1YmljVG8oMC4wLCAtMS4xMDQ0OTIyLCAtMC44OTU1MDc4LCAtMi4wLCAtMi4wLCAtMi4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPnJDdWJpY1RvKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApOworICAgICAgICAgICAgb3V0UGF0aC0+Y2xvc2UoKTsKKyAgICAgICAgICAgIG91dFBhdGgtPm1vdmVUbyg3LjAsIC05LjApOworICAgICAgICB9CisgICAgfSwKKworICAgIC8vIHBpZTEgaW4gcHJvZ3Jlc3MgYmFyCisgICAgeworICAgICAgICAiTTMwMCw3MCBhMjMwLDIzMCAwIDEsMCAxLDAgeiIsCisgICAgICAgIHsKKyAgICAgICAgICAgICB7J00nLCAnYScsICd6JywgfSwKKyAgICAgICAgICAgICB7MiwgNywgMCwgfSwKKyAgICAgICAgICAgICB7MzAwLjAsIDcwLjAsIDIzMC4wLCAyMzAuMCwgMC4wLCAxLjAsIDAuMCwgMS4wLCAwLjAsIH0sCisgICAgICAgIH0sCisgICAgICAgIFtdKFNrUGF0aCogb3V0UGF0aCkgeworICAgICAgICAgICAgb3V0UGF0aC0+bW92ZVRvKDMwMC4wLCA3MC4wKTsKKyAgICAgICAgICAgIG91dFBhdGgtPmN1YmljVG8oMjM5LjA2Njk3Nzk0MjAzNzA2LCA3MC4xMzI0NjM0MDQ0MzQ5OSwgMTgwLjYxNjQzOTY0NDkyNjcsIDk0LjQ3MzgzMTE1OTUzNDg1LCAxMzcuNjAwNDkxMzYwMjIxMSwgMTM3LjYzMDI3ODE0OTk1ODUpOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbyg5NC41ODQ1NDMwNzU1MTU1MSwgMTgwLjc4NjcyNTE0MDM4MjE1LCA3MC40MzM5MDQxMjg0MjI3NSwgMjM5LjMxNjMyNjYyNDIzMDgsIDcwLjUwMDEzNTg2OTc2NTg3LCAzMDAuMjQ5NDU2NjY4NzgxNyk7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDcwLjU2NjM2NzYxMTEwODk5LCAzNjEuMTgyNTg2NzEzMzMyNiwgOTQuODQ0MTg3NzU1NTAyNDksIDQxOS42NTk1NDg1MDU1NDE0NywgMTM3Ljk1Mzg1Mjc1ODYyMDQsIDQ2Mi43MjIzODA1ODgzMDkzNik7CisgICAgICAgICAgICBvdXRQYXRoLT5jdWJpY1RvKDE4MS4wNjM1MTc3NjE3MzgyNywgNTA1Ljc4NTIxMjY3MTA3NzIsIDIzOS41NjY4MzM5NTk5MDU2LCA1MjkuOTk5NDU2NTIxMDk3LCAzMDAuNDk5OTk5OTk5OTk5OTQsIDUyOS45OTk0NTY1MjEwOTcpOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbygzNjEuNDMzMTY2MDQwMDk0MzYsIDUyOS45OTk0NTY1MjEwOTcsIDQxOS45MzY0ODIyMzgyNjE3NiwgNTA1Ljc4NTIxMjY3MTA3NzI2LCA0NjMuMDQ2MTQ3MjQxMzc5NywgNDYyLjcyMjM4MDU4ODMwOTMpOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbyg1MDYuMTU1ODEyMjQ0NDk3NiwgNDE5LjY1OTU0ODUwNTU0MTM1LCA1MzAuNDMzNjMyMzg4ODkxLCAzNjEuMTgyNTg2NzEzMzMyNCwgNTMwLjQ5OTg2NDEzMDIzNDEsIDMwMC4yNDk0NTY2Njg3ODE1KTsKKyAgICAgICAgICAgIG91dFBhdGgtPmN1YmljVG8oNTMwLjU2NjA5NTg3MTU3NzEsIDIzOS4zMTYzMjY2MjQyMzA1NiwgNTA2LjQxNTQ1NjkyNDQ4NDQsIDE4MC43ODY3MjUxNDAzODE5LCA0NjMuMzk5NTA4NjM5Nzc4NywgMTM3LjYzMDI3ODE0OTk1ODMpOworICAgICAgICAgICAgb3V0UGF0aC0+Y3ViaWNUbyg0MjAuMzgzNTYwMzU1MDczLCA5NC40NzM4MzExNTk1MzQ2OCwgMzYxLjkzMzAyMjA1Nzk2MjU1LCA3MC4xMzI0NjM0MDQ0MzQ5MiwgMzAwLjk5OTk5OTk5OTk5OTYsIDcwLjAwMDAwMDAwMDAwMDAzKTsKKyAgICAgICAgICAgIG91dFBhdGgtPmNsb3NlKCk7CisgICAgICAgICAgICBvdXRQYXRoLT5tb3ZlVG8oMzAwLjAsIDcwLjApOworICAgICAgICB9CisgICAgfSwKKwogICAgIC8vIFJhbmRvbSBsb25nIGRhdGEKICAgICB7CiAgICAgICAgIC8vIFBhdGgKQEAgLTE3OCw2ICsyMzgsNyBAQAogICAgIHsiMS0yZTM0NTY3IiwgZmFsc2V9CiB9OwogCisKIHN0YXRpYyBib29sIGhhc1NhbWVWZXJicyhjb25zdCBQYXRoRGF0YSYgZnJvbSwgY29uc3QgUGF0aERhdGEmIHRvKSB7CiAgICAgcmV0dXJuIGZyb20udmVyYnMgPT0gdG8udmVyYnMgJiYgZnJvbS52ZXJiU2l6ZXMgPT0gdG8udmVyYlNpemVzOwogfQpAQCAtMjg0LDYgKzM0NSw0OSBAQAogICAgIH0KIH0KIAorVEVTVChWZWN0b3JEcmF3YWJsZSwgbWF0cml4U2NhbGUpIHsKKyAgICBzdHJ1Y3QgTWF0cml4QW5kU2NhbGUgeworICAgICAgICBmbG9hdCBidWZmZXJbOV07CisgICAgICAgIGZsb2F0IG1hdHJpeFNjYWxlOworICAgIH07CiAKKyAgICBjb25zdCBNYXRyaXhBbmRTY2FsZSBzTWF0cml4QW5kU2NhbGVzW10geworICAgICAgICB7CisgICAgICAgICAgICB7MS4wZiwgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiwgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAxLjAKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgezEuMGYsIDAuMGYsIDI0MC4wZiwgMC4wZiwgMS4wZiwgMjQwLjBmLCAwLjBmLCAwLjBmLCAxLjBmfSwKKyAgICAgICAgICAgIDEuMGYsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIHsxLjVmLCAwLjBmLCAyNC4wZiwgMC4wZiwgMS41ZiwgMjQuMGYsIDAuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgMS41ZiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgezAuOTk5OTk5OTRmLCAwLjBmLCAzMDAuMGYsIDAuMGYsIDAuOTk5OTk5OTRmLCAxNTguNTc4NjRmLCAwLjBmLCAwLjBmLCAxLjBmfSwKKyAgICAgICAgICAgIDAuOTk5OTk5OTRmLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB7MC43MDcxMDY3ZiwgMC43MDcxMDY3ZiwgNDAyLjUzMDVmLCAtMC43MDcxMDY3ZiwgMC43MDcxMDY3ZiwgMTY5LjE4NTI0ZiwgMC4wZiwgMC4wZiwgMS4wZn0sCisgICAgICAgICAgICAwLjk5OTk5OTk0ZiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgezAuMGYsIDAuOTk5OTk5OWYsIDQ4Mi41MzA1ZiwgLTAuOTk5OTk5OWYsIDAuMGYsIDEwNC4xODUyNWYsIDAuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgMC45OTk5OTk5ZiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgey0wLjM1ODEwNjM3ZiwgLTAuOTMzNjgwODNmLCA3Ni41NTgyMWYsIDAuOTMzNjgwODNmLCAtMC4zNTgxMDYzN2YsIDg5LjUzODUwNmYsIDAuMGYsIDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgMS4wMDAwMDAxZiwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgZm9yIChNYXRyaXhBbmRTY2FsZSBtYXRyaXhBbmRTY2FsZSA6IHNNYXRyaXhBbmRTY2FsZXMpIHsKKyAgICAgICAgU2tNYXRyaXggbWF0cml4OworICAgICAgICBtYXRyaXguc2V0OShtYXRyaXhBbmRTY2FsZS5idWZmZXIpOworICAgICAgICBmbG9hdCBhY3R1YWxNYXRyaXhTY2FsZSA9IFZlY3RvckRyYXdhYmxlOjpQYXRoOjpnZXRNYXRyaXhTY2FsZShtYXRyaXgpOworICAgICAgICBFWFBFQ1RfRVEobWF0cml4QW5kU2NhbGUubWF0cml4U2NhbGUsIGFjdHVhbE1hdHJpeFNjYWxlKTsKKyAgICB9Cit9CiB9OyAvLyBuYW1lc3BhY2UgdWlyZW5kZXJlcgogfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS91dGlscy9MaW5lYXJBbGxvY2F0b3IuaCBiL2xpYnMvaHd1aS91dGlscy9MaW5lYXJBbGxvY2F0b3IuaAppbmRleCBlMWM2ZjZjLi5kY2JjMGRkIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdXRpbHMvTGluZWFyQWxsb2NhdG9yLmgKKysrIGIvbGlicy9od3VpL3V0aWxzL0xpbmVhckFsbG9jYXRvci5oCkBAIC01NiwxMiArNTYsMTIgQEAKICAgICB2b2lkKiBhbGxvYyhzaXplX3Qgc2l6ZSk7CiAKICAgICAvKioKLSAgICAgKiBBbGxvY2F0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHRlbXBsYXRlIHR5cGUgd2l0aCB0aGUgZGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgICAqIEFsbG9jYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgdGVtcGxhdGUgdHlwZSB3aXRoIHRoZSBnaXZlbiBjb25zdHJ1Y3Rpb24gcGFyYW1ldGVycwogICAgICAqIGFuZCBhZGRzIGl0IHRvIHRoZSBhdXRvbWF0aWMgZGVzdHJ1Y3Rpb24gbGlzdC4KICAgICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPgotICAgIFQqIGFsbG9jKCkgewotICAgICAgICBUKiByZXQgPSBuZXcgKCp0aGlzKSBUOworICAgIHRlbXBsYXRlPGNsYXNzIFQsIHR5cGVuYW1lLi4uIFBhcmFtcz4KKyAgICBUKiBjcmVhdGUoUGFyYW1zLi4uIHBhcmFtcykgeworICAgICAgICBUKiByZXQgPSBuZXcgKCp0aGlzKSBUKHBhcmFtcy4uLik7CiAgICAgICAgIGF1dG9EZXN0cm95KHJldCk7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbGlicy9od3VpL3V0aWxzL1JpbmdCdWZmZXIuaCBiL2xpYnMvaHd1aS91dGlscy9SaW5nQnVmZmVyLmgKaW5kZXggNjg5NWYwNy4uMDZiY2RjZCAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3V0aWxzL1JpbmdCdWZmZXIuaAorKysgYi9saWJzL2h3dWkvdXRpbHMvUmluZ0J1ZmZlci5oCkBAIC0zMiw3ICszMiw3IEBACiAgICAgflJpbmdCdWZmZXIoKSB7fQogCiAgICAgY29uc3RleHByIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIFNJWkU7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1Db3VudDsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUNvdW50OyB9CiAKICAgICBUJiBuZXh0KCkgewogICAgICAgICBtSGVhZCA9IChtSGVhZCArIDEpICUgU0laRTsKQEAgLTU0LDYgKzU0LDEwIEBACiAgICAgICAgIHJldHVybiBtQnVmZmVyWyhtSGVhZCArIGluZGV4ICsgMSkgJSBtQ291bnRdOwogICAgIH0KIAorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7CisgICAgICAgIHJldHVybiBtQnVmZmVyWyhtSGVhZCArIGluZGV4ICsgMSkgJSBtQ291bnRdOworICAgIH0KKwogICAgIHZvaWQgY2xlYXIoKSB7CiAgICAgICAgIG1Db3VudCA9IDA7CiAgICAgICAgIG1IZWFkID0gLTE7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdXRpbHMvVGVzdFdpbmRvd0NvbnRleHQuY3BwIGIvbGlicy9od3VpL3V0aWxzL1Rlc3RXaW5kb3dDb250ZXh0LmNwcAppbmRleCA4NGFhZTc1Li4wNWI0YTcyIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdXRpbHMvVGVzdFdpbmRvd0NvbnRleHQuY3BwCisrKyBiL2xpYnMvaHd1aS91dGlscy9UZXN0V2luZG93Q29udGV4dC5jcHAKQEAgLTE4MCw2ICsxODAsMTAgQEAKIFRlc3RXaW5kb3dDb250ZXh0OjpUZXN0V2luZG93Q29udGV4dCgpIDoKICAgICBtRGF0YSAobnVsbHB0cikgeyB9CiAKK1Rlc3RXaW5kb3dDb250ZXh0Ojp+VGVzdFdpbmRvd0NvbnRleHQoKSB7CisgICAgZGVsZXRlIG1EYXRhOworfQorCiB2b2lkIFRlc3RXaW5kb3dDb250ZXh0Ojppbml0aWFsaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgIHsKICAgICBtRGF0YSA9IG5ldyBUZXN0V2luZG93RGF0YShTa0lTaXplOjpNYWtlKHdpZHRoLCBoZWlnaHQpKTsKIH0KZGlmZiAtLWdpdCBhL2xpYnMvaHd1aS91dGlscy9UZXN0V2luZG93Q29udGV4dC5oIGIvbGlicy9od3VpL3V0aWxzL1Rlc3RXaW5kb3dDb250ZXh0LmgKaW5kZXggNDQ1YTExYi4uNDhlYzk1MiAxMDA2NDQKLS0tIGEvbGlicy9od3VpL3V0aWxzL1Rlc3RXaW5kb3dDb250ZXh0LmgKKysrIGIvbGlicy9od3VpL3V0aWxzL1Rlc3RXaW5kb3dDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDcgQEAKIHB1YmxpYzoKIAogICAgIFRlc3RXaW5kb3dDb250ZXh0KCk7CisgICAgflRlc3RXaW5kb3dDb250ZXh0KCk7CiAKICAgICAvLy8gV2UgbmVlZCB0byBrbm93IHRoZSBzaXplIG9mIHRoZSB3aW5kb3cuCiAgICAgdm9pZCBpbml0aWFsaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CmRpZmYgLS1naXQgYS9saWJzL2h3dWkvdXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oIGIvbGlicy9od3VpL3V0aWxzL1ZlY3RvckRyYXdhYmxlVXRpbHMuaAppbmRleCAyMWMxY2RjLi5iNWVmNTEwIDEwMDY0NAotLS0gYS9saWJzL2h3dWkvdXRpbHMvVmVjdG9yRHJhd2FibGVVdGlscy5oCisrKyBiL2xpYnMvaHd1aS91dGlscy9WZWN0b3JEcmF3YWJsZVV0aWxzLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpZm5kZWYgQU5EUk9JRF9IV1VJX1ZFQ1RPUkRSQVdBQkxFX1VUSUxTX0gKICNkZWZpbmUgQU5EUk9JRF9IV1VJX1ZFQ1RPUkRSQVdBQkxFX1VUSUxTX0gKIAotI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlUGF0aC5oIgorI2luY2x1ZGUgIlZlY3RvckRyYXdhYmxlLmgiCiAKICNpbmNsdWRlIDxjdXRpbHMvY29tcGlsZXIuaD4KICNpbmNsdWRlICJTa1BhdGguaCIKZGlmZiAtLWdpdCBhL2xpYnMvaW5wdXQvUG9pbnRlckNvbnRyb2xsZXIuY3BwIGIvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKaW5kZXggNmExMTY3YS4uMjEyYzZhMCAxMDA2NDQKLS0tIGEvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKKysrIGIvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5jcHAKQEAgLTkwLDYgKzkwLDcgQEAKICAgICBtTG9ja2VkLmxhc3RGcmFtZVVwZGF0ZWRUaW1lID0gMDsKIAogICAgIG1Mb2NrZWQuYnV0dG9uU3RhdGUgPSAwOworICAgIG1Mb2NrZWQuaWNvbkRldGFjaGVkID0gZmFsc2U7CiAKICAgICBtUG9saWN5LT5sb2FkUG9pbnRlckljb24oJm1Mb2NrZWQucG9pbnRlckljb24pOwogCkBAIC0xODQsNiArMTg1LDEwIEBACiB9CiAKIHZvaWQgUG9pbnRlckNvbnRyb2xsZXI6OnNldFBvc2l0aW9uTG9ja2VkKGZsb2F0IHgsIGZsb2F0IHkpIHsKKyAgICBpZiAobUxvY2tlZC5pY29uRGV0YWNoZWQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGZsb2F0IG1pblgsIG1pblksIG1heFgsIG1heFk7CiAgICAgaWYgKGdldEJvdW5kc0xvY2tlZCgmbWluWCwgJm1pblksICZtYXhYLCAmbWF4WSkpIHsKICAgICAgICAgaWYgKHggPD0gbWluWCkgewpAQCAtMjE3LDYgKzIyMiwxMCBAQAogICAgIC8vIFJlbW92ZSB0aGUgaW5hY3Rpdml0eSB0aW1lb3V0LCBzaW5jZSB3ZSBhcmUgZmFkaW5nIG5vdy4KICAgICByZW1vdmVJbmFjdGl2aXR5VGltZW91dExvY2tlZCgpOwogCisgICAgaWYgKG1Mb2NrZWQuaWNvbkRldGFjaGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBTdGFydCBmYWRpbmcuCiAgICAgaWYgKHRyYW5zaXRpb24gPT0gVFJBTlNJVElPTl9JTU1FRElBVEUpIHsKICAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IDA7CkBAIC0yMzQsNiArMjQzLDEwIEBACiAgICAgLy8gQWx3YXlzIHJlc2V0IHRoZSBpbmFjdGl2aXR5IHRpbWVyLgogICAgIHJlc2V0SW5hY3Rpdml0eVRpbWVvdXRMb2NrZWQoKTsKIAorICAgIGlmIChtTG9ja2VkLmljb25EZXRhY2hlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gU3RhcnQgdW5mYWRpbmcuCiAgICAgaWYgKHRyYW5zaXRpb24gPT0gVFJBTlNJVElPTl9JTU1FRElBVEUpIHsKICAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IDA7CkBAIC0zNDksNiArMzYyLDIyIEBACiAgICAgdXBkYXRlUG9pbnRlckxvY2tlZCgpOwogfQogCit2b2lkIFBvaW50ZXJDb250cm9sbGVyOjpkZXRhY2hQb2ludGVySWNvbihib29sIGRldGFjaGVkKSB7CisgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKKworICAgIGlmIChtTG9ja2VkLmljb25EZXRhY2hlZCA9PSBkZXRhY2hlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbUxvY2tlZC5pY29uRGV0YWNoZWQgPSBkZXRhY2hlZDsKKyAgICBpZiAoZGV0YWNoZWQpIHsKKyAgICAgICAgbUxvY2tlZC5wb2ludGVyRmFkZURpcmVjdGlvbiA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIG1Mb2NrZWQucG9pbnRlckZhZGVEaXJlY3Rpb24gPSAxOworICAgIH0KKyAgICBzdGFydEFuaW1hdGlvbkxvY2tlZCgpOworfQorCiB2b2lkIFBvaW50ZXJDb250cm9sbGVyOjpzZXREaXNwbGF5Vmlld3BvcnQoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3Qgb3JpZW50YXRpb24pIHsKICAgICBBdXRvTXV0ZXggX2wobUxvY2spOwogCkBAIC00MzksNiArNDY4LDE3IEBACiAgICAgfQogfQogCit2b2lkIFBvaW50ZXJDb250cm9sbGVyOjpzZXRDdXN0b21Qb2ludGVySWNvbihjb25zdCBTcHJpdGVJY29uJiBpY29uKSB7CisgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKKworICAgIGNvbnN0IGludDMyX3QgaWNvbklkID0gbVBvbGljeS0+Z2V0Q3VzdG9tUG9pbnRlckljb25JZCgpOworICAgIG1Mb2NrZWQuYWRkaXRpb25hbE1vdXNlUmVzb3VyY2VzW2ljb25JZF0gPSBpY29uOworICAgIG1Mb2NrZWQucmVxdWVzdGVkUG9pbnRlclNoYXBlID0gaWNvbklkOworICAgIG1Mb2NrZWQucHJlc2VudGF0aW9uQ2hhbmdlZCA9IHRydWU7CisKKyAgICB1cGRhdGVQb2ludGVyTG9ja2VkKCk7Cit9CisKIHZvaWQgUG9pbnRlckNvbnRyb2xsZXI6OmhhbmRsZU1lc3NhZ2UoY29uc3QgTWVzc2FnZSYgbWVzc2FnZSkgewogICAgIHN3aXRjaCAobWVzc2FnZS53aGF0KSB7CiAgICAgY2FzZSBNU0dfSU5BQ1RJVklUWV9USU1FT1VUOgpkaWZmIC0tZ2l0IGEvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5oIGIvbGlicy9pbnB1dC9Qb2ludGVyQ29udHJvbGxlci5oCmluZGV4IDRmZDJkODUuLmMxMzgxZjMgMTAwNjQ0Ci0tLSBhL2xpYnMvaW5wdXQvUG9pbnRlckNvbnRyb2xsZXIuaAorKysgYi9saWJzL2lucHV0L1BvaW50ZXJDb250cm9sbGVyLmgKQEAgLTY3LDYgKzY3LDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEFkZGl0aW9uYWxNb3VzZVJlc291cmNlcyhzdGQ6Om1hcDxpbnQzMl90LCBTcHJpdGVJY29uPiogb3V0UmVzb3VyY2VzLAogICAgICAgICAgICAgc3RkOjptYXA8aW50MzJfdCwgUG9pbnRlckFuaW1hdGlvbj4qIG91dEFuaW1hdGlvblJlc291cmNlcykgPSAwOwogICAgIHZpcnR1YWwgaW50MzJfdCBnZXREZWZhdWx0UG9pbnRlckljb25JZCgpID0gMDsKKyAgICB2aXJ0dWFsIGludDMyX3QgZ2V0Q3VzdG9tUG9pbnRlckljb25JZCgpID0gMDsKIH07CiAKIApAQCAtMTA1LDEwICsxMDYsMTUgQEAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTcG90cygpOwogCiAgICAgdm9pZCB1cGRhdGVQb2ludGVyU2hhcGUoaW50MzJfdCBpY29uSWQpOworICAgIHZvaWQgc2V0Q3VzdG9tUG9pbnRlckljb24oY29uc3QgU3ByaXRlSWNvbiYgaWNvbik7CiAgICAgdm9pZCBzZXREaXNwbGF5Vmlld3BvcnQoaW50MzJfdCB3aWR0aCwgaW50MzJfdCBoZWlnaHQsIGludDMyX3Qgb3JpZW50YXRpb24pOwogICAgIHZvaWQgc2V0SW5hY3Rpdml0eVRpbWVvdXQoSW5hY3Rpdml0eVRpbWVvdXQgaW5hY3Rpdml0eVRpbWVvdXQpOwogICAgIHZvaWQgcmVsb2FkUG9pbnRlclJlc291cmNlcygpOwogCisgICAgLyogRGV0YWNoIG9yIGF0dGFjaCB0aGUgcG9pbnRlciBpY29uIHN0YXR1cy4gV2hlbiBkZXRhY2hlZCwgdGhlIHBvaW50ZXIgaWNvbiBkaXNhcHBlYXJzCisgICAgICogYW5kIHRoZSBpY29uIGxvY2F0aW9uIGRvZXMgbm90IGNoYW5nZSBhdCBhbGwuICovCisgICAgdm9pZCBkZXRhY2hQb2ludGVySWNvbihib29sIGRldGFjaGVkKTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IE1BWF9SRUNZQ0xFRF9TUFJJVEVTID0gMTI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBNQVhfU1BPVFMgPSAxMjsKQEAgLTE3OCw2ICsxODQsOCBAQAogCiAgICAgICAgIGludDMyX3QgYnV0dG9uU3RhdGU7CiAKKyAgICAgICAgYm9vbCBpY29uRGV0YWNoZWQ7CisKICAgICAgICAgVmVjdG9yPFNwb3QqPiBzcG90czsKICAgICAgICAgVmVjdG9yPHNwPFNwcml0ZT4gPiByZWN5Y2xlZFNwcml0ZXM7CiAgICAgfSBtTG9ja2VkOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvTWFuYWdlci5qYXZhCmluZGV4IGM2NTg2NzUuLmVhMTY5MGYgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb01hbmFnZXIuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9NYW5hZ2VyLmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgogICogQXVkaW9NYW5hZ2VyIHByb3ZpZGVzIGFjY2VzcyB0byB2b2x1bWUgYW5kIHJpbmdlciBtb2RlIGNvbnRyb2wuCkBAIC0xNzYsNiArMTc3LDE2IEBACiAgICAgICAgICJhbmRyb2lkLm1lZGlhLk1BU1RFUl9NVVRFX0NIQU5HRURfQUNUSU9OIjsKIAogICAgIC8qKgorICAgICAqIEBoaWRlIEJyb2FkY2FzdCBpbnRlbnQgd2hlbiB0aGUgbWFzdGVyIG1vbm8gc3RhdGUgY2hhbmdlcy4KKyAgICAgKiBJbmNsdWRlcyB0aGUgbmV3IG1vbm8gc3RhdGUKKyAgICAgKgorICAgICAqIEBzZWUgI0VYVFJBX01BU1RFUl9NT05PCisgICAgICovCisgICAgQFNka0NvbnN0YW50KFNka0NvbnN0YW50VHlwZS5CUk9BRENBU1RfSU5URU5UX0FDVElPTikKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNQVNURVJfTU9OT19DSEFOR0VEX0FDVElPTiA9CisgICAgICAgICJhbmRyb2lkLm1lZGlhLk1BU1RFUl9NT05PX0NIQU5HRURfQUNUSU9OIjsKKworICAgIC8qKgogICAgICAqIFRoZSBuZXcgdmlicmF0ZSBzZXR0aW5nIGZvciBhIHBhcnRpY3VsYXIgdHlwZS4KICAgICAgKgogICAgICAqIEBzZWUgI1ZJQlJBVEVfU0VUVElOR19DSEFOR0VEX0FDVElPTgpAQCAtMjU0LDYgKzI2NSwxMyBAQAogICAgICAgICAiYW5kcm9pZC5tZWRpYS5FWFRSQV9TVFJFQU1fVk9MVU1FX01VVEVEIjsKIAogICAgIC8qKgorICAgICAqIEBoaWRlIFRoZSBuZXcgbWFzdGVyIG1vbm8gc3RhdGUgZm9yIHRoZSBtYXN0ZXIgbW9ubyBjaGFuZ2VkIGludGVudC4KKyAgICAgKiBWYWx1ZSBpcyBib29sZWFuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfTUFTVEVSX01PTk8gPQorICAgICAgICAiYW5kcm9pZC5tZWRpYS5FWFRSQV9NQVNURVJfTU9OTyI7CisKKyAgICAvKioKICAgICAgKiBCcm9hZGNhc3QgQWN0aW9uOiBXaXJlZCBIZWFkc2V0IHBsdWdnZWQgaW4gb3IgdW5wbHVnZ2VkLgogICAgICAqCiAgICAgICogWW91IDxlbT5jYW5ub3Q8L2VtPiByZWNlaXZlIHRoaXMgdGhyb3VnaCBjb21wb25lbnRzIGRlY2xhcmVkCkBAIC04ODAsNiArODk4LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRNYXN0ZXJNb25vKGJvb2xlYW4gbW9ubykgeworICAgICAgICBJQXVkaW9TZXJ2aWNlIHNlcnZpY2UgPSBnZXRTZXJ2aWNlKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZXJ2aWNlLnNldE1hc3Rlck1vbm8obW9ubywgZ2V0Q29udGV4dCgpLmdldE9wUGFja2FnZU5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRGVhZCBvYmplY3QgaW4gc2V0TWFzdGVyTW9ubyIsIGUpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCByaW5ndG9uZSBtb2RlLgogICAgICAqCkBAIC0xMTQyLDYgKzExNzEsMjEgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBnZXQgbWFzdGVyIG1vbm8gc3RhdGUuCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzTWFzdGVyTW9ubygpIHsKKyAgICAgICAgSUF1ZGlvU2VydmljZSBzZXJ2aWNlID0gZ2V0U2VydmljZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuaXNNYXN0ZXJNb25vKCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJEZWFkIG9iamVjdCBpbiBpc01hc3Rlck1vbm8iLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIGZvcmNlcyB0aGUgc3RyZWFtIGNvbnRyb2xsZWQgYnkgaGFyZCB2b2x1bWUga2V5cwogICAgICAqIHNwZWNpZnlpbmcgc3RyZWFtVHlwZSA9PSAtMSByZWxlYXNlcyBjb250cm9sIHRvIHRoZQogICAgICAqIGxvZ2ljLgpAQCAtMjExNSwzNiArMjE1OSw3MyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEhhbmRsZXIgZm9yIGF1ZGlvIGZvY3VzIGV2ZW50cyBjb21pbmcgZnJvbSB0aGUgYXVkaW8gc2VydmljZS4KKyAgICAgKiBIYW5kbGVyIGZvciBldmVudHMgKGF1ZGlvIGZvY3VzIGNoYW5nZSwgcmVjb3JkaW5nIGNvbmZpZyBjaGFuZ2UpIGNvbWluZyBmcm9tIHRoZQorICAgICAqIGF1ZGlvIHNlcnZpY2UuCiAgICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBGb2N1c0V2ZW50SGFuZGxlckRlbGVnYXRlIG1BdWRpb0ZvY3VzRXZlbnRIYW5kbGVyRGVsZWdhdGUgPQotICAgICAgICAgICAgbmV3IEZvY3VzRXZlbnRIYW5kbGVyRGVsZWdhdGUoKTsKKyAgICBwcml2YXRlIGZpbmFsIFNlcnZpY2VFdmVudEhhbmRsZXJEZWxlZ2F0ZSBtU2VydmljZUV2ZW50SGFuZGxlckRlbGVnYXRlID0KKyAgICAgICAgICAgIG5ldyBTZXJ2aWNlRXZlbnRIYW5kbGVyRGVsZWdhdGUoKTsKIAogICAgIC8qKgotICAgICAqIEhlbHBlciBjbGFzcyB0byBoYW5kbGUgdGhlIGZvcndhcmRpbmcgb2YgYXVkaW8gZm9jdXMgZXZlbnRzIHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0ZW5lcgorICAgICAqIEV2ZW50IHR5cGVzCiAgICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBGb2N1c0V2ZW50SGFuZGxlckRlbGVnYXRlIHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTVNTR19GT0NVU19DSEFOR0UgPSAwOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBNU1NHX1JFQ09SRElOR19DT05GSUdfQ0hBTkdFID0gMTsKKworICAgIC8qKgorICAgICAqIEhlbHBlciBjbGFzcyB0byBoYW5kbGUgdGhlIGZvcndhcmRpbmcgb2YgYXVkaW8gc2VydmljZSBldmVudHMgdG8gdGhlIGFwcHJvcHJpYXRlIGxpc3RlbmVyCisgICAgICovCisgICAgcHJpdmF0ZSBjbGFzcyBTZXJ2aWNlRXZlbnRIYW5kbGVyRGVsZWdhdGUgewogICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CiAKLSAgICAgICAgRm9jdXNFdmVudEhhbmRsZXJEZWxlZ2F0ZSgpIHsKKyAgICAgICAgU2VydmljZUV2ZW50SGFuZGxlckRlbGVnYXRlKCkgewogICAgICAgICAgICAgTG9vcGVyIGxvb3BlcjsKICAgICAgICAgICAgIGlmICgobG9vcGVyID0gTG9vcGVyLm15TG9vcGVyKCkpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBsb29wZXIgPSBMb29wZXIuZ2V0TWFpbkxvb3BlcigpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobG9vcGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIGV2ZW50IGhhbmRsZXIgZGVsZWdhdGUgdG8gcmVjZWl2ZSBhdWRpbyBmb2N1cyBldmVudHMKKyAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnQgdGhlIGV2ZW50IGhhbmRsZXIgZGVsZWdhdGUgdG8gcmVjZWl2ZSBldmVudHMgZnJvbSBhdWRpbyBzZXJ2aWNlCiAgICAgICAgICAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihsb29wZXIpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyIGxpc3RlbmVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtRm9jdXNMaXN0ZW5lckxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGZpbmRGb2N1c0xpc3RlbmVyKChTdHJpbmcpbXNnLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkF1ZGlvTWFuYWdlciBkaXNwYXRjaGluZyBvbkF1ZGlvRm9jdXNDaGFuZ2UoIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtc2cud2hhdCArICIpIGZvciAiICsgbXNnLm9iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIub25BdWRpb0ZvY3VzQ2hhbmdlKG1zZy53aGF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TU0dfRk9DVVNfQ0hBTkdFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lciA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtRm9jdXNMaXN0ZW5lckxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gZmluZEZvY3VzTGlzdGVuZXIoKFN0cmluZyltc2cub2JqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiQXVkaW9NYW5hZ2VyIGRpc3BhdGNoaW5nIG9uQXVkaW9Gb2N1c0NoYW5nZSgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbXNnLndoYXQgKyAiKSBmb3IgIiArIG1zZy5vYmopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIub25BdWRpb0ZvY3VzQ2hhbmdlKG1zZy5hcmcxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE1TU0dfUkVDT1JESU5HX0NPTkZJR19DSEFOR0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXppbmcgZm9yIHRoZSBjYXNlIG9mIGEgc2luZ2xlIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sgc2luZ2xlQ2FsbGJhY2sgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUxpc3Q8QXVkaW9SZWNvcmRpbmdDYWxsYmFjaz4gbXVsdGlwbGVDYWxsYmFja3MgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQobVJlY29yZENhbGxiYWNrTG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtUmVjb3JkQ2FsbGJhY2tMaXN0ICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtUmVjb3JkQ2FsbGJhY2tMaXN0LnNpemUoKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtUmVjb3JkQ2FsbGJhY2tMaXN0LnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUNhbGxiYWNrID0gbVJlY29yZENhbGxiYWNrTGlzdC5nZXQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVDYWxsYmFja3MgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8QXVkaW9SZWNvcmRpbmdDYWxsYmFjaz4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVjb3JkQ2FsbGJhY2tMaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZUNhbGxiYWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUNhbGxiYWNrLm9uUmVjb3JkQ29uZmlnQ2hhbmdlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG11bHRpcGxlQ2FsbGJhY2tzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MCA7IGkgPCBtdWx0aXBsZUNhbGxiYWNrcy5zaXplKCkgOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZUNhbGxiYWNrcy5nZXQoaSkub25SZWNvcmRDb25maWdDaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5rbm93biBldmVudCAiICsgbXNnLndoYXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfTsKQEAgLTIxNjEsOCArMjI0Miw5IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBJQXVkaW9Gb2N1c0Rpc3BhdGNoZXIgbUF1ZGlvRm9jdXNEaXNwYXRjaGVyID0gbmV3IElBdWRpb0ZvY3VzRGlzcGF0Y2hlci5TdHViKCkgewogCiAgICAgICAgIHB1YmxpYyB2b2lkIGRpc3BhdGNoQXVkaW9Gb2N1c0NoYW5nZShpbnQgZm9jdXNDaGFuZ2UsIFN0cmluZyBpZCkgewotICAgICAgICAgICAgTWVzc2FnZSBtID0gbUF1ZGlvRm9jdXNFdmVudEhhbmRsZXJEZWxlZ2F0ZS5nZXRIYW5kbGVyKCkub2J0YWluTWVzc2FnZShmb2N1c0NoYW5nZSwgaWQpOwotICAgICAgICAgICAgbUF1ZGlvRm9jdXNFdmVudEhhbmRsZXJEZWxlZ2F0ZS5nZXRIYW5kbGVyKCkuc2VuZE1lc3NhZ2UobSk7CisgICAgICAgICAgICBmaW5hbCBNZXNzYWdlIG0gPSBtU2VydmljZUV2ZW50SGFuZGxlckRlbGVnYXRlLmdldEhhbmRsZXIoKS5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICBNU1NHX0ZPQ1VTX0NIQU5HRS8qd2hhdCovLCBmb2N1c0NoYW5nZS8qYXJnMSovLCAwLyphcmcyIGlnbm9yZWQqLywgaWQvKm9iaiovKTsKKyAgICAgICAgICAgIG1TZXJ2aWNlRXZlbnRIYW5kbGVyRGVsZWdhdGUuZ2V0SGFuZGxlcigpLnNlbmRNZXNzYWdlKG0pOwogICAgICAgICB9CiAKICAgICB9OwpAQCAtMjY1OSw2ICsyNzQxLDggQEAKICAgICB9CiAKIAorICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBBdWRpbyBwb2xpY3kKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiB7QGxpbmsgQXVkaW9Qb2xpY3l9LgpAQCAtMjcxMSw2ICsyNzk1LDEzMSBAQAogICAgIH0KIAogCisgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIC8vIFJlY29yZGluZyBjb25maWd1cmF0aW9uCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKiBjYW5kaWRhdGUgZm9yIHB1YmxpYyBBUEkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGFic3RyYWN0IGNsYXNzIEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sgeworICAgICAgICAvKioKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICogY2FuZGlkYXRlIGZvciBwdWJsaWMgQVBJCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgdm9pZCBvblJlY29yZENvbmZpZ0NoYW5nZWQoKSB7fQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICogY2FuZGlkYXRlIGZvciBwdWJsaWMgQVBJCisgICAgICogQHBhcmFtIG5vbi1udWxsIGNhbGxiYWNrCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJBdWRpb1JlY29yZGluZ0NhbGxiYWNrKEBOb25OdWxsIEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sgY2IpIHsKKyAgICAgICAgaWYgKGNiID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIklsbGVnYWwgbnVsbCBBdWRpb1JlY29yZGluZ0NhbGxiYWNrIGFyZ3VtZW50Iik7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkKG1SZWNvcmRDYWxsYmFja0xvY2spIHsKKyAgICAgICAgICAgIC8vIGxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGxpc3Qgb2YgcmVjb3JkaW5nIGNhbGxiYWNrcworICAgICAgICAgICAgaWYgKG1SZWNvcmRDYWxsYmFja0xpc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1SZWNvcmRDYWxsYmFja0xpc3QgPSBuZXcgQXJyYXlMaXN0PEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2s+KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBpbnQgb2xkQ2JDb3VudCA9IG1SZWNvcmRDYWxsYmFja0xpc3Quc2l6ZSgpOworICAgICAgICAgICAgaWYgKCFtUmVjb3JkQ2FsbGJhY2tMaXN0LmNvbnRhaW5zKGNiKSkgeworICAgICAgICAgICAgICAgIG1SZWNvcmRDYWxsYmFja0xpc3QuYWRkKGNiKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3Q2JDb3VudCA9IG1SZWNvcmRDYWxsYmFja0xpc3Quc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmICgob2xkQ2JDb3VudCA9PSAwKSAmJiAobmV3Q2JDb3VudCA+IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVyIGJpbmRlciBmb3IgY2FsbGJhY2tzCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIElBdWRpb1NlcnZpY2Ugc2VydmljZSA9IGdldFNlcnZpY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UucmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayhtUmVjQ2IpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRGVhZCBvYmplY3QgaW4gcmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayIsIGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJhdHRlbXB0IHRvIGNhbGwgcmVnaXN0ZXJBdWRpb1JlY29yZGluZ0NhbGxiYWNrKCkgb24gYSBwcmV2aW91c2x5IgorICAgICAgICAgICAgICAgICAgICAgICAgKyAicmVnaXN0ZXJlZCBjYWxsYmFjayIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQGhpZGUKKyAgICAgKiBjYW5kaWRhdGUgZm9yIHB1YmxpYyBBUEkKKyAgICAgKiBAcGFyYW0gbm9uLW51bGwgY2FsbGJhY2sKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyQXVkaW9SZWNvcmRpbmdDYWxsYmFjayhATm9uTnVsbCBBdWRpb1JlY29yZGluZ0NhbGxiYWNrIGNiKSB7CisgICAgICAgIGlmIChjYiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbGxlZ2FsIG51bGwgQXVkaW9SZWNvcmRpbmdDYWxsYmFjayBhcmd1bWVudCIpOworICAgICAgICB9CisgICAgICAgIHN5bmNocm9uaXplZChtUmVjb3JkQ2FsbGJhY2tMb2NrKSB7CisgICAgICAgICAgICBpZiAobVJlY29yZENhbGxiYWNrTGlzdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgaW50IG9sZENiQ291bnQgPSBtUmVjb3JkQ2FsbGJhY2tMaXN0LnNpemUoKTsKKyAgICAgICAgICAgIGlmIChtUmVjb3JkQ2FsbGJhY2tMaXN0LnJlbW92ZShjYikpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3Q2JDb3VudCA9IG1SZWNvcmRDYWxsYmFja0xpc3Quc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmICgob2xkQ2JDb3VudCA+IDApICYmIChuZXdDYkNvdW50ID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHVucmVnaXN0ZXIgYmluZGVyIGZvciBjYWxsYmFja3MKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgSUF1ZGlvU2VydmljZSBzZXJ2aWNlID0gZ2V0U2VydmljZSgpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS51bnJlZ2lzdGVyUmVjb3JkaW5nQ2FsbGJhY2sobVJlY0NiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkRlYWQgb2JqZWN0IGluIHVucmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayIsIGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJhdHRlbXB0IHRvIGNhbGwgdW5yZWdpc3RlckF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2soKSBvbiBhIGNhbGxiYWNrIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFscmVhZHkgdW5yZWdpc3RlcmVkIG9yIG5ldmVyIHJlZ2lzdGVyZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICogY2FuZGlkYXRlIGZvciBwdWJsaWMgQVBJCisgICAgICogQHJldHVybiBhIG5vbi1udWxsIGFycmF5IG9mIHJlY29yZGluZyBjb25maWd1cmF0aW9ucy4gQW4gYXJyYXkgb2YgbGVuZ3RoIDAgaW5kaWNhdGVzIHRoZXJlIGlzCisgICAgICogICAgIG5vIHJlY29yZGluZyBhY3RpdmUgd2hlbiBxdWVyaWVkLgorICAgICAqLworICAgIHB1YmxpYyBATm9uTnVsbCBBdWRpb1JlY29yZENvbmZpZ3VyYXRpb25bXSBnZXRBY3RpdmVSZWNvcmRDb25maWd1cmF0aW9ucygpIHsKKyAgICAgICAgZmluYWwgSUF1ZGlvU2VydmljZSBzZXJ2aWNlID0gZ2V0U2VydmljZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuZ2V0QWN0aXZlUmVjb3JkQ29uZmlndXJhdGlvbnMoKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlVuYWJsZSB0byByZXRyaWV2ZSBhY3RpdmUgcmVjb3JkIGNvbmZpZ3VyYXRpb25zIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIGNvbnN0YW50cyBmb3IgdGhlIHJlY29yZGluZyBldmVudHMsIHRvIGtlZXAgaW4gc3luYworICAgICAqIHdpdGggZnJhbWV3b3Jrcy9hdi9pbmNsdWRlL21lZGlhL0F1ZGlvUG9saWN5LmgKKyAgICAgKi8KKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSRUNPUkRfQ09ORklHX0VWRU5UX1NUQVJUID0gMTsKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBSRUNPUkRfQ09ORklHX0VWRU5UX1NUT1AgPSAwOworCisgICAgLyoqCisgICAgICogQWxsIG9wZXJhdGlvbnMgb24gdGhpcyBsaXN0IGFyZSBzeW5jJ2Qgb24gbVJlY29yZENhbGxiYWNrTG9jay4KKyAgICAgKiBMaXN0IGlzIGxhenktaW5pdGlhbGl6ZWQgaW4ge0BsaW5rICNyZWdpc3RlckF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2soQXVkaW9SZWNvcmRpbmdDYWxsYmFjayl9LgorICAgICAqIExpc3QgY2FuIGJlIG51bGwuCisgICAgICovCisgICAgcHJpdmF0ZSBMaXN0PEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2s+IG1SZWNvcmRDYWxsYmFja0xpc3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbVJlY29yZENhbGxiYWNrTG9jayA9IG5ldyBPYmplY3QoKTsKKworICAgIHByaXZhdGUgZmluYWwgSVJlY29yZGluZ0NvbmZpZ0Rpc3BhdGNoZXIgbVJlY0NiID0gbmV3IElSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyLlN0dWIoKSB7CisKKyAgICAgICAgcHVibGljIHZvaWQgZGlzcGF0Y2hSZWNvcmRpbmdDb25maWdDaGFuZ2UoKSB7CisgICAgICAgICAgICBmaW5hbCBNZXNzYWdlIG0gPSBtU2VydmljZUV2ZW50SGFuZGxlckRlbGVnYXRlLmdldEhhbmRsZXIoKS5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICBNU1NHX1JFQ09SRElOR19DT05GSUdfQ0hBTkdFLyp3aGF0Ki8pOworICAgICAgICAgICAgbVNlcnZpY2VFdmVudEhhbmRsZXJEZWxlZ2F0ZS5nZXRIYW5kbGVyKCkuc2VuZE1lc3NhZ2UobSk7CisgICAgICAgIH0KKworICAgIH07CisKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAgICAgLyoqCiAgICAgICogIEBoaWRlCiAgICAgICogIFJlbG9hZCBhdWRpbyBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFNldHRpbmdzIGJhY2t1cApkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9uSG9sZGVyLmFpZGwgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uLmFpZGwKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIGNvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbkhvbGRlci5haWRsCmNvcHkgdG8gbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvUmVjb3JkQ29uZmlndXJhdGlvbi5haWRsCmluZGV4IGU2MGFiMGUuLmFmZTkxMmIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC92aWV3L0lEcm9wUGVybWlzc2lvbkhvbGRlci5haWRsCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZENvbmZpZ3VyYXRpb24uYWlkbApAQCAtMSw1ICsxLDQgQEAKLS8qCi0qKiBDb3B5cmlnaHQgMjAxNSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLyogQ29weXJpZ2h0IDIwMTYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCiAqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDEzICsxMyw2IEBACiAqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldzsKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKIAotLyoqCi0gKiBJbnRlcmZhY2UgdG8gYWxsb3cgYSBkcm9wIHJlY2VpdmVyIHRvIHJlcXVlc3QgcGVybWlzc2lvbnMgZm9yIFVSSXMgcGFzc2VkIGFsb25nIHdpdGggQ2xpcERhdGEKLSAqIGNvbnRhaW5lZCBpbiBEcmFnRXZlbnQuCi0gKi8KLWludGVyZmFjZSBJRHJvcFBlcm1pc3Npb25Ib2xkZXIgewotICAgIHZvaWQgZ3JhbnQoKTsKLSAgICB2b2lkIHJldm9rZSgpOwotfQorcGFyY2VsYWJsZSBBdWRpb1JlY29yZENvbmZpZ3VyYXRpb247CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZTY5MgotLS0gL2Rldi9udWxsCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1JlY29yZENvbmZpZ3VyYXRpb24uamF2YQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5tZWRpYTsKKworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKKworaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOworCisvKioKKyAqIEBoaWRlCisgKiBDYW5kaWRhdGUgZm9yIHB1YmxpYyBBUEksIHNlZSBBdWRpb01hbmFnZXIuZ2V0QWN0aXZlUmVjb3JkQ29uZmlndXJhdGlvbigpCisgKgorICovCitwdWJsaWMgY2xhc3MgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBtU2Vzc2lvbklkOworCisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNsaWVudFNvdXJjZTsKKworICAgIC8qKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIEF1ZGlvUmVjb3JkQ29uZmlndXJhdGlvbihpbnQgc2Vzc2lvbiwgaW50IHNvdXJjZSkgeworICAgICAgICBtU2Vzc2lvbklkID0gc2Vzc2lvbjsKKyAgICAgICAgbUNsaWVudFNvdXJjZSA9IHNvdXJjZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIG9uZSBvZiBBdWRpb1NvdXJjZS5NSUMsIEF1ZGlvU291cmNlLlZPSUNFX1VQTElOSywKKyAgICAgKiAgICAgICBBdWRpb1NvdXJjZS5WT0lDRV9ET1dOTElOSywgQXVkaW9Tb3VyY2UuVk9JQ0VfQ0FMTCwKKyAgICAgKiAgICAgICBBdWRpb1NvdXJjZS5DQU1DT1JERVIsIEF1ZGlvU291cmNlLlZPSUNFX1JFQ09HTklUSU9OLAorICAgICAqICAgICAgIEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT04uCisgICAgICovCisgICAgcHVibGljIGludCBnZXRDbGllbnRBdWRpb1NvdXJjZSgpIHsgcmV0dXJuIG1DbGllbnRTb3VyY2U7IH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdGhlIHNlc3Npb24gbnVtYmVyIG9mIHRoZSByZWNvcmRlci4KKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldEF1ZGlvU2Vzc2lvbklkKCkgeyByZXR1cm4gbVNlc3Npb25JZDsgfQorCisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFBhcmNlbGFibGUuQ3JlYXRvcjxBdWRpb1JlY29yZENvbmZpZ3VyYXRpb24+IENSRUFUT1IKKyAgICAgICAgICAgID0gbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxBdWRpb1JlY29yZENvbmZpZ3VyYXRpb24+KCkgeworICAgICAgICAvKioKKyAgICAgICAgICogUmVidWlsZHMgYW4gQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uIHByZXZpb3VzbHkgc3RvcmVkIHdpdGggd3JpdGVUb1BhcmNlbCgpLgorICAgICAgICAgKiBAcGFyYW0gcCBQYXJjZWwgb2JqZWN0IHRvIHJlYWQgdGhlIEF1ZGlvUmVjb3JkQ29uZmlndXJhdGlvbiBmcm9tCisgICAgICAgICAqIEByZXR1cm4gYSBuZXcgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uIGNyZWF0ZWQgZnJvbSB0aGUgZGF0YSBpbiB0aGUgcGFyY2VsCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHApIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uKHApOworICAgICAgICB9CisgICAgICAgIHB1YmxpYyBBdWRpb1JlY29yZENvbmZpZ3VyYXRpb25bXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBBdWRpb1JlY29yZENvbmZpZ3VyYXRpb25bc2l6ZV07CisgICAgICAgIH0KKyAgICB9OworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdHMuaGFzaChtU2Vzc2lvbklkLCBtQ2xpZW50U291cmNlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGRlc2NyaWJlQ29udGVudHMoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHdyaXRlVG9QYXJjZWwoUGFyY2VsIGRlc3QsIGludCBmbGFncykgeworICAgICAgICBkZXN0LndyaXRlSW50KG1TZXNzaW9uSWQpOworICAgICAgICBkZXN0LndyaXRlSW50KG1DbGllbnRTb3VyY2UpOworICAgIH0KKworICAgIHByaXZhdGUgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uKFBhcmNlbCBpbikgeworICAgICAgICBtU2Vzc2lvbklkID0gaW4ucmVhZEludCgpOworICAgICAgICBtQ2xpZW50U291cmNlID0gaW4ucmVhZEludCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgeworICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG8gPT0gbnVsbCB8fCAhKG8gaW5zdGFuY2VvZiBBdWRpb1JlY29yZENvbmZpZ3VyYXRpb24pKSByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZmluYWwgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uIHRoYXQgPSAoQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uKSBvOworICAgICAgICAgcmV0dXJuICgobVNlc3Npb25JZCA9PSB0aGF0Lm1TZXNzaW9uSWQpCisgICAgICAgICAgICAgICAgICYmIChtQ2xpZW50U291cmNlID09IHRoYXQubUNsaWVudFNvdXJjZSkpOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9TeXN0ZW0uamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1N5c3RlbS5qYXZhCmluZGV4IGM1OWQxYzcuLmFhMGQ3OGQgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1N5c3RlbS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1N5c3RlbS5qYXZhCkBAIC0yMjcsNyArMjI3LDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBIYW5kbGVzIGV2ZW50cyBmb3IgdGhlIGF1ZGlvIHBvbGljeSBtYW5hZ2VyIGFib3V0IGR5bmFtaWMgYXVkaW8gcG9saWNpZXMKKyAgICAgKiBIYW5kbGVzIGV2ZW50cyBmcm9tIHRoZSBhdWRpbyBwb2xpY3kgbWFuYWdlciBhYm91dCBkeW5hbWljIGF1ZGlvIHBvbGljaWVzCiAgICAgICogQHNlZSBhbmRyb2lkLm1lZGlhLmF1ZGlvcG9saWN5LkF1ZGlvUG9saWN5CiAgICAgICovCiAgICAgcHVibGljIGludGVyZmFjZSBEeW5hbWljUG9saWN5Q2FsbGJhY2sKQEAgLTI2Nyw2ICsyNjcsMzMgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIEhhbmRsZXMgZXZlbnRzIGZyb20gdGhlIGF1ZGlvIHBvbGljeSBtYW5hZ2VyIGFib3V0IHJlY29yZGluZyBldmVudHMKKyAgICAgKiBAc2VlIGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLkF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50ZXJmYWNlIEF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sKKyAgICB7CisgICAgICAgIHZvaWQgb25SZWNvcmRpbmdDb25maWd1cmF0aW9uQ2hhbmdlZChpbnQgZXZlbnQsIGludCBzZXNzaW9uLCBpbnQgc291cmNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBBdWRpb1JlY29yZGluZ0NhbGxiYWNrIHNSZWNvcmRpbmdDYWxsYmFjazsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRSZWNvcmRpbmdDYWxsYmFjayhBdWRpb1JlY29yZGluZ0NhbGxiYWNrIGNiKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoQXVkaW9TeXN0ZW0uY2xhc3MpIHsKKyAgICAgICAgICAgIHNSZWNvcmRpbmdDYWxsYmFjayA9IGNiOworICAgICAgICAgICAgbmF0aXZlX3JlZ2lzdGVyX3JlY29yZGluZ19jYWxsYmFjaygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWNvcmRpbmdDYWxsYmFja0Zyb21OYXRpdmUoaW50IGV2ZW50LCBpbnQgc2Vzc2lvbiwgaW50IHNvdXJjZSkgeworICAgICAgICBBdWRpb1JlY29yZGluZ0NhbGxiYWNrIGNiID0gbnVsbDsKKyAgICAgICAgc3luY2hyb25pemVkIChBdWRpb1N5c3RlbS5jbGFzcykgeworICAgICAgICAgICAgY2IgPSBzUmVjb3JkaW5nQ2FsbGJhY2s7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNiICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNiLm9uUmVjb3JkaW5nQ29uZmlndXJhdGlvbkNoYW5nZWQoZXZlbnQsIHNlc3Npb24sIHNvdXJjZSk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvKgogICAgICAqIEVycm9yIGNvZGVzIHVzZWQgYnkgcHVibGljIEFQSXMgKEF1ZGlvVHJhY2ssIEF1ZGlvUmVjb3JkLCBBdWRpb01hbmFnZXIgLi4uKQpAQCAtNjI0LDYgKzY1MSwxMSBAQAogICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gZ2V0TWFzdGVyTXV0ZSgpOwogICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBnZXREZXZpY2VzRm9yU3RyZWFtKGludCBzdHJlYW0pOwogCisgICAgLyoqIEBoaWRlIHJldHVybnMgdHJ1ZSBpZiBtYXN0ZXIgbW9ubyBpcyBlbmFibGVkLiAqLworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gZ2V0TWFzdGVyTW9ubygpOworICAgIC8qKiBAaGlkZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBtYXN0ZXIgbW9ubyBtb2RlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBzZXRNYXN0ZXJNb25vKGJvb2xlYW4gbW9ubyk7CisKICAgICAvLyBoZWxwZXJzIGZvciBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0eSgpLCBzZWUgZGVzY3JpcHRpb24gdGhlcmUgZm9yIG1lYW5pbmcKICAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBpbnQgZ2V0UHJpbWFyeU91dHB1dFNhbXBsaW5nUmF0ZSgpOwogICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBnZXRQcmltYXJ5T3V0cHV0RnJhbWVDb3VudCgpOwpAQCAtNjQxLDYgKzY3Myw4IEBACiAKICAgICAvLyBkZWNsYXJlIHRoaXMgaW5zdGFuY2UgYXMgaGF2aW5nIGEgZHluYW1pYyBwb2xpY3kgY2FsbGJhY2sgaGFuZGxlcgogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmaW5hbCB2b2lkIG5hdGl2ZV9yZWdpc3Rlcl9keW5hbWljX3BvbGljeV9jYWxsYmFjaygpOworICAgIC8vIGRlY2xhcmUgdGhpcyBpbnN0YW5jZSBhcyBoYXZpbmcgYSByZWNvcmRpbmcgY29uZmlndXJhdGlvbiB1cGRhdGUgY2FsbGJhY2sgaGFuZGxlcgorICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBmaW5hbCB2b2lkIG5hdGl2ZV9yZWdpc3Rlcl9yZWNvcmRpbmdfY2FsbGJhY2soKTsKIAogICAgIC8vIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdmFsdWUgaW4gaW5jbHVkZS9zeXN0ZW0vYXVkaW8uaAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFVRElPX0hXX1NZTkNfSU5WQUxJRCA9IDA7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9UcmFjay5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0F1ZGlvVHJhY2suamF2YQppbmRleCBiYjRmN2Q5Li5hODEwZmYxIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvQXVkaW9UcmFjay5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9BdWRpb1RyYWNrLmphdmEKQEAgLTk3LDkgKzk3LDEwIEBACiAgICAgLyoqIE1heGltdW0gdmFsdWUgZm9yIHNhbXBsZSByYXRlICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNBTVBMRV9SQVRFX0haX01BWCA9IDE5MjAwMDsKIAotICAgIC8vIEZDQ184Ci0gICAgLyoqIE1heGltdW0gdmFsdWUgZm9yIEF1ZGlvVHJhY2sgY2hhbm5lbCBjb3VudCAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSEFOTkVMX0NPVU5UX01BWCA9IDg7CisgICAgLyoqIE1heGltdW0gdmFsdWUgZm9yIEF1ZGlvVHJhY2sgY2hhbm5lbCBjb3VudAorICAgICAqIEBoaWRlIHB1YmxpYyBmb3IgTWVkaWFDb2RlIG9ubHksIGRvIG5vdCB1bi1oaWRlIG9yIGNoYW5nZSB0byBhIG51bWVyaWMgbGl0ZXJhbAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENIQU5ORUxfQ09VTlRfTUFYID0gbmF0aXZlX2dldF9GQ0NfOCgpOwogCiAgICAgLyoqIGluZGljYXRlcyBBdWRpb1RyYWNrIHN0YXRlIGlzIHN0b3BwZWQgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQTEFZU1RBVEVfU1RPUFBFRCA9IDE7ICAvLyBtYXRjaGVzIFNMX1BMQVlTVEFURV9TVE9QUEVECkBAIC0yNTgzLDYgKzI1ODQsNyBAQAogICAgIHByaXZhdGUgbmF0aXZlIGZpbmFsIGludCBuYXRpdmVfZ2V0Um91dGVkRGV2aWNlSWQoKTsKICAgICBwcml2YXRlIG5hdGl2ZSBmaW5hbCB2b2lkIG5hdGl2ZV9lbmFibGVEZXZpY2VDYWxsYmFjaygpOwogICAgIHByaXZhdGUgbmF0aXZlIGZpbmFsIHZvaWQgbmF0aXZlX2Rpc2FibGVEZXZpY2VDYWxsYmFjaygpOworICAgIHN0YXRpYyBwcml2YXRlIG5hdGl2ZSBpbnQgbmF0aXZlX2dldF9GQ0NfOCgpOwogCiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBVdGlsaXR5IG1ldGhvZHMKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JQXVkaW9TZXJ2aWNlLmFpZGwgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSUF1ZGlvU2VydmljZS5haWRsCmluZGV4IDY5M2E1MTkuLmFiZTkyYzcgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JQXVkaW9TZXJ2aWNlLmFpZGwKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lBdWRpb1NlcnZpY2UuYWlkbApAQCAtMjAsOSArMjAsMTEgQEAKIGltcG9ydCBhbmRyb2lkLmJsdWV0b290aC5CbHVldG9vdGhEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0F0dHJpYnV0ZXM7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JlY29yZENvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JvdXRlc0luZm87CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5JQXVkaW9Gb2N1c0Rpc3BhdGNoZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5JQXVkaW9Sb3V0ZXNPYnNlcnZlcjsKK2ltcG9ydCBhbmRyb2lkLm1lZGlhLklSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuSVJpbmd0b25lUGxheWVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuSVZvbHVtZUNvbnRyb2xsZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5SYXRpbmc7CkBAIC01Miw2ICs1NCwxMCBAQAogCiAgICAgdm9pZCBzZXRNYXN0ZXJNdXRlKGJvb2xlYW4gbXV0ZSwgaW50IGZsYWdzLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIGludCB1c2VySWQpOwogCisgICAgYm9vbGVhbiBpc01hc3Rlck1vbm8oKTsKKworICAgIHZvaWQgc2V0TWFzdGVyTW9ubyhib29sZWFuIG11dGUsIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgaW50IHVzZXJJZCk7CisKICAgICBpbnQgZ2V0U3RyZWFtVm9sdW1lKGludCBzdHJlYW1UeXBlKTsKIAogICAgIGludCBnZXRTdHJlYW1NaW5Wb2x1bWUoaW50IHN0cmVhbVR5cGUpOwpAQCAtMTU3LDQgKzE2MywxMCBAQAogICAgIGludCBzZXRGb2N1c1Byb3BlcnRpZXNGb3JQb2xpY3koaW50IGR1Y2tpbmdCZWhhdmlvciwgaW4gSUF1ZGlvUG9saWN5Q2FsbGJhY2sgcGNiKTsKIAogICAgIHZvaWQgc2V0Vm9sdW1lUG9saWN5KGluIFZvbHVtZVBvbGljeSBwb2xpY3kpOworCisgICAgdm9pZCByZWdpc3RlclJlY29yZGluZ0NhbGxiYWNrKGluIElSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyIHJjZGIpOworCisgICAgb25ld2F5IHZvaWQgdW5yZWdpc3RlclJlY29yZGluZ0NhbGxiYWNrKGluIElSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyIHJjZGIpOworCisgICAgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uW10gZ2V0QWN0aXZlUmVjb3JkQ29uZmlndXJhdGlvbnMoKTsKIH0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JTWVkaWFSZXNvdXJjZU1vbml0b3IuYWlkbApzaW1pbGFyaXR5IGluZGV4IDY0JQpjb3B5IGZyb20gdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hCYXNlVGVzdC5qYXZhCmNvcHkgdG8gbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lNZWRpYVJlc291cmNlTW9uaXRvci5haWRsCmluZGV4IGE5ZTE3NzcuLjdiNGJjMzkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSU1lZGlhUmVzb3VyY2VNb25pdG9yLmFpZGwKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIENvcHlyaWdodCAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDEzICsxNCwxMSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbnRlcmZhY2UgUnNCZW5jaEJhc2VUZXN0IHsKLSAgICBib29sZWFuIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpOwotCi0gICAgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gZ2V0VGVzdHMoKTsKLSAgICBTdHJpbmdbXSBnZXRUZXN0TmFtZXMoKTsKKy8qKiB7QGhpZGV9ICovCitpbnRlcmZhY2UgSU1lZGlhUmVzb3VyY2VNb25pdG9yCit7CisgICAgb25ld2F5IHZvaWQgbm90aWZ5UmVzb3VyY2VHcmFudGVkKGluIGludCBwaWQsIFN0cmluZyB0eXBlLCBTdHJpbmcgc3ViVHlwZSwgbG9uZyB2YWx1ZSk7CiB9CisKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9JUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlci5haWRsCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIHRlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YQpyZW5hbWUgdG8gbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL0lSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyLmFpZGwKaW5kZXggYTllMTc3Ny4uYTVlYjhiOWYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoQmFzZVRlc3QuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvSVJlY29yZGluZ0NvbmZpZ0Rpc3BhdGNoZXIuYWlkbApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDEzICsxNCwxNSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbnRlcmZhY2UgUnNCZW5jaEJhc2VUZXN0IHsKLSAgICBib29sZWFuIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpOworLyoqCisgKiBBSURMIGZvciB0aGUgUmVjb3JkaW5nQWN0aXZpdHkgbW9uaXRvciBpbiBBdWRpb1NlcnZpY2UgdG8gc2lnbmFsIGF1ZGlvIHJlY29yZGluZyB1cGRhdGVzLgorICoKKyAqIHtAaGlkZX0KKyAqLworb25ld2F5IGludGVyZmFjZSBJUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlciB7CiAKLSAgICBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bXSBnZXRUZXN0cygpOwotICAgIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpOworICAgIHZvaWQgZGlzcGF0Y2hSZWNvcmRpbmdDb25maWdDaGFuZ2UoKTsKKwogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhQ29kZWMuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjLmphdmEKaW5kZXggNDc4ZmQ5OS4uZjFmODQzNyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhQ29kZWMuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYy5qYXZhCkBAIC0yMTc1LDggKzIxNzUsNiBAQAogICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVVzLCBpbnQgZmxhZ3MpCiAgICAgICAgIHRocm93cyBDcnlwdG9FeGNlcHRpb247CiAKLSAgICAvLyBUaGUgZm9sbG93aW5nIG1vZGUgY29uc3RhbnRzIE1VU1Qgc3RheSBpbiBzeW5jIHdpdGggdGhlaXIgZXF1aXZhbGVudHMKLSAgICAvLyBpbiBtZWRpYS9oYXJkd2FyZS9DcnlwdG9BUEkuaCAhCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1JZUFRPX01PREVfVU5FTkNSWVBURUQgPSAwOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENSWVBUT19NT0RFX0FFU19DVFIgICAgID0gMTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDUllQVE9fTU9ERV9BRVNfQ0JDICAgICA9IDI7CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFDb2RlY0luZm8uamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mby5qYXZhCmluZGV4IDQxMDE5MzUuLjBmYmE5OTIgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mby5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUNvZGVjSW5mby5qYXZhCkBAIC05MDcsNyArOTA3LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAobWltZS5lcXVhbHNJZ25vcmVDYXNlKE1lZGlhRm9ybWF0Lk1JTUVUWVBFX0FVRElPX1JBVykpIHsKICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlUmFuZ2UgPSBSYW5nZS5jcmVhdGUoMSwgOTYwMDApOwogICAgICAgICAgICAgICAgIGJpdFJhdGVzID0gUmFuZ2UuY3JlYXRlKDEsIDEwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICBtYXhDaGFubmVscyA9IDg7CisgICAgICAgICAgICAgICAgbWF4Q2hhbm5lbHMgPSBBdWRpb1RyYWNrLkNIQU5ORUxfQ09VTlRfTUFYOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtaW1lLmVxdWFsc0lnbm9yZUNhc2UoTWVkaWFGb3JtYXQuTUlNRVRZUEVfQVVESU9fRkxBQykpIHsKICAgICAgICAgICAgICAgICBzYW1wbGVSYXRlUmFuZ2UgPSBSYW5nZS5jcmVhdGUoMSwgNjU1MzUwKTsKICAgICAgICAgICAgICAgICAvLyBsb3NzbGVzcyBjb2RlYywgc28gYml0cmF0ZSBpcyBpZ25vcmVkCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFJbnNlcnRlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhSW5zZXJ0ZXIuamF2YQppbmRleCA0MWIzNjlkLi5kZDA2OTIxIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFJbnNlcnRlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYUluc2VydGVyLmphdmEKQEAgLTE2LDggKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUNvbnRlbnRQcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiAKQEAgLTM3LDEzICszNywxMSBAQAogICAgIHByaXZhdGUgZmluYWwgSGFzaE1hcDxVcmksIExpc3Q8Q29udGVudFZhbHVlcz4+IG1Qcmlvcml0eVJvd01hcCA9CiAgICAgICAgICAgICBuZXcgSGFzaE1hcDxVcmksIExpc3Q8Q29udGVudFZhbHVlcz4+KCk7CiAKLSAgICBwcml2YXRlIGZpbmFsIElDb250ZW50UHJvdmlkZXIgbVByb3ZpZGVyOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBtUHJvdmlkZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUJ1ZmZlclNpemVQZXJVcmk7CiAKLSAgICBwdWJsaWMgTWVkaWFJbnNlcnRlcihJQ29udGVudFByb3ZpZGVyIHByb3ZpZGVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIGludCBidWZmZXJTaXplUGVyVXJpKSB7CisgICAgcHVibGljIE1lZGlhSW5zZXJ0ZXIoQ29udGVudFByb3ZpZGVyQ2xpZW50IHByb3ZpZGVyLCBpbnQgYnVmZmVyU2l6ZVBlclVyaSkgewogICAgICAgICBtUHJvdmlkZXIgPSBwcm92aWRlcjsKLSAgICAgICAgbVBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7CiAgICAgICAgIG1CdWZmZXJTaXplUGVyVXJpID0gYnVmZmVyU2l6ZVBlclVyaTsKICAgICB9CiAKQEAgLTkwLDcgKzg4LDcgQEAKICAgICAgICAgaWYgKCFsaXN0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ29udGVudFZhbHVlc1tdIHZhbHVlc0FycmF5ID0gbmV3IENvbnRlbnRWYWx1ZXNbbGlzdC5zaXplKCldOwogICAgICAgICAgICAgdmFsdWVzQXJyYXkgPSBsaXN0LnRvQXJyYXkodmFsdWVzQXJyYXkpOwotICAgICAgICAgICAgbVByb3ZpZGVyLmJ1bGtJbnNlcnQobVBhY2thZ2VOYW1lLCB0YWJsZVVyaSwgdmFsdWVzQXJyYXkpOworICAgICAgICAgICAgbVByb3ZpZGVyLmJ1bGtJbnNlcnQodGFibGVVcmksIHZhbHVlc0FycmF5KTsKICAgICAgICAgICAgIGxpc3QuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUm91dGVyLmphdmEKaW5kZXggYTA0NjUxMi4uYmNjMmI0MDYgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlci5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiAKIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5EcmF3YWJsZVJlczsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSW50RGVmOwogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5VGhyZWFkOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKQEAgLTQxLDYgKzQyLDggQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtMjAxLDYgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm1EZXNjcmlwdGlvbiA9IHNTdGF0aWMubVJlc291cmNlcy5nZXRUZXh0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5ibHVldG9vdGhfYTJkcF9hdWRpb19yb3V0ZV9uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubVN1cHBvcnRlZFR5cGVzID0gUk9VVEVfVFlQRV9MSVZFX0FVRElPOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5tRGV2aWNlVHlwZSA9IFJvdXRlSW5mby5ERVZJQ0VfVFlQRV9CTFVFVE9PVEg7CiAgICAgICAgICAgICAgICAgICAgICAgICBzU3RhdGljLm1CbHVldG9vdGhBMmRwUm91dGUgPSBpbmZvOwogICAgICAgICAgICAgICAgICAgICAgICAgYWRkUm91dGVTdGF0aWMoc1N0YXRpYy5tQmx1ZXRvb3RoQTJkcFJvdXRlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTQ4MCw2ICs0ODQsNyBAQAogICAgICAgICAgICAgcm91dGUubU5hbWUgPSBnbG9iYWxSb3V0ZS5uYW1lOwogICAgICAgICAgICAgcm91dGUubURlc2NyaXB0aW9uID0gZ2xvYmFsUm91dGUuZGVzY3JpcHRpb247CiAgICAgICAgICAgICByb3V0ZS5tU3VwcG9ydGVkVHlwZXMgPSBnbG9iYWxSb3V0ZS5zdXBwb3J0ZWRUeXBlczsKKyAgICAgICAgICAgIHJvdXRlLm1EZXZpY2VUeXBlID0gZ2xvYmFsUm91dGUuZGV2aWNlVHlwZTsKICAgICAgICAgICAgIHJvdXRlLm1FbmFibGVkID0gZ2xvYmFsUm91dGUuZW5hYmxlZDsKICAgICAgICAgICAgIHJvdXRlLnNldFJlYWxTdGF0dXNDb2RlKGdsb2JhbFJvdXRlLnN0YXR1c0NvZGUpOwogICAgICAgICAgICAgcm91dGUubVBsYXliYWNrVHlwZSA9IGdsb2JhbFJvdXRlLnBsYXliYWNrVHlwZTsKQEAgLTE0MTEsNiArMTQxNiw3IEBACiAgICAgICAgIG5ld1JvdXRlLm1EZXNjcmlwdGlvbiA9IHNTdGF0aWMubVJlc291cmNlcy5nZXRUZXh0KAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLndpcmVsZXNzX2Rpc3BsYXlfcm91dGVfZGVzY3JpcHRpb24pOwogICAgICAgICBuZXdSb3V0ZS51cGRhdGVQcmVzZW50YXRpb25EaXNwbGF5KCk7CisgICAgICAgIG5ld1JvdXRlLm1EZXZpY2VUeXBlID0gUm91dGVJbmZvLkRFVklDRV9UWVBFX1RWOwogICAgICAgICByZXR1cm4gbmV3Um91dGU7CiAgICAgfQogCkBAIC0xNDcwLDYgKzE0NzYsNyBAQAogICAgICAgICBDaGFyU2VxdWVuY2UgbURlc2NyaXB0aW9uOwogICAgICAgICBwcml2YXRlIENoYXJTZXF1ZW5jZSBtU3RhdHVzOwogICAgICAgICBpbnQgbVN1cHBvcnRlZFR5cGVzOworICAgICAgICBpbnQgbURldmljZVR5cGU7CiAgICAgICAgIFJvdXRlR3JvdXAgbUdyb3VwOwogICAgICAgICBmaW5hbCBSb3V0ZUNhdGVnb3J5IG1DYXRlZ29yeTsKICAgICAgICAgRHJhd2FibGUgbUljb247CkBAIC0xNTAyLDYgKzE1MDksNDIgQEAKICAgICAgICAgLyoqIEBoaWRlICovIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRVU19JTl9VU0UgPSA1OwogICAgICAgICAvKiogQGhpZGUgKi8gcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0NPTk5FQ1RFRCA9IDY7CiAKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIEBJbnREZWYoe0RFVklDRV9UWVBFX1VOS05PV04sIERFVklDRV9UWVBFX1RWLCBERVZJQ0VfVFlQRV9TUEVBS0VSLCBERVZJQ0VfVFlQRV9CTFVFVE9PVEh9KQorICAgICAgICBAUmV0ZW50aW9uKFJldGVudGlvblBvbGljeS5TT1VSQ0UpCisgICAgICAgIHB1YmxpYyBAaW50ZXJmYWNlIERldmljZVR5cGUge30KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhlIGRlZmF1bHQgcmVjZWl2ZXIgZGV2aWNlIHR5cGUgb2YgdGhlIHJvdXRlIGluZGljYXRpbmcgdGhlIHR5cGUgaXMgdW5rbm93bi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHNlZSAjZ2V0RGV2aWNlVHlwZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfVU5LTk9XTiA9IDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEEgcmVjZWl2ZXIgZGV2aWNlIHR5cGUgb2YgdGhlIHJvdXRlIGluZGljYXRpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiB0aGUgbWVkaWEgaXMgaGFwcGVuaW5nCisgICAgICAgICAqIG9uIGEgVFYuCisgICAgICAgICAqCisgICAgICAgICAqIEBzZWUgI2dldERldmljZVR5cGUKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFVklDRV9UWVBFX1RWID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSByZWNlaXZlciBkZXZpY2UgdHlwZSBvZiB0aGUgcm91dGUgaW5kaWNhdGluZyB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSBtZWRpYSBpcyBoYXBwZW5pbmcKKyAgICAgICAgICogb24gYSBzcGVha2VyLgorICAgICAgICAgKgorICAgICAgICAgKiBAc2VlICNnZXREZXZpY2VUeXBlCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBERVZJQ0VfVFlQRV9TUEVBS0VSID0gMjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQSByZWNlaXZlciBkZXZpY2UgdHlwZSBvZiB0aGUgcm91dGUgaW5kaWNhdGluZyB0aGUgcHJlc2VudGF0aW9uIG9mIHRoZSBtZWRpYSBpcyBoYXBwZW5pbmcKKyAgICAgICAgICogb24gYSBibHVldG9vdGggZGV2aWNlIHN1Y2ggYXMgYSBibHVldG9vdGggc3BlYWtlci4KKyAgICAgICAgICoKKyAgICAgICAgICogQHNlZSAjZ2V0RGV2aWNlVHlwZQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVWSUNFX1RZUEVfQkxVRVRPT1RIID0gMzsKKwogICAgICAgICBwcml2YXRlIE9iamVjdCBtVGFnOwogCiAgICAgICAgIC8qKgpAQCAtMTUzMyw2ICsxNTc2LDcgQEAKIAogICAgICAgICBSb3V0ZUluZm8oUm91dGVDYXRlZ29yeSBjYXRlZ29yeSkgewogICAgICAgICAgICAgbUNhdGVnb3J5ID0gY2F0ZWdvcnk7CisgICAgICAgICAgICBtRGV2aWNlVHlwZSA9IERFVklDRV9UWVBFX1VOS05PV047CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTE2NzAsNiArMTcxNCwxOCBAQAogICAgICAgICAgICAgcmV0dXJuIG1TdXBwb3J0ZWRUeXBlczsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSByZWNlaXZlciBkZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcm91dGUuCisgICAgICAgICAqCisgICAgICAgICAqIEByZXR1cm4gVGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByb3V0ZToKKyAgICAgICAgICoge0BsaW5rICNERVZJQ0VfVFlQRV9CTFVFVE9PVEh9LCB7QGxpbmsgI0RFVklDRV9UWVBFX1RWfSwge0BsaW5rICNERVZJQ0VfVFlQRV9TUEVBS0VSfSwKKyAgICAgICAgICogb3Ige0BsaW5rICNERVZJQ0VfVFlQRV9VTktOT1dOfS4KKyAgICAgICAgICovCisgICAgICAgIEBEZXZpY2VUeXBlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0RGV2aWNlVHlwZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtRGV2aWNlVHlwZTsKKyAgICAgICAgfQorCiAgICAgICAgIC8qKiBAaGlkZSAqLwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzVHlwZXMoaW50IHR5cGVzKSB7CiAgICAgICAgICAgICByZXR1cm4gKG1TdXBwb3J0ZWRUeXBlcyAmIHR5cGVzKSAhPSAwOwpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUm91dGVyQ2xpZW50U3RhdGUuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVJvdXRlckNsaWVudFN0YXRlLmphdmEKaW5kZXggNTRiODI3Ni4uMzRlMThmNiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhUm91dGVyQ2xpZW50U3RhdGUuamF2YQorKysgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFSb3V0ZXJDbGllbnRTdGF0ZS5qYXZhCkBAIC0xMDQsNiArMTA0LDcgQEAKICAgICAgICAgcHVibGljIGludCB2b2x1bWVNYXg7CiAgICAgICAgIHB1YmxpYyBpbnQgdm9sdW1lSGFuZGxpbmc7CiAgICAgICAgIHB1YmxpYyBpbnQgcHJlc2VudGF0aW9uRGlzcGxheUlkOworICAgICAgICBwdWJsaWMgQE1lZGlhUm91dGVyLlJvdXRlSW5mby5EZXZpY2VUeXBlIGludCBkZXZpY2VUeXBlOwogCiAgICAgICAgIHB1YmxpYyBSb3V0ZUluZm8oU3RyaW5nIGlkKSB7CiAgICAgICAgICAgICB0aGlzLmlkID0gaWQ7CkBAIC0xMTMsNiArMTE0LDcgQEAKICAgICAgICAgICAgIHBsYXliYWNrU3RyZWFtID0gLTE7CiAgICAgICAgICAgICB2b2x1bWVIYW5kbGluZyA9IE1lZGlhUm91dGVyLlJvdXRlSW5mby5QTEFZQkFDS19WT0xVTUVfRklYRUQ7CiAgICAgICAgICAgICBwcmVzZW50YXRpb25EaXNwbGF5SWQgPSAtMTsKKyAgICAgICAgICAgIGRldmljZVR5cGUgPSBNZWRpYVJvdXRlci5Sb3V0ZUluZm8uREVWSUNFX1RZUEVfVU5LTk9XTjsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBSb3V0ZUluZm8oUm91dGVJbmZvIG90aGVyKSB7CkBAIC0xMjgsNiArMTMwLDcgQEAKICAgICAgICAgICAgIHZvbHVtZU1heCA9IG90aGVyLnZvbHVtZU1heDsKICAgICAgICAgICAgIHZvbHVtZUhhbmRsaW5nID0gb3RoZXIudm9sdW1lSGFuZGxpbmc7CiAgICAgICAgICAgICBwcmVzZW50YXRpb25EaXNwbGF5SWQgPSBvdGhlci5wcmVzZW50YXRpb25EaXNwbGF5SWQ7CisgICAgICAgICAgICBkZXZpY2VUeXBlID0gb3RoZXIuZGV2aWNlVHlwZTsKICAgICAgICAgfQogCiAgICAgICAgIFJvdXRlSW5mbyhQYXJjZWwgaW4pIHsKQEAgLTE0Myw2ICsxNDYsNyBAQAogICAgICAgICAgICAgdm9sdW1lTWF4ID0gaW4ucmVhZEludCgpOwogICAgICAgICAgICAgdm9sdW1lSGFuZGxpbmcgPSBpbi5yZWFkSW50KCk7CiAgICAgICAgICAgICBwcmVzZW50YXRpb25EaXNwbGF5SWQgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBkZXZpY2VUeXBlID0gaW4ucmVhZEludCgpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xNjQsNiArMTY4LDcgQEAKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQodm9sdW1lTWF4KTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQodm9sdW1lSGFuZGxpbmcpOwogICAgICAgICAgICAgZGVzdC53cml0ZUludChwcmVzZW50YXRpb25EaXNwbGF5SWQpOworICAgICAgICAgICAgZGVzdC53cml0ZUludChkZXZpY2VUeXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTgwLDYgKzE4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICsgIiwgdm9sdW1lTWF4PSIgKyB2b2x1bWVNYXgKICAgICAgICAgICAgICAgICAgICAgKyAiLCB2b2x1bWVIYW5kbGluZz0iICsgdm9sdW1lSGFuZGxpbmcKICAgICAgICAgICAgICAgICAgICAgKyAiLCBwcmVzZW50YXRpb25EaXNwbGF5SWQ9IiArIHByZXNlbnRhdGlvbkRpc3BsYXlJZAorICAgICAgICAgICAgICAgICAgICArICIsIGRldmljZVR5cGU9IiArIGRldmljZVR5cGUKICAgICAgICAgICAgICAgICAgICAgKyAiIH0iOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVNjYW5uZXIuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9NZWRpYVNjYW5uZXIuamF2YQppbmRleCA5ZWE2NzIyLi45NmM2MTZiIDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvTWVkaWFTY2FubmVyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL01lZGlhU2Nhbm5lci5qYXZhCkBAIC0xNiwxNCArMTYsMTAgQEAKIAogcGFja2FnZSBhbmRyb2lkLm1lZGlhOwogCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VXJpczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUNvbnRlbnRQcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKIGltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLlNRTEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmRybS5Ecm1NYW5hZ2VyQ2xpZW50OwpAQCAtNTAsNiArNDYsMTIgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiAKK2ltcG9ydCBkYWx2aWsuc3lzdGVtLkNsb3NlR3VhcmQ7CisKK2ltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOworaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOworaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKKwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CkBAIC02MSw2ICs2Myw3IEBACiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CiAKIC8qKgogICogSW50ZXJuYWwgc2VydmljZSBoZWxwZXIgdGhhdCBuby1vbmUgc2hvdWxkIHVzZSBkaXJlY3RseS4KQEAgLTEwNyw4ICsxMTAsNyBAQAogICoKICAqIHtAaGlkZX0KICAqLwotcHVibGljIGNsYXNzIE1lZGlhU2Nhbm5lcgoteworcHVibGljIGNsYXNzIE1lZGlhU2Nhbm5lciBpbXBsZW1lbnRzIEF1dG9DbG9zZWFibGUgewogICAgIHN0YXRpYyB7CiAgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgibWVkaWFfam5pIik7CiAgICAgICAgIG5hdGl2ZV9pbml0KCk7CkBAIC0zMDIsMjEgKzMwNCwyMyBAQAogICAgIH07CiAKICAgICBwcml2YXRlIGxvbmcgbU5hdGl2ZUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgU3RyaW5nIG1QYWNrYWdlTmFtZTsKLSAgICBwcml2YXRlIElDb250ZW50UHJvdmlkZXIgbU1lZGlhUHJvdmlkZXI7Ci0gICAgcHJpdmF0ZSBVcmkgbUF1ZGlvVXJpOwotICAgIHByaXZhdGUgVXJpIG1WaWRlb1VyaTsKLSAgICBwcml2YXRlIFVyaSBtSW1hZ2VzVXJpOwotICAgIHByaXZhdGUgVXJpIG1UaHVtYnNVcmk7Ci0gICAgcHJpdmF0ZSBVcmkgbVBsYXlsaXN0c1VyaTsKLSAgICBwcml2YXRlIFVyaSBtRmlsZXNVcmk7Ci0gICAgcHJpdmF0ZSBVcmkgbUZpbGVzVXJpTm9Ob3RpZnk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Qcm9jZXNzUGxheWxpc3RzLCBtUHJvY2Vzc0dlbnJlczsKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVBhY2thZ2VOYW1lOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Wb2x1bWVOYW1lOworICAgIHByaXZhdGUgZmluYWwgQ29udGVudFByb3ZpZGVyQ2xpZW50IG1NZWRpYVByb3ZpZGVyOworICAgIHByaXZhdGUgZmluYWwgVXJpIG1BdWRpb1VyaTsKKyAgICBwcml2YXRlIGZpbmFsIFVyaSBtVmlkZW9Vcmk7CisgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbUltYWdlc1VyaTsKKyAgICBwcml2YXRlIGZpbmFsIFVyaSBtVGh1bWJzVXJpOworICAgIHByaXZhdGUgZmluYWwgVXJpIG1QbGF5bGlzdHNVcmk7CisgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbUZpbGVzVXJpOworICAgIHByaXZhdGUgZmluYWwgVXJpIG1GaWxlc1VyaU5vTm90aWZ5OworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUHJvY2Vzc1BsYXlsaXN0czsKKyAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVByb2Nlc3NHZW5yZXM7CiAgICAgcHJpdmF0ZSBpbnQgbU10cE9iamVjdEhhbmRsZTsKIAotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1FeHRlcm5hbFN0b3JhZ2VQYXRoOwotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtRXh0ZXJuYWxJc0VtdWxhdGVkOworICAgIHByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBtQ2xvc2VkID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKKyAgICBwcml2YXRlIGZpbmFsIENsb3NlR3VhcmQgbUNsb3NlR3VhcmQgPSBDbG9zZUd1YXJkLmdldCgpOwogCiAgICAgLyoqIHdoZXRoZXIgdG8gdXNlIGJ1bGsgaW5zZXJ0cyBvciBpbmRpdmlkdWFsIGluc2VydHMgZm9yIGVhY2ggaXRlbSAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gRU5BQkxFX0JVTEtfSU5TRVJUUyA9IHRydWU7CkBAIC0zNDUsMTAgKzM0OSw2IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfUklOR1RPTkVfUFJPUEVSVFlfUFJFRklYID0gInJvLmNvbmZpZy4iOwogCi0gICAgLy8gc2V0IHRvIHRydWUgaWYgZmlsZSBwYXRoIGNvbXBhcmlzb25zIHNob3VsZCBiZSBjYXNlIGluc2Vuc2l0aXZlLgotICAgIC8vIHRoaXMgc2hvdWxkIGJlIHNldCB3aGVuIHNjYW5uaW5nIGZpbGVzIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbS4KLSAgICBwcml2YXRlIGJvb2xlYW4gbUNhc2VJbnNlbnNpdGl2ZVBhdGhzOwotCiAgICAgcHJpdmF0ZSBmaW5hbCBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgbUJpdG1hcE9wdGlvbnMgPSBuZXcgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7CiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGaWxlRW50cnkgewpAQCAtMzc4LDI2ICszNzgsNTkgQEAKICAgICAgICAgaW50IGJlc3RtYXRjaGxldmVsOwogICAgIH0KIAotICAgIHByaXZhdGUgQXJyYXlMaXN0PFBsYXlsaXN0RW50cnk+IG1QbGF5bGlzdEVudHJpZXMgPSBuZXcgQXJyYXlMaXN0PFBsYXlsaXN0RW50cnk+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8UGxheWxpc3RFbnRyeT4gbVBsYXlsaXN0RW50cmllcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEZpbGVFbnRyeT4gbVBsYXlMaXN0cyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgcHJpdmF0ZSBNZWRpYUluc2VydGVyIG1NZWRpYUluc2VydGVyOwogCi0gICAgcHJpdmF0ZSBBcnJheUxpc3Q8RmlsZUVudHJ5PiBtUGxheUxpc3RzOwotCiAgICAgcHJpdmF0ZSBEcm1NYW5hZ2VyQ2xpZW50IG1Ecm1NYW5hZ2VyQ2xpZW50ID0gbnVsbDsKIAotICAgIHB1YmxpYyBNZWRpYVNjYW5uZXIoQ29udGV4dCBjKSB7CisgICAgcHVibGljIE1lZGlhU2Nhbm5lcihDb250ZXh0IGMsIFN0cmluZyB2b2x1bWVOYW1lKSB7CiAgICAgICAgIG5hdGl2ZV9zZXR1cCgpOwogICAgICAgICBtQ29udGV4dCA9IGM7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IGMuZ2V0UGFja2FnZU5hbWUoKTsKKyAgICAgICAgbVZvbHVtZU5hbWUgPSB2b2x1bWVOYW1lOworCiAgICAgICAgIG1CaXRtYXBPcHRpb25zLmluU2FtcGxlU2l6ZSA9IDE7CiAgICAgICAgIG1CaXRtYXBPcHRpb25zLmluSnVzdERlY29kZUJvdW5kcyA9IHRydWU7CiAKICAgICAgICAgc2V0RGVmYXVsdFJpbmd0b25lRmlsZU5hbWVzKCk7CiAKLSAgICAgICAgbUV4dGVybmFsU3RvcmFnZVBhdGggPSBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLSAgICAgICAgbUV4dGVybmFsSXNFbXVsYXRlZCA9IEVudmlyb25tZW50LmlzRXh0ZXJuYWxTdG9yYWdlRW11bGF0ZWQoKTsKLSAgICAgICAgLy9tQ2xpZW50LnRlc3RHZW5yZU5hbWVDb252ZXJ0ZXIoKTsKKyAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKQorICAgICAgICAgICAgICAgIC5hY3F1aXJlQ29udGVudFByb3ZpZGVyQ2xpZW50KE1lZGlhU3RvcmUuQVVUSE9SSVRZKTsKKworICAgICAgICBtQXVkaW9VcmkgPSBBdWRpby5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICBtVmlkZW9VcmkgPSBWaWRlby5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICBtSW1hZ2VzVXJpID0gSW1hZ2VzLk1lZGlhLmdldENvbnRlbnRVcmkodm9sdW1lTmFtZSk7CisgICAgICAgIG1UaHVtYnNVcmkgPSBJbWFnZXMuVGh1bWJuYWlscy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICBtRmlsZXNVcmkgPSBGaWxlcy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICBtRmlsZXNVcmlOb05vdGlmeSA9IG1GaWxlc1VyaS5idWlsZFVwb24oKS5hcHBlbmRRdWVyeVBhcmFtZXRlcigibm9ub3RpZnkiLCAiMSIpLmJ1aWxkKCk7CisKKyAgICAgICAgaWYgKCF2b2x1bWVOYW1lLmVxdWFscygiaW50ZXJuYWwiKSkgeworICAgICAgICAgICAgLy8gd2Ugb25seSBzdXBwb3J0IHBsYXlsaXN0cyBvbiBleHRlcm5hbCBtZWRpYQorICAgICAgICAgICAgbVByb2Nlc3NQbGF5bGlzdHMgPSB0cnVlOworICAgICAgICAgICAgbVByb2Nlc3NHZW5yZXMgPSB0cnVlOworICAgICAgICAgICAgbVBsYXlsaXN0c1VyaSA9IFBsYXlsaXN0cy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVByb2Nlc3NQbGF5bGlzdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIG1Qcm9jZXNzR2VucmVzID0gZmFsc2U7CisgICAgICAgICAgICBtUGxheWxpc3RzVXJpID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIExvY2FsZSBsb2NhbGUgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlOworICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOworICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBsb2NhbGUuZ2V0Q291bnRyeSgpOworICAgICAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsZShsYW5ndWFnZSArICJfIiArIGNvdW50cnkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsZShsYW5ndWFnZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbUNsb3NlR3VhcmQub3BlbigiY2xvc2UiKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdFJpbmd0b25lRmlsZU5hbWVzKCkgewpAQCAtOTU2LDcgKzk4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRlci5mbHVzaEFsbCgpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtUGFja2FnZU5hbWUsIHRhYmxlVXJpLCB2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtTWVkaWFQcm92aWRlci5pbnNlcnQodGFibGVVcmksIHZhbHVlcyk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS5tRm9ybWF0ID09IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04pIHsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZXIuaW5zZXJ0d2l0aFByaW9yaXR5KHRhYmxlVXJpLCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC05ODgsNyArMTAyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChGaWxlQ29sdW1ucy5NRURJQV9UWVBFLCBtZWRpYVR5cGUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci51cGRhdGUobVBhY2thZ2VOYW1lLCByZXN1bHQsIHZhbHVlcywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKHJlc3VsdCwgdmFsdWVzLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYobmVlZFRvU2V0U2V0dGluZ3MpIHsKQEAgLTEwNTUsMTEgKzEwODgsNyBAQAogICAgICAgICBTdHJpbmcgd2hlcmUgPSBudWxsOwogICAgICAgICBTdHJpbmdbXSBzZWxlY3Rpb25BcmdzID0gbnVsbDsKIAotICAgICAgICBpZiAobVBsYXlMaXN0cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtUGxheUxpc3RzID0gbmV3IEFycmF5TGlzdDxGaWxlRW50cnk+KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtUGxheUxpc3RzLmNsZWFyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgbVBsYXlMaXN0cy5jbGVhcigpOwogCiAgICAgICAgIGlmIChmaWxlUGF0aCAhPSBudWxsKSB7CiAgICAgICAgICAgICAvLyBxdWVyeSBmb3Igb25seSBvbmUgZmlsZQpAQCAtMTA3Nyw4ICsxMTA2LDcgQEAKICAgICAgICAgLy8gZmlsZXN5c3RlbSBpcyBtb3VudGVkIGFuZCB1bm1vdW50ZWQgd2hpbGUgdGhlIHNjYW5uZXIgaXMgcnVubmluZykuCiAgICAgICAgIFVyaS5CdWlsZGVyIGJ1aWxkZXIgPSBtRmlsZXNVcmkuYnVpbGRVcG9uKCk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kUXVlcnlQYXJhbWV0ZXIoTWVkaWFTdG9yZS5QQVJBTV9ERUxFVEVfREFUQSwgImZhbHNlIik7Ci0gICAgICAgIE1lZGlhQnVsa0RlbGV0ZXIgZGVsZXRlciA9IG5ldyBNZWRpYUJ1bGtEZWxldGVyKG1NZWRpYVByb3ZpZGVyLCBtUGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgYnVpbGRlci5idWlsZCgpKTsKKyAgICAgICAgTWVkaWFCdWxrRGVsZXRlciBkZWxldGVyID0gbmV3IE1lZGlhQnVsa0RlbGV0ZXIobU1lZGlhUHJvdmlkZXIsIGJ1aWxkZXIuYnVpbGQoKSk7CiAKICAgICAgICAgLy8gQnVpbGQgdGhlIGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUgY29udGVudCBwcm92aWRlcgogICAgICAgICB0cnkgewpAQCAtMTA5Nyw3ICsxMTI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIGxpbWl0VXJpLCBGSUxFU19QUkVTQ0FOX1BST0pFQ1RJT04sCisgICAgICAgICAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShsaW1pdFVyaSwgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlLCBzZWxlY3Rpb25BcmdzLCBNZWRpYVN0b3JlLkZpbGVzLkZpbGVDb2x1bW5zLl9JRCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEzOCw4ICsxMTY2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXRoLnRvTG93ZXJDYXNlKExvY2FsZS5VUykuZW5kc1dpdGgoIi8ubm9tZWRpYSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlci5mbHVzaCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJlbnQgPSBuZXcgRmlsZShwYXRoKS5nZXRQYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jYWxsKG1QYWNrYWdlTmFtZSwgTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuY2FsbChNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBwYXJlbnQsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE1Nyw3ICsxMTg0LDcgQEAKIAogICAgICAgICAvLyBjb21wdXRlIG9yaWdpbmFsIHNpemUgb2YgaW1hZ2VzCiAgICAgICAgIG1PcmlnaW5hbENvdW50ID0gMDsKLSAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbUltYWdlc1VyaSwgSURfUFJPSkVDVElPTiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtSW1hZ2VzVXJpLCBJRF9QUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKICAgICAgICAgaWYgKGMgIT0gbnVsbCkgewogICAgICAgICAgICAgbU9yaWdpbmFsQ291bnQgPSBjLmdldENvdW50KCk7CiAgICAgICAgICAgICBjLmNsb3NlKCk7CkBAIC0xMTg5LDcgKzEyMTYsNiBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkoCi0gICAgICAgICAgICAgICAgICAgIG1QYWNrYWdlTmFtZSwKICAgICAgICAgICAgICAgICAgICAgbVRodW1ic1VyaSwKICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyBbXSB7ICJfZGF0YSIgfSwKICAgICAgICAgICAgICAgICAgICAgbnVsbCwKQEAgLTEyMjUsMTMgKzEyNTEsMTEgQEAKICAgICBzdGF0aWMgY2xhc3MgTWVkaWFCdWxrRGVsZXRlciB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgd2hlcmVDbGF1c2UgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiB3aGVyZUFyZ3MgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oMTAwKTsKLSAgICAgICAgZmluYWwgSUNvbnRlbnRQcm92aWRlciBtUHJvdmlkZXI7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7CisgICAgICAgIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBtUHJvdmlkZXI7CiAgICAgICAgIGZpbmFsIFVyaSBtQmFzZVVyaTsKIAotICAgICAgICBwdWJsaWMgTWVkaWFCdWxrRGVsZXRlcihJQ29udGVudFByb3ZpZGVyIHByb3ZpZGVyLCBTdHJpbmcgcGFja2FnZU5hbWUsIFVyaSBiYXNlVXJpKSB7CisgICAgICAgIHB1YmxpYyBNZWRpYUJ1bGtEZWxldGVyKENvbnRlbnRQcm92aWRlckNsaWVudCBwcm92aWRlciwgVXJpIGJhc2VVcmkpIHsKICAgICAgICAgICAgIG1Qcm92aWRlciA9IHByb3ZpZGVyOwotICAgICAgICAgICAgbVBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7CiAgICAgICAgICAgICBtQmFzZVVyaSA9IGJhc2VVcmk7CiAgICAgICAgIH0KIApAQCAtMTI1MCw3ICsxMjc0LDcgQEAKICAgICAgICAgICAgIGlmIChzaXplID4gMCkgewogICAgICAgICAgICAgICAgIFN0cmluZyBbXSBmb28gPSBuZXcgU3RyaW5nIFtzaXplXTsKICAgICAgICAgICAgICAgICBmb28gPSB3aGVyZUFyZ3MudG9BcnJheShmb28pOwotICAgICAgICAgICAgICAgIGludCBudW1yb3dzID0gbVByb3ZpZGVyLmRlbGV0ZShtUGFja2FnZU5hbWUsIG1CYXNlVXJpLAorICAgICAgICAgICAgICAgIGludCBudW1yb3dzID0gbVByb3ZpZGVyLmRlbGV0ZShtQmFzZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhU3RvcmUuTWVkaWFDb2x1bW5zLl9JRCArICIgSU4gKCIgKwogICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmVDbGF1c2UudG9TdHJpbmcoKSArICIpIiwgZm9vKTsKICAgICAgICAgICAgICAgICAvL0xvZy5pKCJAQEBAQEBAQEAiLCAicm93cyBkZWxldGVkOiAiICsgbnVtcm93cyk7CkBAIC0xMjcxLDQ4ICsxMjk1LDI2IEBACiAgICAgICAgICAgICBwcnVuZURlYWRUaHVtYm5haWxGaWxlcygpOwogCiAgICAgICAgIC8vIGFsbG93IEdDIHRvIGNsZWFuIHVwCi0gICAgICAgIG1QbGF5TGlzdHMgPSBudWxsOwotICAgICAgICBtTWVkaWFQcm92aWRlciA9IG51bGw7CisgICAgICAgIG1QbGF5TGlzdHMuY2xlYXIoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVsZWFzZVJlc291cmNlcygpIHsKICAgICAgICAgLy8gcmVsZWFzZSB0aGUgRHJtTWFuYWdlckNsaWVudCByZXNvdXJjZXMKICAgICAgICAgaWYgKG1Ecm1NYW5hZ2VyQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Ecm1NYW5hZ2VyQ2xpZW50LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1Ecm1NYW5hZ2VyQ2xpZW50LmNsb3NlKCk7CiAgICAgICAgICAgICBtRHJtTWFuYWdlckNsaWVudCA9IG51bGw7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZShTdHJpbmcgdm9sdW1lTmFtZSkgewotICAgICAgICBtTWVkaWFQcm92aWRlciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLmFjcXVpcmVQcm92aWRlcigibWVkaWEiKTsKLQotICAgICAgICBtQXVkaW9VcmkgPSBBdWRpby5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotICAgICAgICBtVmlkZW9VcmkgPSBWaWRlby5NZWRpYS5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotICAgICAgICBtSW1hZ2VzVXJpID0gSW1hZ2VzLk1lZGlhLmdldENvbnRlbnRVcmkodm9sdW1lTmFtZSk7Ci0gICAgICAgIG1UaHVtYnNVcmkgPSBJbWFnZXMuVGh1bWJuYWlscy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotICAgICAgICBtRmlsZXNVcmkgPSBGaWxlcy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotICAgICAgICBtRmlsZXNVcmlOb05vdGlmeSA9IG1GaWxlc1VyaS5idWlsZFVwb24oKS5hcHBlbmRRdWVyeVBhcmFtZXRlcigibm9ub3RpZnkiLCAiMSIpLmJ1aWxkKCk7Ci0KLSAgICAgICAgaWYgKCF2b2x1bWVOYW1lLmVxdWFscygiaW50ZXJuYWwiKSkgewotICAgICAgICAgICAgLy8gd2Ugb25seSBzdXBwb3J0IHBsYXlsaXN0cyBvbiBleHRlcm5hbCBtZWRpYQotICAgICAgICAgICAgbVByb2Nlc3NQbGF5bGlzdHMgPSB0cnVlOwotICAgICAgICAgICAgbVByb2Nlc3NHZW5yZXMgPSB0cnVlOwotICAgICAgICAgICAgbVBsYXlsaXN0c1VyaSA9IFBsYXlsaXN0cy5nZXRDb250ZW50VXJpKHZvbHVtZU5hbWUpOwotCi0gICAgICAgICAgICBtQ2FzZUluc2Vuc2l0aXZlUGF0aHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2NhbkRpcmVjdG9yaWVzKFN0cmluZ1tdIGRpcmVjdG9yaWVzLCBTdHJpbmcgdm9sdW1lTmFtZSkgeworICAgIHB1YmxpYyB2b2lkIHNjYW5EaXJlY3RvcmllcyhTdHJpbmdbXSBkaXJlY3RvcmllcykgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZSh2b2x1bWVOYW1lKTsKICAgICAgICAgICAgIHByZXNjYW4obnVsbCwgdHJ1ZSk7CiAgICAgICAgICAgICBsb25nIHByZXNjYW4gPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAogICAgICAgICAgICAgaWYgKEVOQUJMRV9CVUxLX0lOU0VSVFMpIHsKICAgICAgICAgICAgICAgICAvLyBjcmVhdGUgTWVkaWFJbnNlcnRlciBmb3IgYnVsayBpbnNlcnRzCi0gICAgICAgICAgICAgICAgbU1lZGlhSW5zZXJ0ZXIgPSBuZXcgTWVkaWFJbnNlcnRlcihtTWVkaWFQcm92aWRlciwgbVBhY2thZ2VOYW1lLCA1MDApOworICAgICAgICAgICAgICAgIG1NZWRpYUluc2VydGVyID0gbmV3IE1lZGlhSW5zZXJ0ZXIobU1lZGlhUHJvdmlkZXIsIDUwMCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlyZWN0b3JpZXMubGVuZ3RoOyBpKyspIHsKQEAgLTEzNDksOSArMTM1MSw4IEBACiAgICAgfQogCiAgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNjYW4gYSBzaW5nbGUgZmlsZQotICAgIHB1YmxpYyBVcmkgc2NhblNpbmdsZUZpbGUoU3RyaW5nIHBhdGgsIFN0cmluZyB2b2x1bWVOYW1lLCBTdHJpbmcgbWltZVR5cGUpIHsKKyAgICBwdWJsaWMgVXJpIHNjYW5TaW5nbGVGaWxlKFN0cmluZyBwYXRoLCBTdHJpbmcgbWltZVR5cGUpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGluaXRpYWxpemUodm9sdW1lTmFtZSk7CiAgICAgICAgICAgICBwcmVzY2FuKHBhdGgsIHRydWUpOwogCiAgICAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoKTsKQEAgLTE0NjQsOCArMTQ2NSw3IEBACiAgICAgICAgIHJldHVybiBpc05vTWVkaWFGaWxlKHBhdGgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNjYW5NdHBGaWxlKFN0cmluZyBwYXRoLCBTdHJpbmcgdm9sdW1lTmFtZSwgaW50IG9iamVjdEhhbmRsZSwgaW50IGZvcm1hdCkgewotICAgICAgICBpbml0aWFsaXplKHZvbHVtZU5hbWUpOworICAgIHB1YmxpYyB2b2lkIHNjYW5NdHBGaWxlKFN0cmluZyBwYXRoLCBpbnQgb2JqZWN0SGFuZGxlLCBpbnQgZm9ybWF0KSB7CiAgICAgICAgIE1lZGlhRmlsZS5NZWRpYUZpbGVUeXBlIG1lZGlhRmlsZVR5cGUgPSBNZWRpYUZpbGUuZ2V0RmlsZVR5cGUocGF0aCk7CiAgICAgICAgIGludCBmaWxlVHlwZSA9IChtZWRpYUZpbGVUeXBlID09IG51bGwgPyAwIDogbWVkaWFGaWxlVHlwZS5maWxlVHlwZSk7CiAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHBhdGgpOwpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAKICAgICAgICAgICAgIHZhbHVlcy5wdXQoRmlsZXMuRmlsZUNvbHVtbnMuREFURV9NT0RJRklFRCwgbGFzdE1vZGlmaWVkU2Vjb25kcyk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFN0cmluZ1tdIHdoZXJlQXJncyA9IG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKG9iamVjdEhhbmRsZSkgfTsKLSAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci51cGRhdGUobVBhY2thZ2VOYW1lLCBGaWxlcy5nZXRNdHBPYmplY3RzVXJpKHZvbHVtZU5hbWUpLCB2YWx1ZXMsCisgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKEZpbGVzLmdldE10cE9iamVjdHNVcmkobVZvbHVtZU5hbWUpLCB2YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX2lkPT8iLCB3aGVyZUFyZ3MpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJSZW1vdGVFeGNlcHRpb24gaW4gc2Nhbk10cEZpbGUiLCBlKTsKQEAgLTE0OTgsNyArMTQ5OCw3IEBACiAKICAgICAgICAgICAgICAgICBGaWxlRW50cnkgZW50cnkgPSBtYWtlRW50cnlGb3IocGF0aCk7CiAgICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsZUxpc3QgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1GaWxlc1VyaSwKKyAgICAgICAgICAgICAgICAgICAgZmlsZUxpc3QgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtRmlsZXNVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1BsYXlMaXN0KGVudHJ5LCBmaWxlTGlzdCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTUyOSw3ICsxNTI5LDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHdoZXJlID0gRmlsZXMuRmlsZUNvbHVtbnMuREFUQSArICI9PyI7CiAgICAgICAgICAgICBzZWxlY3Rpb25BcmdzID0gbmV3IFN0cmluZ1tdIHsgcGF0aCB9OwotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbUZpbGVzVXJpTm9Ob3RpZnksIEZJTEVTX1BSRVNDQU5fUFJPSkVDVElPTiwKKyAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtRmlsZXNVcmlOb05vdGlmeSwgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLAogICAgICAgICAgICAgICAgICAgICB3aGVyZSwgc2VsZWN0aW9uQXJncywgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYy5tb3ZlVG9GaXJzdCgpKSB7CiAgICAgICAgICAgICAgICAgbG9uZyByb3dJZCA9IGMuZ2V0TG9uZyhGSUxFU19QUkVTQ0FOX0lEX0NPTFVNTl9JTkRFWCk7CkBAIC0xNjQxLDcgKzE2NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuY2xlYXIoKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChNZWRpYVN0b3JlLkF1ZGlvLlBsYXlsaXN0cy5NZW1iZXJzLlBMQVlfT1JERVIsIEludGVnZXIudmFsdWVPZihpbmRleCkpOwogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KE1lZGlhU3RvcmUuQXVkaW8uUGxheWxpc3RzLk1lbWJlcnMuQVVESU9fSUQsIExvbmcudmFsdWVPZihlbnRyeS5iZXN0bWF0Y2hpZCkpOwotICAgICAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5pbnNlcnQobVBhY2thZ2VOYW1lLCBwbGF5bGlzdFVyaSwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KHBsYXlsaXN0VXJpLCB2YWx1ZXMpOwogICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlJlbW90ZUV4Y2VwdGlvbiBpbiBNZWRpYVNjYW5uZXIucHJvY2Vzc0NhY2hlZFBsYXlsaXN0KCkiLCBlKTsKQEAgLTE4MDYsMTYgKzE4MDYsMTYgQEAKIAogICAgICAgICBpZiAocm93SWQgPT0gMCkgewogICAgICAgICAgICAgdmFsdWVzLnB1dChNZWRpYVN0b3JlLkF1ZGlvLlBsYXlsaXN0cy5EQVRBLCBwYXRoKTsKLSAgICAgICAgICAgIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtUGFja2FnZU5hbWUsIG1QbGF5bGlzdHNVcmksIHZhbHVlcyk7CisgICAgICAgICAgICB1cmkgPSBtTWVkaWFQcm92aWRlci5pbnNlcnQobVBsYXlsaXN0c1VyaSwgdmFsdWVzKTsKICAgICAgICAgICAgIHJvd0lkID0gQ29udGVudFVyaXMucGFyc2VJZCh1cmkpOwogICAgICAgICAgICAgbWVtYmVyc1VyaSA9IFVyaS53aXRoQXBwZW5kZWRQYXRoKHVyaSwgUGxheWxpc3RzLk1lbWJlcnMuQ09OVEVOVF9ESVJFQ1RPUlkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdXJpID0gQ29udGVudFVyaXMud2l0aEFwcGVuZGVkSWQobVBsYXlsaXN0c1VyaSwgcm93SWQpOwotICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKG1QYWNrYWdlTmFtZSwgdXJpLCB2YWx1ZXMsIG51bGwsIG51bGwpOworICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIudXBkYXRlKHVyaSwgdmFsdWVzLCBudWxsLCBudWxsKTsKIAogICAgICAgICAgICAgLy8gZGVsZXRlIG1lbWJlcnMgb2YgZXhpc3RpbmcgcGxheWxpc3QKICAgICAgICAgICAgIG1lbWJlcnNVcmkgPSBVcmkud2l0aEFwcGVuZGVkUGF0aCh1cmksIFBsYXlsaXN0cy5NZW1iZXJzLkNPTlRFTlRfRElSRUNUT1JZKTsKLSAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmRlbGV0ZShtUGFja2FnZU5hbWUsIG1lbWJlcnNVcmksIG51bGwsIG51bGwpOworICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuZGVsZXRlKG1lbWJlcnNVcmksIG51bGwsIG51bGwpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIHBsYXlMaXN0RGlyZWN0b3J5ID0gcGF0aC5zdWJzdHJpbmcoMCwgbGFzdFNsYXNoICsgMSk7CkBAIC0xODM3LDcgKzE4MzcsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gdXNlIHRoZSBmaWxlcyB1cmkgYW5kIHByb2plY3Rpb24gYmVjYXVzZSB3ZSBuZWVkIHRoZSBmb3JtYXQgY29sdW1uLAogICAgICAgICAgICAgLy8gYnV0IHJlc3RyaWN0IHRoZSBxdWVyeSB0byBqdXN0IGF1ZGlvIGZpbGVzCi0gICAgICAgICAgICBmaWxlTGlzdCA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbUZpbGVzVXJpLCBGSUxFU19QUkVTQ0FOX1BST0pFQ1RJT04sCisgICAgICAgICAgICBmaWxlTGlzdCA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1GaWxlc1VyaSwgRklMRVNfUFJFU0NBTl9QUk9KRUNUSU9OLAogICAgICAgICAgICAgICAgICAgICAibWVkaWFfdHlwZT0yIiwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgRmlsZUVudHJ5IGVudHJ5ID0gaXRlcmF0b3IubmV4dCgpOwpAQCAtMTg1Niw3ICsxODU2LDcgQEAKIAogICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgcHJvY2Vzc0RpcmVjdG9yeShTdHJpbmcgcGF0aCwgTWVkaWFTY2FubmVyQ2xpZW50IGNsaWVudCk7CiAgICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBwcm9jZXNzRmlsZShTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlLCBNZWRpYVNjYW5uZXJDbGllbnQgY2xpZW50KTsKLSAgICBwdWJsaWMgbmF0aXZlIHZvaWQgc2V0TG9jYWxlKFN0cmluZyBsb2NhbGUpOworICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgc2V0TG9jYWxlKFN0cmluZyBsb2NhbGUpOwogCiAgICAgcHVibGljIG5hdGl2ZSBieXRlW10gZXh0cmFjdEFsYnVtQXJ0KEZpbGVEZXNjcmlwdG9yIGZkKTsKIApAQCAtMTg2NCwxOSArMTg2NCwyMiBAQAogICAgIHByaXZhdGUgbmF0aXZlIGZpbmFsIHZvaWQgbmF0aXZlX3NldHVwKCk7CiAgICAgcHJpdmF0ZSBuYXRpdmUgZmluYWwgdm9pZCBuYXRpdmVfZmluYWxpemUoKTsKIAotICAgIC8qKgotICAgICAqIFJlbGVhc2VzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBNZWRpYVNjYW5uZXIgb2JqZWN0LgotICAgICAqIEl0IGlzIGNvbnNpZGVyZWQgZ29vZCBwcmFjdGljZSB0byBjYWxsIHRoaXMgbWV0aG9kIHdoZW4KLSAgICAgKiBvbmUgaXMgZG9uZSB1c2luZyB0aGUgTWVkaWFTY2FubmVyIG9iamVjdC4gQWZ0ZXIgdGhpcyBtZXRob2QKLSAgICAgKiBpcyBjYWxsZWQsIHRoZSBNZWRpYVNjYW5uZXIgb2JqZWN0IGNhbiBubyBsb25nZXIgYmUgdXNlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBuYXRpdmVfZmluYWxpemUoKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKKyAgICAgICAgbUNsb3NlR3VhcmQuY2xvc2UoKTsKKyAgICAgICAgaWYgKG1DbG9zZWQuY29tcGFyZUFuZFNldChmYWxzZSwgdHJ1ZSkpIHsKKyAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNsb3NlKCk7CisgICAgICAgICAgICBuYXRpdmVfZmluYWxpemUoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIGZpbmFsaXplKCkgewotICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWxlYXNlUHJvdmlkZXIobU1lZGlhUHJvdmlkZXIpOwotICAgICAgICBuYXRpdmVfZmluYWxpemUoKTsKKyAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUNsb3NlR3VhcmQud2FybklmT3BlbigpOworICAgICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHN1cGVyLmZpbmFsaXplKCk7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3Nlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL2Jyb3dzZS9NZWRpYUJyb3dzZXIuamF2YQppbmRleCBiZTlmYjQ3Li40Y2E4OWE4IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvYnJvd3NlL01lZGlhQnJvd3Nlci5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS9icm93c2UvTWVkaWFCcm93c2VyLmphdmEKQEAgLTU3NCw2ICs1NzQsOSBAQAogICAgICAgICBMb2cuZChUQUcsICIgIG1NZWRpYVNlc3Npb25Ub2tlbj0iICsgbU1lZGlhU2Vzc2lvblRva2VuKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBBIGNsYXNzIHdpdGggaW5mb3JtYXRpb24gb24gYSBzaW5nbGUgbWVkaWEgaXRlbSBmb3IgdXNlIGluIGJyb3dzaW5nIG1lZGlhLgorICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTWVkaWFJdGVtIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1GbGFnczsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBNZWRpYURlc2NyaXB0aW9uIG1EZXNjcmlwdGlvbjsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS90di9UdklucHV0TWFuYWdlci5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRNYW5hZ2VyLmphdmEKaW5kZXggZTljOTRjMC4uNmExM2Y4MiAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRNYW5hZ2VyLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL21lZGlhL3R2L1R2SW5wdXRNYW5hZ2VyLmphdmEKQEAgLTEyOSw5ICsxMjksOCBAQAogICAgICAqIFRoZSBUViBpbnB1dCBpcyBjb25uZWN0ZWQuCiAgICAgICoKICAgICAgKiA8cD5UaGlzIHN0YXRlIGluZGljYXRlcyB0aGF0IGEgc291cmNlIGRldmljZSBpcyBjb25uZWN0ZWQgdG8gdGhlIGlucHV0IHBvcnQgYW5kIGlzIGluIHRoZQotICAgICAqIG5vcm1hbCBvcGVyYXRpb24gbW9kZS4gSXQgaXMgbW9zdGx5IHJlbGV2YW50IHRvIGhhcmR3YXJlIGlucHV0cyBzdWNoIGFzIEhETUkgaW5wdXQuIFRoaXMgaXMKLSAgICAgKiB0aGUgZGVmYXVsdCBzdGF0ZSBmb3IgYW55IGhhcmR3YXJlIGlucHV0cyB3aGVyZSB0aGVpciBzdGF0ZXMgYXJlIHVua25vd24uIE5vbi1oYXJkd2FyZSBpbnB1dHMKLSAgICAgKiBhcmUgY29uc2lkZXJlZCBjb25uZWN0ZWQgYWxsIHRoZSB0aW1lLgorICAgICAqIG5vcm1hbCBvcGVyYXRpb24gbW9kZS4gSXQgaXMgbW9zdGx5IHJlbGV2YW50IHRvIGhhcmR3YXJlIGlucHV0cyBzdWNoIGFzIEhETUkgaW5wdXQuCisgICAgICogTm9uLWhhcmR3YXJlIGlucHV0cyBhcmUgY29uc2lkZXJlZCBjb25uZWN0ZWQgYWxsIHRoZSB0aW1lLgogICAgICAqCiAgICAgICogQHNlZSAjZ2V0SW5wdXRTdGF0ZQogICAgICAqIEBzZWUgVHZJbnB1dE1hbmFnZXIuVHZJbnB1dENhbGxiYWNrI29uSW5wdXRTdGF0ZUNoYW5nZWQKQEAgLTE0MSw3ICsxNDAsOCBAQAogICAgICAqIFRoZSBUViBpbnB1dCBpcyBjb25uZWN0ZWQgYnV0IGluIHN0YW5kYnkgbW9kZS4KICAgICAgKgogICAgICAqIDxwPlRoaXMgc3RhdGUgaW5kaWNhdGVzIHRoYXQgYSBzb3VyY2UgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byB0aGUgaW5wdXQgcG9ydCBidXQgaXMgaW4gc3RhbmRieQotICAgICAqIG1vZGUuIEl0IGlzIG1vc3RseSByZWxldmFudCB0byBoYXJkd2FyZSBpbnB1dHMgc3VjaCBhcyBIRE1JIGlucHV0LgorICAgICAqIG9yIGxvdyBwb3dlciBtb2RlLiBJdCBpcyBtb3N0bHkgcmVsZXZhbnQgdG8gaGFyZHdhcmUgaW5wdXRzIHN1Y2ggYXMgSERNSSBpbnB1dHMgYW5kIENvbXBvbmVudAorICAgICAqIGlucHV0cy4KICAgICAgKgogICAgICAqIEBzZWUgI2dldElucHV0U3RhdGUKICAgICAgKiBAc2VlIFR2SW5wdXRNYW5hZ2VyLlR2SW5wdXRDYWxsYmFjayNvbklucHV0U3RhdGVDaGFuZ2VkCmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbWVkaWEvdHYvVHZTdHJlYW1Db25maWcuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS90di9UdlN0cmVhbUNvbmZpZy5qYXZhCmluZGV4IDBjMmYzZmUuLmVhZTgzY2YgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS90di9UdlN0cmVhbUNvbmZpZy5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tZWRpYS90di9UdlN0cmVhbUNvbmZpZy5qYXZhCkBAIC0yOCw4ICsyOCwxNSBAQAogcHVibGljIGNsYXNzIFR2U3RyZWFtQ29uZmlnIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUdlN0cmVhbUNvbmZpZy5jbGFzcy5nZXRTaW1wbGVOYW1lKCk7CiAKKyAgICAvLyBNdXN0IGJlIGluIHN5bmMgd2l0aCB0dl9pbnB1dC5oCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgU1RSRUFNX1RZUEVfSU5ERVBFTkRFTlRfVklERU9fU09VUkNFID0gMTsKICAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBTVFJFQU1fVFlQRV9CVUZGRVJfUFJPRFVDRVIgPSAyOworICAgIC8qKgorICAgICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEhBTCBpcyBzdXJlIGFib3V0IHNpZ25hbCBhdCB0aGlzIHN0cmVhbS4gTm90ZSB0aGF0CisgICAgICogdmFsdWUgb2YgMCBoZXJlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gbm8gc2lnbmFsLiBJdCBqdXN0IG1lYW5zIHRoYXQgaXQgbWF5IG5vdCBoYXZlCisgICAgICogc2lnbmFsIGFuZCB0aGUgdW5kZXJseWluZyBsYXllciBpcyBub3Qgc3VyZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX01BU0tfU0lHTkFMX0RFVEVDVElPTiA9IDB4MTsKIAogICAgIHByaXZhdGUgaW50IG1TdHJlYW1JZDsKICAgICBwcml2YXRlIGludCBtVHlwZTsKQEAgLTQxLDYgKzQ4LDEwIEBACiAgICAgICogdmlhIHR2X2lucHV0X2RldmljZTo6Z2V0X3N0cmVhbV9jb25maWd1cmF0aW9ucygpLgogICAgICAqLwogICAgIHByaXZhdGUgaW50IG1HZW5lcmF0aW9uOworICAgIC8qKgorICAgICAqIEZsYWdzIGZvciBzdHJlYW0gc3RhdHVzLiBTZWUgRkxBR19NQVNLXyogZm9yIGRldGFpbHMuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgbUZsYWdzOwogCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQYXJjZWxhYmxlLkNyZWF0b3I8VHZTdHJlYW1Db25maWc+IENSRUFUT1IgPQogICAgICAgICAgICAgbmV3IFBhcmNlbGFibGUuQ3JlYXRvcjxUdlN0cmVhbUNvbmZpZz4oKSB7CkBAIC01Miw3ICs2Myw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHNvdXJjZS5yZWFkSW50KCkpLgogICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGgoc291cmNlLnJlYWRJbnQoKSkuCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhIZWlnaHQoc291cmNlLnJlYWRJbnQoKSkuCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uKHNvdXJjZS5yZWFkSW50KCkpLmJ1aWxkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0aW9uKHNvdXJjZS5yZWFkSW50KCkpLgorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3Moc291cmNlLnJlYWRJbnQoKSkuYnVpbGQoKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXhjZXB0aW9uIGNyZWF0aW5nIFR2U3RyZWFtQ29uZmlnIGZyb20gcGFyY2VsIiwgZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC04Nyw2ICs5OSwxMCBAQAogICAgICAgICByZXR1cm4gbUdlbmVyYXRpb247CiAgICAgfQogCisgICAgcHVibGljIGludCBnZXRGbGFncygpIHsKKyAgICAgICAgcmV0dXJuIG1GbGFnczsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlR2U3RyZWFtQ29uZmlnIHttU3RyZWFtSWQ9IiArIG1TdHJlYW1JZCArICI7IiArICJtVHlwZT0iICsgbVR5cGUgKyAiO21HZW5lcmF0aW9uPSIKQEAgLTEwNiw2ICsxMjIsNyBAQAogICAgICAgICBkZXN0LndyaXRlSW50KG1NYXhXaWR0aCk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQobU1heEhlaWdodCk7CiAgICAgICAgIGRlc3Qud3JpdGVJbnQobUdlbmVyYXRpb24pOworICAgICAgICBkZXN0LndyaXRlSW50KG1GbGFncyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMTcsNiArMTM0LDcgQEAKICAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG1NYXhXaWR0aDsKICAgICAgICAgcHJpdmF0ZSBJbnRlZ2VyIG1NYXhIZWlnaHQ7CiAgICAgICAgIHByaXZhdGUgSW50ZWdlciBtR2VuZXJhdGlvbjsKKyAgICAgICAgcHJpdmF0ZSBpbnQgbUZsYWdzID0gMDsKIAogICAgICAgICBwdWJsaWMgQnVpbGRlcigpIHsKICAgICAgICAgfQpAQCAtMTQ2LDYgKzE2NCwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgQnVpbGRlciBmbGFncyhpbnQgZmxhZykgeworICAgICAgICAgICAgbUZsYWdzID0gZmxhZzsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisKICAgICAgICAgcHVibGljIFR2U3RyZWFtQ29uZmlnIGJ1aWxkKCkgewogICAgICAgICAgICAgaWYgKG1TdHJlYW1JZCA9PSBudWxsIHx8IG1UeXBlID09IG51bGwgfHwgbU1heFdpZHRoID09IG51bGwgfHwgbU1heEhlaWdodCA9PSBudWxsCiAgICAgICAgICAgICAgICAgICAgIHx8IG1HZW5lcmF0aW9uID09IG51bGwpIHsKQEAgLTE1OCw2ICsxODEsNyBAQAogICAgICAgICAgICAgY29uZmlnLm1NYXhXaWR0aCA9IG1NYXhXaWR0aDsKICAgICAgICAgICAgIGNvbmZpZy5tTWF4SGVpZ2h0ID0gbU1heEhlaWdodDsKICAgICAgICAgICAgIGNvbmZpZy5tR2VuZXJhdGlvbiA9IG1HZW5lcmF0aW9uOworICAgICAgICAgICAgY29uZmlnLm1GbGFncyA9IG1GbGFnczsKICAgICAgICAgICAgIHJldHVybiBjb25maWc7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNzIsNiArMTk2LDcgQEAKICAgICAgICAgICAgICYmIGNvbmZpZy5tU3RyZWFtSWQgPT0gbVN0cmVhbUlkCiAgICAgICAgICAgICAmJiBjb25maWcubVR5cGUgPT0gbVR5cGUKICAgICAgICAgICAgICYmIGNvbmZpZy5tTWF4V2lkdGggPT0gbU1heFdpZHRoCi0gICAgICAgICAgICAmJiBjb25maWcubU1heEhlaWdodCA9PSBtTWF4SGVpZ2h0OworICAgICAgICAgICAgJiYgY29uZmlnLm1NYXhIZWlnaHQgPT0gbU1heEhlaWdodAorICAgICAgICAgICAgJiYgY29uZmlnLm1GbGFncyA9PSBtRmxhZ3M7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBDb25zdGFudHMuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwQ29uc3RhbnRzLmphdmEKaW5kZXggZDI0NWY1ODguLmIyYTVhNDQgMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwQ29uc3RhbnRzLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBDb25zdGFudHMuamF2YQpAQCAtNTczLDQgKzU3MywxMTIgQEAKICAgICAgKiBBc3NvY2lhdGlvbiB0eXBlIGZvciBvYmplY3RzIHJlcHJlc2VudGluZyBmaWxlIHN5c3RlbSBkaXJlY3Rvcmllcy4KICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBU1NPQ0lBVElPTl9UWVBFX0dFTkVSSUNfRk9MREVSID0gMHgwMDAxOworCisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIFVOREVGSU5FRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1VOREVGSU5FRCA9IDB4NDAwMDsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgQ0FOQ0VMX1RSQU5TQUNUSU9OIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FOQ0VMX1RSQU5TQUNUSU9OID0gMHg0MDAxOworICAgIC8qKiBFdmVudCBjb2RlIGZvciBPQkpFQ1RfQURERUQgZXZlbnQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfQURERUQgPSAweDQwMDI7CisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIE9CSkVDVF9SRU1PVkVEIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFTU9WRUQgPSAweDQwMDM7CisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIFNUT1JFX0FEREVEIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfQURERUQgPSAweDQwMDQ7CisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIFNUT1JFX1JFTU9WRUQgZXZlbnQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMHg0MDA1OworICAgIC8qKiBFdmVudCBjb2RlIGZvciBERVZJQ0VfUFJPUF9DSEFOR0VEIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1BST1BfQ0hBTkdFRCA9IDB4NDAwNjsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgT0JKRUNUX0lORk9fQ0hBTkdFRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9JTkZPX0NIQU5HRUQgPSAweDQwMDc7CisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIERFVklDRV9JTkZPX0NIQU5HRUQgZXZlbnQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMHg0MDA4OworICAgIC8qKiBFdmVudCBjb2RlIGZvciBSRVFVRVNUX09CSkVDVF9UUkFOU0ZFUiBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1JFUVVFU1RfT0JKRUNUX1RSQU5TRkVSID0gMHg0MDA5OworICAgIC8qKiBFdmVudCBjb2RlIGZvciBTVE9SRV9GVUxMIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfU1RPUkVfRlVMTCA9IDB4NDAwQTsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgREVWSUNFX1JFU0VUIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMHg0MDBCOworICAgIC8qKiBFdmVudCBjb2RlIGZvciBTVE9SQUdFX0lORk9fQ0hBTkdFRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NUT1JBR0VfSU5GT19DSEFOR0VEID0gMHg0MDBDOworICAgIC8qKiBFdmVudCBjb2RlIGZvciBDQVBUVVJFX0NPTVBMRVRFIGV2ZW50ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FQVFVSRV9DT01QTEVURSA9IDB4NDAwRDsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgVU5SRVBPUlRFRF9TVEFUVVMgZXZlbnQgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTlJFUE9SVEVEX1NUQVRVUyA9IDB4NDAwRTsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgT0JKRUNUX1BST1BfQ0hBTkdFRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0NIQU5HRUQgPSAweEM4MDE7CisgICAgLyoqIEV2ZW50IGNvZGUgZm9yIE9CSkVDVF9QUk9QX0RFU0NfQ0hBTkdFRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9QUk9QX0RFU0NfQ0hBTkdFRCA9IDB4QzgwMjsKKyAgICAvKiogRXZlbnQgY29kZSBmb3IgT0JKRUNUX1JFRkVSRU5DRVNfQ0hBTkdFRCBldmVudCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQgPSAweEM4MDM7CisKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIEdldERldmljZUluZm8gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9JTkZPID0gMHgxMDAxOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgT3BlblNlc3Npb24gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fT1BFTl9TRVNTSU9OID0gMHgxMDAyOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgQ2xvc2VTZXNzaW9uICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0NMT1NFX1NFU1NJT04gPSAweDEwMDM7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXRTdG9yYWdlSURzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9TVE9SQUdFX0lfRFMgPSAweDEwMDQ7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXRTdG9yYWdlSW5mbyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfU1RPUkFHRV9JTkZPID0gMHgxMDA1OworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgR2V0TnVtT2JqZWN0cyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfTlVNX09CSkVDVFMgPSAweDEwMDY7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXRPYmplY3RIYW5kbGVzICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfSEFORExFUyA9IDB4MTAwNzsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIEdldE9iamVjdEluZm8gKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9JTkZPID0gMHgxMDA4OworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgR2V0T2JqZWN0ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1QgPSAweDEwMDk7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXRUaHVtYiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfVEhVTUIgPSAweDEwMEE7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBEZWxldGVPYmplY3QgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fREVMRVRFX09CSkVDVCA9IDB4MTAwQjsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIFNlbmRPYmplY3RJbmZvICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFTkRfT0JKRUNUX0lORk8gPSAweDEwMEM7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBTZW5kT2JqZWN0ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFTkRfT0JKRUNUID0gMHgxMDBEOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgSW5pdGlhdGVDYXB0dXJlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0lOSVRJQVRFX0NBUFRVUkUgPSAweDEwMEU7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBGb3JtYXRTdG9yZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9GT1JNQVRfU1RPUkUgPSAweDEwMEY7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBSZXNldERldmljZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9SRVNFVF9ERVZJQ0UgPSAweDEwMTA7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBTZWxmVGVzdCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRUxGX1RFU1QgPSAweDEwMTE7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBTZXRPYmplY3RQcm90ZWN0aW9uICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFVF9PQkpFQ1RfUFJPVEVDVElPTiA9IDB4MTAxMjsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIFBvd2VyRG93biAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9QT1dFUl9ET1dOID0gMHgxMDEzOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgR2V0RGV2aWNlUHJvcERlc2MgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9QUk9QX0RFU0MgPSAweDEwMTQ7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXREZXZpY2VQcm9wVmFsdWUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX0RFVklDRV9QUk9QX1ZBTFVFID0gMHgxMDE1OworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgU2V0RGV2aWNlUHJvcFZhbHVlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFVF9ERVZJQ0VfUFJPUF9WQUxVRSA9IDB4MTAxNjsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIFJlc2V0RGV2aWNlUHJvcFZhbHVlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1JFU0VUX0RFVklDRV9QUk9QX1ZBTFVFID0gMHgxMDE3OworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgVGVybWluYXRlT3BlbkNhcHR1cmUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVEVSTUlOQVRFX09QRU5fQ0FQVFVSRSA9IDB4MTAxODsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIE1vdmVPYmplY3QgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fTU9WRV9PQkpFQ1QgPSAweDEwMTk7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBDb3B5T2JqZWN0ICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0NPUFlfT0JKRUNUID0gMHgxMDFBOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgR2V0UGFydGlhbE9iamVjdCAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9HRVRfUEFSVElBTF9PQkpFQ1QgPSAweDEwMUI7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBJbml0aWF0ZU9wZW5DYXB0dXJlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0lOSVRJQVRFX09QRU5fQ0FQVFVSRSA9IDB4MTAxQzsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIEdldE9iamVjdFByb3BzU3VwcG9ydGVkICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0dFVF9PQkpFQ1RfUFJPUFNfU1VQUE9SVEVEID0gMHg5ODAxOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgR2V0T2JqZWN0UHJvcERlc2MgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QX0RFU0MgPSAweDk4MDI7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBHZXRPYmplY3RQcm9wVmFsdWUgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9QUk9QX1ZBTFVFID0gMHg5ODAzOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgU2V0T2JqZWN0UHJvcFZhbHVlICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NFVF9PQkpFQ1RfUFJPUF9WQUxVRSA9IDB4OTgwNDsKKyAgICAvKiogT3BlcmF0aW9uIGNvZGUgZm9yIEdldE9iamVjdFJlZmVyZW5jZXMgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fR0VUX09CSkVDVF9SRUZFUkVOQ0VTID0gMHg5ODEwOworICAgIC8qKiBPcGVyYXRpb24gY29kZSBmb3IgU2V0T2JqZWN0UmVmZXJlbmNlcyAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9TRVRfT0JKRUNUX1JFRkVSRU5DRVMgPSAweDk4MTE7CisgICAgLyoqIE9wZXJhdGlvbiBjb2RlIGZvciBTa2lwICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX1NLSVAgPSAweDk4MjA7CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKaW5kZXggMzU0MWZiYS4uYmM5NmUyZSAxMDA3NTUKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQpAQCAtMTcsOSArMTcsOSBAQAogcGFja2FnZSBhbmRyb2lkLm10cDsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JQ29udGVudFByb3ZpZGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CkBAIC0zNywyMyArMzcsMzAgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKIAoraW1wb3J0IGRhbHZpay5zeXN0ZW0uQ2xvc2VHdWFyZDsKKwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jvb2xlYW47CiAKIC8qKgogICoge0BoaWRlfQogICovCi1wdWJsaWMgY2xhc3MgTXRwRGF0YWJhc2UgewotCitwdWJsaWMgY2xhc3MgTXRwRGF0YWJhc2UgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk10cERhdGFiYXNlIjsKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtUGFja2FnZU5hbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBJQ29udGVudFByb3ZpZGVyIG1NZWRpYVByb3ZpZGVyOworICAgIHByaXZhdGUgZmluYWwgQ29udGVudFByb3ZpZGVyQ2xpZW50IG1NZWRpYVByb3ZpZGVyOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1Wb2x1bWVOYW1lOwogICAgIHByaXZhdGUgZmluYWwgVXJpIG1PYmplY3RzVXJpOworICAgIHByaXZhdGUgZmluYWwgTWVkaWFTY2FubmVyIG1NZWRpYVNjYW5uZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gbUNsb3NlZCA9IG5ldyBBdG9taWNCb29sZWFuKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBDbG9zZUd1YXJkIG1DbG9zZUd1YXJkID0gQ2xvc2VHdWFyZC5nZXQoKTsKKwogICAgIC8vIHBhdGggdG8gcHJpbWFyeSBzdG9yYWdlCiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU1lZGlhU3RvcmFnZVBhdGg7CiAgICAgLy8gaWYgbm90IG51bGwsIHJlc3RyaWN0IGFsbCBxdWVyaWVzIHRvIHRoZXNlIHN1YmRpcmVjdG9yaWVzCkBAIC0xMjAsNyArMTI3LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1RPUkFHRV9GT1JNQVRfUEFSRU5UX1dIRVJFID0gU1RPUkFHRV9GT1JNQVRfV0hFUkUgKyAiIEFORCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgRmlsZXMuRmlsZUNvbHVtbnMuUEFSRU5UICsgIj0/IjsKIAotICAgIHByaXZhdGUgZmluYWwgTWVkaWFTY2FubmVyIG1NZWRpYVNjYW5uZXI7CiAgICAgcHJpdmF0ZSBNdHBTZXJ2ZXIgbVNlcnZlcjsKIAogICAgIC8vIHJlYWQgZnJvbSBuYXRpdmUgY29kZQpAQCAtMTU2LDExICsxNjIsMTIgQEAKIAogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKLSAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLmFjcXVpcmVQcm92aWRlcigibWVkaWEiKTsKKyAgICAgICAgbU1lZGlhUHJvdmlkZXIgPSBjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpCisgICAgICAgICAgICAgICAgLmFjcXVpcmVDb250ZW50UHJvdmlkZXJDbGllbnQoTWVkaWFTdG9yZS5BVVRIT1JJVFkpOwogICAgICAgICBtVm9sdW1lTmFtZSA9IHZvbHVtZU5hbWU7CiAgICAgICAgIG1NZWRpYVN0b3JhZ2VQYXRoID0gc3RvcmFnZVBhdGg7CiAgICAgICAgIG1PYmplY3RzVXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaSh2b2x1bWVOYW1lKTsKLSAgICAgICAgbU1lZGlhU2Nhbm5lciA9IG5ldyBNZWRpYVNjYW5uZXIoY29udGV4dCk7CisgICAgICAgIG1NZWRpYVNjYW5uZXIgPSBuZXcgTWVkaWFTY2FubmVyKGNvbnRleHQsIG1Wb2x1bWVOYW1lKTsKIAogICAgICAgICBtU3ViRGlyZWN0b3JpZXMgPSBzdWJEaXJlY3RvcmllczsKICAgICAgICAgaWYgKHN1YkRpcmVjdG9yaWVzICE9IG51bGwpIHsKQEAgLTE4NywyMCArMTk0LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIFNldCBsb2NhbGUgdG8gTWVkaWFTY2FubmVyLgotICAgICAgICBMb2NhbGUgbG9jYWxlID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkubG9jYWxlOwotICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IGxvY2FsZS5nZXRMYW5ndWFnZSgpOwotICAgICAgICAgICAgU3RyaW5nIGNvdW50cnkgPSBsb2NhbGUuZ2V0Q291bnRyeSgpOwotICAgICAgICAgICAgaWYgKGxhbmd1YWdlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZWRpYVNjYW5uZXIuc2V0TG9jYWxlKGxhbmd1YWdlICsgIl8iICsgY291bnRyeSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbU1lZGlhU2Nhbm5lci5zZXRMb2NhbGUobGFuZ3VhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBpbml0RGV2aWNlUHJvcGVydGllcyhjb250ZXh0KTsKKworICAgICAgICBtQ2xvc2VHdWFyZC5vcGVuKCJjbG9zZSIpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNlcnZlcihNdHBTZXJ2ZXIgc2VydmVyKSB7CkBAIC0yMjEsOSArMjE3LDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIG1DbG9zZUd1YXJkLmNsb3NlKCk7CisgICAgICAgIGlmIChtQ2xvc2VkLmNvbXBhcmVBbmRTZXQoZmFsc2UsIHRydWUpKSB7CisgICAgICAgICAgICBtTWVkaWFTY2FubmVyLmNsb3NlKCk7CisgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jbG9zZSgpOworICAgICAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSgpIHRocm93cyBUaHJvd2FibGUgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgbmF0aXZlX2ZpbmFsaXplKCk7CisgICAgICAgICAgICBtQ2xvc2VHdWFyZC53YXJuSWZPcGVuKCk7CisgICAgICAgICAgICBjbG9zZSgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgc3VwZXIuZmluYWxpemUoKTsKICAgICAgICAgfQpAQCAtMzM0LDcgKzM0MSw3IEBACiAgICAgICAgIGlmIChwYXRoICE9IG51bGwpIHsKICAgICAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIFBBVEhfV0hFUkUsCisgICAgICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1PYmplY3RzVXJpLCBJRF9QUk9KRUNUSU9OLCBQQVRIX1dIRVJFLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgcGF0aCB9LCBudWxsLCBudWxsKTsKICAgICAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMuZ2V0Q291bnQoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiBiZWdpblNlbmRPYmplY3Q6ICIgKyBwYXRoKTsKQEAgLTM1OSw3ICszNjYsNyBAQAogICAgICAgICB2YWx1ZXMucHV0KEZpbGVzLkZpbGVDb2x1bW5zLkRBVEVfTU9ESUZJRUQsIG1vZGlmaWVkKTsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCB2YWx1ZXMpOworICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydChtT2JqZWN0c1VyaSwgdmFsdWVzKTsKICAgICAgICAgICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHVyaS5nZXRQYXRoU2VnbWVudHMoKS5nZXQoMikpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM5NCwxMyArNDAxLDEzIEBACiAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChGaWxlcy5GaWxlQ29sdW1ucy5EQVRFX01PRElGSUVELCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAvIDEwMDApOwogICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoTWVkaWFDb2x1bW5zLk1FRElBX1NDQU5ORVJfTkVXX09CSkVDVF9JRCwgaGFuZGxlKTsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBVcmkgdXJpID0gbU1lZGlhUHJvdmlkZXIuaW5zZXJ0KG1QYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgVXJpIHVyaSA9IG1NZWRpYVByb3ZpZGVyLmluc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpby5QbGF5bGlzdHMuRVhURVJOQUxfQ09OVEVOVF9VUkksIHZhbHVlcyk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiUmVtb3RlRXhjZXB0aW9uIGluIGVuZFNlbmRPYmplY3QiLCBlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1NZWRpYVNjYW5uZXIuc2Nhbk10cEZpbGUocGF0aCwgbVZvbHVtZU5hbWUsIGhhbmRsZSwgZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBtTWVkaWFTY2FubmVyLnNjYW5NdHBGaWxlKHBhdGgsIGhhbmRsZSwgZm9ybWF0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRlbGV0ZUZpbGUoaGFuZGxlKTsKQEAgLTUwMyw3ICs1MTAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIHdoZXJlLAorICAgICAgICByZXR1cm4gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIElEX1BST0pFQ1RJT04sIHdoZXJlLAogICAgICAgICAgICAgICAgIHdoZXJlQXJncywgbnVsbCwgbnVsbCk7CiAgICAgfQogCkBAIC03MjEsNyArNzI4LDcgQEAKICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbVByb3BlcnR5R3JvdXBzQnlGb3JtYXQuZ2V0KGZvcm1hdCk7CiAgICAgICAgICAgICAgaWYgKHByb3BlcnR5R3JvdXAgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGludFtdIHByb3BlcnR5TGlzdCA9IGdldFN1cHBvcnRlZE9iamVjdFByb3BlcnRpZXMoZm9ybWF0KTsKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbmV3IE10cFByb3BlcnR5R3JvdXAodGhpcywgbU1lZGlhUHJvdmlkZXIsIG1QYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUdyb3VwID0gbmV3IE10cFByb3BlcnR5R3JvdXAodGhpcywgbU1lZGlhUHJvdmlkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtVm9sdW1lTmFtZSwgcHJvcGVydHlMaXN0KTsKICAgICAgICAgICAgICAgICBtUHJvcGVydHlHcm91cHNCeUZvcm1hdC5wdXQobmV3IEludGVnZXIoZm9ybWF0KSwgcHJvcGVydHlHcm91cCk7CiAgICAgICAgICAgICB9CkBAIC03MjksNyArNzM2LDcgQEAKICAgICAgICAgICAgICAgcHJvcGVydHlHcm91cCA9IG1Qcm9wZXJ0eUdyb3Vwc0J5UHJvcGVydHkuZ2V0KHByb3BlcnR5KTsKICAgICAgICAgICAgICBpZiAocHJvcGVydHlHcm91cCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaW50W10gcHJvcGVydHlMaXN0ID0gbmV3IGludFtdIHsgKGludClwcm9wZXJ0eSB9OwotICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXAgPSBuZXcgTXRwUHJvcGVydHlHcm91cCh0aGlzLCBtTWVkaWFQcm92aWRlciwgbVBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgIHByb3BlcnR5R3JvdXAgPSBuZXcgTXRwUHJvcGVydHlHcm91cCh0aGlzLCBtTWVkaWFQcm92aWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG1Wb2x1bWVOYW1lLCBwcm9wZXJ0eUxpc3QpOwogICAgICAgICAgICAgICAgIG1Qcm9wZXJ0eUdyb3Vwc0J5UHJvcGVydHkucHV0KG5ldyBJbnRlZ2VyKChpbnQpcHJvcGVydHkpLCBwcm9wZXJ0eUdyb3VwKTsKICAgICAgICAgICAgIH0KQEAgLTc0NSw3ICs3NTIsNyBAQAogICAgICAgICBTdHJpbmcgcGF0aCA9IG51bGw7CiAgICAgICAgIFN0cmluZ1tdIHdoZXJlQXJncyA9IG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCBQQVRIX1BST0pFQ1RJT04sIElEX1dIRVJFLAorICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1PYmplY3RzVXJpLCBQQVRIX1BST0pFQ1RJT04sIElEX1dIRVJFLAogICAgICAgICAgICAgICAgICAgICB3aGVyZUFyZ3MsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCAmJiBjLm1vdmVUb05leHQoKSkgewogICAgICAgICAgICAgICAgIHBhdGggPSBjLmdldFN0cmluZygxKTsKQEAgLTc4OCw3ICs3OTUsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gbm90ZSAtIHdlIGFyZSByZWx5aW5nIG9uIGEgc3BlY2lhbCBjYXNlIGluIE1lZGlhUHJvdmlkZXIudXBkYXRlKCkgdG8gdXBkYXRlCiAgICAgICAgICAgICAvLyB0aGUgcGF0aHMgZm9yIGFsbCBjaGlsZHJlbiBpbiB0aGUgY2FzZSB3aGVyZSB0aGlzIGlzIGEgZGlyZWN0b3J5LgotICAgICAgICAgICAgdXBkYXRlZCA9IG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCB2YWx1ZXMsIElEX1dIRVJFLCB3aGVyZUFyZ3MpOworICAgICAgICAgICAgdXBkYXRlZCA9IG1NZWRpYVByb3ZpZGVyLnVwZGF0ZShtT2JqZWN0c1VyaSwgdmFsdWVzLCBJRF9XSEVSRSwgd2hlcmVBcmdzKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIlJlbW90ZUV4Y2VwdGlvbiBpbiBtTWVkaWFQcm92aWRlci51cGRhdGUiLCBlKTsKICAgICAgICAgfQpAQCAtODA1LDcgKzgxMiw3IEBACiAgICAgICAgICAgICBpZiAob2xkRmlsZS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiLiIpICYmICFuZXdQYXRoLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgICAgICAgICAgIC8vIGRpcmVjdG9yeSB3YXMgdW5oaWRkZW4KICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBtTWVkaWFQcm92aWRlci5jYWxsKG1QYWNrYWdlTmFtZSwgTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgbmV3UGF0aCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwoTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgbmV3UGF0aCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiZmFpbGVkIHRvIHVuaGlkZS9yZXNjYW4gZm9yICIgKyBuZXdQYXRoKTsKICAgICAgICAgICAgICAgICB9CkBAIC04MTUsNyArODIyLDcgQEAKICAgICAgICAgICAgIGlmIChvbGRGaWxlLmdldE5hbWUoKS50b0xvd2VyQ2FzZShMb2NhbGUuVVMpLmVxdWFscygiLm5vbWVkaWEiKQogICAgICAgICAgICAgICAgICAgICAmJiAhbmV3UGF0aC50b0xvd2VyQ2FzZShMb2NhbGUuVVMpLmVxdWFscygiLm5vbWVkaWEiKSkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwobVBhY2thZ2VOYW1lLCBNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBvbGRGaWxlLmdldFBhcmVudCgpLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbU1lZGlhUHJvdmlkZXIuY2FsbChNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBvbGRGaWxlLmdldFBhcmVudCgpLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJmYWlsZWQgdG8gdW5oaWRlL3Jlc2NhbiBmb3IgIiArIG5ld1BhdGgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTg4Niw3ICs4OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdIG91dE5hbWUsIGxvbmdbXSBvdXRDcmVhdGVkTW9kaWZpZWQpIHsKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIE9CSkVDVF9JTkZPX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIE9CSkVDVF9JTkZPX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgb3V0U3RvcmFnZUZvcm1hdFBhcmVudFswXSA9IGMuZ2V0SW50KDEpOwpAQCAtOTMzLDcgKzk0MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHBhdGggPSBjLmdldFN0cmluZygxKTsKQEAgLTk2MCw3ICs5NjcsNyBAQAogICAgIHByaXZhdGUgaW50IGdldE9iamVjdEZvcm1hdChpbnQgaGFuZGxlKSB7CiAgICAgICAgIEN1cnNvciBjID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtUGFja2FnZU5hbWUsIG1PYmplY3RzVXJpLCBGT1JNQVRfUFJPSkVDVElPTiwKKyAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeShtT2JqZWN0c1VyaSwgRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGMuZ2V0SW50KDEpOwpAQCAtOTg0LDcgKzk5MSw3IEBACiAKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCisgICAgICAgICAgICBjID0gbU1lZGlhUHJvdmlkZXIucXVlcnkobU9iamVjdHNVcmksIFBBVEhfRk9STUFUX1BST0pFQ1RJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfV0hFUkUsIG5ldyBTdHJpbmdbXSB7ICBJbnRlZ2VyLnRvU3RyaW5nKGhhbmRsZSkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgY29udmVydCB0byBtZWRpYSBwYXRoIGhlcmUsIHNpbmNlIHdlIHdpbGwgYmUgbWF0Y2hpbmcKQEAgLTEwMDcsNyArMTAxNCw3IEBACiAgICAgICAgICAgICBpZiAoZm9ybWF0ID09IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04pIHsKICAgICAgICAgICAgICAgICAvLyByZWN1cnNpdmUgY2FzZSAtIGRlbGV0ZSBhbGwgY2hpbGRyZW4gZmlyc3QKICAgICAgICAgICAgICAgICBVcmkgdXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaShtVm9sdW1lTmFtZSk7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gbU1lZGlhUHJvdmlkZXIuZGVsZXRlKG1QYWNrYWdlTmFtZSwgdXJpLAorICAgICAgICAgICAgICAgIGludCBjb3VudCA9IG1NZWRpYVByb3ZpZGVyLmRlbGV0ZSh1cmksCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAnbGlrZScgbWFrZXMgaXQgdXNlIHRoZSBpbmRleCwgdGhlICdsb3dlcigpJyBtYWtlcyBpdCBjb3JyZWN0CiAgICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHBhdGggY29udGFpbnMgc3FsaXRlIHdpbGRjYXJkIGNoYXJhY3RlcnMKICAgICAgICAgICAgICAgICAgICAgIl9kYXRhIExJS0UgPzEgQU5EIGxvd2VyKHN1YnN0cihfZGF0YSwxLD8yKSk9bG93ZXIoPzMpIiwKQEAgLTEwMTUsMTIgKzEwMjIsMTIgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgVXJpIHVyaSA9IEZpbGVzLmdldE10cE9iamVjdHNVcmkobVZvbHVtZU5hbWUsIGhhbmRsZSk7Ci0gICAgICAgICAgICBpZiAobU1lZGlhUHJvdmlkZXIuZGVsZXRlKG1QYWNrYWdlTmFtZSwgdXJpLCBudWxsLCBudWxsKSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5kZWxldGUodXJpLCBudWxsLCBudWxsKSA+IDApIHsKICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICE9IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04KICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBhdGgudG9Mb3dlckNhc2UoTG9jYWxlLlVTKS5lbmRzV2l0aCgiLy5ub21lZGlhIikpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJlbnRQYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZigiLyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwobVBhY2thZ2VOYW1lLCBNZWRpYVN0b3JlLlVOSElERV9DQUxMLCBwYXJlbnRQYXRoLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1NZWRpYVByb3ZpZGVyLmNhbGwoTWVkaWFTdG9yZS5VTkhJREVfQ0FMTCwgcGFyZW50UGF0aCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJmYWlsZWQgdG8gdW5oaWRlL3Jlc2NhbiBmb3IgIiArIHBhdGgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDQzLDcgKzEwNTAsNyBAQAogICAgICAgICBVcmkgdXJpID0gRmlsZXMuZ2V0TXRwUmVmZXJlbmNlc1VyaShtVm9sdW1lTmFtZSwgaGFuZGxlKTsKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYyA9IG1NZWRpYVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgdXJpLCBJRF9QUk9KRUNUSU9OLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIGMgPSBtTWVkaWFQcm92aWRlci5xdWVyeSh1cmksIElEX1BST0pFQ1RJT04sIG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQpAQCAtMTA3Nyw3ICsxMDg0LDcgQEAKICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0gPSB2YWx1ZXM7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5idWxrSW5zZXJ0KG1QYWNrYWdlTmFtZSwgdXJpLCB2YWx1ZXNMaXN0KSA+IDApIHsKKyAgICAgICAgICAgIGlmIChtTWVkaWFQcm92aWRlci5idWxrSW5zZXJ0KHVyaSwgdmFsdWVzTGlzdCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE10cENvbnN0YW50cy5SRVNQT05TRV9PSzsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cERldmljZS5qYXZhCmluZGV4IDk1Y2I1MjAuLmQyNGM1ZTggMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2UuamF2YQpAQCAtMTksOSArMTksMTAgQEAKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi5Vc2JEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiRGV2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKLWltcG9ydCBhbmRyb2lkLm9zLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CiAKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCiAvKioKICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBNVFAgb3IgUFRQIGRldmljZSBjb25uZWN0ZWQgb24gdGhlIFVTQiBob3N0IGJ1cy4gQW4gYXBwbGljYXRpb24gY2FuCiAgKiBpbnN0YW50aWF0ZSBhbiBvYmplY3Qgb2YgdGhpcyB0eXBlLCBieSByZWZlcmVuY2luZyBhbiBhdHRhY2hlZCB7QGxpbmsKQEAgLTE1OCw2ICsxNTksMjIgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBPYnRhaW5zIG9iamVjdCBieXRlcyBpbiB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCB3cml0ZXMgaXQgdG8gYW4gYXJyYXkuCisgICAgICogVGhpcyBjYWxsIG1heSBibG9jayBmb3IgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiB0aW1lIGRlcGVuZGluZyBvbiB0aGUgc2l6ZQorICAgICAqIG9mIHRoZSBkYXRhIGFuZCBzcGVlZCBvZiB0aGUgZGV2aWNlcy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBvYmplY3RIYW5kbGUgaGFuZGxlIG9mIHRoZSBvYmplY3QgdG8gcmVhZAorICAgICAqIEBwYXJhbSBvZmZzZXQgU3RhcnQgaW5kZXggb2YgcmVhZGluZyByYW5nZS4KKyAgICAgKiBAcGFyYW0gc2l6ZSBTaXplIG9mIHJlYWRpbmcgcmFuZ2UuCisgICAgICogQHBhcmFtIGJ1ZmZlciBBcnJheSB0byB3cml0ZSBkYXRhLgorICAgICAqIEByZXR1cm4gU2l6ZSBvZiBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSByZWFkLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UGFydGlhbE9iamVjdChpbnQgb2JqZWN0SGFuZGxlLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwgYnl0ZVtdIGJ1ZmZlcikKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuYXRpdmVfZ2V0X3BhcnRpYWxfb2JqZWN0KG9iamVjdEhhbmRsZSwgb2Zmc2V0LCBzaXplLCBidWZmZXIpOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIHRodW1ibmFpbCBkYXRhIGZvciBhbiBvYmplY3QgYXMgYSBieXRlIGFycmF5LgogICAgICAqIFRoZSBzaXplIGFuZCBmb3JtYXQgb2YgdGhlIHRodW1ibmFpbCBkYXRhIGNhbiBiZSBkZXRlcm1pbmVkIHZpYQogICAgICAqIHtAbGluayBNdHBPYmplY3RJbmZvI2dldFRodW1iQ29tcHJlc3NlZFNpemV9IGFuZApAQCAtMzIzLDYgKzM0MCw4IEBACiAgICAgcHJpdmF0ZSBuYXRpdmUgaW50W10gbmF0aXZlX2dldF9vYmplY3RfaGFuZGxlcyhpbnQgc3RvcmFnZUlkLCBpbnQgZm9ybWF0LCBpbnQgb2JqZWN0SGFuZGxlKTsKICAgICBwcml2YXRlIG5hdGl2ZSBNdHBPYmplY3RJbmZvIG5hdGl2ZV9nZXRfb2JqZWN0X2luZm8oaW50IG9iamVjdEhhbmRsZSk7CiAgICAgcHJpdmF0ZSBuYXRpdmUgYnl0ZVtdIG5hdGl2ZV9nZXRfb2JqZWN0KGludCBvYmplY3RIYW5kbGUsIGludCBvYmplY3RTaXplKTsKKyAgICBwcml2YXRlIG5hdGl2ZSBpbnQgbmF0aXZlX2dldF9wYXJ0aWFsX29iamVjdCgKKyAgICAgICAgICAgIGludCBvYmplY3RIYW5kbGUsIGludCBvZmZzZXQsIGludCBvYmplY3RTaXplLCBieXRlW10gYnVmZmVyKSB0aHJvd3MgSU9FeGNlcHRpb247CiAgICAgcHJpdmF0ZSBuYXRpdmUgYnl0ZVtdIG5hdGl2ZV9nZXRfdGh1bWJuYWlsKGludCBvYmplY3RIYW5kbGUpOwogICAgIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlX2RlbGV0ZV9vYmplY3QoaW50IG9iamVjdEhhbmRsZSk7CiAgICAgcHJpdmF0ZSBuYXRpdmUgbG9uZyBuYXRpdmVfZ2V0X3BhcmVudChpbnQgb2JqZWN0SGFuZGxlKTsKZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRGV2aWNlSW5mby5qYXZhIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2VJbmZvLmphdmEKaW5kZXggZWY5NDM2ZC4uMWNlY2E4NCAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2VJbmZvLmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBEZXZpY2VJbmZvLmphdmEKQEAgLTE2LDYgKzE2LDggQEAKIAogcGFja2FnZSBhbmRyb2lkLm10cDsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKKwogLyoqCiAgKiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBNVFAgZGV2aWNlLgogICogVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgRGV2aWNlSW5mbyBEYXRhc2V0IGRlc2NyaWJlZCBpbgpAQCAtMjcsNiArMjksNyBAQAogICAgIHByaXZhdGUgU3RyaW5nIG1Nb2RlbDsKICAgICBwcml2YXRlIFN0cmluZyBtVmVyc2lvbjsKICAgICBwcml2YXRlIFN0cmluZyBtU2VyaWFsTnVtYmVyOworICAgIHByaXZhdGUgaW50W10gbU9wZXJhdGlvbnNTdXBwb3J0ZWQ7CiAKICAgICAvLyBvbmx5IGluc3RhbnRpYXRlZCB2aWEgSk5JCiAgICAgcHJpdmF0ZSBNdHBEZXZpY2VJbmZvKCkgewpAQCAtNjcsNCArNzAsMTMgQEAKICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldFNlcmlhbE51bWJlcigpIHsKICAgICAgICAgcmV0dXJuIG1TZXJpYWxOdW1iZXI7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworICAgIC8qKgorICAgICAqIFJldHVybnMgb3BlcmF0aW9uIGNvZGUgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHN1cHBvcnRlZCBvcGVyYXRpb24gY29kZQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBATnVsbGFibGUgaW50W10gZ2V0T3BlcmF0aW9uc1N1cHBvcnRlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1PcGVyYXRpb25zU3VwcG9ydGVkOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRXZlbnQuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwRXZlbnQuamF2YQppbmRleCA0YzhhNzQyLi5kYzg5YTU2IDEwMDY0NAotLS0gYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cEV2ZW50LmphdmEKKysrIGIvbWVkaWEvamF2YS9hbmRyb2lkL210cC9NdHBFdmVudC5qYXZhCkBAIC0xOCwyOSArMTgsMTUgQEAKIAogLyoqCiAgKiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIE1UUCBldmVudC4KLSAqIEV2ZW50IGNvbnN0YW50cyBhcmUgZGVmaW5lZCBieSB0aGUgVVNCLUlGIE1UUCBzcGVjaWZpY2F0aW9uLgorICogVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZXZlbnRzIGRlc2NyaWJlZCBpbiBhcHBlbmRpeCBHIG9mIHRoZSBNVFAgc3BlY2lmaWNhdGlvbi4KICAqLwogcHVibGljIGNsYXNzIE10cEV2ZW50IHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9VTkRFRklORUQgPSAweDQwMDA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQ0FOQ0VMX1RSQU5TQUNUSU9OID0gMHg0MDAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX09CSkVDVF9BRERFRCA9IDB4NDAwMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUkVNT1ZFRCA9IDB4NDAwMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9BRERFRCA9IDB4NDAwNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9TVE9SRV9SRU1PVkVEID0gMHg0MDA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQgPSAweDQwMDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX0lORk9fQ0hBTkdFRCA9IDB4NDAwNzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9ERVZJQ0VfSU5GT19DSEFOR0VEID0gMHg0MDA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1JFUVVFU1RfT0JKRUNUX1RSQU5TRkVSID0gMHg0MDA5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NUT1JFX0ZVTEwgPSAweDQwMEE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfREVWSUNFX1JFU0VUID0gMHg0MDBCOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NUT1JBR0VfSU5GT19DSEFOR0VEID0gMHg0MDBDOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVWRU5UX0NBUFRVUkVfQ09NUExFVEUgPSAweDQwMEQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfVU5SRVBPUlRFRF9TVEFUVVMgPSAweDQwMEU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1BST1BfQ0hBTkdFRCA9IDB4QzgwMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFVkVOVF9PQkpFQ1RfUFJPUF9ERVNDX0NIQU5HRUQgPSAweEM4MDI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfT0JKRUNUX1JFRkVSRU5DRVNfQ0hBTkdFRCA9IDB4QzgwMzsKKyAgICBwcml2YXRlIGludCBtRXZlbnRDb2RlID0gTXRwQ29uc3RhbnRzLkVWRU5UX1VOREVGSU5FRDsKIAotICAgIHByaXZhdGUgaW50IG1FdmVudENvZGUgPSBFVkVOVF9VTkRFRklORUQ7CisgICAgLy8gUGFyYW1ldGVycyBmb3IgZXZlbnQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBldmVudCBwYXJhbWV0ZXJzIGRlcGVuZHMgdXBvbiBtRXZlbnRDb2RlLgorICAgIHByaXZhdGUgaW50IG1QYXJhbWV0ZXIxOworICAgIHByaXZhdGUgaW50IG1QYXJhbWV0ZXIyOworICAgIHByaXZhdGUgaW50IG1QYXJhbWV0ZXIzOwogCiAgICAgLyoqCiAgICAgICogUmV0dXJucyBldmVudCBjb2RlIG9mIE1UUCBldmVudC4KQEAgLTQ4LDQgKzM0LDEzNiBAQAogICAgICAqIEByZXR1cm4gZXZlbnQgY29kZQogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0RXZlbnRDb2RlKCkgeyByZXR1cm4gbUV2ZW50Q29kZTsgfQorCisgICAgLyoqCisgICAgICogT2J0YWlucyB0aGUgZmlyc3QgZXZlbnQgcGFyYW1ldGVyLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyMSgpIHsgcmV0dXJuIG1QYXJhbWV0ZXIxOyB9CisKKyAgICAvKioKKyAgICAgKiBPYnRhaW5zIHRoZSBzZWNvbmQgZXZlbnQgcGFyYW1ldGVyLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0UGFyYW1ldGVyMigpIHsgcmV0dXJuIG1QYXJhbWV0ZXIyOyB9CisKKyAgICAvKioKKyAgICAgKiBPYnRhaW5zIHRoZSB0aGlyZCBldmVudCBwYXJhbWV0ZXIuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRQYXJhbWV0ZXIzKCkgeyByZXR1cm4gbVBhcmFtZXRlcjM7IH0KKworICAgIC8qKgorICAgICAqIE9idGFpbnMgb2JqZWN0SGFuZGxlIGV2ZW50IHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX09CSkVDVF9BRERFRAorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX09CSkVDVF9SRU1PVkVECisgICAgICogQHNlZSBNdHBDb25zdGFudHMjRVZFTlRfT0JKRUNUX0lORk9fQ0hBTkdFRAorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX1JFUVVFU1RfT0JKRUNUX1RSQU5TRkVSCisgICAgICogQHNlZSBNdHBDb25zdGFudHMjRVZFTlRfT0JKRUNUX1BST1BfQ0hBTkdFRAorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldE9iamVjdEhhbmRsZSgpIHsKKyAgICAgICAgc3dpdGNoIChtRXZlbnRDb2RlKSB7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9PQkpFQ1RfQURERUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgY2FzZSBNdHBDb25zdGFudHMuRVZFTlRfT0JKRUNUX1JFTU9WRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgY2FzZSBNdHBDb25zdGFudHMuRVZFTlRfT0JKRUNUX0lORk9fQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbVBhcmFtZXRlcjE7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9SRVFVRVNUX09CSkVDVF9UUkFOU0ZFUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbVBhcmFtZXRlcjE7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9PQkpFQ1RfUFJPUF9DSEFOR0VEOgorICAgICAgICAgICAgICAgIHJldHVybiBtUGFyYW1ldGVyMTsKKyAgICAgICAgICAgIGNhc2UgTXRwQ29uc3RhbnRzLkVWRU5UX09CSkVDVF9SRUZFUkVOQ0VTX0NIQU5HRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFBhcmFtZXRlckFjY2Vzcygib2JqZWN0SGFuZGxlIiwgbUV2ZW50Q29kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPYnRhaW5zIHN0b3JhZ2VJRCBldmVudCBwYXJhbWV0ZXIuCisgICAgICoKKyAgICAgKiBAc2VlIE10cENvbnN0YW50cyNFVkVOVF9TVE9SRV9BRERFRAorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX1NUT1JFX1JFTU9WRUQKKyAgICAgKiBAc2VlIE10cENvbnN0YW50cyNFVkVOVF9TVE9SRV9GVUxMCisgICAgICogQHNlZSBNdHBDb25zdGFudHMjRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldFN0b3JhZ2VJZCgpIHsKKyAgICAgICAgc3dpdGNoIChtRXZlbnRDb2RlKSB7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9TVE9SRV9BRERFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbVBhcmFtZXRlcjE7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9TVE9SRV9SRU1PVkVEOgorICAgICAgICAgICAgICAgIHJldHVybiBtUGFyYW1ldGVyMTsKKyAgICAgICAgICAgIGNhc2UgTXRwQ29uc3RhbnRzLkVWRU5UX1NUT1JFX0ZVTEw6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgY2FzZSBNdHBDb25zdGFudHMuRVZFTlRfU1RPUkFHRV9JTkZPX0NIQU5HRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFBhcmFtZXRlckFjY2Vzcygic3RvcmFnZUlEIiwgbUV2ZW50Q29kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPYnRhaW5zIGRldmljZVByb3BDb2RlIGV2ZW50IHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQKKyAgICAgKi8KKyAgICBwdWJsaWMgaW50IGdldERldmljZVByb3BDb2RlKCkgeworICAgICAgICBzd2l0Y2ggKG1FdmVudENvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTXRwQ29uc3RhbnRzLkVWRU5UX0RFVklDRV9QUk9QX0NIQU5HRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFBhcmFtZXRlckFjY2VzcygiZGV2aWNlUHJvcENvZGUiLCBtRXZlbnRDb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE9idGFpbnMgdHJhbnNhY3Rpb25JRCBldmVudCBwYXJhbWV0ZXIuCisgICAgICoKKyAgICAgKiBAc2VlIE10cENvbnN0YW50cyNFVkVOVF9DQVBUVVJFX0NPTVBMRVRFCisgICAgICovCisgICAgcHVibGljIGludCBnZXRUcmFuc2FjdGlvbklkKCkgeworICAgICAgICBzd2l0Y2ggKG1FdmVudENvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTXRwQ29uc3RhbnRzLkVWRU5UX0NBUFRVUkVfQ09NUExFVEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIxOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFBhcmFtZXRlckFjY2VzcygidHJhbnNhY3Rpb25JRCIsIG1FdmVudENvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogT2J0YWlucyBvYmplY3RQcm9wQ29kZSBldmVudCBwYXJhbWV0ZXIuCisgICAgICoKKyAgICAgKiBAc2VlIE10cENvbnN0YW50cyNFVkVOVF9PQkpFQ1RfUFJPUF9DSEFOR0VECisgICAgICogQHNlZSBNdHBDb25zdGFudHMjRVZFTlRfT0JKRUNUX1BST1BfREVTQ19DSEFOR0VECisgICAgICovCisgICAgcHVibGljIGludCBnZXRPYmplY3RQcm9wQ29kZSgpIHsKKyAgICAgICAgc3dpdGNoIChtRXZlbnRDb2RlKSB7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9PQkpFQ1RfUFJPUF9DSEFOR0VEOgorICAgICAgICAgICAgICAgIHJldHVybiBtUGFyYW1ldGVyMjsKKyAgICAgICAgICAgIGNhc2UgTXRwQ29uc3RhbnRzLkVWRU5UX09CSkVDVF9QUk9QX0RFU0NfQ0hBTkdFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbVBhcmFtZXRlcjE7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsUGFyYW1ldGVyQWNjZXNzKCJvYmplY3RQcm9wQ29kZSIsIG1FdmVudENvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogT2J0YWlucyBvYmplY3RGb3JtYXRDb2RlIGV2ZW50IHBhcmFtZXRlci4KKyAgICAgKgorICAgICAqIEBzZWUgTXRwQ29uc3RhbnRzI0VWRU5UX09CSkVDVF9QUk9QX0RFU0NfQ0hBTkdFRAorICAgICAqLworICAgIHB1YmxpYyBpbnQgZ2V0T2JqZWN0Rm9ybWF0Q29kZSgpIHsKKyAgICAgICAgc3dpdGNoIChtRXZlbnRDb2RlKSB7CisgICAgICAgICAgICBjYXNlIE10cENvbnN0YW50cy5FVkVOVF9PQkpFQ1RfUFJPUF9ERVNDX0NIQU5HRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1QYXJhbWV0ZXIyOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFBhcmFtZXRlckFjY2Vzcygib2JqZWN0Rm9ybWF0Q29kZSIsIG1FdmVudENvZGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSWxsZWdhbFBhcmFtZXRlckFjY2VzcyBleHRlbmRzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcHVibGljIElsbGVnYWxQYXJhbWV0ZXJBY2Nlc3MoU3RyaW5nIHByb3BlcnR5TmFtZSwgaW50IGV2ZW50Q29kZSkgeworICAgICAgICAgICAgc3VwZXIoIkNhbm5vdCBvYnRhaW4gIiArIHByb3BlcnR5TmFtZSArICIgZm9yIHRoZSBldmVudDogIiArIGV2ZW50Q29kZSArICIuIik7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvbXRwL010cFByb3BlcnR5R3JvdXAuamF2YSBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCmluZGV4IGM4MGFkZmEuLmRlYTMwMDggMTAwNjQ0Ci0tLSBhL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9tdHAvTXRwUHJvcGVydHlHcm91cC5qYXZhCkBAIC0xNiw3ICsxNiw3IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5tdHA7CiAKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKQEAgLTQ4LDggKzQ4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGZpbmFsIE10cERhdGFiYXNlIG1EYXRhYmFzZTsKLSAgICBwcml2YXRlIGZpbmFsIElDb250ZW50UHJvdmlkZXIgbVByb3ZpZGVyOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYWNrYWdlTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBtUHJvdmlkZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbVZvbHVtZU5hbWU7CiAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbVVyaTsKIApAQCAtNjUsMTMgKzY0LDEyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkVOVF9XSEVSRSA9IEZpbGVzLkZpbGVDb2x1bW5zLlBBUkVOVCArICI9PyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUkVOVF9GT1JNQVRfV0hFUkUgPSBQQVJFTlRfV0hFUkUgKyAiIEFORCAiICsgRk9STUFUX1dIRVJFOwogICAgIC8vIGNvbnN0cnVjdHMgYSBwcm9wZXJ0eSBncm91cCBmb3IgYSBsaXN0IG9mIHByb3BlcnRpZXMKLSAgICBwdWJsaWMgTXRwUHJvcGVydHlHcm91cChNdHBEYXRhYmFzZSBkYXRhYmFzZSwgSUNvbnRlbnRQcm92aWRlciBwcm92aWRlciwgU3RyaW5nIHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHZvbHVtZSwgaW50W10gcHJvcGVydGllcykgeworICAgIHB1YmxpYyBNdHBQcm9wZXJ0eUdyb3VwKE10cERhdGFiYXNlIGRhdGFiYXNlLCBDb250ZW50UHJvdmlkZXJDbGllbnQgcHJvdmlkZXIsIFN0cmluZyB2b2x1bWVOYW1lLAorICAgICAgICAgICAgaW50W10gcHJvcGVydGllcykgewogICAgICAgICBtRGF0YWJhc2UgPSBkYXRhYmFzZTsKICAgICAgICAgbVByb3ZpZGVyID0gcHJvdmlkZXI7Ci0gICAgICAgIG1QYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lOwotICAgICAgICBtVm9sdW1lTmFtZSA9IHZvbHVtZTsKLSAgICAgICAgbVVyaSA9IEZpbGVzLmdldE10cE9iamVjdHNVcmkodm9sdW1lKTsKKyAgICAgICAgbVZvbHVtZU5hbWUgPSB2b2x1bWVOYW1lOworICAgICAgICBtVXJpID0gRmlsZXMuZ2V0TXRwT2JqZWN0c1VyaSh2b2x1bWVOYW1lKTsKIAogICAgICAgICBpbnQgY291bnQgPSBwcm9wZXJ0aWVzLmxlbmd0aDsKICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gY29sdW1ucyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihjb3VudCk7CkBAIC0yMDEsNyArMTk5LDcgQEAKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBhcmUgb25seSByZWFkaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgIm9iamVjdHMiIHRhYmxlCi0gICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbVVyaSwKKyAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nIFtdIHsgRmlsZXMuRmlsZUNvbHVtbnMuX0lELCBjb2x1bW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9XSEVSRSwgbmV3IFN0cmluZ1tdIHsgSW50ZWdlci50b1N0cmluZyhpZCkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CkBAIC0yMjEsNyArMjE5LDcgQEAKICAgICBwcml2YXRlIFN0cmluZyBxdWVyeUF1ZGlvKGludCBpZCwgU3RyaW5nIGNvbHVtbikgewogICAgICAgICBDdXJzb3IgYyA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgQXVkaW8uTWVkaWEuZ2V0Q29udGVudFVyaShtVm9sdW1lTmFtZSksCisgICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KEF1ZGlvLk1lZGlhLmdldENvbnRlbnRVcmkobVZvbHVtZU5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcgW10geyBGaWxlcy5GaWxlQ29sdW1ucy5fSUQsIGNvbHVtbiB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1dIRVJFLCBuZXcgU3RyaW5nW10geyBJbnRlZ2VyLnRvU3RyaW5nKGlkKSB9LCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIGlmIChjICE9IG51bGwgJiYgYy5tb3ZlVG9OZXh0KCkpIHsKQEAgLTI0Miw3ICsyNDAsNyBAQAogICAgICAgICBDdXJzb3IgYyA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBVcmkgdXJpID0gQXVkaW8uR2VucmVzLmdldENvbnRlbnRVcmlGb3JBdWRpb0lkKG1Wb2x1bWVOYW1lLCBpZCk7Ci0gICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgdXJpLAorICAgICAgICAgICAgYyA9IG1Qcm92aWRlci5xdWVyeSh1cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyBbXSB7IEZpbGVzLkZpbGVDb2x1bW5zLl9JRCwgQXVkaW8uR2VucmVzQ29sdW1ucy5OQU1FIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CkBAIC0yNjQsNyArMjYyLDcgQEAKICAgICAgICAgQ3Vyc29yIGMgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBhcmUgb25seSByZWFkaW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgIm9iamVjdHMiIHRhYmxlCi0gICAgICAgICAgICBjID0gbVByb3ZpZGVyLnF1ZXJ5KG1QYWNrYWdlTmFtZSwgbVVyaSwKKyAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nIFtdIHsgRmlsZXMuRmlsZUNvbHVtbnMuX0lELCBjb2x1bW4gfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9XSEVSRSwgbmV3IFN0cmluZ1tdIHsgSW50ZWdlci50b1N0cmluZyhpZCkgfSwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBpZiAoYyAhPSBudWxsICYmIGMubW92ZVRvTmV4dCgpKSB7CkBAIC0zMzUsNyArMzMzLDcgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIGRvbid0IHF1ZXJ5IGlmIG5vdCBuZWNlc3NhcnkKICAgICAgICAgICAgIGlmIChkZXB0aCA+IDAgfHwgaGFuZGxlID09IDB4RkZGRkZGRkYgfHwgbUNvbHVtbnMubGVuZ3RoID4gMSkgewotICAgICAgICAgICAgICAgIGMgPSBtUHJvdmlkZXIucXVlcnkobVBhY2thZ2VOYW1lLCBtVXJpLCBtQ29sdW1ucywgd2hlcmUsIHdoZXJlQXJncywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgYyA9IG1Qcm92aWRlci5xdWVyeShtVXJpLCBtQ29sdW1ucywgd2hlcmUsIHdoZXJlQXJncywgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgaWYgKGMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE10cFByb3BlcnR5TGlzdCgwLCBNdHBDb25zdGFudHMuUkVTUE9OU0VfSU5WQUxJRF9PQkpFQ1RfSEFORExFKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlLmphdmEgYi9tZWRpYS9qYXZhL2FuZHJvaWQvc2VydmljZS9tZWRpYS9NZWRpYUJyb3dzZXJTZXJ2aWNlLmphdmEKaW5kZXggZjJjNmE2Yy4uOGVkY2NhYyAxMDA2NDQKLS0tIGEvbWVkaWEvamF2YS9hbmRyb2lkL3NlcnZpY2UvbWVkaWEvTWVkaWFCcm93c2VyU2VydmljZS5qYXZhCisrKyBiL21lZGlhL2phdmEvYW5kcm9pZC9zZXJ2aWNlL21lZGlhL01lZGlhQnJvd3NlclNlcnZpY2UuamF2YQpAQCAtNTQ2LDcgKzU0Niw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogR2V0cyBhbnkgZXh0cmFzIGFib3V0IHRoZSBicndvc2VyIHNlcnZpY2UuCisgICAgICAgICAqIEdldHMgYW55IGV4dHJhcyBhYm91dCB0aGUgYnJvd3NlciBzZXJ2aWNlLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIEJ1bmRsZSBnZXRFeHRyYXMoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUV4dHJhczsKZGlmZiAtLWdpdCBhL21lZGlhL2puaS9hbmRyb2lkX21lZGlhX01lZGlhQ29kZWMuY3BwIGIvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFDb2RlYy5jcHAKaW5kZXggNDliNTc5Yy4uMjAwNGEzYSAxMDA2NDQKLS0tIGEvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFDb2RlYy5jcHAKKysrIGIvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFDb2RlYy5jcHAKQEAgLTg1LDYgKzg1LDEzIEBACiAgICAgam1ldGhvZElEIHNldE5hdGl2ZU9iamVjdExvY2tlZDsKIH0gZ1BlcnNpc3RlbnRTdXJmYWNlQ2xhc3NJbmZvOwogCitzdGF0aWMgc3RydWN0IHsKKyAgICBqaW50IFVuZW5jcnlwdGVkOworICAgIGppbnQgQWVzQ3RyOworICAgIGppbnQgQWVzQ2JjOworfSBnQ3J5cHRvTW9kZXM7CisKKwogc3RydWN0IGZpZWxkc190IHsKICAgICBqZmllbGRJRCBjb250ZXh0OwogICAgIGptZXRob2RJRCBwb3N0RXZlbnRGcm9tTmF0aXZlSUQ7CkBAIC05NCw2ICsxMDEsOSBAQAogICAgIGpmaWVsZElEIGNyeXB0b0luZm9LZXlJRDsKICAgICBqZmllbGRJRCBjcnlwdG9JbmZvSVZJRDsKICAgICBqZmllbGRJRCBjcnlwdG9JbmZvTW9kZUlEOworICAgIGpmaWVsZElEIGNyeXB0b0luZm9QYXR0ZXJuSUQ7CisgICAgamZpZWxkSUQgcGF0dGVybkVuY3J5cHRCbG9ja3NJRDsKKyAgICBqZmllbGRJRCBwYXR0ZXJuU2tpcEJsb2Nrc0lEOwogfTsKIAogc3RhdGljIGZpZWxkc190IGdGaWVsZHM7CkBAIC0zMjUsMTEgKzMzNSwxMiBAQAogICAgICAgICBjb25zdCB1aW50OF90IGtleVsxNl0sCiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbMTZdLAogICAgICAgICBDcnlwdG9QbHVnaW46Ok1vZGUgbW9kZSwKKyAgICAgICAgY29uc3QgQ3J5cHRvUGx1Z2luOjpQYXR0ZXJuICZwYXR0ZXJuLAogICAgICAgICBpbnQ2NF90IHByZXNlbnRhdGlvblRpbWVVcywKICAgICAgICAgdWludDMyX3QgZmxhZ3MsCiAgICAgICAgIEFTdHJpbmcgKmVycm9yRGV0YWlsTXNnKSB7CiAgICAgcmV0dXJuIG1Db2RlYy0+cXVldWVTZWN1cmVJbnB1dEJ1ZmZlcigKLSAgICAgICAgICAgIGluZGV4LCBvZmZzZXQsIHN1YlNhbXBsZXMsIG51bVN1YlNhbXBsZXMsIGtleSwgaXYsIG1vZGUsCisgICAgICAgICAgICBpbmRleCwgb2Zmc2V0LCBzdWJTYW1wbGVzLCBudW1TdWJTYW1wbGVzLCBrZXksIGl2LCBtb2RlLCBwYXR0ZXJuLAogICAgICAgICAgICAgcHJlc2VudGF0aW9uVGltZVVzLCBmbGFncywgZXJyb3JEZXRhaWxNc2cpOwogfQogCkBAIC0xMjc1LDcgKzEyODYsMjYgQEAKICAgICBqYnl0ZUFycmF5IGl2T2JqID0KICAgICAgICAgKGpieXRlQXJyYXkpZW52LT5HZXRPYmplY3RGaWVsZChjcnlwdG9JbmZvT2JqLCBnRmllbGRzLmNyeXB0b0luZm9JVklEKTsKIAotICAgIGppbnQgbW9kZSA9IGVudi0+R2V0SW50RmllbGQoY3J5cHRvSW5mb09iaiwgZ0ZpZWxkcy5jcnlwdG9JbmZvTW9kZUlEKTsKKyAgICBqaW50IGptb2RlID0gZW52LT5HZXRJbnRGaWVsZChjcnlwdG9JbmZvT2JqLCBnRmllbGRzLmNyeXB0b0luZm9Nb2RlSUQpOworICAgIGVudW0gQ3J5cHRvUGx1Z2luOjpNb2RlIG1vZGU7CisgICAgaWYgKGptb2RlID09IGdDcnlwdG9Nb2Rlcy5VbmVuY3J5cHRlZCkgeworICAgICAgICBtb2RlID0gQ3J5cHRvUGx1Z2luOjprTW9kZV9VbmVuY3J5cHRlZDsKKyAgICB9IGVsc2UgaWYgKGptb2RlID09IGdDcnlwdG9Nb2Rlcy5BZXNDdHIpIHsKKyAgICAgICAgbW9kZSA9IENyeXB0b1BsdWdpbjo6a01vZGVfQUVTX0NUUjsKKyAgICB9IGVsc2UgaWYgKGptb2RlID09IGdDcnlwdG9Nb2Rlcy5BZXNDYmMpIHsKKyAgICAgICAgbW9kZSA9IENyeXB0b1BsdWdpbjo6a01vZGVfQUVTX0NCQzsKKyAgICB9ICBlbHNlIHsKKyAgICAgICAgdGhyb3dFeGNlcHRpb25Bc05lY2Vzc2FyeShlbnYsIElOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGpvYmplY3QgcGF0dGVybk9iaiA9IGVudi0+R2V0T2JqZWN0RmllbGQoY3J5cHRvSW5mb09iaiwgZ0ZpZWxkcy5jcnlwdG9JbmZvUGF0dGVybklEKTsKKworICAgIENyeXB0b1BsdWdpbjo6UGF0dGVybiBwYXR0ZXJuOworICAgIGlmIChwYXR0ZXJuT2JqICE9IE5VTEwpIHsKKyAgICAgICAgcGF0dGVybi5tRW5jcnlwdEJsb2NrcyA9IGVudi0+R2V0SW50RmllbGQocGF0dGVybk9iaiwgZ0ZpZWxkcy5wYXR0ZXJuRW5jcnlwdEJsb2Nrc0lEKTsKKyAgICAgICAgcGF0dGVybi5tU2tpcEJsb2NrcyA9IGVudi0+R2V0SW50RmllbGQocGF0dGVybk9iaiwgZ0ZpZWxkcy5wYXR0ZXJuU2tpcEJsb2Nrc0lEKTsKKyAgICB9CiAKICAgICBzdGF0dXNfdCBlcnIgPSBPSzsKIApAQCAtMTM2MCw3ICsxMzkwLDggQEAKICAgICAgICAgICAgICAgICBpbmRleCwgb2Zmc2V0LAogICAgICAgICAgICAgICAgIHN1YlNhbXBsZXMsIG51bVN1YlNhbXBsZXMsCiAgICAgICAgICAgICAgICAgKGNvbnN0IHVpbnQ4X3QgKilrZXksIChjb25zdCB1aW50OF90ICopaXYsCi0gICAgICAgICAgICAgICAgKENyeXB0b1BsdWdpbjo6TW9kZSltb2RlLAorICAgICAgICAgICAgICAgIG1vZGUsCisgICAgICAgICAgICAgICAgcGF0dGVybiwKICAgICAgICAgICAgICAgICB0aW1lc3RhbXBVcywKICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAmZXJyb3JEZXRhaWxNc2cpOwpAQCAtMTY1OCw2ICsxNjg5LDIyIEBACiAKICAgICBDSEVDSyhnRmllbGRzLnBvc3RFdmVudEZyb21OYXRpdmVJRCAhPSBOVUxMKTsKIAorICAgIGpmaWVsZElEIGZpZWxkOworICAgIGZpZWxkID0gZW52LT5HZXRTdGF0aWNGaWVsZElEKGNsYXp6LmdldCgpLCAiQ1JZUFRPX01PREVfVU5FTkNSWVBURUQiLCAiSSIpOworICAgIENIRUNLKGZpZWxkICE9IE5VTEwpOworICAgIGdDcnlwdG9Nb2Rlcy5VbmVuY3J5cHRlZCA9CisgICAgICAgIGVudi0+R2V0U3RhdGljSW50RmllbGQoY2xhenouZ2V0KCksIGZpZWxkKTsKKworICAgIGZpZWxkID0gZW52LT5HZXRTdGF0aWNGaWVsZElEKGNsYXp6LmdldCgpLCAiQ1JZUFRPX01PREVfQUVTX0NUUiIsICJJIik7CisgICAgQ0hFQ0soZmllbGQgIT0gTlVMTCk7CisgICAgZ0NyeXB0b01vZGVzLkFlc0N0ciA9CisgICAgICAgIGVudi0+R2V0U3RhdGljSW50RmllbGQoY2xhenouZ2V0KCksIGZpZWxkKTsKKworICAgIGZpZWxkID0gZW52LT5HZXRTdGF0aWNGaWVsZElEKGNsYXp6LmdldCgpLCAiQ1JZUFRPX01PREVfQUVTX0NCQyIsICJJIik7CisgICAgQ0hFQ0soZmllbGQgIT0gTlVMTCk7CisgICAgZ0NyeXB0b01vZGVzLkFlc0NiYyA9CisgICAgICAgIGVudi0+R2V0U3RhdGljSW50RmllbGQoY2xhenouZ2V0KCksIGZpZWxkKTsKKwogICAgIGNsYXp6LnJlc2V0KGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQ3J5cHRvSW5mbyIpKTsKICAgICBDSEVDSyhjbGF6ei5nZXQoKSAhPSBOVUxMKTsKIApAQCAtMTY4MiwxMCArMTcyOSwyMiBAQAogICAgIGdGaWVsZHMuY3J5cHRvSW5mb01vZGVJRCA9IGVudi0+R2V0RmllbGRJRChjbGF6ei5nZXQoKSwgIm1vZGUiLCAiSSIpOwogICAgIENIRUNLKGdGaWVsZHMuY3J5cHRvSW5mb01vZGVJRCAhPSBOVUxMKTsKIAorICAgIGdGaWVsZHMuY3J5cHRvSW5mb1BhdHRlcm5JRCA9IGVudi0+R2V0RmllbGRJRChjbGF6ei5nZXQoKSwgInBhdHRlcm4iLAorICAgICAgICAiTGFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDcnlwdG9JbmZvJFBhdHRlcm47Iik7CisgICAgQ0hFQ0soZ0ZpZWxkcy5jcnlwdG9JbmZvUGF0dGVybklEICE9IE5VTEwpOworCisgICAgY2xhenoucmVzZXQoZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbWVkaWEvTWVkaWFDb2RlYyRDcnlwdG9JbmZvJFBhdHRlcm4iKSk7CisgICAgQ0hFQ0soY2xhenouZ2V0KCkgIT0gTlVMTCk7CisKKyAgICBnRmllbGRzLnBhdHRlcm5FbmNyeXB0QmxvY2tzSUQgPSBlbnYtPkdldEZpZWxkSUQoY2xhenouZ2V0KCksICJtRW5jcnlwdEJsb2NrcyIsICJJIik7CisgICAgQ0hFQ0soZ0ZpZWxkcy5wYXR0ZXJuRW5jcnlwdEJsb2Nrc0lEICE9IE5VTEwpOworCisgICAgZ0ZpZWxkcy5wYXR0ZXJuU2tpcEJsb2Nrc0lEID0gZW52LT5HZXRGaWVsZElEKGNsYXp6LmdldCgpLCAibVNraXBCbG9ja3MiLCAiSSIpOworICAgIENIRUNLKGdGaWVsZHMucGF0dGVyblNraXBCbG9ja3NJRCAhPSBOVUxMKTsKKwogICAgIGNsYXp6LnJlc2V0KGVudi0+RmluZENsYXNzKCJhbmRyb2lkL21lZGlhL01lZGlhQ29kZWMkQ3J5cHRvRXhjZXB0aW9uIikpOwogICAgIENIRUNLKGNsYXp6LmdldCgpICE9IE5VTEwpOwogCi0gICAgamZpZWxkSUQgZmllbGQ7CiAgICAgZmllbGQgPSBlbnYtPkdldFN0YXRpY0ZpZWxkSUQoY2xhenouZ2V0KCksICJFUlJPUl9OT19LRVkiLCAiSSIpOwogICAgIENIRUNLKGZpZWxkICE9IE5VTEwpOwogICAgIGdDcnlwdG9FcnJvckNvZGVzLmNyeXB0b0Vycm9yTm9LZXkgPQpkaWZmIC0tZ2l0IGEvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFDb2RlYy5oIGIvbWVkaWEvam5pL2FuZHJvaWRfbWVkaWFfTWVkaWFDb2RlYy5oCmluZGV4IDY2NTBjZjkuLmMwYzQ3ZWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2puaS9hbmRyb2lkX21lZGlhX01lZGlhQ29kZWMuaAorKysgYi9tZWRpYS9qbmkvYW5kcm9pZF9tZWRpYV9NZWRpYUNvZGVjLmgKQEAgLTgxLDYgKzgxLDcgQEAKICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qga2V5WzE2XSwKICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgaXZbMTZdLAogICAgICAgICAgICAgQ3J5cHRvUGx1Z2luOjpNb2RlIG1vZGUsCisgICAgICAgICAgICBjb25zdCBDcnlwdG9QbHVnaW46OlBhdHRlcm4gJnBhdHRlcm4sCiAgICAgICAgICAgICBpbnQ2NF90IHByZXNlbnRhdGlvblRpbWVVcywKICAgICAgICAgICAgIHVpbnQzMl90IGZsYWdzLAogICAgICAgICAgICAgQVN0cmluZyAqZXJyb3JEZXRhaWxNc2cpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvam5pL2FuZHJvaWRfbXRwX010cERldmljZS5jcHAgYi9tZWRpYS9qbmkvYW5kcm9pZF9tdHBfTXRwRGV2aWNlLmNwcAppbmRleCAzZjRkMTgzLi4xMzBkZmU1IDEwMDY0NAotLS0gYS9tZWRpYS9qbmkvYW5kcm9pZF9tdHBfTXRwRGV2aWNlLmNwcAorKysgYi9tZWRpYS9qbmkvYW5kcm9pZF9tdHBfTXRwRGV2aWNlLmNwcApAQCAtMjcsOCArMjcsMTEgQEAKIAogI2luY2x1ZGUgImpuaS5oIgogI2luY2x1ZGUgIkpOSUhlbHAuaCIKKyNpbmNsdWRlICJTY29wZWRQcmltaXRpdmVBcnJheS5oIgorCiAjaW5jbHVkZSAiYW5kcm9pZF9ydW50aW1lL0FuZHJvaWRSdW50aW1lLmgiCiAjaW5jbHVkZSAiYW5kcm9pZF9ydW50aW1lL0xvZy5oIgorI2luY2x1ZGUgIm5hdGl2ZWhlbHBlci9TY29wZWRMb2NhbFJlZi5oIgogI2luY2x1ZGUgInByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIgogCiAjaW5jbHVkZSAiTXRwVHlwZXMuaCIKQEAgLTQxLDYgKzQ0LDggQEAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCituYW1lc3BhY2UgeworCiBzdGF0aWMgamZpZWxkSUQgZmllbGRfY29udGV4dDsKIAogamNsYXNzIGNsYXp6X2RldmljZUluZm87CkBAIC02MCw2ICs2NSw3IEBACiBzdGF0aWMgamZpZWxkSUQgZmllbGRfZGV2aWNlSW5mb19tb2RlbDsKIHN0YXRpYyBqZmllbGRJRCBmaWVsZF9kZXZpY2VJbmZvX3ZlcnNpb247CiBzdGF0aWMgamZpZWxkSUQgZmllbGRfZGV2aWNlSW5mb19zZXJpYWxOdW1iZXI7CitzdGF0aWMgamZpZWxkSUQgZmllbGRfZGV2aWNlSW5mb19vcGVyYXRpb25zU3VwcG9ydGVkOwogCiAvLyBNdHBTdG9yYWdlSW5mbyBmaWVsZHMKIHN0YXRpYyBqZmllbGRJRCBmaWVsZF9zdG9yYWdlSW5mb19zdG9yYWdlSWQ7CkBAIC05Miw2ICs5OCwzMiBAQAogCiAvLyBNdHBFdmVudCBmaWVsZHMKIHN0YXRpYyBqZmllbGRJRCBmaWVsZF9ldmVudF9ldmVudENvZGU7CitzdGF0aWMgamZpZWxkSUQgZmllbGRfZXZlbnRfcGFyYW1ldGVyMTsKK3N0YXRpYyBqZmllbGRJRCBmaWVsZF9ldmVudF9wYXJhbWV0ZXIyOworc3RhdGljIGpmaWVsZElEIGZpZWxkX2V2ZW50X3BhcmFtZXRlcjM7CisKK2NsYXNzIEphdmFBcnJheVdyaXRlciB7CitwdWJsaWM6CisgICAgSmF2YUFycmF5V3JpdGVyKEpOSUVudiogZW52LCBqYnl0ZUFycmF5IGFycmF5KSA6CisgICAgICAgIG1FbnYoZW52KSwgbUFycmF5KGFycmF5KSwgbVNpemUobUVudi0+R2V0QXJyYXlMZW5ndGgobUFycmF5KSkge30KKyAgICBib29sIHdyaXRlKHZvaWQqIGRhdGEsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1aW50MzJfdD4obVNpemUpIDwgb2Zmc2V0ICsgbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbUVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKG1BcnJheSwgb2Zmc2V0LCBsZW5ndGgsIHN0YXRpY19jYXN0PGpieXRlKj4oZGF0YSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgd3JpdGVUbyh2b2lkKiBkYXRhLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgdm9pZCogY2xpZW50RGF0YSkgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SmF2YUFycmF5V3JpdGVyKj4oY2xpZW50RGF0YSktPndyaXRlKGRhdGEsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSk5JRW52KiBtRW52OworICAgIGpieXRlQXJyYXkgbUFycmF5OworICAgIGpzaXplIG1TaXplOworfTsKKworfQogCiBNdHBEZXZpY2UqIGdldF9kZXZpY2VfZnJvbV9vYmplY3QoSk5JRW52KiBlbnYsIGpvYmplY3QgamF2YURldmljZSkKIHsKQEAgLTIwOCw2ICsyNDAsMTcgQEAKICAgICBpZiAoZGV2aWNlSW5mby0+bVNlcmlhbCkKICAgICAgICAgZW52LT5TZXRPYmplY3RGaWVsZChpbmZvLCBmaWVsZF9kZXZpY2VJbmZvX3NlcmlhbE51bWJlciwKICAgICAgICAgICAgIGVudi0+TmV3U3RyaW5nVVRGKGRldmljZUluZm8tPm1TZXJpYWwpKTsKKyAgICBpZiAoZGV2aWNlSW5mby0+bU9wZXJhdGlvbnMpIHsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBkZXZpY2VJbmZvLT5tT3BlcmF0aW9ucy0+c2l6ZSgpOworICAgICAgICBjb25zdCBqaW50QXJyYXkgb3BlcmF0aW9ucyA9IGVudi0+TmV3SW50QXJyYXkoc2l6ZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZEludEFycmF5UlcgZWxlbWVudHMoZW52LCBvcGVyYXRpb25zKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0gPSBkZXZpY2VJbmZvLT5tT3BlcmF0aW9ucy0+aXRlbUF0KGkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVudi0+U2V0T2JqZWN0RmllbGQoaW5mbywgZmllbGRfZGV2aWNlSW5mb19vcGVyYXRpb25zU3VwcG9ydGVkLCBvcGVyYXRpb25zKTsKKyAgICB9CiAKICAgICBkZWxldGUgZGV2aWNlSW5mbzsKICAgICByZXR1cm4gaW5mbzsKQEAgLTMwNywzOCArMzUwLDU5IEBACiAgICAgcmV0dXJuIGluZm87CiB9CiAKLXN0cnVjdCBnZXRfb2JqZWN0X2NhbGxiYWNrX2RhdGEgewotICAgIEpOSUVudiAqZW52OwotICAgIGpieXRlQXJyYXkgYXJyYXk7Ci19OwotCi1zdGF0aWMgYm9vbCBnZXRfb2JqZWN0X2NhbGxiYWNrKHZvaWQqIGRhdGEsIGludCBvZmZzZXQsIGludCBsZW5ndGgsIHZvaWQqIGNsaWVudERhdGEpCi17Ci0gICAgZ2V0X29iamVjdF9jYWxsYmFja19kYXRhKiBjYkRhdGEgPSAoZ2V0X29iamVjdF9jYWxsYmFja19kYXRhICopY2xpZW50RGF0YTsKLSAgICBjYkRhdGEtPmVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKGNiRGF0YS0+YXJyYXksIG9mZnNldCwgbGVuZ3RoLCAoamJ5dGUgKilkYXRhKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIGpieXRlQXJyYXkKIGFuZHJvaWRfbXRwX010cERldmljZV9nZXRfb2JqZWN0KEpOSUVudiAqZW52LCBqb2JqZWN0IHRoaXosIGppbnQgb2JqZWN0SUQsIGppbnQgb2JqZWN0U2l6ZSkKIHsKICAgICBNdHBEZXZpY2UqIGRldmljZSA9IGdldF9kZXZpY2VfZnJvbV9vYmplY3QoZW52LCB0aGl6KTsKLSAgICBpZiAoIWRldmljZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBqYnl0ZUFycmF5IGFycmF5ID0gZW52LT5OZXdCeXRlQXJyYXkob2JqZWN0U2l6ZSk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihlbnYsICJqYXZhL2xhbmcvT3V0T2ZNZW1vcnlFcnJvciIsIE5VTEwpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIWRldmljZSkgeworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBnZXRfb2JqZWN0X2NhbGxiYWNrX2RhdGEgZGF0YTsKLSAgICBkYXRhLmVudiA9IGVudjsKLSAgICBkYXRhLmFycmF5ID0gYXJyYXk7CisgICAgU2NvcGVkTG9jYWxSZWY8amJ5dGVBcnJheT4gYXJyYXkoZW52LCBlbnYtPk5ld0J5dGVBcnJheShvYmplY3RTaXplKSk7CisgICAgaWYgKCFhcnJheS5nZXQoKSkgeworICAgICAgICBqbmlUaHJvd0V4Y2VwdGlvbihlbnYsICJqYXZhL2xhbmcvT3V0T2ZNZW1vcnlFcnJvciIsIE5VTEwpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CiAKLSAgICBpZiAoZGV2aWNlLT5yZWFkT2JqZWN0KG9iamVjdElELCBnZXRfb2JqZWN0X2NhbGxiYWNrLCBvYmplY3RTaXplLCAmZGF0YSkpCi0gICAgICAgIHJldHVybiBhcnJheTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBKYXZhQXJyYXlXcml0ZXIgd3JpdGVyKGVudiwgYXJyYXkuZ2V0KCkpOworCisgICAgaWYgKGRldmljZS0+cmVhZE9iamVjdChvYmplY3RJRCwgSmF2YUFycmF5V3JpdGVyOjp3cml0ZVRvLCBvYmplY3RTaXplLCAmd3JpdGVyKSkgeworICAgICAgICByZXR1cm4gYXJyYXkucmVsZWFzZSgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIGppbnQKK2FuZHJvaWRfbXRwX010cERldmljZV9nZXRfcGFydGlhbF9vYmplY3QoSk5JRW52ICplbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgdGhpeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBvYmplY3RJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJ5dGVBcnJheSBhcnJheSkKK3sKKyAgICBpZiAoIWFycmF5KSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKGVudiwgImphdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24iLCAiQXJyYXkgbXVzdCBub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIE10cERldmljZSogY29uc3QgZGV2aWNlID0gZ2V0X2RldmljZV9mcm9tX29iamVjdChlbnYsIHRoaXopOworICAgIGlmICghZGV2aWNlKSB7CisgICAgICAgIGpuaVRocm93RXhjZXB0aW9uKGVudiwgImphdmEvaW8vSU9FeGNlcHRpb24iLCAiRmFpbGVkIHRvIG9idGFpbiBNdHBEZXZpY2UuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBKYXZhQXJyYXlXcml0ZXIgd3JpdGVyKGVudiwgYXJyYXkpOworICAgIHVpbnQzMl90IHdyaXR0ZW5fc2l6ZTsKKyAgICBib29sIHN1Y2Nlc3MgPSBkZXZpY2UtPnJlYWRQYXJ0aWFsT2JqZWN0KAorICAgICAgICAgICAgb2JqZWN0SUQsIG9mZnNldCwgc2l6ZSwgJndyaXR0ZW5fc2l6ZSwgSmF2YUFycmF5V3JpdGVyOjp3cml0ZVRvLCAmd3JpdGVyKTsKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgam5pVGhyb3dFeGNlcHRpb24oZW52LCAiamF2YS9pby9JT0V4Y2VwdGlvbiIsICJGYWlsZWQgdG8gcmVhZCBkYXRhLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8vIE5vdGU6IGFzc3VtcHRpb24gaGVyZSBpcyB0aGF0IGEgbmVnYXRpdmUgdmFsdWUgd2lsbCBiZSB0cmVhdGVkIGFzIHVuc2lnbmVkIG9uIHRoZSBKYXZhCisgICAgLy8gICAgICAgbGV2ZWwuCisgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgYWN0dWFsbHkgaG9sZHMuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGppbnQ+KHdyaXR0ZW5fc2l6ZSk7CiB9CiAKIHN0YXRpYyBqYnl0ZUFycmF5CkBAIC01MTIsMTMgKzU3NiwxNyBAQAogICAgICAgICBlbnYtPlRocm93TmV3KGNsYXp6X2lvX2V4Y2VwdGlvbiwgIiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgY29uc3QgaW50IGV2ZW50Q29kZSA9IGRldmljZS0+cmVhcEV2ZW50UmVxdWVzdChzZXEpOworICAgIHVpbnQzMl90IHBhcmFtZXRlcnNbM107CisgICAgY29uc3QgaW50IGV2ZW50Q29kZSA9IGRldmljZS0+cmVhcEV2ZW50UmVxdWVzdChzZXEsICZwYXJhbWV0ZXJzKTsKICAgICBpZiAoZXZlbnRDb2RlIDw9IDApIHsKICAgICAgICAgZW52LT5UaHJvd05ldyhjbGF6el9vcGVyYXRpb25fY2FuY2VsZWRfZXhjZXB0aW9uLCAiIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBqb2JqZWN0IHJlc3VsdCA9IGVudi0+TmV3T2JqZWN0KGNsYXp6X2V2ZW50LCBjb25zdHJ1Y3Rvcl9ldmVudCk7CiAgICAgZW52LT5TZXRJbnRGaWVsZChyZXN1bHQsIGZpZWxkX2V2ZW50X2V2ZW50Q29kZSwgZXZlbnRDb2RlKTsKKyAgICBlbnYtPlNldEludEZpZWxkKHJlc3VsdCwgZmllbGRfZXZlbnRfcGFyYW1ldGVyMSwgc3RhdGljX2Nhc3Q8amludD4ocGFyYW1ldGVyc1swXSkpOworICAgIGVudi0+U2V0SW50RmllbGQocmVzdWx0LCBmaWVsZF9ldmVudF9wYXJhbWV0ZXIyLCBzdGF0aWNfY2FzdDxqaW50PihwYXJhbWV0ZXJzWzFdKSk7CisgICAgZW52LT5TZXRJbnRGaWVsZChyZXN1bHQsIGZpZWxkX2V2ZW50X3BhcmFtZXRlcjMsIHN0YXRpY19jYXN0PGppbnQ+KHBhcmFtZXRlcnNbMl0pKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC01NDcsNiArNjE1LDcgQEAKICAgICB7Im5hdGl2ZV9nZXRfb2JqZWN0X2luZm8iLCAgIihJKUxhbmRyb2lkL210cC9NdHBPYmplY3RJbmZvOyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhbmRyb2lkX210cF9NdHBEZXZpY2VfZ2V0X29iamVjdF9pbmZvfSwKICAgICB7Im5hdGl2ZV9nZXRfb2JqZWN0IiwgICAgICAgIihJSSlbQiIsKHZvaWQgKilhbmRyb2lkX210cF9NdHBEZXZpY2VfZ2V0X29iamVjdH0sCisgICAgeyJuYXRpdmVfZ2V0X3BhcnRpYWxfb2JqZWN0IiwgIihJSUlbQilJIiwgKHZvaWQgKilhbmRyb2lkX210cF9NdHBEZXZpY2VfZ2V0X3BhcnRpYWxfb2JqZWN0fSwKICAgICB7Im5hdGl2ZV9nZXRfdGh1bWJuYWlsIiwgICAgIihJKVtCIiwodm9pZCAqKWFuZHJvaWRfbXRwX010cERldmljZV9nZXRfdGh1bWJuYWlsfSwKICAgICB7Im5hdGl2ZV9kZWxldGVfb2JqZWN0IiwgICAgIihJKVoiLCAodm9pZCAqKWFuZHJvaWRfbXRwX010cERldmljZV9kZWxldGVfb2JqZWN0fSwKICAgICB7Im5hdGl2ZV9nZXRfcGFyZW50IiwgICAgICAgIihJKUoiLCAodm9pZCAqKWFuZHJvaWRfbXRwX010cERldmljZV9nZXRfcGFyZW50fSwKQEAgLTU5OSw2ICs2NjgsMTEgQEAKICAgICAgICAgQUxPR0UoIkNhbid0IGZpbmQgTXRwRGV2aWNlSW5mby5tU2VyaWFsTnVtYmVyIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgZmllbGRfZGV2aWNlSW5mb19vcGVyYXRpb25zU3VwcG9ydGVkID0gZW52LT5HZXRGaWVsZElEKGNsYXp6LCAibU9wZXJhdGlvbnNTdXBwb3J0ZWQiLCAiW0kiKTsKKyAgICBpZiAoZmllbGRfZGV2aWNlSW5mb19vcGVyYXRpb25zU3VwcG9ydGVkID09IE5VTEwpIHsKKyAgICAgICAgQUxPR0UoIkNhbid0IGZpbmQgTXRwRGV2aWNlSW5mby5tT3BlcmF0aW9uc1N1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGNsYXp6X2RldmljZUluZm8gPSAoamNsYXNzKWVudi0+TmV3R2xvYmFsUmVmKGNsYXp6KTsKIAogICAgIGNsYXp6ID0gZW52LT5GaW5kQ2xhc3MoImFuZHJvaWQvbXRwL010cFN0b3JhZ2VJbmZvIik7CkBAIC03NjUsNiArODM5LDIxIEBACiAgICAgICAgIEFMT0dFKCJDYW4ndCBmaW5kIE10cE9iamVjdEluZm8ubUV2ZW50Q29kZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGZpZWxkX2V2ZW50X3BhcmFtZXRlcjEgPSBlbnYtPkdldEZpZWxkSUQoY2xhenosICJtUGFyYW1ldGVyMSIsICJJIik7CisgICAgaWYgKGZpZWxkX2V2ZW50X3BhcmFtZXRlcjEgPT0gTlVMTCkgeworICAgICAgICBBTE9HRSgiQ2FuJ3QgZmluZCBNdHBPYmplY3RJbmZvLm1QYXJhbWV0ZXIxIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZmllbGRfZXZlbnRfcGFyYW1ldGVyMiA9IGVudi0+R2V0RmllbGRJRChjbGF6eiwgIm1QYXJhbWV0ZXIyIiwgIkkiKTsKKyAgICBpZiAoZmllbGRfZXZlbnRfcGFyYW1ldGVyMiA9PSBOVUxMKSB7CisgICAgICAgIEFMT0dFKCJDYW4ndCBmaW5kIE10cE9iamVjdEluZm8ubVBhcmFtZXRlcjIiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmaWVsZF9ldmVudF9wYXJhbWV0ZXIzID0gZW52LT5HZXRGaWVsZElEKGNsYXp6LCAibVBhcmFtZXRlcjMiLCAiSSIpOworICAgIGlmIChmaWVsZF9ldmVudF9wYXJhbWV0ZXIzID09IE5VTEwpIHsKKyAgICAgICAgQUxPR0UoIkNhbid0IGZpbmQgTXRwT2JqZWN0SW5mby5tUGFyYW1ldGVyMyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGNsYXp6X2V2ZW50ID0gKGpjbGFzcyllbnYtPk5ld0dsb2JhbFJlZihjbGF6eik7CiAKICAgICBjbGF6eiA9IGVudi0+RmluZENsYXNzKCJhbmRyb2lkL210cC9NdHBEZXZpY2UiKTsKZGlmZiAtLWdpdCBhL21lZGlhL2puaS9zb3VuZHBvb2wvU291bmRQb29sLmNwcCBiL21lZGlhL2puaS9zb3VuZHBvb2wvU291bmRQb29sLmNwcAppbmRleCA3MGQ2NTFmLi5iNjNkZjZmIDEwMDY0NAotLS0gYS9tZWRpYS9qbmkvc291bmRwb29sL1NvdW5kUG9vbC5jcHAKKysrIGIvbWVkaWEvam5pL3NvdW5kcG9vbC9Tb3VuZFBvb2wuY3BwCkBAIC02NTUsNyArNjU1LDcgQEAKICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGlmICgobnVtQ2hhbm5lbHMgPCAxKSB8fCAobnVtQ2hhbm5lbHMgPiA4KSkgeworICAgIGlmICgobnVtQ2hhbm5lbHMgPCAxKSB8fCAobnVtQ2hhbm5lbHMgPiBGQ0NfOCkpIHsKICAgICAgICAgQUxPR0UoIlNhbXBsZSBjaGFubmVsIGNvdW50ICglZCkgb3V0IG9mIHJhbmdlIiwgbnVtQ2hhbm5lbHMpOwogICAgICAgICBzdGF0dXMgPSBCQURfVkFMVUU7CiAgICAgICAgIGdvdG8gZXJyb3I7CmRpZmYgLS1naXQgYS9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC9pbnRlZ3JhdGlvbi9DYW1lcmFCaW5kZXJUZXN0LmphdmEgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC9pbnRlZ3JhdGlvbi9DYW1lcmFCaW5kZXJUZXN0LmphdmEKaW5kZXggNTc5NjliYS4uNmY3NDIwMyAxMDA2NDQKLS0tIGEvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvaW50ZWdyYXRpb24vQ2FtZXJhQmluZGVyVGVzdC5qYXZhCisrKyBiL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdC9zcmMvY29tL2FuZHJvaWQvbWVkaWFmcmFtZXdvcmt0ZXN0L2ludGVncmF0aW9uL0NhbWVyYUJpbmRlclRlc3QuamF2YQpAQCAtMTI5LDcgKzEyOSw3IEBACiAKICAgICAgICAgICAgIGludCByZXMgPSBtVXRpbHMuZ2V0Q2FtZXJhU2VydmljZSgpLnN1cHBvcnRzQ2FtZXJhQXBpKGNhbWVyYUlkLCBBUElfVkVSU0lPTl8yKTsKIAotICAgICAgICAgICAgaWYgKHJlcyAhPSBDYW1lcmFCaW5kZXJUZXN0VXRpbHMuTk9fRVJST1IgJiYgcmVzICE9IENhbWVyYUJpbmRlclRlc3RVdGlscy5FT1BOT1RTVVBQKSB7CisgICAgICAgICAgICBpZiAocmVzICE9IENhbWVyYUJpbmRlclRlc3RVdGlscy5OT19FUlJPUiAmJiByZXMgIT0gLWFuZHJvaWQuc3lzdGVtLk9zQ29uc3RhbnRzLkVPUE5PVFNVUFApIHsKICAgICAgICAgICAgICAgICBmYWlsKCJDYW1lcmEgc2VydmljZSByZXR1cm5lZCBiYWQgdmFsdWUgd2hlbiBxdWVyaWVkIGlmIGl0IHN1cHBvcnRzIGNhbWVyYTIgYXBpOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICArIHJlcyArICIgZm9yIGNhbWVyYSBJRCAiICsgY2FtZXJhSWQpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvaW50ZWdyYXRpb24vQ2FtZXJhQmluZGVyVGVzdFV0aWxzLmphdmEgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC9pbnRlZ3JhdGlvbi9DYW1lcmFCaW5kZXJUZXN0VXRpbHMuamF2YQppbmRleCA2YmU1MzhhLi41YzRiMjNiIDEwMDY0NAotLS0gYS9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC9pbnRlZ3JhdGlvbi9DYW1lcmFCaW5kZXJUZXN0VXRpbHMuamF2YQorKysgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC9pbnRlZ3JhdGlvbi9DYW1lcmFCaW5kZXJUZXN0VXRpbHMuamF2YQpAQCAtMiw2ICsyLDcgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQubWVkaWFmcmFtZXdvcmt0ZXN0LmludGVncmF0aW9uOwogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zeXN0ZW0uT3NDb25zdGFudHMuKjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5GZWF0dXJlSW5mbzsKQEAgLTE4LDExICsxOSwxMCBAQAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0FNRVJBX1NFUlZJQ0VfQklOREVSX05BTUUgPSAibWVkaWEuY2FtZXJhIjsKIAogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IFVTRV9DQUxMSU5HX1VJRCA9IC0xOwotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IEJBRF9WQUxVRSA9IC0yMjsKLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX09QRVJBVElPTiA9IC0zODsKLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBBTFJFQURZX0VYSVNUUyA9IC0xNzsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBCQURfVkFMVUUgPSAtRUlOVkFMOworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfT1BFUkFUSU9OID0gLUVOT1NZUzsKKyAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBBTFJFQURZX0VYSVNUUyA9IC1FRVhJU1Q7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9fRVJST1IgPSAwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVPUE5PVFNVUFAgPSAtOTU7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwogCiAgICAgcHVibGljIENhbWVyYUJpbmRlclRlc3RVdGlscyhDb250ZXh0IGNvbnRleHQpIHsKZGlmZiAtLWdpdCBhL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdC9zcmMvY29tL2FuZHJvaWQvbWVkaWFmcmFtZXdvcmt0ZXN0L3VuaXQvQ2FtZXJhVXRpbHNCaW5kZXJEZWNvcmF0b3JUZXN0LmphdmEgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC91bml0L0NhbWVyYVV0aWxzQmluZGVyRGVjb3JhdG9yVGVzdC5qYXZhCmluZGV4IDcyN2FmNzguLjMzYzYzODggMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdC9zcmMvY29tL2FuZHJvaWQvbWVkaWFmcmFtZXdvcmt0ZXN0L3VuaXQvQ2FtZXJhVXRpbHNCaW5kZXJEZWNvcmF0b3JUZXN0LmphdmEKKysrIGIvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvdW5pdC9DYW1lcmFVdGlsc0JpbmRlckRlY29yYXRvclRlc3QuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLio7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi51dGlscy5DYW1lcmFCaW5kZXJEZWNvcmF0b3IuKjsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbi4qOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy4qOwogCiBpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKIApAQCAtNzgsOSArNzksOSBAQAogICAgICAgICAgICAgd2hlbihtb2NrLmRvU29tZXRoaW5nQWxyZWFkeUV4aXN0cygpKS50aGVuUmV0dXJuKEFMUkVBRFlfRVhJU1RTKTsKICAgICAgICAgICAgIHdoZW4obW9jay5kb1NvbWV0aGluZ0JhZFZhbHVlKCkpLnRoZW5SZXR1cm4oQkFEX1ZBTFVFKTsKICAgICAgICAgICAgIHdoZW4obW9jay5kb1NvbWV0aGluZ0RlYWRPYmplY3QoKSkudGhlblJldHVybihERUFEX09CSkVDVCk7Ci0gICAgICAgICAgICB3aGVuKG1vY2suZG9Tb21ldGhpbmdCYWRQb2xpY3koKSkudGhlblJldHVybihFQUNDRVMpOwotICAgICAgICAgICAgd2hlbihtb2NrLmRvU29tZXRoaW5nRGV2aWNlQnVzeSgpKS50aGVuUmV0dXJuKEVCVVNZKTsKLSAgICAgICAgICAgIHdoZW4obW9jay5kb1NvbWV0aGluZ05vU3VjaERldmljZSgpKS50aGVuUmV0dXJuKEVOT0RFVik7CisgICAgICAgICAgICB3aGVuKG1vY2suZG9Tb21ldGhpbmdCYWRQb2xpY3koKSkudGhlblJldHVybigtRUFDQ0VTKTsKKyAgICAgICAgICAgIHdoZW4obW9jay5kb1NvbWV0aGluZ0RldmljZUJ1c3koKSkudGhlblJldHVybigtRUJVU1kpOworICAgICAgICAgICAgd2hlbihtb2NrLmRvU29tZXRoaW5nTm9TdWNoRGV2aWNlKCkpLnRoZW5SZXR1cm4oLUVOT0RFVik7CiAgICAgICAgICAgICB3aGVuKG1vY2suZG9Tb21ldGhpbmdVbmtub3duRXJyb3JDb2RlKCkpLnRoZW5SZXR1cm4oU09NRV9BUkJJVFJBUllfTkVHQVRJVkVfSU5UKTsKICAgICAgICAgICAgIHdoZW4obW9jay5kb1NvbWV0aGluZ1Rocm93RGVhZE9iamVjdEV4Y2VwdGlvbigpKS50aGVuVGhyb3cobmV3IERlYWRPYmplY3RFeGNlcHRpb24oKSk7CiAgICAgICAgICAgICB3aGVuKG1vY2suZG9Tb21ldGhpbmdUaHJvd1RyYW5zYWN0aW9uVG9vTGFyZ2VFeGNlcHRpb24oKSkudGhlblRocm93KApkaWZmIC0tZ2l0IGEvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvdW5pdC9NZWRpYUluc2VydGVyVGVzdC5qYXZhIGIvbWVkaWEvdGVzdHMvTWVkaWFGcmFtZXdvcmtUZXN0L3NyYy9jb20vYW5kcm9pZC9tZWRpYWZyYW1ld29ya3Rlc3QvdW5pdC9NZWRpYUluc2VydGVyVGVzdC5qYXZhCmluZGV4IDA1ZGYwMTQuLjA2ZWZhOTAgMTAwNjQ0Ci0tLSBhL21lZGlhL3Rlc3RzL01lZGlhRnJhbWV3b3JrVGVzdC9zcmMvY29tL2FuZHJvaWQvbWVkaWFmcmFtZXdvcmt0ZXN0L3VuaXQvTWVkaWFJbnNlcnRlclRlc3QuamF2YQorKysgYi9tZWRpYS90ZXN0cy9NZWRpYUZyYW1ld29ya1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL21lZGlhZnJhbWV3b3JrdGVzdC91bml0L01lZGlhSW5zZXJ0ZXJUZXN0LmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5tZWRpYWZyYW1ld29ya3Rlc3QudW5pdDsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LklDb250ZW50UHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUluc2VydGVyOwpAQCAtODEsOCArODIsOSBAQAogICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHN1cGVyLnNldFVwKCk7CiAgICAgICAgIG1Nb2NrUHJvdmlkZXIgPSBFYXN5TW9jay5jcmVhdGVNb2NrKElDb250ZW50UHJvdmlkZXIuY2xhc3MpOwotICAgICAgICBtTWVkaWFJbnNlcnRlciA9IG5ldyBNZWRpYUluc2VydGVyKG1Nb2NrUHJvdmlkZXIsCi0gICAgICAgIG1QYWNrYWdlTmFtZSwgVEVTVF9CVUZGRVJfU0laRSk7CisgICAgICAgIGZpbmFsIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQgPSBuZXcgQ29udGVudFByb3ZpZGVyQ2xpZW50KAorICAgICAgICAgICAgICAgIGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRleHQoKS5nZXRDb250ZW50UmVzb2x2ZXIoKSwgbU1vY2tQcm92aWRlciwgdHJ1ZSk7CisgICAgICAgIG1NZWRpYUluc2VydGVyID0gbmV3IE1lZGlhSW5zZXJ0ZXIoY2xpZW50LCBURVNUX0JVRkZFUl9TSVpFKTsKICAgICAgICAgbVBhY2thZ2VOYW1lID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VOYW1lKCk7CiAgICAgICAgIG1GaWxlc0NvdW50ZXIgPSAwOwogICAgICAgICBtQXVkaW9Db3VudGVyID0gMDsKZGlmZiAtLWdpdCBhL29wZW5nbC9qYXZhL2FuZHJvaWQvb3BlbmdsL0dMRVMzMS5qYXZhIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKaW5kZXggODA1OTMwZS4uNjc5MTA4ZiAxMDA2NDQKLS0tIGEvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKKysrIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMxLmphdmEKQEAgLTIwNCw3ICsyMDQsOCBAQAogICAgICAgICBfbmF0aXZlQ2xhc3NJbml0KCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBHTEVTMzEoKSB7fQorICAgIC8qKiBAaGlkZSAqLworICAgIEdMRVMzMSgpIHt9CiAgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGlzcGF0Y2hDb21wdXRlICggR0x1aW50IG51bV9ncm91cHNfeCwgR0x1aW50IG51bV9ncm91cHNfeSwgR0x1aW50IG51bV9ncm91cHNfeiApCiAKICAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRGlzcGF0Y2hDb21wdXRlKApkaWZmIC0tZ2l0IGEvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMyLmphdmEgYi9vcGVuZ2wvamF2YS9hbmRyb2lkL29wZW5nbC9HTEVTMzIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTM5MmI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xFUzMyLmphdmEKQEAgLTAsMCArMSw3ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8vIFRoaXMgc291cmNlIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQKKworcGFja2FnZSBhbmRyb2lkLm9wZW5nbDsKKworLyoqIE9wZW5HTCBFUyAzLjIKKyAqLworcHVibGljIGNsYXNzIEdMRVMzMiBleHRlbmRzIEdMRVMzMSB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDI7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9DT05URVhUX0ZMQUdfUk9CVVNUX0FDQ0VTU19CSVQgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHTF9HRU9NRVRSWV9TSEFERVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAwMDQ7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xfVEVTU19DT05UUk9MX1NIQURFUl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVJfQklUICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDAxMDsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVQURTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVTX0FESkFDRU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJTkVfU1RSSVBfQURKQUNFTkNZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFU19BREpBQ0VOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RSSUFOR0xFX1NUUklQX0FESkFDRU5DWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDBFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX09WRVJGTE9XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTAzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NUQUNLX1VOREVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfTE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNTA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMDA0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1ZFUlRFWF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDc0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NMQU1QX1RPX0JPUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MTJEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTlRFWFRfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZPUl9QQVRDSEVTX1NVUFBPUlRFRCAgICAgICAgID0gMHg4MjIxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4MjQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0NBTExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9TSEFERVJfQ09NUElMRVIgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgID0gMHg4MjREOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAgICAgID0gMHg4MjRFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjRGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dVSUxUWV9DT05URVhUX1JFU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjUzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOTk9DRU5UX0NPTlRFWFRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOS05PV05fQ09OVEVYVF9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWSAgICAgICAgICAgICAgICAgICAgID0gMHg4MjU2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBWUVSX1BST1ZPS0lOR19WRVJURVggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjVFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOREVGSU5FRF9WRVJURVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjYwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX05PX1JFU0VUX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjYxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjY4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjY5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1RZUEVfUE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MjZEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1FVRVJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkUzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BST0dSQU1fUElQRUxJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MkU4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU5QVVRfQ09NUE9ORU5UUyAgICAgICAgICAgICAgID0gMHg4ODZDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU5QVVRfQ09NUE9ORU5UUyAgICAgICAgICAgID0gMHg4ODZEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUl9JTlZPQ0FUSU9OUyAgICAgICAgICAgICAgICAgICAgID0gMHg4ODdGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1ZFUlRJQ0VTX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX0lOUFVUX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX09VVFBVVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4OTE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAgID0gMHg4QTJDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAgID0gMHg4QTMyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAgID0gMHg4QzI5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVhUVVJFX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzJDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX0RBVEFfU1RPUkVfQklORElORyAgICAgICAgICAgICAgID0gMHg4QzJEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRV9TSEFESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzM2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9TQU1QTEVfU0hBRElOR19WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzM3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRVNfR0VORVJBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4Qzg3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfTEFZRVJFRCAgICAgICAgICAgICAgICAgID0gMHg4REE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTEFZRVJfVEFSR0VUUyAgICAgICAgICAgID0gMHg4REE4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REMyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REQwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgID0gMHg4REQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0dFT01FVFJZX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgID0gMHg4RERGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfVkVSVElDRVMgICAgICAgICAgICAgICAgICAgID0gMHg4REUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQVVRfQ09NUE9ORU5UUyAgICAgICAgICAgID0gMHg4REUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTICAgID0gMHg4RTFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9DT01CSU5FRF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTID0gMHg4RTFGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZJUlNUX1ZFUlRFWF9DT05WRU5USU9OICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTREOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xBU1RfVkVSVEVYX0NPTlZFTlRJT04gICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTRFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfSU5WT0NBVElPTlMgICAgICAgICAgICAgICAgID0gMHg4RTVBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01JTl9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCAgICAgICAgICAgICAgID0gMHg4RTVCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFHTUVOVF9JTlRFUlBPTEFUSU9OX09GRlNFVCAgICAgICAgICAgICAgID0gMHg4RTVDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUdNRU5UX0lOVEVSUE9MQVRJT05fT0ZGU0VUX0JJVFMgICAgICAgICAgICAgID0gMHg4RTVEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BBVENIX1ZFUlRJQ0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTcyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9PVVRQVVRfVkVSVElDRVMgICAgICAgICAgICAgICAgICAgID0gMHg4RTc1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1NQQUNJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1ZFUlRFWF9PUkRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfR0VOX1BPSU5UX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTc5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTT0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfT0REICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQUNUSU9OQUxfRVZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9QQVRDSF9WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0dFTl9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTdFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgICAgID0gMHg4RTdGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgID0gMHg4RTgwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICAgID0gMHg4RTgxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgID0gMHg4RTgyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAgID0gMHg4RTgzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX1BBVENIX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgID0gMHg4RTg1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgID0gMHg4RTg2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfRVZBTFVBVElPTl9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFU1NfQ09OVFJPTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RTg4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgID0gMHg4RTg5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgID0gMHg4RThBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQ1VCRV9NQVBfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgICAgID0gMHg5MDBBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfQ1VCRV9NQVBfQVJSQVlfU0hBRE9XICAgICAgICAgICAgICAgICAgID0gMHg5MDBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDBFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgID0gMHg5MDBGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDUxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lNQUdFX0NVQkVfTUFQX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDU0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDVDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDVGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MDY3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9JTUFHRV9DVUJFX01BUF9BUlJBWSAgICAgICAgICAgICAgID0gMHg5MDZBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfSU1BR0VfVU5JRk9STVMgICAgICAgICAgICAgICAgID0gMHg5MENCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fSU1BR0VfVU5JRk9STVMgICAgICAgICAgICAgID0gMHg5MENDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTUFHRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgICAgID0gMHg5MENEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9TSEFERVJfU1RPUkFHRV9CTE9DS1MgICAgICAgICAgICAgID0gMHg5MEQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfU0hBREVSX1NUT1JBR0VfQkxPQ0tTICAgICAgICAgID0gMHg5MEQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fU0hBREVSX1NUT1JBR0VfQkxPQ0tTICAgICAgID0gMHg5MEQ5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfMkRfTVVMVElTQU1QTEVfQVJSQVkgICAgICAgICAgICAgICAgICAgID0gMHg5MTAyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQklORElOR18yRF9NVUxUSVNBTVBMRV9BUlJBWSAgICAgICAgICAgID0gMHg5MTA1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NBTVBMRVJfMkRfTVVMVElTQU1QTEVfQVJSQVkgICAgICAgICAgICAgICAgICAgID0gMHg5MTBCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZICAgICAgICAgICAgICAgID0gMHg5MTBDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX01VTFRJU0FNUExFX0FSUkFZICAgICAgID0gMHg5MTBEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9JTlBVVF9DT01QT05FTlRTICAgICAgICAgICAgICAgICAgID0gMHg5MTIzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9PVVRQVVRfQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgID0gMHg5MTI0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19NRVNTQUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTQ4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTlEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MTlFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1RFWFRVUkVfQlVGRkVSX09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHg5MTlGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJUExZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NDUkVFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX09WRVJMQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RBUktFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0xJR0hURU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SRE9ER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5Mjk5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTE9SQlVSTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hBUkRMSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1NPRlRMSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RJRkZFUkVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MjlFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0VYQ0xVU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkEwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9IVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9TQVRVUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkFGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0hTTF9MVU1JTk9TSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkIwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1BSSU1JVElWRV9CT1VORElOR19CT1ggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkJFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJfQlVGRkVSUyAgICAgICAgID0gMHg5MkNEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJfQlVGRkVSUyAgICAgID0gMHg5MkNFOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUl9CVUZGRVJTICAgICAgICAgICAgID0gMHg5MkNGOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0NPTlRST0xfQVRPTUlDX0NPVU5URVJTICAgICAgICAgICAgICAgID0gMHg5MkQzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9URVNTX0VWQUxVQVRJT05fQVRPTUlDX0NPVU5URVJTICAgICAgICAgICAgID0gMHg5MkQ0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9HRU9NRVRSWV9BVE9NSUNfQ09VTlRFUlMgICAgICAgICAgICAgICAgICAgID0gMHg5MkQ1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkUwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0lTX1BFUl9QQVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MkU3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19DT05UUk9MX1NIQURFUiAgICAgICAgICAgICAgID0gMHg5MzA3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfVEVTU19FVkFMVUFUSU9OX1NIQURFUiAgICAgICAgICAgID0gMHg5MzA4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX1JFRkVSRU5DRURfQllfR0VPTUVUUllfU0hBREVSICAgICAgICAgICAgICAgICAgID0gMHg5MzA5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFRfTEFZRVJTICAgICAgICAgICAgICAgICAgICAgID0gMHg5MzEyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01BWF9GUkFNRUJVRkZFUl9MQVlFUlMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5MzE3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHg5MzgxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX01VTFRJU0FNUExFX0xJTkVfV0lEVEhfR1JBTlVMQVJJVFkgICAgICAgICAgICAgID0gMHg5MzgyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzR4NCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0IzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4NiAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDUgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDYgICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0I5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDggICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEwICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEwICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyICAgICAgICAgICAgICAgICAgICAgID0gMHg5M0JEOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0ICAgICAgICAgICAgICAgID0gMHg5M0QwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg0ICAgICAgICAgICAgICAgID0gMHg5M0QxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNXg1ICAgICAgICAgICAgICAgID0gMHg5M0QyOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1ICAgICAgICAgICAgICAgID0gMHg5M0QzOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2ICAgICAgICAgICAgICAgID0gMHg5M0Q0OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg1ICAgICAgICAgICAgICAgID0gMHg5M0Q1OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2ICAgICAgICAgICAgICAgID0gMHg5M0Q2OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4ICAgICAgICAgICAgICAgID0gMHg5M0Q3OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NSAgICAgICAgICAgICAgID0gMHg5M0Q4OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4NiAgICAgICAgICAgICAgID0gMHg5M0Q5OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OCAgICAgICAgICAgICAgID0gMHg5M0RBOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTAgICAgICAgICAgICAgID0gMHg5M0RCOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTAgICAgICAgICAgICAgID0gMHg5M0RDOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTJ4MTIgICAgICAgICAgICAgID0gMHg5M0REOworCisKKyAgICBuYXRpdmUgcHJpdmF0ZSBzdGF0aWMgdm9pZCBfbmF0aXZlQ2xhc3NJbml0KCk7CisgICAgc3RhdGljIHsKKyAgICAgICAgX25hdGl2ZUNsYXNzSW5pdCgpOworICAgIH0KKworICAgIHByaXZhdGUgR0xFUzMyKCkge30KKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xCbGVuZEJhcnJpZXIgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEJhcnJpZXIoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEgKCBHTHVpbnQgc3JjTmFtZSwgR0xlbnVtIHNyY1RhcmdldCwgR0xpbnQgc3JjTGV2ZWwsIEdMaW50IHNyY1gsIEdMaW50IHNyY1ksIEdMaW50IHNyY1osIEdMdWludCBkc3ROYW1lLCBHTGVudW0gZHN0VGFyZ2V0LCBHTGludCBkc3RMZXZlbCwgR0xpbnQgZHN0WCwgR0xpbnQgZHN0WSwgR0xpbnQgZHN0WiwgR0xzaXplaSBzcmNXaWR0aCwgR0xzaXplaSBzcmNIZWlnaHQsIEdMc2l6ZWkgc3JjRGVwdGggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbENvcHlJbWFnZVN1YkRhdGEoCisgICAgICAgIGludCBzcmNOYW1lLAorICAgICAgICBpbnQgc3JjVGFyZ2V0LAorICAgICAgICBpbnQgc3JjTGV2ZWwsCisgICAgICAgIGludCBzcmNYLAorICAgICAgICBpbnQgc3JjWSwKKyAgICAgICAgaW50IHNyY1osCisgICAgICAgIGludCBkc3ROYW1lLAorICAgICAgICBpbnQgZHN0VGFyZ2V0LAorICAgICAgICBpbnQgZHN0TGV2ZWwsCisgICAgICAgIGludCBkc3RYLAorICAgICAgICBpbnQgZHN0WSwKKyAgICAgICAgaW50IGRzdFosCisgICAgICAgIGludCBzcmNXaWR0aCwKKyAgICAgICAgaW50IHNyY0hlaWdodCwKKyAgICAgICAgaW50IHNyY0RlcHRoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2wgKCBHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKmlkcywgR0xib29sZWFuIGVuYWJsZWQgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERlYnVnTWVzc2FnZUNvbnRyb2woCisgICAgICAgIGludCBzb3VyY2UsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBpbnQgc2V2ZXJpdHksCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50W10gaWRzLAorICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICBib29sZWFuIGVuYWJsZWQKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoIEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqaWRzLCBHTGJvb2xlYW4gZW5hYmxlZCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRGVidWdNZXNzYWdlQ29udHJvbCgKKyAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBzZXZlcml0eSwKKyAgICAgICAgaW50IGNvdW50LAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgaWRzLAorICAgICAgICBib29sZWFuIGVuYWJsZWQKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRGVidWdNZXNzYWdlSW5zZXJ0ICggR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERlYnVnTWVzc2FnZUluc2VydCgKKyAgICAgICAgaW50IHNvdXJjZSwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBpZCwKKyAgICAgICAgaW50IHNldmVyaXR5LAorICAgICAgICBpbnQgbGVuZ3RoLAorICAgICAgICBTdHJpbmcgYnVmCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERlYnVnTWVzc2FnZUNhbGxiYWNrICggR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSApCisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIERlYnVnUHJvYyB7CisgICAgICAgIHZvaWQgb25NZXNzYWdlKGludCBzb3VyY2UsIGludCB0eXBlLCBpbnQgaWQsIGludCBzZXZlcml0eSwgU3RyaW5nIG1lc3NhZ2UpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayhEZWJ1Z1Byb2MgY2FsbGJhY2spOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgaW50IGdsR2V0RGVidWdNZXNzYWdlTG9nKAorICAgICAgICBpbnQgY291bnQsCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBpbnRbXSBzb3VyY2VzLAorICAgICAgICBpbnQgc291cmNlc09mZnNldCwKKyAgICAgICAgaW50W10gdHlwZXMsCisgICAgICAgIGludCB0eXBlc09mZnNldCwKKyAgICAgICAgaW50W10gaWRzLAorICAgICAgICBpbnQgaWRzT2Zmc2V0LAorICAgICAgICBpbnRbXSBzZXZlcml0aWVzLAorICAgICAgICBpbnQgc2V2ZXJpdGllc09mZnNldCwKKyAgICAgICAgaW50W10gbGVuZ3RocywKKyAgICAgICAgaW50IGxlbmd0aHNPZmZzZXQsCisgICAgICAgIGJ5dGVbXSBtZXNzYWdlTG9nLAorICAgICAgICBpbnQgbWVzc2FnZUxvZ09mZnNldCk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMdWludCBnbEdldERlYnVnTWVzc2FnZUxvZyAoIEdMdWludCBjb3VudCwgR0xzaXplaSBidWZTaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNvdXJjZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciB0eXBlcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIGlkcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNldmVyaXRpZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciBsZW5ndGhzLAorICAgICAgICBqYXZhLm5pby5CeXRlQnVmZmVyIG1lc3NhZ2VMb2cpOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50W10gc291cmNlcywKKyAgICAgICAgaW50IHNvdXJjZXNPZmZzZXQsCisgICAgICAgIGludFtdIHR5cGVzLAorICAgICAgICBpbnQgdHlwZXNPZmZzZXQsCisgICAgICAgIGludFtdIGlkcywKKyAgICAgICAgaW50IGlkc09mZnNldCwKKyAgICAgICAgaW50W10gc2V2ZXJpdGllcywKKyAgICAgICAgaW50IHNldmVyaXRpZXNPZmZzZXQpOworCisgICAgLy8gQyBmdW5jdGlvbiBHTHVpbnQgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKCBHTHVpbnQgY291bnQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VMb2cgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nW10gZ2xHZXREZWJ1Z01lc3NhZ2VMb2coCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNvdXJjZXMsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciB0eXBlcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIGlkcywKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHNldmVyaXRpZXMpOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsUHVzaERlYnVnR3JvdXAgKCBHTGVudW0gc291cmNlLCBHTHVpbnQgaWQsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKm1lc3NhZ2UgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFB1c2hEZWJ1Z0dyb3VwKAorICAgICAgICBpbnQgc291cmNlLAorICAgICAgICBpbnQgaWQsCisgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgIFN0cmluZyBtZXNzYWdlCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFBvcERlYnVnR3JvdXAgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQb3BEZWJ1Z0dyb3VwKAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbE9iamVjdExhYmVsKAorICAgICAgICBpbnQgaWRlbnRpZmllciwKKyAgICAgICAgaW50IG5hbWUsCisgICAgICAgIGludCBsZW5ndGgsCisgICAgICAgIFN0cmluZyBsYWJlbAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRPYmplY3RMYWJlbCAoIEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nIGdsR2V0T2JqZWN0TGFiZWwoaW50IGlkZW50aWZpZXIsIGludCBuYW1lKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbE9iamVjdFB0ckxhYmVsICggY29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsT2JqZWN0UHRyTGFiZWwobG9uZyBwdHIsIFN0cmluZyBsYWJlbCk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRPYmplY3RQdHJMYWJlbCAoIGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgU3RyaW5nIGdsR2V0T2JqZWN0UHRyTGFiZWwobG9uZyBwdHIpOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsR2V0UG9pbnRlcnYgKCBHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgbG9uZyBnbEdldFBvaW50ZXJ2KAorICAgICAgICBpbnQgcG5hbWUKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRW5hYmxlaSAoIEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRW5hYmxlaSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGluZGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERpc2FibGVpICggR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEaXNhYmxlaSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGluZGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRXF1YXRpb25pICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGUgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEJsZW5kRXF1YXRpb25pKAorICAgICAgICBpbnQgYnVmLAorICAgICAgICBpbnQgbW9kZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGVpICggR0x1aW50IGJ1ZiwgR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZWkoCisgICAgICAgIGludCBidWYsCisgICAgICAgIGludCBtb2RlUkdCLAorICAgICAgICBpbnQgbW9kZUFscGhhCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRnVuY2kgKCBHTHVpbnQgYnVmLCBHTGVudW0gc3JjLCBHTGVudW0gZHN0ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEZ1bmNpKAorICAgICAgICBpbnQgYnVmLAorICAgICAgICBpbnQgc3JjLAorICAgICAgICBpbnQgZHN0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEJsZW5kRnVuY1NlcGFyYXRlaSAoIEdMdWludCBidWYsIEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xCbGVuZEZ1bmNTZXBhcmF0ZWkoCisgICAgICAgIGludCBidWYsCisgICAgICAgIGludCBzcmNSR0IsCisgICAgICAgIGludCBkc3RSR0IsCisgICAgICAgIGludCBzcmNBbHBoYSwKKyAgICAgICAgaW50IGRzdEFscGhhCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbENvbG9yTWFza2kgKCBHTHVpbnQgaW5kZXgsIEdMYm9vbGVhbiByLCBHTGJvb2xlYW4gZywgR0xib29sZWFuIGIsIEdMYm9vbGVhbiBhICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xDb2xvck1hc2tpKAorICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgIGJvb2xlYW4gciwKKyAgICAgICAgYm9vbGVhbiBnLAorICAgICAgICBib29sZWFuIGIsCisgICAgICAgIGJvb2xlYW4gYQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMYm9vbGVhbiBnbElzRW5hYmxlZGkgKCBHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBnbElzRW5hYmxlZGkoCisgICAgICAgIGludCB0YXJnZXQsCisgICAgICAgIGludCBpbmRleAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTGludCBiYXNldmVydGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEcmF3RWxlbWVudHNCYXNlVmVydGV4KAorICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgaW50IGNvdW50LAorICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgamF2YS5uaW8uQnVmZmVyIGluZGljZXMsCisgICAgICAgIGludCBiYXNldmVydGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERyYXdSYW5nZUVsZW1lbnRzQmFzZVZlcnRleCAoIEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBlbmQsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTGludCBiYXNldmVydGV4ICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xEcmF3UmFuZ2VFbGVtZW50c0Jhc2VWZXJ0ZXgoCisgICAgICAgIGludCBtb2RlLAorICAgICAgICBpbnQgc3RhcnQsCisgICAgICAgIGludCBlbmQsCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGphdmEubmlvLkJ1ZmZlciBpbmRpY2VzLAorICAgICAgICBpbnQgYmFzZXZlcnRleAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRCYXNlVmVydGV4ICggR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQsIEdMaW50IGJhc2V2ZXJ0ZXggKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXgoCisgICAgICAgIGludCBtb2RlLAorICAgICAgICBpbnQgY291bnQsCisgICAgICAgIGludCB0eXBlLAorICAgICAgICBqYXZhLm5pby5CdWZmZXIgaW5kaWNlcywKKyAgICAgICAgaW50IGluc3RhbmNlQ291bnQsCisgICAgICAgIGludCBiYXNldmVydGV4CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbERyYXdFbGVtZW50c0luc3RhbmNlZEJhc2VWZXJ0ZXggKCBHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCwgR0xpbnQgYmFzZXZlcnRleCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQmFzZVZlcnRleCgKKyAgICAgICAgaW50IG1vZGUsCisgICAgICAgIGludCBjb3VudCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBpbmRpY2VzT2Zmc2V0LAorICAgICAgICBpbnQgaW5zdGFuY2VDb3VudCwKKyAgICAgICAgaW50IGJhc2V2ZXJ0ZXgKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsRnJhbWVidWZmZXJUZXh0dXJlKAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgYXR0YWNobWVudCwKKyAgICAgICAgaW50IHRleHR1cmUsCisgICAgICAgIGludCBsZXZlbAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCAoIEdMZmxvYXQgbWluWCwgR0xmbG9hdCBtaW5ZLCBHTGZsb2F0IG1pblosIEdMZmxvYXQgbWluVywgR0xmbG9hdCBtYXhYLCBHTGZsb2F0IG1heFksIEdMZmxvYXQgbWF4WiwgR0xmbG9hdCBtYXhXICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQcmltaXRpdmVCb3VuZGluZ0JveCgKKyAgICAgICAgZmxvYXQgbWluWCwKKyAgICAgICAgZmxvYXQgbWluWSwKKyAgICAgICAgZmxvYXQgbWluWiwKKyAgICAgICAgZmxvYXQgbWluVywKKyAgICAgICAgZmxvYXQgbWF4WCwKKyAgICAgICAgZmxvYXQgbWF4WSwKKyAgICAgICAgZmxvYXQgbWF4WiwKKyAgICAgICAgZmxvYXQgbWF4VworICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIEdMZW51bSBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMgKCB2b2lkICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGludCBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXMoCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFJlYWRuUGl4ZWxzICggR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIGJ1ZlNpemUsIHZvaWQgKmRhdGEgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFJlYWRuUGl4ZWxzKAorICAgICAgICBpbnQgeCwKKyAgICAgICAgaW50IHksCisgICAgICAgIGludCB3aWR0aCwKKyAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgaW50IGZvcm1hdCwKKyAgICAgICAgaW50IHR5cGUsCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5CdWZmZXIgZGF0YQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm1mdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGZsb2F0W10gcGFyYW1zLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtZnYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRuVW5pZm9ybWZ2KAorICAgICAgICBpbnQgcHJvZ3JhbSwKKyAgICAgICAgaW50IGxvY2F0aW9uLAorICAgICAgICBpbnQgYnVmU2l6ZSwKKyAgICAgICAgamF2YS5uaW8uRmxvYXRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtaXYgKCBHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm1pdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldG5Vbmlmb3JtaXYoCisgICAgICAgIGludCBwcm9ncmFtLAorICAgICAgICBpbnQgbG9jYXRpb24sCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldG5Vbmlmb3JtdWl2ICggR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGJ1ZlNpemUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdigKKyAgICAgICAgaW50IHByb2dyYW0sCisgICAgICAgIGludCBsb2NhdGlvbiwKKyAgICAgICAgaW50IGJ1ZlNpemUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRuVW5pZm9ybXVpdiAoIEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xzaXplaSBidWZTaXplLCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0blVuaWZvcm11aXYoCisgICAgICAgIGludCBwcm9ncmFtLAorICAgICAgICBpbnQgbG9jYXRpb24sCisgICAgICAgIGludCBidWZTaXplLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbE1pblNhbXBsZVNoYWRpbmcgKCBHTGZsb2F0IHZhbHVlICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xNaW5TYW1wbGVTaGFkaW5nKAorICAgICAgICBmbG9hdCB2YWx1ZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkgKCBHTGVudW0gcG5hbWUsIEdMaW50IHZhbHVlICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xQYXRjaFBhcmFtZXRlcmkoCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgaW50IHZhbHVlCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleFBhcmFtZXRlcklpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4UGFyYW1ldGVySWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFRleFBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhQYXJhbWV0ZXJJdWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4UGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdiAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJaXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFRleFBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFRleFBhcmFtZXRlckl1aXYgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRUZXhQYXJhbWV0ZXJJdWl2ICggR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0VGV4UGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYgKCBHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGphdmEubmlvLkludEJ1ZmZlciBwYXJhbQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBpbnRbXSBwYXJhbSwKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMdWludCAqcGFyYW0gKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW0KKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJaXYoCisgICAgICAgIGludCBzYW1wbGVyLAorICAgICAgICBpbnQgcG5hbWUsCisgICAgICAgIGludFtdIHBhcmFtcywKKyAgICAgICAgaW50IG9mZnNldAorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsR2V0U2FtcGxlclBhcmFtZXRlcklpdigKKyAgICAgICAgaW50IHNhbXBsZXIsCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgamF2YS5uaW8uSW50QnVmZmVyIHBhcmFtcworICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdiAoIEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMdWludCAqcGFyYW1zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xHZXRTYW1wbGVyUGFyYW1ldGVySXVpdigKKyAgICAgICAgaW50IHNhbXBsZXIsCisgICAgICAgIGludCBwbmFtZSwKKyAgICAgICAgaW50W10gcGFyYW1zLAorICAgICAgICBpbnQgb2Zmc2V0CisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2ICggR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0x1aW50ICpwYXJhbXMgKQorCisgICAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJJdWl2KAorICAgICAgICBpbnQgc2FtcGxlciwKKyAgICAgICAgaW50IHBuYW1lLAorICAgICAgICBqYXZhLm5pby5JbnRCdWZmZXIgcGFyYW1zCisgICAgKTsKKworICAgIC8vIEMgZnVuY3Rpb24gdm9pZCBnbFRleEJ1ZmZlciAoIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0x1aW50IGJ1ZmZlciApCisKKyAgICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGdsVGV4QnVmZmVyKAorICAgICAgICBpbnQgdGFyZ2V0LAorICAgICAgICBpbnQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgIGludCBidWZmZXIKKyAgICApOworCisgICAgLy8gQyBmdW5jdGlvbiB2b2lkIGdsVGV4QnVmZmVyUmFuZ2UgKCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhCdWZmZXJSYW5nZSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IGludGVybmFsZm9ybWF0LAorICAgICAgICBpbnQgYnVmZmVyLAorICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICBpbnQgc2l6ZQorICAgICk7CisKKyAgICAvLyBDIGZ1bmN0aW9uIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xib29sZWFuIGZpeGVkc2FtcGxlbG9jYXRpb25zICkKKworICAgIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgZ2xUZXhTdG9yYWdlM0RNdWx0aXNhbXBsZSgKKyAgICAgICAgaW50IHRhcmdldCwKKyAgICAgICAgaW50IHNhbXBsZXMsCisgICAgICAgIGludCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgaW50IHdpZHRoLAorICAgICAgICBpbnQgaGVpZ2h0LAorICAgICAgICBpbnQgZGVwdGgsCisgICAgICAgIGJvb2xlYW4gZml4ZWRzYW1wbGVsb2NhdGlvbnMKKyAgICApOworCit9CmRpZmYgLS1naXQgYS9vcGVuZ2wvamF2YS9hbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3LmphdmEgYi9vcGVuZ2wvamF2YS9hbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3LmphdmEKaW5kZXggMzU5YTdhOTdhLi45YzAxZjRmIDEwMDY0NAotLS0gYS9vcGVuZ2wvamF2YS9hbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3LmphdmEKKysrIGIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldy5qYXZhCkBAIC0xNjEsNyArMTYxLDcgQEAKICAqIDwvcHJlPgogICoKICAqLwotcHVibGljIGNsYXNzIEdMU3VyZmFjZVZpZXcgZXh0ZW5kcyBTdXJmYWNlVmlldyBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgeworcHVibGljIGNsYXNzIEdMU3VyZmFjZVZpZXcgZXh0ZW5kcyBTdXJmYWNlVmlldyBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2syIHsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkdMU3VyZmFjZVZpZXciOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gTE9HX0FUVEFDSF9ERVRBQ0ggPSBmYWxzZTsKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIExPR19USFJFQURTID0gZmFsc2U7CkBAIC01NDIsNiArNTQyLDE2IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgcGFydCBvZiB0aGUgU3VyZmFjZUhvbGRlci5DYWxsYmFjayBpbnRlcmZhY2UsIGFuZCBpcworICAgICAqIG5vdCBub3JtYWxseSBjYWxsZWQgb3Igc3ViY2xhc3NlZCBieSBjbGllbnRzIG9mIEdMU3VyZmFjZVZpZXcuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3VyZmFjZVJlZHJhd05lZWRlZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgeworICAgICAgICBtR0xUaHJlYWQucmVxdWVzdFJlbmRlckFuZFdhaXQoKTsKKyAgICB9CisKKworICAgIC8qKgogICAgICAqIEluZm9ybSB0aGUgdmlldyB0aGF0IHRoZSBhY3Rpdml0eSBpcyBwYXVzZWQuIFRoZSBvd25lciBvZiB0aGlzIHZpZXcgbXVzdAogICAgICAqIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiB0aGUgYWN0aXZpdHkgaXMgcGF1c2VkLiBDYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwKICAgICAgKiBwYXVzZSB0aGUgcmVuZGVyaW5nIHRocmVhZC4KQEAgLTEyMjYsNiArMTIzNiw3IEBACiAgICAgICAgICAgICBtSGVpZ2h0ID0gMDsKICAgICAgICAgICAgIG1SZXF1ZXN0UmVuZGVyID0gdHJ1ZTsKICAgICAgICAgICAgIG1SZW5kZXJNb2RlID0gUkVOREVSTU9ERV9DT05USU5VT1VTTFk7CisgICAgICAgICAgICBtV2FudFJlbmRlck5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgbUdMU3VyZmFjZVZpZXdXZWFrUmVmID0gZ2xTdXJmYWNlVmlld1dlYWtSZWY7CiAgICAgICAgIH0KIApAQCAtMTI3MSw2ICsxMjgyLDggQEAKICAgICAgICAgICAgIG1FZ2xIZWxwZXIgPSBuZXcgRWdsSGVscGVyKG1HTFN1cmZhY2VWaWV3V2Vha1JlZik7CiAgICAgICAgICAgICBtSGF2ZUVnbENvbnRleHQgPSBmYWxzZTsKICAgICAgICAgICAgIG1IYXZlRWdsU3VyZmFjZSA9IGZhbHNlOworICAgICAgICAgICAgbVdhbnRSZW5kZXJOb3RpZmljYXRpb24gPSBmYWxzZTsKKwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBHTDEwIGdsID0gbnVsbDsKICAgICAgICAgICAgICAgICBib29sZWFuIGNyZWF0ZUVnbENvbnRleHQgPSBmYWxzZTsKQEAgLTEyNzgsNyArMTI5MSw2IEBACiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjcmVhdGVHbEludGVyZmFjZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gbG9zdEVnbENvbnRleHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29sZWFuIHNpemVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiB3YW50UmVuZGVyTm90aWZpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBkb1JlbmRlck5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2xlYW4gYXNrZWRUb1JlbGVhc2VFZ2xDb250ZXh0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaW50IHcgPSAwOwpAQCAtMTM4Myw3ICsxMzk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19TVVJGQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuaSgiR0xUaHJlYWQiLCAic2VuZGluZyByZW5kZXIgbm90aWZpY2F0aW9uIHRpZD0iICsgZ2V0SWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudFJlbmRlck5vdGlmaWNhdGlvbiA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2FudFJlbmRlck5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlbmRlck5vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyQ29tcGxldGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzR0xUaHJlYWRNYW5hZ2VyLm5vdGlmeUFsbCgpOwpAQCAtMTQyMiw3ICsxNDM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IG1XaWR0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gbUhlaWdodDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YW50UmVuZGVyTm90aWZpY2F0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtV2FudFJlbmRlck5vdGlmaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19TVVJGQUNFKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pKCJHTFRocmVhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdGljaW5nIHRoYXQgd2Ugd2FudCByZW5kZXIgbm90aWZpY2F0aW9uIHRpZD0iCkBAIC0xNTYyLDcgKzE1NzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdhbnRSZW5kZXJOb3RpZmljYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1XYW50UmVuZGVyTm90aWZpY2F0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb1JlbmRlck5vdGlmaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xNjExLDYgKzE2MjMsMjMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RSZW5kZXJBbmRXYWl0KCkgeworICAgICAgICAgICAgc3luY2hyb25pemVkKHNHTFRocmVhZE1hbmFnZXIpIHsKKyAgICAgICAgICAgICAgICBtV2FudFJlbmRlck5vdGlmaWNhdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgbVJlcXVlc3RSZW5kZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIG1SZW5kZXJDb21wbGV0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHNHTFRocmVhZE1hbmFnZXIubm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCFtRXhpdGVkICYmICFtUGF1c2VkICYmIG1SZW5kZXJDb21wbGV0ZSA9PSBmYWxzZSkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc0dMVGhyZWFkTWFuYWdlci53YWl0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVwdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ3JlYXRlZCgpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZChzR0xUaHJlYWRNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgICAgaWYgKExPR19USFJFQURTKSB7CkBAIC0xNzY2LDYgKzE3OTUsNyBAQAogICAgICAgICBwcml2YXRlIGludCBtSGVpZ2h0OwogICAgICAgICBwcml2YXRlIGludCBtUmVuZGVyTW9kZTsKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1SZXF1ZXN0UmVuZGVyOworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVdhbnRSZW5kZXJOb3RpZmljYXRpb247CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtUmVuZGVyQ29tcGxldGU7CiAgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PFJ1bm5hYmxlPiBtRXZlbnRRdWV1ZSA9IG5ldyBBcnJheUxpc3Q8UnVubmFibGU+KCk7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtU2l6ZUNoYW5nZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2ZmY0OQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiJSZXplcnZuYSBrb3BpamUgc3ZpaCBwb2RhdGFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90aXRsZSIgbXNnaWQ9IjU0NjkzNjU4MDk1Njc0ODY2MDIiPiJQb3RwdW5vIHZyYcSHYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4iWmFodGV2YW5hIGplIHBvdHB1bmEgcmV6ZXJ2bmEga29waWphIHN2aWggcG9kYXRha2EgbmEgcG92ZXphbmkgc3RvbmkgcmHEjXVuYXIuIERhIGxpIMW+ZWxpdGUgZGEgZG96dm9saXRlIHRvP1xuXG5Ba28gbmlzdGUgbGnEjW5vIHphaHRldmFsaSByZXplcnZudSBrb3BpanUsIG5lIGRvenZvbGphdmFqdGUgbmFzdGF2YWsgcmFkbmplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI0MjE3MjI4NzQ3NzY5NjQ0MDY4Ij4iTmFwcmF2aSByZXplcnZudSBrb3BpanUgbW9qaWggcG9kYXRha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4iTmUgcHJhdmkgcmV6ZXJ2bmUga29waWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4iWmFodGV2YW5vIGplIHBvdHB1bm8gdnJhxIdhbmplIHN2aWggcG9kYXRha2Egc2EgcG92ZXphbm9nIHN0b25vZyByYcSNdW5hcmEuIERhIGxpIMW+ZWxpdGUgZGEgZG96dm9saXRlIHRvP1xuXG5Ba28gbmlzdGUgbGnEjW5vIHphaHRldmFsaSB2cmHEh2FuamUsIG5lIGRvenZvbGphdmFqdGUgbmFzdGF2YWsgcmFkbmplLiBUaW1lIMSHZXRlIHphbWVuaXRpIHN2ZSBwb2RhdGtlIGtvamkgc3UgdHJlbnV0bm8gbmEgdXJlxJFhanUhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iVnJhdGkgbW9qZSBwb2RhdGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVueV9yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjE3MjQzNjczMzQ0NTMxMDQzNzgiPiJOZSB2cmHEh2FqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IlVuZXNpdGUgdHJlbnV0bnUgbG96aW5rdSByZXplcnZuZSBrb3BpamUgdSBuYXN0YXZrdToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZpY2VfZW5jcnlwdGlvbl9yZXN0b3JlX3RleHQiIG1zZ2lkPSIxNTcwODY0OTE2ODU1MjA4OTkyIj4iVW5lc2l0ZSBsb3ppbmt1IHVyZcSRYWphIHphIMWhaWZyb3ZhbmplIHUgbmFzdGF2a3UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4iVW5lc2l0ZSBsb3ppbmt1IHVyZcSRYWphIHphIMWhaWZyb3ZhbmplLiBPdm8gxIdlIHNlIGtvcmlzdGl0aSBpIHphIMWhaWZyb3ZhbmplIHJlemVydm5lIGFyaGl2ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iVW5lc2l0ZSBsb3ppbmt1IGtvanUgxIdldGUga29yaXN0aXRpIHphIMWhaWZyb3ZhbmplIHBvZGF0YWthIHBvdHB1bmUgcmV6ZXJ2bmUga29waWplLiBBa28gdG8gcG9samUgb3N0YXZpdGUgcHJhem5vLCBrb3Jpc3RpxIdlIHNlIHRyZW51dG5hIGxvemlua2EgcmV6ZXJ2bmUga29waWplOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4iQWtvIMW+ZWxpdGUgZGEgxaFpZnJ1amV0ZSBwb2RhdGtlIHBvdHB1bmUgcmV6ZXJ2bmUga29waWplLCB1bmVzaXRlIGxvemlua3UgdSBuYXN0YXZrdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3JlcXVpcmVkIiBtc2dpZD0iNzg4OTY1MjIwMzM3MTY1NDE0OSI+IlBvxaF0byB2YW0gamUgdXJlxJFhaiDFoWlmcm92YW4sIG1vcmF0ZSBkYSDFoWlmcnVqZXRlIHJlemVydm51IGtvcGlqdS4gVW5lc2l0ZSBsb3ppbmt1IHUgbmFzdGF2a3U6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJBa28gc3UgcG9kYWNpIHphIHZyYcSHYW5qZSDFoWlmcm92YW5pLCB1bmVzaXRlIGxvemlua3UgdSBuYXN0YXZrdToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IlBva3JldGFuamUgcHJhdmxqZW5qYSByZXplcnZuZSBrb3BpamUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfZW5kZWQiIG1zZ2lkPSIzODE4MDgwNzY5NTQ4NzI2NDI0Ij4iUmV6ZXJ2bmEga29waWphIGplIG5hcHJhdmxqZW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9zdGFydGVkIiBtc2dpZD0iNzg4MTY3OTIxODk3MTI3NzM4NSI+IlBva3JldGFuamUgdnJhxIdhbmphLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfcmVzdG9yZV9lbmRlZCIgbXNnaWQ9IjE3NjQwNDE2MzkxOTk2OTYxMzIiPiJWcmHEh2FuamUgamUgemF2csWhZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3RfdGltZW91dCIgbXNnaWQ9IjUyNzY1OTg1ODcwODc2MjY4NzciPiJWcmVtZSB6YSByYWRuanUgamUgaXN0ZWtsbyI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IGEyZTI0ZTcuLmUxZjc5N2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTE4LDE5ICsxOCwxOSBAQAogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RpdGxlIiBtc2dpZD0iODI3NTYzNzI0MjA5MzAzMzQ1Ij4iVm9sbHN0w6RuZGlnZSBTaWNoZXJ1bmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4iVm9sbHN0w6RuZGlnZSBXaWVkZXJoZXJzdGVsbHVuZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9jb25maXJtX3RleHQiIG1zZ2lkPSIxODc4MDIxMjgyNzU4ODk2NTkzIj4iRXMgd3VyZGUgZWluZSB2b2xsc3TDpG5kaWdlIFNpY2hlcnVuZyBzw6RtdGxpY2hlciBEYXRlbiBhdWYgZWluZW4gdmVyYnVuZGVuZW4gRGVza3RvcC1Db21wdXRlciBhbmdlZm9yZGVydC4gTcO2Y2h0ZW4gU2llIGRpZXMgenVsYXNzZW4/XG5cbldlbm4gU2llIGRpZSBTaWNoZXJ1bmcgbmljaHQgc2VsYnN0IGFuZ2Vmb3JkZXJ0IGhhYmVuLCBzb2xsdGVuIFNpZSBkZW0gVm9yZ2FuZyBuaWNodCB6dXN0aW1tZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiJFcyB3dXJkZSBlaW5lIHZvbGxzdMOkbmRpZ2UgU2ljaGVydW5nIHPDpG10bGljaGVyIERhdGVuIGF1ZiBlaW5lbiB2ZXJidW5kZW5lbiBEZXNrdG9wLUNvbXB1dGVyIGFuZ2Vmb3JkZXJ0LiBNw7ZjaHRlc3QgZHUgZGllcyB6dWxhc3Nlbj9cblxuV2VubiBkdSBkaWUgU2ljaGVydW5nIG5pY2h0IHNlbGJzdCBhbmdlZm9yZGVydCBoYXN0LCBzb2xsdGVzdCBkdSBkZW0gVm9yZ2FuZyBuaWNodCB6dXN0aW1tZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiJNZWluZSBEYXRlbiBzaWNoZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVueV9iYWNrdXBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjAwOTExOTExNTU4MTA5NzcwOCI+Ik5pY2h0IHNpY2hlcm4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiJFcyB3dXJkZSBlaW5lIHZvbGxzdMOkbmRpZ2UgV2llZGVyaGVyc3RlbGx1bmcgYWxsZXIgRGF0ZW4gdm9uIGVpbmVtIHZlcmJ1bmRlbmVuIERlc2t0b3AtQ29tcHV0ZXIgYW5nZWZvcmRlcnQuIE3DtmNodGVuIFNpZSBkaWVzIHp1bGFzc2VuP1xuXG5XZW5uIFNpZSBkaWUgV2llZGVyaGVyc3RlbGx1bmcgbmljaHQgc2VsYnN0IGFuZ2Vmb3JkZXJ0IGhhYmVuLCBzb2xsdGVuIFNpZSBkZW0gVm9yZ2FuZyBuaWNodCB6dXN0aW1tZW4uIERhZHVyY2ggd2VyZGVuIGFsbGUgenVyemVpdCBhdWYgZGVtIEdlcsOkdCBiZWZpbmRsaWNoZW4gRGF0ZW4gZXJzZXR6dCEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGV4dCIgbXNnaWQ9Ijc0OTk4NjY3MjgwMzA0NjE3NzYiPiJFcyB3dXJkZSBlaW5lIHZvbGxzdMOkbmRpZ2UgV2llZGVyaGVyc3RlbGx1bmcgYWxsZXIgRGF0ZW4gdm9uIGVpbmVtIHZlcmJ1bmRlbmVuIERlc2t0b3AtQ29tcHV0ZXIgYW5nZWZvcmRlcnQuIE3DtmNodGVzdCBkdSBkaWVzIHp1bGFzc2VuP1xuXG5XZW5uIGR1IGRpZSBXaWVkZXJoZXJzdGVsbHVuZyBuaWNodCBzZWxic3QgYW5nZWZvcmRlcnQgaGFzdCwgc29sbHRlc3QgZHUgZGVtIFZvcmdhbmcgbmljaHQgenVzdGltbWVuLiBEYWR1cmNoIHdlcmRlbiBhbGxlIGRlcnplaXQgYXVmIGRlbSBHZXLDpHQgYmVmaW5kbGljaGVuIERhdGVuIGVyc2V0enQhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIzMDgxMjg2NzUyMjc3MTI3ODI3Ij4iTWVpbmUgRGF0ZW4gd2llZGVyaGVyc3RlbGxlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbnlfcmVzdG9yZV9idXR0b25fbGFiZWwiIG1zZ2lkPSIxNzI0MzY3MzM0NDUzMTA0Mzc4Ij4iTmljaHQgd2llZGVyaGVyc3RlbGxlbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiJHZWJlbiBTaWUgSWhyIGFrdHVlbGxlcyBTaWNoZXJ1bmdzcGFzc3dvcnQgdW50ZW4gZWluOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiJHZWJlbiBTaWUgSWhyIFBhc3N3b3J0IHp1ciBHZXLDpHRldmVyc2NobMO8c3NlbHVuZyB1bnRlbiBlaW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGV2aWNlX2VuY3J5cHRpb25fYmFja3VwX3RleHQiIG1zZ2lkPSI1ODY2NTkwNzYyNjcyODQ0NjY0Ij4iR2ViZW4gU2llIElociBQYXNzd29ydCB6dXIgR2Vyw6R0ZXZlcnNjaGzDvHNzZWx1bmcgdW50ZW4gZWluLiBEYW1pdCB3aXJkIGF1Y2ggZGFzIFNpY2hlcnVuZ3NhcmNoaXYgdmVyc2NobMO8c3NlbHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF90ZXh0IiBtc2dpZD0iNDk4MTU4NTcxNDc5NTIzMzA5OSI+IkdlYmVuIFNpZSBlaW4gUGFzc3dvcnQgZsO8ciBkaWUgVmVyc2NobMO8c3NlbHVuZyBkZXIgdm9sbHN0w6RuZGlnZW4gU2ljaGVydW5nc2RhdGVuIGVpbi4gV2VubiBTaWUgZGllc2VzIEZlbGQgbGVlciBsYXNzZW4sIHdpcmQgSWhyIGFrdHVlbGxlcyBTaWNoZXJ1bmdzcGFzc3dvcnQgdmVyd2VuZGV0OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImJhY2t1cF9lbmNfcGFzc3dvcmRfb3B0aW9uYWwiIG1zZ2lkPSIxMzUwMTM3MzQ1OTA3NTc5MzA2Ij4iV2VubiBTaWUgZGllIGdlc2FtdGVuIFNpY2hlcnVuZ3NkYXRlbiB2ZXJzY2hsw7xzc2VsbiBtw7ZjaHRlbiwgZ2ViZW4gU2llIHVudGVuIGVpbiBQYXNzd29ydCBlaW46Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY3VycmVudF9wYXNzd29yZF90ZXh0IiBtc2dpZD0iODI2ODE4OTU1NTU3ODI5ODA2NyI+IkdpYiBkZWluIGFrdHVlbGxlcyBTaWNoZXJ1bmdzcGFzc3dvcnQgdW50ZW4gZWluOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX3Jlc3RvcmVfdGV4dCIgbXNnaWQ9IjE1NzA4NjQ5MTY4NTUyMDg5OTIiPiJHaWIgZGVpbiBQYXNzd29ydCB6dXIgR2Vyw6R0ZXZlcnNjaGzDvHNzZWx1bmcgdW50ZW4gZWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9lbmNyeXB0aW9uX2JhY2t1cF90ZXh0IiBtc2dpZD0iNTg2NjU5MDc2MjY3Mjg0NDY2NCI+IkdpYiBkZWluIFBhc3N3b3J0IHp1ciBHZXLDpHRldmVyc2NobMO8c3NlbHVuZyB1bnRlbiBlaW4uIERhbWl0IHdpcmQgYXVjaCBkYXMgU2ljaGVydW5nc2FyY2hpdiB2ZXJzY2hsw7xzc2VsdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI0OTgxNTg1NzE0Nzk1MjMzMDk5Ij4iR2liIGVpbiBQYXNzd29ydCBmw7xyIGRpZSBWZXJzY2hsw7xzc2VsdW5nIGRlciB2b2xsc3TDpG5kaWdlbiBTaWNoZXJ1bmdzZGF0ZW4gZWluLiBXZW5uIGR1IGRpZXNlcyBGZWxkIGxlZXIgbMOkc3N0LCB3aXJkIGRlaW4gYWt0dWVsbGVzIFNpY2hlcnVuZ3NwYXNzd29ydCB2ZXJ3ZW5kZXQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2VuY19wYXNzd29yZF9vcHRpb25hbCIgbXNnaWQ9IjEzNTAxMzczNDU5MDc1NzkzMDYiPiJXZW5uIGR1IGRpZSBnZXNhbXRlbiBTaWNoZXJ1bmdzZGF0ZW4gdmVyc2NobMO8c3NlbG4gbcO2Y2h0ZXN0LCBnaWIgdW50ZW4gZWluIFBhc3N3b3J0IGVpbjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYWNrdXBfZW5jX3Bhc3N3b3JkX3JlcXVpcmVkIiBtc2dpZD0iNzg4OTY1MjIwMzM3MTY1NDE0OSI+IkRhIElociBHZXLDpHQgdmVyc2NobMO8c3NlbHQgaXN0LCBtdXNzIGF1Y2ggZGllIFNpY2hlcnVuZyB2ZXJzY2hsw7xzc2VsdCB3ZXJkZW4uIEdlYmVuIFNpZSB1bnRlbiBlaW4gUGFzc3dvcnQgZWluOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfZW5jX3Bhc3N3b3JkX3RleHQiIG1zZ2lkPSI2MTQwODk4NTI1NTgwNzEwODIzIj4iR2ViZW4gU2llIGRhcyBQYXNzd29ydCB1bnRlbiBlaW4sIHdlbm4gZGllIERhdGVuIGbDvHIgZGllIFdpZWRlcmhlcnN0ZWxsdW5nIHZlcnNjaGzDvHNzZWx0IHNpbmQ6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9lbmNfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjYxNDA4OTg1MjU1ODA3MTA4MjMiPiJHaWIgZGFzIFBhc3N3b3J0IHVudGVuIGVpbiwgd2VubiBkaWUgRGF0ZW4gZsO8ciBkaWUgV2llZGVyaGVyc3RlbGx1bmcgdmVyc2NobMO8c3NlbHQgc2luZDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9iYWNrdXBfc3RhcnRlZCIgbXNnaWQ9IjU1MDM1NDI4MTQ1Mjc1NjEyMSI+IlNpY2hlcnVuZyB3aXJkIGdlc3RhcnRldC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X2JhY2t1cF9lbmRlZCIgbXNnaWQ9IjM4MTgwODA3Njk1NDg3MjY0MjQiPiJTaWNoZXJ1bmcgYWJnZXNjaGxvc3NlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRvYXN0X3Jlc3RvcmVfc3RhcnRlZCIgbXNnaWQ9Ijc4ODE2NzkyMTg5NzEyNzczODUiPiJXaWVkZXJoZXJzdGVsbHVuZyB3aXJkIGdlc3RhcnRldC4uLiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9CYWNrdXBSZXN0b3JlQ29uZmlybWF0aW9uL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IGFjMjBhZWQuLjIzNjg4YWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0JhY2t1cFJlc3RvcmVDb25maXJtYXRpb24vcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvQmFja3VwUmVzdG9yZUNvbmZpcm1hdGlvbi9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMTgsMTAgKzE4LDEwIEBACiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI4Mjc1NjM3MjQyMDkzMDMzNDUiPiLlrozlhajlpIfku70iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0b3JlX2NvbmZpcm1fdGl0bGUiIG1zZ2lkPSI1NDY5MzY1ODA5NTY3NDg2NjAyIj4i5a6M5YWo6L+Y5Y6fIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLns7vnu5/or7fmsYLlsIbmiYDmnInmlbDmja7lrozmlbTlpIfku73oh7Plt7Lov57mjqXnmoTmoYzpnaLorqHnrpfmnLrjgILlhYHorrjmraTmk43kvZzlkJfvvJ9cblxu5aaC5p6c5oKo5pys5Lq65pyq6KaB5rGC5aSH5Lu977yM6K+36Zi75q2i6K+l5pON5L2c44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmFja3VwX2NvbmZpcm1fdGV4dCIgbXNnaWQ9IjE4NzgwMjEyODI3NTg4OTY1OTMiPiLns7vnu5/or7fmsYLlsIbmiYDmnInmlbDmja7lrozmlbTlpIfku73oh7Plt7Lov57mjqXnmoTmoYzpnaLorr7lpIfjgILlhYHorrjmraTmk43kvZzlkJfvvJ9cblxu5aaC5p6c5oKo5pys5Lq65pyq6KaB5rGC5aSH5Lu977yM6K+36Zi75q2i6K+l5pON5L2c44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfYmFja3VwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjQyMTcyMjg3NDc3Njk2NDQwNjgiPiLlpIfku73miJHnmoTmlbDmja4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW55X2JhY2t1cF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2MDA5MTE5MTE1NTgxMDk3NzA4Ij4i5LiN5aSH5Lu9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVzdG9yZV9jb25maXJtX3RleHQiIG1zZ2lkPSI3NDk5ODY2NzI4MDMwNDYxNzc2Ij4i57O757uf6K+35rGC5LuO6L+e5o6l55qE5qGM6Z2i6K6h566X5py65a6M5pW06L+Y5Y6f5omA5pyJ5pWw5o2u44CC5YWB6K645q2k5pON5L2c5ZCX77yfXG5cbuWmguaenOaCqOacrOS6uuacquimgeaxgui/mOWOn++8jOivt+mYu+atouivpeaTjeS9nOOAguivpeaTjeS9nOS8muimhuebluiuvuWkh+S4iuW9k+WJjeeahOaJgOacieaVsOaNru+8gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlc3RvcmVfY29uZmlybV90ZXh0IiBtc2dpZD0iNzQ5OTg2NjcyODAzMDQ2MTc3NiI+Iuezu+e7n+ivt+axguS7jui/nuaOpeeahOahjOmdouiuvuWkh+WujOaVtOi/mOWOn+aJgOacieaVsOaNruOAguWFgeiuuOatpOaTjeS9nOWQl++8n1xuXG7lpoLmnpzmgqjmnKzkurrmnKropoHmsYLov5jljp/vvIzor7fpmLvmraLor6Xmk43kvZzjgILor6Xmk43kvZzkvJropobnm5borr7lpIfkuIrlvZPliY3nmoTmiYDmnInmlbDmja7vvIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGxvd19yZXN0b3JlX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjMwODEyODY3NTIyNzcxMjc4MjciPiLmgaLlpI3miJHnmoTmlbDmja4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW55X3Jlc3RvcmVfYnV0dG9uX2xhYmVsIiBtc2dpZD0iMTcyNDM2NzMzNDQ1MzEwNDM3OCI+IuS4jeaBouWkjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFzc3dvcmRfdGV4dCIgbXNnaWQ9IjgyNjgxODk1NTU1NzgyOTgwNjciPiLor7flnKjkuIvmlrnovpPlhaXmgqjnmoTlvZPliY3lpIfku73lr4bnoIHvvJoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9DYXB0aXZlUG9ydGFsTG9naW4vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9DYXB0aXZlUG9ydGFsTG9naW4vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwNWE5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9DYXB0aXZlUG9ydGFsTG9naW4vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiBtc2dpZD0iNTkzNDcwOTc3MDkyNDE4NTc1MiI+IkNhcHRpdmVQb3J0YWxMb2dpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl91c2VfbmV0d29yayIgbXNnaWQ9IjYwNzYxODQ3Mjc0NDg0NjYwMzAiPiJLb3Jpc3RpIG92dSBtcmXFvnUgdGFrdnUga2FrdmEgamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fZG9fbm90X3VzZV9uZXR3b3JrIiBtc2dpZD0iNDU3NzM2NjUzNjk1NjUxNjY4MyI+Ik5lIGtvcmlzdGkgb3Z1IG1yZcW+dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9iYXJfbGFiZWwiIG1zZ2lkPSI5MTcyMzU2MzU0MTU5NjY2MjAiPiJQcmlqYXZpIG1lIG5hIG1yZcW+dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9lcnJvcl93YXJuaW5nIiBtc2dpZD0iNjY1MzE4ODg4MTQxODYzODg3MiI+Ik1yZcW+YSBrb2pvaiBwb2t1xaFhdmF0ZSBkYSBzZSBwcmlkcnXFvml0ZSBpbWEgYmV6YmVkbm9zbmloIHByb2JsZW1hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNzbF9lcnJvcl9leGFtcGxlIiBtc2dpZD0iNjQ3ODk4NTM0NjI0MDc4OTAwIj4iTmEgcHJpbWVyLCBzdHJhbmljYSB6YSBwcmlqYXZsaml2YW5qZSBtb8W+ZGEgbmUgcHJpcGFkYSBwcmlrYXphbm9qIG9yZ2FuaXphY2lqaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfZXJyb3JfY29udGludWUiIG1zZ2lkPSI2NDkyNzE4MjQ0OTIzOTM3MTEwIj4iSXBhayBuYXN0YXZpIHByZWtvIHByZWdsZWRhxI1hIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9DYXB0aXZlUG9ydGFsTG9naW4vc3JjL2NvbS9hbmRyb2lkL2NhcHRpdmVwb3J0YWxsb2dpbi9DYXB0aXZlUG9ydGFsTG9naW5BY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvQ2FwdGl2ZVBvcnRhbExvZ2luL3NyYy9jb20vYW5kcm9pZC9jYXB0aXZlcG9ydGFsbG9naW4vQ2FwdGl2ZVBvcnRhbExvZ2luQWN0aXZpdHkuamF2YQppbmRleCBhYmI0NjRlLi42ZmI4YjUxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9DYXB0aXZlUG9ydGFsTG9naW4vc3JjL2NvbS9hbmRyb2lkL2NhcHRpdmVwb3J0YWxsb2dpbi9DYXB0aXZlUG9ydGFsTG9naW5BY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL0NhcHRpdmVQb3J0YWxMb2dpbi9zcmMvY29tL2FuZHJvaWQvY2FwdGl2ZXBvcnRhbGxvZ2luL0NhcHRpdmVQb3J0YWxMb2dpbkFjdGl2aXR5LmphdmEKQEAgLTU2LDcgKzU2LDYgQEAKIAogcHVibGljIGNsYXNzIENhcHRpdmVQb3J0YWxMb2dpbkFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FwdGl2ZVBvcnRhbExvZ2luIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TRVJWRVIgPSAiY29ubmVjdGl2aXR5Y2hlY2suZ3N0YXRpYy5jb20iOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTT0NLRVRfVElNRU9VVF9NUyA9IDEwMDAwOwogCiAgICAgcHJpdmF0ZSBlbnVtIFJlc3VsdCB7IERJU01JU1NFRCwgVU5XQU5URUQsIFdBTlRFRF9BU19JUyB9OwpAQCAtNzIsMTYgKzcxLDE0IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIFN0cmluZyBzZXJ2ZXIgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKGdldENvbnRlbnRSZXNvbHZlcigpLCAiY2FwdGl2ZV9wb3J0YWxfc2VydmVyIik7Ci0gICAgICAgIGlmIChzZXJ2ZXIgPT0gbnVsbCkgc2VydmVyID0gREVGQVVMVF9TRVJWRVI7CiAgICAgICAgIG1DbSA9IENvbm5lY3Rpdml0eU1hbmFnZXIuZnJvbSh0aGlzKTsKICAgICAgICAgU3RyaW5nIHVybCA9IGdldEludGVudCgpLmdldFN0cmluZ0V4dHJhKENvbm5lY3Rpdml0eU1hbmFnZXIuRVhUUkFfQ0FQVElWRV9QT1JUQUxfVVJMKTsKKyAgICAgICAgaWYgKHVybCA9PSBudWxsKSB1cmwgPSBtQ20uZ2V0Q2FwdGl2ZVBvcnRhbFNlcnZlclVybCgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgbVVSTCA9IHVybCAhPSBudWxsID8gbmV3IFVSTCh1cmwpIDogbmV3IFVSTCgiaHR0cCIsIHNlcnZlciwgIi9nZW5lcmF0ZV8yMDQiKTsKKyAgICAgICAgICAgIG1VUkwgPSBuZXcgVVJMKHVybCk7CiAgICAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBTeXN0ZW0gbWlzY29uZmlndXJlZCwgYmFpbCBvdXQgaW4gYSB3YXkgdGhhdCBhdCBsZWFzdCBwcm92aWRlcyBuZXR3b3JrIGFjY2Vzcy4KLSAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgY2FwdGl2ZSBwb3J0YWwgVVJMLCBzZXJ2ZXI9IiArIHNlcnZlcik7CisgICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIGNhcHRpdmUgcG9ydGFsIFVSTCwgdXJsPSIgKyB1cmwpOwogICAgICAgICAgICAgZG9uZShSZXN1bHQuV0FOVEVEX0FTX0lTKTsKICAgICAgICAgfQogICAgICAgICBtTmV0d29yayA9IGdldEludGVudCgpLmdldFBhcmNlbGFibGVFeHRyYShDb25uZWN0aXZpdHlNYW5hZ2VyLkVYVFJBX05FVFdPUkspOwpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9uSG9sZGVyLmFpZGwgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gY29yZS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3ZpZXcvSURyb3BQZXJtaXNzaW9uSG9sZGVyLmFpZGwKY29weSB0byBwYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbAppbmRleCBlNjBhYjBlLi5hMGUxNzM0IDEwMDY0NAotLS0gYS9jb3JlL2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdmlldy9JRHJvcFBlcm1pc3Npb25Ib2xkZXIuYWlkbAorKysgYi9wYWNrYWdlcy9EZWZhdWx0Q29udGFpbmVyU2VydmljZS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMSw1ICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAogLyoKLSoqIENvcHlyaWdodCAyMDE1LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogQ29weXJpZ2h0IDIwMDgsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCiAqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTEzLDE0ICsxNiw5IEBACiAqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICovCisgLS0+CiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldzsKLQotLyoqCi0gKiBJbnRlcmZhY2UgdG8gYWxsb3cgYSBkcm9wIHJlY2VpdmVyIHRvIHJlcXVlc3QgcGVybWlzc2lvbnMgZm9yIFVSSXMgcGFzc2VkIGFsb25nIHdpdGggQ2xpcERhdGEKLSAqIGNvbnRhaW5lZCBpbiBEcmFnRXZlbnQuCi0gKi8KLWludGVyZmFjZSBJRHJvcFBlcm1pc3Npb25Ib2xkZXIgewotICAgIHZvaWQgZ3JhbnQoKTsKLSAgICB2b2lkIHJldm9rZSgpOwotfQorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0ic2VydmljZV9uYW1lIiBtc2dpZD0iNDg0MTQ5MTYzNTA1NTM3OTU1MyI+IlBvbW/Eh25payB6YSBwcmlzdHVwIHBha2V0dSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggOGNjNzlhNGMuLjZiZWVmNDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgICAgIDxhY3Rpdml0eQogICAgICAgICAgICAgYW5kcm9pZDpuYW1lPSIuRG93bmxvYWRzQWN0aXZpdHkiCi0gICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAc3R5bGUvRG9jdW1lbnRzRnVsbFNjcmVlblRoZW1lIgorICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL0RvY3VtZW50c1RoZW1lIgogICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9kb3dubG9hZHNfbGFiZWwiCiAgICAgICAgICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY19kb2NfdGV4dCI+CiAgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KQEAgLTY0LDcgKzY0LDcgQEAKIAogICAgICAgICA8YWN0aXZpdHkKICAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iLkZpbGVzQWN0aXZpdHkiCi0gICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAc3R5bGUvRG9jdW1lbnRzRnVsbFNjcmVlblRoZW1lIgorICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL0RvY3VtZW50c1RoZW1lIgogICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNfZmlsZXNfYXBwIgogICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9maWxlc19sYWJlbCIKICAgICAgICAgICAgIGFuZHJvaWQ6ZG9jdW1lbnRMYXVuY2hNb2RlPSJpbnRvRXhpc3RpbmciPgpAQCAtOTIsNyArOTIsNyBAQAogICAgICAgICA8L3JlY2VpdmVyPgogCiAgICAgICAgIDxzZXJ2aWNlCi0gICAgICAgICAgICBhbmRyb2lkOm5hbWU9Ii5Db3B5U2VydmljZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iLnNlcnZpY2VzLkZpbGVPcGVyYXRpb25TZXJ2aWNlIgogICAgICAgICAgICAgYW5kcm9pZDpleHBvcnRlZD0iZmFsc2UiPgogICAgICAgICA8L3NlcnZpY2U+CiAgICAgPC9hcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjIxYzEyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDNlZTQ1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhM2ViYzQ3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA4NmE2OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4NmYwZjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwOTg4ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzEzNjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NTBmZjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWQ1NGJiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjdjNjM2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODY3ODQ3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19mb250X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1OTc2Ny4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNiZDk5Mi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI0NjcwMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmN2FmNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjE4YzJmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZDc1NWYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzNTcwYi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBjZWEyNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2I2MGRlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVlNDJhYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtaGRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMyN2VlYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYXBrX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRhZGQ1MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYXBrX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWE3ZjIwLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZiZWI3OS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOWNhYjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxZDI4Ny4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzAyYzkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMzljZDQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2ViODQ1Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y2ZTUwNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb250X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19mb250X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJmMDQzZi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4M2Q3ZmIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NDFiOGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzYWMwNzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0M2Y5MDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU3MmNkMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWU2NzFiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZWJkNTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YWM0MzQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU1YzQ0Yi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUtbWRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTgyOTIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwM2QzNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1NThmMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2Fwa19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTkwYzRkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFiYzhjMy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YmE2ZTAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1MTExYS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3Yjc0NjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODNiZmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTRlODQ0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmQ1NzIxLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZm9sZGVyX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2ExMzAyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA4MTFmMS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYxZjUzNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA4MzU4NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3BkZl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk4ZTI2YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTljNjY3Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OTUxYzMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhlZDlmMC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q2NGU1Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmM0MGRlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBiOGE4YjcuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2FsYnVtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBmNTlmNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAwNmIxMi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfYXVkaW9fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTI2MTg4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NlcnRpZmljYXRlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1ZDc0Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb2Rlc19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMzI4MDEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUyODcwOC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NGM1MjQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19ldmVudF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNTNiMGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZXhjZWxfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGVlMTNiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Y5Y2MyLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19mb250X2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGZiYmJjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfZ2VuZXJpY19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFhMjE5YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX2ltYWdlX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0NjFjOS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE2Nzk1Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfcG93ZXJwb2ludF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUzYWE4Yy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGFlOWFlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMTQzOWUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19kb2NfdGV4dF9hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg3NmY4Ni4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3ZpZGVvX2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NmNjU2YS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX2RvY193b3JkX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2MzZDdiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19yb290X3NkY2FyZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzNjc3NC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfYWxidW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmRkNDk0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hbGJ1bV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfYXBrX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjkzNWJmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hcGtfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19hdWRpb19hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OTljYmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2F1ZGlvX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTEyOTI4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jZXJ0aWZpY2F0ZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvZGVzX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRhZmEzNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29kZXNfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2NvbXByZXNzZWRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBhYTA0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb21wcmVzc2VkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19jb250YWN0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJkMDUzNS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfY29udGFjdF9hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2V2ZW50X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjljZGJiNy4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZXZlbnRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19leGNlbF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMzQ5YjYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2V4Y2VsX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19mb2xkZXJfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMjQ5ZDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ZvbGRlcl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfZm9udF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OWI5MTEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2ZvbnRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX2dlbmVyaWNfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjQ3OWMzLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19nZW5lcmljX2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfaW1hZ2VfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTY4ZDZmLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19pbWFnZV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfcGRmX2FscGhhLnBuZyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmI0ZDY2Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19wZGZfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3Bvd2VycG9pbnRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJhOWFkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19wb3dlcnBvaW50X2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY19wcmVzZW50YXRpb25fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTE4ZGEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3ByZXNlbnRhdGlvbl9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3NwcmVhZHNoZWV0X2FtX2FscGhhLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQwNWY2Zi4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfc3ByZWFkc2hlZXRfYW1fYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3RleHRfYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjMwOGZlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY190ZXh0X2FtX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2NfdmlkZW9fYW1fYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTE3M2JlLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX2RvY192aWRlb19hbV9hbHBoYS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUteHh4aGRwaS9pY19kb2Nfd29yZF9hbHBoYS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NjRmNWEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfZG9jX3dvcmRfYWxwaGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfcm9vdF9zZGNhcmRfYWxwaGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2RhYTJhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3Jvb3Rfc2RjYXJkX2FscGhhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19ib3R0b20ueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2NoZWNrX2NpcmNsZS54bWwKc2ltaWxhcml0eSBpbmRleCA3MCUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19ib3R0b20ueG1sCmNvcHkgdG8gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2NoZWNrX2NpcmNsZS54bWwKaW5kZXggZjExYjY5MC4uZDQ5YmE2YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2JvdHRvbS54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2NoZWNrX2NpcmNsZS54bWwKQEAgLTEsNSArMSw1IEBACiA8IS0tCi1Db3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTQsMTEgKzE0LDExIEBACiAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KIDx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsMC4wbDAuMCwyNC4wbDI0LjAsMC4wTDI0LjAsMC4wTDAuMCwwLjB6TTQuMCwxMC4wbDE2LjAsMC4wbDAuMCwxMC4wTDQuMCwyMC4wTDQuMCwxMC4weiIvPgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDA5Njg4IgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTIgMkM2LjQ4IDIgMiA2LjQ4IDIgMTJzNC40OCAxMCAxMCAxMCAxMCwtNC40OCAxMCwtMTBTMTcuNTIgMiAxMiAyem0tMiAxNWwtNSwtNSAxLjQxLC0xLjQxTDEwIDE0LjE3bDcuNTksLTcuNTlMMTkgOGwtOSA5eiIvPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2FsYnVtLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYWxidW0ueG1sCmluZGV4IGU3OTY1ZTYuLjFjZTNmMDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYWxidW0ueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYWxidW0ueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19hbGJ1bV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xMiAyQzYuNDggMiAyIDYuNDggMiAxMnM0LjQ4IDEwIDEwIDEwIDEwLC00LjQ4IDEwLC0xMFMxNy41MiAyIDEyIDJ6bTAgMTQuNWMtMi40OSAwLC00LjUsLTIuMDEsLTQuNSwtNC41UzkuNTEgNy41IDEyIDcuNXM0LjUgMi4wMSA0LjUgNC41LC0yLjAxIDQuNSwtNC41IDQuNXptMCwtNS41Yy0uNTUgMCwtMSAuNDUsLTEgMXMuNDUgMSAxIDEgMSwtLjQ1IDEsLTEsLS40NSwtMSwtMSwtMXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hcGsueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hcGsueG1sCmluZGV4IDRmOGYwNmUuLjE5NzQ0NWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfYXBrLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2Fway54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2Fwa19hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik02IDE4YzAgLjU1LjQ1IDEgMSAxaDF2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNSwtLjY3IDEuNSwtMS41VjE5aDJ2My41YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNSwtLjY3IDEuNSwtMS41VjE5aDFjLjU1IDAgMSwtLjQ1IDEsLTFWOEg2djEwek0zLjUgOEMyLjY3IDggMiA4LjY3IDIgOS41djdjMCAuODMuNjcgMS41IDEuNSAxLjVTNSAxNy4zMyA1IDE2LjV2LTdDNSA4LjY3IDQuMzMgOCAzLjUgOHptMTcgMGMtLjgzIDAsLTEuNS42NywtMS41IDEuNXY3YzAgLjgzLjY3IDEuNSAxLjUgMS41czEuNSwtLjY3IDEuNSwtMS41di03YzAsLS44MywtLjY3LC0xLjUsLTEuNSwtMS41em0tNC45NywtNS44NGwxLjMsLTEuM2MuMiwtLjIuMiwtLjUxIDAsLS43MSwtLjIsLS4yLC0uNTEsLS4yLC0uNzEgMGwtMS40OCAxLjQ4QzEzLjg1IDEuMjMgMTIuOTUgMSAxMiAxYy0uOTYgMCwtMS44Ni4yMywtMi42Ni42M0w3Ljg1LjE1Yy0uMiwtLjIsLS41MSwtLjIsLS43MSAwLC0uMi4yLC0uMi41MSAwIC43MWwxLjMxIDEuMzFDNi45NyAzLjI2IDYgNS4wMSA2IDdoMTJjMCwtMS45OSwtLjk3LC0zLjc1LC0yLjQ3LC00Ljg0ek0xMCA1SDlWNGgxdjF6bTUgMGgtMVY0aDF2MXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19hdWRpby54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2F1ZGlvLnhtbAppbmRleCBjZjE4YjRmLi40NTRlZWEzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2F1ZGlvLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2F1ZGlvLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfYXVkaW9fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGREI0NDM3IgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6TTcuMiAxOGMtLjY2IDAsLTEuMiwtLjU0LC0xLjIsLTEuMlYxMmMwLC0zLjMxIDIuNjksLTYgNiwtNnM2IDIuNjkgNiA2djQuOGMwIC42NiwtLjU0IDEuMiwtMS4yIDEuMkgxNHYtNGgydi0yYzAsLTIuMjEsLTEuNzksLTQsLTQsLTRzLTQgMS43OSwtNCA0djJoMnY0SDcuMnoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jZXJ0aWZpY2F0ZS54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NlcnRpZmljYXRlLnhtbAppbmRleCBjMjhlZDRmLi5iOTliYWY2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NlcnRpZmljYXRlLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NlcnRpZmljYXRlLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfY2VydGlmaWNhdGVfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTcuODEgNC40N2MtLjA4IDAsLS4xNiwtLjAyLC0uMjMsLS4wNkMxNS42NiAzLjQyIDE0IDMgMTIuMDEgM2MtMS45OCAwLC0zLjg2LjQ3LC01LjU3IDEuNDEsLS4yNC4xMywtLjU0LjA0LC0uNjgsLS4yLC0uMTMsLS4yNCwtLjA0LC0uNTUuMiwtLjY4QzcuODIgMi41MiA5Ljg2IDIgMTIuMDEgMmMyLjEzIDAgMy45OS40NyA2LjAzIDEuNTIuMjUuMTMuMzQuNDMuMjEuNjcsLS4wOS4xOCwtLjI2LjI4LC0uNDQuMjh6TTMuNSA5LjcyYy0uMSAwLC0uMiwtLjAzLC0uMjksLS4wOSwtLjIzLC0uMTYsLS4yOCwtLjQ3LC0uMTIsLS43Ljk5LC0xLjQgMi4yNSwtMi41IDMuNzUsLTMuMjdDOS45OCA0LjA0IDE0IDQuMDMgMTcuMTUgNS42NWMxLjUuNzcgMi43NiAxLjg2IDMuNzUgMy4yNS4xNi4yMi4xMS41NCwtLjEyLjcsLS4yMy4xNiwtLjU0LjExLC0uNywtLjEyLC0uOSwtMS4yNiwtMi4wNCwtMi4yNSwtMy4zOSwtMi45NCwtMi44NywtMS40NywtNi41NCwtMS40NywtOS40LjAxLC0xLjM2LjcsLTIuNSAxLjcsLTMuNCAyLjk2LC0uMDguMTQsLS4yMy4yMSwtLjM5LjIxem02LjI1IDEyLjA3Yy0uMTMgMCwtLjI2LC0uMDUsLS4zNSwtLjE1LC0uODcsLS44NywtMS4zNCwtMS40MywtMi4wMSwtMi42NCwtLjY5LC0xLjIzLC0xLjA1LC0yLjczLC0xLjA1LC00LjM0IDAsLTIuOTcgMi41NCwtNS4zOSA1LjY2LC01LjM5czUuNjYgMi40MiA1LjY2IDUuMzljMCAuMjgsLS4yMi41LC0uNS41cy0uNSwtLjIyLC0uNSwtLjVjMCwtMi40MiwtMi4wOSwtNC4zOSwtNC42NiwtNC4zOSwtMi41NyAwLC00LjY2IDEuOTcsLTQuNjYgNC4zOSAwIDEuNDQuMzIgMi43Ny45MyAzLjg1LjY0IDEuMTUgMS4wOCAxLjY0IDEuODUgMi40Mi4xOS4yLjE5LjUxIDAgLjcxLC0uMTEuMSwtLjI0LjE1LC0uMzcuMTV6bTcuMTcsLTEuODVjLTEuMTkgMCwtMi4yNCwtLjMsLTMuMSwtLjg5LC0xLjQ5LC0xLjAxLC0yLjM4LC0yLjY1LC0yLjM4LC00LjM5IDAsLS4yOC4yMiwtLjUuNSwtLjVzLjUuMjIuNS41YzAgMS40MS43MiAyLjc0IDEuOTQgMy41Ni43MS40OCAxLjU0LjcxIDIuNTQuNzEuMjQgMCAuNjQsLS4wMyAxLjA0LC0uMS4yNywtLjA1LjUzLjEzLjU4LjQxLjA1LjI3LC0uMTMuNTMsLS40MS41OCwtLjU3LjExLC0xLjA3LjEyLC0xLjIxLjEyek0xNC45MSAyMmMtLjA0IDAsLS4wOSwtLjAxLC0uMTMsLS4wMiwtMS41OSwtLjQ0LC0yLjYzLC0xLjAzLC0zLjcyLC0yLjEsLTEuNCwtMS4zOSwtMi4xNywtMy4yNCwtMi4xNywtNS4yMiAwLC0xLjYyIDEuMzgsLTIuOTQgMy4wOCwtMi45NCAxLjcgMCAzLjA4IDEuMzIgMy4wOCAyLjk0IDAgMS4wNy45MyAxLjk0IDIuMDggMS45NHMyLjA4LC0uODcgMi4wOCwtMS45NGMwLC0zLjc3LC0zLjI1LC02LjgzLC03LjI1LC02LjgzLC0yLjg0IDAsLTUuNDQgMS41OCwtNi42MSA0LjAzLC0uMzkuODEsLS41OSAxLjc2LC0uNTkgMi44IDAgLjc4LjA3IDIuMDEuNjcgMy42MS4xLjI2LC0uMDMuNTUsLS4yOS42NCwtLjI2LjEsLS41NSwtLjA0LC0uNjQsLS4yOSwtLjQ5LC0xLjMxLC0uNzMsLTIuNjEsLS43MywtMy45NiAwLC0xLjIuMjMsLTIuMjkuNjgsLTMuMjQgMS4zMywtMi43OSA0LjI4LC00LjYgNy41MSwtNC42IDQuNTUgMCA4LjI1IDMuNTEgOC4yNSA3LjgzIDAgMS42MiwtMS4zOCAyLjk0LC0zLjA4IDIuOTRzLTMuMDgsLTEuMzIsLTMuMDgsLTIuOTRjMCwtMS4wNywtLjkzLC0xLjk0LC0yLjA4LC0xLjk0cy0yLjA4Ljg3LC0yLjA4IDEuOTRjMCAxLjcxLjY2IDMuMzEgMS44NyA0LjUxLjk1Ljk0IDEuODYgMS40NiAzLjI3IDEuODUuMjcuMDcuNDIuMzUuMzUuNjEsLS4wNS4yMywtLjI2LjM4LC0uNDcuMzh6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29kZXMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb2Rlcy54bWwKaW5kZXggMGRlNzIxYTkuLmVhMWM0NjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29kZXMueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29kZXMueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19jb2Rlc19hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik05LjQgMTYuNkw0LjggMTJsNC42LC00LjZMOCA2bC02IDYgNiA2IDEuNCwtMS40em01LjIgMGw0LjYsLTQuNiwtNC42LC00LjZMMTYgNmw2IDYsLTYgNiwtMS40LC0xLjR6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29tcHJlc3NlZC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbXByZXNzZWQueG1sCmluZGV4IGE0OWNmYTQuLmUwZWI2NjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29tcHJlc3NlZC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb21wcmVzc2VkLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfY29tcHJlc3NlZF9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOSAzSDVjLTEuMSAwLC0yIC45LC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLC0uOSAyLC0yVjVjMCwtMS4xLC0uOSwtMiwtMiwtMnptLTUgNmgtMnYyaDJ2MmgtMnYtMmgtMlY5aDJWN2gtMlY1aDJ2MmgydjJ6bTAgOGgtMnYtMmgtMnYtMmgydjJoMnYyeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbnRhY3QueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19jb250YWN0LnhtbAppbmRleCBiZjU1MGNiLi5hNzdjYjZiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2NvbnRhY3QueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfY29udGFjdC54bWwKQEAgLTEsNSArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX2NvbnRhY3RfYW1fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIKLSAgICBhbmRyb2lkOmF1dG9NaXJyb3JlZD0idHJ1ZSIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNzM3MzczIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjExIDAsLTIgLjg5LC0yIDJ2MTRjMCAxLjEuODkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMTEsLS45LC0yLC0yLC0yem0tNyAzYzEuNjUgMCAzIDEuMzUgMyAzIDAgMS42NiwtMS4zNSAzLC0zIDNzLTMsLTEuMzQsLTMsLTNjMCwtMS42NSAxLjM1LC0zIDMsLTN6bTYgMTJINnYtMWMwLC0yIDQsLTMuMSA2LC0zLjFzNiAxLjEgNiAzLjF2MXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2JvdHRvbS54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2RvY3VtZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19kb2N1bWVudC54bWwKaW5kZXggZjExYjY5MC4uMjkyNTFhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2JvdHRvbS54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19kb2N1bWVudC54bWwKQEAgLTE0LDExICsxNCwxMSBAQAogICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiA8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KICAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMEZGIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMC4wLDAuMGwwLjAsMjQuMGwyNC4wLDAuMEwyNC4wLDAuMEwwLjAsMC4wek00LjAsMTAuMGwxNi4wLDAuMGwwLjAsMTAuMEw0LjAsMjAuMEw0LjAsMTAuMHoiLz4KKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjQ4ODNGMyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xIDAsLTIgLjksLTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yem0tMS45OSA2SDdWN2gxMC4wMXYyem0wIDRIN3YtMmgxMC4wMXYyem0tMyA0SDd2LTJoNy4wMXYyeiIvPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2V2ZW50LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXZlbnQueG1sCmluZGV4IDI1Y2YwZjMuLjExM2YwNzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXZlbnQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZXZlbnQueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19ldmVudF9hbV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIgotICAgIGFuZHJvaWQ6YXV0b01pcnJvcmVkPSJ0cnVlIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xNyAxMmgtNXY1aDV2LTV6TTE2IDF2Mkg4VjFINnYySDVjLTEuMTEgMCwtMS45OS45LC0xLjk5IDJMMyAxOWMwIDEuMS44OSAyIDIgMmgxNGMxLjEgMCAyLC0uOSAyLC0yVjVjMCwtMS4xLC0uOSwtMiwtMiwtMmgtMVYxaC0yem0zIDE4SDVWOGgxNHYxMXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19leGNlbC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2V4Y2VsLnhtbAppbmRleCAzMzU0NzI1Li4zZWQyN2UxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2V4Y2VsLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2V4Y2VsLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfZXhjZWxfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMTZBNzY1IgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS0yLjggMTRoLTJMMTIgMTMuMiA5LjggMTdoLTJsMy4yLC01LC0zLjIsLTVoMmwyLjIgMy44TDE0LjIgN2gyTDEzIDEybDMuMiA1eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbGRlci54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbGRlci54bWwKaW5kZXggNzNkZTYwZS4uZGNiY2UwMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19mb2xkZXIueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZm9sZGVyLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfZm9sZGVyX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTEwIDRINGMtMS4xIDAsLTEuOTkuOSwtMS45OSAyTDIgMThjMCAxLjEuOSAyIDIgMmgxNmMxLjEgMCAyLC0uOSAyLC0yVjhjMCwtMS4xLC0uOSwtMiwtMiwtMmgtOGwtMiwtMnoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19mb250LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZm9udC54bWwKaW5kZXggYzc0Y2I5Yy4uNGMxM2Q3MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19mb250LnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ZvbnQueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19mb250X2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTkuOTMgMTMuNWg0LjE0TDEyIDcuOTh6TTIwIDJINGMtMS4xIDAsLTIgLjksLTIgMnYxNmMwIDEuMS45IDIgMiAyaDE2YzEuMSAwIDIsLS45IDIsLTJWNGMwLC0xLjEsLS45LC0yLC0yLC0yem0tNC4wNSAxNi41bC0xLjE0LC0zSDkuMTdsLTEuMTIgM0g1Ljk2bDUuMTEsLTEzaDEuODZsNS4xMSAxM2gtMi4wOXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19nZW5lcmljLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfZ2VuZXJpYy54bWwKaW5kZXggYTRlZTI5ZC4uMDA2ZGZiYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19nZW5lcmljLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2dlbmVyaWMueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19nZW5lcmljX2FtX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiCi0gICAgYW5kcm9pZDphdXRvTWlycm9yZWQ9InRydWUiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjczNzM3MyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTYgMmMtMS4xIDAsLTEuOTkuOSwtMS45OSAyTDQgMjBjMCAxLjEuODkgMiAxLjk5IDJIMThjMS4xIDAgMiwtLjkgMiwtMlY4bC02LC02SDZ6bTcgN1YzLjVMMTguNSA5SDEzeiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX2ltYWdlLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfaW1hZ2UueG1sCmluZGV4IDlkNGMzNTkuLjIzOTUzZjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfaW1hZ2UueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfaW1hZ2UueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19pbWFnZV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZEQjQ0MzciCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yMSAxOVY1YzAsLTEuMSwtLjksLTIsLTIsLTJINWMtMS4xIDAsLTIgLjksLTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJ6TTguNSAxMy41bDIuNSAzLjAxTDE0LjUgMTJsNC41IDZINWwzLjUsLTQuNXoiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wZGYueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wZGYueG1sCmluZGV4IDVjMzc0OTguLmIyZDAxOTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcGRmLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3BkZi54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX3BkZl9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZEQjQ0MzciCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik03IDExLjVoMXYtMUg3djF6TTE5IDNINWMtMS4xIDAsLTIgLjksLTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yem0tOS41IDguNWMwIC44MywtLjY3IDEuNSwtMS41IDEuNUg3djJINS41VjlIOGMuODMgMCAxLjUuNjcgMS41IDEuNXYxem0xMCwtMUgxN3YxaDEuNVYxM0gxN3YyaC0xLjVWOWg0djEuNXptLTUgM2MwIC44MywtLjY3IDEuNSwtMS41IDEuNWgtMi41VjlIMTNjLjgzIDAgMS41LjY3IDEuNSAxLjV2M3ptLTIuNSAwaDF2LTNoLTF2M3oiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wb3dlcnBvaW50LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcG93ZXJwb2ludC54bWwKaW5kZXggZjBhNmMzOS4uYWE1YmZjOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wb3dlcnBvaW50LnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3Bvd2VycG9pbnQueG1sCkBAIC0xLDQgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19wb3dlcnBvaW50X2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkZGNzUzNyIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xIDAsLTIgLjksLTIgMnYxNGMwIDEuMS45IDIgMiAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yek05LjggMTMuNFYxN0g4VjdoNC4zYzEuNTMgMCAyLjE1LjMgMi44Ljg5LjY1LjU5LjkgMS4zNy45IDIuMzQgMCAxLjAyLC0uMjYgMS44LC0uOSAyLjM1cy0xLjMuODIsLTIuOC44Mkg5Ljh6bTAsLTEuNFY4LjRoMi4zYy42NiAwIDEuMTcuMjUgMS41LjYuMzMuMzUuNS43Mi41IDEuMjUgMCAuNTUsLS4xOC45NSwtLjUgMS4yNSwtLjMyLjMxLC0uNy41LC0xLjM4LjVIOS44eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ByZXNlbnRhdGlvbi54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ByZXNlbnRhdGlvbi54bWwKaW5kZXggYTE0Zjg2Ni4uNzkzN2JjMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY19wcmVzZW50YXRpb24ueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfcHJlc2VudGF0aW9uLnhtbApAQCAtMSw0ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfcHJlc2VudGF0aW9uX2FscGhhIgotICAgIGFuZHJvaWQ6dGludD0iP2FuZHJvaWQ6YXR0ci9jb2xvckNvbnRyb2xOb3JtYWwiIC8+Cis8IS0tCitDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CisgICAgPHBhdGgKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRkY0QjQwMCIKKyAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTE5IDNINWMtMS4xIDAsLTEuOTkuOSwtMS45OSAydjE0YzAgMS4xLjg5IDIgMS45OSAyaDE0YzEuMSAwIDIsLS45IDIsLTJWNWMwLC0xLjEsLS45LC0yLC0yLC0yem0wIDEzSDVWOGgxNHY4eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3NwcmVhZHNoZWV0LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfc3ByZWFkc2hlZXQueG1sCmluZGV4IDQwZjI1MTUuLjE2NjNjMGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfc3ByZWFkc2hlZXQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfc3ByZWFkc2hlZXQueG1sCkBAIC0xLDUgKzEsMjQgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08Yml0bWFwIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19zcHJlYWRzaGVldF9hbV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIgotICAgIGFuZHJvaWQ6YXV0b01pcnJvcmVkPSJ0cnVlIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYxNkE3NjUiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xOSAzSDVjLTEuMSAwLC0xLjk5LjksLTEuOTkgMkwzIDh2MTFjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLC0uOSAyLC0yVjVjMCwtMS4xLC0uOSwtMiwtMiwtMnptMCA4aC04djhIOXYtOEg1VjloNFY1aDJ2NGg4djJ6Ii8+Cis8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdGV4dC54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3RleHQueG1sCmluZGV4IGZmYTllNzAuLjdmYzA0ZTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2NfdGV4dC54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY190ZXh0LnhtbApAQCAtMSw1ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfdGV4dF9hbV9hbHBoYSIKLSAgICBhbmRyb2lkOnRpbnQ9Ij9hbmRyb2lkOmF0dHIvY29sb3JDb250cm9sTm9ybWFsIgotICAgIGFuZHJvaWQ6YXV0b01pcnJvcmVkPSJ0cnVlIiAvPgorPCEtLQorQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgorICAgIDxwYXRoCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkY3MzczNzMiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xNCAySDZjLTEuMSAwLC0xLjk5LjksLTEuOTkgMkw0IDIwYzAgMS4xLjg5IDIgMS45OSAySDE4YzEuMSAwIDIsLS45IDIsLTJWOGwtNiwtNnptMiAxNkg4di0yaDh2MnptMCwtNEg4di0yaDh2MnptLTMsLTVWMy41TDE4LjUgOUgxM3oiLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY192aWRlby54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ZpZGVvLnhtbAppbmRleCAyZDA0OGMyLi5hZDRkYWU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ZpZGVvLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3ZpZGVvLnhtbApAQCAtMSw1ICsxLDI0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGJpdG1hcCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19kb2NfdmlkZW9fYW1fYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIKLSAgICBhbmRyb2lkOmF1dG9NaXJyb3JlZD0idHJ1ZSIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGREI0NDM3IgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTggNGwyIDRoLTNsLTIsLTRoLTJsMiA0aC0zbC0yLC00SDhsMiA0SDdMNSA0SDRjLTEuMSAwLC0xLjk5LjksLTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMiwtLjkgMiwtMlY0aC00eiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3dvcmQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX2RvY193b3JkLnhtbAppbmRleCBhZmNjNTMzLi43YTNhMGVjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfZG9jX3dvcmQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19kb2Nfd29yZC54bWwKQEAgLTEsNCArMSwyNCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfZG9jX3dvcmRfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KKzwhLS0KK0NvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgorICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KKyAgICA8cGF0aAorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGNDg4M0YzIgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTkgM0g1Yy0xLjEgMCwtMiAuOSwtMiAydjE0YzAgMS4xLjkgMiAyIDJoMTRjMS4xIDAgMiwtLjkgMiwtMlY1YzAsLTEuMSwtLjksLTIsLTIsLTJ6bS0zLjUgMTRIMTRsLTIsLTcuNSwtMiA3LjVIOC41TDYuMSA3aDEuN2wxLjU0IDcuNTFMMTEuMyA3aDEuNGwxLjk3IDcuNTFMMTYuMiA3aDEuN2wtMi40IDEweiIvPgorPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvZHJhd2FibGUvaWNfcm9vdF9zZGNhcmQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX3Jvb3Rfc2RjYXJkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjdjZmE4MWQuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX3Jvb3Rfc2RjYXJkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxiaXRtYXAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfcm9vdF9zZGNhcmRfYWxwaGEiCi0gICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQ29udHJvbE5vcm1hbCIgLz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19yb290X3NtYXJ0cGhvbmUueG1sCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2RyYXdhYmxlL2ljX3Jvb3Rfc21hcnRwaG9uZS54bWwKaW5kZXggOTJlMDFhZi4uMzAyMWIxNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV90b3AueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9kcmF3YWJsZS9pY19yb290X3NtYXJ0cGhvbmUueG1sCkBAIC0xNCwxMSArMTQsMTEgQEAKICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIC0tPgogPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0LjBkcCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0ZHAiCiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CiAgICAgPHBhdGgKICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTI0LjAsMjQuMEwyNC4wLDAuMEwwLjAsMC4wbDAuMCwyNC4wTDI0LjAsMjQuMHpNMjAuMCwxNC4wTDQuMCwxNC4wTDQuMCw0LjBsMTYuMCwwLjBMMjAuMCwxNC4weiIvPgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTcgMS4wMUw3IDFjLTEuMSAwLC0yIC45LC0yIDJ2MThjMCAxLjEuOSAyIDIgMmgxMGMxLjEgMCAyLC0uOSAyLC0yVjNjMCwtMS4xLC0uOSwtMS45OSwtMiwtMS45OXpNMTcgMTlIN1Y1aDEwdjE0eiIvPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0LXN3NzIwZHAtbGFuZC9pdGVtX2RvY19saXN0LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQtc3c3MjBkcC1sYW5kL2l0ZW1fZG9jX2xpc3QueG1sCmluZGV4IGZlMDZlYWYuLmVjYzI2ZTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQtc3c3MjBkcC1sYW5kL2l0ZW1fZG9jX2xpc3QueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQtc3c3MjBkcC1sYW5kL2l0ZW1fZG9jX2xpc3QueG1sCkBAIC0xLDUgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzwhLS0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAogICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTgsOCArMTksOCBAQAogICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvaXRlbV9kb2NfYmFja2dyb3VuZCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIj4KKyAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiA+CiAKICAgICA8VmlldwogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ZvY3VzX2luZGljYXRvciIKQEAgLTI5LDcxICszMCw3NiBAQAogICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSJAZGltZW4vbGlzdF9pdGVtX2hlaWdodCIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IkBkaW1lbi9saXN0X2l0ZW1fcGFkZGluZyIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSJAZGltZW4vbGlzdF9pdGVtX3BhZGRpbmciCisgICAgICAgIGFuZHJvaWQ6YmFzZWxpbmVBbGlnbmVkPSJmYWxzZSIKICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSJAZGltZW4vbGlzdF9pdGVtX2hlaWdodCIKICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpiYXNlbGluZUFsaWduZWQ9ImZhbHNlIj4KKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSJAZGltZW4vbGlzdF9pdGVtX3BhZGRpbmciCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSJAZGltZW4vbGlzdF9pdGVtX3BhZGRpbmciID4KIAogICAgICAgICA8RnJhbWVMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2ljb24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL2ljb25fc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL2ljb25fc2l6ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSIwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjE2ZHAiPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9saXN0X2l0ZW1fdGh1bWJuYWlsX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9saXN0X2l0ZW1fdGh1bWJuYWlsX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjE2ZHAiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iMGRwIiA+CiAKICAgICAgICAgICAgIDxJbWFnZVZpZXcKICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fbWltZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJJbnNpZGUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIiAvPgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIgLz4KIAogICAgICAgICAgICAgPEltYWdlVmlldwogICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbl90aHVtYiIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJDcm9wIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAbnVsbCIgLz4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJDcm9wIiAvPgorCisgICAgICAgICAgICA8SW1hZ2VWaWV3CisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9pY29uX2NoZWNrIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vY2hlY2tfaWNvbl9zaXplIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL2NoZWNrX2ljb25fc2l6ZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2NoZWNrX2NpcmNsZSIgLz4KIAogICAgICAgICA8L0ZyYW1lTGF5b3V0PgogCiAgICAgICAgIDwhLS0gVGhpcyBpcyB0aGUgb25lIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSB3YW50IGJhc2VsaW5lIGFsaWdubWVudCEgLS0+CisKICAgICAgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CisgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIiA+CiAKICAgICAgICAgICAgIDxUZXh0VmlldwogICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RpdGxlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjUiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxMmRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAuNSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0ibWlkZGxlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBbGlnbm1lbnQ9InZpZXdTdGFydCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5TdWJoZWFkIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnkiIC8+CiAKLSAgICAgICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9pY29uMSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL3Jvb3RfaWNvbl9zaXplIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL3Jvb3RfaWNvbl9zaXplIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJJbnNpZGUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIiAvPgotCiAgICAgICAgICAgICA8VGV4dFZpZXcKICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9zdW1tYXJ5IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjI1IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iMTJkcCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjI1IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0idmlld1N0YXJ0IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLkJvZHkxIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclNlY29uZGFyeSIgLz4KQEAgLTEwMiwxMSArMTA4LDExIEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zaXplIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjEyNSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjEyZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjEyNSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWluV2lkdGg9IjcwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QWxpZ25tZW50PSJ2aWV3RW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLkJvZHkxIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclNlY29uZGFyeSIgLz4KQEAgLTExNSwxNyArMTIxLDE1IEBACiAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kYXRlIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjEyNSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjEyZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwLjEyNSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bWluV2lkdGg9IjcwZHAiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCiAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QWxpZ25tZW50PSJ2aWV3RW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLkJvZHkxIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclNlY29uZGFyeSIgLz4KLQogICAgICAgICA8L0xpbmVhckxheW91dD4KLQogICAgIDwvTGluZWFyTGF5b3V0PgogCiA8L2NvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkxpc3RJdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9mcmFnbWVudF9kaXJlY3RvcnkueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9mcmFnbWVudF9kaXJlY3RvcnkueG1sCmluZGV4IGY5YmJjY2IuLjFiNTkxMWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvZnJhZ21lbnRfZGlyZWN0b3J5LnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2ZyYWdtZW50X2RpcmVjdG9yeS54bWwKQEAgLTIzLDExICsyMywxMSBAQAogICAgIDxQcm9ncmVzc0JhcgogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Byb2dyZXNzYmFyIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vcHJvZ3Jlc3NfYmFyX2hlaWdodCIKICAgICAgICAgYW5kcm9pZDppbmRldGVybWluYXRlPSJ0cnVlIgogICAgICAgICBzdHlsZT0iQHN0eWxlL1RyaW1tZWRIb3Jpem9udGFsUHJvZ3Jlc3NCYXIiCiAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIvPgotICAKKwogICAgIDxGcmFtZUxheW91dAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2NvbnRhaW5lcl9tZXNzYWdlX2JhciIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgogICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiPgotICAgICAgICAKKwogICAgICAgICA8VGV4dFZpZXcKICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWVzc2FnZSIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCkBAIC01OCw5ICs1OCw5IEBACiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9idXR0b25fcmV0cnkiCiAgICAgICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9idXR0b25CYXJQb3NpdGl2ZUJ1dHRvblN0eWxlIiAvPgotICAgICAgICAKKwogICAgIDwvTGluZWFyTGF5b3V0PgotICAgIAorCiAgICAgPCEtLSBUaGlzIEZyYW1lTGF5b3V0IHdvcmtzIGFyb3VuZCBiLzI0MTg5NTQxIC0tPgogICAgIDxGcmFtZUxheW91dAogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgpAQCAtNjgsNiArNjgsNyBAQAogCiAgICAgICAgIDxhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldwogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9saXN0IgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3Ivd2luZG93X2JhY2tncm91bmQiCiAgICAgICAgICAgICBhbmRyb2lkOnNjcm9sbGJhcnM9InZlcnRpY2FsIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9pdGVtX2Rpcl9ncmlkLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kaXJfZ3JpZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA4ZTAyOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kaXJfZ3JpZC54bWwKQEAgLTAsMCArMSw4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPEZyYW1lTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iQGRpbWVuL2dyaWRfaXRlbV9tYXJnaW4iCisgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvaXRlbV9kb2NfYmFja2dyb3VuZCIKKyAgICBhbmRyb2lkOmVsZXZhdGlvbj0iNWRwIgorICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIiA+CisKKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjE2ZHAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0xlZnQ9IjEyZHAiCisgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1JpZ2h0PSIxMmRwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjE2ZHAiCisgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIj4KKworICAgICAgICA8RnJhbWVMYXlvdXQKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRwIiA+CisKKyAgICAgICAgICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fbWltZV9zbSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2RvY19mb2xkZXIiIC8+CisKKyAgICAgICAgICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fY2hlY2siCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9jaGVja19pY29uX3NpemUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vY2hlY2tfaWNvbl9zaXplIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWxwaGE9IjAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJmaXRDZW50ZXIiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19jaGVja19jaXJjbGUiIC8+CisKKyAgICAgICAgPC9GcmFtZUxheW91dD4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RpdGxlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1pZGRsZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0idmlld1N0YXJ0IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuU3ViaGVhZCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAKmFuZHJvaWQ6Y29sb3IvcHJpbWFyeV90ZXh0X2RlZmF1bHRfbWF0ZXJpYWxfbGlnaHQiIC8+CisKKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDwhLS0gQW4gb3ZlcmxheSB0aGF0IGRyYXdzIHRoZSBpdGVtIGJvcmRlciB3aGVuIGl0IGlzIGZvY3VzZWQuIC0tPgorCisgICAgPFZpZXcKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2l0ZW1fZG9jX2dyaWRfYm9yZGVyIgorICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgIGFuZHJvaWQ6ZHVwbGljYXRlUGFyZW50U3RhdGU9InRydWUiIC8+CisKKzwvRnJhbWVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZG9jX2dyaWQueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9pdGVtX2RvY19ncmlkLnhtbAppbmRleCBkY2Q1Y2ZkLi5kZDAyZDFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZG9jX2dyaWQueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kb2NfZ3JpZC54bWwKQEAgLTE5LDYgKzE5LDcgQEAKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IkBkaW1lbi9ncmlkX2l0ZW1fbWFyZ2luIgogICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL2l0ZW1fZG9jX2JhY2tncm91bmQiCisgICAgYW5kcm9pZDplbGV2YXRpb249IjVkcCIKICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSI+CiAKICAgICA8IS0tIE1haW4gaXRlbSB0aHVtYm5haWwuICBDb21wcmlzZWQgb2YgdHdvIG92ZXJsYXBwaW5nIGltYWdlcywgdGhlCkBAIC0zOCwxMCArMzksMTEgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAbnVsbCIgLz4KIAogICAgICAgICA8Y29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuR3JpZEl0ZW1UaHVtYm5haWwKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbl9taW1lIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbl9taW1lX2xnIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9pY29uX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9pY29uX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0Q2VudGVyIgogICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIiAvPgogCiAgICAgPC9GcmFtZUxheW91dD4KQEAgLTYwLDEzICs2MiwyNSBAQAogICAgICAgICBhbmRyb2lkOnBhZGRpbmdSaWdodD0iMTJkcCI+CiAKICAgICAgICAgPEltYWdlVmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvaWNvbjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fbWltZV9zbSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vZ3JpZF9pdGVtX2ljb25fc2l6ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL2dyaWRfaXRlbV9pY29uX3NpemUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjhkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50U3RhcnQ9InRydWUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJJbnNpZGUiCisgICAgICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIi8+CisKKyAgICAgICAgPEltYWdlVmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9pY29uX2NoZWNrIgorICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19jaGVja19jaXJjbGUiCisgICAgICAgICAgICBhbmRyb2lkOmFscGhhPSIwIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9jaGVja19pY29uX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9jaGVja19pY29uX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjhkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50U3RhcnQ9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJWZXJ0aWNhbD0idHJ1ZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJmaXRDZW50ZXIiCiAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiLz4KIAogICAgICAgICA8VGV4dFZpZXcKQEAgLTc0LDcgKzg4LDcgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50VG9wPSJ0cnVlIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9FbmRPZj0iQGFuZHJvaWQ6aWQvaWNvbjEiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF90b0VuZE9mPSJAaWQvaWNvbl9taW1lX3NtIgogICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgogICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1pZGRsZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0idmlld1N0YXJ0IgpAQCAtODUsNyArOTksNyBAQAogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zaXplIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9FbmRPZj0iQGFuZHJvaWQ6aWQvaWNvbjEiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF90b0VuZE9mPSJAaWQvaWNvbl9taW1lX3NtIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYmVsb3c9IkBhbmRyb2lkOmlkL3RpdGxlIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI0ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZG9jX2xpc3QueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL2xheW91dC9pdGVtX2RvY19saXN0LnhtbAppbmRleCBlMDY4NDIzLi44ZDk4Mzc3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbGF5b3V0L2l0ZW1fZG9jX2xpc3QueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9sYXlvdXQvaXRlbV9kb2NfbGlzdC54bWwKQEAgLTEsNSArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorPCEtLQorICAgICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xOCw4ICsxOSw4IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBjb2xvci9pdGVtX2RvY19iYWNrZ3JvdW5kIgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiPgorICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgorICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiID4KIAogICAgIDxWaWV3CiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZm9jdXNfaW5kaWNhdG9yIgpAQCAtMjksODIgKzMwLDc2IEBACiAgICAgPExpbmVhckxheW91dAogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9saXN0X2l0ZW1faGVpZ2h0IgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iQGRpbWVuL2xpc3RfaXRlbV9wYWRkaW5nIgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IkBkaW1lbi9saXN0X2l0ZW1fcGFkZGluZyIKKyAgICAgICAgYW5kcm9pZDpiYXNlbGluZUFsaWduZWQ9ImZhbHNlIgogICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKKyAgICAgICAgYW5kcm9pZDptaW5IZWlnaHQ9IkBkaW1lbi9saXN0X2l0ZW1faGVpZ2h0IgogICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmJhc2VsaW5lQWxpZ25lZD0iZmFsc2UiPgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IkBkaW1lbi9saXN0X2l0ZW1fcGFkZGluZyIKKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nU3RhcnQ9IkBkaW1lbi9saXN0X2l0ZW1fcGFkZGluZyIgPgogCiAgICAgICAgIDxGcmFtZUxheW91dAogICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvaWNvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vaWNvbl9zaXplIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxNmRwIj4KKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vbGlzdF9pdGVtX3RodW1ibmFpbF9zaXplIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vbGlzdF9pdGVtX3RodW1ibmFpbF9zaXplIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxNmRwIiA+CiAKICAgICAgICAgICAgIDxJbWFnZVZpZXcKICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fbWltZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJJbnNpZGUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBudWxsIiAvPgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIgLz4KIAogICAgICAgICAgICAgPEltYWdlVmlldwogICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbl90aHVtYiIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NhbGVUeXBlPSJjZW50ZXJDcm9wIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAbnVsbCIgLz4KKyAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckNyb3AiIC8+CiAKKyAgICAgICAgICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb25fY2hlY2siCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9jaGVja19pY29uX3NpemUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vY2hlY2tfaWNvbl9zaXplIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmFscGhhPSIwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAbnVsbCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iZml0Q2VudGVyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfY2hlY2tfY2lyY2xlIiAvPgogICAgICAgICA8L0ZyYW1lTGF5b3V0PgogCiAgICAgICAgIDxMaW5lYXJMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIj4KKyAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIiA+CiAKLSAgICAgICAgICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpiYXNlbGluZUFsaWduZWQ9ImZhbHNlIj4KLQotICAgICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90aXRsZSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0ibWlkZGxlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBbGlnbm1lbnQ9InZpZXdTdGFydCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuU3ViaGVhZCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9Ij9hbmRyb2lkOmF0dHIvdGV4dENvbG9yUHJpbWFyeSIgLz4KLQotICAgICAgICAgICAgICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvaWNvbjEiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vcm9vdF9pY29uX3NpemUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iQGRpbWVuL3Jvb3RfaWNvbl9zaXplIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iOGRwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNjYWxlVHlwZT0iY2VudGVySW5zaWRlIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQG51bGwiIC8+Ci0KLSAgICAgICAgICAgIDwvTGluZWFyTGF5b3V0PgorICAgICAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvdGl0bGUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkcCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCisgICAgICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9Im1pZGRsZSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QWxpZ25tZW50PSJ2aWV3U3RhcnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuU3ViaGVhZCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JQcmltYXJ5IiAvPgogCiAgICAgICAgICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9saW5lMiIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFzZWxpbmVBbGlnbmVkPSJmYWxzZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFzZWxpbmVBbGlnbmVkPSJmYWxzZSI+CisgICAgICAgICAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIgPgogCiAgICAgICAgICAgICAgICAgPFRleHRWaWV3CiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGF0ZSIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjkwZHAiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QWxpZ25tZW50PSJ2aWV3U3RhcnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLkJvZHkxIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiIC8+CkBAIC0xMTQsOCArMTA5LDggQEAKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjkwZHAiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iOGRwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJlbmQiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QWxpZ25tZW50PSJ2aWV3U3RhcnQiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBhbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLkJvZHkxIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiIC8+CkBAIC0xMjQsMTggKzExOSwxNSBAQAogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9zdW1tYXJ5IgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRwIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iOGRwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDplbGxpcHNpemU9ImVuZCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgogICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBbGlnbm1lbnQ9InZpZXdTdGFydCIKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQGFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuQm9keTEiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclNlY29uZGFyeSIgLz4KLQogICAgICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KICAgICAgICAgPC9MaW5lYXJMYXlvdXQ+Ci0KICAgICA8L0xpbmVhckxheW91dD4KIAogPC9jb20uYW5kcm9pZC5kb2N1bWVudHN1aS5MaXN0SXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9tZW51L2FjdGl2aXR5LnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy9tZW51L2FjdGl2aXR5LnhtbAppbmRleCA3ZTA2NDliLi5hM2NmZGU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvbWVudS9hY3Rpdml0eS54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL21lbnUvYWN0aXZpdHkueG1sCkBAIC0xNSwxMSArMTUsMTkgQEAKIC0tPgogCiA8bWVudSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgorPCEtLSBzaG93QXNBY3Rpb24gZmxhZyBpbXBhY3RzIHRoZSBiZWhhdmlvciBvZiBTZWFyY2hWaWV3LgorICAgICBXaGVuIHNldCB0byBjb2xsYXBzZUFjdGlvblZpZXcsIGNvbGxhcHNpbmcgU2VhcmNoVmlldyB0byBpY29uIGlzIHRoZQorICAgICBkZWZhdWx0IGJlaGF2aW9yLiBJdCB3b3VsZCBmaXQgVVgsIGhvd2V2ZXIgYWZ0ZXIgZXhwYW5kaW5nIFNlYXJjaFZpZXcgaXMKKyAgICAgc2hvd24gb24gdGhlIGxlZnQgc2l0ZSBvZiB0aGUgdG9vbGJhciAocmVwbGFjaW5nIHRpdGxlKS4gU2luY2Ugbm8gd2F5IHRvCisgICAgIHByZXZlbnQgdGhpcyBiZWhhdmlvciB3YXMgZm91bmQsIHRoZSBmbGFnIGlzIHNldCB0byBhbHdheXMuIFNlYXJjaFZpZXcgaXMKKyAgICAgYWx3YXlzIHZpc2libGUgYnkgZGVmYXVsdCBhbmQgaXQgaXMgYmVpbmcgY29sbGFwc2UgbWFudWFsbHkgYnkgY2FsbGluZworICAgICBzZXRJY29uaWZpZWQoKSBtZXRob2QKKy0tPgogICAgIDxpdGVtCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWVudV9zZWFyY2giCiAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvbWVudV9zZWFyY2giCiAgICAgICAgIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljX21lbnVfc2VhcmNoIgotICAgICAgICBhbmRyb2lkOnNob3dBc0FjdGlvbj0iYWx3YXlzfGNvbGxhcHNlQWN0aW9uVmlldyIKKyAgICAgICAgYW5kcm9pZDpzaG93QXNBY3Rpb249ImFsd2F5cyIKICAgICAgICAgYW5kcm9pZDphY3Rpb25WaWV3Q2xhc3M9ImFuZHJvaWQud2lkZ2V0LlNlYXJjaFZpZXciCiAgICAgICAgIGFuZHJvaWQ6aW1lT3B0aW9ucz0iYWN0aW9uU2VhcmNoIiAvPgogICAgIDxpdGVtCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggNjQlCmNvcHkgZnJvbSBwYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwKY29weSB0byBwYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9jb25maWcueG1sCmluZGV4IDdkMjhmOWMuLjg0M2E4YWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9sYXlvdXRzLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9jb25maWcueG1sCkBAIC0xLDUgKzEsNSBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xMiw4ICsxMiw5IEBACiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+CisgLS0+CiAKLTxyZXNvdXJjZXM+Ci0gICAgPGl0ZW0gbmFtZT0iZG9jc19hY3Rpdml0eSIgdHlwZT0ibGF5b3V0Ij5AbGF5b3V0L2ZpeGVkX2xheW91dDwvaXRlbT4KKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9InRydXN0ZWRfcXVpY2tfdmlld2VyX3BhY2thZ2UiIG1zZ2lkPSIzMzU0MzgzOTkzOTA3ODYxMjY3Ij48L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWFjZTcxCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwxMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tICBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMjc4Mzg0MTc2NDYxNzIzODM1NCI+IkRva3VtZW50aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZpbGVzX2xhYmVsIiBtc2dpZD0iNjA1MTQwMjk1MDIwMjY5MDI3OSI+IkRhdG90ZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG93bmxvYWRzX2xhYmVsIiBtc2dpZD0iOTU5MTEzOTUxMDg0NjMzNjEyIj4iUHJldXppbWFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9vcGVuIiBtc2dpZD0iNDM1MzIyODkzNzY2MzkxNzgwMSI+Ik90dm9yaSBzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX3NhdmUiIG1zZ2lkPSIyNDMzNjc5NjY0ODgyODU3OTk5Ij4iU2HEjXV2YWogdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjI1NDc2MjAyNDExNzM4ODE3NTQiPiJOb3ZpIGRpcmVrdG9yaWp1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZ3JpZCIgbXNnaWQ9IjY4NzgwMjEzMzQ0OTc4MzUyNTkiPiJQcmlrYXogbXJlxb5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9saXN0IiBtc2dpZD0iNzI3OTI4NTkzOTg5MjQxNzI3OSI+IlByaWtheiBsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc29ydCIgbXNnaWQ9Ijc2Nzc3NDA0MDcxNTg0MTQ0NTIiPiJTb3J0aXJhaiBwcmVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2VhcmNoIiBtc2dpZD0iMzgxNjcxMjA4NDUwMjg1Njk3NCI+IlByZXRyYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4iUG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9vcGVuIiBtc2dpZD0iNDMyOTIyOTU3Mjc0OTIwOTAzIj4iT3R2b3JpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zYXZlIiBtc2dpZD0iMjM5NDc0MzMzNzY4NDQyNjMzOCI+IlNhxI11dmFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zaGFyZSIgbXNnaWQ9IjMwNzUxNDk5ODM5Nzk2MjgxNDYiPiJEZWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9kZWxldGUiIG1zZ2lkPSI4MTM4Nzk5NjIzODUwNjE0MTc3Ij4iSXpicmnFoWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlbGVjdF9hbGwiIG1zZ2lkPSI4MzIzNTc5NjY3MzQ4NzI5OTI4Ij4iSXphYmVyaSBzdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X2NvcHkiIG1zZ2lkPSIzNjEyMzI2MDUyNjc3MjI5MTQ4Ij4iS29waXJhaiBuYS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfbW92ZSIgbXNnaWQ9IjE4MjgwOTA2MzMxMTgwNzk4MTciPiJQcmVtZXN0aSB1Li4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9uZXdfd2luZG93IiBtc2dpZD0iMTIyNjAzMjg4OTI3ODcyNzUzOCI+Ik5vdmkgcHJvem9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9jb3B5X3RvX2NsaXBib2FyZCIgbXNnaWQ9IjQ4OTMxMTM4MTk3OTYzNDI5MSI+IktvcGlyYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZW51X3Bhc3RlX2Zyb21fY2xpcGJvYXJkIiBtc2dpZD0iMjA3MTU4MzAzMTE4MDI1NzA5MSI+Ik5hbGVwaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfYWR2YW5jZWRfc2hvdyIgcHJvZHVjdD0ibm9zZGNhcmQiIG1zZ2lkPSI0NjkzNjUyODk1NzE1NjMxNDAxIj4iUHJpa2HFvmkgaW50ZXJudSBtZW1vcmlqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfYWR2YW5jZWRfc2hvdyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjU3OTIxODI5MDAwODQxNDQyNjEiPiJQcmlrYcW+aSBTRCBrYXJ0aWN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9hZHZhbmNlZF9oaWRlIiBwcm9kdWN0PSJub3NkY2FyZCIgbXNnaWQ9IjQyMTg4MDk5NTI3MjE5NzI1ODkiPiJTYWtyaWogaW50ZXJudSBtZW1vcmlqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfYWR2YW5jZWRfaGlkZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ4NDU4Njk5NjkwMTU3MTg4NDgiPiJTYWtyaWogU0Qga2FydGljdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfZmlsZV9zaXplX3Nob3ciIG1zZ2lkPSIzMjQwMzIzNjE5MjYwODIzMDc2Ij4iUHJpa2HFvmkgdmVsacSNaW51IGRhdG90ZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVudV9maWxlX3NpemVfaGlkZSIgbXNnaWQ9Ijg4ODE5NzU5Mjg1MDI1ODEwNDIiPiJTYWtyaWogdmVsacSNaW51IGRhdG90ZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnV0dG9uX3NlbGVjdCIgbXNnaWQ9IjUyNzE5Njk4NzI1OTEzOTIxNCI+Ikl6YWJlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidXR0b25fY29weSIgbXNnaWQ9Ijg3MDY0NzU1NDQ2MzUwMjEzMDIiPiJLb3BpcmFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnV0dG9uX21vdmUiIG1zZ2lkPSIyMjAyNjY2MDIzMTA0MjAyMjMyIj4iUHJlbWVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidXR0b25fZGlzbWlzcyIgbXNnaWQ9IjM3MTQwNjU1NjY4OTM5NDYwODUiPiJPZGJhY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidXR0b25fcmV0cnkiIG1zZ2lkPSI0MzkyMDI3NTg0MTUzNzUyNzk3Ij4iUG9rdcWhYWogcG9ub3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9uYW1lIiBtc2dpZD0iOTE4MzU2MDQ2NzkxNzI1Njc3OSI+IlByZW1hIGltZW51Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic29ydF9kYXRlIiBtc2dpZD0iNTg2MDgwMDMyOTU2MTUxNDQ4Ij4iUHJlbWEgZGF0dW11IGl6bWVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNvcnRfc2l6ZSIgbXNnaWQ9IjMzNTA2ODEzMTk3MzU0NzQ3NDEiPiJQcmVtYSB2ZWxpxI1pbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkcmF3ZXJfb3BlbiIgbXNnaWQ9IjQ1NDU0NjY1MzI0MzAyMjY5NDkiPiJQcmlrYcW+aSBvc25vdm5lIGVsZW1lbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZHJhd2VyX2Nsb3NlIiBtc2dpZD0iNzYwMjczNDM2ODU1MjEyMzMxOCI+IlNha3JpaiBvc25vdm5lIGVsZW1lbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2F2ZV9lcnJvciIgbXNnaWQ9IjYxNjcwMDk3NzgwMDMyMjM2NjQiPiLEjHV2YW5qZSBkb2t1bWVudGEgbmlqZSB1c3BlbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjcmVhdGVfZXJyb3IiIG1zZ2lkPSIzNzM1NjQ5MTQxMzM1NDQ0MjE1Ij4iRGlyZWt0b3JpanVtIG5pamUgbmFwcmF2bGplbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1ZXJ5X2Vycm9yIiBtc2dpZD0iMTIyMjQ0ODI2MTY2MzUwMzUwMSI+IlNsYW5qZSB1cGl0YSB6YSBkb2t1bWVudGUgbmlqZSB1c3BlbG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3JlY2VudCIgbXNnaWQ9IjQ0NzAwNTM3MDQzMjA1MTgxMzMiPiJOZWRhdm5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF9hdmFpbGFibGVfYnl0ZXMiIG1zZ2lkPSI4NTY4NDUyODU4NjE3MDMzMjgxIj4iU2xvYm9kbm8gamUgPHhsaWZmOmcgaWQ9IlNJWkUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX3NlcnZpY2UiIG1zZ2lkPSIyMTc4ODU0ODk0NDE2Nzc1NDA5Ij4iVXNsdWdlIHNrbGFkacWhdGVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfc2hvcnRjdXQiIG1zZ2lkPSIzMzE4NzYwNjA5NDcxNjE4MDkzIj4iUHJlxI1pY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X3R5cGVfZGV2aWNlIiBtc2dpZD0iNzEyMTM0MjQ3NDY1MzQ4MzUzOCI+IlVyZcSRYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icm9vdF90eXBlX2FwcHMiIG1zZ2lkPSI4ODM4MDY1MzY3OTg1OTQ1MTg5Ij4iSm/FoSBhcGxpa2FjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW1wdHkiIG1zZ2lkPSI3ODU4ODgyODAzNzA4MTE3NTk2Ij4iTmVtYSBzdGF2a2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9ub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjEzMzk4ODU5NzQwNjc4OTE2NjciPiJOaWplIG1vZ3XEh2Ugb3R2b3JpdGkgZGF0b3Rla3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0b2FzdF9mYWlsZWRfZGVsZXRlIiBtc2dpZD0iMjE4MDY3ODAxOTQwNzI0NDA2OSI+Ik5pamUgbW9ndcSHZSBpemJyaXNhdGkgbmVrZSBkb2t1bWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaGFyZV92aWEiIG1zZ2lkPSI4OTY2NTk0MjQ2MjYxMzQ0MjU5Ij4iRGVsaXRlIHByZWtvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2Mzc0Mjk5ODA2NzQ4MjE5Nzc3Ij4iS29waXJhbmplIGRhdG90ZWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW92ZV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI2MTkzODM1MTc5Nzc3Mjg0ODA1Ij4iRGF0b3Rla2Ugc2UgcHJlbWXFoXRhanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5X3JlbWFpbmluZyIgbXNnaWQ9IjYyODM3OTA5MzczODc5NzUwOTUiPiJKb8WhIDx4bGlmZjpnIGlkPSJEVVJBVElPTiI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9ImNvcHlfYmVnaW4iIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI5MDcxMTk5NDUyNjM0MDg2MzY1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPktvcGlyYW5qZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla2UuPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+S29waXJhbmplIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrZS48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPktvcGlyYW5qZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla2EuPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJtb3ZlX2JlZ2luIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iODQzMDMzMDg4MjEzODg3MTY0MyI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5QcmVtZcWhdGEgc2UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGRhdG90ZWthLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByZW1lxaF0YWp1IHNlIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrZS48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByZW1lxaF0YSBzZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla2EuPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJkZWxldGluZyIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjUwNTQzMzg1NjY4MDI1NTk0MTEiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+QnJpxaFlIHNlIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrYS48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5CcmnFoXUgc2UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGRhdG90ZWtlLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+QnJpxaFlIHNlIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrYS48L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0idW5kbyIgbXNnaWQ9Ijc5MDU3ODg1MDI0OTE3NDIzMjgiPiJPcG96b3ZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29weV9wcmVwYXJpbmciIG1zZ2lkPSIzODk2MjAyNDYxMDAzMDM5Mzg2Ij4iUHJpcHJlbWEgc2Uga29waXJhbmpl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW92ZV9wcmVwYXJpbmciIG1zZ2lkPSIyNzcyMjE5NDQxMzc1NTMxNDEwIj4iUHJpcHJlbWEgc2UgcHJlbWXFoXRhbmplLi4uIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9ImNvcHlfZXJyb3Jfbm90aWZpY2F0aW9uX3RpdGxlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNTI2NzYxNjg4OTA3NjIxNzI2MSI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5OaXNtbyB1c3BlbGkgZGEga29waXJhbW8gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGRhdG90ZWt1PC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+TmlzbW8gdXNwZWxpIGRhIGtvcGlyYW1vIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrZTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+TmlzbW8gdXNwZWxpIGRhIGtvcGlyYW1vIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrYTwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHBsdXJhbHMgbmFtZT0ibW92ZV9lcnJvcl9ub3RpZmljYXRpb25fdGl0bGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSIyNzc5Mjk5NTk0MTc0ODk4ODkxIj4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5pamUgdXNwZWxvIHByZW1lxaF0YW5qZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla2U8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5OaWplIHVzcGVsbyBwcmVtZcWhdGFuamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGRhdG90ZWtlPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OaWplIHVzcGVsbyBwcmVtZcWhdGFuamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGRhdG90ZWthPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl90b3VjaF9mb3JfZGV0YWlscyIgbXNnaWQ9IjQ0ODMxMDg1Nzc4NDI5NjE2NjUiPiJEb2Rpcm5pdGUgZGEgYmlzdGUgdmlkZWxpIGRldGFsamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZXRyeSIgbXNnaWQ9Ijc1NjQwMjQxNzkxMjIyMDczNzYiPiJQb2t1xaFhaiBwb25vdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb3B5X2ZhaWx1cmVfYWxlcnRfY29udGVudCIgbXNnaWQ9IjM3MTU1NzUwMDAyOTc3MDkwODIiPiJTbGVkZcSHZSBkYXRvdGVrZSBuaXN1IGtvcGlyYW5lOiA8eGxpZmY6ZyBpZD0iTElTVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb3ZlX2ZhaWx1cmVfYWxlcnRfY29udGVudCIgbXNnaWQ9IjcxNTExNDAyNzkwMjA0ODExODAiPiJPdmUgZGF0b3Rla2UgbmlzdSBwcmVtZcWhdGVuZTogPHhsaWZmOmcgaWQ9IkxJU1QiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9ImNsaXBib2FyZF9maWxlc19jbGlwcGVkIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iODU1NDU5MDE3NTM3MDU4NTM5Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPktvcGlyYWxpIHN0ZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla3UgdSBwcml2cmVtZW51IG1lbW9yaWp1LjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPktvcGlyYWxpIHN0ZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4gZGF0b3Rla2UgdSBwcml2cmVtZW51IG1lbW9yaWp1LjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+S29waXJhbGkgc3RlIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRkPC94bGlmZjpnPiBkYXRvdGVrYSB1IHByaXZyZW1lbnUgbWVtb3JpanUuPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsaXBib2FyZF9maWxlc19jYW5ub3RfcGFzdGUiIG1zZ2lkPSIyODc4MzI0ODI1NjAyMzI1NzA2Ij4iSXphYnJhbmUgZGF0b3Rla2UgbmUgbW9ndSBkYSBzZSBuYWxlcGUgbmEgb3ZvaiBsb2thY2lqaS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKaW5kZXggYWVjZjU0Mi4uNjE3MmM3NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4i0JTQvtC60YPQvNC10L3RgtGC0LXRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZpbGVzX2xhYmVsIiBtc2dpZD0iNjA1MTQwMjk1MDIwMjY5MDI3OSI+ItCk0LDQudC70LTQsNGAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZG93bmxvYWRzX2xhYmVsIiBtc2dpZD0iOTU5MTEzOTUxMDg0NjMzNjEyIj4i0JbSr9C60YLTqdOp0LvTqdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG93bmxvYWRzX2xhYmVsIiBtc2dpZD0iOTU5MTEzOTUxMDg0NjMzNjEyIj4i0JbSr9C60YLTqdC70q/QvyDQsNC70YvQvdCz0LDQvdC00LDRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRpdGxlX29wZW4iIG1zZ2lkPSI0MzUzMjI4OTM3NjYzOTE3ODAxIj4i0JrQuNC50LjQvdC60LjQtNC10L0g0LDRh9GD0YM6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfc2F2ZSIgbXNnaWQ9IjI0MzM2Nzk2NjQ4ODI4NTc5OTkiPiLQmtC40LnQuNC90LrQuNCz0LUg0YHQsNC60YLQvtC+OiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfY3JlYXRlX2RpciIgbXNnaWQ9IjI1NDc2MjAyNDExNzM4ODE3NTQiPiLQltCw0qPRiyDQutGD0YDQttGD0L0iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCmluZGV4IDJkOGJlMWIuLjUxY2I3NzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJtZW51X2xpc3QiIG1zZ2lkPSI3Mjc5Mjg1OTM5ODkyNDE3Mjc5Ij4i0J/RgNC40LrQsNC3INC90LAg0YHQv9C40YHQvtC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zb3J0IiBtc2dpZD0iNzY3Nzc0MDQwNzE1ODQxNDQ1MiI+ItCf0L7QtNGA0LXQtNC4INC/0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZW51X3NlYXJjaCIgbXNnaWQ9IjM4MTY3MTIwODQ1MDI4NTY5NzQiPiLQn9GA0LXQsdCw0YDQsNGYIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWVudV9zZXR0aW5ncyIgbXNnaWQ9IjYwMDgwMzMxNDg5NDg0Mjg4MjMiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2V0dGluZ3MiIG1zZ2lkPSI2MDA4MDMzMTQ4OTQ4NDI4ODIzIj4i0J/QvtGB0YLQsNCy0LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfb3BlbiIgbXNnaWQ9IjQzMjkyMjk1NzI3NDkyMDkwMyI+ItCe0YLQstC+0YDQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2F2ZSIgbXNnaWQ9IjIzOTQ3NDMzMzc2ODQ0MjYzMzgiPiLQl9Cw0YfRg9Cy0LDRmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lbnVfc2hhcmUiIG1zZ2lkPSIzMDc1MTQ5OTgzOTc5NjI4MTQ2Ij4i0KHQv9C+0LTQtdC70LgiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBiNTIyZTBhLi5jMzAzZTBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTk3LDggKzk3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImNvcHlfZmFpbHVyZV9hbGVydF9jb250ZW50IiBtc2dpZD0iMzcxNTU3NTAwMDI5NzcwOTA4MiI+IkZhaWxpIGhpemkgaGF6aWt1bmFraWxpd2E6IDx4bGlmZjpnIGlkPSJMSVNUIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1vdmVfZmFpbHVyZV9hbGVydF9jb250ZW50IiBtc2dpZD0iNzE1MTE0MDI3OTAyMDQ4MTE4MCI+IkZhaWxpIGhpemkgaGF6aWt1aGFtaXNod2E6IDx4bGlmZjpnIGlkPSJMSVNUIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJjbGlwYm9hcmRfZmlsZXNfY2xpcHBlZCIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9Ijg1NTQ1OTAxNzUzNzA1ODUzOSI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkFsaW5ha2lsaSBmYWlsaSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkZDwveGxpZmY6Zz4ga3dlbnllIHViYW9rbGlwdS48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5BbGluYWtpbGkgZmFpbGkgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJGQ8L3hsaWZmOmc+IGt3ZW55ZSB1YmFva2xpcHUuPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5BbGluYWtpbGkgZmFpbGkgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJGQ8L3hsaWZmOmc+IGt3ZW55ZSB1YmFvIHdhIGt1bmFraWxpLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkFsaW5ha2lsaSBmYWlsaSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkZDwveGxpZmY6Zz4ga3dlbnllIHViYW8gd2Ega3VuYWtpbGkuPC9pdGVtPgogICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNsaXBib2FyZF9maWxlc19jYW5ub3RfcGFzdGUiIG1zZ2lkPSIyODc4MzI0ODI1NjAyMzI1NzA2Ij4iSGFpd2V6aSBrdWJhbmRpa2EgZmFpbGkgemlsaXpvY2hhZ3VsaXdhIGthdGlrYSBlbmVvIGhpbGkuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvZGltZW5zLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCmluZGV4IGYzOTNkODguLjI0ODhmYTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9kaW1lbnMueG1sCkBAIC0xNSwxMiArMTUsNyBAQAogLS0+CiAKIDxyZXNvdXJjZXM+Ci0gICAgPGJvb2wgbmFtZT0ic2hvd19hc19kaWFsb2ciPnRydWU8L2Jvb2w+Ci0KLSAgICA8aXRlbSB0eXBlPSJkaW1lbiIgbmFtZT0iZGlhbG9nX3dpZHRoIj44NSU8L2l0ZW0+Ci0KICAgICA8ZGltZW4gbmFtZT0iZ3JpZF9wYWRkaW5nX2hvcml6Ij4xNmRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0iZ3JpZF9wYWRkaW5nX3ZlcnQiPjE2ZHA8L2RpbWVuPgogCi0gICAgPGRpbWVuIG5hbWU9ImdyaWRfaXRlbV9tYXJnaW4iPjhkcDwvZGltZW4+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9zdHlsZXMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL3N0eWxlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZGNiYjAuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL3N0eWxlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0KLSAgICA8c3R5bGUgbmFtZT0iRG9jdW1lbnRzQmFzZVRoZW1lIiBwYXJlbnQ9IkBzdHlsZS9UaGVtZS5BcHBDb21wYXQuTGlnaHQuRGlhbG9nIj4KLSAgICAgICAgPCEtLSBXZSBkbyBub3Qgc3BlY2lmeSB3aWR0aCBvZiB3aW5kb3cgaGVyZSBiZWNhdXNlIHRoZSBtYXggc2l6ZSBvZgotICAgICAgICAgICAgIGZsb2F0aW5nIHdpbmRvdyBzcGVjaWZpZWQgYnkgd2luZG93Rml4ZWRXaWR0aGlzIGlzIGxpbWl0ZWQuIC0tPgotICAgICAgICA8aXRlbSBuYW1lPSIqYW5kcm9pZDp3aW5kb3dGaXhlZEhlaWdodE1ham9yIj44MCU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9IiphbmRyb2lkOndpbmRvd0ZpeGVkSGVpZ2h0TWlub3IiPjkwJTwvaXRlbT4KLSAgICA8L3N0eWxlPgotCi08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKaW5kZXggYjk0NDczNi4uMWI1YWNlNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIyNzgzODQxNzY0NjE3MjM4MzU0Ij4iSHVqamF0bGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmlsZXNfbGFiZWwiIG1zZ2lkPSI2MDUxNDAyOTUwMjAyNjkwMjc5Ij4iRmF5bGxhciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImRvd25sb2Fkc19sYWJlbCIgbXNnaWQ9Ijk1OTExMzk1MTA4NDYzMzYxMiI+Ill1a2xhbm1hbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZG93bmxvYWRzX2xhYmVsIiBtc2dpZD0iOTU5MTEzOTUxMDg0NjMzNjEyIj4iWXVrbGFuaXNobGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idGl0bGVfb3BlbiIgbXNnaWQ9IjQzNTMyMjg5Mzc2NjM5MTc4MDEiPiJPY2hpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV9zYXZlIiBtc2dpZD0iMjQzMzY3OTY2NDg4Mjg1Nzk5OSI+IlNhcWxhc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZW51X2NyZWF0ZV9kaXIiIG1zZ2lkPSIyNTQ3NjIwMjQxMTczODgxNzU0Ij4iWWFuZ2kgamlsZCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMvYXR0cnMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9hdHRycy54bWwKaW5kZXggMGFmYzNhMi4uOWUxMzAwMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9hdHRycy54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9hdHRycy54bWwKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KIDxyZXNvdXJjZXM+Ci0gICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9IkRvY3VtZW50c0Jhc2VUaGVtZSI+CisgICAgPGRlY2xhcmUtc3R5bGVhYmxlIG5hbWU9IkRvY3VtZW50c1RoZW1lIj4KICAgICAgICAgPGF0dHIgbmFtZT0iY29sb3JBY3Rpb25Nb2RlIiBmb3JtYXQ9ImNvbG9yIi8+CiAgICAgPC9kZWNsYXJlLXN0eWxlYWJsZT4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCmluZGV4IDE1M2M2NzMuLmM4NjhkMzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzL2NvbG9ycy54bWwKQEAgLTMzLDQgKzMzLDYgQEAKICAgICA8Y29sb3IgbmFtZT0iaXRlbV9kb2NfYmFja2dyb3VuZCI+I2ZmZmFmYWZhPC9jb2xvcj4KICAgICA8Y29sb3IgbmFtZT0iaXRlbV9kb2NfYmFja2dyb3VuZF9zZWxlY3RlZCI+I2ZmZTBmMmYxPC9jb2xvcj4KIAorICAgIDxjb2xvciBuYW1lPSJtZW51X3NlYXJjaF9iYWNrZ3JvdW5kIj4jZmY2NzZmNzQ8L2NvbG9yPgorCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCBmOTRhMDBlLi41YWRiMTY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCkBAIC0xNSw5ICsxNSwxOCBAQAogLS0+CiAKIDxyZXNvdXJjZXM+CisgICAgPGRpbWVuIG5hbWU9ImdyaWRfY29udGFpbmVyX3BhZGRpbmciPjEwZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJsaXN0X2NvbnRhaW5lcl9wYWRkaW5nIj4wZHA8L2RpbWVuPgorCiAgICAgPGRpbWVuIG5hbWU9Imljb25fc2l6ZSI+NDBkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9InJvb3RfaWNvbl9zaXplIj4yNGRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0icm9vdF9pY29uX21hcmdpbiI+MGRwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0iY2hlY2tfaWNvbl9zaXplIj4zMGRwPC9kaW1lbj4KKworICAgIDxkaW1lbiBuYW1lPSJsaXN0X2l0ZW1fdGh1bWJuYWlsX3NpemUiPjQwZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJncmlkX2l0ZW1faWNvbl9zaXplIj4zMGRwPC9kaW1lbj4KKworICAgIDxkaW1lbiBuYW1lPSJwcm9ncmVzc19iYXJfaGVpZ2h0Ij40ZHA8L2RpbWVuPgogCiAgICAgPGRpbWVuIG5hbWU9ImdyaWRfd2lkdGgiPjE1MmRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0iZ3JpZF9oZWlnaHQiPjE3NmRwPC9kaW1lbj4KQEAgLTM1LDcgKzQ0LDYgQEAKICAgICA8ZGltZW4gbmFtZT0ibGlzdF9kaXZpZGVyX2luc2V0Ij43MmRwPC9kaW1lbj4KICAgICA8Ym9vbCBuYW1lPSJsaXN0X2RpdmlkZXJfaW5zZXRfbGVmdCI+dHJ1ZTwvYm9vbD4KIAotICAgIDxib29sIG5hbWU9InNob3dfYXNfZGlhbG9nIj5mYWxzZTwvYm9vbD4KICAgICA8Ym9vbCBuYW1lPSJhbHdheXNfc2hvd19zdW1tYXJ5Ij5mYWxzZTwvYm9vbD4KIAogICAgIDxkaW1lbiBuYW1lPSJkaXJfZWxldmF0aW9uIj44ZHA8L2RpbWVuPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9zdHlsZXMueG1sIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCmluZGV4IDY3MTJlMmQuLmQxNDYzMWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKQEAgLTE2LDMxICsxNiwxMCBAQAogCiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+CiAKLSAgICA8c3R5bGUgbmFtZT0iRG9jdW1lbnRzQmFzZVRoZW1lIiBwYXJlbnQ9IkBzdHlsZS9UaGVtZS5BcHBDb21wYXQuTGlnaHQuRGFya0FjdGlvbkJhciIgLz4KICAgICA8c3R5bGUgbmFtZT0iQWN0aW9uQmFyVGhlbWUiIHBhcmVudD0iQCphbmRyb2lkOnN0eWxlL1RoZW1lT3ZlcmxheS5NYXRlcmlhbC5EYXJrLkFjdGlvbkJhciIgLz4KICAgICA8c3R5bGUgbmFtZT0iQWN0aW9uQmFyUG9wdXBUaGVtZSIgcGFyZW50PSJAKmFuZHJvaWQ6c3R5bGUvVGhlbWVPdmVybGF5Lk1hdGVyaWFsLkxpZ2h0IiAvPgogCi0gICAgPHN0eWxlIG5hbWU9IkRvY3VtZW50c1RoZW1lIiBwYXJlbnQ9IkBzdHlsZS9Eb2N1bWVudHNCYXNlVGhlbWUiPgotICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJXaWRnZXRUaGVtZSI+QG51bGw8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclRoZW1lIj5Ac3R5bGUvQWN0aW9uQmFyVGhlbWU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFjdGlvbkJhclBvcHVwVGhlbWUiPkBzdHlsZS9BY3Rpb25CYXJQb3B1cFRoZW1lPC9pdGVtPgotCi0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QmFja2dyb3VuZCI+QGNvbG9yL3dpbmRvd19iYWNrZ3JvdW5kPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmNvbG9yUHJpbWFyeURhcmsiPkBjb2xvci9wcmltYXJ5X2Rhcms8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6Y29sb3JQcmltYXJ5Ij5AY29sb3IvcHJpbWFyeTwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpjb2xvckFjY2VudCI+QGNvbG9yL2FjY2VudDwvaXRlbT4KLSAgICAgICAgPGl0ZW0gbmFtZT0iY29sb3JBY3Rpb25Nb2RlIj5AY29sb3IvYWN0aW9uX21vZGU8L2l0ZW0+Ci0KLSAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsaXN0RGl2aWRlciI+QCphbmRyb2lkOmRyYXdhYmxlL2xpc3RfZGl2aWRlcl9tYXRlcmlhbDwvaXRlbT4KLQotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0FjdGlvbkJhciI+ZmFsc2U8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uTW9kZU92ZXJsYXkiPnRydWU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KLQotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd1NvZnRJbnB1dE1vZGUiPnN0YXRlVW5zcGVjaWZpZWR8YWRqdXN0VW5zcGVjaWZpZWQ8L2l0ZW0+Ci0gICAgPC9zdHlsZT4KLQotICAgIDxzdHlsZSBuYW1lPSJEb2N1bWVudHNGdWxsU2NyZWVuVGhlbWUiIHBhcmVudD0iQHN0eWxlL1RoZW1lLkFwcENvbXBhdC5MaWdodC5EYXJrQWN0aW9uQmFyIj4KKyAgICA8c3R5bGUgbmFtZT0iRG9jdW1lbnRzVGhlbWUiIHBhcmVudD0iQHN0eWxlL1RoZW1lLkFwcENvbXBhdC5MaWdodC5EYXJrQWN0aW9uQmFyIj4KICAgICAgICAgPGl0ZW0gbmFtZT0iYWN0aW9uQmFyV2lkZ2V0VGhlbWUiPkBudWxsPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJUaGVtZSI+QHN0eWxlL0FjdGlvbkJhclRoZW1lPC9pdGVtPgogICAgICAgICA8aXRlbSBuYW1lPSJhY3Rpb25CYXJQb3B1cFRoZW1lIj5Ac3R5bGUvQWN0aW9uQmFyUG9wdXBUaGVtZTwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9CYXNlQWN0aXZpdHkuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9CYXNlQWN0aXZpdHkuamF2YQppbmRleCBlZGYzODRlLi5kZmVlZjUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvQmFzZUFjdGl2aXR5LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0Jhc2VBY3Rpdml0eS5qYXZhCkBAIC0zOCwxMyArMzgsMTQgQEAKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LlJvb3Q7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTGF5b3V0UmVzOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW0uT25BY3Rpb25FeHBhbmRMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsKQEAgLTYwLDYgKzYxLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudFN0YWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkR1cmFibGVVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Sb290SW5mbzsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CiAKIGltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CiAKQEAgLTg1LDcgKzg3LDcgQEAKICAgICBwcml2YXRlIGludCBtTGF5b3V0SWQ7CiAgICAgcHJpdmF0ZSBEaXJlY3RvcnlDb250YWluZXJWaWV3IG1EaXJlY3RvcnlDb250YWluZXI7CiAKLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBvbkRvY3VtZW50UGlja2VkKERvY3VtZW50SW5mbyBkb2MsIEBOdWxsYWJsZSBEb2N1bWVudENvbnRleHQgc2libGluZ3MpOworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uRG9jdW1lbnRQaWNrZWQoRG9jdW1lbnRJbmZvIGRvYywgQE51bGxhYmxlIFNpYmxpbmdQcm92aWRlciBzaWJsaW5ncyk7CiAgICAgcHVibGljIGFic3RyYWN0IHZvaWQgb25Eb2N1bWVudHNQaWNrZWQoTGlzdDxEb2N1bWVudEluZm8+IGRvY3MpOwogCiAgICAgYWJzdHJhY3Qgdm9pZCBvblRhc2tGaW5pc2hlZChVcmkuLi4gdXJpcyk7CkBAIC0xMTEsNiArMTEzLDEzIEBACiAgICAgICAgIHNldENvbnRlbnRWaWV3KG1MYXlvdXRJZCk7CiAKICAgICAgICAgbVJvb3RzID0gRG9jdW1lbnRzQXBwbGljYXRpb24uZ2V0Um9vdHNDYWNoZSh0aGlzKTsKKyAgICAgICAgbVJvb3RzLnNldE9uQ2FjaGVVcGRhdGVMaXN0ZW5lcigKKyAgICAgICAgICAgICAgICBuZXcgUm9vdHNDYWNoZS5PbkNhY2hlVXBkYXRlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNhY2hlVXBkYXRlKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEhhbmRsZVJvb3RzQ2hhbmdlZFRhc2soKS5leGVjdXRlKGdldEN1cnJlbnRSb290KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIG1EaXJlY3RvcnlDb250YWluZXIgPSAoRGlyZWN0b3J5Q29udGFpbmVyVmlldykgZmluZFZpZXdCeUlkKFIuaWQuY29udGFpbmVyX2RpcmVjdG9yeSk7CiAgICAgICAgIG1TZWFyY2hNYW5hZ2VyID0gbmV3IFNlYXJjaE1hbmFnZXIoKTsKIApAQCAtMTY3LDYgKzE3NiwxMiBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRlc3Ryb3koKSB7CisgICAgICAgIG1Sb290cy5zZXRPbkNhY2hlVXBkYXRlTGlzdGVuZXIobnVsbCk7CisgICAgICAgIHN1cGVyLm9uRGVzdHJveSgpOworICAgIH0KKwogICAgIFN0YXRlIGJ1aWxkRGVmYXVsdFN0YXRlKCkgewogICAgICAgICBTdGF0ZSBzdGF0ZSA9IG5ldyBTdGF0ZSgpOwogCkBAIC0xOTEsMTAgKzIwNiw3IEBACiAKICAgICB2b2lkIG9uUm9vdFBpY2tlZChSb290SW5mbyByb290KSB7CiAgICAgICAgIC8vIENsZWFyIGVudGlyZSBiYWNrc3RhY2sgYW5kIHN0YXJ0IGluIG5ldyByb290Ci0gICAgICAgIG1TdGF0ZS5zdGFjay5yb290ID0gcm9vdDsKLSAgICAgICAgbVN0YXRlLnN0YWNrLmNsZWFyKCk7Ci0gICAgICAgIG1TdGF0ZS5zdGFja1RvdWNoZWQgPSB0cnVlOwotCisgICAgICAgIG1TdGF0ZS5vblJvb3RDaGFuZ2VkKHJvb3QpOwogICAgICAgICBtU2VhcmNoTWFuYWdlci51cGRhdGUocm9vdCk7CiAKICAgICAgICAgLy8gUmVjZW50cyBpcyBhbHdheXMgaW4gbWVtb3J5LCBzbyB3ZSBqdXN0IGxvYWQgaXQgZGlyZWN0bHkuCkBAIC0yMDMsNyArMjE1LDcgQEAKICAgICAgICAgaWYgKG1Sb290cy5pc1JlY2VudHNSb290KHJvb3QpKSB7CiAgICAgICAgICAgICBvbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKEFOSU1fU0lERSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXcgUGlja1Jvb3RUYXNrKHJvb3QpLmV4ZWN1dGVPbkV4ZWN1dG9yKGdldEV4ZWN1dG9yRm9yQ3VycmVudERpcmVjdG9yeSgpKTsKKyAgICAgICAgICAgIG5ldyBQaWNrUm9vdFRhc2socm9vdCwgdHJ1ZSkuZXhlY3V0ZU9uRXhlY3V0b3IoZ2V0RXhlY3V0b3JGb3JDdXJyZW50RGlyZWN0b3J5KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMTQsNiArMjI2LDcgQEAKICAgICAgICAgICAgICAgICBjYXNlIFIuaWQubWVudV9hZHZhbmNlZDoKICAgICAgICAgICAgICAgICBjYXNlIFIuaWQubWVudV9maWxlX3NpemU6CiAgICAgICAgICAgICAgICAgY2FzZSBSLmlkLm1lbnVfbmV3X3dpbmRvdzoKKyAgICAgICAgICAgICAgICBjYXNlIFIuaWQubWVudV9zZWFyY2g6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2V0U2hvd0FzQWN0aW9uKE1lbnVJdGVtLlNIT1dfQVNfQUNUSU9OX0FMV0FZUyk7CkBAIC0zMDUsOCArMzE4LDcgQEAKIAogICAgIHZvaWQgb3BlbkNvbnRhaW5lckRvY3VtZW50KERvY3VtZW50SW5mbyBkb2MpIHsKICAgICAgICAgY2hlY2tBcmd1bWVudChkb2MuaXNDb250YWluZXIoKSk7Ci0gICAgICAgIG1TdGF0ZS5zdGFjay5wdXNoKGRvYyk7Ci0gICAgICAgIG1TdGF0ZS5zdGFja1RvdWNoZWQgPSB0cnVlOworICAgICAgICBtU3RhdGUucHVzaERvY3VtZW50KGRvYyk7CiAgICAgICAgIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoQU5JTV9ET1dOKTsKICAgICB9CiAKQEAgLTMxNSw2ICszMjcsOCBAQAogICAgICAqIHRoZSAoYWJzdHJhY3QpIGRpcmVjdG9yeUNoYW5nZWQgbWV0aG9kIHdpbGwgYmUgY2FsbGVkLgogICAgICAqIEBwYXJhbSBhbmltCiAgICAgICovCisgICAgLy8gVE9ETzogUmVmYWN0b3IgdGhlIHVzYWdlIG9mIHRoZSBtZXRob2QgLSBub3cgaXQgaXMgY2FsbGVkIG5vdCBvbmx5IHdoZW4gdGhlIGRpcmVjdG9yeQorICAgIC8vIGNoYW5nZWQsIGJ1dCBhbHNvIHRvIHJlZnJlc2ggdGhlIGNvbnRlbnQgb2YgdGhlIGRpcmVjdG9yeSB3aGlsZSBzZWFyY2hpbmcKICAgICBmaW5hbCB2b2lkIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoaW50IGFuaW0pIHsKICAgICAgICAgbURpcmVjdG9yeUNvbnRhaW5lci5zZXREcmF3RGlzYXBwZWFyaW5nRmlyc3QoYW5pbSA9PSBBTklNX0RPV04pOwogICAgICAgICBvbkRpcmVjdG9yeUNoYW5nZWQoYW5pbSk7CkBAIC0zMjUsNyArMzM5LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICB1cGRhdGVBY3Rpb25CYXIoKTsKLSAgICAgICAgaW52YWxpZGF0ZU9wdGlvbnNNZW51KCk7CisKKyAgICAgICAgLy8gUHJldmVudHMgc2VhcmNoVmlldyBmcm9tIGJlaW5nIHJlY3JlYXRlZCB3aGlsZSBzZWFyY2hpbmcKKyAgICAgICAgaWYgKCFtU2VhcmNoTWFuYWdlci5pc1NlYXJjaGluZygpKSB7CisgICAgICAgICAgICBpbnZhbGlkYXRlT3B0aW9uc01lbnUoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBnZXRFeGNsdWRlZEF1dGhvcml0aWVzKCkgewpAQCAtNDUwLDcgKzQ2OCw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1TdGF0ZS5zdGFja1RvdWNoZWQpIHsKKyAgICAgICAgaWYgKCFtU3RhdGUuaGFzTG9jYXRpb25DaGFuZ2VkKCkpIHsKICAgICAgICAgICAgIHN1cGVyLm9uQmFja1ByZXNzZWQoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDcxLDkgKzQ4OSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHJlc3RvcmVkIHN0YWNrIHRvIGVuc3VyZSB3ZSBoYXZlIGZyZXNoZXN0IGRhdGEKICAgICAgICAgICAgIHN0YWNrLnVwZGF0ZURvY3VtZW50cyhnZXRDb250ZW50UmVzb2x2ZXIoKSk7Ci0KLSAgICAgICAgICAgIG1TdGF0ZS5zdGFjayA9IHN0YWNrOwotICAgICAgICAgICAgbVN0YXRlLnN0YWNrVG91Y2hlZCA9IHRydWU7CisgICAgICAgICAgICBtU3RhdGUuc2V0U3RhY2soc3RhY2spOwogICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX1NJREUpOwogCiAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC00ODEsMzEgKzQ5NywzNSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBEb2N1bWVudEluZm8gZ2V0Um9vdERvY3VtZW50QmxvY2tpbmcoUm9vdEluZm8gcm9vdCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoCisgICAgICAgICAgICAgICAgICAgIHJvb3QuYXV0aG9yaXR5LCByb290LmRvY3VtZW50SWQpOworICAgICAgICAgICAgcmV0dXJuIERvY3VtZW50SW5mby5mcm9tVXJpKGdldENvbnRlbnRSZXNvbHZlcigpLCB1cmkpOworICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLncobVRhZywgIkZhaWxlZCB0byBmaW5kIHJvb3QiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCiAgICAgZmluYWwgY2xhc3MgUGlja1Jvb3RUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIERvY3VtZW50SW5mbz4gewogICAgICAgICBwcml2YXRlIFJvb3RJbmZvIG1Sb290OworICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVRvdWNoZWQ7CiAKLSAgICAgICAgcHVibGljIFBpY2tSb290VGFzayhSb290SW5mbyByb290KSB7CisgICAgICAgIHB1YmxpYyBQaWNrUm9vdFRhc2soUm9vdEluZm8gcm9vdCwgYm9vbGVhbiB0b3VjaGVkKSB7CiAgICAgICAgICAgICBtUm9vdCA9IHJvb3Q7CisgICAgICAgICAgICBtVG91Y2hlZCA9IHRvdWNoZWQ7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIERvY3VtZW50SW5mbyBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBVcmkgdXJpID0gRG9jdW1lbnRzQ29udHJhY3QuYnVpbGREb2N1bWVudFVyaSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Sb290LmF1dGhvcml0eSwgbVJvb3QuZG9jdW1lbnRJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIERvY3VtZW50SW5mby5mcm9tVXJpKGdldENvbnRlbnRSZXNvbHZlcigpLCB1cmkpOwotICAgICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhtVGFnLCAiRmFpbGVkIHRvIGZpbmQgcm9vdCIsIGUpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGdldFJvb3REb2N1bWVudEJsb2NraW5nKG1Sb290KTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKERvY3VtZW50SW5mbyByZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TdGF0ZS5zdGFjay5wdXNoKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgbVN0YXRlLnN0YWNrVG91Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX1NJREUpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmICFpc0Rlc3Ryb3llZCgpKSB7CisgICAgICAgICAgICAgICAgb3BlbkNvbnRhaW5lckRvY3VtZW50KHJlc3VsdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01OTEsNiArNjExLDQwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmaW5hbCBjbGFzcyBIYW5kbGVSb290c0NoYW5nZWRUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFJvb3RJbmZvLCBWb2lkLCBSb290SW5mbz4geworICAgICAgICBEb2N1bWVudEluZm8gbUhvbWU7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBSb290SW5mbyBkb0luQmFja2dyb3VuZChSb290SW5mby4uLiByb290cykgeworICAgICAgICAgICAgY2hlY2tBcmd1bWVudChyb290cy5sZW5ndGggPT0gMSk7CisgICAgICAgICAgICBmaW5hbCBSb290SW5mbyBjdXJyZW50Um9vdCA9IHJvb3RzWzBdOworICAgICAgICAgICAgZmluYWwgQ29sbGVjdGlvbjxSb290SW5mbz4gY2FjaGVkUm9vdHMgPSBtUm9vdHMuZ2V0Um9vdHNCbG9ja2luZygpOworICAgICAgICAgICAgUm9vdEluZm8gaG9tZVJvb3QgPSBudWxsOworICAgICAgICAgICAgZm9yIChmaW5hbCBSb290SW5mbyByb290IDogY2FjaGVkUm9vdHMpIHsKKyAgICAgICAgICAgICAgICBpZiAocm9vdC5pc0hvbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBob21lUm9vdCA9IHJvb3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyb290LmdldFVyaSgpLmVxdWFscyhjdXJyZW50Um9vdC5nZXRVcmkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgcm9vdCBhcyB0aGUgY3VycmVudCByb290IHdhcyBub3QgcmVtb3ZlZC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwoaG9tZVJvb3QpOworICAgICAgICAgICAgbUhvbWUgPSBnZXRSb290RG9jdW1lbnRCbG9ja2luZyhob21lUm9vdCk7CisgICAgICAgICAgICByZXR1cm4gaG9tZVJvb3Q7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0RXhlY3V0ZShSb290SW5mbyBob21lUm9vdCkgeworICAgICAgICAgICAgaWYgKGhvbWVSb290ICE9IG51bGwgJiYgbUhvbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIENsZWFyIGVudGlyZSBiYWNrc3RhY2sgYW5kIHN0YXJ0IGluIG5ldyByb290CisgICAgICAgICAgICAgICAgbVN0YXRlLm9uUm9vdENoYW5nZWQoaG9tZVJvb3QpOworICAgICAgICAgICAgICAgIG1TZWFyY2hNYW5hZ2VyLnVwZGF0ZShob21lUm9vdCk7CisgICAgICAgICAgICAgICAgb3BlbkNvbnRhaW5lckRvY3VtZW50KG1Ib21lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIGZpbmFsIGNsYXNzIEl0ZW1TZWxlY3RlZExpc3RlbmVyIGltcGxlbWVudHMgT25JdGVtU2VsZWN0ZWRMaXN0ZW5lciB7CiAKICAgICAgICAgYm9vbGVhbiBtSWdub3JlTmV4dE5hdmlnYXRpb247CkBAIC02MDMsOCArNjU3LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgd2hpbGUgKG1TdGF0ZS5zdGFjay5zaXplKCkgPiBwb3NpdGlvbiArIDEpIHsKLSAgICAgICAgICAgICAgICBtU3RhdGUuc3RhY2tUb3VjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBtU3RhdGUuc3RhY2sucG9wKCk7CisgICAgICAgICAgICAgICAgbVN0YXRlLnBvcERvY3VtZW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKEFOSU1fVVApOwogICAgICAgICB9CkBAIC02ODIsNyArNzM1LDcgQEAKICAgICAgKiBGYWNhZGUgb3ZlciB0aGUgdmFyaW91cyBzZWFyY2ggcGFydHMgaW4gdGhlIG1lbnUuCiAgICAgICovCiAgICAgZmluYWwgY2xhc3MgU2VhcmNoTWFuYWdlciBpbXBsZW1lbnRzCi0gICAgICAgICAgICBTZWFyY2hWaWV3Lk9uQ2xvc2VMaXN0ZW5lciwgT25BY3Rpb25FeHBhbmRMaXN0ZW5lciwgT25RdWVyeVRleHRMaXN0ZW5lciwKKyAgICAgICAgICAgIFNlYXJjaFZpZXcuT25DbG9zZUxpc3RlbmVyLCBPblF1ZXJ5VGV4dExpc3RlbmVyLCBPbkNsaWNrTGlzdGVuZXIsIE9uRm9jdXNDaGFuZ2VMaXN0ZW5lciwKICAgICAgICAgICAgIERvY3VtZW50c1Rvb2xCYXIuT25BY3Rpb25WaWV3Q29sbGFwc2VkTGlzdGVuZXIgewogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtU2VhcmNoRXhwYW5kZWQ7CkBAIC03MDAsOSArNzUzLDEwIEBACiAgICAgICAgICAgICBtVmlldyA9IChTZWFyY2hWaWV3KSBtTWVudS5nZXRBY3Rpb25WaWV3KCk7CiAKICAgICAgICAgICAgIG1BY3Rpb25CYXIuc2V0T25BY3Rpb25WaWV3Q29sbGFwc2VkTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgICAgICBtTWVudS5zZXRPbkFjdGlvbkV4cGFuZExpc3RlbmVyKHRoaXMpOwogICAgICAgICAgICAgbVZpZXcuc2V0T25RdWVyeVRleHRMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgICAgIG1WaWV3LnNldE9uQ2xvc2VMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIG1WaWV3LnNldE9uU2VhcmNoQ2xpY2tMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgIG1WaWV3LnNldE9uUXVlcnlUZXh0Rm9jdXNDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtNzU1LDggKzgwOSwxMCBAQAogICAgICAgICAgKiAgICAgc2VhcmNoIGN1cnJlbnRseS4KICAgICAgICAgICovCiAgICAgICAgIGJvb2xlYW4gY2FuY2VsU2VhcmNoKCkgewotICAgICAgICAgICAgaWYgKG1BY3Rpb25CYXIuaGFzRXhwYW5kZWRBY3Rpb25WaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBtQWN0aW9uQmFyLmNvbGxhcHNlQWN0aW9uVmlldygpOworICAgICAgICAgICAgaWYgKGlzRXhwYW5kZWQoKSB8fCBpc1NlYXJjaGluZygpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHF1ZXJ5IHN0cmluZyBpcyBub3QgZW1wdHkgc2VhcmNoIHZpZXcgd29uJ3QgZ2V0IGljb25pZmllZAorICAgICAgICAgICAgICAgIG1WaWV3LnNldFF1ZXJ5KCIiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbVZpZXcuc2V0SWNvbmlmaWVkKHRydWUpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzcwLDYgKzgyNiwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIG1TZWFyY2hFeHBhbmRlZDsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBDbGVhcnMgdGhlIHNlYXJjaC4KKyAgICAgICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGNsZWFyaW5nL2Rpc21pc3NpbmcgU2VhcmNoVmlldyBzaG91bGQgYmUKKyAgICAgICAgICogICAgICBvdmVycmlkZGVuLiBGYWxzZSBvdGhlcndpc2UuCisgICAgICAgICAqLwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGJvb2xlYW4gb25DbG9zZSgpIHsKICAgICAgICAgICAgIG1TZWFyY2hFeHBhbmRlZCA9IGZhbHNlOwpAQCAtNzc4LDMzICs4MzksMzMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1TdGF0ZS5jdXJyZW50U2VhcmNoID0gbnVsbDsKLSAgICAgICAgICAgIG9uQ3VycmVudERpcmVjdG9yeUNoYW5nZWQoQU5JTV9OT05FKTsKKyAgICAgICAgICAgIG1WaWV3LnNldEJhY2tncm91bmRDb2xvcigKKyAgICAgICAgICAgICAgICAgICAgZ2V0UmVzb3VyY2VzKCkuZ2V0Q29sb3IoYW5kcm9pZC5SLmNvbG9yLnRyYW5zcGFyZW50LCBudWxsKSk7CisKKyAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIGRpcmVjdG9yeSBpZiBhIHNlYXJjaCB3YXMgZG9uZQorICAgICAgICAgICAgaWYobVN0YXRlLmN1cnJlbnRTZWFyY2ggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1TdGF0ZS5jdXJyZW50U2VhcmNoID0gbnVsbDsKKyAgICAgICAgICAgICAgICBvbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKEFOSU1fTk9ORSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBTZXRzIG1TZWFyY2hFeHBhbmRlZC4KKyAgICAgICAgICogQ2FsbGVkIHdoZW4gc2VhcmNoIGljb24gaXMgY2xpY2tlZCB0byBzdGFydCBzZWFyY2guCisgICAgICAgICAqIFVzZWQgdG8gZGV0ZWN0IHdoZW4gdGhlIHZpZXcgZXhwYW5kZWQgaW5zdGVhZCBvZiBvbk1lbnVJdGVtQWN0aW9uRXhwYW5kLCBiZWNhdXNlCisgICAgICAgICAqIFNlYXJjaFZpZXcgaGFzIHNob3dBc0FjdGlvbiBzZXQgdG8gYWx3YXlzIGFuZCBvbk1lbnVJdGVtQWN0aW9uKiBtZXRob2RzIGFyZSBub3QgY2FsbGVkLgorICAgICAgICAgKi8KICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1BY3Rpb25FeHBhbmQoTWVudUl0ZW0gaXRlbSkgeworICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrIChWaWV3IHYpIHsKICAgICAgICAgICAgIG1TZWFyY2hFeHBhbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICB1cGRhdGVBY3Rpb25CYXIoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1BY3Rpb25Db2xsYXBzZShNZW51SXRlbSBpdGVtKSB7Ci0gICAgICAgICAgICBtU2VhcmNoRXhwYW5kZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChtSWdub3JlTmV4dENvbGxhcHNlKSB7Ci0gICAgICAgICAgICAgICAgbUlnbm9yZU5leHRDb2xsYXBzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN0YXRlLmN1cnJlbnRTZWFyY2ggPSBudWxsOwotICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX05PTkUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBtVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3IoCisgICAgICAgICAgICAgICAgICAgIGdldFJlc291cmNlcygpLmdldENvbG9yKFIuY29sb3IubWVudV9zZWFyY2hfYmFja2dyb3VuZCwgbnVsbCkpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uUXVlcnlUZXh0U3VibWl0KFN0cmluZyBxdWVyeSkgewotICAgICAgICAgICAgbVNlYXJjaEV4cGFuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG1TdGF0ZS5jdXJyZW50U2VhcmNoID0gcXVlcnk7CiAgICAgICAgICAgICBtVmlldy5jbGVhckZvY3VzKCk7CiAgICAgICAgICAgICBvbkN1cnJlbnREaXJlY3RvcnlDaGFuZ2VkKEFOSU1fTk9ORSk7CkBAIC04MTcsNiArODc4LDE4IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25Gb2N1c0NoYW5nZShWaWV3IHYsIGJvb2xlYW4gaGFzRm9jdXMpIHsKKyAgICAgICAgICAgIGlmKCFoYXNGb2N1cykgeworICAgICAgICAgICAgICAgIGlmKG1TdGF0ZS5jdXJyZW50U2VhcmNoID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVZpZXcuc2V0SWNvbmlmaWVkKHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKFRleHRVdGlscy5pc0VtcHR5KG1WaWV3LmdldFF1ZXJ5KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbFNlYXJjaCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkFjdGlvblZpZXdDb2xsYXBzZWQoKSB7CiAgICAgICAgICAgICB1cGRhdGVBY3Rpb25CYXIoKTsKICAgICAgICAgfQpAQCAtODI2LDcgKzg5OSw3IEBACiAgICAgICogSW50ZXJmYWNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gY3VycmVudCB2aWV3IG9mIGRvY3VtZW50cwogICAgICAqIGV2ZW4gd2hlbiBhbGwgZG9jdW1lbnRzIGFyZSBub3QgaG9tZWQgdG8gdGhlIHNhbWUgcGFyZW50LgogICAgICAqLwotICAgIHB1YmxpYyBpbnRlcmZhY2UgRG9jdW1lbnRDb250ZXh0IHsKKyAgICBwdWJsaWMgaW50ZXJmYWNlIFNpYmxpbmdQcm92aWRlciB7CiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5zIHRoZSBjdXJzb3IgZm9yIHRoZSBzZWxlY3RlZCBkb2N1bWVudC4gVGhlIGN1cnNvciBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZQogICAgICAgICAgKiBkZXRhaWxzIGFib3V0IGEgZG9jdW1lbnQgYW5kIGl0cyBzaWJsaW5ncy4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Db3B5U2VydmljZS5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0NvcHlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5OWM4MDYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0NvcHlTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWk7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkLkRFQlVHOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yTG9uZzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBwLkludGVudFNlcnZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwotaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLlZpc2libGVGb3JUZXN0aW5nOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LlNuYWNrYmFyOwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRTdGFjazsKLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Sb290SW5mbzsKLQotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnRleHQuTnVtYmVyRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk9iamVjdHM7Ci0KLXB1YmxpYyBjbGFzcyBDb3B5U2VydmljZSBleHRlbmRzIEludGVudFNlcnZpY2UgewotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb3B5U2VydmljZSI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FOQ0VMID0gImNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkNBTkNFTCI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU1JDX0xJU1QgPSAiY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU1JDX0xJU1QiOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0ZBSUxVUkUgPSAiY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRkFJTFVSRSI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVFJBTlNGRVJfTU9ERSA9ICJjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5UUkFOU0ZFUl9NT0RFIjsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRSQU5TRkVSX01PREVfQ09QWSA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBTlNGRVJfTU9ERV9NT1ZFID0gMjsKLQotICAgIC8vIFRPRE86IE1vdmUgaXQgdG8gYSBzaGFyZWQgZmlsZSB3aGVuIG1vcmUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQuCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFJTFVSRV9DT1BZID0gMTsKLQotICAgIC8vIFBhcmFtZXRlcnMgb2YgdGhlIGNvcHkgam9iLiBSZXF1ZXN0cyB0byBhbiBJbnRlbnRTZXJ2aWNlIGFyZSBzZXJpYWxpemVkIHNvIHRoaXMgY29kZSBvbmx5Ci0gICAgLy8gbmVlZHMgdG8gZGVhbCB3aXRoIG9uZSBqb2IgYXQgYSB0aW1lLgotICAgIC8vIE5PVEU6IFRoaXMgbXVzdCBiZSBkZWNsYXJlZCBieSBjb25jcmV0ZSB0eXBlIGFzIHRoZSBjb25jcmV0ZSB0eXBlCi0gICAgLy8gaXMgcmVxdWlyZWQgYnkgcHV0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhLgotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4gbUZhaWxlZEZpbGVzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgICBwcml2YXRlIFBvd2VyTWFuYWdlciBtUG93ZXJNYW5hZ2VyOwotCi0gICAgcHJpdmF0ZSBOb3RpZmljYXRpb25NYW5hZ2VyIG1Ob3RpZmljYXRpb25NYW5hZ2VyOwotICAgIHByaXZhdGUgTm90aWZpY2F0aW9uLkJ1aWxkZXIgbVByb2dyZXNzQnVpbGRlcjsKLQotICAgIC8vIEpvYnMgYXJlIHNlcmlhbGl6ZWQgYnV0IGEgam9iIElEIGlzIHVzZWQsIHRvIGF2b2lkIG1peGluZyB1cCBjYW5jZWxsYXRpb24gcmVxdWVzdHMuCi0gICAgcHJpdmF0ZSBTdHJpbmcgbUpvYklkOwotICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBtSXNDYW5jZWxsZWQ7Ci0gICAgcHJpdmF0ZSBsb25nIG1CYXRjaFNpemU7Ci0gICAgcHJpdmF0ZSBsb25nIG1CeXRlc0NvcGllZDsKLSAgICBwcml2YXRlIGxvbmcgbVN0YXJ0VGltZTsKLSAgICBwcml2YXRlIGxvbmcgbUxhc3ROb3RpZmljYXRpb25UaW1lOwotICAgIC8vIFNwZWVkIGVzdGltYXRpb24KLSAgICBwcml2YXRlIGxvbmcgbUJ5dGVzQ29waWVkU2FtcGxlOwotICAgIHByaXZhdGUgbG9uZyBtU2FtcGxlVGltZTsKLSAgICBwcml2YXRlIGxvbmcgbVNwZWVkOwotICAgIHByaXZhdGUgbG9uZyBtUmVtYWluaW5nVGltZTsKLSAgICAvLyBQcm92aWRlciBjbGllbnRzIGFyZSBhY3F1aXJlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGVhY2ggY29weSBqb2IuIE5vdGUgdGhhdCB0aGVyZSBpcyBhbgotICAgIC8vIGltcGxpY2l0IGFzc3VtcHRpb24gdGhhdCBhbGwgc3JjcyBjb21lIGZyb20gdGhlIHNhbWUgYXV0aG9yaXR5LgotICAgIHByaXZhdGUgQ29udGVudFByb3ZpZGVyQ2xpZW50IG1TcmNDbGllbnQ7Ci0gICAgcHJpdmF0ZSBDb250ZW50UHJvdmlkZXJDbGllbnQgbURzdENsaWVudDsKLQotICAgIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gICAgQE51bGxhYmxlIHByaXZhdGUgVGVzdE9ubHlMaXN0ZW5lciBtSm9iRmluaXNoZWRMaXN0ZW5lcjsKLQotICAgIHB1YmxpYyBDb3B5U2VydmljZSgpIHsKLSAgICAgICAgc3VwZXIoIkNvcHlTZXJ2aWNlIik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhcnRzIHRoZSBzZXJ2aWNlIGZvciBhIGNvcHkgb3BlcmF0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBmb3IgdGhlIGludGVudC4KLSAgICAgKiBAcGFyYW0gc3JjRG9jcyBBIGxpc3Qgb2Ygc3JjIGZpbGVzIHRvIGNvcHkuCi0gICAgICogQHBhcmFtIGRzdFN0YWNrIFRoZSBjb3B5IGRlc3RpbmF0aW9uIHN0YWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdGFydChBY3Rpdml0eSBhY3Rpdml0eSwgTGlzdDxEb2N1bWVudEluZm8+IHNyY0RvY3MsIERvY3VtZW50U3RhY2sgZHN0U3RhY2ssCi0gICAgICAgICAgICBpbnQgbW9kZSkgewotICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gYWN0aXZpdHkuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIGZpbmFsIEludGVudCBjb3B5SW50ZW50ID0gbmV3IEludGVudChhY3Rpdml0eSwgQ29weVNlcnZpY2UuY2xhc3MpOwotICAgICAgICBjb3B5SW50ZW50LnB1dFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYSgKLSAgICAgICAgICAgICAgICBFWFRSQV9TUkNfTElTVCwKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBjcmVhdGUgYSBjb3B5IHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSA6KQotICAgICAgICAgICAgICAgIHNyY0RvY3MgaW5zdGFuY2VvZiBBcnJheUxpc3QKLSAgICAgICAgICAgICAgICAgICAgPyAoQXJyYXlMaXN0PERvY3VtZW50SW5mbz4pIHNyY0RvY3MKLSAgICAgICAgICAgICAgICAgICAgOiBuZXcgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4oc3JjRG9jcykpOwotICAgICAgICBjb3B5SW50ZW50LnB1dEV4dHJhKFNoYXJlZC5FWFRSQV9TVEFDSywgKFBhcmNlbGFibGUpIGRzdFN0YWNrKTsKLSAgICAgICAgY29weUludGVudC5wdXRFeHRyYShFWFRSQV9UUkFOU0ZFUl9NT0RFLCBtb2RlKTsKLQotICAgICAgICBpbnQgdG9hc3RNZXNzYWdlID0gKG1vZGUgPT0gVFJBTlNGRVJfTU9ERV9DT1BZKSA/IFIucGx1cmFscy5jb3B5X2JlZ2luCi0gICAgICAgICAgICAgICAgOiBSLnBsdXJhbHMubW92ZV9iZWdpbjsKLSAgICAgICAgU25hY2tiYXJzLm1ha2VTbmFja2JhcihhY3Rpdml0eSwKLSAgICAgICAgICAgICAgICByZXMuZ2V0UXVhbnRpdHlTdHJpbmcodG9hc3RNZXNzYWdlLCBzcmNEb2NzLnNpemUoKSwgc3JjRG9jcy5zaXplKCkpLAotICAgICAgICAgICAgICAgIFNuYWNrYmFyLkxFTkdUSF9TSE9SVCkuc2hvdygpOwotICAgICAgICBhY3Rpdml0eS5zdGFydFNlcnZpY2UoY29weUludGVudCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBvblN0YXJ0Q29tbWFuZChJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCBzdGFydElkKSB7Ci0gICAgICAgIGlmIChpbnRlbnQuaGFzRXh0cmEoRVhUUkFfQ0FOQ0VMKSkgewotICAgICAgICAgICAgaGFuZGxlQ2FuY2VsKGludGVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHN1cGVyLm9uU3RhcnRDb21tYW5kKGludGVudCwgZmxhZ3MsIHN0YXJ0SWQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uSGFuZGxlSW50ZW50KEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgaWYgKGludGVudC5oYXNFeHRyYShFWFRSQV9DQU5DRUwpKSB7Ci0gICAgICAgICAgICBoYW5kbGVDYW5jZWwoaW50ZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIFBvd2VyTWFuYWdlci5XYWtlTG9jayB3YWtlTG9jayA9IG1Qb3dlck1hbmFnZXIKLSAgICAgICAgICAgICAgICAubmV3V2FrZUxvY2soUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCBUQUcpOwotICAgICAgICBmaW5hbCBBcnJheUxpc3Q8RG9jdW1lbnRJbmZvPiBzcmNzID0gaW50ZW50LmdldFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShFWFRSQV9TUkNfTElTVCk7Ci0gICAgICAgIGZpbmFsIERvY3VtZW50U3RhY2sgc3RhY2sgPSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUV4dHJhKFNoYXJlZC5FWFRSQV9TVEFDSyk7Ci0gICAgICAgIC8vIENvcHkgYnkgZGVmYXVsdC4KLSAgICAgICAgZmluYWwgaW50IHRyYW5zZmVyTW9kZSA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9UUkFOU0ZFUl9NT0RFLCBUUkFOU0ZFUl9NT0RFX0NPUFkpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB3YWtlTG9jay5hY3F1aXJlKCk7Ci0KLSAgICAgICAgICAgIC8vIEFjcXVpcmUgY29udGVudCBwcm92aWRlcnMuCi0gICAgICAgICAgICBtU3JjQ2xpZW50ID0gRG9jdW1lbnRzQXBwbGljYXRpb24uYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXJPclRocm93KGdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICBzcmNzLmdldCgwKS5hdXRob3JpdHkpOwotICAgICAgICAgICAgbURzdENsaWVudCA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdyhnZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sucGVlaygpLmF1dGhvcml0eSk7Ci0KLSAgICAgICAgICAgIHNldHVwQ29weUpvYihzcmNzLCBzdGFjaywgdHJhbnNmZXJNb2RlKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcmNzLnNpemUoKSAmJiAhbUlzQ2FuY2VsbGVkOyArK2kpIHsKLSAgICAgICAgICAgICAgICBjb3B5KHNyY3MuZ2V0KGkpLCBzdGFjay5wZWVrKCksIHRyYW5zZmVyTW9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBDYXRjaC1hbGwgdG8gcHJldmVudCBhbnkgY29weSBlcnJvcnMgZnJvbSB3ZWRnaW5nIHRoZSBhcHAuCi0gICAgICAgICAgICBMb2cuZShUQUcsICJFeGNlcHRpb25zIG9jY3VycmVkIGR1cmluZyBjb3B5aW5nIiwgZSk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkNsZWFuaW5nIHVwIGFmdGVyIGNvcHkiKTsKLSAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShtU3JjQ2xpZW50KTsKLSAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShtRHN0Q2xpZW50KTsKLQotICAgICAgICAgICAgd2FrZUxvY2sucmVsZWFzZSgpOwotCi0gICAgICAgICAgICAvLyBEaXNtaXNzIHRoZSBvbmdvaW5nIGNvcHkgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNvcHkgaXMgZG9uZS4KLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChtSm9iSWQsIDApOwotCi0gICAgICAgICAgICBpZiAobUZhaWxlZEZpbGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsIG1GYWlsZWRGaWxlcy5zaXplKCkgKyAiIGZpbGVzIGZhaWxlZCB0byBjb3B5Iik7Ci0gICAgICAgICAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgSW50ZW50IG5hdmlnYXRlSW50ZW50ID0gYnVpbGROYXZpZ2F0ZUludGVudChjb250ZXh0LCBzdGFjayk7Ci0gICAgICAgICAgICAgICAgbmF2aWdhdGVJbnRlbnQucHV0RXh0cmEoRVhUUkFfRkFJTFVSRSwgRkFJTFVSRV9DT1BZKTsKLSAgICAgICAgICAgICAgICBuYXZpZ2F0ZUludGVudC5wdXRFeHRyYShFWFRSQV9UUkFOU0ZFUl9NT0RFLCB0cmFuc2Zlck1vZGUpOwotICAgICAgICAgICAgICAgIG5hdmlnYXRlSW50ZW50LnB1dFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShFWFRSQV9TUkNfTElTVCwgbUZhaWxlZEZpbGVzKTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGludCB0aXRsZVJlc291cmNlSWQgPSAodHJhbnNmZXJNb2RlID09IFRSQU5TRkVSX01PREVfQ09QWSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBSLnBsdXJhbHMuY29weV9lcnJvcl9ub3RpZmljYXRpb25fdGl0bGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgUi5wbHVyYWxzLm1vdmVfZXJyb3Jfbm90aWZpY2F0aW9uX3RpdGxlKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBOb3RpZmljYXRpb24uQnVpbGRlciBlcnJvckJ1aWxkZXIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIodGhpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUoY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRRdWFudGl0eVN0cmluZyh0aXRsZVJlc291cmNlSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5zaXplKCksIG1GYWlsZWRGaWxlcy5zaXplKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUZXh0KGdldFN0cmluZyhSLnN0cmluZy5ub3RpZmljYXRpb25fdG91Y2hfZm9yX2RldGFpbHMpKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRJbnRlbnQoUGVuZGluZ0ludGVudC5nZXRBY3Rpdml0eShjb250ZXh0LCAwLCBuYXZpZ2F0ZUludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5GTEFHX1VQREFURV9DVVJSRU5UIHwgUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9UKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDYXRlZ29yeShOb3RpZmljYXRpb24uQ0FURUdPUllfRVJST1IpCi0gICAgICAgICAgICAgICAgICAgICAgICAuc2V0U21hbGxJY29uKFIuZHJhd2FibGUuaWNfbWVudV9jb3B5KQotICAgICAgICAgICAgICAgICAgICAgICAgLnNldEF1dG9DYW5jZWwodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KG1Kb2JJZCwgMCwgZXJyb3JCdWlsZGVyLmJ1aWxkKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUpvYkZpbmlzaGVkTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1Kb2JGaW5pc2hlZExpc3RlbmVyLm9uRmluaXNoZWQobUZhaWxlZEZpbGVzKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJEb25lIGNsZWFuaW5nIHVwIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoKTsKLSAgICAgICAgbVBvd2VyTWFuYWdlciA9IGdldFN5c3RlbVNlcnZpY2UoUG93ZXJNYW5hZ2VyLmNsYXNzKTsKLSAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIgPSBnZXRTeXN0ZW1TZXJ2aWNlKE5vdGlmaWNhdGlvbk1hbmFnZXIuY2xhc3MpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdXAgdGhlIENvcHlTZXJ2aWNlIHRvIHN0YXJ0IHRyYWNraW5nIGFuZCBzZW5kaW5nIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBnaXZlbiBiYXRjaCBvZgotICAgICAqIGZpbGVzLgotICAgICAqCi0gICAgICogQHBhcmFtIHNyY3MgQSBsaXN0IG9mIHNyYyBmaWxlcyB0byBjb3B5LgotICAgICAqIEBwYXJhbSBzdGFjayBUaGUgY29weSBkZXN0aW5hdGlvbiBzdGFjay4KLSAgICAgKiBAcGFyYW0gdHJhbnNmZXJNb2RlIFRoZSBtb2RlIChpLmUuIGNvcHksIG9yIG1vdmUpCi0gICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgc2V0dXBDb3B5Sm9iKEFycmF5TGlzdDxEb2N1bWVudEluZm8+IHNyY3MsIERvY3VtZW50U3RhY2sgc3RhY2ssIGludCB0cmFuc2Zlck1vZGUpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBjb3B5aW5nID0gKHRyYW5zZmVyTW9kZSA9PSBUUkFOU0ZFUl9NT0RFX0NPUFkpOwotICAgICAgICAvLyBDcmVhdGUgYW4gSUQgZm9yIHRoaXMgY29weSBqb2IuIFVzZSB0aGUgdGltZXN0YW1wLgotICAgICAgICBtSm9iSWQgPSBTdHJpbmcudmFsdWVPZihTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0gICAgICAgIC8vIFJlc2V0IHRoZSBjYW5jZWxsYXRpb24gZmxhZy4KLSAgICAgICAgbUlzQ2FuY2VsbGVkID0gZmFsc2U7Ci0KLSAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgICAgIGZpbmFsIEludGVudCBuYXZpZ2F0ZUludGVudCA9IGJ1aWxkTmF2aWdhdGVJbnRlbnQoY29udGV4dCwgc3RhY2spOwotCi0gICAgICAgIGZpbmFsIFN0cmluZyBjb250ZW50VGl0bGUgPSBnZXRTdHJpbmcoY29weWluZyA/IFIuc3RyaW5nLmNvcHlfbm90aWZpY2F0aW9uX3RpdGxlCi0gICAgICAgICAgICAgICAgOiBSLnN0cmluZy5tb3ZlX25vdGlmaWNhdGlvbl90aXRsZSk7Ci0gICAgICAgIG1Qcm9ncmVzc0J1aWxkZXIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIodGhpcykKLSAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRpdGxlKGNvbnRlbnRUaXRsZSkKLSAgICAgICAgICAgICAgICAuc2V0Q29udGVudEludGVudChQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KGNvbnRleHQsIDAsIG5hdmlnYXRlSW50ZW50LCAwKSkKLSAgICAgICAgICAgICAgICAuc2V0Q2F0ZWdvcnkoTm90aWZpY2F0aW9uLkNBVEVHT1JZX1BST0dSRVNTKQotICAgICAgICAgICAgICAgIC5zZXRTbWFsbEljb24oUi5kcmF3YWJsZS5pY19tZW51X2NvcHkpCi0gICAgICAgICAgICAgICAgLnNldE9uZ29pbmcodHJ1ZSk7Ci0KLSAgICAgICAgZmluYWwgSW50ZW50IGNhbmNlbEludGVudCA9IG5ldyBJbnRlbnQodGhpcywgQ29weVNlcnZpY2UuY2xhc3MpOwotICAgICAgICBjYW5jZWxJbnRlbnQucHV0RXh0cmEoRVhUUkFfQ0FOQ0VMLCBtSm9iSWQpOwotICAgICAgICBtUHJvZ3Jlc3NCdWlsZGVyLmFkZEFjdGlvbihSLmRyYXdhYmxlLmljX2NhYl9jYW5jZWwsCi0gICAgICAgICAgICAgICAgZ2V0U3RyaW5nKGFuZHJvaWQuUi5zdHJpbmcuY2FuY2VsKSwgUGVuZGluZ0ludGVudC5nZXRTZXJ2aWNlKHRoaXMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxJbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QgfCBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQpKTsKLQotICAgICAgICAvLyBTZW5kIGFuIGluaXRpYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uLgotICAgICAgICBmaW5hbCBTdHJpbmcgY29udGVudFRleHQgPSBnZXRTdHJpbmcoY29weWluZyA/IFIuc3RyaW5nLmNvcHlfcHJlcGFyaW5nCi0gICAgICAgICAgICAgICAgOiBSLnN0cmluZy5tb3ZlX3ByZXBhcmluZyk7Ci0gICAgICAgIG1Qcm9ncmVzc0J1aWxkZXIuc2V0UHJvZ3Jlc3MoMCwgMCwgdHJ1ZSk7IC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3Mgd2hpbGUgc2V0dGluZyB1cC4KLSAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRDb250ZW50VGV4dChjb250ZW50VGV4dCk7Ci0gICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLm5vdGlmeShtSm9iSWQsIDAsIG1Qcm9ncmVzc0J1aWxkZXIuYnVpbGQoKSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgYmF0Y2ggcGFyYW1ldGVycy4KLSAgICAgICAgbUZhaWxlZEZpbGVzLmNsZWFyKCk7Ci0gICAgICAgIG1CYXRjaFNpemUgPSBjYWxjdWxhdGVGaWxlU2l6ZXMoc3Jjcyk7Ci0gICAgICAgIG1CeXRlc0NvcGllZCA9IDA7Ci0gICAgICAgIG1TdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgICAgbUxhc3ROb3RpZmljYXRpb25UaW1lID0gMDsKLSAgICAgICAgbUJ5dGVzQ29waWVkU2FtcGxlID0gMDsKLSAgICAgICAgbVNhbXBsZVRpbWUgPSAwOwotICAgICAgICBtU3BlZWQgPSAwOwotICAgICAgICBtUmVtYWluaW5nVGltZSA9IDA7Ci0KLSAgICAgICAgLy8gVE9ETzogQ2hlY2sgcHJlY29uZGl0aW9ucyBmb3IgY29weS4KLSAgICAgICAgLy8gLSBjaGVjayB0aGF0IHRoZSBkZXN0aW5hdGlvbiBoYXMgZW5vdWdoIHNwYWNlIGFuZCBpcyB3cml0ZWFibGU/Ci0gICAgICAgIC8vIC0gY2hlY2sgTUlNRSB0eXBlcz8KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIG5leHQgcnVuIGpvYiBpcyBmaW5pc2hlZC4KLSAgICAgKiBUaGlzIGlzIHRlc3QgT05MWSBpbnN0cnVtZW50YXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBpcyBmb3IgdXMgdG8gYWRkCi0gICAgICogYnJvYWRjYXN0IGludGVudHMgU09MRUxZIGZvciB0aGUgcHVycG9zZSBvZiB0ZXN0aW5nLgotICAgICAqIEBwYXJhbSBsaXN0ZW5lcgotICAgICAqLwotICAgIEBWaXNpYmxlRm9yVGVzdGluZwotICAgIHZvaWQgYWRkRmluaXNoZWRMaXN0ZW5lcihUZXN0T25seUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIHRoaXMubUpvYkZpbmlzaGVkTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ubHkgdXNlZCBmb3IgdGVzdGluZy4gSXMgdGhhdCBvYnZpb3VzIGVub3VnaD8KLSAgICAgKi8KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBpbnRlcmZhY2UgVGVzdE9ubHlMaXN0ZW5lciB7Ci0gICAgICAgIHZvaWQgb25GaW5pc2hlZChMaXN0PERvY3VtZW50SW5mbz4gZmFpbGVkKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxjdWxhdGVzIHRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIHRoZSBkb2N1bWVudHMgaW4gdGhlIGxpc3QuIERpcmVjdG9yaWVzIGFyZSByZWN1cnNlZAotICAgICAqIGludG8gYW5kIHRvdGFsZWQgdXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3JjcwotICAgICAqIEByZXR1cm4gU2l6ZSBpbiBieXRlcy4KLSAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgbG9uZyBjYWxjdWxhdGVGaWxlU2l6ZXMoTGlzdDxEb2N1bWVudEluZm8+IHNyY3MpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICBsb25nIHJlc3VsdCA9IDA7Ci0gICAgICAgIGZvciAoRG9jdW1lbnRJbmZvIHNyYyA6IHNyY3MpIHsKLSAgICAgICAgICAgIGlmIChzcmMuaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgIC8vIERpcmVjdG9yaWVzIG5lZWQgdG8gYmUgcmVjdXJzZWQgaW50by4KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2FsY3VsYXRlRmlsZVNpemVzSGVscGVyKHNyYy5kZXJpdmVkVXJpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNyYy5zaXplOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsY3VsYXRlcyAocmVjdXJzaXZlbHkpIHRoZSBjdW11bGF0aXZlIHNpemUgb2YgYWxsIHRoZSBmaWxlcyB1bmRlciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgotICAgICAqCi0gICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIGxvbmcgY2FsY3VsYXRlRmlsZVNpemVzSGVscGVyKFVyaSB1cmkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5ID0gdXJpLmdldEF1dGhvcml0eSgpOwotICAgICAgICBmaW5hbCBVcmkgcXVlcnlVcmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZENoaWxkRG9jdW1lbnRzVXJpKGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5nZXREb2N1bWVudElkKHVyaSkpOwotICAgICAgICBmaW5hbCBTdHJpbmcgcXVlcnlDb2x1bW5zW10gPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwKLSAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFLAotICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9TSVpFCi0gICAgICAgIH07Ci0KLSAgICAgICAgbG9uZyByZXN1bHQgPSAwOwotICAgICAgICBDdXJzb3IgY3Vyc29yID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGN1cnNvciA9IG1TcmNDbGllbnQucXVlcnkocXVlcnlVcmksIHF1ZXJ5Q29sdW1ucywgbnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICB3aGlsZSAoY3Vyc29yLm1vdmVUb05leHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNlIGludG8gZGlyZWN0b3JpZXMuCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFVyaSBzdWJkaXJVcmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZERvY3VtZW50VXJpKGF1dGhvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNhbGN1bGF0ZUZpbGVTaXplc0hlbHBlcihzdWJkaXJVcmkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IHJldHVybiAtMSBpZiB0aGUgc2l6ZSBpc24ndCBkZWZpbmVkLiBJZ25vcmUgdGhvc2UgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaXplID4gMCA/IHNpemUgOiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KGN1cnNvcik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbmNlbHMgdGhlIGN1cnJlbnQgY29weSBqb2IsIGlmIGl0cyBJRCBtYXRjaGVzIHRoZSBnaXZlbiBJRC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbnRlbnQgVGhlIGNhbmNlbGxhdGlvbiBpbnRlbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZUNhbmNlbChJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBjYW5jZWxsZWRJZCA9IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9DQU5DRUwpOwotICAgICAgICAvLyBEbyBub3RoaW5nIGlmIHRoZSBjYW5jZWxsZWQgSUQgZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBqb2IgSUQuIFRoaXMgcHJldmVudHMgcmFjZXkKLSAgICAgICAgLy8gY2FuY2VsbGF0aW9uIHJlcXVlc3RzIGZyb20gYWZmZWN0aW5nIHVucmVsYXRlZCBjb3B5IGpvYnMuICBIb3dldmVyLCBpZiB0aGUgY3VycmVudCBqb2IgSUQKLSAgICAgICAgLy8gaXMgbnVsbCwgdGhlIHNlcnZpY2UgbW9zdCBsaWtlbHkgY3Jhc2hlZCBhbmQgd2FzIHJldml2ZWQgYnkgdGhlIGluY29taW5nIGNhbmNlbCBpbnRlbnQuCi0gICAgICAgIC8vIEluIHRoYXQgY2FzZSwgYWx3YXlzIGFsbG93IHRoZSBjYW5jZWxsYXRpb24gdG8gcHJvY2VlZC4KLSAgICAgICAgaWYgKE9iamVjdHMuZXF1YWxzKG1Kb2JJZCwgY2FuY2VsbGVkSWQpIHx8IG1Kb2JJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBTZXQgdGhlIGNhbmNlbCBmbGFnLiBUaGlzIGNhdXNlcyB0aGUgY29weSBsb29wcyB0byBleGl0LgotICAgICAgICAgICAgbUlzQ2FuY2VsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIC8vIERpc21pc3MgdGhlIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBoZXJlIHJhdGhlciB0aGFuIGluIHRoZSBjb3B5IGxvb3AuIFRoaXMgcHJlc2VydmVzCi0gICAgICAgICAgICAvLyBpbnRlcmFjdGl2aXR5IGZvciB0aGUgdXNlciBpbiBjYXNlIHRoZSBjb3B5IGxvb3AgaXMgc3RhbGxlZC4KLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChjYW5jZWxsZWRJZCwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb2dzIHByb2dyZXNzIG9uIHRoZSBjdXJyZW50IGNvcHkgb3BlcmF0aW9uLiBEaXNwbGF5cy9VcGRhdGVzIHRoZSBwcm9ncmVzcyBub3RpZmljYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYnl0ZXNDb3BpZWQKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgbWFrZVByb2dyZXNzKGxvbmcgYnl0ZXNDb3BpZWQpIHsKLSAgICAgICAgbUJ5dGVzQ29waWVkICs9IGJ5dGVzQ29waWVkOwotICAgICAgICBkb3VibGUgZG9uZSA9IChkb3VibGUpIG1CeXRlc0NvcGllZCAvIG1CYXRjaFNpemU7Ci0gICAgICAgIFN0cmluZyBwZXJjZW50ID0gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZSgpLmZvcm1hdChkb25lKTsKLQotICAgICAgICAvLyBVcGRhdGUgdGltZSBlc3RpbWF0ZQotICAgICAgICBsb25nIGN1cnJlbnRUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSAtIG1TdGFydFRpbWU7Ci0KLSAgICAgICAgLy8gU2VuZCBvdXQgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9ucyBvbmNlIGEgc2Vjb25kLgotICAgICAgICBpZiAoY3VycmVudFRpbWUgLSBtTGFzdE5vdGlmaWNhdGlvblRpbWUgPiAxMDAwKSB7Ci0gICAgICAgICAgICB1cGRhdGVSZW1haW5pbmdUaW1lRXN0aW1hdGUoZWxhcHNlZFRpbWUpOwotICAgICAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRQcm9ncmVzcygxMDAsIChpbnQpIChkb25lICogMTAwKSwgZmFsc2UpOwotICAgICAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRDb250ZW50SW5mbyhwZXJjZW50KTsKLSAgICAgICAgICAgIGlmIChtUmVtYWluaW5nVGltZSA+IDApIHsKLSAgICAgICAgICAgICAgICBtUHJvZ3Jlc3NCdWlsZGVyLnNldENvbnRlbnRUZXh0KGdldFN0cmluZyhSLnN0cmluZy5jb3B5X3JlbWFpbmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIERhdGVVdGlscy5mb3JtYXREdXJhdGlvbihtUmVtYWluaW5nVGltZSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRDb250ZW50VGV4dChudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLm5vdGlmeShtSm9iSWQsIDAsIG1Qcm9ncmVzc0J1aWxkZXIuYnVpbGQoKSk7Ci0gICAgICAgICAgICBtTGFzdE5vdGlmaWNhdGlvblRpbWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdlbmVyYXRlcyBhbiBlc3RpbWF0ZSBvZiB0aGUgcmVtYWluaW5nIHRpbWUgaW4gdGhlIGNvcHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gZWxhcHNlZFRpbWUgVGhlIHRpbWUgZWxhcHNlZCBzbyBmYXIuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVJlbWFpbmluZ1RpbWVFc3RpbWF0ZShsb25nIGVsYXBzZWRUaW1lKSB7Ci0gICAgICAgIGZpbmFsIGxvbmcgc2FtcGxlRHVyYXRpb24gPSBlbGFwc2VkVGltZSAtIG1TYW1wbGVUaW1lOwotICAgICAgICBmaW5hbCBsb25nIHNhbXBsZVNwZWVkID0gKChtQnl0ZXNDb3BpZWQgLSBtQnl0ZXNDb3BpZWRTYW1wbGUpICogMTAwMCkgLyBzYW1wbGVEdXJhdGlvbjsKLSAgICAgICAgaWYgKG1TcGVlZCA9PSAwKSB7Ci0gICAgICAgICAgICBtU3BlZWQgPSBzYW1wbGVTcGVlZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TcGVlZCA9ICgoMyAqIG1TcGVlZCkgKyBzYW1wbGVTcGVlZCkgLyA0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TYW1wbGVUaW1lID4gMCAmJiBtU3BlZWQgPiAwKSB7Ci0gICAgICAgICAgICBtUmVtYWluaW5nVGltZSA9ICgobUJhdGNoU2l6ZSAtIG1CeXRlc0NvcGllZCkgKiAxMDAwKSAvIG1TcGVlZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1SZW1haW5pbmdUaW1lID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIG1TYW1wbGVUaW1lID0gZWxhcHNlZFRpbWU7Ci0gICAgICAgIG1CeXRlc0NvcGllZFNhbXBsZSA9IG1CeXRlc0NvcGllZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgYSB0aGUgZ2l2ZW4gZG9jdW1lbnRzIHRvIHRoZSBnaXZlbiBsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzcmNJbmZvIERvY3VtZW50SW5mb3MgZm9yIHRoZSBkb2N1bWVudHMgdG8gY29weS4KLSAgICAgKiBAcGFyYW0gZHN0RGlySW5mbyBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgotICAgICAqIEBwYXJhbSBtb2RlIFRoZSB0cmFuc2ZlciBtb2RlIChjb3B5IG9yIG1vdmUpLgotICAgICAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNvcHkoRG9jdW1lbnRJbmZvIHNyY0luZm8sIERvY3VtZW50SW5mbyBkc3REaXJJbmZvLCBpbnQgbW9kZSkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotCi0gICAgICAgIFN0cmluZyBvcERlc2MgPSBtb2RlID09IFRSQU5TRkVSX01PREVfQ09QWSA/ICJjb3B5IiA6ICJtb3ZlIjsKLQotICAgICAgICAvLyBHdWFyZCB1bnN1cHBvcnRlZCByZWN1cnNpdmUgb3BlcmF0aW9uLgotICAgICAgICBpZiAoZHN0RGlySW5mby5lcXVhbHMoc3JjSW5mbykgfHwgaXNEZXNjZW5kZW50T2Yoc3JjSW5mbywgZHN0RGlySW5mbykpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLAotICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcgcmVjdXJzaXZlICIgKyBvcERlc2MgKyAiIG9mIGRpcmVjdG9yeSAiICsgZHN0RGlySW5mby5kZXJpdmVkVXJpKTsKLSAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoc3JjSW5mbyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywKLSAgICAgICAgICAgICAgICAiUGVyZm9ybWluZyAiICsgb3BEZXNjICsgIiBvZiAiICsgc3JjSW5mby5kaXNwbGF5TmFtZQotICAgICAgICAgICAgICAgICsgIiAoIiArIHNyY0luZm8uZGVyaXZlZFVyaSArICIpIiArICIgdG8gIiArIGRzdERpckluZm8uZGlzcGxheU5hbWUKLSAgICAgICAgICAgICAgICArICIgKCIgKyBkc3REaXJJbmZvLmRlcml2ZWRVcmkgKyAiKSIpOwotCi0gICAgICAgIC8vIFdoZW4gY29weWluZyB3aXRoaW4gdGhlIHNhbWUgcHJvdmlkZXIsIHRyeSB0byB1c2Ugb3B0aW1pemVkIGNvcHlpbmcgYW5kIG1vdmluZy4KLSAgICAgICAgLy8gSWYgbm90IHN1cHBvcnRlZCwgdGhlbiBmYWxsYmFjayB0byBieXRlLWJ5LWJ5dGUgY29weS9tb3ZlLgotICAgICAgICBpZiAoc3JjSW5mby5hdXRob3JpdHkuZXF1YWxzKGRzdERpckluZm8uYXV0aG9yaXR5KSkgewotICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUUkFOU0ZFUl9NT0RFX0NPUFk6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoc3JjSW5mby5mbGFncyAmIERvY3VtZW50LkZMQUdfU1VQUE9SVFNfQ09QWSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50c0NvbnRyYWN0LmNvcHlEb2N1bWVudChtU3JjQ2xpZW50LCBzcmNJbmZvLmRlcml2ZWRVcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdERpckluZm8uZGVyaXZlZFVyaSkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoc3JjSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBUUkFOU0ZFUl9NT0RFX01PVkU6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoc3JjSW5mby5mbGFncyAmIERvY3VtZW50LkZMQUdfU1VQUE9SVFNfTU9WRSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50c0NvbnRyYWN0Lm1vdmVEb2N1bWVudChtU3JjQ2xpZW50LCBzcmNJbmZvLmRlcml2ZWRVcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdERpckluZm8uZGVyaXZlZFVyaSkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoc3JjSW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biB0cmFuc2ZlciBtb2RlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgVXJpIGRzdFVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmNyZWF0ZURvY3VtZW50KG1Ec3RDbGllbnQsIGRzdERpckluZm8uZGVyaXZlZFVyaSwKLSAgICAgICAgICAgICAgICBzcmNJbmZvLm1pbWVUeXBlLCBzcmNJbmZvLmRpc3BsYXlOYW1lKTsKLSAgICAgICAgaWYgKGRzdFVyaSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGlyZWN0b3J5LCB0aGUgZW50aXJlIHN1YmRpciB3aWxsIG5vdCBiZSBjb3BpZWQgb3Zlci4KLSAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoc3JjSW5mbyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3JjSW5mby5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBjb3B5RGlyZWN0b3J5SGVscGVyKHNyY0luZm8uZGVyaXZlZFVyaSwgZHN0VXJpLCBtb2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvcHlGaWxlSGVscGVyKHNyY0luZm8uZGVyaXZlZFVyaSwgZHN0VXJpLCBtb2RlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB7QGNvZGUgZG9jfSBpcyBhIGRlc2NlbmRhbnQgb2Yge0Bjb2RlIHBhcmVudERvY30uCi0gICAgICovCi0gICAgYm9vbGVhbiBpc0Rlc2NlbmRlbnRPZihEb2N1bWVudEluZm8gZG9jLCBEb2N1bWVudEluZm8gcGFyZW50RG9jKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHBhcmVudERvYy5pc0RpcmVjdG9yeSgpICYmIGRvYy5hdXRob3JpdHkuZXF1YWxzKHBhcmVudERvYy5hdXRob3JpdHkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRzQ29udHJhY3QuaXNDaGlsZERvY3VtZW50KAotICAgICAgICAgICAgICAgICAgICBtRHN0Q2xpZW50LCBkb2MuZGVyaXZlZFVyaSwgcGFyZW50RG9jLmRlcml2ZWRVcmkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBIYW5kbGVzIHJlY3Vyc2lvbiBpbnRvIGEgZGlyZWN0b3J5IGFuZCBjb3B5aW5nIGl0cyBjb250ZW50cy4gTm90ZSB0aGF0IGluIGxpbnV4IHRlcm1zLCB0aGlzCi0gICAgICogZG9lcyB0aGUgZXF1aXZhbGVudCBvZiAiY3Agc3JjLyogZHN0Iiwgbm90ICJjcCAtciBzcmMgZHN0Ii4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzcmNEaXJVcmkgVVJJIG9mIHRoZSBkaXJlY3RvcnkgdG8gY29weSBmcm9tLiBUaGUgcm91dGluZSB3aWxsIGNvcHkgdGhlIGRpcmVjdG9yeSdzCi0gICAgICogICAgICAgICAgICBjb250ZW50cywgbm90IHRoZSBkaXJlY3RvcnkgaXRzZWxmLgotICAgICAqIEBwYXJhbSBkc3REaXJVcmkgVVJJIG9mIHRoZSBkaXJlY3RvcnkgdG8gY29weSB0by4gTXVzdCBiZSBjcmVhdGVkIGJlZm9yZWhhbmQuCi0gICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgY29weURpcmVjdG9yeUhlbHBlcihVcmkgc3JjRGlyVXJpLCBVcmkgZHN0RGlyVXJpLCBpbnQgbW9kZSkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBSZWN1cnNlIGludG8gZGlyZWN0b3JpZXMuIENvcHkgY2hpbGRyZW4gaW50byB0aGUgbmV3IHN1YmRpcmVjdG9yeS4KLSAgICAgICAgZmluYWwgU3RyaW5nIHF1ZXJ5Q29sdW1uc1tdID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FLAotICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwKLSAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFLAotICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9TSVpFCi0gICAgICAgIH07Ci0gICAgICAgIGZpbmFsIFVyaSBxdWVyeVVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkQ2hpbGREb2N1bWVudHNVcmkoc3JjRGlyVXJpLmdldEF1dGhvcml0eSgpLAotICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LmdldERvY3VtZW50SWQoc3JjRGlyVXJpKSk7Ci0gICAgICAgIEN1cnNvciBjdXJzb3IgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHNyY3MgaW4gdGhlIGRpcmVjdG9yeTsgY29weSB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgotICAgICAgICAgICAgY3Vyc29yID0gbVNyY0NsaWVudC5xdWVyeShxdWVyeVVyaSwgcXVlcnlDb2x1bW5zLCBudWxsLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJzb3IubW92ZVRvTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNoaWxkTWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBVcmkgZHN0VXJpID0gRG9jdW1lbnRzQ29udHJhY3QuY3JlYXRlRG9jdW1lbnQobURzdENsaWVudCwgZHN0RGlyVXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW1lVHlwZSwgZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwotICAgICAgICAgICAgICAgIGZpbmFsIFVyaSBjaGlsZFVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoc3JjRGlyVXJpLmdldEF1dGhvcml0eSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKSk7Ci0gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKGNoaWxkTWltZVR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvcHlEaXJlY3RvcnlIZWxwZXIoY2hpbGRVcmksIGRzdFVyaSwgbW9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29weUZpbGVIZWxwZXIoY2hpbGRVcmksIGRzdFVyaSwgbW9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1vZGUgPT0gVFJBTlNGRVJfTU9ERV9NT1ZFKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuZGVsZXRlRG9jdW1lbnQobVNyY0NsaWVudCwgc3JjRGlyVXJpKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdGVFeGNlcHRpb25zIHVzdWFsbHkgc2lnbmFsIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgZGVhZCwgc28gdGhlcmUncyBubwotICAgICAgICAgICAgICAgICAgICAvLyBwb2ludCBhdHRlbXB0aW5nIHRvIGNvbnRpbnVlLiBQcm9wYWdhdGUgdGhlIGV4Y2VwdGlvbiB1cCBzbyB0aGUgY29weSBqb2IgaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsbGVkLgotICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgbW92ZTogIiArIHNyY0RpclVyaSwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoY3Vyc29yKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEhhbmRsZXMgY29weWluZyBhIHNpbmdsZSBmaWxlLgotICAgICAqCi0gICAgICogQHBhcmFtIHNyY1VyaSBVUkkgb2YgdGhlIGZpbGUgdG8gY29weSBmcm9tLgotICAgICAqIEBwYXJhbSBkc3RVcmkgVVJJIG9mIHRoZSAqZmlsZSogdG8gY29weSB0by4gTXVzdCBiZSBjcmVhdGVkIGJlZm9yZWhhbmQuCi0gICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgY29weUZpbGVIZWxwZXIoVXJpIHNyY1VyaSwgVXJpIGRzdFVyaSwgaW50IG1vZGUpCi0gICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gQ29weSBhbiBpbmRpdmlkdWFsIGZpbGUuCi0gICAgICAgIENhbmNlbGxhdGlvblNpZ25hbCBjYW5jZWxsZXIgPSBuZXcgQ2FuY2VsbGF0aW9uU2lnbmFsKCk7Ci0gICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHNyY0ZpbGUgPSBudWxsOwotICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvciBkc3RGaWxlID0gbnVsbDsKLSAgICAgICAgSW5wdXRTdHJlYW0gc3JjID0gbnVsbDsKLSAgICAgICAgT3V0cHV0U3RyZWFtIGRzdCA9IG51bGw7Ci0KLSAgICAgICAgSU9FeGNlcHRpb24gY29weUVycm9yID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHNyY0ZpbGUgPSBtU3JjQ2xpZW50Lm9wZW5GaWxlKHNyY1VyaSwgInIiLCBjYW5jZWxsZXIpOwotICAgICAgICAgICAgZHN0RmlsZSA9IG1Ec3RDbGllbnQub3BlbkZpbGUoZHN0VXJpLCAidyIsIGNhbmNlbGxlcik7Ci0gICAgICAgICAgICBzcmMgPSBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlSW5wdXRTdHJlYW0oc3JjRmlsZSk7Ci0gICAgICAgICAgICBkc3QgPSBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlT3V0cHV0U3RyZWFtKGRzdEZpbGUpOwotCi0gICAgICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbODE5Ml07Ci0gICAgICAgICAgICBpbnQgbGVuOwotICAgICAgICAgICAgd2hpbGUgKCFtSXNDYW5jZWxsZWQgJiYgKChsZW4gPSBzcmMucmVhZChidWZmZXIpKSAhPSAtMSkpIHsKLSAgICAgICAgICAgICAgICBkc3Qud3JpdGUoYnVmZmVyLCAwLCBsZW4pOwotICAgICAgICAgICAgICAgIG1ha2VQcm9ncmVzcyhsZW4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcmNGaWxlLmNoZWNrRXJyb3IoKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgY29weUVycm9yID0gZTsKLQotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBEb2N1bWVudEluZm8gaW5mbyA9IERvY3VtZW50SW5mby5mcm9tVXJpKGdldENvbnRlbnRSZXNvbHZlcigpLCBzcmNVcmkpOwotICAgICAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoaW5mbyk7Ci0gICAgICAgICAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gaWdub3JlKSB7Ci0gICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBkdW1teSBEb2N1bWVudEluZm8gc28gYW4gZXJyb3Igc3RpbGwgZ2V0cyByZWZsZWN0ZWQgaW4gdGhlIFVJIGZvciB0aGlzCi0gICAgICAgICAgICAgICAgLy8gZmlsZS4KLSAgICAgICAgICAgICAgICBEb2N1bWVudEluZm8gaW5mbyA9IG5ldyBEb2N1bWVudEluZm8oKTsKLSAgICAgICAgICAgICAgICBpbmZvLmRlcml2ZWRVcmkgPSBzcmNVcmk7Ci0gICAgICAgICAgICAgICAgaW5mby5kaXNwbGF5TmFtZSA9ICJVbmtub3duIFsiICsgc3JjVXJpICsgIl0iOwotICAgICAgICAgICAgICAgIG1GYWlsZWRGaWxlcy5hZGQoaW5mbyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkc3RGaWxlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBkc3RGaWxlLmNsb3NlV2l0aEVycm9yKGNvcHlFcnJvci5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGNsb3NlRXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgY2xvc2luZyBkZXN0aW5hdGlvbiIsIGNsb3NlRXJyb3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBlbnN1cmVzIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQuCi0gICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseShzcmMpOwotICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoZHN0KTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgaWYgKGNvcHlFcnJvciAhPSBudWxsIHx8IG1Jc0NhbmNlbGxlZCkgewotICAgICAgICAgICAgLy8gQ2xlYW4gdXAgaGFsZi1jb3BpZWQgZmlsZXMuCi0gICAgICAgICAgICBjYW5jZWxsZXIuY2FuY2VsKCk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LmRlbGV0ZURvY3VtZW50KG1Ec3RDbGllbnQsIGRzdFVyaSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBjbGVhbiB1cCBhZnRlciBjb3B5IGVycm9yOiAiICsgZHN0VXJpLCBlKTsKLSAgICAgICAgICAgICAgICAvLyBSZW1vdGVFeGNlcHRpb25zIHVzdWFsbHkgc2lnbmFsIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgZGVhZCwgc28gdGhlcmUncyBubyBwb2ludAotICAgICAgICAgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gY29udGludWUuIFByb3BhZ2F0ZSB0aGUgZXhjZXB0aW9uIHVwIHNvIHRoZSBjb3B5IGpvYiBpcyBjYW5jZWxsZWQuCi0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFRSQU5TRkVSX01PREVfTU9WRSkgewotICAgICAgICAgICAgLy8gQ2xlYW4gdXAgc3JjIGZpbGVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBtb3ZlLgotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5kZWxldGVEb2N1bWVudChtU3JjQ2xpZW50LCBzcmNVcmkpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgbW92ZTogIiArIHNyY1VyaSwgZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gaW50ZW50IGZvciBuYXZpZ2F0aW5nIGJhY2sgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KLSAgICAgKi8KLSAgICBwcml2YXRlIEludGVudCBidWlsZE5hdmlnYXRlSW50ZW50KENvbnRleHQgY29udGV4dCwgRG9jdW1lbnRTdGFjayBzdGFjaykgewotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChjb250ZXh0LCBGaWxlc0FjdGl2aXR5LmNsYXNzKTsKLSAgICAgICAgaW50ZW50LnNldEFjdGlvbihEb2N1bWVudHNDb250cmFjdC5BQ1RJT05fQlJPV1NFKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKFNoYXJlZC5FWFRSQV9TVEFDSywgKFBhcmNlbGFibGUpIHN0YWNrKTsKLSAgICAgICAgcmV0dXJuIGludGVudDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRGlyZWN0b3J5TG9hZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRGlyZWN0b3J5TG9hZGVyLmphdmEKaW5kZXggYjBiYmVjMy4uNjcxOWIyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0RpcmVjdG9yeUxvYWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9EaXJlY3RvcnlMb2FkZXIuamF2YQpAQCAtMTE0LDExICsxMTQsNyBAQAogICAgICAgICBpZiAodXNlck1vZGUgIT0gU3RhdGUuTU9ERV9VTktOT1dOKSB7CiAgICAgICAgICAgICByZXN1bHQubW9kZSA9IHVzZXJNb2RlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKChtRG9jLmZsYWdzICYgRG9jdW1lbnQuRkxBR19ESVJfUFJFRkVSU19HUklEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1vZGUgPSBTdGF0ZS5NT0RFX0dSSUQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tb2RlID0gU3RhdGUuTU9ERV9MSVNUOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0Lm1vZGUgPSBTdGF0ZS5NT0RFX0dSSUQ7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobVVzZXJTb3J0T3JkZXIgIT0gU3RhdGUuU09SVF9PUkRFUl9VTktOT1dOKSB7CkBAIC0xNTYsOSArMTUyLDYgQEAKICAgICAgICAgICAgIGlmIChtVHlwZSA9PSBEaXJlY3RvcnlGcmFnbWVudC5UWVBFX1NFQVJDSCkgewogICAgICAgICAgICAgICAgIC8vIEZpbHRlciBkaXJlY3RvcmllcyBvdXQgb2Ygc2VhcmNoIHJlc3VsdHMsIGZvciBub3cKICAgICAgICAgICAgICAgICBjdXJzb3IgPSBuZXcgRmlsdGVyaW5nQ3Vyc29yV3JhcHBlcihjdXJzb3IsIG51bGwsIFNFQVJDSF9SRUpFQ1RfTUlNRVMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBOb3JtYWwgZGlyZWN0b3JpZXMgc2hvdWxkIGhhdmUgc29ydGluZyBhcHBsaWVkCi0gICAgICAgICAgICAgICAgY3Vyc29yID0gbmV3IFNvcnRpbmdDdXJzb3JXcmFwcGVyKGN1cnNvciwgcmVzdWx0LnNvcnRPcmRlcik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJlc3VsdC5jbGllbnQgPSBjbGllbnQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRG9jdW1lbnRzQWN0aXZpdHkuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Eb2N1bWVudHNBY3Rpdml0eS5qYXZhCmluZGV4IDg3NTRmNjguLjIyM2FmODkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Eb2N1bWVudHNBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Eb2N1bWVudHNBY3Rpdml0eS5qYXZhCkBAIC0xOSw4ICsxOSw4IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLkFDVElPTl9DUkVBVEU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLkFDVElPTl9HRVRfQ09OVEVOVDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuQUNUSU9OX09QRU47Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLkFDVElPTl9QSUNLX0NPUFlfREVTVElOQVRJT047CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLkFDVElPTl9PUEVOX1RSRUU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLkFDVElPTl9QSUNLX0NPUFlfREVTVElOQVRJT047CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3QuRGlyZWN0b3J5RnJhZ21lbnQuQU5JTV9OT05FOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CkBAIC0zMSwxMSArMzEsOSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFZhbHVlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTQ2LDcgKzQ0LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQmFzZUFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub29sYmFyOwpAQCAtNTcsNiArNTQsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5EdXJhYmxlVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuUm9vdEluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuc2VydmljZXMuRmlsZU9wZXJhdGlvblNlcnZpY2U7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtNjUsOCArNjMsNiBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0RFX0ZPUldBUkQgPSA0MjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRvY3VtZW50c0FjdGl2aXR5IjsKIAotICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd0FzRGlhbG9nOwotCiAgICAgcHJpdmF0ZSBUb29sYmFyIG1Ub29sYmFyOwogICAgIHByaXZhdGUgU3Bpbm5lciBtVG9vbGJhclN0YWNrOwogCkBAIC04NCwyOSArODAsOCBAQAogICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwogCiAgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBnZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgbVNob3dBc0RpYWxvZyA9IHJlcy5nZXRCb29sZWFuKFIuYm9vbC5zaG93X2FzX2RpYWxvZyk7CiAKLSAgICAgICAgaWYgKCFtU2hvd0FzRGlhbG9nKSB7Ci0gICAgICAgICAgICBzZXRUaGVtZShSLnN0eWxlLkRvY3VtZW50c0Z1bGxTY3JlZW5UaGVtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVNob3dBc0RpYWxvZykgewotICAgICAgICAgICAgbURyYXdlciA9IERyYXdlckNvbnRyb2xsZXIuY3JlYXRlRHVtbXkoKTsKLQotICAgICAgICAgICAgLy8gU3Ryb25nbHkgZGVmaW5lIG91ciBob3Jpem9udGFsIGRpbWVuc2lvbjsgd2UgbGVhdmUgdmVydGljYWwgYXMKLSAgICAgICAgICAgIC8vIFdSQVBfQ09OVEVOVCBzbyB0aGF0IHN5c3RlbSByZXNpemVzIHVzIHdoZW4gSU1FIGlzIHNob3dpbmcuCi0gICAgICAgICAgICBmaW5hbCBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyBhID0gZ2V0V2luZG93KCkuZ2V0QXR0cmlidXRlcygpOwotCi0gICAgICAgICAgICBmaW5hbCBQb2ludCBzaXplID0gbmV3IFBvaW50KCk7Ci0gICAgICAgICAgICBnZXRXaW5kb3dNYW5hZ2VyKCkuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRTaXplKHNpemUpOwotICAgICAgICAgICAgYS53aWR0aCA9IChpbnQpIHJlcy5nZXRGcmFjdGlvbihSLmRpbWVuLmRpYWxvZ193aWR0aCwgc2l6ZS54LCBzaXplLngpOwotCi0gICAgICAgICAgICBnZXRXaW5kb3coKS5zZXRBdHRyaWJ1dGVzKGEpOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtRHJhd2VyID0gRHJhd2VyQ29udHJvbGxlci5jcmVhdGUodGhpcyk7Ci0gICAgICAgIH0KLQorICAgICAgICBtRHJhd2VyID0gRHJhd2VyQ29udHJvbGxlci5jcmVhdGUodGhpcyk7CiAgICAgICAgIG1Ub29sYmFyID0gKFRvb2xiYXIpIGZpbmRWaWV3QnlJZChSLmlkLnRvb2xiYXIpOwogCiAgICAgICAgIG1TdGFja0FkYXB0ZXIgPSBuZXcgU3RhY2tBZGFwdGVyKCk7CkBAIC0xODAsOCArMTU1LDggQEAKICAgICAgICAgaWYgKHN0YXRlLmFjdGlvbiA9PSBBQ1RJT05fUElDS19DT1BZX0RFU1RJTkFUSU9OKSB7CiAgICAgICAgICAgICBzdGF0ZS5kaXJlY3RvcnlDb3B5ID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYSgKICAgICAgICAgICAgICAgICAgICAgU2hhcmVkLkVYVFJBX0RJUkVDVE9SWV9DT1BZLCBmYWxzZSk7Ci0gICAgICAgICAgICBzdGF0ZS50cmFuc2Zlck1vZGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfVFJBTlNGRVJfTU9ERSwKLSAgICAgICAgICAgICAgICAgICAgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9DT1BZKTsKKyAgICAgICAgICAgIHN0YXRlLnRyYW5zZmVyTW9kZSA9IGludGVudC5nZXRJbnRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgIEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBzdGF0ZTsKQEAgLTI2OCwxNSArMjQzLDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1TaG93QXNEaWFsb2cgJiYgbURyYXdlci5pc1VubG9ja2VkKCkpIHsKKyAgICAgICAgaWYgKG1EcmF3ZXIuaXNVbmxvY2tlZCgpKSB7CiAgICAgICAgICAgICBtVG9vbGJhci5zZXROYXZpZ2F0aW9uSWNvbihSLmRyYXdhYmxlLmljX2hhbWJ1cmdlcik7CiAgICAgICAgICAgICBtVG9vbGJhci5zZXROYXZpZ2F0aW9uQ29udGVudERlc2NyaXB0aW9uKFIuc3RyaW5nLmRyYXdlcl9vcGVuKTsKLSAgICAgICAgICAgIG1Ub29sYmFyLnNldE5hdmlnYXRpb25PbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFJvb3RzRHJhd2VyT3Blbih0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1Ub29sYmFyLnNldE5hdmlnYXRpb25PbkNsaWNrTGlzdGVuZXIoCisgICAgICAgICAgICAgICAgICAgIG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSb290c0RyYXdlck9wZW4odHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbVRvb2xiYXIuc2V0TmF2aWdhdGlvbkljb24obnVsbCk7CiAgICAgICAgICAgICBtVG9vbGJhci5zZXROYXZpZ2F0aW9uQ29udGVudERlc2NyaXB0aW9uKFIuc3RyaW5nLmRyYXdlcl9vcGVuKTsKQEAgLTMwNywxMCArMjgzLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgewogICAgICAgICBib29sZWFuIHNob3dNZW51ID0gc3VwZXIub25DcmVhdGVPcHRpb25zTWVudShtZW51KTsKIAotICAgICAgICAvLyBNb3N0IGFjdGlvbnMgYXJlIHZpc2libGUgd2hlbiBzaG93aW5nIGFzIGRpYWxvZwotICAgICAgICBpZiAobVNob3dBc0RpYWxvZykgewotICAgICAgICAgICAgZXhwYW5kTWVudXMobWVudSk7Ci0gICAgICAgIH0KKyAgICAgICAgZXhwYW5kTWVudXMobWVudSk7CiAgICAgICAgIHJldHVybiBzaG93TWVudTsKICAgICB9CiAKQEAgLTMzNSw4ICszMDgsMTAgQEAKICAgICAgICAgbVNlYXJjaE1hbmFnZXIuc2hvd01lbnUoIXBpY2tpbmcpOwogCiAgICAgICAgIC8vIE5vIGRpc3BsYXkgb3B0aW9ucyBpbiByZWNlbnQgZGlyZWN0b3JpZXMKLSAgICAgICAgZ3JpZC5zZXRWaXNpYmxlKCEocGlja2luZyAmJiByZWNlbnRzKSk7Ci0gICAgICAgIGxpc3Quc2V0VmlzaWJsZSghKHBpY2tpbmcgJiYgcmVjZW50cykpOworICAgICAgICBpZiAocGlja2luZyAmJiByZWNlbnRzKSB7CisgICAgICAgICAgICBncmlkLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICAgICAgbGlzdC5zZXRWaXNpYmxlKGZhbHNlKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZpbGVTaXplLnNldFZpc2libGUoZmlsZVNpemUuaXNWaXNpYmxlKCkgJiYgIXBpY2tpbmcpOwogICAgICAgICBzZXR0aW5ncy5zZXRWaXNpYmxlKGZhbHNlKTsKQEAgLTQxOSw3ICszOTQsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRQaWNrZWQoRG9jdW1lbnRJbmZvIGRvYywgRG9jdW1lbnRDb250ZXh0IGNvbnRleHQpIHsKKyAgICBwdWJsaWMgdm9pZCBvbkRvY3VtZW50UGlja2VkKERvY3VtZW50SW5mbyBkb2MsIFNpYmxpbmdQcm92aWRlciBzaWJsaW5ncykgewogICAgICAgICBmaW5hbCBGcmFnbWVudE1hbmFnZXIgZm0gPSBnZXRGcmFnbWVudE1hbmFnZXIoKTsKICAgICAgICAgaWYgKGRvYy5pc0NvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBvcGVuQ29udGFpbmVyRG9jdW1lbnQoZG9jKTsKQEAgLTUwOSw3ICs0ODQsNyBAQAogICAgICAgICAgICAgLy8gUGlja2luZyBhIGNvcHkgZGVzdGluYXRpb24gaXMgb25seSB1c2VkIGludGVybmFsbHkgYnkgdXMsIHNvIHdlCiAgICAgICAgICAgICAvLyBkb24ndCBuZWVkIHRvIGV4dGVuZCBwZXJtaXNzaW9ucyB0byB0aGUgY2FsbGVyLgogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFNoYXJlZC5FWFRSQV9TVEFDSywgKFBhcmNlbGFibGUpIG1TdGF0ZS5zdGFjayk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfVFJBTlNGRVJfTU9ERSwgbVN0YXRlLnRyYW5zZmVyTW9kZSk7CisgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLCBtU3RhdGUudHJhbnNmZXJNb2RlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19HUkFOVF9SRUFEX1VSSV9QRVJNSVNTSU9OCiAgICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfR1JBTlRfV1JJVEVfVVJJX1BFUk1JU1NJT04KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Eb3dubG9hZHNBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0Rvd25sb2Fkc0FjdGl2aXR5LmphdmEKaW5kZXggY2NjYmJjOC4uYjgwNmNlZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0Rvd25sb2Fkc0FjdGl2aXR5LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0Rvd25sb2Fkc0FjdGl2aXR5LmphdmEKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRG9jdW1lbnRQaWNrZWQoRG9jdW1lbnRJbmZvIGRvYywgRG9jdW1lbnRDb250ZXh0IGNvbnRleHQpIHsKKyAgICBwdWJsaWMgdm9pZCBvbkRvY3VtZW50UGlja2VkKERvY3VtZW50SW5mbyBkb2MsIFNpYmxpbmdQcm92aWRlciBzaWJsaW5ncykgewogICAgICAgICBmaW5hbCBGcmFnbWVudE1hbmFnZXIgZm0gPSBnZXRGcmFnbWVudE1hbmFnZXIoKTsKICAgICAgICAgaWYgKGRvYy5pc0NvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBvcGVuQ29udGFpbmVyRG9jdW1lbnQoZG9jKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GYWlsdXJlRGlhbG9nRnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GYWlsdXJlRGlhbG9nRnJhZ21lbnQuamF2YQppbmRleCAyMzA3NGYwLi43ZjZmMWM2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmFpbHVyZURpYWxvZ0ZyYWdtZW50LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ZhaWx1cmVEaWFsb2dGcmFnbWVudC5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWk7CiAKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQ7CisKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CiBpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nRnJhZ21lbnQ7CkBAIC0yNyw2ICsyOSw4IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRTdGFjazsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uczsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKQEAgLTM3LDIwICs0MSwyMCBAQAogICAgICAgICBpbXBsZW1lbnRzIERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmFpbHVyZURpYWxvZ0ZyYWdtZW50IjsKIAotICAgIHByaXZhdGUgaW50IG1UcmFuc2Zlck1vZGU7CisgICAgcHJpdmF0ZSBpbnQgbU9wZXJhdGlvblR5cGU7CiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8RG9jdW1lbnRJbmZvPiBtRmFpbGVkU3JjTGlzdDsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaG93KEZyYWdtZW50TWFuYWdlciBmbSwgaW50IGZhaWx1cmUsCi0gICAgICAgICAgICBBcnJheUxpc3Q8RG9jdW1lbnRJbmZvPiBmYWlsZWRTcmNMaXN0LCBEb2N1bWVudFN0YWNrIGRzdFN0YWNrLCBpbnQgdHJhbnNmZXJNb2RlKSB7CisgICAgICAgICAgICBBcnJheUxpc3Q8RG9jdW1lbnRJbmZvPiBmYWlsZWRTcmNMaXN0LCBEb2N1bWVudFN0YWNrIGRzdFN0YWNrLCBpbnQgb3BlcmF0aW9uVHlwZSkgewogICAgICAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgZmFpbHVyZXMgdGhhbiBjb3B5LgotICAgICAgICBpZiAoZmFpbHVyZSAhPSBDb3B5U2VydmljZS5GQUlMVVJFX0NPUFkpIHsKKyAgICAgICAgaWYgKGZhaWx1cmUgIT0gRmlsZU9wZXJhdGlvblNlcnZpY2UuRkFJTFVSRV9DT1BZKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBCdW5kbGUgYXJncyA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYXJncy5wdXRJbnQoQ29weVNlcnZpY2UuRVhUUkFfRkFJTFVSRSwgZmFpbHVyZSk7Ci0gICAgICAgIGFyZ3MucHV0SW50KENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUsIHRyYW5zZmVyTW9kZSk7Ci0gICAgICAgIGFyZ3MucHV0UGFyY2VsYWJsZUFycmF5TGlzdChDb3B5U2VydmljZS5FWFRSQV9TUkNfTElTVCwgZmFpbGVkU3JjTGlzdCk7CisgICAgICAgIGFyZ3MucHV0SW50KEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX0ZBSUxVUkUsIGZhaWx1cmUpOworICAgICAgICBhcmdzLnB1dEludChGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04sIG9wZXJhdGlvblR5cGUpOworICAgICAgICBhcmdzLnB1dFBhcmNlbGFibGVBcnJheUxpc3QoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfU1JDX0xJU1QsIGZhaWxlZFNyY0xpc3QpOwogCiAgICAgICAgIGZpbmFsIEZyYWdtZW50VHJhbnNhY3Rpb24gZnQgPSBmbS5iZWdpblRyYW5zYWN0aW9uKCk7CiAgICAgICAgIGZpbmFsIEZhaWx1cmVEaWFsb2dGcmFnbWVudCBmcmFnbWVudCA9IG5ldyBGYWlsdXJlRGlhbG9nRnJhZ21lbnQoKTsKQEAgLTYzLDEwICs2NywxMiBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoQnV0dG9uKSB7CiAgICAgICAgIGlmICh3aGljaEJ1dHRvbiA9PSBEaWFsb2dJbnRlcmZhY2UuQlVUVE9OX1BPU0lUSVZFKSB7Ci0gICAgICAgICAgICBDb3B5U2VydmljZS5zdGFydChnZXRBY3Rpdml0eSgpLCBtRmFpbGVkU3JjTGlzdCwKKyAgICAgICAgICAgIEZpbGVPcGVyYXRpb25zLnN0YXJ0KAorICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpdml0eSgpLAorICAgICAgICAgICAgICAgICAgICBtRmFpbGVkU3JjTGlzdCwKICAgICAgICAgICAgICAgICAgICAgKERvY3VtZW50U3RhY2spIGdldEFjdGl2aXR5KCkuZ2V0SW50ZW50KCkuZ2V0UGFyY2VsYWJsZUV4dHJhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXJlZC5FWFRSQV9TVEFDSyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zZmVyTW9kZSk7CisgICAgICAgICAgICAgICAgICAgIG1PcGVyYXRpb25UeXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzQsMTYgKzgwLDI3IEBACiAgICAgcHVibGljIERpYWxvZyBvbkNyZWF0ZURpYWxvZyhCdW5kbGUgaW5TdGF0ZSkgewogICAgICAgICBzdXBlci5vbkNyZWF0ZShpblN0YXRlKTsKIAotICAgICAgICBtVHJhbnNmZXJNb2RlID0gZ2V0QXJndW1lbnRzKCkuZ2V0SW50KENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUpOwotICAgICAgICBtRmFpbGVkU3JjTGlzdCA9IGdldEFyZ3VtZW50cygpLmdldFBhcmNlbGFibGVBcnJheUxpc3QoQ29weVNlcnZpY2UuRVhUUkFfU1JDX0xJU1QpOworICAgICAgICBtT3BlcmF0aW9uVHlwZSA9IGdldEFyZ3VtZW50cygpLmdldEludChGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04pOworICAgICAgICBtRmFpbGVkU3JjTGlzdCA9IGdldEFyZ3VtZW50cygpLmdldFBhcmNlbGFibGVBcnJheUxpc3QoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfU1JDX0xJU1QpOwogCiAgICAgICAgIGZpbmFsIFN0cmluZ0J1aWxkZXIgbGlzdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCI8cD4iKTsKICAgICAgICAgZm9yIChEb2N1bWVudEluZm8gZG9jdW1lbnRJbmZvIDogbUZhaWxlZFNyY0xpc3QpIHsKICAgICAgICAgICAgIGxpc3QuYXBwZW5kKFN0cmluZy5mb3JtYXQoIiYjODIyNjsgJXM8YnI+IiwgZG9jdW1lbnRJbmZvLmRpc3BsYXlOYW1lKSk7CiAgICAgICAgIH0KICAgICAgICAgbGlzdC5hcHBlbmQoIjwvcD4iKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2VGb3JtYXQgPSBnZXRTdHJpbmcobVRyYW5zZmVyTW9kZSA9PSBDb3B5U2VydmljZS5UUkFOU0ZFUl9NT0RFX0NPUFkgPwotICAgICAgICAgICAgICAgIFIuc3RyaW5nLmNvcHlfZmFpbHVyZV9hbGVydF9jb250ZW50IDogUi5zdHJpbmcubW92ZV9mYWlsdXJlX2FsZXJ0X2NvbnRlbnQpOworCisgICAgICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBvdGhlciBmaWxlIG9wZXJhdGlvbnMuCisgICAgICAgIGNoZWNrQXJndW1lbnQoCisgICAgICAgICAgICAgICAgbU9wZXJhdGlvblR5cGUgPT0gRmlsZU9wZXJhdGlvblNlcnZpY2UuT1BFUkFUSU9OX0NPUFkKKyAgICAgICAgICAgICAgICB8fCBtT3BlcmF0aW9uVHlwZSA9PSBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRSk7CisKKyAgICAgICAgaW50IG1lc3NhZ2VJZCA9IG1PcGVyYXRpb25UeXBlID09IEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZCisgICAgICAgICAgICAgICAgPyBSLnN0cmluZy5jb3B5X2ZhaWx1cmVfYWxlcnRfY29udGVudAorICAgICAgICAgICAgICAgIDogUi5zdHJpbmcubW92ZV9mYWlsdXJlX2FsZXJ0X2NvbnRlbnQ7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2VGb3JtYXQgPSBnZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgbWVzc2FnZUlkKTsKKwogICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZy5mb3JtYXQobWVzc2FnZUZvcm1hdCwgbGlzdC50b1N0cmluZygpKTsKIAogICAgICAgICByZXR1cm4gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoZ2V0QWN0aXZpdHkoKSkKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GaWxlc0FjdGl2aXR5LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmlsZXNBY3Rpdml0eS5qYXZhCmluZGV4IGJmNDQwMTMuLjBiZDA5ZjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GaWxlc0FjdGl2aXR5LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ZpbGVzQWN0aXZpdHkuamF2YQpAQCAtNDksNiArNDksNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50U3RhY2s7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRHVyYWJsZVV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLlJvb3RJbmZvOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLnNlcnZpY2VzLkZpbGVPcGVyYXRpb25TZXJ2aWNlOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwpAQCAtODksNTAgKzkwLDUzIEBACiAKICAgICAgICAgUm9vdHNGcmFnbWVudC5zaG93KGdldEZyYWdtZW50TWFuYWdlcigpLCBudWxsKTsKIAotICAgICAgICBpZiAobVN0YXRlLnJlc3RvcmVkKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlJlc3RvcmVkIGluc3RhbmNlIGZvciB1cmk6ICIgKyBnZXRJbnRlbnQoKS5nZXREYXRhKCkpOwotICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX05PTkUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGdldEludGVudCgpOwotICAgICAgICAgICAgVXJpIHVyaSA9IGludGVudC5nZXREYXRhKCk7CisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKKyAgICAgICAgZmluYWwgVXJpIHVyaSA9IGludGVudC5nZXREYXRhKCk7CiAKLSAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgbmV3IGluc3RhbmNlIGZvciB1cmk6ICIgKyB1cmkpOworICAgICAgICBpZiAobVN0YXRlLnJlc3RvcmVkKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlN0YWNrIGFscmVhZHkgcmVzb2x2ZWQgZm9yIHVyaTogIiArIGludGVudC5nZXREYXRhKCkpOworICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX05PTkUpOworICAgICAgICB9IGVsc2UgaWYgKCFtU3RhdGUuc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBJZiBhIG5vbi1lbXB0eSBzdGFjayBpcyBwcmVzZW50IGluIG91ciBzdGF0ZSBpdCB3YXMgcmVhZCAocHJlc3VtYWJseSkKICAgICAgICAgICAgIC8vIGZyb20gRVhUUkFfU1RBQ0sgaW50ZW50IGV4dHJhLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIHNraXAgb3RoZXIgbWVhbnMgb2YKICAgICAgICAgICAgIC8vIGxvYWRpbmcgb3IgcmVzdG9yaW5nIHRoZSBzdGFjay4KLSAgICAgICAgICAgIGlmICghbVN0YXRlLnN0YWNrLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gcmVzdG9yaW5nIGZyb20gYSBzdGFjaywgaWYgYSBVUkkgaXMgcHJlc2VudCwgaXQgc2hvdWxkIG9ubHkgZXZlcgotICAgICAgICAgICAgICAgIC8vIGJlIGEgbGF1bmNoIFVSSS4gTGF1bmNoIFVSSXMgc3VwcG9ydCBzZW5zaWJsZSBhY3Rpdml0eSBtYW5hZ2VtZW50LCBidXQKLSAgICAgICAgICAgICAgICAvLyBkb24ndCBzcGVjaWZ5IGFuIHJlYWwgY29udGVudCB0YXJnZXQuCi0gICAgICAgICAgICAgICAgaWYgKHVyaSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrU3RhdGUoTGF1bmNoZXJBY3Rpdml0eS5pc0xhdW5jaFVyaSh1cmkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX05PTkUpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChEb2N1bWVudHNDb250cmFjdC5pc1Jvb3RVcmkodGhpcywgdXJpKSkgewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIGdvdCBhIHNwZWNpZmljIHJvb3QgdG8gZGlzcGxheSwgcmVzdG9yZSB0aGF0IHJvb3QgdXNpbmcgYSBkZWRpY2F0ZWQKLSAgICAgICAgICAgICAgICAvLyBhdXRob3JpdHkuIFRoYXQgd2F5IGEgbWlzYmVoYXZpbmcgcHJvdmlkZXIgd29uJ3QgcmVzdWx0IGluIGFuIEFOUi4KLSAgICAgICAgICAgICAgICBuZXcgUmVzdG9yZVJvb3RUYXNrKHVyaSkuZXhlY3V0ZU9uRXhlY3V0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm92aWRlckV4ZWN1dG9yLmZvckF1dGhvcml0eSh1cmkuZ2V0QXV0aG9yaXR5KCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gRmluYWxseSwgd2UgdHJ5IHRvIHJlc3RvcmUgYSBzdGFjayBmcm9tIHJlY2VudHMuCi0gICAgICAgICAgICAgICAgbmV3IFJlc3RvcmVTdGFja1Rhc2soKS5leGVjdXRlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gV2hlbiByZXN0b3JpbmcgZnJvbSBhIHN0YWNrLCBpZiBhIFVSSSBpcyBwcmVzZW50LCBpdCBzaG91bGQgb25seSBldmVyCisgICAgICAgICAgICAvLyBiZSBhIGxhdW5jaCBVUkkuIExhdW5jaCBVUklzIHN1cHBvcnQgc2Vuc2libGUgYWN0aXZpdHkgbWFuYWdlbWVudCwgYnV0CisgICAgICAgICAgICAvLyBkb24ndCBzcGVjaWZ5IGEgcmVhbCBjb250ZW50IHRhcmdldC4KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTGF1bmNoaW5nIHdpdGggbm9uLWVtcHR5IHN0YWNrLiIpOworICAgICAgICAgICAgY2hlY2tTdGF0ZSh1cmkgPT0gbnVsbCB8fCBMYXVuY2hlckFjdGl2aXR5LmlzTGF1bmNoVXJpKHVyaSkpOworICAgICAgICAgICAgb25DdXJyZW50RGlyZWN0b3J5Q2hhbmdlZChBTklNX05PTkUpOworICAgICAgICB9IGVsc2UgaWYgKERvY3VtZW50c0NvbnRyYWN0LmlzUm9vdFVyaSh0aGlzLCB1cmkpKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkxhdW5jaGluZyB3aXRoIHJvb3QgVVJJLiIpOworICAgICAgICAgICAgLy8gSWYgd2UndmUgZ290IGEgc3BlY2lmaWMgcm9vdCB0byBkaXNwbGF5LCByZXN0b3JlIHRoYXQgcm9vdCB1c2luZyBhIGRlZGljYXRlZAorICAgICAgICAgICAgLy8gYXV0aG9yaXR5LiBUaGF0IHdheSBhIG1pc2JlaGF2aW5nIHByb3ZpZGVyIHdvbid0IHJlc3VsdCBpbiBhbiBBTlIuCisgICAgICAgICAgICBuZXcgUmVzdG9yZVJvb3RUYXNrKHVyaSkuZXhlY3V0ZU9uRXhlY3V0b3IoCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVyRXhlY3V0b3IuZm9yQXV0aG9yaXR5KHVyaS5nZXRBdXRob3JpdHkoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMYXVuY2hpbmcgaW50byBIb21lIGRpcmVjdG9yeS4iKTsKKyAgICAgICAgICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB0cnkgdG8gbG9hZCAiSG9tZSIgZGlyZWN0b3J5LgorICAgICAgICAgICAgZmluYWwgVXJpIGhvbWVVcmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZEhvbWVVcmkoKTsKKyAgICAgICAgICAgIG5ldyBSZXN0b3JlUm9vdFRhc2soaG9tZVVyaSkuZXhlY3V0ZU9uRXhlY3V0b3IoCisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVyRXhlY3V0b3IuZm9yQXV0aG9yaXR5KGhvbWVVcmkuZ2V0QXV0aG9yaXR5KCkpKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUT0RPOiBFbnN1cmUgd2UncmUgaGFuZGxpbmcgQ29weVNlcnZpY2UgZXJyb3JzIGNvcnJlY3RseSBhY3Jvc3MgYWxsIGFjdGl2aXRpZXMuCi0gICAgICAgICAgICAvLyBTaG93IGEgZmFpbHVyZSBkaWFsb2cgaWYgdGhlcmUgd2FzIGEgZmFpbGVkIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIGZpbmFsIGludCBmYWlsdXJlID0gaW50ZW50LmdldEludEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX0ZBSUxVUkUsIDApOwotICAgICAgICAgICAgZmluYWwgaW50IHRyYW5zZmVyTW9kZSA9IGludGVudC5nZXRJbnRFeHRyYShDb3B5U2VydmljZS5FWFRSQV9UUkFOU0ZFUl9NT0RFLAotICAgICAgICAgICAgICAgICAgICBDb3B5U2VydmljZS5UUkFOU0ZFUl9NT0RFX0NPUFkpOwotICAgICAgICAgICAgaWYgKGZhaWx1cmUgIT0gMCkgewotICAgICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxEb2N1bWVudEluZm8+IGZhaWxlZFNyY0xpc3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShDb3B5U2VydmljZS5FWFRSQV9TUkNfTElTVCk7Ci0gICAgICAgICAgICAgICAgRmFpbHVyZURpYWxvZ0ZyYWdtZW50LnNob3coCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRGcmFnbWVudE1hbmFnZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZhaWx1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRTcmNMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnN0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJNb2RlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgZmluYWwgaW50IGZhaWx1cmUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfRkFJTFVSRSwgMCk7CisgICAgICAgIGZpbmFsIGludCBvcFR5cGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoCisgICAgICAgICAgICAgICAgRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgIEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZKTsKKworICAgICAgICAvLyBEaWFsb2dGcmFnbWVudCB0YWtlcyBjYXJlIG9mIHJlc3RvcmluZyB0aGUgZGlhbG9nIG9uIGNvbmZpZ3VyYXRpb24gY2hhbmdlLgorICAgICAgICAvLyBPbmx5IHNob3cgaXQgbWFudWFsbHkgZm9yIHRoZSBmaXJzdCB0aW1lIChpY2ljbGUgaXMgbnVsbCkuCisgICAgICAgIGlmIChpY2ljbGUgPT0gbnVsbCAmJiBmYWlsdXJlICE9IDApIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxEb2N1bWVudEluZm8+IGZhaWxlZFNyY0xpc3QgPQorICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhKEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX1NSQ19MSVNUKTsKKyAgICAgICAgICAgIEZhaWx1cmVEaWFsb2dGcmFnbWVudC5zaG93KAorICAgICAgICAgICAgICAgICAgICBnZXRGcmFnbWVudE1hbmFnZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSwKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkU3JjTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgbVN0YXRlLnN0YWNrLAorICAgICAgICAgICAgICAgICAgICBvcFR5cGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNTksNyArMTYzLDE3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0Q3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKICAgICAgICAgc3VwZXIub25Qb3N0Q3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAgICAgIHVwZGF0ZUFjdGlvbkJhcigpOworICAgICAgICAvLyBUaGlzIGNoZWNrIGF2b2lkcyBhIGZsaWNrZXIgZnJvbSAiUmVjZW50cyIgdG8gIkhvbWUiLgorICAgICAgICAvLyBPbmx5IHVwZGF0ZSBhY3Rpb24gYmFyIGF0IHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMgYW4gYWN0aXZlCisgICAgICAgIC8vIHNlcmFjaC4gV2h5PyBCZWNhdXNlIHRoaXMgYXZvaWQgYW4gZWFybHkgKHVuZGVzaXJlZCkgbG9hZCBvZgorICAgICAgICAvLyB0aGUgcmVjZW50cyByb290Li4ud2hpY2ggaXMgdGhlIGRlZmF1bHQgcm9vdCBpbiBvdGhlciBhY3Rpdml0aWVzLgorICAgICAgICAvLyBJbiBGaWxlcyBhcHAgIkhvbWUiIGlzIHRoZSBkZWZhdWx0LCBidXQgaXQgaXMgbG9hZGVkIGFzeW5jLgorICAgICAgICAvLyB1cGRhdGVBY3Rpb25CYXIgd2lsbCBiZSBjYWxsZWQgb25jZSBIb21lIHJvb3QgaXMgbG9hZGVkLgorICAgICAgICAvLyBFeGNlcHQgd2hpbGUgc2VhcmNoaW5nIHdlIG5lZWQgdGhpcyBjYWxsIHRvIGVuc3VyZSB0aGUKKyAgICAgICAgLy8gc2VhcmNoIGJpdHMgZ2V0IGxheWVkIG91dCBjb3JyZWN0bHkuCisgICAgICAgIGlmIChtU2VhcmNoTWFuYWdlci5pc1NlYXJjaGluZygpKSB7CisgICAgICAgICAgICB1cGRhdGVBY3Rpb25CYXIoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzEwLDcgKzMyNCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Eb2N1bWVudFBpY2tlZChEb2N1bWVudEluZm8gZG9jLCBATnVsbGFibGUgRG9jdW1lbnRDb250ZXh0IHNpYmxpbmdzKSB7CisgICAgcHVibGljIHZvaWQgb25Eb2N1bWVudFBpY2tlZChEb2N1bWVudEluZm8gZG9jLCBATnVsbGFibGUgU2libGluZ1Byb3ZpZGVyIHNpYmxpbmdzKSB7CiAgICAgICAgIGlmIChkb2MuaXNDb250YWluZXIoKSkgewogICAgICAgICAgICAgb3BlbkNvbnRhaW5lckRvY3VtZW50KGRvYyk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zMjEsNyArMzM1LDcgQEAKICAgICAvKioKICAgICAgKiBMYXVuY2hlcyBhbiBpbnRlbnQgdG8gdmlldyB0aGUgc3BlY2lmaWVkIGRvY3VtZW50LgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBvcGVuRG9jdW1lbnQoRG9jdW1lbnRJbmZvIGRvYywgQE51bGxhYmxlIERvY3VtZW50Q29udGV4dCBzaWJsaW5ncykgeworICAgIHByaXZhdGUgdm9pZCBvcGVuRG9jdW1lbnQoRG9jdW1lbnRJbmZvIGRvYywgQE51bGxhYmxlIFNpYmxpbmdQcm92aWRlciBzaWJsaW5ncykgewogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbnVsbDsKICAgICAgICAgaWYgKHNpYmxpbmdzICE9IG51bGwpIHsKICAgICAgICAgICAgIFF1aWNrVmlld0ludGVudEJ1aWxkZXIgYnVpbGRlciA9IG5ldyBRdWlja1ZpZXdJbnRlbnRCdWlsZGVyKApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ljb25VdGlscy5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ljb25VdGlscy5qYXZhCmluZGV4IGExMjEzZDIuLmMyOGZhZTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9JY29uVXRpbHMuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvSWNvblV0aWxzLmphdmEKQEAgLTE1OSw4ICsxNTksOCBAQAogICAgICAgICBhZGQoImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLmNhbGMudGVtcGxhdGUiLCBpY29uKTsKICAgICAgICAgYWRkKCJhcHBsaWNhdGlvbi94LWtzcHJlYWQiLCBpY29uKTsKIAotICAgICAgICAvLyBUZXh0Ci0gICAgICAgIGljb24gPSBSLmRyYXdhYmxlLmljX2RvY190ZXh0OworICAgICAgICAvLyBEb2N1bWVudAorICAgICAgICBpY29uID0gUi5kcmF3YWJsZS5pY19kb2NfZG9jdW1lbnQ7CiAgICAgICAgIGFkZCgiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0IiwgaWNvbik7CiAgICAgICAgIGFkZCgiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LW1hc3RlciIsIGljb24pOwogICAgICAgICBhZGQoImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dC10ZW1wbGF0ZSIsIGljb24pOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1F1aWNrVmlld0ludGVudEJ1aWxkZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9RdWlja1ZpZXdJbnRlbnRCdWlsZGVyLmphdmEKaW5kZXggNjA1YzUzMC4uNWE4MGMzOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1F1aWNrVmlld0ludGVudEJ1aWxkZXIuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUXVpY2tWaWV3SW50ZW50QnVpbGRlci5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuQmFzZUFjdGl2aXR5LkRvY3VtZW50Q29udGV4dDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5CYXNlQWN0aXZpdHkuU2libGluZ1Byb3ZpZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKIAogLyoqCkBAIC00Myw3ICs0Myw3IEBACiBmaW5hbCBjbGFzcyBRdWlja1ZpZXdJbnRlbnRCdWlsZGVyIHsKIAogICAgIHByaXZhdGUgZmluYWwgRG9jdW1lbnRJbmZvIG1Eb2N1bWVudDsKLSAgICBwcml2YXRlIGZpbmFsIERvY3VtZW50Q29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIFNpYmxpbmdQcm92aWRlciBtU2libGluZ3M7CiAKICAgICBwcml2YXRlIGZpbmFsIFBhY2thZ2VNYW5hZ2VyIG1Qa2dNYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgUmVzb3VyY2VzIG1SZXNvdXJjZXM7CkBAIC01NSwxMiArNTUsMTIgQEAKICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBrZ01hbmFnZXIsCiAgICAgICAgICAgICBSZXNvdXJjZXMgcmVzb3VyY2VzLAogICAgICAgICAgICAgRG9jdW1lbnRJbmZvIGRvYywKLSAgICAgICAgICAgIERvY3VtZW50Q29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBTaWJsaW5nUHJvdmlkZXIgc2libGluZ3MpIHsKIAogICAgICAgICBtUGtnTWFuYWdlciA9IHBrZ01hbmFnZXI7CiAgICAgICAgIG1SZXNvdXJjZXMgPSByZXNvdXJjZXM7CiAgICAgICAgIG1Eb2N1bWVudCA9IGRvYzsKLSAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtU2libGluZ3MgPSBzaWJsaW5nczsKICAgICB9CiAKICAgICAvKioKQEAgLTg0LDcgKzg0LDcgQEAKICAgICAgICAgICAgIGludGVudC5zZXRQYWNrYWdlKHRydXN0ZWRQa2cpOwogICAgICAgICAgICAgaWYgKGhhc1JlZ2lzdGVyZWRIYW5kbGVyKGludGVudCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgdHJ1c3RlZCBoYW5kbGVyLiBMb2FkIGFsbCBvZiB0aGUgZG9jcyBpbnRvIHRoZSBpbnRlbnQuCi0gICAgICAgICAgICAgICAgQ3Vyc29yIGN1cnNvciA9IG1Db250ZXh0LmdldEN1cnNvcigpOworICAgICAgICAgICAgICAgIEN1cnNvciBjdXJzb3IgPSBtU2libGluZ3MuZ2V0Q3Vyc29yKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdXJzb3IuZ2V0Q291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIG9uTmV4dEl0ZW0oaSwgY3Vyc29yKTsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUmVjZW50TG9hZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUmVjZW50TG9hZGVyLmphdmEKaW5kZXggNGJkNmFlNi4uMGVlNTRlNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1JlY2VudExvYWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRMb2FkZXIuamF2YQpAQCAtMjMzLDEyICsyMzMsNiBAQAogICAgICAgICBmaW5hbCBEaXJlY3RvcnlSZXN1bHQgcmVzdWx0ID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOwogICAgICAgICByZXN1bHQuc29ydE9yZGVyID0gU09SVF9PUkRFUl9MQVNUX01PRElGSUVEOwogCi0gICAgICAgIC8vIEhpbnQgdG8gVUkgaWYgd2UncmUgc3RpbGwgbG9hZGluZwotICAgICAgICBmaW5hbCBCdW5kbGUgZXh0cmFzID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICBpZiAoIWFsbERvbmUpIHsKLSAgICAgICAgICAgIGV4dHJhcy5wdXRCb29sZWFuKERvY3VtZW50c0NvbnRyYWN0LkVYVFJBX0xPQURJTkcsIHRydWUpOwotICAgICAgICB9Ci0KICAgICAgICAgZmluYWwgQ3Vyc29yIG1lcmdlZDsKICAgICAgICAgaWYgKGN1cnNvcnMuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgbWVyZ2VkID0gbmV3IE1lcmdlQ3Vyc29yKGN1cnNvcnMudG9BcnJheShuZXcgQ3Vyc29yW2N1cnNvcnMuc2l6ZSgpXSkpOwpAQCAtMjQ3LDE0ICsyNDEsMTMgQEAKICAgICAgICAgICAgIG1lcmdlZCA9IG5ldyBNYXRyaXhDdXJzb3IobmV3IFN0cmluZ1swXSk7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBTb3J0aW5nQ3Vyc29yV3JhcHBlciBzb3J0ZWQgPSBuZXcgU29ydGluZ0N1cnNvcldyYXBwZXIobWVyZ2VkLCByZXN1bHQuc29ydE9yZGVyKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBCdW5kbGUgZ2V0RXh0cmFzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBleHRyYXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgIC8vIFRlbGwgdGhlIFVJIGlmIHRoaXMgaXMgYW4gaW4tcHJvZ3Jlc3MgcmVzdWx0LiBXaGVuIGxvYWRpbmcgaXMgY29tcGxldGUsIGFub3RoZXIgdXBkYXRlIGlzCisgICAgICAgIC8vIHNlbnQgd2l0aCBFWFRSQV9MT0FESU5HIHNldCB0byBmYWxzZS4KKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgZXh0cmFzLnB1dEJvb2xlYW4oRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfTE9BRElORywgIWFsbERvbmUpOworICAgICAgICBtZXJnZWQuc2V0RXh0cmFzKGV4dHJhcyk7CiAKLSAgICAgICAgcmVzdWx0LmN1cnNvciA9IHNvcnRlZDsKKyAgICAgICAgcmVzdWx0LmN1cnNvciA9IG1lcmdlZDsKIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRzQ3JlYXRlRnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRzQ3JlYXRlRnJhZ21lbnQuamF2YQppbmRleCBiYjZjM2I1ZS4uN2RhYzBjMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1JlY2VudHNDcmVhdGVGcmFnbWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9SZWNlbnRzQ3JlYXRlRnJhZ21lbnQuamF2YQpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgbUFkYXB0ZXIudXBkYXRlKGRhdGEpOwogCiAgICAgICAgICAgICAgICAgLy8gV2hlbiBsYXVuY2hlZCBpbnRvIGVtcHR5IHJlY2VudHMsIHNob3cgZHJhd2VyCi0gICAgICAgICAgICAgICAgaWYgKG1BZGFwdGVyLmlzRW1wdHkoKSAmJiAhc3RhdGUuc3RhY2tUb3VjaGVkICYmCisgICAgICAgICAgICAgICAgaWYgKG1BZGFwdGVyLmlzRW1wdHkoKSAmJiAhc3RhdGUuaGFzTG9jYXRpb25DaGFuZ2VkKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgaW5zdGFuY2VvZiBEb2N1bWVudHNBY3Rpdml0eSkgewogICAgICAgICAgICAgICAgICAgICAoKERvY3VtZW50c0FjdGl2aXR5KSBjb250ZXh0KS5zZXRSb290c0RyYXdlck9wZW4odHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1Jvb3RzQ2FjaGUuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Sb290c0NhY2hlLmphdmEKaW5kZXggNzJlZTZjYmFiLi4yMWU3NTY2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUm9vdHNDYWNoZS5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Sb290c0NhY2hlLmphdmEKQEAgLTYzLDYgKzYzLDcgQEAKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIENvbnRlbnRPYnNlcnZlciBtT2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBPbkNhY2hlVXBkYXRlTGlzdGVuZXIgbUNhY2hlVXBkYXRlTGlzdGVuZXI7CiAKICAgICBwcml2YXRlIGZpbmFsIFJvb3RJbmZvIG1SZWNlbnRzUm9vdCA9IG5ldyBSb290SW5mbygpOwogCkBAIC05NCw2ICs5NSwxMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgc3RhdGljIGludGVyZmFjZSBPbkNhY2hlVXBkYXRlTGlzdGVuZXIgeworICAgICAgICB2b2lkIG9uQ2FjaGVVcGRhdGUoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHYXRoZXIgcm9vdHMgZnJvbSBhbGwga25vd24gc3RvcmFnZSBwcm92aWRlcnMuCiAgICAgICovCkBAIC0yMDksNiArMjE0LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKFZvaWQgcmVzdWx0KSB7CisgICAgICAgICAgICBpZiAobUNhY2hlVXBkYXRlTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DYWNoZVVwZGF0ZUxpc3RlbmVyLm9uQ2FjaGVVcGRhdGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVEb2N1bWVudHNQcm92aWRlcihQcm92aWRlckluZm8gaW5mbykgewogICAgICAgICAgICAgLy8gSWdub3JlIHN0b3BwZWQgcGFja2FnZXMgZm9yIG5vdzsgd2UgbWlnaHQgcXVlcnkgdGhlbQogICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIFVJIGludGVyYWN0aW9uLgpAQCAtMzQ4LDYgKzM2MCwxMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgc2V0T25DYWNoZVVwZGF0ZUxpc3RlbmVyKE9uQ2FjaGVVcGRhdGVMaXN0ZW5lciBjYWNoZVVwZGF0ZUxpc3RlbmVyKSB7CisgICAgICAgIG1DYWNoZVVwZGF0ZUxpc3RlbmVyID0gY2FjaGVVcGRhdGVMaXN0ZW5lcjsKKyAgICB9CisKICAgICBAVmlzaWJsZUZvclRlc3RpbmcKICAgICBzdGF0aWMgTGlzdDxSb290SW5mbz4gZ2V0TWF0Y2hpbmdSb290cyhDb2xsZWN0aW9uPFJvb3RJbmZvPiByb290cywgU3RhdGUgc3RhdGUpIHsKICAgICAgICAgZmluYWwgTGlzdDxSb290SW5mbz4gbWF0Y2hpbmcgPSBuZXcgQXJyYXlMaXN0PD4oKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Sb290c0ZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvUm9vdHNGcmFnbWVudC5qYXZhCmluZGV4IDRjODQ0YzQuLmJlZmYxOTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Sb290c0ZyYWdtZW50LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1Jvb3RzRnJhZ21lbnQuamF2YQpAQCAtMjk3LDcgKzI5Nyw3IEBACiAKICAgICAgICAgICAgIGZvciAoZmluYWwgUm9vdEluZm8gcm9vdCA6IHJvb3RzKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgUm9vdEl0ZW0gaXRlbSA9IG5ldyBSb290SXRlbShyb290KTsKLSAgICAgICAgICAgICAgICBpZiAocm9vdC5pc0xpYnJhcnkoKSB8fCByb290LmlzSG9tZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHJvb3QuaXNMaWJyYXJ5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzLmFkZChpdGVtKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvdGhlcnMuYWRkKGl0ZW0pOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NoYXJlZC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NoYXJlZC5qYXZhCmluZGV4IDU3MGM5YmYuLjIyY2IyNWEyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU2hhcmVkLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NoYXJlZC5qYXZhCkBAIC0xNyw2ICsxNywxMSBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuVGltZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKiBAaGlkZSAqLwogcHVibGljIGZpbmFsIGNsYXNzIFNoYXJlZCB7CkBAIC00MCw0ICs0NSwzNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGdldFF1YW50aXR5U3RyaW5nKENvbnRleHQgY29udGV4dCwgaW50IHJlc291cmNlSWQsIGludCBxdWFudGl0eSkgewogICAgICAgICByZXR1cm4gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRRdWFudGl0eVN0cmluZyhyZXNvdXJjZUlkLCBxdWFudGl0eSwgcXVhbnRpdHkpOwogICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdFRpbWUoQ29udGV4dCBjb250ZXh0LCBsb25nIHdoZW4pIHsKKyAgICAgICAgLy8gVE9ETzogRGF0ZVV0aWxzIHNob3VsZCBtYWtlIHRoaXMgZWFzaWVyCisgICAgICAgIFRpbWUgdGhlbiA9IG5ldyBUaW1lKCk7CisgICAgICAgIHRoZW4uc2V0KHdoZW4pOworICAgICAgICBUaW1lIG5vdyA9IG5ldyBUaW1lKCk7CisgICAgICAgIG5vdy5zZXRUb05vdygpOworCisgICAgICAgIGludCBmbGFncyA9IERhdGVVdGlscy5GT1JNQVRfTk9fTk9PTiB8IERhdGVVdGlscy5GT1JNQVRfTk9fTUlETklHSFQKKyAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfQUJCUkVWX0FMTDsKKworICAgICAgICBpZiAodGhlbi55ZWFyICE9IG5vdy55ZWFyKSB7CisgICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfWUVBUiB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19EQVRFOworICAgICAgICB9IGVsc2UgaWYgKHRoZW4ueWVhckRheSAhPSBub3cueWVhckRheSkgeworICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfVElNRTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUoY29udGV4dCwgd2hlbiwgZmxhZ3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgY29udmVuaWVudCB3YXkgdG8gdHJhbnNmb3JtIGFueSBsaXN0IGludG8gYSAocGFyY2VsYWJsZSkgQXJyYXlMaXN0LgorICAgICAqIFVzZXMgY2FzdCBpZiBwb3NzaWJsZSwgZWxzZSBjcmVhdGVzIGEgbmV3IGxpc3Qgd2l0aCBlbnRyaWVzIGZyb20ge0Bjb2RlIGxpc3R9LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgPFQ+IEFycmF5TGlzdDxUPiBhc0FycmF5TGlzdChMaXN0PFQ+IGxpc3QpIHsKKyAgICAgICAgcmV0dXJuIGxpc3QgaW5zdGFuY2VvZiBBcnJheUxpc3QKKyAgICAgICAgICAgID8gKEFycmF5TGlzdDxUPikgbGlzdAorICAgICAgICAgICAgOiBuZXcgQXJyYXlMaXN0PFQ+KGxpc3QpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Tb3J0aW5nQ3Vyc29yV3JhcHBlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NvcnRpbmdDdXJzb3JXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2OThmZjEuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1NvcnRpbmdDdXJzb3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWk7Ci0KLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuU09SVF9PUkRFUl9ESVNQTEFZX05BTUU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLlNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuU09SVF9PUkRFUl9TSVpFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yTG9uZzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKLQotaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQWJzdHJhY3RDdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKLQotLyoqCi0gKiBDdXJzb3Igd3JhcHBlciB0aGF0IHByZXNlbnRzIGEgc29ydGVkIHZpZXcgb2YgdGhlIHVuZGVybHlpbmcgY3Vyc29yLiBIYW5kbGVzCi0gKiBjb21tb24ge0BsaW5rIERvY3VtZW50fSBzb3J0aW5nIG1vZGVzLCBzdWNoIGFzIG9yZGVyaW5nIGRpcmVjdG9yaWVzIGZpcnN0LgotICovCi1wdWJsaWMgY2xhc3MgU29ydGluZ0N1cnNvcldyYXBwZXIgZXh0ZW5kcyBBYnN0cmFjdEN1cnNvciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDdXJzb3IgbUN1cnNvcjsKLQotICAgIHByaXZhdGUgZmluYWwgaW50W10gbVBvc2l0aW9uOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbVZhbHVlU3RyaW5nOwotICAgIHByaXZhdGUgZmluYWwgbG9uZ1tdIG1WYWx1ZUxvbmc7Ci0KLSAgICBwdWJsaWMgU29ydGluZ0N1cnNvcldyYXBwZXIoQ3Vyc29yIGN1cnNvciwgaW50IHNvcnRPcmRlcikgewotICAgICAgICBtQ3Vyc29yID0gY3Vyc29yOwotCi0gICAgICAgIGZpbmFsIGludCBjb3VudCA9IGN1cnNvci5nZXRDb3VudCgpOwotICAgICAgICBtUG9zaXRpb24gPSBuZXcgaW50W2NvdW50XTsKLSAgICAgICAgc3dpdGNoIChzb3J0T3JkZXIpIHsKLSAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9ESVNQTEFZX05BTUU6Ci0gICAgICAgICAgICAgICAgbVZhbHVlU3RyaW5nID0gbmV3IFN0cmluZ1tjb3VudF07Ci0gICAgICAgICAgICAgICAgbVZhbHVlTG9uZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDoKLSAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9TSVpFOgotICAgICAgICAgICAgICAgIG1WYWx1ZVN0cmluZyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgbVZhbHVlTG9uZyA9IG5ldyBsb25nW2NvdW50XTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgY3Vyc29yLm1vdmVUb1Bvc2l0aW9uKC0xKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgbVBvc2l0aW9uW2ldID0gaTsKLQotICAgICAgICAgICAgc3dpdGNoIChzb3J0T3JkZXIpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfRElTUExBWV9OQU1FOgotICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRpc3BsYXlOYW1lID0gZ2V0Q3Vyc29yU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhtaW1lVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WYWx1ZVN0cmluZ1tpXSA9IERvY3VtZW50SW5mby5ESVJfUFJFRklYICsgZGlzcGxheU5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVTdHJpbmdbaV0gPSBkaXNwbGF5TmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDoKLSAgICAgICAgICAgICAgICAgICAgbVZhbHVlTG9uZ1tpXSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTEFTVF9NT0RJRklFRCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9TSVpFOgotICAgICAgICAgICAgICAgICAgICBtVmFsdWVMb25nW2ldID0gZ2V0Q3Vyc29yTG9uZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9TSVpFKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKHNvcnRPcmRlcikgewotICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX0RJU1BMQVlfTkFNRToKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKFNvcnRpbmdDdXJzb3JXcmFwcGVyLmNsYXNzKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgYmluYXJ5U29ydChtUG9zaXRpb24sIG1WYWx1ZVN0cmluZyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX0xBU1RfTU9ESUZJRUQ6Ci0gICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfU0laRToKLSAgICAgICAgICAgICAgICBiaW5hcnlTb3J0KG1Qb3NpdGlvbiwgbVZhbHVlTG9uZyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQnVuZGxlIGdldEV4dHJhcygpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJzb3IuZ2V0RXh0cmFzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgICAgIHN1cGVyLmNsb3NlKCk7Ci0gICAgICAgIG1DdXJzb3IuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvbk1vdmUoaW50IG9sZFBvc2l0aW9uLCBpbnQgbmV3UG9zaXRpb24pIHsKLSAgICAgICAgcmV0dXJuIG1DdXJzb3IubW92ZVRvUG9zaXRpb24obVBvc2l0aW9uW25ld1Bvc2l0aW9uXSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZ1tdIGdldENvbHVtbk5hbWVzKCkgewotICAgICAgICByZXR1cm4gbUN1cnNvci5nZXRDb2x1bW5OYW1lcygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Q291bnQoKSB7Ci0gICAgICAgIHJldHVybiBtQ3Vyc29yLmdldENvdW50KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGRvdWJsZSBnZXREb3VibGUoaW50IGNvbHVtbikgewotICAgICAgICByZXR1cm4gbUN1cnNvci5nZXREb3VibGUoY29sdW1uKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXQoaW50IGNvbHVtbikgewotICAgICAgICByZXR1cm4gbUN1cnNvci5nZXRGbG9hdChjb2x1bW4pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50KGludCBjb2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIG1DdXJzb3IuZ2V0SW50KGNvbHVtbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0TG9uZyhpbnQgY29sdW1uKSB7Ci0gICAgICAgIHJldHVybiBtQ3Vyc29yLmdldExvbmcoY29sdW1uKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnQoaW50IGNvbHVtbikgewotICAgICAgICByZXR1cm4gbUN1cnNvci5nZXRTaG9ydChjb2x1bW4pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGludCBjb2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIG1DdXJzb3IuZ2V0U3RyaW5nKGNvbHVtbik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRUeXBlKGludCBjb2x1bW4pIHsKLSAgICAgICAgcmV0dXJuIG1DdXJzb3IuZ2V0VHlwZShjb2x1bW4pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzTnVsbChpbnQgY29sdW1uKSB7Ci0gICAgICAgIHJldHVybiBtQ3Vyc29yLmlzTnVsbChjb2x1bW4pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJvcnJvd2VkIGZyb20gVGltU29ydC5iaW5hcnlTb3J0KCksIGJ1dCBtb2RpZmllZCB0byBzb3J0IHR3byBjb2x1bW4KLSAgICAgKiBkYXRhc2V0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYmluYXJ5U29ydChpbnRbXSBwb3NpdGlvbiwgU3RyaW5nW10gdmFsdWUpIHsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcG9zaXRpb24ubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBzdGFydCA9IDE7IHN0YXJ0IDwgY291bnQ7IHN0YXJ0KyspIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBwaXZvdFBvc2l0aW9uID0gcG9zaXRpb25bc3RhcnRdOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBpdm90VmFsdWUgPSB2YWx1ZVtzdGFydF07Ci0KLSAgICAgICAgICAgIGludCBsZWZ0ID0gMDsKLSAgICAgICAgICAgIGludCByaWdodCA9IHN0YXJ0OwotCi0gICAgICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgaW50IG1pZCA9IChsZWZ0ICsgcmlnaHQpID4+PiAxOwotCi0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxocyA9IHBpdm90VmFsdWU7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJocyA9IHZhbHVlW21pZF07Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNvbXBhcmUgPSBEb2N1bWVudEluZm8uY29tcGFyZVRvSWdub3JlQ2FzZU51bGxhYmxlKGxocywgcmhzKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1pZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBuID0gc3RhcnQgLSBsZWZ0OwotICAgICAgICAgICAgc3dpdGNoIChuKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbltsZWZ0ICsgMl0gPSBwb3NpdGlvbltsZWZ0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlW2xlZnQgKyAyXSA9IHZhbHVlW2xlZnQgKyAxXTsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uW2xlZnQgKyAxXSA9IHBvc2l0aW9uW2xlZnRdOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZVtsZWZ0ICsgMV0gPSB2YWx1ZVtsZWZ0XTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwb3NpdGlvbiwgbGVmdCwgcG9zaXRpb24sIGxlZnQgKyAxLCBuKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZSwgbGVmdCwgdmFsdWUsIGxlZnQgKyAxLCBuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9zaXRpb25bbGVmdF0gPSBwaXZvdFBvc2l0aW9uOwotICAgICAgICAgICAgdmFsdWVbbGVmdF0gPSBwaXZvdFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQm9ycm93ZWQgZnJvbSBUaW1Tb3J0LmJpbmFyeVNvcnQoKSwgYnV0IG1vZGlmaWVkIHRvIHNvcnQgdHdvIGNvbHVtbgotICAgICAqIGRhdGFzZXQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBiaW5hcnlTb3J0KGludFtdIHBvc2l0aW9uLCBsb25nW10gdmFsdWUpIHsKLSAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcG9zaXRpb24ubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBzdGFydCA9IDE7IHN0YXJ0IDwgY291bnQ7IHN0YXJ0KyspIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBwaXZvdFBvc2l0aW9uID0gcG9zaXRpb25bc3RhcnRdOwotICAgICAgICAgICAgZmluYWwgbG9uZyBwaXZvdFZhbHVlID0gdmFsdWVbc3RhcnRdOwotCi0gICAgICAgICAgICBpbnQgbGVmdCA9IDA7Ci0gICAgICAgICAgICBpbnQgcmlnaHQgPSBzdGFydDsKLQotICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkgewotICAgICAgICAgICAgICAgIGludCBtaWQgPSAobGVmdCArIHJpZ2h0KSA+Pj4gMTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgbGhzID0gcGl2b3RWYWx1ZTsKLSAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHJocyA9IHZhbHVlW21pZF07Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGNvbXBhcmUgPSBMb25nLmNvbXBhcmUobGhzLCByaHMpOwotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlID4gMCkgewotICAgICAgICAgICAgICAgICAgICByaWdodCA9IG1pZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBuID0gc3RhcnQgLSBsZWZ0OwotICAgICAgICAgICAgc3dpdGNoIChuKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbltsZWZ0ICsgMl0gPSBwb3NpdGlvbltsZWZ0ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlW2xlZnQgKyAyXSA9IHZhbHVlW2xlZnQgKyAxXTsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uW2xlZnQgKyAxXSA9IHBvc2l0aW9uW2xlZnRdOwotICAgICAgICAgICAgICAgICAgICB2YWx1ZVtsZWZ0ICsgMV0gPSB2YWx1ZVtsZWZ0XTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShwb3NpdGlvbiwgbGVmdCwgcG9zaXRpb24sIGxlZnQgKyAxLCBuKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh2YWx1ZSwgbGVmdCwgdmFsdWUsIGxlZnQgKyAxLCBuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcG9zaXRpb25bbGVmdF0gPSBwaXZvdFBvc2l0aW9uOwotICAgICAgICAgICAgdmFsdWVbbGVmdF0gPSBwaXZvdFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0YXRlLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3RhdGUuamF2YQppbmRleCBjODFkNGZiLi4yZjAyMjRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3RhdGUuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3RhdGUuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudFN0YWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkR1cmFibGVVdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Sb290SW5mbzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CkBAIC0zNiw3ICszNyw3IEBACiAgICAgLyoqIEV4cGxpY2l0IHVzZXIgY2hvaWNlICovCiAgICAgcHVibGljIGludCB1c2VyTW9kZSA9IE1PREVfVU5LTk9XTjsKICAgICAvKiogRGVyaXZlZCBhZnRlciBsb2FkZXIgKi8KLSAgICBwdWJsaWMgaW50IGRlcml2ZWRNb2RlID0gTU9ERV9MSVNUOworICAgIHB1YmxpYyBpbnQgZGVyaXZlZE1vZGUgPSBNT0RFX0dSSUQ7CiAKICAgICAvKiogRXhwbGljaXQgdXNlciBjaG9pY2UgKi8KICAgICBwdWJsaWMgaW50IHVzZXJTb3J0T3JkZXIgPSBTT1JUX09SREVSX1VOS05PV047CkBAIC00OSw3ICs1MCw2IEBACiAgICAgcHVibGljIGJvb2xlYW4gbG9jYWxPbmx5OwogICAgIHB1YmxpYyBib29sZWFuIGZvcmNlQWR2YW5jZWQ7CiAgICAgcHVibGljIGJvb2xlYW4gc2hvd0FkdmFuY2VkOwotICAgIHB1YmxpYyBib29sZWFuIHN0YWNrVG91Y2hlZDsKICAgICBwdWJsaWMgYm9vbGVhbiByZXN0b3JlZDsKICAgICBwdWJsaWMgYm9vbGVhbiBkaXJlY3RvcnlDb3B5OwogICAgIHB1YmxpYyBib29sZWFuIG9wZW5hYmxlT25seTsKQEAgLTg3LDYgKzg3LDggQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT1JUX09SREVSX0xBU1RfTU9ESUZJRUQgPSAyOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPUlRfT1JERVJfU0laRSA9IDM7CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gbVN0YWNrVG91Y2hlZDsKKwogICAgIHB1YmxpYyB2b2lkIGluaXRBY2NlcHRNaW1lcyhJbnRlbnQgaW50ZW50KSB7CiAgICAgICAgIGlmIChpbnRlbnQuaGFzRXh0cmEoSW50ZW50LkVYVFJBX01JTUVfVFlQRVMpKSB7CiAgICAgICAgICAgICBhY2NlcHRNaW1lcyA9IGludGVudC5nZXRTdHJpbmdBcnJheUV4dHJhKEludGVudC5FWFRSQV9NSU1FX1RZUEVTKTsKQEAgLTk2LDYgKzk4LDMxIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBvblJvb3RDaGFuZ2VkKFJvb3RJbmZvIHJvb3QpIHsKKyAgICAgICAgc3RhY2sucm9vdCA9IHJvb3Q7CisgICAgICAgIHN0YWNrLmNsZWFyKCk7CisgICAgICAgIG1TdGFja1RvdWNoZWQgPSB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHB1c2hEb2N1bWVudChEb2N1bWVudEluZm8gaW5mbykgeworICAgICAgICBzdGFjay5wdXNoKGluZm8pOworICAgICAgICBtU3RhY2tUb3VjaGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwb3BEb2N1bWVudCgpIHsKKyAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgIG1TdGFja1RvdWNoZWQgPSB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFN0YWNrKERvY3VtZW50U3RhY2sgc3RhY2spIHsKKyAgICAgICAgdGhpcy5zdGFjayA9IHN0YWNrOworICAgICAgICBtU3RhY2tUb3VjaGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNMb2NhdGlvbkNoYW5nZWQoKSB7CisgICAgICAgIHJldHVybiBtU3RhY2tUb3VjaGVkOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZGVzY3JpYmVDb250ZW50cygpIHsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTMsNyArMTQwLDYgQEAKICAgICAgICAgb3V0LndyaXRlSW50KGxvY2FsT25seSA/IDEgOiAwKTsKICAgICAgICAgb3V0LndyaXRlSW50KGZvcmNlQWR2YW5jZWQgPyAxIDogMCk7CiAgICAgICAgIG91dC53cml0ZUludChzaG93QWR2YW5jZWQgPyAxIDogMCk7Ci0gICAgICAgIG91dC53cml0ZUludChzdGFja1RvdWNoZWQgPyAxIDogMCk7CiAgICAgICAgIG91dC53cml0ZUludChyZXN0b3JlZCA/IDEgOiAwKTsKICAgICAgICAgRHVyYWJsZVV0aWxzLndyaXRlVG9QYXJjZWwob3V0LCBzdGFjayk7CiAgICAgICAgIG91dC53cml0ZVN0cmluZyhjdXJyZW50U2VhcmNoKTsKQEAgLTEyMSw2ICsxNDcsNyBAQAogICAgICAgICBvdXQud3JpdGVMaXN0KHNlbGVjdGVkRG9jdW1lbnRzRm9yQ29weSk7CiAgICAgICAgIG91dC53cml0ZUxpc3QoZXhjbHVkZWRBdXRob3JpdGllcyk7CiAgICAgICAgIG91dC53cml0ZUludChvcGVuYWJsZU9ubHkgPyAxIDogMCk7CisgICAgICAgIG91dC53cml0ZUludChtU3RhY2tUb3VjaGVkID8gMSA6IDApOwogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ3JlYXRvcjxTdGF0ZT4gQ1JFQVRPUiA9IG5ldyBDcmVhdG9yPFN0YXRlPigpIHsKQEAgLTEzNyw3ICsxNjQsNiBAQAogICAgICAgICAgICAgc3RhdGUubG9jYWxPbmx5ID0gaW4ucmVhZEludCgpICE9IDA7CiAgICAgICAgICAgICBzdGF0ZS5mb3JjZUFkdmFuY2VkID0gaW4ucmVhZEludCgpICE9IDA7CiAgICAgICAgICAgICBzdGF0ZS5zaG93QWR2YW5jZWQgPSBpbi5yZWFkSW50KCkgIT0gMDsKLSAgICAgICAgICAgIHN0YXRlLnN0YWNrVG91Y2hlZCA9IGluLnJlYWRJbnQoKSAhPSAwOwogICAgICAgICAgICAgc3RhdGUucmVzdG9yZWQgPSBpbi5yZWFkSW50KCkgIT0gMDsKICAgICAgICAgICAgIER1cmFibGVVdGlscy5yZWFkRnJvbVBhcmNlbChpbiwgc3RhdGUuc3RhY2spOwogICAgICAgICAgICAgc3RhdGUuY3VycmVudFNlYXJjaCA9IGluLnJlYWRTdHJpbmcoKTsKQEAgLTE0NSw2ICsxNzEsNyBAQAogICAgICAgICAgICAgaW4ucmVhZExpc3Qoc3RhdGUuc2VsZWN0ZWREb2N1bWVudHNGb3JDb3B5LCBudWxsKTsKICAgICAgICAgICAgIGluLnJlYWRMaXN0KHN0YXRlLmV4Y2x1ZGVkQXV0aG9yaXRpZXMsIG51bGwpOwogICAgICAgICAgICAgc3RhdGUub3BlbmFibGVPbmx5ID0gaW4ucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBzdGF0ZS5tU3RhY2tUb3VjaGVkID0gaW4ucmVhZEludCgpICE9IDA7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRGlyZWN0b3J5RnJhZ21lbnQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0RpcmVjdG9yeUZyYWdtZW50LmphdmEKaW5kZXggMmQ3N2M2YS4uMjJlODFjNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRGlyZWN0b3J5RnJhZ21lbnQuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9EaXJlY3RvcnlGcmFnbWVudC5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLk1PREVfVU5LTk9XTjsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuU09SVF9PUkRFUl9VTktOT1dOOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29ySW50OwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yTG9uZzsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrU3RhdGU7CkBAIC0zNiwzMCArMzUsMjUgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudFRyYW5zYWN0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLkxvYWRlck1hbmFnZXIuTG9hZGVyQ2FsbGJhY2tzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5DbGlwRGF0YTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuTG9hZGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWw7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5PcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLlZpc2libGVGb3JUZXN0aW5nOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LlNuYWNrYmFyOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuR3JpZExheW91dE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5HcmlkTGF5b3V0TWFuYWdlci5TcGFuU2l6ZUxvb2t1cDsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkxpbmVhckxheW91dE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXc7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXcuTGF5b3V0TWFuYWdlcjsKQEAgLTY3LDE3ICs2MSwxMiBAQAogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3LlJlY3ljbGVyTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXcuVmlld0hvbGRlcjsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRm9ybWF0dGVyOwotaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuVGltZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQm9vbGVhbkFycmF5OwogaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwogaW1wb3J0IGFuZHJvaWQudmlldy5BY3Rpb25Nb2RlOwogaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lkdlc3R1cmVEZXRlY3RvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKQEAgLTg5LDUwICs3OCw0MCBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuQmFzZUFjdGl2aXR5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkJhc2VBY3Rpdml0eS5Eb2N1bWVudENvbnRleHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuQ29weVNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRGlyZWN0b3J5TG9hZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkRpcmVjdG9yeVJlc3VsdDsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Eb2N1bWVudENsaXBwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQWN0aXZpdHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQXBwbGljYXRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRXZlbnRzOwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkljb25VdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5NZW51czsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5NZXNzYWdlQmFyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLk1pbWVQcmVkaWNhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUHJvdmlkZXJFeGVjdXRvcjsKLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Qcm92aWRlckV4ZWN1dG9yLlByZWVtcHRhYmxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUmVjZW50TG9hZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJlY2VudHNQcm92aWRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SZWNlbnRzUHJvdmlkZXIuU3RhdGVDb2x1bW5zOwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RDdXJzb3JXcmFwcGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RzQ2FjaGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkOwotaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZDsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TbmFja2JhcnM7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuVGh1bWJuYWlsQ2FjaGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5NdWx0aVNlbGVjdE1hbmFnZXIuU2VsZWN0aW9uOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudFN0YWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLlJvb3RJbmZvOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uczsKIAogaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuTGlzdHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKICAqIERpc3BsYXkgdGhlIGRvY3VtZW50cyBpbnNpZGUgYSBzaW5nbGUgZGlyZWN0b3J5LgogICovCi1wdWJsaWMgY2xhc3MgRGlyZWN0b3J5RnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRGlyZWN0b3J5RnJhZ21lbnQiOworcHVibGljIGNsYXNzIERpcmVjdG9yeUZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQgaW1wbGVtZW50cyBEb2N1bWVudHNBZGFwdGVyLkVudmlyb25tZW50IHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfTk9STUFMID0gMTsKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUWVBFX1NFQVJDSCA9IDI7CkBAIC0xNDUsOCArMTI0LDEwIEBACiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVFVRVNUX0NPUFlfREVTVElOQVRJT04gPSAxOwogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEaXJlY3RvcnlGcmFnbWVudCI7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9BREVSX0lEID0gNDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19FTkFCTEVfRE5EID0gdHJ1ZTsKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19FTkFCTEVfRE5EID0gdHJ1ZTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9UWVBFID0gInR5cGUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ST09UID0gInJvb3QiOwpAQCAtMTU5LDYgKzE0MCw4IEBACiAgICAgcHJpdmF0ZSBNb2RlbC5VcGRhdGVMaXN0ZW5lciBtTW9kZWxVcGRhdGVMaXN0ZW5lciA9IG5ldyBNb2RlbFVwZGF0ZUxpc3RlbmVyKCk7CiAgICAgcHJpdmF0ZSBJdGVtQ2xpY2tMaXN0ZW5lciBtSXRlbUNsaWNrTGlzdGVuZXIgPSBuZXcgSXRlbUNsaWNrTGlzdGVuZXIoKTsKIAorICAgIHByaXZhdGUgSWNvbkhlbHBlciBtSWNvbkhlbHBlcjsKKwogICAgIHByaXZhdGUgVmlldyBtRW1wdHlWaWV3OwogICAgIHByaXZhdGUgUmVjeWNsZXJWaWV3IG1SZWNWaWV3OwogCkBAIC0xNjgsOSArMTUxLDYgQEAKICAgICBwcml2YXRlIGludCBtTGFzdE1vZGUgPSBNT0RFX1VOS05PV047CiAgICAgcHJpdmF0ZSBpbnQgbUxhc3RTb3J0T3JkZXIgPSBTT1JUX09SREVSX1VOS05PV047CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0U2hvd1NpemU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1IaWRlR3JpZFRpdGxlczsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVN2ZWx0ZVJlY2VudHM7Ci0gICAgcHJpdmF0ZSBQb2ludCBtVGh1bWJTaXplOwogICAgIHByaXZhdGUgRG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKICAgICBwcml2YXRlIExvYWRlckNhbGxiYWNrczxEaXJlY3RvcnlSZXN1bHQ+IG1DYWxsYmFja3M7CiAgICAgcHJpdmF0ZSBGcmFnbWVudFR1bmVyIG1UdW5lcjsKQEAgLTE4Myw5ICsxNjMsNiBAQAogICAgIHByaXZhdGUgTWVzc2FnZUJhciBtTWVzc2FnZUJhcjsKICAgICBwcml2YXRlIFZpZXcgbVByb2dyZXNzQmFyOwogCi0gICAgcHJpdmF0ZSBpbnQgbVNlbGVjdGVkSXRlbUNvbG9yOwotICAgIHByaXZhdGUgaW50IG1EZWZhdWx0SXRlbUNvbG9yOwotCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHNob3dOb3JtYWwoRnJhZ21lbnRNYW5hZ2VyIGZtLCBSb290SW5mbyByb290LCBEb2N1bWVudEluZm8gZG9jLCBpbnQgYW5pbSkgewogICAgICAgICBzaG93KGZtLCBUWVBFX05PUk1BTCwgcm9vdCwgZG9jLCBudWxsLCBhbmltKTsKICAgICB9CkBAIC0zMTMsMTUgKzI5MCwxMiBAQAogICAgICAgICBmaW5hbCBSb290SW5mbyByb290ID0gZ2V0QXJndW1lbnRzKCkuZ2V0UGFyY2VsYWJsZShFWFRSQV9ST09UKTsKICAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGRvYyA9IGdldEFyZ3VtZW50cygpLmdldFBhcmNlbGFibGUoRVhUUkFfRE9DKTsKIAotICAgICAgICBtQWRhcHRlciA9IG5ldyBEb2N1bWVudHNBZGFwdGVyKGNvbnRleHQpOwotICAgICAgICBtUmVjVmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKKyAgICAgICAgbUljb25IZWxwZXIgPSBuZXcgSWNvbkhlbHBlcihjb250ZXh0LCBzdGF0ZS5kZXJpdmVkTW9kZSk7CiAKLSAgICAgICAgbURlZmF1bHRJdGVtQ29sb3IgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbG9yKGFuZHJvaWQuUi5jb2xvci50cmFuc3BhcmVudCk7Ci0gICAgICAgIC8vIEdldCB0aGUgYWNjZW50IGNvbG9yLgotICAgICAgICBUeXBlZFZhbHVlIHNlbENvbG9yID0gbmV3IFR5cGVkVmFsdWUoKTsKLSAgICAgICAgY29udGV4dC5nZXRUaGVtZSgpLnJlc29sdmVBdHRyaWJ1dGUoYW5kcm9pZC5SLmF0dHIuY29sb3JBY2NlbnQsIHNlbENvbG9yLCB0cnVlKTsKLSAgICAgICAgLy8gU2V0IHRoZSBvcGFjaXR5IHRvIDEwJS4KLSAgICAgICAgbVNlbGVjdGVkSXRlbUNvbG9yID0gKHNlbENvbG9yLmRhdGEgJiAweDAwZmZmZmZmKSB8IDB4MTYwMDAwMDA7CisgICAgICAgIG1BZGFwdGVyID0gbmV3IFNlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyKAorICAgICAgICAgICAgICAgIHRoaXMsIG5ldyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIodGhpcywgbUljb25IZWxwZXIpKTsKKworICAgICAgICBtUmVjVmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKIAogICAgICAgICBHZXN0dXJlRGV0ZWN0b3IuU2ltcGxlT25HZXN0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPQogICAgICAgICAgICAgICAgIG5ldyBHZXN0dXJlRGV0ZWN0b3IuU2ltcGxlT25HZXN0dXJlTGlzdGVuZXIoKSB7CkBAIC0zNTksMTIgKzMzMywxNCBAQAogICAgICAgICAvLyBpbnRvIHRoZSBzZWxlY3Rpb24gbWFuYWdlci4KICAgICAgICAgbVNlbGVjdGlvbk1hbmFnZXIgPSBuZXcgTXVsdGlTZWxlY3RNYW5hZ2VyKAogICAgICAgICAgICAgICAgIG1SZWNWaWV3LAorICAgICAgICAgICAgICAgIG1BZGFwdGVyLAogICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93TXVsdGlwbGUKICAgICAgICAgICAgICAgICAgICAgPyBNdWx0aVNlbGVjdE1hbmFnZXIuTU9ERV9NVUxUSVBMRQogICAgICAgICAgICAgICAgICAgICA6IE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CiAgICAgICAgIG1TZWxlY3Rpb25NYW5hZ2VyLmFkZENhbGxiYWNrKG5ldyBTZWxlY3Rpb25Nb2RlTGlzdGVuZXIoKSk7CiAKLSAgICAgICAgbU1vZGVsID0gbmV3IE1vZGVsKGNvbnRleHQsIG1BZGFwdGVyKTsKKyAgICAgICAgbU1vZGVsID0gbmV3IE1vZGVsKGNvbnRleHQpOworICAgICAgICBtTW9kZWwuYWRkVXBkYXRlTGlzdGVuZXIobUFkYXB0ZXIpOwogICAgICAgICBtTW9kZWwuYWRkVXBkYXRlTGlzdGVuZXIobU1vZGVsVXBkYXRlTGlzdGVuZXIpOwogCiAgICAgICAgIG1UeXBlID0gZ2V0QXJndW1lbnRzKCkuZ2V0SW50KEVYVFJBX1RZUEUpOwpAQCAtMzczLDE3ICszNDksMjAgQEAKICAgICAgICAgbVR1bmVyID0gRnJhZ21lbnRUdW5lci5waWNrKHN0YXRlKTsKICAgICAgICAgbUNsaXBwZXIgPSBuZXcgRG9jdW1lbnRDbGlwcGVyKGNvbnRleHQpOwogCisgICAgICAgIGJvb2xlYW4gaGlkZUdyaWRUaXRsZXM7CiAgICAgICAgIGlmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOKSB7CiAgICAgICAgICAgICAvLyBIaWRlIHRpdGxlcyB3aGVuIHNob3dpbmcgcmVjZW50cyBmb3IgcGlja2luZyBpbWFnZXMvdmlkZW9zCi0gICAgICAgICAgICBtSGlkZUdyaWRUaXRsZXMgPSBNaW1lUHJlZGljYXRlLm1pbWVNYXRjaGVzKAorICAgICAgICAgICAgaGlkZUdyaWRUaXRsZXMgPSBNaW1lUHJlZGljYXRlLm1pbWVNYXRjaGVzKAogICAgICAgICAgICAgICAgICAgICBNaW1lUHJlZGljYXRlLlZJU1VBTF9NSU1FUywgc3RhdGUuYWNjZXB0TWltZXMpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUhpZGVHcmlkVGl0bGVzID0gKGRvYyAhPSBudWxsKSAmJiBkb2MuaXNHcmlkVGl0bGVzSGlkZGVuKCk7CisgICAgICAgICAgICBoaWRlR3JpZFRpdGxlcyA9IChkb2MgIT0gbnVsbCkgJiYgZG9jLmlzR3JpZFRpdGxlc0hpZGRlbigpOwogICAgICAgICB9CisgICAgICAgIEdyaWREb2N1bWVudEhvbGRlci5zZXRIaWRlVGl0bGVzKGhpZGVHcmlkVGl0bGVzKTsKIAogICAgICAgICBmaW5hbCBBY3Rpdml0eU1hbmFnZXIgYW0gPSAoQWN0aXZpdHlNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCiAgICAgICAgICAgICAgICAgQ29udGV4dC5BQ1RJVklUWV9TRVJWSUNFKTsKLSAgICAgICAgbVN2ZWx0ZVJlY2VudHMgPSBhbS5pc0xvd1JhbURldmljZSgpICYmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOKTsKKyAgICAgICAgYm9vbGVhbiBzdmVsdGUgPSBhbS5pc0xvd1JhbURldmljZSgpICYmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOKTsKKyAgICAgICAgbUljb25IZWxwZXIuc2V0VGh1bWJuYWlsc0VuYWJsZWQoIXN2ZWx0ZSk7CiAKICAgICAgICAgbUNhbGxiYWNrcyA9IG5ldyBMb2FkZXJDYWxsYmFja3M8RGlyZWN0b3J5UmVzdWx0PigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtNDI4LDEyICs0MDcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZGVyaXZlZE1vZGUgPSByZXN1bHQubW9kZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGUuZGVyaXZlZFNvcnRPcmRlciA9IHJlc3VsdC5zb3J0T3JkZXI7Ci0gICAgICAgICAgICAgICAgKChCYXNlQWN0aXZpdHkpIGNvbnRleHQpLm9uU3RhdGVDaGFuZ2VkKCk7CiAKICAgICAgICAgICAgICAgICB1cGRhdGVEaXNwbGF5U3RhdGUoKTsKIAogICAgICAgICAgICAgICAgIC8vIFdoZW4gbGF1bmNoZWQgaW50byBlbXB0eSByZWNlbnRzLCBzaG93IGRyYXdlcgotICAgICAgICAgICAgICAgIGlmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOICYmIG1Nb2RlbC5pc0VtcHR5KCkgJiYgIXN0YXRlLnN0YWNrVG91Y2hlZCAmJgorICAgICAgICAgICAgICAgIGlmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOICYmIG1Nb2RlbC5pc0VtcHR5KCkgJiYgIXN0YXRlLmhhc0xvY2F0aW9uQ2hhbmdlZCgpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0IGluc3RhbmNlb2YgRG9jdW1lbnRzQWN0aXZpdHkpIHsKICAgICAgICAgICAgICAgICAgICAgKChEb2N1bWVudHNBY3Rpdml0eSkgY29udGV4dCkuc2V0Um9vdHNEcmF3ZXJPcGVuKHRydWUpOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ0Myw2ICs0MjEsOSBAQAogICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCAmJiAhZ2V0QXJndW1lbnRzKCkuZ2V0Qm9vbGVhbihFWFRSQV9JR05PUkVfU1RBVEUsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgICAgICBnZXRWaWV3KCkucmVzdG9yZUhpZXJhcmNoeVN0YXRlKGNvbnRhaW5lcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtTGFzdFNvcnRPcmRlciAhPSBzdGF0ZS5kZXJpdmVkU29ydE9yZGVyKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZXJpdmVkIHNvcnQgb3JkZXIgdGFrZXMgdGhlIHVzZXIgc29ydCBvcmRlciBpbnRvIGFjY291bnQsIGJ1dCBhcHBsaWVzCisgICAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdG9yeS1zcGVjaWZpYyBkZWZhdWx0cyB3aGVuIHRoZSB1c2VyIGRvZXNuJ3QgZXhwbGljaXRseSBzZXQgdGhlIHNvcnQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3JkZXIuIFNjcm9sbCB0byB0aGUgdG9wIGlmIHRoZSBzb3J0IG9yZGVyIGFjdHVhbGx5IGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgICAgIG1SZWNWaWV3LnNtb290aFNjcm9sbFRvUG9zaXRpb24oMCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC00NzQsMTQgKzQ1NSwxNSBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgQ29weVNlcnZpY2Uuc3RhcnQoZ2V0QWN0aXZpdHkoKSwgZ2V0RGlzcGxheVN0YXRlKCkuc2VsZWN0ZWREb2N1bWVudHNGb3JDb3B5LAotICAgICAgICAgICAgICAgIChEb2N1bWVudFN0YWNrKSBkYXRhLmdldFBhcmNlbGFibGVFeHRyYShTaGFyZWQuRVhUUkFfU1RBQ0spLAotICAgICAgICAgICAgICAgIGRhdGEuZ2V0SW50RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfVFJBTlNGRVJfTU9ERSwgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9DT1BZKSk7Ci0gICAgfQorICAgICAgICBpbnQgb3BlcmF0aW9uVHlwZSA9IGRhdGEuZ2V0SW50RXh0cmEoCisgICAgICAgICAgICAgICAgRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgIEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZKTsKIAotICAgIHByaXZhdGUgaW50IGdldEV2ZW50QWRhcHRlclBvc2l0aW9uKE1vdGlvbkV2ZW50IGUpIHsKLSAgICAgICAgVmlldyB2aWV3ID0gbVJlY1ZpZXcuZmluZENoaWxkVmlld1VuZGVyKGUuZ2V0WCgpLCBlLmdldFkoKSk7Ci0gICAgICAgIHJldHVybiB2aWV3ICE9IG51bGwgPyBtUmVjVmlldy5nZXRDaGlsZEFkYXB0ZXJQb3NpdGlvbih2aWV3KSA6IFJlY3ljbGVyVmlldy5OT19QT1NJVElPTjsKKyAgICAgICAgRmlsZU9wZXJhdGlvbnMuc3RhcnQoCisgICAgICAgICAgICAgICAgZ2V0QWN0aXZpdHkoKSwKKyAgICAgICAgICAgICAgICBnZXREaXNwbGF5U3RhdGUoKS5zZWxlY3RlZERvY3VtZW50c0ZvckNvcHksCisgICAgICAgICAgICAgICAgKERvY3VtZW50U3RhY2spIGRhdGEuZ2V0UGFyY2VsYWJsZUV4dHJhKFNoYXJlZC5FWFRSQV9TVEFDSyksCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uVHlwZSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIG9uU2luZ2xlVGFwVXAoTW90aW9uRXZlbnQgZSkgewpAQCAtNDg5LDkgKzQ3MSw5IEBACiAgICAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIHNlbGVjdGlvbiBtYW5hZ2VyLiAgVGFwIGV2ZW50cyB0aGF0IG9jY3VyIHdoaWxlIHRoZSBzZWxlY3Rpb24gbWFuYWdlciBpcwogICAgICAgICAvLyBhY3RpdmUgYXJlIGFsc28gc2VsZWN0aW9uIGV2ZW50cy4KICAgICAgICAgaWYgKEV2ZW50cy5pc1RvdWNoRXZlbnQoZSkgJiYgIW1TZWxlY3Rpb25NYW5hZ2VyLmhhc1NlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBnZXRFdmVudEFkYXB0ZXJQb3NpdGlvbihlKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbiAhPSBSZWN5Y2xlclZpZXcuTk9fUE9TSVRJT04pIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlVmlld0l0ZW0ocG9zaXRpb24pOworICAgICAgICAgICAgU3RyaW5nIGlkID0gZ2V0TW9kZWxJZChlKTsKKyAgICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVZpZXdJdGVtKGlkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01MDAsMTYgKzQ4MiwxNiBAQAogICAgIHByb3RlY3RlZCBib29sZWFuIG9uRG91YmxlVGFwKE1vdGlvbkV2ZW50IGUpIHsKICAgICAgICAgaWYgKEV2ZW50cy5pc01vdXNlRXZlbnQoZSkpIHsKICAgICAgICAgICAgIExvZy5kKFRBRywgIkhhbmRsaW5nIGRvdWJsZSB0YXAgZnJvbSBtb3VzZS4iKTsKLSAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGdldEV2ZW50QWRhcHRlclBvc2l0aW9uKGUpOwotICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IFJlY3ljbGVyVmlldy5OT19QT1NJVElPTikgewotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVWaWV3SXRlbShwb3NpdGlvbik7CisgICAgICAgICAgICBTdHJpbmcgaWQgPSBnZXRNb2RlbElkKGUpOworICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlVmlld0l0ZW0oaWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gaGFuZGxlVmlld0l0ZW0oaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtTW9kZWwuZ2V0SXRlbShwb3NpdGlvbik7CisgICAgcHJpdmF0ZSBib29sZWFuIGhhbmRsZVZpZXdJdGVtKFN0cmluZyBpZCkgeworICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbU1vZGVsLmdldEl0ZW0oaWQpOwogICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOwogICAgICAgICBmaW5hbCBTdHJpbmcgZG9jTWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKICAgICAgICAgZmluYWwgaW50IGRvY0ZsYWdzID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTKTsKQEAgLTU5NiwxOSArNTc4LDE5IEBACiAgICAgICogY2xhc3NlcyBhcyBuZWVkZWQuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dChpbnQgbW9kZSkgewotICAgICAgICBmaW5hbCBpbnQgdGh1bWJTaXplOwotCiAgICAgICAgIGZpbmFsIExheW91dE1hbmFnZXIgbGF5b3V0OwogICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICAgICAgICAgIGNhc2UgTU9ERV9HUklEOgotICAgICAgICAgICAgICAgIHRodW1iU2l6ZSA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmdyaWRfd2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChtR3JpZExheW91dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1HcmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSwgbUNvbHVtbkNvdW50ICk7CisgICAgICAgICAgICAgICAgICAgIG1HcmlkTGF5b3V0ID0gbmV3IEdyaWRMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSwgbUNvbHVtbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgU3BhblNpemVMb29rdXAgbG9va3VwID0gbUFkYXB0ZXIuY3JlYXRlU3BhblNpemVMb29rdXAoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxvb2t1cCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtR3JpZExheW91dC5zZXRTcGFuU2l6ZUxvb2t1cChsb29rdXApOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGxheW91dCA9IG1HcmlkTGF5b3V0OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNT0RFX0xJU1Q6Ci0gICAgICAgICAgICAgICAgdGh1bWJTaXplID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4uaWNvbl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAobUxpc3RMYXlvdXQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtTGlzdExheW91dCA9IG5ldyBMaW5lYXJMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjE5LDEyICs2MDEsMTIgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgbW9kZTogIiArIG1vZGUpOwogICAgICAgICB9CiAKLSAgICAgICAgbVJlY1ZpZXcuc2V0TGF5b3V0TWFuYWdlcihsYXlvdXQpOwotICAgICAgICAvLyBUT0RPOiBPbmNlIGIvMjM2OTE1NDEgaXMgcmVzb2x2ZWQsIHVzZSBhIGxpc3RlbmVyIHdpdGhpbiBNdWx0aVNlbGVjdE1hbmFnZXIgaW5zdGVhZCBvZgotICAgICAgICAvLyBpbXBlcmF0aXZlbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgotICAgICAgICBtU2VsZWN0aW9uTWFuYWdlci5oYW5kbGVMYXlvdXRDaGFuZ2VkKCk7CisgICAgICAgIGludCBwYWQgPSBnZXREaXJlY3RvcnlQYWRkaW5nKG1vZGUpOworICAgICAgICBtUmVjVmlldy5zZXRQYWRkaW5nKHBhZCwgcGFkLCBwYWQsIHBhZCk7CiAgICAgICAgIC8vIHNldHRpbmcgbGF5b3V0IG1hbmFnZXIgYXV0b21hdGljYWxseSBpbnZhbGlkYXRlcyBleGlzdGluZyBWaWV3SG9sZGVycy4KLSAgICAgICAgbVRodW1iU2l6ZSA9IG5ldyBQb2ludCh0aHVtYlNpemUsIHRodW1iU2l6ZSk7CisgICAgICAgIG1SZWNWaWV3LnNldExheW91dE1hbmFnZXIobGF5b3V0KTsKKyAgICAgICAgbVNlbGVjdGlvbk1hbmFnZXIuaGFuZGxlTGF5b3V0Q2hhbmdlZCgpOyAgLy8gUmVjeWNsZXJWaWV3IGRvZXNuJ3QgZG8gdGhpcyBmb3IgdXMKKyAgICAgICAgbUljb25IZWxwZXIuc2V0TW9kZShtb2RlKTsKICAgICB9CiAKICAgICBwcml2YXRlIGludCBjYWxjdWxhdGVDb2x1bW5Db3VudCgpIHsKQEAgLTYzOSw2ICs2MjEsMjUgQEAKICAgICAgICAgcmV0dXJuIGNvbHVtbkNvdW50OwogICAgIH0KIAorICAgIHByaXZhdGUgaW50IGdldERpcmVjdG9yeVBhZGRpbmcoaW50IG1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIE1PREVfR1JJRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgUi5kaW1lbi5ncmlkX2NvbnRhaW5lcl9wYWRkaW5nKTsKKyAgICAgICAgICAgIGNhc2UgTU9ERV9MSVNUOgorICAgICAgICAgICAgICAgIHJldHVybiBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBSLmRpbWVuLmxpc3RfY29udGFpbmVyX3BhZGRpbmcpOworICAgICAgICAgICAgY2FzZSBNT0RFX1VOS05PV046CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVuc3VwcG9ydGVkIGxheW91dCBtb2RlOiAiICsgbW9kZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldENvbHVtbkNvdW50KCkgeworICAgICAgICByZXR1cm4gbUNvbHVtbkNvdW50OworICAgIH0KKwogICAgIC8qKgogICAgICAqIE1hbmFnZXMgdGhlIGludGVncmF0aW9uIGJldHdlZW4gb3VyIEFjdGlvbk1vZGUgYW5kIE11bHRpU2VsZWN0TWFuYWdlciwgaW5pdGlhdGluZwogICAgICAqIEFjdGlvbk1vZGUgd2hlbiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgY2FuY2VsaW5nIGl0IHdoZW4gdGhlcmUgaXMgbm8gc2VsZWN0aW9uLApAQCAtNjUzLDkgKzY1NCw5IEBACiAgICAgICAgIHByaXZhdGUgTWVudSBtTWVudTsKIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25CZWZvcmVJdGVtU3RhdGVDaGFuZ2UoaW50IHBvc2l0aW9uLCBib29sZWFuIHNlbGVjdGVkKSB7CisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uQmVmb3JlSXRlbVN0YXRlQ2hhbmdlKFN0cmluZyBtb2RlbElkLCBib29sZWFuIHNlbGVjdGVkKSB7CiAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbU1vZGVsLmdldEl0ZW0ocG9zaXRpb24pOworICAgICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtTW9kZWwuZ2V0SXRlbShtb2RlbElkKTsKICAgICAgICAgICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOwogICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2NNaW1lVHlwZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUpOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBkb2NGbGFncyA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9GTEFHUyk7CkBAIC02NjUsOCArNjY2LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TdGF0ZUNoYW5nZWQoaW50IHBvc2l0aW9uLCBib29sZWFuIHNlbGVjdGVkKSB7Ci0gICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbU1vZGVsLmdldEl0ZW0ocG9zaXRpb24pOworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TdGF0ZUNoYW5nZWQoU3RyaW5nIG1vZGVsSWQsIGJvb2xlYW4gc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtTW9kZWwuZ2V0SXRlbShtb2RlbElkKTsKICAgICAgICAgICAgIGNoZWNrTm90TnVsbChjdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7CiAKICAgICAgICAgICAgIGZpbmFsIGludCBkb2NGbGFncyA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9GTEFHUyk7CkBAIC03NTgsMTQgKzc1OSwxNCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIGNhc2UgUi5pZC5tZW51X2NvcHlfdG86Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyRG9jdW1lbnRzKHNlbGVjdGlvbiwgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9DT1BZKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJEb2N1bWVudHMoc2VsZWN0aW9uLCBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fQ09QWSk7CiAgICAgICAgICAgICAgICAgICAgIG1vZGUuZmluaXNoKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSLmlkLm1lbnVfbW92ZV90bzoKICAgICAgICAgICAgICAgICAgICAgLy8gRXhpdCBzZWxlY3Rpb24gbW9kZSBmaXJzdCwgc28gd2UgYXZvaWQgZGVzZWxlY3RpbmcgZGVsZXRlZCBkb2N1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgIG1vZGUuZmluaXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyRG9jdW1lbnRzKHNlbGVjdGlvbiwgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9NT1ZFKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJEb2N1bWVudHMoc2VsZWN0aW9uLCBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICAgICAgY2FzZSBSLmlkLm1lbnVfY29weV90b19jbGlwYm9hcmQ6CkBAIC03ODUsMTQgKzc4NiwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjYW5jZWxUaHVtYm5haWxUYXNrKFZpZXcgdmlldykgeworICAgIHByaXZhdGUgdm9pZCBjYW5jZWxUaHVtYm5haWxUYXNrKFZpZXcgdmlldykgewogICAgICAgICBmaW5hbCBJbWFnZVZpZXcgaWNvblRodW1iID0gKEltYWdlVmlldykgdmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX3RodW1iKTsKICAgICAgICAgaWYgKGljb25UaHVtYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBUaHVtYm5haWxBc3luY1Rhc2sgb2xkVGFzayA9IChUaHVtYm5haWxBc3luY1Rhc2spIGljb25UaHVtYi5nZXRUYWcoKTsKLSAgICAgICAgICAgIGlmIChvbGRUYXNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBvbGRUYXNrLnByZWVtcHQoKTsKLSAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0VGFnKG51bGwpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbUljb25IZWxwZXIuc3RvcExvYWRpbmcoaWNvblRodW1iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODU4LDggKzg1NSwxMSBAQAogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRBY3Rpdml0eSgpOwogICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFNoYXJlZC5nZXRRdWFudGl0eVN0cmluZyhjb250ZXh0LCBSLnBsdXJhbHMuZGVsZXRpbmcsIHNlbGVjdGVkLnNpemUoKSk7CiAKLSAgICAgICAgbU1vZGVsLm1hcmtGb3JEZWxldGlvbihzZWxlY3RlZCk7CisgICAgICAgIC8vIEhpZGUgdGhlIGZpbGVzIGluIHRoZSBVSS4KKyAgICAgICAgZmluYWwgU3BhcnNlQXJyYXk8U3RyaW5nPiB0b0RlbGV0ZSA9IG1BZGFwdGVyLmhpZGUoc2VsZWN0ZWQuZ2V0QWxsKCkpOwogCisgICAgICAgIC8vIFNob3cgYSBzbmFja2JhciBpbmZvcm1pbmcgdGhlIHVzZXIgdGhhdCBmaWxlcyB3aWxsIGJlIGRlbGV0ZWQsIGFuZCBnaXZlIHRoZW0gYW4gb3B0aW9uIHRvCisgICAgICAgIC8vIGNhbmNlbC4KICAgICAgICAgZmluYWwgQWN0aXZpdHkgYWN0aXZpdHkgPSBnZXRBY3Rpdml0eSgpOwogICAgICAgICBTbmFja2JhcnMubWFrZVNuYWNrYmFyKGFjdGl2aXR5LCBtZXNzYWdlLCBTbmFja2Jhci5MRU5HVEhfTE9ORykKICAgICAgICAgICAgICAgICAuc2V0QWN0aW9uKApAQCAtODczLDE5ICs4NzMsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkRpc21pc3NlZChTbmFja2JhciBzbmFja2JhciwgaW50IGV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudCA9PSBTbmFja2Jhci5DYWxsYmFjay5ESVNNSVNTX0VWRU5UX0FDVElPTikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGVsLnVuZG9EZWxldGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRlbGV0ZSB3YXMgY2FuY2VsbGVkLCBqdXN0IHVuaGlkZSB0aGUgZmlsZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQWRhcHRlci51bmhpZGUodG9EZWxldGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGVsLmZpbmFsaXplRGVsZXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSBraWNrIG9mZiB0aGUgZGVsZXRlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGVsLmRlbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBNb2RlbC5EZWxldGlvbkxpc3RlbmVyKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNuYWNrYmFycy5tYWtlU25hY2tiYXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLnRvYXN0X2ZhaWxlZF9kZWxldGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbmFja2Jhci5MRU5HVEhfTE9ORykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaG93KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbmFja2JhcnMubWFrZVNuYWNrYmFyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcudG9hc3RfZmFpbGVkX2RlbGV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU25hY2tiYXIuTEVOR1RIX0xPTkcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaG93KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTkxNSw2NiArOTE4LDM4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFNoYXJlZC5FWFRSQV9ESVJFQ1RPUllfQ09QWSwgZGlyZWN0b3J5Q29weSk7Ci0gICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUsIG1vZGUpOworICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04sIG1vZGUpOwogICAgICAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCBSRVFVRVNUX0NPUFlfREVTVElOQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9LmV4ZWN1dGUoc2VsZWN0ZWQpOwogICAgIH0KIAotICAgIHByaXZhdGUgU3RhdGUgZ2V0RGlzcGxheVN0YXRlKCkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGluaXREb2N1bWVudEhvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIpIHsKKyAgICAgICAgaG9sZGVyLmFkZENsaWNrTGlzdGVuZXIobUl0ZW1DbGlja0xpc3RlbmVyKTsKKyAgICAgICAgaG9sZGVyLmFkZE9uS2V5TGlzdGVuZXIobVNlbGVjdGlvbk1hbmFnZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZERvY3VtZW50SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgQ3Vyc29yIGN1cnNvcikgeworICAgICAgICBpZiAoREVCVUdfRU5BQkxFX0RORCkgeworICAgICAgICAgICAgc2V0dXBEcmFnQW5kRHJvcE9uRG9jdW1lbnRWaWV3KGhvbGRlci5pdGVtVmlldywgY3Vyc29yKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdGF0ZSBnZXREaXNwbGF5U3RhdGUoKSB7CiAgICAgICAgIHJldHVybiAoKEJhc2VBY3Rpdml0eSkgZ2V0QWN0aXZpdHkoKSkuZ2V0RGlzcGxheVN0YXRlKCk7CiAgICAgfQogCi0gICAgLy8gUHJvdmlkZSBhIHJlZmVyZW5jZSB0byB0aGUgdmlld3MgZm9yIGVhY2ggZGF0YSBpdGVtCi0gICAgLy8gQ29tcGxleCBkYXRhIGl0ZW1zIG1heSBuZWVkIG1vcmUgdGhhbiBvbmUgdmlldyBwZXIgaXRlbSwgYW5kCi0gICAgLy8geW91IHByb3ZpZGUgYWNjZXNzIHRvIGFsbCB0aGUgdmlld3MgZm9yIGEgZGF0YSBpdGVtIGluIGEgdmlldyBob2xkZXIKLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIERvY3VtZW50SG9sZGVyCi0gICAgICAgICAgICBleHRlbmRzIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyCi0gICAgICAgICAgICBpbXBsZW1lbnRzIFZpZXcuT25LZXlMaXN0ZW5lcgotICAgIHsKLSAgICAgICAgcHVibGljIFN0cmluZyBkb2NJZDsgIC8vIFRoZSBzdGFibGUgZG9jdW1lbnQgaWQuCi0gICAgICAgIHByaXZhdGUgQ2xpY2tMaXN0ZW5lciBtQ2xpY2tMaXN0ZW5lcjsKLSAgICAgICAgcHJpdmF0ZSBWaWV3Lk9uS2V5TGlzdGVuZXIgbUtleUxpc3RlbmVyOwotCi0gICAgICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlcihWaWV3IHZpZXcpIHsKLSAgICAgICAgICAgIHN1cGVyKHZpZXcpOwotICAgICAgICAgICAgdmlldy5zZXRPbktleUxpc3RlbmVyKHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgewotICAgICAgICAgICAgaXRlbVZpZXcuc2V0QWN0aXZhdGVkKHNlbGVjdGVkKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbktleShWaWV3IHYsIGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgewotICAgICAgICAgICAgLy8gSW50ZXJjZXB0IGVudGVyIGtleS11cCBldmVudHMsIGFuZCB0cmVhdCB0aGVtIGFzIGNsaWNrcy4gIEZvcndhcmQgb3RoZXIgZXZlbnRzLgotICAgICAgICAgICAgaWYgKGV2ZW50LmdldEFjdGlvbigpID09IEtleUV2ZW50LkFDVElPTl9VUCAmJgotICAgICAgICAgICAgICAgICAgICBrZXlDb2RlID09IEtleUV2ZW50LktFWUNPREVfRU5URVIpIHsKLSAgICAgICAgICAgICAgICBpZiAobUNsaWNrTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtQ2xpY2tMaXN0ZW5lci5vbkNsaWNrKHRoaXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobUtleUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUtleUxpc3RlbmVyLm9uS2V5KHYsIGtleUNvZGUsIGV2ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZENsaWNrTGlzdGVuZXIoQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgY2hlY2tTdGF0ZShtQ2xpY2tMaXN0ZW5lciA9PSBudWxsKTsKLSAgICAgICAgICAgIG1DbGlja0xpc3RlbmVyID0gbGlzdGVuZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRPbktleUxpc3RlbmVyKFZpZXcuT25LZXlMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgY2hlY2tTdGF0ZShtS2V5TGlzdGVuZXIgPT0gbnVsbCk7Ci0gICAgICAgICAgICBtS2V5TGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgfQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbDsKICAgICB9CiAKLSAgICBpbnRlcmZhY2UgQ2xpY2tMaXN0ZW5lciB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRG9jdW1lbnRIb2xkZXIgZG9jKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50RW5hYmxlZChTdHJpbmcgZG9jTWltZVR5cGUsIGludCBkb2NGbGFncykgeworICAgICAgICByZXR1cm4gbVR1bmVyLmlzRG9jdW1lbnRFbmFibGVkKGRvY01pbWVUeXBlLCBkb2NGbGFncyk7CiAgICAgfQogCiAgICAgdm9pZCBzaG93RW1wdHlWaWV3KCkgewpAQCAtMTAwMCwyNTAgKzk3NSw2IEBACiAgICAgICAgIG1SZWNWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKICAgICB9CiAKLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIERvY3VtZW50c0FkYXB0ZXIgZXh0ZW5kcyBSZWN5Y2xlclZpZXcuQWRhcHRlcjxEb2N1bWVudEhvbGRlcj4gewotCi0gICAgICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBMYXlvdXRJbmZsYXRlciBtSW5mbGF0ZXI7Ci0KLSAgICAgICAgcHVibGljIERvY3VtZW50c0FkYXB0ZXIoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgICAgICBtSW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKGNvbnRleHQpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdGF0ZSBzdGF0ZSA9IGdldERpc3BsYXlTdGF0ZSgpOwotICAgICAgICAgICAgZmluYWwgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKGdldENvbnRleHQoKSk7Ci0gICAgICAgICAgICBWaWV3IGl0ZW0gPSBudWxsOwotICAgICAgICAgICAgc3dpdGNoIChzdGF0ZS5kZXJpdmVkTW9kZSkgewotICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9HUklEOgotICAgICAgICAgICAgICAgICAgICBpdGVtID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5pdGVtX2RvY19ncmlkLCBwYXJlbnQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBNT0RFX0xJU1Q6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0Lml0ZW1fZG9jX2xpc3QsIHBhcmVudCwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIE1PREVfVU5LTk9XTjoKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgbW9kZS4iKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRG9jdW1lbnRIb2xkZXIgaG9sZGVyID0gbmV3IERvY3VtZW50SG9sZGVyKGl0ZW0pOwotICAgICAgICAgICAgaG9sZGVyLmFkZENsaWNrTGlzdGVuZXIobUl0ZW1DbGlja0xpc3RlbmVyKTsKLSAgICAgICAgICAgIGhvbGRlci5hZGRPbktleUxpc3RlbmVyKG1TZWxlY3Rpb25NYW5hZ2VyKTsKLSAgICAgICAgICAgIHJldHVybiBob2xkZXI7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRGVhbCB3aXRoIHNlbGVjdGlvbiBjaGFuZ2VkIGV2ZW50cyBieSB1c2luZyBhIGN1c3RvbSBJdGVtQW5pbWF0b3IgdGhhdCBqdXN0IGNoYW5nZXMgdGhlCi0gICAgICAgICAqIGJhY2tncm91bmQgY29sb3IuICBUaGlzIHdvcmtzIGFyb3VuZCBmb2N1cyBpc3N1ZXMgKG90aGVyd2lzZSBpdGVtcyBsb3NlIGZvY3VzIHdoZW4gdGhlaXIKLSAgICAgICAgICogc2VsZWN0aW9uIHN0YXRlIGNoYW5nZXMpIGJ1dCBhbHNvIG9wdGltaXplcyBjaGFuZ2UgYW5pbWF0aW9ucyBmb3Igc2VsZWN0aW9uLgotICAgICAgICAgKi8KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcG9zaXRpb24sIExpc3Q8T2JqZWN0PiBwYXlsb2FkKSB7Ci0gICAgICAgICAgICBmaW5hbCBWaWV3IGl0ZW1WaWV3ID0gaG9sZGVyLml0ZW1WaWV3OwotCi0gICAgICAgICAgICBpZiAocGF5bG9hZC5jb250YWlucyhNdWx0aVNlbGVjdE1hbmFnZXIuU0VMRUNUSU9OX0NIQU5HRURfTUFSS0VSKSkgewotICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2VsZWN0ZWQgPSBpc1NlbGVjdGVkKHBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBpdGVtVmlldy5zZXRBY3RpdmF0ZWQoc2VsZWN0ZWQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb25CaW5kVmlld0hvbGRlcihob2xkZXIsIHBvc2l0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7Ci0KLSAgICAgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKLSAgICAgICAgICAgIGZpbmFsIFN0YXRlIHN0YXRlID0gZ2V0RGlzcGxheVN0YXRlKCk7Ci0gICAgICAgICAgICBmaW5hbCBSb290c0NhY2hlIHJvb3RzID0gRG9jdW1lbnRzQXBwbGljYXRpb24uZ2V0Um9vdHNDYWNoZShjb250ZXh0KTsKLSAgICAgICAgICAgIGZpbmFsIFRodW1ibmFpbENhY2hlIHRodW1icyA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmdldFRodW1ibmFpbHNDYWNoZSgKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbVRodW1iU2l6ZSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtTW9kZWwuZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOwotCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jQXV0aG9yaXR5ID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jUm9vdElkID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX1JPT1RfSUQpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRvY0lkID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2NNaW1lVHlwZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRvY0Rpc3BsYXlOYW1lID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSk7Ci0gICAgICAgICAgICBmaW5hbCBsb25nIGRvY0xhc3RNb2RpZmllZCA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTEFTVF9NT0RJRklFRCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgZG9jSWNvbiA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9JQ09OKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBkb2NGbGFncyA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9GTEFHUyk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jU3VtbWFyeSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9TVU1NQVJZKTsKLSAgICAgICAgICAgIGZpbmFsIGxvbmcgZG9jU2l6ZSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7Ci0KLSAgICAgICAgICAgIGhvbGRlci5kb2NJZCA9IGRvY0lkOwotICAgICAgICAgICAgZmluYWwgVmlldyBpdGVtVmlldyA9IGhvbGRlci5pdGVtVmlldzsKLQotICAgICAgICAgICAgaG9sZGVyLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQocG9zaXRpb24pKTsKLQotICAgICAgICAgICAgZmluYWwgSW1hZ2VWaWV3IGljb25NaW1lID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9taW1lKTsKLSAgICAgICAgICAgIGZpbmFsIEltYWdlVmlldyBpY29uVGh1bWIgPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX3RodW1iKTsKLSAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IHRpdGxlID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKTsKLSAgICAgICAgICAgIGZpbmFsIEltYWdlVmlldyBpY29uMSA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuaWNvbjEpOwotICAgICAgICAgICAgZmluYWwgVGV4dFZpZXcgc3VtbWFyeSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5zdW1tYXJ5KTsKLSAgICAgICAgICAgIGZpbmFsIFRleHRWaWV3IGRhdGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRhdGUpOwotICAgICAgICAgICAgZmluYWwgVGV4dFZpZXcgc2l6ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuc2l6ZSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFRodW1ibmFpbEFzeW5jVGFzayBvbGRUYXNrID0gKFRodW1ibmFpbEFzeW5jVGFzaykgaWNvblRodW1iLmdldFRhZygpOwotICAgICAgICAgICAgaWYgKG9sZFRhc2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG9sZFRhc2sucHJlZW1wdCgpOwotICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRUYWcobnVsbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGljb25NaW1lLmFuaW1hdGUoKS5jYW5jZWwoKTsKLSAgICAgICAgICAgIGljb25UaHVtYi5hbmltYXRlKCkuY2FuY2VsKCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3VwcG9ydHNUaHVtYm5haWwgPSAoZG9jRmxhZ3MgJiBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX1RIVU1CTkFJTCkgIT0gMDsKLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYWxsb3dUaHVtYm5haWwgPSAoc3RhdGUuZGVyaXZlZE1vZGUgPT0gTU9ERV9HUklEKQotICAgICAgICAgICAgICAgICAgICB8fCBNaW1lUHJlZGljYXRlLm1pbWVNYXRjaGVzKE1pbWVQcmVkaWNhdGUuVklTVUFMX01JTUVTLCBkb2NNaW1lVHlwZSk7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIHNob3dUaHVtYm5haWwgPSBzdXBwb3J0c1RodW1ibmFpbCAmJiBhbGxvd1RodW1ibmFpbCAmJiAhbVN2ZWx0ZVJlY2VudHM7Ci0KLSAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gZW5hYmxlZCA9IG1UdW5lci5pc0RvY3VtZW50RW5hYmxlZChkb2NNaW1lVHlwZSwgZG9jRmxhZ3MpOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgaWNvbkFscGhhID0gKHN0YXRlLmRlcml2ZWRNb2RlID09IE1PREVfTElTVCAmJiAhZW5hYmxlZCkgPyAwLjVmIDogMWY7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gY2FjaGVIaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChzaG93VGh1bWJuYWlsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoZG9jQXV0aG9yaXR5LCBkb2NJZCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgQml0bWFwIGNhY2hlZFJlc3VsdCA9IHRodW1icy5nZXQodXJpKTsKLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVzdWx0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlQml0bWFwKGNhY2hlZFJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlSGl0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZyB0aGlzIG9mZiBEb2N1bWVudEhvbGRlcj8KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgVGh1bWJuYWlsQXN5bmNUYXNrIHRhc2sgPSBuZXcgVGh1bWJuYWlsQXN5bmNUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgaWNvbk1pbWUsIGljb25UaHVtYiwgbVRodW1iU2l6ZSwgaWNvbkFscGhhKTsKLSAgICAgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldFRhZyh0YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgUHJvdmlkZXJFeGVjdXRvci5mb3JBdXRob3JpdHkoZG9jQXV0aG9yaXR5KS5leGVjdXRlKHRhc2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWx3YXlzIHRocm93IE1JTUUgaWNvbiBpbnRvIHBsYWNlLCBldmVuIHdoZW4gYSB0aHVtYm5haWwgaXMgYmVpbmcKLSAgICAgICAgICAgIC8vIGxvYWRlZCBpbiBiYWNrZ3JvdW5kLgotICAgICAgICAgICAgaWYgKGNhY2hlSGl0KSB7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0QWxwaGEoMGYpOwotICAgICAgICAgICAgICAgIGljb25NaW1lLnNldEltYWdlRHJhd2FibGUobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEFscGhhKDFmKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0QWxwaGEoMWYpOwotICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRBbHBoYSgwZik7Ci0gICAgICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlRHJhd2FibGUobnVsbCk7Ci0gICAgICAgICAgICAgICAgaWNvbk1pbWUuc2V0SW1hZ2VEcmF3YWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50SWNvbihtQ29udGV4dCwgZG9jQXV0aG9yaXR5LCBkb2NJZCwgZG9jTWltZVR5cGUsIGRvY0ljb24sIHN0YXRlKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoc3RhdGUuZGVyaXZlZE1vZGUgPT0gTU9ERV9HUklEKSAmJiBtSGlkZUdyaWRUaXRsZXMpIHsKLSAgICAgICAgICAgICAgICB0aXRsZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOwotICAgICAgICAgICAgICAgIHRpdGxlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgRHJhd2FibGUgaWNvbkRyYXdhYmxlID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChtVHlwZSA9PSBUWVBFX1JFQ0VOVF9PUEVOKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBoYWQgdG8gZW51bWVyYXRlIHJvb3RzIGJlZm9yZSBhbnkgcmVzdWx0cyBjYW4KLSAgICAgICAgICAgICAgICAvLyBiZSBzaG93biwgc28gdGhpcyB3aWxsIG5ldmVyIGJsb2NrLgotICAgICAgICAgICAgICAgIGZpbmFsIFJvb3RJbmZvIHJvb3QgPSByb290cy5nZXRSb290QmxvY2tpbmcoZG9jQXV0aG9yaXR5LCBkb2NSb290SWQpOwotICAgICAgICAgICAgICAgIGljb25EcmF3YWJsZSA9IHJvb3QubG9hZEljb24obUNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN1bW1hcnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGFsd2F5c1Nob3dTdW1tYXJ5ID0gZ2V0UmVzb3VyY2VzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Qm9vbGVhbihSLmJvb2wuYWx3YXlzX3Nob3dfc3VtbWFyeSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHdheXNTaG93U3VtbWFyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRUZXh0KHJvb3QuZ2V0RGlyZWN0b3J5U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWNvbkRyYXdhYmxlICE9IG51bGwgJiYgcm9vdHMuaXNJY29uVW5pcXVlQmxvY2tpbmcocm9vdCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBzdW1tYXJ5IG5lZWRlZCBpZiBpY29uIHNwZWFrcyBmb3IgaXRzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeS5zZXRUZXh0KHJvb3QuZ2V0RGlyZWN0b3J5U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VGV4dEFsaWdubWVudChUZXh0Vmlldy5URVhUX0FMSUdOTUVOVF9URVhUX0VORCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIERpcmVjdG9yaWVzIHNob3dpbmcgdGh1bWJuYWlscyBpbiBncmlkIG1vZGUgZ2V0IGEgbGl0dGxlIGljb24KLSAgICAgICAgICAgICAgICAvLyBoaW50IHRvIHJlbWluZCB1c2VyIHRoZXkncmUgYSBkaXJlY3RvcnkuCi0gICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKGRvY01pbWVUeXBlKSAmJiBzdGF0ZS5kZXJpdmVkTW9kZSA9PSBNT0RFX0dSSUQKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIHNob3dUaHVtYm5haWwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWNvbkRyYXdhYmxlID0gSWNvblV0aWxzLmFwcGx5VGludEF0dHIobUNvbnRleHQsIFIuZHJhd2FibGUuaWNfZG9jX2ZvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLlIuYXR0ci50ZXh0Q29sb3JQcmltYXJ5SW52ZXJzZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHN1bW1hcnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZG9jU3VtbWFyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5LnNldFRleHQoZG9jU3VtbWFyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpY29uRHJhd2FibGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGljb24xLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICBpY29uMS5zZXRJbWFnZURyYXdhYmxlKGljb25EcmF3YWJsZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGljb24xLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGRvY0xhc3RNb2RpZmllZCA9PSAtMSkgewotICAgICAgICAgICAgICAgIGRhdGUuc2V0VGV4dChudWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGF0ZS5zZXRUZXh0KGZvcm1hdFRpbWUobUNvbnRleHQsIGRvY0xhc3RNb2RpZmllZCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN0YXRlLnNob3dTaXplIHx8IERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKGRvY01pbWVUeXBlKSB8fCBkb2NTaXplID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNpemUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIHNpemUuc2V0VGV4dChGb3JtYXR0ZXIuZm9ybWF0RmlsZVNpemUobUNvbnRleHQsIGRvY1NpemUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0RW5hYmxlZFJlY3Vyc2l2ZShpdGVtVmlldywgZW5hYmxlZCk7Ci0KLSAgICAgICAgICAgIGljb25NaW1lLnNldEFscGhhKGljb25BbHBoYSk7Ci0gICAgICAgICAgICBpY29uVGh1bWIuc2V0QWxwaGEoaWNvbkFscGhhKTsKLSAgICAgICAgICAgIGljb24xLnNldEFscGhhKGljb25BbHBoYSk7Ci0KLSAgICAgICAgICAgIGlmIChERUJVR19FTkFCTEVfRE5EKSB7Ci0gICAgICAgICAgICAgICAgc2V0dXBEcmFnQW5kRHJvcE9uRG9jdW1lbnRWaWV3KGl0ZW1WaWV3LCBjdXJzb3IpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Nb2RlbC5nZXRJdGVtQ291bnQoKTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdFRpbWUoQ29udGV4dCBjb250ZXh0LCBsb25nIHdoZW4pIHsKLSAgICAgICAgLy8gVE9ETzogRGF0ZVV0aWxzIHNob3VsZCBtYWtlIHRoaXMgZWFzaWVyCi0gICAgICAgIFRpbWUgdGhlbiA9IG5ldyBUaW1lKCk7Ci0gICAgICAgIHRoZW4uc2V0KHdoZW4pOwotICAgICAgICBUaW1lIG5vdyA9IG5ldyBUaW1lKCk7Ci0gICAgICAgIG5vdy5zZXRUb05vdygpOwotCi0gICAgICAgIGludCBmbGFncyA9IERhdGVVdGlscy5GT1JNQVRfTk9fTk9PTiB8IERhdGVVdGlscy5GT1JNQVRfTk9fTUlETklHSFQKLSAgICAgICAgICAgICAgICB8IERhdGVVdGlscy5GT1JNQVRfQUJCUkVWX0FMTDsKLQotICAgICAgICBpZiAodGhlbi55ZWFyICE9IG5vdy55ZWFyKSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfWUVBUiB8IERhdGVVdGlscy5GT1JNQVRfU0hPV19EQVRFOwotICAgICAgICB9IGVsc2UgaWYgKHRoZW4ueWVhckRheSAhPSBub3cueWVhckRheSkgewotICAgICAgICAgICAgZmxhZ3MgfD0gRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEYXRlVXRpbHMuRk9STUFUX1NIT1dfVElNRTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUoY29udGV4dCwgd2hlbiwgZmxhZ3MpOwotICAgIH0KLQogICAgIHByaXZhdGUgU3RyaW5nIGZpbmRDb21tb25NaW1lVHlwZShMaXN0PFN0cmluZz4gbWltZVR5cGVzKSB7CiAgICAgICAgIFN0cmluZ1tdIGNvbW1vblR5cGUgPSBtaW1lVHlwZXMuZ2V0KDApLnNwbGl0KCIvIik7CiAgICAgICAgIGlmIChjb21tb25UeXBlLmxlbmd0aCAhPSAyKSB7CkBAIC0xMjY4LDE5ICs5OTksNiBAQAogICAgICAgICByZXR1cm4gY29tbW9uVHlwZVswXSArICIvIiArIGNvbW1vblR5cGVbMV07CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNldEVuYWJsZWRSZWN1cnNpdmUoVmlldyB2LCBib29sZWFuIGVuYWJsZWQpIHsKLSAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBpZiAodi5pc0VuYWJsZWQoKSA9PSBlbmFibGVkKSByZXR1cm47Ci0gICAgICAgIHYuc2V0RW5hYmxlZChlbmFibGVkKTsKLQotICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFZpZXdHcm91cCkgewotICAgICAgICAgICAgZmluYWwgVmlld0dyb3VwIHZnID0gKFZpZXdHcm91cCkgdjsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSB2Zy5nZXRDaGlsZENvdW50KCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIHNldEVuYWJsZWRSZWN1cnNpdmUodmcuZ2V0Q2hpbGRBdChpKSwgZW5hYmxlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwcml2YXRlIHZvaWQgY29weUZyb21DbGlwYm9hcmQoKSB7CiAgICAgICAgIG5ldyBBc3luY1Rhc2s8Vm9pZCwgVm9pZCwgTGlzdDxEb2N1bWVudEluZm8+PigpIHsKIApAQCAtMTMzNyw3ICsxMDU1LDcgQEAKICAgICAgICAgICAgIHRtcFN0YWNrID0gY3VyU3RhY2s7CiAgICAgICAgIH0KIAotICAgICAgICBDb3B5U2VydmljZS5zdGFydChnZXRBY3Rpdml0eSgpLCBkb2NzLCB0bXBTdGFjaywgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9DT1BZKTsKKyAgICAgICAgRmlsZU9wZXJhdGlvbnMuY29weShnZXRBY3Rpdml0eSgpLCBkb2NzLCB0bXBTdGFjayk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBDbGlwRGF0YSBnZXRDbGlwRGF0YUZyb21Eb2N1bWVudHMoTGlzdDxEb2N1bWVudEluZm8+IGRvY3MpIHsKQEAgLTEzNzYsNyArMTA5NCw3IEBACiAgICAgICAgICAgICAgICAgU25hY2tiYXJzLm1ha2VTbmFja2JhcihhY3Rpdml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5LmdldFJlc291cmNlcygpLmdldFF1YW50aXR5U3RyaW5nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLnBsdXJhbHMuY2xpcGJvYXJkX2ZpbGVzX2NsaXBwZWQsIGRvY3Muc2l6ZSgpLCBkb2NzLnNpemUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNuYWNrYmFyLkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgICAgICAgICAgICAgICAgICAgICAgU25hY2tiYXIuTEVOR1RIX1NIT1JUKS5zaG93KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0uZXhlY3V0ZShzZWxlY3Rpb24pOwogICAgIH0KQEAgLTE0MTIsNyArMTEzMCw4IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2VsZWN0QWxsRmlsZXMoKSB7Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IG1TZWxlY3Rpb25NYW5hZ2VyLnNldEl0ZW1zU2VsZWN0ZWQoMCwgbU1vZGVsLmdldEl0ZW1Db3VudCgpLCB0cnVlKTsKKyAgICAgICAgLy8gT25seSBzZWxlY3QgdGhpbmdzIGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSBhZGFwdGVyLgorICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBtU2VsZWN0aW9uTWFuYWdlci5zZXRJdGVtc1NlbGVjdGVkKG1BZGFwdGVyLmdldE1vZGVsSWRzKCksIHRydWUpOwogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgdXBkYXRlRGlzcGxheVN0YXRlKCk7CiAgICAgICAgIH0KQEAgLTE0NTUsMTAgKzExNzQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgICAgICBjYXNlIERyYWdFdmVudC5BQ1RJT05fRFJPUDoKLSAgICAgICAgICAgICAgICAgICAgaW50IGRzdFBvc2l0aW9uID0gbVJlY1ZpZXcuZ2V0Q2hpbGRBZGFwdGVyUG9zaXRpb24oZ2V0Q29udGFpbmluZ0l0ZW1WaWV3KHYpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRzdElkID0gZ2V0TW9kZWxJZCh2KTsKICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRJbmZvIGRzdERpciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkc3RQb3NpdGlvbiAhPSBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldy5JTlZBTElEX1BPU0lUSU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDdXJzb3IgZHN0Q3Vyc29yID0gbU1vZGVsLmdldEl0ZW0oZHN0UG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICBpZiAoZHN0SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ3Vyc29yIGRzdEN1cnNvciA9IG1Nb2RlbC5nZXRJdGVtKGRzdElkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTm90TnVsbChkc3RDdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBkc3REaXIgPSBEb2N1bWVudEluZm8uZnJvbURpcmVjdG9yeUN1cnNvcihkc3RDdXJzb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogRG8gbm90IGRyb3AgaW50byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBkb2N1bWVudHMgY2FtZSBmcm9tLgpAQCAtMTQ3MCwxMCArMTE4OSwzNyBAQAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHByaXZhdGUgVmlldyBnZXRDb250YWluaW5nSXRlbVZpZXcoVmlldyB2aWV3KSB7CisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbW9kZWwgSUQgZm9yIGEgZ2l2ZW4gbW90aW9uIGV2ZW50ICh1c2luZyB0aGUgZXZlbnQgcG9zaXRpb24pCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0TW9kZWxJZChNb3Rpb25FdmVudCBlKSB7CisgICAgICAgIFZpZXcgdmlldyA9IG1SZWNWaWV3LmZpbmRDaGlsZFZpZXdVbmRlcihlLmdldFgoKSwgZS5nZXRZKCkpOworICAgICAgICBpZiAodmlldyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBSZWN5Y2xlclZpZXcuVmlld0hvbGRlciB2aCA9IG1SZWNWaWV3LmdldENoaWxkVmlld0hvbGRlcih2aWV3KTsKKyAgICAgICAgaWYgKHZoIGluc3RhbmNlb2YgRG9jdW1lbnRIb2xkZXIpIHsKKyAgICAgICAgICAgIHJldHVybiAoKERvY3VtZW50SG9sZGVyKSB2aCkubW9kZWxJZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbW9kZWwgSUQgZm9yIGEgZ2l2ZW4gUmVjeWNsZXJWaWV3IGl0ZW0uCisgICAgICogQHBhcmFtIHZpZXcgQSBWaWV3IHRoYXQgaXMgYSBkb2N1bWVudCBpdGVtIHZpZXcsIG9yIGEgY2hpbGQgb2YgYSBkb2N1bWVudCBpdGVtIHZpZXcuCisgICAgICogQHJldHVybiBUaGUgTW9kZWwgSUQgZm9yIHRoZSBnaXZlbiBkb2N1bWVudCwgb3IgbnVsbCBpZiB0aGUgZ2l2ZW4gdmlldyBpcyBub3QgYXNzb2NpYXRlZCB3aXRoCisgICAgICogICAgIGEgZG9jdW1lbnQgaXRlbSB2aWV3LgorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGdldE1vZGVsSWQoVmlldyB2aWV3KSB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICBpZiAodmlldy5nZXRMYXlvdXRQYXJhbXMoKSBpbnN0YW5jZW9mIFJlY3ljbGVyVmlldy5MYXlvdXRQYXJhbXMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmlldzsKKyAgICAgICAgICAgICAgICBSZWN5Y2xlclZpZXcuVmlld0hvbGRlciB2aCA9IG1SZWNWaWV3LmdldENoaWxkVmlld0hvbGRlcih2aWV3KTsKKyAgICAgICAgICAgICAgICBpZiAodmggaW5zdGFuY2VvZiBEb2N1bWVudEhvbGRlcikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChEb2N1bWVudEhvbGRlcikgdmgpLm1vZGVsSWQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgVmlld1BhcmVudCBwYXJlbnQgPSB2aWV3LmdldFBhcmVudCgpOwogICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsIHx8ICEocGFyZW50IGluc3RhbmNlb2YgVmlldykpIHsKQEAgLTE1MDIsMjIgKzEyNDgsMjIgQEAKICAgICB9OwogCiAgICAgcHJpdmF0ZSBMaXN0PERvY3VtZW50SW5mbz4gZ2V0RHJhZ2dhYmxlRG9jdW1lbnRzKFZpZXcgY3VycmVudEl0ZW1WaWV3KSB7Ci0gICAgICAgIGludCBwb3NpdGlvbiA9IG1SZWNWaWV3LmdldENoaWxkQWRhcHRlclBvc2l0aW9uKGdldENvbnRhaW5pbmdJdGVtVmlldyhjdXJyZW50SXRlbVZpZXcpKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3LklOVkFMSURfUE9TSVRJT04pIHsKKyAgICAgICAgU3RyaW5nIG1vZGVsSWQgPSBnZXRNb2RlbElkKGN1cnJlbnRJdGVtVmlldyk7CisgICAgICAgIGlmIChtb2RlbElkID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgTGlzdDxEb2N1bWVudEluZm8+IHNlbGVjdGVkRG9jcyA9CiAgICAgICAgICAgICAgICAgbU1vZGVsLmdldERvY3VtZW50cyhtU2VsZWN0aW9uTWFuYWdlci5nZXRTZWxlY3Rpb24oKSk7CiAgICAgICAgIGlmICghc2VsZWN0ZWREb2NzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKCFpc1NlbGVjdGVkKHBvc2l0aW9uKSkgeworICAgICAgICAgICAgaWYgKCFpc1NlbGVjdGVkKG1vZGVsSWQpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBzZWxlY3Rpb24gdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBjdXJyZW50IGl0ZW0sIGRyYWcgbm90aGluZy4KICAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZERvY3M7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbU1vZGVsLmdldEl0ZW0ocG9zaXRpb24pOworICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbU1vZGVsLmdldEl0ZW0obW9kZWxJZCk7CiAgICAgICAgIGNoZWNrTm90TnVsbChjdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7CiAgICAgICAgIGZpbmFsIERvY3VtZW50SW5mbyBkb2MgPSBEb2N1bWVudEluZm8uZnJvbURpcmVjdG9yeUN1cnNvcihjdXJzb3IpOwogCkBAIC0xNTI3LDg5ICsxMjczLDEyIEBACiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBnZXREcmFnU2hhZG93SWNvbihMaXN0PERvY3VtZW50SW5mbz4gZG9jcykgewogICAgICAgICBpZiAoZG9jcy5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGRvYyA9IGRvY3MuZ2V0KDApOwotICAgICAgICAgICAgcmV0dXJuIGdldERvY3VtZW50SWNvbihnZXRBY3Rpdml0eSgpLCBkb2MuYXV0aG9yaXR5LCBkb2MuZG9jdW1lbnRJZCwKLSAgICAgICAgICAgICAgICAgICAgZG9jLm1pbWVUeXBlLCBkb2MuaWNvbiwgZ2V0RGlzcGxheVN0YXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIG1JY29uSGVscGVyLmdldERvY3VtZW50SWNvbihnZXRBY3Rpdml0eSgpLCBkb2MuYXV0aG9yaXR5LCBkb2MuZG9jdW1lbnRJZCwKKyAgICAgICAgICAgICAgICAgICAgZG9jLm1pbWVUeXBlLCBkb2MuaWNvbik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGdldEFjdGl2aXR5KCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19kb2NfZ2VuZXJpYyk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBEcmF3YWJsZSBnZXREb2N1bWVudEljb24oQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZG9jQXV0aG9yaXR5LCBTdHJpbmcgZG9jSWQsCi0gICAgICAgICAgICBTdHJpbmcgZG9jTWltZVR5cGUsIGludCBkb2NJY29uLCBTdGF0ZSBzdGF0ZSkgewotICAgICAgICBpZiAoZG9jSWNvbiAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gSWNvblV0aWxzLmxvYWRQYWNrYWdlSWNvbihjb250ZXh0LCBkb2NBdXRob3JpdHksIGRvY0ljb24pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIEljb25VdGlscy5sb2FkTWltZUljb24oY29udGV4dCwgZG9jTWltZVR5cGUsIGRvY0F1dGhvcml0eSwgZG9jSWQsCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmRlcml2ZWRNb2RlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRodW1ibmFpbEFzeW5jVGFzayBleHRlbmRzIEFzeW5jVGFzazxVcmksIFZvaWQsIEJpdG1hcD4KLSAgICAgICAgICAgIGltcGxlbWVudHMgUHJlZW1wdGFibGUgewotICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtVXJpOwotICAgICAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtSWNvbk1pbWU7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgSW1hZ2VWaWV3IG1JY29uVGh1bWI7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgUG9pbnQgbVRodW1iU2l6ZTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtVGFyZ2V0QWxwaGE7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgQ2FuY2VsbGF0aW9uU2lnbmFsIG1TaWduYWw7Ci0KLSAgICAgICAgcHVibGljIFRodW1ibmFpbEFzeW5jVGFzayhVcmkgdXJpLCBJbWFnZVZpZXcgaWNvbk1pbWUsIEltYWdlVmlldyBpY29uVGh1bWIsIFBvaW50IHRodW1iU2l6ZSwKLSAgICAgICAgICAgICAgICBmbG9hdCB0YXJnZXRBbHBoYSkgewotICAgICAgICAgICAgbVVyaSA9IHVyaTsKLSAgICAgICAgICAgIG1JY29uTWltZSA9IGljb25NaW1lOwotICAgICAgICAgICAgbUljb25UaHVtYiA9IGljb25UaHVtYjsKLSAgICAgICAgICAgIG1UaHVtYlNpemUgPSB0aHVtYlNpemU7Ci0gICAgICAgICAgICBtVGFyZ2V0QWxwaGEgPSB0YXJnZXRBbHBoYTsKLSAgICAgICAgICAgIG1TaWduYWwgPSBuZXcgQ2FuY2VsbGF0aW9uU2lnbmFsKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcHJlZW1wdCgpIHsKLSAgICAgICAgICAgIGNhbmNlbChmYWxzZSk7Ci0gICAgICAgICAgICBtU2lnbmFsLmNhbmNlbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBCaXRtYXAgZG9JbkJhY2tncm91bmQoVXJpLi4uIHBhcmFtcykgewotICAgICAgICAgICAgaWYgKGlzQ2FuY2VsbGVkKCkpIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBtSWNvblRodW1iLmdldENvbnRleHQoKTsKLSAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciByZXNvbHZlciA9IGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7Ci0KLSAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQgPSBudWxsOwotICAgICAgICAgICAgQml0bWFwIHJlc3VsdCA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGNsaWVudCA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdygKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLCBtVXJpLmdldEF1dGhvcml0eSgpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBEb2N1bWVudHNDb250cmFjdC5nZXREb2N1bWVudFRodW1ibmFpbChjbGllbnQsIG1VcmksIG1UaHVtYlNpemUsIG1TaWduYWwpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBUaHVtYm5haWxDYWNoZSB0aHVtYnMgPSBEb2N1bWVudHNBcHBsaWNhdGlvbi5nZXRUaHVtYm5haWxzQ2FjaGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbVRodW1iU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRodW1icy5wdXQobVVyaSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGxvYWQgdGh1bWJuYWlsIGZvciAiICsgbVVyaSArICI6ICIgKyBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShjbGllbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKEJpdG1hcCByZXN1bHQpIHsKLSAgICAgICAgICAgIGlmIChtSWNvblRodW1iLmdldFRhZygpID09IHRoaXMgJiYgcmVzdWx0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtSWNvblRodW1iLnNldFRhZyhudWxsKTsKLSAgICAgICAgICAgICAgICBtSWNvblRodW1iLnNldEltYWdlQml0bWFwKHJlc3VsdCk7Ci0KLSAgICAgICAgICAgICAgICBtSWNvbk1pbWUuc2V0QWxwaGEobVRhcmdldEFscGhhKTsKLSAgICAgICAgICAgICAgICBtSWNvbk1pbWUuYW5pbWF0ZSgpLmFscGhhKDBmKS5zdGFydCgpOwotICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0QWxwaGEoMGYpOwotICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuYW5pbWF0ZSgpLmFscGhhKG1UYXJnZXRBbHBoYSkuc3RhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIHByaXZhdGUgY2xhc3MgRHJhd2FibGVTaGFkb3dCdWlsZGVyIGV4dGVuZHMgVmlldy5EcmFnU2hhZG93QnVpbGRlciB7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBEcmF3YWJsZSBtU2hhZG93OwpAQCAtMTY1NiwzMjIgKzEzMjUsMjQgQEAKICAgICAgICAgYWJzdHJhY3Qgdm9pZCBvbkRvY3VtZW50c1JlYWR5KExpc3Q8RG9jdW1lbnRJbmZvPiBkb2NzKTsKICAgICB9CiAKLSAgICBib29sZWFuIGlzU2VsZWN0ZWQoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIHJldHVybiBtU2VsZWN0aW9uTWFuYWdlci5nZXRTZWxlY3Rpb24oKS5jb250YWlucyhwb3NpdGlvbik7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNTZWxlY3RlZChTdHJpbmcgbW9kZWxJZCkgeworICAgICAgICByZXR1cm4gbVNlbGVjdGlvbk1hbmFnZXIuZ2V0U2VsZWN0aW9uKCkuY29udGFpbnMobW9kZWxJZCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogVGhlIGRhdGEgbW9kZWwgZm9yIHRoZSBjdXJyZW50IGxvYWRlZCBkaXJlY3RvcnkuCi0gICAgICovCi0gICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBNb2RlbCBpbXBsZW1lbnRzIERvY3VtZW50Q29udGV4dCB7Ci0gICAgICAgIHByaXZhdGUgUmVjeWNsZXJWaWV3LkFkYXB0ZXI8Pz4gbVZpZXdBZGFwdGVyOwotICAgICAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgICAgIHByaXZhdGUgaW50IG1DdXJzb3JDb3VudDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0xvYWRpbmc7Ci0gICAgICAgIEBHdWFyZGVkQnkoIm1QZW5kaW5nRGVsZXRlIikKLSAgICAgICAgcHJpdmF0ZSBCb29sZWFuIG1QZW5kaW5nRGVsZXRlID0gZmFsc2U7Ci0gICAgICAgIEBHdWFyZGVkQnkoIm1QZW5kaW5nRGVsZXRlIikKLSAgICAgICAgcHJpdmF0ZSBTcGFyc2VCb29sZWFuQXJyYXkgbU1hcmtlZEZvckRlbGV0aW9uID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOwotICAgICAgICBwcml2YXRlIFVwZGF0ZUxpc3RlbmVyIG1VcGRhdGVMaXN0ZW5lcjsKLSAgICAgICAgQE51bGxhYmxlIHByaXZhdGUgQ3Vyc29yIG1DdXJzb3I7Ci0gICAgICAgIEBOdWxsYWJsZSBwcml2YXRlIFN0cmluZyBpbmZvOwotICAgICAgICBATnVsbGFibGUgcHJpdmF0ZSBTdHJpbmcgZXJyb3I7Ci0KLSAgICAgICAgTW9kZWwoQ29udGV4dCBjb250ZXh0LCBSZWN5Y2xlclZpZXcuQWRhcHRlcjw/PiB2aWV3QWRhcHRlcikgewotICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICAgICAgbVZpZXdBZGFwdGVyID0gdmlld0FkYXB0ZXI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHVwZGF0ZShEaXJlY3RvcnlSZXN1bHQgcmVzdWx0KSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5pKFRBRywgIlVwZGF0aW5nIG1vZGVsIHdpdGggbmV3IHJlc3VsdCBzZXQuIik7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DdXJzb3IgPSBudWxsOwotICAgICAgICAgICAgICAgIG1DdXJzb3JDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgaW5mbyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgZXJyb3IgPSBudWxsOwotICAgICAgICAgICAgICAgIG1Jc0xvYWRpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBtVXBkYXRlTGlzdGVuZXIub25Nb2RlbFVwZGF0ZSh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQuZXhjZXB0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJFcnJvciB3aGlsZSBsb2FkaW5nIGRpcmVjdG9yeSBjb250ZW50cyIsIHJlc3VsdC5leGNlcHRpb24pOwotICAgICAgICAgICAgICAgIG1VcGRhdGVMaXN0ZW5lci5vbk1vZGVsVXBkYXRlRmFpbGVkKHJlc3VsdC5leGNlcHRpb24pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUN1cnNvciA9IHJlc3VsdC5jdXJzb3I7Ci0gICAgICAgICAgICBtQ3Vyc29yQ291bnQgPSBtQ3Vyc29yLmdldENvdW50KCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEJ1bmRsZSBleHRyYXMgPSBtQ3Vyc29yLmdldEV4dHJhcygpOwotICAgICAgICAgICAgaWYgKGV4dHJhcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW5mbyA9IGV4dHJhcy5nZXRTdHJpbmcoRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfSU5GTyk7Ci0gICAgICAgICAgICAgICAgZXJyb3IgPSBleHRyYXMuZ2V0U3RyaW5nKERvY3VtZW50c0NvbnRyYWN0LkVYVFJBX0VSUk9SKTsKLSAgICAgICAgICAgICAgICBtSXNMb2FkaW5nID0gZXh0cmFzLmdldEJvb2xlYW4oRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfTE9BRElORywgZmFsc2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVXBkYXRlTGlzdGVuZXIub25Nb2RlbFVwZGF0ZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRJdGVtQ291bnQoKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQobVBlbmRpbmdEZWxldGUpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbUN1cnNvckNvdW50IC0gbU1hcmtlZEZvckRlbGV0aW9uLnNpemUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEN1cnNvciBnZXRJdGVtKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgc3luY2hyb25pemVkKG1QZW5kaW5nRGVsZXRlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXRlbXMgbWFya2VkIGZvciBkZWxldGlvbiBhcmUgbWFza2VkIG91dCBvZiB0aGUgVUkuICBUbyBkbyB0aGlzLCBmb3IgZXZlcnkgbWFya2VkCi0gICAgICAgICAgICAgICAgLy8gaXRlbSB3aG9zZSBwb3NpdGlvbiBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3RlZCBpdGVtIHBvc2l0aW9uLCBhZHZhbmNlIHRoZSByZXF1ZXN0ZWQKLSAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBieSAxLgotICAgICAgICAgICAgICAgIGZpbmFsIGludCBvcmlnaW5hbFBvcyA9IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIGZpbmFsIGludCBzaXplID0gbU1hcmtlZEZvckRlbGV0aW9uLnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJdCdkIGJlIG1vcmUgY29uY2lzZSwgYnV0IGxlc3MgZWZmaWNpZW50LCB0byBpdGVyYXRlIG92ZXIgcG9zaXRpb25zIHdoaWxlIGNhbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gbU1hcmtlZEZvckRlbGV0aW9uLmdldC4gIEluc3RlYWQsIGl0ZXJhdGUgb3ZlciBkZWxldGVkIGVudHJpZXMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtTWFya2VkRm9yRGVsZXRpb24ua2V5QXQoaSkgPD0gcG9zaXRpb24gJiYgbU1hcmtlZEZvckRlbGV0aW9uLnZhbHVlQXQoaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUcgJiYgcG9zaXRpb24gIT0gb3JpZ2luYWxQb3MpIHsKLSAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiSXRlbSBwb3NpdGlvbiBhZGp1c3RlZCBmb3IgZGVsZXRpb24uICBPcmlnaW5hbDogIiArIG9yaWdpbmFsUG9zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiICBBZGp1c3RlZDogIiArIHBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPj0gbUN1cnNvckNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCJBdHRlbXB0IHRvIHJldHJpZXZlICIgKyBwb3NpdGlvbiArICIgb2YgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnNvckNvdW50ICsgIiBpdGVtcyIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHJldHVybiBtQ3Vyc29yOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGlzRW1wdHkoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUN1cnNvckNvdW50ID09IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNMb2FkaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIG1Jc0xvYWRpbmc7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PERvY3VtZW50SW5mbz4gZ2V0RG9jdW1lbnRzKFNlbGVjdGlvbiBpdGVtcykgewotICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSAoaXRlbXMgIT0gbnVsbCkgPyBpdGVtcy5zaXplKCkgOiAwOwotCi0gICAgICAgICAgICBmaW5hbCBMaXN0PERvY3VtZW50SW5mbz4gZG9jcyA9ICBuZXcgQXJyYXlMaXN0PD4oc2l6ZSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBnZXRJdGVtKGl0ZW1zLmdldChpKSk7Ci0gICAgICAgICAgICAgICAgY2hlY2tOb3ROdWxsKGN1cnNvciwgIkN1cnNvciBjYW5ub3QgYmUgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBEb2N1bWVudEluZm8gZG9jID0gRG9jdW1lbnRJbmZvLmZyb21EaXJlY3RvcnlDdXJzb3IoY3Vyc29yKTsKLSAgICAgICAgICAgICAgICBkb2NzLmFkZChkb2MpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGRvY3M7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIEN1cnNvciBnZXRDdXJzb3IoKSB7Ci0gICAgICAgICAgICBpZiAoTG9vcGVyLm15TG9vcGVyKCkgIT0gTG9vcGVyLmdldE1haW5Mb29wZXIoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbid0IGNhbGwgZ2V0Q3Vyc29yIGZyb20gbm9uLW1haW4gdGhyZWFkLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1DdXJzb3I7Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0PERvY3VtZW50SW5mbz4gZ2V0RG9jdW1lbnRzTWFya2VkRm9yRGVsZXRpb24oKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1QZW5kaW5nRGVsZXRlKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSBtTWFya2VkRm9yRGVsZXRpb24uc2l6ZSgpOwotICAgICAgICAgICAgICAgIExpc3Q8RG9jdW1lbnRJbmZvPiBkb2NzID0gIG5ldyBBcnJheUxpc3Q8PihzaXplKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3NpdGlvbiA9IG1NYXJrZWRGb3JEZWxldGlvbi5rZXlBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tTdGF0ZShwb3NpdGlvbiA8IG1DdXJzb3JDb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvUG9zaXRpb24ocG9zaXRpb24pOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBEb2N1bWVudEluZm8gZG9jID0gRG9jdW1lbnRJbmZvLmZyb21EaXJlY3RvcnlDdXJzb3IobUN1cnNvcik7Ci0gICAgICAgICAgICAgICAgICAgIGRvY3MuYWRkKGRvYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBkb2NzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIE1hcmtzIHRoZSBnaXZlbiBmaWxlcyBmb3IgZGVsZXRpb24uIFRoaXMgd2lsbCByZW1vdmUgdGhlbSBmcm9tIHRoZSBVSS4gQ2xpZW50cyBtdXN0IHRoZW4KLSAgICAgICAgICogY2FsbCBlaXRoZXIge0BsaW5rICN1bmRvRGVsZXRpb24oKX0gb3Ige0BsaW5rICNmaW5hbGl6ZURlbGV0aW9uKCl9IHRvIGNhbmNlbCBvciBjb25maXJtCi0gICAgICAgICAqIHRoZSBkZWxldGlvbiwgcmVzcGVjdGl2ZWx5LiBPbmx5IG9uZSBkZWxldGlvbiBvcGVyYXRpb24gaXMgYWxsb3dlZCBhdCBhIHRpbWUuCi0gICAgICAgICAqCi0gICAgICAgICAqIEBwYXJhbSBzZWxlY3RlZCBBIHNlbGVjdGlvbiByZXByZXNlbnRpbmcgdGhlIGZpbGVzIHRvIGRlbGV0ZS4KLSAgICAgICAgICovCi0gICAgICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKFNlbGVjdGlvbiBzZWxlY3RlZCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtUGVuZGluZ0RlbGV0ZSkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nRGVsZXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBkZWxldGlvbiBvcGVyYXRpb24gYXQgYSB0aW1lLgotICAgICAgICAgICAgICAgIGNoZWNrU3RhdGUobU1hcmtlZEZvckRlbGV0aW9uLnNpemUoKSA9PSAwKTsKLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0byBkZWxldGUgdGhhbiB3aGF0IGV4aXN0cy4KLSAgICAgICAgICAgICAgICBjaGVja1N0YXRlKG1DdXJzb3JDb3VudCA+PSBzZWxlY3RlZC5zaXplKCkpOwotCi0gICAgICAgICAgICAgICAgaW50W10gcG9zaXRpb25zID0gc2VsZWN0ZWQuZ2V0QWxsKCk7Ci0gICAgICAgICAgICAgICAgQXJyYXlzLnNvcnQocG9zaXRpb25zKTsKLQotICAgICAgICAgICAgICAgIC8vIFdhbGsgYmFja3dhcmRzIHRocm91Z2ggdGhlIHNldCwgc2luY2Ugd2UncmUgcmVtb3ZpbmcgcG9zaXRpb25zLgotICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgcG9zaXRpb25zIHdvdWxkIGNoYW5nZSBhZnRlciB0aGUgZmlyc3QgbW9kaWZpY2F0aW9uLgotICAgICAgICAgICAgICAgIGZvciAoaW50IHAgPSBwb3NpdGlvbnMubGVuZ3RoIC0gMTsgcCA+PSAwOyBwLS0pIHsKLSAgICAgICAgICAgICAgICAgICAgbU1hcmtlZEZvckRlbGV0aW9uLmFwcGVuZChwb3NpdGlvbnNbcF0sIHRydWUpOwotICAgICAgICAgICAgICAgICAgICBtVmlld0FkYXB0ZXIubm90aWZ5SXRlbVJlbW92ZWQocG9zaXRpb25zW3BdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTY2hlZHVsZWQgIiArIHBvc2l0aW9uc1twXSArICIgZm9yIGRlbGV0ZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogQ2FuY2VscyBhbiBvbmdvaW5nIGRlbGV0aW9uIG9wZXJhdGlvbi4gQWxsIGZpbGVzIGN1cnJlbnRseSBtYXJrZWQgZm9yIGRlbGV0aW9uIHdpbGwgYmUKLSAgICAgICAgICogdW5tYXJrZWQsIGFuZCByZXN0b3JlZCBpbiB0aGUgVUkuICBTZWUge0BsaW5rICNtYXJrRm9yRGVsZXRpb24oU2VsZWN0aW9uKX0uCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIHVuZG9EZWxldGlvbigpIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVBlbmRpbmdEZWxldGUpIHsKLSAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgZGVsZXRlZCBpdGVtcywgdGVtcG9yYXJpbHkgbWFya2luZyB0aGVtIGZhbHNlIGluIHRoZSBkZWxldGlvbiBsaXN0LCBhbmQKLSAgICAgICAgICAgICAgICAvLyByZS1hZGRpbmcgdGhlbSB0byB0aGUgVUkuCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSBtTWFya2VkRm9yRGVsZXRpb24uc2l6ZSgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBwb3NpdGlvbiA9IG1NYXJrZWRGb3JEZWxldGlvbi5rZXlBdChpKTsKLSAgICAgICAgICAgICAgICAgICAgbU1hcmtlZEZvckRlbGV0aW9uLnB1dChwb3NpdGlvbiwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBtVmlld0FkYXB0ZXIubm90aWZ5SXRlbUluc2VydGVkKHBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmVzZXREZWxldGVEYXRhKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgcmVzZXREZWxldGVEYXRhKCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtUGVuZGluZ0RlbGV0ZSkgewotICAgICAgICAgICAgICAgIG1QZW5kaW5nRGVsZXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgbU1hcmtlZEZvckRlbGV0aW9uLmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRmluYWxpemVzIGFuIG9uZ29pbmcgZGVsZXRpb24gb3BlcmF0aW9uLiBBbGwgZmlsZXMgY3VycmVudGx5IG1hcmtlZCBmb3IgZGVsZXRpb24gd2lsbCBiZQotICAgICAgICAgKiBkZWxldGVkLiAgU2VlIHtAbGluayAjbWFya0ZvckRlbGV0aW9uKFNlbGVjdGlvbil9LgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdXNlciAoZS5nLiBzdXJmYWNpbmcKLSAgICAgICAgICogc25hY2tiYXJzKSBmb3IgZXJyb3JzLCBpbmZvLCBldGMuCi0gICAgICAgICAqLwotICAgICAgICB2b2lkIGZpbmFsaXplRGVsZXRpb24oRGVsZXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtUGVuZGluZ0RlbGV0ZSkgewotICAgICAgICAgICAgICAgIGlmIChtUGVuZGluZ0RlbGV0ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBOZWNlc3NhcnkgdG8gYXZvaWQgYi8yNTA3MjU0NS4gRXZlbiB3aGVuIHRoYXQncyByZXNvbHZlZCwgdGhpcwotICAgICAgICAgICAgICAgICAgICAvLyBpcyBhIG5pY2Ugc2FmZSB0aGluZyB0byBkYXkuCi0gICAgICAgICAgICAgICAgICAgIG1QZW5kaW5nRGVsZXRlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciByZXNvbHZlciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwotICAgICAgICAgICAgICAgICAgICBEZWxldGVGaWxlc1Rhc2sgdGFzayA9IG5ldyBEZWxldGVGaWxlc1Rhc2socmVzb2x2ZXIsIGxpc3RlbmVyKTsKLSAgICAgICAgICAgICAgICAgICAgdGFzay5leGVjdXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgVGFzayB3aGljaCBjb2xsZWN0cyB0aGUgRG9jdW1lbnRJbmZvIGZvciBkb2N1bWVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBkZWxldGlvbiwKLSAgICAgICAgICogYW5kIGFjdHVhbGx5IGRlbGV0ZXMgdGhlbS4KLSAgICAgICAgICovCi0gICAgICAgIHByaXZhdGUgY2xhc3MgRGVsZXRlRmlsZXNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIExpc3Q8RG9jdW1lbnRJbmZvPj4gewotICAgICAgICAgICAgcHJpdmF0ZSBDb250ZW50UmVzb2x2ZXIgbVJlc29sdmVyOwotICAgICAgICAgICAgcHJpdmF0ZSBEZWxldGlvbkxpc3RlbmVyIG1MaXN0ZW5lcjsKLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBAcGFyYW0gcmVzb2x2ZXIgQSBDb250ZW50UmVzb2x2ZXIgZm9yIHBlcmZvcm1pbmcgdGhlIGFjdHVhbCBmaWxlIGRlbGV0aW9ucy4KLSAgICAgICAgICAgICAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEEgUnVubmFibGUgdGhhdCBpcyBleGVjdXRlZCBpbiB0aGUgZXZlbnQgdGhhdCBvbmUgb3IgbW9yZSBlcnJvcnMKLSAgICAgICAgICAgICAqICAgICBvY2N1cmVkIHdoaWxlIGNvcHlpbmcgZmlsZXMuICBFeGVjdXRpb24gd2lsbCBvY2N1ciBvbiB0aGUgVUkgdGhyZWFkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdWJsaWMgRGVsZXRlRmlsZXNUYXNrKENvbnRlbnRSZXNvbHZlciByZXNvbHZlciwgRGVsZXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgICAgIG1SZXNvbHZlciA9IHJlc29sdmVyOwotICAgICAgICAgICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHByb3RlY3RlZCBMaXN0PERvY3VtZW50SW5mbz4gZG9JbkJhY2tncm91bmQoVm9pZC4uLiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RG9jdW1lbnRzTWFya2VkRm9yRGVsZXRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKExpc3Q8RG9jdW1lbnRJbmZvPiBkb2NzKSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBoYWRUcm91YmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChEb2N1bWVudEluZm8gZG9jIDogZG9jcykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWRvYy5pc0RlbGV0ZVN1cHBvcnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsIGRvYyArICIgY291bGQgbm90IGJlIGRlbGV0ZWQuICBTa2lwcGluZy4uLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFkVHJvdWJsZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJEZWxldGluZzogIiArIGRvYy5kaXNwbGF5TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQgPSBEb2N1bWVudHNBcHBsaWNhdGlvbi5hY3F1aXJlVW5zdGFibGVQcm92aWRlck9yVGhyb3coCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlc29sdmVyLCBkb2MuZGVyaXZlZFVyaS5nZXRBdXRob3JpdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5kZWxldGVEb2N1bWVudChjbGllbnQsIGRvYy5kZXJpdmVkVXJpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byBkZWxldGUgIiArIGRvYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYWRUcm91YmxlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShjbGllbnQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGhhZFRyb3VibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyBzaG93IHdoaWNoIGZpbGVzIGZhaWxlZD8gYi8yMzcyMDEwMwotICAgICAgICAgICAgICAgICAgICBtTGlzdGVuZXIub25FcnJvcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkRlbGV0aW9uIHRhc2sgY29tcGxldGVkLiAgU29tZSBkZWxldGlvbnMgZmFpbGVkLiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiRGVsZXRpb24gdGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXNldERlbGV0ZURhdGEoKTsKLQotICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vbkNvbXBsZXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBjbGFzcyBEZWxldGlvbkxpc3RlbmVyIHsKLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQ2FsbGVkIHdoZW4gZGVsZXRpb24gaGFzIGNvbXBsZXRlZCAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFuIGVycm9yIG9jY3VycmVkKS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdm9pZCBvbkNvbXBsZXRpb24oKSB7fQotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENhbGxlZCBhdCB0aGUgZW5kIG9mIGEgZGVsZXRpb24gb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgb25lIG9yIG1vcmUgZXJyb3JzLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB2b2lkIG9uRXJyb3IoKSB7fQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRVcGRhdGVMaXN0ZW5lcihVcGRhdGVMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgICAgICAgICAgY2hlY2tTdGF0ZShtVXBkYXRlTGlzdGVuZXIgPT0gbnVsbCk7Ci0gICAgICAgICAgICBtVXBkYXRlTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBjbGFzcyBVcGRhdGVMaXN0ZW5lciB7Ci0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIENhbGxlZCB3aGVuIGEgc3VjY2Vzc2Z1bCB1cGRhdGUgaGFzIG9jY3VycmVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB2b2lkIG9uTW9kZWxVcGRhdGUoTW9kZWwgbW9kZWwpIHt9Ci0KLSAgICAgICAgICAgIC8qKgotICAgICAgICAgICAgICogQ2FsbGVkIHdoZW4gYW4gdXBkYXRlIGhhcyBiZWVuIGF0dGVtcHRlZCBidXQgZmFpbGVkLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB2b2lkIG9uTW9kZWxVcGRhdGVGYWlsZWQoRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIEl0ZW1DbGlja0xpc3RlbmVyIGltcGxlbWVudHMgQ2xpY2tMaXN0ZW5lciB7CisgICAgcHJpdmF0ZSBjbGFzcyBJdGVtQ2xpY2tMaXN0ZW5lciBpbXBsZW1lbnRzIERvY3VtZW50SG9sZGVyLkNsaWNrTGlzdGVuZXIgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEb2N1bWVudEhvbGRlciBkb2MpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBwb3NpdGlvbiA9IGRvYy5nZXRBZGFwdGVyUG9zaXRpb24oKTsKICAgICAgICAgICAgIGlmIChtU2VsZWN0aW9uTWFuYWdlci5oYXNTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIG1TZWxlY3Rpb25NYW5hZ2VyLnRvZ2dsZVNlbGVjdGlvbihwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbVNlbGVjdGlvbk1hbmFnZXIudG9nZ2xlU2VsZWN0aW9uKGRvYy5tb2RlbElkKTsKKyAgICAgICAgICAgICAgICBtU2VsZWN0aW9uTWFuYWdlci5zZXRTZWxlY3Rpb25SYW5nZUJlZ2luKGRvYy5nZXRBZGFwdGVyUG9zaXRpb24oKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGhhbmRsZVZpZXdJdGVtKHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBoYW5kbGVWaWV3SXRlbShkb2MubW9kZWxJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGNsYXNzIE1vZGVsVXBkYXRlTGlzdGVuZXIgZXh0ZW5kcyBNb2RlbC5VcGRhdGVMaXN0ZW5lciB7CisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBNb2RlbFVwZGF0ZUxpc3RlbmVyIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkgewogICAgICAgICAgICAgaWYgKG1vZGVsLmluZm8gIT0gbnVsbCB8fCBtb2RlbC5lcnJvciAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudEhvbGRlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRG9jdW1lbnRIb2xkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWM5MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRG9jdW1lbnRIb2xkZXIuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CisKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBEb2N1bWVudEhvbGRlcgorICAgICAgICBleHRlbmRzIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyCisgICAgICAgIGltcGxlbWVudHMgVmlldy5PbktleUxpc3RlbmVyIHsKKworICAgIHB1YmxpYyBATnVsbGFibGUgU3RyaW5nIG1vZGVsSWQ7CisKKyAgICBmaW5hbCBpbnQgbVNlbGVjdGVkSXRlbUNvbG9yOworICAgIGZpbmFsIGludCBtRGVmYXVsdEl0ZW1Db2xvcjsKKyAgICBmaW5hbCBib29sZWFuIG1BbHdheXNTaG93U3VtbWFyeTsKKyAgICBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworCisgICAgcHJpdmF0ZSBMaXN0RG9jdW1lbnRIb2xkZXIuQ2xpY2tMaXN0ZW5lciBtQ2xpY2tMaXN0ZW5lcjsKKyAgICBwcml2YXRlIFZpZXcuT25LZXlMaXN0ZW5lciBtS2V5TGlzdGVuZXI7CisKKyAgICBwdWJsaWMgRG9jdW1lbnRIb2xkZXIoQ29udGV4dCBjb250ZXh0LCBWaWV3R3JvdXAgcGFyZW50LCBpbnQgbGF5b3V0KSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgaW5mbGF0ZUxheW91dChjb250ZXh0LCBwYXJlbnQsIGxheW91dCkpOworICAgIH0KKworICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlcihDb250ZXh0IGNvbnRleHQsIFZpZXcgaXRlbSkgeworICAgICAgICBzdXBlcihpdGVtKTsKKworICAgICAgICBpdGVtVmlldy5zZXRPbktleUxpc3RlbmVyKHRoaXMpOworCisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKworICAgICAgICBtRGVmYXVsdEl0ZW1Db2xvciA9IGNvbnRleHQuZ2V0Q29sb3IoUi5jb2xvci5pdGVtX2RvY19iYWNrZ3JvdW5kKTsKKyAgICAgICAgbVNlbGVjdGVkSXRlbUNvbG9yID0gY29udGV4dC5nZXRDb2xvcihSLmNvbG9yLml0ZW1fZG9jX2JhY2tncm91bmRfc2VsZWN0ZWQpOworICAgICAgICBtQWx3YXlzU2hvd1N1bW1hcnkgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldEJvb2xlYW4oUi5ib29sLmFsd2F5c19zaG93X3N1bW1hcnkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJpbmRzIHRoZSB2aWV3IHRvIHRoZSBnaXZlbiBpdGVtIGRhdGEuCisgICAgICogQHBhcmFtIGN1cnNvcgorICAgICAqIEBwYXJhbSBtb2RlbElkCisgICAgICogQHBhcmFtIHN0YXRlCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgYmluZChDdXJzb3IgY3Vyc29yLCBTdHJpbmcgbW9kZWxJZCwgU3RhdGUgc3RhdGUpOworCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBpdGVtVmlldy5zZXRBY3RpdmF0ZWQoc2VsZWN0ZWQpOworICAgICAgICBpdGVtVmlldy5zZXRCYWNrZ3JvdW5kQ29sb3Ioc2VsZWN0ZWQgPyBtU2VsZWN0ZWRJdGVtQ29sb3IgOiBtRGVmYXVsdEl0ZW1Db2xvcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25LZXkoVmlldyB2LCBpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgLy8gSW50ZXJjZXB0IGVudGVyIGtleS11cCBldmVudHMsIGFuZCB0cmVhdCB0aGVtIGFzIGNsaWNrcy4gIEZvcndhcmQgb3RoZXIgZXZlbnRzLgorICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gS2V5RXZlbnQuQUNUSU9OX1VQICYmCisgICAgICAgICAgICAgICAga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0VOVEVSKSB7CisgICAgICAgICAgICBpZiAobUNsaWNrTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1DbGlja0xpc3RlbmVyLm9uQ2xpY2sodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChtS2V5TGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1LZXlMaXN0ZW5lci5vbktleSh2LCBrZXlDb2RlLCBldmVudCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZENsaWNrTGlzdGVuZXIoTGlzdERvY3VtZW50SG9sZGVyLkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgLy8gSnVzdCBoYW5kbGUgb25lIGZvciBub3c7IHN3aXRjaCB0byBhIGxpc3QgaWYgbmVjZXNzYXJ5LgorICAgICAgICBjaGVja1N0YXRlKG1DbGlja0xpc3RlbmVyID09IG51bGwpOworICAgICAgICBtQ2xpY2tMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZE9uS2V5TGlzdGVuZXIoVmlldy5PbktleUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIC8vIEp1c3QgaGFuZGxlIG9uZSBmb3Igbm93OyBzd2l0Y2ggdG8gYSBsaXN0IGlmIG5lY2Vzc2FyeS4KKyAgICAgICAgY2hlY2tTdGF0ZShtS2V5TGlzdGVuZXIgPT0gbnVsbCk7CisgICAgICAgIG1LZXlMaXN0ZW5lciA9IGxpc3RlbmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIHNldEVuYWJsZWRSZWN1cnNpdmUoaXRlbVZpZXcsIGVuYWJsZWQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHNldEVuYWJsZWRSZWN1cnNpdmUoVmlldyBpdGVtVmlldywgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgIGlmIChpdGVtVmlldyA9PSBudWxsKSByZXR1cm47CisgICAgICAgIGlmIChpdGVtVmlldy5pc0VuYWJsZWQoKSA9PSBlbmFibGVkKSByZXR1cm47CisgICAgICAgIGl0ZW1WaWV3LnNldEVuYWJsZWQoZW5hYmxlZCk7CisKKyAgICAgICAgaWYgKGl0ZW1WaWV3IGluc3RhbmNlb2YgVmlld0dyb3VwKSB7CisgICAgICAgICAgICBmaW5hbCBWaWV3R3JvdXAgdmcgPSAoVmlld0dyb3VwKSBpdGVtVmlldzsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSB2Zy5nZXRDaGlsZENvdW50KCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIHNldEVuYWJsZWRSZWN1cnNpdmUodmcuZ2V0Q2hpbGRBdChpKSwgZW5hYmxlZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBWaWV3IGluZmxhdGVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBWaWV3R3JvdXAgcGFyZW50LCBpbnQgbGF5b3V0KSB7CisgICAgICAgIGZpbmFsIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGluZmxhdGVyLmluZmxhdGUobGF5b3V0LCBwYXJlbnQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgQ2xpY2tMaXN0ZW5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRG9jdW1lbnRIb2xkZXIgZG9jKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudHNBZGFwdGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Eb2N1bWVudHNBZGFwdGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjMmY2MwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0RvY3VtZW50c0FkYXB0ZXIuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkdyaWRMYXlvdXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuVW5zdXBwb3J0ZWRBZGRyZXNzVHlwZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBEb2N1bWVudHNBZGFwdGVyIHByb3ZpZGVzIGdsdWUgYmV0d2VlbiBhIGRpcmVjdG9yeSBNb2RlbCwgYW5kIFJlY3lsY2VyVmlldy4gV2UndmUKKyAqIGFic3RyYWN0ZWQgdGhpcyBhIGJpdCBpbiBvcmRlciB0byBkZWNvbXBvc2Ugc29tZSBzcGVjaWFsaXplZCBzdXBwb3J0CisgKiBmb3IgYWRkaW5nIGR1bW15IGxheW91dCBvYmplY3RzIChAc2VlIFNlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXIpLiBIYW5kbGluZyBvZiB0aGUKKyAqIGR1bW15IGxheW91dCBvYmplY3RzIHdhcyBlcnJvciBwcm9uZSB3aGVuIGludGVyc3BlcnNlZCB3aXRoIHRoZSBjb3JlIG1vZGUgLyBhZGFwdGVyIGNvZGUuCisgKgorICogQHNlZSBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIKKyAqIEBzZWUgU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcgorICovCithYnN0cmFjdCBjbGFzcyBEb2N1bWVudHNBZGFwdGVyCisgICAgICAgIGV4dGVuZHMgUmVjeWNsZXJWaWV3LkFkYXB0ZXI8RG9jdW1lbnRIb2xkZXI+CisgICAgICAgIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgeworCisgICAgLy8gUGF5bG9hZHMgZm9yIG5vdGlmeUl0ZW1DaGFuZ2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZWxlY3Rpb24gYW5kIG90aGVyIGV2ZW50cy4KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTEVDVElPTl9DSEFOR0VEX01BUktFUiA9ICJTZWxlY3Rpb24tQ2hhbmdlZCI7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBtb2RlbCBJRHMgb2YgaXRlbXMgY3VycmVudGx5IGluIHRoZSBhZGFwdGVyLiBFeGNsdWRlcyBpdGVtcyB0aGF0IGFyZQorICAgICAqIGN1cnJlbnRseSBoaWRkZW4gKHNlZSB7QGxpbmsgI2hpZGUoU3RyaW5nLi4uKX0pLgorICAgICAqCisgICAgICogQHJldHVybiBBIGxpc3Qgb2YgTW9kZWwgSURzLgorICAgICAqLworICAgIGFic3RyYWN0IExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpOworCisgICAgLyoqCisgICAgICogVHJpZ2dlcnMgaXRlbS1jaGFuZ2Ugbm90aWZpY2F0aW9ucyBieSBzdGFibGUgSUQgKGFzIG9wcG9zZWQgdG8gcG9zaXRpb24pLgorICAgICAqIFBhc3NpbmcgYW4gdW5yZWNvZ25pemVkIElEIHdpbGwgcmVzdWx0IGluIGEgd2FybmluZyBpbiBsb2djYXQsIGJ1dCBubyBvdGhlciBlcnJvci4KKyAgICAgKi8KKyAgICBhYnN0cmFjdCB2b2lkIG9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoU3RyaW5nIGlkKTsKKworICAgIC8qKgorICAgICAqIEByZXR1cm4gVGhlIG1vZGVsIElEIG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBhZGFwdGVyIHBvc2l0aW9uLgorICAgICAqLworICAgIGFic3RyYWN0IFN0cmluZyBnZXRNb2RlbElkKGludCBwb3NpdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBIaWRlcyBhIHNldCBvZiBpdGVtcyBmcm9tIHRoZSBhc3NvY2lhdGVkIFJlY3ljbGVyVmlldy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBpZHMgVGhlIE1vZGVsIElEcyBvZiB0aGUgaXRlbXMgdG8gaGlkZS4KKyAgICAgKiBAcmV0dXJuIEEgU3BhcnNlQXJyYXkgdGhhdCBtYXBzIHRoZSBoaWRkZW4gSURzIHRvIHRoZWlyIG9sZCBwb3NpdGlvbnMuIFRoaXMgY2FuIGJlIHVzZWQKKyAgICAgKiAgICAgICAgIHRvIHtAbGluayAjdW5oaWRlfSB0aGUgaXRlbXMgaWYgbmVjZXNzYXJ5LgorICAgICAqLworICAgIGFic3RyYWN0IHB1YmxpYyBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGUoU3RyaW5nLi4uIGlkcyk7CisKKyAgICAvKioKKyAgICAgKiBVbmhpZGVzIGEgc2V0IG9mIHByZXZpb3VzbHkgaGlkZGVuIGl0ZW1zLgorICAgICAqCisgICAgICogQHBhcmFtIGlkcyBBIHNwYXJzZSBhcnJheSBvZiBJRHMgZnJvbSBhIHByZXZpb3VzIGNhbGwgdG8ge0BsaW5rICNoaWRlfS4KKyAgICAgKi8KKyAgICBhYnN0cmFjdCB2b2lkIHVuaGlkZShTcGFyc2VBcnJheTxTdHJpbmc+IGlkcyk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgY2xhc3MgdGhhdCB5aWVsZHMgdGhlIHNwYW4gc2l6ZSBmb3IgYSBwYXJ0aWN1bGFyIGVsZW1lbnQuIFRoaXMgaXMKKyAgICAgKiBwcmltYXJpbHkgdXNlZnVsIGluIHtAbGluayBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlcn0gd2hlcmUKKyAgICAgKiB3ZSBhZGp1c3Qgc2l6ZXMuCisgICAgICovCisgICAgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAgY3JlYXRlU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEFkZHJlc3NUeXBlRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2xlYW4gaXNEaXJlY3RvcnkoQ3Vyc29yIGN1cnNvcikgeworICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgcmV0dXJuIERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKTsKKyAgICB9CisKKyAgICBib29sZWFuIGlzRGlyZWN0b3J5KE1vZGVsIG1vZGVsLCBpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgU3RyaW5nIG1vZGVsSWQgPSBnZXRNb2RlbElkcygpLmdldChwb3NpdGlvbik7CisgICAgICAgIEN1cnNvciBjdXJzb3IgPSBtb2RlbC5nZXRJdGVtKG1vZGVsSWQpOworICAgICAgICByZXR1cm4gaXNEaXJlY3RvcnkoY3Vyc29yKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbnZpcm9ubWVudGFsIGFjY2VzcyBmb3IgVmlldyBhZGFwdGVyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgKi8KKyAgICBpbnRlcmZhY2UgRW52aXJvbm1lbnQgeworICAgICAgICBDb250ZXh0IGdldENvbnRleHQoKTsKKyAgICAgICAgaW50IGdldENvbHVtbkNvdW50KCk7CisgICAgICAgIFN0YXRlIGdldERpc3BsYXlTdGF0ZSgpOworICAgICAgICBib29sZWFuIGlzU2VsZWN0ZWQoU3RyaW5nIGlkKTsKKyAgICAgICAgTW9kZWwgZ2V0TW9kZWwoKTsKKyAgICAgICAgYm9vbGVhbiBpc0RvY3VtZW50RW5hYmxlZChTdHJpbmcgbWltZVR5cGUsIGludCBmbGFncyk7CisgICAgICAgIHZvaWQgaW5pdERvY3VtZW50SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlcik7CisgICAgICAgIHZvaWQgb25CaW5kRG9jdW1lbnRIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBDdXJzb3IgY3Vyc29yKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9HcmlkRGlyZWN0b3J5SG9sZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9HcmlkRGlyZWN0b3J5SG9sZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY3MjMyNwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0dyaWREaXJlY3RvcnlIb2xkZXIuamF2YQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZTsKKworZmluYWwgY2xhc3MgR3JpZERpcmVjdG9yeUhvbGRlciBleHRlbmRzIERvY3VtZW50SG9sZGVyIHsKKyAgICBmaW5hbCBUZXh0VmlldyBtVGl0bGU7CisgICAgcHJpdmF0ZSBJbWFnZVZpZXcgbUljb25DaGVjazsKKyAgICBwcml2YXRlIEltYWdlVmlldyBtSWNvbk1pbWU7CisKKyAgICBwdWJsaWMgR3JpZERpcmVjdG9yeUhvbGRlcihDb250ZXh0IGNvbnRleHQsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgcGFyZW50LCBSLmxheW91dC5pdGVtX2Rpcl9ncmlkKTsKKworICAgICAgICBtVGl0bGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudGl0bGUpOworICAgICAgICBtSWNvbk1pbWUgPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX21pbWVfc20pOworICAgICAgICBtSWNvbkNoZWNrID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9jaGVjayk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBzdXBlci5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CisgICAgICAgIGZsb2F0IGNoZWNrQWxwaGEgPSBzZWxlY3RlZCA/IDFmIDogMGY7CisKKyAgICAgICAgbUljb25DaGVjay5hbmltYXRlKCkuYWxwaGEoY2hlY2tBbHBoYSkuc3RhcnQoKTsKKyAgICAgICAgbUljb25NaW1lLmFuaW1hdGUoKS5hbHBoYSgxZiAtIGNoZWNrQWxwaGEpLnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZCB0aGlzIHZpZXcgdG8gdGhlIGdpdmVuIGRvY3VtZW50IGZvciBkaXNwbGF5LgorICAgICAqIEBwYXJhbSBjdXJzb3IgUG9pbnRpbmcgdG8gdGhlIGl0ZW0gdG8gYmUgYm91bmQuCisgICAgICogQHBhcmFtIG1vZGVsSWQgVGhlIG1vZGVsIElEIG9mIHRoZSBpdGVtLgorICAgICAqIEBwYXJhbSBzdGF0ZSBDdXJyZW50IGRpc3BsYXkgc3RhdGUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgYmluZChDdXJzb3IgY3Vyc29yLCBTdHJpbmcgbW9kZWxJZCwgU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgY2hlY2tOb3ROdWxsKGN1cnNvciwgIkN1cnNvciBjYW5ub3QgYmUgbnVsbC4iKTsKKworICAgICAgICB0aGlzLm1vZGVsSWQgPSBtb2RlbElkOworCisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NEaXNwbGF5TmFtZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUpOworICAgICAgICBtVGl0bGUuc2V0VGV4dChkb2NEaXNwbGF5TmFtZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvR3JpZERvY3VtZW50SG9sZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9HcmlkRG9jdW1lbnRIb2xkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGFjMGY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvR3JpZERvY3VtZW50SG9sZGVyLmphdmEKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckludDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckxvbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRm9ybWF0dGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuSWNvblV0aWxzOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUm9vdEN1cnNvcldyYXBwZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitmaW5hbCBjbGFzcyBHcmlkRG9jdW1lbnRIb2xkZXIgZXh0ZW5kcyBEb2N1bWVudEhvbGRlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBtSGlkZVRpdGxlczsKKworICAgIGZpbmFsIFRleHRWaWV3IG1UaXRsZTsKKyAgICBmaW5hbCBUZXh0VmlldyBtRGF0ZTsKKyAgICBmaW5hbCBUZXh0VmlldyBtU2l6ZTsKKyAgICBmaW5hbCBJbWFnZVZpZXcgbUljb25NaW1lTGc7CisgICAgZmluYWwgSW1hZ2VWaWV3IG1JY29uTWltZVNtOworICAgIGZpbmFsIEltYWdlVmlldyBtSWNvblRodW1iOworICAgIGZpbmFsIEltYWdlVmlldyBtSWNvbkNoZWNrOworICAgIGZpbmFsIEljb25IZWxwZXIgbUljb25IZWxwZXI7CisKKyAgICBwdWJsaWMgR3JpZERvY3VtZW50SG9sZGVyKENvbnRleHQgY29udGV4dCwgVmlld0dyb3VwIHBhcmVudCwgSWNvbkhlbHBlciBpY29uSGVscGVyKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIHBhcmVudCwgUi5sYXlvdXQuaXRlbV9kb2NfZ3JpZCk7CisKKyAgICAgICAgbVRpdGxlID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKTsKKyAgICAgICAgbURhdGUgPSAoVGV4dFZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmRhdGUpOworICAgICAgICBtU2l6ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuc2l6ZSk7CisgICAgICAgIG1JY29uTWltZUxnID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9taW1lX2xnKTsKKyAgICAgICAgbUljb25NaW1lU20gPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX21pbWVfc20pOworICAgICAgICBtSWNvblRodW1iID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl90aHVtYik7CisgICAgICAgIG1JY29uQ2hlY2sgPSAoSW1hZ2VWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5pY29uX2NoZWNrKTsKKworICAgICAgICBtSWNvbkhlbHBlciA9IGljb25IZWxwZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWQoYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBzdXBlci5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CisgICAgICAgIGZsb2F0IGNoZWNrQWxwaGEgPSBzZWxlY3RlZCA/IDFmIDogMGY7CisKKyAgICAgICAgbUljb25DaGVjay5hbmltYXRlKCkuYWxwaGEoY2hlY2tBbHBoYSkuc3RhcnQoKTsKKyAgICAgICAgbUljb25NaW1lU20uYW5pbWF0ZSgpLmFscGhhKDFmIC0gY2hlY2tBbHBoYSkuc3RhcnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBCaW5kIHRoaXMgdmlldyB0byB0aGUgZ2l2ZW4gZG9jdW1lbnQgZm9yIGRpc3BsYXkuCisgICAgICogQHBhcmFtIGN1cnNvciBQb2ludGluZyB0byB0aGUgaXRlbSB0byBiZSBib3VuZC4KKyAgICAgKiBAcGFyYW0gbW9kZWxJZCBUaGUgbW9kZWwgSUQgb2YgdGhlIGl0ZW0uCisgICAgICogQHBhcmFtIHN0YXRlIEN1cnJlbnQgZGlzcGxheSBzdGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBiaW5kKEN1cnNvciBjdXJzb3IsIFN0cmluZyBtb2RlbElkLCBTdGF0ZSBzdGF0ZSkgeworICAgICAgICB0aGlzLm1vZGVsSWQgPSBtb2RlbElkOworCisgICAgICAgIGNoZWNrTm90TnVsbChjdXJzb3IsICJDdXJzb3IgY2Fubm90IGJlIG51bGwuIik7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY0F1dGhvcml0eSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFkpOworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jSWQgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpOworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jTWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY0Rpc3BsYXlOYW1lID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSk7CisgICAgICAgIGZpbmFsIGxvbmcgZG9jTGFzdE1vZGlmaWVkID0gZ2V0Q3Vyc29yTG9uZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9MQVNUX01PRElGSUVEKTsKKyAgICAgICAgZmluYWwgaW50IGRvY0ljb24gPSBnZXRDdXJzb3JJbnQoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fSUNPTik7CisgICAgICAgIGZpbmFsIGludCBkb2NGbGFncyA9IGdldEN1cnNvckludChjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9GTEFHUyk7CisgICAgICAgIGZpbmFsIGxvbmcgZG9jU2l6ZSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisKKyAgICAgICAgbUljb25IZWxwZXIuc3RvcExvYWRpbmcobUljb25UaHVtYik7CisKKyAgICAgICAgbUljb25NaW1lTGcuYW5pbWF0ZSgpLmNhbmNlbCgpOworICAgICAgICBtSWNvbk1pbWVMZy5zZXRBbHBoYSgxZik7CisgICAgICAgIG1JY29uVGh1bWIuYW5pbWF0ZSgpLmNhbmNlbCgpOworICAgICAgICBtSWNvblRodW1iLnNldEFscGhhKDBmKTsKKworICAgICAgICBtSWNvbk1pbWVTbS5zZXRJbWFnZURyYXdhYmxlKEljb25VdGlscy5sb2FkTWltZUljb24obUNvbnRleHQsIGRvY01pbWVUeXBlKSk7CisKKyAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoZG9jQXV0aG9yaXR5LCBkb2NJZCk7CisgICAgICAgIG1JY29uSGVscGVyLmxvYWRUaHVtYm5haWwodXJpLCBkb2NNaW1lVHlwZSwgZG9jRmxhZ3MsIGRvY0ljb24sIG1JY29uVGh1bWIsIG1JY29uTWltZUxnKTsKKworICAgICAgICBpZiAobUhpZGVUaXRsZXMpIHsKKyAgICAgICAgICAgIG1UaXRsZS5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtVGl0bGUuc2V0VGV4dChkb2NEaXNwbGF5TmFtZSk7CisgICAgICAgICAgICBtVGl0bGUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvY0xhc3RNb2RpZmllZCA9PSAtMSkgeworICAgICAgICAgICAgbURhdGUuc2V0VGV4dChudWxsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1EYXRlLnNldFRleHQoU2hhcmVkLmZvcm1hdFRpbWUobUNvbnRleHQsIGRvY0xhc3RNb2RpZmllZCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdGF0ZS5zaG93U2l6ZSB8fCBEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhkb2NNaW1lVHlwZSkgfHwgZG9jU2l6ZSA9PSAtMSkgeworICAgICAgICAgICAgbVNpemUuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVNpemUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgbVNpemUuc2V0VGV4dChGb3JtYXR0ZXIuZm9ybWF0RmlsZVNpemUobUNvbnRleHQsIGRvY1NpemUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgd2hldGhlciB0byBoaWRlIHRpdGxlcyBvbiBzdWJzZXF1ZW50bHkgY3JlYXRlZCBHcmlkRG9jdW1lbnRIb2xkZXIgaXRlbXMuCisgICAgICogQHBhcmFtIGhpZGVUaXRsZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0SGlkZVRpdGxlcyhib29sZWFuIGhpZGVUaXRsZXMpIHsKKyAgICAgICAgbUhpZGVUaXRsZXMgPSBoaWRlVGl0bGVzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0ljb25IZWxwZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L0ljb25IZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzE0MDc3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvSWNvbkhlbHBlci5qYXZhCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuTU9ERV9HUklEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZS5NT0RFX0xJU1Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLk1PREVfVU5LTk9XTjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOworaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOworaW1wb3J0IGFuZHJvaWQub3MuT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQXBwbGljYXRpb247CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuSWNvblV0aWxzOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLk1pbWVQcmVkaWNhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUHJvdmlkZXJFeGVjdXRvcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Qcm92aWRlckV4ZWN1dG9yLlByZWVtcHRhYmxlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuVGh1bWJuYWlsQ2FjaGU7CisKKy8qKgorICogQSBjbGFzcyB0byBhc3Npc3Qgd2l0aCBsb2FkaW5nIGFuZCBtYW5hZ2luZyB0aGUgSW1hZ2VzIChpLmUuIHRodW1ibmFpbHMgYW5kIGljb25zKSBhc3NvY2lhdGVkCisgKiB3aXRoIGl0ZW1zIGluIHRoZSBkaXJlY3RvcnkgbGlzdGluZy4KKyAqLworcHVibGljIGNsYXNzIEljb25IZWxwZXIgeworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiSWNvbkhlbHBlciI7CisKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBUaHVtYm5haWxDYWNoZSBtQ2FjaGU7CisgICAgcHJpdmF0ZSBQb2ludCBtVGh1bWJTaXplOworICAgIC8vIFRoZSBkaXNwbGF5IG1vZGUgKE1PREVfR1JJRCwgTU9ERV9MSVNULCBldGMpLgorICAgIHByaXZhdGUgaW50IG1Nb2RlOworICAgIHByaXZhdGUgYm9vbGVhbiBtVGh1bWJuYWlsc0VuYWJsZWQgPSB0cnVlOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gbW9kZSBNT0RFX0dSSUQgb3IgTU9ERV9MSVNUCisgICAgICovCisgICAgcHVibGljIEljb25IZWxwZXIoQ29udGV4dCBjb250ZXh0LCBpbnQgbW9kZSkgeworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIHNldE1vZGUobW9kZSk7CisgICAgICAgIG1DYWNoZSA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmdldFRodW1ibmFpbHNDYWNoZShjb250ZXh0LCBtVGh1bWJTaXplKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRodW1ibmFpbHMuIFdoZW4gdGh1bWJuYWlscyBhcmUgZGlzYWJsZWQsIG1pbWUgaWNvbnMgKG9yIGN1c3RvbSBpY29ucywgaWYKKyAgICAgKiBzcGVjaWZpZWQgYnkgdGhlIGRvY3VtZW50KSBhcmUgdXNlZCBpbnN0ZWFkLgorICAgICAqCisgICAgICogQHBhcmFtIGVuYWJsZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRUaHVtYm5haWxzRW5hYmxlZChib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgbVRodW1ibmFpbHNFbmFibGVkID0gZW5hYmxlZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IGRpc3BsYXkgbW9kZS4gIFRoaXMgYWZmZWN0cyB0aGUgdGh1bWJuYWlsIHNpemVzIHRoYXQgYXJlIGxvYWRlZC4KKyAgICAgKiBAcGFyYW0gbW9kZSBTZWUge0BsaW5rIFN0YXRlLk1PREVfTElTVH0gYW5kIHtAbGluayBTdGF0ZS5NT0RFX0dSSUR9LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldE1vZGUoaW50IG1vZGUpIHsKKyAgICAgICAgLy8gVE9ETzogSW5zdGVhZCBvZiBleHBvc2luZyBzZXRNb2RlLCBtYWtlIHRoZSBtb2RlIGZpbmFsLCBhbmQgbWFrZSBzZXBhcmF0ZSBpbnN0YW5jZXMgZm9yCisgICAgICAgIC8vIGdyaWQvbGlzdC4KKyAgICAgICAgaW50IHRodW1iU2l6ZTsKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgICAgICBjYXNlIE1PREVfR1JJRDoKKyAgICAgICAgICAgICAgICB0aHVtYlNpemUgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ncmlkX3dpZHRoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTU9ERV9MSVNUOgorICAgICAgICAgICAgICAgIHRodW1iU2l6ZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIFIuZGltZW4ubGlzdF9pdGVtX3RodW1ibmFpbF9zaXplKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTU9ERV9VTktOT1dOOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgbW9kZTogIiArIG1vZGUpOworICAgICAgICB9CisgICAgICAgIG1Nb2RlID0gbW9kZTsKKyAgICAgICAgbVRodW1iU2l6ZSA9IG5ldyBQb2ludCh0aHVtYlNpemUsIHRodW1iU2l6ZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FuY2VscyBhbnkgb25nb2luZyBsb2FkIG9wZXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBJbWFnZVZpZXcuCisgICAgICogQHBhcmFtIGljb24KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdG9wTG9hZGluZyhJbWFnZVZpZXcgaWNvbikgeworICAgICAgICBmaW5hbCBMb2FkZXJUYXNrIG9sZFRhc2sgPSAoTG9hZGVyVGFzaykgaWNvbi5nZXRUYWcoKTsKKyAgICAgICAgaWYgKG9sZFRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgb2xkVGFzay5wcmVlbXB0KCk7CisgICAgICAgICAgICBpY29uLnNldFRhZyhudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKiBJbnRlcm5hbCB0YXNrIGZvciBsb2FkaW5nIHRodW1ibmFpbHMgYXN5bmNocm9ub3VzbHkuICovCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTG9hZGVyVGFzaworICAgICAgICAgICAgZXh0ZW5kcyBBc3luY1Rhc2s8VXJpLCBWb2lkLCBCaXRtYXA+CisgICAgICAgICAgICBpbXBsZW1lbnRzIFByZWVtcHRhYmxlIHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbVVyaTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJbWFnZVZpZXcgbUljb25NaW1lOworICAgICAgICBwcml2YXRlIGZpbmFsIEltYWdlVmlldyBtSWNvblRodW1iOworICAgICAgICBwcml2YXRlIGZpbmFsIFBvaW50IG1UaHVtYlNpemU7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ2FuY2VsbGF0aW9uU2lnbmFsIG1TaWduYWw7CisKKyAgICAgICAgcHVibGljIExvYWRlclRhc2soVXJpIHVyaSwgSW1hZ2VWaWV3IGljb25NaW1lLCBJbWFnZVZpZXcgaWNvblRodW1iLAorICAgICAgICAgICAgICAgIFBvaW50IHRodW1iU2l6ZSkgeworICAgICAgICAgICAgbVVyaSA9IHVyaTsKKyAgICAgICAgICAgIG1JY29uTWltZSA9IGljb25NaW1lOworICAgICAgICAgICAgbUljb25UaHVtYiA9IGljb25UaHVtYjsKKyAgICAgICAgICAgIG1UaHVtYlNpemUgPSB0aHVtYlNpemU7CisgICAgICAgICAgICBtU2lnbmFsID0gbmV3IENhbmNlbGxhdGlvblNpZ25hbCgpOworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTdGFydGluZyBpY29uIGxvYWRlciB0YXNrIGZvciAiICsgbVVyaSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcHJlZW1wdCgpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSWNvbiBsb2FkZXIgdGFzayBmb3IgIiArIG1VcmkgKyAiIHdhcyBjYW5jZWxsZWQuIik7CisgICAgICAgICAgICBjYW5jZWwoZmFsc2UpOworICAgICAgICAgICAgbVNpZ25hbC5jYW5jZWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgQml0bWFwIGRvSW5CYWNrZ3JvdW5kKFVyaS4uLiBwYXJhbXMpIHsKKyAgICAgICAgICAgIGlmIChpc0NhbmNlbGxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgICAgICBmaW5hbCBDb250ZXh0IGNvbnRleHQgPSBtSWNvblRodW1iLmdldENvbnRleHQoKTsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciByZXNvbHZlciA9IGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisKKyAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQgPSBudWxsOworICAgICAgICAgICAgQml0bWFwIHJlc3VsdCA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNsaWVudCA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLCBtVXJpLmdldEF1dGhvcml0eSgpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBEb2N1bWVudHNDb250cmFjdC5nZXREb2N1bWVudFRodW1ibmFpbChjbGllbnQsIG1VcmksIG1UaHVtYlNpemUsIG1TaWduYWwpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBUaHVtYm5haWxDYWNoZSB0aHVtYnMgPSBEb2N1bWVudHNBcHBsaWNhdGlvbi5nZXRUaHVtYm5haWxzQ2FjaGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbVRodW1iU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHRodW1icy5wdXQobVVyaSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBPcGVyYXRpb25DYW5jZWxlZEV4Y2VwdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIGxvYWQgdGh1bWJuYWlsIGZvciAiICsgbVVyaSArICI6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShjbGllbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKEJpdG1hcCByZXN1bHQpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTG9hZGVyIHRhc2sgZm9yICIgKyBtVXJpICsgIiBjb21wbGV0ZWQiKTsKKworICAgICAgICAgICAgaWYgKG1JY29uVGh1bWIuZ2V0VGFnKCkgPT0gdGhpcyAmJiByZXN1bHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0VGFnKG51bGwpOworICAgICAgICAgICAgICAgIG1JY29uVGh1bWIuc2V0SW1hZ2VCaXRtYXAocmVzdWx0KTsKKworICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gbUljb25NaW1lLmdldEFscGhhKCk7CisgICAgICAgICAgICAgICAgbUljb25NaW1lLmFuaW1hdGUoKS5hbHBoYSgwZikuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICBtSWNvblRodW1iLnNldEFscGhhKDBmKTsKKyAgICAgICAgICAgICAgICBtSWNvblRodW1iLmFuaW1hdGUoKS5hbHBoYShhbHBoYSkuc3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWQgdGh1bWJuYWlscyBmb3IgYSBkaXJlY3RvcnkgbGlzdCBpdGVtLgorICAgICAqIEBwYXJhbSB1cmkgVGhlIFVSSSBmb3IgdGhlIGZpbGUgYmVpbmcgcmVwcmVzZW50ZWQuCisgICAgICogQHBhcmFtIG1pbWVUeXBlIFRoZSBtaW1lIHR5cGUgb2YgdGhlIGZpbGUgYmVpbmcgcmVwcmVzZW50ZWQuCisgICAgICogQHBhcmFtIGRvY0ZsYWdzIEZsYWdzIGZvciB0aGUgZmlsZSBiZWluZyByZXByZXNlbnRlZC4KKyAgICAgKiBAcGFyYW0gZG9jSWNvbiBDdXN0b20gaWNvbiAoaWYgYW55KSBmb3IgdGhlIGZpbGUgYmVpbmcgcmVxdWVzdGVkLgorICAgICAqIEBwYXJhbSBpY29uVGh1bWIgVGhlIGl0ZW12aWV3J3MgdGh1bWJuYWlsIGljb24uCisgICAgICogQHBhcmFtIGljb25NaW1lIFRoZSBpdGVtdmlldydzIG1pbWUgaWNvbi4KKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIHZvaWQgbG9hZFRodW1ibmFpbChVcmkgdXJpLCBTdHJpbmcgbWltZVR5cGUsIGludCBkb2NGbGFncywgaW50IGRvY0ljb24sCisgICAgICAgICAgICBJbWFnZVZpZXcgaWNvblRodW1iLCBJbWFnZVZpZXcgaWNvbk1pbWUpIHsKKyAgICAgICAgYm9vbGVhbiBjYWNoZUhpdCA9IGZhbHNlOworCisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NBdXRob3JpdHkgPSB1cmkuZ2V0QXV0aG9yaXR5KCk7CisKKyAgICAgICAgZmluYWwgYm9vbGVhbiBzdXBwb3J0c1RodW1ibmFpbCA9IChkb2NGbGFncyAmIERvY3VtZW50LkZMQUdfU1VQUE9SVFNfVEhVTUJOQUlMKSAhPSAwOworICAgICAgICBmaW5hbCBib29sZWFuIGFsbG93VGh1bWJuYWlsID0gKG1Nb2RlID09IE1PREVfR1JJRCkKKyAgICAgICAgICAgICAgICB8fCBNaW1lUHJlZGljYXRlLm1pbWVNYXRjaGVzKE1pbWVQcmVkaWNhdGUuVklTVUFMX01JTUVTLCBtaW1lVHlwZSk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gc2hvd1RodW1ibmFpbCA9IHN1cHBvcnRzVGh1bWJuYWlsICYmIGFsbG93VGh1bWJuYWlsICYmIG1UaHVtYm5haWxzRW5hYmxlZDsKKyAgICAgICAgaWYgKHNob3dUaHVtYm5haWwpIHsKKyAgICAgICAgICAgIGZpbmFsIEJpdG1hcCBjYWNoZWRSZXN1bHQgPSBtQ2FjaGUuZ2V0KHVyaSk7CisgICAgICAgICAgICBpZiAoY2FjaGVkUmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpY29uVGh1bWIuc2V0SW1hZ2VCaXRtYXAoY2FjaGVkUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBjYWNoZUhpdCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGljb25UaHVtYi5zZXRJbWFnZURyYXdhYmxlKG51bGwpOworICAgICAgICAgICAgICAgIGZpbmFsIExvYWRlclRhc2sgdGFzayA9IG5ldyBMb2FkZXJUYXNrKHVyaSwgaWNvbk1pbWUsIGljb25UaHVtYiwgbVRodW1iU2l6ZSk7CisgICAgICAgICAgICAgICAgaWNvblRodW1iLnNldFRhZyh0YXNrKTsKKyAgICAgICAgICAgICAgICBQcm92aWRlckV4ZWN1dG9yLmZvckF1dGhvcml0eShkb2NBdXRob3JpdHkpLmV4ZWN1dGUodGFzayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FjaGVIaXQpIHsKKyAgICAgICAgICAgIGljb25NaW1lLnNldEltYWdlRHJhd2FibGUobnVsbCk7CisgICAgICAgICAgICBpY29uTWltZS5zZXRBbHBoYSgwZik7CisgICAgICAgICAgICBpY29uVGh1bWIuc2V0QWxwaGEoMWYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWRkIGEgbWltZSBpY29uIGlmIHRoZSB0aHVtYm5haWwgaXMgYmVpbmcgbG9hZGVkIGluIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAgICAgaWNvblRodW1iLnNldEltYWdlRHJhd2FibGUobnVsbCk7CisgICAgICAgICAgICBpY29uTWltZS5zZXRJbWFnZURyYXdhYmxlKGdldERvY3VtZW50SWNvbigKKyAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQsIGRvY0F1dGhvcml0eSwgRG9jdW1lbnRzQ29udHJhY3QuZ2V0RG9jdW1lbnRJZCh1cmkpLCBtaW1lVHlwZSwgZG9jSWNvbikpOworICAgICAgICAgICAgaWNvbk1pbWUuc2V0QWxwaGEoMWYpOworICAgICAgICAgICAgaWNvblRodW1iLnNldEFscGhhKDBmKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgYSBtaW1lIGljb24gb3IgcGFja2FnZSBpY29uIGZvciBhIGZpbGUuCisgICAgICogQHBhcmFtIGNvbnRleHQKKyAgICAgKiBAcGFyYW0gYXV0aG9yaXR5IFRoZSBhdXRob3JpdHkgc3RyaW5nIG9mIHRoZSBmaWxlLgorICAgICAqIEBwYXJhbSBpZCBUaGUgZG9jdW1lbnQgSUQgb2YgdGhlIGZpbGUuCisgICAgICogQHBhcmFtIG1pbWVUeXBlIFRoZSBtaW1lIHR5cGUgb2YgdGhlIGZpbGUuCisgICAgICogQHBhcmFtIGljb24gVGhlIGN1c3RvbSBpY29uIChpZiBhbnkpIG9mIHRoZSBmaWxlLgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgRHJhd2FibGUgZ2V0RG9jdW1lbnRJY29uKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGF1dGhvcml0eSwgU3RyaW5nIGlkLAorICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlLCBpbnQgaWNvbikgeworICAgICAgICBpZiAoaWNvbiAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gSWNvblV0aWxzLmxvYWRQYWNrYWdlSWNvbihjb250ZXh0LCBhdXRob3JpdHksIGljb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEljb25VdGlscy5sb2FkTWltZUljb24oY29udGV4dCwgbWltZVR5cGUsIGF1dGhvcml0eSwgaWQsIG1Nb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTGlzdERvY3VtZW50SG9sZGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9MaXN0RG9jdW1lbnRIb2xkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGVhMjdiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTGlzdERvY3VtZW50SG9sZGVyLmphdmEKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckludDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvckxvbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OworaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRm9ybWF0dGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Sb290Q3Vyc29yV3JhcHBlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TaGFyZWQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CisKK2ZpbmFsIGNsYXNzIExpc3REb2N1bWVudEhvbGRlciBleHRlbmRzIERvY3VtZW50SG9sZGVyIHsKKyAgICBmaW5hbCBUZXh0VmlldyBtVGl0bGU7CisgICAgZmluYWwgVGV4dFZpZXcgbVN1bW1hcnk7CisgICAgZmluYWwgVGV4dFZpZXcgbURhdGU7CisgICAgZmluYWwgVGV4dFZpZXcgbVNpemU7CisgICAgZmluYWwgSW1hZ2VWaWV3IG1JY29uTWltZTsKKyAgICBmaW5hbCBJbWFnZVZpZXcgbUljb25UaHVtYjsKKyAgICBmaW5hbCBJbWFnZVZpZXcgbUljb25DaGVjazsKKyAgICBmaW5hbCBJY29uSGVscGVyIG1JY29uSGVscGVyOworCisgICAgcHVibGljIExpc3REb2N1bWVudEhvbGRlcihDb250ZXh0IGNvbnRleHQsIFZpZXdHcm91cCBwYXJlbnQsIEljb25IZWxwZXIgaWNvbkhlbHBlcikgeworICAgICAgICBzdXBlcihjb250ZXh0LCBwYXJlbnQsIFIubGF5b3V0Lml0ZW1fZG9jX2xpc3QpOworCisgICAgICAgIG1UaXRsZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC50aXRsZSk7CisgICAgICAgIG1TdW1tYXJ5ID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnN1bW1hcnkpOworICAgICAgICBtRGF0ZSA9IChUZXh0VmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZGF0ZSk7CisgICAgICAgIG1TaXplID0gKFRleHRWaWV3KSBpdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5zaXplKTsKKyAgICAgICAgbUljb25NaW1lID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9taW1lKTsKKyAgICAgICAgbUljb25UaHVtYiA9IChJbWFnZVZpZXcpIGl0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmljb25fdGh1bWIpOworICAgICAgICBtSWNvbkNoZWNrID0gKEltYWdlVmlldykgaXRlbVZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaWNvbl9jaGVjayk7CisKKyAgICAgICAgbUljb25IZWxwZXIgPSBpY29uSGVscGVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdGVkKGJvb2xlYW4gc2VsZWN0ZWQpIHsKKyAgICAgICAgc3VwZXIuc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOworICAgICAgICBmbG9hdCBjaGVja0FscGhhID0gc2VsZWN0ZWQgPyAxZiA6IDBmOworCisgICAgICAgIG1JY29uQ2hlY2suYW5pbWF0ZSgpLmFscGhhKGNoZWNrQWxwaGEpLnN0YXJ0KCk7CisgICAgICAgIG1JY29uTWltZS5hbmltYXRlKCkuYWxwaGEoMWYgLSBjaGVja0FscGhhKS5zdGFydCgpOworICAgICAgICBtSWNvblRodW1iLmFuaW1hdGUoKS5hbHBoYSgxZiAtIGNoZWNrQWxwaGEpLnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZCB0aGlzIHZpZXcgdG8gdGhlIGdpdmVuIGRvY3VtZW50IGZvciBkaXNwbGF5LgorICAgICAqIEBwYXJhbSBjdXJzb3IgUG9pbnRpbmcgdG8gdGhlIGl0ZW0gdG8gYmUgYm91bmQuCisgICAgICogQHBhcmFtIG1vZGVsSWQgVGhlIG1vZGVsIElEIG9mIHRoZSBpdGVtLgorICAgICAqIEBwYXJhbSBzdGF0ZSBDdXJyZW50IGRpc3BsYXkgc3RhdGUuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYmluZChDdXJzb3IgY3Vyc29yLCBTdHJpbmcgbW9kZWxJZCwgU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgdGhpcy5tb2RlbElkID0gbW9kZWxJZDsKKworICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NBdXRob3JpdHkgPSBnZXRDdXJzb3JTdHJpbmcoY3Vyc29yLCBSb290Q3Vyc29yV3JhcHBlci5DT0xVTU5fQVVUSE9SSVRZKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY0lkID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvY01pbWVUeXBlID0gZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NEaXNwbGF5TmFtZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUpOworICAgICAgICBmaW5hbCBsb25nIGRvY0xhc3RNb2RpZmllZCA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTEFTVF9NT0RJRklFRCk7CisgICAgICAgIGZpbmFsIGludCBkb2NJY29uID0gZ2V0Q3Vyc29ySW50KGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0lDT04pOworICAgICAgICBmaW5hbCBpbnQgZG9jRmxhZ3MgPSBnZXRDdXJzb3JJbnQoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRkxBR1MpOworICAgICAgICBmaW5hbCBTdHJpbmcgZG9jU3VtbWFyeSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9TVU1NQVJZKTsKKyAgICAgICAgZmluYWwgbG9uZyBkb2NTaXplID0gZ2V0Q3Vyc29yTG9uZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9TSVpFKTsKKworICAgICAgICBtSWNvbkhlbHBlci5zdG9wTG9hZGluZyhtSWNvblRodW1iKTsKKworICAgICAgICBtSWNvbk1pbWUuYW5pbWF0ZSgpLmNhbmNlbCgpOworICAgICAgICBtSWNvbk1pbWUuc2V0QWxwaGEoMWYpOworICAgICAgICBtSWNvblRodW1iLmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgbUljb25UaHVtYi5zZXRBbHBoYSgwZik7CisKKyAgICAgICAgZmluYWwgVXJpIHVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoZG9jQXV0aG9yaXR5LCBkb2NJZCk7CisgICAgICAgIG1JY29uSGVscGVyLmxvYWRUaHVtYm5haWwodXJpLCBkb2NNaW1lVHlwZSwgZG9jRmxhZ3MsIGRvY0ljb24sIG1JY29uVGh1bWIsIG1JY29uTWltZSk7CisKKyAgICAgICAgbVRpdGxlLnNldFRleHQoZG9jRGlzcGxheU5hbWUpOworICAgICAgICBtVGl0bGUuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworCisgICAgICAgIGlmIChkb2NTdW1tYXJ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TdW1tYXJ5LnNldFRleHQoZG9jU3VtbWFyeSk7CisgICAgICAgICAgICBtU3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU3VtbWFyeS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb2NMYXN0TW9kaWZpZWQgPT0gLTEpIHsKKyAgICAgICAgICAgIG1EYXRlLnNldFRleHQobnVsbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtRGF0ZS5zZXRUZXh0KFNoYXJlZC5mb3JtYXRUaW1lKG1Db250ZXh0LCBkb2NMYXN0TW9kaWZpZWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3RhdGUuc2hvd1NpemUgfHwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMoZG9jTWltZVR5cGUpIHx8IGRvY1NpemUgPT0gLTEpIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TaXplLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIG1TaXplLnNldFRleHQoRm9ybWF0dGVyLmZvcm1hdEZpbGVTaXplKG1Db250ZXh0LCBkb2NTaXplKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBzdXBlci5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgICAgICBmaW5hbCBmbG9hdCBpY29uQWxwaGEgPSBlbmFibGVkID8gMWYgOiAwLjVmOworICAgICAgICBtSWNvbk1pbWUuc2V0QWxwaGEoaWNvbkFscGhhKTsKKyAgICAgICAgbUljb25UaHVtYi5zZXRBbHBoYShpY29uQWxwaGEpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjFkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbC5qYXZhCkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuU09SVF9PUkRFUl9ESVNQTEFZX05BTUU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLlNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuU09SVF9PUkRFUl9TSVpFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yTG9uZzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UHJvdmlkZXJDbGllbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LmFubm90YXRpb24uVmlzaWJsZUZvclRlc3Rpbmc7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkJhc2VBY3Rpdml0eS5TaWJsaW5nUHJvdmlkZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRGlyZWN0b3J5UmVzdWx0OworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkRvY3VtZW50c0FwcGxpY2F0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlJvb3RDdXJzb3JXcmFwcGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3QuTXVsdGlTZWxlY3RNYW5hZ2VyLlNlbGVjdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8qKgorICogVGhlIGRhdGEgbW9kZWwgZm9yIHRoZSBjdXJyZW50IGxvYWRlZCBkaXJlY3RvcnkuCisgKi8KK0BWaXNpYmxlRm9yVGVzdGluZworcHVibGljIGNsYXNzIE1vZGVsIGltcGxlbWVudHMgU2libGluZ1Byb3ZpZGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1vZGVsIjsKKworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUlzTG9hZGluZzsKKyAgICBwcml2YXRlIExpc3Q8VXBkYXRlTGlzdGVuZXI+IG1VcGRhdGVMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBATnVsbGFibGUgcHJpdmF0ZSBDdXJzb3IgbUN1cnNvcjsKKyAgICBwcml2YXRlIGludCBtQ3Vyc29yQ291bnQ7CisgICAgLyoqIE1hcHMgTW9kZWwgSUQgdG8gY3Vyc29yIHBvc2l0aW9ucywgZm9yIGxvb2tpbmcgdXAgaXRlbXMgYnkgTW9kZWwgSUQuICovCisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtUG9zaXRpb25zID0gbmV3IEhhc2hNYXA8PigpOworICAgIC8qKgorICAgICAqIEEgc29ydGVkIGFycmF5IG9mIG1vZGVsIElEcyBmb3IgdGhlIGZpbGVzIGN1cnJlbnRseSBpbiB0aGUgTW9kZWwuICBTb3J0IG9yZGVyIGlzIGRldGVybWluZWQKKyAgICAgKiBieSB7QGxpbmsgI21Tb3J0T3JkZXJ9CisgICAgICovCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbUlkcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIHByaXZhdGUgaW50IG1Tb3J0T3JkZXIgPSBTT1JUX09SREVSX0RJU1BMQVlfTkFNRTsKKworICAgIEBOdWxsYWJsZSBTdHJpbmcgaW5mbzsKKyAgICBATnVsbGFibGUgU3RyaW5nIGVycm9yOworCisgICAgTW9kZWwoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYSBNb2RlbCBJRCBmb3IgYSBjdXJzb3IgZW50cnkgdGhhdCByZWZlcnMgdG8gYSBkb2N1bWVudC4gVGhlIE1vZGVsIElEIGlzIGEgdW5pcXVlCisgICAgICogc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGRvY3VtZW50IHJlZmVycmVkIHRvIGJ5IHRoZSBjdXJzb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYyBBIGN1cnNvciB0aGF0IHJlZmVycyB0byBhIGRvY3VtZW50LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBjcmVhdGVNb2RlbElkKEN1cnNvciBjKSB7CisgICAgICAgIC8vIFRPRE86IE1heWJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBqdXN0IHRoZSBkb2N1bWVudCBJRCwgaW4gY2FzZXMgd2hlcmUgdGhlcmUgaXMgb25seSBvbmUKKyAgICAgICAgLy8gYXV0aG9yaXR5ICh3aGljaCBzaG91bGQgYmUgdGhlIG1ham9yaXR5IG9mIGNhc2VzKS4KKyAgICAgICAgcmV0dXJuIGNyZWF0ZU1vZGVsSWQoCisgICAgICAgICAgICAgICAgZ2V0Q3Vyc29yU3RyaW5nKGMsIFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFkpLAorICAgICAgICAgICAgICAgIGdldEN1cnNvclN0cmluZyhjLCBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYSBNb2RlbCBJRCBmb3IgYSBjdXJzb3IgZW50cnkgdGhhdCByZWZlcnMgdG8gYSBkb2N1bWVudC4gVGhlIE1vZGVsIElEIGlzIGEgdW5pcXVlCisgICAgICogc3RyaW5nIHRoYXQgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGRvY3VtZW50IHJlZmVycmVkIHRvIGJ5IHRoZSBjdXJzb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYyBBIGN1cnNvciB0aGF0IHJlZmVycyB0byBhIGRvY3VtZW50LgorICAgICAqLworICAgIHN0YXRpYyBTdHJpbmcgY3JlYXRlTW9kZWxJZChTdHJpbmcgYXV0aG9yaXR5LCBTdHJpbmcgZG9jSWQpIHsKKyAgICAgICAgcmV0dXJuIGF1dGhvcml0eSArICJ8IiArIGRvY0lkOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBub3RpZnlVcGRhdGVMaXN0ZW5lcnMoKSB7CisgICAgICAgIGZvciAoVXBkYXRlTGlzdGVuZXIgbGlzdGVuZXI6IG1VcGRhdGVMaXN0ZW5lcnMpIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLm9uTW9kZWxVcGRhdGUodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbm90aWZ5VXBkYXRlTGlzdGVuZXJzKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIGZvciAoVXBkYXRlTGlzdGVuZXIgbGlzdGVuZXI6IG1VcGRhdGVMaXN0ZW5lcnMpIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLm9uTW9kZWxVcGRhdGVGYWlsZWQoZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZShEaXJlY3RvcnlSZXN1bHQgcmVzdWx0KSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmkoVEFHLCAiVXBkYXRpbmcgbW9kZWwgd2l0aCBuZXcgcmVzdWx0IHNldC4iKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IgPSBudWxsOworICAgICAgICAgICAgbUN1cnNvckNvdW50ID0gMDsKKyAgICAgICAgICAgIG1JZHMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1Qb3NpdGlvbnMuY2xlYXIoKTsKKyAgICAgICAgICAgIGluZm8gPSBudWxsOworICAgICAgICAgICAgZXJyb3IgPSBudWxsOworICAgICAgICAgICAgbUlzTG9hZGluZyA9IGZhbHNlOworICAgICAgICAgICAgbm90aWZ5VXBkYXRlTGlzdGVuZXJzKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0LmV4Y2VwdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJFcnJvciB3aGlsZSBsb2FkaW5nIGRpcmVjdG9yeSBjb250ZW50cyIsIHJlc3VsdC5leGNlcHRpb24pOworICAgICAgICAgICAgbm90aWZ5VXBkYXRlTGlzdGVuZXJzKHJlc3VsdC5leGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbUN1cnNvciA9IHJlc3VsdC5jdXJzb3I7CisgICAgICAgIG1DdXJzb3JDb3VudCA9IG1DdXJzb3IuZ2V0Q291bnQoKTsKKyAgICAgICAgbVNvcnRPcmRlciA9IHJlc3VsdC5zb3J0T3JkZXI7CisKKyAgICAgICAgdXBkYXRlTW9kZWxEYXRhKCk7CisKKyAgICAgICAgZmluYWwgQnVuZGxlIGV4dHJhcyA9IG1DdXJzb3IuZ2V0RXh0cmFzKCk7CisgICAgICAgIGlmIChleHRyYXMgIT0gbnVsbCkgeworICAgICAgICAgICAgaW5mbyA9IGV4dHJhcy5nZXRTdHJpbmcoRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfSU5GTyk7CisgICAgICAgICAgICBlcnJvciA9IGV4dHJhcy5nZXRTdHJpbmcoRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfRVJST1IpOworICAgICAgICAgICAgbUlzTG9hZGluZyA9IGV4dHJhcy5nZXRCb29sZWFuKERvY3VtZW50c0NvbnRyYWN0LkVYVFJBX0xPQURJTkcsIGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIG5vdGlmeVVwZGF0ZUxpc3RlbmVycygpOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIGludCBnZXRJdGVtQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtQ3Vyc29yQ291bnQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2NhbiBvdmVyIHRoZSBpbmNvbWluZyBjdXJzb3IgZGF0YSwgZ2VuZXJhdGUgTW9kZWwgSURzIGZvciBlYWNoIHJvdywgYW5kIHNvcnQgdGhlIElEcworICAgICAqIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzb3J0IG9yZGVyLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVNb2RlbERhdGEoKSB7CisgICAgICAgIGludFtdIHBvc2l0aW9ucyA9IG5ldyBpbnRbbUN1cnNvckNvdW50XTsKKyAgICAgICAgbUlkcy5jbGVhcigpOworICAgICAgICBTdHJpbmdbXSBzdHJpbmdWYWx1ZXMgPSBuZXcgU3RyaW5nW21DdXJzb3JDb3VudF07CisgICAgICAgIGxvbmdbXSBsb25nVmFsdWVzID0gbnVsbDsKKworICAgICAgICBpZiAobVNvcnRPcmRlciA9PSBTT1JUX09SREVSX0xBU1RfTU9ESUZJRUQgfHwgbVNvcnRPcmRlciA9PSBTT1JUX09SREVSX1NJWkUpIHsKKyAgICAgICAgICAgIGxvbmdWYWx1ZXMgPSBuZXcgbG9uZ1ttQ3Vyc29yQ291bnRdOworICAgICAgICB9CisKKyAgICAgICAgbUN1cnNvci5tb3ZlVG9Qb3NpdGlvbigtMSk7CisgICAgICAgIGZvciAoaW50IHBvcyA9IDA7IHBvcyA8IG1DdXJzb3JDb3VudDsgKytwb3MpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgcG9zaXRpb25zW3Bvc10gPSBwb3M7CisgICAgICAgICAgICBtSWRzLmFkZChjcmVhdGVNb2RlbElkKG1DdXJzb3IpKTsKKworICAgICAgICAgICAgc3dpdGNoKG1Tb3J0T3JkZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfRElTUExBWV9OQU1FOgorICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSBnZXRDdXJzb3JTdHJpbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkaXNwbGF5TmFtZSA9IGdldEN1cnNvclN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVzW3Bvc10gPSBEb2N1bWVudEluZm8uRElSX1BSRUZJWCArIGRpc3BsYXlOYW1lOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nVmFsdWVzW3Bvc10gPSBkaXNwbGF5TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDoKKyAgICAgICAgICAgICAgICAgICAgbG9uZ1ZhbHVlc1twb3NdID0gZ2V0TGFzdE1vZGlmaWVkKG1DdXJzb3IpOworICAgICAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZXNbcG9zXSA9IGdldEN1cnNvclN0cmluZyhtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTT1JUX09SREVSX1NJWkU6CisgICAgICAgICAgICAgICAgICAgIGxvbmdWYWx1ZXNbcG9zXSA9IGdldEN1cnNvckxvbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX1NJWkUpOworICAgICAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZXNbcG9zXSA9IGdldEN1cnNvclN0cmluZyhtQ3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG1Tb3J0T3JkZXIpIHsKKyAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9ESVNQTEFZX05BTUU6CisgICAgICAgICAgICAgICAgYmluYXJ5U29ydChzdHJpbmdWYWx1ZXMsIHBvc2l0aW9ucywgbUlkcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNPUlRfT1JERVJfTEFTVF9NT0RJRklFRDoKKyAgICAgICAgICAgIGNhc2UgU09SVF9PUkRFUl9TSVpFOgorICAgICAgICAgICAgICAgIGJpbmFyeVNvcnQobG9uZ1ZhbHVlcywgc3RyaW5nVmFsdWVzLCBwb3NpdGlvbnMsIG1JZHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gUG9wdWxhdGUgdGhlIHBvc2l0aW9ucy4KKyAgICAgICAgbVBvc2l0aW9ucy5jbGVhcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1DdXJzb3JDb3VudDsgKytpKSB7CisgICAgICAgICAgICBtUG9zaXRpb25zLnB1dChtSWRzLmdldChpKSwgcG9zaXRpb25zW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNvcnRzIG1vZGVsIGRhdGEuIFRha2VzIHRocmVlIGNvbHVtbnMgb2YgaW5kZXgtY29ycmVzcG9uZGVkIGRhdGEuIFRoZSBmaXJzdCBjb2x1bW4gaXMgdGhlCisgICAgICogc29ydCBrZXkuIFJvd3MgYXJlIHNvcnRlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyIG9uIHRoZSBzb3J0IGtleS4gVGhpcyBjb2RlIGlzIGJhc2VkCisgICAgICogb24gVGltU29ydC5iaW5hcnlTb3J0KCkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc29ydEtleSBEYXRhIGlzIHNvcnRlZCBpbiBhc2NlbmRpbmcgYWxwaGFiZXRpY2FsIG9yZGVyLgorICAgICAqIEBwYXJhbSBwb3NpdGlvbnMgQ3Vyc29yIHBvc2l0aW9ucyB0byBiZSBzb3J0ZWQuCisgICAgICogQHBhcmFtIGlkcyBNb2RlbCBJRHMgdG8gYmUgc29ydGVkLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYmluYXJ5U29ydChTdHJpbmdbXSBzb3J0S2V5LCBpbnRbXSBwb3NpdGlvbnMsIExpc3Q8U3RyaW5nPiBpZHMpIHsKKyAgICAgICAgZmluYWwgaW50IGNvdW50ID0gcG9zaXRpb25zLmxlbmd0aDsKKyAgICAgICAgZm9yIChpbnQgc3RhcnQgPSAxOyBzdGFydCA8IGNvdW50OyBzdGFydCsrKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgcGl2b3RQb3NpdGlvbiA9IHBvc2l0aW9uc1tzdGFydF07CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGl2b3RWYWx1ZSA9IHNvcnRLZXlbc3RhcnRdOworICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBpdm90SWQgPSBpZHMuZ2V0KHN0YXJ0KTsKKworICAgICAgICAgICAgaW50IGxlZnQgPSAwOworICAgICAgICAgICAgaW50IHJpZ2h0ID0gc3RhcnQ7CisKKyAgICAgICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxlZnQgKyByaWdodCkgPj4+IDE7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGhzID0gcGl2b3RWYWx1ZTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmhzID0gc29ydEtleVttaWRdOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBjb21wYXJlID0gRG9jdW1lbnRJbmZvLmNvbXBhcmVUb0lnbm9yZUNhc2VOdWxsYWJsZShsaHMsIHJocyk7CisKKyAgICAgICAgICAgICAgICBpZiAoY29tcGFyZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgbiA9IHN0YXJ0IC0gbGVmdDsKKyAgICAgICAgICAgIHN3aXRjaCAobikgeworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW2xlZnQgKyAyXSA9IHBvc2l0aW9uc1tsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHNvcnRLZXlbbGVmdCArIDJdID0gc29ydEtleVtsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIGlkcy5zZXQobGVmdCArIDIsIGlkcy5nZXQobGVmdCArIDEpKTsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1tsZWZ0ICsgMV0gPSBwb3NpdGlvbnNbbGVmdF07CisgICAgICAgICAgICAgICAgICAgIHNvcnRLZXlbbGVmdCArIDFdID0gc29ydEtleVtsZWZ0XTsKKyAgICAgICAgICAgICAgICAgICAgaWRzLnNldChsZWZ0ICsgMSwgaWRzLmdldChsZWZ0KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkocG9zaXRpb25zLCBsZWZ0LCBwb3NpdGlvbnMsIGxlZnQgKyAxLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShzb3J0S2V5LCBsZWZ0LCBzb3J0S2V5LCBsZWZ0ICsgMSwgbik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IC0taSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWRzLnNldChsZWZ0ICsgaSwgaWRzLmdldChsZWZ0ICsgaSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwb3NpdGlvbnNbbGVmdF0gPSBwaXZvdFBvc2l0aW9uOworICAgICAgICAgICAgc29ydEtleVtsZWZ0XSA9IHBpdm90VmFsdWU7CisgICAgICAgICAgICBpZHMuc2V0KGxlZnQsIHBpdm90SWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU29ydHMgbW9kZWwgZGF0YS4gVGFrZXMgZm91ciBjb2x1bW5zIG9mIGluZGV4LWNvcnJlc3BvbmRlZCBkYXRhLiBUaGUgZmlyc3QgY29sdW1uIGlzIHRoZSBzb3J0CisgICAgICoga2V5LCBhbmQgdGhlIHNlY29uZCBpcyBhbiBhcnJheSBvZiBtaW1lIHR5cGVzLiBUaGUgcm93cyBhcmUgZmlyc3QgYnVja2V0ZWQgYnkgbWltZSB0eXBlCisgICAgICogKGRpcmVjdG9yaWVzIHZzIGRvY3VtZW50cykgYW5kIHRoZW4gZWFjaCBidWNrZXQgaXMgc29ydGVkIGluZGVwZW5kZW50bHkgaW4gZGVzY2VuZGluZworICAgICAqIG51bWVyaWNhbCBvcmRlciBvbiB0aGUgc29ydCBrZXkuIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBUaW1Tb3J0LmJpbmFyeVNvcnQoKS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzb3J0S2V5IERhdGEgaXMgc29ydGVkIGluIGRlc2NlbmRpbmcgbnVtZXJpY2FsIG9yZGVyLgorICAgICAqIEBwYXJhbSBtaW1lVHlwZXMgQ29ycmVzcG9uZGluZyBtaW1lIHR5cGVzLiBEaXJlY3RvcmllcyB3aWxsIGJlIHNvcnRlZCBhaGVhZCBvZiBkb2N1bWVudHMuCisgICAgICogQHBhcmFtIHBvc2l0aW9ucyBDdXJzb3IgcG9zaXRpb25zIHRvIGJlIHNvcnRlZC4KKyAgICAgKiBAcGFyYW0gaWRzIE1vZGVsIElEcyB0byBiZSBzb3J0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBiaW5hcnlTb3J0KAorICAgICAgICAgICAgbG9uZ1tdIHNvcnRLZXksIFN0cmluZ1tdIG1pbWVUeXBlcywgaW50W10gcG9zaXRpb25zLCBMaXN0PFN0cmluZz4gaWRzKSB7CisgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHBvc2l0aW9ucy5sZW5ndGg7CisgICAgICAgIGZvciAoaW50IHN0YXJ0ID0gMTsgc3RhcnQgPCBjb3VudDsgc3RhcnQrKykgeworICAgICAgICAgICAgZmluYWwgaW50IHBpdm90UG9zaXRpb24gPSBwb3NpdGlvbnNbc3RhcnRdOworICAgICAgICAgICAgZmluYWwgbG9uZyBwaXZvdFZhbHVlID0gc29ydEtleVtzdGFydF07CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGl2b3RNaW1lID0gbWltZVR5cGVzW3N0YXJ0XTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwaXZvdElkID0gaWRzLmdldChzdGFydCk7CisKKyAgICAgICAgICAgIGludCBsZWZ0ID0gMDsKKyAgICAgICAgICAgIGludCByaWdodCA9IHN0YXJ0OworCisgICAgICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaW50IG1pZCA9ICgobGVmdCArIHJpZ2h0KSA+Pj4gMSk7CisKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBidWNrZXQgYnkgbWltZSB0eXBlLiAgRGlyZWN0b3JpZXMgYWx3YXlzIGdvIGluIGZyb250LgorICAgICAgICAgICAgICAgIGludCBjb21wYXJlID0gMDsKKyAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGxoc0lzRGlyID0gRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMocGl2b3RNaW1lKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHJoc0lzRGlyID0gRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMobWltZVR5cGVzW21pZF0pOworICAgICAgICAgICAgICAgIGlmIChsaHNJc0RpciAmJiAhcmhzSXNEaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGFyZSA9IC0xOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxoc0lzRGlyICYmIHJoc0lzRGlyKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgbGhzID0gcGl2b3RWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyByaHMgPSBzb3J0S2V5W21pZF07CisgICAgICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBudW1lcmljYWwgb3JkZXIuIFRoaXMgbWF0Y2hlcyBsZWdhY3kgYmVoYXZpb3VyLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAvLyB5aWVsZHMgbGFyZ2VzdCBvciBtb3N0IHJlY2VudCBpdGVtcyBvbiB0b3AuCisgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgPSAtTG9uZy5jb21wYXJlKGxocywgcmhzKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiBudW1lcmljYWwgY29tcGFyaXNvbiB5aWVsZHMgYSB0aWUsIHVzZSBkb2N1bWVudCBJRCBhcyBhIHRpZSBicmVha2VyLiAgVGhpcworICAgICAgICAgICAgICAgIC8vIHdpbGwgeWllbGQgc3RhYmxlIHJlc3VsdHMgZXZlbiBpZiBpbmNvbWluZyBpdGVtcyBhcmUgY29udGludWFsbHkgc2h1ZmZsaW5nIGFuZAorICAgICAgICAgICAgICAgIC8vIGhhdmUgaWRlbnRpY2FsIG51bWVyaWNhbCBzb3J0IGtleXMuICBPbmUgY29tbW9uIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJpbyBpcyBzZWVuCisgICAgICAgICAgICAgICAgLy8gd2hlbiBzb3J0aW5nIGEgc2V0IG9mIGFjdGl2ZSBkb3dubG9hZHMgYnkgbW9kIHRpbWUuCisgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb21wYXJlID0gcGl2b3RJZC5jb21wYXJlVG8oaWRzLmdldChtaWQpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY29tcGFyZSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgbiA9IHN0YXJ0IC0gbGVmdDsKKyAgICAgICAgICAgIHN3aXRjaCAobikgeworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW2xlZnQgKyAyXSA9IHBvc2l0aW9uc1tsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIHNvcnRLZXlbbGVmdCArIDJdID0gc29ydEtleVtsZWZ0ICsgMV07CisgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlc1tsZWZ0ICsgMl0gPSBtaW1lVHlwZXNbbGVmdCArIDFdOworICAgICAgICAgICAgICAgICAgICBpZHMuc2V0KGxlZnQgKyAyLCBpZHMuZ2V0KGxlZnQgKyAxKSk7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnNbbGVmdCArIDFdID0gcG9zaXRpb25zW2xlZnRdOworICAgICAgICAgICAgICAgICAgICBzb3J0S2V5W2xlZnQgKyAxXSA9IHNvcnRLZXlbbGVmdF07CisgICAgICAgICAgICAgICAgICAgIG1pbWVUeXBlc1tsZWZ0ICsgMV0gPSBtaW1lVHlwZXNbbGVmdF07CisgICAgICAgICAgICAgICAgICAgIGlkcy5zZXQobGVmdCArIDEsIGlkcy5nZXQobGVmdCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHBvc2l0aW9ucywgbGVmdCwgcG9zaXRpb25zLCBsZWZ0ICsgMSwgbik7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoc29ydEtleSwgbGVmdCwgc29ydEtleSwgbGVmdCArIDEsIG4pOworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KG1pbWVUeXBlcywgbGVmdCwgbWltZVR5cGVzLCBsZWZ0ICsgMSwgbik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBuOyBpID49IDE7IC0taSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWRzLnNldChsZWZ0ICsgaSwgaWRzLmdldChsZWZ0ICsgaSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwb3NpdGlvbnNbbGVmdF0gPSBwaXZvdFBvc2l0aW9uOworICAgICAgICAgICAgc29ydEtleVtsZWZ0XSA9IHBpdm90VmFsdWU7CisgICAgICAgICAgICBtaW1lVHlwZXNbbGVmdF0gPSBwaXZvdE1pbWU7CisgICAgICAgICAgICBpZHMuc2V0KGxlZnQsIHBpdm90SWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBUaW1lc3RhbXAgZm9yIHRoZSBnaXZlbiBkb2N1bWVudC4gU29tZSBkb2NzIChlLmcuIGFjdGl2ZSBkb3dubG9hZHMpIGhhdmUgYSBudWxsCisgICAgICogdGltZXN0YW1wIC0gdGhlc2Ugd2lsbCBiZSByZXBsYWNlZCB3aXRoIE1BWF9MT05HIHNvIHRoYXQgc3VjaCBmaWxlcyBnZXQgc29ydGVkIHRvIHRoZSB0b3AKKyAgICAgKiB3aGVuIHNvcnRpbmcgYnkgZGF0ZS4KKyAgICAgKi8KKyAgICBsb25nIGdldExhc3RNb2RpZmllZChDdXJzb3IgY3Vyc29yKSB7CisgICAgICAgIGxvbmcgbCA9IGdldEN1cnNvckxvbmcobUN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQpOworICAgICAgICByZXR1cm4gKGwgPT0gLTEpID8gTG9uZy5NQVhfVkFMVUUgOiBsOworICAgIH0KKworICAgIEBOdWxsYWJsZSBDdXJzb3IgZ2V0SXRlbShTdHJpbmcgbW9kZWxJZCkgeworICAgICAgICBJbnRlZ2VyIHBvcyA9IG1Qb3NpdGlvbnMuZ2V0KG1vZGVsSWQpOworICAgICAgICBpZiAocG9zICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1DdXJzb3IubW92ZVRvUG9zaXRpb24ocG9zKTsKKyAgICAgICAgICAgIHJldHVybiBtQ3Vyc29yOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIGJvb2xlYW4gaXNFbXB0eSgpIHsKKyAgICAgICAgcmV0dXJuIG1DdXJzb3JDb3VudCA9PSAwOworICAgIH0KKworICAgIGJvb2xlYW4gaXNMb2FkaW5nKCkgeworICAgICAgICByZXR1cm4gbUlzTG9hZGluZzsKKyAgICB9CisKKyAgICBMaXN0PERvY3VtZW50SW5mbz4gZ2V0RG9jdW1lbnRzKFNlbGVjdGlvbiBpdGVtcykgeworICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IChpdGVtcyAhPSBudWxsKSA/IGl0ZW1zLnNpemUoKSA6IDA7CisKKyAgICAgICAgZmluYWwgTGlzdDxEb2N1bWVudEluZm8+IGRvY3MgPSAgbmV3IEFycmF5TGlzdDw+KHNpemUpOworICAgICAgICBmb3IgKFN0cmluZyBtb2RlbElkOiBpdGVtcy5nZXRBbGwoKSkgeworICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IGdldEl0ZW0obW9kZWxJZCk7CisgICAgICAgICAgICBjaGVja05vdE51bGwoY3Vyc29yLCAiQ3Vyc29yIGNhbm5vdCBiZSBudWxsLiIpOworICAgICAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGRvYyA9IERvY3VtZW50SW5mby5mcm9tRGlyZWN0b3J5Q3Vyc29yKGN1cnNvcik7CisgICAgICAgICAgICBkb2NzLmFkZChkb2MpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBkb2NzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDdXJzb3IgZ2V0Q3Vyc29yKCkgeworICAgICAgICBpZiAoTG9vcGVyLm15TG9vcGVyKCkgIT0gTG9vcGVyLmdldE1haW5Mb29wZXIoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2FuJ3QgY2FsbCBnZXRDdXJzb3IgZnJvbSBub24tbWFpbiB0aHJlYWQuIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1DdXJzb3I7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGVsZXRlKFNlbGVjdGlvbiBzZWxlY3RlZCwgRGVsZXRpb25MaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgcmVzb2x2ZXIgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgbmV3IERlbGV0ZUZpbGVzVGFzayhyZXNvbHZlciwgbGlzdGVuZXIpLmV4ZWN1dGUoc2VsZWN0ZWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEEgVGFzayB3aGljaCBjb2xsZWN0cyB0aGUgRG9jdW1lbnRJbmZvIGZvciBkb2N1bWVudHMgdGhhdCBoYXZlIGJlZW4gbWFya2VkIGZvciBkZWxldGlvbiwKKyAgICAgKiBhbmQgYWN0dWFsbHkgZGVsZXRlcyB0aGVtLgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgRGVsZXRlRmlsZXNUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFNlbGVjdGlvbiwgVm9pZCwgVm9pZD4geworICAgICAgICBwcml2YXRlIENvbnRlbnRSZXNvbHZlciBtUmVzb2x2ZXI7CisgICAgICAgIHByaXZhdGUgRGVsZXRpb25MaXN0ZW5lciBtTGlzdGVuZXI7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtSGFkVHJvdWJsZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQHBhcmFtIHJlc29sdmVyIEEgQ29udGVudFJlc29sdmVyIGZvciBwZXJmb3JtaW5nIHRoZSBhY3R1YWwgZmlsZSBkZWxldGlvbnMuCisgICAgICAgICAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIEEgUnVubmFibGUgdGhhdCBpcyBleGVjdXRlZCBpbiB0aGUgZXZlbnQgdGhhdCBvbmUgb3IgbW9yZSBlcnJvcnMKKyAgICAgICAgICogICAgIG9jY3VycmVkIHdoaWxlIGNvcHlpbmcgZmlsZXMuICBFeGVjdXRpb24gd2lsbCBvY2N1ciBvbiB0aGUgVUkgdGhyZWFkLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIERlbGV0ZUZpbGVzVGFzayhDb250ZW50UmVzb2x2ZXIgcmVzb2x2ZXIsIERlbGV0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgICAgIG1SZXNvbHZlciA9IHJlc29sdmVyOworICAgICAgICAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFZvaWQgZG9JbkJhY2tncm91bmQoU2VsZWN0aW9uLi4uIHNlbGVjdGVkKSB7CisgICAgICAgICAgICBMaXN0PERvY3VtZW50SW5mbz4gdG9EZWxldGUgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0b0RlbGV0ZSA9IGdldERvY3VtZW50cyhzZWxlY3RlZFswXSk7CisgICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJldHJpZXZlIGRvY3VtZW50cyBmb3IgZGVsZXRlLiIpOworICAgICAgICAgICAgICAgIG1IYWRUcm91YmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChEb2N1bWVudEluZm8gZG9jIDogdG9EZWxldGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWRvYy5pc0RlbGV0ZVN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgZG9jICsgIiBjb3VsZCBub3QgYmUgZGVsZXRlZC4gIFNraXBwaW5nLi4uIik7CisgICAgICAgICAgICAgICAgICAgIG1IYWRUcm91YmxlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50IGNsaWVudCA9IG51bGw7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJEZWxldGluZzogIiArIGRvYy5kaXNwbGF5TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNsaWVudCA9IERvY3VtZW50c0FwcGxpY2F0aW9uLmFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1SZXNvbHZlciwgZG9jLmRlcml2ZWRVcmkuZ2V0QXV0aG9yaXR5KCkpOworICAgICAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5kZWxldGVEb2N1bWVudChjbGllbnQsIGRvYy5kZXJpdmVkVXJpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gZGVsZXRlICIgKyBkb2MsIGUpOworICAgICAgICAgICAgICAgICAgICBtSGFkVHJvdWJsZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50LnJlbGVhc2VRdWlldGx5KGNsaWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKFZvaWQgXykgeworICAgICAgICAgICAgaWYgKG1IYWRUcm91YmxlKSB7CisgICAgICAgICAgICAgICAgLy8gVE9ETyBzaG93IHdoaWNoIGZpbGVzIGZhaWxlZD8gYi8yMzcyMDEwMworICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vbkVycm9yKCk7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJEZWxldGlvbiB0YXNrIGNvbXBsZXRlZC4gIFNvbWUgZGVsZXRpb25zIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJEZWxldGlvbiB0YXNrIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1MaXN0ZW5lci5vbkNvbXBsZXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBEZWxldGlvbkxpc3RlbmVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCB3aGVuIGRlbGV0aW9uIGhhcyBjb21wbGV0ZWQgKHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbiBlcnJvciBvY2N1cnJlZCkuCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uQ29tcGxldGlvbigpIHt9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCBhdCB0aGUgZW5kIG9mIGEgZGVsZXRpb24gb3BlcmF0aW9uIHRoYXQgcHJvZHVjZWQgb25lIG9yIG1vcmUgZXJyb3JzLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvbkVycm9yKCkge30KKyAgICB9CisKKyAgICB2b2lkIGFkZFVwZGF0ZUxpc3RlbmVyKFVwZGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1VcGRhdGVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50ZXJmYWNlIFVwZGF0ZUxpc3RlbmVyIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxlZCB3aGVuIGEgc3VjY2Vzc2Z1bCB1cGRhdGUgaGFzIG9jY3VycmVkLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIHdoZW4gYW4gdXBkYXRlIGhhcyBiZWVuIGF0dGVtcHRlZCBidXQgZmFpbGVkLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIEFuIG9yZGVyZWQgYXJyYXkgb2YgbW9kZWwgSURzIHJlcHJlc2VudGluZyB0aGUgZG9jdW1lbnRzIGluIHRoZSBtb2RlbC4gSXQgaXMgc29ydGVkCisgICAgICogICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc29ydCBvcmRlciwgd2hpY2ggd2FzIHNldCBieSB0aGUgbGFzdCBtb2RlbCB1cGRhdGUuCisgICAgICovCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpIHsKKyAgICAgICAgcmV0dXJuIG1JZHM7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODc1NmEzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyLmphdmEKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkLkRFQlVHOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TdGF0ZS5NT0RFX0dSSUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlLk1PREVfTElTVDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGUuTU9ERV9VTktOT1dOOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29ySW50OworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nOworCitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LlNldHM7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQWRhcHRzIGZyb20gZGlybGlzdC5Nb2RlbCB0byBzb21ldGhpbmcgUmVjeWNsZXJWaWV3IHVuZGVyc3RhbmRzLgorICovCitmaW5hbCBjbGFzcyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIgZXh0ZW5kcyBEb2N1bWVudHNBZGFwdGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTW9kZWxCYWNrZWREb2N1bWVudHNBZGFwdGVyIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJVEVNX1RZUEVfRE9DVU1FTlQgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElURU1fVFlQRV9ESVJFQ1RPUlkgPSAyOworCisgICAgLy8gUHJvdmlkZXMgYWNjZXNzIHRvIGluZm9ybWF0aW9uIG5lZWRlZCB3aGVuIGNyZWF0aW5nIGFuZCB2aWV3IGhvbGRlcnMuIFRoaXMKKyAgICAvLyBpc24ndCBhbiBpZGVhbCBwYXR0ZXJuIChtb3JlIHRyYW5zaXRpdmUgZGVwZW5kZW5jeSBzdHVmZikgYnV0IGdvb2QgZW5vdWdoIGZvciBub3cuCisgICAgcHJpdmF0ZSBmaW5hbCBFbnZpcm9ubWVudCBtRW52OworICAgIHByaXZhdGUgZmluYWwgSWNvbkhlbHBlciBtSWNvbkhlbHBlcjsgIC8vIGEgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IG9mIHRoZSBob2xkZXJzLgorCisgICAgLyoqCisgICAgICogQW4gb3JkZXJlZCBsaXN0IG9mIG1vZGVsIElEcy4gVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBkZXRlcm1pbmVzIHdoYXQgc2hvd3MgdXAgaW4KKyAgICAgKiB0aGUgVUksIGFuZCB3aGVyZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtTW9kZWxJZHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgIC8vIExpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlIGJlZW4gZGVsZXRlZC4gU29tZSB0cmFuc2llbnQgZGlyZWN0b3J5IHVwZGF0ZXMKKyAgICAvLyBtYXkgaGFwcGVuIHdoaWxlIGZpbGVzIGFyZSBiZWluZyBkZWxldGVkLiBEdXJpbmcgdGhpcyB0aW1lIHdlIGRvbid0CisgICAgLy8gd2FudCBvbmNlLWhpZGRlbiBmaWxlcyB0byBiZSByZS1zaG93bi4gV2Ugb25seSByZW1vdmUKKyAgICAvLyBpdGVtcyBmcm9tIHRoaXMgbGlzdCB3aGVuIHdlIGdldCBhIG1vZGVsIHVwZGF0ZSB3aGVyZSB0aGUgbW9kZWwKKyAgICAvLyBkb2VzIG5vdCBjb250YWluIGEgY29ycmVzcG9uZGluZyBpZC4gVGhpcyBlbnN1cmVzIGhpZGRlbiBlbnRyaWVzCisgICAgLy8gZG9uJ3QgbW9tZW50YXJpbHkgcmUtYXBwZWFyIGlmIHdlIGdldCBpbnRlcm1lZGlhdGUgdXBkYXRlcyBmcm9tCisgICAgLy8gdGhlIGZpbGUgc3lzdGVtLgorICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbUhpZGRlbklkcyA9IG5ldyBIYXNoU2V0PD4oKTsKKworICAgIHB1YmxpYyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIoRW52aXJvbm1lbnQgZW52LCBJY29uSGVscGVyIGljb25IZWxwZXIpIHsKKyAgICAgICAgbUVudiA9IGVudjsKKyAgICAgICAgbUljb25IZWxwZXIgPSBpY29uSGVscGVyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7CisgICAgICAgIERvY3VtZW50SG9sZGVyIGhvbGRlciA9IG51bGw7CisgICAgICAgIGZpbmFsIFN0YXRlIHN0YXRlID0gbUVudi5nZXREaXNwbGF5U3RhdGUoKTsKKyAgICAgICAgc3dpdGNoIChzdGF0ZS5kZXJpdmVkTW9kZSkgeworICAgICAgICAgICAgY2FzZSBNT0RFX0dSSUQ6CisgICAgICAgICAgICAgICAgc3dpdGNoICh2aWV3VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIElURU1fVFlQRV9ESVJFQ1RPUlk6CisgICAgICAgICAgICAgICAgICAgICAgICBob2xkZXIgPSBuZXcgR3JpZERpcmVjdG9yeUhvbGRlcihtRW52LmdldENvbnRleHQoKSwgcGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIElURU1fVFlQRV9ET0NVTUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlciA9IG5ldyBHcmlkRG9jdW1lbnRIb2xkZXIobUVudi5nZXRDb250ZXh0KCksIHBhcmVudCwgbUljb25IZWxwZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgdHlwZS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1PREVfTElTVDoKKyAgICAgICAgICAgICAgICBob2xkZXIgPSBuZXcgTGlzdERvY3VtZW50SG9sZGVyKG1FbnYuZ2V0Q29udGV4dCgpLCBwYXJlbnQsIG1JY29uSGVscGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTU9ERV9VTktOT1dOOgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCBsYXlvdXQgbW9kZS4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FbnYuaW5pdERvY3VtZW50SG9sZGVyKGhvbGRlcik7CisgICAgICAgIHJldHVybiBob2xkZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25CaW5kVmlld0hvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIsIGludCBwb3NpdGlvbiwgTGlzdDxPYmplY3Q+IHBheWxvYWQpIHsKKyAgICAgICAgaWYgKHBheWxvYWQuY29udGFpbnMoU0VMRUNUSU9OX0NIQU5HRURfTUFSS0VSKSkgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzZWxlY3RlZCA9IG1FbnYuaXNTZWxlY3RlZChtTW9kZWxJZHMuZ2V0KHBvc2l0aW9uKSk7CisgICAgICAgICAgICBob2xkZXIuc2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb25CaW5kVmlld0hvbGRlcihob2xkZXIsIHBvc2l0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgU3RyaW5nIG1vZGVsSWQgPSBtTW9kZWxJZHMuZ2V0KHBvc2l0aW9uKTsKKyAgICAgICAgQ3Vyc29yIGN1cnNvciA9IG1FbnYuZ2V0TW9kZWwoKS5nZXRJdGVtKG1vZGVsSWQpOworICAgICAgICBob2xkZXIuYmluZChjdXJzb3IsIG1vZGVsSWQsIG1FbnYuZ2V0RGlzcGxheVN0YXRlKCkpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBkb2NNaW1lVHlwZSA9IGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUpOworICAgICAgICBmaW5hbCBpbnQgZG9jRmxhZ3MgPSBnZXRDdXJzb3JJbnQoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fRkxBR1MpOworCisgICAgICAgIGhvbGRlci5zZXRTZWxlY3RlZChtRW52LmlzU2VsZWN0ZWQobW9kZWxJZCkpOworICAgICAgICBob2xkZXIuc2V0RW5hYmxlZChtRW52LmlzRG9jdW1lbnRFbmFibGVkKGRvY01pbWVUeXBlLCBkb2NGbGFncykpOworCisgICAgICAgIG1FbnYub25CaW5kRG9jdW1lbnRIb2xkZXIoaG9sZGVyLCBjdXJzb3IpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeworICAgICAgICByZXR1cm4gbU1vZGVsSWRzLnNpemUoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7CisgICAgICAgIGlmIChERUJVRyAmJiBtSGlkZGVuSWRzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIlVwZGF0aW5nIG1vZGVsIHdpdGggaGlkZGVuIGlkczogIiArIG1IaWRkZW5JZHMpOworICAgICAgICB9CisKKyAgICAgICAgTGlzdDxTdHJpbmc+IG1vZGVsSWRzID0gbW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgbU1vZGVsSWRzID0gbmV3IEFycmF5TGlzdDw+KG1vZGVsSWRzLnNpemUoKSk7CisgICAgICAgIGZvciAoU3RyaW5nIGlkIDogbW9kZWxJZHMpIHsKKyAgICAgICAgICAgIGlmICghbUhpZGRlbklkcy5jb250YWlucyhpZCkpIHsKKyAgICAgICAgICAgICAgICBtTW9kZWxJZHMuYWRkKGlkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJPbWl0dGluZyBoaWRkZW4gaWQgZnJvbSBtb2RlbCBkdXJpbmcgdXBkYXRlOiAiICsgaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWxseSByZW1vdmUgYW55IGhpZGRlbiBpZHMgdGhhdCBhcmVuJ3QgcHJlc2VudCBpbiB0aGUgbW9kZWwuCisgICAgICAgIC8vIFRoaXMgYXNzdW1lcyB0aGF0IG1vZGVsIHVwZGF0ZXMgcmVwcmVzZW50IGEgY29tcGxldGUgc2V0IG9mIGZpbGVzLgorICAgICAgICBtSGlkZGVuSWRzLnJldGFpbkFsbChtTW9kZWxJZHMpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGVGYWlsZWQoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgTG9nLncoVEFHLCAiTW9kZWwgdXBkYXRlIGZhaWxlZC4iLCBlKTsKKyAgICAgICAgbU1vZGVsSWRzLmNsZWFyKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNb2RlbElkKGludCBhZGFwdGVyUG9zaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkcy5nZXQoYWRhcHRlclBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRlKFN0cmluZy4uLiBpZHMpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIaWRpbmcgaWRzOiAiICsgaWRzKTsKKyAgICAgICAgU2V0PFN0cmluZz4gdG9IaWRlID0gU2V0cy5uZXdIYXNoU2V0KGlkcyk7CisKKyAgICAgICAgLy8gUHJvY2VlZCBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgbGlzdCBvZiBpdGVtcywgYmVjYXVzZSBlYWNoIHJlbW92YWwgY2F1c2VzIHRoZQorICAgICAgICAvLyBwb3NpdGlvbnMgb2YgYWxsIHN1YnNlcXVlbnQgaXRlbXMgdG8gY2hhbmdlLgorICAgICAgICBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGRlbkl0ZW1zID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1Nb2RlbElkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICAgICAgU3RyaW5nIGlkID0gbU1vZGVsSWRzLmdldChpKTsKKyAgICAgICAgICAgIGlmICh0b0hpZGUuY29udGFpbnMoaWQpKSB7CisgICAgICAgICAgICAgICAgbUhpZGRlbklkcy5hZGQoaWQpOworICAgICAgICAgICAgICAgIGhpZGRlbkl0ZW1zLnB1dChpLCBtTW9kZWxJZHMucmVtb3ZlKGkpKTsKKyAgICAgICAgICAgICAgICBub3RpZnlJdGVtUmVtb3ZlZChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBoaWRkZW5JdGVtczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB1bmhpZGUoU3BhcnNlQXJyYXk8U3RyaW5nPiBpZHMpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJVbi1pZGluZyBpZHM6ICIgKyBpZHMpOworCisgICAgICAgIC8vIEFuIEFycmF5TGlzdCBjYW4gc2hyaW5rIGF0IHJ1bnRpbWUuLi5hbmQgaW4gZmFjdAorICAgICAgICAvLyBpdCBkb2VzIHdoZW4gd2UgY2xlYXIgaXQgY29tcGxldGVseS4KKyAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW4ndCBjYWxsIGFkZChwb3MsIGlkKSB3aXRob3V0CisgICAgICAgIC8vIGZpcnN0IGNoZWNraW5nIHRoZSBsaXN0IHNpemUuCisgICAgICAgIExpc3Q8U3RyaW5nPiBvbGRJZHMgPSBtTW9kZWxJZHM7CisgICAgICAgIG1Nb2RlbElkcyA9IG5ldyBBcnJheUxpc3Q8PihvbGRJZHMuc2l6ZSgpICsgaWRzLnNpemUoKSk7CisgICAgICAgIG1Nb2RlbElkcy5hZGRBbGwob2xkSWRzKTsKKworICAgICAgICAvLyBGaW5hbGx5IGluc2VydCB0aGUgdW5oaWRkZW4gaXRlbXMuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcG9zID0gaWRzLmtleUF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGlkID0gaWRzLmdldChwb3MpOworICAgICAgICAgICAgbUhpZGRlbklkcy5yZW1vdmUoaWQpOworICAgICAgICAgICAgbU1vZGVsSWRzLmFkZChwb3MsIGlkKTsKKyAgICAgICAgICAgIG5vdGlmeUl0ZW1JbnNlcnRlZChwb3MpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldEl0ZW1WaWV3VHlwZShpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGlzRGlyZWN0b3J5KG1FbnYuZ2V0TW9kZWwoKSwgcG9zaXRpb24pCisgICAgICAgICAgICAgICAgPyBJVEVNX1RZUEVfRElSRUNUT1JZCisgICAgICAgICAgICAgICAgOiBJVEVNX1RZUEVfRE9DVU1FTlQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25JdGVtU2VsZWN0aW9uQ2hhbmdlZChTdHJpbmcgaWQpIHsKKyAgICAgICAgaW50IHBvc2l0aW9uID0gbU1vZGVsSWRzLmluZGV4T2YoaWQpOworCisgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7CisgICAgICAgICAgICBub3RpZnlJdGVtQ2hhbmdlZChwb3NpdGlvbiwgU0VMRUNUSU9OX0NIQU5HRURfTUFSS0VSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIkl0ZW0gY2hhbmdlIG5vdGlmaWNhdGlvbiByZWNlaXZlZCBmb3IgdW5rbm93biBpdGVtOiAiICsgaWQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXIuamF2YQppbmRleCA2NWUxYTI4Li5kODY4ZmI0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXIuamF2YQpAQCAtMjgsMTAgKzI4LDYgQEAKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5WaXNpYmxlRm9yVGVzdGluZzsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkdyaWRMYXlvdXRNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3LkFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXcuQWRhcHRlckRhdGFPYnNlcnZlcjsKLWltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldy5MYXlvdXRNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3Lk9uU2Nyb2xsTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheTsKQEAgLTQ2LDggKzQyLDE0IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUjsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgogICogTXVsdGlTZWxlY3RNYW5hZ2VyIHByb3ZpZGVzIHN1cHBvcnQgdHJhZGl0aW9uYWwgbXVsdGktaXRlbSBzZWxlY3Rpb24gc3VwcG9ydCB0byBSZWN5Y2xlclZpZXcuCkBAIC02NiwyOCArNjgsMjMgQEAKIAogICAgIHByaXZhdGUgZmluYWwgU2VsZWN0aW9uIG1TZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7CiAKLSAgICAvLyBPbmx5IGNyZWF0ZWQgd2hlbiBzZWxlY3Rpb24gaXMgY2xlYXJlZC4KLSAgICBwcml2YXRlIFNlbGVjdGlvbiBtSW50ZXJtZWRpYXRlU2VsZWN0aW9uOwotCi0gICAgcHJpdmF0ZSBSYW5nZSBtUmFuZ2VyOwotICAgIHByaXZhdGUgU2VsZWN0aW9uRW52aXJvbm1lbnQgbUVudmlyb25tZW50OwotCisgICAgcHJpdmF0ZSBmaW5hbCBTZWxlY3Rpb25FbnZpcm9ubWVudCBtRW52aXJvbm1lbnQ7CisgICAgcHJpdmF0ZSBmaW5hbCBEb2N1bWVudHNBZGFwdGVyIG1BZGFwdGVyOwogICAgIHByaXZhdGUgZmluYWwgTGlzdDxNdWx0aVNlbGVjdE1hbmFnZXIuQ2FsbGJhY2s+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlMaXN0PD4oMSk7CiAKLSAgICBwcml2YXRlIEFkYXB0ZXI8Pz4gbUFkYXB0ZXI7CisgICAgcHJpdmF0ZSBSYW5nZSBtUmFuZ2VyOwogICAgIHByaXZhdGUgYm9vbGVhbiBtU2luZ2xlU2VsZWN0OwogCi0gICAgLy8gUGF5bG9hZHMgZm9yIG5vdGlmeUl0ZW1DaGFuZ2UgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZWxlY3Rpb24gYW5kIG90aGVyIGV2ZW50cy4KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRUxFQ1RJT05fQ0hBTkdFRF9NQVJLRVIgPSAiU2VsZWN0aW9uLUNoYW5nZWQiOwotCiAgICAgQE51bGxhYmxlIHByaXZhdGUgQmFuZENvbnRyb2xsZXIgbUJhbmRNYW5hZ2VyOwogCisKICAgICAvKioKICAgICAgKiBAcGFyYW0gcmVjeWNsZXJWaWV3CiAgICAgICogQHBhcmFtIG1vZGUgU2VsZWN0aW9uIG1vZGUKICAgICAgKi8KLSAgICBwdWJsaWMgTXVsdGlTZWxlY3RNYW5hZ2VyKGZpbmFsIFJlY3ljbGVyVmlldyByZWN5Y2xlclZpZXcsIGludCBtb2RlKSB7Ci0gICAgICAgIHRoaXMocmVjeWNsZXJWaWV3LmdldEFkYXB0ZXIoKSwgbmV3IFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChyZWN5Y2xlclZpZXcpLCBtb2RlKTsKKyAgICBwdWJsaWMgTXVsdGlTZWxlY3RNYW5hZ2VyKAorICAgICAgICAgICAgZmluYWwgUmVjeWNsZXJWaWV3IHJlY3ljbGVyVmlldywgRG9jdW1lbnRzQWRhcHRlciBhZGFwdGVyLCBpbnQgbW9kZSkgeworICAgICAgICB0aGlzKG5ldyBSdW50aW1lU2VsZWN0aW9uRW52aXJvbm1lbnQocmVjeWNsZXJWaWV3KSwgYWRhcHRlciwgbW9kZSk7CiAKICAgICAgICAgaWYgKG1vZGUgPT0gTU9ERV9NVUxUSVBMRSkgewogICAgICAgICAgICAgbUJhbmRNYW5hZ2VyID0gbmV3IEJhbmRDb250cm9sbGVyKCk7CkBAIC0xMzgsMzMgKzEzNSw0MiBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgTXVsdGlTZWxlY3RNYW5hZ2VyKEFkYXB0ZXI8Pz4gYWRhcHRlciwgU2VsZWN0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIGludCBtb2RlKSB7Ci0gICAgICAgIG1BZGFwdGVyID0gY2hlY2tOb3ROdWxsKGFkYXB0ZXIsICInYWRhcHRlcicgY2Fubm90IGJlIG51bGwuIik7CisgICAgTXVsdGlTZWxlY3RNYW5hZ2VyKFNlbGVjdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBEb2N1bWVudHNBZGFwdGVyIGFkYXB0ZXIsIGludCBtb2RlKSB7CiAgICAgICAgIG1FbnZpcm9ubWVudCA9IGNoZWNrTm90TnVsbChlbnZpcm9ubWVudCwgIidlbnZpcm9ubWVudCcgY2Fubm90IGJlIG51bGwuIik7CisgICAgICAgIG1BZGFwdGVyID0gY2hlY2tOb3ROdWxsKGFkYXB0ZXIsICInYWRhcHRlcicgY2Fubm90IGJlIG51bGwuIik7CiAgICAgICAgIG1TaW5nbGVTZWxlY3QgPSBtb2RlID09IE1PREVfU0lOR0xFOwogCiAgICAgICAgIG1BZGFwdGVyLnJlZ2lzdGVyQWRhcHRlckRhdGFPYnNlcnZlcigKLSAgICAgICAgICAgICAgICBuZXcgQWRhcHRlckRhdGFPYnNlcnZlcigpIHsKKyAgICAgICAgICAgICAgICBuZXcgUmVjeWNsZXJWaWV3LkFkYXB0ZXJEYXRhT2JzZXJ2ZXIoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbU1vZGVsSWRzOwogCiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZWQoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBUaGlzIGlzIGNhdXNpbmcgYi8yMjc2NTgxMgogICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbi5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgbU1vZGVsSWRzID0gbUFkYXB0ZXIuZ2V0TW9kZWxJZHMoKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZUNoYW5nZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQsIE9iamVjdCBwYXlsb2FkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24sIGludCBpdGVtQ291bnQsIE9iamVjdCBwYXlsb2FkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBjaGFuZ2UgaW4gcG9zaXRpb24uIElnbm9yaW5nLgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVJhbmdlSW5zZXJ0ZWQoaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3Rpb24uZXhwYW5kKHBvc2l0aW9uU3RhcnQsIGl0ZW1Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVJhbmdlSW5zZXJ0ZWQoaW50IHN0YXJ0UG9zaXRpb24sIGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3Rpb24uY2FuY2VsUHJvdmlzaW9uYWxTZWxlY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZVJlbW92ZWQoaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TZWxlY3Rpb24uY29sbGFwc2UocG9zaXRpb25TdGFydCwgaXRlbUNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25JdGVtUmFuZ2VSZW1vdmVkKGludCBzdGFydFBvc2l0aW9uLCBpbnQgaXRlbUNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1N0YXRlKHN0YXJ0UG9zaXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1N0YXRlKGl0ZW1Db3VudCA+IDApOworCisgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uLmNhbmNlbFByb3Zpc2lvbmFsU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgYW55IGRpc2FwcGVhcmVkIElEcyBmcm9tIHRoZSBzZWxlY3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uLmludGVyc2VjdChtTW9kZWxJZHMpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMTQsMzYgKzIyMCwyMiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIENhdXNlcyBpdGVtIGF0IHtAY29kZSBwb3NpdGlvbn0gaW4gYWRhcHRlciB0byBiZSBzZWxlY3RlZC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwb3NpdGlvbiBBZGFwdGVyIHBvc2l0aW9uCi0gICAgICogQHBhcmFtIHNlbGVjdGVkCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgdGhlIGl0ZW0gY2hhbmdlZC4KLSAgICAgKi8KLSAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBwdWJsaWMgYm9vbGVhbiBzZXRJdGVtU2VsZWN0ZWQoaW50IHBvc2l0aW9uLCBib29sZWFuIHNlbGVjdGVkKSB7Ci0gICAgICAgIGlmIChtU2luZ2xlU2VsZWN0ICYmIGhhc1NlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBjbGVhclNlbGVjdGlvblF1aWV0bHkoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc2V0SXRlbXNTZWxlY3RlZChwb3NpdGlvbiwgMSwgc2VsZWN0ZWQpOwotICAgIH0KLQotICAgIC8qKgogICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBzcGVjaWZpZWQgaXRlbXMuIE5vdGUgdGhhdCB0aGUgY2FsbGJhY2sgd2lsbCBOT1QKICAgICAgKiBiZSBjb25zdWx0ZWQgdG8gc2VlIGlmIGFuIGl0ZW0gY2FuIGJlIHNlbGVjdGVkLgogICAgICAqCi0gICAgICogQHJldHVybiBUcnVlIGlmIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYW55IG9mIHRoZSBpdGVtcyBjaGFuZ2VkLgorICAgICAqIEBwYXJhbSBpZHMKKyAgICAgKiBAcGFyYW0gc2VsZWN0ZWQKKyAgICAgKiBAcmV0dXJuCiAgICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc2V0SXRlbXNTZWxlY3RlZChpbnQgcG9zaXRpb24sIGludCBsZW5ndGgsIGJvb2xlYW4gc2VsZWN0ZWQpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRJdGVtc1NlbGVjdGVkKEl0ZXJhYmxlPFN0cmluZz4gaWRzLCBib29sZWFuIHNlbGVjdGVkKSB7CiAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gcG9zaXRpb247IGkgPCBwb3NpdGlvbiArIGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBib29sZWFuIGl0ZW1DaGFuZ2VkID0gc2VsZWN0ZWQgPyBtU2VsZWN0aW9uLmFkZChpKSA6IG1TZWxlY3Rpb24ucmVtb3ZlKGkpOworICAgICAgICBmb3IgKFN0cmluZyBpZDogaWRzKSB7CisgICAgICAgICAgICBib29sZWFuIGl0ZW1DaGFuZ2VkID0gc2VsZWN0ZWQgPyBtU2VsZWN0aW9uLmFkZChpZCkgOiBtU2VsZWN0aW9uLnJlbW92ZShpZCk7CiAgICAgICAgICAgICBpZiAoaXRlbUNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKGksIHNlbGVjdGVkKTsKKyAgICAgICAgICAgICAgICBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKGlkLCBzZWxlY3RlZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IGl0ZW1DaGFuZ2VkOwogICAgICAgICB9Ci0KICAgICAgICAgbm90aWZ5U2VsZWN0aW9uQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC0yNzEsMTUgKzI2MywxMiBAQAogICAgICAgICBpZiAoIWhhc1NlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1JbnRlcm1lZGlhdGVTZWxlY3Rpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgbUludGVybWVkaWF0ZVNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAgICBnZXRTZWxlY3Rpb24obUludGVybWVkaWF0ZVNlbGVjdGlvbik7CisKKyAgICAgICAgU2VsZWN0aW9uIGludGVybWVkaWF0ZVNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihuZXcgU2VsZWN0aW9uKCkpOwogICAgICAgICBtU2VsZWN0aW9uLmNsZWFyKCk7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtSW50ZXJtZWRpYXRlU2VsZWN0aW9uLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBtSW50ZXJtZWRpYXRlU2VsZWN0aW9uLmdldChpKTsKLSAgICAgICAgICAgIG5vdGlmeUl0ZW1TdGF0ZUNoYW5nZWQocG9zaXRpb24sIGZhbHNlKTsKKyAgICAgICAgZm9yIChTdHJpbmcgaWQ6IGludGVybWVkaWF0ZVNlbGVjdGlvbi5nZXRBbGwoKSkgeworICAgICAgICAgICAgbm90aWZ5SXRlbVN0YXRlQ2hhbmdlZChpZCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMDEsNyArMjkwLDkgQEAKICAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBtb3VzZSBjbGljayBvbiBhbiBpdGVtLCBzdGFydCBzZWxlY3Rpb24gbW9kZS4KICAgICAgICAgICAgIC8vIFRPRE86ICAmJiBpbnB1dC5pc1ByaW1hcnlCdXR0b25QcmVzc2VkKCksIGJ1dCBpdCBpcyByZXR1cm5pbmcgZmFsc2UuCiAgICAgICAgICAgICBpZiAoaW5wdXQuaXNPdmVySXRlbSgpICYmIGlucHV0LmlzTW91c2VFdmVudCgpKSB7Ci0gICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uKGlucHV0LmdldEl0ZW1Qb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBpbnB1dC5nZXRJdGVtUG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB0b2dnbGVTZWxlY3Rpb24ocG9zaXRpb24pOworICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlQmVnaW4ocG9zaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zMzAsMjkgKzMyMSw0MiBAQAogICAgICAgICAgICAgLy8gaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXMgY2hhbmdlZC4KICAgICAgICAgICAgIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRvZ2dsZVNlbGVjdGlvbihpbnB1dC5nZXRJdGVtUG9zaXRpb24oKSk7CisgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBpbnB1dC5nZXRJdGVtUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHRvZ2dsZVNlbGVjdGlvbihwb3NpdGlvbik7CisgICAgICAgICAgICBzZXRTZWxlY3Rpb25SYW5nZUJlZ2luKHBvc2l0aW9uKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgotICAgICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBhdCBwb3NpdGlvbi4gSWYgYW4gaXRlbSBkb2VzIGVuZCB1cCBzZWxlY3RlZAotICAgICAqIGEgbmV3IFJhbmdlciAocmFuZ2Ugc2VsZWN0aW9uIG1hbmFnZXIpIGF0IHRoYXQgcG9pbnQgaXMgY3JlYXRlZC4KKyAgICAgKiBBIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgdG9nZ2xpbmcgc2VsZWN0aW9uIGJ5IGFkYXB0ZXIgcG9zaXRpb24uCiAgICAgICoKLSAgICAgKiBAcGFyYW0gcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gcG9zaXRpb24gQWRhcHRlciBwb3NpdGlvbiB0byB0b2dnbGUuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgdG9nZ2xlU2VsZWN0aW9uKGludCBwb3NpdGlvbikgeworICAgIHByaXZhdGUgdm9pZCB0b2dnbGVTZWxlY3Rpb24oaW50IHBvc2l0aW9uKSB7CiAgICAgICAgIC8vIFBvc2l0aW9uIG1heSBiZSBzcGVjaWFsICJubyBwb3NpdGlvbiIgZHVyaW5nIGNlcnRhaW4KICAgICAgICAgLy8gdHJhbnNpdGlvbmFsIHBoYXNlcy4gSWYgc28sIHNraXAgaGFuZGxpbmcgb2YgdGhlIGV2ZW50LgogICAgICAgICBpZiAocG9zaXRpb24gPT0gUmVjeWNsZXJWaWV3Lk5PX1BPU0lUSU9OKSB7CiAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIklnbm9yaW5nIHRvZ2dsZSBmb3IgZWxlbWVudCB3aXRoIG5vIHBvc2l0aW9uLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIFN0cmluZyBpZCA9IG1BZGFwdGVyLmdldE1vZGVsSWQocG9zaXRpb24pOworICAgICAgICBpZiAoaWQgIT0gbnVsbCkgeworICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uKGlkKTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIC8qKgorICAgICAqIFRvZ2dsZXMgc2VsZWN0aW9uIG9uIHRoZSBpdGVtIHdpdGggdGhlIGdpdmVuIG1vZGVsIElELgorICAgICAqCisgICAgICogQHBhcmFtIG1vZGVsSWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0b2dnbGVTZWxlY3Rpb24oU3RyaW5nIG1vZGVsSWQpIHsKKyAgICAgICAgY2hlY2tOb3ROdWxsKG1vZGVsSWQpOwogICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1TZWxlY3Rpb24uY29udGFpbnMocG9zaXRpb24pKSB7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gYXR0ZW1wdERlc2VsZWN0KHBvc2l0aW9uKTsKKyAgICAgICAgaWYgKG1TZWxlY3Rpb24uY29udGFpbnMobW9kZWxJZCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBhdHRlbXB0RGVzZWxlY3QobW9kZWxJZCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sZWFuIGNhblNlbGVjdCA9IG5vdGlmeUJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShwb3NpdGlvbiwgdHJ1ZSk7CisgICAgICAgICAgICBib29sZWFuIGNhblNlbGVjdCA9IG5vdGlmeUJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShtb2RlbElkLCB0cnVlKTsKICAgICAgICAgICAgIGlmICghY2FuU2VsZWN0KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtMzY1LDggKzM2OSw3IEBACiAgICAgICAgICAgICAvLyBhbiBpdGVtIHRvIGJlIHNlbGVjdGVkLgogICAgICAgICAgICAgLy8gQnkgcmVjcmVhdGluZyBSYW5nZXIgYXQgdGhpcyBwb2ludCwgd2UgYWxsb3cgdGhlIHVzZXIgdG8gY3JlYXRlCiAgICAgICAgICAgICAvLyBtdWx0aXBsZSBzZXBhcmF0ZSBjb250aWd1b3VzIHJhbmdlcyB3aXRoIFNISUZUK0NsaWNrICYgQ2xpY2suCi0gICAgICAgICAgICBzZWxlY3RBbmROb3RpZnkocG9zaXRpb24pOwotICAgICAgICAgICAgc2V0U2VsZWN0aW9uRm9jdXNCZWdpbihwb3NpdGlvbik7CisgICAgICAgICAgICBzZWxlY3RBbmROb3RpZnkobW9kZWxJZCk7CiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0zODMsNTcgKzM4Niw2OCBAQAogICAgICAqIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHtAY29kZSBwb3NpdGlvbn0gaXMgbm90IGFscmVhZHkgYmUgc2VsZWN0ZWQKICAgICAgKiBAcGFyYW0gcG9zaXRpb24KICAgICAgKi8KLSAgICB2b2lkIHNldFNlbGVjdGlvbkZvY3VzQmVnaW4oaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIGNoZWNrU3RhdGUobVNlbGVjdGlvbi5jb250YWlucyhwb3NpdGlvbikpOwotICAgICAgICBtUmFuZ2VyID0gbmV3IFJhbmdlKHBvc2l0aW9uKTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblJhbmdlQmVnaW4oaW50IHBvc2l0aW9uKSB7CisgICAgICAgIGlmIChwb3NpdGlvbiA9PSBSZWN5Y2xlclZpZXcuTk9fUE9TSVRJT04pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU2VsZWN0aW9uLmNvbnRhaW5zKG1BZGFwdGVyLmdldE1vZGVsSWQocG9zaXRpb24pKSkgeworICAgICAgICAgICAgbVJhbmdlciA9IG5ldyBSYW5nZShwb3NpdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUcnkgdG8gc2VsZWN0IGFsbCBlbGVtZW50cyBpbiByYW5nZS4gTm90IHRoYXQgY2FsbGJhY2tzIGNhbiBjYW5jZWwgc2VsZWN0aW9uCi0gICAgICogb2Ygc3BlY2lmaWMgaXRlbXMsIHNvIHNvbWUgb3IgZXZlbiBhbGwgaXRlbXMgbWF5IG5vdCByZWZsZWN0IHRoZSBkZXNpcmVkCi0gICAgICogc3RhdGUgYWZ0ZXIgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZS4KKyAgICAgKiBUcnkgdG8gc2V0IHNlbGVjdGlvbiBzdGF0ZSBmb3IgYWxsIGVsZW1lbnRzIGluIHJhbmdlLiBOb3QgdGhhdCBjYWxsYmFja3MgY2FuIGNhbmNlbCBzZWxlY3Rpb24KKyAgICAgKiBvZiBzcGVjaWZpYyBpdGVtcywgc28gc29tZSBvciBldmVuIGFsbCBpdGVtcyBtYXkgbm90IHJlZmxlY3QgdGhlIGRlc2lyZWQgc3RhdGUgYWZ0ZXIgdGhlCisgICAgICogdXBkYXRlIGlzIGNvbXBsZXRlLgogICAgICAqCi0gICAgICogQHBhcmFtIGJlZ2luIGluY2x1c2l2ZQotICAgICAqIEBwYXJhbSBlbmQgaW5jbHVzaXZlCi0gICAgICogQHBhcmFtIHNlbGVjdGVkCisgICAgICogQHBhcmFtIGJlZ2luIEFkYXB0ZXIgcG9zaXRpb24gZm9yIHJhbmdlIHN0YXJ0IChpbmNsdXNpdmUpLgorICAgICAqIEBwYXJhbSBlbmQgQWRhcHRlciBwb3NpdGlvbiBmb3IgcmFuZ2UgZW5kIChpbmNsdXNpdmUpLgorICAgICAqIEBwYXJhbSBzZWxlY3RlZCBOZXcgc2VsZWN0aW9uIHN0YXRlLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVSYW5nZShpbnQgYmVnaW4sIGludCBlbmQsIGJvb2xlYW4gc2VsZWN0ZWQpIHsKICAgICAgICAgY2hlY2tTdGF0ZShlbmQgPj0gYmVnaW4pOwogICAgICAgICBmb3IgKGludCBpID0gYmVnaW47IGkgPD0gZW5kOyBpKyspIHsKKyAgICAgICAgICAgIFN0cmluZyBpZCA9IG1BZGFwdGVyLmdldE1vZGVsSWQoaSk7CisgICAgICAgICAgICBpZiAoaWQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGNhblNlbGVjdCA9IG5vdGlmeUJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIGNhblNlbGVjdCA9IG5vdGlmeUJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShpZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhblNlbGVjdCkgewogICAgICAgICAgICAgICAgICAgICBpZiAobVNpbmdsZVNlbGVjdCAmJiBoYXNTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb25RdWlldGx5KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0QW5kTm90aWZ5KGkpOworICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbmROb3RpZnkoaWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXR0ZW1wdERlc2VsZWN0KGkpOworICAgICAgICAgICAgICAgIGF0dGVtcHREZXNlbGVjdChpZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0gcG9zaXRpb24KKyAgICAgKiBAcGFyYW0gbW9kZWxJZAogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdXBkYXRlIHdhcyBhcHBsaWVkLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBzZWxlY3RBbmROb3RpZnkoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IG1TZWxlY3Rpb24uYWRkKHBvc2l0aW9uKTsKKyAgICBwcml2YXRlIGJvb2xlYW4gc2VsZWN0QW5kTm90aWZ5KFN0cmluZyBtb2RlbElkKSB7CisgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IG1TZWxlY3Rpb24uYWRkKG1vZGVsSWQpOwogICAgICAgICBpZiAoY2hhbmdlZCkgewotICAgICAgICAgICAgbm90aWZ5SXRlbVN0YXRlQ2hhbmdlZChwb3NpdGlvbiwgdHJ1ZSk7CisgICAgICAgICAgICBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKG1vZGVsSWQsIHRydWUpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIEBwYXJhbSBwb3NpdGlvbgorICAgICAqIEBwYXJhbSBpZAogICAgICAqIEByZXR1cm4gVHJ1ZSBpZiB0aGUgdXBkYXRlIHdhcyBhcHBsaWVkLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBhdHRlbXB0RGVzZWxlY3QoaW50IHBvc2l0aW9uKSB7Ci0gICAgICAgIGlmIChub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UocG9zaXRpb24sIGZhbHNlKSkgewotICAgICAgICAgICAgbVNlbGVjdGlvbi5yZW1vdmUocG9zaXRpb24pOwotICAgICAgICAgICAgbm90aWZ5SXRlbVN0YXRlQ2hhbmdlZChwb3NpdGlvbiwgZmFsc2UpOworICAgIHByaXZhdGUgYm9vbGVhbiBhdHRlbXB0RGVzZWxlY3QoU3RyaW5nIGlkKSB7CisgICAgICAgIGNoZWNrQXJndW1lbnQoaWQgIT0gbnVsbCk7CisgICAgICAgIGlmIChub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UoaWQsIGZhbHNlKSkgeworICAgICAgICAgICAgbVNlbGVjdGlvbi5yZW1vdmUoaWQpOworICAgICAgICAgICAgbm90aWZ5SXRlbVN0YXRlQ2hhbmdlZChpZCwgZmFsc2UpOwogICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTZWxlY3Rpb24gYWZ0ZXIgZGVzZWxlY3Q6ICIgKyBtU2VsZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewpAQCAtNDQyLDEwICs0NTYsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UoaW50IHBvc2l0aW9uLCBib29sZWFuIG5leHRTdGF0ZSkgeworICAgIHByaXZhdGUgYm9vbGVhbiBub3RpZnlCZWZvcmVJdGVtU3RhdGVDaGFuZ2UoU3RyaW5nIGlkLCBib29sZWFuIG5leHRTdGF0ZSkgewogICAgICAgICBpbnQgbGFzdExpc3RlbmVyID0gbUNhbGxiYWNrcy5zaXplKCkgLSAxOwogICAgICAgICBmb3IgKGludCBpID0gbGFzdExpc3RlbmVyOyBpID4gLTE7IGktLSkgewotICAgICAgICAgICAgaWYgKCFtQ2FsbGJhY2tzLmdldChpKS5vbkJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShwb3NpdGlvbiwgbmV4dFN0YXRlKSkgeworICAgICAgICAgICAgaWYgKCFtQ2FsbGJhY2tzLmdldChpKS5vbkJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShpZCwgbmV4dFN0YXRlKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDU2LDEyICs0NzAsMTMgQEAKICAgICAgKiBOb3RpZmllcyByZWdpc3RlcmVkIGxpc3RlbmVycyB3aGVuIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGEgc2luZ2xlIGl0ZW0KICAgICAgKiAoaWRlbnRpZmllZCBieSB7QGNvZGUgcG9zaXRpb259KSBjaGFuZ2VzLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKGludCBwb3NpdGlvbiwgYm9vbGVhbiBzZWxlY3RlZCkgeworICAgIHByaXZhdGUgdm9pZCBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKFN0cmluZyBpZCwgYm9vbGVhbiBzZWxlY3RlZCkgeworICAgICAgICBjaGVja0FyZ3VtZW50KGlkICE9IG51bGwpOwogICAgICAgICBpbnQgbGFzdExpc3RlbmVyID0gbUNhbGxiYWNrcy5zaXplKCkgLSAxOwogICAgICAgICBmb3IgKGludCBpID0gbGFzdExpc3RlbmVyOyBpID4gLTE7IGktLSkgewotICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25JdGVtU3RhdGVDaGFuZ2VkKHBvc2l0aW9uLCBzZWxlY3RlZCk7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLmdldChpKS5vbkl0ZW1TdGF0ZUNoYW5nZWQoaWQsIHNlbGVjdGVkKTsKICAgICAgICAgfQotICAgICAgICBtQWRhcHRlci5ub3RpZnlJdGVtQ2hhbmdlZChwb3NpdGlvbiwgU0VMRUNUSU9OX0NIQU5HRURfTUFSS0VSKTsKKyAgICAgICAgbUFkYXB0ZXIub25JdGVtU2VsZWN0aW9uQ2hhbmdlZChpZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01ODMsNjUgKzU5OCw0MCBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgU2VsZWN0aW9uIHsKIAotICAgICAgICAvLyBUaGlzIGNsYXNzIHRyYWNrcyBzZWxlY3RlZCBwb3NpdGlvbnMgYnkgbWFuYWdpbmcgdHdvIGFycmF5czogdGhlIHNhdmVkIHNlbGVjdGlvbiwgYW5kCi0gICAgICAgIC8vIHRoZSB0b3RhbCBzZWxlY3Rpb24uIFNhdmVkIHNlbGVjdGlvbnMgYXJlIHRob3NlIHdoaWNoIGhhdmUgYmVlbiBjb21wbGV0ZWQgYnkgdGFwcGluZyBhbgotICAgICAgICAvLyBpdGVtIG9yIGJ5IGNvbXBsZXRpbmcgYSBiYW5kIHNlbGVjdCBvcGVyYXRpb24uIFByb3Zpc2lvbmFsIHNlbGVjdGlvbnMgYXJlIHNlbGVjdGlvbnMKLSAgICAgICAgLy8gd2hpY2ggaGF2ZSBiZWVuIHRlbXBvcmFyaWx5IGNyZWF0ZWQgYnkgYW4gaW4tcHJvZ3Jlc3MgYmFuZCBzZWxlY3Qgb3BlcmF0aW9uIChvbmNlIHRoZQotICAgICAgICAvLyB1c2VyIHJlbGVhc2VzIHRoZSBtb3VzZSBidXR0b24gZHVyaW5nIGEgYmFuZCBzZWxlY3Qgb3BlcmF0aW9uLCB0aGUgc2VsZWN0ZWQgaXRlbXMKLSAgICAgICAgLy8gYmVjb21lIHNhdmVkKS4gVGhlIHRvdGFsIHNlbGVjdGlvbiBpcyB0aGUgY29tYmluYXRpb24gb2YgYm90aCB0aGUgc2F2ZWQgc2VsZWN0aW9uIGFuZAotICAgICAgICAvLyB0aGUgcHJvdmlzaW9uYWwgc2VsZWN0aW9uLiBUcmFja2luZyBib3RoIHNlcGFyYXRlbHkgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHNhdmVkCi0gICAgICAgIC8vIHNlbGVjdGlvbnMgZG8gbm90IGJlY29tZSBkZXNlbGVjdGVkIHdoZW4gdGhleSBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBwcm92aXNpb25hbCBzZWxlY3Rpb247Ci0gICAgICAgIC8vIGZvciBleGFtcGxlLCBpZiBpdGVtIEEgaXMgdGFwcGVkIChhbmQgc2VsZWN0ZWQpLCB0aGVuIGFuIGluLXByb2dyZXNzIGJhbmQgc2VsZWN0IGNvdmVycyBBCi0gICAgICAgIC8vIHRoZW4gdW5jb3ZlcnMgQSwgQSBzaG91bGQgc3RpbGwgYmUgc2VsZWN0ZWQgYXMgaXQgaGFzIGJlZW4gc2F2ZWQuIFRvIGVuc3VyZSB0aGlzCi0gICAgICAgIC8vIGJlaGF2aW9yLCB0aGUgc2F2ZWQgc2VsZWN0aW9uIG11c3QgYmUgdHJhY2tlZCBzZXBhcmF0ZWx5LgotICAgICAgICBwcml2YXRlIFNwYXJzZUJvb2xlYW5BcnJheSBtU2F2ZWRTZWxlY3Rpb247Ci0gICAgICAgIHByaXZhdGUgU3BhcnNlQm9vbGVhbkFycmF5IG1Ub3RhbFNlbGVjdGlvbjsKLQotICAgICAgICBwdWJsaWMgU2VsZWN0aW9uKCkgewotICAgICAgICAgICAgbVNhdmVkU2VsZWN0aW9uID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOwotICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOwotICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgY2xhc3MgdHJhY2tzIHNlbGVjdGVkIGl0ZW1zIGJ5IG1hbmFnaW5nIHR3byBzZXRzOiB0aGUgc2F2ZWQgc2VsZWN0aW9uLCBhbmQgdGhlIHRvdGFsCisgICAgICAgIC8vIHNlbGVjdGlvbi4gU2F2ZWQgc2VsZWN0aW9ucyBhcmUgdGhvc2Ugd2hpY2ggaGF2ZSBiZWVuIGNvbXBsZXRlZCBieSB0YXBwaW5nIGFuIGl0ZW0gb3IgYnkKKyAgICAgICAgLy8gY29tcGxldGluZyBhIGJhbmQgc2VsZWN0IG9wZXJhdGlvbi4gUHJvdmlzaW9uYWwgc2VsZWN0aW9ucyBhcmUgc2VsZWN0aW9ucyB3aGljaCBoYXZlIGJlZW4KKyAgICAgICAgLy8gdGVtcG9yYXJpbHkgY3JlYXRlZCBieSBhbiBpbi1wcm9ncmVzcyBiYW5kIHNlbGVjdCBvcGVyYXRpb24gKG9uY2UgdGhlIHVzZXIgcmVsZWFzZXMgdGhlCisgICAgICAgIC8vIG1vdXNlIGJ1dHRvbiBkdXJpbmcgYSBiYW5kIHNlbGVjdCBvcGVyYXRpb24sIHRoZSBzZWxlY3RlZCBpdGVtcyBiZWNvbWUgc2F2ZWQpLiBUaGUgdG90YWwKKyAgICAgICAgLy8gc2VsZWN0aW9uIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBib3RoIHRoZSBzYXZlZCBzZWxlY3Rpb24gYW5kIHRoZSBwcm92aXNpb25hbAorICAgICAgICAvLyBzZWxlY3Rpb24uIFRyYWNraW5nIGJvdGggc2VwYXJhdGVseSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgc2F2ZWQgc2VsZWN0aW9ucyBkbyBub3QKKyAgICAgICAgLy8gYmVjb21lIGRlc2VsZWN0ZWQgd2hlbiB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIHByb3Zpc2lvbmFsIHNlbGVjdGlvbjsgZm9yIGV4YW1wbGUsIGlmCisgICAgICAgIC8vIGl0ZW0gQSBpcyB0YXBwZWQgKGFuZCBzZWxlY3RlZCksIHRoZW4gYW4gaW4tcHJvZ3Jlc3MgYmFuZCBzZWxlY3QgY292ZXJzIEEgdGhlbiB1bmNvdmVycworICAgICAgICAvLyBBLCBBIHNob3VsZCBzdGlsbCBiZSBzZWxlY3RlZCBhcyBpdCBoYXMgYmVlbiBzYXZlZC4gVG8gZW5zdXJlIHRoaXMgYmVoYXZpb3IsIHRoZSBzYXZlZAorICAgICAgICAvLyBzZWxlY3Rpb24gbXVzdCBiZSB0cmFja2VkIHNlcGFyYXRlbHkuCisgICAgICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbVNhdmVkU2VsZWN0aW9uID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBwcml2YXRlIFNldDxTdHJpbmc+IG1Ub3RhbFNlbGVjdGlvbiA9IG5ldyBIYXNoU2V0PD4oKTsKIAogICAgICAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICAgICAgcHVibGljIFNlbGVjdGlvbihpbnQuLi4gcG9zaXRpb25zKSB7Ci0gICAgICAgICAgICB0aGlzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGFkZChwb3NpdGlvbnNbaV0pOworICAgICAgICBwdWJsaWMgU2VsZWN0aW9uKFN0cmluZy4uLiBpZHMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgYWRkKGlkc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvKioKLSAgICAgICAgICogQHBhcmFtIHBvc2l0aW9uCisgICAgICAgICAqIEBwYXJhbSBpZAogICAgICAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBvc2l0aW9uIGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFNlbGVjdGlvbi5nZXQocG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFVzZWZ1bCBmb3IgaXRlcmF0aW5nIG92ZXIgc2VsZWN0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0Ci0gICAgICAgICAqIGl0ZXJhdGlvbiBzaG91bGQgYmUgZG9uZSBvdmVyIGEgY29weSBvZiB0aGUgc2VsZWN0aW9uLAotICAgICAgICAgKiBub3QgdGhlIGxpdmUgc2VsZWN0aW9uLgotICAgICAgICAgKgotICAgICAgICAgKiBAc2VlICNjb3B5VG8oTXVsdGlTZWxlY3RNYW5hZ2VyLlNlbGVjdGlvbikKLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIGluZGV4Ci0gICAgICAgICAqIEByZXR1cm4gdGhlIHBvc2l0aW9uIHZhbHVlIHN0b3JlZCBhdCBzcGVjaWZpZWQgaW5kZXguCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50IGdldChpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiBtVG90YWxTZWxlY3Rpb24ua2V5QXQoaW5kZXgpOworICAgICAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhATnVsbGFibGUgU3RyaW5nIGlkKSB7CisgICAgICAgICAgICByZXR1cm4gbVRvdGFsU2VsZWN0aW9uLmNvbnRhaW5zKGlkKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBSZXR1cm5zIGFuIHVub3JkZXJlZCBhcnJheSBvZiBzZWxlY3RlZCBwb3NpdGlvbnMuCiAgICAgICAgICAqLwotICAgICAgICBwdWJsaWMgaW50W10gZ2V0QWxsKCkgewotICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSBzaXplKCk7Ci0gICAgICAgICAgICBpbnRbXSBwb3NpdGlvbnMgPSBuZXcgaW50W3NpemVdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwb3NpdGlvbnNbaV0gPSBnZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcG9zaXRpb25zOworICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxsKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFNlbGVjdGlvbi50b0FycmF5KG5ldyBTdHJpbmdbMF0pOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC02NTUsNyArNjQ1LDcgQEAKICAgICAgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzZWxlY3Rpb24gaXMgZW1wdHkuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkgewotICAgICAgICAgICAgcmV0dXJuIG1Ub3RhbFNlbGVjdGlvbi5zaXplKCkgPT0gMDsKKyAgICAgICAgICAgIHJldHVybiBtVG90YWxTZWxlY3Rpb24uaXNFbXB0eSgpOwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC02NjYsMzcgKzY1NiwzNCBAQAogICAgICAgICAgKiAgICAgY29udGFpbiBhIHZhbHVlIG9mIHRydWUsIGFuZCBlbnRyaWVzIHdoaWNoIHdlcmUgcmVtb3ZlZCBjb250YWluIGEgdmFsdWUgb2YgZmFsc2UuCiAgICAgICAgICAqLwogICAgICAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICAgICAgcHJvdGVjdGVkIFNwYXJzZUJvb2xlYW5BcnJheSBzZXRQcm92aXNpb25hbFNlbGVjdGlvbigKLSAgICAgICAgICAgICAgICBTcGFyc2VCb29sZWFuQXJyYXkgcHJvdmlzaW9uYWxTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgIFNwYXJzZUJvb2xlYW5BcnJheSBkZWx0YSA9IG5ldyBTcGFyc2VCb29sZWFuQXJyYXkoKTsKKyAgICAgICAgcHJvdGVjdGVkIE1hcDxTdHJpbmcsIEJvb2xlYW4+IHNldFByb3Zpc2lvbmFsU2VsZWN0aW9uKFNldDxTdHJpbmc+IHByb3Zpc2lvbmFsU2VsZWN0aW9uKSB7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBCb29sZWFuPiBkZWx0YSA9IG5ldyBIYXNoTWFwPD4oKTsKIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVG90YWxTZWxlY3Rpb24uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBtVG90YWxTZWxlY3Rpb24ua2V5QXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFwcm92aXNpb25hbFNlbGVjdGlvbi5nZXQocG9zaXRpb24pICYmICFtU2F2ZWRTZWxlY3Rpb24uZ2V0KHBvc2l0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZWFjaCBpdGVtIHRoYXQgdXNlZCB0byBiZSBpbiB0aGUgc2VsZWN0aW9uIGJ1dCBpcyB1bnNhdmVkIGFuZCBub3QgaW4KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBwcm92aXNpb25hbCBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhLnB1dChwb3NpdGlvbiwgZmFsc2UpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgaWQ6IG1Ub3RhbFNlbGVjdGlvbikgeworICAgICAgICAgICAgICAgIC8vIE1hcmsgZWFjaCBpdGVtIHRoYXQgdXNlZCB0byBiZSBpbiB0aGUgc2VsZWN0aW9uIGJ1dCBpcyB1bnNhdmVkIGFuZCBub3QgaW4gdGhlIG5ldworICAgICAgICAgICAgICAgIC8vIHByb3Zpc2lvbmFsIHNlbGVjdGlvbi4KKyAgICAgICAgICAgICAgICBpZiAoIXByb3Zpc2lvbmFsU2VsZWN0aW9uLmNvbnRhaW5zKGlkKSAmJiAhbVNhdmVkU2VsZWN0aW9uLmNvbnRhaW5zKGlkKSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YS5wdXQoaWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdmlzaW9uYWxTZWxlY3Rpb24uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBwcm92aXNpb25hbFNlbGVjdGlvbi5rZXlBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1Ub3RhbFNlbGVjdGlvbi5nZXQocG9zaXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBlYWNoIGl0ZW0gdGhhdCB3YXMgbm90IHByZXZpb3VzbHkgaW4gdGhlIHNlbGVjdGlvbiBidXQgaXMgaW4gdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBwcm92aXNpb25hbCBzZWxlY3Rpb24uCi0gICAgICAgICAgICAgICAgICAgIGRlbHRhLnB1dChwb3NpdGlvbiwgdHJ1ZSk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBpZDogcHJvdmlzaW9uYWxTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBNYXJrIGVhY2ggaXRlbSB0aGF0IHdhcyBub3QgcHJldmlvdXNseSBpbiB0aGUgc2VsZWN0aW9uIGJ1dCBpcyBpbiB0aGUgbmV3CisgICAgICAgICAgICAgICAgLy8gcHJvdmlzaW9uYWwgc2VsZWN0aW9uLgorICAgICAgICAgICAgICAgIGlmICghbVRvdGFsU2VsZWN0aW9uLmNvbnRhaW5zKGlkKSkgeworICAgICAgICAgICAgICAgICAgICBkZWx0YS5wdXQoaWQsIHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gTm93LCBpdGVyYXRlIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIGFjdHVhbGx5IGFkZC9yZW1vdmUgdGhlbSB0by9mcm9tCi0gICAgICAgICAgICAvLyBtQ3VycmVudFNlbGVjdGlvbi4gVGhpcyBjb3VsZCBub3QgYmUgZG9uZSBpbiB0aGUgcHJldmlvdXMgbG9vcHMgYmVjYXVzZSBjaGFuZ2luZyB0aGUKLSAgICAgICAgICAgIC8vIHNpemUgb2YgdGhlIHNlbGVjdGlvbiBtaWQtaXRlcmF0aW9uIGNoYW5nZXMgaXRlcmF0aW9uIG9yZGVyIGVycm9uZW91c2x5LgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YS5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGRlbHRhLmtleUF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChkZWx0YS5nZXQocG9zaXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Ub3RhbFNlbGVjdGlvbi5wdXQocG9zaXRpb24sIHRydWUpOworICAgICAgICAgICAgLy8gTm93LCBpdGVyYXRlIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIGFjdHVhbGx5IGFkZC9yZW1vdmUgdGhlbSB0by9mcm9tIHRoZSBjdXJyZW50CisgICAgICAgICAgICAvLyBzZWxlY3Rpb24uIFRoaXMgY291bGQgbm90IGJlIGRvbmUgaW4gdGhlIHByZXZpb3VzIGxvb3BzIGJlY2F1c2UgY2hhbmdpbmcgdGhlIHNpemUgb2YKKyAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gbWlkLWl0ZXJhdGlvbiBjaGFuZ2VzIGl0ZXJhdGlvbiBvcmRlciBlcnJvbmVvdXNseS4KKyAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgQm9vbGVhbj4gZW50cnk6IGRlbHRhLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgaWQgPSBlbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoZW50cnkuZ2V0VmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24uYWRkKGlkKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24uZGVsZXRlKHBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uLnJlbW92ZShpZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC03MTAsNyArNjk3LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIEBWaXNpYmxlRm9yVGVzdGluZwogICAgICAgICBwcm90ZWN0ZWQgdm9pZCBhcHBseVByb3Zpc2lvbmFsU2VsZWN0aW9uKCkgewotICAgICAgICAgICAgbVNhdmVkU2VsZWN0aW9uID0gbVRvdGFsU2VsZWN0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBtU2F2ZWRTZWxlY3Rpb24gPSBuZXcgSGFzaFNldDw+KG1Ub3RhbFNlbGVjdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTcxOCwxNiArNzA1LDE2IEBACiAgICAgICAgICAqIG5vdyBkZXNlbGVjdGVkLgogICAgICAgICAgKi8KICAgICAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGNhbmNlbFByb3Zpc2lvbmFsU2VsZWN0aW9uKCkgewotICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uID0gbVNhdmVkU2VsZWN0aW9uLmNsb25lKCk7CisgICAgICAgIHZvaWQgY2FuY2VsUHJvdmlzaW9uYWxTZWxlY3Rpb24oKSB7CisgICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24gPSBuZXcgSGFzaFNldDw+KG1TYXZlZFNlbGVjdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgICAgIGJvb2xlYW4gYWRkKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgaWYgKCFtVG90YWxTZWxlY3Rpb24uZ2V0KHBvc2l0aW9uKSkgewotICAgICAgICAgICAgICAgIG1Ub3RhbFNlbGVjdGlvbi5wdXQocG9zaXRpb24sIHRydWUpOwotICAgICAgICAgICAgICAgIG1TYXZlZFNlbGVjdGlvbi5wdXQocG9zaXRpb24sIHRydWUpOworICAgICAgICBib29sZWFuIGFkZChTdHJpbmcgaWQpIHsKKyAgICAgICAgICAgIGlmICghbVRvdGFsU2VsZWN0aW9uLmNvbnRhaW5zKGlkKSkgeworICAgICAgICAgICAgICAgIG1Ub3RhbFNlbGVjdGlvbi5hZGQoaWQpOworICAgICAgICAgICAgICAgIG1TYXZlZFNlbGVjdGlvbi5hZGQoaWQpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzM1LDc5ICs3MjIsMzIgQEAKIAogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgICAgIGJvb2xlYW4gcmVtb3ZlKGludCBwb3NpdGlvbikgewotICAgICAgICAgICAgaWYgKG1Ub3RhbFNlbGVjdGlvbi5nZXQocG9zaXRpb24pKSB7Ci0gICAgICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uLmRlbGV0ZShwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgbVNhdmVkU2VsZWN0aW9uLmRlbGV0ZShwb3NpdGlvbik7CisgICAgICAgIGJvb2xlYW4gcmVtb3ZlKFN0cmluZyBpZCkgeworICAgICAgICAgICAgaWYgKG1Ub3RhbFNlbGVjdGlvbi5jb250YWlucyhpZCkpIHsKKyAgICAgICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24ucmVtb3ZlKGlkKTsKKyAgICAgICAgICAgICAgICBtU2F2ZWRTZWxlY3Rpb24ucmVtb3ZlKGlkKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIC8qKgotICAgICAgICAgKiBBZGp1c3RzIHRoZSBzZWxlY3Rpb24gcmFuZ2UgdG8gcmVmbGVjdCB0aGUgZXhpc3RlbmNlIG9mIG5ld2x5IGluc2VydGVkIHZhbHVlcyBhdAotICAgICAgICAgKiB0aGUgc3BlY2lmaWVkIHBvc2l0aW9ucy4gVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBhZGp1c3RpbmcgYWxsIGV4aXN0aW5nIHNlbGVjdGVkCi0gICAgICAgICAqIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHNwZWNpZmllZCByYW5nZSBhY2NvcmRpbmdseS4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55Ci0gICAgICAgICAqIHByb3Zpc2lvbmFsIHNlbGVjdGlvbnMgd2hpY2ggbWF5IGhhdmUgYmVlbiBhcHBsaWVkLgotICAgICAgICAgKgotICAgICAgICAgKiBAcGFyYW0gc3RhcnRQb3NpdGlvbgotICAgICAgICAgKiBAcGFyYW0gY291bnQKLSAgICAgICAgICogQGhpZGUKLSAgICAgICAgICovCi0gICAgICAgIEBWaXNpYmxlRm9yVGVzdGluZwotICAgICAgICB2b2lkIGV4cGFuZChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGNvdW50KSB7Ci0gICAgICAgICAgICBjaGVja1N0YXRlKHN0YXJ0UG9zaXRpb24gPj0gMCk7Ci0gICAgICAgICAgICBjaGVja1N0YXRlKGNvdW50ID4gMCk7Ci0gICAgICAgICAgICBjYW5jZWxQcm92aXNpb25hbFNlbGVjdGlvbigpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Ub3RhbFNlbGVjdGlvbi5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGludCBpdGVtUG9zaXRpb24gPSBtVG90YWxTZWxlY3Rpb24ua2V5QXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGl0ZW1Qb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Ub3RhbFNlbGVjdGlvbi5zZXRLZXlBdChpLCBpdGVtUG9zaXRpb24gKyBjb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIG1TYXZlZFNlbGVjdGlvbi5zZXRLZXlBdChpLCBpdGVtUG9zaXRpb24gKyBjb3VudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEFkanVzdHMgdGhlIHNlbGVjdGlvbiByYW5nZSB0byByZWZsZWN0IHRoZSByZW1vdmFsIHNwZWNpZmllZCBwb3NpdGlvbnMuIFRoaXMgaGFzCi0gICAgICAgICAqIHRoZSBlZmZlY3Qgb2YgYWRqdXN0aW5nIGFsbCBleGlzdGluZyBzZWxlY3RlZCBwb3NpdGlvbnMgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAgICAgICogYWNjb3JkaW5nbHkuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSBwcm92aXNpb25hbCBzZWxlY3Rpb25zIHdoaWNoIG1heSBoYXZlCi0gICAgICAgICAqIGJlZW4gYXBwbGllZC4KLSAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHN0YXJ0UG9zaXRpb24KLSAgICAgICAgICogQHBhcmFtIGNvdW50IFRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIHRvIGNvbGxhcHNlLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLgotICAgICAgICAgKiBAaGlkZQotICAgICAgICAgKi8KLSAgICAgICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgICAgIHZvaWQgY29sbGFwc2UoaW50IHN0YXJ0UG9zaXRpb24sIGludCBjb3VudCkgewotICAgICAgICAgICAgY2hlY2tTdGF0ZShzdGFydFBvc2l0aW9uID49IDApOwotICAgICAgICAgICAgY2hlY2tTdGF0ZShjb3VudCA+IDApOwotCi0gICAgICAgICAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgY291bnQgLSAxOwotCi0gICAgICAgICAgICBTcGFyc2VCb29sZWFuQXJyYXkgbmV3U2VsZWN0aW9uID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU2F2ZWRTZWxlY3Rpb24uc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgaXRlbVBvc2l0aW9uID0gbVNhdmVkU2VsZWN0aW9uLmtleUF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVtUG9zaXRpb24gPCBzdGFydFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5hcHBlbmQoaXRlbVBvc2l0aW9uLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1Qb3NpdGlvbiA+IGVuZFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvbi5hcHBlbmQoaXRlbVBvc2l0aW9uIC0gY291bnQsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TYXZlZFNlbGVjdGlvbiA9IG5ld1NlbGVjdGlvbjsKLSAgICAgICAgICAgIGNhbmNlbFByb3Zpc2lvbmFsU2VsZWN0aW9uKCk7Ci0gICAgICAgIH0KLQogICAgICAgICBwdWJsaWMgdm9pZCBjbGVhcigpIHsKICAgICAgICAgICAgIG1TYXZlZFNlbGVjdGlvbi5jbGVhcigpOwogICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uLmNsZWFyKCk7CiAgICAgICAgIH0KIAorICAgICAgICAvKioKKyAgICAgICAgICogVHJpbXMgdGhpcyBzZWxlY3Rpb24gdG8gYmUgdGhlIGludGVyc2VjdGlvbiBvZiBpdHNlbGYgd2l0aCB0aGUgc2V0IG9mIGdpdmVuIElEcy4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIGludGVyc2VjdChDb2xsZWN0aW9uPFN0cmluZz4gaWRzKSB7CisgICAgICAgICAgICBtU2F2ZWRTZWxlY3Rpb24ucmV0YWluQWxsKGlkcyk7CisgICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24ucmV0YWluQWxsKGlkcyk7CisgICAgICAgIH0KKwogICAgICAgICBAVmlzaWJsZUZvclRlc3RpbmcKICAgICAgICAgdm9pZCBjb3B5RnJvbShTZWxlY3Rpb24gc291cmNlKSB7Ci0gICAgICAgICAgICBtU2F2ZWRTZWxlY3Rpb24gPSBzb3VyY2UubVNhdmVkU2VsZWN0aW9uLmNsb25lKCk7Ci0gICAgICAgICAgICBtVG90YWxTZWxlY3Rpb24gPSBzb3VyY2UubVRvdGFsU2VsZWN0aW9uLmNsb25lKCk7CisgICAgICAgICAgICBtU2F2ZWRTZWxlY3Rpb24gPSBuZXcgSGFzaFNldDw+KHNvdXJjZS5tU2F2ZWRTZWxlY3Rpb24pOworICAgICAgICAgICAgbVRvdGFsU2VsZWN0aW9uID0gbmV3IEhhc2hTZXQ8Pihzb3VyY2UubVRvdGFsU2VsZWN0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtODIxLDExICs3NjEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChtVG90YWxTZWxlY3Rpb24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCIsICIpCiAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIml0ZW1zPVsiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1Ub3RhbFNlbGVjdGlvbi5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgZm9yIChJdGVyYXRvcjxTdHJpbmc+IGkgPSBtVG90YWxTZWxlY3Rpb24uaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkgeworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoaS5uZXh0KCkpOworICAgICAgICAgICAgICAgIGlmIChpLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCIsICIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKG1Ub3RhbFNlbGVjdGlvbi5rZXlBdChpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJdfSIpOwogICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwpAQCAtODg0LDggKzgyNCw4IEBACiAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc092ZXJsYXlTaG93biA9IGZhbHNlOwogCi0gICAgICAgIFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChSZWN5Y2xlclZpZXcgcnYpIHsKLSAgICAgICAgICAgIG1WaWV3ID0gcnY7CisgICAgICAgIFJ1bnRpbWVTZWxlY3Rpb25FbnZpcm9ubWVudChSZWN5Y2xlclZpZXcgdmlldykgeworICAgICAgICAgICAgbVZpZXcgPSB2aWV3OwogICAgICAgICAgICAgbUJhbmQgPSBtVmlldy5nZXRDb250ZXh0KCkuZ2V0VGhlbWUoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmJhbmRfc2VsZWN0X292ZXJsYXkpOwogICAgICAgICB9CiAKQEAgLTkwNCwxMiArODQ0LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgYWRkT25TY3JvbGxMaXN0ZW5lcihPblNjcm9sbExpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIGFkZE9uU2Nyb2xsTGlzdGVuZXIoUmVjeWNsZXJWaWV3Lk9uU2Nyb2xsTGlzdGVuZXIgbGlzdGVuZXIpIHsKICAgICAgICAgICAgIG1WaWV3LmFkZE9uU2Nyb2xsTGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZU9uU2Nyb2xsTGlzdGVuZXIoT25TY3JvbGxMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVPblNjcm9sbExpc3RlbmVyKFJlY3ljbGVyVmlldy5PblNjcm9sbExpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgICAgICAgICBtVmlldy5yZW1vdmVPblNjcm9sbExpc3RlbmVyKGxpc3RlbmVyKTsKICAgICAgICAgfQogCkBAIC05NDMsNyArODgzLDcgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpIHsKLSAgICAgICAgICAgIExheW91dE1hbmFnZXIgbGF5b3V0TWFuYWdlciA9IG1WaWV3LmdldExheW91dE1hbmFnZXIoKTsKKyAgICAgICAgICAgIFJlY3ljbGVyVmlldy5MYXlvdXRNYW5hZ2VyIGxheW91dE1hbmFnZXIgPSBtVmlldy5nZXRMYXlvdXRNYW5hZ2VyKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0TWFuYWdlciBpbnN0YW5jZW9mIEdyaWRMYXlvdXRNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuICgoR3JpZExheW91dE1hbmFnZXIpIGxheW91dE1hbmFnZXIpLmdldFNwYW5Db3VudCgpOwogICAgICAgICAgICAgfQpAQCAtMTAwNSwxNiArOTQ1LDI3IEBACiAgICAgICAgICAgICBpZiAodmggIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHZoLml0ZW1WaWV3LnJlcXVlc3RGb2N1cygpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBzbW9vdGggc2Nyb2xsOyB0aGF0IHRheGVzIHRoZSBzeXN0ZW0gdW5uZWNlc3NhcmlseSBhbmQgbWFrZXMgdGhlIHNjcm9sbAotICAgICAgICAgICAgICAgIC8vIGhhbmRsaW5nIGxvZ2ljIGJlbG93IG1vcmUgY29tcGxpY2F0ZWQuICBTZWUgYi8yNDg2NTY1OC4KLSAgICAgICAgICAgICAgICBtVmlldy5zY3JvbGxUb1Bvc2l0aW9uKHBvcyk7CisgICAgICAgICAgICAgICAgbVZpZXcuc21vb3RoU2Nyb2xsVG9Qb3NpdGlvbihwb3MpOwogICAgICAgICAgICAgICAgIC8vIFNldCBhIG9uZS10aW1lIGxpc3RlbmVyIHRvIHJlcXVlc3QgZm9jdXMgd2hlbiB0aGUgc2Nyb2xsIGhhcyBjb21wbGV0ZWQuCiAgICAgICAgICAgICAgICAgbVZpZXcuYWRkT25TY3JvbGxMaXN0ZW5lcigKICAgICAgICAgICAgICAgICAgICAgbmV3IFJlY3ljbGVyVmlldy5PblNjcm9sbExpc3RlbmVyKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbGVkKFJlY3ljbGVyVmlldyB2aWV3LCBpbnQgZHgsIGludCBkeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcuZmluZFZpZXdIb2xkZXJGb3JBZGFwdGVyUG9zaXRpb24ocG9zKS5pdGVtVmlldy5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3LnJlbW92ZU9uU2Nyb2xsTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNjcm9sbFN0YXRlQ2hhbmdlZCAoUmVjeWNsZXJWaWV3IHZpZXcsIGludCBuZXdTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGF0ZSA9PSBSZWN5Y2xlclZpZXcuU0NST0xMX1NUQVRFX0lETEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBzY3JvbGxpbmcgc3RvcHMsIGZpbmQgdGhlIGl0ZW0gYW5kIGZvY3VzIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWN5Y2xlclZpZXcuVmlld0hvbGRlciB2aCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldy5maW5kVmlld0hvbGRlckZvckFkYXB0ZXJQb3NpdGlvbihwb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmggIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmguaXRlbVZpZXcucmVxdWVzdEZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGhhcHBlbiBpbiB3ZWlyZCBjb3JuZXIgY2FzZXMsIGUuZy4gaWYgdGhlIHVzZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcm9sbGluZyB3aGlsZSBhIGRlbGV0ZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBJbiB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlLCBqdXN0IGRvbid0IGF0dGVtcHQgdG8gZm9jdXMgdGhlIG1pc3NpbmcgaXRlbS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBRywgIlVuYWJsZSB0byBmb2N1cyBwb3NpdGlvbiAiICsgcG9zICsgIiBhZnRlciBhIHNjcm9sbCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcucmVtb3ZlT25TY3JvbGxMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfQpAQCAtMTAyOSwxNyArOTgwLDE3IEBACiAgICAgICAgICAqIEBwYXJhbSBzZWxlY3RlZCA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgaXRlbSBpcyBub3cgc2VsZWN0ZWQsIDxjb2RlPmZhbHNlPC9jb2RlPgogICAgICAgICAgKiAgICAgICAgICAgICAgICBpZiB0aGUgaXRlbSBpcyBub3cgdW5zZWxlY3RlZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVN0YXRlQ2hhbmdlZChpbnQgcG9zaXRpb24sIGJvb2xlYW4gc2VsZWN0ZWQpOworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1TdGF0ZUNoYW5nZWQoU3RyaW5nIGlkLCBib29sZWFuIHNlbGVjdGVkKTsKIAogICAgICAgICAvKioKICAgICAgICAgICogQ2FsbGVkIHByaW9yIHRvIGFuIGl0ZW0gY2hhbmdpbmcgc3RhdGUuIENhbGxiYWNrcyBjYW4gY2FuY2VsCiAgICAgICAgICAqIHRoZSBjaGFuZ2UgYXQge0Bjb2RlIHBvc2l0aW9ufSBieSByZXR1cm5pbmcge0Bjb2RlIGZhbHNlfS4KICAgICAgICAgICoKLSAgICAgICAgICogQHBhcmFtIHBvc2l0aW9uIEFkYXB0ZXIgcG9zaXRpb24gb2YgdGhlIGl0ZW0gdGhhdCB3YXMgY2hlY2tlZCBvciB1bmNoZWNrZWQKKyAgICAgICAgICogQHBhcmFtIGlkIEFkYXB0ZXIgcG9zaXRpb24gb2YgdGhlIGl0ZW0gdGhhdCB3YXMgY2hlY2tlZCBvciB1bmNoZWNrZWQKICAgICAgICAgICogQHBhcmFtIHNlbGVjdGVkIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBpdGVtIGlzIHRvIGJlIHNlbGVjdGVkLCA8Y29kZT5mYWxzZTwvY29kZT4KICAgICAgICAgICogICAgICAgICAgICAgICAgaWYgdGhlIGl0ZW0gaXMgdG8gYmUgdW5zZWxlY3RlZC4KICAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uQmVmb3JlSXRlbVN0YXRlQ2hhbmdlKGludCBwb3NpdGlvbiwgYm9vbGVhbiBzZWxlY3RlZCk7CisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uQmVmb3JlSXRlbVN0YXRlQ2hhbmdlKFN0cmluZyBpZCwgYm9vbGVhbiBzZWxlY3RlZCk7CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBjb21wbGV0aW9uIG9mIGFueSBzZXQgb2YgY2hhbmdlcy4KQEAgLTEwNzUsNyArMTAyNiw3IEBACiAgICAgICAgICAgICBtTW9kZWxCdWlsZGVyID0gbmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgbU1vZGVsID0gbmV3IEdyaWRNb2RlbChtRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgICAgICBtTW9kZWwgPSBuZXcgR3JpZE1vZGVsKG1FbnZpcm9ubWVudCwgbUFkYXB0ZXIpOwogICAgICAgICAgICAgICAgICAgICBtTW9kZWwuYWRkT25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoQmFuZENvbnRyb2xsZXIudGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKQEAgLTEyMDIsMTEgKzExNTMsMTUgQEAKICAgICAgICAgICAgIG1TZWxlY3Rpb24uYXBwbHlQcm92aXNpb25hbFNlbGVjdGlvbigpOwogICAgICAgICAgICAgbU1vZGVsLmVuZFNlbGVjdGlvbigpOwogICAgICAgICAgICAgaW50IGZpcnN0U2VsZWN0ZWQgPSBtTW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCk7Ci0gICAgICAgICAgICBpZiAoIW1TZWxlY3Rpb24uY29udGFpbnMoZmlyc3RTZWxlY3RlZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGaXJzdCBzZWxlY3RlZCBieSBiYW5kIGlzIE5PVCBpbiBzZWxlY3Rpb24hIik7Ci0gICAgICAgICAgICAgICAgLy8gU2FkbHkgdGhpcyBpcyByZWFsbHkgaGFwcGVuaW5nLiBOZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdFNlbGVjdGVkICE9IEdyaWRNb2RlbC5OT1RfU0VUKSB7Ci0gICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uRm9jdXNCZWdpbihmaXJzdFNlbGVjdGVkKTsKKyAgICAgICAgICAgIGlmIChmaXJzdFNlbGVjdGVkICE9IE5PVF9TRVQpIHsKKyAgICAgICAgICAgICAgICBpZiAobVNlbGVjdGlvbi5jb250YWlucyhtQWRhcHRlci5nZXRNb2RlbElkKGZpcnN0U2VsZWN0ZWQpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBmaXJzdFNlbGVjdGVkIHNob3VsZCByZWFsbHkgYmUgbGFzdFNlbGVjdGVkLCB3ZSB3YW50IHRvIGFuY2hvciB0aGUgaXRlbQorICAgICAgICAgICAgICAgICAgICAvLyB3aGVyZSB0aGUgbW91c2UtdXAgb2NjdXJyZWQuCisgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvblJhbmdlQmVnaW4oZmlyc3RTZWxlY3RlZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyBpcyByZWFsbHkgaGFwcGVuaW5nLgorICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGaXJzdCBzZWxlY3RlZCBieSBiYW5kIGlzIE5PVCBpbiBzZWxlY3Rpb24hIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtTW9kZWwgPSBudWxsOwpAQCAtMTIxNCwxMSArMTE2OSwxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uU2VsZWN0aW9uQ2hhbmdlZChTcGFyc2VCb29sZWFuQXJyYXkgdXBkYXRlZFNlbGVjdGlvbikgewotICAgICAgICAgICAgU3BhcnNlQm9vbGVhbkFycmF5IGRlbHRhID0gbVNlbGVjdGlvbi5zZXRQcm92aXNpb25hbFNlbGVjdGlvbih1cGRhdGVkU2VsZWN0aW9uKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGEuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBkZWx0YS5rZXlBdChpKTsKLSAgICAgICAgICAgICAgICBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKHBvc2l0aW9uLCBkZWx0YS5nZXQocG9zaXRpb24pKTsKKyAgICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkKFNldDxTdHJpbmc+IHVwZGF0ZWRTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIEJvb2xlYW4+IGRlbHRhID0gbVNlbGVjdGlvbi5zZXRQcm92aXNpb25hbFNlbGVjdGlvbih1cGRhdGVkU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgQm9vbGVhbj4gZW50cnk6IGRlbHRhLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICBub3RpZnlJdGVtU3RhdGVDaGFuZ2VkKGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoKTsKICAgICAgICAgfQpAQCAtMTM2Miw2ICsxMzE2LDggQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPV0VSX1JJR0hUID0gTE9XRVIgfCBSSUdIVDsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIFNlbGVjdGlvbkVudmlyb25tZW50IG1IZWxwZXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgRG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKKwogICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8T25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI+IG1PblNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcnMgPQogICAgICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8PigpOwogCkBAIC0xMzg0LDcgKzEzNDAsNyBAQAogCiAgICAgICAgIC8vIEFycmF5IHBhc3NlZCB0byByZWdpc3RlcmVkIE9uU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVycy4gT25lIGFycmF5IGlzIGNyZWF0ZWQgYW5kIHJldXNlZAogICAgICAgICAvLyB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgb2JqZWN0LgotICAgICAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUJvb2xlYW5BcnJheSBtU2VsZWN0aW9uID0gbmV3IFNwYXJzZUJvb2xlYW5BcnJheSgpOworICAgICAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1TZWxlY3Rpb24gPSBuZXcgSGFzaFNldDw+KCk7CiAKICAgICAgICAgLy8gVGhlIGN1cnJlbnQgcG9pbnRlciAoaW4gYWJzb2x1dGUgcG9zaXRpb25pbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSB2aWV3KS4KICAgICAgICAgcHJpdmF0ZSBQb2ludCBtUG9pbnRlciA9IG51bGw7CkBAIC0xMzk5LDggKzEzNTUsOSBAQAogICAgICAgICAvLyBzaG91bGQgZXhwYW5kIGZyb20gd2hlbiBTaGlmdCtjbGljayBpcyB1c2VkLgogICAgICAgICBwcml2YXRlIGludCBtUG9zaXRpb25OZWFyZXN0T3JpZ2luID0gTk9UX1NFVDsKIAotICAgICAgICBHcmlkTW9kZWwoU2VsZWN0aW9uRW52aXJvbm1lbnQgaGVscGVyKSB7CisgICAgICAgIEdyaWRNb2RlbChTZWxlY3Rpb25FbnZpcm9ubWVudCBoZWxwZXIsIERvY3VtZW50c0FkYXB0ZXIgYWRhcHRlcikgewogICAgICAgICAgICAgbUhlbHBlciA9IGhlbHBlcjsKKyAgICAgICAgICAgIG1BZGFwdGVyID0gYWRhcHRlcjsKICAgICAgICAgICAgIG1IZWxwZXIuYWRkT25TY3JvbGxMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDc4LDggKzE0MzUsNyBAQAogICAgICAgICAgICAgICAgIGludCBhZGFwdGVyUG9zaXRpb24gPSBtSGVscGVyLmdldEFkYXB0ZXJQb3NpdGlvbkF0KGkpOwogICAgICAgICAgICAgICAgIGlmICghbUtub3duUG9zaXRpb25zLmdldChhZGFwdGVyUG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIG1Lbm93blBvc2l0aW9ucy5wdXQoYWRhcHRlclBvc2l0aW9uLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVjb3JkSXRlbURhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhlbHBlci5nZXRBYnNvbHV0ZVJlY3RGb3JDaGlsZFZpZXdBdChpKSwgYWRhcHRlclBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkSXRlbURhdGEobUhlbHBlci5nZXRBYnNvbHV0ZVJlY3RGb3JDaGlsZFZpZXdBdChpKSwgYWRhcHRlclBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2MDAsMTMgKzE1NTYsMjIgQEAKICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IGNvbHVtblN0YXJ0SW5kZXg7IGNvbHVtbiA8PSBjb2x1bW5FbmRJbmRleDsgY29sdW1uKyspIHsKICAgICAgICAgICAgICAgICBTcGFyc2VJbnRBcnJheSBpdGVtcyA9IG1Db2x1bW5zLmdldChtQ29sdW1uQm91bmRzLmdldChjb2x1bW4pLmxvd2VyTGltaXQpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IHJvd1N0YXJ0SW5kZXg7IHJvdyA8PSByb3dFbmRJbmRleDsgcm93KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHBvc2l0aW9uID0gaXRlbXMuZ2V0KGl0ZW1zLmtleUF0KHJvdykpOwotICAgICAgICAgICAgICAgICAgICBtU2VsZWN0aW9uLmFwcGVuZChwb3NpdGlvbiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1Bvc3NpYmxlUG9zaXRpb25OZWFyZXN0T3JpZ2luKGNvbHVtbiwgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uRW5kSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCByb3dTdGFydEluZGV4LCByb3dFbmRJbmRleCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIHBvc2l0aW9uIG5lYXJlc3QgdGhlIG9yaWdpbiwgcmVjb3JkIGl0IG5vdyBzbyB0aGF0IGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4gYmUgcmV0dXJuZWQgYnkgZW5kU2VsZWN0aW9uKCkgbGF0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAgICBtUG9zaXRpb25OZWFyZXN0T3JpZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldHVybiB2YWx1ZSBmb3IgU3BhcnNlSW50QXJyYXkuZ2V0IGlzIDAsIHdoaWNoIGlzIGEgdmFsaWQKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpb24uIFVzZSBhIHNlbnRyeSB2YWx1ZSB0byBwcmV2ZW50IGVycm9uZW91c2x5IHNlbGVjdGluZyBpdGVtIDAuCisgICAgICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGl0ZW1zLmdldChpdGVtcy5rZXlBdChyb3cpLCBOT1RfU0VUKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uICE9IE5PVF9TRVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IG1BZGFwdGVyLmdldE1vZGVsSWQocG9zaXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWRhcHRlciBpbnNlcnRzIGl0ZW1zIGZvciBVSSBsYXlvdXQgcHVycG9zZXMgdGhhdCBhcmVuJ3QgYXNzb2NpYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggZmlsZXMuICBUaG9zZSB3aWxsIGhhdmUgYSBudWxsIG1vZGVsIElELiAgRG9uJ3Qgc2VsZWN0IHRoZW0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGlvbi5hZGQoaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUG9zc2libGVQb3NpdGlvbk5lYXJlc3RPcmlnaW4oY29sdW1uLCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5FbmRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LCByb3dTdGFydEluZGV4LCByb3dFbmRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBwb3NpdGlvbiBuZWFyZXN0IHRoZSBvcmlnaW4sIHJlY29yZCBpdCBub3cgc28gdGhhdCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBiZSByZXR1cm5lZCBieSBlbmRTZWxlY3Rpb24oKSBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUG9zaXRpb25OZWFyZXN0T3JpZ2luID0gcG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNjQzLDcgKzE2MDgsNyBAQAogICAgICAgICAgKiBMaXN0ZW5lciBmb3IgY2hhbmdlcyBpbiB3aGljaCBpdGVtcyBoYXZlIGJlZW4gYmFuZCBzZWxlY3RlZC4KICAgICAgICAgICovCiAgICAgICAgIHN0YXRpYyBpbnRlcmZhY2UgT25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgewotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkKFNwYXJzZUJvb2xlYW5BcnJheSB1cGRhdGVkU2VsZWN0aW9uKTsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VsZWN0aW9uQ2hhbmdlZChTZXQ8U3RyaW5nPiB1cGRhdGVkU2VsZWN0aW9uKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYWRkT25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoT25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgbGlzdGVuZXIpIHsKQEAgLTE5NTksMzIgKzE5MjQsNDEgQEAKICAgICAgICAgLy8gSGVyZSB3ZSB1bnBhY2sgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXZlbnQgYW5kIHBhc3MgaXQgdG8gYW4gbW9yZQogICAgICAgICAvLyBlYXNpbHkgdGVzdGVkIG1ldGhvZC4uLi5iYXNpY2FsbHkgZWxpbWluYXRpbmcgdGhlIG5lZWQgdG8gc3ludGhlc2l6ZQogICAgICAgICAvLyBldmVudHMgYW5kIHZpZXdzIGFuZCBzbyBvbiBpbiBvdXIgdGVzdHMuCi0gICAgICAgIGludCBwb3NpdGlvbiA9IGZpbmRUYXJnZXRQb3NpdGlvbih2aWV3LCBrZXlDb2RlKTsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IFJlY3ljbGVyVmlldy5OT19QT1NJVElPTikgeworICAgICAgICBpbnQgZW5kUG9zID0gZmluZFRhcmdldFBvc2l0aW9uKHZpZXcsIGtleUNvZGUpOworICAgICAgICBpZiAoZW5kUG9zID09IFJlY3ljbGVyVmlldy5OT19QT1NJVElPTikgewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdmFsaWQgbmF2aWdhdGlvbiB0YXJnZXQsIGRvbid0IGhhbmRsZSB0aGUga2V5cHJlc3MuCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gYXR0ZW1wdENoYW5nZVBvc2l0aW9uKHBvc2l0aW9uLCBldmVudC5pc1NoaWZ0UHJlc3NlZCgpKTsKKyAgICAgICAgaW50IHN0YXJ0UG9zID0gbUVudmlyb25tZW50LmdldEFkYXB0ZXJQb3NpdGlvbkZvckNoaWxkVmlldyh2aWV3KTsKKworICAgICAgICByZXR1cm4gY2hhbmdlRm9jdXMoc3RhcnRQb3MsIGVuZFBvcywgZXZlbnQuaXNTaGlmdFByZXNzZWQoKSk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQHBhcmFtIHN0YXJ0UG9zaXRpb24gVGhlIGN1cnJlbnQgZm9jdXMgcG9zaXRpb24uCisgICAgICogQHBhcmFtIHRhcmdldFBvc2l0aW9uIFRoZSBhZGFwdGVyIHBvc2l0aW9uIHRvIGZvY3VzLgorICAgICAqIEBwYXJhbSBleHRlbmRTZWxlY3Rpb24KKyAgICAgKi8KICAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBib29sZWFuIGF0dGVtcHRDaGFuZ2VQb3NpdGlvbihpbnQgdGFyZ2V0UG9zaXRpb24sIGJvb2xlYW4gaXNTaGlmdFByZXNzZWQpIHsKKyAgICBib29sZWFuIGNoYW5nZUZvY3VzKGludCBzdGFydFBvc2l0aW9uLCBpbnQgdGFyZ2V0UG9zaXRpb24sIGJvb2xlYW4gZXh0ZW5kU2VsZWN0aW9uKSB7CiAgICAgICAgIC8vIEZvY3VzIHRoZSBuZXcgZmlsZS4KICAgICAgICAgbUVudmlyb25tZW50LmZvY3VzSXRlbSh0YXJnZXRQb3NpdGlvbik7CiAKLSAgICAgICAgaWYgKGlzU2hpZnRQcmVzc2VkKSB7Ci0gICAgICAgICAgICBpZiAoIWhhc1NlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLCBzdGFydCBhIHNlbGVjdGlvbiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQtYXJyb3cuCi0gICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uKHRhcmdldFBvc2l0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1TaW5nbGVTZWxlY3QpIHsKLSAgICAgICAgICAgICAgICBtUmFuZ2VyLnNuYXBTZWxlY3Rpb24odGFyZ2V0UG9zaXRpb24pOwotICAgICAgICAgICAgICAgIG5vdGlmeVNlbGVjdGlvbkNoYW5nZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleHRlbmRTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChtU2luZ2xlU2VsZWN0KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgaW4gc2luZ2xlIHNlbGVjdCBhbmQgaGF2ZSBhbiBleGlzdGluZyBzZWxlY3Rpb24uCiAgICAgICAgICAgICAgICAgLy8gT3VyIGJlc3QgZ3Vlc3MgYXMgdG8gd2hhdCB0aGUgdXNlciB3b3VsZCBleHBlY3QgaXMgdG8gYWR2YW5jZSB0aGUgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgdG9nZ2xlU2VsZWN0aW9uKHRhcmdldFBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNTZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBObyBzZWxlY3Rpb24gLSBzdGFydCBhIHNlbGVjdGlvbiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgc2hpZnQtYXJyb3cuCisgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNlbGVjdGlvbihzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uUmFuZ2VCZWdpbihzdGFydFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVJhbmdlci5zbmFwU2VsZWN0aW9uKHRhcmdldFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBub3RpZnlTZWxlY3Rpb25DaGFuZ2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcldyYXBwZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1NlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4NWFkOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1NlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyLmphdmEKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQ7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkdyaWRMYXlvdXRNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3LkFkYXB0ZXJEYXRhT2JzZXJ2ZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3BhY2U7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQWRhcHRlciB3cmFwcGVyIHRoYXQgaW5zZXJ0cyBhIHNvcnQgb2YgbGluZSBicmVhayBpdGVtIGJldHdlZW4gZGlyZWN0b3JpZXMgYW5kIHJlZ3VsYXIgZmlsZXMuCisgKiBPbmx5IG5lZWRzIHRvIGJlIHVzZWQgaW4gR1JJRCBtb2RlLi4uYXQgdGhpcyB0aW1lLgorICovCitmaW5hbCBjbGFzcyBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlciBleHRlbmRzIERvY3VtZW50c0FkYXB0ZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlciI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElURU1fVFlQRV9TRUNUSU9OX0JSRUFLID0gSW50ZWdlci5NQVhfVkFMVUU7CisKKyAgICBwcml2YXRlIGZpbmFsIEVudmlyb25tZW50IG1FbnY7CisgICAgcHJpdmF0ZSBmaW5hbCBEb2N1bWVudHNBZGFwdGVyIG1EZWxlZ2F0ZTsKKworICAgIHByaXZhdGUgaW50IG1CcmVha1Bvc2l0aW9uID0gLTE7CisKKyAgICBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlcihFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgRG9jdW1lbnRzQWRhcHRlciBkZWxlZ2F0ZSkgeworICAgICAgICBtRW52ID0gZW52aXJvbm1lbnQ7CisgICAgICAgIG1EZWxlZ2F0ZSA9IGRlbGVnYXRlOworCisgICAgICAgIC8vIFJlbGF5IGV2ZW50cyBwdWJsaXNoZWQgYnkgb3VyIGRlbGVnYXRlIHRvIG91ciBsaXN0ZW5lcnMgKHByZXN1bWFibHkgUmVjeWNsZXJWaWV3KQorICAgICAgICAvLyB3aXRoIGFkanVzdGVkIHBvc2l0aW9ucy4KKyAgICAgICAgbURlbGVnYXRlLnJlZ2lzdGVyQWRhcHRlckRhdGFPYnNlcnZlcihuZXcgRXZlbnRSZWxheSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAgY3JlYXRlU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgIHJldHVybiBuZXcgR3JpZExheW91dE1hbmFnZXIuU3BhblNpemVMb29rdXAoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBpbnQgZ2V0U3BhblNpemUoaW50IHBvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBsYXlvdXQgd2hpdGVzcGFjZSBzcGFuIHRoZSBncmlkLiBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mIGJyZWFraW5nCisgICAgICAgICAgICAgICAgLy8gZ3JpZCByb3dzIHdoZW5ldmVyIGxheW91dCB3aGl0ZXNwYWNlIGlzIGVuY291bnRlcmVkLgorICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtVmlld1R5cGUocG9zaXRpb24pID09IElURU1fVFlQRV9TRUNUSU9OX0JSRUFLKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtRW52LmdldENvbHVtbkNvdW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEb2N1bWVudEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7CisgICAgICAgIGlmICh2aWV3VHlwZSA9PSBJVEVNX1RZUEVfU0VDVElPTl9CUkVBSykgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBFbXB0eURvY3VtZW50SG9sZGVyKG1FbnYuZ2V0Q29udGV4dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtRGVsZWdhdGUuY3JlYXRlVmlld0hvbGRlcihwYXJlbnQsIHZpZXdUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcCwgTGlzdDxPYmplY3Q+IHBheWxvYWQpIHsKKyAgICAgICAgaWYgKGhvbGRlci5nZXRJdGVtVmlld1R5cGUoKSAhPSBJVEVNX1RZUEVfU0VDVElPTl9CUkVBSykgeworICAgICAgICAgICAgbURlbGVnYXRlLm9uQmluZFZpZXdIb2xkZXIoaG9sZGVyLCB0b0RlbGVnYXRlUG9zaXRpb24ocCksIHBheWxvYWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKChFbXB0eURvY3VtZW50SG9sZGVyKWhvbGRlcikuYmluZChtRW52LmdldERpc3BsYXlTdGF0ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyLCBpbnQgcCkgeworICAgICAgICBpZiAoaG9sZGVyLmdldEl0ZW1WaWV3VHlwZSgpICE9IElURU1fVFlQRV9TRUNUSU9OX0JSRUFLKSB7CisgICAgICAgICAgICBtRGVsZWdhdGUub25CaW5kVmlld0hvbGRlcihob2xkZXIsIHRvRGVsZWdhdGVQb3NpdGlvbihwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoKEVtcHR5RG9jdW1lbnRIb2xkZXIpaG9sZGVyKS5iaW5kKG1FbnYuZ2V0RGlzcGxheVN0YXRlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRJdGVtQ291bnQoKSB7CisgICAgICAgIHJldHVybiBtQnJlYWtQb3NpdGlvbiA9PSAtMQorICAgICAgICAgICAgICAgID8gbURlbGVnYXRlLmdldEl0ZW1Db3VudCgpCisgICAgICAgICAgICAgICAgOiBtRGVsZWdhdGUuZ2V0SXRlbUNvdW50KCkgKyAxOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGUoTW9kZWwgbW9kZWwpIHsKKyAgICAgICAgbURlbGVnYXRlLm9uTW9kZWxVcGRhdGUobW9kZWwpOworICAgICAgICBtQnJlYWtQb3NpdGlvbiA9IC0xOworCisgICAgICAgIC8vIFdhbGsgZG93biB0aGUgbGlzdCBvZiBJRHMgdGlsbCB3ZSBlbmNvdW50ZXIgc29tZXRoaW5nIHRoYXQncyBub3QgYSBkaXJlY3RvcnksIGFuZAorICAgICAgICAvLyBpbnNlcnQgYSB3aGl0ZXNwYWNlIGVsZW1lbnQgLSB0aGlzIGludHJvZHVjZXMgYSB2aXN1YWwgYnJlYWsgaW4gdGhlIGdyaWQgYmV0d2VlbgorICAgICAgICAvLyBmb2xkZXJzIGFuZCBkb2N1bWVudHMuCisgICAgICAgIC8vIFRPRE86IFRoaXMgY29kZSBtYWtlcyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgbW9kZWwsIG5hbWVseSwgdGhhdCBpdCBwZXJmb3JtcyBhCisgICAgICAgIC8vIGJ1Y2tldGVkIHNvcnQgd2hlcmUgZGlyZWN0b3JpZXMgd2lsbCBhbHdheXMgYmUgb3JkZXJlZCBiZWZvcmUgb3RoZXIgZmlsZXMuIENCQi4KKyAgICAgICAgTGlzdDxTdHJpbmc+IG1vZGVsSWRzID0gbURlbGVnYXRlLmdldE1vZGVsSWRzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kZWxJZHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghaXNEaXJlY3RvcnkobW9kZWwsIGkpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJyZWFrIGlzIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgbGlzdCwgdGhlbiB0aGVyZSBhcmUgYWN0dWFsbHkgbm8KKyAgICAgICAgICAgICAgICAvLyBkaXJlY3Rvcmllcy4gSW4gdGhhdCBjYXNlLCBkb24ndCBpbnNlcnQgYSBicmVhayBhdCBhbGwuCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1CcmVha1Bvc2l0aW9uID0gaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5vbk1vZGVsVXBkYXRlRmFpbGVkKGUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0SXRlbVZpZXdUeXBlKGludCBwKSB7CisgICAgICAgIGlmIChwID09IG1CcmVha1Bvc2l0aW9uKSB7CisgICAgICAgICAgICByZXR1cm4gSVRFTV9UWVBFX1NFQ1RJT05fQlJFQUs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldEl0ZW1WaWV3VHlwZSh0b0RlbGVnYXRlUG9zaXRpb24ocCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgYW4gaXRlbSBpbiB0aGUgZGVsZWdhdGUsIGFkanVzdGluZworICAgICAqIHZhbHVlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlIGJyZWFrIHBvc2l0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHAgUG9zaXRpb24gd2l0aGluIHRoZSB2aWV3CisgICAgICogQHJldHVybiBQb3NpdGlvbiB3aXRoaW4gdGhlIGRlbGVnYXRlCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgdG9EZWxlZ2F0ZVBvc2l0aW9uKGludCBwKSB7CisgICAgICAgIHJldHVybiAobUJyZWFrUG9zaXRpb24gIT0gLTEgJiYgcCA+IG1CcmVha1Bvc2l0aW9uKSA/IHAgLSAxIDogcDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiBhbiBpdGVtIGluIHRoZSB2aWV3LCBhZGp1c3RpbmcKKyAgICAgKiB2YWx1ZXMgdGhhdCBhcmUgZ3JlYXRlciB0aGFuIHRoZSBicmVhayBwb3NpdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwIFBvc2l0aW9uIHdpdGhpbiB0aGUgZGVsZWdhdGUKKyAgICAgKiBAcmV0dXJuIFBvc2l0aW9uIHdpdGhpbiB0aGUgdmlldworICAgICAqLworICAgIHByaXZhdGUgaW50IHRvVmlld1Bvc2l0aW9uKGludCBwKSB7CisgICAgICAgIC8vIElmIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYnJlYWssIGluY3JlYXNlIGJ5IG9uZS4KKyAgICAgICAgcmV0dXJuIChtQnJlYWtQb3NpdGlvbiAhPSAtMSAmJiBwID49IG1CcmVha1Bvc2l0aW9uKSA/IHAgKyAxIDogcDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRlKFN0cmluZy4uLiBpZHMpIHsKKyAgICAgICAgLy8gTk9URTogV2UgaGVhciBhYm91dCB0aGVzZSBjaGFuZ2VzIGFuZCBhZGp1c3QgYnJlYWsgcG9zaXRpb24KKyAgICAgICAgLy8gaW4gb3VyIEFkYXB0ZXJEYXRhT2JzZXJ2ZXIuCisgICAgICAgIHJldHVybiBtRGVsZWdhdGUuaGlkZShpZHMpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgdW5oaWRlKFNwYXJzZUFycmF5PFN0cmluZz4gaWRzKSB7CisgICAgICAgIC8vIE5PVEU6IFdlIGhlYXIgYWJvdXQgdGhlc2UgY2hhbmdlcyBhbmQgYWRqdXN0IGJyZWFrIHBvc2l0aW9uCisgICAgICAgIC8vIGluIG91ciBBZGFwdGVyRGF0YU9ic2VydmVyLgorICAgICAgICBtRGVsZWdhdGUudW5oaWRlKGlkcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgTGlzdDxTdHJpbmc+IGdldE1vZGVsSWRzKCkgeworICAgICAgICByZXR1cm4gbURlbGVnYXRlLmdldE1vZGVsSWRzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgU3RyaW5nIGdldE1vZGVsSWQoaW50IHApIHsKKyAgICAgICAgcmV0dXJuIChwID09IG1CcmVha1Bvc2l0aW9uKSA/IG51bGwgOiBtRGVsZWdhdGUuZ2V0TW9kZWxJZCh0b0RlbGVnYXRlUG9zaXRpb24ocCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoU3RyaW5nIGlkKSB7CisgICAgICAgIG1EZWxlZ2F0ZS5vbkl0ZW1TZWxlY3Rpb25DaGFuZ2VkKGlkKTsKKyAgICB9CisKKyAgICAvLyBMaXN0ZW5lciB3ZSBhZGQgdG8gb3VyIGRlbGVnYXRlLiBUaGlzIGFsbG93cyB1cyB0byByZWxheSBldmVudHMgcHVibGlzaGVkCisgICAgLy8gYnkgdGhlIGRlbGVnYXRlIHRvIG91ciBsaXN0ZW5lcnMgKHByZXN1bWFibHkgUmVjeWNsZXJWaWV3KSB3aXRoIGFkanVzdGVkIHBvc2l0aW9ucy4KKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEV2ZW50UmVsYXkgZXh0ZW5kcyBBZGFwdGVyRGF0YU9ic2VydmVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2VkKCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1SYW5nZUNoYW5nZWQoaW50IHBvc2l0aW9uU3RhcnQsIGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtUmFuZ2VDaGFuZ2VkKGludCBwb3NpdGlvblN0YXJ0LCBpbnQgaXRlbUNvdW50LCBPYmplY3QgcGF5bG9hZCkgeworICAgICAgICAgICAgY2hlY2tBcmd1bWVudChpdGVtQ291bnQgPT0gMSk7CisgICAgICAgICAgICBub3RpZnlJdGVtUmFuZ2VDaGFuZ2VkKHRvVmlld1Bvc2l0aW9uKHBvc2l0aW9uU3RhcnQpLCBpdGVtQ291bnQsIHBheWxvYWQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtUmFuZ2VJbnNlcnRlZChpbnQgcG9zaXRpb25TdGFydCwgaW50IGl0ZW1Db3VudCkgeworICAgICAgICAgICAgY2hlY2tBcmd1bWVudChpdGVtQ291bnQgPT0gMSk7CisgICAgICAgICAgICBpZiAocG9zaXRpb25TdGFydCA8IG1CcmVha1Bvc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgbUJyZWFrUG9zaXRpb24rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vdGlmeUl0ZW1SYW5nZUluc2VydGVkKHRvVmlld1Bvc2l0aW9uKHBvc2l0aW9uU3RhcnQpLCBpdGVtQ291bnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtUmFuZ2VSZW1vdmVkKGludCBwb3NpdGlvblN0YXJ0LCBpbnQgaXRlbUNvdW50KSB7CisgICAgICAgICAgICBjaGVja0FyZ3VtZW50KGl0ZW1Db3VudCA9PSAxKTsKKyAgICAgICAgICAgIGlmIChwb3NpdGlvblN0YXJ0IDwgbUJyZWFrUG9zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBtQnJlYWtQb3NpdGlvbi0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbm90aWZ5SXRlbVJhbmdlUmVtb3ZlZCh0b1ZpZXdQb3NpdGlvbihwb3NpdGlvblN0YXJ0KSwgaXRlbUNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbVJhbmdlTW92ZWQoaW50IGZyb21Qb3NpdGlvbiwgaW50IHRvUG9zaXRpb24sIGludCBpdGVtQ291bnQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhlIG1vc3QgZWxlZ2FudCB0cmFuc3BhcmVudCBibGFuayBib3ggdGhhdCBzcGFucyBOIHJvd3MgZXZlciBjb25jZWl2ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRW1wdHlEb2N1bWVudEhvbGRlciBleHRlbmRzIERvY3VtZW50SG9sZGVyIHsKKyAgICAgICAgZmluYWwgaW50IG1WaXNpYmxlSGVpZ2h0OworCisgICAgICAgIHB1YmxpYyBFbXB0eURvY3VtZW50SG9sZGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgbmV3IFNwYWNlKGNvbnRleHQpKTsKKworICAgICAgICAgICAgLy8gUGVyIFVYIHNwZWMsIHRoaXMgcHV0cyBhIGJpZ2dlciBnYXAgYmV0d2VlbiB0aGUgZm9sZGVycyBhbmQgZG9jdW1lbnRzIGluIHRoZSBncmlkLgorICAgICAgICAgICAgbVZpc2libGVIZWlnaHQgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgUi5kaW1lbi5ncmlkX2l0ZW1fbWFyZ2luKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGJpbmQoU3RhdGUgc3RhdGUpIHsKKyAgICAgICAgICAgIGJpbmQobnVsbCwgbnVsbCwgc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGJpbmQoQ3Vyc29yIGN1cnNvciwgU3RyaW5nIG1vZGVsSWQsIFN0YXRlIHN0YXRlKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUuZGVyaXZlZE1vZGUgPT0gU3RhdGUuTU9ERV9HUklEKSB7CisgICAgICAgICAgICAgICAgaXRlbVZpZXcuc2V0TWluaW11bUhlaWdodChtVmlzaWJsZUhlaWdodCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGl0ZW1WaWV3LnNldE1pbmltdW1IZWlnaHQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvbW9kZWwvRG9jdW1lbnRJbmZvLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvbW9kZWwvRG9jdW1lbnRJbmZvLmphdmEKaW5kZXggNjliNTc0ZC4uODNkZjE4YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL21vZGVsL0RvY3VtZW50SW5mby5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Eb2N1bWVudEluZm8uamF2YQpAQCAtMjUxLDYgKzI1MSwxMCBAQAogICAgICAgICByZXR1cm4gaXNEaXJlY3RvcnkoKSB8fCBpc0FyY2hpdmUoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1ZpcnR1YWxEb2N1bWVudCgpIHsKKyAgICAgICAgcmV0dXJuIChmbGFncyAmIERvY3VtZW50LkZMQUdfVklSVFVBTF9ET0NVTUVOVCkgIT0gMDsKKyAgICB9CisKICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewogICAgICAgICByZXR1cm4gZGVyaXZlZFVyaS5oYXNoQ29kZSgpICsgbWltZVR5cGUuaGFzaENvZGUoKTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvbW9kZWwvUm9vdEluZm8uamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCmluZGV4IDRjYWE4OTEuLjEyYzBiOGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9tb2RlbC9Sb290SW5mby5qYXZhCkBAIC0xNzQsNyArMTc0LDcgQEAKICAgICAgICAgICAgIGRlcml2ZWRJY29uID0gUi5kcmF3YWJsZS5pY19yb290X2hvbWU7CiAgICAgICAgICAgICBkZXJpdmVkVHlwZSA9IFRZUEVfTE9DQUw7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNFeHRlcm5hbFN0b3JhZ2UoKSkgewotICAgICAgICAgICAgZGVyaXZlZEljb24gPSBSLmRyYXdhYmxlLmljX3Jvb3Rfc2RjYXJkOworICAgICAgICAgICAgZGVyaXZlZEljb24gPSBSLmRyYXdhYmxlLmljX3Jvb3Rfc21hcnRwaG9uZTsKICAgICAgICAgICAgIGRlcml2ZWRUeXBlID0gVFlQRV9MT0NBTDsKICAgICAgICAgfSBlbHNlIGlmIChpc0Rvd25sb2FkcygpKSB7CiAgICAgICAgICAgICBkZXJpdmVkSWNvbiA9IFIuZHJhd2FibGUuaWNfcm9vdF9kb3dubG9hZDsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9zZXJ2aWNlcy9Db3B5Sm9iLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvQ29weUpvYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmODliNGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvQ29weUpvYi5qYXZhCkBAIC0wLDAgKzEsNTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlczsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRG9jdW1lbnRzQXBwbGljYXRpb24uYWNxdWlyZVVuc3RhYmxlUHJvdmlkZXJPclRocm93OworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TaGFyZWQuREVCVUc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mby5nZXRDdXJzb3JMb25nOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fQ09QWTsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24uYmFzZS5QcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQ7CisKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3RyaW5nUmVzOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFByb3ZpZGVyQ2xpZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQXNzZXRGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5DYW5jZWxsYXRpb25TaWduYWw7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5EYXRlVXRpbHM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLndlYmtpdC5NaW1lVHlwZU1hcDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50U3RhY2s7CisKK2ltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworY2xhc3MgQ29weUpvYiBleHRlbmRzIEpvYiB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb3B5Sm9iIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPR1JFU1NfSU5URVJWQUxfTUlMTElTID0gMTAwMDsKKyAgICBmaW5hbCBMaXN0PERvY3VtZW50SW5mbz4gbVNyY0ZpbGVzOworCisgICAgLy8gUHJvdmlkZXIgY2xpZW50cyBhcmUgYWNxdWlyZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBlYWNoIGNvcHkgam9iLiBOb3RlIHRoYXQgdGhlcmUgaXMgYW4KKyAgICAvLyBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgYWxsIHNyY3MgY29tZSBmcm9tIHRoZSBzYW1lIGF1dGhvcml0eS4KKyAgICBDb250ZW50UHJvdmlkZXJDbGllbnQgc3JjQ2xpZW50OworICAgIENvbnRlbnRQcm92aWRlckNsaWVudCBkc3RDbGllbnQ7CisKKyAgICBwcml2YXRlIGxvbmcgbVN0YXJ0VGltZSA9IC0xOworICAgIHByaXZhdGUgbG9uZyBtQmF0Y2hTaXplOworICAgIHByaXZhdGUgbG9uZyBtQnl0ZXNDb3BpZWQ7CisgICAgcHJpdmF0ZSBsb25nIG1MYXN0Tm90aWZpY2F0aW9uVGltZTsKKyAgICAvLyBTcGVlZCBlc3RpbWF0aW9uCisgICAgcHJpdmF0ZSBsb25nIG1CeXRlc0NvcGllZFNhbXBsZTsKKyAgICBwcml2YXRlIGxvbmcgbVNhbXBsZVRpbWU7CisgICAgcHJpdmF0ZSBsb25nIG1TcGVlZDsKKyAgICBwcml2YXRlIGxvbmcgbVJlbWFpbmluZ1RpbWU7CisKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgZmlsZXMgdG8gYSBkZXN0aW5hdGlvbiBpZGVudGlmaWVkIGJ5IHtAY29kZSBkZXN0aW5hdGlvbn0uCisgICAgICogQHNlZSBAbGluayB7QGxpbmsgSm9ifSBjb25zdHJ1Y3RvciBmb3IgbW9zdCBwYXJhbSBkZXNjcmlwdGlvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3JjcyBMaXN0IG9mIGZpbGVzIHRvIGJlIGNvcGllZC4KKyAgICAgKi8KKyAgICBDb3B5Sm9iKENvbnRleHQgc2VydmljZUNvbnRleHQsIENvbnRleHQgYXBwQ29udGV4dCwgTGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICBTdHJpbmcgaWQsIERvY3VtZW50U3RhY2sgZGVzdGluYXRpb24sIExpc3Q8RG9jdW1lbnRJbmZvPiBzcmNzKSB7CisgICAgICAgIHN1cGVyKE9QRVJBVElPTl9DT1BZLCBzZXJ2aWNlQ29udGV4dCwgYXBwQ29udGV4dCwgbGlzdGVuZXIsIGlkLCBkZXN0aW5hdGlvbik7CisKKyAgICAgICAgY2hlY2tBcmd1bWVudCghc3Jjcy5pc0VtcHR5KCkpOworICAgICAgICB0aGlzLm1TcmNGaWxlcyA9IHNyY3M7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgQnVpbGRlciBjcmVhdGVQcm9ncmVzc0J1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVQcm9ncmVzc0J1aWxkZXIoCisgICAgICAgICAgICAgICAgc2VydmljZUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvcHlfbm90aWZpY2F0aW9uX3RpdGxlKSwKKyAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLmljX21lbnVfY29weSwKKyAgICAgICAgICAgICAgICBzZXJ2aWNlQ29udGV4dC5nZXRTdHJpbmcoYW5kcm9pZC5SLnN0cmluZy5jYW5jZWwpLAorICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuaWNfY2FiX2NhbmNlbCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE5vdGlmaWNhdGlvbiBnZXRTZXR1cE5vdGlmaWNhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGdldFNldHVwTm90aWZpY2F0aW9uKHNlcnZpY2VDb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5jb3B5X3ByZXBhcmluZykpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNob3VsZFVwZGF0ZVByb2dyZXNzKCkgeworICAgICAgICAvLyBXYWl0IGEgd2hpbGUgYmV0d2VlbiB1cGRhdGVzIDopCisgICAgICAgIHJldHVybiBlbGFwc2VkUmVhbHRpbWUoKSAtIG1MYXN0Tm90aWZpY2F0aW9uVGltZSA+IFBST0dSRVNTX0lOVEVSVkFMX01JTExJUzsKKyAgICB9CisKKyAgICBOb3RpZmljYXRpb24gZ2V0UHJvZ3Jlc3NOb3RpZmljYXRpb24oQFN0cmluZ1JlcyBpbnQgbXNnSWQpIHsKKyAgICAgICAgZG91YmxlIGNvbXBsZXRlZCA9IChkb3VibGUpIHRoaXMubUJ5dGVzQ29waWVkIC8gbUJhdGNoU2l6ZTsKKyAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRQcm9ncmVzcygxMDAsIChpbnQpIChjb21wbGV0ZWQgKiAxMDApLCBmYWxzZSk7CisgICAgICAgIG1Qcm9ncmVzc0J1aWxkZXIuc2V0Q29udGVudEluZm8oCisgICAgICAgICAgICAgICAgTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZSgpLmZvcm1hdChjb21wbGV0ZWQpKTsKKyAgICAgICAgaWYgKG1SZW1haW5pbmdUaW1lID4gMCkgeworICAgICAgICAgICAgbVByb2dyZXNzQnVpbGRlci5zZXRDb250ZW50VGV4dChzZXJ2aWNlQ29udGV4dC5nZXRTdHJpbmcobXNnSWQsCisgICAgICAgICAgICAgICAgICAgIERhdGVVdGlscy5mb3JtYXREdXJhdGlvbihtUmVtYWluaW5nVGltZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Qcm9ncmVzc0J1aWxkZXIuc2V0Q29udGVudFRleHQobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1lbWJlciB3aGVuIHdlIGxhc3QgcmV0dXJuZWQgcHJvZ3Jlc3Mgc28gd2UgY2FuIHByb3ZpZGUgYW4gYW5zd2VyCisgICAgICAgIC8vIGluIHNob3VsZFVwZGF0ZVByb2dyZXNzLgorICAgICAgICBtTGFzdE5vdGlmaWNhdGlvblRpbWUgPSBlbGFwc2VkUmVhbHRpbWUoKTsKKyAgICAgICAgcmV0dXJuIG1Qcm9ncmVzc0J1aWxkZXIuYnVpbGQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTm90aWZpY2F0aW9uIGdldFByb2dyZXNzTm90aWZpY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gZ2V0UHJvZ3Jlc3NOb3RpZmljYXRpb24oUi5zdHJpbmcuY29weV9yZW1haW5pbmcpOworICAgIH0KKworICAgIHZvaWQgb25CeXRlc0NvcGllZChsb25nIG51bUJ5dGVzKSB7CisgICAgICAgIHRoaXMubUJ5dGVzQ29waWVkICs9IG51bUJ5dGVzOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyBhbiBlc3RpbWF0ZSBvZiB0aGUgcmVtYWluaW5nIHRpbWUgaW4gdGhlIGNvcHkuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVSZW1haW5pbmdUaW1lRXN0aW1hdGUoKSB7CisgICAgICAgIGxvbmcgZWxhcHNlZFRpbWUgPSBlbGFwc2VkUmVhbHRpbWUoKSAtIG1TdGFydFRpbWU7CisKKyAgICAgICAgZmluYWwgbG9uZyBzYW1wbGVEdXJhdGlvbiA9IGVsYXBzZWRUaW1lIC0gbVNhbXBsZVRpbWU7CisgICAgICAgIGZpbmFsIGxvbmcgc2FtcGxlU3BlZWQgPSAoKG1CeXRlc0NvcGllZCAtIG1CeXRlc0NvcGllZFNhbXBsZSkgKiAxMDAwKSAvIHNhbXBsZUR1cmF0aW9uOworICAgICAgICBpZiAobVNwZWVkID09IDApIHsKKyAgICAgICAgICAgIG1TcGVlZCA9IHNhbXBsZVNwZWVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVNwZWVkID0gKCgzICogbVNwZWVkKSArIHNhbXBsZVNwZWVkKSAvIDQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAobVNhbXBsZVRpbWUgPiAwICYmIG1TcGVlZCA+IDApIHsKKyAgICAgICAgICAgIG1SZW1haW5pbmdUaW1lID0gKChtQmF0Y2hTaXplIC0gbUJ5dGVzQ29waWVkKSAqIDEwMDApIC8gbVNwZWVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVJlbWFpbmluZ1RpbWUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgbVNhbXBsZVRpbWUgPSBlbGFwc2VkVGltZTsKKyAgICAgICAgbUJ5dGVzQ29waWVkU2FtcGxlID0gbUJ5dGVzQ29waWVkOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIE5vdGlmaWNhdGlvbiBnZXRGYWlsdXJlTm90aWZpY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gZ2V0RmFpbHVyZU5vdGlmaWNhdGlvbigKKyAgICAgICAgICAgICAgICBSLnBsdXJhbHMuY29weV9lcnJvcl9ub3RpZmljYXRpb25fdGl0bGUsIFIuZHJhd2FibGUuaWNfbWVudV9jb3B5KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIHJ1bihGaWxlT3BlcmF0aW9uU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgbVN0YXJ0VGltZSA9IGVsYXBzZWRSZWFsdGltZSgpOworCisgICAgICAgIC8vIEFjcXVpcmUgY29udGVudCBwcm92aWRlcnMuCisgICAgICAgIHNyY0NsaWVudCA9IGFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdygKKyAgICAgICAgICAgICAgICBnZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBtU3JjRmlsZXMuZ2V0KDApLmF1dGhvcml0eSk7CisgICAgICAgIGRzdENsaWVudCA9IGFjcXVpcmVVbnN0YWJsZVByb3ZpZGVyT3JUaHJvdygKKyAgICAgICAgICAgICAgICBnZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBzdGFjay5wZWVrKCkuYXV0aG9yaXR5KTsKKworICAgICAgICAvLyBjbGllbnQKKyAgICAgICAgbUJhdGNoU2l6ZSA9IGNhbGN1bGF0ZVNpemUoc3JjQ2xpZW50LCBtU3JjRmlsZXMpOworCisgICAgICAgIERvY3VtZW50SW5mbyBzcmNJbmZvOworICAgICAgICBEb2N1bWVudEluZm8gZHN0SW5mbzsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU3JjRmlsZXMuc2l6ZSgpICYmICFpc0NhbmNlbGVkKCk7ICsraSkgeworICAgICAgICAgICAgc3JjSW5mbyA9IG1TcmNGaWxlcy5nZXQoaSk7CisgICAgICAgICAgICBkc3RJbmZvID0gc3RhY2sucGVlaygpOworCisgICAgICAgICAgICAvLyBHdWFyZCB1bnN1cHBvcnRlZCByZWN1cnNpdmUgb3BlcmF0aW9uLgorICAgICAgICAgICAgaWYgKGRzdEluZm8uZXF1YWxzKHNyY0luZm8pIHx8IGlzRGVzY2VuZGVudE9mKHNyY0luZm8sIGRzdEluZm8pKSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJTa2lwcGluZyByZWN1cnNpdmUgb3BlcmF0aW9uIG9uIGRpcmVjdG9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICArIGRzdEluZm8uZGVyaXZlZFVyaSk7CisgICAgICAgICAgICAgICAgb25GaWxlRmFpbGVkKHNyY0luZm8pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywKKyAgICAgICAgICAgICAgICAgICAgIlBlcmZvcm1pbmcgb3AtdHlwZToiICsgdHlwZSgpICsgIiBvZiAiICsgc3JjSW5mby5kaXNwbGF5TmFtZQorICAgICAgICAgICAgICAgICAgICArICIgKCIgKyBzcmNJbmZvLmRlcml2ZWRVcmkgKyAiKSIgKyAiIHRvICIgKyBkc3RJbmZvLmRpc3BsYXlOYW1lCisgICAgICAgICAgICAgICAgICAgICsgIiAoIiArIGRzdEluZm8uZGVyaXZlZFVyaSArICIpIik7CisKKyAgICAgICAgICAgIHByb2Nlc3NEb2N1bWVudChzcmNJbmZvLCBkc3RJbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIExvZ3MgcHJvZ3Jlc3Mgb24gdGhlIGN1cnJlbnQgY29weSBvcGVyYXRpb24uIERpc3BsYXlzL1VwZGF0ZXMgdGhlIHByb2dyZXNzIG5vdGlmaWNhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBieXRlc0NvcGllZAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBtYWtlQ29weVByb2dyZXNzKGxvbmcgYnl0ZXNDb3BpZWQpIHsKKyAgICAgICAgb25CeXRlc0NvcGllZChieXRlc0NvcGllZCk7CisgICAgICAgIGlmIChzaG91bGRVcGRhdGVQcm9ncmVzcygpKSB7CisgICAgICAgICAgICB1cGRhdGVSZW1haW5pbmdUaW1lRXN0aW1hdGUoKTsKKyAgICAgICAgICAgIGxpc3RlbmVyLm9uUHJvZ3Jlc3ModGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb3BpZXMgYSB0aGUgZ2l2ZW4gZG9jdW1lbnQgdG8gdGhlIGdpdmVuIGxvY2F0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIHNyY0luZm8gRG9jdW1lbnRJbmZvcyBmb3IgdGhlIGRvY3VtZW50cyB0byBjb3B5LgorICAgICAqIEBwYXJhbSBkc3REaXJJbmZvIFRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuCisgICAgICogQHBhcmFtIG1vZGUgVGhlIHRyYW5zZmVyIG1vZGUgKGNvcHkgb3IgbW92ZSkuCisgICAgICogQHJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCisgICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBib29sZWFuIHByb2Nlc3NEb2N1bWVudChEb2N1bWVudEluZm8gc3JjSW5mbywgRG9jdW1lbnRJbmZvIGRzdERpckluZm8pIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworCisgICAgICAgIC8vIFRPRE86IFdoZW4gb3B0aW1pemVkIGNvcHkga2lja3MgaW4sIHdlJ2xsIG5vdCBtYWtpbmcgYW55IHByb2dyZXNzIHVwZGF0ZXMuCisgICAgICAgIC8vIEZvciBub3cuIExvY2FsIHN0b3JhZ2UgaXNuJ3QgdXNpbmcgb3B0aW1pemVkIGNvcHkuCisKKyAgICAgICAgLy8gV2hlbiBjb3B5aW5nIHdpdGhpbiB0aGUgc2FtZSBwcm92aWRlciwgdHJ5IHRvIHVzZSBvcHRpbWl6ZWQgY29weWluZyBhbmQgbW92aW5nLgorICAgICAgICAvLyBJZiBub3Qgc3VwcG9ydGVkLCB0aGVuIGZhbGxiYWNrIHRvIGJ5dGUtYnktYnl0ZSBjb3B5L21vdmUuCisgICAgICAgIGlmIChzcmNJbmZvLmF1dGhvcml0eS5lcXVhbHMoZHN0RGlySW5mby5hdXRob3JpdHkpKSB7CisgICAgICAgICAgICBpZiAoKHNyY0luZm8uZmxhZ3MgJiBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX0NPUFkpICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRzQ29udHJhY3QuY29weURvY3VtZW50KHNyY0NsaWVudCwgc3JjSW5mby5kZXJpdmVkVXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgZHN0RGlySW5mby5kZXJpdmVkVXJpKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG9uRmlsZUZhaWxlZChzcmNJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgY291bGRuJ3QgZG8gYW4gb3B0aW1pemVkIGNvcHkuLi53ZSBmYWxsIGJhY2sgdG8gdmFuaWxsYSBieXRlIGNvcHkuCisgICAgICAgIHJldHVybiBieXRlQ29weURvY3VtZW50KHNyY0luZm8sIGRzdERpckluZm8pOworICAgIH0KKworICAgIGJvb2xlYW4gYnl0ZUNvcHlEb2N1bWVudChEb2N1bWVudEluZm8gc3JjSW5mbywgRG9jdW1lbnRJbmZvIGRzdERpckluZm8pCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRzdE1pbWVUeXBlOworICAgICAgICBmaW5hbCBTdHJpbmcgZHN0RGlzcGxheU5hbWU7CisKKyAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXMgdmlydHVhbCwgYnV0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5vdGhlciBmb3JtYXQsIHRoZW4gdHJ5IHRvIGNvcHkgaXQKKyAgICAgICAgLy8gYXMgc3VjaCBmb3JtYXQuIEFsc28sIGFwcGVuZCBhbiBleHRlbnNpb24gZm9yIHRoZSB0YXJnZXQgbWltZSB0eXBlIChpZiBrbm93bikuCisgICAgICAgIGlmIChzcmNJbmZvLmlzVmlydHVhbERvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIHN0cmVhbVR5cGVzID0gZ2V0Q29udGVudFJlc29sdmVyKCkuZ2V0U3RyZWFtVHlwZXMoCisgICAgICAgICAgICAgICAgICAgIHNyY0luZm8uZGVyaXZlZFVyaSwgIiovKiIpOworICAgICAgICAgICAgaWYgKHN0cmVhbVR5cGVzICE9IG51bGwgJiYgc3RyZWFtVHlwZXMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGRzdE1pbWVUeXBlID0gc3RyZWFtVHlwZXNbMF07CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGV4dGVuc2lvbiA9IE1pbWVUeXBlTWFwLmdldFNpbmdsZXRvbigpLgorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RXh0ZW5zaW9uRnJvbU1pbWVUeXBlKGRzdE1pbWVUeXBlKTsKKyAgICAgICAgICAgICAgICBkc3REaXNwbGF5TmFtZSA9IHNyY0luZm8uZGlzcGxheU5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgKGV4dGVuc2lvbiAhPSBudWxsID8gIi4iICsgZXh0ZW5zaW9uIDogc3JjSW5mby5kaXNwbGF5TmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFRoZSB2aXJ0dWFsIGZpbGUgaXMgbm90IGF2YWlsYWJsZSBhcyBhbnkgYWx0ZXJuYXRpdmUgc3RyZWFtYWJsZSBmb3JtYXQuCisgICAgICAgICAgICAgICAgLy8gVE9ETzogTG9nIGZhaWx1cmVzLgorICAgICAgICAgICAgICAgIG9uRmlsZUZhaWxlZChzcmNJbmZvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkc3RNaW1lVHlwZSA9IHNyY0luZm8ubWltZVR5cGU7CisgICAgICAgICAgICBkc3REaXNwbGF5TmFtZSA9IHNyY0luZm8uZGlzcGxheU5hbWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDcmVhdGUgdGhlIHRhcmdldCBkb2N1bWVudCAoZWl0aGVyIGEgZmlsZSBvciBhIGRpcmVjdG9yeSksIHRoZW4gY29weSByZWN1cnNpdmVseSB0aGUKKyAgICAgICAgLy8gY29udGVudHMgKGJ5dGVzIG9yIGNoaWxkcmVuKS4KKyAgICAgICAgZmluYWwgVXJpIGRzdFVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmNyZWF0ZURvY3VtZW50KGRzdENsaWVudCwKKyAgICAgICAgICAgICAgICBkc3REaXJJbmZvLmRlcml2ZWRVcmksIGRzdE1pbWVUeXBlLCBkc3REaXNwbGF5TmFtZSk7CisgICAgICAgIGlmIChkc3RVcmkgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRpcmVjdG9yeSwgdGhlIGVudGlyZSBzdWJkaXIgd2lsbCBub3QgYmUgY29waWVkIG92ZXIuCisgICAgICAgICAgICBvbkZpbGVGYWlsZWQoc3JjSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBEb2N1bWVudEluZm8gZHN0SW5mbyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkc3RJbmZvID0gRG9jdW1lbnRJbmZvLmZyb21VcmkoZ2V0Q29udGVudFJlc29sdmVyKCksIGRzdFVyaSk7CisgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBvbkZpbGVGYWlsZWQoc3JjSW5mbyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIHN1Y2Nlc3M7CisgICAgICAgIGlmIChEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhzcmNJbmZvLm1pbWVUeXBlKSkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGNvcHlEaXJlY3RvcnlIZWxwZXIoc3JjSW5mbywgZHN0SW5mbyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdWNjZXNzID0gY29weUZpbGVIZWxwZXIoc3JjSW5mbywgZHN0SW5mbywgZHN0TWltZVR5cGUpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlcyByZWN1cnNpb24gaW50byBhIGRpcmVjdG9yeSBhbmQgY29weWluZyBpdHMgY29udGVudHMuIE5vdGUgdGhhdCBpbiBsaW51eCB0ZXJtcywgdGhpcworICAgICAqIGRvZXMgdGhlIGVxdWl2YWxlbnQgb2YgImNwIHNyYy8qIGRzdCIsIG5vdCAiY3AgLXIgc3JjIGRzdCIuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3JjRGlySW5mbyBJbmZvIG9mIHRoZSBkaXJlY3RvcnkgdG8gY29weSBmcm9tLiBUaGUgcm91dGluZSB3aWxsIGNvcHkgdGhlIGRpcmVjdG9yeSdzCisgICAgICogICAgICAgICAgICBjb250ZW50cywgbm90IHRoZSBkaXJlY3RvcnkgaXRzZWxmLgorICAgICAqIEBwYXJhbSBkc3REaXJJbmZvIEluZm8gb2YgdGhlIGRpcmVjdG9yeSB0byBjb3B5IHRvLiBNdXN0IGJlIGNyZWF0ZWQgYmVmb3JlaGFuZC4KKyAgICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcywgZmFsc2UgaWYgc29tZSBvZiB0aGUgY2hpbGRyZW4gZmFpbGVkIHRvIGNvcHkuCisgICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gY29weURpcmVjdG9yeUhlbHBlcihEb2N1bWVudEluZm8gc3JjRGlySW5mbywgRG9jdW1lbnRJbmZvIGRzdERpckluZm8pCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gUmVjdXJzZSBpbnRvIGRpcmVjdG9yaWVzLiBDb3B5IGNoaWxkcmVuIGludG8gdGhlIG5ldyBzdWJkaXJlY3RvcnkuCisgICAgICAgIGZpbmFsIFN0cmluZyBxdWVyeUNvbHVtbnNbXSA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwKKyAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsCisgICAgICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fU0laRSwKKyAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fRkxBR1MKKyAgICAgICAgfTsKKyAgICAgICAgQ3Vyc29yIGN1cnNvciA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHRydWU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBJdGVyYXRlIG92ZXIgc3JjcyBpbiB0aGUgZGlyZWN0b3J5OyBjb3B5IHRvIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkuCisgICAgICAgICAgICBmaW5hbCBVcmkgcXVlcnlVcmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZENoaWxkRG9jdW1lbnRzVXJpKHNyY0RpckluZm8uYXV0aG9yaXR5LAorICAgICAgICAgICAgICAgICAgICBzcmNEaXJJbmZvLmRvY3VtZW50SWQpOworICAgICAgICAgICAgY3Vyc29yID0gc3JjQ2xpZW50LnF1ZXJ5KHF1ZXJ5VXJpLCBxdWVyeUNvbHVtbnMsIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICAgICAgRG9jdW1lbnRJbmZvIHNyY0luZm87CisgICAgICAgICAgICB3aGlsZSAoY3Vyc29yLm1vdmVUb05leHQoKSkgeworICAgICAgICAgICAgICAgIHNyY0luZm8gPSBEb2N1bWVudEluZm8uZnJvbUN1cnNvcihjdXJzb3IsIHNyY0RpckluZm8uYXV0aG9yaXR5KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzICY9IHByb2Nlc3NEb2N1bWVudChzcmNJbmZvLCBkc3REaXJJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KGN1cnNvcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIYW5kbGVzIGNvcHlpbmcgYSBzaW5nbGUgZmlsZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBzcmNVcmlJbmZvIEluZm8gb2YgdGhlIGZpbGUgdG8gY29weSBmcm9tLgorICAgICAqIEBwYXJhbSBkc3RVcmlJbmZvIEluZm8gb2YgdGhlICpmaWxlKiB0byBjb3B5IHRvLiBNdXN0IGJlIGNyZWF0ZWQgYmVmb3JlaGFuZC4KKyAgICAgKiBAcGFyYW0gbWltZVR5cGUgTWltZSB0eXBlIGZvciB0aGUgdGFyZ2V0LiBDYW4gYmUgZGlmZmVyZW50IHRoYW4gc291cmNlIGZvciB2aXJ0dWFsIGZpbGVzLgorICAgICAqIEByZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJvci4KKyAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBjb3B5RmlsZUhlbHBlcihEb2N1bWVudEluZm8gc3JjSW5mbywgRG9jdW1lbnRJbmZvIGRzdEluZm8sIFN0cmluZyBtaW1lVHlwZSkKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAvLyBDb3B5IGFuIGluZGl2aWR1YWwgZmlsZS4KKyAgICAgICAgQ2FuY2VsbGF0aW9uU2lnbmFsIGNhbmNlbGxlciA9IG5ldyBDYW5jZWxsYXRpb25TaWduYWwoKTsKKyAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Igc3JjRmlsZSA9IG51bGw7CisgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGRzdEZpbGUgPSBudWxsOworICAgICAgICBJbnB1dFN0cmVhbSBzcmMgPSBudWxsOworICAgICAgICBPdXRwdXRTdHJlYW0gZHN0ID0gbnVsbDsKKworICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gSWYgdGhlIGZpbGUgaXMgdmlydHVhbCwgYnV0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW5vdGhlciBmb3JtYXQsIHRoZW4gdHJ5IHRvIGNvcHkgaXQKKyAgICAgICAgICAgIC8vIGFzIHN1Y2ggZm9ybWF0LgorICAgICAgICAgICAgaWYgKHNyY0luZm8uaXNWaXJ0dWFsRG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIEFzc2V0RmlsZURlc2NyaXB0b3Igc3JjRmlsZUFzQXNzZXQgPQorICAgICAgICAgICAgICAgICAgICAgICAgc3JjQ2xpZW50Lm9wZW5UeXBlZEFzc2V0RmlsZURlc2NyaXB0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0luZm8uZGVyaXZlZFVyaSwgbWltZVR5cGUsIG51bGwsIGNhbmNlbGxlcik7CisgICAgICAgICAgICAgICAgc3JjRmlsZSA9IHNyY0ZpbGVBc0Fzc2V0LmdldFBhcmNlbEZpbGVEZXNjcmlwdG9yKCk7CisgICAgICAgICAgICAgICAgc3JjID0gbmV3IEFzc2V0RmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlSW5wdXRTdHJlYW0oc3JjRmlsZUFzQXNzZXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcmNGaWxlID0gc3JjQ2xpZW50Lm9wZW5GaWxlKHNyY0luZm8uZGVyaXZlZFVyaSwgInIiLCBjYW5jZWxsZXIpOworICAgICAgICAgICAgICAgIHNyYyA9IG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VJbnB1dFN0cmVhbShzcmNGaWxlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHN0RmlsZSA9IGRzdENsaWVudC5vcGVuRmlsZShkc3RJbmZvLmRlcml2ZWRVcmksICJ3IiwgY2FuY2VsbGVyKTsKKyAgICAgICAgICAgIGRzdCA9IG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvci5BdXRvQ2xvc2VPdXRwdXRTdHJlYW0oZHN0RmlsZSk7CisKKyAgICAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVs4MTkyXTsKKyAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICB3aGlsZSAoKGxlbiA9IHNyYy5yZWFkKGJ1ZmZlcikpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQ2FuY2VsZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkNhbmNlbGVkIGNvcHkgbWlkLWNvcHkuIElkOiIgKyBpZCk7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRzdC53cml0ZShidWZmZXIsIDAsIGxlbik7CisgICAgICAgICAgICAgICAgbWFrZUNvcHlQcm9ncmVzcyhsZW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcmNGaWxlLmNoZWNrRXJyb3IoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgb25GaWxlRmFpbGVkKHNyY0luZm8pOworCisgICAgICAgICAgICBpZiAoZHN0RmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgZHN0RmlsZS5jbG9zZVdpdGhFcnJvcihlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gY2xvc2VFcnJvcikgeworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJFcnJvciBjbG9zaW5nIGRlc3RpbmF0aW9uIiwgY2xvc2VFcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGVuc3VyZXMgdGhlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZC4KKyAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KHNyYyk7CisgICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseShkc3QpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAvLyBDbGVhbiB1cCBoYWxmLWNvcGllZCBmaWxlcy4KKyAgICAgICAgICAgIGNhbmNlbGxlci5jYW5jZWwoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuZGVsZXRlRG9jdW1lbnQoZHN0Q2xpZW50LCBkc3RJbmZvLmRlcml2ZWRVcmkpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdGVFeGNlcHRpb25zIHVzdWFsbHkgc2lnbmFsIHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgZGVhZCwgc28gdGhlcmUncyBubworICAgICAgICAgICAgICAgIC8vIHBvaW50IGF0dGVtcHRpbmcgdG8gY29udGludWUuIFByb3BhZ2F0ZSB0aGUgZXhjZXB0aW9uIHVwIHNvIHRoZSBjb3B5IGpvYiBpcworICAgICAgICAgICAgICAgIC8vIGNhbmNlbGxlZC4KKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gY2xlYW51cCBhZnRlciBjb3B5IGVycm9yOiAiICsgc3JjSW5mby5kZXJpdmVkVXJpLCBlKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FsY3VsYXRlcyB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCB0aGUgZG9jdW1lbnRzIGluIHRoZSBsaXN0LiBEaXJlY3RvcmllcyBhcmUgcmVjdXJzZWQKKyAgICAgKiBpbnRvIGFuZCB0b3RhbGVkIHVwLgorICAgICAqCisgICAgICogQHBhcmFtIHNyY3MKKyAgICAgKiBAcmV0dXJuIFNpemUgaW4gYnl0ZXMuCisgICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBsb25nIGNhbGN1bGF0ZVNpemUoQ29udGVudFByb3ZpZGVyQ2xpZW50IGNsaWVudCwgTGlzdDxEb2N1bWVudEluZm8+IHNyY3MpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgbG9uZyByZXN1bHQgPSAwOworCisgICAgICAgIGZvciAoRG9jdW1lbnRJbmZvIHNyYyA6IHNyY3MpIHsKKyAgICAgICAgICAgIGlmIChzcmMuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgICAgIC8vIERpcmVjdG9yaWVzIG5lZWQgdG8gYmUgcmVjdXJzZWQgaW50by4KKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2FsY3VsYXRlRmlsZVNpemVzUmVjdXJzaXZlbHkoY2xpZW50LCBzcmMuZGVyaXZlZFVyaSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzcmMuc2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGN1bGF0ZXMgKHJlY3Vyc2l2ZWx5KSB0aGUgY3VtdWxhdGl2ZSBzaXplIG9mIGFsbCB0aGUgZmlsZXMgdW5kZXIgdGhlIGdpdmVuIGRpcmVjdG9yeS4KKyAgICAgKgorICAgICAqIEB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBjYWxjdWxhdGVGaWxlU2l6ZXNSZWN1cnNpdmVseSgKKyAgICAgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudCBjbGllbnQsIFVyaSB1cmkpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdHJpbmcgYXV0aG9yaXR5ID0gdXJpLmdldEF1dGhvcml0eSgpOworICAgICAgICBmaW5hbCBVcmkgcXVlcnlVcmkgPSBEb2N1bWVudHNDb250cmFjdC5idWlsZENoaWxkRG9jdW1lbnRzVXJpKGF1dGhvcml0eSwKKyAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5nZXREb2N1bWVudElkKHVyaSkpOworICAgICAgICBmaW5hbCBTdHJpbmcgcXVlcnlDb2x1bW5zW10gPSBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwKKyAgICAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFLAorICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9TSVpFCisgICAgICAgIH07CisKKyAgICAgICAgbG9uZyByZXN1bHQgPSAwOworICAgICAgICBDdXJzb3IgY3Vyc29yID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGN1cnNvciA9IGNsaWVudC5xdWVyeShxdWVyeVVyaSwgcXVlcnlDb2x1bW5zLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIHdoaWxlIChjdXJzb3IubW92ZVRvTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKAorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3Vyc29yU3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2UgaW50byBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgICAgICAgICAgZmluYWwgVXJpIGRpclVyaSA9IERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkoYXV0aG9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnNvclN0cmluZyhjdXJzb3IsIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2FsY3VsYXRlRmlsZVNpemVzUmVjdXJzaXZlbHkoY2xpZW50LCBkaXJVcmkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IHJldHVybiAtMSBpZiB0aGUgc2l6ZSBpc24ndCBkZWZpbmVkLiBJZ25vcmUgdGhvc2UgY2FzZXMuCisgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSA9IGdldEN1cnNvckxvbmcoY3Vyc29yLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaXplID4gMCA/IHNpemUgOiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KGN1cnNvcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHZvaWQgY2xlYW51cCgpIHsKKyAgICAgICAgQ29udGVudFByb3ZpZGVyQ2xpZW50LnJlbGVhc2VRdWlldGx5KHNyY0NsaWVudCk7CisgICAgICAgIENvbnRlbnRQcm92aWRlckNsaWVudC5yZWxlYXNlUXVpZXRseShkc3RDbGllbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB7QGNvZGUgZG9jfSBpcyBhIGRlc2NlbmRhbnQgb2Yge0Bjb2RlIHBhcmVudERvY30uCisgICAgICogQHRocm93cyBSZW1vdGVFeGNlcHRpb24KKyAgICAgKi8KKyAgICBib29sZWFuIGlzRGVzY2VuZGVudE9mKERvY3VtZW50SW5mbyBkb2MsIERvY3VtZW50SW5mbyBwYXJlbnREb2MpCisgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHBhcmVudERvYy5pc0RpcmVjdG9yeSgpICYmIGRvYy5hdXRob3JpdHkuZXF1YWxzKHBhcmVudERvYy5hdXRob3JpdHkpKSB7CisgICAgICAgICAgICByZXR1cm4gRG9jdW1lbnRzQ29udHJhY3QuaXNDaGlsZERvY3VtZW50KAorICAgICAgICAgICAgICAgICAgICBkc3RDbGllbnQsIGRvYy5kZXJpdmVkVXJpLCBwYXJlbnREb2MuZGVyaXZlZFVyaSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvRmlsZU9wZXJhdGlvblNlcnZpY2UuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9zZXJ2aWNlcy9GaWxlT3BlcmF0aW9uU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkODdlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvRmlsZU9wZXJhdGlvblNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuc2VydmljZXM7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGw7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuUHJlY29uZGl0aW9ucy5jaGVja1N0YXRlOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLkludERlZjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5JbnRlbnRTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5WaXNpYmxlRm9yVGVzdGluZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudFN0YWNrOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uYmFzZS5PYmplY3RzOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitwdWJsaWMgY2xhc3MgRmlsZU9wZXJhdGlvblNlcnZpY2UgZXh0ZW5kcyBJbnRlbnRTZXJ2aWNlIGltcGxlbWVudHMgSm9iLkxpc3RlbmVyIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmlsZU9wZXJhdGlvblNlcnZpY2UiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfSk9CX0lEID0gImNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkpPQl9JRCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfT1BFUkFUSU9OID0gImNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLk9QRVJBVElPTiI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FOQ0VMID0gImNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLkNBTkNFTCI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU1JDX0xJU1QgPSAiY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU1JDX0xJU1QiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0ZBSUxVUkUgPSAiY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRkFJTFVSRSI7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fVU5LTk9XTiA9IC0xOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9QRVJBVElPTl9DT1BZID0gMTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPUEVSQVRJT05fTU9WRSA9IDI7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT1BFUkFUSU9OX0RFTEVURSA9IDM7CisKKyAgICBASW50RGVmKGZsYWcgPSB0cnVlLCB2YWx1ZSA9IHsKKyAgICAgICAgICAgIE9QRVJBVElPTl9VTktOT1dOLAorICAgICAgICAgICAgT1BFUkFUSU9OX0NPUFksCisgICAgICAgICAgICBPUEVSQVRJT05fTU9WRSwKKyAgICAgICAgICAgIE9QRVJBVElPTl9ERUxFVEUKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBPcFR5cGUge30KKworICAgIC8vIFRPRE86IE1vdmUgaXQgdG8gYSBzaGFyZWQgZmlsZSB3aGVuIG1vcmUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQuCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFJTFVSRV9DT1BZID0gMTsKKworICAgIHByaXZhdGUgUG93ZXJNYW5hZ2VyIG1Qb3dlck1hbmFnZXI7CisKKyAgICBwcml2YXRlIE5vdGlmaWNhdGlvbk1hbmFnZXIgbU5vdGlmaWNhdGlvbk1hbmFnZXI7CisKKyAgICAvLyBUT0RPOiBSZXdvcmsgc2VydmljZSB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgam9icy4KKyAgICBwcml2YXRlIHZvbGF0aWxlIEpvYiBtSm9iOworCisgICAgLy8gRm9yIHRlc3Rpbmcgb25seS4KKyAgICBATnVsbGFibGUgcHJpdmF0ZSBUZXN0T25seUxpc3RlbmVyIG1Kb2JGaW5pc2hlZExpc3RlbmVyOworCisgICAgcHVibGljIEZpbGVPcGVyYXRpb25TZXJ2aWNlKCkgeworICAgICAgICBzdXBlcigiRmlsZU9wZXJhdGlvblNlcnZpY2UiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoKTsKKworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkNyZWF0ZWQuIik7CisgICAgICAgIG1Qb3dlck1hbmFnZXIgPSBnZXRTeXN0ZW1TZXJ2aWNlKFBvd2VyTWFuYWdlci5jbGFzcyk7CisgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyID0gZ2V0U3lzdGVtU2VydmljZShOb3RpZmljYXRpb25NYW5hZ2VyLmNsYXNzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IG9uU3RhcnRDb21tYW5kKEludGVudCBpbnRlbnQsIGludCBmbGFncywgaW50IHN0YXJ0SWQpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvblN0YXJ0Q29tbWFuZDogIiArIGludGVudCk7CisgICAgICAgIGlmIChpbnRlbnQuaGFzRXh0cmEoRVhUUkFfQ0FOQ0VMKSkgeworICAgICAgICAgICAgaGFuZGxlQ2FuY2VsKGludGVudCk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVERUxJVkVSX0lOVEVOVDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBzdXBlci5vblN0YXJ0Q29tbWFuZChpbnRlbnQsIGZsYWdzLCBzdGFydElkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uSGFuZGxlSW50ZW50KEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvbkhhbmRsZUludGVudDogIiArIGludGVudCk7CisKKyAgICAgICAgU3RyaW5nIGpvYklkID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX0pPQl9JRCk7CisgICAgICAgIEBPcFR5cGUgaW50IG9wZXJhdGlvblR5cGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfT1BFUkFUSU9OLCBPUEVSQVRJT05fVU5LTk9XTik7CisgICAgICAgIGNoZWNrQXJndW1lbnQoam9iSWQgIT0gbnVsbCk7CisgICAgICAgIGlmIChpbnRlbnQuaGFzRXh0cmEoRVhUUkFfQ0FOQ0VMKSkgeworICAgICAgICAgICAgaGFuZGxlQ2FuY2VsKGludGVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0FyZ3VtZW50KG9wZXJhdGlvblR5cGUgIT0gT1BFUkFUSU9OX1VOS05PV04pOworCisgICAgICAgIFBvd2VyTWFuYWdlci5XYWtlTG9jayB3YWtlTG9jayA9IG1Qb3dlck1hbmFnZXIubmV3V2FrZUxvY2soCisgICAgICAgICAgICAgICAgUG93ZXJNYW5hZ2VyLlBBUlRJQUxfV0FLRV9MT0NLLCBUQUcpOworCisgICAgICAgIEFycmF5TGlzdDxEb2N1bWVudEluZm8+IHNyY3MgPSBpbnRlbnQuZ2V0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhKEVYVFJBX1NSQ19MSVNUKTsKKyAgICAgICAgRG9jdW1lbnRTdGFjayBzdGFjayA9IGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoU2hhcmVkLkVYVFJBX1NUQUNLKTsKKworICAgICAgICBKb2Igam9iID0gY3JlYXRlSm9iKG9wZXJhdGlvblR5cGUsIGpvYklkLCBzcmNzLCBzdGFjayk7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHdha2VMb2NrLmFjcXVpcmUoKTsKKworICAgICAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KGpvYi5pZCwgMCwgam9iLmdldFNldHVwTm90aWZpY2F0aW9uKCkpOworICAgICAgICAgICAgam9iLnJ1bih0aGlzKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQ2F0Y2gtYWxsIHRvIHByZXZlbnQgYW55IGNvcHkgZXJyb3JzIGZyb20gd2VkZ2luZyB0aGUgYXBwLgorICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXhjZXB0aW9ucyBvY2N1cnJlZCBkdXJpbmcgY29weWluZyIsIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJDbGVhbmluZyB1cCBhZnRlciBjb3B5Iik7CisKKyAgICAgICAgICAgIGpvYi5jbGVhbnVwKCk7CisgICAgICAgICAgICB3YWtlTG9jay5yZWxlYXNlKCk7CisKKyAgICAgICAgICAgIC8vIERpc21pc3MgdGhlIG9uZ29pbmcgY29weSBub3RpZmljYXRpb24gd2hlbiB0aGUgY29weSBpcyBkb25lLgorICAgICAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIuY2FuY2VsKGpvYi5pZCwgMCk7CisKKyAgICAgICAgICAgIGlmIChqb2IuZmFpbGVkKCkpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGpvYi5mYWlsZWRGaWxlcy5zaXplKCkgKyAiIGZpbGVzIGZhaWxlZCB0byBjb3B5Iik7CisgICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KGpvYi5pZCwgMCwgam9iLmdldEZhaWx1cmVOb3RpZmljYXRpb24oKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRFU1QgT05MWSBDT0RFLi4uPHJhaXNlZCBleWVicm93cz4KKyAgICAgICAgICAgIGlmIChtSm9iRmluaXNoZWRMaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUpvYkZpbmlzaGVkTGlzdGVuZXIub25GaW5pc2hlZChqb2IuZmFpbGVkRmlsZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGVKb2Ioam9iKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiRG9uZSBjbGVhbmluZyB1cCIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2FuY2VscyB0aGUgb3BlcmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gam9iIGlkLCBpZGVudGlmaWVkIGluICJFWFRSQV9KT0JfSUQiLgorICAgICAqCisgICAgICogQHBhcmFtIGludGVudCBUaGUgY2FuY2VsbGF0aW9uIGludGVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlQ2FuY2VsKEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgY2hlY2tBcmd1bWVudChpbnRlbnQuaGFzRXh0cmEoRVhUUkFfQ0FOQ0VMKSk7CisgICAgICAgIFN0cmluZyBqb2JJZCA9IGNoZWNrTm90TnVsbChpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfSk9CX0lEKSk7CisKKyAgICAgICAgLy8gRG8gbm90aGluZyBpZiB0aGUgY2FuY2VsbGVkIElEIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgam9iIElELiBUaGlzIHByZXZlbnRzIHJhY2V5CisgICAgICAgIC8vIGNhbmNlbGxhdGlvbiByZXF1ZXN0cyBmcm9tIGFmZmVjdGluZyB1bnJlbGF0ZWQgY29weSBqb2JzLiAgSG93ZXZlciwgaWYgdGhlIGN1cnJlbnQgam9iIElECisgICAgICAgIC8vIGlzIG51bGwsIHRoZSBzZXJ2aWNlIG1vc3QgbGlrZWx5IGNyYXNoZWQgYW5kIHdhcyByZXZpdmVkIGJ5IHRoZSBpbmNvbWluZyBjYW5jZWwgaW50ZW50LgorICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGFsd2F5cyBhbGxvdyB0aGUgY2FuY2VsbGF0aW9uIHRvIHByb2NlZWQuCisgICAgICAgIGlmIChtSm9iICE9IG51bGwgJiYgT2JqZWN0cy5lcXVhbChqb2JJZCwgbUpvYi5pZCkpIHsKKyAgICAgICAgICAgIG1Kb2IuY2FuY2VsKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEaXNtaXNzIHRoZSBwcm9ncmVzcyBub3RpZmljYXRpb24gaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgY29weSBsb29wLiBUaGlzIHByZXNlcnZlcworICAgICAgICAvLyBpbnRlcmFjdGl2aXR5IGZvciB0aGUgdXNlciBpbiBjYXNlIHRoZSBjb3B5IGxvb3AgaXMgc3RhbGxlZC4KKyAgICAgICAgLy8gVHJ5IHRvIGNhbmNlbCBpdCBldmVuIGlmIHdlIGRvbid0IGhhdmUgYSBqb2IgaWQuLi5pbiBjYXNlIHRoZXJlIGlzIHNvbWUgc2FkCisgICAgICAgIC8vIG9ycGhhbiBub3RpZmljYXRpb24uCisgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChqb2JJZCwgMCk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY3JlYXRlSm9iSWQoKSB7CisgICAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihlbGFwc2VkUmVhbHRpbWUoKSk7CisgICAgfQorCisgICAgSm9iIGNyZWF0ZUpvYigKKyAgICAgICAgICAgIEBPcFR5cGUgaW50IG9wZXJhdGlvblR5cGUsIFN0cmluZyBpZCwgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4gc3JjcywKKyAgICAgICAgICAgIERvY3VtZW50U3RhY2sgc3RhY2spIHsKKworICAgICAgICBjaGVja1N0YXRlKG1Kb2IgPT0gbnVsbCk7CisKKyAgICAgICAgc3dpdGNoIChvcGVyYXRpb25UeXBlKSB7CisgICAgICAgICAgICBjYXNlIE9QRVJBVElPTl9DT1BZOgorICAgICAgICAgICAgICAgIG1Kb2IgPSBuZXcgQ29weUpvYih0aGlzLCBnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwgdGhpcywgaWQsIHN0YWNrLCBzcmNzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgT1BFUkFUSU9OX01PVkU6CisgICAgICAgICAgICAgICAgbUpvYiA9IG5ldyBNb3ZlSm9iKHRoaXMsIGdldEFwcGxpY2F0aW9uQ29udGV4dCgpLCB0aGlzLCBpZCwgc3RhY2ssIHNyY3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPUEVSQVRJT05fREVMRVRFOgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBjaGVja05vdE51bGwobUpvYik7CisgICAgfQorCisgICAgdm9pZCBkZWxldGVKb2IoSm9iIGpvYikgeworICAgICAgICBjaGVja0FyZ3VtZW50KGpvYiA9PSBtSm9iKTsKKyAgICAgICAgbUpvYiA9IG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Qcm9ncmVzcyhDb3B5Sm9iIGpvYikgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk9uIGNvcHkgcHJvZ3Jlc3MuLi4iKTsKKyAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KGpvYi5pZCwgMCwgam9iLmdldFByb2dyZXNzTm90aWZpY2F0aW9uKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUHJvZ3Jlc3MoTW92ZUpvYiBqb2IpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJPbiBtb3ZlIHByb2dyZXNzLi4uIik7CisgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLm5vdGlmeShqb2IuaWQsIDAsIGpvYi5nZXRQcm9ncmVzc05vdGlmaWNhdGlvbigpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIG5leHQgcnVuIGpvYiBpcyBmaW5pc2hlZC4KKyAgICAgKiBUaGlzIGlzIHRlc3QgT05MWSBpbnN0cnVtZW50YXRpb24uIFRoZSBhbHRlcm5hdGl2ZSBpcyBmb3IgdXMgdG8gYWRkCisgICAgICogYnJvYWRjYXN0IGludGVudHMgU09MRUxZIGZvciB0aGUgcHVycG9zZSBvZiB0ZXN0aW5nLgorICAgICAqIEBwYXJhbSBsaXN0ZW5lcgorICAgICAqLworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHZvaWQgYWRkRmluaXNoZWRMaXN0ZW5lcihUZXN0T25seUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHRoaXMubUpvYkZpbmlzaGVkTGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBPbmx5IHVzZWQgZm9yIHRlc3RpbmcuIElzIHRoYXQgb2J2aW91cyBlbm91Z2g/CisgICAgICovCisgICAgQFZpc2libGVGb3JUZXN0aW5nCisgICAgaW50ZXJmYWNlIFRlc3RPbmx5TGlzdGVuZXIgeworICAgICAgICB2b2lkIG9uRmluaXNoZWQoTGlzdDxEb2N1bWVudEluZm8+IGZhaWxlZCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvRmlsZU9wZXJhdGlvbnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGJmMDNiCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25zLmphdmEKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLnNlcnZpY2VzOworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5ERUJVRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU2hhcmVkLkVYVFJBX1NUQUNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TaGFyZWQuYXNBcnJheUxpc3Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZC5nZXRRdWFudGl0eVN0cmluZzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuc2VydmljZXMuRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfQ0FOQ0VMOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9KT0JfSUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLnNlcnZpY2VzLkZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX09QRVJBVElPTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuc2VydmljZXMuRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfU1JDX0xJU1Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLnNlcnZpY2VzLkZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fREVMRVRFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRTsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5kZXNpZ24ud2lkZ2V0LlNuYWNrYmFyOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNuYWNrYmFyczsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRTdGFjazsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PcFR5cGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBzdGFydGluZyB2YXJpb3VzIGZpbGUgb3BlcmF0aW9ucy4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEZpbGVPcGVyYXRpb25zIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmlsZU9wZXJhdGlvbnMiOworCisgICAgcHJpdmF0ZSBGaWxlT3BlcmF0aW9ucygpIHt9CisKKyAgICAvKioKKyAgICAgKiBUcmllcyB0byBzdGFydCB0aGUgYWN0aXZpdHkuIFJldHVybnMgdGhlIGpvYiBpZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBzdGFydCgKKyAgICAgICAgICAgIEFjdGl2aXR5IGFjdGl2aXR5LCBMaXN0PERvY3VtZW50SW5mbz4gc3JjRG9jcywgRG9jdW1lbnRTdGFjayBzdGFjaywKKyAgICAgICAgICAgIGludCBvcGVyYXRpb25UeXBlKSB7CisKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIYW5kbGluZyBnZW5lcmljICdzdGFydCcgY2FsbC4iKTsKKworICAgICAgICBzd2l0Y2ggKG9wZXJhdGlvblR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgT1BFUkFUSU9OX0NPUFk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVPcGVyYXRpb25zLmNvcHkoYWN0aXZpdHksIHNyY0RvY3MsIHN0YWNrKTsKKyAgICAgICAgICAgIGNhc2UgT1BFUkFUSU9OX01PVkU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVPcGVyYXRpb25zLm1vdmUoYWN0aXZpdHksIHNyY0RvY3MsIHN0YWNrKTsKKyAgICAgICAgICAgIGNhc2UgT1BFUkFUSU9OX0RFTEVURToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmlsZU9wZXJhdGlvbnMuZGVsZXRlKGFjdGl2aXR5LCBzcmNEb2NzLCBzdGFjayk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiVW5rbm93biBvcGVyYXRpb246ICIgKyBvcGVyYXRpb25UeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1ha2VzIGEgYmVzdCBlZmZvcnQgdG8gY2FuY2VsIG9wZXJhdGlvbiBpZGVudGlmaWVkIGJ5IGpvYklkLgorICAgICAqCisgICAgICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBmb3IgdGhlIGludGVudC4KKyAgICAgKiBAcGFyYW0gam9iSWQgVGhlIGlkIG9mIHRoZSBqb2IgdG8gY2FuY2VsLgorICAgICAqICAgICBVc2Uge0BsaW5rIEZpbGVPcGVyYXRpb25TZXJ2aWNlI2NyZWF0ZUpvYklkfSBpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUgaGFuZHkuCisgICAgICogQHBhcmFtIHNyY0RvY3MgQSBsaXN0IG9mIHNyYyBmaWxlcyB0byBjb3B5LgorICAgICAqIEBwYXJhbSBkc3RTdGFjayBUaGUgY29weSBkZXN0aW5hdGlvbiBzdGFjay4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgY2FuY2VsKEFjdGl2aXR5IGFjdGl2aXR5LCBTdHJpbmcgam9iSWQpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJBdHRlbXB0aW5nIHRvIGNhbmNlbGluZyBvcGVyYXRpb246ICIgKyBqb2JJZCk7CisKKyAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoYWN0aXZpdHksIEZpbGVPcGVyYXRpb25TZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX0NBTkNFTCwgdHJ1ZSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9KT0JfSUQsIGpvYklkKTsKKworICAgICAgICBhY3Rpdml0eS5zdGFydFNlcnZpY2UoaW50ZW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIHNlcnZpY2UgZm9yIGEgY29weSBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGZvciB0aGUgaW50ZW50LgorICAgICAqIEBwYXJhbSBqb2JJZCBBIHVuaXF1ZSBqb2JpZCBmb3IgdGhpcyBqb2IuCisgICAgICogICAgIFVzZSB7QGxpbmsgRmlsZU9wZXJhdGlvblNlcnZpY2UjY3JlYXRlSm9iSWR9IGlmIHlvdSBkb24ndCBoYXZlIG9uZSBoYW5keS4KKyAgICAgKiBAcGFyYW0gc3JjRG9jcyBBIGxpc3Qgb2Ygc3JjIGZpbGVzIHRvIGNvcHkuCisgICAgICogQHBhcmFtIGRlc3RpbmF0aW9uIFRoZSBjb3B5IGRlc3RpbmF0aW9uIHN0YWNrLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvcHkoCisgICAgICAgICAgICBBY3Rpdml0eSBhY3Rpdml0eSwgTGlzdDxEb2N1bWVudEluZm8+IHNyY0RvY3MsIERvY3VtZW50U3RhY2sgZGVzdGluYXRpb24pIHsKKyAgICAgICAgU3RyaW5nIGpvYklkID0gRmlsZU9wZXJhdGlvblNlcnZpY2UuY3JlYXRlSm9iSWQoKTsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJJbml0aWF0aW5nICdjb3B5JyBvcGVyYXRpb24gaWQ6ICIgKyBqb2JJZCk7CisKKyAgICAgICAgSW50ZW50IGludGVudCA9IGNyZWF0ZUJhc2VJbnRlbnQoT1BFUkFUSU9OX0NPUFksIGFjdGl2aXR5LCBqb2JJZCwgc3JjRG9jcywgZGVzdGluYXRpb24pOworCisgICAgICAgIGNyZWF0ZVNoYXJlZFNuYWNrQmFyKGFjdGl2aXR5LCBSLnBsdXJhbHMuY29weV9iZWdpbiwgc3JjRG9jcy5zaXplKCkpCisgICAgICAgICAgICAgICAgLnNob3coKTsKKworICAgICAgICBhY3Rpdml0eS5zdGFydFNlcnZpY2UoaW50ZW50KTsKKworICAgICAgICByZXR1cm4gam9iSWQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnRzIHRoZSBzZXJ2aWNlIGZvciBhIG1vdmUgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogQHBhcmFtIGpvYklkIEEgdW5pcXVlIGpvYmlkIGZvciB0aGlzIGpvYi4KKyAgICAgKiAgICAgVXNlIHtAbGluayBGaWxlT3BlcmF0aW9uU2VydmljZSNjcmVhdGVKb2JJZH0gaWYgeW91IGRvbid0IGhhdmUgb25lIGhhbmR5LgorICAgICAqIEBwYXJhbSBzcmNEb2NzIEEgbGlzdCBvZiBzcmMgZmlsZXMgdG8gY29weS4KKyAgICAgKiBAcGFyYW0gZGVzdGluYXRpb24gVGhlIG1vdmUgZGVzdGluYXRpb24gc3RhY2suCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbW92ZSgKKyAgICAgICAgICAgIEFjdGl2aXR5IGFjdGl2aXR5LCBMaXN0PERvY3VtZW50SW5mbz4gc3JjRG9jcywgRG9jdW1lbnRTdGFjayBkZXN0aW5hdGlvbikgeworICAgICAgICBTdHJpbmcgam9iSWQgPSBGaWxlT3BlcmF0aW9uU2VydmljZS5jcmVhdGVKb2JJZCgpOworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkluaXRpYXRpbmcgJ21vdmUnIG9wZXJhdGlvbiBpZDogIiArIGpvYklkKTsKKworICAgICAgICBJbnRlbnQgaW50ZW50ID0gY3JlYXRlQmFzZUludGVudChPUEVSQVRJT05fTU9WRSwgYWN0aXZpdHksIGpvYklkLCBzcmNEb2NzLCBkZXN0aW5hdGlvbik7CisKKyAgICAgICAgY3JlYXRlU2hhcmVkU25hY2tCYXIoYWN0aXZpdHksIFIucGx1cmFscy5tb3ZlX2JlZ2luLCBzcmNEb2NzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAuc2hvdygpOworCisgICAgICAgIGFjdGl2aXR5LnN0YXJ0U2VydmljZShpbnRlbnQpOworCisgICAgICAgIHJldHVybiBqb2JJZDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIHNlcnZpY2UgZm9yIGEgbW92ZSBvcGVyYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gam9iSWQgQSB1bmlxdWUgam9iaWQgZm9yIHRoaXMgam9iLgorICAgICAqICAgICBVc2Uge0BsaW5rIEZpbGVPcGVyYXRpb25TZXJ2aWNlI2NyZWF0ZUpvYklkfSBpZiB5b3UgZG9uJ3QgaGF2ZSBvbmUgaGFuZHkuCisgICAgICogQHBhcmFtIHNyY0RvY3MgQSBsaXN0IG9mIHNyYyBmaWxlcyB0byBjb3B5LgorICAgICAqIEByZXR1cm4gSWQgb2YgdGhlIGpvYi4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBkZWxldGUoCisgICAgICAgICAgICBBY3Rpdml0eSBhY3Rpdml0eSwgTGlzdDxEb2N1bWVudEluZm8+IHNyY0RvY3MsIERvY3VtZW50U3RhY2sgbG9jYXRpb24pIHsKKyAgICAgICAgU3RyaW5nIGpvYklkID0gRmlsZU9wZXJhdGlvblNlcnZpY2UuY3JlYXRlSm9iSWQoKTsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJJbml0aWF0aW5nICdkZWxldGUnIG9wZXJhdGlvbiBpZDogIiArIGpvYklkKTsKKworICAgICAgICBJbnRlbnQgaW50ZW50ID0gY3JlYXRlQmFzZUludGVudChPUEVSQVRJT05fREVMRVRFLCBhY3Rpdml0eSwgam9iSWQsIHNyY0RvY3MsIGxvY2F0aW9uKTsKKyAgICAgICAgYWN0aXZpdHkuc3RhcnRTZXJ2aWNlKGludGVudCk7CisKKyAgICAgICAgcmV0dXJuIGpvYklkOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUgc2VydmljZSBmb3IgYSBtb3ZlIG9wZXJhdGlvbi4KKyAgICAgKgorICAgICAqIEBwYXJhbSBqb2JJZCBBIHVuaXF1ZSBqb2JpZCBmb3IgdGhpcyBqb2IuCisgICAgICogICAgIFVzZSB7QGxpbmsgRmlsZU9wZXJhdGlvblNlcnZpY2UjY3JlYXRlSm9iSWR9IGlmIHlvdSBkb24ndCBoYXZlIG9uZSBoYW5keS4KKyAgICAgKiBAcGFyYW0gc3JjRG9jcyBBIGxpc3Qgb2Ygc3JjIGZpbGVzIHRvIGNvcHkuCisgICAgICogQHJldHVybiBJZCBvZiB0aGUgam9iLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgSW50ZW50IGNyZWF0ZUJhc2VJbnRlbnQoCisgICAgICAgICAgICBAT3BUeXBlIGludCBvcGVyYXRpb25UeXBlLCBBY3Rpdml0eSBhY3Rpdml0eSwgU3RyaW5nIGpvYklkLAorICAgICAgICAgICAgTGlzdDxEb2N1bWVudEluZm8+IHNyY0RvY3MsIERvY3VtZW50U3RhY2sgbG9jYWxlU3RhY2spIHsKKworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChhY3Rpdml0eSwgRmlsZU9wZXJhdGlvblNlcnZpY2UuY2xhc3MpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfSk9CX0lELCBqb2JJZCk7CisgICAgICAgIGludGVudC5wdXRQYXJjZWxhYmxlQXJyYXlMaXN0RXh0cmEoCisgICAgICAgICAgICAgICAgRVhUUkFfU1JDX0xJU1QsIGFzQXJyYXlMaXN0KHNyY0RvY3MpKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX1NUQUNLLCAoUGFyY2VsYWJsZSkgbG9jYWxlU3RhY2spOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfT1BFUkFUSU9OLCBvcGVyYXRpb25UeXBlKTsKKworICAgICAgICByZXR1cm4gaW50ZW50OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFNuYWNrYmFyIGNyZWF0ZVNoYXJlZFNuYWNrQmFyKEFjdGl2aXR5IGFjdGl2aXR5LCBpbnQgY29udGVudElkLCBpbnQgZmlsZUNvdW50KSB7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBhY3Rpdml0eS5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgcmV0dXJuIFNuYWNrYmFycy5tYWtlU25hY2tiYXIoCisgICAgICAgICAgICAgICAgYWN0aXZpdHksCisgICAgICAgICAgICAgICAgZ2V0UXVhbnRpdHlTdHJpbmcoYWN0aXZpdHksIGNvbnRlbnRJZCwgZmlsZUNvdW50KSwKKyAgICAgICAgICAgICAgICBTbmFja2Jhci5MRU5HVEhfU0hPUlQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9zZXJ2aWNlcy9Kb2IuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9zZXJ2aWNlcy9Kb2IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzM3YTg3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL3NlcnZpY2VzL0pvYi5qYXZhCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlczsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fVU5LTk9XTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5QcmVjb25kaXRpb25zLmNoZWNrQXJndW1lbnQ7CisKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uRHJhd2FibGVSZXM7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlBsdXJhbHNSZXM7CitpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbi5CdWlsZGVyOworaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworCitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuRmlsZXNBY3Rpdml0eTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlNoYXJlZDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRTdGFjazsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlcy5GaWxlT3BlcmF0aW9uU2VydmljZS5PcFR5cGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCithYnN0cmFjdCBjbGFzcyBKb2IgeworCisgICAgZmluYWwgQ29udGV4dCBzZXJ2aWNlQ29udGV4dDsKKyAgICBmaW5hbCBDb250ZXh0IGFwcENvbnRleHQ7CisgICAgZmluYWwgTGlzdGVuZXIgbGlzdGVuZXI7CisKKyAgICBmaW5hbCBAT3BUeXBlIGludCBtT3BUeXBlOworICAgIGZpbmFsIFN0cmluZyBpZDsKKyAgICBmaW5hbCBEb2N1bWVudFN0YWNrIHN0YWNrOworCisgICAgZmluYWwgQXJyYXlMaXN0PERvY3VtZW50SW5mbz4gZmFpbGVkRmlsZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBmaW5hbCBOb3RpZmljYXRpb24uQnVpbGRlciBtUHJvZ3Jlc3NCdWlsZGVyOworCisgICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIG1DYW5jZWxlZDsKKworICAgIC8qKgorICAgICAqIEEgc2ltcGxlIHByb2dyZXNzYWJsZSBqb2IsIG11Y2ggbGlrZSBhbiBBc3luY1Rhc2ssIGJ1dCB3aXRoIHN1cHBvcnQKKyAgICAgKiBmb3IgcHJvdmlkaW5nIHZhcmlvdXMgcmVsYXRlZCBub3RpZmljYXRpb24sIHByb2dyZXNzIGFuZCBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uLgorICAgICAqIEBwYXJhbSBvcFR5cGUKKyAgICAgKgorICAgICAqIEBwYXJhbSBzZXJ2aWNlQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgc2VydmljZSBpbiB3aGljaCB0aGlzIGpvYiBpcyBydW5uaW5nLgorICAgICAqICAgICBUaGlzIGlzIHVzdWFsbHkganVzdCAidGhpcyIuCisgICAgICogQHBhcmFtIGFwcENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGludm9raW5nIGFwcGxpY2F0aW9uLiBUaGlzIGlzIHVzdWFsbHkKKyAgICAgKiAgICAganVzdCB7QGNvZGUgZ2V0QXBwbGljYXRpb25Db250ZXh0KCl9LgorICAgICAqIEBwYXJhbSBsaXN0ZW5lcgorICAgICAqIEBwYXJhbSBpZCBBcmJpdHJhcnkgc3RyaW5nIElECisgICAgICogQHBhcmFtIHN0YWNrIFRoZSBkb2N1bWVudHMgc3RhY2sgY29udGV4dCByZWxhdGluZyB0byB0aGlzIHJlcXVlc3QuIFRoaXMgaXMgdGhlCisgICAgICogICAgIGRlc3RpbmF0aW9uIGluIHRoZSBGaWxlcyBhcHAgd2hlcmUgdGhlIHVzZXIgd2lsbCBiZSB0YWtlIHdoZW4gdGhlCisgICAgICogICAgIG5hdmlnYXRpb24gaW50ZW50IGlzIGludm9rZWQgKHByZXN1bWFibHkgZnJvbSBub3RpZmljYXRpb24pLgorICAgICAqLworICAgIEpvYihAT3BUeXBlIGludCBvcFR5cGUsIENvbnRleHQgc2VydmljZUNvbnRleHQsIENvbnRleHQgYXBwQ29udGV4dCwgTGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICBTdHJpbmcgaWQsIERvY3VtZW50U3RhY2sgc3RhY2spIHsKKworICAgICAgICBjaGVja0FyZ3VtZW50KG9wVHlwZSAhPSBPUEVSQVRJT05fVU5LTk9XTik7CisgICAgICAgIHRoaXMuc2VydmljZUNvbnRleHQgPSBzZXJ2aWNlQ29udGV4dDsKKyAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXBwQ29udGV4dDsKKyAgICAgICAgdGhpcy5saXN0ZW5lciA9IGxpc3RlbmVyOworICAgICAgICBtT3BUeXBlID0gb3BUeXBlOworCisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5zdGFjayA9IHN0YWNrOworCisgICAgICAgIG1Qcm9ncmVzc0J1aWxkZXIgPSBjcmVhdGVQcm9ncmVzc0J1aWxkZXIoKTsKKyAgICB9CisKKyAgICBhYnN0cmFjdCB2b2lkIHJ1bihGaWxlT3BlcmF0aW9uU2VydmljZSBzZXJ2aWNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uOworICAgIGFic3RyYWN0IHZvaWQgY2xlYW51cCgpOworCisgICAgQE9wVHlwZSBpbnQgdHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG1PcFR5cGU7CisgICAgfQorCisgICAgYWJzdHJhY3QgTm90aWZpY2F0aW9uIGdldFNldHVwTm90aWZpY2F0aW9uKCk7CisgICAgLy8gVE9ETzogUHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIGZvciBkZWxldGVzLgorICAgIC8vIGFic3RyYWN0IE5vdGlmaWNhdGlvbiBnZXRQcm9ncmVzc05vdGlmaWNhdGlvbihsb25nIGJ5dGVzQ29waWVkKTsKKyAgICBhYnN0cmFjdCBOb3RpZmljYXRpb24gZ2V0RmFpbHVyZU5vdGlmaWNhdGlvbigpOworCisgICAgZmluYWwgdm9pZCBjYW5jZWwoKSB7CisgICAgICAgIG1DYW5jZWxlZCA9IHRydWU7CisgICAgfQorCisgICAgZmluYWwgYm9vbGVhbiBpc0NhbmNlbGVkKCkgeworICAgICAgICByZXR1cm4gbUNhbmNlbGVkOworICAgIH0KKworICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBnZXRDb250ZW50UmVzb2x2ZXIoKSB7CisgICAgICAgIHJldHVybiBzZXJ2aWNlQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIG9uRmlsZUZhaWxlZChEb2N1bWVudEluZm8gZmlsZSkgeworICAgICAgICBmYWlsZWRGaWxlcy5hZGQoZmlsZSk7CisgICAgfQorCisgICAgZmluYWwgYm9vbGVhbiBmYWlsZWQoKSB7CisgICAgICAgIHJldHVybiAhZmFpbGVkRmlsZXMuaXNFbXB0eSgpOworICAgIH0KKworICAgIE5vdGlmaWNhdGlvbiBnZXRTZXR1cE5vdGlmaWNhdGlvbihTdHJpbmcgY29udGVudCkgeworICAgICAgICBtUHJvZ3Jlc3NCdWlsZGVyLnNldFByb2dyZXNzKDAsIDAsIHRydWUpOworICAgICAgICBtUHJvZ3Jlc3NCdWlsZGVyLnNldENvbnRlbnRUZXh0KGNvbnRlbnQpOworICAgICAgICByZXR1cm4gbVByb2dyZXNzQnVpbGRlci5idWlsZCgpOworICAgIH0KKworICAgIE5vdGlmaWNhdGlvbiBnZXRGYWlsdXJlTm90aWZpY2F0aW9uKEBQbHVyYWxzUmVzIGludCB0aXRsZUlkLCBARHJhd2FibGVSZXMgaW50IGljb24pIHsKKyAgICAgICAgZmluYWwgSW50ZW50IG5hdmlnYXRlSW50ZW50ID0gYnVpbGROYXZpZ2F0ZUludGVudCgpOworICAgICAgICBuYXZpZ2F0ZUludGVudC5wdXRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9GQUlMVVJFLCBGaWxlT3BlcmF0aW9uU2VydmljZS5GQUlMVVJFX0NPUFkpOworICAgICAgICBuYXZpZ2F0ZUludGVudC5wdXRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04sIG1PcFR5cGUpOworCisgICAgICAgIG5hdmlnYXRlSW50ZW50LnB1dFBhcmNlbGFibGVBcnJheUxpc3RFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9TUkNfTElTVCwgZmFpbGVkRmlsZXMpOworCisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbi5CdWlsZGVyIGVycm9yQnVpbGRlciA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihzZXJ2aWNlQ29udGV4dCkKKyAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRpdGxlKHNlcnZpY2VDb250ZXh0LmdldFJlc291cmNlcygpLmdldFF1YW50aXR5U3RyaW5nKHRpdGxlSWQsCisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZWRGaWxlcy5zaXplKCksIGZhaWxlZEZpbGVzLnNpemUoKSkpCisgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUZXh0KHNlcnZpY2VDb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5ub3RpZmljYXRpb25fdG91Y2hfZm9yX2RldGFpbHMpKQorICAgICAgICAgICAgICAgIC5zZXRDb250ZW50SW50ZW50KFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkoYXBwQ29udGV4dCwgMCwgbmF2aWdhdGVJbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfVVBEQVRFX0NVUlJFTlQgfCBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QpKQorICAgICAgICAgICAgICAgIC5zZXRDYXRlZ29yeShOb3RpZmljYXRpb24uQ0FURUdPUllfRVJST1IpCisgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihpY29uKQorICAgICAgICAgICAgICAgIC5zZXRBdXRvQ2FuY2VsKHRydWUpOworICAgICAgICByZXR1cm4gZXJyb3JCdWlsZGVyLmJ1aWxkKCk7CisgICAgfQorCisgICAgYWJzdHJhY3QgQnVpbGRlciBjcmVhdGVQcm9ncmVzc0J1aWxkZXIoKTsKKworICAgIGZpbmFsIEJ1aWxkZXIgY3JlYXRlUHJvZ3Jlc3NCdWlsZGVyKAorICAgICAgICAgICAgU3RyaW5nIHRpdGxlLCBARHJhd2FibGVSZXMgaW50IGljb24sCisgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVGl0bGUsIEBEcmF3YWJsZVJlcyBpbnQgYWN0aW9uSWNvbikgeworICAgICAgICBOb3RpZmljYXRpb24uQnVpbGRlciBwcm9ncmVzc0J1aWxkZXIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoc2VydmljZUNvbnRleHQpCisgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUaXRsZSh0aXRsZSkKKyAgICAgICAgICAgICAgICAuc2V0Q29udGVudEludGVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkoYXBwQ29udGV4dCwgMCwgYnVpbGROYXZpZ2F0ZUludGVudCgpLCAwKSkKKyAgICAgICAgICAgICAgICAuc2V0Q2F0ZWdvcnkoTm90aWZpY2F0aW9uLkNBVEVHT1JZX1BST0dSRVNTKQorICAgICAgICAgICAgICAgIC5zZXRTbWFsbEljb24oaWNvbikKKyAgICAgICAgICAgICAgICAuc2V0T25nb2luZyh0cnVlKTsKKworICAgICAgICBmaW5hbCBJbnRlbnQgY2FuY2VsSW50ZW50ID0gY3JlYXRlQ2FuY2VsSW50ZW50KCk7CisKKyAgICAgICAgcHJvZ3Jlc3NCdWlsZGVyLmFkZEFjdGlvbigKKyAgICAgICAgICAgICAgICBhY3Rpb25JY29uLAorICAgICAgICAgICAgICAgIGFjdGlvblRpdGxlLAorICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0U2VydmljZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCB8IFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVCkpOworCisgICAgICAgIHJldHVybiBwcm9ncmVzc0J1aWxkZXI7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhbiBpbnRlbnQgZm9yIG5hdmlnYXRpbmcgYmFjayB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5LgorICAgICAqLworICAgIEludGVudCBidWlsZE5hdmlnYXRlSW50ZW50KCkgeworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChzZXJ2aWNlQ29udGV4dCwgRmlsZXNBY3Rpdml0eS5jbGFzcyk7CisgICAgICAgIGludGVudC5zZXRBY3Rpb24oRG9jdW1lbnRzQ29udHJhY3QuQUNUSU9OX0JST1dTRSk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShTaGFyZWQuRVhUUkFfU1RBQ0ssIChQYXJjZWxhYmxlKSBzdGFjayk7CisgICAgICAgIHJldHVybiBpbnRlbnQ7CisgICAgfQorCisgICAgSW50ZW50IGNyZWF0ZUNhbmNlbEludGVudCgpIHsKKyAgICAgICAgZmluYWwgSW50ZW50IGNhbmNlbEludGVudCA9IG5ldyBJbnRlbnQoc2VydmljZUNvbnRleHQsIEZpbGVPcGVyYXRpb25TZXJ2aWNlLmNsYXNzKTsKKyAgICAgICAgY2FuY2VsSW50ZW50LnB1dEV4dHJhKEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX0NBTkNFTCwgdHJ1ZSk7CisgICAgICAgIGNhbmNlbEludGVudC5wdXRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9KT0JfSUQsIGlkKTsKKyAgICAgICAgcmV0dXJuIGNhbmNlbEludGVudDsKKyAgICB9CisKKyAgICBpbnRlcmZhY2UgTGlzdGVuZXIgeworICAgICAgICB2b2lkIG9uUHJvZ3Jlc3MoQ29weUpvYiBqb2IpOworICAgICAgICB2b2lkIG9uUHJvZ3Jlc3MoTW92ZUpvYiBqb2IpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9zZXJ2aWNlcy9Nb3ZlSm9iLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvTW92ZUpvYi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MTdmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvTW92ZUpvYi5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zZXJ2aWNlczsKKworaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb24uQnVpbGRlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50U3RhY2s7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworZmluYWwgY2xhc3MgTW92ZUpvYiBleHRlbmRzIENvcHlKb2IgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNb3ZlSm9iIjsKKworICAgIC8qKgorICAgICAqIE1vdmVzIGZpbGVzIHRvIGEgZGVzdGluYXRpb24gaWRlbnRpZmllZCBieSB7QGNvZGUgZGVzdGluYXRpb259LgorICAgICAqIFBlcmZvcm1zIG1vc3Qgd29yayBieSBkZWxlZ2F0aW5nIHRvIENvcHlKb2IsIHRoZW4gZGVsZXRpbmcKKyAgICAgKiBhIGZpbGUgYWZ0ZXIgaXQgaGFzIGJlZW4gY29waWVkLgorICAgICAqCisgICAgICogQHNlZSBAbGluayB7QGxpbmsgSm9ifSBjb25zdHJ1Y3RvciBmb3IgbW9zdCBwYXJhbSBkZXNjcmlwdGlvbnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3JjcyBMaXN0IG9mIGZpbGVzIHRvIGJlIG1vdmVkLgorICAgICAqLworICAgIE1vdmVKb2IoQ29udGV4dCBzZXJ2aWNlQ29udGV4dCwgQ29udGV4dCBhcHBDb250ZXh0LCBMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgIFN0cmluZyBpZCwgRG9jdW1lbnRTdGFjayBkZXN0aW5hdGlvbiwgTGlzdDxEb2N1bWVudEluZm8+IHNyY3MpIHsKKyAgICAgICAgc3VwZXIoc2VydmljZUNvbnRleHQsIGFwcENvbnRleHQsIGxpc3RlbmVyLCBpZCwgZGVzdGluYXRpb24sIHNyY3MpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIGludCB0eXBlKCkgeworICAgICAgICByZXR1cm4gRmlsZU9wZXJhdGlvblNlcnZpY2UuT1BFUkFUSU9OX01PVkU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgQnVpbGRlciBjcmVhdGVQcm9ncmVzc0J1aWxkZXIoKSB7CisgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVQcm9ncmVzc0J1aWxkZXIoCisgICAgICAgICAgICAgICAgc2VydmljZUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLm1vdmVfbm90aWZpY2F0aW9uX3RpdGxlKSwKKyAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLmljX21lbnVfY29weSwKKyAgICAgICAgICAgICAgICBzZXJ2aWNlQ29udGV4dC5nZXRTdHJpbmcoYW5kcm9pZC5SLnN0cmluZy5jYW5jZWwpLAorICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuaWNfY2FiX2NhbmNlbCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE5vdGlmaWNhdGlvbiBnZXRTZXR1cE5vdGlmaWNhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGdldFNldHVwTm90aWZpY2F0aW9uKHNlcnZpY2VDb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5tb3ZlX3ByZXBhcmluZykpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBOb3RpZmljYXRpb24gZ2V0UHJvZ3Jlc3NOb3RpZmljYXRpb24oKSB7CisgICAgICAgIHJldHVybiBnZXRQcm9ncmVzc05vdGlmaWNhdGlvbihSLnN0cmluZy5jb3B5X3ByZXBhcmluZyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgTm90aWZpY2F0aW9uIGdldEZhaWx1cmVOb3RpZmljYXRpb24oKSB7CisgICAgICAgIHJldHVybiBnZXRGYWlsdXJlTm90aWZpY2F0aW9uKAorICAgICAgICAgICAgICAgIFIucGx1cmFscy5tb3ZlX2Vycm9yX25vdGlmaWNhdGlvbl90aXRsZSwgUi5kcmF3YWJsZS5pY19tZW51X2NvcHkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvcGllcyBhIHRoZSBnaXZlbiBkb2N1bWVudCB0byB0aGUgZ2l2ZW4gbG9jYXRpb24uCisgICAgICoKKyAgICAgKiBAcGFyYW0gc3JjSW5mbyBEb2N1bWVudEluZm9zIGZvciB0aGUgZG9jdW1lbnRzIHRvIGNvcHkuCisgICAgICogQHBhcmFtIGRzdERpckluZm8gVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KKyAgICAgKiBAcGFyYW0gbW9kZSBUaGUgdHJhbnNmZXIgbW9kZSAoY29weSBvciBtb3ZlKS4KKyAgICAgKiBAcmV0dXJuIFRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KKyAgICAgKiBAdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIGJvb2xlYW4gcHJvY2Vzc0RvY3VtZW50KERvY3VtZW50SW5mbyBzcmNJbmZvLCBEb2N1bWVudEluZm8gZHN0RGlySW5mbykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisKKyAgICAgICAgLy8gVE9ETzogV2hlbiBvcHRpbWl6ZWQgY29weSBraWNrcyBpbiwgd2UncmUgbm90IG1ha2luZyBhbnkgcHJvZ3Jlc3MgdXBkYXRlcy4gRklYIElUIQorCisgICAgICAgIC8vIFdoZW4gY29weWluZyB3aXRoaW4gdGhlIHNhbWUgcHJvdmlkZXIsIHRyeSB0byB1c2Ugb3B0aW1pemVkIGNvcHlpbmcgYW5kIG1vdmluZy4KKyAgICAgICAgLy8gSWYgbm90IHN1cHBvcnRlZCwgdGhlbiBmYWxsYmFjayB0byBieXRlLWJ5LWJ5dGUgY29weS9tb3ZlLgorICAgICAgICBpZiAoc3JjSW5mby5hdXRob3JpdHkuZXF1YWxzKGRzdERpckluZm8uYXV0aG9yaXR5KSkgeworICAgICAgICAgICAgaWYgKChzcmNJbmZvLmZsYWdzICYgRG9jdW1lbnQuRkxBR19TVVBQT1JUU19NT1ZFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50c0NvbnRyYWN0Lm1vdmVEb2N1bWVudChzcmNDbGllbnQsIHNyY0luZm8uZGVyaXZlZFVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdERpckluZm8uZGVyaXZlZFVyaSkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBvbkZpbGVGYWlsZWQoc3JjSW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGNvdWxkbid0IGRvIGFuIG9wdGltaXplZCBjb3B5Li4ud2UgZmFsbCBiYWNrIHRvIHZhbmlsbGEgYnl0ZSBjb3B5LgorICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBieXRlQ29weURvY3VtZW50KHNyY0luZm8sIGRzdERpckluZm8pOworCisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHJhY2V5LiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgd2UgbmV2ZXIgZGVsZXRlIGEgZGlyZWN0b3J5IGFmdGVyCisgICAgICAgICAgICAvLyBpdCBjaGFuZ2VkLCBzbyB3ZSBkb24ndCByZW1vdmUgYSBmaWxlIHdoaWNoIGhhZCBub3QgYmVlbiBjb3BpZWQgZWFybGllcgorICAgICAgICAgICAgLy8gdG8gdGhlIHRhcmdldCBsb2NhdGlvbi4KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuZGVsZXRlRG9jdW1lbnQoc3JjQ2xpZW50LCBzcmNJbmZvLmRlcml2ZWRVcmkpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gZGVsZXRlIHNvdXJjZSBhZnRlciBjb3B5OiAiICsgc3JjSW5mby5kZXJpdmVkVXJpLCBlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmlsZXNBY3Rpdml0eVVpVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0ZpbGVzQWN0aXZpdHlVaVRlc3QuamF2YQppbmRleCA3MWQ4YjM0Li5mMGRiZmU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvRmlsZXNBY3Rpdml0eVVpVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9GaWxlc0FjdGl2aXR5VWlUZXN0LmphdmEKQEAgLTEzNywxMSArMTM3LDE4IEBACiAgICAgICAgIG1Cb3QuYXNzZXJ0SGFzRG9jdW1lbnRzKCJmaWxlMC5sb2ciLCAiZmlsZTEucG5nIiwgImZpbGUyLmNzdiIpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2Fkc0hvbWVCeURlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaW5pdFRlc3RGaWxlcygpOworCisgICAgICAgIG1EZXZpY2Uud2FpdEZvcklkbGUoKTsKKyAgICAgICAgbUJvdC5hc3NlcnRXaW5kb3dUaXRsZSgiSG9tZSIpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RSb290Q2xpY2tTZXRzV2luZG93VGl0bGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgaW5pdFRlc3RGaWxlcygpOwogCi0gICAgICAgIG1Cb3Qub3BlblJvb3QoIkhvbWUiKTsKLSAgICAgICAgbUJvdC5hc3NlcnRXaW5kb3dUaXRsZSgiSG9tZSIpOworICAgICAgICBtQm90Lm9wZW5Sb290KCJEb3dubG9hZHMiKTsKKyAgICAgICAgbUJvdC5hc3NlcnRXaW5kb3dUaXRsZSgiRG93bmxvYWRzIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEZpbGVzTGlzdF9MaXZlVXBkYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3RhdGVUZXN0LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3RhdGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0Yjk4NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdGF0ZVRlc3QuamF2YQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aTsKKworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKKworQFNtYWxsVGVzdAorcHVibGljIGNsYXNzIFN0YXRlVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CisgICAgcHVibGljIHZvaWQgdGVzdFB1c2hEb2N1bWVudCgpIHsKKyAgICAgICAgZmluYWwgU3RhdGUgc3RhdGUgPSBuZXcgU3RhdGUoKTsKKyAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGluZm9GaXJzdCA9IG5ldyBEb2N1bWVudEluZm8oKTsKKyAgICAgICAgaW5mb0ZpcnN0LmRpc3BsYXlOYW1lID0gImZpcnN0RGlyZWN0b3J5IjsKKyAgICAgICAgZmluYWwgRG9jdW1lbnRJbmZvIGluZm9TZWNvbmQgPSBuZXcgRG9jdW1lbnRJbmZvKCk7CisgICAgICAgIGluZm9TZWNvbmQuZGlzcGxheU5hbWUgPSAic2Vjb25kRGlyZWN0b3J5IjsKKyAgICAgICAgYXNzZXJ0RmFsc2Uoc3RhdGUuaGFzTG9jYXRpb25DaGFuZ2VkKCkpOworICAgICAgICBzdGF0ZS5wdXNoRG9jdW1lbnQoaW5mb0ZpcnN0KTsKKyAgICAgICAgc3RhdGUucHVzaERvY3VtZW50KGluZm9TZWNvbmQpOworICAgICAgICBhc3NlcnRUcnVlKHN0YXRlLmhhc0xvY2F0aW9uQ2hhbmdlZCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzZWNvbmREaXJlY3RvcnkiLCBzdGF0ZS5zdGFjay5nZXRGaXJzdCgpLmRpc3BsYXlOYW1lKTsKKyAgICAgICAgc3RhdGUucG9wRG9jdW1lbnQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmaXJzdERpcmVjdG9yeSIsIHN0YXRlLnN0YWNrLmdldEZpcnN0KCkuZGlzcGxheU5hbWUpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdHViUHJvdmlkZXIuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9TdHViUHJvdmlkZXIuamF2YQppbmRleCA3YTc1NTAzLi41MGY0NjI4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvU3R1YlByb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL1N0dWJQcm92aWRlci5qYXZhCkBAIC00NCw5ICs0NCwxMSBAQAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogcHVibGljIGNsYXNzIFN0dWJQcm92aWRlciBleHRlbmRzIERvY3VtZW50c1Byb3ZpZGVyIHsKQEAgLTU5LDcgKzYxLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0laRSA9ICJjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zdHVicHJvdmlkZXIuU0laRSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JPT1QgPSAiY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuc3R1YnByb3ZpZGVyLlJPT1QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVE9SQUdFX1NJWkVfS0VZID0gImRvY3VtZW50c3VpLnN0dWJwcm92aWRlci5zaXplIjsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgREVGQVVMVF9ST09UX1NJWkUgPSAxMDI0ICogMTAyNCAqIDEwMDsgLy8gMTAwIE1CLgorICAgIHByaXZhdGUgc3RhdGljIGludCBERUZBVUxUX1JPT1RfU0laRSA9IDEwMjQgKiAxMDI0ICogMTAwOyAgLy8gMTAwIE1CLgogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gREVGQVVMVF9ST09UX1BST0pFQ1RJT04gPSBuZXcgU3RyaW5nW10gewogICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwgUm9vdC5DT0xVTU5fRkxBR1MsIFJvb3QuQ09MVU1OX1RJVExFLCBSb290LkNPTFVNTl9ET0NVTUVOVF9JRCwKQEAgLTEwNSw3ICsxMDcsMTMgQEAKIAogICAgICAgICBtUm9vdHMuY2xlYXIoKTsKICAgICAgICAgZm9yIChTdHJpbmcgcm9vdElkIDogcm9vdElkcykgewotICAgICAgICAgICAgZmluYWwgUm9vdEluZm8gcm9vdEluZm8gPSBuZXcgUm9vdEluZm8ocm9vdElkLCBnZXRTaXplKHJvb3RJZCkpOworICAgICAgICAgICAgLy8gTWFrZSBhIHN1YmRpciBpbiB0aGUgY2FjaGUgZGlyIGZvciBlYWNoIHJvb3QuCisgICAgICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRDb250ZXh0KCkuZ2V0Q2FjaGVEaXIoKSwgcm9vdElkKTsKKyAgICAgICAgICAgIGlmIChmaWxlLm1rZGlyKCkpIHsKKyAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJDcmVhdGVkIG5ldyByb290IGRpcmVjdG9yeSBAICIgKyBmaWxlLmdldFBhdGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBSb290SW5mbyByb290SW5mbyA9IG5ldyBSb290SW5mbyhmaWxlLCBnZXRTaXplKHJvb3RJZCkpOworICAgICAgICAgICAgbVN0b3JhZ2UucHV0KHJvb3RJbmZvLmRvY3VtZW50LmRvY3VtZW50SWQsIHJvb3RJbmZvLmRvY3VtZW50KTsKICAgICAgICAgICAgIG1Sb290cy5wdXQocm9vdElkLCByb290SW5mbyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODgsNyArMTk2LDcgQEAKICAgICAgICAgICAgICAgICBjcmVhdGVkID0gZmlsZS5jcmVhdGVOZXdGaWxlKCk7CiAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UnbGwgdGhyb3cgYW4gRk5GIGV4Y2VwdGlvbiBsYXRlciA6KQotICAgICAgICAgICAgICAgIExvZy5lKFRBRywgImNyZWF0ZW5ld0ZpbGUgb3BlcmF0aW9uIGZhaWxlZCBmb3IgZmlsZTogIiArIGZpbGUsIGUpOworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgImNyZWF0ZU5ld0ZpbGUgb3BlcmF0aW9uIGZhaWxlZCBmb3IgZmlsZTogIiArIGZpbGUsIGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjcmVhdGVkKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigKQEAgLTE5Nyw3ICsyMDUsOCBAQAogICAgICAgICAgICAgTG9nLmkoVEFHLCAiQ3JlYXRlZCBuZXcgZmlsZTogIiArIGZpbGUpOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgU3R1YkRvY3VtZW50IGRvY3VtZW50ID0gbmV3IFN0dWJEb2N1bWVudChmaWxlLCBtaW1lVHlwZSwgcGFyZW50KTsKKyAgICAgICAgZmluYWwgU3R1YkRvY3VtZW50IGRvY3VtZW50ID0gU3R1YkRvY3VtZW50LmNyZWF0ZVJlZ3VsYXJEb2N1bWVudChmaWxlLCBtaW1lVHlwZSwgcGFyZW50KTsKKyAgICAgICAgbVN0b3JhZ2UucHV0KGRvY3VtZW50LmRvY3VtZW50SWQsIGRvY3VtZW50KTsKICAgICAgICAgTG9nLmQoVEFHLCAiQ3JlYXRlZCBkb2N1bWVudCAiICsgZG9jdW1lbnQuZG9jdW1lbnRJZCk7CiAgICAgICAgIG5vdGlmeVBhcmVudENoYW5nZWQoZG9jdW1lbnQucGFyZW50SWQpOwogICAgICAgICBnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCkubm90aWZ5Q2hhbmdlKApAQCAtMjY0LDE0ICsyNzMsMTggQEAKICAgICBwdWJsaWMgUGFyY2VsRmlsZURlc2NyaXB0b3Igb3BlbkRvY3VtZW50KFN0cmluZyBkb2NJZCwgU3RyaW5nIG1vZGUsIENhbmNlbGxhdGlvblNpZ25hbCBzaWduYWwpCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgU3R1YkRvY3VtZW50IGRvY3VtZW50ID0gbVN0b3JhZ2UuZ2V0KGRvY0lkKTsKLSAgICAgICAgaWYgKGRvY3VtZW50ID09IG51bGwgfHwgIWRvY3VtZW50LmZpbGUuaXNGaWxlKCkpCisgICAgICAgIGlmIChkb2N1bWVudCA9PSBudWxsIHx8ICFkb2N1bWVudC5maWxlLmlzRmlsZSgpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChkb2N1bWVudC5mbGFncyAmIERvY3VtZW50LkZMQUdfVklSVFVBTF9ET0NVTUVOVCkgIT0gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVHJpZWQgdG8gb3BlbiBhIHZpcnR1YWwgZmlsZS4iKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmICgiciIuZXF1YWxzKG1vZGUpKSB7Ci0gICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvciBwZmQgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKGRvY3VtZW50LmZpbGUsCi0gICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfUkVBRF9PTkxZKTsKKyAgICAgICAgICAgIGZpbmFsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHBmZCA9IFBhcmNlbEZpbGVEZXNjcmlwdG9yLm9wZW4oZG9jdW1lbnQuZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfUkVBRF9PTkxZKTsKICAgICAgICAgICAgIGlmIChkb2NJZC5lcXVhbHMobVNpbXVsYXRlUmVhZEVycm9ycykpIHsKLSAgICAgICAgICAgICAgICBwZmQgPSBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IocGZkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYXJjZWxGaWxlRGVzY3JpcHRvcihwZmQpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGNoZWNrRXJyb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJUZXN0IGVycm9yIik7CkBAIC0yOTgsNiArMzExLDUxIEBACiAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQXNzZXRGaWxlRGVzY3JpcHRvciBvcGVuVHlwZWREb2N1bWVudCgKKyAgICAgICAgICAgIFN0cmluZyBkb2N1bWVudElkLCBTdHJpbmcgbWltZVR5cGVGaWx0ZXIsIEJ1bmRsZSBvcHRzLCBDYW5jZWxsYXRpb25TaWduYWwgc2lnbmFsKQorICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0dWJEb2N1bWVudCBkb2N1bWVudCA9IG1TdG9yYWdlLmdldChkb2N1bWVudElkKTsKKyAgICAgICAgaWYgKGRvY3VtZW50ID09IG51bGwgfHwgIWRvY3VtZW50LmZpbGUuaXNGaWxlKCkgfHwgZG9jdW1lbnQuc3RyZWFtVHlwZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIGZvciAoZmluYWwgU3RyaW5nIG1pbWVUeXBlIDogZG9jdW1lbnQuc3RyZWFtVHlwZXMpIHsKKyAgICAgICAgICAgIC8vIFN0cmljdCBjb21wYXJlIHdvbid0IGFjY2VwdCB3aWxkY2FyZHMsIGJ1dCB0aGF0J3MgT0sgZm9yIHRlc3RzLCBhcyBEb2N1bWVudHNVSQorICAgICAgICAgICAgLy8gZG9lc24ndCB1c2UgdGhlbSBmb3IgZ2V0U3RyZWFtVHlwZXMgbm9yIG9wZW5UeXBlZERvY3VtZW50LgorICAgICAgICAgICAgaWYgKG1pbWVUeXBlLmVxdWFscyhtaW1lVHlwZUZpbHRlcikpIHsKKyAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvciBwZmQgPSBQYXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGUsIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfUkVBRF9PTkxZKTsKKyAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJZC5lcXVhbHMobVNpbXVsYXRlUmVhZEVycm9ycykpIHsKKyAgICAgICAgICAgICAgICAgICAgcGZkID0gbmV3IFBhcmNlbEZpbGVEZXNjcmlwdG9yKHBmZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBjaGVja0Vycm9yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlRlc3QgZXJyb3IiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3NldEZpbGVEZXNjcmlwdG9yKHBmZCwgMCwgZG9jdW1lbnQuZmlsZS5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBNSU1FIHR5cGUgZmlsdGVyIGZvciBvcGVuVHlwZWREb2N1bWVudCgpLiIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTdHJlYW1UeXBlcyhVcmkgdXJpLCBTdHJpbmcgbWltZVR5cGVGaWx0ZXIpIHsKKyAgICAgICAgZmluYWwgU3R1YkRvY3VtZW50IGRvY3VtZW50ID0gbVN0b3JhZ2UuZ2V0KERvY3VtZW50c0NvbnRyYWN0LmdldERvY3VtZW50SWQodXJpKSk7CisgICAgICAgIGlmIChkb2N1bWVudCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiVGhlIHByb3ZpZGVkIFVyaSBpcyBpbmNvcnJlY3QsIG9yIHRoZSBmaWxlIGlzIGdvbmUuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEiKi8qIi5lcXVhbHMobWltZVR5cGVGaWx0ZXIpKSB7CisgICAgICAgICAgICAvLyBOb3QgdXNlZCBieSBEb2N1bWVudHNVSSwgc28gZG9uJ3QgYm90aGVyIGltcGxlbWVudGluZyBpdC4KKyAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIGlmIChkb2N1bWVudC5zdHJlYW1UeXBlcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZG9jdW1lbnQuc3RyZWFtVHlwZXMudG9BcnJheShuZXcgU3RyaW5nW2RvY3VtZW50LnN0cmVhbVR5cGVzLnNpemUoKV0pOworICAgIH0KKwogICAgIHByaXZhdGUgUGFyY2VsRmlsZURlc2NyaXB0b3Igc3RhcnRXcml0ZShmaW5hbCBTdHViRG9jdW1lbnQgZG9jdW1lbnQpCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3JbXSBwaXBlOwpAQCAtMzk4LDE0ICs0NTYsNyBAQAogICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUsIGRvY3VtZW50LmZpbGUuZ2V0TmFtZSgpKTsKICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fU0laRSwgZG9jdW1lbnQuZmlsZS5sZW5ndGgoKSk7CiAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgZG9jdW1lbnQubWltZVR5cGUpOwotICAgICAgICBpbnQgZmxhZ3MgPSBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX0RFTEVURTsKLSAgICAgICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIHJlbmFtaW5nLgotICAgICAgICBpZiAoZG9jdW1lbnQuZmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEb2N1bWVudC5GTEFHX0RJUl9TVVBQT1JUU19DUkVBVEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmbGFncyB8PSBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX1dSSVRFOwotICAgICAgICB9Ci0gICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCBmbGFncyk7CisgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCBkb2N1bWVudC5mbGFncyk7CiAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQsIGRvY3VtZW50LmZpbGUubGFzdE1vZGlmaWVkKCkpOwogICAgIH0KIApAQCAtNDM5LDM3ICs0OTAsMzAgQEAKICAgICB9CiAKICAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBwdWJsaWMgVXJpIGNyZWF0ZUZpbGUoU3RyaW5nIHJvb3RJZCwgU3RyaW5nIHBhdGgsIFN0cmluZyBtaW1lVHlwZSwgYnl0ZVtdIGNvbnRlbnQpCisgICAgcHVibGljIFVyaSBjcmVhdGVSZWd1bGFyRmlsZShTdHJpbmcgcm9vdElkLCBTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlLCBieXRlW10gY29udGVudCkKICAgICAgICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiQ3JlYXRpbmcgdGVzdCBmaWxlICIgKyByb290SWQgKyAiOiIgKyBwYXRoKTsKLSAgICAgICAgU3R1YkRvY3VtZW50IHJvb3QgPSBtUm9vdHMuZ2V0KHJvb3RJZCkuZG9jdW1lbnQ7Ci0gICAgICAgIGlmIChyb290ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIk5vIHJvb3RzIHdpdGggdGhlIElEICIgKyByb290SWQgKyAiIHdlcmUgZm91bmQiKTsKLSAgICAgICAgfQotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShyb290LmZpbGUsIHBhdGguc3Vic3RyaW5nKDEpKTsKLSAgICAgICAgU3R1YkRvY3VtZW50IHBhcmVudCA9IG1TdG9yYWdlLmdldChnZXREb2N1bWVudElkRm9yRmlsZShmaWxlLmdldFBhcmVudEZpbGUoKSkpOworICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKHJvb3RJZCwgcGF0aCwgbWltZVR5cGUsIGNvbnRlbnQpOworICAgICAgICBmaW5hbCBTdHViRG9jdW1lbnQgcGFyZW50ID0gbVN0b3JhZ2UuZ2V0KGdldERvY3VtZW50SWRGb3JGaWxlKGZpbGUuZ2V0UGFyZW50RmlsZSgpKSk7CiAgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgcGFyZW50ID0gbVN0b3JhZ2UuZ2V0KGNyZWF0ZUZpbGUocm9vdElkLCBmaWxlLmdldFBhcmVudEZpbGUoKS5nZXRQYXRoKCksCi0gICAgICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50Lk1JTUVfVFlQRV9ESVIsIG51bGwpKTsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkNyZWF0ZWQgcGFyZW50ICIgKyBwYXJlbnQuZG9jdW1lbnRJZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJGb3VuZCBwYXJlbnQgIiArIHBhcmVudC5kb2N1bWVudElkKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIlBhcmVudCBub3QgZm91bmQuIik7CiAgICAgICAgIH0KKyAgICAgICAgZmluYWwgU3R1YkRvY3VtZW50IGRvY3VtZW50ID0gU3R1YkRvY3VtZW50LmNyZWF0ZVJlZ3VsYXJEb2N1bWVudChmaWxlLCBtaW1lVHlwZSwgcGFyZW50KTsKKyAgICAgICAgbVN0b3JhZ2UucHV0KGRvY3VtZW50LmRvY3VtZW50SWQsIGRvY3VtZW50KTsKKyAgICAgICAgcmV0dXJuIERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkobUF1dGhvcml0eSwgIGRvY3VtZW50LmRvY3VtZW50SWQpOworICAgIH0KIAotICAgICAgICBpZiAoRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMobWltZVR5cGUpKSB7Ci0gICAgICAgICAgICBpZiAoIWZpbGUubWtkaXJzKCkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDb3VsZG4ndCBjcmVhdGUgZGlyZWN0b3J5ICIgKyBmaWxlLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWZpbGUuY3JlYXRlTmV3RmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ291bGRuJ3QgY3JlYXRlIGZpbGUgIiArIGZpbGUuZ2V0UGF0aCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFkZCBjb250ZW50IHRvIHRoZSBmaWxlLgotICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSk7Ci0gICAgICAgICAgICBmb3V0LndyaXRlKGNvbnRlbnQpOwotICAgICAgICAgICAgZm91dC5jbG9zZSgpOworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHB1YmxpYyBVcmkgY3JlYXRlVmlydHVhbEZpbGUoCisgICAgICAgICAgICBTdHJpbmcgcm9vdElkLCBTdHJpbmcgcGF0aCwgU3RyaW5nIG1pbWVUeXBlLCBMaXN0PFN0cmluZz4gc3RyZWFtVHlwZXMsIGJ5dGVbXSBjb250ZW50KQorICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKHJvb3RJZCwgcGF0aCwgbWltZVR5cGUsIGNvbnRlbnQpOworICAgICAgICBmaW5hbCBTdHViRG9jdW1lbnQgcGFyZW50ID0gbVN0b3JhZ2UuZ2V0KGdldERvY3VtZW50SWRGb3JGaWxlKGZpbGUuZ2V0UGFyZW50RmlsZSgpKSk7CisgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiUGFyZW50IG5vdCBmb3VuZC4iKTsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBTdHViRG9jdW1lbnQgZG9jdW1lbnQgPSBuZXcgU3R1YkRvY3VtZW50KGZpbGUsIG1pbWVUeXBlLCBwYXJlbnQpOworICAgICAgICBmaW5hbCBTdHViRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHViRG9jdW1lbnQuY3JlYXRlVmlydHVhbERvY3VtZW50KAorICAgICAgICAgICAgICAgIGZpbGUsIG1pbWVUeXBlLCBzdHJlYW1UeXBlcywgcGFyZW50KTsKKyAgICAgICAgbVN0b3JhZ2UucHV0KGRvY3VtZW50LmRvY3VtZW50SWQsIGRvY3VtZW50KTsKICAgICAgICAgcmV0dXJuIERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkRG9jdW1lbnRVcmkobUF1dGhvcml0eSwgIGRvY3VtZW50LmRvY3VtZW50SWQpOwogICAgIH0KIApAQCAtNDg5LDIxICs1MzMsMzkgQEAKICAgICAgICAgcmV0dXJuIGZvdW5kLmZpbGU7CiAgICAgfQogCi0gICAgZmluYWwgY2xhc3MgUm9vdEluZm8geworICAgIHByaXZhdGUgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyByb290SWQsIFN0cmluZyBwYXRoLCBTdHJpbmcgbWltZVR5cGUsIGJ5dGVbXSBjb250ZW50KQorICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBMb2cuZChUQUcsICJDcmVhdGluZyB0ZXN0IGZpbGUgIiArIHJvb3RJZCArICI6IiArIHBhdGgpOworICAgICAgICBTdHViRG9jdW1lbnQgcm9vdCA9IG1Sb290cy5nZXQocm9vdElkKS5kb2N1bWVudDsKKyAgICAgICAgaWYgKHJvb3QgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiTm8gcm9vdHMgd2l0aCB0aGUgSUQgIiArIHJvb3RJZCArICIgd2VyZSBmb3VuZCIpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIEZpbGUgZmlsZSA9IG5ldyBGaWxlKHJvb3QuZmlsZSwgcGF0aC5zdWJzdHJpbmcoMSkpOworICAgICAgICBpZiAoRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUi5lcXVhbHMobWltZVR5cGUpKSB7CisgICAgICAgICAgICBpZiAoIWZpbGUubWtkaXJzKCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDb3VsZG4ndCBjcmVhdGUgZGlyZWN0b3J5ICIgKyBmaWxlLmdldFBhdGgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWZpbGUuY3JlYXRlTmV3RmlsZSgpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigiQ291bGRuJ3QgY3JlYXRlIGZpbGUgIiArIGZpbGUuZ2V0UGF0aCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSAoZmluYWwgRmlsZU91dHB1dFN0cmVhbSBmb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZSkpIHsKKyAgICAgICAgICAgICAgICBmb3V0LndyaXRlKGNvbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmaWxlOworICAgIH0KKworICAgIGZpbmFsIHN0YXRpYyBjbGFzcyBSb290SW5mbyB7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZTsKICAgICAgICAgcHVibGljIGZpbmFsIFN0dWJEb2N1bWVudCBkb2N1bWVudDsKICAgICAgICAgcHVibGljIGxvbmcgY2FwYWNpdHk7CiAgICAgICAgIHB1YmxpYyBsb25nIHNpemU7CiAKLSAgICAgICAgUm9vdEluZm8oU3RyaW5nIG5hbWUsIGxvbmcgY2FwYWNpdHkpIHsKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIFJvb3RJbmZvKEZpbGUgZmlsZSwgbG9uZyBjYXBhY2l0eSkgeworICAgICAgICAgICAgdGhpcy5uYW1lID0gZmlsZS5nZXROYW1lKCk7CiAgICAgICAgICAgICB0aGlzLmNhcGFjaXR5ID0gMTAyNCAqIDEwMjQ7Ci0gICAgICAgICAgICAvLyBNYWtlIGEgc3ViZGlyIGluIHRoZSBjYWNoZSBkaXIgZm9yIGVhY2ggcm9vdC4KLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKGdldENvbnRleHQoKS5nZXRDYWNoZURpcigpLCBuYW1lKTsKLSAgICAgICAgICAgIGlmIChmaWxlLm1rZGlyKCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJDcmVhdGVkIG5ldyByb290IGRpcmVjdG9yeSBAICIgKyBmaWxlLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLmRvY3VtZW50ID0gbmV3IFN0dWJEb2N1bWVudChmaWxlLCBEb2N1bWVudC5NSU1FX1RZUEVfRElSLCB0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuZG9jdW1lbnQgPSBTdHViRG9jdW1lbnQuY3JlYXRlUm9vdERvY3VtZW50KGZpbGUsIHRoaXMpOwogICAgICAgICAgICAgdGhpcy5jYXBhY2l0eSA9IGNhcGFjaXR5OwogICAgICAgICAgICAgdGhpcy5zaXplID0gMDsKICAgICAgICAgfQpAQCAtNTEzLDM4ICs1NzUsNjkgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZpbmFsIGNsYXNzIFN0dWJEb2N1bWVudCB7CisgICAgZmluYWwgc3RhdGljIGNsYXNzIFN0dWJEb2N1bWVudCB7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBGaWxlIGZpbGU7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbWltZVR5cGU7CiAgICAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZG9jdW1lbnRJZDsKKyAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgcHVibGljIGZpbmFsIExpc3Q8U3RyaW5nPiBzdHJlYW1UeXBlczsKKyAgICAgICAgcHVibGljIGZpbmFsIGludCBmbGFnczsKICAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBwYXJlbnRJZDsKICAgICAgICAgcHVibGljIGZpbmFsIFJvb3RJbmZvIHJvb3RJbmZvOwogCi0gICAgICAgIFN0dWJEb2N1bWVudChGaWxlIGZpbGUsIFN0cmluZyBtaW1lVHlwZSwgU3R1YkRvY3VtZW50IHBhcmVudCkgeworICAgICAgICBwcml2YXRlIFN0dWJEb2N1bWVudCgKKyAgICAgICAgICAgICAgICAgRmlsZSBmaWxlLCBTdHJpbmcgbWltZVR5cGUsIExpc3Q8U3RyaW5nPiBzdHJlYW1UeXBlcywgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICBTdHViRG9jdW1lbnQgcGFyZW50KSB7CiAgICAgICAgICAgICB0aGlzLmZpbGUgPSBmaWxlOwotICAgICAgICAgICAgdGhpcy5taW1lVHlwZSA9IG1pbWVUeXBlOwogICAgICAgICAgICAgdGhpcy5kb2N1bWVudElkID0gZ2V0RG9jdW1lbnRJZEZvckZpbGUoZmlsZSk7CisgICAgICAgICAgICB0aGlzLm1pbWVUeXBlID0gbWltZVR5cGU7CisgICAgICAgICAgICB0aGlzLnN0cmVhbVR5cGVzID0gc3RyZWFtVHlwZXM7CisgICAgICAgICAgICB0aGlzLmZsYWdzID0gZmxhZ3M7CiAgICAgICAgICAgICB0aGlzLnBhcmVudElkID0gcGFyZW50LmRvY3VtZW50SWQ7CiAgICAgICAgICAgICB0aGlzLnJvb3RJbmZvID0gcGFyZW50LnJvb3RJbmZvOwotICAgICAgICAgICAgbVN0b3JhZ2UucHV0KHRoaXMuZG9jdW1lbnRJZCwgdGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHViRG9jdW1lbnQoRmlsZSBmaWxlLCBTdHJpbmcgbWltZVR5cGUsIFJvb3RJbmZvIHJvb3RJbmZvKSB7CisgICAgICAgIHByaXZhdGUgU3R1YkRvY3VtZW50KEZpbGUgZmlsZSwgUm9vdEluZm8gcm9vdEluZm8pIHsKICAgICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7Ci0gICAgICAgICAgICB0aGlzLm1pbWVUeXBlID0gbWltZVR5cGU7CiAgICAgICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBnZXREb2N1bWVudElkRm9yRmlsZShmaWxlKTsKKyAgICAgICAgICAgIHRoaXMubWltZVR5cGUgPSBEb2N1bWVudC5NSU1FX1RZUEVfRElSOworICAgICAgICAgICAgdGhpcy5zdHJlYW1UeXBlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICAgICAgdGhpcy5mbGFncyA9IERvY3VtZW50LkZMQUdfRElSX1NVUFBPUlRTX0NSRUFURTsKICAgICAgICAgICAgIHRoaXMucGFyZW50SWQgPSBudWxsOwogICAgICAgICAgICAgdGhpcy5yb290SW5mbyA9IHJvb3RJbmZvOwotICAgICAgICAgICAgbVN0b3JhZ2UucHV0KHRoaXMuZG9jdW1lbnRJZCwgdGhpcyk7CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgc3RhdGljIFN0dWJEb2N1bWVudCBjcmVhdGVSb290RG9jdW1lbnQoRmlsZSBmaWxlLCBSb290SW5mbyByb290SW5mbykgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHViRG9jdW1lbnQoZmlsZSwgcm9vdEluZm8pOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHViRG9jdW1lbnQgY3JlYXRlUmVndWxhckRvY3VtZW50KAorICAgICAgICAgICAgICAgIEZpbGUgZmlsZSwgU3RyaW5nIG1pbWVUeXBlLCBTdHViRG9jdW1lbnQgcGFyZW50KSB7CisgICAgICAgICAgICBpbnQgZmxhZ3MgPSBEb2N1bWVudC5GTEFHX1NVUFBPUlRTX0RFTEVURTsKKyAgICAgICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBEb2N1bWVudC5GTEFHX0RJUl9TVVBQT1JUU19DUkVBVEU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZsYWdzIHw9IERvY3VtZW50LkZMQUdfU1VQUE9SVFNfV1JJVEU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbmV3IFN0dWJEb2N1bWVudChmaWxlLCBtaW1lVHlwZSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCksIGZsYWdzLCBwYXJlbnQpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHN0YXRpYyBTdHViRG9jdW1lbnQgY3JlYXRlVmlydHVhbERvY3VtZW50KAorICAgICAgICAgICAgICAgIEZpbGUgZmlsZSwgU3RyaW5nIG1pbWVUeXBlLCBMaXN0PFN0cmluZz4gc3RyZWFtVHlwZXMsIFN0dWJEb2N1bWVudCBwYXJlbnQpIHsKKyAgICAgICAgICAgIGludCBmbGFncyA9IERvY3VtZW50LkZMQUdfU1VQUE9SVFNfREVMRVRFIHwgRG9jdW1lbnQuRkxBR19TVVBQT1JUU19XUklURQorICAgICAgICAgICAgICAgICAgICB8IERvY3VtZW50LkZMQUdfVklSVFVBTF9ET0NVTUVOVDsKKyAgICAgICAgICAgIHJldHVybiBuZXcgU3R1YkRvY3VtZW50KGZpbGUsIG1pbWVUeXBlLCBzdHJlYW1UeXBlcywgZmxhZ3MsIHBhcmVudCk7CisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIHJldHVybiAiU3R1YkRvY3VtZW50eyIKICAgICAgICAgICAgICAgICAgICAgKyAicGF0aDoiICsgZmlsZS5nZXRQYXRoKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiLCBtaW1lVHlwZToiICsgbWltZVR5cGUKLSAgICAgICAgICAgICAgICAgICAgKyAiLCByb290SW5mbzoiICsgcm9vdEluZm8KICAgICAgICAgICAgICAgICAgICAgKyAiLCBkb2N1bWVudElkOiIgKyBkb2N1bWVudElkCisgICAgICAgICAgICAgICAgICAgICsgIiwgbWltZVR5cGU6IiArIG1pbWVUeXBlCisgICAgICAgICAgICAgICAgICAgICsgIiwgc3RyZWFtVHlwZXM6IiArIHN0cmVhbVR5cGVzLnRvU3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgICAgKyAiLCBmbGFnczoiICsgZmxhZ3MKICAgICAgICAgICAgICAgICAgICAgKyAiLCBwYXJlbnRJZDoiICsgcGFyZW50SWQKKyAgICAgICAgICAgICAgICAgICAgKyAiLCByb290SW5mbzoiICsgcm9vdEluZm8KICAgICAgICAgICAgICAgICAgICAgKyAifSI7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9EaXJlY3RvcnlGcmFnbWVudE1vZGVsVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvRGlyZWN0b3J5RnJhZ21lbnRNb2RlbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI1MGU1ZC4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9EaXJlY3RvcnlGcmFnbWVudE1vZGVsVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0V3JhcHBlcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLkN1cnNvcjsKLWltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLk1hdHJpeEN1cnNvcjsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50OwotaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lm1vY2suTW9ja0NvbnRlbnRSZXNvbHZlcjsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5EaXJlY3RvcnlSZXN1bHQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5EaXJlY3RvcnlGcmFnbWVudC5Nb2RlbDsKLWltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5TZWxlY3Rpb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkubW9kZWwuRG9jdW1lbnRJbmZvOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLUBTbWFsbFRlc3QKLXB1YmxpYyBjbGFzcyBEaXJlY3RvcnlGcmFnbWVudE1vZGVsVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSVRFTV9DT1VOVCA9IDU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09MVU1OUyA9IG5ldyBTdHJpbmdbXXsKLSAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lECi0gICAgfTsKLSAgICBwcml2YXRlIHN0YXRpYyBDdXJzb3IgY3Vyc29yOwotCi0gICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwotICAgIHByaXZhdGUgTW9kZWwgbW9kZWw7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICAgICAgc2V0dXBUZXN0Q29udGV4dCgpOwotCi0gICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihDT0xVTU5TKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJVEVNX0NPVU5UOyArK2kpIHsKLSAgICAgICAgICAgIE1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyIHJvdyA9IGMubmV3Um93KCk7Ci0gICAgICAgICAgICByb3cuYWRkKENPTFVNTlNbMF0sIGkpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnNvciA9IGM7Ci0KLSAgICAgICAgRGlyZWN0b3J5UmVzdWx0IHIgPSBuZXcgRGlyZWN0b3J5UmVzdWx0KCk7Ci0gICAgICAgIHIuY3Vyc29yID0gY3Vyc29yOwotCi0gICAgICAgIC8vIEluc3RhbnRpYXRlIHRoZSBtb2RlbCB3aXRoIGEgZHVtbXkgdmlldyBhZGFwdGVyIGFuZCBsaXN0ZW5lciB0aGF0IChmb3Igbm93KSBkbyBub3RoaW5nLgotICAgICAgICBtb2RlbCA9IG5ldyBNb2RlbChtQ29udGV4dCwgbmV3IER1bW15QWRhcHRlcigpKTsKLSAgICAgICAgbW9kZWwuYWRkVXBkYXRlTGlzdGVuZXIobmV3IER1bW15TGlzdGVuZXIoKSk7Ci0gICAgICAgIG1vZGVsLnVwZGF0ZShyKTsKLSAgICB9Ci0KLSAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtIGNvdW50IGlzIGNvcnJlY3QuCi0gICAgcHVibGljIHZvaWQgdGVzdEl0ZW1Db3VudCgpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKElURU1fQ09VTlQsIG1vZGVsLmdldEl0ZW1Db3VudCgpKTsKLSAgICB9Ci0KLSAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtIGNvdW50IGlzIGNvcnJlY3QgYWZ0ZXIgYSBkZWxldGlvbi4KLSAgICBwdWJsaWMgdm9pZCB0ZXN0SXRlbUNvdW50X1dpdGhEZWxldGlvbigpIHsKLSAgICAgICAgLy8gU2ltdWxhdGUgZGVsZXRpbmcgMiBmaWxlcy4KLSAgICAgICAgZGVsZXRlKDIsIDQpOwotCi0gICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5UIC0gMiwgbW9kZWwuZ2V0SXRlbUNvdW50KCkpOwotICAgIH0KLQotICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW0gY291bnQgaXMgY29ycmVjdCBhZnRlciBhIGRlbGV0aW9uIGlzIHVuZG9uZS4KLSAgICBwdWJsaWMgdm9pZCB0ZXN0SXRlbUNvdW50X1dpdGhVbmRvbmVEZWxldGlvbigpIHsKLSAgICAgICAgLy8gU2ltdWxhdGUgZGVsZXRpbmcgMiBmaWxlcy4KLSAgICAgICAgZGVsZXRlKDAsIDMpOwotCi0gICAgICAgIC8vIFVuZG8gdGhlIGRlbGV0aW9uCi0gICAgICAgIG1vZGVsLnVuZG9EZWxldGlvbigpOwotICAgICAgICBhc3NlcnRFcXVhbHMoSVRFTV9DT1VOVCwgbW9kZWwuZ2V0SXRlbUNvdW50KCkpOwotICAgIH0KLQotICAgIC8vIFRlc3RzIHRoYXQgdGhlIHJpZ2h0IHRoaW5ncyBhcmUgbWFya2VkIGZvciBkZWxldGlvbi4KLSAgICBwdWJsaWMgdm9pZCB0ZXN0TWFya0ZvckRlbGV0aW9uKCkgewotICAgICAgICBkZWxldGUoMSwgMyk7Ci0KLSAgICAgICAgTGlzdDxEb2N1bWVudEluZm8+IGRvY3MgPSBtb2RlbC5nZXREb2N1bWVudHNNYXJrZWRGb3JEZWxldGlvbigpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZG9jcy5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjEiLCBkb2NzLmdldCgwKS5kb2N1bWVudElkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIzIiwgZG9jcy5nZXQoMSkuZG9jdW1lbnRJZCk7Ci0gICAgfQotCi0gICAgLy8gVGVzdHMgdGhlIGJhc2UgY2FzZSBmb3IgTW9kZWwuZ2V0SXRlbS4KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SXRlbSgpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJVEVNX0NPVU5UOyArK2kpIHsKLSAgICAgICAgICAgIEN1cnNvciBjID0gbW9kZWwuZ2V0SXRlbShpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhpLCBjLmdldFBvc2l0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGVzdHMgdGhhdCBNb2RlbC5nZXRJdGVtIHJldHVybnMgdGhlIHJpZ2h0IGl0ZW1zIGFmdGVyIGEgZGVsZXRpb24uCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEl0ZW1fV2l0aERlbGV0aW9uKCkgewotICAgICAgICAvLyBTaW11bGF0ZSBkZWxldGluZyAyIGZpbGVzLgotICAgICAgICBkZWxldGUoMiwgMyk7Ci0KLSAgICAgICAgTGlzdDxEb2N1bWVudEluZm8+IGRvY3MgPSBnZXREb2N1bWVudEluZm8oMCwgMSwgMik7Ci0gICAgICAgIGFzc2VydEVxdWFscygiMCIsIGRvY3MuZ2V0KDApLmRvY3VtZW50SWQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIjEiLCBkb2NzLmdldCgxKS5kb2N1bWVudElkKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCI0IiwgZG9jcy5nZXQoMikuZG9jdW1lbnRJZCk7Ci0gICAgfQotCi0gICAgLy8gVGVzdHMgdGhhdCBNb2RlbC5nZXRJdGVtIHJldHVybnMgdGhlIHJpZ2h0IGl0ZW1zIGFmdGVyIGEgZGVsZXRpb24gaXMgdW5kb25lLgotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJdGVtX1dpdGhDYW5jZWxsZWREZWxldGlvbigpIHsKLSAgICAgICAgZGVsZXRlKDAsIDEpOwotICAgICAgICBtb2RlbC51bmRvRGVsZXRpb24oKTsKLQotICAgICAgICAvLyBUZXN0IHRoYXQgYWxsIGRvY3VtZW50cyBhcmUgYWNjb3VudGVkIGZvciwgaW4gdGhlIHJpZ2h0IHBvc2l0aW9uLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElURU1fQ09VTlQ7ICsraSkgewotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIudG9TdHJpbmcoaSksIGdldERvY3VtZW50SW5mbyhpKS5nZXQoMCkuZG9jdW1lbnRJZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0dXBUZXN0Q29udGV4dCgpIHsKLSAgICAgICAgZmluYWwgTW9ja0NvbnRlbnRSZXNvbHZlciByZXNvbHZlciA9IG5ldyBNb2NrQ29udGVudFJlc29sdmVyKCk7Ci0gICAgICAgIG1Db250ZXh0ID0gbmV3IENvbnRleHRXcmFwcGVyKGdldENvbnRleHQoKSkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgQ29udGVudFJlc29sdmVyIGdldENvbnRlbnRSZXNvbHZlcigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRlbGV0ZShpbnQuLi4gcG9zaXRpb25zKSB7Ci0gICAgICAgIG1vZGVsLm1hcmtGb3JEZWxldGlvbihuZXcgU2VsZWN0aW9uKHBvc2l0aW9ucykpOwotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdDxEb2N1bWVudEluZm8+IGdldERvY3VtZW50SW5mbyhpbnQuLi4gcG9zaXRpb25zKSB7Ci0gICAgICAgIHJldHVybiBtb2RlbC5nZXREb2N1bWVudHMobmV3IFNlbGVjdGlvbihwb3NpdGlvbnMpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEdW1teUxpc3RlbmVyIGV4dGVuZHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgewotICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7fQotICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7fQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15QWRhcHRlciBleHRlbmRzIFJlY3ljbGVyVmlldy5BZGFwdGVyPFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyPiB7Ci0gICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeyByZXR1cm4gMDsgfQotICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7fQotICAgICAgICBwdWJsaWMgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIgb25DcmVhdGVWaWV3SG9sZGVyKFZpZXdHcm91cCBwYXJlbnQsIGludCB2aWV3VHlwZSkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlMTgyMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsQmFja2VkRG9jdW1lbnRzQWRhcHRlclRlc3QuamF2YQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLlN0YXRlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK0BTbWFsbFRlc3QKK3B1YmxpYyBjbGFzcyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXJUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVVRIT1JJVFkgPSAidGVzdF9hdXRob3JpdHkiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIE5BTUVTID0gbmV3IFN0cmluZ1tdIHsKKyAgICAgICAgICAgICI0IiwKKyAgICAgICAgICAgICJmb28iLAorICAgICAgICAgICAgIjEiLAorICAgICAgICAgICAgImJhciIsCisgICAgICAgICAgICAiKihMamlmbDthIiwKKyAgICAgICAgICAgICIwIiwKKyAgICAgICAgICAgICJiYXoiLAorICAgICAgICAgICAgIjIiLAorICAgICAgICAgICAgIjMiLAorICAgICAgICAgICAgIiUkJVZEIgorICAgIH07CisKKyAgICBwcml2YXRlIFRlc3RNb2RlbCBtTW9kZWw7CisgICAgcHJpdmF0ZSBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIgbUFkYXB0ZXI7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKworICAgICAgICBmaW5hbCBDb250ZXh0IHRlc3RDb250ZXh0ID0gVGVzdENvbnRleHQuY3JlYXRlU3RvcmFnZVRlc3RDb250ZXh0KGdldENvbnRleHQoKSwgQVVUSE9SSVRZKTsKKyAgICAgICAgbU1vZGVsID0gbmV3IFRlc3RNb2RlbCh0ZXN0Q29udGV4dCwgQVVUSE9SSVRZKTsKKyAgICAgICAgbU1vZGVsLnVwZGF0ZShOQU1FUyk7CisKKyAgICAgICAgRG9jdW1lbnRzQWRhcHRlci5FbnZpcm9ubWVudCBlbnYgPSBuZXcgVGVzdEVudmlyb25tZW50KHRlc3RDb250ZXh0KTsKKworICAgICAgICBtQWRhcHRlciA9IG5ldyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIoCisgICAgICAgICAgICAgICAgZW52LCBuZXcgSWNvbkhlbHBlcih0ZXN0Q29udGV4dCwgU3RhdGUuTU9ERV9HUklEKSk7CisgICAgICAgIG1BZGFwdGVyLm9uTW9kZWxVcGRhdGUobU1vZGVsKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtIGNvdW50IGlzIGNvcnJlY3QuCisgICAgcHVibGljIHZvaWQgdGVzdEl0ZW1Db3VudCgpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSwgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkpOworICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW0gY291bnQgaXMgY29ycmVjdC4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SGlkZV9JdGVtQ291bnQoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBpZHMgPSBtTW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgbUFkYXB0ZXIuaGlkZShpZHMuZ2V0KDApLCBpZHMuZ2V0KDEpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSAtIDIsIG1BZGFwdGVyLmdldEl0ZW1Db3VudCgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtcyBjYW4gYmUgaGlkZGVuIGFuZCB1bmhpZGRlbi4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0VW5oaWRlX0l0ZW1Db3VudCgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGlkcyA9IG1Nb2RlbC5nZXRNb2RlbElkcygpOworICAgICAgICBTcGFyc2VBcnJheTxTdHJpbmc+IGhpZGRlbiA9IG1BZGFwdGVyLmhpZGUoaWRzLnRvQXJyYXkobmV3IFN0cmluZ1tpZHMuc2l6ZSgpXSkpOworICAgICAgICBtQWRhcHRlci51bmhpZGUoaGlkZGVuKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSwgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkpOworICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW1zIGNhbiBiZSBoaWRkZW4gYW5kIHVuaGlkZGVuLgorICAgIHB1YmxpYyB2b2lkIHRlc3RVbmhpZGVfUHJlc2VydmVzT3JkZXIoKSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBpZHMgPSBtTW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRkZW4gPSBtQWRhcHRlci5oaWRlKAorICAgICAgICAgICAgICAgIGlkcy5nZXQoMCksIGlkcy5nZXQoMSksIGlkcy5nZXQoNSksIGlkcy5nZXQoOSkpOworICAgICAgICBtQWRhcHRlci51bmhpZGUoaGlkZGVuKTsKKworICAgICAgICAvLyBGaW5hbGx5IGVuc3VyZSB0aGUgcmVzdG9yZWQgaXRlbXMgYXJlIGluIHRoZSBvcmlnaW5hbCBvcmRlcgorICAgICAgICAvLyBieSBjaGVja2luZyB0aGVtIGFnYWluc3QgdGhlIG1vZGVsLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1BZGFwdGVyLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhtTW9kZWwuaWRGb3JQb3NpdGlvbihpKSwgbUFkYXB0ZXIuZ2V0TW9kZWxJZChpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFRlc3RFbnZpcm9ubWVudCBpbXBsZW1lbnRzIERvY3VtZW50c0FkYXB0ZXIuRW52aXJvbm1lbnQgeworICAgICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgdGVzdENvbnRleHQ7CisKKyAgICAgICAgcHJpdmF0ZSBUZXN0RW52aXJvbm1lbnQoQ29udGV4dCB0ZXN0Q29udGV4dCkgeworICAgICAgICAgICAgdGhpcy50ZXN0Q29udGV4dCA9IHRlc3RDb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzU2VsZWN0ZWQoU3RyaW5nIGlkKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudEVuYWJsZWQoU3RyaW5nIG1pbWVUeXBlLCBpbnQgZmxhZ3MpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGluaXREb2N1bWVudEhvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIpIHt9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBNb2RlbCBnZXRNb2RlbCgpIHsKKyAgICAgICAgICAgIHJldHVybiBtTW9kZWw7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0YXRlIGdldERpc3BsYXlTdGF0ZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDb250ZXh0IGdldENvbnRleHQoKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdENvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBnZXRDb2x1bW5Db3VudCgpIHsKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQmluZERvY3VtZW50SG9sZGVyKERvY3VtZW50SG9sZGVyIGhvbGRlciwgQ3Vyc29yIGN1cnNvcikge30KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEdW1teUxpc3RlbmVyIGltcGxlbWVudHMgTW9kZWwuVXBkYXRlTGlzdGVuZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7fQorICAgICAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlRmFpbGVkKEV4Y2VwdGlvbiBlKSB7fQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15QWRhcHRlciBleHRlbmRzIFJlY3ljbGVyVmlldy5BZGFwdGVyPFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyPiB7CisgICAgICAgIHB1YmxpYyBpbnQgZ2V0SXRlbUNvdW50KCkgeyByZXR1cm4gMDsgfQorICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIGhvbGRlciwgaW50IHBvc2l0aW9uKSB7fQorICAgICAgICBwdWJsaWMgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIgb25DcmVhdGVWaWV3SG9sZGVyKFZpZXdHcm91cCBwYXJlbnQsIGludCB2aWV3VHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbFRlc3QuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L01vZGVsVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZjA2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9Nb2RlbFRlc3QuamF2YQpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuTWF0cml4Q3Vyc29yOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CitpbXBvcnQgYW5kcm9pZC50ZXN0LkFuZHJvaWRUZXN0Q2FzZTsKK2ltcG9ydCBhbmRyb2lkLnRlc3QubW9jay5Nb2NrQ29udGVudFJlc29sdmVyOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5EaXJlY3RvcnlSZXN1bHQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUm9vdEN1cnNvcldyYXBwZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5NdWx0aVNlbGVjdE1hbmFnZXIuU2VsZWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkJpdFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7CisKK0BTbWFsbFRlc3QKK3B1YmxpYyBjbGFzcyBNb2RlbFRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElURU1fQ09VTlQgPSAxMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUSE9SSVRZID0gInRlc3RfYXV0aG9yaXR5IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENPTFVNTlMgPSBuZXcgU3RyaW5nW117CisgICAgICAgIFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLAorICAgICAgICBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FLAorICAgICAgICBEb2N1bWVudC5DT0xVTU5fU0laRSwKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQsCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9NSU1FX1RZUEUKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gTkFNRVMgPSBuZXcgU3RyaW5nW10geworICAgICAgICAgICAgIjQiLAorICAgICAgICAgICAgImZvbyIsCisgICAgICAgICAgICAiMSIsCisgICAgICAgICAgICAiYmFyIiwKKyAgICAgICAgICAgICIqKExqaWZsO2EiLAorICAgICAgICAgICAgIjAiLAorICAgICAgICAgICAgImJheiIsCisgICAgICAgICAgICAiMiIsCisgICAgICAgICAgICAiMyIsCisgICAgICAgICAgICAiJSQlVkQiCisgICAgICAgIH07CisKKyAgICBwcml2YXRlIEN1cnNvciBjdXJzb3I7CisgICAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7CisgICAgcHJpdmF0ZSBNb2RlbCBtb2RlbDsKKyAgICBwcml2YXRlIFRlc3RDb250ZW50UHJvdmlkZXIgcHJvdmlkZXI7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKyAgICAgICAgc2V0dXBUZXN0Q29udGV4dCgpOworCisgICAgICAgIFJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpOworCisgICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihDT0xVTU5TKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJVEVNX0NPVU5UOyArK2kpIHsKKyAgICAgICAgICAgIE1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyIHJvdyA9IGMubmV3Um93KCk7CisgICAgICAgICAgICByb3cuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIEFVVEhPUklUWSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwgSW50ZWdlci50b1N0cmluZyhpKSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9GTEFHUywgRG9jdW1lbnQuRkxBR19TVVBQT1JUU19ERUxFVEUpOworICAgICAgICAgICAgLy8gR2VuZXJhdGUgcmFuZG9tIGRvY3VtZW50IG5hbWVzIGFuZCBzaXplcy4gVGhpcyBmb3JjZXMgdGhlIG1vZGVsJ3MgaW50ZXJuYWwgc29ydCBjb2RlCisgICAgICAgICAgICAvLyB0byBhY3R1YWxseSBkbyBzb21ldGhpbmcuCisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUsIE5BTUVTW2ldKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX1NJWkUsIHJhbmQubmV4dEludCgpKTsKKyAgICAgICAgfQorICAgICAgICBjdXJzb3IgPSBjOworCisgICAgICAgIERpcmVjdG9yeVJlc3VsdCByID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOworICAgICAgICByLmN1cnNvciA9IGN1cnNvcjsKKworICAgICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgbW9kZWwgd2l0aCBhIGR1bW15IHZpZXcgYWRhcHRlciBhbmQgbGlzdGVuZXIgdGhhdCAoZm9yIG5vdykgZG8gbm90aGluZy4KKyAgICAgICAgbW9kZWwgPSBuZXcgTW9kZWwoY29udGV4dCk7CisgICAgICAgIG1vZGVsLmFkZFVwZGF0ZUxpc3RlbmVyKG5ldyBEdW1teUxpc3RlbmVyKCkpOworICAgICAgICBtb2RlbC51cGRhdGUocik7CisgICAgfQorCisgICAgLy8gVGVzdHMgdGhhdCB0aGUgbW9kZWwgaXMgcHJvcGVybHkgZW1wdGllZCBvdXQgYWZ0ZXIgYSBudWxsIHVwZGF0ZS4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0TnVsbFVwZGF0ZSgpIHsKKyAgICAgICAgbW9kZWwudXBkYXRlKG51bGwpOworCisgICAgICAgIGFzc2VydFRydWUobW9kZWwuaXNFbXB0eSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG1vZGVsLmdldEl0ZW1Db3VudCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG1vZGVsLmdldE1vZGVsSWRzKCkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IHRoZSBpdGVtIGNvdW50IGlzIGNvcnJlY3QuCisgICAgcHVibGljIHZvaWQgdGVzdEl0ZW1Db3VudCgpIHsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKElURU1fQ09VTlQsIG1vZGVsLmdldEl0ZW1Db3VudCgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyBtdWx0aXBsZSBhdXRob3JpdGllcyB3aXRoIGNsYXNoaW5nIGRvY3VtZW50IElEcy4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW9kZWxJZElzVW5pcXVlKCkgeworICAgICAgICBNYXRyaXhDdXJzb3IgY0luID0gbmV3IE1hdHJpeEN1cnNvcihDT0xVTU5TKTsKKworICAgICAgICAvLyBNYWtlIHR3byBzZXRzIG9mIGl0ZW1zIHdpdGggdGhlIHNhbWUgSURzLCB1bmRlciBkaWZmZXJlbnQgYXV0aG9yaXRpZXMuCisgICAgICAgIGZpbmFsIFN0cmluZyBBVVRIT1JJVFkwID0gImF1dGgwIjsKKyAgICAgICAgZmluYWwgU3RyaW5nIEFVVEhPUklUWTEgPSAiYXV0aDEiOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElURU1fQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgTWF0cml4Q3Vyc29yLlJvd0J1aWxkZXIgcm93MCA9IGNJbi5uZXdSb3coKTsKKyAgICAgICAgICAgIHJvdzAuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIEFVVEhPUklUWTApOworICAgICAgICAgICAgcm93MC5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKworICAgICAgICAgICAgTWF0cml4Q3Vyc29yLlJvd0J1aWxkZXIgcm93MSA9IGNJbi5uZXdSb3coKTsKKyAgICAgICAgICAgIHJvdzEuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIEFVVEhPUklUWTEpOworICAgICAgICAgICAgcm93MS5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwsIHRoZW4gbWFrZSBzdXJlIGl0IGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQgaXRlbXMuCisgICAgICAgIERpcmVjdG9yeVJlc3VsdCByID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOworICAgICAgICByLmN1cnNvciA9IGNJbjsKKyAgICAgICAgbW9kZWwudXBkYXRlKHIpOworCisgICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5UICogMiwgbW9kZWwuZ2V0SXRlbUNvdW50KCkpOworICAgICAgICBCaXRTZXQgYjAgPSBuZXcgQml0U2V0KElURU1fQ09VTlQpOworICAgICAgICBCaXRTZXQgYjEgPSBuZXcgQml0U2V0KElURU1fQ09VTlQpOworCisgICAgICAgIGZvciAoU3RyaW5nIGlkOiBtb2RlbC5nZXRNb2RlbElkcygpKSB7CisgICAgICAgICAgICBDdXJzb3IgY091dCA9IG1vZGVsLmdldEl0ZW0oaWQpOworICAgICAgICAgICAgU3RyaW5nIGF1dGhvcml0eSA9CisgICAgICAgICAgICAgICAgICAgIERvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmcoY091dCwgUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSk7CisgICAgICAgICAgICBTdHJpbmcgZG9jSWQgPSBEb2N1bWVudEluZm8uZ2V0Q3Vyc29yU3RyaW5nKGNPdXQsIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXV0aG9yaXR5KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBVVRIT1JJVFkwOgorICAgICAgICAgICAgICAgICAgICBiMC5zZXQoSW50ZWdlci5wYXJzZUludChkb2NJZCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFVVEhPUklUWTE6CisgICAgICAgICAgICAgICAgICAgIGIxLnNldChJbnRlZ2VyLnBhcnNlSW50KGRvY0lkKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVucmVjb2duaXplZCBhdXRob3JpdHkgc3RyaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRFcXVhbHMoSVRFTV9DT1VOVCwgYjAuY2FyZGluYWxpdHkoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5ULCBiMS5jYXJkaW5hbGl0eSgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGUgYmFzZSBjYXNlIGZvciBNb2RlbC5nZXRJdGVtLgorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJdGVtKCkgeworICAgICAgICBMaXN0PFN0cmluZz4gaWRzID0gbW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKElURU1fQ09VTlQsIGlkcy5zaXplKCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElURU1fQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgQ3Vyc29yIGMgPSBtb2RlbC5nZXRJdGVtKGlkcy5nZXQoaSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKGksIGMuZ2V0UG9zaXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZXN0cyBzb3J0aW5nIGJ5IGl0ZW0gbmFtZS4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U29ydF9uYW1lcygpIHsKKyAgICAgICAgQml0U2V0IHNlZW4gPSBuZXcgQml0U2V0KElURU1fQ09VTlQpOworICAgICAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBEaXJlY3RvcnlSZXN1bHQgciA9IG5ldyBEaXJlY3RvcnlSZXN1bHQoKTsKKyAgICAgICAgci5jdXJzb3IgPSBjdXJzb3I7CisgICAgICAgIHIuc29ydE9yZGVyID0gU3RhdGUuU09SVF9PUkRFUl9ESVNQTEFZX05BTUU7CisgICAgICAgIG1vZGVsLnVwZGF0ZShyKTsKKworICAgICAgICBmb3IgKFN0cmluZyBpZDogbW9kZWwuZ2V0TW9kZWxJZHMoKSkgeworICAgICAgICAgICAgQ3Vyc29yIGMgPSBtb2RlbC5nZXRJdGVtKGlkKTsKKyAgICAgICAgICAgIHNlZW4uc2V0KGMuZ2V0UG9zaXRpb24oKSk7CisgICAgICAgICAgICBuYW1lcy5hZGQoRG9jdW1lbnRJbmZvLmdldEN1cnNvclN0cmluZyhjLCBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FKSk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRFcXVhbHMoSVRFTV9DT1VOVCwgc2Vlbi5jYXJkaW5hbGl0eSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCktMTsgKytpKSB7CisgICAgICAgICAgICBhc3NlcnRUcnVlKERvY3VtZW50SW5mby5jb21wYXJlVG9JZ25vcmVDYXNlTnVsbGFibGUobmFtZXMuZ2V0KGkpLCBuYW1lcy5nZXQoaSsxKSkgPD0gMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZXN0cyBzb3J0aW5nIGJ5IGl0ZW0gc2l6ZS4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0U29ydF9zaXplcygpIHsKKyAgICAgICAgRGlyZWN0b3J5UmVzdWx0IHIgPSBuZXcgRGlyZWN0b3J5UmVzdWx0KCk7CisgICAgICAgIHIuY3Vyc29yID0gY3Vyc29yOworICAgICAgICByLnNvcnRPcmRlciA9IFN0YXRlLlNPUlRfT1JERVJfU0laRTsKKyAgICAgICAgbW9kZWwudXBkYXRlKHIpOworCisgICAgICAgIEJpdFNldCBzZWVuID0gbmV3IEJpdFNldChJVEVNX0NPVU5UKTsKKyAgICAgICAgaW50IHByZXZpb3VzU2l6ZSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICBmb3IgKFN0cmluZyBpZDogbW9kZWwuZ2V0TW9kZWxJZHMoKSkgeworICAgICAgICAgICAgQ3Vyc29yIGMgPSBtb2RlbC5nZXRJdGVtKGlkKTsKKyAgICAgICAgICAgIHNlZW4uc2V0KGMuZ2V0UG9zaXRpb24oKSk7CisgICAgICAgICAgICAvLyBDaGVjayBzb3J0IG9yZGVyIC0gZGVzY2VuZGluZyBudW1lcmljYWwKKyAgICAgICAgICAgIGludCBzaXplID0gRG9jdW1lbnRJbmZvLmdldEN1cnNvckludChjLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHByZXZpb3VzU2l6ZSA+PSBzaXplKTsKKyAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgaXRlbXMgd2VyZSBhY2NvdW50ZWQgZm9yLgorICAgICAgICBhc3NlcnRFcXVhbHMoSVRFTV9DT1VOVCwgc2Vlbi5jYXJkaW5hbGl0eSgpKTsKKyAgICB9CisKKyAgICAvLyBUZXN0cyB0aGF0IGRpcmVjdG9yaWVzIGFuZCBmaWxlcyBhcmUgcHJvcGVybHkgYnVja2V0ZWQgd2hlbiBzb3J0aW5nIGJ5IHNpemUKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U29ydF9zaXplc1dpdGhCdWNrZXRpbmcoKSB7CisgICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihDT0xVTU5TKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElURU1fQ09VTlQ7ICsraSkgeworICAgICAgICAgICAgTWF0cml4Q3Vyc29yLlJvd0J1aWxkZXIgcm93ID0gYy5uZXdSb3coKTsKKyAgICAgICAgICAgIHJvdy5hZGQoUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSwgQVVUSE9SSVRZKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX1NJWkUsIGkpOworICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZSBkaXJlY3RvcmllcyBhbmQgdGV4dCBmaWxlcy4KKyAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9KGkgJSAyID09IDApID8gRG9jdW1lbnQuTUlNRV9UWVBFX0RJUiA6ICJ0ZXh0LyoiOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFLCBtaW1lVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBEaXJlY3RvcnlSZXN1bHQgciA9IG5ldyBEaXJlY3RvcnlSZXN1bHQoKTsKKyAgICAgICAgci5jdXJzb3IgPSBjOworICAgICAgICByLnNvcnRPcmRlciA9IFN0YXRlLlNPUlRfT1JERVJfU0laRTsKKyAgICAgICAgbW9kZWwudXBkYXRlKHIpOworCisgICAgICAgIGJvb2xlYW4gc2VlbkFsbERpcnMgPSBmYWxzZTsKKyAgICAgICAgaW50IHByZXZpb3VzU2l6ZSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICBCaXRTZXQgc2VlbiA9IG5ldyBCaXRTZXQoSVRFTV9DT1VOVCk7CisgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBpdGVtcyBpbiBzb3J0IG9yZGVyLiBPbmNlIHdlJ3ZlIGVuY291bnRlcmVkIGEgZG9jdW1lbnQgKGkuZS4gbm90IGEKKyAgICAgICAgLy8gZGlyZWN0b3J5KSwgYWxsIHN1YnNlcXVlbnQgaXRlbXMgbXVzdCBhbHNvIGJlIGRvY3VtZW50cy4gVGhhdCBpcywgYWxsIGRpcmVjdG9yaWVzIGFyZQorICAgICAgICAvLyBidWNrZXRlZCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3QsIHNvcnRlZCBieSBzaXplLCBmb2xsb3dlZCBieSBkb2N1bWVudHMsIHNvcnRlZCBieSBzaXplLgorICAgICAgICBmb3IgKFN0cmluZyBpZDogbW9kZWwuZ2V0TW9kZWxJZHMoKSkgeworICAgICAgICAgICAgQ3Vyc29yIGNPdXQgPSBtb2RlbC5nZXRJdGVtKGlkKTsKKyAgICAgICAgICAgIHNlZW4uc2V0KGNPdXQuZ2V0UG9zaXRpb24oKSk7CisKKyAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9IERvY3VtZW50SW5mby5nZXRDdXJzb3JTdHJpbmcoY091dCwgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSk7CisgICAgICAgICAgICBpZiAoc2VlbkFsbERpcnMpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRGYWxzZShEb2N1bWVudC5NSU1FX1RZUEVfRElSLmVxdWFscyhtaW1lVHlwZSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIURvY3VtZW50Lk1JTUVfVFlQRV9ESVIuZXF1YWxzKG1pbWVUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBzZWVuQWxsRGlycyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwcmV2aW91cyBzaXplIHNlZW4sIGJlY2F1c2UgZG9jdW1lbnRzIGFyZSBidWNrZXRlZCBzZXBhcmF0ZWx5IGJ5CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzb3J0LgorICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1NpemUgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDaGVjayBzb3J0IG9yZGVyIC0gZGVzY2VuZGluZyBudW1lcmljYWwKKyAgICAgICAgICAgIGludCBzaXplID0gRG9jdW1lbnRJbmZvLmdldEN1cnNvckludChjLCBEb2N1bWVudC5DT0xVTU5fU0laRSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHByZXZpb3VzU2l6ZSA+PSBzaXplKTsKKyAgICAgICAgICAgIHByZXZpb3VzU2l6ZSA9IHNpemU7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGF0IGFsbCBpdGVtcyB3ZXJlIGFjY291bnRlZCBmb3IuCisgICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5ULCBzZWVuLmNhcmRpbmFsaXR5KCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTb3J0X3RpbWUoKSB7CisgICAgICAgIGZpbmFsIGludCBETF9DT1VOVCA9IDM7CisgICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihDT0xVTU5TKTsKKyAgICAgICAgU2V0PFN0cmluZz4gY3VycmVudERvd25sb2FkcyA9IG5ldyBIYXNoU2V0PD4oKTsKKworICAgICAgICAvLyBBZGQgc29tZSBmaWxlcworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElURU1fQ09VTlQ7IGkrKykgeworICAgICAgICAgICAgTWF0cml4Q3Vyc29yLlJvd0J1aWxkZXIgcm93ID0gYy5uZXdSb3coKTsKKyAgICAgICAgICAgIHJvdy5hZGQoUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSwgQVVUSE9SSVRZKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQsIFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICAgICAgfQorICAgICAgICAvLyBBZGQgc29tZSBjdXJyZW50IGRvd25sb2FkcyAobm8gdGltZXN0YW1wKQorICAgICAgICBmb3IgKGludCBpID0gSVRFTV9DT1VOVDsgaSA8IElURU1fQ09VTlQgKyBETF9DT1VOVDsgaSsrKSB7CisgICAgICAgICAgICBNYXRyaXhDdXJzb3IuUm93QnVpbGRlciByb3cgPSBjLm5ld1JvdygpOworICAgICAgICAgICAgU3RyaW5nIGlkID0gSW50ZWdlci50b1N0cmluZyhpKTsKKyAgICAgICAgICAgIHJvdy5hZGQoUm9vdEN1cnNvcldyYXBwZXIuQ09MVU1OX0FVVEhPUklUWSwgQVVUSE9SSVRZKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELCBpZCk7CisgICAgICAgICAgICBjdXJyZW50RG93bmxvYWRzLmFkZChNb2RlbC5jcmVhdGVNb2RlbElkKEFVVEhPUklUWSwgaWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIERpcmVjdG9yeVJlc3VsdCByID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOworICAgICAgICByLmN1cnNvciA9IGM7CisgICAgICAgIHIuc29ydE9yZGVyID0gU3RhdGUuU09SVF9PUkRFUl9MQVNUX01PRElGSUVEOworICAgICAgICBtb2RlbC51cGRhdGUocik7CisKKyAgICAgICAgTGlzdDxTdHJpbmc+IGlkcyA9IG1vZGVsLmdldE1vZGVsSWRzKCk7CisKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgaXRlbXMgd2VyZSBhY2NvdW50ZWQgZm9yCisgICAgICAgIGFzc2VydEVxdWFscyhJVEVNX0NPVU5UICsgRExfQ09VTlQsIGlkcy5zaXplKCkpOworCisgICAgICAgIC8vIENoZWNrIHRoYXQgYWN0aXZlIGRvd25sb2FkcyBhcmUgc29ydGVkIHRvIHRoZSB0b3AuCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRExfQ09VTlQ7IGkrKykgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjdXJyZW50RG93bmxvYWRzLmNvbnRhaW5zKGlkcy5nZXQoaSkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgTW9kZWwuZGVsZXRlIHdvcmtzIGNvcnJlY3RseS4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIC8vIFNpbXVsYXRlIGRlbGV0aW5nIDIgZmlsZXMuCisgICAgICAgIExpc3Q8RG9jdW1lbnRJbmZvPiBkb2NzQmVmb3JlID0gZ2V0RG9jdW1lbnRJbmZvKDIsIDMpOworICAgICAgICBkZWxldGUoMiwgMyk7CisKKyAgICAgICAgcHJvdmlkZXIuYXNzZXJ0V2FzRGVsZXRlZChkb2NzQmVmb3JlLmdldCgwKSk7CisgICAgICAgIHByb3ZpZGVyLmFzc2VydFdhc0RlbGV0ZWQoZG9jc0JlZm9yZS5nZXQoMSkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXR1cFRlc3RDb250ZXh0KCkgeworICAgICAgICBmaW5hbCBNb2NrQ29udGVudFJlc29sdmVyIHJlc29sdmVyID0gbmV3IE1vY2tDb250ZW50UmVzb2x2ZXIoKTsKKyAgICAgICAgY29udGV4dCA9IG5ldyBDb250ZXh0V3JhcHBlcihnZXRDb250ZXh0KCkpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIENvbnRlbnRSZXNvbHZlciBnZXRDb250ZW50UmVzb2x2ZXIoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVyOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBwcm92aWRlciA9IG5ldyBUZXN0Q29udGVudFByb3ZpZGVyKCk7CisgICAgICAgIHJlc29sdmVyLmFkZFByb3ZpZGVyKEFVVEhPUklUWSwgcHJvdmlkZXIpOworICAgIH0KKworICAgIHByaXZhdGUgU2VsZWN0aW9uIHBvc2l0aW9uVG9TZWxlY3Rpb24oaW50Li4uIHBvc2l0aW9ucykgeworICAgICAgICBMaXN0PFN0cmluZz4gaWRzID0gbW9kZWwuZ2V0TW9kZWxJZHMoKTsKKyAgICAgICAgU2VsZWN0aW9uIHMgPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgICAgIC8vIENvbnN0cnVjdCBhIHNlbGVjdGlvbiBvZiB0aGUgZ2l2ZW4gcG9zaXRpb25zLgorICAgICAgICBmb3IgKGludCBwOiBwb3NpdGlvbnMpIHsKKyAgICAgICAgICAgIHMuYWRkKGlkcy5nZXQocCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBkZWxldGUoaW50Li4uIHBvc2l0aW9ucykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgU2VsZWN0aW9uIHMgPSBwb3NpdGlvblRvU2VsZWN0aW9uKHBvc2l0aW9ucyk7CisgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOworCisgICAgICAgIG1vZGVsLmRlbGV0ZSgKKyAgICAgICAgICAgICAgICBzLAorICAgICAgICAgICAgICAgIG5ldyBNb2RlbC5EZWxldGlvbkxpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICB2b2lkIG9uQ29tcGxldGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdGNoLmNvdW50RG93bigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGxhdGNoLmF3YWl0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PERvY3VtZW50SW5mbz4gZ2V0RG9jdW1lbnRJbmZvKGludC4uLiBwb3NpdGlvbnMpIHsKKyAgICAgICAgcmV0dXJuIG1vZGVsLmdldERvY3VtZW50cyhwb3NpdGlvblRvU2VsZWN0aW9uKHBvc2l0aW9ucykpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15TGlzdGVuZXIgaW1wbGVtZW50cyBNb2RlbC5VcGRhdGVMaXN0ZW5lciB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGUoTW9kZWwgbW9kZWwpIHt9CisgICAgICAgIHB1YmxpYyB2b2lkIG9uTW9kZWxVcGRhdGVGYWlsZWQoRXhjZXB0aW9uIGUpIHt9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyVGVzdC5qYXZhCmluZGV4IGIzZDQ1YWUuLjdhM2I2ZDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlclRlc3QuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJUZXN0LmphdmEKQEAgLTIwLDEzICsyMCwxMSBAQAogaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQm9vbGVhbkFycmF5OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5UZXN0SW5wdXRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5TZWxlY3Rpb247CiAKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuTGlzdHM7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwpAQCAtMzksMzAgKzM3LDI3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxTdHJpbmc+IGl0ZW1zOwogICAgIHN0YXRpYyB7CiAgICAgICAgIGl0ZW1zID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIGl0ZW1zLmFkZCgiYWFhIik7Ci0gICAgICAgIGl0ZW1zLmFkZCgiYmJiIik7Ci0gICAgICAgIGl0ZW1zLmFkZCgiY2NjIik7Ci0gICAgICAgIGl0ZW1zLmFkZCgiMTExIik7Ci0gICAgICAgIGl0ZW1zLmFkZCgiMjIyIik7Ci0gICAgICAgIGl0ZW1zLmFkZCgiMzMzIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgICAgIGl0ZW1zLmFkZChJbnRlZ2VyLnRvU3RyaW5nKGkpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgTXVsdGlTZWxlY3RNYW5hZ2VyIG1NYW5hZ2VyOwotICAgIHByaXZhdGUgVGVzdEFkYXB0ZXIgbUFkYXB0ZXI7CiAgICAgcHJpdmF0ZSBUZXN0Q2FsbGJhY2sgbUNhbGxiYWNrOwogICAgIHByaXZhdGUgVGVzdFNlbGVjdGlvbkVudmlyb25tZW50IG1FbnY7CisgICAgcHJpdmF0ZSBUZXN0RG9jdW1lbnRzQWRhcHRlciBtQWRhcHRlcjsKIAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1BZGFwdGVyID0gbmV3IFRlc3RBZGFwdGVyKGl0ZW1zKTsKICAgICAgICAgbUNhbGxiYWNrID0gbmV3IFRlc3RDYWxsYmFjaygpOwotICAgICAgICBtRW52ID0gbmV3IFRlc3RTZWxlY3Rpb25FbnZpcm9ubWVudCgpOwotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUFkYXB0ZXIsIG1FbnYsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX01VTFRJUExFKTsKKyAgICAgICAgbUVudiA9IG5ldyBUZXN0U2VsZWN0aW9uRW52aXJvbm1lbnQoaXRlbXMpOworICAgICAgICBtQWRhcHRlciA9IG5ldyBUZXN0RG9jdW1lbnRzQWRhcHRlcihpdGVtcyk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfTVVMVElQTEUpOwogICAgICAgICBtTWFuYWdlci5hZGRDYWxsYmFjayhtQ2FsbGJhY2spOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RNb3VzZUNsaWNrX1N0YXJ0c1NlbGVjdGlvbk1vZGUoKSB7CiAgICAgICAgIGNsaWNrKDcpOwotICAgICAgICBhc3NlcnRTZWxlY3Rpb24oNyk7CisgICAgICAgIGFzc2VydFNlbGVjdGlvbihpdGVtcy5nZXQoNykpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RNb3VzZUNsaWNrX05vdGlmaWVzU2VsZWN0aW9uQ2hhbmdlZCgpIHsKQEAgLTg0LDIxICs3OSwyMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZXRTZWxlY3Rpb25Gb2N1c0JlZ2luKCkgewotICAgICAgICBtTWFuYWdlci5zZXRJdGVtU2VsZWN0ZWQoNywgdHJ1ZSk7Ci0gICAgICAgIG1NYW5hZ2VyLnNldFNlbGVjdGlvbkZvY3VzQmVnaW4oNyk7CisgICAgICAgIG1NYW5hZ2VyLnNldEl0ZW1zU2VsZWN0ZWQoTGlzdHMubmV3QXJyYXlMaXN0KGl0ZW1zLmdldCg3KSksIHRydWUpOworICAgICAgICBtTWFuYWdlci5zZXRTZWxlY3Rpb25SYW5nZUJlZ2luKDcpOwogICAgICAgICBzaGlmdENsaWNrKDExKTsKICAgICAgICAgYXNzZXJ0UmFuZ2VTZWxlY3Rpb24oNywgMTEpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RMb25nUHJlc3NfU3RhcnRzU2VsZWN0aW9uTW9kZSgpIHsKICAgICAgICAgbG9uZ1ByZXNzKDcpOwotICAgICAgICBhc3NlcnRTZWxlY3Rpb24oNyk7CisgICAgICAgIGFzc2VydFNlbGVjdGlvbihpdGVtcy5nZXQoNykpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RMb25nUHJlc3NfU2Vjb25kUHJlc3NFeHRlbmRzU2VsZWN0aW9uKCkgewogICAgICAgICBsb25nUHJlc3MoNyk7CiAgICAgICAgIGxvbmdQcmVzcyg5OSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGlvbig3LCA5OSk7CisgICAgICAgIGFzc2VydFNlbGVjdGlvbihpdGVtcy5nZXQoNyksIGl0ZW1zLmdldCg5OSkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTaW5nbGVUYXBVcF9VbnNlbGVjdHNTZWxlY3RlZEl0ZW0oKSB7CkBAIC0xMTgsOCArMTEzLDcgQEAKICAgICAgICAgbG9uZ1ByZXNzKDk5KTsKICAgICAgICAgdGFwKDcpOwogICAgICAgICB0YXAoMTMpOwotICAgICAgICB0YXAoMTI5ODk5KTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKDcsIDk5LCAxMywgMTI5ODk5KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKGl0ZW1zLmdldCg3KSwgaXRlbXMuZ2V0KDk5KSwgaXRlbXMuZ2V0KDEzKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNpbmdsZVRhcFVwX1NoaWZ0Q3JlYXRlc1JhbmdlU2VsZWN0aW9uKCkgewpAQCAtMTcyLDI4ICsxNjYsMzQgQEAKICAgICAgICAgYXNzZXJ0UmFuZ2VTZWxlY3Rpb24oMCwgNyk7CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgdGVzdEtleWJvYXJkU2VsZWN0aW9uKCkgeworICAgICAgICAvLyBUaGlzIHNpbXVsYXRlcyBzaGlmdC1uYXZpZ2F0aW9uLgorICAgICAgICBrZXlUb1Bvc2l0aW9uKDUsIDEwLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0UmFuZ2VTZWxlY3Rpb24oNSwgMTApOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RTaW5nbGVTZWxlY3RNb2RlKCkgewotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUFkYXB0ZXIsIG1FbnYsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKICAgICAgICAgbU1hbmFnZXIuYWRkQ2FsbGJhY2sobUNhbGxiYWNrKTsKICAgICAgICAgbG9uZ1ByZXNzKDIwKTsKICAgICAgICAgdGFwKDEzKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKDEzKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKGl0ZW1zLmdldCgxMykpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTaW5nbGVTZWxlY3RNb2RlX1NoaWZ0VGFwKCkgewotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUFkYXB0ZXIsIG1FbnYsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKICAgICAgICAgbU1hbmFnZXIuYWRkQ2FsbGJhY2sobUNhbGxiYWNrKTsKICAgICAgICAgbG9uZ1ByZXNzKDEzKTsKICAgICAgICAgc2hpZnRUYXAoMjApOwotICAgICAgICBhc3NlcnRTZWxlY3Rpb24oMjApOworICAgICAgICBhc3NlcnRTZWxlY3Rpb24oaXRlbXMuZ2V0KDIwKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNpbmdsZVNlbGVjdE1vZGVfU2hpZnREb2VzTm90RXh0ZW5kU2VsZWN0aW9uKCkgewotICAgICAgICBtTWFuYWdlciA9IG5ldyBNdWx0aVNlbGVjdE1hbmFnZXIobUFkYXB0ZXIsIG1FbnYsIE11bHRpU2VsZWN0TWFuYWdlci5NT0RFX1NJTkdMRSk7CisgICAgICAgIG1NYW5hZ2VyID0gbmV3IE11bHRpU2VsZWN0TWFuYWdlcihtRW52LCBtQWRhcHRlciwgTXVsdGlTZWxlY3RNYW5hZ2VyLk1PREVfU0lOR0xFKTsKICAgICAgICAgbU1hbmFnZXIuYWRkQ2FsbGJhY2sobUNhbGxiYWNrKTsKICAgICAgICAgbG9uZ1ByZXNzKDIwKTsKLSAgICAgICAga2V5VG9Qb3NpdGlvbigyMiwgdHJ1ZSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGlvbigyMik7CisgICAgICAgIGtleVRvUG9zaXRpb24oMjAsIDIyLCB0cnVlKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKGl0ZW1zLmdldCgyMikpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQcm92aXNpb25hbFNlbGVjdGlvbigpIHsKQEAgLTIwMywyNiArMjAzLDM3IEBACiAgICAgICAgIFNwYXJzZUJvb2xlYW5BcnJheSBwcm92aXNpb25hbCA9IG5ldyBTcGFyc2VCb29sZWFuQXJyYXkoKTsKICAgICAgICAgcHJvdmlzaW9uYWwuYXBwZW5kKDEsIHRydWUpOwogICAgICAgICBwcm92aXNpb25hbC5hcHBlbmQoMiwgdHJ1ZSk7Ci0gICAgICAgIHMuc2V0UHJvdmlzaW9uYWxTZWxlY3Rpb24ocHJvdmlzaW9uYWwpOwotICAgICAgICBhc3NlcnRTZWxlY3Rpb24oMSwgMik7CisgICAgICAgIHMuc2V0UHJvdmlzaW9uYWxTZWxlY3Rpb24oZ2V0SXRlbUlkcyhwcm92aXNpb25hbCkpOworICAgICAgICBhc3NlcnRTZWxlY3Rpb24oaXRlbXMuZ2V0KDEpLCBpdGVtcy5nZXQoMikpOwogCiAgICAgICAgIHByb3Zpc2lvbmFsLmRlbGV0ZSgxKTsKICAgICAgICAgcHJvdmlzaW9uYWwuYXBwZW5kKDMsIHRydWUpOwotICAgICAgICBzLnNldFByb3Zpc2lvbmFsU2VsZWN0aW9uKHByb3Zpc2lvbmFsKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKDIsIDMpOworICAgICAgICBzLnNldFByb3Zpc2lvbmFsU2VsZWN0aW9uKGdldEl0ZW1JZHMocHJvdmlzaW9uYWwpKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKGl0ZW1zLmdldCgyKSwgaXRlbXMuZ2V0KDMpKTsKIAogICAgICAgICBzLmFwcGx5UHJvdmlzaW9uYWxTZWxlY3Rpb24oKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKDIsIDMpOworICAgICAgICBhc3NlcnRTZWxlY3Rpb24oaXRlbXMuZ2V0KDIpLCBpdGVtcy5nZXQoMykpOwogCiAgICAgICAgIHByb3Zpc2lvbmFsLmNsZWFyKCk7CiAgICAgICAgIHByb3Zpc2lvbmFsLmFwcGVuZCgzLCB0cnVlKTsKICAgICAgICAgcHJvdmlzaW9uYWwuYXBwZW5kKDQsIHRydWUpOwotICAgICAgICBzLnNldFByb3Zpc2lvbmFsU2VsZWN0aW9uKHByb3Zpc2lvbmFsKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKDIsIDMsIDQpOworICAgICAgICBzLnNldFByb3Zpc2lvbmFsU2VsZWN0aW9uKGdldEl0ZW1JZHMocHJvdmlzaW9uYWwpKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0aW9uKGl0ZW1zLmdldCgyKSwgaXRlbXMuZ2V0KDMpLCBpdGVtcy5nZXQoNCkpOwogCiAgICAgICAgIHByb3Zpc2lvbmFsLmRlbGV0ZSgzKTsKLSAgICAgICAgcy5zZXRQcm92aXNpb25hbFNlbGVjdGlvbihwcm92aXNpb25hbCk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGlvbigyLCAzLCA0KTsKKyAgICAgICAgcy5zZXRQcm92aXNpb25hbFNlbGVjdGlvbihnZXRJdGVtSWRzKHByb3Zpc2lvbmFsKSk7CisgICAgICAgIGFzc2VydFNlbGVjdGlvbihpdGVtcy5nZXQoMiksIGl0ZW1zLmdldCgzKSwgaXRlbXMuZ2V0KDQpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBnZXRJdGVtSWRzKFNwYXJzZUJvb2xlYW5BcnJheSBzZWxlY3Rpb24pIHsKKyAgICAgICAgU2V0PFN0cmluZz4gaWRzID0gbmV3IEhhc2hTZXQ8PigpOworCisgICAgICAgIGludCBjb3VudCA9IHNlbGVjdGlvbi5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgaWRzLmFkZChpdGVtcy5nZXQoc2VsZWN0aW9uLmtleUF0KGkpKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaWRzOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBsb25nUHJlc3MoaW50IHBvc2l0aW9uKSB7CkBAIC0yNDUsMjcgKzI1NiwyNyBAQAogICAgICAgICBtTWFuYWdlci5vblNpbmdsZVRhcFVwKFRlc3RJbnB1dEV2ZW50LnNoaWZ0Q2xpY2socG9zaXRpb24pKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQga2V5VG9Qb3NpdGlvbihpbnQgcG9zaXRpb24sIGJvb2xlYW4gc2hpZnQpIHsKLSAgICAgICAgbU1hbmFnZXIuYXR0ZW1wdENoYW5nZVBvc2l0aW9uKHBvc2l0aW9uLCBzaGlmdCk7CisgICAgcHJpdmF0ZSB2b2lkIGtleVRvUG9zaXRpb24oaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zLCBib29sZWFuIHNoaWZ0KSB7CisgICAgICAgIG1NYW5hZ2VyLmNoYW5nZUZvY3VzKHN0YXJ0UG9zLCBlbmRQb3MsIHNoaWZ0KTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U2VsZWN0ZWQoaW50Li4uIGV4cGVjdGVkKSB7CisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFNlbGVjdGVkKFN0cmluZy4uLiBleHBlY3RlZCkgewogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uID0gbU1hbmFnZXIuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBTdHJpbmcgZXJyID0gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIlNlbGVjdGlvbiAlcyBkb2VzIG5vdCBjb250YWluICVkIiwgc2VsZWN0aW9uLCBleHBlY3RlZFtpXSk7CisgICAgICAgICAgICAgICAgICAgICJTZWxlY3Rpb24gJXMgZG9lcyBub3QgY29udGFpbiAlcyIsIHNlbGVjdGlvbiwgZXhwZWN0ZWRbaV0pOwogICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlcnIsIHNlbGVjdGlvbi5jb250YWlucyhleHBlY3RlZFtpXSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydFNlbGVjdGlvbihpbnQuLi4gZXhwZWN0ZWQpIHsKKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U2VsZWN0aW9uKFN0cmluZy4uLiBleHBlY3RlZCkgewogICAgICAgICBhc3NlcnRTZWxlY3Rpb25TaXplKGV4cGVjdGVkLmxlbmd0aCk7CiAgICAgICAgIGFzc2VydFNlbGVjdGVkKGV4cGVjdGVkKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYXNzZXJ0UmFuZ2VTZWxlY3RlZChpbnQgYmVnaW4sIGludCBlbmQpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IGJlZ2luOyBpIDw9IGVuZDsgaSsrKSB7Ci0gICAgICAgICAgICBhc3NlcnRTZWxlY3RlZChpKTsKKyAgICAgICAgICAgIGFzc2VydFNlbGVjdGVkKGl0ZW1zLmdldChpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI4MSwxNSArMjkyLDE1IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXN0Q2FsbGJhY2sgaW1wbGVtZW50cyBNdWx0aVNlbGVjdE1hbmFnZXIuQ2FsbGJhY2sgewogCi0gICAgICAgIFNldDxJbnRlZ2VyPiBpZ25vcmVkID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBTZXQ8U3RyaW5nPiBpZ25vcmVkID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gbVNlbGVjdGlvbkNoYW5nZWQgPSBmYWxzZTsKIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25JdGVtU3RhdGVDaGFuZ2VkKGludCBwb3NpdGlvbiwgYm9vbGVhbiBzZWxlY3RlZCkge30KKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtU3RhdGVDaGFuZ2VkKFN0cmluZyBtb2RlbElkLCBib29sZWFuIHNlbGVjdGVkKSB7fQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkJlZm9yZUl0ZW1TdGF0ZUNoYW5nZShpbnQgcG9zaXRpb24sIGJvb2xlYW4gc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiAhaWdub3JlZC5jb250YWlucyhwb3NpdGlvbik7CisgICAgICAgIHB1YmxpYyBib29sZWFuIG9uQmVmb3JlSXRlbVN0YXRlQ2hhbmdlKFN0cmluZyBtb2RlbElkLCBib29sZWFuIHNlbGVjdGVkKSB7CisgICAgICAgICAgICByZXR1cm4gIWlnbm9yZWQuY29udGFpbnMobW9kZWxJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTMwMSwzMyArMzEyLDQgQEAKICAgICAgICAgICAgIGFzc2VydFRydWUobVNlbGVjdGlvbkNoYW5nZWQpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgVGVzdEhvbGRlciBleHRlbmRzIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIHsKLSAgICAgICAgLy8gZWFjaCBkYXRhIGl0ZW0gaXMganVzdCBhIHN0cmluZyBpbiB0aGlzIGNhc2UKLSAgICAgICAgcHVibGljIFRlc3RIb2xkZXIoVmlldyB2aWV3KSB7Ci0gICAgICAgICAgICBzdXBlcih2aWV3KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFRlc3RBZGFwdGVyIGV4dGVuZHMgUmVjeWNsZXJWaWV3LkFkYXB0ZXI8VGVzdEhvbGRlcj4gewotCi0gICAgICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1JdGVtczsKLQotICAgICAgICBwdWJsaWMgVGVzdEFkYXB0ZXIoTGlzdDxTdHJpbmc+IGl0ZW1zKSB7Ci0gICAgICAgICAgICBtSXRlbXMgPSBpdGVtczsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgVGVzdEhvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFRlc3RIb2xkZXIoTW9ja2l0by5tb2NrKFZpZXdHcm91cC5jbGFzcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoVGVzdEhvbGRlciBob2xkZXIsIGludCBwb3NpdGlvbikge30KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRJdGVtQ291bnQoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUl0ZW1zLnNpemUoKTsKLSAgICAgICAgfQotICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlcl9HcmlkTW9kZWxUZXN0LmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJfR3JpZE1vZGVsVGVzdC5qYXZhCmluZGV4IGM4NTZiMjIuLjVjMDRkYjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlcl9HcmlkTW9kZWxUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyX0dyaWRNb2RlbFRlc3QuamF2YQpAQCAtMTYsMTYgKzE2LDIwIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKIAoraW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5HcmlkTW9kZWwuTk9UX1NFVDsKKwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3Lk9uU2Nyb2xsTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LkFuZHJvaWRUZXN0Q2FzZTsKIGltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VCb29sZWFuQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5HcmlkTW9kZWw7CiAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKIEBTbWFsbFRlc3QKIHB1YmxpYyBjbGFzcyBNdWx0aVNlbGVjdE1hbmFnZXJfR3JpZE1vZGVsVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CiAKQEAgLTMzLDE5ICszNywzMiBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSElMRF9WSUVXX0VER0VfUFggPSAxMDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJRVdQT1JUX0hFSUdIVCA9IDUwMDsKIAotICAgIHByaXZhdGUgc3RhdGljIEdyaWRNb2RlbCBtb2RlbDsKLSAgICBwcml2YXRlIHN0YXRpYyBUZXN0RW52aXJvbm1lbnQgZW52OwotICAgIHByaXZhdGUgc3RhdGljIFNwYXJzZUJvb2xlYW5BcnJheSBsYXN0U2VsZWN0aW9uOwotICAgIHByaXZhdGUgc3RhdGljIGludCB2aWV3V2lkdGg7CisgICAgcHJpdmF0ZSBHcmlkTW9kZWwgbW9kZWw7CisgICAgcHJpdmF0ZSBUZXN0RW52aXJvbm1lbnQgZW52OworICAgIHByaXZhdGUgVGVzdERvY3VtZW50c0FkYXB0ZXIgYWRhcHRlcjsKKyAgICBwcml2YXRlIFNldDxTdHJpbmc+IGxhc3RTZWxlY3Rpb247CisgICAgcHJpdmF0ZSBpbnQgdmlld1dpZHRoOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRVcChpbnQgbnVtQ2hpbGRyZW4sIGludCBudW1Db2x1bW5zKSB7CisgICAgcHJpdmF0ZSB2b2lkIGluaXREYXRhKGZpbmFsIGludCBudW1DaGlsZHJlbiwgaW50IG51bUNvbHVtbnMpIHsKICAgICAgICAgZW52ID0gbmV3IFRlc3RFbnZpcm9ubWVudChudW1DaGlsZHJlbiwgbnVtQ29sdW1ucyk7CisgICAgICAgIGFkYXB0ZXIgPSBuZXcgVGVzdERvY3VtZW50c0FkYXB0ZXIobmV3IEFycmF5TGlzdDxTdHJpbmc+KCkpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRNb2RlbElkKGludCBwb3NpdGlvbikgeworICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHBvc2l0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVtQ2hpbGRyZW47CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKICAgICAgICAgdmlld1dpZHRoID0gVklFV19QQURESU5HX1BYICsgbnVtQ29sdW1ucyAqIChWSUVXX1BBRERJTkdfUFggKyBDSElMRF9WSUVXX0VER0VfUFgpOwotICAgICAgICBtb2RlbCA9IG5ldyBHcmlkTW9kZWwoZW52KTsKKyAgICAgICAgbW9kZWwgPSBuZXcgR3JpZE1vZGVsKGVudiwgYWRhcHRlcik7CiAgICAgICAgIG1vZGVsLmFkZE9uU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKAogICAgICAgICAgICAgICAgIG5ldyBHcmlkTW9kZWwuT25TZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoKSB7CiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlbGVjdGlvbkNoYW5nZWQoU3BhcnNlQm9vbGVhbkFycmF5IHVwZGF0ZWRTZWxlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZWxlY3Rpb25DaGFuZ2VkKFNldDxTdHJpbmc+IHVwZGF0ZWRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RTZWxlY3Rpb24gPSB1cGRhdGVkU2VsZWN0aW9uOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7CkBAIC01OSwxMjMgKzc2LDEyMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3Rpb25MZWZ0T2ZJdGVtcygpIHsKLSAgICAgICAgc2V0VXAoMjAsIDUpOworICAgICAgICBpbml0RGF0YSgyMCwgNSk7CiAgICAgICAgIG1vZGVsLnN0YXJ0U2VsZWN0aW9uKG5ldyBQb2ludCgwLCAxMCkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDEsIDExKSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbMF0pOwotICAgICAgICBhc3NlcnRFcXVhbHMoR3JpZE1vZGVsLk5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0aW9uUmlnaHRPZkl0ZW1zKCkgewotICAgICAgICBzZXRVcCgyMCwgNCk7CisgICAgICAgIGluaXREYXRhKDIwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KHZpZXdXaWR0aCAtIDEsIDEwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQodmlld1dpZHRoIC0gMiwgMTEpKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFswXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhHcmlkTW9kZWwuTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3Rpb25BYm92ZUl0ZW1zKCkgewotICAgICAgICBzZXRVcCgyMCwgNCk7CisgICAgICAgIGluaXREYXRhKDIwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDEwLCAwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTEsIDEpKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFswXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhHcmlkTW9kZWwuTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWxlY3Rpb25CZWxvd0l0ZW1zKCkgewotICAgICAgICBzZXRVcCg1LCA0KTsKKyAgICAgICAgaW5pdERhdGEoNSwgNCk7CiAgICAgICAgIG1vZGVsLnN0YXJ0U2VsZWN0aW9uKG5ldyBQb2ludCgxMCwgVklFV1BPUlRfSEVJR0hUIC0gMSkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDExLCBWSUVXUE9SVF9IRUlHSFQgLSAyKSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbMF0pOwotICAgICAgICBhc3NlcnRFcXVhbHMoR3JpZE1vZGVsLk5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0VmVydGljYWxTZWxlY3Rpb25CZXR3ZWVuSXRlbXMoKSB7Ci0gICAgICAgIHNldFVwKDIwLCA0KTsKKyAgICAgICAgaW5pdERhdGEoMjAsIDQpOwogICAgICAgICBtb2RlbC5zdGFydFNlbGVjdGlvbihuZXcgUG9pbnQoMTA2LCAwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTA3LCAyMDApKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFswXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhHcmlkTW9kZWwuTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgpOworICAgICAgICBhc3NlcnRFcXVhbHMoTk9UX1NFVCwgbW9kZWwuZ2V0UG9zaXRpb25OZWFyZXN0T3JpZ2luKCkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RIb3Jpem9udGFsU2VsZWN0aW9uQmV0d2Vlbkl0ZW1zKCkgewotICAgICAgICBzZXRVcCgyMCwgNCk7CisgICAgICAgIGluaXREYXRhKDIwLCA0KTsKICAgICAgICAgbW9kZWwuc3RhcnRTZWxlY3Rpb24obmV3IFBvaW50KDAsIDEwNSkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDIwMCwgMTA2KSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbMF0pOwotICAgICAgICBhc3NlcnRFcXVhbHMoR3JpZE1vZGVsLk5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5PVF9TRVQsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0R3Jvd2luZ0FuZFNocmlua2luZ1NlbGVjdGlvbigpIHsKLSAgICAgICAgc2V0VXAoMjAsIDQpOworICAgICAgICBpbml0RGF0YSgyMCwgNCk7CiAgICAgICAgIG1vZGVsLnN0YXJ0U2VsZWN0aW9uKG5ldyBQb2ludCgwLCAwKSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoNSwgNSkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezB9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTA5LCAxMDkpKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswfSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDApOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDExMCwgMTA5KSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbXSB7MCwgMX0pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgwLCAxKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgxMTAsIDExMCkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDEsIDQsIDV9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCwgMSwgNCwgNSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMjE0LCAyMTQpKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswLCAxLCA0LCA1fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDAsIDEsIDQsIDUpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDIxNSwgMjE0KSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbXSB7MCwgMSwgMiwgNCwgNSwgNn0pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgwLCAxLCAyLCA0LCA1LCA2KTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgyMTQsIDIxNCkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDEsIDQsIDV9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCwgMSwgNCwgNSk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMTEwLCAxMTApKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswLCAxLCA0LCA1fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDAsIDEsIDQsIDUpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDExMCwgMTA5KSk7Ci0gICAgICAgIGFzc2VydFNlbGVjdGVkKG5ldyBpbnRbXSB7MCwgMX0pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgwLCAxKTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgxMDksIDEwOSkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezB9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoNSwgNSkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezB9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCk7CiAgICAgICAgIG1vZGVsLnJlc2l6ZVNlbGVjdGlvbihuZXcgUG9pbnQoMCwgMCkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50WzBdKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKEdyaWRNb2RlbC5OT1RfU0VULCBtb2RlbC5nZXRQb3NpdGlvbk5lYXJlc3RPcmlnaW4oKSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKCk7CisgICAgICAgIGFzc2VydEVxdWFscyhOT1RfU0VULCBtb2RlbC5nZXRQb3NpdGlvbk5lYXJlc3RPcmlnaW4oKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNlbGVjdGlvbk1vdmluZ0Fyb3VuZE9yaWdpbigpIHsKLSAgICAgICAgc2V0VXAoMTYsIDQpOworICAgICAgICBpbml0RGF0YSgxNiwgNCk7CiAgICAgICAgIG1vZGVsLnN0YXJ0U2VsZWN0aW9uKG5ldyBQb2ludCgyMTAsIDIxMCkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KHZpZXdXaWR0aCAtIDEsIDApKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHsyLCAzLCA2LCA3fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDIsIDMsIDYsIDcpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDAsIDApKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswLCAxLCA0LCA1fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDAsIDEsIDQsIDUpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDAsIDQyMCkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezgsIDksIDEyLCAxM30pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCg4LCA5LCAxMiwgMTMpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KHZpZXdXaWR0aCAtIDEsIDQyMCkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezEwLCAxMSwgMTQsIDE1fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDEwLCAxMSwgMTQsIDE1KTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwLCBtb2RlbC5nZXRQb3NpdGlvbk5lYXJlc3RPcmlnaW4oKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFNjcm9sbGluZ0JhbmRTZWxlY3QoKSB7Ci0gICAgICAgIHNldFVwKDQwLCA0KTsKKyAgICAgICAgaW5pdERhdGEoNDAsIDQpOwogICAgICAgICBtb2RlbC5zdGFydFNlbGVjdGlvbihuZXcgUG9pbnQoMCwgMCkpOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDEwMCwgVklFV1BPUlRfSEVJR0hUIC0gMSkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDQsIDgsIDEyLCAxNn0pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgwLCA0LCA4LCAxMiwgMTYpOwogICAgICAgICBzY3JvbGwoQ0hJTERfVklFV19FREdFX1BYKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswLCA0LCA4LCAxMiwgMTYsIDIwfSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDAsIDQsIDgsIDEyLCAxNiwgMjApOwogICAgICAgICBtb2RlbC5yZXNpemVTZWxlY3Rpb24obmV3IFBvaW50KDIwMCwgVklFV1BPUlRfSEVJR0hUIC0gMSkpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDEsIDQsIDUsIDgsIDksIDEyLCAxMywgMTYsIDE3LCAyMCwgMjF9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCwgMSwgNCwgNSwgOCwgOSwgMTIsIDEzLCAxNiwgMTcsIDIwLCAyMSk7CiAgICAgICAgIHNjcm9sbChDSElMRF9WSUVXX0VER0VfUFgpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDEsIDQsIDUsIDgsIDksIDEyLCAxMywgMTYsIDE3LCAyMCwgMjEsIDI0LCAyNX0pOworICAgICAgICBhc3NlcnRTZWxlY3RlZCgwLCAxLCA0LCA1LCA4LCA5LCAxMiwgMTMsIDE2LCAxNywgMjAsIDIxLCAyNCwgMjUpOwogICAgICAgICBzY3JvbGwoLTIgKiBDSElMRF9WSUVXX0VER0VfUFgpOwotICAgICAgICBhc3NlcnRTZWxlY3RlZChuZXcgaW50W10gezAsIDEsIDQsIDUsIDgsIDksIDEyLCAxMywgMTYsIDE3fSk7CisgICAgICAgIGFzc2VydFNlbGVjdGVkKDAsIDEsIDQsIDUsIDgsIDksIDEyLCAxMywgMTYsIDE3KTsKICAgICAgICAgbW9kZWwucmVzaXplU2VsZWN0aW9uKG5ldyBQb2ludCgxMDAsIFZJRVdQT1JUX0hFSUdIVCAtIDEpKTsKLSAgICAgICAgYXNzZXJ0U2VsZWN0ZWQobmV3IGludFtdIHswLCA0LCA4LCAxMiwgMTZ9KTsKKyAgICAgICAgYXNzZXJ0U2VsZWN0ZWQoMCwgNCwgOCwgMTIsIDE2KTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG1vZGVsLmdldFBvc2l0aW9uTmVhcmVzdE9yaWdpbigpKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFNlbGVjdGVkKGludFtdIHNlbGVjdGVkUG9zaXRpb25zKSB7CisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFNlbGVjdGVkKGludC4uLiBzZWxlY3RlZFBvc2l0aW9ucykgewogICAgICAgICBhc3NlcnRFcXVhbHMoc2VsZWN0ZWRQb3NpdGlvbnMubGVuZ3RoLCBsYXN0U2VsZWN0aW9uLnNpemUoKSk7CiAgICAgICAgIGZvciAoaW50IHBvc2l0aW9uIDogc2VsZWN0ZWRQb3NpdGlvbnMpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUobGFzdFNlbGVjdGlvbi5nZXQocG9zaXRpb24pKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUobGFzdFNlbGVjdGlvbi5jb250YWlucyhJbnRlZ2VyLnRvU3RyaW5nKHBvc2l0aW9uKSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzY3JvbGwoaW50IGR5KSB7CisgICAgcHJpdmF0ZSB2b2lkIHNjcm9sbChpbnQgZHkpIHsKICAgICAgICAgYXNzZXJ0VHJ1ZShlbnYudmVydGljYWxPZmZzZXQgKyBWSUVXUE9SVF9IRUlHSFQgKyBkeSA8PSBlbnYuZ2V0VG90YWxIZWlnaHQoKSk7CiAgICAgICAgIGVudi52ZXJ0aWNhbE9mZnNldCArPSBkeTsKICAgICAgICAgbW9kZWwub25TY3JvbGxlZChudWxsLCAwLCBkeSk7CkBAIC0yNDYsNyArMjYzLDcgQEAKIAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFJlY3QgZ2V0QWJzb2x1dGVSZWN0Rm9yQ2hpbGRWaWV3QXQoaW50IGluZGV4KSB7Ci0gICAgICAgICAgICBpbnQgYWRhcHRlclBvc2l0aW9uID0gZ2V0QWRhcHRlclBvc2l0aW9uQXQoaW5kZXgpOworICAgICAgICAgICAgaW50IGFkYXB0ZXJQb3NpdGlvbiA9IChnZXRGaXJzdFZpc2libGVSb3dJbmRleCgpICogbU51bUNvbHVtbnMpICsgaW5kZXg7CiAgICAgICAgICAgICBpbnQgcm93SW5kZXggPSBhZGFwdGVyUG9zaXRpb24gLyBtTnVtQ29sdW1uczsKICAgICAgICAgICAgIGludCBjb2x1bW5JbmRleCA9IGFkYXB0ZXJQb3NpdGlvbiAlIG1OdW1Db2x1bW5zOwogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJfU2VsZWN0aW9uVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvTXVsdGlTZWxlY3RNYW5hZ2VyX1NlbGVjdGlvblRlc3QuamF2YQppbmRleCAwMzBhYzZjLi40NDRiMmRjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9NdWx0aVNlbGVjdE1hbmFnZXJfU2VsZWN0aW9uVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L011bHRpU2VsZWN0TWFuYWdlcl9TZWxlY3Rpb25UZXN0LmphdmEKQEAgLTIwLDMzICsyMCw0MyBAQAogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0Lk11bHRpU2VsZWN0TWFuYWdlci5TZWxlY3Rpb247CitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5TZXRzOworCitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlNldDsKIAogQFNtYWxsVGVzdAogcHVibGljIGNsYXNzIE11bHRpU2VsZWN0TWFuYWdlcl9TZWxlY3Rpb25UZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKIAogICAgIHByaXZhdGUgU2VsZWN0aW9uIHNlbGVjdGlvbjsKIAorICAgIHByaXZhdGUgU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1tdeworICAgICAgICAgICAgImZvbyIsCisgICAgICAgICAgICAiNDMiLAorICAgICAgICAgICAgImF1dGh8aWQ9QDUzZGkqL2YzI2QiCisgICAgfTsKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZCgzKTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZCg1KTsKLSAgICAgICAgc2VsZWN0aW9uLmFkZCg5KTsKKyAgICAgICAgc2VsZWN0aW9uLmFkZChpZHNbMF0pOworICAgICAgICBzZWxlY3Rpb24uYWRkKGlkc1sxXSk7CisgICAgICAgIHNlbGVjdGlvbi5hZGQoaWRzWzJdKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QWRkKCkgewogICAgICAgICAvLyBXZSBhZGRlZCBpbiBzZXRVcC4KICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNlbGVjdGlvbi5zaXplKCkpOwotICAgICAgICBhc3NlcnRDb250YWlucygzKTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoNSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDkpOworICAgICAgICBhc3NlcnRDb250YWlucyhpZHNbMF0pOworICAgICAgICBhc3NlcnRDb250YWlucyhpZHNbMV0pOworICAgICAgICBhc3NlcnRDb250YWlucyhpZHNbMl0pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmUoKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5yZW1vdmUoMyk7Ci0gICAgICAgIHNlbGVjdGlvbi5yZW1vdmUoNSk7CisgICAgICAgIHNlbGVjdGlvbi5yZW1vdmUoaWRzWzBdKTsKKyAgICAgICAgc2VsZWN0aW9uLnJlbW92ZShpZHNbMl0pOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgc2VsZWN0aW9uLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDkpOworICAgICAgICBhc3NlcnRDb250YWlucyhpZHNbMV0pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RDbGVhcigpIHsKQEAgLTYwLDEwICs3MCwxMCBAQAogICAgICAgICBhc3NlcnRUcnVlKHNlbGVjdGlvbi5pc0VtcHR5KCkpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHRlc3RTaXplQW5kR2V0KCkgeworICAgIHB1YmxpYyB2b2lkIHRlc3RTaXplKCkgewogICAgICAgICBTZWxlY3Rpb24gb3RoZXIgPSBuZXcgU2VsZWN0aW9uKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VsZWN0aW9uLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBvdGhlci5hZGQoc2VsZWN0aW9uLmdldChpKSk7CisgICAgICAgICAgICBvdGhlci5hZGQoaWRzW2ldKTsKICAgICAgICAgfQogICAgICAgICBhc3NlcnRFcXVhbHMoc2VsZWN0aW9uLnNpemUoKSwgb3RoZXIuc2l6ZSgpKTsKICAgICB9CkBAIC03NCw5ICs4NCw5IEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzT3RoZXIoKSB7CiAgICAgICAgIFNlbGVjdGlvbiBvdGhlciA9IG5ldyBTZWxlY3Rpb24oKTsKLSAgICAgICAgb3RoZXIuYWRkKDMpOwotICAgICAgICBvdGhlci5hZGQoNSk7Ci0gICAgICAgIG90aGVyLmFkZCg5KTsKKyAgICAgICAgb3RoZXIuYWRkKGlkc1swXSk7CisgICAgICAgIG90aGVyLmFkZChpZHNbMV0pOworICAgICAgICBvdGhlci5hZGQoaWRzWzJdKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKHNlbGVjdGlvbiwgb3RoZXIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoc2VsZWN0aW9uLmhhc2hDb2RlKCksIG90aGVyLmhhc2hDb2RlKCkpOwogICAgIH0KQEAgLTkwLDY1ICsxMDAsNzggQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb3RFcXVhbHMoKSB7CiAgICAgICAgIFNlbGVjdGlvbiBvdGhlciA9IG5ldyBTZWxlY3Rpb24oKTsKLSAgICAgICAgb3RoZXIuYWRkKDc4OSk7CisgICAgICAgIG90aGVyLmFkZCgiZm9vYmFyIik7CiAgICAgICAgIGFzc2VydEZhbHNlKHNlbGVjdGlvbi5lcXVhbHMob3RoZXIpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kQmVmb3JlKCkgewotICAgICAgICBzZWxlY3Rpb24uZXhwYW5kKDIsIDEwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHNlbGVjdGlvbi5zaXplKCkpOwotICAgICAgICBhc3NlcnRDb250YWlucygxMyk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDE1KTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoMTkpOworICAgIHB1YmxpYyB2b2lkIHRlc3RJbnRlcnNlY3Rpb25fZW1wdHkwKCkgeworICAgICAgICBTZWxlY3Rpb24gdGVzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKKyAgICAgICAgdGVzdFNlbGVjdGlvbi5pbnRlcnNlY3QobmV3IEhhc2hTZXQ8U3RyaW5nPigpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0U2VsZWN0aW9uLmlzRW1wdHkoKSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdGVzdEV4cGFuZEFmdGVyKCkgewotICAgICAgICBzZWxlY3Rpb24uZXhwYW5kKDEwLCAxMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBzZWxlY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoMyk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDUpOwotICAgICAgICBhc3NlcnRDb250YWlucyg5KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJzZWN0aW9uX2VtcHR5MSgpIHsKKyAgICAgICAgU2VsZWN0aW9uIHRlc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgICAgIHRlc3RTZWxlY3Rpb24uaW50ZXJzZWN0KFNldHMubmV3SGFzaFNldCgiZm9vIikpOworICAgICAgICBhc3NlcnRUcnVlKHRlc3RTZWxlY3Rpb24uaXNFbXB0eSgpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kU3BsaXQoKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5leHBhbmQoNSwgMTApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgc2VsZWN0aW9uLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDMpOwotICAgICAgICBhc3NlcnRDb250YWlucygxNSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDE5KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJzZWN0aW9uX2VtcHR5MigpIHsKKyAgICAgICAgYXNzZXJ0RmFsc2Uoc2VsZWN0aW9uLmlzRW1wdHkoKSk7CisgICAgICAgIHNlbGVjdGlvbi5pbnRlcnNlY3QobmV3IEhhc2hTZXQ8U3RyaW5nPigpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShzZWxlY3Rpb24uaXNFbXB0eSgpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kRW5jb21wYXNlZCgpIHsKLSAgICAgICAgc2VsZWN0aW9uLmV4cGFuZCgyLCAxMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBzZWxlY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoMTMpOwotICAgICAgICBhc3NlcnRDb250YWlucygxNSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDE5KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJzZWN0aW9uX2V4Y2x1c2l2ZSgpIHsKKyAgICAgICAgU3RyaW5nW10gaWRzMCA9IG5ldyBTdHJpbmdbXXsiZm9vIiwgImJhciIsICJiYXoifTsKKyAgICAgICAgU3RyaW5nW10gaWRzMSA9IG5ldyBTdHJpbmdbXXsiMCIsICIxIiwgIjIifTsKKworICAgICAgICBTZWxlY3Rpb24gdGVzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb24oKTsKKyAgICAgICAgdGVzdFNlbGVjdGlvbi5hZGQoaWRzMFswXSk7CisgICAgICAgIHRlc3RTZWxlY3Rpb24uYWRkKGlkczBbMV0pOworICAgICAgICB0ZXN0U2VsZWN0aW9uLmFkZChpZHMwWzJdKTsKKworICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBTZXRzLm5ld0hhc2hTZXQoaWRzMSk7CisgICAgICAgIHRlc3RTZWxlY3Rpb24uaW50ZXJzZWN0KHNldCk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0U2VsZWN0aW9uLmlzRW1wdHkoKSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdGVzdENvbGxhcHNlQmVmb3JlKCkgewotICAgICAgICBzZWxlY3Rpb24uY29sbGFwc2UoMCwgMik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCBzZWxlY3Rpb24uc2l6ZSgpKTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoMSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDMpOwotICAgICAgICBhc3NlcnRDb250YWlucyg3KTsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW50ZXJzZWN0aW9uX3N1YnNldCgpIHsKKyAgICAgICAgU3RyaW5nW10gaWRzMCA9IG5ldyBTdHJpbmdbXXsiZm9vIiwgImJhciIsICJiYXoifTsKKyAgICAgICAgU3RyaW5nW10gaWRzMSA9IG5ldyBTdHJpbmdbXXsiMCIsICJiYXoiLCAiMSIsICJmb28iLCAiMiJ9OworCisgICAgICAgIFNlbGVjdGlvbiB0ZXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbigpOworICAgICAgICB0ZXN0U2VsZWN0aW9uLmFkZChpZHMwWzBdKTsKKyAgICAgICAgdGVzdFNlbGVjdGlvbi5hZGQoaWRzMFsxXSk7CisgICAgICAgIHRlc3RTZWxlY3Rpb24uYWRkKGlkczBbMl0pOworCisgICAgICAgIHRlc3RTZWxlY3Rpb24uaW50ZXJzZWN0KFNldHMubmV3SGFzaFNldChpZHMxKSk7CisKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0U2VsZWN0aW9uLmNvbnRhaW5zKCJmb28iKSk7CisgICAgICAgIGFzc2VydEZhbHNlKHRlc3RTZWxlY3Rpb24uY29udGFpbnMoImJhciIpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0U2VsZWN0aW9uLmNvbnRhaW5zKCJiYXoiKSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdGVzdENvbGxhcHNlQWZ0ZXIoKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZSgxMCwgMTApOwotICAgICAgICBhc3NlcnRFcXVhbHMoMywgc2VsZWN0aW9uLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydENvbnRhaW5zKDMpOwotICAgICAgICBhc3NlcnRDb250YWlucyg1KTsKLSAgICAgICAgYXNzZXJ0Q29udGFpbnMoOSk7CisgICAgcHVibGljIHZvaWQgdGVzdEludGVyc2VjdGlvbl9hbGwoKSB7CisgICAgICAgIFN0cmluZ1tdIGlkczAgPSBuZXcgU3RyaW5nW117ImZvbyIsICJiYXIiLCAiYmF6In07CisgICAgICAgIFN0cmluZ1tdIGlkczEgPSBuZXcgU3RyaW5nW117IjAiLCAiYmF6IiwgIjEiLCAiZm9vIiwgIjIiLCAiYmFyIn07CisKKyAgICAgICAgU2VsZWN0aW9uIHRlc3RTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgICAgIHRlc3RTZWxlY3Rpb24uYWRkKGlkczBbMF0pOworICAgICAgICB0ZXN0U2VsZWN0aW9uLmFkZChpZHMwWzFdKTsKKyAgICAgICAgdGVzdFNlbGVjdGlvbi5hZGQoaWRzMFsyXSk7CisKKyAgICAgICAgU2VsZWN0aW9uIGNvbnRyb2wgPSBuZXcgU2VsZWN0aW9uKCk7CisgICAgICAgIGNvbnRyb2wuY29weUZyb20odGVzdFNlbGVjdGlvbik7CisKKyAgICAgICAgdGVzdFNlbGVjdGlvbi5pbnRlcnNlY3QoU2V0cy5uZXdIYXNoU2V0KGlkczEpKTsKKworICAgICAgICBhc3NlcnRUcnVlKHRlc3RTZWxlY3Rpb24uZXF1YWxzKGNvbnRyb2wpKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29sbGFwc2VBY3Jvc3MoKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5jb2xsYXBzZSgwLCAxMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBzZWxlY3Rpb24uc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0Q29udGFpbnMoaW50IGkpIHsKLSAgICAgICAgU3RyaW5nIGVyciA9IFN0cmluZy5mb3JtYXQoIlNlbGVjdGlvbiAlcyBkb2VzIG5vdCBjb250YWluICVkIiwgc2VsZWN0aW9uLCBpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShlcnIsIHNlbGVjdGlvbi5jb250YWlucyhpKSk7CisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbnRhaW5zKFN0cmluZyBpZCkgeworICAgICAgICBTdHJpbmcgZXJyID0gU3RyaW5nLmZvcm1hdCgiU2VsZWN0aW9uICVzIGRvZXMgbm90IGNvbnRhaW4gJXMiLCBzZWxlY3Rpb24sIGlkKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShlcnIsIHNlbGVjdGlvbi5jb250YWlucyhpZCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1NlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcldyYXBwZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4ODg1YwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1NlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5kaXJsaXN0OworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5NYXRyaXhDdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudDsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldzsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuQW5kcm9pZFRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5EaXJlY3RvcnlSZXN1bHQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUm9vdEN1cnNvcldyYXBwZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3RhdGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQFNtYWxsVGVzdAorcHVibGljIGNsYXNzIFNlY3Rpb25CcmVha0RvY3VtZW50c0FkYXB0ZXJXcmFwcGVyVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUSE9SSVRZID0gInRlc3RfYXV0aG9yaXR5IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBOQU1FUyA9IG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAiNCIsCisgICAgICAgICAgICAiZm9vIiwKKyAgICAgICAgICAgICIxIiwKKyAgICAgICAgICAgICJiYXIiLAorICAgICAgICAgICAgIiooTGppZmw7YSIsCisgICAgICAgICAgICAiMCIsCisgICAgICAgICAgICAiYmF6IiwKKyAgICAgICAgICAgICIyIiwKKyAgICAgICAgICAgICIzIiwKKyAgICAgICAgICAgICIlJCVWRCIKKyAgICB9OworCisgICAgcHJpdmF0ZSBUZXN0TW9kZWwgbU1vZGVsOworICAgIHByaXZhdGUgU2VjdGlvbkJyZWFrRG9jdW1lbnRzQWRhcHRlcldyYXBwZXIgbUFkYXB0ZXI7CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKKworICAgICAgICBmaW5hbCBDb250ZXh0IHRlc3RDb250ZXh0ID0gVGVzdENvbnRleHQuY3JlYXRlU3RvcmFnZVRlc3RDb250ZXh0KGdldENvbnRleHQoKSwgQVVUSE9SSVRZKTsKKyAgICAgICAgRG9jdW1lbnRzQWRhcHRlci5FbnZpcm9ubWVudCBlbnYgPSBuZXcgVGVzdEVudmlyb25tZW50KHRlc3RDb250ZXh0KTsKKworICAgICAgICBtTW9kZWwgPSBuZXcgVGVzdE1vZGVsKHRlc3RDb250ZXh0LCBBVVRIT1JJVFkpOworICAgICAgICBtQWRhcHRlciA9IG5ldyBTZWN0aW9uQnJlYWtEb2N1bWVudHNBZGFwdGVyV3JhcHBlcigKKyAgICAgICAgICAgIGVudiwKKyAgICAgICAgICAgIG5ldyBNb2RlbEJhY2tlZERvY3VtZW50c0FkYXB0ZXIoCisgICAgICAgICAgICAgICAgZW52LCBuZXcgSWNvbkhlbHBlcih0ZXN0Q29udGV4dCwgU3RhdGUuTU9ERV9HUklEKSkpOworCisgICAgICAgIG1Nb2RlbC5hZGRVcGRhdGVMaXN0ZW5lcihtQWRhcHRlcik7CisgICAgfQorCisgICAgLy8gVGVzdHMgdGhhdCB0aGUgaXRlbSBjb3VudCBpcyBjb3JyZWN0IGZvciBhIGRpcmVjdG9yeSBjb250YWluaW5nIG9ubHkgc3ViZGlycy4KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SXRlbUNvdW50X2FsbERpcnMoKSB7CisgICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihUZXN0TW9kZWwuQ09MVU1OUyk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgICAgIE1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyIHJvdyA9IGMubmV3Um93KCk7CisgICAgICAgICAgICByb3cuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIEFVVEhPUklUWSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwgSW50ZWdlci50b1N0cmluZyhpKSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9TSVpFLCBpKTsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUik7CisgICAgICAgIH0KKyAgICAgICAgRGlyZWN0b3J5UmVzdWx0IHIgPSBuZXcgRGlyZWN0b3J5UmVzdWx0KCk7CisgICAgICAgIHIuY3Vyc29yID0gYzsKKyAgICAgICAgci5zb3J0T3JkZXIgPSBTdGF0ZS5TT1JUX09SREVSX1NJWkU7CisgICAgICAgIG1Nb2RlbC51cGRhdGUocik7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKG1Nb2RlbC5nZXRJdGVtQ291bnQoKSwgbUFkYXB0ZXIuZ2V0SXRlbUNvdW50KCkpOworICAgIH0KKworICAgIC8vIFRlc3RzIHRoYXQgdGhlIGl0ZW0gY291bnQgaXMgY29ycmVjdCBmb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyBvbmx5IGZpbGVzLgorICAgIHB1YmxpYyB2b2lkIHRlc3RJdGVtQ291bnRfYWxsRmlsZXMoKSB7CisgICAgICAgIG1Nb2RlbC51cGRhdGUoTkFNRVMpOworICAgICAgICBhc3NlcnRFcXVhbHMobU1vZGVsLmdldEl0ZW1Db3VudCgpLCBtQWRhcHRlci5nZXRJdGVtQ291bnQoKSk7CisgICAgfQorCisgICAgLy8gVGVzdHMgdGhhdCB0aGUgaXRlbSBjb3VudCBpcyBjb3JyZWN0IGZvciBhIGRpcmVjdG9yeSBjb250YWluaW5nIGZpbGVzIGFuZCBzdWJkaXJzLgorICAgIHB1YmxpYyB2b2lkIHRlc3RJdGVtQ291bnRfbWl4ZWQoKSB7CisgICAgICAgIE1hdHJpeEN1cnNvciBjID0gbmV3IE1hdHJpeEN1cnNvcihUZXN0TW9kZWwuQ09MVU1OUyk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICAgICAgICAgIE1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyIHJvdyA9IGMubmV3Um93KCk7CisgICAgICAgICAgICByb3cuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIEFVVEhPUklUWSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwgSW50ZWdlci50b1N0cmluZyhpKSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9TSVpFLCBpKTsKKyAgICAgICAgICAgIFN0cmluZyBtaW1lVHlwZSA9KGkgPCAyKSA/IERvY3VtZW50Lk1JTUVfVFlQRV9ESVIgOiAidGV4dC8qIjsKKyAgICAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgbWltZVR5cGUpOworICAgICAgICB9CisgICAgICAgIERpcmVjdG9yeVJlc3VsdCByID0gbmV3IERpcmVjdG9yeVJlc3VsdCgpOworICAgICAgICByLmN1cnNvciA9IGM7CisgICAgICAgIHIuc29ydE9yZGVyID0gU3RhdGUuU09SVF9PUkRFUl9TSVpFOworICAgICAgICBtTW9kZWwudXBkYXRlKHIpOworCisgICAgICAgIGFzc2VydEVxdWFscyhtTW9kZWwuZ2V0SXRlbUNvdW50KCkgKyAxLCBtQWRhcHRlci5nZXRJdGVtQ291bnQoKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBUZXN0RW52aXJvbm1lbnQgaW1wbGVtZW50cyBEb2N1bWVudHNBZGFwdGVyLkVudmlyb25tZW50IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IHRlc3RDb250ZXh0OworCisgICAgICAgIHByaXZhdGUgVGVzdEVudmlyb25tZW50KENvbnRleHQgdGVzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHRoaXMudGVzdENvbnRleHQgPSB0ZXN0Q29udGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1NlbGVjdGVkKFN0cmluZyBpZCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzRG9jdW1lbnRFbmFibGVkKFN0cmluZyBtaW1lVHlwZSwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBpbml0RG9jdW1lbnRIb2xkZXIoRG9jdW1lbnRIb2xkZXIgaG9sZGVyKSB7fQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgTW9kZWwgZ2V0TW9kZWwoKSB7CisgICAgICAgICAgICByZXR1cm4gbU1vZGVsOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdGF0ZSBnZXREaXNwbGF5U3RhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgQ29udGV4dCBnZXRDb250ZXh0KCkgeworICAgICAgICAgICAgcmV0dXJuIHRlc3RDb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmREb2N1bWVudEhvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIsIEN1cnNvciBjdXJzb3IpIHt9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlMaXN0ZW5lciBpbXBsZW1lbnRzIE1vZGVsLlVwZGF0ZUxpc3RlbmVyIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZShNb2RlbCBtb2RlbCkge30KKyAgICAgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZUZhaWxlZChFeGNlcHRpb24gZSkge30KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEdW1teUFkYXB0ZXIgZXh0ZW5kcyBSZWN5Y2xlclZpZXcuQWRhcHRlcjxSZWN5Y2xlclZpZXcuVmlld0hvbGRlcj4geworICAgICAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgcHVibGljIHZvaWQgb25CaW5kVmlld0hvbGRlcihSZWN5Y2xlclZpZXcuVmlld0hvbGRlciBob2xkZXIsIGludCBwb3NpdGlvbikge30KKyAgICAgICAgcHVibGljIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIG9uQ3JlYXRlVmlld0hvbGRlcihWaWV3R3JvdXAgcGFyZW50LCBpbnQgdmlld1R5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdENvbnRlbnRQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdENvbnRlbnRQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZDQyNGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0Q29udGVudFByb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OworaW1wb3J0IGFuZHJvaWQudGVzdC5tb2NrLk1vY2tDb250ZW50UHJvdmlkZXI7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudEluZm87CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEEgdmVyeSBzaW1wbGUgdGVzdCBkb3VibGUgZm9yIENvbnRlbnRQcm92aWRlci4gVXNlZnVsIGluIHRoaXMgcGFja2FnZSBvbmx5LgorICovCitjbGFzcyBUZXN0Q29udGVudFByb3ZpZGVyIGV4dGVuZHMgTW9ja0NvbnRlbnRQcm92aWRlciB7CisgICAgTGlzdDxVcmk+IG1EZWxldGVkID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQnVuZGxlIGNhbGwoU3RyaW5nIG1ldGhvZCwgU3RyaW5nIGFyZywgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAvLyBJbnRlcmNlcHQgYW5kIGxvZyBkZWxldGUgbWV0aG9kIGNhbGxzLgorICAgICAgICBpZiAoRG9jdW1lbnRzQ29udHJhY3QuTUVUSE9EX0RFTEVURV9ET0NVTUVOVC5lcXVhbHMobWV0aG9kKSkgeworICAgICAgICAgICAgZmluYWwgVXJpIGRvY3VtZW50VXJpID0gZXh0cmFzLmdldFBhcmNlbGFibGUoRG9jdW1lbnRzQ29udHJhY3QuRVhUUkFfVVJJKTsKKyAgICAgICAgICAgIG1EZWxldGVkLmFkZChkb2N1bWVudFVyaSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IEJ1bmRsZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNhbGwobWV0aG9kLCBhcmcsIGV4dHJhcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhc3NlcnRXYXNEZWxldGVkKERvY3VtZW50SW5mbyBkb2MpIHsKKyAgICAgICAgTW9kZWxUZXN0LmFzc2VydFRydWUobURlbGV0ZWQuY29udGFpbnMoZG9jLmRlcml2ZWRVcmkpKTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdENvbnRleHQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RDb250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE0MDYyZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RDb250ZXh0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOworaW1wb3J0IGFuZHJvaWQudGVzdC5tb2NrLk1vY2tDb250ZW50UmVzb2x2ZXI7CisKK3B1YmxpYyBmaW5hbCBjbGFzcyBUZXN0Q29udGV4dCB7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgQ29udGV4dCBjb25maWd1cmVkIHdpdGggdGVzdCBwcm92aWRlciBmb3IgYXV0aG9yaXR5LgorICAgICAqLworICAgIHN0YXRpYyBDb250ZXh0IGNyZWF0ZVN0b3JhZ2VUZXN0Q29udGV4dChDb250ZXh0IGNvbnRleHQsIFN0cmluZyBhdXRob3JpdHkpIHsKKyAgICAgICAgZmluYWwgTW9ja0NvbnRlbnRSZXNvbHZlciB0ZXN0UmVzb2x2ZXIgPSBuZXcgTW9ja0NvbnRlbnRSZXNvbHZlcigpOworICAgICAgICBUZXN0Q29udGVudFByb3ZpZGVyIHByb3ZpZGVyID0gbmV3IFRlc3RDb250ZW50UHJvdmlkZXIoKTsKKyAgICAgICAgdGVzdFJlc29sdmVyLmFkZFByb3ZpZGVyKGF1dGhvcml0eSwgcHJvdmlkZXIpOworCisgICAgICAgIHJldHVybiBuZXcgQ29udGV4dFdyYXBwZXIoY29udGV4dCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgQ29udGVudFJlc29sdmVyIGdldENvbnRlbnRSZXNvbHZlcigpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdFJlc29sdmVyOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3REb2N1bWVudHNBZGFwdGVyLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0RG9jdW1lbnRzQWRhcHRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2N2Y0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0RG9jdW1lbnRzQWRhcHRlci5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLmRpcmxpc3Q7CisKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQSBza2VsZXRhbCB7QGxpbmsgRG9jdW1lbnRzQWRhcHRlcn0gdGVzdCBkb3VibGUuCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0RG9jdW1lbnRzQWRhcHRlciBleHRlbmRzIERvY3VtZW50c0FkYXB0ZXIgeworCisgICAgTGlzdDxTdHJpbmc+IG1Nb2RlbElkcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgcHVibGljIFRlc3REb2N1bWVudHNBZGFwdGVyKExpc3Q8U3RyaW5nPiBtb2RlbElkcykgeworICAgICAgICBtTW9kZWxJZHMgPSBtb2RlbElkczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbk1vZGVsVXBkYXRlKE1vZGVsIG1vZGVsKSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Nb2RlbFVwZGF0ZUZhaWxlZChFeGNlcHRpb24gZSkgeworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIExpc3Q8U3RyaW5nPiBnZXRNb2RlbElkcygpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICB2b2lkIG9uSXRlbVNlbGVjdGlvbkNoYW5nZWQoU3RyaW5nIGlkKSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgU3RyaW5nIGdldE1vZGVsSWQoaW50IHBvc2l0aW9uKSB7CisgICAgICAgIHJldHVybiBtTW9kZWxJZHMuZ2V0KHBvc2l0aW9uKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3BhcnNlQXJyYXk8U3RyaW5nPiBoaWRlKFN0cmluZy4uLiBpZHMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgdm9pZCB1bmhpZGUoU3BhcnNlQXJyYXk8U3RyaW5nPiBpZHMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIERvY3VtZW50SG9sZGVyIG9uQ3JlYXRlVmlld0hvbGRlcihWaWV3R3JvdXAgcGFyZW50LCBpbnQgdmlld1R5cGUpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25CaW5kVmlld0hvbGRlcihEb2N1bWVudEhvbGRlciBob2xkZXIsIGludCBwb3NpdGlvbikgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsKKyAgICAgICAgcmV0dXJuIG1Nb2RlbElkcy5zaXplKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdE1vZGVsLmphdmEgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0TW9kZWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNkM2IyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL2Rpcmxpc3QvVGVzdE1vZGVsLmphdmEKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdDsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuTWF0cml4Q3Vyc29yOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5EaXJlY3RvcnlSZXN1bHQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuUm9vdEN1cnNvcldyYXBwZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5NdWx0aVNlbGVjdE1hbmFnZXIuU2VsZWN0aW9uOworCitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgVGVzdE1vZGVsIGV4dGVuZHMgTW9kZWwgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZ1tdIENPTFVNTlMgPSBuZXcgU3RyaW5nW117CisgICAgICAgIFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksCisgICAgICAgIERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCwKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLAorICAgICAgICBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FLAorICAgICAgICBEb2N1bWVudC5DT0xVTU5fU0laRSwKKyAgICAgICAgRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRQorICAgIH07CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQXV0aG9yaXR5OworICAgIHByaXZhdGUgU2V0PFN0cmluZz4gbURlbGV0ZWQ7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IGNvbnRleHQuIGNvbnRleHQgbXVzdCBiZSBjb25maWd1cmVkIHdpdGggcHJvdmlkZXIgZm9yIGF1dGhvcml0eS4KKyAgICAgKiBAc2VlIFRlc3RDb250ZXh0I2NyZWF0ZVN0b3JhZ2VUZXN0Q29udGV4dChDb250ZXh0LCBTdHJpbmcpLgorICAgICAqLworICAgIHB1YmxpYyBUZXN0TW9kZWwoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgYXV0aG9yaXR5KSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQpOworICAgICAgICBtQXV0aG9yaXR5ID0gYXV0aG9yaXR5OworICAgIH0KKworICAgIHZvaWQgdXBkYXRlKFN0cmluZy4uLiBuYW1lcykgeworICAgICAgICBSYW5kb20gcmFuZCA9IG5ldyBSYW5kb20oKTsKKworICAgICAgICBNYXRyaXhDdXJzb3IgYyA9IG5ldyBNYXRyaXhDdXJzb3IoQ09MVU1OUyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIE1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyIHJvdyA9IGMubmV3Um93KCk7CisgICAgICAgICAgICByb3cuYWRkKFJvb3RDdXJzb3JXcmFwcGVyLkNPTFVNTl9BVVRIT1JJVFksIG1BdXRob3JpdHkpOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsIEludGVnZXIudG9TdHJpbmcoaSkpOworICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fRkxBR1MsIERvY3VtZW50LkZMQUdfU1VQUE9SVFNfREVMRVRFKTsKKyAgICAgICAgICAgIC8vIEdlbmVyYXRlIHJhbmRvbSBkb2N1bWVudCBuYW1lcyBhbmQgc2l6ZXMuIFRoaXMgZm9yY2VzIHRoZSBtb2RlbCdzIGludGVybmFsIHNvcnQgY29kZQorICAgICAgICAgICAgLy8gdG8gYWN0dWFsbHkgZG8gc29tZXRoaW5nLgorICAgICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FLCBuYW1lc1tpXSk7CisgICAgICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9TSVpFLCByYW5kLm5leHRJbnQoKSk7CisgICAgICAgIH0KKworICAgICAgICBEaXJlY3RvcnlSZXN1bHQgciA9IG5ldyBEaXJlY3RvcnlSZXN1bHQoKTsKKyAgICAgICAgci5jdXJzb3IgPSBjOworICAgICAgICB1cGRhdGUocik7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IG1vZGVsIGlkIGluY2x1ZGVzIGF1dGhvcml0eSBxdWFsaWZpZXIgYW5kIGlzIGRpc3RpbmN0CisgICAgLy8gV1JUIGRvY3VtZW50SWQgYmVjYXVzZSBvZiB0aGlzLgorICAgIFN0cmluZyBpZEZvclBvc2l0aW9uKGludCBwKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVNb2RlbElkKG1BdXRob3JpdHksIEludGVnZXIudG9TdHJpbmcocCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGRlbGV0ZShTZWxlY3Rpb24gc2VsZWN0ZWQsIERlbGV0aW9uTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgZm9yIChTdHJpbmcgaWQgOiBzZWxlY3RlZC5nZXRBbGwoKSkgeworICAgICAgICAgICAgbURlbGV0ZWQuYWRkKGlkKTsKKyAgICAgICAgfQorICAgICAgICBsaXN0ZW5lci5vbkNvbXBsZXRpb24oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvZGlybGlzdC9UZXN0U2VsZWN0aW9uRW52aXJvbm1lbnQuamF2YSBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RTZWxlY3Rpb25FbnZpcm9ubWVudC5qYXZhCmluZGV4IGI0MzI0YTguLmM0Y2ZkM2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RTZWxlY3Rpb25FbnZpcm9ubWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9kaXJsaXN0L1Rlc3RTZWxlY3Rpb25FbnZpcm9ubWVudC5qYXZhCkBAIC0yMyw4ICsyMywxMyBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuZGlybGlzdC5NdWx0aVNlbGVjdE1hbmFnZXIuU2VsZWN0aW9uRW52aXJvbm1lbnQ7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogcHVibGljIGNsYXNzIFRlc3RTZWxlY3Rpb25FbnZpcm9ubWVudCBpbXBsZW1lbnRzIFNlbGVjdGlvbkVudmlyb25tZW50IHsKIAorICAgIHB1YmxpYyBUZXN0U2VsZWN0aW9uRW52aXJvbm1lbnQoTGlzdDxTdHJpbmc+IGl0ZW1zKSB7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2hvd0JhbmQoUmVjdCByZWN0KSB7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL0NvcHlTZXJ2aWNlVGVzdC5qYXZhIGIvcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25TZXJ2aWNlVGVzdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Db3B5U2VydmljZVRlc3QuamF2YQpyZW5hbWUgdG8gcGFja2FnZXMvRG9jdW1lbnRzVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2RvY3VtZW50c3VpL3NlcnZpY2VzL0ZpbGVPcGVyYXRpb25TZXJ2aWNlVGVzdC5qYXZhCmluZGV4IDA3OWQ1OTkuLjM1YWFkNjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9kb2N1bWVudHN1aS9Db3B5U2VydmljZVRlc3QuamF2YQorKysgYi9wYWNrYWdlcy9Eb2N1bWVudHNVSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvZG9jdW1lbnRzdWkvc2VydmljZXMvRmlsZU9wZXJhdGlvblNlcnZpY2VUZXN0LmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWk7CitwYWNrYWdlIGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLnNlcnZpY2VzOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRQcm92aWRlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwpAQCAtMzQsNiArMzQsOSBAQAogaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5Eb2N1bWVudHNQcm92aWRlckhlbHBlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5TaGFyZWQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZG9jdW1lbnRzdWkuU3R1YlByb3ZpZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLkRvY3VtZW50SW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5tb2RlbC5Eb2N1bWVudFN0YWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLmRvY3VtZW50c3VpLm1vZGVsLlJvb3RJbmZvOwpAQCAtNTQsMTAgKzU3LDEwIEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKIAogQE1lZGl1bVRlc3QKLXB1YmxpYyBjbGFzcyBDb3B5U2VydmljZVRlc3QgZXh0ZW5kcyBTZXJ2aWNlVGVzdENhc2U8Q29weVNlcnZpY2U+IHsKK3B1YmxpYyBjbGFzcyBGaWxlT3BlcmF0aW9uU2VydmljZVRlc3QgZXh0ZW5kcyBTZXJ2aWNlVGVzdENhc2U8RmlsZU9wZXJhdGlvblNlcnZpY2U+IHsKIAotICAgIHB1YmxpYyBDb3B5U2VydmljZVRlc3QoKSB7Ci0gICAgICAgIHN1cGVyKENvcHlTZXJ2aWNlLmNsYXNzKTsKKyAgICBwdWJsaWMgRmlsZU9wZXJhdGlvblNlcnZpY2VUZXN0KCkgeworICAgICAgICBzdXBlcihGaWxlT3BlcmF0aW9uU2VydmljZS5jbGFzcyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIEFVVEhPUklUWSA9ICJjb20uYW5kcm9pZC5kb2N1bWVudHN1aS5zdHVicHJvdmlkZXIiOwpAQCAtOTcsNyArMTAwLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RDb3B5RmlsZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgc3JjUGF0aCA9ICIvdGVzdDAudHh0IjsKLSAgICAgICAgVXJpIHRlc3RGaWxlID0gbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInRleHQvcGxhaW4iLAorICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInRleHQvcGxhaW4iLAogICAgICAgICAgICAgICAgICJUaGUgZml2ZSBib3hpbmcgd2l6YXJkcyBqdW1wIHF1aWNrbHkiLmdldEJ5dGVzKCkpOwogCiAgICAgICAgIHN0YXJ0U2VydmljZShjcmVhdGVDb3B5SW50ZW50KExpc3RzLm5ld0FycmF5TGlzdCh0ZXN0RmlsZSkpKTsKQEAgLTExMCwxMyArMTEzLDM4IEBACiAgICAgICAgIGFzc2VydENvcGllZChzcmNQYXRoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29weVZpcnR1YWxUeXBlZEZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHNyY1BhdGggPSAiL3ZpcnR1YWwuc3RoIjsKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRHN0UGF0aCA9ICIvdmlydHVhbC5zdGgucGRmIjsKKyAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gc3RyZWFtVHlwZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgc3RyZWFtVHlwZXMuYWRkKCJhcHBsaWNhdGlvbi9wZGYiKTsKKyAgICAgICAgc3RyZWFtVHlwZXMuYWRkKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgU3RyaW5nIHRlc3RDb250ZW50ID0gIkkgbG92ZSBmcnVpdCBjYWtlcyEiOworICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVWaXJ0dWFsRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInZpcnR1YWwvbWltZS10eXBlIiwKKyAgICAgICAgICAgICAgICBzdHJlYW1UeXBlcywgdGVzdENvbnRlbnQuZ2V0Qnl0ZXMoKSk7CisKKyAgICAgICAgc3RhcnRTZXJ2aWNlKGNyZWF0ZUNvcHlJbnRlbnQoTGlzdHMubmV3QXJyYXlMaXN0KHRlc3RGaWxlKSkpOworCisgICAgICAgIC8vIDIgb3BlcmF0aW9uczogZmlsZSBjcmVhdGlvbiwgdGhlbiB3cml0aW5nIGRhdGEuCisgICAgICAgIG1SZXNvbHZlci53YWl0Rm9yQ2hhbmdlcygyKTsKKworICAgICAgICAvLyBWZXJpZnkgdGhhdCBvbmUgZmlsZSB3YXMgY29waWVkLgorICAgICAgICBhc3NlcnREZXN0RmlsZUNvdW50KDEpOworCisgICAgICAgIGJ5dGVbXSBkc3RDb250ZW50ID0gcmVhZEZpbGUoRFNUX1JPT1QsIGV4cGVjdGVkRHN0UGF0aCk7CisgICAgICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscygiTW92ZWQgZmlsZSBjb250ZW50cyBkaWZmZXIiLCB0ZXN0Q29udGVudC5nZXRCeXRlcygpLCBkc3RDb250ZW50KTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCB0ZXN0TW92ZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHNyY1BhdGggPSAiL3Rlc3QwLnR4dCI7CiAgICAgICAgIFN0cmluZyB0ZXN0Q29udGVudCA9ICJUaGUgZml2ZSBib3hpbmcgd2l6YXJkcyBqdW1wIHF1aWNrbHkiOwotICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVGaWxlKFNSQ19ST09ULCBzcmNQYXRoLCAidGV4dC9wbGFpbiIsIHRlc3RDb250ZW50LmdldEJ5dGVzKCkpOworICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInRleHQvcGxhaW4iLAorICAgICAgICAgICAgICAgIHRlc3RDb250ZW50LmdldEJ5dGVzKCkpOwogCiAgICAgICAgIEludGVudCBtb3ZlSW50ZW50ID0gY3JlYXRlQ29weUludGVudChMaXN0cy5uZXdBcnJheUxpc3QodGVzdEZpbGUpKTsKLSAgICAgICAgbW92ZUludGVudC5wdXRFeHRyYShDb3B5U2VydmljZS5FWFRSQV9UUkFOU0ZFUl9NT0RFLCBDb3B5U2VydmljZS5UUkFOU0ZFUl9NT0RFX01PVkUpOworICAgICAgICBtb3ZlSW50ZW50LnB1dEV4dHJhKAorICAgICAgICAgICAgICAgIEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX09QRVJBVElPTiwKKyAgICAgICAgICAgICAgICBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRSk7CiAgICAgICAgIHN0YXJ0U2VydmljZShtb3ZlSW50ZW50KTsKIAogICAgICAgICAvLyAzIG9wZXJhdGlvbnM6IGZpbGUgY3JlYXRpb24sIHdyaXRpbmcgZGF0YSwgZGVsZXRpbmcgb3JpZ2luYWwuCkBAIC0xNDIsOSArMTcwLDEyIEBACiAgICAgICAgICAgICAgICAgIi90ZXN0Mi50eHQiCiAgICAgICAgIH07CiAgICAgICAgIExpc3Q8VXJpPiB0ZXN0RmlsZXMgPSBMaXN0cy5uZXdBcnJheUxpc3QoCi0gICAgICAgICAgICAgICAgbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjUGF0aHNbMF0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMF0uZ2V0Qnl0ZXMoKSksCi0gICAgICAgICAgICAgICAgbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjUGF0aHNbMV0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMV0uZ2V0Qnl0ZXMoKSksCi0gICAgICAgICAgICAgICAgbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjUGF0aHNbMl0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMl0uZ2V0Qnl0ZXMoKSkpOworICAgICAgICAgICAgICAgIG1TdG9yYWdlLmNyZWF0ZVJlZ3VsYXJGaWxlKFNSQ19ST09ULCBzcmNQYXRoc1swXSwgInRleHQvcGxhaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdENvbnRlbnRbMF0uZ2V0Qnl0ZXMoKSksCisgICAgICAgICAgICAgICAgbVN0b3JhZ2UuY3JlYXRlUmVndWxhckZpbGUoU1JDX1JPT1QsIHNyY1BhdGhzWzFdLCAidGV4dC9wbGFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0Q29udGVudFsxXS5nZXRCeXRlcygpKSwKKyAgICAgICAgICAgICAgICBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjUGF0aHNbMl0sICJ0ZXh0L3BsYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RDb250ZW50WzJdLmdldEJ5dGVzKCkpKTsKIAogICAgICAgICAvLyBDb3B5IGFsbCB0aGUgdGVzdCBmaWxlcy4KICAgICAgICAgc3RhcnRTZXJ2aWNlKGNyZWF0ZUNvcHlJbnRlbnQodGVzdEZpbGVzKSk7CkBAIC0xOTUsNyArMjI2LDYgQEAKIAogICAgICAgICBJbnRlbnQgaW50ZW50ID0gY3JlYXRlQ29weUludGVudChMaXN0cy5uZXdBcnJheUxpc3QodGVzdERpciksIGRlc2NEaXIpOwogICAgICAgICBzdGFydFNlcnZpY2UoaW50ZW50KTsKLQogICAgICAgICBnZXRTZXJ2aWNlKCkuYWRkRmluaXNoZWRMaXN0ZW5lcihtTGlzdGVuZXIpOwogCiAgICAgICAgIG1MaXN0ZW5lci53YWl0Rm9yRmluaXNoZWQoKTsKQEAgLTIxMCw3ICsyNDAsNyBAQAogICAgICAgICBVcmkgdGVzdERpciA9IGNyZWF0ZVRlc3REaXJlY3Rvcnkoc3JjUGF0aCk7CiAKICAgICAgICAgSW50ZW50IG1vdmVJbnRlbnQgPSBjcmVhdGVDb3B5SW50ZW50KExpc3RzLm5ld0FycmF5TGlzdCh0ZXN0RGlyKSk7Ci0gICAgICAgIG1vdmVJbnRlbnQucHV0RXh0cmEoQ29weVNlcnZpY2UuRVhUUkFfVFJBTlNGRVJfTU9ERSwgQ29weVNlcnZpY2UuVFJBTlNGRVJfTU9ERV9NT1ZFKTsKKyAgICAgICAgbW92ZUludGVudC5wdXRFeHRyYShGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9PUEVSQVRJT04sIEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9NT1ZFKTsKICAgICAgICAgc3RhcnRTZXJ2aWNlKG1vdmVJbnRlbnQpOwogCiAgICAgICAgIC8vIDIgb3BlcmF0aW9uczogRGlyZWN0b3J5IGNyZWF0aW9uLCBhbmQgcmVtb3ZhbCBvZiB0aGUgb3JpZ2luYWwuCkBAIC0yNDAsMTIgKzI3MCwxMiBAQAogICAgICAgICB9OwogICAgICAgICAvLyBDcmVhdGUgdGVzdCBkaXI7IHB1dCBzb21lIGZpbGVzIGluIGl0LgogICAgICAgICBVcmkgdGVzdERpciA9IGNyZWF0ZVRlc3REaXJlY3Rvcnkoc3JjRGlyKTsKLSAgICAgICAgbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjRmlsZXNbMF0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMF0uZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIG1TdG9yYWdlLmNyZWF0ZUZpbGUoU1JDX1JPT1QsIHNyY0ZpbGVzWzFdLCAidGV4dC9wbGFpbiIsIHRlc3RDb250ZW50WzFdLmdldEJ5dGVzKCkpOwotICAgICAgICBtU3RvcmFnZS5jcmVhdGVGaWxlKFNSQ19ST09ULCBzcmNGaWxlc1syXSwgInRleHQvcGxhaW4iLCB0ZXN0Q29udGVudFsyXS5nZXRCeXRlcygpKTsKKyAgICAgICAgbVN0b3JhZ2UuY3JlYXRlUmVndWxhckZpbGUoU1JDX1JPT1QsIHNyY0ZpbGVzWzBdLCAidGV4dC9wbGFpbiIsIHRlc3RDb250ZW50WzBdLmdldEJ5dGVzKCkpOworICAgICAgICBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjRmlsZXNbMV0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMV0uZ2V0Qnl0ZXMoKSk7CisgICAgICAgIG1TdG9yYWdlLmNyZWF0ZVJlZ3VsYXJGaWxlKFNSQ19ST09ULCBzcmNGaWxlc1syXSwgInRleHQvcGxhaW4iLCB0ZXN0Q29udGVudFsyXS5nZXRCeXRlcygpKTsKIAogICAgICAgICBJbnRlbnQgbW92ZUludGVudCA9IGNyZWF0ZUNvcHlJbnRlbnQoTGlzdHMubmV3QXJyYXlMaXN0KHRlc3REaXIpKTsKLSAgICAgICAgbW92ZUludGVudC5wdXRFeHRyYShDb3B5U2VydmljZS5FWFRSQV9UUkFOU0ZFUl9NT0RFLCBDb3B5U2VydmljZS5UUkFOU0ZFUl9NT0RFX01PVkUpOworICAgICAgICBtb3ZlSW50ZW50LnB1dEV4dHJhKEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX09QRVJBVElPTiwgRmlsZU9wZXJhdGlvblNlcnZpY2UuT1BFUkFUSU9OX01PVkUpOwogICAgICAgICBzdGFydFNlcnZpY2UobW92ZUludGVudCk7CiAKICAgICAgICAgLy8gZGlyIGNyZWF0aW9uLCB0aGVuIGNyZWF0aW9uIGFuZCB3cml0aW5nIG9mIDMgZmlsZXMsIHRoZW4gcmVtb3ZhbCBvZiBzcmMgZGlyIGFuZCAzIHNyYwpAQCAtMjcwLDcgKzMwMCw3IEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q29weUZpbGVXaXRoUmVhZEVycm9ycygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgc3JjUGF0aCA9ICIvdGVzdDAudHh0IjsKLSAgICAgICAgVXJpIHRlc3RGaWxlID0gbVN0b3JhZ2UuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInRleHQvcGxhaW4iLAorICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInRleHQvcGxhaW4iLAogICAgICAgICAgICAgICAgICJUaGUgZml2ZSBib3hpbmcgd2l6YXJkcyBqdW1wIHF1aWNrbHkiLmdldEJ5dGVzKCkpOwogCiAgICAgICAgIG1TdG9yYWdlLnNpbXVsYXRlUmVhZEVycm9yc0ZvckZpbGUodGVzdEZpbGUpOwpAQCAtMjg0LDE1ICszMTQsMzAgQEAKICAgICAgICAgYXNzZXJ0RGVzdEZpbGVDb3VudCgwKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29weVZpcnR1YWxOb25UeXBlZEZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHNyY1BhdGggPSAiL25vbi10eXBlZC5zdGgiOworICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVWaXJ0dWFsRmlsZShTUkNfUk9PVCwgc3JjUGF0aCwgInZpcnR1YWwvbWltZS10eXBlIiwKKyAgICAgICAgICAgICAgICBudWxsIC8qIHN0cmVhbVR5cGVzICovLCAiSSBsb3ZlIFRva3lvISIuZ2V0Qnl0ZXMoKSk7CisKKyAgICAgICAgSW50ZW50IGludGVudCA9IGNyZWF0ZUNvcHlJbnRlbnQoTGlzdHMubmV3QXJyYXlMaXN0KHRlc3RGaWxlKSk7CisgICAgICAgIHN0YXJ0U2VydmljZShpbnRlbnQpOworICAgICAgICBnZXRTZXJ2aWNlKCkuYWRkRmluaXNoZWRMaXN0ZW5lcihtTGlzdGVuZXIpOworCisgICAgICAgIG1MaXN0ZW5lci53YWl0Rm9yRmluaXNoZWQoKTsKKyAgICAgICAgbUxpc3RlbmVyLmFzc2VydEZhaWxlZENvdW50KDEpOworICAgICAgICBtTGlzdGVuZXIuYXNzZXJ0RmlsZUZhaWxlZCgibm9uLXR5cGVkLnN0aCIpOworICAgICAgICBhc3NlcnREZXN0RmlsZUNvdW50KDApOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRmlsZVdpdGhSZWFkRXJyb3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBzcmNQYXRoID0gIi90ZXN0MC50eHQiOwotICAgICAgICBVcmkgdGVzdEZpbGUgPSBtU3RvcmFnZS5jcmVhdGVGaWxlKFNSQ19ST09ULCBzcmNQYXRoLCAidGV4dC9wbGFpbiIsCisgICAgICAgIFVyaSB0ZXN0RmlsZSA9IG1TdG9yYWdlLmNyZWF0ZVJlZ3VsYXJGaWxlKFNSQ19ST09ULCBzcmNQYXRoLCAidGV4dC9wbGFpbiIsCiAgICAgICAgICAgICAgICAgIlRoZSBmaXZlIGJveGluZyB3aXphcmRzIGp1bXAgcXVpY2tseSIuZ2V0Qnl0ZXMoKSk7CiAKICAgICAgICAgbVN0b3JhZ2Uuc2ltdWxhdGVSZWFkRXJyb3JzRm9yRmlsZSh0ZXN0RmlsZSk7CiAKICAgICAgICAgSW50ZW50IG1vdmVJbnRlbnQgPSBjcmVhdGVDb3B5SW50ZW50KExpc3RzLm5ld0FycmF5TGlzdCh0ZXN0RmlsZSkpOwotICAgICAgICBtb3ZlSW50ZW50LnB1dEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUsIENvcHlTZXJ2aWNlLlRSQU5TRkVSX01PREVfTU9WRSk7CisgICAgICAgIG1vdmVJbnRlbnQucHV0RXh0cmEoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLCBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRSk7CiAgICAgICAgIHN0YXJ0U2VydmljZShtb3ZlSW50ZW50KTsKIAogICAgICAgICB0cnkgewpAQCAtMzI2LDE1ICszNzEsMTUgQEAKICAgICAgICAgfTsKICAgICAgICAgLy8gQ3JlYXRlIHRlc3QgZGlyOyBwdXQgc29tZSBmaWxlcyBpbiBpdC4KICAgICAgICAgVXJpIHRlc3REaXIgPSBjcmVhdGVUZXN0RGlyZWN0b3J5KHNyY0Rpcik7Ci0gICAgICAgIG1TdG9yYWdlLmNyZWF0ZUZpbGUoU1JDX1JPT1QsIHNyY0ZpbGVzWzBdLCAidGV4dC9wbGFpbiIsIHRlc3RDb250ZW50WzBdLmdldEJ5dGVzKCkpOworICAgICAgICBtU3RvcmFnZS5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjRmlsZXNbMF0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMF0uZ2V0Qnl0ZXMoKSk7CiAgICAgICAgIFVyaSBlcnJGaWxlID0gbVN0b3JhZ2UKLSAgICAgICAgICAgICAgICAuY3JlYXRlRmlsZShTUkNfUk9PVCwgc3JjRmlsZXNbMV0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMV0uZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIG1TdG9yYWdlLmNyZWF0ZUZpbGUoU1JDX1JPT1QsIHNyY0ZpbGVzWzJdLCAidGV4dC9wbGFpbiIsIHRlc3RDb250ZW50WzJdLmdldEJ5dGVzKCkpOworICAgICAgICAgICAgICAgIC5jcmVhdGVSZWd1bGFyRmlsZShTUkNfUk9PVCwgc3JjRmlsZXNbMV0sICJ0ZXh0L3BsYWluIiwgdGVzdENvbnRlbnRbMV0uZ2V0Qnl0ZXMoKSk7CisgICAgICAgIG1TdG9yYWdlLmNyZWF0ZVJlZ3VsYXJGaWxlKFNSQ19ST09ULCBzcmNGaWxlc1syXSwgInRleHQvcGxhaW4iLCB0ZXN0Q29udGVudFsyXS5nZXRCeXRlcygpKTsKIAogICAgICAgICBtU3RvcmFnZS5zaW11bGF0ZVJlYWRFcnJvcnNGb3JGaWxlKGVyckZpbGUpOwogCiAgICAgICAgIEludGVudCBtb3ZlSW50ZW50ID0gY3JlYXRlQ29weUludGVudChMaXN0cy5uZXdBcnJheUxpc3QodGVzdERpcikpOwotICAgICAgICBtb3ZlSW50ZW50LnB1dEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1RSQU5TRkVSX01PREUsIENvcHlTZXJ2aWNlLlRSQU5TRkVSX01PREVfTU9WRSk7CisgICAgICAgIG1vdmVJbnRlbnQucHV0RXh0cmEoRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLCBGaWxlT3BlcmF0aW9uU2VydmljZS5PUEVSQVRJT05fTU9WRSk7CiAgICAgICAgIHN0YXJ0U2VydmljZShtb3ZlSW50ZW50KTsKIAogICAgICAgICAvLyAtIGRzdCBkaXIgY3JlYXRpb24sCkBAIC0zNjMsNyArNDA4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIFVyaSBjcmVhdGVUZXN0RGlyZWN0b3J5KFN0cmluZyBkaXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBtU3RvcmFnZS5jcmVhdGVGaWxlKAorICAgICAgICByZXR1cm4gbVN0b3JhZ2UuY3JlYXRlUmVndWxhckZpbGUoCiAgICAgICAgICAgICAgICAgU1JDX1JPT1QsIGRpciwgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUiwgbnVsbCk7CiAgICAgfQogCkBAIC0zODIsOCArNDI3LDE0IEBACiAKICAgICAgICAgRG9jdW1lbnRTdGFjayBzdGFjayA9IG5ldyBEb2N1bWVudFN0YWNrKCk7CiAgICAgICAgIHN0YWNrLnB1c2goRG9jdW1lbnRJbmZvLmZyb21VcmkobVJlc29sdmVyLCBkc3QpKTsKLSAgICAgICAgZmluYWwgSW50ZW50IGNvcHlJbnRlbnQgPSBuZXcgSW50ZW50KG1Db250ZXh0LCBDb3B5U2VydmljZS5jbGFzcyk7Ci0gICAgICAgIGNvcHlJbnRlbnQucHV0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhKENvcHlTZXJ2aWNlLkVYVFJBX1NSQ19MSVNULCBzcmNEb2NzKTsKKyAgICAgICAgZmluYWwgSW50ZW50IGNvcHlJbnRlbnQgPSBuZXcgSW50ZW50KG1Db250ZXh0LCBGaWxlT3BlcmF0aW9uU2VydmljZS5jbGFzcyk7CisgICAgICAgIGNvcHlJbnRlbnQucHV0RXh0cmEoCisgICAgICAgICAgICAgICAgRmlsZU9wZXJhdGlvblNlcnZpY2UuRVhUUkFfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgIEZpbGVPcGVyYXRpb25TZXJ2aWNlLk9QRVJBVElPTl9DT1BZKTsKKyAgICAgICAgY29weUludGVudC5wdXRFeHRyYSgKKyAgICAgICAgICAgICAgICBGaWxlT3BlcmF0aW9uU2VydmljZS5FWFRSQV9KT0JfSUQsCisgICAgICAgICAgICAgICAgRmlsZU9wZXJhdGlvblNlcnZpY2UuY3JlYXRlSm9iSWQoKSk7CisgICAgICAgIGNvcHlJbnRlbnQucHV0UGFyY2VsYWJsZUFycmF5TGlzdEV4dHJhKEZpbGVPcGVyYXRpb25TZXJ2aWNlLkVYVFJBX1NSQ19MSVNULCBzcmNEb2NzKTsKICAgICAgICAgY29weUludGVudC5wdXRFeHRyYShTaGFyZWQuRVhUUkFfU1RBQ0ssIChQYXJjZWxhYmxlKSBzdGFjayk7CiAKICAgICAgICAgcmV0dXJuIGNvcHlJbnRlbnQ7CkBAIC00NjksMTAgKzUyMCwxMSBAQAogICAgICAgICBtUmVzb2x2ZXIuYWRkUHJvdmlkZXIoQVVUSE9SSVRZLCBtU3RvcmFnZSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDb3B5Sm9iTGlzdGVuZXIgaW1wbGVtZW50cyBDb3B5U2VydmljZS5UZXN0T25seUxpc3RlbmVyIHsKKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIENvcHlKb2JMaXN0ZW5lciBpbXBsZW1lbnRzIEZpbGVPcGVyYXRpb25TZXJ2aWNlLlRlc3RPbmx5TGlzdGVuZXIgewogCiAgICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwogICAgICAgICBmaW5hbCBMaXN0PERvY3VtZW50SW5mbz4gZmFpbGVkRG9jcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkZpbmlzaGVkKExpc3Q8RG9jdW1lbnRJbmZvPiBmYWlsZWQpIHsKICAgICAgICAgICAgIGZhaWxlZERvY3MuYWRkQWxsKGZhaWxlZCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9BbmRyb2lkLm1rIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvQW5kcm9pZC5tawppbmRleCBkYjgyNWZmNC4uZWM2YWYyZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvQW5kcm9pZC5taworKysgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9BbmRyb2lkLm1rCkBAIC01LDYgKzUsNyBAQAogCiBMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1zdWJkaXItamF2YS1maWxlcykKIAorTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQtc3VwcG9ydC1kb2N1bWVudHMtYXJjaGl2ZQogTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEV4dGVybmFsU3RvcmFnZVByb3ZpZGVyCiBMT0NBTF9DRVJUSUZJQ0FURSA6PSBwbGF0Zm9ybQogTE9DQUxfUFJJVklMRUdFRF9NT0RVTEUgOj0gdHJ1ZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjgwZDRmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTIzMzc1Mjc1NzQ4NTMwMjM0Ij4iU3BvbGpuYSBtZW1vcmlqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJvb3RfaW50ZXJuYWxfc3RvcmFnZSIgbXNnaWQ9IjgyNzg0NDI0MzA2ODU4NDEyNyI+IkludGVybmEgbWVtb3JpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyb290X2hvbWUiIG1zZ2lkPSI3OTMxNTU1Mzk2NzY3NTEzMzU5Ij4iUG/EjWV0bmkiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9leHRlcm5hbHN0b3JhZ2UvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIuamF2YSBiL3BhY2thZ2VzL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9leHRlcm5hbHN0b3JhZ2UvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIuamF2YQppbmRleCAyY2VkYzcyLi5jNmU1NTMxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvZXh0ZXJuYWxzdG9yYWdlL0V4dGVybmFsU3RvcmFnZVByb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvRXh0ZXJuYWxTdG9yYWdlUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL2V4dGVybmFsc3RvcmFnZS9FeHRlcm5hbFN0b3JhZ2VQcm92aWRlci5qYXZhCkBAIC0zOSw2ICszOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Sb290OwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzUHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5NZWRpYVN0b3JlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5wcm92aWRlci5Eb2N1bWVudEFyY2hpdmVIZWxwZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkRlYnVnVXRpbHM7CkBAIC05Myw2ICs5NCw3IEBACiAKICAgICBwcml2YXRlIFN0b3JhZ2VNYW5hZ2VyIG1TdG9yYWdlTWFuYWdlcjsKICAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXI7CisgICAgcHJpdmF0ZSBEb2N1bWVudEFyY2hpdmVIZWxwZXIgbUFyY2hpdmVIZWxwZXI7CiAKICAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBtUm9vdHNMb2NrID0gbmV3IE9iamVjdCgpOwogCkBAIC0xMDYsNiArMTA4LDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZSgpIHsKICAgICAgICAgbVN0b3JhZ2VNYW5hZ2VyID0gKFN0b3JhZ2VNYW5hZ2VyKSBnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlNUT1JBR0VfU0VSVklDRSk7CiAgICAgICAgIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKKyAgICAgICAgbUFyY2hpdmVIZWxwZXIgPSBuZXcgRG9jdW1lbnRBcmNoaXZlSGVscGVyKHRoaXMsIChjaGFyKSAwKTsKIAogICAgICAgICB1cGRhdGVWb2x1bWVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzIxLDggKzMyNCwxMiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgU3RyaW5nIGRpc3BsYXlOYW1lID0gZmlsZS5nZXROYW1lKCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBtaW1lVHlwZSA9IGdldFR5cGVGb3JGaWxlKGZpbGUpOworICAgICAgICBpZiAobUFyY2hpdmVIZWxwZXIuaXNTdXBwb3J0ZWRBcmNoaXZlVHlwZShtaW1lVHlwZSkpIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IERvY3VtZW50LkZMQUdfQVJDSElWRTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIFN0cmluZyBkaXNwbGF5TmFtZSA9IGZpbGUuZ2V0TmFtZSgpOwogICAgICAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgICAgICAgIGZsYWdzIHw9IERvY3VtZW50LkZMQUdfU1VQUE9SVFNfVEhVTUJOQUlMOwogICAgICAgICB9CkBAIC0zMzMsNiArMzQwLDcgQEAKICAgICAgICAgcm93LmFkZChEb2N1bWVudC5DT0xVTU5fU0laRSwgZmlsZS5sZW5ndGgoKSk7CiAgICAgICAgIHJvdy5hZGQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgbWltZVR5cGUpOwogICAgICAgICByb3cuYWRkKERvY3VtZW50LkNPTFVNTl9GTEFHUywgZmxhZ3MpOworICAgICAgICByb3cuYWRkKERvY3VtZW50QXJjaGl2ZUhlbHBlci5DT0xVTU5fTE9DQUxfRklMRV9QQVRILCBmaWxlLmdldFBhdGgoKSk7CiAKICAgICAgICAgLy8gT25seSBwdWJsaXNoIGRhdGVzIHJlYXNvbmFibHkgYWZ0ZXIgZXBvY2gKICAgICAgICAgbG9uZyBsYXN0TW9kaWZpZWQgPSBmaWxlLmxhc3RNb2RpZmllZCgpOwpAQCAtMzYxLDYgKzM2OSwxMCBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIGlzQ2hpbGREb2N1bWVudChTdHJpbmcgcGFyZW50RG9jSWQsIFN0cmluZyBkb2NJZCkgewogICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKG1BcmNoaXZlSGVscGVyLmlzQXJjaGl2ZWREb2N1bWVudChkb2NJZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbUFyY2hpdmVIZWxwZXIuaXNDaGlsZERvY3VtZW50KHBhcmVudERvY0lkLCBkb2NJZCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZpbmFsIEZpbGUgcGFyZW50ID0gZ2V0RmlsZUZvckRvY0lkKHBhcmVudERvY0lkKS5nZXRDYW5vbmljYWxGaWxlKCk7CiAgICAgICAgICAgICBmaW5hbCBGaWxlIGRvYyA9IGdldEZpbGVGb3JEb2NJZChkb2NJZCkuZ2V0Q2Fub25pY2FsRmlsZSgpOwogICAgICAgICAgICAgcmV0dXJuIEZpbGVVdGlscy5jb250YWlucyhwYXJlbnQsIGRvYyk7CkBAIC00NjgsNiArNDgwLDEwIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEN1cnNvciBxdWVyeURvY3VtZW50KFN0cmluZyBkb2N1bWVudElkLCBTdHJpbmdbXSBwcm9qZWN0aW9uKQogICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtQXJjaGl2ZUhlbHBlci5pc0FyY2hpdmVkRG9jdW1lbnQoZG9jdW1lbnRJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtQXJjaGl2ZUhlbHBlci5xdWVyeURvY3VtZW50KGRvY3VtZW50SWQsIHByb2plY3Rpb24pOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgTWF0cml4Q3Vyc29yIHJlc3VsdCA9IG5ldyBNYXRyaXhDdXJzb3IocmVzb2x2ZURvY3VtZW50UHJvamVjdGlvbihwcm9qZWN0aW9uKSk7CiAgICAgICAgIGluY2x1ZGVGaWxlKHJlc3VsdCwgZG9jdW1lbnRJZCwgbnVsbCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC00NzcsNiArNDkzLDExIEBACiAgICAgcHVibGljIEN1cnNvciBxdWVyeUNoaWxkRG9jdW1lbnRzKAogICAgICAgICAgICAgU3RyaW5nIHBhcmVudERvY3VtZW50SWQsIFN0cmluZ1tdIHByb2plY3Rpb24sIFN0cmluZyBzb3J0T3JkZXIpCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1BcmNoaXZlSGVscGVyLmlzQXJjaGl2ZWREb2N1bWVudChwYXJlbnREb2N1bWVudElkKSB8fAorICAgICAgICAgICAgICAgIG1BcmNoaXZlSGVscGVyLmlzU3VwcG9ydGVkQXJjaGl2ZVR5cGUoZ2V0RG9jdW1lbnRUeXBlKHBhcmVudERvY3VtZW50SWQpKSkgeworICAgICAgICAgICAgcmV0dXJuIG1BcmNoaXZlSGVscGVyLnF1ZXJ5Q2hpbGREb2N1bWVudHMocGFyZW50RG9jdW1lbnRJZCwgcHJvamVjdGlvbiwgc29ydE9yZGVyKTsKKyAgICAgICAgfQorCiAgICAgICAgIGZpbmFsIEZpbGUgcGFyZW50ID0gZ2V0RmlsZUZvckRvY0lkKHBhcmVudERvY3VtZW50SWQpOwogICAgICAgICBmaW5hbCBNYXRyaXhDdXJzb3IgcmVzdWx0ID0gbmV3IERpcmVjdG9yeUN1cnNvcigKICAgICAgICAgICAgICAgICByZXNvbHZlRG9jdW1lbnRQcm9qZWN0aW9uKHByb2plY3Rpb24pLCBwYXJlbnREb2N1bWVudElkLCBwYXJlbnQpOwpAQCAtNTE0LDYgKzUzNSwxMCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFN0cmluZyBnZXREb2N1bWVudFR5cGUoU3RyaW5nIGRvY3VtZW50SWQpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICBpZiAobUFyY2hpdmVIZWxwZXIuaXNBcmNoaXZlZERvY3VtZW50KGRvY3VtZW50SWQpKSB7CisgICAgICAgICAgICByZXR1cm4gbUFyY2hpdmVIZWxwZXIuZ2V0RG9jdW1lbnRUeXBlKGRvY3VtZW50SWQpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgRmlsZSBmaWxlID0gZ2V0RmlsZUZvckRvY0lkKGRvY3VtZW50SWQpOwogICAgICAgICByZXR1cm4gZ2V0VHlwZUZvckZpbGUoZmlsZSk7CiAgICAgfQpAQCAtNTIyLDYgKzU0NywxMCBAQAogICAgIHB1YmxpYyBQYXJjZWxGaWxlRGVzY3JpcHRvciBvcGVuRG9jdW1lbnQoCiAgICAgICAgICAgICBTdHJpbmcgZG9jdW1lbnRJZCwgU3RyaW5nIG1vZGUsIENhbmNlbGxhdGlvblNpZ25hbCBzaWduYWwpCiAgICAgICAgICAgICB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG1BcmNoaXZlSGVscGVyLmlzQXJjaGl2ZWREb2N1bWVudChkb2N1bWVudElkKSkgeworICAgICAgICAgICAgcmV0dXJuIG1BcmNoaXZlSGVscGVyLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBtb2RlLCBzaWduYWwpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgRmlsZSBmaWxlID0gZ2V0RmlsZUZvckRvY0lkKGRvY3VtZW50SWQpOwogICAgICAgICBmaW5hbCBGaWxlIHZpc2libGVGaWxlID0gZ2V0RmlsZUZvckRvY0lkKGRvY3VtZW50SWQsIHRydWUpOwogCkBAIC01NTAsNiArNTc5LDEwIEBACiAgICAgcHVibGljIEFzc2V0RmlsZURlc2NyaXB0b3Igb3BlbkRvY3VtZW50VGh1bWJuYWlsKAogICAgICAgICAgICAgU3RyaW5nIGRvY3VtZW50SWQsIFBvaW50IHNpemVIaW50LCBDYW5jZWxsYXRpb25TaWduYWwgc2lnbmFsKQogICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtQXJjaGl2ZUhlbHBlci5pc0FyY2hpdmVkRG9jdW1lbnQoZG9jdW1lbnRJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBtQXJjaGl2ZUhlbHBlci5vcGVuRG9jdW1lbnRUaHVtYm5haWwoZG9jdW1lbnRJZCwgc2l6ZUhpbnQsIHNpZ25hbCk7CisgICAgICAgIH0KKwogICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBnZXRGaWxlRm9yRG9jSWQoZG9jdW1lbnRJZCk7CiAgICAgICAgIHJldHVybiBEb2N1bWVudHNDb250cmFjdC5vcGVuSW1hZ2VUaHVtYm5haWwoZmlsZSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2NjYwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSw1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IkZ1c2VkIExvY2F0aW9uIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9GdXNlZExvY2F0aW9uL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggZDdlNWZhYS4uNWM4NDZkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRnVzZWRMb2NhdGlvbi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0Z1c2VkTG9jYXRpb24vcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI1Mzc5NDc3OTA0NDIzMjAzNjk5Ij4iS29tYmluaWVydGUgU3RhbmRvcnRiZXN0aW1tdW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iNTM3OTQ3NzkwNDQyMzIwMzY5OSI+IktvbWJpbmllcnRlIFN0YW5kb3J0YmVzdC4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0lucHV0RGV2aWNlcy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE5NzdmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvSW5wdXREZXZpY2VzL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI4MDE2MTQ1MjgzMTg5NTQ2MDE3Ij4iVWxhem5pIHVyZcSRYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0c19sYWJlbCIgbXNnaWQ9IjY2ODg3NzMyNjgzMDIwODc1NDUiPiJBbmRyb2lkIHRhc3RhdHVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VrX2xhYmVsIiBtc2dpZD0iNjY2NDI1ODQ2MzMxOTk5OTYzMiI+ImVuZ2xlc2thIChVSykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZW5nbGlzaF91c19sYWJlbCIgbXNnaWQ9Ijg5OTQ4OTAyNDk2NDkxMDYyOTEiPiJlbmdsZXNrYSAoU0FEKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9lbmdsaXNoX3VzX2ludGwiIG1zZ2lkPSIzNzA1MTY4NTk0MDM0MjMzNTgzIj4iZW5nbGVza2EgKFNBRCksIG1lxJF1bmFyb2RuaSBzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfY29sZW1ha19sYWJlbCIgbXNnaWQ9IjQxOTQ5Njk2MTAzNDM0NTUzODAiPiJlbmdsZXNrYSAoU0FEKSwgQ29sZW1hayBzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfZHZvcmFrX2xhYmVsIiBtc2dpZD0iNzkzNTI4OTIzMTcxMTQ1MjAyIj4iZW5nbGVza2EgKFNBRCksIER2b3JhayBzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VuZ2xpc2hfdXNfd29ya21hbl9sYWJlbCIgbXNnaWQ9IjI5NDQ1NDE1OTUyNjIxNzMxMTEiPiJlbmdsZXNrYSAoU0FEKSwgV29ya21hbiBzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2dlcm1hbl9sYWJlbCIgbXNnaWQ9Ijg0NTE1NjU4NjU0Njc5MDk5OTkiPiJuZW1hxI1rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9mcmVuY2hfbGFiZWwiIG1zZ2lkPSI4MTM0NTAxMTk1ODkzODM3MjMiPiJmcmFuY3Vza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZnJlbmNoX2NhX2xhYmVsIiBtc2dpZD0iMzY1MzUyNjAxMDYwNjA0ODMyIj4iZnJhbmN1c2thIChLYW5hZGEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3J1c3NpYW5fbGFiZWwiIG1zZ2lkPSI4NzI0ODc5Nzc1ODE1MDQyOTY4Ij4icnVza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfcnVzc2lhbl9tYWNfbGFiZWwiIG1zZ2lkPSIzNzk1ODY2ODY5MDM4MjY0Nzk2Ij4icnVza2EsIE1hYyBzdGlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3NwYW5pc2hfbGFiZWwiIG1zZ2lkPSI3MDkxNTU1MTQ4MTMxOTA4MjQwIj4ixaFwYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3dpc3NfZnJlbmNoX2xhYmVsIiBtc2dpZD0iNDY1OTE5MTAyNTM5NjM3MTY4NCI+IsWhdmFqY2Fyc2tvIGZyYW5jdXNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zd2lzc19nZXJtYW5fbGFiZWwiIG1zZ2lkPSIyMzA1NTIwOTQxOTkzMzE0MjU4Ij4ixaF2YWpjYXJza28gbmVtYcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYmVsZ2lhbiIgbXNnaWQ9IjIwMTE5ODQ1NzI4Mzg2NTE1NTgiPiJiZWxnaWpza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYnVsZ2FyaWFuIiBtc2dpZD0iODk1MTIyNDMwOTk3MjAyODM5OCI+ImJ1Z2Fyc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2l0YWxpYW4iIG1zZ2lkPSI2NDk3MDc5NjYwNDQ5NzgxMjEzIj4iaXRhbGlqYW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZGFuaXNoIiBtc2dpZD0iODAzNjQzMjA2NjYyNzEyNzg1MSI+ImRhbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9ub3J3ZWdpYW4iIG1zZ2lkPSI5MDkwMDk3OTE3MDExMDQwOTM3Ij4ibm9ydmXFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3N3ZWRpc2giIG1zZ2lkPSI3MzI5NTkxMDkwODg0NzkzNTEiPiLFoXZlZHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9maW5uaXNoIiBtc2dpZD0iNTU4NTY1OTQzODkyNDMxNTQ2NiI+ImZpbnNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jcm9hdGlhbiIgbXNnaWQ9IjQxNzIyMjk0NzEwNzkyODExMzgiPiJocnZhdHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9jemVjaCIgbXNnaWQ9IjEzNDkyNTY5MDE0NTI5NzUzNDMiPiLEjWXFoWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2VzdG9uaWFuIiBtc2dpZD0iODc3NTgzMDk4NTE4NTY2NTI3NCI+ImVzdG9uc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2h1bmdhcmlhbiIgbXNnaWQ9IjQxNTQ5NjM2NjE0MDYwMzUxMDkiPiJtYcSRYXJza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfaWNlbGFuZGljIiBtc2dpZD0iNTgzNjY0NTY1MDkxMjQ4OTY0MiI+ImlzbGFuZHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9icmF6aWxpYW4iIG1zZ2lkPSI1MTE3ODk2NDQzMTQ3NzgxOTM5Ij4iYnJhemlsc2thIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X3BvcnR1Z3Vlc2UiIG1zZ2lkPSIyODg4MTk4NTg3MzI5NjYwMzA1Ij4icG9ydHVnYWxza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc2xvdmFrIiBtc2dpZD0iMjQ2OTM3OTkzNDY3MjgzNzI5NiI+InNsb3ZhxI1rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX2xheW91dF9zbG92ZW5pYW4iIG1zZ2lkPSIxNzM1OTMzMDI4OTI0OTgyMzY4Ij4ic2xvdmVuYcSNa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdHVya2lzaCIgbXNnaWQ9Ijc3MzYxNjMyNTA5MDc5NjQ4OTgiPiJ0dXJza2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfdWtyYWluaWFuIiBtc2dpZD0iODE3NjYzNzc0NDM4OTQ4MDQxNyI+InVrcmFqaW5za2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfYXJhYmljIiBtc2dpZD0iNTY3MTk3MDQ2NTE3NDk2ODcxMiI+ImFyYXBza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfZ3JlZWsiIG1zZ2lkPSI3Mjg5MjUzNTYwMTYyMzg2MDQwIj4iZ3LEjWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfbGF5b3V0X2hlYnJldyIgbXNnaWQ9IjcyNDE0NzM5ODU4OTAxNzM4MTIiPiJoZWJyZWpza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbGl0aHVhbmlhbiIgbXNnaWQ9IjY5NDMxMTA4NzMwNTMxMDY1MzQiPiJsaXR2YW5za2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfc3BhbmlzaF9sYXRpbiIgbXNnaWQ9IjU2OTA1Mzk4MzYwNjk1MzU2OTciPiLFoXBhbnNraSAoTGF0aW5za2EgQW1lcmlrYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9sYXlvdXRfbGF0dmlhbiIgbXNnaWQ9IjQ0MDU0MTcxNDIzMDYyNTA1OTUiPiJsZXRvbnNraSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggZWZmZjJhOC4uNDI4Yzg0MiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlZvZXIgd2VlciBkaWUga29ycmVrdGUgUFVLLWtvZGUgaW4uIEhlcmhhYWxkZSBwb2dpbmdzIHNhbCBkaWUgU0lNIHBlcm1hbmVudCBkZWFrdGl2ZWVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29kZXMgc3RlbSBuaWUgb29yZWVuIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRlIHZlZWwgcGF0cm9vbnBvZ2luZ3MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ikp5IGhldCBqb3UgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgaW5nZXRpay4gXG5cblByb2JlZXIgd2VlciBvb3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vrb25kZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ikp5IGhldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIGpvdSB3YWd3b29yZCB2ZXJrZWVyZGVsaWsgZ2V0aWsuIFxuXG5Qcm9iZWVyIHdlZXIgb29yIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla29uZGVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJKeSBoZXQgam91IG9udHNsdWl0cGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkZWxpayBnZXRla2VuLiBcblxuUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWtvbmRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJKeSBoZXQgZGllIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgdGFibGV0IHRlcnVnZ2VzdGVsIHdvcmQsIHdhdCBhbCBzeSBkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ikp5IGhldCBkaWUgZm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgZm9vbiB0ZXJ1Z2dlc3RlbCB3b3JkLCB3YXQgYWwgc3kgZGF0YSBzYWwgdWl0dmVlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSnkgaGV0IGpvdSBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIGluZ2V0aWsuIFxuXG5Qcm9iZWVyIHdlZXIgb29yIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vrb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ikp5IGhldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgam91IHdhZ3dvb3JkIHZlcmtlZXJkZWxpayBnZXRpay4gXG5cblByb2JlZXIgd2VlciBvb3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWtvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSnkgaGV0IGpvdSBvbnRzbHVpdHBhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkZWxpayBnZXRla2VuLiBcblxuUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ikp5IGhldCBkaWUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZCBwcm9iZWVyIG9udHNsdWl0LiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgdGFibGV0IHRlcnVnZ2VzdGVsIHdvcmQsIHdhdCBhbCBzeSBkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ikp5IGhldCBkaWUgZm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gb25zdWtzZXN2b2xsZSBwb2dpbmdzIHNhbCBoaWVyZGllIGZvb24gdGVydWdnZXN0ZWwgd29yZCwgd2F0IGFsIHN5IGRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iSnkgaGV0IGRpZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gSGllcmRpZSB0YWJsZXQgc2FsIHRlcnVnZ2VzdGVsIHdvcmQsIHdhdCBhbCBzeSBkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iSnkgaGV0IGRpZSBmb29uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIEhpZXJkaWUgZm9vbiBzYWwgdGVydWdnZXN0ZWwgd29yZCwgd2F0IGFsIHN5IGRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJKeSBoZXQgZGllIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgZ2VicnVpa2VyIHZlcnd5ZGVyIHdvcmQsIHdhdCBhbGxlIGdlYnJ1aWtlcmRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSnkgaGV0IGRpZSBmb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncyBzYWwgaGllcmRpZSBnZWJydWlrZXIgdmVyd3lkZXIgd29yZCwgd2F0IGFsbGUgZ2VicnVpa2VyZGF0YSBzYWwgdWl0dmVlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+Ikp5IGhldCBkaWUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZCBwcm9iZWVyIG9udHNsdWl0LiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgZ2VicnVpa2VyIHZlcnd5ZGVyIHdvcmQsIHdhdCBhbGxlIGdlYnJ1aWtlcmRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSnkgaGV0IGRpZSBmb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZCBwcm9iZWVyIG9udHNsdWl0LiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBvbnN1a3Nlc3ZvbGxlIHBvZ2luZ3Mgc2FsIGhpZXJkaWUgZ2VicnVpa2VyIHZlcnd5ZGVyIHdvcmQsIHdhdCBhbGxlIGdlYnJ1aWtlcmRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+Ikp5IGhldCBkaWUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIEhpZXJkaWUgZ2VicnVpa2VyIHNhbCB2ZXJ3eWRlciB3b3JkLCB3YXQgYWxsZSBnZWJydWlrZXJkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iSnkgaGV0IGRpZSBmb29uIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIEhpZXJkaWUgZ2VicnVpa2VyIHNhbCB2ZXJ3eWRlciB3b3JkLCB3YXQgYWxsZSBnZWJydWlrZXJkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSnkgaGV0IGRpZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciB2ZXJrZWVyZCBwcm9iZWVyIG9udHNsdWl0LiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gb25zdWtzZXN2b2xsZSBwb2dpbmdzIHNhbCBkaWUgd2Vya3Byb2ZpZWwgdmVyd3lkZXIgd29yZCwgd2F0IGFsbGUgcHJvZmllbGRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSnkgaGV0IGRpZSBmb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncyBzYWwgZGllIHdlcmtwcm9maWVsIHZlcnd5ZGVyIHdvcmQsIHdhdCBhbGxlIHByb2ZpZWxkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSnkgaGV0IGRpZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncyBzYWwgZGllIHdlcmtwcm9maWVsIHZlcnd5ZGVyIHdvcmQsIHdhdCBhbGxlIHByb2ZpZWxkYXRhIHNhbCB1aXR2ZWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ikp5IGhldCBkaWUgZm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gTmEgbm9nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gb25zdWtzZXN2b2xsZSBwb2dpbmdzIHNhbCBkaWUgd2Vya3Byb2ZpZWwgdmVyd3lkZXIgd29yZCwgd2F0IGFsbGUgcHJvZmllbGRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+Ikp5IGhldCBkaWUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkIHByb2JlZXIgb250c2x1aXQuIERpZSB3ZXJrcHJvZmllbCBzYWwgdmVyd3lkZXIgd29yZCwgd2F0IGFsbGUgcHJvZmllbGRhdGEgc2FsIHVpdHZlZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJKeSBoZXQgZGllIGZvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmQgcHJvYmVlciBvbnRzbHVpdC4gRGllIHdlcmtwcm9maWVsIHNhbCB2ZXJ3eWRlciB3b3JkLCB3YXQgYWxsZSBwcm9maWVsZGF0YSBzYWwgdWl0dmVlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKeSBoZXQgam91IG9udHNsdWl0cGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkZWxpayBnZXRla2VuLiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gb25zdWtzZXN2b2xsZSBwb2dpbmdzLCBzYWwgankgZ2V2cmEgd29yZCBvbSBqb3UgdGFibGV0IHRlIG9udHNsdWl0IGRldXIgbWlkZGVsIHZhbiBcJ24gZS1wb3NyZWtlbmluZy5cblxuIFByb2JlZXIgd2VlciBvb3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vrb25kZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKeSBoZXQgam91IG9udHNsdWl0cGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIHZlcmtlZXJkZWxpayBnZXRla2VuLiBOYSBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gb25zdWtzZXN2b2xsZSBwb2dpbmdzLCBzYWwgankgZ2V2cmEgd29yZCBvbSBqb3UgZm9vbiB0ZSBvbnRzbHVpdCBkZXVyIG1pZGRlbCB2YW4gXCduIGUtcG9zcmVrZW5pbmcuXG5cbiBQcm9iZWVyIHdlZXIgb29yIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKeSBoZXQgam91IG9udHNsdWl0cGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmRlbGlrIGdldGVrZW4uIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncywgc2FsIGp5IGdldnJhIHdvcmQgb20gam91IHRhYmxldCB0ZSBvbnRzbHVpdCBkZXVyIG1pZGRlbCB2YW4gXCduIGUtcG9zcmVrZW5pbmcuXG5cbiBQcm9iZWVyIHdlZXIgb29yIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2Vrb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKeSBoZXQgam91IG9udHNsdWl0cGF0cm9vbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgdmVya2VlcmRlbGlrIGdldGVrZW4uIE5hIG5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG9uc3Vrc2Vzdm9sbGUgcG9naW5ncywgc2FsIGp5IGdldnJhIHdvcmQgb20gam91IGZvb24gdGUgb250c2x1aXQgZGV1ciBtaWRkZWwgdmFuIFwnbiBlLXBvc3Jla2VuaW5nLlxuXG4gUHJvYmVlciB3ZWVyIG9vciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla29uZGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmVya2VlcmRlIFNJTSBQSU4ta29kZSwgankgc2FsIG5vdSBqb3UgZGllbnN2ZXJza2FmZmVyIG1vZXQga29udGFrIG9tIGpvdSB0b2VzdGVsIHRlIG9udHNsdWl0LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5WZXJrZWVyZGUgU0lNLVBJTi1rb2RlLiBKeSBoZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9naW5ncyBvb3IuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggMjRmODdlZC4uZTA1MjBiMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuGJteGKreGKreGIiOGKm+GLjeGKlSDhi6hQVUsg4Yqu4Yu1IOGKpeGKleGLsOGMiOGKkyDhi6vhiLXhjIjhiaHhjaIg4Ymw4Yuw4YyL4YyL4YiaIOGImeGKqOGIq+GLjuGJvSDhiLLhiJ0g4Yqr4Yit4Yux4YqVIOGKpeGIteGKqOGImOGMqOGIqOGIu+GLjSDhi6vhiLDhipPhiq3hiInhibPhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4Y2S4YqVIOGKruGLtuGJvSDhiqDhi63hjIjhjKPhjKDhiJnhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLhiaDhjKPhiJ0g4Yml4YuZIOGLqOGIteGIreGLk+GJsCDhjKXhiIjhibUg4YiZ4Yqo4Yir4YuO4Ym9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLhjZLhipXhi47hipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hibDhi6jhiaHhiJ3hjaIgXG5cbuGJoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGIsOGKruGKleGLtuGJvSDhi43hiLXhjKUg4Yql4YqV4Yuw4YyI4YqTIOGLreGInuGKreGIqeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLhi6jhi63hiIjhjY0g4YmD4YiN4YuO4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGKleGMiOGLtSDhibDhi63hiaDhi4vhiI3hjaJcblxu4YmgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Yiw4Yqu4YqV4Yu24Ym9IOGLjeGIteGMpSDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4Yip4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuGLqOGImOGKreGNiOGJuyDhiLXhiK3hi5PhibAg4Yyl4YiI4Ym14YuO4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhiaDhibXhiq3hiq3hiI0g4Yqg4YiN4Yiz4YiJ4Ym14Yid4Y2iIFxuXG4g4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Yiw4Yqo4YqV4Yu24Ym9IOGJoOGKi+GIiyDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4Yip4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4Yyh4Ymj4YuK4YuN4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiDhi6vhiI3hibDhiLPhiqkg4YiZ4Yqo4Yir4YuO4Ym9IOGJoOGKi+GIiyDhi63hiIUg4Yi14YiN4YqtIOGLs+GMjeGInSDhi63hjIDhiJjhiKvhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi43hiILhiaHhipUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuGIteGIjeGKqeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yut4YiFIOGIteGIjeGKrSDhi7PhjI3hiJ0g4Yut4YyA4YiY4Yir4YiN4Y2jIOGLreGIheGInSDhiIHhiInhipXhiJ0g4YuN4YiC4Ymh4YqVIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4Y2S4YqV4YuO4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hibDhi6jhiaHhiJ3hjaIgXG5cbuGJoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Yiw4Yqu4YqV4Yu24Ym9IOGLjeGIteGMpSDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4Yip4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuGLqOGLreGIiOGNjSDhiYPhiI3hi47hipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhipXhjIjhi7Ug4Ymw4Yut4Ymg4YuL4YiN4Y2iXG5cbuGJoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Yiw4Yqu4YqV4Yu24Ym9IOGLjeGIteGMpSDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4Yip4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuGLqOGImOGKreGNiOGJuyDhiLXhiK3hi5PhibAg4Yyl4YiI4Ym14YuO4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hiLPhiInhibXhiJ3hjaIgXG5cbiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGIsOGKqOGKleGLtuGJvSDhiaDhiovhiIsg4Yql4YqV4Yuw4YyI4YqTIOGLreGInuGKreGIqeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGMoeGJo+GLiuGLjeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLreGIhSDhiLXhiI3hiq0g4Yuz4YyN4YidIOGLreGMgOGImOGIq+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLjeGIguGJoeGKlSDhi63hiLDhiK3hi5vhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4Yi14YiN4Yqp4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YyK4YucIOGJteGKreGKreGIjSDhiaPhiI3hiIbhipAg4YiY4YiN4YqpIOGIiOGIm+GIteGKqOGNiOGJtSDhiJ7hiq3hiKjhi4vhiI3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yut4YiFIOGIteGIjeGKrSDhi7PhjI3hiJ0g4Yut4YyA4YiY4Yir4YiN4Y2jIOGLreGIheGInSDhiIHhiInhipXhiJ0g4YuN4YiC4Ymh4YqVIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLhjKHhiaPhi4rhi43hipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGIgeGKlOGJsyDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGIteGIjeGKqSDhi7PhjI3hiJ0g4Yut4YyA4YiY4Yir4YiN4Y2jIOGLreGIheGInSDhiIHhiInhipXhiJ0g4YuN4YiC4Ymh4YqVIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuGIteGIjeGKqeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YyK4YucIOGJteGKreGKreGIjSDhiaPhiI3hiIbhipAg4YiB4YqU4YmzIOGIiOGIm+GIteGKqOGNiOGJtSDhiJ7hiq3hiKjhi4vhiI3hjaIg4Yi14YiN4YqpIOGLs+GMjeGInSDhi63hjIDhiJjhiKvhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi43hiILhiaHhipUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4Yyh4Ymj4YuK4YuN4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiDhi6vhiI3hibDhiLPhiqkg4YiZ4Yqo4Yir4YuO4Ym9IOGJoOGKi+GIiyDhi63hiIUg4Ymw4Yyg4YmD4YiaIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGJsOGMoOGJg+GImiDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuGIteGIjeGKqeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yut4YiFIOGJsOGMoOGJg+GImiDhi63hi4jhjIjhi7PhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi6jhibDhjKDhiYPhiJog4YuN4YiC4YmlIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuGMoeGJo+GLiuGLjeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLreGIhSDhibDhjKDhiYPhiJog4Yut4YuI4YyI4Yuz4YiN4Y2jIOGLreGIheGInSDhiIHhiInhipXhiJ0g4Yuo4Ymw4Yyg4YmD4YiaIOGLjeGIguGJpSDhi63hiLDhiK3hi5vhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4Yi14YiN4Yqp4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YyK4YucIOGJteGKreGKreGIjSDhiaPhiI3hiIbhipAg4YiY4YiN4YqpIOGIiOGIm+GIteGKqOGNiOGJtSDhiJ7hiq3hiKjhi4vhiI3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yut4YiFIOGJsOGMoOGJg+GImiDhi63hi4jhjIjhi7PhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi6jhibDhjKDhiYPhiJog4YuN4YiC4YmlIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4Yyh4Ymj4YuK4YuN4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhi63hiIUg4Ymw4Yyg4YmD4YiaIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGJsOGMoOGJg+GImiDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4Yi14YiN4Yqp4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhi63hiIUg4Ymw4Yyg4YmD4YiaIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGJsOGMoOGJg+GImiDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4Yyh4Ymj4YuK4YuN4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiDhi6vhiI3hibDhiLPhiqkg4YiZ4Yqo4Yir4YuO4Ym9IOGJoOGKi+GIiyDhi6jhiLXhiKsg4YiY4YyI4YiI4Yyr4YuNIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGImOGMiOGIiOGMqyDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuGIteGIjeGKqeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yuo4Yi14YirIOGImOGMiOGIiOGMq+GLjSDhi63hi4jhjIjhi7PhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi6jhiJjhjIjhiIjhjKsg4YuN4YiC4YmlIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuGMoeGJo+GLiuGLjeGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGMiuGLnCDhibXhiq3hiq3hiI0g4Ymj4YiN4YiG4YqQIOGImOGIjeGKqSDhiIjhiJvhiLXhiqjhjYjhibUg4Yie4Yqt4Yio4YuL4YiN4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLqOGIteGIqyDhiJjhjIjhiIjhjKvhi40g4Yut4YuI4YyI4Yuz4YiN4Y2jIOGLreGIheGInSDhiIHhiInhipXhiJ0g4Yuo4YiY4YyI4YiI4YyrIOGLjeGIguGJpSDhi63hiLDhiK3hi5vhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4Yi14YiN4Yqp4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YyK4YucIOGJteGKreGKreGIjSDhiaPhiI3hiIbhipAg4YiY4YiN4YqpIOGIiOGIm+GIteGKqOGNiOGJtSDhiJ7hiq3hiKjhi4vhiI3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhibDhjKjhiJvhiKog4Yur4YiN4Ymw4Yiz4YqpIOGImeGKqOGIq+GLjuGJvSDhiaDhiovhiIsg4Yuo4Yi14YirIOGImOGMiOGIiOGMq+GLjSDhi63hi4jhjIjhi7PhiI3hjaMg4Yut4YiF4YidIOGIgeGIieGKleGInSDhi6jhiJjhjIjhiIjhjKsg4YuN4YiC4YmlIOGLreGIsOGIreGLm+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4Yyh4Ymj4YuK4YuN4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhi6jhiLXhiKsg4YiY4YyI4YiI4Yyr4YuNIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGImOGMiOGIiOGMqyDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i4Yi14YiN4Yqp4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhjIrhi5wg4Ym14Yqt4Yqt4YiNIOGJo+GIjeGIhuGKkCDhiJjhiI3hiqkg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGInuGKreGIqOGLi+GIjeGNoiDhi6jhiLXhiKsg4YiY4YyI4YiI4Yyr4YuNIOGLreGLiOGMiOGLs+GIjeGNoyDhi63hiIXhiJ0g4YiB4YiJ4YqV4YidIOGLqOGImOGMiOGIiOGMqyDhi43hiILhiaUg4Yut4Yiw4Yit4Yub4YiN4Y2iIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuGLqOGImOGKreGNiOGJuyDhiLXhiK3hi5PhibAg4Yyl4YiI4Ymx4YqVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGMiuGLnCDhiaDhibXhiq3hiq3hiI0g4Yqg4YiN4Yiz4YiJ4Ym14Yid4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiDhi6vhiI3hibDhiLPhiqkg4YiZ4Yqo4Yir4YuO4Ym9IOGJoOGKi+GIiyDhi6jhiqLhiJzhi63hiI0g4YiY4YiI4YurIOGJsOGMoOGJheGImOGLjSDhjKHhiaPhi4og4Ymx4Yqu4YuO4YqVIOGKpeGKleGLsuGKqOGNjeGJsSDhi63hjKDhi6jhiYPhiInhjaJcblxuIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGKqOGIsOGKqOGKleGLtuGJvSDhiaDhiovhiIsg4Yql4YqV4Yuw4YyI4YqTIOGLreGInuGKreGIqeGNoiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Yuo4YiY4Yqt4Y2I4Ym7IOGIteGIreGLk+GJsCDhjKXhiIjhibHhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YyK4YucIOGJoOGJteGKreGKreGIjSDhiqDhiI3hiLPhiInhibXhiJ3hjaIg4YqoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLqOGKouGInOGLreGIjSDhiJjhiIjhi6sg4Ymw4Yyg4YmF4YiY4YuNIOGIteGIjeGKreGLjuGKlSDhiqXhipXhi7LhiqjhjY3hibEg4Yut4Yyg4Yuo4YmD4YiJ4Y2iXG5cbuGKpeGJo+GKreGLjiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhiLDhiqjhipXhi7bhib0g4Ymg4YqL4YiLIOGKpeGKleGLsOGMiOGKkyDhi63hiJ7hiq3hiKnhjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4Yuo4YiY4Yqt4Y2I4Ym7IOGIteGIreGLk+GJsCDhjKXhiIjhibHhipUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhjIrhi5wg4Ymg4Ym14Yqt4Yqt4YiNIOGKoOGIjeGIs+GIieGJteGIneGNoiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiDhi6vhiI3hibDhiLPhiqkg4YiZ4Yqo4Yir4YuO4Ym9IOGJoOGKi+GIiyDhi6jhiqLhiJzhi63hiI0g4YiY4YiI4YurIOGJsOGMoOGJheGImOGLjSDhjKHhiaPhi4og4Ymx4Yqu4YuO4YqVIOGKpeGKleGLsuGKqOGNjeGJsSDhi63hjKDhi6jhiYPhiInhjaJcblxuIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Yqo4Yiw4Yqo4YqV4Yu24Ym9IOGJoOGKi+GIiyDhiqXhipXhi7DhjIjhipMg4Yut4Yie4Yqt4Yip4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLhi6jhiJjhiq3hjYjhibsg4Yi14Yit4YuT4YmwIOGMpeGIiOGJseGKlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGMiuGLnCDhiaDhibXhiq3hiq3hiI0g4Yqg4YiN4Yiz4YiJ4Ym14Yid4Y2iIOGKqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ymw4Yyo4Yib4YiqIOGLq+GIjeGJsOGIs+GKqSDhiJnhiqjhiKvhi47hib0g4Ymg4YqL4YiLIOGLqOGKouGInOGLreGIjSDhiJjhiIjhi6sg4Ymw4Yyg4YmF4YiY4YuNIOGIteGIjeGKreGLjuGKlSDhiqXhipXhi7LhiqjhjY3hibEg4Yut4Yyg4Yuo4YmD4YiJ4Y2iXG5cbuGKpeGJo+GKreGLjiDhiqg8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOGIsOGKqOGKleGLtuGJvSDhiaDhiovhiIsg4Yql4YqV4Yuw4YyI4YqTIOGLreGInuGKreGIqeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4YiN4YqtIOGLq+GIjeGIhuGKkCDhi6jhiLLhiJ0g4Yqu4Yu14Y2iIOGKoOGIgeGKlSDhiJjhiLPhiKrhi6vhi47hipUg4YiI4Yib4Yi14Yqo4Y2I4Ym1IOGLteGIneGMuCDhibDhi6vhi6vhi6Ug4Yie4Yuw4Yid4YuO4YqVIOGIm+GMjeGKmOGJtSDhiqDhiIjhiaXhi47hjaIiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuGIjeGKrSDhi6vhiI3hiIbhipAg4Yuo4Yiy4YidIOGNkuGKlSDhiq7hi7XhjaMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YiZ4Yqo4Yir4YuO4Ym9IOGLreGJgOGIreGLjuGJs+GIjeGNojwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IGIzMjYyMzguLmMyZGI1NTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLigI/Yo9i52K8g2KXYr9iu2KfZhCDYsdmF2LIgUFVLINin2YTYtdit2YrYrS4g2YjYs9iq2KTYr9mKINin2YTZhdit2KfZiNmE2KfYqiDYp9mE2YXYqtmD2LHYsdipINil2YTZiSDYqti52LfZitmEINi02LHZitit2KkgU0lNINmG2YfYp9im2YrZi9inLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLigI/ZhNinINmK2KrYt9in2KjZgiDYsdmF2LLYpyDYsdmF2LIgUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i2YXYrdin2YjZhNin2Kog2KfZhNmG2YLYtCDZg9ir2YrYsdipINis2K/Zi9inIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2YTZgtivINmD2KrYqNiqINmD2YTZhdipINin2YTZhdix2YjYsSDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KvYp9mG2YrYqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LfYsdmK2YLYqSDYutmK2LEg2LXYrdmK2K3YqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2YfYsNinINin2YTYrNmH2KfYsiDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2KrZhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYudin2K/YqSDYqti52YrZitmGINmH2LDYpyDYp9mE2YfYp9iq2YEg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iq2YcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/ZhNmC2K8g2YPYqtio2Kog2LHZhdiyIFBJTiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDZhdix2KkuIFxuXG7Yo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItmE2YLYryDZg9iq2KjYqiDZg9mE2YXYqSDYp9mE2YXYsdmI2LEg2KjYtNmD2YQg2LrZitixINi12K3ZititIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLZhNmC2K8g2LHYs9mF2Kog2YbZgti0INil2YTYutin2KEg2KfZhNiq2KPZhdmK2YYg2KjYt9ix2YrZgtipINi62YrYsSDYtdit2YrYrdipIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2YXYsdipLiBcblxu2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYudin2K/YqSDYqti52YrZitmGINmH2LDYpyDYp9mE2KzZh9in2LIg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iq2YcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNmH2KfYqtmBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2YfYsNinINin2YTZh9in2KrZgSDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2KrZhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2LPYqtiq2YUg2KXYudin2K/YqSDYqti52YrZitmGINmH2LDYpyDYp9mE2KzZh9in2LIg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iq2YcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2YfYsNinINin2YTZh9in2KrZgSDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2KrZhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLYo9iu2LfYo9iqINmB2Yog2YXYrdin2YjZhNipINil2YTYutin2KEg2YLZgdmEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2LPYqtiu2K/ZhSDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYstin2YTYqSDZh9iw2Kcg2KfZhNmF2LPYqtiu2K/ZhSDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2LPYqtiu2K/ZhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLYo9iu2LfYo9iqINmB2Yog2YXYrdin2YjZhNipINil2YTYutin2KEg2YLZgdmEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrYqtmFINil2LLYp9mE2Kkg2YfYsNinINin2YTZhdiz2KrYrtiv2YUg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iqINin2YTZhdiz2KrYrtiv2YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNmH2KfYqtmBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYsdin2KouINio2LnYryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdiy2KfZhNipINmH2LDYpyDYp9mE2YXYs9iq2K7Yr9mFINmI2KfZhNiq2Yog2KjYr9mI2LHZh9inINiq2K3YsNmBINis2YXZiti5INio2YrYp9mG2KfYqiDYp9mE2YXYs9iq2K7Yr9mFLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmKIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2LPYqtiq2YUg2KXYstin2YTYqSDYp9mE2YXYs9iq2K7Yr9mFINmI2KfZhNiq2Yog2KjYr9mI2LHZh9inINiq2K3YsNmBINis2YXZiti5INio2YrYp9mG2KfYqtmHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNmH2KfYqtmBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2LPYqtiq2YUg2KXYstin2YTYqSDYp9mE2YXYs9iq2K7Yr9mFINmI2KfZhNiq2Yog2KjYr9mI2LHZh9inINiq2K3YsNmBINis2YXZiti5INio2YrYp9mG2KfYqtmHLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdiy2KfZhNipINin2YTZhdmE2YEg2KfZhNi02K7YtdmKINmE2YTYudmF2YQg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iqINin2YTZhdmE2YEg2KfZhNi02K7YtdmKLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLYo9iu2LfYo9iqINmB2Yog2YXYrdin2YjZhNipINil2YTYutin2KEg2YLZgdmEINin2YTZh9in2KrZgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2KrZhSDYpdiy2KfZhNipINin2YTZhdmE2YEg2KfZhNi02K7YtdmKINmE2YTYudmF2YQg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iqINin2YTZhdmE2YEg2KfZhNi02K7YtdmKLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Itij2K7Yt9ij2Kog2YHZiiDZhdit2KfZiNmE2Kkg2KXZhNi62KfYoSDZgtmB2YQg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYqNi52K8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtiq2YUg2KXYstin2YTYqSDYp9mE2YXZhNmBINin2YTYtNiu2LXZiiDZhNmE2LnZhdmEINmI2KfZhNiq2Yog2KjYr9mI2LHZh9inINiq2K3YsNmBINis2YXZiti5INio2YrYp9mG2KfYqiDYp9mE2YXZhNmBINin2YTYtNiu2LXZii4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDZhdmGINin2YTZhdix2KfYqi4g2KjYudivIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrYqtmFINil2LLYp9mE2Kkg2KfZhNmF2YTZgSDYp9mE2LTYrti12Yog2YTZhNi52YXZhCDZiNin2YTYqtmKINio2K/ZiNix2YfYpyDYqtit2LDZgSDYrNmF2YrYuSDYqNmK2KfZhtin2Kog2KfZhNmF2YTZgSDYp9mE2LTYrti12YouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLYo9iu2LfYo9iqINmB2Yog2YXYrdin2YjZhNipINil2YTYutin2KEg2YLZgdmEINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2YogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYs9iq2KrZhSDYpdiy2KfZhNipINin2YTZhdmE2YEg2KfZhNi02K7YtdmKINmE2YTYudmF2YQg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iq2YcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i2KPYrti32KPYqiDZgdmKINmF2K3Yp9mI2YTYqSDYpdmE2LrYp9ihINmC2YHZhCDYp9mE2YfYp9iq2YEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2LHYp9iqLiDYs9iq2KrZhSDYpdiy2KfZhNipINin2YTZhdmE2YEg2KfZhNi02K7YtdmKINmE2YTYudmF2YQg2YjYp9mE2KrZiiDYqNiv2YjYsdmH2Kcg2KrYrdiw2YEg2KzZhdmK2Lkg2KjZitin2YbYp9iq2YcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2YXYsdipLiDYqNi52K8g2KXYrNix2KfYoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqti32KfZhNmO2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNis2YfYp9iyINin2YTZhNmI2K3ZiiDYqNin2LPYqtiu2K/Yp9mFINmF2LnZhNmI2YXYp9iqINit2LPYp9ioINio2LHZitivINil2YTZg9iq2LHZiNmG2YouXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryDYpdis2LHYp9ihIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2YYg2KfZhNmF2K3Yp9mI2YTYp9iqINi62YrYsSDYp9mE2YbYp9is2K3YqSDYp9mE2KPYrtix2YnYjCDYs9iq2Y/Yt9in2YTYqCDYqNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEg2KjYp9iz2KrYrtiv2KfZhSDYrdiz2KfYqCDYqNix2YrYryDYpdmE2YPYqtix2YjZhtmKINmE2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTZh9in2KrZgS5cblxuINij2LnYryDYp9mE2YXYrdin2YjZhNipINiu2YTYp9mEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItmE2YLYryDYsdiz2YXYqiDZhtmC2LQg2KXZhNi62KfYoSDYp9mE2KrYo9mF2YrZhiDYqNi02YPZhCDYutmK2LEg2LXYrdmK2K0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDZhdix2KkuINio2LnYryDYpdis2LHYp9ihIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2YXZhiDYp9mE2YXYrdin2YjZhNin2Kog2LrZitixINin2YTZhtin2KzYrdipINin2YTYo9iu2LHZidiMINiz2KrYt9in2YTZjtioINio2KXZhNi62KfYoSDYqtij2YXZitmGINin2YTYrNmH2KfYsiDYp9mE2YTZiNit2Yog2KjYp9iz2KrYrtiv2KfZhSDZhdi52YTZiNmF2KfYqiDYrdiz2KfYqCDYqNix2YrYryDYpdmE2YPYqtix2YjZhtmKLlxuXG4g2KPYudivINin2YTZhdit2KfZiNmE2Kkg2K7ZhNin2YQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDYq9in2YbZitipLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i2YTZgtivINix2LPZhdiqINmG2YLYtCDYpdmE2LrYp9ihINin2YTYqtij2YXZitmGINio2LTZg9mEINi62YrYsSDYtdit2YrYrSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INmF2LHYqS4g2KjYudivINil2KzYsdin2KEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDZhdmGINin2YTZhdit2KfZiNmE2KfYqiDYutmK2LEg2KfZhNmG2KfYrNit2Kkg2KfZhNij2K7YsdmJ2Iwg2LPYqtmP2LfYp9mE2Kgg2KjYpdmE2LrYp9ihINiq2KPZhdmK2YYg2KfZhNmH2KfYqtmBINio2KfYs9iq2K7Yr9in2YUg2K3Ys9in2Kgg2KjYsdmK2K8g2KXZhNmD2KrYsdmI2YbZiiDZhNil2YTYutin2KEg2KrYo9mF2YrZhiDYp9mE2YfYp9iq2YEuXG5cbiDYo9i52K8g2KfZhNmF2K3Yp9mI2YTYqSDYrtmE2KfZhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INir2KfZhtmK2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLigI/YsdmF2LIgXCLYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKXCIg2YTYqNi32KfZgtipIFNJTSDYutmK2LEg2LXYrdmK2K3YjCDZiNmK2YTYstmF2YMg2KfZhNin2KrYtdin2YQg2KfZhNii2YYg2KjZhdi02LrZkdmEINi02KjZg9ipINin2YTYrNmI2ZHYp9mEINmE2KXZhNi62KfYoSDZgtmB2YQg2KfZhNis2YfYp9iyLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Inplcm8iPuKAj9ix2YXYsiDYsdmC2YUg2KfZhNiq2LnYsdmK2YEg2KfZhNi02K7YtdmKINmE2KjYt9in2YLYqSBTSU0g2LrZitixINi12K3Zitit2Iwg2YjZhNmFINiq2KrYqNmCINmE2K/ZitmDINij2YrYqSDZhdit2KfZiNmE2KfYqiAoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKaW5kZXggNmUzMzZiZS4uNTc1ZDAzNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRMO8emfDvG4gUFVLIGtvZHUgeWVuaWTJmW4gZGF4aWwgZWRpbi4gVMmZa3JhcmxhbmFuIGPJmWhkbMmZciBTSU1cJ2kgYmlyZMmZZsmZbGlrIHPEsXJhZGFuIMOnxLF4YXJhY2FxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ga29kbGFyxLEgdXnEn3VuIGRleWlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iSMmZZGRpbmTJmW4gw6dveCBjyZloZCBlZGlsZGkhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4ga29kdW51enUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4ixZ5pZnLJmW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJNb2RlbGluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyDDp8mZa21pc2luaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiB5b3hsYXnEsW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBEYWhhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBidSBwbGFuxZ9ldCBpbGtpbiB2yZl6aXl5yZl0aW7JmSBiyZlycGEgb2x1bmFjYXEgdsmZIG9uZGFrxLEgYsO8dMO8biBtyZlsdW1hdGxhciBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iU2l6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB0ZWxlZm9udW51enVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBEYWhhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBidSB0ZWxlZm9uIGlsa2luIHbJmXppeXnJmXRpbsmZIGLJmXJwYSBvbHVuYWNhcSB2yZkgb25kYWvEsSBiw7x0w7xuIG3JmWx1bWF0bGFyIHNpbGluyZljyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0ZGluaXouXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIHlveGxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLFnmlmcsmZbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldGRpbml6LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJNb2RlbGluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIMOnyZlrbWlzaW5pei5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgeWVuaWTJmW4geW94bGF5xLFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iU2l6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBEYWhhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIGJ1IHBsYW7Fn2V0IGlsa2luIHbJmXppeXnJmXRpbsmZIGLJmXJwYSBvbHVuYWNhcSB2yZkgb25kYWvEsSBiw7x0w7xuIG3JmWx1bWF0bGFyIHNpbGluyZljyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBkyZlmyZkgdGVsZWZvbnVudXp1biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gRGFoYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBidSB0ZWxlZm9uIGlsa2luIHbJmXppeXnJmXRpbsmZIGLJmXJwYSBvbHVuYWNhcSB2yZkgb25kYWvEsSBiw7x0w7xuIG3JmWx1bWF0bGFyIHNpbGluyZljyZlrZGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gQnUgcGxhbsWfZXQgaWxraW4gdsmZeml5ecmZdGluyZkgYsmZcnBhIG9sdW5hY2FxIHbJmSBvbmRha8SxIGLDvHTDvG4gbcmZbHVtYXRsYXIgc2lsaW7JmWPJmWtkaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iU2l6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBkyZlmyZkgdGVsZWZvbnVudXp1biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gQnUgdGVsZWZvbiBpbGtpbiB2yZl6aXl5yZl0aW7JmSBiyZlycGEgb2x1bmFjYXEgdsmZIG9uZGFrxLEgYsO8dMO8biBtyZlsdW1hdGxhciBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBEYWhhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBiw7x0w7xuIGlzdGlmYWTJmcOnaSBtyZlsdW1hdGxhcsSxbsSxIHNpbMmZY8mZayBidSBpc3RpZmFkyZnDp2kgc2lsaW7JmWPJmWtkaXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdGVsZWZvbnVudXp1biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gRGFoYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgYsO8dMO8biBpc3RpZmFkyZnDp2kgbcmZbHVtYXRsYXLEsW7EsSBzaWzJmWPJmWsgYnUgaXN0aWZhZMmZw6dpIHNpbGluyZljyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gRGFoYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBiw7x0w7xuIGlzdGlmYWTJmcOnaSBtyZlsdW1hdGxhcsSxbsSxIHNpbMmZY8mZayBidSBpc3RpZmFkyZnDp2kgc2lsaW7JmWPJmWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSB0ZWxlZm9udW51enVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBEYWhhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIGLDvHTDvG4gaXN0aWZhZMmZw6dpIG3JmWx1bWF0bGFyxLFuxLEgc2lsyZljyZlrIGJ1IGlzdGlmYWTJmcOnaSBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBCdSBpc3RpZmFkyZnDp2kgdsmZIGlzdGlmYWTJmcOnaSBpbMmZIGJhxJ9sxLEgYsO8dMO8biBtyZlsdW1hdGxhciBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB0ZWxlZm9udW51enVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBCdSBpc3RpZmFkyZnDp2kgdsmZIGlzdGlmYWTJmcOnaSBpbMmZIGJhxJ9sxLEgYsO8dMO8biBtyZlsdW1hdGxhciBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgYsO8dMO8biBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsSBzaWzJmWPJmWsgacWfIHByb2ZpbGkgc2lsaW7JmWPJmWtkaXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgdGVsZWZvbnVudXp1biBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdcSfdXJzdXogY8mZaGRkyZluIHNvbnJhIGLDvHTDvG4gcHJvZmlsIG3JmWx1bWF0bGFyxLFuxLEgc2lsyZljyZlrIGnFnyBwcm9maWxpIHNpbGluyZljyZlrZGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSBwbGFuxZ9ldGluaXppbiBraWxpZGluaSBhw6dtYXEgw7zDp8O8biB5YW5sxLHFnyBjyZloZGzJmXIgZXRkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgYsO8dMO8biBwcm9maWwgbcmZbHVtYXRsYXLEsW7EsSBzaWzJmWPJmWsgacWfIHByb2ZpbGkgc2lsaW7JmWPJmWtkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSB0ZWxlZm9udW51enVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHXEn3Vyc3V6IGPJmWhkZMmZbiBzb25yYSBiw7x0w7xuIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxIHNpbMmZY8mZayBpxZ8gcHJvZmlsaSBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlNpeiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHBsYW7Fn2V0aW5pemluIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBCw7x0w7xuIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxesSxIHNpbMmZY8mZayBpxZ8gcHJvZmlsaSBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJTaXogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGTJmWbJmSB0ZWxlZm9udW51enVuIGtpbGlkaW5pIGHDp21hcSDDvMOnw7xuIHlhbmzEscWfIGPJmWhkbMmZciBldGRpbml6LiBCw7x0w7xuIHByb2ZpbCBtyZlsdW1hdGxhcsSxbsSxesSxIHNpbMmZY8mZayBpxZ8gcHJvZmlsaSBzaWxpbsmZY8mZa2Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2l6IGtpbGlkaSBhw6dtYXEgw7zDp8O8biDFn2FibG9udSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBkyZlmyZkgc8mZaHYgw6fJmWtkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbml6aW4ga2lsaWRpbmkgZS1wb8OndCBoZXNhYsSxbsSxemxhIGHDp21hcSB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2FuaXnJmSDJmXJ6aW5kyZkgYmlyIGRhaGEgeW94bGF5xLFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iU2l6IGFydMSxcSBtb2RlbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZMmZZsmZIHlhbmzEscWfIGRheGlsIGV0bWlzaW5pei48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHlhbmzEscWfIGRheGlsIGV0c8mZbml6LCB0ZWxlZm9udW4ga2lsaWRpbmluIGHDp8SxbG1hc8SxIMO8w6fDvG4gZWxla3Ryb24gcG/Dp3Qgw7xudmFuxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSB5ZW5pZMmZbiBjyZloZCBlZGluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXoga2lsaWRpIGHDp21hcSDDvMOnw7xuIMWfYWJsb251IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZMmZZsmZIHPJmWh2IMOnyZlrZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZGFoYSB1xJ91cnN1eiBjyZloZGTJmW4gc29ucmEgcGxhbsWfZXRpbml6aW4ga2lsaWRpbmkgZS1wb8OndCBoZXNhYsSxbsSxemxhIGHDp21hcSB0yZlsyZliIG9sdW5hY2FxLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzYW5pecmZIMmZcnppbmTJmSBiaXIgZGFoYSB5b3hsYXnEsW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaXogYXJ0xLFxIG1vZGVsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGTJmWbJmSB5YW5sxLHFnyBkYXhpbCBldG1pc2luaXouPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkyZlmyZkgZMmZIHlhbmzEscWfIGRheGlsIGV0c8mZbml6LCB0ZWxlZm9udW4ga2lsaWRpbmluIGHDp8SxbG1hc8SxIMO8w6fDvG4gZWxla3Ryb24gcG/Dp3Qgw7xudmFuxLFuxLF6IHTJmWzJmWIgb2x1bmFjYXEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNhbml5yZkgyZlyemluZMmZIHllbmlkyZluIGPJmWhkIGVkaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJZYW5sxLHFnyBTSU0gUElOIGtvZHXCoCBjaWhhesSxbsSxesSxbiBhw6fEsWxtYXPEsSDDvMOnw7xuIG9wZXJhdG9ydW51emxhIGluZGkgyZlsYXHJmSBzYXhsYW1hbMSxc8SxbsSxei4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+WWFubMSxxZ8gU0lNIFBJTiBrb2R1LCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBjyZloZGluaXogcWFsxLFyLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2YmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMTQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qIC8vZGV2aWNlL2FwcHMvY29tbW9uL2Fzc2V0cy9yZXMvYW55L3N0cmluZ3MueG1sCisqKgorKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiBtc2dpZD0iNzE5NDM4MDY4NDUxNjAxODQ5Ij4iWmHFoXRpdGEgdGFzdGVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9jb2RlIiBtc2dpZD0iMzAzNzY4NTc5NjA1ODQ5NTAxNyI+IlVuZXNpdGUgUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfY29kZSIgbXNnaWQ9IjMwMzU4NTY1NTAyODk3MjQzMzgiPiJVbmVzaXRlIFNJTSBQVUsga8O0ZCBpIG5vdmkgUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wdWtfcHJvbXB0IiBtc2dpZD0iMTgwMTk0MTA1MTA5NDk3NDYwOSI+IlNJTSBQVUsga8O0ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Bhc3N3b3JkX2VudGVyX3Bpbl9wcm9tcHQiIG1zZ2lkPSIzMjAxMTUxODQwNTcwNDkyNTM4Ij4iTm92aSBTSU0gUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRyeV90b3VjaF9oaW50IiBtc2dpZD0iNzg1ODU0NzQ2NDk4Mjk4MTM4NCI+PGZvbnQgc2l6ZT0iMTciPiJEb2Rpcm5pdGUgZGEgYmlzdGUgdW5lbGkgbG96aW5rdSI8L2ZvbnQ+PC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF9lbnRlcl9wYXNzd29yZF9jb2RlIiBtc2dpZD0iMTA1NDcyMTY2ODI3OTA0OTc4MCI+Ik90a3VjYWp0ZSBsb3ppbmt1IGRhIGJpc3RlIG90a2xqdcSNYWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfZW50ZXJfcGluX3Bhc3N3b3JkX2NvZGUiIG1zZ2lkPSI2MzkxNzU1MTQ2MTEyNTAzNDQzIj4iVW5lc2l0ZSBQSU4gemEgb3RrbGp1xI1hdmFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wYXNzd29yZF93cm9uZ19waW5fY29kZSIgbXNnaWQ9IjI0MjIyMjU1OTEwMDYxMzQ5MzYiPiJQSU4ga8O0ZCBqZSBuZXRhxI1hbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9jaGFyZ2VkIiBtc2dpZD0iMzI3MjIyMzkwNjA3MzQ5MjQ1NCI+Ik5hcHVuamVubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW4iIG1zZ2lkPSI5MDg3NDk3NDM1NTUzMjUyODYzIj4iUHVuamVuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luX2NoYXJnaW5nX2Zhc3QiIG1zZ2lkPSI2NjcxMTYyNzMwMTY3MzA1NDc5Ij4iQnJ6byBzZSBwdW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbl9jaGFyZ2luZ19zbG93bHkiIG1zZ2lkPSIxOTY0NzE0NjYxMDcxMTYzMjI5Ij4iU3Bvcm8gc2UgcHVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2xvd19iYXR0ZXJ5IiBtc2dpZD0iODE0MzgwODAxODcxOTE3Mzg1OSI+IlBvdmXFvml0ZSBwdW5qYcSNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4iUHJpdGlzbml0ZSBNZW5pIGRhIGJpc3RlIG90a2xqdcSNYWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX25ldHdvcmtfbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI5MTY5NzE3Nzc5MDU4MDM3MTY4Ij4iTXJlxb5hIGplIHpha2xqdcSNYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjQ5NDk4MDU2MTMwNDIxMTkzMSI+Ik5lbWEgU0lNIGthcnRpY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9taXNzaW5nX3NpbV9tZXNzYWdlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIxNDQ1ODQ5MDA1OTA5MjYwMDM5Ij4iVSB0YWJsZXR1IG5lbWEgU0lNIGthcnRpY2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1fbWVzc2FnZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM0ODExMTAzOTU1MDg2Mzc2NDMiPiJVIHRlbGVmb251IG5lbWEgU0lNIGthcnRpY2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbWlzc2luZ19zaW1faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iNTIxMDg5MTUwOTk5NTk0MjI1MCI+IlVtZXRuaXRlIFNJTSBrYXJ0aWN1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21pc3Npbmdfc2ltX2luc3RydWN0aW9uc19sb25nIiBtc2dpZD0iNTk2ODk4NTQ4OTQ2Mzg3MDM1OCI+IlNJTSBrYXJ0aWNhIG5lZG9zdGFqZSBpbGkgbmUgbW/FvmUgZGEgc2UgcHJvxI1pdGEuIFVtZXRuaXRlIFNJTSBrYXJ0aWN1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3Blcm1hbmVudF9kaXNhYmxlZF9zaW1fbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjgzNDA4MTM5ODk1ODY2MjIzNTYiPiJTSU0ga2FydGljYSBqZSBuZXVwb3RyZWJsaml2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wZXJtYW5lbnRfZGlzYWJsZWRfc2ltX2luc3RydWN0aW9ucyIgbXNnaWQ9IjU4OTI5NDA5MDk2OTk3MjM1NDQiPiJTSU0ga2FydGljYSBqZSB0cmFqbm8gb25lbW9ndcSHZW5hLlxuIE9icmF0aXRlIHNlIGRvYmF2bGphxI11IHVzbHVnZSBiZcW+acSNbmUgbXJlxb5lIGRhIGJpc3RlIGRvYmlsaSBkcnVndSBTSU0ga2FydGljdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9zaW1fbG9ja2VkX21lc3NhZ2UiIG1zZ2lkPSI2ODc1NzczNDEzMzA2MzgwOTAyIj4iU0lNIGthcnRpY2EgamUgemFrbGp1xI1hbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3B1a19sb2NrZWRfbWVzc2FnZSIgbXNnaWQ9IjM3NDcyMzI0Njc0NzE4MDE2MzMiPiJTSU0ga2FydGljYSBqZSB6YWtsanXEjWFuYSBQVUsga29kb20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc5NzUyMjE4MDUwMzM2MTQ0MjYiPiJPdGtsanXEjWF2YW5qZSBTSU0ga2FydGljZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGF0dGVybl91bmxvY2siIG1zZ2lkPSIxNDkwODQwNzA2MDc1MjQ2NjEyIj4iT3RrbGp1xI1hdmFuamUgxaFhYmxvbm9tLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX3VubG9jayIgbXNnaWQ9IjI0Njk2ODcxMTE3ODQwMzUwNDYiPiJPdGtsanXEjWF2YW5qZSBQSU4tb20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXNzd29yZF91bmxvY2siIG1zZ2lkPSI3Njc1Nzc3NjIzOTEyMTU1MDg5Ij4iT3RrbGp1xI1hdmFuamUgbG96aW5rb20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9wYXR0ZXJuX2FyZWEiIG1zZ2lkPSI3Njc5ODkxMzI0NTA5NTk3OTA0Ij4iT2JsYXN0IMWhYWJsb25hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2xpZGVfYXJlYSIgbXNnaWQ9IjY3MzYwNjQ0OTQwMTk5Nzk1NDQiPiJPYmxhc3QgcHJldmxhxI1lbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfcGluX2FyZWEiIG1zZ2lkPSI3OTAzOTU5NDc2NjA3ODMzNDg1Ij4iT2JsYXN0IHphIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2FjY2Vzc2liaWxpdHlfc2ltX3Bpbl9hcmVhIiBtc2dpZD0iMzg4Nzc4MDc3NTExMTcxOTMzNiI+Ik9ibGFzdCB6YSBQSU4gemEgU0lNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfYWNjZXNzaWJpbGl0eV9zaW1fcHVrX2FyZWEiIG1zZ2lkPSIxODgwODIzNDA2OTU0OTk2MjA3Ij4iT2JsYXN0IHphIFBVSyB6YSBTSU0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9hY2Nlc3NpYmlsaXR5X25leHRfYWxhcm0iIG1zZ2lkPSI3MjY5NTgzMDczNzUwNTE4NjcyIj4iU2xlZGXEh2kgYWxhcm0gamUgcG9kZcWhZW4gemEgPHhsaWZmOmcgaWQ9IkFMQVJNIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2RlbGV0ZSIgbXNnaWQ9IjMzMzc5MTQ4MzMyMDY2MzU3NDQiPiJJemJyacWhaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkdmlld19rZXljb2RlX2VudGVyIiBtc2dpZD0iMjk4NTg2NDAxNTA3NjA1OTQ2NyI+IkVudGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZm9yZ290X3BhdHRlcm5fYnV0dG9uX3RleHQiIG1zZ2lkPSI4ODUyMDIxNDY3ODY4MjIwNjA4Ij4iWmFib3JhdmxqZW5pIMWhYWJsb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19wYXR0ZXJuIiBtc2dpZD0iMTg1MDgwNjA3MDgwMTM1ODgzMCI+IlBvZ3JlxaFhbiDFoWFibG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfd3JvbmdfcGFzc3dvcmQiIG1zZ2lkPSIyMzMzMjgxNzYyMTI4MTEzMTU3Ij4iUG9ncmXFoW5hIGxvemlua2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ193cm9uZ19waW4iIG1zZ2lkPSIxMTMxMzA2NTEwODMzNTYzODAxIj4iUG9ncmXFoWFuIFBJTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9hdHRlbXB0c19jb3VudGRvd24iIG1zZ2lkPSI2MzU4MTEwMjIxNjAzMjk3NTQ4Ij4iUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGF0dGVybl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIzOTg5Nzg2MTE2ODMwNzU4NjgiPiJOYWNydGFqdGUgxaFhYmxvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3NpbV9waW5faW5zdHJ1Y3Rpb25zIiBtc2dpZD0iMjMxOTUwODU1MDkzNDU1NzMzMSI+IlVuZXNpdGUgUElOIFNJTSBrYXJ0aWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3Bpbl9pbnN0cnVjdGlvbnNfbXVsdGkiIG1zZ2lkPSI3ODE4NTE1OTczMTk3MjAxNDM0Ij4iVW5lc2l0ZSBQSU4gemEgU0lNIOKAnjx4bGlmZjpnIGlkPSJDQVJSSUVSIj4lMSRzPC94bGlmZjpnPuKAnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9pbnN0cnVjdGlvbnMiIG1zZ2lkPSIyMzc3MjQyMjMzNDk1MTExNTU3Ij4iVW5lc2l0ZSBQSU4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9pbnN0cnVjdGlvbnMiIG1zZ2lkPSI1NzUzNjQ2NTU2MTg2OTM2ODE5Ij4iVW5lc2l0ZSBsb3ppbmt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3B1a19oaW50IiBtc2dpZD0iNDUzMjI3MTQzODYxNzM1NTM3Ij4iU0lNIGthcnRpY2EgamUgc2FkYSBvbmVtb2d1xIdlbmEuIFVuZXNpdGUgUFVLIGvDtGQgZGEgYmlzdGUgbmFzdGF2aWxpLiBaYSBkZXRhbGplIGtvbnRha3RpcmFqdGUgb3BlcmF0ZXJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3B1a19lbnRlcl9wdWtfaGludF9tdWx0aSIgbXNnaWQ9IjM2MzgyMjQ5NDU1OTc4MzAyNSI+IlNJTSDigJ48eGxpZmY6ZyBpZD0iQ0FSUklFUiI+JTEkczwveGxpZmY6Zz7igJwgamUgc2FkYSBvbmVtb2d1xIdlbi4gVW5lc2l0ZSBQVUsga8O0ZCBkYSBiaXN0ZSBuYXN0YXZpbGkuIEtvbnRha3RpcmFqdGUgb3BlcmF0ZXJhIHphIGRldGFsamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHVrX2VudGVyX3Bpbl9oaW50IiBtc2dpZD0iNzg3MTYwNDUyNzQyOTYwMjAyNCI+IlVuZXNpdGUgxb5lbGplbmkgUElOIGvDtGQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19lbnRlcl9jb25maXJtX3Bpbl9oaW50IiBtc2dpZD0iMzI1Njc2MTg0NzYyNTI5OTc2Ij4iUG90dnJkaXRlIMW+ZWxqZW5pIFBJTiBrw7RkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfc2ltX3VubG9ja19wcm9ncmVzc19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijg5NTAzOTgwMTY5NzY4NjU3NjIiPiJPdGtsanXEjWF2YW5qZSBTSU0ga2FydGljZeKApiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3Bpbl9oaW50IiBtc2dpZD0iODc5NTE1OTM1ODExMDYyMDAwMSI+IlVuZXNpdGUgUElOIGtvamkgaW1hIG9kIDQgZG8gOCBicm9qZXZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfc2ltX3B1a19oaW50IiBtc2dpZD0iNzU1MzM4ODMyNTY1NDM2OTU3NSI+IlBVSyBrw7RkIHRyZWJhIGRhIGltYSA4IGlsaSB2acWhZSBicm9qZXZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBvbm92byB1bmVzaXRlIGlzcHJhdm5pIFBVSyBrw7RkLiBQb25vdmxqZW5pIHBva3XFoWFqaSDEh2UgdHJham5vIG9uZW1vZ3XEh2l0aSBTSU0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2Rvdmkgc2UgbmUgcG9kdWRhcmFqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlByZXZpxaFlIHBva3XFoWFqYSB1bm9zYSDFoWFibG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVW5lbGkgc3RlIG5ldGHEjW5pIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlVuZWxpIHN0ZSBuZXRhxI1udSBsb3ppbmt1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTmFjcnRhbGkgc3RlIMWhYWJsb24gemEgb3RrbGp1xI1hdmFuamUgbmV0YcSNbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlKGkpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSB0YWJsZXQgcmVzZXR1amUgaSBzdmkgcG9kYWNpIHNhIG5qZWdhIGJyacWhdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSB0ZWxlZm9uIHJlc2V0dWplIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSBicmnFoXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBUYWJsZXQgxIdlIGJpdGkgcmVzZXRvdmFuIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBUZWxlZm9uIMSHZSBiaXRpIHJlc2V0b3ZhbiBpIHN2aSBwb2RhY2kgc2EgbmplZ2EgxIdlIGJpdGkgaXpicmlzYW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSBvdmFqIGtvcmlzbmlrIHVrbGFuamEgaSBzdmkgcG9kYWNpIGtvcmlzbmlrYSBicmnFoXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwb2t1xaFhaihhKSwgbmFrb24gxI1lZ2Egc2Ugb3ZhaiBrb3Jpc25payB1a2xhbmphIGkgc3ZpIHBvZGFjaSBrb3Jpc25pa2EgYnJpxaF1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXQoYSkuIE92YWoga29yaXNuaWsgxIdlIGJpdGkgdWtsb25qZW4gaSBzdmkgcG9kYWNpIGtvcmlzbmlrYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGVsZWZvbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0KGEpLiBPdmFqIGtvcmlzbmlrIMSHZSBiaXRpIHVrbG9uamVuIGkgc3ZpIHBvZGFjaSBrb3Jpc25pa2EgxIdlIGJpdGkgaXpicmlzYW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dChhKS4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqKGEpLCBuYWtvbiDEjWVnYSBzZSBwb3Nsb3ZuaSBwcm9maWwgdWtsYW5qYSBpIHN2aSBwb2RhY2kgc2EgcHJvZmlsYSBicmnFoXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQoYSkuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwb2t1xaFhaihhKSwgbmFrb24gxI1lZ2Egc2UgcG9zbG92bmkgcHJvZmlsIHVrbGFuamEgaSBzdmkgcG9kYWNpIHNhIHByb2ZpbGEgYnJpxaF1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iUG9ncmXFoW5vIHN0ZSBwb2t1xaFhbGkgZGEgb3RrbGp1xI1hdGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXQoYSkuIFBvc2xvdm5pIHByb2ZpbCDEh2UgYml0aSB1a2xvbmplbiBpIHN2aSBwb2RhY2kgc2EgbmplZ2EgxIdlIGJpdGkgaXpicmlzYW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlBvZ3JlxaFubyBzdGUgcG9rdcWhYWxpIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHB1dChhKS4gUG9zbG92bmkgcHJvZmlsIMSHZSBiaXRpIHVrbG9uamVuIGkgc3ZpIHBvZGFjaSBzYSBuamVnYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ik5hY3J0YWxpIHN0ZSDFoWFibG9uIHphIG90a2xqdcSNYXZhbmplIG5ldGHEjW5vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YS4gUG9zbGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5ldXNwZcWhbmEoaWgpIHBva3XFoWFqYSwgb2QgdmFzIMSHZSBiaXRpIHphdHJhxb5lbm8gZGEgb3RrbGp1xI1hdGUgdGFibGV0IHBvbW/Eh3UgbmFsb2dhIGUtcG/FoXRlLlxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGUoaSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOYWNydGFsaSBzdGUgxaFhYmxvbiB6YSBvdGtsanXEjWF2YW5qZSBuZXRhxI1ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFBvc2xlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5hKGloKSBwb2t1xaFhamEsIG9kIHZhcyDEh2UgYml0aSB6YXRyYcW+ZW5vIGRhIG90a2xqdcSNYXRlIHRlbGVmb24gcG9tb8SHdSBuYWxvZ2EgZS1wb8WhdGUuXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VrdW5kZShpKS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5ldGHEjWFuIFNJTSBQSU4ga8O0ZC4gU2FkYSBtb3JhdGUgZGEga29udGFrdGlyYXRlIG1vYmlsbm9nIG9wZXJhdGVyYSBkYSBiaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqLiI8L3N0cmluZz4KKyAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TmV0YcSNYW4gU0lNIFBJTiBrw7RkLiBJbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPk5ldGHEjWFuIFNJTSBQSU4ga8O0ZC4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEuPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OZXRhxI1hbiBTSU0gUElOIGvDtGQuIEltYXRlIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWphLjwvaXRlbT4KKyAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19wdWtfY29kZV9kZWFkIiBtc2dpZD0iNzA3NzUzNjgwODI5MTMxNjIwOCI+IlNJTSBrYXJ0aWNhIGplIG5ldXBvdHJlYmxqaXZhLiBLb250YWt0aXJhanRlIG1vYmlsbm9nIG9wZXJhdGVyYS4iPC9zdHJpbmc+CisgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcHVrX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI3NTc2MjI3MzY2OTk5ODU4NzgwIj4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5ldGHEjWFuIFNJTSBQVUsga8O0ZC4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhaiBwcmUgbmVnbyDFoXRvIFNJTSBrYXJ0aWNhIHBvc3RhbmUgdHJham5vIG5ldXBvdHJlYmxqaXZhLjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPk5ldGHEjWFuIFNJTSBQVUsga8O0ZC4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgcHJlIG5lZ28gxaF0byBTSU0ga2FydGljYSBwb3N0YW5lIHRyYWpubyBuZXVwb3RyZWJsaml2YS48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk5ldGHEjWFuIFNJTSBQVUsga8O0ZC4gSW1hdGUgam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgcHJlIG5lZ28gxaF0byBTSU0ga2FydGljYSBwb3N0YW5lIHRyYWpubyBuZXVwb3RyZWJsaml2YS48L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfcGluX2ZhaWxlZCIgbXNnaWQ9IjYyNjgyODgwOTM1NTgwMzE1NjQiPiJSYWRuamEgc2EgU0lNIFBJTiBrb2RvbSBuaWplIHVzcGVsYSEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF9wdWtfZmFpbGVkIiBtc2dpZD0iMjgzODgyNDM2OTUwMjQ1NTk4NCI+IlJhZG5qYSBzYSBTSU0gUFVLIGtvZG9tIG5pamUgdXNwZWxhISI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Bpbl9hY2NlcHRlZCIgbXNnaWQ9IjE0NDgyNDE2NzM1NzAwMjAwOTciPiJLw7RkIGplIHByaWh2YcSHZW4hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2Fycmllcl9kZWZhdWx0IiBtc2dpZD0iODcwMDY1MDQwMzA1NDA0MjE1MyI+Ik9mbGFqbiBzdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9pbWVfc3dpdGNoX2J1dHRvbiIgbXNnaWQ9IjUwMzI5MjYxMzQ3NDA0NTY0MjQiPiJEdWdtZSBQcm9tZW5pIG1ldG9kIHVub3NhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFpcnBsYW5lX21vZGUiIG1zZ2lkPSIzMTIyMTA3OTAwODk3MjAyODA1Ij4iUmXFvmltIHJhZGEgdSBhdmlvbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3Jlc3RhcnRfcGF0dGVybiIgbXNnaWQ9IjQ4OTQzMDUwNTQ5MTg2MjQ0NCI+IsWgYWJsb24gamUgb2JhdmV6YW4ga2FkYSBwb25vdm8gcG9rcmXEh2V0ZSB1cmXEkWFqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fcmVzdGFydF9waW4iIG1zZ2lkPSI5OTQ4NzgyMTY1NzA2OTQ5NzQiPiJQSU4gamUgb2JhdmV6YW4ga2FkYSBwb25vdm8gcG9rcmXEh2V0ZSB1cmXEkWFqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fcmVzdGFydF9wYXNzd29yZCIgbXNnaWQ9IjIzNzU3NDI5MTk1Mjg0NjE2NjQiPiJMb3ppbmthIGplIG9iYXZlem5hIGthZGEgcG9ub3ZvIHBva3JlxIdldGUgdXJlxJFhai4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVvdXRfcGF0dGVybiIgbXNnaWQ9Ijg5MzAwNDc0OTI2MTc5MDA3ODUiPiJQb3RyZWJhbiBqZSDFoWFibG9uIHJhZGkgZG9kYXRuZSBiZXpiZWRub3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVvdXRfcGluIiBtc2dpZD0iNzQ3MDQ2ODYwNzk0NzcyNjM3NyI+IlBvdHJlYmFuIGplIFBJTiByYWRpIGRvZGF0bmUgYmV6YmVkbm9zdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl90aW1lb3V0X3Bhc3N3b3JkIiBtc2dpZD0iMTE3NzQxMjU0Mjc3MzkzNjk1NyI+IlBvdHJlYm5hIGplIGxvemlua2EgcmFkaSBkb2RhdG5lIGJlemJlZG5vc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fc3dpdGNoX3Byb2ZpbGVzX3BhdHRlcm4iIG1zZ2lkPSIzODAyMDU2Njk5MzIzNzczOTY5Ij4ixaBhYmxvbiBqZSBvYmF2ZXphbiBrYWRhIHByZWxheml0ZSBzYSBqZWRub2cgcHJvZmlsYSBuYSBkcnVnaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3N3aXRjaF9wcm9maWxlc19waW4iIG1zZ2lkPSI4MTA4MDIwMTg0NzMxMDUyMjQ2Ij4iUElOIGplIG9iYXZlemFuIGthZGEgcHJlbGF6aXRlIHNhIGplZG5vZyBwcm9maWxhIG5hIGRydWdpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fc3dpdGNoX3Byb2ZpbGVzX3Bhc3N3b3JkIiBtc2dpZD0iNjc1NTk5NzA1Nzg1MjA0MjY3MiI+Ikxvemlua2EgamUgb2JhdmV6bmEga2FkYSBwcmVsYXppdGUgc2EgamVkbm9nIHByb2ZpbGEgbmEgZHJ1Z2kuIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fdGltZV9wYXR0ZXJuIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iMjY5NzQ0NDM5MjIyODU0MTg1MyI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5OaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhdC4gUG90dnJkaXRlIMWhYWJsb24uPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+TmlzdGUgb3RrbGp1xI1hbGkgdXJlxJFhaiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYXRhLiBQb3R2cmRpdGUgxaFhYmxvbi48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk5pc3RlIG90a2xqdcSNYWxpIHVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2F0aS4gUG90dnJkaXRlIMWhYWJsb24uPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVfcGluIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iMjExODc1ODQ3NTM3NDM1NDg0OSI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5OaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhdC4gUG90dnJkaXRlIFBJTi48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5OaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhdGEuIFBvdHZyZGl0ZSBQSU4uPC9pdGVtPgorICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhdGkuIFBvdHZyZGl0ZSBQSU4uPC9pdGVtPgorICAgIDwvcGx1cmFscz4KKyAgICA8cGx1cmFscyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVfcGFzc3dvcmQiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI1MTMyNjkzNjYzMzY0OTEzNjc1Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5pc3RlIG90a2xqdcSNYWxpIHVyZcSRYWogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2F0LiBQb3R2cmRpdGUgbG96aW5rdS48L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5OaXN0ZSBvdGtsanXEjWFsaSB1cmXEkWFqIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhdGEuIFBvdHZyZGl0ZSBsb3ppbmt1LjwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+TmlzdGUgb3RrbGp1xI1hbGkgdXJlxJFhaiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYXRpLiBQb3R2cmRpdGUgbG96aW5rdS48L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0iZmluZ2VycHJpbnRfbm90X3JlY29nbml6ZWQiIG1zZ2lkPSIyNjkwNjYxODgxNjA4MTQ2NjE3Ij4iTmlqZSBwcmVwb3puYXQiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmluZGV4IDdmYmY0NmEuLjJjNDJkYzAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQktGK0LLQtdC00LXRgtC1INC+0YLQvdC+0LLQviDQv9GA0LDQstC40LvQvdC40Y8gUFVLINC60L7QtC4g0JzQvdC+0LPQvtC60YDQsNGC0L3QuNGC0LUg0L7Qv9C40YLQuCDRidC1INC00LXQsNC60YLQuNCy0LjRgNCw0YIg0LfQsCDQv9C+0YHRgtC+0Y/QvdC90L4gU0lNINC60LDRgNGC0LDRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLQn9CY0J0g0LrQvtC00L7QstC10YLQtSDQvdC1INGB0YrQstC/0LDQtNCw0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQntC/0LjRgtC40YLQtSDQt9CwINGE0LjQs9GD0YDQsNGC0LAg0YHQsCDRgtCy0YrRgNC00LUg0LzQvdC+0LPQviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0JLRitCy0LXQtNC+0YXRgtC1INC90LXQv9GA0LDQstC40LvQvdC+INCf0JjQnSDQutC+0LTQsCDRgdC4IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiBcblxu0J7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4g0YHQu9C10LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCS0YrQstC10LTQvtGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQv9Cw0YDQvtC70LDRgtCwINGB0LggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguIFxuXG7QntC/0LjRgtCw0LnRgtC1INC+0YLQvdC+0LLQviDRgdC70LXQtCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0J3QsNGH0LXRgNGC0LDRhdGC0LUg0L3QtdC/0YDQsNCy0LjQu9C90L4g0YTQuNCz0YPRgNCw0YLQsCDRgdC4INC30LAg0L7RgtC60LvRjtGH0LLQsNC90LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguIFxuXG7QntC/0LjRgtCw0LnRgtC1INC+0YLQvdC+0LLQviDRgdC70LXQtCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YLQvtC5INGJ0LUg0LHRitC00LUg0L3Rg9C70LjRgNCw0L0sINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60LjRgtC1INC80YMg0LTQsNC90L3QuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtC10LvQtdGE0L7QvdCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YLQvtC5INGJ0LUg0LHRitC00LUg0L3Rg9C70LjRgNCw0L0sINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60LjRgtC1INC80YMg0LTQsNC90L3QuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCS0YrQstC10LTQvtGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQn9CY0J0g0LrQvtC00LAg0YHQuCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiBcblxu0J7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4g0YHQu9C10LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i0JLRitCy0LXQtNC+0YXRgtC1INC90LXQv9GA0LDQstC40LvQvdC+INC/0LDRgNC+0LvQsNGC0LAg0YHQuCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiBcblxu0J7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4g0YHQu9C10LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0J3QsNGH0LXRgNGC0LDRhdGC0LUg0L3QtdC/0YDQsNCy0LjQu9C90L4g0YTQuNCz0YPRgNCw0YLQsCDRgdC4INC30LAg0L7RgtC60LvRjtGH0LLQsNC90LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9GK0YLQuC4gXG5cbtCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INGB0LvQtdC0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtCw0LHQu9C10YLQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRgtC+0Lkg0YnQtSDQsdGK0LTQtSDQvdGD0LvQuNGA0LDQvSwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuNGC0LUg0LzRgyDQtNCw0L3QvdC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LXQu9C10YTQvtC90LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KHQu9C10LQg0L7RidC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YLQvtC5INGJ0LUg0LHRitC00LUg0L3Rg9C70LjRgNCw0L0sINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60LjRgtC1INC80YMg0LTQsNC90L3QuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtCw0LHQu9C10YLQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguINCi0L7QuSDRidC1INCx0YrQtNC1INC90YPQu9C40YDQsNC9LCDQv9GA0Lgg0LrQvtC10YLQviDRidC1INGB0LUg0LjQt9GC0YDQuNGP0YIg0LLRgdC40YfQutC40YLQtSDQvNGDINC00LDQvdC90LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtC10LvQtdGE0L7QvdCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KLQvtC5INGJ0LUg0LHRitC00LUg0L3Rg9C70LjRgNCw0L0sINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60LjRgtC1INC80YMg0LTQsNC90L3QuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YLQvtC30Lgg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0YnQtSDQsdGK0LTQtSDQv9GA0LXQvNCw0YXQvdCw0YIsINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60Lgg0LTQsNC90L3QuCDQt9CwINC90LXQs9C+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LXQu9C10YTQvtC90LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguINCh0LvQtdC0INC+0YnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRgtC+0LfQuCDQv9C+0YLRgNC10LHQuNGC0LXQuyDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuCDQtNCw0L3QvdC4INC30LAg0L3QtdCz0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtCw0LHQu9C10YLQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRgtC+0LfQuCDQv9C+0YLRgNC10LHQuNGC0LXQuyDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuCDQtNCw0L3QvdC4INC30LAg0L3QtdCz0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCd0LXQv9GA0LDQstC40LvQvdC+INC+0L/QuNGC0LDRhdGC0LUg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRgtC+0LfQuCDQv9C+0YLRgNC10LHQuNGC0LXQuyDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuCDQtNCw0L3QvdC4INC30LAg0L3QtdCz0L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KLQvtC30Lgg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0YnQtSDQsdGK0LTQtSDQv9GA0LXQvNCw0YXQvdCw0YIsINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60Lgg0LTQsNC90L3QuCDQt9CwINC90LXQs9C+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+ItCd0LXQv9GA0LDQstC40LvQvdC+INC+0L/QuNGC0LDRhdGC0LUg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguINCi0L7Qt9C4INC/0L7RgtGA0LXQsdC40YLQtdC7INGJ0LUg0LHRitC00LUg0L/RgNC10LzQsNGF0L3QsNGCLCDQv9GA0Lgg0LrQvtC10YLQviDRidC1INGB0LUg0LjQt9GC0YDQuNGP0YIg0LLRgdC40YfQutC4INC00LDQvdC90Lgg0LfQsCDQvdC10LPQvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YHQu9GD0LbQtdCx0L3QuNGP0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60Lgg0L/RgNC+0YTQuNC7INGJ0LUg0LHRitC00LUg0L/RgNC10LzQsNGF0L3QsNGCLCDQv9GA0Lgg0LrQvtC10YLQviDRidC1INGB0LUg0LjQt9GC0YDQuNGP0YIg0LLRgdC40YfQutC4INC00LDQvdC90Lgg0LfQsCDQvdC10LPQvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtC10LvQtdGE0L7QvdCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0L/QuNGC0LAg0YHQu9GD0LbQtdCx0L3QuNGP0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60Lgg0L/RgNC+0YTQuNC7INGJ0LUg0LHRitC00LUg0L/RgNC10LzQsNGF0L3QsNGCLCDQv9GA0Lgg0LrQvtC10YLQviDRidC1INGB0LUg0LjQt9GC0YDQuNGP0YIg0LLRgdC40YfQutC4INC00LDQvdC90Lgg0LfQsCDQvdC10LPQvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLQndC10L/RgNCw0LLQuNC70L3QviDQvtC/0LjRgtCw0YXRgtC1INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/RitGC0LguINCh0LvQtdC0INC+0YnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtC/0LjRgtCwINGB0LvRg9C20LXQsdC90LjRj9GCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC4INC/0YDQvtGE0LjQuyDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuCDQtNCw0L3QvdC4INC30LAg0L3QtdCz0L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+ItCd0LXQv9GA0LDQstC40LvQvdC+INC+0L/QuNGC0LDRhdGC0LUg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRgdC70YPQttC10LHQvdC40Y/RgiDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQuCDQv9GA0L7RhNC40Lsg0YnQtSDQsdGK0LTQtSDQv9GA0LXQvNCw0YXQvdCw0YIsINC/0YDQuCDQutC+0LXRgtC+INGJ0LUg0YHQtSDQuNC30YLRgNC40Y/RgiDQstGB0LjRh9C60Lgg0LTQsNC90L3QuCDQt9CwINC90LXQs9C+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtCw0LHQu9C10YLQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguINCh0LvRg9C20LXQsdC90LjRj9GCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC4INC/0YDQvtGE0LjQuyDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiwg0L/RgNC4INC60L7QtdGC0L4g0YnQtSDRgdC1INC40LfRgtGA0LjRj9GCINCy0YHQuNGH0LrQuCDQtNCw0L3QvdC4INC30LAg0L3QtdCz0L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0L7Qv9C40YLQsNGF0YLQtSDQtNCwINC+0YLQutC70Y7Rh9C40YLQtSDRgtC10LvQtdGE0L7QvdCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KHQu9GD0LbQtdCx0L3QuNGP0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60Lgg0L/RgNC+0YTQuNC7INGJ0LUg0LHRitC00LUg0L/RgNC10LzQsNGF0L3QsNGCLCDQv9GA0Lgg0LrQvtC10YLQviDRidC1INGB0LUg0LjQt9GC0YDQuNGP0YIg0LLRgdC40YfQutC4INC00LDQvdC90Lgg0LfQsCDQvdC10LPQvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0J3QsNGH0LXRgNGC0LDRhdGC0LUg0L3QtdC/0YDQsNCy0LjQu9C90L4g0YTQuNCz0YPRgNCw0YLQsCDRgdC4INC30LAg0L7RgtC60LvRjtGH0LLQsNC90LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/RitGC0LguINCh0LvQtdC0INC+0YnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRidC1INCx0YrQtNC10YLQtSDQv9C+0LzQvtC70LXQvdC4INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwINC/0L7RgdGA0LXQtNGB0YLQstC+0Lwg0LjQvNC10LnQuyDQsNC00YDQtdGBLlxuXG4g0J7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4g0YHQu9C10LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQndCw0YfQtdGA0YLQsNGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDRhNC40LPRg9GA0LDRgtCwINGB0Lgg0LfQsCDQvtGC0LrQu9GO0YfQstCw0L3QtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GK0YLQuC4g0KHQu9C10LQg0L7RidC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtC/0LjRgtCwINGJ0LUg0LHRitC00LXRgtC1INC/0L7QvNC+0LvQtdC90Lgg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCDQv9C+0YHRgNC10LTRgdGC0LLQvtC8INC40LzQtdC50Lsg0LDQtNGA0LXRgS5cblxuINCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INGB0LvQtdC0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQndCw0YfQtdGA0YLQsNGF0YLQtSDQvdC10L/RgNCw0LLQuNC70L3QviDRhNC40LPRg9GA0LDRgtCwINGB0Lgg0LfQsCDQvtGC0LrQu9GO0YfQstCw0L3QtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YrRgtC4LiDQodC70LXQtCDQvtGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7Qv9C40YLQsCDRidC1INCx0YrQtNC10YLQtSDQv9C+0LzQvtC70LXQvdC4INC00LAg0L7RgtC60LvRjtGH0LjRgtC1INGC0LDQsdC70LXRgtCwINC/0L7RgdGA0LXQtNGB0YLQstC+0Lwg0LjQvNC10LnQuyDQsNC00YDQtdGBLlxuXG4g0J7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4g0YHQu9C10LQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCd0LDRh9C10YDRgtCw0YXRgtC1INC90LXQv9GA0LDQstC40LvQvdC+INGE0LjQs9GD0YDQsNGC0LAg0YHQuCDQt9CwINC+0YLQutC70Y7Rh9Cy0LDQvdC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/RitGC0LguINCh0LvQtdC0INC+0YnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtC/0LjRgtCwINGJ0LUg0LHRitC00LXRgtC1INC/0L7QvNC+0LvQtdC90Lgg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QsCDQv9C+0YHRgNC10LTRgdGC0LLQvtC8INC40LzQtdC50Lsg0LDQtNGA0LXRgS5cblxuINCe0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+INGB0LvQtdC0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDRgdC10LPQsCDRgtGA0Y/QsdCy0LAg0LTQsCDRgdC1INGB0LLRitGA0LbQtdGC0LUg0YEg0L7Qv9C10YDQsNGC0L7RgNCwINGB0LgsINC30LAg0LTQsCDQvtGC0LrQu9GO0YfQuNGC0LUg0YPRgdGC0YDQvtC50YHRgtCy0L7RgtC+LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7QndC10L/RgNCw0LLQuNC70LXQvSDQn9CY0J0g0LrQvtC0INC30LAgU0lNINC60LDRgNGC0LDRgtCwIOKAkyDQvtGB0YLQsNCy0LDRgiDQstC4IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC+0L/QuNGC0LAuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCA4M2NhMzBlLi5iZWM1NzljIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgprjgpqDgpr/gppUgUFVLIOCmleCni+CmoSDgpqrgp4HgpqjgprDgpr7gpq/gprwg4Kay4Ka/4KaW4KeB4Kao4Ke3IOCmrOCmvuCmsCDgpqzgpr7gprAg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngprLgp4cg4Kak4Ka+IOCmuOCnjeCmpeCmvuCmr+CmvOCngOCmreCmvuCmrOCnhyDgprjgpr/gpq7gpp/gpr/gppXgp4cg4KaF4KaV4KeN4Ka34KauIOCmleCmsOCnhyDgpqbgp4fgpqzgp4fgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4Kaq4Ka/4KaoIOCmleCni+CmoeCml+CngeCmsuCmvyDgpq7gpr/gprLgppvgp4cg4Kao4Ka+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4Kas4Ka/4Kat4Ka/4Kao4KeN4KaoIOCmquCnjeCmr+CmvuCmn+CmvuCmsOCnjeCmqOCnh+CmsCDgprjgpr7gprngpr7gpq/gp43gpq/gp4cg4KaW4KeB4KasIOCmrOCnh+CmtuCmvyDgpqzgpr7gprAg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngpq/gprzgp4cg4KaX4KeH4Kab4KeHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgpobgpqrgpqjgpr8g4KaG4Kaq4Kao4Ka+4KawIOCmquCmvuCmuOCmk+Cmr+CmvOCmvuCmsOCnjeCmoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmn+CmvuCmh+CmqiDgppXgprDgp4fgppvgp4fgpqjgp7cgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCmuOCnh+CmleCnh+CmqOCnjeCmoeCnh+CmsCDgpq7gpqfgp43gpq/gp4cg4KaG4Kas4Ka+4KawIOCmmuCnh+Cmt+CnjeCmn+CmviDgppXgprDgp4Hgpqjgp7ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4KaG4Kaq4Kao4Ka/IOCmhuCmquCmqOCmvuCmsCDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgpp/gpr7gpofgpqog4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgprjgp4fgppXgp4fgpqjgp43gpqHgp4fgprAg4Kau4Kan4KeN4Kav4KeHIOCmhuCmrOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCmhuCmquCmqOCmvyDgpobgpqrgpqjgpr7gprAg4KaG4Kao4Kay4KaV4KeH4KawIOCmquCnjeCmr+CmvuCmn+CmvuCmsOCnjeCmqCDgpobgpoHgppXgpr7gprAg4KaV4KeN4Ka34KeH4Kak4KeN4Kaw4KeHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgprjgp4fgppXgp4fgpqjgp43gpqHgp4fgprAg4Kau4Kan4KeN4Kav4KeHIOCmhuCmrOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4KaG4Kaq4Kao4Ka/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeHIOCmn+CnjeCmr+CmvuCmrOCmsuCnh+CmnyDgpobgpqjgprLgppUg4KaV4Kaw4Ka+4KawIOCmmuCnh+Cmt+CnjeCmn+CmviDgppXgprDgp4fgppvgp4fgpqjgp7cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7gpp/gpr8g4KaF4Ka44Kar4KayIOCmquCnjeCmsOCmmuCnh+Cmt+CnjeCmn+CmvuCmsCDgpqrgprDgp4csIOCmj+CmhyDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp/gpp/gpr/gppXgp4cg4Kaq4KeB4Kao4Kaw4Ka+4Kav4Ka8IOCmuOCnh+CmnyDgppXgprDgpr4g4Ka54Kas4KeHIOCmr+CmviDgpo/gpp/gpr/gprAg4Ka44Kau4Ka44KeN4KakIOCmoeCnh+Cmn+CmviDgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Kas4KeH4Ke3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpqvgp4vgpqgg4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+4Kaf4Ka/IOCmheCmuOCmq+CmsiDgpqrgp43gprDgpprgp4fgprfgp43gpp/gpr7gprAg4Kaq4Kaw4KeHLCDgpo/gpocg4Kar4KeL4Kao4Kaf4Ka/4KaV4KeHIOCmquCngeCmqOCmsOCmvuCmr+CmvCDgprjgp4fgpp8g4KaV4Kaw4Ka+IOCmueCmrOCnhyDgpq/gpr4g4KaP4Kaf4Ka/4KawIOCmuOCmruCmuOCnjeCmpCDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KaG4Kaq4Kao4Ka/IOCmhuCmquCmqOCmvuCmsCDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmn+CmvuCmh+CmqiDgppXgprDgp4fgppvgp4fgpqjgp7cgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ka44KeH4KaV4KeH4Kao4KeN4Kah4KeH4KawIOCmruCmp+CnjeCmr+CnhyDgpobgpqzgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpobgpqrgpqjgpr8g4KaG4Kaq4Kao4Ka+4KawIOCmquCmvuCmuOCmk+Cmr+CmvOCmvuCmsOCnjeCmoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4Kaf4Ka+4KaH4KaqIOCmleCmsOCnh+Cmm+Cnh+CmqOCntyBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgprjgp4fgppXgp4fgpqjgp43gpqHgp4fgprAg4Kau4Kan4KeN4Kav4KeHIOCmhuCmrOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCmhuCmquCmqOCmvyDgpobgpqrgpqjgpr7gprAg4KaG4Kao4Kay4KaV4KeH4KawIOCmquCnjeCmr+CmvuCmn+CmvuCmsOCnjeCmqCDgpobgpoHgppXgpr7gprAg4KaV4KeN4Ka34KeH4Kak4KeN4Kaw4KeHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4fgppvgp4fgpqjgp7cgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ka44KeH4KaV4KeH4Kao4KeN4Kah4KeH4KawIOCmruCmp+CnjeCmr+CnhyDgpobgpqzgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeHIOCmn+CnjeCmr+CmvuCmrOCmsuCnh+CmnyDgpobgpqjgprLgppUg4KaV4Kaw4Ka+4KawIOCmmuCnh+Cmt+CnjeCmn+CmviDgppXgprDgp4fgppvgp4fgpqjgp7cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuCmn+CmvyDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+4KawIOCmquCmsOCnhywg4KaP4KaHIOCmn+CnjeCmr+CmvuCmrOCmsuCnh+Cmn+Cmn+Cmv+CmleCnhyDgpqrgp4HgpqjgprDgpr7gpq/gprwg4Ka44KeH4KafIOCmleCmsOCmviDgprngpqzgp4cg4Kav4Ka+IOCmj+Cmn+Cmv+CmsCDgprjgpq7gprjgp43gpqQg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4KaG4Kaq4Kao4Ka/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4cg4Kar4KeL4KaoIOCmhuCmqOCmsuCmlSDgppXgprDgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCnh+Cmm+Cnh+CmqOCntyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+4Kaf4Ka/IOCmheCmuOCmq+CmsiDgpqrgp43gprDgpprgp4fgprfgp43gpp/gpr7gprAg4Kaq4Kaw4KeHLCDgpo/gpocg4Kar4KeL4Kao4Kaf4Ka/4KaV4KeHIOCmquCngeCmqOCmsOCmvuCmr+CmvCDgprjgp4fgpp8g4KaV4Kaw4Ka+IOCmueCmrOCnhyDgpq/gpr4g4KaP4Kaf4Ka/4KawIOCmuOCmruCmuOCnjeCmpCDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeHIOCmn+CnjeCmr+CmvuCmrOCmsuCnh+CmnyDgpobgpqjgprLgppUg4KaV4Kaw4Ka+4KawIOCmmuCnh+Cmt+CnjeCmn+CmviDgppXgprDgp4fgppvgp4fgpqjgp7cg4KaP4KaHIOCmn+CnjeCmr+CmvuCmrOCmsuCnh+Cmn+Cmn+Cmv+CmleCnhyDgpqrgp4HgpqjgprDgpr7gpq/gprwg4Ka44KeH4KafIOCmleCmsOCmviDgprngpqzgp4cg4Kav4Ka+IOCmj+Cmn+Cmv+CmsCDgprjgpq7gprjgp43gpqQg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeHIOCmq+Cni+CmqCDgpobgpqjgprLgppUg4KaV4Kaw4Ka+4KawIOCmmuCnh+Cmt+CnjeCmn+CmviDgppXgprDgp4fgppvgp4fgpqjgp7cg4KaP4KaHIOCmq+Cni+CmqOCmn+Cmv+CmleCnhyDgpqrgp4HgpqjgprDgpr7gpq/gprwg4Ka44KeH4KafIOCmleCmsOCmviDgprngpqzgp4cg4Kav4Ka+IOCmj+Cmn+Cmv+CmsCDgprjgpq7gprjgp43gpqQg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4cg4Kaf4KeN4Kav4Ka+4Kas4Kay4KeH4KafIOCmhuCmqOCmsuCmlSDgppXgprDgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCnh+Cmm+Cnh+CmqOCntyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuCmn+CmvyDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+4KawIOCmquCmsOCnhywg4KaP4KaHIOCmrOCnjeCmr+CmrOCmueCmvuCmsOCmleCmvuCmsOCngOCmleCnhyDgprjgprDgpr7gpqjgp4sg4Ka54Kas4KeHIOCmr+CmviDgprjgpq7gprjgp43gpqQg4Kas4KeN4Kav4Kas4Ka54Ka+4Kaw4KaV4Ka+4Kaw4KeA4KawIOCmoeCnh+Cmn+CmviDgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Kas4KeH4Ke3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpqvgp4vgpqgg4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+4Kaf4Ka/IOCmheCmuOCmq+CmsiDgpqrgp43gprDgpprgp4fgprfgp43gpp/gpr7gprAg4Kaq4Kaw4KeHLCDgpo/gpocg4Kas4KeN4Kav4Kas4Ka54Ka+4Kaw4KaV4Ka+4Kaw4KeA4KaV4KeHIOCmuOCmsOCmvuCmqOCniyDgprngpqzgp4cg4Kav4Ka+IOCmuOCmruCmuOCnjeCmpCDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgprAg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp8g4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7gpp/gpr8g4KaF4Ka44Kar4KayIOCmquCnjeCmsOCmmuCnh+Cmt+CnjeCmn+CmvuCmsCDgpqrgprDgp4csIOCmj+CmhyDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgppXgp4cg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmrOCnjeCmr+CmrOCmueCmvuCmsOCmleCmvuCmsOCngOCmsCDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpqvgp4vgpqgg4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7gpp/gpr8g4KaF4Ka44Kar4KayIOCmquCnjeCmsOCmmuCnh+Cmt+CnjeCmn+CmvuCmsCDgpqrgprDgp4csIOCmj+CmhyDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgppXgp4cg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmrOCnjeCmr+CmrOCmueCmvuCmsOCmleCmvuCmsOCngOCmsCDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4KaG4Kaq4Kao4Ka/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp/gpp/gpr8g4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IOCmj+CmhyDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgppXgp4cg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmrOCnjeCmr+CmrOCmueCmvuCmsOCmleCmvuCmsOCngOCmsCDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4cg4Kar4KeL4Kao4Kaf4Ka/IOCmhuCmqOCmsuCmlSDgppXgprDgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCnh+Cmm+Cnh+CmqOCntyDgpo/gpocg4Kas4KeN4Kav4Kas4Ka54Ka+4Kaw4KaV4Ka+4Kaw4KeA4KaV4KeHIOCmuOCmsOCmvuCmqOCniyDgprngpqzgp4cg4Kav4Ka+IOCmuOCmruCmuOCnjeCmpCDgpqzgp43gpq/gpqzgprngpr7gprDgppXgpr7gprDgp4DgprAg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4cg4Kaf4KeN4Kav4Ka+4Kas4Kay4KeH4KafIOCmhuCmqOCmsuCmlSDgppXgprDgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCnh+Cmm+Cnh+CmqOCntyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuCmn+CmvyDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+4KawIOCmquCmsOCnhywg4KaV4Ka+4Kac4KeH4KawIOCmquCnjeCmsOCni+Cmq+CmvuCmh+CmsiDgprjgprDgpr7gpqjgp4sg4Ka54Kas4KeHIOCmr+CmviDgprjgpq7gprjgp43gpqQg4Kaq4KeN4Kaw4KeL4Kar4Ka+4KaH4KayIOCmoeCnh+Cmn+CmviDgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Kas4KeH4Ke3Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpqvgp4vgpqgg4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+4Kaf4Ka/IOCmheCmuOCmq+CmsiDgpqrgp43gprDgpprgp4fgprfgp43gpp/gpr7gprAg4Kaq4Kaw4KeHLCDgppXgpr7gppzgp4fgprAg4Kaq4KeN4Kaw4KeL4Kar4Ka+4KaH4KayIOCmuOCmsOCmvuCmqOCniyDgprngpqzgp4cg4Kav4Ka+IOCmuOCmruCmuOCnjeCmpCDgpqrgp43gprDgp4vgpqvgpr7gpofgprIg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp8g4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7gpp/gpr8g4KaF4Ka44Kar4KayIOCmquCnjeCmsOCmmuCnh+Cmt+CnjeCmn+CmvuCmsCDgpqrgprDgp4csIOCmleCmvuCmnOCnh+CmsCDgpqrgp43gprDgp4vgpqvgpr7gpofgprIg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmquCnjeCmsOCni+Cmq+CmvuCmh+CmsiDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgpobgpqrgpqjgpr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpqvgp4vgpqgg4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7gpp/gpr8g4KaF4Ka44Kar4KayIOCmquCnjeCmsOCmmuCnh+Cmt+CnjeCmn+CmvuCmsCDgpqrgprDgp4csIOCmleCmvuCmnOCnh+CmsCDgpqrgp43gprDgp4vgpqvgpr7gpofgprIg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmquCnjeCmsOCni+Cmq+CmvuCmh+CmsiDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4KaG4Kaq4Kao4Ka/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpqzgpr7gprAg4Kat4KeB4KayIOCmleCmsOCnhyDgpp/gp43gpq/gpr7gpqzgprLgp4fgpp/gpp/gpr8g4KaG4Kao4Kay4KaVIOCmleCmsOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IOCmleCmvuCmnOCnh+CmsCDgpqrgp43gprDgp4vgpqvgpr7gpofgprIg4Ka44Kaw4Ka+4Kao4KeLIOCmueCmrOCnhyDgpq/gpr4g4Ka44Kau4Ka44KeN4KakIOCmquCnjeCmsOCni+Cmq+CmvuCmh+CmsiDgpqHgp4fgpp/gpr4g4Kau4KeB4Kab4KeHIOCmq+Cnh+CmsuCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuCmhuCmquCmqOCmvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4cg4Kar4KeL4Kao4Kaf4Ka/IOCmhuCmqOCmsuCmlSDgppXgprDgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCnh+Cmm+Cnh+CmqOCntyDgppXgpr7gppzgp4fgprAg4Kaq4KeN4Kaw4KeL4Kar4Ka+4KaH4KayIOCmuOCmsOCmvuCmqOCniyDgprngpqzgp4cg4Kav4Ka+IOCmuOCmruCmuOCnjeCmpCDgpqrgp43gprDgp4vgpqvgpr7gpofgprIg4Kah4KeH4Kaf4Ka+IOCmruCngeCmm+CnhyDgpqvgp4fgprLgpqzgp4fgp7ciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KaG4Kaq4Kao4Ka/IOCmhuCmquCmqOCmvuCmsCDgpobgpqjgprLgppXgp4fgprAg4Kaq4KeN4Kav4Ka+4Kaf4Ka+4Kaw4KeN4KaoIOCmhuCmgeCmleCmvuCmsCDgppXgp43gprfgp4fgpqTgp43gprDgp4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4fgppvgp4fgpqjgp7cg4KaG4KawIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngprLgp4cg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmj+CmleCmn+CmvyDgpofgpq7gp4fgprIg4KaF4KeN4Kav4Ka+4KaV4Ka+4KaJ4Kao4KeN4KafIOCmruCmvuCmsOCmq+CmpCDgpobgpqrgpqjgpr7gprAg4Kaf4KeN4Kav4Ka+4Kas4Kay4KeH4KafIOCmhuCmqOCmsuCmlSDgppXgprDgpqTgp4cg4Kas4Kay4Ka+IOCmueCmrOCnh+Cnt1xuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Ka44KeH4KaV4KeH4Kao4KeN4Kah4KeH4KawIOCmruCmp+CnjeCmr+CnhyDgpobgpqzgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KaG4Kaq4Kao4Ka/IOCmhuCmquCmqOCmvuCmsCDgpobgpqjgprLgppXgp4fgprAg4Kaq4KeN4Kav4Ka+4Kaf4Ka+4Kaw4KeN4KaoIOCmhuCmgeCmleCmvuCmsCDgppXgp43gprfgp4fgpqTgp43gprDgp4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kas4Ka+4KawIOCmreCngeCmsiDgppXgprDgp4fgppvgp4fgpqjgp7cg4KaG4KawIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngprLgp4cg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmj+CmleCmn+CmvyDgpofgpq7gp4fgprIg4KaF4KeN4Kav4Ka+4KaV4Ka+4KaJ4Kao4KeN4KafIOCmruCmvuCmsOCmq+CmpCDgpobgpqrgpqjgpr7gprAg4Kar4KeL4KaoIOCmhuCmqOCmsuCmlSDgppXgprDgpqTgp4cg4Kas4Kay4Ka+IOCmueCmrOCnh+Cnt1xuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Ka44KeH4KaV4KeH4Kao4KeN4Kah4KeH4KawIOCmruCmp+CnjeCmr+CnhyDgpobgpqzgpr7gprAg4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCngeCmqOCntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpobgpqrgpqjgpr8g4KaG4Kaq4Kao4Ka+4KawIOCmhuCmqOCmsuCmleCnh+CmsCDgpqrgp43gpq/gpr7gpp/gpr7gprDgp43gpqgg4KaG4KaB4KaV4Ka+4KawIOCmleCnjeCmt+Cnh+CmpOCnjeCmsOCnhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IOCmhuCmsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngprLgp4cg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmj+CmleCmn+CmvyDgpofgpq7gp4fgprIg4KaF4KeN4Kav4Ka+4KaV4Ka+4KaJ4Kao4KeN4KafIOCmruCmvuCmsOCmq+CmpCDgpobgpqrgpqjgpr7gprAg4Kaf4KeN4Kav4Ka+4Kas4Kay4KeH4KafIOCmhuCmqOCmsuCmlSDgppXgprDgpqTgp4cg4Kas4Kay4Ka+IOCmueCmrOCnh+Cnt1xuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgprjgp4fgppXgp4fgpqjgp43gpqHgp4fgprAg4Kau4Kan4KeN4Kav4KeHIOCmhuCmrOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpobgpqrgpqjgpr8g4KaG4Kaq4Kao4Ka+4KawIOCmhuCmqOCmsuCmleCnh+CmsCDgpqrgp43gpq/gpr7gpp/gpr7gprDgp43gpqgg4KaG4KaB4KaV4Ka+4KawIOCmleCnjeCmt+Cnh+CmpOCnjeCmsOCnhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpq3gp4HgprIg4KaV4Kaw4KeH4Kab4KeH4Kao4Ke3IOCmhuCmsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCmrOCmvuCmsCDgpoXgprjgpqvgprIg4Kaq4KeN4Kaw4Kaa4KeH4Ka34KeN4Kaf4Ka+IOCmleCmsOCmviDgprngprLgp4cg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmj+CmleCmn+CmvyDgpofgpq7gp4fgprIg4KaF4KeN4Kav4Ka+4KaV4Ka+4KaJ4Kao4KeN4KafIOCmruCmvuCmsOCmq+CmpCDgpobgpqrgpqjgpr7gprAg4Kar4KeL4KaoIOCmhuCmqOCmsuCmlSDgppXgprDgpqTgp4cg4Kas4Kay4Ka+IOCmueCmrOCnh+Cnt1xuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgprjgp4fgppXgp4fgpqjgp43gpqHgp4fgprAg4Kau4Kan4KeN4Kav4KeHIOCmhuCmrOCmvuCmsCDgpprgp4fgprfgp43gpp/gpr4g4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLgpq3gp4HgprIg4Ka44Ka/4KauIOCmquCmv+CmqCDgppXgp4vgpqEsIOCmhuCmquCmqOCmvuCmsCDgpqHgpr/gpq3gpr7gpofgprjgpp/gpr8g4KaG4Kao4Kay4KaVIOCmleCmsOCmpOCnhyDgpo/gppbgpqgg4KaG4Kaq4Kao4Ka+4KaV4KeHIOCmheCmrOCmtuCnjeCmr+CmhyDgpobgpqrgpqjgpr7gprAg4KaV4KeN4Kav4Ka+4Kaw4Ka/4Kav4Ka84Ka+4Kaw4KeH4KawIOCmuOCmvuCmpeCnhyDgpq/gp4vgppfgpr7gpq/gp4vgppcg4KaV4Kaw4Kak4KeHIOCmueCmrOCnh+CntyI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4Kat4KeB4KayIFNJTSDgpqrgpr/gpqgg4KaV4KeL4KahLCDgpobgpqrgpqjgpr7gprAg4KaV4Ka+4Kab4KeHIOCmhuCmsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuCmn+CmvyDgpqrgp43gprDgpprgp4fgprfgp43gpp/gpr4g4Kas4Ka+4KaV4Ka/IOCmsOCmr+CmvOCnh+Cmm+Cnh+CntzwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IDQyYWU1MmUuLjMwZDkyODkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJUb3JuYSBhIGludHJvZHVpciBlbCBjb2RpIFBVSyBjb3JyZWN0ZS4gRWxzIGludGVudHMgcmVwZXRpdHMgZmFyYW4gcXVlIGVzIGRlc2FjdGl2aSBsYSBTSU0gZGUgbWFuZXJhIHBlcm1hbmVudC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iRWxzIGNvZGlzIFBJTiBubyBjb2luY2lkZWl4ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJNYXNzYSBpbnRlbnRzIGluY29ycmVjdGVzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJIYXMgZXNjcml0IG1hbGFtZW50IGVsIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWdhZGVzLiBcblxuVG9ybmEtaG8gYSBwcm92YXIgZFwnYXF1w60gYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWdvbnMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkhhcyBlc2NyaXQgbWFsYW1lbnQgbGEgY29udHJhc2VueWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gXG5cblRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJIYXMgZGlidWl4YXQgZWwgcGF0csOzIGRlIGRlc2Jsb3F1ZWlnIGRlIG1hbmVyYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMuIFxuXG5Ub3JuYS1obyBhIHByb3ZhciBkXCdhcXXDrSBhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ29ucy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBsYSB0YXVsZXRhIGluY29ycmVjdGFtZW50IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGxhIHRhdWxldGEgZXMgcmVzdGFibGlyw6AgaSBzZSBuXCdlc2JvcnJhcmFuIHRvdGVzIGxlcyBkYWRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgZWwgdGVsw6hmb24gaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gRXQgcXVlZGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudHMgbcOpcy4gU2kgbm8gaG8gZmFzIGLDqSwgZWwgdGVsw6hmb24gZXMgcmVzdGFibGlyw6AgaSBzZSBuXCdlc2JvcnJhcmFuIHRvdGVzIGxlcyBkYWRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkhhcyBlc2NyaXQgbWFsYW1lbnQgZWwgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVnYWRlcy4gXG5cblRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWdvbnMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkhhcyBlc2NyaXQgbWFsYW1lbnQgbGEgY29udHJhc2VueWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzLiBcblxuVG9ybmEtaG8gYSBwcm92YXIgZFwnYXF1w60gYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ29ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSGFzIGRpYnVpeGF0IGVsIHBhdHLDsyBkZSBkZXNibG9xdWVpZyBkZSBtYW5lcmEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlZ2FkZXMuIFxuXG5Ub3JuYS1obyBhIHByb3ZhciBkXCdhcXXDrSBhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGxhIHRhdWxldGEgaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGxhIHRhdWxldGEgZXMgcmVzdGFibGlyw6AgaSBzZSBuXCdlc2JvcnJhcmFuIHRvdGVzIGxlcyBkYWRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgZWwgdGVsw6hmb24gaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGVsIHRlbMOoZm9uIGVzIHJlc3RhYmxpcsOgIGkgc2UgblwnZXNib3JyYXJhbiB0b3RlcyBsZXMgZGFkZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGxhIHRhdWxldGEgaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMuIExhIHRhdWxldGEgZXMgcmVzdGFibGlyw6AgaSBzZSBuXCdlc2JvcnJhcmFuIHRvdGVzIGxlcyBkYWRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBlbCB0ZWzDqGZvbiBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gRWwgdGVsw6hmb24gZXMgcmVzdGFibGlyw6AgaSBzZSBuXCdlc2JvcnJhcmFuIHRvdGVzIGxlcyBkYWRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBsYSB0YXVsZXRhIGluY29ycmVjdGFtZW50IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGxcJ3VzdWFyaSBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBzZXZlcyBkYWRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgZWwgdGVsw6hmb24gaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gRXQgcXVlZGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudHMgbcOpcy4gU2kgbm8gaG8gZmFzIGLDqSwgbFwndXN1YXJpIHNlIHN1cHJpbWlyw6AsIGp1bnRhbWVudCBhbWIgdG90ZXMgbGVzIHNldmVzIGRhZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGxhIHRhdWxldGEgaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGxcJ3VzdWFyaSBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBzZXZlcyBkYWRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgZWwgdGVsw6hmb24gaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRzIG3DqXMuIFNpIG5vIGhvIGZhcyBiw6ksIGxcJ3VzdWFyaSBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBzZXZlcyBkYWRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGxhIHRhdWxldGEgaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMuIExcJ3VzdWFyaSBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBzZXZlcyBkYWRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBlbCB0ZWzDqGZvbiBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gTFwndXN1YXJpIHNlIHN1cHJpbWlyw6AsIGp1bnRhbWVudCBhbWIgdG90ZXMgbGVzIHNldmVzIGRhZGVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGxhIHRhdWxldGEgaW5jb3JyZWN0YW1lbnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gRXQgcXVlZGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudHMgbcOpcy4gU2kgbm8gaG8gZmFzIGLDqSwgZWwgcGVyZmlsIHByb2Zlc3Npb25hbCBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBkYWRlcyBxdWUgY29udGluZ3VpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBlbCB0ZWzDqGZvbiBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWdhZGVzLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50cyBtw6lzLiBTaSBubyBobyBmYXMgYsOpLCBlbCBwZXJmaWwgcHJvZmVzc2lvbmFsIHNlIHN1cHJpbWlyw6AsIGp1bnRhbWVudCBhbWIgdG90ZXMgbGVzIGRhZGVzIHF1ZSBjb250aW5ndWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgbGEgdGF1bGV0YSBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlZ2FkZXMuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudHMgbcOpcy4gU2kgbm8gaG8gZmFzIGLDqSwgZWwgcGVyZmlsIHByb2Zlc3Npb25hbCBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBkYWRlcyBxdWUgY29udGluZ3VpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJIYXMgcHJvdmF0IGRlIGRlc2Jsb3F1ZWphciBlbCB0ZWzDqGZvbiBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlZ2FkZXMuIEV0IHF1ZWRlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudHMgbcOpcy4gU2kgbm8gaG8gZmFzIGLDqSwgZWwgcGVyZmlsIHByb2Zlc3Npb25hbCBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBkYWRlcyBxdWUgY29udGluZ3VpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iSGFzIHByb3ZhdCBkZSBkZXNibG9xdWVqYXIgbGEgdGF1bGV0YSBpbmNvcnJlY3RhbWVudCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVnYWRlcy4gRWwgcGVyZmlsIHByb2Zlc3Npb25hbCBzZSBzdXByaW1pcsOgLCBqdW50YW1lbnQgYW1iIHRvdGVzIGxlcyBkYWRlcyBxdWUgY29udGluZ3VpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IkhhcyBwcm92YXQgZGUgZGVzYmxvcXVlamFyIGVsIHRlbMOoZm9uIGluY29ycmVjdGFtZW50IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWdhZGVzLiBFbCBwZXJmaWwgcHJvZmVzc2lvbmFsIHNlIHN1cHJpbWlyw6AsIGp1bnRhbWVudCBhbWIgdG90ZXMgbGVzIGRhZGVzIHF1ZSBjb250aW5ndWkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkhhcyBkaWJ1aXhhdCBlbCBwYXRyw7MgZGUgZGVzYmxvcXVlaWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVnYWRlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gU2kgZmFsbGVzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHZlZ2FkZXMgbcOpcywgc2VcJ3QgZGVtYW5hcsOgIHF1ZSBkZXNibG9xdWVnaXMgbGEgdGF1bGV0YSBhbWIgdW4gY29tcHRlIGRlIGNvcnJldSBlbGVjdHLDsm5pYy5cblxuIFRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSGFzIGRpYnVpeGF0IGVsIHBhdHLDsyBkZSBkZXNibG9xdWVpZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWdhZGVzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBTaSBmYWxsZXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdmVnYWRlcyBtw6lzLCBzZVwndCBkZW1hbmFyw6AgcXVlIGRlc2Jsb3F1ZWdpcyBlbCB0ZWzDqGZvbiBhbWIgdW4gY29tcHRlIGRlIGNvcnJldSBlbGVjdHLDsm5pYy5cblxuIFRvcm5hLWhvIGEgcHJvdmFyIGRcJ2FxdcOtIGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vnb25zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJIYXMgZGlidWl4YXQgZWwgcGF0csOzIGRlIGRlc2Jsb3F1ZWlnIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVnYWRlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gU2kgZmFsbGVzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdmVnYWRlcyBtw6lzLCBzZVwndCBkZW1hbmFyw6AgcXVlIGRlc2Jsb3F1ZWdpcyBsYSB0YXVsZXRhIGFtYiB1biBjb21wdGUgZGUgY29ycmV1IGVsZWN0csOybmljLlxuXG4gVG9ybmEtaG8gYSBwcm92YXIgZFwnYXF1w60gYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlZ29ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkhhcyBkaWJ1aXhhdCBlbCBwYXRyw7MgZGUgZGVzYmxvcXVlaWcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWdhZGVzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBTaSBmYWxsZXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB2ZWdhZGVzIG3DqXMsIHNlXCd0IGRlbWFuYXLDoCBxdWUgZGVzYmxvcXVlZ2lzIGVsIHRlbMOoZm9uIGFtYiB1biBjb21wdGUgZGUgY29ycmV1IGVsZWN0csOybmljLlxuXG4gVG9ybmEtaG8gYSBwcm92YXIgZFwnYXF1w60gYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlZ29ucy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkVsIGNvZGkgUElOIGRlIGxhIFNJTSBubyDDqXMgY29ycmVjdGUuIEhhcyBkZSBjb250YWN0YXIgYW1iIGxcJ29wZXJhZG9yIGRlIHRlbGVmb25pYSBtw7JiaWwgcGVyIGRlc2Jsb3F1ZWphciBlbCBkaXNwb3NpdGl1LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5FbCBjb2RpIFBJTiBkZSBsYSBTSU0gbm8gw6lzIGNvcnJlY3RlLiBFdCBxdWVkZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50cy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCAyM2UxNDIwLi40NGM3ZjI3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iWm5vdnUgemFkZWp0ZSBzcHLDoXZuw70ga8OzZCBQVUsuIE9wYWtvdmFuw71taSBwb2t1c3kgU0lNIGthcnR1IHRydmFsZSBkZWFrdGl2dWpldGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IkvDs2R5IFBJTiBzZSBuZXNob2R1asOtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlDFmcOtbGnFoSBtbm9obyBwb2t1c8WvIG8gbmFrcmVzbGVuw60gZ2VzdGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ikppxb4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz5rcsOhdCBqc3RlIHphZGFsaSBuZXNwcsOhdm7DvSBrw7NkIFBJTi4gXG5cblprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJKacW+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQganN0ZSBuZXNwcsOhdm7EmyB6YWRhbGkgaGVzbG8uIFxuXG5aa3VzdGUgdG8gem5vdnUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSmnFviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPmtyw6F0IGpzdGUgemFkYWxpIG5lc3Byw6F2bsOpIGJlenBlxI1ub3N0bsOtIGdlc3RvLiBcblxuWmt1c3RlIHRvIHpub3Z1IHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRhYmxldCBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgdGFibGV0IHJlc2V0b3bDoW4sIMSNw61txb4gc2UgeiBuxJtqIHNtYcW+b3UgdsWhZWNobmEgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRlbGVmb24gbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGFsxaHDrWNoIG5lw7pzcMSbxaFuw71jaCBwb2t1c2VjaCBidWRlIHRlbGVmb24gcmVzZXRvdsOhbiwgxI3DrW3FviBzZSB6IG7Em2ogc21hxb5vdSB2xaFlY2huYSBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSmnFviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+a3LDoXQganN0ZSB6YWRhbGkgbmVzcHLDoXZuw70ga8OzZCBQSU4uIFxuXG5aa3VzdGUgdG8gem5vdnUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJKacW+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz5rcsOhdCBqc3RlIG5lc3Byw6F2bsSbIHphZGFsaSBoZXNsby4gXG5cblprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ikppxb4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPmtyw6F0IGpzdGUgemFkYWxpIG5lc3Byw6F2bsOpIGJlenBlxI1ub3N0bsOtIGdlc3RvLiBcblxuWmt1c3RlIHRvIHpub3Z1IHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPmtyw6F0IHBva3VzaWxpIG9kZW1rbm91dCB0YWJsZXQgbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgdGFibGV0IHJlc2V0b3bDoW4sIMSNw61txb4gc2UgeiBuxJtqIHNtYcW+b3UgdsWhZWNobmEgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz5rcsOhdCBwb2t1c2lsaSBvZGVta25vdXQgdGVsZWZvbiBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZSB0ZWxlZm9uIHJlc2V0b3bDoW4sIMSNw61txb4gc2UgeiBuxJtqIHNtYcW+b3UgdsWhZWNobmEgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPmtyw6F0IHBva3VzaWxpIG9kZW1rbm91dCB0YWJsZXQgbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gVGFibGV0IGJ1ZGUgcmVzZXRvdsOhbiwgxI3DrW3FviB6IG7Em2ogYnVkb3Ugc21hesOhbmEgdsWhZWNobmEgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRlbGVmb24gbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gVGVsZWZvbiBidWRlIHJlc2V0b3bDoW4sIMSNw61txb4geiBuxJtqIGJ1ZG91IHNtYXrDoW5hIHbFoWVjaG5hIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRhYmxldCBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgdGVudG8gdcW+aXZhdGVsIG9kc3RyYW7Em24sIMSNw61txb4gc2Ugc21hxb5vdSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ikppxb4ganN0ZSBzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPmtyw6F0IHBva3VzaWxpIG9kZW1rbm91dCB0ZWxlZm9uIG5lc3Byw6F2bsO9bSB6cMWvc29iZW0uIFBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZSB0ZW50byB1xb5pdmF0ZWwgb2RzdHJhbsSbbiwgxI3DrW3FviBzZSBzbWHFvm91IHbFoWVjaG5hIGplaG8gZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPmtyw6F0IHBva3VzaWxpIG9kZW1rbm91dCB0YWJsZXQgbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgdGVudG8gdcW+aXZhdGVsIG9kc3RyYW7Em24sIMSNw61txb4gc2Ugc21hxb5vdSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ikppxb4ganN0ZSBzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRlbGVmb24gbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgdGVudG8gdcW+aXZhdGVsIG9kc3RyYW7Em24sIMSNw61txb4gc2Ugc21hxb5vdSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRhYmxldCBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBVxb5pdmF0ZWwgYnVkZSBvZHN0cmFuxJtuLCDEjcOtbcW+IGJ1ZG91IHNtYXrDoW5hIHbFoWVjaG5hIGplaG8gZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRlbGVmb24gbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gVcW+aXZhdGVsIGJ1ZGUgb2RzdHJhbsSbbiwgxI3DrW3FviBidWRvdSBzbWF6w6FuYSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRhYmxldCBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgcHJhY292bsOtIHByb2ZpbCBvZHN0cmFuxJtuLCDEjcOtbcW+IHNlIHNtYcW+b3UgdsWhZWNobmEgamVobyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJKacW+IGpzdGUgc2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz5rcsOhdCBwb2t1c2lsaSBvZGVta25vdXQgdGVsZWZvbiBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgcHJhY292bsOtIHByb2ZpbCBvZHN0cmFuxJtuLCDEjcOtbcW+IHNlIHNtYcW+b3UgdsWhZWNobmEgamVobyBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Ikppxb4ganN0ZSBzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRhYmxldCBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZSBwcmFjb3Zuw60gcHJvZmlsIG9kc3RyYW7Em24sIMSNw61txb4gc2Ugc21hxb5vdSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ikppxb4ganN0ZSBzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+a3LDoXQgcG9rdXNpbGkgb2RlbWtub3V0IHRlbGVmb24gbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkYWzFocOtY2ggbmXDunNwxJvFoW7DvWNoIHBva3VzZWNoIGJ1ZGUgcHJhY292bsOtIHByb2ZpbCBvZHN0cmFuxJtuLCDEjcOtbcW+IHNlIHNtYcW+b3UgdsWhZWNobmEgamVobyBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iSmnFviBqc3RlIHNlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPmtyw6F0IHBva3VzaWxpIG9kZW1rbm91dCB0YWJsZXQgbmVzcHLDoXZuw71tIHpwxa9zb2JlbS4gUHJhY292bsOtIHByb2ZpbCBidWRlIG9kc3RyYW7Em24sIMSNw61txb4gYnVkb3Ugc21hesOhbmEgdsWhZWNobmEgamVobyBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Ikppxb4ganN0ZSBzZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz5rcsOhdCBwb2t1c2lsaSBvZGVta25vdXQgdGVsZWZvbiBuZXNwcsOhdm7DvW0genDFr3NvYmVtLiBQcmFjb3Zuw60gcHJvZmlsIGJ1ZGUgb2RzdHJhbsSbbiwgxI3DrW3FviBidWRvdSBzbWF6w6FuYSB2xaFlY2huYSBqZWhvIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ikppxb4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz5rcsOhdCBqc3RlIG5lc3Byw6F2bsSbIG5ha3Jlc2xpbGkgc3bDqSBoZXNsbyBvZGVta251dMOtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPmRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZXRlIHBvxb7DoWTDoW5pIG8gb2RlbcSNZW7DrSB0YWJsZXR1IHBvbW9jw60gZS1tYWlsb3bDqWhvIMO6xI10dS5cblxuIFprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSmnFviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPmtyw6F0IGpzdGUgbmVzcHLDoXZuxJsgbmFrcmVzbGlsaSBzdsOpIGhlc2xvIG9kZW1rbnV0w60uIFBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZXRlIHBvxb7DoWTDoW5pIG8gb2RlbcSNZW7DrSB0ZWxlZm9udSBwb21vY8OtIGUtbWFpbG92w6lobyDDusSNdHUuXG5cbiBaa3VzdGUgdG8gem5vdnUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iSmnFviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+a3LDoXQganN0ZSBuZXNwcsOhdm7EmyBuYWtyZXNsaWxpIHN2w6kgaGVzbG8gb2RlbWtudXTDrS4gUG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPmRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZXRlIHBvxb7DoWTDoW5pIG8gb2RlbcSNZW7DrSB0YWJsZXR1IHBvbW9jw60gZS1tYWlsb3bDqWhvIMO6xI10dS5cblxuIFprdXN0ZSB0byB6bm92dSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKacW+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz5rcsOhdCBqc3RlIG5lc3Byw6F2bsSbIG5ha3Jlc2xpbGkgc3bDqSBoZXNsbyBvZGVta251dMOtLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGRhbMWhw61jaCBuZcO6c3DEm8WhbsO9Y2ggcG9rdXNlY2ggYnVkZXRlIHBvxb7DoWTDoW5pIG8gb2RlbcSNZW7DrSB0ZWxlZm9udSBwb21vY8OtIGUtbWFpbG92w6lobyDDusSNdHUuXG5cbiBaa3VzdGUgdG8gem5vdnUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iWmFkYWxpIGpzdGUgbmVzcHLDoXZuw70ga8OzZCBQSU4gU0lNIGthcnR5LiBOeW7DrSBtdXPDrXRlIHphIMO6xI1lbGVtIG9kZW1rbnV0w60gemHFmcOtemVuw60ga29udGFrdG92YXQgc3bDqWhvIG9wZXLDoXRvcmEuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij5aYWRhbGkganN0ZSBuZXNwcsOhdm7DvSBrw7NkIFBJTiBTSU0ga2FydHkuIE3DoXRlIGplxaF0xJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdXN5LjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IDJjMzkyNDEuLmI4MTMwNWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJJbmR0YXN0IGRlbiBrb3JyZWt0ZSBQVUsta29kZS4gR2VudGFnbmUgZm9yc8O4ZyB2aWwgcGVybWFuZW50IGRlYWt0aXZlcmUgU0lNLWtvcnRldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUGlua29kZXJuZSBzdGVtbWVyIGlra2Ugb3ZlcmVucyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkZvciBtYW5nZSBmb3Jzw7hnIHDDpSBhdCB0ZWduZSBtw7huc3RyZXQga29ycmVrdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iRHUgaGFyIGluZHRhc3RldCBlbiBmb3JrZXJ0IHBpbmtvZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIFxuXG5QcsO4diBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJEdSBoYXIgaW5kdGFzdGV0IGRpbiBhZGdhbmdza29kZSBmb3JrZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBcblxuUHLDuHYgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRHUgaGFyIHRlZ25ldCBkaXQgb3Bsw6VzbmluZ3Ntw7huc3RlciBmb3JrZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBcblxuUHLDuHYgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGFibGV0dGVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBudWxzdGlsbGVzIGRlbm5lIHRhYmxldCwgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgZGVucyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGVsZWZvbmVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBudWxzdGlsbGVzIGRlbm5lIHRlbGVmb24sIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIGRlbnMgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkR1IGhhciBpbmR0YXN0ZXQgZW4gZm9ya2VydCBwaW5rb2RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2UuIFxuXG5QcsO4diBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkR1IGhhciBpbmR0YXN0ZXQgZGluIGFkZ2FuZ3Nrb2RlIGZvcmtlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZS4gXG5cblByw7h2IGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRHUgaGFyIHRlZ25ldCBkaXQgb3Bsw6VzbmluZ3Ntw7huc3RlciBmb3JrZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2UuIFxuXG5QcsO4diBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iRHUgaGFyIGZvcnPDuGd0IGF0IGzDpXNlIHRhYmxldHRlbiBmb3JrZXJ0IG9wIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHlra2VkZSBmb3Jzw7hnIG51bHN0aWxsZXMgZGVubmUgdGFibGV0LCBodmlsa2V0IHZpbCBzbGV0dGUgYWxsZSBkZW5zIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkR1IGhhciBmb3Jzw7hndCBhdCBsw6VzZSB0ZWxlZm9uZW4gZm9ya2VydCBvcCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGdhbmdlLiBFZnRlciBlbmRudSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBudWxzdGlsbGVzIGRlbm5lIHRlbGVmb24sIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIGRlbnMgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iRHUgaGFyIGZvcnPDuGd0IGF0IGzDpXNlIHRhYmxldHRlbiBmb3JrZXJ0IG9wIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnYW5nZS4gVGFibGV0dGVuIG51bHN0aWxsZXMsIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIGRlbnMgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGVsZWZvbmVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBUZWxlZm9uZW4gbnVsc3RpbGxlcywgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgZGVucyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkR1IGhhciBmb3Jzw7hndCBhdCBsw6VzZSB0YWJsZXR0ZW4gZm9ya2VydCBvcCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZS4gRWZ0ZXIgZW5kbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHlra2VkZSBmb3Jzw7hnIGZqZXJuZXMgZGVubmUgYnJ1Z2VyLCBodmlsa2V0IHZpbCBzbGV0dGUgYWxsZSBicnVnZXJkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGVsZWZvbmVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBmamVybmVzIGRlbm5lIGJydWdlciwgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgYnJ1Z2VyZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGFibGV0dGVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZS4gRWZ0ZXIgZW5kbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNseWtrZWRlIGZvcnPDuGcgZmplcm5lcyBkZW5uZSBicnVnZXIsIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIGJydWdlcmRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkR1IGhhciBmb3Jzw7hndCBhdCBsw6VzZSB0ZWxlZm9uZW4gZm9ya2VydCBvcCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGdhbmdlLiBFZnRlciBlbmRudSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBmamVybmVzIGRlbm5lIGJydWdlciwgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgYnJ1Z2VyZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkR1IGhhciBmb3Jzw7hndCBhdCBsw6VzZSB0YWJsZXR0ZW4gZm9ya2VydCBvcCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEJydWdlcmVuIGZqZXJuZXMsIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIGJydWdlcmRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iRHUgaGFyIGZvcnPDuGd0IGF0IGzDpXNlIHRlbGVmb25lbiBmb3JrZXJ0IG9wIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnYW5nZS4gQnJ1Z2VyZW4gZmplcm5lcywgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgYnJ1Z2VyZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGFibGV0dGVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tlZGUgZm9yc8O4ZyBmamVybmVzIGFyYmVqZHNwcm9maWxlbiwgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgcHJvZmlsZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iRHUgaGFyIGZvcnPDuGd0IGF0IGzDpXNlIHRlbGVmb25lbiBmb3JrZXJ0IG9wIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBFZnRlciBlbmRudSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNseWtrZWRlIGZvcnPDuGcgZmplcm5lcyBhcmJlamRzcHJvZmlsZW4sIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIHByb2ZpbGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iRHUgaGFyIGZvcnPDuGd0IGF0IGzDpXNlIHRhYmxldHRlbiBmb3JrZXJ0IG9wIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIGVuZG51IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHlra2VkZSBmb3Jzw7hnIGZqZXJuZXMgYXJiZWpkc3Byb2ZpbGVuLCBodmlsa2V0IHZpbCBzbGV0dGUgYWxsZSBwcm9maWxkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGVsZWZvbmVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZS4gRWZ0ZXIgZW5kbnUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNseWtrZWRlIGZvcnPDuGcgZmplcm5lcyBhcmJlamRzcHJvZmlsZW4sIGh2aWxrZXQgdmlsIHNsZXR0ZSBhbGxlIHByb2ZpbGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGFibGV0dGVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBBcmJlamRzcHJvZmlsZW4gZmplcm5lcywgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgcHJvZmlsZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJEdSBoYXIgZm9yc8O4Z3QgYXQgbMOlc2UgdGVsZWZvbmVuIGZvcmtlcnQgb3AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBBcmJlamRzcHJvZmlsZW4gZmplcm5lcywgaHZpbGtldCB2aWwgc2xldHRlIGFsbGUgcHJvZmlsZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRHUgaGFyIHRlZ25ldCBkaXQgb3Bsw6VzbmluZ3Ntw7huc3RlciBmb3JrZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB5ZGVybGlnZXJlIG1pc2x5a2tlZGUgZm9yc8O4ZyB2aWwgZHUgYmxpdmUgYmVkdCBvbSBhdCBsw6VzZSBkaW4gdGFibGV0IG9wIHZlZCBoasOmbHAgYWYgZW4gZS1tYWlsa29udG9cblxuIFByw7h2IGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IGRpdCBvcGzDpXNuaW5nc23DuG5zdGVyIGZvcmtlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlkZXJsaWdlcmUgbWlzbHlra2VkZSBmb3Jzw7hnIHRpbCB2aWwgZHUgYmxpdmUgYmVkdCBvbSBhdCBsw6VzZSBkaW4gdGVsZWZvbiBvcCB2ZWQgaGrDpmxwIGFmIGVuIGUtbWFpbGtvbnRvLlxuXG4gUHLDuHYgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRHUgaGFyIHRlZ25ldCBkaXQgb3Bsw6VzbmluZ3Ntw7huc3RlciBmb3JrZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2UuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4geWRlcmxpZ2VyZSBtaXNseWtrZWRlIGZvcnPDuGcgdmlsIGR1IGJsaXZlIGJlZHQgb20gYXQgbMOlc2UgZGluIHRhYmxldCBvcCB2ZWQgaGrDpmxwIGFmIGVuIGUtbWFpbGtvbnRvXG5cbiBQcsO4diBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IGRpdCBvcGzDpXNuaW5nc23DuG5zdGVyIGZvcmtlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZS4gRWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB5ZGVybGlnZXJlIG1pc2x5a2tlZGUgZm9yc8O4ZyB0aWwgdmlsIGR1IGJsaXZlIGJlZHQgb20gYXQgbMOlc2UgZGluIHRlbGVmb24gb3AgdmVkIGhqw6ZscCBhZiBlbiBlLW1haWxrb250by5cblxuIFByw7h2IGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkZvcmtlcnQgcGlua29kZSB0aWwgU0lNLWtvcnQuIER1IHNrYWwgbnUga29udGFrdGUgZGl0IG1vYmlsc2Vsc2thYiBmb3IgYXQgbMOlc2UgZGluIGVuaGVkIG9wLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Rm9ya2VydCBwaW5rb2RlIHRpbCBTSU0ta29ydC4gRHUgaGFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGZvcnPDuGcgdGlsYmFnZS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAppbmRleCA3MzdmNTMzLi40MGRkZmMyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iR2ViZW4gU2llIGRlbiByaWNodGlnZW4gUFVLLUNvZGUgZWluLiBCZWkgd2llZGVyaG9sdGVuIFZlcnN1Y2hlbiB3aXJkIGRpZSBTSU0tS2FydGUgZGF1ZXJoYWZ0IGRlYWt0aXZpZXJ0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4tQ29kZXMgc3RpbW1lbiBuaWNodCDDvGJlcmVpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Ilp1IHZpZWxlIE11c3RlcnZlcnN1Y2hlIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJTaWUgaGFiZW4gSWhyZSBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBlaW5nZWdlYmVuLlxuXG5WZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iU2llIGhhYmVuIElociBQYXNzd29ydCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGVpbmdlZ2ViZW4uXG5cblZlcnN1Y2hlbiBTaWUgZXMgaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gU2VrdW5kZW4gZXJuZXV0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJTaWUgaGFiZW4gSWhyIEVudHNwZXJydW5nc211c3RlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIFxuXG5WZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRhYmxldCB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHdlaXRlcmVuIGVyZm9sZ2xvc2VuIFZlcnN1Y2hlbiB3aXJkIGRpZXNlcyBUYWJsZXQgenVyw7xja2dlc2V0enQuIERhZHVyY2ggd2VyZGVuIGFsbGUgR2Vyw6R0ZWRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGllc2VzIFRlbGVmb24genVyw7xja2dlc2V0enQuIERhZHVyY2ggd2VyZGVuIGFsbGUgR2Vyw6R0ZWRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlNpZSBoYWJlbiBJaHJlIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZWluZ2VnZWJlbi5cblxuVmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iU2llIGhhYmVuIElociBQYXNzd29ydCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZWluZ2VnZWJlbi5cblxuVmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iU2llIGhhYmVuIElociBFbnRzcGVycnVuZ3NtdXN0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIFxuXG5WZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gU2VrdW5kZW4gZXJuZXV0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUYWJsZXQgenUgZW50c3BlcnJlbi4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHdlaXRlcmVuIGVyZm9sZ2xvc2VuIFZlcnN1Y2hlbiB3aXJkIGRpZXNlcyBUYWJsZXQgenVyw7xja2dlc2V0enQuIERhZHVyY2ggd2VyZGVuIGFsbGUgR2Vyw6R0ZWRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRlbGVmb24genUgZW50c3BlcnJlbi4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHdlaXRlcmVuIGVyZm9sZ2xvc2VuIFZlcnN1Y2hlbiB3aXJkIGRpZXNlcyBUZWxlZm9uIHp1csO8Y2tnZXNldHp0LiBEYWR1cmNoIHdlcmRlbiBhbGxlIEdlcsOkdGVkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRhYmxldCB6dSBlbnRzcGVycmVuLiBEaWVzZXMgVGFibGV0IHdpcmQgbnVuIHp1csO8Y2tnZXNldHp0IHVuZCBhbGxlIEdlcsOkdGVkYXRlbiB3ZXJkZW4gZ2Vsw7ZzY2h0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRlbGVmb24genUgZW50c3BlcnJlbi4gRGllc2VzIFRlbGVmb24gd2lyZCBudW4genVyw7xja2dlc2V0enQgdW5kIGFsbGUgR2Vyw6R0ZWRhdGVuIHdlcmRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUYWJsZXQgenUgZW50c3BlcnJlbi4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkaWVzZXIgTnV0emVyIGVudGZlcm50LiBEYWR1cmNoIHdlcmRlbiBhbGxlIE51dHplcmRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGllc2VyIE51dHplciBlbnRmZXJudC4gRGFkdXJjaCB3ZXJkZW4gYWxsZSBOdXR6ZXJkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRhYmxldCB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdpcmQgZGllc2VyIE51dHplciBlbnRmZXJudC4gRGFkdXJjaCB3ZXJkZW4gYWxsZSBOdXR6ZXJkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkaWVzZXIgTnV0emVyIGVudGZlcm50LiBEYWR1cmNoIHdlcmRlbiBhbGxlIE51dHplcmRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4tbWFsIGVyZm9sZ2xvcyB2ZXJzdWNodCwgZGFzIFRhYmxldCB6dSBlbnRzcGVycmVuLiBEaWVzZXIgTnV0emVyIHdpcmQgbnVuIGVudGZlcm50IHVuZCBhbGxlIE51dHplcmRhdGVuIHdlcmRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuLiBEaWVzZXIgTnV0emVyIHdpcmQgbnVuIGVudGZlcm50IHVuZCBhbGxlIE51dHplcmRhdGVuIHdlcmRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iU2llIGhhYmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUYWJsZXQgenUgZW50c3BlcnJlbi4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkYXMgQXJiZWl0c3Byb2ZpbCBlbnRmZXJudC4gRGFkdXJjaCB3ZXJkZW4gYWxsZSBQcm9maWxkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGVsZWZvbiB6dSBlbnRzcGVycmVuLiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHdlaXRlcmVuIGVyZm9sZ2xvc2VuIFZlcnN1Y2hlbiB3aXJkIGRhcyBBcmJlaXRzcHJvZmlsIGVudGZlcm50LiBEYWR1cmNoIHdlcmRlbiBhbGxlIFByb2ZpbGRhdGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZXJmb2xnbG9zIHZlcnN1Y2h0LCBkYXMgVGFibGV0IHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkYXMgQXJiZWl0c3Byb2ZpbCBlbnRmZXJudC4gRGFkdXJjaCB3ZXJkZW4gYWxsZSBQcm9maWxkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlNpZSBoYWJlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2lyZCBkYXMgQXJiZWl0c3Byb2ZpbCBlbnRmZXJudC4gRGFkdXJjaCB3ZXJkZW4gYWxsZSBQcm9maWxkYXRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUYWJsZXQgenUgZW50c3BlcnJlbi4gRGFzIEFyYmVpdHNwcm9maWwgd2lyZCBudW4gZW50ZmVybnQgdW5kIGFsbGUgUHJvZmlsZGF0ZW4gd2VyZGVuIGdlbMO2c2NodC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJTaWUgaGFiZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LW1hbCBlcmZvbGdsb3MgdmVyc3VjaHQsIGRhcyBUZWxlZm9uIHp1IGVudHNwZXJyZW4uIERhcyBBcmJlaXRzcHJvZmlsIHdpcmQgbnVuIGVudGZlcm50IHVuZCBhbGxlIFByb2ZpbGRhdGVuIHdlcmRlbiBnZWzDtnNjaHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlNpZSBoYWJlbiBJaHIgRW50c3BlcnJ1bmdzbXVzdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LW1hbCBmYWxzY2ggZ2V6ZWljaG5ldC4gTmFjaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2VyZGVuIFNpZSBhdWZnZWZvcmRlcnQsIElociBUYWJsZXQgbWl0aGlsZmUgZWluZXMgRS1NYWlsLUtvbnRvcyB6dSBlbnRzcGVycmVuLlxuXG4gVmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBTZWt1bmRlbiBlcm5ldXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJTaWUgaGFiZW4gSWhyIEVudHNwZXJydW5nc211c3RlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGVsZWZvbiBtaXRoaWxmZSBlaW5lcyBFLU1haWwtS29udG9zIHp1IGVudHNwZXJyZW4uXG5cbiBWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2llIGhhYmVuIElociBFbnRzcGVycnVuZ3NtdXN0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1tYWwgZmFsc2NoIGdlemVpY2huZXQuIE5hY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB3ZWl0ZXJlbiBlcmZvbGdsb3NlbiBWZXJzdWNoZW4gd2VyZGVuIFNpZSBhdWZnZWZvcmRlcnQsIElociBUYWJsZXQgbWl0aGlsZmUgZWluZXMgRS1NYWlsLUtvbnRvcyB6dSBlbnRzcGVycmVuLlxuXG4gVmVyc3VjaGVuIFNpZSBlcyBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IFNla3VuZGVuIGVybmV1dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlNpZSBoYWJlbiBJaHIgRW50c3BlcnJ1bmdzbXVzdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4tbWFsIGZhbHNjaCBnZXplaWNobmV0LiBOYWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gd2VpdGVyZW4gZXJmb2xnbG9zZW4gVmVyc3VjaGVuIHdlcmRlbiBTaWUgYXVmZ2Vmb3JkZXJ0LCBJaHIgVGVsZWZvbiBtaXRoaWxmZSBlaW5lcyBFLU1haWwtS29udG9zIHp1IGVudHNwZXJyZW4uXG5cbiBWZXJzdWNoZW4gU2llIGVzIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gU2VrdW5kZW4gZXJuZXV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRmFsc2NoZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gQml0dGUgd2VuZGVuIFNpZSBzaWNoIGFuIElocmVuIE1vYmlsZnVua2FuYmlldGVyLCBkYW1pdCBlciBJaHIgR2Vyw6R0IGVudHNwZXJydC4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RmFsc2NoZXIgUElOLUNvZGUgZGVyIFNJTS1LYXJ0ZS4gU2llIGhhYmVuIG5vY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gVmVyc3VjaGUuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKaW5kZXggYjkxNTI3NS4uZGM2Y2MwNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Is6VzrnPg86xzrPOrM6zzrXPhM61IM6+zrHOvc6sIM+Ezr/OvSDOus+JzrTOuc66z4wgUFVLLiDOn865IM61z4DOsc69zrHOu86xzrzOss6xzr3PjM68zrXOvc61z4Igz4DPgc6/z4PPgM6szrjOtc65zrXPgiDOuM6xIM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOrs+Dzr/Phc69IM6/z4HOuc+Dz4TOuc66zqwgz4TOt869IM66zqzPgc+EzrEgU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLOlM61zr0gz4XPgM6sz4HPh861zrkgzrHOvc+EzrnPg8+Ezr/Ouc+Hzq/OsSDPhM+Jzr0gzrrPic60zrnOus+Ozr0gUElOIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4izqDOrM+BzrEgz4DOv867zrvOrc+CIM+Az4HOv8+Dz4DOrM64zrXOuc61z4IgzrzOv8+Ezq/Oss6/z4UiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Is6Iz4fOtc+EzrUgz4DOu863zrrPhM+Bzr/Ou86/zrPOrs+DzrXOuSDOtc+Dz4bOsc67zrzOrc69zrEgz4TOv869IM66z4nOtM65zrrPjCDPg86xz4IgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4IuIFxuXG7OlM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwgz4POtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Is6Iz4fOtc+EzrUgz4DOu863zrrPhM+Bzr/Ou86/zrPOrs+DzrXOuSDPhM6/zr0gzrrPic60zrnOus+MIM+Az4HPjM+DzrLOsc+DzrfPgiDOtc+Dz4bOsc67zrzOrc69zrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3Pgi4gXG5cbs6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4izqPPh861zrTOuc6sz4POsc+EzrUgzrXPg8+GzrHOu868zq3Ovc6xIM+Ezr8gzrzOv8+Ezq/Oss6/IM6+zrXOus67zrXOuc60z47OvM6xz4TOv8+CIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4IuIFxuXG7OlM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwgz4POtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDOtM61z4XPhM61z4HPjM67zrXPhM+AzrEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDOsc66z4zOvM6xIM6xzr3Otc+AzrnPhM+Fz4fOtc6vz4IgzrTOv866zrnOvM6tz4IsIM6xz4XPhM+MIM+Ezr8gdGFibGV0IM64zrEgz4HPhc64zrzOuc+Dz4TOtc6vIM61zrogzr3Orc6/z4UsIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4TOv8+FLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69zr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDOsc66z4zOvM6xIM6xzr3Otc+AzrnPhM+Fz4fOtc6vz4IgzrTOv866zrnOvM6tz4IsIM6xz4XPhM+MIM+Ezr8gz4TOt867zq3Phs+Jzr3OvyDOuM6xIM+Bz4XOuM68zrnPg8+EzrXOryDOtc66IM69zq3Ov8+FLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Ezr/PhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Is6Iz4fOtc+EzrUgz4DOu863zrrPhM+Bzr/Ou86/zrPOrs+DzrXOuSDOtc+Dz4bOsc67zrzOrc69zrEgz4TOv869IM66z4nOtM65zrrPjCDPg86xz4IgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gz4bOv8+Bzq3Pgi4gXG5cbs6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLOiM+HzrXPhM61IM+AzrvOt866z4TPgc6/zrvOv86zzq7Pg861zrkgz4TOv869IM66z4nOtM65zrrPjCDPgM+Bz4zPg86yzrHPg863z4IgzrXPg8+GzrHOu868zq3Ovc6xIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gz4bOv8+Bzq3Pgi4gXG5cbs6Uzr/Ous65zrzOrM+Dz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLOo8+HzrXOtM65zqzPg86xz4TOtSDOtc+Dz4bOsc67zrzOrc69zrEgz4TOvyDOvM6/z4TOr86yzr8gzr7Otc66zrvOtc65zrTPjs68zrHPhM6/z4IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CLiBcblxuzpTOv866zrnOvM6sz4PPhM61IM6+zrHOvc6sIM+DzrUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDOtM61z4XPhM61z4HPjM67zrXPhM+AzrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CIM+Hz4nPgc6vz4IgzrXPgM65z4TPhc+Hzq/OsS4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gzrHOus+MzrzOsSDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM60zr/Ous65zrzOrc+CLCDOsc+Fz4TPjCDPhM6/IHRhYmxldCDOuM6xIM+Bz4XOuM68zrnPg8+EzrXOryDOtc66IM69zq3Ov8+FLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Ezr/PhS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyDPhM63zrvOrc+Gz4nOvc6/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IM6xzrrPjM68zrEgzrHOvc61z4DOuc+Ez4XPh861zq/PgiDOtM6/zrrOuc68zq3PgiwgzrHPhc+Ez4wgz4TOvyDPhM63zrvOrc+Gz4nOvc6/IM64zrEgz4HPhc64zrzOuc+Dz4TOtc6vIM61zrogzr3Orc6/z4UsIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4TOv8+FLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDOsc+Fz4TPjCDPhM6/IHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6Rz4XPhM+MIM+Ezr8gdGFibGV0IM64zrEgz4HPhc64zrzOuc+Dz4TOtc6vIM61zrogzr3Orc6/z4UsIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4TOv8+FLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+Is6Uzr/Ous65zrzOrM+DzrHPhM61IM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gz4TOt867zq3Phs+Jzr3OvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6Rz4XPhM+MIM+Ezr8gz4TOt867zq3Phs+Jzr3OvyDOuM6xIM+Bz4XOuM68zrnPg8+EzrXOryDOtc66IM69zq3Ov8+FLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Ezr/PhS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDPhs6/z4HOrc+CIM+Hz4nPgc6vz4IgzrXPgM65z4TPhc+Hzq/OsS4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IM6xzrrPjM68zrEgzrHOvc61z4DOuc+Ez4XPh861zq/PgiDOtM6/zrrOuc68zq3PgiwgzrHPhc+Ez4zPgiDOvyDPh8+Bzq7Pg8+EzrfPgiDOuM6xIM66zrHPhM6xz4HOs863zrjOtc6vLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Hz4HOrs+Dz4TOty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyDPhM63zrvOrc+Gz4nOvc6/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4Igz4fPic+Bzq/PgiDOtc+AzrnPhM+Fz4fOr86xLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gzrHOus+MzrzOsSDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM60zr/Ous65zrzOrc+CLCDOsc+Fz4TPjM+CIM6/IM+Hz4HOrs+Dz4TOt8+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4fPgc6uz4PPhM63LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+Is6Uzr/Ous65zrzOrM+DzrHPhM61IM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IM6xzrrPjM68zrEgzrHOvc61z4DOuc+Ez4XPh861zq/PgiDOtM6/zrrOuc68zq3PgiwgzrHPhc+Ez4zPgiDOvyDPh8+Bzq7Pg8+EzrfPgiDOuM6xIM66zrHPhM6xz4HOs863zrjOtc6vLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Hz4HOrs+Dz4TOty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyDPhM63zrvOrc+Gz4nOvc6/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IM6xzrrPjM68zrEgzrHOvc61z4DOuc+Ez4XPh861zq/PgiDOtM6/zrrOuc68zq3PgiwgzrHPhc+Ez4zPgiDOvyDPh8+Bzq7Pg8+EzrfPgiDOuM6xIM66zrHPhM6xz4HOs863zrjOtc6vLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Hz4HOrs+Dz4TOty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+Is6Uzr/Ous65zrzOrM+DzrHPhM61IM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDPhs6/z4HOrc+CIM+Hz4nPgc6vz4IgzrXPgM65z4TPhc+Hzq/OsS4gzpHPhc+Ez4zPgiDOvyDPh8+Bzq7Pg8+EzrfPgiDOuM6xIM66zrHPhM6xz4HOs863zrjOtc6vLCDOus6xzrkgzq3PhM+DzrkgzrjOsSDOtM65zrHOs8+BzrHPhs6/z43OvSDPjM67zrEgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+Hz4HOrs+Dz4TOty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69zr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4Igz4fPic+Bzq/PgiDOtc+AzrnPhM+Fz4fOr86xLiDOkc+Fz4TPjM+CIM6/IM+Hz4HOrs+Dz4TOt8+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4fPgc6uz4PPhM63LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Is6Uzr/Ous65zrzOrM+DzrHPhM61IM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4Igz4fPic+Bzq/PgiDOtc+AzrnPhM+Fz4fOr86xLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gzrHOus+MzrzOsSDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM60zr/Ous65zrzOrc+CLCDPhM6/IM+Az4HOv8+Gzq/OuyDOtc+BzrPOsc+Dzq/Osc+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4DPgc6/z4bOr867LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69zr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6czrXPhM6sIM6xz4DPjCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDOsc66z4zOvM6xIM6xzr3Otc+AzrnPhM+Fz4fOtc6vz4IgzrTOv866zrnOvM6tz4IsIM+Ezr8gz4DPgc6/z4bOr867IM61z4HOs86xz4POr86xz4IgzrjOsSDOus6xz4TOsc+BzrPOt864zrXOrywgzrrOsc65IM6tz4TPg865IM64zrEgzrTOuc6xzrPPgc6xz4bOv8+Nzr0gz4zOu86xIM+EzrEgzrTOtc60zr/OvM6tzr3OsSDPgM+Bzr/Phs6vzrsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CIM+Hz4nPgc6vz4IgzrXPgM65z4TPhc+Hzq/OsS4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gzrHOus+MzrzOsSDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM60zr/Ous65zrzOrc+CLCDPhM6/IM+Az4HOv8+Gzq/OuyDOtc+BzrPOsc+Dzq/Osc+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4DPgc6/z4bOr867LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLOlM6/zrrOuc68zqzPg86xz4TOtSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM6/IM+EzrfOu86tz4bPic69zr8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CIM+Hz4nPgc6vz4IgzrXPgM65z4TPhc+Hzq/OsS4gzpzOtc+EzqwgzrHPgM+MIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gzrHOus+MzrzOsSDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM60zr/Ous65zrzOrc+CLCDPhM6/IM+Az4HOv8+Gzq/OuyDOtc+BzrPOsc+Dzq/Osc+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4DPgc6/z4bOr867LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4izpTOv866zrnOvM6sz4POsc+EzrUgzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IM+Gzr/Pgc6tz4Igz4fPic+Bzq/PgiDOtc+AzrnPhM+Fz4fOr86xLiDOpM6/IM+Az4HOv8+Gzq/OuyDOtc+BzrPOsc+Dzq/Osc+CIM64zrEgzrrOsc+EzrHPgc6zzrfOuM61zq8sIM66zrHOuSDOrc+Ez4POuSDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM+MzrvOsSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4DPgc6/z4bOr867LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Is6Uzr/Ous65zrzOrM+DzrHPhM61IM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gz4TOt867zq3Phs+Jzr3OvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gz4bOv8+Bzq3PgiDPh8+Jz4HOr8+CIM61z4DOuc+Ez4XPh86vzrEuIM6kzr8gz4DPgc6/z4bOr867IM61z4HOs86xz4POr86xz4IgzrjOsSDOus6xz4TOsc+BzrPOt864zrXOrywgzrrOsc65IM6tz4TPg865IM64zrEgzrTOuc6xzrPPgc6xz4bOv8+Nzr0gz4zOu86xIM+EzrEgzrTOtc60zr/OvM6tzr3OsSDPgM+Bzr/Phs6vzrsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Is6jz4fOtc60zrnOrM+DzrHPhM61IM+Ezr8gzrzOv8+Ezq/Oss6/IM6+zrXOus67zrXOuc60z47OvM6xz4TOv8+CIM61z4PPhs6xzrvOvM6tzr3OsSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDPhs6/z4HOrc+CLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gzrHOvc61z4DOuc+Ez4XPh861zq/PgiDPgM+Bzr/Pg8+AzqzOuM61zrnOtc+CIM6xzrrPjM68zrcsIM64zrEgz4POsc+CIM62zrfPhM63zrjOtc6vIM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gdGFibGV0IM+DzrHPgiDOvM61IM+Ezrcgz4fPgc6uz4POtyDOtc69z4zPgiDOu86/zrPOsc+BzrnOsc+DzrzOv8+NIM63zrvOtc66z4TPgc6/zr3Ouc66zr/PjSDPhM6xz4fPhc60z4HOv868zrXOr86/z4UuXG5cbiDOlM6/zrrOuc68zqzPg8+EzrUgzr3OsSDPg8+Fzr3OtM61zrjOtc6vz4TOtSDOvs6xzr3OrCDPg861IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Is6jz4fOtc60zrnOrM+DzrHPhM61IM+Ezr8gzrzOv8+Ezq/Oss6/IM6+zrXOus67zrXOuc60z47OvM6xz4TOv8+CIM61z4PPhs6xzrvOvM6tzr3OsSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDPhs6/z4HOrc+CLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gzrHOvc61z4DOuc+Ez4XPh861zq/PgiDPgM+Bzr/Pg8+AzqzOuM61zrnOtc+CIM6xzrrPjM68zrcsIM64zrEgz4POsc+CIM62zrfPhM63zrjOtc6vIM69zrEgzr7Otc66zrvOtc65zrTPjs+DzrXPhM61IM+Ezr8gz4TOt867zq3Phs+Jzr3PjCDPg86xz4IgzrzOtSDPhM63IM+Hz4HOrs+DzrcgzrXOvc+Mz4IgzrvOv86zzrHPgc65zrHPg868zr/PjSDOt867zrXOus+Ez4HOv869zrnOus6/z40gz4TOsc+Hz4XOtM+Bzr/OvM61zq/Ov8+FLlxuXG4gzpTOv866zrnOvM6sz4PPhM61IM6+zrHOvc6sIM+DzrUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLOo8+HzrXOtM65zqzPg86xz4TOtSDPhM6/IM68zr/PhM6vzrLOvyDOvs61zrrOu861zrnOtM+OzrzOsc+Ezr/PgiDOtc+Dz4bOsc67zrzOrc69zrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM+Az4HOv8+Dz4DOrM64zrXOuc61z4IgzrHOus+MzrzOtywgzrjOsSDPg86xz4IgzrbOt8+EzrfOuM61zq8gzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyB0YWJsZXQgz4POsc+CIM68zrUgz4TOtyDPh8+Bzq7Pg863IM61zr3PjM+CIM67zr/Os86xz4HOuc6xz4POvM6/z40gzrfOu861zrrPhM+Bzr/Ovc65zrrOv8+NIM+EzrHPh8+FzrTPgc6/zrzOtc6vzr/PhS5cblxuIM6Uzr/Ous65zrzOrM+Dz4TOtSDOvc6xIM+Dz4XOvc60zrXOuM61zq/PhM61IM6+zrHOvc6sIM+DzrUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDOtM61z4XPhM61z4HPjM67zrXPgM+EzrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLOo8+HzrXOtM65zqzPg86xz4TOtSDPhM6/IM68zr/PhM6vzrLOvyDOvs61zrrOu861zrnOtM+OzrzOsc+Ezr/PgiDOtc+Dz4bOsc67zrzOrc69zrEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDPhs6/z4HOrc+CLiDOnM61z4TOrCDOsc+Az4wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDOsc69zrXPgM65z4TPhc+HzrXOr8+CIM+Az4HOv8+Dz4DOrM64zrXOuc61z4IgzrHOus+MzrzOtywgzrjOsSDPg86xz4IgzrbOt8+EzrfOuM61zq8gzr3OsSDOvs61zrrOu861zrnOtM+Oz4POtc+EzrUgz4TOvyDPhM63zrvOrc+Gz4nOvc+MIM+DzrHPgiDOvM61IM+Ezrcgz4fPgc6uz4POtyDOtc69z4zPgiDOu86/zrPOsc+BzrnOsc+DzrzOv8+NIM63zrvOtc66z4TPgc6/zr3Ouc66zr/PjSDPhM6xz4fPhc60z4HOv868zrXOr86/z4UuXG5cbiDOlM6/zrrOuc68zqzPg8+EzrUgzr7Osc69zqwgz4POtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Is6bzrHOvc64zrHPg868zq3Ovc6/z4IgzrrPic60zrnOus+Mz4IgUElOIM66zqzPgc+EzrHPgiBTSU0uIM6YzrEgz4DPgc6tz4DOtc65IM69zrEgzrXPgM65zrrOv865zr3Pic69zq7Pg861z4TOtSDOvM61IM+Ezr/OvSDPgM6sz4HOv8+Hzr8gzrrOuc69zrfPhM6uz4Igz4TOt867zrXPhs+Jzr3Or86xz4Igz4POsc+CIM6zzrnOsSDOvc6xIM6+zrXOus67zrXOuc60z47Pg861z4TOtSDPhM63IM+Dz4XPg866zrXPhc6uIM+DzrHPgi4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+zpvOsc69zrjOsc+DzrzOrc69zr/PgiDOus+JzrTOuc66z4zPgiBQSU4gzrrOrM+Bz4TOsc+CIFNJTS4gzpHPgM6/zrzOrc69zr/Phc69IM6szrvOu861z4IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gz4DPgc6/z4PPgM6szrjOtc65zrXPgi4gPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAppbmRleCAwOTc5ZDlhLi41YWVjMGU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJSZS1lbnRlciB0aGUgY29ycmVjdCBQVUsgY29kZS4gUmVwZWF0ZWQgYXR0ZW1wdHMgd2lsbCBwZXJtYW5lbnRseSBkaXNhYmxlIHRoZSBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBjb2RlcyBkbyBub3QgbWF0Y2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUb28gbWFueSBwYXR0ZXJuIGF0dGVtcHRzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSB0eXBlZCB5b3VyIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSB0eXBlZCB5b3VyIHBhc3N3b3JkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHRhYmxldCB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyBwaG9uZSB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSB0eXBlZCB5b3VyIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBwYXNzd29yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB0YWJsZXQgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHBob25lIHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhpcyB0YWJsZXQgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhpcyBwaG9uZSB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciB0YWJsZXQgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHBob25lIHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciB0YWJsZXQgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHBob25lIHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iSW5jb3JyZWN0IFNJTSBQSU4gY29kZTsgeW91IG11c3Qgbm93IGNvbnRhY3QgeW91ciBvcGVyYXRvciB0byB1bmxvY2sgeW91ciBkZXZpY2UuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkluY29ycmVjdCBTSU0gUElOIGNvZGUsIHlvdSBoYXZlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHJlbWFpbmluZyBhdHRlbXB0cy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCmluZGV4IDA5NzlkOWEuLjVhZWMwZTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlJlLWVudGVyIHRoZSBjb3JyZWN0IFBVSyBjb2RlLiBSZXBlYXRlZCBhdHRlbXB0cyB3aWxsIHBlcm1hbmVudGx5IGRpc2FibGUgdGhlIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIGNvZGVzIGRvIG5vdCBtYXRjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRvbyBtYW55IHBhdHRlcm4gYXR0ZW1wdHMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgcGFzc3dvcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdGFibGV0IHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHBob25lIHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSB0eXBlZCB5b3VyIHBhc3N3b3JkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHRhYmxldCB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgcGhvbmUgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGlzIHRhYmxldCB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGlzIHBob25lIHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0aW1lcy4gVGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHRhYmxldCB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgeW91IHdpbGwgYmUgYXNrZWQgdG8gdW5sb2NrIHlvdXIgcGhvbmUgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHRhYmxldCB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgeW91IHdpbGwgYmUgYXNrZWQgdG8gdW5sb2NrIHlvdXIgcGhvbmUgdXNpbmcgYW4gZW1haWwgYWNjb3VudC5cblxuIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJJbmNvcnJlY3QgU0lNIFBJTiBjb2RlOyB5b3UgbXVzdCBub3cgY29udGFjdCB5b3VyIG9wZXJhdG9yIHRvIHVubG9jayB5b3VyIGRldmljZS4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+SW5jb3JyZWN0IFNJTSBQSU4gY29kZSwgeW91IGhhdmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcmVtYWluaW5nIGF0dGVtcHRzLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggMDk3OWQ5YS4uNWFlYzBlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUmUtZW50ZXIgdGhlIGNvcnJlY3QgUFVLIGNvZGUuIFJlcGVhdGVkIGF0dGVtcHRzIHdpbGwgcGVybWFuZW50bHkgZGlzYWJsZSB0aGUgU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4gY29kZXMgZG8gbm90IG1hdGNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVG9vIG1hbnkgcGF0dGVybiBhdHRlbXB0cyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBwYXNzd29yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBcblxuVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB0YWJsZXQgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgcGhvbmUgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IllvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgcGFzc3dvcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdGFibGV0IHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyBwaG9uZSB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoaXMgdGFibGV0IHdpbGwgYmUgcmVzZXQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBpdHMgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoaXMgcGhvbmUgd2lsbCBiZSByZXNldCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIGl0cyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhpcyB1c2VyIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHVzZXIgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsIHRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgdGhlIHdvcmsgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCBwcm9maWxlIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBUaGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdGltZXMuIFRoZSB3b3JrIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgcHJvZmlsZSBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgeW91IHdpbGwgYmUgYXNrZWQgdG8gdW5sb2NrIHlvdXIgdGFibGV0IHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdGltZXMuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciBwaG9uZSB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IllvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywgeW91IHdpbGwgYmUgYXNrZWQgdG8gdW5sb2NrIHlvdXIgdGFibGV0IHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbiBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLiBBZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLCB5b3Ugd2lsbCBiZSBhc2tlZCB0byB1bmxvY2sgeW91ciBwaG9uZSB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4gVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2Vjb25kcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkluY29ycmVjdCBTSU0gUElOIGNvZGU7IHlvdSBtdXN0IG5vdyBjb250YWN0IHlvdXIgb3BlcmF0b3IgdG8gdW5sb2NrIHlvdXIgZGV2aWNlLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5JbmNvcnJlY3QgU0lNIFBJTiBjb2RlLCB5b3UgaGF2ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiByZW1haW5pbmcgYXR0ZW1wdHMuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAppbmRleCAwYmVjYzY2Li5iYmZkYTE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWdWVsdmUgYSBpbmdyZXNhciBlbCBjw7NkaWdvIFBVSyBjb3JyZWN0by4gU2kgaW5ncmVzYXMgdW4gY8OzZGlnbyBpbmNvcnJlY3RvIHZhcmlhcyB2ZWNlcywgc2UgaW5oYWJpbGl0YXLDoSBsYSB0YXJqZXRhIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTG9zIGPDs2RpZ29zIFBJTiBubyBjb2luY2lkZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iRGVtYXNpYWRvcyBpbnRlbnRvcyBpbmNvcnJlY3RvcyBkZSBpbmdyZXNhciBlbCBwYXRyw7NuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJFc2NyaWJpc3RlIGluY29ycmVjdGFtZW50ZSB0dSBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5WdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJFc2NyaWJpc3RlIGluY29ycmVjdGFtZW50ZSB0dSBjb250cmFzZcOxYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcy4gXG5cblZ1ZWx2ZSBhIGludGVudGFybG8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkRpYnVqYXN0ZSBpbmNvcnJlY3RhbWVudGUgdHUgcGF0csOzbiBkZSBkZXNibG9xdWVvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBcblxuVnVlbHZlIGEgaW50ZW50YXJsbyBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGxhIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgcmVzdGFibGVjZXLDoSBsYSB0YWJsZXQgeSBzZSBwZXJkZXLDoW4gdG9kb3MgbG9zIGRhdG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgcmVzdGFibGVjZXLDoSBlbCB0ZWzDqWZvbm8geSBzZSBwZXJkZXLDoW4gdG9kb3MgbG9zIGRhdG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iRXNjcmliaXN0ZSBpbmNvcnJlY3RhbWVudGUgdHUgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5WdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkVzY3JpYmlzdGUgaW5jb3JyZWN0YW1lbnRlIHR1IGNvbnRyYXNlw7FhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5WdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkRpYnVqYXN0ZSBpbmNvcnJlY3RhbWVudGUgdHUgcGF0csOzbiBkZSBkZXNibG9xdWVvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5WdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iSW50ZW50YXN0ZSBkZXNibG9xdWVhciBsYSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSByZXN0YWJsZWNlcsOhIGxhIHRhYmxldCB5IHNlIHBlcmRlcsOhbiB0b2RvcyBsb3MgZGF0b3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgZWwgdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgbWFuZXJhIGluY29ycmVjdGEuIERlc3B1w6lzIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgcmVzdGFibGVjZXLDoSBlbCB0ZWzDqWZvbm8geSBzZSBwZXJkZXLDoW4gdG9kb3MgbG9zIGRhdG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGxhIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgbWFuZXJhIGluY29ycmVjdGEuIFNlIHJlc3RhYmxlY2Vyw6EgbGEgdGFibGV0IHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgbWFuZXJhIGluY29ycmVjdGEuIFNlIHJlc3RhYmxlY2Vyw6EgZWwgdGVsw6lmb25vIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGxhIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCB1c3VhcmlvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSB1c3VhcmlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCB1c3VhcmlvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSB1c3VhcmlvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgbGEgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgbWFuZXJhIGluY29ycmVjdGEuIERlc3B1w6lzIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCB1c3VhcmlvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSB1c3VhcmlvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJJbnRlbnRhc3RlIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBEZXNwdcOpcyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIGVsaW1pbmFyw6EgZWwgdXN1YXJpbyB5IHNlIHBlcmRlcsOhbiB0b2RvcyBsb3MgZGF0b3MgZGUgdXN1YXJpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgbGEgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gU2UgZWxpbWluYXLDoSBlbCB1c3VhcmlvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSB1c3VhcmlvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgZWwgdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gU2UgZWxpbWluYXLDoSBlbCB1c3VhcmlvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSB1c3VhcmlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgbGEgdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBEZXNwdcOpcyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGVsIHBlcmZpbCBkZSB0cmFiYWpvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSBwZXJmaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgZWwgdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBEZXNwdcOpcyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGVsIHBlcmZpbCBkZSB0cmFiYWpvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSBwZXJmaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSW50ZW50YXN0ZSBkZXNibG9xdWVhciBsYSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcyBkZSBtYW5lcmEgaW5jb3JyZWN0YS4gRGVzcHXDqXMgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGVsIHBlcmZpbCBkZSB0cmFiYWpvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSBwZXJmaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkludGVudGFzdGUgZGVzYmxvcXVlYXIgZWwgdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgbWFuZXJhIGluY29ycmVjdGEuIERlc3B1w6lzIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCBwZXJmaWwgZGUgdHJhYmFqbyB5IHNlIHBlcmRlcsOhbiB0b2RvcyBsb3MgZGF0b3MgZGUgcGVyZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iSW50ZW50YXN0ZSBkZXNibG9xdWVhciBsYSB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBTZSBlbGltaW5hcsOhIGVsIHBlcmZpbCBkZSB0cmFiYWpvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSBwZXJmaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iSW50ZW50YXN0ZSBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIG1hbmVyYSBpbmNvcnJlY3RhLiBTZSBlbGltaW5hcsOhIGVsIHBlcmZpbCBkZSB0cmFiYWpvIHkgc2UgcGVyZGVyw6FuIHRvZG9zIGxvcyBkYXRvcyBkZSBwZXJmaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkRpYnVqYXN0ZSBpbmNvcnJlY3RhbWVudGUgdHUgcGF0csOzbiBkZSBkZXNibG9xdWVvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBMdWVnbyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSB0ZSBzb2xpY2l0YXLDoSBxdWUgZGVzYmxvcXVlZXMgdHUgdGFibGV0IG1lZGlhbnRlIGVsIHVzbyBkZSB1bmEgY3VlbnRhIGRlIGNvcnJlby5cblxuIFZ1ZWx2ZSBhIGludGVudGFybG8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEaWJ1amFzdGUgaW5jb3JyZWN0YW1lbnRlIHR1IHBhdHLDs24gZGUgZGVzYmxvcXVlbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcy4gTHVlZ28gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgdGUgc29saWNpdGFyw6EgcXVlIGRlc2Jsb3F1ZWVzIHR1IGRpc3Bvc2l0aXZvIG1lZGlhbnRlIGVsIHVzbyBkZSB1bmEgY3VlbnRhIGRlIGNvcnJlby5cblxuIFZ1ZWx2ZSBhIGludGVudGFybG8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkRpYnVqYXN0ZSBpbmNvcnJlY3RhbWVudGUgdHUgcGF0csOzbiBkZSBkZXNibG9xdWVvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIEx1ZWdvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgdGUgc29saWNpdGFyw6EgcXVlIGRlc2Jsb3F1ZWVzIHR1IHRhYmxldCBtZWRpYW50ZSBlbCB1c28gZGUgdW5hIGN1ZW50YSBkZSBjb3JyZW8uXG5cbiBWdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEaWJ1amFzdGUgaW5jb3JyZWN0YW1lbnRlIHR1IHBhdHLDs24gZGUgZGVzYmxvcXVlbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzLiBMdWVnbyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIHRlIHNvbGljaXRhcsOhIHF1ZSBkZXNibG9xdWVlcyB0dSBkaXNwb3NpdGl2byBtZWRpYW50ZSBlbCB1c28gZGUgdW5hIGN1ZW50YSBkZSBjb3JyZW8uXG5cbiBWdWVsdmUgYSBpbnRlbnRhcmxvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJFbCBjw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBlcyBpbmNvcnJlY3RvLiBEZWJlcyBjb211bmljYXJ0ZSBjb24gZWwgcHJvdmVlZG9yIHBhcmEgZGVzYmxvcXVlYXIgZWwgZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkVsIGPDs2RpZ28gUElOIGRlIGxhIHRhcmpldGEgU0lNIGVzIGluY29ycmVjdG8uIFRpZW5lcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBtw6FzLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCmluZGV4IDZmMzdkOGIuLmQzMjljMmFiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iVnVlbHZlIGEgaW50cm9kdWNpciBlbCBjw7NkaWdvIFBVSyBjb3JyZWN0by4gU2kgaW50cm9kdWNlcyB1biBjw7NkaWdvIGluY29ycmVjdG8gdmFyaWFzIHZlY2VzLCBzZSBpbmhhYmlsaXRhcsOhIGxhIHRhcmpldGEgU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJMb3MgY8OzZGlnb3MgUElOIG5vIGNvaW5jaWRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJEZW1hc2lhZG9zIGludGVudG9zIGluY29ycmVjdG9zIGRlIGNyZWFyIGVsIHBhdHLDs24iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkhhcyBpbnRyb2R1Y2lkbyB1biBjw7NkaWdvIFBJTiBpbmNvcnJlY3RvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBcblxuSW50w6ludGFsbyBkZSBudWV2byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iSGFzIGludHJvZHVjaWRvIHVuYSBjb250cmFzZcOxYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBcblxuSW50w6ludGFsbyBkZSBudWV2byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSGFzIGZhbGxhZG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMgYWwgZGlidWphciB0dSBwYXRyw7NuIGRlIGRlc2Jsb3F1ZW8uIFxuXG5JbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkhhcyBpbnRlbnRhZG8gZGVzYmxvcXVlYXIgZWwgdGFibGV0IGRlIGZvcm1hIGluY29ycmVjdGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIFNpIHNlIHByb2R1Y2VuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIHJlc3RhYmxlY2Vyw6EgZWwgdGFibGV0LCBsbyBxdWUgYm9ycmFyw6EgdG9kb3Mgc3VzIGRhdG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBTaSBzZSBwcm9kdWNlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSByZXN0YWJsZWNlcsOhIGVsIHRlbMOpZm9ubywgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkhhcyBpbnRyb2R1Y2lkbyB1biBjw7NkaWdvIFBJTiBpbmNvcnJlY3RvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5JbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkhhcyBpbnRyb2R1Y2lkbyB1bmEgY29udHJhc2XDsWEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzLiBcblxuSW50w6ludGFsbyBkZSBudWV2byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJIYXMgZmFsbGFkbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGFsIGRpYnVqYXIgdHUgcGF0csOzbiBkZSBkZXNibG9xdWVvLiBcblxuSW50w6ludGFsbyBkZSBudWV2byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkhhcyBpbnRlbnRhZG8gZGVzYmxvcXVlYXIgZWwgdGFibGV0IGRlIGZvcm1hIGluY29ycmVjdGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcy4gU2kgc2UgcHJvZHVjZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSByZXN0YWJsZWNlcsOhIGVsIHRhYmxldCwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSGFzIGludGVudGFkbyBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8gZGUgZm9ybWEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzLiBTaSBzZSBwcm9kdWNlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIHJlc3RhYmxlY2Vyw6EgZWwgdGVsw6lmb25vLCBsbyBxdWUgYm9ycmFyw6EgdG9kb3Mgc3VzIGRhdG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRhYmxldCBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcy4gRXN0ZSB0YWJsZXQgc2UgZWxpbWluYXLDoSwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcy4gRXN0ZSB0ZWzDqWZvbm8gc2UgZWxpbWluYXLDoSwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRhYmxldCBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBTaSBzZSBwcm9kdWNlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGEgZXN0ZSB1c3VhcmlvLCBsbyBxdWUgYm9ycmFyw6EgdG9kb3Mgc3VzIGRhdG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBTaSBzZSBwcm9kdWNlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGEgZXN0ZSB1c3VhcmlvLCBsbyBxdWUgYm9ycmFyw6EgdG9kb3Mgc3VzIGRhdG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkhhcyBpbnRlbnRhZG8gZGVzYmxvcXVlYXIgZWwgdGFibGV0IGRlIGZvcm1hIGluY29ycmVjdGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcy4gU2kgc2UgcHJvZHVjZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FzLCBzZSBlbGltaW5hcsOhIGEgZXN0ZSB1c3VhcmlvLCBsbyBxdWUgYm9ycmFyw6EgdG9kb3Mgc3VzIGRhdG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFNpIHNlIHByb2R1Y2VuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBhIGVzdGUgdXN1YXJpbywgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkhhcyBpbnRlbnRhZG8gZGVzYmxvcXVlYXIgZWwgdGFibGV0IGRlIGZvcm1hIGluY29ycmVjdGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBFc3RlIHVzdWFyaW8gc2UgZWxpbWluYXLDoSwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcy4gRXN0ZSB1c3VhcmlvIHNlIGVsaW1pbmFyw6EsIGxvIHF1ZSBib3JyYXLDoSB0b2RvcyBzdXMgZGF0b3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSGFzIGludGVudGFkbyBkZXNibG9xdWVhciBlbCB0YWJsZXQgZGUgZm9ybWEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcy4gU2kgc2UgcHJvZHVjZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCBwZXJmaWwgZGUgdHJhYmFqbywgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSGFzIGludGVudGFkbyBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8gZGUgZm9ybWEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcy4gU2kgc2UgcHJvZHVjZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCBwZXJmaWwgZGUgdHJhYmFqbywgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRhYmxldCBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFNpIHNlIHByb2R1Y2VuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhcywgc2UgZWxpbWluYXLDoSBlbCBwZXJmaWwgZGUgdHJhYmFqbywgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSGFzIGludGVudGFkbyBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8gZGUgZm9ybWEgaW5jb3JyZWN0YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzLiBTaSBzZSBwcm9kdWNlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoXMsIHNlIGVsaW1pbmFyw6EgZWwgcGVyZmlsIGRlIHRyYWJham8sIGxvIHF1ZSBib3JyYXLDoSB0b2RvcyBzdXMgZGF0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRhYmxldCBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcy4gRWwgcGVyZmlsIGRlIHRyYWJham8gc2UgZWxpbWluYXLDoSwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJIYXMgaW50ZW50YWRvIGRlc2Jsb3F1ZWFyIGVsIHRlbMOpZm9ubyBkZSBmb3JtYSBpbmNvcnJlY3RhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZWNlcy4gRWwgcGVyZmlsIGRlIHRyYWJham8gc2UgZWxpbWluYXLDoSwgbG8gcXVlIGJvcnJhcsOhIHRvZG9zIHN1cyBkYXRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iSGFzIGZhbGxhZG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMgYWwgZGlidWphciBlbCBwYXRyw7NuIGRlIGRlc2Jsb3F1ZW8uIFNpIGZhbGxhcyBvdHJhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB2ZWNlcywgZGViZXLDoXMgdXNhciB1bmEgY3VlbnRhIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gcGFyYSBkZXNibG9xdWVhciBlbCB0YWJsZXQuXG5cbiBJbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSGFzIGZhbGxhZG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMgYWwgZGlidWphciBlbCBwYXRyw7NuIGRlIGRlc2Jsb3F1ZW8uIFNpIGZhbGxhcyBvdHJhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB2ZWNlcywgZGViZXLDoXMgdXNhciB1bmEgY3VlbnRhIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gcGFyYSBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8uXG5cbiBJbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJIYXMgZmFsbGFkbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGFsIGRpYnVqYXIgZWwgcGF0csOzbiBkZSBkZXNibG9xdWVvLiBTaSBmYWxsYXMgb3RyYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB2ZWNlcywgZGViZXLDoXMgdXNhciB1bmEgY3VlbnRhIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gcGFyYSBkZXNibG9xdWVhciBlbCB0YWJsZXQuXG5cbiBJbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJIYXMgZmFsbGFkbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGFsIGRpYnVqYXIgZWwgcGF0csOzbiBkZSBkZXNibG9xdWVvLiBTaSBmYWxsYXMgb3RyYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB2ZWNlcywgZGViZXLDoXMgdXNhciB1bmEgY3VlbnRhIGRlIGNvcnJlbyBlbGVjdHLDs25pY28gcGFyYSBkZXNibG9xdWVhciBlbCB0ZWzDqWZvbm8uXG5cbiBJbnTDqW50YWxvIGRlIG51ZXZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBEZWJlcyBwb25lcnRlIGVuIGNvbnRhY3RvIGNvbiB0dSBvcGVyYWRvciBwYXJhIGRlc2Jsb3F1ZWFyIGVsIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Dw7NkaWdvIFBJTiBkZSBsYSB0YXJqZXRhIFNJTSBpbmNvcnJlY3RvLiBUZSBxdWVkYW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCA4OWZmYmRlLi5lM2FkMzNhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJTaXNlc3RhZ2UgdXVlc3RpIMO1aWdlIFBVSy1rb29kLiBLb3JkdXZrYXRzZXRlIGtvcnJhbCBrZWVsYXRha3NlIFNJTSBqw6TDpGRhdmFsdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLWtvb2RpZCBlaSBvbGUgdmFzdGF2dXNlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkxpaWdhIHBhbGp1IG11c3RyaWthdHNlaWQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ik9sZXRlIFBJTi1rb29kaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHNpc2VzdGFudWQuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdCB1dWVzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ik9sZXRlIHBhcm9vbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLiBcblxuUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS5cblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSB0YWh2ZWxhcnZ1dGl0IGF2YWRhLiBQw6RyYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCB0YWh2ZWxhcnZ1dGkgbMOkaHRlc3RhdGFrc2UgamEga8O1aWsgc2VsbGUgYW5kbWVkIGt1c3R1dGF0YWtzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGVsZWZvbmkgYXZhZGEuIFDDpHJhc3QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHRlbGVmb24gbMOkaHRlc3RhdGFrc2UgamEga8O1aWsgc2VsbGUgYW5kbWVkIGt1c3R1dGF0YWtzZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ik9sZXRlIFBJTi1rb29kaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgc2lzZXN0YW51ZC5cblxuUHJvb3ZpZ2UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QgdXVlc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0ZSBwYXJvb2xpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSBzaXNlc3RhbnVkLiBcblxuUHJvb3ZpZ2UgdXVlc3RpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuXG5cblByb292aWdlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0IHV1ZXN0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRhaHZlbGFydnV0aXQgYXZhZGEuIFDDpHJhc3QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgdGFodmVsYXJ2dXRpIGzDpGh0ZXN0YXRha3NlIGphIGvDtWlrIHNlbGxlIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ik9sZXRlIHDDvMO8ZG51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGVsZWZvbmkgYXZhZGEuIFDDpHJhc3QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQgdGVsZWZvbiBsw6RodGVzdGF0YWtzZSBqYSBrw7VpayBzZWxsZSBhbmRtZWQga3VzdHV0YXRha3NlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGFodmVsYXJ2dXRpdCBhdmFkYS4gVGFodmVsYXJ2dXRpIGzDpGh0ZXN0YXRha3NlIGphIGvDtWlrIHNlbGxlIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRlbGVmb25pIGF2YWRhLiBUZWxlZm9uIGzDpGh0ZXN0YXRha3NlIGphIGvDtWlrIHNlbGxlIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGFodmVsYXJ2dXRpdCBhdmFkYS4gUMOkcmFzdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQga2FzdXRhamEgZWVtYWxkYXRha3NlIGphIGvDtWlrIGthc3V0YWphIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ik9sZXRlIHDDvMO8ZG51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRlbGVmb25pIGF2YWRhLiBQw6RyYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBrYXN1dGFqYSBlZW1hbGRhdGFrc2UgamEga8O1aWsga2FzdXRhamEgYW5kbWVkIGt1c3R1dGF0YWtzZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRhaHZlbGFydnV0aXQgYXZhZGEuIFDDpHJhc3QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQga2FzdXRhamEgZWVtYWxkYXRha3NlIGphIGvDtWlrIGthc3V0YWphIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ik9sZXRlIHDDvMO8ZG51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGVsZWZvbmkgYXZhZGEuIFDDpHJhc3QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlYmHDtW5uZXN0dW51ZCBrYXRzZXQga2FzdXRhamEgZWVtYWxkYXRha3NlIGphIGvDtWlrIGthc3V0YWphIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGFodmVsYXJ2dXRpdCBhdmFkYS4gS2FzdXRhamEgZWVtYWxkYXRha3NlIGphIGvDtWlrIGthc3V0YWphIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRlbGVmb25pIGF2YWRhLiBLYXN1dGFqYSBlZW1hbGRhdGFrc2UgamEga8O1aWsga2FzdXRhamEgYW5kbWVkIGt1c3R1dGF0YWtzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSB0YWh2ZWxhcnZ1dGl0IGF2YWRhLiBQw6RyYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCB0w7bDtnByb2ZpaWwgZWVtYWxkYXRha3NlIGphIGvDtWlrIHByb2ZpaWxpIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ik9sZXRlIHDDvMO8ZG51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpIHRlbGVmb25pIGF2YWRhLiBQw6RyYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCB0w7bDtnByb2ZpaWwgZWVtYWxkYXRha3NlIGphIGvDtWlrIHByb2ZpaWxpIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSB0YWh2ZWxhcnZ1dGl0IGF2YWRhLiBQw6RyYXN0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHTDtsO2cHJvZmlpbCBlZW1hbGRhdGFrc2UgamEga8O1aWsgcHJvZmlpbGkgYW5kbWVkIGt1c3R1dGF0YWtzZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iT2xldGUgcMO8w7xkbnVkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSB0ZWxlZm9uaSBhdmFkYS4gUMOkcmFzdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCB0w7bDtnByb2ZpaWwgZWVtYWxkYXRha3NlIGphIGvDtWlrIHByb2ZpaWxpIGFuZG1lZCBrdXN0dXRhdGFrc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJPbGV0ZSBww7zDvGRudWQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkgdGFodmVsYXJ2dXRpdCBhdmFkYS4gVMO2w7Zwcm9maWlsIGVlbWFsZGF0YWtzZSBqYSBrw7VpayBwcm9maWlsaSBhbmRtZWQga3VzdHV0YXRha3NlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Ik9sZXRlIHDDvMO8ZG51ZCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aSB0ZWxlZm9uaSBhdmFkYS4gVMO2w7Zwcm9maWlsIGVlbWFsZGF0YWtzZSBqYSBrw7VpayBwcm9maWlsaSBhbmRtZWQga3VzdHV0YXRha3NlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrb3JkYSB2YWxlc3RpLiBQw6RyYXN0IHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSm9vbmlzdGFzaXRlIG9tYSBhdmFtaXNtdXN0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ikpvb25pc3Rhc2l0ZSBvbWEgYXZhbWlzbXVzdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga29yZGEgdmFsZXN0aS4gUMOkcmFzdCB2ZWVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZWJhw7VubmVzdHVudWQga2F0c2V0IHBhbHV0YWtzZSB0ZWlsIHRhaHZlbGFydnV0aSBhdmFkYSBtZWlsaWtvbnRvZ2EuXG5cbiBQcm9vdmlnZSB1dWVzdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWt1bmRpIHDDpHJhc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJKb29uaXN0YXNpdGUgb21hIGF2YW1pc211c3RyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtvcmRhIHZhbGVzdGkuIFDDpHJhc3QgdmVlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGViYcO1bm5lc3R1bnVkIGthdHNldCBwYWx1dGFrc2UgdGVpbCB0ZWxlZm9uIGF2YWRhIG1laWxpa29udG9nYS5cblxuIFByb292aWdlIHV1ZXN0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGkgcMOkcmFzdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlZhbGUgU0lNLWkgUElOLWtvb2QsIHNlYWRtZSBhdmFtaXNla3MgcGVhdGUgbsO8w7xkIMO8aGVuZHVzdCB2w7V0bWEgb21hIG9wZXJhYXRvcmlnYS4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VmFsZSBTSU0ta2FhcmRpIFBJTi1rb29kLCB0ZWlsIG9uIGrDpMOkbnVkIHZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4ga2F0c2V0LjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKaW5kZXggM2E3NDBmNi4uMTk1MzFiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSWRhdHppIGJlcnJpcm8gUFVLIGtvZGUgenV6ZW5hLiBIYWluYmF0IHNhaWFrZXJhIG9rZXIgZWdpbmV6IGdlcm8sIGJldGlyYWtvIGRlc2dhaXR1a28gZGEgU0lNYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIGtvZGVhayBleiBkYXRveiBiYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJFcmVkdWEgbWFycmF6dGVrbyBzYWlha2VyYSBnZWhpZWdpIGVnaW4gZGlyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOYSBva2VyIGlkYXR6aSBkdXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsZGl6LiBcblxuU2FpYXR1IGJlcnJpcm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kbyBiYXJydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iUGFzYWhpdHphIG9rZXIgaWRhdHppIGR1enUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxkaXouIFxuXG5TYWlhdHUgYmVycmlybyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvIGJhcnJ1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJEZXNibG9rZWF0emVrbyBlcmVkdWEgb2tlciBtYXJyYXp0dSBkdXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsZGl6LiBcblxuU2FpYXR1IGJlcnJpcm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kbyBiYXJydS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGRpeiBzYWlhdHUgemFyYSB0ZWxlZm9ub2EgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYWxkaXogaHV0cyBlZ2l0ZW4gYmFkdXp1LCB0YWJsZXRhIGJlcnJlemFycmkgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGVsZWZvbm9hIGRlc2Jsb2tlYXR6ZW4sIGJhaW5hIGh1dHMgZWdpbiBkdXp1IGRlbmV0YW4uIEJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGFsZGl6IGh1dHMgZWdpdGVuIGJhZHV6dSwgdGVsZWZvbm9hIGJlcnJlemFycmkgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTmEgb2tlciBpZGF0emkgZHV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsZGl6LiBcblxuU2FpYXR1IGJlcnJpcm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvIGJhcnJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJQYXNhaGl0emEgb2tlciBpZGF0emkgZHV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsZGl6LiBcblxuU2FpYXR1IGJlcnJpcm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvIGJhcnJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJEZXNibG9rZWF0emVrbyBlcmVkdWEgb2tlciBtYXJyYXp0dSBkdXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gYWxkaXouIFxuXG5TYWlhdHUgYmVycmlybyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG8gYmFycnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGRpeiBzYWlhdHUgemFyYSB0ZWxlZm9ub2EgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBhbGRpeiBodXRzIGVnaXRlbiBiYWR1enUsIHRhYmxldGEgYmVycmV6YXJyaSBlZ2luZ28gZGEgZXRhLCBvbmRvcmlveiwgZGF0dSBndXp0aWFrIGV6YWJhdHVrbyBkaXJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRlbGVmb25vYSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBCZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGFsZGl6IGh1dHMgZWdpdGVuIGJhZHV6dSwgdGVsZWZvbm9hIGJlcnJlemFycmkgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRlbGVmb25vYSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBUYWJsZXRhIGJlcnJlemFycmkgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGVsZWZvbm9hIGRlc2Jsb2tlYXR6ZW4sIGJhaW5hIGh1dHMgZWdpbiBkdXp1IGRlbmV0YW4uIFRlbGVmb25vYSBiZXJyZXphcnJpIGVnaW5nbyBkYSBldGEsIG9uZG9yaW96LCBkYXR1IGd1enRpYWsgZXphYmF0dWtvIGRpcmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGFibGV0YSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBCZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBhbGRpeiBodXRzIGVnaXRlbiBiYWR1enUsIGVyYWJpbHR6YWlsZWEga2VuZHUgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGVyYWJpbHR6YWlsZWFyZW4gZGF0dSBndXp0aWFrIGV6YWJhdHVrbyBkaXJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGRpeiBzYWlhdHUgemFyYSB0ZWxlZm9ub2EgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYWxkaXogaHV0cyBlZ2l0ZW4gYmFkdXp1LCBlcmFiaWx0emFpbGVhIGtlbmR1IGVnaW5nbyBkYSBldGEsIG9uZG9yaW96LCBlcmFiaWx0emFpbGVhcmVuIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRhYmxldGEgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBhbGRpeiBodXRzIGVnaXRlbiBiYWR1enUsIGVyYWJpbHR6YWlsZWEga2VuZHUgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGVyYWJpbHR6YWlsZWFyZW4gZGF0dSBndXp0aWFrIGV6YWJhdHVrbyBkaXJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRlbGVmb25vYSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBCZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGFsZGl6IGh1dHMgZWdpdGVuIGJhZHV6dSwgZXJhYmlsdHphaWxlYSBrZW5kdSBlZ2luZ28gZGEgZXRhLCBvbmRvcmlveiwgZXJhYmlsdHphaWxlYXJlbiBkYXR1IGd1enRpYWsgZXphYmF0dWtvIGRpcmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGFibGV0YSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBFcmFiaWx0emFpbGVhIGtlbmR1IGVnaW5nbyBkYSBldGEsIG9uZG9yaW96LCBlcmFiaWx0emFpbGVhcmVuIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGVsZWZvbm9hIGRlc2Jsb2tlYXR6ZW4sIGJhaW5hIGh1dHMgZWdpbiBkdXp1IGRlbmV0YW4uIEVyYWJpbHR6YWlsZWEga2VuZHUgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIGVyYWJpbHR6YWlsZWFyZW4gZGF0dSBndXp0aWFrIGV6YWJhdHVrbyBkaXJhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRhYmxldGEgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYWxkaXogaHV0cyBlZ2l0ZW4gYmFkdXp1LCBsYW5la28gcHJvZmlsYSBrZW5kdSBlZ2luZ28gZGEgZXRhLCBvbmRvcmlveiwgcHJvZmlsZWtvIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxkaXogc2FpYXR1IHphcmEgdGVsZWZvbm9hIGRlc2Jsb2tlYXR6ZW4sIGJhaW5hIGh1dHMgZWdpbiBkdXp1IGRlbmV0YW4uIEJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGFsZGl6IGh1dHMgZWdpdGVuIGJhZHV6dSwgbGFuZWtvIHByb2ZpbGEga2VuZHUgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIHByb2ZpbGVrbyBkYXR1IGd1enRpYWsgZXphYmF0dWtvIGRpcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGRpeiBzYWlhdHUgemFyYSB0YWJsZXRhIGRlc2Jsb2tlYXR6ZW4sIGJhaW5hIGh1dHMgZWdpbiBkdXp1IGRlbmV0YW4uIEJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gYWxkaXogaHV0cyBlZ2l0ZW4gYmFkdXp1LCBsYW5la28gcHJvZmlsYSBrZW5kdSBlZ2luZ28gZGEgZXRhLCBvbmRvcmlveiwgcHJvZmlsZWtvIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGRpeiBzYWlhdHUgemFyYSB0ZWxlZm9ub2EgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBhbGRpeiBodXRzIGVnaXRlbiBiYWR1enUsIGxhbmVrbyBwcm9maWxhIGtlbmR1IGVnaW5nbyBkYSBldGEsIG9uZG9yaW96LCBwcm9maWxla28gZGF0dSBndXp0aWFrIGV6YWJhdHVrbyBkaXJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRhYmxldGEgZGVzYmxva2VhdHplbiwgYmFpbmEgaHV0cyBlZ2luIGR1enUgZGVuZXRhbi4gTGFuZWtvIHByb2ZpbGEga2VuZHUgZWdpbmdvIGRhIGV0YSwgb25kb3Jpb3osIHByb2ZpbGVrbyBkYXR1IGd1enRpYWsgZXphYmF0dWtvIGRpcmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGFsZGl6IHNhaWF0dSB6YXJhIHRlbGVmb25vYSBkZXNibG9rZWF0emVuLCBiYWluYSBodXRzIGVnaW4gZHV6dSBkZW5ldGFuLiBMYW5la28gcHJvZmlsYSBrZW5kdSBlZ2luZ28gZGEgZXRhLCBvbmRvcmlveiwgcHJvZmlsZWtvIGRhdHUgZ3V6dGlhayBlemFiYXR1a28gZGlyYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRGVzYmxva2VhdHpla28gZXJlZHVhIG9rZXIgbWFycmF6dHUgZHV6dSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGRpei4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYWxkaXogb2tlciBtYXJyYXp0ZW4gYmFkdXp1LCB0YWJsZXRhIHBvc3RhLWtvbnR1IGJhdGVuIGJpZGV6IGRlc2Jsb2tlYXR6ZWtvIGVza2F0dWtvIGRpenVndS5cblxuIFNhaWF0dSBiZXJyaXJvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG8gYmFycnUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEZXNibG9rZWF0emVrbyBlcmVkdWEgb2tlciBtYXJyYXp0dSBkdXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsZGl6LiBCZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBhbGRpeiBva2VyIG1hcnJhenRlbiBiYWR1enUsIHRlbGVmb25vYSBwb3N0YS1rb250dSBiYXRlbiBiaWRleiBkZXNibG9rZWF0emVrbyBlc2thdHVrbyBkaXp1Z3UuXG5cbiBTYWlhdHUgYmVycmlybyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWd1bmRvIGJhcnJ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJEZXNibG9rZWF0emVrbyBlcmVkdWEgb2tlciBtYXJyYXp0dSBkdXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gYWxkaXouIEJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gYWxkaXogb2tlciBtYXJyYXp0ZW4gYmFkdXp1LCB0YWJsZXRhIHBvc3RhLWtvbnR1IGJhdGVuIGJpZGV6IGRlc2Jsb2tlYXR6ZWtvIGVza2F0dWtvIGRpenVndS5cblxuIFNhaWF0dSBiZXJyaXJvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kbyBiYXJydS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkRlc2Jsb2tlYXR6ZWtvIGVyZWR1YSBva2VyIG1hcnJhenR1IGR1enUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGRpei4gQmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBhbGRpeiBva2VyIG1hcnJhenRlbiBiYWR1enUsIHRlbGVmb25vYSBwb3N0YS1rb250dSBiYXRlbiBiaWRleiBkZXNibG9rZWF0emVrbyBlc2thdHVrbyBkaXp1Z3UuXG5cbiBTYWlhdHUgYmVycmlybyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlZ3VuZG8gYmFycnUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0gdHhhcnRlbGFyZW4gUElOIGtvZGVhIG9rZXJyYSBkYS4gR2FpbHVhIGRlc2Jsb2tlYXR6ZWtvLCBqYXJyaSBvcGVyYWRvcmVhcmVraW4gaGFycmVtYW5ldGFuLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0gdHhhcnRlbGFyZW4gUElOIGtvZGVhIG9rZXJyYSBkYS4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FpYWtlcmEgZ2VyYXR6ZW4gemFpemtpenUgZ2FpbHVhIGRlc2Jsb2tlYXR6ZWtvLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCmluZGV4IDk3NWZlN2YuLjc1ZTM4YTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLZvtuM2YYg2qnYryDYtdit24zYrSDYsdinINiv2YjYqNin2LHZhyDZiNin2LHYryDaqdmG24zYry4g2KrZhNin2LTigIzZh9in24wg2YXaqdix2LEg2KjZh+KAjNi32YjYsSDYr9in2KbZhSDYs9uM2YUg2qnYp9ix2Kog2LHYpyDYutuM2LHZgdi52KfZhCDYrtmI2KfZh9ivINqp2LHYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i2b7bjNmGINqp2K/Zh9inINmF2YbYt9io2YIg2YbbjNiz2KrZhtivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4oCP2KrZhNin2LTigI7Zh9in24wg2LLbjNin2K/bjCDYqNix2KfbjCDaqdi024zYr9mGINin2YTar9mIINi12YjYsdiqINqv2LHZgdiq2Ycg2KfYs9iqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLZvtuM2YYg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/bjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2q/YsNix2YjYp9qY2Ycg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDYqtin24zZviDaqdix2K/bjNivLiBcblxu2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2KfZhNqv2YjbjCDYqNin2LLar9i02KfbjNuMINmC2YHZhCDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv24zYry4gXG5cbtmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKg2KrZhNin2LQg2YbYp9mF2YjZgdmCINio2LHYp9uMINio2KfYsiDaqdix2K/ZhiDZgtmB2YTCoNix2KfbjNin2YbZhyDZhNmI2K3bjMKg2K/Yp9i02KrZh+KAjNin24zYry4g2b7YsyDYp9iywqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjMKg2KfbjNmGINix2KfbjNin2YbZhyDZhNmI2K3bjMKg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINqp2YQg2KfYt9mE2KfYudin2KrYtCDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2KrZhNmB2YYg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINqp2YQg2KfYt9mE2KfYudin2KrYtCDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Itm+24zZhiDYrtmI2K8g2LHYpyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2KrYp9uM2b4g2qnYsdiv24zYry4gXG5cbtm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INir2KfZhtuM2Ycg2K/ZiNio2KfYsdmHINin2YXYqtit2KfZhiDaqdmG24zYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2q/YsNix2YjYp9qY2Ycg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINiq2KfbjNm+INqp2LHYr9uM2K8uIFxuXG7ZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Itin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv24zYry4gXG5cbtmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEwqDYsdin24zYp9mG2Ycg2YTZiNit24zCoNiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjMKg2KfbjNmGINix2KfbjNin2YbZhyDZhNmI2K3bjMKg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINqp2YQg2KfYt9mE2KfYudin2KrYtCDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKg2KrZhNin2LQg2YbYp9mF2YjZgdmCINio2LHYp9uMINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2K/Yp9i02KrZh+KAjNin24zYry4g2b7YsyDYp9iywqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINiq2YTZgdmGINio2KfYstmG2LTYp9mG24wg2YXbjOKAjNi02YjYryDaqdmHINio2Kcg2KLZhiDaqdmEINin2LfZhNin2LnYp9iq2LQg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKg2KrZhNin2LQg2YbYp9mF2YjZgdmCINio2LHYp9uMINio2KfYsiDaqdix2K/ZhiDZgtmB2YTCoNix2KfbjNin2YbZhyDZhNmI2K3bjMKg2K/Yp9i02KrZh+KAjNin24zYry4g2KfbjNmGINix2KfbjNin2YbZhyDZhNmI2K3bjCDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K/CoNqp2Ycg2KjYpyDYotmGwqDZh9mF2Ycg2KfYt9mE2KfYudin2KrYtCDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINin24zZhiDYqtmE2YHZhiDYqNin2LLZhti02KfZhtuMINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2YfZhdmHINin2LfZhNin2LnYp9iq2LQg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEwqDYsdin24zYp9mG2Ycg2YTZiNit24zCoNiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2KfbjNmGINqp2KfYsdio2LEg2K3YsNmBINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2qnZhCDYp9i32YTYp9i52KfYqsKg2qnYp9ix2KjYsSDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2KfbjNmGINqp2KfYsdio2LEg2K3YsNmBINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2qnZhCDYp9i32YTYp9i52KfYqsKg2qnYp9ix2KjYsSDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmC2YHZhMKg2LHYp9uM2KfZhtmHINmE2YjYrduMwqDYr9in2LTYqtmH4oCM2KfbjNivLiDZvtizINin2LLCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2KfbjNmGINqp2KfYsdio2LEg2K3YsNmBINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2qnZhCDYp9i32YTYp9i52KfYqsKg2qnYp9ix2KjYsSDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKg2KrZhNin2LQg2YbYp9mF2YjZgdmCINio2LHYp9uMINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2K/Yp9i02KrZh+KAjNin24zYry4g2b7YsyDYp9iywqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINin24zZhiDaqdin2LHYqNixINit2LDZgSDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINqp2YQg2KfYt9mE2KfYudin2KrCoNqp2KfYsdio2LEg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEwqDYsdin24zYp9mG2Ycg2YTZiNit24zCoNiv2KfYtNiq2YfigIzYp9uM2K8uINin24zZhiDaqdin2LHYqNixINit2LDZgSDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINmH2YXZhyDYp9i32YTYp9i52KfYqsKg2qnYp9ix2KjYsSDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINin24zZhiDaqdin2LHYqNixINit2LDZgSDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINmH2YXZhyDYp9i32YTYp9i52KfYqiDaqdin2LHYqNixINit2LDZgSDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2KjYsdin24wg2KjYp9iyINqp2LHYr9mGINmC2YHZhMKg2LHYp9uM2KfZhtmHINmE2YjYrduMwqDYr9in2LTYqtmH4oCM2KfbjNivLiDZvtizINin2LLCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgiDYr9uM2q/YsdiMINmG2YXYp9uM2Ycg2qnYp9ixINit2LDZgSDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINqp2YQg2KfYt9mE2KfYudin2Kog2YbZhdin24zZhyDYrdiw2YEg2YXbjOKAjNi02YjYry4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmCINiv24zar9ix2Iwg2YbZhdin24zZhyDaqdin2LEg2K3YsNmBINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2qnZhCDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINit2LDZgSDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEwqDYsdin24zYp9mG2Ycg2YTZiNit24zCoNiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjCDZhtmF2KfbjNmHINqp2KfYsSDYrdiw2YEg2YXbjOKAjNi02YjYryDaqdmHINio2Kcg2KLZhiDaqdmEINin2LfZhNin2LnYp9iqINmG2YXYp9uM2Ycg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEINiq2YTZgdmGINiv2KfYtNiq2YfigIzYp9uM2K8uINm+2LMg2KfYssKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYqtmE2KfYtCDZhtin2YXZiNmB2YIg2K/bjNqv2LHYjCDZhtmF2KfbjNmHINqp2KfYsSDYrdiw2YEg2YXbjOKAjNi02YjYryDaqdmHINio2Kcg2KLZhiDaqdmEINin2LfZhNin2LnYp9iqINmG2YXYp9uM2Ycg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoNiq2YTYp9i0INmG2KfZhdmI2YHZgiDYqNix2KfbjCDYqNin2LIg2qnYsdiv2YYg2YLZgdmEwqDYsdin24zYp9mG2Ycg2YTZiNit24zCoNiv2KfYtNiq2YfigIzYp9uM2K8uINmG2YXYp9uM2Ycg2qnYp9ixINit2LDZgSDZhduM4oCM2LTZiNivINqp2Ycg2KjYpyDYotmGINmH2YXZhyDYp9i32YTYp9i52KfYqiDZhtmF2KfbjNmHINit2LDZgSDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKg2KrZhNin2LQg2YbYp9mF2YjZgdmCINio2LHYp9uMINio2KfYsiDaqdix2K/ZhiDZgtmB2YQg2KrZhNmB2YYg2K/Yp9i02KrZh+KAjNin24zYry4g2YbZhdin24zZhyDaqdin2LEg2K3YsNmBINmF24zigIzYtNmI2K8g2qnZhyDYqNinINii2YYg2YfZhdmHINin2LfZhNin2LnYp9iqINmG2YXYp9uM2Ycg2K3YsNmBINmF24zigIzYtNmI2K8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuKAj9i02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYp9i02KrYqNin2Ycg2qnYtNuM2K/Zh+KAjtin24zYry4g2KjYudivINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYsdin24zYp9mG2Ycg2YTZiNit24wg2K7ZiNivINix2Kcg2KjYp9iyINqp2YbbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCM2KfbjNivLiDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KrZhNin2LQg2YbYp9mF2YjZgdmC2Iwg2KfYsiDYtNmF2Kcg2K7ZiNin2LPYqtmHINmF24zigI7YtNmI2K8g2qnZhyDYqNinINin2LPYqtmB2KfYr9mHINin2LIg24zaqSDYrdiz2KfYqCDYp9uM2YXbjNmEINmC2YHZhCDYqtmE2YHZhiDYrtmI2K8g2LHYpyDYqNin2LIg2qnZhtuM2K8uXG5cbiDZhNi32YHYp9mLINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuKAj9i02YXYpyDYp9mE2q/ZiNuMINio2KfYstqv2LTYp9uM24wg2YLZgdmEINiu2YjYryDYsdinIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2KjYp9ixINin2LTYqtio2KfZhyDaqdi024zYr9mH4oCO2KfbjNivLiDYqNi52K8g2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgtiMINin2LIg2LTZhdinINiu2YjYp9iz2KrZhyDZhduM4oCO2LTZiNivINqp2Ycg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINuM2qkg2K3Ys9in2Kgg2KfbjNmF24zZhCDZgtmB2YQg2LHYp9uM2KfZhtmHINmE2YjYrduMINiu2YjYryDYsdinINio2KfYsiDaqdmG24zYry5cblxuINmE2LfZgdin2Ysg2b7YsyDYp9iyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g2KvYp9mG24zZhyDYr9mI2KjYp9ix2Ycg2KfZhdiq2K3Yp9mGINqp2YbbjNivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4oCP2LTZhdinINin2YTar9mI24wg2KjYp9iy2q/YtNin24zbjCDZgtmB2YQg2K7ZiNivINix2KcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2KfYtNiq2KjYp9mHINqp2LTbjNiv2YfigIzYp9uM2K8uINm+2LMg2KfYsiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INiq2YTYp9i0INmG2KfZhdmI2YHZgtiMINin2LIg2LTZhdinINiu2YjYp9iz2KrZhyDZhduM4oCO2LTZiNivINqp2Ycg2KjYpyDYp9iz2KrZgdin2K/ZhyDYp9iyINuM2qkg2K3Ys9in2Kgg2KfbjNmF24zZhCDZgtmB2YQg2KrZhNmB2YYg2K7ZiNivINix2Kcg2KjYp9iyINqp2YbbjNivLlxuXG4g2YTYt9mB2KfZiyDZvtizINin2LIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDYq9in2YbbjNmHINiv2YjYqNin2LHZhyDYp9mF2KrYrdin2YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLaqdivINm+24zZhiDYs9uM2YUg2qnYp9ix2Kog2KfYtNiq2KjYp9mHINin2LPYqtiMINin2qnZhtmI2YYg2KjYsdin24wg2q/YtNmI2K/ZhiDZgtmB2YQg2K/Ys9iq2q/Yp9mH2KrYp9mGINio2KfbjNivINio2Kcg2LTYsdqp2Kog2YXYrtin2KjYsdin2KrbjCDYqtmF2KfYsyDYqNqv24zYsduM2K8uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7aqdivINm+24zZhiDYs9uM2YXigIzaqdin2LHYqiDYp9i02KrYqNin2Ycg2KfYs9iq2IwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2KjYp9ixINiv24zar9ixINmF24zigIzYqtmI2KfZhtuM2K8g2KrZhNin2LQg2qnZhtuM2K8uPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKaW5kZXggOTRjOGQ2Mi4uZTNlNmU2NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkFubmEgdXVkZWxsZWVuIG9pa2VhIFBVSy1rb29kaS4gSm9zIHRlZXQgbGlpYW4gbW9udGEgeXJpdHlzdMOkLCBTSU0ta29ydHRpIHBvaXN0ZXRhYW4ga8OkeXTDtnN0w6QgcHlzeXbDpHN0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLWtvb2RpdCBlaXbDpHQgdMOkc23DpMOkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTGlpa2FhIGt1dmlvbnBpaXJ0b3lyaXR5a3Npw6QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ik9sZXQga2lyam9pdHRhbnV0IFBJTi1rb29kaW4gdsOkw6RyaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VydGFhLiBcblxuWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iT2xldCBraXJqb2l0dGFudXQgc2FsYXNhbmFuIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gXG5cbllyaXTDpCB1dWRlbGxlZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5uaW4ga3VsdXR0dWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik9sZXQgcGlpcnTDpG55dCBsdWtpdHVrc2VucG9pc3Rva3V2aW9uIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gXG5cbllyaXTDpCB1dWRlbGxlZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5uaW4ga3VsdXR0dWEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iWXJpdGl0IGF2YXRhIHRhYmxldGluIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlcMOkb25uaXN0dW51dHRhIHlyaXR5c3TDpCwgdMOkbcOkIHRhYmxldHRpIG5vbGxhdGFhbiBqYSBrYWlra2kgc2VuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJZcml0aXQgYXZhdGEgcHVoZWxpbWVuIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlcMOkb25uaXN0dW51dHRhIHlyaXR5c3TDpCwgdMOkbcOkIHB1aGVsaW4gbm9sbGF0YWFuIGphIGthaWtraSBzZW4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJPbGV0IGtpcmpvaXR0YW51dCBQSU4ta29vZGluIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VydGFhLiBcblxuWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VubmluIGt1bHV0dHVhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJPbGV0IGtpcmpvaXR0YW51dCBzYWxhc2FuYW4gdsOkw6RyaW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXJ0YWEuIFxuXG5Zcml0w6QgdXVkZWxsZWVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5uaW4ga3VsdXR0dWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik9sZXQgcGlpcnTDpG55dCBsdWtpdHVrc2VucG9pc3Rva3V2aW9uIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VydGFhLiBcblxuWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VubmluIGt1bHV0dHVhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IllyaXRpdCBhdmF0YSB0YWJsZXRpbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVww6Rvbm5pc3R1bnV0dGEgeXJpdHlzdMOkLCB0w6Rtw6QgdGFibGV0dGkgbm9sbGF0YWFuIGphIGthaWtraSBzZW4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IllyaXRpdCBhdmF0YSBwdWhlbGltZW4gbHVraXR1a3NlbiB2aXJoZWVsbGlzaWxsw6QgdGllZG9pbGxhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VydGFhLiBKb3MgdGVldCB2aWVsw6QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlcMOkb25uaXN0dW51dHRhIHlyaXR5c3TDpCwgdMOkbcOkIHB1aGVsaW4gbm9sbGF0YWFuIGphIGthaWtraSBzZW4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IllyaXRpdCBhdmF0YSB0YWJsZXRpbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gVMOkbcOkIHRhYmxldHRpIG5vbGxhdGFhbiBqYSBrYWlra2kgc2VuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IllyaXRpdCBhdmF0YSBwdWhlbGltZW4gbHVraXR1a3NlbiB2aXJoZWVsbGlzaWxsw6QgdGllZG9pbGxhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIFTDpG3DpCBwdWhlbGluIG5vbGxhdGFhbiBqYSBrYWlra2kgc2VuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IllyaXRpdCBhdmF0YSB0YWJsZXRpbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VydGFhLiBKb3MgdGVldCB2aWVsw6QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZXDDpG9ubmlzdHVudXR0YSB5cml0eXN0w6QsIHTDpG3DpCBrw6R5dHTDpGrDpCBqYSBrYWlra2kga8OkeXR0w6Rqw6RuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJZcml0aXQgYXZhdGEgcHVoZWxpbWVuIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlcMOkb25uaXN0dW51dHRhIHlyaXR5c3TDpCwgdMOkbcOkIGvDpHl0dMOkasOkIGphIGthaWtraSBrw6R5dHTDpGrDpG4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iWXJpdGl0IGF2YXRhIHRhYmxldGluIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlcnRhYS4gSm9zIHRlZXQgdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZXDDpG9ubmlzdHVudXR0YSB5cml0eXN0w6QsIHTDpG3DpCBrw6R5dHTDpGrDpCBqYSBrYWlra2kga8OkeXR0w6Rqw6RuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJZcml0aXQgYXZhdGEgcHVoZWxpbWVuIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlcnRhYS4gSm9zIHRlZXQgdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZXDDpG9ubmlzdHVudXR0YSB5cml0eXN0w6QsIHTDpG3DpCBrw6R5dHTDpGrDpCBqYSBrYWlra2kga8OkeXR0w6Rqw6RuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iWXJpdGl0IGF2YXRhIHRhYmxldGluIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2VydGFhLiBUw6Rtw6Qga8OkeXR0w6Rqw6QgamEga2Fpa2tpIHNlbiB0aWVkb3QgcG9pc3RldGFhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJZcml0aXQgYXZhdGEgcHVoZWxpbWVuIGx1a2l0dWtzZW4gdmlyaGVlbGxpc2lsbMOkIHRpZWRvaWxsYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2VydGFhLiBUw6Rtw6Qga8OkeXR0w6Rqw6QgamEga2Fpa2tpIHNlbiB0aWVkb3QgcG9pc3RldGFhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJZcml0aXQgYXZhdGEgdGFibGV0aW4gbHVraXR1a3NlbiB2aXJoZWVsbGlzaWxsw6QgdGllZG9pbGxhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gSm9zIHRlZXQgdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGVww6Rvbm5pc3R1bnV0dGEgeXJpdHlzdMOkLCB0ecO2cHJvZmlpbGkgamEga2Fpa2tpIHNlbiB0aWVkb3QgcG9pc3RldGFhbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iWXJpdGl0IGF2YXRhIHB1aGVsaW1lbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VydGFhLiBKb3MgdGVldCB2aWVsw6QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZXDDpG9ubmlzdHVudXR0YSB5cml0eXN0w6QsIHR5w7Zwcm9maWlsaSBqYSBrYWlra2kgc2VuIHRpZWRvdCBwb2lzdGV0YWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IllyaXRpdCBhdmF0YSB0YWJsZXRpbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVww6Rvbm5pc3R1bnV0dGEgeXJpdHlzdMOkLCB0ecO2cHJvZmlpbGkgamEga2Fpa2tpIHNlbiB0aWVkb3QgcG9pc3RldGFhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iWXJpdGl0IGF2YXRhIHB1aGVsaW1lbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyB0ZWV0IHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVww6Rvbm5pc3R1bnV0dGEgeXJpdHlzdMOkLCB0ecO2cHJvZmlpbGkgamEga2Fpa2tpIHNlbiB0aWVkb3QgcG9pc3RldGFhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IllyaXRpdCBhdmF0YSB0YWJsZXRpbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gVHnDtnByb2ZpaWxpIGphIGthaWtraSBzZW4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iWXJpdGl0IGF2YXRhIHB1aGVsaW1lbiBsdWtpdHVrc2VuIHZpcmhlZWxsaXNpbGzDpCB0aWVkb2lsbGEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtlcnRhYS4gVHnDtnByb2ZpaWxpIGphIGthaWtraSBzZW4gdGllZG90IHBvaXN0ZXRhYW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlBpaXJzaXQgbHVraXR1a3NlbnBvaXN0b2t1dmlvbiB2w6TDpHJpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyBwaWlycsOkdCBrdXZpb24gdsOkw6RyaW4gdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiB0YWJsZXQtbGFpdHRlZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBpaXJzaXQgbHVraXR1a3NlbnBvaXN0b2t1dmlvbiB2w6TDpHJpbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXJ0YWEuIEpvcyBwaWlycsOkdCBrdXZpb24gdsOkw6RyaW4gdmllbMOkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiBwdWhlbGltZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bm5pbiBrdWx1dHR1YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iUGlpcnNpdCBsdWtpdHVrc2VucG9pc3Rva3V2aW9uIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VydGFhLiBKb3MgcGlpcnLDpHQga3V2aW9uIHbDpMOkcmluIHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiB0YWJsZXQtbGFpdHRlZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VubmluIGt1bHV0dHVhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iUGlpcnNpdCBsdWtpdHVrc2VucG9pc3Rva3V2aW9uIHbDpMOkcmluIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VydGFhLiBKb3MgcGlpcnLDpHQga3V2aW9uIHbDpMOkcmluIHZpZWzDpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGtlcnRhYSwgc2ludWEgcHl5ZGV0w6TDpG4gcG9pc3RhbWFhbiBwdWhlbGltZXNpIGx1a2l0dXMgc8OkaGvDtnBvc3RpdGlsaW4gYXZ1bGxhLlxuXG4gWXJpdMOkIHV1ZGVsbGVlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VubmluIGt1bHV0dHVhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iVmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUElOLWtvb2RpLiBTaW51biBvbiBueXQgb3RldHRhdmEgeWh0ZXlzIG9wZXJhYXR0b3JpaW4gbGFpdHRlZW4gbHVraXR1a3NlbiBhdmFhbWlzZWtzaS4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VmlyaGVlbGxpbmVuIFNJTS1rb3J0aW4gUElOLWtvb2RpLiBTaW51bGxhIG9uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlyaXR5c3TDpCBqw6RsamVsbMOkLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggYzhhZmI5MS4uZTIzM2FmMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iVmV1aWxsZXogc2Fpc2lyIGRlIG5vdXZlYXUgbGUgY29kZSBQVUsgY29ycmVjdC4gRGVzIHRlbnRhdGl2ZXMgcsOpcMOpdMOpZXMgZMOpc2FjdGl2ZW50IGTDqWZpbml0aXZlbWVudCBsYSBjYXJ0ZSBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IkxlcyBjb2RlcyBQSU4gbmUgY29ycmVzcG9uZGVudCBwYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVHJvcCBkZSB0ZW50YXRpdmVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVm91cyBhdmV6IHNhaXNpIHVuIE5JUCBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBcblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iVm91cyBhdmV6IHNhaXNpIHVuIG1vdCBkZSBwYXNzZSBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBcblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuXG5cblZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBjZXR0ZSB0YWJsZXR0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByZXByaXNlcy4gQXByw6hzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZShzKSBpbmZydWN0dWV1c2Uocykgc3VwcGzDqW1lbnRhaXJlKHMpLCBjZXR0ZSB0YWJsZXR0ZSBzZXJhIHLDqWluaXRpYWxpc8OpZSwgY2UgcXVpIGVudHJhw65uZXJhIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBsZXMgZG9ubsOpZXMgcXVcJ2VsbGUgY29udGllbnQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2UgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmVwcmlzZXMuIEFwcsOocyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmUocykgaW5mcnVjdHVldXNlKHMpIHN1cHBsw6ltZW50YWlyZShzKSwgbGUgdMOpbMOpcGhvbmUgc2VyYSByw6lpbml0aWFsaXPDqSwgY2UgcXVpIGVudHJhw65uZXJhIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBsZXMgZG9ubsOpZXMgcXVcJ2lsIGNvbnRpZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVm91cyBhdmV6IHNhaXNpIHVuIE5JUCBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlZvdXMgYXZleiBzYWlzaSB1biBtb3QgZGUgcGFzc2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBcblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLlxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBjZXR0ZSB0YWJsZXR0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBBcHLDqHMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmUocykgaW5mcnVjdHVldXNlKHMpIHN1cHBsw6ltZW50YWlyZShzKSwgY2V0dGUgdGFibGV0dGUgc2VyYSByw6lpbml0aWFsaXPDqWUsIGNlIHF1aSBlbnRyYcOubmVyYSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgbGVzIGRvbm7DqWVzIHF1XCdlbGxlIGNvbnRpZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGNlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcmVwcmlzZXMuIEFwcsOocyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2ZShzKSBpbmZydWN0dWV1c2Uocykgc3VwcGzDqW1lbnRhaXJlKHMpLCBsZSB0w6lsw6lwaG9uZSBzZXJhIHLDqWluaXRpYWxpc8OpLCBjZSBxdWkgZW50cmHDrm5lcmEgbGEgc3VwcHJlc3Npb24gZGUgdG91dGVzIGxlcyBkb25uw6llcyBxdVwnaWwgY29udGllbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2V0dGUgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBDZXR0ZSB0YWJsZXR0ZSBzZXJhIHLDqWluaXRpYWxpc8OpZSwgY2UgcXVpIGVudHJhw65uZSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgbGVzIGRvbm7DqWVzIHF1XCdlbGxlIGNvbnRpZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2UgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBDZSB0w6lsw6lwaG9uZSBzZXJhIHLDqWluaXRpYWxpc8OpLCBjZSBxdWkgZW50cmHDrm5lIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBsZXMgZG9ubsOpZXMgcXVcJ2lsIGNvbnRpZW50LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2V0dGUgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmVwcmlzZXMuIEFwcsOocyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmUocykgaW5mcnVjdHVldXNlKHMpIHN1cHBsw6ltZW50YWlyZShzKSwgY2V0IHV0aWxpc2F0ZXVyIHNlcmEgc3VwcHJpbcOpLCBjZSBxdWkgZW50cmHDrm5lcmEgbGEgc3VwcHJlc3Npb24gZGUgdG91dGVzIHNlcyBkb25uw6llcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBjZSB0w6lsw6lwaG9uZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByZXByaXNlcy4gQXByw6hzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2ZShzKSBpbmZydWN0dWV1c2Uocykgc3VwcGzDqW1lbnRhaXJlKHMpLCBjZXQgdXRpbGlzYXRldXIgc2VyYSBzdXBwcmltw6ksIGNlIHF1aSBlbnRyYcOubmVyYSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgc2VzIGRvbm7DqWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2V0dGUgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByZXByaXNlcy4gQXByw6hzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGluZnJ1Y3R1ZXVzZShzKSBzdXBwbMOpbWVudGFpcmUocyksIGNldCB1dGlsaXNhdGV1ciBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZXJhIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBzZXMgZG9ubsOpZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2UgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByZXByaXNlcy4gQXByw6hzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGluZnJ1Y3R1ZXVzZShzKSBzdXBwbMOpbWVudGFpcmUocyksIGNldCB1dGlsaXNhdGV1ciBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZXJhIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBzZXMgZG9ubsOpZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGNldHRlIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiByZXByaXNlcy4gQ2V0IHV0aWxpc2F0ZXVyIHNlcmEgc3VwcHJpbcOpLCBjZSBxdWkgZW50cmHDrm5lIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBzZXMgZG9ubsOpZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBjZSB0w6lsw6lwaG9uZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmVwcmlzZXMuIENldCB1dGlsaXNhdGV1ciBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgc2VzIGRvbm7DqWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2V0dGUgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmVwcmlzZXMuIEFwcsOocyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmUocykgaW5mcnVjdHVldXNlKHMpIHN1cHBsw6ltZW50YWlyZShzKSwgbGUgcHJvZmlsIHByb2Zlc3Npb25uZWwgc2VyYSBzdXBwcmltw6ksIGNlIHF1aSBlbnRyYcOubmVyYSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgc2VzIGRvbm7DqWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGNlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBBcHLDqHMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGluZnJ1Y3R1ZXVzZShzKSBzdXBwbMOpbWVudGFpcmUocyksIGxlIHByb2ZpbCBwcm9mZXNzaW9ubmVsIHNlcmEgc3VwcHJpbcOpLCBjZSBxdWkgZW50cmHDrm5lcmEgbGEgc3VwcHJlc3Npb24gZGUgdG91dGVzIHNlcyBkb25uw6llcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGNldHRlIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcmVwcmlzZXMuIEFwcsOocyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2ZShzKSBpbmZydWN0dWV1c2Uocykgc3VwcGzDqW1lbnRhaXJlKHMpLCBsZSBwcm9maWwgcHJvZmVzc2lvbm5lbCBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZXJhIGxhIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBzZXMgZG9ubsOpZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2UgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByZXByaXNlcy4gQXByw6hzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZlKHMpIGluZnJ1Y3R1ZXVzZShzKSBzdXBwbMOpbWVudGFpcmUocyksIGxlIHByb2ZpbCBwcm9mZXNzaW9ubmVsIHNlcmEgc3VwcHJpbcOpLCBjZSBxdWkgZW50cmHDrm5lcmEgbGEgc3VwcHJlc3Npb24gZGUgdG91dGVzIHNlcyBkb25uw6llcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2V0dGUgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBMZSBwcm9maWwgcHJvZmVzc2lvbm5lbCBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgc2VzIGRvbm7DqWVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgY2UgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJlcHJpc2VzLiBMZSBwcm9maWwgcHJvZmVzc2lvbm5lbCBzZXJhIHN1cHByaW3DqSwgY2UgcXVpIGVudHJhw65uZSBsYSBzdXBwcmVzc2lvbiBkZSB0b3V0ZXMgc2VzIGRvbm7DqWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIHZvdXMgZGV2cmV6IGTDqXZlcnJvdWlsbGVyIHZvdHJlIHRhYmxldHRlIMOgIGxcJ2FpZGUgZFwndW4gY29tcHRlIGRlIG1lc3NhZ2VyaWUgw6lsZWN0cm9uaXF1ZS5cblxuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIHZvdXMgZGV2cmV6IGTDqXZlcnJvdWlsbGVyIHZvdHJlIHTDqWzDqXBob25lIMOgIGxcJ2FpZGUgZFwndW4gY29tcHRlIGRlIG1lc3NhZ2VyaWUgw6lsZWN0cm9uaXF1ZS5cblxuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlZvdXMgYXZleiBkZXNzaW7DqSB1biBzY2jDqW1hIGRlIGTDqXZlcnJvdWlsbGFnZSBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoGZvaXMsIHZvdXMgZGV2cmV6IGTDqXZlcnJvdWlsbGVyIHZvdHJlIHRhYmxldHRlIMOgIGxcJ2FpZGUgZFwndW4gY29tcHRlIGRlIG1lc3NhZ2VyaWUgw6lsZWN0cm9uaXF1ZS5cblxuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlZvdXMgYXZleiBkZXNzaW7DqSB1biBzY2jDqW1hIGRlIGTDqXZlcnJvdWlsbGFnZSBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoGZvaXMsIHZvdXMgZGV2cmV6IGTDqXZlcnJvdWlsbGVyIHZvdHJlIHTDqWzDqXBob25lIMOgIGxcJ2FpZGUgZFwndW4gY29tcHRlIGRlIG1lc3NhZ2VyaWUgw6lsZWN0cm9uaXF1ZS5cblxuIFZldWlsbGV6IHLDqWVzc2F5ZXIgZGFucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5JUCBkZSBjYXJ0ZSBTSU0gaW5jb3JyZWN0LiBWb3VzIGRldmV6IG1haW50ZW5hbnQgY29tbXVuaXF1ZXIgYXZlYyB2b3RyZSBmb3Vybmlzc2V1ciBkZSBzZXJ2aWNlcyBwb3VyIGTDqXZlcnJvdWlsbGVyIHZvdHJlIGFwcGFyZWlsLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TGUgTklQIGRlIGxhIGNhcnRlIFNJTSBpbmNvcnJlY3QuIElsIHZvdXMgcmVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZlLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCmluZGV4IGFmZWZjOWEuLmI3NTkwYmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWZXVpbGxleiBzYWlzaXIgZGUgbm91dmVhdSBsZSBjb2RlIFBVSyBjb3JyZWN0LiBEZXMgdGVudGF0aXZlcyByw6lww6l0w6llcyBkw6lzYWN0aXZlbnQgZMOpZmluaXRpdmVtZW50IGxhIGNhcnRlIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTGVzIGNvZGVzIFBJTiBuZSBjb3JyZXNwb25kZW50IHBhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUcm9wIGRlIHRlbnRhdGl2ZXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gY29kZcKgUElOIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJWb3VzIGF2ZXogc2Fpc2kgdW4gbW90IGRlIHBhc3NlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy5cblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIGNldHRlIHRhYmxldHRlIHNlcmEgcsOpaW5pdGlhbGlzw6llIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgcXVcJ2VsbGUgY29udGllbnQgc2Vyb250IHN1cHByaW3DqWVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIGNlIHTDqWzDqXBob25lIHNlcmEgcsOpaW5pdGlhbGlzw6kgZXQgdG91dGVzIGxlcyBkb25uw6llcyBxdVwnaWwgY29udGllbnQgc2Vyb250IHN1cHByaW3DqWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iVm91cyBhdmV6IHNhaXNpIHVuIGNvZGXCoFBJTiBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlZvdXMgYXZleiBzYWlzaSB1biBtb3QgZGUgcGFzc2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBcblxuVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb3VzIGF2ZXogZGVzc2luw6kgdW4gc2Now6ltYSBkZSBkw6l2ZXJyb3VpbGxhZ2UgaW5jb3JyZWN0IMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLlxuXG5WZXVpbGxleiByw6llc3NheWVyIGRhbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgc2Vjb25kZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBsYSB0YWJsZXR0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgZm9pcywgY2V0dGUgdGFibGV0dGUgc2VyYSByw6lpbml0aWFsaXPDqWUgZXQgdG91dGVzIGxlcyBkb25uw6llcyBxdVwnZWxsZSBjb250aWVudCBzZXJvbnQgc3VwcHJpbcOpZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoGZvaXMsIGNlIHTDqWzDqXBob25lIHNlcmEgcsOpaW5pdGlhbGlzw6kgZXQgdG91dGVzIGxlcyBkb25uw6llcyBxdVwnaWwgY29udGllbnQgc2Vyb250IHN1cHByaW3DqWVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIENldHRlIHRhYmxldHRlIHZhIMOqdHJlIHLDqWluaXRpYWxpc8OpZSBldCB0b3V0ZXMgbGVzIGRvbm7DqWVzIHF1XCdlbGxlIGNvbnRpZW50IHNlcm9udCBzdXBwcmltw6llcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIENlIHTDqWzDqXBob25lIHZhIMOqdHJlIHLDqWluaXRpYWxpc8OpIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgcXVcJ2lsIGNvbnRpZW50IHNlcm9udCBzdXBwcmltw6llcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIGNlIGNvbXB0ZSB1dGlsaXNhdGV1ciBldCB0b3V0ZXMgbGVzIGRvbm7DqWVzIGFzc29jacOpZXMgc2Vyb250IHN1cHByaW3DqXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgY2UgY29tcHRlIHV0aWxpc2F0ZXVyIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgYXNzb2Npw6llcyBzZXJvbnQgc3VwcHJpbcOpcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBmb2lzLCBjZSBjb21wdGUgdXRpbGlzYXRldXIgZXQgdG91dGVzIGxlcyBkb25uw6llcyBhc3NvY2nDqWVzIHNlcm9udCBzdXBwcmltw6lzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBmb2lzLCBjZSBjb21wdGUgdXRpbGlzYXRldXIgZXQgdG91dGVzIGxlcyBkb25uw6llcyBhc3NvY2nDqWVzIHNlcm9udCBzdXBwcmltw6lzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iVm91cyBhdmV6IHRlbnTDqSBkZSBkw6l2ZXJyb3VpbGxlciBsYSB0YWJsZXR0ZSDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBDZSBjb21wdGUgdXRpbGlzYXRldXIgZXQgdG91dGVzIGxlcyBkb25uw6llcyBhc3NvY2nDqWVzIHZvbnQgw6p0cmUgc3VwcHJpbcOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIENlIGNvbXB0ZSB1dGlsaXNhdGV1ciBldCB0b3V0ZXMgbGVzIGRvbm7DqWVzIGFzc29jacOpZXMgdm9udCDDqnRyZSBzdXBwcmltw6lzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGEgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgbGUgcHJvZmlsIHByb2Zlc3Npb25uZWwgZXQgdG91dGVzIGxlcyBkb25uw6llcyBhc3NvY2nDqWVzIHNlcm9udCBzdXBwcmltw6lzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoGZvaXMsIGxlIHByb2ZpbCBwcm9mZXNzaW9ubmVsIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgYXNzb2Npw6llcyBzZXJvbnQgc3VwcHJpbcOpcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxhIHRhYmxldHRlIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBmb2lzLCBsZSBwcm9maWwgcHJvZmVzc2lvbm5lbCBldCB0b3V0ZXMgbGVzIGRvbm7DqWVzIGFzc29jacOpZXMgc2Vyb250IHN1cHByaW3DqXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGUgdMOpbMOpcGhvbmUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVwcmlzZXMuIFNpIHZvdXMgw6ljaG91ZXogZW5jb3JlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoGZvaXMsIGxlIHByb2ZpbCBwcm9mZXNzaW9ubmVsIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgYXNzb2Npw6llcyBzZXJvbnQgc3VwcHJpbcOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlZvdXMgYXZleiB0ZW50w6kgZGUgZMOpdmVycm91aWxsZXIgbGEgdGFibGV0dGUgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZXByaXNlcy4gTGUgcHJvZmlsIHByb2Zlc3Npb25uZWwgZXQgdG91dGVzIGxlcyBkb25uw6llcyBhc3NvY2nDqWVzIHZvbnQgw6p0cmUgc3VwcHJpbcOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJWb3VzIGF2ZXogdGVudMOpIGRlIGTDqXZlcnJvdWlsbGVyIGxlIHTDqWzDqXBob25lIMOgIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVwcmlzZXMuIExlIHByb2ZpbCBwcm9mZXNzaW9ubmVsIGV0IHRvdXRlcyBsZXMgZG9ubsOpZXMgYXNzb2Npw6llcyB2b250IMOqdHJlIHN1cHByaW3DqXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlZvdXMgYXZleiBkZXNzaW7DqSB1biBzY2jDqW1hIGRlIGTDqXZlcnJvdWlsbGFnZSBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgdm91cyBkZXZyZXogZMOpdmVycm91aWxsZXIgdm90cmUgdGFibGV0dGUgw6AgbFwnYWlkZSBkXCd1biBjb21wdGUgZGUgbWVzc2FnZXJpZSDDqWxlY3Ryb25pcXVlLlxuXG4gVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlZvdXMgYXZleiBkZXNzaW7DqSB1biBzY2jDqW1hIGRlIGTDqXZlcnJvdWlsbGFnZSBpbmNvcnJlY3Qgw6AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlcHJpc2VzLiBTaSB2b3VzIMOpY2hvdWV6IGVuY29yZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgZm9pcywgdm91cyBkZXZyZXogZMOpdmVycm91aWxsZXIgdm90cmUgdMOpbMOpcGhvbmUgw6AgbFwnYWlkZSBkXCd1biBjb21wdGUgZGUgbWVzc2FnZXJpZSDDqWxlY3Ryb25pcXVlLlxuXG4gVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+wqBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgZm9pcywgdm91cyBkZXZyZXogZMOpdmVycm91aWxsZXIgdm90cmUgdGFibGV0dGUgw6AgbFwnYWlkZSBkXCd1biBjb21wdGUgZGUgbWVzc2FnZXJpZSDDqWxlY3Ryb25pcXVlLlxuXG4gVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVm91cyBhdmV6IGRlc3NpbsOpIHVuIHNjaMOpbWEgZGUgZMOpdmVycm91aWxsYWdlIGluY29ycmVjdCDDoCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZXByaXNlcy4gU2kgdm91cyDDqWNob3VleiBlbmNvcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgZm9pcywgdm91cyBkZXZyZXogZMOpdmVycm91aWxsZXIgdm90cmUgdMOpbMOpcGhvbmUgw6AgbFwnYWlkZSBkXCd1biBjb21wdGUgZGUgbWVzc2FnZXJpZSDDqWxlY3Ryb25pcXVlLlxuXG4gVmV1aWxsZXogcsOpZXNzYXllciBkYW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz7CoHNlY29uZGVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kZSBQSU4gZGUgbGEgY2FydGUgU0lNIGluY29ycmVjdC4gVm91cyBkZXZleiBkw6lzb3JtYWlzIGNvbnRhY3RlciB2b3RyZSBvcMOpcmF0ZXVyIHBvdXIgZMOpdmVycm91aWxsZXIgdm90cmUgYXBwYXJlaWwuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Db2RlwqBQSU4gZGUgbGEgY2FydGXCoFNJTSBlcnJvbsOpLiBJbCB2b3VzIHJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqB0ZW50YXRpdmUuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbAppbmRleCA0NzEzYWJmLi5iZDdmMWYyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWb2x2ZSBpbnRyb2R1Y2lyIG8gY8OzZGlnbyBQVUsgY29ycmVjdG8uIFNlIHJlYWxpemFzIGludGVudG9zIHJlcGV0aWRvcyDDqSBwb3NpYmxlIHF1ZSBzZSBkZXNhY3RpdmUgYSB0YXJ4ZXRhIFNJTSBwZXJtYW5lbnRlbWVudGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Ik9zIGPDs2RpZ29zIFBJTiBub24gY29pbmNpZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVGVudGFjaGVzIGRlYnV4YXIgbyBwYWRyw7NuIG1vaXRhcyB2ZWNlcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSW50cm9kdWNpY2hlcyBvIFBJTiBpbmNvcnJlY3RhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5Uw6ludGFvIGRlIG5vdm8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkludHJvZHVjaWNoZXMgbyBjb250cmFzaW5hbCBpbmNvcnJlY3RhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5Uw6ludGFvIGRlIG5vdm8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkRlYnV4YWNoZXMgaW5jb3JyZWN0YW1lbnRlIG8gcGFkcsOzbiBkZSBkZXNibG9xdWVvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBcblxuVMOpbnRhbyBkZSBub3ZvIGVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZWNlcyBkZSBmb3JtYSBpbmNvcnJlY3RhLiBTZSByZWFsaXphcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgcmVzdGFibGVjZXJhc2UgbyB0YWJsZXQgZSwgcG9yIGNvbnNlZ3VpbnRlLCBlbGltaW5hcmFuc2UgdG9kb3Mgb3Mgc2V1cyBkYXRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoWlzLCByZXN0YWJsZWNlcmFzZSBvIHRlbMOpZm9ubyBlLCBwb3IgY29uc2VndWludGUsIGVsaW1pbmFyYW5zZSB0b2RvcyBvcyBzZXVzIGRhdG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSW50cm9kdWNpY2hlcyBvIFBJTiBpbmNvcnJlY3RhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcy4gXG5cblTDqW50YW8gZGUgbm92byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJJbnRyb2R1Y2ljaGVzIG8gY29udHJhc2luYWwgaW5jb3JyZWN0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFxuXG5Uw6ludGFvIGRlIG5vdm8gZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRGVidXhhY2hlcyBpbmNvcnJlY3RhbWVudGUgbyBwYWRyw7NuIGRlIGRlc2Jsb3F1ZW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcy4gXG5cblTDqW50YW8gZGUgbm92byBlbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhaXMsIHJlc3RhYmxlY2VyYXNlIG8gdGFibGV0IGUsIHBvciBjb25zZWd1aW50ZSwgZWxpbWluYXJhbnNlIHRvZG9zIG9zIHNldXMgZGF0b3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhaXMsIHJlc3RhYmxlY2VyYXNlIG8gdGVsw6lmb25vIGUsIHBvciBjb25zZWd1aW50ZSwgZWxpbWluYXJhbnNlIHRvZG9zIG9zIHNldXMgZGF0b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gUmVzdGFibGVjZXJhc2UgbyB0YWJsZXQgZSwgcG9yIGNvbnNlZ3VpbnRlLCBlbGltaW5hcmFuc2UgdG9kb3Mgb3Mgc2V1cyBkYXRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJUZW50YWNoZXMgZGVzYmxvcXVlYXIgbyB0ZWzDqWZvbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFJlc3RhYmxlY2VyYXNlIG8gdGVsw6lmb25vIGUsIHBvciBjb25zZWd1aW50ZSwgZWxpbWluYXJhbnNlIHRvZG9zIG9zIHNldXMgZGF0b3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoWlzLCBlbGltaW5hcmFzZSBlc3RlIHVzdWFyaW8gZSwgcG9yIGNvbnNlZ3VpbnRlLCB0b2RvcyBvcyBkYXRvcyBkbyB1c3VhcmlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJUZW50YWNoZXMgZGVzYmxvcXVlYXIgbyB0ZWzDqWZvbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gU2UgcmVhbGl6YXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhaXMsIGVsaW1pbmFyYXNlIGVzdGUgdXN1YXJpbyBlLCBwb3IgY29uc2VndWludGUsIHRvZG9zIG9zIGRhdG9zIGRvIHVzdWFyaW8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gU2UgcmVhbGl6YXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgZWxpbWluYXJhc2UgZXN0ZSB1c3VhcmlvIGUsIHBvciBjb25zZWd1aW50ZSwgdG9kb3Mgb3MgZGF0b3MgZG8gdXN1YXJpby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gU2UgcmVhbGl6YXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgZWxpbWluYXJhc2UgZXN0ZSB1c3VhcmlvIGUsIHBvciBjb25zZWd1aW50ZSwgdG9kb3Mgb3MgZGF0b3MgZG8gdXN1YXJpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gRWxpbWluYXJhc2UgZXN0ZSB1c3VhcmlvIGUsIHBvciBjb25zZWd1aW50ZSwgdG9kb3Mgb3MgZGF0b3MgZG8gdXN1YXJpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJUZW50YWNoZXMgZGVzYmxvcXVlYXIgbyB0ZWzDqWZvbm8gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIEVsaW1pbmFyYXNlIGVzdGUgdXN1YXJpbyBlLCBwb3IgY29uc2VndWludGUsIHRvZG9zIG9zIGRhdG9zIGRvIHVzdWFyaW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoWlzLCBlbGltaW5hcmFzZSBvIHBlcmZpbCBkZSB0cmFiYWxsbyBlLCBwb3IgY29uc2VndWludGUsIHRvZG9zIG9zIGRhdG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoWlzLCBlbGltaW5hcmFzZSBvIHBlcmZpbCBkZSB0cmFiYWxsbyBlLCBwb3IgY29uc2VndWludGUsIHRvZG9zIG9zIGRhdG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUZW50YWNoZXMgZGVzYmxvcXVlYXIgbyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZWNlcyBkZSBmb3JtYSBpbmNvcnJlY3RhLiBTZSByZWFsaXphcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGludGVudG9zIGluY29ycmVjdG9zIG3DoWlzLCBlbGltaW5hcmFzZSBvIHBlcmZpbCBkZSB0cmFiYWxsbyBlLCBwb3IgY29uc2VndWludGUsIHRvZG9zIG9zIGRhdG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVGVudGFjaGVzIGRlc2Jsb3F1ZWFyIG8gdGVsw6lmb25vIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gU2UgcmVhbGl6YXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgZWxpbWluYXJhc2UgbyBwZXJmaWwgZGUgdHJhYmFsbG8gZSwgcG9yIGNvbnNlZ3VpbnRlLCB0b2RvcyBvcyBkYXRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJUZW50YWNoZXMgZGVzYmxvcXVlYXIgbyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlY2VzIGRlIGZvcm1hIGluY29ycmVjdGEuIEVsaW1pbmFyYXNlIG8gcGVyZmlsIGRlIHRyYWJhbGxvIGUsIHBvciBjb25zZWd1aW50ZSwgdG9kb3Mgb3MgZGF0b3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlRlbnRhY2hlcyBkZXNibG9xdWVhciBvIHRlbMOpZm9ubyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmVjZXMgZGUgZm9ybWEgaW5jb3JyZWN0YS4gRWxpbWluYXJhc2UgbyBwZXJmaWwgZGUgdHJhYmFsbG8gZSwgcG9yIGNvbnNlZ3VpbnRlLCB0b2RvcyBvcyBkYXRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkRlYnV4YWNoZXMgbyBwYWRyw7NuIGRlIGRlc2Jsb3F1ZW8gaW5jb3JyZWN0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBTZSByZWFsaXphcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgdGVyw6FzIHF1ZSBkZXNibG9xdWVhciBvIHRhYmxldCBhIHRyYXbDqXMgZHVuaGEgdW5oYSBjb250YSBkZSBjb3JyZW8gZWxlY3Ryw7NuaWNvLlxuXG4gVMOpbnRhbyBkZSBub3ZvIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkRlYnV4YWNoZXMgbyBwYWRyw7NuIGRlIGRlc2Jsb3F1ZW8gaW5jb3JyZWN0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlY2VzLiBTZSByZWFsaXphcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBpbnRlbnRvcyBpbmNvcnJlY3RvcyBtw6FpcywgdGVyw6FzIHF1ZSBkZXNibG9xdWVhciBvIHRlbMOpZm9ubyBhIHRyYXbDqXMgZHVuaGEgY29udGEgZGUgY29ycmVvIGVsZWN0csOzbmljby5cblxuIFTDqW50YW8gZGUgbm92byBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkRlYnV4YWNoZXMgbyBwYWRyw7NuIGRlIGRlc2Jsb3F1ZW8gaW5jb3JyZWN0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhaXMsIHRlcsOhcyBxdWUgZGVzYmxvcXVlYXIgbyB0YWJsZXQgYSB0cmF2w6lzIGR1bmhhIHVuaGEgY29udGEgZGUgY29ycmVvIGVsZWN0csOzbmljby5cblxuIFTDqW50YW8gZGUgbm92byBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkRlYnV4YWNoZXMgbyBwYWRyw7NuIGRlIGRlc2Jsb3F1ZW8gaW5jb3JyZWN0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmVjZXMuIFNlIHJlYWxpemFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gaW50ZW50b3MgaW5jb3JyZWN0b3MgbcOhaXMsIHRlcsOhcyBxdWUgZGVzYmxvcXVlYXIgbyB0ZWzDqWZvbm8gYSB0cmF2w6lzIGR1bmhhIGNvbnRhIGRlIGNvcnJlbyBlbGVjdHLDs25pY28uXG5cbiBUw6ludGFvIGRlIG5vdm8gZGVudHJvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJPIGPDs2RpZ28gUElOIGRhIFNJTSBub24gw6kgY29ycmVjdG8uIEFnb3JhIGRlYmVzIGNvbnRhY3RhciBjbyB0ZXUgb3BlcmFkb3IgcGFyYSBkZXNibG9xdWVhciBvIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5PIGPDs2RpZ28gUElOIGRhIFNJTSDDqSBpbmNvcnJlY3RvLiBRdcOpZGFuY2hlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGludGVudG9zLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKaW5kZXggZjc0YzhhYS4uOGFiODI0OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Kq44Kq+4Kqa4KuLIFBVSyDgqpXgq4vgqqEg4Kqr4Kqw4KuA4Kql4KuAIOCqpuCqvuCqluCqsiDgqpXgqrDgq4suIOCqquCrgeCqqOCqsOCqvuCqteCqsOCrjeCqpOCqv+CqpCDgqqrgq43gqrDgqq/gqr7gqrjgq4sgU0lNIOCqqOCrhyDgqpXgqr7gqq/gqq7gq4Ag4Kqw4KuA4Kqk4KuHIOCqheCqleCrjeCqt+CqriDgqpXgqrDgqrbgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgqpXgq4vgqqHgq43gqrgg4Kqu4KuH4KqzIOCqluCqvuCqpOCqviDgqqjgqqXgq4AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgqpjgqqPgqr4g4Kqs4Kqn4Kq+IOCqquCrh+Cqn+CqsOCrjeCqqCDgqqrgq43gqrDgqq/gqr7gqrjgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqTgqq7gqr7gqrDgq4sgUElOIOCqsuCqluCrjeCqr+CriyDgqpvgq4cuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuA4Kql4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqTgqq7gqr7gqrDgq4sg4Kqq4Kq+4Kq44Kq14Kqw4KuN4KqhIOCqsuCqluCrjeCqr+CriyDgqpvgq4cuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuA4Kql4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqTgqq7gqr7gqrDgq4Ag4KqF4Kqo4Kqy4KuJ4KqVIOCqquCrh+Cqn+CqsOCrjeCqqCDgqqbgq4vgqrDgq4AuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuA4Kql4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4Kqk4Kqu4KuHIOCqn+Crh+CqrOCrjeCqsuCrh+Cqn+CqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrXgqqfgq4Eg4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquOCriyDgqqrgqpvgq4AsIOCqhiDgqp/gq4fgqqzgq43gqrLgq4fgqp8g4Kqr4Kqw4KuA4Kql4KuAIOCquOCrh+CqnyDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4KuH4Kqo4KuLIOCqpOCqruCqvuCqriDgqqHgq4fgqp/gqr4g4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4Kqk4Kqu4KuHIOCqq+Cri+CqqOCqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrXgqqfgq4Eg4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquCDgqqrgqpvgq4AsIOCqhiDgqqvgq4vgqqgg4Kqr4Kqw4KuA4Kql4KuAIOCquOCrh+CqnyDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4KuH4Kqo4KuLIOCqpOCqruCqvuCqriDgqqHgq4fgqp/gqr4g4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqpOCqruCqvuCqsOCriyBQSU4g4Kqy4KqW4KuN4Kqv4KuLIOCqm+Crhy4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Kq44KuH4KqV4KqC4Kqh4Kqu4Kq+4KqCIOCqq+CqsOCrgOCqpeCrgCDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgqqTgqq7gq4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqTgqq7gqr7gqrDgq4sg4Kqq4Kq+4Kq44Kq14Kqw4KuN4KqhIOCqsuCqluCrjeCqr+CriyDgqpvgq4cuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCquOCrh+CqleCqguCqoeCqruCqvuCqgiDgqqvgqrDgq4DgqqXgq4Ag4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqleCqsOCriy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4Kqk4Kqu4KuHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqk4Kqu4Kq+4Kqw4KuAIOCqheCqqOCqsuCrieCqlSDgqqrgq4fgqp/gqrDgq43gqqgg4Kqm4KuL4Kqw4KuALiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuA4Kql4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4Kqk4Kqu4KuHIOCqn+Crh+CqrOCrjeCqsuCrh+Cqn+CqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Kq14Kqn4KuBIOCqheCquOCqq+CqsyDgqqrgq43gqrDgqq/gqr7gqrjgq4sg4Kqq4Kqb4KuALCDgqoYg4Kqf4KuH4Kqs4KuN4Kqy4KuH4KqfIOCqq+CqsOCrgOCqpeCrgCDgqrjgq4fgqp8g4KqV4Kqw4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhywg4Kqc4KuHIOCqpOCrh+CqqOCriyDgqqTgqq7gqr7gqq4g4Kqh4KuH4Kqf4Kq+IOCqleCqvuCqouCrgCDgqqjgqr7gqpbgqrbgq4cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCqpOCqruCrhyDgqqvgq4vgqqjgqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqviDgqq7gqr7gqp/gq4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCqteCqp+CrgSDgqoXgqrjgqqvgqrMg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqquCqm+CrgCwg4KqGIOCqq+Cri+CqqCDgqqvgqrDgq4DgqqXgq4Ag4Kq44KuH4KqfIOCqleCqsOCqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4csIOCqnOCrhyDgqqTgq4fgqqjgq4sg4Kqk4Kqu4Kq+4KquIOCqoeCrh+Cqn+CqviDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLgqqTgqq7gq4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqn+Crh+CqrOCrjeCqsuCrh+Cqn+CqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+4Kqo4KuLIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIOCqhiDgqp/gq4fgqqzgq43gqrLgq4fgqp8g4Kqr4Kqw4KuA4Kql4KuAIOCquOCrh+CqnyDgqqXgqrbgq4csIOCqnOCrhyDgqqTgq4fgqqjgq4sg4Kqk4Kqu4Kq+4KquIOCqoeCrh+Cqn+CqviDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqr4KuL4Kqo4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4sg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqleCqsOCrjeCqr+Criy4g4KqGIOCqq+Cri+CqqCDgqqvgqrDgq4DgqqXgq4Ag4Kq44KuH4KqfIOCqpeCqtuCrhywg4Kqc4KuHIOCqpOCrh+CqqOCriyDgqqTgqq7gqr7gqq4g4Kqh4KuH4Kqf4Kq+IOCqleCqvuCqouCrgCDgqqjgqr7gqpbgqrbgq4cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4Kqk4Kqu4KuHIOCqn+Crh+CqrOCrjeCqsuCrh+Cqn+CqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqrXgqqfgq4Eg4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquOCriyDgqqrgqpvgq4AsIOCqhiDgqrXgqqrgqrDgqr7gqrbgqpXgqrDgq43gqqTgqr7gqqjgq4cg4Kqm4KuC4KqwIOCqleCqsOCqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4csIOCqnOCrhyDgqqTgqq7gqr7gqq4g4Kq14Kqq4Kqw4Kq+4Kq24KqV4Kqw4KuN4Kqk4Kq+IOCqoeCrh+Cqn+CqvuCqqOCrhyDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgqqTgqq7gq4cg4Kqr4KuL4Kqo4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr4g4Kqu4Kq+4Kqf4KuHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCqteCqp+CrgSDgqoXgqrjgqqvgqrMg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqquCqm+CrgCwg4KqGIOCqteCqquCqsOCqvuCqtuCqleCqsOCrjeCqpOCqviDgqqbgq4LgqrAg4KqV4Kqw4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhywg4Kqc4KuHIOCqpOCqruCqvuCqriDgqrXgqqrgqrDgqr7gqrbgqpXgqrDgq43gqqTgqr4g4Kqh4KuH4Kqf4Kq+IOCqleCqvuCqouCrgCDgqqjgqr7gqpbgqrbgq4cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4Kqk4Kqu4KuHIOCqn+Crh+CqrOCrjeCqsuCrh+Cqn+CqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Kq14Kqn4KuBIOCqheCquOCqq+CqsyDgqqrgq43gqrDgqq/gqr7gqrjgq4sg4Kqq4Kqb4KuALCDgqoYg4Kq14Kqq4Kqw4Kq+4Kq24KqV4Kqw4KuN4Kqk4Kq+4Kqo4KuHIOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4Kqu4Kq+4KquIOCqteCqquCqsOCqvuCqtuCqleCqsOCrjeCqpOCqviDgqqHgq4fgqp/gqr7gqqjgq4cg4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4Kqk4Kqu4KuHIOCqq+Cri+CqqOCqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Kq14Kqn4KuBIOCqheCquOCqq+CqsyDgqqrgq43gqrDgqq/gqr7gqrgg4Kqq4Kqb4KuALCDgqoYg4Kq14Kqq4Kqw4Kq+4Kq24KqV4Kqw4KuN4Kqk4Kq+IOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4Kqu4Kq+4KquIOCqteCqquCqsOCqvuCqtuCqleCqsOCrjeCqpOCqviDgqqHgq4fgqp/gqr4g4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuCqpOCqruCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqf4KuH4Kqs4KuN4Kqy4KuH4Kqf4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4sg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqleCqsOCrjeCqr+Criy4g4KqGIOCqteCqquCqsOCqvuCqtuCqleCqsOCrjeCqpOCqvuCqqOCrhyDgqqbgq4LgqrAg4KqV4Kqw4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhywg4Kqc4KuHIOCqpOCqruCqvuCqriDgqrXgqqrgqrDgqr7gqrbgqpXgqrDgq43gqqTgqr4g4Kqh4KuH4Kqf4Kq+4Kqo4KuHIOCqleCqvuCqouCrgCDgqqjgqr7gqpbgqrbgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4Kqk4Kqu4KuHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqvgq4vgqqjgqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqvuCqqOCriyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiDgqoYg4Kq14Kqq4Kqw4Kq+4Kq24KqV4Kqw4KuN4Kqk4Kq+4Kqo4KuHIOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4Kqu4Kq+4KquIOCqteCqquCqsOCqvuCqtuCqleCqsOCrjeCqpOCqviDgqqHgq4fgqp/gqr7gqqjgq4cg4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgqqTgqq7gq4cg4Kqf4KuH4Kqs4KuN4Kqy4KuH4Kqf4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4sgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqleCqsOCrjeCqr+CriyDgqpvgq4cuIOCqueCqnOCrgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqoXgqrjgqqvgqrMg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqquCqm+CrgCwg4KqV4Kq+4Kqw4KuN4KqvIOCqquCrjeCqsOCri+Cqq+CqvuCqh+CqsiDgqqbgq4LgqrAg4KqV4Kqw4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhywg4Kqc4KuHIOCqpOCqruCqvuCqriDgqqrgq43gqrDgq4vgqqvgqr7gqofgqrIg4Kqh4KuH4Kqf4Kq+4Kqo4KuHIOCqleCqvuCqouCrgCDgqqjgqr7gqpbgqrbgq4cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCqpOCqruCrhyDgqqvgq4vgqqjgqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqvuCqqOCriyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLIOCqm+Crhy4g4Kq54Kqc4KuAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCqheCquOCqq+CqsyDgqqrgq43gqrDgqq/gqr7gqrgg4Kqq4Kqb4KuALCDgqpXgqr7gqrDgq43gqq8g4Kqq4KuN4Kqw4KuL4Kqr4Kq+4KqH4KqyIOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4Kqu4Kq+4KquIOCqquCrjeCqsOCri+Cqq+CqvuCqh+CqsiDgqqHgq4fgqp/gqr7gqqjgq4cg4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgqqTgqq7gq4cg4Kqf4KuH4Kqs4KuN4Kqy4KuH4Kqf4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4sgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLIOCqm+Crhy4g4Kq54Kqc4KuAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquCDgqqrgqpvgq4AsIOCqleCqvuCqsOCrjeCqryDgqqrgq43gqrDgq4vgqqvgqr7gqofgqrIg4Kqm4KuC4KqwIOCqleCqsOCqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4csIOCqnOCrhyDgqqTgqq7gqr7gqq4g4Kqq4KuN4Kqw4KuL4Kqr4Kq+4KqH4KqyIOCqoeCrh+Cqn+CqvuCqqOCrhyDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgqqTgqq7gq4cg4Kqr4KuL4Kqo4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4sgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLIOCqm+Crhy4g4Kq54Kqc4KuAIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquCDgqqrgqpvgq4AsIOCqleCqvuCqsOCrjeCqryDgqqrgq43gqrDgq4vgqqvgqr7gqofgqrIg4Kqm4KuC4KqwIOCqleCqsOCqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4csIOCqnOCrhyDgqqTgqq7gqr7gqq4g4Kqq4KuN4Kqw4KuL4Kqr4Kq+4KqH4KqyIOCqoeCrh+Cqn+CqvuCqqOCrhyDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4Kqk4Kqu4KuHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqW4KuL4Kqf4KuAIOCqsOCrgOCqpOCrhyDgqp/gq4fgqqzgq43gqrLgq4fgqp/gqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqvuCqqOCriyDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuN4Kqv4KuLLiDgqpXgqr7gqrDgq43gqq8g4Kqq4KuN4Kqw4KuL4Kqr4Kq+4KqH4KqyIOCqpuCrguCqsCDgqpXgqrDgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLCDgqpzgq4cg4Kqk4Kqu4Kq+4KquIOCqquCrjeCqsOCri+Cqq+CqvuCqh+CqsiDgqqHgq4fgqp/gqr7gqqjgq4cg4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCqtuCrhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgqqTgqq7gq4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCqteCqluCqpCDgqpbgq4vgqp/gq4Ag4Kqw4KuA4Kqk4KuHIOCqq+Cri+CqqOCqqOCrhyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+4Kqo4KuLIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq43gqq/gq4suIOCqleCqvuCqsOCrjeCqryDgqqrgq43gqrDgq4vgqqvgqr7gqofgqrIg4Kqm4KuC4KqwIOCqleCqsOCqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4csIOCqnOCrhyDgqqTgqq7gqr7gqq4g4Kqq4KuN4Kqw4KuL4Kqr4Kq+4KqH4KqyIOCqoeCrh+Cqn+CqvuCqqOCrhyDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4Kq24KuHLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgqqTgqq7gq4cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqquCrh+Cqn+CqsOCrjeCqqCDgqqbgq4vgqrDgq4Ag4Kqb4KuHLiDgqrXgqqfgq4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqheCquOCqq+CqsyDgqqrgq43gqrDgqq/gqr7gqrjgq4sg4Kqq4Kqb4KuALCDgqqTgqq7gqqjgq4cg4KqP4KqVIOCqh+CqruCrh+Cqh+CqsiDgqo/gqpXgqr7gqongqqjgq43gqp/gqqjgq4sg4KqJ4Kqq4Kqv4KuL4KqXIOCqleCqsOCrgOCqqOCrhyDgqqTgqq7gqr7gqrDgqr4g4Kqf4KuH4Kqs4KuN4Kqy4KuH4Kqf4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr4g4Kqu4Kq+4Kqf4KuHIOCqquCrguCqm+CqteCqvuCqruCqvuCqgiDgqobgqrXgqrbgq4cuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgqqTgqq7gq4cg4Kqk4Kqu4Kq+4Kqw4KuAIOCqheCqqOCqsuCrieCqlSDgqqrgq4fgqp/gqrDgq43gqqggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqm4KuL4Kqw4KuALiDgqrngqpzgq4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquCDgqqrgqpvgq4AsIOCqpOCqruCqqOCrhyDgqofgqq7gq4fgqofgqrIg4KqP4KqV4Kq+4KqJ4Kqo4KuN4Kqf4Kqo4KuLIOCqieCqquCqr+Cri+CqlyDgqpXgqrDgq4Dgqqjgq4cg4Kqr4KuL4Kqo4Kqo4KuHIOCqheCqqOCqsuCrieCqlSDgqpXgqrDgqrXgqr7gqqjgq4HgqoIg4KqV4Kq54KuH4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhy5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCquOCrh+CqleCqguCqoeCqruCqvuCqgiDgqqvgqrDgq4DgqqXgq4Ag4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqleCqsOCriy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4Kqk4Kqu4KuHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqquCrh+Cqn+CqsOCrjeCqqCDgqqbgq4vgqrDgq4Ag4Kqb4KuHLiDgqrXgqqfgq4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqrXgqpbgqqQg4KqF4Kq44Kqr4KqzIOCqquCrjeCqsOCqr+CqvuCquOCriyDgqqrgqpvgq4AsIOCqpOCqruCqqOCrhyDgqo/gqpUg4KqH4Kqu4KuH4KqH4KqyIOCqj+CqleCqvuCqieCqqOCrjeCqn+CqqOCriyDgqongqqrgqq/gq4vgqpcg4KqV4Kqw4KuA4Kqo4KuHIOCqpOCqruCqvuCqsOCqviDgqp/gq4fgqqzgq43gqrLgq4fgqp/gqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqviDgqq7gqr7gqp/gq4cg4Kqq4KuC4Kqb4Kq14Kq+4Kqu4Kq+4KqCIOCqhuCqteCqtuCrhy5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Kq44KuH4KqV4KqC4Kqh4Kqu4Kq+4KqCIOCqq+CqsOCrgCDgqqrgq43gqrDgqq/gqr7gqrgg4KqV4Kqw4KuLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Kqk4Kqu4KuHIOCqpOCqruCqvuCqsOCrgCDgqoXgqqjgqrLgq4ngqpUg4Kqq4KuH4Kqf4Kqw4KuN4KqoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Kq14KqW4KqkIOCqluCri+Cqn+CrgCDgqrDgq4DgqqTgq4cg4Kqm4KuL4Kqw4KuALiDgqrngqpzgq4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqoXgqrjgqqvgqrMg4Kqq4KuN4Kqw4Kqv4Kq+4Kq4IOCqquCqm+CrgCwg4Kqk4Kqu4Kqo4KuHIOCqh+CqruCrh+Cqh+CqsiDgqo/gqpXgqr7gqongqqjgq43gqp/gqqjgq4sg4KqJ4Kqq4Kqv4KuL4KqXIOCqleCqsOCrgOCqqOCrhyDgqqvgq4vgqqjgqqjgq4cg4KqF4Kqo4Kqy4KuJ4KqVIOCqleCqsOCqteCqvuCqqOCrgeCqgiDgqpXgqrngq4fgqrXgqr7gqq7gqr7gqoIg4KqG4Kq14Kq24KuHLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgqrjgq4fgqpXgqoLgqqHgqq7gqr7gqoIg4Kqr4Kqw4KuA4Kql4KuAIOCqquCrjeCqsOCqr+CqvuCquCDgqpXgqrDgq4suIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLgqpbgq4vgqp/gq4sgU0lNIFBJTiDgqpXgq4vgqqEsIOCqpOCqruCqvuCqsOCrhyDgqrngqrXgq4cg4Kqk4Kqu4Kq+4Kqw4KuB4KqCIOCqieCqquCqleCqsOCqoyDgqoXgqqjgqrLgq4ngqpUg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqqTgqq7gqr7gqrDgqr4g4KqV4KuH4Kqw4Kq/4KqF4Kqw4Kqo4KuLIOCquOCqguCqquCqsOCrjeCqlSDgqpXgqrDgqrXgq4sg4KqG4Kq14Kq24KuN4Kqv4KqVIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuCqluCri+Cqn+CriyBTSU0gUElOIOCqleCri+CqoSwg4Kqk4Kqu4Kq+4Kqw4KuAIOCqquCqvuCquOCrhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqqrgq43gqrDgqq/gqr7gqrgg4Kqs4Kq+4KqV4KuAIOCqm+Crhy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbAppbmRleCA2MTJkMTZjLi45MmQyZjdhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4KS44KS54KWAIFBVSyDgpJXgpYvgpKEg4KSq4KWB4KSoOiDgpKHgpL7gpLLgpYfgpIIuIOCkrOCkvuCksC3gpKzgpL7gpLAg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCksOCkqOClhyDgpLjgpYcg4KS44KS/4KSuIOCkuOCljeCkpeCkvuCkr+ClgCDgpLDgpYLgpKog4KS44KWHIOCkheCkleCljeCkt+CkriDgpLngpYsg4KSc4KS+4KSP4KSX4KWALiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLgpKrgpL/gpKgg4KSV4KWL4KShIOCkleCkviDgpK7gpL/gpLLgpL7gpKgg4KSo4KS54KWA4KSCIOCkueCli+CkpOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkrOCkueClgeCkpCDgpIXgpKfgpL/gpJUg4KSG4KSV4KS+4KSwIOCkquCljeCksOCkr+CkvuCkuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSG4KSqIOCkheCkquCkqOCkviBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCksuCkv+CkliDgpJrgpYHgpJXgpYcg4KS54KWI4KSCLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpIbgpKog4KSF4KSq4KSo4KS+IOCkquCkvuCkuOCkteCksOCljeCkoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSy4KS/4KSWIOCkmuClgeCkleClhyDgpLngpYjgpIIuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkhuCkleCkvuCksCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4KSG4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSU4KSwIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSV4KWHIOCkrOCkvuCkpiwg4KSH4KS4IOCkn+CliOCkrOCksuClh+CknyDgpJXgpYsg4KSw4KWA4KS44KWH4KSfIOCkleCksCDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4KSG4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSU4KSwIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSV4KWHIOCkrOCkvuCkpiwg4KSH4KS4IOCkq+CkvOCli+CkqCDgpJXgpYsg4KSw4KWA4KS44KWH4KSfIOCkleCksCDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkhuCkqiDgpIXgpKrgpKjgpL4gUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCksuCkv+CkliDgpJrgpYHgpJXgpYcg4KS54KWI4KSCLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkhuCkqiDgpIXgpKrgpKjgpL4g4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCksuCkv+CkliDgpJrgpYHgpJXgpYcg4KS54KWI4KSCLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkhuCkquCkqOClhyDgpIXgpKrgpKjgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkhuCkleCkvuCksCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpIbgpLDgpYfgpJbgpL/gpKQg4KSV4KS/4KSv4KS+IOCkueCliC4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuCkhuCkquCkqOClhyDgpJ/gpYjgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIfgpLgg4KSf4KWI4KSs4KSy4KWH4KSfIOCkleCliyDgpLDgpYDgpLjgpYfgpJ8g4KSV4KSwIOCkpuCkv+Ckr+CkviDgpJzgpL7gpI/gpJfgpL4sIOCknOCkv+CkuOCkuOClhyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ8g4KSc4KS+4KSP4KSX4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgpIbgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSU4KSwIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSV4KWHIOCkrOCkvuCkpiwg4KSH4KS4IOCkq+CkvOCli+CkqCDgpJXgpYsg4KSw4KWA4KS44KWH4KSfIOCkleCksCDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i4KSG4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCkv+Ckr+CkviDgpLngpYguIOCkh+CkuCDgpJ/gpYjgpKzgpLLgpYfgpJ8g4KSV4KWLIOCksOClgOCkuOClh+CknyDgpJXgpLAg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkieCkuOCkleCkviDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4KSG4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCkv+Ckr+CkviDgpLngpYguIOCkh+CkuCDgpKvgpLzgpYvgpKgg4KSV4KWLIOCksOClgOCkuOClh+CknyDgpJXgpLAg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkieCkuOCkleCkviDgpLjgpK3gpYAg4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4KSG4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSU4KSwIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSV4KWHIOCkrOCkvuCkpiwg4KSH4KS4IOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpJXgpYsg4KSo4KS/4KSV4KS+4KSyIOCkpuCkv+Ckr+CkviDgpJzgpL7gpI/gpJfgpL4sIOCknOCkv+CkuOCkuOClhyDgpLjgpK3gpYAg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ8g4KSc4KS+4KSP4KSX4KS+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgpIbgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpIfgpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKjgpL/gpJXgpL7gpLIg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkuOCkreClgCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4KSG4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkh+CkuCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWLIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4KSG4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkh+CkuCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWLIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuCkhuCkquCkqOClhyDgpJ/gpYjgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiDgpIfgpLgg4KSJ4KSq4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkleCliyDgpKjgpL/gpJXgpL7gpLIg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkuOCkreClgCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4KSG4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCkv+Ckr+CkviDgpLngpYguIOCkh+CkuCDgpIngpKrgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KSV4KWLIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkieCkquCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgpIbgpKrgpKjgpYcg4KSf4KWI4KSs4KSy4KWH4KSfIOCkleCliyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCkleCliyDgpKjgpL/gpJXgpL7gpLIg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkuOCkreClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCkhuCkquCkleClhyDgpKHgpL/gpLXgpL7gpIfgpLgg4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSU4KSwIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpYvgpIIg4KSV4KWHIOCkrOCkvuCkpiwg4KSV4KS+4KSw4KWN4KSvIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJXgpYsg4KSo4KS/4KSV4KS+4KSyIOCkpuCkv+Ckr+CkviDgpJzgpL7gpI/gpJfgpL4sIOCknOCkv+CkuOCkuOClhyDgpLjgpK3gpYAg4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpLngpJ8g4KSc4KS+4KSP4KSX4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuCkhuCkquCkqOClhyDgpJ/gpYjgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkrOCkvuCksCDgpJfgpLLgpKQg4KSk4KSw4KWA4KSV4KWHIOCkuOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KS/4KSv4KS+IOCkueCliC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpJTgpLAg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCli+CkgiDgpJXgpYcg4KSs4KS+4KSmLCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCkleCliyDgpKjgpL/gpJXgpL7gpLIg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkuOCkreClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCkhuCkquCkleClhyDgpKHgpL/gpLXgpL7gpIfgpLgg4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkleCkvuCksOCljeCkryDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSV4KWLIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuCkhuCkquCkqOClhyDgpJ/gpYjgpKzgpLLgpYfgpJ8g4KSV4KWLIOCkheCkqOCksuClieCklSDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJXgpL/gpK/gpL4g4KS54KWILiDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS84KS+4KSH4KSyIOCkleCliyDgpKjgpL/gpJXgpL7gpLIg4KSm4KS/4KSv4KS+IOCknOCkvuCkj+Ckl+Ckviwg4KSc4KS/4KS44KS44KWHIOCkuOCkreClgCDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkueCknyDgpJzgpL7gpI/gpJfgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i4KSG4KSq4KSo4KWHIOCkq+CkvOCli+CkqCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkleCkv+Ckr+CkviDgpLngpYguIOCkleCkvuCksOCljeCkryDgpKrgpY3gpLDgpYvgpKvgpLzgpL7gpIfgpLIg4KSV4KWLIOCkqOCkv+CkleCkvuCksiDgpKbgpL/gpK/gpL4g4KSc4KS+4KSP4KSX4KS+LCDgpJzgpL/gpLjgpLjgpYcg4KS44KSt4KWAIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KS54KSfIOCknOCkvuCkj+Ckl+Ckvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KSG4KSq4KSo4KWHIOCkheCkquCkqOClhyDgpIXgpKjgpLLgpYngpJUg4KSG4KSV4KS+4KSwIOCkleCliyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKzgpL7gpLAg4KSX4KSy4KSkIOCkpOCksOClgOCkleClhyDgpLjgpYcg4KSG4KSw4KWH4KSW4KS/4KSkIOCkleCkv+Ckr+CkviDgpLngpYguIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkoSDgpK7gpYfgpIIg4KSq4KWB4KSoOiDgpKrgpY3gpLDgpK/gpL7gpLgg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpIbgpKrgpKjgpYcg4KSF4KSq4KSo4KWHIOCkheCkqOCksuClieCklSDgpIbgpJXgpL7gpLAg4KSV4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSf4KWH4KSs4KSy4KWH4KSfIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpYcg4KSJ4KSq4KSv4KWL4KSXIOCkuOClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpIbgpKrgpKjgpYcg4KSF4KSq4KSo4KWHIOCkheCkqOCksuClieCklSDgpIbgpJXgpL7gpLAg4KSV4KWLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSs4KS+4KSwIOCkl+CksuCkpCDgpKTgpLDgpYDgpJXgpYcg4KS44KWHIOCkhuCksOClh+CkluCkv+CkpCDgpJXgpL/gpK/gpL4g4KS54KWILiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCklOCksCDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KWL4KSCIOCkleClhyDgpKzgpL7gpKYsIOCkhuCkquCkuOClhyDgpIXgpKrgpKjgpYcg4KSr4KS84KWL4KSoIOCkleCliyDgpJXgpL/gpLjgpYAg4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksOCkleClhyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KSV4KS54KS+IOCknOCkvuCkj+Ckl+Ckvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KShIOCkruClh+CkgiDgpKrgpYHgpKg6IOCkquCljeCksOCkr+CkvuCkuCDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLgpJfgpLLgpKQg4KS44KS/4KSuIFBJTiDgpJXgpYvgpKEg4KSF4KSq4KSo4KWHIOCkoeCkv+CkteCkvuCkh+CkuCDgpJXgpYsg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkheCkrCDgpIbgpKrgpJXgpYsg4KSF4KSq4KSo4KWHIOCkteCkvuCkueCklSDgpLjgpYcg4KS44KSC4KSq4KSw4KWN4KSVIOCkleCksOCkqOCkviDgpLngpYvgpJfgpL4uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gpJfgpLLgpKQg4KS44KS/4KSuIFBJTiDgpJXgpYvgpKEsIOCkhuCkquCkleClhyDgpKrgpL7gpLggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KS+4KS4IOCktuClh+CktyDgpLngpYjgpIIuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKaW5kZXggZDc3MTc2Yi4uYzcxNjc0NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBvbm92byB1bmVzaXRlIGlzcHJhdmFuIFBVSyBrw7RkLiBQb25vdmxqZW5pIHBva3XFoWFqaSB0cmFqbm8gxIdlIG9uZW1vZ3XEh2l0aSBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2RvdmkgbmlzdSBqZWRuYWtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUHJldmnFoWUgcG9rdcWhYWphIGlzY3J0YXZhbmphIG9icmFzY2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ik5ldG/EjW5vIHN0ZSBuYXBpc2FsaSBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+Ik5ldG/EjW5vIHN0ZSBuYXBpc2FsaSB6YXBvcmt1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRhYmxldC4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgdGFibGV0IMSHZSBzZSB2cmF0aXRpIG5hIHphZGFubywgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgcG9kYWNpIG5hIG5qZW11LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRlbGVmb24uIE5ha29uIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWphIHRlbGVmb24gxIdlIHNlIHZyYXRpdGkgbmEgemFkYW5vLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBwb2RhY2kgbmEgbmplbXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJOZXRvxI1ubyBzdGUgbmFwaXNhbGkgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0YS4gXG5cblBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iTmV0b8SNbm8gc3RlIG5hcGlzYWxpIHphcG9ya3UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXRhLiBcblxuUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIFxuXG5Qb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRhYmxldC4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqYSB0YWJsZXQgxIdlIHNlIHZyYXRpdGkgbmEgemFkYW5vLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBwb2RhY2kgbmEgbmplbXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0ZWxlZm9uLiBOYWtvbiBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcG9rdcWhYWphIHRlbGVmb24gxIdlIHNlIHZyYXRpdGkgbmEgemFkYW5vLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBwb2RhY2kgbmEgbmplbXUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRhYmxldC4gVGFibGV0IMSHZSBzZSB2cmF0aXRpIG5hIHphZGFubywgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgcG9kYWNpIG5hIG5qZW11LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRlbGVmb24uIFRlbGVmb24gxIdlIHNlIHZyYXRpdGkgbmEgemFkYW5vLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBwb2RhY2kgbmEgbmplbXUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0YWJsZXQuIE5ha29uIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWphIHRhaiDEh2Ugc2Uga29yaXNuaWsgdWtsb25pdGksIGEgdGltZSDEh2Ugc2UgaXpicmlzYXRpIGkgc3ZpIG5qZWdvdmkgcG9kYWNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRlbGVmb24uIE5ha29uIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdcWhYWphIHRhaiDEh2Ugc2Uga29yaXNuaWsgdWtsb25pdGksIGEgdGltZSDEh2Ugc2UgaXpicmlzYXRpIGkgc3ZpIG5qZWdvdmkgcG9kYWNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0YWJsZXQuIE5ha29uIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwb2t1xaFhamEgdGFqIMSHZSBzZSBrb3Jpc25payB1a2xvbml0aSwgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgbmplZ292aSBwb2RhY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0ZWxlZm9uLiBOYWtvbiBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcG9rdcWhYWphIHRhaiDEh2Ugc2Uga29yaXNuaWsgdWtsb25pdGksIGEgdGltZSDEh2Ugc2UgaXpicmlzYXRpIGkgc3ZpIG5qZWdvdmkgcG9kYWNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHB1dC9hIHN0ZSBuZXVzcGplxaFubyBwb2t1xaFhbGkgb3RrbGp1xI1hdGkgdGFibGV0LiBUYWogxIdlIHNlIGtvcmlzbmlrIHVrbG9uaXRpLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBuamVnb3ZpIHBvZGFjaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0ZWxlZm9uLiBUYWogxIdlIHNlIGtvcmlzbmlrIHVrbG9uaXRpLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBuamVnb3ZpIHBvZGFjaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRhYmxldC4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgcmFkbmkgxIdlIHNlIHByb2ZpbCB1a2xvbml0aSwgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgbmplZ292aSBwb2RhY2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHB1dC9hIHN0ZSBuZXVzcGplxaFubyBwb2t1xaFhbGkgb3RrbGp1xI1hdGkgdGVsZWZvbi4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwb2t1xaFhamEgcmFkbmkgxIdlIHNlIHByb2ZpbCB1a2xvbml0aSwgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgbmplZ292aSBwb2RhY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRhYmxldC4gTmFrb24gam/FoSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBva3XFoWFqYSByYWRuaSDEh2Ugc2UgcHJvZmlsIHVrbG9uaXRpLCBhIHRpbWUgxIdlIHNlIGl6YnJpc2F0aSBpIHN2aSBuamVnb3ZpIHBvZGFjaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRlbGVmb24uIE5ha29uIGpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwb2t1xaFhamEgcmFkbmkgxIdlIHNlIHByb2ZpbCB1a2xvbml0aSwgYSB0aW1lIMSHZSBzZSBpemJyaXNhdGkgaSBzdmkgbmplZ292aSBwb2RhY2kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcHV0L2Egc3RlIG5ldXNwamXFoW5vIHBva3XFoWFsaSBvdGtsanXEjWF0aSB0YWJsZXQuIFJhZG5pIMSHZSBzZSBwcm9maWwgdWtsb25pdGksIGEgdGltZSDEh2Ugc2UgaXpicmlzYXRpIGkgc3ZpIG5qZWdvdmkgcG9kYWNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwdXQvYSBzdGUgbmV1c3BqZcWhbm8gcG9rdcWhYWxpIG90a2xqdcSNYXRpIHRlbGVmb24uIFJhZG5pIMSHZSBzZSBwcm9maWwgdWtsb25pdGksIGEgdGltZSDEh2Ugc2UgaXpicmlzYXRpIGkgc3ZpIG5qZWdvdmkgcG9kYWNpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXRhLiBOYWtvbiBqb8WhIG92b2xpa28gbmV1c3BqZcWhbmloIHBva3XFoWFqYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yYXQgxIdldGUgb3RrbGp1xI1hdGkgdGFibGV0bm8gcmHEjXVuYWxvIHBvbW/Eh3UgcmHEjXVuYSBlLXBvxaF0ZS5cblxuIFBva3XFoWFqdGUgcG9ub3ZvIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBwdXRhLiBOYWtvbiBqb8WhIG92b2xpa28gbmV1c3BqZcWhbmloIHBva3XFoWFqYTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbW9yYXQgxIdldGUgb3RrbGp1xI1hdGkgdGVsZWZvbiBwb21vxId1IHJhxI11bmEgZS1wb8WhdGUuXG5cbiBQb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIE5ha29uIGpvxaEgb3ZvbGlrbyBuZXVzcGplxaFuaWggcG9rdcWhYWphOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmF0IMSHZXRlIG90a2xqdcSNYXRpIHRhYmxldG5vIHJhxI11bmFsbyBwb21vxId1IHJhxI11bmEgZS1wb8WhdGUuXG5cbiBQb2t1xaFhanRlIHBvbm92byB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOZXRvxI1ubyBzdGUgaXNjcnRhbGkgb2JyYXphYyB6YSBvdGtsanXEjWF2YW5qZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHB1dGEuIE5ha29uIGpvxaEgb3ZvbGlrbyBuZXVzcGplxaFuaWggcG9rdcWhYWphOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1vcmF0IMSHZXRlIG90a2xqdcSNYXRpIHRlbGVmb24gcG9tb8SHdSByYcSNdW5hIGUtcG/FoXRlLlxuXG4gUG9rdcWhYWp0ZSBwb25vdm8gemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTmV0b8SNYW4gUElOIGvDtGQgU0lNIGthcnRpY2U7IHNhZGEgbW9yYXRlIGtvbnRha3RpcmF0aSBzdm9nIG1vYmlsbm9nIG9wZXJhdGVyYSBkYSBiaSBvdGtsanXEjWFvIHZhxaEgdXJlxJFhai4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5ldG/EjWFuIFBJTiBrw7RkIFNJTSBrYXJ0aWNlOyBpbWF0ZSBqb8WhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBva3XFoWFqLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDU1Y2YyNGYuLjJlY2ZiMjEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJBZGphIG1lZyDDumpyYSBhIGhlbHllcyBQVUsga8OzZG90LiBBeiBpc23DqXRlbHQgcHLDs2LDoWxrb3rDoXNzYWwgdsOpZ2xlZ2VzZW4gbGV0aWx0amEgYSBTSU0ga8OhcnR5w6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJBIFBJTiBrw7Nkb2sgbmVtIGVneWV6bmVrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlTDumwgc29rIG1pbnRhcmFqem9sw6FzaSBwcsOzYsOhbGtvesOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBoZWx5dGVsZW7DvGwgYWR0YSBtZWcgUElOIGvDs2Rqw6F0LiBcblxuUHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBoZWx5dGVsZW7DvGwgYWR0YSBtZWcgYSBqZWxzesOzdC4gXG5cblByw7Niw6FsamEgw7pqcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbcOhc29kcGVyYyBtw7psdmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcm9zc3p1bCByYWp6b2x0YSBsZSBmZWxvbGTDoXNpIG1pbnTDoXQuIFxuXG5QcsOzYsOhbGphIMO6anJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcHLDs2LDoWxrb3pvdHQgc2lrZXJ0ZWxlbsO8bCBhIHTDoWJsYWfDqXAgesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6Fzw6F2YWwuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIHZpc3N6YcOhbGzDrXRqYSBhIHTDoWJsYWfDqXBldCBhIGd5w6FyaSDDoWxsYXBvdGJhOyBla2tvciBheiDDtnNzemVzIGFkYXQgdMO2cmzFkWRpayByw7NsYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdGVsZWZvbiB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdG92w6FiYmkgc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGEgcmVuZHN6ZXIgdmlzc3phw6FsbMOtdGphIGEgdGVsZWZvbnQgYSBnecOhcmkgw6FsbGFwb3RiYTsgZWtrb3IgYXogw7Zzc3plcyBhZGF0IHTDtnJsxZFkaWsgcsOzbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgaGVseXRlbGVuw7xsIGFkdGEgbWVnIFBJTiBrw7NkasOhdC4gXG5cblByw7Niw6FsamEgw7pqcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtw6Fzb2RwZXJjIG3Dumx2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIGhlbHl0ZWxlbsO8bCBhZHRhIG1lZyBhIGplbHN6w7N0LiBcblxuUHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcm9zc3p1bCByYWp6b2x0YSBsZSBmZWxvbGTDoXNpIG1pbnTDoXQuIFxuXG5QcsOzYsOhbGphIMO6anJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbcOhc29kcGVyYyBtw7psdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0w6FibGFnw6lwIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIHZpc3N6YcOhbGzDrXRqYSBhIHTDoWJsYWfDqXBldCBhIGd5w6FyaSDDoWxsYXBvdGJhOyBla2tvciBheiDDtnNzemVzIGFkYXQgdMO2cmzFkWRpayByw7NsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0ZWxlZm9uIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIHZpc3N6YcOhbGzDrXRqYSBhIHRlbGVmb250IGEgZ3nDoXJpIMOhbGxhcG90YmE7IGVra29yIGF6IMO2c3N6ZXMgYWRhdCB0w7ZybMWRZGlrIHLDs2xhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdMOhYmxhZ8OpcCB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gQSByZW5kc3plciB2aXNzemHDoWxsw610amEgYSB0w6FibGFnw6lwZXQgYSBnecOhcmkgw6FsbGFwb3RiYSwgw6lzIGFubmFrIMO2c3N6ZXMgYWRhdGEgdMO2cmzFkWRpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdGVsZWZvbiB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gQSByZW5kc3plciB2aXNzemHDoWxsw610amEgYSB0ZWxlZm9udCBhIGd5w6FyaSDDoWxsYXBvdGJhLCDDqXMgYW5uYWsgw7Zzc3plcyBhZGF0YSB0w7ZybMWRZGlrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcHLDs2LDoWxrb3pvdHQgc2lrZXJ0ZWxlbsO8bCBhIHTDoWJsYWfDqXAgesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6Fzw6F2YWwuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIGVsdMOhdm9sw610amEgZXp0IGEgZmVsaGFzem7DoWzDs3Q7IGVra29yIMO2c3N6ZXMgZmVsaGFzem7DoWzDs2kgYWRhdGEgdMO2cmzFkWRuaSBmb2cuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcHLDs2LDoWxrb3pvdHQgc2lrZXJ0ZWxlbsO8bCBhIHRlbGVmb24gesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6Fzw6F2YWwuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIGVsdMOhdm9sw610amEgZXp0IGEgZmVsaGFzem7DoWzDs3Q7IGVra29yIMO2c3N6ZXMgZmVsaGFzem7DoWzDs2kgYWRhdGEgdMO2cmzFkWRuaSBmb2cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0w6FibGFnw6lwIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIGVsdMOhdm9sw610amEgZXp0IGEgZmVsaGFzem7DoWzDs3Q7IGVra29yIMO2c3N6ZXMgZmVsaGFzem7DoWzDs2kgYWRhdGEgdMO2cmzFkWRuaSBmb2cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdGVsZWZvbiB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0b3bDoWJiaSBzaWtlcnRlbGVuIGvDrXPDqXJsZXQgdXTDoW4gYSByZW5kc3plciBlbHTDoXZvbMOtdGphIGV6dCBhIGZlbGhhc3puw6Fsw7N0OyBla2tvciDDtnNzemVzIGZlbGhhc3puw6Fsw7NpIGFkYXRhIHTDtnJsxZFkbmkgZm9nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcHLDs2LDoWxrb3pvdHQgc2lrZXJ0ZWxlbsO8bCBhIHTDoWJsYWfDqXAgesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6Fzw6F2YWwuIEEgcmVuZHN6ZXIgZWx0w6F2b2zDrXRqYSBhIGZlbGhhc3puw6Fsw7N0LCDDqXMgYW5uYWsgw7Zzc3plcyBmZWxoYXN6bsOhbMOzaSBhZGF0YSB0w7ZybMWRZGlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0ZWxlZm9uIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiBBIHJlbmRzemVyIGVsdMOhdm9sw610amEgYSBmZWxoYXN6bsOhbMOzdCwgw6lzIGFubmFrIMO2c3N6ZXMgZmVsaGFzem7DoWzDs2kgYWRhdGEgdMO2cmzFkWRpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0w6FibGFnw6lwIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0b3bDoWJiaSBzaWtlcnRlbGVuIGvDrXPDqXJsZXQgdXTDoW4gYSByZW5kc3plciBlbHTDoXZvbMOtdGphIG11bmthaGVseWkgcHJvZmlsasOhdDsgZWtrb3Igw7Zzc3plcyBwcm9maWxhZGF0YSB0w7ZybMWRZG5pIGZvZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdGVsZWZvbiB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdG92w6FiYmkgc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGEgcmVuZHN6ZXIgZWx0w6F2b2zDrXRqYSBtdW5rYWhlbHlpIHByb2ZpbGrDoXQ7IGVra29yIMO2c3N6ZXMgcHJvZmlsYWRhdGEgdMO2cmzFkWRuaSBmb2cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIHByw7Niw6Fsa296b3R0IHNpa2VydGVsZW7DvGwgYSB0w6FibGFnw6lwIHrDoXJvbMOhc8OhbmFrIGZlbG9sZMOhc8OhdmFsLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRvdsOhYmJpIHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBhIHJlbmRzemVyIGVsdMOhdm9sw610amEgbXVua2FoZWx5aSBwcm9maWxqw6F0OyBla2tvciDDtnNzemVzIHByb2ZpbGFkYXRhIHTDtnJsxZFkbmkgZm9nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGFsa2Fsb21tYWwgcHLDs2LDoWxrb3pvdHQgc2lrZXJ0ZWxlbsO8bCBhIHRlbGVmb24gesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6Fzw6F2YWwuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdG92w6FiYmkgc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGEgcmVuZHN6ZXIgZWx0w6F2b2zDrXRqYSBtdW5rYWhlbHlpIHByb2ZpbGrDoXQ7IGVra29yIMO2c3N6ZXMgcHJvZmlsYWRhdGEgdMO2cmzFkWRuaSBmb2cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdMOhYmxhZ8OpcCB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gQSByZW5kc3plciBlbHTDoXZvbMOtdGphIG11bmthaGVseWkgcHJvZmlsasOhdCwgw6lzIMO2c3N6ZXMgcHJvZmlsYWRhdGEgdMO2cmzFkWRpay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBwcsOzYsOhbGtvem90dCBzaWtlcnRlbGVuw7xsIGEgdGVsZWZvbiB6w6Fyb2zDoXPDoW5hayBmZWxvbGTDoXPDoXZhbC4gQSByZW5kc3plciBlbHTDoXZvbMOtdGphIG11bmthaGVseWkgcHJvZmlsasOhdCwgw6lzIMO2c3N6ZXMgcHJvZmlsYWRhdGEgdMO2cmzFkWRpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBoZWx5dGVsZW7DvGwgcmFqem9sdGEgbGUgYSBmZWxvbGTDoXNpIG1pbnTDoXQuIFRvdsOhYmJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNpa2VydGVsZW4ga8Otc8OpcmxldCB1dMOhbiBlZ3kgZS1tYWlsIGZpw7NrIGhhc3puw6FsYXTDoXZhbCBrZWxsIGZlbG9sZGFuaWEgYSB0w6FibGFnw6lww6l0LlxuXG4gS8OpcmrDvGssIHByw7Niw6FsamEgw7pqcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gbcOhc29kcGVyYyBtw7psdmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBhbGthbG9tbWFsIGhlbHl0ZWxlbsO8bCByYWp6b2x0YSBsZSBhIGZlbG9sZMOhc2kgbWludMOhdC4gVG92w6FiYmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGVneSBlLW1haWwgZmnDs2sgaGFzem7DoWxhdMOhdmFsIGtlbGwgZmVsb2xkYW5pYSBhIHRlbGVmb25qw6F0LlxuXG4gS8OpcmrDvGssIHByw7Niw6FsamEgw7pqcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gbcOhc29kcGVyYyBtw7psdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gYWxrYWxvbW1hbCBoZWx5dGVsZW7DvGwgcmFqem9sdGEgbGUgYSBmZWxvbGTDoXNpIG1pbnTDoXQuIFRvdsOhYmJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2lrZXJ0ZWxlbiBrw61zw6lybGV0IHV0w6FuIGVneSBlLW1haWwgZmnDs2sgaGFzem7DoWxhdMOhdmFsIGtlbGwgZmVsb2xkYW5pYSBhIHTDoWJsYWfDqXDDqXQuXG5cbiBLw6lyasO8aywgcHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBhbGthbG9tbWFsIGhlbHl0ZWxlbsO8bCByYWp6b2x0YSBsZSBhIGZlbG9sZMOhc2kgbWludMOhdC4gVG92w6FiYmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzaWtlcnRlbGVuIGvDrXPDqXJsZXQgdXTDoW4gZWd5IGUtbWFpbCBmacOzayBoYXN6bsOhbGF0w6F2YWwga2VsbCBmZWxvbGRhbmlhIGEgdGVsZWZvbmrDoXQuXG5cbiBLw6lyasO8aywgcHLDs2LDoWxqYSDDumpyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IG3DoXNvZHBlcmMgbcO6bHZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iSGVseXRlbGVuIFBJTi1rw7NkIGEgU0lNIGvDoXJ0ecOhaG96OyB2ZWd5ZSBmZWwgYSBrYXBjc29sYXRvdCBzem9sZ8OhbHRhdMOzasOhdmFsIGF6IGVzemvDtnogZmVsb2xkw6Fzw6Fob3ouIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkEgU0lNIGvDoXJ0eWEgUElOIGvDs2RqYSBoZWx5dGVsZW4uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHByw7Niw6Fsa296w6FzIG1hcmFkdC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IDdjNzcxY2EuLmU2NjkyYWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItWO1aXWgNWh1bTVuNaC1b/WhNWh1aPWgNWl1oQg1bPVq9W31b8gUFVLINWu1aHVrtWv1aHVo9Wr1oDVqDog1L/WgNWv1bbVvtW41bIg1oPVuNaA1bHVpdaA1agg1ajVttWk1bTVq9W31b8g1a/Vr9Wh1b3VpdaB1bbVpdW2IFNJTSDWhNWh1oDVv9WoOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4g1a7VodWu1a/VodWj1oDVpdaA1agg1bnVpdW2INWw1aHVtNWo1bbVr9W21bjWgtW0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i1YnVodaD1avWgSDVt9Wh1b8g1b3VrdWl1bTVodW11asg1oPVuNaA1bHVpdaAIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDVpdaEINW01bjWgtW/1oTVodWj1oDVpdWsINWx1aXWgCBQSU4t1ag6IFxuXG7Vk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVvtWh1bXWgNWv1bXVodW21avWgToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i1LTVuNaC1oQg1b3VrdWh1awg1aXWhCDVtNW41oLVv9aE1aHVo9aA1aXVrCDVsdWl1oAg1aPVodWy1b/VttWh1aLVodW81aggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtDogXG5cbtWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDVpdaEINWw1aHVvtWh1oTVpdWsINWx1aXWgCDVodW61aHVr9W41bLVutW01aHVtiDVvdWt1aXVtNWh1bY6IFxuXG7Vk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVvtWh1bXWgNWv1bXVodW21avWgToiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWj1oDVodW91aHVrNWr1a/VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWh1bXVvSDVo9aA1aHVvdWh1azVq9Wv1agg1a/VvtWl1oDVodWv1aHVtdW+1asg1ocg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1bDVpdW81aHVrdW41b3VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWh1bXVvSDVsNWl1bzVodWt1bjVvdWoINWv1b7VpdaA1aHVr9Wh1bXVvtWrINaHINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDVpdaEINW01bjWgtW/1oTVodWj1oDVpdWsINWx1aXWgCBQSU4t1ag6IFxuXG7Vk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLUtNW41oLWhCDVvdWt1aHVrCDVpdaEINW01bjWgtW/1oTVodWj1oDVpdWsINWx1aXWgCDVo9Wh1bLVv9W21aHVotWh1bzVqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INWh1bbVo9Wh1bQ6IFxuXG7Vk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDVodW21aPVodW0INW91a3VodWsINWl1oQg1bDVodW+1aHWhNWl1awg1bHVpdaAINWh1brVodWv1bjVstW61bTVodW2INW91a3VpdW01aHVtjogXG5cbtWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i1LTVuNaC1oQg1a/VodW/1aHWgNWl1awg1aXWhCDVo9aA1aHVvdWh1azVq9Wv1bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1aHVtdW9INWj1oDVodW91aHVrNWr1a/VqCDVr9W+1aXWgNWh1a/VodW11b7VqyDWhyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i1LTVuNaC1oQg1a/VodW/1aHWgNWl1awg1aXWhCDVsNWl1bzVodWt1bjVvdW2INWh1brVodWv1bjVstW61aXVrNW41oIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsTog1LXVvtW9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWh1bXVvSDVsNWl1bzVodWt1bjVvdWoINWv1b7VpdaA1aHVr9Wh1bXVvtWrINaHINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWj1oDVodW91aHVrNWr1a/VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsTog1LHVtdW9INWj1oDVodW91aHVrNWr1a/VqCDVr9W+1aXWgNWh1a/VodW11b7VqyDWhyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWw1aXVvNWh1a3VuNW91bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INSx1bXVvSDVsNWl1bzVodWt1bjVvdWoINWv1b7VpdaA1aHVr9Wh1bXVvtWrINaHINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1aPWgNWh1b3VodWs1avVr9W2INWh1brVodWv1bjVstW61aXVrNW41oIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INS11b7VvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1aHVtdW9INaF1aPVv9W+1bjVstWoINWv1bDVpdW81aHWgdW+1asg1ocg1oXVo9W/1b7VuNWy1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1bDVpdW81aHVrdW41b3VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWh1bXVvSDWhdWj1b/VvtW41bLVqCDVr9Ww1aXVvNWh1oHVvtWrINaHINaF1aPVv9W+1bjVstWrINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1aPWgNWh1b3VodWs1avVr9W2INWh1brVodWv1bjVstW61aXVrNW41oIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsTog1LXVvtW9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWh1bXVvSDWhdWj1b/VvtW41bLVqCDVr9Ww1aXVvNWh1oHVvtWrINaHINaF1aPVv9W+1bjVstWrINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWw1aXVvNWh1a3VuNW91bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1aHVtdW9INaF1aPVv9W+1bjVstWoINWv1bDVpdW81aHWgdW+1asg1ocg1oXVo9W/1b7VuNWy1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWj1oDVodW91aHVrNWr1a/VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsTog1ZXVo9W/1b7VuNWy1agg1a/VsNWl1bzVodaB1b7VqyDWhyDWhdWj1b/VvtW41bLVqyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWw1aXVvNWh1a3VuNW91bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INWV1aPVv9W+1bjVstWoINWv1bDVpdW81aHWgdW+1asg1ocg1oXVo9W/1b7VuNWy1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i1LTVuNaC1oQg1a/VodW/1aHWgNWl1awg1aXWhCDVo9aA1aHVvdWh1azVq9Wv1bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsTog1LXVvtW9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWx1avWgSDVsNWl1b/VuCDVodW31a3VodW/1aHVttaE1aHVtdWr1bYg1brWgNW41obVq9Ws1agg1a/VsNWl1bzVodaB1b7VqyDWhyDVutaA1bjWhtWr1azVqyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i1LTVuNaC1oQg1a/VodW/1aHWgNWl1awg1aXWhCDVsNWl1bzVodWt1bjVvdW2INWh1brVodWv1bjVstW61aXVrNW41oIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INS11b7VvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1aHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INW61oDVuNaG1avVrNWoINWv1bDVpdW81aHWgdW+1asg1ocg1brWgNW41obVq9Ws1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i1LTVuNaC1oQg1a/VodW/1aHWgNWl1awg1aXWhCDVo9aA1aHVvdWh1azVq9Wv1bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUtdW+1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDVodW21bDVodW71bjVsiDWg9W41oDVsdWr1oEg1bDVpdW/1bgg1aHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INW61oDVuNaG1avVrNWoINWv1bDVpdW81aHWgdW+1asg1ocg1brWgNW41obVq9Ws1asg1aLVuNWs1bjWgCDVv9W+1bXVodWs1bbVpdaA1agg1a/Vu9W21bvVvtWl1bY6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1bDVpdW81aHVrdW41b3VtiDVodW61aHVr9W41bLVutWl1azVuNaCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INS11b7VvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWx1avWgSDVsNWl1b/VuCDVodW31a3VodW/1aHVttaE1aHVtdWr1bYg1brWgNW41obVq9Ws1agg1a/VsNWl1bzVodaB1b7VqyDWhyDVutaA1bjWhtWr1azVqyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+ItS01bjWgtaEINWv1aHVv9Wh1oDVpdWsINWl1oQg1aPWgNWh1b3VodWs1avVr9W2INWh1brVodWv1bjVstW61aXVrNW41oIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWxOiDUsdW31a3VodW/1aHVttaE1aHVtdWr1bYg1brWgNW41obVq9Ws1agg1a/VsNWl1bzVodaB1b7VqyDWhyDVutaA1bjWhtWr1azVqyDVotW41azVuNaAINW/1b7VtdWh1azVttWl1oDVqCDVr9W71bbVu9W+1aXVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLUtNW41oLWhCDVr9Wh1b/VodaA1aXVrCDVpdaEINWw1aXVvNWh1a3VuNW91bYg1aHVutWh1a/VuNWy1brVpdWs1bjWgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bE6INSx1bfVrdWh1b/VodW21oTVodW11avVtiDVutaA1bjWhtWr1azVqCDVr9Ww1aXVvNWh1oHVvtWrINaHINW61oDVuNaG1avVrNWrINWi1bjVrNW41oAg1b/VvtW11aHVrNW21aXWgNWoINWv1bvVttW71b7VpdW2OiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLUtNW41oLWhCDVvdWt1aHVrCDVpdaEINWw1aHVvtWh1oTVpdWsINWx1aXWgCDVodW61aHVr9W41bLVutW01aHVtiDVvdWt1aXVtNWh1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtDog1LXVvtW9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INWh1bbVsNWh1bvVuNWyINaD1bjWgNWx1avWgSDVsNWl1b/VuCDVsdWl1abVodW21avWgSDVr9W61aHVsNWh1bbVu9W+1asg1aHVutWh1a/VuNWy1brVpdWsINWx1aXWgCDVo9aA1aHVvdWh1azVq9Wv1ahgINaF1aPVv9Wh1aPVuNaA1a7VpdWs1bjVviDVp9Ws1oPVuNW91b/VqyDVsNWh1bfVq9W+OlxuXG4g1ZPVuNaA1bHVpdaEINWv1oDVr9Wr1bYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLUtNW41oLWhMKgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDVpdaEINWw1aHVvtWh1oTVpdWsINWx1aXWgCDVodW61aHVr9W41bLVutW01aHVtiDVttW01bjWgtW31ag6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INWh1bbVo9Wh1bTVq9aBINWh1b7VpdWsINWh1bbVsNWh1bvVuNWyINaD1bjWgNWx1aXWgNWr1oEg1bDVpdW/1bgg1bHVpdWmINWv1aHVvNWh1bvVodaA1a/VvtWrINWh1brVodWv1bjVstW61aXVrCDVsdWl1oAg1bDVpdW81aHVrdW41b3VqGAg1oXVo9W/1aHVo9W41oDVrtWl1azVuNW+INWn1azWg9W41b3Vv9WrINWw1aHVt9Wr1b46XG5cbiDVk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDVvtWh1bXWgNWv1bXVodW21avWgToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i1LTVuNaC1oQg1b3VrdWh1awg1aXWhCDVsNWh1b7VodaE1aXVrCDVsdWl1oAg1aHVutWh1a/VuNWy1brVtNWh1bYg1b3VrdWl1bTVodW2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g1aHVttWj1aHVtDog1LXVvtW9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVq9aBINWw1aXVv9W4INWx1aXVptWh1bbVq9aBINWv1brVodWw1aHVttW71b7VqyDVodW61aHVr9W41bLVutWl1awg1bHVpdaAINWj1oDVodW91aHVrNWr1a/VqGAg1oXVo9W/1aHVo9W41oDVrtWl1azVuNW+INWn1azWg9W41b3Vv9WrINWw1aHVt9Wr1b46XG5cbiDVk9W41oDVsdWl1oQg1a/WgNWv1avVtiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INW+1aHVtdaA1a/VtdWh1bbVq9aBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i1LTVuNaC1oTCoDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g1aHVttWj1aHVtCDVvdWt1aHVrCDVpdaEINWw1aHVvtWh1oTVpdWsINWx1aXWgCDVodW61aHVr9W41bLVutW01aHVtiDVttW01bjWgtW31ag6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g1aHVttWj1aHVtNWr1oEg1aHVvtWl1awg1aHVttWw1aHVu9W41bIg1oPVuNaA1bHVpdaA1avWgSDVsNWl1b/VuCDVsdWl1aYg1a/VodW81aHVu9Wh1oDVr9W+1asg1aHVutWh1a/VuNWy1brVpdWsINWx1aXWgCDVsNWl1bzVodWt1bjVvdWoYCDWhdWj1b/VodWj1bjWgNWu1aXVrNW41b4g1afVrNaD1bjVvdW/1asg1bDVodW31avVvjpcblxuINWT1bjWgNWx1aXWhCDVr9aA1a/Vq9W2IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g1b7VodW11oDVr9W11aHVttWr1oE6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLVjdWt1aHVrCBTSU0gUElOINWv1bjVpNWrINW61aHVv9Wz1aHVvNW41b4g1brVpdW/1oQg1acg1aTVq9W01aXWhCDVsdWl1oAg1oXVutWl1oDVodW/1bjWgNWr1bbVnSDVvdWh1oDWhNW2INWh1oDVo9Wl1azVodWi1aHWgdWl1azVuNaCINWw1aHVtNWh1oA6Ijwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5TSU0gUElOINWv1bjVpNWoINW91a3VodWsINWnOiDVhNW21aHWgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDWg9W41oDVsTo8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAppbmRleCBkYmUwMWU3Li40YjE4ZGJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iTWFzdWtrYW4ga2VtYmFsaSBrb2RlIFBVSyB5YW5nIGJlbmFyLiBKaWthIGJlcnVsYW5nIGthbGkgZ2FnYWwsIFNJTSBha2FuIGRpbm9uYWt0aWZrYW4gc2VjYXJhIHBlcm1hbmVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJLb2RlIFBJTiB0aWRhayBjb2NvayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRlcmxhbHUgYmFueWFrIHVwYXlhIHBvbGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkFuZGEgdGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZXRpayBQSU4uIFxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZGV0aWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkFuZGEgdGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZXRpayBzYW5kaS4gXG5cbkNvYmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQW5kYSB0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIHNhbGFoIG1lbmdnYW1iYXIgcG9sYSBwZW1idWthIGt1bmNpLiBcblxuQ29iYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRldGlrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSB1cGF5YSB5YW5nIHRpZGFrIGJlcmhhc2lsLCB0YWJsZXQgaW5pIGFrYW4gZGlzZXRlbCB1bGFuZywgc2VoaW5nZ2Egc2VtdWEgZGF0YW55YSBha2FuIGRpaGFwdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSB1cGF5YSB5YW5nIHRpZGFrIGJlcmhhc2lsLCBwb25zZWwgaW5pIGFrYW4gZGlzZXRlbCB1bGFuZywgc2VoaW5nZ2Egc2VtdWEgZGF0YW55YSBha2FuIGRpaGFwdXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJBbmRhIHRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZXRpayBQSU4uIFxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQW5kYSB0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgc2FsYWggbWVuZ2V0aWsgc2FuZGkuIFxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQW5kYSB0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgc2FsYWggbWVuZ2dhbWJhciBwb2xhIHBlbWJ1a2Ega3VuY2kuIFxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHVwYXlhIHlhbmcgdGlkYWsgYmVyaGFzaWwsIHRhYmxldCBpbmkgYWthbiBkaXNldGVsIHVsYW5nLCBzZWhpbmdnYSBzZW11YSBkYXRhbnlhIGFrYW4gZGloYXB1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iU3VkYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSBwb25zZWwgZGVuZ2FuIHRpZGFrIGJlbmFyLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSB1cGF5YSB5YW5nIHRpZGFrIGJlcmhhc2lsLCBwb25zZWwgaW5pIGFrYW4gZGlzZXRlbCB1bGFuZywgc2VoaW5nZ2Egc2VtdWEgZGF0YW55YSBha2FuIGRpaGFwdXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHRpZGFrIGJlbmFyLiBUYWJsZXQgaW5pIGFrYW4gZGlzZXRlbCB1bGFuZywgc2VoaW5nZ2EgbWVuZ2hhcHVzIHNlbXVhIGRhdGFueWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iU3VkYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFBvbnNlbCBpbmkgYWthbiBkaXNldGVsIHVsYW5nLCBzZWhpbmdnYSBtZW5naGFwdXMgc2VtdWEgZGF0YW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHRpZGFrIGJlbmFyLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgeWFuZyB0aWRhayBiZXJoYXNpbCwgcGVuZ2d1bmEgaW5pIGFrYW4gZGloYXB1cywgc2VoaW5nZ2Egc2VtdWEgZGF0YSBwZW5nZ3VuYSBha2FuIGRpaGFwdXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSB1cGF5YSB5YW5nIHRpZGFrIGJlcmhhc2lsLCBwZW5nZ3VuYSBpbmkgYWthbiBkaWhhcHVzLCBzZWhpbmdnYSBzZW11YSBkYXRhIHBlbmdndW5hIGFrYW4gZGloYXB1cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHVwYXlhIHlhbmcgdGlkYWsgYmVyaGFzaWwsIHBlbmdndW5hIGluaSBha2FuIGRpaGFwdXMsIHNlaGluZ2dhIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHVwYXlhIHlhbmcgdGlkYWsgYmVyaGFzaWwsIHBlbmdndW5hIGluaSBha2FuIGRpaGFwdXMsIHNlaGluZ2dhIHNlbXVhIGRhdGEgcGVuZ2d1bmEgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iU3VkYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHRhYmxldCBkZW5nYW4gdGlkYWsgYmVuYXIuIFBlbmdndW5hIGluaSBha2FuIGRpaGFwdXMsIHNlaGluZ2dhIG1lbmdoYXB1cyBzZW11YSBkYXRhIHBlbmdndW5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSBwb25zZWwgZGVuZ2FuIHRpZGFrIGJlbmFyLiBQZW5nZ3VuYSBpbmkgYWthbiBkaWhhcHVzLCBzZWhpbmdnYSBtZW5naGFwdXMgc2VtdWEgZGF0YSBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHRpZGFrIGJlbmFyLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgeWFuZyB0aWRhayBiZXJoYXNpbCwgcHJvZmlsIGtlcmphIGFrYW4gZGloYXB1cywgc2VoaW5nZ2Egc2VtdWEgZGF0YSBwcm9maWwgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSBwb25zZWwgZGVuZ2FuIHRpZGFrIGJlbmFyLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgeWFuZyB0aWRhayBiZXJoYXNpbCwgcHJvZmlsIGtlcmphIGFrYW4gZGloYXB1cywgc2VoaW5nZ2Egc2VtdWEgZGF0YSBwcm9maWwgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FsaSBBbmRhIGJlcnVwYXlhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGRlbmdhbiB0aWRhayBiZW5hci4gU2V0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgeWFuZyB0aWRhayBiZXJoYXNpbCwgcHJvZmlsIGtlcmphIGFrYW4gZGloYXB1cywgc2VoaW5nZ2Egc2VtdWEgZGF0YSBwcm9maWwgYWthbiBkaWhhcHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJTdWRhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFNldGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHVwYXlhIHlhbmcgdGlkYWsgYmVyaGFzaWwsIHByb2ZpbCBrZXJqYSBha2FuIGRpaGFwdXMsIHNlaGluZ2dhIHNlbXVhIGRhdGEgcHJvZmlsIGFrYW4gZGloYXB1cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlN1ZGFoIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYWxpIEFuZGEgYmVydXBheWEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgZGVuZ2FuIHRpZGFrIGJlbmFyLiBQcm9maWwga2VyamEgYWthbiBkaWhhcHVzLCBzZWhpbmdnYSBtZW5naGFwdXMgc2VtdWEgZGF0YSBwcm9maWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iU3VkYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkgQW5kYSBiZXJ1cGF5YSBtZW1idWthIGt1bmNpIHBvbnNlbCBkZW5nYW4gdGlkYWsgYmVuYXIuIFByb2ZpbCBrZXJqYSBha2FuIGRpaGFwdXMsIHNlaGluZ2dhIG1lbmdoYXB1cyBzZW11YSBkYXRhIHByb2ZpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iQW5kYSB0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpIHNhbGFoIG1lbmdnYW1iYXIgcG9sYSBwZW1idWthIGt1bmNpLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgZ2FnYWwsIEFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IG1lbmdndW5ha2FuIGFrdW4gZW1haWwuXG5cbkNvYmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBkZXRpay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkFuZGEgdGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZ2FtYmFyIHBvbGEgcGVtYnVrYSBrdW5jaS4gU2V0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHVwYXlhIGdhZ2FsLCBBbmRhIGFrYW4gZGltaW50YSBtZW1idWthIGt1bmNpIHBvbnNlbCBtZW5nZ3VuYWthbiBha3VuIGVtYWlsLlxuXG5Db2JhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gZGV0aWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkFuZGEgdGVsYWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpIHNhbGFoIG1lbmdnYW1iYXIgcG9sYSBwZW1idWthIGt1bmNpLiBTZXRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSB1cGF5YSBnYWdhbCwgQW5kYSBha2FuIGRpbWludGEgbWVtYnVrYSBrdW5jaSB0YWJsZXQgbWVuZ2d1bmFrYW4gYWt1biBlbWFpbC5cblxuQ29iYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gZGV0aWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJBbmRhIHRlbGFoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FsaSBzYWxhaCBtZW5nZ2FtYmFyIHBvbGEgcGVtYnVrYSBrdW5jaS4gU2V0ZWxhaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGxhZ2kgdXBheWEgZ2FnYWwsIEFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgcG9uc2VsIG1lbmdndW5ha2FuIGFrdW4gZW1haWwuXG5cbkNvYmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IGRldGlrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iS29kZSBQSU4gU0lNIHNhbGFoLiBIdWJ1bmdpIG9wZXJhdG9yIHVudHVrIG1lbWJ1a2Ega3VuY2kgcGVyYW5na2F0LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5Lb2RlIFBJTiBTSU0gc2FsYWgsIHNpc2EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcGVyY29iYWFuLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKaW5kZXggMjNlMTM1Yi4uNGI4YjcwMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iUHLDs2Zhw7B1IGFmdHVyIGHDsCBzZXRqYSBpbm4gcsOpdHQgUFVLLW7Dum1lci4gRW5kdXJ0ZWtuYXIgdGlscmF1bmlyIGdlcmEgU0lNLWtvcnRpw7AgdmFyYW5sZWdhIMOzdmlya3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi1uw7ptZXJpbiBzdGVtbWEgZWtraSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Ik9mIG1hcmdhciB0aWxyYXVuaXIgdGlsIGHDsCB0ZWlrbmEgbXluc3R1ciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iw57DuiBoZWZ1ciBzbGVnacOwIGlubiByYW5ndCBQSU4tbsO6bWVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHNpbm51bS4gXG5cblJleW5kdSBhZnR1ciBlZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWvDum5kdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsOew7ogaGVmdXIgc2xlZ2nDsCBpbm4gcmFuZ3QgYcOwZ2FuZ3NvcsOwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHNpbm51bS4gXG5cblJleW5kdSBhZnR1ciBlZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWvDum5kdXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IsOew7ogaGVmdXIgdGVpa25hw7AgcmFuZ3Qgb3BudW5hcm15bnN0dXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gc2lubnVtLiBcblxuUmV5bmR1IGFmdHVyIGVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciB0aWwgYcOwIG9wbmEgc3BqYWxkdMO2bHZ1bmEuIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBzcGphbGR0w7ZsdmFuIGVuZHVyc3RpbGx0LCBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIGfDtmdudW0gaGVubmFyIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHPDrW1hbm4uIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBzw61taW5uIGVuZHVyc3RpbGx0dXIsIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gZ8O2Z251bSBoYW5zIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IsOew7ogaGVmdXIgc2xlZ2nDsCBpbm4gcmFuZ3QgUElOLW7Dum1lciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHNpbm51bS4gXG5cblJleW5kdSBhZnR1ciBlZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iw57DuiBoZWZ1ciBzbGVnacOwIGlubiByYW5ndCBhw7BnYW5nc29yw7AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBzaW5udW0uIFxuXG5SZXluZHUgYWZ0dXIgZWZ0aXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWvDum5kdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IsOew7ogaGVmdXIgdGVpa25hw7AgcmFuZ3Qgb3BudW5hcm15bnN0dXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBzaW5udW0uIFxuXG5SZXluZHUgYWZ0dXIgZWZ0aXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWvDum5kdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciB0aWwgYcOwIG9wbmEgc3BqYWxkdMO2bHZ1bmEuIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciDDrSB2acOwYsOzdCB2ZXLDsHVyIHNwamFsZHTDtmx2YW4gZW5kdXJzdGlsbHQsIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gZ8O2Z251bSBoZW5uYXIgdmVyw7B1ciBleXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzw61tYW5uLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBzw61taW5uIGVuZHVyc3RpbGx0dXIsIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gZ8O2Z251bSBoYW5zIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzcGphbGR0w7ZsdnVuYS4gU3BqYWxkdMO2bHZhbiB2ZXLDsHVyIGVuZHVyc3RpbGx0LCBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIGfDtmdudW0gaGVubmFyIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHPDrW1hbm4uIFPDrW1pbm4gdmVyw7B1ciBlbmR1cnN0aWxsdHVyLCBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIGfDtmdudW0gaGFucyB2ZXLDsHVyIGV5dHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHNwamFsZHTDtmx2dW5hLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgbm90YW5kaW5uIGZqYXJsw6Znw7B1ciBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIG5vdGFuZGFnw7ZnbnVtIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHPDrW1hbm4uIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBub3RhbmRpbm4gZmphcmzDpmfDsHVyIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gbm90YW5kYWfDtmdudW0gdmVyw7B1ciBleXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IsOew7ogaGVmdXIgZ2VydCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHNwamFsZHTDtmx2dW5hLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBub3RhbmRpbm4gZmphcmzDpmfDsHVyIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gbm90YW5kYWfDtmdudW0gdmVyw7B1ciBleXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzw61tYW5uLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciBub3RhbmRpbm4gZmphcmzDpmfDsHVyIG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gbm90YW5kYWfDtmdudW0gdmVyw7B1ciBleXR0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzcGphbGR0w7ZsdnVuYS4gTm90YW5kaW5uIHZlcsOwdXIgZmphcmzDpmfDsHVyLCBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIG5vdGFuZGFnw7ZnbnVtIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHPDrW1hbm4uIE5vdGFuZGlubiB2ZXLDsHVyIGZqYXJsw6Znw7B1ciwgbWXDsCDDvmVpbSBhZmxlacOwaW5ndW0gYcOwIMO2bGx1bSBub3RhbmRhZ8O2Z251bSB2ZXLDsHVyIGV5dHQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHNwamFsZHTDtmx2dW5hLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgdmlubnVzbmnDsGnDsCBmamFybMOmZ3QgbWXDsCDDvmVpbSBhZmxlacOwaW5ndW0gYcOwIMO2bGx1bSBnw7ZnbnVtIMO+ZXNzIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzw61tYW5uLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgdmlubnVzbmnDsGnDsCBmamFybMOmZ3QgbWXDsCDDvmVpbSBhZmxlacOwaW5ndW0gYcOwIMO2bGx1bSBnw7ZnbnVtIMO+ZXNzIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIHRpbCBhw7Agb3BuYSBzcGphbGR0w7ZsdnVuYS4gRWZ0aXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgdmlubnVzbmnDsGnDsCBmamFybMOmZ3QgbWXDsCDDvmVpbSBhZmxlacOwaW5ndW0gYcOwIMO2bGx1bSBnw7ZnbnVtIMO+ZXNzIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iw57DuiBoZWZ1ciBnZXJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHPDrW1hbm4uIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciDDrSB2acOwYsOzdCB2ZXLDsHVyIHZpbm51c25pw7Bpw7AgZmphcmzDpmd0IG1lw7Agw75laW0gYWZsZWnDsGluZ3VtIGHDsCDDtmxsdW0gZ8O2Z251bSDDvmVzcyB2ZXLDsHVyIGV5dHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLDnsO6IGhlZnVyIGdlcnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgdGlsIGHDsCBvcG5hIHNwamFsZHTDtmx2dW5hLiBWaW5udXNuacOwacOwIHZlcsOwdXIgZmphcmzDpmd0LCBtZcOwIMO+ZWltIGFmbGVpw7Bpbmd1bSBhw7Agw7ZsbHVtIGfDtmdudW0gw75lc3MgdmVyw7B1ciBleXR0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IsOew7ogaGVmdXIgZ2VydCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciB0aWwgYcOwIG9wbmEgc8OtbWFubi4gVmlubnVzbmnDsGnDsCB2ZXLDsHVyIGZqYXJsw6ZndCwgbWXDsCDDvmVpbSBhZmxlacOwaW5ndW0gYcOwIMO2bGx1bSBnw7ZnbnVtIMO+ZXNzIHZlcsOwdXIgZXl0dC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iw57DuiBoZWZ1ciB0ZWlrbmHDsCByYW5ndCBvcG51bmFybXluc3R1ciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBzaW5udW0uIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOhcmFuZ3Vyc2xhdXNhciB0aWxyYXVuaXIgw60gdmnDsGLDs3QgdmVyw7B1ciDDvsO6IGJlw7BpbihuKSB1bSBhw7Agb3BuYSBzcGphbGR0w7ZsdnVuYSBtZcOwIHTDtmx2dXDDs3N0cmVpa25pbmdpLlxuXG4gUmV5bmR1IGFmdHVyIGVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IsOew7ogaGVmdXIgdGVpa25hw7AgcmFuZ3Qgb3BudW5hcm15bnN0dXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gc2lubnVtLiBFZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgw77DuiBiZcOwaW4obikgdW0gYcOwIG9wbmEgc8OtbWFubiBtZcOwIHTDtmx2dXDDs3N0cmVpa25pbmdpLlxuXG4gUmV5bmR1IGFmdHVyIGVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iw57DuiBoZWZ1ciB0ZWlrbmHDsCByYW5ndCBvcG51bmFybXluc3R1ciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHNpbm51bS4gRWZ0aXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDDoXJhbmd1cnNsYXVzYXIgdGlscmF1bmlyIMOtIHZpw7Biw7N0IHZlcsOwdXIgw77DuiBiZcOwaW4obikgdW0gYcOwIG9wbmEgc3BqYWxkdMO2bHZ1bmEgbWXDsCB0w7ZsdnVww7NzdHJlaWtuaW5naS5cblxuIFJleW5kdSBhZnR1ciBlZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IsOew7ogaGVmdXIgdGVpa25hw7AgcmFuZ3Qgb3BudW5hcm15bnN0dXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBzaW5udW0uIEVmdGlyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gw6FyYW5ndXJzbGF1c2FyIHRpbHJhdW5pciDDrSB2acOwYsOzdCB2ZXLDsHVyIMO+w7ogYmXDsGluKG4pIHVtIGHDsCBvcG5hIHPDrW1hbm4gbWXDsCB0w7ZsdnVww7NzdHJlaWtuaW5naS5cblxuIFJleW5kdSBhZnR1ciBlZnRpciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla8O6bmR1ci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlJhbmd0IFBJTi1uw7ptZXIgU0lNLWtvcnRzLiDDnsO6IMO+YXJmdCBuw7puYSBhw7AgaGFmYSBzYW1iYW5kIHZpw7Agc8OtbWFmeXJpcnTDpmtpw7Agw75pdHQgdGlsIGHDsCB0YWthIHTDpmtpw7Agw7pyIGzDoXMuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5SYW5ndCBQSU4tbsO6bWVyIFNJTS1rb3J0cy4gw57DuiDDoXR0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRpbHJhdW4gZWZ0aXIuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggOThjYjBiMi4uMDhkNDExNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Ikluc2VyaXNjaSBkaSBudW92byBpbCBjb2RpY2UgUFVLIGNvcnJldHRvLiBSaXBldHV0aSB0ZW50YXRpdmkgY29tcG9ydGFubyBsYSBkaXNhdHRpdmF6aW9uZSBkZWZpbml0aXZhIGRlbGxhIHNjaGVkYSBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IkkgY29kaWNpIFBJTiBub24gY29ycmlzcG9uZG9ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IlRyb3BwaSB0ZW50YXRpdmkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkhhaSBkaWdpdGF0byBpbCB0dW8gUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZvbHRlIGluIG1vZG8gZXJyYXRvLiBcblxuUmlwcm92YSB0cmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vjb25kaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iSGFpIGRpZ2l0YXRvIGxhIHR1YSBwYXNzd29yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2b2x0ZSBpbiBtb2RvIGVycmF0by4gXG5cblJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBlcnJhdGkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEgZGkgc2Jsb2Njby4gXG5cblJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iSGFpIHRlbnRhdG8gZGkgc2Jsb2NjYXJlIGlsIHRhYmxldCBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZvbHRlLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBpbCB0YWJsZXQgdmVycsOgIHJpcHJpc3RpbmF0byBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSByZWxhdGl2aSBkYXRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGVsZWZvbm8gc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2b2x0ZS4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZmFsbGl0aSwgaWwgdGVsZWZvbm8gdmVycsOgIHJpcHJpc3RpbmF0byBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSByZWxhdGl2aSBkYXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSGFpIGRpZ2l0YXRvIGlsIHR1byBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2b2x0ZSBpbiBtb2RvIGVycmF0by4gXG5cblJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iSGFpIGRpZ2l0YXRvIGxhIHR1YSBwYXNzd29yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZvbHRlIGluIG1vZG8gZXJyYXRvLiBcblxuUmlwcm92YSB0cmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBlcnJhdGkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEgZGkgc2Jsb2Njby4gXG5cblJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGFibGV0IHNlbnphIHJpdXNjaXJjaSBwZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2b2x0ZS4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBpbCB0YWJsZXQgdmVycsOgIHJpcHJpc3RpbmF0byBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSByZWxhdGl2aSBkYXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGVsZWZvbm8gc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZvbHRlLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIGlsIHRlbGVmb25vIHZlcnLDoCByaXByaXN0aW5hdG8gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgcmVsYXRpdmkgZGF0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iSGFpIHRlbnRhdG8gZGkgc2Jsb2NjYXJlIGlsIHRhYmxldCBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2b2x0ZS4gSWwgdGFibGV0IHZlcnLDoCByaXByaXN0aW5hdG8gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgcmVsYXRpdmkgZGF0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGVsZWZvbm8gc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdm9sdGUuIElsIHRlbGVmb25vIHZlcnLDoCByaXByaXN0aW5hdG8gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgcmVsYXRpdmkgZGF0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGFibGV0IHNlbnphIHJpdXNjaXJjaSBwZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdm9sdGUuIERvcG8gYWx0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIHF1ZXN0byB1dGVudGUgdmVycsOgIHJpbW9zc28gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgZGF0aSBhc3NvY2lhdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZvbHRlLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBxdWVzdG8gdXRlbnRlIHZlcnLDoCByaW1vc3NvIGUgdmVycmFubm8gcXVpbmRpIGVsaW1pbmF0aSB0dXR0aSBpIGRhdGkgYXNzb2NpYXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0YWJsZXQgc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZvbHRlLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIHF1ZXN0byB1dGVudGUgdmVycsOgIHJpbW9zc28gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgZGF0aSBhc3NvY2lhdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdm9sdGUuIERvcG8gYWx0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmkgZmFsbGl0aSwgcXVlc3RvIHV0ZW50ZSB2ZXJyw6Agcmltb3NzbyBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSBkYXRpIGFzc29jaWF0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0YWJsZXQgc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdm9sdGUuIFF1ZXN0byB1dGVudGUgdmVycsOgIHJpbW9zc28gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgZGF0aSBhc3NvY2lhdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iSGFpIHRlbnRhdG8gZGkgc2Jsb2NjYXJlIGlsIHRlbGVmb25vIHNlbnphIHJpdXNjaXJjaSBwZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZvbHRlLiBRdWVzdG8gdXRlbnRlIHZlcnLDoCByaW1vc3NvIGUgdmVycmFubm8gcXVpbmRpIGVsaW1pbmF0aSB0dXR0aSBpIGRhdGkgYXNzb2NpYXRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0YWJsZXQgc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2b2x0ZS4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZmFsbGl0aSwgaWwgcHJvZmlsbyBkaSBsYXZvcm8gdmVycsOgIHJpbW9zc28gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgZGF0aSBhc3NvY2lhdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZvbHRlLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBpbCBwcm9maWxvIGRpIGxhdm9ybyB2ZXJyw6Agcmltb3NzbyBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSBkYXRpIGFzc29jaWF0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJIYWkgdGVudGF0byBkaSBzYmxvY2NhcmUgaWwgdGFibGV0IHNlbnphIHJpdXNjaXJjaSBwZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2b2x0ZS4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBpbCBwcm9maWxvIGRpIGxhdm9ybyB2ZXJyw6Agcmltb3NzbyBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSBkYXRpIGFzc29jaWF0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSGFpIHRlbnRhdG8gZGkgc2Jsb2NjYXJlIGlsIHRlbGVmb25vIHNlbnphIHJpdXNjaXJjaSBwZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2b2x0ZS4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCBpbCBwcm9maWxvIGRpIGxhdm9ybyB2ZXJyw6Agcmltb3NzbyBlIHZlcnJhbm5vIHF1aW5kaSBlbGltaW5hdGkgdHV0dGkgaSBkYXRpIGFzc29jaWF0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0YWJsZXQgc2VuemEgcml1c2NpcmNpIHBlciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdm9sdGUuIElsIHByb2ZpbG8gZGkgbGF2b3JvIHZlcnLDoCByaW1vc3NvIGUgdmVycmFubm8gcXVpbmRpIGVsaW1pbmF0aSB0dXR0aSBpIGRhdGkgYXNzb2NpYXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IkhhaSB0ZW50YXRvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBzZW56YSByaXVzY2lyY2kgcGVyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2b2x0ZS4gSWwgcHJvZmlsbyBkaSBsYXZvcm8gdmVycsOgIHJpbW9zc28gZSB2ZXJyYW5ubyBxdWluZGkgZWxpbWluYXRpIHR1dHRpIGkgZGF0aSBhc3NvY2lhdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBlcnJhdGkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEgZGkgc2Jsb2Njby4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZmFsbGl0aSwgdGkgdmVycsOgIGNoaWVzdG8gZGkgc2Jsb2NjYXJlIGlsIHRhYmxldCBjb24gdW4gYWNjb3VudCBlbWFpbC5cblxuIFJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmkgZXJyYXRpIGRpIGluc2VyaW1lbnRvIGRlbGxhIHNlcXVlbnphIGRpIHNibG9jY28uIERvcG8gYWx0cmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIHRpIHZlcnLDoCBjaGllc3RvIGRpIHNibG9jY2FyZSBpbCB0ZWxlZm9ubyBjb24gdW4gYWNjb3VudCBlbWFpbC5cblxuIFJpcHJvdmEgdHJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdGVudGF0aXZpIGVycmF0aSBkaSBpbnNlcmltZW50byBkZWxsYSBzZXF1ZW56YSBkaSBzYmxvY2NvLiBEb3BvIGFsdHJpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZpIGZhbGxpdGksIHRpIHZlcnLDoCBjaGllc3RvIGRpIHNibG9jY2FyZSBpbCB0YWJsZXQgY29uIHVuIGFjY291bnQgZW1haWwuXG5cbiBSaXByb3ZhIHRyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBlcnJhdGkgZGkgaW5zZXJpbWVudG8gZGVsbGEgc2VxdWVuemEgZGkgc2Jsb2Njby4gRG9wbyBhbHRyaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBmYWxsaXRpLCB0aSB2ZXJyw6AgY2hpZXN0byBkaSBzYmxvY2NhcmUgaWwgdGVsZWZvbm8gY29uIHVuIGFjY291bnQgZW1haWwuXG5cbiBSaXByb3ZhIHRyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlY29uZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDb2RpY2UgUElOIGRlbGxhIFNJTSBlcnJhdG8uIERldmkgY29udGF0dGFyZSBsXCdvcGVyYXRvcmUgcGVyIHNibG9jY2FyZSBpbCBkaXNwb3NpdGl2by4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+Q29kaWNlIFBJTiBkZWxsYSBTSU0gZXJyYXRvLiBIYWkgYW5jb3JhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2aSBhIGRpc3Bvc2l6aW9uZS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAppbmRleCA3ZmZhNjc2Li5iOWNkZjVlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4oCP15TXltefINee15fXk9epINeQ16og16fXldeTIFBVSyDXlNeg15vXldefLiDXoNeZ16HXmdeV16DXldeqINeX15XXlteo15nXnSDXmdep15HXmdeq15Ug15zXptee15nXqteV16og15DXqiDXm9eo15jXmdehINeULVNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4oCP16fXldeT15kg15QtUElOINeQ15nXoNedINeq15XXkNee15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Iteg15nXodeZ15XXoNeV16og16jXkdeZ150g157Xk9eZINec16nXqNeY15XXmCDXp9eVINeR15nXmNeV15wg16DXoteZ15zXlC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuKAj9eU16fXnNeT16og157Xodek16ggUElOINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uIFxuXG7XoNeh15Qg16nXldeRINeR16LXldeTIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IteU16fXnNeT16og16HXmdeh157XlCDXqdeS15XXmdeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150uXG5cbteg16HXlCDXqdeV15Eg15HXoteV15MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16nXoNeZ15XXqi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i16nXqNeY15jXqiDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15Qg15HXkNeV16TXnyDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedINeR15DXldek158g16nXkteV15kuINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15jXkNeR15zXmCDXlteUINeZ15DXldek16Eg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg15TXoNeq15XXoNeZ150g16nXnNeVINeZ15nXnteX16fXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXmNec16TXldefINeW15Qg15nXkNeV16TXoSDXldeb16rXldem15DXlCDXnteb15og15vXnCDXlNeg16rXldeg15nXnSDXqdec15Ug15nXmdee15fXp9eVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4oCP15TXp9ec15PXqiDXnteh16TXqCBQSU4g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IteU16fXnNeT16og16HXmdeh157XlCDXqdeS15XXmdeUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnS5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Itep16jXmNeY16og15DXqiDXp9eVINeR15nXmNeV15wg15TXoNei15nXnNeUINeR15DXldek158g16nXkteV15kgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDXpNei157XmdedLiBcblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15jXkNeR15zXmCDXlteUINeZ15DXldek16Eg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg15TXoNeq15XXoNeZ150g16nXnNeVINeZ15nXnteX16fXlS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg15jXnNek15XXnyDXlteUINeZ15DXldek16Eg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg15TXoNeq15XXoNeZ150g16nXnNeVINeZ15nXnteX16fXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXpNei157XmdedINeR15DXldek158g16nXkteV15kuINeU15jXkNeR15zXmCDXmdeQ15XXpNehINeV15vXqteV16bXkNeUINee15vXmiDXm9ecINeU16DXqteV16DXmdedINep15zXlSDXmdeZ157Xl9en15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDXpNei157XmdedINeR15DXldek158g16nXkteV15kuINeU15jXnNek15XXnyDXmdeQ15XXpNehINeV15vXqteV16bXkNeUINee15vXmiDXm9ecINeU16DXqteV16DXmdedINep15zXlSDXmdeZ157Xl9en15UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXntep16rXntepINeW15Qg15nXldeh16gg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXmdee15fXp9eVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLXoNeZ16HXmdeqINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15zXpNeV158gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINee16nXqtee16kg15bXlCDXmdeV16HXqCDXldeb16rXldem15DXlCDXnteb15og15vXnCDXoNeq15XXoNeZINeU157Xqdeq157XqSDXmdeZ157Xl9en15UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNeQ15HXnNeYIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg157Xqdeq157XqSDXlteUINeZ15XXodeoINeV15vXqteV16bXkNeUINee15vXmiDXm9ecINeg16rXldeg15kg15TXntep16rXntepINeZ15nXnteX16fXlS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg157Xqdeq157XqSDXlteUINeZ15XXodeoINeV15vXqteV16bXkNeUINee15vXmiDXm9ecINeg16rXldeg15kg15TXntep16rXntepINeZ15nXnteX16fXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXntep16rXntepINeW15Qg15nXldeh16gg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXmdee15fXp9eVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXnNek15XXnyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g16TXotee15nXnSDXkdeQ15XXpNefINep15LXldeZLiDXntep16rXntepINeW15Qg15nXldeh16gg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg16DXqteV16DXmSDXlNee16nXqtee16kg15nXmdee15fXp9eVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedINeR15DXldek158g16nXkteV15kuINec15DXl9eoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16og15vXldep15zXmdedINeg15XXodek15nXnSwg16TXqNeV16TXmdecINeU16LXkdeV15PXlCDXmdeV16HXqCDXldeb16rXldem15DXlCDXnteb15og15vXnCDXoNeq15XXoNeZINeU16TXqNeV16TXmdecINeZ15nXnteX16fXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i16DXmdeh15nXqiDXnNeR15jXnCDXkNeqINeg16LXmdec16og15TXmNec16TXldefIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g16DXmdeh15nXldeg15XXqiDXm9eV16nXnNeZ150g16DXldeh16TXmdedLCDXpNeo15XXpNeZ15wg15TXoteR15XXk9eUINeZ15XXodeoINeV15vXqteV16bXkNeUINee15vXmiDXm9ecINeg16rXldeg15kg15TXpNeo15XXpNeZ15wg15nXmdee15fXp9eVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINek16jXldek15nXnCDXlNei15HXldeT15Qg15nXldeh16gg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg16DXqteV16DXmSDXlNek16jXldek15nXnCDXmdeZ157Xl9en15UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Iteg15nXodeZ16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXnNek15XXnyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINek16jXldek15nXnCDXlNei15HXldeT15Qg15nXldeh16gg15XXm9eq15XXpteQ15Qg157Xm9eaINeb15wg16DXqteV16DXmSDXlNek16jXldek15nXnCDXmdeZ157Xl9en15UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLXoNeZ16HXmdeqINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15DXkdec15ggPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g16TXqNeV16TXmdecINeU16LXkdeV15PXlCDXmdeV16HXqCDXldeb16rXldem15DXlCDXnteb15og15vXnCDXoNeq15XXoNeZINeU16TXqNeV16TXmdecINeZ15nXnteX16fXlS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLXoNeZ16HXmdeqINec15HXmNecINeQ16og16DXoteZ15zXqiDXlNeY15zXpNeV158gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INek16LXnteZ150g15HXkNeV16TXnyDXqdeS15XXmS4g16TXqNeV16TXmdecINeU16LXkdeV15PXlCDXmdeV16HXqCDXldeb16rXldem15DXlCDXnteb15og15vXnCDXoNeq15XXoNeZINeU16TXqNeV16TXmdecINeZ15nXnteX16fXlS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i16nXqNeY15jXqiDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15Qg15HXkNeV16TXnyDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeq16rXkden16kg15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCDXkdeQ157Xptei15XXqiDXl9ep15HXldefINeQ15nXnteZ15nXnOKAjy5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i16nXqNeY15jXqiDXkNeqINen15Ug15HXmdeY15XXnCDXlNeg16LXmdec15Qg15HXkNeV16TXnyDXqdeS15XXmSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDXpNei157XmdedLiDXnNeQ15fXqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeq16rXkden16kg15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXnNek15XXnyDXkdeQ157Xptei15XXqiDXl9ep15HXldefINeQ15nXnteZ15nXnOKAjy5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDXqdeg15nXldeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLXqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeq16rXkden16kg15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXkNeR15zXmCDXkdeQ157Xptei15XXqiDXl9ep15HXldefINeQ15nXnteZ15nXnOKAjy5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLXqdeo15jXmNeqINeQ16og16fXlSDXkdeZ15jXldecINeU16DXoteZ15zXlCDXkdeQ15XXpNefINep15LXldeZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g16TXotee15nXnS4g15zXkNeX16ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDXoNeZ16HXmdeV16DXldeqINeb15XXqdec15nXnSDXoNeV16HXpNeZ150sINeq16rXkden16kg15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU15jXnNek15XXnyDXkdeQ157Xptei15XXqiDXl9ep15HXldefINeQ15nXnteZ15nXnOKAjy5cblxu16DXodeUINep15XXkSDXkdei15XXkyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INep16DXmdeV16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLigI/Xnteh16TXqCBQSU4g16nXkteV15kg16nXnCDXm9eo15jXmdehINeULVNJTS4g16LXnNeZ15og15zXmdem15XXqCDXm9ei16og16fXqdeoINei150g15TXodek16cg16LXnCDXnteg16og15zXkdeY15wg15DXqiDXoNei15nXnNeqINeU157Xm9ep15nXqC4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJ0d28iPuKAj9en15XXkyBQSU4g16nXkteV15kg16nXnCDXm9eo15jXmdehIFNJTS4g16DXldeq16jXlSDXnNeaIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INeg15nXodeZ15XXoNeV16ouPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggMzIzMGJlYi4uYWRmZWZjYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Iuato+OBl+OBhFBVS+OCs+ODvOODieOCkuWGjeWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhOOAguiqpOWFpeWKm+OCkue5sOOCiui/lOOBmeOBqOOAgVNJTeOBjOawuOS5heOBq+eEoeWKueOBq+OBquOCi+OBiuOBneOCjOOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU7jgrPjg7zjg4njgYzkuIDoh7TjgZfjgb7jgZvjgpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLjg5Hjgr/jg7zjg7Pjga7lhaXlipvjgpLmiYDlrprjga7lm57mlbDku6XkuIrplpPpgZXjgYjjgb7jgZfjgZ/jgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTuOBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CCXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+56eS5b6M44Gr44KC44GG5LiA5bqm44GK6Kmm44GX44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuODkeOCueODr+ODvOODieOBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CCXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+56eS5b6M44Gr44KC44GG5LiA5bqm44GK6Kmm44GX44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuODreODg+OCr+ino+mZpOODkeOCv+ODvOODs+OBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CCXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+56eS5b6M44Gr44KC44GG5LiA5bqm44GK6Kmm44GX44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i44K/44OW44Os44OD44OI44Gu44Ot44OD44Kv6Kej6Zmk44GrPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBmeOCi+OBqOOAgeOBk+OBruOCv+ODluODrOODg+ODiOOBr+ODquOCu+ODg+ODiOOBleOCjOOAgeODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLmkLrluK/pm7voqbHjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBl+OBvuOBl+OBn+OAguOBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB44GT44Gu5pC65biv6Zu76Kmx44Gv44Oq44K744OD44OI44GV44KM44CB44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU7jga7lhaXlipvjgpI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CCXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7np5LlvozjgavjgoLjgYbkuIDluqbjgYroqabjgZfjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i44OR44K544Ov44O844OJ44Gu5YWl5Yqb44KSPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuWbnumWk+mBleOBiOOBvuOBl+OBn+OAglxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+56eS5b6M44Gr44KC44GG5LiA5bqm44GK6Kmm44GX44GP44Gg44GV44GE44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuODreODg+OCr+ino+mZpOODkeOCv+ODvOODs+OBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgb7jgZfjgZ/jgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuenkuW+jOOBq+OCguOBhuS4gOW6puOBiuippuOBl+OBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuOCv+ODluODrOODg+ODiOOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB44GT44Gu44K/44OW44Os44OD44OI44Gv44Oq44K744OD44OI44GV44KM44CB44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuaQuuW4r+mbu+ipseOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB44GT44Gu5pC65biv6Zu76Kmx44Gv44Oq44K744OD44OI44GV44KM44CB44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuOCv+ODluODrOODg+ODiOOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBl+OBvuOBl+OBn+OAguOBk+OBruOCv+ODluODrOODg+ODiOOBr+ODquOCu+ODg+ODiOOBleOCjOOAgeODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuaQuuW4r+mbu+ipseOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBl+OBvuOBl+OBn+OAguOBk+OBruaQuuW4r+mbu+ipseOBr+ODquOCu+ODg+ODiOOBleOCjOOAgeODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuOCv+ODluODrOODg+ODiOOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZnjgovjgajjgIHjgZPjga7jg6bjg7zjgrbjg7zjga/liYrpmaTjgZXjgozjgIHjg6bjg7zjgrbjg7zjga7jg4fjg7zjgr/jgYzjgZnjgbnjgabliYrpmaTjgZXjgozjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i5pC65biv6Zu76Kmx44Gu44Ot44OD44Kv6Kej6Zmk44GrPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBmeOCi+OBqOOAgeOBk+OBruODpuODvOOCtuODvOOBr+WJiumZpOOBleOCjOOAgeODpuODvOOCtuODvOOBruODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuOCv+ODluODrOODg+ODiOOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB44GT44Gu44Om44O844K244O844Gv5YmK6Zmk44GV44KM44CB44Om44O844K244O844Gu44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuaQuuW4r+mbu+ipseOBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgYLjgag8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB44GT44Gu44Om44O844K244O844Gv5YmK6Zmk44GV44KM44CB44Om44O844K244O844Gu44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLjgr/jg5bjg6zjg4Pjg4jjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgZPjga7jg6bjg7zjgrbjg7zjga/liYrpmaTjgZXjgozjgIHjg6bjg7zjgrbjg7zjga7jg4fjg7zjgr/jgYzjgZnjgbnjgabliYrpmaTjgZXjgozjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLmkLrluK/pm7voqbHjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZfjgb7jgZfjgZ/jgILjgZPjga7jg6bjg7zjgrbjg7zjga/liYrpmaTjgZXjgozjgIHjg6bjg7zjgrbjg7zjga7jg4fjg7zjgr/jgYzjgZnjgbnjgabliYrpmaTjgZXjgozjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLjgr/jg5bjg6zjg4Pjg4jjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPuWbnuWkseaVl+OBl+OBvuOBl+OBn+OAguOBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GZ44KL44Go44CB5LuV5LqL55So44OX44Ot44OV44Kh44Kk44Or44GM5YmK6Zmk44GV44KM44CB44OX44Ot44OV44Kh44Kk44Or44Gu44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuOCueODnuODvOODiOODleOCqeODs+OBruODreODg+OCr+ino+mZpOOBqzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57lpLHmlZfjgZnjgovjgajjgIHku5XkuovnlKjjg5fjg63jg5XjgqHjgqTjg6vjgYzliYrpmaTjgZXjgozjgIHjg5fjg63jg5XjgqHjgqTjg6vjga7jg4fjg7zjgr/jgYzjgZnjgbnjgabliYrpmaTjgZXjgozjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLjgr/jg5bjg6zjg4Pjg4jjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuWbnuWkseaVl+OBmeOCi+OBqOOAgeS7leS6i+eUqOODl+ODreODleOCoeOCpOODq+OBjOWJiumZpOOBleOCjOOAgeODl+ODreODleOCoeOCpOODq+OBruODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLjgrnjg57jg7zjg4jjg5Xjgqnjg7Pjga7jg63jg4Pjgq/op6PpmaTjgas8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuWbnuWkseaVl+OBmeOCi+OBqOOAgeS7leS6i+eUqOODl+ODreODleOCoeOCpOODq+OBjOWJiumZpOOBleOCjOOAgeODl+ODreODleOCoeOCpOODq+OBruODh+ODvOOCv+OBjOOBmeOBueOBpuWJiumZpOOBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i44K/44OW44Os44OD44OI44Gu44Ot44OD44Kv6Kej6Zmk44GrPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC5LuV5LqL55So44OX44Ot44OV44Kh44Kk44Or44GM5YmK6Zmk44GV44KM44CB44OX44Ot44OV44Kh44Kk44Or44Gu44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i44K544Oe44O844OI44OV44Kp44Oz44Gu44Ot44OD44Kv6Kej6Zmk44GrPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+5Zue5aSx5pWX44GX44G+44GX44Gf44CC5LuV5LqL55So44OX44Ot44OV44Kh44Kk44Or44GM5YmK6Zmk44GV44KM44CB44OX44Ot44OV44Kh44Kk44Or44Gu44OH44O844K/44GM44GZ44G544Gm5YmK6Zmk44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuODreODg+OCr+ino+mZpOODkeOCv+ODvOODs+OBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgovjgajjgIHjgr/jg5bjg6zjg4Pjg4jjga7jg63jg4Pjgq/op6PpmaTjgavjg6Hjg7zjg6vjgqLjgqvjgqbjg7Pjg4jjgYzlv4XopoHjgavjgarjgorjgb7jgZnjgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7np5LlvozjgavjgoLjgYbkuIDluqbjgYroqabjgZfjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuODreODg+OCr+ino+mZpOODkeOCv+ODvOODs+OBruWFpeWKm+OCkjx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5Zue6ZaT6YGV44GI44G+44GX44Gf44CC44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgovjgajjgIHmkLrluK/nq6/mnKvjga7jg63jg4Pjgq/op6PpmaTjgavjg6Hjg7zjg6vjgqLjgqvjgqbjg7Pjg4jjgYzlv4XopoHjgavjgarjgorjgb7jgZnjgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7np5LlvozjgavjgoLjgYbkuIDluqbjgYroqabjgZfjgY/jgaDjgZXjgYTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i44Ot44OD44Kv6Kej6Zmk44OR44K/44O844Oz44Gu5YWl5Yqb44KSPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuWbnumWk+mBleOBiOOBvuOBl+OBn+OAguOBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgovjgajjgIHjgr/jg5bjg6zjg4Pjg4jjga7jg63jg4Pjgq/op6PpmaTjgavjg6Hjg7zjg6vjgqLjgqvjgqbjg7Pjg4jjgYzlv4XopoHjgavjgarjgorjgb7jgZnjgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPuenkuW+jOOBq+OCguOBhuS4gOW6puOBiuippuOBl+OBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i44Ot44OD44Kv6Kej6Zmk44OR44K/44O844Oz44Gu5YWl5Yqb44KSPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuWbnumWk+mBleOBiOOBvuOBl+OBn+OAguOBguOBqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7lm57plpPpgZXjgYjjgovjgajjgIHmkLrluK/nq6/mnKvjga7jg63jg4Pjgq/op6PpmaTjgavjg6Hjg7zjg6vjgqLjgqvjgqbjg7Pjg4jjgYzlv4XopoHjgavjgarjgorjgb7jgZnjgIJcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPuenkuW+jOOBq+OCguOBhuS4gOW6puOBiuippuOBl+OBj+OBoOOBleOBhOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIFBJTuOCs+ODvOODieOBjOeEoeWKueOBp+OBmeOAguOBiuS9v+OBhOOBruerr+acq+OCkuODreODg+OCr+ino+mZpOOBmeOCi+OBq+OBr+aQuuW4r+mAmuS/oeS8muekvuOBq+OBiuWVj+OBhOWQiOOCj+OBm+OBhOOBn+OBoOOBj+W/heimgeOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0gUElO44Kz44O844OJ44GM54Sh5Yq544Gn44GZ44CC5YWl5Yqb44Gn44GN44KL44Gu44Gv44GC44GoPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7lm57jgafjgZnjgII8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IGM5YjMxY2QuLjc4ZmM1NGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6jhg5Thg5jhg6fhg5Xhg5Dhg5zhg5Thg5cg4YOh4YOs4YOd4YOg4YOYIFBVSyDhg5nhg53hg5Phg5guIOGDoOGDkOGDm+GDk+GDlOGDnOGDmOGDm+GDlCDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOb4YOq4YOT4YOU4YOa4YOd4YOR4YOQIOGDkuGDkOGDm+GDneGDmOGDrOGDleGDlOGDleGDoSBTSU0g4YOR4YOQ4YOg4YOQ4YOX4YOY4YOhIOGDk+GDkOGDkeGDmuGDneGDmeGDleGDkOGDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOGDmeGDneGDk+GDlOGDkeGDmCDhg5Dhg6Ag4YOU4YOb4YOX4YOu4YOV4YOU4YOV4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4YOc4YOQ4YOu4YOQ4YOi4YOYIOGDnOGDmOGDm+GDo+GDqOGDmOGDoSDhg6vhg5Dhg5rhg5jhg5Dhg5wg4YOR4YOU4YOV4YOg4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4YOX4YOl4YOV4YOU4YOcIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIFBJTiDhg5nhg53hg5Phg5guIFxuXG7hg6Hhg6rhg5Dhg5Phg5Thg5cg4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4YOX4YOl4YOV4YOU4YOcIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOT4YOQ4YOR4YOU4YOt4YOT4YOU4YOXIOGDl+GDpeGDleGDlOGDnOGDmCDhg57hg5Dhg6Dhg53hg5rhg5guIFxuXG7hg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4YOX4YOl4YOV4YOU4YOcIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LeGDr+GDlOGDoCDhg5Phg5Dhg67hg5Dhg6Lhg5Thg5cg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOhIOGDnOGDmOGDm+GDo+GDqOGDmC4gXG5cbuGDoeGDquGDkOGDk+GDlOGDlyDhg67hg5Thg5rhg5Dhg67hg5rhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDquGDk+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDlOGDoSDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5gg4YOS4YOQ4YOT4YOQ4YOY4YOi4YOV4YOY4YOg4YOX4YOU4YOR4YOQLCDhg6Dhg5Dhg6og4YOs4YOQ4YOo4YOa4YOY4YOhIOGDm+GDmOGDoSDhg5vhg5fhg5rhg5jhg5Dhg5wg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Thg6Eg4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOYIOGDkuGDkOGDk+GDkOGDmOGDouGDleGDmOGDoOGDl+GDlOGDkeGDkCwg4YOg4YOQ4YOqIOGDrOGDkOGDqOGDmuGDmOGDoSDhg5vhg5jhg6Eg4YOb4YOX4YOa4YOY4YOQ4YOcIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDoS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuGDl+GDpeGDleGDlOGDnCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LeGDr+GDlOGDoCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOo4YOU4YOY4YOn4YOV4YOQ4YOc4YOU4YOXIFBJTiDhg5nhg53hg5Phg5guIFxuXG7hg6Hhg6rhg5Dhg5Phg5Thg5cg4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLhg5fhg6Xhg5Xhg5Thg5wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi3hg6/hg5Thg6Ag4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDk+GDkOGDkeGDlOGDreGDk+GDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOe4YOQ4YOg4YOd4YOa4YOYLiBcblxu4YOu4YOU4YOa4YOQ4YOu4YOa4YOQIOGDoeGDquGDkOGDk+GDlOGDlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4YOX4YOl4YOV4YOU4YOcIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4t4YOv4YOU4YOgIOGDk+GDkOGDruGDkOGDouGDlOGDlyDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5jhg6Eg4YOc4YOY4YOb4YOj4YOo4YOYLiBcblxu4YOh4YOq4YOQ4YOT4YOU4YOXIOGDruGDlOGDmuGDkOGDruGDmuGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDm+GDqOGDmC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Dhg5Hhg5rhg5Thg6Lhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOq4YOT4YOY4YOhIOGDqOGDlOGDm+GDk+GDlOGDkiwg4YOU4YOhIOGDouGDkOGDkeGDmuGDlOGDouGDmCDhg5Lhg5Dhg5Phg5Dhg5jhg6Lhg5Xhg5jhg6Dhg5fhg5Thg5Hhg5AsIOGDoOGDkOGDqiDhg6zhg5Dhg6jhg5rhg5jhg6Eg4YOb4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Thg6Eg4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOYIOGDkuGDkOGDk+GDkOGDmOGDouGDleGDmOGDoOGDl+GDlOGDkeGDkCwg4YOg4YOQ4YOqIOGDrOGDkOGDqOGDmuGDmOGDoSDhg5vhg5jhg6Eg4YOb4YOX4YOa4YOY4YOQ4YOcIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5Thg6Eg4YOi4YOQ4YOR4YOa4YOU4YOi4YOYIOGDkuGDkOGDk+GDkOGDmOGDouGDleGDmOGDoOGDl+GDlOGDkeGDkCwg4YOg4YOQ4YOqIOGDrOGDkOGDqOGDmuGDmOGDoSDhg5vhg5jhg6Eg4YOb4YOX4YOa4YOY4YOQ4YOcIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDlOGDoSDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5gg4YOS4YOQ4YOT4YOQ4YOY4YOi4YOV4YOY4YOg4YOX4YOU4YOR4YOQLCDhg6Dhg5Dhg6og4YOs4YOQ4YOo4YOa4YOY4YOhIOGDm+GDmOGDoSDhg5vhg5fhg5rhg5jhg5Dhg5wg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg5Thg6Eg4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOU4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg5Thg6Eg4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOU4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg5Thg6Eg4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOU4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOa4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Dhg5vhg53hg5jhg6jhg5rhg5Thg5Hhg5Ag4YOU4YOhIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDlOGDmuGDmCDhg5Phg5Ag4YOs4YOQ4YOY4YOo4YOa4YOU4YOR4YOQIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg5vhg5fhg5rhg5jhg5Dhg5zhg5gg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5Thg6Eg4YOb4YOd4YOb4YOu4YOb4YOQ4YOg4YOU4YOR4YOU4YOa4YOYIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCwg4YOg4YOQ4YOqIOGDrOGDkOGDqOGDmuGDmOGDoSDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5rhg5jhg6Eg4YOb4YOX4YOa4YOY4YOQ4YOcIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDlOGDoSDhg5vhg53hg5vhg67hg5vhg5Dhg6Dhg5Thg5Hhg5Thg5rhg5gg4YOQ4YOb4YOd4YOY4YOo4YOa4YOU4YOR4YOQLCDhg6Dhg5Dhg6og4YOs4YOQ4YOo4YOa4YOY4YOhIOGDm+GDneGDm+GDruGDm+GDkOGDoOGDlOGDkeGDmuGDmOGDoSDhg5vhg5fhg5rhg5jhg5Dhg5wg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg6Hhg5Dhg5vhg6Phg6jhg5Dhg50g4YOe4YOg4YOd4YOk4YOY4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOe4YOg4YOd4YOk4YOY4YOa4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg6Hhg5Dhg5vhg6Phg6jhg5Dhg50g4YOe4YOg4YOd4YOk4YOY4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOb4YOX4YOa4YOY4YOQ4YOc4YOYIOGDnuGDoOGDneGDpOGDmOGDmuGDmOGDoSDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDm+GDquGDk+GDlOGDmuGDneGDkeGDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCDhg6Hhg5Dhg5vhg6Phg6jhg5Dhg50g4YOe4YOg4YOd4YOk4YOY4YOa4YOYIOGDk+GDkCDhg6zhg5Dhg5jhg6jhg5rhg5Thg5Hhg5Ag4YOe4YOg4YOd4YOk4YOY4YOa4YOY4YOhIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuGDl+GDpeGDleGDlOGDnCDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5Dhg5Mg4YOh4YOq4YOQ4YOT4YOU4YOXIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg5vhg6rhg5Phg5Thg5rhg53hg5Hhg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Dhg5vhg53hg5jhg6jhg5rhg5Thg5Hhg5Ag4YOh4YOQ4YOb4YOj4YOo4YOQ4YOdIOGDnuGDoOGDneGDpOGDmOGDmuGDmCDhg5Phg5Ag4YOs4YOQ4YOY4YOo4YOa4YOU4YOR4YOQIOGDm+GDl+GDmuGDmOGDkOGDnOGDmCDhg57hg6Dhg53hg6Thg5jhg5rhg5jhg6Eg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg6Hhg6rhg5Dhg5Phg5Thg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YOv4YOU4YOgLiDhg6Hhg5Dhg5vhg6Phg6jhg5Dhg50g4YOe4YOg4YOd4YOk4YOY4YOa4YOYIOGDkOGDm+GDneGDmOGDqOGDmuGDlOGDkeGDkCwg4YOg4YOQ4YOqIOGDrOGDkOGDqOGDmuGDmOGDoSDhg57hg6Dhg53hg6Thg5jhg5rhg5jhg6Eg4YOb4YOX4YOa4YOY4YOQ4YOcIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDoeGDquGDkOGDk+GDlOGDlyDhg6Lhg5Thg5rhg5Thg6Thg53hg5zhg5jhg6Eg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDoeGDkOGDm+GDo+GDqOGDkOGDnSDhg57hg6Dhg53hg6Thg5jhg5rhg5gg4YOQ4YOb4YOd4YOY4YOo4YOa4YOU4YOR4YOQLCDhg6Dhg5Dhg6og4YOs4YOQ4YOo4YOa4YOY4YOhIOGDnuGDoOGDneGDpOGDmOGDmuGDmOGDoSDhg5vhg5fhg5rhg5jhg5Dhg5wg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDk+GDkOGDruGDkOGDouGDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOhIOGDnOGDmOGDm+GDo+GDqOGDmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhg6zhg5Dhg6Dhg6Phg5vhg5Dhg6Lhg5Thg5Hhg5Thg5rhg5gg4YOq4YOT4YOY4YOhIOGDqOGDlOGDm+GDk+GDlOGDkiDhg5vhg53hg5Lhg5fhg67hg53hg5Xhg5cg4YOi4YOQ4YOR4YOa4YOU4YOi4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkOGDoSDhg5Thg5rhg6Thg53hg6Hhg6Lhg5jhg6Eg4YOQ4YOc4YOS4YOQ4YOg4YOY4YOo4YOY4YOhIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDmOGDly5cblxuIOGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6Hhg6rhg5Dhg5Phg5Thg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg5Phg5Dhg67hg5Dhg6Lhg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg5zhg5jhg5vhg6Phg6jhg5ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4t4YOv4YOU4YOgLiDhg5nhg5jhg5Phg5Thg5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDquGDk+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5IsIOGDk+GDkOGDkuGDreGDmOGDoOGDk+GDlOGDkeGDkOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOi4YOU4YOa4YOU4YOk4YOd4YOc4YOY4YOhIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDkCDhg5Thg5rhg6Thg53hg6Hhg6Lhg5jhg6Eg4YOQ4YOc4YOS4YOQ4YOg4YOY4YOo4YOY4YOhIOGDkuGDkOGDm+GDneGDp+GDlOGDnOGDlOGDkeGDmOGDly5cblxuIOGDruGDlOGDmuGDkOGDruGDmuGDkCDhg6Hhg6rhg5Dhg5Phg5Thg5cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhg5fhg6Xhg5Xhg5Thg5wg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOQ4YOTIOGDk+GDkOGDruGDkOGDouGDlOGDlyDhg5fhg6Xhg5Xhg5Thg5zhg5gg4YOS4YOQ4YOc4YOR4YOa4YOd4YOZ4YOV4YOY4YOhIOGDnOGDmOGDm+GDo+GDqOGDmCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGDr+GDlOGDoC4g4YOZ4YOY4YOT4YOU4YOVIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YOs4YOQ4YOg4YOj4YOb4YOQ4YOi4YOU4YOR4YOU4YOa4YOYIOGDquGDk+GDmOGDoSDhg6jhg5Thg5vhg5Phg5Thg5Ig4YOb4YOd4YOS4YOX4YOu4YOd4YOV4YOXIOGDouGDkOGDkeGDmuGDlOGDouGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5Dhg6Eg4YOU4YOa4YOk4YOd4YOh4YOi4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg5cuXG5cbiDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4YOX4YOl4YOV4YOU4YOcIOGDkOGDoOGDkOGDoeGDrOGDneGDoOGDkOGDkyDhg5Phg5Dhg67hg5Dhg6Lhg5Thg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDkuGDkOGDnOGDkeGDmuGDneGDmeGDleGDmOGDoSDhg5zhg5jhg5vhg6Phg6jhg5ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi3hg6/hg5Thg6AuIOGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGDrOGDkOGDoOGDo+GDm+GDkOGDouGDlOGDkeGDlOGDmuGDmCDhg6rhg5Phg5jhg6Eg4YOo4YOU4YOb4YOT4YOU4YOSLCDhg5Phg5Dhg5Lhg63hg5jhg6Dhg5Phg5Thg5Hhg5Dhg5cg4YOX4YOl4YOV4YOU4YOc4YOYIOGDouGDlOGDmuGDlOGDpOGDneGDnOGDmOGDoSDhg5Lhg5Dhg5zhg5Hhg5rhg53hg5nhg5Xhg5Ag4YOU4YOa4YOk4YOd4YOh4YOi4YOY4YOhIOGDkOGDnOGDkuGDkOGDoOGDmOGDqOGDmOGDoSDhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg5jhg5cuXG5cbiDhg67hg5Thg5rhg5Dhg67hg5rhg5Ag4YOh4YOq4YOQ4YOT4YOU4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4YOs4YOQ4YOb4YOo4YOYLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNLeGDmOGDoSDhg5Dhg6Dhg5Dhg6Hhg6zhg53hg6Dhg5ggUElOIOGDmeGDneGDk+GDmC4g4YOX4YOl4YOV4YOU4YOcIOGDkOGDruGDmuGDkCDhg5vhg53hg5Lhg5jhg6zhg5Thg5Xhg5cg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOY4YOhIOGDkuGDkOGDnOGDoeGDkOGDkeGDmuGDneGDmeGDkOGDkyDhg5vhg5jhg5vhg5Dhg6Dhg5fhg53hg5cg4YOd4YOe4YOU4YOg4YOQ4YOi4YOd4YOg4YOhLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0t4YOY4YOhIFBJTiDhg5nhg53hg5Phg5gg4YOQ4YOg4YOQ4YOh4YOs4YOd4YOg4YOY4YOQLiDhg5fhg6Xhg5Xhg5Thg5wg4YOT4YOQ4YOS4YOg4YOp4YOQ4YOXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGDm+GDquGDk+GDlOGDmuGDneGDkeGDkC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IGVhMzk5MmQuLjBkNDE1ZmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCU0rHRgNGL0YEgUFVLINC60L7QtNGL0L0g0pvQsNC50YLQsCDQtdC90LPRltC30ZbSo9GW0LcuINOY0YDQtdC60LXRgtGC0LXRgNC00ZYg0pvQsNC50YLQsNC70LDRgyBTSU0g0LrQsNGA0YLQsNGB0YvQvdGL0qMg0ZbRgdGC0LXQvSDRiNGL0pPRg9GL0L3QsCDRgdC10LHQtdC/INCx0L7Qu9Cw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOINC60L7QtNGLINGB05nQudC60LXRgSDQtdC80LXRgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQotGL0Lwg0LrTqdC/INC60LXRgdC60ZbQvSDTmdGA0LXQutC10YLRgtC10YDRliI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOINC60L7QtNGC0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINKb0LDRgtC1INGC0LXRgNC00ZbSo9GW0LcuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0pvQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItKa0rHQv9C40Y8g0YHTqdC30LTRliA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRgNC10YIg0pvQsNGC0LUg0YLQtdGA0LTRltKj0ZbQty4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRgtCw0L0g0LrQtdC50ZbQvSDSm9Cw0LnRgtCw0LvQsNKj0YvQty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0prSsdC70YvQv9GC0Ysg0LDRiNGDINOp0YDQvdC10LPRltC9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LXRgiDSm9Cw0YLQtSDRgdCw0LvQtNGL0qPRi9C3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGC0LDQvSDQutC10LnRltC9INOZ0YDQtdC60LXRgtGC0ZYg0pvQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0J/Qu9Cw0L3RiNC10YIg0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQotCw0pPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdOZ0YLRgdGW0Lcg05nRgNC10LrQtdGC0YLQtdC9INC60LXQudGW0L0g0L7RgdGLINC/0LvQsNC90YjQtdGCINKb0LDQu9C/0YvQvdCwINC60LXQu9GC0ZbRgNGW0LvRltC/LCDQvtC90YvSoyDQsdKv0LrRltC7INC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQotC10LvQtdGE0L7QvSDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LXRgiDQtNKx0YDRi9GBINC10LzQtdGBINOZ0YDQtdC60LXRgiDQttCw0YHQsNC00YvSo9GL0LcuINCi0LDSk9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB05nRgtGB0ZbQtyDTmdGA0LXQutC10YLRgtC10L0g0LrQtdC50ZbQvSDQvtGB0Ysg0YLQtdC70LXRhNC+0L0g0pvQsNC70L/Ri9C90LAg0LrQtdC70YLRltGA0ZbQu9GW0L8sINC+0L3Ri9KjINCx0q/QutGW0Lsg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4g0LrQvtC00YLRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDSm9Cw0YLQtSDRgtC10YDQtNGW0qPRltC3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0pvQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItKa0rHQv9C40Y8g0YHTqdC30LTRliA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDSm9Cw0YLQtSDRgtC10YDQtNGW0qPRltC3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0pvQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItKa0rHQu9GL0L/RgtGLINCw0YjRgyDTqdGA0L3QtdCz0ZbQvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDSm9Cw0YLQtSDRgdCw0LvQtNGL0qPRi9C3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g05nRgNC10LrQtdGC0YLRliDSm9Cw0LnRgtCw0LvQsNKj0YvQty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQn9C70LDQvdGI0LXRgiDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdOZ0YLRgdGW0Lcg05nRgNC10LrQtdGC0YLQtdC9INC60LXQudGW0L0g0L7RgdGLINC/0LvQsNC90YjQtdGCINKb0LDQu9C/0YvQvdCwINC60LXQu9GC0ZbRgNGW0LvRltC/LCDQvtC90YvSoyDQsdKv0LrRltC7INC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQotC10LvQtdGE0L7QvSDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdOZ0YLRgdGW0Lcg05nRgNC10LrQtdGC0YLQtdC9INC60LXQudGW0L0g0L7RgdGLINGC0LXQu9C10YTQvtC9INKb0LDQu9C/0YvQvdCwINC60LXQu9GC0ZbRgNGW0LvRltC/LCDQvtC90YvSoyDQsdKv0LrRltC7INC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLQn9C70LDQvdGI0LXRgiDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQntGB0Ysg0L/Qu9Cw0L3RiNC10YIg0pvQsNC70L/Ri9C90LAg0LrQtdC70YLRltGA0ZbQu9GW0L8sINC+0L3Ri9KjINCx0q/QutGW0Lsg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i0KLQtdC70LXRhNC+0L0g0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0J7RgdGLINGC0LXQu9C10YTQvtC9INKb0LDQu9C/0YvQvdCwINC60LXQu9GC0ZbRgNGW0LvRltC/LCDQvtC90YvSoyDQsdKv0LrRltC7INC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+ItCf0LvQsNC90YjQtdGCINCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC+0YHRiyDQv9Cw0LnQtNCw0LvQsNC90YPRiNGLINC20L7QudGL0LvRi9C/LCDQsdKv0LrRltC7INC/0LDQudC00LDQu9Cw0L3Rg9GI0Ysg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCi0LXQu9C10YTQvtC9INCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC+0YHRiyDQv9Cw0LnQtNCw0LvQsNC90YPRiNGLINC20L7QudGL0LvRi9C/LCDQsdKv0LrRltC7INC/0LDQudC00LDQu9Cw0L3Rg9GI0Ysg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i0J/Qu9Cw0L3RiNC10YIg0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDQtNKx0YDRi9GBINC10LzQtdGBINOZ0YDQtdC60LXRgiDQttCw0YHQsNC00YvSo9GL0LcuINCi0LDSk9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC+0YHRiyDQv9Cw0LnQtNCw0LvQsNC90YPRiNGLINC20L7QudGL0LvRi9C/LCDQsdKv0LrRltC7INC/0LDQudC00LDQu9Cw0L3Rg9GI0Ysg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCi0LXQu9C10YTQvtC9INCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQotCw0pPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGB05nRgtGB0ZbQtyDTmdGA0LXQutC10YLRgtC10L0g0LrQtdC50ZbQvSDQvtGB0Ysg0L/QsNC50LTQsNC70LDQvdGD0YjRiyDQttC+0LnRi9C70YvQvywg0LHSr9C60ZbQuyDQv9Cw0LnQtNCw0LvQsNC90YPRiNGLINC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i0J/Qu9Cw0L3RiNC10YIg0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0J7RgdGLINC/0LDQudC00LDQu9Cw0L3Rg9GI0Ysg0LbQvtC50YvQu9GL0L8sINCx0q/QutGW0Lsg0L/QsNC50LTQsNC70LDQvdGD0YjRiyDQtNC10YDQtdC60YLQtdGA0ZYg0LbQvtC50YvQu9Cw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLQotC10LvQtdGE0L7QvSDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQntGB0Ysg0L/QsNC50LTQsNC70LDQvdGD0YjRiyDQttC+0LnRi9C70YvQvywg0LHSr9C60ZbQuyDQv9Cw0LnQtNCw0LvQsNC90YPRiNGLINC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCf0LvQsNC90YjQtdGCINCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC20rHQvNGL0YEg0L/RgNC+0YTQuNC70ZYg0LbQvtC50YvQu9GL0L8sINCx0q/QutGW0Lsg0L/RgNC+0YTQuNC70Ywg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+ItCi0LXQu9C10YTQvtC9INCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0KLQsNKT0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC20rHQvNGL0YEg0L/RgNC+0YTQuNC70ZYg0LbQvtC50YvQu9GL0L8sINCx0q/QutGW0Lsg0L/RgNC+0YTQuNC70Ywg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0J/Qu9Cw0L3RiNC10YIg0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDQtNKx0YDRi9GBINC10LzQtdGBINOZ0YDQtdC60LXRgiDQttCw0YHQsNC00YvSo9GL0LcuINCi0LDSk9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INC20rHQvNGL0YEg0L/RgNC+0YTQuNC70ZYg0LbQvtC50YvQu9GL0L8sINCx0q/QutGW0Lsg0L/RgNC+0YTQuNC70Ywg0LTQtdGA0LXQutGC0LXRgNGWINC20L7QudGL0LvQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+ItCi0LXQu9C10YTQvtC9INCx0LXQutGW0YLQv9C10YHRltC9INCw0YjRg9KT0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQotCw0pPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGB05nRgtGB0ZbQtyDTmdGA0LXQutC10YLRgtC10L0g0LrQtdC50ZbQvSDQttKx0LzRi9GBINC/0YDQvtGE0LjQu9GWINC20L7QudGL0LvRi9C/LCDQsdKv0LrRltC7INC/0YDQvtGE0LjQu9GMINC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i0J/Qu9Cw0L3RiNC10YIg0LHQtdC60ZbRgtC/0LXRgdGW0L0g0LDRiNGD0pPQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YDQtdGCINC00rHRgNGL0YEg0LXQvNC10YEg05nRgNC10LrQtdGCINC20LDRgdCw0LTRi9Kj0YvQty4g0JbSsdC80YvRgSDQv9GA0L7RhNC40LvRliDQttC+0LnRi9C70YvQvywg0LHSr9C60ZbQuyDQv9GA0L7RhNC40LvRjCDQtNC10YDQtdC60YLQtdGA0ZYg0LbQvtC50YvQu9Cw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLQotC10LvQtdGE0L7QvSDQsdC10LrRltGC0L/QtdGB0ZbQvSDQsNGI0YPSk9CwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRgNC10YIg0LTSsdGA0YvRgSDQtdC80LXRgSDTmdGA0LXQutC10YIg0LbQsNGB0LDQtNGL0qPRi9C3LiDQltKx0LzRi9GBINC/0YDQvtGE0LjQu9GWINC20L7QudGL0LvRi9C/LCDQsdKv0LrRltC7INC/0YDQvtGE0LjQu9GMINC00LXRgNC10LrRgtC10YDRliDQttC+0LnRi9C70LDQtNGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQkdC10LrRltGC0L/QtdC90ZYg0LDRiNGDINC60LXRgdC60ZbQvdGW0L0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YDQtdGCINKb0LDRgtC1INGB0YvQt9C00YvSo9GL0LcuIEFmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB05nRgtGB0ZbQtyDTmdGA0LXQutC10YLRgtC10L0g0LrQtdC50ZbQvSDQv9C70LDQvdGI0LXRgtGW0qPRltC30LTRliDQtdGB0LXQv9GC0ZbQuiDQttCw0LfQsdCwINCw0YDSm9GL0LvRiyDQsNGI0YMg06nRgtGW0L3RltGI0ZbQvSDQsNC70LDRgdGL0LcuXG5cbiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0pvQsNC50YLQsCDTmdGA0LXQutC10YLRgtC10L3RltKj0ZbQty4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCR0LXQutGW0YLQv9C10L3RliDQsNGI0YMg0LrQtdGB0LrRltC90ZbQvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRgNC10YIg0pvQsNGC0LUg0YHRi9C30LTRi9Kj0YvQty4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHTmdGC0YHRltC3INOZ0YDQtdC60LXRgtGC0LXQvSDQutC10LnRltC9INGC0LXQu9C10YTQvtC90YvSo9GL0LfQtNGLINC10YHQtdC/0YLRltC6INC20LDQt9Cx0LAg0LDRgNKb0YvQu9GLINCw0YjRgyDTqdGC0ZbQvdGW0YjRltC9INCw0LvQsNGB0YvQty4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRgtCw0L0g0LrQtdC50ZbQvSDSm9Cw0LnRgtCwINOZ0YDQtdC60LXRgtGC0LXQvdGW0qPRltC3LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQkdC10LrRltGC0L/QtdC90ZYg0LDRiNGDINC60LXRgdC60ZbQvdGW0L0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRgNC10YIg0pvQsNGC0LUg0YHRi9C30LTRi9Kj0YvQty4gQWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdOZ0YLRgdGW0Lcg05nRgNC10LrQtdGC0YLQtdC9INC60LXQudGW0L0g0L/Qu9Cw0L3RiNC10YLRltKj0ZbQt9C00ZYg0LXRgdC10L/RgtGW0Log0LbQsNC30LHQsCDQsNGA0pvRi9C70Ysg0LDRiNGDINOp0YLRltC90ZbRiNGW0L0g0LDQu9Cw0YHRi9C3LlxuXG4gIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0pvQsNC50YLQsCDTmdGA0LXQutC10YLRgtC10L3RltKj0ZbQty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCR0LXQutGW0YLQv9C10L3RliDQsNGI0YMg0LrQtdGB0LrRltC90ZbQvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGA0LXRgiDSm9Cw0YLQtSDRgdGL0LfQtNGL0qPRi9C3LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGB05nRgtGB0ZbQtyDTmdGA0LXQutC10YLRgtC10L0g0LrQtdC50ZbQvSDRgtC10LvQtdGE0L7QvdGL0qPRi9C30LTRiyDQtdGB0LXQv9GC0ZbQuiDQttCw0LfQsdCwINCw0YDSm9GL0LvRiyDQsNGI0YMg06nRgtGW0L3RltGI0ZbQvSDQsNC70LDRgdGL0LcuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRgtCw0L0g0LrQtdC50ZbQvSDSm9Cw0LnRgtCwINOZ0YDQtdC60LXRgtGC0LXQvdGW0qPRltC3LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIFBJTiDQutC+0LTRiyDQtNKx0YDRi9GBINC10LzQtdGBLCDSm9Kx0YDRi9C70pPRi9C90Ysg0LDRiNGDINKv0YjRltC9INKb0YvQt9C80LXRgiDQttCw0LHQtNGL0pvRgtCw0YPRiNGL0pPQsCAg0YXQsNCx0LDRgNC70LDRgdCw0qPRi9C3LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0gUElOINC60L7QtNGLINC00rHRgNGL0YEg0LXQvNC10YEsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INOZ0YDQtdC60LXRgiDSm9Cw0LvQtNGLLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKaW5kZXggMzgwM2FiZi4uMTk2NzI0NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6A4Z684Z6KIFBVSyDhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/hn5Qg4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6K4Z6K4Z+C4Z6b4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6K4Z654Z6E4oCL4Z6T4Z654Z6E4oCL4Z6U4Z634Z6R4oCL4Z6f4Z+K4Z644Z6Y4oCL4Z6A4Z624Z6P4oCL4Z6H4Z624oCL4Z6i4Z6F4Z634Z6T4Z+S4Z6P4Z+S4Z6a4Z+D4Z6Z4Z+N4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuGegOGevOGeiiBQSU4g4Z6Y4Z634Z6T4oCL4Z6K4Z684Z6F4oCL4Z6C4Z+S4Z6T4Z62Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6F4Z+S4Z6a4Z6+4Z6T4oCL4Z6W4Z+B4Z6AIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUElOIOGemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAi+GeheGfhuGek+GeveGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5RcblxuIOGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnpzhnrfhnpPhnrbhnpHhnrjhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6W4Z624Z6A4Z+S4Z6Z4oCL4Z6f4Z6Y4Z+S4Z6E4Z624Z6P4Z+L4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6cIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflFxuXG7hnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+KAi+GeguGevOGemuKAi+Gem+GfhuGek+GetuGfhuKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAi+GeheGfhuGek+GeveGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5Rcblxu4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekOGfgeGelOGfkuGem+GfgeGej+GemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z6W4Z644Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGeiuGehOGekeGfgOGejyDhnpDhn4HhnpThn5Lhnpvhn4Hhno/hnpPhn4Hhn4fhnpPhnrnhnoThno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnoDhn4bhno7hno/hn4vhnqHhnr7hnoThnpzhnrfhnokg4Z6K4Z+C4Z6b4Z6c4Z624Z6T4Z654Z6E4Z6b4Z674Z6U4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6a4Z6U4Z6f4Z+L4Z6c4Z624Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekeGevOGemuGen+GfkOGeluGfkuGekeGemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z6W4Z644Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGeiuGehOGekeGfgOGejyDhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhnpPhn4Hhn4fhnpPhnrnhnoThno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnoDhn4bhno7hno/hn4vhnqHhnr7hnoThnpzhnrfhnokg4Z6K4Z+C4Z6b4Z6c4Z624Z6T4Z654Z6E4Z6b4Z674Z6U4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6a4Z6U4Z6f4Z+L4Z6c4Z624Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnpThnonhn5LhnoXhnrzhnpvigIvhnoDhnrzhnoogUElOIOGemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOKAi+GeheGfhuGek+GeveGekyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGeiuGehOGflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Z6c4Z634Z6T4Z624Z6R4Z644Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuGeouGfkuGek+GegOKAi+GelOGetuGek+KAi+GelOGeieGfkuGeheGevOGem+KAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGeiuGehOGflFxuXG7hnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhn5LhnorhnoTigIvhnpHhn4Dhno/igIvhnoDhn5LhnpPhnrvhnoTigIvhnprhnpnhn4jigIvhnpbhn4HhnpsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhnpzhnrfhnpPhnrbhnpHhnrjhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4oCL4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UXG5cbuGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekOGfgeGelOGfkuGem+GfgeGej+GemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vhnpbhnrjhnoDhnrbhnprhnpbhn5LhnpnhnrbhnpnhnrbhnpggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhnorhnoThnpHhn4Dhno8g4Z6Q4Z+B4Z6U4Z+S4Z6b4Z+B4Z6P4Z6T4Z+B4Z+H4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6A4Z+G4Z6O4Z6P4Z+L4Z6h4Z6+4Z6E4Z6c4Z634Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGemuGelOGen+Gfi+GenOGetuGekeGetuGfhuGehOGeouGen+Gfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z6W4Z644Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z6R4Z+A4Z6PIOGekeGevOGemuGen+GfkOGeluGfkuGekeGek+GfgeGfh+Gek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GegOGfhuGejuGej+Gfi+GeoeGevuGehOGenOGet+GeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnprhnpThnp/hn4vhnpzhnrbhnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i4Z6i4Z+S4Z6T4Z6A4Z6U4Z624Z6T4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4Z6K4Z+E4Z+H4Z6f4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6b4Z6+4Z6Q4Z+B4Z6U4Z+S4Z6b4Z+B4Z6P4Z6T4Z+B4Z+HIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6Q4Z+B4Z6U4Z+S4Z6b4Z+B4Z6P4Z6T4Z+B4Z+H4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6A4Z+G4Z6O4Z6P4Z+L4Z6h4Z6+4Z6E4Z6c4Z634Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGemuGelOGen+Gfi+GenOGetuGekeGetuGfhuGehOGeouGen+Gfi+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekeGevOGemuGen+GfkOGeluGfkuGekeGemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGekeGevOGemuGen+GfkOGeluGfkuGekeGek+GfgeGfh+Gek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GegOGfhuGejuGej+Gfi+GeoeGevuGehOGenOGet+GeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnprhnpThnp/hn4vhnpzhnrbhnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpDhn4HhnpThn5Lhnpvhn4Hhno/hnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+GeluGeuOGegOGetuGemuGeluGfkuGemeGetuGemeGetuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoThnpHhn4Dhno8g4Z6i4Z+S4Z6T4Z6A4Z6U4Z+S4Z6a4Z6+4Z6T4Z+B4Z+H4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6K4Z6A4Z6F4Z+B4Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGeouGfkuGek+GegOGelOGfkuGemuGevuGekeGetuGfhuGehOGeouGen+Gfi+GflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+GeluGeuOGegOGetuGemuGeluGfkuGemeGetuGemeGetuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoThnpHhn4Dhno8g4Z6i4Z+S4Z6T4Z6A4Z6U4Z+S4Z6a4Z6+4Z6T4Z+B4Z+H4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6K4Z6A4Z6F4Z+B4Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGeouGfkuGek+GegOGelOGfkuGemuGevuGekeGetuGfhuGehOGeouGen+Gfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekOGfgeGelOGfkuGem+GfgeGej+GemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vhnpbhnrjhnoDhnrbhnprhnpbhn5LhnpnhnrbhnpnhnrbhnpggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhnorhnoThnpHhn4Dhno8g4Z6i4Z+S4Z6T4Z6A4Z6U4Z+S4Z6a4Z6+4Z6T4Z+B4Z+H4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6K4Z6A4Z6F4Z+B4Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGeouGfkuGek+GegOGelOGfkuGemuGevuGekeGetuGfhuGehOGeouGen+Gfi+GflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z6W4Z644Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z6R4Z+A4Z6PIOGeouGfkuGek+GegOGelOGfkuGemuGevuGek+GfgeGfh+Gek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GeiuGegOGeheGfgeGeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr7hnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuGeouGfkuGek+GegOGelOGetuGek+GeluGfkuGemeGetuGemeGetuGemOGeiuGfhOGfh+Gen+GfhOGemOGet+Gek+Gej+GfkuGemuGeueGemOGej+GfkuGemuGevOGenOGem+GevuGekOGfgeGelOGfkuGem+GfgeGej+GemuGelOGen+Gfi+GeouGfkuGek+GegCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGeouGfkuGek+GegOGelOGfkuGemuGevuGek+GfgeGfh+Gek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GeiuGegOGeheGfgeGeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr7hnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHhnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnqLhn5LhnpPhnoDhnpThn5Lhnprhnr7hnpPhn4Hhn4fhnpPhnrnhnoThno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnorhnoDhnoXhn4Hhnokg4Z6K4Z+C4Z6b4Z6c4Z624Z6T4Z654Z6E4Z6b4Z674Z6U4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6i4Z+S4Z6T4Z6A4Z6U4Z+S4Z6a4Z6+4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4Z6i4Z+S4Z6T4Z6A4Z6U4Z624Z6T4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4Z6K4Z+E4Z+H4Z6f4Z+E4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6b4Z6+4Z6Q4Z+B4Z6U4Z+S4Z6b4Z+B4Z6P4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vhnpbhnrjhnoDhnrbhnprhnpbhn5LhnpnhnrbhnpnhnrbhnpggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z6R4Z+A4Z6PIOGelOGfkuGemuGenOGej+GfkuGej+Get+GemuGevOGelOGegOGetuGemuGehOGetuGemuGemuGelOGen+Gfi+GeouGfkuGek+GegOGek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GeiuGegOGeheGfgeGeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4Z6i4Z+S4Z6T4Z6A4Z6U4Z624Z6T4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4Z6K4Z+E4Z+H4Z6f4Z+E4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6b4Z6+4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vhnpbhnrjhnoDhnrbhnprhnpbhn5LhnpnhnrbhnpnhnrbhnpggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z6R4Z+A4Z6PIOGelOGfkuGemuGenOGej+GfkuGej+Get+GemuGevOGelOGegOGetuGemuGehOGetuGemuGemuGelOGen+Gfi+GeouGfkuGek+GegOGek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GeiuGegOGeheGfgeGeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpDhn4HhnpThn5Lhnpvhn4Hhno/hnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z6W4Z644Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z6R4Z+A4Z6PIOGelOGfkuGemuGenOGej+GfkuGej+Get+GemuGevOGelOGegOGetuGemuGehOGetuGemuGemuGelOGen+Gfi+GeouGfkuGek+GegOGek+GeueGehOGej+GfkuGemuGevOGenOGelOGetuGek+GeiuGegOGeheGfgeGeiSDhnorhn4LhnpvhnpzhnrbhnpPhnrnhnoThnpvhnrvhnpThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnpHhnrbhn4bhnoThnqLhnp/hn4vhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4Z6i4Z+S4Z6T4Z6A4Z6U4Z624Z6T4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4Z6K4Z+E4Z+H4Z6f4Z+E4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6b4Z6+4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+GeluGeuOGegOGetuGemuGeluGfkuGemeGetuGemeGetuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGeiuGehOGekeGfgOGejyDhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnoDhnrbhnprhnoThnrbhnprhnprhnpThnp/hn4vhnqLhn5LhnpPhnoDhnpPhnrnhnoThno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnorhnoDhnoXhn4Hhnokg4Z6K4Z+C4Z6b4Z6c4Z624Z6T4Z654Z6E4Z6b4Z674Z6U4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z634Z6a4Z684Z6U4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLhnqLhn5LhnpPhnoDhnpThnrbhnpPhnpbhn5Lhnpnhnrbhnpnhnrbhnpjhnorhn4Thn4fhnp/hn4ThnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpzhnpvhnr7hnpDhn4HhnpThn5Lhnpvhn4Hhno/hnprhnpThnp/hn4vhnqLhn5LhnpPhnoAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnoDhnrbhnprhnoThnrbhnprhnprhnpThnp/hn4vhnqLhn5LhnpPhnoDhnpPhnrnhnoThno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnorhnoDhnoXhn4Hhnokg4Z6K4Z+C4Z6b4Z6c4Z624Z6T4Z654Z6E4Z6b4Z674Z6U4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6Z4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z634Z6a4Z684Z6U4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i4Z6i4Z+S4Z6T4Z6A4Z6U4Z624Z6T4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4Z6K4Z+E4Z+H4Z6f4Z+E4Z6Y4Z634Z6T4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4Z6b4Z6+4Z6R4Z684Z6a4Z6f4Z+Q4Z6W4Z+S4Z6R4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6AIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z+S4Z6a4Z6c4Z6P4Z+S4Z6P4Z634Z6a4Z684Z6U4Z6A4Z624Z6a4Z6E4Z624Z6a4Z6a4Z6U4Z6f4Z+L4Z6i4Z+S4Z6T4Z6A4Z6T4Z654Z6E4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6K4Z6A4Z6F4Z+B4Z6JIOGeiuGfguGem+GenOGetuGek+GeueGehOGem+Geu+GelOGekeGet+Gek+GfkuGek+Gek+GfkOGemeGelOGfkuGemuGenOGej+GfkuGej+Get+GemuGevOGelOGekeGetuGfhuGehOGeouGen+Gfi+GemuGelOGen+Gfi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnoLhnrzhnprigIvhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvhnp/hn4TigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhnorhnoTigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5Dhnpkg4Z6i4Z+S4Z6T4Z6A4oCL4Z6T4Z654Z6E4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6U4Z624Z6T4oCL4Z6f4Z+S4Z6T4Z6+4oCL4Z6y4Z+S4Z6Z4oCL4Z6K4Z+E4Z+H4oCL4Z6f4Z+E4oCL4Z6A4Z674Z+G4Z6W4Z+S4Z6Z4Z684Z6R4Z+Q4Z6a4oCL4Z6U4Z6T4Z+S4Z6R4Z+H4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6AIOGeiuGfhOGemeKAi+GelOGfkuGemuGevuKAi+GeguGejuGek+GeuOKAi+GeouGfiuGeuOGemOGfguGem+GflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4oCL4Z6f4Z+E4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGeiuGehOGflCDhnpThnpPhn5LhnpHhnrbhnpThn4vigIvhnpbhnrjigIvhnoDhnrbhnprigIvhnpbhn5LhnpnhnrbhnpnhnrbhnpjigIvhnpjhnrfhnpPigIvhnofhn4ThnoLhnofhn5DhnpnigIvigIvhnoXhn5Lhnprhnr7hnpPhnofhnrbhnoQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Z6K4Z6EIOGeouGfkuGek+GegOKAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+KAi+Gen+GfkuGek+GevuKAi+GesuGfkuGemeKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GekeGevOGemuGen+GfkOGeluGfkuGekeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GeiuGfhOGemeKAi+GelOGfkuGemuGevuKAi+GeguGejuGek+GeuOKAi+GeouGfiuGeuOGemOGfguGem+GflFxuXG4g4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6Y4oCL4Z6Y4Z+S4Z6K4Z6E4oCL4Z6R4Z+A4Z6P4oCL4Z6A4Z+S4Z6T4Z674Z6E4oCL4Z6a4Z6Z4Z+I4oCL4Z6W4Z+B4Z6bIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhnqLhn5LhnpPhnoDigIvhnpThnrbhnpPigIvhnoLhnrzhnprigIvhnpvhn4bhnpPhnrbhn4bigIvhnorhn4Thn4figIvhnp/hn4TigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5LhnprhnrzhnpwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhnorhnoThn5Qg4Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4oCL4Z6W4Z644oCL4Z6A4Z624Z6a4oCL4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Z6K4Z6E4oCL4Z6Y4Z634Z6T4oCL4Z6H4Z+E4Z6C4Z6H4Z+Q4Z6ZIOGeouGfkuGek+GegOKAi+Gek+GeueGehOKAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+Gen+GfkuGek+GevuKAi+GesuGfkuGemeKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+GegOGeu+GfhuGeluGfkuGemeGevOGekeGfkOGemuKAi+GelOGek+GfkuGekeGfh+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegCDhnorhn4ThnpnigIvhnpThn5Lhnprhnr7igIvhnoLhno7hnpPhnrjigIvhnqLhn4rhnrjhnpjhn4Lhnpvhn5RcblxuIOGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4Z6i4Z+S4Z6T4Z6A4oCL4Z6U4Z624Z6T4oCL4Z6C4Z684Z6a4oCL4Z6b4Z+G4Z6T4Z624Z+G4oCL4Z6K4Z+E4Z+H4oCL4oCL4Z6f4Z+E4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6Y4Z634Z6T4oCL4Z6P4Z+S4Z6a4Z654Z6Y4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6F4Z+G4Z6T4Z694Z6TIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Z6K4Z6E4Z+UIOGelOGek+GfkuGekeGetuGelOGfi+KAi+GeluGeuOKAi+GegOGetuGemuKAi+GeluGfkuGemeGetuGemeGetuGemOKAi+GemOGet+Gek+KAi+Geh+GfhOGeguGeh+GfkOGemeKAi+KAi+GeheGfkuGemuGevuGek+Geh+GetuGehCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGeiuGehCDhnqLhn5LhnpPhnoDigIvhnpPhnrnhnoTigIvhno/hn5LhnprhnrzhnpzigIvhnpThnrbhnpPigIvigIvhnp/hn5LhnpPhnr7igIvhnrLhn5LhnpnigIvhnorhn4Thn4figIvhnp/hn4TigIvhnpHhnrzhnprhnp/hn5Dhnpbhn5LhnpHigIvhnprhnpThnp/hn4vigIvhnqLhn5LhnpPhnoDigIvhnorhn4ThnpnigIvhnpThn5Lhnprhnr7igIvhnoLhno7hnpPhnrjigIvhnqLhn4rhnrjhnpjhn4Lhnpvhn5RcblxuIOGeluGfkuGemeGetuGemeGetuGemOKAi+GemOGfkuGeiuGehOKAi+GekeGfgOGej+KAi+GegOGfkuGek+Geu+GehOKAi+GemuGemeGfiOKAi+GeluGfgeGemyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOGenOGet+Gek+GetuGekeGeuOGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4Z6b4Z+B4Z6B4oCL4Z6A4Z684Z6KIFBJTiDhnp/hn4rhnrjhnpjigIvhnpjhnrfhnpPigIvhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpwg4Z6i4Z+S4Z6T4Z6A4oCL4Z6P4Z+S4Z6a4Z684Z6c4oCL4Z6R4Z624Z6A4Z+L4Z6R4Z6E4oCL4Z6A4Z+S4Z6a4Z674Z6Y4Z6g4Z+K4Z674Z6T4oCL4Z6U4Z6J4Z+S4Z6H4Z684Z6T4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4oCL4Z6l4Z6h4Z684Z6c4oCL4Z6T4Z+B4Z+HIOGeiuGevuGemOGfkuGelOGeuOKAi+GeiuGfhOGfh+KAi+Gen+GfhOKAi+Gep+GelOGegOGemuGejuGfjeKAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOGflCI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7hnpvhn4HhnoHhnoDhnrzhnorhnp/hnpjhn5LhnoThnrbhno/hn4vhnp/hn4rhnrjhnpjhnpjhnrfhnpPhno/hn5Lhnprhnrnhnpjhno/hn5Lhnprhnrzhnpwg4Z6i4Z+S4Z6T4Z6A4Z6T4Z+F4Z6f4Z6b4Z+L4Z6A4Z624Z6a4Z6W4Z+S4Z6Z4Z624Z6Z4Z624Z6YIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGeiuGehOGekeGfgOGejzwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggYzNkMmE2MS4uM2FkMThjMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4LK44LKw4LK/4LKv4LK+4LKmIFBVSyDgspXgs4vgsqHgs40g4LKF4LKo4LON4LKo4LOBIOCyruCysOCzgS3gsqjgsq7gs4Lgsqbgsr/gsrjgsr8uIOCyuOCypOCypCDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrPgs4Eg4LK44LK/4LKu4LON4oCMIOCyheCyqOCzjeCyqOCzgSDgsrbgsr7gsrbgs43gsrXgsqTgsrXgsr7gspfgsr8g4LKo4LK/4LK34LON4LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLgsqrgsr/gsqjgs43igIwg4LKV4LOL4LKh4LON4oCN4LKX4LKz4LOBIOCyueCziuCyguCypuCyvuCyo+Cyv+CyleCzhuCyr+CyvuCyl+CzgeCypOCzjeCypOCyv+CysuCzjeCysiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCyueCysuCyteCyvuCysOCzgSDgsqrgs43gsq/gsr7gsp/gsrDgs43gsqjgs40g4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKz4LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgsqjgsr/gsq7gs43gsq4g4LKq4LK/4LKo4LON4oCMIOCyheCyqOCzjeCyqOCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsp/gs4jgsqrgs40g4LKu4LK+4LKh4LK/4LKw4LOB4LK14LK/4LKw4LK/LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LK44LOG4LKV4LOG4LKC4LKh4LOB4LKX4LKz4LKy4LON4LKy4LK/IOCyruCypOCzjeCypOCzhiDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCyqOCyv+CyruCzjeCyriDgsqrgsr7gsrjgs43igI3igI3gsrXgsrDgs43gsqHgs40g4LKF4LKo4LON4LKo4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgsqzgsr7gsrDgsr8g4LKk4LKq4LON4LKq4LK+4LKX4LK/IOCyn+CziOCyquCzjSDgsq7gsr7gsqHgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LK44LOG4LKV4LOG4LKC4LKh4LOB4LKX4LKz4LKy4LON4LKy4LK/IOCyruCypOCzjeCypOCzhiDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCyqOCyv+CyruCzjeCyriDgsoXgsqjgs43igI3igI3gsrLgsr7gspXgs40g4LKq4LON4LKv4LK+4LKf4LKw4LON4LKo4LONIOCyheCyqOCzjeCyqOCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsprgsr/gsqTgs43gsrDgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgsrLgs43gsrLgsr8g4LKu4LKk4LON4LKk4LOGIOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgspXgs43gspXgs4Ig4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKo4LKC4LKk4LKwLCDgsogg4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LONIOCyheCyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgsrngs4rgsoLgsqbgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyh+CypuCzgSDgsoXgsqbgsrAg4LKO4LKy4LON4LKyIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCyq+Czi+CyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCyleCzjeCyleCzgiDgsrngs4bgsprgs43gsprgsr/gsqgg4LK14LK/4LKr4LKyIOCyquCzjeCysOCyr+CypOCzjeCyqOCyl+CysyDgsqjgsoLgsqTgsrAsIOCyiCDgsqvgs4vgsqjgs40g4LKF4LKo4LON4LKo4LOBIOCyruCysOCzgeCyueCziuCyguCypuCyv+CyuOCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKH4LKm4LOBIOCyheCypuCysCDgso7gsrLgs43gsrIg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCyqOCyv+CyruCzjeCyriDgsqrgsr/gsqjgs43igIwg4LKF4LKo4LON4LKo4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKf4LOI4LKq4LONIOCyruCyvuCyoeCyv+CysOCzgeCyteCyv+CysOCyvy4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LK44LOG4LKV4LOG4LKC4LKh4LOB4LKX4LKz4LKy4LON4LKy4LK/IOCyruCypOCzjeCypOCzhiDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCyqOCyv+CyruCzjeCyriDgsqrgsr7gsrjgs43igI3igI3gsrXgsrDgs43gsqHgs40g4LKF4LKo4LON4LKo4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKf4LOI4LKq4LONIOCyruCyvuCyoeCyv+CysOCzgeCyteCyv+CysOCyvy4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CysuCzjeCysuCyvyDgsq7gsqTgs43gsqTgs4Yg4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgsqjgsr/gsq7gs43gsq4g4LKF4LKo4LON4oCN4oCN4LKy4LK+4LKV4LONIOCyquCzjeCyr+CyvuCyn+CysOCzjeCyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsprgsr/gsqTgs43gsrDgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CysuCzjeCysuCyvyDgsq7gsqTgs43gsqTgs4Yg4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuCyn+CzjeCyr+CyvuCyrOCzjeCysuCzhuCyn+CzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsqzgsr7gsrDgsr8g4LKk4LKq4LON4LKq4LK+4LKX4LK/IOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyv+CysOCzgeCyteCyv+CysOCyvy4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgspXgs43gspXgs4Ig4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKo4LKC4LKk4LKwLCDgsogg4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LONIOCyheCyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgsrngs4rgsoLgsqbgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyh+CypuCzgSDgsoXgsqbgsrAg4LKO4LKy4LON4LKyIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCyq+Czi+CyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsqzgsr7gsrDgsr8g4LKk4LKq4LON4LKq4LK+4LKX4LK/IOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyv+CysOCzgeCyteCyv+CysOCyvy4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgspXgs43gspXgs4Ig4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKo4LKC4LKk4LKwLCDgsogg4LKr4LOL4LKo4LONIOCyheCyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgsrngs4rgsoLgsqbgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyh+CypuCzgSDgsoXgsqbgsrAg4LKO4LKy4LON4LKyIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuCyn+CzjeCyr+CyvuCyrOCzjeCysuCzhuCyn+CzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiDgsogg4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LONIOCyheCyqOCzjeCyqOCzgSDgsq7gsrDgs4Hgsrngs4rgsoLgsqbgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyh+CypuCzgSDgsoXgsqbgsrAg4LKO4LKy4LON4LKyIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4LKr4LOL4LKo4LONIOCyheCyqOCzjeCyqOCzgSDgsoXgsqjgs43igIzgsrLgsr7gspXgs40g4LKu4LK+4LKh4LKy4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIOCyiCDgsqvgs4vgsqjgs40g4LKF4LKo4LON4LKo4LOBIOCyruCysOCzgeCyueCziuCyguCypuCyv+CyuOCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKH4LKm4LOBIOCyheCypuCysCDgso7gsrLgs43gsrIg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgspXgs43gspXgs4Ig4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKo4LKC4LKk4LKwLCDgsogg4LKs4LKz4LKV4LOG4LKm4LK+4LKw4LKw4LKo4LON4LKo4LOBIOCypOCzhuCyl+CzhuCypuCzgeCyueCyvuCyleCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKIIOCyruCzguCysuCylSDgsqzgsrPgspXgs4bgsqbgsr7gsrDgsrAg4LKO4LKy4LON4LKyIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCyq+Czi+CyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCyleCzjeCyleCzgiDgsrngs4bgsprgs43gsprgsr/gsqgg4LK14LK/4LKr4LKyIOCyquCzjeCysOCyr+CypOCzjeCyqOCyl+CysyDgsqjgsoLgsqTgsrAsIOCyiCDgsqzgsrPgspXgs4bgsqbgsr7gsrDgsrDgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLCDgsogg4LKu4LOC4LKy4LKVIOCyrOCys+CyleCzhuCypuCyvuCysOCysCDgso7gsrLgs43gsrIg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LKV4LON4LKV4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrXgsr/gsqvgsrIg4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKzIOCyqOCyguCypOCysCwg4LKIIOCyrOCys+CyleCzhuCypuCyvuCysOCysOCyqOCzjeCyqOCzgSDgsqTgs4bgspfgs4bgsqbgs4Hgsrngsr7gspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyiCDgsq7gs4LgsrLgspUg4LKs4LKz4LKV4LOG4LKm4LK+4LKw4LKwIOCyjuCysuCzjeCysiDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgsqvgs4vgsqjgs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LKV4LON4LKV4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrXgsr/gsqvgsrIg4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKzIOCyqOCyguCypOCysCwg4LKIIOCyrOCys+CyleCzhuCypuCyvuCysOCysOCyqOCzjeCyqOCzgSDgsqTgs4bgspfgs4bgsqbgs4Hgsrngsr7gspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyiCDgsq7gs4LgsrLgspUg4LKs4LKz4LKV4LOG4LKm4LK+4LKw4LKwIOCyjuCysuCzjeCysiDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LONIOCyheCyqOCzjeCyqOCzgSDgsoXgsqjgs43igIzgsrLgsr7gspXgs40g4LKu4LK+4LKh4LKy4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIOCyiCDgsqzgsrPgspXgs4bgsqbgsr7gsrDgsrDgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLCDgsofgsqbgs4Eg4LKs4LKz4LKV4LOG4LKm4LK+4LKw4LKwIOCyjuCysuCzjeCysiDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuCyq+Czi+CyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiDgsogg4LKs4LKz4LKV4LOG4LKm4LK+4LKw4LKw4LKo4LON4LKo4LOBIOCypOCzhuCyl+CzhuCypuCzgeCyueCyvuCyleCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKH4LKm4LOBIOCyrOCys+CyleCzhuCypuCyvuCysOCysCDgso7gsrLgs43gsrIg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/4LKw4LOB4LK14LK/4LKw4LK/LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgspXgs43gspXgs4Ig4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKo4LKC4LKk4LKwLCDgspXgs4bgsrLgsrjgsqYg4LKq4LON4LKw4LOK4LKr4LOI4LKy4LONIOCyheCyqOCzjeCyqOCzgSDgsqTgs4bgspfgs4bgsqbgs4Hgsrngsr7gspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YsIOCyh+CypuCzgSDgso7gsrLgs43gsrIg4LKq4LON4LKw4LOK4LKr4LOI4LKy4LONIOCyoeCzh+Cyn+CyvuCyteCyqOCzjeCyqOCzgSDgsoXgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCyq+Czi+CyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCysuCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCyleCzjeCyleCzgiDgsrngs4bgsprgs43gsprgsr/gsqgg4LK14LK/4LKr4LKyIOCyquCzjeCysOCyr+CypOCzjeCyqOCyl+CysyDgsqjgsoLgsqTgsrAsIOCyleCzhuCysuCyuOCypiDgsqrgs43gsrDgs4rgsqvgs4jgsrLgs40g4LKF4LKo4LON4LKo4LOBIOCypOCzhuCyl+CzhuCypuCzgeCyueCyvuCyleCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKH4LKm4LOBIOCyjuCysuCzjeCysiDgsqrgs43gsrDgs4rgsqvgs4jgsrLgs40g4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LKV4LON4LKV4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrXgsr/gsqvgsrIg4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKzIOCyqOCyguCypOCysCwg4LKV4LOG4LKy4LK44LKmIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsoXgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLCDgsofgsqbgs4Eg4LKO4LKy4LON4LKyIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgsqvgs4vgsqjgs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LKV4LON4LKV4LOCIOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrXgsr/gsqvgsrIg4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKzIOCyqOCyguCypOCysCwg4LKV4LOG4LKy4LK44LKmIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsoXgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLCDgsofgsqbgs4Eg4LKO4LKy4LON4LKyIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LONIOCyheCyqOCzjeCyqOCzgSDgsoXgsqjgs43igIzgsrLgsr7gspXgs40g4LKu4LK+4LKh4LKy4LOBIOCyqOCzgOCyteCzgSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqrgs43gsrDgsq/gsqTgs43gsqjgsr/gsrjgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIOCyleCzhuCysuCyuOCypiDgsqrgs43gsrDgs4rgsqvgs4jgsrLgs40g4LKF4LKo4LON4LKo4LOBIOCypOCzhuCyl+CzhuCypuCzgeCyueCyvuCyleCysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhiwg4LKH4LKm4LOBIOCyjuCysuCzjeCysiDgsqrgs43gsrDgs4rgsqvgs4jgsrLgs40g4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyheCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgsqvgs4vgsqjgs40g4LKF4LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgsqzgsr7gsrDgsr8g4LKk4LKq4LON4LKq4LK+4LKX4LK/IOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyv+CysOCzgeCyteCyv+CysOCyvy4g4LKV4LOG4LKy4LK44LKmIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsoXgsqjgs43gsqjgs4Eg4LKk4LOG4LKX4LOG4LKm4LOB4LK54LK+4LKV4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLCDgsofgsqbgs4Eg4LKO4LKy4LON4LKyIOCyquCzjeCysOCziuCyq+CziOCysuCzjSDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKF4LKz4LK/4LK44LOB4LKk4LON4LKk4LKm4LOGLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgsqjgsr/gsq7gs43gsq4g4LKF4LKo4LON4oCN4oCN4LKy4LK+4LKV4LONIOCyquCzjeCyr+CyvuCyn+CysOCzjeCyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCyrOCyvuCysOCyvyDgsqTgsqrgs43gsqrgsr7gspfgsr8g4LKh4LON4LKw4LK+IOCyruCyvuCyoeCyv+CysOCzgeCyteCyv+CysOCyvy4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKs4LKz4LK/4LKVLCDgsqjgsr/gsq7gs43gsq4g4LKH4LKu4LOH4LKy4LONIOCyluCyvuCypOCzhuCyr+CyqOCzjeCyqOCzgSDgsqzgsrPgsrjgsr/gspXgs4rgsoLgsqHgs4Eg4LKo4LK/4LKu4LON4LKuIOCyn+CzjeCyr+CyvuCyrOCzjeCysuCzhuCyn+CzjSDgsoXgsqjgs43igIzgsrLgsr7gspXgs40g4LKu4LK+4LKh4LOB4LK14LKC4LKk4LOGIOCyqOCyv+CyruCzjeCyruCysuCzjeCysuCyvyDgspXgs4fgsrPgsr/gspXgs4rgsrPgs43gsrPgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgsrLgs43gsrLgsr8g4LKu4LKk4LON4LKk4LOGIOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCyqOCyv+CyruCzjeCyriDgsoXgsqjgs43igI3igI3gsrLgsr7gspXgs40g4LKq4LON4LKv4LK+4LKf4LKw4LON4LKo4LONIOCyheCyqOCzjeCyqOCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqHgs43gsrDgsr4g4LKu4LK+4LKh4LK/4LKw4LOB4LK14LK/4LKw4LK/LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsrngs4bgsprgs43gsprgsr/gsqgg4LK14LK/4LKr4LKyIOCyquCzjeCysOCyr+CypOCzjeCyqOCyl+CysyDgsqzgsrPgsr/gspUsIOCyqOCyv+CyruCzjeCyriDgsofgsq7gs4fgsrLgs40g4LKW4LK+4LKk4LOG4LKv4LKo4LON4LKo4LOBIOCyrOCys+CyuOCyv+CyleCziuCyguCyoeCzgSDgsqjgsr/gsq7gs43gsq4g4LKr4LOL4LKo4LONIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgs4HgsrXgsoLgsqTgs4Yg4LKo4LK/4LKu4LON4LKu4LKy4LON4LKy4LK/IOCyleCzh+Cys+Cyv+CyleCziuCys+CzjeCys+CysuCyvuCyl+CzgeCypOCzjeCypOCypuCzhi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CysuCzjeCysuCyvyDgsq7gsqTgs43gsqTgs4Yg4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgsqjgsr/gsq7gs43gsq4g4LKF4LKo4LON4oCN4oCN4LKy4LK+4LKV4LONIOCyquCzjeCyr+CyvuCyn+CysOCzjeCyqOCzjSDgsoXgsqjgs43gsqjgs4Eg4LKo4LOA4LK14LOBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LKs4LK+4LKw4LK/IOCypOCyquCzjeCyquCyvuCyl+CyvyDgsqHgs43gsrDgsr4g4LKu4LK+4LKh4LK/4LKw4LOB4LK14LK/4LKw4LK/LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCyueCzhuCymuCzjeCymuCyv+CyqCDgsrXgsr/gsqvgsrIg4LKq4LON4LKw4LKv4LKk4LON4LKo4LKX4LKzIOCyrOCys+Cyv+CylSwg4LKo4LK/4LKu4LON4LKuIOCyh+CyruCzh+CysuCzjSDgspbgsr7gsqTgs4bgsq/gsqjgs43gsqjgs4Eg4LKs4LKz4LK44LK/4LKV4LOK4LKC4LKh4LOBIOCyqOCyv+CyruCzjeCyriDgsp/gs43gsq/gsr7gsqzgs43gsrLgs4bgsp/gs40g4LKF4LKo4LON4oCM4LKy4LK+4LKV4LONIOCyruCyvuCyoeCzgeCyteCyguCypOCzhiDgsqjgsr/gsq7gs43gsq7gsrLgs43gsrLgsr8g4LKV4LOH4LKz4LK/4LKV4LOK4LKz4LON4LKz4LKy4LK+4LKX4LOB4LKk4LON4LKk4LKm4LOGLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrPgsrLgs43gsrLgsr8g4LKu4LKk4LON4LKk4LOGIOCyquCzjeCysOCyr+CypOCzjeCyqOCyv+CyuOCyvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCyqOCyv+CyruCzjeCyriDgsoXgsqjgs43igI3igI3gsrLgsr7gspXgs40g4LKq4LON4LKv4LK+4LKf4LKw4LON4LKo4LONIOCyheCyqOCzjeCyqOCzgSDgsqjgs4DgsrXgs4EgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsqzgsr7gsrDgsr8g4LKk4LKq4LON4LKq4LK+4LKX4LK/IOCyoeCzjeCysOCyviDgsq7gsr7gsqHgsr/gsrDgs4HgsrXgsr/gsrDgsr8uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LK54LOG4LKa4LON4LKa4LK/4LKoIOCyteCyv+Cyq+CysiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrMg4LKs4LKz4LK/4LKVLCDgsqjgsr/gsq7gs43gsq4g4LKH4LKu4LOH4LKy4LONIOCyluCyvuCypOCzhuCyr+CyqOCzjeCyqOCzgSDgsqzgsrPgsrjgsr/gspXgs4rgsoLgsqHgs4Eg4LKo4LK/4LKu4LON4LKuIOCyq+Czi+CyqOCzjSDgsoXgsqjgs43igIzgsrLgsr7gspXgs40g4LKu4LK+4LKh4LOB4LK14LKC4LKk4LOGIOCyqOCyv+CyruCzjeCyruCysuCzjeCysuCyvyDgspXgs4fgsrPgsr/gspXgs4rgsrPgs43gsrPgsrLgsr7gspfgs4HgsqTgs43gsqTgsqbgs4YuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CysuCzjeCysuCyvyDgsq7gsqTgs43gsqTgs4Yg4LKq4LON4LKw4LKv4LKk4LON4LKo4LK/4LK44LK/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4LK44LK/4LKu4LON4oCMIOCyquCyv+CyqOCzjeKAjCDgspXgs4vgsqHgs40g4LKk4LKq4LON4LKq4LK+4LKX4LK/4LKm4LOGLCDgsqjgsr/gsq7gs43gsq4g4LK44LK+4LKn4LKo4LK14LKo4LON4LKo4LOBIOCyheCyqOCzjeKAjOCysuCyvuCyleCzjSDgsq7gsr7gsqHgsrLgs4Eg4LKo4LOA4LK14LOBIOCyiCDgspXgs4LgsqHgsrLgs4cg4LKo4LK/4LKu4LON4LKuIOCyteCyvuCyueCyleCyteCyqOCzjeCyqOCzgSDgsrjgsoLgsqrgsrDgs43gspXgsr/gsrjgsqzgs4fgspXgs4EuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gsrjgsr/gsq7gs43igIwg4LKq4LK/4LKo4LONIOCyleCzi+CyoeCzjeKAjCDgsqTgsqrgs43gsqrgsr7gspfgsr/gsqbgs4YsIOCyqOCyv+CyruCzjeCyruCysuCzjeCysuCyvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsqrgs43gsrDgsq/gsqTgs43gsqjgspfgsrPgs4Eg4LKs4LK+4LKV4LK/IOCyieCys+Cyv+CypuCyv+CyteCzhi48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCA2OTFmMGE0Li5hODVmMDNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i7Jis67CU66W4IFBVSyDsvZTrk5zrpbwg64uk7IucIOyeheugpe2VmOyEuOyalC4g7J6F66Cl7J2EIOuwmOuzte2VtOyEnCDsi5zrj4TtlZjrqbQgU0lN7J2EIOyYgeq1rOyggeycvOuhnCDsgqzsmqntlaAg7IiYIOyXhuqyjCDrkKnri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDsvZTrk5zqsIAg7J287LmY7ZWY7KeAIOyViuydjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Iu2MqO2EtCDsi5zrj4Qg7Zqf7IiY6rCAIOuEiOustCDrp47snYwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTuydhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPu2ajCDsnpjrqrsg7J6F66Cl7ZaI7Iq164uI64ukLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7stIgg7ZuE7JeQIOuLpOyLnCDsi5zrj4TtlbQg7KO87IS47JqULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLruYTrsIDrsojtmLjrpbwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7tmowg7J6Y66q7IOyeheugpe2WiOyKteuLiOuLpC4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+7LSIIO2bhOyXkCDri6Tsi5wg7Iuc64+E7ZW0IOyjvOyEuOyalC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i7J6g6riI7ZW07KCcIO2MqO2EtOydhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPu2ajCDsnpjrqrsg6re466C47Iq164uI64ukLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7stIgg7ZuE7JeQIOuLpOyLnCDsi5zrj4TtlbQg7KO87IS47JqULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Iu2DnOu4lOumvyDsnqDquIgg7ZW07KCc7JeQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsnbQg7YOc67iU66a/7J2AIOyerOyEpOygleuQmOupsCDrqqjrk6Ag642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7rsogg7Iuk7Yyo7ZaI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuuyiCDrjZQg7Iuk7Yyo7ZWY66m0IOydtCDtnLTrjIDsoITtmZTripQg7J6s7ISk7KCV65CY66mwIOuqqOuToCDrjbDsnbTthLDqsIAg7IKt7KCc65Cp64uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElO7J2EIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7tmowg7J6Y66q7IOyeheugpe2WiOyKteuLiOuLpC4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7stIgg7ZuE7JeQIOuLpOyLnCDsi5zrj4TtlbQg7KO87IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLruYTrsIDrsojtmLjrpbwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPu2ajCDsnpjrqrsg7J6F66Cl7ZaI7Iq164uI64ukLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VtCDso7zshLjsmpQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuyeoOq4iO2VtOygnCDtjKjthLTsnYQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPu2ajCDsnpjrqrsg6re466C47Iq164uI64ukLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VtCDso7zshLjsmpQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i7YOc67iU66a/IOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuuyiCDsi6TtjKjtlojsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsnbQg7YOc67iU66a/7J2AIOyerOyEpOygleuQmOupsCDrqqjrk6Ag642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuuyiCDsi6TtjKjtlojsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsnbQg7Zy064yA7KCE7ZmU64qUIOyerOyEpOygleuQmOupsCDrqqjrk6Ag642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i7YOc67iU66a/IOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4g7J20IO2DnOu4lOumv+ydgCDsnqzshKTsoJXrkJjrqbAg66qo65OgIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4g7J20IO2ctOuMgOyghO2ZlOuKlCDsnqzshKTsoJXrkJjrqbAg66qo65OgIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i7YOc67iU66a/IOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7rsogg7Iuk7Yyo7ZaI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuuyiCDrjZQg7Iuk7Yyo7ZWY66m0IOydtCDsgqzsmqnsnpDripQg7IKt7KCc65CY66mwIOuqqOuToCDsgqzsmqnsnpAg642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7rsogg7Iuk7Yyo7ZaI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPuuyiCDrjZQg7Iuk7Yyo7ZWY66m0IOydtCDsgqzsmqnsnpDripQg7IKt7KCc65CY66mwIOuqqOuToCDsgqzsmqnsnpAg642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLtg5zruJTrpr8g7J6g6riIIO2VtOygnOyXkCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPuuyiCDrjZQg7Iuk7Yyo7ZWY66m0IOydtCDsgqzsmqnsnpDripQg7IKt7KCc65CY66mwIOuqqOuToCDsgqzsmqnsnpAg642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuuyiCDsi6TtjKjtlojsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsnbQg7IKs7Jqp7J6Q64qUIOyCreygnOuQmOupsCDrqqjrk6Ag7IKs7Jqp7J6QIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLtg5zruJTrpr8g7J6g6riIIO2VtOygnOyXkCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7rsogg7Iuk7Yyo7ZaI7Iq164uI64ukLiDsnbQg7IKs7Jqp7J6Q64qUIOyCreygnOuQmOupsCDrqqjrk6Ag7IKs7Jqp7J6QIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i7Zy064yA7KCE7ZmUIOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4g7J20IOyCrOyaqeyekOuKlCDsgq3soJzrkJjrqbAg66qo65OgIOyCrOyaqeyekCDrjbDsnbTthLDqsIAg7IKt7KCc65Cp64uI64ukLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Iu2DnOu4lOumvyDsnqDquIgg7ZW07KCc7JeQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsp4HsnqUg7ZSE66Gc7ZWE7J20IOyCreygnOuQmOqzoCDrqqjrk6Ag7ZSE66Gc7ZWEIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Iu2ctOuMgOyghO2ZlCDsnqDquIgg7ZW07KCc7JeQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsp4HsnqUg7ZSE66Gc7ZWE7J20IOyCreygnOuQmOqzoCDrqqjrk6Ag7ZSE66Gc7ZWEIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i7YOc67iU66a/IOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuuyiCDsi6TtjKjtlojsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7rsogg642UIOyLpO2MqO2VmOuptCDsp4HsnqUg7ZSE66Gc7ZWE7J20IOyCreygnOuQmOqzoCDrqqjrk6Ag7ZSE66Gc7ZWEIOuNsOydtO2EsOqwgCDsgq3soJzrkKnri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Iu2ctOuMgOyghO2ZlCDsnqDquIgg7ZW07KCc7JeQIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7rsogg7Iuk7Yyo7ZaI7Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+67KIIOuNlCDsi6TtjKjtlZjrqbQg7KeB7J6lIO2UhOuhnO2VhOydtCDsgq3soJzrkJjqs6Ag66qo65OgIO2UhOuhnO2VhCDrjbDsnbTthLDqsIAg7IKt7KCc65Cp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i7YOc67iU66a/IOyeoOq4iCDtlbTsoJzsl5AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+67KIIOyLpO2MqO2WiOyKteuLiOuLpC4g7KeB7J6lIO2UhOuhnO2VhOydtCDsgq3soJzrkJjrqbAg66qo65OgIO2UhOuhnO2VhCDrjbDsnbTthLDqsIAg7IKt7KCc65Cp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+Iu2ctOuMgOyghO2ZlCDsnqDquIgg7ZW07KCc7JeQIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuuyiCDsi6TtjKjtlojsirXri4jri6QuIOyngeyepSDtlITroZztlYTsnbQg7IKt7KCc65CY66mwIOuqqOuToCDtlITroZztlYQg642w7J207YSw6rCAIOyCreygnOuQqeuLiOuLpC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i7J6g6riI7ZW07KCcIO2MqO2EtOydhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPu2ajCDsnpjrqrsg6re466C47Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPu2ajCDrjZQg7Iuk7Yyo7ZWY66m0IOydtOuplOydvCDqs4TsoJXsnYQg7IKs7Jqp7ZWY7JesIO2DnOu4lOumv+ydhCDsnqDquIjtlbTsoJztlbTslbwg7ZWp64uI64ukLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7stIgg7ZuE7JeQIOuLpOyLnCDsi5zrj4TtlbQg7KO87IS47JqULiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i7J6g6riI7ZW07KCcIO2MqO2EtOydhCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPu2ajCDsnpjrqrsg6re466C47Iq164uI64ukLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPu2ajCDrjZQg7Iuk7Yyo7ZWY66m0IOydtOuplOydvCDqs4TsoJXsnYQg7IKs7Jqp7ZWY7JesIO2ctOuMgOyghO2ZlOulvCDsnqDquIjtlbTsoJztlbTslbwg7ZWp64uI64ukLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz7stIgg7ZuE7JeQIOuLpOyLnCDsi5zrj4TtlbQg7KO87IS47JqULiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLsnqDquIjtlbTsoJwg7Yyo7YS07J2EIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7tmowg7J6Y66q7IOq3uOuguOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPu2ajCDrjZQg7Iuk7Yyo7ZWY66m0IOydtOuplOydvCDqs4TsoJXsnYQg7IKs7Jqp7ZWY7JesIO2DnOu4lOumv+ydhCDsnqDquIjtlbTsoJztlbTslbwg7ZWp64uI64ukLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VtCDso7zshLjsmpQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLsnqDquIjtlbTsoJwg7Yyo7YS07J2EIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7tmowg7J6Y66q7IOq3uOuguOyKteuLiOuLpC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPu2ajCDrjZQg7Iuk7Yyo7ZWY66m0IOydtOuplOydvCDqs4TsoJXsnYQg7IKs7Jqp7ZWY7JesIO2ctOuMgOyghO2ZlOulvCDsnqDquIjtlbTsoJztlbTslbwg7ZWp64uI64ukLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPuy0iCDtm4Tsl5Ag64uk7IucIOyLnOuPhO2VtCDso7zshLjsmpQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0gUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIOydtOuPme2GteyLoOyCrOyXkCDrrLjsnZjtlZjsl6wg6riw6riw66W8IOyeoOq4iCDtlbTsoJztlbTslbwg7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0gUElOIOy9lOuTnOqwgCDsnpjrqrvrkJjsl4jsirXri4jri6QuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+67KIIOuNlCDsi5zrj4TtlaAg7IiYIOyeiOyKteuLiOuLpC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCmluZGV4IGZiNWZiYWUuLjZlNjM5NGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+ItCi0YPRg9GA0LAgUFVLLdC60L7QtNC00YMg0LrQsNC50YDQsNC00LDQvSDRgtC10YDQuNKj0LjQty4g0JrQsNC50YLQsNC70LDQvdCz0LDQvSDQsNGA0LDQutC10YLRgtC10YAgU0lNLdC60LDRgNGC0LDQvdGLINCx0LjRgNC+0YLQvtC70L4g0LbQsNGA0LDQutGB0YvQtyDQutGL0LvQsNGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4t0LrQvtC00LTQvtGAINGC0YPRg9GA0LAg0LrQtdC70LHQtdC00LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLTqNGC06kg0LrTqdC/INKv0LvQs9KvINC60LjRgNCz0LjQt9Kv0q8g0LDRgNCw0LrQtdGC0Lgg0LHQvtC70LTRgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0KHQuNC3IFBJTi3QutC+0LTRg9Kj0YPQt9C00YMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDRgtC10YDQtNC40qPQuNC3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNCw0LTQsNC9INC60LjQudC40L0g0LrQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCh0LjQtyDRgdGL0YDRgdOp0LfSr9Kj0q/Qt9C00q8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDRgtC10YDQtNC40qPQuNC3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNCw0LTQsNC9INC60LjQudC40L0g0LrQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCh0LjQtyDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRg9GDINKv0LvQs9Kv0YHSr9C9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LrTqdGA0YHTqdGC0YLSr9Kj0q/Qty4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQsNC00LDQvSDQutC40LnQuNC9INC60LDQudGC0LDQu9Cw0qPRi9C3LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+ItCf0LvQsNC90YjQtdGC0YLQuNC9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9GB0LDSo9GL0LcsINCx0YPQuyDQv9C70LDQvdGI0LXRgiDQsdCw0YjRgtCw0L/QutGLINCw0LHQsNC70LPQsCDQutC10LvRgtC40YDQuNC70LjQvywg0LDQvdC00LDQs9GLINCx0LDRgNC00YvQuiDQtNCw0LnRi9C90LTQsNGAINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQotC10LvQtdGE0L7QvdC00YPQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQlNCw0LPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQsdGD0Lsg0YLQtdC70LXRhNC+0L0g0LHQsNGI0YLQsNC/0LrRiyDQsNCx0LDQu9Cz0LAg0LrQtdC70YLQuNGA0LjQu9C40L8sINCw0L3QtNCw0LPRiyDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgCDQttC+0Log0LHQvtC70L7Rgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCh0LjQtyBQSU4t0LrQvtC00YPSo9GD0LfQtNGDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDRgtC10YDQtNC40qPQuNC3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LDQtNCw0L0g0LrQuNC50LjQvSDQutCw0LnRgtCw0LvQsNKj0YvQty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i0KHQuNC3INGB0YvRgNGB06nQt9Kv0qPSr9C30LTSryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0YLQtdGA0LTQuNKj0LjQty4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNCw0LTQsNC9INC60LjQudC40L0g0LrQsNC50YLQsNC70LDSo9GL0LcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCh0LjQtyDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRg9GDINKv0LvQs9Kv0YHSr9C9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQutOp0YDRgdOp0YLRgtKv0qPSr9C3LiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LDQtNCw0L0g0LrQuNC50LjQvSDQutCw0LnRgtCw0LvQsNKj0YvQty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQn9C70LDQvdGI0LXRgtGC0LjQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70YHQsNKj0YvQtywg0LHRg9C7INC/0LvQsNC90YjQtdGCINCx0LDRiNGC0LDQv9C60Ysg0LDQsdCw0LvQs9CwINC60LXQu9GC0LjRgNC40LvQuNC/LCDQsNC90LTQsNCz0Ysg0LHQsNGA0LTRi9C6INC00LDQudGL0L3QtNCw0YAg0LbQvtC6INCx0L7Qu9C+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItCi0LXQu9C10YTQvtC90LTRg9C9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70LTRi9Kj0YvQty4g0JTQsNCz0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQsdGD0Lsg0YLQtdC70LXRhNC+0L0g0LHQsNGI0YLQsNC/0LrRiyDQsNCx0LDQu9Cz0LAg0LrQtdC70YLQuNGA0LjQu9C40L8sINCw0L3QtNCw0LPRiyDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgCDQttC+0Log0LHQvtC70L7Rgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i0J/Qu9Cw0L3RiNC10YLRgtC40L0g0LrRg9C70L/Rg9GB0YPQvSDQsNGH0YPRg9C00LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCR0YPQuyDQv9C70LDQvdGI0LXRgiDQsdCw0YjRgtCw0L/QutGLINCw0LHQsNC70LPQsCDQutC10LvRgtC40YDQuNC70LjQvywg0LDQvdC00LDQs9GLINCx0LDRgNC00YvQuiDQtNCw0LnRi9C90LTQsNGAINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+ItCi0LXQu9C10YTQvtC90LTRg9C9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQkdGD0Lsg0YLQtdC70LXRhNC+0L0g0LHQsNGI0YLQsNC/0LrRiyDQsNCx0LDQu9Cz0LAg0LrQtdC70YLQuNGA0LjQu9C40L8sINCw0L3QtNCw0LPRiyDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgCDQttC+0Log0LHQvtC70L7Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQn9C70LDQvdGI0LXRgtGC0LjQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQlNCw0LPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQsdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YMg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQutC+0LvQtNC+0L3Rg9GD0YfRg9C90YPQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQotC10LvQtdGE0L7QvdC00YPQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQlNCw0LPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQsdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YMg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQutC+0LvQtNC+0L3Rg9GD0YfRg9C90YPQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+ItCf0LvQsNC90YjQtdGC0YLQuNC9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70LTRi9Kj0YvQty4g0JTQsNCz0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQsdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YMg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQutC+0LvQtNC+0L3Rg9GD0YfRg9C90YPQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQotC10LvQtdGE0L7QvdC00YPQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70YHQsNKj0YvQtywg0LHRg9C7INC60L7Qu9C00L7QvdGD0YPRh9GDINGH0YvQs9Cw0YDRi9C70YvQvyDRgdCw0LvRi9C90YvQvywg0LrQvtC70LTQvtC90YPRg9GH0YPQvdGD0L0g0LHQsNGA0LTRi9C6INC00LDQudGL0L3QtNCw0YDRiyDQttC+0Log0LHQvtC70L7Rgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+ItCf0LvQsNC90YjQtdGC0YLQuNC9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQkdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YMg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQutC+0LvQtNC+0L3Rg9GD0YfRg9C90YPQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+ItCi0LXQu9C10YTQvtC90LTRg9C9INC60YPQu9C/0YPRgdGD0L0g0LDRh9GD0YPQtNCwIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQkdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YMg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQutC+0LvQtNC+0L3Rg9GD0YfRg9C90YPQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCf0LvQsNC90YjQtdGC0LjSo9C40LfQtNC40L0g0LrRg9C70L/Rg9GB0YPQvSDQsNGH0YPRg9C00LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70LTRi9Kj0YvQty4g0JTQsNCz0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70YHQsNKj0YvQtywg0LbRg9C80YPRiCDQv9GA0L7RhNC40LvQuNKj0LjQtyDRh9GL0LPQsNGA0YvQu9GL0L8g0YHQsNC70YvQvdGL0L8sINC/0YDQvtGE0LjQu9C00LjQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQotC10LvQtdGE0L7QvdC00YPQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvQtNGL0qPRi9C3LiDQlNCw0LPRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINCw0YDQsNC60LXRgiDQutGL0LvRgdCw0qPRi9C3LCDQttGD0LzRg9GIINC/0YDQvtGE0LjQu9C40qPQuNC3INGH0YvQs9Cw0YDRi9C70YvQvyDRgdCw0LvRi9C90YvQvywg0L/RgNC+0YTQuNC70LTQuNC9INCx0LDRgNC00YvQuiDQtNCw0LnRi9C90LTQsNGA0Ysg0LbQvtC6INCx0L7Qu9C+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0J/Qu9Cw0L3RiNC10YLQuNKj0LjQt9C00LjQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70YHQsNKj0YvQtywg0LbRg9C80YPRiCDQv9GA0L7RhNC40LvQuNKj0LjQtyDRh9GL0LPQsNGA0YvQu9GL0L8g0YHQsNC70YvQvdGL0L8sINC/0YDQvtGE0LjQu9C00LjQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQotC10LvQtdGE0L7QvdC00YPQvSDQutGD0LvQv9GD0YHRg9C9INCw0YfRg9GD0LTQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0LbQvtC70YMg0YLRg9GD0YDQsCDRjdC80LXRgSDQsNGA0LDQutC10YIg0LrRi9C70YHQsNKj0YvQtywg0LbRg9C80YPRiCDQv9GA0L7RhNC40LvQuNKj0LjQtyDRh9GL0LPQsNGA0YvQu9GL0L8g0YHQsNC70YvQvdGL0L8sINC/0YDQvtGE0LjQu9C00LjQvSDQsdCw0YDQtNGL0Log0LTQsNC50YvQvdC00LDRgNGLINC20L7QuiDQsdC+0LvQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i0J/Qu9Cw0L3RiNC10YLRgtC40L0g0LrRg9C70L/Rg9GB0YPQvSDQsNGH0YPRg9C00LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCW0YPQvNGD0Ygg0L/RgNC+0YTQuNC70Lgg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQsNC90LTQsNCz0Ysg0LHQsNGA0LTRi9C6INC00LDQudGL0L3QtNCw0YAg0LbQvtC6INCx0L7Qu9C+0YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i0KLQtdC70LXRhNC+0L3QtNGD0L0g0LrRg9C70L/Rg9GB0YPQvSDQsNGH0YPRg9C00LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LDRgNCw0LrQtdGCINC60YvQu9C00YvSo9GL0LcuINCW0YPQvNGD0Ygg0L/RgNC+0YTQuNC70Lgg0YfRi9Cz0LDRgNGL0LvRi9C/INGB0LDQu9GL0L3Ri9C/LCDQsNC90LTQsNCz0Ysg0LHQsNGA0LTRi9C6INC00LDQudGL0L3QtNCw0YAg0LbQvtC6INCx0L7Qu9C+0YIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItCh0LjQtyDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRg9GDINKv0LvQs9Kv0YHSr9C9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LrTqdGA0YHTqdGC0YLSr9Kj0q/Qty4g0JTQsNCz0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0LjQudCz0LjQu9C40LrRgdC40Lcg0LDRgNCw0LrQtdGC0YLQtdC9INC60LjQudC40L0sINC/0LvQsNC90YjQtdGC0LjSo9C40LfQtNC4INGN0LzQtdC50Lsg0Y3RgdC10LHQuNKj0LjQtyDQsNGA0LrRi9C70YPRgyDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRg9GDINGC0LDQu9Cw0L8g0LrRi9C70YvQvdCw0YIuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQsNC00LDQvSDQutC40LnQuNC9INC60LDQudGA0LAg0LDRgNCw0LrQtdGC0YLQtdC90LjSo9C40LcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQodC40Lcg0LHTqdCz06nRgtGC06nQvSDRh9GL0LPQsNGA0YPRgyDSr9C70LPSr9GB0q/QvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINC606nRgNGB06nRgtGC0q/So9Kv0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC40LnQs9C40LvQuNC60YHQuNC3INCw0YDQsNC60LXRgtGC0LXQvSDQutC40LnQuNC9LCDRgtC10LvQtdGE0L7QvdGD0qPRg9C30LTRgyDRjdC80LXQudC7INGN0YHQtdCx0LjSo9C40Lcg0LDRgNC60YvQu9GD0YMg0LHTqdCz06nRgtGC06nQvSDRh9GL0LPQsNGA0YPRgyDRgtCw0LvQsNC/INC60YvQu9GL0L3QsNGCLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LDQtNCw0L0g0LrQuNC50LjQvSDQutCw0LnRgNCwINCw0YDQsNC60LXRgtGC0LXQvdC40qPQuNC3LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQodC40Lcg0LHTqdCz06nRgtGC06nQvSDRh9GL0LPQsNGA0YPRgyDSr9C70LPSr9GB0q/QvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC20L7Qu9GDINGC0YPRg9GA0LAg0Y3QvNC10YEg0LrTqdGA0YHTqdGC0YLSr9Kj0q/Qty4g0JTQsNCz0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQuNC50LPQuNC70LjQutGB0LjQtyDQsNGA0LDQutC10YLRgtC10L0g0LrQuNC50LjQvSwg0L/Qu9Cw0L3RiNC10YLQuNKj0LjQt9C00Lgg0Y3QvNC10LnQuyDRjdGB0LXQsdC40qPQuNC3INCw0YDQutGL0LvRg9GDINCx06nQs9Op0YLRgtOp0L0g0YfRi9Cz0LDRgNGD0YMg0YLQsNC70LDQvyDQutGL0LvRi9C90LDRgi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LDQtNCw0L0g0LrQuNC50LjQvSDQutCw0LnRgNCwINCw0YDQsNC60LXRgtGC0LXQvdC40qPQuNC3LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0KHQuNC3INCx06nQs9Op0YLRgtOp0L0g0YfRi9Cz0LDRgNGD0YMg0q/Qu9Cz0q/RgdKv0L0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQttC+0LvRgyDRgtGD0YPRgNCwINGN0LzQtdGBINC606nRgNGB06nRgtGC0q/So9Kv0LcuINCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0LjQudCz0LjQu9C40LrRgdC40Lcg0LDRgNCw0LrQtdGC0YLQtdC9INC60LjQudC40L0sINGC0LXQu9C10YTQvtC90YPSo9GD0LfQtNGDINGN0LzQtdC50Lsg0Y3RgdC10LHQuNKj0LjQtyDQsNGA0LrRi9C70YPRgyDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRg9GDINGC0LDQu9Cw0L8g0LrRi9C70YvQvdCw0YIuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNCw0LTQsNC9INC60LjQudC40L0g0LrQsNC50YDQsCDQsNGA0LDQutC10YLRgtC10L3QuNKj0LjQty4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTS3QutCw0YDRgtCwIFBJTi3QutC+0LTRgyDRgtGD0YPRgNCwINGN0LzQtdGBLiDQrdC80Lgg0YLSr9C30LzTqdC60YLSryDQsdOp0LPTqdGC0YLTqdC9INGH0YvQs9Cw0YDRi9GIINKv0YfSr9C9INC+0L/QtdGA0LDRgtC+0YDRg9Kj0YPQt9Cz0LAg0LrQsNC50YDRi9C70YvRiNGL0qPRi9C3INC60LXRgNC10LouIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlNJTSBQSU4t0LrQvtC00YMg0YLRg9GD0YDQsCDRjdC80LXRgSwg0YHQuNC30LTQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQsNGA0LDQutC10YIg0LrQsNC70LTRiy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCmluZGV4IGI5YjY4NjkyLi5lOTI5MDdhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgupvgu4nguq3gupnguqXgurDguqvgurHgupQgUFVLIOC6l+C6teC7iOC6luC6t+C6geC6leC7ieC6reC6h+C6hOC6t+C6meC7g+C7neC7iC4g4LqB4Lqy4LqZ4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4LuD4Lqq4LuI4Lqr4Lq84Lqy4LqN4LuA4LqX4Lq34LuI4Lqt4LqI4Lqw4LuA4Lqu4Lqx4LqU4LuD4Lqr4LuJ4LqK4Lq04Lqh4LqB4Lqy4LqU4LuD4LqK4LuJ4Lqa4LuN4LuI4LuE4LqU4LuJ4LqW4Lqy4Lqn4Lqt4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLguqXgurDguqvgurHgupQgUElOIOC6muC7jeC7iOC6geC6u+C6h+C6geC6seC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6q+C6vOC6suC6jeC7gOC6geC6teC6meC7hOC6myI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LqX4LuI4Lqy4LqZ4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqUIFBJTuKAiyDguoLguq3guofgupfgu4jgurLgupngupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiBcblxu4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lql4Lqt4LqH4LuD4Lud4LuI4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4LqX4LuI4Lqy4LqZ4Lqe4Lq04Lqh4Lql4Lqw4Lqr4Lqx4LqU4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4gXG5cbuC6peC6reC6h+C7g+C7neC7iOC7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguqfgurTgupngurLgupfgurUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6guC6reC6h+C6l+C7iOC6suC6meC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIFxuXG7guoHgurDguqXgurjgupngurLguqXguq3guofgu4Pgu53gu4jgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6q+C6vOC6seC6h+KAi+C6iOC6suC6geKAi+C6peC6reC6h+KAi+C6muC7jeC7iOKAi+C6quC6s+KAi+C7gOC6peC6seC6lOKAi+C6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocsIOC7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6meC6teC7ieKAi+C6iOC6sOKAi+C6luC6t+C6geKAi+C6leC6seC7ieC6h+KAi+C6hOC7iOC6suKAi+C7g+C7neC7iCwg4LuA4LqK4Lq04LuI4LqH4oCL4LqI4Lqw4oCL4Lql4Lq24Lqa4oCL4LqX4Lq44LqB4oCL4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZ4oCL4LqC4Lqt4LqH4oCL4Lqh4Lqx4LqZLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDguqvgurzgurHguofigIvguojgurLguoHigIvguqXguq3guofigIvguprgu43gu4jigIvguqrgurPigIvgu4DguqXgurHgupTigIvguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLCDgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvgupngurXgu4nigIvguojgurDigIvgupbgurfguoHigIvgupXgurHgu4nguofigIvguoTgu4jgurLigIvgu4Pgu53gu4gsIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meC6guC6reC6h+KAi+C6oeC6seC6mS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC6l+C7iOC6suC6meC6nuC6tOC6oeC6peC6sOC6q+C6seC6lCBQSU7igIsg4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4Lqt4LuB4Lql4LuJ4LqnLiBcblxu4LqB4Lqw4Lql4Lq44LqZ4Lqy4Lql4Lqt4LqH4LuD4Lud4LuI4LuD4LqZ4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgupfgu4jgurLgupngup7gurTguqHguqXgurDguqvgurHgupTgupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIFxuXG7guqXguq3guofgu4Pgu53gu4jgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguqfgurTgupngurLgupfgurUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6guC6reC6h+C6l+C7iOC6suC6meC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4gXG5cbuC6geC6sOC6peC6uOC6meC6suC6peC6reC6h+C7g+C7neC7iOC7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4HgupfgurHguprigIvgu4DguqXgurHgupTigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6q+C6vOC6seC6h+KAi+C6iOC6suC6geKAi+C6peC6reC6h+KAi+C6muC7jeC7iOKAi+C6quC6s+KAi+C7gOC6peC6seC6lOKAi+C6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hywg4LuB4LqX4Lqx4Lqa4oCL4LuA4Lql4Lqx4LqU4oCL4LqZ4Lq14LuJ4oCL4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LqV4Lqx4LuJ4LqH4oCL4LqE4LuI4Lqy4oCL4LuD4Lud4LuILCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupnigIvguoLguq3guofigIvguqHgurHgupkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7guC6l+KAi+C6peC6sOKAi+C6quC6seC6muKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hy4g4Lqr4Lq84Lqx4LqH4oCL4LqI4Lqy4LqB4oCL4Lql4Lqt4LqH4oCL4Lqa4LuN4LuI4oCL4Lqq4Lqz4oCL4LuA4Lql4Lqx4LqU4oCL4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLCDgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvgupngurXgu4nigIvguojgurDigIvgupbgurfguoHigIvgupXgurHgu4nguofigIvguoTgu4jgurLigIvgu4Pgu53gu4gsIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meC6guC6reC6h+KAi+C6oeC6seC6mS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i4LqX4LuI4Lqy4LqZ4oCL4Lqe4Lqw4oCL4LqN4Lqy4oCL4LqN4Lqy4Lqh4oCL4Lqb4Lq74LqU4oCL4Lql4oCL4Lqx4Lqt4LqB4oCL4LuB4LqX4Lqx4Lqa4oCL4LuA4Lql4Lqx4LqU4oCL4Lqa4LuN4LuI4oCL4LqW4Lq34LqB4oCL4LqV4LuJ4Lqt4LqHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6meC6teC7ieKAi+C6iOC6sOKAi+C6luC6t+C6geKAi+C6leC6seC7ieC6h+KAi+C6hOC7iOC6suKAi+C7g+C7neC7iCwg4LuA4LqK4Lq04LuI4LqH4oCL4LqI4Lqw4oCL4Lql4Lq24Lqa4oCL4LqX4Lq44LqB4oCL4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZ4oCL4LqC4Lqt4LqH4oCL4Lqh4Lqx4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7guC6l+KAi+C6peC6sOKAi+C6quC6seC6muKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvgupngurXgu4nigIvguojgurDigIvgupbgurfguoHigIvgupXgurHgu4nguofigIvguoTgu4jgurLigIvgu4Pgu53gu4gsIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meKAi+C6guC6reC6h+KAi+C6oeC6seC6mS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4HgupfgurHguprigIvgu4DguqXgurHgupTigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDguqvgurzgurHguofigIvguojgurLguoHigIvguqXguq3guofigIvguprgu43gu4jigIvguqrgurPigIvgu4DguqXgurHgupTigIvguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLCDgupzgurngu4nigIvgu4Pguorgu4nigIvgupngurXgu4nigIvguojgurDigIvgupbgurfguoHigIvgu4Dguq3gurvgurLigIvguq3guq3guoHigIvgu4TgupssIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meC6nOC6ueC7ieKAi+C7g+C6iuC7iS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4LqX4LuI4Lqy4LqZ4oCL4Lqe4Lqw4oCL4LqN4Lqy4oCL4LqN4Lqy4Lqh4oCL4Lqb4Lq74LqU4oCL4Lql4oCL4Lqx4Lqt4LqB4oCL4LuC4LqX4oCL4Lql4Lqw4oCL4Lqq4Lqx4Lqa4oCL4Lqa4LuN4LuI4oCL4LqW4Lq34LqB4oCL4LqV4LuJ4Lqt4LqHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hy4g4Lqr4Lq84Lqx4LqH4oCL4LqI4Lqy4LqB4oCL4Lql4Lqt4LqH4oCL4Lqa4LuN4LuI4oCL4Lqq4Lqz4oCL4LuA4Lql4Lqx4LqU4oCL4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hywg4Lqc4Lq54LuJ4oCL4LuD4LqK4LuJ4oCL4LqZ4Lq14LuJ4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LuA4Lqt4Lq74Lqy4oCL4Lqt4Lqt4LqB4oCL4LuE4LqbLCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupngupzgurngu4nigIvgu4Pguorgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4LqX4LuI4Lqy4LqZ4oCL4Lqe4Lqw4oCL4LqN4Lqy4oCL4LqN4Lqy4Lqh4oCL4Lqb4Lq74LqU4oCL4Lql4oCL4Lqx4Lqt4LqB4oCL4LuB4LqX4Lqx4Lqa4oCL4LuA4Lql4Lqx4LqU4oCL4Lqa4LuN4LuI4oCL4LqW4Lq34LqB4oCL4LqV4LuJ4Lqt4LqHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDguqvgurzgurHguofigIvguojgurLguoHigIvguqXguq3guofigIvguprgu43gu4jigIvguqrgurPigIvgu4DguqXgurHgupTigIvguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguoTgurHgu4nguocsIOC6nOC6ueC7ieKAi+C7g+C6iuC7ieKAi+C6meC6teC7ieKAi+C6iOC6sOKAi+C6luC6t+C6geKAi+C7gOC6reC6u+C6suKAi+C6reC6reC6geKAi+C7hOC6mywg4LuA4LqK4Lq04LuI4LqH4oCL4LqI4Lqw4oCL4Lql4Lq24Lqa4oCL4LqX4Lq44LqB4oCL4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZ4Lqc4Lq54LuJ4oCL4LuD4LqK4LuJLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6q+C6vOC6seC6h+KAi+C6iOC6suC6geKAi+C6peC6reC6h+KAi+C6muC7jeC7iOKAi+C6quC6s+KAi+C7gOC6peC6seC6lOKAi+C6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hywg4Lqc4Lq54LuJ4oCL4LuD4LqK4LuJ4oCL4LqZ4Lq14LuJ4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LuA4Lqt4Lq74Lqy4oCL4Lqt4Lqt4LqB4oCL4LuE4LqbLCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupngupzgurngu4nigIvgu4Pguorgu4kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4HgupfgurHguprigIvgu4DguqXgurHgupTigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hy4g4Lqc4Lq54LuJ4oCL4LuD4LqK4LuJ4oCL4LqZ4Lq14LuJ4oCL4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LuA4Lqt4Lq74Lqy4oCL4Lqt4Lqt4LqB4oCL4LuE4LqbLCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupngupzgurngu4nigIvgu4Pguorgu4kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4LqX4LuI4Lqy4LqZ4oCL4Lqe4Lqw4oCL4LqN4Lqy4oCL4LqN4Lqy4Lqh4oCL4Lqb4Lq74LqU4oCL4Lql4oCL4Lqx4Lqt4LqB4oCL4LuC4LqX4oCL4Lql4Lqw4oCL4Lqq4Lqx4Lqa4oCL4Lqa4LuN4LuI4oCL4LqW4Lq34LqB4oCL4LqV4LuJ4Lqt4LqHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6nOC6ueC7ieKAi+C7g+C6iuC7ieKAi+C6meC6teC7ieKAi+C6iOC6sOKAi+C6luC6t+C6geKAi+C7gOC6reC6u+C6suKAi+C6reC6reC6geKAi+C7hOC6mywg4LuA4LqK4Lq04LuI4LqH4oCL4LqI4Lqw4oCL4Lql4Lq24Lqa4oCL4LqX4Lq44LqB4oCL4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZ4Lqc4Lq54LuJ4oCL4LuD4LqK4LuJLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6q+C6vOC6seC6h+KAi+C6iOC6suC6geKAi+C6peC6reC6h+KAi+C6muC7jeC7iOKAi+C6quC6s+KAi+C7gOC6peC6seC6lOKAi+C6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocsIOC7guC6m+KAi+C6o+KAi+C7hOC6n+KAi+C6peC7jOKAi+C6muC7iOC6reC6meKAi+C7gOC6ruC6seC6lOKAi+C6p+C6veC6geKAi+C6iOC6sOKAi+C6luC6t+C6geKAi+C7gOC6reC6u+C6suKAi+C6reC6reC6geKAi+C7hOC6mywg4LuA4LqK4Lq04LuI4LqH4oCL4LqI4Lqw4oCL4Lql4Lq24Lqa4oCL4LqX4Lq44LqB4oCL4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZ4oCL4LuC4Lqb4oCL4Lqj4oCL4LuE4Lqf4oCL4Lql4LuMLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDguqvgurzgurHguofigIvguojgurLguoHigIvguqXguq3guofigIvguprgu43gu4jigIvguqrgurPigIvgu4DguqXgurHgupTigIvguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLCDgu4LgupvigIvguqPigIvgu4Tgup/igIvguqXgu4zigIvguprgu4jguq3gupnigIvgu4Dguq7gurHgupTigIvguqfgur3guoHigIvguojgurDigIvgupbgurfguoHigIvgu4Dguq3gurvgurLigIvguq3guq3guoHigIvgu4TgupssIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meKAi+C7guC6m+KAi+C6o+KAi+C7hOC6n+KAi+C6peC7jC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4HgupfgurHguprigIvgu4DguqXgurHgupTigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguoTgurHgu4nguocuIOC6q+C6vOC6seC6h+KAi+C6iOC6suC6geKAi+C6peC6reC6h+KAi+C6muC7jeC7iOKAi+C6quC6s+KAi+C7gOC6peC6seC6lOKAi+C6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hywg4LuC4Lqb4oCL4Lqj4oCL4LuE4Lqf4oCL4Lql4LuM4oCL4Lqa4LuI4Lqt4LqZ4oCL4LuA4Lqu4Lqx4LqU4oCL4Lqn4Lq94LqB4oCL4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LuA4Lqt4Lq74Lqy4oCL4Lqt4Lqt4LqB4oCL4LuE4LqbLCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupnigIvgu4LgupvigIvguqPigIvgu4Tgup/igIvguqXgu4wuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7guC6l+KAi+C6peC6sOKAi+C6quC6seC6muKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hy4g4Lqr4Lq84Lqx4LqH4oCL4LqI4Lqy4LqB4oCL4Lql4Lqt4LqH4oCL4Lqa4LuN4LuI4oCL4Lqq4Lqz4oCL4LuA4Lql4Lqx4LqU4oCL4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLCDgu4LgupvigIvguqPigIvgu4Tgup/igIvguqXgu4zigIvguprgu4jguq3gupnigIvgu4Dguq7gurHgupTigIvguqfgur3guoHigIvguojgurDigIvgupbgurfguoHigIvgu4Dguq3gurvgurLigIvguq3guq3guoHigIvgu4TgupssIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meKAi+C7guC6m+KAi+C6o+KAi+C7hOC6n+KAi+C6peC7jC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuC6l+C7iOC6suC6meKAi+C6nuC6sOKAi+C6jeC6suKAi+C6jeC6suC6oeKAi+C6m+C6u+C6lOKAi+C6peKAi+C6seC6reC6geKAi+C7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6muC7jeC7iOKAi+C6luC6t+C6geKAi+C6leC7ieC6reC6hyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LqE4Lqx4LuJ4LqHLiDgu4LgupvigIvguqPigIvgu4Tgup/igIvguqXgu4zigIvguprgu4jguq3gupnigIvgu4Dguq7gurHgupTigIvguqfgur3guoHigIvguojgurDigIvgupbgurfguoHigIvgu4Dguq3gurvgurLigIvguq3guq3guoHigIvgu4TgupssIOC7gOC6iuC6tOC7iOC6h+KAi+C6iOC6sOKAi+C6peC6tuC6muKAi+C6l+C6uOC6geKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meKAi+C7guC6m+KAi+C6o+KAi+C7hOC6n+KAi+C6peC7jC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgupfgu4jgurLgupnigIvgup7gurDigIvguo3gurLigIvguo3gurLguqHigIvgupvgurvgupTigIvguqXigIvgurHguq3guoHigIvgu4LgupfigIvguqXgurDigIvguqrgurHguprigIvguprgu43gu4jigIvgupbgurfguoHigIvgupXgu4nguq3guocgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC6hOC6seC7ieC6hy4g4LuC4Lqb4oCL4Lqj4oCL4LuE4Lqf4oCL4Lql4LuM4oCL4Lqa4LuI4Lqt4LqZ4oCL4LuA4Lqu4Lqx4LqU4oCL4Lqn4Lq94LqB4oCL4LqI4Lqw4oCL4LqW4Lq34LqB4oCL4LuA4Lqt4Lq74Lqy4oCL4Lqt4Lqt4LqB4oCL4LuE4LqbLCDgu4DguorgurTgu4jguofigIvguojgurDigIvguqXgurbguprigIvgupfgurjguoHigIvguoLgu43gu4nigIvguqHgurngupnigIvgu4LgupvigIvguqPigIvgu4Tgup/igIvguqXgu4wuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC7geC6leC7ieC6oeC6nOC6tOC6lOC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq0sIOC6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6luC6suC6oeC7g+C6q+C7ieC6m+C6u+C6lOC6peC6seC6reC6geC7geC6l+C6seC6muC7gOC6peC6seC6lOC6guC6reC6h+C6l+C7iOC6suC6mSDgupTgu4nguqfguo3guoHgurLgupngu4DguoLgurvgu4ngurLguqrgurngu4jguqXgurDguprgurvguprgu4LgupTguo3gu4Pguorgu4nguq3gurXgu4DguqHguqfguoLguq3guofgupfgu4jgurLgupkuXG5cbiDguoHgurDguqXgurjgupngurLguqXguq3guofgu4Pgu53gu4jguq3gurXguoHguoTgurHgu4nguofgu4Pgupnguq3gurXguoEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LqX4LuI4Lqy4LqZ4LuB4LqV4LuJ4Lqh4Lqu4Lq54Lqa4LuB4Lqa4Lqa4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZ4Lqc4Lq04LqUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4g4Lqr4Lq84Lqx4LqH4LqI4Lqy4LqB4LqE4Lqn4Lqy4Lqh4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6rSDgupfgu4jgurLgupnguojgurDgupbgurfguoHgupbgurLguqHgu4Pguqvgu4ngupvgurvgupTguqXgurHguq3guoHgu4LgupfguqXgurDguqrgurHguprguoLguq3guofgupfgu4jgurLgupngupTgu4nguqfguo3guprgurHgupnguorgurXguq3gurXgu4DguqHguqcuXG5cbiDguqXguq3guofgu4Pgu53gu4jguq3gurXguoHguoTgurHgu4nguofgu4PgupkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Lqn4Lq04LqZ4Lqy4LqX4Lq1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgupfgu4jgurLgupngu4HgupXgu4nguqHguq7gurnguprgu4HguprguprgupvgurvgupTguqXgurHguq3guoHgupzgurTgupQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgu4Dgupfgurfgu4jguq3gu4HguqXgu4nguqcuIOC6q+C6vOC6seC6h+C6iOC6suC6geC7geC6leC7ieC6oeC6nOC6tOC6lOC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6rSwg4LqX4LuI4Lqy4LqZ4LqI4Lqw4LqW4Lq34LqB4LqW4Lqy4Lqh4LuD4Lqr4LuJ4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4LuB4LqX4Lqx4Lqa4LuA4Lql4Lqx4LqU4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZIOC6lOC7ieC6p+C6jeC6geC6suC6meC7gOC6guC6u+C7ieC6suC6quC6ueC7iOC6peC6sOC6muC6u+C6muC7guC6lOC6jeC7g+C6iuC7ieC6reC6teC7gOC6oeC6p+C6guC6reC6h+C6l+C7iOC6suC6mS5cblxuIOC6geC6sOC6peC6uOC6meC6suC6peC6reC6h+C7g+C7neC7iOC6reC6teC6geC6hOC6seC7ieC6h+C7g+C6meC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuC6l+C7iOC6suC6meC7geC6leC7ieC6oeC6ruC6ueC6muC7geC6muC6muC6m+C6u+C6lOC6peC6seC6reC6geC6guC6reC6h+C6l+C7iOC6suC6meC6nOC6tOC6lCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC7gOC6l+C6t+C7iOC6reC7geC6peC7ieC6py4g4Lqr4Lq84Lqx4LqH4LqI4Lqy4LqB4LqE4Lqn4Lqy4Lqh4Lqe4Lqw4LqN4Lqy4LqN4Lqy4Lqh4Lqt4Lq14LqBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LuA4LqX4Lq34LuI4LqtIOC6l+C7iOC6suC6meC6iOC6sOC6luC6t+C6geC6luC6suC6oeC7g+C6q+C7ieC6m+C6u+C6lOC6peC6seC6reC6geC7guC6l+C6peC6sOC6quC6seC6muC6guC6reC6h+C6l+C7iOC6suC6meC6lOC7ieC6p+C6jeC6muC6seC6meC6iuC6teC6reC6teC7gOC6oeC6py5cblxuIOC6peC6reC6h+C7g+C7neC7iOC6reC6teC6geC6hOC6seC7ieC6h+C7g+C6mSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuC6peC6sOC6q+C6seC6lCBQSU4g4LqC4Lqt4LqHIFNJTSDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guofgupfgu4jgurLgupngupXgu4nguq3guofgupXgurTgupTgupXgu43gu4jguqvgurLgupzgurngu4jgu4Pguqvgu4nguprgu43guqXgurTguoHgurLgupkg4LuA4Lqe4Lq34LuI4Lqt4Lqb4Lq74LqU4Lql4Lqx4Lqt4LqB4Lqt4Lq44Lqb4Lqw4LqB4Lqt4LqZ4LqC4Lqt4LqH4LqX4LuI4Lqy4LqZLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7guqXgurDguqvgurHgupQgU0lNIFBJTiDguprgu43gu4jgupbgurfguoHgupXgu4nguq3guocsIOC6l+C7iOC6suC6meC6jeC6seC6h+C6nuC6sOC6jeC6suC6jeC6suC6oeC7hOC6lOC7ieC6reC6teC6gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguoTgurHgu4nguocuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggZDJiZWQzMi4uZTY0Nzc5NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBha2FydG90aW5haSDEr3Zlc2tpdGUgdGlua2FtxIUgUFVLIGtvZMSFLiBQYWthcnRvdGluYWkgYmFuZGFudCBTSU0gYnVzIG5lbGVpZMW+aWFtYSB2aXNhbSBsYWlrdWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2RhaSBuZWF0aXRpbmthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUGVyIGRhdWcgYXRyYWtpbmltbyBwaWXFoWluacWzIGJhbmR5bcWzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4ga29kxIUgbmV0aW5rYW1haSDEr3ZlZMSXdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gay4gXG5cbkJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlay4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iTmV0ZWlzaW5nYWkgxK92ZWTEl3RlIHNsYXB0YcW+b2TEryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrLiBcblxuQmFuZHlraXRlIGRhciBrYXJ0xIUgcG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOZXRpbmthbWFpIG51cGllxaHEl3RlIGF0cmFraW5pbW8gcGllxaFpbsSvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGsuIFxuXG5CYW5keWtpdGUgZGFyIGthcnTEhSBwbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSBwbGFuxaFldGluxK8ga29tcGl1dGVyxK8uIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXPEl2ttaW5nLiBiYW5keW0uIMWhaXMgcGxhbsWhZXRpbmlzIGtvbXBpdXRlcmlzIGJ1cyBudXN0YXR5dGFzIGnFoSBuYXVqbyBpciB2aXNpIGpvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthcnQuIG5lc8SXa21pbmdhaSBiYW5kxJd0ZSBhdHJha2ludGkgdGVsZWZvbsSFLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmVzxJdrbWluZy4gYmFuZHltLiDFoWlzIHRlbGVmb25hcyBidXMgbnVzdGF0eXRhcyBpxaEgbmF1am8gaXIgdmlzaSBqbyBkdW9tZW55cyBidXMgacWhdHJpbnRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZMSFIG5ldGlua2FtYWkgxK92ZWTEl3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gay4gXG5cbkJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJOZXRlaXNpbmdhaSDEr3ZlZMSXdGUgc2xhcHRhxb5vZMSvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gay4gXG5cbkJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOZXRpbmthbWFpIG51cGllxaHEl3RlIGF0cmFraW5pbW8gcGllxaFpbsSvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gay4gXG5cbkJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSBwbGFuxaFldGluxK8ga29tcGl1dGVyxK8uIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5lc8SXa21pbmcuIGJhbmR5bS4gxaFpcyBwbGFuxaFldGluaXMga29tcGl1dGVyaXMgYnVzIG51c3RhdHl0YXMgacWhIG5hdWpvIGlyIHZpc2kgam8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYXJ0LiBuZXPEl2ttaW5nYWkgYmFuZMSXdGUgYXRyYWtpbnRpIHRlbGVmb27EhS4gUG8gZGFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmVzxJdrbWluZy4gYmFuZHltLiDFoWlzIHRlbGVmb25hcyBidXMgbnVzdGF0eXRhcyBpxaEgbmF1am8gaXIgdmlzaSBqbyBkdW9tZW55cyBidXMgacWhdHJpbnRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSBwbGFuxaFldGluxK8ga29tcGl1dGVyxK8uIFBsYW7FoWV0aW5pcyBrb21waXV0ZXJpcyBidXMgbnVzdGF0eXRhcyBpxaEgbmF1am8gaXIgdmlzaSBqbyBkdW9tZW55cyBidXMgacWhdHJpbnRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXJ0LiBuZXPEl2ttaW5nYWkgYmFuZMSXdGUgYXRyYWtpbnRpIHRlbGVmb27EhS4gVGVsZWZvbmFzIGJ1cyBudXN0YXR5dGFzIGnFoSBuYXVqbyBpciB2aXNpIGpvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSBwbGFuxaFldGluxK8ga29tcGl1dGVyxK8uIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXPEl2ttaW5nLiBiYW5keW0uIMWhaXMgbmF1ZG90b2phcyBidXMgcGHFoWFsaW50YXMgaXIgdmlzaSBuYXVkb3Rvam8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSB0ZWxlZm9uxIUuIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuZXPEl2ttaW5nLiBiYW5keW0uIMWhaXMgbmF1ZG90b2phcyBidXMgcGHFoWFsaW50YXMgaXIgdmlzaSBuYXVkb3Rvam8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthcnQuIG5lc8SXa21pbmdhaSBiYW5kxJd0ZSBhdHJha2ludGkgcGxhbsWhZXRpbsSvIGtvbXBpdXRlcsSvLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXPEl2ttaW5nLiBiYW5keW0uIMWhaXMgbmF1ZG90b2phcyBidXMgcGHFoWFsaW50YXMgaXIgdmlzaSBuYXVkb3Rvam8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYXJ0LiBuZXPEl2ttaW5nYWkgYmFuZMSXdGUgYXRyYWtpbnRpIHRlbGVmb27EhS4gUG8gZGFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmVzxJdrbWluZy4gYmFuZHltLiDFoWlzIG5hdWRvdG9qYXMgYnVzIHBhxaFhbGludGFzIGlyIHZpc2kgbmF1ZG90b2pvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSBwbGFuxaFldGluxK8ga29tcGl1dGVyxK8uIE5hdWRvdG9qYXMgYnVzIHBhxaFhbGludGFzIGlyIHZpc2kgbmF1ZG90b2pvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthcnQuIG5lc8SXa21pbmdhaSBiYW5kxJd0ZSBhdHJha2ludGkgdGVsZWZvbsSFLiBOYXVkb3RvamFzIGJ1cyBwYcWhYWxpbnRhcyBpciB2aXNpIG5hdWRvdG9qbyBkdW9tZW55cyBidXMgacWhdHJpbnRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthcnQuIG5lc8SXa21pbmdhaSBiYW5kxJd0ZSBhdHJha2ludGkgcGxhbsWhZXRpbsSvIGtvbXBpdXRlcsSvLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmVzxJdrbWluZy4gYmFuZHltLiBkYXJibyBwcm9maWxpcyBidXMgcGHFoWFsaW50YXMgaXIgdmlzaSBwcm9maWxpbyBkdW9tZW55cyBidXMgacWhdHJpbnRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYXJ0LiBuZXPEl2ttaW5nYWkgYmFuZMSXdGUgYXRyYWtpbnRpIHRlbGVmb27EhS4gUG8gZGFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5lc8SXa21pbmcuIGJhbmR5bS4gZGFyYm8gcHJvZmlsaXMgYnVzIHBhxaFhbGludGFzIGlyIHZpc2kgcHJvZmlsaW8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthcnQuIG5lc8SXa21pbmdhaSBiYW5kxJd0ZSBhdHJha2ludGkgcGxhbsWhZXRpbsSvIGtvbXBpdXRlcsSvLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXPEl2ttaW5nLiBiYW5keW0uIGRhcmJvIHByb2ZpbGlzIGJ1cyBwYcWhYWxpbnRhcyBpciB2aXNpIHByb2ZpbGlvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSB0ZWxlZm9uxIUuIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5lc8SXa21pbmcuIGJhbmR5bS4gZGFyYm8gcHJvZmlsaXMgYnVzIHBhxaFhbGludGFzIGlyIHZpc2kgcHJvZmlsaW8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrYXJ0LiBuZXPEl2ttaW5nYWkgYmFuZMSXdGUgYXRyYWtpbnRpIHBsYW7FoWV0aW7EryBrb21waXV0ZXLEry4gRGFyYm8gcHJvZmlsaXMgYnVzIHBhxaFhbGludGFzIGlyIHZpc2kgcHJvZmlsaW8gZHVvbWVueXMgYnVzIGnFoXRyaW50aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FydC4gbmVzxJdrbWluZ2FpIGJhbmTEl3RlIGF0cmFraW50aSB0ZWxlZm9uxIUuIERhcmJvIHByb2ZpbGlzIGJ1cyBwYcWhYWxpbnRhcyBpciB2aXNpIHByb2ZpbGlvIGR1b21lbnlzIGJ1cyBpxaF0cmludGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ik5ldGlua2FtYWkgbnVwaWXFocSXdGUgYXRyYWtpbmltbyBwaWXFoWluxK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gay4gUG8gZGFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5lc8SXa20uIGJhbmQuIGLFq3NpdGUgcGFwcmHFoXl0aSBhdHJha2ludGkgcGxhbsWhZXRpbsSvIGtvbXBpdXRlcsSvIG5hdWRvZGFtaSDigJ5Hb29nbGXigJwgcHJpc2lqdW5naW1vIGR1b21lbmlzLlxuXG4gQmFuZHlraXRlIGRhciBrYXJ0xIUgcG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmV0aW5rYW1haSBudXBpZcWhxJd0ZSBhdHJha2luaW1vIHBpZcWhaW7EryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmVzxJdrbS4gYmFuZC4gYsWrc2l0ZSBwYXByYcWheXRpIGF0cmFraW50aSB0ZWxlZm9uxIUgbmF1ZG9kYW1pIOKAnkdvb2dsZeKAnCBwcmlzaWp1bmdpbW8gZHVvbWVuaXMuXG5cbiBCYW5keWtpdGUgZGFyIGthcnTEhSBwbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ik5ldGlua2FtYWkgbnVwaWXFocSXdGUgYXRyYWtpbmltbyBwaWXFoWluxK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrLiBQbyBkYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXPEl2ttLiBiYW5kLiBixatzaXRlIHBhcHJhxaF5dGkgYXRyYWtpbnRpIHBsYW7FoWV0aW7EryBrb21waXV0ZXLEryBuYXVkb2RhbWkg4oCeR29vZ2xl4oCcIHByaXNpanVuZ2ltbyBkdW9tZW5pcy5cblxuIEJhbmR5a2l0ZSBkYXIga2FydMSFIHBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iTmV0aW5rYW1haSBudXBpZcWhxJd0ZSBhdHJha2luaW1vIHBpZcWhaW7EryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGsuIFBvIGRhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5lc8SXa20uIGJhbmQuIGLFq3NpdGUgcGFwcmHFoXl0aSBhdHJha2ludGkgdGVsZWZvbsSFIG5hdWRvZGFtaSDigJ5Hb29nbGXigJwgcHJpc2lqdW5naW1vIGR1b21lbmlzLlxuXG4gQmFuZHlraXRlIGRhciBrYXJ0xIUgcG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOZXRpbmthbWFzIFNJTSBrb3J0ZWzEl3MgUElOIGtvZGFzLiBSZWlrxJdzIHN1c2lzaWVrdGkgc3Ugb3BlcmF0b3JpdW1pLCBrYWQgYXRyYWtpbnTFsyDEr3JlbmdpbsSvLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TmV0aW5rYW1hcyBTSU0ga29ydGVsxJdzIFBJTiBrb2Rhcy4gTGlrbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBiYW5keW1hcy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAppbmRleCAyMGJmYzA2Li4yY2UxNjc2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iQXRrxIFydG90aSBpZXZhZGlldCBwYXJlaXpvIFBVS8Kga29kdS4gSmEgdmFpcsSBa2FzIHJlaXplcyBpZXZhZMSrc2lldCB0byBuZXBhcmVpemksIFNJTcKga2FydGUgdGlrcyBuZWF0Z3JpZXplbmlza2kgYXRzcMSTam90YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOwqBrb2RpIG5lYXRiaWxzdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJQxIFyxIFrIGRhdWR6IGtvbWJpbsSBY2lqYXMgbcSTxKNpbsSBanVtdSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iSsWrcyBuZXBhcmVpemkgaWV2YWTEq2rEgXQgUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgc2VrdW5kxJNtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJKxatzIG5lcGFyZWl6aSBpZXZhZMSrasSBdCBwYXJvbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcy5cblxuTcSTxKNpbmlldCB2xJNscmVpeiBwxJNjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBzZWt1bmTEk20uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkrFq3MgbmVwYXJlaXppIG5vcsSBZMSrasSBdCBhdGJsb8S3xJPFoWFuYXMga29tYmluxIFjaWp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgc2VrdW5kxJNtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkrFq3MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCBwbGFuxaFldGRhdG9ydS4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIMWhaXMgcGxhbsWhZXRkYXRvcnMgdGlrcyBhdGllc3RhdMSrdHMsIGvEgSBhcsSrIHZpc2kgcGxhbsWhZXRkYXRvcmEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkrFq3MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCB0xIFscnVuaS4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIMWhaXMgdMSBbHJ1bmlzIHRpa3MgYXRpZXN0YXTEq3RzLCBrxIEgYXLEqyB2aXNpIHTEgWxydcWGYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkrFq3MgbmVwYXJlaXppIGlldmFkxKtqxIF0IFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBzZWt1bmTEk20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkrFq3MgbmVwYXJlaXppIGlldmFkxKtqxIF0IHBhcm9saSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBzZWt1bmTEk20uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkrFq3MgbmVwYXJlaXppIG5vcsSBZMSrasSBdCBhdGJsb8S3xJPFoWFuYXMga29tYmluxIFjaWp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlaXplcy5cblxuTcSTxKNpbmlldCB2xJNscmVpeiBwxJNjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoHNla3VuZMSTbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJKxatzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCBwbGFuxaFldGRhdG9ydS4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoG5lc2VrbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gxaFpcyBwbGFuxaFldGRhdG9ycyB0aWtzIGF0aWVzdGF0xKt0cywga8SBIGFyxKsgdmlzaSBwbGFuxaFldGRhdG9yYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMgbmVzZWttxKtnaSBtxJPEo2luxIFqxIF0IGF0YmxvxLfEk3QgdMSBbHJ1bmkuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIMWhaXMgdMSBbHJ1bmlzIHRpa3MgYXRpZXN0YXTEq3RzLCBrxIEgYXLEqyB2aXNpIHTEgWxydcWGYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCBwbGFuxaFldGRhdG9ydS4gxaBpcyBwbGFuxaFldGRhdG9ycyB0aWtzIGF0aWVzdGF0xKt0cywga8SBIGFyxKsgdmlzaSBwbGFuxaFldGRhdG9yYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJKxatzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHTEgWxydW5pLiDFoGlzIHTEgWxydW5pcyB0aWtzIGF0aWVzdGF0xKt0cywga8SBIGFyxKsgdmlzaSB0xIFscnXFhmEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHBsYW7FoWV0ZGF0b3J1LiBQxJNjIHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoG5lc2VrbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gxaFpcyBsaWV0b3TEgWpzIHRpa3Mgbm/FhmVtdHMsIGvEgSBhcsSrIHZpc2kgbGlldG90xIFqYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHTEgWxydW5pLiBQxJNjIHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoG5lc2VrbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gxaFpcyBsaWV0b3TEgWpzIHRpa3Mgbm/FhmVtdHMsIGvEgSBhcsSrIHZpc2kgbGlldG90xIFqYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJKxatzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCBwbGFuxaFldGRhdG9ydS4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoG5lc2VrbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gxaFpcyBsaWV0b3TEgWpzIHRpa3Mgbm/FhmVtdHMsIGvEgSBhcsSrIHZpc2kgbGlldG90xIFqYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMgbmVzZWttxKtnaSBtxJPEo2luxIFqxIF0IGF0YmxvxLfEk3QgdMSBbHJ1bmkuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIMWhaXMgbGlldG90xIFqcyB0aWtzIG5vxYZlbXRzLCBrxIEgYXLEqyB2aXNpIGxpZXRvdMSBamEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJKxatzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHBsYW7FoWV0ZGF0b3J1LiDFoGlzIGxpZXRvdMSBanMgdGlrcyBub8WGZW10cywga8SBIGFyxKsgdmlzaSBsaWV0b3TEgWphIGRhdGkgdGlrcyBkesSTc3RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IkrFq3MgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMgbmVzZWttxKtnaSBtxJPEo2luxIFqxIF0IGF0YmxvxLfEk3QgdMSBbHJ1bmkuIMWgaXMgbGlldG90xIFqcyB0aWtzIG5vxYZlbXRzLCBrxIEgYXLEqyB2aXNpIGxpZXRvdMSBamEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHBsYW7FoWV0ZGF0b3J1LiBQxJNjIHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz7CoG5lc2VrbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gZGFyYmEgcHJvZmlscyB0aWtzIG5vxYZlbXRzLCBrxIEgYXLEqyB2aXNpIHByb2ZpbGEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkrFq3MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCB0xIFscnVuaS4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIGRhcmJhIHByb2ZpbHMgdGlrcyBub8WGZW10cywga8SBIGFyxKsgdmlzaSBwcm9maWxhIGRhdGkgdGlrcyBkesSTc3RpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkrFq3MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPsKgcmVpemVzIG5lc2VrbcSrZ2kgbcSTxKNpbsSBasSBdCBhdGJsb8S3xJN0IHBsYW7FoWV0ZGF0b3J1LiBQxJNjIHbEk2wgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPsKgbmVzZWttxKtnaWVtIG3Ek8SjaW7EgWp1bWllbSBkYXJiYSBwcm9maWxzIHRpa3Mgbm/FhmVtdHMsIGvEgSBhcsSrIHZpc2kgcHJvZmlsYSBkYXRpIHRpa3MgZHrEk3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMgbmVzZWttxKtnaSBtxJPEo2luxIFqxIF0IGF0YmxvxLfEk3QgdMSBbHJ1bmkuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBuZXNla23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIGRhcmJhIHByb2ZpbHMgdGlrcyBub8WGZW10cywga8SBIGFyxKsgdmlzaSBwcm9maWxhIGRhdGkgdGlrcyBkesSTc3RpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCBwbGFuxaFldGRhdG9ydS4gRGFyYmEgcHJvZmlscyB0aWtzIG5vxYZlbXRzLCBrxIEgYXLEqyB2aXNpIHByb2ZpbGEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iSsWrcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7CoHJlaXplcyBuZXNla23Eq2dpIG3Ek8SjaW7EgWrEgXQgYXRibG/Et8STdCB0xIFscnVuaS4gRGFyYmEgcHJvZmlscyB0aWtzIG5vxYZlbXRzLCBrxIEgYXLEqyB2aXNpIHByb2ZpbGEgZGF0aSB0aWtzIGR6xJNzdGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkrFq3MgbmVwYXJlaXppIG5vcsSBZMSrasSBdCBhdGJsb8S3xJPFoWFuYXMga29tYmluxIFjaWp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPsKgbmV2ZWlrc23Eq2dpZW0gbcSTxKNpbsSBanVtaWVtIHBsYW7FoWV0ZGF0b3JzIGLFq3MgasSBYXRibG/Et8STLCBpem1hbnRvam90IGUtcGFzdGEga29udHUuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPsKgc2VrdW5kxJNtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSsWrcyBuZXBhcmVpemkgbm9yxIFkxKtqxIF0IGF0YmxvxLfEk8WhYW5hcyBrb21iaW7EgWNpanUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz7CoHJlaXplcy4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqBuZXZlaWtzbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gdMSBbHJ1bmlzIGLFq3MgasSBYXRibG/Et8STLCBpem1hbnRvam90IGUtcGFzdGEga29udHUuXG5cbk3Ek8SjaW5pZXQgdsSTbHJlaXogcMSTYyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPsKgc2VrdW5kxJNtLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJKxatzIG5lcGFyZWl6aSBub3LEgWTEq2rEgXQgYXRibG/Et8STxaFhbmFzIGtvbWJpbsSBY2lqdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+wqByZWl6ZXMuIFDEk2MgdsSTbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+wqBuZXZlaWtzbcSrZ2llbSBtxJPEo2luxIFqdW1pZW0gcGxhbsWhZXRkYXRvcnMgYsWrcyBqxIFhdGJsb8S3xJMsIGl6bWFudG9qb3QgZS1wYXN0YSBrb250dS5cblxuTcSTxKNpbmlldCB2xJNscmVpeiBwxJNjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz7CoHNla3VuZMSTbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkrFq3MgbmVwYXJlaXppIG5vcsSBZMSrasSBdCBhdGJsb8S3xJPFoWFuYXMga29tYmluxIFjaWp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz7CoHJlaXplcy4gUMSTYyB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz7CoG5ldmVpa3NtxKtnaWVtIG3Ek8SjaW7EgWp1bWllbSB0xIFscnVuaXMgYsWrcyBqxIFhdGJsb8S3xJMsIGl6bWFudG9qb3QgZS1wYXN0YSBrb250dS5cblxuTcSTxKNpbmlldCB2xJNscmVpeiBwxJNjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz7CoHNla3VuZMSTbS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5lcGFyZWl6cyBTSU3CoGthcnRlcyBQSU7CoGtvZHMuwqBMYWkgYXRibG/Et8STdHUgaWVyxKtjaSwgc2F6aW5pZXRpZXMgYXIgbW9iaWxvIHNha2FydSBvcGVyYXRvcnUuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0iemVybyI+TmVwYXJlaXpzIFNJTcKga2FydGVzIFBJTsKga29kcy4gVmFyYXQgbcSTxKNpbsSBdCB2xJNsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+wqByZWl6ZXMuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCBhMDZkNGU0Li5hZGJkZDcwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQn9C+0LLRgtC+0YDQvdC+INCy0L3QtdGB0LXRgtC1INCz0L4g0YLQvtGH0L3QuNC+0YIg0J/Qo9CaINC60L7QtC4g0J/QvtCy0YLQvtGA0L3QuNGC0LUg0L7QsdC40LTQuCDRgtGA0LDRmNC90L4g0ZzQtSDRmNCwINC+0L3QtdCy0L7Qt9C80L7QttCw0YIg0KHQmNCcINC60LDRgNGC0LjRh9C60LDRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiLQn9CY0J0g0LrQvtC00L7QstC40YLQtSDQvdC1INGB0LUg0YHQvtCy0L/QsNGT0LDQsNGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i0J/RgNC10LzQvdC+0LPRgyDQvtCx0LjQtNC4INGB0L4g0YjQtdC80LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCf0L7Qs9GA0LXRiNC90L4g0YHRgtC1INCz0L4g0LLQv9C40YjQsNC70LUg0LLQsNGI0LjQvtGCINCf0JjQnSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4gXG5cbtCe0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDRmNCwINCy0L/QuNGI0LDQu9C1INCy0LDRiNCw0YLQsCDQu9C+0LfQuNC90LrQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4gXG5cbtCe0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDRmNCwINGD0L/QvtGC0YDQtdCx0LjQu9C1INCy0LDRiNCw0YLQsCDRiNC10LzQsCDQt9CwINC+0YLQutC70YPRh9GD0LLQsNGa0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguIFxuXG7QntCx0LjQtNC10YLQtSDRgdC1INC/0L7QstGC0L7RgNC90L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0LDRgtC4LiDQn9C+INGD0YjRgtC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXQv9GA0LDQstC40LvQvdC4INC+0LHQuNC00LgsINGC0LDQsdC70LXRgtC+0YIg0ZzQtSDRgdC1INGA0LXRgdC10YLQuNGA0LAsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC90LXQs9C+0LLQuCDQv9C+0LTQsNGC0L7RhtC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4g0YPRiNGC0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L7QsdC40LTQuCwg0YLQtdC70LXRhNC+0L3QvtGCINGc0LUg0YHQtSDRgNC10YHQtdGC0LjRgNCwLCDRgdC+INGI0YLQviDRnNC1INGB0LUg0LjQt9Cx0YDQuNGI0LDRgiDRgdC40YLQtSDQvdC10LPQvtCy0Lgg0L/QvtC00LDRgtC+0YbQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCf0L7Qs9GA0LXRiNC90L4g0YHRgtC1INCz0L4g0LLQv9C40YjQsNC70LUg0LLQsNGI0LjQvtGCINCf0JjQnSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0LDRgtC4LiBcblxu0J7QsdC40LTQtdGC0LUg0YHQtSDQv9C+0LLRgtC+0YDQvdC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0ZjQsCDQstC/0LjRiNCw0LvQtSDQstCw0YjQsNGC0LAg0LvQvtC30LjQvdC60LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9Cw0YLQuC4gXG5cbtCe0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCf0L7Qs9GA0LXRiNC90L4g0YHRgtC1INGY0LAg0YPQv9C+0YLRgNC10LHQuNC70LUg0LLQsNGI0LDRgtCwINGI0LXQvNCwINC30LAg0L7RgtC60LvRg9GH0YPQstCw0ZrQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0LDRgtC4LiBcblxu0J7QsdC40LTQtdGC0LUg0YHQtSDQv9C+0LLRgtC+0YDQvdC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4g0YPRiNGC0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10L/RgNCw0LLQuNC70L3QuCDQvtCx0LjQtNC4LCDRgtCw0LHQu9C10YLQvtGCINGc0LUg0YHQtSDRgNC10YHQtdGC0LjRgNCwLCDRgdC+INGI0YLQviDRnNC1INGB0LUg0LjQt9Cx0YDQuNGI0LDRgiDRgdC40YLQtSDQvdC10LPQvtCy0Lgg0L/QvtC00LDRgtC+0YbQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4g0YPRiNGC0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10L/RgNCw0LLQuNC70L3QuCDQvtCx0LjQtNC4LCDRgtC10LvQtdGE0L7QvdC+0YIg0ZzQtSDRgdC1INGA0LXRgdC10YLQuNGA0LAsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC90LXQs9C+0LLQuCDQv9C+0LTQsNGC0L7RhtC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J7QstC+0Zgg0YLQsNCx0LvQtdGCINGc0LUg0YHQtSDRgNC10YHQtdGC0LjRgNCwLCDRgdC+INGI0YLQviDRnNC1INGB0LUg0LjQt9Cx0YDQuNGI0LDRgiDRgdC40YLQtSDQvdC10LPQvtCy0Lgg0L/QvtC00LDRgtC+0YbQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0LDRgtC4LiDQntCy0L7RmCDRgtC10LvQtdGE0L7QvSDRnNC1INGB0LUg0YDQtdGB0LXRgtC40YDQsCwg0YHQviDRiNGC0L4g0ZzQtSDRgdC1INC40LfQsdGA0LjRiNCw0YIg0YHQuNGC0LUg0L3QtdCz0L7QstC4INC/0L7QtNCw0YLQvtGG0LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQsNCx0LvQtdGC0L7RgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10L/RgNCw0LLQuNC70L3QuCDQvtCx0LjQtNC4LCDQutC+0YDQuNGB0L3QuNC60L7RgiDRnNC1INGB0LUg0L7RgtGB0YLRgNCw0L3QuCwg0YHQviDRiNGC0L4g0ZzQtSDRgdC1INC40LfQsdGA0LjRiNCw0YIg0YHQuNGC0LUg0L/QvtC00LDRgtC+0YbQuCDQvdCwINC60L7RgNC40YHQvdC40LrQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4g0YPRiNGC0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdC/0YDQsNCy0LjQu9C90Lgg0L7QsdC40LTQuCwg0LrQvtGA0LjRgdC90LjQutC+0YIg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQutC+0YDQuNGB0L3QuNC60L7Rgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4g0YPRiNGC0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10L/RgNCw0LLQuNC70L3QuCDQvtCx0LjQtNC4LCDQutC+0YDQuNGB0L3QuNC60L7RgiDRnNC1INGB0LUg0L7RgtGB0YLRgNCw0L3QuCwg0YHQviDRiNGC0L4g0ZzQtSDRgdC1INC40LfQsdGA0LjRiNCw0YIg0YHQuNGC0LUg0L/QvtC00LDRgtC+0YbQuCDQvdCwINC60L7RgNC40YHQvdC40LrQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXQv9GA0LDQstC40LvQvdC4INC+0LHQuNC00LgsINC60L7RgNC40YHQvdC40LrQvtGCINGc0LUg0YHQtSDQvtGC0YHRgtGA0LDQvdC4LCDRgdC+INGI0YLQviDRnNC1INGB0LUg0LjQt9Cx0YDQuNGI0LDRgiDRgdC40YLQtSDQv9C+0LTQsNGC0L7RhtC4INC90LAg0LrQvtGA0LjRgdC90LjQutC+0YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J7QstC+0Zgg0LrQvtGA0LjRgdC90LjQuiDRnNC1INGB0LUg0L7RgtGB0YLRgNCw0L3QuCwg0YHQviDRiNGC0L4g0ZzQtSDRgdC1INC40LfQsdGA0LjRiNCw0YIg0YHQuNGC0LUg0L3QtdCz0L7QstC4INC/0L7QtNCw0YLQvtGG0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J7QstC+0Zgg0LrQvtGA0LjRgdC90LjQuiDRnNC1INGB0LUg0L7RgtGB0YLRgNCw0L3QuCwg0YHQviDRiNGC0L4g0ZzQtSDRgdC1INC40LfQsdGA0LjRiNCw0YIg0YHQuNGC0LUg0L3QtdCz0L7QstC4INC/0L7QtNCw0YLQvtGG0LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQsNCx0LvQtdGC0L7RgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvdC10L/RgNCw0LLQuNC70L3QuCDQvtCx0LjQtNC4LCDRgNCw0LHQvtGC0L3QuNC+0YIg0L/RgNC+0YTQuNC7INGc0LUg0YHQtSDQvtGC0YHRgtGA0LDQvdC4LCDRgdC+INGI0YLQviDRnNC1INGB0LUg0LjQt9Cx0YDQuNGI0LDRgiDRgdC40YLQtSDQv9C+0LTQsNGC0L7RhtC4INC90LAg0L/RgNC+0YTQuNC70L7Rgi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QvtGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0LDRgtC4LiDQn9C+INGD0YjRgtC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXQv9GA0LDQstC40LvQvdC4INC+0LHQuNC00LgsINGA0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40Lsg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQv9GA0L7RhNC40LvQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCd0LXQv9GA0LDQstC40LvQvdC+INGB0LUg0L7QsdC40LTQvtCy0YLQtSDQtNCwINCz0L4g0L7RgtC60LvRg9GH0LjRgtC1INGC0LDQsdC70LXRgtC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXQv9GA0LDQstC40LvQvdC4INC+0LHQuNC00LgsINGA0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40Lsg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQv9GA0L7RhNC40LvQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQndC10L/RgNCw0LLQuNC70L3QviDRgdC1INC+0LHQuNC00L7QstGC0LUg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXQv9GA0LDQstC40LvQvdC4INC+0LHQuNC00LgsINGA0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40Lsg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQv9GA0L7RhNC40LvQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i0J3QtdC/0YDQsNCy0LjQu9C90L4g0YHQtSDQvtCx0LjQtNC+0LLRgtC1INC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQsNCx0LvQtdGC0L7RgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguINCg0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40Lsg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQv9GA0L7RhNC40LvQvtGCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+ItCd0LXQv9GA0LDQstC40LvQvdC+INGB0LUg0L7QsdC40LTQvtCy0YLQtSDQtNCwINCz0L4g0L7RgtC60LvRg9GH0LjRgtC1INGC0LXQu9C10YTQvtC90L7RgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguINCg0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40Lsg0ZzQtSDRgdC1INC+0YLRgdGC0YDQsNC90LgsINGB0L4g0YjRgtC+INGc0LUg0YHQtSDQuNC30LHRgNC40YjQsNGCINGB0LjRgtC1INC/0L7QtNCw0YLQvtGG0Lgg0L3QsCDQv9GA0L7RhNC40LvQvtGCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDRmNCwINGD0L/QvtGC0YDQtdCx0LjQu9C1INCy0LDRiNCw0YLQsCDRiNC10LzQsCDQvdCwINC+0YLQutC70YPRh9GD0LLQsNGa0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdC4INC+0LHQuNC00LgsINGc0LUg0L/QvtCx0LDRgNCw0LDRgiDQvtC0INCy0LDRgSDQtNCwINCz0L4g0L7RgtC60LvRg9GH0LjRgtC1INGC0LDQsdC70LXRgtC+0YIg0YHQviDQutC+0YDQuNGB0YLQtdGa0LUg0YHQvNC10YLQutCwINC90LAg0LUt0L/QvtGI0YLQsC5cblxuINCe0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0ZjQsCDRg9C/0L7RgtGA0LXQsdC40LvQtSDQstCw0YjQsNGC0LAg0YjQtdC80LAg0L3QsCDQvtGC0LrQu9GD0YfRg9Cy0LDRmtC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0LDRgtC4LiDQn9C+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtCx0LjQtNC4LCDRnNC1INC/0L7QsdCw0YDQsNCw0YIg0L7QtCDQstCw0YEg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtC10LvQtdGE0L7QvdC+0YIg0YHQviDQutC+0YDQuNGB0YLQtdGa0LUg0YHQvNC10YLQutCwINC90LAg0LUt0L/QvtGI0YLQsC5cblxuINCe0LHQuNC00LXRgtC1INGB0LUg0L/QvtCy0YLQvtGA0L3QviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDRmNCwINGD0L/QvtGC0YDQtdCx0LjQu9C1INCy0LDRiNCw0YLQsCDRiNC10LzQsCDQvdCwINC+0YLQutC70YPRh9GD0LLQsNGa0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9Cw0YLQuC4g0J/QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QuCDQvtCx0LjQtNC4LCDRnNC1INC/0L7QsdCw0YDQsNCw0YIg0L7QtCDQstCw0YEg0LTQsCDQs9C+INC+0YLQutC70YPRh9C40YLQtSDRgtCw0LHQu9C10YLQvtGCINGB0L4g0LrQvtGA0LjRgdGC0LXRmtC1INGB0LzQtdGC0LrQsCDQvdCwINC1LdC/0L7RiNGC0LAuXG5cbiDQntCx0LjQtNC10YLQtSDRgdC1INC/0L7QstGC0L7RgNC90L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0ZjQsCDRg9C/0L7RgtGA0LXQsdC40LvQtSDQstCw0YjQsNGC0LAg0YjQtdC80LAg0L3QsCDQvtGC0LrQu9GD0YfRg9Cy0LDRmtC1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/QsNGC0LguINCf0L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10YPRgdC/0LXRiNC90Lgg0L7QsdC40LTQuCwg0ZzQtSDQv9C+0LHQsNGA0LDQsNGCINC+0LQg0LLQsNGBINC00LAg0LPQviDQvtGC0LrQu9GD0YfQuNGC0LUg0YLQtdC70LXRhNC+0L3QvtGCINGB0L4g0LrQvtGA0LjRgdGC0LXRmtC1INGB0LzQtdGC0LrQsCDQvdCwINC1LdC/0L7RiNGC0LAuXG5cbiDQntCx0LjQtNC10YLQtSDRgdC1INC/0L7QstGC0L7RgNC90L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J/QmNCdINC60L7QtNC+0YIg0LfQsCDQodCY0Jwg0LrQsNGA0YLQuNGH0LrQsNGC0LAg0LUg0L3QtdGC0L7Rh9C10L0uINCa0L7QvdGC0LDQutGC0LjRgNCw0YLQtSDRgdC+INCy0LDRiNC40L7RgiDQvtC/0LXRgNCw0YLQvtGAINC00LAg0LPQviDQvtGC0LrQu9GD0YfQuCDRg9GA0LXQtNC+0YIuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7Qn9C+0LPRgNC10YjQtdC9INCf0JjQnS3QutC+0LQg0LfQsCDQodCY0JwsINCy0Lgg0L/RgNC10L7RgdGC0LDQvdGD0LLQsCDRg9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQvtCx0LjQtC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCmluZGV4IGE3ZDc4ZjUuLmE1MjhlNjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuC0tuC0sOC0v+C0r+C0vuC0ryBQVUsg4LSV4LWL4LSh4LWNIOC0teC1gOC0o+C1jeC0n+C1geC0giDgtKjgtb3gtJXgtYHgtJUuIOC0huC0teC1vOC0pOC1jeC0pOC0v+C0muC1jeC0muC1geC0s+C1jeC0syDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb4g4LS44LS/4LSCIOC0tuC0vuC0tuC1jeC0teC0pOC0ruC0vuC0r+C0vyDgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtLDgtLngtL/gtKTgtK7gtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuC0quC0v+C1uyDgtJXgtYvgtKHgtYHgtJXgtb4g4LSq4LWK4LSw4LWB4LSk4LWN4LSk4LSq4LWN4LSq4LWG4LSf4LWB4LSo4LWN4LSo4LS/4LSy4LWN4LSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4LS14LSz4LSw4LWG4LSv4LSn4LS/4LSV4LSCIOC0quC0vuC0seC1jeC0seC1h+C1uiDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKrgtL/gtbsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtJ/gtYjgtKrgtY3gtKrgtYHgtJrgtYbgtK/gtY3igIzgtKTgtYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtLjgtYbgtJXgtY3gtJXgtbvgtKHgtL/gtKjgtYHgtLPgtY3gtLPgtL/gtb0g4LS14LWA4LSj4LWN4LSf4LWB4LSCIOC0tuC1jeC0sOC0ruC0v+C0leC1jeC0leC1geC0lS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0quC0vuC0uOC1jeKAjOC0teC1h+C0oeC1jSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0n+C1iOC0quC1jeC0quC1geC0muC1huC0r+C1jeKAjOC0pOC1gS4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0s+C0v+C1vSDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSq4LS+4LSx4LWN4LSx4LWH4LW6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LS14LSw4LSa4LWN4LSa4LWBLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LS44LWG4LSV4LWN4LSV4LW74LSh4LS/4LSo4LWB4LSz4LWN4LSz4LS/4LW9IOC0teC1gOC0o+C1jeC0n+C1geC0giDgtLbgtY3gtLDgtK7gtL/gtJXgtY3gtJXgtYHgtJUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0n+C0vuC0rOC1jeKAjOC0suC1huC0seC1jeC0seC1jSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LeC1vSDgtJXgtYLgtJ/gtYHgtKTgtb0g4LSq4LSw4LS+4LSc4LSv4LSq4LWN4LSq4LWG4LSf4LWN4LSfIOC0tuC1jeC0sOC0ruC0meC1jeC0meC1vuC0leC1jeC0leC1geC0tuC1h+C0t+C0giwg4LSIIOC0n+C0vuC0rOC1jeKAjOC0suC1huC0seC1jeC0seC1jSDgtKrgtYHgtKjgtIPgtLjgtJzgtY3gtJzgtYDgtJXgtLDgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSH4LSk4LS/4LSo4LWN4LSx4LWGIOC0juC0suC1jeC0suC0viDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSr4LWL4LW6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4t4LW9IOC0leC1guC0n+C1geC0pOC1vSDgtKrgtLDgtL7gtJzgtK/gtKrgtY3gtKrgtYbgtJ/gtY3gtJ8g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWB4LS24LWH4LS34LSCLCDgtIgg4LSr4LWL4LW6IOC0quC1geC0qOC0g+C0uOC0nOC1jeC0nOC1gOC0leC0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtIfgtKTgtL/gtKjgtY3gtLHgtYYg4LSO4LSy4LWN4LSy4LS+IOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSq4LS/4LW7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtJ/gtYjgtKrgtY3gtKrgtYHgtJrgtYbgtK/gtY3igIzgtKTgtYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0s+C0v+C1vSDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSq4LS+4LS44LWN4oCM4LS14LWH4LSh4LWNIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtJ/gtYjgtKrgtY3gtKrgtYHgtJrgtYbgtK/gtY3igIzgtKTgtYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0s+C0v+C1vSDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSq4LS+4LSx4LWN4LSx4LWH4LW6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtLXgtLDgtJrgtY3gtJrgtYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0s+C0v+C1vSDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t4LW9IOC0leC1guC0n+C1geC0pOC1vSDgtKrgtLDgtL7gtJzgtK/gtKrgtY3gtKrgtYbgtJ/gtY3gtJ8g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWB4LS24LWH4LS34LSCLCDgtIgg4LSf4LS+4LSs4LWN4oCM4LSy4LWG4LSx4LWN4LSx4LWNIOC0quC1geC0qOC0g+C0uOC0nOC1jeC0nOC1gOC0leC0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtIfgtKTgtL/gtKjgtY3gtLHgtYYg4LSO4LSy4LWN4LSy4LS+IOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKvgtYvgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t4LW9IOC0leC1guC0n+C1geC0pOC1vSDgtKrgtLDgtL7gtJzgtK/gtKrgtY3gtKrgtYbgtJ/gtY3gtJ8g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWB4LS24LWH4LS34LSCLCDgtIgg4LSr4LWL4LW6IOC0quC1geC0qOC0g+C0uOC0nOC1jeC0nOC1gOC0leC0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtIfgtKTgtL/gtKjgtY3gtLHgtYYg4LSO4LSy4LWN4LSy4LS+IOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4g4LSIIOC0n+C0vuC0rOC1jeKAjOC0suC1huC0seC1jeC0seC0v+C0qOC1hiDgtKrgtYHgtKjgtIPgtLjgtJzgtY3gtJzgtYDgtJXgtLDgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSF4LSk4LS/4LSo4LWN4LSx4LWGIOC0juC0suC1jeC0suC0viDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKvgtYvgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4g4LSIIOC0q+C1i+C0o+C0v+C0qOC1hiDgtKrgtYHgtKjgtIPgtLjgtJzgtY3gtJzgtYDgtJXgtLDgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSF4LSk4LS/4LSo4LWN4LSx4LWGIOC0juC0suC1jeC0suC0viDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtIXgtbrgtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LS24LWN4LSw4LSu4LS/4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi3gtb0g4LSV4LWC4LSf4LWB4LSk4LW9IOC0quC0sOC0vuC0nOC0r+C0quC1jeC0quC1huC0n+C1jeC0nyDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb7gtJXgtY3gtJXgtYHgtLbgtYfgtLfgtIIsIOC0iCDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtL7gtLXgtL/gtKjgtYYg4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSCLCDgtIgg4LSJ4LSq4LSv4LWL4LSV4LWN4LSk4LS+4LS14LS/4LSo4LWGIOC0qOC1gOC0leC1jeC0leC0guC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtI7gtLLgtY3gtLLgtL4g4LSJ4LSq4LSv4LWL4LSV4LWN4LSk4LWDIOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKvgtYvgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtIXgtbrgtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LS24LWN4LSw4LSu4LS/4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi3gtb0g4LSV4LWC4LSf4LWB4LSk4LW9IOC0quC0sOC0vuC0nOC0r+C0quC1jeC0quC1huC0n+C1jeC0nyDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb7gtJXgtY3gtJXgtYHgtLbgtYfgtLfgtIIsIOC0iCDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtL7gtLXgtL/gtKjgtYYg4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtYMg4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSf4LS+4LSs4LWN4oCM4LSy4LWG4LSx4LWN4LSx4LWNIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtIXgtbrgtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LS24LWN4LSw4LSu4LS/4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LeC1vSDgtJXgtYLgtJ/gtYHgtKTgtb0g4LSq4LSw4LS+4LSc4LSv4LSq4LWN4LSq4LWG4LSf4LWN4LSfIOC0tuC1jeC0sOC0ruC0meC1jeC0meC1vuC0leC1jeC0leC1geC0tuC1h+C0t+C0giwg4LSIIOC0ieC0quC0r+C1i+C0leC1jeC0pOC0vuC0teC0v+C0qOC1hiDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtYHgtIIsIOC0iCDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtL7gtLXgtL/gtKjgtYYg4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtYMg4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0q+C1i+C1uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi3gtb0g4LSV4LWC4LSf4LWB4LSk4LW9IOC0quC0sOC0vuC0nOC0r+C0quC1jeC0quC1huC0n+C1jeC0nyDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb7gtJXgtY3gtJXgtYHgtLbgtYfgtLfgtIIsIOC0iCDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtL7gtLXgtL/gtKjgtYYg4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtIngtKrgtK/gtYvgtJXgtY3gtKTgtYMg4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4g4LSIIOC0ieC0quC0r+C1i+C0leC1jeC0pOC0vuC0teC0v+C0qOC1hiDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSO4LSy4LWN4LSy4LS+IOC0ieC0quC0r+C1i+C0leC1jeC0pOC1gyDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKvgtYvgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0tuC1jeC0sOC0ruC0v+C0muC1jeC0muC1gS4g4LSIIOC0ieC0quC0r+C1i+C0leC1jeC0pOC0vuC0teC0v+C0qOC1hiDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSO4LSy4LWN4LSy4LS+IOC0ieC0quC0r+C1i+C0leC1jeC0pOC1gyDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtIXgtbrgtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LS24LWN4LSw4LSu4LS/4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi3gtb0g4LSV4LWC4LSf4LWB4LSk4LW9IOC0quC0sOC0vuC0nOC0r+C0quC1jeC0quC1huC0n+C1jeC0nyDgtLbgtY3gtLDgtK7gtJngtY3gtJngtb7gtJXgtY3gtJXgtYHgtLbgtYfgtLfgtIIsIOC0lOC0puC1jeC0r+C1i+C0l+C0v+C0lSDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0q+C1i+C1uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LeC1vSDgtJXgtYLgtJ/gtYHgtKTgtb0g4LSq4LSw4LS+4LSc4LSv4LSq4LWN4LSq4LWG4LSf4LWN4LSfIOC0tuC1jeC0sOC0ruC0meC1jeC0meC1vuC0leC1jeC0leC1geC0tuC1h+C0t+C0giwg4LSU4LSm4LWN4LSv4LWL4LSX4LS/4LSVIOC0quC1jeC0sOC1iuC0q+C1iOC1vSDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtL7gtb0g4LSO4LSy4LWN4LSy4LS+IOC0quC1jeC0sOC1iuC0q+C1iOC1vSDgtLXgtL/gtLXgtLDgtJngtY3gtJngtLPgtYHgtIIg4LSH4LSy4LWN4LSy4LS+4LSk4LS+4LSV4LWN4LSV4LWB4LSCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t4LW9IOC0leC1guC0n+C1geC0pOC1vSDgtKrgtLDgtL7gtJzgtK/gtKrgtY3gtKrgtYbgtJ/gtY3gtJ8g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWB4LS24LWH4LS34LSCLCDgtJTgtKbgtY3gtK/gtYvgtJfgtL/gtJUg4LSq4LWN4LSw4LWK4LSr4LWI4LW9IOC0qOC1gOC0leC1jeC0leC0guC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtI7gtLLgtY3gtLLgtL4g4LSq4LWN4LSw4LWK4LSr4LWI4LW9IOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtKvgtYvgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t4LW9IOC0leC1guC0n+C1geC0pOC1vSDgtKrgtLDgtL7gtJzgtK/gtKrgtY3gtKrgtYbgtJ/gtY3gtJ8g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+4LSV4LWN4LSV4LWB4LS24LWH4LS34LSCLCDgtJTgtKbgtY3gtK/gtYvgtJfgtL/gtJUg4LSq4LWN4LSw4LWK4LSr4LWI4LW9IOC0qOC1gOC0leC1jeC0leC0guC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC0v+C0qOC0vuC1vSDgtI7gtLLgtY3gtLLgtL4g4LSq4LWN4LSw4LWK4LSr4LWI4LW9IOC0teC0v+C0teC0sOC0meC1jeC0meC0s+C1geC0giDgtIfgtLLgtY3gtLLgtL7gtKTgtL7gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSf4LS+4LSs4LWN4oCM4LSy4LSx4LWN4LSx4LWNIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIOC0lOC0puC1jeC0r+C1i+C0l+C0v+C0lSDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSr4LWL4LW6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgtKTgtLXgtKMg4LSk4LWG4LSx4LWN4LSx4LS+4LSv4LS/IOC0heC1uuC0suC1i+C0leC1jeC0leC1geC0muC1huC0r+C1jeC0r+C0vuC1uyDgtLbgtY3gtLDgtK7gtL/gtJrgtY3gtJrgtYEuIOC0lOC0puC1jeC0r+C1i+C0l+C0v+C0lSDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LSo4LWA4LSV4LWN4LSV4LSC4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LS+4LW9IOC0juC0suC1jeC0suC0viDgtKrgtY3gtLDgtYrgtKvgtYjgtb0g4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LSz4LWB4LSCIOC0h+C0suC1jeC0suC0vuC0pOC0vuC0leC1jeC0leC1geC0gi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtKrgtL7gtLHgtY3gtLHgtYfgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtLXgtLDgtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC0tuC1jeC0sOC0ruC0meC1jeC0meC1viDgtJXgtYLgtJ/gtL8g4LS14LS/4LSc4LSv4LS/4LSa4LWN4LSa4LS/4LSy4LWN4LSy4LWG4LSZ4LWN4LSV4LS/4LW9LCDgtJLgtLDgtYEg4LSH4LSu4LWG4LSv4LS/4LW9IOC0heC0leC1jeC0leC1l+C0o+C1jeC0n+C1jSDgtIngtKrgtK/gtYvgtJfgtL/gtJrgtY3gtJrgtY0g4LSf4LS+4LSs4LWN4oCM4LSy4LWG4LSx4LWN4LSx4LWNIOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LSo4LS/4LSZ4LWN4LSZ4LSz4LWL4LSf4LWNIOC0huC0teC0tuC1jeC0r+C0quC1jeC0quC1huC0n+C1geC0gi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0syDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LSo4LS/4LSZ4LWN4LSZ4LSz4LWB4LSf4LWGIOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtKrgtL7gtLHgtY3gtLHgtYfgtbogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LSk4LS14LSjIOC0pOC1huC0seC1jeC0seC0vuC0r+C0vyDgtLXgtLDgtJrgtY3gtJrgtYEuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC0tuC1jeC0sOC0ruC0meC1jeC0meC1viDgtJXgtYLgtJ/gtL8g4LS14LS/4LSc4LSv4LS/4LSa4LWN4LSa4LS/4LSy4LWN4LSy4LWG4LSZ4LWN4LSV4LS/4LW9LCDgtJLgtLDgtYEg4LSH4LSu4LWG4LSv4LS/4LW9IOC0heC0leC1jeC0leC1l+C0o+C1jeC0n+C1jSDgtIngtKrgtK/gtYvgtJfgtL/gtJrgtY3gtJrgtY0g4LSr4LWL4LW6IOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LSo4LS/4LSZ4LWN4LSZ4LSz4LWL4LSf4LWNIOC0huC0teC0tuC1jeC0r+C0quC1jeC0quC1huC0n+C1geC0gi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC0uOC1huC0leC1jeC0leC1u+C0oeC0v+C0qOC1geC0s+C1jeC0syDgtLXgtYDgtKPgtY3gtJ/gtYHgtIIg4LS24LWN4LSw4LSu4LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWNIOC0quC0vuC0seC1jeC0seC1h+C1uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LS14LSw4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC0tuC1jeC0sOC0ruC0meC1jeC0meC1viDgtJXgtYLgtJ/gtL8g4LS14LS/4LSc4LSv4LS/4LSa4LWN4LSa4LS/4LSy4LWN4LSy4LWG4LSZ4LWN4LSV4LS/4LW9LCDgtJLgtLDgtYEg4LSH4LSu4LWG4LSv4LS/4LW9IOC0heC0leC1jeC0leC1l+C0o+C1jeC0n+C1jSDgtIngtKrgtK/gtYvgtJfgtL/gtJrgtY3gtJrgtY0g4LSf4LS+4LSs4LWN4oCM4LSy4LWG4LSx4LWN4LSx4LWNIOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LSo4LS/4LSZ4LWN4LSZ4LSz4LWL4LSf4LWNIOC0huC0teC0tuC1jeC0r+C0quC1jeC0quC1huC0n+C1geC0gi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4LS44LWG4LSV4LWN4LSV4LW74LSh4LS/4LSo4LWB4LSz4LWN4LSzIOC0teC1gOC0o+C1jeC0n+C1geC0giDgtLbgtY3gtLDgtK7gtL/gtJXgtY3gtJXgtYHgtJUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWNIOC0quC0vuC0seC1jeC0seC1h+C1uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC0pOC0teC0oyDgtKTgtYbgtLHgtY3gtLHgtL7gtK/gtL8g4LS14LSw4LSa4LWN4LSa4LWBLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC0tuC1jeC0sOC0ruC0meC1jeC0meC1viDgtJXgtYLgtJ/gtL8g4LS14LS/4LSc4LSv4LS/4LSa4LWN4LSa4LS/4LSy4LWN4LSy4LWG4LSZ4LWN4LSV4LS/4LW9LCDgtJLgtLDgtYEg4LSH4LSu4LWG4LSv4LS/4LW9IOC0heC0leC1jeC0leC1l+C0o+C1jeC0n+C1jSDgtIngtKrgtK/gtYvgtJfgtL/gtJrgtY3gtJrgtY0g4LSr4LWL4LW6IOC0heC1uuC0suC1i+C0leC1jeC0leC1jSDgtJrgtYbgtK/gtY3gtK/gtL7gtbsg4LSo4LS/4LSZ4LWN4LSZ4LSz4LWL4LSf4LWNIOC0huC0teC0tuC1jeC0r+C0quC1jeC0quC1huC0n+C1geC0gi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4LS44LWG4LSV4LWN4LSV4LW74LSh4LS/4LSo4LWB4LSz4LWN4LSzIOC0teC1gOC0o+C1jeC0n+C1geC0giDgtLbgtY3gtLDgtK7gtL/gtJXgtY3gtJXgtYHgtJUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLgtLjgtL/gtIIg4LSq4LS/4LW7IOC0leC1i+C0oeC1jSDgtKTgtYbgtLHgtY3gtLHgtL7gtKPgtY0sIOC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtIngtKrgtJXgtLDgtKPgtIIg4LSF4LW64LSy4LWL4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LS+4LW7IOC0h+C0quC1jeC0quC1i+C1viDgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSV4LS+4LSw4LS/4LSv4LSx4LWB4LSu4LS+4LSv4LS/IOC0rOC0qOC1jeC0p+C0quC1jeC0quC1huC0n+C0o+C0gi4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U0lNIFBJTiDgtJXgtYvgtKHgtY0g4LSk4LWG4LSx4LWN4LSx4LS+4LSj4LWNLCDgtKjgtL/gtJngtY3gtJngtb7gtJXgtY3gtJXgtY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LS24LWN4LSw4LSu4LSZ4LWN4LSZ4LW+IOC0leC1guC0n+C0vyDgtLbgtYfgtLfgtL/gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbAppbmRleCA0OTUwNzZhLi4xNzQ5YTcxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQl9Op0LIgUFVLINC60L7QtNGL0LMg0LTQsNGF0LjQvSDQvtGA0YPRg9C70L3QsCDRg9GDLiDQlNCw0LLRgtCw0L0g0L7RgNC+0LvQtNCy0L7QuyBTSU0g0L3RjCDQsdKv0YDQvNOp0YHTqdC9INC40LTRjdCy0YXQs9Kv0Lkg0LHQvtC70LPQvtC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDQutC+0LTRg9GD0LQg0YLQsNCw0YDQsNGF0LPSr9C5INCx0LDQudC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQpdGN0Y0g0L7RgNGD0YPQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9C+INGF0Y3RgiDQvtC70L7QvSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0KLQsCBQSU4g0LrQvtC00L7QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINCx0LjRh9C40LIuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCi0LAgUElOINC60L7QtNC+0L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQsdC40YfQuNCyLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQotCwINGC0LDQudC70LDRhSDRhdGN0Y3QsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC30YPRgNC70LDQsC4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQotCwINGC0LDQsdC70LXRgtGL0L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0L7RgNGD0YPQu9GB0LDQvSDQsdCw0LnQvdCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi3RgSDQuNC70q/SryDRg9C00LDQsCDQsdGD0YDRg9GDINGF0LjQudCy0Y3QuyDRjdC90Y0g0YLQsNCx0LvQtdGC0YvQvSDRgtC+0YXQuNGA0LPQvtC+INC00LDRhdC40L0g0YjQuNC90Y3RjdGAINGF0LjQudCz0LTRjdGFINCx06nQs9Op06nQtCDRg9C70LzQsNCw0YAg0YLQsNCx0LvQtdGC0YvQvSDQtNGN0Y3RgNGFINCx0q/RhSDQvNGN0LTRjdGN0LvRjdC7INGD0YHRgtCw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i0KLQsCDRg9GC0LDRgdC90Ysg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0L7RgNGD0YPQu9GB0LDQvSDQsdCw0LnQvdCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi3RgSDQuNC70q/SryDRg9C00LDQsCDQsdGD0YDRg9GDINGF0LjQudCy0Y3QuyDRjdC90Y0g0YPRgtCw0YHQvdGLINGC0L7RhdC40YDQs9C+0L4g0LTQsNGF0LjQvSDRiNC40L3RjdGN0YAg0YXQuNC50LPQtNGN0YUg0LHTqdCz06nTqdC0INGD0LvQvNCw0LDRgCDRg9GC0YHQsNC9INC00Y3RjdGA0YUg0LHSr9GFINC80Y3QtNGN0Y3Qu9GN0Lsg0YPRgdGC0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i0KLQsCBQSU4g0LrQvtC00L7QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0LHQuNGH0LjQsi4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQotCwIFBJTiDQutC+0LTQvtC+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQsdC40YfQuNCyLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCi0LAg0YLQsNC50LvQsNGFINGF0Y3RjdCzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQt9GD0YDQu9Cw0LAuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQotCwINGC0LDQsdC70LXRgtGL0L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0YPRg9C70YHQsNC9INCx0LDQudC90LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t0YEg0LjQu9Kv0q8g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnQstGN0Lsg0Y3QvdGNINGC0LDQsdC70LXRgtGL0L0g0YLQvtGF0LjRgNCz0L7QviDQtNCw0YXQuNC9INGI0LjQvdGN0Y3RgCDRhdC40LnQs9C00Y3RhSDQsdOp0LPTqdOp0LQg0YPQu9C80LDQsNGAINGC0LDQsdC70LXRgtGL0L0g0LTRjdGN0YDRhSDQsdKv0YUg0LzRjdC00Y3RjdC70Y3QuyDRg9GB0YLQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItCi0LAg0YPRgtCw0YHQvdGLINGC0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQvtGA0L7Qu9C00LvQvtCz0YvQsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0L7RgNGD0YPQu9GB0LDQvSDQsdCw0LnQvdCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LdGBINC40LvSr9KvINGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50LLRjdC7INGN0L3RjSDRg9GC0LDRgdC90Ysg0YLQvtGF0LjRgNCz0L7QviDQtNCw0YXQuNC9INGI0LjQvdGN0Y3RgCDRhdC40LnQs9C00Y3RhSDQsdOp0LPTqdOp0LQg0YPQu9C80LDQsNGAINGD0YLRgdCw0L0g0LTRjdGN0YDRhSDQsdKv0YUg0LzRjdC00Y3RjdC70Y3QuyDRg9GB0YLQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+ItCi0LAg0YLQsNCx0LvQtdGC0YvQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9GL0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+ICDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDRg9GD0LvRgdCw0L0g0LHQsNC50L3QsC4g0K3QvdGNINGC0LDQsdC70LXRgtGL0L0g0YLQvtGF0LjRgNCz0L7QviDQtNCw0YXQuNC9INGI0LjQvdGN0Y3RgCDRhdC40LnQs9C00Y3RhSDQsdOp0LPTqdOp0LQg0YPQu9C80LDQsNGAINGC0LDQsdC70LXRgtCw0L0g0LTRjdGN0YDRhSDQsdKv0YUg0LzRjdC00Y3RjdC70Y3QuyDRg9GB0YLQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i0KLQsCDRg9GC0LDRgdC90Ysg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDRg9GD0LvRgdCw0L0g0LHQsNC50L3QsC4g0K3QvdGNINGD0YLQsNGB0L3RiyDRgtC+0YXQuNGA0LPQvtC+INC00LDRhdC40L0g0YjQuNC90Y3RjdGAINGF0LjQudCz0LTRjdGFINCx06nQs9Op06nQtCDRg9C70LzQsNCw0YAg0YPRgtGB0LDQvSDQtNGN0Y3RgNGFINCx0q/RhSDQvNGN0LTRjdGN0LvRjdC7INGD0YHRgtCw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQotCwINGC0LDQsdC70LXRgtGL0L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50YHRjdC9INCx0LDQudC90LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LdGBINC40LvSr9KvINGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50LLRjdC7INGN0L3RjSDRhdGN0YDRjdCz0LvRjdCz0Ycg0YPRgdGC0LPQsNCz0LTQsNGFINCx06nQs9Op06nQtCDRjdC90Y0g0L3RjCDRg9C70LzQsNCw0YAg0YXRjdGA0Y3Qs9C70Y3Qs9GH0LjQudC9INCx0q/RhSDQvNGN0LTRjdGN0LvQu9C40LnQsyDRg9GB0YLQs9Cw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i0KLQsCDRg9GC0LDRgdC90Ysg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50YHRjdC9INCx0LDQudC90LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LdGBINC40LvSr9KvINGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50LLRjdC7INGN0L3RjSDRhdGN0YDRjdCz0LvRjdCz0Ycg0YPRgdGC0LPQsNCz0LTQsNGFINCx06nQs9Op06nQtCDRjdC90Y0g0L3RjCDRg9C70LzQsNCw0YAg0YXRjdGA0Y3Qs9C70Y3Qs9GH0LjQudC9INCx0q/RhSDQvNGN0LTRjdGN0LvQu9C40LnQsyDRg9GB0YLQs9Cw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQotCwINGC0LDQsdC70LXRgtGL0L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnRgdGN0L0g0LHQsNC50L3QsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi3RgSDQuNC70q/SryDRg9C00LDQsCDQsdGD0YDRg9GDINGF0LjQudCy0Y3QuyDRjdC90Y0g0YXRjdGA0Y3Qs9C70Y3Qs9GHINGD0YHRgtCz0LDQs9C00LDRhSDQsdOp0LPTqdOp0LQg0Y3QvdGNINC90Ywg0YPQu9C80LDQsNGAINGF0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQsdKv0YUg0LzRjdC00Y3RjdC70LvQuNC50LMg0YPRgdGC0LPQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCi0LAg0YPRgtCw0YHQvdGLINGC0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQvtGA0L7Qu9C00LvQvtCz0YvQsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50YHRjdC9INCx0LDQudC90LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4t0YEg0LjQu9Kv0q8g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnQstGN0Lsg0Y3QvdGNINGF0Y3RgNGN0LPQu9GN0LPRhyDRg9GB0YLQs9Cw0LPQtNCw0YUg0LHTqdCz06nTqdC0INGN0L3RjSDQvdGMINGD0LvQvNCw0LDRgCDRhdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0LHSr9GFINC80Y3QtNGN0Y3Qu9C70LjQudCzINGD0YHRgtCz0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i0KLQsCDRgtCw0LHQu9C10YLRi9C9INGC0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQvtGA0L7Qu9C00LvQvtCz0YvQsyAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0L7RgNGD0YPQu9GB0LDQvSDQsdCw0LnQvdCwLiDQrdC90Y0g0YXRjdGA0Y3Qs9C70Y3Qs9GHINGD0YHRgtCz0LDQs9C00LDQtiwg0YPQu9C80LDQsNGAINGF0Y3RgNGN0LPQu9GN0LPRh9C40LnQvSDQsdKv0YUg0LzRjdC00Y3RjdC70Y3QuyDRg9GB0YLQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i0KLQsCDRg9GC0LDRgdC90Ysg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDRg9GD0LvRgdCw0L0g0LHQsNC50L3QsC4g0K3QvdGNINGF0Y3RgNGN0LPQu9GN0LPRhyDRg9GB0YLQs9Cw0LPQtNCw0LYsINGD0LvQvNCw0LDRgCDRhdGN0YDRjdCz0LvRjdCz0YfQuNC50L0g0LHSr9GFINC80Y3QtNGN0Y3Qu9GN0Lsg0YPRgdGC0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCi0LAg0YLQsNCx0LvQtdGC0YvQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9GL0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnRgdGN0L0g0LHQsNC50L3QsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4t0YEg0LjQu9Kv0q8g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnQstGN0Lsg0LDQttC70YvQvSDQv9GA0L7RhNCw0LnQuyDRg9GB0YLQs9Cw0LPQtNCw0YUg0LHTqdCz06nTqdC0INGN0L3RjSDQvdGMINGD0LvQvNCw0LDRgCDQv9GA0L7RhNCw0LnQu9GL0L0g0LHSr9GFINC80Y3QtNGN0Y3Qu9C70LjQudCzINGD0YHRgtCz0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQotCwINGD0YLQsNGB0L3RiyDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9GL0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnRgdGN0L0g0LHQsNC50L3QsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4t0YEg0LjQu9Kv0q8g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnQstGN0Lsg0LDQttC70YvQvSDQv9GA0L7RhNCw0LnQuyDRg9GB0YLQs9Cw0LPQtNCw0YUg0LHTqdCz06nTqdC0INGN0L3RjSDQvdGMINGD0LvQvNCw0LDRgCDQv9GA0L7RhNCw0LnQu9GL0L0g0LHSr9GFINC80Y3QtNGN0Y3Qu9C70LjQudCzINGD0YHRgtCz0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCi0LAg0YLQsNCx0LvQtdGC0YvQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YUg0L7RgNC+0LvQtNC70L7Qs9GL0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINGF0LjQudGB0Y3QvSDQsdCw0LnQvdCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LdGBINC40LvSr9KvINGD0LTQsNCwINCx0YPRgNGD0YMg0YXQuNC50LLRjdC7INCw0LbQu9GL0L0g0L/RgNC+0YTQsNC50Lsg0YPRgdGC0LPQsNCz0LTQsNGFINCx06nQs9Op06nQtCDRjdC90Y0g0L3RjCDRg9C70LzQsNCw0YAg0L/RgNC+0YTQsNC50LvRi9C9INCx0q/RhSDQvNGN0LTRjdGN0LvQu9C40LnQsyDRg9GB0YLQs9Cw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i0KLQsCDRg9GC0LDRgdC90Ysg0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDRhdC40LnRgdGN0L0g0LHQsNC50L3QsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi3RgSDQuNC70q/SryDRg9C00LDQsCDQsdGD0YDRg9GDINGF0LjQudCy0Y3QuyDQsNC20LvRi9C9INC/0YDQvtGE0LDQudC7INGD0YHRgtCz0LDQs9C00LDRhSDQsdOp0LPTqdOp0LQg0Y3QvdGNINC90Ywg0YPQu9C80LDQsNGAINC/0YDQvtGE0LDQudC70YvQvSDQsdKv0YUg0LzRjdC00Y3RjdC70LvQuNC50LMg0YPRgdGC0LPQsNGFINCx0L7Qu9C90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLQotCwINGC0LDQsdC70LXRgtGL0L0g0YLSr9Cz0LbRjdGN0LMg0YLQsNC50LvQsNGFINC+0YDQvtC70LTQu9C+0LPRi9CzIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC+0YDRg9GD0LvRgdCw0L0g0LHQsNC50L3QsC4g0JDQttC70YvQvSDQv9GA0L7RhNCw0LnQuyDRg9GB0YLQs9Cw0LPQtNCw0LYsINGD0LvQvNCw0LDRgCDQv9GA0L7RhNCw0LnQu9GL0L0g0LHSr9GFINC80Y3QtNGN0Y3Qu9GN0Lsg0YPRgdGC0LDRhSDQsdC+0LvQvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+ItCi0LAg0YPRgtCw0YHQvdGLINGC0q/Qs9C20Y3RjdCzINGC0LDQudC70LDRhSDQvtGA0L7Qu9C00LvQvtCz0YvQsyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQvtGA0YPRg9C70YHQsNC9INCx0LDQudC90LAuINCQ0LbQu9GL0L0g0L/RgNC+0YTQsNC50Lsg0YPRgdGC0LPQsNCz0LTQsNC2LCDRg9C70LzQsNCw0YAg0L/RgNC+0YTQsNC50LvRi9C9INCx0q/RhSDQvNGN0LTRjdGN0LvRjdC7INGD0YHRgtCw0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0KLQsCDRgtCw0LnQu9Cw0YUg0YXRjdGN0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0YPQtNCw0LAg0LHRg9GA0YPRgyDQt9GD0YDQu9Cw0LAuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINC00LDRhdC40L0g0LHRg9GA0YPRgyDQvtGA0YPRg9C70LHQsNC7LCDRgtCwINGC0LDQsdC70LXRgtCw0LAg0YLQsNC50LvQsNGF0YvQvSDRgtGD0LvQtCDQuNC80Y3QudC7INCw0LrQsNGD0L3RgiDRiNCw0LDRgNC00LvQsNCz0LDRgtCw0Lkg0LHQvtC70L3Qvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNGL0L0g0LTQsNGA0LDQsCDQtNCw0YXQuNC9INC+0YDQvtC70LTQvtC90L4g0YPRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+ItCi0LAg0YLQsNC50LvQsNGFINGF0Y3RjdCzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0LfRg9GA0LvQsNCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQtNCw0YXQuNC9INCx0YPRgNGD0YMg0L7RgNGD0YPQu9Cx0LDQuywg0YLQsCDRg9GC0YHQsNCwINGC0LDQudC70LDRhdGL0L0g0YLRg9C70LQg0LjQvNGN0LnQuyDQsNC60LDRg9C90YLQsNCwINCw0YjQuNCz0LvQsNGFINGI0LDQsNGA0LTQu9Cw0LPQsNGC0LDQuSDQsdC+0LvQvdC+LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQotCwINGC0LDQudC70LDRhSDRhdGN0Y3QsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INGD0LTQsNCwINCx0YPRgNGD0YMg0LfRg9GA0LvQsNCwLiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INGD0LTQsNCwINC00LDRhdC40L0g0LHRg9GA0YPRgyDQvtGA0YPRg9C70LHQsNC7LCDRgtCwINGC0LDQsdC70LXRgtCw0LAg0YLQsNC50LvQsNGF0YvQvSDRgtGD0LvQtCDQuNC80Y3QudC7INCw0LrQsNGD0L3RgiDRiNCw0LDRgNC00LvQsNCz0LDRgtCw0Lkg0LHQvtC70L3Qvi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINC00LDRhdC40L0g0L7RgNC+0LvQtNC+0L3QviDRg9GDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0KLQsCDRgtCw0LnQu9Cw0YUg0YXRjdGN0LMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRg9C00LDQsCDQsdGD0YDRg9GDINC30YPRgNC70LDQsC4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRg9C00LDQsCDQtNCw0YXQuNC9INCx0YPRgNGD0YMg0L7RgNGD0YPQu9Cx0LDQuywg0YLQsCDRg9GC0YHQsNCwINGC0LDQudC70LDRhdGL0L0g0YLRg9C70LQg0LjQvNGN0LnQuyDQsNC60LDRg9C90YLQsNCwINCw0YjQuNCz0LvQsNGFINGI0LDQsNGA0LTQu9Cw0LPQsNGC0LDQuSDQsdC+0LvQvdC+LlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTRi9C9INC00LDRgNCw0LAg0LTQsNGF0LjQvSDQvtGA0L7Qu9C00L7QvdC+INGD0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLQodCY0Jwg0J/QmNCdINC60L7QtCDQsdGD0YDRg9GDLCDRgtCwINGC06nRhdOp06nRgNOp0LzQttC40LnQvSDRgtKv0LPQttGN0Y3QsyDRgtCw0LnQu9Cw0YXRi9C9INGC0YPQu9C0INC+0L/QtdGA0LDRgtC+0YAg0LrQvtC80L/QsNC90LjRgtCw0Lkg0YXQvtC70LHQvtC+INCx0LDRgNC40YUg0YjQsNCw0YDQtNC70LDQs9Cw0YLQsNC5LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7QodCY0Jwt0L3RiyDQn9CY0J0g0LrQvtC0INCx0YPRgNGD0YMg0LHQsNC50L3QsC4g0KLQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRg9C00LDQsCDQvtGA0L7Qu9C00LvQvtCz0L4g0YXQuNC50YUg0LHQvtC70L7QvNC20YLQvtC5INCx0LDQudC90LAuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCAzZDllOTAxLi45NDUyZmU3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtMzEsNyArMzEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIG1zZ2lkPSIyNDIyMjI1NTkxMDA2MTM0OTM2Ij4i4KSF4KSv4KWL4KSX4KWN4KSvIOCkquCkv+CkqCDgpJXgpYvgpKEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfY2hhcmdlZCIgbXNnaWQ9IjMyNzIyMjM5MDYwNzM0OTI0NTQiPiLgpJrgpL7gpLDgpY3gpJwg4KSd4KS+4KSy4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbiIgbXNnaWQ9IjkwODc0OTc0MzU1NTMyNTI4NjMiPiLgpJrgpL7gpLDgpY3gpJwg4KS54KWL4KSkIOCkhuCkueClhyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX3BsdWdnZWRfaW5fY2hhcmdpbmdfZmFzdCIgbXNnaWQ9IjY2NzExNjI3MzAxNjczMDU0NzkiPiLgpKbgpYPgpKTgpKrgpKPgpYcg4KSa4KS+4KSw4KWN4KScIOCkueCli+CkpCDgpIbgpLngpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9wbHVnZ2VkX2luX2NoYXJnaW5nX2Zhc3QiIG1zZ2lkPSI2NjcxMTYyNzMwMTY3MzA1NDc5Ij4i4KSm4KWN4KSw4KWB4KSk4KSq4KSj4KWHIOCkmuCkvuCksOCljeCknCDgpLngpYvgpKQg4KSG4KS54KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfcGx1Z2dlZF9pbl9jaGFyZ2luZ19zbG93bHkiIG1zZ2lkPSIxOTY0NzE0NjYxMDcxMTYzMjI5Ij4i4KSn4KWA4KSu4KWH4KSq4KSj4KWHIOCkmuCkvuCksOCljeCknCDgpLngpYvgpKQg4KSG4KS54KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfbG93X2JhdHRlcnkiIG1zZ2lkPSI4MTQzODA4MDE4NzE5MTczODU5Ij4i4KSG4KSq4KSy4KWHIOCkmuCkvuCksOCljeCknOCksCDgpJXgpKjgpYfgpJXgpY3gpJ8g4KSV4KSw4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luc3RydWN0aW9uc193aGVuX3BhdHRlcm5fZGlzYWJsZWQiIG1zZ2lkPSIxMzMyMjg4MjY4NjAwMzI5ODQxIj4i4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkuOCkvuCkoOClgCDgpK7gpYfgpKjgpYIg4KSm4KS+4KSs4KS+LiI8L3N0cmluZz4KQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4KSv4KWL4KSX4KWN4KSvIFBVSyDgpJXgpYvgpKEg4KSq4KWB4KSo4KWN4KS54KS+LeCkquCljeCksOCkteCkv+Ckt+CljeCknyDgpJXgpLDgpL4uIOCkquCksOCkpCDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSV4KSw4KSj4KWHIOCkuOCkv+CkriDgpJXgpL7gpK/gpK7gpJrgpYcg4KSF4KSV4KWN4KS34KSuIOCkleCksOClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4KSq4KS/4KSoIOCkleCli+CkoSDgpJzgpYHgpLPgpKQg4KSo4KS+4KS54KWA4KSkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4KSs4KSw4KWH4KSaIOCkqOCkruClgeCkqOCkviDgpKrgpY3gpLDgpK/gpKTgpY3gpKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkhuCkquCkoyDgpIbgpKrgpLLgpL4g4KSq4KS/4KSoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpIXgpK/gpYvgpJfgpY3gpK/gpLDgpL/gpKTgpYDgpKjgpYcg4KSf4KS+4KSH4KSqIOCkleClh+CksuCkviDgpIbgpLngpYcuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KSm4KS+4KSC4KSu4KSn4KWN4KSv4KWHIOCkquClgeCkqOCljeCkueCkviDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSV4KSw4KS+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgpIbgpKrgpKMg4KSG4KSq4KSy4KS+IOCkuOCkguCkleClh+CkpOCktuCkrOCljeCkpiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSF4KSv4KWL4KSX4KWN4KSv4KSw4KS/4KSk4KWA4KSo4KWHIOCkn+CkvuCkh+CkqiDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkpuCkvuCkguCkruCkp+CljeCkr+ClhyDgpKrgpYHgpKjgpY3gpLngpL4g4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleCksOCkvi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4KSG4KSq4KSjIOCkhuCkquCksuCkviDgpIXgpKjgpLLgpYngpJUg4KSo4KSu4KWB4KSo4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpIXgpK/gpYvgpJfgpY3gpK/gpLDgpL/gpKTgpYDgpKjgpYcg4KSV4KS+4KSi4KSy4KS+IOCkhuCkueClhy4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKbgpL7gpILgpK7gpKfgpY3gpK/gpYcg4KSq4KWB4KSo4KWN4KS54KS+IOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpLDgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4KSG4KSq4KSjIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkn+ClheCkrOCljeCksuClh+CknyDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSF4KSv4KS24KS44KWN4KS14KWAIOCkquCljeCksOCkr+CkpOCljeCkqOCkvuCkguCkqOCkguCkpOCksCwg4KS54KS+IOCkn+ClheCkrOCljeCksuClh+CknyDgpLDgpYDgpLjgpYfgpJ8g4KSV4KWH4KSy4KS+IOCknOCkvuCkiOCksiwg4KSc4KWHIOCkpOCljeCkr+CkvuCkmuCkviDgpLjgpLDgpY3gpLUg4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4KSG4KSq4KSjIOCkq+Cli+CkqCDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSF4KSv4KS24KS44KWN4KS14KWAIOCkquCljeCksOCkr+CkpOCljeCkqOCkvuCkguCkqOCkguCkpOCksCwg4KS54KS+IOCkq+Cli+CkqCDgpLDgpYDgpLjgpYfgpJ8g4KSV4KWH4KSy4KS+IOCknOCkvuCkiOCksiwg4KSc4KWHIOCkpOCljeCkr+CkvuCkmuCkviDgpLjgpLDgpY3gpLUg4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCkhuCkquCkoyDgpIbgpKrgpLLgpL4g4KSq4KS/4KSoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkheCkr+Cli+Ckl+CljeCkr+CksOCkv+CkpOClgOCkqOClhyDgpJ/gpL7gpIfgpKog4KSV4KWH4KSy4KS+IOCkhuCkueClhy4gXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkpuCkvuCkguCkruCkp+CljeCkr+ClhyDgpKrgpYHgpKjgpY3gpLngpL4g4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleCksOCkvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4KSG4KSq4KSjIOCkhuCkquCksuCkviDgpLjgpILgpJXgpYfgpKTgpLbgpKzgpY3gpKYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSF4KSv4KWL4KSX4KWN4KSv4KSw4KS/4KSk4KWA4KSo4KWHIOCkn+CkvuCkh+CkqiDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KSm4KS+4KSC4KSu4KSn4KWN4KSv4KWHIOCkquClgeCkqOCljeCkueCkviDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSV4KSw4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgpIbgpKrgpKMg4KSG4KSq4KSy4KS+IOCkheCkqOCksuClieCklSDgpKjgpK7gpYHgpKjgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSF4KSv4KWL4KSX4KWN4KSv4KSw4KS/4KSk4KWA4KSo4KWHIOCkleCkvuCkouCksuCkviDgpIbgpLngpYcuIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKbgpL7gpILgpK7gpKfgpY3gpK/gpYcg4KSq4KWB4KSo4KWN4KS54KS+IOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpLDgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4KSG4KSq4KSjIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSf4KWF4KSs4KWN4KSy4KWH4KSfIOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkueCkviDgpJ/gpYXgpKzgpY3gpLLgpYfgpJ8g4KSw4KWA4KS44KWH4KSfIOCkleClh+CksuCkviDgpJzgpL7gpIjgpLIsIOCknOClhyDgpKTgpY3gpK/gpL7gpJrgpL4g4KS44KSw4KWN4KS1IOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCkhuCkquCkoyDgpKvgpYvgpKgg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpIXgpK/gpLbgpLjgpY3gpLXgpYAg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS+4KSC4KSo4KSC4KSk4KSwLCDgpLngpL4g4KSr4KWL4KSoIOCksOClgOCkuOClh+CknyDgpJXgpYfgpLLgpL4g4KSc4KS+4KSI4KSyLCDgpJzgpYcg4KSk4KWN4KSv4KS+4KSa4KS+IOCkuOCksOCljeCktSDgpKHgpYfgpJ/gpL4g4KS54KSf4KS14KWH4KSyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLgpIbgpKrgpKMg4KSf4KWF4KSs4KWN4KSy4KWH4KSfIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpLngpL4g4KSf4KWF4KSs4KWN4KSy4KWH4KSfIOCksOClgOCkuOClh+CknyDgpJXgpYfgpLLgpL4g4KSc4KS+4KSI4KSyLCDgpJzgpYsg4KSk4KWN4KSv4KS+4KSa4KS+IOCkuOCksOCljeCktSDgpKHgpYfgpJ/gpL4g4KS54KSf4KS14KWH4KSyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuCkhuCkquCkoyDgpKvgpYvgpKgg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkueCkviDgpKvgpYvgpKgg4KSw4KWA4KS44KWH4KSfIOCkleClh+CksuCkviDgpJzgpL7gpIjgpLIsIOCknOClhyDgpKTgpY3gpK/gpL7gpJrgpL4g4KS44KSw4KWN4KS1IOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4KSG4KSq4KSjIOCkn+ClheCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSF4KSv4KS24KS44KWN4KS14KWAIOCkquCljeCksOCkr+CkpOCljeCkqOCkvuCkguCkqOCkguCkpOCksCwg4KS54KS+IOCkteCkvuCkquCksOCkleCksOCljeCkpOCkviDgpJXgpL7gpKLgpLLgpL4g4KSc4KS+4KSI4KSyLCDgpJzgpYcg4KS44KSw4KWN4KS1IOCkteCkvuCkquCksOCkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KS54KSf4KS14KWH4KSyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgpIbgpKrgpKMg4KSr4KWL4KSoIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpIXgpK/gpLbgpLjgpY3gpLXgpYAg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS+4KSC4KSo4KSC4KSk4KSwLCDgpLngpL4g4KS14KS+4KSq4KSw4KSV4KSw4KWN4KSk4KS+IOCkleCkvuCkouCksuCkviDgpJzgpL7gpIjgpLIsIOCknOClhyDgpLjgpLDgpY3gpLUg4KS14KS+4KSq4KSw4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4KSG4KSq4KSjIOCkn+ClheCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkueCkviDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSV4KS+4KSi4KSy4KS+IOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4KSG4KSq4KSjIOCkq+Cli+CkqCDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkueCkviDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSV4KS+4KSi4KSy4KS+IOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuCkhuCkquCkoyDgpJ/gpYXgpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkueCkviDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSV4KS+4KSi4KSy4KS+IOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpLXgpL7gpKrgpLDgpJXgpLDgpY3gpKTgpL4g4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLgpIbgpKrgpKMg4KSr4KWL4KSoIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpLngpL4g4KS14KS+4KSq4KSw4KSV4KSw4KWN4KSk4KS+IOCkleCkvuCkouCksuCkviDgpJzgpL7gpIjgpLIsIOCknOClhyDgpLjgpLDgpY3gpLUg4KS14KS+4KSq4KSw4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4KSG4KSq4KSjIOCkn+ClheCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSF4KSv4KS24KS44KWN4KS14KWAIOCkquCljeCksOCkr+CkpOCljeCkqOCkvuCkguCkqOCkguCkpOCksCwg4KSV4KS+4KSw4KWN4KSvIOCkquCljeCksOCli+Ckq+CkvuCkiOCksiDgpJXgpL7gpKLgpLLgpYcg4KSc4KS+4KSI4KSyLCDgpJzgpYcg4KS44KSw4KWN4KS1IOCkquCljeCksOCli+Ckq+CkvuCkiOCksiDgpKHgpYfgpJ/gpL4g4KS54KSf4KS14KWH4KSyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgpIbgpKrgpKMg4KSr4KWL4KSoIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpIXgpK/gpLbgpLjgpY3gpLXgpYAg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS+4KSC4KSo4KSC4KSk4KSwLCDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS+4KSI4KSyIOCkleCkvuCkouCksuClhyDgpJzgpL7gpIjgpLIsIOCknOClhyDgpLjgpLDgpY3gpLUg4KSq4KWN4KSw4KWL4KSr4KS+4KSI4KSyIOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4KSG4KSq4KSjIOCkn+ClheCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkleCkvuCksOCljeCkryDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSV4KS+4KSi4KSy4KWHIOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4KSG4KSq4KSjIOCkq+Cli+CkqCDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KSa4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkleCkvuCksOCljeCkryDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSV4KS+4KSi4KSy4KWHIOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuCkhuCkquCkoyDgpJ/gpYXgpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkmuClgeCkleClgOCkmuCljeCkr+CkviDgpKrgpKbgpY3gpKfgpKTgpYDgpKjgpYcg4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleClh+CksuCkviDgpIbgpLngpYcuIOCkleCkvuCksOCljeCkryDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSV4KS+4KSi4KSy4KWHIOCknOCkvuCkiOCksiwg4KSc4KWHIOCkuOCksOCljeCktSDgpKrgpY3gpLDgpYvgpKvgpL7gpIjgpLIg4KSh4KWH4KSf4KS+IOCkueCkn+CkteClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgpIbgpKrgpKMg4KSr4KWL4KSoIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpJrgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkteClh+Cks+CkviDgpJrgpYHgpJXgpYDgpJrgpY3gpK/gpL4g4KSq4KSm4KWN4KSn4KSk4KWA4KSo4KWHIOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpYfgpLLgpL4g4KSG4KS54KWHLiDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS+4KSI4KSyIOCkleCkvuCkouCksuClhyDgpJzgpL7gpIjgpLIsIOCknOClhyDgpLjgpLDgpY3gpLUg4KSq4KWN4KSw4KWL4KSr4KS+4KSI4KSyIOCkoeClh+Ckn+CkviDgpLngpJ/gpLXgpYfgpLIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCkhuCkquCkoyDgpIbgpKrgpLLgpL4g4KSF4KSo4KSy4KWJ4KSVIOCkqOCkruClgeCkqOCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSF4KSv4KWL4KSX4KWN4KSv4KSq4KSj4KWHIOCkleCkvuCkouCksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpIXgpK/gpLbgpLjgpY3gpLXgpYAg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS+4KSC4KSo4KSC4KSk4KSwLCDgpIbgpKrgpLLgpY3gpK/gpL7gpLLgpL4g4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpLXgpL7gpKrgpLDgpYLgpKgg4KSG4KSq4KSy4KS+IOCkn+ClheCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KS4IOCkuOCkvuCkguCkl+Ckv+CkpOCksuClhyDgpJzgpL7gpIjgpLIuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpILgpKbgpL7gpILgpK7gpKfgpY3gpK/gpYcg4KSq4KWB4KSo4KWN4KS54KS+IOCkquCljeCksOCkr+CkpOCljeCkqCDgpJXgpLDgpL4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgpIbgpKrgpKMg4KSG4KSq4KSy4KS+IOCkheCkqOCksuClieCklSDgpKjgpK7gpYHgpKjgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkheCkr+Cli+Ckl+CljeCkr+CkquCko+ClhyDgpJXgpL7gpKLgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSF4KSv4KS24KS44KWN4KS14KWAIOCkquCljeCksOCkr+CkpOCljeCkqOCkvuCkguCkqOCkguCkpOCksCwg4KSG4KSq4KSy4KWN4KSv4KS+4KSy4KS+IOCkiOCkruClh+CksiDgpJbgpL7gpKTgpYcg4KS14KS+4KSq4KSw4KWC4KSoIOCkhuCkquCksuCkviDgpKvgpYvgpKgg4KSF4KSo4KSy4KWJ4KSVIOCkleCksOCko+CljeCkr+CkvuCkuCDgpLjgpL7gpILgpJfgpL/gpKTgpLLgpYcg4KSc4KS+4KSI4KSyLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KSm4KS+4KSC4KSu4KSn4KWN4KSv4KWHIOCkquClgeCkqOCljeCkueCkviDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSV4KSw4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpIbgpKrgpKMg4KSG4KSq4KSy4KS+IOCkheCkqOCksuClieCklSDgpKjgpK7gpYHgpKjgpL4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpLXgpYfgpLPgpL4g4KSF4KSv4KWL4KSX4KWN4KSv4KSq4KSj4KWHIOCkleCkvuCkouCksuCkviDgpIbgpLngpYcuIOCkhuCko+CkluClgCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkheCkr+CktuCkuOCljeCkteClgCDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpL7gpILgpKjgpILgpKTgpLAsIOCkhuCkquCksuCljeCkr+CkvuCksuCkviDgpIjgpK7gpYfgpLIg4KSW4KS+4KSk4KWHIOCkteCkvuCkquCksOClguCkqCDgpIbgpKrgpLLgpL4g4KSf4KWF4KSs4KWN4KSy4KWH4KSfIOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3gpK/gpL7gpLgg4KS44KS+4KSC4KSX4KS/4KSk4KSy4KWHIOCknOCkvuCkiOCksi5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KSC4KSm4KS+4KSC4KSu4KSn4KWN4KSv4KWHIOCkquClgeCkqOCljeCkueCkviDgpKrgpY3gpLDgpK/gpKTgpY3gpKgg4KSV4KSw4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4KSG4KSq4KSjIOCkhuCkquCksuCkviDgpIXgpKjgpLLgpYngpJUg4KSo4KSu4KWB4KSo4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KS14KWH4KSz4KS+IOCkheCkr+Cli+Ckl+CljeCkr+CkquCko+ClhyDgpJXgpL7gpKLgpLLgpL4g4KSG4KS54KWHLiDgpIbgpKPgpJbgpYAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpIXgpK/gpLbgpLjgpY3gpLXgpYAg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS+4KSC4KSo4KSC4KSk4KSwLCDgpIbgpKrgpLLgpY3gpK/gpL7gpLLgpL4g4KSI4KSu4KWH4KSyIOCkluCkvuCkpOClhyDgpLXgpL7gpKrgpLDgpYLgpKgg4KSG4KSq4KSy4KS+IOCkq+Cli+CkqCDgpIXgpKjgpLLgpYngpJUg4KSV4KSw4KSj4KWN4KSv4KS+4KS4IOCkuOCkvuCkguCkl+Ckv+CkpOCksuClhyDgpJzgpL7gpIjgpLIuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOCkuOClh+CkleCkguCkpuCkvuCkguCkruCkp+CljeCkr+ClhyDgpKrgpYHgpKjgpY3gpLngpL4g4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkleCksOCkvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuCkuOCkv+CkriDgpKrgpL/gpKgg4KSV4KWL4KShIOCkmuClgeCkleClgOCkmuCkviDgpIbgpLngpYcg4KSG4KSq4KSjIOCkhuCkpOCkviDgpIbgpKrgpLLgpYcg4KSh4KS/4KS14KWN4oCN4KS54KS+4KSH4KS4IOCkheCkqOCksuClieCklSDgpJXgpLDgpKPgpY3igI3gpK/gpL7gpLjgpL7gpKDgpYAg4KSG4KSq4KSy4KWN4oCN4KSv4KS+IOCkteCkvuCkueCkleCkvuCktuClgCDgpLjgpILgpKrgpLDgpY3gpJUg4KS44KS+4KSn4KS+4KS14KS+LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4KS44KS/4KSuIOCkquCkv+CkqCDgpJrgpYHgpJXgpYDgpJrgpL4g4KSG4KS54KWHLCDgpIbgpKrgpLLgpY3gpK/gpL7gpJXgpKHgpYcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KSk4KWN4KSoIOCkieCksOCljeCkteCksOCkv+CkpCDgpIbgpLngpYcuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAppbmRleCA1NTRhYTEyLi45YjY4YzVjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJNYXN1a2thbiBzZW11bGEga29kIFBJTiB5YW5nIGJldHVsLiBQZXJjdWJhYW4gYmVydWxhbmcgYWthbiBtZWx1bXB1aGthbiBTSU0gc2VjYXJhIGtla2FsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJLb2QgUElOIHRpZGFrIHNlcGFkYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJUZXJsYWx1IGJhbnlhayBwZXJjdWJhYW4gbWVsdWtpcyBjb3JhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQW5kYSB0ZWxhaCBtZW5haXAgUElOIHlhbmcgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJBbmRhIHRlbGFoIG1lbmFpcCBrYXRhIGxhbHVhbiB5YW5nIHNhbGFoIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgYW5kYSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRhYmxldCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgZ2FnYWwsIHRhYmxldCBpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIGdhZ2FsLCB0ZWxlZm9uIGluaSBha2FuIGRpdGV0YXBrYW4gc2VtdWxhIHNla2FsaSBndXMgbWVtYWRhbSBzZW11YSBkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQW5kYSB0ZWxhaCBtZW5haXAgUElOIHlhbmcgc2FsYWggc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpLiBcblxuQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQW5kYSB0ZWxhaCBtZW5haXAga2F0YSBsYWx1YW4geWFuZyBzYWxhaCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkuIFxuXG5DdWJhIGxhZ2kgZGFsYW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBhbmRhIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FsaS4gXG5cbkN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRhYmxldCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIGdhZ2FsLCB0YWJsZXQgaW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgZ2FnYWwsIHRlbGVmb24gaW5pIGFrYW4gZGl0ZXRhcGthbiBzZW11bGEgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFRhYmxldCBpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YW55YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJBbmRhIHRlbGFoIHNhbGFoIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gVGVsZWZvbiBpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YW55YS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJBbmRhIHRlbGFoIHNhbGFoIG1lbWJ1a2Ega3VuY2kgdGFibGV0IHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcGVuZ2d1bmEgaW5pIGFrYW4gZGlhbGloIGtlbHVhciBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YSBwZW5nZ3VuYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIGdhZ2FsLCBwZW5nZ3VuYSBpbmkgYWthbiBkaWFsaWgga2VsdWFyIHNla2FsaSBndXMgbWVtYWRhbSBzZW11YSBkYXRhIHBlbmdndW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcGVuZ2d1bmEgaW5pIGFrYW4gZGlhbGloIGtlbHVhciBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YSBwZW5nZ3VuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcGVuZ2d1bmEgaW5pIGFrYW4gZGlhbGloIGtlbHVhciBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YSBwZW5nZ3VuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFBlbmdndW5hIGluaSBha2FuIGRpYWxpaCBrZWx1YXIgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEgcGVuZ2d1bmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFBlbmdndW5hIGluaSBha2FuIGRpYWxpaCBrZWx1YXIgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEgcGVuZ2d1bmEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRhYmxldCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGxhZ2kgcGVyY3ViYWFuIHlhbmcgZ2FnYWwsIHByb2ZpbCBrZXJqYSBhbmRhIGFrYW4gZGlhbGloIGtlbHVhciBzZWthbGkgZ3VzIG1lbWFkYW0gc2VtdWEgZGF0YSBwcm9maWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0ZWxlZm9uIHNlYmFueWFrIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcHJvZmlsIGtlcmphIGluaSBha2FuIGRpYWxpaCBrZWx1YXIgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEgcHJvZmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkFuZGEgdGVsYWggc2FsYWggbWVtYnVrYSBrdW5jaSB0YWJsZXQgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcHJvZmlsIGtlcmphIGFuZGEgYWthbiBkaWFsaWgga2VsdWFyIHNla2FsaSBndXMgbWVtYWRhbSBzZW11YSBkYXRhIHByb2ZpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrYWxpLiBTZWxlcGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbGFnaSBwZXJjdWJhYW4geWFuZyBnYWdhbCwgcHJvZmlsIGtlcmphIGluaSBha2FuIGRpYWxpaCBrZWx1YXIgc2VrYWxpIGd1cyBtZW1hZGFtIHNlbXVhIGRhdGEgcHJvZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRhYmxldCBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2FsaS4gUHJvZmlsIGtlcmphIGluaSBha2FuIGRpYWxpaCBrZWx1YXIgc2VrYWxpIGd1IG1lbWFkYW0gc2VtdWEgZGF0YSBwcm9maWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iQW5kYSB0ZWxhaCBzYWxhaCBtZW1idWthIGt1bmNpIHRlbGVmb24gc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGthbGkuIFByb2ZpbCBrZXJqYSBpbmkgYWthbiBkaWFsaWgga2VsdWFyIHNla2FsaSBndXMgbWVtYWRhbSBzZW11YSBkYXRhIHByb2ZpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iQW5kYSB0ZWxhaCB0ZXJzaWxhcCBtZWx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIGx1a2lzIGNvcmFrIGJ1a2Ega3VuY2kgc2ViYW55YWsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2FsaS4gU2VsZXBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYWF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJBbmRhIHRlbGFoIHRlcnNpbGFwIG1lbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGFibGV0IGFuZGEgbWVuZ2d1bmFrYW4gbG9nIG1hc3VrIEdvb2dsZSBhbmRhLlxuXG4gQ3ViYSBsYWdpIGRhbGFtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2FhdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkFuZGEgdGVsYWggdGVyc2lsYXAgbHVraXMgY29yYWsgYnVrYSBrdW5jaSBzZWJhbnlhayA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGthbGkuIFNlbGVwYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBsYWdpIHBlcmN1YmFhbiB5YW5nIHRpZGFrIGJlcmpheWEsIGFuZGEgYWthbiBkaW1pbnRhIG1lbWJ1a2Ega3VuY2kgdGVsZWZvbiBhbmRhIG1lbmdndW5ha2FuIGxvZyBtYXN1ayBHb29nbGUgYW5kYS5cblxuIEN1YmEgbGFnaSBkYWxhbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNhYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJLb2QgUElOIFNJTSB0aWRhayBiZXR1bCwgamFkaSBhbmRhIGhhcnVzIG1lbmdodWJ1bmdpIHBlbWJhd2EgYW5kYSB1bnR1ayBtZW1idWthIGt1bmNpIHBlcmFudGkuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPktvZCBQSU4gU0lNIHNhbGFoLCBhbmRhIGFkYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBjdWJhYW4gbGFnaS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDhjYjRmMzIuLmNiNmViOTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuGAleGAhOGAuuGAlOGAtuGAleGAq+GAkOGAuiDhgJXhgLzhgJThgLrhgJbhgL3hgIThgLfhgLrhgJ7hgIrhgLfhgLog4YCA4YCv4YCS4YC64YCA4YCt4YCvIOGAleGAvOGAlOGAuuGAnOGAiuGAuiDhgJvhgK3hgK/hgIDhgLrhgJHhgIrhgLfhgLrhgJXhgKsu4YGLIOGAkeGAleGAuuGAgeGAqyDhgJHhgJXhgLrhgIHhgKsg4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCB4YC84YCE4YC64YC44YCe4YCK4YC6IOGAhuGAhOGAuuGAuOGAmeGAuuGAgOGAkuGAuuGAgOGAreGAryDhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJnhgJvhgKHhgLHhgKzhgIThgLog4YCW4YC84YCF4YC64YCU4YCx4YCU4YCt4YCv4YCE4YC64YCV4YCr4YCe4YCK4YC64YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuGAleGAhOGAuiDhgJThgLbhgJXhgKvhgJDhgLog4YCZ4YCQ4YCw4YCK4YCu4YCV4YCrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4YCZ4YC84YCx4YCs4YCA4YC64YCZ4YC84YCs4YC44YCF4YC94YCsIOGAleGAr+GAtuGAheGAtuGAhuGAveGAsiDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJnhgL7hgK8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuGAnuGAhOGAuiDhgJXhgIThgLog4YCU4YC24YCV4YCr4YCQ4YC64YCA4YCt4YCvIOGAoeGAmeGAvuGArOGAuOGAgOGAreGAryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCb4YCt4YCv4YCA4YC64YCR4YCK4YC34YC64YCV4YC84YCu4YC44YCV4YCr4YCV4YC84YCu4YGLIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLog4YCh4YCA4YC84YCs4YCQ4YC94YCE4YC6IOGAleGAvOGAlOGAuuGAnOGAiuGAuuGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLhgJ7hgIThgLrhgJ7hgIrhgLog4YCF4YCA4YCs4YC44YCd4YC+4YCA4YC64YCA4YCt4YCvICA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCZ4YC+4YCs4YC44YCb4YCt4YCv4YCA4YC64YCV4YC84YCu4YC44YCV4YCr4YCV4YC84YCu4YGLIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YCF4YCA4YC54YCA4YCU4YC34YC64YCh4YCA4YC84YCsIOGAleGAvOGAlOGAuuGAnOGAiuGAuuGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLhgJ7hgIThgLog4YCV4YCv4YC24YCF4YC24YCG4YC94YCyIOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAgeGAvOGAhOGAuuGAuOGAgOGAreGAryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLrhgJnhgLzhgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YGLIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLrhgKHhgIDhgLzhgKzhgJDhgL3hgIThgLog4YCV4YC84YCU4YC64YCc4YCK4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJvhgKwg4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCB4YCy4YC34YCV4YCr4YGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgLzhgK7hgLjhgJThgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YCA4YGKIOGApOGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgKHhgIXhgJnhgL7hgJXhgLzhgJThgLrhgIXhgJbhgL3hgIThgLfhgLrhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJXhgLzhgK7hgLjhgYog4YGO4YCE4YC64YC44YGP4YCS4YCx4YCQ4YCs4YCh4YCs4YC44YCc4YCv4YC24YC4IOGAleGAu+GAgOGAuuGAnuGAveGArOGAuOGAmeGAiuGAuuGAluGAvOGAheGAuuGAnuGAiuGAuuGBiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YC84YCu4YC44YCU4YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GAgOGBiiDhgKThgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCh4YCF4YCZ4YC+4YCV4YC84YCU4YC64YCF4YCW4YC94YCE4YC34YC64YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGBjuGAhOGAuuGAuOGBj+GAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuGAnuGAhOGAuiDhgJXhgIThgLog4YCU4YC24YCV4YCr4YCQ4YC64YCA4YCt4YCvIOGAoeGAmeGAvuGArOGAuOGAgOGAreGAryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgJvhgK3hgK/hgIDhgLrhgJHhgIrhgLfhgLrhgJXhgLzhgK7hgLjhgJXhgKvhgJXhgLzhgK7hgYsgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YCF4YCA4YC54YCA4YCU4YC34YC6IOGAoeGAgOGAvOGArOGAkOGAveGAhOGAuiDhgJXhgLzhgJThgLrhgJzhgIrhgLrhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4YCe4YCE4YC64YCe4YCK4YC6IOGAheGAgOGArOGAuOGAneGAvuGAgOGAuuGAgOGAreGAryAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCZ4YC+4YCs4YC44YCb4YCt4YCv4YCA4YC64YCV4YC84YCu4YC44YCV4YCr4YCV4YC84YCu4YGLIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLrhgKHhgIDhgLzhgKwg4YCV4YC84YCU4YC64YCc4YCK4YC64YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuGAnuGAhOGAuiDhgJXhgK/hgLbhgIXhgLbhgIbhgL3hgLIg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCB4YC84YCE4YC64YC44YCA4YCt4YCvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC64YCZ4YC84YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GBiyBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLrhgKHhgIDhgLzhgKzhgJDhgL3hgIThgLog4YCV4YC84YCU4YC64YCc4YCK4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YC84YCu4YC44YCU4YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GAgOGBiiDhgKThgJDhgIDhgLrhgJjhgJzhgIDhgLrhgKHhgKzhgLgg4YCh4YCF4YCZ4YC+4YCV4YC84YCU4YC64YCF4YCW4YC94YCE4YC34YC64YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGBjuGAhOGAuuGAuOGBj+GAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4YCW4YCv4YCU4YC64YC44YCh4YCs4YC4IOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJ7hgIThgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgLzhgK7hgLjhgJThgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YCA4YGKIOGApOGAluGAr+GAlOGAuuGAuOGAoeGArOGAuCDhgKHhgIXhgJnhgL7hgJXhgLzhgJThgLrhgIXhgJbhgL3hgIThgLfhgLrhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJXhgLzhgK7hgLjhgYog4YGO4YCE4YC64YC44YGP4YCS4YCx4YCQ4YCs4YCh4YCs4YC44YCc4YCv4YC24YC4IOGAleGAu+GAgOGAuuGAnuGAveGArOGAuOGAmeGAiuGAuuGAluGAvOGAheGAuuGAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLhgJDhgIDhgLrhgJjhgJzhgIDhgLrhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsg4YCk4YCW4YCv4YCU4YC64YC44YCh4YCs4YC4IOGAoeGAheGAmeGAvuGAleGAvOGAlOGAuuGAheGAluGAveGAhOGAt+GAuuGAmeGAiuGAuuGAluGAvOGAheGAuuGAleGAvOGAruGAuOGBiiDhgY7hgIThgLrhgLjhgY/hgJLhgLHhgJDhgKzhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCV4YC74YCA4YC64YCe4YC94YCs4YC44YCZ4YCK4YC64YCW4YC84YCF4YC64YCe4YCK4YC64YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4YCW4YCv4YCU4YC64YC44YCh4YCs4YC4IOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJ7hgIThgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJvhgKwg4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCB4YCy4YC34YCV4YCr4YGLIOGApOGAluGAr+GAlOGAuuGAuOGAoeGArOGAuCDhgKHhgIXhgJnhgL7hgJXhgLzhgJThgLrhgIXhgJbhgL3hgIThgLfhgLrhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJXhgLzhgK7hgLjhgYog4YGO4YCE4YC64YC44YGP4YCS4YCx4YCQ4YCs4YCh4YCs4YC44YCc4YCv4YC24YC4IOGAleGAu+GAgOGAuuGAnuGAveGArOGAuOGAmeGAiuGAuuGAluGAvOGAheGAuuGAnuGAiuGAuuGBiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJvhgKwg4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCB4YCy4YC34YCV4YCr4YGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgLzhgK7hgLjhgJThgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YCA4YGKIOGApOGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAnuGAsOGAoeGArOGAuCDhgJbhgJrhgLrhgJHhgK/hgJDhgLrhgIHhgLzhgIThgLrhgLjhgIHhgLbhgJvhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJXhgLzhgK7hgLjhgYog4YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YCe4YCw4YCS4YCx4YCQ4YCs4YCh4YCs4YC44YCc4YCv4YC24YC4IOGAleGAu+GAgOGAuuGAnuGAveGArOGAuOGAleGAq+GAmeGAiuGAuuGBiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YC84YCu4YC44YCU4YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GAgOGBiiDhgKThgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJ7hgLDhgKHhgKzhgLgg4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCB4YC84YCE4YC64YC44YCB4YC24YCb4YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAnuGAsOGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJXhgKvhgJnhgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLhgJDhgIDhgLrhgJjhgJzhgIDhgLrhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJvhgKwg4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCB4YCy4YC34YCV4YCr4YGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAvOGAruGAuOGAlOGAseGArOGAgOGAuiDhgJnhgKHhgLHhgKzhgIThgLrhgJnhgLzhgIThgLrhgJXhgKvhgIDhgYog4YCk4YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YCe4YCw4YCh4YCs4YC4IOGAluGAmuGAuuGAkeGAr+GAkOGAuuGAgeGAvOGAhOGAuuGAuOGAgeGAtuGAm+GAmeGAiuGAuuGAluGAvOGAheGAuuGAleGAvOGAruGAuOGBiiDhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJ7hgLDhgJLhgLHhgJDhgKzhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCV4YC74YCA4YC64YCe4YC94YCs4YC44YCV4YCr4YCZ4YCK4YC64YGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuGAluGAr+GAlOGAuuGAuOGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YC84YCu4YC44YCU4YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GAgOGBiiDhgKThgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJ7hgLDhgKHhgKzhgLgg4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCB4YC84YCE4YC64YC44YCB4YC24YCb4YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAnuGAsOGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJXhgKvhgJnhgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyDhgKThgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJ7hgLDhgKHhgKzhgLgg4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAnuGAsOGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsg4YCk4YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YCe4YCw4YCh4YCs4YC4IOGAluGAmuGAuuGAkeGAr+GAkOGAuuGAmeGAiuGAuuGAluGAvOGAheGAuuGAleGAvOGAruGAuOGBiiDhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgJ7hgLDhgJLhgLHhgJDhgKzhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCV4YC74YCA4YC64YCe4YC94YCs4YC44YCZ4YCK4YC64YCW4YC84YCF4YC64YCe4YCK4YC64YGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4YCQ4YCA4YC64YCY4YCc4YCA4YC64YCh4YCs4YC4IOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJ7hgIThgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAvOGAruGAuOGAlOGAseGArOGAgOGAuiDhgJnhgKHhgLHhgKzhgIThgLrhgJnhgLzhgIThgLrhgJXhgKvhgIDhgYog4YCe4YCE4YC34YC6IOGAoeGAnOGAr+GAleGAuuGAleGAm+GAreGAr+GAluGAreGAr+GAhOGAuuGAoeGArOGAuCDhgJbhgJrhgLrhgJHhgK/hgJDhgLrhgIHhgLzhgIThgLrhgLjhgIHhgLbhgJvhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJXhgLzhgK7hgLjhgYog4YCV4YCb4YCt4YCv4YCW4YCt4YCv4YCE4YC64YCS4YCx4YCQ4YCs4YCh4YCs4YC44YCc4YCv4YC24YC4IOGAleGAu+GAgOGAuuGAnuGAveGArOGAuOGAleGAq+GAmeGAiuGAuuGBiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCV4YC84YCu4YC44YCU4YCx4YCs4YCA4YC6IOGAmeGAoeGAseGArOGAhOGAuuGAmeGAvOGAhOGAuuGAleGAq+GAgOGBiiDhgJ7hgIThgLfhgLog4YCh4YCc4YCv4YCV4YC64YCV4YCb4YCt4YCv4YCW4YCt4YCv4YCE4YC64YCh4YCs4YC4IOGAluGAmuGAuuGAkeGAr+GAkOGAuuGAgeGAvOGAhOGAuuGAuOGAgeGAtuGAm+GAmeGAiuGAuuGAluGAvOGAheGAuuGAleGAvOGAruGAuOGBiiDhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLrhgJLhgLHhgJDhgKzhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCV4YC74YCA4YC64YCe4YC94YCs4YC44YCV4YCr4YCZ4YCK4YC64YGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4YCQ4YCA4YC64YCY4YCc4YCA4YC64YCh4YCs4YC4IOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJ7hgIThgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgLzhgK7hgLjhgJThgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YCA4YGKIOGAnuGAhOGAt+GAuiDhgKHhgJzhgK/hgJXhgLrhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLrhgKHhgKzhgLgg4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCB4YC84YCE4YC64YC44YCB4YC24YCb4YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAleGAm+GAreGAr+GAluGAreGAr+GAhOGAuuGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJXhgKvhgJnhgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4YCW4YCv4YCU4YC64YC44YCh4YCs4YC4IOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJ7hgIThgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOGAgOGAvOGAreGAmeGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgLzhgK7hgLjhgJThgLHhgKzhgIDhgLog4YCZ4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCV4YCr4YCA4YGKIOGAnuGAhOGAt+GAuiDhgKHhgJzhgK/hgJXhgLrhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLrhgKHhgKzhgLgg4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCB4YC84YCE4YC64YC44YCB4YC24YCb4YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAleGAm+GAreGAr+GAluGAreGAr+GAhOGAuuGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJXhgKvhgJnhgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgJvhgJThgLog4YCe4YCE4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhgIDhgLzhgK3hgJnhgLog4YCA4YC84YCt4YCv4YC44YCF4YCs4YC44YCb4YCsIOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAgeGAsuGAt+GAleGAq+GBiyDhgKHhgJzhgK/hgJXhgLrhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLog4YCW4YCa4YC64YCR4YCv4YCQ4YC64YCB4YC24YCb4YCZ4YCK4YC64YCW4YC84YCF4YC64YCV4YC84YCu4YC44YGKIOGAleGAm+GAreGAr+GAluGAreGAr+GAhOGAuuGAkuGAseGAkOGArOGAoeGArOGAuOGAnOGAr+GAtuGAuCDhgJXhgLvhgIDhgLrhgJ7hgL3hgKzhgLjhgJnhgIrhgLrhgJbhgLzhgIXhgLrhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAnuGAhOGAuiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4YCA4YC84YCt4YCZ4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAm+GArCDhgJnhgJnhgL7hgJThgLrhgIDhgJThgLrhgIHhgLLhgLfhgJXhgKvhgYsg4YCh4YCc4YCv4YCV4YC64YCV4YCb4YCt4YCv4YCW4YCt4YCv4YCE4YC6IOGAluGAmuGAuuGAkeGAr+GAkOGAuuGAgeGAtuGAm+GAmeGAiuGAuuGAluGAvOGAheGAuuGAleGAvOGAruGAuOGBiiDhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLrhgJLhgLHhgJDhgKzhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCV4YC74YCA4YC64YCe4YC94YCs4YC44YCZ4YCK4YC64YCW4YC84YCF4YC64YCe4YCK4YC64YGLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuGAnuGAhOGAuiDhgJXhgK/hgLbhgJbhgLHhgKzhgLrhgY3hgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgIHhgLzhgIThgLrhgLjhgIDhgK3hgK8gIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOGAoeGAgOGAvOGAreGAmeGAuiDhgJnhgL7hgJThgLrhgIDhgJThgLrhgIXhgL3hgKwg4YCZ4YCV4YC84YCv4YCc4YCv4YCV4YC64YCU4YCt4YCv4YCE4YC64YCV4YCr4YGLICDhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YCh4YCA4YC84YCt4YCZ4YC6IOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAleGAq+GAgCDhgJ7hgIThgLfhgLrhgJDhgIDhgLrhgJjhgJzhgIDhgLrhgKHhgKzhgLgg4YCh4YCu4YC44YCZ4YCx4YC44YCc4YC64YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YGNIOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJDhgLHhgKzhgIThgLrhgLjhgIbhgK3hgK/hgJXhgKvhgJzhgK3hgJnhgLfhgLrhgJnhgIrhgLrhgYsgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLrhgKHhgIDhgLzhgKzhgJDhgL3hgIThgLog4YCV4YC84YCU4YC64YCc4YCK4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4YCe4YCE4YC6IOGAleGAr+GAtuGAluGAseGArOGAuuGBjeGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAgeGAvOGAhOGAuuGAuOGAgOGAreGAryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDhgKHhgIDhgLzhgK3hgJnhgLog4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCF4YC94YCsIOGAmeGAleGAvOGAr+GAnOGAr+GAleGAuuGAlOGAreGAr+GAhOGAuuGAleGAq+GBiyDhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YCh4YCA4YC84YCt4YCZ4YC6IOGAmeGAmeGAvuGAlOGAuuGAgOGAlOGAuuGAleGAq+GAgCDhgJ7hgIThgLfhgLrhgJbhgK/hgJThgLrhgLjhgKHhgKzhgLgg4YCh4YCu4YC44YCZ4YCx4YC44YCc4YC64YCh4YCe4YCv4YC24YC44YCV4YC84YCv4YGNIOGAnuGAseGArOGAt+GAluGAveGAhOGAt+GAuuGAm+GAlOGAuiDhgJDhgLHhgKzhgIThgLrhgLjhgIbhgK3hgK/hgJXhgKvhgJzhgK3hgJnhgLfhgLrhgJnhgIrhgLrhgYsgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDhgIXhgIDhgLnhgIDhgJThgLfhgLrhgKHhgIDhgLzhgKzhgJDhgL3hgIThgLog4YCV4YC84YCU4YC64YCc4YCK4YC6IOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLhgJ7hgIThgLog4YCV4YCv4YC24YCW4YCx4YCs4YC64YGN4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCB4YC84YCE4YC64YC44YCA4YCt4YCvICA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOGAoeGAgOGAvOGAreGAmeGAuiDhgJnhgL7hgJThgLrhgIDhgJThgLrhgIXhgL3hgKwg4YCZ4YCV4YC84YCv4YCc4YCv4YCV4YC64YCU4YCt4YCv4YCE4YC64YCV4YCr4YGLICDhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgKHhgIDhgLzhgK3hgJnhgLog4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCV4YCr4YCAIOGAnuGAhOGAt+GAuuGAkOGAgOGAuuGAmOGAnOGAgOGAuuGAoeGArOGAuCDhgKHhgK7hgLjhgJnhgLHhgLjhgJzhgLrhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgY0g4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAkOGAseGArOGAhOGAuuGAuOGAhuGAreGAr+GAleGAq+GAnOGAreGAmeGAt+GAuuGAmeGAiuGAuuGBiyBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4YCF4YCA4YC54YCA4YCU4YC34YC64YCh4YCA4YC84YCs4YCQ4YC94YCE4YC6IOGAleGAvOGAlOGAuuGAnOGAiuGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuGAnuGAhOGAuiDhgJXhgK/hgLbhgJbhgLHhgKzhgLrhgY3hgJ7hgLHhgKzhgLfhgJbhgL3hgIThgLfhgLrhgIHhgLzhgIThgLrhgLjhgIDhgK3hgK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDhgKHhgIDhgLzhgK3hgJnhgLog4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCF4YC94YCsIOGAmeGAleGAvOGAr+GAnOGAr+GAleGAuuGAlOGAreGAr+GAhOGAuuGAleGAq+GBiyDhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDhgKHhgIDhgLzhgK3hgJnhgLog4YCZ4YCZ4YC+4YCU4YC64YCA4YCU4YC64YCV4YCr4YCAIOGAnuGAhOGAt+GAuuGAluGAr+GAlOGAuuGAuOGAoeGArOGAuCDhgKHhgK7hgLjhgJnhgLHhgLjhgJzhgLrhgKHhgJ7hgK/hgLbhgLjhgJXhgLzhgK/hgY0g4YCe4YCx4YCs4YC34YCW4YC94YCE4YC34YC64YCb4YCU4YC6IOGAkOGAseGArOGAhOGAuuGAuOGAhuGAreGAr+GAleGAq+GAnOGAreGAmeGAt+GAuuGAmeGAiuGAuuGBiyBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4YCF4YCA4YC54YCA4YCU4YC34YC64YCh4YCA4YC84YCs4YCQ4YC94YCE4YC6IOGAleGAvOGAlOGAuuGAnOGAiuGAuiDhgIDhgLzhgK3hgK/hgLjhgIXhgKzhgLjhgJXhgKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuGAhuGAhOGAuuGAuOGAgOGAkuGAuiDhgJzhgLvhgL7hgK3hgK/hgLfhgJ3hgL7hgIDhgLog4YCh4YCZ4YC+4YCQ4YC6IOGAmeGAvuGArOGAuOGAmuGAveGAhOGAuuGAuOGAleGAq+GAnuGAiuGAuiwg4YCW4YCv4YCU4YC64YC44YCc4YCt4YCv4YCE4YC64YC44YCM4YCs4YCU4YCA4YCt4YCvIOGAhuGAgOGAuuGAnuGAveGAmuGAuuGAm+GAmeGAiuGAuiDhgJbhgLzhgIXhgLrhgJXhgKvhgJDhgJrhgLoiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4YCG4YCE4YC64YC44YCZ4YC64YCA4YCS4YC64YGPIOGAleGAhOGAuuGAlOGAtuGAleGAq+GAkOGAuiDhgJnhgL7hgKzhgLjhgJThgLHhgJXhgKvhgJ7hgIrhgLrhgYog4YCe4YCE4YC34YC64YCQ4YC94YCE4YC6PHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4YCB4YCrIOGAgOGAvOGAreGAr+GAuOGAheGArOGAuOGAgeGAveGAhOGAt+GAuiDhgIDhgLvhgJThgLrhgJXhgKvhgJ7hgLHhgLjhgJ7hgIrhgLrhgYs8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAppbmRleCAyNDhmNjVkLi5mYWJkYTRiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iU2tyaXYgaW5uIGRlbiBrb3JyZWt0ZSBQVUsta29kZW4gcMOlIG55dHQuIEdqZW50YXR0ZSBmb3Jzw7hrIGtvbW1lciB0aWwgw6UgZGVha3RpdmVyZSBTSU0ta29ydGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU4ta29kZW5lIHN0ZW1tZXIgaWtrZSBvdmVyZW5zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iRm9yIG1hbmdlIGZvcnPDuGsgcMOlIHRlZ25pbmcgYXYgbcO4bnN0ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkR1IGhhciBvcHBnaXR0IGZlaWwgUElOLWtvZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2VyLiBcblxuUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkR1IGhhciB0YXN0ZXQgaW5uIHBhc3NvcmRldCBkaXR0IGZlaWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2VyLiBcblxuUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkR1IGhhciB0ZWduZXQgb3BwbMOlc25pbmdzbcO4bnN0ZXJldCBkaXR0IGZlaWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2VyLiBcblxuUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iRHUgaGFyIGdqb3J0IGZlaWwgaSBmb3Jzw7hrZXQgcMOlIMOlIGzDpXNlIG9wcCBuZXR0YnJldHRldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgdGlsYmFrZXN0aWxsZXMgbmV0dGJyZXR0ZXQsIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIG5ldHRicmV0dGV0cyBkYXRhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJEdSBoYXIgZ2pvcnQgZmVpbCBpIGZvcnPDuGtldCBww6Ugw6UgbMOlc2Ugb3BwIHRlbGVmb25lbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgdGlsYmFrZXN0aWxsZXMgdGVsZWZvbmVuLCBub2Ugc29tIHZpbCBzbGV0dGUgYWxsZSB0ZWxlZm9uZW5zIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJEdSBoYXIgb3BwZ2l0dCBmZWlsIFBJTi1rb2RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2VyLiBcblxuUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iRHUgaGFyIHRhc3RldCBpbm4gcGFzc29yZGV0IGRpdHQgZmVpbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGdhbmdlci4gXG5cblByw7h2IHDDpSBueXR0IG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkR1IGhhciB0ZWduZXQgb3BwbMOlc25pbmdzbcO4bnN0ZXJldCBkaXR0IGZlaWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZXIuIFxuXG5QcsO4diBww6Ugbnl0dCBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgbmV0dGJyZXR0ZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHlra2V0IGZvcnPDuGsgdGlsLCB0aWxiYWtlc3RpbGxlcyBuZXR0YnJldHRldCwgbm9lIHNvbSB2aWwgc2xldHRlIGFsbGUgbmV0dGJyZXR0ZXRzIGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgdGVsZWZvbmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgdGlsYmFrZXN0aWxsZXMgdGVsZWZvbmVuLCBub2Ugc29tIHZpbCBzbGV0dGUgYWxsZSB0ZWxlZm9uZW5zIGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgbmV0dGJyZXR0ZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gRGV0dGUgbmV0dGJyZXR0ZXQgYmxpciBuw6UgdGlsYmFrZXN0aWx0LCBvZyBhbGxlIGRhdGEgYmxpciBzbGV0dGV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgdGVsZWZvbmVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnYW5nZXIuIERlbm5lIHRlbGVmb25lbiBibGlyIG7DpSB0aWxiYWtlc3RpbHQsIG9nIGFsbGUgZGF0YSBibGlyIHNsZXR0ZXQuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgbmV0dGJyZXR0ZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNseWtrZXQgZm9yc8O4ayB0aWwsIGZqZXJuZXMgYnJ1a2VyZW4sIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIGJydWtlcmRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgdGVsZWZvbmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gRXR0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHlra2V0IGZvcnPDuGsgdGlsLCBmamVybmVzIGJydWtlcmVuLCBub2Ugc29tIHZpbCBzbGV0dGUgYWxsZSBicnVrZXJkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgbmV0dGJyZXR0ZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHlra2V0IGZvcnPDuGsgdGlsLCBmamVybmVzIGJydWtlcmVuLCBub2Ugc29tIHZpbCBzbGV0dGUgYWxsZSBicnVrZXJkYXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJEdSBoYXIgZ2pvcnQgZmVpbCBpIGZvcnPDuGtldCBww6Ugw6UgbMOlc2Ugb3BwIHRlbGVmb25lbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGdhbmdlci4gRXR0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNseWtrZXQgZm9yc8O4ayB0aWwsIGZqZXJuZXMgYnJ1a2VyZW4sIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIGJydWtlcmRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJEdSBoYXIgZ2pvcnQgZmVpbCBpIGZvcnPDuGtldCBww6Ugw6UgbMOlc2Ugb3BwIG5ldHRicmV0dGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnYW5nZXIuIERlbm5lIGJydWtlcmVuIGJsaXIgbsOlIGZqZXJuZXQsIG9nIGFsbGUgYnJ1a2VyZGF0YSBibGlyIHNsZXR0ZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iRHUgaGFyIGdqb3J0IGZlaWwgaSBmb3Jzw7hrZXQgcMOlIMOlIGzDpXNlIG9wcCB0ZWxlZm9uZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gRGVubmUgYnJ1a2VyZW4gYmxpciBuw6UgZmplcm5ldCwgb2cgYWxsZXIgYnJ1a2VyZGF0YSBibGlyIHNsZXR0ZXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iRHUgaGFyIGdqb3J0IGZlaWwgaSBmb3Jzw7hrZXQgcMOlIMOlIGzDpXNlIG9wcCBuZXR0YnJldHRldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgZmplcm5lcyBhcmJlaWRzcHJvZmlsZW4sIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIHByb2ZpbGRhdGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgdGVsZWZvbmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gRXR0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHlra2V0IGZvcnPDuGsgdGlsLCBmamVybmVzIGFyYmVpZHNwcm9maWxlbiwgbm9lIHNvbSB2aWwgc2xldHRlIGFsbGUgcHJvZmlsZGF0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJEdSBoYXIgZ2pvcnQgZmVpbCBpIGZvcnPDuGtldCBww6Ugw6UgbMOlc2Ugb3BwIG5ldHRicmV0dGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgZmplcm5lcyBhcmJlaWRzcHJvZmlsZW4sIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIHByb2ZpbGRhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkR1IGhhciBnam9ydCBmZWlsIGkgZm9yc8O4a2V0IHDDpSDDpSBsw6VzZSBvcHAgdGVsZWZvbmVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x5a2tldCBmb3Jzw7hrIHRpbCwgZmplcm5lcyBhcmJlaWRzcHJvZmlsZW4sIG5vZSBzb20gdmlsIHNsZXR0ZSBhbGxlIHByb2ZpbGRhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJEdSBoYXIgZ2pvcnQgZmVpbCBpIGZvcnPDuGtldCBww6Ugw6UgbMOlc2Ugb3BwIG5ldHRicmV0dGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEFyYmVpZHNwcm9maWxlbiBibGlyIGZqZXJuZXQsIG9nIGFsbGUgcHJvZmlsZGF0YSBibGlyIHNsZXR0ZXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iRHUgaGFyIGdqb3J0IGZlaWwgaSBmb3Jzw7hrZXQgcMOlIMOlIGzDpXNlIG9wcCB0ZWxlZm9uZW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGdhbmdlci4gQXJiZWlkc3Byb2ZpbGVuIGJsaXIgZmplcm5ldCwgb2cgYWxsZSBwcm9maWxkYXRhIGJsaXIgc2xldHRldC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRHUgaGFyIHRlZ25ldCBvcHBsw6VzbmluZ3Ntw7huc3RlcmV0IGZlaWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciB5dHRlcmxpZ2VyZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBnYWxlIGZvcnPDuGssIGJsaXIgZHUgYmVkdCBvbSDDpSBsw6VzZSBvcHAgbmV0dGJyZXR0ZXQgdmlhIGVuIGUtcG9zdGtvbnRvLlxuXG4gUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJEdSBoYXIgdGVnbmV0IG9wcGzDpXNuaW5nc23DuG5zdGVyZXQgZmVpbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIHl0dGVybGlnZXJlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGdhbGUgZm9yc8O4aywgYmxpciBkdSBiZWR0IG9tIMOlIGzDpXNlIG9wcCB0ZWxlZm9uZW4gdmlhIGVuIGUtcG9zdGtvbnRvLlxuXG4gUHLDuHYgcMOlIG55dHQgb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkR1IGhhciB0ZWduZXQgb3BwbMOlc25pbmdzbcO4bnN0ZXJldCBmZWlsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ2FuZ2VyLiBFdHRlciB5dHRlcmxpZ2VyZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGdhbGUgZm9yc8O4aywgYmxpciBkdSBiZWR0IG9tIMOlIGzDpXNlIG9wcCBuZXR0YnJldHRldCB2aWEgZW4gZS1wb3N0a29udG8uXG5cbiBQcsO4diBww6Ugbnl0dCBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRHUgaGFyIHRlZ25ldCBvcHBsw6VzbmluZ3Ntw7huc3RlcmV0IGZlaWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnYW5nZXIuIEV0dGVyIHl0dGVybGlnZXJlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZ2FsZSBmb3Jzw7hrLCBibGlyIGR1IGJlZHQgb20gw6UgbMOlc2Ugb3BwIHRlbGVmb25lbiB2aWEgZW4gZS1wb3N0a29udG8uXG5cbiBQcsO4diBww6Ugbnl0dCBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRmVpbCBQSU4ta29kZSBmb3IgU0lNLWtvcnRldC4gRHUgbcOlIG7DpSBrb250YWt0ZSBvcGVyYXTDuHJlbiBkaW4gZm9yIMOlIGzDpXNlIG9wcCBlbmhldGVuLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5GZWlsIFBJTi1rb2RlIGZvciBTSU0ta29ydGV0LiBEdSBoYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZm9yc8O4ayBpZ2plbi48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDRhNTkwN2UwLi4yZjljYjZlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJQVUsg4KSV4KWL4KShIOCkquClgeCkqDrgpKrgpY3gpLDgpKbgpL7gpKgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIOCkp+Clh+CksOCliCDgpKrgpYHgpKg64KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSy4KWHIFNJTeCksuCkvuCkiCDgpLjgpY3gpKXgpL7gpK/gpYAg4KSw4KWC4KSq4KSu4KS+IOCkqOCkv+Ckt+CljeCkleCljeCksOCkv+CkryDgpJfgpLDgpL/gpKbgpL/gpKjgpYcg4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgpJXgpYvgpKHgpLngpLDgpYIg4KSu4KWH4KSyIOCkluCkvuCkj+CkqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCkqOCkv+CkleCliCDgpKfgpYfgpLDgpYgg4KSi4KS+4KSB4KSa4KS+IOCkleCli+CkuOCkv+CkuOCkueCksOClgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSf4KS+4KSH4KSqIOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkpOCkquCkvuCkiOCkgeCklSDgpKrgpL7gpLjgpLXgpLDgpY3gpKEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkuOClh+CkleClh+CkqOCljeCkoeCkruCkviDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgpKTgpKrgpL7gpIjgpIHgpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkheCkqOCksuCklSDgpKLgpL7gpIHgpJrgpL4g4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSW4KS/4KSa4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJs8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPuCkquCkn+CkleClpCAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkr+CliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSw4KS/4KS44KWH4KSfIOCkueClgeCkqOClh+CkmyDgpJzgpLjgpLLgpYcg4KSG4KSr4KWN4KSo4KWLIOCkuOCkruCljeCkquClguCksOCljeCkoyDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSq4KSb4KS/LCDgpK/gpYsg4KSr4KWL4KSoICDgpLDgpL/gpLjgpYfgpJ8g4KS54KWB4KSo4KWH4KSbIOCknOCkuOCksuClhyDgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CkvuCkieCkqOClh+Ckm+ClpOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJvgpaQgXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJUg4KSq4KS+4KS44KS14KSw4KWN4KShIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkl+CksuCkpCDgpJ/gpL7gpIfgpKog4KSX4KSw4KWN4KSo4KWB4KSt4KSP4KSV4KWLIOCkm+ClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KS44KWH4KSV4KWH4KSo4KWN4KSh4KSu4KS+IOCkq+Clh+CksOCkvyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpKTgpKrgpL7gpIjgpIHgpJXgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkluCkv+CkmuCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSr4KWH4KSw4KS/IOCkleCli+CkuOCkv+CkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJs8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+4KSq4KSf4KSV4KWkICA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSq4KSb4KS/LCDgpK/gpYsg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCksOCkv+CkuOClh+CknyDgpLngpYHgpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkhuCkq+CljeCkqOCliyDgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClh+Ckm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQg4KSq4KSb4KS/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkr+CliyDgpKvgpYvgpKggIOCksOCkv+CkuOClh+CknyDgpLngpYHgpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkuOCkruCljeCkquClguCksOCljeCkoyDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KS+4KSJ4KSo4KWH4KSb4KWk4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuCkpOCkquCkvuCkiOCkgSDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSV4KWkIOCkr+CliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSw4KS/4KWH4KS44KWH4KSfIOCkl+CksOCkv+CkqOClh+CkmyDgpJzgpLjgpLLgpYcg4KS44KSu4KWN4KSq4KWC4KSw4KWN4KSjIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CkleClpCDgpK/gpYsg4KSr4KWL4KSoIOCksOCkv+CkuOClh+CknyDgpJfgpLDgpL/gpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkuOCkruCljeCkquClguCksOCljeCkoyDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcgIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkmzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CkleClpCAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS54KSf4KS+4KSH4KSo4KWH4KSbIOCknOCkuOCksuClhyDgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJvgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CkleClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKXgpKog4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+Ckvywg4KSv4KWLIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpLngpJ/gpL7gpIfgpKjgpYfgpJsg4KSc4KS44KSy4KWHICDgpLjgpKzgpYgg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyAg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS54KSf4KS+4KSH4KSo4KWH4KSbIOCknOCkuOCksuClhyDgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSq4KSf4KSV4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS54KSf4KS+4KSH4KSo4KWH4KSbIOCknOCkuOCksuClhyAg4KS44KSs4KWIIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJs8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSV4KWkIOCkr+CliyDgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpLDgpY3gpKTgpL4g4KS54KSf4KS+4KSH4KSo4KWH4KSbIOCknOCkuOCksuClhyDgpLjgpK7gpY3gpKrgpYLgpLDgpY3gpKMg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJsg4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkquCkn+CkleClpCDgpK/gpYsg4KSq4KWN4KSw4KSv4KWL4KSX4KSV4KSw4KWN4KSk4KS+IOCkueCkn+CkvuCkh+CkqOClh+CkmyDgpJzgpLjgpLLgpYcg4KS44KSu4KWN4KSq4KWC4KSw4KWN4KSjIOCkquCljeCksOCkr+Cli+Ckl+CkleCksOCljeCkpOCkviDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4KSq4KSf4KSV4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkpeCkqiDgpIXgpLjgpKvgpLIg4KSq4KWN4KSw4KSv4KS+4KS44KS54KSw4KWC4KSq4KSb4KS/LCDgpJXgpL7gpK4g4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCkueCkn+CkvuCkh+CkqOClh+CkmyDgpJzgpLjgpLLgpYcg4KS44KSs4KWIIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCkpOCkquCkvuCkiOCkguCksuClhyDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkq+Cli+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KSl4KSqIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8gLCDgpJXgpL7gpK4g4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCkueCkn+CkvuCkh+CkqOClh+CkmyDgpJzgpLjgpLLgpYcg4KS44KSs4KWIIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpKHgpYfgpJ/gpL4g4KSu4KWH4KSf4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4KSk4KSq4KS+4KSI4KSBIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSf4KWN4KSv4KS+4KSs4KWN4KSy4KWH4KSfIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpKXgpKog4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+Ckvywg4KSV4KS+4KSuIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpLngpJ/gpL7gpIfgpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkuOCkrOCliCDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClh+Ckm+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqOClhyDgpKrgpY3gpLDgpK/gpL7gpLgg4KSX4KSw4KWN4KSo4KWBIOCkreCkj+CkleCliyDgpJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpKXgpKog4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+CkvyAsIOCkleCkvuCkriDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KS54KSf4KS+4KSH4KSo4KWH4KSbIOCknOCkuOCksuClhyDgpLjgpKzgpYgg4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuCkpOCkquCkvuCkiOCkgSDgpJfgpLLgpKQg4KSk4KSw4KS/4KSV4KS+4KSy4KWHIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSo4KWHIOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkmzx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQg4KSV4KS+4KSuIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpLngpJ/gpL7gpIfgpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkuOCkruCljeCkquClguCksOCljeCkoyAg4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCkoeClh+Ckn+CkviDgpK7gpYfgpJ/gpY3gpKjgpYfgpJsg4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkl+CksuCkpCDgpKTgpLDgpL/gpJXgpL7gpLLgpYcg4KSr4KWL4KSoIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKjgpYcg4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSbIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJXgpaQg4KSV4KS+4KSuIOCkquCljeCksOCli+Ckq+CkvuCkh+CksiDgpLngpJ/gpL7gpIfgpKjgpYfgpJsg4KSc4KS44KSy4KWHIOCkuOCkruCljeCkquClguCksOCljeCkoyDgpKrgpY3gpLDgpYvgpKvgpL7gpIfgpLIg4KSh4KWH4KSf4KS+IOCkruClh+Ckn+CljeCkqOClh+Ckm+ClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSV4KWL4KSw4KWN4KSo4KWB4KSt4KSv4KWL4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCkteCkv+Ckq+CksiDgpKrgpY3gpLDgpK/gpKTgpY3gpKjgpLngpLDgpYIg4KSq4KSb4KS/LCDgpKTgpKrgpL7gpIjgpILgpLLgpL7gpIgg4KSG4KSr4KWN4KSo4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+CknyDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+IOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpLngpLDgpYLgpK7gpL7gpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSw4KWC4KSq4KSu4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpKTgpL7gpKjgpY3gpKjgpYEg4KSt4KSP4KSV4KWLIOCkm+ClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKfgpYfgpLDgpYgg4KSF4KS44KSr4KSyIOCkquCljeCksOCkr+CkvuCkuOCkueCksOClguCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSB4KSy4KS+4KSIIOCkj+CkieCkn+CkviDgpIfgpK7gpYfgpLIg4KSW4KS+4KSk4KS+4KSV4KWLIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpYfgpLAg4KSk4KSq4KS+4KSI4KSB4KSV4KWLIOCkq+Cli+CkqCDgpIXgpKjgpLLgpJUg4KSX4KSw4KWN4KSoIOCkuOCli+Ckp+Ckv+CkqOClhyDgpJvgpaRcblxuIOCkq+Clh+CksOCkvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgpKTgpKrgpL7gpIjgpILgpLLgpYcg4KSX4KSy4KSkIOCkpOCksOCkv+CkleCkvuCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCkquCkn+CklSDgpJXgpYvgpLDgpY3gpKjgpYHgpK3gpK/gpYvgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgpLXgpL/gpKvgpLIg4KSq4KWN4KSw4KSv4KSk4KWN4KSo4KS54KSw4KWCIOCkquCkm+Ckvywg4KSk4KSq4KS+4KSI4KSC4KSy4KS+4KSIIOCkhuCkq+CljeCkqOCliyDgpJ/gpY3gpK/gpL7gpKzgpY3gpLLgpYfgpJ8g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkviDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkheCkqOCksuCklSDgpJfgpLDgpY3gpKgg4KS44KWL4KSn4KS/4KSo4KWHIOCkm+ClpFxuXG4g4KSr4KWH4KSw4KS/IOCkquCljeCksOCkr+CkvuCkuCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpLngpLDgpYLgpK7gpL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KSF4KSo4KSy4KSVIOCkouCkvuCkgeCkmuCkviDgpJfgpLLgpKQg4KSw4KWC4KSq4KSu4KS+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4KSq4KSf4KSVIOCkpOCkvuCkqOCljeCkqOClgSDgpK3gpI/gpJXgpYsg4KSb4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4KSn4KWH4KSw4KWIIOCkheCkuOCkq+CksiDgpKrgpY3gpLDgpK/gpL7gpLjgpLngpLDgpYLgpKrgpJvgpL8sIOCkpOCkquCkvuCkiOCkgeCksuCkvuCkiCDgpI/gpIngpJ/gpL4g4KSH4KSu4KWH4KSyIOCkluCkvuCkpOCkvuCkleCliyDgpKrgpY3gpLDgpK/gpYvgpJcg4KSX4KSw4KWH4KSwIOCkpOCkquCkvuCkiOCkgeCkleCliyDgpKvgpYvgpKgg4KSF4KSo4KSy4KSVIOCkl+CksOCljeCkqCDgpLjgpYvgpKfgpL/gpKjgpYcg4KSb4KWkXG5cbiDgpKvgpYfgpLDgpL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgpLjgpYfgpJXgpYfgpKjgpY3gpKHgpK7gpL4g4KSq4KWN4KSw4KSv4KS+4KS4IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljeClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIFBJTiDgpJXgpYvgpKEg4KSX4KSy4KSkIOCkm+ClpCDgpIXgpKwg4KSk4KSq4KS+4KSI4KSC4KSy4KWHIOCkheCkvuCkq+CljeCkqOCliyDgpIngpKrgpJXgpLDgpKMg4KSW4KWL4KSy4KWN4KSo4KSy4KS+4KSIIOCkpOCkquCkvuCkiOCkguCkleCliyDgpLXgpL7gpLngpJXgpLjgpIHgpJcg4KS44KSu4KWN4KSq4KSw4KWN4KSVIOCkl+CksOCljeCkqOCliCDgpKrgpLDgpY3gpKbgpLDgpaQiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+IOCkl+CksuCkpCBTSU0gUElOIOCkleCli+CkoSwg4KSk4KSq4KS+4KSI4KSBIOCkuOCkgeCklyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgpKrgpJ/gpJUg4KSq4KWN4KSw4KSv4KS+4KS4IOCkrOCkvuCkgeCkleClgCDgpJvgpaQ8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCAzNWNhZjc3Li4zOTYwZmMyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iR2VlZiBkZSBqdWlzdGUgUFVLLWNvZGUgb3BuaWV1dyBvcC4gQmlqIGhlcmhhYWxkZSBwb2dpbmdlbiB3b3JkdCBkZSBzaW1rYWFydCBwZXJtYW5lbnQgdWl0Z2VzY2hha2VsZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUGluY29kZXMga29tZW4gbmlldCBvdmVyZWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iVGUgdmVlbCBwYXRyb29ucG9naW5nZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkplIGhlYnQgamUgcGluY29kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZWVyIG9uanVpc3QgZ2V0eXB0LiBcblxuUHJvYmVlciBoZXQgb3BuaWV1dyBvdmVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZGVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJKZSBoZWJ0IGplIHdhY2h0d29vcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldHlwdC4gXG5cblByb2JlZXIgaGV0IG9wbmlldXcgb3ZlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWNvbmRlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSmUgaGVidCBqZSBvbnRncmVuZGVsaW5nc3BhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldGVrZW5kLiBcblxuUHJvYmVlciBoZXQgb3BuaWV1dyBvdmVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlY29uZGVuLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkplIGhlYnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0YWJsZXQgdGUgb250Z3JlbmRlbGVuLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCBkZXplIHRhYmxldCBnZXJlc2V0LCB3YWFyZG9vciBhbGxlIGdlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJKZSBoZWJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIG9uZGVybm9tZW4gb20gZGUgdGVsZWZvb24gdGUgb250Z3JlbmRlbGVuLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCBkZXplIHRlbGVmb29uIGdlcmVzZXQsIHdhYXJkb29yIGFsbGUgZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJKZSBoZWJ0IGplIHBpbmNvZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZWVyIG9uanVpc3QgZ2V0eXB0LiBcblxuUHJvYmVlciBoZXQgb3BuaWV1dyBvdmVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkplIGhlYnQgamUgd2FjaHR3b29yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtlZXIgb25qdWlzdCBnZXR5cHQuIFxuXG5Qcm9iZWVyIGhldCBvcG5pZXV3IG92ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iSmUgaGVidCBqZSBvbnRncmVuZGVsaW5nc3BhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZWVyIG9uanVpc3QgZ2V0ZWtlbmQuIFxuXG5Qcm9iZWVyIGhldCBvcG5pZXV3IG92ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWNvbmRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJKZSBoZWJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0YWJsZXQgdGUgb250Z3JlbmRlbGVuLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IGRlemUgdGFibGV0IGdlcmVzZXQsIHdhYXJkb29yIGFsbGUgZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkplIGhlYnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbi4gTmEgbm9nIGVlbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCBkZXplIHRlbGVmb29uIGdlcmVzZXQsIHdhYXJkb29yIGFsbGUgZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IkplIGhlYnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIG9uZGVybm9tZW4gb20gZGUgdGFibGV0IHRlIG9udGdyZW5kZWxlbi4gRGV6ZSB0YWJsZXQgd29yZHQgZ2VyZXNldCwgd2FhcmRvb3IgYWxsZSBnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJKZSBoZWJ0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbi4gRGV6ZSB0ZWxlZm9vbiB3b3JkdCBnZXJlc2V0LCB3YWFyZG9vciBhbGxlIGdlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkplIGhlYnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0YWJsZXQgdGUgb250Z3JlbmRlbGVuLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCBkZXplIGdlYnJ1aWtlciB2ZXJ3aWpkZXJkLCB3YWFyZG9vciBhbGxlIGdlYnJ1aWtlcnNnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbi4gTmEgbm9nIGVlbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gd29yZHQgZGV6ZSBnZWJydWlrZXIgdmVyd2lqZGVyZCwgd2FhcmRvb3IgYWxsZSBnZWJydWlrZXJzZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIG9uZGVybm9tZW4gb20gZGUgdGFibGV0IHRlIG9udGdyZW5kZWxlbi4gTmEgbm9nIGVlbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCBkZXplIGdlYnJ1aWtlciB2ZXJ3aWpkZXJkLCB3YWFyZG9vciBhbGxlIGdlYnJ1aWtlcnNnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIG9uZGVybm9tZW4gb20gZGUgdGVsZWZvb24gdGUgb250Z3JlbmRlbGVuLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IGRlemUgZ2VicnVpa2VyIHZlcndpamRlcmQsIHdhYXJkb29yIGFsbGUgZ2VicnVpa2Vyc2dlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0YWJsZXQgdGUgb250Z3JlbmRlbGVuLiBEZXplIGdlYnJ1aWtlciB3b3JkdCB2ZXJ3aWpkZXJkLCB3YWFyZG9vciBhbGxlIGdlYnJ1aWtlcnNnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJKZSBoZWJ0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbi4gRGV6ZSBnZWJydWlrZXIgd29yZHQgdmVyd2lqZGVyZCwgd2FhcmRvb3IgYWxsZSBnZWJydWlrZXJzZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRhYmxldCB0ZSBvbnRncmVuZGVsZW4uIE5hIG5vZyBlZW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IGhldCB3ZXJrcHJvZmllbCB2ZXJ3aWpkZXJkLCB3YWFyZG9vciBhbGxlIHByb2ZpZWxnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbi4gTmEgbm9nIGVlbnMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gd29yZHQgaGV0IHdlcmtwcm9maWVsIHZlcndpamRlcmQsIHdhYXJkb29yIGFsbGUgcHJvZmllbGdlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkplIGhlYnQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiBvbmRlcm5vbWVuIG9tIGRlIHRhYmxldCB0ZSBvbnRncmVuZGVsZW4uIE5hIG5vZyBlZW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gd29yZHQgaGV0IHdlcmtwcm9maWVsIHZlcndpamRlcmQsIHdhYXJkb29yIGFsbGUgcHJvZmllbGdlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJKZSBoZWJ0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0ZWxlZm9vbiB0ZSBvbnRncmVuZGVsZW4uIE5hIG5vZyBlZW5zIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gd29yZHQgaGV0IHdlcmtwcm9maWVsIHZlcndpamRlcmQsIHdhYXJkb29yIGFsbGUgcHJvZmllbGdlZ2V2ZW5zIHdvcmRlbiB2ZXJ3aWpkZXJkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0YWJsZXQgdGUgb250Z3JlbmRlbGVuLiBIZXQgd2Vya3Byb2ZpZWwgd29yZHQgdmVyd2lqZGVyZCwgd2FhcmRvb3IgYWxsZSBwcm9maWVsZ2VnZXZlbnMgd29yZGVuIHZlcndpamRlcmQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iSmUgaGVidCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWlzbHVrdGUgcG9naW5nZW4gb25kZXJub21lbiBvbSBkZSB0ZWxlZm9vbiB0ZSBvbnRncmVuZGVsZW4uIEhldCB3ZXJrcHJvZmllbCB3b3JkdCB2ZXJ3aWpkZXJkLCB3YWFyZG9vciBhbGxlIHByb2ZpZWxnZWdldmVucyB3b3JkZW4gdmVyd2lqZGVyZC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iSmUgaGVidCBqZSBvbnRncmVuZGVsaW5nc3BhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldGVrZW5kLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCB1IGdldnJhYWdkIGplIHRhYmxldCB0ZSBvbnRncmVuZGVsZW4gdmlhIGVlbiBlLW1haWxhY2NvdW50LlxuXG4gUHJvYmVlciBoZXQgb3ZlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWNvbmRlbiBvcG5pZXV3LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iSmUgaGVidCBqZSBvbnRncmVuZGVsaW5nc3BhdHJvb24gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldGVrZW5kLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNsdWt0ZSBwb2dpbmdlbiB3b3JkdCB1IGdldnJhYWdkIGplIHRlbGVmb29uIHRlIG9udGdyZW5kZWxlbiB2aWEgZWVuIGUtbWFpbGFjY291bnQuXG5cbiBQcm9iZWVyIGhldCBvdmVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlY29uZGVuIG9wbmlldXcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkplIGhlYnQgamUgb250Z3JlbmRlbGluZ3NwYXRyb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldGVrZW5kLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IHUgZ2V2cmFhZ2QgamUgdGFibGV0IHRlIG9udGdyZW5kZWxlbiB2aWEgZWVuIGUtbWFpbGFjY291bnQuXG5cbiBQcm9iZWVyIGhldCBvdmVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2Vjb25kZW4gb3BuaWV1dy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkplIGhlYnQgamUgb250Z3JlbmRlbGluZ3NwYXRyb29uIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2VlciBvbmp1aXN0IGdldGVrZW5kLiBOYSBub2cgZWVucyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc2x1a3RlIHBvZ2luZ2VuIHdvcmR0IHUgZ2V2cmFhZ2QgamUgdGVsZWZvb24gdGUgb250Z3JlbmRlbGVuIHZpYSBlZW4gZS1tYWlsYWNjb3VudC5cblxuIFByb2JlZXIgaGV0IG92ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWNvbmRlbiBvcG5pZXV3LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iT25qdWlzdGUgcGluY29kZSB2b29yIHNpbWthYXJ0LiBVIG1vZXQgbnUgY29udGFjdCBvcG5lbWVuIG1ldCBqZSBwcm92aWRlciBvbSBqZSBhcHBhcmFhdCB0ZSBvbnRncmVuZGVsZW4uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk9uanVpc3RlIHBpbmNvZGUgdm9vciBzaW1rYWFydC4gSmUgaGVidCBub2cgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9naW5nZW4gb3Zlci48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCmluZGV4IDg0ODZiNjMuLjJkZWVkODUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuCosuCoueCpgCBQVUsg4KiV4KmL4KihIOCoruCpgeCpnC3gqKbgqLDgqJwg4KiV4Kiw4KmL4KWkIOCopuCpgeCoueCosOCovuCoiOCohuCogiDgqJfgqIjgqIbgqIIg4KiV4KmL4Ki44Ki84Ki/4Ki44Ki84Ki+4KiCIFNJTSDgqKjgqYLgqbAg4Ki44Kil4Ki+4KiIIOCopOCpjOCosCDgqKTgqYcg4KiF4Ki44Kiu4Kiw4Kmx4KilIOCorOCoo+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOColeCpi+CooSDgqK7gqYfgqLIg4Kio4Ki54KmA4KiCIOColuCovuCoguCopuCphyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuCorOCoueCpgeCopCDgqJzgqLzgqL/gqIbgqKbgqL4g4Kiq4KmI4Kif4Kiw4KioIOColeCpi+CouOCovOCov+CouOCovOCovuCogiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4Kik4KmB4Ki44KmA4KiCIOCohuCoquCoo+CoviBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Ki14Ki+4KiwIOCol+CovOCosuCopCDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCon+CovuCoiOCoqiDgqJXgqYDgqKTgqL4g4Ki54KmI4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki44KiV4Ki/4Kmw4Kif4Ki+4KiCIOCoteCov+CpseComiDgqKbgqYHgqKzgqL7gqLDgqL4g4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCosOCpi+ClpCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Ki14Ki+4KiwIOCohuCoquCoo+CoviDgqKrgqL7gqLjgqLXgqLDgqKEg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kif4Ki+4KiI4KiqIOColeCpgOCopOCoviDgqLngqYjgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiG4Kiq4Kij4Ki+IOCoheCoqOCosuCpjOColSDgqKrgqYjgqJ/gqLDgqKgg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kih4KmN4Kiw4Ki+IOColeCpgOCopOCoviDgqLngqYjgpaQgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki5IOCon+CpiOCorOCosuCph+ConyDgqLDgqYDgqLjgqYjgqJ8g4KiV4KmA4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCoh+CouOCopuCoviDgqLjgqL7gqLDgqL4g4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKvgqYvgqKgg4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki5IOCoq+Cpi+CoqCDgqLDgqYDgqLjgqYjgqJ8g4KiV4KmA4Kik4Ki+IOConOCovuCoj+Col+Coviwg4Kic4KmLIOCoh+CouOCopuCoviDgqLjgqL7gqLDgqL4g4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuCopOCpgeCouOCpgOCogiDgqIbgqKrgqKPgqL4gUElOIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Ki14Ki+4KiwIOCol+CovOCosuCopCDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCon+CovuCoiOCoqiDgqJXgqYDgqKTgqL4g4Ki54KmI4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCoteCovuCosCDgqIbgqKrgqKPgqL4g4Kiq4Ki+4Ki44Ki14Kiw4KihIOCol+CovOCosuCopCDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCon+CovuCoiOCoqiDgqJXgqYDgqKTgqL4g4Ki54KmI4KWkIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCoteCovuCosCDgqIbgqKrgqKPgqL4g4KiF4Kio4Kiy4KmM4KiVIOCoquCpiOCon+CosOCoqCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKHgqY3gqLDgqL4g4KiV4KmA4Kik4Ki+IOCoueCpiOClpCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ki44KiV4Ki/4Kmw4Kif4Ki+4KiCIOCoteCov+CpseComiDgqKbgqYHgqKzgqL7gqLDgqL4g4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCosOCpi+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqLngqYvgqLAg4KiF4Ki44Kir4KiyIOColeCpi+CouOCovOCov+CouOCovOCovuCogiDgqKTgqYvgqIIg4Kis4Ki+4KiF4KimLCDgqIfgqLkg4Kif4KmI4Kis4Kiy4KmH4KifIOCosOCpgOCouOCpiOConyDgqJXgqYDgqKTgqYAg4Kic4Ki+4KiP4KiX4KmALCDgqJzgqYsg4KiH4Ki44Kim4Ki+IOCouOCovuCosOCoviDgqKHgqL7gqJ/gqL4g4Kiu4Ki/4Kif4Ki+IOCopuCph+CoteCph+Col+CovuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kir4KmL4KioIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki5IOCoq+Cpi+CoqCDgqLDgqYDgqLjgqYjgqJ8g4KiV4KmA4Kik4Ki+IOConOCovuCoj+Col+Coviwg4Kic4KmLIOCoh+CouOCopuCoviDgqLjgqL7gqLDgqL4g4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kif4KmI4Kis4Kiy4KmH4KifIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIOCoh+CouSDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kiw4KmA4Ki44KmI4KifIOColeCpgOCopOCpgCDgqJzgqL7gqI/gqJfgqYAsIOConOCpiyDgqIfgqLjgqKbgqL4g4Ki44Ki+4Kiw4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4KmA4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kir4KmL4KioIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIOCoh+CouSDgqKvgqYvgqKgg4Kiw4KmA4Ki44KmI4KifIOColeCpgOCopOCoviDgqJzgqL7gqI/gqJfgqL4sIOConOCpiyDgqIfgqLjgqKbgqL4g4Ki44Ki+4Kiw4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki4IOCoieCoquCoreCpi+Col+CopOCoviDgqKjgqYLgqbAg4Ki54Kif4Ki+IOCopuCov+CpseCopOCoviDgqJzgqL7gqI/gqJfgqL4sIOConOCpiyDgqLjgqL7gqLDgqL4g4KiJ4Kiq4Kit4KmL4KiX4Kik4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCopOCpgeCouOCpgOCogiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4Ki14Ki+4KiwIOCol+CovOCosuCopCDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCoq+Cpi+CoqCDgqKjgqYLgqbAg4KiF4Kio4Kiy4KmM4KiVIOColeCosOCoqCDgqKbgqYAg4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCpgOCopOCpgOClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqLngqYvgqLAg4KiF4Ki44Kir4KiyIOColeCpi+CouOCovOCov+CouOCovOCovuCogiDgqKTgqYvgqIIg4Kis4Ki+4KiF4KimLCDgqIfgqLgg4KiJ4Kiq4Kit4KmL4KiX4Kik4Ki+IOCoqOCpguCpsCDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4Ki+IOConOCovuCoj+Col+Coviwg4Kic4KmLIOCouOCovuCosOCoviDgqIngqKrgqK3gqYvgqJfgqKTgqL4g4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kif4KmI4Kis4Kiy4KmH4KifIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki4IOCoieCoquCoreCpi+Col+CopOCoviDgqKjgqYLgqbAg4Ki54Kif4Ki+IOCopuCov+CpseCopOCoviDgqJzgqL7gqI/gqJfgqL4sIOConOCpiyDgqLjgqL7gqLDgqL4g4KiJ4Kiq4Kit4KmL4KiX4Kik4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCopOCpgeCouOCpgOCogiAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kir4KmL4KioIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiH4Ki4IOCoieCoquCoreCpi+Col+CopOCoviDgqKjgqYLgqbAg4Ki54Kif4Ki+IOCopuCov+CpseCopOCoviDgqJzgqL7gqI/gqJfgqL4sIOConOCpiyDgqLjgqL7gqLDgqL4g4KiJ4Kiq4Kit4KmL4KiX4Kik4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqYDgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKvgqYvgqKgg4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQg4KiH4Ki5IOCoieCoquCoreCpi+Col+CopOCoviDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4Ki+IOConOCovuCoj+Col+Coviwg4Kic4KmLIOCoh+CouOCopuCoviDgqLjgqL7gqLDgqL4g4KiJ4Kiq4Kit4KmL4KiX4Kik4Ki+IOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKvgqYvgqKgg4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kif4KmI4Kis4Kiy4KmH4KifIOCoqOCpguCpsCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCopuCpgCDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4KmA4Kik4KmA4KWkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqL7gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4Ki14Ki+4KiwIOCol+CovOCosuCopCDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCoq+Cpi+CoqCDgqKjgqYLgqbAg4KiF4Kio4Kiy4KmM4KiVIOColeCosOCoqCDgqKbgqYAg4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCpgOCopOCpgOClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCoueCpi+CosCDgqIXgqLjgqKvgqLIg4KiV4KmL4Ki44Ki84Ki/4Ki44Ki84Ki+4KiCIOCopOCpi+CogiDgqKzgqL7gqIXgqKYsIOColeCpsOCoriDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Ki54Kif4Ki+IOCopuCov+CpseCopOCpgCDgqJzgqL7gqI/gqJfgqYAsIOConOCpiyDgqLjgqL7gqLDgqL4g4Kiq4KmN4Kiw4KmL4Kir4Ki+4KiI4KiyIOCooeCovuCon+CoviDgqK7gqL/gqJ/gqL4g4Kim4KmH4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqJ/gqYjgqKzgqLLgqYfgqJ8g4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqYDgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKvgqYvgqKgg4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kim4KmAIOColeCpi+CouOCovOCov+CouOCovCDgqJXgqYDgqKTgqYDgpaQg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLngqJ/gqL4g4Kim4Ki/4Kmx4Kik4KmAIOConOCovuCoj+Col+CpgCwg4Kic4KmLIOCouOCovuCosOCoviDgqKrgqY3gqLDgqYvgqKvgqL7gqIjgqLIg4Kih4Ki+4Kif4Ki+IOCoruCov+Con+CoviDgqKbgqYfgqLXgqYfgqJfgqYDgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4Kik4KmB4Ki44KmA4KiCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCoteCovuCosCDgqIbgqKrgqKPgqL4g4KiF4Kio4Kiy4KmM4KiVIOCoquCpiOCon+CosOCoqCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKHgqY3gqLDgqL4g4KiV4KmA4Kik4Ki+IOCoueCpiOClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgqLngqYvgqLAg4KiF4Ki44Kir4KiyIOColeCpi+CouOCovOCov+CouOCovOCovuCogiDgqKTgqYvgqIIg4Kis4Ki+4KiF4KimLCDgqKTgqYHgqLngqL7gqKjgqYLgqbAg4KiH4Kmx4KiVIOCoiOCoruCph+CosiDgqJbgqL7gqKTgqL4g4Ki14Kiw4Kik4Kim4KmHIOCoueCpi+CojyDgqIbgqKrgqKPgqYAg4Kif4KmI4Kis4Kiy4KmH4KifIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kiy4KiIIOColeCov+CoueCoviDgqJzgqL7gqI/gqJfgqL7gpaRcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOCouOColeCov+CpsOCon+CovuCogiDgqLXgqL/gqbHgqJog4Kim4KmB4Kis4Ki+4Kiw4Ki+IOColeCpi+CouOCovOCov+CouOCovCDgqJXgqLDgqYvgpaQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiG4Kiq4Kij4Ki+IOCoheCoqOCosuCpjOColSDgqKrgqYjgqJ/gqLDgqKgg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kih4KmN4Kiw4Ki+IOColeCpgOCopOCoviDgqLngqYjgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIOCoheCouOCoq+CosiDgqJXgqYvgqLjgqLzgqL/gqLjgqLzgqL7gqIIg4Kik4KmL4KiCIOCorOCovuCoheCopiwg4Kik4KmB4Ki54Ki+4Kio4KmC4KmwIOCoh+CpseColSDgqIjgqK7gqYfgqLIg4KiW4Ki+4Kik4Ki+IOCoteCosOCopOCopuCphyDgqLngqYvgqI8g4KiG4Kiq4Kij4Ki+IOCoq+Cpi+CoqCDgqIXgqKjgqLLgqYzgqJUg4KiV4Kiw4KioIOCosuCoiCDgqJXgqL/gqLngqL4g4Kic4Ki+4KiP4KiX4Ki+4KWkXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCopOCpgeCouOCpgOCogiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCoteCovuCosCDgqIbgqKrgqKPgqL4g4KiF4Kio4Kiy4KmM4KiVIOCoquCpiOCon+CosOCoqCDgqJfgqLzgqLLgqKQg4Kii4Kmw4KiXIOCoqOCovuCosiDgqKHgqY3gqLDgqL4g4KiV4KmA4Kik4Ki+IOCoueCpiOClpCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCoueCpi+CosCDgqIXgqLjgqKvgqLIg4KiV4KmL4Ki44Ki84Ki/4Ki44Ki84Ki+4KiCIOCopOCpi+CogiDgqKzgqL7gqIXgqKYsIOCopOCpgeCoueCovuCoqOCpguCpsCDgqIfgqbHgqJUg4KiI4Kiu4KmH4KiyIOColuCovuCopOCoviDgqLXgqLDgqKTgqKbgqYcg4Ki54KmL4KiPIOCohuCoquCoo+CpgCDgqJ/gqYjgqKzgqLLgqYfgqJ8g4KiF4Kio4Kiy4KmM4KiVIOColeCosOCoqCDgqLLgqIgg4KiV4Ki/4Ki54Ki+IOConOCovuCoj+Col+CovuClpFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgqLjgqJXgqL/gqbDgqJ/gqL7gqIIg4Ki14Ki/4Kmx4KiaIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KmL4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgqKTgqYHgqLjgqYDgqIIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgqLXgqL7gqLAg4KiG4Kiq4Kij4Ki+IOCoheCoqOCosuCpjOColSDgqKrgqYjgqJ/gqLDgqKgg4KiX4Ki84Kiy4KikIOCoouCpsOColyDgqKjgqL7gqLIg4Kih4KmN4Kiw4Ki+IOColeCpgOCopOCoviDgqLngqYjgpaQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgqLngqYvgqLAg4KiF4Ki44Kir4KiyIOColeCpi+CouOCovOCov+CouOCovOCovuCogiDgqKTgqYvgqIIg4Kis4Ki+4KiF4KimLCDgqKTgqYHgqLngqL7gqKjgqYLgqbAg4KiH4Kmx4KiVIOCoiOCoruCph+CosiDgqJbgqL7gqKTgqL4g4Ki14Kiw4Kik4Kim4KmHIOCoueCpi+CojyDgqIbgqKrgqKPgqL4g4Kir4KmL4KioIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kiy4KiIIOColeCov+CoueCoviDgqJzgqL7gqI/gqJfgqL7gpaRcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Ki44KiV4Ki/4Kmw4Kif4Ki+4KiCIOCoteCov+CpseComiDgqKbgqYHgqKzgqL7gqLDgqL4g4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCosOCpi+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4KiX4Ki84Kiy4KikIFNJTSBQSU4g4KiV4KmL4KihLCDgqLngqYHgqKMg4Kik4KmB4Ki54Ki+4Kio4KmC4KmwIOCohuCoquCoo+CpgCDgqKHgqL/gqLXgqL7gqIjgqLgg4Kio4KmC4KmwIOCoheCoqOCosuCpjOColSDgqJXgqLDgqKgg4Kiy4KiIIOCohuCoquCoo+CphyDgqJXgqYjgqLDgqYDgqIXgqLAg4Kio4KmC4KmwIOCouOCpsOCoquCosOColSDgqJXgqLDgqKjgqL4g4Kiq4Ki14KmH4KiX4Ki+4KWkIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gqJfgqLzgqLLgqKQgU0lNIFBJTiDgqJXgqYvgqKEsIOCopOCpgeCoueCovuCooeCphyDgqJXgqYvgqLIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4KiV4KmL4Ki44Ki84Ki/4Ki44Ki84Ki+4KiCIOCorOCovuColeCpgCDgqLngqKjgpaQ8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCAwNDkzMGM1Li41M2MzZDYwZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IlBvbm93bmllIHBvZGFqIHBvcHJhd255IGtvZCBQVUsuIE5pZXVkYW5lIHByw7NieSBzcG93b2R1asSFIHRyd2HFgmUgd3nFgsSFY3plbmllIGthcnR5IFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iS29keSBQSU4gbmllIHBhc3VqxIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJaYnl0IHdpZWxlIHByw7NiIG5hcnlzb3dhbmlhIHd6b3J1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJXcGlzYcWCZcWbIG5pZXByYXdpZMWCb3d5IGtvZCBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmF6eS4gXG5cblNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB3cGlzYcWCZcWbIG5pZXByYXdpZMWCb3dlIGhhc8WCby4gXG5cblNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+Ik5hcnlzb3dhxYJlxZsgbmllcHJhd2lkxYJvd3kgd3rDs3Igb2RibG9rb3dhbmlhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHJhenkuIFxuXG5TcHLDs2J1aiBwb25vd25pZSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0YWJsZXQuIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIHRhYmxldCB6b3N0YW5pZSB6cmVzZXRvd2FueSwgY28gc3Bvd29kdWplIHNrYXNvd2FuaWUgeiBuaWVnbyB3c3p5c3RraWNoIGRhbnljaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRlbGVmb24uIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIHRlbGVmb24gem9zdGFuaWUgenJlc2V0b3dhbnksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHogbmllZ28gd3N6eXN0a2ljaCBkYW55Y2guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJXcGlzYcWCZcWbIG5pZXByYXdpZMWCb3d5IGtvZCBQSU4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByYXp5LiBcblxuU3Byw7NidWogcG9ub3duaWUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJQbyByYXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB3cGlzYcWCZcWbIG5pZXByYXdpZMWCb3dlIGhhc8WCby4gXG5cblNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTmFyeXNvd2HFgmXFmyBuaWVwcmF3aWTFgm93eSB3esOzciBvZGJsb2tvd2FuaWEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByYXp5LiBcblxuU3Byw7NidWogcG9ub3duaWUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRhYmxldC4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmlldWRhbnljaCBwcsOzYmFjaCB0YWJsZXQgem9zdGFuaWUgenJlc2V0b3dhbnksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHogbmllZ28gd3N6eXN0a2ljaCBkYW55Y2guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRlbGVmb24uIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2ggdGVsZWZvbiB6b3N0YW5pZSB6cmVzZXRvd2FueSwgY28gc3Bvd29kdWplIHNrYXNvd2FuaWUgeiBuaWVnbyB3c3p5c3RraWNoIGRhbnljaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0YWJsZXQuIFpvc3RhbmllIG9uIHpyZXNldG93YW55LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB6IG5pZWdvIHdzenlzdGtpY2ggZGFueWNoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJhenkgbmllcHJhd2lkxYJvd28gb2RibG9rb3dhxIcgdGVsZWZvbi4gWm9zdGFuaWUgb24genJlc2V0b3dhbnksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHogbmllZ28gd3N6eXN0a2ljaCBkYW55Y2guIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRhYmxldC4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2ggdGVuIHXFvHl0a293bmlrIHpvc3RhbmllIHVzdW5pxJl0eSwgY28gc3Bvd29kdWplIHNrYXNvd2FuaWUgd3N6eXN0a2ljaCBqZWdvIGRhbnljaC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRlbGVmb24uIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoLCB0ZW4gdcW8eXRrb3duaWsgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGplZ28gZGFueWNoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRhYmxldC4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbmlldWRhbnljaCBwcsOzYmFjaCB0ZW4gdcW8eXRrb3duaWsgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGplZ28gZGFueWNoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJQcsOzYm93YcWCZcWbIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0ZWxlZm9uLiBQbyBrb2xlam55Y2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoLCB0ZW4gdcW8eXRrb3duaWsgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGplZ28gZGFueWNoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0YWJsZXQuIFRlbiB1xbx5dGtvd25payB6b3N0YW5pZSB1c3VuacSZdHksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHdzenlzdGtpY2ggamVnbyBkYW55Y2guIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0ZWxlZm9uLiBUZW4gdcW8eXRrb3duaWsgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGplZ28gZGFueWNoLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0YWJsZXQuIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIHByb2ZpbCBkbyBwcmFjeSB6b3N0YW5pZSB1c3VuacSZdHksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHdzenlzdGtpY2ggZGFueWNoIHRlZ28gcHJvZmlsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiByYXp5IG5pZXByYXdpZMWCb3dvIG9kYmxva293YcSHIHRlbGVmb24uIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIHByb2ZpbCBkbyBwcmFjeSB6b3N0YW5pZSB1c3VuacSZdHksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHdzenlzdGtpY2ggZGFueWNoIHRlZ28gcHJvZmlsdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJQcsOzYm93YcWCZcWbIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0YWJsZXQuIFBvIGtvbGVqbnljaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2ggcHJvZmlsIGRvIHByYWN5IHpvc3RhbmllIHVzdW5pxJl0eSwgY28gc3Bvd29kdWplIHNrYXNvd2FuaWUgd3N6eXN0a2ljaCBkYW55Y2ggdGVnbyBwcm9maWx1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJQcsOzYm93YcWCZcWbIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0ZWxlZm9uLiBQbyBrb2xlam55Y2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIHByb2ZpbCBkbyBwcmFjeSB6b3N0YW5pZSB1c3VuacSZdHksIGNvIHNwb3dvZHVqZSBza2Fzb3dhbmllIHdzenlzdGtpY2ggZGFueWNoIHRlZ28gcHJvZmlsdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlByw7Nib3dhxYJlxZsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHJhenkgbmllcHJhd2lkxYJvd28gb2RibG9rb3dhxIcgdGFibGV0LiBQcm9maWwgZG8gcHJhY3kgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGRhbnljaCB0ZWdvIHByb2ZpbHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iUHLDs2Jvd2HFgmXFmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gcmF6eSBuaWVwcmF3aWTFgm93byBvZGJsb2tvd2HEhyB0ZWxlZm9uLiBQcm9maWwgZG8gcHJhY3kgem9zdGFuaWUgdXN1bmnEmXR5LCBjbyBzcG93b2R1amUgc2thc293YW5pZSB3c3p5c3RraWNoIGRhbnljaCB0ZWdvIHByb2ZpbHUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBuaWVwcmF3aWTFgm93byBuYXJ5c293YcWCZcWbIHd6w7NyIG9kYmxva293YW5pYS4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2gga29uaWVjem5lIGLEmWR6aWUgb2RibG9rb3dhbmllIHRhYmxldHUgcHJ6eSB1xbx5Y2l1IGRhbnljaCBsb2dvd2FuaWEgbmEga29udG8gR29vZ2xlLlxuXG4gU3Byw7NidWogcG9ub3duaWUgemEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBuaWVwcmF3aWTFgm93byBuYXJ5c293YcWCZcWbIHd6w7NyIG9kYmxva293YW5pYS4gUG8ga29sZWpueWNoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG5pZXVkYW55Y2ggcHLDs2JhY2gga29uaWVjem5lIGLEmWR6aWUgb2RibG9rb3dhbmllIHRlbGVmb251IHByenkgdcW8eWNpdSBkYW55Y2ggbG9nb3dhbmlhIG5hIGtvbnRvIEdvb2dsZS5cblxuIFNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG5pZXByYXdpZMWCb3dvIG5hcnlzb3dhxYJlxZsgd3rDs3Igb2RibG9rb3dhbmlhLiBQbyBrb2xlam55Y2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIGtvbmllY3puZSBixJlkemllIG9kYmxva293YW5pZSB0YWJsZXR1IHByenkgdcW8eWNpdSBkYW55Y2ggbG9nb3dhbmlhIG5hIGtvbnRvIEdvb2dsZS5cblxuIFNwcsOzYnVqIHBvbm93bmllIHphIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlBvIHJheiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG5pZXByYXdpZMWCb3dvIG5hcnlzb3dhxYJlxZsgd3rDs3Igb2RibG9rb3dhbmlhLiBQbyBrb2xlam55Y2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuaWV1ZGFueWNoIHByw7NiYWNoIGtvbmllY3puZSBixJlkemllIG9kYmxva293YW5pZSB0ZWxlZm9udSBwcnp5IHXFvHljaXUgZGFueWNoIGxvZ293YW5pYSBuYSBrb250byBHb29nbGUuXG5cbiBTcHLDs2J1aiBwb25vd25pZSB6YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOaWVwcmF3aWTFgm93eSBrb2QgUElOIGthcnR5IFNJTS4gTXVzaXN6IHRlcmF6IHNrb250YWt0b3dhxIcgc2nEmSB6IG9wZXJhdG9yZW0sIGJ5IG9kYmxva293YcWCIFR3b2plIHVyesSFZHplbmllLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+TmllcHJhd2lkxYJvd3kga29kIFBJTiBrYXJ0eSBTSU0uIE1hc3ogamVzemN6ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwcsOzYnkuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAppbmRleCAwZWYwN2U1Li4xOWQxZTRhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJJbnRyb2R1emEgbm92YW1lbnRlIG8gY8OzZGlnbyBQVUsgY29ycmV0by4gTXVpdGFzIHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzIGRlc2F0aXZhcsOjbyBwZXJtYW5lbnRlbWVudGUgbyBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Ik9zIGPDs2RpZ29zIFBJTiBuw6NvIGNvaW5jaWRlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Ik11aXRhcyB0ZW50YXRpdmFzIGRlIHBhZHLDo28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlZvY8OqIGRpZ2l0b3Ugc2V1IFBJTiBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iVm9jw6ogZGlnaXRvdSBzdWEgc2VuaGEgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIFxuXG5UZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSB0YWJsZXQgc2Vyw6EgcmVkZWZpbmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHNtYXJ0cGhvbmUgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgc21hcnRwaG9uZSBzZXLDoSByZWRlZmluaWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlZvY8OqIGRpZ2l0b3Ugc2V1IFBJTiBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlZvY8OqIGRpZ2l0b3Ugc3VhIHNlbmhhIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIFxuXG5UZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iVm9jw6ogZGVzZW5ob3Ugc3VhIHNlcXXDqm5jaWEgZGUgZGVzYmxvcXVlaW8gaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgdGFibGV0IHNlcsOhIHJlZGVmaW5pZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBzZXVzIGRhZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSBzbWFydHBob25lIHNlcsOhIHJlZGVmaW5pZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBzZXVzIGRhZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlemVzLiBFc3RlIHRhYmxldCBzZXLDoSByZWRlZmluaWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gRXN0ZSBzbWFydHBob25lIHNlcsOhIHJlZGVmaW5pZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBzZXVzIGRhZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLCBlc3RlIHVzdcOhcmlvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gdXN1w6FyaW8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gRXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHNtYXJ0cGhvbmUgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlemVzLiBFc3RlIHVzdcOhcmlvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gdXN1w6FyaW8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLG8gcGVyZmlsIGRlIHRyYWJhbGhvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLCBvIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLG8gcGVyZmlsIGRlIHRyYWJhbGhvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgbyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlemVzLiBPIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gTyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBTZSBmaXplciBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgaW5jb3JyZXRhcywgc2Vyw6Egc29saWNpdGFkbyBxdWUgdm9jw6ogdXNlIG8gbG9naW4gZG8gR29vZ2xlIHBhcmEgZGVzYmxvcXVlYXIgc2V1IHRhYmxldC5cblxuIFRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBTZSBmaXplciBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgaW5jb3JyZXRhcywgc2Vyw6Egc29saWNpdGFkbyBxdWUgdm9jw6ogdXNlIG8gbG9naW4gZG8gR29vZ2xlIHBhcmEgZGVzYmxvcXVlYXIuXG5cbiBUZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIFNlIGZpemVyIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGluY29ycmV0YXMsIHNlcsOhIHNvbGljaXRhZG8gcXVlIHZvY8OqIHVzZSBvIGxvZ2luIGRvIEdvb2dsZSBwYXJhIGRlc2Jsb3F1ZWFyIHNldSB0YWJsZXQuXG5cbiBUZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIFNlIGZpemVyIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGluY29ycmV0YXMsIHNlcsOhIHNvbGljaXRhZG8gcXVlIHZvY8OqIHVzZSBvIGxvZ2luIGRvIEdvb2dsZSBwYXJhIGRlc2Jsb3F1ZWFyLlxuXG4gVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJDw7NkaWdvIFBJTiBkbyBTSU0gaW5jb3JyZXRvLiBFbnRyZSBlbSBjb250YXRvIGNvbSBhIG9wZXJhZG9yYSBwYXJhIGRlc2Jsb3F1ZWFyIG8gZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Dw7NkaWdvIFBJTiBkbyBTSU0gaW5jb3JyZXRvLiBUZW50YXRpdmFzIHJlc3RhbnRlczogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCBkZGE2ODljLi41ZmRhNGQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJWb2x0ZSBhIGludHJvZHV6aXIgbyBjw7NkaWdvIFBVSyBjb3JyZXRvLiBEZW1hc2lhZGFzIHRlbnRhdGl2YXMgY29uc2VjdXRpdmFzIGlyw6NvIGRlc2F0aXZhciBwZXJtYW5lbnRlbWVudGUgbyBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+Ik9zIGPDs2RpZ29zIFBJTiBuw6NvIGNvcnJlc3BvbmRlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IkRlbWFzaWFkYXMgdGVudGF0aXZhcyBwYXJhIGRlc2VuaGFyIHNlcXXDqm5jaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkVzY3JldmV1IG8gUElOIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iRXNjcmV2ZXUgYSBwYWxhdnJhLXBhc3NlIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRGVzZW5ob3UgYSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgZXN0ZSB0ZWxlbcOzdmVsIHNlcsOhIHJlcG9zdG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGVsZW3Ds3ZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIHNlbSDDqnhpdG8sIGVzdGUgdGVsZW3Ds3ZlbCBzZXLDoSByZXBvc3RvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJFc2NyZXZldSBvIFBJTiBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJFc2NyZXZldSBhIHBhbGF2cmEtcGFzc2UgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRGVzZW5ob3UgYSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGRlbnRybyBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBzZW0gw6p4aXRvLCBlc3RlIHRlbGVtw7N2ZWwgc2Vyw6EgcmVwb3N0bywgbyBxdWUgZWxpbWluYXLDoSB0b2RvcyBvcyBzZXVzIGRhZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJUZW50b3UgZGVzYmxvcXVlYXIgaW5jb3JyZXRhbWVudGUgbyB0ZWxlbcOzdmVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIHNlbSDDqnhpdG8sIGVzdGUgdGVsZW3Ds3ZlbCBzZXLDoSByZXBvc3RvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEVzdGUgdGVsZW3Ds3ZlbCBzZXLDoSByZXBvc3RvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGVsZW3Ds3ZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEVzdGUgdGVsZW3Ds3ZlbCBzZXLDoSByZXBvc3RvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgZXN0ZSB1dGlsaXphZG9yIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIGRhZG9zIHJlc3BldGl2b3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRlbGVtw7N2ZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBzZW0gw6p4aXRvLCBlc3RlIHV0aWxpemFkb3Igc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgcmVzcGV0aXZvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJUZW50b3UgZGVzYmxvcXVlYXIgaW5jb3JyZXRhbWVudGUgbyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgZXN0ZSB1dGlsaXphZG9yIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIGRhZG9zIHJlc3BldGl2b3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRlbGVtw7N2ZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgZXN0ZSB1dGlsaXphZG9yIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIGRhZG9zIHJlc3BldGl2b3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJUZW50b3UgZGVzYmxvcXVlYXIgaW5jb3JyZXRhbWVudGUgbyB0YWJsZXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlemVzLiBFc3RlIHV0aWxpemFkb3Igc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgcmVzcGV0aXZvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJUZW50b3UgZGVzYmxvcXVlYXIgaW5jb3JyZXRhbWVudGUgbyB0ZWxlbcOzdmVsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gRXN0ZSB1dGlsaXphZG9yIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBlbGltaW5hcsOhIHRvZG9zIG9zIGRhZG9zIHJlc3BldGl2b3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgbyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJUZW50b3UgZGVzYmxvcXVlYXIgaW5jb3JyZXRhbWVudGUgbyB0ZWxlbcOzdmVsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgbyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRhYmxldCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBzZW0gw6p4aXRvLCBvIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZWxpbWluYXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRlbGVtw7N2ZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIMOqeGl0bywgbyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iVGVudG91IGRlc2Jsb3F1ZWFyIGluY29ycmV0YW1lbnRlIG8gdGFibGV0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gTyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGVsaW1pbmFyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlRlbnRvdSBkZXNibG9xdWVhciBpbmNvcnJldGFtZW50ZSBvIHRlbGVtw7N2ZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHZlemVzLiBPIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZWxpbWluYXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkRlc2VuaG91IGEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gRGVwb2lzIGRlIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBzZW0gc3VjZXNzbywgc2VyLWxoZS3DoSBwZWRpZG8gcGFyYSBkZXNibG9xdWVhciBvIHRhYmxldCBhdHJhdsOpcyBkZSB1bWEgY29udGEgZGUgZW1haWwuXG5cbiBUZW50ZSBub3ZhbWVudGUgZGVudHJvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRGVzZW5ob3UgYSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBEZXBvaXMgZGUgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIHNlbSBzdWNlc3NvLCBzZXItbGhlLcOhIHBlZGlkbyBwYXJhIGRlc2Jsb3F1ZWFyIG8gdGVsZW3Ds3ZlbCBhdHJhdsOpcyBkZSB1bWEgY29udGEgZGUgZW1haWwuXG5cbiBUZW50ZSBub3ZhbWVudGUgZGVudHJvIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJEZXNlbmhvdSBhIHNlcXXDqm5jaWEgZGUgZGVzYmxvcXVlaW8gaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gRGVwb2lzIGRlIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIHNlbSBzdWNlc3NvLCBzZXItbGhlLcOhIHBlZGlkbyBwYXJhIGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGF0cmF2w6lzIGRlIHVtYSBjb250YSBkZSBlbWFpbC5cblxuIFRlbnRlIG5vdmFtZW50ZSBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkRlc2VuaG91IGEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBEZXBvaXMgZGUgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgc2VtIHN1Y2Vzc28sIHNlci1saGUtw6EgcGVkaWRvIHBhcmEgZGVzYmxvcXVlYXIgbyB0ZWxlbcOzdmVsIGF0cmF2w6lzIGRlIHVtYSBjb250YSBkZSBlbWFpbC5cblxuIFRlbnRlIG5vdmFtZW50ZSBkZW50cm8gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IkPDs2RpZ28gUElOIGRvIGNhcnTDo28gU0lNIGluY29ycmV0by4gVGVtIGRlIGNvbnRhY3RhciBvIHNldSBvcGVyYWRvciBwYXJhIGRlc2Jsb3F1ZWFyIG8gZGlzcG9zaXRpdm8uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkPDs2RpZ28gUElOIGRvIGNhcnTDo28gU0lNIGluY29ycmV0by4gVGVtIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAppbmRleCAwZWYwN2U1Li4xOWQxZTRhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iSW50cm9kdXphIG5vdmFtZW50ZSBvIGPDs2RpZ28gUFVLIGNvcnJldG8uIE11aXRhcyB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcyBkZXNhdGl2YXLDo28gcGVybWFuZW50ZW1lbnRlIG8gU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJPcyBjw7NkaWdvcyBQSU4gbsOjbyBjb2luY2lkZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJNdWl0YXMgdGVudGF0aXZhcyBkZSBwYWRyw6NvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJWb2PDqiBkaWdpdG91IHNldSBQSU4gaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIFxuXG5UZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlZvY8OqIGRpZ2l0b3Ugc3VhIHNlbmhhIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgdGFibGV0IHNlcsOhIHJlZGVmaW5pZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBzZXVzIGRhZG9zLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLCBlc3RlIHNtYXJ0cGhvbmUgc2Vyw6EgcmVkZWZpbmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJWb2PDqiBkaWdpdG91IHNldSBQSU4gaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gXG5cblRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJWb2PDqiBkaWdpdG91IHN1YSBzZW5oYSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBcblxuVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IlZvY8OqIGRlc2VuaG91IHN1YSBzZXF1w6puY2lhIGRlIGRlc2Jsb3F1ZWlvIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIFxuXG5UZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXMgbWFsc3VjZWRpZGFzLCBlc3RlIHRhYmxldCBzZXLDoSByZWRlZmluaWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgc21hcnRwaG9uZSBzZXLDoSByZWRlZmluaWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gRXN0ZSB0YWJsZXQgc2Vyw6EgcmVkZWZpbmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIHNldXMgZGFkb3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEVzdGUgc21hcnRwaG9uZSBzZXLDoSByZWRlZmluaWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3Mgc2V1cyBkYWRvcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyB0YWJsZXQgaW5jb3JyZXRhbWVudGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgdXN1w6FyaW8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyB1c3XDoXJpby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgZXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgdXN1w6FyaW8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyB1c3XDoXJpby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIGVzdGUgdXN1w6FyaW8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyB1c3XDoXJpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIEVzdGUgdXN1w6FyaW8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyB1c3XDoXJpby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJWb2PDqiB0ZW50b3UgZGVzYmxvcXVlYXIgbyBzbWFydHBob25lIGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gRXN0ZSB1c3XDoXJpbyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHVzdcOhcmlvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlZvY8OqIHRlbnRvdSBkZXNibG9xdWVhciBvIHRhYmxldCBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcyxvIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gQXDDs3MgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcywgbyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gdmV6ZXMuIEFww7NzIG1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmFzIG1hbHN1Y2VkaWRhcyxvIHBlcmZpbCBkZSB0cmFiYWxobyBzZXLDoSByZW1vdmlkbywgbyBxdWUgZXhjbHVpcsOhIHRvZG9zIG9zIGRhZG9zIGRvIHBlcmZpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBBcMOzcyBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBtYWxzdWNlZGlkYXMsIG8gcGVyZmlsIGRlIHRyYWJhbGhvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gdGFibGV0IGluY29ycmV0YW1lbnRlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB2ZXplcy4gTyBwZXJmaWwgZGUgdHJhYmFsaG8gc2Vyw6EgcmVtb3ZpZG8sIG8gcXVlIGV4Y2x1aXLDoSB0b2RvcyBvcyBkYWRvcyBkbyBwZXJmaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iVm9jw6ogdGVudG91IGRlc2Jsb3F1ZWFyIG8gc21hcnRwaG9uZSBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdmV6ZXMuIE8gcGVyZmlsIGRlIHRyYWJhbGhvIHNlcsOhIHJlbW92aWRvLCBvIHF1ZSBleGNsdWlyw6EgdG9kb3Mgb3MgZGFkb3MgZG8gcGVyZmlsLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gU2UgZml6ZXIgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGluY29ycmV0YXMsIHNlcsOhIHNvbGljaXRhZG8gcXVlIHZvY8OqIHVzZSBvIGxvZ2luIGRvIEdvb2dsZSBwYXJhIGRlc2Jsb3F1ZWFyIHNldSB0YWJsZXQuXG5cbiBUZW50ZSBub3ZhbWVudGUgZW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiB2ZXplcy4gU2UgZml6ZXIgbWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmFzIGluY29ycmV0YXMsIHNlcsOhIHNvbGljaXRhZG8gcXVlIHZvY8OqIHVzZSBvIGxvZ2luIGRvIEdvb2dsZSBwYXJhIGRlc2Jsb3F1ZWFyLlxuXG4gVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBTZSBmaXplciBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBpbmNvcnJldGFzLCBzZXLDoSBzb2xpY2l0YWRvIHF1ZSB2b2PDqiB1c2UgbyBsb2dpbiBkbyBHb29nbGUgcGFyYSBkZXNibG9xdWVhciBzZXUgdGFibGV0LlxuXG4gVGVudGUgbm92YW1lbnRlIGVtIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJWb2PDqiBkZXNlbmhvdSBzdWEgc2VxdcOqbmNpYSBkZSBkZXNibG9xdWVpbyBpbmNvcnJldGFtZW50ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IHZlemVzLiBTZSBmaXplciBtYWlzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gdGVudGF0aXZhcyBpbmNvcnJldGFzLCBzZXLDoSBzb2xpY2l0YWRvIHF1ZSB2b2PDqiB1c2UgbyBsb2dpbiBkbyBHb29nbGUgcGFyYSBkZXNibG9xdWVhci5cblxuIFRlbnRlIG5vdmFtZW50ZSBlbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNlZ3VuZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ8OzZGlnbyBQSU4gZG8gU0lNIGluY29ycmV0by4gRW50cmUgZW0gY29udGF0byBjb20gYSBvcGVyYWRvcmEgcGFyYSBkZXNibG9xdWVhciBvIGRpc3Bvc2l0aXZvLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Q8OzZGlnbyBQSU4gZG8gU0lNIGluY29ycmV0by4gVGVudGF0aXZhcyByZXN0YW50ZXM6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCmluZGV4IGEwMTc1NjQuLmJkZWQxNjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJSZWludHJvZHVjZcWjaSBjb2R1bCBQVUsgY29yZWN0LiDDjm5jZXJjxINyaWxlIHJlcGV0YXRlIHZvciBkZXphY3RpdmEgZGVmaW5pdGl2IGNhcmR1bCBTSU0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IkNvZHVyaWxlIFBJTiBudSBjb2luY2lkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUHJlYSBtdWx0ZSDDrm5jZXJjxINyaSBkZSBkZXNlbmFyZSBhIG1vZGVsdWx1aSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQcWjaSBpbnRyb2R1cyBpbmNvcmVjdCBjb2R1bCBQSU4gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gb3JpLlxuXG7Djm5jZXJjYcibaSBkaW4gbm91IHBlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IChkZSkgc2VjdW5kZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQcWjaSBpbnRyb2R1cyBpbmNvcmVjdCBwYXJvbGEgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gb3JpLiBcblxuw45uY2VyY2HIm2kgZGluIG5vdSBwZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiAoZGUpIHNlY3VuZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IkHFo2kgZGVzZW5hdCBpbmNvcmVjdCBtb2RlbHVsIHBlbnRydSBkZWJsb2NhcmUgZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gb3JpLiBcblxuw45uY2VyY2HIm2kgZGluIG5vdSBwZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiAoZGUpIHNlY3VuZGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGFibGV0ZWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldciZaXRlLCBhY2Vhc3TEgyB0YWJsZXTEgyB2YSBmaSByZXNldGF0xIMsIGlhciB0b2F0ZSBkYXRlbGUgYWNlc3RlaWEgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRlbGVmb251bHVpLiBEdXDEgyDDrm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgbmVyZXXImWl0ZSwgYWNlc3QgdGVsZWZvbiB2YSBmaSByZXNldGF0LCBpYXIgdG9hdGUgZGF0ZWxlIGFjZXN0dWlhIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQcWjaSBpbnRyb2R1cyBpbmNvcmVjdCBjb2R1bCBQSU4gZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBvcmkuXG5cbsOObmNlcmNhyJtpIGRpbiBub3UgcGVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiAoZGUpIHNlY3VuZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkHFo2kgaW50cm9kdXMgaW5jb3JlY3QgcGFyb2xhIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gb3JpLiBcblxuw45uY2VyY2HIm2kgZGluIG5vdSBwZXN0ZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IChkZSkgc2VjdW5kZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQcWjaSBkZXNlbmF0IGluY29yZWN0IG1vZGVsdWwgcGVudHJ1IGRlYmxvY2FyZSBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG9yaS4gXG5cbsOObmNlcmNhyJtpIGRpbiBub3UgcGVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiAoZGUpIHNlY3VuZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIGluY29yZWN0ZSBkZSBkZWJsb2NhcmUgYSB0YWJsZXRlaS4gRHVwxIMgw65uY8SDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgbmVyZXXImWl0ZSwgYWNlYXN0xIMgdGFibGV0xIMgdmEgZmkgcmVzZXRhdMSDLCBpYXIgdG9hdGUgZGF0ZWxlIGFjZXN0ZWlhIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJByJtpIGVmZWN0dWF0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRlbGVmb251bHVpLiBEdXDEgyDDrm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldciZaXRlLCBhY2VzdCB0ZWxlZm9uIHZhIGZpIHJlc2V0YXQsIGlhciB0b2F0ZSBkYXRlbGUgYWNlc3R1aWEgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIGluY29yZWN0ZSBkZSBkZWJsb2NhcmUgYSB0YWJsZXRlaS4gQWNlYXN0xIMgdGFibGV0xIMgdmEgZmkgcmVzZXRhdMSDLCBpYXIgdG9hdGUgZGF0ZWxlIGFjZXN0ZWlhIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIGluY29yZWN0ZSBkZSBkZWJsb2NhcmUgYSB0ZWxlZm9udWx1aS4gQWNlc3QgdGVsZWZvbiB2YSBmaSByZXNldGF0LCBpYXIgdG9hdGUgZGF0ZWxlIGFjZXN0dWlhIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRhYmxldGVpLiBEdXDEgyDDrm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgbmVyZXXImWl0ZSwgYWNlc3QgdXRpbGl6YXRvciB2YSBmaSBlbGltaW5hdCwgaWFyIHRvYXRlIGRhdGVsZSB1dGlsaXphdG9ydWx1aSB2b3IgZmkgyJl0ZXJzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGVsZWZvbnVsdWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldciZaXRlLCBhY2VzdCB1dGlsaXphdG9yIHZhIGZpIGVsaW1pbmF0LCBpYXIgdG9hdGUgZGF0ZWxlIHV0aWxpemF0b3J1bHVpIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGFibGV0ZWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1yJlpdGUsIGFjZXN0IHV0aWxpemF0b3IgdmEgZmkgZWxpbWluYXQsIGlhciB0b2F0ZSBkYXRlbGUgdXRpbGl6YXRvcnVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGVsZWZvbnVsdWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1yJlpdGUsIGFjZXN0IHV0aWxpemF0b3IgdmEgZmkgZWxpbWluYXQsIGlhciB0b2F0ZSBkYXRlbGUgdXRpbGl6YXRvcnVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJByJtpIGVmZWN0dWF0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGFibGV0ZWkuIEFjZXN0IHV0aWxpemF0b3IgdmEgZmkgZWxpbWluYXQsIGlhciB0b2F0ZSBkYXRlbGUgdXRpbGl6YXRvcnVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRlbGVmb251bHVpLiBBY2VzdCB1dGlsaXphdG9yIHZhIGZpIGVsaW1pbmF0LCBpYXIgdG9hdGUgZGF0ZWxlIHV0aWxpemF0b3J1bHVpIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRhYmxldGVpLiBEdXDEgyDDrm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgbmVyZXXImWl0ZSwgcHJvZmlsdWwgZGUgc2VydmljaXUgdmEgZmkgZWxpbWluYXQsIGlhciB0b2F0ZSBkYXRlbGUgcHJvZmlsdWx1aSB2b3IgZmkgyJl0ZXJzZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGVsZWZvbnVsdWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldciZaXRlLCBwcm9maWx1bCBkZSBzZXJ2aWNpdSB2YSBmaSBlbGltaW5hdCwgaWFyIHRvYXRlIGRhdGVsZSBwcm9maWx1bHVpIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGFibGV0ZWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1yJlpdGUsIHByb2ZpbHVsIGRlIHNlcnZpY2l1IHZhIGZpIGVsaW1pbmF0LCBpYXIgdG9hdGUgZGF0ZWxlIHByb2ZpbHVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkHIm2kgZWZlY3R1YXQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGVsZWZvbnVsdWkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1yJlpdGUsIHByb2ZpbHVsIGRlIHNlcnZpY2l1IHZhIGZpIGVsaW1pbmF0LCBpYXIgdG9hdGUgZGF0ZWxlIHByb2ZpbHVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJByJtpIGVmZWN0dWF0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBpbmNvcmVjdGUgZGUgZGVibG9jYXJlIGEgdGFibGV0ZWkuIFByb2ZpbHVsIGRlIHNlcnZpY2l1IHZhIGZpIGVsaW1pbmF0LCBpYXIgdG9hdGUgZGF0ZWxlIHByb2ZpbHVsdWkgdm9yIGZpIMiZdGVyc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iQcibaSBlZmVjdHVhdCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgaW5jb3JlY3RlIGRlIGRlYmxvY2FyZSBhIHRlbGVmb251bHVpLiBQcm9maWx1bCBkZSBzZXJ2aWNpdSB2YSBmaSBlbGltaW5hdCwgaWFyIHRvYXRlIGRhdGVsZSBwcm9maWx1bHVpIHZvciBmaSDImXRlcnNlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJBxaNpIGRlc2VuYXQgaW5jb3JlY3QgbW9kZWx1bCBwZW50cnUgZGVibG9jYXJlIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG9yaS4gRHVwxIMgw65uY8SDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IMOubmNlcmPEg3JpIG5lcmV1xZ9pdGUsIHZpIHNlIHZhIHNvbGljaXRhIHPEgyBkZWJsb2NhxaNpIHRhYmxldGEgY3UgYWp1dG9ydWwgdW51aSBjb250IGRlIGUtbWFpbC5cblxuIMOObmNlcmNhyJtpIGRpbiBub3UgcGVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gKGRlKSBzZWN1bmRlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQcWjaSBkZXNlbmF0IGluY29yZWN0IG1vZGVsdWwgcGVudHJ1IGRlYmxvY2FyZSBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBvcmkuIER1cMSDIMOubmPEgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldcWfaXRlLCB2aSBzZSB2YSBzb2xpY2l0YSBzxIMgZGVibG9jYcWjaSB0ZWxlZm9udWwgY3UgYWp1dG9ydWwgdW51aSBjb250IGRlIGUtbWFpbC5cblxuIMOObmNlcmNhyJtpIGRpbiBub3UgcGVzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gKGRlKSBzZWN1bmRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJBxaNpIGRlc2VuYXQgaW5jb3JlY3QgbW9kZWx1bCBwZW50cnUgZGVibG9jYXJlIGRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gb3JpLiBEdXDEgyDDrm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDDrm5jZXJjxINyaSBuZXJldcWfaXRlLCB2aSBzZSB2YSBzb2xpY2l0YSBzxIMgZGVibG9jYcWjaSB0YWJsZXRhIGN1IGFqdXRvcnVsIHVudWkgY29udCBkZSBlLW1haWwuXG5cbiDDjm5jZXJjYcibaSBkaW4gbm91IHBlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gKGRlKSBzZWN1bmRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQcWjaSBkZXNlbmF0IGluY29yZWN0IG1vZGVsdWwgcGVudHJ1IGRlYmxvY2FyZSBkZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG9yaS4gRHVwxIMgw65uY8SDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gw65uY2VyY8SDcmkgbmVyZXXFn2l0ZSwgdmkgc2UgdmEgc29saWNpdGEgc8SDIGRlYmxvY2HFo2kgdGVsZWZvbnVsIGN1IGFqdXRvcnVsIHVudWkgY29udCBkZSBlLW1haWwuXG5cbiDDjm5jZXJjYcibaSBkaW4gbm91IHBlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gKGRlKSBzZWN1bmRlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iQ29kdWwgUElOIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIENvbnRhY3RhyJtpIG9wZXJhdG9ydWwgcGVudHJ1IGEgdsSDIGRlYmxvY2EgZGlzcG96aXRpdnVsLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+Q29kdWwgUElOIHBlbnRydSBjYXJkdWwgU0lNIGVzdGUgaW5jb3JlY3QuIFYtYXUgbWFpIHLEg21hcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDDrm5jZXJjxINyaS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCAyMjZmNTY2Li43MTNmMzk5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0JLQstC10LTQuNGC0LUg0L/RgNCw0LLQuNC70YzQvdGL0LkgUFVLLdC60L7QtC4g0J/QvtGB0LvQtSDQvdC10YHQutC+0LvRjNC60LjRhSDQvdC10YPQtNCw0YfQvdGL0YUg0L/QvtC/0YvRgtC+0LogU0lNLdC60LDRgNGC0LAg0LHRg9C00LXRgiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOLdC60L7QtNGLINC90LUg0YHQvtCy0L/QsNC00LDRjtGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i0KHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQv9C+0L/Ri9GC0L7QuiDQstCy0L7QtNCwINCz0YDQsNGE0LjRh9C10YHQutC+0LPQviDQutC70Y7Rh9CwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LDQtyDQvdC10LLQtdGA0L3QviDRg9C60LDQt9Cw0LvQuCBQSU4t0LrQvtC0LiBcblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LDQtyDQvdC10LLQtdGA0L3QviDRg9C60LDQt9Cw0LvQuCDQv9Cw0YDQvtC70YwuXG5cbtCf0L7QstGC0L7RgCDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQui4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0JLRiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDRgNCw0Lcg0L3QtdCy0LXRgNC90L4g0YPQutCw0LfQsNC70Lgg0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQutC70Y7Rhy5cblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC/0LvQsNC90YjQtdGC0L3Ri9C5INCf0Jo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQvtGB0YLQsNCy0YjQuNGF0YHRjyDQv9C+0L/Ri9GC0L7QujogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uINCV0YHQu9C4INC+0L3QuCDRgtCw0LrQttC1INCx0YPQtNGD0YIg0L3QtdGD0YHQv9C10YjQvdGL0LzQuCwg0L3QsNGB0YLRgNC+0LnQutC4INC/0LvQsNC90YjQtdGC0L3QvtCz0L4g0J/QmiDQsdGD0LTRg9GCINGB0LHRgNC+0YjQtdC90YssINCwINCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1wqDigJMg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQldGB0LvQuCDQvtC90Lgg0YLQsNC60LbQtSDQsdGD0LTRg9GCINC90LXRg9GB0L/QtdGI0L3Ri9C80LgsINC90LDRgdGC0YDQvtC50LrQuCDRgtC10LvQtdGE0L7QvdCwINCx0YPQtNGD0YIg0YHQsdGA0L7RiNC10L3Riywg0LAg0LLRgdC1INC10LPQviDQtNCw0L3QvdGL0LXCoOKAkyDRg9C00LDQu9C10L3Riy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCS0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRgNCw0Lcg0L3QtdCy0LXRgNC90L4g0YPQutCw0LfQsNC70LggUElOLdC60L7QtC4gXG5cbtCf0L7QstGC0L7RgCDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YDQsNC3INC90LXQstC10YDQvdC+INGD0LrQsNC30LDQu9C4INC/0LDRgNC+0LvRjC5cblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+ItCS0YsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDRgNCw0Lcg0L3QtdCy0LXRgNC90L4g0YPQutCw0LfQsNC70Lgg0LPRgNCw0YTQuNGH0LXRgdC60LjQuSDQutC70Y7Rhy5cblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0L/Qu9Cw0L3RiNC10YLQvdGL0Lkg0J/QmjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uINCV0YHQu9C4INC+0L3QuCDRgtCw0LrQttC1INCx0YPQtNGD0YIg0L3QtdGD0YHQv9C10YjQvdGL0LzQuCwg0L3QsNGB0YLRgNC+0LnQutC4INC/0LvQsNC90YjQtdGC0L3QvtCz0L4g0J/QmiDQsdGD0LTRg9GCINGB0LHRgNC+0YjQtdC90YssINCwINCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1wqDigJMg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQvtGB0YLQsNCy0YjQuNGF0YHRjyDQv9C+0L/Ri9GC0L7QujogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4g0JXRgdC70Lgg0L7QvdC4INGC0LDQutC20LUg0LHRg9C00YPRgiDQvdC10YPRgdC/0LXRiNC90YvQvNC4LCDQvdCw0YHRgtGA0L7QudC60Lgg0YLQtdC70LXRhNC+0L3QsCDQsdGD0LTRg9GCINGB0LHRgNC+0YjQtdC90YssINCwINCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1wqDigJMg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+ItCU0L7RgdGC0LjQs9C90YPRgtC+INC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQvdC10YPQtNCw0YfQvdGL0YUg0L/QvtC/0YvRgtC+0Log0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQv9C70LDQvdGI0LXRgtC90YvQuSDQn9CaICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQndCw0YHRgtGA0L7QudC60Lgg0L/Qu9Cw0L3RiNC10YLQvdC+0LPQviDQn9CaINCx0YPQtNGD0YIg0YHQsdGA0L7RiNC10L3Riywg0LAg0LLRgdC1INC10LPQviDQtNCw0L3QvdGL0LXCoOKAkyDRg9C00LDQu9C10L3Riy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLQlNC+0YHRgtC40LPQvdGD0YLQviDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0YLQtdC70LXRhNC+0L0gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCd0LDRgdGC0YDQvtC50LrQuCDRgtC10LvQtdGE0L7QvdCwINCx0YPQtNGD0YIg0YHQsdGA0L7RiNC10L3Riywg0LAg0LLRgdC1INC10LPQviDQtNCw0L3QvdGL0LXCoOKAkyDRg9C00LDQu9C10L3Riy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10YPQtNCw0YfQvdGL0YUg0L/QvtC/0YvRgtC+0Log0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQv9C70LDQvdGI0LXRgtC90YvQuSDQn9CaOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQldGB0LvQuCDQvtC90Lgg0YLQsNC60LbQtSDQsdGD0LTRg9GCINC90LXRg9GB0L/QtdGI0L3Ri9C80LgsINCw0LrQutCw0YPQvdGCINGN0YLQvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQldGB0LvQuCDQvtC90Lgg0YLQsNC60LbQtSDQsdGD0LTRg9GCINC90LXRg9GB0L/QtdGI0L3Ri9C80LgsINCw0LrQutCw0YPQvdGCINGN0YLQvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0L/Qu9Cw0L3RiNC10YLQvdGL0Lkg0J/QmjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JrQvtC70LjRh9C10YHRgtCy0L4g0L7RgdGC0LDQstGI0LjRhdGB0Y8g0L/QvtC/0YvRgtC+0Lo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uINCV0YHQu9C4INC+0L3QuCDRgtCw0LrQttC1INCx0YPQtNGD0YIg0L3QtdGD0YHQv9C10YjQvdGL0LzQuCwg0LDQutC60LDRg9C90YIg0Y3RgtC+0LPQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0LLRgdC1INC10LPQviDQtNCw0L3QvdGL0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3Riy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0YLQtdC70LXRhNC+0L06IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCa0L7Qu9C40YfQtdGB0YLQstC+INC+0YHRgtCw0LLRiNC40YXRgdGPINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiDQldGB0LvQuCDQvtC90Lgg0YLQsNC60LbQtSDQsdGD0LTRg9GCINC90LXRg9GB0L/QtdGI0L3Ri9C80LgsINCw0LrQutCw0YPQvdGCINGN0YLQvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLQlNC+0YHRgtC40LPQvdGD0YLQviDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0L/Qu9Cw0L3RiNC10YLQvdGL0Lkg0J/QmiAoPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+KS4g0JDQutC60LDRg9C90YIg0Y3RgtC+0LPQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0LLRgdC1INC10LPQviDQtNCw0L3QvdGL0LUg0LHRg9C00YPRgiDRg9C00LDQu9C10L3Riy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLQlNC+0YHRgtC40LPQvdGD0YLQviDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0YLQtdC70LXRhNC+0L0gKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCQ0LrQutCw0YPQvdGCINGN0YLQvtCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0JrQvtC70LjRh9C10YHRgtCy0L4g0L3QtdGD0LTQsNGH0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0L/Qu9Cw0L3RiNC10YLQvdGL0Lkg0J/QmjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCa0L7Qu9C40YfQtdGB0YLQstC+INC+0YHRgtCw0LLRiNC40YXRgdGPINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4g0JXRgdC70Lgg0L7QvdC4INGC0LDQutC20LUg0LHRg9C00YPRgiDQvdC10YPRgdC/0LXRiNC90YvQvNC4LCDRgNCw0LHQvtGH0LjQuSDQv9GA0L7RhNC40LvRjCDQuCDQstGB0LUg0LXQs9C+INC00LDQvdC90YvQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10YPQtNCw0YfQvdGL0YUg0L/QvtC/0YvRgtC+0Log0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDRgtC10LvQtdGE0L7QvTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCa0L7Qu9C40YfQtdGB0YLQstC+INC+0YHRgtCw0LLRiNC40YXRgdGPINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4g0JXRgdC70Lgg0L7QvdC4INGC0LDQutC20LUg0LHRg9C00YPRgiDQvdC10YPRgdC/0LXRiNC90YvQvNC4LCDRgNCw0LHQvtGH0LjQuSDQv9GA0L7RhNC40LvRjCDQuCDQstGB0LUg0LXQs9C+INC00LDQvdC90YvQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC/0LvQsNC90YjQtdGC0L3Ri9C5INCf0Jo6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCa0L7Qu9C40YfQtdGB0YLQstC+INC+0YHRgtCw0LLRiNC40YXRgdGPINC/0L7Qv9GL0YLQvtC6OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LiDQldGB0LvQuCDQvtC90Lgg0YLQsNC60LbQtSDQsdGD0LTRg9GCINC90LXRg9GB0L/QtdGI0L3Ri9C80LgsINGA0LDQsdC+0YfQuNC5INC/0YDQvtGE0LjQu9GMINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+ItCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQvtGB0YLQsNCy0YjQuNGF0YHRjyDQv9C+0L/Ri9GC0L7QujogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4g0JXRgdC70Lgg0L7QvdC4INGC0LDQutC20LUg0LHRg9C00YPRgiDQvdC10YPRgdC/0LXRiNC90YvQvNC4LCDRgNCw0LHQvtGH0LjQuSDQv9GA0L7RhNC40LvRjCDQuCDQstGB0LUg0LXQs9C+INC00LDQvdC90YvQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i0JTQvtGB0YLQuNCz0L3Rg9GC0L4g0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC/0LvQsNC90YjQtdGC0L3Ri9C5INCf0JogKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPikuINCg0LDQsdC+0YfQuNC5INC/0YDQvtGE0LjQu9GMINC4INCy0YHQtSDQtdCz0L4g0LTQsNC90L3Ri9C1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i0JTQvtGB0YLQuNCz0L3Rg9GC0L4g0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC90LXRg9C00LDRh9C90YvRhSDQv9C+0L/Ri9GC0L7QuiDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINGC0LXQu9C10YTQvtC9ICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pLiDQoNCw0LHQvtGH0LjQuSDQv9GA0L7RhNC40LvRjCDQuCDQstGB0LUg0LXQs9C+INC00LDQvdC90YvQtSDQsdGD0LTRg9GCINGD0LTQsNC70LXQvdGLLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LDQtyDQvdC10LLQtdGA0L3QviDRg9C60LDQt9Cw0LvQuCDQs9GA0LDRhNC40YfQtdGB0LrQuNC5INC60LvRjtGHLiDQn9C+0YHQu9C1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXQstC10YDQvdGL0YUg0L/QvtC/0YvRgtC+0Log0LTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4INC/0LvQsNC90YjQtdGC0L3QvtCz0L4g0J/QmiDQv9C+0YLRgNC10LHRg9C10YLRgdGPINCy0L7QudGC0Lgg0LIg0LDQutC60LDRg9C90YIgR29vZ2xlLlxuXG7Qn9C+0LLRgtC+0YAg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INGA0LDQtyDQvdC10LLQtdGA0L3QviDRg9C60LDQt9Cw0LvQuCDQs9GA0LDRhNC40YfQtdGB0LrQuNC5INC60LvRjtGHLiDQn9C+0YHQu9C1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXQstC10YDQvdGL0YUg0L/QvtC/0YvRgtC+0Log0LTQu9GPINGA0LDQt9Cx0LvQvtC60LjRgNC+0LLQutC4INGC0LXQu9C10YTQvtC90LAg0L/QvtGC0YDQtdCx0YPQtdGC0YHRjyDQstC+0LnRgtC4INCyINCw0LrQutCw0YPQvdGCIEdvb2dsZS5cblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YDQsNC3INC90LXQstC10YDQvdC+INGD0LrQsNC30LDQu9C4INCz0YDQsNGE0LjRh9C10YHQutC40Lkg0LrQu9GO0YcuINCf0L7RgdC70LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10LLQtdGA0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INC00LvRjyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LrQuCDQv9C70LDQvdGI0LXRgtC90L7Qs9C+INCf0Jog0L/QvtGC0YDQtdCx0YPQtdGC0YHRjyDQstC+0LnRgtC4INCyINCw0LrQutCw0YPQvdGCIEdvb2dsZS5cblxu0J/QvtCy0YLQvtGAINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDRgdC10LouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQktGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0YDQsNC3INC90LXQstC10YDQvdC+INGD0LrQsNC30LDQu9C4INCz0YDQsNGE0LjRh9C10YHQutC40Lkg0LrQu9GO0YcuINCf0L7RgdC70LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQvdC10LLQtdGA0L3Ri9GFINC/0L7Qv9GL0YLQvtC6INC00LvRjyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LrQuCDRgtC10LvQtdGE0L7QvdCwINC/0L7RgtGA0LXQsdGD0LXRgtGB0Y8g0LLQvtC50YLQuCDQsiDQsNC60LrQsNGD0L3RgiBHb29nbGUuXG5cbtCf0L7QstGC0L7RgCDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J3QtdCy0LXRgNC90YvQuSBQSU4t0LrQvtC0LiDQntCx0YDQsNGC0LjRgtC10YHRjCDQuiDQvtC/0LXRgNCw0YLQvtGA0YMg0YHQstGP0LfQuCwg0YfRgtC+0LHRiyDRgNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMIFNJTS3QutCw0YDRgtGDLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0J3QtdCy0LXRgNC90YvQuSBQSU4t0LrQvtC0LiDQntGB0YLQsNC70LDRgdGMIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC/0L7Qv9GL0YLQutCwLiDQn9C+0YHQu9C1INGN0YLQvtCz0L4gU0lNLdC60LDRgNGC0LAg0LHRg9C00LXRgiDQt9Cw0LHQu9C+0LrQuNGA0L7QstCw0L3QsCDQuCDQstCw0Lwg0L/RgNC40LTQtdGC0YHRjyDQvtCx0YDQsNGC0LjRgtGM0YHRjyDQuiDQvtC/0LXRgNCw0YLQvtGA0YMg0YHQstGP0LfQuC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCmluZGV4IDBhZmRhMjQuLjRlYzAyNWFmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgtrHgt5Lgt4Dgt5Dgtrvgtq/gt5IgUFVLIOC2muC3muC2reC2uiDgtrHgt5Dgt4Dgtq0g4LaH4Lat4LeU4La94Lat4LeKIOC2muC2u+C2seC3iuC2sS4g4Lax4LeQ4LeA4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeZ4Lax4LeKIFNJTSDgtpHgtpog4LeD4LeK4Lau4LeS4La74LeA4La4IOC2heC2tuC2vSDgtprgtrvgtrrgt5IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiDgtprgt5rgtq0g4Lac4LeQ4La94La04LeTIOC2seC3kOC2rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuC2u+C2p+C3jyDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4LeS4La74LeT4La44LeKIOC3gOC3kOC2qeC3kuC2uiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LaU4La2IFBJTiDgtoXgtoLgtprgtrogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4LeP4La74La64Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtqfgtrrgt5LgtrTgt4og4Laa4Lec4LanIOC2h+C2rS5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LaU4La24Lac4LeaIOC2uOC3lOC2u+C2tOC2r+C2uiDgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIOC2p+C2uuC3kuC2tOC3iiDgtprgtrsg4LaH4LatLiBcblxu4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2pyDgtrTgt4Pgt5Tgt4Ag4Lax4LeQ4LeA4LatIOC2i+C2reC3iuC3g+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuC2lOC2tiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeKIOC2h+C2reC3lOC3heC2rSDgtrHgt5Dgt4Dgtq0g4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgtpTgtrYg4LaU4La24Lac4LeaIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LeD4Laa4LeD4LeKIOC2muC3meC2u+C3meC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7LCDgtpHgtrjgtpzgt5LgtrHgt4og4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4LeQ4La44LeZ4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeQ4LeA4LatIOC3g+C2muC3g+C3iiDgtprgt5ngtrvgt5ngtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uywg4LaR4La44Lac4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C3kOC2uOC3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgtpTgtrYgUElOIOC2heC2guC2muC2uiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC3j+C2u+C2uuC2muC3iiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC3nOC2pyDgtofgtq0uXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4La44LeU4La74La04Lav4La6IOC2lOC2tiDgt4Dgt5Dgtrvgtq/gt5Lgtrrgtqcg4Lan4La64LeS4La04LeKIOC2muC2uyDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgtqcg4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgtpTgtrYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgt4/gtrvgtrrgtprgt4og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIFxuXG7gtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgtprgt4og4LaH4Lat4LeU4LeF4LatIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2p+C3kOC2tuC3iuC2veC2p+C2uiDgtrHgt5Dgt4Dgtq0g4LeD4Laa4LeD4LeKIOC2muC3meC2u+C3meC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7LCDgtpHgtrjgtpzgt5LgtrHgt4og4LeD4LeS4La64La94LeUIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4LeQ4La44LeZ4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Lav4LeU4La74Laa4Lau4Lax4La6IOC2seC3kOC3gOC2rSDgt4Pgtprgt4Pgt4og4Laa4LeZ4La74LeZ4Lax4LeUIOC2h+C2reC3kiDgtoXgtq3gtrssIOC2keC2uOC2nOC3kuC2seC3iiDgt4Pgt5Lgtrrgtr3gt5Qg4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLgtpTgtrYg4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LeD4LeS4La64La94LeU4La4IOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4La44La44LeS4Lax4LeKLCDgtrjgt5ngtrgg4Lan4LeQ4La24LeK4La94Lan4La6IOC2seC3kOC3gOC2rSDgt4Pgt5Dgtprgt4Pgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrjgt5LgtrHgt4osIOC2uOC3meC2uCDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4Lax4LeQ4LeA4LatIOC3g+C3kOC2muC3g+C3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt48g4LaJ4LeA4Lat4LeKIOC3gOC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7LCDgtpHgtrjgtpzgt5LgtrHgt4og4LeD4LeS4La64La94LeUIOC2tOC2u+C3kuC3geC3k+C2veC2miDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C3kOC2uOC3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4La74Laa4LeKIOC3gOC3kOC2u+C2r+C3kiDgt4Dgt4Hgtrrgt5ngtrHgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC2heC3g+C3j+C2u+C3iuC2ruC2miDgtovgtq3gt4rgt4Pgt4/gt4QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4La04La74LeS4LeB4LeT4La94Laa4La64LePIOC2ieC3gOC2reC3iiDgt4DgtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uywg4LaR4La44Lac4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2tOC2u+C3kuC3geC3k+C2veC2muC2uuC3jyDgtongt4Dgtq3gt4og4LeA4Lax4LeUIOC2h+C2reC3kiDgtoXgtq3gtrssIOC2keC2uOC2nOC3kuC2seC3iiDgt4Pgt5Lgtrrgtr3gt5Qg4La04La74LeS4LeB4LeT4La94LaaIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4LeQ4La44LeZ4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4LaU4La2IOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4La04La74LeS4LeB4LeT4La94Laa4La64LePIOC2ieC3gOC2reC3iiDgt4DgtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uywg4LaR4La44Lac4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4La74Laa4LeKIOC3gOC3kOC2u+C2r+C3kiDgt4Dgt4Hgtrrgt5ngtrHgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrjgt5LgtrHgt4osIOC2uOC3meC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt48g4La44Laa4LePIOC2r+C3kOC2uOC3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4LaU4La2IOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LeA4La74Laa4LeKIOC3gOC3kOC2u+C2r+C3kiDgt4Dgt4Hgtrrgt5ngtrHgt4og4LaL4Lat4LeK4LeD4LeP4LeEIOC2muC2uyDgtofgtq0uIOC3g+C3kuC2uuC2veC3lOC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtpog4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gtrjgtrjgt5LgtrHgt4osIOC2uOC3meC2uCDgtrTgtrvgt5Lgt4Hgt5Pgtr3gtprgtrrgt48g4La44Laa4LePIOC2r+C3kOC2uOC3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgt4Dgtrvgtprgt4og4LeA4LeQ4La74Lav4LeSIOC3gOC3geC2uuC3meC2seC3iiDgtovgtq3gt4rgt4Pgt4/gt4Qg4Laa4La7IOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtprgt4/gtrvgt4rgtrrgt4/gtr0g4La04LeQ4Lat4LeS4Laa4LapIOC2ieC3gOC2reC3iiDgt4DgtrHgt5Qg4LaH4Lat4LeSIOC2heC2reC2uywg4LaR4La44Lac4LeS4Lax4LeKIOC3g+C3kuC2uuC2veC3lCDgtrTgt5Dgtq3gt5Lgtprgtqkg4Lav4Lat4LeK4LatIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgtpTgtrYg4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3kuC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2muC3j+C2u+C3iuC2uuC3j+C2vSDgtrTgt5Dgtq3gt5Lgtprgtqkg4LaJ4LeA4Lat4LeKIOC3gOC2seC3lCDgtofgtq3gt5Ig4LaF4Lat4La7LCDgtpHgtrjgtpzgt5LgtrHgt4og4LeD4LeS4La64La94LeUIOC2tOC3kOC2reC3kuC2muC2qSDgtq/gtq3gt4rgtq0g4La44Laa4LePIOC2r+C3kOC2uOC3meC2seC3lCDgtofgtq0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Laa4LeP4La74LeK4La64LeP4La9IOC2tOC3kOC2reC3kuC2muC2qSDgtongt4Dgtq3gt4og4LeA4Lax4LeUIOC2h+C2reC3kiDgtoXgtq3gtrssIOC2keC2uOC2nOC3kuC2seC3iiDgt4Pgt5Lgtrrgtr3gt5Qg4La04LeQ4Lat4LeS4Laa4LapIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4LeQ4La44LeZ4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4LaU4La2IOC2lOC2tuC2nOC3miDgtq/gt5Tgtrvgtprgtq7gtrHgtrog4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC2pyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4Laa4LeP4La74LeK4La64LeP4La9IOC2tOC3kOC2reC3kuC2muC2qSDgtongt4Dgtq3gt4og4LeA4Lax4LeUIOC2h+C2reC3kiDgtoXgtq3gtrssIOC2keC2uOC2nOC3kuC2seC3iiDgt4Pgt5Lgtrrgtr3gt5Qg4La04LeQ4Lat4LeS4Laa4LapIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4LeQ4La44LeZ4Lax4LeUIOC2h+C2rS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04LeQ4Lat4LeS4Laa4LapIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4La44La44LeS4Lax4LeKLCDgtprgt4/gtrvgt4rgtrrgt4/gtr0g4La04LeQ4Lat4LeS4Laa4LapIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuC2lOC2tiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5PgtrjgtqcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC3gOC2u+C2muC3iiDgt4Dgt5Dgtrvgtq/gt5Ig4LeA4LeB4La64LeZ4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrsg4LaH4LatLiDgt4Pgt5Lgtrrgtr3gt5Tgtrgg4La04LeQ4Lat4LeS4Laa4LapIOC2r+C2reC3iuC2rSDgtrjgtprgt48g4Lav4La44La44LeS4Lax4LeKLCDgtprgt4/gtrvgt4rgtrrgt4/gtr0g4La04LeQ4Lat4LeS4Laa4LapIOC2uOC2muC3jyDgtq/gt5Dgtrjgt5ngtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtpTgtrYg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3kuC2uOC3miDgtrvgtqfgt4/gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC3gOC3kOC2u+C2r+C3kuC2uuC2pyDgtofgtrMg4LaH4LatLiDgtq3gt4Dgtq3gt4og4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3j+C3hCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgtprgt5LgtrHgt4og4La04LeD4LeU4LeALCDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2nOC3kuC2q+C3lOC2uCDgtrfgt4/gt4Dgt5Lgtq3gt48g4Laa4La74La44LeS4Lax4LeKIOC2lOC2tuC2nOC3miDgtqfgt5Dgtrbgt4rgtr3gtqfgtrrgt5og4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3k+C2uOC2pyDgtpTgtrbgtqcg4La04LeA4LeD4Lax4LeUIOC2h+C2rS5cblxuIOC2seC3kOC3gOC2rSDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC3gOC2reC3j+C3gOC2muC3iiDgtpTgtrbgtpzgt5og4LaF4Lac4LeU4LeF4LeUIOC3hOC3kOC2u+C3k+C2uOC3miDgtrvgtqfgt4/gt4Ag4LaH4LazIOC2h+C2rS4g4LaF4LeD4LeP4La74LeK4Lau4LaaIOC2i+C2reC3iuC3g+C3hCDgtprgt5Lgtrvgt5Pgtrjgt4ogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaU4La24Lac4LeaIOC2ii3gtq3gt5DgtrTgt5Dgtr3gt4og4La94LeS4La04LeS4Lax4La6IOC2t+C3j+C3gOC3kuC2reC2uuC3meC2seC3iiDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lau4Lax4La6IOC2heC2nOC3lOC3heC3lCDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeZ4Lax4LeKIOC2heC3g+C2uuC3ki5cblxuIOC2reC2reC3iuC2tOC2uyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLgtpTgtrYg4LaF4Lac4LeU4LeF4LeUIOC2h+C2u+C3kuC2uOC3miDgtrvgtqfgt4/gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgt4Dgtq3gt4/gt4Dgtprgt4og4LeA4LeQ4La74Lav4LeS4La64LanIOC2h+C2syDgtofgtq0uIOC2reC3gOC2reC3iiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeP4LeEIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2tOC3g+C3lOC3gCwg4LaKLeC2reC3kOC2tOC3kOC2veC3iiDgtpzgt5Lgtqvgt5Tgtrgg4La34LeP4LeA4LeS4Lat4LePIOC2muC2u+C2uOC3kuC2seC3iiDgtpTgtrbgtpzgt5og4Lan4LeQ4La24LeK4La94Lan4La64LeaIOC2heC2nOC3lOC3heC3lCDgtofgtrvgt5Pgtrjgtqcg4LaU4La24LanIOC2tOC3gOC3g+C2seC3lCDgtofgtq0uXG5cbiDgtrHgt5Dgt4Dgtq0g4Lat4Lat4LeK4La04La7IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Laa4LeS4Lax4LeKIOC2i+C2reC3iuC3g+C3j+C3hCDgtprgtrvgtrHgt4rgtrEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgtpTgtrYg4LeA4LeQ4La74Lav4LeS4La64LanIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LeA4Lat4LeP4LeA4Laa4LeKIOC2lOC2tuC2nOC3miDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LeaIOC2u+C2p+C3j+C3gCDgtofgtrMg4LaH4LatLiDgtoXgt4Pgt4/gtrvgt4rgtq7gtpog4LaL4Lat4LeK4LeD4LeEIOC2muC3kuC2u+C3k+C2uOC3iiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC2seC3iiDgtrTgt4Pgt5Tgt4AsIOC2lOC2tuC2nOC3miDgtoot4Lat4LeQ4La04LeQ4La94LeKIOC2veC3kuC2tOC3kuC2seC2uiDgtrfgt4/gt4Dgt5Lgtq3gtrrgt5ngtrHgt4og4LaU4La24Lac4LeaIOC2r+C3lOC2u+C2muC2ruC2seC2uiDgtoXgtpzgt5Tgt4Xgt5Qg4LeE4LeQ4La74LeT4La44LanIOC2lOC2tuC2nOC3meC2seC3iiDgtoXgt4Pgtrrgt5IuXG5cbiDgtq3gtq3gt4rgtrTgtrsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgtrHgt4og4La04LeD4LeU4LeAIOC2seC3kOC3gOC2rSDgtovgtq3gt4rgt4Pgt4Qg4Laa4La74Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4LeA4LeQ4La74Lav4LeTIFNJTSBQSU4g4Laa4Lea4Lat4La64Laa4LeSLCDgtpTgtrbgtpzgt5og4Lav4LeU4La74Laa4Lat4Lax4La64LeaIOC2heC2n+C3lOC2vSDgt4Tgt5Dgtrvgt5Pgtrjgtqcg4LaU4La24Lac4LeaIOC3gOC3j+C3hOC2muC2uuC3jyDgtpTgtrYg4Lav4LeQ4Lax4LeKIOC3g+C2uOC3iuC2tuC2seC3iuC2sCDgtprgtrvgtpzgtq0g4La64LeU4Lat4LeU4La6LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4LeA4LeQ4La74Lav4LeSIFNJTSBQSU4g4Laa4Lea4Lat4La64Laa4LeSLCDgtpTgtrbgtqcg4LaL4Lat4LeK4LeD4LeP4LeE4La64Lax4LeKIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC2muC3iiDgtongtq3gt5Lgtrvgt5Lgt4Ag4LaH4LatLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCmluZGV4IDQ4MjVlNGEuLmY5NDcwZWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJabm92YSB6YWRhanRlIHNwcsOhdm55IGvDs2QgUFVLLiBPcGFrb3ZhbsOpIHBva3VzeSB6YWvDocW+dSBTSU0ga2FydHUgbmF0cnZhbG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IkvDs2R5IFBJTiBzYSBuZXpob2R1asO6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUHLDrWxpxaEgdmXEvmEgcG9rdXNvdiBvIG5ha3Jlc2xlbmllIHZ6b3J1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBzdGUgemFkYWxpIG5lc3Byw6F2bnkga8OzZCBQSU4uIFxuXG5Ta8O6c3RlIHRvIHpub3ZhIG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3LDoXQgc3RlIHphZGFsaSBuZXNwcsOhdm5lIGhlc2xvLiBcblxuU2vDunN0ZSB0byB6bm92YSBvwqA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBzdGUgcG91xb5pbGkgbmVzcHLDoXZueSBiZXpwZcSNbm9zdG7DvSB2em9yLiBcblxuU2vDunN0ZSB0byB6bm92YSBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pIGJ1ZGUgdGVudG8gdGFibGV0IG9ibm92ZW7DvSBhIHbFoWV0a3kgw7pkYWplLCBrdG9yw6kgc8O6IHYgxYhvbSB1bG/FvmVuw6ksIGJ1ZMO6IG9kc3Ryw6FuZW7DqS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gKSBidWRlIHRlbnRvIHRlbGVmw7NuIG9ibm92ZW7DvSBhIHbFoWV0a3kgw7pkYWplLCBrdG9yw6kgc8O6IHYgxYhvbSB1bG/FvmVuw6ksIGJ1ZMO6IG9kc3Ryw6FuZW7DqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3LDoXQgc3RlIHphZGFsaSBuZXNwcsOhdm55IGvDs2QgUElOLiBcblxuU2vDunN0ZSB0byB6bm92YSBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcsOhdCBzdGUgemFkYWxpIG5lc3Byw6F2bmUgaGVzbG8uIFxuXG5Ta8O6c3RlIHRvIHpub3ZhIG/CoDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcsOhdCBzdGUgcG91xb5pbGkgbmVzcHLDoXZueSBiZXpwZcSNbm9zdG7DvSB2em9yLiBcblxuU2vDunN0ZSB0byB6bm92YSBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJUZWxlZsOzbiBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3LDoXQgbmVzcHLDoXZuZSBvZG9ta27DusWlLiBQbyDEj2FsxaHDrWNoIG5lw7pzcGXFoW7DvWNoIHBva3Vzb2NoIChwb8SNZXQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4pIGJ1ZGUgdGVudG8gdGFibGV0IG9ibm92ZW7DvSBhIHbFoWV0a3kgw7pkYWplLCBrdG9yw6kgc8O6IHYgxYhvbSB1bG/FvmVuw6ksIGJ1ZMO6IG9kc3Ryw6FuZW7DqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LWtyw6F0IG5lc3Byw6F2bmUgb2RvbWtuw7rFpS4gUG8gxI9hbMWhw61jaCBuZcO6c3BlxaFuw71jaCBwb2t1c29jaCAocG/EjWV0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+ICkgYnVkZSB0ZW50byB0ZWxlZsOzbiBvYm5vdmVuw70gYSB2xaFldGt5IMO6ZGFqZSwga3RvcsOpIHPDuiB2IMWIb20gdWxvxb5lbsOpLCBidWTDuiBvZHN0csOhbmVuw6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlRhYmxldCBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFRhYmxldCBidWRlIG9ibm92ZW7DvSBhIHbFoWV0a3kgw7pkYWplLCBrdG9yw6kgc8O6IHYgxYhvbSB1bG/FvmVuw6ksIGJ1ZMO6IG9kc3Ryw6FuZW7DqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJUZWxlZsOzbiBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFRlbGVmw7NuIGJ1ZGUgb2Jub3ZlbsO9IGEgdsWhZXRreSDDumRhamUsIGt0b3LDqSBzw7ogdiDFiG9tIHVsb8W+ZW7DqSwgYnVkw7ogb2RzdHLDoW5lbsOpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlRhYmxldCBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LWtyw6F0IG5lc3Byw6F2bmUgb2RvbWtuw7rFpS4gUG8gxI9hbMWhw61jaCBuZcO6c3BlxaFuw71jaCBwb2t1c29jaCAocG/EjWV0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiApIGJ1ZGUgdGVudG8gcG91xb7DrXZhdGXEviBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSBqZWhvIMO6ZGFqZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pIGJ1ZGUgdGVudG8gcG91xb7DrXZhdGXEviBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSBqZWhvIMO6ZGFqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJUYWJsZXQgc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LWtyw6F0IG5lc3Byw6F2bmUgb2RvbWtuw7rFpS4gUG8gxI9hbMWhw61jaCBuZcO6c3BlxaFuw71jaCBwb2t1c29jaCAocG/EjWV0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+ICkgYnVkZSB0ZW50byBwb3XFvsOtdmF0ZcS+IG9kc3Ryw6FuZW7DvSBhIHNwb2x1IHMgbsOtbSB2xaFldGt5IGplaG8gw7pkYWplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJUZWxlZsOzbiBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3LDoXQgbmVzcHLDoXZuZSBvZG9ta27DusWlLiBQbyDEj2FsxaHDrWNoIG5lw7pzcGXFoW7DvWNoIHBva3Vzb2NoIChwb8SNZXQ6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4pIGJ1ZGUgdGVudG8gcG91xb7DrXZhdGXEviBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSBqZWhvIMO6ZGFqZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlRhYmxldCBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvdcW+w612YXRlxL4gYnVkZSBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSBqZWhvIMO6ZGFqZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJUZWxlZsOzbiBzdGUgc2EgcG9rw7pzaWxpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvdcW+w612YXRlxL4gYnVkZSBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSBqZWhvIMO6ZGFqZS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUYWJsZXQgc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pIGJ1ZGUgcHJhY292bsO9IHByb2ZpbCBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSDDumRhamUgcHJvZmlsdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4pIGJ1ZGUgcHJhY292bsO9IHByb2ZpbCBvZHN0csOhbmVuw70gYSBzcG9sdSBzIG7DrW0gdsWhZXRreSDDumRhamUgcHJvZmlsdS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUYWJsZXQgc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LWtyw6F0IG5lc3Byw6F2bmUgb2RvbWtuw7rFpS4gUG8gxI9hbMWhw61jaCBuZcO6c3BlxaFuw71jaCBwb2t1c29jaCAocG/EjWV0OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+KSBidWRlIHByYWNvdm7DvSBwcm9maWwgb2RzdHLDoW5lbsO9IGEgc3BvbHUgcyBuw61tIHbFoWV0a3kgw7pkYWplIHByb2ZpbHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlRlbGVmw7NuIHN0ZSBzYSBwb2vDunNpbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcsOhdCBuZXNwcsOhdm5lIG9kb21rbsO6xaUuIFBvIMSPYWzFocOtY2ggbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggKHBvxI1ldDogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPikgYnVkZSBwcmFjb3Zuw70gcHJvZmlsIG9kc3Ryw6FuZW7DvSBhIHNwb2x1IHMgbsOtbSB2xaFldGt5IMO6ZGFqZSBwcm9maWx1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iVGFibGV0IHN0ZSBzYSBwb2vDunNpbGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LWtyw6F0IG5lc3Byw6F2bmUgb2RvbWtuw7rFpS4gUHJhY292bsO9IHByb2ZpbCBidWRlIG9kc3Ryw6FuZW7DvSBzcG9sdSBzbyB2xaFldGvDvW1pIMO6ZGFqbWkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iVGVsZWbDs24gc3RlIHNhIHBva8O6c2lsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3LDoXQgbmVzcHLDoXZuZSBvZG9ta27DusWlLiBQcmFjb3Zuw70gcHJvZmlsIGJ1ZGUgb2RzdHLDoW5lbsO9IHNwb2x1IHNvIHbFoWV0a8O9bWkgw7pkYWptaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3LDoXQgc3RlIG5lc3Byw6F2bmUgbmFrcmVzbGlsaSBzdm9qIGJlenBlxI1ub3N0bsO9IHZ6b3IuIFBvIMSPYWzFocOtY2ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmXDunNwZcWhbsO9Y2ggcG9rdXNvY2ggc2Egem9icmF6w60gdsO9enZhIG5hIG9kb21rbnV0aWUgdGFibGV0dSBwb21vY291IGUtbWFpbG92w6lobyDDusSNdHUuXG5cbiBTa8O6c3RlIHRvIHpub3ZhIG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LWtyw6F0IHN0ZSBuZXNwcsOhdm5lIG5ha3Jlc2xpbGkgc3ZvaiBiZXpwZcSNbm9zdG7DvSB2em9yLiBQbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDEj2FsxaHDrWNoIG5lw7pzcGXFoW7DvWNoIHBva3Vzb2NoIHNhIHpvYnJhesOtIHbDvXp2YSBuYSBvZG9ta251dGllIHRlbGVmw7NudSBwb21vY291IGUtbWFpbG92w6lobyDDusSNdHUuXG5cbiBTa8O6c3RlIHRvIHpub3ZhIG8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcsOhdCBzdGUgbmVzcHLDoXZuZSBuYWtyZXNsaWxpIHN2b2ogYmV6cGXEjW5vc3Ruw70gdnpvci4gUG8gxI9hbMWhw61jaCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG5lw7pzcGXFoW7DvWNoIHBva3Vzb2NoIHNhIHpvYnJhesOtIHbDvXp2YSBuYSBvZG9ta251dGllIHRhYmxldHUgcG9tb2NvdSBlLW1haWxvdsOpaG8gw7rEjXR1LlxuXG4gU2vDunN0ZSB0byB6bm92YSBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3LDoXQgc3RlIG5lc3Byw6F2bmUgbmFrcmVzbGlsaSBzdm9qIGJlenBlxI1ub3N0bsO9IHZ6b3IuIFBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gxI9hbMWhw61jaCBuZcO6c3BlxaFuw71jaCBwb2t1c29jaCBzYSB6b2JyYXrDrSB2w716dmEgbmEgb2RvbWtudXRpZSB0ZWxlZsOzbnUgcG9tb2NvdSBlLW1haWxvdsOpaG8gw7rEjXR1LlxuXG4gU2vDunN0ZSB0byB6bm92YSBvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik5lc3Byw6F2bnkga8OzZCBQSU4gU0lNIGthcnR5LiBUZXJheiBtdXPDrXRlIGtvbnRha3RvdmHFpSBzdm9qaG8gb3BlcsOhdG9yYSwgYWJ5IHbDoW0gb2RvbWtvbCB6YXJpYWRlbmllLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+TmVzcHLDoXZueSBrw7NkIFBJTiBTSU0ga2FydHkuIFpvc3TDoXZhasO6IHbDoW0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9rdXN5LjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDQxZGRlMmMuLjE4MDdiZDhmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iVm5vdmnEjSB2bmVzaXRlIHByYXZpbG5vIGtvZG8gUFVLLiBWZcSNa3JhdG5pIHBvc2t1c2kgYm9kbyB0cmFqbm8gb25lbW9nb8SNaWxpIGthcnRpY28gU0lNLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJLb2RpIFBJTiBzZSBuZSB1amVtYXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUHJldmXEjSBwb3NrdXNvdiB2em9yY2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTiBzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdCB2bmVzbGkgbmFwYcSNbm8uIFxuXG5abm92YSBwb3NrdXNpdGUgxI1leiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJHZXNsbyBzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdCB2bmVzbGkgbmFwYcSNbm8uIFxuXG5abm92YSBwb3NrdXNpdGUgxI1leiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJWem9yZWMgemEgb2RrbGVwYW5qZSBzdGUgbmVwcmF2aWxubyBuYXJpc2FsaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcmF0LiBcblxuUG9za3VzaXRlIHpub3ZhIMSNZXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJUYWJsacSNbmkgcmHEjXVuYWxuaWsgc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcmF0LiDEjGUgZ2EgbmV1c3BlxaFubyBwb3NrdXNpdGUgb2RrbGVuaXRpIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi1rcmF0LCBibyBwb25hc3RhdmxqZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgdiBuamVtLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJUZWxlZm9uIHN0ZSBuZXVzcGXFoW5vIHBvc2t1c2lsaSBvZGtsZW5pdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdC4gxIxlIGdhIG5ldXNwZcWhbm8gcG9za3VzaXRlIG9ka2xlbml0aSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4ta3JhdCwgYm8gcG9uYXN0YXZsamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHYgbmplbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTiBzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcmF0IHZuZXNsaSBuYXBhxI1uby4gXG5cblpub3ZhIHBvc2t1c2l0ZSDEjWV6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iR2VzbG8gc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdCB2bmVzbGkgbmFwYcSNbm8uIFxuXG5abm92YSBwb3NrdXNpdGUgxI1leiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IlZ6b3JlYyB6YSBvZGtsZXBhbmplIHN0ZSBuZXByYXZpbG5vIG5hcmlzYWxpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdC4gXG5cblBvc2t1c2l0ZSB6bm92YSDEjWV6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJUYWJsacSNbmkgcmHEjXVuYWxuaWsgc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LWtyYXQuIMSMZSBnYSBuZXVzcGXFoW5vIHBvc2t1c2l0ZSBvZGtsZW5pdGkgxaFlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4ta3JhdCwgYm8gcG9uYXN0YXZsamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHYgbmplbS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVsZWZvbiBzdGUgbmV1c3BlxaFubyBwb3NrdXNpbGkgb2RrbGVuaXRpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdC4gxIxlIGdhIG5ldXNwZcWhbm8gcG9za3VzaXRlIG9ka2xlbml0aSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi1rcmF0LCBibyBwb25hc3RhdmxqZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgdiBuamVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJUYWJsacSNbmkgcmHEjXVuYWxuaWsgc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdCwgemF0byBibyBwb25hc3RhdmxqZW4sIHZzaSBwb2RhdGtpIHYgbmplbSBwYSBib2RvIGl6YnJpc2FuaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJUZWxlZm9uIHN0ZSBuZXVzcGXFoW5vIHBvc2t1c2lsaSBvZGtsZW5pdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LWtyYXQsIHphdG8gYm8gcG9uYXN0YXZsamVuLCB2c2kgcG9kYXRraSB2IG5qZW0gcGEgYm9kbyBpemJyaXNhbmkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGFibGnEjW5pIHJhxI11bmFsbmlrIHN0ZSBuZXVzcGXFoW5vIHBvc2t1c2lsaSBvZGtsZW5pdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdC4gxIxlIGdhIG5ldXNwZcWhbm8gcG9za3VzaXRlIG9ka2xlbml0aSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4ta3JhdCwgYm8gdGEgdXBvcmFibmlrIG9kc3RyYW5qZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgdXBvcmFibmlrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVGVsZWZvbiBzdGUgbmV1c3BlxaFubyBwb3NrdXNpbGkgb2RrbGVuaXRpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LWtyYXQuIMSMZSBnYSBuZXVzcGXFoW5vIHBvc2t1c2l0ZSBvZGtsZW5pdGkgxaFlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LWtyYXQsIGJvIHRhIHVwb3JhYm5payBvZHN0cmFuamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHVwb3JhYm5pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGFibGnEjW5pIHJhxI11bmFsbmlrIHN0ZSBuZXVzcGXFoW5vIHBvc2t1c2lsaSBvZGtsZW5pdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcmF0LiDEjGUgZ2EgbmV1c3BlxaFubyBwb3NrdXNpdGUgb2RrbGVuaXRpIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LWtyYXQsIGJvIHRhIHVwb3JhYm5payBvZHN0cmFuamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHVwb3JhYm5pa2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlRlbGVmb24gc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LWtyYXQuIMSMZSBnYSBuZXVzcGXFoW5vIHBvc2t1c2l0ZSBvZGtsZW5pdGkgxaFlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4ta3JhdCwgYm8gdGEgdXBvcmFibmlrIG9kc3RyYW5qZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgdXBvcmFibmlrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IlRhYmxpxI1uaSByYcSNdW5hbG5payBzdGUgbmV1c3BlxaFubyBwb3NrdXNpbGkgb2RrbGVuaXRpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi1rcmF0LiBUYSB1cG9yYWJuaWsgYm8gb2RzdHJhbmplbiwgemFyYWRpIMSNZXNhciBib2RvIGl6YnJpc2FuaSB2c2kgcG9kYXRraSB1cG9yYWJuaWthLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IlRlbGVmb24gc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4gVGEgdXBvcmFibmlrIGJvIG9kc3RyYW5qZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgdXBvcmFibmlrYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUYWJsacSNbmkgcmHEjXVuYWxuaWsgc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcmF0LiDEjGUgZ2EgbmV1c3BlxaFubyBwb3NrdXNpdGUgb2RrbGVuaXRpIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi1rcmF0LCBibyBkZWxvdm5pIHByb2ZpbCBvZHN0cmFuamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHByb2ZpbGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlRlbGVmb24gc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi1rcmF0LiDEjGUgZ2EgbmV1c3BlxaFubyBwb3NrdXNpdGUgb2RrbGVuaXRpIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi1rcmF0LCBibyBkZWxvdm5pIHByb2ZpbCBvZHN0cmFuamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHByb2ZpbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVGFibGnEjW5pIHJhxI11bmFsbmlrIHN0ZSBuZXVzcGXFoW5vIHBvc2t1c2lsaSBvZGtsZW5pdGkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi1rcmF0LiDEjGUgZ2EgbmV1c3BlxaFubyBwb3NrdXNpdGUgb2RrbGVuaXRpIMWhZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LWtyYXQsIGJvIGRlbG92bmkgcHJvZmlsIG9kc3RyYW5qZW4sIHphcmFkaSDEjWVzYXIgYm9kbyBpemJyaXNhbmkgdnNpIHBvZGF0a2kgcHJvZmlsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVGVsZWZvbiBzdGUgbmV1c3BlxaFubyBwb3NrdXNpbGkgb2RrbGVuaXRpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdC4gxIxlIGdhIG5ldXNwZcWhbm8gcG9za3VzaXRlIG9ka2xlbml0aSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi1rcmF0LCBibyBkZWxvdm5pIHByb2ZpbCBvZHN0cmFuamVuLCB6YXJhZGkgxI1lc2FyIGJvZG8gaXpicmlzYW5pIHZzaSBwb2RhdGtpIHByb2ZpbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJUYWJsacSNbmkgcmHEjXVuYWxuaWsgc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4gRGVsb3ZuaSBwcm9maWwgYm8gb2RzdHJhbmplbiwgemFyYWRpIMSNZXNhciBib2RvIGl6YnJpc2FuaSB2c2kgcG9kYXRraSBwcm9maWxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlRlbGVmb24gc3RlIG5ldXNwZcWhbm8gcG9za3VzaWxpIG9ka2xlbml0aSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ta3JhdC4gRGVsb3ZuaSBwcm9maWwgYm8gb2RzdHJhbmplbiwgemFyYWRpIMSNZXNhciBib2RvIGl6YnJpc2FuaSB2c2kgcG9kYXRraSBwcm9maWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJWem9yZWMgemEgb2RrbGVwYW5qZSBzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdCBuYXBhxI1ubyB2bmVzbGkuIFBvIG5hZGFsam5qaWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmV1c3BlxaFuaWggcG9za3VzaWggYm9zdGUgcG96dmFuaSwgZGEgdGFibGnEjW5pIHJhxI11bmFsbmlrIG9ka2xlbmV0ZSB6IGUtcG/FoXRuaW0gcmHEjXVub20uXG5cblBvc2t1c2l0ZSB6bm92YSDEjWV6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJWem9yZWMgemEgb2RrbGVwYW5qZSBzdGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ta3JhdCBuYXBhxI1ubyB2bmVzbGkuIFBvIG5hZGFsam5qaWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmV1c3BlxaFuaWggcG9za3VzaWggYm9zdGUgcG96dmFuaSwgZGEgb2RrbGVuZXRlIHRlbGVmb24geiBHb29nbG92aW1pIHBvZGF0a2kgemEgcHJpamF2by5cblxuUG9za3VzaXRlIHpub3ZhIMSNZXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVnpvcmVjIHphIG9ka2xlcGFuamUgc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdCBuYXBhxI1ubyB2bmVzbGkuIFBvIG5hZGFsam5qaWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5paCBwb3NrdXNpaCBib3N0ZSBwb3p2YW5pLCBkYSB0YWJsacSNbmkgcmHEjXVuYWxuaWsgb2RrbGVuZXRlIHogZS1wb8WhdG5pbSByYcSNdW5vbS5cblxuUG9za3VzaXRlIHpub3ZhIMSNZXogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVnpvcmVjIHphIG9ka2xlcGFuamUgc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ta3JhdCBuYXBhxI1ubyB2bmVzbGkuIFBvIG5hZGFsam5qaWggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBuZXVzcGXFoW5paCBwb3NrdXNpaCBib3N0ZSBwb3p2YW5pLCBkYSBvZGtsZW5ldGUgdGVsZWZvbiB6IEdvb2dsb3ZpbWkgcG9kYXRraSB6YSBwcmlqYXZvLlxuXG5Qb3NrdXNpdGUgem5vdmEgxI1leiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJOYXBhxI1uYSBrb2RhIFBJTiBrYXJ0aWNlIFNJTS4gWmRhaiBzZSBib3N0ZSBtb3JhbGkgemEgb2RrbGVuaXRldiBuYXByYXZlIG9icm5pdGkgbmEgb3BlcmF0ZXJqYS4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPk5hcGHEjW5hIGtvZGEgUElOIGthcnRpY2UgU0lNLiBOYSB2b2xqbyBpbWF0ZSDFoWUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcG9za3VzLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKaW5kZXggMzFlZDIyMy4uM2IzNGRiNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRnV0IGtvZGluIGUgc2FrdMOrIFBVSy4gUHJvdmF0IGUgcMOrcnPDq3JpdHVyYSBkbyB0YSDDp2FrdGl2aXpvam7DqyBww6tyZ2ppdGhtb27DqyBrYXJ0w6tuIFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iS29kZXQgUElOIG51ayBww6tycHV0aGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iU2h1bcOrIHRlbnRhdGl2YSBww6tyIG1vdGl2aW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkUga2Ugc2hrcnVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBoZXLDqyBnYWJpbWlzaHQgUElOLWluIHTDq25kLlxuXG4gUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla29uZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkUga2Ugc2hrcnVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBoZXLDqyBnYWJpbWlzaHQgZmphbMOra2FsaW1pbi5cblxuUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNla29uZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdMOrIHZpemF0dWFyIG1vdGl2aW4gdMOrbmQuIFxuXG5Qcm92byBzw6tyaXNoIHDDq3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2Vrb25kYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHRhIHNoa3nDp3VyIHRhYmxldGluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhdmUgdMOrIHRqZXJhIHTDqyBwYXN1a3Nlc3NobWUsIHRhYmxldGkgZG8gdMOrIHJpdmVuZG9zZXQgc2kgbsOrIGdqZW5kamVuIGUgZmFicmlrw6tzIGRoZSBram8gZG8gdFwnaSBmc2hpasOrIHTDqyBnaml0aGEgdMOrIGRow6tuYXQuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gaGVyw6sgZ2FiaW1pc2h0IHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcMOrcnBqZWtqZXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lLCB0ZWxlZm9uaSBkbyB0w6sgcml2ZW5kb3NldCBkaGUgdMOrIGdqaXRoYSB0w6sgZGjDq25hdCBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IkUga2Ugc2hrcnVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGhlcsOrIGdhYmltaXNodCBQSU4taW4gdMOrbmQuXG5cbiBQcm92byBzw6tyaXNoIHDDq3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWtvbmRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJFIGtlIHNoa3J1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBoZXLDqyBnYWJpbWlzaHQgZmphbMOra2FsaW1pbi5cblxuUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vrb25kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iS2UgdGVudHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHTDqyB2aXphdHVhciBtb3RpdmluIHTDq25kLiBcblxuUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2Vrb25kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGFibGV0aW4uIFBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lLCB0YWJsZXRpIGRvIHTDqyByaXZlbmRvc2V0IHNpIG7DqyBnamVuZGplbiBlIGZhYnJpa8OrcyBkaGUga2pvIGRvIHRcJ2kgZnNoaWrDqyB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgZ2FiaW1pc2h0IHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBww6tycGpla2pldmUgdMOrIHRqZXJhIHTDqyBwYXN1a3Nlc3NobWUsIHRlbGVmb25pIGRvIHTDqyByaXZlbmRvc2V0IGRoZSB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBoZXLDqyBwYSBzdWtzZXMgcMOrciB0YSBzaGt5w6d1ciB0YWJsZXRpbiB0w6tuZC4gS3kgdGFibGV0IGRvIHTDqyByaXZlbmRvc2V0IGRoZSB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IG7DqyB0w6ssIGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHRhIHNoa3nDp3VyIHRlbGVmb25pbiB0w6tuZC4gS3kgdGVsZWZvbiBkbyB0w6sgcml2ZW5kb3NldCBkaGUgdMOrIGdqaXRoYSB0w6sgZGjDq25hdCBuw6sgdMOrLCBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHRhIHNoa3nDp3VyIHRlbGVmb25pbi4gUGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lLCBww6tyZG9ydWVzaSBkbyB0w6sgaGlxZXQgZGhlIHTDqyBnaml0aGEgdMOrIGRow6tuYXQgZSBww6tyZG9ydWVzaXQgbsOrIHTDqywgZG8gdMOrIGZzaGloZW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhdmUgdMOrIHRqZXJhIHTDqyBwYXN1a3Nlc3NobWUsIHDDq3Jkb3J1ZXNpIGRvIHTDqyBoaXFldCBkaGUgdMOrIGdqaXRoYSB0w6sgZGjDq25hdCBlIHDDq3Jkb3J1ZXNpdCBuw6sgdMOrLCBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgcMOrcmRvcnVlc2kgZG8gdMOrIGhpcWV0IGRoZSB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IGUgcMOrcmRvcnVlc2l0IG7DqyB0w6ssIGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgcMOrcmRvcnVlc2kgZG8gdMOrIGhpcWV0IGRoZSB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IGUgcMOrcmRvcnVlc2l0IG7DqyB0w6ssIGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iS2UgdGVudHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGFibGV0aW4uIEt5IHDDq3Jkb3J1ZXMgZG8gdMOrIGhpcWV0IGRoZSBram8gZG8gdCBmc2hpasOrIHTDqyBnaml0aGEgdMOrIGRow6tuYXQgZSBww6tyZG9ydWVzaXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iS2UgdGVudHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBLeSBww6tyZG9ydWVzIGRvIHTDqyBoaXFldCBkaGUga2pvIGRvIHRcJ2kgZnNoaWrDqyB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IGUgcMOrcmRvcnVlc2l0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGFibGV0aW4uIFBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgcHJvZmlsaSBpIHB1bsOrcyBkbyB0w6sgaGlxZXQgZGhlIHTDqyBnaml0aGEgdMOrIGRow6tuYXQgbsOrIHTDqyBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iS2UgdGVudHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBoZXLDqyBwYSBzdWtzZXMgcMOrciB0YSBzaGt5w6d1ciB0ZWxlZm9uaW4uIFBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgcHJvZmlsaSBpIHB1bsOrcyBkbyB0w6sgaGlxZXQgZGhlIHTDqyBnaml0aGEgdMOrIGRow6tuYXQgbsOrIHTDqyBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGFibGV0aW4uIFBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lLCBwcm9maWxpIGkgcHVuw6tzIGRvIHTDqyBoaXFldCBkaGUgdMOrIGdqaXRoYSB0w6sgZGjDq25hdCBuw6sgdMOrIGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJLZSB0ZW50dWFyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6sgcGEgc3Vrc2VzIHDDq3IgdGEgc2hrecOndXIgdGVsZWZvbmluLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgcHJvZmlsaSBpIHB1bsOrcyBkbyB0w6sgaGlxZXQgZGhlIHTDqyBnaml0aGEgdMOrIGRow6tuYXQgbsOrIHTDqyBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHRhIHNoa3nDp3VyIHRhYmxldGluLiBQcm9maWxpIGkgcHVuw6tzIGRvIHTDqyBoaXFldCB0w6sgZ2ppdGhhIHTDqyBkaMOrbmF0IG7DqyB0w6ssIGRvIHTDqyBmc2hpaGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IktlIHRlbnR1YXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBww6tyIHRhIHNoa3nDp3VyIHRlbGVmb25pbi4gUHJvZmlsaSBpIHB1bsOrcyBkbyB0w6sgaGlxZXQgdMOrIGdqaXRoYSB0w6sgZGjDq25hdCBuw6sgdMOrLCBkbyB0w6sgZnNoaWhlbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRSBrZSB2aXphdHVhciBnYWJpbWlzaHQgbW90aXZpbiB0w6tuZCB0w6sgc2hrecOnamVzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGhlcsOrLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhdmUgdMOrIHRqZXJhIHTDqyBwYXN1a3Nlc3NobWUgZG8gdMOrIHTDqyBrw6tya29oZXQgdGEgc2hrecOnw6tzaCB0YWJsZXRpbiBkdWtlIHDDq3Jkb3J1ciBuasOrIGxsb2dhcmkgbWFpbC1pLlxuXG4gUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNla29uZGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJLZSB2aXphdHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBoZXLDqyBwYSBzdWtzZXMgbW90aXZpbiB0w6tuZC4gUGFzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRlbnRhdGl2YXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lLCBkbyB0w6sgdMOrIGR1aGV0IHRhIHNoa3nDp8Orc2ggdGVsZWZvbmluIGR1a2UgcMOrcmRvcnVyIG5qw6sgbGxvZ2FyaSBtYWlsLWkuXG5cbiBQcm92byBzw6tyaXNoIHDDq3IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc2Vrb25kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRSBrZSB2aXphdHVhciBnYWJpbWlzaHQgbW90aXZpbiB0w6tuZCB0w6sgc2hrecOnamVzIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaGVyw6suIFBhcyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHRlbnRhdGl2YXZlIHTDqyB0amVyYSB0w6sgcGFzdWtzZXNzaG1lIGRvIHTDqyB0w6sga8OrcmtvaGV0IHRhIHNoa3nDp8Orc2ggdGFibGV0aW4gZHVrZSBww6tyZG9ydXIgbmrDqyBsbG9nYXJpIG1haWwtaS5cblxuIFByb3ZvIHPDq3Jpc2ggcMOrciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla29uZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJLZSB2aXphdHVhciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGhlcsOrIHBhIHN1a3NlcyBtb3RpdmluIHTDq25kLiBQYXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB0ZW50YXRpdmF2ZSB0w6sgdGplcmEgdMOrIHBhc3Vrc2Vzc2htZSwgZG8gdMOrIHTDqyBkdWhldCB0YSBzaGt5w6fDq3NoIHRlbGVmb25pbiBkdWtlIHDDq3Jkb3J1ciBuasOrIGxsb2dhcmkgbWFpbC1pLlxuXG4gUHJvdm8gc8OrcmlzaCBww6tyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2Vrb25kYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlBJTi1pIGkga2FydMOrcyBTSU0gw6tzaHTDqyBpIHBhc2FrdMOrLiBUYW5pIGR1aGV0IHTDqyBrb250YWt0b3NoIG9wZXJhdG9yaW4gcMOrciB0YSBzaGt5w6d1ciBwYWppc2plbiB0w6tuZGUuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlBJTi1pIGkga2FydMOrcyBTSU0gw6tzaHTDqyBpIHBhc2FrdMOrLiBUw6sga2Fuw6sgbWJldHVyIGVkaGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gdGVudGF0aXZhLjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCmluZGV4IGZlYjE4YmUuLjZlMzExZTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLQn9C+0L3QvtCy0L4g0YPQvdC10YHQuNGC0LUg0LjRgdC/0YDQsNCy0L3QuCBQVUsg0LrDtNC0LiDQn9C+0L3QvtCy0ZnQtdC90Lgg0L/QvtC60YPRiNCw0ZjQuCDRm9C1INGC0YDQsNGY0L3QviDQvtC90LXQvNC+0LPRg9Gb0LjRgtC4IFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOINC60L7QtNC+0LLQuCDRgdC1INC90LUg0L/QvtC00YPQtNCw0YDQsNGY0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLQn9GA0LXQstC40YjQtSDQv9C+0LrRg9GI0LDRmNCwINGD0L3QvtGB0LAg0YjQsNCx0LvQvtC90LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCj0L3QtdC70Lgg0YHRgtC1INC90LXRgtCw0YfQvdC4IFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GD0YLQsC4gXG5cbtCf0L7QutGD0YjQsNGY0YLQtSDQv9C+0L3QvtCy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQtSjQuCkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCj0L3QtdC70Lgg0YHRgtC1INC90LXRgtCw0YfQvdGDINC70L7Qt9C40L3QutGDIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YPRgtCwLiBcblxu0J/QvtC60YPRiNCw0ZjRgtC1INC/0L7QvdC+0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC1KNC4KS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0J3QsNGG0YDRgtCw0LvQuCDRgdGC0LUg0YjQsNCx0LvQvtC9INC30LAg0L7RgtC60ZnRg9GH0LDQstCw0ZrQtSDQvdC10YLQsNGH0L3QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GD0YLQsC4gXG5cbtCf0L7QutGD0YjQsNGY0YLQtSDQv9C+0L3QvtCy0L4g0LfQsCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQtSjQuCkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgo0LApLCDQvdCw0LrQvtC9INGH0LXQs9CwINGB0LUg0YLQsNCx0LvQtdGCINGA0LXRgdC10YLRg9GY0LUg0Lgg0YHQstC4INC/0L7QtNCw0YbQuCDRgdCwINGa0LXQs9CwINCx0YDQuNGI0YMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+ItCf0L7Qs9GA0LXRiNC90L4g0YHRgtC1INC/0L7QutGD0YjQsNC70Lgg0LTQsCDQvtGC0LrRmdGD0YfQsNGC0LUg0YLQtdC70LXRhNC+0L0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgo0LApLCDQvdCw0LrQvtC9INGH0LXQs9CwINGB0LUg0YLQtdC70LXRhNC+0L0g0YDQtdGB0LXRgtGD0ZjQtSDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INGB0LAg0ZrQtdCz0LAg0LHRgNC40YjRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+ItCj0L3QtdC70Lgg0YHRgtC1INC90LXRgtCw0YfQvdC4IFBJTiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YPRgtCwLiBcblxu0J/QvtC60YPRiNCw0ZjRgtC1INC/0L7QvdC+0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LUo0LgpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLQo9C90LXQu9C4INGB0YLQtSDQvdC10YLQsNGH0L3RgyDQu9C+0LfQuNC90LrRgyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YPRgtCwLiBcblxu0J/QvtC60YPRiNCw0ZjRgtC1INC/0L7QvdC+0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LUo0LgpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQndCw0YbRgNGC0LDQu9C4INGB0YLQtSDRiNCw0LHQu9C+0L0g0LfQsCDQvtGC0LrRmdGD0YfQsNCy0LDRmtC1INC90LXRgtCw0YfQvdC+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GC0LAuIFxuXG7Qn9C+0LrRg9GI0LDRmNGC0LUg0L/QvtC90L7QstC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQtSjQuCkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDQv9GD0YIo0LApLiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGYKNCwKSwg0L3QsNC60L7QvSDRh9C10LPQsCDRgdC1INGC0LDQsdC70LXRgiDRgNC10YHQtdGC0YPRmNC1INC4INGB0LLQuCDQv9C+0LTQsNGG0Lgg0YHQsCDRmtC10LPQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCjQsCksINC90LDQutC+0L0g0YfQtdCz0LAg0YHQtSDRgtC10LvQtdGE0L7QvSDRgNC10YHQtdGC0YPRmNC1INC4INGB0LLQuCDQv9C+0LTQsNGG0Lgg0YHQsCDRmtC10LPQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LDQsdC70LXRgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0KLQsNCx0LvQtdGCINGb0LUg0LHQuNGC0Lgg0YDQtdGB0LXRgtC+0LLQsNC9INC4INGB0LLQuCDQv9C+0LTQsNGG0Lgg0YHQsCDRmtC10LPQsCDRm9C1INCx0LjRgtC4INC40LfQsdGA0LjRgdCw0L3QuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GD0YIo0LApLiDQotC10LvQtdGE0L7QvSDRm9C1INCx0LjRgtC4INGA0LXRgdC10YLQvtCy0LDQvSDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INGB0LAg0ZrQtdCz0LAg0ZvQtSDQsdC40YLQuCDQuNC30LHRgNC40YHQsNC90LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgo0LApLCDQvdCw0LrQvtC9INGH0LXQs9CwINGB0LUg0L7QstCw0Zgg0LrQvtGA0LjRgdC90LjQuiDRg9C60LvQsNGa0LAg0Lgg0YHQstC4INC/0L7QtNCw0YbQuCDQutC+0YDQuNGB0L3QuNC60LAg0LHRgNC40YjRgy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtC10LvQtdGE0L7QvSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GD0YIo0LApLiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCjQsCksINC90LDQutC+0L0g0YfQtdCz0LAg0YHQtSDQvtCy0LDRmCDQutC+0YDQuNGB0L3QuNC6INGD0LrQu9Cw0ZrQsCDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INC60L7RgNC40YHQvdC40LrQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+ItCf0L7Qs9GA0LXRiNC90L4g0YHRgtC1INC/0L7QutGD0YjQsNC70Lgg0LTQsCDQvtGC0LrRmdGD0YfQsNGC0LUg0YLQsNCx0LvQtdGCIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCjQsCksINC90LDQutC+0L0g0YfQtdCz0LAg0YHQtSDQvtCy0LDRmCDQutC+0YDQuNGB0L3QuNC6INGD0LrQu9Cw0ZrQsCDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INC60L7RgNC40YHQvdC40LrQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCjQsCksINC90LDQutC+0L0g0YfQtdCz0LAg0YHQtSDQvtCy0LDRmCDQutC+0YDQuNGB0L3QuNC6INGD0LrQu9Cw0ZrQsCDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INC60L7RgNC40YHQvdC40LrQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0YPRgijQsCkuINCe0LLQsNGYINC60L7RgNC40YHQvdC40Log0ZvQtSDQsdC40YLQuCDRg9C60LvQvtGa0LXQvSDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INC60L7RgNC40YHQvdC40LrQsCDRm9C1INCx0LjRgtC4INC40LfQsdGA0LjRgdCw0L3QuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQv9GD0YIo0LApLiDQntCy0LDRmCDQutC+0YDQuNGB0L3QuNC6INGb0LUg0LHQuNGC0Lgg0YPQutC70L7RmtC10L0g0Lgg0YHQstC4INC/0L7QtNCw0YbQuCDQutC+0YDQuNGB0L3QuNC60LAg0ZvQtSDQsdC40YLQuCDQuNC30LHRgNC40YHQsNC90LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgo0LApLCDQvdCw0LrQvtC9INGH0LXQs9CwINGB0LUg0L/QvtGB0LvQvtCy0L3QuCDQv9GA0L7RhNC40Lsg0YPQutC70LDRmtCwINC4INGB0LLQuCDQv9C+0LTQsNGG0Lgg0YHQsCDQv9GA0L7RhNC40LvQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INC/0YPRgijQsCkuINCY0LzQsNGC0LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC/0L7QutGD0YjQsNGYKNCwKSwg0L3QsNC60L7QvSDRh9C10LPQsCDRgdC1INC/0L7RgdC70L7QstC90Lgg0L/RgNC+0YTQuNC7INGD0LrQu9Cw0ZrQsCDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INGB0LAg0L/RgNC+0YTQuNC70LAg0LHRgNC40YjRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LDQsdC70LXRgiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YPRgijQsCkuINCY0LzQsNGC0LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0L/QvtC60YPRiNCw0Zgo0LApLCDQvdCw0LrQvtC9INGH0LXQs9CwINGB0LUg0L/QvtGB0LvQvtCy0L3QuCDQv9GA0L7RhNC40Lsg0YPQutC70LDRmtCwINC4INGB0LLQuCDQv9C+0LTQsNGG0Lgg0YHQsCDQv9GA0L7RhNC40LvQsCDQsdGA0LjRiNGDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0JjQvNCw0YLQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmCjQsCksINC90LDQutC+0L0g0YfQtdCz0LAg0YHQtSDQv9C+0YHQu9C+0LLQvdC4INC/0YDQvtGE0LjQuyDRg9C60LvQsNGa0LAg0Lgg0YHQstC4INC/0L7QtNCw0YbQuCDRgdCwINC/0YDQvtGE0LjQu9CwINCx0YDQuNGI0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLQn9C+0LPRgNC10YjQvdC+INGB0YLQtSDQv9C+0LrRg9GI0LDQu9C4INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LDQsdC70LXRgiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0J/QvtGB0LvQvtCy0L3QuCDQv9GA0L7RhNC40Lsg0ZvQtSDQsdC40YLQuCDRg9C60LvQvtGa0LXQvSDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INGB0LAg0ZrQtdCz0LAg0ZvQtSDQsdC40YLQuCDQuNC30LHRgNC40YHQsNC90LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i0J/QvtCz0YDQtdGI0L3QviDRgdGC0LUg0L/QvtC60YPRiNCw0LvQuCDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtC10LvQtdGE0L7QvSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g0L/Rg9GCKNCwKS4g0J/QvtGB0LvQvtCy0L3QuCDQv9GA0L7RhNC40Lsg0ZvQtSDQsdC40YLQuCDRg9C60LvQvtGa0LXQvSDQuCDRgdCy0Lgg0L/QvtC00LDRhtC4INGB0LAg0ZrQtdCz0LAg0ZvQtSDQsdC40YLQuCDQuNC30LHRgNC40YHQsNC90LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+ItCd0LDRhtGA0YLQsNC70Lgg0YHRgtC1INGI0LDQsdC70L7QvSDQt9CwINC+0YLQutGZ0YPRh9Cw0LLQsNGa0LUg0L3QtdGC0LDRh9C90L4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g0L/Rg9GC0LAuINCf0L7RgdC70LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QsCjQuNGFKSDQv9C+0LrRg9GI0LDRmNCwLCDQvtC0INCy0LDRgSDRm9C1INCx0LjRgtC4INC30LDRgtGA0LDQttC10L3QviDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIg0L/QvtC80L7Rm9GDINC90LDQu9C+0LPQsCDQtS3Qv9C+0YjRgtC1LlxuXG7Qn9C+0LrRg9GI0LDRmNGC0LUg0L/QvtC90L7QstC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LUo0LgpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0J3QsNGG0YDRgtCw0LvQuCDRgdGC0LUg0YjQsNCx0LvQvtC9INC30LAg0L7RgtC60ZnRg9GH0LDQstCw0ZrQtSDQvdC10YLQsNGH0L3QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDQv9GD0YLQsC4g0J/QvtGB0LvQtSDRmNC+0YggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdCwKNC40YUpINC/0L7QutGD0YjQsNGY0LAsINC+0LQg0LLQsNGBINGb0LUg0LHQuNGC0Lgg0LfQsNGC0YDQsNC20LXQvdC+INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9INC/0L7QvNC+0ZvRgyDQvdCw0LvQvtCz0LAg0LUt0L/QvtGI0YLQtS5cblxu0J/QvtC60YPRiNCw0ZjRgtC1INC/0L7QvdC+0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQutGD0L3QtNC1KNC4KS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0J3QsNGG0YDRgtCw0LvQuCDRgdGC0LUg0YjQsNCx0LvQvtC9INC30LAg0L7RgtC60ZnRg9GH0LDQstCw0ZrQtSDQvdC10YLQsNGH0L3QviA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INC/0YPRgtCwLiDQn9C+0YHQu9C1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INC90LXRg9GB0L/QtdGI0L3QsCjQuNGFKSDQv9C+0LrRg9GI0LDRmNCwLCDQvtC0INCy0LDRgSDRm9C1INCx0LjRgtC4INC30LDRgtGA0LDQttC10L3QviDQtNCwINC+0YLQutGZ0YPRh9Cw0YLQtSDRgtCw0LHQu9C10YIg0L/QvtC80L7Rm9GDINC90LDQu9C+0LPQsCDQtS3Qv9C+0YjRgtC1LlxuXG7Qn9C+0LrRg9GI0LDRmNGC0LUg0L/QvtC90L7QstC+INC30LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDRgdC10LrRg9C90LTQtSjQuCkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLQndCw0YbRgNGC0LDQu9C4INGB0YLQtSDRiNCw0LHQu9C+0L0g0LfQsCDQvtGC0LrRmdGD0YfQsNCy0LDRmtC1INC90LXRgtCw0YfQvdC+IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g0L/Rg9GC0LAuINCf0L7RgdC70LUg0ZjQvtGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0L3QtdGD0YHQv9C10YjQvdCwKNC40YUpINC/0L7QutGD0YjQsNGY0LAsINC+0LQg0LLQsNGBINGb0LUg0LHQuNGC0Lgg0LfQsNGC0YDQsNC20LXQvdC+INC00LAg0L7RgtC60ZnRg9GH0LDRgtC1INGC0LXQu9C10YTQvtC9INC/0L7QvNC+0ZvRgyDQvdCw0LvQvtCz0LAg0LUt0L/QvtGI0YLQtS5cblxu0J/QvtC60YPRiNCw0ZjRgtC1INC/0L7QvdC+0LLQviDQt9CwIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC60YPQvdC00LUo0LgpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i0J3QtdGC0LDRh9Cw0L0gU0lNIFBJTiDQusO00LQuINCh0LDQtNCwINC80L7RgNCw0YLQtSDQtNCwINC60L7QvdGC0LDQutGC0LjRgNCw0YLQtSDQvNC+0LHQuNC70L3QvtCzINC+0L/QtdGA0LDRgtC10YDQsCDQtNCwINCx0LjRgdGC0LUg0L7RgtC60ZnRg9GH0LDQu9C4INGD0YDQtdGS0LDRmC4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCd0LXRgtCw0YfQsNC9IFNJTSBQSU4g0LrDtNC0LiDQmNC80LDRgtC1INGY0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQv9C+0LrRg9GI0LDRmC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCAyOGJjZjk4Li4xOWFmZWEzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iQW5nZSByw6R0dCBQVUsta29kIGlnZW4uIE9tIGbDtnJzw7ZrZW4gdXBwcmVwYXMgaW5ha3RpdmVyYXMgU0lNLWtvcnRldCBwZXJtYW5lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi1rb2Rlcm5hIHN0w6RtbWVyIGludGUgw7Z2ZXJlbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJGw7ZyIG3DpW5nYSBmw7Zyc8O2ayBtZWQgZ3JhZmlza3QgbMO2c2Vub3JkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJEdSBoYXIgYW5nZXR0IGZlbCBsw7ZzZW5vcmQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gXG5cbkbDtnJzw7ZrIGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IkR1IGhhciBhbmdldHQgZmVsIGzDtnNlbm9yZCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBcblxuRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRHUgaGFyIHJpdGF0IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkIGZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBcblxuRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNzbHlja2FkZSBmw7Zyc8O2ayB0aWxsIMOldGVyc3TDpGxscyBzdXJmcGxhdHRhbiBvY2ggYWxsIGRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iRHUgaGFyIGbDtnJzw7ZrdCBsw6VzYSB1cHAgbW9iaWxlbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNzbHlja2FkZSBmw7Zyc8O2ayB0aWxsIMOldGVyc3TDpGxscyBtb2JpbGVuIG9jaCBhbGwgZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iRHUgaGFyIGFuZ2V0dCBmZWwgbMO2c2Vub3JkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ8Olbmdlci4gXG5cbkbDtnJzw7ZrIGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iRHUgaGFyIGFuZ2V0dCBmZWwgbMO2c2Vub3JkIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ8Olbmdlci4gXG5cbkbDtnJzw7ZrIGlnZW4gb20gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iRHUgaGFyIHJpdGF0IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkIGZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIFxuXG5Gw7Zyc8O2ayBpZ2VuIG9tIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iRHUgaGFyIGbDtnJzw7ZrdCBsw6VzYSB1cHAgc3VyZnBsYXR0YW4gcMOlIGV0dCBmZWxha3RpZ3Qgc8OkdHQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc3NseWNrYWRlIGbDtnJzw7ZrIHRpbGwgw6V0ZXJzdMOkbGxzIHN1cmZwbGF0dGFuIG9jaCBhbGwgZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBtb2JpbGVuIHDDpSBldHQgZmVsYWt0aWd0IHPDpHR0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gZ8Olbmdlci4gRWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtaXNzbHlja2FkZSBmw7Zyc8O2ayB0aWxsIMOldGVyc3TDpGxscyBtb2JpbGVuIG9jaCBhbGwgZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gU3VyZnBsYXR0YW4gw6V0ZXJzdMOkbGxzIG9jaCBhbGwgZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IkR1IGhhciBmw7Zyc8O2a3QgbMOlc2EgdXBwIG1vYmlsZW4gcMOlIGV0dCBmZWxha3RpZ3Qgc8OkdHQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGfDpW5nZXIuIE1vYmlsZW4gw6V0ZXJzdMOkbGxzIG9jaCBhbGwgZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkR1IGhhciBmw7Zyc8O2a3QgbMOlc2EgdXBwIHN1cmZwbGF0dGFuIHDDpSBldHQgZmVsYWt0aWd0IHPDpHR0IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1pc3NseWNrYWRlIGbDtnJzw7ZrIHRpbGwgdGFzIGFudsOkbmRhcmVuIGJvcnQgb2NoIGFsbCBhbnbDpG5kYXJkYXRhIHJhZGVyYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IkR1IGhhciBmw7Zyc8O2a3QgbMOlc2EgdXBwIG1vYmlsZW4gcMOlIGV0dCBmZWxha3RpZ3Qgc8OkdHQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gRWZ0ZXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWlzc2x5Y2thZGUgZsO2cnPDtmsgdGlsbCB0YXMgYW52w6RuZGFyZW4gYm9ydCBvY2ggYWxsIGFudsOkbmRhcmRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzc2x5Y2thZGUgZsO2cnPDtmsgdGlsbCB0YXMgYW52w6RuZGFyZW4gYm9ydCBvY2ggYWxsIGFudsOkbmRhcmRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iRHUgaGFyIGbDtnJzw7ZrdCBsw6VzYSB1cHAgbW9iaWxlbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzc2x5Y2thZGUgZsO2cnPDtmsgdGlsbCB0YXMgYW52w6RuZGFyZW4gYm9ydCBvY2ggYWxsIGFudsOkbmRhcmRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+IkR1IGhhciBmw7Zyc8O2a3QgbMOlc2EgdXBwIHN1cmZwbGF0dGFuIHDDpSBldHQgZmVsYWt0aWd0IHPDpHR0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBBbnbDpG5kYXJlbiB0YXMgYm9ydCBvY2ggYWxsIGFudsOkbmRhcmRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBtb2JpbGVuIHDDpSBldHQgZmVsYWt0aWd0IHPDpHR0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBBbnbDpG5kYXJlbiB0YXMgYm9ydCBvY2ggYWxsIGFudsOkbmRhcmRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNzbHlja2FkZSBmw7Zyc8O2ayB0aWxsIHRhcyBqb2JicHJvZmlsZW4gYm9ydCBvY2ggYWxsIHByb2ZpbGRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iRHUgaGFyIGbDtnJzw7ZrdCBsw6VzYSB1cHAgbW9iaWxlbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtaXNzbHlja2FkZSBmw7Zyc8O2ayB0aWxsIHRhcyBqb2JicHJvZmlsZW4gYm9ydCBvY2ggYWxsIHByb2ZpbGRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBww6UgZXR0IGZlbGFrdGlndCBzw6R0dCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWlzc2x5Y2thZGUgZsO2cnPDtmsgdGlsbCB0YXMgam9iYnByb2ZpbGVuIGJvcnQgb2NoIGFsbCBwcm9maWxkYXRhIHJhZGVyYXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkR1IGhhciBmw7Zyc8O2a3QgbMOlc2EgdXBwIG1vYmlsZW4gcMOlIGV0dCBmZWxha3RpZ3Qgc8OkdHQgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBnw6VuZ2VyLiBFZnRlciA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1pc3NseWNrYWRlIGbDtnJzw7ZrIHRpbGwgdGFzIGpvYmJwcm9maWxlbiBib3J0IG9jaCBhbGwgcHJvZmlsZGF0YSByYWRlcmFzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iRHUgaGFyIGbDtnJzw7ZrdCBsw6VzYSB1cHAgc3VyZnBsYXR0YW4gcMOlIGV0dCBmZWxha3RpZ3Qgc8OkdHQgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGfDpW5nZXIuIEpvYmJwcm9maWxlbiB0YXMgYm9ydCBvY2ggYWxsIHByb2ZpbGRhdGEgcmFkZXJhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJEdSBoYXIgZsO2cnPDtmt0IGzDpXNhIHVwcCBtb2JpbGVuIHDDpSBldHQgZmVsYWt0aWd0IHPDpHR0IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBnw6VuZ2VyLiBKb2JicHJvZmlsZW4gdGFzIGJvcnQgb2NoIGFsbCBwcm9maWxkYXRhIHJhZGVyYXMuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkR1IGhhciByaXRhdCBkaXR0IGdyYWZpc2thIGzDtnNlbm9yZCBmZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gRWZ0ZXIgeXR0ZXJsaWdhcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgb21iZWRzIGR1IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBtZWQgZXR0IGUtcG9zdGtvbnRvLlxuXG4gRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IkR1IGhhciByaXRhdCBkaXR0IGdyYWZpc2thIGzDtnNlbm9yZCBmZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gZ8Olbmdlci4gRWZ0ZXIgeXR0ZXJsaWdhcmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZsO2cnPDtmsgb21iZWRzIGR1IGzDpXNhIHVwcCBtb2JpbGVuIG1lZCBoasOkbHAgYXYgZXR0IGUtcG9zdGtvbnRvLlxuXG4gRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzZWt1bmRlci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iRHUgaGFyIHJpdGF0IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkIGZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIHl0dGVybGlnYXJlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZsO2cnPDtmsgb21iZWRzIGR1IGzDpXNhIHVwcCBzdXJmcGxhdHRhbiBtZWQgZXR0IGUtcG9zdGtvbnRvLlxuXG4gRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iRHUgaGFyIHJpdGF0IGRpdHQgZ3JhZmlza2EgbMO2c2Vub3JkIGZlbCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGfDpW5nZXIuIEVmdGVyIHl0dGVybGlnYXJlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gZsO2cnPDtmsgb21iZWRzIGR1IGzDpXNhIHVwcCBtb2JpbGVuIG1lZCBoasOkbHAgYXYgZXR0IGUtcG9zdGtvbnRvLlxuXG4gRsO2cnPDtmsgaWdlbiBvbSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNla3VuZGVyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iRHUgYW5nYXYgZmVsIHBpbmtvZCBmw7ZyIFNJTS1rb3J0ZXQgb2NoIG3DpXN0ZSBudSBrb250YWt0YSBvcGVyYXTDtnJlbiBmw7ZyIGF0dCBsw6VzYSB1cHAgZW5oZXRlbi4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RHUgYW5nYXYgZmVsIHBpbmtvZCBmw7ZyIFNJTS1rb3J0ZXQuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGbDtnJzw7ZrIMOldGVyc3TDpXIuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKaW5kZXggYmQ4YzY4ZS4uMmYyYzlkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkluZ2l6YSB1cHlhIG1zaW1ibyBzYWhpaGkgd2EgUFVLLiBNYWphcmliaW8geWFuYXlvcnVkaXdhIHlhdGFsZW1hemEgU0lNIGthYmlzYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTWlzaW1ibyB5YSBQSU4gaGFpZmFuYW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iTWFqYXJpYmlvIG1lbmdpIG1ubyB5YSBtY2hvcm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlVtZWluZ2l6YSBuZW5vc2lyaSBsYWtvIGt3YSBtYWtvc2EgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gXG5cbiBKYXJpYnUgdGVuYSBiYWFkYSB5YSBzZWt1bmRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJVbWVpbmdpemEgbmVub3NpcmkgbGFrbyBrd2EgbWFrb3NhIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG4gSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iVW1lY2hvcmEgcnV3YXphIHlha28geWEga3VmdW5nYSBrd2EgbWFrb3NhIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG4gSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJVbWVrb3NlYSBtYWphcmliaW8geWEga3VmdW5ndWEga29tcHl1dGEga2liYW8gbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gVWtpa29zZWEgbWFqYXJpYmlvIG1lbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4sIGtvbXB5dXRhIGhpaSBraWJhbyBpdGFyZWplc2h3YSBrYXRpa2EgaGFsaSBpbGl5b3Rva2EgbmF5byBraXdhbmRhbmksIGhhdHVhIGl0YWtheW9mdXRhIGRhdGEgeWFrZSB5b3RlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJVbWVrb3NlYSBtYWphcmliaW8geWEga3VmdW5ndWEgc2ltdSBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBVa2lrb3NlYSBtYWphcmliaW8gbWVuZ2luZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiwgc2ltdSBoaWkgaXRhd2Vrd2EgdXB5YSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5YWtlIHlvdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJVbWVpbmdpemEgbmVub3NpcmkgbGFrbyBrd2EgbWFrb3NhIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gXG5cbiBKYXJpYnUgdGVuYSBiYWFkYSB5YSBzZWt1bmRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlVtZWluZ2l6YSBuZW5vc2lyaSBsYWtvIGt3YSBtYWtvc2EgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBcblxuIEphcmlidSB0ZW5hIGJhYWRhIHlhIHNla3VuZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iVW1lY2hvcmEgcnV3YXphIHlha28geWEga3VmdW5nYSBrd2EgbWFrb3NhIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gXG5cbiBKYXJpYnUgdGVuYSBiYWFkYSB5YSBzZWt1bmRlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIGtvbXB5dXRhIGtpYmFvIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gVWtpa29zZWEgbWFqYXJpYmlvIG1lbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiwga29tcHl1dGEgaGlpIGtpYmFvIGl0YXJlamVzaHdhIGthdGlrYSBoYWxpIGlsaXlvdG9rYSBuYXlvIGtpd2FuZGFuaSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5YWtlIHlvdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBzaW11IG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gVWtpa29zZWEgbWFqYXJpYmlvIG1lbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiwgc2ltdSBoaWkgaXRhd2Vrd2EgdXB5YSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5YWtlIHlvdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBrb21weXV0YSBraWJhbyBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4gS29tcHl1dGEgaGlpIGtpYmFvIGl0YXJlamVzaHdhIGthdGlrYSBoYWxpIGlsaXlvdG9rYSBuYXlvIGtpd2FuZGFuaSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5YWtlIHlvdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIHNpbXUgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIFNpbXUgaGlpIGl0YXJlamVzaHdhIGthdGlrYSBoYWxpIGlsaXlvdG9rYSBuYXlvIGtpd2FuZGFuaSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5YWtlIHlvdGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIGtvbXB5dXRhIGtpYmFvIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFVraWtvc2VhIG1hamFyaWJpbyBtZW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LCBtdHVtaWFqaSBodXl1IGF0YW9uZG9sZXdhLCBoYXR1YSBpdGFrYXlvZnV0YSBkYXRhIHlvdGUgeWEgbXR1bWlhamkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBzaW11IG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFVraWtvc2VhIG1hamFyaWJpbyBtZW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LCB3YXNpZnUgd2Ega2F6aW5pIHV0YW9uZG9sZXdhLCBoYXR1YSBpdGFrYXlvZnV0YSBkYXRhIHlvdGUgeWEgd2FzaWZ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBrb21weXV0YSBraWJhbyBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIFVraWtvc2VhIG1hamFyaWJpbyBtZW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4sIG10dW1pYWppIGh1eXUgYXRhb25kb2xld2EsIGhhdHVhIGl0YWtheW9mdXRhIGRhdGEgeW90ZSB5YSBtdHVtaWFqaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIHNpbXUgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBVa2lrb3NlYSBtYWphcmliaW8gbWVuZ2luZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+LCB3YXNpZnUgd2Ega2F6aW5pIHV0YW9uZG9sZXdhLCBoYXR1YSBpdGFrYXlvZnV0YSBkYXRhIHlvdGUgeWEgd2FzaWZ1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIGtvbXB5dXRhIGtpYmFvIG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBNdHVtaWFqaSBodXl1IGF0YW9uZG9sZXdhLCBoYXR1YSBpdGFrYXlvZnV0YSBkYXRhIHlvdGUgeWEgbXR1bWlhamkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iVW1la29zZWEgbWFqYXJpYmlvIHlhIGt1ZnVuZ3VhIHNpbXUgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIE10dW1pYWppIGh1eXUgYXRhb25kb2xld2EsIGhhdHVhIGl0YWtheW9mdXRhIGRhdGEgeW90ZSB5YSBtdHVtaWFqaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJVbWVrb3NlYSBtYWphcmliaW8geWEga3VmdW5ndWEga29tcHl1dGEga2liYW8gbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gVWtpa29zZWEgbWFqYXJpYmlvIG1lbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4sIHdhc2lmdSB3YSBrYXppbmkgdXRhb25kb2xld2EsIGhhdHVhIGl0YWtheW9mdXRhIGRhdGEgeW90ZSB5YSB3YXNpZnUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBzaW11IG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFVraWtvc2VhIG1hamFyaWJpbyBtZW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LCB3YXNpZnUgd2Ega2F6aW5pIHV0YW9uZG9sZXdhLCBoYXR1YSBpdGFrYXlvZnV0YSBkYXRhIHlvdGUgeWEgd2FzaWZ1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBrb21weXV0YSBraWJhbyBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIFVraWtvc2VhIG1hamFyaWJpbyBtZW5naW5lIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4sIHdhc2lmdSB3YSBrYXppbmkgdXRhb25kb2xld2EsIGhhdHVhIGl0YWtheW9mdXRhIGRhdGEgeW90ZSB5YSB3YXNpZnUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBzaW11IG1hcmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gVWtpa29zZWEgbWFqYXJpYmlvIG1lbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiwgd2FzaWZ1IHdhIGthemluaSB1dGFvbmRvbGV3YSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5b3RlIHlhIHdhc2lmdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IlVtZWtvc2VhIG1hamFyaWJpbyB5YSBrdWZ1bmd1YSBrb21weXV0YSBraWJhbyBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4gV2FzaWZ1IHdhIGthemluaSB1dGFvbmRvbGV3YSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5b3RlIHlhIHdhc2lmdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiJVbWVrb3NlYSBtYWphcmliaW8geWEga3VmdW5ndWEgc2ltdSBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4gV2FzaWZ1IHdhIGthemluaSB1dGFvbmRvbGV3YSwgaGF0dWEgaXRha2F5b2Z1dGEgZGF0YSB5b3RlIHlhIHdhc2lmdS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVW1la29zZWEga2F0aWthIGt1d2VrYSBtY2hvcm8gd2FrbyB3YSBrdWZ1bmd1YSBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBCYWFkYSB5YSBtYWphcmliaW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYmlsYSBrdWZhdWx1LCB1dGFvbWJ3YSBrdWZ1bmd1YSBrb21weXV0YSB5YWtvIG5kb2dvIGt3YSBrdXR1bWlhIGFrYXVudGkgeWFrbyB5YSBiYXJ1YSBwZXBlLlxuXG4gSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlVtZWtvc2VhIGt1Y2hvcmEgbWNob3JvIHdha28gd2Ega3VmdW5ndWEgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gQmFhZGEgeWEgbWFqYXJpYmlvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHlhc2l5b2ZhdWx1LCB1dGFvbWJ3YSBrdWZ1bmd1YSBzaW11IHlha28ga3dhIGt1dHVtaWEgYWthdW50aSB5YSBiYXJ1YSBwZXBlLlxuXG4gSmFyaWJ1IHRlbmEgYmFhZGEgeWEgc2VrdW5kZSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iVW1la29zZWEga2F0aWthIGt1d2VrYSBtY2hvcm8gd2FrbyB3YSBrdWZ1bmd1YSBtYXJhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIEJhYWRhIHlhIG1hamFyaWJpbyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGJpbGEga3VmYXVsdSwgdXRhb21id2Ega3VmdW5ndWEga29tcHl1dGEgeWFrbyBuZG9nbyBrd2Ega3V0dW1pYSBha2F1bnRpIHlha28geWEgYmFydWEgcGVwZS5cblxuIEphcmlidSB0ZW5hIGJhYWRhIHlhIHNla3VuZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlVtZWtvc2VhIGt1Y2hvcmEgbWNob3JvIHdha28gd2Ega3VmdW5ndWEgbWFyYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBCYWFkYSB5YSBtYWphcmliaW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiB5YXNpeW9mYXVsdSwgdXRhb21id2Ega3VmdW5ndWEgc2ltdSB5YWtvIGt3YSBrdXR1bWlhIGFrYXVudGkgeWEgYmFydWEgcGVwZS5cblxuIEphcmlidSB0ZW5hIGJhYWRhIHlhIHNla3VuZGUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik1zaW1ibyB3YSBQSU4geWEgU0lNIHVzaW9zYWhpaGnCoHNhc2EgbGF6aW1hIHV3YXNpbGlhbmUgbmEgbXRvYSBodWR1bWEgd2Frb8KgaWxpIHVmdW5ndWUga2lmYWEgY2hha28uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPk1zaW1ibyB3YSBQSU4geWEgU0lNIHNpIHNhaGloaSwgdW1lYmFraXNoYSBtYWphcmliaW8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAppbmRleCAzMmM5M2IwLi44NjljODY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgrprgrrDgrr/grq/grr7grqkgUFVLIOCuleCvgeCuseCuv+Cur+CvgOCun+CvjeCun+CviCDgrq7gr4DgrqPgr43grp/gr4Hgrq7gr40g4K6J4K6z4K+N4K6z4K6/4K6f4K614K+B4K6u4K+NLiDgrqTgr4rgrp/grrDgr40g4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K6z4K+NIOCumuCuv+CuruCvjSDgrpAg4K6o4K6/4K6w4K6o4K+N4K6k4K6w4K6u4K6+4K6VIOCuruCvgeCun+CuleCvjeCuleCuv+CuteCuv+Cun+CvgeCuruCvjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4i4K6q4K6/4K6p4K+NIOCuleCvgeCuseCuv+Cur+CvgOCun+CvgeCuleCus+CvjSDgrqrgr4rgrrDgr4Hgrqjgr43grqTgrrXgrr/grrLgr43grrLgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLgroXgrqTgrr/grpXgrq7grr7grqkg4K614K6f4K6/4K61IOCuruCvgeCur+CuseCvjeCumuCuv+CuleCus+CvjSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4K6J4K6Z4K+N4K6V4K6z4K+NIOCuquCuv+CuqeCvjeCuqeCviCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuieCus+CvjeCus+Cuv+Cun+CvjeCun+CvgOCusOCvjeCuleCus+CvjS4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvjSDgrpXgrrTgrr/grqTgr43grqTgr4Eg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K+N4K6V4K614K+B4K6u4K+NLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgrongrpngr43grpXgrrPgr40g4K6V4K6f4K614K+B4K6a4K+N4K6a4K+K4K6y4K+N4K6y4K+IIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6J4K6z4K+N4K6z4K6/4K6f4K+N4K6f4K+A4K6w4K+N4K6V4K6z4K+NLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4K614K6/4K6p4K6+4K6f4K6/4K6V4K6z4K+NIOCuleCutOCuv+CupOCvjeCupOCvgSDgrq7gr4Hgrq/grrHgr43grprgrr/grpXgr43grpXgrrXgr4Hgrq7gr40uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCupOCuv+CuseCuquCvjeCuquCupOCuseCvjeCuleCuvuCuqSDgrrXgrp/grr/grrXgrqTgr43grqTgr4ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrrXgrrDgr4jgrqjgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgrrXgrr/grqngrr7grp/grr/grpXgrrPgrr/grrLgr40g4K6u4K+A4K6j4K+N4K6f4K+B4K6u4K+NIOCuruCvgeCur+CuseCvjeCumuCuv+CuleCvjeCuleCuteCvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgrp/gr4fgrqrgr43grrLgr4bgrp/gr43grp/gr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VLCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K6p4K+N4K6p4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NLCDgrp/gr4fgrqrgr43grrLgr4bgrp/gr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6H4K6k4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgrq7gr4rgrqrgr4jgrrLgr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VLCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K6p4K+N4K6p4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NIOCuruCviuCuquCviOCusuCvjSDgrq7gr4Dgrp/gr43grp/grq7gr4jgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgrofgrqTgrqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLgrongrpngr43grpXgrrPgr40g4K6q4K6/4K6p4K+N4K6p4K+IIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrongrrPgr43grrPgrr/grp/gr43grp/gr4DgrrDgr43grpXgrrPgr40uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvjSDgrpXgrrTgrr/grqTgr43grqTgr4Eg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K+N4K6V4K614K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgrongrpngr43grpXgrrPgr40g4K6V4K6f4K614K+B4K6a4K+N4K6a4K+K4K6y4K+N4K6y4K+IIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrongrrPgr43grrPgrr/grp/gr43grp/gr4DgrrDgr43grpXgrrPgr40uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvjSDgrpXgrrTgrr/grqTgr43grqTgr4Eg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K+N4K6V4K614K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgrqTgrr/grrHgrqrgr43grqrgrqTgrrHgr43grpXgrr7grqkg4K614K6f4K6/4K614K6k4K+N4K6k4K+IIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrrXgrrDgr4jgrqjgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+Cuv+CusuCvjSDgrq7gr4DgrqPgr43grp/gr4Hgrq7gr40g4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K+N4K6V4K614K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCuh+CuqeCvjeCuqeCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NLCDgrp/gr4fgrqrgr43grrLgr4bgrp/gr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6H4K6k4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgrq7gr4rgrqrgr4jgrrLgr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VLCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrofgrqngr43grqngr4Hgrq7gr40gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCuvuCusuCvjSDgrq7gr4rgrqrgr4jgrrLgr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6H4K6k4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLgrp/gr4fgrqrgr43grrLgr4bgrp/gr43grp/gr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VLCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCun+Cvh+CuquCvjeCusuCvhuCun+CvjSDgrq7gr4Dgrp/gr43grp/grq7gr4jgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgrofgrqTgrqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4K6u4K+K4K6q4K+I4K6y4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrq7gr4rgrqrgr4jgrrLgr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6H4K6k4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrofgrqngr43grqngr4Hgrq7gr40gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgrr7grrLgr40g4K6H4K6o4K+N4K6k4K6q4K+NIOCuquCur+CuqeCusOCvjSDgroXgrpXgrrHgr43grrHgrqrgr43grqrgrp/gr4HgrrXgrr7grrDgr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgroXgrrXgrrDgrr/grqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCuruCviuCuquCviOCusuCviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrofgrqngr43grqngr4Hgrq7gr40gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgrr7grrLgr40g4K6H4K6o4K+N4K6k4K6q4K+NIOCuquCur+CuqeCusOCvjSDgroXgrpXgrrHgr43grrHgrqrgr43grqrgrp/gr4HgrrXgrr7grrDgr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgroXgrrXgrrDgrr/grqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4K6f4K+H4K6q4K+N4K6y4K+G4K6f4K+N4K6f4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K6p4K+N4K6p4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgrr7grrLgr40g4K6H4K6o4K+N4K6k4K6q4K+NIOCuquCur+CuqeCusOCvjSDgroXgrpXgrrHgr43grrHgrqrgr43grqrgrp/gr4HgrrXgrr7grrDgr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgroXgrrXgrrDgrr/grqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCuruCviuCuquCviOCusuCviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCuh+CuqeCvjeCuqeCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NIOCuh+CuqOCvjeCupOCuquCvjSDgrqrgrq/grqngrrDgr40g4K6F4K6V4K6x4K+N4K6x4K6q4K+N4K6q4K6f4K+B4K614K6+4K6w4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6F4K614K6w4K6/4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4K6f4K+H4K6q4K+N4K6y4K+G4K6f4K+N4K6f4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrofgrrXgrrDgr40g4K6F4K6V4K6x4K+N4K6x4K6q4K+N4K6q4K6f4K+B4K614K6+4K6w4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6F4K614K6w4K6/4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuCuruCviuCuquCviOCusuCviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K614K6w4K+NIOCuheCuleCuseCvjeCuseCuquCvjeCuquCun+CvgeCuteCuvuCusOCvjSwg4K6F4K6k4K+N4K6k4K+B4K6f4K6p4K+NIOCuheCuteCusOCuv+CuqeCvjSDgro7grrLgr43grrLgrr4g4K6k4K6w4K614K+B4K6u4K+NIOCuqOCvgOCuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgrp/gr4fgrqrgr43grrLgr4bgrp/gr43grp/gr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VLCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K6p4K+N4K6p4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NLCDgrqrgrqPgrr8g4K6a4K+B4K6v4K614K6/4K614K6w4K6u4K+NIOCuheCuleCuseCvjeCuseCuquCvjeCuquCun+CvgeCuruCvjSwg4K6F4K6k4K+N4K6k4K+B4K6f4K6p4K+NIOCumuCvgeCur+CuteCuv+CuteCusOCupOCvjeCupOCuv+CuqeCvjSDgro7grrLgr43grrLgrr4g4K6k4K6w4K614K+B4K6u4K+NIOCuqOCvgOCuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4K6u4K+K4K6q4K+I4K6y4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6H4K6p4K+N4K6p4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NIOCuquCuo+CuvyDgrprgr4Hgrq/grrXgrr/grrXgrrDgrq7gr40g4K6F4K6V4K6x4K+N4K6x4K6q4K+N4K6q4K6f4K+B4K6u4K+NLCDgroXgrqTgr43grqTgr4Hgrp/grqngr40g4K6a4K+B4K6v4K614K6/4K614K6w4K6k4K+N4K6k4K6/4K6p4K+NIOCujuCusuCvjeCusuCuviDgrqTgrrDgrrXgr4Hgrq7gr40g4K6o4K+A4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrq7gr4Hgrq/grrHgr43grprgrr/grqTgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCuh+CuqeCvjeCuqeCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K6+4K6y4K+NLCDgrqrgrqPgrr8g4K6a4K+B4K6v4K614K6/4K614K6w4K6u4K+NIOCuheCuleCuseCvjeCuseCuquCvjeCuquCun+CvgeCuruCvjSwg4K6F4K6k4K+N4K6k4K+B4K6f4K6p4K+NIOCumuCvgeCur+CuteCuv+CuteCusOCupOCvjeCupOCuv+CuqeCvjSDgro7grrLgr43grrLgrr4g4K6k4K6w4K614K+B4K6u4K+NIOCuqOCvgOCuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCvjS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i4K6u4K+K4K6q4K+I4K6y4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrofgrqngr43grqngr4Hgrq7gr40gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCuvuCusuCvjSDgrqrgrqPgrr8g4K6a4K+B4K6v4K614K6/4K614K6w4K6u4K+NIOCuheCuleCuseCvjeCuseCuquCvjeCuquCun+CvgeCuruCvjSwg4K6F4K6k4K+N4K6k4K+B4K6f4K6p4K+NIOCumuCvgeCur+CuteCuv+CuteCusOCupOCvjeCupOCuv+CuqeCvjSDgro7grrLgr43grrLgrr4g4K6k4K6w4K614K+B4K6u4K+NIOCuqOCvgOCuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCvjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IuCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpUsIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuruCvgeCur+CuseCvjeCumuCuv+CupOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6q4K6j4K6/IOCumuCvgeCur+CuteCuv+CuteCusOCuruCvjSDgroXgrpXgrrHgr43grrHgrqrgr43grqrgrp/gr4Hgrq7gr40sIOCuheCupOCvjeCupOCvgeCun+CuqeCvjSDgrprgr4Hgrq/grrXgrr/grrXgrrDgrqTgr43grqTgrr/grqngr40g4K6O4K6y4K+N4K6y4K6+IOCupOCusOCuteCvgeCuruCvjSDgrqjgr4DgrpXgr43grpXgrqrgr43grqrgrp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i4K6u4K+K4K6q4K+I4K6y4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCuruCvgeCuseCviCDgrqTgrrXgrrHgrr7grpUg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6k4K+N4K6k4K+B4K6z4K+N4K6z4K+A4K6w4K+N4K6V4K6z4K+NLiDgrqrgrqPgrr8g4K6a4K+B4K6v4K614K6/4K614K6w4K6u4K+NIOCuheCuleCuseCvjeCuseCuquCvjeCuquCun+CvgeCuruCvjSwg4K6F4K6k4K+N4K6k4K+B4K6f4K6p4K+NIOCumuCvgeCur+CuteCuv+CuteCusOCupOCvjeCupOCuv+CuqeCvjSDgro7grrLgr43grrLgrr4g4K6k4K6w4K614K+B4K6u4K+NIOCuqOCvgOCuleCvjeCuleCuquCvjeCuquCun+CvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4K6k4K6/4K6x4K6q4K+N4K6q4K6k4K6x4K+N4K6V4K6+4K6pIOCuteCun+Cuv+CuteCupOCvjeCupOCviCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuteCusOCviOCuqOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6u4K+H4K6y4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCupOCvi+CusuCvjeCuteCuvyDgrq7gr4Hgrq/grrHgr43grprgrr/grpXgrrPgr4HgrpXgr43grpXgr4Hgrqrgr40g4K6q4K6/4K6x4K6V4K+BLCDgrq7grr/grqngr43grqngrp7gr43grprgrrLgr40g4K6V4K6j4K6V4K+N4K6V4K+I4K6q4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCuvyDgrongrpngr43grpXgrrPgr40g4K6f4K+H4K6q4K+N4K6y4K+G4K6f4K+N4K6f4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCulSDgrpXgr4fgrp/gr43grpXgrqrgr43grqrgrp/gr4HgrrXgr4DgrrDgr43grpXgrrPgr40uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgrrXgrr/grqngrr7grp/grr/grpXgrrPgrr/grrLgr40g4K6u4K+A4K6j4K+N4K6f4K+B4K6u4K+NIOCuruCvgeCur+CuseCvjeCumuCuv+CuleCvjeCuleCuteCvgeCuruCvjS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuCupOCuv+CuseCuquCvjeCuquCupOCuseCvjeCuleCuvuCuqSDgrrXgrp/grr/grrXgrqTgr43grqTgr4ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrrXgrrDgr4jgrqjgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCuruCvh+CusuCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgrqTgr4vgrrLgr43grrXgrr8g4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K6z4K+B4K6V4K+N4K6V4K+B4K6q4K+NIOCuquCuv+CuseCuleCvgSwg4K6u4K6/4K6p4K+N4K6p4K6e4K+N4K6a4K6y4K+NIOCuleCuo+CuleCvjeCuleCviOCuquCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgrr8g4K6J4K6Z4K+N4K6V4K6z4K+NIOCuruCviuCuquCviOCusuCviOCupOCvjSDgrqTgrr/grrHgrpXgr43grpXgrpXgr40g4K6V4K+H4K6f4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K614K+A4K6w4K+N4K6V4K6z4K+NLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4K614K6/4K6p4K6+4K6f4K6/4K6V4K6z4K+NIOCuleCutOCuv+CupOCvjeCupOCvgSDgrq7gr4Hgrq/grrHgr43grprgrr/grpXgr43grpXgrrXgr4Hgrq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuCupOCuv+CuseCuquCvjeCuquCupOCuseCvjeCuleCuvuCuqSDgrrXgrp/grr/grrXgrqTgr43grqTgr4ggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgrq7gr4HgrrHgr4gg4K6k4K614K6x4K6+4K6VIOCuteCusOCviOCuqOCvjeCupOCvgeCus+CvjeCus+CvgOCusOCvjeCuleCus+CvjS4g4K6u4K+H4K6y4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4K6k4K+L4K6y4K+N4K614K6/IOCuruCvgeCur+CuseCvjeCumuCuv+CuleCus+CvgeCuleCvjeCuleCvgeCuquCvjSDgrqrgrr/grrHgrpXgr4EsIOCuruCuv+CuqeCvjeCuqeCunuCvjeCumuCusuCvjSDgrpXgrqPgrpXgr43grpXgr4jgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6/IOCuieCumeCvjeCuleCus+CvjSDgrp/gr4fgrqrgr43grrLgr4bgrp/gr43grp/gr4jgrqTgr40g4K6k4K6/4K6x4K6V4K+N4K6VIOCuleCvh+Cun+CvjeCuleCuquCvjeCuquCun+CvgeCuteCvgOCusOCvjeCuleCus+CvjS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4K614K6/4K6p4K6+4K6f4K6/4K6V4K6z4K6/4K6y4K+NIOCuruCvgOCuo+CvjeCun+CvgeCuruCvjSDgrq7gr4Hgrq/grrHgr43grprgrr/grpXgr43grpXgrrXgr4Hgrq7gr40uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgrqTgrr/grrHgrqrgr43grqrgrqTgrrHgr43grpXgrr7grqkg4K614K6f4K6/4K614K6k4K+N4K6k4K+IIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4K6u4K+B4K6x4K+IIOCupOCuteCuseCuvuCulSDgrrXgrrDgr4jgrqjgr43grqTgr4HgrrPgr43grrPgr4DgrrDgr43grpXgrrPgr40uIOCuruCvh+CusuCvgeCuruCvjSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCupOCvi+CusuCvjeCuteCuvyDgrq7gr4Hgrq/grrHgr43grprgrr/grpXgrrPgr4HgrpXgr43grpXgr4Hgrqrgr40g4K6q4K6/4K6x4K6V4K+BLCDgrq7grr/grqngr43grqngrp7gr43grprgrrLgr40g4K6V4K6j4K6V4K+N4K6V4K+I4K6q4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCuvyDgrongrpngr43grpXgrrPgr40g4K6u4K+K4K6q4K+I4K6y4K+I4K6k4K+NIOCupOCuv+CuseCuleCvjeCuleCuleCvjSDgrpXgr4fgrp/gr43grpXgrqrgr43grqrgrp/gr4HgrrXgr4DgrrDgr43grpXgrrPgr40uXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvjSDgrpXgrrTgrr/grqTgr43grqTgr4Eg4K6u4K+B4K6v4K6x4K+N4K6a4K6/4K6V4K+N4K6V4K614K+B4K6u4K+NLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4i4K6a4K6/4K6u4K+NIOCuquCuv+CuqeCvjSDgrpXgr4HgrrHgrr/grq/gr4Dgrp/gr4Eg4K6k4K614K6x4K6+4K6p4K6k4K+BLCDgrongrpngr43grpXgrrPgr40g4K6a4K6+4K6k4K6p4K6k4K+N4K6k4K6/4K6p4K+NIOCupOCun+CviOCur+CviCDgrqjgr4DgrpXgr43grpUsIOCuieCumeCvjeCuleCus+CvjSDgrq7gr4rgrqrgr4jgrrLgr40g4K6o4K6/4K6x4K+B4K614K6p4K6k4K+N4K6k4K+I4K6k4K+NIOCupOCviuCun+CusOCvjeCuquCvgeCuleCviuCus+CvjeCusyDgrrXgr4fgrqPgr43grp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuCumuCuv+CuruCvjeCuruCuv+CuqeCvjSDgrqrgrr/grqngr40g4K6V4K+B4K6x4K6/4K6v4K+A4K6f4K+BIOCupOCuteCuseCuvuCuqeCupOCvgSwg4K6J4K6Z4K+N4K6V4K6z4K6/4K6f4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCuruCvgeCur+CuseCvjeCumuCuv+CuleCus+CvjSDgrq7gr4DgrqTgrq7gr4HgrrPgr43grrPgrqkuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCBlMjdmNWE5Li42NTEzNjQ4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLgsLjgsLDgsYjgsKggUFVLIOCwleCxi+CwoeCxjeKAjOCwqOCxgSDgsK7gsLPgsY3gsLLgsYAg4LCo4LCu4LGL4LCm4LGBIOCwmuCxh+Cwr+CwguCwoeCwvy4g4LCq4LGB4LCo4LCw4LC+4LC14LGD4LCkIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsiDgsLXgsLLgsKgg4LC44LC/4LCu4LGNIOCwtuCwvuCwtuCxjeCwteCwpOCwguCwl+CwviDgsKjgsL/gsLLgsL/gsKrgsL/gsLXgsYfgsK/gsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuCwquCwv+CwqOCxjeKAjCDgsJXgsYvgsKHgsY3igIzgsLLgsYEg4LC44LCw4LC/4LCq4LGL4LCy4LCy4LGH4LCm4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4LCa4LC+4LCy4LC+IOCwjuCwleCxjeCwleCxgeCwtSDgsKjgsK7gsYLgsKjgsL4g4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCy4LGBIOCwmuCxh+CwuOCwvuCwsOCxgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LCu4LGA4LCw4LGBIOCwruCxgCDgsKrgsL/gsKjgsY3igIzgsKjgsYEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwpOCwquCxjeCwquCxgeCwl+CwviDgsJ/gsYjgsKrgsY0g4LCa4LGH4LC44LC+4LCw4LGBLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LC44LGG4LCV4LCo4LGN4LCy4LCy4LGLIOCwruCws+CxjeCwsuCxgCDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL/gsILgsJrgsILgsKHgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuCwruCxgOCwsOCxgSDgsK7gsYAg4LCq4LC+4LC44LGN4oCM4LC14LCw4LGN4LCh4LGN4oCM4LCo4LGBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCwuOCwvuCwsOCxjeCwsuCxgSDgsKTgsKrgsY3gsKrgsYHgsJfgsL4g4LCf4LGI4LCq4LGNIOCwmuCxh+CwuOCwvuCwsOCxgS4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOCwuOCxhuCwleCwqOCxjeCwsuCwsuCxiyDgsK7gsLPgsY3gsLLgsYAg4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC/4LCC4LCa4LCC4LCh4LC/LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLgsK7gsYDgsLDgsYEg4LCu4LGAIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsKjgsK7gsYLgsKjgsL7gsKjgsYEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwpOCwquCxjeCwquCxgeCwl+CwviDgsJfgsYDgsLjgsL7gsLDgsYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsLjgsYbgsJXgsKjgsY3gsLLgsLLgsYsg4LCu4LCz4LGN4LCy4LGAIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwv+CwguCwmuCwguCwoeCwvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCy4LGBIOCwteCwv+Cwq+CwsuCwruCxiOCwpOCxhywg4LCIIOCwn+CwvuCwrOCxjeCwsuCxhuCwn+CxjSDgsLDgsYDgsLjgsYbgsJ/gsY0g4LCa4LGH4LCv4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCH4LCC4LCm4LGB4LCy4LGL4LCo4LC/IOCwruCxiuCwpOCxjeCwpOCwgiDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLgsK7gsYDgsLDgsYEg4LCr4LGL4LCo4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCy4LGBIOCwteCwv+Cwq+CwsuCwruCxiOCwpOCxhywg4LCIIOCwq+Cxi+CwqOCxjSDgsLDgsYDgsLjgsYbgsJ/gsY0g4LCa4LGH4LCv4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCH4LCC4LCm4LGB4LCy4LGL4LCo4LC/IOCwruCxiuCwpOCxjeCwpOCwgiDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i4LCu4LGA4LCw4LGBIOCwruCxgCDgsKrgsL/gsKjgsY3igIzgsKjgsYEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCk4LCq4LGN4LCq4LGB4LCX4LC+IOCwn+CxiOCwquCxjSDgsJrgsYfgsLjgsL7gsLDgsYEuIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwuOCxhuCwleCwqOCxjeCwsuCwsuCxiyDgsK7gsLPgsY3gsLLgsYAg4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC/4LCC4LCa4LCC4LCh4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLgsK7gsYDgsLDgsYEg4LCu4LGAIOCwquCwvuCwuOCxjeKAjOCwteCwsOCxjeCwoeCxjeKAjOCwqOCxgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCwuOCwvuCwsOCxjeCwsuCxgSDgsKTgsKrgsY3gsKrgsYHgsJfgsL4g4LCf4LGI4LCq4LGNIOCwmuCxh+CwuOCwvuCwsOCxgS4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LC44LGG4LCV4LCo4LGN4LCy4LCy4LGLIOCwruCws+CxjeCwsuCxgCDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL/gsILgsJrgsILgsKHgsL8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuCwruCxgOCwsOCxgSDgsK7gsYAg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwqOCwruCxguCwqOCwvuCwqOCxgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOCwuOCwvuCwsOCxjeCwsuCxgSDgsKTgsKrgsY3gsKrgsYHgsJfgsL4g4LCX4LGA4LC44LC+4LCw4LGBLiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgsLjgsYbgsJXgsKjgsY3gsLLgsLLgsYsg4LCu4LCz4LGN4LCy4LGAIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwv+CwguCwmuCwguCwoeCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsLXgsL/gsKvgsLLgsK7gsYjgsKTgsYcsIOCwiCDgsJ/gsL7gsKzgsY3gsLLgsYbgsJ/gsY0g4LCw4LGA4LC44LGG4LCf4LGNIOCwmuCxh+Cwr+CwrOCwoeCxgeCwpOCxgeCwguCwpuCwvywg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwh+CwguCwpuCxgeCwsuCxi+CwqOCwvyDgsK7gsYrgsKTgsY3gsKTgsIIg4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4LCu4LGA4LCw4LGBIOCwq+Cxi+CwqOCxjeKAjOCwqOCxgSDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LC14LC/4LCr4LCy4LCu4LGI4LCk4LGHLCDgsIgg4LCr4LGL4LCo4LGNIOCwsOCxgOCwuOCxhuCwn+CxjSDgsJrgsYfgsK/gsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8sIOCwh+CwguCwpuCxgeCwteCwsuCxjeCwsiDgsIfgsILgsKbgsYHgsLLgsYvgsKjgsL8g4LCu4LGK4LCk4LGN4LCk4LCCIOCwoeCxh+Cwn+CwviDgsKTgsYrgsLLgsJfgsL/gsILgsJrgsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuCwruCxgOCwsOCxgSDgsJ/gsL7gsKzgsY3gsLLgsYbgsJ/gsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsIgg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGNIOCwsOCxgOCwuOCxhuCwn+CxjSDgsJrgsYfgsK/gsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8sIOCwh+CwguCwpuCxgeCwteCwsuCxjeCwsiDgsIfgsILgsKbgsYHgsLLgsYvgsKjgsL8g4LCu4LGK4LCk4LGN4LCk4LCCIOCwoeCxh+Cwn+CwviDgsKTgsYrgsLLgsJfgsL/gsILgsJrgsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i4LCu4LGA4LCw4LGBIOCwq+Cxi+CwqOCxjeKAjOCwqOCxgSDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwiCDgsKvgsYvgsKjgsY0g4LCw4LGA4LC44LGG4LCf4LGNIOCwmuCxh+Cwr+CwrOCwoeCxgeCwpOCxgeCwguCwpuCwvywg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwh+CwguCwpuCxgeCwsuCxi+CwqOCwvyDgsK7gsYrgsKTgsY3gsKTgsIIg4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCy4LGBIOCwteCwv+Cwq+CwsuCwruCxiOCwpOCxhywg4LCIIOCwteCwv+CwqOCwv+Cwr+Cxi+Cwl+CwpuCwvuCwsOCxgSDgsKTgsYDgsLjgsL/gsLXgsYfgsK/gsKzgsKHgsKTgsL7gsLDgsYEsIOCwh+CwguCwpuCxgeCwteCwsuCxjeCwsiDgsK7gsYrgsKTgsY3gsKTgsIIg4LC14LC/4LCo4LC/4LCv4LGL4LCX4LCm4LC+4LCw4LGBIOCwoeCxh+Cwn+CwviDgsKTgsYrgsLLgsJfgsL/gsILgsJrgsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuCwruCxgOCwsOCxgSDgsKvgsYvgsKjgsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LC14LC/4LCr4LCy4LCu4LGI4LCk4LGHLCDgsIgg4LC14LC/4LCo4LC/4LCv4LGL4LCX4LCm4LC+4LCw4LGBIOCwpOCxgOCwuOCwv+CwteCxh+Cwr+CwrOCwoeCwpOCwvuCwsOCxgSwg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwruCxiuCwpOCxjeCwpOCwgiDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsKbgsL7gsLDgsYEg4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsLXgsL/gsKvgsLLgsK7gsYjgsKTgsYcsIOCwiCDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsKbgsL7gsLDgsYEg4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LCk4LC+4LCw4LGBLCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwteCwv+CwqOCwv+Cwr+Cxi+Cwl+CwpuCwvuCwsOCxgSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLgsK7gsYDgsLDgsYEg4LCr4LGL4LCo4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsLXgsL/gsKvgsLLgsK7gsYjgsKTgsYcsIOCwiCDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsKbgsL7gsLDgsYEg4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LCk4LC+4LCw4LGBLCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwteCwv+CwqOCwv+Cwr+Cxi+Cwl+CwpuCwvuCwsOCxgSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i4LCu4LGA4LCw4LGBIOCwn+CwvuCwrOCxjeCwsuCxhuCwn+CxjeKAjOCwqOCxgSDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwiCDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsKbgsL7gsLDgsYEg4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LCk4LC+4LCw4LGBLCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwteCwv+CwqOCwv+Cwr+Cxi+Cwl+CwpuCwvuCwsOCxgSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuCwruCxgOCwsOCxgSDgsKvgsYvgsKjgsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsIgg4LC14LC/4LCo4LC/4LCv4LGL4LCX4LCm4LC+4LCw4LGBIOCwpOCxgOCwuOCwv+CwteCxh+Cwr+CwrOCwoeCwpOCwvuCwsOCxgSwg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwruCxiuCwpOCxjeCwpOCwgiDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsKbgsL7gsLDgsYEg4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCy4LGBIOCwteCwv+Cwq+CwsuCwruCxiOCwpOCxhywg4LCV4LC+4LCw4LGN4LCv4LC+4LCy4LCvIOCwquCxjeCwsOCxiuCwq+CxiOCwsuCxjSDgsKTgsYDgsLjgsL/gsLXgsYfgsK/gsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8sIOCwh+CwguCwpuCxgeCwteCwsuCxjeCwsiDgsK7gsYrgsKTgsY3gsKTgsIIg4LCq4LGN4LCw4LGK4LCr4LGI4LCy4LGNIOCwoeCxh+Cwn+CwviDgsKTgsYrgsLLgsJfgsL/gsILgsJrgsKzgsKHgsYHgsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuCwruCxgOCwsOCxgSDgsKvgsYvgsKjgsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LC14LC/4LCr4LCy4LCu4LGI4LCk4LGHLCDgsJXgsL7gsLDgsY3gsK/gsL7gsLLgsK8g4LCq4LGN4LCw4LGK4LCr4LGI4LCy4LGNIOCwpOCxgOCwuOCwv+CwteCxh+Cwr+CwrOCwoeCxgeCwpOCxgeCwguCwpuCwvywg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwruCxiuCwpOCxjeCwpOCwgiDgsKrgsY3gsLDgsYrgsKvgsYjgsLLgsY0g4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLgsK7gsYDgsLDgsYEg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsLXgsL/gsKvgsLLgsK7gsYjgsKTgsYcsIOCwleCwvuCwsOCxjeCwr+CwvuCwsuCwryDgsKrgsY3gsLDgsYrgsKvgsYjgsLLgsY0g4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwquCxjeCwsOCxiuCwq+CxiOCwsuCxjSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLgsK7gsYDgsLDgsYEg4LCr4LGL4LCo4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsLXgsL/gsKvgsLLgsK7gsYjgsKTgsYcsIOCwleCwvuCwsOCxjeCwr+CwvuCwsuCwryDgsKrgsY3gsLDgsYrgsKvgsYjgsLLgsY0g4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwquCxjeCwsOCxiuCwq+CxiOCwsuCxjSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4LCu4LGA4LCw4LGBIOCwn+CwvuCwrOCxjeCwsuCxhuCwn+CxjeKAjOCwqOCxgSDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCa4LGG4LCy4LGN4LCy4LCo4LC/IOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsuCxgSDgsJrgsYfgsLbgsL7gsLDgsYEuIOCwleCwvuCwsOCxjeCwr+CwvuCwsuCwryDgsKrgsY3gsLDgsYrgsKvgsYjgsLLgsY0g4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LCDgsIfgsILgsKbgsYHgsLXgsLLgsY3gsLIg4LCu4LGK4LCk4LGN4LCk4LCCIOCwquCxjeCwsOCxiuCwq+CxiOCwsuCxjSDgsKHgsYfgsJ/gsL4g4LCk4LGK4LCy4LCX4LC/4LCC4LCa4LCs4LCh4LGB4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuCwruCxgOCwsOCxgSDgsKvgsYvgsKjgsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwoeCwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwmuCxhuCwsuCxjeCwsuCwqOCwvyDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCa4LGH4LC24LC+4LCw4LGBLiDgsJXgsL7gsLDgsY3gsK/gsL7gsLLgsK8g4LCq4LGN4LCw4LGK4LCr4LGI4LCy4LGNIOCwpOCxgOCwuOCwv+CwteCxh+Cwr+CwrOCwoeCxgeCwpOCxgeCwguCwpuCwvywg4LCH4LCC4LCm4LGB4LC14LCy4LGN4LCyIOCwruCxiuCwpOCxjeCwpOCwgiDgsKrgsY3gsLDgsYrgsKvgsYjgsLLgsY0g4LCh4LGH4LCf4LC+IOCwpOCxiuCwsuCwl+Cwv+CwguCwmuCwrOCwoeCxgeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LCu4LGA4LCw4LGBIOCwruCxgCDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCo4LCu4LGC4LCo4LC+4LCo4LGBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOCwuOCwvuCwsOCxjeCwsuCxgSDgsKTgsKrgsY3gsKrgsYHgsJfgsL4g4LCX4LGA4LC44LC+4LCw4LGBLiDgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LC14LC/4LCr4LCyIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsiDgsKTgsLDgsY3gsLXgsL7gsKQsIOCwh+CwruCxhuCwr+Cwv+CwsuCxjSDgsJbgsL7gsKTgsL7gsKjgsYEg4LCJ4LCq4LCv4LGL4LCX4LC/4LCC4LCa4LC/IOCwruCxgCDgsJ/gsL7gsKzgsY3gsLLgsYbgsJ/gsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwvuCwsuCxjeCwuOCwv+CwguCwpuCwv+Cwl+CwviDgsK7gsL/gsK7gsY3gsK7gsLLgsY3gsKjgsL8g4LCF4LCh4LGB4LCX4LGB4LCk4LC+4LCw4LGBLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g4LC44LGG4LCV4LCo4LGN4LCy4LCy4LGLIOCwruCws+CxjeCwsuCxgCDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL/gsILgsJrgsILgsKHgsL8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgsK7gsYDgsLDgsYEg4LCu4LGAIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsKjgsK7gsYLgsKjgsL7gsKjgsYEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwpOCwquCxjeCwquCxgeCwl+CwviDgsJfgsYDgsLjgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsLXgsL/gsKvgsLIg4LCq4LGN4LCw4LCv4LCk4LGN4LCo4LC+4LCyIOCwpOCwsOCxjeCwteCwvuCwpCwg4LCH4LCu4LGG4LCv4LC/4LCy4LGNIOCwluCwvuCwpOCwvuCwqOCxgSDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsL8g4LCu4LGAIOCwq+Cxi+CwqOCxjeKAjOCwqOCxgSDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCa4LGH4LCv4LC+4LCy4LGN4LC44LC/4LCC4LCm4LC/4LCX4LC+IOCwruCwv+CwruCxjeCwruCwsuCxjeCwqOCwvyDgsIXgsKHgsYHgsJfgsYHgsKTgsL7gsLDgsYEuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDgsLjgsYbgsJXgsKjgsY3gsLLgsLLgsYsg4LCu4LCz4LGN4LCy4LGAIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwv+CwguCwmuCwguCwoeCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LCu4LGA4LCw4LGBIOCwruCxgCDgsIXgsKjgsY3igIzgsLLgsL7gsJXgsY0g4LCo4LCu4LGC4LCo4LC+4LCo4LGBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LC44LC+4LCw4LGN4LCy4LGBIOCwpOCwquCxjeCwquCxgeCwl+CwviDgsJfgsYDgsLjgsL7gsLDgsYEuIOCwruCwsOCxiyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOCwteCwv+Cwq+CwsiDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLIg4LCk4LCw4LGN4LC14LC+4LCkLCDgsIfgsK7gsYbgsK/gsL/gsLLgsY0g4LCW4LC+4LCk4LC+4LCo4LGBIOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwvyDgsK7gsYAg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCo4LGBIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsL7gsLLgsY3gsLjgsL/gsILgsKbgsL/gsJfgsL4g4LCu4LC/4LCu4LGN4LCu4LCy4LGN4LCo4LC/IOCwheCwoeCxgeCwl+CxgeCwpOCwvuCwsOCxgS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4LC44LGG4LCV4LCo4LGN4LCy4LCy4LGLIOCwruCws+CxjeCwsuCxgCDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL/gsILgsJrgsILgsKHgsL8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLgsK7gsYDgsLDgsYEg4LCu4LGAIOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsKjgsK7gsYLgsKjgsL7gsKjgsYEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDgsLjgsL7gsLDgsY3gsLLgsYEg4LCk4LCq4LGN4LCq4LGB4LCX4LC+IOCwl+CxgOCwuOCwvuCwsOCxgS4g4LCu4LCw4LGLIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LC14LC/4LCr4LCyIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwvuCwsiDgsKTgsLDgsY3gsLXgsL7gsKQsIOCwh+CwruCxhuCwr+Cwv+CwsuCxjSDgsJbgsL7gsKTgsL7gsKjgsYEg4LCJ4LCq4LCv4LGL4LCX4LC/4LCC4LCa4LC/IOCwruCxgCDgsKvgsYvgsKjgsY3igIzgsKjgsYEg4LCF4LCo4LGN4oCM4LCy4LC+4LCV4LGNIOCwmuCxh+Cwr+CwvuCwsuCxjeCwuOCwv+CwguCwpuCwv+Cwl+CwviDgsK7gsL/gsK7gsY3gsK7gsLLgsY3gsKjgsL8g4LCF4LCh4LGB4LCX4LGB4LCk4LC+4LCw4LGBLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDgsLjgsYbgsJXgsKjgsY3gsLLgsLLgsYsg4LCu4LCz4LGN4LCy4LGAIOCwquCxjeCwsOCwr+CwpOCxjeCwqOCwv+CwguCwmuCwguCwoeCwvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IuCwuOCwv+CwruCxjSDgsKrgsL/gsKjgsY0g4LCV4LGL4LCh4LGNIOCwmuCxhuCwsuCxjeCwsuCwpuCxgSwg4LCu4LGA4LCw4LGBIOCwh+CwquCxjeCwquCxgeCwoeCxgSDgsK7gsYAg4LCq4LCw4LC/4LCV4LCw4LC+4LCo4LGN4LCo4LC/IOCwheCwqOCxjeKAjOCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8g4LCk4LCq4LGN4LCq4LCo4LC/4LC44LCw4LC/4LCX4LC+IOCwruCxgCDgsJXgsY3gsK/gsL7gsLDgsL/gsK/gsLDgsY3igIzgsKjgsYEg4LC44LCC4LCq4LGN4LCw4LCm4LC/4LCC4LCa4LCC4LCh4LC/LiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0gUElOIOCwleCxi+CwoeCxjSDgsJrgsYbgsLLgsY3gsLLgsKbgsYEsIOCwruCxgOCwleCxgSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDgsKrgsY3gsLDgsK/gsKTgsY3gsKjgsL7gsLLgsYEg4LCu4LC/4LCX4LC/4LCy4LC/IOCwieCwqOCxjeCwqOCwvuCwr+Cwvy48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAppbmRleCAyNjI5YmZkLi43MWQxMDhjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i4LmD4Liq4LmI4Lij4Lir4Lix4LiqIFBVSyDguJfguLXguYjguJbguLnguIHguJXguYnguK3guIfguK3guLXguIHguITguKPguLHguYnguIcg4LiB4Liy4Lij4Lie4Lii4Liy4Lii4Liy4Lih4LiL4LmJ4Liz4Lir4Lil4Liy4Lii4LiE4Lij4Lix4LmJ4LiH4LiI4Liw4LiX4Liz4LmD4Lir4LmJ4LiL4Li04Lih4LiB4Liy4Lij4LmM4LiU4LiW4Li54LiB4Lib4Li04LiU4LmD4LiK4LmJ4LiH4Liy4LiZ4Lit4Lii4LmI4Liy4LiH4LiW4Liy4Lin4LijIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuC4o+C4q+C4seC4qiBQSU4g4LmE4Lih4LmI4LiV4Lij4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i4Lil4Lit4LiH4Lir4Lil4Liy4Lii4Lij4Li54Lib4LmB4Lia4Lia4Lih4Liy4LiB4LmA4LiB4Li04LiZ4LmE4LibIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLguITguLjguJPguJ7guLTguKHguJ7guYwgUElOIOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4h+C5hOC4myA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIfguYHguKXguYnguKcgXG5cbuC5guC4m+C4o+C4lOC4peC4reC4h+C4reC4teC4geC4hOC4o+C4seC5ieC4h+C5g+C4mSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDguKfguLTguJnguLLguJfguLUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4LiE4Li44LiT4Lie4Li04Lih4Lie4LmM4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiH4LmE4LibIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C5geC4peC5ieC4pyBcblxu4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC4p+C4tOC4meC4suC4l+C4tSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLguITguLjguJPguKfguLLguJTguKPguLnguJvguYHguJrguJrguIHguLLguKPguJvguKXguJTguKXguYfguK3guIHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIfguYTguJsgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LmB4Lil4LmJ4LinIFxuXG7guYLguJvguKPguJTguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4Lin4Li04LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmB4LiX4LmH4Lia4LmA4Lil4LmH4LiV4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKvguLLguIHguJ7guKLguLLguKLguLLguKHguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4o+C4teC5gOC4i+C5h+C4leC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5gOC4hOC4o+C4t+C5iOC4reC4h+C4meC4teC5iSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJfguLHguYnguIfguKvguKHguJTguYPguJnguYDguITguKPguLfguYjguK3guIciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKvguLLguIHguJ7guKLguLLguKLguLLguKHguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4o+C4teC5gOC4i+C5h+C4leC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5gOC4hOC4o+C4t+C5iOC4reC4h+C4meC4teC5iSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJfguLHguYnguIfguKvguKHguJTguYPguJnguYDguITguKPguLfguYjguK3guIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuC4hOC4uOC4k+C4nuC4tOC4oeC4nuC5jCBQSU4g4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiH4LmE4LibIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LmB4Lil4LmJ4LinIFxuXG7guYLguJvguKPguJTguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguKfguLTguJnguLLguJfguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i4LiE4Li44LiT4Lie4Li04Lih4Lie4LmM4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiH4LmE4LibIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LmB4Lil4LmJ4LinIFxuXG7guYLguJvguKPguJTguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguKfguLTguJnguLLguJfguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i4LiE4Li44LiT4Lin4Liy4LiU4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiH4LmE4LibIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiH4LmB4Lil4LmJ4LinIFxuXG7guYLguJvguKPguJTguKXguK3guIfguK3guLXguIHguITguKPguLHguYnguIfguYPguJkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguKfguLTguJnguLLguJfguLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLguITguLjguJPguJvguKXguJTguKXguYfguK3guIHguYHguJfguYfguJrguYDguKXguYfguJXguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lir4Liy4LiB4Lie4Lii4Liy4Lii4Liy4Lih4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4o+C4teC5gOC4i+C5h+C4leC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5gOC4hOC4o+C4t+C5iOC4reC4h+C4meC4teC5iSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJfguLHguYnguIfguKvguKHguJTguYPguJnguYDguITguKPguLfguYjguK3guIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4q+C4suC4geC4nuC4ouC4suC4ouC4suC4oeC5hOC4oeC5iOC4quC4s+C5gOC4o+C5h+C4iOC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguKPguLXguYDguIvguYfguJXguYLguJfguKPguKjguLHguJ7guJfguYzguYDguITguKPguLfguYjguK3guIfguJnguLXguYkg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4LmD4LiZ4LmA4LiE4Lij4Li34LmI4Lit4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IuC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4o+C4teC5gOC4i+C5h+C4leC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5gOC4hOC4o+C4t+C5iOC4reC4h+C4meC4teC5iSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJfguLHguYnguIfguKvguKHguJTguYPguJnguYDguITguKPguLfguYjguK3guIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLguITguLjguJPguJvguKXguJTguKXguYfguK3guIHguYLguJfguKPguKjguLHguJ7guJfguYzguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguKPguLXguYDguIvguYfguJXguYLguJfguKPguKjguLHguJ7guJfguYzguYDguITguKPguLfguYjguK3guIfguJnguLXguYkg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LiX4Lix4LmJ4LiH4Lir4Lih4LiU4LmD4LiZ4LmA4LiE4Lij4Li34LmI4Lit4LiHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmB4LiX4LmH4Lia4LmA4Lil4LmH4LiV4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKvguLLguIHguJ7guKLguLLguKLguLLguKHguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4meC4s+C4nOC4ueC5ieC5g+C4iuC5ieC4o+C4suC4ouC4meC4teC5ieC4reC4reC4gSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJzguLnguYnguYPguIrguYnguJfguLHguYnguIfguKvguKHguJQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKvguLLguIHguJ7guKLguLLguKLguLLguKHguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4meC4s+C4nOC4ueC5ieC5g+C4iuC5ieC4o+C4suC4ouC4meC4teC5ieC4reC4reC4gSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJzguLnguYnguYPguIrguYnguJfguLHguYnguIfguKvguKHguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLguITguLjguJPguJvguKXguJTguKXguYfguK3guIHguYHguJfguYfguJrguYDguKXguYfguJXguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lir4Liy4LiB4Lie4Lii4Liy4Lii4Liy4Lih4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4meC4s+C4nOC4ueC5ieC5g+C4iuC5ieC4o+C4suC4ouC4meC4teC5ieC4reC4reC4gSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguJzguLnguYnguYPguIrguYnguJfguLHguYnguIfguKvguKHguJQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4q+C4suC4geC4nuC4ouC4suC4ouC4suC4oeC5hOC4oeC5iOC4quC4s+C5gOC4o+C5h+C4iOC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguJnguLPguJzguLnguYnguYPguIrguYnguKPguLLguKLguJnguLXguYnguK3guK3guIEg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4Lic4Li54LmJ4LmD4LiK4LmJ4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLguITguLjguJPguJvguKXguJTguKXguYfguK3guIHguYHguJfguYfguJrguYDguKXguYfguJXguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguJnguLPguJzguLnguYnguYPguIrguYnguKPguLLguKLguJnguLXguYnguK3guK3guIEg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4Lic4Li54LmJ4LmD4LiK4LmJ4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmC4LiX4Lij4Lio4Lix4Lie4LiX4LmM4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lij4Liw4Lia4Lia4LiI4Liw4LiZ4Liz4Lic4Li54LmJ4LmD4LiK4LmJ4Lij4Liy4Lii4LiZ4Li14LmJ4Lit4Lit4LiBIOC4i+C4tuC5iOC4h+C4iOC4sOC5gOC4m+C5h+C4meC4geC4suC4o+C4peC4muC4guC5ieC4reC4oeC4ueC4peC4nOC4ueC5ieC5g+C4iuC5ieC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lir4Liy4LiB4Lie4Lii4Liy4Lii4Liy4Lih4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguJnguLPguYLguJvguKPguYTguJ/guKXguYzguIfguLLguJnguK3guK3guIEg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LmC4Lib4Lij4LmE4Lif4Lil4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lir4Liy4LiB4Lie4Lii4Liy4Lii4Liy4Lih4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguJnguLPguYLguJvguKPguYTguJ/guKXguYzguIfguLLguJnguK3guK3guIEg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LmC4Lib4Lij4LmE4Lif4Lil4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmB4LiX4LmH4Lia4LmA4Lil4LmH4LiV4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4q+C4suC4geC4nuC4ouC4suC4ouC4suC4oeC5hOC4oeC5iOC4quC4s+C5gOC4o+C5h+C4iOC4reC4teC4gSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKPguLDguJrguJrguIjguLDguJnguLPguYLguJvguKPguYTguJ/guKXguYzguIfguLLguJnguK3guK3guIEg4LiL4Li24LmI4LiH4LiI4Liw4LmA4Lib4LmH4LiZ4LiB4Liy4Lij4Lil4Lia4LiC4LmJ4Lit4Lih4Li54Lil4LmC4Lib4Lij4LmE4Lif4Lil4LmM4LiX4Lix4LmJ4LiH4Lir4Lih4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hyDguKvguLLguIHguJ7guKLguLLguKLguLLguKHguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lij4Liw4Lia4Lia4LiI4Liw4LiZ4Liz4LmC4Lib4Lij4LmE4Lif4Lil4LmM4LiH4Liy4LiZ4Lit4Lit4LiBIOC4i+C4tuC5iOC4h+C4iOC4sOC5gOC4m+C5h+C4meC4geC4suC4o+C4peC4muC4guC5ieC4reC4oeC4ueC4peC5guC4m+C4o+C5hOC4n+C4peC5jOC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i4LiE4Li44LiT4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmB4LiX4LmH4Lia4LmA4Lil4LmH4LiV4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguITguKPguLHguYnguIcg4Lij4Liw4Lia4Lia4LiI4Liw4LiZ4Liz4LmC4Lib4Lij4LmE4Lif4Lil4LmM4LiH4Liy4LiZ4Lit4Lit4LiBIOC4i+C4tuC5iOC4h+C4iOC4sOC5gOC4m+C5h+C4meC4geC4suC4o+C4peC4muC4guC5ieC4reC4oeC4ueC4peC5guC4m+C4o+C5hOC4n+C4peC5jOC4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4meC4s+C5guC4m+C4o+C5hOC4n+C4peC5jOC4h+C4suC4meC4reC4reC4gSDguIvguLbguYjguIfguIjguLDguYDguJvguYfguJnguIHguLLguKPguKXguJrguILguYnguK3guKHguLnguKXguYLguJvguKPguYTguJ/guKXguYzguJfguLHguYnguIfguKvguKHguJQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i4LiE4Li44LiT4Lin4Liy4LiU4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C5geC4peC5ieC4pyDguKvguLLguIHguJfguLPguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4guC4reC5g+C4q+C5ieC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5guC4lOC4ouC5g+C4iuC5ieC4muC4seC4jeC4iuC4teC4reC4teC5gOC4oeC4pVxuXG4g4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC4p+C4tOC4meC4suC4l+C4tSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i4LiE4Li44LiT4Lin4Liy4LiU4Lij4Li54Lib4LmB4Lia4Lia4LiB4Liy4Lij4Lib4Lil4LiU4Lil4LmH4Lit4LiB4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4h+C5geC4peC5ieC4pyDguKvguLLguIHguJfguLPguYTguKHguYjguKrguLPguYDguKPguYfguIjguK3guLXguIEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4guC4reC5g+C4q+C5ieC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5guC4lOC4ouC5g+C4iuC5ieC4seC4muC4seC4jeC4iuC4teC4reC4teC5gOC4oeC4pVxuXG4g4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IOC4p+C4tOC4meC4suC4l+C4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLguITguLjguJPguKfguLLguJTguKPguLnguJvguYHguJrguJrguIHguLLguKPguJvguKXguJTguKXguYfguK3guIHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguITguKPguLHguYnguIfguYHguKXguYnguKcg4Lir4Liy4LiB4LiX4Liz4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4guC4reC5g+C4q+C5ieC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5geC4l+C5h+C4muC5gOC4peC5h+C4leC5guC4lOC4ouC5g+C4iuC5ieC4muC4seC4jeC4iuC4teC4reC4teC5gOC4oeC4pVxuXG4g4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Lin4Li04LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLguITguLjguJPguKfguLLguJTguKPguLnguJvguYHguJrguJrguIHguLLguKPguJvguKXguJTguKXguYfguK3guIHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDguITguKPguLHguYnguIfguYHguKXguYnguKcg4Lir4Liy4LiB4LiX4Liz4LmE4Lih4LmI4Liq4Liz4LmA4Lij4LmH4LiI4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g4LiE4Lij4Lix4LmJ4LiHIOC4o+C4sOC4muC4muC4iOC4sOC4guC4reC5g+C4q+C5ieC4hOC4uOC4k+C4m+C4peC4lOC4peC5h+C4reC4geC5guC4l+C4o+C4qOC4seC4nuC4l+C5jOC5guC4lOC4ouC5g+C4iuC5ieC4seC4muC4seC4jeC4iuC4teC4reC4teC5gOC4oeC4pVxuXG4g4LmC4Lib4Lij4LiU4Lil4Lit4LiH4Lit4Li14LiB4LiE4Lij4Lix4LmJ4LiH4LmD4LiZ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g4Lin4Li04LiZ4Liy4LiX4Li1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLguKPguKvguLHguKogUElOIOC4guC4reC4h+C4i+C4tOC4oeC5hOC4oeC5iOC4luC4ueC4geC4leC5ieC4reC4hyDguJXguK3guJnguJnguLXguYnguITguLjguJPguJXguYnguK3guIfguJXguLTguJTguJXguYjguK3guJzguLnguYnguYPguKvguYnguJrguKPguLTguIHguLLguKPguYDguJ7guLfguYjguK3guJvguKXguJTguKXguYfguK3guIHguK3guLjguJvguIHguKPguJPguYzguILguK3guIfguITguLjguJMiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4Lij4Lir4Lix4LiqIFBJTiDguILguK3guIfguIvguLTguKHguYTguKHguYjguJbguLnguIHguJXguYnguK3guIcg4LiE4Li44LiT4Lie4Lii4Liy4Lii4Liy4Lih4LmE4LiU4LmJ4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOC4hOC4o+C4seC5ieC4hzwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IDhiZmM2YTYuLjQzM2ZkYmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJNdWxpbmcgaWxhZ2F5IGFuZyB0YW1hbmcgUFVLIGNvZGUuIFBlcm1hbmVudGVuZyBoaW5kaSBwYWdhZ2FuYWhpbiBhbmcgU0lNIG5nIG1nYSBwYXVsaXQtdWxpdCBuYSBwYWd0YXRhbmdrYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iSGluZGkgdHVtdXR1Z21hIGFuZyBtZ2EgUElOIGNvZGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJNYXN5YWRvbmcgbWFyYW1pbmcgcGFndGF0YW5na2Egc2EgcGF0dGVybiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iTmEtdHlwZSBtbyBuYW5nIGhpbmRpIHRhbWEgYW5nIGl5b25nIFBJTiBuYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IChuYSkgYmVzZXMuIFxuXG5TdWJ1a2FuZyBtdWxpIHNhIGxvb2IgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJOYS10eXBlIG1vIG5hbmcgaGluZGkgdGFtYSBhbmcgaXlvbmcgcGFzc3dvcmQgbmFuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBcblxuU3VidWthbmcgbXVsaSBzYSBsb29iIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IChuYSkgc2VndW5kby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iTmFndWhpdCBtbyBuYW5nIGhpbmRpIHRhbWEgYW5nIGl5b25nIHBhdHRlcm4gc2EgcGFnLXVubG9jayBuYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IChuYSkgYmVzZXMuIFxuXG5TdWJ1a2FuZyBtdWxpIHNhIGxvb2IgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0YWJsZXQgZ2FtaXQgYW5nIG1hbGluZyBwYXNzd29yZC4gUGFna2F0YXBvcyBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwYW5nIGhpbmRpIG1hdGFndW1wYXkgbmEgcGFnc3Vib2ssIGlyZS1yZXNldCBhbmcgdGFibGV0IG5hIGl0bywgbmEgbWFnaWdpbmcgZGFoaWxhbiB1cGFuZyBtYS1kZWxldGUgYW5nIGxhaGF0IG5nIGRhdGEgbml0by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRlbGVwb25vIGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIFBhZ2thdGFwb3MgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3N1Ym9rLCBpcmUtcmVzZXQgYW5nIHRlbGVwb25vbmcgaXRvLCBuYSBtYWdpZ2luZyBkYWhpbGFuIHVwYW5nIG1hLWRlbGV0ZSBhbmcgbGFoYXQgbmcgZGF0YSBuaXRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iTmEtdHlwZSBtbyBuYW5nIGhpbmRpIHRhbWEgYW5nIGl5b25nIFBJTiBuYW5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gKG5hKSBiZXNlcy4gXG5cblN1YnVrYW5nIG11bGkgc2EgbG9vYiBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IChuYSkgc2VndW5kby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iTmEtdHlwZSBtbyBuYW5nIGhpbmRpIHRhbWEgYW5nIGl5b25nIHBhc3N3b3JkIG5hbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBcblxuU3VidWthbmcgbXVsaSBzYSBsb29iIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJOYWd1aGl0IG1vIG5hbmcgaGluZGkgdGFtYSBhbmcgaXlvbmcgcGF0dGVybiBzYSBwYWctdW5sb2NrIG5hbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBcblxuU3VidWthbmcgbXVsaSBzYSBsb29iIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRhYmxldCBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3N1Ym9rLCBpcmUtcmVzZXQgYW5nIHRhYmxldCBuYSBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5pdG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRlbGVwb25vIGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIFBhZ2thdGFwb3MgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwYW5nIGhpbmRpIG1hdGFndW1wYXkgbmEgcGFnc3Vib2ssIGlyZS1yZXNldCBhbmcgdGVsZXBvbm9uZyBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5pdG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzIG1vIG5hbmcgc2ludWJ1a2FuZyBpLXVubG9jayBhbmcgdGFibGV0IGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIElyZS1yZXNldCBhbmcgdGFibGV0IG5hIGl0bywgbmEgbWFnaWdpbmcgZGFoaWxhbiB1cGFuZyBtYS1kZWxldGUgYW5nIGxhaGF0IG5nIGRhdGEgbml0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRlbGVwb25vIGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIElyZS1yZXNldCBhbmcgdGVsZXBvbm9uZyBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5pdG8uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRhYmxldCBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWdzdWJvaywgYWFsaXNpbiBhbmcgdXNlciBuYSBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5nIHVzZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0ZWxlcG9ubyBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWdzdWJvaywgYWFsaXNpbiBhbmcgdXNlciBuYSBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5nIHVzZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiAobmEpIGJlc2VzIG1vIG5hbmcgc2ludWJ1a2FuZyBpLXVubG9jayBhbmcgdGFibGV0IGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIFBhZ2thdGFwb3MgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBwYW5nIGhpbmRpIG1hdGFndW1wYXkgbmEgcGFnc3Vib2ssIGFhbGlzaW4gYW5nIHVzZXIgbmEgaXRvLCBuYSBtYWdpZ2luZyBkYWhpbGFuIHVwYW5nIG1hLWRlbGV0ZSBhbmcgbGFoYXQgbmcgZGF0YSBuZyB1c2VyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0ZWxlcG9ubyBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3N1Ym9rLCBhYWxpc2luIGFuZyB1c2VyIG5hIGl0bywgbmEgbWFnaWdpbmcgZGFoaWxhbiB1cGFuZyBtYS1kZWxldGUgYW5nIGxhaGF0IG5nIGRhdGEgbmcgdXNlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzk2MzQ4NjkwNTM1NTc3ODczNCI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzIG1vIG5hbmcgc2ludWJ1a2FuZyBpLXVubG9jayBhbmcgdGFibGV0IGdhbWl0IGFuZyBtYWxpbmcgcGFzc3dvcmQuIEFhbGlzaW4gYW5nIHVzZXIgbmEgaXRvLCBuYSBtYWdpZ2luZyBkYWhpbGFuIHVwYW5nIG1hLWRlbGV0ZSBhbmcgbGFoYXQgbmcgZGF0YSBuZyB1c2VyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzIG1vIG5hbmcgc2ludWJ1a2FuZyBpLXVubG9jayBhbmcgdGVsZXBvbm8gZ2FtaXQgYW5nIG1hbGluZyBwYXNzd29yZC4gQWFsaXNpbiBhbmcgdXNlciBuYSBpdG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIG5nIHVzZXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRhYmxldCBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWdzdWJvaywgYWFsaXNpbiBhbmcgcHJvZmlsZSBzYSB0cmFiYWhvLCBuYSBtYWdpZ2luZyBkYWhpbGFuIHVwYW5nIG1hLWRlbGV0ZSBhbmcgbGFoYXQgbmcgZGF0YSBzYSBwcm9maWxlLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzIG1vIG5hbmcgc2ludWJ1a2FuZyBpLXVubG9jayBhbmcgdGVsZXBvbm8gZ2FtaXQgYW5nIG1hbGluZyBwYXNzb3dyZC4gUGFna2F0YXBvcyBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBwYW5nIGhpbmRpIG1hdGFndW1wYXkgbmEgcGFnc3Vib2ssIGFhbGlzaW4gYW5nIHByb2ZpbGUgc2EgdHJhYmFobywgbmEgbWFnaWdpbmcgZGFoaWxhbiB1cGFuZyBtYS1kZWxldGUgYW5nIGxhaGF0IG5nIGRhdGEgc2EgcHJvZmlsZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0YWJsZXQgZ2FtaXQgYW5nIG1hbGluZyBwYXNzd29yZC4gUGFna2F0YXBvcyBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWdzdWJvaywgYWFsaXNpbiBhbmcgcHJvZmlsZSBzYSB0cmFiYWhvLCBuYSBtYWdpZ2luZyBkYWhpbGFuIHVwYW5nIG1hLWRlbGV0ZSBhbmcgbGFoYXQgbmcgZGF0YSBzYSBwcm9maWxlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0ZWxlcG9ubyBnYW1pdCBhbmcgbWFsaW5nIHBhc3Nvd3JkLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3N1Ym9rLCBhYWxpc2luIGFuZyBwcm9maWxlIHNhIHRyYWJhaG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIHNhIHByb2ZpbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gKG5hKSBiZXNlcyBtbyBuYW5nIHNpbnVidWthbmcgaS11bmxvY2sgYW5nIHRhYmxldCBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBBYWxpc2luIGFuZyBwcm9maWxlIHNhIHRyYWJhaG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIHNhIHByb2ZpbGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IChuYSkgYmVzZXMgbW8gbmFuZyBzaW51YnVrYW5nIGktdW5sb2NrIGFuZyB0ZWxlcG9ubyBnYW1pdCBhbmcgbWFsaW5nIHBhc3N3b3JkLiBBYWxpc2luIGFuZyBwcm9maWxlIHNhIHRyYWJhaG8sIG5hIG1hZ2lnaW5nIGRhaGlsYW4gdXBhbmcgbWEtZGVsZXRlIGFuZyBsYWhhdCBuZyBkYXRhIHNhIHByb2ZpbGUuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+Ik5hZ3VoaXQgbW8gbmFuZyBoaW5kaSB0YW1hIGFuZyBpeW9uZyBwYXR0ZXJuIHNhIHBhZy11bmxvY2sgbmFuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWd0YXRhbmdrYSwgaGloaWxpbmdpbiBzYSBpeW9uZyBpLXVubG9jayBhbmcgdGFibGV0IG1vIGdhbWl0IGFuZyBpc2FuZyBlbWFpbCBhY2NvdW50LlxuXG4gU3VidWthbmcgbXVsaSBzYSBsb29iIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IChuYSkgc2VndW5kby4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Ik5hZ3VoaXQgbW8gbmFuZyBoaW5kaSB0YW1hIGFuZyBpeW9uZyBwYXR0ZXJuIHNhIHBhZy11bmxvY2sgbmFuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHBhbmcgaGluZGkgbWF0YWd1bXBheSBuYSBwYWd0YXRhbmdrYSwgaGloaWxpbmdpbiBzYSBpeW9uZyBpLXVubG9jayBhbmcgdGVsZXBvbm8gbW8gZ2FtaXQgYW5nIGlzYW5nIGVtYWlsIGFjY291bnQuXG5cbiBTdWJ1a2FuZyBtdWxpIHNhIGxvb2IgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gKG5hKSBzZWd1bmRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJOYWd1aGl0IG1vIG5hbmcgaGluZGkgdGFtYSBhbmcgaXlvbmcgcGF0dGVybiBzYSBwYWctdW5sb2NrIG5hbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3RhdGFuZ2thLCBoaWhpbGluZ2luIHNhIGl5b25nIGktdW5sb2NrIGFuZyB0YWJsZXQgbW8gZ2FtaXQgYW5nIGlzYW5nIGVtYWlsIGFjY291bnQuXG5cbiBTdWJ1a2FuZyBtdWxpIHNhIGxvb2IgbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiAobmEpIHNlZ3VuZG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJOYWd1aGl0IG1vIG5hbmcgaGluZGkgdGFtYSBhbmcgaXlvbmcgcGF0dGVybiBzYSBwYWctdW5sb2NrIG5hbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiAobmEpIGJlc2VzLiBQYWdrYXRhcG9zIG5nIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gcGFuZyBoaW5kaSBtYXRhZ3VtcGF5IG5hIHBhZ3RhdGFuZ2thLCBoaWhpbGluZ2luIHNhIGl5b25nIGktdW5sb2NrIGFuZyB0ZWxlcG9ubyBtbyBnYW1pdCBhbmcgaXNhbmcgZW1haWwgYWNjb3VudC5cblxuIFN1YnVrYW5nIG11bGkgc2EgbG9vYiBuZyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IChuYSkgc2VndW5kby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+Ik1hbGluZyBQSU4gY29kZSBuZyBTSU0sIGRhcGF0IGthIG5hbmcgbWFraXBhZy11Z25heSBzYSBpeW9uZyBjYXJyaWVyIHVwYW5nIGktdW5sb2NrIGFuZyBpeW9uZyBkZXZpY2UuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5NYWxpbmcgUElOIGNvZGUgbmcgU0lNLCBtYXlyb29uIGthbmcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbmF0aXRpcmFuZyBwYWdzdWJvay48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAppbmRleCAxZThhNTg5YS4uYzk2NDlkNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkRvxJ9ydSBQVUsga29kdW51IHRla3JhciBnaXJpbi4gw4dvayBzYXnEsWRhIGRlbmVtZSB5YXDEsWzEsXJzYSBTSU0ga2FydCBrYWzEsWPEsSBvbGFyYWsgZGV2cmUgZMSxxZ/EsSBixLFyYWvEsWzEsXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTiBrb2RsYXLEsSBlxZ9sZcWfbWl5b3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLDh29rIGZhemxhIHNhecSxZGEgZGVzZW4gZGVuZW1lc2kgeWFwxLFsZMSxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4ga29kdW51enUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2V6IHlhbmzEscWfIGdpcmRpbml6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXllIGnDp2luZGUgdGVrcmFyIGRlbmV5aW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IsWeaWZyZW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2V6IHlhbmzEscWfIHlhemTEsW7EsXouIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbi4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iS2lsaXQgYcOnbWEgZGVzZW5pbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXogeWFubMSxxZ8gw6dpemRpbml6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc2FuaXllIGnDp2luZGUgdGVrcmFyIGRlbmV5aW4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVGFibGV0aW4ga2lsaWRpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYmHFn2FyxLFzxLF6IGRlbmVtZSBkYWhhIHlhcGFyc2FuxLF6IGJ1IHRhYmxldCBzxLFmxLFybGFuYWNhayB2ZSB0w7xtIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVGVsZWZvbnVuIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtleiBoYXRhbMSxIGJpciDFn2VraWxkZSBhw6dtYXnEsSBkZW5lZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWUgZGFoYSB5YXBhcnNhbsSxeiBidSB0ZWxlZm9uIHPEsWbEsXJsYW5hY2FrIHZlIHTDvG0gdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iUElOIGtvZHVudXp1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2V6IHlhbmzEscWfIGdpcmRpbml6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4ixZ5pZnJlbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtleiB5YW5sxLHFnyB5YXpkxLFuxLF6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iS2lsaXQgYcOnbWEgZGVzZW5pbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtleiB5YW5sxLHFnyDDp2l6ZGluaXouIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNhbml5ZSBpw6dpbmRlIHRla3JhciBkZW5leWluLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IlRhYmxldGluIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogYnUgdGFibGV0IHPEsWbEsXJsYW5hY2FrIHZlIHTDvG0gdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiJUZWxlZm9udW4ga2lsaWRpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWUgZGFoYSB5YXBhcnNhbsSxeiBidSB0ZWxlZm9uIHPEsWbEsXJsYW5hY2FrIHZlIHTDvG0gdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJUYWJsZXRpbiBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gQnUgdGFibGV0IHPEsWbEsXJsYW5hY2FrIHZlIHTDvG0gdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IlRlbGVmb251biBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gQnUgdGVsZWZvbiBzxLFmxLFybGFuYWNhayB2ZSB0w7xtIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJUYWJsZXRpbiBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogYnUga3VsbGFuxLFjxLEga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBrdWxsYW7EsWPEsSB2ZXJpbGVyaSBzaWxpbmVjZWt0aXIuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlRlbGVmb251biBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogYnUga3VsbGFuxLFjxLEga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBrdWxsYW7EsWPEsSB2ZXJpbGVyaSBzaWxpbmVjZWt0aXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iVGFibGV0aW4ga2lsaWRpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWUgZGFoYSB5YXBhcnNhbsSxeiBidSBrdWxsYW7EsWPEsSBrYWxkxLFyxLFsYWNhayB2ZSB0w7xtIGt1bGxhbsSxY8SxIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iVGVsZWZvbnVuIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogYnUga3VsbGFuxLFjxLEga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBrdWxsYW7EsWPEsSB2ZXJpbGVyaSBzaWxpbmVjZWt0aXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJUYWJsZXRpbiBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gQnUga3VsbGFuxLFjxLEga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBrdWxsYW7EsWPEsSB2ZXJpbGVyaSBzaWxpbmVjZWt0aXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iVGVsZWZvbnVuIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiBCdSBrdWxsYW7EsWPEsSBrYWxkxLFyxLFsYWNhayB2ZSB0w7xtIGt1bGxhbsSxY8SxIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUYWJsZXRpbiBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogacWfIHByb2ZpbGkga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBwcm9maWwgdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJUZWxlZm9udW4ga2lsaWRpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gYmHFn2FyxLFzxLF6IGRlbmVtZSBkYWhhIHlhcGFyc2FuxLF6IGnFnyBwcm9maWxpIGthbGTEsXLEsWxhY2FrIHZlIHTDvG0gcHJvZmlsIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJUYWJsZXRpbiBraWxpZGluaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtleiBoYXRhbMSxIGJpciDFn2VraWxkZSBhw6dtYXnEsSBkZW5lZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gYmHFn2FyxLFzxLF6IGRlbmVtZSBkYWhhIHlhcGFyc2FuxLF6IGnFnyBwcm9maWxpIGthbGTEsXLEsWxhY2FrIHZlIHTDvG0gcHJvZmlsIHZlcmlsZXJpIHNpbGluZWNla3Rpci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVGVsZWZvbnVuIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4ga2V6IGhhdGFsxLEgYmlyIMWfZWtpbGRlIGHDp21hecSxIGRlbmVkaW5pei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lIGRhaGEgeWFwYXJzYW7EsXogacWfIHByb2ZpbGkga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBwcm9maWwgdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iVGFibGV0aW4ga2lsaWRpbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGtleiBoYXRhbMSxIGJpciDFn2VraWxkZSBhw6dtYXnEsSBkZW5lZGluaXouIMSwxZ8gcHJvZmlsaSBrYWxkxLFyxLFsYWNhayB2ZSB0w7xtIHByb2ZpbCB2ZXJpbGVyaSBzaWxpbmVjZWt0aXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iVGVsZWZvbnVuIGtpbGlkaW5pIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBrZXogaGF0YWzEsSBiaXIgxZ9la2lsZGUgYcOnbWF5xLEgZGVuZWRpbml6LiDEsMWfIHByb2ZpbGkga2FsZMSxcsSxbGFjYWsgdmUgdMO8bSBwcm9maWwgdmVyaWxlcmkgc2lsaW5lY2VrdGlyLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJLaWxpdCBhw6dtYSBkZXNlbmluaXppIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGtleiB5YW5sxLHFnyDDp2l6ZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWVkZW4gc29ucmEsIHRhYmxldGluaXppIGJpciBlLXBvc3RhIGhlc2FixLEga3VsbGFuYXJhayBhw6dtYW7EsXogaXN0ZW5pci5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNhbml5ZSBpw6dpbmRlIHRla3JhciBkZW5leWluLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iS2lsaXQgYcOnbWEgZGVzZW5pbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBrZXogeWFubMSxxZ8gw6dpemRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBiYcWfYXLEsXPEsXogZGVuZW1lZGVuIHNvbnJhIHRlbGVmb251bnV6dSBiaXIgZS1wb3N0YSBoZXNhYsSxIGt1bGxhbmFyYWsgYcOnbWFuxLF6IGlzdGVuaXIuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iS2lsaXQgYcOnbWEgZGVzZW5pbml6aSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGtleiB5YW5sxLHFnyDDp2l6ZGluaXouIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gYmHFn2FyxLFzxLF6IGRlbmVtZWRlbiBzb25yYSwgdGFibGV0aW5pemkgYmlyIGUtcG9zdGEgaGVzYWLEsSBrdWxsYW5hcmFrIGHDp21hbsSxeiBpc3RlbmlyLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzYW5peWUgacOnaW5kZSB0ZWtyYXIgZGVuZXlpbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IktpbGl0IGHDp21hIGRlc2VuaW5pemkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBrZXogeWFubMSxxZ8gw6dpemRpbml6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGJhxZ9hcsSxc8SxeiBkZW5lbWVkZW4gc29ucmEgdGVsZWZvbnVudXp1IGJpciBlLXBvc3RhIGhlc2FixLEga3VsbGFuYXJhayBhw6dtYW7EsXogaXN0ZW5pci5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4gc2FuaXllIGnDp2luZGUgdGVrcmFyIGRlbmV5aW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJZYW5sxLHFnyBTSU0gUElOIGtvZHUuIENpaGF6xLFuxLF6xLFuIGtpbGlkaW5pIGHDp21hayBpw6dpbiBhcnTEsWsgb3BlcmF0w7Zyw7xuw7x6bGUgYmHEn2xhbnTEsSBrdXJtYW7EsXogZ2VyZWtpeW9yLiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5ZYW5sxLHFnyBTSU0gUElOIGtvZHUsIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGRlbmVtZSBoYWtrxLFuxLF6IGthbGTEsS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAppbmRleCBkYmEwZjZjLi5lNGIwZTFmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4i0J/QvtCy0YLQvtGA0L3QviDQstCy0LXQtNGW0YLRjCDQv9GA0LDQstC40LvRjNC90LjQuSBQVUst0LrQvtC0LiDQp9C40YHQu9C10L3QvdGWINGB0L/RgNC+0LHQuCDQvdCw0LfQsNCy0LbQtNC4INCy0LjQvNC60L3Rg9GC0YwgU0lNLdC60LDRgNGC0YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi3QutC+0LTQuCDQvdC1INC30LHRltCz0LDRjtGC0YzRgdGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4i0JfQsNCx0LDQs9Cw0YLQviDRgdC/0YDQvtCxINC90LDQvNCw0LvRjtCy0LDRgtC4INC60LvRjtGHIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJQSU4t0LrQvtC0INC90LXQv9GA0LDQstC40LvRjNC90L4g0LLQstC10LTQtdC90L4g0YHRgtGW0LvRjNC60Lgg0YDQsNC30ZbQsjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCf0LDRgNC+0LvRjCDQvdC10L/RgNCw0LLQuNC70YzQvdC+INCy0LLQtdC00LXQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxu0J/QvtCy0YLQvtGA0ZbRgtGMINGB0L/RgNC+0LHRgyDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGBLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLQmtC70Y7RhyDRgNC+0LfQsdC70L7QutGD0LLQsNC90L3RjyDQvdC10L/RgNCw0LLQuNC70YzQvdC+INC90LDQvNCw0LvRjNC+0LLQsNC90L4g0YHRgtGW0LvRjNC60Lgg0YDQsNC30ZbQsjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIFxuXG7Qn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0L/Qu9Cw0L3RiNC10YI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQl9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQsdGD0LTQtSDRgdC60LjQvdGD0YLQviDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8g0L/Qu9Cw0L3RiNC10YLQsCDQuSDQstC40LTQsNC70LXQvdC+INCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L06IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQl9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQsdGD0LTQtSDRgdC60LjQvdGD0YLQviDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8g0YLQtdC70LXRhNC+0L3QsCDQuSDQstC40LTQsNC70LXQvdC+INCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlBJTi3QutC+0LQg0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQstCy0LXQtNC10L3QviDRgdGC0ZbQu9GM0LrQuCDRgNCw0LfRltCyOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBcblxu0J/QvtCy0YLQvtGA0ZbRgtGMINGB0L/RgNC+0LHRgyDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0YEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+ItCf0LDRgNC+0LvRjCDQvdC10L/RgNCw0LLQuNC70YzQvdC+INCy0LLQtdC00LXQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIFxuXG7Qn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i0JrQu9GO0Ycg0YDQvtC30LHQu9C+0LrRg9Cy0LDQvdC90Y8g0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LzQsNC70YzQvtCy0LDQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIFxuXG7Qn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDRgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JfQsNC70LjRiNC40LvQvtGB0Y8g0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQsdGD0LTQtSDRgdC60LjQvdGD0YLQviDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8g0L/Qu9Cw0L3RiNC10YLQsCDQuSDQstC40LTQsNC70LXQvdC+INCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L06IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCX0LDQu9C40YjQuNC70L7RgdGPINGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LHRg9C00LUg0YHQutC40L3Rg9GC0L4g0L3QsNC70LDRiNGC0YPQstCw0L3QvdGPINGC0LXQu9C10YTQvtC90LAg0Lkg0LLQuNC00LDQu9C10L3QviDQstGB0ZYg0LnQvtCz0L4g0LTQsNC90ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+ItCa0ZbQu9GM0LrRltGB0YLRjCDQvdC10LLQtNCw0LvQuNGFINGB0L/RgNC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INC/0LvQsNC90YjQtdGCOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCR0YPQtNC1INGB0LrQuNC90YPRgtC+INC90LDQu9Cw0YjRgtGD0LLQsNC90L3RjyDRhtGM0L7Qs9C+INC/0LvQsNC90YjQtdGC0LAg0Lkg0LLQuNC00LDQu9C10L3QviDQstGB0ZYg0LnQvtCz0L4g0LTQsNC90ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L06IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0JHRg9C00LUg0YHQutC40L3Rg9GC0L4g0L3QsNC70LDRiNGC0YPQstCw0L3QvdGPINGG0YzQvtCz0L4g0YLQtdC70LXRhNC+0L3QsCDQuSDQstC40LTQsNC70LXQvdC+INCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCX0LDQu9C40YjQuNC70L7RgdGPINGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQsdGD0LTQtSDQstC40LTQsNC70LXQvdC+INGG0YzQvtCz0L4g0LrQvtGA0LjRgdGC0YPQstCw0YfQsCDQuSDRg9GB0ZYg0LnQvtCz0L4g0LTQsNC90ZYuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+ItCa0ZbQu9GM0LrRltGB0YLRjCDQvdC10LLQtNCw0LvQuNGFINGB0L/RgNC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4g0JfQsNC70LjRiNC40LvQvtGB0Y8g0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uINCjINGA0LDQt9GWINC90LXQstC00LDRh9GWINCx0YPQtNC1INCy0LjQtNCw0LvQtdC90L4g0YbRjNC+0LPQviDQutC+0YDQuNGB0YLRg9Cy0LDRh9CwINC5INGD0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JfQsNC70LjRiNC40LvQvtGB0Y8g0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LHRg9C00LUg0LLQuNC00LDQu9C10L3QviDRhtGM0L7Qs9C+INC60L7RgNC40YHRgtGD0LLQsNGH0LAg0Lkg0YPRgdGWINC50L7Qs9C+INC00LDQvdGWLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDRgtC10LvQtdGE0L7QvTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JfQsNC70LjRiNC40LvQvtGB0Y8g0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LHRg9C00LUg0LLQuNC00LDQu9C10L3QviDRhtGM0L7Qs9C+INC60L7RgNC40YHRgtGD0LLQsNGH0LAg0Lkg0YPRgdGWINC50L7Qs9C+INC00LDQvdGWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0L/Qu9Cw0L3RiNC10YI6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4g0JHRg9C00LUg0LLQuNC00LDQu9C10L3QviDRhtGM0L7Qs9C+INC60L7RgNC40YHRgtGD0LLQsNGH0LAg0Lkg0YPRgdGWINC50L7Qs9C+INC00LDQvdGWLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+ItCa0ZbQu9GM0LrRltGB0YLRjCDQvdC10LLQtNCw0LvQuNGFINGB0L/RgNC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INGC0LXQu9C10YTQvtC9OiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uINCR0YPQtNC1INCy0LjQtNCw0LvQtdC90L4g0YbRjNC+0LPQviDQutC+0YDQuNGB0YLRg9Cy0LDRh9CwINC5INGD0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgjogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uINCX0LDQu9C40YjQuNC70L7RgdGPINGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiDQoyDRgNCw0LfRliDQvdC10LLQtNCw0YfRliDQsdGD0LTQtSDQstC40LTQsNC70LXQvdC+INGA0L7QsdC+0YfQuNC5INC/0YDQvtGE0ZbQu9GMINGWINCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L06IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQl9Cw0LvQuNGI0LjQu9C+0YHRjyDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LHRg9C00LUg0LLQuNC00LDQu9C10L3QviDRgNC+0LHQvtGH0LjQuSDQv9GA0L7RhNGW0LvRjCDRliDQstGB0ZYg0LnQvtCz0L4g0LTQsNC90ZYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i0JrRltC70YzQutGW0YHRgtGMINC90LXQstC00LDQu9C40YUg0YHQv9GA0L7QsSDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0L/Qu9Cw0L3RiNC10YI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCX0LDQu9C40YjQuNC70L7RgdGPINGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uINCjINGA0LDQt9GWINC90LXQstC00LDRh9GWINCx0YPQtNC1INCy0LjQtNCw0LvQtdC90L4g0YDQvtCx0L7Rh9C40Lkg0L/RgNC+0YTRltC70Ywg0ZYg0LLRgdGWINC50L7Qs9C+INC00LDQvdGWLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDRgtC10LvQtdGE0L7QvTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4g0JfQsNC70LjRiNC40LvQvtGB0Y8g0YHQv9GA0L7QsTogPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LHRg9C00LUg0LLQuNC00LDQu9C10L3QviDRgNC+0LHQvtGH0LjQuSDQv9GA0L7RhNGW0LvRjCDRliDQstGB0ZYg0LnQvtCz0L4g0LTQsNC90ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgjogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiDQkdGD0LTQtSDQstC40LTQsNC70LXQvdC+INGA0L7QsdC+0YfQuNC5INC/0YDQvtGE0ZbQu9GMINGWINCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLQmtGW0LvRjNC60ZbRgdGC0Ywg0L3QtdCy0LTQsNC70LjRhSDRgdC/0YDQvtCxINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDRgtC10LvQtdGE0L7QvTogPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiDQkdGD0LTQtSDQstC40LTQsNC70LXQvdC+INGA0L7QsdC+0YfQuNC5INC/0YDQvtGE0ZbQu9GMINGWINCy0YHRliDQudC+0LPQviDQtNCw0L3Rli4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0JrQu9GO0Ycg0YDQvtC30LHQu9C+0LrRg9Cy0LDQvdC90Y8g0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LzQsNC70YzQvtCy0LDQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQoyDQstCw0YEg0ZQg0YnQtSDRgdGC0ZbQu9GM0LrQuCDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LfigJnRj9Cy0LjRgtGM0YHRjyDQt9Cw0L/QuNGCINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDQv9C70LDQvdGI0LXRgtC90LjQuSDQn9CaINC30LAg0LTQvtC/0L7QvNC+0LPQvtGOINC+0LHQu9GW0LrQvtCy0L7Qs9C+INC30LDQv9C40YHRgyDQtdC70LXQutGC0YDQvtC90L3QvtGXINC/0L7RiNGC0LguXG5cbiDQn9C+0LLRgtC+0YDRltGC0Ywg0YHQv9GA0L7QsdGDINGH0LXRgNC10LcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0JrQu9GO0Ycg0YDQvtC30LHQu9C+0LrRg9Cy0LDQvdC90Y8g0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LzQsNC70YzQvtCy0LDQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiDQoyDQstCw0YEg0ZQg0YnQtSDRgdGC0ZbQu9GM0LrQuCDRgdC/0YDQvtCxOiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPi4g0KMg0YDQsNC30ZYg0L3QtdCy0LTQsNGH0ZYg0LfigJnRj9Cy0LjRgtGM0YHRjyDQt9Cw0L/QuNGCINGA0L7Qt9Cx0LvQvtC60YPQstCw0YLQuCDRgtC10LvQtdGE0L7QvSDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQvtCx0LvRltC60L7QstC+0LPQviDQt9Cw0L/QuNGB0YMg0LXQu9C10LrRgtGA0L7QvdC90L7RlyDQv9C+0YjRgtC4LlxuXG4g0J/QvtCy0YLQvtGA0ZbRgtGMINGB0L/RgNC+0LHRgyDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+INGB0LXQui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i0JrQu9GO0Ycg0YDQvtC30LHQu9C+0LrRg9Cy0LDQvdC90Y8g0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LzQsNC70YzQvtCy0LDQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCjINCy0LDRgSDRlCDRidC1INGB0YLRltC70YzQutC4INGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uINCjINGA0LDQt9GWINC90LXQstC00LDRh9GWINC34oCZ0Y/QstC40YLRjNGB0Y8g0LfQsNC/0LjRgiDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0L/Qu9Cw0L3RiNC10YLQvdC40Lkg0J/QmiDQt9CwINC00L7Qv9C+0LzQvtCz0L7RjiDQvtCx0LvRltC60L7QstC+0LPQviDQt9Cw0L/QuNGB0YMg0LXQu9C10LrRgtGA0L7QvdC90L7RlyDQv9C+0YjRgtC4LlxuXG4g0J/QvtCy0YLQvtGA0ZbRgtGMINGB0L/RgNC+0LHRgyDRh9C10YDQtdC3IDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g0YHQtdC6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i0JrQu9GO0Ycg0YDQvtC30LHQu9C+0LrRg9Cy0LDQvdC90Y8g0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDQvdCw0LzQsNC70YzQvtCy0LDQvdC+INGB0YLRltC70YzQutC4INGA0LDQt9GW0LI6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uINCjINCy0LDRgSDRlCDRidC1INGB0YLRltC70YzQutC4INGB0L/RgNC+0LE6IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uINCjINGA0LDQt9GWINC90LXQstC00LDRh9GWINC34oCZ0Y/QstC40YLRjNGB0Y8g0LfQsNC/0LjRgiDRgNC+0LfQsdC70L7QutGD0LLQsNGC0Lgg0YLQtdC70LXRhNC+0L0g0LfQsCDQtNC+0L/QvtC80L7Qs9C+0Y4g0L7QsdC70ZbQutC+0LLQvtCz0L4g0LfQsNC/0LjRgdGDINC10LvQtdC60YLRgNC+0L3QvdC+0Zcg0L/QvtGI0YLQuC5cblxuINCf0L7QstGC0L7RgNGW0YLRjCDRgdC/0YDQvtCx0YMg0YfQtdGA0LXQtyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INGB0LXQui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+ItCd0LXQv9GA0LDQstC40LvRjNC90LjQuSBQSU4t0LrQvtC0IFNJTS3QutCw0YDRgtC4LiDQl9Cy4oCZ0Y/QttGW0YLRjNGB0Y8g0LfRliDRgdCy0L7Rl9C8INC+0L/QtdGA0LDRgtC+0YDQvtC8LCDRidC+0LEg0YDQvtC30LHQu9C+0LrRg9Cy0LDRgtC4INC/0YDQuNGB0YLRgNGW0LkuIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7QndC10L/RgNCw0LLQuNC70YzQvdC40LkgUElOLdC60L7QtCBTSU0t0LrQsNGA0YLQuC4g0KMg0LLQsNGBINC30LDQu9C40YjQuNC70LDRgdGMIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INGB0L/RgNC+0LHQsC48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCmluZGV4IGI2YTk5M2IuLjNhMDQxZjUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IuKAj9i12K3bjNitIFBVSyDaqdmI2ogg2K/ZiNio2KfYsduBINiv2LHYrCDaqdix24zautuUINio2KfYsSDYqNin2LEg2qnbjCDaqdmI2LTYtNuM2rogU0lNINqp2Ygg2YXYs9iq2YLZhCDYt9mI2LEg2b7YsSDYutuM2LEg2YHYudin2YQg2qnYsSDYr9uM2rog2q/bjNuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IuKAj1BJTiDaqdmI2ojYsiDZhdmF2KfYq9mEINmG24HbjNq6INuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Itm+24zZudix2YYg2qnbjCDYqNuB2Kog2LPYp9ix24wg2qnZiNi02LTbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/Yotm+INmG25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINin2b7ZhtinIFBJTiDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINm52KfYptm+INqp24zYpyDbgduS25QgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYs9uM2qnZhtqIINmF24zauiDYr9mI2KjYp9ix24Eg2qnZiNi02LQg2qnYsduM2rrblCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiLYotm+INmG25Ig2KfZvtmG2Kcg2b7Yp9izINmI2LHaiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDZudin2KbZviDaqduM2Kcg24HbktuUIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2LPbjNqp2YbaiCDZhduM2rog2K/ZiNio2KfYsduBINqp2YjYtNi0INqp2LHbjNq625QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i2KLZviDZhtuSINin2b7ZhtinINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqdinINm+24zZudix2YYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2ojYsdinINqp24zYpyDbgduS25QgXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDYs9uM2qnZhtqIINmF24zauiDYr9mI2KjYp9ix24Eg2qnZiNi02LQg2qnYsduM2rrblCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Itii2b4g2YbbkiDZuduM2KjZhNuM2bkg2qnZiCDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINin2LMg2bnbjNio2YTbjNm5INqp2Ygg2K/ZiNio2KfYsduBINiq2LHYqtuM2Kgg2K/bkiDYr9uM2Kcg2KzYp9im25Ig2q/Yp9iMINis2LMg2LPbkiDYp9izINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+Itii2b4g2YbbkiDZgdmI2YYg2qnZiCDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINin2LMg2YHZiNmGINqp2Ygg2K/ZiNio2KfYsduBINiq2LHYqtuM2Kgg2K/bkiDYr9uM2Kcg2KzYp9im25Ig2q/Yp9iMINis2LMg2LPbkiDYp9izINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLigI/Yotm+INmG25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2KfZvtmG2KcgUElOINi62YTYtyDYt9ix24zZgtuSINiz25Ig2bnYp9im2b4g2qnbjNinINuB25LblCBcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2LPbjNqp2YbaiCDZhduM2rog2K/ZiNio2KfYsduBINqp2YjYtNi0INqp2LHbjNq625QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i2KLZviDZhtuSINin2b7ZhtinINm+2KfYsyDZiNix2oggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDZudin2KbZviDaqduM2Kcg24HbktuUIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYs9uM2qnZhtqIINmF24zauiDYr9mI2KjYp9ix24Eg2qnZiNi02LQg2qnYsduM2rrblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLYotm+INmG25Ig2KfZvtmG2Kcg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp2Kcg2b7bjNm52LHZhiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INio2KfYsSDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINqI2LHYpyDaqduM2Kcg24HbktuUIFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDYs9uM2qnZhtqIINmF24zauiDYr9mI2KjYp9ix24Eg2qnZiNi02LQg2qnYsduM2rrblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+Itii2b4g2YbbkiDZuduM2KjZhNuM2bkg2qnZiCDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+INio2KfYsSDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINqp2YjYtNi0INqp24wg24HbktuUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g2YXYstuM2K8g2YbYp9qp2KfZhSDaqdmI2LTYtNmI2rog2qnbkiDYqNi52K/YjCDYp9izINm524zYqNmE24zZuSDaqdmIINiv2YjYqNin2LHbgSDYqtix2KrbjNioINiv25Ig2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2KfYsyDaqdinINiz2KjavtuMINqI24zZudinINit2LDZgSDbgdmIINis2KfYptuSINqv2KfblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLYotm+INmG25Ig2YHZiNmGINqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2KfYsyDZgdmI2YYg2qnZiCDYr9mI2KjYp9ix24Eg2KrYsdiq24zYqCDYr9uSINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINin2LMg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i2KLZviDZhtuSINm524zYqNmE24zZuSDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCDYp9izINm524zYqNmE24zZuSDaqdmIINiv2YjYqNin2LHbgSDYqtix2KrbjNioINiv25Ig2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2KfYsyDaqdinINiz2KjavtuMINqI24zZudinINit2LDZgSDbgdmIINis2KfYptuSINqv2KfblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+Itii2b4g2YbbkiDZgdmI2YYg2qnZiCDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2qnZiNi02LQg2qnbjCDbgduS25Qg2KfYsyDZgdmI2YYg2qnZiCDYr9mI2KjYp9ix24Eg2KrYsdiq24zYqCDYr9uSINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINin2LMg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLYotm+INmG25Ig2bnbjNio2YTbjNm5INqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2qnZiNi02LQg2qnbjCDbgduS25QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXYstuM2K8g2YbYp9qp2KfZhSDaqdmI2LTYtNmI2rog2qnbkiDYqNi52K/YjCDYp9izINi12KfYsdmBINqp2Ygg24HZudinINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINi12KfYsdmBINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+Itii2b4g2YbbkiDZgdmI2YYg2qnZiCDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINin2LMg2LXYp9ix2YEg2qnZiCDbgdm52Kcg2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2LXYp9ix2YEg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLYotm+INmG25Ig2bnbjNio2YTbjNm5INqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2KfYsyDYtdin2LHZgSDaqdmIINuB2bnYpyDYr9uM2Kcg2KzYp9im25Ig2q/Yp9iMINis2LMg2LPbkiDYtdin2LHZgSDaqdinINiz2KjavtuMINqI24zZudinINit2LDZgSDbgdmIINis2KfYptuSINqv2KfblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiLYotm+INmG25Ig2YHZiNmGINqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2KfYsyDYtdin2LHZgSDaqdmIINuB2bnYpyDYr9uM2Kcg2KzYp9im25Ig2q/Yp9iMINis2LMg2LPbkiDYtdin2LHZgSDaqdinINiz2KjavtuMINqI24zZudinINit2LDZgSDbgdmIINis2KfYptuSINqv2KfblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i2KLZviDZhtuSINm524zYqNmE24zZuSDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCDYp9izINi12KfYsdmBINqp2Ygg24HZudinINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINi12KfYsdmBINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4i2KLZviDZhtuSINmB2YjZhiDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCDYp9izINi12KfYsdmBINqp2Ygg24HZudinINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINi12KfYsdmBINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i2KLZviDZhtuSINm524zYqNmE24zZuSDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINqp2YjYtNi0INqp24wg24HbktuUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2K/Zgdiq2LHbjCDZvtix2YjZgdin2KbZhCDbgdm52Kcg2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2b7YsdmI2YHYp9im2YQg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i2KLZviDZhtuSINmB2YjZhiDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+INio2KfYsSDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINqp2YjYtNi0INqp24wg24HbktuUIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2K/Zgdiq2LHbjCDZvtix2YjZgdin2KbZhCDbgdm52Kcg2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2b7YsdmI2YHYp9im2YQg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLYotm+INmG25Ig2bnbjNio2YTbjNm5INqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2K/Zgdiq2LHbjCDZvtix2YjZgdin2KbZhCDbgdm52Kcg2K/bjNinINis2KfYptuSINqv2KfYjCDYrNizINiz25Ig2b7YsdmI2YHYp9im2YQg2qnYpyDYs9io2r7bjCDaiNuM2bnYpyDYrdiw2YEg24HZiCDYrNin2KbbkiDar9in25QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i2KLZviDZhtuSINmB2YjZhiDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2qnZiNi02LQg2qnbjCDbgduS25QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINiv2YHYqtix24wg2b7YsdmI2YHYp9im2YQg24HZudinINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINm+2LHZiNmB2KfYptmEINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLYotm+INmG25Ig2bnbjNio2YTbjNm5INqp2Ygg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp24zZhNim25IgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INio2KfYsSDYutmE2Lcg2LfYsduM2YLbkiDYs9uSINqp2YjYtNi0INqp24wg24HbktuUINiv2YHYqtix24wg2b7YsdmI2YHYp9im2YQg24HZudinINiv24zYpyDYrNin2KbbkiDar9in2Iwg2KzYsyDYs9uSINm+2LHZiNmB2KfYptmEINqp2Kcg2LPYqNq+24wg2ojbjNm52Kcg2K3YsNmBINuB2Ygg2KzYp9im25Ig2q/Yp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4i2KLZviDZhtuSINmB2YjZhiDaqdmIINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaqdmI2LTYtCDaqduMINuB25LblCDYr9mB2KrYsduMINm+2LHZiNmB2KfYptmEINuB2bnYpyDYr9uM2Kcg2KzYp9im25Ig2q/Yp9iMINis2LMg2LPbkiDZvtix2YjZgdin2KbZhCDaqdinINiz2KjavtuMINqI24zZudinINit2LDZgSDbgdmIINis2KfYptuSINqv2KfblCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLYotm+INmG25Ig2KfZvtmG2Kcg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp2Kcg2b7bjNm52LHZhiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaiNix2Kcg2qnbjNinINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINii2b4g2LPbkiDYp9uM2qkg2KfbjCDZhduM2YQg2Kfaqdin2KTZhtm5INin2LPYqti52YXYp9mEINqp2LHaqduSINin2b7ZhtinINm524zYqNmE24zZuSDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnZiCDaqduB2Kcg2KzYp9im25Ig2q/Yp9uUXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDYs9uM2qnZhtqIINmF24zauiDYr9mI2KjYp9ix24Eg2qnZiNi02LQg2qnYsduM2rrblCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i2KLZviDZhtuSINin2b7ZhtinINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqdinINm+24zZudix2YYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2ojYsdinINqp24zYpyDbgduS25QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g2YXYstuM2K8g2YbYp9qp2KfZhSDaqdmI2LTYtNmI2rog2qnbkiDYqNi52K/YjCDYotm+INiz25Ig2KfbjNqpINin24wg2YXbjNmEINin2qnYp9ik2YbZuSDYp9iz2KrYudmF2KfZhCDaqdix2qnbkiDYp9m+2YbYpyDZgdmI2YYg2LrbjNixINmF2YLZgdmEINqp2LHZhtuSINqp2Ygg2qnbgdinINis2KfYptuSINqv2KfblFxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g2LPbjNqp2YbaiCDZhduM2rog2K/ZiNio2KfYsduBINqp2YjYtNi0INqp2LHbjNq625QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i2KLZviDZhtuSINin2b7ZhtinINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqdinINm+24zZudix2YYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDYqNin2LEg2LrZhNi3INi32LHbjNmC25Ig2LPbkiDaiNix2Kcg2qnbjNinINuB25LblCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+INmF2LLbjNivINmG2Kfaqdin2YUg2qnZiNi02LTZiNq6INqp25Ig2KjYudiv2Iwg2KLZviDYs9uSINin24zaqSDYp9uMINmF24zZhCDYp9qp2KfYpNmG2bkg2KfYs9iq2LnZhdin2YQg2qnYsdqp25Ig2KfZvtmG2Kcg2bnbjNio2YTbjNm5INi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqdmIINqp24HYpyDYrNin2KbbkiDar9in25RcblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JTMkZDwveGxpZmY6Zz4g2LPbjNqp2YbaiCDZhduM2rog2K/ZiNio2KfYsduBINqp2YjYtNi0INqp2LHbjNq625QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+Itii2b4g2YbbkiDYp9m+2YbYpyDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnYpyDZvtuM2bnYsdmGIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g2KjYp9ixINi62YTYtyDYt9ix24zZgtuSINiz25Ig2ojYsdinINqp24zYpyDbgduS25QgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDZhdiy24zYryDZhtin2qnYp9mFINqp2YjYtNi02YjauiDaqduSINio2LnYr9iMINii2b4g2LPbkiDYp9uM2qkg2KfbjCDZhduM2YQg2Kfaqdin2KTZhtm5INin2LPYqti52YXYp9mEINqp2LHaqduSINin2b7ZhtinINmB2YjZhiDYutuM2LEg2YXZgtmB2YQg2qnYsdmG25Ig2qnZiCDaqduB2Kcg2KzYp9im25Ig2q/Yp9uUXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+INiz24zaqdmG2ogg2YXbjNq6INiv2YjYqNin2LHbgSDaqdmI2LTYtCDaqdix24zautuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiLigI/YutmE2LcgU0lNIFBJTiDaqdmI2ogg2KfYqCDYotm+INqp2Ygg2KfZvtmG2Kcg2KLZhNuBINi624zYsSDZhdmC2YHZhCDaqdix2YbbkiDaqduM2YTYptuSINmE2KfYstmF24wg2LfZiNixINm+2LEg2KfZvtmG25Ig2qnbjNix24zYptixINiz25Ig2LHYp9io2LfbgSDaqdix2YbYpyDahtin24HYptuS25QiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+4oCP2LrZhNi3IFNJTSBQSU4g2qnZiNqI2Iwg2KLZviDaqduSINm+2KfYsyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDaqdmI2LTYtNuM2rog2KjahtuMINuB24zautuUPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbAppbmRleCBlYWU1ZmY4Li40NGQ1YjUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiJUb+KAmGfigJhyaSBQVUsga29kbmkgcWF5dGEga2lyaXRpbmcuIFFheXRhLXFheXRhIHVyaW5pc2hsYXIgU0lNIGthcnRhbmkgYnV0dW5sYXkgb+KAmGNoaXJpYiBxb+KAmHlhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9jb25maXJtX3Bpbl9oaW50IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzAwMzQ2OTI2MTQ2NDU5MzUxNiI+IlBJTi1rb2QgbW9zIGtlbG1hZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiJDaGl6bWFsaSBwYXJvbG5pIG9jaGlzaGdhIGp1ZGEga2/igJhwIHVyaW5pbGRpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJTaXogUElOLWtvZG5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkga2lyaXRkaW5naXouIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBzb25peWFkYW4gc2/igJhuZyBxYXl0YSB1cmluaWIga2/igJhyaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJTaXogcGFyb2xuaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIGtpcml0ZGluZ2l6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gc29uaXlhZGFuIHNv4oCYbmcgcWF5dGEgdXJpbmliIGtv4oCYcmluZy4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iU2l6IGNoaXptYWxpIGthbGl0bmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBraXJpdGRpbmdpei4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHNvbml5YWRhbiBzb+KAmG5nIHFheXRhIHVyaW5pYiBrb+KAmHJpbmcuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iU2l6IHBsYW5zaGV0bmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoIHFpbHNhbmdpeiwgdXNoYnUgcGxhbnNoZXRkYSB6YXZvZCBzb3psYW1hbGFyaSBxYXl0YSB0aWtsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBtYeKAmWx1bW90bGFyIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlNpeiB0ZWxlZm9ubmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoIHFpbHNhbmdpeiwgdXNoYnUgdGVsZWZvbmRhIHphdm9kIHNvemxhbWFsYXJpIHFheXRhIHRpa2xhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIG1h4oCZbHVtb3RsYXIgaGFtIG/igJhjaGliIGtldGFkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlNpeiBQSU4ta29kbmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIGtpcml0ZGluZ2l6LiBcblxuPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBzb25peWFkYW4gc2/igJhuZyBxYXl0YSB1cmluaWIga2/igJhyaW5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXNzd29yZF9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc4MTM3MTMzODk0MjIyMjY1MzEiPiJTaXogcGFyb2xuaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkga2lyaXRkaW5naXouIFxuXG48eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IHNvbml5YWRhbiBzb+KAmG5nIHFheXRhIHVyaW5pYiBrb+KAmHJpbmcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IlNpeiBjaGl6bWFsaSBrYWxpdG5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBraXJpdGRpbmdpei4gXG5cbjx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gc29uaXlhZGFuIHNv4oCYbmcgcWF5dGEgdXJpbmliIGtv4oCYcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJTaXogcGxhbnNoZXRuaSBxdWxmZGFuIGNoaXFhcmlzaCB1Y2h1biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEFnYXIgeWFuYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoIHFpbHNhbmdpeiwgdXNoYnUgcGxhbnNoZXRkYSB6YXZvZCBzb3psYW1hbGFyaSBxYXl0YSB0aWtsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBtYeKAmWx1bW90bGFyIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IlNpeiB0ZWxlZm9ubmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIHVyaW5pc2ggcWlsZGluZ2l6LiBBZ2FyIHlhbmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtYXJ0YSBtdXZhZmZhcWl5YXRzaXogdXJpbmlzaCBxaWxzYW5naXosIHVzaGJ1IHRlbGVmb25kYSB6YXZvZCBzb3psYW1hbGFyaSBxYXl0YSB0aWtsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBtYeKAmWx1bW90bGFyIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlNpeiBwbGFuc2hldG5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIHVyaW5pc2ggcWlsZGluZ2l6LiBFbmRpLCB1c2hidSBwbGFuc2hldGRhIHphdm9kIHNvemxhbWFsYXJpIHFheXRhIHRpa2xhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIG1h4oCZbHVtb3RsYXIgaGFtIG/igJhjaGliIGtldGFkaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiJTaXogdGVsZWZvbm5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIHVyaW5pc2ggcWlsZGluZ2l6LiBFbmRpLCB1c2hidSB0ZWxlZm9uZGEgemF2b2Qgc296bGFtYWxhcmkgcWF5dGEgdGlrbGFuYWRpIHZhIHVuZGFnaSBiYXJjaGEgbWHigJlsdW1vdGxhciBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlNpeiBwbGFuc2hldG5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEFnYXIgeWFuYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtYXJ0YSBtdXZhZmZhcWl5YXRzaXogdXJpbmlzaCBxaWxzYW5naXosIHVzaGJ1IGZveWRhbGFudXZjaGkgb+KAmGNoaXJpYiB0YXNobGFuYWRpIHZhIHVuZGFnaSBiYXJjaGEgZm95ZGFsYW51dmNoaSBtYeKAmWx1bW90bGFyaSBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJTaXogdGVsZWZvbm5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEFnYXIgeWFuYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtYXJ0YSBtdXZhZmZhcWl5YXRzaXogdXJpbmlzaCBxaWxzYW5naXosIHVzaGJ1IGZveWRhbGFudXZjaGkgb+KAmGNoaXJpYiB0YXNobGFuYWRpIHZhIHVuZGFnaSBiYXJjaGEgZm95ZGFsYW51dmNoaSBtYeKAmWx1bW90bGFyaSBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IlNpeiBwbGFuc2hldG5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWFydGEgbXV2YWZmYXFpeWF0c2l6IHVyaW5pc2ggcWlsc2FuZ2l6LCB1c2hidSBmb3lkYWxhbnV2Y2hpIG/igJhjaGlyaWIgdGFzaGxhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIGZveWRhbGFudXZjaGkgbWHigJlsdW1vdGxhcmkgaGFtIG/igJhjaGliIGtldGFkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4iU2l6IHRlbGVmb25uaSBxdWxmZGFuIGNoaXFhcmlzaCB1Y2h1biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEFnYXIgeWFuYSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoIHFpbHNhbmdpeiwgdXNoYnUgZm95ZGFsYW51dmNoaSBv4oCYY2hpcmliIHRhc2hsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBmb3lkYWxhbnV2Y2hpIG1h4oCZbHVtb3RsYXJpIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiJTaXogcGxhbnNoZXRuaSBxdWxmZGFuIGNoaXFhcmlzaCB1Y2h1biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gRW5kaSwgdXNoYnUgZm95ZGFsYW51dmNoaSBv4oCYY2hpcmliIHRhc2hsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBmb3lkYWxhbnV2Y2hpIG1h4oCZbHVtb3RsYXJpIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3NzI5MDA5NzUyMjUyMTExNjczIj4iU2l6IHRlbGVmb25uaSBxdWxmZGFuIGNoaXFhcmlzaCB1Y2h1biA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gRW5kaSwgdXNoYnUgZm95ZGFsYW51dmNoaSBv4oCYY2hpcmliIHRhc2hsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBmb3lkYWxhbnV2Y2hpIG1h4oCZbHVtb3RsYXJpIGhhbSBv4oCYY2hpYiBrZXRhZGkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iU2l6IHBsYW5zaGV0bmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoIHFpbHNhbmdpeiwgaXNoY2hpIHByb2ZpbCBv4oCYY2hpcmliIHRhc2hsYW5hZGkgdmEgdW5kYWdpIGJhcmNoYSBwcm9maWwgbWHigJlsdW1vdGxhcmkgaGFtIG/igJhjaGliIGtldGFkaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iU2l6IHRlbGVmb25uaSBxdWxmZGFuIGNoaXFhcmlzaCB1Y2h1biA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBtYXJ0YSBub3Rv4oCYZ+KAmHJpIHVyaW5pc2ggcWlsZGluZ2l6LiBBZ2FyIHlhbmEgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWFydGEgbXV2YWZmYXFpeWF0c2l6IHVyaW5pc2ggcWlsc2FuZ2l6LCBpc2hjaGkgcHJvZmlsIG/igJhjaGlyaWIgdGFzaGxhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIHByb2ZpbCBtYeKAmWx1bW90bGFyaSBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IlNpeiBwbGFuc2hldG5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWFydGEgbXV2YWZmYXFpeWF0c2l6IHVyaW5pc2ggcWlsc2FuZ2l6LCBpc2hjaGkgcHJvZmlsIG/igJhjaGlyaWIgdGFzaGxhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIHByb2ZpbCBtYeKAmWx1bW90bGFyaSBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY4NTMwNzExNjU4MDI5MzM1NDUiPiJTaXogdGVsZWZvbm5pIHF1bGZkYW4gY2hpcWFyaXNoIHVjaHVuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSB1cmluaXNoIHFpbGRpbmdpei4gQWdhciB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbWFydGEgbXV2YWZmYXFpeWF0c2l6IHVyaW5pc2ggcWlsc2FuZ2l6LCBpc2hjaGkgcHJvZmlsIG/igJhjaGlyaWIgdGFzaGxhbmFkaSB2YSB1bmRhZ2kgYmFyY2hhIHByb2ZpbCBtYeKAmWx1bW90bGFyaSBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4iU2l6IHBsYW5zaGV0bmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEVuZGksIGlzaGNoaSBwcm9maWwgb+KAmGNoaXJpYiB0YXNobGFuYWRpIHZhIHVuZGFnaSBiYXJjaGEgbWHigJlsdW1vdGxhciBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IlNpeiB0ZWxlZm9ubmkgcXVsZmRhbiBjaGlxYXJpc2ggdWNodW4gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IG1hcnRhIG5vdG/igJhn4oCYcmkgdXJpbmlzaCBxaWxkaW5naXouIEVuZGksIGlzaGNoaSBwcm9maWwgb+KAmGNoaXJpYiB0YXNobGFuYWRpIHZhIHVuZGFnaSBiYXJjaGEgbWHigJlsdW1vdGxhciBoYW0gb+KAmGNoaWIga2V0YWRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJTaXogY2hpem1hbGkga2FsaXRuaSAgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBraXJpdGRpbmdpei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbWFydGEgbXV2YWZmYXFpeWF0c2l6IHVyaW5pc2hkYW4gc2/igJhuZywgc2l6ZGFuIGUtcG9jaHRhbmdpemRhbiBmb3lkYWxhbmliLCBwbGFuc2hldCBxdWxmaW5pIG9jaGlzaGluZ2l6IHNv4oCYcmFsYWRpLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gc29uaXlhZGFuIHNv4oCYbmcgeWFuYSB1cmluaWIga2/igJhyaW5nLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iU2l6IGNoaXptYWxpIGthbGl0bmkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBjaGl6ZGluZ2l6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBtYXJ0YSBtdXZhZmZhcWl5YXRzaXogdXJpbmlzaGRhbiBzb+KAmG5nLCBzaXpkYW4gZS1wb2NodGFuZ2l6ZGFuIGZveWRhbGFuaWIsIHRlbGVmb24gcXVsZmluaSBvY2hpc2hpbmdpeiBzb+KAmHJhbGFkaS5cblxuIDx4bGlmZjpnIGlkPSJOVU1CRVJfMiI+JWQ8L3hsaWZmOmc+IHNvbml5YWRhbiBzb+KAmG5nIHlhbmEgdXJpbmliIGtv4oCYcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iU2l6IGNoaXptYWxpIGthbGl0bmkgIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBraXJpdGRpbmdpei4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBtYXJ0YSBtdXZhZmZhcWl5YXRzaXogdXJpbmlzaGRhbiBzb+KAmG5nLCBzaXpkYW4gZS1wb2NodGFuZ2l6ZGFuIGZveWRhbGFuaWIsIHBsYW5zaGV0IHF1bGZpbmkgb2NoaXNoaW5naXogc2/igJhyYWxhZGkuXG5cbiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IHNvbml5YWRhbiBzb+KAmG5nIHlhbmEgdXJpbmliIGtv4oCYcmluZy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IlNpeiBjaGl6bWFsaSBrYWxpdG5pIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbWFydGEgbm90b+KAmGfigJhyaSBjaGl6ZGluZ2l6LiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IG1hcnRhIG11dmFmZmFxaXlhdHNpeiB1cmluaXNoZGFuIHNv4oCYbmcsIHNpemRhbiBlLXBvY2h0YW5naXpkYW4gZm95ZGFsYW5pYiwgdGVsZWZvbiBxdWxmaW5pIG9jaGlzaGluZ2l6IHNv4oCYcmFsYWRpLlxuXG4gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBzb25peWFkYW4gc2/igJhuZyB5YW5hIHVyaW5pYiBrb+KAmHJpbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGVfcHVra2VkIiBtc2dpZD0iMzA1MzEwMzk0NTU3NjQ5MjQiPiJTSU0ga2FydGEgUElOIGtvZGkgbm90b+KAmGfigJhyaS4gUXVyaWxtYSBxdWxmaW5pIG9jaGlzaCB1Y2h1biBhbG9xYSBvcGVyYXRvcmluZ2l6IGJpbGFuIGJvZ+KAmGxhbmluZy4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U0lNIGthcnRhbmluZyBQSU4ga29kaSBub3Rv4oCYZ+KAmHJpLiBTaXpkYSB5YW5hIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IHRhIHVyaW5pc2ggcW9sZGkuPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggMDU2ODk5OC4uOGQ3MmNkMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+IkjDo3kgbmjhuq1wIGzhuqFpIG3DoyBQVUsgY2jDrW5oIHjDoWMuIE5oaeG7gXUgbOG6p24gbOG6t3AgbOG6oWkgc+G6vSB2w7QgaGnhu4d1IGjDs2EgdsSpbmggdmnhu4VuIHRo4bq7IFNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iTcOjIFBJTiBraMO0bmcga2jhu5twIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfbG9naW5fdG9vX21hbnlfYXR0ZW1wdHMiIG1zZ2lkPSI2NDg2ODQyMDk0MDA1Njk4NDc1Ij4iUXXDoSBuaGnhu4F1IGzhuqduIG5o4bqtcCBow6xuaCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBs4bqnbiBuaOG6rXAgc2FpIG3DoyBQSU4uIFxuXG5Iw6N5IHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBnacOieS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBs4bqnbiBuaOG6rXAgc2FpIG3huq10IGto4bqpdS4gXG5cbkjDo3kgdGjhu60gbOG6oWkgc2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGdpw6J5LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJC4bqhbiDEkcOjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGzhuqduIHbhur0ga2jDtG5nIGNow61uaCB4w6FjIGjDrG5oIG3hu58ga2jDs2EuIFxuXG5Iw6N5IHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBnacOieS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJC4bqhbiDEkcOjIG3hu58ga2jDs2EgbcOheSB0w61uaCBi4bqjbmcgc2FpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGzhuqduLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbOG6p24gbeG7nyBraMOzYSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCBtw6F5IHTDrW5oIGLhuqNuZyBuw6B5IHPhur0gxJHGsOG7o2MgxJHhurd0IGzhuqFpLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBj4bunYSBtw6F5IHTDrW5oIGLhuqNuZyBz4bq9IGLhu4sgeMOzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbOG6p24uIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIMSRaeG7h24gdGhv4bqhaSBuw6B5IHPhur0gxJHGsOG7o2MgxJHhurd0IGzhuqFpLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBj4bunYSDEkWnhu4duIHRob+G6oWkgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJC4bqhbiDEkcOjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbOG6p24gbmjhuq1wIHNhaSBtw6MgUElOLiBcblxuSMOjeSB0aOG7rSBs4bqhaSBzYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBnacOieS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduIG5o4bqtcCBzYWkgbeG6rXQga2jhuql1LiBcblxuSMOjeSB0aOG7rSBs4bqhaSBzYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBnacOieS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduIHbhur0ga2jDtG5nIGNow61uaCB4w6FjIGjDrG5oIG3hu58ga2jDs2EuIFxuXG5Iw6N5IHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGdpw6J5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSBtw6F5IHTDrW5oIGLhuqNuZyBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBs4bqnbi4gU2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbOG6p24gbeG7nyBraMOzYSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCBtw6F5IHTDrW5oIGLhuqNuZyBuw6B5IHPhur0gxJHGsOG7o2MgxJHhurd0IGzhuqFpLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBj4bunYSBtw6F5IHTDrW5oIGLhuqNuZyBz4bq9IGLhu4sgeMOzYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBs4bqnbi4gU2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4gbOG6p24gbeG7nyBraMOzYSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCDEkWnhu4duIHRob+G6oWkgbsOgeSBz4bq9IMSRxrDhu6NjIMSR4bq3dCBs4bqhaSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgY+G7p2EgxJFp4buHbiB0aG/huqFpIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiJC4bqhbiDEkcOjIG3hu58ga2jDs2EgbcOheSB0w61uaCBi4bqjbmcgc2FpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbi4gTcOheSB0w61uaCBi4bqjbmcgbsOgeSBz4bq9IMSRxrDhu6NjIMSR4bq3dCBs4bqhaSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgY+G7p2EgbcOheSB0w61uaCBi4bqjbmcgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduLiDEkGnhu4duIHRob+G6oWkgbsOgeSBz4bq9IMSRxrDhu6NjIMSR4bq3dCBs4bqhaSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgY+G7p2EgxJFp4buHbiB0aG/huqFpIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSBtw6F5IHTDrW5oIGLhuqNuZyBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbOG6p24uIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIG5nxrDhu51pIGTDuW5nIG7DoHkgc+G6vSBi4buLIHjDs2EsIHThu6ljIGzDoCB04bqldCBj4bqjIGThu68gbGnhu4d1IG5nxrDhu51pIGTDuW5nIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJC4bqhbiDEkcOjIG3hu58ga2jDs2EgxJFp4buHbiB0aG/huqFpIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBs4bqnbi4gU2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGzhuqduIG3hu58ga2jDs2Ega2jDtG5nIHRow6BuaCBjw7RuZyBu4buvYSwgbmfGsOG7nWkgZMO5bmcgbsOgeSBz4bq9IGLhu4sgeMOzYSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgbmfGsOG7nWkgZMO5bmcgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIG3DoXkgdMOtbmggYuG6o25nIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIG5nxrDhu51pIGTDuW5nIG7DoHkgc+G6vSBi4buLIHjDs2EsIHThu6ljIGzDoCB04bqldCBj4bqjIGThu68gbGnhu4d1IG5nxrDhu51pIGTDuW5nIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJC4bqhbiDEkcOjIG3hu58ga2jDs2EgxJFp4buHbiB0aG/huqFpIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIG5nxrDhu51pIGTDuW5nIG7DoHkgc+G6vSBi4buLIHjDs2EsIHThu6ljIGzDoCB04bqldCBj4bqjIGThu68gbGnhu4d1IG5nxrDhu51pIGTDuW5nIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIG3DoXkgdMOtbmggYuG6o25nIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbOG6p24uIE5nxrDhu51pIGTDuW5nIG7DoHkgc+G6vSBi4buLIHjDs2EsIHThu6ljIGzDoCB04bqldCBj4bqjIGThu68gbGnhu4d1IG5nxrDhu51pIGTDuW5nIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSDEkWnhu4duIHRob+G6oWkgc2FpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbi4gTmfGsOG7nWkgZMO5bmcgbsOgeSBz4bq9IGLhu4sgeMOzYSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgbmfGsOG7nWkgZMO5bmcgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIG3DoXkgdMOtbmggYuG6o25nIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBs4bqnbi4gU2F1IDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGzhuqduIG3hu58ga2jDs2Ega2jDtG5nIHRow6BuaCBjw7RuZyBu4buvYSwgaOG7kyBzxqEgY8O0bmcgdmnhu4djIHPhur0gYuG7iyB4w7NhLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBo4buTIHPGoSBz4bq9IGLhu4sgeMOzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gbOG6p24uIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIGjhu5Mgc8ahIGPDtG5nIHZp4buHYyBz4bq9IGLhu4sgeMOzYSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgaOG7kyBzxqEgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iQuG6oW4gxJHDoyBt4bufIGtow7NhIG3DoXkgdMOtbmggYuG6o25nIHNhaSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBs4bqnbiBt4bufIGtow7NhIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIGjhu5Mgc8ahIGPDtG5nIHZp4buHYyBz4bq9IGLhu4sgeMOzYSwgdOG7qWMgbMOgIHThuqV0IGPhuqMgZOG7ryBsaeG7h3UgaOG7kyBzxqEgc+G6vSBi4buLIHjDs2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSDEkWnhu4duIHRob+G6oWkgc2FpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gbOG6p24uIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGzhuqduIG3hu58ga2jDs2Ega2jDtG5nIHRow6BuaCBjw7RuZyBu4buvYSwgaOG7kyBzxqEgY8O0bmcgdmnhu4djIHPhur0gYuG7iyB4w7NhLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBo4buTIHPGoSBz4bq9IGLhu4sgeMOzYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDY4NjM4NjQ5NzQ0OTkxMjE0NiI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSBtw6F5IHTDrW5oIGLhuqNuZyBzYWkgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGzhuqduLiBI4buTIHPGoSBjw7RuZyB2aeG7h2Mgc+G6vSBi4buLIHjDs2EsIHThu6ljIGzDoCB04bqldCBj4bqjIGThu68gbGnhu4d1IGjhu5Mgc8ahIHPhur0gYuG7iyB4w7NhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IkLhuqFuIMSRw6MgbeG7nyBraMOzYSDEkWnhu4duIHRob+G6oWkgc2FpIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBs4bqnbi4gSOG7kyBzxqEgY8O0bmcgdmnhu4djIHPhur0gYuG7iyB4w7NhLCB04bupYyBsw6AgdOG6pXQgY+G6oyBk4buvIGxp4buHdSBo4buTIHPGoSBz4bq9IGLhu4sgeMOzYS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiBs4bqnbiB24bq9IGtow7RuZyBjaMOtbmggeMOhYyBow6xuaCBt4bufIGtow7NhIGPhu6dhIG3DrG5oLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gbOG6p24gdGjhu60ga2jDtG5nIHRow6BuaCBjw7RuZyBu4buvYSwgYuG6oW4gc+G6vSDEkcaw4bujYyB5w6p1IGPhuqd1IG3hu58ga2jDs2EgbcOheSB0w61uaCBi4bqjbmcgYuG6sW5nIHTDoGkga2hv4bqjbiBlbWFpbC5cblxuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gZ2nDonkuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJC4bqhbiDEkcOjIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGzhuqduIHbhur0ga2jDtG5nIGNow61uaCB4w6FjIGjDrG5oIG3hu58ga2jDs2EgY+G7p2EgbcOsbmguIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCBi4bqhbiBz4bq9IMSRxrDhu6NjIHnDqnUgY+G6p3UgbeG7nyBraMOzYSDEkWnhu4duIHRob+G6oWkgYuG6sW5nIHTDoGkga2hv4bqjbiBlbWFpbC5cblxuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gZ2nDonkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IkLhuqFuIMSRw6MgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiBs4bqnbiB24bq9IGtow7RuZyBjaMOtbmggeMOhYyBow6xuaCBt4bufIGtow7NhIGPhu6dhIG3DrG5oLiBTYXUgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBs4bqnbiB0aOG7rSBraMO0bmcgdGjDoG5oIGPDtG5nIG7hu69hLCBi4bqhbiBz4bq9IMSRxrDhu6NjIHnDqnUgY+G6p3UgbeG7nyBraMOzYSBtw6F5IHTDrW5oIGLhuqNuZyBi4bqxbmcgdMOgaSBraG/huqNuIGVtYWlsLlxuXG4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IGdpw6J5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iQuG6oW4gxJHDoyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IGzhuqduIHbhur0ga2jDtG5nIGNow61uaCB4w6FjIGjDrG5oIG3hu58ga2jDs2EgY+G7p2EgbcOsbmguIFNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGzhuqduIHRo4butIGtow7RuZyB0aMOgbmggY8O0bmcgbuG7r2EsIGLhuqFuIHPhur0gxJHGsOG7o2MgecOqdSBj4bqndSBt4bufIGtow7NhIMSRaeG7h24gdGhv4bqhaSBi4bqxbmcgdMOgaSBraG/huqNuIGVtYWlsLlxuXG4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IGdpw6J5LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iTcOjIFBJTiBj4bunYSBTSU0ga2jDtG5nIGNow61uaCB4w6FjLCBiw6J5IGdp4budIGLhuqFuIHBo4bqjaSBsacOqbiBo4buHIHbhu5tpIG5ow6AgY3VuZyBj4bqlcCBk4buLY2ggduG7pSDEkeG7gyBt4bufIGtow7NhIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbi4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+TcOjIFBJTiBj4bunYSBTSU0ga2jDtG5nIGNow61uaCB4w6FjLCBi4bqhbiBjw7JuICA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBs4bqnbiB0aOG7rS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IGM3YjIxN2MuLmRjMDE3ZmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC03NywyMyArNzcsMjMgQEAKICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfcHVrIiBtc2dpZD0iMzYzODI4OTQwOTY3NjA1MTI0MyI+Iuivt+mHjeaWsOi+k+WFpeato+ehrueahFBVS+eggeOAguWmguaenOWwneivlemUmeivr+asoeaVsOi/h+Wkmu+8jFNJTeWNoeWwhuawuOS5heWBnOeUqOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ludmFsaWRfY29uZmlybV9waW5faGludCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcwMDM0NjkyNjE0NjQ1OTM1MTYiPiJQSU7noIHkuI3ljLnphY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyIgbXNnaWQ9IjY0ODY4NDIwOTQwMDU2OTg0NzUiPiLlm77moYjlsJ3or5XmrKHmlbDov4flpJoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IuaCqOW3sue7jzx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+5qyh6L6T6ZSZ5LqGUElO56CB44CCXG5cbuivt+WcqDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+56eS5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuaCqOW3sui/nue7rSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHovpPplJnlr4bnoIHjgIJcblxu6K+35ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOenkuWQjumHjeivleOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLmgqjlt7Lov57nu60gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh55S76ZSZ6Kej6ZSB5Zu+5qGI44CCXG5cbuivt+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDnp5LlkI7ph43or5XjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh6ZSZ6K+v5Zyw5bCd6K+V6Kej6ZSB5bmz5p2/55S16ISR44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOW5s+adv+eUteiEkeWwhuS8muiiq+mHjee9ru+8jOi/meS8muWIoOmZpOWFtuS4reeahOaJgOacieaVsOaNruOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh6ZSZ6K+v5Zyw5bCd6K+V6Kej6ZSB5omL5py644CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOaJi+acuuWwhuS8muiiq+mHjee9ru+8jOi/meS8muWIoOmZpOWFtuS4reeahOaJgOacieaVsOaNruOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i5oKo5bey57uPPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPuasoei+k+mUmeS6hlBJTueggeOAglxuXG7or7flnKg8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+56eS5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IuaCqOW3sui/nue7rSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoei+k+mUmeWvhueggeOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDnp5LlkI7ph43or5XjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4i5oKo5bey6L+e57utIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh55S76ZSZ6Kej6ZSB5Zu+5qGI44CCXG5cbuivt+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOenkuWQjumHjeivleOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeW5s+adv+eUteiEkeOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOW5s+adv+eUteiEkeWwhuS8muiiq+mHjee9ru+8jOi/meS8muWIoOmZpOWFtuS4reeahOaJgOacieaVsOaNruOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE4NDMzMzE3NTEzMzQxMjg0MjgiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHmiYvmnLrjgILlpoLmnpzlho3lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDmrKHlkI7ku43kuI3miJDlip/vvIzmiYvmnLrlsIbkvJrooqvph43nva7vvIzov5nkvJrliKDpmaTlhbbkuK3nmoTmiYDmnInmlbDmja7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMjU4OTI1NTAxOTk5Njk4MDMyIj4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHlubPmnb/nlLXohJHjgILlubPmnb/nlLXohJHlsIbkvJrooqvph43nva7vvIzov5nkvJrliKDpmaTlhbbkuK3nmoTmiYDmnInmlbDmja7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X3dpcGluZyIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjcxNTQwMjg5MDg0NTk4MTcwNjYiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeaJi+acuuOAguaJi+acuuWwhuS8muiiq+mHjee9ru+8jOi/meS8muWIoOmZpOWFtuS4reeahOaJgOacieaVsOaNruOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNjE1OTk1NTA5OTM3MjExMjY4OCI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHlubPmnb/nlLXohJHjgILlpoLmnpzlho3lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k55So5oi377yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE55So5oi35pWw5o2u44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHmiYvmnLrjgILlpoLmnpzlho3lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k55So5oi377yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE55So5oi35pWw5o2u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh6ZSZ6K+v5Zyw5bCd6K+V6Kej6ZSB5bmz5p2/55S16ISR44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k55So5oi377yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE55So5oi35pWw5o2u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeaJi+acuuOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+Wwhuenu+mZpOatpOeUqOaIt++8jOi/meS8muWIoOmZpOaJgOacieeahOeUqOaIt+aVsOaNruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHlubPmnb/nlLXohJHjgILns7vnu5/lsIbnp7vpmaTmraTnlKjmiLfvvIzov5nkvJrliKDpmaTmiYDmnInnmoTnlKjmiLfmlbDmja7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9Ijc3MjkwMDk3NTIyNTIxMTE2NzMiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeaJi+acuuOAguezu+e7n+Wwhuenu+mZpOatpOeUqOaIt++8jOi/meS8muWIoOmZpOaJgOacieeahOeUqOaIt+aVsOaNruOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iNDYyMTc3ODUwNzM4Nzg1MzY5NCI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHlubPmnb/nlLXohJHjgILlpoLmnpzlho3lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k5bel5L2c6LWE5paZ77yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE5bel5L2c6LWE5paZ5pWw5o2u44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHmiYvmnLrjgILlpoLmnpzlho3lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k5bel5L2c6LWE5paZ77yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE5bel5L2c6LWE5paZ5pWw5o2u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh6ZSZ6K+v5Zyw5bCd6K+V6Kej6ZSB5bmz5p2/55S16ISR44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5ZCO5LuN5LiN5oiQ5Yqf77yM57O757uf5bCG56e76Zmk5q2k5bel5L2c6LWE5paZ77yM6L+Z5Lya5Yig6Zmk5omA5pyJ55qE5bel5L2c6LWE5paZ5pWw5o2u44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IuaCqOW3sue7jyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeaJi+acuuOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+Wwhuenu+mZpOatpOW3peS9nOi1hOaWme+8jOi/meS8muWIoOmZpOaJgOacieeahOW3peS9nOi1hOaWmeaVsOaNruOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0Njg2Mzg2NDk3NDQ5OTEyMTQ2Ij4i5oKo5bey57uPIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDmrKHplJnor6/lnLDlsJ3or5Xop6PplIHlubPmnb/nlLXohJHjgILns7vnu5/lsIbnp7vpmaTmraTlt6XkvZzotYTmlpnvvIzov5nkvJrliKDpmaTmiYDmnInnmoTlt6XkvZzotYTmlpnmlbDmja7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfbm93X2VyYXNpbmdfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjQ5NTE1MDczNTI4Njk4MzEyNjUiPiLmgqjlt7Lnu48gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemUmeivr+WcsOWwneivleino+mUgeaJi+acuuOAguezu+e7n+Wwhuenu+mZpOatpOW3peS9nOi1hOaWme+8jOi/meS8muWIoOmZpOaJgOacieeahOW3peS9nOi1hOaWmeaVsOaNruOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiLmgqjlt7Lov57nu60gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh55S76ZSZ6Kej6ZSB5Zu+5qGI44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+WwseS8muimgeaxguaCqOS9v+eUqOiHquW3seeahOeUteWtkOmCruS7tuW4kOWPt+ino+mUgeW5s+adv+eUteiEkeOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g56eS5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiLmgqjlt7Lov57nu60gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh55S76ZSZ6Kej6ZSB5Zu+5qGI44CC5aaC5p6c5YaN5bCd6K+VIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+WwseS8muimgeaxguaCqOS9v+eUqOiHquW3seeahOeUteWtkOmCruS7tuW4kOWPt+ino+mUgeaJi+acuuOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4g56eS5ZCO6YeN6K+V44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuaCqOW3sui/nue7rSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoeeUu+mUmeino+mUgeWbvuahiOOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+WwseS8muimgeaxguaCqOS9v+eUqOiHquW3seeahOeUteWtkOmCruS7tuW4kOWPt+ino+mUgeW5s+adv+eUteiEkeOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDnp5LlkI7ph43or5XjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuaCqOW3sui/nue7rSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoeeUu+mUmeino+mUgeWbvuahiOOAguWmguaenOWGjeWwneivlSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeWQjuS7jeS4jeaIkOWKn++8jOezu+e7n+WwseS8muimgeaxguaCqOS9v+eUqOiHquW3seeahOeUteWtkOmCruS7tuW4kOWPt+ino+mUgeaJi+acuuOAglxuXG7or7flnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiDnp5LlkI7ph43or5XjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IlNJTeWNoVBJTueggeS4jeato+ehru+8jOaCqOeOsOWcqOW/hemhu+iBlOezu+i/kOiQpeWVhuS4uuaCqOino+mUgeiuvuWkh+OAgiI8L3N0cmluZz4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY3MjE1NzUwMTc1MzgxNjIyNDkiPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TSU0g5Y2hIFBJTiDnoIHkuI3mraPnoa7vvIzmgqjov5jlj6/lsJ3or5UgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh44CCPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAppbmRleCA1NDJlMWI4Li44MjgwMmQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLoq4vph43mlrDovLjlhaXmraPnorrnmoQgUFVLIOeivOOAguWmguaenOWYl+ippui8uOWFpeeahOasoeaVuOmBjuWkmu+8jFNJTSDljaHlsIfmsLjkuYXlgZznlKjjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOeivOS4jeespiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuWcluahiOWYl+ippuasoeaVuOmBjuWkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i5oKo5bey6Ly45YWl6Yyv6Kqk55qEIFBJTiDnorwgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i5oKo5bey6Ly45YWl6Yyv6Kqk55qE5a+G56K8IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHpjK/oqqTop6PpjpblubPmnb/pm7vohabjgILlpoLlho3op6PpjpblpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh77yM5bmz5p2/6Zu76IWm5bCH6KKr6YeN6Kit77yM5bmz5p2/6Zu76IWm55qE5omA5pyJ6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHpjK/oqqTop6PpjpbmiYvmqZ/jgILlpoLlho3op6PpjpblpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh77yM5omL5qmf5bCH6KKr6YeN6Kit77yM5omL5qmf55qE5omA5pyJ6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLmgqjlt7LovLjlhaXpjK/oqqTnmoQgUElOIOeivCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i5oKo5bey6Ly45YWl6Yyv6Kqk55qE5a+G56K8IDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLmgqjlt7LnlavpjK/op6PpjpblnJbmoYggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5bmz5p2/6Zu76IWm44CC5aaC5YaN6Kej6Y6W5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh77yM5bmz5p2/6Zu76IWm5bCH6KKr6YeN6Kit77yM5bmz5p2/6Zu76IWm55qE5omA5pyJ6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluaJi+apn+OAguWmguWGjeino+mOluWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoe+8jOaJi+apn+Wwh+iiq+mHjeiore+8jOaJi+apn+eahOaJgOacieizh+aWmeWwh+WboOatpOiiq+WIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLmgqjlt7IgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluaJi+apn+OAguW5s+adv+mbu+iFpuWwh+iiq+mHjeiore+8jOW5s+adv+mbu+iFpueahOaJgOacieizh+aWmeWwh+WboOatpOiiq+WIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5omL5qmf44CC5omL5qmf5bCH6KKr6YeN6Kit77yM5omL5qmf55qE5omA5pyJ6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluW5s+adv+mbu+iFpuOAguWmguWGjeino+mOluWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHvvIzoqbLkvb/nlKjogIXlsIfooqvnp7vpmaTvvIzmiYDmnInkvb/nlKjogIXos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluaJi+apn+OAguWmguWGjeino+mOluWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHvvIzoqbLkvb/nlKjogIXlsIfooqvnp7vpmaTvvIzmiYDmnInkvb/nlKjogIXos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLmgqjlt7IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHpjK/oqqTop6PpjpblubPmnb/pm7vohabjgILlpoLlho3op6PpjpblpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDmrKHvvIzoqbLkvb/nlKjogIXlsIfooqvnp7vpmaTvvIzmiYDmnInkvb/nlKjogIXos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5omL5qmf44CC5aaC5YaN6Kej6Y6W5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh77yM6Kmy5L2/55So6ICF5bCH6KKr56e76Zmk77yM5omA5pyJ5L2/55So6ICF6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLmgqjlt7IgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluW5s+adv+mbu+iFpuOAguipsuS9v+eUqOiAheWwh+iiq+enu+mZpO+8jOaJgOacieS9v+eUqOiAheizh+aWmeWwh+WboOatpOiiq+WIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5omL5qmf44CC6Kmy5L2/55So6ICF5bCH6KKr56e76Zmk77yM5omA5pyJ5L2/55So6ICF6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluW5s+adv+mbu+iFpuOAguWmguWGjeino+mOluWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHvvIzoqbLlt6XkvZzoqK3lrprmqpTlsIfooqvnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluaJi+apn+OAguWmguWGjeino+mOluWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHvvIzoqbLlt6XkvZzoqK3lrprmqpTlsIfooqvnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLmgqjlt7IgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHpjK/oqqTop6PpjpblubPmnb/pm7vohabjgILlpoLlho3op6PpjpblpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDmrKHvvIzoqbLlt6XkvZzoqK3lrprmqpTlsIfooqvnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnlsIflm6DmraTooqvliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i5oKo5beyIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5omL5qmf44CC5aaC5YaN6Kej6Y6W5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh77yM6Kmy5bel5L2c6Kit5a6a5qqU5bCH6KKr56e76Zmk77yM5omA5pyJ6Kit5a6a5qqU6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLmgqjlt7IgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoemMr+iqpOino+mOluW5s+adv+mbu+iFpuOAguipsuW3peS9nOioreWumuaqlOWwh+iiq+enu+mZpO+8jOaJgOacieioreWumuaqlOizh+aWmeWwh+WboOatpOiiq+WIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuaCqOW3siA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh6Yyv6Kqk6Kej6Y6W5omL5qmf44CC6Kmy5bel5L2c6Kit5a6a5qqU5bCH6KKr56e76Zmk77yM5omA5pyJ6Kit5a6a5qqU6LOH5paZ5bCH5Zug5q2k6KKr5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5bmz5p2/6Zu76IWm44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuaCqOW3sueVq+mMr+ino+mOluWcluahiCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5omL5qmf44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i5oKo5bey55Wr6Yyv6Kej6Y6W5ZyW5qGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM5aaC5p6c5YaN5ZiX6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5bmz5p2/6Zu76IWm44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i5oKo5bey55Wr6Yyv6Kej6Y6W5ZyW5qGIIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM5aaC5p6c5YaN5ZiX6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5pyD6KaB5rGC5oKo6YCP6YGO6Zu76YO15biz5oi26Kej6ZaL5LiK6Y6W55qE5omL5qmf44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIFBJTiDnorzkuI3mraPnorrvvIzmgqjnj77lnKjlv4XpoIjoga/ntaHmtYHli5XntrLntaHkvpvmh4nllYbngrrmgqjnmoToo53nva7op6PpjpbjgIIiPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+U0lNIFBJTiDnorzkuI3mraPnorrvvIzmgqjpgoTmnIkgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD6Ly45YWl44CCPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCA1NmQwNTczLi44MDBkMGEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtNzcsMjMgKzc3LDIzIEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX3B1ayIgbXNnaWQ9IjM2MzgyODk0MDk2NzYwNTEyNDMiPiLph43mlrDovLjlhaXmraPnorrnmoQgUFVLIOeivOOAguWmguaenOmMr+iqpOasoeaVuOmBjuWkmu+8jFNJTSDljaHlsIfmnIPmsLjkuYXlgZznlKjjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iUElOIOeivOS4jeespiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+IuWcluW9ouWYl+ippuasoeaVuOmBjuWkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9waW5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI4Mjc2NzQ1NjQyMDQ5NTAyNTUwIj4i5oKo55qEIFBJTiDlt7LovLjpjK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i5oKo55qE5a+G56K85bey6Ly46YyvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3BhdHRlcm5fYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3NDA4OTQ3NTk2NTA1MDgwNSI+IuaCqOeahOino+mOluWcluW9ouW3sueVq+mMryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfd2lwZSIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iODc3NDA1NjYwNjg2OTY0NjYyMSI+IuaCqOWYl+ippuino+mOluW5s+adv+mbu+iFpuW3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIznm67liY3pgoTliakgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD44CC5aaC5p6c5aSx5pWX5qyh5pW46LaF6YGO6ZmQ5Yi277yM6YCZ5Y+w5bmz5p2/6Zu76IWm5bCH5pyD6YeN6Kit77yM5YW25Lit55qE5omA5pyJ6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuaCqOWYl+ippuino+mOluaJi+apn+W3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIznm67liY3pgoTliakgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5qmf5pyD44CC5aaC5p6c5aSx5pWX5qyh5pW46LaF6YGO6ZmQ5Yi277yM57O757Wx5pyD6YeN6Kit5oKo55qE5omL5qmf77yM5YW25Lit55qE5omA5pyJ6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiLmgqjnmoQgUElOIOW3sui8uOmMryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoeOAglxuXG7oq4vlnKggPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGFzc3dvcmRfYXR0ZW1wdHNfZGlhbG9nX21lc3NhZ2UiIG1zZ2lkPSI3ODEzNzEzMzg5NDIyMjI2NTMxIj4i5oKo55qE5a+G56K85bey6Ly46YyvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiLmgqjnmoTop6PpjpblnJblvaLlt7LnlavpjK8gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHjgIJcblxu6KuL5ZyoIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g56eS5b6M5YaN6Kmm5LiA5qyh44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4i5oKo5ZiX6Kmm6Kej6Y6W5bmz5p2/6Zu76IWm5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM55uu5YmN6YKE5YmpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5qmf5pyD44CC5aaC5p6c5aSx5pWX5qyh5pW46LaF6YGO6ZmQ5Yi277yM6YCZ5Y+w5bmz5p2/6Zu76IWm5bCH5pyD6YeN6Kit77yM5YW25Lit55qE5omA5pyJ6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTg0MzMzMTc1MTMzNDEyODQyOCI+IuaCqOWYl+ippuino+mOluaJi+apn+W3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IOasoe+8jOebruWJjemChOWJqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IOasoeapn+acg+OAguWmguaenOWkseaVl+asoeaVuOi2hemBjumZkOWItu+8jOezu+e1seacg+mHjeioreaCqOeahOaJi+apn++8jOWFtuS4reeahOaJgOacieizh+aWmeS5n+acg+S4gOS9temBreWIsOWIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIyNTg5MjU1MDE5OTk2OTgwMzIiPiLmgqjlmJfoqabop6PpjpblubPmnb/pm7vohablt7LlpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAgumAmeWPsOW5s+adv+mbu+iFpuWwh+acg+mHjeiore+8jOWFtuS4reeahOaJgOacieizh+aWmeS5n+acg+S4gOS9temBreWIsOWIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfd2lwaW5nIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzE1NDAyODkwODQ1OTgxNzA2NiI+IuaCqOWYl+ippuino+mOluaJi+apn+W3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC57O757Wx5pyD6YeN6Kit5oKo55qE5omL5qmf77yM5YW25Lit55qE5omA5pyJ6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI2MTU5OTU1MDk5MzcyMTEyNjg4Ij4i5oKo5ZiX6Kmm6Kej6Y6W5bmz5p2/6Zu76IWm5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOebruWJjemChOWJqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzpgJnkvY3kvb/nlKjogIXlsIfpga3liLDnp7vpmaTvvIzlsI3mlrnnmoTmiYDmnInkvb/nlKjogIXos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i5oKo5ZiX6Kmm6Kej6Y6W5omL5qmf5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOebruWJjemChOWJqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzpgJnkvY3kvb/nlKjogIXlsIfpga3liLDnp7vpmaTvvIzlsI3mlrnnmoTmiYDmnInkvb/nlKjogIXos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiLmgqjlmJfoqabop6PpjpblubPmnb/pm7vohablt7LlpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHvvIznm67liY3pgoTliakgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzpgJnkvY3kvb/nlKjogIXlsIfpga3liLDnp7vpmaTvvIzlsI3mlrnnmoTmiYDmnInkvb/nlKjogIXos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2OTQ1ODIzMTg2NjI5MzY5ODgwIj4i5oKo5ZiX6Kmm6Kej6Y6W5omL5qmf5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM55uu5YmN6YKE5YmpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5qmf5pyD44CC5aaC5p6c5aSx5pWX5qyh5pW46LaF6YGO6ZmQ5Yi277yM6YCZ5L2N5L2/55So6ICF5bCH6YGt5Yiw56e76Zmk77yM5bCN5pa555qE5omA5pyJ5L2/55So6ICF6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjM5NjM0ODY5MDUzNTU3Nzg3MzQiPiLmgqjlmJfoqabop6PpjpblubPmnb/pm7vohablt7LlpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAgumAmeS9jeS9v+eUqOiAheWwh+mBreWIsOenu+mZpO+8jOWwjeaWueeahOaJgOacieS9v+eUqOiAheizh+aWmeS5n+acg+S4gOS9temBreWIsOWIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IuaCqOWYl+ippuino+mOluaJi+apn+W3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC6YCZ5L2N5L2/55So6ICF5bCH6YGt5Yiw56e76Zmk77yM5bCN5pa555qE5omA5pyJ5L2/55So6ICF6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4i5oKo5ZiX6Kmm6Kej6Y6W5bmz5p2/6Zu76IWm5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOebruWJjemChOWJqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzmgqjnmoQgV29yayDoqK3lrprmqpTlsIfpga3liLDnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i5oKo5ZiX6Kmm6Kej6Y6W5omL5qmf5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IOasoe+8jOebruWJjemChOWJqSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzmgqjnmoQgV29yayDoqK3lrprmqpTlsIfpga3liLDnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiLmgqjlmJfoqabop6PpjpblubPmnb/pm7vohablt7LlpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPiDmrKHvvIznm67liY3pgoTliakgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiDmrKHmqZ/mnIPjgILlpoLmnpzlpLHmlZfmrKHmlbjotoXpgY7pmZDliLbvvIzmgqjnmoQgV29yayDoqK3lrprmqpTlsIfpga3liLDnp7vpmaTvvIzmiYDmnInoqK3lrprmqpTos4fmlpnkuZ/mnIPkuIDkvbXpga3liLDliKrpmaTjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4i5oKo5ZiX6Kmm6Kej6Y6W5omL5qmf5bey5aSx5pWXIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM55uu5YmN6YKE5YmpIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5qmf5pyD44CC5aaC5p6c5aSx5pWX5qyh5pW46LaF6YGO6ZmQ5Yi277yM5oKo55qEIFdvcmsg6Kit5a6a5qqU5bCH6YGt5Yiw56e76Zmk77yM5omA5pyJ6Kit5a6a5qqU6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiLmgqjlmJfoqabop6PpjpblubPmnb/pm7vohablt7LlpLHmlZcgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOasoeOAguaCqOeahCBXb3JrIOioreWumuaqlOWwh+mBreWIsOenu+mZpO+8jOaJgOacieioreWumuaqlOizh+aWmeS5n+acg+S4gOS9temBreWIsOWIqumZpOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ19wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNDk1MTUwNzM1Mjg2OTgzMTI2NSI+IuaCqOWYl+ippuino+mOluaJi+apn+W3suWkseaVlyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5qyh44CC5oKo55qEIFdvcmsg6Kit5a6a5qqU5bCH6YGt5Yiw56e76Zmk77yM5omA5pyJ6Kit5a6a5qqU6LOH5paZ5Lmf5pyD5LiA5L216YGt5Yiw5Yiq6Zmk44CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IuaCqOeahOino+mOluWcluW9ouW3sueVq+mMryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5bCx5pyD6KaB5rGC5oKo6YCP6YGO6Zu75a2Q6YO15Lu25biz5oi26Kej6Zmk5bmz5p2/6Zu76IWm55qE6Y6W5a6a54uA5oWL44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMTQzNzYzODE1MjAxNTU3NDgzOSI+IuaCqOeahOino+mOluWcluW9ouW3sueVq+mMryA8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPiDmrKHvvIzlpoLmnpzlho3lmJfoqaYgPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5bCx5pyD6KaB5rGC5oKo6YCP6YGO6Zu75a2Q6YO15Lu25biz5oi26Kej6Zmk5omL5qmf55qE6Y6W5a6a54uA5oWL44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiDnp5Llvozlho3oqabkuIDmrKHjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzMjUzNTc1NTcyMTE4OTE0MzcwIj4i5oKo55qE6Kej6Y6W5ZyW5b2i5bey55Wr6YyvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM5aaC5p6c5YaN5ZiX6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5bCx5pyD6KaB5rGC5oKo6YCP6YGO6Zu75a2Q6YO15Lu25biz5oi26Kej6Zmk5bmz5p2/6Zu76IWm55qE6Y6W5a6a54uA5oWL44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4i5oKo55qE6Kej6Y6W5ZyW5b2i5bey55Wr6YyvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4g5qyh77yM5aaC5p6c5YaN5ZiX6KmmIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4g5qyh5LuN5pyq5oiQ5Yqf77yM57O757Wx5bCx5pyD6KaB5rGC5oKo6YCP6YGO6Zu75a2Q6YO15Lu25biz5oi26Kej6Zmk5omL5qmf55qE6Y6W5a6a54uA5oWL44CCXG5cbuiri+WcqCA8eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+IOenkuW+jOWGjeippuS4gOasoeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlX3B1a2tlZCIgbXNnaWQ9IjMwNTMxMDM5NDU1NzY0OTI0Ij4iU0lNIOWNoeeahCBQSU4g56K86Ly45YWl6Yyv6Kqk77yM5oKo54++5Zyo5b+F6aCI6KuL6KGM5YuV6YCa6KiK5qWt6ICF54K66KOd572u6Kej6Y6W44CCIjwvc3RyaW5nPgogICAgIDxwbHVyYWxzIG5hbWU9ImtnX3Bhc3N3b3JkX3dyb25nX3Bpbl9jb2RlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjcyMTU3NTAxNzUzODE2MjI0OSI+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlNJTSDljaHnmoQgUElOIOeivOi8uOWFpemMr+iqpO+8jOaCqOmChOWPr+S7peWGjeippiA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiDmrKHjgII8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCBjMjk2MTljLi5lMWE1NGQxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTc3LDIzICs3NywyMyBAQAogICAgIDxzdHJpbmcgbmFtZT0ia2dfaW52YWxpZF9wdWsiIG1zZ2lkPSIzNjM4Mjg5NDA5Njc2MDUxMjQzIj4iRmFrYSBrYWJ1c2hhIGlraG9kaSB5ZS1QVUsgZWx1bmdpbGUuIEltaXphbW8gZXBoaW5kaXdlIGl6b2todWJhemEgdW5hcGhha2FkZSBpLVNJTS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19pbnZhbGlkX2NvbmZpcm1fcGluX2hpbnQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MDAzNDY5MjYxNDY0NTkzNTE2Ij4iSXBoaW5pa2hvZGkgYXlpZmFuaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2xvZ2luX3Rvb19tYW55X2F0dGVtcHRzIiBtc2dpZD0iNjQ4Njg0MjA5NDAwNTY5ODQ3NSI+Ikt1bmVtaXphbW8gZW1pbmluZ2kga2FraHVsdSB5ZXBoYXRoaW5pIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjgyNzY3NDU2NDIwNDk1MDI1NTAiPiJVYmhhbGUgaXBoaW5pa2hvZGkgeWtobyBuZ2VuZGxlbGEgZW5nYWZhbmVsZSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxuWmFtYSBmdXRoaSBlbWFzZWtob25kaW5pIGFuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlViaGFsZSBpcGhhc2l3ZWRpIHlha2hvIG5nZW5kbGVsYSBlbmdhZmFuZWxlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+IGl6aWtoYXRoaS4gXG5cblphbWEgZnV0aGkgZW1hc2VraG9uZGluaSBhbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzQwODk0NzU5NjUwNTA4MDUiPiJVZHdlYmUgaXBoYXRoaW5pIHlha2hvIHlva3V2dWxhIG5nZW5kbGVsYSBlbmdhZmFuZWxlLTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBcblxuIFphbWEgZnV0aGkgZW1hc2VraG9uZGluaSBhbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI4Nzc0MDU2NjA2ODY5NjQ2NjIxIj4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaXRoZWJ1bGV0aGkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gTmdlbXV2YSBrd2VtaXphbW8gZW5nYXBoZXp1bHUga3dlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGVuZ2FwaHVtZWxlbGFuZ2EsIGxlIHRoZWJ1bGV0aGkgaXpvc2V0aHdhIGthYnVzaGEsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeWF5by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaWZvbmkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiVkPC94bGlmZjpnPi4gTmdlbXV2YSBrd2VtaXphbW8gZW5nYXBoZXp1bHUga3dlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGVuZ2FwaHVtZWxlbGFuZ2EsIGxlIGZvbmkgaXpvc2V0aHdhIGthYnVzaGEsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeWF5by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGluX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iODI3Njc0NTY0MjA0OTUwMjU1MCI+IlViaGFsZSBpcGhpbmlraG9kaSB5a2hvIG5nZW5kbGVsYSBlbmdhZmFuZWxlIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gXG5cblphbWEgZnV0aGkgZW1hc2VraG9uZGluaSBhbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIiBtc2dpZD0iNzgxMzcxMzM4OTQyMjIyNjUzMSI+IlViaGFsZSBpcGhhc2l3ZWRpIHlha2hvIG5nZW5kbGVsYSBlbmdhZmFuZWxlIDx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4gaXppa2hhdGhpLiBcblxuWmFtYSBmdXRoaSBlbWFzZWtob25kaW5pIGFuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ190b29fbWFueV9mYWlsZWRfcGF0dGVybl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9Ijc0MDg5NDc1OTY1MDUwODA1Ij4iVWR3ZWJlIGlwaGF0aGluaSB5YWtobyB5b2t1dnVsYSBuZ2VuZGxlbGEgZW5nYWZhbmVsZS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBcblxuIFphbWEgZnV0aGkgZW1hc2VraG9uZGluaSBhbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9Ijg3NzQwNTY2MDY4Njk2NDY2MjEiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpdGhlYnVsZXRoaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIE5nZW11dmEga3dlbWl6YW1vIGVuZ2FwaGV6dWx1IGt3ZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVuZ2FwaHVtZWxlbGFuZ2EsIGxlIHRoZWJ1bGV0aGkgaXpvc2V0aHdhIGthYnVzaGEsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeWF5by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxODQzMzMxNzUxMzM0MTI4NDI4Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaWZvbmkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBOZ2VtdXZhIGt3ZW1pemFtbyBlbmdhcGhlenVsdSBrd2VuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlbmdhcGh1bWVsZWxhbmdhLCBsZSBmb25pIGl6b3NldGh3YSBrYWJ1c2hhLCBva3V6b3N1c2EgeW9ua2UgaWRhdGhhIHlheW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjI1ODkyNTUwMTk5OTY5ODAzMiI+IlV6YW1lIG5nb2t1bmdhbHVuZ2lsZSB1a3V2dWxhIGl0aGVidWxldGhpIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBMZSB0aGVidWxldGhpIGl6b3NldGh3YSBrYWJ1c2hhLCBva3V6b3N1c2EgeW9ua2UgaWRhdGhhIHlheW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd193aXBpbmciIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI3MTU0MDI4OTA4NDU5ODE3MDY2Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaWZvbmkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIExlIGZvbmkgaXpvc2V0aHdhIGthYnVzaGEsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeWF5by4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpdGhlYnVsZXRoaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBOZ2VtdXZhIGt3ZW1pemFtbyBlbmdhcGhlenVsdSBrd2VuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZW5nYXBodW1lbGVsYW5nYSwgbG8gbXNlYmVuemlzaSB1em9zdXN3YSwgb2t1em9zdXNhIHlvbmtlIGlkYXRoYSB5b21zZWJlbnppc2kuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjk0NTgyMzE4NjYyOTM2OTg4MCI+IlV6YW1lIG5nb2t1bmdhbHVuZ2lsZSB1a3V2dWxhIGlmb25pIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIE5nZW11dmEga3dlbWl6YW1vIGVuZ2FwaGV6dWx1IGt3ZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlbmdhcGh1bWVsZWxhbmdhLCBsbyBtc2ViZW56aXNpIHV6b3N1c3dhLCBva3V6b3N1c2EgeW9ua2UgaWRhdGhhIHlvbXNlYmVuemlzaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3VzZXIiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjYxNTk5NTUwOTkzNzIxMTI2ODgiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpdGhlYnVsZXRoaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIE5nZW11dmEga3dlbWl6YW1vIGVuZ2FwaGV6dWx1IGt3ZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVuZ2FwaHVtZWxlbGFuZ2EsIGxvIG1zZWJlbnppc2kgdXpvc3Vzd2EsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeW9tc2ViZW56aXNpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfdXNlciIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjY5NDU4MjMxODY2MjkzNjk4ODAiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpZm9uaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JTEkZDwveGxpZmY6Zz4uIE5nZW11dmEga3dlbWl6YW1vIGVuZ2FwaGV6dWx1IGt3ZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGVuZ2FwaHVtZWxlbGFuZ2EsIGxvIG1zZWJlbnppc2kgdXpvc3Vzd2EsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeW9tc2ViZW56aXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSIzOTYzNDg2OTA1MzU1Nzc4NzM0Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaXRoZWJ1bGV0aGkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIExvIG1zZWJlbnppc2kgdXpvc3Vzd2EsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeW9tc2ViZW56aXNpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19ub3dfZXJhc2luZ191c2VyIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNzcyOTAwOTc1MjI1MjExMTY3MyI+IlV6YW1lIG5nb2t1bmdhbHVuZ2lsZSB1a3V2dWxhIGlmb25pIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+LiBMbyBtc2ViZW56aXNpIHV6b3N1c3dhLCBva3V6b3N1c2EgeW9ua2UgaWRhdGhhIHlvbXNlYmVuemlzaS4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2MjE3Nzg1MDczODc4NTM2OTQiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpdGhlYnVsZXRoaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBOZ2VtdXZhIGt3ZW1pemFtbyBlbmdhcGhlenVsdSBrd2VuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4gZW5nYXBodW1lbGVsYW5nYSwgaXBocm9mYXllbGEgeW9tc2ViZW56aSBpem9zdXN3YSwgb2t1em9zdXNhIHlvbmtlIGlkYXRoYSB5ZXBocm9mYXllbGEuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iNjg1MzA3MTE2NTgwMjkzMzU0NSI+IlV6YW1lIG5nb2t1bmdhbHVuZ2lsZSB1a3V2dWxhIGlmb25pIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4uIE5nZW11dmEga3dlbWl6YW1vIGVuZ2FwaGV6dWx1IGt3ZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlbmdhcGh1bWVsZWxhbmdhLCBpcGhyb2ZheWVsYSB5b21zZWJlbnppLCBpem9zdXN3YSwgb2t1em9zdXNhIHlvbmtlIGlkYXRoYSB5ZXBocm9mYXllbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiIG1zZ2lkPSI0NjIxNzc4NTA3Mzg3ODUzNjk0Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaXRoZWJ1bGV0aGkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBOZ2VtdXZhIGt3ZW1pemFtbyBlbmdhcGhlenVsdSBrd2VuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlbmdhcGh1bWVsZWxhbmdhLCBpcGhyb2ZheWVsYSB5b21zZWJlbnppIGl6b3N1c3dhLCBva3V6b3N1c2EgeW9ua2UgaWRhdGhhIHllcGhyb2ZheWVsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2VyYXNlX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI2ODUzMDcxMTY1ODAyOTMzNTQ1Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaWZvbmkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+LiBOZ2VtdXZhIGt3ZW1pemFtbyBlbmdhcGhlenVsdSBrd2VuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lMiRkPC94bGlmZjpnPiBlbmdhcGh1bWVsZWxhbmdhLCBpcGhyb2ZheWVsYSB5b21zZWJlbnppLCBpem9zdXN3YSwgb2t1em9zdXNhIHlvbmtlIGlkYXRoYSB5ZXBocm9mYXllbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjQ2ODYzODY0OTc0NDk5MTIxNDYiPiJVemFtZSBuZ29rdW5nYWx1bmdpbGUgdWt1dnVsYSBpdGhlYnVsZXRoaSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPi4gSXBocm9mYXllbGEgeW9tc2ViZW56aSBpem9zdXN3YSwgb2t1em9zdXNhIHlvbmtlIGlkYXRoYSB5ZXBocm9mYXllbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX25vd19lcmFzaW5nX3Byb2ZpbGUiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSI0OTUxNTA3MzUyODY5ODMxMjY1Ij4iVXphbWUgbmdva3VuZ2FsdW5naWxlIHVrdXZ1bGEgaWZvbmkgaXppa2hhdGhpIGV6aW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4uIElwaHJvZmF5ZWxhIHlvbXNlYmVuemkgaXpvc3Vzd2EsIG9rdXpvc3VzYSB5b25rZSBpZGF0aGEgeWVwaHJvZmF5ZWxhLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9InRhYmxldCIgbXNnaWQ9IjMyNTM1NzU1NzIxMTg5MTQzNzAiPiJVZHdlYmUgbmdva3VuZ2FsdW5naWxlIGlwaGF0aGluaSB5YWtobyB5b2t1dnVsYSBpemlraGF0aGkgZXppbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMCI+JWQ8L3hsaWZmOmc+LiBFbXZhIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JWQ8L3hsaWZmOmc+IGt3ZW1pbnllIGltaXphbW8gZW5nYXBodW1lbGVsYW5nYSwgdXpvY2Vsd2EgdWt1dnVsYSBpdGhlYmh1bGV0aGkgeWFraG8gdXNlYmVuemlzYSB1a3VuZ2VuYSBuZ2VtdnVtZSBrd2ktR29vZ2xlLlxuXG4gU2ljZWxhIHV6YW1lIGZ1dGhpIGVtdXZhIGt3YW1hc2VraG9uZGkgYW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIxNDM3NjM4MTUyMDE1NTc0ODM5Ij4iVWt1bGF5aXNoYSB1bmdlbmlzYSBpcGhhdGhpbmkgeWFraG8geW9rdXZ1bGEgbmdlbmRsZWxhIGVuZ2FsdW5naWxlIGl6aWtoYXRoaSBlemktPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lZDwveGxpZmY6Zz4gRW12YSBrd2VtaW55ZSBpbWl6YW1vIGVuZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8xIj4lZDwveGxpZmY6Zz4sIHV6b2NlbHdhIHVrdXZ1bGEgaWZvbmkgeWFraG8gdXNlYmVuemlzYSB1a3VuZ2VuYSBuZ2VtdnVtZSBrdS1Hb29nbGVcblxuIFphbWUgZnV0aGkgZW11bXZhIGt3ZW5ndS0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lZDwveGxpZmY6Zz4gYW1hc2VraG9uZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0idGFibGV0IiBtc2dpZD0iMzI1MzU3NTU3MjExODkxNDM3MCI+IlVkd2ViZSBuZ29rdW5nYWx1bmdpbGUgaXBoYXRoaW5pIHlha2hvIHlva3V2dWxhIGl6aWtoYXRoaSBlemluZ3UtPHhsaWZmOmcgaWQ9Ik5VTUJFUl8wIj4lMSRkPC94bGlmZjpnPi4gRW12YSA8eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiUyJGQ8L3hsaWZmOmc+IGt3ZW1pbnllIGltaXphbW8gZW5nYXBodW1lbGVsYW5nYSwgdXpvY2Vsd2EgdWt1dnVsYSBpdGhlYmh1bGV0aGkgeWFraG8gdXNlYmVuemlzYSB1a3VuZ2VuYSBuZ2VtdnVtZSBrd2ktR29vZ2xlLlxuXG4gU2ljZWxhIHV6YW1lIGZ1dGhpIGVtdXZhIGt3YW1hc2VraG9uZGkgYW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzIiPiUzJGQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9sb2dpbiIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjE0Mzc2MzgxNTIwMTU1NzQ4MzkiPiJVa3VsYXlpc2hhIHVuZ2VuaXNhIGlwaGF0aGluaSB5YWtobyB5b2t1dnVsYSBuZ2VuZGxlbGEgZW5nYWx1bmdpbGUgaXppa2hhdGhpIGV6aS08eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJGQ8L3hsaWZmOmc+IEVtdmEga3dlbWlueWUgaW1pemFtbyBlbmd1LTx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkZDwveGxpZmY6Zz4sIHV6b2NlbHdhIHVrdXZ1bGEgaWZvbmkgeWFraG8gdXNlYmVuemlzYSB1a3VuZ2VuYSBuZ2VtdnVtZSBrdS1Hb29nbGVcblxuIFphbWUgZnV0aGkgZW11bXZhIGt3ZW5ndS0gPHhsaWZmOmcgaWQ9Ik5VTUJFUl8yIj4lMyRkPC94bGlmZjpnPiBhbWFzZWtob25kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19wYXNzd29yZF93cm9uZ19waW5fY29kZV9wdWtrZWQiIG1zZ2lkPSIzMDUzMTAzOTQ1NTc2NDkyNCI+IklraG9kaSB5ZXBoaW5pa2hvZGkgeWUtU0lNIGVuZ2FsdW5naWxlIG1hbmplIGt1bWVsZSB1eGh1bWFuZSBuZW5rYW1waW5pIHllbmV0aGl3ZWtoaSB5YWtobyB1a3V2dWxhIGlkaXZheWlzaSB5YWtoby4iPC9zdHJpbmc+CiAgICAgPHBsdXJhbHMgbmFtZT0ia2dfcGFzc3dvcmRfd3JvbmdfcGluX2NvZGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2NzIxNTc1MDE3NTM4MTYyMjQ5Ij4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPklraG9kaSBlbmdhbHVuZ2lsZSB5ZXBoaW5pa2hvZGkgeWUtU0lNLCB1bmVtaXphbW8gZW5ndS08eGxpZmY6ZyBpZD0iTlVNQkVSXzEiPiVkPC94bGlmZjpnPiBlc2VsZS48L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvS2V5Z3VhcmQvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCBkMWU4NGY1Li43NDY0NTdmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9LZXlndWFyZC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL0tleWd1YXJkL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTE3MCwyOSArMTcwLDI5IEBACiAgICAgPHN0cmluZyBuYW1lPSJrZ19sb2dpbl90b29fbWFueV9hdHRlbXB0cyI+VG9vIG1hbnkgcGF0dGVybiBhdHRlbXB0czwvc3RyaW5nPgogICAgIDwhLS0gTWVzc2FnZSBzaG93biBpbiBkaWFsb2cgd2hlbiBtYXggbnVtYmVyIG9mIGF0dGVtcHRzIGFyZSByZWFjaGVkIGZvciBQSU4gc2NyZWVuIG9mIGtleWd1YXJkIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bpbl9hdHRlbXB0c19kaWFsb2dfbWVzc2FnZSI+Ci0gICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgUElOIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiB0aW1lcy4KLSAgICAgICAgXG5cblRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4KKyAgICAgICAgWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBQSU4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTEkZDwveGxpZmY6Zz4gdGltZXMuCisgICAgICAgIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4KICAgICA8L3N0cmluZz4KICAgICA8IS0tIE1lc3NhZ2Ugc2hvd24gaW4gZGlhbG9nIHdoZW4gbWF4IG51bWJlciBvZiBhdHRlbXB0cyBhcmUgcmVhY2hlZCBmb3IgcGFzc3dvcmQgc2NyZWVuIG9mIGtleWd1YXJkIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfdG9vX21hbnlfZmFpbGVkX3Bhc3N3b3JkX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIj4KLSAgICAgICAgWW91IGhhdmUgaW5jb3JyZWN0bHkgdHlwZWQgeW91ciBwYXNzd29yZCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuCisgICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IHR5cGVkIHlvdXIgcGFzc3dvcmQgPHhsaWZmOmcgaWQ9Im51bWJlciI+JTEkZDwveGxpZmY6Zz4gdGltZXMuCisgICAgICAgIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4KICAgICA8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImtnX3Rvb19tYW55X2ZhaWxlZF9wYXR0ZXJuX2F0dGVtcHRzX2RpYWxvZ19tZXNzYWdlIj4KLSAgICAgICAgWW91IGhhdmUgaW5jb3JyZWN0bHkgZHJhd24geW91ciB1bmxvY2sgcGF0dGVybiA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuCisgICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTEkZDwveGxpZmY6Zz4gdGltZXMuCisgICAgICAgIFxuXG5UcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTIkZDwveGxpZmY6Zz4gc2Vjb25kcy4KICAgICA8L3N0cmluZz4KIAogICAgIDwhLS0gTWVzc2FnZSBzaG93biB3aGVuIHVzZXIgaXMgYWxtb3N0IGF0IHRoZSBsaW1pdCBvZiBwYXNzd29yZCBhdHRlbXB0cyB3aGVyZSB0aGUgZGV2aWNlIHdpbGwgYmUgd2lwZWQuIFtDSEFSIExJTUlUPW5vbmVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF93aXBlIiBwcm9kdWN0PSJ0YWJsZXQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgQWZ0ZXIgPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAorICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4KKyAgICAgICBBZnRlciA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKICAgICAgICB0aGlzIHRhYmxldCB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuCiAgICAgPC9zdHJpbmc+CiAgICAgPCEtLSBNZXNzYWdlIHNob3duIHdoZW4gdXNlciBpcyBhbG1vc3QgYXQgdGhlIGxpbWl0IG9mIHBhc3N3b3JkIGF0dGVtcHRzIHdoZXJlIHRoZSBkZXZpY2Ugd2lsbCBiZSB3aXBlZC4gW0NIQVIgTElNSVQ9bm9uZV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X3dpcGUiIHByb2R1Y3Q9ImRlZmF1bHQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiB0aW1lcy4KLSAgICAgICBBZnRlciA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsCisgICAgICAgWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Im51bWJlciI+JTEkZDwveGxpZmY6Zz4gdGltZXMuCisgICAgICAgQWZ0ZXIgPHhsaWZmOmcgaWQ9Im51bWJlciI+JTIkZDwveGxpZmY6Zz4gbW9yZSB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMsCiAgICAgICAgdGhpcyBwaG9uZSB3aWxsIGJlIHJlc2V0LCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgaXRzIGRhdGEuCiAgICAgPC9zdHJpbmc+CiAgICAgPCEtLSBNZXNzYWdlIHNob3duIGluIGRpYWxvZyB3aGVuIHVzZXIgaGFzIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGF0dGVtcHRzIGFuZCB0aGUgZGV2aWNlIHdpbGwgbm93IGJlIHdpcGVkIFtDSEFSIExJTUlUPW5vbmVdIC0tPgpAQCAtMjA4LDE0ICsyMDgsMTQgQEAKIAogICAgIDwhLS0gTWVzc2FnZSBzaG93biB3aGVuIHVzZXIgaXMgYWxtb3N0IGF0IHRoZSBsaW1pdCBvZiBwYXNzd29yZCBhdHRlbXB0cyB3aGVyZSB0aGUgdXNlciB3aWxsIGJlIHJlbW92ZWQuIFtDSEFSIExJTUlUPW5vbmVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJ0YWJsZXQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgQWZ0ZXIgPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAorICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4KKyAgICAgICBBZnRlciA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKICAgICAgICB0aGlzIHVzZXIgd2lsbCBiZSByZW1vdmVkLCB3aGljaCB3aWxsIGRlbGV0ZSBhbGwgdXNlciBkYXRhLgogICAgIDwvc3RyaW5nPgogICAgIDwhLS0gTWVzc2FnZSBzaG93biB3aGVuIHVzZXIgaXMgYWxtb3N0IGF0IHRoZSBsaW1pdCBvZiBwYXNzd29yZCBhdHRlbXB0cyB3aGVyZSB0aGUgdXNlciB3aWxsIGJlIHJlbW92ZWQuIFtDSEFSIExJTUlUPW5vbmVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV91c2VyIiBwcm9kdWN0PSJkZWZhdWx0Ij4KLSAgICAgICBZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgQWZ0ZXIgPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAorICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHBob25lIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLgorICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAogICAgICAgIHRoaXMgdXNlciB3aWxsIGJlIHJlbW92ZWQsIHdoaWNoIHdpbGwgZGVsZXRlIGFsbCB1c2VyIGRhdGEuCiAgICAgPC9zdHJpbmc+CiAgICAgPCEtLSBNZXNzYWdlIHNob3duIGluIGRpYWxvZyB3aGVuIHVzZXIgaGFzIGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGF0dGVtcHRzIGFuZCB0aGUgdXNlciB3aWxsIGJlIHJlbW92ZWQuIFtDSEFSIExJTUlUPW5vbmVdIC0tPgpAQCAtMjMxLDE0ICsyMzEsMTQgQEAKIAogICAgIDwhLS0gTWVzc2FnZSBzaG93biB3aGVuIHVzZXIgaXMgYWxtb3N0IGF0IHRoZSBsaW1pdCBvZiBwYXNzd29yZCBhdHRlbXB0cyB3aGVyZSB0aGUgcHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQuIFtDSEFSIExJTUlUPW5vbmVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ia2dfZmFpbGVkX2F0dGVtcHRzX2FsbW9zdF9hdF9lcmFzZV9wcm9maWxlIiBwcm9kdWN0PSJ0YWJsZXQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gdGltZXMuCi0gICAgICAgQWZ0ZXIgPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAorICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGF0dGVtcHRlZCB0byB1bmxvY2sgdGhlIHRhYmxldCA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4KKyAgICAgICBBZnRlciA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKICAgICAgICB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4KICAgICA8L3N0cmluZz4KICAgICA8IS0tIE1lc3NhZ2Ugc2hvd24gd2hlbiB1c2VyIGlzIGFsbW9zdCBhdCB0aGUgbGltaXQgb2YgcGFzc3dvcmQgYXR0ZW1wdHMgd2hlcmUgdGhlIHByb2ZpbGUgd2lsbCBiZSByZW1vdmVkLiBbQ0hBUiBMSU1JVD1ub25lXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfZXJhc2VfcHJvZmlsZSIgcHJvZHVjdD0iZGVmYXVsdCI+Ci0gICAgICAgWW91IGhhdmUgaW5jb3JyZWN0bHkgYXR0ZW1wdGVkIHRvIHVubG9jayB0aGUgcGhvbmUgPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHRpbWVzLgotICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKKyAgICAgICBZb3UgaGF2ZSBpbmNvcnJlY3RseSBhdHRlbXB0ZWQgdG8gdW5sb2NrIHRoZSBwaG9uZSA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMSRkPC94bGlmZjpnPiB0aW1lcy4KKyAgICAgICBBZnRlciA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lMiRkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKICAgICAgICB0aGUgd29yayBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCwgd2hpY2ggd2lsbCBkZWxldGUgYWxsIHByb2ZpbGUgZGF0YS4KICAgICA8L3N0cmluZz4KICAgICA8IS0tIE1lc3NhZ2Ugc2hvd24gaW4gZGlhbG9nIHdoZW4gdXNlciBoYXMgZXhjZWVkZWQgdGhlIG1heGltdW0gYXR0ZW1wdHMgYW5kIHRoZSBwcm9maWxlIHdpbGwgYmUgcmVtb3ZlZC4gW0NIQVIgTElNSVQ9bm9uZV0gLS0+CkBAIC0yNTUsMTggKzI1NSwxOCBAQAogICAgIDwhLS0gTWVzc2FnZSBzaG93biBpbiBkaWFsb2cgd2hlbiB1c2VyIGlzIGFsbW9zdCBhdCB0aGUgbGltaXQgd2hlcmUgdGhleSB3aWxsIGJlCiAgICAgbG9ja2VkIG91dCBhbmQgbWF5IGhhdmUgdG8gZW50ZXIgYW4gYWx0ZXJuYXRlIHVzZXJuYW1lL3Bhc3N3b3JkIHRvIHVubG9jayB0aGUgcGhvbmUgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJrZ19mYWlsZWRfYXR0ZW1wdHNfYWxtb3N0X2F0X2xvZ2luIiBwcm9kdWN0PSJ0YWJsZXQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHRpbWVzLgotICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKKyAgICAgICBZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLgorICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAogICAgICAgIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHRhYmxldCB1c2luZyBhbiBlbWFpbCBhY2NvdW50LlxuXG4KLSAgICAgICBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHNlY29uZHMuCisgICAgICAgVHJ5IGFnYWluIGluIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUzJGQ8L3hsaWZmOmc+IHNlY29uZHMuCiAgICAgPC9zdHJpbmc+CiAgICAgPCEtLSBNZXNzYWdlIHNob3duIGluIGRpYWxvZyB3aGVuIHVzZXIgaXMgYWxtb3N0IGF0IHRoZSBsaW1pdCB3aGVyZSB0aGV5IHdpbGwgYmUKICAgICBsb2NrZWQgb3V0IGFuZCBtYXkgaGF2ZSB0byBlbnRlciBhbiBhbHRlcm5hdGUgdXNlcm5hbWUvcGFzc3dvcmQgdG8gdW5sb2NrIHRoZSBwaG9uZSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImtnX2ZhaWxlZF9hdHRlbXB0c19hbG1vc3RfYXRfbG9naW4iIHByb2R1Y3Q9ImRlZmF1bHQiPgotICAgICAgIFlvdSBoYXZlIGluY29ycmVjdGx5IGRyYXduIHlvdXIgdW5sb2NrIHBhdHRlcm4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IHRpbWVzLgotICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiVkPC94bGlmZjpnPiBtb3JlIHVuc3VjY2Vzc2Z1bCBhdHRlbXB0cywKKyAgICAgICBZb3UgaGF2ZSBpbmNvcnJlY3RseSBkcmF3biB5b3VyIHVubG9jayBwYXR0ZXJuIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUxJGQ8L3hsaWZmOmc+IHRpbWVzLgorICAgICAgIEFmdGVyIDx4bGlmZjpnIGlkPSJudW1iZXIiPiUyJGQ8L3hsaWZmOmc+IG1vcmUgdW5zdWNjZXNzZnVsIGF0dGVtcHRzLAogICAgICAgIHlvdSB3aWxsIGJlIGFza2VkIHRvIHVubG9jayB5b3VyIHBob25lIHVzaW5nIGFuIGVtYWlsIGFjY291bnQuXG5cbgotICAgICAgIFRyeSBhZ2FpbiBpbiA8eGxpZmY6ZyBpZD0ibnVtYmVyIj4lZDwveGxpZmY6Zz4gc2Vjb25kcy4KKyAgICAgICBUcnkgYWdhaW4gaW4gPHhsaWZmOmcgaWQ9Im51bWJlciI+JTMkZDwveGxpZmY6Zz4gc2Vjb25kcy4KICAgICA8L3N0cmluZz4KIAogICAgIDwhLS0gSW5zdHJ1Y3Rpb25zIHRlbGxpbmcgdGhlIHVzZXIgdGhhdCB0aGV5IGVudGVyZWQgdGhlIHdyb25nIFNJTSBQSU4gZm9yIHRoZSBsYXN0IHRpbWUuCkBAIC0zMDgsMzEgKzMwOCwzMSBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWlycGxhbmVfbW9kZSI+QWlycGxhbmUgbW9kZTwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBhdHRlcm4gbmVlZHMgdG8gYmUgc29sdmVkIHNpbmNlIHRoZSBkZXZpY2UgaGFzIGp1c3QgYmVlbiByZXN0YXJ0ZWQuIFtDSEFSIExJTUlUPTgwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fcmVzdGFydF9wYXR0ZXJuIj5QYXR0ZXJuIHJlcXVpcmVkIHdoZW4geW91IHJlc3RhcnQgZGV2aWNlLjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9yZXN0YXJ0X3BhdHRlcm4iPlBhdHRlcm4gcmVxdWlyZWQgYWZ0ZXIgZGV2aWNlIHJlc3RhcnRzPC9zdHJpbmc+CiAKICAgICA8IS0tIEFuIGV4cGxhbmF0aW9uIHRleHQgdGhhdCB0aGUgcGluIG5lZWRzIHRvIGJlIGVudGVyZWQgc2luY2UgdGhlIGRldmljZSBoYXMganVzdCBiZWVuIHJlc3RhcnRlZC4gW0NIQVIgTElNSVQ9ODBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9yZXN0YXJ0X3BpbiI+UElOIHJlcXVpcmVkIHdoZW4geW91IHJlc3RhcnQgZGV2aWNlLjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9yZXN0YXJ0X3BpbiI+UElOIHJlcXVpcmVkIGFmdGVyIGRldmljZSByZXN0YXJ0czwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBhc3N3b3JkIG5lZWRzIHRvIGJlIGVudGVyZWQgc2luY2UgdGhlIGRldmljZSBoYXMganVzdCBiZWVuIHJlc3RhcnRlZC4gW0NIQVIgTElNSVQ9ODBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9yZXN0YXJ0X3Bhc3N3b3JkIj5QYXNzd29yZCByZXF1aXJlZCB3aGVuIHlvdSByZXN0YXJ0IGRldmljZS48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fcmVzdGFydF9wYXNzd29yZCI+UGFzc3dvcmQgcmVxdWlyZWQgYWZ0ZXIgZGV2aWNlIHJlc3RhcnRzPC9zdHJpbmc+CiAKICAgICA8IS0tIEFuIGV4cGxhbmF0aW9uIHRleHQgdGhhdCB0aGUgcGF0dGVybiBuZWVkcyB0byBiZSBzb2x2ZWQgc2luY2UgdGhlIHVzZXIgaGFzbid0IHVzZWQgc3Ryb25nIGF1dGhlbnRpY2F0aW9uIHNpbmNlIHF1aXRlIHNvbWUgdGltZS4gW0NIQVIgTElNSVQ9ODBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl90aW1lb3V0X3BhdHRlcm4iPlBhdHRlcm4gcmVxdWlyZWQgZm9yIGFkZGl0aW9uYWwgc2VjdXJpdHkuPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVvdXRfcGF0dGVybiI+UGF0dGVybiByZXF1aXJlZCBmb3IgYWRkaXRpb25hbCBzZWN1cml0eTwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBpbiBuZWVkcyB0byBiZSBlbnRlcmVkIHNpbmNlIHRoZSB1c2VyIGhhc24ndCB1c2VkIHN0cm9uZyBhdXRoZW50aWNhdGlvbiBzaW5jZSBxdWl0ZSBzb21lIHRpbWUuIFtDSEFSIExJTUlUPTgwXSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fdGltZW91dF9waW4iPlBJTiByZXF1aXJlZCBmb3IgYWRkaXRpb25hbCBzZWN1cml0eS48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fdGltZW91dF9waW4iPlBJTiByZXF1aXJlZCBmb3IgYWRkaXRpb25hbCBzZWN1cml0eTwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBhc3N3b3JkIG5lZWRzIHRvIGJlIGVudGVyZWQgc2luY2UgdGhlIHVzZXIgaGFzbid0IHVzZWQgc3Ryb25nIGF1dGhlbnRpY2F0aW9uIHNpbmNlIHF1aXRlIHNvbWUgdGltZS4gW0NIQVIgTElNSVQ9ODBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl90aW1lb3V0X3Bhc3N3b3JkIj5QYXNzd29yZCByZXF1aXJlZCBmb3IgYWRkaXRpb25hbCBzZWN1cml0eS48L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtnX3Byb21wdF9yZWFzb25fdGltZW91dF9wYXNzd29yZCI+UGFzc3dvcmQgcmVxdWlyZWQgZm9yIGFkZGl0aW9uYWwgc2VjdXJpdHk8L3N0cmluZz4KIAogICAgIDwhLS0gQW4gZXhwbGFuYXRpb24gdGV4dCB0aGF0IHRoZSBwYXR0ZXJuIG5lZWRzIHRvIGJlIHNvbHZlZCBzaW5jZSBwcm9maWxlcyBoYXZlIGp1c3QgYmVlbiBzd2l0Y2hlZC4gW0NIQVIgTElNSVQ9ODBdIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9zd2l0Y2hfcHJvZmlsZXNfcGF0dGVybiI+UGF0dGVybiByZXF1aXJlZCB3aGVuIHlvdSBzd2l0Y2ggcHJvZmlsZXMuPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3N3aXRjaF9wcm9maWxlc19wYXR0ZXJuIj5QYXR0ZXJuIHJlcXVpcmVkIHdoZW4geW91IHN3aXRjaCBwcm9maWxlczwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBpbiBuZWVkcyB0byBiZSBlbnRlcmVkIHNpbmNlIHByb2ZpbGVzIGhhdmUganVzdCBiZWVuIHN3aXRjaGVkLiBbQ0hBUiBMSU1JVD04MF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3N3aXRjaF9wcm9maWxlc19waW4iPlBJTiByZXF1aXJlZCB3aGVuIHlvdSBzd2l0Y2ggcHJvZmlsZXMuPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3N3aXRjaF9wcm9maWxlc19waW4iPlBJTiByZXF1aXJlZCB3aGVuIHlvdSBzd2l0Y2ggcHJvZmlsZXM8L3N0cmluZz4KIAogICAgIDwhLS0gQW4gZXhwbGFuYXRpb24gdGV4dCB0aGF0IHRoZSBwYXNzd29yZCBuZWVkcyB0byBiZSBlbnRlcmVkIHNpbmNlIHByb2ZpbGVzIGhhdmUganVzdCBiZWVuIHN3aXRjaGVkLiBbQ0hBUiBMSU1JVD04MF0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3N3aXRjaF9wcm9maWxlc19wYXNzd29yZCI+UGFzc3dvcmQgcmVxdWlyZWQgd2hlbiB5b3Ugc3dpdGNoIHByb2ZpbGVzLjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2dfcHJvbXB0X3JlYXNvbl9zd2l0Y2hfcHJvZmlsZXNfcGFzc3dvcmQiPlBhc3N3b3JkIHJlcXVpcmVkIHdoZW4geW91IHN3aXRjaCBwcm9maWxlczwvc3RyaW5nPgogCiAgICAgPCEtLSBBbiBleHBsYW5hdGlvbiB0ZXh0IHRoYXQgdGhlIHBhdHRlcm4gbmVlZHMgdG8gYmUgc29sdmVkIHNpbmNlIGl0IGhhc24ndCBiZWVuIHNvbHZlZCBpbiBhIHdoaWxlLiBbQ0hBUiBMSU1JVD04MF0tLT4KICAgICA8cGx1cmFscyBuYW1lPSJrZ19wcm9tcHRfcmVhc29uX3RpbWVfcGF0dGVybiI+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9BbmRyb2lkLm1rIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvQW5kcm9pZC5tawppbmRleCAzYzJmYTM2Li42N2JiZjc4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9BbmRyb2lkLm1rCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL0FuZHJvaWQubWsKQEAgLTYsNiArNiw3IEBACiBMT0NBTF9QQUNLQUdFX05BTUUgOj0gTXRwRG9jdW1lbnRzUHJvdmlkZXIKIExPQ0FMX0NFUlRJRklDQVRFIDo9IG1lZGlhCiBMT0NBTF9QUklWSUxFR0VEX01PRFVMRSA6PSB0cnVlCitMT0NBTF9KTklfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJhcHBmdXNlX2puaQogCiBpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKLWluY2x1ZGUgJChMT0NBTF9QQVRIKS90ZXN0cy9BbmRyb2lkLm1rCitpbmNsdWRlICQoY2FsbCBhbGwtbWFrZWZpbGVzLXVuZGVyLCAkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9qbmkvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ1YjE0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxNSBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9IFwKKyAgICBjb21fYW5kcm9pZF9tdHBfQXBwRnVzZS5jcHAKKworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCisgICAgbGliYW5kcm9pZF9ydW50aW1lIFwKKyAgICBsaWJuYXRpdmVoZWxwZXIgXAorICAgIGxpYmxvZworCitMT0NBTF9DRkxBR1MgKz0gLVdhbGwgLVdlcnJvciAtV3VudXNlZCAtV3VucmVhY2hhYmxlLWNvZGUKK0xPQ0FMX01PRFVMRSA6PSBsaWJhcHBmdXNlX2puaQorCitpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9qbmkvY29tX2FuZHJvaWRfbXRwX0FwcEZ1c2UuY3BwIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL2NvbV9hbmRyb2lkX210cF9BcHBGdXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWZiODVjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvam5pL2NvbV9hbmRyb2lkX210cF9BcHBGdXNlLmNwcApAQCAtMCwwICsxLDQzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJBcHBGdXNlSk5JIgorI2luY2x1ZGUgInV0aWxzL0xvZy5oIgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2Z1c2UuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8bWFwPgorCisjaW5jbHVkZSAiam5pLmgiCisjaW5jbHVkZSAiSk5JSGVscC5oIgorI2luY2x1ZGUgImFuZHJvaWRfcnVudGltZS9BbmRyb2lkUnVudGltZS5oIgorI2luY2x1ZGUgIm5hdGl2ZWhlbHBlci9TY29wZWRQcmltaXRpdmVBcnJheS5oIgorCituYW1lc3BhY2UgeworCisvLyBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byB3cml0ZSBpbiBvbmUgcmVxdWVzdC4KK2NvbnN0ZXhwciBzaXplX3QgTUFYX1dSSVRFID0gMjU2ICogMTAyNDsKK2NvbnN0ZXhwciBzaXplX3QgTlVNX01BWF9IQU5ETEVTID0gMTAyNDsKKworLy8gTGFyZ2VzdCBwb3NzaWJsZSByZXF1ZXN0LgorLy8gVGhlIHJlcXVlc3Qgc2l6ZSBpcyBib3VuZGVkIGJ5IHRoZSBtYXhpbXVtIHNpemUgb2YgYSBGVVNFX1dSSVRFIHJlcXVlc3QKKy8vIGJlY2F1c2UgaXQgaGFzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGRhdGEgcGF5bG9hZC4KK2NvbnN0ZXhwciBzaXplX3QgTUFYX1JFUVVFU1RfU0laRSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIpICsKKyAgICAgICAgc2l6ZW9mKHN0cnVjdCBmdXNlX3dyaXRlX2luKSArIE1BWF9XUklURTsKKworc3RhdGljIGpjbGFzcyBhcHBfZnVzZV9jbGFzczsKK3N0YXRpYyBqbWV0aG9kSUQgYXBwX2Z1c2VfZ2V0X2ZpbGVfc2l6ZTsKK3N0YXRpYyBqbWV0aG9kSUQgYXBwX2Z1c2VfZ2V0X29iamVjdF9ieXRlczsKKworc3RydWN0IEZ1c2VSZXF1ZXN0IHsKKyAgICBjaGFyIGJ1ZmZlcltNQVhfUkVRVUVTVF9TSVpFXTsKKyAgICBGdXNlUmVxdWVzdCgpIHt9CisgICAgY29uc3Qgc3RydWN0IGZ1c2VfaW5faGVhZGVyJiBoZWFkZXIoKSBjb25zdCB7CisgICAgICAgIHJldHVybiAqKGNvbnN0IHN0cnVjdCBmdXNlX2luX2hlYWRlciopIGJ1ZmZlcjsKKyAgICB9CisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIChidWZmZXIgKyBzaXplb2Yoc3RydWN0IGZ1c2VfaW5faGVhZGVyKSk7CisgICAgfQorICAgIHNpemVfdCBkYXRhX2xlbmd0aCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGhlYWRlcigpLmxlbiAtIHNpemVvZihzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIpOworICAgIH0KK307CisKK2NsYXNzIFNjb3BlZEZkIHsKKyAgICBpbnQgbUZkOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgU2NvcGVkRmQoaW50IGZkKSA6IG1GZChmZCkge30KKyAgICB+U2NvcGVkRmQoKSB7CisgICAgICAgIGNsb3NlKG1GZCk7CisgICAgfQorICAgIG9wZXJhdG9yIGludCgpIHsKKyAgICAgICAgcmV0dXJuIG1GZDsKKyAgICB9Cit9OworCisvKioKKyAqIFRoZSBjbGFzcyBpcyB1c2VkIHRvIGFjY2VzcyBBcHBGdXNlIGNsYXNzIGluIEphdmEgZnJvbSBmdXNlIGhhbmRsZXJzLgorICovCitjbGFzcyBBcHBGdXNlIHsKKyAgICBKTklFbnYqIGVudl87CisgICAgam9iamVjdCBzZWxmXzsKKworICAgIC8vIE1hcCBiZXR3ZWVuIGZpbGUgaGFuZGxlIGFuZCBpbm9kZS4KKyAgICBzdGQ6Om1hcDx1aW50MzJfdCwgdWludDY0X3Q+IGhhbmRsZXNfOworICAgIHVpbnQzMl90IGhhbmRsZV9jb3VudGVyXzsKKworcHVibGljOgorICAgIEFwcEZ1c2UoSk5JRW52KiBlbnYsIGpvYmplY3Qgc2VsZikgOgorICAgICAgICBlbnZfKGVudiksIHNlbGZfKHNlbGYpLCBoYW5kbGVfY291bnRlcl8oMCkge30KKworICAgIGJvb2wgaGFuZGxlX2Z1c2VfcmVxdWVzdChpbnQgZmQsIGNvbnN0IEZ1c2VSZXF1ZXN0JiByZXEpIHsKKyAgICAgICAgQUxPR1YoIlJlcXVlc3Qgb3A9JWQiLCByZXEuaGVhZGVyKCkub3Bjb2RlKTsKKyAgICAgICAgc3dpdGNoIChyZXEuaGVhZGVyKCkub3Bjb2RlKSB7CisgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgbW9yZSBvcGVyYXRpb25zIHRoYXQgYXJlIGVub3VnaCB0byBwcm92aWRlIHNlZWthYmxlCisgICAgICAgICAgICAvLyBGRC4KKyAgICAgICAgICAgIGNhc2UgRlVTRV9MT09LVVA6CisgICAgICAgICAgICAgICAgaW52b2tlX2hhbmRsZXIoZmQsIHJlcSwgJkFwcEZ1c2U6OmhhbmRsZV9mdXNlX2xvb2t1cCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEZVU0VfSU5JVDoKKyAgICAgICAgICAgICAgICBpbnZva2VfaGFuZGxlcihmZCwgcmVxLCAmQXBwRnVzZTo6aGFuZGxlX2Z1c2VfaW5pdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEZVU0VfR0VUQVRUUjoKKyAgICAgICAgICAgICAgICBpbnZva2VfaGFuZGxlcihmZCwgcmVxLCAmQXBwRnVzZTo6aGFuZGxlX2Z1c2VfZ2V0YXR0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEZVU0VfRk9SR0VUOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRlVTRV9PUEVOOgorICAgICAgICAgICAgICAgIGludm9rZV9oYW5kbGVyKGZkLCByZXEsICZBcHBGdXNlOjpoYW5kbGVfZnVzZV9vcGVuKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgRlVTRV9SRUFEOgorICAgICAgICAgICAgICAgIGludm9rZV9oYW5kbGVyKGZkLCByZXEsICZBcHBGdXNlOjpoYW5kbGVfZnVzZV9yZWFkLCA4MTkyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgRlVTRV9SRUxFQVNFOgorICAgICAgICAgICAgICAgIGludm9rZV9oYW5kbGVyKGZkLCByZXEsICZBcHBGdXNlOjpoYW5kbGVfZnVzZV9yZWxlYXNlLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgRlVTRV9GTFVTSDoKKyAgICAgICAgICAgICAgICBpbnZva2VfaGFuZGxlcihmZCwgcmVxLCAmQXBwRnVzZTo6aGFuZGxlX2Z1c2VfZmx1c2gsIDApOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIEFMT0dWKCJOT1RJTVBMIG9wPSVkIHVuaXE9JSIgUFJJeDY0ICIgbmlkPSUiIFBSSXg2NCAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHJlcS5oZWFkZXIoKS5vcGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgcmVxLmhlYWRlcigpLnVuaXF1ZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXEuaGVhZGVyKCkubm9kZWlkKTsKKyAgICAgICAgICAgICAgICBmdXNlX3JlcGx5KGZkLCByZXEuaGVhZGVyKCkudW5pcXVlLCAtRU5PU1lTLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQgaGFuZGxlX2Z1c2VfbG9va3VwKGNvbnN0IGZ1c2VfaW5faGVhZGVyJiBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVzZV9lbnRyeV9vdXQqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KiAvKnVudXNlZCovKSB7CisgICAgICAgIGlmIChoZWFkZXIubm9kZWlkICE9IDEpIHsKKyAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgaW50IG4gPSBhdG9pKG5hbWUpOworICAgICAgICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgICAgICAgfQorCisgICAgICAgIGludDY0X3Qgc2l6ZSA9IGdldF9maWxlX3NpemUobik7CisgICAgICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgIH0KKworICAgICAgICBvdXQtPm5vZGVpZCA9IG47CisgICAgICAgIG91dC0+YXR0cl92YWxpZCA9IDEwOworICAgICAgICBvdXQtPmVudHJ5X3ZhbGlkID0gMTA7CisgICAgICAgIG91dC0+YXR0ci5pbm8gPSBuOworICAgICAgICBvdXQtPmF0dHIubW9kZSA9IFNfSUZSRUcgfCAwNzc3OworICAgICAgICBvdXQtPmF0dHIuc2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludCBoYW5kbGVfZnVzZV9pbml0KGNvbnN0IGZ1c2VfaW5faGVhZGVyJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdXNlX2luaXRfaW4qIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfaW5pdF9vdXQqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogcmVwbHlfc2l6ZSkgeworICAgICAgICAvLyBLZXJuZWwgMi42LjE2IGlzIHRoZSBmaXJzdCBzdGFibGUga2VybmVsIHdpdGggc3RydWN0IGZ1c2VfaW5pdF9vdXQKKyAgICAgICAgLy8gZGVmaW5lZCAoZnVzZSB2ZXJzaW9uIDcuNikuIFRoZSBzdHJ1Y3R1cmUgaXMgdGhlIHNhbWUgZnJvbSA3LjYgdGhyb3VnaAorICAgICAgICAvLyA3LjIyLiBCZWdpbm5pbmcgd2l0aCA3LjIzLCB0aGUgc3RydWN0dXJlIGluY3JlYXNlZCBpbiBzaXplIGFuZCBhZGRlZAorICAgICAgICAvLyBuZXcgcGFyYW1ldGVycy4KKyAgICAgICAgaWYgKGluLT5tYWpvciAhPSBGVVNFX0tFUk5FTF9WRVJTSU9OIHx8IGluLT5taW5vciA8IDYpIHsKKyAgICAgICAgICAgIEFMT0dFKCJGdXNlIGtlcm5lbCB2ZXJzaW9uIG1pc21hdGNoOiBLZXJuZWwgdmVyc2lvbiAlZC4lZCwgIgorICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGF0IGxlYXN0ICVkLjYiLAorICAgICAgICAgICAgICAgICAgaW4tPm1ham9yLCBpbi0+bWlub3IsIEZVU0VfS0VSTkVMX1ZFUlNJT04pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgbGltaXQgb3Vyc2VsdmVzIHRvIDE1IGJlY2F1c2Ugd2UgZG9uJ3QgaGFuZGxlIEJBVENIX0ZPUkdFVCB5ZXQKKyAgICAgICAgb3V0LT5taW5vciA9IHN0ZDo6bWluKGluLT5taW5vciwgMTV1KTsKKyNpZiBkZWZpbmVkKEZVU0VfQ09NUEFUXzIyX0lOSVRfT1VUX1NJWkUpCisgICAgICAgIC8vIEZVU0VfS0VSTkVMX1ZFUlNJT04gPj0gMjMuCisKKyAgICAgICAgLy8gSWYgdGhlIGtlcm5lbCBvbmx5IHdvcmtzIG9uIG1pbm9yIHJldnMgb2xkZXIgdGhhbiBvciBlcXVhbCB0byAyMiwKKyAgICAgICAgLy8gdGhlbiB1c2UgdGhlIG9sZGVyIHN0cnVjdHVyZSBzaXplIHNpbmNlIHRoaXMgY29kZSBvbmx5IHVzZXMgdGhlIDcuMjIKKyAgICAgICAgLy8gdmVyc2lvbiBvZiB0aGUgc3RydWN0dXJlLgorICAgICAgICBpZiAoaW4tPm1pbm9yIDw9IDIyKSB7CisgICAgICAgICAgICAqcmVwbHlfc2l6ZSA9IEZVU0VfQ09NUEFUXzIyX0lOSVRfT1VUX1NJWkU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIC8vIERvbid0IGRyb3AgdGhpcyBsaW5lIHRvIHByZXZlbnQgYW4gJ3VudXNlZCcgY29tcGlsZSBlcnJvci4KKyAgICAgICAgKnJlcGx5X3NpemUgPSBzaXplb2YoZnVzZV9pbml0X291dCk7CisjZW5kaWYKKworICAgICAgICBvdXQtPm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjsKKyAgICAgICAgb3V0LT5tYXhfcmVhZGFoZWFkID0gaW4tPm1heF9yZWFkYWhlYWQ7CisgICAgICAgIG91dC0+ZmxhZ3MgPSBGVVNFX0FUT01JQ19PX1RSVU5DIHwgRlVTRV9CSUdfV1JJVEVTOworICAgICAgICBvdXQtPm1heF9iYWNrZ3JvdW5kID0gMzI7CisgICAgICAgIG91dC0+Y29uZ2VzdGlvbl90aHJlc2hvbGQgPSAzMjsKKyAgICAgICAgb3V0LT5tYXhfd3JpdGUgPSBNQVhfV1JJVEU7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGhhbmRsZV9mdXNlX2dldGF0dHIoY29uc3QgZnVzZV9pbl9oZWFkZXImIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdXNlX2dldGF0dHJfaW4qIC8qIGluICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2VfYXR0cl9vdXQqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogLyp1bnVzZWQqLykgeworICAgICAgICBpZiAoaGVhZGVyLm5vZGVpZCAhPSAxKSB7CisgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKKyAgICAgICAgfQorICAgICAgICBvdXQtPmF0dHJfdmFsaWQgPSAxMDAwICogNjAgKiAxMDsKKyAgICAgICAgb3V0LT5hdHRyLmlubyA9IGhlYWRlci5ub2RlaWQ7CisgICAgICAgIG91dC0+YXR0ci5tb2RlID0gU19JRkRJUiB8IDA3Nzc7CisgICAgICAgIG91dC0+YXR0ci5zaXplID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGhhbmRsZV9mdXNlX29wZW4oY29uc3QgZnVzZV9pbl9oZWFkZXImIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdXNlX29wZW5faW4qIC8qIGluICovLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1c2Vfb3Blbl9vdXQqIG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogLyp1bnVzZWQqLykgeworICAgICAgICBpZiAoaGFuZGxlc18uc2l6ZSgpID49IE5VTV9NQVhfSEFORExFUykgeworICAgICAgICAgICAgLy8gVG9vIG1hbnkgb3BlbiBmaWxlcy4KKyAgICAgICAgICAgIHJldHVybiAtRU1GSUxFOworICAgICAgICB9CisgICAgICAgIHVpbnQzMl90IGhhbmRsZTsKKyAgICAgICAgZG8geworICAgICAgICAgICBoYW5kbGUgPSBoYW5kbGVfY291bnRlcl8rKzsKKyAgICAgICAgfSB3aGlsZSAoaGFuZGxlc18uY291bnQoaGFuZGxlKSAhPSAwKTsKKworICAgICAgICBoYW5kbGVzXy5pbnNlcnQoc3RkOjptYWtlX3BhaXIoaGFuZGxlLCBoZWFkZXIubm9kZWlkKSk7CisgICAgICAgIG91dC0+ZmggPSBoYW5kbGU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGludCBoYW5kbGVfZnVzZV9yZWFkKGNvbnN0IGZ1c2VfaW5faGVhZGVyJiAvKiBoZWFkZXIgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVzZV9yZWFkX2luKiBpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIHJlcGx5X3NpemUpIHsKKyAgICAgICAgY29uc3Qgc3RkOjptYXA8dWludDMyX3QsIHVpbnQ2NF90Pjo6aXRlcmF0b3IgaXQgPSBoYW5kbGVzXy5maW5kKGluLT5maCk7CisgICAgICAgIGlmIChpdCA9PSBoYW5kbGVzXy5lbmQoKSkgeworICAgICAgICAgICAgcmV0dXJuIC1FQkFERjsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBpbnQ2NF90IHJlc3VsdCA9IGdldF9vYmplY3RfYnl0ZXMoCisgICAgICAgICAgICAgICAgaXQtPnNlY29uZCwKKyAgICAgICAgICAgICAgICBpbi0+b2Zmc2V0LAorICAgICAgICAgICAgICAgIGluLT5zaXplLAorICAgICAgICAgICAgICAgIG91dCk7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLUVJTzsKKyAgICAgICAgfQorICAgICAgICAqcmVwbHlfc2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGhhbmRsZV9mdXNlX3JlbGVhc2UoY29uc3QgZnVzZV9pbl9oZWFkZXImIC8qIGhlYWRlciAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmdXNlX3JlbGVhc2VfaW4qIGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIC8qIG91dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCogLyogcmVwbHlfc2l6ZSAqLykgeworICAgICAgICBoYW5kbGVzXy5lcmFzZShpbi0+ZmgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgaGFuZGxlX2Z1c2VfZmx1c2goY29uc3QgZnVzZV9pbl9oZWFkZXImIC8qIGhlYWRlciAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogLyogaW4gKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIC8qIG91dCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QqIC8qIHJlcGx5X3NpemUgKi8pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFM+CisgICAgdm9pZCBpbnZva2VfaGFuZGxlcihpbnQgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGdXNlUmVxdWVzdCYgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAoQXBwRnVzZTo6KmhhbmRsZXIpKGNvbnN0IGZ1c2VfaW5faGVhZGVyJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCopLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVwbHlfc2l6ZSA9IHNpemVvZihTKSkgeworICAgICAgICBjaGFyIHJlcGx5X2RhdGFbcmVwbHlfc2l6ZV07CisgICAgICAgIG1lbXNldChyZXBseV9kYXRhLCAwLCByZXBseV9zaXplKTsKKyAgICAgICAgY29uc3QgaW50IHJlcGx5X2NvZGUgPSAodGhpcy0+KmhhbmRsZXIpKAorICAgICAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVyKCksCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KHJlcXVlc3QuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PFMqPihyZXBseV9kYXRhKSwKKyAgICAgICAgICAgICAgICAmcmVwbHlfc2l6ZSk7CisgICAgICAgIGZ1c2VfcmVwbHkoCisgICAgICAgICAgICAgICAgZmQsCisgICAgICAgICAgICAgICAgcmVxdWVzdC5oZWFkZXIoKS51bmlxdWUsCisgICAgICAgICAgICAgICAgcmVwbHlfY29kZSwKKyAgICAgICAgICAgICAgICByZXBseV9kYXRhLAorICAgICAgICAgICAgICAgIHJlcGx5X3NpemUpOworICAgIH0KKworICAgIGludDY0X3QgZ2V0X2ZpbGVfc2l6ZShpbnQgaW5vZGUpIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDY0X3Q+KGVudl8tPkNhbGxMb25nTWV0aG9kKAorICAgICAgICAgICAgICAgIHNlbGZfLAorICAgICAgICAgICAgICAgIGFwcF9mdXNlX2dldF9maWxlX3NpemUsCisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihpbm9kZSkpKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IGdldF9vYmplY3RfYnl0ZXMoCisgICAgICAgICAgICBpbnQgaW5vZGUsCisgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsCisgICAgICAgICAgICB1aW50MzJfdCBzaXplLAorICAgICAgICAgICAgdm9pZCogYnVmKSB7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IHJlYWRfc2l6ZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc2l6ZSksCisgICAgICAgICAgICAgICAgZ2V0X2ZpbGVfc2l6ZShpbm9kZSkgLSBvZmZzZXQpKTsKKyAgICAgICAgY29uc3QgamJ5dGVBcnJheSBhcnJheSA9IChqYnl0ZUFycmF5KSBlbnZfLT5DYWxsT2JqZWN0TWV0aG9kKAorICAgICAgICAgICAgICAgIHNlbGZfLAorICAgICAgICAgICAgICAgIGFwcF9mdXNlX2dldF9vYmplY3RfYnl0ZXMsCisgICAgICAgICAgICAgICAgaW5vZGUsCisgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHJlYWRfc2l6ZSk7CisgICAgICAgIGlmIChhcnJheSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgU2NvcGVkQnl0ZUFycmF5Uk8gYnl0ZXMoZW52XywgYXJyYXkpOworICAgICAgICBpZiAoYnl0ZXMuc2l6ZSgpICE9IHJlYWRfc2l6ZSB8fCBieXRlcy5nZXQoKSA9PSBudWxscHRyKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkoYnVmLCBieXRlcy5nZXQoKSwgcmVhZF9zaXplKTsKKyAgICAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmdXNlX3JlcGx5KGludCBmZCwgaW50IHVuaXF1ZSwgaW50IHJlcGx5X2NvZGUsIHZvaWQqIHJlcGx5X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVwbHlfc2l6ZSkgeworICAgICAgICAvLyBEb24ndCBzZW5kIGFueSBkYXRhIGZvciBlcnJvciBjYXNlLgorICAgICAgICBpZiAocmVwbHlfY29kZSAhPSAwKSB7CisgICAgICAgICAgICByZXBseV9zaXplID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0cnVjdCBmdXNlX291dF9oZWFkZXIgaGRyOworICAgICAgICBoZHIubGVuID0gcmVwbHlfc2l6ZSArIHNpemVvZihoZHIpOworICAgICAgICBoZHIuZXJyb3IgPSByZXBseV9jb2RlOworICAgICAgICBoZHIudW5pcXVlID0gdW5pcXVlOworCisgICAgICAgIHN0cnVjdCBpb3ZlYyB2ZWNbMl07CisgICAgICAgIHZlY1swXS5pb3ZfYmFzZSA9ICZoZHI7CisgICAgICAgIHZlY1swXS5pb3ZfbGVuID0gc2l6ZW9mKGhkcik7CisgICAgICAgIHZlY1sxXS5pb3ZfYmFzZSA9IHJlcGx5X2RhdGE7CisgICAgICAgIHZlY1sxXS5pb3ZfbGVuID0gcmVwbHlfc2l6ZTsKKworICAgICAgICBjb25zdCBpbnQgcmVzID0gd3JpdGV2KGZkLCB2ZWMsIHJlcGx5X3NpemUgIT0gMCA/IDIgOiAxKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIEFMT0dFKCIqKiogUkVQTFkgRkFJTEVEICoqKiAlZFxuIiwgZXJybm8pOworICAgICAgICB9CisgICAgfQorfTsKKworamJvb2xlYW4gY29tX2FuZHJvaWRfbXRwX0FwcEZ1c2Vfc3RhcnRfYXBwX2Z1c2VfbG9vcCgKKyAgICAgICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgc2VsZiwgamludCBqZmQpIHsKKyAgICBTY29wZWRGZCBmZChkdXAoc3RhdGljX2Nhc3Q8aW50PihqZmQpKSk7CisgICAgQXBwRnVzZSBhcHBmdXNlKGVudiwgc2VsZik7CisKKyAgICBBTE9HRCgiU3RhcnQgZnVzZSBsb29wLiIpOworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIEZ1c2VSZXF1ZXN0IHJlcXVlc3Q7CisKKyAgICAgICAgY29uc3Qgc3NpemVfdCByZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkoCisgICAgICAgICAgICAgICAgcmVhZChmZCwgcmVxdWVzdC5idWZmZXIsIHNpemVvZihyZXF1ZXN0LmJ1ZmZlcikpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9ERVYpIHsKKyAgICAgICAgICAgICAgICBBTE9HRSgiU29tZW9uZSBzdG9sZSBvdXIgbWFyYmxlcyFcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBKTklfRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBTE9HRSgiRmFpbGVkIHRvIHJlYWQgYnl0ZXMgZnJvbSBGRDogZXJybm89JWRcbiIsIGVycm5vKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0PHNpemVfdD4ocmVzdWx0KTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgZnVzZV9pbl9oZWFkZXIpKSB7CisgICAgICAgICAgICBBTE9HRSgicmVxdWVzdCB0b28gc2hvcnQ6IGxlbj0lenVcbiIsIGxlbmd0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcigpLmxlbiAhPSBsZW5ndGgpIHsKKyAgICAgICAgICAgIEFMT0dFKCJtYWxmb3JtZWQgaGVhZGVyOiBsZW49JXp1LCBoZHItPmxlbj0ldVxuIiwKKyAgICAgICAgICAgICAgICAgIGxlbmd0aCwgcmVxdWVzdC5oZWFkZXIoKS5sZW4pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWFwcGZ1c2UuaGFuZGxlX2Z1c2VfcmVxdWVzdChmZCwgcmVxdWVzdCkpIHsKKyAgICAgICAgICAgIHJldHVybiBKTklfVFJVRTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGNvbnN0IEpOSU5hdGl2ZU1ldGhvZCBnTWV0aG9kc1tdID0geworICAgIHsKKyAgICAgICAgIm5hdGl2ZV9zdGFydF9hcHBfZnVzZV9sb29wIiwKKyAgICAgICAgIihJKVoiLAorICAgICAgICAodm9pZCAqKSBjb21fYW5kcm9pZF9tdHBfQXBwRnVzZV9zdGFydF9hcHBfZnVzZV9sb29wCisgICAgfQorfTsKKworfQorCitqaW50IEpOSV9PbkxvYWQoSmF2YVZNKiB2bSwgdm9pZCogLyogcmVzZXJ2ZWQgKi8pIHsKKyAgICBKTklFbnYqIGVudiA9IG51bGxwdHI7CisgICAgaWYgKHZtLT5HZXRFbnYoKHZvaWQqKikgJmVudiwgSk5JX1ZFUlNJT05fMV80KSAhPSBKTklfT0spIHsKKyAgICAgICAgQUxPR0UoIkVSUk9SOiBHZXRFbnYgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgfQorICAgIGFzc2VydChlbnYgIT0gbnVsbHB0cik7CisKKyAgICBqY2xhc3MgY2xhenogPSBlbnYtPkZpbmRDbGFzcygiY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2UiKTsKKyAgICBpZiAoY2xhenogPT0gbnVsbHB0cikgeworICAgICAgICBBTE9HRSgiQ2FuJ3QgZmluZCBjb20vYW5kcm9pZC9tdHAvQXBwRnVzZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYXBwX2Z1c2VfY2xhc3MgPSBzdGF0aWNfY2FzdDxqY2xhc3M+KGVudi0+TmV3R2xvYmFsUmVmKGNsYXp6KSk7CisgICAgaWYgKGFwcF9mdXNlX2NsYXNzID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIkNhbid0IG9idGFpbiBnbG9iYWwgcmVmZXJlbmNlIGZvciBjb20vYW5kcm9pZC9tdHAvQXBwRnVzZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgYXBwX2Z1c2VfZ2V0X2ZpbGVfc2l6ZSA9IGVudi0+R2V0TWV0aG9kSUQoCisgICAgICAgICAgICBhcHBfZnVzZV9jbGFzcywgImdldEZpbGVTaXplIiwgIihJKUoiKTsKKyAgICBpZiAoYXBwX2Z1c2VfZ2V0X2ZpbGVfc2l6ZSA9PSBudWxscHRyKSB7CisgICAgICAgIEFMT0dFKCJDYW4ndCBmaW5kIGdldEZpbGVTaXplIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBhcHBfZnVzZV9nZXRfb2JqZWN0X2J5dGVzID0gZW52LT5HZXRNZXRob2RJRCgKKyAgICAgICAgICAgIGFwcF9mdXNlX2NsYXNzLCAiZ2V0T2JqZWN0Qnl0ZXMiLCAiKElKSSlbQiIpOworICAgIGlmIChhcHBfZnVzZV9nZXRfb2JqZWN0X2J5dGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgQUxPR0UoIkNhbid0IGZpbmQgZ2V0T2JqZWN0Qnl0ZXMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNvbnN0IGludCByZXN1bHQgPSBhbmRyb2lkOjpBbmRyb2lkUnVudGltZTo6cmVnaXN0ZXJOYXRpdmVNZXRob2RzKAorICAgICAgICAgICAgZW52LCAiY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2UiLCBnTWV0aG9kcywgTkVMRU0oZ01ldGhvZHMpKTsKKyAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIEpOSV9WRVJTSU9OXzFfNDsKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZS5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9BcHBGdXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZmZDdjZgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvQXBwRnVzZS5qYXZhCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5tdHA7CisKK2ltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLnN0b3JhZ2UuU3RvcmFnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZzsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiBUT0RPOiBSZW1vdmUgVmlzaWJsZUZvclRlc3RpbmcgY2xhc3MuCisgKi8KK0BWaXNpYmxlRm9yVGVzdGluZworcHVibGljIGNsYXNzIEFwcEZ1c2UgeworICAgIHN0YXRpYyB7CisgICAgICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiYXBwZnVzZV9qbmkiKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtTmFtZTsKKyAgICBwcml2YXRlIGZpbmFsIENhbGxiYWNrIG1DYWxsYmFjazsKKyAgICBwcml2YXRlIGZpbmFsIFRocmVhZCBtTWVzc2FnZVRocmVhZDsKKyAgICBwcml2YXRlIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG1EZXZpY2VGZDsKKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIEFwcEZ1c2UoU3RyaW5nIG5hbWUsIENhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIG1OYW1lID0gbmFtZTsKKyAgICAgICAgbUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgIG1NZXNzYWdlVGhyZWFkID0gbmV3IFRocmVhZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBuYXRpdmVfc3RhcnRfYXBwX2Z1c2VfbG9vcChtRGV2aWNlRmQuZ2V0RmQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHZvaWQgbW91bnQoU3RvcmFnZU1hbmFnZXIgc3RvcmFnZU1hbmFnZXIpIHsKKyAgICAgICAgbURldmljZUZkID0gc3RvcmFnZU1hbmFnZXIubW91bnRBcHBGdXNlKG1OYW1lKTsKKyAgICAgICAgbU1lc3NhZ2VUaHJlYWQuc3RhcnQoKTsKKyAgICB9CisKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICB2b2lkIGNsb3NlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gUmVtb3RlIHNpZGUgb2YgUGFyY2VsRmlsZURlc2NyaXB0b3IgaXMgdHJhY2tpbmcgdGhlIGNsb3NlIG9mIG1EZXZpY2VGZCwgYW5kIHVubW91bnQKKyAgICAgICAgICAgIC8vIHRoZSBjb3JyZXNwb25kaW5nIGZ1c2UgZmlsZSBzeXN0ZW0uIFRoZSBtTWVzc2FnZVRocmVhZCB3aWxsIHJlY2VpdmUgRlVTRV9GT1JHRVQsIGFuZAorICAgICAgICAgICAgLy8gdGhlbiB0ZXJtaW5hdGUgaXRzZWxmLgorICAgICAgICAgICAgbURldmljZUZkLmNsb3NlKCk7CisgICAgICAgICAgICBtTWVzc2FnZVRocmVhZC5qb2luKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4cCkgeworICAgICAgICAgICAgTG9nLmUoTXRwRG9jdW1lbnRzUHJvdmlkZXIuVEFHLCAiRmFpbGVkIHRvIGNsb3NlIGRldmljZSBGRC4iLCBleHApOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgIExvZy5lKE10cERvY3VtZW50c1Byb3ZpZGVyLlRBRywgIkZhaWxlZCB0byB0ZXJtaW5hdGUgbWVzc2FnZSB0aHJlYWQuIiwgZXhwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBpCisgICAgICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24KKyAgICAgKi8KKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBwdWJsaWMgUGFyY2VsRmlsZURlc2NyaXB0b3Igb3BlbkZpbGUoaW50IGkpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICByZXR1cm4gUGFyY2VsRmlsZURlc2NyaXB0b3Iub3BlbihuZXcgRmlsZSgKKyAgICAgICAgICAgICAgICBnZXRNb3VudFBvaW50KCksCisgICAgICAgICAgICAgICAgSW50ZWdlci50b1N0cmluZyhpKSksCisgICAgICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9SRUFEX09OTFkpOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIEZpbGUgZ2V0TW91bnRQb2ludCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlKCIvbW50L2FwcGZ1c2UvIiArIFByb2Nlc3MubXlVaWQoKSArICJfIiArIG1OYW1lKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50ZXJmYWNlIENhbGxiYWNrIHsKKyAgICAgICAgbG9uZyBnZXRGaWxlU2l6ZShpbnQgaW5vZGUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb247CisgICAgICAgIGJ5dGVbXSBnZXRPYmplY3RCeXRlcyhpbnQgaW5vZGUsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSkgdGhyb3dzIElPRXhjZXB0aW9uOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIHByaXZhdGUgbG9uZyBnZXRGaWxlU2l6ZShpbnQgaW5vZGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtQ2FsbGJhY2suZ2V0RmlsZVNpemUoaW5vZGUpOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBwcml2YXRlIGJ5dGVbXSBnZXRPYmplY3RCeXRlcyhpbnQgaW5vZGUsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1DYWxsYmFjay5nZXRPYmplY3RCeXRlcyhpbm9kZSwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZV9zdGFydF9hcHBfZnVzZV9sb29wKGludCBmZCk7Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL0RvY3VtZW50TG9hZGVyLmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL0RvY3VtZW50TG9hZGVyLmphdmEKaW5kZXggNmZhMGRmMi4uMWQ3MjY0NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9Eb2N1bWVudExvYWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvRG9jdW1lbnRMb2FkZXIuamF2YQpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1OdW1Mb2FkZWQgPT0gMCkgewotICAgICAgICAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0NoaWxkRG9jdW1lbnRzKG1JZGVudGlmaWVyLm1Eb2N1bWVudElkKTsKKyAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMobUlkZW50aWZpZXIubURvY3VtZW50SWQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Q2hpbGREb2N1bWVudHMoCkBAIC0yNjYsNyArMjY2LDcgQEAKICAgICAgICAgICAgICAgICBtTnVtTG9hZGVkID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChnZXRTdGF0ZSgpICE9IFNUQVRFX0xPQURJTkcpIHsKLSAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKG1JZGVudGlmaWVyLm1Eb2N1bWVudElkKTsKKyAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cyhtSWRlbnRpZmllci5tRG9jdW1lbnRJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgICAgICBtRXJyb3IgPSBtZXNzYWdlOwogICAgICAgICAgICAgbU51bUxvYWRlZCA9IDA7CiAgICAgICAgICAgICBpZiAobGFzdFN0YXRlID09IFNUQVRFX0xPQURJTkcpIHsKLSAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKG1JZGVudGlmaWVyLm1Eb2N1bWVudElkKTsKKyAgICAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cyhtSWRlbnRpZmllci5tRG9jdW1lbnRJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NYXBwZXIuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTWFwcGVyLmphdmEKaW5kZXggMGQ5ZDYwYy4uYWM0NzA2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NYXBwZXIuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL01hcHBlci5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiAKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQubXRwLk10cERhdGFiYXNlQ29uc3RhbnRzLio7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CkBAIC0zNiwxNyArMzcsMTggQEAKIAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5tdHAuTXRwRGF0YWJhc2Uuc3RyaW5nczsKIAotCiAvKioKICAqIE1hcHBpbmcgb3BlcmF0aW9ucyBmb3IgTXRwRGF0YWJhc2UuCiAgKiBBbHNvIHNlZSB0aGUgY29tbWVudHMgb2Yge0BsaW5rIE10cERhdGFiYXNlfS4KICAqLwogY2xhc3MgTWFwcGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BUkdTID0gbmV3IFN0cmluZ1swXTsKICAgICBwcml2YXRlIGZpbmFsIE10cERhdGFiYXNlIG1EYXRhYmFzZTsKIAogICAgIC8qKgotICAgICAqIE1hcHBpbmcgbW9kZSBmb3Igcm9vdHMvZG9jdW1lbnRzIHdoZXJlIHdlIHN0YXJ0IGFkZGluZyBjaGlsZCBkb2N1bWVudHMuCisgICAgICogTWFwcGluZyBtb2RlIGZvciBhIHBhcmVudC4gVGhlIGtleSBpcyBkb2N1bWVudCBJRCBvZiBwYXJlbnQsIG9yIG51bGwgZm9yIHJvb3QgZG9jdW1lbnRzLgogICAgICAqIE1ldGhvZHMgb3BlcmF0ZSB0aGUgc3RhdGUgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkLgorICAgICAqIFRPRE86IFJlcGxhY2UgdGhpcyB3aXRoIHVuYm94aW5nIGludCBtYXAuCiAgICAgICovCiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBJbnRlZ2VyPiBtTWFwcGluZ01vZGUgPSBuZXcgSGFzaE1hcDw+KCk7CiAKQEAgLTU1LDQ3ICs1Nyw0OSBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEludm9rZXMge0BsaW5rICNzdGFydEFkZGluZ0RvY3VtZW50c30gZm9yIHJvb3QgZG9jdW1lbnRzLgotICAgICAqIEBwYXJhbSBkZXZpY2VJZCBEZXZpY2UgSUQuCisgICAgICogUHV0cyBkZXZpY2UgaW5mb3JtYXRpb24gdG8gZGF0YWJhc2UuCisgICAgICogQHJldHVybiBJZiBkZXZpY2UgaXMgYWRkZWQgdG8gdGhlIGRhdGFiYXNlLgogICAgICAqLwotICAgIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cyhpbnQgZGV2aWNlSWQpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIG1hcHBpbmdTdGF0ZUtleSA9IGdldFJvb3REb2N1bWVudHNNYXBwaW5nU3RhdGVLZXkoZGV2aWNlSWQpOwotICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrU3RhdGUoIW1NYXBwaW5nTW9kZS5jb250YWluc0tleShtYXBwaW5nU3RhdGVLZXkpKTsKLSAgICAgICAgbU1hcHBpbmdNb2RlLnB1dCgKLSAgICAgICAgICAgICAgICBtYXBwaW5nU3RhdGVLZXksCi0gICAgICAgICAgICAgICAgc3RhcnRBZGRpbmdEb2N1bWVudHMoCi0gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1RJT05fUk9PVF9ET0NVTUVOVFMsIEludGVnZXIudG9TdHJpbmcoZGV2aWNlSWQpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW52b2tlcyB7QGxpbmsgI3N0YXJ0QWRkaW5nRG9jdW1lbnRzfSBmb3IgY2hpbGQgb2Ygc3BlY2lmaWMgZG9jdW1lbnRzLgotICAgICAqIEBwYXJhbSBwYXJlbnREb2N1bWVudElkIERvY3VtZW50IElEIGZvciBwYXJlbnQgZG9jdW1lbnQuCi0gICAgICovCi0gICAgQFZpc2libGVGb3JUZXN0aW5nCi0gICAgc3luY2hyb25pemVkIHZvaWQgc3RhcnRBZGRpbmdDaGlsZERvY3VtZW50cyhTdHJpbmcgcGFyZW50RG9jdW1lbnRJZCkgewotICAgICAgICBmaW5hbCBTdHJpbmcgbWFwcGluZ1N0YXRlS2V5ID0gZ2V0Q2hpbGREb2N1bWVudHNNYXBwaW5nU3RhdGVLZXkocGFyZW50RG9jdW1lbnRJZCk7Ci0gICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZSghbU1hcHBpbmdNb2RlLmNvbnRhaW5zS2V5KG1hcHBpbmdTdGF0ZUtleSkpOwotICAgICAgICBtTWFwcGluZ01vZGUucHV0KAotICAgICAgICAgICAgICAgIG1hcHBpbmdTdGF0ZUtleSwKLSAgICAgICAgICAgICAgICBzdGFydEFkZGluZ0RvY3VtZW50cyhTRUxFQ1RJT05fQ0hJTERfRE9DVU1FTlRTLCBwYXJlbnREb2N1bWVudElkKSk7CisgICAgc3luY2hyb25pemVkIGJvb2xlYW4gcHV0RGV2aWNlRG9jdW1lbnQoTXRwRGV2aWNlUmVjb3JkIGRldmljZSkgeworICAgICAgICBmaW5hbCBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZSA9IG1EYXRhYmFzZS5nZXRTUUxpdGVEYXRhYmFzZSgpOworICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrU3RhdGUobU1hcHBpbmdNb2RlLmNvbnRhaW5zS2V5KC8qIG5vIHBhcmVudCBmb3Igcm9vdCAqLyBudWxsKSk7CisgICAgICAgIGRhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENvbnRlbnRWYWx1ZXNbXSB2YWx1ZXNMaXN0ID0gbmV3IENvbnRlbnRWYWx1ZXNbMV07CisgICAgICAgICAgICBmaW5hbCBDb250ZW50VmFsdWVzW10gZXh0cmFWYWx1ZXNMaXN0ID0gbmV3IENvbnRlbnRWYWx1ZXNbMV07CisgICAgICAgICAgICB2YWx1ZXNMaXN0WzBdID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKKyAgICAgICAgICAgIGV4dHJhVmFsdWVzTGlzdFswXSA9IG5ldyBDb250ZW50VmFsdWVzKCk7CisgICAgICAgICAgICBNdHBEYXRhYmFzZS5nZXREZXZpY2VEb2N1bWVudFZhbHVlcyh2YWx1ZXNMaXN0WzBdLCBleHRyYVZhbHVlc0xpc3RbMF0sIGRldmljZSk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNoYW5nZWQgPSBwdXREb2N1bWVudHMoCisgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3QsCisgICAgICAgICAgICAgICAgICAgIGV4dHJhVmFsdWVzTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICIgSVMgTlVMTCIsCisgICAgICAgICAgICAgICAgICAgIEVNUFRZX0FSR1MsCisgICAgICAgICAgICAgICAgICAgIC8qIGhldXJpc3RpYyAqLyBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OX0RFVklDRV9JRCk7CisgICAgICAgICAgICBkYXRhYmFzZS5zZXRUcmFuc2FjdGlvblN1Y2Nlc3NmdWwoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgZGF0YWJhc2UuZW5kVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgogICAgICAqIFB1dHMgcm9vdCBpbmZvcm1hdGlvbiB0byBkYXRhYmFzZS4KLSAgICAgKiBAcGFyYW0gZGV2aWNlSWQgRGV2aWNlIElECisgICAgICogQHBhcmFtIHBhcmVudERvY3VtZW50SWQgRG9jdW1lbnQgSUQgb2YgZGV2aWNlIGRvY3VtZW50LgogICAgICAqIEBwYXJhbSByZXNvdXJjZXMgUmVzb3VyY2VzIHJlcXVpcmVkIHRvIGxvY2FsaXplIHJvb3QgbmFtZS4KICAgICAgKiBAcGFyYW0gcm9vdHMgTGlzdCBvZiByb290IGluZm9ybWF0aW9uLgogICAgICAqIEByZXR1cm4gSWYgcm9vdHMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgZnJvbSB0aGUgZGF0YWJhc2UuCiAgICAgICovCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gcHV0Um9vdERvY3VtZW50cyhpbnQgZGV2aWNlSWQsIFJlc291cmNlcyByZXNvdXJjZXMsIE10cFJvb3RbXSByb290cykgeworICAgIHN5bmNocm9uaXplZCBib29sZWFuIHB1dFN0b3JhZ2VEb2N1bWVudHMoCisgICAgICAgICAgICBTdHJpbmcgcGFyZW50RG9jdW1lbnRJZCwgUmVzb3VyY2VzIHJlc291cmNlcywgTXRwUm9vdFtdIHJvb3RzKSB7CiAgICAgICAgIGZpbmFsIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlID0gbURhdGFiYXNlLmdldFNRTGl0ZURhdGFiYXNlKCk7CiAgICAgICAgIGRhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGV1cmlzdGljOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1hcENvbHVtbjsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBnZXRSb290RG9jdW1lbnRzTWFwcGluZ1N0YXRlS2V5KGRldmljZUlkKTsKLSAgICAgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZShtTWFwcGluZ01vZGUuY29udGFpbnNLZXkoa2V5KSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1NYXBwaW5nTW9kZS5nZXQoa2V5KSkgeworICAgICAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja1N0YXRlKG1NYXBwaW5nTW9kZS5jb250YWluc0tleShwYXJlbnREb2N1bWVudElkKSk7CisgICAgICAgICAgICBzd2l0Y2ggKG1NYXBwaW5nTW9kZS5nZXQocGFyZW50RG9jdW1lbnRJZCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIE1BUF9CWV9NVFBfSURFTlRJRklFUjoKICAgICAgICAgICAgICAgICAgICAgaGV1cmlzdGljID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG1hcENvbHVtbiA9IENPTFVNTl9TVE9SQUdFX0lEOwpAQCAtMTA4LDM4ICsxMTIsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG1hcCBtb2RlLiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlc1tdIHZhbHVlc0xpc3QgPSBuZXcgQ29udGVudFZhbHVlc1tyb290cy5sZW5ndGhdOworICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlc1tdIGV4dHJhVmFsdWVzTGlzdCA9IG5ldyBDb250ZW50VmFsdWVzW3Jvb3RzLmxlbmd0aF07CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvb3RzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJvb3RzW2ldLm1EZXZpY2VJZCAhPSBkZXZpY2VJZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0gPSBuZXcgQ29udGVudFZhbHVlcygpOwotICAgICAgICAgICAgICAgIE10cERhdGFiYXNlLmdldFJvb3REb2N1bWVudFZhbHVlcyh2YWx1ZXNMaXN0W2ldLCByZXNvdXJjZXMsIHJvb3RzW2ldKTsKKyAgICAgICAgICAgICAgICBleHRyYVZhbHVlc0xpc3RbaV0gPSBuZXcgQ29udGVudFZhbHVlcygpOworICAgICAgICAgICAgICAgIE10cERhdGFiYXNlLmdldFN0b3JhZ2VEb2N1bWVudFZhbHVlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0sIGV4dHJhVmFsdWVzTGlzdFtpXSwgcmVzb3VyY2VzLCBwYXJlbnREb2N1bWVudElkLCByb290c1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNoYW5nZWQgPSBwdXREb2N1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3QsCi0gICAgICAgICAgICAgICAgICAgIFNFTEVDVElPTl9ST09UX0RPQ1VNRU5UUywKLSAgICAgICAgICAgICAgICAgICAgSW50ZWdlci50b1N0cmluZyhkZXZpY2VJZCksCisgICAgICAgICAgICAgICAgICAgIGV4dHJhVmFsdWVzTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICI9PyIsCisgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MocGFyZW50RG9jdW1lbnRJZCksCiAgICAgICAgICAgICAgICAgICAgIGhldXJpc3RpYywKICAgICAgICAgICAgICAgICAgICAgbWFwQ29sdW1uKTsKLSAgICAgICAgICAgIGZpbmFsIENvbnRlbnRWYWx1ZXMgdmFsdWVzID0gbmV3IENvbnRlbnRWYWx1ZXMoKTsKLSAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgIGZvciAoZmluYWwgTXRwUm9vdCByb290IDogcm9vdHMpIHsKLSAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIHNhbWUgdmFsdWUgZm9yIHRoZSByb290IElEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkb2N1bWVudCBJRC4KLSAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jdW1lbnRJZCA9IHZhbHVlc0xpc3RbaSsrXS5nZXRBc1N0cmluZyhEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpOwotICAgICAgICAgICAgICAgIC8vIElmIGl0IGZhaWxzIHRvIGluc2VydC91cGRhdGUgZG9jdW1lbnRzLCB0aGUgZG9jdW1lbnQgSUQgd2lsbCBiZSBzZXQgd2l0aCAtMS4KLSAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3QgaW5zZXJ0L3VwZGF0ZSByb290IGV4dHJhIGluZm9ybWF0aW9uIG5laXRoZXIuCi0gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFsdWVzLnB1dChSb290LkNPTFVNTl9ST09UX0lELCBkb2N1bWVudElkKTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KAotICAgICAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fRkxBR1MsCi0gICAgICAgICAgICAgICAgICAgICAgICBSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFKTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUywgcm9vdC5tRnJlZVNwYWNlKTsKLSAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTLCByb290Lm1NYXhDYXBhY2l0eSk7Ci0gICAgICAgICAgICAgICAgdmFsdWVzLnB1dChSb290LkNPTFVNTl9NSU1FX1RZUEVTLCAiIik7Ci0gICAgICAgICAgICAgICAgZGF0YWJhc2UucmVwbGFjZShUQUJMRV9ST09UX0VYVFJBLCBudWxsLCB2YWx1ZXMpOwotICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBkYXRhYmFzZS5zZXRUcmFuc2FjdGlvblN1Y2Nlc3NmdWwoKTsKICAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgICAgICB9IGZpbmFsbHkgewpAQCAtMTU2LDkgKzE0Myw4IEBACiAgICAgc3luY2hyb25pemVkIHZvaWQgcHV0Q2hpbGREb2N1bWVudHMoaW50IGRldmljZUlkLCBTdHJpbmcgcGFyZW50SWQsIE10cE9iamVjdEluZm9bXSBkb2N1bWVudHMpIHsKICAgICAgICAgZmluYWwgYm9vbGVhbiBoZXVyaXN0aWM7CiAgICAgICAgIGZpbmFsIFN0cmluZyBtYXBDb2x1bW47Ci0gICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBnZXRDaGlsZERvY3VtZW50c01hcHBpbmdTdGF0ZUtleShwYXJlbnRJZCk7Ci0gICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZShtTWFwcGluZ01vZGUuY29udGFpbnNLZXkoa2V5KSk7Ci0gICAgICAgIHN3aXRjaCAobU1hcHBpbmdNb2RlLmdldChrZXkpKSB7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZShtTWFwcGluZ01vZGUuY29udGFpbnNLZXkocGFyZW50SWQpKTsKKyAgICAgICAgc3dpdGNoIChtTWFwcGluZ01vZGUuZ2V0KHBhcmVudElkKSkgewogICAgICAgICAgICAgY2FzZSBNQVBfQllfTVRQX0lERU5USUZJRVI6CiAgICAgICAgICAgICAgICAgaGV1cmlzdGljID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgbWFwQ29sdW1uID0gQ09MVU1OX09CSkVDVF9IQU5ETEU7CkBAIC0xNzMsNjMgKzE1OSwxNiBAQAogICAgICAgICBmaW5hbCBDb250ZW50VmFsdWVzW10gdmFsdWVzTGlzdCA9IG5ldyBDb250ZW50VmFsdWVzW2RvY3VtZW50cy5sZW5ndGhdOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRvY3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdmFsdWVzTGlzdFtpXSA9IG5ldyBDb250ZW50VmFsdWVzKCk7Ci0gICAgICAgICAgICBNdHBEYXRhYmFzZS5nZXRDaGlsZERvY3VtZW50VmFsdWVzKAorICAgICAgICAgICAgTXRwRGF0YWJhc2UuZ2V0T2JqZWN0RG9jdW1lbnRWYWx1ZXMoCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlc0xpc3RbaV0sIGRldmljZUlkLCBwYXJlbnRJZCwgZG9jdW1lbnRzW2ldKTsKICAgICAgICAgfQogICAgICAgICBwdXREb2N1bWVudHMoCi0gICAgICAgICAgICAgICAgdmFsdWVzTGlzdCwgU0VMRUNUSU9OX0NISUxEX0RPQ1VNRU5UUywgcGFyZW50SWQsIGhldXJpc3RpYywgbWFwQ29sdW1uKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdG9wcyBhZGRpbmcgcm9vdCBkb2N1bWVudHMuCi0gICAgICogQHBhcmFtIGRldmljZUlkIERldmljZSBJRC4KLSAgICAgKiBAcmV0dXJuIFRydWUgaWYgbmV3IHJvd3MgYXJlIGFkZGVkL3JlbW92ZWQuCi0gICAgICovCi0gICAgc3luY2hyb25pemVkIGJvb2xlYW4gc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoaW50IGRldmljZUlkKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBnZXRSb290RG9jdW1lbnRzTWFwcGluZ1N0YXRlS2V5KGRldmljZUlkKTsKLSAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja1N0YXRlKG1NYXBwaW5nTW9kZS5jb250YWluc0tleShrZXkpKTsKLSAgICAgICAgc3dpdGNoIChtTWFwcGluZ01vZGUuZ2V0KGtleSkpIHsKLSAgICAgICAgICAgIGNhc2UgTUFQX0JZX01UUF9JREVOVElGSUVSOgotICAgICAgICAgICAgICAgIG1NYXBwaW5nTW9kZS5yZW1vdmUoa2V5KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RvcEFkZGluZ0RvY3VtZW50cygKLSAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVElPTl9ST09UX0RPQ1VNRU5UUywKLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVnZXIudG9TdHJpbmcoZGV2aWNlSWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ09MVU1OX1NUT1JBR0VfSUQpOwotICAgICAgICAgICAgY2FzZSBNQVBfQllfTkFNRToKLSAgICAgICAgICAgICAgICBtTWFwcGluZ01vZGUucmVtb3ZlKGtleSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0b3BBZGRpbmdEb2N1bWVudHMoCi0gICAgICAgICAgICAgICAgICAgICAgICBTRUxFQ1RJT05fUk9PVF9ET0NVTUVOVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlZ2VyLnRvU3RyaW5nKGRldmljZUlkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbWFwcGluZyBzdGF0ZS4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN0b3BzIGFkZGluZyBkb2N1bWVudHMgdW5kZXIgdGhlIHBhcmVudC4KLSAgICAgKiBAcGFyYW0gcGFyZW50SWQgRG9jdW1lbnQgSUQgb2YgdGhlIHBhcmVudC4KLSAgICAgKi8KLSAgICBzeW5jaHJvbml6ZWQgdm9pZCBzdG9wQWRkaW5nQ2hpbGREb2N1bWVudHMoU3RyaW5nIHBhcmVudElkKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBnZXRDaGlsZERvY3VtZW50c01hcHBpbmdTdGF0ZUtleShwYXJlbnRJZCk7Ci0gICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZShtTWFwcGluZ01vZGUuY29udGFpbnNLZXkoa2V5KSk7Ci0gICAgICAgIHN3aXRjaCAobU1hcHBpbmdNb2RlLmdldChrZXkpKSB7Ci0gICAgICAgICAgICBjYXNlIE1BUF9CWV9NVFBfSURFTlRJRklFUjoKLSAgICAgICAgICAgICAgICBzdG9wQWRkaW5nRG9jdW1lbnRzKAotICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUSU9OX0NISUxEX0RPQ1VNRU5UUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkLAotICAgICAgICAgICAgICAgICAgICAgICAgQ09MVU1OX09CSkVDVF9IQU5ETEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBNQVBfQllfTkFNRToKLSAgICAgICAgICAgICAgICBzdG9wQWRkaW5nRG9jdW1lbnRzKAotICAgICAgICAgICAgICAgICAgICAgICAgU0VMRUNUSU9OX0NISUxEX0RPQ1VNRU5UUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkLAotICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBtYXBwaW5nIHN0YXRlLiIpOwotICAgICAgICB9Ci0gICAgICAgIG1NYXBwaW5nTW9kZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAgICB2YWx1ZXNMaXN0LAorICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICI9PyIsCisgICAgICAgICAgICAgICAgc3RyaW5ncyhwYXJlbnRJZCksCisgICAgICAgICAgICAgICAgaGV1cmlzdGljLAorICAgICAgICAgICAgICAgIG1hcENvbHVtbik7CiAgICAgfQogCiAgICAgQFZpc2libGVGb3JUZXN0aW5nCkBAIC0yNTcsMzEgKzE5Niw0MiBAQAogICAgICAqIGlkZW50aWZpZXIgb3Igbm90LiBJZiBhbGwgdGhlIGRvY3VtZW50cyBoYXZlIE1UUCBpZGVudGlmaWVyLCBpdCB1c2VzIHRoZSBpZGVudGlmaWVyIHRvIGZpbmQKICAgICAgKiBhIGNvcnJlc3BvbmRpbmcgZXhpc3Rpbmcgcm93LiBPdGhlcndpc2UgaXQgZG9lcyBoZXVyaXN0aWMuCiAgICAgICoKLSAgICAgKiBAcGFyYW0gc2VsZWN0aW9uIFF1ZXJ5IG1hdGNoZXMgdmFsaWQgZG9jdW1lbnRzLgotICAgICAqIEBwYXJhbSBhcmcgQXJndW1lbnQgZm9yIHNlbGVjdGlvbi4KLSAgICAgKiBAcmV0dXJuIE1hcHBpbmcgbW9kZS4KKyAgICAgKiBAcGFyYW0gcGFyZW50RG9jdW1lbnRJZCBQYXJlbnQgZG9jdW1lbnQgSUQgb3IgTlVMTCBmb3Igcm9vdCBkb2N1bWVudHMuCiAgICAgICovCi0gICAgcHJpdmF0ZSBpbnQgc3RhcnRBZGRpbmdEb2N1bWVudHMoU3RyaW5nIHNlbGVjdGlvbiwgU3RyaW5nIGFyZykgeworICAgIHZvaWQgc3RhcnRBZGRpbmdEb2N1bWVudHMoQE51bGxhYmxlIFN0cmluZyBwYXJlbnREb2N1bWVudElkKSB7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZSghbU1hcHBpbmdNb2RlLmNvbnRhaW5zS2V5KHBhcmVudERvY3VtZW50SWQpKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNlbGVjdGlvbjsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gYXJnczsKKyAgICAgICAgaWYgKHBhcmVudERvY3VtZW50SWQgIT0gbnVsbCkgeworICAgICAgICAgICAgc2VsZWN0aW9uID0gQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICIgPSA/IjsKKyAgICAgICAgICAgIGFyZ3MgPSBzdHJpbmdzKHBhcmVudERvY3VtZW50SWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZWN0aW9uID0gQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICIgSVMgTlVMTCI7CisgICAgICAgICAgICBhcmdzID0gRU1QVFlfQVJHUzsKKyAgICAgICAgfQorCiAgICAgICAgIGZpbmFsIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlID0gbURhdGFiYXNlLmdldFNRTGl0ZURhdGFiYXNlKCk7CiAgICAgICAgIGRhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIERlbGV0ZSBhbGwgcGVuZGluZyByb3dzLgogICAgICAgICAgICAgbURhdGFiYXNlLmRlbGV0ZURvY3VtZW50c0FuZFJvb3RzUmVjdXJzaXZlbHkoCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiArICIgQU5EICIgKyBDT0xVTU5fUk9XX1NUQVRFICsgIj0/Iiwgc3RyaW5ncyhhcmcsIFJPV19TVEFURV9QRU5ESU5HKSk7CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiArICIgQU5EICIgKyBDT0xVTU5fUk9XX1NUQVRFICsgIj0/IiwKKyAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VVdGlscy5hcHBlbmRTZWxlY3Rpb25BcmdzKGFyZ3MsIHN0cmluZ3MoUk9XX1NUQVRFX1BFTkRJTkcpKSk7CiAKICAgICAgICAgICAgIC8vIFNldCBhbGwgZG9jdW1lbnRzIGFzIGludmFsaWRhdGVkLgogICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOwogICAgICAgICAgICAgdmFsdWVzLnB1dChDT0xVTU5fUk9XX1NUQVRFLCBST1dfU1RBVEVfSU5WQUxJREFURUQpOwotICAgICAgICAgICAgZGF0YWJhc2UudXBkYXRlKFRBQkxFX0RPQ1VNRU5UUywgdmFsdWVzLCBzZWxlY3Rpb24sIG5ldyBTdHJpbmdbXSB7IGFyZyB9KTsKKyAgICAgICAgICAgIGRhdGFiYXNlLnVwZGF0ZShUQUJMRV9ET0NVTUVOVFMsIHZhbHVlcywgc2VsZWN0aW9uLCBhcmdzKTsKIAogICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSByb3dzIHRoYXQgZG9lcyBub3QgaGF2ZSBNVFAgaWRlbnRpZmllciwgZG8gaGV1cmlzdGljIG1hcHBpbmcgYnkgbmFtZS4KICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlTmFtZUZvclJlc29sdmluZyA9IERhdGFiYXNlVXRpbHMucXVlcnlOdW1FbnRyaWVzKAogICAgICAgICAgICAgICAgICAgICBkYXRhYmFzZSwKICAgICAgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTLAogICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gKyAiIEFORCAiICsgQ09MVU1OX1NUT1JBR0VfSUQgKyAiIElTIE5VTEwiLAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBhcmcgfSkgPiAwOworICAgICAgICAgICAgICAgICAgICBhcmdzKSA+IDA7CiAgICAgICAgICAgICBkYXRhYmFzZS5zZXRUcmFuc2FjdGlvblN1Y2Nlc3NmdWwoKTsKLSAgICAgICAgICAgIHJldHVybiB1c2VOYW1lRm9yUmVzb2x2aW5nID8gTUFQX0JZX05BTUUgOiBNQVBfQllfTVRQX0lERU5USUZJRVI7CisgICAgICAgICAgICBtTWFwcGluZ01vZGUucHV0KAorICAgICAgICAgICAgICAgICAgICBwYXJlbnREb2N1bWVudElkLCB1c2VOYW1lRm9yUmVzb2x2aW5nID8gTUFQX0JZX05BTUUgOiBNQVBfQllfTVRQX0lERU5USUZJRVIpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgZGF0YWJhc2UuZW5kVHJhbnNhY3Rpb24oKTsKICAgICAgICAgfQpAQCAtMjkyLDMzICsyNDIsNDQgQEAKICAgICAgKiBJZiB0aGUgbWFwcGluZyBtb2RlIGlzIG5vdCBoZXVyaXN0aWMsIGl0IGp1c3QgYWRkcyB0aGUgcm93cyB0byB0aGUgZGF0YWJhc2Ugb3IgdXBkYXRlcyB0aGUKICAgICAgKiBleGlzdGluZyByb3dzIHdpdGggdGhlIG5ldyB2YWx1ZXMuIElmIHRoZSBtYXBwaW5nIG1vZGUgaXMgaGV1cmlzdGljLCBpdCBhZGRzIHNvbWUgbmV3IHJvd3MgYXMKICAgICAgKiAncGVuZGluZycgc3RhdGUgd2hlbiB0aGF0IHJvd3MgbWF5IGJlIGNvcnJlc3BvbmRpbmcgdG8gZXhpc3RpbmcgJ2ludmFsaWRhdGVkJyByb3dzLiBUaGVuCi0gICAgICoge0BsaW5rICNzdG9wQWRkaW5nRG9jdW1lbnRzKFN0cmluZywgU3RyaW5nLCBTdHJpbmcpfSB0dXJucyB0aGUgcGVuZGluZyByb3dzIGludG8gJ3ZhbGlkJworICAgICAqIHtAbGluayAjc3RvcEFkZGluZ0RvY3VtZW50cyhTdHJpbmcpfSB0dXJucyB0aGUgcGVuZGluZyByb3dzIGludG8gJ3ZhbGlkJwogICAgICAqIHJvd3MuIElmIHRoZSBtZXRob2RzIGFkZHMgcm93cyB0byBkYXRhYmFzZSwgaXQgdXBkYXRlcyB2YWx1ZUxpc3Qgd2l0aCBjb3JyZWN0IGRvY3VtZW50IElELgogICAgICAqCiAgICAgICogQHBhcmFtIHZhbHVlc0xpc3QgVmFsdWVzIGZvciBkb2N1bWVudHMgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KKyAgICAgKiBAcGFyYW0gcm9vdEV4dHJhVmFsdWVzTGlzdCBWYWx1ZXMgZm9yIHJvb3QgZXh0cmEgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KICAgICAgKiBAcGFyYW0gc2VsZWN0aW9uIFNRTCB3aGVyZSBjbG9zdXJlIHRvIHNlbGVjdCByb3dzIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHBhcmVudC4KLSAgICAgKiBAcGFyYW0gYXJnIEFyZ3VtZW50IGZvciBzZWxlY3Rpb24gU1FMLgorICAgICAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50IGZvciBzZWxlY3Rpb24gU1FMLgogICAgICAqIEBwYXJhbSBoZXVyaXN0aWMgV2hldGhlciB0aGUgbWFwcGluZyBtb2RlIGlzIGhldXJpc3RpYy4KICAgICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIG1ldGhvZCBhZGRzIG5ldyByb3dzLgogICAgICAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBwdXREb2N1bWVudHMoCiAgICAgICAgICAgICBDb250ZW50VmFsdWVzW10gdmFsdWVzTGlzdCwKKyAgICAgICAgICAgIEBOdWxsYWJsZSBDb250ZW50VmFsdWVzW10gcm9vdEV4dHJhVmFsdWVzTGlzdCwKICAgICAgICAgICAgIFN0cmluZyBzZWxlY3Rpb24sCi0gICAgICAgICAgICBTdHJpbmcgYXJnLAorICAgICAgICAgICAgU3RyaW5nW10gYXJncywKICAgICAgICAgICAgIGJvb2xlYW4gaGV1cmlzdGljLAogICAgICAgICAgICAgU3RyaW5nIG1hcHBpbmdLZXkpIHsKICAgICAgICAgZmluYWwgU1FMaXRlRGF0YWJhc2UgZGF0YWJhc2UgPSBtRGF0YWJhc2UuZ2V0U1FMaXRlRGF0YWJhc2UoKTsKICAgICAgICAgYm9vbGVhbiBhZGRlZCA9IGZhbHNlOwogICAgICAgICBkYXRhYmFzZS5iZWdpblRyYW5zYWN0aW9uKCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIENvbnRlbnRWYWx1ZXMgdmFsdWVzIDogdmFsdWVzTGlzdCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXNMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSB2YWx1ZXNMaXN0W2ldOworICAgICAgICAgICAgICAgIGZpbmFsIENvbnRlbnRWYWx1ZXMgcm9vdEV4dHJhVmFsdWVzOworICAgICAgICAgICAgICAgIGlmIChyb290RXh0cmFWYWx1ZXNMaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcm9vdEV4dHJhVmFsdWVzID0gcm9vdEV4dHJhVmFsdWVzTGlzdFtpXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByb290RXh0cmFWYWx1ZXMgPSBudWxsOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY2FuZGlkYXRlQ3Vyc29yID0gZGF0YWJhc2UucXVlcnkoCiAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCksCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gKyAiIEFORCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgIENPTFVNTl9ST1dfU1RBVEUgKyAiPT8gQU5EICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0tleSArICI9PyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKGFyZywgUk9XX1NUQVRFX0lOVkFMSURBVEVELCB2YWx1ZXMuZ2V0QXNTdHJpbmcobWFwcGluZ0tleSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VVdGlscy5hcHBlbmRTZWxlY3Rpb25BcmdzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKFJPV19TVEFURV9JTlZBTElEQVRFRCwgdmFsdWVzLmdldEFzU3RyaW5nKG1hcHBpbmdLZXkpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCkBAIC0zMjcsMjUgKzI4OCwyNiBAQAogICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHJvd0lkOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlQ3Vyc29yLmdldENvdW50KCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQgPSBkYXRhYmFzZS5pbnNlcnQoVEFCTEVfRE9DVU1FTlRTLCBudWxsLCB2YWx1ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0lkID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNRTGl0ZUV4Y2VwdGlvbigiRmFpbGVkIHRvIHB1dCBhIGRvY3VtZW50IGludG8gZGF0YWJhc2UuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWhldXJpc3RpYykgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlQ3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBkb2N1bWVudElkID0gY2FuZGlkYXRlQ3Vyc29yLmdldFN0cmluZygwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJvd0lkID0gZGF0YWJhc2UudXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQgPSBjYW5kaWRhdGVDdXJzb3IuZ2V0TG9uZygwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFTEVDVElPTl9ET0NVTUVOVF9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyhkb2N1bWVudElkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3Mocm93SWQpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX1JPV19TVEFURSwgUk9XX1NUQVRFX1BFTkRJTkcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQgPSBkYXRhYmFzZS5pbnNlcnQoVEFCTEVfRE9DVU1FTlRTLCBudWxsLCB2YWx1ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcm93SWQgPSBkYXRhYmFzZS5pbnNlcnRPclRocm93KFRBQkxFX0RPQ1VNRU5UUywgbnVsbCwgdmFsdWVzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBEb2N1bWVudCBJRCBpcyBhIHByaW1hcnkgaW50ZWdlciBrZXkgb2YgdGhlIHRhYmxlLiBTbyB0aGUgcmV0dXJuZWQgcm93CiAgICAgICAgICAgICAgICAgICAgIC8vIElEcyBzaG91bGQgYmUgc2FtZSB3aXRoIHRoZSBkb2N1bWVudCBJRC4KICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1dChEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsIHJvd0lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3RFeHRyYVZhbHVlcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByb290RXh0cmFWYWx1ZXMucHV0KFJvb3QuQ09MVU1OX1JPT1RfSUQsIHJvd0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLnJlcGxhY2UoVEFCTEVfUk9PVF9FWFRSQSwgbnVsbCwgcm9vdEV4dHJhVmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUN1cnNvci5jbG9zZSgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTM2MiwxMiArMzI0LDMyIEBACiAgICAgICogTWFwcyAncGVuZGluZycgZG9jdW1lbnQgYW5kICdpbnZhbGlkYXRlZCcgZG9jdW1lbnQgdGhhdCBzaGFyZXMgdGhlIHNhbWUgY29sdW1uIG9mIGdyb3VwS2V5LgogICAgICAqIElmIHRoZSBkYXRhYmFzZSBkb2VzIG5vdCBmaW5kIGNvcnJlc3BvbmRpbmcgJ2ludmFsaWRhdGVkJyBkb2N1bWVudCwgaXQganVzdCByZW1vdmVzCiAgICAgICogJ2ludmFsaWRhdGVkJyBkb2N1bWVudCBmcm9tIHRoZSBkYXRhYmFzZS4KLSAgICAgKiBAcGFyYW0gc2VsZWN0aW9uIFF1ZXJ5IHRvIHNlbGVjdCByb3dzIGZvciByZXNvbHZpbmcuCi0gICAgICogQHBhcmFtIGFyZyBBcmd1bWVudCBmb3Igc2VsZWN0aW9uIFNRTC4KLSAgICAgKiBAcGFyYW0gZ3JvdXBLZXkgQ29sdW1uIG5hbWUgdXNlZCB0byBmaW5kIGNvcnJlc3BvbmRpbmcgcm93cy4KKyAgICAgKiBAcGFyYW0gcGFyZW50SWQgUGFyZW50IGRvY3VtZW50IElEIG9yIG51bGwgZm9yIHJvb3QgZG9jdW1lbnRzLgogICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgbWV0aG9kcyBhZGRzIG9yIHJlbW92ZWQgdmlzaWJsZSByb3dzLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBzdG9wQWRkaW5nRG9jdW1lbnRzKFN0cmluZyBzZWxlY3Rpb24sIFN0cmluZyBhcmcsIFN0cmluZyBncm91cEtleSkgeworICAgIGJvb2xlYW4gc3RvcEFkZGluZ0RvY3VtZW50cyhATnVsbGFibGUgU3RyaW5nIHBhcmVudElkKSB7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tTdGF0ZShtTWFwcGluZ01vZGUuY29udGFpbnNLZXkocGFyZW50SWQpKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNlbGVjdGlvbjsKKyAgICAgICAgZmluYWwgU3RyaW5nW10gYXJnczsKKyAgICAgICAgaWYgKHBhcmVudElkICE9IG51bGwpIHsKKyAgICAgICAgICAgIHNlbGVjdGlvbiA9IENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiPT8iOworICAgICAgICAgICAgYXJncyA9IHN0cmluZ3MocGFyZW50SWQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2VsZWN0aW9uID0gQ09MVU1OX1BBUkVOVF9ET0NVTUVOVF9JRCArICIgSVMgTlVMTCI7CisgICAgICAgICAgICBhcmdzID0gRU1QVFlfQVJHUzsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBTdHJpbmcgZ3JvdXBLZXk7CisgICAgICAgIHN3aXRjaCAobU1hcHBpbmdNb2RlLmdldChwYXJlbnRJZCkpIHsKKyAgICAgICAgICAgIGNhc2UgTUFQX0JZX01UUF9JREVOVElGSUVSOgorICAgICAgICAgICAgICAgIGdyb3VwS2V5ID0gcGFyZW50SWQgIT0gbnVsbCA/IENPTFVNTl9PQkpFQ1RfSEFORExFIDogQ09MVU1OX1NUT1JBR0VfSUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1BUF9CWV9OQU1FOgorICAgICAgICAgICAgICAgIGdyb3VwS2V5ID0gRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIG1hcHBpbmcgc3RhdGUuIik7CisgICAgICAgIH0KKyAgICAgICAgbU1hcHBpbmdNb2RlLnJlbW92ZShwYXJlbnRJZCk7CiAgICAgICAgIGZpbmFsIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlID0gbURhdGFiYXNlLmdldFNRTGl0ZURhdGFiYXNlKCk7CiAgICAgICAgIGRhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKQEAgLTM5MCw3ICszNzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncm91cF9jb25jYXQoIiArIHBlbmRpbmdJZFF1ZXJ5ICsgIikiCiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyhhcmcpLAorICAgICAgICAgICAgICAgICAgICBhcmdzLAogICAgICAgICAgICAgICAgICAgICBncm91cEtleSwKICAgICAgICAgICAgICAgICAgICAgImNvdW50KCIgKyBpbnZhbGlkYXRlZElkUXVlcnkgKyAiKSA9IDEgQU5EIGNvdW50KCIgKyBwZW5kaW5nSWRRdWVyeSArICIpID0gMSIsCiAgICAgICAgICAgICAgICAgICAgIG51bGwpOwpAQCAtNDM5LDcgKzQyMSw3IEBACiAgICAgICAgICAgICAvLyBEZWxldGUgYWxsIGludmFsaWRhdGVkIHJvd3MgdGhhdCBjYW5ub3QgYmUgbWFwcGVkLgogICAgICAgICAgICAgaWYgKG1EYXRhYmFzZS5kZWxldGVEb2N1bWVudHNBbmRSb290c1JlY3Vyc2l2ZWx5KAogICAgICAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiA9ID8gQU5EICIgKyBzZWxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX0lOVkFMSURBVEVELCBhcmcpKSkgeworICAgICAgICAgICAgICAgICAgICBEYXRhYmFzZVV0aWxzLmFwcGVuZFNlbGVjdGlvbkFyZ3Moc3RyaW5ncyhST1dfU1RBVEVfSU5WQUxJREFURUQpLCBhcmdzKSkpIHsKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KIApAQCAtNDUyLDcgKzQzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUywKICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiA9ID8gQU5EICIgKyBzZWxlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1BFTkRJTkcsIGFyZykpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VVdGlscy5hcHBlbmRTZWxlY3Rpb25BcmdzKHN0cmluZ3MoUk9XX1NUQVRFX1BFTkRJTkcpLCBhcmdzKSkgIT0gMCkgewogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGF0YWJhc2Uuc2V0VHJhbnNhY3Rpb25TdWNjZXNzZnVsKCk7CkBAIC00NzMsMTIgKzQ1NSwxNSBAQAogICAgICAgICBmaW5hbCBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZSA9IG1EYXRhYmFzZS5nZXRTUUxpdGVEYXRhYmFzZSgpOwogICAgICAgICB2YWx1ZXMuY2xlYXIoKTsKICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IGRhdGFiYXNlLnF1ZXJ5KHRhYmxlLCBudWxsLCBzZWxlY3Rpb24sIGFyZ3MsIG51bGwsIG51bGwsIG51bGwsICIxIik7Ci0gICAgICAgIGlmIChjdXJzb3IuZ2V0Q291bnQoKSA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLmdldENvdW50KCkgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CisgICAgICAgICAgICBEYXRhYmFzZVV0aWxzLmN1cnNvclJvd1RvQ29udGVudFZhbHVlcyhjdXJzb3IsIHZhbHVlcyk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQotICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICBEYXRhYmFzZVV0aWxzLmN1cnNvclJvd1RvQ29udGVudFZhbHVlcyhjdXJzb3IsIHZhbHVlcyk7Ci0gICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDk0LDIwICs0NzksNCBAQAogICAgICAgICByZXR1cm4gIkNBU0UgV0hFTiAiICsgQ09MVU1OX1JPV19TVEFURSArICIgPSAiICsgSW50ZWdlci50b1N0cmluZyhzdGF0ZSkgKwogICAgICAgICAgICAgICAgICIgVEhFTiAiICsgYSArICIgRUxTRSBOVUxMIEVORCI7CiAgICAgfQotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIGRldmljZUlkIERldmljZSBJRC4KLSAgICAgKiBAcmV0dXJuIEtleSBmb3Ige0BsaW5rICNtTWFwcGluZ01vZGV9LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRSb290RG9jdW1lbnRzTWFwcGluZ1N0YXRlS2V5KGludCBkZXZpY2VJZCkgewotICAgICAgICByZXR1cm4gIlJvb3REb2N1bWVudHMvIiArIGRldmljZUlkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSBwYXJlbnREb2N1bWVudElkIERvY3VtZW50IElEIGZvciB0aGUgcGFyZW50IGRvY3VtZW50LgotICAgICAqIEByZXR1cm4gS2V5IGZvciB7QGxpbmsgI21NYXBwaW5nTW9kZX0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENoaWxkRG9jdW1lbnRzTWFwcGluZ1N0YXRlS2V5KFN0cmluZyBwYXJlbnREb2N1bWVudElkKSB7Ci0gICAgICAgIHJldHVybiAiQ2hpbGREb2N1bWVudHMvIiArIHBhcmVudERvY3VtZW50SWQ7Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZS5qYXZhCmluZGV4IDUxYzAyODEuLjExMjkxNGUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2UuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlLmphdmEKQEAgLTE4LDExICsxOCwxNCBAQAogCiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLm10cC5NdHBEYXRhYmFzZUNvbnN0YW50cy4qOwogCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ3Vyc29yOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuRGF0YWJhc2VVdGlsczsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLk1hdHJpeEN1cnNvcjsKK2ltcG9ydCBhbmRyb2lkLmRhdGFiYXNlLk1hdHJpeEN1cnNvci5Sb3dCdWlsZGVyOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZURhdGFiYXNlOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2Uuc3FsaXRlLlNRTGl0ZU9wZW5IZWxwZXI7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlUXVlcnlCdWlsZGVyOwpAQCAtMzUsNyArMzgsNiBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuVmlzaWJsZUZvclRlc3Rpbmc7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiAKQEAgLTUzLDEzICs1NSwxMyBAQAogICogYnkgY29tcGFyaW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFuZCBvYmplY3QgbmFtZS4KICAqCiAgKiBUbyBzdGFydCBwdXR0aW5nIGRvY3VtZW50cyBpbnRvIHRoZSBkYXRhYmFzZSwgdGhlIGNsaWVudCBuZWVkcyB0byBjYWxsCi0gKiB7QGxpbmsgTWFwcGVyI3N0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoU3RyaW5nKX0gd2l0aCB0aGUgcGFyZW50IGRvY3VtZW50IElELiBBbHNvIGl0Ci0gKiBuZWVkcyB0byBjYWxsIHtAbGluayBNYXBwZXIjc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKFN0cmluZyl9IGFmdGVyIHB1dHRpbmcgYWxsIGNoaWxkCisgKiB7QGxpbmsgTWFwcGVyI3N0YXJ0QWRkaW5nRG9jdW1lbnRzKFN0cmluZyl9IHdpdGggdGhlIHBhcmVudCBkb2N1bWVudCBJRC4gQWxzbyBpdAorICogbmVlZHMgdG8gY2FsbCB7QGxpbmsgTWFwcGVyI3N0b3BBZGRpbmdEb2N1bWVudHMoU3RyaW5nKX0gYWZ0ZXIgcHV0dGluZyBhbGwgY2hpbGQKICAqIGRvY3VtZW50cyB0byB0aGUgZGF0YWJhc2UuIChBbGwgZXhwbGFuYXRpb25zIGFyZSBzYW1lIGZvciByb290IGRvY3VtZW50cykKICAqCi0gKiBkYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0NoaWxkRG9jdW1lbnRzKCk7CisgKiBkYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygpOwogICogZGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Q2hpbGREb2N1bWVudHMoKTsKLSAqIGRhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdDaGlsZERvY3VtZW50cygpOworICogZGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygpOwogICoKICAqIFRvIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZG9jdW1lbnRzLCB0aGUgY2xpZW50IGNvZGUgY2FuIHJlcGVhdCB0byBjYWxsIHRoZSB0aHJlZSBtZXRob2RzIGFnYWluLgogICogVGhlIG5ld2x5IGFkZGVkIHJvd3MgdXBkYXRlIGNvcnJlc3BvbmRpbmcgZXhpc3Rpbmcgcm93cyB0aGF0IGhhdmUgc2FtZSBNVFAgaWRlbnRpZmllciBsaWtlCkBAIC0xMDcsMTQgKzEwOSw5MyBAQAogICAgICAqIEByZXR1cm4gRGF0YWJhc2UgY3Vyc29yLgogICAgICAqLwogICAgIEN1cnNvciBxdWVyeVJvb3RzKFN0cmluZ1tdIGNvbHVtbk5hbWVzKSB7Ci0gICAgICAgIHJldHVybiBtRGF0YWJhc2UucXVlcnkoCi0gICAgICAgICAgICAgICAgVklFV19ST09UUywKLSAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcywKLSAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTiAoPywgPykiLAotICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1ZBTElELCBST1dfU1RBVEVfSU5WQUxJREFURUQpLAorICAgICAgICBmaW5hbCBTdHJpbmcgc2VsZWN0aW9uID0KKyAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTiAoPywgPykgQU5EICIgKyBDT0xVTU5fRE9DVU1FTlRfVFlQRSArICIgPSA/IjsKKyAgICAgICAgZmluYWwgQ3Vyc29yIGRldmljZUN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeSgKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCisgICAgICAgICAgICAgICAgc3RyaW5ncyhDT0xVTU5fREVWSUNFX0lEKSwKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24sCisgICAgICAgICAgICAgICAgc3RyaW5ncyhST1dfU1RBVEVfVkFMSUQsIFJPV19TVEFURV9JTlZBTElEQVRFRCwgRE9DVU1FTlRfVFlQRV9ERVZJQ0UpLAorICAgICAgICAgICAgICAgIENPTFVNTl9ERVZJQ0VfSUQsCiAgICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgIG51bGwpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBTUUxpdGVRdWVyeUJ1aWxkZXIgYnVpbGRlciA9IG5ldyBTUUxpdGVRdWVyeUJ1aWxkZXIoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0VGFibGVzKEpPSU5fUk9PVFMpOworICAgICAgICAgICAgYnVpbGRlci5zZXRQcm9qZWN0aW9uTWFwKENPTFVNTl9NQVBfUk9PVFMpOworICAgICAgICAgICAgZmluYWwgTWF0cml4Q3Vyc29yIHJlc3VsdCA9IG5ldyBNYXRyaXhDdXJzb3IoY29sdW1uTmFtZXMpOworICAgICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOworCisgICAgICAgICAgICB3aGlsZSAoZGV2aWNlQ3Vyc29yLm1vdmVUb05leHQoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBkZXZpY2VJZCA9IGRldmljZUN1cnNvci5nZXRJbnQoMCk7CisgICAgICAgICAgICAgICAgZmluYWwgQ3Vyc29yIHN0b3JhZ2VDdXJzb3IgPSBidWlsZGVyLnF1ZXJ5KAorICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gKyAiIEFORCAiICsgQ09MVU1OX0RFVklDRV9JRCArICIgPSA/IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1ZBTElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfU1RBVEVfSU5WQUxJREFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPQ1VNRU5UX1RZUEVfU1RPUkFHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlSWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3JhZ2VDdXJzb3IuZ2V0Q291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQ3Vyc29yLm1vdmVUb05leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERhdGFiYXNlVXRpbHMuY3Vyc29yUm93VG9Db250ZW50VmFsdWVzKHN0b3JhZ2VDdXJzb3IsIHZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gYnVpbGRlci5xdWVyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICsgIiBBTkQgIiArIENPTFVNTl9ERVZJQ0VfSUQgKyAiID0gPyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MoUk9XX1NUQVRFX1ZBTElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19TVEFURV9JTlZBTElEQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET0NVTUVOVF9UWVBFX0RFVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2VJZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFiYXNlVXRpbHMuY3Vyc29yUm93VG9Db250ZW50VmFsdWVzKGN1cnNvciwgdmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgY2FwYWNpdHlCeXRlcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGF2YWlsYWJsZUJ5dGVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYXBhY2l0eUluZGV4ID0gY3Vyc29yLmdldENvbHVtbkluZGV4KFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IGN1cnNvci5nZXRDb2x1bW5JbmRleChSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0b3JhZ2VDdXJzb3IubW92ZVRvTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcmVxdWVzdGVkIGNvbHVtbk5hbWVzIGRvZXMgbm90IGluY2x1ZGUgQ09MVU1OX1hYWF9CWVRFUywgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxjdWxhdGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhcGFjaXR5SW5kZXggIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWNpdHlCeXRlcyArPSBjdXJzb3IuZ2V0TG9uZyhjYXBhY2l0eUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZUJ5dGVzICs9IGN1cnNvci5nZXRMb25nKGF2YWlsYWJsZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHV0KFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTLCBjYXBhY2l0eUJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLCBhdmFpbGFibGVCeXRlcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQ3Vyc29yLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmluYWwgUm93QnVpbGRlciByb3cgPSByZXN1bHQubmV3Um93KCk7CisgICAgICAgICAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcga2V5IDogdmFsdWVzLmtleVNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJvdy5hZGQoa2V5LCB2YWx1ZXMuZ2V0KGtleSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGRldmljZUN1cnNvci5jbG9zZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMjgsOCArMjA5LDggQEAKICAgICAgICAgcmV0dXJuIG1EYXRhYmFzZS5xdWVyeSgKICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCiAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMsCi0gICAgICAgICAgICAgICAgQ09MVU1OX1JPV19TVEFURSArICIgSU4gKD8sID8pIiwKLSAgICAgICAgICAgICAgICBzdHJpbmdzKFJPV19TVEFURV9WQUxJRCwgUk9XX1NUQVRFX0lOVkFMSURBVEVEKSwKKyAgICAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTiAoPywgPykgQU5EICIgKyBDT0xVTU5fRE9DVU1FTlRfVFlQRSArICI9PyIsCisgICAgICAgICAgICAgICAgc3RyaW5ncyhST1dfU1RBVEVfVkFMSUQsIFJPV19TVEFURV9JTlZBTElEQVRFRCwgRE9DVU1FTlRfVFlQRV9TVE9SQUdFKSwKICAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgICAgbnVsbCk7CkBAIC0xNzksNiArMjYwLDI3IEBACiAgICAgICAgIGRlbGV0ZURvY3VtZW50c0FuZFJvb3RzKENPTFVNTl9ERVZJQ0VfSUQgKyAiPT8iLCBzdHJpbmdzKGRldmljZUlkKSk7CiAgICAgfQogCisgICAgQE51bGxhYmxlIFN0cmluZyBnZXREb2N1bWVudElkRm9yRGV2aWNlKGludCBkZXZpY2VJZCkgeworICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5KAorICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUywKKyAgICAgICAgICAgICAgICBzdHJpbmdzKERvY3VtZW50LkNPTFVNTl9ET0NVTUVOVF9JRCksCisgICAgICAgICAgICAgICAgQ09MVU1OX0RPQ1VNRU5UX1RZUEUgKyAiID0gPyBBTkQgIiArIENPTFVNTl9ERVZJQ0VfSUQgKyAiID0gPyIsCisgICAgICAgICAgICAgICAgc3RyaW5ncyhET0NVTUVOVF9UWVBFX0RFVklDRSwgZGV2aWNlSWQpLAorICAgICAgICAgICAgICAgIG51bGwsCisgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICIxIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoY3Vyc29yLm1vdmVUb05leHQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjdXJzb3IuZ2V0U3RyaW5nKDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOworICAgICAgICB9CisgICAgfQorCiAgICAgLyoqCiAgICAgICogT2J0YWlucyBwYXJlbnQgZG9jdW1lbnQgSUQuCiAgICAgICogQHBhcmFtIGRvY3VtZW50SWQKQEAgLTIxNiw3ICszMTgsNyBAQAogICAgICAqLwogICAgIFN0cmluZyBwdXROZXdEb2N1bWVudChpbnQgZGV2aWNlSWQsIFN0cmluZyBwYXJlbnREb2N1bWVudElkLCBNdHBPYmplY3RJbmZvIGluZm8pIHsKICAgICAgICAgZmluYWwgQ29udGVudFZhbHVlcyB2YWx1ZXMgPSBuZXcgQ29udGVudFZhbHVlcygpOwotICAgICAgICBnZXRDaGlsZERvY3VtZW50VmFsdWVzKHZhbHVlcywgZGV2aWNlSWQsIHBhcmVudERvY3VtZW50SWQsIGluZm8pOworICAgICAgICBnZXRPYmplY3REb2N1bWVudFZhbHVlcyh2YWx1ZXMsIGRldmljZUlkLCBwYXJlbnREb2N1bWVudElkLCBpbmZvKTsKICAgICAgICAgbURhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgaWQgPSBtRGF0YWJhc2UuaW5zZXJ0KFRBQkxFX0RPQ1VNRU5UUywgbnVsbCwgdmFsdWVzKTsKQEAgLTMwNywzMiArNDA5LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBkZXZpY2UgSUQgc3RvcmVkIGluIHRoZSBkYXRhYmFzZS4KLSAgICAgKi8KLSAgICBpbnRbXSBnZXREZXZpY2VJZHMoKSB7Ci0gICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnkoCi0gICAgICAgICAgICAgICAgdHJ1ZSwKLSAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCi0gICAgICAgICAgICAgICAgc3RyaW5ncyhDT0xVTU5fREVWSUNFX0lEKSwKLSAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgbnVsbCwKLSAgICAgICAgICAgICAgICBudWxsLAotICAgICAgICAgICAgICAgIG51bGwsCi0gICAgICAgICAgICAgICAgbnVsbCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnRbXSBpZHMgPSBuZXcgaW50W2N1cnNvci5nZXRDb3VudCgpXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgICAgICBpZHNbaV0gPSBjdXJzb3IuZ2V0SW50KDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGlkczsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBib29sZWFuIGRlbGV0ZURvY3VtZW50c0FuZFJvb3RzKFN0cmluZyBzZWxlY3Rpb24sIFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgbURhdGFiYXNlLmJlZ2luVHJhbnNhY3Rpb24oKTsKICAgICAgICAgdHJ5IHsKQEAgLTM3MCw3ICs0NDYsNiBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShTUUxpdGVEYXRhYmFzZSBkYikgewogICAgICAgICAgICAgZGIuZXhlY1NRTChRVUVSWV9DUkVBVEVfRE9DVU1FTlRTKTsKICAgICAgICAgICAgIGRiLmV4ZWNTUUwoUVVFUllfQ1JFQVRFX1JPT1RfRVhUUkEpOwotICAgICAgICAgICAgZGIuZXhlY1NRTChRVUVSWV9DUkVBVEVfVklFV19ST09UUyk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTM4NCwxOSArNDU5LDUzIEBACiAgICAgICAgIGNvbnRleHQuZGVsZXRlRGF0YWJhc2UoREFUQUJBU0VfTkFNRSk7CiAgICAgfQogCisgICAgc3RhdGljIHZvaWQgZ2V0RGV2aWNlRG9jdW1lbnRWYWx1ZXMoCisgICAgICAgICAgICBDb250ZW50VmFsdWVzIHZhbHVlcywKKyAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgZXh0cmFWYWx1ZXMsCisgICAgICAgICAgICBNdHBEZXZpY2VSZWNvcmQgZGV2aWNlKSB7CisgICAgICAgIHZhbHVlcy5jbGVhcigpOworICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9ERVZJQ0VfSUQsIGRldmljZS5kZXZpY2VJZCk7CisgICAgICAgIHZhbHVlcy5wdXROdWxsKENPTFVNTl9TVE9SQUdFX0lEKTsKKyAgICAgICAgdmFsdWVzLnB1dE51bGwoQ09MVU1OX09CSkVDVF9IQU5ETEUpOworICAgICAgICB2YWx1ZXMucHV0TnVsbChDT0xVTU5fUEFSRU5UX0RPQ1VNRU5UX0lEKTsKKyAgICAgICAgdmFsdWVzLnB1dChDT0xVTU5fUk9XX1NUQVRFLCBST1dfU1RBVEVfVkFMSUQpOworICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9ET0NVTUVOVF9UWVBFLCBET0NVTUVOVF9UWVBFX0RFVklDRSk7CisgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUik7CisgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwgZGV2aWNlLm5hbWUpOworICAgICAgICB2YWx1ZXMucHV0TnVsbChEb2N1bWVudC5DT0xVTU5fU1VNTUFSWSk7CisgICAgICAgIHZhbHVlcy5wdXROdWxsKERvY3VtZW50LkNPTFVNTl9MQVNUX01PRElGSUVEKTsKKyAgICAgICAgdmFsdWVzLnB1dChEb2N1bWVudC5DT0xVTU5fSUNPTiwgUi5kcmF3YWJsZS5pY19yb290X210cCk7CisgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX0ZMQUdTLCAwKTsKKyAgICAgICAgdmFsdWVzLnB1dE51bGwoRG9jdW1lbnQuQ09MVU1OX1NJWkUpOworCisgICAgICAgIGV4dHJhVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIGV4dHJhVmFsdWVzLnB1dCgKKyAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9GTEFHUywKKyAgICAgICAgICAgICAgICBSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFKTsKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0TnVsbChSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMpOworICAgICAgICBleHRyYVZhbHVlcy5wdXROdWxsKFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTKTsKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0KFJvb3QuQ09MVU1OX01JTUVfVFlQRVMsICIiKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBHZXRzIHtAbGluayBDb250ZW50VmFsdWVzfSBmb3IgdGhlIGdpdmVuIHJvb3QuCiAgICAgICogQHBhcmFtIHZhbHVlcyB7QGxpbmsgQ29udGVudFZhbHVlc30gdGhhdCByZWNlaXZlcyB2YWx1ZXMuCiAgICAgICogQHBhcmFtIHJlc291cmNlcyBSZXNvdXJjZXMgdXNlZCB0byBnZXQgbG9jYWxpemVkIHJvb3QgbmFtZS4KICAgICAgKiBAcGFyYW0gcm9vdCBSb290IHRvIGJlIGNvbnZlcnRlZCB7QGxpbmsgQ29udGVudFZhbHVlc30uCiAgICAgICovCi0gICAgc3RhdGljIHZvaWQgZ2V0Um9vdERvY3VtZW50VmFsdWVzKENvbnRlbnRWYWx1ZXMgdmFsdWVzLCBSZXNvdXJjZXMgcmVzb3VyY2VzLCBNdHBSb290IHJvb3QpIHsKKyAgICBzdGF0aWMgdm9pZCBnZXRTdG9yYWdlRG9jdW1lbnRWYWx1ZXMoCisgICAgICAgICAgICBDb250ZW50VmFsdWVzIHZhbHVlcywKKyAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgZXh0cmFWYWx1ZXMsCisgICAgICAgICAgICBSZXNvdXJjZXMgcmVzb3VyY2VzLAorICAgICAgICAgICAgU3RyaW5nIHBhcmVudERvY3VtZW50SWQsCisgICAgICAgICAgICBNdHBSb290IHJvb3QpIHsKICAgICAgICAgdmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX0RFVklDRV9JRCwgcm9vdC5tRGV2aWNlSWQpOwogICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9TVE9SQUdFX0lELCByb290Lm1TdG9yYWdlSWQpOwogICAgICAgICB2YWx1ZXMucHV0TnVsbChDT0xVTU5fT0JKRUNUX0hBTkRMRSk7Ci0gICAgICAgIHZhbHVlcy5wdXROdWxsKENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQpOworICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQsIHBhcmVudERvY3VtZW50SWQpOwogICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9ST1dfU1RBVEUsIFJPV19TVEFURV9WQUxJRCk7CisgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX0RPQ1VNRU5UX1RZUEUsIERPQ1VNRU5UX1RZUEVfU1RPUkFHRSk7CiAgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgRG9jdW1lbnQuTUlNRV9UWVBFX0RJUik7CiAgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSwgcm9vdC5nZXRSb290TmFtZShyZXNvdXJjZXMpKTsKICAgICAgICAgdmFsdWVzLnB1dE51bGwoRG9jdW1lbnQuQ09MVU1OX1NVTU1BUlkpOwpAQCAtNDA1LDYgKzUxNCwxMyBAQAogICAgICAgICB2YWx1ZXMucHV0KERvY3VtZW50LkNPTFVNTl9GTEFHUywgMCk7CiAgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX1NJWkUsCiAgICAgICAgICAgICAgICAgKGludCkgTWF0aC5taW4ocm9vdC5tTWF4Q2FwYWNpdHkgLSByb290Lm1GcmVlU3BhY2UsIEludGVnZXIuTUFYX1ZBTFVFKSk7CisKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0KAorICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0ZMQUdTLAorICAgICAgICAgICAgICAgIFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUpOworICAgICAgICBleHRyYVZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLCByb290Lm1GcmVlU3BhY2UpOworICAgICAgICBleHRyYVZhbHVlcy5wdXQoUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMsIHJvb3QubU1heENhcGFjaXR5KTsKKyAgICAgICAgZXh0cmFWYWx1ZXMucHV0KFJvb3QuQ09MVU1OX01JTUVfVFlQRVMsICIiKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQxNCw3ICs1MzAsNyBAQAogICAgICAqIEBwYXJhbSBwYXJlbnRJZCBQYXJlbnQgZG9jdW1lbnQgSUQgb2YgdGhlIG9iamVjdC4KICAgICAgKiBAcGFyYW0gaW5mbyBNVFAgb2JqZWN0IGluZm8uCiAgICAgICovCi0gICAgc3RhdGljIHZvaWQgZ2V0Q2hpbGREb2N1bWVudFZhbHVlcygKKyAgICBzdGF0aWMgdm9pZCBnZXRPYmplY3REb2N1bWVudFZhbHVlcygKICAgICAgICAgICAgIENvbnRlbnRWYWx1ZXMgdmFsdWVzLCBpbnQgZGV2aWNlSWQsIFN0cmluZyBwYXJlbnRJZCwgTXRwT2JqZWN0SW5mbyBpbmZvKSB7CiAgICAgICAgIHZhbHVlcy5jbGVhcigpOwogICAgICAgICBmaW5hbCBTdHJpbmcgbWltZVR5cGUgPSBpbmZvLmdldEZvcm1hdCgpID09IE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04gPwpAQCAtNDM2LDYgKzU1Miw3IEBACiAgICAgICAgIHZhbHVlcy5wdXQoQ09MVU1OX09CSkVDVF9IQU5ETEUsIGluZm8uZ2V0T2JqZWN0SGFuZGxlKCkpOwogICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQsIHBhcmVudElkKTsKICAgICAgICAgdmFsdWVzLnB1dChDT0xVTU5fUk9XX1NUQVRFLCBST1dfU1RBVEVfVkFMSUQpOworICAgICAgICB2YWx1ZXMucHV0KENPTFVNTl9ET0NVTUVOVF9UWVBFLCBET0NVTUVOVF9UWVBFX09CSkVDVCk7CiAgICAgICAgIHZhbHVlcy5wdXQoRG9jdW1lbnQuQ09MVU1OX01JTUVfVFlQRSwgbWltZVR5cGUpOwogICAgICAgICB2YWx1ZXMucHV0KERvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUsIGluZm8uZ2V0TmFtZSgpKTsKICAgICAgICAgdmFsdWVzLnB1dE51bGwoRG9jdW1lbnQuQ09MVU1OX1NVTU1BUlkpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZUNvbnN0YW50cy5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZUNvbnN0YW50cy5qYXZhCmluZGV4IDBlYWQyZDUuLmYyNTJlMGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2VDb25zdGFudHMuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlQ29uc3RhbnRzLmphdmEKQEAgLTE2LDkgKzE2LDEzIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQubXRwOwogCitpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlUXVlcnlCdWlsZGVyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdC5Sb290OwogCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKwogLyoqCiAgKiBDbGFzcyBjb250YWluaW5nIE10cERhdGFiYXNlIGNvbnN0YW50cy4KICAqLwpAQCAtNDEsMTQgKzQ1LDE5IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUJMRV9ST09UX0VYVFJBID0gIlJvb3RFeHRyYSI7CiAKICAgICAvKioKLSAgICAgKiBWaWV3IHRvIGpvaW4gRG9jdW1lbnRzIGFuZCBSb290RXh0cmEgdGFibGVzIHRvIHByb3ZpZGUgcm9vdHMgaW5mb3JtYXRpb24uCisgICAgICogJ0ZST00nIGNsb3N1cmUgb2Ygam9pbmluZyBUQUJMRV9ET0NVTUVOVFMgYW5kIFRBQkxFX1JPT1RfRVhUUkEuCiAgICAgICovCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBWSUVXX1JPT1RTID0gIlJvb3RzIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEpPSU5fUk9PVFMgPSBjcmVhdGVKb2luRnJvbUNsb3N1cmUoCisgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMsCisgICAgICAgICAgICBUQUJMRV9ST09UX0VYVFJBLAorICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lELAorICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCk7CiAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTFVNTl9ERVZJQ0VfSUQgPSAiZGV2aWNlX2lkIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTFVNTl9TVE9SQUdFX0lEID0gInN0b3JhZ2VfaWQiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MVU1OX09CSkVDVF9IQU5ETEUgPSAib2JqZWN0X2hhbmRsZSI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xVTU5fUEFSRU5UX0RPQ1VNRU5UX0lEID0gInBhcmVudF9kb2N1bWVudF9pZCI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xVTU5fRE9DVU1FTlRfVFlQRSA9ICJkb2N1bWVudF90eXBlIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTFVNTl9ST1dfU1RBVEUgPSAicm93X3N0YXRlIjsKIAogICAgIC8qKgpAQCAtODMsMTEgKzkyLDIzIEBACiAgICAgICovCiAgICAgc3RhdGljIGZpbmFsIGludCBNQVBfQllfTkFNRSA9IDE7CiAKKyAgICAvKioKKyAgICAgKiBEb2N1bWVudCB0aGF0IHJlcHJlc2VudHMgYSBNVFAgZGV2aWNlLgorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgRE9DVU1FTlRfVFlQRV9ERVZJQ0UgPSAwOworCisgICAgLyoqCisgICAgICogRG9jdW1lbnQgdGhhdCByZXByZXNlbnRzIGEgTVRQIHN0b3JhZ2UuCisgICAgICovCisgICAgc3RhdGljIGZpbmFsIGludCBET0NVTUVOVF9UWVBFX1NUT1JBR0UgPSAxOworCisgICAgLyoqCisgICAgICogRG9jdW1lbnQgdGhhdCByZXByZXNlbnRzIGEgTVRQIG9iamVjdC4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IERPQ1VNRU5UX1RZUEVfT0JKRUNUID0gMjsKKwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUSU9OX0RPQ1VNRU5UX0lEID0gRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEICsgIiA9ID8iOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUSU9OX1JPT1RfSUQgPSBSb290LkNPTFVNTl9ST09UX0lEICsgIiA9ID8iOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUSU9OX1JPT1RfRE9DVU1FTlRTID0KLSAgICAgICAgICAgIENPTFVNTl9ERVZJQ0VfSUQgKyAiID0gPyBBTkQgIiArIENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiIElTIE5VTEwiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VMRUNUSU9OX0NISUxEX0RPQ1VNRU5UUyA9IENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiID0gPyI7CiAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0NSRUFURV9ET0NVTUVOVFMgPQogICAgICAgICAgICAgIkNSRUFURSBUQUJMRSAiICsgVEFCTEVfRE9DVU1FTlRTICsgIiAoIiArCkBAIC05OCw0NyArMTE5LDU3IEBACiAgICAgICAgICAgICBDT0xVTU5fT0JKRUNUX0hBTkRMRSArICIgSU5URUdFUiwiICsKICAgICAgICAgICAgIENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiIElOVEVHRVIsIiArCiAgICAgICAgICAgICBDT0xVTU5fUk9XX1NUQVRFICsgIiBJTlRFR0VSIE5PVCBOVUxMLCIgKworICAgICAgICAgICAgQ09MVU1OX0RPQ1VNRU5UX1RZUEUgKyAiIElOVEVHRVIgTk9UIE5VTEwsIiArCiAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fTUlNRV9UWVBFICsgIiBURVhULCIgKwogICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSArICIgVEVYVCBOT1QgTlVMTCwiICsKICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9TVU1NQVJZICsgIiBURVhULCIgKwogICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQgKyAiIElOVEVHRVIsIiArCiAgICAgICAgICAgICBEb2N1bWVudC5DT0xVTU5fSUNPTiArICIgSU5URUdFUiwiICsKICAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9GTEFHUyArICIgSU5URUdFUiBOT1QgTlVMTCwiICsKLSAgICAgICAgICAgIERvY3VtZW50LkNPTFVNTl9TSVpFICsgIiBJTlRFR0VSIE5PVCBOVUxMKTsiOworICAgICAgICAgICAgRG9jdW1lbnQuQ09MVU1OX1NJWkUgKyAiIElOVEVHRVIpOyI7CiAKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFFVRVJZX0NSRUFURV9ST09UX0VYVFJBID0KICAgICAgICAgICAgICJDUkVBVEUgVEFCTEUgIiArIFRBQkxFX1JPT1RfRVhUUkEgKyAiICgiICsKICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQgKyAiIElOVEVHRVIgUFJJTUFSWSBLRVksIiArCiAgICAgICAgICAgICBSb290LkNPTFVNTl9GTEFHUyArICIgSU5URUdFUiBOT1QgTlVMTCwiICsKLSAgICAgICAgICAgIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUyArICIgSU5URUdFUiBOT1QgTlVMTCwiICsKLSAgICAgICAgICAgIFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTICsgIiBJTlRFR0VSIE5PVCBOVUxMLCIgKworICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTICsgIiBJTlRFR0VSLCIgKworICAgICAgICAgICAgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMgKyAiIElOVEVHRVIsIiArCiAgICAgICAgICAgICBSb290LkNPTFVNTl9NSU1FX1RZUEVTICsgIiBURVhUIE5PVCBOVUxMKTsiOwogCiAgICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIHZpZXcgdG8gam9pbiBEb2N1bWVudHMgdGFibGUgYW5kIFJvb3RFeHRyYSB0YWJsZSBvbiB0aGVpciBwcmltYXJ5IGtleXMgdG8KLSAgICAgKiBwcm92aWRlIERvY3VtZW50Q29udHJhY3QuUm9vdCBlcXVpdmFsZW50IGluZm9ybWF0aW9uLgorICAgICAqIE1hcCBmb3IgY29sdW1ucyBuYW1lcyB0byBwcm92aWRlIERvY3VtZW50Q29udHJhY3QuUm9vdCBjb21wYXRpYmxlIGNvbHVtbnMuCisgICAgICogQHNlZSBTUUxpdGVRdWVyeUJ1aWxkZXIjc2V0UHJvamVjdGlvbk1hcChNYXApCiAgICAgICovCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBRVUVSWV9DUkVBVEVfVklFV19ST09UUyA9Ci0gICAgICAgICAgICAiQ1JFQVRFIFZJRVcgIiArIFZJRVdfUk9PVFMgKyAiIEFTIFNFTEVDVCAiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEICsgIiBBUyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9ST09UX0lEICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfUk9PVF9FWFRSQSArICIuIiArIFJvb3QuQ09MVU1OX0ZMQUdTICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0lDT04gKyAiIEFTICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0lDT04gKyAiLCIgKwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fRElTUExBWV9OQU1FICsgIiBBUyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9USVRMRSArICIsIiArCi0gICAgICAgICAgICAgICAgICAgIFRBQkxFX0RPQ1VNRU5UUyArICIuIiArIERvY3VtZW50LkNPTFVNTl9TVU1NQVJZICsgIiBBUyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9TVU1NQVJZICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0RPQ1VNRU5UX0lEICsgIiBBUyAiICsKLSAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fRE9DVU1FTlRfSUQgKyAiLCIgKwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9ST09UX0VYVFJBICsgIi4iICsgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfUk9PVF9FWFRSQSArICIuIiArIFJvb3QuQ09MVU1OX0NBUEFDSVRZX0JZVEVTICsgIiwiICsKLSAgICAgICAgICAgICAgICAgICAgVEFCTEVfUk9PVF9FWFRSQSArICIuIiArIFJvb3QuQ09MVU1OX01JTUVfVFlQRVMgKyAiLCIgKwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBDT0xVTU5fUk9XX1NUQVRFICsKLSAgICAgICAgICAgICIgRlJPTSAiICsgVEFCTEVfRE9DVU1FTlRTICsgIiBJTk5FUiBKT0lOICIgKyBUQUJMRV9ST09UX0VYVFJBICsKLSAgICAgICAgICAgICIgT04gIiArCi0gICAgICAgICAgICAgICAgICAgIENPTFVNTl9QQVJFTlRfRE9DVU1FTlRfSUQgKyAiIElTIE5VTEwgQU5EICIgKwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQgKwotICAgICAgICAgICAgICAgICAgICAiPSIgKwotICAgICAgICAgICAgICAgICAgICBUQUJMRV9ST09UX0VYVFJBICsgIi4iICsgUm9vdC5DT0xVTU5fUk9PVF9JRDsKKyAgICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBDT0xVTU5fTUFQX1JPT1RTOworICAgIHN0YXRpYyB7CisgICAgICAgIENPTFVNTl9NQVBfUk9PVFMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KFJvb3QuQ09MVU1OX1JPT1RfSUQsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9ST09UX0lEKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoUm9vdC5DT0xVTU5fRkxBR1MsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9GTEFHUyk7CisgICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KAorICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0lDT04sCisgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0lDT04gKyAiIEFTICIgKyBSb290LkNPTFVNTl9JQ09OKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fVElUTEUsCisgICAgICAgICAgICAgICAgVEFCTEVfRE9DVU1FTlRTICsgIi4iICsgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSArICIgQVMgIiArIFJvb3QuQ09MVU1OX1RJVExFKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fU1VNTUFSWSwKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fU1VNTUFSWSArICIgQVMgIiArIFJvb3QuQ09MVU1OX1NVTU1BUlkpOworICAgICAgICBDT0xVTU5fTUFQX1JPT1RTLnB1dCgKKyAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9ET0NVTUVOVF9JRCwKKyAgICAgICAgICAgICAgICBUQUJMRV9ET0NVTUVOVFMgKyAiLiIgKyBEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQgKworICAgICAgICAgICAgICAgICIgQVMgIiArIFJvb3QuQ09MVU1OX0RPQ1VNRU5UX0lEKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLCBUQUJMRV9ST09UX0VYVFJBICsgIi4iICsgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoCisgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUyk7CisgICAgICAgIENPTFVNTl9NQVBfUk9PVFMucHV0KAorICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX01JTUVfVFlQRVMsIFRBQkxFX1JPT1RfRVhUUkEgKyAiLiIgKyBSb290LkNPTFVNTl9NSU1FX1RZUEVTKTsKKyAgICAgICAgQ09MVU1OX01BUF9ST09UUy5wdXQoQ09MVU1OX0RFVklDRV9JRCwgQ09MVU1OX0RFVklDRV9JRCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNyZWF0ZUpvaW5Gcm9tQ2xvc3VyZSgKKyAgICAgICAgICAgIFN0cmluZyB0YWJsZTEsIFN0cmluZyB0YWJsZTIsIFN0cmluZyBjb2x1bW4xLCBTdHJpbmcgY29sdW1uMikgeworICAgICAgICByZXR1cm4gdGFibGUxICsgIiBJTk5FUiBKT0lOICIgKyB0YWJsZTIgKworICAgICAgICAgICAgICAgICIgT04gIiArIHRhYmxlMSArICIuIiArIGNvbHVtbjEgKyAiID0gIiArIHRhYmxlMiArICIuIiArIGNvbHVtbjI7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEZXZpY2VSZWNvcmQuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGV2aWNlUmVjb3JkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJkMDdiOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGV2aWNlUmVjb3JkLmphdmEKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQubXRwOworCitjbGFzcyBNdHBEZXZpY2VSZWNvcmQgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgZGV2aWNlSWQ7CisgICAgcHVibGljIGZpbmFsIFN0cmluZyBuYW1lOworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIG9wZW5lZDsKKyAgICBwdWJsaWMgZmluYWwgTXRwUm9vdFtdIHJvb3RzOworICAgIHB1YmxpYyBmaW5hbCBpbnRbXSBvcGVyYXRpb25zU3VwcG9ydGVkOworCisgICAgTXRwRGV2aWNlUmVjb3JkKAorICAgICAgICAgICAgaW50IGRldmljZUlkLCBTdHJpbmcgbmFtZSwgYm9vbGVhbiBvcGVuZWQsIE10cFJvb3RbXSByb290cywgaW50W10gb3BlcmF0aW9uc1N1cHBvcnRlZCkgeworICAgICAgICB0aGlzLmRldmljZUlkID0gZGV2aWNlSWQ7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMub3BlbmVkID0gb3BlbmVkOworICAgICAgICB0aGlzLnJvb3RzID0gcm9vdHM7CisgICAgICAgIHRoaXMub3BlcmF0aW9uc1N1cHBvcnRlZCA9IG9wZXJhdGlvbnNTdXBwb3J0ZWQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlci5qYXZhCmluZGV4IGQ1ZjAwZTYuLjM1NzM1MzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXIuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cERvY3VtZW50c1Byb3ZpZGVyLmphdmEKQEAgLTE5MCw5ICsxOTAsNiBAQAogICAgICAgICAgICAgZ2V0RG9jdW1lbnRMb2FkZXIocGFyZW50SWRlbnRpZmllcikuY2xlYXJUYXNrKHBhcmVudElkZW50aWZpZXIpOwogICAgICAgICAgICAgbm90aWZ5Q2hpbGREb2N1bWVudHNDaGFuZ2UocGFyZW50SWRlbnRpZmllci5tRG9jdW1lbnRJZCk7CiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGVycm9yKSB7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIFN0YWNrVHJhY2VFbGVtZW50IGVsZW1lbnQgOiBlcnJvci5nZXRTdGFja1RyYWNlKCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuZSgiaGlyb25vIiwgZWxlbWVudC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oZXJyb3IuZ2V0TWVzc2FnZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI0OCw5ICsyNDUsOCBAQAogICAgIHZvaWQgY2xvc2VEZXZpY2UoaW50IGRldmljZUlkKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKICAgICAgICAgc3luY2hyb25pemVkIChtRGV2aWNlTGlzdExvY2spIHsKICAgICAgICAgICAgIGNsb3NlRGV2aWNlSW50ZXJuYWwoZGV2aWNlSWQpOwotICAgICAgICAgICAgbURhdGFiYXNlLnJlbW92ZURldmljZVJvd3MoZGV2aWNlSWQpOwogICAgICAgICB9Ci0gICAgICAgIG1Sb290U2Nhbm5lci5ub3RpZnlDaGFuZ2UoKTsKKyAgICAgICAgbVJvb3RTY2FubmVyLnJlc3VtZSgpOwogICAgIH0KIAogICAgIGludFtdIGdldE9wZW5lZERldmljZUlkcygpIHsKQEAgLTI2MSw3ICsyNTcsMTIgQEAKIAogICAgIFN0cmluZyBnZXREZXZpY2VOYW1lKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgc3luY2hyb25pemVkIChtRGV2aWNlTGlzdExvY2spIHsKLSAgICAgICAgICAgIHJldHVybiBtTXRwTWFuYWdlci5nZXREZXZpY2VOYW1lKGRldmljZUlkKTsKKyAgICAgICAgICAgIGZvciAoZmluYWwgTXRwRGV2aWNlUmVjb3JkIGRldmljZSA6IG1NdHBNYW5hZ2VyLmdldERldmljZXMoKSkgeworICAgICAgICAgICAgICAgIGlmIChkZXZpY2UuZGV2aWNlSWQgPT0gZGV2aWNlSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldmljZS5uYW1lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiTm90IGZvdW5kIHRoZSBkZXZpY2U6ICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGRldmljZUlkKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI5MywxOSArMjk0LDExIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogUmVvcGVucyBNVFAgZGV2aWNlcyBiYXNlZCBvbiBkYXRhYmFzZSBzdGF0ZS4KKyAgICAgKiBDbGVhcnMgTVRQIGlkZW50aWZpZXIgaW4gdGhlIGRhdGFiYXNlLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCByZXN1bWUoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobURldmljZUxpc3RMb2NrKSB7CiAgICAgICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnRbXSBpZHMgPSBtRGF0YWJhc2UuZ2V0RGV2aWNlSWRzKCk7Ci0gICAgICAgICAgICBmb3IgKGZpbmFsIGludCBpZCA6IGlkcykgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wZW5EZXZpY2UoaWQpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICBtRGF0YWJhc2UucmVtb3ZlRGV2aWNlUm93cyhpZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL010cE1hbmFnZXIuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlci5qYXZhCmluZGV4IGU3Zjk0YjcuLjljNzI2YmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlci5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlci5qYXZhCkBAIC0xNywyMSArMTcsMjYgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQubXRwOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiQ29uc3RhbnRzOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYkRldmljZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi5Vc2JEZXZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYkludGVyZmFjZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi5Vc2JNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubXRwLk10cENvbnN0YW50czsKIGltcG9ydCBhbmRyb2lkLm10cC5NdHBEZXZpY2U7CitpbXBvcnQgYW5kcm9pZC5tdHAuTXRwRGV2aWNlSW5mbzsKIGltcG9ydCBhbmRyb2lkLm10cC5NdHBFdmVudDsKIGltcG9ydCBhbmRyb2lkLm10cC5NdHBPYmplY3RJbmZvOwogaW1wb3J0IGFuZHJvaWQub3MuQ2FuY2VsbGF0aW9uU2lnbmFsOwogaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5WaXNpYmxlRm9yVGVzdGluZzsKIAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogLyoqCiAgKiBUaGUgbW9kZWwgd3JhcHBpbmcgYW5kcm9pZC5tdHAgQVBJLgpAQCAtMzksNiArNDQsMjcgQEAKIGNsYXNzIE10cE1hbmFnZXIgewogICAgIGZpbmFsIHN0YXRpYyBpbnQgT0JKRUNUX0hBTkRMRV9ST09UX0NISUxEUkVOID0gLTE7CiAKKyAgICAvKioKKyAgICAgKiBTdWJjbGFzcyBmb3IgUFRQLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVUJDTEFTU19TVElMTF9JTUFHRV9DQVBUVVJFID0gMTsKKworICAgIC8qKgorICAgICAqIFN1YmNsYXNzIGZvciBBbmRyb2lkIHN0eWxlIE1UUC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1VCQ0xBU1NfTVRQID0gMHhmZjsKKworICAgIC8qKgorICAgICAqIFByb3RvY29sIGZvciBQaWN0dXJlIFRyYW5zZmVyIFByb3RvY29sIChQSU1BIDE1NDcwKS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUFJPVE9DT0xfUElDVFVSRV9UUkFOU0ZFUiA9IDE7CisKKyAgICAvKioKKyAgICAgKiBQcm90b2NvbCBmb3IgQW5kcm9pZCBzdHlsZSBNVFAuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBST1RPQ09MX01UUCA9IDA7CisKKwogICAgIHByaXZhdGUgZmluYWwgVXNiTWFuYWdlciBtTWFuYWdlcjsKICAgICAvLyBUT0RPOiBTYXZlIGFuZCByZXN0b3JlIHRoZSBzZXQgb2Ygb3BlbmVkIGRldmljZS4KICAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PE10cERldmljZT4gbURldmljZXMgPSBuZXcgU3BhcnNlQXJyYXk8PigpOwpAQCAtOTIsNiArMTE4LDQ0IEBACiAgICAgICAgIG1EZXZpY2VzLnJlbW92ZShkZXZpY2VJZCk7CiAgICAgfQogCisgICAgc3luY2hyb25pemVkIE10cERldmljZVJlY29yZFtdIGdldERldmljZXMoKSB7CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxNdHBEZXZpY2VSZWNvcmQ+IGRldmljZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgZm9yIChVc2JEZXZpY2UgZGV2aWNlIDogbU1hbmFnZXIuZ2V0RGV2aWNlTGlzdCgpLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAoIWlzTXRwRGV2aWNlKGRldmljZSkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIE10cERldmljZSBtdHBEZXZpY2UgPSBtRGV2aWNlcy5nZXQoZGV2aWNlLmdldERldmljZUlkKCkpOworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBvcGVuZWQgPSBtdHBEZXZpY2UgIT0gbnVsbDsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gZGV2aWNlLmdldFByb2R1Y3ROYW1lKCk7CisgICAgICAgICAgICBNdHBSb290W10gcm9vdHM7CisgICAgICAgICAgICBpbnRbXSBvcGVyYXRpb25zU3VwcG9ydGVkID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChvcGVuZWQpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByb290cyA9IGdldFJvb3RzKGRldmljZS5nZXREZXZpY2VJZCgpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBleHApIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoTXRwRG9jdW1lbnRzUHJvdmlkZXIuVEFHLCBleHAuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIGZldGNoIHJvb3RzIGZvciB0aGUgZGV2aWNlLCB3ZSBzdGlsbCByZXR1cm5zIGRldmljZSBtb2RlbAorICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIGFuIGVtcHR5IHNldCBvZiByb290cyBzbyB0aGF0IHRoZSBkZXZpY2UgaXMgc2hvd24gRG9jdW1lbnRzVUkgYXMgbG9uZyBhcworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZGV2aWNlIGlzIHBoeXNpY2FsbHkgY29ubmVjdGVkLgorICAgICAgICAgICAgICAgICAgICByb290cyA9IG5ldyBNdHBSb290WzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaW5hbCBNdHBEZXZpY2VJbmZvIGluZm8gPSBtdHBEZXZpY2UuZ2V0RGV2aWNlSW5mbygpOworICAgICAgICAgICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uc1N1cHBvcnRlZCA9IG10cERldmljZS5nZXREZXZpY2VJbmZvKCkuZ2V0T3BlcmF0aW9uc1N1cHBvcnRlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uc1N1cHBvcnRlZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnNTdXBwb3J0ZWQgPSBuZXcgaW50WzBdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcm9vdHMgPSBuZXcgTXRwUm9vdFswXTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zU3VwcG9ydGVkID0gbmV3IGludFswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldmljZXMuYWRkKG5ldyBNdHBEZXZpY2VSZWNvcmQoCisgICAgICAgICAgICAgICAgICAgIGRldmljZS5nZXREZXZpY2VJZCgpLCBuYW1lLCBvcGVuZWQsIHJvb3RzLCBvcGVyYXRpb25zU3VwcG9ydGVkKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGRldmljZXMudG9BcnJheShuZXcgTXRwRGV2aWNlUmVjb3JkW2RldmljZXMuc2l6ZSgpXSk7CisgICAgfQorCiAgICAgc3luY2hyb25pemVkIGludFtdIGdldE9wZW5lZERldmljZUlkcygpIHsKICAgICAgICAgZmluYWwgaW50W10gcmVzdWx0ID0gbmV3IGludFttRGV2aWNlcy5zaXplKCldOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykgewpAQCAtMTAwLDI4ICsxNjQsNiBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFN0cmluZyBnZXREZXZpY2VOYW1lKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIGdldERldmljZShkZXZpY2VJZCkuZ2V0RGV2aWNlSW5mbygpLmdldE1vZGVsKCk7Ci0gICAgfQotCi0gICAgTXRwUm9vdFtdIGdldFJvb3RzKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgTXRwRGV2aWNlIGRldmljZSA9IGdldERldmljZShkZXZpY2VJZCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoZGV2aWNlKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnRbXSBzdG9yYWdlSWRzID0gZGV2aWNlLmdldFN0b3JhZ2VJZHMoKTsKLSAgICAgICAgICAgIGlmIChzdG9yYWdlSWRzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkZhaWxlZCB0byBvYnRhaW4gc3RvcmFnZSBJRHMuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBNdHBSb290W10gcmVzdWx0cyA9IG5ldyBNdHBSb290W3N0b3JhZ2VJZHMubGVuZ3RoXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RvcmFnZUlkcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBuZXcgTXRwUm9vdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZS5nZXREZXZpY2VJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmdldERldmljZUluZm8oKS5nZXRNb2RlbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmdldFN0b3JhZ2VJbmZvKHN0b3JhZ2VJZHNbaV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHRzOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgTXRwT2JqZWN0SW5mbyBnZXRPYmplY3RJbmZvKGludCBkZXZpY2VJZCwgaW50IG9iamVjdEhhbmRsZSkKICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIE10cERldmljZSBkZXZpY2UgPSBnZXREZXZpY2UoZGV2aWNlSWQpOwpAQCAtMjEyLDQgKzI1NCw0MCBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZXZpY2U7CiAgICAgfQorCisgICAgcHJpdmF0ZSBNdHBSb290W10gZ2V0Um9vdHMoaW50IGRldmljZUlkKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBNdHBEZXZpY2UgZGV2aWNlID0gZ2V0RGV2aWNlKGRldmljZUlkKTsKKyAgICAgICAgc3luY2hyb25pemVkIChkZXZpY2UpIHsKKyAgICAgICAgICAgIGZpbmFsIGludFtdIHN0b3JhZ2VJZHMgPSBkZXZpY2UuZ2V0U3RvcmFnZUlkcygpOworICAgICAgICAgICAgaWYgKHN0b3JhZ2VJZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiRmFpbGVkIHRvIG9idGFpbiBzdG9yYWdlIElEcy4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIE10cFJvb3RbXSByZXN1bHRzID0gbmV3IE10cFJvb3Rbc3RvcmFnZUlkcy5sZW5ndGhdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdG9yYWdlSWRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0c1tpXSA9IG5ldyBNdHBSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmdldERldmljZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuZ2V0RGV2aWNlSW5mbygpLmdldE1vZGVsKCksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UuZ2V0U3RvcmFnZUluZm8oc3RvcmFnZUlkc1tpXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbGVhbiBpc010cERldmljZShVc2JEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGV2aWNlLmdldEludGVyZmFjZUNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgZmluYWwgVXNiSW50ZXJmYWNlIHVzYkludGVyZmFjZSA9IGRldmljZS5nZXRJbnRlcmZhY2UoaSk7CisgICAgICAgICAgICBpZiAoKHVzYkludGVyZmFjZS5nZXRJbnRlcmZhY2VDbGFzcygpID09IFVzYkNvbnN0YW50cy5VU0JfQ0xBU1NfU1RJTExfSU1BR0UgJiYKKyAgICAgICAgICAgICAgICAgICAgdXNiSW50ZXJmYWNlLmdldEludGVyZmFjZVN1YmNsYXNzKCkgPT0gU1VCQ0xBU1NfU1RJTExfSU1BR0VfQ0FQVFVSRSAmJgorICAgICAgICAgICAgICAgICAgICB1c2JJbnRlcmZhY2UuZ2V0SW50ZXJmYWNlUHJvdG9jb2woKSA9PSBQUk9UT0NPTF9QSUNUVVJFX1RSQU5TRkVSKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVzYkludGVyZmFjZS5nZXRJbnRlcmZhY2VDbGFzcygpID09IFVzYkNvbnN0YW50cy5VU0JfU1VCQ0xBU1NfVkVORE9SX1NQRUMgJiYKKyAgICAgICAgICAgICAgICAgICAgdXNiSW50ZXJmYWNlLmdldEludGVyZmFjZVN1YmNsYXNzKCkgPT0gU1VCQ0xBU1NfTVRQICYmCisgICAgICAgICAgICAgICAgICAgIHVzYkludGVyZmFjZS5nZXRJbnRlcmZhY2VQcm90b2NvbCgpID09IFBST1RPQ09MX01UUCAmJgorICAgICAgICAgICAgICAgICAgICB1c2JJbnRlcmZhY2UuZ2V0TmFtZSgpLmVxdWFscygiTVRQIikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9Sb290U2Nhbm5lci5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL210cC9Sb290U2Nhbm5lci5qYXZhCmluZGV4IGRmMmFiMDEuLjE1YjhlZjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9tdHAvUm9vdFNjYW5uZXIuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvbXRwL1Jvb3RTY2FubmVyLmphdmEKQEAgLTIsMTMgKzIsMTEgQEAKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5zcWxpdGUuU1FMaXRlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5Eb2N1bWVudHNDb250cmFjdDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2s7CkBAIC0xMDQsMzIgKzEwMiwzNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICBQcm9jZXNzLnNldFRocmVhZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQpOwogICAgICAgICAgICAgaW50IHBvbGxpbmdDb3VudCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoIVRocmVhZC5pbnRlcnJ1cHRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50W10gZGV2aWNlSWRzID0gbU1hbmFnZXIuZ2V0T3BlbmVkRGV2aWNlSWRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGRldmljZUlkcy5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBkZXZpY2VJZCA6IGRldmljZUlkcykgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTXRwUm9vdFtdIHJvb3RzID0gbU1hbmFnZXIuZ2V0Um9vdHMoZGV2aWNlSWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cyhkZXZpY2VJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZUlkLCBtUmVzb3VyY2VzLCByb290cykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdSb290RG9jdW1lbnRzKGRldmljZUlkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgU1FMaXRlRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVycm9yIG1heSBoYXBwZW4gb24gdGhlIGRldmljZS4gV2Ugd291bGQgbGlrZSB0byBjb250aW51ZSBnZXR0aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyByb290cyBmb3Igb3RoZXIgZGV2aWNlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKE10cERvY3VtZW50c1Byb3ZpZGVyLlRBRywgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICBmaW5hbCBNdHBEZXZpY2VSZWNvcmRbXSBkZXZpY2VzID0gbU1hbmFnZXIuZ2V0RGV2aWNlcygpOworICAgICAgICAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhudWxsIC8qIHBhcmVudERvY3VtZW50SWQgKi8pOworICAgICAgICAgICAgICAgIGZvciAoZmluYWwgTXRwRGV2aWNlUmVjb3JkIGRldmljZSA6IGRldmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXREZXZpY2VEb2N1bWVudChkZXZpY2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCAvKiBwYXJlbnREb2N1bWVudElkICovKSkgeworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcm9vdHMuCisgICAgICAgICAgICAgICAgZm9yIChmaW5hbCBNdHBEZXZpY2VSZWNvcmQgZGV2aWNlIDogZGV2aWNlcykgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgZG9jdW1lbnRJZCA9IG1EYXRhYmFzZS5nZXREb2N1bWVudElkRm9yRGV2aWNlKGRldmljZS5kZXZpY2VJZCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudElkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhkb2N1bWVudElkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQsIG1SZXNvdXJjZXMsIGRldmljZS5yb290cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cyhkb2N1bWVudElkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgICAgICAgICBub3RpZnlDaGFuZ2UoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDEsOCArMTQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKHBvbGxpbmdDb3VudCA+IFNIT1JUX1BPTExJTkdfVElNRVMgPwogICAgICAgICAgICAgICAgICAgICAgICAgTE9OR19QT0xMSU5HX0lOVEVSVkFMIDogU0hPUlRfUE9MTElOR19JTlRFUlZBTCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB3aGlsZSBjb25kaXRpb24gaGFuZGxlcyB0aGUgaW50ZXJydXB0ZWQgZmxhZy4KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9BcHBGdXNlVGVzdC5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9BcHBGdXNlVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmQyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL0FwcEZ1c2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLm10cDsKKworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7CitpbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3lzdGVtLkVycm5vRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuc3lzdGVtLk9zOworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCisvKioKKyAqIFRPRE86IEVuYWJsZSB0aGlzIHRlc3QgYWZ0ZXIgYWRkaW5nIFNFTGludXggcG9saWNpZXMgZm9yIGFwcGZ1c2UuCisgKi8KK0BNZWRpdW1UZXN0CitwdWJsaWMgY2xhc3MgQXBwRnVzZVRlc3QgZXh0ZW5kcyBBbmRyb2lkVGVzdENhc2UgeworCisgICAgcHVibGljIHZvaWQgZGlzYWJsZWRfdGVzdE1vdW50KCkgdGhyb3dzIEVycm5vRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0b3JhZ2VNYW5hZ2VyIHN0b3JhZ2VNYW5hZ2VyID0gZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoU3RvcmFnZU1hbmFnZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBBcHBGdXNlIGFwcEZ1c2UgPSBuZXcgQXBwRnVzZSgidGVzdCIsIG5ldyBUZXN0Q2FsbGJhY2soKSk7CisgICAgICAgIGFwcEZ1c2UubW91bnQoc3RvcmFnZU1hbmFnZXIpOworICAgICAgICBmaW5hbCBGaWxlIGZpbGUgPSBhcHBGdXNlLmdldE1vdW50UG9pbnQoKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShmaWxlLmlzRGlyZWN0b3J5KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgT3Muc3RhdChmaWxlLmdldFBhdGgoKSkuc3RfaW5vKTsKKyAgICAgICAgYXBwRnVzZS5jbG9zZSgpOworICAgICAgICBhc3NlcnRUcnVlKDEgIT0gT3Muc3RhdChmaWxlLmdldFBhdGgoKSkuc3RfaW5vKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBkaXNhYmxlZF90ZXN0T3BlbkZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaW5hbCBTdG9yYWdlTWFuYWdlciBzdG9yYWdlTWFuYWdlciA9IGdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKFN0b3JhZ2VNYW5hZ2VyLmNsYXNzKTsKKyAgICAgICAgZmluYWwgaW50IElOT0RFID0gMTA7CisgICAgICAgIGZpbmFsIEFwcEZ1c2UgYXBwRnVzZSA9IG5ldyBBcHBGdXNlKAorICAgICAgICAgICAgICAgICJ0ZXN0IiwKKyAgICAgICAgICAgICAgICBuZXcgVGVzdENhbGxiYWNrKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0RmlsZVNpemUoaW50IGlub2RlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJTk9ERSA9PSBpbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxMDI0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGFwcEZ1c2UubW91bnQoc3RvcmFnZU1hbmFnZXIpOworICAgICAgICBmaW5hbCBQYXJjZWxGaWxlRGVzY3JpcHRvciBmZCA9IGFwcEZ1c2Uub3BlbkZpbGUoSU5PREUpOworICAgICAgICBmZC5jbG9zZSgpOworICAgICAgICBhcHBGdXNlLmNsb3NlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGlzYWJsZWRfdGVzdE9wZW5GaWxlX2Vycm9yKCkgeworICAgICAgICBmaW5hbCBTdG9yYWdlTWFuYWdlciBzdG9yYWdlTWFuYWdlciA9IGdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKFN0b3JhZ2VNYW5hZ2VyLmNsYXNzKTsKKyAgICAgICAgZmluYWwgaW50IElOT0RFID0gMTA7CisgICAgICAgIGZpbmFsIEFwcEZ1c2UgYXBwRnVzZSA9IG5ldyBBcHBGdXNlKCJ0ZXN0IiwgbmV3IFRlc3RDYWxsYmFjaygpKTsKKyAgICAgICAgYXBwRnVzZS5tb3VudChzdG9yYWdlTWFuYWdlcik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhcHBGdXNlLm9wZW5GaWxlKElOT0RFKTsKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIGFzc2VydFRydWUodCBpbnN0YW5jZW9mIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgYXBwRnVzZS5jbG9zZSgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGRpc2FibGVkX3Rlc3RSZWFkRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0b3JhZ2VNYW5hZ2VyIHN0b3JhZ2VNYW5hZ2VyID0gZ2V0Q29udGV4dCgpLmdldFN5c3RlbVNlcnZpY2UoU3RvcmFnZU1hbmFnZXIuY2xhc3MpOworICAgICAgICBmaW5hbCBpbnQgSU5PREUgPSAxMDsKKyAgICAgICAgZmluYWwgYnl0ZVtdIEJZVEVTID0gbmV3IGJ5dGVbXSB7ICdhJywgJ2InLCAnYycsICdkJywgJ2UnIH07CisgICAgICAgIGZpbmFsIEFwcEZ1c2UgYXBwRnVzZSA9IG5ldyBBcHBGdXNlKAorICAgICAgICAgICAgICAgICJ0ZXN0IiwKKyAgICAgICAgICAgICAgICBuZXcgVGVzdENhbGxiYWNrKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIGxvbmcgZ2V0RmlsZVNpemUoaW50IGlub2RlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm9kZSA9PSBJTk9ERSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCWVRFUy5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0RmlsZVNpemUoaW5vZGUpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBieXRlW10gZ2V0T2JqZWN0Qnl0ZXMoaW50IGlub2RlLCBsb25nIG9mZnNldCwgaW50IHNpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm9kZSA9PSBJTk9ERSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheXMuY29weU9mUmFuZ2UoQllURVMsIChpbnQpIG9mZnNldCwgKGludCkgb2Zmc2V0ICsgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0T2JqZWN0Qnl0ZXMoaW5vZGUsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgYXBwRnVzZS5tb3VudChzdG9yYWdlTWFuYWdlcik7CisgICAgICAgIGZpbmFsIFBhcmNlbEZpbGVEZXNjcmlwdG9yIGZkID0gYXBwRnVzZS5vcGVuRmlsZShJTk9ERSk7CisgICAgICAgIHRyeSAoZmluYWwgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlSW5wdXRTdHJlYW0gc3RyZWFtID0KKyAgICAgICAgICAgICAgICBuZXcgUGFyY2VsRmlsZURlc2NyaXB0b3IuQXV0b0Nsb3NlSW5wdXRTdHJlYW0oZmQpKSB7CisgICAgICAgICAgICBmaW5hbCBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMTAyNF07CisgICAgICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IHN0cmVhbS5yZWFkKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgYXBwRnVzZS5jbG9zZSgpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRlc3RDYWxsYmFjayBpbXBsZW1lbnRzIEFwcEZ1c2UuQ2FsbGJhY2sgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGxvbmcgZ2V0RmlsZVNpemUoaW50IGlub2RlKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYnl0ZVtdIGdldE9iamVjdEJ5dGVzKGludCBpbm9kZSwgbG9uZyBvZmZzZXQsIGludCBzaXplKQorICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvRG9jdW1lbnRMb2FkZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL0RvY3VtZW50TG9hZGVyVGVzdC5qYXZhCmluZGV4IGYwYjQzNDMuLmYzN2E1NWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvRG9jdW1lbnRMb2FkZXJUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9Eb2N1bWVudExvYWRlclRlc3QuamF2YQpAQCAtNDAsMTEgKzQwLDExIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB7CiAgICAgICAgIG1EYXRhYmFzZSA9IG5ldyBNdHBEYXRhYmFzZShnZXRDb250ZXh0KCksIE10cERhdGFiYXNlQ29uc3RhbnRzLkZMQUdfREFUQUJBU0VfSU5fTUVNT1JZKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgbmV3IFRlc3RSZXNvdXJjZXMoKSwgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoImRldmljZURvY0lkIiwgbmV3IFRlc3RSZXNvdXJjZXMoKSwgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMTAwMCwgIiIpCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwogICAgICAgICBtTWFuYWdlciA9IG5ldyBCbG9ja2FibGVUZXN0TXRwTWFuYWdlcihnZXRDb250ZXh0KCkpOwogICAgICAgICBtUmVzb2x2ZXIgPSBuZXcgVGVzdENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBtTG9hZGVyID0gbmV3IERvY3VtZW50TG9hZGVyKG1NYW5hZ2VyLCBtUmVzb2x2ZXIsIG1EYXRhYmFzZSk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlVGVzdC5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEYXRhYmFzZVRlc3QuamF2YQppbmRleCA2N2IwNjcyLi5jMzlkNWIzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERhdGFiYXNlVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRGF0YWJhc2VUZXN0LmphdmEKQEAgLTI3LDcgKzI3LDkgQEAKIAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuKjsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQubXRwLk10cERhdGFiYXNlLnN0cmluZ3M7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLm10cC5NdHBEYXRhYmFzZUNvbnN0YW50cy4qOwogCiBAU21hbGxUZXN0CiBwdWJsaWMgY2xhc3MgTXRwRGF0YWJhc2VUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKQEAgLTQyLDcgKzQ0LDggQEAKICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuQ09MVU1OX0xBU1RfTU9ESUZJRUQsCiAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9JQ09OLAogICAgICAgICBEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5DT0xVTU5fRkxBR1MsCi0gICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9TSVpFCisgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9TSVpFLAorICAgICAgICBNdHBEYXRhYmFzZUNvbnN0YW50cy5DT0xVTU5fRE9DVU1FTlRfVFlQRQogICAgIH07CiAKICAgICBwcml2YXRlIGZpbmFsIFRlc3RSZXNvdXJjZXMgcmVzb3VyY2VzID0gbmV3IFRlc3RSZXNvdXJjZXMoKTsKQEAgLTU5LDM4ICs2Miw0OCBAQAogICAgICAgICBtRGF0YWJhc2UgPSBudWxsOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHRlc3RQdXRSb290RG9jdW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDAsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMSwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMjAwMCwgIiIpLAotICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDIwMDAsIDQwMDAsICIiKSwKLSAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAzLCAiRGV2aWNlIiwgIi9AIyUmPD5TdG9yYWdlIiwgMzAwMCwgNjAwMCwiIikKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0SW50KEN1cnNvciBjdXJzb3IsIFN0cmluZyBjb2x1bW5OYW1lKSB7CisgICAgICAgIHJldHVybiBjdXJzb3IuZ2V0SW50KGN1cnNvci5nZXRDb2x1bW5JbmRleChjb2x1bW5OYW1lKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc051bGwoQ3Vyc29yIGN1cnNvciwgU3RyaW5nIGNvbHVtbk5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGN1cnNvci5pc051bGwoY3Vyc29yLmdldENvbHVtbkluZGV4KGNvbHVtbk5hbWUpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEN1cnNvciBjdXJzb3IsIFN0cmluZyBjb2x1bW5OYW1lKSB7CisgICAgICAgIHJldHVybiBjdXJzb3IuZ2V0U3RyaW5nKGN1cnNvci5nZXRDb2x1bW5JbmRleChjb2x1bW5OYW1lKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFB1dFNpbmdsZVN0b3JhZ2VEb2N1bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAxMDAwLCAyMDAwLCAiIikKICAgICAgICAgfSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoQ09MVU1OX05BTUVTKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjdXJzb3IuZ2V0Q291bnQoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRldmljZUlkIiwgMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInN0b3JhZ2VJZCIsIDEsIGN1cnNvci5nZXRJbnQoMikpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgib2JqZWN0SGFuZGxlIiwgY3Vyc29yLmlzTnVsbCgzKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm1pbWVUeXBlIiwgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUiwgY3Vyc29yLmdldFN0cmluZyg0KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRpc3BsYXlOYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZyg1KSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJzdW1tYXJ5IiwgY3Vyc29yLmlzTnVsbCg2KSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJsYXN0TW9kaWZpZWQiLCBjdXJzb3IuaXNOdWxsKDcpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiaWNvbiIsIFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGN1cnNvci5nZXRJbnQoOCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJmbGFnIiwgMCwgY3Vyc29yLmdldEludCg5KSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInNpemUiLCAxMDAwLCBjdXJzb3IuZ2V0SW50KDEwKSk7Ci0KLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZGlzcGxheU5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UiLCBjdXJzb3IuZ2V0U3RyaW5nKDUpKTsKLQotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDMsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkaXNwbGF5TmFtZSIsICJEZXZpY2UgL0AjJSY8PlN0b3JhZ2UiLCBjdXJzb3IuZ2V0U3RyaW5nKDUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fREVWSUNFX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5NSU1FX1RZUEVfRElSLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fTUlNRV9UWVBFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1VNTUFSWSkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fTEFTVF9NT0RJRklFRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGdldEludChjdXJzb3IsIENPTFVNTl9JQ09OKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0ZMQUdTKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NJWkUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgTXRwRGF0YWJhc2VDb25zdGFudHMuRE9DVU1FTlRfVFlQRV9TVE9SQUdFLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfVFlQRSkpOwogCiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQpAQCAtMTA2LDM3ICsxMTksNTggQEAKICAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTLAogICAgICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9DQVBBQ0lUWV9CWVRFUwogICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworCisgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fRkxBR1MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhSLmRyYXdhYmxlLmljX3Jvb3RfbXRwLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9JQ09OKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgUm9vdC5DT0xVTU5fVElUTEUpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgUm9vdC5DT0xVTU5fU1VNTUFSWSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQ0FQQUNJVFlfQllURVMpKTsKKworICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHV0U3RvcmFnZURvY3VtZW50cygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMSwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMjAwMCwgIiIpLAorICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDIwMDAsIDQwMDAsICIiKSwKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAzLCAiRGV2aWNlIiwgIi9AIyUmPD5TdG9yYWdlIiwgMzAwMCwgNjAwMCwiIikKKyAgICAgICAgfSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoQ09MVU1OX05BTUVTKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgY3Vyc29yLmdldEludCgyKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygzKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGN1cnNvci5pc051bGwoNCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRJbnQoNSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGN1cnNvci5nZXRJbnQoNikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIGN1cnNvci5nZXRJbnQoNykpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIENPTFVNTl9ERVZJQ0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fT0JKRUNUX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50Lk1JTUVfVFlQRV9ESVIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9NSU1FX1RZUEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9TVU1NQVJZKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9MQVNUX01PRElGSUVEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0lDT04pKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRkxBR1MpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU0laRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgICAgICBNdHBEYXRhYmFzZUNvbnN0YW50cy5ET0NVTUVOVF9UWVBFX1NUT1JBR0UsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9UWVBFKSk7CiAKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgY3Vyc29yLmdldEludCgyKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygzKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGN1cnNvci5pc051bGwoNCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRJbnQoNSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMDAsIGN1cnNvci5nZXRJbnQoNikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQwMDAsIGN1cnNvci5nZXRJbnQoNykpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKIAogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSb290LkZMQUdfU1VQUE9SVFNfSVNfQ0hJTEQgfCBSb290LkZMQUdfU1VQUE9SVFNfQ1JFQVRFLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscyhSLmRyYXdhYmxlLmljX3Jvb3RfbXRwLCBjdXJzb3IuZ2V0SW50KDIpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIC9AIyUmPD5TdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygzKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKGN1cnNvci5pc051bGwoNCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGN1cnNvci5nZXRJbnQoNSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMDAsIGN1cnNvci5nZXRJbnQoNikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYwMDAsIGN1cnNvci5nZXRJbnQoNykpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgL0AjJSY8PlN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CkBAIC0xNTIsNyArMTg2LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UHV0Q2hpbGREb2N1bWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoInBhcmVudElkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQiKTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dENoaWxkRG9jdW1lbnRzKDAsICJwYXJlbnRJZCIsIG5ldyBNdHBPYmplY3RJbmZvW10gewogICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KDEwMCwgIm5vdGUudHh0IiwgTXRwQ29uc3RhbnRzLkZPUk1BVF9URVhULCAxMDI0KSwKICAgICAgICAgICAgICAgICBjcmVhdGVEb2N1bWVudCgxMDEsICJpbWFnZS5qcGciLCBNdHBDb25zdGFudHMuRk9STUFUX0VYSUZfSlBFRywgMiAqIDEwMjQgKiAxMDI0KSwKQEAgLTE2Myw1NSArMTk3LDYxIEBACiAgICAgICAgIGFzc2VydEVxdWFscygzLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZGV2aWNlSWQiLCAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAwLCBjdXJzb3IuZ2V0SW50KDIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJvYmplY3RIYW5kbGUiLCAxMDAsIGN1cnNvci5nZXRJbnQoMykpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm1pbWVUeXBlIiwgInRleHQvcGxhaW4iLCBjdXJzb3IuZ2V0U3RyaW5nKDQpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJkaXNwbGF5TmFtZSIsICJub3RlLnR4dCIsIGN1cnNvci5nZXRTdHJpbmcoNSkpOwotICAgICAgICBhc3NlcnRUcnVlKCJzdW1tYXJ5IiwgY3Vyc29yLmlzTnVsbCg2KSk7Ci0gICAgICAgIGFzc2VydFRydWUoImxhc3RNb2RpZmllZCIsIGN1cnNvci5pc051bGwoNykpOwotICAgICAgICBhc3NlcnRUcnVlKCJpY29uIiwgY3Vyc29yLmlzTnVsbCg4KSk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIENPTFVNTl9ERVZJQ0VfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CisgICAgICAgIGFzc2VydEVxdWFscygidGV4dC9wbGFpbiIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9NSU1FX1RZUEUpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJub3RlLnR4dCIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1VNTUFSWSkpOworICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9MQVNUX01PRElGSUVEKSk7CisgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX0lDT04pKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgICAgICJmbGFnIiwKKyAgICAgICAgICAgICAgICBDT0xVTU5fRkxBR1MsCiAgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuRkxBR19TVVBQT1JUU19ERUxFVEUgfAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkZMQUdfU1VQUE9SVFNfV1JJVEUsCiAgICAgICAgICAgICAgICAgY3Vyc29yLmdldEludCg5KSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic2l6ZSIsIDEwMjQsIGN1cnNvci5nZXRJbnQoMTApKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMjQsIGdldEludChjdXJzb3IsIENPTFVNTl9TSVpFKSk7CisgICAgICAgIGFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICBNdHBEYXRhYmFzZUNvbnN0YW50cy5ET0NVTUVOVF9UWVBFX09CSkVDVCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX1RZUEUpKTsKIAogICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJkZXZpY2VJZCIsIDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInN0b3JhZ2VJZCIsIDAsIGN1cnNvci5nZXRJbnQoMikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm9iamVjdEhhbmRsZSIsIDEwMSwgY3Vyc29yLmdldEludCgzKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygibWltZVR5cGUiLCAiaW1hZ2UvanBlZyIsIGN1cnNvci5nZXRTdHJpbmcoNCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImRpc3BsYXlOYW1lIiwgImltYWdlLmpwZyIsIGN1cnNvci5nZXRTdHJpbmcoNSkpOwotICAgICAgICBhc3NlcnRUcnVlKCJzdW1tYXJ5IiwgY3Vyc29yLmlzTnVsbCg2KSk7Ci0gICAgICAgIGFzc2VydFRydWUoImxhc3RNb2RpZmllZCIsIGN1cnNvci5pc051bGwoNykpOwotICAgICAgICBhc3NlcnRUcnVlKCJpY29uIiwgY3Vyc29yLmlzTnVsbCg4KSk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIENPTFVNTl9ERVZJQ0VfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CisgICAgICAgIGFzc2VydEVxdWFscygxMDEsIGdldEludChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiaW1hZ2UvanBlZyIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9NSU1FX1RZUEUpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJpbWFnZS5qcGciLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CisgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX1NVTU1BUlkpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fTEFTVF9NT0RJRklFRCkpOworICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9JQ09OKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygKLSAgICAgICAgICAgICAgICAiZmxhZyIsCisgICAgICAgICAgICAgICAgQ09MVU1OX0ZMQUdTLAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkZMQUdfU1VQUE9SVFNfREVMRVRFIHwKICAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5GTEFHX1NVUFBPUlRTX1dSSVRFLAogICAgICAgICAgICAgICAgIGN1cnNvci5nZXRJbnQoOSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoInNpemUiLCAyICogMTAyNCAqIDEwMjQsIGN1cnNvci5nZXRJbnQoMTApKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIgKiAxMDI0ICogMTAyNCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NJWkUpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKAorICAgICAgICAgICAgICAgIE10cERhdGFiYXNlQ29uc3RhbnRzLkRPQ1VNRU5UX1RZUEVfT0JKRUNULCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfVFlQRSkpOwogCiAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDMsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImRldmljZUlkIiwgMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic3RvcmFnZUlkIiwgMCwgY3Vyc29yLmdldEludCgyKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygib2JqZWN0SGFuZGxlIiwgMTAyLCBjdXJzb3IuZ2V0SW50KDMpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJtaW1lVHlwZSIsICJhdWRpby9tcGVnIiwgY3Vyc29yLmdldFN0cmluZyg0KSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiZGlzcGxheU5hbWUiLCAibXVzaWMubXAzIiwgY3Vyc29yLmdldFN0cmluZyg1KSk7Ci0gICAgICAgIGFzc2VydFRydWUoInN1bW1hcnkiLCBjdXJzb3IuaXNOdWxsKDYpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgibGFzdE1vZGlmaWVkIiwgY3Vyc29yLmlzTnVsbCg3KSk7Ci0gICAgICAgIGFzc2VydFRydWUoImljb24iLCBjdXJzb3IuaXNOdWxsKDgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RFVklDRV9JRCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJhdWRpby9tcGVnIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX01JTUVfVFlQRSkpOworICAgICAgICBhc3NlcnRFcXVhbHMoIm11c2ljLm1wMyIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1VNTUFSWSkpOworICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9MQVNUX01PRElGSUVEKSk7CisgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX0lDT04pKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgICAgICJmbGFnIiwKKyAgICAgICAgICAgICAgICBDT0xVTU5fRkxBR1MsCiAgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuRkxBR19TVVBQT1JUU19ERUxFVEUgfAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkZMQUdfU1VQUE9SVFNfV1JJVEUsCiAgICAgICAgICAgICAgICAgY3Vyc29yLmdldEludCg5KSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygic2l6ZSIsIDMgKiAxMDI0ICogMTAyNCwgY3Vyc29yLmdldEludCgxMCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMyAqIDEwMjQgKiAxMDI0LCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU0laRSkpOworICAgICAgICBhc3NlcnRFcXVhbHMoCisgICAgICAgICAgICAgICAgTXRwRGF0YWJhc2VDb25zdGFudHMuRE9DVU1FTlRfVFlQRV9PQkpFQ1QsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9UWVBFKSk7CiAKICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgfQpAQCAtMjIyLDEzICsyNjIsOSBAQAogICAgICAgICAgICAgICAgIE10cERhdGFiYXNlQ29uc3RhbnRzLkNPTFVNTl9TVE9SQUdFX0lELAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUKICAgICAgICAgfTsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gcm9vdENvbHVtbnMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQsCi0gICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTCi0gICAgICAgIH07CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAxMDAwLCAwLCAiIiksCiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAxLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQiIsIDEwMDEsIDAsICIiKQogICAgICAgICB9KTsKQEAgLTIzNywyNSArMjczLDEzIEBACiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdERvY3VtZW50cyhjb2x1bW5zKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInN0b3JhZ2VJZCIsIDEwMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UgQSIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UgQSIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RvcmFnZUlkIiwgMTAxLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJEZXZpY2UgU3RvcmFnZSBCIiwgY3Vyc29yLmdldFN0cmluZygyKSk7Ci0gICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMTAwMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAxMDAxLCBjdXJzb3IuZ2V0SW50KDEpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDEsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEIiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogCkBAIC0yNjUsMzAgKzI4OSwxOCBAQAogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgic3RvcmFnZUlkIiwgY3Vyc29yLmlzTnVsbCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UgQSIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBBIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDIsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgic3RvcmFnZUlkIiwgY3Vyc29yLmlzTnVsbCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UgQiIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBCIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIAotICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMocm9vdENvbHVtbnMpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInJvb3RJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhdmFpbGFibGVCeXRlcyIsIDEwMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMiwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMTAwMSwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDAsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAyMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMjAwMCwgMCwgIiIpLAogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMiwgIkRldmljZSIsICJTdG9yYWdlIEMiLCAyMDAyLCAwLCAiIikKICAgICAgICAgfSk7CkBAIC0yOTcsNjAgKzMwOSwzMyBAQAogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgic3RvcmFnZUlkIiwgY3Vyc29yLmlzTnVsbCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UgQSIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBBIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDIsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgic3RvcmFnZUlkIiwgY3Vyc29yLmlzTnVsbCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAiRGV2aWNlIFN0b3JhZ2UgQiIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShpc051bGwoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBCIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDQsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAyMDIsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIEMiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg0LCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDIsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEMiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgY3Vyc29yLmdldENvdW50KCkpOwotICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMTAwMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAxMDAxLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInJvb3RJZCIsIDQsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhdmFpbGFibGVCeXRlcyIsIDIwMDIsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290RG9jdW1lbnRzKGNvbHVtbnMpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RvcmFnZUlkIiwgMjAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJEZXZpY2UgU3RvcmFnZSBBIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBBIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDQsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAyMDIsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIEMiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKLSAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHJvb3RDb2x1bW5zKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAyMDAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInJvb3RJZCIsIDQsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhdmFpbGFibGVCeXRlcyIsIDIwMDIsIGN1cnNvci5nZXRJbnQoMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UgQyIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzYxLDcgKzM0Niw3IEBACiAgICAgICAgICAgICAgICAgTXRwRGF0YWJhc2VDb25zdGFudHMuQ09MVU1OX09CSkVDVF9IQU5ETEUsCiAgICAgICAgICAgICAgICAgRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRQogICAgICAgICB9OwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdDaGlsZERvY3VtZW50cygicGFyZW50SWQiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJwYXJlbnRJZCIpOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Q2hpbGREb2N1bWVudHMoMCwgInBhcmVudElkIiwgbmV3IE10cE9iamVjdEluZm9bXSB7CiAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnQoMTAwLCAibm90ZS50eHQiLCBNdHBDb25zdGFudHMuRk9STUFUX1RFWFQsIDEwMjQpLAogICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KDEwMSwgImltYWdlLmpwZyIsIE10cENvbnN0YW50cy5GT1JNQVRfRVhJRl9KUEVHLCAyICogMTAyNCAqIDEwMjQpLApAQCAtMzc0LDI0ICszNTksMjQgQEAKICAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoIm9iamVjdEhhbmRsZSIsIGN1cnNvci5pc051bGwoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIm5vdGUudHh0IiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5vdGUudHh0IiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMiwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJvYmplY3RIYW5kbGUiLCBjdXJzb3IuaXNOdWxsKDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJpbWFnZS5qcGciLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiaW1hZ2UuanBnIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMywgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJvYmplY3RIYW5kbGUiLCBjdXJzb3IuaXNOdWxsKDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJtdXNpYy5tcDMiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygzLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoaXNOdWxsKGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygibXVzaWMubXAzIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogCiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0NoaWxkRG9jdW1lbnRzKCJwYXJlbnRJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoInBhcmVudElkIik7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRDaGlsZERvY3VtZW50cygwLCAicGFyZW50SWQiLCBuZXcgTXRwT2JqZWN0SW5mb1tdIHsKICAgICAgICAgICAgICAgICBjcmVhdGVEb2N1bWVudCgyMDAsICJub3RlLnR4dCIsIE10cENvbnN0YW50cy5GT1JNQVRfVEVYVCwgMTAyNCksCiAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnQoMjAzLCAidmlkZW8ubXA0IiwgTXRwQ29uc3RhbnRzLkZPUk1BVF9NUDRfQ09OVEFJTkVSLCAxMDI0KSwKQEAgLTQwMiwyOCArMzg3LDI4IEBACiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgY3Vyc29yLmdldENvdW50KCkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvUG9zaXRpb24oMyk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCA1LCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygib2JqZWN0SGFuZGxlIiwgMjAzLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJ2aWRlby5tcDQiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDMsIGdldEludChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoInZpZGVvLm1wNCIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKIAogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKCJwYXJlbnRJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQiKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Q2hpbGREb2N1bWVudHMoY29sdW1ucywgInBhcmVudElkIik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm9iamVjdEhhbmRsZSIsIDIwMCwgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAibm90ZS50eHQiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5vdGUudHh0IiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogCiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJkb2N1bWVudElkIiwgNSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm9iamVjdEhhbmRsZSIsIDIwMywgY3Vyc29yLmdldEludCgxKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIm5hbWUiLCAidmlkZW8ubXA0IiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAzLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fT0JKRUNUX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJ2aWRlby5tcDQiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzOCwyNiArNDIzLDMzIEBACiAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwKICAgICAgICAgICAgICAgICBSb290LkNPTFVNTl9BVkFJTEFCTEVfQllURVMKICAgICAgICAgfTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygxKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKLSAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDAsIDAsICIiKQorICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMobnVsbCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXREZXZpY2VEb2N1bWVudCgKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDAsICJEZXZpY2UgQSIsIHRydWUsIG5ldyBNdHBSb290WzBdLCBuZXcgaW50WzBdKSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXREZXZpY2VEb2N1bWVudCgKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKDEsICJEZXZpY2UgQiIsIHRydWUsIG5ldyBNdHBSb290WzBdLCBuZXcgaW50WzBdKSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKG51bGwpOworCisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjIiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSBBIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKICAgICAgICAgfSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDEsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMSwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjIiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDEsIDEwMCwgIkRldmljZSBCIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKICAgICAgICAgfSk7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAxMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQSBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDIsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAxMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQiBTdG9yYWdlIiwgZ2V0U3RyaW5nKGN1cnNvciwgQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIApAQCAtNDY1LDM4ICs0NTcsMzggQEAKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMCwgY3Vyc29yLmdldEludCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMywgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMiwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMCwgY3Vyc29yLmdldEludCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygxKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMiIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMjAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAyMDAwLCAwLCAiIikKICAgICAgICAgfSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDEsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIyIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgxLCAzMDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDMwMDAsIDAsICIiKQogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIyIik7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAyMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoNSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RvcmFnZUlkIiwgMzAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJEZXZpY2UgU3RvcmFnZSIsIGN1cnNvci5nZXRTdHJpbmcoMikpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogCkBAIC01MDQsMTEgKzQ5NiwxMSBAQAogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHJvb3RDb2x1bW5zKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAyMDAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg1LCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAzMDAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyg2LCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzAwMCwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTUxOSw4ICs1MTEsOCBAQAogICAgICAgICAgICAgICAgIE10cERhdGFiYXNlQ29uc3RhbnRzLkNPTFVNTl9PQkpFQ1RfSEFORExFCiAgICAgICAgIH07CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoInBhcmVudElkMSIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdDaGlsZERvY3VtZW50cygicGFyZW50SWQyIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQyIik7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRDaGlsZERvY3VtZW50cygwLCAicGFyZW50SWQxIiwgbmV3IE10cE9iamVjdEluZm9bXSB7CiAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnQoMTAwLCAibm90ZS50eHQiLCBNdHBDb25zdGFudHMuRk9STUFUX1RFWFQsIDEwMjQpLAogICAgICAgICB9KTsKQEAgLTUyOSwzMCArNTIxLDMwIEBACiAgICAgICAgIH0pOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuY2xlYXJNYXBwaW5nKCk7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoInBhcmVudElkMSIpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdDaGlsZERvY3VtZW50cygicGFyZW50SWQyIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygicGFyZW50SWQyIik7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRDaGlsZERvY3VtZW50cygwLCAicGFyZW50SWQxIiwgbmV3IE10cE9iamVjdEluZm9bXSB7CiAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnQoMjAwLCAibm90ZS50eHQiLCBNdHBDb25zdGFudHMuRk9STUFUX1RFWFQsIDEwMjQpLAogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dENoaWxkRG9jdW1lbnRzKDAsICJwYXJlbnRJZDIiLCBuZXcgTXRwT2JqZWN0SW5mb1tdIHsKICAgICAgICAgICAgICAgICBjcmVhdGVEb2N1bWVudCgyMDEsICJub3RlLnR4dCIsIE10cENvbnN0YW50cy5GT1JNQVRfVEVYVCwgMTAyNCksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKCJwYXJlbnRJZDEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoInBhcmVudElkMSIpOwogCiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlDaGlsZERvY3VtZW50cyhjb2x1bW5zLCAicGFyZW50SWQxIik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJvYmplY3RIYW5kbGUiLCAyMDAsIGN1cnNvci5nZXRJbnQoMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMCwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX09CSkVDVF9IQU5ETEUpKTsKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlDaGlsZERvY3VtZW50cyhjb2x1bW5zLCAicGFyZW50SWQyIik7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDIsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgib2JqZWN0SGFuZGxlIiwgY3Vyc29yLmlzTnVsbCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKGlzTnVsbChjdXJzb3IsIENPTFVNTl9PQkpFQ1RfSEFORExFKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2OCwzOSArNTYwLDQ0IEBACiAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTCiAgICAgICAgIH07CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgIGZhbHNlLCAgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5jbGVhck1hcHBpbmcoKTsKIAotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygwLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDIwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMjAwMCwgMCwgIiIpLAogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLmNsZWFyTWFwcGluZygpOwogCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDAsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMzAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAzMDAwLCAwLCAiIiksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAzMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMzAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhyb290Q29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygicm9vdElkIiwgMSwgY3Vyc29yLmdldEludCgwKSk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImF2YWlsYWJsZUJ5dGVzIiwgMzAwMCwgY3Vyc29yLmdldEludCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMwMDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02MTEsNjQgKzYwOCw1NCBAQAogICAgICAgICAgICAgICAgIE10cERhdGFiYXNlQ29uc3RhbnRzLkNPTFVNTl9TVE9SQUdFX0lELAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LkRvY3VtZW50LkNPTFVNTl9ESVNQTEFZX05BTUUKICAgICAgICAgfTsKLSAgICAgICAgZmluYWwgU3RyaW5nW10gcm9vdENvbHVtbnMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX1JPT1RfSUQsCi0gICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fQVZBSUxBQkxFX0JZVEVTCi0gICAgICAgIH07CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMCwgMCwgIiIpLAogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLmNsZWFyTWFwcGluZygpOwogCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDAsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiZGV2aWNlRG9jSWQiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoImRldmljZURvY0lkIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAyMDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDIwMDAsIDAsICIiKSwKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAyMDEsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDIwMDEsIDAsICIiKSwKICAgICAgICAgfSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nUm9vdERvY3VtZW50cygwKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CiAKICAgICAgICAgewogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDIsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAyMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMiwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX0RPQ1VNRU5UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjAwLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fU1RPUkFHRV9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSIsIGdldFN0cmluZyhjdXJzb3IsIENPTFVNTl9ESVNQTEFZX05BTUUpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImRvY3VtZW50SWQiLCAzLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygic3RvcmFnZUlkIiwgMjAxLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygibmFtZSIsICJEZXZpY2UgU3RvcmFnZSIsIGN1cnNvci5nZXRTdHJpbmcoMikpOwotICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHJvb3RDb2x1bW5zKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAyLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAyMDAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKLSAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoInJvb3RJZCIsIDMsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJhdmFpbGFibGVCeXRlcyIsIDIwMDEsIGN1cnNvci5nZXRJbnQoMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIGdldEludChjdXJzb3IsIENPTFVNTl9ET0NVTUVOVF9JRCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIwMSwgZ2V0SW50KGN1cnNvciwgQ09MVU1OX1NUT1JBR0VfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIFN0b3JhZ2UiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlRXhpc3RpbmdSb290cygpIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKICAgICAgICAgLy8gVGhlIGNsaWVudCBjb2RlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgZXhpc3Rpbmcgcm93cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KICAgICAgICAgLy8gQWRkIG9uZS4KLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdSb290RG9jdW1lbnRzKDApOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiMSIpOwogICAgICAgICAvLyBSZXBsYWNlIGl0LgotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygwLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEIiLCAxMDAwLCAxMDAwLCAiIiksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAgICAgICAgIHsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGNvbHVtbnMgPSBuZXcgU3RyaW5nW10gewogICAgICAgICAgICAgICAgICAgICBEb2N1bWVudHNDb250cmFjdC5Eb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQsCkBAIC02NzgsMjEgKzY2NSwyMyBAQAogICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3REb2N1bWVudHMoY29sdW1ucyk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiZG9jdW1lbnRJZCIsIDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJzdG9yYWdlSWQiLCAxMDAsIGN1cnNvci5nZXRJbnQoMSkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJuYW1lIiwgIkRldmljZSBTdG9yYWdlIEIiLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBDT0xVTU5fRE9DVU1FTlRfSUQpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxMDAsIGdldEludChjdXJzb3IsIENPTFVNTl9TVE9SQUdFX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEIiLCBnZXRTdHJpbmcoY3Vyc29yLCBDT0xVTU5fRElTUExBWV9OQU1FKSk7CiAgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICAgICAgfQogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBjb2x1bW5zID0gbmV3IFN0cmluZ1tdIHsKICAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fUk9PVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgUm9vdC5DT0xVTU5fVElUTEUsCiAgICAgICAgICAgICAgICAgICAgIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUwogICAgICAgICAgICAgfTsKICAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlSb290cyhjb2x1bW5zKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJyb290SWQiLCAxLCBjdXJzb3IuZ2V0SW50KDApKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiYXZhaWxhYmxlQnl0ZXMiLCAxMDAwLCBjdXJzb3IuZ2V0SW50KDEpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBnZXRJbnQoY3Vyc29yLCBSb290LkNPTFVNTl9ST09UX0lEKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEIiLCBnZXRTdHJpbmcoY3Vyc29yLCBSb290LkNPTFVNTl9USVRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEwMDAsIGdldEludChjdXJzb3IsIFJvb3QuQ09MVU1OX0FWQUlMQUJMRV9CWVRFUykpOwogICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03MDAsOCArNjg5LDEzIEBACiAgICAgcHVibGljIHZvaWQgdGVzdEZhaWxUb1JlcGxhY2VFeGlzaXRpbmdVbm1hcHBlZFJvb3RzKCkgewogICAgICAgICAvLyBUaGUgY2xpZW50IGNvZGUgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHJlcGxhY2Ugcm93cyBiZWZvcmUgcmVzb2x2aW5nICd1bm1hcHBlZCcgcm93cy4KICAgICAgICAgLy8gQWRkIG9uZS4KLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpLAogICAgICAgICB9KTsKICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLmNsZWFyTWFwcGluZygpOwpAQCAtNzA5LDE4ICs3MDMsMTkgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG9sZEN1cnNvci5nZXRDb3VudCgpKTsKIAogICAgICAgICAvLyBBZGQgb25lLgotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygwLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFN0b3JhZ2VEb2N1bWVudHMoIjEiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMSwgIkRldmljZSIsICJTdG9yYWdlIEIiLCAxMDAwLCAxMDAwLCAiIiksCiAgICAgICAgIH0pOwogICAgICAgICAvLyBBZGQgb25lIG1vcmUgYmVmb3JlIHJlc29sdmluZyB1bm1hcHBlZCBkb2N1bWVudHMuCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRSb290RG9jdW1lbnRzKDAsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDIsICJEZXZpY2UiLCAiU3RvcmFnZSBCIiwgMTAwMCwgMTAwMCwgIiIpLAogICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdSb290RG9jdW1lbnRzKDApOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiMSIpOwogCiAgICAgICAgIC8vIEJlY2F1c2UgdGhlIHJvb3RzIHNoYXJlcyB0aGUgc2FtZSBuYW1lLCB0aGUgcm9vdHMgc2hvdWxkIGhhdmUgbmV3IElEcy4KLSAgICAgICAgZmluYWwgQ3Vyc29yIG5ld0N1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHN0cmluZ3MoUm9vdC5DT0xVTU5fUk9PVF9JRCkpOworICAgICAgICBmaW5hbCBDdXJzb3IgbmV3Q3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Q2hpbGREb2N1bWVudHMoCisgICAgICAgICAgICAgICAgc3RyaW5ncyhEb2N1bWVudC5DT0xVTU5fRE9DVU1FTlRfSUQpLCAiMSIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbmV3Q3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICBvbGRDdXJzb3IubW92ZVRvTmV4dCgpOwogICAgICAgICBuZXdDdXJzb3IubW92ZVRvTmV4dCgpOwpAQCAtNzMyLDYzICs3MjcsMTExIEBACiAgICAgICAgIG5ld0N1cnNvci5jbG9zZSgpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeURvY3VtZW50KCkgewotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygwLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeURvY3VtZW50cygpIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAwLCAwLCAiIiksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwogCiAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtRGF0YWJhc2UucXVlcnlEb2N1bWVudCgiMSIsIHN0cmluZ3MoRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBTdG9yYWdlIEEiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBBIiwgZ2V0U3RyaW5nKGN1cnNvciwgRG9jdW1lbnQuQ09MVU1OX0RJU1BMQVlfTkFNRSkpOwogICAgICAgICBjdXJzb3IuY2xvc2UoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UXVlcnlSb290cygpIHsKKyAgICAgICAgLy8gQWRkIGRldmljZSBkb2N1bWVudC4KKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKG51bGwpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0RGV2aWNlRG9jdW1lbnQoCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZCgwLCAiRGV2aWNlIiwgZmFsc2UsIG5ldyBNdHBSb290WzBdLCBuZXcgaW50WzBdKSk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKG51bGwpOworCisgICAgICAgIC8vIEl0IHRoZSBkZXZpY2UgZG9lcyBub3QgaGF2ZSBzdG9yYWdlcywgaXQgc2hvd3MgYSBkZXZpY2Ugcm9vdC4KKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHN0cmluZ3MoUm9vdC5DT0xVTU5fVElUTEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CisgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKKyAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOworICAgICAgICB9CisKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCIxIiwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDAsICJEZXZpY2UiLCAiU3RvcmFnZSBBIiwgMCwgMCwgIiIpCisgICAgICAgIH0pOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiMSIpOworCisgICAgICAgIC8vIEl0IHRoZSBkZXZpY2UgaGFzIHNpbmdsZSBzdG9yYWdlLCBpdCBzaG93cyBhIHN0b3JhZ2Ugcm9vdC4KKyAgICAgICAgeworICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1EYXRhYmFzZS5xdWVyeVJvb3RzKHN0cmluZ3MoUm9vdC5DT0xVTU5fVElUTEUpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CisgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgU3RvcmFnZSBBIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgICAgICBjdXJzb3IuY2xvc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiMSIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CisgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQSIsIDAsIDAsICIiKSwKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAxMDEsICJEZXZpY2UiLCAiU3RvcmFnZSBCIiwgMCwgMCwgIiIpCisgICAgICAgIH0pOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiMSIpOworCisgICAgICAgIC8vIEl0IHRoZSBkZXZpY2UgaGFzIG11bHRpcGxlIHN0b3JhZ2VzLCBpdCBzaG93cyBhIGRldmljZSByb290LgorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbURhdGFiYXNlLnF1ZXJ5Um9vdHMoc3RyaW5ncyhSb290LkNPTFVNTl9USVRMRSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOworICAgICAgICAgICAgY3Vyc29yLmNsb3NlKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0UGFyZW50SWQoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAwLCAwLCAiIiksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwogCi0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0NoaWxkRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cygiMSIpOwogICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Q2hpbGREb2N1bWVudHMoCiAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAiMSIsCiAgICAgICAgICAgICAgICAgbmV3IE10cE9iamVjdEluZm9bXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEb2N1bWVudCgyMDAsICJub3RlLnR4dCIsIE10cENvbnN0YW50cy5GT1JNQVRfVEVYVCwgMTAyNCksCiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nQ2hpbGREb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoIjEiKTsKIAogICAgICAgICBhc3NlcnRFcXVhbHMoIjEiLCBtRGF0YWJhc2UuZ2V0UGFyZW50SWQoIjIiKSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdERlbGV0ZURvY3VtZW50KCkgewotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdSb290RG9jdW1lbnRzKDApOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0Um9vdERvY3VtZW50cygwLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10geworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRTdG9yYWdlRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIsIHJlc291cmNlcywgbmV3IE10cFJvb3RbXSB7CiAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoMCwgMTAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UgQSIsIDAsIDAsICIiKSwKICAgICAgICAgfSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nUm9vdERvY3VtZW50cygwKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoImRldmljZURvY0lkIik7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIxIik7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRDaGlsZERvY3VtZW50cygKICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICIxIiwKICAgICAgICAgICAgICAgICBuZXcgTXRwT2JqZWN0SW5mb1tdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KDIwMCwgImRpciIsIE10cENvbnN0YW50cy5GT1JNQVRfQVNTT0NJQVRJT04sIDEwMjQpLAogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0NoaWxkRG9jdW1lbnRzKCIxIik7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCIxIik7CiAKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nQ2hpbGREb2N1bWVudHMoIjIiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCIyIik7CiAgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5wdXRDaGlsZERvY3VtZW50cygKICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICIyIiwKICAgICAgICAgICAgICAgICBuZXcgTXRwT2JqZWN0SW5mb1tdIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KDIwMCwgIm5vdGUudHh0IiwgTXRwQ29uc3RhbnRzLkZPUk1BVF9URVhULCAxMDI0KSwKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdDaGlsZERvY3VtZW50cygiMiIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ0RvY3VtZW50cygiMiIpOwogCiAgICAgICAgIG1EYXRhYmFzZS5kZWxldGVEb2N1bWVudCgiMiIpOwogCkBAIC04MTAsMTEgKzg1MywxMSBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RQdXROZXdEb2N1bWVudCgpIHsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nUm9vdERvY3VtZW50cygwKTsKLSAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dFJvb3REb2N1bWVudHMoMCwgcmVzb3VyY2VzLCBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0YXJ0QWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkucHV0U3RvcmFnZURvY3VtZW50cygiZGV2aWNlRG9jSWQiLCByZXNvdXJjZXMsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KDAsIDEwMCwgIkRldmljZSIsICJTdG9yYWdlIEEiLCAwLCAwLCAiIiksCiAgICAgICAgIH0pOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RvcEFkZGluZ1Jvb3REb2N1bWVudHMoMCk7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nRG9jdW1lbnRzKCJkZXZpY2VEb2NJZCIpOwogCiAgICAgICAgIGFzc2VydEVxdWFscygKICAgICAgICAgICAgICAgICAiMiIsCkBAIC04MzIsMTIgKzg3NSwxMiBAQAogCiAgICAgICAgIC8vIFRoZSBuZXcgZG9jdW1lbnQgc2hvdWxkIG5vdCBiZSBtYXBwZWQgd2l0aCBleGlzdGluZyBpbnZhbGlkYXRlZCBkb2N1bWVudC4KICAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLmNsZWFyTWFwcGluZygpOwotICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdDaGlsZERvY3VtZW50cygiMSIpOworICAgICAgICBtRGF0YWJhc2UuZ2V0TWFwcGVyKCkuc3RhcnRBZGRpbmdEb2N1bWVudHMoIjEiKTsKICAgICAgICAgbURhdGFiYXNlLnB1dE5ld0RvY3VtZW50KAogICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgIjEiLAogICAgICAgICAgICAgICAgIGNyZWF0ZURvY3VtZW50KDIwMSwgIm5vdGUudHh0IiwgTXRwQ29uc3RhbnRzLkZPUk1BVF9URVhULCAxMDI0KSk7Ci0gICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdG9wQWRkaW5nQ2hpbGREb2N1bWVudHMoIjEiKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMoIjEiKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0KQEAgLTg0OCw0ICs4OTEsMTIgQEAKICAgICAgICAgICAgIGN1cnNvci5jbG9zZSgpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEdldERvY3VtZW50SWRGb3JEZXZpY2UoKSB7CisgICAgICAgIG1EYXRhYmFzZS5nZXRNYXBwZXIoKS5zdGFydEFkZGluZ0RvY3VtZW50cyhudWxsKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnB1dERldmljZURvY3VtZW50KAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoMTAwLCAiRGV2aWNlIiwgdHJ1ZSwgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pKTsKKyAgICAgICAgbURhdGFiYXNlLmdldE1hcHBlcigpLnN0b3BBZGRpbmdEb2N1bWVudHMobnVsbCk7CisgICAgICAgIGFzc2VydEVxdWFscygiMSIsIG1EYXRhYmFzZS5nZXREb2N1bWVudElkRm9yRGV2aWNlKDEwMCkpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cERvY3VtZW50c1Byb3ZpZGVyVGVzdC5qYXZhCmluZGV4IGRjNmY3OWUuLjQ0ODQxYWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwRG9jdW1lbnRzUHJvdmlkZXJUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBEb2N1bWVudHNQcm92aWRlclRlc3QuamF2YQpAQCAtMjMsNyArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRG9jdW1lbnRzQ29udHJhY3QuUm9vdDsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRvY3VtZW50c0NvbnRyYWN0OwogaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKIAogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwpAQCAtNTYsMTcgKzU1LDIxIEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkFuZENsb3NlRGV2aWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9NRU1PUlkpOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgwKTsKLSAgICAgICAgbU10cE1hbmFnZXIuc2V0Um9vdHMoMCwgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGRldmljZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBzdG9yYWdlSWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEEiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3JhZ2UgQSIgLyogdm9sdW1lIGRlc2NyaXB0aW9uICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmVlIHNwYWNlICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiB0b3RhbCBzcGFjZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICIiIC8qIG5vIHZvbHVtZSBpZGVudGlmaWVyICovKQotICAgICAgICB9KTsKKyAgICAgICAgbU10cE1hbmFnZXIuYWRkVmFsaWREZXZpY2UobmV3IE10cERldmljZVJlY29yZCgKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICJEZXZpY2UiLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qIHVub3BlbmVkICovLAorICAgICAgICAgICAgICAgIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGRldmljZUlkICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogc3RvcmFnZUlkICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZXZpY2UgQSIgLyogZGV2aWNlIG1vZGVsIG5hbWUgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3JhZ2UgQSIgLyogdm9sdW1lIGRlc2NyaXB0aW9uICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgLyogZnJlZSBzcGFjZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDQ4IC8qIHRvdGFsIHNwYWNlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiIC8qIG5vIHZvbHVtZSBpZGVudGlmaWVyICovKQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgbmV3IGludFswXSkpOwogCiAgICAgICAgIG1Qcm92aWRlci5vcGVuRGV2aWNlKDApOwogICAgICAgICBtUmVzb2x2ZXIud2FpdEZvck5vdGlmaWNhdGlvbihST09UU19VUkksIDEpOwpAQCAtOTIsNTcgKzk1LDY5IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBpZiB0aGUgZm9sbG93aW5nIG5vdGlmaWNhdGlvbiBpcyB0aGUgZmlyc3Qgb25lIG9yIG5vdC4KLSAgICAgICAgbU10cE1hbmFnZXIuYWRkVmFsaWREZXZpY2UoMCk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLnNldFJvb3RzKDAsIG5ldyBNdHBSb290W10gewotICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KAotICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZXZpY2VJZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogc3RvcmFnZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIkRldmljZSBBIiAvKiBkZXZpY2UgbW9kZWwgbmFtZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICJTdG9yYWdlIEEiIC8qIHZvbHVtZSBkZXNjcmlwdGlvbiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgLyogZnJlZSBzcGFjZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIDIwNDggLyogdG90YWwgc3BhY2UgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAiIiAvKiBubyB2b2x1bWUgaWRlbnRpZmllciAqLykKLSAgICAgICAgfSk7CisgICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKG5ldyBNdHBEZXZpY2VSZWNvcmQoCisgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAiRGV2aWNlIiwKKyAgICAgICAgICAgICAgICBmYWxzZSAvKiB1bm9wZW5lZCAqLywKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZXZpY2VJZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIHN0b3JhZ2VJZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEEiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdG9yYWdlIEEiIC8qIHZvbHVtZSBkZXNjcmlwdGlvbiAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDI0IC8qIGZyZWUgc3BhY2UgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiB0b3RhbCBzcGFjZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiAvKiBubyB2b2x1bWUgaWRlbnRpZmllciAqLykKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG5ldyBpbnRbMF0pKTsKICAgICAgICAgbVByb3ZpZGVyLm9wZW5EZXZpY2UoMCk7CiAgICAgICAgIG1SZXNvbHZlci53YWl0Rm9yTm90aWZpY2F0aW9uKFJPT1RTX1VSSSwgMSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5Um9vdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgxKTsKLSAgICAgICAgbU10cE1hbmFnZXIuc2V0Um9vdHMoMCwgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAwIC8qIGRldmljZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBzdG9yYWdlSWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEEiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3JhZ2UgQSIgLyogdm9sdW1lIGRlc2NyaXB0aW9uICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCAvKiBmcmVlIHNwYWNlICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiB0b3RhbCBzcGFjZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICIiIC8qIG5vIHZvbHVtZSBpZGVudGlmaWVyICovKQotICAgICAgICB9KTsKLSAgICAgICAgbU10cE1hbmFnZXIuc2V0Um9vdHMoMSwgbmV3IE10cFJvb3RbXSB7Ci0gICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGRldmljZUlkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBzdG9yYWdlSWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEIiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIlN0b3JhZ2UgQiIgLyogdm9sdW1lIGRlc2NyaXB0aW9uICovLAotICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiBmcmVlIHNwYWNlICovLAotICAgICAgICAgICAgICAgICAgICAgICAgNDA5NiAvKiB0b3RhbCBzcGFjZSAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICJJZGVudGlmaWVyIEIiIC8qIG5vIHZvbHVtZSBpZGVudGlmaWVyICovKQotICAgICAgICB9KTsKKyAgICAgICAgbU10cE1hbmFnZXIuYWRkVmFsaWREZXZpY2UobmV3IE10cERldmljZVJlY29yZCgKKyAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICJEZXZpY2UiLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qIHVub3BlbmVkICovLAorICAgICAgICAgICAgICAgIG5ldyBNdHBSb290W10geworICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogZGV2aWNlSWQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogc3RvcmFnZUlkICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEEiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RvcmFnZSBBIiAvKiB2b2x1bWUgZGVzY3JpcHRpb24gKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgLyogZnJlZSBzcGFjZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiB0b3RhbCBzcGFjZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIgLyogbm8gdm9sdW1lIGlkZW50aWZpZXIgKi8pCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBuZXcgaW50WzBdKSk7CisgICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKG5ldyBNdHBEZXZpY2VSZWNvcmQoCisgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAiRGV2aWNlIiwKKyAgICAgICAgICAgICAgICBmYWxzZSAvKiB1bm9wZW5lZCAqLywKKyAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdFtdIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3IE10cFJvb3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBkZXZpY2VJZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIHN0b3JhZ2VJZCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGV2aWNlIEIiIC8qIGRldmljZSBtb2RlbCBuYW1lICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdG9yYWdlIEIiIC8qIHZvbHVtZSBkZXNjcmlwdGlvbiAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDQ4IC8qIGZyZWUgc3BhY2UgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA5NiAvKiB0b3RhbCBzcGFjZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWRlbnRpZmllciBCIiAvKiBubyB2b2x1bWUgaWRlbnRpZmllciAqLykKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIG5ldyBpbnRbMF0pKTsKIAogICAgICAgICB7CiAgICAgICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgICAgIG1SZXNvbHZlci53YWl0Rm9yTm90aWZpY2F0aW9uKFJPT1RTX1VSSSwgMSk7CiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5Um9vdHMobnVsbCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKICAgICAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjEiLCBjdXJzb3IuZ2V0U3RyaW5nKDApKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiMyIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUsIGN1cnNvci5nZXRJbnQoMSkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGN1cnNvci5nZXRJbnQoMikpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQSBTdG9yYWdlIEEiLCBjdXJzb3IuZ2V0U3RyaW5nKDMpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiMSIsIGN1cnNvci5nZXRTdHJpbmcoNCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIzIiwgY3Vyc29yLmdldFN0cmluZyg0KSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMTAyNCwgY3Vyc29yLmdldEludCg1KSk7CiAgICAgICAgIH0KIApAQCAtMTUzLDUyICsxNjgsNjIgQEAKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygiMiIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCI0IiwgY3Vyc29yLmdldFN0cmluZygwKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwgY3Vyc29yLmdldEludCgxKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgY3Vyc29yLmdldEludCgyKSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBCIFN0b3JhZ2UgQiIsIGN1cnNvci5nZXRTdHJpbmcoMykpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgY3Vyc29yLmdldFN0cmluZyg0KSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIjQiLCBjdXJzb3IuZ2V0U3RyaW5nKDQpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygyMDQ4LCBjdXJzb3IuZ2V0SW50KDUpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeVJvb3RzX2Vycm9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9NRU1PUlkpOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgwKTsKLSAgICAgICAgbU10cE1hbmFnZXIuYWRkVmFsaWREZXZpY2UoMSk7Ci0gICAgICAgIC8vIE5vdCBzZXQgcm9vdHMgZm9yIGRldmljZSAwIHNvIHRoYXQgTXRwTWFuYWdlck1vY2sjZ2V0Um9vdHMgdGhyb3dzIElPRXhjZXB0aW9uLgotICAgICAgICBtTXRwTWFuYWdlci5zZXRSb290cygxLCBuZXcgTXRwUm9vdFtdIHsKLSAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogZGV2aWNlSWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAxIC8qIHN0b3JhZ2VJZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICJEZXZpY2UgQiIgLyogZGV2aWNlIG1vZGVsIG5hbWUgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAiU3RvcmFnZSBCIiAvKiB2b2x1bWUgZGVzY3JpcHRpb24gKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAyMDQ4IC8qIGZyZWUgc3BhY2UgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICA0MDk2IC8qIHRvdGFsIHNwYWNlICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIklkZW50aWZpZXIgQiIgLyogbm8gdm9sdW1lIGlkZW50aWZpZXIgKi8pCi0gICAgICAgIH0pOworICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZShuZXcgTXRwRGV2aWNlUmVjb3JkKAorICAgICAgICAgICAgICAgIDAsICJEZXZpY2UgQSIsIGZhbHNlIC8qIHVub3BlbmVkICovLCBuZXcgTXRwUm9vdFswXSwgbmV3IGludFswXSkpOworICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZShuZXcgTXRwRGV2aWNlUmVjb3JkKAorICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgIkRldmljZSIsCisgICAgICAgICAgICAgICAgZmFsc2UgLyogdW5vcGVuZWQgKi8sCisgICAgICAgICAgICAgICAgbmV3IE10cFJvb3RbXSB7CisgICAgICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLyogZGV2aWNlSWQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAvKiBzdG9yYWdlSWQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRldmljZSBCIiAvKiBkZXZpY2UgbW9kZWwgbmFtZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3RvcmFnZSBCIiAvKiB2b2x1bWUgZGVzY3JpcHRpb24gKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjA0OCAvKiBmcmVlIHNwYWNlICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwOTYgLyogdG90YWwgc3BhY2UgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklkZW50aWZpZXIgQiIgLyogbm8gdm9sdW1lIGlkZW50aWZpZXIgKi8pCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBuZXcgaW50WzBdKSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIG1Qcm92aWRlci5vcGVuRGV2aWNlKDApOwogICAgICAgICAgICAgbVByb3ZpZGVyLm9wZW5EZXZpY2UoMSk7CiAgICAgICAgICAgICBtUmVzb2x2ZXIud2FpdEZvck5vdGlmaWNhdGlvbihST09UU19VUkksIDEpOwogCiAgICAgICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5Um9vdHMobnVsbCk7Ci0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGN1cnNvci5nZXRDb3VudCgpKTsKKwogICAgICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiMSIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFJvb3QuRkxBR19TVVBQT1JUU19JU19DSElMRCB8IFJvb3QuRkxBR19TVVBQT1JUU19DUkVBVEUsIGN1cnNvci5nZXRJbnQoMSkpOwogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKFIuZHJhd2FibGUuaWNfcm9vdF9tdHAsIGN1cnNvci5nZXRJbnQoMikpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJEZXZpY2UgQiBTdG9yYWdlIEIiLCBjdXJzb3IuZ2V0U3RyaW5nKDMpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIEEiLCBjdXJzb3IuZ2V0U3RyaW5nKDMpKTsKICAgICAgICAgICAgIGFzc2VydEVxdWFscygiMSIsIGN1cnNvci5nZXRTdHJpbmcoNCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGN1cnNvci5nZXRJbnQoNSkpOworCisgICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIzIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUm9vdC5GTEFHX1NVUFBPUlRTX0lTX0NISUxEIHwgUm9vdC5GTEFHX1NVUFBPUlRTX0NSRUFURSwgY3Vyc29yLmdldEludCgxKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoUi5kcmF3YWJsZS5pY19yb290X210cCwgY3Vyc29yLmdldEludCgyKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIkRldmljZSBCIFN0b3JhZ2UgQiIsIGN1cnNvci5nZXRTdHJpbmcoMykpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIzIiwgY3Vyc29yLmdldFN0cmluZyg0KSk7CiAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoMjA0OCwgY3Vyc29yLmdldEludCg1KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UXVlcnlEb2N1bWVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24gewogICAgICAgICBzZXR1cFByb3ZpZGVyKE10cERhdGFiYXNlQ29uc3RhbnRzLkZMQUdfREFUQUJBU0VfSU5fTUVNT1JZKTsKLSAgICAgICAgbU10cE1hbmFnZXIuYWRkVmFsaWREZXZpY2UoMCk7Ci0gICAgICAgIG1Qcm92aWRlci5vcGVuRGV2aWNlKDApOwotCiAgICAgICAgIHNldHVwUm9vdHMoMCwgbmV3IE10cFJvb3RbXSB7IG5ldyBNdHBSb290KDAsIDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDEwMDAsIDEwMDAsICIiKSB9KTsKICAgICAgICAgc2V0dXBEb2N1bWVudHMoCiAgICAgICAgICAgICAgICAgMCwKQEAgLTIxNiwxMiArMjQxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpCiAgICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Qcm92aWRlci5xdWVyeURvY3VtZW50KCIyIiwgbnVsbCk7CisgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtUHJvdmlkZXIucXVlcnlEb2N1bWVudCgiMyIsIG51bGwpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgY3Vyc29yLmdldENvdW50KCkpOwogCiAgICAgICAgIGN1cnNvci5tb3ZlVG9OZXh0KCk7CiAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMyIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoImltYWdlL2pwZWciLCBjdXJzb3IuZ2V0U3RyaW5nKDEpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJpbWFnZS5qcGciLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDE0MjI3MTY0MDAwMDBMLCBjdXJzb3IuZ2V0TG9uZygzKSk7CkBAIC0yMzYsOSArMjYxLDYgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UXVlcnlEb2N1bWVudF9kaXJlY3RvcnkoKQogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgVGltZW91dEV4Y2VwdGlvbiB7CiAgICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9NRU1PUlkpOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgwKTsKLSAgICAgICAgbVByb3ZpZGVyLm9wZW5EZXZpY2UoMCk7Ci0KICAgICAgICAgc2V0dXBSb290cygwLCBuZXcgTXRwUm9vdFtdIHsgbmV3IE10cFJvb3QoMCwgMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMTAwMCwgIiIpIH0pOwogICAgICAgICBzZXR1cERvY3VtZW50cygKICAgICAgICAgICAgICAgICAwLApAQCAtMjU1LDExICsyNzcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkKICAgICAgICAgICAgICAgICB9KTsKIAotICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5RG9jdW1lbnQoIjIiLCBudWxsKTsKKyAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Qcm92aWRlci5xdWVyeURvY3VtZW50KCIzIiwgbnVsbCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMyIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUiwgY3Vyc29yLmdldFN0cmluZygxKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiZGlyZWN0b3J5IiwgY3Vyc29yLmdldFN0cmluZygyKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxNDIyNzE2NDAwMDAwTCwgY3Vyc29yLmdldExvbmcoMykpOwpAQCAtMjc0LDkgKzI5Niw2IEBACiAgICAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5RG9jdW1lbnRfZm9yUm9vdCgpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKLQogICAgICAgICBzZXR1cFJvb3RzKDAsIG5ldyBNdHBSb290W10gewogICAgICAgICAgICAgICAgIG5ldyBNdHBSb290KAogICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBkZXZpY2VJZCAqLywKQEAgLTI4NywxMSArMzA2LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA0MDk2IC8qIHRvdGFsIHNwYWNlICovLAogICAgICAgICAgICAgICAgICAgICAgICAgIiIgLyogbm8gdm9sdW1lIGlkZW50aWZpZXIgKi8pCiAgICAgICAgIH0pOwotICAgICAgICBmaW5hbCBDdXJzb3IgY3Vyc29yID0gbVByb3ZpZGVyLnF1ZXJ5RG9jdW1lbnQoIjEiLCBudWxsKTsKKyAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Qcm92aWRlci5xdWVyeURvY3VtZW50KCIyIiwgbnVsbCk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgY3Vyc29yLm1vdmVUb05leHQoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIxIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMiIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoRG9jdW1lbnRzQ29udHJhY3QuRG9jdW1lbnQuTUlNRV9UWVBFX0RJUiwgY3Vyc29yLmdldFN0cmluZygxKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygiRGV2aWNlIEEgU3RvcmFnZSBBIiwgY3Vyc29yLmdldFN0cmluZygyKSk7CiAgICAgICAgIGFzc2VydFRydWUoY3Vyc29yLmlzTnVsbCgzKSk7CkBAIC0zMDEsOSArMzIwLDYgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeUNoaWxkRG9jdW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9NRU1PUlkpOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgwKTsKLSAgICAgICAgbVByb3ZpZGVyLm9wZW5EZXZpY2UoMCk7Ci0KICAgICAgICAgc2V0dXBSb290cygwLCBuZXcgTXRwUm9vdFtdIHsgbmV3IE10cFJvb3QoMCwgMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMTAwMCwgIiIpIH0pOwogICAgICAgICBzZXR1cERvY3VtZW50cygKICAgICAgICAgICAgICAgICAwLApAQCAtMzI1LDcgKzM0MSw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7CiAKICAgICAgICAgYXNzZXJ0VHJ1ZShjdXJzb3IubW92ZVRvTmV4dCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCIyIiwgY3Vyc29yLmdldFN0cmluZygwKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiMyIsIGN1cnNvci5nZXRTdHJpbmcoMCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoImltYWdlL2pwZWciLCBjdXJzb3IuZ2V0U3RyaW5nKDEpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJpbWFnZS5qcGciLCBjdXJzb3IuZ2V0U3RyaW5nKDIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGN1cnNvci5nZXRMb25nKDMpKTsKQEAgLTMzNyw4ICszNTMsNiBAQAogCiAgICAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5Q2hpbGREb2N1bWVudHNfY3Vyc29yRXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIG1Qcm92aWRlci5xdWVyeUNoaWxkRG9jdW1lbnRzKCIxIiwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBmYWlsKCk7CkBAIC0zNDksOCArMzYzLDYgQEAKIAogICAgIHB1YmxpYyB2b2lkIHRlc3RRdWVyeUNoaWxkRG9jdW1lbnRzX2RvY3VtZW50RXJyb3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgc2V0dXBSb290cygwLCBuZXcgTXRwUm9vdFtdIHsgbmV3IE10cFJvb3QoMCwgMCwgIkRldmljZSIsICJTdG9yYWdlIiwgMTAwMCwgMTAwMCwgIiIpIH0pOwogICAgICAgICBtTXRwTWFuYWdlci5zZXRPYmplY3RIYW5kbGVzKDAsIDAsIC0xLCBuZXcgaW50W10geyAxIH0pOwogICAgICAgICB0cnkgewpAQCAtMzYzLDggKzM3NSw2IEBACiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRG9jdW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgc2V0dXBSb290cygwLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKICAgICAgICAgfSk7CkBAIC0zNzYsNyArMzg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkKICAgICAgICAgfSk7CiAKLSAgICAgICAgbVByb3ZpZGVyLmRlbGV0ZURvY3VtZW50KCIyIik7CisgICAgICAgIG1Qcm92aWRlci5kZWxldGVEb2N1bWVudCgiMyIpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgbVJlc29sdmVyLmdldENoYW5nZUNvdW50KAogICAgICAgICAgICAgICAgIERvY3VtZW50c0NvbnRyYWN0LmJ1aWxkQ2hpbGREb2N1bWVudHNVcmkoCiAgICAgICAgICAgICAgICAgICAgICAgICBNdHBEb2N1bWVudHNQcm92aWRlci5BVVRIT1JJVFksICIxIikpKTsKQEAgLTM4NSw4ICszOTUsNiBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3REZWxldGVEb2N1bWVudF9lcnJvcigpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKICAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX01FTU9SWSk7Ci0gICAgICAgIG1NdHBNYW5hZ2VyLmFkZFZhbGlkRGV2aWNlKDApOwotICAgICAgICBtUHJvdmlkZXIub3BlbkRldmljZSgwKTsKICAgICAgICAgc2V0dXBSb290cygwLCBuZXcgTXRwUm9vdFtdIHsKICAgICAgICAgICAgICAgICBuZXcgTXRwUm9vdCgwLCAwLCAiRGV2aWNlIiwgIlN0b3JhZ2UiLCAwLCAwLCAiIikKICAgICAgICAgfSk7CkBAIC0zOTgsNyArNDA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkKICAgICAgICAgfSk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtUHJvdmlkZXIuZGVsZXRlRG9jdW1lbnQoIjMiKTsKKyAgICAgICAgICAgIG1Qcm92aWRlci5kZWxldGVEb2N1bWVudCgiNCIpOwogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgSU9FeGNlcHRpb24pOwpAQCAtNDA4LDM0ICs0MTYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTXRwRG9jdW1lbnRzUHJvdmlkZXIuQVVUSE9SSVRZLCAiMSIpKSk7CiAgICAgfQogCi0gICAgQE1lZGl1bVRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UGF1c2VBbmRSZXN1bWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc2V0dXBQcm92aWRlcihNdHBEYXRhYmFzZUNvbnN0YW50cy5GTEFHX0RBVEFCQVNFX0lOX0ZJTEUpOwotICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgwKTsKLSAgICAgICAgbVByb3ZpZGVyLm9wZW5EZXZpY2UoMCk7Ci0gICAgICAgIHNldHVwUm9vdHMoMCwgbmV3IE10cFJvb3RbXSB7IG5ldyBNdHBSb290KDAsIDAsICJEZXZpY2UiLCAiU3RvcmFnZSIsIDAsIDAsICIiKX0pOwotCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEN1cnNvciBjdXJzb3IgPSBtUHJvdmlkZXIucXVlcnlSb290cygKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyhEb2N1bWVudHNDb250cmFjdC5Sb290LkNPTFVNTl9ST09UX0lEKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVByb3ZpZGVyLnNodXRkb3duKCk7Ci0gICAgICAgIHNldHVwUHJvdmlkZXIoTXRwRGF0YWJhc2VDb25zdGFudHMuRkxBR19EQVRBQkFTRV9JTl9GSUxFKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBXZSBjYW4gc3RpbGwgZmV0Y2ggcm9vdHMgYWZ0ZXIgcmVsYXVuY2hpbmcgdGhlIHByb3ZpZGVyLgotICAgICAgICAgICAgZmluYWwgQ3Vyc29yIGN1cnNvciA9IG1Qcm92aWRlci5xdWVyeVJvb3RzKAotICAgICAgICAgICAgICAgICAgICBzdHJpbmdzKERvY3VtZW50c0NvbnRyYWN0LlJvb3QuQ09MVU1OX1JPT1RfSUQpKTsKLSAgICAgICAgICAgIGFzc2VydEVxdWFscygxLCBjdXJzb3IuZ2V0Q291bnQoKSk7Ci0gICAgICAgICAgICBjdXJzb3IubW92ZVRvTmV4dCgpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGN1cnNvci5nZXRJbnQoMCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG1NdHBNYW5hZ2VyLmdldE9wZW5lZERldmljZUlkcygpLmxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwcml2YXRlIHZvaWQgc2V0dXBQcm92aWRlcihpbnQgZmxhZykgewogICAgICAgICBtRGF0YWJhc2UgPSBuZXcgTXRwRGF0YWJhc2UoZ2V0Q29udGV4dCgpLCBmbGFnKTsKICAgICAgICAgbVByb3ZpZGVyID0gbmV3IE10cERvY3VtZW50c1Byb3ZpZGVyKCk7CkBAIC00NTUsOSArNDM1LDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBzZXR1cFJvb3RzKGludCBkZXZpY2VJZCwgTXRwUm9vdFtdIHJvb3RzKQotICAgICAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24sIFRpbWVvdXRFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIGludCBjaGFuZ2VDb3VudCA9IG1SZXNvbHZlci5nZXRDaGFuZ2VDb3VudChST09UU19VUkkpOwotICAgICAgICBtTXRwTWFuYWdlci5zZXRSb290cyhkZXZpY2VJZCwgcm9vdHMpOworICAgICAgICBtTXRwTWFuYWdlci5hZGRWYWxpZERldmljZSgKKyAgICAgICAgICAgICAgICBuZXcgTXRwRGV2aWNlUmVjb3JkKGRldmljZUlkLCAiRGV2aWNlIiwgZmFsc2UgLyogdW5vcGVuZWQgKi8sIHJvb3RzLCBuZXcgaW50WzBdKSk7CisgICAgICAgIG1Qcm92aWRlci5vcGVuRGV2aWNlKGRldmljZUlkKTsKICAgICAgICAgbVJlc29sdmVyLndhaXRGb3JOb3RpZmljYXRpb24oUk9PVFNfVVJJLCBjaGFuZ2VDb3VudCArIDEpOwogICAgICAgICByZXR1cm4gZ2V0U3RyaW5ncyhtUHJvdmlkZXIucXVlcnlSb290cyhzdHJpbmdzKERvY3VtZW50c0NvbnRyYWN0LlJvb3QuQ09MVU1OX1JPT1RfSUQpKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBNYW5hZ2VyVGVzdC5qYXZhIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9NdHBNYW5hZ2VyVGVzdC5qYXZhCmluZGV4IGVkNjE3ZTcuLjc1MjdmNTQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvTXRwTWFuYWdlclRlc3QuamF2YQorKysgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL010cE1hbmFnZXJUZXN0LmphdmEKQEAgLTE5LDIzICsxOSwyNSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYkRldmljZTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLnVzYi5Vc2JNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubXRwLk10cENvbnN0YW50czsKK2ltcG9ydCBhbmRyb2lkLm10cC5NdHBFdmVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkNhbmNlbGxhdGlvblNpZ25hbDsKIGltcG9ydCBhbmRyb2lkLm9zLk9wZXJhdGlvbkNhbmNlbGVkRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZVRhc2s7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CiAKIEBSZWFsRGV2aWNlVGVzdAogcHVibGljIGNsYXNzIE10cE1hbmFnZXJUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJTUVPVVRfTVMgPSAxMDAwOwogICAgIFVzYk1hbmFnZXIgbVVzYk1hbmFnZXI7CiAgICAgTXRwTWFuYWdlciBtTWFuYWdlcjsKICAgICBVc2JEZXZpY2UgbVVzYkRldmljZTsKLSAgICBpbnQgbVJlcXVlc3Q7CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewpAQCAtNjEsOCArNjMsOSBAQAogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NYW5hZ2VyLnJlYWRFdmVudChtVXNiRGV2aWNlLmdldERldmljZUlkKCksIHNpZ25hbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1NYW5hZ2VyLnJlYWRFdmVudChtVXNiRGV2aWNlLmdldERldmljZUlkKCksIHNpZ25hbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoT3BlcmF0aW9uQ2FuY2VsZWRFeGNlcHRpb24gZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC03MCwxMSArNzMsMzEgQEAKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgZmluYWwgVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQoZnV0dXJlKTsKICAgICAgICAgdGhyZWFkLnN0YXJ0KCk7Ci0gICAgICAgIFRocmVhZC5zbGVlcChUSU1FT1VUX01TKTsKKyAgICAgICAgU3lzdGVtQ2xvY2suc2xlZXAoVElNRU9VVF9NUyk7CiAgICAgICAgIHNpZ25hbC5jYW5jZWwoKTsKICAgICAgICAgYXNzZXJ0VHJ1ZShmdXR1cmUuZ2V0KFRJTUVPVVRfTVMsIFRpbWVVbml0Lk1JTExJU0VDT05EUykpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHRlc3RPcGVyYXRpb25zU3VwcG9ydGVkKCkgeworICAgICAgICBmaW5hbCBNdHBEZXZpY2VSZWNvcmRbXSByZWNvcmRzID0gbU1hbmFnZXIuZ2V0RGV2aWNlcygpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmVjb3Jkcy5sZW5ndGgpOworICAgICAgICBhc3NlcnROb3ROdWxsKHJlY29yZHNbMF0ub3BlcmF0aW9uc1N1cHBvcnRlZCk7CisgICAgICAgIGdldEluc3RydW1lbnRhdGlvbigpLnNob3coQXJyYXlzLnRvU3RyaW5nKHJlY29yZHNbMF0ub3BlcmF0aW9uc1N1cHBvcnRlZCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RFdmVudE9iamVjdEFkZGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBnZXRJbnN0cnVtZW50YXRpb24oKS5zaG93KCJQbGVhc2UgdGFrZSBhIHBob3RvIGJ5IHVzaW5nIGNvbm5lY3RlZCBNVFAgZGV2aWNlLiIpOworICAgICAgICAgICAgZmluYWwgQ2FuY2VsbGF0aW9uU2lnbmFsIHNpZ25hbCA9IG5ldyBDYW5jZWxsYXRpb25TaWduYWwoKTsKKyAgICAgICAgICAgIE10cEV2ZW50IGV2ZW50ID0gbU1hbmFnZXIucmVhZEV2ZW50KG1Vc2JEZXZpY2UuZ2V0RGV2aWNlSWQoKSwgc2lnbmFsKTsKKyAgICAgICAgICAgIGlmIChldmVudC5nZXRFdmVudENvZGUoKSAhPSBNdHBDb25zdGFudHMuRVZFTlRfT0JKRUNUX0FEREVEKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnRUcnVlKGV2ZW50LmdldE9iamVjdEhhbmRsZSgpICE9IDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIENvbnRleHQgZ2V0Q29udGV4dCgpIHsKICAgICAgICAgcmV0dXJuIGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRleHQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL1Rlc3RNdHBNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL1Rlc3RNdHBNYW5hZ2VyLmphdmEKaW5kZXggMzgzMzc5OS4uMzkzNGI4OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9UZXN0TXRwTWFuYWdlci5qYXZhCisrKyBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvVGVzdE10cE1hbmFnZXIuamF2YQpAQCAtMTksMTQgKzE5LDEyIEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5tdHAuTXRwT2JqZWN0SW5mbzsKIGltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CiAKIHB1YmxpYyBjbGFzcyBUZXN0TXRwTWFuYWdlciBleHRlbmRzIE10cE1hbmFnZXIgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENSRUFURURfRE9DVU1FTlRfSEFORExFID0gMTAwMDsKQEAgLTM1LDkgKzMzLDcgQEAKICAgICAgICAgcmV0dXJuIEFycmF5cy50b1N0cmluZyhhcmdzKTsKICAgICB9CiAKLSAgICBwcml2YXRlIGZpbmFsIFNldDxJbnRlZ2VyPiBtVmFsaWREZXZpY2VzID0gbmV3IEhhc2hTZXQ8PigpOwotICAgIHByaXZhdGUgZmluYWwgU2V0PEludGVnZXI+IG1PcGVuZWREZXZpY2VzID0gbmV3IFRyZWVTZXQ8PigpOwotICAgIHByaXZhdGUgZmluYWwgTWFwPEludGVnZXIsIE10cFJvb3RbXT4gbVJvb3RzID0gbmV3IEhhc2hNYXA8PigpOworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8TXRwRGV2aWNlUmVjb3JkPiBtRGV2aWNlcyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBNdHBPYmplY3RJbmZvPiBtT2JqZWN0SW5mb3MgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBpbnRbXT4gbU9iamVjdEhhbmRsZXMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBieXRlW10+IG1UaHVtYm5haWxCeXRlcyA9IG5ldyBIYXNoTWFwPD4oKTsKQEAgLTQ3LDE4ICs0MywxNCBAQAogICAgICAgICBzdXBlcihjb250ZXh0KTsKICAgICB9CiAKLSAgICB2b2lkIGFkZFZhbGlkRGV2aWNlKGludCBkZXZpY2VJZCkgewotICAgICAgICBtVmFsaWREZXZpY2VzLmFkZChkZXZpY2VJZCk7CisgICAgdm9pZCBhZGRWYWxpZERldmljZShNdHBEZXZpY2VSZWNvcmQgZGV2aWNlKSB7CisgICAgICAgIG1EZXZpY2VzLnB1dChkZXZpY2UuZGV2aWNlSWQsIGRldmljZSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRPYmplY3RIYW5kbGVzKGludCBkZXZpY2VJZCwgaW50IHN0b3JhZ2VJZCwgaW50IHBhcmVudEhhbmRsZSwgaW50W10gb2JqZWN0SGFuZGxlcykgewogICAgICAgICBtT2JqZWN0SGFuZGxlcy5wdXQocGFjayhkZXZpY2VJZCwgc3RvcmFnZUlkLCBwYXJlbnRIYW5kbGUpLCBvYmplY3RIYW5kbGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFJvb3RzKGludCBkZXZpY2VJZCwgTXRwUm9vdFtdIHJvb3RzKSB7Ci0gICAgICAgIG1Sb290cy5wdXQoZGV2aWNlSWQsIHJvb3RzKTsKLSAgICB9Ci0KICAgICB2b2lkIHNldE9iamVjdEluZm8oaW50IGRldmljZUlkLCBNdHBPYmplY3RJbmZvIG9iamVjdEluZm8pIHsKICAgICAgICAgbU9iamVjdEluZm9zLnB1dChwYWNrKGRldmljZUlkLCBvYmplY3RJbmZvLmdldE9iamVjdEhhbmRsZSgpKSwgb2JqZWN0SW5mbyk7CiAgICAgfQpAQCAtNzYsMjggKzY4LDQwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgTXRwRGV2aWNlUmVjb3JkW10gZ2V0RGV2aWNlcygpIHsKKyAgICAgICAgZmluYWwgTXRwRGV2aWNlUmVjb3JkW10gcmVzdWx0ID0gbmV3IE10cERldmljZVJlY29yZFttRGV2aWNlcy5zaXplKCldOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1EZXZpY2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBNdHBEZXZpY2VSZWNvcmQgZGV2aWNlID0gbURldmljZXMudmFsdWVBdChpKTsKKyAgICAgICAgICAgIGlmIChkZXZpY2Uub3BlbmVkKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gZGV2aWNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSBuZXcgTXRwRGV2aWNlUmVjb3JkKAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlLmRldmljZUlkLCBkZXZpY2UubmFtZSwgZGV2aWNlLm9wZW5lZCwgbmV3IE10cFJvb3RbMF0sIG5ldyBpbnRbMF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgdm9pZCBvcGVuRGV2aWNlKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCFtVmFsaWREZXZpY2VzLmNvbnRhaW5zKGRldmljZUlkKSB8fCBtT3BlbmVkRGV2aWNlcy5jb250YWlucyhkZXZpY2VJZCkpIHsKKyAgICAgICAgZmluYWwgTXRwRGV2aWNlUmVjb3JkIGRldmljZSA9IG1EZXZpY2VzLmdldChkZXZpY2VJZCk7CisgICAgICAgIGlmIChkZXZpY2UgPT0gbnVsbCB8fCBkZXZpY2Uub3BlbmVkKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oKTsKICAgICAgICAgfQotICAgICAgICBtT3BlbmVkRGV2aWNlcy5hZGQoZGV2aWNlSWQpOworICAgICAgICBtRGV2aWNlcy5wdXQoCisgICAgICAgICAgICAgICAgZGV2aWNlSWQsCisgICAgICAgICAgICAgICAgbmV3IE10cERldmljZVJlY29yZChkZXZpY2UuZGV2aWNlSWQsIGRldmljZS5uYW1lLCB0cnVlLCBkZXZpY2Uucm9vdHMsIG5ldyBpbnRbMF0pKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICB2b2lkIGNsb3NlRGV2aWNlKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKCFtVmFsaWREZXZpY2VzLmNvbnRhaW5zKGRldmljZUlkKSB8fCAhbU9wZW5lZERldmljZXMuY29udGFpbnMoZGV2aWNlSWQpKSB7CisgICAgICAgIGZpbmFsIE10cERldmljZVJlY29yZCBkZXZpY2UgPSBtRGV2aWNlcy5nZXQoZGV2aWNlSWQpOworICAgICAgICBpZiAoZGV2aWNlID09IG51bGwgfHwgIWRldmljZS5vcGVuZWQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigpOwogICAgICAgICB9Ci0gICAgICAgIG1PcGVuZWREZXZpY2VzLnJlbW92ZShkZXZpY2VJZCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgTXRwUm9vdFtdIGdldFJvb3RzKGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG1Sb290cy5jb250YWluc0tleShkZXZpY2VJZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm9vdHMuZ2V0KGRldmljZUlkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiZ2V0Um9vdHMgZXJyb3I6ICIgKyBJbnRlZ2VyLnRvU3RyaW5nKGRldmljZUlkKSk7Ci0gICAgICAgIH0KKyAgICAgICAgbURldmljZXMucHV0KAorICAgICAgICAgICAgICAgIGRldmljZUlkLAorICAgICAgICAgICAgICAgIG5ldyBNdHBEZXZpY2VSZWNvcmQoZGV2aWNlLmRldmljZUlkLCBkZXZpY2UubmFtZSwgZmFsc2UsIGRldmljZS5yb290cywgbmV3IGludFswXSkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTg5LDExICsxOTMsMTkgQEAKIAogICAgIEBPdmVycmlkZQogICAgIGludFtdIGdldE9wZW5lZERldmljZUlkcygpIHsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBmaW5hbCBpbnRbXSByZXN1bHQgPSBuZXcgaW50W21PcGVuZWREZXZpY2VzLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGRldmljZUlkIDogbU9wZW5lZERldmljZXMpIHsKLSAgICAgICAgICAgIHJlc3VsdFtpKytdID0gZGV2aWNlSWQ7CisgICAgICAgIGZpbmFsIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbbURldmljZXMuc2l6ZSgpXTsKKyAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtRGV2aWNlcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgZmluYWwgTXRwRGV2aWNlUmVjb3JkIGRldmljZSA9IG1EZXZpY2VzLnZhbHVlQXQoaSk7CisgICAgICAgICAgICBpZiAoZGV2aWNlLm9wZW5lZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdFtjb3VudCsrXSA9IGRldmljZS5kZXZpY2VJZDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gQXJyYXlzLmNvcHlPZihyZXN1bHQsIGNvdW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBieXRlW10gZ2V0T2JqZWN0KGludCBkZXZpY2VJZCwgaW50IG9iamVjdEhhbmRsZSwgaW50IGV4cGVjdGVkU2l6ZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG1JbXBvcnRGaWxlQnl0ZXMuZ2V0KHBhY2soZGV2aWNlSWQsIG9iamVjdEhhbmRsZSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvVGVzdFV0aWwuamF2YSBiL3BhY2thZ2VzL010cERvY3VtZW50c1Byb3ZpZGVyL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9tdHAvVGVzdFV0aWwuamF2YQppbmRleCBmOTEwMzIxLi5mZmNjMDg4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9NdHBEb2N1bWVudHNQcm92aWRlci90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbXRwL1Rlc3RVdGlsLmphdmEKKysrIGIvcGFja2FnZXMvTXRwRG9jdW1lbnRzUHJvdmlkZXIvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL210cC9UZXN0VXRpbC5qYXZhCkBAIC0xNiwyNyArMTYsMjEgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5tdHA7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiRGV2aWNlOwogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUudXNiLlVzYkRldmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS51c2IuVXNiTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKKwogaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7CiAKIC8qKgogICogU3RhdGljIHV0aWxpdHkgbWV0aG9kcyBmb3IgdGVzdGluZy4KICAqLwogZmluYWwgY2xhc3MgVGVzdFV0aWwgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fVVNCX1BFUk1JU1NJT04gPQotICAgICAgICAgICAgImNvbS5hbmRyb2lkLm10cC5VU0JfUEVSTUlTU0lPTiI7Ci0KICAgICBwcml2YXRlIFRlc3RVdGlsKCkge30KIAogICAgIC8qKgpAQCAtNDYsNDAgKzQwLDM0IEBACiAgICAgc3RhdGljIFVzYkRldmljZSBzZXR1cE10cERldmljZSgKICAgICAgICAgICAgIFRlc3RSZXN1bHRJbnN0cnVtZW50YXRpb24gaW5zdHJ1bWVudGF0aW9uLAogICAgICAgICAgICAgVXNiTWFuYWdlciB1c2JNYW5hZ2VyLAotICAgICAgICAgICAgTXRwTWFuYWdlciBtYW5hZ2VyKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFVzYkRldmljZSBkZXZpY2UgPSBmaW5kTXRwRGV2aWNlKGluc3RydW1lbnRhdGlvbiwgdXNiTWFuYWdlcik7Ci0gICAgICAgICAgICBtYW5hZ2VyLm9wZW5EZXZpY2UoZGV2aWNlLmdldERldmljZUlkKCkpOworICAgICAgICAgICAgTXRwTWFuYWdlciBtYW5hZ2VyKSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGZpbmFsIFVzYkRldmljZSBkZXZpY2UgPSBmaW5kTXRwRGV2aWNlKHVzYk1hbmFnZXIsIG1hbmFnZXIpOwogICAgICAgICAgICAgICAgIHdhaXRGb3JTdG9yYWdlcyhpbnN0cnVtZW50YXRpb24sIG1hbmFnZXIsIGRldmljZS5nZXREZXZpY2VJZCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlOwogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZXhwKSB7CisgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNob3coT2JqZWN0cy50b1N0cmluZyhleHAuZ2V0TWVzc2FnZSgpKSk7CisgICAgICAgICAgICAgICAgU3lzdGVtQ2xvY2suc2xlZXAoMTAwMCk7CiAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgTVRQIGRldmljZSBpcyBBbmRyb2lkLCBhbmQgaXQgY2hhbmdlcyB0aGUgVVNCIGRldmljZSB0eXBlIGZyb20KICAgICAgICAgICAgICAgICAvLyAiQ2hhcmdpbmciIHRvICJNVFAiLCB0aGUgZGV2aWNlIElEIHdpbGwgYmUgdXBkYXRlZC4gV2UgbmVlZCB0byBmaW5kIGEgZGV2aWNlCiAgICAgICAgICAgICAgICAgLy8gYWdhaW4uCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gb2J0YWluIE1UUCBkZXZpY2VzIik7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgVXNiRGV2aWNlIGZpbmRNdHBEZXZpY2UoCi0gICAgICAgICAgICBUZXN0UmVzdWx0SW5zdHJ1bWVudGF0aW9uIGluc3RydW1lbnRhdGlvbiwKLSAgICAgICAgICAgIFVzYk1hbmFnZXIgdXNiTWFuYWdlcikgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGZpbmFsIEhhc2hNYXA8U3RyaW5nLFVzYkRldmljZT4gZGV2aWNlcyA9IHVzYk1hbmFnZXIuZ2V0RGV2aWNlTGlzdCgpOwotICAgICAgICAgICAgaWYgKGRldmljZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICBpbnN0cnVtZW50YXRpb24uc2hvdygiV2FpdCBmb3IgZGV2aWNlcy4iKTsKLSAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBVc2JEZXZpY2UgZGV2aWNlID0gZGV2aWNlcy52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgICAgIHJlcXVlc3RQZXJtaXNzaW9uKGluc3RydW1lbnRhdGlvbiwgdXNiTWFuYWdlciwgZGV2aWNlKTsKKyAgICAgICAgICAgIFVzYk1hbmFnZXIgdXNiTWFuYWdlciwKKyAgICAgICAgICAgIE10cE1hbmFnZXIgbWFuYWdlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgSGFzaE1hcDxTdHJpbmcsVXNiRGV2aWNlPiBkZXZpY2VzID0gdXNiTWFuYWdlci5nZXREZXZpY2VMaXN0KCk7CisgICAgICAgIGlmIChkZXZpY2VzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRldmljZSBub3QgZm91bmQuIik7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgVXNiRGV2aWNlIGRldmljZSA9IGRldmljZXMudmFsdWVzKCkuaXRlcmF0b3IoKS5uZXh0KCk7CisgICAgICAgIC8vIFRyaWVzIHRvIGdldCBvd25lcnNoaXAgb2YgdGhlIGRldmljZSBpbiBjYXNlIHRoYXQgYW5vdGhlciBhcHBsaWNhdGlvbiB1c2UgaXQuCisgICAgICAgIGlmICh1c2JNYW5hZ2VyLmhhc1Blcm1pc3Npb24oZGV2aWNlKSkgewogICAgICAgICAgICAgZmluYWwgVXNiRGV2aWNlQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gdXNiTWFuYWdlci5vcGVuRGV2aWNlKGRldmljZSk7Ci0gICAgICAgICAgICBpZiAoY29ubmVjdGlvbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmZhaWwoIkNhbm5vdCBvcGVuIFVTQiBjb25uZWN0aW9uLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXZpY2UuZ2V0SW50ZXJmYWNlQ291bnQoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIHRlc3QgcnVucyByZWFsIGVudmlyb25tZW50LCB3ZSBuZWVkIHRvIGNhbGwgY2xhaW0gaW50ZXJmYWNlIHdpdGgKICAgICAgICAgICAgICAgICAvLyBmb3JjZSA9IHRydWUgdG8gcm9iIGludGVyZmFjZXMgZnJvbSBvdGhlciBhcHBsaWNhdGlvbnMuCkBAIC04Nyw0NCArNzUsMjkgQEAKICAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnJlbGVhc2VJbnRlcmZhY2UoZGV2aWNlLmdldEludGVyZmFjZShpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZGV2aWNlOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZXF1ZXN0UGVybWlzc2lvbigKLSAgICAgICAgICAgIGZpbmFsIFRlc3RSZXN1bHRJbnN0cnVtZW50YXRpb24gaW5zdHJ1bWVudGF0aW9uLAotICAgICAgICAgICAgVXNiTWFuYWdlciB1c2JNYW5hZ2VyLAotICAgICAgICAgICAgVXNiRGV2aWNlIGRldmljZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKHVzYk1hbmFnZXIuaGFzUGVybWlzc2lvbihkZXZpY2UpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgICAgIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIHJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLmdldFRhcmdldENvbnRleHQoKS51bnJlZ2lzdGVyUmVjZWl2ZXIodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIGluc3RydW1lbnRhdGlvbi5nZXRUYXJnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlcigKLSAgICAgICAgICAgICAgICByZWNlaXZlciwgbmV3IEludGVudEZpbHRlcihBQ1RJT05fVVNCX1BFUk1JU1NJT04pKTsKLSAgICAgICAgdXNiTWFuYWdlci5yZXF1ZXN0UGVybWlzc2lvbihkZXZpY2UsIFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KAotICAgICAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5nZXRUYXJnZXRDb250ZXh0KCksCi0gICAgICAgICAgICAgICAgMCAvKiByZXF1c3RDb2RlICovLAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoQUNUSU9OX1VTQl9QRVJNSVNTSU9OKSwKLSAgICAgICAgICAgICAgICAwIC8qIGZsYWdzICovKSk7Ci0gICAgICAgIGxhdGNoLmF3YWl0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHVzYk1hbmFnZXIuaGFzUGVybWlzc2lvbihkZXZpY2UpKTsKKyAgICAgICAgbWFuYWdlci5vcGVuRGV2aWNlKGRldmljZS5nZXREZXZpY2VJZCgpKTsKKyAgICAgICAgcmV0dXJuIGRldmljZTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHdhaXRGb3JTdG9yYWdlcygKICAgICAgICAgICAgIFRlc3RSZXN1bHRJbnN0cnVtZW50YXRpb24gaW5zdHJ1bWVudGF0aW9uLAogICAgICAgICAgICAgTXRwTWFuYWdlciBtYW5hZ2VyLAotICAgICAgICAgICAgaW50IGRldmljZUlkKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGludCBkZXZpY2VJZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChtYW5hZ2VyLmdldFJvb3RzKGRldmljZUlkKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgTXRwRGV2aWNlUmVjb3JkIGRldmljZSA9IG51bGw7CisgICAgICAgICAgICBmb3IgKGZpbmFsIE10cERldmljZVJlY29yZCBkZXZpY2VDYW5kaWRhdGUgOiBtYW5hZ2VyLmdldERldmljZXMoKSkgeworICAgICAgICAgICAgICAgIGlmIChkZXZpY2VDYW5kaWRhdGUuZGV2aWNlSWQgPT0gZGV2aWNlSWQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gZGV2aWNlQ2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGV2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkRldmljZSB3YXMgZGV0YWNoZWQuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGV2aWNlLnJvb3RzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnNob3coIldhaXQgZm9yIHN0b3JhZ2VzLiIpOwotICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW1DbG9jay5zbGVlcCgxMDAwKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9BbmRyb2lkTWFuaWZlc3QueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNWE2ZjFkMS4uYWY5ZDI1MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTE3LDkgKzE3LDcgQEAKICAqLwogLS0+CiA8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByaW50c3Bvb2xlciIKLSAgICBhbmRyb2lkOnZlcnNpb25OYW1lPSIxIgotICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiPgorICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnByaW50c3Bvb2xlciI+CiAKICAgICA8IS0tIEFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBjYWxsIEFQSXMgdGhhdCBnaXZlIGl0IGFjY2VzcyB0byBhbGwgcHJpbnQgam9icwogICAgICAgICAgb24gdGhlIGRldmljZS4gVXN1YWxseSBhbiBhcHAgY2FuIGFjY2VzcyBvbmx5IHRoZSBwcmludCBqb2JzIGl0IGNyZWF0ZWQuIC0tPgpAQCAtNDAsNiArMzgsOCBAQAogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJjb20uYW5kcm9pZC5wcmludHNwb29sZXIucGVybWlzc2lvbi5BQ0NFU1NfQUxMX1BSSU5UX0pPQlMiLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldBS0VfTE9DSyIvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uU1RBUlRfUFJJTlRfU0VSVklDRV9DT05GSUdfQUNUSVZJVFkiLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19DT0FSU0VfTE9DQVRJT04iLz4KKyAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIi8+CiAKICAgICA8YXBwbGljYXRpb24KICAgICAgICAgYW5kcm9pZDphbGxvd0NsZWFyVXNlckRhdGE9InRydWUiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvZHJhd2FibGUvaWNfaW5mby54bWwKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19ib3R0b20ueG1sCmNvcHkgdG8gcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9kcmF3YWJsZS9pY19pbmZvLnhtbAppbmRleCBmMTFiNjkwLi4yZWNkMWM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2RyYXdhYmxlL2ljX2luZm8ueG1sCkBAIC0xLDcgKzEsNyBAQAogPCEtLQotQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAKQEAgLTE0LDExICsxNCwxMSBAQAogICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogLS0+CiA8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgorICAgICAgICBhbmRyb2lkOndpZHRoPSIyNGRwIgorICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjRkcCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KICAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMEZGIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMC4wLDAuMGwwLjAsMjQuMGwyNC4wLDAuMEwyNC4wLDAuMEwwLjAsMC4wek00LjAsMTAuMGwxNi4wLDAuMGwwLjAsMTAuMEw0LjAsMjAuMEw0LjAsMTAuMHoiLz4KLTwvdmVjdG9yPgorICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTIsMkM2LjQ4LDIgMiw2LjQ4IDIsMTJzNC40OCwxMCAxMCwxMCAxMCwtNC40OCAxMCwtMTBTMTcuNTIsMiAxMiwyek0xMywxN2gtMnYtNmgydjZ6TTEzLDloLTJMMTEsN2gydjJ6IgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iIzc1NzU3NSIvPgorPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9kcm9wZG93bl9pdGVtLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvbGF5b3V0L3ByaW50ZXJfZHJvcGRvd25faXRlbS54bWwKaW5kZXggNDM4MWE3YS4uZTBlZmJjNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9kcm9wZG93bl9pdGVtLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2xheW91dC9wcmludGVyX2Ryb3Bkb3duX2l0ZW0ueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0SXNTZWxlY3RhYmxlPSJmYWxzZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnkiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiCiAgICAgICAgICAgICBhbmRyb2lkOmR1cGxpY2F0ZVBhcmVudFN0YXRlPSJ0cnVlIj4KICAgICAgICAgPC9UZXh0Vmlldz4KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9saXN0X2l0ZW0ueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy9sYXlvdXQvcHJpbnRlcl9saXN0X2l0ZW0ueG1sCmluZGV4IDdiYzE0NGEuLjUwZjQ0YzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvbGF5b3V0L3ByaW50ZXJfbGlzdF9pdGVtLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL2xheW91dC9wcmludGVyX2xpc3RfaXRlbS54bWwKQEAgLTM4LDYgKzM4LDcgQEAKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCiAgICAgICAgIGFuZHJvaWQ6ZHVwbGljYXRlUGFyZW50U3RhdGU9InRydWUiPgogCiAgICAgICAgIDxUZXh0VmlldwpAQCAtNjIsMTAgKzYzLDIwIEBACiAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0iZW5kIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0SXNTZWxlY3RhYmxlPSJmYWxzZSIKICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSI/YW5kcm9pZDphdHRyL3RleHRDb2xvclByaW1hcnkiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iP2FuZHJvaWQ6YXR0ci90ZXh0Q29sb3JTZWNvbmRhcnkiCiAgICAgICAgICAgICBhbmRyb2lkOmR1cGxpY2F0ZVBhcmVudFN0YXRlPSJ0cnVlIj4KICAgICAgICAgPC9UZXh0Vmlldz4KIAogICAgIDwvTGluZWFyTGF5b3V0PgogCisgICAgPEltYWdlVmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL21vcmVfaW5mbyIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjI0ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjI0ZGlwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3ByaW50ZXJfaW5mb19kZXNjIgorICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX2luZm8iCisgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSI+CisgICAgPC9JbWFnZVZpZXc+CisKIDwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCBmMjYzYWY3Li41N2JhMmI2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gZHJ1a2tlcnMgZ2V2aW5kPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGRydWtrZXIgZ2V2aW5kPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNZWVyIGlubGlndGluZyBvb3IgaGllcmRpZSBkcnVra2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iU29tbWlnZSBkcnVrZGllbnN0ZSBpcyBnZWRlYWt0aXZlZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iS2llcyBkcnVrZGllbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNvZWsgdGFucyB2aXIgZHJ1a2tlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJHZWVuIGRydWtkaWVuc3RlIGlzIGdlYWt0aXZlZXIgbmllIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkthbnNlbGxlZXIgdGFucyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJEcnVra2VyZm91dCBieSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1a2tlciBoZXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBnZWJsb2trZWVyIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+LWRydWt0YWtlPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+LWRydWt0YWFrPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJLYW5zZWxsZWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJIZXJiZWdpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJHZWVuIHZlcmJpbmRpbmcgbWV0IGRydWtrZXIgbmllIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCBhOTNlMGE5Li5hMjE4MmZiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOGKoOGJs+GImuGLjuGJvSDhibDhjIjhip3hibDhi4vhiI08L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDhiqDhibPhiJrhi47hib0g4Ymw4YyI4Yqd4Ymw4YuL4YiNPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4Ymw4Yyo4Yib4YiqIOGLqOGLmuGIhSDhiqDhibPhiJog4YiY4Yio4YyDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4Yqg4YqV4Yuz4YqV4Yu1IOGLqOGIheGJteGImOGJtSDhiqDhjIjhiI3hjI3hiI7hibbhib0g4Ymw4Yiw4YqT4Yqt4YiI4YuL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Yuo4YiF4Ym14YiY4Ym1IOGKoOGMiOGIjeGMjeGIjuGJtSDhi63hiJ3hiKjhjKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGKoOGJs+GImuGLjuGJveGKlSDhiaDhiJjhjYjhiIjhjI0g4YiL4YutIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Yid4YqV4YidIOGLqOGIheGJteGImOGJtSDhiqDhjIjhiI3hjI3hiI7hibbhib0g4Yqg4YiN4YqQ4YmB4YidIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7hipUg4Ymg4YiY4Ymw4YuNIOGIi+GLrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4Yuo4Yqg4Ymz4YiaIOGIteGIheGJsOGJtSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4Yqg4Ymz4YiaIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7hipUg4Yqg4YyN4Yu34YiNIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDhi6jhiIXhibXhiJjhibUg4Yi14YirPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4Yuo4YiF4Ym14YiY4Ym1IOGIteGIqzwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4Yut4YmF4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLhiqXhipXhi7DhjIjhipMg4YyA4Yid4YitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuGKqOGKoOGJs+GImiDhjIvhiK0g4Yid4YqV4YidIOGMjeGKleGKmeGKkOGJtSDhi6jhiIjhiJ0iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IGM5YTZhMzk1Li5lYWIxMzM5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtNjMsNiArNjMsOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7YqtmFINin2YTYudir2YjYsSDYudmE2YkgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INmF2YYg2KfZhNi32KfYqNi52KfYqjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtiq2YUg2KfZhNi52KvZiNixINi52YTZiSDYt9in2KjYudipINmI2KfYrdiv2KkgKDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPik8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLZhdiy2YrYryDZhdmGINin2YTZhdi52YTZiNmF2KfYqiDYrdmI2YQg2YfYsNmHINin2YTYt9in2KjYudipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i2KjYudi2INiu2K/Zhdin2Kog2KfZhNi32KjYp9i52Kkg2YXYudi32Y7ZkdmE2KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i2KfYrtiq2LEg2K7Yr9mF2Kkg2LfYqNin2LnYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i2KfZhNio2K3YqyDYudmGINi32KfYqNi52KfYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItmE2YUg2YrYqtmFINiq2YXZg9mK2YYg2KPZiiDYrtiv2YXYp9iqINi32KjYp9i52KkiPC9zdHJpbmc+CkBAIC03MSwxNCArNzQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i2KzYp9ix2Y0g2KXZhNi62KfYoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLYrti32Kcg2YHZiiDYp9mE2LfYp9io2LnYqSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i2LHZgdi22Kog2KfZhNi32KfYqNi52KkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iemVybyI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INmF2YfZhdipINi32KjYp9i52Kk8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0idHdvIj7ZhdmH2YXYqtinINi32KjYp9i52KkgKDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPik8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g2YXZh9in2YUg2LfYqNin2LnYqTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g2YXZh9mF2Kkg2LfYqNin2LnYqTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INmF2YYg2YXZh9in2YUg2KfZhNi32KjYp9i52Kk8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7ZhdmH2YXYqSDYt9io2KfYudipINmI2KfYrdiv2KkgKDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPik8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Itil2YTYutin2KEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Itil2LnYp9iv2Kkg2KrYtNi62YrZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLZhNinINmK2YjYrNivINin2KrYtdin2YQg2KjYp9mE2LfYp9io2LnYqSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAppbmRleCA1YWViN2JiLi5iZmY0NzdkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIHRhcMSxbGTEsTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBwcmludGVyIHRhcMSxbGTEsTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkJ1IHByaW50ZXIgaGFxccSxbmRhIGRhaGEgyZl0cmFmbMSxIG3JmWx1bWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQsmZemkgw6dhcCB4aWRtyZl0bMmZcmkgZGVha3RpdiBlZGlsaWIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iw4dhcCB4aWRtyZl0aW5pIHNlw6dpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlciBheHRhcsSxbMSxciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ikhlw6cgYmlyIMOnYXAgeGlkbcmZdGkgYWt0aXYgZWRpbG3JmXlpYiI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGzJmcSfdiBlZGlsaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXIgeMmZdGFzxLEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBpxZ9pbmkgYmxva2xhZMSxIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IMOnYXAgacWfaTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiDDp2FwIGnFn2k8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkzJmcSfdiBldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iWWVuaWTJmW4gYmHFn2xhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJQcmludGVyyZkgaGXDpyBiaXIgYmHEn2xhbnTEsSB5b3hkdXIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI4YWEyOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAgQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ0Njk4MzYwNzUzMTk4MzE4MjEiPiLFoHRhbXAuIGl6IG1lbW9yLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vcmVfb3B0aW9uc19idXR0b24iIG1zZ2lkPSIyMjQzMjI4Mzk2NDMyNTU2NzcxIj4iSm/FoSBvcGNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kZXN0aW5hdGlvbiIgbXNnaWQ9IjkxMzI1MTA5OTczODE1OTkyNzUiPiJPZHJlZGnFoXRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfY29waWVzIiBtc2dpZD0iMzYzNDUzMTA0MjgyMjk2ODMwOCI+IktvcGlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvcGllc19zdW1tYXJ5IiBtc2dpZD0iMzg2MTk2NjA2MzUzNjUyOTU0MCI+IktvcGlqYToiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYXBlcl9zaXplIiBtc2dpZD0iOTA4NjU0MzgzODI3Nzc3NzU5Ij4iVmVsacSNaW5hIHBhcGlyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX3BhcGVyX3NpemVfc3VtbWFyeSIgbXNnaWQ9IjU2NjgyMDQ5ODEzMzIxMzgxNjgiPiJWZWxpxI1pbmEgcGFwaXJhOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxhYmVsX2NvbG9yIiBtc2dpZD0iMTEwODY5MDMwNTIxODE4ODk2OSI+IkJvamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9kdXBsZXgiIG1zZ2lkPSI1MzcwMDM3MjU0MzQ3MDcyMjQzIj4iRHZvc3RyYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfb3JpZW50YXRpb24iIG1zZ2lkPSIyODUzMTQyNTgxOTkwNDk2NDc3Ij4iUG9sb8W+YWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYWJlbF9wYWdlcyIgbXNnaWQ9Ijc3Njg1ODk3MjkyODIxODIyMzAiPiJTdHJhbmljZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc3RpbmF0aW9uX2RlZmF1bHRfdGV4dCIgbXNnaWQ9IjU0MjI3MDgwNTY4MDcwNjU3MTAiPiJJemFiZXJpdGUgxaF0YW1wYcSNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGVtcGxhdGVfYWxsX3BhZ2VzIiBtc2dpZD0iMzMyMjIzNTk4MjAyMDE0ODc2MiI+IlN2ZSBzdHJhbmljZSAoPHhsaWZmOmcgaWQ9IlBBR0VfQ09VTlQiPiUxJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRlbXBsYXRlX3BhZ2VfcmFuZ2UiIG1zZ2lkPSI0Mjg2Mzg1MzAwMzgyODYzMjgiPiJPcHNlZyBvZCA8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlc19yYW5nZV9leGFtcGxlIiBtc2dpZD0iODU1ODY5NDQ1MzU1Njk0NTE3MiI+Im5wci4gMeKAkzUsIDgsIDEx4oCTMTMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmV2aWV3IiBtc2dpZD0iODAxMDIxNzc5NjA1Nzc2MzM0MyI+IlByZWdsZWQgcHJlIMWhdGFtcGFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnN0YWxsX2Zvcl9wcmludF9wcmV2aWV3IiBtc2dpZD0iNjM2NjMwMzk5NzM4NTUwOTMzMiI+Ikluc3RhbGlyYWogUERGIHByaWtheml2YcSNIHphIHByZWdsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGluZ19hcHBfY3Jhc2hlZCIgbXNnaWQ9Ijg1NDQ3NzYxNjY4NjU2NjM5OCI+IkFwbGlrYWNpamEgemEgxaF0YW1wYW5qZSBqZSBvdGthemFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImdlbmVyYXRpbmdfcHJpbnRfam9iIiBtc2dpZD0iMzExOTYwODc0MjY1MTY5ODkxNiI+IkdlbmVyaXNhbmplIHphZGF0a2EgemEgxaF0YW1wYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmVfYXNfcGRmIiBtc2dpZD0iNTcxODQ1NDExOTg0NzU5Njg1MyI+IlNhxI11dmFqIGthbyBQREYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnMiIG1zZ2lkPSI1MDE4ODI5NzI2ODYxODc2MjAyIj4iU3ZpIMWhdGFtcGHEjWnigKYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9kaWFsb2ciIG1zZ2lkPSIzMjYyODY4NzQ2MTMzMTk3OSI+IkRpamFsb2cgemEgxaF0YW1wYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImN1cnJlbnRfcGFnZV90ZW1wbGF0ZSIgbXNnaWQ9IjEzODY2MzgzNDM1NzE3NzEyOTIiPiI8eGxpZmY6ZyBpZD0iQ1VSUkVOVF9QQUdFIj4lMSRkPC94bGlmZjpnPi88eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTIkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwYWdlX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iNjgzMTIzOTY4MjI1NjE5NzE2MSI+Ijx4bGlmZjpnIGlkPSJDVVJSRU5UX1BBR0UiPiUxJGQ8L3hsaWZmOmc+LiBzdHJhbmljYSBvZCA8eGxpZmY6ZyBpZD0iUEFHRV9DT1VOVCI+JTIkZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdW1tYXJ5X3RlbXBsYXRlIiBtc2dpZD0iODg5OTczNDkwODYyNTY2OTE5MyI+IlJlemltZSwga29waWplICg8eGxpZmY6ZyBpZD0iQ09QSUVTIj4lMSRzPC94bGlmZjpnPiksIHZlbGnEjWluYSBwYXBpcmEgPHhsaWZmOmcgaWQ9IlBBUEVSX1NJWkUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwYW5kX2hhbmRsZSIgbXNnaWQ9IjcyODI5NzQ0NDgxMDkyODA1MjIiPiJSZWd1bGF0b3IgemEgxaFpcmVuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xsYXBzZV9oYW5kbGUiIG1zZ2lkPSI2ODg2NjM3OTg5NDQyNTA3NDUxIj4iUmVndWxhdG9yIHphIHNrdXBsamFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9idXR0b24iIG1zZ2lkPSI2NDUxNjQ1NjYyNzEyNDYyNjgiPiLFoHRhbXBhaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNhdmV0b3BkZl9idXR0b24iIG1zZ2lkPSIyOTc2MTg2NzkxNjg2OTI0NzQzIj4iU2HEjXV2YWogdSBQREYtdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X29wdGlvbnNfZXhwYW5kZWQiIG1zZ2lkPSI2OTQ0Njc5MTU3NDcxNjkxODU5Ij4iT3BjaWplIMWhdGFtcGFuamEgc3UgcHJvxaFpcmVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X29wdGlvbnNfY29sbGFwc2VkIiBtc2dpZD0iNzQ1NTkzMDQ0NTY3MDQxNDMzMiI+Ik9wY2lqZSDFoXRhbXBhbmphIHN1IHNrdXBsamVuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlYXJjaCIgbXNnaWQ9IjU0MjE3MjQyNjUzMjIyMjg0OTciPiJQcmV0cmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGxfcHJpbnRlcnNfbGFiZWwiIG1zZ2lkPSIzMTc4ODQ4ODcwMTYxNTI2Mzk5Ij4iU3ZpIMWhdGFtcGHEjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGRfcHJpbnRfc2VydmljZV9sYWJlbCIgbXNnaWQ9IjUzNTY3MDI1NDYxODg5ODE5NDAiPiJEb2RhaiB1c2x1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hfYm94X3Nob3duX3V0dGVyYW5jZSIgbXNnaWQ9Ijc5Njc0MDQ5NTM5MDEzNzYwOTAiPiJPa3ZpciB6YSBwcmV0cmFndSBqZSBwcmlrYXphbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaF9ib3hfaGlkZGVuX3V0dGVyYW5jZSIgbXNnaWQ9IjU3Mjc3NTUxNjkzNDMxMTMzNTEiPiJPa3ZpciB6YSBwcmV0cmFndSBqZSBzYWtyaXZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2FkZF9wcmludGVyIiBtc2dpZD0iMTA4ODY1NjQ2ODM2MDY1MzQ1NSI+IkRvZGFqIMWhdGFtcGHEjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlbGVjdF9wcmludGVyIiBtc2dpZD0iNzM4ODc2MDkzOTg3MzM2ODY5OCI+Ikl6YWJlcmkgxaF0YW1wYcSNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfZm9yZ2V0X3ByaW50ZXIiIG1zZ2lkPSI1MDM1Mjg3NDk3MjkxOTEwNzY2Ij4iWmFib3JhdmkgxaF0YW1wYcSNIjwvc3RyaW5nPgorICAgIDxwbHVyYWxzIG5hbWU9InByaW50X3NlYXJjaF9yZXN1bHRfY291bnRfdXR0ZXJhbmNlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk5NzY2MzczODM2MTA4MDg2OCI+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5Qcm9uYcSRZW4gamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IMWhdGFtcGHEjTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByb25hxJFlbmEgc3UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IMWhdGFtcGHEjWE8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByb25hxJFlbm8gamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IMWhdGFtcGHEjWE8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkpvxaEgaW5mb3JtYWNpamEgbyBvdm9tIMWhdGFtcGHEjXUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJOZWtlIHVzbHVnZSDFoXRhbXBhbmphIHN1IG9uZW1vZ3XEh2VuZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJJemFiZXJpdGUgdXNsdWd1IMWhdGFtcGFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByZXRyYWdhIMWhdGFtcGHEjWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaWplZG5hIHVzbHVnYSDFoXRhbXBhbmphIG5pamUgb21vZ3XEh2VuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50ZXJzIiBtc2dpZD0iNDg2OTQwMzMyMzkwMDA1NDg2NiI+Ik5pamUgcHJvbmHEkWVuIG5pamVkYW4gxaF0YW1wYcSNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjk1OTAzOTU3NzYyNDQ3MzYyIj4ixaB0YW1wYSBzZSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iT3RrYXp1amUgc2UgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iR3JlxaFrYSDFoXRhbXBhxI1hIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLFoHRhbXBhxI0gamUgYmxva2lyYW8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJPdGthxb5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJQb25vdm8gcG9rcmVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOZW1hIHZlemUgc2EgxaF0YW1wYcSNZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWFzb25fdW5rbm93biIgbXNnaWQ9IjU1MDc5NDAxOTY1MDMyNDYxMzkiPiJuZXBvem5hdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX3VuYXZhaWxhYmxlIiBtc2dpZD0iMjQzNDE3MDYxNzAwMzMxNTY5MCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4oCTIG5lZG9zdHVwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlX3NlY3VyaXR5X3dhcm5pbmdfdGl0bGUiIG1zZ2lkPSIyMTYwNzUyMjkxMjQ2Nzc1MzIwIj4ixb1lbGl0ZSBsaSBkYSBrb3Jpc3RpdGUgPHhsaWZmOmcgaWQ9IlNFUlZJQ0UiPiUxJHM8L3hsaWZmOmc+PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2Vfc2VjdXJpdHlfd2FybmluZ19zdW1tYXJ5IiBtc2dpZD0iMTQyNzQzNDYyNTM2MTY5MjAwNiI+IkRva3VtZW50IG1vxb5lIGRhIHByb8SRZSBrcm96IGplZGFuIGlsaSB2acWhZSBzZXJ2ZXJhIG5hIHB1dHUgZG8gxaF0YW1wYcSNYS4iPC9zdHJpbmc+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iY29sb3JfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSI3NjAyOTQ4NzQ1NDE1MTc0OTM3Ij4iQ3Juby1iZWxvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjc2MjI0MTI0NzIyODk4Mzc1NCI+IkJvamEiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJkdXBsZXhfbW9kZV9sYWJlbHMiPgorICAgIDxpdGVtIG1zZ2lkPSIzODgyMzAyOTEyNzkwOTI4MzE1Ij4iTmnFoXRhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzI5NjU2MzgzNTM1NTY0MTcxOSI+IkR1Z2EgaXZpY2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3OTUxMzY4ODExNzUwMzc1OCI+IktyYXRrYSBpdmljYSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9Im9yaWVudGF0aW9uX2xhYmVscyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNjE5MzEwMjA5MjY0ODkyMjgiPiJVc3ByYXZubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxOTk2NjAwOTAyNDYxNjY4MTIiPiJWb2RvcmF2bm8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3dyaXRlX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSI1Nzg3NjQyNjE1MTc5NTcyNTQzIj4iVXBpc2l2YW5qZSB1IGRhdG90ZWt1IG5pamUgbW9ndcSHZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX2RlZmF1bHRfbWVzc2FnZSIgbXNnaWQ9Ijg2MDI2Nzg0MDU1MDI5MjIzNDYiPiLFvWFvIG5hbSBqZSwgb3ZvIG5pamUgdXNwZWxvLiBQb2t1xaFhanRlIHBvbm92by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9lcnJvcl9yZXRyeSIgbXNnaWQ9IjE0MjY0MjE3Mjg3ODQyNTk1MzgiPiJQb2t1xaFhanRlIHBvbm92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X2Vycm9yX3ByaW50ZXJfdW5hdmFpbGFibGUiIG1zZ2lkPSI4OTg1NjE0NDE1MjUzMjAzMzgxIj4iT3ZhaiDFoXRhbXBhxI0gdHJlbnV0bm8gbmlqZSBkb3N0dXBhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9wcmVwYXJpbmdfcHJldmlldyIgbXNnaWQ9IjM5Mzk5MzA3MzU2NzEzNjQ3MTIiPiJQcmlwcmVtYSBwcmVnbGVkYS4uLiI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCA5M2ZlZWE1Li5lOGRlOGVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7QndCw0LzQtdGA0LXQvdC4INGB0LAgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGA0LA8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7QndCw0LzQtdGA0LXQvSDQtSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YA8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCe0YnQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINGC0L7Qt9C4INC/0YDQuNC90YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i0J3Rj9C60L7QuCDRg9GB0LvRg9Cz0Lgg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1INGB0LAg0LTQtdCw0LrRgtC40LLQuNGA0LDQvdC4LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCY0LfQsdC40YDQsNC90LUg0L3QsCDRg9GB0LvRg9Cz0LAg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQotGK0YDRgdC10L3QtSDQvdCwINC/0YDQuNC90YLQtdGA0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLQndGP0LzQsCDQsNC60YLQuNCy0LjRgNCw0L3QuCDRg9GB0LvRg9Cz0Lgg0LfQsCDQvtGC0L/QtdGH0LDRgtCy0LDQvdC1Ijwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwg0YHQtSDQsNC90YPQu9C40YDQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i0JPRgNC10YjQutCwINCyINC/0YDQuNC90YLQtdGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQn9GA0LjQvdGC0LXRgNGK0YIg0LHQu9C+0LrQuNGA0LAg0L/RgNC4IOKAnjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Ql9Cw0LTQsNC90LjRjyDQt9CwINC+0YLQv9C10YfQsNGC0LLQsNC90LU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtCX0LDQtNCw0L3QuNC1INC30LAg0L7RgtC/0LXRh9Cw0YLQstCw0L3QtTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQntGC0LrQsNC3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLQoNC10YHRgtCw0YDRgtC40YDQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i0J3Rj9C80LAg0LLRgNGK0LfQutCwINGBINC/0YDQuNC90YLQtdGA0LAiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwKaW5kZXggMGVlZDlhYS4uYTFjYTQ5NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+4Kaf4Ka/IOCmruCngeCmpuCnjeCmsOCmlSDgppbgp4HgpoHgppzgp4cg4Kaq4Ka+4KaT4Kav4Ka84Ka+IOCml+Cnh+Cmm+CnhzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+4Kaf4Ka/IOCmruCngeCmpuCnjeCmsOCmlSDgppbgp4HgpoHgppzgp4cg4Kaq4Ka+4KaT4Kav4Ka84Ka+IOCml+Cnh+Cmm+CnhzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCmj+CmhyDgpq7gp4Hgpqbgp43gprDgppXgpp/gpr/gprAg4Kas4Ka/4Ka34Kav4Ka84KeHIOCmhuCmsOCniyDgpqTgpqXgp43gpq8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLgppXgpr/gppvgp4Eg4Kau4KeB4Kam4KeN4Kaw4KajIOCmquCmsOCmv+Cmt+Cnh+CmrOCmviDgpoXgppXgp43gprfgpq4g4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+Cnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCmruCngeCmpuCnjeCmsOCmoyDgpqrgprDgpr/gprfgp4fgpqzgpr4g4Kaa4Kav4Ka84KaoIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4Kau4KeB4Kam4KeN4Kaw4KaV4KaX4KeB4Kay4Ka/IOCmheCmqOCngeCmuOCmqOCnjeCmp+CmvuCmqCDgppXgprDgpr4g4Ka54Kaa4KeN4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Kau4KeB4Kam4KeN4Kaw4KajIOCmquCmsOCmv+Cmt+Cnh+CmrOCmviDgprjgppXgp43gprfgpq4g4Kao4KeH4KaHIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Kas4Ka+4Kak4Ka/4KayIOCmleCmsOCmviDgprngpprgp43gppvgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Kau4KeB4Kam4KeN4Kaw4KaVIOCmpOCnjeCmsOCngeCmn+CmvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCmruCngeCmpuCnjeCmsOCmlSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCmheCmrOCmsOCngeCmpuCnjeCmpyDgppXgprDgp4fgppvgp4ciPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCmruCngeCmpuCnjeCmsOCmoyDgppXgpr7gprDgp43gpq/gppfgp4HgprLgpr88L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDgpq7gp4Hgpqbgp43gprDgpqMg4KaV4Ka+4Kaw4KeN4Kav4KaX4KeB4Kay4Ka/PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgpqzgpr7gpqTgpr/gprIg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgpqrgp4HgpqjgprDgp43gprjgp4Lgpprgpqjgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4Kau4KeB4Kam4KeN4Kaw4KaV4KeHIOCmleCni+CmqOCniyDgprjgpoLgpq/gp4vgppcg4Kao4KeH4KaHIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAppbmRleCAwM2QzMDYwLi5hYTZmOTkyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TXCdoYW4gdHJvYmF0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JlczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNcJ2hhIHRyb2JhdCA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik3DqXMgaW5mb3JtYWNpw7Mgc29icmUgYXF1ZXN0YSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iSGkgaGEgc2VydmVpcyBkXCdpbXByZXNzacOzIHF1ZSBlc3RhbiBkZXNhY3RpdmF0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTZWxlY2Npw7MgZGVsIHNlcnZlaSBkXCdpbXByZXNzacOzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJDZXJjYSBkXCdpbXByZXNzb3JlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5vIGhpIGhhIGNhcCBzZXJ2ZWkgZFwnaW1wcmVzc2nDsyBhY3RpdmF0Ijwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlNcJ2VzdMOgIGNhbmNlbMK3bGFudCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvciBkXCdpbXByZXNzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJbXByZXNzb3JhIGJsb3F1ZWphZGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB0YXNxdWVzIGRcJ2ltcHJlc3Npw7M8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gdGFzY2EgZFwnaW1wcmVzc2nDszwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VswrdsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVpbmljaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTm8gaGkgaGEgY29ubmV4acOzIGFtYiBsYSBpbXByZXNzb3JhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCA0MTRhYmY5Li40YmMyMmQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbApAQCAtNjEsNiArNjEsOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OYWxlemVuw6kgdGlza8Ohcm55OiA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5OYWxlemVuw6kgdGlza8Ohcm55OiA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkRhbMWhw60gaW5mb3JtYWNlIG/CoHTDqXRvIHRpc2vDoXJuxJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJOxJtrdGVyw6kgdGlza292w6kgc2x1xb5ieSBuZWpzb3UgYWt0aXZvdsOhbnkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iWnZvbHRlIHNsdcW+YnUgdGlza3UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlZ5aGxlZMOhdsOhbsOtIHRpc2vDoXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lanNvdSBha3Rpdm92w6FueSDFvsOhZG7DqSB0aXNrb3bDqSBzbHXFvmJ5Ijwvc3RyaW5nPgpAQCAtNjksMTIgKzcyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlJ1xaFlbsOtIMO6bG9oeSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJDaHliYSB0aXNrw6FybnkgdSDDumxvaHkgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlRpc2vDoXJuYSBibG9rdWplIMO6bG9odSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlRpc2tvdsOpIMO6bG9oeTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im1hbnkiPlRpc2tvdsOpIMO6bG9oeTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5UaXNrb3bDqSDDumxvaHk6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRpc2tvdsOpIMO6bG9oeTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJacnXFoWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZXN0YXJ0b3ZhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOZWx6ZSBzZSBwxZlpcG9qaXQgayB0aXNrw6FybsSbIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCA4OTNjOTkxLi5iOGJlNjI0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+RGVyIGJsZXYgZnVuZGV0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+RGVyIGJsZXYgZnVuZGV0IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyZTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iRmxlcmUgb3BseXNuaW5nZXIgb20gZGVubmUgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Ik5vZ2xlIHVkc2tyaXZuaW5nc3RqZW5lc3RlciBlciBkZWFrdGl2ZXJldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJWw6ZsZyB1ZHNrcmlmdHN0amVuZXN0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O4Z2VyIGVmdGVyIHByaW50ZXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iSW5nZW4gdWRza3Jpdm5pbmdzdGplbmVzdGVyIGVyIGFrdGl2ZXJldCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFubnVsbGVyZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlVkc2tyaWZ0ZW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBtaXNseWtrZWRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50ZXJlbiBoYXIgYmxva2VyZXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4tdWRza3JpZnRzam9iPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4tdWRza3JpZnRzam9iPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBbm51bGxlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iR2Vuc3RhcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iSW5nZW4gZm9yYmluZGVsc2UgdGlsIHByaW50ZXIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IGY2ZjUzZWEuLjBiNzcxODYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBEcnVja2VyIGdlZnVuZGVuPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IERydWNrZXIgZ2VmdW5kZW48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IldlaXRlcmUgSW5mb3JtYXRpb25lbiDDvGJlciBkaWVzZW4gRHJ1Y2tlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkVpbmlnZSBEcnVja2RpZW5zdGUgc2luZCBkZWFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJEcnVja2RpZW5zdCBhdXN3w6RobGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTdWNoZSBuYWNoIERydWNrZXJuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iS2VpbmUgRHJ1Y2tkaWVuc3RlIGFrdGl2aWVydCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IHdpcmQgYWJnZWJyb2NoZW4uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkRydWNrZXJmZWhsZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkRydWNrZXIgaGF0IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gYmxvY2tpZXJ0LiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkRydWNrYXVmdHLDpGdlIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+XCI8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5EcnVja2F1ZnRyYWcgXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz5cIjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQWJicmVjaGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJOZXUgc3RhcnRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJLZWluZSBWZXJiaW5kdW5nIHp1bSBEcnVja2VyIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCAxMGRkZjYyLi5kOWE0YWViIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Oks+Bzq3OuM63zrrOsc69IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDOtc66z4TPhc+Az4nPhM6tz4I8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7Oks+Bzq3OuM63zrrOtSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gzrXOus+Ez4XPgM+Jz4TOrs+CPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4izqDOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM+AzrvOt8+Bzr/Phs6/z4HOr861z4Igz4PPh861z4TOuc66zqwgzrzOtSDOsc+Fz4TPjM69IM+Ezr/OvSDOtc66z4TPhc+Az4nPhM6uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4izprOrM+Azr/Ouc61z4Igz4XPgM63z4EuIM61zrrPhM+Nz4DPic+DzrfPgiDOtc6vzr3Osc65IM6xz4DOtc69zrXPgc6zzr/PgM6/zrnOt868zq3Ovc61z4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4izpXPgM65zrvOrc6+z4TOtSDPhc+AzrfPgc61z4POr86xIM61zrrPhM+Nz4DPic+DzrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4izpHOvc6xzrbOrs+EzrfPg863IM6zzrnOsSDOtc66z4TPhc+Az4nPhM6tz4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLOlM61zr0gzq3Ph86/z4XOvSDOtc69zrXPgc6zzr/PgM6/zrnOt864zrXOryDPhc+AzrfPgc61z4POr861z4IgzrXOus+Ez43PgM+Jz4POt8+CIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Is6RzrrPjc+Bz4nPg863IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Is6jz4bOrM67zrzOsSDOtc66z4TPhc+Az4nPhM6uIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLOnyDOtc66z4TPhc+Az4nPhM6uz4IgzrHPgM6tzrrOu861zrnPg861IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gzrXPgc6zzrHPg86vzrXPgiDOtc66z4TPjc+Az4nPg863z4I8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gzrXPgc6zzrHPg86vzrEgzrXOus+Ez43PgM+Jz4POt8+CPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLOkc66z43Pgc+Jz4POtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4izpXPgM6xzr3Otc66zrrOr869zrfPg863Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Is6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPg8+Nzr3OtM61z4POtyDOvM61IM61zrrPhM+Fz4DPic+Ezq4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKaW5kZXggYTU0MGFjNS4uZDhhOTQzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcnMgZm91bmQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBmb3VuZDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iU29tZSBwcmludCBzZXJ2aWNlcyBhcmUgZGlzYWJsZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvb3NlIHByaW50IHNlcnZpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNlYXJjaGluZyBmb3IgcHJpbnRlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJObyBwcmludCBzZXJ2aWNlcyBlbmFibGVkIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGxpbmcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlciBlcnJvciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBibG9ja2VkIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9iczwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiBwcmludCBqb2I8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBjb25uZWN0aW9uIHRvIHByaW50ZXIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggYTU0MGFjNS4uZDhhOTQzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcnMgZm91bmQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBmb3VuZDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iU29tZSBwcmludCBzZXJ2aWNlcyBhcmUgZGlzYWJsZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvb3NlIHByaW50IHNlcnZpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNlYXJjaGluZyBmb3IgcHJpbnRlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJObyBwcmludCBzZXJ2aWNlcyBlbmFibGVkIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGxpbmcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlciBlcnJvciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBibG9ja2VkIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9iczwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiBwcmludCBqb2I8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBjb25uZWN0aW9uIHRvIHByaW50ZXIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggYTU0MGFjNS4uZDhhOTQzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcnMgZm91bmQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBmb3VuZDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBwcmludGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iU29tZSBwcmludCBzZXJ2aWNlcyBhcmUgZGlzYWJsZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvb3NlIHByaW50IHNlcnZpY2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlNlYXJjaGluZyBmb3IgcHJpbnRlcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJObyBwcmludCBzZXJ2aWNlcyBlbmFibGVkIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGxpbmcgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlciBlcnJvciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBibG9ja2VkIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gcHJpbnQgam9iczwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiBwcmludCBqb2I8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBjb25uZWN0aW9uIHRvIHByaW50ZXIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggODkyOWFhOC4uMTljNjk1YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZSBlbmNvbnRyYXJvbiA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3Jhcy48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5TZSBlbmNvbnRyw7MgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYS48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNw6FzIGluZm9ybWFjacOzbiBzb2JyZSBlc3RhIGltcHJlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkhheSBzZXJ2aWNpb3MgZGUgaW1wcmVzacOzbiBpbmhhYmlsaXRhZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkVsZWdpciBzZXJ2aWNpbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJCdXNjYW5kbyBpbXByZXNvcmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTm8gaGF5IHNlcnZpY2lvcyBkZSBpbXByZXNpw7NuIGhhYmlsaXRhZG9zIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyb3IgZGUgaW1wcmVzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBpbXByZXNvcmEgYmxvcXVlw7MgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5UcmFiYWpvcyBkZSBpbXByZXNpw7NuOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5UcmFiYWpvIGRlIGltcHJlc2nDs246IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJObyBoYXkgY29uZXhpw7NuIGNvbiBsYSBpbXByZXNvcmEuIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAppbmRleCA3Y2ZkOTJhLi5kMTNjY2RhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5TZSBoYW4gZW5jb250cmFkbyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3JhczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlNlIGhhIGVuY29udHJhZG8gPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGltcHJlc29yYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik3DoXMgaW5mb3JtYWNpw7NuIHNvYnJlIGVzdGEgaW1wcmVzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQWxndW5vcyBzZXJ2aWNpb3MgZGUgaW1wcmVzacOzbiBlc3TDoW4gaW5oYWJpbGl0YWRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTZWxlY2Npb25hciBzZXJ2aWNpbyBkZSBpbXByZXNpw7NuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJCdXNjYW5kbyBpbXByZXNvcmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTm8gaGF5IHNlcnZpY2lvcyBkZSBpbXByZXNpw7NuIGhhYmlsaXRhZG9zIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyb3IgZGUgaW1wcmVzb3JhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBpbXByZXNvcmEgaGEgYmxvcXVlYWRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5UcmFiYWpvcyBkZSBpbXByZXNpw7NuIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRyYWJham8gZGUgaW1wcmVzacOzbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJWb2x2ZXIgYSBlbXBlemFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5vIGhheSBjb25leGnDs24gY29uIGxhIGltcHJlc29yYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCBlZTkzYmNmLi5mMDNlYjM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPkxlaXRpIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyaXQ8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5MZWl0aSA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTGlzYXRlYXZlIHNlbGxlIHByaW50ZXJpIGtvaHRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iTcO1bmVkIHByaW50aW1pc3RlZW51c2VkIG9uIGtlZWxhdHVkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlByaW5kaXRlZW51c2UgdmFsaW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByaW50ZXJpdGUgb3RzaW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLDnGh0ZWdpIHByaW50aW1pc3RlZW51c3QgcG9sZSBsdWJhdHVkIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlByaW5kaXTDtsO2IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMO8aGlzdGFtaW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJQcmludGVyaSB2aWdhOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlciBibG9rZWVyaXMgdMO2w7YgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBwcmluZGl0w7bDtmQ8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gcHJpbmRpdMO2w7Y8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IlTDvGhpc3RhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJUYWFza8OkaXZpdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iUHJpbnRlcmnDvGhlbmR1cyBwdXVkdWIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwKaW5kZXggODgyZTg4OC4uZDQyNTVlMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZXUtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW5wcmltYWdhaWx1IGF1cmtpdHUgZGlyYTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbnByaW1hZ2FpbHUgYXVya2l0dSBkYTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkluZm9ybWF6aW8gZ2VoaWFnbyBpbnByaW1hZ2FpbHVhcmkgYnVydXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJEZXNnYWl0dXRhIGRhdWRlIGlucHJpbWF0emVrbyB6ZXJiaXR6dSBiYXR6dWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQXVrZXJhdHUgaW5wcmltYXR6ZS16ZXJiaXR6dWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IklucHJpbWFnYWlsdWFrIGJpbGF0emVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iRXogZGFnbyBnYWl0dXRhIGlucHJpbWF0emVrbyB6ZXJiaXR6dXJpayI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGJlcnRhbiBiZWhlcmEgdXp0ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yZWEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBpbnByaW1hdHplYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJbnByaW1hZy4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBibG9rZWF0dSBkdSI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBpbnByaW1hdHplLWxhbmFrPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IGlucHJpbWF0emUtbGFuYTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iVXR6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iQmVycmFiaWFyYXppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IklucHJpbWFnYWlsdWEgZXogZGFnbyBrb25la3RhdHV0YSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKaW5kZXggMTA3NDNlNy4uOTA3MTIzYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDahtin2b7ar9ixINuM2KfZgdiqINi02K88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDahtin2b7ar9ixINuM2KfZgdiqINi02K88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLYp9i32YTYp9i52KfYqiDYqNuM2LTYqtixINiv2LHYqNin2LHZhyDahtin2b7ar9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i2KjYudi224wg2KfYsiDYrtiv2YXYp9iqINqG2KfZviDYutuM2LHZgdi52KfZhCDZh9iz2KrZhtivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+Itin2YbYqtiu2KfYqCDYs9ix2YjbjNizINqG2KfZviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i2K/Ysdit2KfZhCDYrNiz2KrYrNmI24wg2obYp9m+2q/YsdmH2KciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLZh9uM2oYg2K7Yr9mF2KfYqiDahtin2b7bjCDZgdi52KfZhCDZhtuM2LPYqiI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLYr9ixINit2KfZhCDZhNi62YggPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i2K7Yt9in24wg2obYp9m+2q/YsSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i2obYp9m+2q/YsdiMINqp2KfYsSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INix2Kcg2YXYs9iv2YjYryDaqdix2K8iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+2qnYp9ixINqG2KfZviA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtqp2KfYsSDahtin2b4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLZhNi62YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Itix2KfZh+KAjNin2YbYr9in2LLbjCDZhdis2K/YryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLYp9iq2LXYp9mEINio2Kcg2obYp9m+2q/YsSDYqNix2YLYsdin2LEg2YbbjNiz2KoiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCmluZGV4IGVlMzVjNDEuLmY1N2I4ODQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiB0dWxvc3RpbnRhIGzDtnlkZXR0eTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiB0dWxvc3RpbiBsw7Z5ZGV0dHk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ikxpc8OkdGlldG9qYSB0w6RzdMOkIHR1bG9zdGltZXN0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Ik9zYSB0dWxvc3R1c3BhbHZlbHVpc3RhIG9uIHBvaXN0ZXR0dSBrw6R5dMO2c3TDpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJWYWxpdHNlIHR1bG9zdHVzcGFsdmVsdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iRXRzaXTDpMOkbiB0dWxvc3RpbWlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iRWkga8OkeXTDtnNzw6Qgb2xldmlhIHR1bG9zdHVzcGFsdmVsdWl0YSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQZXJ1dXRldGFhbiB0ecO2IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlR1bG9zdGludmlyaGUgdHnDtmxsZSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iVHVsb3N0aW4gZXN0aSB0ecO2biA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHR1bG9zdHVzdHnDtnTDpDwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiB0dWxvc3R1c3R5w7Y8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IlBlcnV1dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkvDpHlubmlzdMOkIHV1ZGVsbGVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJFaSB5aHRleXR0w6QgdHVsb3N0aW1lZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1mci1yQ0Evc3RyaW5ncy54bWwKaW5kZXggZWI5OTQ0MS4uOTQ5YmE1NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGltcHJpbWFudGUgdHJvdXbDqWU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBpbXByaW1hbnRlIHRyb3V2w6llczwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlBsdXMgZFwnaW5mb3JtYXRpb24gc3VyIGNldHRlIGltcHJpbWFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJDZXJ0YWlucyBzZXJ2aWNlcyBkXCdpbXByZXNzaW9uIHNvbnQgZMOpc2FjdGl2w6lzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlPDqWxlY3Rpb25uZXIgbGUgc2VydmljZSBkXCdpbXByZXNzaW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJSZWNoZXJjaGUgZFwnaW1wcmltYW50ZXMgZW4gY291cnMuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJBdWN1biBzZXJ2aWNlIGRcJ2ltcHJlc3Npb24gYWN0aXbDqSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJBbm51bGF0aW9uIGRlIMKrwqA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+wqDCu+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyZXVyIGltcHJlc3Npb24gOiDCq8KgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPsKgwrsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJbXByZXNzaW9uIGRlIMKrwqA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+wqDCuyBibG9xdcOpZSI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gdMOiY2hlIGRcJ2ltcHJlc3Npb248L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB0w6JjaGVzIGRcJ2ltcHJlc3Npb248L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlY29tbWVuY2VyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkF1Y3VuZSBjb25uZXhpb24gw6AgbFwnaW1wcmltYW50ZSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggYzBlZWNmYi4uMWZjYzA0MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPsKgaW1wcmltYW50ZSB0cm91dsOpZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqBpbXByaW1hbnRlcyB0cm91dsOpZXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlBsdXMgZFwnaW5mb3JtYXRpb25zIHN1ciBjZXR0ZSBpbXByaW1hbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQ2VydGFpbnMgc2VydmljZXMgZFwnaW1wcmVzc2lvbiBzb250IGTDqXNhY3RpdsOpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTw6lsZWN0aW9ubmVyIGxlIHNlcnZpY2UgZFwnaW1wcmVzc2lvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUmVjaGVyY2hlIGRcJ2ltcHJpbWFudGVzIGVuIGNvdXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iQXVjdW4gc2VydmljZSBkXCdpbXByZXNzaW9uIGFjdGl2w6kiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxhdGlvbiBkZSBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiBlbiBjb3Vyc+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJyZXVyIGltcHJlc3Npb24gcG91ciBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkltcHJlc3Npb24gZGUgXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIgYmxvcXXDqWUiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+wqB0w6JjaGUgZFwnaW1wcmVzc2lvbjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+wqB0w6JjaGVzIGRcJ2ltcHJlc3Npb248L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlZMOpbWFycmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkF1Y3VuZSBjb25uZXhpb24gw6AgbFwnaW1wcmltYW50ZS4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwKaW5kZXggYjRhMWVjNi4uMmU2MDk2MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5FbmNvbnRyw6Fyb25zZSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzb3JhczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkVuY29udHJvdXNlIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbXByZXNvcmE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNw6FpcyBpbmZvcm1hY2nDs24gc29icmUgZXN0YSBpbXByZXNvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJBbGfDum5zIHNlcnZpem9zIGRlIGltcHJlc2nDs24gZXN0w6FuIGRlc2FjdGl2YWRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJFc2NvbGxlciBzZXJ2aXpvIGRlIGltcHJlc2nDs24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IkJ1c2NhIGRlIGltcHJlc29yYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOb24gaGFpIHNlcnZpem9zIGRlIGltcHJlc2nDs24gYWN0aXZhZG9zIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJybyBkYSBpbXByZXNvcmEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkEgaW1wcmVzb3JhIGJsb3F1ZW91IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gdHJhYmFsbG9zIGRlIGltcHJlc2nDs248L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gdHJhYmFsbG8gZGUgaW1wcmVzacOzbjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOb24gaGFpIGNvbmV4acOzbiBjb2EgaW1wcmVzb3JhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCmluZGV4IDhmNzc5NTMuLjRiYTk2OWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgqqrgq43gqrDgqr/gqqjgq43gqp/gqrDgq43gqrgg4Kqu4Kqz4KuN4Kqv4Kq+4KqCPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4Kqq4KuN4Kqw4Kq/4Kqo4KuN4Kqf4Kqw4KuN4Kq4IOCqruCqs+CrjeCqr+CqvuCqgjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCqhiDgqqrgq43gqrDgqr/gqqjgq43gqp/gqrAg4Kq14Kq/4Kq24KuHIOCqteCqp+CrgSDgqq7gqr7gqrngqr/gqqTgq4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLgqpXgq4fgqp/gqrLgq4DgqpUg4Kqb4Kq+4KqqIOCquOCrh+CqteCqvuCqkyDgqoXgqpXgq43gqrfgqq4g4KqV4Kqw4KuH4KqyIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgqqrgq43gqrDgqr/gqqjgq43gqp8g4Kq44KuH4Kq14Kq+IOCqquCquOCqguCqpiDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCqquCrjeCqsOCqv+CqqOCrjeCqn+CqsOCrjeCquCDgqq7gqr7gqp/gq4cg4Kq24KuL4Kqn4KuAIOCqsOCqueCrjeCqr+CrgeCqgiDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgqpXgq4vgqogg4Kqb4Kq+4KqqIOCquOCrh+CqteCqvuCqkyDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4KuH4KqyIOCqqOCqpeCrgCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCqqOCrhyDgqrDgqqYg4KqV4Kqw4KuAIOCqsOCqueCrjeCqr+CrgeCqgiDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuCqquCrjeCqsOCqv+CqqOCrjeCqn+CqsCDgqq3gq4LgqrIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCqquCrjeCqsOCqv+CqqOCrjeCqn+CqsOCrhyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCqheCqteCqsOCri+Cqp+Cqv+CqpCDgqpXgqrDgq43gqq/gq4HgqoIiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCqm+CqvuCqqiDgqpzgq4vgqqw8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDgqpvgqr7gqqog4Kqc4KuL4KqsPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgqrDgqqYg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgqqrgq4HgqqjgqoPgqqrgq43gqrDgqr7gqrDgqoLgqq0g4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuCqquCrjeCqsOCqv+CqqOCrjeCqn+CqsCDgqq7gqr7gqp/gq4cg4KqV4KuL4KqIIOCqleCqqOCrh+CqleCrjeCqtuCqqCDgqqjgqqXgq4AiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDRjMTEzMjMuLjEwNjEzNDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkruCkv+CksuClhzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpK7gpL/gpLLgpYc8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgpIfgpLgg4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkleClhyDgpKzgpL7gpLDgpYcg4KSu4KWH4KSCIOCkheCkp+Ckv+CklSDgpJzgpL7gpKjgpJXgpL7gpLDgpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLgpJXgpYHgpJsg4KSq4KWN4KSw4KS/4KSC4KSfIOCkuOClh+CkteCkvuCkj+CkgiDgpIXgpJXgpY3gpLfgpK4g4KS54KWI4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KSa4KWB4KSo4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSW4KWL4KScIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgpJXgpYvgpIgg4KSt4KWAIOCkquCljeCksOCkv+CkguCknyDgpLjgpYfgpLXgpL4g4KS44KSV4KWN4KS34KSuIOCkqOCkueClgOCkgiDgpLngpYgiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLDgpKbgpY3gpKYg4KS54KWLIOCksOCkueCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuCkquCljeCksOCkv+CkguCkn+CksCDgpKTgpY3gpLDgpYHgpJ/gpL8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCkquCljeCksOCkv+CkguCkn+CksCDgpIXgpLXgpLDgpYvgpKfgpL/gpKQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSfIOCkleCkvuCksOCljeCkrzwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCknyDgpJXgpL7gpLDgpY3gpK88L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuCkheCkreClgCDgpKjgpLngpYDgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCkquClgeCkqDog4KSG4KSw4KSC4KStIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLgpKrgpY3gpLDgpL/gpILgpJ/gpLAg4KSV4KWHIOCksuCkv+CkjyDgpJXgpYvgpIgg4KSV4KSo4KWH4KSV4KWN4KS24KSoIOCkqOCkueClgOCkgiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKaW5kZXggNGNlYzNiYS4uNGE3ZDI5ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTYwLDYgKzYwLDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPlByb25hxJFlbmEgc3UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHBpc2HEjWE8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlByb25hxJFlbm8gamUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHBpc2HEjWE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IlZpxaFlIGluZm9ybWFjaWphIG8gb3ZvbSBwaXNhxI11Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iTmVrZSBzdSB1c2x1Z2UgaXNwaXNhIG9uZW1vZ3XEh2VuZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJPZGFiZXJpdGUgdXNsdWd1IGlzcGlzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iVHJhxb5lbmplIHBpc2HEjWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaWplIG9tb2d1xIdlbmEgbmlqZWRuYSB1c2x1Z2EgaXNwaXNhIjwvc3RyaW5nPgpAQCAtNjgsMTEgKzcxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ik90a2F6aXZhbmplIHphZGF0a2EgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUG9ncmXFoWthIHBpc2HEjWEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlBpc2HEjSBqZSBibG9raXJhbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB6YWRhdGFrIGlzcGlzYTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB6YWRhdGthIGlzcGlzYTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHphZGF0YWthIGlzcGlzYTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iT2R1c3RhbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlBvbm92byBwb2tyZW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lbWEgdmV6ZSBzIHBpc2HEjWVtIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCBhYzFiYTZlLi41YWFlMmU0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbnlvbXRhdMOzIMOpc3psZWx2ZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBueW9tdGF0w7Mgw6lzemxlbHZlPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJUb3bDoWJiaSBpbmZvcm3DoWNpw7MgZXJyxZFsIGEgbnlvbXRhdMOzcsOzbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkVneWVzIG55b210YXTDoXNpIHN6b2xnw6FsdGF0w6Fzb2sgbGUgdmFubmFrIHRpbHR2YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJOeW9tdGF0w6FzaSBzem9sZ8OhbHRhdMOhcyBraXbDoWxhc3p0w6FzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iTnlvbXRhdMOzayBrZXJlc8Opc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOaW5jcyBlbmdlZMOpbHllemV0dCBueW9tdGF0w6FzaSBzem9sZ8OhbHRhdMOhcyI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJBKHopIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gdMO2cmzDqXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJOeW9tdGF0w6FzaSBoaWJhOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iQSh6KSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGxldGlsdHZhLiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBueW9tdGF0w6FzaSBmZWxhZGF0PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IG55b210YXTDoXNpIGZlbGFkYXQ8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+Ik3DqWdzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iw5pqcmFpbmTDrXTDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTmluY3Mga2FwY3NvbGF0IGEgbnlvbXRhdMOzdmFsIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IGRkYTY3NDUuLjE3OWMzODQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPtSz1b/VttW+1aXVrCDVpyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtSz1b/VttW+1aXVrCDVpyA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g1b/VutWr1bk8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLVgNWh1b7VpdWs1bXVodWsINW/1aXVstWl1a/VuNaC1anVtdW41oLVttW21aXWgCDVodW11b0g1b/VutWr1bnVqyDVtNWh1b3Vq9W2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i1Y/VutWl1azVuNaCINW41oDVuNW3INWu1aHVvNWh1bXVuNaC1anVtdW41oLVttW21aXWgNWoINWv1aHVvdWl1oHVvtWh1a4g1aXVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLUuNW21b/WgNWl1oQg1b/VutWl1azVuNaCINWu1aHVvNWh1bXVuNaC1anVtdW41oLVttWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLVj9W61avVudW21aXWgNWrINW41oDVuNW21bjWgtW0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i1LHVr9W/1avVvtWh1oHVvtWh1a4g1b/VutW01aHVtiDVrtWh1bzVodW11bjWgtWp1bXVuNaC1bbVttWl1oAg1bnVr9Wh1bYiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPi3VqCDVudWl1bLVodaA1a/VvtW41oLVtCDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i1Y/VutWr1bnVqyDVvdWt1aHVrCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i1Y/VutWr1bnVtiDVodaA1aPVpdWs1aHWg9Wh1a/VpdWsINWnIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4t1agiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INW/1brVtNWh1bYg1aHVt9Wt1aHVv9Wh1bbWhDwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INW/1brVtNWh1bYg1aHVt9Wt1aHVv9Wh1bbWhDwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i1YnVpdWy1aHWgNWv1aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i1Y7VpdaA1aHVo9W41oDVrtWh1oDVr9Wl1awiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i1Y/VutWr1bnVqyDVsNWl1b8g1a/VodW6INW51a/VoSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKaW5kZXggYjIwM2UyYi4uNzI4NmY3YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZGl0ZW11a2FuPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXIgZGl0ZW11a2FuPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iSW5mb3JtYXNpIHNlbGVuZ2thcG55YSB0ZW50YW5nIHByaW50ZXIgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQmViZXJhcGEgbGF5YW5hbiBjZXRhayBkaW5vbmFrdGlma2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBpbGloIGxheWFuYW4gY2V0YWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Ik1lbmNhcmkgcHJpbnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IlRpZGFrIGFkYSBsYXlhbmFuIGNldGFrIHlhbmcgYWt0aWYiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iTWVtYmF0YWxrYW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQWRhIGtlc2FsYWhhbiBwcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIG1lbWJsb2tpciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VHVnYXMgY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+VHVnYXMgY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJCYXRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iTXVsYWkgVWxhbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iVGlkYWsgYWRhIHNhbWJ1bmdhbiBrZSBwcmludGVyIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sCmluZGV4IDZkZmRhYmMuLjllYTQ5YTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmVudGFyaSBmYW5uc3Q8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmVudGFyYXIgZnVuZHVzdDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iRnJla2FyaSB1cHBsw71zaW5nYXIgdW0gw75lbm5hbiBwcmVudGFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkhsdXRpIHByZW50w75qw7NudXN0dW5uYXIgZXIgw7N2aXJrdXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVmVsZHUgcHJlbnTDvmrDs251c3R1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJMZWl0YXIgYcOwIHByZW50YXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iRW5naW4gcHJlbnTDvmrDs251c3RhIGVyIHZpcmsiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iSMOmdHRpciB2acOwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByZW50YXJhdmlsbGEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByZW50YXJpIMO6dGlsb2thw7BpIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHByZW50dmVyazwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHByZW50dmVyazwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iSMOmdHRhIHZpw7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkVuZHVycsOmc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iRW5naW4gdGVuZ2luZyB2acOwIHByZW50YXJhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAppbmRleCBmZDU0NzNhLi5jMTlkMDEyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gc3RhbXBhbnRpIHRyb3ZhdGU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gc3RhbXBhbnRlIHRyb3ZhdGE8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJVbHRlcmlvcmkgaW5mb3JtYXppb25pIHN1IHF1ZXN0YSBzdGFtcGFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJBbGN1bmkgc2Vydml6aSBkaSBzdGFtcGEgc29ubyBkaXNhdHRpdmF0aS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTY2VnbGkgc2Vydml6aW8gZGkgc3RhbXBhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJSaWNlcmNhIGRpIHN0YW1wYW50aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5vbiDDqCBzdGF0byBhdHRpdmF0byBhbGN1biBzZXJ2aXppbyBkaSBzdGFtcGEiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW5udWxsYW1lbnRvIGRpIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yZSBkZWxsYSBzdGFtcGFudGU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJMYSBzdGFtcGFudGUgaGEgYmxvY2NhdG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBwcm9jZXNzaSBkaSBzdGFtcGE8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gcHJvY2Vzc28gZGkgc3RhbXBhPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBbm51bGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSaWF2dmlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik5lc3N1biBjb2xsZWdhbWVudG8gYWxsYSBzdGFtcGFudGUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IGRkMDYyYTMuLjAwYmYyN2MgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPteg157XpteQ15UgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INee15PXpNeh15XXqjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPteg157XpteQ15Qg157Xk9ek16HXqiA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLXnteZ15PXoiDXoNeV16HXoyDXotecINee15PXpNeh16og15bXlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Itep15nXqNeV16rXmSDXlNeT16TXodeUINee16HXldeZ157XmdedINee15XXqdeR16rXmdedLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IteR15fXqCDXqdeZ16jXldeqINeU15PXpNeh15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Itee15fXpNepINee15PXpNeh15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Itec15Ag15TXldek16LXnNeVINep15nXqNeV16rXmSDXlNeT16TXodeUIjwvc3RyaW5nPgpAQCAtNjksMTIgKzcyLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Itee15HXmNecINeQ16ogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i16nXkteZ15DXqiDXnteT16TXodeqINeRLTx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLXlNee15PXpNeh16og15fXodee15Qg15DXqiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJ0d28iPiDXoteR15XXk9eV16og15TXk9ek16HXlCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+INei15HXldeT15XXqiDXlNeT16TXodeUIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+INei15HXldeT15XXqiDXlNeT16TXodeUIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiDXoteR15XXk9eqINeU15PXpNeh15QgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLXkdeY15wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IteU16TXotecINee15fXk9epIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IteQ15nXnyDXl9eZ15HXldeoINec157Xk9ek16HXqiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggMjNlNDgwOS4uZTBmYzc5YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+5Y+w44Gu44OX44Oq44Oz44K/44GM6KaL44Gk44GL44KK44G+44GX44GfPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+5Y+w44Gu44OX44Oq44Oz44K/44GM6KaL44Gk44GL44KK44G+44GX44GfPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i44GT44Gu44OX44Oq44Oz44K/44Gu6Kmz57SwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i5LiA6YOo44Gu5Y2w5Yi344K144O844OT44K544Gv54Sh5Yq544Gr44Gq44Gj44Gm44GE44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i5Y2w5Yi344K144O844OT44K544Gu6YG45oqeIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLjg5fjg6rjg7Pjgr/jga7mpJzntKLkuK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLkvb/nlKjjgafjgY3jgovljbDliLfjgrXjg7zjg5PjgrnjgYzjgYLjgorjgb7jgZvjgpMiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuOCkuOCreODo+ODs+OCu+ODq+OBl+OBpuOBhOOBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i44OX44Oq44Oz44K/44Ko44Op44O8OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuOCkuODluODreODg+OCr+OBl+OBvuOBl+OBnyI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPuOBruWNsOWIt+OCuOODp+ODljwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPuOBruWNsOWIt+OCuOODp+ODljwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i44Kt44Oj44Oz44K744OrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLlho3oqabooYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i44OX44Oq44Oz44K/44Gr5o6l57aa44GV44KM44Gm44GE44G+44Gb44KTIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IDlmODZmMDUuLmFkMTQ2OGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDmCDhg5zhg5Dhg57hg53hg5Xhg5zhg5jhg5A8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOYIOGDnOGDkOGDnuGDneGDleGDnOGDmOGDkDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJQgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4YOT4YOQ4YOb4YOQ4YOi4YOU4YOR4YOY4YOX4YOYIOGDmOGDnOGDpOGDneGDoOGDm+GDkOGDquGDmOGDkCDhg5Dhg5sg4YOe4YOg4YOY4YOc4YOi4YOU4YOg4YOY4YOhIOGDqOGDlOGDoeGDkOGDruGDlOGDkSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSDhg5bhg53hg5Lhg5jhg5Thg6Dhg5fhg5gg4YOh4YOU4YOg4YOV4YOY4YOh4YOYIOGDkuGDkOGDl+GDmOGDqOGDo+GDmuGDmOGDkC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLhg5Dhg5jhg6Dhg6nhg5jhg5Thg5cg4YOR4YOU4YOt4YOT4YOV4YOY4YOhIOGDoeGDlOGDoOGDleGDmOGDoeGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4YOb4YOY4YOb4YOT4YOY4YOc4YOQ4YOg4YOU4YOd4YOR4YOhIOGDnuGDoOGDmOGDnOGDouGDlOGDoOGDlOGDkeGDmOGDoSDhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOh4YOU4YOg4YOV4YOY4YOh4YOU4YOR4YOYIOGDkuGDkOGDkOGDpeGDouGDmOGDo+GDoOGDlOGDkeGDo+GDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuGDm+GDmOGDm+GDk+GDmOGDnOGDkOGDoOGDlOGDneGDkeGDoSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+LeGDmOGDoSDhg5Lhg5Dhg6Phg6Xhg5vhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGDkeGDlOGDreGDk+GDleGDmOGDoSDhg6jhg5Thg6rhg5Phg53hg5vhg5AgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDm+GDkCDhg5Phg5Dhg5Hhg5rhg53hg5nhg5AgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDhg5Hhg5Thg63hg5Phg5Xhg5jhg6Eg4YOT4YOQ4YOV4YOQ4YOa4YOU4YOR4YOQPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IOGDkeGDlOGDreGDk+GDleGDmOGDoSDhg5Phg5Dhg5Xhg5Dhg5rhg5Thg5Hhg5A8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuGDkuGDkOGDo+GDpeGDm+GDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4YOS4YOQ4YOT4YOQ4YOi4YOV4YOY4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuGDnuGDoOGDmOGDnOGDouGDlOGDoOGDl+GDkOGDnCDhg5nhg5Dhg5Xhg6jhg5jhg6Dhg5gg4YOQ4YOgIOGDkOGDoOGDmOGDoSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAppbmRleCAwNWMzMDBlLi5kMDMzN2E2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDRgtCw0LHRi9C70LTRizwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgCDRgtCw0LHRi9C70LTRizwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCe0YHRiyDQv9GA0LjQvdGC0LXRgCDRgtGD0YDQsNC70Ysg0pvQvtGB0YvQvNGI0LAg0LDSm9C/0LDRgNCw0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLQmtC10LnQsdGW0YAg0LHQsNGB0YvQvyDRiNGL0pPQsNGA0YMg0pvRi9C30LzQtdGC0YLQtdGA0ZYg06nRiNGW0YDRltC70LPQtdC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCf0YDQuNC90YLQtdGAINKb0YvQt9C80LXRgtGW0L0g0YLQsNKj0LTQsNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLQn9GA0LjQvdGC0LXRgNC70LXRgNC00ZYg0ZbQt9C00LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCR0LDRgdGL0L8g0YjRi9KT0LDRgNGDINKb0YvQt9C80LXRgtGC0LXRgNGWINKb0L7RgdGL0LvQvNCw0pPQsNC9Ijwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g0LbSsdC80YvRgdGL0L0g0YLQvtKb0YLQsNGC0YPQtNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAINKb0LDRgtC10LvRltCz0ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQn9GA0LjQvdGC0LXRgCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INC20rHQvNGL0YHRi9C9INCx06nQs9C10LTRliI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDQsdCw0YHQv9CwINGC0LDQv9GB0YvRgNC80LDRgdGLPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+INCx0LDRgdC/0LAg0YLQsNC/0YHRi9GA0LzQsNGB0Ys8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCi0L7Sm9GC0LDRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLSmtCw0LnRgtCwINCx0LDRgdGC0LDRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQn9GA0LjQvdGC0LXRgNC80LXQvSDQsdCw0LnQu9Cw0L3Ri9GBINC20L7SmyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAppbmRleCAwODYxZTU5Li5jOTQzMWU5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuGemuGegOGeg+GevuGeieGemOGfieGetuGen+GfiuGeuOGek+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7hnprhnoDhnoPhnr7hnonhnpjhn4nhnrbhnp/hn4rhnrjhnpPhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+PC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4Z6W4Z+Q4Z6P4Z+M4Z6Y4Z624Z6T4Z6U4Z6T4Z+S4Z6Q4Z+C4Z6Y4Z6i4Z+G4Z6W4Z644Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4Z6T4Z+B4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4Z6f4Z+B4Z6c4Z624Z6A4Z6Y4Z+S4Z6Y4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4Z6Y4Z694Z6Z4Z6F4Z+G4Z6T4Z694Z6T4Z6P4Z+S4Z6a4Z684Z6c4Z6U4Z624Z6T4Z6U4Z634Z6R4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Z6H4Z+S4Z6a4Z6+4Z6f4oCL4Z6f4Z+B4Z6c4Z624oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLhnp/hn5Lhnpzhn4LhnoThnprhnoDigIvhnpjhn4nhnrbhnp/hn4rhnrjhnpPigIvhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLhnoLhn5LhnpjhnrbhnpPhnoDhnrbhnprhnpThnr7hnoDhnorhn4bhno7hnr7hnprhnoDhnrbhnprhnp/hn4HhnpzhnrbhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpbhnpHhn4EiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i4Z6A4Z624Z6a4oCL4Z6U4Z+E4Z+H4Z6U4Z6E4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGegOGfhuGeoOGeu+Gen+KAi+GemOGfieGetuGen+GfiuGeuOGek+KAi+GelOGfhOGfh+GeluGeu+GemOGfkuGeliA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4oCL4Z6U4Z624Z6T4oCL4Z6R4Z6U4Z+L4Z6f4Z+S4Z6A4Z624Z6P4Z+LIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7hnoDhnrbhnprhnoThnrbhnprhnpThn4Thn4fhnpbhnrvhnpjhn5LhnpYgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4Z6A4Z624Z6a4Z6E4Z624Z6a4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4Z6U4Z+E4Z+H4Z6U4Z6E4Z+LIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLhnoXhnrbhnpThn4vhnpXhn5Lhnorhnr7hnpjigIvhnqHhnr7hnoThnpzhnrfhnokiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4Z6C4Z+S4Z6Y4Z624Z6T4oCL4oCL4oCL4Z6A4Z624Z6a4oCL4Z6X4Z+S4Z6H4Z624Z6U4Z+L4oCL4Z6R4Z+F4oCL4Z6Y4Z+J4Z624Z6f4Z+K4Z644Z6T4oCL4Z6U4Z+E4Z+H4Z6W4Z674Z6Y4Z+S4Z6W4oCLIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCmluZGV4IDcxYjA5OGQuLmZjNTE0OWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgsqrgs43gsrDgsr/gsoLgsp/gsrDgs43igIzgspfgsrPgs4Eg4LKq4LKk4LON4LKk4LOG4LKv4LK+4LKX4LK/4LK14LOGPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4LKq4LON4LKw4LK/4LKC4LKf4LKw4LON4oCM4LKX4LKz4LOBIOCyquCypOCzjeCypOCzhuCyr+CyvuCyl+Cyv+CyteCzhjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCyiCDgsqrgs43gsrDgsr/gsoLgsp/gsrDgs40g4LKs4LKX4LON4LKX4LOGIOCyh+CyqOCzjeCyqOCyt+CzjeCyn+CzgSDgsq7gsr7gsrngsr/gsqTgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLgspXgs4bgsrLgsrXgs4Eg4LKu4LOB4LKm4LON4LKw4LKjIOCyuOCzh+CyteCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsqjgsr/gsrfgs43gspXgs43gsrDgsr/gsq/gspfgs4rgsrPgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4LKu4LOB4LKm4LON4LKw4LKjIOCyuOCzh+CyteCzhuCyr+CyqOCzjeCyqOCzgSDgsobgsq/gs43gspXgs4bgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCyquCzjeCysOCyv+CyguCyn+CysOCzjeKAjOKAjOCyl+Cys+Cyv+Cyl+CyvuCyl+CyvyDgsrngs4HgsqHgs4HgspXgsrLgsr7gspfgs4HgsqTgs43gsqTgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgsq/gsr7gsrXgs4Hgsqbgs4cg4LKu4LOB4LKm4LON4LKw4LKjIOCyuOCzh+CyteCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgsrjgspXgs43gsrDgsr/gsq/gspfgs4rgsrPgsr/gsrjgsr/gsrLgs43gsrIiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgsrDgsqbgs43gsqbgs4Eg4LKu4LK+4LKh4LKy4LK+4LKX4LOB4LKk4LON4LKk4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLgsq7gs4Hgsqbgs43gsrDgspUg4LKm4LOL4LK3IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLgsq7gs4Hgsqbgs43gsrDgspXgsrXgs4EgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgsqjgsr/gsrDgs43gsqzgsoLgsqfgsr/gsrjgsr/gsqbgs4YiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCyruCzgeCypuCzjeCysOCyoyDgspXgsr7gsrDgs43gsq/gspfgsrPgs4E8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDgsq7gs4Hgsqbgs43gsrDgsqMg4LKV4LK+4LKw4LON4LKv4LKX4LKz4LOBPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgsrDgsqbgs43gsqbgs4Hgsq7gsr7gsqHgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCyruCysOCzgeCyquCzjeCysOCyvuCysOCyguCyreCyv+CyuOCzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLgsq7gs4Hgsqbgs43gsrDgspXgspXgs43gspXgs4Yg4LK44LKC4LKq4LKw4LON4LKV4LK14LK/4LKy4LON4LKyIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAppbmRleCA0NTFhYjU4Li4yZmFmZjFmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7tlITrprDthLAgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+64yAIOqygOyDieuQqDwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPu2UhOumsO2EsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz7rjIAg6rKA7IOJ65CoPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i7J20IO2UhOumsO2EsOyXkCDrjIDtlZwg7KCV67O0IOuNlOuztOq4sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Iu2UhOumsO2KuCDshJzruYTsiqQg7J2867aA6rCAIOyCrOyaqSDspJHsp4DrkJjsl4jsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i7J247IeEIOyEnOu5hOyKpCDshKDtg50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iu2UhOumsO2EsCDqsoDsg4kg7KSRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i7IKs7JqpIOqwgOuKpe2VnCDtlITrprDtirgg7ISc67mE7IqkIOyXhuydjCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOy3qOyGjCDspJEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+Iu2UhOumsO2EsCDsmKTrpZg6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLssKjri6jrkJwg7ZSE66aw7YSwOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOyduOyHhCDsnpHsl4U8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4g7J247IeEIOyekeyXhTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i7Leo7IaMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLri6Tsi5wg7Iuc7J6RIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Iu2UhOumsO2EsOyZgCDsl7DqsrDrkJjsp4Ag7JWK7J2MIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCmluZGV4IDk4ZGEwOGMuLmEwMWU0YTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAINGC0LDQsdGL0LvQtNGLPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+INC/0YDQuNC90YLQtdGAINGC0LDQsdGL0LvQtNGLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i0JHRg9C7INC/0YDQuNC90YLQtdGAINC206nQvdKv0L3QtNOpINC606nQsdKv0YDTqdOp0Log0LzQsNCw0LvRi9C80LDRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+ItCR0LDRgdGL0L8g0YfRi9Cz0LDRgNGD0YMg0LrRi9C30LzQsNGC0YLQsNGA0YvQvdGL0L0g0LDQudGA0YvQvNGLINOp0YfSr9GA0q/Qu9Cz06nQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQn9GA0LjQvdGC0LXRgCDQutGL0LfQvNCw0YLRi9C9INGC0LDQvdC00L7QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0J/RgNC40L3RgtC10YDQu9C10YAg0LjQt9C00LXQu9Kv0q/QtNOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J/RgNC40L3RgtC10YAt0LrRi9C30LzQsNGC0YLQsNGA0Ysg0LjRiNGC0LXRgtC40LvQs9C10L0g0Y3QvNC10YEiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDRgtC+0LrRgtC+0YLRg9C70YPRg9C00LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCf0YDQuNC90YLQtdGA0LTQtSDQutCw0YLQsCDQutC10YLRgtC4OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0J/RgNC40L3RgtC10YAg0LHTqdCz06nRgtGC06nQtNKvOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INCx0LDRgdGD0YMg0YLQsNC/0YjRi9GA0LzQsNGB0Ys8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4g0LHQsNGB0YPRgyDRgtCw0L/RiNGL0YDQvNCw0YHRizwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i0JDQudC90YPRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0JrQsNC50YDQsCDQsdCw0YjRgtC+0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i0J/RgNC40L3RgtC10YAg0LzQtdC90LXQvSDQsdCw0LnQu9Cw0L3Ri9GIINC20L7QuiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCAyMDI5ZmRmLi5iNWQxM2I1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgu4DguoTgurfgu4jguq3guofigIvgup7gurTguqHigIvgupbgurfguoHigIvgup7gurvguprigIvgu4HguqXgu4nguqc8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g4LuA4LqE4Lq34LuI4Lqt4LqH4oCL4Lqe4Lq04Lqh4oCL4LqW4Lq34LqB4oCL4Lqe4Lq74Lqa4oCL4LuB4Lql4LuJ4LqnPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4Lqe4Lq14LuI4Lqh4LuA4LqV4Lq14Lqh4LqB4LuI4Lq94Lqn4LqB4Lqx4Lqa4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04Lqh4LqZ4Lq14LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4Lqa4Lqy4LqH4LqB4Lqy4LqZ4Lqa4LuN4Lql4Lq04LqB4Lqy4LqZ4Lqe4Lq04Lqh4LqW4Lq34LqB4Lqb4Lq04LqU4LqZ4Lqz4LuD4LqK4LuJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC7gOC6peC6t+C6reC6geC6muC7jeC6peC6tOC6geC6suC6meC6geC6suC6meC6nuC6tOC6oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i4LqB4Lqz4Lql4Lqx4LqH4LqK4Lqt4LqB4Lqr4Lqy4LuA4LqE4Lq34LuI4Lqt4LqH4Lqe4Lq04LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4Lqa4LuN4LuI4oCL4Lqh4Lq14oCL4LqB4Lqy4LqZ4oCL4Lqa4LuN4oCL4Lql4Lq04oCL4LqB4Lqy4LqZ4oCL4Lqe4Lq04Lqh4oCL4LuA4Lqb4Lq14LqU4oCL4LuD4LqK4LuJ4oCL4LqH4Lqy4LqZ4oCL4LuE4Lqn4LuJIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IuC6geC6s+C6peC6seC6h+C6jeC6u+C6geC7gOC6peC6teC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLgu4DguoTgurfgu4jguq3guofgup7gurTguqHgu4DguoHgurXgupTguoLgu43gu4ngupzgurTgupTgup7gurLgupQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oeC6luC6t+C6geC6muC6peC6reC6gSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOC6h+C6suC6meKAi+C6nuC6tOC6oTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiDguofgurLgupnigIvgup7gurTguqE8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuC6jeC6u+C6geC7gOC6peC6teC6gSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4Lqb4Lq04LqU4LuA4Lqb4Lq14LqU4LuD4Lud4LuIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuC6muC7jeC7iOC6oeC6teC6geC6suC6meC7gOC6iuC6t+C7iOC6reC6oeC6leC7jeC7iOC6q+C6suC7gOC6hOC6t+C7iOC6reC6h+C6nuC6tOC6oSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKaW5kZXggOTcyYWJiNS4uM2I4ZjE0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKQEAgLTYxLDYgKzYxLDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij5SYXN0YSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gc3BhdXNkaW50dXZvPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5SYXN0YSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gc3BhdXNkaW50dXbFszwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+IuKAnjx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPuKAnCDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iRGF1Z2lhdSBpbmZvcm1hY2lqb3MgYXBpZSDFocSvIHNwYXVzZGludHV2xIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJLYWkga3VyaW9zIHNwYXVzZGluaW1vIHBhc2xhdWdvcyBpxaFqdW5ndG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBhc2lyaW5raXRlIHNwYXVzZGluaW1vIHBhc2xhdWfEhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSWXFoWtvbWEgc3BhdXNkaW50dXbFsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lxK9nYWxpbnRhIGpva2nFsyBzcGF1c2RpbmltbyBwYXNsYXVnxbMiPC9zdHJpbmc+CkBAIC02OSwxMiArNzIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXTFoWF1a2lhbWE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlNwYXVzZGludHV2byBrbGFpZGE6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTcGF1c2RpbnR1dmFzIHXFvmJsb2thdm86IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHNwYXVzZGluaW1vIHXFvmR1b3RpczwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBzcGF1c2RpbmltbyB1xb5kdW90eXM8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHNwYXVzZGluaW1vIHXFvmR1b3RpZXM8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBzcGF1c2RpbmltbyB1xb5kdW/EjWnFszwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQXTFoWF1a3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJQYWxlaXN0aSBpxaEgbmF1am8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iTsSXcmEgcnnFoWlvIHN1IHNwYXVzZGludHV2dSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKaW5kZXggZjU2NWIyMy4uNzYyZDBiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTYwLDYgKzYwLDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPkF0cmFzdHMgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqBwcmludGVyczwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+QXRyYXN0aSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz7CoHByaW50ZXJpPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+wqDigJQgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iUGxhxaHEgWthIGluZm9ybcSBY2lqYSBwYXIgxaFvIHByaW50ZXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iRGHFvmkgZHJ1a2FzIHBha2FscG9qdW1pIGlyIGF0c3DEk2pvdGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iSXp2xJNsaWV0aWVzIGRydWvEgcWhYW5hcyBwYWthbHBvanVtdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcnUgbWVrbMSTxaFhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOYXYgaWVzcMSTam90cyBuZXZpZW5zIGRydWthcyBwYWthbHBvanVtcyI8L3N0cmluZz4KQEAgLTY4LDExICs3MSw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQxIFydHJhdWMgZHJ1a2FzIGRhcmJ1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IlByaW50ZXJhIGvEvMWrZGEgYXIgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlByaW50ZXJpcyBibG/Et8STamEgZGFyYnUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iemVybyI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+wqBkcnVrYXMgZGFyYmk8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz7CoGRydWthcyBkYXJiczwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+wqBkcnVrYXMgZGFyYmk8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkF0Y2VsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iUmVzdGFydMSTdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOYXYgc2F2aWVub2p1bWEgYXIgcHJpbnRlcmkiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKaW5kZXggZjVjMDZkMS4uZGU2ZDNlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0J/RgNC+0L3QsNGY0LTQtdC90Lgg0YHQtSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0L/QtdGH0LDRgtCw0Yc8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCf0YDQvtC90LDRmNC00LXQvdC4INGB0LUgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INC/0LXRh9Cw0YLQsNGH0Lg8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLQn9C+0LLQtdGc0LUg0LjQvdGE0L7RgNC80LDRhtC40Lgg0LfQsCDQvtCy0L7RmCDQv9C10YfQsNGC0LDRhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+ItCd0LXQutC+0Lgg0YPRgdC70YPQs9C4INC30LAg0L/QtdGH0LDRgtC10ZrQtSDRgdC1INC+0L3QtdCy0L7Qt9C80L7QttC10L3QuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQmNC30LHQtdGA0Lgg0YPRgdC70YPQs9CwINC/0LXRh9Cw0YLQtdGa0LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0YDQtdCx0LDRgNGD0LLQsNGa0LUg0L/QtdGH0LDRgtCw0YfQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCd0LXQvNCwINC+0LLQvtC30LzQvtC20LXQvdC4INGD0YHQu9GD0LPQuCDQt9CwINC/0LXRh9Cw0YLQtdGa0LUiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDRgdC1INC+0YLQutCw0LbRg9Cy0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QtdGH0LDRgtC10ZrQtSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0J/QtdGH0LDRgtCw0YfQvtGCINCz0L4g0LHQu9C+0LrQuNGA0LDRiNC1IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INGA0LDQsdC+0YLQsCDQt9CwINC/0LXRh9Cw0YLQtdGa0LU8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDRgNCw0LHQvtGC0Lgg0LfQsCDQv9C10YfQsNGC0LXRmtC1PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQntGC0LrQsNC20LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCg0LXRgdGC0LDRgNGC0LjRgNCw0ZgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i0J3QtdC80LAg0L/QvtCy0YDQt9GD0LLQsNGa0LUg0YHQviDQv9C10YfQsNGC0LDRhyI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbAppbmRleCAyZDQ1Y2U1Li43YTMzZTE0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgtKrgtY3gtLDgtL/gtKjgtY3gtLHgtLHgtYHgtJXgtb4g4LSV4LSj4LWN4LSf4LWG4LSk4LWN4LSk4LS/PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOC0quC1jeC0sOC0v+C0qOC1jeC0seC1vCDgtJXgtKPgtY3gtJ/gtYbgtKTgtY3gtKTgtL88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgtIgg4LSq4LWN4LSw4LS/4LSo4LWN4LSx4LSx4LS/4LSo4LWGIOC0leC1geC0seC0v+C0muC1jeC0muC1geC0s+C1jeC0syDgtJXgtYLgtJ/gtYHgtKTgtb0g4LS14LS/4LS14LSw4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4LSa4LS/4LSyIOC0quC1jeC0sOC0v+C0qOC1jeC0seC1jSDgtLjgtYfgtLXgtKjgtJngtY3gtJngtb4g4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LSw4LS54LS/4LSk4LSu4LS+4LSV4LWN4LSV4LS/4LSv4LS/4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC0quC1jeC0sOC0v+C0qOC1jeC0seC1jSDgtLjgtYfgtLXgtKjgtIIg4LSk4LS/4LSw4LSe4LWN4LSe4LWG4LSf4LWB4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgtKrgtY3gtLDgtL/gtKjgtY3gtLHgtLHgtYHgtJXgtb7gtJXgtY3gtJXgtL7gtK/gtL8g4LSk4LS/4LSw4LSv4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4LSq4LWN4LSw4LS/4LSo4LWN4LSx4LWNIOC0uOC1h+C0teC0qOC0meC1jeC0meC0s+C1iuC0qOC1jeC0qOC1geC0giDgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtJXgtY3gtLfgtK7gtL7gtJXgtY3gtJXgtL/gtK/gtL/gtJ/gtY3gtJ/gtL/gtLLgtY3gtLIiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtLHgtKbgtY3gtKbgtL7gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuC0quC1jeC0sOC0v+C0qOC1jeC0seC1vCDgtKrgtL/gtLbgtJXgtY0gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuC0quC1jeC0sOC0v+C0qOC1jeC0seC1vCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC0pOC0n+C0nuC1jeC0nuC1gSI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDgtKrgtY3gtLDgtL/gtKjgtY3gtLHgtY0g4LSc4LWL4LSy4LS/4LSV4LW+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IOC0quC1jeC0sOC0v+C0qOC1jeC0seC1jSDgtJzgtYvgtLLgtL88L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuC0seC0puC1jeC0puC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4LSq4LWB4LSo4LSw4LS+4LSw4LSC4LSt4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IuC0quC1jeC0sOC0v+C0qOC1jeC0seC0seC0v+C1vSDgtJXgtKPgtJXgtY3gtLfgtKjgtYrgtKjgtY3gtKjgtYHgtK7gtL/gtLLgtY3gtLIiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggZjJjN2I3My4uYzk0ZTU2ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1uLXJNTi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0YXRjdCy0LvRjdCz0Ycg0L7Qu9C00YHQvtC9INCx0LDQudC90LA8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g0YXRjdCy0LvRjdCz0Ycg0L7Qu9C00YHQvtC9INCx0LDQudC90LA8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLQrdC90Y0g0YXRjdCy0LvRjdCz0YfQuNC50L0g0YLQsNC70LDQsNGA0YUg0LTRjdC70LPRjdGA0Y3QvdCz0q/QuSDQvNGN0LTRjdGN0LvRjdC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i0JfQsNGA0LjQvCDRhdGN0LLQu9GN0YUg0q/QudC70YfQuNC70LPRjdGN0LMg0LjQtNGN0LLRhdCz0q/QuSDQsdC+0LvQs9C+0YHQvtC9INCx0LDQudC90LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i0KXRjdCy0LvRjdGFINKv0LnQu9GH0LjQu9Cz0Y3RjdCzINGB0L7QvdCz0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0J/RgNC40L3RgtC10YAg0YXQsNC50LYg0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+ItCl0Y3QstC70Y3RhSDSr9C50LvRh9C40LvQs9GN0Y3QsyDQuNC00Y3QstGF0LbSr9Kv0LvRjdGN0LPSr9C5Ijwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCm0YPRhtC70LDQtiDQsdCw0LnQvdCwIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCf0YDQuNC90YLQtdGA0LjQudC9INCw0LvQtNCw0LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+ItCf0YDQuNC90YLQtdGAINGF0L7RgNC40LPQu9C+0LPQtNGB0L7QvSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INCw0LbQu9GL0LMg0YXRjdCy0LvRjdGFPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+INCw0LbQu9GL0LMg0YXRjdCy0LvRjdGFPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQptGD0YbQu9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCU0LDRhdC40L0g0Y3RhdC70q/Sr9C70Y3RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLQn9GA0LjQvdGC0LXRgCDRhdC+0LvQsdC+0LPQtNC+0L7Qs9Kv0Lkg0LHQsNC50L3QsCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCAxYzA3OWRjLi5hYjI1MDEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkhuCkouCks+CksuCkvjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCkquCljeCksOCkv+CkguCkn+CksCDgpIbgpKLgpLPgpLLgpYc8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgpK/gpL4g4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkteCkv+Ckt+Ckr+ClgCDgpIXgpKfgpL/gpJUg4KSu4KS+4KS54KS/4KSk4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4KSV4KS+4KS54KWAIOCkruClgeCkpuCljeCksOCkoyDgpLjgpYfgpLXgpL4g4KSF4KSV4KWN4KS34KSuIOCkleClh+CksuCljeCkr+CkviDgpIbgpLngpYfgpKQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4KSu4KWB4KSm4KWN4KSw4KSjIOCkuOClh+CkteCkviDgpKjgpL/gpLXgpKHgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCkquCljeCksOCkv+CkguCkn+CksCDgpLbgpYvgpKfgpKQg4KSG4KS54KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i4KSV4KWL4KSj4KSk4KWN4KSv4KS+4KS54KWAIOCkruClgeCkpuCljeCksOCkoyDgpLjgpYfgpLXgpL4g4KS44KSV4KWN4KS34KSuIOCkleClh+CksuClh+CksuCljeCkr+CkviDgpKjgpL7gpLngpYDgpKQiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLDgpKbgpY3gpKYg4KSV4KSw4KWA4KSkIOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4KSq4KWN4KSw4KS/4KSC4KSf4KSwIOCkpOCljeCksOClgeCkn+ClgCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSw4KSo4KWHIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4KSF4KS14KSw4KWL4KSn4KS/4KSkIOCkleClh+CksuClhyI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4KSu4KWB4KSm4KWN4KSw4KSjIOCkleCkvuCksOCljeCkrzwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCkruClgeCkpuCljeCksOCkoyDgpJXgpL7gpLDgpY3gpK/gpYc8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuCksOCkpuCljeCkpiDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCksOClgOCkuOCljeCkn+CkvuCksOCljeCknyDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4KSq4KWN4KSw4KS/4KSC4KSf4KSw4KS14KSwIOCkleCli+Cko+CkpOClh+CkueClgCDgpJXgpKjgpYfgpJXgpY3igI3gpLbgpKgg4KSo4KS+4KS54KWAIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IGQ2YjVlYTcuLjkxN2FlOGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHBlbmNldGFrIGRpdGVtdWk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcGVuY2V0YWsgZGl0ZW11aTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1ha2x1bWF0IGxhbmp1dCB0ZW50YW5nIHBlbmNldGFrIGluaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IlNlc2V0ZW5nYWggcGVya2hpZG1hdGFuIGNldGFrIGRpbHVtcHVoa2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlBpbGloIHBlcmtoaWRtYXRhbiBjZXRhayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iTWVuY2FyaSBwZW5jZXRhayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IlBlcmtoaWRtYXRhbiBjZXRhayB0aWRhayBkaWRheWFrYW4iPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iTWVtYmF0YWxrYW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUmFsYXQgcGVuY2V0YWsgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlBlbmNldGFrIGRpc2VrYXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPktlcmphIGNldGFrYW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+S2VyamEgY2V0YWthbiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkJhdGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJNdWxha2FuIHNlbXVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJUaWFkYSBzYW1idW5nYW4ga2UgcGVuY2V0YWsiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKaW5kZXggYzNkYzQ5MC4uNGQ0Yzk1YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4YCF4YCs4YCR4YCv4YCQ4YC64YCF4YCA4YC64YCZ4YC74YCs4YC4IOGAkOGAveGAseGAt+GAm+GAvuGAreGAleGAq+GAnuGAiuGAujwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPuGAheGArOGAkeGAr+GAkOGAuuGAheGAgOGAuiDhgJDhgL3hgLHhgLfhgJvhgL7hgK3hgJXhgKvhgJ7hgIrhgLo8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLhgKThgJXhgJvhgIThgLrhgJDhgKwg4YCh4YCA4YC84YCx4YCs4YCE4YC64YC4IOGAleGAreGAr+GAmeGAreGAr+GAnOGAseGAt+GAnOGArOGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IuGAleGAm+GAhOGAt+GAuuGAkeGAr+GAkOGAuuGAm+GAseGAuCDhgKHhgIHhgLvhgK3hgK/hgLfhgJ3hgJThgLrhgIbhgLHhgKzhgIThgLrhgJnhgL7hgK/hgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YCV4YCt4YCQ4YC64YCR4YCs4YC44YCV4YCr4YCe4YCK4YC64YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4YCF4YCs4YCR4YCv4YCQ4YC64YCb4YCU4YC6IOGAneGAlOGAuuGAhuGAseGArOGAhOGAuuGAmeGAvuGAr+GAgOGAreGAryDhgJvhgL3hgLHhgLjhgIHhgLvhgJrhgLrhgJXhgKsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuGAheGArOGAkeGAr+GAkOGAuuGAheGAgOGAuuGAmeGAu+GArOGAuOGAgOGAreGAryDhgJvhgL7hgKzhgJThgLHhgJXhgKvhgJ7hgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLhgJXhgK/hgLbhgJThgL7hgK3hgJXhgLrhgJHhgK/hgJDhgLrhgJrhgLDhgJvhgLHhgLgg4YCd4YCU4YC64YCG4YCx4YCs4YCE4YC64YCZ4YC+4YCv4YCZ4YC74YCs4YC4IOGAluGAveGAhOGAt+GAuuGAmeGAkeGArOGAuOGAleGAqyI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOGAgOGAreGAryDhgJXhgJrhgLrhgJbhgLvhgIDhgLrhgJThgLHhgJXhgKvhgJ7hgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuGAheGArOGAkeGAr+GAkOGAuuGAheGAgOGAuuGAmeGAviDhgKHhgJnhgL7hgKzhgLggPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz7hgIDhgK3hgK/hgIXhgKzhgJHhgK/hgJDhgLrhgIXhgIDhgLrhgIDhgIThgLzhgIThgLrhgLjhgJzhgK3hgK/hgIDhgLrhgJ7hgIrhgLoiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4YCF4YCs4YCR4YCv4YCQ4YC64YCF4YCb4YCs4YCZ4YC74YCs4YC4PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+4YCF4YCs4YCR4YCv4YCQ4YC64YCF4YCb4YCsPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLhgJXhgJrhgLrhgJbhgLvhgIDhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuGAoeGAheGAgCDhgJXhgLzhgJThgLrhgIXhgJvhgJThgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4YCF4YCs4YCR4YCv4YCQ4YC64YCF4YCA4YC64YCU4YCy4YC3IOGAhuGAgOGAuuGAnuGAveGAmuGAuuGAkeGArOGAuOGAmeGAvuGAryDhgJnhgJvhgL7hgK3hgJXhgKsiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCmluZGV4IDk0NWJiZWEuLjllZmE1ZDEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBza3JpdmVyZSBibGUgZnVubmV0PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHNrcml2ZXIgYmxlIGZ1bm5ldDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTWVyIGluZm9ybWFzam9uIG9tIGRlbm5lIHByaW50ZXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Ik5vZW4gdXRza3JpZnRzdGplbmVzdGVyIGVyIHNsw6V0dCBhdi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJWZWxnIHV0c2tyaWZ0c3RqZW5lc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTw7hrZXIgZXR0ZXIgc2tyaXZlcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJJbmdlbiB1dHNrcmlmdHN0amVuZXN0ZXIgZXIgc2zDpXR0IHDDpSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJBdmJyeXRlciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJTa3JpdmVyZmVpbCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iU2tyaXZlcmVuIGJsb2trZXJ0ZSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHV0c2tyaWZ0c2pvYmJlcjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiB1dHNrcmlmdHNqb2JiPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBdmJyeXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlN0YXJ0IHDDpSBueXR0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkluZ2VuIGZvcmJpbmRlbHNlIG1lZCBza3JpdmVyZW4iPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKaW5kZXggNDViY2M5NS4uMjgxYTY1ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS/4KSo4KWN4KSf4KSw4KS54KSw4KWCIOCkreClh+Ckn+Ckv+CkjzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDgpKrgpY3gpLDgpL/gpKjgpY3gpJ/gpLAg4KSt4KWH4KSf4KS/4KSv4KWLPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4i4KSv4KS4IOCkquCljeCksOCkv+CkqOCljeCkn+CksOCkleCliyDgpKzgpL7gpLDgpYfgpK7gpL4g4KSl4KSqIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IuCkleClh+CkueClgCDgpK7gpYHgpKbgpY3gpLDgpKMg4KS44KWH4KS14KS+4KS54KSw4KWCIOCkheCkuOCkleCljeCkt+CkriDgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLgpKrgpY3gpLDgpL/gpKjgpY3gpJ8g4KS44KWH4KS14KS+IOCkm+CkqOCljOCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCkquCljeCksOCkv+CkqOCljeCkn+CksOCkueCksOClgiDgpJbgpYvgpJzgpY3gpKbgpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkruClgeCkpuCljeCksOCkoyDgpLjgpYfgpLXgpL7gpLngpLDgpYIg4KS44KSV4KWN4KSw4KS/4KSvIOCkm+CliOCkqOCkqOCljSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLgpLDgpKbgpY3gpKYg4KSX4KSw4KS/4KSB4KSm4KWIIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuCkquCljeCksOCkv+CkqOCljeCkn+CksCDgpKTgpY3gpLDgpYHgpJ/gpL8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCkquCljeCksOCkv+CkqOCljeCkn+CksCDgpKzgpY3gpLLgpJUg4KSX4KSw4KS/4KSv4KWLIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4KSV4KS+4KSw4KWN4KSv4KS54KSw4KWCIOCkquCljeCksOCkv+CkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY08L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4g4KSV4KS+4KSw4KWN4KSvIOCkquCljeCksOCkv+CkqOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY08L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuCksOCkpuCljeCkpiDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCkquClgeCkqOCkg+CkuOCljeCkn+CkvuCksOCljeCknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4KSq4KWN4KSw4KS/4KSo4KWN4KSf4KSw4KSu4KS+IOCkleClgeCkqOCliCDgpJzgpKHgpL7gpKgg4KSb4KWI4KSoIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCA3NmM4NjU2Li5lZWY5ODgwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gcHJpbnRlcnMgZ2V2b25kZW48L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gcHJpbnRlciBnZXZvbmRlbjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1lZXIgaW5mb3JtYXRpZSBvdmVyIGRlemUgcHJpbnRlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IlNvbW1pZ2UgYWZkcnVrc2VydmljZXMgemlqbiB1aXRnZXNjaGFrZWxkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkFmZHJ1a3NlcnZpY2Uga2llemVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJQcmludGVycyB6b2VrZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJHZWVuIGFmZHJ1a3NlcnZpY2VzIGluZ2VzY2hha2VsZCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFubnVsZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlcmZvdXQgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gZ2VibG9ra2VlcmQgZG9vciBwcmludGVyIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IGFmZHJ1a3Rha2VuPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IGFmZHJ1a3RhYWs8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFubnVsZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iT3BuaWV1dyBzdGFydGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IkdlZW4gdmVyYmluZGluZyBtZXQgcHJpbnRlciI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAppbmRleCA0NWZhNDYwLi43ZDc4NjBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4Kiq4KmN4Kiw4Ki/4Kmw4Kif4KiwIOCoruCov+CosuCphzwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCoquCpjeCosOCov+CpsOCon+CosCDgqK7gqL/gqLLgqYc8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgqIfgqLgg4Kiq4KmN4Kiw4Ki/4Kmw4Kif4KiwIOCorOCovuCosOCphyDgqLngqYvgqLAg4Kic4Ki+4Kij4KiV4Ki+4Kiw4KmAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4KiV4KmB4KidIOCoquCpjeCosOCov+CpsOConyDgqLjgqYfgqLXgqL7gqLXgqL7gqIIg4KiF4Kiv4KmL4KiXIOCorOCoo+CovuCoiOCohuCogiDgqJfgqIjgqIbgqIIg4Ki54Kio4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4Kiq4KmN4Kiw4Ki/4Kmw4KifIOCouOCph+CoteCoviDgqJrgqYHgqKPgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCoquCpjeCosOCov+CpsOCon+CosCDgqJbgqYvgqJwg4Kiw4Ki/4Ki54Ki+IOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuCoquCpjeCosOCov+CpsOConyDgqLjgqYfgqLXgqL7gqLXgqL7gqIIg4Kiv4KmL4KiXIOCoqOCoueCpgOCogiDgqKzgqKPgqL7gqIjgqIbgqIIg4KiX4KiI4KiG4KiCIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Kio4KmC4KmwIOCosOCpseCopiDgqJXgqLAg4Kiw4Ki/4Ki54Ki+IOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4Kiq4KmN4Kiw4Ki/4Kmw4Kif4KiwIOCoheCouOCovOCpgeCpseCop+CpgCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i4Kiq4KmN4Kiw4Ki/4Kmw4Kif4KiwIOCorOCosuCpjOColSDgqJXgqYDgqKTgqL4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4Kiq4KmN4Kiw4Ki/4Kmw4KifIOConOCpjOCorOCouDwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IOCoquCpjeCosOCov+CpsOConyDgqJzgqYzgqKzgqLg8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IuCosOCpseCopiDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCosOCpgOCouOCon+CovuCosOConyDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4Kiq4KmN4Kiw4Ki/4Kmw4Kif4KiwIOCosuCoiCDgqJXgqYvgqIgg4KiV4Kio4KmI4KiV4Ki44Ki84KioIOCoqOCoueCpgOCogiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKaW5kZXggZGYzZWU5MjQuLjY4MzdlZGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlpuYWxlemlvbm8gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGRydWthcmtpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+Wm5hbGV6aW9ubyA8eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gZHJ1a2Fya8SZPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJXacSZY2VqIGluZm9ybWFjamkgbyB0ZWogZHJ1a2FyY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJOaWVrdMOzcmUgdXPFgnVnaSBkcnVrb3dhbmlhIHPEhSB3ecWCxIVjem9uZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJXeWJpZXJ6IHVzxYJ1Z8SZIGRydWtvd2FuaWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlN6dWthbmllIGRydWthcmVrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iQnJhayB3xYLEhWN6b255Y2ggdXPFgnVnIGRydWtvd2FuaWEiPC9zdHJpbmc+CkBAIC02OSwxMiArNzIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQW51bG93YW5pZTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iQsWCxIVkIGRydWthcmtpOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iRHJ1a2Fya2EgemFibG9rb3dhxYJhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHphZGFuaWEgZHJ1a293YW5pYTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gemFkYcWEIGRydWtvd2FuaWE8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB6YWRhbmlhIGRydWtvd2FuaWE8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gemFkYW5pZSBkcnVrb3dhbmlhPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJBbnVsdWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+Ik9kIG5vd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iQnJhayBwb8WCxIVjemVuaWEgeiBkcnVrYXJrxIUiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwKaW5kZXggOTBkYTcyYi4uYzk3MTNjOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGltcHJlc3NvcmFzIGVuY29udHJhZGFzPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNYWlzIGluZm9ybWHDp8O1ZXMgc29icmUgZXNzYSBpbXByZXNzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQWxndW5zIHNlcnZpw6dvcyBkZSBpbXByZXNzw6NvIGVzdMOjbyBkZXNhdGl2YWRvcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJTZWxlY2lvbmUgbyBzZXJ2acOnbyBkZSBpbXByZXNzw6NvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJQcm9jdXJhbmRvIGltcHJlc3NvcmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iTmVuaHVtIHNlcnZpw6dvIGRlIGltcHJlc3PDo28gYXRpdmFkbyI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJDYW5jZWxhbmRvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm8gYW8gaW1wcmltaXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkEgaW1wcmVzc29yYSBibG9xdWVvdSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlRhcmVmYXMgZGUgaW1wcmVzc8OjbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlRhcmVmYXMgZGUgaW1wcmVzc8OjbyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkNhbmNlbGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZWluaWNpYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iU2VtIGNvbmV4w6NvIGNvbSBhIGltcHJlc3NvcmEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggOTliYmQ4MS4uOWZhYmMwZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYSBlbmNvbnRyYWRhPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNYWlzIGluZm9ybWHDp8O1ZXMgYWNlcmNhIGRlc3RhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJBbGd1bnMgc2VydmnDp29zIGRlIGltcHJlc3PDo28gZXN0w6NvIGRlc2F0aXZhZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkVzY29saGVyIG8gc2VydmnDp28gZGUgaW1wcmVzc8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iQSBwcm9jdXJhciBpbXByZXNzb3JhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5lbmh1bSBzZXJ2acOnbyBkZSBpbXByZXNzw6NvIGF0aXZhZG8iPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQSBjYW5jZWxhciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcnJvIGRhIGltcHJlc3NvcmEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IkEgaW1wcmVzc29yYSBibG9xdWVvdSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHRhcmVmYXMgZGUgaW1wcmVzc8OjbzwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiB0YXJlZmEgZGUgaW1wcmVzc8OjbzwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJTZW0gbGlnYcOnw6NvIMOgIGltcHJlc3NvcmEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCmluZGV4IDkwZGE3MmIuLmM5NzEzYzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gaW1wcmVzc29yYXMgZW5jb250cmFkYXM8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBpbXByZXNzb3JhcyBlbmNvbnRyYWRhczwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1haXMgaW5mb3JtYcOnw7VlcyBzb2JyZSBlc3NhIGltcHJlc3NvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJBbGd1bnMgc2VydmnDp29zIGRlIGltcHJlc3PDo28gZXN0w6NvIGRlc2F0aXZhZG9zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IlNlbGVjaW9uZSBvIHNlcnZpw6dvIGRlIGltcHJlc3PDo28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlByb2N1cmFuZG8gaW1wcmVzc29yYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOZW5odW0gc2VydmnDp28gZGUgaW1wcmVzc8OjbyBhdGl2YWRvIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkNhbmNlbGFuZG8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iRXJybyBhbyBpbXByaW1pciA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iQSBpbXByZXNzb3JhIGJsb3F1ZW91IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+VGFyZWZhcyBkZSBpbXByZXNzw6NvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VGFyZWZhcyBkZSBpbXByZXNzw6NvIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQ2FuY2VsYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlJlaW5pY2lhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJTZW0gY29uZXjDo28gY29tIGEgaW1wcmVzc29yYSI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggNGNmYjhhYi4uNzM2NGViMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTYwLDYgKzYwLDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGRlIGltcHJpbWFudGUgZ8SDc2l0ZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiBpbXByaW1hbnTEgyBnxINzaXTEgzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTWFpIG11bHRlIGluZm9ybWHIm2lpIGRlc3ByZSBhY2Vhc3TEgyBpbXByaW1hbnTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IlVuZWxlIHNlcnZpY2lpIGRlIHByaW50YXJlIHN1bnQgZGV6YWN0aXZhdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQWxlZ2XIm2kgc2VydmljaXVsIGRlIHByaW50YXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJTZSBjYXV0xIMgaW1wcmltYW50ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5pY2l1biBzZXJ2aWNpdSBkZSBwcmludGFyZSBhY3RpdmF0Ijwvc3RyaW5nPgpAQCAtNjgsMTEgKzcxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IlNlIGFudWxlYXrEgyA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJFcm9hcmUgZGUgcHJpbnRhcmU6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGFyZSBibG9jYXTEgzogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gYWN0aXZpdMSDyJtpIGRlIHByaW50YXJlPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gZGUgYWN0aXZpdMSDyJtpIGRlIHByaW50YXJlPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IGFjdGl2aXRhdGUgZGUgcHJpbnRhcmU8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFudWxhyJtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSZXBvcm5pyJtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ik51IGV4aXN0xIMgY29uZXhpdW5lIGxhIG8gaW1wcmltYW50xIMiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IGZiNDkzMzAuLmJiMDM4NjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+0J3QsNC50LTQtdC90L4gPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+wqDQv9GA0LjQvdGC0LXRgNC+0LI8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCd0LDQudC00LXQvdGLIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPsKg0L/RgNC40L3RgtC10YDQsDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPsKg4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCf0L7QtNGA0L7QsdC90YvQtSDRgdCy0LXQtNC10L3QuNGPINC+INC/0YDQuNC90YLQtdGA0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLQndC10LrQvtGC0L7RgNGL0LUg0YHQtdGA0LLQuNGB0Ysg0L/QtdGH0LDRgtC4INC+0YLQutC70Y7Rh9C10L3Riy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLQktGL0LHQtdGA0LjRgtC1INGB0LvRg9C20LHRgyDQv9C10YfQsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0L7QuNGB0Log0L/RgNC40L3RgtC10YDQvtCy4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0KHQu9GD0LbQsdGLINC/0LXRh9Cw0YLQuCDQvdC10LTQvtGB0YLRg9C/0L3RiyI8L3N0cmluZz4KQEAgLTY5LDEyICs3Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLQntGC0LzQtdC90LAg0LfQsNC00LDQvdC40Y8gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i0J7RiNC40LHQutCwINC30LDQtNCw0L3QuNGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0JfQsNC00LDQvdC40LUgXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIg0LfQsNCx0LvQvtC60LjRgNC+0LLQsNC90L4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0JfQsNC00LDQvdC40Y8g0L/QtdGH0LDRgtC4OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij7Ql9Cw0LTQsNC90LjRjyDQv9C10YfQsNGC0Lg6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij7Ql9Cw0LTQsNC90LjRjyDQv9C10YfQsNGC0Lg6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+0JfQsNC00LDQvdC40Y8g0L/QtdGH0LDRgtC4OiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQvNC10L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0J/QvtCy0YLQvtGA0LjRgtGMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCd0LXRgiDRgdCy0Y/Qt9C4INGBINC/0YDQuNC90YLQtdGA0L7QvCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAppbmRleCBmYjZmMTQ1Li42MTA0NDJkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7gtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La7IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgtprgt4og4LeD4Lec4La64LePIOC2nOC2seC3iuC2seC3jyDgtr3gtq/gt5I8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtrrgtrHgt4rgtq3gt4rigI3gtrsgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOC2muC3iiDgt4Pgt5zgtrrgt48g4Lac4Lax4LeK4Lax4LePIOC2veC2r+C3kjwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuC2uOC3meC2uCDgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La74La6IOC2nOC3kOC2sSDgtq3gt4Dgtq3gt4og4Lat4Lec4La74Lat4LeU4La74LeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4LeD4La44LeE4La7IOC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt48g4LaF4La24La94La64LeSLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt4/gt4Ag4Lat4Led4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La7IOC3g+C3nOC2uuC2uOC3kuC2seC3iiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgt4Pgt5rgt4Dgt48g4LeD4La24La9IOC2seC3kOC2rSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLgtoXgt4Dgtr3gtoLgtpzgt5Qg4Laa4LeZ4La74LeaIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtq/gt53gt4LgtrogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtrrgtrHgt4rgtq3gt4rigI3gtrvgtrogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiDgtoXgt4Dgt5Tgtrvgt48g4LaH4Lat4LeSIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuC2uOC3lOC2r+C3iuKAjeC2u+C2qyDgtprgt4/gtrvgt4rgtrogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7gtrjgt5Tgtq/gt4rigI3gtrvgtqsg4Laa4LeP4La74LeK4La6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i4LaF4LeA4La94LaC4Lac4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i4La64LeF4LeSIOC2heC2u+C2ueC2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLgtrjgt5Tgtq/gt4rigI3gtrvgtqsg4La64Lax4LeK4Lat4LeK4oCN4La74La6IOC3gOC3meC2rSDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtrog4Lax4LeQ4LatIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCA2MDUyMzdiLi42MDNkMWQyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbApAQCAtNjEsNiArNjEsOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5OYcWhbG8gc2EgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHRsYcSNaWFybsOtPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TmHFoWxhIHNhIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiB0bGHEjWlhcmXFiDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4ixI5hbMWhaWUgaW5mb3Jtw6FjaWUgb8KgdGVqdG8gdGxhxI1pYXJuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Ik5pZWt0b3LDqSB0bGHEjW92w6kgc2x1xb5ieSBzw7ogdnlwbnV0w6kuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVsO9YmVyIHRsYcSNb3ZlaiBzbHXFvmJ5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJWeWjEvmFkw6F2YW5pZSB0bGHEjWlhcm7DrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IsW9aWFkbmUgdGxhxI1vdsOpIHNsdcW+YnkgbmllIHPDuiBha3Rpdm92YW7DqSI8L3N0cmluZz4KQEAgLTY5LDEyICs3Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQcmViaWVoYSB6cnXFoWVuaWUgw7psb2h5IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkNoeWJhIHRsYcSNaWFybmUg4oCTIMO6bG9oYSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iVGxhxI1pYXJlxYggemFibG9rLiDDumxvaHUgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gdGxhxI1vdsOpIMO6bG9oeTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJtYW55Ij48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gdGxhxI1vdmVqIMO6bG9oeTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHRsYcSNb3bDvWNoIMO6bG9oPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IHRsYcSNb3bDoSDDumxvaGE8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IlpydcWhacWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJTcHVzdGnFpSB6bm92YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLFvWlhZG5lIHByaXBvamVuaWUgayB0bGHEjWlhcm5pIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCA0OGQyZTFkLi40YTA4MjY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtNjEsNiArNjEsOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IG5hamRlbmkgdGlza2FsbmlraTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IG5hamRlbmloIHRpc2thbG5pa292PC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJWZcSNIGluZm9ybWFjaWogbyB0ZW0gdGlza2FsbmlrdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Ik5la2F0ZXJlIHRpc2thbG5lIHN0b3JpdHZlIHNvIG9uZW1vZ2/EjWVuZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJJemJlcml0ZSB0aXNrYWxubyBzdG9yaXRldiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iSXNrYW5qZSB0aXNrYWxuaWtvdiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+Ik5pIG9tb2dvxI1lbmloIHRpc2thbG5paCBzdG9yaXRldiI8L3N0cmluZz4KQEAgLTY5LDEyICs3Miw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQcmVrbGljOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJOYXBha2EgdGlza2FsbmlrYTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IlRpc2thbG5payBqZSBibG9raXJhbCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB0aXNrYWxubyBvcHJhdmlsbzwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJ0d28iPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB0aXNrYWxuaSBvcHJhdmlsaTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB0aXNrYWxuYSBvcHJhdmlsYTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHRpc2thbG5paCBvcHJhdmlsPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJQcmVrbGnEjWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlphxI1uaSB6bm92YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJOaSBwb3ZlemF2ZSBzIHRpc2thbG5pa29tIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sCmluZGV4IDViYTcyZmYuLmIwOTAyZWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+VSBnamV0w6tuIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiBwcmludGVyw6s8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5VIGdqZXQgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHByaW50ZXI8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJNw6sgc2h1bcOrIGluZm9ybWFjaW9uZSBtYmkga8OrdMOrIHByaW50ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJEaXNhIHNow6tyYmltZSBwcmludGltaSBqYW7DqyDDp2FrdGl2aXp1YXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iWmdqaWRoIHNow6tyYmltaW4gZSBwcmludGltaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IlBvIGvDq3Jrb24gcMOrciBwcmludGVyw6siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJOdWsga2Egc2jDq3JiaW1lIHByaW50aW1pIHTDqyBha3Rpdml6dWFyYSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJQbyBhbnVsb24gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlcmkgbmRlc2hpIG7DqyBnYWJpbSBnamF0w6sgcHVuw6tzOiA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4iUHJpbnRlcmkgYmxsb2tvaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHB1bsOrIHDDq3IgcHJpbnRpbTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiBwdW7DqyBww6tyIHByaW50aW08L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkFudWxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJSaWZpbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+IlByaW50ZXJpIG51ayDDq3NodMOrIGkgbGlkaHVyIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCA3YTA0YjhkLi5mZWIyOTQwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbApAQCAtNjAsNiArNjAsOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+0J/RgNC+0L3QsNGS0LXQvdCwINGB0YMgPHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+INGI0YLQsNC80L/QsNGH0LA8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPtCf0YDQvtC90LDRktC10L3QviDRmNC1IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDRiNGC0LDQvNC/0LDRh9CwPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLQiNC+0Ygg0LjQvdGE0L7RgNC80LDRhtC40ZjQsCDQviDQvtCy0L7QvCDRiNGC0LDQvNC/0LDRh9GDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i0J3QtdC60LUg0YPRgdC70YPQs9C1INGI0YLQsNC80L/QsNGa0LAg0YHRgyDQvtC90LXQvNC+0LPRg9Gb0LXQvdC1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+ItCY0LfQsNCx0LXRgNC40YLQtSDRg9GB0LvRg9Cz0YMg0YjRgtCw0LzQv9Cw0ZrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i0J/RgNC10YLRgNCw0LPQsCDRiNGC0LDQvNC/0LDRh9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J3QuNGY0LXQtNC90LAg0YPRgdC70YPQs9CwINGI0YLQsNC80L/QsNGa0LAg0L3QuNGY0LUg0L7QvNC+0LPRg9Gb0LXQvdCwIjwvc3RyaW5nPgpAQCAtNjgsMTEgKzcxLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+ItCe0YLQutCw0LfRg9GY0LUg0YHQtSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLQk9GA0LXRiNC60LAg0YjRgtCw0LzQv9Cw0YfQsCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i0KjRgtCw0LzQv9Cw0Ycg0ZjQtSDQsdC70L7QutC40YDQsNC+IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+0JfQsNC00LDRhtC4INGI0YLQsNC80L/QsNGa0LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9ImZldyI+0JfQsNC00LDRhtC4INGI0YLQsNC80L/QsNGa0LAgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Ql9Cw0LTQsNGG0Lgg0YjRgtCw0LzQv9Cw0ZrQsCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz48L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+ItCe0YLQutCw0LbQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i0J/QvtC90L7QstC+INC/0L7QutGA0LXQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCd0LXQvNCwINCy0LXQt9C1INGB0LAg0YjRgtCw0LzQv9Cw0YfQtdC8Ijwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCBlYzRhZDMwLi5jZjM5OGM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gc2tyaXZhcmUgaGl0dGFkZXM8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4gc2tyaXZhcmUgaGl0dGFkZXM8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik1lciBpbmZvcm1hdGlvbiBvbSBkZW4gaMOkciBza3JpdmFyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJOw6VncmEgdXRza3JpZnRzdGrDpG5zdGVyIGhhciBpbmFrdGl2ZXJhdHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iVsOkbGogdXRza3JpZnRzdGrDpG5zdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iU8O2a2VyIGVmdGVyIHNrcml2YXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iSW5nYSB1dHNrcmlmdHN0asOkbnN0ZXIgaGFyIGFrdGl2ZXJhdHMiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iQXZicnl0ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iU2tyaXZhcmZlbCBmw7ZyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJTa3JpdmFyZW4gaGFyIGJsb2NrZXJhdCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+IHV0c2tyaWZ0c2pvYmI8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4gdXRza3JpZnRzam9iYjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQXZicnl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJTdGFydGEgb20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iSW5nZW4gYW5zbHV0bmluZyB0aWxsIHNrcml2YXJlbiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKaW5kZXggZWVkMzM1Ni4uN2UwMGI3MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+UHJpbnRhIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiB6aW1lcGF0aWthbmE8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj5QcmludGEgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IGltZXBhdGlrYW5hPC9pdGVtPgogICAgIDwvcGx1cmFscz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiIG1zZ2lkPSIxMzY2Njk5MjI3NzAzMzgxODc0Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX1NFUlZJQ0VfTEFCRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iTWFlbGV6byB6YWlkaSBrdWh1c3UgcHJpbnRhIGhpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkJhYWRoaSB5YSBodWR1bWEgemEgdWNoYXBpc2hhamkgemltZXppbXdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IkNoYWd1YSBodWR1bWEgeWEgcHJpbnRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJJbmF0YWZ1dGEgcHJpbnRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iSHVkdW1hIHphIGt1Y2hhcGlzaGEgaGF6aWphd2FzaHdhIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IkluYWdoYWlyaSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJIaXRpbGFmdSB5YSBrdWNoYXBpc2hhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGEgaW1lZnVuZ3dhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5LYXppIHlhIGt1Y2hhcGlzaGEgeWEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+S2F6aSB5YSBrdWNoYXBpc2hhIHlhIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiA8L2l0ZW0+Ci0gICAgPC9wbHVyYWxzPgogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNDM3MzY3NDEwNzI2NzE0MTg4NSI+IkdoYWlyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4iQW56aXNoYSB1cHlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Ikhha3VuYSBtdXVuZ2FuaXNobyBrd2EgcHJpbnRhIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sCmluZGV4IGE5ODc5YzMuLmFlMGI3NzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IOCuquCuv+CusOCuv+Cuo+CvjeCun+CusOCvjeCuleCus+CvjSDgrongrrPgr43grrPgrqk8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4g4K6q4K6/4K6w4K6/4K6j4K+N4K6f4K6w4K+NIOCuieCus+CvjeCus+CupOCvgTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuCuh+CuqOCvjeCupOCuquCvjSDgrqrgrr/grrDgrr/grqPgr43grp/grrDgr40g4K6q4K6x4K+N4K6x4K6/4K6vIOCuleCvguCun+CvgeCupOCusuCvjSDgrqTgrpXgrrXgrrLgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLgrprgrr/grrIg4K6F4K6a4K+N4K6a4K+B4K6q4K+NIOCuquCviuCuseCuv+CuleCus+CvjSDgrq7gr4Hgrp/grpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i4K6F4K6a4K+N4K6a4K+B4K6q4K+NIOCuquCviuCuseCuv+Cur+CviOCupOCvjSDgrqTgr4fgrrDgr43grrXgr4Hgrprgr4bgrq/gr43grq/grrXgr4Hgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuCuheCumuCvjeCumuCvgeCuquCvjeCuquCviuCuseCuv+CuleCus+CviOCupOCvjSDgrqTgr4fgrp/gr4HgrpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLgroXgrprgr43grprgr4Hgrqrgr40g4K6q4K+K4K6x4K6/4K6V4K6z4K+NIOCuh+CusuCvjeCusuCviCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCukCDgrrDgrqTgr43grqTgr4Hgrprgr4bgrq/gr43grpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuCuquCuv+CusOCuv+Cuo+CvjeCun+CusOCvjSDgrqrgrr/grrTgr4ggPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCuquCuv+CusOCuv+Cuo+CvjeCun+CusOCvjSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCukOCupOCvjSDgrqTgrp/gr4HgrqTgr43grqTgrqTgr4EiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4K6F4K6a4K+N4K6a4K+B4K6q4K+NIOCuquCuo+Cuv+CuleCus+CvjTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiDgroXgrprgr43grprgr4Hgrqrgr40g4K6q4K6j4K6/PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgrrDgrqTgr43grqTgr4Hgrprgr4bgrq/gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuCuruCvgOCuo+CvjeCun+CvgeCuruCvjSDgrqTgr4rgrp/grpngr43grpXgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4K6F4K6a4K+N4K6a4K+B4K6q4K+N4K6q4K+K4K6x4K6/4K6v4K+B4K6f4K6p4K+NIOCuh+Cuo+CviOCuleCvjeCuleCuquCvjeCuquCun+CuteCuv+CusuCvjeCusuCviCI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCA5MDljYjkwLi41ZmQ4ZDYwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDgsKrgsY3gsLDgsL/gsILgsJ/gsLDgsY3igIzgsLLgsYEg4LCV4LCo4LGB4LCX4LGK4LCo4LCs4LCh4LGN4LCh4LC+4LCv4LC/PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOCwquCxjeCwsOCwv+CwguCwn+CwsOCxjSDgsJXgsKjgsYHgsJfgsYrgsKjgsKzgsKHgsL/gsILgsKbgsL88L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLgsIgg4LCq4LGN4LCw4LC/4LCC4LCf4LCw4LGNIOCwl+CxgeCwsOCwv+CwguCwmuCwvyDgsK7gsLDgsL/gsILgsKQg4LC44LCu4LC+4LCa4LC+4LCw4LCCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4i4LCV4LGK4LCo4LGN4LCo4LC/IOCwruCxgeCwpuCxjeCwsOCwoyDgsLjgsYfgsLXgsLLgsYEg4LCo4LC/4LCy4LC/4LCq4LC/4LC14LGH4LCv4LCs4LCh4LGN4LCh4LC+4LCv4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IuCwruCxgeCwpuCxjeCwsOCwoyDgsLjgsYfgsLXgsKjgsYEg4LCO4LCC4LCa4LGB4LCV4LGL4LCC4LCh4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiLgsKrgsY3gsLDgsL/gsILgsJ/gsLDgsY3igIzgsLIg4LCV4LGL4LC44LCCIOCwtuCxi+Cwp+Cwv+CwuOCxjeCwpOCxi+CwguCwpuCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuCwruCxgeCwpuCxjeCwsOCwoyDgsLjgsYfgsLXgsLLgsYEg4LCP4LC14LGAIOCwquCxjeCwsOCwvuCwsOCwguCwreCwv+CwguCwmuCwsuCxh+CwpuCxgSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4LCo4LGBIOCwsOCwpuCxjeCwpuCxgSDgsJrgsYfgsLjgsY3gsKTgsYvgsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IuCwquCxjeCwsOCwv+CwguCwn+CwsOCxjSDgsLLgsYvgsKrgsIIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IuCwquCxjeCwsOCwv+CwguCwn+CwsOCxjSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4LCo4LGBIOCwrOCxjeCwsuCwvuCwleCxjSDgsJrgsYfgsLjgsL/gsILgsKbgsL8iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g4LCu4LGB4LCm4LGN4LCw4LCjIOCwnOCwvuCwrOCxjeKAjOCwsuCxgTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiDgsK7gsYHgsKbgsY3gsLDgsKMg4LCc4LC+4LCs4LGNPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLgsLDgsKbgsY3gsKbgsYEg4LCa4LGH4LCv4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLgsKrgsYHgsKjgsIPgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i4LCq4LGN4LCw4LC/4LCC4LCf4LCw4LGN4oCM4LCV4LGBIOCwleCwqOCxhuCwleCxjeCwt+CwqOCxjSDgsLLgsYfgsKbgsYEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCmluZGV4IGMzM2E3NTkuLmViZDVlMmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuC4nuC4muC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g4LmA4LiE4Lij4Li34LmI4Lit4LiHPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+4Lie4Lia4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDguYDguITguKPguLfguYjguK3guIc8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLguILguYnguK3guKHguLnguKXguYDguJ7guLTguYjguKHguYDguJXguLTguKHguYDguIHguLXguYjguKLguKfguIHguLHguJrguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYzguJnguLXguYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLguJrguKPguLTguIHguLLguKPguJ7guLTguKHguJ7guYzguJrguLLguIfguK3guKLguYjguLLguIfguJbguLnguIHguJvguLTguJTguYPguIrguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLguYDguKXguLfguK3guIHguJrguKPguLTguIHguLLguKPguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IuC4geC4s+C4peC4seC4h+C4hOC5ieC4meC4q+C4suC5gOC4hOC4o+C4t+C5iOC4reC4h+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuC5hOC4oeC5iOC5hOC4lOC5ieC5gOC4m+C4tOC4lOC5g+C4iuC5ieC4muC4o+C4tOC4geC4suC4o+C4nuC4tOC4oeC4nuC5jCI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLguIHguLPguKXguLHguIfguKLguIHguYDguKXguLTguIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4i4LiC4LmJ4Lit4Lic4Li04LiU4Lie4Lil4Liy4LiU4LmA4LiE4Lij4Li34LmI4Lit4LiH4Lie4Li04Lih4Lie4LmMIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYzguYTguJTguYnguJrguKXguYfguK3guIEgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDguIfguLLguJnguJ7guLTguKHguJ7guYw8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMCI+JTEkZDwveGxpZmY6Zz4g4LiH4Liy4LiZ4Lie4Li04Lih4Lie4LmMPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLguKLguIHguYDguKXguLTguIEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IuC5gOC4o+C4tOC5iOC4oeC4leC5ieC4meC5g+C4q+C4oeC5iCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiLguYTguKHguYjguKHguLXguIHguLLguKPguYDguIrguLfguYjguK3guKHguJXguYjguK3guYTguJvguKLguLHguIfguYDguITguKPguLfguYjguK3guIfguJ7guLTguKHguJ7guYwiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IDU0NWJkYTQuLmViZTg2OWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbmFraXRhbmcgcHJpbnRlcjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IG5hIG5ha2l0YW5nIHByaW50ZXI8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJIaWdpdCBwYW5nIGltcG9ybWFzeW9uIHR1bmdrb2wgc2EgcHJpbnRlciBuYSBpdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiJOYWthLWRpc2FibGUgYW5nIGlsYW5nIHNlcmJpc3lvIHNhIHBhZy1wcmludC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJQdW1pbGkgbmcgc2VyYmlzeW8gbmcgcGFnLXByaW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJOYWdoYWhhbmFwIG5nIG1nYSBwcmludGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iV2FsYW5nIG1nYSBuYWthLWVuYWJsZSBuYSBzZXJiaXN5byBzYSBwYWctcHJpbnQiPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iS2luYWthbnNlbGEgYW5nIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IkVycm9yIHNhIHByaW50ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+Ik5ha2EtYmxvY2sgYW5nIFByaW50ZXIgPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gaXBpLXByaW50PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gbmEgaXBpLXByaW50PC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiJLYW5zZWxhaGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJJLXJlc3RhcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iSGluZGkgbmFrYWtvbmVrdGEgc2EgcHJpbnRlciI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggYTEzZjJkZi4uOWNkNDJhYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IHlhesSxY8SxIGJ1bHVuZHU8L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj48eGxpZmY6ZyBpZD0iQ09VTlRfMCI+JTEkczwveGxpZmY6Zz4geWF6xLFjxLEgYnVsdW5kdTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IkJ1IHlhesSxY8SxeWxhIGlsZ2lsaSBkYWhhIGZhemxhIGJpbGdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQmF6xLEgeWF6ZMSxcm1hIGhpem1ldGxlcmkgZGV2cmUgZMSxxZ/EsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJZYXpkxLFybWEgaGl6bWV0aW5pIHNlw6dpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iWWF6xLFjxLFsYXIgYXJhbsSxeW9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4iRXRraW4geWF6xLFjxLEgaGl6bWV0aSB5b2siPC9zdHJpbmc+CkBAIC02NywxMCArNzAsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4iPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiBpcHRhbCBlZGlsaXlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iWWF6xLFjxLEgaGF0YXPEsTogPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTE3NTQzNTgyNzMzMTU4ODY0NiI+IllhesSxY8SxIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gacWfaW5pIGVuZ2VsbGVkaSI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiB5YXpkxLFybWEgacWfaTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiB5YXpkxLFybWEgacWfaTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4ixLBwdGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJZZW5pZGVuIGJhxZ9sYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4iWWF6xLFjxLEgYmHEn2xhbnTEsXPEsSB5b2siPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCmluZGV4IGRlZjIxYWIuLjEwODIxNDcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC02MSw2ICs2MSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+0JfQvdCw0LnQtNC10L3QviA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g0L/RgNC40L3RgtC10YDRltCyPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj7Ql9C90LDQudC00LXQvdC+IDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQvdGC0LXRgNGW0LI8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+ItCU0L7QutC70LDQtNC90ZbRiNC1INC/0YDQviDRhtC10Lkg0L/RgNC40L3RgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLQlNC10Y/QutGWINGB0LvRg9C20LHQuCDQtNGA0YPQutGDINCy0LjQvNC60L3QtdC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i0JLQuNCx0YDQsNGC0Lgg0YHQu9GD0LbQsdGDINC00YDRg9C60YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+ItCf0L7RiNGD0Log0L/RgNC40L3RgtC10YDRltCyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i0J3QtdC80LDRlCDRgdC70YPQttCxINC00YDRg9C60YMiPC9zdHJpbmc+CkBAIC02OSwxMiArNzIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsbGluZ19ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxODIxNzU5NTk0NzA0NzAzMTk3Ij4i0JfQsNCy0LTQsNC90L3RjyBcIjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiDRgdC60LDRgdC+0LLRg9GU0YLRjNGB0Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+ItCf0L7QvNC40LvQutCwINC30LDQstC00LDQvdC90Y8gXCI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+XCIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiLQl9Cw0LLQtNCw0L3QvdGPIFwiPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPlwiINC30LDQsdC70L7QutC+0LLQsNC90L4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INC30LDQstC00LDQvdC90Y8g0LTRgNGD0LrRgzwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJmZXciPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDQt9Cw0LLQtNCw0L3QvdGPINC00YDRg9C60YM8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ibWFueSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INC30LDQstC00LDQvdGMINC00YDRg9C60YM8L2l0ZW0+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiDQt9Cw0LLQtNCw0L3RjCDQtNGA0YPQutGDPC9pdGVtPgotICAgIDwvcGx1cmFscz4KICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbCIgbXNnaWQ9IjQzNzM2NzQxMDcyNjcxNDE4ODUiPiLQodC60LDRgdGD0LLQsNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+ItCf0LXRgNC10LfQsNC/0YPRgdGC0LjRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+ItCd0LXQvNCw0ZQg0LfigJnRlNC00L3QsNC90L3RjyDQtyDQv9GA0LjQvdGC0LXRgNC+0LwiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKaW5kZXggYzAzMWFiYS4uNTZmMTA5MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g2b7YsdmG2bnYsdiyINmF2YTbkjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDZvtix2YbZudixINmF2YTYpzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Itin2LMg2b7YsdmG2bnYsSDaqduSINio2KfYsduSINmF24zauiDZhdiy24zYryDZhdi52YTZiNmF2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+Itm+2LHZhtm5INqp24wg2qnahtq+INiz2LHZiNiz2LIg2LrbjNixINmB2LnYp9mEINuB24zautuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4i2b7YsdmG2bkg2LPYsdmI2LMg2YXZhtiq2K7YqCDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i2b7YsdmG2bnYsdiyINiq2YTYp9i0INqp2LEg2LHbgdinINuB25IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiLaqdmI2KbbjCDZvtix2YbZuSDYs9ix2YjYsyDZgdi52KfZhCDZhtuB24zauiI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiI8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+INqp2Ygg2YXZhtiz2YjYriDaqdixINix24HYpyDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLZvtix2YbZudixINqp24wg2K7Ysdin2KjbjCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i2b7YsdmG2bnYsSDZhtuSIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4g2qnZiCDZhdiz2K/ZiNivINqp2LEg2K/bjNinIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+INm+2LHZhtm5INis2KfYqNiyPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+INm+2LHZhtm5INis2KfYqDwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i2YXZhtiz2YjYriDaqdix24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlc3RhcnQiIG1zZ2lkPSIyNDcyMDM0MjI3MDM3ODA4NzQ5Ij4i2K/ZiNio2KfYsduBINi02LHZiNi5INqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibm9fY29ubmVjdGlvbl90b19wcmludGVyIiBtc2dpZD0iMjE1OTI0NjkxNTk3NzI4MjcyOCI+Itm+2LHZhtm52LEg2qnbkiDYs9in2KraviDaqdmI2KbbjCDaqdmG2qnYtNmGINmG24HbjNq6INuB25IiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwKaW5kZXggNTlkY2NhOS4uMzBiMjE4ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gdGEgcHJpbnRlciB0b3BpbGRpPC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IHRhIHByaW50ZXIgdG9waWxkaTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlBSSU5URVJfREVTQ1JJUFRJT04iPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9pbmZvX2Rlc2MiIG1zZ2lkPSI3MTgxOTg4Nzg4OTkxNTgxNjU0Ij4iUHJpbnRlciBoYXFpZGEgYmF0YWZzaWwgbWHigJlsdW1vdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IkJpciBxYW5jaGEgY2hvcCBldGlzaCB4aXptYXRsYXJpIG/igJhjaGlyaWxnYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iQ2hvcCBldGlzaCB4aXptYXRpbmkgdGFubGFuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4iUHJpbnRlcmxhciBxaWRpcmlsbW9xZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJIZWNoIHFheXNpIGNob3AgZXRpc2ggeGl6bWF0aSB5b3FpbG1hZ2FuIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Ijx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gYmVrb3IgcWlsaW5tb3FkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZhaWxlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIyMjU2MjE3MjA4MTg2NTMwOTczIj4iUHJpbnRlcmRhIHhhdG9saWs6IDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJQcmludGVyIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz5uaSB0YXFpcWxhZGkiPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gY2hvcCBxaWxpc2ggdmF6aWZhbGFyaTwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPiBjaG9wIHFpbGlzaCB2YXppZmFzaTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iQmVrb3IgcWlsaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiJRYXl0YSBib3NobGFzaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJQcmludGVyIHVsYW5tYWdhbiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggMDE2NzgyMy4uMzJhYWY2MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+xJDDoyB0w6xtIHRo4bqleSA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4gbcOheSBpbjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPsSQw6MgdMOsbSB0aOG6pXkgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IG3DoXkgaW48L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiJUaMO0bmcgdGluIGtow6FjIHbhu4EgbcOheSBpbiBuw6B5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iTeG7mXQgc+G7kSBk4buLY2ggduG7pSBpbiBi4buLIHbDtCBoaeG7h3UgaMOzYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiJDaOG7jW4gZOG7i2NoIHbhu6UgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+IsSQYW5nIHTDrG0ga2nhur9tIG3DoXkgaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9ub19wcmludF9zZXJ2aWNlcyIgbXNnaWQ9Ijg1NjEyNDc3MDY0MjMzMjc5NjYiPiJDaMawYSBrw61jaCBob+G6oXQgZOG7i2NoIHbhu6UgaW4gbsOgbyI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiJI4buneSA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiJM4buXaSBtw6F5IGluIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJNw6F5IGluIMSRw6MgY2jhurduIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj5M4buHbmggaW4gPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzEiPiUxJGQ8L3hsaWZmOmc+PC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+TOG7h25oIGluIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iSOG7p3kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IkLhuq90IMSR4bqndSBs4bqhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJLaMO0bmcgY8OzIGvhur90IG7hu5FpIG7DoG8gduG7m2kgbcOheSBpbiI8L3N0cmluZz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCBhNzRlOTk0Li40MmNmM2IxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC01OSw2ICs1OSw5IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuaJvuWIsCA8eGxpZmY6ZyBpZD0iQ09VTlRfMSI+JTEkczwveGxpZmY6Zz4g5Y+w5omT5Y2w5py6PC9pdGVtPgogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8wIj4lMSRzPC94bGlmZjpnPiDlj7DmiZPljbDmnLo8L2l0ZW0+CiAgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSIgbXNnaWQ9IjEzNjY2OTkyMjc3MDMzODE4NzQiPiI8eGxpZmY6ZyBpZD0iUFJJTlRfU0VSVklDRV9MQUJFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iUFJJTlRFUl9ERVNDUklQVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyIgbXNnaWQ9IjcxODE5ODg3ODg5OTE1ODE2NTQiPiLlhbPkuo7mraTmiZPljbDmnLrnmoTmm7TlpJrkv6Hmga8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCIgbXNnaWQ9IjEyMDUzMDI0ODIzODg5Mzc1NDciPiLpg6jliIbmiZPljbDmnI3liqHlt7LlgZznlKjjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJpbnRfc2VydmljZSIgbXNnaWQ9IjM3NDAzMDk3NjIzMjQ0NTk2OTQiPiLpgInmi6nmiZPljbDmnI3liqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJwcmludF9zZWFyY2hpbmdfZm9yX3ByaW50ZXJzIiBtc2dpZD0iNjU1MDQyNDU1NTA3OTkzMjg2NyI+Iuato+WcqOaQnOe0ouaJk+WNsOacuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IuacquWQr+eUqOS7u+S9leaJk+WNsOacjeWKoSI8L3N0cmluZz4KQEAgLTY3LDEwICs3MCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWxsaW5nX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjE4MjE3NTk1OTQ3MDQ3MDMxOTciPiLmraPlnKjlj5bmtojmiZPljbDigJw8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLmiZPljbDmnLrlnKjmiZPljbDigJw8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCd5pe25Ye66ZSZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5omT5Y2w5py65ouS57ud5omT5Y2w4oCcPHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FIj4lMSRzPC94bGlmZjpnPuKAnSI8L3N0cmluZz4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBmb3JtYXR0ZWQ9ImZhbHNlIiBtc2dpZD0iNjk0MDk1Njk2ODIxMTczMzc4MCI+Ci0gICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPuKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPuKAneaJk+WNsOS9nOS4mjwvaXRlbT4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPuKAnDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8wIj4lMSRkPC94bGlmZjpnPuKAneaJk+WNsOS9nOS4mjwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i5Y+W5raIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLph43mlrDlvIDlp4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i5pyq5LiO5omT5Y2w5py65bu656uL6L+e5o6lIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCmluZGV4IDM1NjQzZjMuLjBhNDU4YWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+5bey5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDpg6jmiZPljbDmqZ88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7lt7Lmib7liLAgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOmDqOaJk+WNsOapnzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+IuatpOaJk+WNsOapn+ips+aDhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IuW3suWBnOeUqOmDqOWIhuWIl+WNsOacjeWLmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IumBuOaTh+WIl+WNsOacjeWLmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i5q2j5Zyo5pCc5bCL5omT5Y2w5qmfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i5rKS5pyJ5bey5ZWf55So55qE5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLmiZPljbDmqZ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5omT5Y2w5qmf5bey5bCB6Y6WIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g6aCF5YiX5Y2w5bel5L2cPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IOmgheWIl+WNsOW3peS9nDwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i5Y+W5raIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLph43mlrDplovlp4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i5bCa5pyq6IiH5omT5Y2w5qmf6YCj57eaIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sCmluZGV4IDQwYzQ0ZmYuLjdhMzAwMTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTU5LDYgKzU5LDkgQEAKICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+5om+5YiwIDx4bGlmZjpnIGlkPSJDT1VOVF8xIj4lMSRzPC94bGlmZjpnPiDlj7DljbDooajmqZ88L2l0ZW0+CiAgICAgICA8aXRlbSBxdWFudGl0eT0ib25lIj7mib7liLAgPHhsaWZmOmcgaWQ9IkNPVU5UXzAiPiUxJHM8L3hsaWZmOmc+IOWPsOWNsOihqOapnzwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Iuafpeeci+mAmeWPsOWNsOihqOapn+eahOips+e0sOizh+ioiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0IiBtc2dpZD0iMTIwNTMwMjQ4MjM4ODkzNzU0NyI+IumDqOWIhuWIl+WNsOacjeWLmeW3suWBnOeUqOOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNob29zZV9wcmludF9zZXJ2aWNlIiBtc2dpZD0iMzc0MDMwOTc2MjMyNDQ1OTY5NCI+IumBuOaTh+WIl+WNsOacjeWLmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlYXJjaGluZ19mb3JfcHJpbnRlcnMiIG1zZ2lkPSI2NTUwNDI0NTU1MDc5OTMyODY3Ij4i5q2j5Zyo5pCc5bCL5Y2w6KGo5qmfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfbm9fcHJpbnRfc2VydmljZXMiIG1zZ2lkPSI4NTYxMjQ3NzA2NDIzMzI3OTY2Ij4i5pyq5ZWf55So5Lu75L2V5YiX5Y2w5pyN5YuZIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+Iuato+WcqOWPlua2iCA8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZmFpbGVkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjIyNTYyMTcyMDgxODY1MzA5NzMiPiLljbDooajmqZ/nmbznlJ/pjK/oqqTvvJo8eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIG1zZ2lkPSIxMTc1NDM1ODI3MzMxNTg4NjQ2Ij4i5Y2w6KGo5qmf5bCB6Y6W5LqGIDx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHBsdXJhbHMgbmFtZT0iY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgZm9ybWF0dGVkPSJmYWxzZSIgbXNnaWQ9IjY5NDA5NTY5NjgyMTE3MzM3ODAiPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4g5YCL5YiX5Y2w5bel5L2cPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IlBSSU5UX0pPQl9OQU1FXzAiPiUxJGQ8L3hsaWZmOmc+IOWAi+WIl+WNsOW3peS9nDwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4i5Y+W5raIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVzdGFydCIgbXNnaWQ9IjI0NzIwMzQyMjcwMzc4MDg3NDkiPiLph43mlrDplovlp4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJub19jb25uZWN0aW9uX3RvX3ByaW50ZXIiIG1zZ2lkPSIyMTU5MjQ2OTE1OTc3MjgyNzI4Ij4i5bCa5pyq6IiH5Y2w6KGo5qmf5bu656uL6YCj57eaIjwvc3RyaW5nPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCBlMGY2ZjM0Li5mNTdiNThjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtNTksNiArNTksOSBAQAogICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGFtYXBocmludGEgYXRob2xha2VsZTwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9IkNPVU5UXzEiPiUxJHM8L3hsaWZmOmc+IGFtYXBocmludGEgYXRob2xha2VsZTwvaXRlbT4KICAgICA8L3BsdXJhbHM+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2V4dGVuZGVkX2Rlc2NyaXB0aW9uX3RlbXBsYXRlIiBtc2dpZD0iMTM2NjY5OTIyNzcwMzM4MTg3NCI+Ijx4bGlmZjpnIGlkPSJQUklOVF9TRVJWSUNFX0xBQkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJQUklOVEVSX0RFU0NSSVBUSU9OIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfaW5mb19kZXNjIiBtc2dpZD0iNzE4MTk4ODc4ODk5MTU4MTY1NCI+Ik9sdW55ZSB1bHdhemkgbWF5ZWxhbmEgbmFsZSBwaHJpbnRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VydmljZXNfZGlzYWJsZWRfdG9hc3QiIG1zZ2lkPSIxMjA1MzAyNDgyMzg4OTM3NTQ3Ij4iQW1hbnllIGFtYXNldmlzaSB3b2t1cGhyaW50YSBha2h1dHNoYXppd2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2hvb3NlX3ByaW50X3NlcnZpY2UiIG1zZ2lkPSIzNzQwMzA5NzYyMzI0NDU5Njk0Ij4iS2hldGhhIGlzZXZpc2kgeWVwaHJpbnRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icHJpbnRfc2VhcmNoaW5nX2Zvcl9wcmludGVycyIgbXNnaWQ9IjY1NTA0MjQ1NTUwNzk5MzI4NjciPiJJc2VzaGEgYW1hcGhyaW50YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InByaW50X25vX3ByaW50X3NlcnZpY2VzIiBtc2dpZD0iODU2MTI0NzcwNjQyMzMyNzk2NiI+IkFtYXNldmlzaSBlcGhyaW50YSBha2F2dWxpd2UuIjwvc3RyaW5nPgpAQCAtNjcsMTAgKzcwLDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImNhbmNlbGxpbmdfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMTgyMTc1OTU5NDcwNDcwMzE5NyI+IklraGFuc2VsYSBpLTx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmYWlsZWRfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIiBtc2dpZD0iMjI1NjIxNzIwODE4NjUzMDk3MyI+IklwaHV0aGEgbGVwaHJpbnRhIHllLTx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSIgbXNnaWQ9IjExNzU0MzU4MjczMzE1ODg2NDYiPiJJcGhyaW50YSBlbmd1LTx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRSI+JTEkczwveGxpZmY6Zz4gaXZpbmplbHdlIjwvc3RyaW5nPgotICAgIDxwbHVyYWxzIG5hbWU9ImNvbXBvc2l0ZV9ub3RpZmljYXRpb25fdGl0bGVfdGVtcGxhdGUiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI2OTQwOTU2OTY4MjExNzMzNzgwIj4KLSAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPjx4bGlmZjpnIGlkPSJQUklOVF9KT0JfTkFNRV8xIj4lMSRkPC94bGlmZjpnPiBpbWlzZWJlbnppIHlva3VwaHJpbnRhPC9pdGVtPgotICAgICAgPGl0ZW0gcXVhbnRpdHk9Im90aGVyIj48eGxpZmY6ZyBpZD0iUFJJTlRfSk9CX05BTUVfMSI+JTEkZDwveGxpZmY6Zz4gaW1pc2ViZW56aSB5b2t1cGhyaW50YTwvaXRlbT4KLSAgICA8L3BsdXJhbHM+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiIG1zZ2lkPSI0MzczNjc0MTA3MjY3MTQxODg1Ij4iS2hhbnNlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZXN0YXJ0IiBtc2dpZD0iMjQ3MjAzNDIyNzAzNzgwODc0OSI+IlFhbGEga2FidXNoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5vX2Nvbm5lY3Rpb25fdG9fcHJpbnRlciIgbXNnaWQ9IjIxNTkyNDY5MTU5NzcyODI3MjgiPiJBa3VraG8gdWt1eGh1bWFuYSBrdXBocmludGEiPC9zdHJpbmc+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IDZkODE3ODguLjc2MjkyYTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCkBAIC0xNDQsNiArMTQ0LDE1IEBACiAgICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9ImNvdW50IiBleGFtcGxlPSIyIj4lMSRzPC94bGlmZjpnPiBwcmludGVycyBmb3VuZDwvaXRlbT4KICAgICA8L3BsdXJhbHM+CiAKKyAgICA8IS0tIFRlbXBsYXRlIGZvciBhbiBleHRlbmRlZCBkZXNjcmlwdGlvbiBvZiBhIHByaW50ZXIuIFtDSEFSIExJTUlUPTUwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50ZXJfZXh0ZW5kZWRfZGVzY3JpcHRpb25fdGVtcGxhdGUiPjx4bGlmZjpnIGlkPSJwcmludF9zZXJ2aWNlX2xhYmVsIiBleGFtcGxlPSJDYW5vbiBQcmludCBTZXJ2aWNlIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJwcmludGVyX2Rlc2NyaXB0aW9uIiBleGFtcGxlPSJQcmludGVyIHVuZGVyIHRoZSBzdGFpcnMiPiUyJHM8L3hsaWZmOmc+PC9zdHJpbmc+CisKKyAgICA8IS0tIERlc2NyaXB0aW9uIG9mIHByaW50ZXIgaW5mbyBpY29uLiBbQ0hBUiBMSU1JVD01MF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJwcmludGVyX2luZm9fZGVzYyI+TW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHByaW50ZXI8L3N0cmluZz4KKworICAgIDwhLS0gTm90aWZpY2F0aW9uIHRoYXQgcHJpbnQgc2VydmljZXMgYXMgZGlzYWJsZWQuIFtDSEFSIExJTUlUPTUwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InByaW50X3NlcnZpY2VzX2Rpc2FibGVkX3RvYXN0Ij5Tb21lIHByaW50IHNlcnZpY2VzIGFyZSBkaXNhYmxlZC48L3N0cmluZz4KKwogICAgIDwhLS0gQWRkIHByaW50ZXIgZGlhbG9nICAtLT4KIAogICAgIDwhLS0gVGl0bGUgZm9yIHRoZSBhbGVydCBkaWFsb2cgZm9yIHNlbGVjdGluZyBhIHByaW50IHNlcnZpY2UuIFtDSEFSIExJTUlUPTUwXSAtLT4KQEAgLTE3MiwxMiArMTgxLDYgQEAKICAgICA8IS0tIFRlbXBsYXRlIGZvciB0aGUgbm90aWZpY2F0aW9uIGxhYmVsIGZvciBhIGJsb2NrZWQgcHJpbnQgam9iLiBbQ0hBUiBMSU1JVD0yNV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSI+UHJpbnRlciBibG9ja2VkIDx4bGlmZjpnIGlkPSJwcmludF9qb2JfbmFtZSIgZXhhbXBsZT0iZm9vLmpwZyI+JTEkczwveGxpZmY6Zz48L3N0cmluZz4KIAotICAgIDwhLS0gVGVtcGxhdGUgZm9yIHRoZSBub3RpZmljYXRpb24gbGFiZWwgZm9yIGEgY29tcG9zaXRlIChtdWx0aXBsZSBpdGVtcykgcHJpbnQgam9icyBub3RpZmljYXRpb24uIFtDSEFSIExJTUlUPTI1XSAtLT4KLSAgICA8cGx1cmFscyBuYW1lPSJjb21wb3NpdGVfbm90aWZpY2F0aW9uX3RpdGxlX3RlbXBsYXRlIj4KLSAgICAgICAgPGl0ZW0gcXVhbnRpdHk9Im9uZSI+PHhsaWZmOmcgaWQ9InByaW50X2pvYl9uYW1lIiBleGFtcGxlPSJmb28uanBnIj4lMSRkPC94bGlmZjpnPiBwcmludCBqb2I8L2l0ZW0+Ci0gICAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+PHhsaWZmOmcgaWQ9InByaW50X2pvYl9uYW1lIiBleGFtcGxlPSJmb28uanBnIj4lMSRkPC94bGlmZjpnPiBwcmludCBqb2JzPC9pdGVtPgotICAgIDwvcGx1cmFscz4KLQogICAgIDwhLS0gTGFiZWwgZm9yIHRoZSBub3RpZmljYXRpb24gYnV0dG9uIGZvciBjYW5jZWxsaW5nIGEgcHJpbnQgam9iLiBbQ0hBUiBMSU1JVD0yNV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJjYW5jZWwiPkNhbmNlbDwvc3RyaW5nPgogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9DdXN0b21QcmludGVySWNvbkNhY2hlLmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9DdXN0b21QcmludGVySWNvbkNhY2hlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NDI2OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL0N1c3RvbVByaW50ZXJJY29uQ2FjaGUuamF2YQpAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJpbnRzcG9vbGVyLm1vZGVsOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKK2ltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJJZDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CitpbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLlNvcnRlZE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuVHJlZU1hcDsKKworLyoqCisgKiBBIGZpeGVkIHNpemUgY2FjaGUgZm9yIGN1c3RvbSBwcmludGVyIGljb25zLiBPbGQgaWNvbnMgZ2V0IHJlbW92ZWQgd2l0aCBhIGxhc3QgcmVjZW50bHkgdXNlZAorICogcG9saWN5LgorICovCitwdWJsaWMgY2xhc3MgQ3VzdG9tUHJpbnRlckljb25DYWNoZSB7CisKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTE9HX1RBRyA9ICJDdXN0b21QcmludGVySWNvbkNhY2hlIjsKKworICAgIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpY29ucyBpbiB0aGUgY2FjaGUgKi8KKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFYX1NJWkUgPSAxMDI0OworCisgICAgLyoqIERpcmVjdG9yeSB1c2VkIHRvIHBlcnNpc3Qgc3RhdGUgYW5kIGljb25zICovCisgICAgcHJpdmF0ZSBmaW5hbCBGaWxlIG1DYWNoZURpcmVjdG9yeTsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBpY29uIGNhY2hlLgorICAgICAqLworICAgIHB1YmxpYyBDdXN0b21QcmludGVySWNvbkNhY2hlKEBOb25OdWxsIEZpbGUgY2FjaGVEaXJlY3RvcnkpIHsKKyAgICAgICAgbUNhY2hlRGlyZWN0b3J5ID0gbmV3IEZpbGUoY2FjaGVEaXJlY3RvcnksICJpY29ucyIpOworICAgICAgICBpZiAoIW1DYWNoZURpcmVjdG9yeS5leGlzdHMoKSkgeworICAgICAgICAgICAgbUNhY2hlRGlyZWN0b3J5Lm1rZGlyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIGZpbGUgbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgaWNvbiBvZiBhIHByaW50ZXIKKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBmaWxlIHRvIGJlIHVzZWQgZm9yIHRoZSBpY29uIG9mIHRoZSBwcmludGVyCisgICAgICovCisgICAgcHJpdmF0ZSBATnVsbGFibGUgRmlsZSBnZXRJY29uRmlsZU5hbWUoQE5vbk51bGwgUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKHByaW50ZXJJZC5nZXRTZXJ2aWNlTmFtZSgpLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBzYi5hcHBlbmQoIi0iKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgTWVzc2FnZURpZ2VzdCBtZCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIlNIQS0xIik7CisgICAgICAgICAgICBtZC51cGRhdGUoCisgICAgICAgICAgICAgICAgICAgIChwcmludGVySWQuZ2V0U2VydmljZU5hbWUoKS5nZXRDbGFzc05hbWUoKSArICI6IiArIHByaW50ZXJJZC5nZXRMb2NhbElkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEJ5dGVzKCJVVEYtMTYiKSk7CisgICAgICAgICAgICBzYi5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJSMwNDB4IiwgbmV3IGphdmEubWF0aC5CaWdJbnRlZ2VyKDEsIG1kLmRpZ2VzdCgpKSkpOworICAgICAgICB9IGNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9ufE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiQ291bGQgbm90IGNvbXB1dGUgY3VzdG9tIHByaW50ZXIgaWNvbiBmaWxlIG5hbWUiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBGaWxlKG1DYWNoZURpcmVjdG9yeSwgc2IudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IHRoZSB7QGxpbmsgSWNvbn0gdG8gYmUgdXNlZCBhcyBhIGN1c3RvbSBpY29uIGZvciB0aGUgcHJpbnRlci4gSWYgbm90IGF2YWlsYWJsZSByZXF1ZXN0CisgICAgICogdGhlIGljb24gdG8gYmUgbG9hZGVkLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHJldHVybiB0aGUge0BsaW5rIEljb259IGlmIGFscmVhZHkgYXZhaWxhYmxlIG9yIG51bGwgaWYgaWNvbiBpcyBub3QgbG9hZGVkIHlldAorICAgICAqLworICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgQE51bGxhYmxlIEljb24gZ2V0SWNvbihATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkKSB7CisgICAgICAgIEljb24gaWNvbjsKKworICAgICAgICBGaWxlIGljb25GaWxlID0gZ2V0SWNvbkZpbGVOYW1lKHByaW50ZXJJZCk7CisgICAgICAgIGlmIChpY29uRmlsZSAhPSBudWxsICYmIGljb25GaWxlLmV4aXN0cygpKSB7CisgICAgICAgICAgICB0cnkgKEZpbGVJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaWNvbkZpbGUpKSB7CisgICAgICAgICAgICAgICAgaWNvbiA9IEljb24uY3JlYXRlRnJvbVN0cmVhbShpcyk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgaWNvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkNvdWxkIG5vdCByZWFkIGljb24gZnJvbSAiICsgaWNvbkZpbGUsIGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUb3VjaCBmaWxlIHNvIHRoYXQgaXQgaXMgdGhlIG5vdCBsaWtlbHkgdG8gYmUgcmVtb3ZlZAorICAgICAgICAgICAgaWNvbkZpbGUuc2V0TGFzdE1vZGlmaWVkKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGljb24gPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGljb247CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlIG9sZCBpY29ucyBzbyB0aGF0IG9ubHkgYmV0d2VlbiBudW1GaWxlc1RvS2VlcCBhbmQgdHdpY2UgYXMgbWFueSBpY29ucyBhcmUgbGVmdC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBudW1GaWxlc1RvS2VlcCB0aGUgbnVtYmVyIG9mIGljb25zIHRvIGtlZXAKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCByZW1vdmVPbGRGaWxlcyhpbnQgbnVtRmlsZXNUb0tlZXApIHsKKyAgICAgICAgRmlsZSBmaWxlc1tdID0gbUNhY2hlRGlyZWN0b3J5Lmxpc3RGaWxlcygpOworCisgICAgICAgIC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNocmluayBvcGVyYXRpb25zLCBsZXQgdGhlIGNhY2hlIGdyb3cgdG8gdHdpY2UgdGhlIG1heCBzaXplCisgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiBudW1GaWxlc1RvS2VlcCAqIDIpIHsKKyAgICAgICAgICAgIFNvcnRlZE1hcDxMb25nLCBGaWxlPiBzb3J0ZWRGaWxlcyA9IG5ldyBUcmVlTWFwPD4oKTsKKworICAgICAgICAgICAgZm9yIChGaWxlIGYgOiBmaWxlcykgeworICAgICAgICAgICAgICAgIHNvcnRlZEZpbGVzLnB1dChmLmxhc3RNb2RpZmllZCgpLCBmKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKHNvcnRlZEZpbGVzLnNpemUoKSA+IG51bUZpbGVzVG9LZWVwKSB7CisgICAgICAgICAgICAgICAgc29ydGVkRmlsZXMucmVtb3ZlKHNvcnRlZEZpbGVzLmZpcnN0S2V5KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQKKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gaWNvbiB0aGUgaWNvbiB0aGF0IHdhcyBsb2FkZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkLAorICAgICAgICAgICAgQE51bGxhYmxlIEljb24gaWNvbikgeworICAgICAgICBGaWxlIGljb25GaWxlID0gZ2V0SWNvbkZpbGVOYW1lKHByaW50ZXJJZCk7CisKKyAgICAgICAgaWYgKGljb25GaWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSAoRmlsZU91dHB1dFN0cmVhbSBvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGljb25GaWxlKSkgeworICAgICAgICAgICAgaWNvbi53cml0ZVRvU3RyZWFtKG9zKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoTE9HX1RBRywgIkNvdWxkIG5vdCB3cml0ZSBpY29uIGZvciAiICsgcHJpbnRlcklkICsgIiB0byBzdG9yYWdlIiwgZSk7CisgICAgICAgIH0KKworICAgICAgICByZW1vdmVPbGRGaWxlcyhNQVhfU0laRSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2xlYXIgYWxsIHBlcnNpc3RlZCBhbmQgbm9uLXBlcnNpc3RlZCBzdGF0ZSBmcm9tIHRoaXMgY2FjaGUuCisgICAgICovCisgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNsZWFyKCkgeworICAgICAgICBmb3IgKEZpbGUgZiA6IG1DYWNoZURpcmVjdG9yeS5saXN0RmlsZXMoKSkgeworICAgICAgICAgICAgZi5kZWxldGUoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuamF2YSBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL05vdGlmaWNhdGlvbkNvbnRyb2xsZXIuamF2YQppbmRleCA4MmZkNTEyLi4wMjEwNjkzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9Ob3RpZmljYXRpb25Db250cm9sbGVyLmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvTm90aWZpY2F0aW9uQ29udHJvbGxlci5qYXZhCkBAIC00MCw2ICs0MCw3IEBACiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm87CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnByaW50c3Bvb2xlci5SOwpAQCAtNjEsMTMgKzYyLDIyIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUFJJTlRfSk9CX0lEID0gIkVYVFJBX1BSSU5UX0pPQl9JRCI7CiAKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJJTlRfSk9CX05PVElGSUNBVElPTl9HUk9VUF9LRVkgPSAiUFJJTlRfSk9CX05PVElGSUNBVElPTlMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUklOVF9KT0JfTk9USUZJQ0FUSU9OX1NVTU1BUlkgPSAiUFJJTlRfSk9CX05PVElGSUNBVElPTlNfU1VNTUFSWSI7CisKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBOb3RpZmljYXRpb25NYW5hZ2VyIG1Ob3RpZmljYXRpb25NYW5hZ2VyOwogCisgICAgLyoqCisgICAgICogTWFwcGluZyBmcm9tIHByaW50Sm9iSWRzIHRvIHRoZWlyIG5vdGlmaWNhdGlvbiBJZHMuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheVNldDxQcmludEpvYklkPiBtTm90aWZpY2F0aW9uczsKKwogICAgIHB1YmxpYyBOb3RpZmljYXRpb25Db250cm9sbGVyKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyID0gKE5vdGlmaWNhdGlvbk1hbmFnZXIpCiAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0Lk5PVElGSUNBVElPTl9TRVJWSUNFKTsKKyAgICAgICAgbU5vdGlmaWNhdGlvbnMgPSBuZXcgQXJyYXlTZXQ8PigwKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvblVwZGF0ZU5vdGlmaWNhdGlvbnMoTGlzdDxQcmludEpvYkluZm8+IHByaW50Sm9icykgewpAQCAtODEsMTYgKzkxLDQ0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB1cGRhdGVOb3RpZmljYXRpb24obm90aWZ5UHJpbnRKb2JzKTsKKyAgICAgICAgdXBkYXRlTm90aWZpY2F0aW9ucyhub3RpZnlQcmludEpvYnMpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVOb3RpZmljYXRpb24oTGlzdDxQcmludEpvYkluZm8+IHByaW50Sm9icykgewotICAgICAgICBpZiAocHJpbnRKb2JzLnNpemUoKSA8PSAwKSB7Ci0gICAgICAgICAgICByZW1vdmVOb3RpZmljYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChwcmludEpvYnMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIGNyZWF0ZVNpbXBsZU5vdGlmaWNhdGlvbihwcmludEpvYnMuZ2V0KDApKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgbm90aWZpY2F0aW9ucyBmb3IgdGhlIGdpdmVuIHByaW50IGpvYnMsIHJlbW92ZSBhbGwgb3RoZXIgbm90aWZpY2F0aW9ucy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludEpvYnMgVGhlIHByaW50IGpvYiB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIG5vdGlmaWNhdGlvbnMgZm9yLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVOb3RpZmljYXRpb25zKExpc3Q8UHJpbnRKb2JJbmZvPiBwcmludEpvYnMpIHsKKyAgICAgICAgQXJyYXlTZXQ8UHJpbnRKb2JJZD4gcmVtb3ZlZFByaW50Sm9icyA9IG5ldyBBcnJheVNldDw+KG1Ob3RpZmljYXRpb25zKTsKKworICAgICAgICBmaW5hbCBpbnQgbnVtUHJpbnRKb2JzID0gcHJpbnRKb2JzLnNpemUoKTsKKworICAgICAgICAvLyBDcmVhdGUgc3VtbWFyeSBub3RpZmljYXRpb24KKyAgICAgICAgaWYgKG51bVByaW50Sm9icyA+IDEpIHsKICAgICAgICAgICAgIGNyZWF0ZVN0YWNrZWROb3RpZmljYXRpb24ocHJpbnRKb2JzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1Ob3RpZmljYXRpb25NYW5hZ2VyLmNhbmNlbChQUklOVF9KT0JfTk9USUZJQ0FUSU9OX1NVTU1BUlksIDApOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ3JlYXRlIHBlciBwcmludCBqb2Igbm90aWZpY2F0aW9uCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUHJpbnRKb2JzOyBpKyspIHsKKyAgICAgICAgICAgIFByaW50Sm9iSW5mbyBwcmludEpvYiA9IHByaW50Sm9icy5nZXQoaSk7CisgICAgICAgICAgICBQcmludEpvYklkIHByaW50Sm9iSWQgPSBwcmludEpvYi5nZXRJZCgpOworCisgICAgICAgICAgICByZW1vdmVkUHJpbnRKb2JzLnJlbW92ZShwcmludEpvYklkKTsKKyAgICAgICAgICAgIG1Ob3RpZmljYXRpb25zLmFkZChwcmludEpvYklkKTsKKworICAgICAgICAgICAgY3JlYXRlU2ltcGxlTm90aWZpY2F0aW9uKHByaW50Sm9iKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBub3RpZmljYXRpb25zIGZvciBwcmludCBqb2JzIHRoYXQgZG8gbm90IGV4aXN0IGFueW1vcmUKKyAgICAgICAgZmluYWwgaW50IG51bVJlbW92ZWRQcmludEpvYnMgPSByZW1vdmVkUHJpbnRKb2JzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZW1vdmVkUHJpbnRKb2JzOyBpKyspIHsKKyAgICAgICAgICAgIFByaW50Sm9iSWQgcmVtb3ZlZFByaW50Sm9iID0gcmVtb3ZlZFByaW50Sm9icy52YWx1ZUF0KGkpOworCisgICAgICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlci5jYW5jZWwocmVtb3ZlZFByaW50Sm9iLmZsYXR0ZW5Ub1N0cmluZygpLCAwKTsKKyAgICAgICAgICAgIG1Ob3RpZmljYXRpb25zLnJlbW92ZShyZW1vdmVkUHJpbnRKb2IpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDgsNyArMTg2LDggQEAKICAgICAgICAgICAgICAgICAuc2V0T25nb2luZyh0cnVlKQogICAgICAgICAgICAgICAgIC5zZXRTaG93V2hlbih0cnVlKQogICAgICAgICAgICAgICAgIC5zZXRDb2xvcihtQ29udGV4dC5nZXRDb2xvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuY29sb3Iuc3lzdGVtX25vdGlmaWNhdGlvbl9hY2NlbnRfY29sb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuY29sb3Iuc3lzdGVtX25vdGlmaWNhdGlvbl9hY2NlbnRfY29sb3IpKQorICAgICAgICAgICAgICAgIC5zZXRHcm91cChQUklOVF9KT0JfTk9USUZJQ0FUSU9OX0dST1VQX0tFWSk7CiAKICAgICAgICAgaWYgKGZpcnN0QWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQWN0aW9uKGZpcnN0QWN0aW9uKTsKQEAgLTE1OCwxMSArMTk3LDE0IEBACiAgICAgICAgICAgICBidWlsZGVyLmFkZEFjdGlvbihzZWNvbmRBY3Rpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHByaW50Sm9iLmdldFN0YXRlKCkgPT0gUHJpbnRKb2JJbmZvLlNUQVRFX1NUQVJURUQpIHsKKyAgICAgICAgaWYgKHByaW50Sm9iLmdldFN0YXRlKCkgPT0gUHJpbnRKb2JJbmZvLlNUQVRFX1NUQVJURUQKKyAgICAgICAgICAgICAgICB8fCBwcmludEpvYi5nZXRTdGF0ZSgpID09IFByaW50Sm9iSW5mby5TVEFURV9RVUVVRUQpIHsKICAgICAgICAgICAgIGZsb2F0IHByb2dyZXNzID0gcHJpbnRKb2IuZ2V0UHJvZ3Jlc3MoKTsKICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRQcm9ncmVzcyhJbnRlZ2VyLk1BWF9WQUxVRSwgKGludCkoSW50ZWdlci5NQVhfVkFMVUUgKiBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgYnVpbGRlci5zZXRQcm9ncmVzcyhJbnRlZ2VyLk1BWF9WQUxVRSwgKGludCkgKEludGVnZXIuTUFYX1ZBTFVFICogcHJvZ3Jlc3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLnNldFByb2dyZXNzKEludGVnZXIuTUFYX1ZBTFVFLCAwLCB0cnVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xNzMsNyArMjE1LDcgQEAKICAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q29udGVudFRleHQocHJpbnRKb2IuZ2V0UHJpbnRlck5hbWUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlci5ub3RpZnkoMCwgYnVpbGRlci5idWlsZCgpKTsKKyAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KHByaW50Sm9iLmdldElkKCkuZmxhdHRlblRvU3RyaW5nKCksIDAsIGJ1aWxkZXIuYnVpbGQoKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVByaW50aW5nTm90aWZpY2F0aW9uKFByaW50Sm9iSW5mbyBwcmludEpvYikgewpAQCAtMjAxLDMzICsyNDMsMzYgQEAKICAgICAgICAgICAgICAgICAuc2V0Q29udGVudEludGVudChjcmVhdGVDb250ZW50SW50ZW50KG51bGwpKQogICAgICAgICAgICAgICAgIC5zZXRXaGVuKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKQogICAgICAgICAgICAgICAgIC5zZXRPbmdvaW5nKHRydWUpCi0gICAgICAgICAgICAgICAgLnNldFNob3dXaGVuKHRydWUpOworICAgICAgICAgICAgICAgIC5zZXRTaG93V2hlbih0cnVlKQorICAgICAgICAgICAgICAgIC5zZXRHcm91cChQUklOVF9KT0JfTk9USUZJQ0FUSU9OX0dST1VQX0tFWSkKKyAgICAgICAgICAgICAgICAuc2V0R3JvdXBTdW1tYXJ5KHRydWUpOwogCiAgICAgICAgIGZpbmFsIGludCBwcmludEpvYkNvdW50ID0gcHJpbnRKb2JzLnNpemUoKTsKIAogICAgICAgICBJbmJveFN0eWxlIGluYm94U3R5bGUgPSBuZXcgSW5ib3hTdHlsZSgpOwotICAgICAgICBpbmJveFN0eWxlLnNldEJpZ0NvbnRlbnRUaXRsZShTdHJpbmcuZm9ybWF0KG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFF1YW50aXR5VGV4dCgKLSAgICAgICAgICAgICAgICBSLnBsdXJhbHMuY29tcG9zaXRlX25vdGlmaWNhdGlvbl90aXRsZV90ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICBwcmludEpvYkNvdW50KS50b1N0cmluZygpLCBwcmludEpvYkNvdW50KSk7CiAKKyAgICAgICAgaW50IGljb24gPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmljX3ByaW50OwogICAgICAgICBmb3IgKGludCBpID0gcHJpbnRKb2JDb3VudCAtIDE7IGk+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIFByaW50Sm9iSW5mbyBwcmludEpvYiA9IHByaW50Sm9icy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoaSA9PSBwcmludEpvYkNvdW50IC0gMSkgewotICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TGFyZ2VJY29uKCgoQml0bWFwRHJhd2FibGUpIG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERyYXdhYmxlKAotICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZU5vdGlmaWNhdGlvbkljb24ocHJpbnRKb2IpLCBudWxsKSkuZ2V0Qml0bWFwKCkpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0U21hbGxJY29uKGNvbXB1dGVOb3RpZmljYXRpb25JY29uKHByaW50Sm9iKSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRDb250ZW50VGl0bGUoY29tcHV0ZU5vdGlmaWNhdGlvblRpdGxlKHByaW50Sm9iKSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRDb250ZW50VGV4dChwcmludEpvYi5nZXRQcmludGVyTmFtZSgpKTsKLSAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaW5ib3hTdHlsZS5hZGRMaW5lKGNvbXB1dGVOb3RpZmljYXRpb25UaXRsZShwcmludEpvYikpOworCisgICAgICAgICAgICAvLyBpZiBhbnkgcHJpbnQgam9iIGlzIGluIGFuIGVycm9yIHN0YXRlIHNob3cgYW4gZXJyb3IgaWNvbiBmb3IgdGhlIHN1bW1hcnkKKyAgICAgICAgICAgIGlmIChwcmludEpvYi5nZXRTdGF0ZSgpID09IFByaW50Sm9iSW5mby5TVEFURV9GQUlMRUQKKyAgICAgICAgICAgICAgICAgICAgfHwgcHJpbnRKb2IuZ2V0U3RhdGUoKSA9PSBQcmludEpvYkluZm8uU1RBVEVfQkxPQ0tFRCkgeworICAgICAgICAgICAgICAgIGljb24gPSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmljX3ByaW50X2Vycm9yOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgYnVpbGRlci5zZXRTbWFsbEljb24oaWNvbik7CisgICAgICAgIGJ1aWxkZXIuc2V0TGFyZ2VJY29uKAorICAgICAgICAgICAgICAgICgoQml0bWFwRHJhd2FibGUpIG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERyYXdhYmxlKGljb24sIG51bGwpKS5nZXRCaXRtYXAoKSk7CiAgICAgICAgIGJ1aWxkZXIuc2V0TnVtYmVyKHByaW50Sm9iQ291bnQpOwogICAgICAgICBidWlsZGVyLnNldFN0eWxlKGluYm94U3R5bGUpOwogICAgICAgICBidWlsZGVyLnNldENvbG9yKG1Db250ZXh0LmdldENvbG9yKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuY29sb3Iuc3lzdGVtX25vdGlmaWNhdGlvbl9hY2NlbnRfY29sb3IpKTsKIAotICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlci5ub3RpZnkoMCwgYnVpbGRlci5idWlsZCgpKTsKKyAgICAgICAgbU5vdGlmaWNhdGlvbk1hbmFnZXIubm90aWZ5KFBSSU5UX0pPQl9OT1RJRklDQVRJT05fU1VNTUFSWSwgMCwgYnVpbGRlci5idWlsZCgpKTsKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBjb21wdXRlTm90aWZpY2F0aW9uVGl0bGUoUHJpbnRKb2JJbmZvIHByaW50Sm9iKSB7CkBAIC0yNjEsMTAgKzMwNiw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcmVtb3ZlTm90aWZpY2F0aW9uKCkgewotICAgICAgICBtTm90aWZpY2F0aW9uTWFuYWdlci5jYW5jZWwoMCk7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBQZW5kaW5nSW50ZW50IGNyZWF0ZUNvbnRlbnRJbnRlbnQoUHJpbnRKb2JJZCBwcmludEpvYklkKSB7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9QUklOVF9TRVRUSU5HUyk7CiAgICAgICAgIGlmIChwcmludEpvYklkICE9IG51bGwpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1BhZ2VDb250ZW50UmVwb3NpdG9yeS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKaW5kZXggZWE2MjgxZC4uYWM5N2FkMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUGFnZUNvbnRlbnRSZXBvc2l0b3J5LmphdmEKQEAgLTExNiw2ICsxMTYsNyBAQAogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgbUNsb3NlR3VhcmQuY2xvc2UoKTsKIAogICAgICAgICBtU3RhdGUgPSBTVEFURV9ERVNUUk9ZRUQ7CiAgICAgICAgIGlmIChERUJVRykgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUHJpbnRTcG9vbGVyU2VydmljZS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUHJpbnRTcG9vbGVyU2VydmljZS5qYXZhCmluZGV4IDkwZWVmODMuLjE4MTYwZmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1ByaW50U3Bvb2xlclNlcnZpY2UuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9QcmludFNwb29sZXJTZXJ2aWNlLmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CkBAIC0xMDksNiArMTEwLDkgQEAKIAogICAgIHByaXZhdGUgTm90aWZpY2F0aW9uQ29udHJvbGxlciBtTm90aWZpY2F0aW9uQ29udHJvbGxlcjsKIAorICAgIC8qKiBDYWNoZSBmb3IgY3VzdG9tIHByaW50ZXIgaWNvbnMgbG9hZGVkIGZyb20gdGhlIHByaW50IHNlcnZpY2UgKi8KKyAgICBwcml2YXRlIEN1c3RvbVByaW50ZXJJY29uQ2FjaGUgbUN1c3RvbUljb25DYWNoZTsKKwogICAgIHB1YmxpYyBzdGF0aWMgUHJpbnRTcG9vbGVyU2VydmljZSBwZWVrSW5zdGFuY2UoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAoc0xvY2spIHsKICAgICAgICAgICAgIHJldHVybiBzSW5zdGFuY2U7CkBAIC0xMjMsNiArMTI3LDcgQEAKIAogICAgICAgICBtUGVyc2lzdGFuY2VNYW5hZ2VyID0gbmV3IFBlcnNpc3RlbmNlTWFuYWdlcigpOwogICAgICAgICBtTm90aWZpY2F0aW9uQ29udHJvbGxlciA9IG5ldyBOb3RpZmljYXRpb25Db250cm9sbGVyKFByaW50U3Bvb2xlclNlcnZpY2UudGhpcyk7CisgICAgICAgIG1DdXN0b21JY29uQ2FjaGUgPSBuZXcgQ3VzdG9tUHJpbnRlckljb25DYWNoZShnZXRDYWNoZURpcigpKTsKIAogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtUGVyc2lzdGFuY2VNYW5hZ2VyLnJlYWRTdGF0ZUxvY2tlZCgpOwpAQCAtMTM1LDYgKzE0MCwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgc3VwZXIub25EZXN0cm95KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElCaW5kZXIgb25CaW5kKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIG5ldyBQcmludFNwb29sZXIoKTsKICAgICB9CkBAIC03MDMsNiArNzEzLDM3IEBACiAgICAgICAgIH0uZXhlY3V0ZU9uRXhlY3V0b3IoQXN5bmNUYXNrLlNFUklBTF9FWEVDVVRPUiwgKFZvaWRbXSkgbnVsbCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBiZWxvbmdzIHRvCisgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoUHJpbnRlcklkIHByaW50ZXJJZCwgSWNvbiBpY29uKSB7CisgICAgICAgIG1DdXN0b21JY29uQ2FjaGUub25DdXN0b21QcmludGVySWNvbkxvYWRlZChwcmludGVySWQsIGljb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyBJY29uIGdldEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgcmV0dXJuIG1DdXN0b21JY29uQ2FjaGUuZ2V0SWNvbihwcmludGVySWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBjdXN0b20gcHJpbnRlciBpY29uIGNhY2hlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpIHsKKyAgICAgICAgbUN1c3RvbUljb25DYWNoZS5jbGVhcigpOworICAgIH0KKwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUGVyc2lzdGVuY2VNYW5hZ2VyIHsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBFUlNJU1RfRklMRV9OQU1FID0gInByaW50X3Nwb29sZXJfc3RhdGUueG1sIjsKIApAQCAtMTI2Miw3ICsxMzAzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBleHBlY3QoWG1sUHVsbFBhcnNlciBwYXJzZXIsIGludCB0eXBlLCBTdHJpbmcgdGFnKQotICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgdGhyb3dzIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewogICAgICAgICAgICAgaWYgKCFhY2NlcHQocGFyc2VyLCB0eXBlLCB0YWcpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oIkV4ZXBlY3RlZCBldmVudDogIiArIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBhbmQgdGFnOiAiICsgdGFnICsgIiBidXQgZ290IGV2ZW50OiAiICsgcGFyc2VyLmdldEV2ZW50VHlwZSgpCkBAIC0xMjc5LDcgKzEzMjAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGFjY2VwdChYbWxQdWxsUGFyc2VyIHBhcnNlciwgaW50IHR5cGUsIFN0cmluZyB0YWcpCi0gICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBpZiAocGFyc2VyLmdldEV2ZW50VHlwZSgpICE9IHR5cGUpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0xMzc1LDkgKzE0MTYsOSBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFwcHJvdmVkUHJpbnRTZXJ2aWNlKENvbXBvbmVudE5hbWUgc2VydmljZVRvUmVtb3ZlKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHBydW5lQXBwcm92ZWRQcmludFNlcnZpY2VzKExpc3Q8Q29tcG9uZW50TmFtZT4gc2VydmljZXNUb0tlZXApIHsKICAgICAgICAgICAgIChuZXcgQXBwcm92ZWRQcmludFNlcnZpY2VzKFByaW50U3Bvb2xlclNlcnZpY2UudGhpcykpCi0gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVBcHByb3ZlZFNlcnZpY2Uoc2VydmljZVRvUmVtb3ZlKTsKKyAgICAgICAgICAgICAgICAgICAgLnBydW5lQXBwcm92ZWRTZXJ2aWNlcyhzZXJ2aWNlc1RvS2VlcCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTEzOTUsNSArMTQzNiwzOCBAQAogICAgICAgICBwdWJsaWMgUHJpbnRTcG9vbGVyU2VydmljZSBnZXRTZXJ2aWNlKCkgewogICAgICAgICAgICAgcmV0dXJuIFByaW50U3Bvb2xlclNlcnZpY2UudGhpczsKICAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKFByaW50ZXJJZCBwcmludGVySWQsIEljb24gaWNvbiwKKyAgICAgICAgICAgICAgICBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIGNhbGxiYWNrcywgaW50IHNlcXVlbmNlKQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBQcmludFNwb29sZXJTZXJ2aWNlLnRoaXMub25DdXN0b21QcmludGVySWNvbkxvYWRlZChwcmludGVySWQsIGljb24pOworICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja3Mub25DdXN0b21QcmludGVySWNvbkNhY2hlZChzZXF1ZW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZ2V0Q3VzdG9tUHJpbnRlckljb24oUHJpbnRlcklkIHByaW50ZXJJZCwgSVByaW50U3Bvb2xlckNhbGxiYWNrcyBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgaW50IHNlcXVlbmNlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIEljb24gaWNvbiA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGljb24gPSBQcmludFNwb29sZXJTZXJ2aWNlLnRoaXMuZ2V0Q3VzdG9tUHJpbnRlckljb24ocHJpbnRlcklkKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uR2V0Q3VzdG9tUHJpbnRlckljb25SZXN1bHQoaWNvbiwgc2VxdWVuY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZShJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICBpbnQgc2VxdWVuY2UpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBQcmludFNwb29sZXJTZXJ2aWNlLnRoaXMuY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKCk7CisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNhbGxiYWNrcy5jdXN0b21QcmludGVySWNvbkNhY2hlQ2xlYXJlZChzZXF1ZW5jZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1JlbW90ZVByaW50RG9jdW1lbnQuamF2YSBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL21vZGVsL1JlbW90ZVByaW50RG9jdW1lbnQuamF2YQppbmRleCAxYjZlOWNlLi42ODRhMWRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci9tb2RlbC9SZW1vdGVQcmludERvY3VtZW50LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvbW9kZWwvUmVtb3RlUHJpbnREb2N1bWVudC5qYXZhCkBAIC0xNzMsMTUgKzE3MywxOSBAQAogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJbQ0FMTEVEXSBzdGFydCgpIik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1TdGF0ZSAhPSBTVEFURV9JTklUSUFMKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc3RhcnQgaW4gc3RhdGU6IiArIHN0YXRlVG9TdHJpbmcobVN0YXRlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1QcmludERvY3VtZW50QWRhcHRlci5zdGFydCgpOwotICAgICAgICAgICAgbVN0YXRlID0gU1RBVEVfU1RBUlRFRDsKLSAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7Ci0gICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgY2FsbGluZyBzdGFydCgpIiwgcmUpOwotICAgICAgICAgICAgbVN0YXRlID0gU1RBVEVfRkFJTEVEOworICAgICAgICBpZiAobVN0YXRlID09IFNUQVRFX0ZBSUxFRCkgeworICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIkZhaWxlZCBiZWZvcmUgc3RhcnQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobVN0YXRlICE9IFNUQVRFX0lOSVRJQUwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc3RhcnQgaW4gc3RhdGU6IiArIHN0YXRlVG9TdHJpbmcobVN0YXRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1QcmludERvY3VtZW50QWRhcHRlci5zdGFydCgpOworICAgICAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX1NUQVJURUQ7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShMT0dfVEFHLCAiRXJyb3IgY2FsbGluZyBzdGFydCgpIiwgcmUpOworICAgICAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX0ZBSUxFRDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtODcwLDcgKzg3NCw3IEBACiAgICAgICAgIHByaXZhdGUgZmluYWwgTXV0ZXhGaWxlUHJvdmlkZXIgbUZpbGVQcm92aWRlcjsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIElXcml0ZVJlc3VsdENhbGxiYWNrIG1SZW1vdGVSZXN1bHRDYWxsYmFjazsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb21tYW5kRG9uZUNhbGxiYWNrIG1Eb25lQ2FsbGJhY2s7CisgICAgICAgIHByaXZhdGUgZmluYWwgQ29tbWFuZERvbmVDYWxsYmFjayBtV3JpdGVEb25lQ2FsbGJhY2s7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OwogICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CkBAIC04ODUsNyArODg5LDcgQEAKICAgICAgICAgICAgIG1QYWdlQ291bnQgPSBwYWdlQ291bnQ7CiAgICAgICAgICAgICBtUGFnZXMgPSBBcnJheXMuY29weU9mKHBhZ2VzLCBwYWdlcy5sZW5ndGgpOwogICAgICAgICAgICAgbUZpbGVQcm92aWRlciA9IGZpbGVQcm92aWRlcjsKLSAgICAgICAgICAgIG1Eb25lQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgIG1Xcml0ZURvbmVDYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC05OTcsNyArMTAwMSw3IEBACiAgICAgICAgICAgICBtQ2FuY2VsbGF0aW9uID0gbnVsbDsKIAogICAgICAgICAgICAgLy8gRG9uZS4KLSAgICAgICAgICAgIG1Eb25lQ2FsbGJhY2sub25Eb25lKCk7CisgICAgICAgICAgICBtV3JpdGVEb25lQ2FsbGJhY2sub25Eb25lKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlT25Xcml0ZUZhaWxlZChDaGFyU2VxdWVuY2UgZXJyb3IsIGludCBzZXF1ZW5jZSkgewpAQCAtMTAxNSw3ICsxMDE5LDcgQEAKICAgICAgICAgICAgIG1DYW5jZWxsYXRpb24gPSBudWxsOwogCiAgICAgICAgICAgICAvLyBEb25lLgotICAgICAgICAgICAgbURvbmVDYWxsYmFjay5vbkRvbmUoKTsKKyAgICAgICAgICAgIG1Xcml0ZURvbmVDYWxsYmFjay5vbkRvbmUoKTsKICAgICAgICAgfQogCiAgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVPbldyaXRlQ2FuY2VsZWQoaW50IHNlcXVlbmNlKSB7CkBAIC0xMDMzLDcgKzEwMzcsNyBAQAogICAgICAgICAgICAgbUNhbmNlbGxhdGlvbiA9IG51bGw7CiAKICAgICAgICAgICAgIC8vIERvbmUuCi0gICAgICAgICAgICBtRG9uZUNhbGxiYWNrLm9uRG9uZSgpOworICAgICAgICAgICAgbVdyaXRlRG9uZUNhbGxiYWNrLm9uRG9uZSgpOwogICAgICAgICB9CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBXcml0ZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL0Z1c2VkUHJpbnRlcnNQcm92aWRlci5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvRnVzZWRQcmludGVyc1Byb3ZpZGVyLmphdmEKaW5kZXggODBjMjhlMC4uY2QzMGUyNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvRnVzZWRQcmludGVyc1Byb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvRnVzZWRQcmludGVyc1Byb3ZpZGVyLmphdmEKQEAgLTIwLDIzICsyMCwzMyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Mb2FkZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOworaW1wb3J0IGFuZHJvaWQubG9jYXRpb24uQ3JpdGVyaWE7CitpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmxvY2F0aW9uLkxvY2F0aW9uTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5sb2NhdGlvbi5Mb2NhdGlvblJlcXVlc3Q7CiBpbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7CitpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRlckRpc2NvdmVyeVNlc3Npb24uT25QcmludGVyc0NoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRlcklkOwogaW1wb3J0IGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm87CiBpbXBvcnQgYW5kcm9pZC5wcmludHNlcnZpY2UuUHJpbnRTZXJ2aWNlSW5mbzsKLWltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0b21pY0ZpbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuUGFpcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuWG1sOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0WG1sU2VyaWFsaXplcjsKIAoraW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKKwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxTZXJpYWxpemVyOwpAQCAtNDksMTggKzU5LDE5IEBACiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLQogLyoqCiAgKiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHByaW50ZXJzIGJ5IGRvaW5nIGRpc2NvdmVyeQogICogYW5kIG1lcmdpbmcgdGhlIGRpc2NvdmVyZWQgcHJpbnRlcnMgd2l0aCB0aGUgcHJldmlvdXNseSB1c2VkIG9uZXMuCiAgKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBGdXNlZFByaW50ZXJzUHJvdmlkZXIgZXh0ZW5kcyBMb2FkZXI8TGlzdDxQcmludGVySW5mbz4+IHsKK3B1YmxpYyBmaW5hbCBjbGFzcyBGdXNlZFByaW50ZXJzUHJvdmlkZXIgZXh0ZW5kcyBMb2FkZXI8TGlzdDxQcmludGVySW5mbz4+CisgICAgICAgIGltcGxlbWVudHMgTG9jYXRpb25MaXN0ZW5lciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPR19UQUcgPSAiRnVzZWRQcmludGVyc1Byb3ZpZGVyIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKQEAgLTcwLDEwICs4MSwyMiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9GQVZPUklURV9QUklOVEVSX0NPVU5UID0gNDsKIAorICAgIC8qKiBJbnRlcnZhbCBvZiBsb2NhdGlvbiB1cGRhdGVkIGluIG1zICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FUSU9OX1VQREFURV9NUyA9IDMwICogMTAwMDsKKworICAgIC8qKiBNYXhpbXVtIGFjY2VwdGFibGUgYWdlIG9mIHRoZSBsb2NhdGlvbiBpbiBtcyAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfTE9DQVRJT05fQUdFX01TID0gMTAgKiA2MCAqIDEwMDA7CisKKyAgICAvKiogVGhlIHdvcnN0IGFjY3VyYWN5IHRoYXQgaXMgY29uc2lkZXJlZCB1c2FibGUgaW4gbSAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fTE9DQVRJT05fQUNDVVJBQ1kgPSA1MDsKKworICAgIC8qKiBNYXhpbXVtIGRpc3RhbmNlIHdoZXJlIGEgcHJpbnRlciBpcyBzdGlsbCBjb25zaWRlcmVkICJuZWFyIiAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUFJJTlRFUl9ESVNUQU5DRSA9IE1JTl9MT0NBVElPTl9BQ0NVUkFDWSAqIDI7CisKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8UHJpbnRlckluZm8+IG1QcmludGVycyA9CiAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PD4oKTsKIAotICAgIHByaXZhdGUgZmluYWwgTGlzdDxQcmludGVySW5mbz4gbUZhdm9yaXRlUHJpbnRlcnMgPQorICAgIHByaXZhdGUgZmluYWwgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IG1GYXZvcml0ZVByaW50ZXJzID0KICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBQZXJzaXN0ZW5jZU1hbmFnZXIgbVBlcnNpc3RlbmNlTWFuYWdlcjsKQEAgLTg0LDMzICsxMDcsMTEyIEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gbVByaW50ZXJzVXBkYXRlZEJlZm9yZTsKIAorICAgIC8qKiBMYXN0IGtub3duIGxvY2F0aW9uLCBjYW4gYmUgbnVsbCBvciBvdXQgb2YgZGF0ZSAqLworICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1Mb2NhdGlvbkxvY2s7CisgICAgcHJpdmF0ZSBMb2NhdGlvbiBtTG9jYXRpb247CisKKyAgICAvKiogTG9jYXRpb24gdXNlZCB3aGVuIHRoZSBwcmludGVycyB3ZXJlIHVwZGF0ZWQgdGhlIGxhc3QgdGltZSAqLworICAgIHByaXZhdGUgTG9jYXRpb24gbUxvY2F0aW9uT2ZMYXN0UHJpbnRlclVwZGF0ZTsKKworICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHN5c3RlbSdzIGxvY2F0aW9uIG1hbmFnZXIgKi8KKyAgICBwcml2YXRlIGZpbmFsIExvY2F0aW9uTWFuYWdlciBtTG9jYXRpb25NYW5hZ2VyOworCisgICAgLyoqCisgICAgICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgTG9jYXRpb24gZ2V0Q3VycmVudExvY2F0aW9uKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NhdGlvbkxvY2spIHsKKyAgICAgICAgICAgIHJldHVybiBtTG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgRnVzZWRQcmludGVyc1Byb3ZpZGVyKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgbUxvY2F0aW9uTG9jayA9IG5ldyBPYmplY3QoKTsKICAgICAgICAgbVBlcnNpc3RlbmNlTWFuYWdlciA9IG5ldyBQZXJzaXN0ZW5jZU1hbmFnZXIoY29udGV4dCk7CisgICAgICAgIG1Mb2NhdGlvbk1hbmFnZXIgPSAoTG9jYXRpb25NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5MT0NBVElPTl9TRVJWSUNFKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhZGRIaXN0b3JpY2FsUHJpbnRlcihQcmludGVySW5mbyBwcmludGVyKSB7CiAgICAgICAgIG1QZXJzaXN0ZW5jZU1hbmFnZXIuYWRkUHJpbnRlckFuZFdyaXRlUHJpbnRlckhpc3RvcnkocHJpbnRlcik7CiAgICAgfQogCisgICAgLyoqCisgICAgICogQWRkIHByaW50ZXIgdG8gZGVzdCwgb3IgaWYgdXBkYXRlZFByaW50ZXJzIGFkZCB0aGUgdXBkYXRlZCBwcmludGVyLiBJZiB0aGUgdXBkYXRlZCBwcmludGVyCisgICAgICogd2FzIGFkZGVkLCByZW1vdmUgaXQgZnJvbSB1cGRhdGVkUHJpbnRlcnMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZGVzdCBUaGUgbGlzdCB0aGUgcHJpbnRlcnMgc2hvdWxkIGJlIGFkZGVkIHRvCisgICAgICogQHBhcmFtIHByaW50ZXIgVGhlIHByaW50ZXIgdG8gYWRkCisgICAgICogQHBhcmFtIHVwZGF0ZWRQcmludGVycyBUaGUgcHJpbnRlciB0byBhZGQKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQW5kQWRkUHJpbnRlcihMaXN0PFByaW50ZXJJbmZvPiBkZXN0LCBQcmludGVySW5mbyBwcmludGVyLAorICAgICAgICAgICAgTWFwPFByaW50ZXJJZCwgUHJpbnRlckluZm8+IHVwZGF0ZWRQcmludGVycykgeworICAgICAgICBQcmludGVySW5mbyB1cGRhdGVkUHJpbnRlciA9IHVwZGF0ZWRQcmludGVycy5yZW1vdmUocHJpbnRlci5nZXRJZCgpKTsKKyAgICAgICAgaWYgKHVwZGF0ZWRQcmludGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGRlc3QuYWRkKHVwZGF0ZWRQcmludGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3QuYWRkKHByaW50ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29tcHV0ZSB0aGUgcHJpbnRlcnMsIG9yZGVyIHRoZW0gYXBwcm9wcmlhdGVseSBhbmQgZGVsaXZlciB0aGUgcHJpbnRlcnMgdG8gdGhlIGNsaWVudHMuIFdlCisgICAgICogcHJlZmVyIHByaW50ZXJzIHRoYXQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgdXNlZCAoZmF2b3JpdGVzKSBhbmQgcHJpbnRlcnMgdGhhdCBoYXZlIGJlZW4gdXNlZAorICAgICAqIHByZXZpb3VzbHkgY2xvc2UgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gKG5lYXIgcHJpbnRlcnMpLgorICAgICAqCisgICAgICogQHBhcmFtIGRpc2NvdmVyZWRQcmludGVycyBBbGwgcHJpbnRlcnMgY3VycmVudGx5IGRpc2NvdmVyZWQgYnkgdGhlIHByaW50IGRpc2NvdmVyeSBzZXNzaW9uLgorICAgICAqIEBwYXJhbSBmYXZvcml0ZVByaW50ZXJzIFRoZSBvcmRlcmVkIGxpc3Qgb2YgcHJpbnRlcnMuIFRoZSBlYXJsaWVyIGluIHRoZSBsaXN0LCB0aGUgbW9yZQorICAgICAqICAgICAgICAgICAgcHJlZmVycmVkLgorICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjb21wdXRlQW5kRGVsaXZlclJlc3VsdChNYXA8UHJpbnRlcklkLCBQcmludGVySW5mbz4gZGlzY292ZXJlZFByaW50ZXJzLAotICAgICAgICAgICAgTGlzdDxQcmludGVySW5mbz4gZmF2b3JpdGVQcmludGVycykgeworICAgICAgICAgICAgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IGZhdm9yaXRlUHJpbnRlcnMpIHsKICAgICAgICAgTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAotICAgICAgICAvLyBBZGQgdGhlIHVwZGF0ZWQgZmF2b3JpdGUgcHJpbnRlcnMuCisgICAgICAgIC8vIFN0b3JlIHRoZSBwcmludGVySWRzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQuIFdlIGNhbm5vdCBjb21wYXJlIHRoZSBwcmludGVySW5mb3MgaW4KKyAgICAgICAgLy8gInByaW50ZXJzIiBhcyB0aGV5IG1pZ2h0IGhhdmUgYmVlbiB0YWtlbiBmcm9tIGRpc2NvdmVyZWRQcmludGVycyBhbmQgdGhlIHByaW50ZXJJbmZvIGRvZXMKKyAgICAgICAgLy8gbm90IGVxdWFscygpIGFueW1vcmUKKyAgICAgICAgSGFzaFNldDxQcmludGVySWQ+IGFscmVhZHlBZGRlZFByaW50ZXIgPSBuZXcgSGFzaFNldDw+KE1BWF9GQVZPUklURV9QUklOVEVSX0NPVU5UKTsKKworICAgICAgICBMb2NhdGlvbiBsb2NhdGlvbiA9IGdldEN1cnJlbnRMb2NhdGlvbigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZmF2b3JpdGUgcHJpbnRlcnMgdGhhdCBoYXZlIGxhc3QgYmVlbiB1c2VkIGNsb3NlIHRvIHRoZSBjdXJyZW50IGxvY2F0aW9uCiAgICAgICAgIGZpbmFsIGludCBmYXZvcml0ZVByaW50ZXJDb3VudCA9IGZhdm9yaXRlUHJpbnRlcnMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdm9yaXRlUHJpbnRlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFByaW50ZXJJbmZvIGZhdm9yaXRlUHJpbnRlciA9IGZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgUHJpbnRlckluZm8gdXBkYXRlZFByaW50ZXIgPSBkaXNjb3ZlcmVkUHJpbnRlcnMucmVtb3ZlKAotICAgICAgICAgICAgICAgICAgICBmYXZvcml0ZVByaW50ZXIuZ2V0SWQoKSk7Ci0gICAgICAgICAgICBpZiAodXBkYXRlZFByaW50ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHByaW50ZXJzLmFkZCh1cGRhdGVkUHJpbnRlcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZXJzLmFkZChmYXZvcml0ZVByaW50ZXIpOworICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXZvcml0ZVByaW50ZXJDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSBhZGQgYSBjZXJ0YWluIGFtb3VudCBvZiBmYXZvcml0ZSBwcmludGVycworICAgICAgICAgICAgICAgIGlmIChwcmludGVycy5zaXplKCkgPT0gTUFYX0ZBVk9SSVRFX1BSSU5URVJfQ09VTlQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gZmF2b3JpdGVQcmludGVyID0gZmF2b3JpdGVQcmludGVycy5nZXQoaSkuZmlyc3Q7CisgICAgICAgICAgICAgICAgTG9jYXRpb24gcHJpbnRlckxvY2F0aW9uID0gZmF2b3JpdGVQcmludGVycy5nZXQoaSkuc2Vjb25kOworCisgICAgICAgICAgICAgICAgaWYgKHByaW50ZXJMb2NhdGlvbiAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhYWxyZWFkeUFkZGVkUHJpbnRlci5jb250YWlucyhmYXZvcml0ZVByaW50ZXIuZ2V0SWQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW50ZXJMb2NhdGlvbi5kaXN0YW5jZVRvKGxvY2F0aW9uKSA8PSBNQVhfUFJJTlRFUl9ESVNUQU5DRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQW5kQWRkUHJpbnRlcihwcmludGVycywgZmF2b3JpdGVQcmludGVyLCBkaXNjb3ZlcmVkUHJpbnRlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUFkZGVkUHJpbnRlci5hZGQoZmF2b3JpdGVQcmludGVyLmdldElkKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gQWRkIG90aGVyIHVwZGF0ZWQgcHJpbnRlcnMuCisgICAgICAgIC8vIEFkZCB0aGUgb3RoZXIgZmF2b3JpdGUgcHJpbnRlcnMKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXZvcml0ZVByaW50ZXJDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAvLyBPbmx5IGFkZCBhIGNlcnRhaW4gYW1vdW50IG9mIGZhdm9yaXRlIHByaW50ZXJzCisgICAgICAgICAgICBpZiAocHJpbnRlcnMuc2l6ZSgpID09IE1BWF9GQVZPUklURV9QUklOVEVSX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFByaW50ZXJJbmZvIGZhdm9yaXRlUHJpbnRlciA9IGZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpLmZpcnN0OworICAgICAgICAgICAgaWYgKCFhbHJlYWR5QWRkZWRQcmludGVyLmNvbnRhaW5zKGZhdm9yaXRlUHJpbnRlci5nZXRJZCgpKSkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUFuZEFkZFByaW50ZXIocHJpbnRlcnMsIGZhdm9yaXRlUHJpbnRlciwgZGlzY292ZXJlZFByaW50ZXJzKTsKKyAgICAgICAgICAgICAgICBhbHJlYWR5QWRkZWRQcmludGVyLmFkZChmYXZvcml0ZVByaW50ZXIuZ2V0SWQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgb3RoZXIgdXBkYXRlZCBwcmludGVycy4gUHJpbnRlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tCisgICAgICAgIC8vIGRpc2NvdmVyZWRQcmludGVycyBpbiB0aGUgY2FsbHMgdG8gdXBkYXRlQW5kQWRkUHJpbnRlcgogICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gbVByaW50ZXJzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmludGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRlciA9IG1QcmludGVycy5nZXQoaSk7CkBAIC0xNDIsNiArMjQ0LDIxIEBACiAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIm9uU3RhcnRMb2FkaW5nKCkgIiArIEZ1c2VkUHJpbnRlcnNQcm92aWRlci50aGlzLmhhc2hDb2RlKCkpOwogICAgICAgICB9CisKKyAgICAgICAgbUxvY2F0aW9uTWFuYWdlci5yZXF1ZXN0TG9jYXRpb25VcGRhdGVzKExvY2F0aW9uUmVxdWVzdC5jcmVhdGUoKQorICAgICAgICAgICAgICAgIC5zZXRRdWFsaXR5KExvY2F0aW9uUmVxdWVzdC5QT1dFUl9MT1cpLnNldEludGVydmFsKExPQ0FUSU9OX1VQREFURV9NUyksIHRoaXMsCisgICAgICAgICAgICAgICAgTG9vcGVyLmdldE1haW5Mb29wZXIoKSk7CisKKyAgICAgICAgTG9jYXRpb24gbGFzdExvY2F0aW9uID0gbUxvY2F0aW9uTWFuYWdlci5nZXRMYXN0TG9jYXRpb24oKTsKKyAgICAgICAgaWYgKGxhc3RMb2NhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBvbkxvY2F0aW9uQ2hhbmdlZChsYXN0TG9jYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgLy8gSnVtcHN0YXJ0IGxvY2F0aW9uIHdpdGggYSBzaW5nbGUgZm9yY2VkIHVwZGF0ZQorICAgICAgICBDcml0ZXJpYSBvbmVUaW1lQ3JpdGVyaWEgPSBuZXcgQ3JpdGVyaWEoKTsKKyAgICAgICAgb25lVGltZUNyaXRlcmlhLnNldEFjY3VyYWN5KENyaXRlcmlhLkFDQ1VSQUNZX0ZJTkUpOworICAgICAgICBtTG9jYXRpb25NYW5hZ2VyLnJlcXVlc3RTaW5nbGVVcGRhdGUob25lVGltZUNyaXRlcmlhLCB0aGlzLCBMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsKKwogICAgICAgICAvLyBUaGUgY29udHJhY3QgaXMgdGhhdCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSB2YWxpZCwKICAgICAgICAgLy8gcmVzdWx0IHRoZSB3ZSBoYXZlIHRvIGRlbGl2ZXIgaXQgaW1tZWRpYXRlbHkuCiAgICAgICAgIGlmICghbVByaW50ZXJzLmlzRW1wdHkoKSkgewpAQCAtMTU4LDYgKzI3NSw4IEBACiAgICAgICAgICAgICBMb2cuaShMT0dfVEFHLCAib25TdG9wTG9hZGluZygpICIgKyBGdXNlZFByaW50ZXJzUHJvdmlkZXIudGhpcy5oYXNoQ29kZSgpKTsKICAgICAgICAgfQogICAgICAgICBvbkNhbmNlbExvYWQoKTsKKworICAgICAgICBtTG9jYXRpb25NYW5hZ2VyLnJlbW92ZVVwZGF0ZXModGhpcyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xODgsMzQgKzMwNywzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgIiArIEZ1c2VkUHJpbnRlcnNQcm92aWRlci50aGlzLmhhc2hDb2RlKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbUZhdm9yaXRlUHJpbnRlcnMpOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVQcmludGVycyhtRGlzY292ZXJ5U2Vzc2lvbi5nZXRQcmludGVycygpLCBtRmF2b3JpdGVQcmludGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50TG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgZmF2b3JpdGVDb3VudCA9IG1GYXZvcml0ZVByaW50ZXJzLnNpemUoKTsKICAgICAgICAgICAgIExpc3Q8UHJpbnRlcklkPiBwcmludGVySWRzID0gbmV3IEFycmF5TGlzdDw+KGZhdm9yaXRlQ291bnQpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXZvcml0ZUNvdW50OyBpKyspIHsKLSAgICAgICAgICAgICAgICBwcmludGVySWRzLmFkZChtRmF2b3JpdGVQcmludGVycy5nZXQoaSkuZ2V0SWQoKSk7CisgICAgICAgICAgICAgICAgcHJpbnRlcklkcy5hZGQobUZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpLmZpcnN0LmdldElkKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc2NvdmVyeVNlc3Npb24uc3RhcnRQcmludGVyRGlzY292ZXJ5KHByaW50ZXJJZHMpOwogICAgICAgICAgICAgTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMgPSBtRGlzY292ZXJ5U2Vzc2lvbi5nZXRQcmludGVycygpOwotICAgICAgICAgICAgaWYgKCFwcmludGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVQcmludGVycyhwcmludGVycywgbUZhdm9yaXRlUHJpbnRlcnMpOwotICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cGRhdGVQcmludGVycyhwcmludGVycywgbUZhdm9yaXRlUHJpbnRlcnMsIGdldEN1cnJlbnRMb2NhdGlvbigpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVQcmludGVycyhMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycywgTGlzdDxQcmludGVySW5mbz4gZmF2b3JpdGVQcmludGVycykgeworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVQcmludGVycyhMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycywKKyAgICAgICAgICAgIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBmYXZvcml0ZVByaW50ZXJzLAorICAgICAgICAgICAgTG9jYXRpb24gbG9jYXRpb24pIHsKICAgICAgICAgaWYgKG1QcmludGVyc1VwZGF0ZWRCZWZvcmUgJiYgbVByaW50ZXJzLmVxdWFscyhwcmludGVycykKLSAgICAgICAgICAgICAgICAmJiBtRmF2b3JpdGVQcmludGVycy5lcXVhbHMoZmF2b3JpdGVQcmludGVycykpIHsKKyAgICAgICAgICAgICAgICAmJiBtRmF2b3JpdGVQcmludGVycy5lcXVhbHMoZmF2b3JpdGVQcmludGVycykKKyAgICAgICAgICAgICAgICAmJiBPYmplY3RzLmVxdWFscyhtTG9jYXRpb25PZkxhc3RQcmludGVyVXBkYXRlLCBsb2NhdGlvbikpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIG1Mb2NhdGlvbk9mTGFzdFByaW50ZXJVcGRhdGUgPSBsb2NhdGlvbjsKICAgICAgICAgbVByaW50ZXJzVXBkYXRlZEJlZm9yZSA9IHRydWU7CiAKICAgICAgICAgLy8gU29tZSBvZiB0aGUgZm91bmQgcHJpbnRlcnMgbWF5IGhhdmUgYmUgYSBwcmludGVyIHRoYXQgaXMgaW4gdGhlCi0gICAgICAgIC8vIGhpc3RvcnkgYnV0IHdpdGggaXRzIG5hbWUgY2hhbmdlZC4gSGVuY2UsIHdlIHRyeSB0byB1cGRhdGUgdGhlCi0gICAgICAgIC8vIHByaW50ZXIgdG8gdXNlIGl0cyBjdXJyZW50IG5hbWUgaW5zdGVhZCBvZiB0aGUgaGlzdG9yaWNhbCBvbmUuCi0gICAgICAgIG1QZXJzaXN0ZW5jZU1hbmFnZXIudXBkYXRlUHJpbnRlcnNIaXN0b3JpY2FsTmFtZXNJZk5lZWRlZChwcmludGVycyk7CisgICAgICAgIC8vIGhpc3RvcnkgYnV0IHdpdGggaXRzIHByb3BlcnRpZXMgY2hhbmdlZC4gSGVuY2UsIHdlIHRyeSB0byB1cGRhdGUgdGhlCisgICAgICAgIC8vIHByaW50ZXIgdG8gdXNlIGl0cyBjdXJyZW50IHByb3BlcnRpZXMgaW5zdGVhZCBvZiB0aGUgaGlzdG9yaWNhbCBvbmUuCisgICAgICAgIG1QZXJzaXN0ZW5jZU1hbmFnZXIudXBkYXRlSGlzdG9yaWNhbFByaW50ZXJzSWZOZWVkZWQocHJpbnRlcnMpOwogCiAgICAgICAgIE1hcDxQcmludGVySWQsIFByaW50ZXJJbmZvPiBwcmludGVyc01hcCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IHByaW50ZXJzLnNpemUoKTsKQEAgLTI3MSw2ICszOTQsNjAgQEAKICAgICAgICAgb25TdG9wTG9hZGluZygpOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENoZWNrIGlmIHRoZSBsb2NhdGlvbiBpcyBhY2NlcHRhYmxlLiBUaGlzIGlzIHRvIGZpbHRlciBvdXQgZXhjZXNzaXZlbHkgb2xkIG9yIGluYWNjdXJhdGUKKyAgICAgKiBsb2NhdGlvbiB1cGRhdGVzLgorICAgICAqCisgICAgICogQHBhcmFtIGxvY2F0aW9uIHRoZSBsb2NhdGlvbiB0byBjaGVjaworICAgICAqIEByZXR1cm4gdHJ1ZSBpZmYgdGhlIGxvY2F0aW9uIGlzIHVzYWJsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNMb2NhdGlvbkFjY2VwdGFibGUoTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBsb2NhdGlvbi5nZXRFbGFwc2VkUmVhbHRpbWVOYW5vcygpID4gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lTmFub3MoKQorICAgICAgICAgICAgICAgICAgICAgICAgLSBNQVhfTE9DQVRJT05fQUdFX01TICogMTAwMF8wMDBMCisgICAgICAgICAgICAgICAgJiYgbG9jYXRpb24uaGFzQWNjdXJhY3koKQorICAgICAgICAgICAgICAgICYmIGxvY2F0aW9uLmdldEFjY3VyYWN5KCkgPCBNSU5fTE9DQVRJT05fQUNDVVJBQ1k7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Mb2NhdGlvbkNoYW5nZWQoTG9jYXRpb24gbG9jYXRpb24pIHsKKyAgICAgICAgc3luY2hyb25pemVkKG1Mb2NhdGlvbkxvY2spIHsKKyAgICAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGUgdXNlciB0byBub3QgbW92ZSB0b28gZmFzdCB3aGlsZSBwcmludGluZy4gSGVuY2UgcHJlZmVyIG1vcmUgYWNjdXJhdGUKKyAgICAgICAgICAgIC8vIHVwZGF0ZXMgb3ZlciBtb3JlIHJlY2VudCBvbmVzIGZvciBMT0NBVElPTl9VUERBVEVfTVMuIFdlIGFkZCBhIDEwJSBmdWRnZSBmYWN0b3IgaGVyZQorICAgICAgICAgICAgLy8gYXMgdGhlIGxvY2F0aW9uIHByb3ZpZGVyIG1pZ2h0IHNlbmQgYW4gdXBkYXRlIHNsaWdodGx5IHRvbyBlYXJseS4KKyAgICAgICAgICAgIGlmIChpc0xvY2F0aW9uQWNjZXB0YWJsZShsb2NhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgJiYgIWxvY2F0aW9uLmVxdWFscyhtTG9jYXRpb24pCisgICAgICAgICAgICAgICAgICAgICYmIChtTG9jYXRpb24gPT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RWxhcHNlZFJlYWx0aW1lTmFub3MoKSA+IG1Mb2NhdGlvbi5nZXRFbGFwc2VkUmVhbHRpbWVOYW5vcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTE9DQVRJT05fVVBEQVRFX01TICogMC45ICogMTAwMF8wMDBMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKCFtTG9jYXRpb24uaGFzQWNjdXJhY3koKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbG9jYXRpb24uZ2V0QWNjdXJhY3koKSA8IG1Mb2NhdGlvbi5nZXRBY2N1cmFjeSgpKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBPdGhlciBjYWxsZXJzIG9mIHVwZGF0ZVByaW50ZXJzIG1pZ2h0IHdhbnQgdG8ga25vdyB0aGUgbG9jYXRpb24sIGhlbmNlIGNhY2hlIGl0CisgICAgICAgICAgICAgICAgbUxvY2F0aW9uID0gbG9jYXRpb247CisKKyAgICAgICAgICAgICAgICBpZiAoYXJlSGlzdG9yaWNhbFByaW50ZXJzTG9hZGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbUZhdm9yaXRlUHJpbnRlcnMsIG1Mb2NhdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdGF0dXNDaGFuZ2VkKFN0cmluZyBwcm92aWRlciwgaW50IHN0YXR1cywgQnVuZGxlIGV4dHJhcykgeworICAgICAgICAvLyBub3RoaW5nIHRvIGRvCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Qcm92aWRlckVuYWJsZWQoU3RyaW5nIHByb3ZpZGVyKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblByb3ZpZGVyRGlzYWJsZWQoU3RyaW5nIHByb3ZpZGVyKSB7CisgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8KKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBhcmVIaXN0b3JpY2FsUHJpbnRlcnNMb2FkZWQoKSB7CiAgICAgICAgIHJldHVybiBtUGVyc2lzdGVuY2VNYW5hZ2VyLm1SZWFkSGlzdG9yeUNvbXBsZXRlZDsKICAgICB9CkBAIC0yOTQsNyArNDcxLDcgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc0Zhdm9yaXRlUHJpbnRlcihQcmludGVySWQgcHJpbnRlcklkKSB7CiAgICAgICAgIGZpbmFsIGludCBwcmludGVyQ291bnQgPSBtRmF2b3JpdGVQcmludGVycy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJpbnRlckNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFByaW50ZXJJbmZvIGZhdm9yaXRlUHJpdG5lciA9IG1GYXZvcml0ZVByaW50ZXJzLmdldChpKTsKKyAgICAgICAgICAgIFByaW50ZXJJbmZvIGZhdm9yaXRlUHJpdG5lciA9IG1GYXZvcml0ZVByaW50ZXJzLmdldChpKS5maXJzdDsKICAgICAgICAgICAgIGlmIChmYXZvcml0ZVByaXRuZXIuZ2V0SWQoKS5lcXVhbHMocHJpbnRlcklkKSkgewogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzAzLDI4ICs0ODAsMjIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBmb3JnZXRGYXZvcml0ZVByaW50ZXIoUHJpbnRlcklkIHByaW50ZXJJZCkgewotICAgICAgICBMaXN0PFByaW50ZXJJbmZvPiBuZXdGYXZvcml0ZVByaW50ZXJzID0gbnVsbDsKKyAgICAgICAgZmluYWwgaW50IGZhdm9yaXRlUHJpbnRlckNvdW50ID0gbUZhdm9yaXRlUHJpbnRlcnMuc2l6ZSgpOworICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gbmV3RmF2b3JpdGVQcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigKKyAgICAgICAgICAgICAgICBmYXZvcml0ZVByaW50ZXJDb3VudCAtIDEpOwogCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJpbnRlciBmcm9tIHRoZSBmYXZvcml0ZXMuCi0gICAgICAgIGZpbmFsIGludCBmYXZvcml0ZVByaW50ZXJDb3VudCA9IG1GYXZvcml0ZVByaW50ZXJzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYXZvcml0ZVByaW50ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBQcmludGVySW5mbyBmYXZvcml0ZVByaW50ZXIgPSBtRmF2b3JpdGVQcmludGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoZmF2b3JpdGVQcmludGVyLmdldElkKCkuZXF1YWxzKHByaW50ZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBuZXdGYXZvcml0ZVByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgICAgICAgICAgbmV3RmF2b3JpdGVQcmludGVycy5hZGRBbGwobVByaW50ZXJzKTsKLSAgICAgICAgICAgICAgICBuZXdGYXZvcml0ZVByaW50ZXJzLnJlbW92ZShpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICghbUZhdm9yaXRlUHJpbnRlcnMuZ2V0KGkpLmZpcnN0LmdldElkKCkuZXF1YWxzKHByaW50ZXJJZCkpIHsKKyAgICAgICAgICAgICAgICBuZXdGYXZvcml0ZVByaW50ZXJzLmFkZChtRmF2b3JpdGVQcmludGVycy5nZXQoaSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCBhIGZhdm9yaXRlIHByaW50ZXIsIHdlIGhhdmUgd29yayB0byBkby4KLSAgICAgICAgaWYgKG5ld0Zhdm9yaXRlUHJpbnRlcnMgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmludGVyIGZyb20gaGlzdG9yeSBhbmQgcGVyc2lzdCB0aGUgbGF0dGVyLgotICAgICAgICAgICAgbVBlcnNpc3RlbmNlTWFuYWdlci5yZW1vdmVIaXN0b3JpY2FsUHJpbnRlckFuZFdyaXRlUHJpbnRlckhpc3RvcnkocHJpbnRlcklkKTsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBwcmludGVyIGZyb20gaGlzdG9yeSBhbmQgcGVyc2lzdCB0aGUgbGF0dGVyLgorICAgICAgICBtUGVyc2lzdGVuY2VNYW5hZ2VyLnJlbW92ZUhpc3RvcmljYWxQcmludGVyQW5kV3JpdGVQcmludGVySGlzdG9yeShwcmludGVySWQpOwogCi0gICAgICAgICAgICAvLyBSZWNvbXB1dGUgYW5kIGRlbGl2ZXIgdGhlIHByaW50ZXJzLgotICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbmV3RmF2b3JpdGVQcmludGVycyk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gUmVjb21wdXRlIGFuZCBkZWxpdmVyIHRoZSBwcmludGVycy4KKyAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbmV3RmF2b3JpdGVQcmludGVycywgZ2V0Q3VycmVudExvY2F0aW9uKCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUGVyc2lzdGVuY2VNYW5hZ2VyIHsKQEAgLTMzMywxOCArNTA0LDIyIEBACiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUFJJTlRFUlMgPSAicHJpbnRlcnMiOwogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUFJJTlRFUiA9ICJwcmludGVyIjsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19MT0NBVElPTiA9ICJsb2NhdGlvbiI7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUFJJTlRFUl9JRCA9ICJwcmludGVySWQiOwogCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xPQ0FMX0lEID0gImxvY2FsSWQiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9TRVJWSUNFX05BTUUgPSAic2VydmljZU5hbWUiOwogCisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0xPTkdJVFVERSA9ICJsb25naXR1ZGUiOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9MQVRJVFVERSA9ICJsYXRpdHVkZSI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FDQ1VSQUNZID0gImFjY3VyYWN5IjsKKwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9OQU1FID0gIm5hbWUiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1NUQVRVUyA9ICJzdGF0dXMiOwogCiAgICAgICAgIHByaXZhdGUgZmluYWwgQXRvbWljRmlsZSBtU3RhdGVQZXJzaXN0RmlsZTsKIAotICAgICAgICBwcml2YXRlIExpc3Q8UHJpbnRlckluZm8+IG1IaXN0b3JpY2FsUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgcHJpdmF0ZSBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gbUhpc3RvcmljYWxQcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtUmVhZEhpc3RvcnlDb21wbGV0ZWQ7CiAKQEAgLTM3OCwxMyArNTUzLDEzIEBACiAgICAgICAgICAgICBtUmVhZFRhc2suZXhlY3V0ZU9uRXhlY3V0b3IoQXN5bmNUYXNrLlNFUklBTF9FWEVDVVRPUiwgKFZvaWRbXSkgbnVsbCk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCB1cGRhdGVQcmludGVyc0hpc3RvcmljYWxOYW1lc0lmTmVlZGVkKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUhpc3RvcmljYWxQcmludGVyc0lmTmVlZGVkKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKSB7CiAgICAgICAgICAgICBib29sZWFuIHdyaXRlSGlzdG9yeSA9IGZhbHNlOwogCiAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gcHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmludGVyQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBwcmludGVycy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVIaXN0b3J5IHw9IHJlbmFtZVByaW50ZXJJZk5lZWRlZChwcmludGVyKTsKKyAgICAgICAgICAgICAgICB3cml0ZUhpc3RvcnkgfD0gdXBkYXRlSGlzdG9yaWNhbFByaW50ZXJJZk5lZWRlZChwcmludGVyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHdyaXRlSGlzdG9yeSkgewpAQCAtMzkyLDI1ICs1NjcsNTcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHJlbmFtZVByaW50ZXJJZk5lZWRlZChQcmludGVySW5mbyBwcmludGVyKSB7Ci0gICAgICAgICAgICBib29sZWFuIHJlbmFtZWQgPSBmYWxzZTsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFVwZGF0ZXMgdGhlIGhpc3RvcmljYWwgcHJpbnRlciBzdGF0ZSB3aXRoIHRoZSBnaXZlbiBwcmludGVyLgorICAgICAgICAgKgorICAgICAgICAgKiBAcGFyYW0gcHJpbnRlciB0aGUgcHJpbnRlciB0byB1cGRhdGUKKyAgICAgICAgICoKKyAgICAgICAgICogQHJldHVybiB0cnVlIGlmZiB0aGUgaGlzdG9yaWNhbCBwcmludGVyIGxpc3QgbmVlZHMgdG8gYmUgdXBkYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSGlzdG9yaWNhbFByaW50ZXJJZk5lZWRlZChQcmludGVySW5mbyBwcmludGVyKSB7CisgICAgICAgICAgICBib29sZWFuIHdyaXRlSGlzdG9yeSA9IGZhbHNlOwogICAgICAgICAgICAgZmluYWwgaW50IHByaW50ZXJDb3VudCA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcmludGVyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIGhpc3RvcmljYWxQcmludGVyID0gbUhpc3RvcmljYWxQcmludGVycy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhpc3RvcmljYWxQcmludGVyLmdldElkKCkuZXF1YWxzKHByaW50ZXIuZ2V0SWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmICFUZXh0VXRpbHMuZXF1YWxzKGhpc3RvcmljYWxQcmludGVyLmdldE5hbWUoKSwgcHJpbnRlci5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1IaXN0b3JpY2FsUHJpbnRlcnMuc2V0KGksIHByaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICByZW5hbWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBQcmludGVySW5mbyBoaXN0b3JpY2FsUHJpbnRlciA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuZ2V0KGkpLmZpcnN0OworCisgICAgICAgICAgICAgICAgaWYgKCFoaXN0b3JpY2FsUHJpbnRlci5nZXRJZCgpLmVxdWFscyhwcmludGVyLmdldElkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIE92ZXJ3cml0ZSB0aGUgaGlzdG9yaWNhbCBwcmludGVyIHdpdGggdGhlIHVwZGF0ZWQgcHJpbnRlciBhcyBzb21lIHByb3BlcnRpZXMKKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2VkLiBXZSBpZ25vcmUgdGhlIHN0YXR1cyBhcyB0aGlzIGlzIGEgdm9sYXRpbGUgc3RhdGUuCisgICAgICAgICAgICAgICAgaWYgKGhpc3RvcmljYWxQcmludGVyLmVxdWFsc0lnbm9yaW5nU3RhdHVzKHByaW50ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1IaXN0b3JpY2FsUHJpbnRlcnMuc2V0KGksIG5ldyBQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4ocHJpbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhpc3RvcmljYWxQcmludGVycy5nZXQoaSkuc2Vjb25kKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHBlcnNpc3QgbGltaXRlZCBpbmZvcm1hdGlvbiBpbiB0aGUgcHJpbnRlciBoaXN0b3J5LCBoZW5jZSBjaGVjayBpZgorICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcGVyc2lzdCB0aGUgdXBkYXRlLgorICAgICAgICAgICAgICAgIC8vIEBzZWUgUGVyc2lzdGVuY2VNYW5hZ2VyLldyaXRlVGFzayNkb1dyaXRlUHJpbnRlckhpc3RvcnkKKyAgICAgICAgICAgICAgICBpZiAoIWhpc3RvcmljYWxQcmludGVyLmdldE5hbWUoKS5lcXVhbHMocHJpbnRlci5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3RzLmVxdWFscyhoaXN0b3JpY2FsUHJpbnRlci5nZXREZXNjcmlwdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXIuZ2V0RGVzY3JpcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSGlzdG9yeSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVuYW1lZDsKKyAgICAgICAgICAgIHJldHVybiB3cml0ZUhpc3Rvcnk7CiAgICAgICAgIH0KIAogICAgICAgICBwdWJsaWMgdm9pZCBhZGRQcmludGVyQW5kV3JpdGVQcmludGVySGlzdG9yeShQcmludGVySW5mbyBwcmludGVyKSB7CiAgICAgICAgICAgICBpZiAobUhpc3RvcmljYWxQcmludGVycy5zaXplKCkgPj0gTUFYX0hJU1RPUllfTEVOR1RIKSB7CiAgICAgICAgICAgICAgICAgbUhpc3RvcmljYWxQcmludGVycy5yZW1vdmUoMCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSGlzdG9yaWNhbFByaW50ZXJzLmFkZChwcmludGVyKTsKKworICAgICAgICAgICAgTG9jYXRpb24gbG9jYXRpb24gPSBnZXRDdXJyZW50TG9jYXRpb24oKTsKKyAgICAgICAgICAgIGlmICghaXNMb2NhdGlvbkFjY2VwdGFibGUobG9jYXRpb24pKSB7CisgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBudWxsOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtSGlzdG9yaWNhbFByaW50ZXJzLmFkZChuZXcgUGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+KHByaW50ZXIsIGxvY2F0aW9uKSk7CisKICAgICAgICAgICAgIHdyaXRlUHJpbnRlckhpc3RvcnkoKTsKICAgICAgICAgfQogCkBAIC00MTgsNyArNjI1LDcgQEAKICAgICAgICAgICAgIGJvb2xlYW4gd3JpdGVIaXN0b3J5ID0gZmFsc2U7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gbUhpc3RvcmljYWxQcmludGVycy5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gcHJpbnRlckNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBQcmludGVySW5mbyBoaXN0b3JpY2FsUHJpbnRlciA9IG1IaXN0b3JpY2FsUHJpbnRlcnMuZ2V0KGkpOworICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIGhpc3RvcmljYWxQcmludGVyID0gbUhpc3RvcmljYWxQcmludGVycy5nZXQoaSkuZmlyc3Q7CiAgICAgICAgICAgICAgICAgaWYgKGhpc3RvcmljYWxQcmludGVyLmdldElkKCkuZXF1YWxzKHByaW50ZXJJZCkpIHsKICAgICAgICAgICAgICAgICAgICAgbUhpc3RvcmljYWxQcmludGVycy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlSGlzdG9yeSA9IHRydWU7CkBAIC00MzksNjMgKzY0Niw5MSBAQAogICAgICAgICAgICAgcmV0dXJuIG1MYXN0UmVhZEhpc3RvcnlUaW1lc3RhbXAgIT0gbVN0YXRlUGVyc2lzdEZpbGUuZ2V0QmFzZUZpbGUoKS5sYXN0TW9kaWZpZWQoKTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgTGlzdDxQcmludGVySW5mbz4gY29tcHV0ZUZhdm9yaXRlUHJpbnRlcnMoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMpIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIFNvcnQgdGhlIGZhdm9yaXRlIHByaW50ZXJzIGJ5IHdlaWdodC4gSWYgYSBwcmludGVyIGlzIGluIHRoZSBsaXN0IG11bHRpcGxlIHRpbWVzIGZvcgorICAgICAgICAgKiBkaWZmZXJlbnQgbG9jYXRpb25zLCBhbGwgaW5zdGFuY2VzIGFyZSBjb25zaWRlcmVkIHRvIGhhdmUgdGhlIGFjY3VtdWxhdGl2ZSB3ZWlnaHQuIFRoZQorICAgICAgICAgKiBhY3R1YWwgZmF2b3JpdGUgcHJpbnRlcnMgdG8gZGlzcGxheSBhcmUgY29tcHV0ZWQgaW4ge0BsaW5rICNjb21wdXRlQW5kRGVsaXZlclJlc3VsdH0gYXMKKyAgICAgICAgICogb25seSBhdCB0aGlzIHRpbWUgd2Uga25vdyB0aGUgbG9jYXRpb24gdG8gdXNlIHRvIGRldGVybWluZSBpZiBhIHByaW50ZXIgaXMgY2xvc2UgZW5vdWdoCisgICAgICAgICAqIHRvIGJlIHByZWZlcnJlZC4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIHByaW50ZXJzIFRoZSBwcmludGVycyB0byBzb3J0LgorICAgICAgICAgKiBAcmV0dXJuIFRoZSBzb3J0ZWQgcHJpbnRlcnMuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBzb3J0RmF2b3JpdGVQcmludGVycygKKyAgICAgICAgICAgICAgICBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gcHJpbnRlcnMpIHsKICAgICAgICAgICAgIE1hcDxQcmludGVySWQsIFByaW50ZXJSZWNvcmQ+IHJlY29yZE1hcCA9IG5ldyBBcnJheU1hcDw+KCk7CiAKLSAgICAgICAgICAgIC8vIFJlY29tcHV0ZSB0aGUgd2VpZ2h0cy4KKyAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHdlaWdodHMuCiAgICAgICAgICAgICBmbG9hdCBjdXJyZW50V2VpZ2h0ID0gMS4wZjsKICAgICAgICAgICAgIGZpbmFsIGludCBwcmludGVyQ291bnQgPSBwcmludGVycy5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gcHJpbnRlckNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gcHJpbnRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSB3ZWlnaHQgZm9yIHRoZSBzYW1lIHByaW50ZXIKLSAgICAgICAgICAgICAgICBQcmludGVyUmVjb3JkIHJlY29yZCA9IHJlY29yZE1hcC5nZXQocHJpbnRlci5nZXRJZCgpKTsKKyAgICAgICAgICAgICAgICBQcmludGVySWQgcHJpbnRlcklkID0gcHJpbnRlcnMuZ2V0KGkpLmZpcnN0LmdldElkKCk7CisgICAgICAgICAgICAgICAgUHJpbnRlclJlY29yZCByZWNvcmQgPSByZWNvcmRNYXAuZ2V0KHByaW50ZXJJZCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlY29yZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IG5ldyBQcmludGVyUmVjb3JkKHByaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICByZWNvcmRNYXAucHV0KHByaW50ZXIuZ2V0SWQoKSwgcmVjb3JkKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkID0gbmV3IFByaW50ZXJSZWNvcmQoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVjb3JkTWFwLnB1dChwcmludGVySWQsIHJlY29yZCk7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVjb3JkLnByaW50ZXJzLmFkZChwcmludGVycy5nZXQoaSkpOworCisgICAgICAgICAgICAgICAgLy8gQWdncmVnYXRlIHdlaWdodCBmb3IgdGhlIHNhbWUgcHJpbnRlcgogICAgICAgICAgICAgICAgIHJlY29yZC53ZWlnaHQgKz0gY3VycmVudFdlaWdodDsKICAgICAgICAgICAgICAgICBjdXJyZW50V2VpZ2h0ICo9IFdFSUdIVF9ERUNBWV9DT0VGRklDSUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU29mdCB0aGUgZmF2b3JpdGUgcHJpbnRlcnMuCisgICAgICAgICAgICAvLyBTb3J0IHRoZSBmYXZvcml0ZSBwcmludGVycy4KICAgICAgICAgICAgIExpc3Q8UHJpbnRlclJlY29yZD4gZmF2b3JpdGVSZWNvcmRzID0gbmV3IEFycmF5TGlzdDw+KAogICAgICAgICAgICAgICAgICAgICByZWNvcmRNYXAudmFsdWVzKCkpOwogICAgICAgICAgICAgQ29sbGVjdGlvbnMuc29ydChmYXZvcml0ZVJlY29yZHMpOwogCiAgICAgICAgICAgICAvLyBXcml0ZSB0aGUgZmF2b3JpdGVzIHRvIHRoZSBvdXRwdXQuCi0gICAgICAgICAgICBmaW5hbCBpbnQgZmF2b3JpdGVDb3VudCA9IE1hdGgubWluKGZhdm9yaXRlUmVjb3Jkcy5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgIE1BWF9GQVZPUklURV9QUklOVEVSX0NPVU5UKTsKLSAgICAgICAgICAgIExpc3Q8UHJpbnRlckluZm8+IGZhdm9yaXRlUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4oZmF2b3JpdGVDb3VudCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZhdm9yaXRlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBmYXZvcml0ZVJlY29yZHMuZ2V0KGkpLnByaW50ZXI7Ci0gICAgICAgICAgICAgICAgZmF2b3JpdGVQcmludGVycy5hZGQocHJpbnRlcik7CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVjb3JkQ291bnQgPSBmYXZvcml0ZVJlY29yZHMuc2l6ZSgpOworICAgICAgICAgICAgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IGZhdm9yaXRlUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PD4ocHJpbnRlckNvdW50KTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGZhdm9yaXRlUHJpbnRlcnMuYWRkQWxsKGZhdm9yaXRlUmVjb3Jkcy5nZXQoaSkucHJpbnRlcnMpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gZmF2b3JpdGVQcmludGVyczsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBBIHNldCBvZiBwcmludGVycyB3aXRoIHRoZSBzYW1lIElEIGFuZCB0aGUgd2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCB0aGVtIGR1cmluZworICAgICAgICAgKiB7QGxpbmsgI3NvcnRGYXZvcml0ZVByaW50ZXJzfS4KKyAgICAgICAgICovCiAgICAgICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUHJpbnRlclJlY29yZCBpbXBsZW1lbnRzIENvbXBhcmFibGU8UHJpbnRlclJlY29yZD4gewotICAgICAgICAgICAgcHVibGljIGZpbmFsIFByaW50ZXJJbmZvIHByaW50ZXI7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIFRoZSBwcmludGVycywgYWxsIHdpdGggdGhlIHNhbWUgSUQsIGJ1dCBwb3RlbnRpYWxseSBkaWZmZXJlbnQgcHJvcGVydGllcyBvciBsb2NhdGlvbnMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcHVibGljIGZpbmFsIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBwcmludGVyczsKKworICAgICAgICAgICAgLyoqIFRoZSB3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmludGVycyAqLwogICAgICAgICAgICAgcHVibGljIGZsb2F0IHdlaWdodDsKIAotICAgICAgICAgICAgcHVibGljIFByaW50ZXJSZWNvcmQoUHJpbnRlckluZm8gcHJpbnRlcikgewotICAgICAgICAgICAgICAgIHRoaXMucHJpbnRlciA9IHByaW50ZXI7CisgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAqIENyZWF0ZSBhIG5ldyByZWNvcmQuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHB1YmxpYyBQcmludGVyUmVjb3JkKCkgeworICAgICAgICAgICAgICAgIHByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICogQ29tcGFyZSB0d28gcmVjb3JkcyBieSB3ZWlnaHQuCisgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlVG8oUHJpbnRlclJlY29yZCBhbm90aGVyKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0LmZsb2F0VG9JbnRCaXRzKGFub3RoZXIud2VpZ2h0KSAtIEZsb2F0LmZsb2F0VG9JbnRCaXRzKHdlaWdodCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFJlYWRUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIExpc3Q8UHJpbnRlckluZm8+PiB7CisgICAgICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUmVhZFRhc2sKKyAgICAgICAgICAgICAgICBleHRlbmRzIEFzeW5jVGFzazxWb2lkLCBWb2lkLCBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4+IHsKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHJvdGVjdGVkIExpc3Q8UHJpbnRlckluZm8+IGRvSW5CYWNrZ3JvdW5kKFZvaWQuLi4gYXJncykgeworICAgICAgICAgICAgcHJvdGVjdGVkIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBkb0luQmFja2dyb3VuZChWb2lkLi4uIGFyZ3MpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkb1JlYWRQcmludGVySGlzdG9yeSgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoTGlzdDxQcmludGVySW5mbz4gcHJpbnRlcnMpIHsKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uUG9zdEV4ZWN1dGUoTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IHByaW50ZXJzKSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgICAgIExvZy5pKExPR19UQUcsICJyZWFkIGhpc3RvcnkgY29tcGxldGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEZ1c2VkUHJpbnRlcnNQcm92aWRlci50aGlzLmhhc2hDb2RlKCkpOwpAQCAtNTE4LDcgKzc1Myw4IEBACiAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gcHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBwcmludGVyQ291bnQgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIHByaW50ZXJTZXJ2aWNlTmFtZSA9IHByaW50ZXJzLmdldChpKS5nZXRJZCgpLmdldFNlcnZpY2VOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgcHJpbnRlclNlcnZpY2VOYW1lID0gcHJpbnRlcnMuZ2V0KGkpLmZpcnN0LmdldElkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U2VydmljZU5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmFibGVkQ29tcG9uZW50cy5jb250YWlucyhwcmludGVyU2VydmljZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGVycy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUyOSwxMiArNzY1LDEzIEBACiAKICAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBmYXZvcml0ZSBwcmludGVycy4KICAgICAgICAgICAgICAgICBtRmF2b3JpdGVQcmludGVycy5jbGVhcigpOwotICAgICAgICAgICAgICAgIG1GYXZvcml0ZVByaW50ZXJzLmFkZEFsbChjb21wdXRlRmF2b3JpdGVQcmludGVycyhtSGlzdG9yaWNhbFByaW50ZXJzKSk7CisgICAgICAgICAgICAgICAgbUZhdm9yaXRlUHJpbnRlcnMuYWRkQWxsKHNvcnRGYXZvcml0ZVByaW50ZXJzKG1IaXN0b3JpY2FsUHJpbnRlcnMpKTsKIAogICAgICAgICAgICAgICAgIG1SZWFkSGlzdG9yeUNvbXBsZXRlZCA9IHRydWU7CiAKICAgICAgICAgICAgICAgICAvLyBEZWxpdmVyIHRoZSBwcmludGVycy4KLSAgICAgICAgICAgICAgICB1cGRhdGVQcmludGVycyhtRGlzY292ZXJ5U2Vzc2lvbi5nZXRQcmludGVycygpLCBtRmF2b3JpdGVQcmludGVycyk7CisgICAgICAgICAgICAgICAgdXBkYXRlUHJpbnRlcnMobURpc2NvdmVyeVNlc3Npb24uZ2V0UHJpbnRlcnMoKSwgbUZhdm9yaXRlUHJpbnRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50TG9jYXRpb24oKSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9uZS4KICAgICAgICAgICAgICAgICBtUmVhZFRhc2sgPSBudWxsOwpAQCAtNTQ0LDEyICs3ODEsMTIgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNhbmNlbGxlZChMaXN0PFByaW50ZXJJbmZvPiBwcmludGVySW5mb3MpIHsKKyAgICAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uQ2FuY2VsbGVkKExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBwcmludGVySW5mb3MpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9uZS4KICAgICAgICAgICAgICAgICBtUmVhZFRhc2sgPSBudWxsOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcml2YXRlIExpc3Q8UHJpbnRlckluZm8+IGRvUmVhZFByaW50ZXJIaXN0b3J5KCkgeworICAgICAgICAgICAgcHJpdmF0ZSBMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gZG9SZWFkUHJpbnRlckhpc3RvcnkoKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgRmlsZUlucHV0U3RyZWFtIGluOwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGluID0gbVN0YXRlUGVyc2lzdEZpbGUub3BlblJlYWQoKTsKQEAgLTU2MSw3ICs3OTgsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICAgICAgICAgIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBwcmludGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IFhtbC5uZXdQdWxsUGFyc2VyKCk7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5zZXRJbnB1dChpbiwgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOC5uYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVN0YXRlKHBhcnNlciwgcHJpbnRlcnMpOwpAQCAtNTgyLDggKzgxOSw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcml2YXRlIHZvaWQgcGFyc2VTdGF0ZShYbWxQdWxsUGFyc2VyIHBhcnNlciwgTGlzdDxQcmludGVySW5mbz4gb3V0UHJpbnRlcnMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CisgICAgICAgICAgICBwcml2YXRlIHZvaWQgcGFyc2VTdGF0ZShYbWxQdWxsUGFyc2VyIHBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+IG91dFByaW50ZXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgcGFyc2VyLm5leHQoKTsKICAgICAgICAgICAgICAgICBza2lwRW1wdHlUZXh0VGFncyhwYXJzZXIpOwogICAgICAgICAgICAgICAgIGV4cGVjdChwYXJzZXIsIFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHLCBUQUdfUFJJTlRFUlMpOwpAQCAtNjAxLDggKzgzOSw5IEBACiAgICAgICAgICAgICAgICAgZXhwZWN0KHBhcnNlciwgWG1sUHVsbFBhcnNlci5FTkRfVEFHLCBUQUdfUFJJTlRFUlMpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gcGFyc2VQcmludGVyKFhtbFB1bGxQYXJzZXIgcGFyc2VyLCBMaXN0PFByaW50ZXJJbmZvPiBvdXRQcmludGVycykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBwYXJzZVByaW50ZXIoWG1sUHVsbFBhcnNlciBwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgIExpc3Q8UGFpcjxQcmludGVySW5mbywgTG9jYXRpb24+PiBvdXRQcmludGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gewogICAgICAgICAgICAgICAgIHNraXBFbXB0eVRleHRUYWdzKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHQocGFyc2VyLCBYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRywgVEFHX1BSSU5URVIpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYxMCw3ICs4NDksNiBAQAogCiAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9OQU1FKTsKICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9ERVNDUklQVElPTik7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IEludGVnZXIucGFyc2VJbnQocGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfU1RBVFVTKSk7CiAKICAgICAgICAgICAgICAgICBwYXJzZXIubmV4dCgpOwogCkBAIC02MjUsMTEgKzg2MywzNCBAQAogICAgICAgICAgICAgICAgIGV4cGVjdChwYXJzZXIsIFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgVEFHX1BSSU5URVJfSUQpOwogICAgICAgICAgICAgICAgIHBhcnNlci5uZXh0KCk7CiAKLSAgICAgICAgICAgICAgICBQcmludGVySW5mby5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJpbnRlckluZm8uQnVpbGRlcihwcmludGVySWQsIG5hbWUsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgc2tpcEVtcHR5VGV4dFRhZ3MocGFyc2VyKTsKKyAgICAgICAgICAgICAgICBMb2NhdGlvbiBsb2NhdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXB0KHBhcnNlciwgWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcsIFRBR19MT0NBVElPTikpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24gPSBuZXcgTG9jYXRpb24oIiIpOworICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5zZXRMb25naXR1ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlLnBhcnNlRG91YmxlKHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX0xPTkdJVFVERSkpKTsKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uc2V0TGF0aXR1ZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlLnBhcnNlRG91YmxlKHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX0xBVElUVURFKSkpOworICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5zZXRBY2N1cmFjeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5wYXJzZUZsb2F0KHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX0FDQ1VSQUNZKSkpOworICAgICAgICAgICAgICAgICAgICBwYXJzZXIubmV4dCgpOworCisgICAgICAgICAgICAgICAgICAgIHNraXBFbXB0eVRleHRUYWdzKHBhcnNlcik7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXJzZXIsIFhtbFB1bGxQYXJzZXIuRU5EX1RBRywgVEFHX0xPQ0FUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLm5leHQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByaW50ZXIgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIG9uZSByZWFkIGZyb20gdGhlCisgICAgICAgICAgICAgICAgLy8gZGlzY292ZXJ5IHNlc3Npb24sIGhlbmNlIHRoZSBvbmx5IHRpbWUgd2hlbiB0aGlzIG9iamVjdCBpcyB1c2VkIGlzIHdoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gcHJpbnRlciBpcyB1bmF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICBQcmludGVySW5mby5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJpbnRlckluZm8uQnVpbGRlcihwcmludGVySWQsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBQcmludGVySW5mby5TVEFUVVNfVU5BVkFJTEFCTEUpOwogICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBidWlsZGVyLmJ1aWxkKCk7CiAKLSAgICAgICAgICAgICAgICBvdXRQcmludGVycy5hZGQocHJpbnRlcik7CisgICAgICAgICAgICAgICAgb3V0UHJpbnRlcnMuYWRkKG5ldyBQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4ocHJpbnRlciwgbG9jYXRpb24pKTsKIAogICAgICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgICAgICBMb2cuaShMT0dfVEFHLCAiW1JFU1RPUkVEXSAiICsgcHJpbnRlcik7CkBAIC02NDIsNyArOTAzLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGV4cGVjdChYbWxQdWxsUGFyc2VyIHBhcnNlciwgaW50IHR5cGUsIFN0cmluZyB0YWcpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdChwYXJzZXIsIHR5cGUsIHRhZykpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24oIkV4ZXBlY3RlZCBldmVudDogIiArIHR5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYW5kIHRhZzogIiArIHRhZyArICIgYnV0IGdvdCBldmVudDogIiArIHBhcnNlci5nZXRFdmVudFR5cGUoKQpAQCAtNjU5LDcgKzkyMCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBhY2NlcHQoWG1sUHVsbFBhcnNlciBwYXJzZXIsIGludCB0eXBlLCBTdHJpbmcgdGFnKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcnNlci5nZXRFdmVudFR5cGUoKSAhPSB0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC02NzQsMTQgKzkzNSwxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBXcml0ZVRhc2sgZXh0ZW5kcyBBc3luY1Rhc2s8TGlzdDxQcmludGVySW5mbz4sIFZvaWQsIFZvaWQ+IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBXcml0ZVRhc2sKKyAgICAgICAgICAgICAgICBleHRlbmRzIEFzeW5jVGFzazxMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4sIFZvaWQsIFZvaWQ+IHsKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHJvdGVjdGVkIFZvaWQgZG9JbkJhY2tncm91bmQoTGlzdDxQcmludGVySW5mbz4uLi4gcHJpbnRlcnMpIHsKKyAgICAgICAgICAgIHByb3RlY3RlZCBWb2lkIGRvSW5CYWNrZ3JvdW5kKAorICAgICAgICAgICAgICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgTGlzdDxQYWlyPFByaW50ZXJJbmZvLCBMb2NhdGlvbj4+Li4uIHByaW50ZXJzKSB7CiAgICAgICAgICAgICAgICAgZG9Xcml0ZVByaW50ZXJIaXN0b3J5KHByaW50ZXJzWzBdKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGRvV3JpdGVQcmludGVySGlzdG9yeShMaXN0PFByaW50ZXJJbmZvPiBwcmludGVycykgeworICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGRvV3JpdGVQcmludGVySGlzdG9yeShMaXN0PFBhaXI8UHJpbnRlckluZm8sIExvY2F0aW9uPj4gcHJpbnRlcnMpIHsKICAgICAgICAgICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dCA9IG51bGw7CiAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgb3V0ID0gbVN0YXRlUGVyc2lzdEZpbGUuc3RhcnRXcml0ZSgpOwpAQCAtNjkzLDE0ICs5NTYsMTEgQEAKIAogICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcHJpbnRlckNvdW50ID0gcHJpbnRlcnMuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByaW50ZXJDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gcHJpbnRlcnMuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gcHJpbnRlciA9IHByaW50ZXJzLmdldChpKS5maXJzdDsKIAogICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5zdGFydFRhZyhudWxsLCBUQUdfUFJJTlRFUik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfTkFNRSwgcHJpbnRlci5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlzdG9yaWNhbCBwcmludGVycyBhcmUgYWx3YXlzIHN0b3JlZCBhcyB1bmF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfU1RBVFVTLCBTdHJpbmcudmFsdWVPZigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckluZm8uU1RBVFVTX1VOQVZBSUxBQkxFKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBwcmludGVyLmdldERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfREVTQ1JJUFRJT04sIGRlc2NyaXB0aW9uKTsKQEAgLTcxMyw2ICs5NzMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZsYXR0ZW5Ub1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuZW5kVGFnKG51bGwsIFRBR19QUklOVEVSX0lEKTsKIAorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gbG9jYXRpb24gPSBwcmludGVycy5nZXQoaSkuc2Vjb25kOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLnN0YXJ0VGFnKG51bGwsIFRBR19MT0NBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5hdHRyaWJ1dGUobnVsbCwgQVRUUl9MT05HSVRVREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihsb2NhdGlvbi5nZXRMb25naXR1ZGUoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfTEFUSVRVREUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihsb2NhdGlvbi5nZXRMYXRpdHVkZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXplci5hdHRyaWJ1dGUobnVsbCwgQVRUUl9BQ0NVUkFDWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKGxvY2F0aW9uLmdldEFjY3VyYWN5KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmVuZFRhZyhudWxsLCBUQUdfTE9DQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmVuZFRhZyhudWxsLCBUQUdfUFJJTlRFUik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUGFnZUFkYXB0ZXIuamF2YSBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1BhZ2VBZGFwdGVyLmphdmEKaW5kZXggMjc1N2I4MS4uNjA2ZjRlYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1BhZ2VBZGFwdGVyLmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUGFnZUFkYXB0ZXIuamF2YQpAQCAtNTIsNyArNTIsNyBAQAogLyoqCiAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgdGhlIGFkYXB0ZXIgZm9yIHRoZSBwYWdlcyBpbiB0aGUgcHJpbnQgcHJldmlldyBsaXN0LgogICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUGFnZUFkYXB0ZXIgZXh0ZW5kcyBBZGFwdGVyIHsKK3B1YmxpYyBmaW5hbCBjbGFzcyBQYWdlQWRhcHRlciBleHRlbmRzIEFkYXB0ZXI8Vmlld0hvbGRlcj4gewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfVEFHID0gIlBhZ2VBZGFwdGVyIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfUFJFVklFV19QQUdFU19CQVRDSCA9IDUwOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAgICAgICAgICAgICAgICAgLSBob3Jpem9udGFsUGFkZGluZ0FuZE1hcmdpbnMpIC8gY29sdW1uQ291bnQpICsgMC41Zik7CiAKICAgICAgICAgLy8gQ29tcHV0ZSBtYXggcGFnZSBoZWlnaHQuCi0gICAgICAgIGZpbmFsIGludCBwYWdlQ29udGVudERlc2lyZWRIZWlnaHQgPSAoaW50KSAoKChmbG9hdCkgcGFnZUNvbnRlbnREZXNpcmVkV2lkdGgKKyAgICAgICAgZmluYWwgaW50IHBhZ2VDb250ZW50RGVzaXJlZEhlaWdodCA9IChpbnQpICgocGFnZUNvbnRlbnREZXNpcmVkV2lkdGgKICAgICAgICAgICAgICAgICAvIHBhZ2VBc3BlY3RSYXRpbykgKyAwLjVmKTsKIAogICAgICAgICAvLyBJZiB0aGUgcGFnZSBkb2VzIG5vdCBmaXQgZW50aXJlbHkgaW4gYSB2ZXJ0aWNhbCBkaXJlY3Rpb24sCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludEFjdGl2aXR5LmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludEFjdGl2aXR5LmphdmEKaW5kZXggNjUyMTU2NS4uOWMxY2Y2NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1ByaW50QWN0aXZpdHkuamF2YQpAQCAtMzAsNyArMzAsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzLk9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CkBAIC00NjIsNiArNDYxLDcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uVXBkYXRlQ2FuY2VsZWQoKSB7CiAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgTG9nLmkoTE9HX1RBRywgIm9uVXBkYXRlQ2FuY2VsZWQoKSIpOwpAQCAtMTczOCw4ICsxNzM4LDkgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGFnZVJhbmdlT3B0aW9ucyhpbnQgcGFnZUNvdW50KSB7CisgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgICAgICBBcnJheUFkYXB0ZXI8U3Bpbm5lckl0ZW08SW50ZWdlcj4+IHJhbmdlT3B0aW9uc1NwaW5uZXJBZGFwdGVyID0KLSAgICAgICAgICAgICAgICAoQXJyYXlBZGFwdGVyKSBtUmFuZ2VPcHRpb25zU3Bpbm5lci5nZXRBZGFwdGVyKCk7CisgICAgICAgICAgICAgICAgKEFycmF5QWRhcHRlcjxTcGlubmVySXRlbTxJbnRlZ2VyPj4pIG1SYW5nZU9wdGlvbnNTcGlubmVyLmdldEFkYXB0ZXIoKTsKICAgICAgICAgcmFuZ2VPcHRpb25zU3Bpbm5lckFkYXB0ZXIuY2xlYXIoKTsKIAogICAgICAgICBmaW5hbCBpbnRbXSByYW5nZU9wdGlvbnNWYWx1ZXMgPSBnZXRSZXNvdXJjZXMoKS5nZXRJbnRBcnJheSgKQEAgLTE5MjgsNiArMTkyOSw3IEBACiAgICAgICAgICAgICB0aGlzLmxhYmVsID0gbGFiZWw7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKICAgICAgICAgICAgIHJldHVybiBsYWJlbC50b1N0cmluZygpOwogICAgICAgICB9CkBAIC0yMTg3LDcgKzIxODksNyBAQAogICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSAwICYmIGdldFBkZlByaW50ZXIoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFByaW50ZXJIb2xkZXIgcHJpbnRlckhvbGRlciA9IChQcmludGVySG9sZGVyKSBnZXRJdGVtKHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBwcmludGVySG9sZGVyLnByaW50ZXIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBpY29uID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19tZW51X3NhdmV0b3BkZik7CisgICAgICAgICAgICAgICAgICAgIGljb24gPSBnZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX21lbnVfc2F2ZXRvcGRmLCBudWxsKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uID09IDEpIHsKICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcuYWxsX3ByaW50ZXJzKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTk1LDIwICsyMTk3LDE2IEBACiAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IDEgJiYgZ2V0UGRmUHJpbnRlcigpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgUHJpbnRlckhvbGRlciBwcmludGVySG9sZGVyID0gKFByaW50ZXJIb2xkZXIpIGdldEl0ZW0ocG9zaXRpb24pOwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHByaW50ZXJIb2xkZXIucHJpbnRlci5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGljb24gPSBnZXRSZXNvdXJjZXMoKS5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX21lbnVfc2F2ZXRvcGRmKTsKKyAgICAgICAgICAgICAgICAgICAgaWNvbiA9IGdldFJlc291cmNlcygpLmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfbWVudV9zYXZldG9wZGYsIG51bGwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPT0gZ2V0Q291bnQoKSAtIDEpIHsKICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcuYWxsX3ByaW50ZXJzKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBQcmludGVySG9sZGVyIHByaW50ZXJIb2xkZXIgPSAoUHJpbnRlckhvbGRlcikgZ2V0SXRlbShwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcHJpbnRlckhvbGRlci5wcmludGVyLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlckhvbGRlci5wcmludGVyLmdldElkKCkuZ2V0U2VydmljZU5hbWUoKS5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvLmxvYWRMYWJlbChnZXRQYWNrYWdlTWFuYWdlcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGljb24gPSBwYWNrYWdlSW5mby5hcHBsaWNhdGlvbkluZm8ubG9hZEljb24oZ2V0UGFja2FnZU1hbmFnZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBubmZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBpZ25vcmUgKi8KLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBQcmludGVySW5mbyBwcmludEluZm8gPSBwcmludGVySG9sZGVyLnByaW50ZXI7CisKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBwcmludEluZm8uZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgICAgICBpY29uID0gcHJpbnRJbmZvLmxvYWRJY29uKFByaW50QWN0aXZpdHkudGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcHJpbnRJbmZvLmdldERlc2NyaXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludFByZXZpZXdDb250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91aS9QcmludFByZXZpZXdDb250cm9sbGVyLmphdmEKaW5kZXggODcxNmZkMi4uY2U1NDIwNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvUHJpbnRQcmV2aWV3Q29udHJvbGxlci5qYXZhCisrKyBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1ByaW50UHJldmlld0NvbnRyb2xsZXIuamF2YQpAQCAtNzgsOCArNzgsOCBAQAogICAgICAgICBtUmVjeWNsZXJWaWV3LnNldExheW91dE1hbmFnZXIobUxheW91dE1hbmdlcik7CiAgICAgICAgIG1SZWN5Y2xlclZpZXcuc2V0QWRhcHRlcihtUGFnZUFkYXB0ZXIpOwogICAgICAgICBtUmVjeWNsZXJWaWV3LnNldEl0ZW1WaWV3Q2FjaGVTaXplKDApOwotICAgICAgICBtUHJlbG9hZENvbnRyb2xsZXIgPSBuZXcgUHJlbG9hZENvbnRyb2xsZXIobVJlY3ljbGVyVmlldyk7Ci0gICAgICAgIG1SZWN5Y2xlclZpZXcuc2V0T25TY3JvbGxMaXN0ZW5lcihtUHJlbG9hZENvbnRyb2xsZXIpOworICAgICAgICBtUHJlbG9hZENvbnRyb2xsZXIgPSBuZXcgUHJlbG9hZENvbnRyb2xsZXIoKTsKKyAgICAgICAgbVJlY3ljbGVyVmlldy5hZGRPblNjcm9sbExpc3RlbmVyKG1QcmVsb2FkQ29udHJvbGxlcik7CiAKICAgICAgICAgbUNvbnRlbnRWaWV3ID0gKFByaW50Q29udGVudFZpZXcpIGFjdGl2aXR5LmZpbmRWaWV3QnlJZChSLmlkLm9wdGlvbnNfY29udGVudCk7CiAgICAgICAgIG1FbWJlZGRlZENvbnRlbnRDb250YWluZXIgPSAoRW1iZWRkZWRDb250ZW50Q29udGFpbmVyKSBhY3Rpdml0eS5maW5kVmlld0J5SWQoCkBAIC0zMTQsMTIgKzMxNCw5IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBQcmVsb2FkQ29udHJvbGxlciBleHRlbmRzIFJlY3ljbGVyVmlldy5PblNjcm9sbExpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBSZWN5Y2xlclZpZXcgbVJlY3ljbGVyVmlldzsKLQogICAgICAgICBwcml2YXRlIGludCBtT2xkU2Nyb2xsU3RhdGU7CiAKLSAgICAgICAgcHVibGljIFByZWxvYWRDb250cm9sbGVyKFJlY3ljbGVyVmlldyByZWN5Y2xlclZpZXcpIHsKLSAgICAgICAgICAgIG1SZWN5Y2xlclZpZXcgPSByZWN5Y2xlclZpZXc7CisgICAgICAgIHB1YmxpYyBQcmVsb2FkQ29udHJvbGxlcigpIHsKICAgICAgICAgICAgIG1PbGRTY3JvbGxTdGF0ZSA9IG1SZWN5Y2xlclZpZXcuZ2V0U2Nyb2xsU3RhdGUoKTsKICAgICAgICAgfQogCkBAIC0zNzEsNyArMzY4LDggQEAKICAgICAgICAgICAgICAgICBWaWV3IGxhc3RDaGlsZCA9IGxheW91dE1hbmFnZXIuZ2V0Q2hpbGRBdChsYXlvdXRNYW5hZ2VyLmdldENoaWxkQ291bnQoKSAtIDEpOwogICAgICAgICAgICAgICAgIFZpZXdIb2xkZXIgbGFzdEhvbGRlciA9IG1SZWN5Y2xlclZpZXcuZ2V0Q2hpbGRWaWV3SG9sZGVyKGxhc3RDaGlsZCk7CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VSYW5nZShmaXJzdEhvbGRlci5nZXRQb3NpdGlvbigpLCBsYXN0SG9sZGVyLmdldFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZVJhbmdlKGZpcnN0SG9sZGVyLmdldExheW91dFBvc2l0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0SG9sZGVyLmdldExheW91dFBvc2l0aW9uKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3VpL1NlbGVjdFByaW50ZXJBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvU2VsZWN0UHJpbnRlckFjdGl2aXR5LmphdmEKaW5kZXggYWIwYjJmMS4uMTMxMDVhYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvU2VsZWN0UHJpbnRlckFjdGl2aXR5LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdWkvU2VsZWN0UHJpbnRlckFjdGl2aXR5LmphdmEKQEAgLTI3LDYgKzI3LDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudFNlbmRlci5TZW5kSW50ZW50RXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKQEAgLTUxLDYgKzUyLDcgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25DbGlja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CkBAIC02Myw3ICs2NSw5IEBACiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuU2VhcmNoVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuUGFja2FnZU1vbml0b3I7CiBpbXBvcnQgY29tLmFuZHJvaWQucHJpbnRzcG9vbGVyLlI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtOTksNyArMTAzLDggQEAKICAgICBwcml2YXRlIEFubm91bmNlRmlsdGVyUmVzdWx0IG1Bbm5vdW5jZUZpbHRlclJlc3VsdDsKIAogICAgIC8qKiBNb25pdG9yIGlmIG5ldyBwcmludCBzZXJ2aWNlcyBnZXQgZW5hYmxlZCBvciBkaXNhYmxlZCAqLwotICAgIHByaXZhdGUgQ29udGVudE9ic2VydmVyIG1QcmludFNlcnZpY2VzT2JzZXJ2ZXI7CisgICAgcHJpdmF0ZSBDb250ZW50T2JzZXJ2ZXIgbVByaW50U2VydmljZXNEaXNhYmxlZE9ic2VydmVyOworICAgIHByaXZhdGUgUGFja2FnZU1vbml0b3IgbVBhY2thZ2VPYnNlcnZlcjsKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKQEAgLTE0Myw2ICsxNDgsMTQgQEAKICAgICAgICAgfSk7CiAKICAgICAgICAgcmVnaXN0ZXJGb3JDb250ZXh0TWVudShtTGlzdFZpZXcpOworCisgICAgICAgIC8vIERpc3BsYXkgYSBub3RpZmljYXRpb24gYWJvdXQgZGlzYWJsZWQgc2VydmljZXMgaWYgdGhlcmUgYXJlIGRpc2FibGVkIHNlcnZpY2VzCisgICAgICAgIFN0cmluZyBkaXNhYmxlZFNlcnZpY2VzU2V0dGluZyA9IFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmcoZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkRJU0FCTEVEX1BSSU5UX1NFUlZJQ0VTKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShkaXNhYmxlZFNlcnZpY2VzU2V0dGluZykpIHsKKyAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KHRoaXMsIGdldFN0cmluZyhSLnN0cmluZy5wcmludF9zZXJ2aWNlc19kaXNhYmxlZF90b2FzdCksCisgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9MT05HKS5zaG93KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTI0MywyOCArMjU2LDQ1IEBACiAgICAgICogUmVnaXN0ZXIgbGlzdGVuZXIgZm9yIGNoYW5nZXMgdG8gdGhlIGVuYWJsZWQgcHJpbnQgc2VydmljZXMuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyU2VydmljZU1vbml0b3IoKSB7Ci0gICAgICAgIG1QcmludFNlcnZpY2VzT2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKG5ldyBIYW5kbGVyKCkpIHsKKyAgICAgICAgLy8gTGlzdGVuIGZvciBzZXJ2aWNlcyBnZXR0aW5nIGRpc2FibGVkCisgICAgICAgIG1QcmludFNlcnZpY2VzRGlzYWJsZWRPYnNlcnZlciA9IG5ldyBDb250ZW50T2JzZXJ2ZXIobmV3IEhhbmRsZXIoKSkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKICAgICAgICAgICAgICAgICBvblByaW50U2VydmljZXNVcGRhdGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKIAorICAgICAgICAvLyBMaXN0ZW4gZm9yIHNlcnZpY2VzIGdldHRpbmcgaW5zdGFsbGVkIG9yIHVuaW5zdGFsbGVkCisgICAgICAgIG1QYWNrYWdlT2JzZXJ2ZXIgPSBuZXcgUGFja2FnZU1vbml0b3IoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZU1vZGlmaWVkKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICAgICAgICAgIG9uUHJpbnRTZXJ2aWNlc1VwZGF0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZVJlbW92ZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkKSB7CisgICAgICAgICAgICAgICAgb25QcmludFNlcnZpY2VzVXBkYXRlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25QYWNrYWdlQWRkZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkKSB7CisgICAgICAgICAgICAgICAgb25QcmludFNlcnZpY2VzVXBkYXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKICAgICAgICAgZ2V0Q29udGVudFJlc29sdmVyKCkucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIoCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcihTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUyksIGZhbHNlLAotICAgICAgICAgICAgICAgIG1QcmludFNlcnZpY2VzT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5nZXRVcmlGb3IoU2V0dGluZ3MuU2VjdXJlLkRJU0FCTEVEX1BSSU5UX1NFUlZJQ0VTKSwgZmFsc2UsCisgICAgICAgICAgICAgICAgbVByaW50U2VydmljZXNEaXNhYmxlZE9ic2VydmVyKTsKKworICAgICAgICBtUGFja2FnZU9ic2VydmVyLnJlZ2lzdGVyKHRoaXMsIGdldE1haW5Mb29wZXIoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFVucmVnaXN0ZXIge0BsaW5rICNtUHJpbnRTZXJ2aWNlc09ic2VydmVyIGxpc3RlbmVyIGZvciBjaGFuZ2VzIHRvIHRoZSBlbmFibGVkIHByaW50IHNlcnZpY2VzfQotICAgICAqIG9yIG5vdGhpbmcgaWYgdGhlIGxpc3RlbmVyIGlzIG5vdCByZWdpc3RlcmVkLgorICAgICAqIFVucmVnaXN0ZXIgdGhlIGxpc3RlbmVycyBmb3IgY2hhbmdlcyB0byB0aGUgZW5hYmxlZCBwcmludCBzZXJ2aWNlcy4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlclNlcnZpY2VNb25pdG9ySWZOZWVkZWQoKSB7Ci0gICAgICAgIGlmIChtUHJpbnRTZXJ2aWNlc09ic2VydmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGdldENvbnRlbnRSZXNvbHZlcigpLnVucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIobVByaW50U2VydmljZXNPYnNlcnZlcik7Ci0KLSAgICAgICAgICAgIG1QcmludFNlcnZpY2VzT2JzZXJ2ZXIgPSBudWxsOwotICAgICAgICB9CisgICAgICAgIGdldENvbnRlbnRSZXNvbHZlcigpLnVucmVnaXN0ZXJDb250ZW50T2JzZXJ2ZXIobVByaW50U2VydmljZXNEaXNhYmxlZE9ic2VydmVyKTsKKyAgICAgICAgbVBhY2thZ2VPYnNlcnZlci51bnJlZ2lzdGVyKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01ODcsMjAgKzYxNywzMSBAQAogCiAgICAgICAgICAgICBjb252ZXJ0Vmlldy5zZXRFbmFibGVkKGlzQWN0aW9uYWJsZShwb3NpdGlvbikpOwogCi0gICAgICAgICAgICBQcmludGVySW5mbyBwcmludGVyID0gKFByaW50ZXJJbmZvKSBnZXRJdGVtKHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGZpbmFsIFByaW50ZXJJbmZvIHByaW50ZXIgPSAoUHJpbnRlckluZm8pIGdldEl0ZW0ocG9zaXRpb24pOwogCiAgICAgICAgICAgICBDaGFyU2VxdWVuY2UgdGl0bGUgPSBwcmludGVyLmdldE5hbWUoKTsKLSAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBzdWJ0aXRsZSA9IG51bGw7Ci0gICAgICAgICAgICBEcmF3YWJsZSBpY29uID0gbnVsbDsKKyAgICAgICAgICAgIERyYXdhYmxlIGljb24gPSBwcmludGVyLmxvYWRJY29uKFNlbGVjdFByaW50ZXJBY3Rpdml0eS50aGlzKTsKIAorICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHByaW50U2VydmljZUxhYmVsOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IGdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgICAgUGFja2FnZUluZm8gcGFja2FnZUluZm8gPSBwbS5nZXRQYWNrYWdlSW5mbyhwcmludGVyLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlTmFtZSgpLmdldFBhY2thZ2VOYW1lKCksIDApOwotICAgICAgICAgICAgICAgIHN1YnRpdGxlID0gcGFja2FnZUluZm8uYXBwbGljYXRpb25JbmZvLmxvYWRMYWJlbChwbSk7Ci0gICAgICAgICAgICAgICAgaWNvbiA9IHBhY2thZ2VJbmZvLmFwcGxpY2F0aW9uSW5mby5sb2FkSWNvbihwbSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gbm5mZSkgewotICAgICAgICAgICAgICAgIC8qIGlnbm9yZSAqLworICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBhY2thZ2VJbmZvID0gZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZXIuZ2V0SWQoKS5nZXRTZXJ2aWNlTmFtZSgpLmdldFBhY2thZ2VOYW1lKCksIDApOworCisgICAgICAgICAgICAgICAgcHJpbnRTZXJ2aWNlTGFiZWwgPSBwYWNrYWdlSW5mby5hcHBsaWNhdGlvbkluZm8ubG9hZExhYmVsKGdldFBhY2thZ2VNYW5hZ2VyKCkpOworICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBwcmludFNlcnZpY2VMYWJlbCA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENoYXJTZXF1ZW5jZSBkZXNjcmlwdGlvbiA9IHByaW50ZXIuZ2V0RGVzY3JpcHRpb24oKTsKKworICAgICAgICAgICAgQ2hhclNlcXVlbmNlIHN1YnRpdGxlOworICAgICAgICAgICAgaWYgKHByaW50U2VydmljZUxhYmVsID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IGRlc2NyaXB0aW9uOworICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwcmludFNlcnZpY2VMYWJlbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJpbnRlcl9leHRlbmRlZF9kZXNjcmlwdGlvbl90ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50U2VydmljZUxhYmVsLCBkZXNjcmlwdGlvbik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFRleHRWaWV3IHRpdGxlVmlldyA9IChUZXh0VmlldykgY29udmVydFZpZXcuZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpOwpAQCAtNjE1LDYgKzY1NiwyMCBAQAogICAgICAgICAgICAgICAgIHN1YnRpdGxlVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEltYWdlVmlldyBtb3JlSW5mb1ZpZXcgPSAoSW1hZ2VWaWV3KSBjb252ZXJ0Vmlldy5maW5kVmlld0J5SWQoUi5pZC5tb3JlX2luZm8pOworICAgICAgICAgICAgaWYgKHByaW50ZXIuZ2V0SW5mb0ludGVudCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtb3JlSW5mb1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgICAgIG1vcmVJbmZvVmlldy5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW50ZW50U2VuZGVyKHByaW50ZXIuZ2V0SW5mb0ludGVudCgpLmdldEludGVudFNlbmRlcigpLCBudWxsLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFNlbmRJbnRlbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lKExPR19UQUcsICJDb3VsZCBub3QgZXhlY3V0ZSBwZW5kaW5nIGluZm8gaW50ZW50OiAlcyIsIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEltYWdlVmlldyBpY29uVmlldyA9IChJbWFnZVZpZXcpIGNvbnZlcnRWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmljb24pOwogICAgICAgICAgICAgaWYgKGljb24gIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdXRpbC9BcHByb3ZlZFByaW50U2VydmljZXMuamF2YSBiL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3V0aWwvQXBwcm92ZWRQcmludFNlcnZpY2VzLmphdmEKaW5kZXggZGQxMDU2Ny4uZjc4MTE1OSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvdXRpbC9BcHByb3ZlZFByaW50U2VydmljZXMuamF2YQorKysgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci91dGlsL0FwcHJvdmVkUHJpbnRTZXJ2aWNlcy5qYXZhCkBAIC0yMyw2ICsyMyw3IEBACiBpbXBvcnQgYW5kcm9pZC5wcmludHNlcnZpY2UuUHJpbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKIAoraW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIC8qKgpAQCAtMTI2LDI5ICsxMjcsMzIgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBJZiBhIHtAbGluayBQcmludFNlcnZpY2V9IGlzIGFwcHJvdmVkLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBhcHByb3ZlZCBzZXJ2aWNlcy4KKyAgICAgKiBSZW1vdmUgYWxsIGFwcHJvdmVkIHtAbGluayBQcmludFNlcnZpY2UgcHJpbnQgc2VydmljZXN9IHRoYXQgYXJlIG5vdCBpbiB0aGUgZ2l2ZW4gc2V0LgogICAgICAqCi0gICAgICogQHBhcmFtIHNlcnZpY2VUb1JlbW92ZSBUaGUge0BsaW5rIENvbXBvbmVudE5hbWV9IG9mIHRoZSB7QGxpbmsgUHJpbnRTZXJ2aWNlfSB0byBiZSByZW1vdmVkCisgICAgICogQHBhcmFtIHNlcnZpY2VOYW1lc1RvS2VlcCBUaGUge0BsaW5rIENvbXBvbmVudE5hbWUgbmFtZXMgfSBvZiB0aGUgc2VydmljZXMgdG8ga2VlcAogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFwcHJvdmVkU2VydmljZShDb21wb25lbnROYW1lIHNlcnZpY2VUb1JlbW92ZSkgeworICAgIHB1YmxpYyB2b2lkIHBydW5lQXBwcm92ZWRTZXJ2aWNlcyhMaXN0PENvbXBvbmVudE5hbWU+IHNlcnZpY2VOYW1lc1RvS2VlcCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHNMb2NrKSB7Ci0gICAgICAgICAgICBpZiAoaXNBcHByb3ZlZFNlcnZpY2Uoc2VydmljZVRvUmVtb3ZlKSkgewotICAgICAgICAgICAgICAgIC8vIENvcHkgYXBwcm92ZWQgc2VydmljZXMuCi0gICAgICAgICAgICAgICAgQXJyYXlTZXQ8U3RyaW5nPiBhcHByb3ZlZFNlcnZpY2VzID0gbmV3IEFycmF5U2V0PFN0cmluZz4oCi0gICAgICAgICAgICAgICAgICAgICAgICBtUHJlZmVyZW5jZXMuZ2V0U3RyaW5nU2V0KEFQUFJPVkVEX1NFUlZJQ0VTX1BSRUZFUkVOQ0UsIG51bGwpKTsKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IGFwcHJvdmVkU2VydmljZXMgPSBnZXRBcHByb3ZlZFNlcnZpY2VzKCk7CiAKKyAgICAgICAgICAgIGlmIChhcHByb3ZlZFNlcnZpY2VzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IG5ld0FwcHJvdmVkU2VydmljZXMgPSBuZXcgQXJyYXlTZXQ8PihhcHByb3ZlZFNlcnZpY2VzLnNpemUoKSk7CisKKyAgICAgICAgICAgIGZpbmFsIGludCBudW1TZXJ2aWNlTmFtZXNUb0tlZXAgPSBzZXJ2aWNlTmFtZXNUb0tlZXAuc2l6ZSgpOworICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bVNlcnZpY2VOYW1lc1RvS2VlcDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHNlcnZpY2VUb0tlZXAgPSBzZXJ2aWNlTmFtZXNUb0tlZXAuZ2V0KGkpLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKGFwcHJvdmVkU2VydmljZXMuY29udGFpbnMoc2VydmljZVRvS2VlcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3QXBwcm92ZWRTZXJ2aWNlcy5hZGQoc2VydmljZVRvS2VlcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXBwcm92ZWRTZXJ2aWNlcy5zaXplKCkgIT0gbmV3QXBwcm92ZWRTZXJ2aWNlcy5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBTaGFyZWRQcmVmZXJlbmNlcy5FZGl0b3IgZWRpdG9yID0gbVByZWZlcmVuY2VzLmVkaXQoKTsKIAotICAgICAgICAgICAgICAgIGZpbmFsIGludCBudW1BcHByb3ZlZFNlcnZpY2VzID0gYXBwcm92ZWRTZXJ2aWNlcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BcHByb3ZlZFNlcnZpY2VzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFwcHJvdmVkU2VydmljZXMudmFsdWVBdChpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lcXVhbHMoc2VydmljZVRvUmVtb3ZlLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZlZFNlcnZpY2VzLnJlbW92ZUF0KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlZGl0b3IucHV0U3RyaW5nU2V0KEFQUFJPVkVEX1NFUlZJQ0VTX1BSRUZFUkVOQ0UsIGFwcHJvdmVkU2VydmljZXMpOworICAgICAgICAgICAgICAgIGVkaXRvci5wdXRTdHJpbmdTZXQoQVBQUk9WRURfU0VSVklDRVNfUFJFRkVSRU5DRSwgbmV3QXBwcm92ZWRTZXJ2aWNlcyk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmFwcGx5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3dpZGdldC9QcmludENvbnRlbnRWaWV3LmphdmEgYi9wYWNrYWdlcy9QcmludFNwb29sZXIvc3JjL2NvbS9hbmRyb2lkL3ByaW50c3Bvb2xlci93aWRnZXQvUHJpbnRDb250ZW50Vmlldy5qYXZhCmluZGV4IGU2NjEzZmEuLjBiYjRiZmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1ByaW50U3Bvb2xlci9zcmMvY29tL2FuZHJvaWQvcHJpbnRzcG9vbGVyL3dpZGdldC9QcmludENvbnRlbnRWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvUHJpbnRTcG9vbGVyL3NyYy9jb20vYW5kcm9pZC9wcmludHNwb29sZXIvd2lkZ2V0L1ByaW50Q29udGVudFZpZXcuamF2YQpAQCAtNDE1LDYgKzQxNSw3IEBACiAgICAgICAgICAgICBvbkRyYWdQcm9ncmVzcyhwcm9ncmVzcyk7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25WaWV3UmVsZWFzZWQoVmlldyBjaGlsZCwgZmxvYXQgdmVsb2NpdHlYLCBmbG9hdCB2ZWxvY2l0eVkpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBjaGlsZFRvcCA9IGNoaWxkLmdldFRvcCgpOwogCkBAIC00MzUsMTQgKzQzNiwxNyBAQAogICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0T3JkZXJlZENoaWxkSW5kZXgoaW50IGluZGV4KSB7CiAgICAgICAgICAgICByZXR1cm4gZ2V0Q2hpbGRDb3VudCgpIC0gaW5kZXggLSAxOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0Vmlld1ZlcnRpY2FsRHJhZ1JhbmdlKFZpZXcgY2hpbGQpIHsKICAgICAgICAgICAgIHJldHVybiBtRHJhZ2dhYmxlQ29udGVudC5nZXRIZWlnaHQoKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgaW50IGNsYW1wVmlld1Bvc2l0aW9uVmVydGljYWwoVmlldyBjaGlsZCwgaW50IHRvcCwgaW50IGR5KSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhdGljT3B0aW9uQm90dG9tID0gbVN0YXRpY0NvbnRlbnQuZ2V0Qm90dG9tKCk7CiAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odG9wLCBnZXRPcGVuZWRPcHRpb25zWSgpKSwgZ2V0Q2xvc2VkT3B0aW9uc1koKSk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9BbmRyb2lkLm1rIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvQW5kcm9pZC5tawppbmRleCBjODYwNjY4Li4yMTg5YjU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9BbmRyb2lkLm1rCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL0FuZHJvaWQubWsKQEAgLTMsOSArMywyMiBAQAogCiBMT0NBTF9NT0RVTEUgOj0gU2V0dGluZ3NMaWIKIAotTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQtc3VwcG9ydC12NAorTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IFwKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjQgXAorICAgIGFuZHJvaWQtc3VwcG9ydC12Ny1yZWN5Y2xlcnZpZXcgXAorICAgIGFuZHJvaWQtc3VwcG9ydC12Ny1wcmVmZXJlbmNlIFwKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjctYXBwY29tcGF0IFwKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjE0LXByZWZlcmVuY2UKIAotTE9DQUxfUkVTT1VSQ0VfRElSIDo9ICQoTE9DQUxfUEFUSCkvcmVzCitMT0NBTF9SRVNPVVJDRV9ESVIgOj0gJChMT0NBTF9QQVRIKS9yZXMgXAorICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92Ny9wcmVmZXJlbmNlL3JlcyBcCisgICAgZnJhbWV3b3Jrcy9zdXBwb3J0L3YxNC9wcmVmZXJlbmNlL3JlcyBcCisgICAgZnJhbWV3b3Jrcy9zdXBwb3J0L3Y3L2FwcGNvbXBhdC9yZXMgXAorICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92Ny9yZWN5Y2xlcnZpZXcvcmVzCisKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykKIAorTE9DQUxfQUFQVF9GTEFHUyA6PSAtLWF1dG8tYWRkLW92ZXJsYXkgXAorICAgIC0tZXh0cmEtcGFja2FnZXMgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2U6YW5kcm9pZC5zdXBwb3J0LnYxNC5wcmVmZXJlbmNlOmFuZHJvaWQuc3VwcG9ydC52MTcucHJlZmVyZW5jZTphbmRyb2lkLnN1cHBvcnQudjcuYXBwY29tcGF0OmFuZHJvaWQuc3VwcG9ydC52Ny5yZWN5Y2xlcnZpZXcKKwogaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19KQVZBX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvZHJhd2FibGUvaWNfc2V0dGluZ3NfbG9ja19vdXRsaW5lLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy9kcmF3YWJsZS9pY19zZXR0aW5nc19sb2NrX291dGxpbmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDdjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvZHJhd2FibGUvaWNfc2V0dGluZ3NfbG9ja19vdXRsaW5lLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICAgICBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjFkcCIKKyAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjIxZHAiCisgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjEuMCIKKyAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjEuMCIKKyAgICAgICAgYW5kcm9pZDp0aW50PSI/YW5kcm9pZDphdHRyL2NvbG9yQWNjZW50Ij4KKyAgICA8cGF0aAorICAgICAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgorICAgICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTgsMTZjMS4xLDAsMi0wLjksMi0ycy0wLjktMi0yLTJzLTIsMC45LTIsMlM2LjksMTYsOCwxNnpNMTQsN2gtMVY1YzAtMi44LTIuMi01LTUtNVMzLDIuMiwzLDV2MkgyQzAuOSw3LDAsNy45LDAsOXYxMGMwLDEuMSwwLjksMiwyLDJoMTJjMS4xLDAsMi0wLjksMi0yVjlDMTYsNy45LDE1LjEsNywxNCw3eiBNNC45LDVjMC0xLjcsMS40LTMuMSwzLjEtMy4xczMuMSwxLjQsMy4xLDMuMXYySDQuOVY1eiBNMTQsMTlIMlY5aDEyVjE5eiIgLz4KKzwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL2xheW91dC9zcGlubmVyX2Ryb3Bkb3duX3Jlc3RyaWN0ZWRfaXRlbS54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvbGF5b3V0L3NwaW5uZXJfZHJvcGRvd25fcmVzdHJpY3RlZF9pdGVtLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2E5YzlmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL2xheW91dC9zcGlubmVyX2Ryb3Bkb3duX3Jlc3RyaWN0ZWRfaXRlbS54bWwKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxUZXh0VmlldyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RleHQxIgorICAgICAgICBzdHlsZT0iP2FuZHJvaWQ6YXR0ci9zcGlubmVyRHJvcERvd25JdGVtU3R5bGUiCisgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI/YW5kcm9pZDphdHRyL2xpc3RQcmVmZXJyZWRJdGVtSGVpZ2h0U21hbGwiCisgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJtYXJxdWVlIiAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy9sYXlvdXQvdXNlcl9wcmVmZXJlbmNlLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy9sYXlvdXQvdXNlcl9wcmVmZXJlbmNlLnhtbAppbmRleCA3NTAzMWZkLi5hYTA3NzEzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvbGF5b3V0L3VzZXJfcHJlZmVyZW5jZS54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL2xheW91dC91c2VyX3ByZWZlcmVuY2UueG1sCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiID4KIAogICAgIDxJbWFnZVZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkArYW5kcm9pZDppZC9pY29uIgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvaWNvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJAZGltZW4vdXNlcl9pY29uX3ZpZXdfaGVpZ2h0IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vdXNlcl9pY29uX3ZpZXdfaGVpZ2h0IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgpAQCAtMzIsMTIgKzMyLDEyIEBACiAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IkBkaW1lbi91c2VyX3NwaW5uZXJfcGFkZGluZyIgLz4KIAogICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCthbmRyb2lkOmlkL3RpdGxlIgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvdGl0bGUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmxhYmVsRm9yPSJAK2FuZHJvaWQ6aWQvaWNvbiIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWxGb3I9IkBhbmRyb2lkOmlkL2ljb24iCiAgICAgICAgICAgICBhbmRyb2lkOmVsbGlwc2l6ZT0ibWFycXVlZSIKICAgICAgICAgICAgIGFuZHJvaWQ6ZmFkaW5nRWRnZT0iaG9yaXpvbnRhbCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSJAZGltZW4vdXNlcl9zcGlubmVyX3BhZGRpbmciCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL2FycmF5cy54bWwKaW5kZXggYzg4NjQ3Ni4uODcyMGViMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hZi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iR2VicnVpayBhbHR5ZCBIRENQLWtvbnRyb2xlcmluZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIHBlciBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iQWYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hc2llIGFmIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCmluZGV4IDMwMmJhMDQuLjMwYTNiNTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkxhYXQgZW5pZ2UgcHJvZ3JhbSBuYSBla3N0ZXJuIGdlc2tyeWYgd29yZCwgb25nZWFnIG1hbmlmZXN3YWFyZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVmVycGxpZyB2ZXJzdGVsYmFyZSBncm9vdHRlcyB2aXIgYWt0aXdpdGVpdGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1hYWsgZ3Jvb3R0ZSB2YW4gYWxsZSBha3Rpd2l0ZWl0ZSB2ZXJzdGVsYmFhciB2aXIgdmVlbHZ1bGRpZ2UgdmVuc3RlcnMsIG9uZ2VhZyBtYW5pZmVzd2FhcmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJBa3RpdmVlciB2b3JtdnJ5ZS1XaW5kb3dzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBa3RpdmVlciBzdGV1biB2aXIgZWtzcGVyaW1lbnRlbGUgdm9ybXZyeWUtV2luZG93cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iV2Vya3NrZXJtLXJ1Z3N0ZXVud2Fnd29vcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlZvbGxlIHJla2VuYWFycnVnc3RldW5lIHdvcmQgbmllIHRhbnMgYmVza2VybSBuaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iUmFhayBvbSBkaWUgd2Fnd29vcmQgdmlyIHZvbGxlZGlnZSByZWtlbmFhcnJ1Z3N0ZXVuZSB0ZSB2ZXJhbmRlciBvZiB0ZSB2ZXJ3eWRlciI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iR2VkZWFrdGl2ZWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWx0eWQgYWFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+Ik91dG9tYXRpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3LWltcGxlbWVudGVyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlN0ZWwgV2ViVmlldy1pbXBsZW1lbnRlcmluZyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IlNrYWtlbCBvbSBuYSBsw6plcmVua3JpcHNpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iU2tha2VsIG9tIOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iTMOqZXJlbmtyaXBzaWUgaXMgcmVlZHMgdWl0Z2V2b2VyIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJLbGV1cnJlZ3N0ZWxsaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJIaWVyZGllIGtlbm1lcmsgaXMgZWtzcGVyaW1lbnRlZWwgZW4ga2FuIHdlcmt2ZXJyaWd0aW5nIGJlw69udmxvZWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iR2VuZXV0cmFsaXNlZXIgZGV1ciA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgc293YXQgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IG9vciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdG90IHZvbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0b3Qgdm9sIG9wIFdTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHRvdCB2b2wgb29yIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0b3Qgdm9sIHZhbmFmIGRyYWFkbG9vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik9uYmVrZW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJMYWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJMYWFpIHRhbnMgb3AgV1MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJMYWFpIHRhbnMgb29yIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iTGFhaSB0YW5zIGRyYWFkbG9vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJMYWFpIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IkxhYWkgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IlZvbCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9hcnJheXMueG1sCmluZGV4IDMyNGVlODMuLjYyZTM3MmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYW0vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFtL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuGIgeGIjeGMiuGLnCDhi6hIRENQIOGIneGIjeGKqOGJsyDhibDhjKDhiYDhiJ0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCDhiqrhiaMiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYg4Yqq4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEg4Yic4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQg4Yic4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IOGInOGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLhjKDhjY3hibfhiI0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg4Yqq4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IOGKquGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIOGInOGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg4Yic4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IOGInOGJoyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IOGKquGJoyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg4Yqq4YmjIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEg4Yic4YmjIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuGMoOGNjeGJt+GIjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDhiqrhiaMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IOGKquGJoyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIOGInOGJoyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IOGKquGJoyDhiaDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGJi+GMpSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYg4Yqq4YmjIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IOGInCDhiaDhiJ3hi53hjI3hiaUg4Yib4Yi14Ymz4YuI4Yi7IOGJi+GMpSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLhjKDhjY3hibfhiI0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQg4Yqq4YmjIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiDhiqrhiaMg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSDhiJwg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCDhiJwg4Ymg4Yid4Yud4YyN4YmlIOGIm+GIteGJs+GLiOGIuyDhiYvhjKUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYg4YicIOGJoOGIneGLneGMjeGJpSDhiJvhiLXhibPhi4jhiLsg4YmL4YylIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuGKpeGKkOGImyDhjKDhjY3hibfhiI0iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKaW5kZXggY2Q2MDRkMi4uYmVhYzBhMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4Yqg4YqV4Yy44Ymj4Yir4YmCIOGKpeGItOGJtuGJvSDhjI3hiJ3hibUg4YuN4Yi14YylIOGIs+GLreGMiOGJoSDhiJvhipXhipvhi43hiJ0g4YiY4Ymw4YyN4Ymg4Yiq4YurIOGLiOGLsCDhi43hjKvhi4og4Yib4Yqo4Yib4Ym7IOGIiOGImOGMu+GNjSDhiaXhiYEg4Yur4Yuw4Yit4YyL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Yql4YqV4YmF4Yi14YmD4Yi04YuO4Ym9IOGLs+GMjeGImOGKmyDhiqXhipXhi7LhiJjhjKPhjKDhipEg4Yqg4Yi14YyI4Yu14Yu1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhi6jhi53hiK3hi53hiK0g4Yiw4YqQ4Yu1IOGKpeGItOGJtuGJvSDhiJ3hipXhiJ0g4Yut4YiB4YqRIOGIneGKlSDhiIjhiaDhiK3hiqvhibMg4YiY4Yi14Yqu4Ym24Ym9IOGIgeGIieGKleGInSDhiqXhipXhiYXhiLXhiYPhiLThi47hib0g4Yuz4YyN4YidIOGLqOGImuGImOGMo+GMoOGKkSDhiqXhipXhi7LhiIbhipEg4Yur4Yuw4Yit4YyL4Ym44YuL4YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i4Yuo4YqQ4Yy7IOGJheGIreGMvSDhiJjhiLXhiq7hibbhib3hipUg4Yur4YqV4YmBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLhi6jhiJnhiqjhiKsg4YqQ4Yy7IOGJheGIreGMvSDhiJjhiLXhiq7hibbhib0g4Yu14YyL4Y2N4YqVIOGLq+GKkOGJg+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLhi6jhi7ThiLXhiq3hibbhjZUg4YiY4Yyg4Ymj4Ymg4YmC4YurIOGLreGIiOGNjSDhiYPhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuGLtOGIteGKreGJtuGNlSDhiJnhiIkg4Yid4Ym14Yqs4YuO4Ym9IOGJoOGKoOGIgeGKkSDhiLDhi5PhibUg4Yqg4YiN4Ymw4Yyg4Ymg4YmB4YidIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuGIiOGLtOGIteGKreGJtuGNlSDhiJnhiIkg4Yid4Ym14Yqs4YuO4Ym9IOGLqOGLreGIiOGNjSDhiYPhiI0g4YiI4YiY4YiI4YuI4YylIOGLiOGLreGInSDhiIjhiJvhiLXhi4jhjIjhi7Ug4YqV4YqrIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuGJsOGIsOGKk+GKreGIj+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IuGIgeGIjeGMiuGLnCDhi63hiaDhiKvhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i4Yir4Yi1LeGIsOGIrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IuGLqFdlYlZpZXcg4Ym14YyN4Ymg4YirIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuGLqFdlYlZpZXcg4Ym14YyN4Ymg4Yir4YqVIOGLq+GLmOGMi+GMgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IuGLqOGJsOGImOGIqOGMoOGLjSBXZWJWaWV3IOGJteGMjeGJoOGIqyDhibDhiLDhipPhiq3hiI/hiI3hjaMg4Yql4YqTIOGMpeGJheGInSDhiIvhi60g4Yql4YqV4Yuy4YuN4YiNIOGImOGKleGJg+GJtSDhiqDhiIjhiaDhibXhjaMg4YiK4Yur4YqQ4YmB4Ym1IOGLreGNiOGIjeGMi+GIiT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLhi4jhi7Ag4Y2L4Yut4YiNIOGIneGIpeGMoOGIqyDhiYDhi63hiK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuGIiOGLjeGMpeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4Y2L4Yut4YiNIOGKoOGIteGJgOGLteGIniDhibDhiJjhiLXhjKXhiK/hiI0iPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuGLqOGJgOGIiOGInSDhiJvhiLXhibDhiqvhiqjhi6siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuGLreGIhSDhiaPhiIXhiKog4Yuo4YiZ4Yqo4YirIOGKkOGLjeGKkyDhiqDhjYjhjLvhjLjhiJ0g4YiL4YutIOGJsOGMveGLleGKliDhiIrhipbhiKjhi40g4Yut4Ym94YiL4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i4YmgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDhibDhiL3hiK/hiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4YyI4Yuw4YibIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhi63hiYDhiKvhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Yql4Yi14Yqo4Yia4Yie4YiLIOGLteGIqOGItSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Ymg4Yqk4YiyIOGIi+GLrSDhiqXhiLXhiqjhiJrhiJ7hiIsg4Yu14Yio4Yi1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhiaDhi6nhiqThiLXhiaIg4YiL4YutIOGKpeGIteGKqOGImuGInuGIiyDhi7XhiKjhiLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOGJoOGMiOGImOGLtSDhiqDhiI3hiaMg4YiL4YutIOGKpeGIteGKqOGImuGInuGIiyDhi7XhiKjhiLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLhi6vhiI3hibPhi4jhiYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuGKg+GLreGIjSDhiaDhiJjhiJnhiIvhibUg4YiL4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLhiaDhiqThiLIg4YiD4Yut4YiNIOGJoOGImOGImeGIi+GJtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiLhiaDhi6nhiqThiLXhiaIg4YiD4Yut4YiNIOGJoOGImOGImeGIi+GJtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuGJoOGMiOGImOGLtSDhiqDhiI3hiaMg4YiD4Yut4YiNIOGJoOGImOGImeGIi+GJtSDhiIvhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4Ymj4Ym14YiqIOGKpeGLqOGInuGIiyDhiqDhi63hi7DhiIjhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLhioPhi63hiI0gIOGKpeGLqOGInuGIiyDhiqDhi63hi7DhiIjhiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i4YiZ4YiJ4YqQ4YuNIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL2FycmF5cy54bWwKaW5kZXggNjU0NzU5Zi4uNjBlZWJlYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXIvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4oCP2KfYs9iq2K7Yr9in2YUg2KfZhNiq2K3ZgtmCINmF2YYgSERDUCDYr9mI2YXZi9inIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQg2YPZitmE2YjYqNin2YrYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiDZg9mK2YTZiNio2KfZitiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEg2YXZiti62KfYqNin2YrYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0INmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYg2YXZiti62KfYqNin2YrYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLYpdmK2YLYp9mBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYg2YPZitmE2YjYqNin2YrYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxINmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0INmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYg2YXZiti62KfYqNin2YrYqiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2INmD2YrZhNmI2KjYp9mK2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSDZhdmK2LrYp9io2KfZitiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Itil2YrZgtin2YEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQg2YPZitmE2YjYqNin2YrYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYg2YPZitmE2YjYqNin2YrYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxINmF2YrYutin2KjYp9mK2KoiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCDZg9mK2YTZiNio2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2INmD2YrZhNmI2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxINmF2YrYutin2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0INmF2YrYutin2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i2KXZitmC2KfZgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCDZg9mK2YTZiNio2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2INmD2YrZhNmI2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxINmF2YrYutin2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0INmF2YrYutin2KjYp9mK2Kog2YTZg9mEINiw2KfZg9ix2Kkg2KrYrtiy2YrZhiDZhdik2YLYqiDZhNmE2KrYs9is2YrZhCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiDZhdmK2LrYp9io2KfZitiqINmE2YPZhCDYsNin2YPYsdipINiq2K7YstmK2YYg2YXYpNmC2Kog2YTZhNiq2LPYrNmK2YQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i2KXZitmC2KfZgSDYp9mE2LHYs9mI2YUg2KfZhNmF2KrYrdix2YPYqSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAppbmRleCA3ZmNmYmE4Li4yMzg2Y2I2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLYqtij2YfZitmEINij2Yog2KrYt9io2YrZgiDYqNit2YrYqyDYqtiq2YUg2YPYqtin2KjYqtmHINi52YTZiSDYs9i52Kkg2KrYrtiy2YrZhiDYrtin2LHYrNmK2KnYjCDYqNi62LYg2KfZhNmG2LjYsSDYudmGINmC2YrZhSDYp9mE2KjZitin2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLZgdix2LYg2KXZhdmD2KfZhtmK2Kkg2KrYutmK2YrYsSDYudmE2Ykg2KfZhNij2YbYtNi32KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+ItmE2KrZhdmD2YrZhiDYqti62YrZitixINit2KzZhSDYrNmF2YrYuSDYp9mE2KPZhti02LfYqSDZhNiq2YbYp9iz2Kgg2KrYudiv2K8g2KfZhNmG2YjYp9mB2LDYjCDYqNi62LYg2KfZhNmG2LjYsSDYudmGINmC2YrZhSDYp9mE2KjZitin2YYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i2KrZhdmD2YrZhiDYp9mE2YbZiNin2YHYsCDYp9mE2K3YsdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLZhNiq2YXZg9mK2YYg2KXYqtin2K3YqSDYp9iz2KrYrtiv2KfZhSDYp9mE2YbZiNin2YHYsCDYp9mE2K3YsdipINin2YTYqtis2LHZitio2YrYqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i2YPZhNmF2Kkg2YXYsdmI2LEg2KfYrdiq2YrYp9i32YrYqSDZhNmE2YPZhdio2YrZiNiq2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+Itin2YTZhtiz2K4g2KfZhNin2K3YqtmK2KfYt9mK2Kkg2KfZhNmD2KfZhdmE2Kkg2YTYs9i32K0g2KfZhNmF2YPYqtioINi62YrYsSDZhdit2YXZitipINmB2Yog2KfZhNmI2YLYqiDYp9mE2K3Yp9mE2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i2KfZhNmF2LMg2YTYqti62YrZitixINmD2YTZhdipINmF2LHZiNixINin2YTZhtiz2K4g2KfZhNin2K3YqtmK2KfYt9mK2Kkg2KfZhNmD2KfZhdmE2Kkg2YTYs9i32K0g2KfZhNmF2YPYqtioINij2Ygg2KXYstin2YTYqtmH2KciPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i2YXYudi32Y7ZkdmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i2KfZhNiq2LTYutmK2YQg2K/Yp9im2YXZi9inIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+Itiq2YTZgtin2KbZitmL2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLigI/Yqti32KjZitmCIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i4oCP2KrYudmK2YrZhiDYqti32KjZitmCIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiLigI/YpdmGINiq2YbZgdmK2LAg2YXZitiy2KkgV2ViVmlldyDYp9mE2KrZiiDYqtmFINin2K7YqtmK2KfYsdmH2Kcg2YXYudi32Y7ZkdmE2Iwg2YjZitis2Kgg2KrZhdmD2YrZhiDZh9iw2Ycg2KfZhNmF2YrYstipINmE2YrYqtiz2YbZiSDYp9iz2KrYrtiv2KfZhdmH2KfYjCDZgdmH2YQg2KrYsdmK2K8g2KrZhdmD2YrZhtmH2KfYnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+Itin2YTYqtit2YjZitmEINil2YTZiSDYqti02YHZitixINmF2YTZgdin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+Itiq2K3ZiNmK2YTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+Itiq2YUg2KfYs9iq2K7Yr9in2YUg2KrYtNmB2YrYsSDZhdmE2YHYp9iqINmF2YYg2YLYqNmEIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLYqti12K3ZititINin2YTYo9mE2YjYp9mGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLZh9iw2Ycg2KfZhNmF2YrYstipINiq2KzYsdmK2KjZitipINmI2YLYryDYqtik2KvYsSDZgdmKINin2YTYo9iv2KfYoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiLYqtmFINin2YTYp9iz2KrYqNiv2KfZhCDYqNmAIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g2KrYqNmC2YkgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INiq2YLYsdmK2KjZi9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INit2KrZiSDYp9mE2KfZg9iq2YXYp9mEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDYrdiq2Ykg2KfZhNin2YPYqtmF2KfZhCDYqNin2LPYqtiu2K/Yp9mFINin2YTYqtmK2KfYsSDYp9mE2YXYqtix2K/YryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+IuKAjzx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g2K3YqtmJINin2YTYp9mD2KrZhdin2YQg2LnYqNixIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g2K3YqtmJINin2YTYp9mD2KrZhdin2YQg2KjYp9mE2LTYrdmGINin2YTZhNin2LPZhNmD2YoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLYutmK2LEg2YXYudix2YjZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i2LTYrdmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLYrNin2LHZjSDYp9mE2LTYrdmGINio2KrZitin2LEg2YXYqtix2K/YryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IuKAj9is2KfYsdmNINin2YTYtNit2YYg2LnYqNixIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i2KzYp9ix2Y0g2KfZhNi02K3ZhiDZhNin2LPZhNmD2YrZi9inIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+ItmE2Kcg2YrYqtmFINin2YTYtNit2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLZhNinINmK2KrZhSDYp9mE2LTYrdmGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItmF2YXYqtmE2KbYqSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYXotckFaL2FycmF5cy54bWwKaW5kZXggYzU4YjFjNi4uNjgyYjEzOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIyZltacWfyZkgSERDUCB5b3hsYW1hIGlzdGlmYWTJmSBlZGluIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVha3RpdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlYWt0aXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiJoyZlyIGp1cm5hbCBidWZlcmluyZkgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iaMmZciBqdXJuYWwgYnVmZXJpbsmZIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ImjJmXIganVybmFsIGJ1ZmVyaW7JmSAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzaXlhIGRlYWt0aXYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAppbmRleCA0YzA1YjI3Li4yNzNlYTMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlNlw6dpbG1pxZ8gaMmZciBoYW5zxLEgdMmZdGJpcWkgYsmZeWFubmFtyZkgZMmZecmZcmzJmXJpbmTJmW4gYXNsxLEgb2xtYXlhcmFxIHhhcmljaSB5YWRkYcWfYSB5YXrEsWxhYmlsyZluIGVkaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iw5Zsw6fDvCBkyZl5acWfZGlybcmZayDDvMOnw7xuIG3JmWNidXJpIGbJmWFsaXl5yZl0bMmZciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iQsmZeWFubmFtyZkgZMmZecmZcmzJmXJpbmTJmW4gYXNsxLEgb2xtYXlhcmFxIGLDvHTDvG4gZsmZYWxpeXnJmXRsyZlyaSDDp294c2F5bMSxIHDJmW5jyZlyyZkgw7zDp8O8biBkyZl5acWfa8mZbiDDtmzDp8O8bMO8IGVkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iRnJlZWZvcm0gd2luZG93cyBha3RpdiBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJTxLFuYXEgw7zDp8O8biBmcmVlZm9ybSB3aW5kb3dzIGFrdGl2IGVkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iTWFzYcO8c3TDvCByZXplcnYgcGFyb2x1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJNYXNhw7xzdMO8IHRhbSByZXplcnZsyZlyIGhhesSxcmRhIHFvcnVubWF5xLFibGFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJNYXNhw7xzdMO8bsO8biB0YW0gcmV6ZXZyIGtvcHlhbGFubWFzxLEgw7zDp8O8biBwYXJvbHUgZMmZeWnFn23JmWsgdsmZIHlhIHNpbG3JmWsgw7zDp8O8biB0b3h1bnVuIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IlFleXJpLWFrdGl2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iSMmZbWnFn8mZIGFrdGl2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF2dG9tYXRpayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcgaWNyYXPEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3IGljcmFzxLFuxLEgYXlhcmxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IlNlw6dpbG1pxZ8gV2ViVmlldyBpY3Jhc8SxIGRlYWt0aXYgZWRpbGRpLCBpc3RpZmFkyZlzaSDDvMOnw7xuIGFrdGl2IGVkaWxtyZlsaWRpciwgYWt0aXZsyZnFn2Rpcm3JmWsgaXN0yZl5aXJzaW5pej8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJGYXlsIMWfaWZyyZlsyZlubcmZc2luyZkgw6dldmlyaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IsOHZXZpcmluLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJGYXlsIGFydMSxcSDFn2lmcsmZbMmZbmliIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJSyZluZyBkw7x6yZlsacWfaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iQnUgZnVua3NpeWEgZWtzcGVyaW1lbnRhbGTEsXIgdsmZIHBlcmZvcm1hbnNhIHTJmXNpciBlZMmZIGJpbMmZci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+IHTJmXLJmWZpbmTJmW4gccmZYnVsIGVkaWxtaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gdMmZeG1pbsmZbiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcWFsxLFiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvbGFuYSBxyZlkyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBBQyDDvHrJmXJpbmTJmW4gZG9sYW5hIHHJmWTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IFVTQiDDvHrJmXJpbmTJmW4gZG9sYW5hIHHJmWTJmXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IG5hcWlsc2l6IMO8esmZcmluZMmZbiBkb2xhbmEgccmZZMmZciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik5hbcmZbHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJFbmVyamkgZG9sZHVybWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkTJmXlpxZ/JmW4gY8mZcsmZeWFuZGEgcWlkYWxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDDvHrJmXJpbmTJmW4gcWlkYWxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iTmFxaWxzaXogcWlkYWxhbsSxciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJEb2xkdXJ1bG11ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IkVuZXJqaSBkb2xkdXJ1bG11ciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJUYW0iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYitzcitMYXRuL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9hcnJheXMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTVjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9hcnJheXMueG1sCkBAIC0wLDAgKzEsMTYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qCisqKgorKiogQ29weXJpZ2h0IDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorKioKKyoqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworKiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorKiogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisqKgorKiogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKioKKyoqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyoqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisqKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyoqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyoqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICA8c3RyaW5nLWFycmF5IG5hbWU9IndpZmlfc3RhdHVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTkyMjE4MTMxNTQxOTI5NDY0MCI+PC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4OTM0MTMxNzk3NzgzNzI0NjY0Ij4iU2tlbmlyYW5qZS4uLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg1MTM3Mjk0NzU4Njc1Mzc5MTMiPiJQb3Zleml2YW5qZeKApiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUxNTA1NTM3NTI3NzI3MTc1NiI+IlBvdHZyxJF1amUgc2UgYXV0ZW50acSNbm9zdC4uLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE5NDMzNTQwMDQwMjkxODQzODEiPiJQcmV1emltYW5qZSBJUCBhZHJlc2UuLi4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0MjIxNzYzMzkxMTIzMjMzMjcwIj4iUG92ZXphbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MjQ4Mzg4MzE2MzExMjIxMzciPiJPYnVzdGF2bGplbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3OTc5NjgwNTU5NTk2MTExOTQ4Ij4iUHJla2lkYW5qZSB2ZXplLi4uIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTYzNDk2MDQ3NDQwMzg1MzYyNSI+IlZlemEgamUgcHJla2ludXRhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzQ2MDk3NDMxMjE2MDgwNjUwIj4iTmV1c3BlxaFubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYzNjcwNDQxODU3MzAyOTUzMzQiPiJCbG9raXJhbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1MDM5NDI2NTQxOTc5MDgwMDUiPiJQcml2cmVtZW5vIGl6YmVnYXZhbmplIGxvxaFlIHZlemUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aWZpX3N0YXR1c193aXRoX3NzaWQiPgorICAgIDxpdGVtIG1zZ2lkPSI3NzE0ODU1MzMyMzYzNjUwODEyIj48L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg4NzgxODY5Nzk3MTU3MTEwMDYiPiJTa2VuaXJhbmplLi4uIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzU1NTA4OTk2NjAzODczODYwIj4iUG92ZXppdmFuamUgc2EgbXJlxb5vbSA8eGxpZmY6ZyBpZD0iTkVUV09SS19OQU1FIj4lMSRzPC94bGlmZjpnPuKApiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU1NDk3MTQ1OTk5NjQwNTYzNCI+IlByb3ZlcmF2YW5qZSBpZGVudGl0ZXRhIG1yZcW+ZSA8eGxpZmY6ZyBpZD0iTkVUV09SS19OQU1FIj4lMSRzPC94bGlmZjpnPi4uLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc5MjgzNDM4MDgwMzMwMjAzNDMiPiJEb2JpamFuamUgSVAgYWRyZXNlIG9kIG1yZcW+ZSA8eGxpZmY6ZyBpZD0iTkVUV09SS19OQU1FIj4lMSRzPC94bGlmZjpnPuKApiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg5Mzc5OTQ4ODEzMTUyMjM0NDgiPiJQb3ZlemFubyBzYSBtcmXFvm9tIDx4bGlmZjpnIGlkPSJORVRXT1JLX05BTUUiPiUxJHM8L3hsaWZmOmc+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMzMDI2MjY1NTQxNTc2MDYxNyI+Ik9idXN0YXZsamVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2OTg2Mzg0MzQzMTcyNzE5MDIiPiJQcmVraWRhbmplIHZlemUgc2EgbXJlxb5vbSA8eGxpZmY6ZyBpZD0iTkVUV09SS19OQU1FIj4lMSRzPC94bGlmZjpnPuKApiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE5NzUwODYwNjQwMjI2NDMxMSI+IlZlemEgamUgcHJla2ludXRhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODU3ODM3MDg5MTk2MDgyNTE0OCI+Ik5ldXNwZcWhbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NjYwNzM5NTE2NTQyNDU0NTI3Ij4iQmxva2lyYW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwNTgzNzUxODI4NjczMTI0MiI+IlByaXZyZW1lbm8gaXpiZWdhdmFuamUgbG/FoWUgdmV6ZSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImhkY3BfY2hlY2tpbmdfdGl0bGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNDQxODI3Nzk5MjMwMDg5ODY5Ij4iTmlrYWQgbmUgcHJvdmVyYXZhaiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwNDI3Njk2OTkwODk4ODM5MzEiPiJQb3RyYcW+aSBzYW1vIERSTSBzYWRyxb5haiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkxNzQ5MDAzODAwNTY4NDY4MjAiPiJVdmVrIHByb3ZlcmF2YWoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJoZGNwX2NoZWNraW5nX3N1bW1hcmllcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjUwNTU1ODU0NTYxMTUxNjcwNyI+Ik5pa2FkYSBuZSBrb3Jpc3RpIEhEQ1AgcHJvdmVydSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM4Nzg3OTM2MTY2MzEwNDkzNDkiPiJLb3Jpc3RpIEhEQ1AgcHJvdmVydSBzYW1vIHphIERSTSBzYWRyxb5haiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVXZlayBrb3Jpc3RpIEhEQ1AgcHJvdmVydSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQga0IgcG8gbWXEkXVtZW1vcmlqaSBldmlkZW5jaWplIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQiBwbyBtZcSRdW1lbW9yaWppIGV2aWRlbmNpamUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiBwbyBtZcSRdW1lbW9yaWppIGV2aWRlbmNpamUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNQiBwbyBtZcSRdW1lbW9yaWppIGV2aWRlbmNpamUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIgcG8gbWXEkXVtZW1vcmlqaSBldmlkZW5jaWplIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2lqYSBqZSBpc2tsanXEjWVuYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY2MjQ4NjQwNDg0MTY3MTA0MTQiPiJSYXptZXJhIGFuaW1hY2lqZSAwLDV4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxOTMzMjI2MTI1NTQxNjYzNSI+IlJhem1lcmEgYW5pbWFjaWplIDF4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzU0NDQyODgwNDEzNzA0ODUwOSI+IlJhem1lcmEgYW5pbWFjaWplIDEsNXgiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMTEwNzEwNDA0MjI1OTc0NTE0Ij4iUmF6bWVyYSBhbmltYWNpamUgMngiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NDAyNzM4NjExNTI4MzE4NzMxIj4iUmF6bWVyYSBhbmltYWNpamUgNXgiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MTg5NTM5MjY3OTY4MzMwNjU2Ij4iUmF6bWVyYSBhbmltYWNpamUgMTB4IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0idHJhbnNpdGlvbl9hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CisgICAgPGl0ZW0gbXNnaWQ9Ijg0NjQyNTU4MzYxNzMwMzk0NDIiPiJBbmltYWNpamEgamUgaXNrbGp1xI1lbmEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzMzc1NzgxNTQxOTEzMzE2NDExIj4iUmF6bWVyYSBhbmltYWNpamUgMCw1eCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE5OTEwNDE0Mjc4MDE4Njk5NDUiPiJSYXptZXJhIGFuaW1hY2lqZSAxeCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQwMTI2ODk5Mjc2MjIzODI4NzQiPiJSYXptZXJhIGFuaW1hY2lqZSAxLDV4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzI4OTE1Njc1OTkyNTk0NzE2OSI+IlJhem1lcmEgYW5pbWFjaWplIDJ4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzcwNTg1NzQ0MTIxMzYyMTgzNSI+IlJhem1lcmEgYW5pbWFjaWplIDV4IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjY2MDc1MDkzNTk1NDg1MzM2NSI+IlJhem1lcmEgYW5pbWFjaWplIDEweCI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImFuaW1hdG9yX2R1cmF0aW9uX3NjYWxlX2VudHJpZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2MDM5OTAxMDYwNjQ4MjI4MjQxIj4iQW5pbWFjaWphIGplIGlza2xqdcSNZW5hIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTEzODY0OTAyMTk1MDg2MzE5OCI+IlJhem1lcmEgYW5pbWFjaWplIDAsNXgiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0Mzk0Mzg4OTYxMzcwODMzMDQwIj4iUmF6bWVyYSBhbmltYWNpamUgMXgiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4MTI1NDI3OTIxNjU1MTk0OTczIj4iUmF6bWVyYSBhbmltYWNpamUgMSw1eCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMzMzQwMjQ3OTA3MzkxODk1NzMiPiJSYXptZXJhIGFuaW1hY2lqZSAyeCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjMxNzAxMjA1NTgyMzY4NDgwMDgiPiJSYXptZXJhIGFuaW1hY2lqZSA1eCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEwNjk1ODQ5ODA3NDY2ODAzOTgiPiJSYXptZXJhIGFuaW1hY2lqZSAxMHgiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJvdmVybGF5X2Rpc3BsYXlfZGV2aWNlc19lbnRyaWVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMTYwNjgwOTg4MDkwNDk4MjEzMyI+Ik5pamVkbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI5MDMzMTk0NzU4Njg4MTYxNTQ1Ij4iNDgwIHBpa3NlbGEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMDI1MzA2MjA2NTU2NTgzNjAwIj4iNDgwIHBpa3NlbGEgKGJlemJlZG5vKSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4NTM5MTMzMzMwNDI3NDQ2NjEiPiI3MjAgcGlrc2VsYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM0MTQ1NDAyNzk4MDU4NzA1MTEiPiI3MjAgcGlrc2VsYSAoYmV6YmVkbm8pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTAzOTgxODA2Mjg0NzE0MTU1MSI+IjEwODAgcGlrc2VsYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5Mzk0OTY5NDk3NTAxNzQ4MzQiPiIxMDgwIHBpa3NlbGEgKGJlemJlZG5vKSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MzM2MTI3MTg1MjQ5MDM1NjgiPiI0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIzODMwMzUxMzEyNzg3OTIzNCI+IjRLIChiZXpiZWRubykiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNTQ3MjExMjYwODQ2ODQzMDk4Ij4iNEsgKHV2ZcSHYW5hIHJlem9sdWNpamEpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQxMTM2NTY0ODk1MTQxNDI1NCI+IjRLICh1dmXEh2FuYSByZXpvbHVjaWphLCBiZXpiZWRubykiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzExMzA1MDc3NTI2NzkyOTAxIj4iNzIwIHBpa3NlbGEsIDEwODAgcGlrcy4gKDIgZWtyYW5hKSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9ImVuYWJsZV9vcGVuZ2xfdHJhY2VzX2VudHJpZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIzMTkxOTczMDgzODg0MjUzODMwIj4iTmlqZWRhbiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjkwODk2MzAwODk0NTUzNzAxODMiPiJMb2djYXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1Mzk3ODA3NDI0MzYyMzA0Mjg4Ij4iU3lzdHJhY2UgKGdyYWZpa2EpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MDY5Mjc3Njk1NTY2MjY2NCI+IkdydXBubyBwb3ppdmFuamUgZnVua2NpamUgZ2xHZXRFcnJvciI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorICA8c3RyaW5nLWFycmF5IG5hbWU9InNob3dfbm9uX3JlY3RfY2xpcF9lbnRyaWVzIj4KKyAgICA8aXRlbSBtc2dpZD0iOTkzNzQyOTEyMTQ3MDkwMjUzIj4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2NzU3MTk5MTI1NTg5NDEyODUiPiJOYWNydGFqIG9ibGFzdCB6YSBpc2VjYW5qZSBrb2phIG5pamUgcHJhdm91Z2Fvbm9nIG9ibGlrYSBwbGF2b20gYm9qb20iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMDY0MzczMjc2MDk1Njk4NjU2Ij4iSXN0YWtuaSB6ZWxlbm9tIHRlc3RpcmFuZSBrb21hbmRlIHphIGNydGFuamUiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJ0cmFja19mcmFtZV90aW1lX2VudHJpZXMiPgorICAgIDxpdGVtIG1zZ2lkPSIyMTkzNTg0NjM5MDU4ODkzMTUwIj4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNzUxNTEzMzk4MzA3OTQ5NjM2Ij4iTmEgZWtyYW51IHUgdmlkdSB0cmFrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4NTE0MzgxNzgxMjA3NzA5NzMiPiJVIGFkYiBzaGVsbCBkdW1wc3lzIGdmeGluZm8iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJkZWJ1Z19od19vdmVyZHJhd19lbnRyaWVzIj4KKyAgICA8aXRlbSBtc2dpZD0iODE5MDU3MjYzMzc2Mzg3MTY1MiI+Iklza2xqdcSNaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc2ODgxOTcwMzEyOTY4MzUzNjkiPiJQcmlrYcW+aSBvYmxhc3RpIHByZWtsYXBhbmphIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjI5MDg1OTM2MDYzMzgyNDM2OSI+IlByaWthxb5pIG9ibGFzdGkgemEgZGV1dGVyYW5vbWFsaWp1IjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgIDxzdHJpbmctYXJyYXkgbmFtZT0iYXBwX3Byb2Nlc3NfbGltaXRfZW50cmllcyI+CisgICAgPGl0ZW0gbXNnaWQ9IjM0MDE2MjU0NTczODU5NDM3OTUiPiJTdGFuZGFyZG5vIG9ncmFuacSNZW5qZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQwNzE1NzQ3OTIwMjg5OTk0NDMiPiJCZXogcG96YWRpbnNraWggcHJvY2VzYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4MTAwMDY5OTYxNzE3MDUzOTgiPiJOYWp2acWhZSBqZWRhbiBwcm9jZXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NTg2MzcwMjE2ODU3MzYwODYzIj4iTmFqdmnFoWUgZHZhIHByb2Nlc2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4MzY1OTMxMzc4NzI2MDUzODEiPiJOYWp2acWhZSB0cmkgcHJvY2VzYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijc4OTk0OTYyNTkxOTE5NjkzMDciPiJOYWp2acWhZSDEjWV0aXJpIHByb2Nlc2EiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJ1c2JfY29uZmlndXJhdGlvbl90aXRsZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI0ODgyMzc1NjE2Mzk3MTI3OTkiPiJQdW5qZW5qZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUyMjA2OTU2MTQ5OTMwOTQ5NzciPiJNVFAgKHByb3Rva29sIHphIHRyYW5zZmVyIG1lZGlqYSkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMDg2MDAwOTY4MTU5MDQ3Mzc1Ij4iUFRQIChwcm90b2tvbCB6YSBwcmVub3Mgc2xpa2EpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzM5ODgzMDg2MDk1MDg0MTgyMiI+IlJORElTIChVU0IgZXRlcm5ldCkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzE4OTI0MjE0OTM5Nzc0MzUyIj4iSXp2b3IgenZ1a2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4MTI2MzE1NjE2NjEzMDA2Mjg0Ij4iTUlESSI8L2l0ZW0+CisgIDwvc3RyaW5nLWFycmF5PgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGI5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApAQCAtMCwwICsxLDMxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKgorKioKKyoqIENvcHlyaWdodCAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZmFpbF90b19zY2FuIiBtc2dpZD0iMTI2NTU0MDM0MjU3ODA4MTQ2MSI+Ik5pamUgbW9ndcSHZSBza2VuaXJhdGkgbXJlxb5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9zZWN1cml0eV9ub25lIiBtc2dpZD0iNzk4NTQ2MTA3MjU5NjU5NDQwMCI+Ik5lbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3JlbWVtYmVyZWQiIG1zZ2lkPSI0OTU1NzQ2ODk5MzQ3ODIxMDk2Ij4iU2HEjXV2YW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNhYmxlZF9nZW5lcmljIiBtc2dpZD0iNDI1OTc5NDkxMDU4NDk0MzM4NiI+Ik9uZW1vZ3XEh2VubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzYWJsZWRfbmV0d29ya19mYWlsdXJlIiBtc2dpZD0iMjM2NDk1MTMzODQzNjAwNzEyNCI+IklQIGtvbmZpZ3VyYWNpamEgamUgb3RrYXphbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Rpc2FibGVkX3dpZmlfZmFpbHVyZSIgbXNnaWQ9IjMwODE2NjgwNjY2MTI4NzY1ODEiPiJXaS1GaSB2ZXphIGplIG90a2F6YWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9kaXNhYmxlZF9wYXNzd29yZF9mYWlsdXJlIiBtc2dpZD0iODY1OTgwNTM1MTc2MzEzMzU3NSI+IlByb2JsZW0gc2EgcG90dnJkb20gYXV0ZW50acSNbm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX25vdF9pbl9yYW5nZSIgbXNnaWQ9IjExMzYxOTE1MTEyMzg1MDg5NjciPiJOaWplIHUgb3BzZWd1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV9ub19pbnRlcm5ldCIgbXNnaWQ9IjkxNTE0NzA3NzU4Njg3Mjg4OTYiPiJQcmlzdHVwIGludGVybmV0dSBuaWplIG90a3JpdmVuLCBhdXRvbWF0c2tvIHBvdmV6aXZhbmplIG5pamUgbW9ndcSHZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzYXZlZF9uZXR3b3JrIiBtc2dpZD0iNDM1MjcxNjcwNzEyNjYyMDgxMSI+IlNhxI11dmFvL2xhIGplIDx4bGlmZjpnIGlkPSJOQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbm5lY3RlZF92aWFfd2ZhIiBtc2dpZD0iMzgwNTczNjcyNjMxNzQxMDcxNCI+IlBvdmV6YW5vIHByZWtvIFdp4oCRRmkgcG9tb8SHbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbm5lY3RlZF92aWFfcGFzc3BvaW50IiBtc2dpZD0iMjgyNjIwNTY5MzgwMzA4ODc0NyI+IlZlemEgamUgdXNwb3N0YXZsamVuYSBwcmVrbyBwcmlzdHVwbmUgdGHEjWtlICUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhdmFpbGFibGVfdmlhX3Bhc3Nwb2ludCIgbXNnaWQ9IjE2MTc0NDA5NDY4NDYzMjk2MTMiPiJEb3N0dXBuYSBqZSBwcmVrbyBwcmlzdHVwbmUgdGHEjWtlICUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2Nvbm5lY3RlZF9ub19pbnRlcm5ldCIgbXNnaWQ9IjMxNDk4NTM5NjY4NDA4NzQ5OTIiPiJWZXphIGplIHVzcG9zdGF2bGplbmEsIG5lbWEgaW50ZXJuZXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2Rpc2Nvbm5lY3RlZCIgbXNnaWQ9IjY1NTcxMDQxNDI2NjczMzk4OTUiPiJWZXphIGplIHByZWtpbnV0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9kaXNjb25uZWN0aW5nIiBtc2dpZD0iODkxMzI2NDc2MDAyNzc2NDk3NCI+IlByZWtpZGFuamUgdmV6ZS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9jb25uZWN0aW5nIiBtc2dpZD0iODU1NTAwOTUxNDYxNDMyMDQ5NyI+IlBvdmV6aXZhbmpl4oCmIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2Nvbm5lY3RlZCIgbXNnaWQ9IjYwMzg3NTUyMDY5MTY2MjY0MTkiPiJQb3ZlemFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wYWlyaW5nIiBtc2dpZD0iMTQyNjg4MjI3MjY5MDM0NjI0MiI+IlVwYXJpdmFuamUuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfY29ubmVjdGVkX25vX2hlYWRzZXQiIG1zZ2lkPSIyODY2OTk0ODc1MDQ2MDM1NjA5Ij4iUG92ZXphbm8gKGJleiB0ZWxlZm9uYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfY29ubmVjdGVkX25vX2EyZHAiIG1zZ2lkPSI0NTc2MTg4NjAxNTgxNDQwMzM3Ij4iUG92ZXphbm8gKGJleiBtZWRpamEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2Nvbm5lY3RlZF9ub19tYXAiIG1zZ2lkPSI2NTA0NDM2OTE3MDU3NDc5OTg2Ij4iUG92ZXphbm8gamUgKG5lbWEgcHJpc3R1cGEgcG9ydWthbWEpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX2Nvbm5lY3RlZF9ub19oZWFkc2V0X25vX2EyZHAiIG1zZ2lkPSI5MTk1NzU3NzY2NzU1NTUzODEwIj4iUG92ZXphbm8gKGJleiB0ZWxlZm9uYSBpbGkgbWVkaWphKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wcm9maWxlX2EyZHAiIG1zZ2lkPSIyMDMxNDc1NDg2MTc5ODMwNjc0Ij4iWnZ1ayBtZWRpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfcHJvZmlsZV9oZWFkc2V0IiBtc2dpZD0iODY1ODc3OTU5NjI2MTIxMjYwOSI+Ilp2dWsgdGVsZWZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfcHJvZmlsZV9vcHAiIG1zZ2lkPSI5MTY4MTM5MjkzNjU0MjMzNjk3Ij4iUHJlbm9zIGRhdG90ZWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3Byb2ZpbGVfaGlkIiBtc2dpZD0iMzY4MDcyOTAyMzM2Njk4NjQ4MCI+IlVsYXpuaSB1cmXEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3Byb2ZpbGVfcGFuIiBtc2dpZD0iMzM5MTYwNjQ5Nzk0NTE0NzY3MyI+IlByaXN0dXAgSW50ZXJuZXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3Byb2ZpbGVfcGJhcCIgbXNnaWQ9IjUzNzIwNTE5MDY5Njg1NzY4MDkiPiJEZWxqZW5qZSBrb250YWthdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfcHJvZmlsZV9wYmFwX3N1bW1hcnkiIG1zZ2lkPSI2NjA1MjI5NjA4MTA4ODUyMTk4Ij4iS29yaXN0aXRlIHphIGRlbGplbmplIGtvbnRha2F0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wcm9maWxlX3Bhbl9uYXAiIG1zZ2lkPSI4NDI5MDQ5Mjg1MDI3NDgyOTU5Ij4iRGVsamVuamUgaW50ZXJuZXQgdmV6ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wcm9maWxlX21hcCIgbXNnaWQ9IjU0NjUyNzEyNTA0NTQzMjQzODMiPiJQcmlzdHVwIHBvcnVrYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3Byb2ZpbGVfc2FwIiBtc2dpZD0iNTc2NDIyMjAyMTg1MTI4MzEyNSI+IlByaXN0dXAgU0lNIGthcnRpY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9wcm9maWxlX3N1bW1hcnlfY29ubmVjdGVkIiBtc2dpZD0iOTYzMzc2MDgxMzQ3NzIxNTk4Ij4iUG92ZXphbm8gc2EgenZ1a29tIG1lZGlqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9oZWFkc2V0X3Byb2ZpbGVfc3VtbWFyeV9jb25uZWN0ZWQiIG1zZ2lkPSI3NjYxMDcwMjA2NzE1NTIwNjcxIj4iUG92ZXphbm8gc2EgenZ1a29tIHRlbGVmb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX29wcF9wcm9maWxlX3N1bW1hcnlfY29ubmVjdGVkIiBtc2dpZD0iMjYxMTkxMzQ5NTk2ODMwOTA2NiI+IlBvdmV6YW5vIHNhIHNlcnZlcm9tIHphIHByZW5vcyBkYXRvdGVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9tYXBfcHJvZmlsZV9zdW1tYXJ5X2Nvbm5lY3RlZCIgbXNnaWQ9IjgxOTE0MDc0Mzg4NTEzNTE3MTMiPiJQb3ZlemFubyBqZSBzYSBtYXBvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9zYXBfcHJvZmlsZV9zdW1tYXJ5X2Nvbm5lY3RlZCIgbXNnaWQ9Ijg1NjE3NjUwNTc0NTMwODM4MzgiPiJWZXphIHNhIHRhxI1rb20gcHJpc3R1cGEgdXNsdWdhbWEgamUgdXNwb3N0YXZsamVuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9vcHBfcHJvZmlsZV9zdW1tYXJ5X25vdF9jb25uZWN0ZWQiIG1zZ2lkPSIxMjY3MDkxMzU2MDg5MDg2Mjg1Ij4iTmlqZSBwb3ZlemFubyBzYSBzZXJ2ZXJvbSB6YSBwcmVub3MgZGF0b3Rla2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfaGlkX3Byb2ZpbGVfc3VtbWFyeV9jb25uZWN0ZWQiIG1zZ2lkPSIzMzgxNzYwMDU0MjE1MTY4Njg5Ij4iUG92ZXphbiBzYSB1bGF6bmltIHVyZcSRYWplbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wYW5fdXNlcl9wcm9maWxlX3N1bW1hcnlfY29ubmVjdGVkIiBtc2dpZD0iNDYwMjI5NDYzODkwOTU5MDYxMiI+IlBvdmV6LiBzYSB1cmXEkS4gcmFkaSBwcmlzdHVwYSBJbnRlcm5ldHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfcGFuX25hcF9wcm9maWxlX3N1bW1hcnlfY29ubmVjdGVkIiBtc2dpZD0iMTU2MTM4MzcwNjQxMTk3NTE5OSI+Ikxva2FsbmEgaW50ZXJuZXQgdmV6YSBzZSBkZWxpIHNhIHVyZcSRYWplbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wYW5fcHJvZmlsZV9zdW1tYXJ5X3VzZV9mb3IiIG1zZ2lkPSI1NjY0ODg0NTIzODIyMDY4NjUzIj4iS29yaXN0aSB6YSBwcmlzdHVwIEludGVybmV0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9tYXBfcHJvZmlsZV9zdW1tYXJ5X3VzZV9mb3IiIG1zZ2lkPSI1MTU0MjAwMTE5OTE5OTI3NDM0Ij4iS29yaXN0aSBzZSB6YSBtYXB1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3NhcF9wcm9maWxlX3N1bW1hcnlfdXNlX2ZvciIgbXNnaWQ9IjcwODUzNjI3MTI3ODY5MDc5OTMiPiJLb3Jpc3RpIHphIHByaXN0dXAgU0lNIGthcnRpY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfYTJkcF9wcm9maWxlX3N1bW1hcnlfdXNlX2ZvciIgbXNnaWQ9IjQ2MzA4NDkwMjIyNTAxNjg0MjciPiJLb3JpxaHEh2VuamUgemEgenZ1ayBtZWRpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfaGVhZHNldF9wcm9maWxlX3N1bW1hcnlfdXNlX2ZvciIgbXNnaWQ9Ijg3MDU3NTM2MjI0NDM4NjI2MjciPiJLb3JpxaHEh2VuamUgemEgYXVkaW8gdGVsZWZvbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfb3BwX3Byb2ZpbGVfc3VtbWFyeV91c2VfZm9yIiBtc2dpZD0iMTI1NTY3NDU0NzE0NDc2OTc1NiI+IktvcmnFocSHZW5qZSB6YSBwcmVub3MgZGF0b3Rla2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfaGlkX3Byb2ZpbGVfc3VtbWFyeV91c2VfZm9yIiBtc2dpZD0iMjMyNzI3MDQwNDUzNjQ1MTM5Ij4iS29yaXN0aSB6YSB1bGF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3BhaXJpbmdfYWNjZXB0IiBtc2dpZD0iNjE2MzUyMDA1NjUzNjYwNDg3NSI+IlVwYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3BhaXJpbmdfYWNjZXB0X2FsbF9jYXBzIiBtc2dpZD0iNjA2MTY5OTI2NTIyMDc4OTE0OSI+IlVQQVJJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3BhaXJpbmdfZGVjbGluZSIgbXNnaWQ9IjQxODU0MjA0MTM1Nzg5NDgxNDAiPiJPdGthxb5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3BhaXJpbmdfd2lsbF9zaGFyZV9waG9uZWJvb2siIG1zZ2lkPSI0OTgyMjM5MTQ1Njc2Mzk0NDI5Ij4iVXBhcml2YW5qZSBvbW9ndcSHYXZhIHByaXN0dXAga29udGFrdGltYSBpIGlzdG9yaWppIHBveml2YSBuYWtvbiBwb3Zleml2YW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfcGFpcmluZ19lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMzc0ODE1NzczMzYzNTk0NzA4NyI+IlVwYXJpdmFuamUgc2EgdXJlxJFhamVtIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gbmlqZSBtb2d1xIdlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wYWlyaW5nX3Bpbl9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iODMzNzIzNDg1NTE4ODkyNTI3NCI+IlVwYXJpdmFuamUgc2EgdXJlxJFhamVtIDx4bGlmZjpnIGlkPSJERVZJQ0VfTkFNRSI+JTEkczwveGxpZmY6Zz4gbmlqZSBtb2d1xIdlIHpib2cgbmV0YcSNbm9nIFBJTi1hIGlsaSBwcmlzdHVwbm9nIGtvZGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmx1ZXRvb3RoX3BhaXJpbmdfZGV2aWNlX2Rvd25fZXJyb3JfbWVzc2FnZSIgbXNnaWQ9Ijc4NzA5OTg0MDMwNDU4MDEzODEiPiJOaWplIG1vZ3XEh2Uga29tdW5pY2lyYXRpIHNhIHVyZcSRYWplbSA8eGxpZmY6ZyBpZD0iREVWSUNFX05BTUUiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsdWV0b290aF9wYWlyaW5nX3JlamVjdGVkX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIxNjQ4MTU3MTA4NTIwODMyNDU0Ij4iPHhsaWZmOmcgaWQ9IkRFVklDRV9OQU1FIj4lMSRzPC94bGlmZjpnPiBqZSBvZGJpby9sYSB1cGFyaXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX29mZiIgbXNnaWQ9IjExNjY3NjE3Mjk2NjA2MTQ3MTYiPiJXaS1GaSBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fd2lmaSIgbXNnaWQ9Ijg4MzQ2MTA2MzYxMzczNzQ1MDgiPiJXaS1GaSB2ZXphIGplIHByZWtpbnV0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfb25lX2JhciIgbXNnaWQ9IjQ4NjkzNzYyNzg4OTQzMDE4MjAiPiJXaS1GaSBzaWduYWwgaW1hIGplZG51IGNydHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3R3b19iYXJzIiBtc2dpZD0iMzU2OTg1MTIzNDcxMDAzNDQxNiI+IldpLUZpIHNpZ25hbCBpbWEgZHZlIGNydGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aWZpX3RocmVlX2JhcnMiIG1zZ2lkPSI4MTM0MTg1NjQ0ODYxMzgwMzExIj4iV2ktRmkgc2lnbmFsIGltYSB0cmkgY3J0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI3MDYxMDQ1Njc3Njk0NzAyIj4iV2ktRmkgc2lnbmFsIGplIG5hamphxI1pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InByb2Nlc3Nfa2VybmVsX2xhYmVsIiBtc2dpZD0iMzkxNjg1ODY0NjgzNjczOTMyMyI+IkFuZHJvaWQgT1MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX3VuaW5zdGFsbGVkX2FwcHMiIG1zZ2lkPSI2MTQyNjM3NzA5MjMyMzE1OTgiPiJVa2xvbmplbmUgYXBsaWthY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfdW5pbnN0YWxsZWRfYXBwc191c2VycyIgbXNnaWQ9Ijc5ODYyOTQ0ODk4OTk4MTMxOTQiPiJVa2xvbmplbmUgYXBsaWthY2lqZSBpIGtvcmlzbmljaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcl9zZXR0aW5nc190aXRsZV91c2IiIG1zZ2lkPSI2Njg4NDE2NDI1ODAxMzg2NTExIj4iVVNCIEludGVybmV0IHBvdmV6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyX3NldHRpbmdzX3RpdGxlX3dpZmkiIG1zZ2lkPSIzMjc3MTQ0MTU1OTYwMzAyMDQ5Ij4iUHJlbm9zbmkgaG90c3BvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcl9zZXR0aW5nc190aXRsZV9ibHVldG9vdGgiIG1zZ2lkPSIzNTU4NTU0MDgzMTc1NjQ0MjAiPiJCbHVldG9vdGggcHJpdmV6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyX3NldHRpbmdzX3RpdGxlX3VzYl9ibHVldG9vdGgiIG1zZ2lkPSI1MzU1ODI4OTc3MTA5Nzg1MDAxIj4iUG92ZXppdmFuamUgc2EgaW50ZXJuZXRvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRldGhlcl9zZXR0aW5nc190aXRsZV9hbGwiIG1zZ2lkPSI4MzU2MTM2MTAxMDYxMTQzODQxIj4iUG92ZXppdmFuamUgaSBwcmVub3NuaSBob3RzcG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF91c2VyX3RpdGxlIiBtc2dpZD0iODEwMTI0NDg4MzY1NDQwOTY5NiI+IlByb2ZpbCB6YSBwb3NhbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfZ3Vlc3QiIG1zZ2lkPSI4NDc1Mjc0ODQyODQ1NDAxODcxIj4iR29zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVua25vd24iIG1zZ2lkPSIxNTkyMTIzNDQzNTE5MzU1ODU0Ij4iTmVwb3puYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icnVubmluZ19wcm9jZXNzX2l0ZW1fdXNlcl9sYWJlbCIgbXNnaWQ9IjMxMjk4ODc4NjU1NTIwMjU5NDMiPiJLb3Jpc25pazogPHhsaWZmOmcgaWQ9IlVTRVJfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfZGVmYXVsdHNfc29tZSIgbXNnaWQ9IjMxMzE1OTQ2OTg1NjM3MjYyMSI+IlBvZGXFoWVuZSBzdSBuZWtlIHBvZHJhenVtZXZhbmUgdnJlZG5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX2RlZmF1bHRzX25vbmUiIG1zZ2lkPSI0MjQxMTI5MTA4MTQwMDM0ODc2Ij4iTmlzdSBwb2RlxaFlbmUgcG9kcmF6dW1ldmFuZSB2cmVkbm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfc2V0dGluZ3MiIG1zZ2lkPSI4MTg2OTcxODk0ODAxMzQ4MzI3Ij4iUG9kZcWhYXZhbmphIHByZWxhc2thIGl6IHRla3N0YSB1IGdvdm9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX3NldHRpbmdzX3RpdGxlIiBtc2dpZD0iMTIzNzgyMDY4MTAxNjYzOTY4MyI+Ikl6bGF6IHphIHByZXR2YXJhbmplIHRla3N0YSB1IGdvdm9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfcmF0ZV90aXRsZSIgbXNnaWQ9IjYwMzA1NTA5OTgzNzkzMTAwODgiPiJCcnppbmEgZ292b3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfcmF0ZV9zdW1tYXJ5IiBtc2dpZD0iNDA2MTgxNTI5MjI4NzE4MjgwMSI+IkJyemluYSBpemdvdmFyYW5qYSB0ZWtzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfZGVmYXVsdF9sYW5nX3RpdGxlIiBtc2dpZD0iODAxODA4NzYxMjI5OTgyMDU1NiI+IkplemlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2xhbmdfdXNlX3N5c3RlbSIgbXNnaWQ9IjI2NzkyNTI0Njc0MTY1MTMyMDgiPiJLb3Jpc3RpIGplemlrIHNpc3RlbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfbGFuZ19ub3Rfc2VsZWN0ZWQiIG1zZ2lkPSI3Mzk1Nzg3MDE5Mjc2NzM0NzY1Ij4iSmV6aWsgbmlqZSBpemFicmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfbGFuZ19zdW1tYXJ5IiBtc2dpZD0iNTIxOTM2MjE2MzkwMjcwNzc4NSI+IlBvZGXFoWF2YSBnbGFzIHNwZWNpZmnEjWFuIHphIGplemlrIG5hbWVuamVuIGdvdm9ybm9tIHRla3N0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19wbGF5X2V4YW1wbGVfdGl0bGUiIG1zZ2lkPSI3MDk0NzgwMzgzMjUzMDk3MjMwIj4iUG9zbHXFoWFqIHByaW1lciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19wbGF5X2V4YW1wbGVfc3VtbWFyeSIgbXNnaWQ9IjgwMjkwNzE2MTUwNDc4OTQ0ODYiPiJQdcWhdGFuamUga3JhdGtlIGRlbW9uc3RyYWNpamUgc2ludGV6ZSBnb3ZvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfaW5zdGFsbF9kYXRhX3RpdGxlIiBtc2dpZD0iNDI2NDM3ODQ0MDUwODE0OTk4NiI+Ikluc3RhbGlyYWogZ2xhc292bmUgcG9kYXRrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19pbnN0YWxsX2RhdGFfc3VtbWFyeSIgbXNnaWQ9IjU3NDIxMzU3MzI1MTE4MjI1ODkiPiJJbnN0YWxpcmFuamUgZ292b3JuaWggcG9kYXRha2EgcG90cmVibmloIHphIHNpbnRlenUgZ292b3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2VuZ2luZV9zZWN1cml0eV93YXJuaW5nIiBtc2dpZD0iODc4NjIzODEwMjAyMDIyMzY1MCI+Ik92YSB0ZWhub2xvZ2lqYSB6YSBzaW50ZXp1IGdvdm9yYSBtb8W+ZGEgbW/FvmUgZGEgcHJpa3VwbGphIHNhdiB0ZWtzdCBrb2ppIMSHZSBiaXRpIGl6Z292b3JlbiwgdWtsanXEjXVqdcSHaSBsacSNbmUgcG9kYXRrZSBrYW8gxaF0byBzdSBsb3ppbmtlIGkgYnJvamV2aSBrcmVkaXRuaWgga2FydGljYS4gVG8gcG90acSNZSBpeiB0ZWhub2xvZ2lqZSA8eGxpZmY6ZyBpZD0iVFRTX1BMVUdJTl9FTkdJTkVfTkFNRSI+JXM8L3hsaWZmOmc+LiDFvWVsaXRlIGxpIGRhIG9tb2d1xIdpdGUga29yacWhxIdlbmplIG92ZSB0ZWhub2xvZ2lqZSB6YSBzaW50ZXp1IGdvdm9yYT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfZW5naW5lX25ldHdvcmtfcmVxdWlyZWQiIG1zZ2lkPSIxMTkwODM3MTUxNDg1MzE0NzQzIj4iWmEgb3ZhaiBqZXppayBqZSBwb3RyZWJuYSBpc3ByYXZuYSBtcmXFvm5hIHZlemEgemEgcHJldHZhcmFuamUgdGVrc3RhIHUgZ292b3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfc2FtcGxlX3N0cmluZyIgbXNnaWQ9IjQwNDA4MzUyMTMzNzMwODYzMjIiPiJPdm8gamUgcHJpbWVyIHNpbnRlemUgZ292b3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX3N0YXR1c190aXRsZSIgbXNnaWQ9IjcyNjg1NjY1NTAyNDI1ODQ0MTMiPiJTdGF0dXMgcG9kcmF6dW1ldmFub2cgamV6aWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX3N0YXR1c19vayIgbXNnaWQ9IjEzMDk3NjI1MTAyNzgwMjk3NjUiPiI8eGxpZmY6ZyBpZD0iTE9DQUxFIj4lMSRzPC94bGlmZjpnPiBqZSBwb2Ryxb5hbiB1IHBvdHB1bm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfc3RhdHVzX3JlcXVpcmVzX25ldHdvcmsiIG1zZ2lkPSI2MDQyNTAwODIxNTAzMjI2ODkyIj4iPHhsaWZmOmcgaWQ9IkxPQ0FMRSI+JTEkczwveGxpZmY6Zz4gemFodGV2YSB2ZXp1IHNhIG1yZcW+b20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfc3RhdHVzX25vdF9zdXBwb3J0ZWQiIG1zZ2lkPSI0NDkxMTU0MjEyNzYyNDcyNDk1Ij4iPHhsaWZmOmcgaWQ9IkxPQ0FMRSI+JTEkczwveGxpZmY6Zz4gbmlqZSBwb2Ryxb5hbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19zdGF0dXNfY2hlY2tpbmciIG1zZ2lkPSI1MzM5MTUwNzk3OTQwNDgzNTkyIj4iUHJvdmVyYXZhIHNlLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2VuZ2luZV9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjM0OTkxMTIxNDI0MjU2ODAzMzQiPiJQb2RlxaFhdmFuamEgemEgPHhsaWZmOmcgaWQ9IlRUU19FTkdJTkVfTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX2VuZ2luZV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSIxMDMwNTEyMDQyMDQwNzIyMjg1Ij4iUG9rcmVuaSBwb2RlxaFhdmFuamEgbWHFoWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19lbmdpbmVfcHJlZmVyZW5jZV9zZWN0aW9uX3RpdGxlIiBtc2dpZD0iNDQ4Mjk0NTAwOTkwOTcxNDEzIj4ixb1lbGplbmEgbWHFoWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR0c19nZW5lcmFsX3NlY3Rpb25fdGl0bGUiIG1zZ2lkPSI0NDAyNTcyMDE0NjA0NDkwNTAyIj4iT3DFoXRlIjwvc3RyaW5nPgorICA8c3RyaW5nLWFycmF5IG5hbWU9InR0c19yYXRlX2VudHJpZXMiPgorICAgIDxpdGVtIG1zZ2lkPSI2Njk1NDk0ODc0MzYyNjU2MjE1Ij4iVmVvbWEgc3Bvcm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0Nzk1MDk1MzE0MzAzNTU5MjY4Ij4iU3Bvcm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4OTAzMTU3NzgxMDcwNjc5NzY1Ij4iTm9ybWFsbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNjQzNDczMDI2MjEzOTI5OTYiPiJCcnpvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTc5NDAyODU4ODEwMTU2MjAwOSI+IkJyxb5lIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNzE2Mzk0Mjc4Mzg4ODY1Mjk0MiI+IlZlb21hIGJyem8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI3ODMxNzEyNjkzNzQ4NzAwNTA3Ij4iVWJyemFubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUxOTQ3NzQ3NDUwMzE3NTE4MDYiPiJWZW9tYSB1YnJ6YW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iOTA4NTEwMjI0NjE1NTA0NTc0NCI+Ik5hamJyxb5lIjwvaXRlbT4KKyAgPC9zdHJpbmctYXJyYXk+CisgICAgPHN0cmluZyBuYW1lPSJjaG9vc2VfcHJvZmlsZSIgbXNnaWQ9IjgyMjkzNjMwNDYwNTM1Njg4NzgiPiJJemFiZXJpdGUgcHJvZmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2F0ZWdvcnlfcGVyc29uYWwiIG1zZ2lkPSIxMjk5NjYzMjQ3ODQ0OTY5NDQ4Ij4iTGnEjW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2F0ZWdvcnlfd29yayIgbXNnaWQ9Ijg2OTkxODQ2ODA1ODQxNzU2MjIiPiJQb3NhbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmVsb3BtZW50X3NldHRpbmdzX3RpdGxlIiBtc2dpZD0iMjE1MTc5MTc2MDY3NjgzNjY3Ij4iT3BjaWplIHphIHByb2dyYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc19lbmFibGUiIG1zZ2lkPSI1NDI1MzA5OTQ3NzgxMDk1MzgiPiJPbW9ndcSHaSBvcGNpamUgemEgcHJvZ3JhbWVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmVsb3BtZW50X3NldHRpbmdzX3N1bW1hcnkiIG1zZ2lkPSIxODE1Nzk1NDAxNjMyODU0MDQxIj4iUG9kZcWhYXZhbmplIG9wY2lqYSB6YSBwcm9ncmFtaXJhbmplIGFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNDMwODU2OTA0MTcwMTUzNTYwNyI+Ik9wY2lqZSB6YSBwcm9ncmFtZXJlIG5pc3UgZG9zdHVwbmUgemEgb3ZvZyBrb3Jpc25pa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2cG5fc2V0dGluZ3Nfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijk1Njg0MTQzMDE3Njk4NTU5OCI+IlBvZGXFoWF2YW5qYSBWUE4tYSBuaXN1IGRvc3R1cG5hIHphIG92b2cga29yaXNuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idGV0aGVyaW5nX3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI2NzY1NzcwNDM4NDM4MjkxMDEyIj4iUG9kZcWhYXZhbmphIHByaXZleml2YW5qYSBuaXN1IGRvc3R1cG5hIHphIG92b2cga29yaXNuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBuX3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3ODczNzI5MDMyMTY1MzI0MDAwIj4iUG9kZcWhYXZhbmphIG5heml2YSBwcmlzdHVwbmUgdGHEjWtlIG5pc3UgZG9zdHVwbmEgemEgb3ZvZyBrb3Jpc25pa2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYWRiIiBtc2dpZD0iNzk4MjMwNjkzNDQxOTc5NzQ4NSI+Ik90a2xhbmphbmplIFVTQiBncmXFoWFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hZGJfc3VtbWFyeSIgbXNnaWQ9IjQ4ODExODY5NzE3NDYwNTY2MzUiPiJSZcW+aW0gb3RrbGFuamFuamEgZ3JlxaFha2Ega2FkYSBqZSBVU0IgcG92ZXphbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FkYl9rZXlzIiBtc2dpZD0iNDAzODg4OTIyMTUwMzEyMjc0MyI+Ik9wb3ppdmFuamUgb2RvYnJlbmphIHphIHVrbGFuamFuamUgVVNCIGdyZcWhYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luX3Bvd2VyIiBtc2dpZD0iNzkyMzkwMTg0NjM3NTU4NzI0MSI+IlByZcSNaWNhIHphIGl6dmXFoXRhaiBvIGdyZcWha2FtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbl9wb3dlcl9zdW1tYXJ5IiBtc2dpZD0iMTc3ODQ1NTczMjc2Mjk4NDU3OSI+IlByaWthxb5pIGR1Z21lIHUgbWVuaWp1IG5hcGFqYW5qYSB6YSBwcmF2bGplbmplIGl6dmXFoXRhamEgbyBncmXFoWthbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZWVwX3NjcmVlbl9vbiIgbXNnaWQ9IjExNDYzODk2MzEyMDg3NjAzNDQiPiJOZSB6YWtsanXEjWF2YWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZWVwX3NjcmVlbl9vbl9zdW1tYXJ5IiBtc2dpZD0iMjE3MzExNDM1MDc1NDI5MzAwOSI+IkVrcmFuIG5lxIdlIGJpdGkgdSByZcW+aW11IHNwYXZhbmphIHRva29tIHB1bmplbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnRfaGNpX3Nub29wX2xvZyIgbXNnaWQ9IjMzNDA2OTkzMTExNTg4NjU2NzAiPiJPbW9ndcSHaSBzbm9vcCBldmlkZW5jaWp1IHphIEJsdWV0b290aCBIQ0kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidF9oY2lfc25vb3BfbG9nX3N1bW1hcnkiIG1zZ2lkPSI3MzAyNDcwMjgyMTAxMTM4NTEiPiJTbmltaSBzdmUgQmx1ZXRvb3RoIEhDSSBwYWtldGUgdSBkYXRvdGVjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im9lbV91bmxvY2tfZW5hYmxlIiBtc2dpZD0iNjA0MDc2MzMyMTk2NzMyNzY5MSI+Ik90a2xqdcSNYXZhbmplIE9FTS1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib2VtX3VubG9ja19lbmFibGVfc3VtbWFyeSIgbXNnaWQ9IjQ3MjAyODE4Mjg4OTE2MTgzNzYiPiJEb3p2b2xpIG90a2xqdcSNYXZhbmplIGZ1bmtjaWplIHphIHBva3JldGFuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maXJtX2VuYWJsZV9vZW1fdW5sb2NrX3RpdGxlIiBtc2dpZD0iNDgwMjE1NzM0NDgxMjM4NTY3NCI+IsW9ZWxpdGUgbGkgZGEgZG96dm9saXRlIG90a2xqdcSNYXZhbmplIHByb2l6dm/EkWHEjWEgb3JpZ2luYWxuZSBvcHJlbWUgKE9FTSk/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29uZmlybV9lbmFibGVfb2VtX3VubG9ja190ZXh0IiBtc2dpZD0iNTUxNzE0NDU3NTYwMTY0NzAyMiI+IlVQT1pPUkVOSkU6IEZ1bmtjaWplIHphIHphxaF0aXR1IHVyZcSRYWphIG5lxIdlIGZ1bmtjaW9uaXNhdGkgbmEgb3ZvbSB1cmXEkWFqdSBkb2sgamUgb3ZvIHBvZGXFoWF2YW5qZSB1a2xqdcSNZW5vLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vY2tfbG9jYXRpb25fYXBwIiBtc2dpZD0iNzk2NjIyMDk3MjgxMjg4MTg1NCI+Ikl6YWJlcmkgYXBsaWthY2lqdSB6YSBsYcW+bnUgbG9rYWNpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2NrX2xvY2F0aW9uX2FwcF9ub3Rfc2V0IiBtc2dpZD0iODA5NTQzMjg1NDk1MzQ0MjIzIj4iQXBsaWthY2lqYSB6YSBsYcW+bnUgbG9rYWNpanUgbmlqZSBwb2RlxaFlbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb2NrX2xvY2F0aW9uX2FwcF9zZXQiIG1zZ2lkPSI4OTY2NDIwNjU1Mjk1MTAyNjg1Ij4iQXBsaWthY2lqYSB6YSBsYcW+bnUgbG9rYWNpanU6IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWJ1Z19uZXR3b3JraW5nX2NhdGVnb3J5IiBtc2dpZD0iNzA0NDA3NTY5MzY0MzAwOTY2MiI+IlVtcmXFvmF2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9jZXJ0aWZpY2F0aW9uIiBtc2dpZD0iODYxMTU2OTU0Mzc5MTMwNzUzMyI+IlNlcnRpZmlrYWNpamEgYmXFvmnEjW5vZyBla3JhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX3ZlcmJvc2VfbG9nZ2luZyIgbXNnaWQ9IjQyMDM3Mjk3NTYwNDcyNDIzNDQiPiJPbW9ndcSHaSBkZXRhbGpuaWp1IGV2aWRlbmNpanUgemEgV2nigJFGaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfYWdncmVzc2l2ZV9oYW5kb3ZlciIgbXNnaWQ9IjkxOTQwNzg2NDU4ODc0ODA5MTciPiJBZ3Jlc2l2YW4gcHJlbGF6IHNhIFdp4oCRRmkgbXJlxb5lIG5hIG1vYmlsbnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2FsbG93X3NjYW5fd2l0aF90cmFmZmljIiBtc2dpZD0iMzYwMTg1MzA4MTE3ODI2NTc4NiI+IlV2ZWsgZG96dm9saSBza2VuaXJhbmplIFdp4oCRRmktamEgdSByb21pbmd1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X2RoY3BfY2xpZW50IiBtc2dpZD0iNjk0NDI2OTc4OTA5MTI3Mjg3Ij4iS29yaXN0aSB6YXN0YXJlbGkgREhDUCBrbGlqZW50Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9iaWxlX2RhdGFfYWx3YXlzX29uIiBtc2dpZD0iNzc0NTYwNTc1OTc3NTMyMDM2MiI+IlBvZGFjaSB6YSBtb2JpbG5lIHVyZcSRYWplIHN1IHV2ZWsgYWt0aXZuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndpZmlfZGlzcGxheV9jZXJ0aWZpY2F0aW9uX3N1bW1hcnkiIG1zZ2lkPSIxMTU1MTgyMzA5MTY2NzQ2OTczIj4iUHJpa2F6IG9wY2lqYSB6YSBzZXJ0aWZpa2FjaWp1IGJlxb5pxI1ub2cgZWtyYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2lmaV92ZXJib3NlX2xvZ2dpbmdfc3VtbWFyeSIgbXNnaWQ9IjY2MTUwNzE2MTYxMTE3MzE5NTgiPiJQb3ZlxIdhdmEgbml2byBldmlkZW50aXJhbmphIHphIFdp4oCRRmkuIFByaWtheiBwbyBTU0lEIFJTU0ktdSB1IGJpcmHEjXUgV2nigJFGaSBtcmXFvmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2FnZ3Jlc3NpdmVfaGFuZG92ZXJfc3VtbWFyeSIgbXNnaWQ9IjYzMjg0NTU2Njc2NDI1NzAzNzEiPiJLYWRhIHNlIG9tb2d1xIdpLCBXaeKAkUZpIMSHZSBiaXRpIGFncmVzaXZuaWppIHByaSBwcmViYWNpdmFuanUgbXJlxb5lIHphIHByZW5vcyBwb2RhdGFrYSBuYSBNb2JpbG51LCBrYWRhIGplIFdp4oCRRmkgc2lnbmFsIHNsYWIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aWZpX2FsbG93X3NjYW5fd2l0aF90cmFmZmljX3N1bW1hcnkiIG1zZ2lkPSIyNTc1MTAxNDI0OTcyNjg2MzEwIj4iRG96dm9saS96YWJyYW5pIHNrZW5pcmFuamUgV2ktRmktamEgdSByb21pbmd1IG5hIG9zbm92dSBwcmlzdXRub2cgcHJvdG9rYSBwb2RhdGFrYSBuYSBpbnRlcmZlanN1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZSIgbXNnaWQ9Ijc0MzMxMzcxMDgzNDg1NTM1MDgiPiJWZWxpxI1pbmUgYmFmZXJhIHBvZGF0YWthIHUgcHJvZ3JhbXUgemEgZXZpZGVudGlyYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9sb2dkX3NpemVfZGlhbG9nX3RpdGxlIiBtc2dpZD0iMTIwNjc2OTMxMDIzNjQ3Njc2MCI+Ikl6YWJlcml0ZSB2ZWxpxI1pbmUgcG8gYmFmZXJ1IGV2aWRlbmNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfdXNiX2NvbmZpZ3VyYXRpb25fdGl0bGUiIG1zZ2lkPSIyNjQ5OTM4NTExNTA2OTcxODQzIj4iSXphYmVyaXRlIGtvbmZpZ3VyYWNpanUgVVNCLWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfdXNiX2NvbmZpZ3VyYXRpb25fZGlhbG9nX3RpdGxlIiBtc2dpZD0iNjM4NTU2NDQ0Mjg1MTU5OTk2MyI+Ikl6YWJlcml0ZSBrb25maWd1cmFjaWp1IFVTQi1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxsb3dfbW9ja19sb2NhdGlvbiIgbXNnaWQ9IjI3ODc5NjI1NjQ1Nzg2NjQ4ODgiPiJEb3p2b2xpIGxhxb5uZSBsb2thY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsbG93X21vY2tfbG9jYXRpb25fc3VtbWFyeSIgbXNnaWQ9IjMxNzYxNTEwNTE1NjM0NTYyNiI+IkRvenZvbGkgbGHFvm5lIGxva2FjaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfdmlld19hdHRyaWJ1dGVzIiBtc2dpZD0iNjQ4NTQ0ODM2NzgwMzMxMDM4NCI+Ik9tb2d1xIdpIHByb3ZlcnUgYXRyaWJ1dGEgemEgcHJlZ2xlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImxlZ2FjeV9kaGNwX2NsaWVudF9zdW1tYXJ5IiBtc2dpZD0iMTYzMzgzNTY2MzE3NjUyMDQwIj4iS29yaXN0aXRlIERIQ1Aga2xpamVudCBpeiBMb2xsaXBvcC1hIHVtZXN0byBub3ZvZyBBbmRyb2lkIERIQ1Aga2xpamVudGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9iaWxlX2RhdGFfYWx3YXlzX29uX3N1bW1hcnkiIG1zZ2lkPSI4MTQ5NzczOTAxNDMxNjk3OTEwIj4iTmVrYSBwb2RhY2kgemEgbW9iaWxuZSB1cmXEkWFqZSB1dmVrIGJ1ZHUgYWt0aXZuaSwgxI1hayBpIGthZGEgamUgV2nigJFGaSBha3RpdmFuIChyYWRpIGJyemUgcHJvbWVuZSBtcmXFvmUpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl93YXJuaW5nX3RpdGxlIiBtc2dpZD0iNjIzNDQ2MzMxMDg5NjU2MzI1MyI+IkRvenZvbGkgb3RrbGFuamFuamUgVVNCIGdyZcWhYWthPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFkYl93YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSI3MzE2Nzk5OTI1NDI1NDAyMjQ0Ij4iT3RrbGFuamFuamUgVVNCIGdyZcWhYWthIG5hbWVuamVubyBqZSBzYW1vIHphIHN2cmhlIHByb2dyYW1pcmFuamEuIEtvcmlzdGl0ZSBnYSB6YSBrb3BpcmFuamUgcG9kYXRha2Egc2EgcmHEjXVuYXJhIG5hIHVyZcSRYWogaSBvYnJudXRvLCBpbnN0YWxpcmFuamUgYXBsaWthY2lqYSBuYSB1cmXEkWFqdSBiZXogb2JhdmXFoXRlbmphIGkgxI1pdGFuamUgcG9kYXRha2EgaXogZXZpZGVuY2lqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhZGJfa2V5c193YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSI1NjU5ODQ5NDU3MTM1ODQxNjI1Ij4ixb1lbGl0ZSBsaSBkYSBvcG96b3ZldGUgcHJpc3R1cCBvdGtsYW5qYW5qdSBVU0IgZ3JlxaFha2Egc2Egc3ZpaCByYcSNdW5hcmEga29qZSBzdGUgcHJldGhvZG5vIG9kb2JyaWxpPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldl9zZXR0aW5nc193YXJuaW5nX3RpdGxlIiBtc2dpZD0iNzI0NDYwNzc2ODA4ODU0MDE2NSI+IsW9ZWxpdGUgbGkgZGEgb21vZ3XEh2l0ZSBwcm9ncmFtZXJza2EgcG9kZcWhYXZhbmphPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldl9zZXR0aW5nc193YXJuaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjk4MzM3NzgxMTM5MDk3OTY0Ij4iT3ZhIHBvZGXFoWF2YW5qYSBzdSBuYW1lbmplbmEgc2FtbyB6YSBwcm9ncmFtaXJhbmplLiBNb2d1IGRhIGl6YXpvdnUgcHJlc3RhbmFrIGZ1bmtjaW9uaXNhbmphIGlsaSBuZW/EjWVraXZhbm8gcG9uYcWhYW5qZSB1cmXEkWFqYSBpIGFwbGlrYWNpamEgbmEgbmplbXUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idmVyaWZ5X2FwcHNfb3Zlcl91c2JfdGl0bGUiIG1zZ2lkPSI0MTc3MDg2NDg5ODY5MDQxOTUzIj4iVmVyaWZpa3VqIGFwbGlrYWNpamUgcHJla28gVVNCLWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2ZXJpZnlfYXBwc19vdmVyX3VzYl9zdW1tYXJ5IiBtc2dpZD0iOTE2NDA5Njk2OTkyNDUyOTIwMCI+IlByb3ZlcmF2YSBkYSBsaSBzdSBhcGxpa2FjaWplIGluc3RhbGlyYW5lIHByZWtvIEFEQi1hL0FEVC1hIMWhdGV0bmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX3Rlcm1pbmFsX3RpdGxlIiBtc2dpZD0iOTU1NzIwOTQzNTYwNTQxMjAiPiJMb2thbG5pIHRlcm1pbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX3Rlcm1pbmFsX3N1bW1hcnkiIG1zZ2lkPSI2NzY2Nzg1MjY1OTM1OTIwNiI+Ik9tb2d1xIdpIGFwbGlrLiB0ZXJtaW5hbGEgemEgcHJpc3R1cCBsb2thbG5vbSBrb21hbmRub20gb2tydcW+ZW5qdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhkY3BfY2hlY2tpbmdfdGl0bGUiIG1zZ2lkPSI4NjA1NDc4OTEzNTQ0MjczMjgyIj4iSERDUCBwcm92ZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGRjcF9jaGVja2luZ19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI1MTQxMzA1NTMwOTIzMjgzIj4iUG9kZcWhYXZhbmplIHBvbmHFoWFuamEgSERDUCBwcm92ZXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfZGVidWdnaW5nX2NhdGVnb3J5IiBtc2dpZD0iNjc4MTI1MDE1OTUxMzQ3MTMxNiI+Ik90a2xhbmphbmplIGdyZcWhYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfYXBwIiBtc2dpZD0iODM0OTU5MTczNDc1MTM4NDQ0NiI+Ikl6YWJlcml0ZSBhcGxpa2FjaWp1IHphIG90a2xhbmphbmplIGdyZcWhYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfYXBwX25vdF9zZXQiIG1zZ2lkPSI3MTg3NTI0OTk1ODY0MDM0OTkiPiJOZW1hIHBvZGXFoWVuaWggYXBsaWthY2lqYSB6YSBvdGtsYW5qYW5qZSBncmXFoWFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlYnVnX2FwcF9zZXQiIG1zZ2lkPSIyMDYzMDc3OTk3ODcwMjgwMDE3Ij4iQXBsaWthY2lqYSB6YSBvdGtsYW5qYW5qZSBncmXFoWFrYTogPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF9hcHBsaWNhdGlvbiIgbXNnaWQ9IjUxNTYwMjkxNjEyODkwOTE3MDMiPiJCaXJhbmplIGFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub19hcHBsaWNhdGlvbiIgbXNnaWQ9IjI4MTMzODc1NjMxMjkxNTM4ODAiPiJOaWplZG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FpdF9mb3JfZGVidWdnZXIiIG1zZ2lkPSIxMjAyMzcwODc0NTI4ODkzMDkxIj4iU2HEjWVrYWogcHJvZ3JhbSB6YSBvdGtsYW5qYW5qZSBncmXFoWFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9IndhaXRfZm9yX2RlYnVnZ2VyX3N1bW1hcnkiIG1zZ2lkPSIxNzY2OTE4MzAzNDYyNzQ2ODA0Ij4iQXBsaWthY2lqYSDEjWVrYSBwcm9ncmFtIHphIG90a2xhbmphbmplIGdyZcWhYWthIGRhIHByaWxvxb5pIHByZSBpenZyxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWJ1Z19pbnB1dF9jYXRlZ29yeSIgbXNnaWQ9IjE4MTEwNjk5Mzk2MDExODAyNDYiPiJVbm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfZHJhd2luZ19jYXRlZ29yeSIgbXNnaWQ9IjY3NTU3MTY0NjkyNjczNjc4NTIiPiJDcnRhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfaHdfZHJhd2luZ19jYXRlZ29yeSIgbXNnaWQ9IjYyMjAxNzQyMTY5MTIzMDg2NTgiPiJIYXJkdmVyc2tpIHVicnphbm8gcHJpa2F6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfY2F0ZWdvcnkiIG1zZ2lkPSI0Mzg4MzA1MDc1NDk2ODQ4MzUzIj4iTWVkaWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfbW9uaXRvcmluZ19jYXRlZ29yeSIgbXNnaWQ9Ijc2NDA1MDgxNDgzNzU3OTgzNDMiPiJOYWRnbGVkYW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0cmljdF9tb2RlIiBtc2dpZD0iMTkzODc5NTg3NDM1NzgzMDY5NSI+Ik9tb2d1xIdlbiBqZSBzdHJvZ2kgcmXFvmltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RyaWN0X21vZGVfc3VtbWFyeSIgbXNnaWQ9IjE0MjgzNDMxODg5NzMzMjMzOCI+Ik5la2EgZWtyYW4gdHJlcGVyaSBrYWRhIGFwbGlrYWNpamUgb2JhdmxqYWp1IGR1Z2Ugb3BlcmFjaWplIG5hIGdsYXZub2ogbml0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvaW50ZXJfbG9jYXRpb24iIG1zZ2lkPSI2MDg0NDM0Nzg3NDk2OTM4MDAxIj4iTG9rYWNpamEgcG9rYXppdmHEjWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb2ludGVyX2xvY2F0aW9uX3N1bW1hcnkiIG1zZ2lkPSI4NDA4MTkyNzUxNzI3NTM3MTMiPiJQb3N0YXYuIGVsZW1lbnQgc2EgdHJlbnV0bmltIHBvZGFjaW1hIG8gZG9kaXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd190b3VjaGVzIiBtc2dpZD0iMTM1NjQyMDM4NjUwMDgzNDMzOSI+IlByaWthxb5pIGRvZGlyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfdG91Y2hlc19zdW1tYXJ5IiBtc2dpZD0iNjY4NDQwNzkxMzE0NTE1MDA0MSI+IlByaWthxb5pIHZpenVlbG5lIHBvdnJhdG5lIGluZm9ybWFjaWplIHphIGRvZGlyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfc2NyZWVuX3VwZGF0ZXMiIG1zZ2lkPSI1NDcwODE0MzQ1ODc2MDU2NDIwIj4iUHJpa2HFvmkgYcW+dXJpcmFuamEgcG92csWhaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19zY3JlZW5fdXBkYXRlc19zdW1tYXJ5IiBtc2dpZD0iMjU2OTYyMjc2NjY3Mjc4NTUyOSI+Ik9zdmV0bGkgc3ZlIHBvdnLFoWluZSBwcm96b3JhIGthZGEgc2UgYcW+dXJpcmFqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfaHdfc2NyZWVuX3VwZGF0ZXMiIG1zZ2lkPSI1MDM2OTA0NTU4MTQ1OTQxNTkwIj4iUHJpa2HFvmkgYcW+dXIuIEdQVSBwcmlrYXphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19od19zY3JlZW5fdXBkYXRlc19zdW1tYXJ5IiBtc2dpZD0iMTExNTU5MzU2NTk4MDE5NjE5NyI+Ik9zdmV0bGkgcHJpa2F6ZSB1IHByb3pvci4ga2FkYSBzZSBjcnRhIHNhIEdQVS1vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfaHdfbGF5ZXJzX3VwZGF0ZXMiIG1zZ2lkPSI1NjQ1NzI4NzY1NjA1Njk5ODIxIj4iUHJpa2HFvmkgYcW+dXJpcmFuamEgaGFyZHZlcnNraWggc2xvamV2YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfaHdfbGF5ZXJzX3VwZGF0ZXNfc3VtbWFyeSIgbXNnaWQ9IjUyOTY5MTcyMzMyMzY2NjE0NjUiPiJIYXJkdmVyc2tpIHNsb2pldmkgdHJlcGVyZSB6ZWxlbm8ga2FkYSBzZSBhxb51cmlyYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfaHdfb3ZlcmRyYXciIG1zZ2lkPSIyOTY4NjkyNDE5OTUxNTY1NDE3Ij4iT3RrbG9uaSBncmXFoWtlIEdQVSBwcmVrbGFwYW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2FibGVfb3ZlcmxheXMiIG1zZ2lkPSIyMDc0NDg4NDQwNTA1OTM0NjY1Ij4iT25lbW9nLiBIVyBwb3N0LiBlbGVtZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2FibGVfb3ZlcmxheXNfc3VtbWFyeSIgbXNnaWQ9IjM1Nzg5NDExMzM3MTA3NTg1OTIiPiJVdmVrIGtvcmlzdGkgR1BVIHphIGtvbXBvbm92YW5qZSBla3JhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaW11bGF0ZV9jb2xvcl9zcGFjZSIgbXNnaWQ9IjY3NDU4NDcxNDEzNTMzNDU4NzIiPiJTaW11bGlyYWogcHJvc3RvciBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX29wZW5nbF90cmFjZXNfdGl0bGUiIG1zZ2lkPSI2NzkwNDQ0MDExMDUzMjE5ODcxIj4iT21vZ3XEh2kgT3BlbkdMIHRyYWdvdmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYXVkaW9fZGlzYWJsZV9yb3V0aW5nIiBtc2dpZD0iODExNDQ5ODQzNjAwMzEwMjY3MSI+Ik9uZW1vZ3XEh2kgVVNCIHByZXVzbS4genZ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYXVkaW9fZGlzYWJsZV9yb3V0aW5nX3N1bW1hcnkiIG1zZ2lkPSI5ODAyODI3NjAyNzczMTIyNjQiPiJPbmVtb2d1xIdpIGF1dG9tYXQuIHByZXVzbWVyLiBuYSBVU0IgYXVkaW8gcGVyaWZlcm5lIHVyZcSRYWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfbGF5b3V0IiBtc2dpZD0iNTk4MTM2MTc3NjU5NDUyNjE1NSI+IlByaWthxb5pIGdyYW5pY2UgcmFzcG9yZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfbGF5b3V0X3N1bW1hcnkiIG1zZ2lkPSIyMDAxNzc1MzE1MjU4NjM3NjgyIj4iUHJpa2HFvmkgZ3JhbmljZSBrbGlwYSwgbWFyZ2luZSBpdGQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcnRsX2xheW91dF9hbGxfbG9jYWxlcyIgbXNnaWQ9IjIyNTk5MDY2NDMwOTMxMzg5NzgiPiJOYW1ldG5pIHNtZXIgcmFzcG9yZWRhIHpkZXNuYSBuYWxldm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9ydGxfbGF5b3V0X2FsbF9sb2NhbGVzX3N1bW1hcnkiIG1zZ2lkPSI5MTkyNzk3Nzk2NjE2MTMyNTM0Ij4iTmFtZXRuaSBzbWVyIHJhc3BvcmVkYSBla3JhbmEgemRlc25hIG5hbGV2byB6YSBzdmUgbG9rYWxpdGV0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfY3B1X3VzYWdlIiBtc2dpZD0iMjM4OTIxMjkxMDc1ODA3NjAyNCI+IlByaWsuIHVwb3RyZWJ1IHByb2Nlc29yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfY3B1X3VzYWdlX3N1bW1hcnkiIG1zZ2lkPSIyMTEzMzQxOTIzOTg4OTU4MjY2Ij4iUG9zdGF2LiBlbGVtZW50IHNhIHRyZW51dG5vbSB1cG90cmVib20gcHJvY2Vzb3JhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfaHdfdWkiIG1zZ2lkPSI2NDI2MzgzNDYyNTIwODg4NzMyIj4iUHJpbnVkbmkgcHJpa2F6IHBvbS4gR1BVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfaHdfdWlfc3VtbWFyeSIgbXNnaWQ9IjU1MzU5OTExNjYwNzQ4NjE1MTUiPiJQcmludWRubyBrb3Jpc3RpIEdQVSB6YSAyRCBjcnRhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfbXNhYSIgbXNnaWQ9Ijc5MjAzMjMyMzg2NzcyODQzODciPiJOYW1ldG5pIDR4IE1TQUEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9tc2FhX3N1bW1hcnkiIG1zZ2lkPSI5MTIzNTUzMjAzODk1ODE3NTM3Ij4iT21vZ3XEh2kgNHggTVNBQSB1IE9wZW5HTCBFUyAyLjAgYXBsaWthY2lqYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19ub25fcmVjdF9jbGlwIiBtc2dpZD0iNTA1OTU0OTUwNDc0NTk1MTcyIj4iT3RrbG9uaSBncmXFoWtlIHUgdmV6aSBzYSByYWRuamFtYSB6YSBpc2VjYW5qZSBvYmxhc3RpIGtvamUgbmlzdSBwcmF2b3VnYW9ub2cgb2JsaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHJhY2tfZnJhbWVfdGltZSIgbXNnaWQ9IjYxNDYzNTQ4NTM2NjM4NjM0NDMiPiJQcmlrYcW+aSBwcm9maWwgcG9tb8SHdSBHUFUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX3RpdGxlIiBtc2dpZD0iNjE2MjU4NzU4ODE2NjExNDcwMCI+IlJhem1lcmEgYW5pbWFjaWplIHByb3pvcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0cmFuc2l0aW9uX2FuaW1hdGlvbl9zY2FsZV90aXRsZSIgbXNnaWQ9IjM4NzUyNzU0MDUyMzU5NTg3NSI+IlJhem1lcmEgYW5pbWFjaWplIHByZWxhemEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbmltYXRvcl9kdXJhdGlvbl9zY2FsZV90aXRsZSIgbXNnaWQ9IjM0MDY3MjI0MTA4MTk5MzQwODMiPiJBbmltYXRvcm92YSByYXptZXJhIHRyYWphbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3ZlcmxheV9kaXNwbGF5X2RldmljZXNfdGl0bGUiIG1zZ2lkPSI1MzY0MTc2Mjg3OTk4Mzk4NTM5Ij4iU2ltdWxpcmFqIHNla3VuZGFybmUgZWtyYW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfYXBwbGljYXRpb25zX2NhdGVnb3J5IiBtc2dpZD0iNDIwNjkxMzY1Mzg0OTc3MTU0OSI+IkFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lZGlhdGVseV9kZXN0cm95X2FjdGl2aXRpZXMiIG1zZ2lkPSIxNTc5NjU5Mzg5NTY4MTMzOTU5Ij4iTmUgxI11dmFqIGFrdGl2bm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbW1lZGlhdGVseV9kZXN0cm95X2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjM1OTIyMjExMjQ4MDg3NzMzNjgiPiJVbmnFoXRpIHN2YWt1IGFrdGl2bm9zdCDEjWltIGplIGtvcmlzbmlrIG5hcHVzdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfcHJvY2Vzc19saW1pdF90aXRsZSIgbXNnaWQ9IjQyODA2MDA2NTAyNTMxMDcxNjMiPiJPZ3JhbmnEjWVuamUgcG96YWRpbnNraWggcHJvY2VzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfYWxsX2FucnMiIG1zZ2lkPSIyODQ2Mjk3OTYzODcyOTA4MiI+IlByaWthxb5pIHN2ZSBBTlItb3ZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19hbGxfYW5yc19zdW1tYXJ5IiBtc2dpZD0iNjQxOTA4NjE0NDEzNTQ0MTI3Ij4iUHJpa2HFvmkgZGlqYWxvZyBBcGxpa2FjaWphIG5lIHJlYWd1amUgemEgYXBsaWthY2lqZSB1IHBvemFkaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWwiIG1zZ2lkPSIzMjE1NzU5Nzg1MDgxOTE2MzgxIj4iUHJpbnVkbm8gZG96dm9saSBhcGxpa2FjaWplIHUgc3BvbGpub2oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik9tb2d1xIdhdmEgdXBpc2l2YW5qZSBzdmloIGFwbGlrYWNpamEgdSBzcG9sam51IG1lbW9yaWp1LCBiZXogb2J6aXJhIG5hIHZyZWRub3N0aSBtYW5pZmVzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJQcmludWRubyBvbW9ndcSHaSBwcm9tZW51IHZlbGnEjWluZSBha3Rpdm5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJPbW9ndcSHYXZhIHByb21lbnUgdmVsacSNaW5lIHN2aWggYWt0aXZub3N0aSB6YSByZcW+aW0gc2EgdmnFoWUgcHJvem9yYSwgYmV6IG9iemlyYSBuYSB2cmVkbm9zdGkgbWFuaWZlc3RhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik9tb2d1xIdpIHByb3pvcmUgcHJvaXp2b2xqbm9nIGZvcm1hdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Ik9tb2d1xIdhdmEgcG9kcsWha3UgemEgZWtzcGVyaW1lbnRhbG5lIHByb3pvcmUgcHJvaXp2b2xqbm9nIGZvcm1hdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikxvemlua2EgcmV6ZXJ2bmUga29waWplIHphIHJhxI11bmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJSZXplcnZuZSBrb3BpamUgxI1pdGF2b2cgc2lzdGVtYSB0cmVudXRubyBuaXN1IHphxaF0acSHZW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IkRvZGlybml0ZSBkYSBiaXN0ZSBwcm9tZW5pbGkgaWxpIHVrbG9uaWxpIGxvemlua3UgemEgcHJhdmxqZW5qZSByZXplcnZuaWgga29waWphIMSNaXRhdm9nIHNpc3RlbWEgbmEgcmHEjXVuYXJ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RvYXN0X3N1Y2Nlc3MiIG1zZ2lkPSI1ODIwMTYwODYyMjg0MzQyOTAiPiJQb3N0YXZsamVuYSBqZSBub3ZhIGxvemlua2EgcmV6ZXJ2bmUga29waWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RvYXN0X2NvbmZpcm1hdGlvbl9taXNtYXRjaCIgbXNnaWQ9Ijc4MDU4OTI1MzI3NTI3MDgyODgiPiJOb3ZhIGxvemlua2EgaSBuamVuYSBwb3R2cmRhIHNlIG5lIHBvZHVkYXJhanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdG9hc3RfdmFsaWRhdGlvbl9mYWlsdXJlIiBtc2dpZD0iNTY0NjM3NzIzNDg5NTYyNjUzMSI+IlBvc3RhdmxqYW5qZSBsb3ppbmtlIHJlemVydm5lIGtvcGlqZSBuaWplIHVzcGVsbyI8L3N0cmluZz4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX25hbWVzIj4KKyAgICA8aXRlbSBtc2dpZD0iMjQyNTUxNDI5OTIyMDUyMzgxMiI+IsW9aXZvcGlzYW4gKHBvZHJhenVtZXZhbm8pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODQ0NjA3MDYwNzUwMTQxMzQ1NSI+IlByaXJvZGFuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjU1MzQwODc2NTgxMDY5OTAyNSI+IlN0YW5kYXJkYW4iPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgPHN0cmluZy1hcnJheSBuYW1lPSJjb2xvcl9tb2RlX2Rlc2NyaXB0aW9ucyI+CisgICAgPGl0ZW0gbXNnaWQ9IjQ5Nzk2MjkzOTcwNzUxMjA4OTMiPiJQb2JvbGrFoWFuZSBib2plIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODI4MDc1NDQzNTk3OTM3MDcyOCI+IlByaXJvZG5lIGJvamUgbmFsaWsgb25pbWEga29qZSByZWdpc3RydWplIG9rbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjUzNjM5NjA2NTQwMDkwMTAzNzEiPiJCb2plIG9wdGltaXpvdmFuZSB6YSBkaWdpdGFsbmkgc2FkcsW+YWoiPC9pdGVtPgorICA8L3N0cmluZy1hcnJheT4KKyAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcHNfdGl0bGUiIG1zZ2lkPSIxMzE3ODE3ODYzNTA4Mjc0NTMzIj4iTmVha3Rpdm5lIGFwbGlrYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBfaW5hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjY3Njg3NTY5Njc1OTQyMDI0MTEiPiJOZWFrdGl2bmEuIERvZGlybml0ZSBkYSBiaXN0ZSBqZSBha3RpdmlyYWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImluYWN0aXZlX2FwcF9hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjQ1MTI5MTE1NzE5NTQzNzU5NjgiPiJBa3Rpdm5hLiBEb2Rpcm5pdGUgZGEgYmlzdGUgamUgZGVha3RpdmlyYWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJ1bm5pbmdzZXJ2aWNlc19zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjgwOTcyODc5Mzk4NjUxNjUyMTMiPiJQb2tyZW51dGUgdXNsdWdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icnVubmluZ3NlcnZpY2VzX3NldHRpbmdzX3N1bW1hcnkiIG1zZ2lkPSI4NTQ2MDg5OTU4MjEwMzI3NDgiPiJQcmlrYXogaSBrb250cm9sYSB0cmVudXRubyBwb2tyZW51dGloIHVzbHVnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfdGl0bGUiIG1zZ2lkPSIyNTk0MTMzMTQ4NTMxMjU2NTEzIj4iTm/Eh25pIHJlxb5pbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfc3VtbWFyeSIgbXNnaWQ9IjkxOTY2MDUwNTQ2MjIwMTcxOTMiPiIlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iT25lbW9ndcSHZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iVXZlayB1a2xqdcSNZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRza2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJQcmltZW5hIFdlYlZpZXctYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJQb2Rlc2l0ZSBwcmltZW51IFdlYlZpZXctYSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IktvbnZlcnR1aiB1IMWhaWZyb3ZhbmplIGRhdG90ZWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJLb252ZXJ0dWouLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IlZlxIcgc2Uga29yaXN0aSDFoWlmcm92YW5qZSBkYXRvdGVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InRpdGxlX2NvbnZlcnRfZmJlIiBtc2dpZD0iMTI2MzYyMjg3NjE5NjQ0NDQ1MyI+IktvbnZlcnRvdmFuamUgdSDFoWlmcm92YW5qZSBwb2plZGluYcSNbmloIGRhdG90ZWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19mYmVfd2FybmluZyIgbXNnaWQ9IjYxMzkwNjc4MTcxNDg4NjU1MjciPiJLb252ZXJ0dWp0ZSDFoWlmcm92YW5qZSBwYXJ0aWNpamUgcG9kYXRha2EgdSDFoWlmcm92YW5qZSBwb2plZGluYcSNbmloIGRhdG90ZWthLlxuICEhVXBvem9yZW5qZSEhIFRpbWUgYnJpxaFldGUgc3ZlIHBvZGF0a2UuXG4gT3ZvIGplIGFsZmEgdmVyemlqYSBmdW5rY2lqZSBpIHZlcm92YXRubyBuZcSHZSBmdW5rY2lvbmlzYXRpIGlzcHJhdm5vLlxuIFByaXRpc25pdGUg4oCeSXpicmnFoWkgaSBrb252ZXJ0dWouLi7igJwgZGEgYmlzdGUgbmFzdGF2aWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1dHRvbl9jb252ZXJ0X2ZiZSIgbXNnaWQ9IjUxNTI2NzExODEzMDk4MjY0MDUiPiJJemJyacWhaSBpIGtvbnZlcnR1ai4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBpY3R1cmVfY29sb3JfbW9kZSIgbXNnaWQ9IjQ1NjA3NTUwMDg3MzAyODM2OTUiPiJSZcW+aW0gYm9qYSBzbGlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBpY3R1cmVfY29sb3JfbW9kZV9kZXNjIiBtc2dpZD0iMTE0MTg5MTQ2NzY3NTU0ODU5MCI+IktvcmlzdGkgc1JHQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfbW9kZV9kaXNhYmxlZCIgbXNnaWQ9Ijc0ODI2NjE5MzYwNTM4MDE4NjIiPiJPbmVtb2d1xIdlbm8gamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX21vZGVfbW9ub2Nocm9tYWN5IiBtc2dpZD0iODQ4NTcwOTg4MDY2NjEwNjcyMSI+IkplZG5vYm9qbm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfbW9kZV9kZXV0ZXJhbm9tYWx5IiBtc2dpZD0iNTQ3NTUzMjk4OTY3MzU4NjMyOSI+IkRldXRlcmFub21hbGlqYSAoY3J2ZW5vLXplbGVubykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX21vZGVfcHJvdGFub21hbHkiIG1zZ2lkPSI4NDI0MTQ4MDA5MDM4NjY2MDY1Ij4iUHJvdGFub21hbGlqYSAoY3J2ZW5vLXplbGVubykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX21vZGVfdHJpdGFub21hbHkiIG1zZ2lkPSI0ODE3MjU4NTQ5ODc5MTIzODkiPiJUcml0YW5vbWFsaWphIChwbGF2by3FvnV0bykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvcmVrY2lqYSBib2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJPdmEgZnVua2NpamEgamUgZWtzcGVyaW1lbnRhbG5hIGkgbW/FvmUgZGEgdXRpxI1lIG5hIHBlcmZvcm1hbnNlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlphbWVuanVqZSBnYSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgcHJlb3N0YWxvIG9rbyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvayBzZSBuZSBuYXB1bmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG9rIHNlIG5lIG5hcHVuaSBwdW5qYcSNZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG9rIHNlIG5lIG5hcHVuaSBwcmVrbyBVU0ItYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkb2sgc2UgbmUgbmFwdW5pIGJlxb5pxI1ubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik5lcG96bmF0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iUHVuamVuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IlB1bmplbmplIHByZWtvIHB1bmphxI1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iUHVuamVuamUgcHJla28gVVNCLWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkJlxb5pxI1ubyBwdW5qZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOZSBwdW5pIHNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmUgcHVuaSBzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQdW5vIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL2FycmF5cy54bWwKaW5kZXggMjc3ODAwZC4uNDIzMzllZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iZy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i0JLQuNC90LDQs9C4INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINC/0YDQvtCy0LXRgNC60LAg0YEgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxINCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i0JjQt9C60LvRjtGH0LXQvdC+IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxINCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYg0JzQkSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+ItCY0LfQutC70Y7Rh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg0JzQkSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLQoNC10LMuINCx0YPRhNC10YAg4oCTIDI1NiDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgMSDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgNCDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgMTYg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLQmNC30LrQu9GO0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyA2NCDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItCg0LXQsy4g0LHRg9GE0LXRgCDigJMgMjU2INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyAxINCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyA0INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i0KDQtdCzLiDQsdGD0YTQtdGAIOKAkyAxNiDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItCQ0L3QuNC80LDRhtC40Y/RgtCwINC1INC40LfQutC70Y7Rh9C10L3QsCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCAxMDVlNTMzLi5lNWRiZjUwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQn9C+0LfQstC+0LvRj9Cy0LAg0L/RgNC40LvQvtC2LiDQtNCwINGB0LUg0LfQsNC/0LjRgdCy0LDRgiDQstGK0LIg0LLRitC90YguINGF0YDQsNC90LjQuy4g0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgdGC0L7QudC90L7RgdGC0LjRgtC1INCyINC80LDQvdC40YTQtdGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCS0YrQt9C80L7QttC90L7RgdGCINC30LAg0L/RgNC10L7RgNCw0LfQvNC10YDRj9Cy0LDQvdC1INC90LAg0LDQutGC0LjQstC90L7RgdGC0LjRgtC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQlNCw0LLQsCDQstGK0LfQvNC+0LbQvdC+0YHRgiDQt9CwINC/0YDQtdC+0YDQsNC30LzQtdGA0Y/QstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQsNC60YLQuNCy0L3QvtGB0YLQuCDQsiDRgNC10LbQuNC80LAg0LfQsCDQvdGP0LrQvtC70LrQviDQv9GA0L7Qt9C+0YDQtdGG0LAg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgdGC0L7QudC90L7RgdGC0LjRgtC1INCyINC80LDQvdC40YTQtdGB0YLQsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLQkNC60YLQuNCy0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC30L7RgNGG0LjRgtC1INCyINGB0LLQvtCx0L7QtNC90LAg0YTQvtGA0LzQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i0JDQutGC0LjQstC40YDQsCDQv9C+0LTQtNGA0YrQttC60LDRgtCwINC30LAg0LXQutGB0L/QtdGA0LjQvNC10L3RgtCw0LvQvdC40YLQtSDQv9GA0L7Qt9C+0YDRhtC4INCyINGB0LLQvtCx0L7QtNC90LAg0YTQvtGA0LzQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0J3QsNGB0YIuINC60L7QvNC/Ljog0J/QsNGA0L7Qu9CwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQn9C+0L3QsNGB0YLQvtGP0YnQtdC8INC/0YrQu9C90LjRgtC1INGA0LXQt9C10YDQstC90Lgg0LrQvtC/0LjRjyDQt9CwINC90LDRgdGC0L7Qu9C10L0g0LrQvtC80L/RjtGC0YrRgCDQvdC1INGB0LAg0LfQsNGJ0LjRgtC10L3QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQlNC+0LrQvtGB0L3QtdGC0LUsINC30LAg0LTQsCDQv9GA0L7QvNC10L3QuNGC0LUg0LjQu9C4INC/0YDQtdC80LDRhdC90LXRgtC1INC/0LDRgNC+0LvQsNGC0LAg0LfQsCDQv9GK0LvQvdC4INGA0LXQt9C10YDQstC90Lgg0LrQvtC/0LjRjyDQvdCwINC90LDRgdGC0L7Qu9C90LjRjyDQutC+0LzQv9GO0YLRitGAIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLQlNC10LDQutGC0LjQstC40YDQsNC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLQktC40L3QsNCz0Lgg0LLQutC70Y7Rh9C10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLQkNCy0YLQvtC80LDRgtC40YfQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i0JLQvdC10LTRgNGP0LLQsNC90LUg0L3QsCBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+ItCX0LDQtNCw0LLQsNC90LUg0L3QsCDQstC90LXQtNGA0Y/QstCw0L3QtdGC0L4g0L3QsCBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i0J/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0LrRitC8INGI0LjRhNGA0L7QstCw0L3QtSDQvdCwINC90LjQstC+INGE0LDQudC7Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLQn9GA0LXQvtCx0YDQsNC30YPQstCw0L3QteKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i0JTQsNC90L3QuNGC0LUg0LLQtdGH0LUg0YHQsCDRiNC40YTRgNC+0LLQsNC90Lgg0L3QsCDQvdC40LLQviDRhNCw0LnQuyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i0JrQvtGA0LXQutGG0LjRjyDQvdCwINGG0LLQtdGC0L7QstC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLQotCw0LfQuCDRhNGD0L3QutGG0LjRjyDQtSDQtdC60YHQv9C10YDQuNC80LXQvdGC0LDQu9C90LAg0Lgg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLRgNCw0LfQuCDQvdCwINC10YTQtdC60YLQuNCy0L3QvtGB0YLRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+ItCX0LDQvNC10L3QtdC90L4g0L7RgiDigJ48eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+4oCcIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMg0L/RgNC40LHQu9C40LfQuNGC0LXQu9C90L4g0L7RgdGC0LDQstCw0YnQviDQstGA0LXQvNC1OiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/RitC70L3QviDQt9Cw0YDQtdC20LTQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDQv9GK0LvQvdC+INC30LDRgNC10LbQtNCw0L3QtSDQv9GA0Lgg0L/RgNC+0LzQtdC90LvQuNCyINGC0L7QuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gwpjigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/RitC70L3QviDQt9Cw0YDQtdC20LTQsNC90LUg0L/RgNC10LcgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/RitC70L3QviDQsdC10LfQttC40YfQvdC+INC30LDRgNC10LbQtNCw0L3QtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+ItCd0LXQuNC30LLQtdGB0YLQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLQl9Cw0YDQtdC20LTQsCDRgdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLQl9Cw0YDQtdC20LTQsNC90LUg0L/RgNC4IEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i0JfQsNGA0LXQttC00LDQvdC1INC/0YDQtdC3IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i0JHQtdC30LbQuNGH0L3QviDQt9Cw0YDQtdC20LTQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i0J3QtSDRgdC1INC30LDRgNC10LbQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i0J3QtSDRgdC1INC30LDRgNC10LbQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItCf0YrQu9C90LAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9hcnJheXMueG1sCmluZGV4IDc3MjlhNGQuLmI4NjM5MzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ibi1yQkQvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4Ka44Kaw4KeN4Kas4Kam4Ka+IEhEQ1Ag4Kaq4Kaw4KeA4KaV4KeN4Ka34KajIOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgp4HgpqgiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiLgp6zgp6rgp6bgp6bgp6YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiLgp6jgp6vgp6zgp6bgp6bgp6YiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4i4Ken4Kem4Kem4Kem4Kem4Kem4KemIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IuCnquCnpuCnpuCnpuCnpuCnpuCnpiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiLgp6fgp6zgp6bgp6bgp6bgp6bgp6bgp6YiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4Kas4Kao4KeN4KanIOCmhuCmm+CnhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiLgp6zgp6pLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4i4Keo4Ker4KesSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiLgp6dNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4i4KeqTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiLgp6fgp6xNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4i4Kes4Keq4Kem4Kem4KemIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IuCnqOCnq+CnrOCnpuCnpuCnpiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiLgp6fgp6bgp6bgp6bgp6bgp6bgp6YiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Kas4Kao4KeN4KanIOCmhuCmm+CnhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiLgp6zgp6pLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IuCnqOCnq+CnrEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4i4KenTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgpqzgpqjgp43gpqcg4KaG4Kab4KeHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IOCnrOCnqksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4Kay4KaXIOCmrOCmvuCmq+CmvuCmsCDgpqrgp43gprDgpqTgpr8g4Keo4Ker4KesSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLgprLgppcg4Kas4Ka+4Kar4Ka+4KawIOCmquCnjeCmsOCmpOCmvyDgp6dNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuCmsuCmlyDgpqzgpr7gpqvgpr7gprAg4Kaq4KeN4Kaw4Kak4Ka/IOCnqk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4Kay4KaXIOCmrOCmvuCmq+CmvuCmsCDgpqrgp43gprDgpqTgpr8g4Ken4KesTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgpoXgp43gpq/gpr7gpqjgpr/gpq7gp4fgprbgpqgg4Kas4Kao4KeN4KanIOCmleCmsOCngeCmqCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCmluZGV4IDVjODMxODMuLjllNDJmNzEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4Kau4KeN4Kav4Ka+4Kao4Ka/4Kar4KeH4Ka44KeN4KafIOCmruCmvuCmqOCml+CngeCmsuCmvyDgpqjgpr/gprDgp43gpqzgpr/gprbgp4fgprfgp4cg4Kav4KeH4KaV4KeL4Kao4KeLIOCmheCnjeCmr+CmvuCmquCnjeCmsuCmv+CmleCnh+CmtuCmvuCmqOCmleCnhyDgpqzgpr7gprngp43gpq/gpr/gppUg4Ka44Kae4KeN4Kaa4Kav4Ka84Ka44KeN4Kal4Ka+4Kao4KeHIOCmsuCnh+CmluCmvuCmsCDgpongpqrgpq/gp4HgppXgp43gpqQg4Kas4Ka+4Kao4Ka+4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4KaG4KaV4Ka+4KawIOCmquCmsOCmv+CmrOCmsOCnjeCmpOCmqOCmr+Cni+Cml+CnjeCmryDgppXgprDgpr7gprAg4Kac4Kao4KeN4KavIOCmleCnjeCmsOCmv+Cmr+CmvOCmvuCmleCmsuCmvuCmquCml+CngeCmsuCmv+CmleCnhyDgppzgp4vgprAg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgpq7gp43gpq/gpr7gpqjgpr/gpqvgp4fgprjgp43gpp8g4Kau4Ka+4Kao4KaX4KeB4Kay4Ka/4KawIOCmqOCmv+CmsOCnjeCmrOCmv+CmtuCnh+Cmt+CnhyDgpq7gpr7gprLgp43gpp/gpr8t4KaJ4KaH4Kao4KeN4Kah4KeL4KawIOCmnOCmqOCnjeCmryDgprjgpq7gprjgp43gpqQg4KaV4KeN4Kaw4Ka/4Kav4Ka84Ka+4KaV4Kay4Ka+4Kaq4KaX4KeB4Kay4Ka/4KaV4KeHIOCmhuCmleCmvuCmsCDgpqrgprDgpr/gpqzgprDgp43gpqTgpqjgpq/gp4vgppfgp43gpq8g4KaV4Kaw4KeHIOCmpOCni+CmsuCnh+CntyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCmq+CnjeCmsOCmvy3gpqvgprDgp43gpq4g4KaJ4KaH4Kao4KeN4Kah4KeL4KaX4KeB4Kay4Ka/IOCmuOCmleCnjeCmt+CmriDgppXgprDgp4HgpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuCmquCmsOCngOCmleCnjeCmt+CmvuCmruCnguCmsuCmlSDgpqvgp43gprDgpr8t4Kar4Kaw4KeN4KauIOCmieCmh+CmqOCnjeCmoeCni+Cml+CngeCmsuCmv+CmsCDgppzgpqjgp43gpq8g4Ka44Ka54Ka+4Kav4Ka84Kak4Ka+IOCmuOCmleCnjeCmt+CmriDgppXgprDgp4Hgpqjgp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Kah4KeH4Ka44KeN4KaV4Kaf4KaqIOCmrOCnjeCmr+CmvuCmleCmhuCmqiDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCmoeCnh+CmuOCnjeCmleCmn+CmqiDgpqrgp4LgprDgp43gpqMg4Kas4KeN4Kav4Ka+4KaV4KaG4KaqIOCmrOCmsOCnjeCmpOCmruCmvuCmqOCnhyDgprjgp4HgprDgppXgp43gprfgpr/gpqQg4Kao4Kav4Ka8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCmoeCnh+CmuOCnjeCmleCmn+CmqiDgpqrgp4HgprDgp4sg4Kas4KeN4Kav4Ka+4KaV4KaG4Kaq4KeH4KawIOCmnOCmqOCnjeCmryDgpqrgpr7gprjgppPgpq/gprzgpr7gprDgp43gpqEg4Kaq4Kaw4Ka/4Kas4Kaw4KeN4Kak4KaoIOCmrOCmviDgpq7gp4Hgppvgp4cg4Kar4KeH4Kay4Ka+4KawIOCmnOCmqOCnjeCmryDgprjgp43gpqrgprDgp43gprYg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuCmheCmleCnjeCmt+CmriDgppXgprDgpr4g4Kaw4Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4Ka44Kas4Ka44Kau4Kav4Ka8IOCmmuCmvuCmsuCngSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLgprjgp43gpqzgpq/gprzgpoLgppXgp43gprDgpr/gpq/gprwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLgppPgpq/gprzgp4fgpqzgpq3gpr/gpokg4Kaq4KeN4Kaw4Kav4Ka84KeL4KaXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuCmk+Cmr+CmvOCnh+CmrOCmreCmv+CmiSDgpqrgp43gprDgpq/gprzgp4vgppcg4Ka44KeH4KafIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IuCmqOCmv+CmsOCnjeCmrOCmvuCmmuCmv+CmpCDgppPgpq/gprzgp4fgpqzgpq3gpr/gpokg4Kaq4KeN4Kaw4Kav4Ka84KeL4KaX4Kaf4Ka/IOCmheCmleCnjeCmt+CmriDgppXgprDgpr4g4KaG4Kab4KeHIOCmj+CmrOCmgiDgpqzgp43gpq/gpqzgprngpr7gprAg4KaV4Kaw4Ka+4KawIOCmnOCmqOCnjeCmryDgpoXgpqzgprbgp43gpq/gpocg4Ka44KaV4KeN4Ka34KauIOCmleCmsOCmpOCnhyDgprngpqzgp4csIOCmhuCmquCmqOCmvyDgppXgpr8g4KaP4Kaf4Ka/4KaV4KeHIOCmuOCmleCnjeCmt+CmriDgppXgprDgpqTgp4cg4Kaa4Ka+4KaoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuCmq+CmvuCmh+CmsiDgpo/gpqjgppXgp43gprDgpr/gpqrgprbgpr7gpqgg4Kaw4KeC4Kaq4Ka+4Kao4KeN4Kak4KawIOCmleCmsOCngeCmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i4Kaw4KeC4Kaq4Ka+4Kao4KeN4Kak4KawIOCmleCmsOCngeCmqC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4Kar4Ka+4KaH4KayIOCmh+CmpOCmv+CmruCmp+CnjeCmr+Cnh+CmhyDgpo/gpqjgppXgp43gprDgpr/gpqrgp43gpp8g4KaV4Kaw4Ka+IOCmsOCmr+CmvOCnh+Cmm+CnhyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i4Kaw4KaZIOCmuOCmguCmtuCni+Cmp+CmqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i4KaP4KaHIOCmrOCniOCmtuCmv+Cmt+CnjeCmn+CnjeCmr+Cmn+CmvyDgpqrgprDgp4DgppXgp43gprfgpr7gpq7gp4LgprLgppUg4KaP4Kas4KaCIOCmj+Cmn+CmvyDgppXgpr7gprDgp43gpq8t4Ka44Kau4KeN4Kaq4Ka+4Kam4Kao4Ka+IOCmquCnjeCmsOCmreCmvuCmrOCmv+CmpCDgppXgprDgpqTgp4cg4Kaq4Ka+4Kaw4KeH4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgpo/gprAg4Kam4KeN4Kas4Ka+4Kaw4Ka+IOCmk+CmreCmvuCmsOCmsOCmvuCmh+CmoSDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCmhuCmqOCngeCmruCmvuCmqOCmv+CmlSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Kas4Ka+4KaV4Ka/IOCmhuCmm+CnhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCmuOCmruCnjeCmquCnguCmsOCnjeCmoyDgprngpqTgp4cgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCmrOCmvuCmleCmvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBBQ+CmpOCnhyDgprjgpq7gp43gpqrgp4LgprDgp43gpqMg4Ka54Kak4KeHIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgpqzgpr7gppXgpr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gVVNCIOCmj+CmsCDgpq7gpr7gpqfgp43gpq/gpq7gp4cg4Ka44Kau4KeN4Kaq4KeC4Kaw4KeN4KajIOCmueCmpOCnhyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Kas4Ka+4KaV4Ka/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtICDgpqzgp4fgpqTgpr7gprAg4Kav4KeL4KaX4KeHIOCmuOCmruCnjeCmquCnguCmsOCnjeCmoyDgprngpqTgp4cgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCmrOCmvuCmleCmvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCmheCmnOCmvuCmqOCmviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4Kaa4Ka+4Kaw4KeN4KacIOCmueCmmuCnjeCmm+CnhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMg4Kak4KeHIOCmmuCmvuCmsOCnjeCmnCDgprngpprgp43gppvgp4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0Ig4KaP4KawIOCmruCmvuCmp+CnjeCmr+CmruCnhyDgpprgpr7gprDgp43gppwg4Ka54Kaa4KeN4Kab4KeHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLgpqTgpr7gprDgpqzgpr/gprngp4Dgpqjgpq3gpr7gpqzgp4cg4Kaa4Ka+4Kaw4KeN4KacIOCmueCmmuCnjeCmm+CnhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLgpprgpr7gprDgp43gppwg4Ka54Kaa4KeN4Kab4KeHIOCmqOCmviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IuCmmuCmvuCmsOCnjeCmnCDgprngpprgp43gppvgp4cg4Kao4Ka+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuCmquCnguCmsOCnjeCmoyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jYS9hcnJheXMueG1sCmluZGV4IGFiODBjY2MuLjk5YzhhMjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2EvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNhL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpdHphIHNlbXByZSBsYSBjb21wcm92YWNpw7MgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iTm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1Ni4wMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMS4wMDAuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ik5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSy9tZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNL21lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9tZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ik5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgLyBtZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIC8gbWVtw7JyaWEgaW50ZXJtw6hkaWEgcmVnLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gLyBtZW3DsnJpYSBpbnRlcm3DqGRpYSByZWcuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTSAvIG1lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSAvIG1lbcOycmlhIGludGVybcOoZGlhIHJlZy4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFjacOzIGRlc2FjdGl2YWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IDcxYTMzMWQyLi4yZjgxMDk4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJQZXJtZXQgcXVlIGxlcyBhcGxpY2FjaW9ucyBlcyBwdWd1aW4gZXNjcml1cmUgZW4gdW4gZGlzcG9zaXRpdSBk4oCZZW1tYWdhdHplbWF0Z2UgZXh0ZXJuLCBpbmRlcGVuZGVudG1lbnQgZGVscyB2YWxvcnMgZGVmaW5pdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3LDp2EgbFwnYWp1c3QgZGUgbGEgbWlkYSBkZSBsZXMgYWN0aXZpdGF0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWV0IGFqdXN0YXIgbGEgbWlkYSBkZSB0b3RlcyBsZXMgYWN0aXZpdGF0cyBwZXIgYWwgbW9kZSBtdWx0aWZpbmVzdHJhLCBpbmRlcGVuZGVudG1lbnQgZGVscyB2YWxvcnMgZGVmaW5pdHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWN0aXZhIGxlcyBmaW5lc3RyZXMgZGUgZm9ybWF0IGxsaXVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQWN0aXZhIGxhIGNvbXBhdGliaWxpdGF0IGFtYiBsZXMgZmluZXN0cmVzIGRlIGZvcm1hdCBsbGl1cmUgZXhwZXJpbWVudGFscy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2VueWEgcGVyIGEgY8OycGllcyBkXCdvcmRpbmFkb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkxlcyBjw7JwaWVzIGRlIHNlZ3VyZXRhdCBkXCdvcmRpbmFkb3IgY29tcGxldGVzIG5vIGVzdGFuIHByb3RlZ2lkZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9jYSBwZXIgY2FudmlhciBvIGVsaW1pbmFyIGxhIGNvbnRyYXNlbnlhIHBlciBhIGPDsnBpZXMgZGUgc2VndXJldGF0IGRcJ29yZGluYWRvciBjb21wbGV0ZXMiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRGVzYWN0aXZhdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlNlbXByZSBhY3RpdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tw6B0aWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhY2nDsyBkZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IkNvbmZpZ3VyYSBsYSBpbXBsZW1lbnRhY2nDsyBkZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iTGEgaW1wbGVtZW50YWNpw7MgZGUgV2ViVmlldyBxdWUgaGFzIHRyaWF0IGVzdMOgIGRlc2FjdGl2YWRhIGkgc1wnaGEgZFwnYWN0aXZhciBwZXIgdXRpbGl0emFyLWxhLiBWb2xzIGFjdGl2YXItbGE/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGVpeCBlbiBsXCdlbmNyaXB0YWNpw7MgZGUgZml0eGVycyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGVpeOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iRWwgZml0eGVyIGphIGVzdMOgIGVuY3JpcHRhdCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iQ29ycmVjY2nDsyBkZWwgY29sb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkFxdWVzdGEgZnVuY2nDsyDDqXMgZXhwZXJpbWVudGFsIGkgcG90IGFmZWN0YXIgZWwgcmVuZGltZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlNcJ2hhIHN1YnN0aXR1w690IHBlciA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPjogZmFsdGVuIGFwcm94aW1hZGFtZW50IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGVyIGNvbXBsZXRhciBsYSBjw6BycmVnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBwZXIgY29tcGxldGFyIGxhIGPDoHJyZWdhIHBlciBDQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBwZXIgY29tcGxldGFyIGxhIGPDoHJyZWdhIHBlciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGVyIGNvbXBsZXRhciBsYSBjw6BycmVnYSBzZW5zZSBmaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJEZXNjb25lZ3V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJTXCdlc3TDoCBjYXJyZWdhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkPDoHJyZWdhOiBjb3JyLiBhbHQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iQ8OgcnJlZ2EgcGVyIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iQ8OgcnJlZ2Egc2Vuc2UgZmlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJObyBzXCdlc3TDoCBjYXJyZWdhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJObyBzXCdlc3TDoCBjYXJyZWdhbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iUGxlbmEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY3MvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY3MvYXJyYXlzLnhtbAppbmRleCBkNDY3ODFhLi44OTUzNDg1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jcy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJWxb5keSBwb3XFvsOtdmF0IGtvbnRyb2x1IEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NMKga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTbCoGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjHCoE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjTCoE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJWeXBudXRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NsKga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNsKgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NMKga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2wqBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxwqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJWeXBudXRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0wqBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTbCoGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjTCoGtCIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NsKga0IgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTUIgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNMKgTUIgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTbCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlZ5cG51dG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjTCoGtCIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NsKga0IgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTUIgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNMKgTUIgbmEgdnlyb3Zuw6F2YWPDrSBwYW3Em8WlIHByb3Rva29sxa8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTbCoE1CIG5hIHZ5cm92bsOhdmFjw60gcGFtxJvFpSBwcm90b2tvbMWvIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2UgamUgdnlwbnV0YSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCA4ZWM1ZTI1Li5mMWM5ZTI3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJLYcW+ZG91IGFwbGlrYWNpIGJ1ZGUgbW/Fvm7DqSB6YXBzYXQgZG8gZXh0ZXJuw61obyDDumxvxb5pxaF0xJssIGJleiBvaGxlZHUgbmEgaG9kbm90eSBtYW5pZmVzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJWeW51dGl0IG1vxb5ub3N0IHptxJtueSB2ZWxpa29zdGkgYWt0aXZpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iVmVsaWtvc3QgdsWhZWNoIGFrdGl2aXQgYnVkZSBtb8W+bsOpIHptxJtuaXQgbmEgbsSba29saWsgb2tlbiAoYmV6IG9obGVkdSBuYSBob2Rub3R5IG1hbmlmZXN0dSkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWt0aXZvdmF0IG9rbmEgc8Kgdm9sbsO9bSB0dmFyZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkFrdGl2dWplIHBvZHBvcnUgZXhwZXJpbWVudMOhbG7DrWNoIG9rZW4gc8Kgdm9sbsO9bSB0dmFyZW0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikhlc2xvIHBybyB6w6Fsb2h5IHYgcG/EjcOtdGHEjWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IsOacGxuw6kgesOhbG9oeSB2IHBvxI3DrXRhxI1pIG5lanNvdSB2IHNvdcSNYXNuw6kgZG9ixJsgY2hyw6FuxJtueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUdXRvIG1vxb5ub3N0IHZ5YmVydGUsIGNoY2V0ZS1saSB6bcSbbml0IG5lYm8gb2RlYnJhdCBoZXNsbyBwcm8gw7pwbG7DqSB6w6Fsb2h5IHYgcG/EjcOtdGHEjWkiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iVnlwbnV0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlbFvmR5IHphcG51dG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGlja8O9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iSW1wbGVtZW50YWNlIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iTmFzdGF2dGUgaW1wbGVtZW50YWNpIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJWeWJyYW7DoSBpbXBsZW1lbnRhY2UgV2ViVmlldyBqZSB6YWvDoXrDoW5hIGHCoG5lbHplIGppIHBvdcW+w610LiBDaGNldGUgamkgcG92b2xpdCBhwqBwb3XFvsOtdD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJQxZlldsOpc3QgbmEgxaFpZnJvdsOhbsOtIHNvdWJvcsWvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJQxZlldsOpc3TigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+Ik9ic2FoIGplIGppxb4gbmEgw7pyb3ZuaSBzb3Vib3LFryB6YcWhaWZyb3bDoW4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvcmVrY2UgYmFyZXYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkZ1bmtjZSBqZSBleHBlcmltZW50w6FsbsOtIGEgbcWvxb5lIG3DrXQgdmxpdiBuYSB2w71rb24uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iUMWZZXBzw6FubyBuYXN0YXZlbsOtbSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgemLDvXbDoSBwxZlpYmxpxb5uxJsgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyDDunBsbsOpaG8gbmFiaXTDrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyDDunBsbsOpaG8gbmFiaXTDrSB6ZSB6w6FzdXZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyDDunBsbsOpaG8gbmFiaXTDrSBwxZllcyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gw7pwbG7DqWhvIG5hYml0w60gYmV6ZHLDoXRvdsSbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iTmV6bsOhbcOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJOYWLDrWrDrSBzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iTmFiw61qZW7DrSB6IGFkYXB0w6lydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Ik5hYsOtamVuw60gcMWZZXMgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJCZXpkcsOhdG92w6kgbmFiw61qZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOZW5hYsOtasOtIHNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmVuYWLDrWrDrSBzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJOYWJpdMOhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRhL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRhL2FycmF5cy54bWwKaW5kZXggMjkzNTQ4OS4uZDcwMGMwNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGEvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iQnJ1ZyBhbHRpZCBIRENQLWtvbnRyb2wiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRnJhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRnJhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgS0IgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgS0IgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CIHByLiBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIHByLiBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRnJhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtCIHByLiBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IGtCIHByLiBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIgcHIuIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNQiBwci4gbG9nYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBmcmEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKaW5kZXggNzQ3YmQxNC4uOTBlYTY5YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iR8O4ciBkZXQgbXVsaWd0IGF0IG92ZXJmw7hyZSBlbmh2ZXIgYXBwIHRpbCBldCBla3N0ZXJudCBsYWdlciB1YWZow6ZuZ2lndCBhZiBtYW5pZmVzdHbDpnJkaWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVHZpbmcgYWt0aXZpdGV0ZXIgdGlsIGF0IGt1bm5lIHRpbHBhc3NlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iU8O4cmdlciBmb3IsIGF0IGFsbGUgYWt0aXZpdGV0ZXIga2FuIHRpbHBhc3NlcyBmbGVyZSB2aW5kdWVyIHVhZmjDpm5naWd0IGFmIG1hbmlmZXN0dsOmcmRpZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWt0aXbDqXIgdmluZHVlciBpIGZyaXQgZm9ybWF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBa3RpdmVyZXIgdW5kZXJzdMO4dHRlbHNlIGFmIGVrc3BlcmltZW50ZWxsZSB2aW5kdWVyIGkgZnJpdCBmb3JtYXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IktvZGUgdGlsIGxva2FsIHNpa2tlcmhlZHNrb3BpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJMb2thbGUgZnVsZHN0w6ZuZGlnZSBzaWtrZXJoZWRza29waWVyaW5nZXIgZXIgaSDDuGplYmxpa2tldCBpa2tlIGJlc2t5dHRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUcnlrIGZvciBhdCBza2lmdGUgZWxsZXIgZmplcm5lIGFkZ2FuZ3Nrb2RlbiB0aWwgZnVsZCBsb2thbCBzaWtrZXJoZWRza29waWVyaW5nIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkRlYWt0aXZlcmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWx0aWQgc2zDpWV0IHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldy1pbXBsZW1lbnRlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJLb25maWd1cmVyIFdlYlZpZXctaW1wbGVtZW50ZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJEZW4gdmFsZ3RlIFdlYlZpZXctaW1wbGVtZW50ZXJpbmcgZXIgZGVha3RpdmVyZXQgb2cgc2thbCBha3RpdmVyZXMsIGbDuHIgZGVuIGthbiBicnVnZXMuIFZpbCBkdSBha3RpdmVyZSBkZW4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iS29udmVydMOpciB0aWwgZmlsa3J5cHRlcmluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iS29udmVydMOpcuKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iQWxsZXJlZGUgZmlsa3J5cHRlcmV0Ijwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJLb3JyaWdlciBmYXJ2ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkRlbm5lIGZ1bmt0aW9uIGVyIGVrc3BlcmltZW50ZWwgb2cga2FuIHDDpXZpcmtlIHlkZWV2bmVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlRpbHNpZGVzYXQgYWYgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIGNhLiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdGlsYmFnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdGlsIGZ1bGR0IG9wbGFkZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdGlsIGZ1bGR0IG9wbGFkZXQgbWVkIGFkYXB0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdGlsIGZ1bGR0IG9wbGFkZXQgbWVkIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0aWwgZnVsZHQgb3BsYWRldCBtZWQgdHLDpWRsw7hzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iVWtlbmR0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJPcGxhZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJPcGxhZG5pbmcgbWVkIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iT3BsYWRuaW5nIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IlRyw6VkbMO4cyBvcGxhZG5pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iT3BsYWRlciBpa2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iT3BsYWRlciBpa2tlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkZ1bGQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvYXJyYXlzLnhtbAppbmRleCBkMmE3ZjBkLi5hOWM4MDJkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRlL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIRENQLVByw7xmdW5nIGltbWVyIHZlcndlbmRlbiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0LjAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1Ni4wMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMcKgTWlvLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1pby4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTbCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iQXVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1Ni4wMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTWlvLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTWlvLiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0LjAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoE1pby4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQXVzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoE1pby4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NC4wMDAgcHJvIFB1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYuMDAwIHBybyBQdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjTCoE1pby4gcHJvIFB1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNsKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkF1cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NC4wMDAgcHJvIFB1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYuMDAwIHBybyBQdWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMcKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjTCoE1pby4gcHJvIFB1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNsKgTWlvLiBwcm8gUHVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBhdXMiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKaW5kZXggOWI2MGIyMC4uOGQ5NWRkZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iRXJtw7ZnbGljaHQgZXMgamVkZXIgcXVhbGlmaXppZXJ0ZW4gQXBwLCBEYXRlbiBhdWYgZXh0ZXJuZW4gU3BlaWNoZXIgenUgc2NocmVpYmVuLCB1bmFiaMOkbmdpZyB2b24gZGVuIE1hbmlmZXN0d2VydGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iQW5wYXNzZW4gZGVyIEdyw7bDn2Ugdm9uIEFrdGl2aXTDpHRlbiBlcnp3aW5nZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkVybcO2Z2xpY2h0IGVzLCBkaWUgR3LDtsOfZSBhbGxlciBBa3Rpdml0w6R0ZW4gYW4gZGVuIE1laHJmZW5zdGVybW9kdXMgYW56dXBhc3NlbiwgdW5hYmjDpG5naWcgdm9uIGRlbiBNYW5pZmVzdHdlcnRlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJGcmVpZm9ybS1GZW5zdGVyIHp1bGFzc2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJVbnRlcnN0w7x0enQgZXhwZXJpbWVudGVsbGUgRnJlaWZvcm0tRmVuc3Rlci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iRGVza3RvcC1TaWNoZXJ1bmdzcGFzc3dvcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlZvbGxzdMOkbmRpZ2UgRGVza3RvcC1TaWNoZXJ1bmdlbiBzaW5kIG1vbWVudGFuIG5pY2h0IHBhc3N3b3J0Z2VzY2jDvHR6dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iWnVtIMOEbmRlcm4gb2RlciBFbnRmZXJuZW4gZGVzIFBhc3N3b3J0cyBmw7xyIHZvbGxzdMOkbmRpZ2UgRGVza3RvcC1TaWNoZXJ1bmdlbiBiZXLDvGhyZW4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkRlYWt0aXZpZXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iSW1tZXIgYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGlzY2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3LUltcGxlbWVudGllcnVuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3LUltcGxlbWVudGllcnVuZyBmZXN0bGVnZW4iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJadSBEYXRlaXZlcnNjaGzDvHNzZWx1bmcgd2VjaHNlbG4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IldlY2hzZWxu4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJEYXRlaXZlcnNjaGzDvHNzZWx1bmcgd2lyZCBiZXJlaXRzIHZlcndlbmRldC4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkZhcmJrb3JyZWt0dXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkhpZXJiZWkgaGFuZGVsdCBlcyBzaWNoIHVtIGVpbmUgZXhwZXJpbWVudGVsbGUgRnVua3Rpb24uIERpZXMga2FubiBzaWNoIGF1ZiBkaWUgTGVpc3R1bmcgYXVzd2lya2VuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IkF1w59lciBLcmFmdCBnZXNldHp0IHZvbiBcIjx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIG5vY2ggZXR3YSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgdm9sbCBpbiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBiZWkgU3Ryb21hbnNjaGx1c3Mgdm9sbCBpbiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyDDvGJlciBVU0Igdm9sbCBpbiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBiZWkga2FiZWxsb3NlbSBMYWRlbiB2b2xsIGluIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlVuYmVrYW5udCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iV2lyZCBhdWZnZWxhZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJMYWRlbiDDvGJlciBOZXR6dGVpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkxhZGVuIMO8YmVyIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iS2FiZWxsb3NlcyBMYWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJXaXJkIG5pY2h0IGdlbGFkZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJXaXJkIG5pY2h0IGdlbGFkZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iVm9sbCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbC9hcnJheXMueG1sCmluZGV4IDI2NzJlZWMuLjkxZjlkNmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZWwvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+Is6dzrEgz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM+AzqzOvc+EzrEgzq3Ou861zrPPh86/z4IgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4izpHOvc61zr3Otc+BzrPPjCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLOkc69zrXOvc61z4HOs8+MIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSyDOsc69zqwgzrzOtc6zLs+Az4EuzrzOvS7Ous6xz4TOsc6zz4EuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLIM6xzr3OrCDOvM61zrMuz4DPgS7OvM69Ls66zrHPhM6xzrPPgS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSDOnCDOsc69zqwgzrzOtc6zLs+Az4EuzrzOvS7Ous6xz4TOsc6zz4EuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSDOsc69zqwgzrzOtc6zLs+Az4EuzrzOvS7Ous6xz4TOsc6zz4EuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0gzrHOvc6sIM68zrXOsy7PgM+BLs68zr0uzrrOsc+EzrHOs8+BLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLOkc69zrXOvc61z4HOs8+MIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgzrHOvc6sIM+Az4EuIM68zr0uIM6xz4HPhy4gzrrOsc+EzrHOs8+BLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyDOsc69zqwgz4DPgS4gzrzOvS4gzrHPgc+HLiDOus6xz4TOsc6zz4EuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgzpwgzrHOvc6sIM+Az4HOv8+DLiDOvM69LiDOsc+Bz4cuIM66zrHPhM6xzrPPgS4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIM6xzr3OrCDPgM+Bzr/Pgy4gzrzOvS4gzrHPgc+HLiDOus6xz4TOsc6zz4EuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gzrHOvc6sIM+Az4EuIM68zr0uIM6xz4HPhy4gzrrOsc+EzrHOs8+BLiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLOms65zr3Ov8+NzrwuzrXOuc66z4zOvc61z4IgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc63zrzOrc69zrXPgiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAppbmRleCAwMDg0OTFmLi4zMDNmMGU1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLOms6szr3Otc65IM66zqzOuM61IM61z4bOsc+BzrzOv86zzq4gzrrOsc+EzqzOu867zrfOu863IM6zzrnOsSDOtc6zzrPPgc6xz4bOriDPg861IM61zr7Pic+EzrXPgc65zrrPjCDPh8+Oz4HOvyDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CLCDOsc69zrXOvs6sz4HPhM63z4TOsSDOsc+Az4wgz4TOuc+CIM+EzrnOvM6tz4Igz4TOv8+FIM68zrHOvc65z4bOrc+Dz4TOv8+FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4izpHOvc6xzrPOus6xz4PPhM65zrrOriDOtM+Fzr3Osc+Ez4zPhM63z4TOsSDOsc67zrvOsc6zzq7PgiDOvM61zrPOrc64zr/Phc+CIM60z4HOsc+Dz4TOt8+BzrnOv8+Ezq7PhM+Jzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Is6dzrEgzq3Ph86/z4XOvSDPjM67zrXPgiDOv865IM60z4HOsc+Dz4TOt8+BzrnPjM+EzrfPhM61z4IgzrTPhc69zrHPhM+Mz4TOt8+EzrEgzrHOu867zrHOs86uz4IgzrzOtc6zzq3OuM6/z4XPgiDOs865zrEgz4TOt869IM+Az4HOv86yzr/Ou86uIM+Azr/Ou867zrHPgM67z47OvSDPgM6xz4HOsc64z43Pgc+Jzr0sIM6xzr3Otc6+zqzPgc+EzrfPhM6xIM6xz4DPjCDPhM65z4Igz4TOuc68zq3PgiDPhM6/z4UgzrzOsc69zrnPhs6tz4PPhM6/z4UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4izpXOvc61z4HOs86/z4DOv86vzrfPg863IM+AzrHPgc6xzrjPjc+Bz4nOvSDOtc67zrXPjc64zrXPgc63z4IgzrzOv8+Bz4bOrs+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLOlc69zrXPgc6zzr/PgM6/zrnOtc6vIM+EzrfOvSDPhc+Azr/Pg8+Ezq7Pgc65zr7OtyDOs865zrEgz4DOtc65z4HOsc68zrHPhM65zrrOrCDPgM6xz4HOrM64z4XPgc6xIM61zrvOtc+NzrjOtc+BzrfPgiDOvM6/z4HPhs6uz4IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Is6Vz4YvzrrPjM+CIM66z4nOtM65zrrPjM+CIGRlc2t0b3AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+Is6kzrEgz4DOu86uz4HOtyDOsc69z4TOr86zz4HOsc+GzrEgzrHPg8+GzrHOu861zq/Osc+CIM61z4DOuc+GzqzOvc61zrnOsc+CIM61z4HOs86xz4POr86xz4IgzrTOtc69IM+Az4HOv8+Dz4TOsc+EzrXPjc6/zr3PhM6xzrkgzrHPhc+Ezq7OvSDPhM63IM+Dz4TOuc6zzrzOriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLOkc6zzrPOr86+z4TOtSDOs865zrEgzrHOu867zrHOs86uIM6uIM66zrHPhM6sz4HOs863z4POtyDPhM6/z4UgzrrPic60zrnOus6/z40gz4DPgc+Mz4POss6xz4POt8+CIM6zzrnOsSDPhM6xIM+AzrvOrs+BzrcgzrHOvc+Ezq/Os8+BzrHPhs6xIM6xz4PPhs6xzrvOtc6vzrHPgiDOtc+AzrnPhs6szr3Otc65zrHPgiDOtc+BzrPOsc+Dzq/Osc+CIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLOkc69zrXOvc61z4HOs8+MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4izqDOrM69z4TOsSDOtc69zrXPgc6zz4wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4izpHPhc+Ez4zOvM6xz4TOvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+Is6lzrvOv8+Azr/Or863z4POtyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+Is6fz4HOuc+DzrzPjM+CIM+FzrvOv8+Azr/Or863z4POt8+CIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLOnM61z4TOsc+Ez4HOv8+Azq4gz4POtSDOus+Bz4XPgM+Ezr/Os8+BzqzPhs63z4POtyDOsc+Bz4fOtc6vzr/PhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4izpzOtc+EzrHPhM+Bzr/PgM6u4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLOnM61IM66z4HPhc+Az4TOv86zz4HOrM+GzrfPg863IM6xz4HPh861zq/Ov8+FIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLOlM65z4zPgc64z4nPg863IM+Hz4HPic68zqzPhM+Jzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+Is6Rz4XPhM6uIM63IM67zrXOuc+Ezr/Phc+BzrPOr86xIM61zq/Ovc6xzrkgz4DOtc65z4HOsc68zrHPhM65zrrOriDOus6xzrkgzrXOvc60zrXPh86/zrzOrc69z4nPgiDOvc6xIM61z4DOt8+BzrXOrM+DzrXOuSDPhM65z4IgzrXPgM65zrTPjM+DzrXOuc+CLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Is6Rzr3PhM65zrrOsc+EzrHPg8+EzqzOuM63zrrOtSDOsc+Az4wgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDOsc+Azr/OvM6tzr3Ov8+Fzr0gz4DOtc+Bzq/PgM6/z4UgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IM6zzrnOsSDPgM67zq7Pgc63IM+Gz4zPgc+EzrnPg863Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDOs865zrEgz4DOu86uz4HOtyDPhs+Mz4HPhM65z4POtyDOvM61IM+Gzr/Pgc+EzrnPg8+Ezq4gQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IM6zzrnOsSDPgM67zq7Pgc63IM+Gz4zPgc+EzrnPg863IM68zq3Pg8+JIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gzrPOuc6xIM+AzrvOrs+BzrcgzrHPg8+Nz4HOvM6xz4TOtyDPhs+Mz4HPhM65z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Is6GzrPOvc+Jz4PPhM6/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLOps+Mz4HPhM65z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4izqbPjM+Bz4TOuc+DzrcgzrzOtSBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Is6mz4zPgc+EzrnPg863IM68zq3Pg8+JIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4izpHPg8+Nz4HOvM6xz4TOtyDPhs+Mz4HPhM65z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLOlM61zr0gz4bOv8+Bz4TOr862zrXOuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Is6UzrXOvSDPhs6/z4HPhM6vzrbOtc65Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Is6gzrvOrs+BzrfPgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckFVL2FycmF5cy54bWwKaW5kZXggMjEzNDBkOC4uMDU1MTg5MDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckFVL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iQWx3YXlzIHVzZSBIRENQIGNoZWNraW5nIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdGlvbiBvZmYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJBVS9zdHJpbmdzLnhtbAppbmRleCBkYWJjNzJlZi4uYjkzOGFjZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJNYWtlcyBhbnkgYXBwIGVsaWdpYmxlIHRvIGJlIHdyaXR0ZW4gdG8gZXh0ZXJuYWwgc3RvcmFnZSwgcmVnYXJkbGVzcyBvZiBtYW5pZmVzdCB2YWx1ZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3JjZSBhY3Rpdml0aWVzIHRvIGJlIHJlLXNpemFibGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1ha2VzIGFsbCBhY3Rpdml0aWVzIHJlLXNpemFibGUgZm9yIG11bHRpLXdpbmRvdywgcmVnYXJkbGVzcyBvZiBtYW5pZmVzdCB2YWx1ZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iRW5hYmxlIGZyZWVmb3JtIHdpbmRvd3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkVuYWJsZXMgc3VwcG9ydCBmb3IgZXhwZXJpbWVudGFsIGZyZWVmb3JtIHdpbmRvd3MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRlc2t0b3AgYmFja3VwIHBhc3N3b3JkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJEZXNrdG9wIGZ1bGwgYmFja3VwcyBhcmVuXCd0IGN1cnJlbnRseSBwcm90ZWN0ZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG91Y2ggdG8gY2hhbmdlIG9yIHJlbW92ZSB0aGUgcGFzc3dvcmQgZm9yIGRlc2t0b3AgZnVsbCBiYWNrdXBzIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkRpc2FibGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWx3YXlzIG9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRpYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcgaW1wbGVtZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iU2V0IFdlYlZpZXcgaW1wbGVtZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJUaGUgY2hvc2VuIFdlYlZpZXcgaW1wbGVtZW50YXRpb24gaXMgZGlzYWJsZWQgYW5kIG11c3QgYmUgZW5hYmxlZCB0byBiZSB1c2VkLCBkbyB5b3Ugd2lzaCB0byBlbmFibGUgaXQ/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydCB0byBmaWxlIGVuY3J5cHRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IkNvbnZlcnTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkFscmVhZHkgZmlsZSBlbmNyeXB0ZWQiPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkNvbG91ciBjb3JyZWN0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgYWZmZWN0IHBlcmZvcm1hbmNlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ik92ZXJyaWRkZW4gYnkgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIGFwcHJveC4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGxlZnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdW50aWwgZnVsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdW50aWwgZnVsbCBvbiBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdW50aWwgZnVsbCBvdmVyIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdW50aWwgZnVsbCBmcm9tIHdpcmVsZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iVW5rbm93biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQ2hhcmdpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkNoYXJnaW5nIG9uIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iQ2hhcmdpbmcgb3ZlciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkNoYXJnaW5nIHdpcmVsZXNzbHkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTm90IGNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTm90IGNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkZ1bGwiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJHQi9hcnJheXMueG1sCmluZGV4IDIxMzQwZDguLjA1NTE4OTAwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJHQi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkFsd2F5cyB1c2UgSERDUCBjaGVja2luZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iT2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXRpb24gb2ZmIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggZGFiYzcyZWYuLmI5MzhhY2UgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTWFrZXMgYW55IGFwcCBlbGlnaWJsZSB0byBiZSB3cml0dGVuIHRvIGV4dGVybmFsIHN0b3JhZ2UsIHJlZ2FyZGxlc3Mgb2YgbWFuaWZlc3QgdmFsdWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yY2UgYWN0aXZpdGllcyB0byBiZSByZS1zaXphYmxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJNYWtlcyBhbGwgYWN0aXZpdGllcyByZS1zaXphYmxlIGZvciBtdWx0aS13aW5kb3csIHJlZ2FyZGxlc3Mgb2YgbWFuaWZlc3QgdmFsdWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkVuYWJsZSBmcmVlZm9ybSB3aW5kb3dzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJFbmFibGVzIHN1cHBvcnQgZm9yIGV4cGVyaW1lbnRhbCBmcmVlZm9ybSB3aW5kb3dzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJEZXNrdG9wIGJhY2t1cCBwYXNzd29yZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iRGVza3RvcCBmdWxsIGJhY2t1cHMgYXJlblwndCBjdXJyZW50bHkgcHJvdGVjdGVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvdWNoIHRvIGNoYW5nZSBvciByZW1vdmUgdGhlIHBhc3N3b3JkIGZvciBkZXNrdG9wIGZ1bGwgYmFja3VwcyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEaXNhYmxlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkFsd2F5cyBvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3IGltcGxlbWVudGF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlNldCBXZWJWaWV3IGltcGxlbWVudGF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iVGhlIGNob3NlbiBXZWJWaWV3IGltcGxlbWVudGF0aW9uIGlzIGRpc2FibGVkIGFuZCBtdXN0IGJlIGVuYWJsZWQgdG8gYmUgdXNlZCwgZG8geW91IHdpc2ggdG8gZW5hYmxlIGl0PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkNvbnZlcnQgdG8gZmlsZSBlbmNyeXB0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ04oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJBbHJlYWR5IGZpbGUgZW5jcnlwdGVkIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJDb2xvdXIgY29ycmVjdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iVGhpcyBmZWF0dXJlIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGFmZmVjdCBwZXJmb3JtYW5jZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJPdmVycmlkZGVuIGJ5IDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBhcHByb3guIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBsZWZ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHVudGlsIGZ1bGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHVudGlsIGZ1bGwgb24gQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHVudGlsIGZ1bGwgb3ZlciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHVudGlsIGZ1bGwgZnJvbSB3aXJlbGVzcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlVua25vd24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJDaGFyZ2luZyBvbiBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkNoYXJnaW5nIG92ZXIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJDaGFyZ2luZyB3aXJlbGVzc2x5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ik5vdCBjaGFyZ2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik5vdCBjaGFyZ2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJGdWxsIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1ySU4vYXJyYXlzLnhtbAppbmRleCAyMTM0MGQ4Li4wNTUxODkwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lbi1ySU4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJBbHdheXMgdXNlIEhEQ1AgY2hlY2tpbmciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJPZmYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aW9uIG9mZiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sCmluZGV4IGRhYmM3MmVmLi5iOTM4YWNlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1ha2VzIGFueSBhcHAgZWxpZ2libGUgdG8gYmUgd3JpdHRlbiB0byBleHRlcm5hbCBzdG9yYWdlLCByZWdhcmRsZXNzIG9mIG1hbmlmZXN0IHZhbHVlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcmNlIGFjdGl2aXRpZXMgdG8gYmUgcmUtc2l6YWJsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTWFrZXMgYWxsIGFjdGl2aXRpZXMgcmUtc2l6YWJsZSBmb3IgbXVsdGktd2luZG93LCByZWdhcmRsZXNzIG9mIG1hbmlmZXN0IHZhbHVlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJFbmFibGUgZnJlZWZvcm0gd2luZG93cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iRW5hYmxlcyBzdXBwb3J0IGZvciBleHBlcmltZW50YWwgZnJlZWZvcm0gd2luZG93cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iRGVza3RvcCBiYWNrdXAgcGFzc3dvcmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkRlc2t0b3AgZnVsbCBiYWNrdXBzIGFyZW5cJ3QgY3VycmVudGx5IHByb3RlY3RlZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb3VjaCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIHRoZSBwYXNzd29yZCBmb3IgZGVza3RvcCBmdWxsIGJhY2t1cHMiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRGlzYWJsZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJBbHdheXMgb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGljIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldyBpbXBsZW1lbnRhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJTZXQgV2ViVmlldyBpbXBsZW1lbnRhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IlRoZSBjaG9zZW4gV2ViVmlldyBpbXBsZW1lbnRhdGlvbiBpcyBkaXNhYmxlZCBhbmQgbXVzdCBiZSBlbmFibGVkIHRvIGJlIHVzZWQsIGRvIHlvdSB3aXNoIHRvIGVuYWJsZSBpdD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJDb252ZXJ0IHRvIGZpbGUgZW5jcnlwdGlvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iQWxyZWFkeSBmaWxlIGVuY3J5cHRlZCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iQ29sb3VyIGNvcnJlY3Rpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IlRoaXMgZmVhdHVyZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBhZmZlY3QgcGVyZm9ybWFuY2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iT3ZlcnJpZGRlbiBieSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgYXBwcm94LiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gbGVmdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIG9uIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIG92ZXIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIGZyb20gd2lyZWxlc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJVbmtub3duIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJDaGFyZ2luZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQ2hhcmdpbmcgb24gQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJDaGFyZ2luZyBvdmVyIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iQ2hhcmdpbmcgd2lyZWxlc3NseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOb3QgY2hhcmdpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJOb3QgY2hhcmdpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRnVsbCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL2FycmF5cy54bWwKaW5kZXggNTI5OTJkNTUuLjFiN2E5ZjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy1yVVMvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iU2llbXByZSB1dGlsaXphciBjb21wcm9iYWNpw7NuIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NMKgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NsKgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxwqBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjTCoE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTbCoE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjTCoEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTbCoEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTbCoE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NMKgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTbCoEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMcKgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEZXNhY3RpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NMKgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTbCoEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMcKgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0wqBLL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTbCoEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjHCoE0vYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjTCoE0vYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2wqBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJEZXNhY3RpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NMKgSy9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2wqBLL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxwqBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0wqBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNsKgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFjacOzbiBkZXNhY3RpdmFkYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzLXJVUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCmluZGV4IDI2MTI5NDMuLjlkZGMwM2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQ3VhbHF1aWVyIGFwbGljYWNpw7NuIHB1ZWRlIGVzY3JpYmlyc2UgZW4gdW5hIG1lbW9yaWEgZXh0ZXJuYSwgaW5kZXBlbmRpZW50ZW1lbnRlIGRlIGxvcyB2YWxvcmVzIGRlbCBtYW5pZmllc3RvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcnphciBhY3RpdmlkYWRlcyBwYXJhIHF1ZSBjYW1iaWVuIGRlIHRhbWHDsW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlBlcm1pdGUgcXVlIHRvZGFzIGxhcyBhY3RpdmlkYWRlcyBwdWVkYW4gY2FtYmlhciBkZSB0YW1hw7FvIHBhcmEgZWwgbW9kbyBtdWx0aXZlbnRhbmEsIHNpbiBpbXBvcnRhciBsb3MgdmFsb3JlcyBkZWwgbWFuaWZpZXN0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJIYWJpbGl0YXIgdmVudGFuYXMgZGUgZm9ybWEgbGlicmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkhhYmlsaXRhIGxhIGFkbWlzacOzbiBkZSB2ZW50YW5hcyBkZSBmb3JtYSBsaWJyZSBleHBlcmltZW50YWxlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2XDsWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJUdXMgY29waWFzIGRlIHNlZ3VyaWRhZCBkZSBlc2NyaXRvcmlvIG5vIGVzdMOhbiBwcm90ZWdpZGFzIHBvciBjb250cmFzZcOxYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9jYSBwYXJhIGNhbWJpYXIgbyBlbGltaW5hciBsYSBjb250cmFzZcOxYSBkZSBsYXMgY29waWFzIGRlIHNlZ3VyaWRhZCBjb21wbGV0YXMgZGUgdHUgZXNjcml0b3Jpby4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkluaGFiaWxpdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlNpZW1wcmUgYWN0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23DoXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhY2nDs24gZGUgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJDb25maWd1cmFyIGxhIGltcGxlbWVudGFjacOzbiBkZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGlyIGEgZW5jcmlwdGFjacOzbiBkZSBhcmNoaXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ0aXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IllhIGVzdMOhIGVuY3JpcHRhZG8iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkNvcnJlY2Npw7NuIGRlIGNvbG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJFc3RhIGZ1bmNpw7NuIGVzIGV4cGVyaW1lbnRhbCB5IHB1ZWRlIGFmZWN0YXIgZWwgcmVuZGltaWVudG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iUmVlbXBsYXphZG8gcG9yIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+OiBhbHJlZGVkb3IgZGUgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHBhcmEgY29tcGxldGFyIGxhIGNhcmdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPjogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBwYXJhIGNvbXBsZXRhciBsYSBjYXJnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBwYXJhIGNvbXBsZXRhciBsYSBjYXJnYSBwb3IgQ0EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+OiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgbGEgY2FyZ2EgcG9yIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz46IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBwYXJhIGNvbXBsZXRhciBsYSBjYXJnYSBpbmFsw6FtYnJpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJEZXNjb25vY2lkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQ2FyZ2FuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkNhcmdhIGVuIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iQ2FyZ2EgY29uIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iQ2FyZ2EgaW5hbMOhbWJyaWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ik5vIHNlIGVzdMOhIGNhcmdhbmRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik5vIHNlIHJlYWxpemEgbGEgY2FyZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iQ2FyZ2FkbyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9hcnJheXMueG1sCmluZGV4IDA0OTMyMTcuLmU0YjY2MWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpemFyIHNpZW1wcmUgY29tcHJvYmFjacOzbiBkZSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJObyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJObyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLL2LDumZlciByZWdpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE0vYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iTm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvYsO6ZmVyIHJlZ2lzdHJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS9iw7pmZXIgcmVnaXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL2LDumZlciByZWdpc3RybyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpw7NuIGRlc2FjdGl2YWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCmluZGV4IDAyYTgzMDYuLmYwNjgyYzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkhhY2UgcXVlIGN1YWxxdWllciBhcGxpY2FjacOzbiBzZSBwdWVkYSBlc2NyaWJpciBlbiB1biBkaXNwb3NpdGl2byBkZSBhbG1hY2VuYW1pZW50byBleHRlcm5vLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgbG9zIHZhbG9yZXMgZGVmaW5pZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yemFyIGVsIGFqdXN0ZSBkZSB0YW1hw7FvIGRlIGxhcyBhY3RpdmlkYWRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWl0ZSBxdWUgc2UgcHVlZGEgYWp1c3RhciBlbCB0YW1hw7FvIGRlIHRvZGFzIGxhcyBhY3RpdmlkYWRlcyBwYXJhIGVsIG1vZG8gbXVsdGl2ZW50YW5hLCBpbmRlcGVuZGllbnRlbWVudGUgZGUgbG9zIHZhbG9yZXMgZXN0YWJsZWNpZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkhhYmlsaXRhciB2ZW50YW5hcyBkZSBmb3JtYSBsaWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iUGVybWl0ZSB1dGlsaXphciB2ZW50YW5hcyBkZSBmb3JtYSBsaWJyZSBleHBlcmltZW50YWxlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2XDsWEgcGFyYSBjb3BpYXMgZGUgb3JkZW5hZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJMYXMgY29waWFzIGRlIHNlZ3VyaWRhZCBjb21wbGV0YXMgZGUgb3JkZW5hZG9yIG5vIGVzdMOhbiBwcm90ZWdpZGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvY2FyIHBhcmEgY2FtYmlhciBvIHF1aXRhciBsYSBjb250cmFzZcOxYSBwYXJhIGxhcyBjb3BpYXMgZGUgc2VndXJpZGFkIGNvbXBsZXRhcyBkZSBvcmRlbmFkb3IiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkluaGFiaWxpdGFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlNpZW1wcmUgYWN0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23DoXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhY2nDs24gZGUgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJFc3RhYmxlY2VyIGltcGxlbWVudGFjacOzbiBkZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGlyIGEgY2lmcmFkbyBkZSBhcmNoaXZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ0aXLigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IllhIGVzdMOhIGNpZnJhZG8iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkNvcnJlY2Npw7NuIGRlbCBjb2xvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iRXN0YSBmdW5jacOzbiBlcyBleHBlcmltZW50YWwgeSBwdWVkZSBhZmVjdGFyIGFsIHJlbmRpbWllbnRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IkFudWxhZG8gcG9yIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gUXVlZGFuIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhcHJveGltYWRhbWVudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgbGEgYmF0ZXLDrWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHBhcmEgY29tcGxldGFyIGxhIGJhdGVyw61hIGNvbiBDQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgbGEgYmF0ZXLDrWEgcG9yIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgbGEgYmF0ZXLDrWEgY29uIFdpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iRGVzY29ub2NpZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkNhcmdhbmRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJDYXJnYW5kbyBlbiBDQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkNhcmdhbmRvIHBvciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkNhcmdhbmRvIGRlIGZvcm1hIGluYWzDoW1icmljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJObyBzZSBlc3TDoSBjYXJnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik5vIHNlIGVzdMOhIGNhcmdhbmRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkNvbXBsZXRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldC1yRUUvYXJyYXlzLnhtbAppbmRleCA1YmYxM2JiLi45NzMxOTgzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+Ikthc3V0YSBhbGF0aSBIRENQLWtvbnRyb2xsaW1pc3QiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgMDAwIDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IDAwMCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgMDAwIDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJWw6RsamFzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSAwMDAgMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCAwMDAgMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IDAwMCAwMDAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCAwMDAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIDAwMCAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVsOkbGphcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCAwMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIDAwMCAwMDAiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrIC8gbG9naXB1aHZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgayAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBtbG4gLyBsb2dpcHVodmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgbWxuIC8gbG9naXB1aHZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBtbG4gLyBsb2dpcHVodmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlbDpGxqYXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgMDAwIC8gbG9naXB1aHZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgMDAwIC8gbG9naXB1aHZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIDAwMCAwMDAgLyBsb2dpcHVodmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgMDAwIDAwMCAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgMDAwIDAwMCAvIGxvZ2lwdWh2ZXIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0c2lvb24gdsOkbGphcyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCmluZGV4IDVmYjU1ZWIuLmZmN2Q3ZWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTHViYWIgcmFrZW5kdXNpIGtpcmp1dGFkYSB2w6RsaXNlc3NlIHNhbHZlc3R1c3J1dW1pIG9sZW5lbWF0YSBtYW5pZmVzdGkgdsOkw6RydHVzdGVzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+Ik11dWRhIHRlZ2V2dXN0ZSBzdXVydXNlZCBtdXVkZXRhdmFrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTXV1ZGFiIGvDtWlnaSB0ZWdldnVzdGUgc3V1cnVzZWQgbWl0bWUgYWtuYWdhIHZhYXRlcyBvbGVuZW1hdGEgbWFuaWZlc3RpIHbDpMOkcnR1c3Rlc3QgbXV1ZGV0YXZha3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iTHViYSB2YWJhcyB2b3JtaXMgYWtuYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Ikx1YmF0YWtzZSBrYXRzZWxpc3RlIHZhYmFzIHZvcm1pcyBha2VuZGUgdHVnaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQXJ2dXRpdmFydW5kdXNlIHBhcm9vbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVMOkaWVsaWt1ZCBhcnZ1dGl2YXJ1bmR1c2VkIHBvbGUgcHJhZWd1IGthaXRzdHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlB1dWR1dGFnZSwgZXQgbXV1dGEgdsO1aSBlZW1hbGRhZGEgdMOkaWVsaWtlIGFydnV0aXZhcnVuZHVzdGUgcGFyb29sIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJLZWVsYXR1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkFsYXRpIHNlZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hYXRuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXdcJyByYWtlbmRhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3XCcgcmFrZW5kYW1pc2Ugc2VhZGlzdGFtaW5lIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iVGVpc2VuZGFtaW5lIGZhaWxpa3LDvHB0ZWVyaW5ndWdhIGFuZG1ldGVrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iVGVpc2VuZGEg4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJKdWJhIGZhaWxpa3LDvHB0ZWVyaW5ndWdhIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJWw6RydmlwYXJhbmR1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iU2VlIGZ1bmt0c2lvb24gb24ga2F0c2VsaW5lIGphIHbDtWliIG3DtWp1dGFkYSB0b2ltaXZ1c3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iQWxpc3RhcyA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgasOkw6RudWQgb24gdW1iZXMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiwga3VuaSBha3Ugb24gdMOkaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4sIGt1bmkgYWt1IG9uIHTDpGlzICh2YWhlbGR1dnZvb2wpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+LCBrdW5pIGFrdSBvbiB0w6RpcyAoVVNCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiwga3VuaSBha3Ugb24gdMOkaXMgKGp1aHRtZXRhIGxhYWQuKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlR1bmRtYXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJMYWFkaW1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkxhYWQuIHZhaGVsZHV2di4tdi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJMYWFkaW1pbmUgVVNCIGthdWR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJKdWh0bWV2YWJhIGxhYWRpbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJFaSBsYWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJFaSBsYWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iVMOkaXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9hcnJheXMueG1sCmluZGV4IDcwN2FjZTUuLmI3MmI1MzcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZXUtckVTL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldS1yRVMvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iRXJhYmlsaSBiZXRpIEhEQ1AgZWdpYXp0YXBlbmEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkRlc2FrdGliYXR1dGEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVzYWt0aWJhdHV0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsgZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsgZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkRlc2FrdGliYXR1dGEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyBlcnJlZ2lzdHJvZW4gYnVmZmVycmVrbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIGVycmVnaXN0cm9lbiBidWZmZXJyZWtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gZXJyZWdpc3Ryb2VuIGJ1ZmZlcnJla28iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF6aW9hIGRlc2FrdGliYXR1dGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAppbmRleCA5ZjYyNzEwLi4xNDVlOGY4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkFwbGlrYXppb2VrIGthbnBva28gbWVtb3JpYW4gaWRhdHogZGV6YWtldGUsIG1hbmlmZXN0dWFyZW4gYmFsaW9hayBrb250dWFuIGl6YW4gZ2FiZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkJlaGFydHUgamFyZHVlcmVuIHRhbWFpbmEgZG9pdHUgYWhhbCBpemF0ZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1hbmlmZXN0dWFuIGphcnR6ZW4gZHVlbmEgamFydHplbiBkdWVsYSBlcmUsIGphcmR1ZXJhIGd1enRpZW4gdGFtYWluYSBkb2l0emVrbyBhdWtlcmEgZW1hdGVuIGR1LCBoYWluYmF0IGxlaWhvdGFuIGVyYWJpbGkgYWhhbCBpemFuIGRhaXRlemVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkdhaXR1IGVzdGlsbyBsaWJyZWtvIGxlaWhvYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkVzdGlsbyBsaWJyZWtvIGxlaWhvIGVzcGVyaW1lbnRhbGFrIG9uYXJ0emVuIGRpdHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlRva2lrbyBiYWJlc2tvcC4gcGFzYWhpdHphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJVbmUgaG9uZXRhbiwgb3JkZW5hZ2FpbHVrbyBiYWJlc2tvcGlhIG9zb2FrIGV6IGRhdWRlIGJhYmVzdHV0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVWtpdHUgb3JkZW5hZ2FpbHVrbyBiYWJlc2tvcGlhIG9zb2FrIGVnaXRla28gcGFzYWhpdHphIGFsZGF0emVrbyBlZG8ga2VudHpla28iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRGVzZ2FpdHV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkJldGkgYWt0aWJhdHV0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aWtvYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcgaW1wbGVtZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iU2V0IFdlYlZpZXcgaW1wbGVtZW50YXRpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJEZXNnYWl0dXRhIGRhZ28gYXVrZXJhdHUgZGVuIFdlYi1pa3VzdGFpbGVhcmVuIGlucGxlbWVudGF6aW9hLiBFcmFiaWxpIG5haGkgaXphbmV6IGdlcm8sIGdhaXR1IGVnaW4gYmVoYXIgZHV6dS4gR2FpdHUgbmFoaSBhbCBkdXp1PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkVtYW4gZml0eGF0ZWdpZXRhbiBvaW5hcnJpdHV0YWtvIGVua3JpcHRhdHplYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iRW5rcmlwdGF0deKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iRml0eGF0ZWdpZXRhbiBvaW5hcnJpdHV0YWtvIGVua3JpcHRhdHplYSBkYXVrYSBkYWdvZW5la28iPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvbG9yZS16dXplbmtldGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkVnaW5iaWRlYSBlc3BlcmltZW50YWxhIGRhIGV0YcKgZXJhZ2luYSBpemFuIGRlemFrZSBmdW50emlvbmFtZW5kdWFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ijx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4gaG9iZXNwZW5hIGdhaW5qYXJyaSB6YWlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiBpbmd1cnUuIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBnZXJhdHplbiBkKGlyKWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZ3V6dGl6IGthcmdhdHUgYXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4ga29ycm9udGVhcmVuIGJpZGV6IGd1enRpeiBrYXJnYXR1IGFydGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IFVTQiBiaWRleiBndXp0aXoga2FyZ2F0dSBhcnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBoYXJpcmlrIGdhYmUgZ3V6dGl6IGthcmdhdHUgYXJ0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkV6ZXphZ3VuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iS2FyZ2F0emVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJLQSBiaWRleiBrYXJnYXR6ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0IgYmlkZXoga2FyZ2F0emVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJIYXJpIGdhYmUga2FyZ2F0emVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IkV6IGRhIGthcmdhdHplbiBhcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJFeiBkYSBrYXJnYXR6ZW4gYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkJldGV0YSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9hcnJheXMueG1sCmluZGV4IGQ3NTI4MGIuLjFiNGUzMzUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmEvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZhL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuKAj9mH2YXbjNi02Ycg2KfYsiDYqNix2LHYs9uMIEhEQ1Ag2KfYs9iq2YHYp9iv2Ycg2LTZiNivIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4i27bbtCDaqduM2YTZiNio2KfbjNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4i27Lbtdu2INqp24zZhNmI2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4i27Eg2YXar9in2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4i27Qg2YXar9in2KjYp9uM2KoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4i27HbtiDZhdqv2KfYqNin24zYqiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLYrtin2YXZiNi0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+Itu227Qg2YfYstin2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiLbstu127Yg2YfYstin2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4i27Eg2YXbjNmE24zZiNmGIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4i27Qg2YXbjNmE24zZiNmGIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+Itux27Yg2YXbjNmE24zZiNmGIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4i27bbtCDaqduM2YTZiNio2KfbjNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+Ituy27XbtiDaqduM2YTZiNio2KfbjNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+ItuxINmF2q/Yp9io2KfbjNiqIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Itiu2KfZhdmI2LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4i27bbtCDZh9iy2KfYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiLbstu127Yg2YfYstin2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4i27Eg2YXbjNmE24zZiNmGIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4oCP27bbtEsg2K/YsSDYrdin2YHYuNmHINmF2YjZgtiqINir2KjYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLigI/bstu127ZL2K/YsSDYrdin2YHYuNmHINmF2YjZgtiqINir2KjYqiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLigI/bsU3Yr9ixINit2KfZgdi42Ycg2YXZiNmC2Kog2KvYqNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuKAj9u0TSDYr9ixINit2KfZgdi42Ycg2YXZiNmC2Kog2KvYqNiqIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuKAj9ux27ZNINiv2LEg2K3Yp9mB2LjZhyDZhdmI2YLYqiDYq9io2KoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i2K7Yp9mF2YjYtCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLbttu0INmH2LLYp9ixINiv2LEg2YfYsSDYqNin2YHYsSDar9iy2KfYsdi0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+Ituy27XbtiDZh9iy2KfYsSDYr9ixINmH2LEg2KjYp9mB2LEg2q/Ystin2LHYtCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLbsSDZhduM2YTbjNmI2YYg2K/YsSDZh9ixINio2KfZgdixINqv2LLYp9ix2LQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i27Qg2YXbjNmE24zZiNmGINiv2LEg2YfYsSDYqNin2YHYsSDar9iy2KfYsdi0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+Itux27Yg2YXbjNmE24zZiNmGINiv2LEg2YfYsSDYqNin2YHYsSDar9iy2KfYsdi0IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+Itm+2YjbjNin2YbZhdin24zbjCDYrtin2YXZiNi0IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCmluZGV4IDI1NTFiYTUuLjUzODA2NTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Itio2K/ZiNmGINiq2YjYrNmHINio2Ycg2YXZgtin2K/bjNixINmF2KfZhtuM2YHYs9iq2Iwg2YfYsSDYqNix2YbYp9mF2YfigIzYp9uMINix2Kcg2KjYsdin24wg2YbZiNi02KrZhiDYr9ixINit2KfZgdi42Ycg2K7Yp9ix2KzbjCDZiNin2KzYryDYtNix2KfbjNi3INmF24zigIzaqdmG2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLYp9is2KjYp9ixINmB2LnYp9mE24zYquKAjNmH2Kcg2KjZhyDZgtin2KjZhCDYqti624zbjNixINin2YbYr9in2LLZhyDYqNmI2K/ZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i2KjYr9mI2YYg2K/YsdmG2LjYsSDar9ix2YHYqtmGINmF2YLYp9iv24zYsSDZhdin2YbbjNmB2LPYqtiMINmH2YXZhyDZgdi52KfZhNuM2KrigIzZh9inINix2Kcg2KjYsdin24wg2obZhtiv2b7Zhtis2LHZhyDZgtin2KjZhCDYqti624zbjNixINin2YbYr9in2LLZhyDZhduM4oCM2qnZhtivLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ItmB2LnYp9mEINqp2LHYr9mGINm+2YbYrNix2YfigIzZh9in24wg2KLYstin2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Itm+2LTYqtuM2KjYp9mG24wg2KjYsdin24wg2b7Zhtis2LHZh+KAjNmH2KfbjCDYotiy2KfYryDYotiy2YXYp9uM2LTbjCDYsdinINin2YXaqdin2YbigIzZvtiw24zYsSDZhduM4oCM2qnZhtivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Itqv2LDYsdmI2KfamNmHINm+2LTYqtuM2KjYp9mG4oCM2q/bjNix24wg2YXYrdmE24wiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+Itm+2LTYqtuM2KjYp9mG4oCM2q/bjNix24wg2qnYp9mF2YQg2LHYp9uM2KfZhtmHINiv2LHYrdin2YQg2K3Yp9i22LEg2YXYrdin2YHYuNiqINmG2YXbjOKAjNi02YjYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLYqNix2KfbjCDYqti624zbjNixINuM2Kcg2K3YsNmBINqv2LDYsdmI2KfamNmHINio2LHYp9uMINmG2LPYrtmH4oCM2YfYp9uMINm+2LTYqtuM2KjYp9mGINqp2KfZhdmEINiv2LPaqeKAjNiq2KfZviDZhNmF2LMg2qnZhtuM2K8iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i2LrbjNix2YHYudin2YQg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i2YfZhduM2LTZhyDYsdmI2LTZhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLYrtmI2K/aqdin2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLigI/Yp9is2LHYp9uMIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i4oCP2KrZhti424zZhSDYp9is2LHYp9uMIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiLigI/ZvtuM2KfYr9mH4oCM2LPYp9iy24wgV2ViVmlldyDYp9mG2KrYrtin2KjigIzYtNiv2Ycg2LrbjNix2YHYudin2YQg2LTYr9mHINin2LPYqiDZiCDYqNix2KfbjCDYp9iz2KrZgdin2K/ZhyDYtNiv2YYg2KjYp9uM2K8g2YHYudin2YQg2LTZiNiv2Jsg2YXbjOKAjNiu2YjYp9mH24zYryDYotmGINix2Kcg2YHYudin2YQg2qnZhtuM2K/YnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+Itiq2KjYr9uM2YQg2KjZhyDYsdmF2LLar9iw2KfYsduMINio2LHYrdiz2Kgg2YHYp9uM2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+Itiq2KjYr9uM2YTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+Itin2LIg2YLYqNmEINio2Ycg2LHZhdiy2q/YsNin2LHbjCDYqNixINit2LPYqCDZgdin24zZhCDYqtio2K/bjNmEINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+Itiq2LXYrduM2K0g2LHZhtqvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLYp9uM2YYg2YLYp9io2YTbjNiqINii2LLZhdin24zYtNuMINin2LPYqiDZiCDZhdmF2qnZhiDYp9iz2Kog2LnZhdmE2qnYsdivINix2Kcg2KrYrdiqINiq2KPYq9uM2LEg2YLYsdin2LEg2K/Zh9ivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Itiq2YjYs9i3IDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4g2YTYutmIINi02K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g2KrZgtix24zYqNin2Ysg4oCPPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INio2KfZgtuMINmF2KfZhtiv2Ycg2KfYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOKAjzx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4oCPPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INiq2Kcg2LTYp9ix2pgg2qnYp9mF2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4oCPPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INiq2Kcg2LTYp9ix2pgg2qnYp9mF2YQg2KjYpyDYrNix24zYp9mGINmF2KrZhtin2YjYqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+IuKAjzx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDigI88eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g2KrYpyDYtNin2LHamCDaqdin2YXZhCDYp9iyINi32LHbjNmCIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDigI88eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g2KrYpyDYtNin2LHamCDaqdin2YXZhCDYqNmH4oCM2LfZiNixINio24zigIzYs9uM2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLZhtin2LTZhtin2LMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+Itiv2LEg2K3Yp9mEINi02KfYsdqYINi02K/ZhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i2LTYp9ix2pgg2KjYpyDYrNix24zYp9mGINmF2KrZhtin2YjYqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IuKAj9i02KfYsdqYINin2LIg2LfYsduM2YIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLYtNin2LHamCDYqNmHINi12YjYsdiqINio24zigIzYs9uM2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i2LTYp9ix2pgg2YbZhduM4oCM2LTZiNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i2LTYp9ix2pgg2YbZhduM4oCM2LTZiNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Itm+2LEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvYXJyYXlzLnhtbAppbmRleCA0MGQwNzg3Li4xNWU2ZTQwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZpL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1maS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJLw6R5dMOkIGFpbmEgSERDUC10YXJraXN0dXN0YSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IGt0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IGt0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTXQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJFaSBrw6R5dMO2c3PDpCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE10IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNdCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IGt0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBrdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE10IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkVpIGvDpHl0w7Zzc8OkIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IGt0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE10IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQga3QgLyBsb2tpcHVza3VyaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga3QgLyBsb2tpcHVza3VyaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE10IC8gbG9raXB1c2t1cmkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE10IC8gbG9raXB1c2t1cmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRWkga8OkeXTDtnNzw6QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQga3QgLyBsb2tpcHVza3VyaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYga3QgLyBsb2tpcHVza3VyaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE10IC8gbG9raXB1c2t1cmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNdCAvIGxva2lwdXNrdXJpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE10IC8gbG9raXB1c2t1cmkiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFhdGlvIHBvaXMga8OkeXTDtnN0w6QiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKaW5kZXggOGEwZTNiNS4uZjlmZGI2MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTWFoZG9sbGlzdGFhIHNvdmVsbHVzdGVuIHRhbGxlbnRhbWlzZW4gdWxrb2lzZWVuIHRhbGwudGlsYWFuIGx1ZXR0ZWxvc3RhIHJpaXBwdW1hdHRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iUGFrb3RhIGthaWtraSB0b2ltaW5ub3QgaHl2w6Rrc3ltw6TDpG4ga29vbiBtdXV0b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlBha290dGFhIGthaWtraSB0b2ltaW5ub3QgaHl2w6Rrc3ltw6TDpG4ga29vbiBtdXV0dGFtaXNlbiByaW5uYWtrYWlzbsOka3ltw6TDpG4gbHVldHRlbG9uIGFydm9pc3RhIHJpaXBwdW1hdHRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik90YSBrw6R5dHTDtsO2biB2YXBhYW11b3RvaXNldCBpa2t1bmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJPdHRhYSBrw6R5dHTDtsO2biBrb2tlZWxsaXN0ZW4gdmFwYWFtdW90b2lzdGVuIGlra3Vub2lkZW4gdHVlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iVmFybXV1c2tvcC4gc2FsYXNhbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlRpZXRva29uZWVuIGthaWtraWVuIHRpZXRvamVuIHZhcm11dXNrb3Bpb2ludGlhIGVpIG9sZSB0w6RsbMOkIGhldGtlbGzDpCBzdW9qYXR0dSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJNdXV0YSB0YWkgdmFpaGRhIHRpZXRva29uZWVuIGthaWtraWVuIHRpZXRvamVuIHZhcm11dXNrb3Bpb2lubmluIHNhbGFzYW5hIGtvc2tldHRhbWFsbGEiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkVpIGvDpHl0w7Zzc8OkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWluYSBrw6R5dMO2c3PDpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWFhdHRpbmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldy1rw6R5dHTDtsO2bm90dG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iTcOkw6RyaXTDpCBXZWJWaWV3LWvDpHl0dMO2w7Zub3R0byI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+Ik11dW5uYSB0aWVkb3N0b2plbiBzYWxhdWtzZWtzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iTXV1bm5h4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJUaWVkb3N0b3Qgb24gam8gc2FsYXR0dS4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IlbDpHJpa29yamF1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iVMOkbcOkIG9taW5haXN1dXMgb24ga29rZWVsbGluZW4gamEgdm9pIHZhaWt1dHRhYSBzdW9yaXR1c2t5a3l5bi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJUw6Rtw6RuIG9oaXR0YWEgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIG5vaW4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGrDpGxqZWxsw6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGt1bm5lcyB0w6R5bm7DpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBrdW5uZXMgdMOkeW5uw6QgKGxhdHVyaWxhdGF1cykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4ga3VubmVzIHTDpHlubsOkIChVU0ItbGF0YXVzKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBrdW5uZXMgdMOkeW5uw6QgKFdpRmktbGF0YXVzKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlR1bnRlbWF0b24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkxhZGF0YWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJMYXR1cmlsYXRhdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0ItbGF0YXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJMYW5nYXRvbiBsYXRhdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iRWkgbGF0dXJpc3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iRWkgbGF0dXJpc3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IlTDpHlubsOkIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci1yQ0EvYXJyYXlzLnhtbAppbmRleCA3MTRkYmU0Li5hYjQ4MTAzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlRvdWpvdXJzIHV0aWxpc2VyIGxhIHbDqXJpZmljYXRpb24gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0wqBrbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NsKga28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNbyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1vIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoGtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NsKga28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEw6lzYWN0aXbDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNbyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjHCoGtvL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NsKgS28vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMcKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNMKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTbCoE1vL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkTDqXNhY3RpdsOpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtvL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLby90YW1wb24gam91cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1vL3RhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aW9uIGTDqXNhY3RpdsOpZSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCmluZGV4IGYyYzc5ZGUuLjlmODAyYWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iUGVybWV0IGVucmVnLiBkXCdhcHBsaXMgc3VyIGVzcGFjZSBzdG9ja2FnZSBleHRlcm5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yY2VyIGxlcyBhY3Rpdml0w6lzIMOgIMOqdHJlIHJlZGltZW5zaW9ubmFibGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQZXJtZXQgZGUgcmVkaW1lbnNpb25uZXIgdG91dGVzIGxlcyBhY3Rpdml0w6lzIHBvdXIgbGUgbW9kZSBtdWx0aWZlbsOqdHJlLCBpbmTDqXBlbmRhbW1lbnQgZGVzIHZhbGV1cnMgZHUgZmljaGllciBtYW5pZmVzdGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWN0aXZlciBsZXMgZmVuw6p0cmVzIGRlIGZvcm1lIGxpYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBY3RpdmUgbGEgY29tcGF0aWJpbGl0w6kgYXZlYyBsZXMgZmVuw6p0cmVzIGRlIGZvcm1lIGxpYnJlIGV4cMOpcmltZW50YWxlcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iTW90IGRlIHBhc3NlIHNhdXZlZ2FyZGUgUEMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkxlcyBzYXV2ZWdhcmRlcyBjb21wbMOodGVzIHN1ciBQQyBuZSBzb250IHBhcyBwcm90w6lnw6llcyBhY3R1ZWxsZW1lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IkFwcHV5ZXogcG91ciBtb2RpZmllciBvdSBzdXBwcmltZXIgbGUgbW90IGRlIHBhc3NlIHV0aWxpc8OpIHBvdXIgbGVzIHNhdXZlZ2FyZGVzIGNvbXBsw6h0ZXMgc3VyIFBDLiI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRMOpc2FjdGl2w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJUb3Vqb3VycyBhY3RpZiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aXF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+Ik1pc2UgZW4gxZN1dnJlIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iRMOpZmluaXIgbGEgbWlzZSBlbiDFk3V2cmUgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkNvbnZlcnRpciBlbiBjaGlmZnJlbWVudCBiYXPDqSBzdXIgdW4gZmljaGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGlyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJEw6lqw6AgY2hpZmZyw6kgcGFyIHVuIGZpY2hpZXIiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkNvcnJlY3Rpb24gZGVzIGNvdWxldXJzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJDZXR0ZSBmb25jdGlvbm5hbGl0w6kgZXN0IGV4cMOpcmltZW50YWxlIGV0IHBldXQgdG91Y2hlciBsZXMgcGVyZm9ybWFuY2VzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlJlbXBsYWPDqSBwYXIgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoCUlIOKAkyBUZW1wcyByZXN0YW50wqA6IGVudmlyb24gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqAlJSAoY2hhcmfDqWUgw6AgMTAwwqAlJSBkYW5zIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+ICUlIChjaGFyZ2UgY29tcGzDqHRlIHN1ciBjLmEuIGRhbnMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gJSUgKGNoYXJnw6llIMOgIDEwMMKgJSUgcGFyIFVTQiBkYW5zIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqAlJSAoY2hhcmfDqWUgw6AgMTAwwqAlJSBhdmVjIGNoYXJnZXVyIHNhbnMgZmlsIGRhbnMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkluY29ubnUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkJhdHRlcmllIGVuIGNoYXJnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iRW4gY2hhcmdlIChjLmEuKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkVuIGNoYXJnZSBwYXIgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJFbiBjaGFyZ2Ugc2FucyBmaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTlwnZXN0IHBhcyBlbiBjaGFyZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJOXCdlc3QgcGFzIGVuIGNoYXJnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQbGVpbmUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnIvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnIvYXJyYXlzLnhtbAppbmRleCBhOGJlZDY5Li4xY2ZkM2Q0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJUb3Vqb3VycyB1dGlsaXNlciBsYSB2w6lyaWZpY2F0aW9uIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NMKgS28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTbCoEtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjHCoE1vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjTCoE1vIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2wqBNbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJEw6lzYWN0aXbDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NMKgS28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTbCoEtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjHCoE1vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNMKgTW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTbCoE1vIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjTCoEtvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NsKgS28iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMcKgTW8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRMOpc2FjdGl2w6kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjTCoEtvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NsKgS28iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMcKgTW8iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NMKgS28vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2wqBLby90YW1wb24gam91cm5hbCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxwqBNby90YW1wb24gam91cm5hbCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0wqBNby90YW1wb24gam91cm5hbCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNsKgTW8vdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRMOpc2FjdGl2w6kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjTCoEtvIHBhciB0YW1wb24gam91cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTbCoEtvIHBhciB0YW1wb24gam91cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxwqBNbyBwYXIgdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNMKgTW8gcGFyIHRhbXBvbiBqb3VybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2wqBNbyBwYXIgdGFtcG9uIGpvdXJuYWwiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aW9uIGTDqXNhY3RpdsOpZSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAppbmRleCA5NWU4ODA0Li42ZGFiYmE4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJSZW5kIHBvc3NpYmxlIGVucmVnaXN0cmVtZW50IGRlIHRvdXRlIGFwcGxpIHN1ciBlc3BhY2Ugc3RvY2thZ2UgZXh0ZXJuZSwgaW5kw6lwZW5kYW1tZW50IHZhbGV1cnMgZmljaGllciBtYW5pZmVzdGUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yY2VyIHBvc3NpYmlsaXTDqSBkZSByZWRpbWVuc2lvbm5lciBsZXMgYWN0aXZpdMOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUGVybWV0IGRlIHJlZGltZW5zaW9ubmVyIHRvdXRlcyBsZXMgYWN0aXZpdMOpcyBwb3VyIGxlIG1vZGUgbXVsdGlmZW7DqnRyZSwgaW5kw6lwZW5kYW1tZW50IGRlcyB2YWxldXJzIGR1IGZpY2hpZXIgbWFuaWZlc3RlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkFjdGl2ZXIgbGVzIGZlbsOqdHJlcyBkZSBmb3JtZSBsaWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQWN0aXZlIGxhIGNvbXBhdGliaWxpdMOpIGF2ZWMgbGVzIGZlbsOqdHJlcyBkZSBmb3JtZSBsaWJyZSBleHDDqXJpbWVudGFsZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik1vdCBkZSBwYXNzZSBzYXV2ZWdhcmRlIFBDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJMZXMgc2F1dmVnYXJkZXMgY29tcGzDqHRlcyBzdXIgUEMgbmUgc29udCBwYXMgcHJvdMOpZ8OpZXMgYWN0dWVsbGVtZW50LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJBcHB1eWV6IHBvdXIgbW9kaWZpZXIgb3Ugc3VwcHJpbWVyIGxlIG1vdCBkZSBwYXNzZSB1dGlsaXPDqSBwb3VyIGxlcyBzYXV2ZWdhcmRlcyBjb21wbMOodGVzIHN1ciBQQy4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRMOpc2FjdGl2w6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJUb3Vqb3VycyBhY3RpdsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRpcXVlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iTWlzZSBlbiDFk3V2cmUgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJEw6lmaW5pciBsYSBtaXNlIGVuIMWTdXZyZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iTGEgbWlzZSBlbiDFk3V2cmUgV2ViVmlldyBzw6lsZWN0aW9ubsOpZSBlc3QgZMOpc2FjdGl2w6llLiBWb3VzIGRldmV6IGxcJ2FjdGl2ZXIgcG91ciBsXCd1dGlsaXNlci4gU291aGFpdGV6LXZvdXMgbFwnYWN0aXZlcsKgPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkNvbnZlcnRpciBlbiBjaGlmZnJlbWVudCBiYXPDqSBzdXIgdW4gZmljaGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGly4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJEw6lqw6AgY2hpZmZyw6kgdmlhIHVuIGZpY2hpZXIiPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkNvcnJlY3Rpb24gY291bGV1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iQ2V0dGUgZm9uY3Rpb25uYWxpdMOpIGVzdCBleHDDqXJpbWVudGFsZSBldCBwZXV0IGFmZmVjdGVyIGxlcyBwZXJmb3JtYW5jZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iUmVtcGxhY8OpIHBhciA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgVGVtcHMgcmVzdGFudMKgOiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZW52aXJvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IChjaGFyZ8OpZSDDoCAxMDDCoCUlIGRhbnMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gKGNoYXJnw6llIMOgIDEwMMKgJSUgc3VyIHNlY3RldXIgZGFucyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAoY2hhcmfDqWUgw6AgMTAwwqAlJSB2aWEgVVNCIGRhbnMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gKGNoYXJnw6llIMOgIDEwMMKgJSUgc2FucyBmaWwgZGFucyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iSW5jb25udSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQmF0dGVyaWUgZW4gY2hhcmdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJFbiBjaGFyZ2Ugc3VyIHNlY3RldXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJFbiBjaGFyZ2UgdmlhIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iRW4gY2hhcmdlIHNhbnMgZmlsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IlBhcyBlbiBjaGFyZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJEw6licmFuY2jDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4icGxlaW5lIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1nbC1yRVMvYXJyYXlzLnhtbAppbmRleCA2MDZlNmY2Li4wMWI4ZmRmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ2wtckVTL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpemFyIHNlbXByZSBhIGNvbXByb2JhY2nDs24gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiJCw7pmZXIgNjQgSyByZXhpc3RybyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiJCw7pmZXIgMjU2IEsgcmV4aXN0LiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiJCw7pmZXIgMSBNIHJleGlzdHJvIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IkLDumZlciA0IE0gcmV4aXN0cm8iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iQsO6ZmVyIDE2IE0gcmV4aXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRGVzYWN0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyBwb3IgYsO6ZmVyIGRlIHJleGlzdHJvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBvciBiw7pmZXIgZGUgcmV4aXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNIHBvciBiw7pmZXIgZGUgcmV4aXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIHBvciBiw7pmZXIgZGUgcmV4aXN0cm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwb3IgYsO6ZmVyIGRlIHJleGlzdHJvIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2nDs24gZGVzYWN0aXZhZGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1nbC1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbAppbmRleCBkN2VmNTAzLi4wZjBkMTNkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbApAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjIxNTE3OTE3NjA2NzY4MzY2NyI+Ik9wY2nDs25zIGRlIHByb2dyYW1hZG9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3NfZW5hYmxlIiBtc2dpZD0iNTQyNTMwOTk0Nzc4MTA5NTM4Ij4iQWN0aXZhciBvcGNpw7NucyBkZSBwcm9ncmFtYWRvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRldmVsb3BtZW50X3NldHRpbmdzX3N1bW1hcnkiIG1zZ2lkPSIxODE1Nzk1NDAxNjMyODU0MDQxIj4iRGVmaW5pciBhcyBvcGNpw7NucyBkZSBkZXNlbnZvbHZlbWVudG8gZGUgYXBsaWNhY2nDs25zIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3Nfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjQzMDg1NjkwNDE3MDE1MzU2MDciPiJBcyBvcGNpw7NucyBkbyBwcm9ncmFtYWRvciBub24gZXN0w6FuIGRpc3Bvw7FpYmxlcyBwYXJhIGVzdGUgdXN1YXJpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmVsb3BtZW50X3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI0MzA4NTY5MDQxNzAxNTM1NjA3Ij4iQXMgb3BjacOzbnMgZGUgcHJvZ3JhbWFkb3Igbm9uIGVzdMOhbiBkaXNwb8OxaWJsZXMgcGFyYSBlc3RlIHVzdWFyaW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fc2V0dGluZ3Nfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijk1Njg0MTQzMDE3Njk4NTU5OCI+IkEgY29uZmlndXJhY2nDs24gZGEgVlBOIG5vbiBlc3TDoSBkaXNwb8OxaWJsZSBwYXJhIGVzdGUgdXN1YXJpbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRldGhlcmluZ19zZXR0aW5nc19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjc2NTc3MDQzODQzODI5MTAxMiI+IkEgY29uZmlndXJhY2nDs24gZGEgYW5jb3JheGUgbm9uIGVzdMOhIGRpc3Bvw7FpYmxlIHBhcmEgZXN0ZSB1c3VhcmlvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYXBuX3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3ODczNzI5MDMyMTY1MzI0MDAwIj4iQSBjb25maWd1cmFjacOzbiBkbyBub21lIGRvIHB1bnRvIGRlIGFjY2VzbyBub24gZXN0w6EgZGlzcG/DsWlibGUgcGFyYSBlc3RlIHVzdWFyaW8iPC9zdHJpbmc+CkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iRmFpIHF1ZSBjYWxxdWVyYSBhcGxpY2FjacOzbiBzZSBwb2lkYSBlc2NyaWJpciBudW4gYWxtYWNlbmFtZW50byBleHRlcm5vLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBleHByZXNhZG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yemFyIG8gYXh1c3RlIGRvIHRhbWHDsW8gZGFzIGFjdGl2aWRhZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQZXJtaXRlIGF4dXN0YXIgbyB0YW1hw7FvIGRlIHRvZGFzIGFzIGFjdGl2aWRhZGVzIHBhcmEgbyBtb2RvIGRlIHZhcmlhcyB2ZW50w6FzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkZWZpbmlkb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWN0aXZhciB2ZW50w6FzIGRlIGZvcm1hIGxpYnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBY3RpdmEgYSBjb21wYXRpYmlsaWRhZGUgY29uIHZlbnTDoXMgZGUgZm9ybWEgbGlicmUgZXhwZXJpbWVudGFpcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iQ29udHJhc2luYWwgcGFyYSBjb3BpYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkFzIGNvcGlhcyBkZSBzZWd1cmlkYWRlIGRlIG9yZGVuYWRvciBjb21wbGV0YXMgbm9uIGVzdMOhbiBwcm90ZXhpZGFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRvY2EgcGFyYSBjYW1iaWFyIG91IGVsaW1pbmFyIG8gY29udHJhc2luYWwgcGFyYSBhcyBjb3BpYXMgZGUgc2VndXJhbnphIGNvbXBsZXRhcyBkbyBlc2NyaXRvcmlvIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEZXNhY3RpdmFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlNlbXByZSBhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbcOhdGljbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudGFjacOzbiBkZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IkRlZmluaXIgaW1wbGVtZW50YWNpw7NuIGRlIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJDb252ZXJ0ZXIgbm8gZW5jcmlwdGFkbyBiYXNlYWRvIGVuIGZpY2hlaXJvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGVyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJYYSBzZSBlbmNyaXB0b3UgbyBmaWNoZWlybyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iQ29ycmVjY2nDs24gZGEgY29yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJFc3RhIGZ1bmNpw7NuIMOpIGV4cGVyaW1lbnRhbCBlIHBvZGUgYWZlY3RhciBhbyByZW5kZW1lbnRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IkFudWxhZG8gcG9yIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gZmFsdGFuIGFwcm94aW1hZGFtZW50ZSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgYSBjYXJnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgYSBjYXJnYSBjb24gQ0EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHBhcmEgY29tcGxldGFyIGEgY2FyZ2EgY29uIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcGFyYSBjb21wbGV0YXIgYSBjYXJnYSBjbyBtb2RvIHNlbiBmw61vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkRlc2Nvw7FlY2lkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQ2FyZ2FuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkNhcmdhbmRvIGNvbiBDQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkNhcmdhbmRvIHBvciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkNhcmdhbmRvIHNlbiBmw61vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOb24gc2UgZXN0w6EgY2FyZ2FuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJOb24gZXN0w6EgY2FyZ2FuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iQ29tcGxldGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9hcnJheXMueG1sCmluZGV4IGM3ZDYyYzUuLjkyY2JiMmQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtZ3UtcklOL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ndS1ySU4vYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4Kq54KqC4Kqu4KuH4Kq24Kq+IEhEQ1Ag4Kqk4Kqq4Kq+4Kq44Kqo4KuLIOCqieCqquCqr+Cri+CqlyDgqpXgqrDgq4siPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgqqzgqoLgqqciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCqrOCqguCqpyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCqsuCrieCqlyDgqqzgqqvgqrAg4Kqm4KuA4KqgIDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLgqrLgq4ngqpcg4Kqm4KuA4KqgIDI1Nksg4Kqs4Kqr4KqwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuCqsuCrieCqlyDgqqzgqqvgqrAg4Kqm4KuA4KqgIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCqsuCrieCqlyDgqqzgqqvgqrAg4Kqm4KuA4KqgIDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuCqquCrjeCqsOCqpOCqvyDgqrLgq4ngqpcg4Kqs4Kqr4KqwIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgqqzgqoLgqqciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuCqsuCrieCqlyDgqqzgqqvgqrAg4Kqm4KuA4KqgIDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4Kqy4KuJ4KqXIOCqrOCqq+CqsCDgqqbgq4DgqqAgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCqj+CqqOCqv+CqruCrh+CqtuCqqCDgqqzgqoLgqqciPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAppbmRleCBkNGRiMDc4Li45ZTJlYzdlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCqruCrh+CqqOCqv+Cqq+Crh+CquOCrjeCqnyDgqq7gq4LgqrLgq43gqq/gq4vgqqjgq4cg4Kqn4KuN4Kqv4Kq+4Kqo4Kqu4Kq+4KqCIOCqsuCrgOCqp+CqviDgqrjgqr/gqrXgqr7gqq8sIOCqleCri+CqiOCqquCqoyDgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqjgqqjgq4cg4Kqs4Kq+4Kq54KuN4KqvIOCquOCrjeCqn+Cri+CqsOCrh+CqnCDgqqrgqrAg4Kqy4KqW4Kq+4Kq14Kq+IOCqruCqvuCqn+CrhyDgqrLgqr7gqq/gqpUg4Kqs4Kqo4Kq+4Kq14KuHIOCqm+CrhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuCqquCrjeCqsOCqteCrg+CqpOCrjeCqpOCqv+Cqk+CqqOCrhyDgqqvgqrDgq4DgqqXgq4Ag4KqV4KqmIOCqr+Cri+Cql+CrjeCqryDgqqXgqrXgqr4g4Kqu4Kq+4Kqf4KuHIOCqq+CqsOCqnCDgqqrgqr7gqqHgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuCqpOCqruCqvuCqriDgqqrgq43gqrDgqrXgq4PgqqTgq43gqqTgqr/gqpPgqqjgq4cg4Kqu4Kqy4KuN4Kqf4KuALeCqteCqv+CqguCqoeCriyDgqq7gqr7gqp/gq4cg4Kqr4Kqw4KuA4Kql4KuAIOCqleCqpiDgqqzgqqbgqrLgq4Ag4Kq24KqV4KuHIOCqpOCrh+CqteCrgCDgqqzgqqjgqr7gqrXgq4cg4Kqb4KuHLCDgqq7gq4fgqqjgq4Dgqqvgq4fgqrjgq43gqp8g4Kqu4KuB4Kqy4KuN4Kqv4KuL4Kqo4KuHIOCqp+CrjeCqr+CqvuCqqOCqruCqvuCqgiDgqrLgq4Dgqqfgqr4g4Kq44Kq/4Kq14Kq+4KqvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCqq+CrjeCqsOCqv+Cqq+Cri+CqsOCrjeCqriDgqrXgqr/gqoLgqqHgq4vgqp0g4Kq44KqV4KuN4Kq34KquIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4Kqq4KuN4Kqw4Kq+4Kqv4KuL4KqX4Kq/4KqVIOCqq+CrjeCqsOCqv+Cqq+Cri+CqsOCrjeCqriDgqrXgqr/gqoLgqqHgq4vgqp0g4Kqu4Kq+4Kqf4KuHIOCquOCqruCqsOCrjeCqpeCqqOCqqOCrhyDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4KuHIOCqm+Crhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Kqh4KuH4Kq44KuN4KqV4Kqf4KuJ4KqqIOCqrOCrh+CqleCqheCqqiDgqqrgqr7gqrjgqrXgqrDgq43gqqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCqoeCrh+CquOCrjeCqleCqn+CrieCqqiDgqrjgqoLgqqrgq4LgqrDgq43gqqMg4Kqs4KuH4KqV4KqF4KqqIOCqueCqvuCqsuCqruCqvuCqgiDgqrjgq4HgqrDgqpXgq43gqrfgqr/gqqQg4Kqo4Kql4KuAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCqoeCrh+CquOCrjeCqleCqn+CrieCqqiDgqrjgqoLgqqrgq4LgqrDgq43gqqMg4Kqs4KuH4KqV4KqF4Kqq4KuN4Kq4IOCqruCqvuCqn+Crh+CqqOCriyDgqqrgqr7gqrjgqrXgqrDgq43gqqEg4Kqs4Kqm4Kqy4Kq14Kq+IOCqheCqpeCqteCqviDgqqbgq4LgqrAg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqp/gqpog4KqV4Kqw4KuLIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuCqheCqleCrjeCqt+CqriDgqpXgqrDgq4fgqrIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgqrngqoLgqq7gq4fgqrbgqr7gqoIg4Kqa4Kq+4Kqy4KuBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuCquOCrjeCqteCqmuCqsuCqv+CqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4KqF4Kqu4Kqy4KuA4KqV4Kqw4KqjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4KqF4Kqu4Kqy4KuA4KqV4Kqw4KqjIOCquOCrh+CqnyDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiLgqqrgqrjgqoLgqqYg4KqV4Kqw4KuH4KqyIFdlYlZpZXcg4KqF4Kqu4Kqy4KuA4KqV4Kqw4KqjIOCqheCqleCrjeCqt+CqriDgqpXgqrDgq4fgqrIg4Kqb4KuHIOCqheCqqOCrhyDgqongqqrgqq/gq4vgqpcg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4Kq14KuB4KqCIOCqhuCqteCqtuCrjeCqr+CqlSDgqpvgq4csIOCqtuCrgeCqgiDgqqTgqq7gq4cg4Kqk4KuH4Kqo4KuHIOCquOCqleCrjeCqt+CqriDgqpXgqrDgqrXgqr4g4Kqu4Kq+4KqX4KuLIOCqm+Criz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLgqqvgqr7gqofgqrIg4KqP4Kqo4KuN4KqV4KuN4Kqw4Kq/4Kqq4KuN4Kq24Kqo4Kqu4Kq+4KqCIOCqsOCrguCqquCqvuCqguCqpOCqsOCqv+CqpCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCqsOCrguCqquCqvuCqguCqpOCqsOCqv+CqpCDgqpXgqrDgq4suLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuCqq+CqvuCqh+CqsiDgqqrgqrngq4fgqrLgq4fgqqXgq4Ag4KqcIOCqj+CqqOCrjeCqleCrjeCqsOCqv+CqquCrjeCqnyDgqpXgqrDgq4fgqrIg4Kqb4KuHIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgqrDgqoLgqpcg4Kq44KuB4Kqn4Kq+4Kqw4Kqj4Kq+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLgqoYg4Kq44KuB4Kq14Kq/4Kqn4Kq+IOCqquCrjeCqsOCqvuCqr+Cri+Cql+Cqv+CqlSDgqpvgq4cg4KqF4Kqo4KuHIOCqleCqvuCqruCql+CrgOCqsOCrgCDgqqrgqrAg4KqF4Kq44KqwIOCqleCqsOCrgCDgqrbgqpXgq4cg4Kqb4KuHLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ijx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4g4Kqm4KuN4Kq14Kq+4Kqw4Kq+IOCqk+CqteCqsOCqsOCqvuCqh+CqoSDgqqXgqq/gq4HgqoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4KqG4Kq24Kqw4KuHIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgqqzgqr7gqpXgq4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+IuCquOCqguCqquCrguCqsOCrjeCqoyDgqqXgqrXgqr7gqq7gqr7gqoIgPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4sIEFDIOCqquCqsCDgqqrgq4LgqrDgq43gqqMg4Kqa4Kq+4Kqw4KuN4KqcIOCqpeCqr+CqvuCqguCqqOCrhyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+LCBVU0Ig4Kqq4KqwIOCqquCrguCqsOCrjeCqoyDgqprgqr7gqrDgq43gqpwg4Kql4Kqv4Kq+4KqC4Kqo4KuHIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Kq14Kq+4Kqv4Kqw4Kqy4KuH4Kq4IOCqpuCrjeCqteCqvuCqsOCqviDgqqrgq4LgqrDgq43gqqMg4Kql4Kq+4KqvIOCqpOCrjeCqr+CqvuCqgiDgqrjgq4Hgqqfgq4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLgqoXgqpzgqr7gqqPgq43gqq/gq4HgqoIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuCqmuCqvuCqsOCrjeCqnCDgqqXgqogg4Kqw4Kq54KuN4Kqv4KuB4KqCIOCqm+CrhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMg4Kqq4KqwIOCqmuCqvuCqsOCrjeCqnOCqv+CqguCqlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDgqqXgq4Ag4Kqa4Kq+4Kqw4KuN4Kqc4Kq/4KqC4KqXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLgqrXgqr7gqq/gqrDgqrLgq4fgqrjgqqXgq4Ag4Kqa4Kq+4Kqw4KuN4Kqc4Kq/4KqC4KqXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuCqmuCqvuCqsOCrjeCqnCDgqqXgqogg4Kqw4Kq54KuN4Kqv4KuB4KqCIOCqqOCqpeCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IuCqmuCqvuCqsOCrjeCqnCDgqqXgqogg4Kqw4Kq54KuN4Kqv4KuB4KqCIOCqqOCqpeCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLgqqrgq4LgqrDgq43gqqMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvYXJyYXlzLnhtbAppbmRleCA4ODNlOTk3Li44YWE5OGExZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oaS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4KS54KSu4KWH4KS24KS+IEhEQ1Ag4KSc4KS+4KSC4KSaIOCkleCkviDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KWH4KSCIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4KSs4KSC4KSmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLgpKzgpILgpKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsg4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0g4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLzgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4KSs4KSC4KSmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTZLIOCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KS84KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIOCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KS84KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIOCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KS84KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2TSDgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CkvOCksCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgpI/gpKjgpL/gpK7gpYfgpLbgpKgg4KSs4KSC4KSmIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IGI2ZTVkN2QuLmI2YjhlYWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCkh+CkuOCkuOClhyDgpJXgpYvgpIgg4KSt4KWAIOCkkOCkqiDgpK7gpYfgpKjgpL/gpKvgpYfgpLjgpY3igI3gpJ8g4KSu4KS+4KSoIOCkheCkqOCkpuClh+CkluCkviDgpJXgpLDgpJXgpYcsIOCkrOCkvuCkueCksOClgCDgpK7gpYfgpK7gpYvgpLDgpYAg4KSq4KSwIOCksuCkv+CkluCkqOClhyDgpK/gpYvgpJfgpY3igI3gpK8g4KSs4KSoIOCknOCkvuCkpOCkviDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgpIbgpJXgpL7gpLAg4KSs4KSm4KSy4KWHIOCknOCkvuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkl+CkpOCkv+CkteCkv+Ckp+Ckv+Ckr+Cli+CkgiDgpJXgpYsg4KSs4KS+4KSn4KWN4KSvIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4KSP4KSV4KS+4KSn4KS/4KSVLeCkteCkv+CkguCkoeCliyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCkreClgCDgpJfgpKTgpL/gpLXgpL/gpKfgpL/gpK/gpYvgpIIg4KSV4KWHIOCkhuCkleCkvuCksCDgpJXgpYsg4KSs4KSm4KSy4KWHIOCknOCkvuCkqOClhyDgpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSk4KS+IOCkueCliCwg4KSa4KS+4KS54KWHIOCkruClh+CkqOCkv+Ckq+Clh+CkuOCljeCknyDgpK7gpL7gpKgg4KSV4KWB4KSbIOCkreClgCDgpLngpYvgpIIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i4KSr4KS84KWN4KSw4KWA4KSr4KS84KWJ4KSw4KWN4KSuIOCkteCkv+CkguCkoeCliyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgpKrgpY3gpLDgpK/gpYvgpJfgpL7gpKTgpY3gpK7gpJUg4KSr4KS84KWN4KSw4KWA4KSr4KS84KWJ4KSw4KWN4KSuIOCkteCkv+CkguCkoeCliyDgpJXgpL4g4KS44KSu4KSw4KWN4KSl4KSoIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKTgpYAg4KS54KWILiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgpKHgpYfgpLjgpY3igI3gpJXgpJ/gpYngpKog4KSs4KWI4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4KSh4KWH4KS44KWN4oCN4KSV4KSf4KWJ4KSqIOCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KS14KSw4KWN4KSk4KSu4KS+4KSoIOCkruClh+CkgiDgpLjgpYHgpLDgpJXgpY3gpLfgpL/gpKQg4KSo4KS54KWA4KSCIOCkueCliOCkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpYngpKog4KSV4KWHIOCkquClguCksOCljeCkoyDgpKzgpYjgpJXgpIXgpKog4KSV4KWHIOCkquCkvuCkuOCkteCksOCljeCkoSDgpJXgpYsg4KSs4KSm4KSy4KSo4KWHIOCkr+CkviDgpKjgpL/gpJXgpL7gpLLgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpLjgpY3igI3gpKrgpLDgpY3gpLYg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLgpIXgpJXgpY3gpLfgpK4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgpLngpK7gpYfgpLbgpL4g4KSa4KS+4KSy4KWCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuCkuOCljeCkteCkmuCkvuCksuCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkuOClh+CknyDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiLgpJrgpYHgpKjgpL4g4KSX4KSv4KS+IFdlYlZpZXcg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkheCkleCljeCkt+CkriDgpLngpYgg4KSU4KSwIOCkieCkuOClhyDgpIngpKrgpK/gpYvgpJcg4KSV4KSw4KSo4KWHIOCkleClhyDgpLLgpL/gpI8g4KS44KSV4KWN4KS34KSuIOCkleCkv+Ckr+CkviDgpJzgpL7gpKjgpL4g4KSG4KS14KS24KWN4KSv4KSVIOCkueCliCwg4KSV4KWN4KSv4KS+IOCkhuCkqiDgpIngpLjgpYcg4KS44KSV4KWN4KS34KSuIOCkleCksOCkqOCkviDgpJrgpL7gpLngpKTgpYcg4KS54KWI4KSCPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuCkq+CkvOCkvuCkh+CksiDgpI/gpKjgpY3gpJXgpY3gpLDgpL/gpKrgpY3gpLbgpKgg4KSu4KWH4KSCIOCksOClguCkquCkvuCkguCkpOCksOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCksOClguCkquCkvuCkguCkpOCksOCkv+CkpCDgpJXgpLDgpYfgpIIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuCkq+CkvOCkvuCkh+CksiDgpKrgpLngpLLgpYcg4KS44KWHIOCkj+CkqOCljeCkleCljeCksOCkv+CkquCljeCknyDgpJXgpYAg4KS54KWB4KSIIOCkueCliCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i4KSw4KSC4KSXIOCkuOClgeCkp+CkvuCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i4KSv4KS5IOCkuOClgeCkteCkv+Ckp+CkviDgpKrgpY3gpLDgpL7gpK/gpYvgpJfgpL/gpJUg4KS54KWIIOCklOCksCDgpKjgpL/gpLfgpY3gpKrgpL7gpKbgpKgg4KSV4KWLIOCkquCljeCksOCkreCkvuCkteCkv+CkpCDgpJXgpLAg4KS44KSV4KSk4KWAIOCkueCliC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+IOCkleClhyDgpKbgpY3gpLXgpL7gpLDgpL4g4KST4KS14KSw4KSw4KS+4KSH4KShIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4KSy4KSX4KSt4KSXIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgpLbgpYfgpLciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4KSq4KWC4KSw4KWAIOCkueCli+CkqOClhyDgpKTgpJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IEFDIOCkquCksCDgpKrgpYLgpLDgpYAg4KS54KWL4KSo4KWHIOCkpOCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gVVNCIOCkquCksCDgpKrgpYLgpLDgpYAg4KS54KWL4KSo4KWHIOCkpOCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4KS14KS+4KSv4KSw4KSy4KWH4KS4IOCkuOClhyDgpKrgpYLgpLDgpYAg4KS54KWL4KSo4KWHIOCkpOCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCkheCknOCljeCknuCkvuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4KSa4KS+4KSw4KWN4KScIOCkueCliyDgpLDgpLngpYAg4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJBQyDgpLjgpYcg4KSa4KS+4KSw4KWN4KScIOCkueCliyDgpLDgpLngpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0Ig4KSq4KSwIOCkmuCkvuCksOCljeCknCDgpLngpYsg4KSw4KS54KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLgpLXgpL7gpK/gpLDgpLLgpYfgpLgg4KSw4KWC4KSqIOCkuOClhyDgpJrgpL7gpLDgpY3gpJwg4KS54KWLIOCksOCkueClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLgpJrgpL7gpLDgpY3gpJwg4KSo4KS54KWA4KSCIOCkueCliyDgpLDgpLngpYAg4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i4KSa4KS+4KSw4KWN4KScIOCkqOCkueClgOCkgiDgpLngpYsg4KSw4KS54KWAIOCkueCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLgpKrgpYLgpLDgpYAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvYXJyYXlzLnhtbAppbmRleCBkNTFmODJkLi5kYjQ2MGM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oci9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJVdmlqZWsgdXBvdHJlYmxqYXZhaiBIRENQIHByb3ZqZXJ1IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Iklza2xqdcSNZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iSXNrbGp1xI1lbm8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBLQiBwbyBtZcSRdXNwcmVtLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgS0IgcG8gbWXEkXVzcHIuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTUIgcG8gbWXEkXVzcHJlbS4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQiBwbyBtZcSRdXNwcmVtLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNQiBwbyBtZcSRdXNwcmVtLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJJc2tsanXEjWVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLQiBwbyBtZcSRdXNwcmVtLiB6YXBpc25pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEtCIHBvIG1lxJF1c3ByZW0uIHphcGlzbmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1CIHBvIG1lxJF1c3ByZW0uIHphcGlzbmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CIHBvIG1lxJF1c3ByZW0uIHphcGlzbmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNQiBwbyBtZcSRdXNwcmVtLiB6YXBpc25pa2EiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFjaWphIGlza2xqdcSNZW5hIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCmluZGV4IGY4NDM0ZWIuLjBhYjEzZjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkFwbGlrYWNpamUgc2UgbW9ndSB6YXBpc2l2YXRpIHUgdmFuanNrdSBwb2hyYW51IG5lb3Zpc25vIG8gbWFuaWZlc3R1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iTmFtZXRuaSBtb2d1xIdub3N0IHByb21qZW5lIHZlbGnEjWluZSB6YSBha3Rpdm5vc3RpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJWZWxpxI1pbmEgc3ZpaCBha3Rpdm5vc3RpIG1vxb5lIHNlIG1pamVuamF0aSB6YSB2acWhZSBwcm96b3JhLCBuZW92aXNubyBvIHZyaWplZG5vc3RpbWEgbWFuaWZlc3RhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik9tb2d1xIdpIHByb3pvcmUgc2xvYm9kbm9nIG9ibGlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iT21vZ3XEh3VqZSBwb2RyxaFrdSB6YSBla3NwZXJpbWVudGFsbmUgcHJvem9yZSBzbG9ib2Rub2cgb2JsaWthLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJaYXBvcmthIHNpZ3Vybm9zbmUga29waWplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJQb3RwdW5lIHNpZ3Vybm9zbmUga29waWplIG5hIHN0b2xub20gcmHEjXVuYWx1IHRyZW51dGHEjW5vIG5pc3UgemHFoXRpxIdlbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iT2RhYmVyaXRlIHphIHByb21qZW51IGlsaSB1a2xhbmphbmplIHphcG9ya2UgdSBwb3RwdW5pbSBzaWd1cm5vc25pbSBrb3BpamFtYSBuYSBzdG9sbm9tIHJhxI11bmFsdSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iT25lbW9ndcSHZW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iVXZpamVrIHVrbGp1xI1lbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdHNrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudGFjaWphIFdlYlZpZXdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlBvc3RhdmkgaW1wbGVtZW50YWNpanUgV2ViVmlld2EiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJQcmV0dm9yaSB1IGVua3JpcGNpanUgZGF0b3Rla2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IlByZXR2b3Jp4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJFbmtyaXBjaWphIGRhdG90ZWthIHZlxIcgamUgaXp2csWhZW5hIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJLb3Jla2NpamEgYm9qZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iT3ZhIGplIHpuYcSNYWprYSBla3NwZXJpbWVudGFsbmEgaSBtb8W+ZSB1dGplY2F0aSBuYSBwZXJmb3JtYW5zZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJQcmVtb8WhxIdlbm8gcG9zdGF2a29tIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBqb8WhIHByaWJsacW+bm8gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyBuYXB1bmplbm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gbmFwdW5qZW5vc3RpIHN0cnVqbmltIG5hcGFqYW5qZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gbmFwdW5qZW5vc3RpIHB1dGVtIFVTQi1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIG5hcHVuamVub3N0aSBiZcW+acSNbmltIHB1dGVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iTmVwb3puYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJQdW5qZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iUHVuamVuamUgcHVuamHEjWVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iUHVuamVuamUgcHV0ZW0gVVNCLWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkJlxb5pxI1ubyBwdW5qZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOZSBwdW5pIHNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmUgcHVuaSBzZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQdW5hIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L2FycmF5cy54bWwKaW5kZXggMDNjOWVkNy4uMGQyMDFiNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1odS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iTWluZGlnIGhhc3puw6Fsam9uIEhEQ1AgZWxsZW7FkXJ6w6lzdCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJLaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IktpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgS0IvbmFwbMOzcHVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NiBLQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQi9uYXBsw7NwdWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IktpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEtCL25hcGzDs3B1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgS0IvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIvbmFwbMOzcHVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CL25hcGzDs3B1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltw6FjacOzIGtpIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDYzNmY4OGEuLjI2ZDY1ZmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkxlaGV0xZF2w6kgdGVzemksIGhvZ3kga8O8bHPFkSB0w6FyaGVseXJlIGxlaGVzc2VuIMOtcm5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVGV2w6lrZW55c8OpZ2VrIMOhdG3DqXJldGV6w6lzw6luZWsga8OpbnlzemVyw610w6lzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTGVoZXTFkXbDqSB0ZXN6aSwgaG9neSBheiDDtnNzemVzIHRldsOpa2VueXPDqWcgw6F0bcOpcmV0ZXpoZXTFkSBsZWd5ZW4gYSB0w7ZiYmFibGFrb3MgbWVnamVsZW7DrXTDqXMgw6lyZGVrw6liZW4gYSBqZWd5esOpa8OpcnTDqWtla3TFkWwgZsO8Z2dldGxlbsO8bC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJTemFiYWQgZm9ybcOhasO6IGFibGFrb2sgZW5nZWTDqWx5ZXrDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJFbmdlZMOpbHllemkgYSBrw61zw6lybGV0aSBqZWxsZWfFsSwgc3phYmFkIGZvcm3DoWrDuiBhYmxha29rIHTDoW1vZ2F0w6Fzw6F0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJBc3p0YWxpIG1lbnTDqXMgamVsc3phdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkF6IGFzenRhbGkgdGVsamVzIGJpenRvbnPDoWdpIG1lbnTDqXNlayBqZWxlbmxlZyBuZW0gdsOpZGV0dGVrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLDiXJpbnRzZSBtZWcsIGhhIG3Ds2Rvc8OtdGFuw6EgdmFneSBlbHTDoXZvbMOtdGFuw6EgYSBqZWxzesOzdCBheiBhc3p0YWxpIHRlbGplcyBtZW50w6lzZWtoZXoiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iS2lrYXBjc29sdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJNaW5kaWcgYmVrYXBjc29sdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGlrdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3LW1lZ3ZhbMOzc8OtdMOhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3LW1lZ3ZhbMOzc8OtdMOhcyBiZcOhbGzDrXTDoXNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iQSBraXbDoWxhc3p0b3R0IFdlYlZpZXctbWVndmFsw7Nzw610w6FzIGxlIHZhbiB0aWx0dmEsIGEgaGFzem7DoWxhdGhveiB2aXN6b250IGVuZ2Vkw6lseWV6bmkga2VsbC4gU3plcmV0bsOpIGVuZ2Vkw6lseWV6bmk/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iS29udmVydMOhbMOhcyBmw6FqbGFsYXDDuiB0aXRrb3PDrXTDoXNyYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iS29udmVydMOhbMOhc+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iTcOhciBmw6FqbGFsYXDDuiB0aXRrb3PDrXTDoXN0IGhhc3puw6FsIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJTesOtbmtvcnJla2Npw7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkV6IGVneSBrw61zw6lybGV0aSBmdW5rY2nDsywgw6lzIGhhdMOhc3NhbCBsZWhldCBhIHRlbGplc8OtdG3DqW55cmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iRmVsw7xsw61ydmEgZXJyZTogPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIGtiLiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdmFuIGjDoXRyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYSB0ZWxqZXMgdMO2bHTDtnR0c8OpZyBlbMOpcsOpc8OpaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYSB0ZWxqZXMgZmVsdMO2bHTDqXNpZyBow6Fsw7N6YXRyw7NsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGEgdGVsamVzIGZlbHTDtmx0w6lzaWcgVVNCLXLFkWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYSBmZWx0w7ZsdMOpc2lnIHZlemV0w6lrIG7DqWxrw7xsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iSXNtZXJldGxlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iVMO2bHTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkjDoWzDs3phdGkgdMO2bHTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0ItcyB0w7ZsdMOpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iTmVtIHZlemV0w6lrZXMgdMO2bHTDqXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTmVtIHTDtmx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmVtIHTDtmx0xZFkaWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRmVsdMO2bHR2ZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL2FycmF5cy54bWwKaW5kZXggNDExNDNkZS4uMDc1NWE4YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1oeS1yQU0vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh5LXJBTS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLVhNWr1bfVvyDWhdWj1b/VodWj1bjWgNWu1aXVrCBIRENQINW91b/VuNaC1aPVuNaC1bTVqCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY01L/UsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NtS/1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMdWE1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNNWE1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTbVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItSx1bbVu9Wh1b/VvtWh1a4g1aciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjTUv9SyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU21L/UsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIx1YTUsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE21YTUsiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY01L/UsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTbUv9SyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+ItSx1bbVu9Wh1b/VvtWh1a4g1aciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjTUv9SyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NtS/1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMdWE1LIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gNjTUv9SyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiAyNTbUv9SyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiAx1YTUsiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gNNWE1LIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDE21YTUsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLUsdW21bvVodW/1b7VodWuINWnIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiA2NNS/1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDI1NtS/1LIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i1YrVodWw1bbVodWv1Z0g1aHVvNWh1b4uIDHVhNSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+ItWK1aHVsNW21aHVr9WdINWh1bzVodW+LiA01YTUsiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLVitWh1bDVttWh1a/VnSDVodW81aHVvi4gMTbVhNSyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItSx1bbVu9Wh1b/VpdWsINW31aHWgNWq1aHVutWh1b/Vr9Wl1oDVqCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IGEyYjkwMWEuLjdhOWIxNmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i1LnVuNaC1bXVrCDVpyDVv9Wh1azVq9W9INW61aHVsNWl1awg1bDVodW+1aXVrNW+1aHVrtWoINWh1oDVv9Wh1oTVq9W2INW91aHWgNaE1bjWgtW01Z0g1bTVodW21avWhtWl1b3Vv9WrINWh1oDVqtWl1oTVttWl1oDVq9aBINWh1bbVr9Wh1a0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLVjdW/1avVutWl1awsINW41oAg1aHVr9W/1avVvtW41oLVqdW11bjWgtW21bbVpdaA1asg1bnVodaD1aXWgNWoINWs1avVttWl1bYg1oPVuNaD1bjVrdWl1azVqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i1LLVuNWs1bjWgCDVodWv1b/Vq9W+1bjWgtWp1bXVuNaC1bbVttWl1oDVqyDVudWh1oPVpdaA1agg1aLVodWm1bTVodW61aHVv9W41oLVsNWh1bYg1bzVpdWq1avVtNWrINWw1aHVtNWh1oAg1aTVodaA1bHVttWl1awg1oPVuNaD1bjVrdWl1azVq9WdINW01aHVttWr1obVpdW91b/VqyDVodaA1arVpdaE1bbVpdaA1avWgSDVodW21a/VodWtOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ItSx1a/Vv9Wr1b7VodaB1bbVpdWsINWv1aHVtNWh1bXVodWv1aHVtiDVsdaH1asg1brVodW/1bjWgtWw1aHVttW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLUsdWv1b/Vq9W+1aHWgdW21bjWgtW0INWnINWv1aHVtNWh1bXVodWv1aHVtiDVsdaH1asg1oPVuNaA1bHVttWh1a/VodW2INW61aHVv9W41oLVsNWh1bbVttWl1oDVqyDVodW71aHVr9aB1bjWgtW01ag6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItSx1bfVrdWh1b/VodW91aXVstWh1bbVqyDVutWh1bDVuNaC1b3Vv9Wh1b7VuNaA1bTVodW2INWj1aHVstW/1bbVodWi1aHVvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i1LHVt9Wt1aHVv9Wh1b3VpdWy1aHVttWrINWh1bTVotW41bLVu9Wh1a/VodW2INW61aHVsNW41oLVvdW/1aHVvtW41oDVuNaC1bTVttWl1oDVqCDVodW11arVtCDVutWh1bfVv9W61aHVttW+1aHVriDVudWl1bYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i1LHVt9Wt1aHVv9Wh1b3VpdWy1aHVttWrINWh1bTVotW41bLVu9Wh1a/VodW2INW61aHVsNW41oLVvdW/1aHVvtW41oDVtNWh1bYg1bDVodW01aHWgCDVqNW21b/WgNWl1awg1oPVuNWt1aXVrCDVr9Wh1bQg1bDVpdW81aHWgdW21aXVrCDVo9Wh1bLVv9W21aHVotWh1bzVqCI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i1LHVttW71aHVv9W+1aHVriI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+ItWE1avVt9W/INW01avVodaB1b7VodWuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+ItSx1b7Vv9W41bTVodW/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldy3VqyDVq9aA1aHVr9Wh1bbVodaB1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+ItS41bbVv9aA1aXWhCBXZWJWaWV3LdWrINWr1oDVodWv1aHVttWh1oHVuNaC1bTVqCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+ItWO1aXWgNWh1a7VpdWsINaG1aHVtdWs1aHVtdWr1bYg1aPVodWy1b/VttWh1aPWgNW01aHVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i1ZPVuNWt1aHWgNWv1aXVrOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i1ZbVodW11azVodW11avVtiDVo9Wh1bLVv9W21aHVo9aA1bjWgtW01bYg1aHWgNWk1aXVtiDVr9Wh1b/VodaA1b7VpdWsINWnIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLUs9W41oLVttWh1bXVq9W2INWv1aHWgNWj1aHVotWl1oDVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+ItWN1aEg1oPVuNaA1bHVttWh1a/VodW2INWj1bjWgNWu1aHVvNW41oLVtdWpINWnINaHINWv1aHWgNW41bIg1acg1aHVptWk1aXVrCDVodW31a3VodW/1aHVttaE1asg1b7WgNWhOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+ItSz1aXWgNWh1abVodW21oHVvtWh1a4g1acgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPi3Vq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtINW01bbVodaBINW01bjVv9Wh1b7VuNaA1aHVutWl1b0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INW01avVttW51ocg1azWgNWr1b4g1azVq9aB1oTVodW+1bjWgNW41oLVtNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDVtNWr1bbVudaHINWs1oDVq9W+INWs1avWgdaE1aHVvtW41oDVuNaC1bTVqCDVsNW41b3VodW21oTVq9aBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDVtNWr1bbVudaHINWs1oDVq9W+INWs1avWgdaE1aHVvtW41oDVuNaC1bTVqCBVU0It1bjVviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g1bTVq9W21bnWhyDVrNaA1avVviDVrNWr1oHWhNWh1b7VuNaA1bjWgtW01agg1aHVttWs1aHWgCDWgdWh1bbWgdWr1oEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLUsdW21bDVodW11b8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+ItS81avWgdaE1aHVvtW41oDVuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+ItS81avWgdaE1aHVvtW41oDVuNaC1bQgQUMt1bjVviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+ItS81avWgdaE1aHVvtW41oDVuNaC1bQgVVNCLdW41b4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+ItSx1bbVrNWh1oAg1azVq9aB1oTVodW+1bjWgNW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLVidWrINWs1avWgdaE1aHVvtW41oDVvtW41oLVtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+ItWJ1asg1azVq9aB1oTVodW+1bjWgNW+1bjWgtW0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItS81avWgdaE1aHVvtW41oDVvtWh1a4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vYXJyYXlzLnhtbAppbmRleCA1YWFkYzEzLi4xNjZlZmQ1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWluL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pbi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJTZWxhbHUgZ3VuYWthbiBwZW1lcmlrc2FhbiBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsvcGVueWFuZ2dhIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSy9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTS9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTS9wZW55YW5nZ2EgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJOb25ha3RpZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLL3BlbnlhbmdnYSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0vcGVueWFuZ2dhIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL3BlbnlhbmdnYSBsb2ciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzaSBtYXRpIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IGY0ZmJlMWEuLmYyZWFjY2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1lbWJ1YXQgc2VtdWEgYXBsaWthc2kgZGFwYXQgZGl0dWxpcyBrZSBwZW55aW1wYW5hbiBla3N0ZXJuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlBha3NhIGFrdGl2aXRhcyBhZ2FyIHVrdXJhbm55YSBkYXBhdCBkaXViYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1lbWJ1YXQgc2VtdWEgYWt0aXZpdGFzIGRhcGF0IGRpdWJhaCB1a3VyYW5ueWEgdW50dWsgYmFueWFrIGplbmRlbGEsIHRlcmxlcGFzIGRhcmkgbmlsYWkgbWFuaWZlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJBa3RpZmthbiBqZW5kZWxhIGJlcmZvcm1hdCBiZWJhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iTWVuZ2FrdGlma2FuIGR1a3VuZ2FuIHVudHVrIGplbmRlbGEgZWtzcGVyaW1lbnRhbCBiZXJmb3JtYXQgYmViYXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlNhbmRpIGNhZGFuZ2FuIGRlc2t0b3AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlNhYXQgaW5pIGNhZGFuZ2FuIGRlc2t0b3AgcGVudWggdGlkYWsgZGlsaW5kdW5naSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJTZW50dWggZ3VuYSBtZW5ndWJhaCBhdGF1IG1lbmdoYXB1cyBzYW5kaSB1bnR1ayBjYWRhbmdhbiBsZW5na2FwIGRlc2t0b3AiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkRpbm9uYWt0aWZrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJTZWxhbHUgYWt0aWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iT3RvbWF0aXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJQZW5lcmFwYW4gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJTZXRlbCBwZW5lcmFwYW4gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IktvbnZlcnNpIGtlIGVua3JpcHNpIGZpbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IktvbnZlcnNpLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJTdWRhaCBkaWVua3JpcHNpIGJlcmJhc2lzIGZpbGUiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvcmVrc2kgd2FybmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkZpdHVyIGluaSBiZXJzaWZhdCBla3NwZXJpbWVudGFsIGRhbiBkYXBhdCBtZW1lbmdhcnVoaSBraW5lcmphLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IkRpZ2FudGlrYW4gb2xlaCA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIGtpcmEta2lyYSB0ZXJzaXNhLiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gc2FtcGFpIHBlbnVoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBzYW1wYWkgcGVudWggcGFkYSBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gc2FtcGFpIHBlbnVoIG1lbGFsdWkgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBzYW1wYWkgcGVudWggZGFyaSBuaXJrYWJlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlRpZGFrIGRpa2V0YWh1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iTWVuZ2lzaSBkYXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJNZW5naXNpIGRheWEgcGFkYSBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IklzaSBkYXlhIGxld2F0IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iSXNpIGRheWEgbmlya2FiZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iVGlkYWsgbWVuZ2lzaSBkYXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iVGlkYWsgbWVuZ2lzaSBkYXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IlBlbnVoIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvYXJyYXlzLnhtbAppbmRleCBiYmM3YWVjNi4uNjAyNGUzMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWlzLXJJUy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJOb3RhIGFsbHRhZiBIRENQLWVmdGlybGl0IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgayI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBrIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJTbMO2a2t0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IGsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IGsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IlNsw7Zra3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgayI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrL2Jpw7BtaW5uaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgay9iacOwbWlubmkiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNL2Jpw7BtaW5uaSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0vYmnDsG1pbm5pIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0vYmnDsG1pbm5pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlNsw7Zra3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgay9iacOwbWlubmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IGsvYmnDsG1pbm5pIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS9iacOwbWlubmkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL2Jpw7BtaW5uaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL2Jpw7BtaW5uaSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJTbMO2a2t0IMOhIGhyZXlmacOhaHJpZnVtIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKaW5kZXggNDEzOWU2ZS4uZGMxMDVlYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJHZXJpciBodmHDsGEgZm9ycml0aSBzZW0gZXIga2xlaWZ0IGHDsCBza3JpZmEgw60geXRyaSBnZXltc2x1LCBidXJ0c8Opw7AgZnLDoSBnaWxkdW0gw60gdXBwbMO9c2luZ2Fza3LDoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IsOedmluZ2EgYnJleXRhbmxlZ2Egc3TDpnLDsCB2aXJrbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkdlcmlyIHN0w6Zyw7AgYWxscmFyIHZpcmtuaSBicmV5dGFubGVnYSBzdm8gYcOwIGjDum4gaGVudGkgZnlyaXIgbWFyZ2EgZ2x1Z2dhLCDDs2jDocOwIGdpbGR1bSDDrSB1cHBsw71zaW5nYXNrcsOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IlZpcmtqYSBnbHVnZ2EgbWXDsCBmcmrDoWxzdSBzbmnDsGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+Ikt2ZWlraXIgw6Egc3R1w7BuaW5naSB2acOwIGdsdWdnYSBtZcOwIGZyasOhbHN1IHNuacOwaSDDoSB0aWxyYXVuYXN0aWdpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJBw7BnYW5nc29yw7AgdMO2bHZ1YWZyaXR1bmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJIZWlsZGFyYWZyaXR1biDDoSB0w7ZsdnUgZXIgZWtraSB2YXJpbiBzZW0gc3RlbmR1ci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iU25lcnR1IHRpbCBhw7AgYnJleXRhIGXDsGEgZmphcmzDpmdqYSBhw7BnYW5nc29yw7Bpw7AgZnlyaXIgaGVpbGRhcmFmcml0dW4gw6EgdMO2bHZ1Ijwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLDk3Zpcmt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWxsdGFmIGt2ZWlrdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJTasOhbGZ2aXJrdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IklubmxlacOwaW5nIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iU3RpbGxhIGlubmxlacOwaW5ndSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iVW1icmV5dGEgw60gZHVsa8Ozw7B1biBza3LDoWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IlVtYnJleXRh4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLDnmVnYXIgZHVsa8Ozw7Bhw7Agw6EgZ3J1bmR2ZWxsaSBza3LDoWEiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkxpdGFsZWnDsHLDqXR0aW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLDnmVzc2kgZWlnaW5sZWlraSBlciDDoSB0aWxyYXVuYXN0aWdpIG9nIGdldHVyIGhhZnQgw6FocmlmIMOhIGZyYW1taXN0w7bDsHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iSG5la2t0IGFmIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyB1LsO+LmIuIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBlZnRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gw60gZnVsbGEgaGxlw7BzbHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gw60gZnVsbGEgaGxlw7BzbHUgbWXDsCBobGXDsHNsdXTDpmtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IMOtIGZ1bGxhIGhsZcOwc2x1IMOtIGdlZ251bSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gw60gZnVsbGEgaGxlw7BzbHUgw75yw6HDsGxhdXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iw5PDvmVra3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IsONIGhsZcOwc2x1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJIbGXDsHNsdXTDpmtpIHRlbmd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iSGxlw7B1ciB1bSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkhsZcOwdXIgw75yw6HDsGxhdXN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IkVra2kgw60gaGxlw7BzbHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJFa2tpIMOtIGhsZcOwc2x1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkZ1bGxobGHDsGluIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L2FycmF5cy54bWwKaW5kZXggNjg2ZDYxZC4uZDY0ZWMwNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVXNhIHNlbXByZSBsYSB2ZXJpZmljYSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik5vbiBhdHRpdmEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJOb24gYXR0aXZhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQga0IvYnVmZmVyIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IvYnVmZmVyIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CL2J1ZmZlciBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQi9idWZmZXIgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2J1ZmZlciBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iTm9uIGF0dGl2YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQi9idWZmZXIgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQi9idWZmZXIgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIvYnVmZmVyIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CL2J1ZmZlciBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIvYnVmZmVyIGxvZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYXppb25lIGRpc2F0dGl2YXRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCmluZGV4IDMzYTE1ZDQuLmVlZGZhMzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlJlbmRlIGxcJ2FwcCBpZG9uZWEgYWxsXCdpbnN0YWxsYXouIHN1IG1lbS4gZXN0ZXJuYSwgc2VuemEgY29uc2lkZXJhcmUgaSB2YWxvcmkgbWFuaWZlc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJJbXBvbmkgZm9ybWF0byBtb2RpZmljYWJpbGUgYWxsZSBhdHRpdml0w6AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlJlbmRlIGlsIGZvcm1hdG8gZGkgdHV0dGUgbGUgYXR0aXZpdMOgIG1vZGlmaWNhYmlsZSBwZXIgbGEgbW9kYWxpdMOgIG11bHRpLWZpbmVzdHJhLCBpbmRpcGVuZGVudGVtZW50ZSBkYWkgdmFsb3JpIG1hbmlmZXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkF0dGl2YSBmaW5lc3RyZSBhIGZvcm1hIGxpYmVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iQXR0aXZhIGlsIHN1cHBvcnRvIHBlciBsZSBmaW5lc3RyZSBhIGZvcm1hIGxpYmVyYSBzcGVyaW1lbnRhbGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlBhc3N3b3JkIGRpIGJhY2t1cCBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJJIGJhY2t1cCBkZXNrdG9wIGNvbXBsZXRpIG5vbiBzb25vIGF0dHVhbG1lbnRlIHByb3RldHRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJUb2NjYSBwZXIgbW9kaWZpY2FyZSBvIHJpbXVvdmVyZSBsYSBwYXNzd29yZCBwZXIgaSBiYWNrdXAgZGVza3RvcCBjb21wbGV0aSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEaXNhdHRpdmF0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlNlbXByZSBhdHRpdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGljbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudGF6aW9uZSBkaSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IkltcG9zdGEgbFwnaW1wbGVtZW50YXppb25lIGRpIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJMXCdpbXBsZW1lbnRhemlvbmUgZGkgV2ViVmlldyBzZWxlemlvbmF0YSBub24gw6ggYXR0aXZhIGUgZGV2ZSBlc3NlcmUgYXR0aXZhdGEgcGVyIHBvdGVybGEgdXRpbGl6emFyZS4gVnVvaSBhdHRpdmFybGE/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGkgaW4gY3JpdHRvZ3JhZmlhIGJhc2F0YSBzdSBmaWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ0aS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iQ3JpdHRvZ3JhZmlhIHN1IGJhc2UgZmlsZSBnacOgIGVzZWd1aXRhIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJDb3JyZXppb25lIGRlbCBjb2xvcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IlF1ZXN0YSBmdW56aW9uZSDDqCBzcGVyaW1lbnRhbGUgZSBwb3RyZWJiZSBpbmZsdWlyZSBzdWxsZSBwcmVzdGF6aW9uaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJWYWxvcmUgc29zdGl0dWl0byBkYSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgVGVtcG8gcmltYW5lbnRlOiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gY2lyY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYWxsYSBjYXJpY2EgY29tcGxldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGFsbGEgY2FyaWNhIGNvbXBsZXRhIHRyYW1pdGUgQ0EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGFsbGEgY2FyaWNhIGNvbXBsZXRhIHRyYW1pdGUgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBsbGEgY2FyaWNhIGNvbXBsZXRhIGNvbiB3aXJlbGVzcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlNjb25vc2NpdXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJJbiBjYXJpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkluIGNhcmljYSB0cmFtaXRlIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iSW4gY2FyaWNhIHRyYW1pdGUgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJJbiBjYXJpY2EsIHdpcmVsZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ik5vbiBpbiBjYXJpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJOb24gaW4gY2FyaWNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkNhcmljYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdy9hcnJheXMueG1sCmluZGV4IDI0YTQwYjkuLjAxMTI3YzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl3L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuKAj9eq157XmdeTINeU16nXqtee16kg15HXkdeT15nXp9eqIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiLigI4yNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLXm9eR15XXmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiLigI4yNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IuKAjjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i15vXkdeV15kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IuKAjjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLigI82NEsg15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuKAjzI1Nksg15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuKAjzFNINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLigI80TSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4oCPMTZNINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLXm9eR15XXmSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLigI82NEsg15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuKAjzI1Nksg15zXm9ecINee15DXkteoINeZ15XXntefIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuKAjzFNINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLigI80TSDXnNeb15wg157XkNeS16gg15nXldee158iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4oCPMTZNINec15vXnCDXnteQ15LXqCDXmdeV157XnyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLXkNeg15nXntem15nXlCDXm9eR15XXmdeUIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IDRhMDg3MGUuLmVjOGYxYTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMTkwLDcgKzE5MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJoZGNwX2NoZWNraW5nX3RpdGxlIiBtc2dpZD0iODYwNTQ3ODkxMzU0NDI3MzI4MiI+IuKAj9eR15PXmden16ogSERDUCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImhkY3BfY2hlY2tpbmdfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNTE0MTMwNTUzMDkyMzI4MyI+IuKAj9eU15LXk9eoINeQ15XXpNefINeR15PXmden16ogSERDUCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlYnVnX2RlYnVnZ2luZ19jYXRlZ29yeSIgbXNnaWQ9IjY3ODEyNTAxNTk1MTM0NzEzMTYiPiLXoNeZ16TXldeZINeR15DXkteZ150iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWJ1Z19hcHAiIG1zZ2lkPSI4MzQ5NTkxNzM0NzUxMzg0NDQ2Ij4i15HXl9eoINeQ16TXnNeZ16fXpteZ15Qg15zXoNeZ16TXldeZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfYXBwIiBtc2dpZD0iODM0OTU5MTczNDc1MTM4NDQ0NiI+IteR15fXqCDXkNek15zXmden16bXmdeUINec16DXmdek15XXmSDXkdeQ15LXmdedIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGVidWdfYXBwX25vdF9zZXQiIG1zZ2lkPSI3MTg3NTI0OTk1ODY0MDM0OTkiPiLXnNeQINeU15XXkteT16jXlCDXkNek15zXmden16bXmdeUINec16DXmdek15XXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlYnVnX2FwcF9zZXQiIG1zZ2lkPSIyMDYzMDc3OTk3ODcwMjgwMDE3Ij4i15DXpNec15nXp9em15nXlCDXnNeg15nXpNeV15k6IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzZWxlY3RfYXBwbGljYXRpb24iIG1zZ2lkPSI1MTU2MDI5MTYxMjg5MDkxNzAzIj4i15HXl9eoINeQ16TXnNeZ16fXpteZ15QiPC9zdHJpbmc+CkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i157XkNek16nXqCDXm9eq15nXkdeUINep15wg15vXnCDXkNek15zXmden16bXmdeUINeR15DXl9eh15XXnyDXl9eZ16bXldeg15ksINec15zXkCDXlNeq15fXqdeR15XXqiDXkdei16jXm9eZINeU157XoNeZ16TXodeYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i15DXnNelINeZ15vXldec16og16fXkdeZ16LXqiDXkteV15PXnCDXqdecINeU16TXoteZ15zXldeZ15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i157XkNek16nXqCDXmdeb15XXnNeqINen15HXmdei16og15LXldeT15wg16nXnCDXm9ecINeU16TXoteZ15zXldeZ15XXqiDXnNeo15nXkdeV15kg15fXnNeV16DXldeqLCDXnNec15Ag16fXqdeoINec16LXqNeaINeU157XoNeZ16TXodeYLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IteU16TXotecINeQ16og15TXkNek16nXqNeV16og15zXqdeg15XXqiDXkNeqINeU15LXldeT15wg15XXlNee15nXp9eV150g16nXnCDXlNeX15zXldeg15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i157XpNei15nXnCDXqtee15nXm9eUINeR16rXm9eV16DXlCDXlNeg15nXodeZ15XXoNeZ16og16nXnCDXqdeZ16DXldeZINeU15LXldeT15wg15XXlNee15nXp9eV150g16nXnCDXlNeX15zXldeg15XXqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i16HXmdeh157XqiDXkteZ15HXldeZINee16fXldee15kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IteS15nXkdeV15nXmdedINee15zXkNeZ150g15HXqdeV15zXl9efINeU16LXkdeV15PXlCDXkNeZ16DXnSDXnteV15LXoNeZ150g15vXoteqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IteS16Ig15vXk9eZINec16nXoNeV16og15DXlSDXnNeU16HXmdeoINeQ16og15TXodeZ16HXnteUINei15HXldeoINeS15nXkdeV15nXmdedINee15zXkNeZ150g15HXqdeV15zXl9efINeU16LXkdeV15PXlCI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i157Xldep15HXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+Itek15XXotecINeq157XmdeTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IteR15DXldek158g15DXldeY15XXnteY15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLigI/XmdeZ16nXldedIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i4oCP15TXkteT16jXqiDXmdeZ16nXldedIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLXlNee16gg15zXlNem16TXoNeqINen15HXpteZ150iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IteU157XqC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i15TXptek16DXqiDXp9eR16bXmdedINeb15HXqCDXnteV15LXk9eo16oiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+Iteq15nXp9eV158g16bXkdeiIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLXqteb15XXoNeUINeW15Ug15TXmdeQINeg15nXodeZ15XXoNeZ16og15XXotep15XXmdeUINec15TXqdek15nXoiDXotecINeU15HXmdem15XXoteZ150uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i16DXoten16Mg16LXnCDXmdeT15kgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDigI88eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g15HXp9eZ16jXldeRINei15Mg15zXodeZ15XXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7igI8gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigI8tIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDXoteTINec157Xmdec15XXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCPLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g16LXkyDXnNee15nXnNeV15kg15HXlteo150g15fXmdec15XXpNeZ158iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiLigI88eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAjy0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INei15Mg15zXnteZ15zXldeZINeRLVVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCPLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g16LXkyDXnNee15nXnNeV15kg15HXmNei15nXoNeUINeQ15zXl9eV15jXmdeqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i15zXkCDXmdeT15XXoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i15jXldei158iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IteY15XXotefINeR15bXqNedINeX15nXnNeV16TXmdefIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i4oCP15jXldei158g15EtVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLXmNeV16LXnyDXkdeQ15XXpNefINeQ15zXl9eV15jXmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLXnNeQINeR15jXoteZ16DXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Itec15Ag15jXldei158iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i157XnNeQIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL2FycmF5cy54bWwKaW5kZXggNjMwN2ExMC4uMzQyNmI1YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1qYS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iSERDUOODgeOCp+ODg+OCr+OCkuW4uOOBq+S9v+eUqOOBmeOCiyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik9GRiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJPRkYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsv44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1Nksv44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNL+ODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS/jg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNL+ODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJPRkYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyAvIOODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSyAvIOODreOCsOODkOODg+ODleOCoSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gLyDjg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIC8g44Ot44Kw44OQ44OD44OV44KhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0gLyDjg63jgrDjg5Djg4Pjg5XjgqEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i44Ki44OL44Oh44O844K344On44Oz44Kq44OVIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IDRjMDQzYWMuLjlhMzJkNDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuODnuODi+ODleOCp+OCueODiOOBruWApOOBq+mWouS/guOBquOBj+OAgeOBmeOBueOBpuOBruOCouODl+ODquOCkuWklumDqOOCueODiOODrOODvOOCuOOBq+abuOOBjei+vOOCgeOCi+OCiOOBhuOBq+OBquOCiuOBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuOCouOCr+ODhuOCo+ODk+ODhuOCo+OCkuOCteOCpOOCuuWkieabtOWPr+iDveOBq+OBmeOCiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i44Oe44OL44OV44Kn44K544OI44Gu5YCk44Gr6Zai5L+C44Gq44GP44CB44Oe44Or44OB44Km44Kj44Oz44OJ44Km44Gn44GZ44G544Gm44Gu44Ki44Kv44OG44Kj44OT44OG44Kj44Gu44K144Kk44K644KS5aSJ5pu044Gn44GN44KL44KI44GG44Gr44Gq44KK44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i44OV44Oq44O844OV44Kp44O844OgIOOCpuOCo+ODs+ODieOCpuOBruacieWKueWMliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i44OG44K544OI5q616ZqO44Gu44OV44Oq44O844OV44Kp44O844OgIOOCpuOCo+ODs+ODieOCpuOBruOCteODneODvOODiOOCkuacieWKueOBq+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJQQ+ODkOODg+OCr+OCouODg+ODl+ODkeOCueODr+ODvOODiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i44OH44K544Kv44OI44OD44OX44Gu44OV44Or44OQ44OD44Kv44Ki44OD44OX44Gv54++5Zyo5L+d6K2344GV44KM44Gm44GE44G+44Gb44KTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuODh+OCueOCr+ODiOODg+ODl+OBruODleODq+ODkOODg+OCr+OCouODg+ODl+eUqOOBruODkeOCueODr+ODvOODieOCkuWkieabtOOBvuOBn+OBr+WJiumZpOOBmeOCi+WgtOWQiOOBq+OCv+ODg+ODl+OBl+OBvuOBmSI8L3N0cmluZz4KQEAgLTI2Myw5ICsyNjUsOSBAQAogICAgIDxpdGVtIG1zZ2lkPSI4MjgwNzU0NDM1OTc5MzcwNzI4Ij4i55uu44Gr6Ieq54S244Gq6ImyIjwvaXRlbT4KICAgICA8aXRlbSBtc2dpZD0iNTM2Mzk2MDY1NDAwOTAxMDM3MSI+IuODh+OCuOOCv+ODq+OCs+ODs+ODhuODs+ODhOOBq+acgOmBqeOBquiJsiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgotICAgIDxzdHJpbmcgbmFtZT0iaW5hY3RpdmVfYXBwc190aXRsZSIgbXNnaWQ9IjEzMTc4MTc4NjM1MDgyNzQ1MzMiPiLnhKHlirnjgarjgqLjg5fjg6oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBfaW5hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjY3Njg3NTY5Njc1OTQyMDI0MTEiPiLnhKHlirnjgILjgr/jg4Pjg5fjgZnjgovjgajliIfjgormm7/jgo/jgorjgb7jgZnjgIIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBfYWN0aXZlX3N1bW1hcnkiIG1zZ2lkPSI0NTEyOTExNTcxOTU0Mzc1OTY4Ij4i5pyJ5Yq544CC44K/44OD44OX44GZ44KL44Go5YiH44KK5pu/44KP44KK44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5hY3RpdmVfYXBwc190aXRsZSIgbXNnaWQ9IjEzMTc4MTc4NjM1MDgyNzQ1MzMiPiLkvJHmraLkuK3jga7jgqLjg5fjg6oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBfaW5hY3RpdmVfc3VtbWFyeSIgbXNnaWQ9IjY3Njg3NTY5Njc1OTQyMDI0MTEiPiLkvJHmraLkuK3jgILjgr/jg4Pjg5fjgZnjgovjgajliIfjgormm7/jgo/jgorjgb7jgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbmFjdGl2ZV9hcHBfYWN0aXZlX3N1bW1hcnkiIG1zZ2lkPSI0NTEyOTExNTcxOTU0Mzc1OTY4Ij4i5a6f6KGM5Lit44CC44K/44OD44OX44GZ44KL44Go5YiH44KK5pu/44KP44KK44G+44GZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icnVubmluZ3NlcnZpY2VzX3NldHRpbmdzX3RpdGxlIiBtc2dpZD0iODA5NzI4NzkzOTg2NTE2NTIxMyI+IuWun+ihjOS4reOBruOCteODvOODk+OCuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJ1bm5pbmdzZXJ2aWNlc19zZXR0aW5nc19zdW1tYXJ5IiBtc2dpZD0iODU0NjA4OTk1ODIxMDMyNzQ4Ij4i54++5Zyo5a6f6KGM5Lit44Gu44K144O844OT44K544KS6KGo56S644GX44Gm5Yi25b6h44GZ44KLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV90aXRsZSIgbXNnaWQ9IjI1OTQxMzMxNDg1MzEyNTY1MTMiPiLlpJzplpPjg6Ljg7zjg4kiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IueEoeWKuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IuW4uOOBq09OIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuiHquWLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg44Gu5a6f6KOFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg44Gu5a6f6KOF44Gu6Kit5a6aIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i44OV44Kh44Kk44Or5pqX5Y+35YyW44Gr5aSJ5o+b44GZ44KLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLlpInmj5vigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuODleOCoeOCpOODq+OBr+aXouOBq+aal+WPt+WMlua4iOOBv+OBp+OBmSI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMjAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i6Imy6KOc5q2jIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLjgZPjga7mqZ/og73jga/oqabpqJPpgYvnlKjmqZ/og73jgafjgYLjgorjgIHjg5Hjg5Xjgqnjg7zjg57jg7PjgrnjgavlvbHpn7/jgZnjgovjgZPjgajjgYzjgYLjgorjgb7jgZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+44Gr44KI44Gj44Gm5LiK5pu444GN5riI44G/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOaui+OCiue0hDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOODleODq+WFhembu+OBvuOBpzx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDjg5Xjg6vlhYXpm7vjgb7jgac8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7vvIhBQ++8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDjg5Xjg6vlhYXpm7vjgb7jgac8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7vvIhVU0LvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g44OV44Or5YWF6Zu744G+44GnPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+77yI44Ov44Kk44Ok44Os44K577yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i5LiN5piOIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLlhYXpm7vkuK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkFD44Gn5YWF6Zu744GX44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iVVNC44Gn5YWF6Zu744GX44Gm44GE44G+44GZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLnhKHnt5rjgaflhYXpm7vjgZfjgabjgYTjgb7jgZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i5YWF6Zu744GX44Gm44GE44G+44Gb44KTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i5YWF6Zu744GX44Gm44GE44G+44Gb44KTIjwvc3RyaW5nPgorICAgIDwhLS0gU3RyaW5nLmZvcm1hdCBmYWlsZWQgZm9yIHRyYW5zbGF0aW9uIC0tPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCAoMjgyNDYxNDc1Mzg2MTQ2MjgwOCkgLS0+CisgICAgPHNraXAgLz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rYS1yR0UvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL2FycmF5cy54bWwKaW5kZXggYWM2MjdhMi4uNGI2Zjc4YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rYS1yR0UvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLhg6fhg53hg5Xhg5Thg5rhg5fhg5Xhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOY4YOn4YOU4YOc4YOUIEhEQ1Ag4YOo4YOU4YOb4YOd4YOs4YOb4YOU4YOR4YOQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4YOS4YOQ4YOb4YOd4YOg4YOX4YOj4YOa4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IOGDmeGDkeGDkOGDmOGDouGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiDhg5nhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSDhg5vhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IOGDm+GDkeGDkOGDmOGDouGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiDhg5vhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQg4YOZ4YOR4YOQ4YOY4YOi4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiDhg5nhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSDhg5vhg5Hhg5Dhg5jhg6Lhg5giPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsgLyDhg5/hg6Phg6Dhg5wuIOGDkeGDo+GDpOGDlOGDoOGDluGDlCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLL+GDn+GDo+GDoOGDnC4g4YOR4YOj4YOk4YOU4YOg4YOW4YOUIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNIC8g4YOf4YOj4YOg4YOcLiDhg5Hhg6Phg6Thg5Thg6Dhg5bhg5QiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gLyDhg5/hg6Phg6Dhg5wuIOGDkeGDo+GDpOGDlOGDoOGDluGDlCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gLyDhg5/hg6Phg6Dhg5wuIOGDkeGDo+GDpOGDlOGDoOGDluGDlCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQg4YOZ4YOR4YOQ4YOY4YOi4YOYIC8g4YOf4YOj4YOg4YOc4YOQ4YOa4YOY4YOhIOGDkeGDo+GDpOGDlOGDoOGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYg4YOZ4YOR4YOQ4YOY4YOi4YOYIC8g4YOf4YOj4YOg4YOc4YOQ4YOa4YOY4YOhIOGDkeGDo+GDpOGDlOGDoOGDmCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIOGDm+GDkeGDkOGDmOGDouGDmCAvIOGDn+GDo+GDoOGDnOGDkOGDmuGDmOGDoSDhg5Hhg6Phg6Thg5Thg6Dhg5giPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCDhg5vhg5Hhg5Dhg5jhg6Lhg5ggLyDhg5/hg6Phg6Dhg5zhg5Dhg5rhg5jhg6Eg4YOR4YOj4YOk4YOU4YOg4YOYIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IOGDm+GDkeGDkOGDmOGDouGDmCAvIOGDn+GDo+GDoOGDnOGDkOGDmuGDmOGDoSDhg5Hhg6Phg6Thg5Thg6Dhg5giPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4YOQ4YOc4YOY4YOb4YOQ4YOq4YOY4YOY4YOhIOGDkuGDkOGDm+GDneGDoOGDl+GDleGDkCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCmluZGV4IDFlYTc5YmYuLjBjZmI2ZWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2EtckdFL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4YOQ4YOe4YOU4YOR4YOYIOGDqeGDkOGDmOGDrOGDlOGDoC4g4YOS4YOQ4YOg4YOUIOGDm+GDlOGDruGDoS4t4YOW4YOUIOGDkOGDpuGDrC4g4YOk4YOQ4YOY4YOa4YOY4YOhIOGDm+GDnOGDmOGDqOGDleGDnC4g4YOb4YOY4YOj4YOu4YOU4YOTLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuGDluGDneGDm+GDkOGDquGDleGDmuGDkOGDk+GDmCDhg5Dhg6Xhg6Lhg5jhg5Xhg53hg5Hhg5Thg5Hhg5jhg6Eg4YOY4YOr4YOj4YOa4YOU4YOR4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhg5vhg5Dhg5zhg5jhg6Thg5Thg6Hhg6Lhg5jhg6Eg4YOb4YOc4YOY4YOo4YOV4YOc4YOU4YOa4YOd4YOR4YOU4YOR4YOY4YOhIOGDm+GDmOGDo+GDruGDlOGDk+GDkOGDleGDkOGDkywg4YOn4YOV4YOU4YOa4YOQIOGDkOGDpeGDouGDmOGDleGDneGDkeGDkOGDoSDhg5vhg6Dhg5Dhg5Xhg5Dhg5rhg5gg4YOk4YOQ4YOc4YOv4YOg4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmOGDoeGDl+GDleGDmOGDoSDhg5bhg53hg5vhg5Dhg6rhg5Xhg5rhg5Dhg5Phg5Dhg5Mg4YOQ4YOl4YOq4YOU4YOV4YOhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuGDl+GDkOGDleGDmOGDoeGDo+GDpOGDkOGDmuGDmCDhg6Thg53hg6Dhg5vhg5jhg6Eg4YOb4YOl4YOd4YOc4YOUIOGDpOGDkOGDnOGDr+GDoOGDlOGDkeGDmOGDoSDhg6nhg5Dhg6Dhg5fhg5Xhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuGDqeGDkOGDoOGDl+GDkOGDleGDoSDhg5fhg5Dhg5Xhg5jhg6Hhg6Phg6Thg5Dhg5rhg5gg4YOk4YOd4YOg4YOb4YOY4YOhIOGDm+GDpeGDneGDnOGDlCDhg6Thg5Dhg5zhg6/hg6Dhg5Thg5Hhg5jhg6Eg4YOb4YOu4YOQ4YOg4YOT4YOQ4YOt4YOU4YOg4YOY4YOhIOGDlOGDpeGDoeGDnuGDlOGDoOGDmOGDm+GDlOGDnOGDouGDo+GDmiDhg6Thg6Phg5zhg6Xhg6rhg5jhg5Dhg6EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4YOT4YOU4YOh4YOZ4YOi4YOd4YOe4YOY4YOhIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5jhg6Eg4YOe4YOQ4YOg4YOd4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLhg5Phg5Thg6Hhg5nhg6Lhg53hg57hg5jhg6Eg4YOh4YOg4YOj4YOa4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5gg4YOQ4YOb4YOf4YOQ4YOb4YOQ4YOTIOGDk+GDkOGDquGDo+GDmuGDmCDhg5Dhg6Ag4YOQ4YOg4YOY4YOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuGDqOGDlOGDlOGDruGDlOGDlyDhg5Phg5Thg6Hhg5nhg6Lhg53hg57hg5jhg6Eg4YOh4YOg4YOj4YOa4YOYIOGDoeGDkOGDoOGDlOGDluGDlOGDoOGDleGDnSDhg5Dhg6Hhg5rhg5Thg5Hhg5jhg6Eg4YOe4YOQ4YOg4YOd4YOa4YOY4YOhIOGDqOGDlOGDoeGDkOGDquGDleGDmuGDlOGDmuGDkOGDkyDhg5Dhg5wg4YOs4YOQ4YOh4YOQ4YOo4YOa4YOU4YOa4YOQ4YOTIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLhg6fhg53hg5Xhg5Thg5rhg5fhg5Xhg5jhg6Eg4YOp4YOQ4YOg4YOX4YOj4YOa4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuGDkOGDleGDouGDneGDm+GDkOGDouGDo+GDoOGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4YOg4YOU4YOQ4YOa4YOY4YOW4YOQ4YOq4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4YOg4YOU4YOQ4YOa4YOY4YOW4YOQ4YOq4YOY4YOY4YOhIOGDk+GDkOGDp+GDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuGDpOGDkOGDmOGDmuGDlOGDkeGDmOGDoSDhg5Phg5Dhg6jhg5jhg6Thg5Xhg6Dhg5Dhg5bhg5Qg4YOS4YOQ4YOg4YOT4YOQ4YOl4YOb4YOc4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLhg5Lhg5Dhg6Dhg5Phg5Dhg6Xhg5vhg5zhg5DigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuGDo+GDmeGDleGDlCDhg5Phg5Dhg6jhg5jhg6Thg6Dhg6Phg5rhg5jhg5Ag4YOk4YOQ4YOY4YOa4YOU4YOR4YOY4YOhIOGDk+GDneGDnOGDlOGDluGDlCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i4YOk4YOU4YOg4YOY4YOhIOGDmeGDneGDoOGDlOGDpeGDquGDmOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i4YOU4YOhIOGDpOGDo+GDnOGDpeGDquGDmOGDkCDhg6Hhg5Dhg6rhg5Phg5Thg5rhg5jhg5Ag4YOT4YOQIOGDqOGDlOGDmOGDq+GDmuGDlOGDkeGDkCDhg5Lhg5Dhg5Xhg5rhg5Thg5zhg5Ag4YOY4YOl4YOd4YOc4YOY4YOd4YOhIOGDqOGDlOGDoeGDoOGDo+GDmuGDlOGDkeGDkOGDluGDlC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiLhg6Phg5nhg6Phg5Lhg5Thg5Hhg6Phg5rhg5jhg5AgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPi3hg5jhg6Eg4YOb4YOY4YOU4YOgIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4i4YOT4YOQ4YOQ4YOu4YOaLiA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOGDk+GDkOGDoOGDqeGDlOGDnOGDmOGDmuGDmOGDkCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4YOh4YOg4YOj4YOaIOGDk+GDkOGDouGDlOGDnOGDleGDkOGDm+GDk+GDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4YOU4YOa4YOZ4YOV4YOU4YOR4YOY4YOXIOGDoeGDoOGDo+GDmiDhg5Phg5Dhg6Lhg5Thg5zhg5Xhg5Dhg5vhg5Phg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IFVTQi3hg5fhg5gg4YOh4YOg4YOj4YOaIOGDk+GDkOGDouGDlOGDnOGDleGDkOGDm+GDk+GDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4YOj4YOh4YOQ4YOT4YOU4YOc4YOd4YOT4YOQ4YOcIOGDoeGDoOGDo+GDmiDhg5Phg5Dhg6Lhg5Thg5zhg5Xhg5Dhg5vhg5Phg5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLhg6Phg6rhg5zhg53hg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuGDmOGDouGDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i4YOT4YOQ4YOi4YOU4YOc4YOV4YOQIOGDlOGDmuGDmeGDleGDlOGDkeGDkOGDluGDlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IuGDk+GDkOGDouGDlOGDnOGDleGDkCBVU0It4YOW4YOUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLhg5Phg5Dhg6Lhg5Thg5zhg5Xhg5Ag4YOj4YOh4YOQ4YOT4YOU4YOc4YOd4YOTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuGDkOGDoCDhg5jhg6Lhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLhg5Dhg6Ag4YOY4YOi4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuGDkeGDkOGDouGDkOGDoOGDlOGDkCDhg5Phg5Dhg6Lhg5Thg5zhg5jhg5rhg5jhg5AiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9hcnJheXMueG1sCmluZGV4IGI5OTRlYjcuLjQzYWZiMmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta2stcktaL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ray1yS1ovYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i05jRgNKb0LDRiNCw0L0gSERDUCAo0LbQvtKT0LDRgNGLINC60LXSoyDQttC+0LvQsNKb0YLRiyDRgdCw0L3QtNGL0psg0LzQsNC30LzSsdC9INKb0L7RgNKT0LDRg9GI0YspINGC0LXQutGB0LXRgNGD0LvQtdGA0ZbQvSDSm9C+0LvQtNCw0L3Ri9Kj0YvQtyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxINCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCDQnNCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i06jRiNGW0YDRg9C70ZYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxINCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i06jRiNGW0YDRg9C70ZYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxINCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDY0INCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSAyNTYg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDEg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDQg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLTmNGAINC20YPRgNC90LDQuyDQsdGD0YTQtdGA0ZbQvdC1IDE2INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i06jRiNGW0YDRg9C70ZYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSA2NCDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItOY0YAg0LbRg9GA0L3QsNC7INCx0YPRhNC10YDRltC90LUgMjU2INCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSAxINCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSA0INCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i05jRgCDQttGD0YDQvdCw0Lsg0LHRg9GE0LXRgNGW0L3QtSAxNiDQnNCRIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkHQvdC40LzQsNGG0LjRjyDTqdGI0ZbRgNGW0LvQs9C10L0iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAppbmRleCBjNmEyNzY4Li5iNjI5NTIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+ItCc0LDQvdC40YTQtdGB0YIg0LzTmdC90LTQtdGA0ZbQvdC1INKb0LDRgNCw0LzQsNGB0YLQsNC9INC60LXQtyDQutC10LvQs9C10L0g0pvQvtC70LTQsNC90LHQsNC90Ysg0YHRi9GA0YLSm9GLINC20LDQtNKb0LAg0LbQsNC30YPSk9CwINC20LDRgNCw0LzQtNGLINC10YLQtdC00ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLTmNGA0LXQutC10YLRgtC10YDQtNGWINOp0LvRiNC10LzRltC9INOp0LfQs9C10YDRgtGD0LPQtSDQsdC+0LvQsNGC0YvQvSDQtdGC0YPQs9C1INC805nQttCx0q/RgNC70LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0JzQsNC90LjRhNC10YHRgiDQvNOZ0L3QtNC10YDRltC90LUg0pvQsNGA0LDQvNCw0YHRgtCw0L0g0LHQsNGA0LvRi9KbINOZ0YDQtdC60LXRgtGC0LXRgNC00ZYg0LHRltGA0L3QtdGI0LUg0YLQtdGA0LXQt9C1INKv0YjRltC9INOp0LvRiNC10LzRltC9INOp0LfQs9C10YDRgtGD0LPQtSDQsdC+0LvQsNGC0YvQvSDQtdGC0LXQtNGWLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ItCV0YDQutGW0L0g0L/RltGI0ZbQvdC00LXQs9GWINGC0LXRgNC10LfQtdC70LXRgNC00ZYg0pvQvtGB0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+ItCt0LrRgdC/0LXRgNC40LzQtdC90YLRgtGW0Log0LXRgNC60ZbQvSDQv9GW0YjRltC90LTQtdCz0ZYg0YLQtdGA0LXQt9C10LvQtdGA0LTRliDSm9C+0LvQtNCw0YPQtNGLINKb0L7RgdCw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0JrQvtC80L/RjNGO0YLQtdGAINKv0YHRgtC10LvRltC90ZbSoyDRgdCw0pvRgtGL0psg0LrTqdGI0ZbRgNC80LXRgdGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQltKx0LzRi9GBINKv0YHRgtC10LvRltC90ZbSoyDRgdCw0pvRgtGL0psg0LrTqdGI0ZbRgNC80LXQu9C10YDRliDSm9Cw0LfRltGAINKb0L7RgNKT0LDQu9C80LDSk9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i0JbSsdC80YvRgSDSr9GB0YLQtdC70ZbQvdGW0qMg0YLQvtC70YvSmyDRgdCw0pvRgtGL0psg0LrTqdGI0ZbRgNC80LXRgdGW0L3RltKjINC60ZbQu9GC0YHTqdC30ZbQvSDTqdC30LPQtdGA0YLRgyDQvdC10LzQtdGB0LUg0LbQvtGOINKv0YjRltC9INGC0q/RgNGC0ZbSo9GW0LciPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+ItOo0YjRltGA0ZbQu9Cz0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+ItOY0YDSm9Cw0YjQsNC9INKb0L7RgdGD0LvRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJB0LLRgtC+0LzQsNGC0YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg0LXQvdC00ZbRgNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg0LXQvdC00ZbRgNGD0ZbQvSDQvtGA0L3QsNGC0YMiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLQpNCw0LnQu9C00Ysg0YjQuNGE0YDQu9Cw0YPSk9CwINGC0q/RgNC70LXQvdC00ZbRgNGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLQotKv0YDQu9C10L3QtNGW0YDRgy4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i0KTQsNC50Lsg0YjQuNGE0YDQu9Cw0L3Ri9C/INKb0L7QudGL0LvSk9Cw0L0iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+ItCi0q/RgdGC0ZYg0YLSr9C30LXRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLQkdKx0Lsg0LzSr9C80LrRltC90LTRltC6INGN0LrRgdC/0LXRgNC40LzQtdC90YLRgtGW0Log0LHQvtC70YvQvyDRgtCw0LHRi9C70LDQtNGLINC205nQvdC1INOp0L3RltC80LTRltC70ZbQutC60LUg05nRgdC10YAg0LXRgtGD0ZYg0LzSr9C80LrRltC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ijx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4g0q/RgdGC0ZbQvdC10L0g0LHQsNGB0pvQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtINGI0LDQvNCw0LzQtdC9IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDSm9Cw0LvQtNGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g0YLQvtC70pPQsNC90YjQsCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g0LDQudC90YvQvNCw0LvRiyDRgtC+0LrQv9C10L0g0YLQvtC70pPQsNC90YjQsCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gVVNCINCw0YDSm9GL0LvRiyDRgtC+0LvSk9Cw0L3RiNCwIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDRgdGL0LzRgdGL0Lcg0YLQvtC70pPQsNC90YjQsCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLQkdC10LvQs9GW0YHRltC3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLQl9Cw0YDRj9C00YLQsNC70YPQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLQkNC50L3Ri9C80LDQu9GLINGC0L7QutC/0LXQvSDQt9Cw0YAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iVVNCINCw0YDSm9GL0LvRiyDQt9Cw0YDRj9C00YLQsNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLQodGL0LzRgdGL0Lcg0LfQsNGA0Y/QtNGC0LDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLQl9Cw0YDRj9C00YLQsNC70YMg0L7RgNGL0L3QtNCw0LvRi9C/INC20LDRgtKb0LDQvSDQttC+0psiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQl9Cw0YDRj9C00YLQsNC70YvQvyDRgtKx0YDSk9Cw0L0g0LbQvtKbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItCi0L7Qu9GL0psiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta20tcktIL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9hcnJheXMueG1sCmluZGV4IDUwYzEyOTkuLjYzOTIxYmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta20tcktIL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbS1yS0gvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4Z6U4Z+S4Z6a4Z6+4oCL4Z6A4Z624Z6a4oCL4Z6W4Z634Z6T4Z634Z6P4Z+S4Z6ZIEhEQ1Ag4Z6H4Z624oCL4Z6T4Z634Z6F4Z+S4Z6FIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4Z6U4Z634Z6RIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLhnpThnrfhnpEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsgcGVyIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gcGVyIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4Z6U4Z634Z6RIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTZLIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIHBlciBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2TSBwZXIgbG9nIGJ1ZmZlciI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLhnpThnrfhnpHigIvhnoXhnpvhnpPhnrYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAppbmRleCAzZTkxOTI1Li4xMTU1YzA3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuGekuGfkuGenOGevuGesuGfkuGemeGegOGemOGfkuGemOGenOGet+GekuGeuOGekeGetuGfhuGehOGeoeGetuGemeGemOGetuGek+Gen+Get+GekeGfkuGekuGet+Gen+GemuGen+GfgeGemuGekeGfheGegOGetuGek+Gfi+Gep+GelOGegOGemuGejuGfjeGeleGfkuGekeGeu+GegOGegeGetuGehOGegOGfkuGemuGfhSDhnorhn4ThnpnhnpjhnrfhnpPhnoLhnrfhno/hnpbhnrjhno/hnpjhn5Lhnpvhn4PhnofhnrbhnoDhn4vhnpvhnrbhnoDhn4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLhnpThnoThn5LhnoHhn4bhnrLhn5Lhnpnhnp/hnoDhnpjhn5LhnpjhnpfhnrbhnpbhnqLhnrbhnoXhnpThn5Lhno/hnrzhnprhnpHhn4bhnqDhn4bhnpThnrbhnpMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuGegOGfhuGejuGej+Gfi+GesuGfkuGemeGen+GegOGemOGfkuGemOGel+GetuGeluGekeGetuGfhuGehOGeouGen+Gfi+GeouGetuGeheGelOGfkuGej+GevOGemuGekeGfhuGeoOGfhuGelOGetuGek+Gen+GemOGfkuGemuGetuGelOGfi+GeluGeoOGeu+GeleGfkuGekeGetuGfhuGehOGenOGet+Gek+GeiuGevCDhnorhn4ThnpnhnpjhnrfhnpPhnoLhnrfhno/hnpbhnrjhno/hnpjhn5Lhnpvhn4Phnpjhn4HhnpPhnrjhnqDhn5Lhnpzhn4Hhnp/hnqHhnr7hnpnhn5QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLhnpThnr7hnoDhnorhn4bhno7hnr7hnprhnoDhnrbhnprhnpXhn5LhnpHhnrbhn4bhnoThnpzhnrfhnpPhnorhnrzhnpHhnpjhn5LhnprhnoThn4vhnp/hn4HhnprhnrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuGelOGevuGegOGeiuGfhuGejuGevuGemuGegOGetuGemuGeguGetuGfhuGekeGfkuGemuGeleGfkuGekeGetuGfhuGehOGenOGet+Gek+GeiuGevOGekeGemOGfkuGemuGehOGfi+Gen+GfgeGemuGeuOGen+GetuGegOGem+GfkuGelOGehCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLhnpbhnrbhnoDhn5LhnpnigIvhnp/hnpjhn5LhnoThnrbhno/hn4vigIvhnpThnpjhn5LhnprhnrvhnoTigIvhnpHhnrvhnoDigIvhnpvhnr7igIvhnpXhn5LhnpHhn4Phno/hnrsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuGegOGetuGemuKAi+GelOGemOGfkuGemuGeu+GehOKAi+GekeGeu+GegOKAi+GeluGfgeGeieGem+GfgeGeieKAi+Gem+GevuKAi+GeleGfkuGekeGfg+Gej+Geu+KAi+GelOGeheGfkuGeheGeu+GelOGfkuGelOGek+GfkuGek+KAi+GemOGet+Gek+KAi+Gej+GfkuGemuGevOGenOKAi+GelOGetuGek+KAi+GegOGetuGemuGeluGetuGemuKAi+GekeGfgeGflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLhnpThn4nhn4cg4Z6K4Z6+4Z6Y4Z+S4Z6U4Z644oCL4Z6U4Z+S4Z6K4Z684Z6aIOGerOKAi+Gem+Geu+GelOKAi+GeluGetuGegOGfkuGemeKAi+Gen+GemOGfkuGehOGetuGej+Gfi+KAi+Gen+GemOGfkuGemuGetuGelOGfi+KAi+GegOGetuGemuKAi+GelOGemOGfkuGemuGeu+GehOGekeGeu+GegOKAi+GeluGfgeGeieGem+GfgeGeieKAi+Gem+GevuKAi+GeleGfkuGekeGfg+Gej+GeuyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i4Z6U4Z624Z6T4Z6U4Z634Z6RIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4Z6U4Z6+4Z6A4Z6H4Z624Z6T4Z634Z6F4Z+S4Z6FIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuGen+GfkuGenOGfkOGemeGelOGfkuGemuGenOGej+GfkuGej+GetyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IuGegOGetuGemuGelOGfkuGemuGej+Get+GelOGej+GfkuGej+GetyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuGegOGfhuGejuGej+Gfi+GegOGetuGemuGelOGfkuGemuGej+Get+GelOGej+GfkuGej+GetyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4Z6U4Z6Y4Z+S4Z6b4Z+C4Z6E4Z6R4Z+F4Z6H4Z624Z6A4Z624Z6a4Z6i4Z+K4Z644Z6T4Z6C4Z+S4Z6a4Z644Z6U4Z6v4Z6A4Z6f4Z624Z6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLhnpThnpjhn5Lhnpvhn4LhnoTigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuGelOGetuGek+GeouGfiuGeuOGek+GeguGfkuGemuGeuOGelOGer+GegOGen+GetuGemuGemuGeveGeheGeoOGevuGemSI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i4Z6A4Z624Z6a4oCL4Z6A4Z+C4oCL4Z6W4Z6O4Z+MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLhnpvhnoDhn5LhnoHhno7hn4jigIvhnpPhn4Hhn4figIvhnoLhnrrigIvhnofhnrbigIvhnoDhnrbhnprigIvhnpbhnrfhnp/hn4ThnpLhnpPhn40g4Z6g4Z6+4Z6Z4oCL4Z6i4Z624Z6F4oCL4Z6U4Z+J4Z+H4Z6W4Z624Z6b4Z+L4oCL4Z6A4Z624Z6a4oCL4Z6i4Z6T4Z674Z6c4Z6P4Z+S4Z6P4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i4Z6U4Z6K4Z634Z6f4Z+B4Z6S4oCL4Z6K4Z+E4Z6ZIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4Z6T4Z+F4oCL4Z6f4Z6b4Z+L4oCL4Z6U4Z+S4Z6a4Z6g4Z+C4Z6bIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhnprhnqDhnrzhno/igIvhnorhnpvhn4vigIvhnpbhn4HhnokiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOGemuGeoOGevOGej+KAi+GeiuGem+Gfi+GeluGfgeGeieKAi+GemuGeheGek+GfkuGej+KAi+GehuGfkuGem+GetuGen+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4Z6a4Z6g4Z684Z6P4oCL4Z6K4Z6b4Z+L4oCL4Z6W4Z+B4Z6J4oCL4Z6P4Z624Z6Y4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhnprhnqDhnrzhno/igIvhnorhnpvhn4vigIvhnpbhn4HhnonigIvhnpbhnrjigIvhnqXhno/hnoHhn5Lhnp/hn4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLhnpjhnrfhnpPigIvhnp/hn5LhnoLhnrbhnpvhn4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuGegOGfhuGeluGeu+GehOGelOGeieGfkuGeheGevOGem+KAi+GekOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z6Q4Z+S4Z6Y4Z6P4Z624Z6YIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z6Q4Z+S4Z6Y4Z6P4Z624Z6Y4Z6Z4Z684Z6i4Z+B4Z6f4Z6U4Z+K4Z64Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLhnpThnonhn5LhnoXhnrzhnpvhnpDhn5Lhnpjhnorhn4ThnpnigIvigIvhnqXhno/hnoHhn5Lhnp/hn4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4Z6Y4Z634Z6T4Z6A4Z+G4Z6W4Z674Z6E4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4oCL4Z6Q4Z+S4Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i4Z6Y4Z634Z6T4oCL4Z6U4Z6J4Z+S4Z6F4Z684Z6b4Z6Q4Z+S4Z6YIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuGeluGfgeGeiSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta24tcklOL2FycmF5cy54bWwKaW5kZXggZmUwNGQyOC4uZTFlNjlmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtuLXJJTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIRENQIOCyquCysOCyv+CytuCzgOCysuCyqOCzhuCyr+CyqOCzjeCyqOCzgSDgsq/gsr7gsrXgsr7gspfgsrLgs4Ig4LKs4LKz4LK44LOBIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4LKG4LKr4LONIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLgsobgsqvgs40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4LKq4LON4LKw4LKk4LK/IOCysuCyvuCyl+CzjSDgsqzgsqvgsrDgs43igIzgspfgs4YgMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiAxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4LKG4LKr4LONIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLgsqrgs43gsrDgsqTgsr8g4LKy4LK+4LKX4LONIOCyrOCyq+CysOCzjeKAjOCyl+CzhiAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuCyquCzjeCysOCypOCyvyDgsrLgsr7gspfgs40g4LKs4LKr4LKw4LON4oCM4LKX4LOGIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgsobgsqjgsr/gsq7gs4fgsrbgsqjgs40g4LKG4LKr4LONIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggNGQxZjllMS4uOTQ4YzY2NTMxNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgsq7gs43gsq/gsr7gsqjgsr/gsqvgs4bgsrjgs43gsp/gs40g4LKu4LOM4LKy4LON4LKv4LKX4LKz4LKo4LON4LKo4LOBIOCyquCysOCyv+Cyl+Cyo+Cyv+CyuOCypuCzhywg4LKv4LK+4LK14LOB4LKm4LOHIOCyheCyquCzjeCysuCyv+CyleCzh+CytuCyqOCzjeKAjOCyl+CzhiDgsqzgsr7gsrngs43gsq8g4LK44LKC4LKX4LON4LKw4LK54LKj4LOG4LKX4LOGIOCyrOCysOCzhuCyr+CysuCzgSDgsoXgsrDgs43gsrngspfgs4rgsrPgsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgsprgsp/gs4HgsrXgsp/gsr/gspXgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LKu4LKw4LOB4LKX4LK+4LKk4LON4LKw4LKX4LOK4LKz4LK/4LK44LOB4LK14LKC4LKk4LOGIOCykuCypOCzjeCypOCyvuCyryDgsq7gsr7gsqHgsr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuCyruCzjeCyr+CyvuCyqOCyv+Cyq+CzhuCyuOCzjeCyn+CzjSDgsq7gs4zgsrLgs43gsq/gspfgsrPgsqjgs43gsqjgs4Eg4LKq4LKw4LK/4LKX4LKj4LK/4LK44LKm4LOHLCDgsqzgsrngs4Et4LK14LK/4LKC4LKh4LOK4LKX4LOGIOCyjuCysuCzjeCysuCyviDgsprgsp/gs4HgsrXgsp/gsr/gspXgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LKu4LKw4LOB4LKX4LK+4LKk4LON4LKw4LKX4LOK4LKz4LK/4LK44LOB4LK14LKC4LKk4LOGIOCyruCyvuCyoeCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgsq7gs4HgspXgs43gsqTgsrjgs43gsrXgsrDgs4LgsqrgsqYg4LK14LK/4LKC4LKh4LOK4LKX4LKz4LKo4LON4LKo4LOBIOCyuOCyleCzjeCysOCyv+Cyr+Cyl+CziuCys+Cyv+CyuOCyvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4LKq4LON4LKw4LK+4LKv4LOL4LKX4LK/4LKVIOCyruCzgeCyleCzjeCypOCyuOCzjeCyteCysOCzguCyquCypiDgsrXgsr/gsoLgsqHgs4rgspfgsrPgsr/gspfgs4Yg4LKs4LOG4LKC4LKs4LKy4LK14LKo4LON4LKo4LOBIOCyuOCyleCzjeCysOCyv+Cyr+Cyl+CziuCys+Cyv+CyuOCzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4LKh4LOG4LK44LON4LKV4LON4oCM4LKf4LK+4LKq4LONIOCyrOCzjeCyr+CyvuCyleCyquCzjSDgsqrgsr7gsrjgs43igIzgsrXgsrDgs43gsqHgs40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuCyoeCzhuCyuOCzjeCyleCzjeKAjOCyn+CyvuCyquCzjeKAjOKAjOCyqCDgsqrgs4LgsrDgs43gsqMg4LKs4LON4LKv4LK+4LKV4LKq4LON4oCM4oCM4LKX4LKz4LKo4LON4LKo4LOBIOCyquCzjeCysOCyuOCzjeCypOCzgeCypCDgsrDgspXgs43gsrfgsr/gsrjgsrLgsr7gspfgsr/gsrLgs43gsrIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LKh4LOG4LK44LON4LKV4LON4oCM4LKf4LK+4LKq4LON4oCM4LKoIOCyquCzguCysOCzjeCyoyDgsqzgs43gsq/gsr7gspXgsqrgs43igIzgspfgsrPgsr/gspfgs4Yg4LKq4LK+4LK44LON4oCM4LK14LKw4LON4LKh4LON4oCMIOCyheCyqOCzjeCyqOCzgSDgsqzgsqbgsrLgsr7gsq/gsr/gsrjgsrLgs4Eg4LKF4LKl4LK14LK+IOCypOCzhuCyl+CzhuCypuCzgeCyueCyvuCyleCysuCzgSDgsrjgs43gsqrgsrDgs43gsrbgsr/gsrjgsr8iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i4LKo4LK/4LK34LON4LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4LKv4LK+4LK14LK+4LKX4LKy4LOCIOCyhuCyqOCzjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLgsrjgs43gsrXgsq/gsoLgsprgsr7gsrLgsr/gsqQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3IOCyheCyqOCzgeCyt+CzjeCyoOCyvuCyqOCyl+CziuCys+Cyv+CyuOCzgeCyteCyv+CyleCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3IOCyheCyqOCzgeCyt+CzjeCyoOCyvuCyqOCyl+CziuCys+Cyv+CyuOCzgeCyteCyv+CyleCzhuCyr+CyqOCzjeCyqOCzgSDgsrngs4rgsoLgsqbgsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiLgsobgsq/gs43gspXgs4bgsq7gsr7gsqHgsrLgsr7gsqYgV2ViVmlldyDgsoXgsqjgs4Hgsrfgs43gsqDgsr7gsqjgspfgs4rgsrPgsr/gsrjgs4HgsrXgsr/gspXgs4bgsq/gsqjgs43gsqjgs4Eg4LKo4LK/4LK34LON4LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGIOCyruCypOCzjeCypOCzgSDgsqzgsrPgsrjgsrLgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LKs4LOH4LKV4LK+4LKX4LK/4LKm4LOGLCDgsofgsqbgsqjgs43gsqjgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LKy4LOBIOCyqOCzgOCyteCzgSDgsqzgsq/gsrjgs4HgsqTgs43gsqTgs4DgsrDgsr4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4LKr4LOI4LKy4LONIOCyjuCyqOCzjeKAjOCyleCzjeCysOCyv+CyquCzjeCytuCyqOCzjeKAjOCyl+CzhiDgsqrgsrDgsr/gsrXgsrDgs43gsqTgsr/gsrjgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCyquCysOCyv+CyteCysOCzjeCypOCyv+CyuOCzgeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4LKr4LOI4LKy4LONIOCyiOCyl+CyvuCyl+CysuCzhyDgso7gsqjgs43igIzgspXgs43gsrDgsr/gsqrgs43gsp/gs40g4LKu4LK+4LKh4LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgsqzgsqPgs43gsqPgsqYg4LKk4LK/4LKm4LON4LKm4LOB4LKq4LKh4LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLgsofgsqbgs4Eg4LKq4LON4LKw4LK+4LKv4LOL4LKX4LK/4LKVIOCyteCziOCytuCyv+Cyt+CzjeCyn+CzjeCyr+CyteCyvuCyl+Cyv+CypuCzhi4g4LKV4LK+4LKw4LON4LKv4LKV4LON4LK34LKu4LKk4LOGIOCyruCzh+CysuCzhiDgsqrgsrDgsr/gsqPgsr7gsq4g4LKs4LOA4LKw4LKs4LK54LOB4LKm4LOBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ijx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4g4LKu4LOC4LKy4LKVIOCyheCypOCyv+CyleCzjeCysOCyruCyv+CyuOCzgeCypOCzjeCypOCypuCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+IuCyuOCzgeCyruCyvuCysOCzgSA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgsongsrPgsr/gsqbgsr/gsqbgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LKq4LOC4LKw4LON4LKj4LK14LK+4LKX4LOB4LK14LK14LKw4LOG4LKX4LOGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBBQyDgsqjgsrLgs43gsrLgsr8g4LKq4LOC4LKw4LON4LKj4LK14LK+4LKX4LOB4LK14LK14LKw4LOG4LKX4LOGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBVU0Ig4LKu4LOC4LKy4LKVIOCyquCzguCysOCzjeCyo+CyteCyvuCyl+CzgeCyteCyteCysOCzhuCyl+CzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LK14LOI4LKw4LON4oCM4oCM4LKy4LOG4LK44LON4oCM4LKo4LK/4LKC4LKmIOCyquCzguCysOCzjeCyo+CyteCyvuCyl+CzgeCyteCyteCysOCzhuCyl+CzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCyheCynOCzjeCynuCyvuCypCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4LKa4LK+4LKw4LON4LKc4LONIOCyhuCyl+CzgeCypOCzjeCypOCyv+CypuCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMg4LKo4LKy4LON4LKy4LK/IOCymuCyvuCysOCzjeCynOCzjeKAjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDgsq7gs4LgsrLgspUg4LKa4LK+4LKw4LON4LKc4LON4oCMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLgsqjgsr/gsrjgs43gsqTgsoLgsqTgs4HgsrXgsr7gspfgsr8g4LKa4LK+4LKw4LON4LKc4LON4oCMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuCymuCyvuCysOCzjeCynOCzjeKAjCDgsobgspfgs4HgsqTgs43gsqTgsr/gsrLgs43gsrIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLgsprgsr7gsrDgs43gspzgs40g4LKG4LKX4LOB4LKk4LON4LKk4LK/4LKy4LON4LKyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuCyreCysOCzjeCypOCyvyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9hcnJheXMueG1sCmluZGV4IGE4ZDU0OGZmLi4zZTg4NjdlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtvL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLtla3sg4EgSERDUCDtmZXsnbgg7IKs7JqpIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i7IKs7JqpIOyViO2VqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i7IKs7JqpIOyViO2VqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuuhnOq3uCDrsoTtjbzri7kgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuuhnOq3uCDrsoTtjbzri7kgMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLroZzqt7gg67KE7Y2864u5IDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuuhnOq3uCDrsoTtjbzri7kgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i66Gc6re4IOuyhO2NvOuLuSAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i7IKs7JqpIOyViO2VqCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLroZzqt7gg67KE7Y2864u5IDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLroZzqt7gg67KE7Y2864u5IDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i66Gc6re4IOuyhO2NvOuLuSAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLroZzqt7gg67KE7Y2864u5IDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuuhnOq3uCDrsoTtjbzri7kgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuyVoOuLiOuplOydtOyFmCDsgqzsmqkg7JWI7ZWoIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCmluZGV4IGM0YWIwODQuLjdmNWNlZTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuunpOuLiO2OmOyKpO2KuCDqsJLsl5Ag6rSA6rOE7JeG7J20IOyVseydhCDsmbjrtoAg7KCA7J6l7IaM7JeQIOyekeyEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+Iu2ZnOuPmeydmCDtgazquLDqsIAg7KGw7KCVIOqwgOuKpe2VmOuPhOuhnSDshKTsoJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuuqqOuToCDtmZzrj5nsnYQg66ek64uI7Y6Y7Iqk7Yq4IOqwkuyXkCDqtIDqs4Tsl4bsnbQg66mA7YuwIOyciOuPhOyasOyaqeycvOuhnCDtgazquLAg7KGw7KCVIOqwgOuKpe2VmOuPhOuhnSDshKTsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLsnpDsnKAg7ZiV7IudIOywvSDsgqzsmqkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuyekOycoCDtmJXsi50g7LC9KOuyoO2DgCkg7KeA7JuQIOyCrOyaqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLrjbDsiqTtgazthrEg67Cx7JeFIOu5hOuwgOuyiO2YuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i642w7Iqk7YGs7YaxIOyghOyytCDrsLHsl4Xsl5Ag67mE67CA67KI7Zi46rCAIOyEpOygleuQmOyWtCDsnojsp4Ag7JWK7J2MIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuuNsOyKpO2BrO2GsSDsoITssrQg67Cx7JeF7JeQIOuMgO2VnCDruYTrsIDrsojtmLjrpbwg67OA6rK97ZWY6rGw64KYIOyCreygnO2VmOugpOuptCDthLDsuZjtlZjshLjsmpQuIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLsgqzsmqkg7JWI7ZWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i7ZWt7IOBIOyCrOyaqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLsnpDrj5kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3IOq1rO2YhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3IOq1rO2YhCDshKTsoJUiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLtjIzsnbwg7JWU7Zi47ZmU66GcIOuzgO2ZmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i67OA7ZmYLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLtjIzsnbzsnbQg7J2066+4IOyVlO2YuO2ZlOuQqCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i7IOJ67O07KCVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLsi6Ttl5jsi6Qg6riw64ql7J2066mwIOyEseuKpeyXkCDsmIHtlqXsnYQg7KSEIOyImCDsnojsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDsmrDshKAg7KCB7Jqp65CoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOuMgOuetSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g64Ko7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IO2bhCDstqnsoIQg7JmE66OMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDtm4Qg7Lap7KCEIOyZhOujjChBQyDsoITsm5ApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDtm4Qg7Lap7KCEIOyZhOujjChVU0IpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDtm4Qg7Lap7KCEIOyZhOujjCjrrLTshKApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i7JWMIOyImCDsl4bsnYwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+Iuy2qeyghCDspJEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+Iuy2qeyghCDspJEoQUMg7KCE7JuQKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Iuy2qeyghCDspJEoVVNCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i7Lap7KCEIOykkSjrrLTshKApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Iuy2qeyghCDslYjtlagiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLstqnsoIQg7JWI7ZWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Iuy2qeyghCDsmYTro4wiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWt5LXJLRy9hcnJheXMueG1sCmluZGV4IDdlYzU2OWUuLjM0YzcxM2UgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1reS1yS0cvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i0JDRgCDQtNCw0LnRi9C8IEhEQ1Ag0YLQtdC60YjQtdGA0q/SryDQutC+0LvQtNC+0L3Rg9C70YHRg9C9IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItOo0YfSr9C6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLTqNGH0q/QuiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEsg0LrQsNGC0YLQvtC+INCx0YPRhNC10YDQuCDSr9GH0q/QvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSyDQutCw0YLRgtC+0L4g0LHRg9GE0LXRgNC4INKv0YfSr9C9IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTSDQutCw0YLRgtC+0L4g0LHRg9GE0LXRgNC4INKv0YfSr9C9IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTSDQutCw0YLRgtC+0L4g0LHRg9GE0LXRgNC4INKv0YfSr9C9IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE0g0LrQsNGC0YLQvtC+INCx0YPRhNC10YDQuCDSr9GH0q/QvSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLTqNGH0q/QuiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLQkdGD0YTQtdGAOiA2NNCa0JEg0LDRiNC/0LDRiNGLINC60LXRgNC10LoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i0JHRg9GE0LXRgDogMjU20JrQkSDQsNGI0L/QsNGI0Ysg0LrQtdGA0LXQuiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLQkdGD0YTQtdGAOiAx0Jwg0LDRiNC/0LDRiNGLINC60LXRgNC10LoiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i0JHRg9GE0LXRgDogNNCcINCw0YjQv9Cw0YjRiyDQutC10YDQtdC6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ItCR0YPRhNC10YA6IDE20Jwg0LDRiNC/0LDRiNGLINC60LXRgNC10LoiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i0JDQvdC40LzQsNGG0LjRj9C90Ysg06nRh9Kv0YDSr9KvIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKaW5kZXggNDNkOTc5MC4uYzAwZTgyNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKQEAgLTEzNiw3ICsxMzYsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iY2F0ZWdvcnlfcGVyc29uYWwiIG1zZ2lkPSIxMjk5NjYzMjQ3ODQ0OTY5NDQ4Ij4i0JbQtdC60LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjYXRlZ29yeV93b3JrIiBtc2dpZD0iODY5OTE4NDY4MDU4NDE3NTYyMiI+ItCW0YPQvNGD0YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjIxNTE3OTE3NjA2NzY4MzY2NyI+ItCY0YjRgtC10L8g0YfRi9Cz0YPRg9GH0YPQvdGD0L0g0L/QsNGA0LDQvNC10YLRgNC70LXRgNC4Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3NfZW5hYmxlIiBtc2dpZD0iNTQyNTMwOTk0Nzc4MTA5NTM4Ij4i0JjRiNGC0LXQvyDRh9GL0LPRg9GD0YfRg9C90YPQvSDQv9Cw0YDQsNC80LXRgtGA0LvQtdGA0Lgg0LjRiNGC0LXRgtKv0q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc19lbmFibGUiIG1zZ2lkPSI1NDI1MzA5OTQ3NzgxMDk1MzgiPiLQmNGI0YLQtdC/INGH0YvQs9GD0YPRh9GD0L3Rg9C9INC/0LDRgNCw0LzQtdGC0YDQu9C10YDQuNC9INC40YjRgtC10YLSr9KvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3Nfc3VtbWFyeSIgbXNnaWQ9IjE4MTU3OTU0MDE2MzI4NTQwNDEiPiLQmtC+0LvQtNC+0L3QvNC+INOp0L3QtNKv0YDSr9KvINC80q/QvNC60q/QvdGH0q/Qu9Kv0LrRgtOp0YDSr9C9INC+0YDQvdC+0YLRg9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGV2ZWxvcG1lbnRfc2V0dGluZ3Nfbm90X2F2YWlsYWJsZSIgbXNnaWQ9IjQzMDg1NjkwNDE3MDE1MzU2MDciPiLQkdGD0Lsg0LrQvtC70LTQvtC90YPRg9GH0YPQs9CwINOp0L3Sr9C60YLSr9Kv0YDSr9Kv0YfSryDQvNKv0LzQutKv0L3Rh9Kv0LvSr9C60YLTqdGA0q8g0LHQtdGA0LjQu9Cz0LXQvSDRjdC80LXRgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2cG5fc2V0dGluZ3Nfbm90X2F2YWlsYWJsZSIgbXNnaWQ9Ijk1Njg0MTQzMDE3Njk4NTU5OCI+ItCR0YPQuyDQutC+0LvQtNC+0L3Rg9GD0YfRgyBWUE4g0LbTqdC90LTTqdOp0LvTqdGA0q/QvSDQutC+0LvQtNC+0L3QviDQsNC70LHQsNC50YIiPC9zdHJpbmc+CkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i0JzQsNC90LjRhNC10YHRgiDQvNCw0LDQvdC40LvQtdGA0LjQvdC1INC60LDRgNCw0LHQsNGB0YLQsNC9INCx0LDRgNC00YvQuiDQutC+0LvQtNC+0L3QvNC+0LvQvtGA0LTRgyDRgtGL0YjQutGLINGB0LDQutGC0LDQs9GL0YfQutCwINGB0LDQutGC0L7QvtCz0L4g0YPRgNGD0LrRgdCw0YIg0LHQtdGA0LXRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCQ0YDQsNC60LXRgtGC0LXRgNC00LjQvSDTqdC70YfTqdC80q/QvSDTqdC30LPTqdGA0YLSr9Kv0L3SryDQvNCw0LbQsdGD0YDQu9C+0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+ItCc0LDQvdC40YTQtdGB0YIg0LzQsNCw0L3QuNC70LXRgNC40L3QtSDQutCw0YDQsNCx0LDRgdGC0LDQvSDQsdCw0YDQtNGL0Log0LDRgNCw0LrQtdGC0YLQtdGA0LTQuCDQvNGD0LvRjNGC0Lgt0YLQtdGA0LXQt9C10LPQtSDTqdC70YfTqdC80q8g06nQt9Cz06nRgNGC0q/Qu9Cz0q/QtNOp0Lkg0LrRi9C70LDRgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLQrdGA0LrQuNC9INGE0L7RgNC80LDQtNCw0LPRiyDRgtC10YDQtdC30LXQu9C10YDQtNC4INGC0q/Qt9Kv0q/QvdKvINC40YjRgtC10YLSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLQrdGA0LrQuNC9INGE0L7RgNC80LDQtNCw0LPRiyDRgtC10YDQtdC30LXQu9C10YDQtNC4INGC0q/Qt9Kv0q8g0LHQvtGO0L3Rh9CwINGB0YvQvdCw0LzRi9C6INGE0YPQvdC60YbQuNGP0L3RiyDQuNGI0YLQtdGC0q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLQmtC+0LzQv9Kv0YLQtdGA0LTQtdCz0Lgg0LHRjdC60LDQv9GC0YvQvSDRgdGL0YDRgdOp0LfSryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0JrQvtC80L/Sr9GC0LXRgNC00LXQs9C4INGC0L7Qu9GD0Log0LHRjdC60LDQvyDRg9GH0YPRgNC00LAg0LrQvtGA0LPQvtC70LPQvtC9INGN0LzQtdGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCi0LjQudC40L8sINC60L7QvNC/0q/RgtC10YDQtNC10LPQuCDRgtC+0LvRg9C6INCx0Y3QutCw0L/RgtGL0L0g0YHRi9GA0YHTqdC30q/QvSDTqdC30LPTqdGA0YLSr9Kj0q/QtyDQttC1INC20L7QuiDQutGL0LvRi9Kj0YvQtyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i06jRh9Kv0YDSr9C70LPTqdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i0JDRgCDQtNCw0LnRi9C8INC60q/QudCz0q/Qt9Kv0LvQs9Op0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i0JDQstGC0L7QvNCw0YLRgtGL0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3INCw0YLQutCw0YDRi9C70YvRiNGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg0LDRgtC60LDRgNGL0LvRi9GI0YvQvSDQutC+0Y7RgyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+ItCk0LDQudC7INGI0LjRhNGA0LvTqdOp0YHSr9C906kg0LDQudC70LDQvdC00YvRgNGD0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+ItCQ0LnQu9Cw0L3QtNGL0YDRg9GD4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLQpNCw0LnQuyDQvNGD0YDRg9C90YLQsNC9INGN0LvQtSDRiNC40YTRgNC70LXQvdCz0LXQvSI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i0KLSr9GB0q/QvSDRgtGD0YPRgNCw0LvQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLQkdGD0Lsg0YHRi9C90LDQvNGL0Log0LzSr9C80LrSr9C90YfSr9C70q/QuiDQsdC+0LvQs9C+0L3QtNGD0LrRgtCw0L0sINC40YjRgtC40L0g0LzQsNC50L3QsNC/0YLRg9GD0LvRg9Cz0YPQvdCwINGC0LDQsNGB0LjRgCDRjdGC0LjRiNC4INC80q/QvNC60q/QvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+INC80LXQvdC10L0g0LDQu9C80LDRiNGC0YvRgNGL0LvQs9Cw0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g0LHQvtC70LbQvtC7INC80LXQvdC10L0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INGB0LDQsNGCINC60LDQu9C00YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0YLQvtC70LPQvtC90YfQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gQUMg0LDRgNC60YvQu9GD0YMg0YLQvtC70LPQvtC90YfQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gVVNCINCw0YDQutGL0LvRg9GDINGC0L7Qu9Cz0L7QvdGH0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC30YvQvNGB0YvQtyDQutGD0LHQsNGC0YLQvtC+INCw0YDQutGL0LvRg9GDINGC0L7Qu9Cz0L7QvdGH0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLQkdC10LvQs9C40YHQuNC3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLQmtGD0LHQsNGC0YLQsNC70YPRg9C00LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+ItOo0JAg0LrRg9Cx0LDRgtGC0LDQu9GD0YPQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iVVNCXCfQtNC10L0g0LrRg9Cx0LDRgtGC0LDQu9GD0YPQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLQl9GL0LzRgdGL0Lcg0LrRg9Cx0LDRgtGC0LDQu9GD0YPQtNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+ItCa0YPQsdCw0YIg0LDQu9Cz0LDQvSDQttC+0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQmtGD0LHQsNGC0YLQsNC70LPQsNC9INC20L7QuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLQotC+0LvRg9C6Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sby1yTEEvYXJyYXlzLnhtbAppbmRleCA2NDIyMTc0Li4zMTJlY2MwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbG8tckxBL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuC7g+C6iuC7ieC6geC6suC6meC6geC6p+C6lOC6quC6reC6miBIRENQIOC6quC6sOC7gOC7neC6tSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IuC6m+C6tOC6lCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Lqb4Lq04LqUIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDY0SyDigIvgupXgu43gu4jigIvguqXgurHguq3guoEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDI1Nksg4oCL4LqV4LuN4LuI4oCL4Lql4Lqx4Lqt4LqBIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuC6muC6seC6muKAi+C7gOC6n+C6tSAxTSDigIvgupXgu43gu4jigIvguqXgurHguq3guoEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDRNIOKAi+C6leC7jeC7iOKAi+C6peC6seC6reC6gSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLguprgurHguprigIvgu4Dgup/gurUgMTZNIOKAi+C6leC7jeC7iOKAi+C6peC6seC6reC6gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgupvgurTgupQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDY0SyDgupXgu43gu4jigIvguprgurHgupngupfgurbguoEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDI1Nksg4oCL4LqV4LuN4LuI4oCL4Lqa4Lqx4LqZ4LqX4Lq24LqBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuC6muC6seC6muKAi+C7gOC6n+C6tSAxTSDigIvgupXgu43gu4jigIvguprgurHgupngupfgurbguoEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4Lqa4Lqx4Lqa4oCL4LuA4Lqf4Lq1IDRNIOKAi+C6leC7jeC7iOKAi+C6muC6seC6meC6l+C6tuC6gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiLguprgurHguprigIvgu4Dgup/gurUgMTZNIOKAi+C6leC7jeC7iOKAi+C6muC6seC6meC6l+C6tuC6gSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgupvgurTgupTguq3gurDgupngurTgu4DguqHguorgurHgupkiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAppbmRleCA4MDZlMWMwLi42ZGQzMDk3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWxvLXJMQS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuC7gOC6ruC6seC6lOKAi+C7g+C6q+C7ieC6l+C6uOC6geC7geC6reC6seC6muKAi+C6oeC6teKAi+C6quC6tOC6lOKAi+C7hOC6lOC7ieC6ruC6seC6muC6geC6suC6meC6guC6veC6meKAi+C7g+C6quC7iOKAi+C6muC7iOC6reC6meKAi+C6iOC6seC6lOKAi+C7gOC6geC6seC6muKAi+C6nuC6suC6jeC6meC6reC6gSwg4LuC4LqU4LqN4oCL4Lqa4LuN4LuI4oCL4LqE4Lqz4oCL4LqZ4Lq24LqH4oCL4LuA4LqW4Lq04LqH4oCL4LqE4LuI4Lqy4oCL4LqX4Lq14LuI4oCL4LqI4Lqw4oCL4LuB4LqI4LuJ4LqHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Lqa4Lqx4LqH4oCL4LqE4Lqx4LqH4oCL4LuD4Lqr4LuJ4oCL4LqB4Lq04LqU4oCL4LqI4Lqw4oCL4LqB4Lqz4oCL4Lqb4LuI4Lq94LqZ4oCL4LqC4Lqw4oCL4Luc4Lqy4LqU4oCL4LuE4LqU4LuJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgu4Dguq7gurHgupTigIvgu4Pguqvgu4nigIvgupfgurjguoHigIvguoHgurTgupTigIvguojgurDigIvguoHgurPigIvgupvgu4jgur3gupnigIvguoLgurDigIvgu5zgurLgupTigIvgu4TgupTgu4nigIvguqrgurPigIvguqXgurHguprigIvguqvgurzgurLguo3igIvgu5zgu4ngurLigIvgupXgu4jgurLguocsIOC7guC6lOC6jeKAi+C6muC7jeC7iOKAi+C6hOC6s+KAi+C6meC6tuC6h+KAi+C7gOC6luC6tOC6h+KAi+C6hOC7iOC6suKAi+C6l+C6teC7iOKAi+C6iOC6sOKAi+C7geC6iOC7ieC6hy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgu4DgupvgurXgupTgu4Pguorgu4ngu5zgu4ngurLgupXgu4jgurLguofguq7gurnguprgu4Hguprguprguq3gurTgupTguqrgurDguqvgurzgurAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuC7gOC6m+C6teC6lOC7g+C6iuC7ieC6geC6suC6meC6ruC6reC6h+C6ruC6seC6muC7nOC7ieC6suC6leC7iOC6suC6h+C6ruC6ueC6muC7geC6muC6muC6reC6tOC6lOC6quC6sOC6q+C6vOC6sOC6l+C6teC7iOC6l+C6u+C6lOC6peC6reC6h+C7g+C6iuC7iS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4Lql4Lqw4Lqr4Lqx4LqU4Lqc4LuI4Lqy4LqZ4LqB4Lqy4LqZ4Lqq4Lqz4Lqu4Lqt4LqH4LqC4LuN4LuJ4Lqh4Lq54LqZ4LuA4LqU4Lqx4LqB4Lqq4Lqw4LqX4Lqx4Lqt4LqaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLguoHgurLgupnigIvguqrgurPguq7guq3guofigIvguoLgu43gu4nguqHgurngupnigIvgu4DgupXgurHguqHguq7gurnguprgu4HguprguprigIvgu4PgupnigIvgu4DgupTgurHguoHguqrgurDgupfgurHguq3guprigIvguo3gurHguofigIvguprgu43gu4jigIvgu4TgupTgu4nigIvguq7gurHguprigIvguoHgurLgupnigIvgupvgu4nguq3guofguoHgurHgupnigIvgu4PgupnigIvgu4DguqfguqXgurLigIvgupngurXgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LuB4LqV4Lqw4LuA4Lqe4Lq34LuI4Lqt4Lqb4LuI4Lq94LqZIOC6q+C6vOC6t+C6peC6tuC6muC6peC6sOC6q+C6seC6lOC6guC6reC6h+C6geC6suC6meC6quC6s+C6ruC6reC6h+C6guC7jeC7ieC6oeC6ueC6meC7gOC6leC6seC6oeC6ruC6ueC6muC7geC6muC6muC7g+C6meC7gOC6lOC6seC6geC6quC6sOC6l+C6seC6reC6miI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i4Lqb4Lq04LqU4LuD4LqK4LuJ4LqH4Lqy4LqZ4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4LuA4Lqb4Lq14LqU4LqV4Lqw4Lqr4Lq84Lqt4LqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuC6reC6seC6lOC6leC6sOC7guC6meC6oeC6seC6lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IuC6geC6suC6meC6iOC6seC6lOC6leC6seC7ieC6h+C6m+C6sOC6leC6tOC6muC6seC6lCBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuC6leC6seC7ieC6h+C6geC6suC6meC6iOC6seC6lOC6leC6seC7ieC6h+C6m+C6sOC6leC6tOC6muC6seC6lCBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4Lqb4LuI4Lq94LqZ4oCL4LuA4Lqb4Lqx4LqZ4oCL4LqB4Lqy4LqZ4oCL4LuA4LqC4Lq74LuJ4Lqy4oCL4Lql4Lqw4oCL4Lqr4Lqx4LqU4oCL4LuE4Lqf4oCL4Lql4LuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLgupvgu4jgur3gupkuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuC7hOC6n+KAi+C6peC7jOKAi+C7gOC6guC6u+C7ieC6suKAi+C6peC6sOKAi+C6q+C6seC6lOKAi+C6ruC6veC6muKAi+C6ruC7ieC6reC6jeKAi+C7geC6peC7ieC6pyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i4LqB4Lqy4LqZ4oCL4Lqb4Lqx4Lqa4oCL4LuB4LqV4LuI4LqH4oCL4Lqq4Lq1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLigIvguoTgurjgupnigIvguqrgurvguqHigIvguprgurHgupTigIvgupngurXgu4nigIvguoHgurPigIvguqXgurHguofigIvguqLgurngu4jigIvgu4PgupnigIvguoHgurLgupnigIvgupfgurvgupTigIvguqXguq3guofigIvgu4HguqXgurDigIvguq3gurLgupTigIvguqHgurXigIvgupzgurvgupnigIvgupXgu43gu4jigIvgupvgurDigIvguqrgurTgupTigIvgupfgurTigIvgup7gurLgupouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i4LqW4Lq34LqB4LuB4LqX4LqZ4LuC4LqU4LqNIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4oCL4LuA4Lqr4Lq84Lq34Lqt4Lqb4Lqw4oCL4Lqh4Lqy4LqZIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDguojgurbgu4jguofigIvguojgurDigIvgu4DgupXgurHguqEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOKAi+C6iOC6tuC7iOC6h+KAi+C6iOC6sOKAi+C7gOC6leC6seC6oeKAi+C7guC6lOC6jeC6quC6suC6geKAi+C6lOC7ieC6p+C6jeKAi+C7hOC6nyBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LqI4Lq24LuI4LqH4oCL4LqI4Lqw4oCL4LuA4LqV4Lqx4Lqh4oCL4LuC4LqU4LqN4Lqq4Lqy4LqB4oCL4LqU4LuJ4Lqn4LqNIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4oCL4LqI4Lq24LuI4LqH4oCL4LqI4Lqw4oCL4LuA4LqV4Lqx4Lqh4oCL4LuC4LqU4LqN4oCL4Lqq4Lqy4LqB4oCL4LuB4Lqa4Lqa4oCL4LuE4Lqu4LuJ4oCL4Lqq4Lqy4LqNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i4Lqa4LuN4LuI4Lqu4Lq54LuJ4LqI4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLguoHgurPguqXgurHguofguqrgurLguoHgu4Tgup8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IuC6geC6s+KAi+KAi+C6peC6seC6h+KAi+C6quC6suC6geKAi+C6nOC7iOC6suC6meKAi+C7neC7jeC7ieKAi+C7hOC6nyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IuC6geC6s+KAi+C6peC6seC6h+KAi+C6quC6suC6geKAi+C6nOC7iOC6suC6mSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuC6geC6s+KAi+C6peC6seC6h+KAi+C6quC6suC6geKAi+C7hOC6ruC7ieKAi+C6quC6suC6jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLguprgu43gu4jgu4TgupTgu4nguqrgurLguoHgu4Tgup8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLguprgu43gu4jgu4TgupTgu4nguqrgurLguoHgu4Tgup8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i4LuA4LqV4Lqx4LqhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx0L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx0L2FycmF5cy54bWwKaW5kZXggMGQyMGE4YS4uNzZhZTNmYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVmlzYWRhIG5hdWRvdGkgSERDUCB0aWtyaW5pbcSFIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IknFoWp1bmd0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IknFoWp1bmd0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEtCIMW+dXJuLiBidWZlci4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEtCIMW+dXJuLiBidWZlci4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQiDFvnVybi4gYnVmZXIuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgxb51cm4uIGJ1ZmVyLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNQiDFvnVybi4gYnVmZXIuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IknFoWp1bmd0YSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLQiDFvnVybmFsbyBidWZlcmlzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLQiDFvnVybmFsbyBidWZlcmlzIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIgxb51cm5hbG8gYnVmZXJpcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CIMW+dXJuYWxvIGJ1ZmVyaXMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIgxb51cm5hbG8gYnVmZXJpcyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpamEgacWhanVuZ3RhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IDBiMDRmNTMuLjYwMTBjN2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IlZpcy4gcHIuIGdhbC4gxK9yLiDEryB2aWQuIHNhdWcuIG5lcGFpcy4gYXByLiB2ZXJ0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlByaXYuIG51c3QuLCBrYWQgdmVpa3NtLiBiLiBnLiBhdGwuIGtlbGnFsyBkLiBsYW5nLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTnVzdGF0b21hLCBrYWQgdmlzdXMgdmVpa3NtdXMgYsWrdMWzIGdhbGltYSBhdGxpa3RpIGtlbGnFsyBkeWTFvmnFsyBsYW5ndW9zZSwgbmVwYWlzYW50IGFwcmHFoW8gdmVyxI1pxbMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4ixK5nYWxpbnRpIGxhaXN2b3MgZm9ybW9zIGxhbmd1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4ixK5nYWxpbmFtYXMgZWtzcGVyaW1lbnRpbmnFsyBsYWlzdm9zIGZvcm1vcyBsYW5nxbMgcGFsYWlreW1hcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iVmlldC4gYXRzcmcuIGtvcC4gc2xhcHQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLFoGl1byBtZXR1IHZpc29zIHZpZXRpbsSXcyBhdHNhcmdpbsSXcyBrb3Bpam9zIG5lYXBzYXVnb3RvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJKZWkgbm9yaXRlIHBha2Vpc3RpIGFyIHBhxaFhbGludGkgdmlzxbMgdmlldGluacWzIGF0c2FyZ2luacWzIGtvcGlqxbMgc2xhcHRhxb5vZMSvLCBwYWxpZXNraXRlIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJJxaFqdW5ndGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJWaXNhZGEgxK9qdW5ndGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLigJ5XZWJWaWV34oCcIGRpZWdpbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuKAnldlYlZpZXfigJwgZGllZ2ltbyBudXN0YXR5bWFzIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iS29udmVydHVvdGkgxK8gZmFpbMWzIMWhaWZydW90xJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IktvbnZlcnR1b3Rp4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJKYXUga29udmVydHVvdGEgxK8gZmFpbMWzIMWhaWZydW90xJkiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IlNwYWx2xbMgdGFpc3ltYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IsWgaSBmdW5rY2lqYSB5cmEgZWtzcGVyaW1lbnRpbsSXIGlyIGppIGdhbGkgdHVyxJd0aSDEr3Rha29zIG5hxaF1bXVpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ik5lcGFpc3l0YSBuYXVkb2phbnQgbnVvc3RhdMSFIOKAnjx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBsaWtvIG1hxb5kYXVnIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gaWtpIHZpc2nFoWtvIMSva3JvdmltbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBpa2kgdmlzacWha28gxK9rcm92aW1vIG5hdWQuIGtpbnQuIHNyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBpa2kgdmlzacWha28gxK9rcm92aW1vIG5hdWRvamFudCBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gaWtpIHZpc2nFoWtvIMSva3JvdmltbyBiZWxhaWQuIHJ5xaEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iTmXFvmlub21hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iS3JhdW5hc2kuLi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IsSua3IuIG5hdWQuIGtpbnQuIHNyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IsSua3JhdW5hbWEgbmF1ZC4gVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLErmtyYXVuYW1hIGJlIGxhaWTFsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOZWtyYXVuYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmVrcmF1bmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJWaXNpxaFrYWkgxK9rcmF1dGFzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx2L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx2L2FycmF5cy54bWwKaW5kZXggYTAzM2QxYi4uMDNhZmY4YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHYvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iVmllbm3Ek3IgaXptYW50b3QgSERDUCBwxIFyYmF1ZGkiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NMKgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTbCoEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjHCoE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjTCoE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJJenNsxJNndHMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjTCoEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxwqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2wqBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0wqBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTbCoEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHCoE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ikl6c2zEk2d0cyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NMKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxwqBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0wqBLQiDFvnVybi4gYnVmZXJpcyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTbCoEtCIMW+dXJuLiBidWYuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjHCoE1CIMW+dXJuLiBidWZlcmlzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjTCoE1CIMW+dXJuLiBidWZlcmlzIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2wqBNQiDFvnVybi4gYnVmZXJpcyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJJenNsxJNndHMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjTCoEtCIHZpZW5hbSDFvnVybsSBbGEgYnVmZXJpbSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTbCoEtCIHZpZW5hbSDFvnVybsSBbGEgYnVmZXJpbSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxwqBNQiB2aWVuYW0gxb51cm7EgWxhIGJ1ZmVyaW0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNMKgTUIgdmllbmFtIMW+dXJuxIFsYSBidWZlcmltIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2wqBNQiB2aWVuYW0gxb51cm7EgWxhIGJ1ZmVyaW0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbcSBY2lqYSBpciBpenNsxJNndGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKaW5kZXggYjk1NTE2Mi4uZDUwZTFlYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4ixLthdWogamVia3VydSBsaWV0b3RuaSBpZXJha3N0xKt0IMSBcsSTasSBIGtyxIF0dXbEkyBuZWF0a2FyxKtnaSBubyBtYW5pZmVzdGEgdsSTcnTEq2Jhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJQaWVsxIFnb3QgZGFyYsSrYmFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJQaWVsxIFnbyB2aXNhcyBkYXJixKtiYXMgdmFpcsSBa3UgbG9ndSByZcW+xKttYW0gbmVhdGthcsSrZ2kgbm8gdsSTcnTEq2LEgW0gbWFuaWZlc3TEgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJJZXNwxJNqb3QgYnLEq3bEgXMgZm9ybWFzIGxvZ3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJJZXNwxJNqbyBla3NwZXJpbWVudMSBbG8gYnLEq3bEgXMgZm9ybWFzIGxvZ3UgYXRiYWxzdHUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRhdG9yYSBkdWJsxJNqdW1hIHBhcm9sZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iRGFyYnZpcnNtYXMgcGlsbmllIGR1YmzEk2p1bWkgcGHFoWxhaWsgbmF2IGFpenNhcmfEgXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJQaWVza2FyaWV0aWVzLCBsYWkgbWFpbsSrdHUgdmFpIG5vxYZlbXR1IHBhcm9saSBwaWxuaWVtIGRhcmJ2aXJzbWFzIGR1YmzEk2p1bWllbS4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkF0c3DEk2pvdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJWaWVubcSTciBpZXNsxJNndHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23EgXRpc2tpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldyBpZXZpZcWhYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+Ikllc3RhdMSrdCBXZWJWaWV3IGlldmllxaFhbnUiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJQxIFydsSTcnN0IHBhciBmYWlsdSDFoWlmcsSTanVtdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iUMSBcnbEk3JzdOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iSmF1IMWhaWZyxJN0cyBmYWlsdSBsxKttZW7EqyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iS3LEgXN1IGtvcmVrY2lqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4ixaDEqyBmdW5rY2lqYSBpciBla3NwZXJpbWVudMSBbGEgdW4gdmFyIGlldGVrbcSTdCB2ZWlrdHNwxJNqdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJKYXVuxIEgcHJlZmVyZW5jZTogPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAlCBhcHR1dmVuYWlzIGF0bGlrdcWhYWlzIGxhaWtzOiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqDigJQgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAlCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gbMSrZHogcGlsbmFpIHV6bMSBZGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPsKg4oCUIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBsxKtkeiBwaWxuYWkgbWFpxYZzdHLEgXZhcyB1emzEgWRlaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAlCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gbMSrZHogcGlsbmFpIFVTQsKgdXpsxIFkZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqDigJQgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGzEq2R6IHBpbG5haSBiZXp2YWR1IHV6bMSBZGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iTmV6aW7EgW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJVemzEgWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJNYWnFhnN0csSBdmFzIHV6bMSBZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0LCoHV6bMSBZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkJlenZhZHUgdXpsxIFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOZW5vdGllayB1emzEgWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmVub3RpZWsgdXpsxIFkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQaWxucyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWstck1LL2FycmF5cy54bWwKaW5kZXggYzk3YjU3Ny4uNTg4YzIxYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1rLXJNSy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLQodC10LrQvtCz0LDRiCDQutC+0YDQuNGB0YLQuCDQpdCU0KbQnyDQv9GA0L7QstC10YDQutCwIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLQmNGB0LrQu9GD0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2LjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0LjAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYuMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLQmNGB0LrQu9GD0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQuMDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1Ni4wMDAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSy/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsv0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTS/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLQmNGB0LrQu9GD0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSy/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsv0LzQtdGT0YPQvNC10LzQvtGA0LjRmNCwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS/QvNC10ZPRg9C80LXQvNC+0YDQuNGY0LAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL9C80LXRk9GD0LzQtdC80L7RgNC40ZjQsCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLQkdC10Lcg0LDQvdC40LzQsNGG0LjRmNCwIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWstck1LL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKaW5kZXggZjE5YjdiMy4uMDNmZWRkZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwKQEAgLTk3LDcgKzk3LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InJ1bm5pbmdfcHJvY2Vzc19pdGVtX3VzZXJfbGFiZWwiIG1zZ2lkPSIzMTI5ODg3ODY1NTUyMDI1OTQzIj4i0JrQvtGA0LjRgdC90LjQujogPHhsaWZmOmcgaWQ9IlVTRVJfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsYXVuY2hfZGVmYXVsdHNfc29tZSIgbXNnaWQ9IjMxMzE1OTQ2OTg1NjM3MjYyMSI+ItCf0L7RgdGC0LDQstC10L3QuCDRgdC1INC90LXQutC+0Lgg0YHRgtCw0L3QtNCw0YDQtNC90Lgg0LLRgNC10LTQvdC+0YHRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibGF1bmNoX2RlZmF1bHRzX25vbmUiIG1zZ2lkPSI0MjQxMTI5MTA4MTQwMDM0ODc2Ij4i0J3QtdC80LAg0L/QvtGB0YLQsNCy0LXQvdC+INGB0YLQsNC90LTQsNGA0LTQvdC4INCy0YDQtdC00L3QvtGB0YLQuCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR0c19zZXR0aW5ncyIgbXNnaWQ9IjgxODY5NzE4OTQ4MDEzNDgzMjciPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCDQvdCwINGC0LXQutGB0YIt0LLQvi3Qs9C+0LLQvtGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHRzX3NldHRpbmdzIiBtc2dpZD0iODE4Njk3MTg5NDgwMTM0ODMyNyI+ItCf0L7RgdGC0LDQstC60Lgg0L3QsCDRgtC10LrRgdGCLdCy0L4t0LPQvtCy0L7RgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR0c19zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjEyMzc4MjA2ODEwMTY2Mzk2ODMiPiLQmNC30LvQtdC3INGC0LXQutGB0YIt0LLQvi3Qs9C+0LLQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfcmF0ZV90aXRsZSIgbXNnaWQ9IjYwMzA1NTA5OTgzNzkzMTAwODgiPiLQkdGA0LfQuNC90LAg0L3QsCDQs9C+0LLQvtGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX2RlZmF1bHRfcmF0ZV9zdW1tYXJ5IiBtc2dpZD0iNDA2MTgxNTI5MjI4NzE4MjgwMSI+ItCR0YDQt9C40L3QsCDRgdC+INC60L7RmNCwINGB0LUg0LrQsNC20YPQstCwINGC0LXQutGB0YLQvtGCIjwvc3RyaW5nPgpAQCAtMTE3LDcgKzExNyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfc3RhdHVzX3JlcXVpcmVzX25ldHdvcmsiIG1zZ2lkPSI2MDQyNTAwODIxNTAzMjI2ODkyIj4iPHhsaWZmOmcgaWQ9IkxPQ0FMRSI+JTEkczwveGxpZmY6Zz4g0LHQsNGA0LAg0LzRgNC10LbQvdC+INC/0L7QstGA0LfRg9Cy0LDRmtC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX3N0YXR1c19ub3Rfc3VwcG9ydGVkIiBtc2dpZD0iNDQ5MTE1NDIxMjc2MjQ3MjQ5NSI+Ijx4bGlmZjpnIGlkPSJMT0NBTEUiPiUxJHM8L3hsaWZmOmc+INC90LUg0LUg0L/QvtC00LTRgNC20LDQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHRzX3N0YXR1c19jaGVja2luZyIgbXNnaWQ9IjUzMzkxNTA3OTc5NDA0ODM1OTIiPiLQodC1INC/0YDQvtCy0LXRgNGD0LLQsC4uLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InR0c19lbmdpbmVfc2V0dGluZ3NfdGl0bGUiIG1zZ2lkPSIzNDk5MTEyMTQyNDI1NjgwMzM0Ij4i0J/QvtC00LXRgdGD0LLQsNGa0LAg0L3QsCA8eGxpZmY6ZyBpZD0iVFRTX0VOR0lORV9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dHNfZW5naW5lX3NldHRpbmdzX3RpdGxlIiBtc2dpZD0iMzQ5OTExMjE0MjQyNTY4MDMzNCI+ItCf0L7RgdGC0LDQstC60Lgg0L3QsCA8eGxpZmY6ZyBpZD0iVFRTX0VOR0lORV9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ0dHNfZW5naW5lX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjEwMzA1MTIwNDIwNDA3MjIyODUiPiLQodGC0LDRgNGC0YPQstCw0Zgg0L/QvtC00LXRgdGD0LLQsNGa0LAg0L3QsCDRgdC+0YTRgtCy0LXRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR0c19lbmdpbmVfcHJlZmVyZW5jZV9zZWN0aW9uX3RpdGxlIiBtc2dpZD0iNDQ4Mjk0NTAwOTkwOTcxNDEzIj4i0J/RgNC10YLQv9C+0YfQuNGC0LDQvSDRgdC+0YTRgtCy0LXRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InR0c19nZW5lcmFsX3NlY3Rpb25fdGl0bGUiIG1zZ2lkPSI0NDAyNTcyMDE0NjA0NDkwNTAyIj4i0J7Qv9GI0YLQviI8L3N0cmluZz4KQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQl9Cw0L/QuNGI0YPQstCwINCw0L/Quy4g0LLQviDQvdCw0LTQsi7QvNC10LzQvtGA0LjRmNCwLCDQvdC10LfQsNCyLiDQvtC0INC80LDQvdC40YTQtdGB0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLQn9GA0LjQvdGD0LTQuCDQs9C4INCw0LrRgtC40LLQvdC+0YHRgtC40YLQtSDQtNCwINGY0LAg0LzQtdC90YPQstCw0LDRgiDQs9C+0LvQtdC80LjQvdCw0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0JPQuCDQv9GA0LDQstC4INGB0LjRgtC1INCw0LrRgtC40LLQvdC+0YHRgtC4INC00LAg0LHQuNC00LDRgiDRgdC+INC/0YDQvtC80LXQvdC70LjQstCwINCz0L7Qu9C10LzQuNC90LAg0LfQsCDQvNGD0LvRgtC40L/RgNC+0LfQvtGA0LXRhiwg0LHQtdC3INGA0LDQt9C70LjQutCwINC90LAg0LLRgNC10LTQvdC+0YHRgtC40YLQtSDQvdCwINC80LDQvdC40YTQtdGB0YLQvtGCLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ItCe0LLQvtC30LzQvtC20Lgg0L/RgNC+0LfQvtGA0YbQuCDRgdC+INGB0LvQvtCx0L7QtNC90LAg0YTQvtGA0LzQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i0J7QstC+0LfQvNC+0LbRg9Cy0LAg0L/QvtC00LTRgNGI0LrQsCDQt9CwINC10LrRgdC/0LXRgNC40LzQtdC90YLQsNC70L3QuCDQv9GA0L7Qt9C+0YDRhtC4INGB0L4g0YHQu9C+0LHQvtC00L3QsCDRhNC+0YDQvNCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLQoNC10LfQtdGA0LLQvdCwINC70L7Qt9C40L3QutCwINC30LAg0YDQsNCx0L7RgtC90LAg0L/QvtCy0YDRiNC40L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0KbQtdC70L7RgdC90Lgg0YDQtdC30LXRgNCy0L3QuCDQutC+0L/QuNC4INC90LAg0YDQsNCx0L7RgtC90LDRgtCwINC/0L7QstGA0YjQuNC90LAg0LrQvtC4INCy0L4g0LzQvtC80LXQvdGC0L7QsiDQvdC1INGB0LUg0LfQsNGI0YLQuNGC0LXQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCU0L7Qv9GA0LXRgtC1INC30LAg0LTQsCDRgdC1INC/0YDQvtC80LXQvdC4INC40LvQuCDQvtGC0YHRgtGA0LDQvdC4INC70L7Qt9C40L3QutCw0YLQsCDQt9CwINGG0LXQu9C+0YHQvdCwINGA0LXQt9C10YDQstC90LAg0LrQvtC/0LjRmNCwINC90LAg0YDQsNCx0L7RgtC90LDRgtCwINC/0L7QstGA0YjQuNC90LAiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+ItCe0L3QtdCy0L7Qt9C80L7QttC10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+ItCh0LXQutC+0LPQsNGIINCy0LrQu9GD0YfQtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i0JDQstGC0L7QvNCw0YLRgdC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLQktC+0LLQtdC00YPQstCw0ZrQtSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+ItCf0L7RgdGC0LDQstC10YLQtSDQstC+0LLQtdC00YPQstCw0ZrQtSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i0JrQvtC90LLQtdGA0YLQuNGA0LDRmNGC0LUg0LTQviDRiNC40YTRgNC40YDQsNGa0LUg0LTQsNGC0L7RgtC10LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i0JrQvtC90LLQtdGA0YLQuNGA0LDRmC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i0JTQsNGC0L7RgtC10LrQsNGC0LAg0LUg0LLQtdGc0LUg0YjQuNGE0YDQuNGA0LDQvdCwIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLQmtC+0YDQtdC60YbQuNGY0LAg0L3QsCDQsdC+0ZjQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i0KTRg9C90LrRhtC40ZjQsNGC0LAg0LUg0LXQutGB0L/QtdGA0LjQvNC10L3RgtCw0LvQvdCwINC4INC80L7QttC1INC00LAg0LLQu9C40ZjQsNC1INC90LAg0LjQt9Cy0LXQtNCx0LDRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+ItCf0YDQtdGB0LrQvtC60L3QsNGC0L4g0YHQv9C+0YDQtdC0IDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyDQv9GA0LXQvtGB0YLQsNC90YPQstCwINC/0YDQuNCx0LvQuNC20L3QviA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0YbQtdC70L7RgdC90L4g0L/QvtC70L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+INGG0LXQu9C+0YHQvdC+INC/0L7Qu9C90LAg0L3QsCBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+INGG0LXQu9C+0YHQvdC+INC/0L7Qu9C90LAg0L/RgNC10LrRgyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDRhtC10LvQvtGB0L3QviDQv9C+0LvQvdCwLCDQsdC10LfQttC40YfQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i0J3QtdC/0L7Qt9C90LDRgtC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLQodC1INC/0L7Qu9C90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+ItCf0L7Qu9C90LXRmtC1INC90LAg0YHRgtGA0YPRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i0J/QvtC70L3QtdGa0LUg0L/RgNC10LrRgyDQo9Ch0JEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+ItCR0LXQt9C20LjRh9C90L4g0L/QvtC70L3QtdGa0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i0J3QtSDRgdC1INC/0L7Qu9C90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQndC1INGB0LUg0L/QvtC70L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLQptC10LvQvtGB0L3QsCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL2FycmF5cy54bWwKaW5kZXggNDA0YjIwYS4uZjA0Y2M2NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1sLXJJTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLgtI7gtLLgtY3gtLLgtL7gtK/gtY3igIzgtKrgtY3gtKrgtYvgtLTgtYHgtIIgSERDUCDgtKrgtLDgtL/gtLbgtYvgtKfgtKgg4LSJ4LSq4LSv4LWL4LSX4LS/4LSV4LWN4LSV4LWB4LSVIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4LST4LSr4LWNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLgtJPgtKvgtY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4LST4LSw4LWLIOC0suC1i+C0l+C1jSDgtKzgtKvgtLHgtL/gtKjgtYHgtIIgMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giAxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4LST4LSr4LWNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuC0k+C0sOC1iyDgtLLgtYvgtJfgtY0g4LSs4LSr4LSx4LS/4LSo4LWB4LSCIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLgtJPgtLDgtYsg4LSy4LWL4LSX4LWNIOC0rOC0q+C0seC0v+C0qOC1geC0giAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuC0k+C0sOC1iyDgtLLgtYvgtJfgtY0g4LSs4LSr4LSx4LS/4LSo4LWB4LSCIDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuC0k+C0sOC1iyDgtLLgtYvgtJfgtY0g4LSs4LSr4LSx4LS/4LSo4LWB4LSCIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuC0k+C0sOC1iyDgtLLgtYvgtJfgtY0g4LSs4LSr4LSx4LS/4LSo4LWB4LSCIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgtIbgtKjgtL/gtK7gtYfgtLfgtbsg4LST4LSr4LWB4LSa4LWG4LSv4LWN4LSv4LWB4LSVIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKaW5kZXggMzczYTAwZC4uZTQ3YWZjNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgtK7gtL7gtKjgtL/gtKvgtYbgtLjgtY3gtLHgtY3gtLHgtY0g4LSu4LWC4LSy4LWN4LSv4LSZ4LWN4LSZ4LW+IOC0quC0sOC0v+C0l+C0o+C0v+C0leC1jeC0leC0vuC0pOC1hiwg4LSs4LS+4LS54LWN4LSvIOC0uOC1jeC0seC1jeC0seC1i+C0seC1h+C0nOC0v+C0suC1h+C0leC1jeC0leC1jSDgtI7gtLTgtYHgtKTgtKrgtY3gtKrgtYbgtJ/gtYHgtKjgtY3gtKjgtKTgtL/gtKjgtY0g4LSP4LSk4LWK4LSw4LWBIOC0huC0quC1jeC0quC0v+C0qOC1huC0r+C1geC0giDgtK/gtYvgtJfgtY3gtK/gtK7gtL7gtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgtLXgtLLgtL/gtKrgtY3gtKrgtIIg4LSu4LS+4LSx4LWN4LSx4LS+4LW7IOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0meC1jeC0meC0s+C1hiDgtKjgtL/gtbzgtKzgtKjgtY3gtKfgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuC0ruC0vuC0qOC0v+C0q+C1huC0uOC1jeC0seC1jeC0seC1jSDgtK7gtYLgtLLgtY3gtK/gtJngtY3gtJngtb4g4LSq4LSw4LS/4LSX4LSj4LS/4LSV4LWN4LSV4LS+4LSk4LWGLCDgtI7gtLLgtY3gtLLgtL4g4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LSZ4LWN4LSZ4LSz4LWG4LSv4LWB4LSCIOC0ruC1vuC0n+C1jeC0n+C0vy3gtLXgtL/gtbvgtKHgtYvgtK/gtY3gtJXgtY3gtJXgtL7gtK/gtL8g4LS14LSy4LS/4LSq4LWN4LSq4LSCIOC0ruC0vuC0seC1jeC0seC1geC0qOC1jeC0qOC1gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgtKvgtY3gtLDgtYDgtKvgtYvgtIIg4LS14LS/4LW74LSh4LWL4LSV4LW+IOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0leC1jeC0t+C0ruC0ruC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4LSq4LSw4LWA4LSV4LWN4LS34LSj4LS+4LSk4LWN4LSu4LSVIOC0q+C1jeC0sOC1gOC0q+C1i+C0giDgtLXgtL/gtbvgtKHgtYvgtJXgtb7gtJXgtY3gtJXgtYHgtLPgtY3gtLMg4LSq4LS/4LSo4LWN4LSk4LWB4LSjIOC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qOC0leC1jeC0t+C0ruC0ruC0vuC0leC1jeC0leC1geC0qOC1jeC0qOC1gS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i4LSh4LWG4oCM4LS44LWN4oCM4LSV4LWN4LSf4LWL4LSq4LWN4LSq4LWNIOC0rOC0vuC0leC1jeC0leC0quC1jeC0quC1jSDgtKrgtL7gtLjgtY3igIzgtLXgtYfgtKHgtY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuC0oeC1huC0uOC1jeKAjOC0leC1jeKAjOC0n+C1i+C0quC1jeC0quC1jSDgtKrgtYLgtbzgtKPgtY3gtKMg4LSs4LS+4LSV4LWN4LSV4LSq4LWN4LSq4LWB4LSV4LW+IOC0qOC0v+C0suC0teC0v+C1vSDgtKrgtLDgtL/gtLDgtJXgtY3gtLfgtL/gtJrgtY3gtJrgtL/gtJ/gtY3gtJ/gtL/gtLLgtY3gtLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LSh4LWG4LS44LWN4oCM4LSV4LWN4oCM4LSf4LWL4LSq4LWN4LSq4LWNIOC0quC1guC1vOC0o+C1jeC0oyDgtKzgtL7gtJXgtY3gtJXgtKrgtY3gtKrgtYHgtJXgtb7gtJXgtY3gtJXgtL7gtK/gtL8g4LSq4LS+4LS44LWN4oCM4LS14LWH4LSh4LWB4LSV4LW+IOC0ruC0vuC0seC1jeC0seC0vuC0qOC1iyDgtKjgtYDgtJXgtY3gtJXgtILgtJrgtYbgtK/gtY3gtK/gtL7gtKjgtYsg4LS44LWN4oCM4LSq4LW84LS24LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtLDgtLngtL/gtKTgtK7gtL7gtJXgtY3gtJXgtL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgtI7gtLLgtY3gtLLgtL7gtK/gtY3igIzgtKrgtY3gtKrgtYvgtLTgtYHgtIIg4LST4LSj4LS+4LSj4LWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuC0k+C0n+C1jeC0n+C1i+C0ruC0vuC0seC1jeC0seC0v+C0leC1jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4LSo4LSf4LSq4LWN4LSq4LS+4LSV4LWN4LSV4LW9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4LSo4LSf4LSq4LWN4LSq4LS+4LSV4LWN4LSV4LW9IOC0uOC0nOC1jeC0nOC0ruC0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuC0q+C0r+C1vSDgtI7gtbvgtJXgtY3gtLDgtL/gtKrgtY3gtLfgtKjgtL/gtLLgtYfgtJXgtY3gtJXgtY0g4LSq4LSw4LS/4LS14LW84LSk4LWN4LSk4LS/4LSq4LWN4LSq4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLgtKrgtLDgtL/gtLXgtbzgtKTgtY3gtKTgtL/gtKrgtY3gtKrgtL/gtJXgtY3gtJXgtYHgtJXigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuC0h+C0pOC0v+C0qOC0leC0giDgtKTgtKjgtY3gtKjgtYYg4LSr4LSv4LW9IOC0juC1u+C0leC1jeC0sOC0v+C0quC1jeC0seC1jeC0seC1jSDgtJrgtYbgtK/gtY3gtKTgtYEiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuC0teC1vOC0o+C1jeC0o+C0giDgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtL/gtJXgtY3gtJXgtb0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuC0iCDgtKvgtYDgtJrgtY3gtJrgtbwg4LSq4LSw4LWA4LSV4LWN4LS34LSj4LS+4LSk4LWN4LSu4LSV4LSu4LS+4LSv4LSk4LS/4LSo4LS+4LW9IOC0quC1jeC0sOC0leC0n+C0qOC0pOC1jeC0pOC1hiDgtKzgtL7gtKfgtL/gtJrgtY3gtJrgtYfgtJXgtY3gtJXgtL7gtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgtIngtKrgtK/gtYvgtJfgtL/gtJrgtY3gtJrgtY0g4LSF4LS44LS+4LSn4LWB4LS14LS+4LSV4LWN4LSV4LS/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOC0j+C0leC0puC1h+C0tuC0giA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LS24LWH4LS34LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4LSq4LWC4LW84LSj4LWN4LSj4LSu4LS+4LSv4LWB4LSCIOC0muC0vuC1vOC0nOC1jeC0nOC0vuC0leC1geC0qOC1jeC0qOC0pOC0v+C0qOC1jSwgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIEFDLeC0r+C0v+C1vSDgtKrgtYLgtbzgtKPgtY3gtKPgtK7gtL7gtK/gtYHgtIIg4LSa4LS+4LW84LSc4LWN4LSc4LS+4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNLCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gVVNCIOC0teC0tOC0vyDgtKrgtYLgtbzgtKPgtY3gtKPgtK7gtL7gtK/gtYHgtIIg4LSa4LS+4LW84LSc4LWN4LSc4LS+4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNLCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4LS14LSv4LW84LSy4LWG4LS44LWNIOC0teC0tOC0vyDgtKrgtYLgtbzgtKPgtY3gtKPgtK7gtL7gtK/gtYHgtIIg4LSa4LS+4LW84LSc4LWN4LSc4LS+4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNLCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLgtIXgtJzgtY3gtJ7gtL7gtKTgtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuC0muC0vuC1vOC0nOC1jeC0nOC1geC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC1gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMt4LSv4LS/4LW9IOC0muC0vuC1vOC0nOC1jeC0nOC1geC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC1gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQi3gtK/gtL/gtLLgtYLgtJ/gtYYg4LSa4LS+4LW84LSc4LWN4LSc4LWB4LSa4LWG4LSv4LWN4LSv4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLgtLXgtK/gtbzgtLLgtYbgtLjgtY3gtLjgtY0g4LSV4LSj4LSV4LWN4LS34LSo4LS/4LSy4LWC4LSf4LWGIOC0muC0vuC1vOC0nOC1jeC0nOC1geC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC1gSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLgtJrgtL7gtbzgtJzgtY3gtJzgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtL/gtLLgtY3gtLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLgtJrgtL7gtbzgtJzgtY3gtJzgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKjgtL/gtLLgtY3gtLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i4LSo4LS/4LSx4LSe4LWN4LSe4LWBIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vYXJyYXlzLnhtbAppbmRleCBjNGM2ZDI4Li5jNGJiYmNiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1uLXJNTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbW4tck1OL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItCR0LDQudC90LPQsCBIRENQINGI0LDQu9Cz0LDRhdGL0LMg0LDRiNC40LPQu9Cw0YUiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjHQnCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i0JjQtNGN0LLRhdCz0q/QuSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NDAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxINGB0LDRjyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg0YHQsNGPIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2INGB0LDRjyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjHQnCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLQmNC00Y3QstGF0LPSr9C5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0MDAwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NjAwMCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxINGB0LDRjyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLQu9C+0LMg0LHRg9GE0LXRgCDQsdKv0YDRgiAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLQmNC00Y3QstGF0LPSr9C5IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLQu9C+0LMg0LHRg9GE0LXRgCDQsdKv0YDRgiAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ItC70L7QsyDQsdGD0YTQtdGAINCx0q/RgNGCIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLQlNKv0YDRgSDQsNC80LjQu9GD0YPQu9Cw0LvRgiDQuNC00Y3QstGF0LPSr9C5IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggNjJlMmMzOS4uMDE5MjVmNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQnNCw0L3QuNGE0LXRgdGCINGD0YLQs9GL0LMg0L3RjCDSr9C7INGF0LDQvNCw0LDRgNCw0L0g0LTRg9GA0YvQvSDQsNC/0L8t0YvQsyDQs9Cw0LTQsNCw0LQg0YHQsNC90LDRhSDQvtC50LQg0LHQuNGH0LjRhSDQsdC+0LvQvtC80LbRgtC+0Lkg0LHQvtC70LPQvtC00L7QsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItKu0LnQuyDQsNC20LjQu9C70LDQs9Cw0LDQvdGLINGF0Y3QvNC20Y3RjdCzINOp06nRgNGH0LjQu9C2INCx0L7Qu9C+0YXRg9C50YYg0LHQvtC70LPQvtGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLQotC+0LTQvtGA0YXQvtC50LvQvtCz0Ycg0YTQsNC50LvRi9C9INGD0YLQs9GL0LMg0q/QuyDRhdCw0LzQsNCw0YDQsNC9LCDQsdKv0YUg0q/QudC7INCw0LbQuNC70LvQsNCz0LDQsNCzINC+0LvQvtC9INGG0L7QvdGF0L7QvdC0INGF0Y3QvNC20Y3RjdCzINC90Ywg06nTqdGA0YfQuNC70LYg0LHQvtC70L7RhdGD0LnRhiDQsdC+0LvQs9C+0YUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i0KfTqdC706nTqdGCINGF0Y3Qu9Cx0Y3RgNC40LnQvSDRhtC+0L3RhdGL0LMg0LjQtNGN0LLRhdC20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i0KLRg9GA0YjQuNC70YLRi9C9INGH06nQu9Op06nRgiDRhdGN0LvQsdGN0YDQuNC50L0g0YbQvtC90YXQvdGLINC00Y3QvNC20LvRjdCz0LjQudCzINC40LTRjdCy0YXQttKv0q/Qu9C00Y3Qsy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0JTQtdGB0LrRgtC+0L8g0L3TqdOp0YjQu9Op0LvRgtC40LnQvSDQvdGD0YPRhiDSr9CzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQlNC10YHQutGC0L7QvyDQsdKv0YDRjdC9INC906nTqdGG0LvTqdC70YIg0L7QtNC+0L7Qs9C+0L7RgCDRhdCw0LzQs9Cw0LDQu9Cw0LvRgtCz0q/QuSDQsdCw0LnQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItCU0LXRgdC60YLQvtC/INC00Y3RjdGA0YUg0LHSr9GA0Y3QvSDQvdOp06nRiNC706nQu9GC0LjQudC9INC90YPRg9GGINKv0LPQuNC50LMg06nTqdGA0YfQu9Op0YUg0LHRg9GO0YMg0LDRgNC40LvQs9Cw0YXRi9C9INGC0YPQu9C0INGF0q/RgNC90Y0g0q/SryI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i0JjQtNGN0LLRhdCz0q/QuSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+ItCR0LDQudC90LPQsCDQsNGB0LDQsNC70YLRgtCw0LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i0JDQstGC0L7QvNCw0YLQsNCw0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3INGF0Y3RgNGN0LPQttC40LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3INGF0Y3RgNGN0LPQttC40LvRgtC40LnQsyDRgtC+0YXQuNGA0YPRg9C70LDRhSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+ItCk0LDQudC70YvQvSDRiNC40YTRgNC70Y3Qu9GCINCx0L7Qu9Cz0L7QvSDRhdOp0YDQstKv0q/Qu9GN0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+ItCl06nRgNCy0q/Sr9C70Y3RhS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i0JDQu9GMINGF0Y3QtNC40LnQvdGNINGE0LDQudC7INGI0LjRhNGA0LvRjdCz0LTRgdGN0L0iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+ItOo0L3Qs9OpINGC0L7RhdC40YDRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLQrdC90Y0g0YTRg9C90LrRhiDRgtGD0YDRiNC40LvRgtGL0L3RhSDQsdOp0LPTqdOp0LQg0LDQttC40LvQu9Cw0LPQsNCw0L3QtCDQvdOp0LvTqdOp0LvQtiDQsdC+0LvQt9C+0YjQs9Kv0LkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i0JTQsNCy0YXQsNGA0LvQsNGB0LDQvSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtINC+0LnRgNC+0LvRhtC+0L7Qs9C+0L7RgCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0q/Qu9C00YHRjdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiLQtNKv0q/RgNGC0Y3QuyA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4i0JDQoS3RgCDQtNKv0q/RgNGC0Y3QuyA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iVVNCLdGAINC00q/Sr9GA0YLRjdC7IDx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiLRg9GC0LDRgdCz0q/QuSDRhtGN0L3RjdCz0LvRjdCz0YfRjdGN0YAg0LTSr9Kv0YDRgtGN0LsgPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+ItCi0L7QtNC+0YDRhdC+0LnQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+ItCm0Y3QvdGN0LPQu9GN0LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMt0YAg0YbRjdC90Y3Qs9C70Y3QtiDQsdCw0LnQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iVVNCLdGAINGG0Y3QvdGN0LPQu9GN0LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i0JrQsNCx0LvRjNCz0q/QudCz0Y3RjdGAINGG0Y3QvdGN0LPQu9GN0LYg0LHQsNC50L3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLQptGN0L3RjdCz0LvRjdGF0LPSr9C5INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQptGN0L3RjdCz0LvRjdGF0LPSr9C5INCx0LDQudC90LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i0JTSr9Kv0YDRjdC9Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tci1ySU4vYXJyYXlzLnhtbAppbmRleCA3MGMxMTU3Li4yZjA3Mzg5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXItcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCkqOClh+CkueCkruClgCBIRENQIOCkpOCkquCkvuCkuOCko+ClgCDgpLXgpL7gpKrgpLDgpL4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgpKzgpILgpKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCkrOCkguCkpiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLgpKrgpY3gpLDgpKTgpL8g4KSy4KWJ4KSXIOCkrOCkq+CksCAyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLgpKzgpILgpKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuCkquCljeCksOCkpOCkvyDgpLLgpYngpJcg4KSs4KSr4KSwIDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4KSq4KWN4KSw4KSk4KS/IOCksuClieCklyDgpKzgpKvgpLAgMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCkheClheCkqOCkv+CkruClh+CktuCkqCDgpKzgpILgpKYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCBjYzM2MjFhLi44MDRmYWIwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCkruClheCkqOCkv+Ckq+Clh+CkuOCljeCknyDgpK7gpYLgpLLgpY3gpK/gpL7gpILgpJXgpKHgpYcg4KSm4KWB4KSw4KWN4KSy4KSV4KWN4KS3IOCkleCksOClguCkqCwg4KSV4KWL4KSj4KSk4KWN4KSv4KS+4KS54KWAIOCkheClheCkquCksuCkviDgpKzgpL7gpLngpY3gpK8g4KS44KSC4KSa4KSv4KSo4KS+4KS14KSwIOCksuClh+CkluCkqCDgpJXgpYfgpLLgpYcg4KSc4KS+4KSj4KWN4oCN4KSv4KS+4KS44KS+4KSg4KWAIOCkquCkvuCkpOCljeCksCDgpKzgpKjgpLXgpL/gpKTgpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgpJXgpY3gpLDigI3gpL/gpK/gpL7gpJXgpLLgpL7gpKrgpL7gpJrgpL4g4KSG4KSV4KS+4KSwIOCkrOCkpuCksuCko+CljeCkr+CkvuCkr+Cli+Ckl+CljeCkryDgpLngpYvgpKPgpY3gpK/gpL7gpJrgpYAg4KS44KSV4KWN4KSk4KWAIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4KSu4KWF4KSo4KS/4KSr4KWH4KS44KWN4KSfIOCkruClguCksuCljeCkr+CkvuCkguCkleCkoeClhyDgpKbgpYHgpLDgpY3gpLLgpJXgpY3gpLcg4KSV4KSw4KWC4KSoLCDgpI/gpJXgpL7gpKfgpL/gpJUt4KS14KS/4KSC4KSh4KWL4KS44KS+4KSg4KWAIOCkuOCksOCljeCktSDgpJXgpY3gpLDgpL/gpK/gpL7gpJXgpLLgpL7gpKrgpL7gpILgpJrgpL4g4KSG4KSV4KS+4KSwIOCkrOCkpuCksuCko+CljeCkr+CkvuCkr+Cli+Ckl+CljeCkryDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJmcmVlZm9ybSDgpLXgpL/gpILgpKHgpYsg4KS44KSV4KWN4KS34KSuIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4KSq4KWN4KSw4KS+4KSv4KWL4KSX4KS/4KSVIOCkruClgeCkleCljeCkpOCkuOCljeCkteCksOClguCkquCkvuCkmuCljeCkr+CkviDgpLXgpL/gpILgpKHgpYvgpLjgpL7gpKDgpYAg4KS44KSu4KSw4KWN4KSl4KSoIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpKTgpYcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuCkoeClh+CkuOCljeCkleCkn+ClieCkqiDgpKzgpYXgpJXgpIXgpKog4KS44KSC4KSV4KWH4KSk4KS24KSs4KWN4KSmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpYngpKog4KSq4KWC4KSw4KWN4KSjIOCkrOClheCklSDgpIXgpKog4KS44KSn4KWN4KSv4KS+IOCkuOCkguCksOCkleCljeCkt+Ckv+CkpCDgpKjgpL7gpLngpYDgpKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4KSh4KWH4KS44KWN4KSV4KSf4KWJ4KSq4KSa4KWN4KSv4KS+IOCkquClguCksOCljeCkoyDgpKzgpYXgpJXgpIXgpKrgpLjgpL7gpKDgpYAg4KSF4KS44KSy4KWH4KSy4KS+IOCkuOCkguCkleClh+CkpOCktuCkrOCljeCkpiDgpKzgpKbgpLLgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KSV4KS/4KSC4KS14KS+IOCkleCkvuCkouClguCkqCDgpJ/gpL7gpJXgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAg4KS44KWN4KSq4KSw4KWN4KS2IOCkleCksOCkviI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLgpIXgpJXgpY3gpLfgpK4g4KSV4KWH4KSy4KWHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4KSo4KWH4KS54KSu4KWAIOCkmuCkvuCksuClgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLgpLjgpY3gpLXgpK/gpILgpJrgpLLgpL/gpKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLgpLXgpYfgpKzgpKbgpYPgpLbgpY3gpK8g4KSF4KSC4KSu4KSy4KSs4KSc4KS+4KS14KSj4KWAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuCkteClh+CkrOCkpuClg+CktuCljeCkryDgpIXgpILgpK7gpLLgpKzgpJzgpL7gpLXgpKPgpYAg4KS44KWH4KSfIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IuCkqOCkv+CkteCkoeCksuClh+CksuClgCBXZWJWaWV3IOCkheCkguCkruCksuCkrOCknOCkvuCkteCko+ClgCDgpIXgpJXgpY3gpLfgpK4g4KSG4KS54KWHIOCkhuCko+CkvyDgpLXgpL7gpKrgpLDgpKPgpY3gpK/gpL7gpLgg4KS44KSV4KWN4KS34KSuIOCkheCkuOCko+ClhyDgpIbgpLXgpLbgpY3gpK/gpJUg4KSG4KS54KWHLCDgpIbgpKrgpKMg4KSk4KWAIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYIg4KSH4KSa4KWN4KSb4KS/4KSk4KS+PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuCkq+CkvuCkiOCksiDgpJXgpYLgpJ/gpKzgpKbgpY3gpKfgpYDgpJXgpLDgpKPgpL7gpLXgpLAg4KSw4KWC4KSq4KS+4KSC4KSk4KSw4KS/4KSkIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i4KSw4KWC4KSq4KS+4KSC4KSk4KSw4KS/4KSkIOCkleCksOCkvi4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4KSr4KS+4KSI4KSyIOCkhuCkp+ClgOCkquCkvuCkuOClguCkqCDgpJXgpYLgpJ/gpKzgpKbgpY3gpKcg4KSV4KWH4KSy4KWAIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgpLDgpILgpJcg4KS44KWB4KSn4KS+4KSw4KSj4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLgpLngpYcg4KS14KWI4KS24KS/4KS34KWN4oCN4KSf4KWN4KSvIOCkquCljeCksOCkvuCkr+Cli+Ckl+Ckv+CklSDgpIbgpLngpYcg4KSG4KSj4KS/IOCkleCkpuCkvuCkmuCkv+CkpCDgpJXgpL7gpLDgpY3gpK/gpKrgpY3gpLDgpKbgpLDgpY3gpLbgpKgg4KSq4KWN4KSw4KSt4KS+4KS14KS/4KSkIOCkleCksOClgiDgpLbgpJXgpKTgpYcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgpKbgpY3gpLXgpL7gpLDgpYcg4KSF4KSn4KS/4KSy4KS/4KSW4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCkheCkguCkpuCkvuCknOClhy4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCktuCkv+CksuCljeCksuCklSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgpKrgpYLgpLDgpY3gpKMg4KS54KWL4KSj4KWN4KSv4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBBQyDgpLXgpLDgpYLgpKgg4KSq4KWC4KSw4KWN4KSjIOCkueCli+Cko+CljeCkr+CkvuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gVVNCIOCkteCksOClguCkqCDgpKrgpYLgpLDgpY3gpKMg4KS54KWL4KSj4KWN4KSv4KS+4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgpLXgpL7gpK/gpLDgpLLgpYfgpLjgpLXgpLDgpYLgpKgg4KSq4KWC4KSw4KWN4KSjIOCkueCli+Cko+CljeCkr+CkvuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCkheCknOCljeCknuCkvuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4KSa4KS+4KSw4KWN4KScIOCkueCli+CkpCDgpIbgpLngpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkFDIOCkteCksCDgpJrgpL7gpLDgpY3gpJwg4KSV4KSw4KWA4KSkIOCkhuCkueClhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDgpLXgpLDgpYLgpKgg4KSa4KS+4KSw4KWN4KScIOCkleCksOClgOCkpCDgpIbgpLngpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuCkteCkvuCkr+CksOCksuClh+CkuCDgpLXgpLDgpYLgpKgg4KSa4KS+4KSw4KWN4KScIOCkleCksOClgOCkpCDgpIbgpLngpYciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4KSa4KS+4KSw4KWN4KScIOCkueCli+CkpCDgpKjgpL7gpLngpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLgpJrgpL7gpLDgpY3gpJwg4KS54KWL4KSkIOCkqOCkvuCkueClgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLgpKrgpYLgpLDgpY3gpKMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9hcnJheXMueG1sCmluZGV4IDMyMGZhOWIuLjQ5ZjBmMjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXMtck1ZL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tcy1yTVkvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iU2VudGlhc2EgZ3VuYWthbiBwZW55ZW1ha2FuIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJNYXRpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJNYXRpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJNYXRpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NksgcGVyIHBlbmltYmFsIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxTSBwZXIgcGVuaW1iYWwgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNIHBlciBwZW5pbWJhbCBsb2ciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzaSBkaW1hdGlrYW4iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1tcy1yTVkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAppbmRleCBiYWJiZWZhLi5lZDRkMDcxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+Ik1lbmphZGlrYW4gc2ViYXJhbmcgYXBsIGxheWFrIGRpdHVsaXMga2Ugc3RvcmFuIGx1YXJhbiwgd2FsYXUgYXBhIGp1Z2EgbmlsYWkgbWFuaWZlc255YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlBha3NhIGFrdGl2aXRpIHN1cGF5YSBib2xlaCBkaXViYWggc2FpeiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iTWVuamFkaWthbiBzZW11YSBha3Rpdml0aSBib2xlaCBkaXViYWggc2FpeiB1bnR1ayBiZXJiaWxhbmcgdGV0aW5na2FwLCB0YW5wYSBtZW5nYW1iaWwga2lyYSBuaWxhaSBtYW5pZmVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkRheWFrYW4gdGV0aW5na2FwIGJlbnR1ayBiZWJhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iTWVuZGF5YWthbiBzb2tvbmdhbiB1bnR1ayB0ZXRpbmdrYXAgYmVudHVrIGJlYmFzIHBlcmN1YmFhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iS2F0YSBsYWx1YW4gc2FuZGFyYW4ga29tcHV0ZXIgbWVqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iU2FuZGFyYW4gcGVudWgga29tcHV0ZXIgbWVqYSB0aWRhayBkaWxpbmR1bmdpIHBhZGEgbWFzYSBpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iU2VudHVoIHVudHVrIG1lbnVrYXIgYXRhdSBtZW5nYWxpaCBrZWx1YXIga2F0YSBsYWx1YW4gdW50dWsgc2FuZGFyYW4gcGVudWgga29tcHV0ZXIgbWVqYSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRGlsdW1wdWhrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJTZW50aWFzYSBoaWR1cCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJQZWxha3NhbmFhbiBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlRldGFwa2FuIHBlbGFrc2FuYWFuIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJUdWthciBrZXBhZGEgcGVueXVsaXRhbiBmYWlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJUdWthci4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iU3VkYWggZGlzdWxpdGthbiBmYWlsIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJQZW1iZXR1bGFuIHdhcm5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJDaXJpIGluaSBhZGFsYWggcGVyY3ViYWFuIGRhbiBib2xlaCBtZW5qZWphc2thbiBwcmVzdGFzaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJEaWF0YXNpIG9sZWggPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBraXJhLWtpcmEuIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB5YW5nIHRpbmdnYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gc2VoaW5nZ2EgcGVudWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHNlaGluZ2dhIHBlbnVoIGRpIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBzZWhpbmdnYSBwZW51aCBtZWxhbHVpIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gc2VoaW5nZ2EgcGVudWggZGFyaSB3YXlhcmxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlRpZGFrIGRpa2V0YWh1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iTWVuZ2VjYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+Ik1lbmdlY2FzIHBhZGEgQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJNZW5nZWNhcyBtZWxhbHVpIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iTWVuZ2VjYXMgdGFucGEgd2F5YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iVGlkYWsgbWVuZ2VjYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJUaWRhayBtZW5nZWNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQZW51aCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1teS1yTU0vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbXktck1NL2FycmF5cy54bWwKaW5kZXggNzFiMzVhZC4uYWQzYTU5ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1teS1yTU0vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJIRENQIGNoZWNraW5n4YCh4YCs4YC44YCh4YCZ4YC84YCy4YCe4YCv4YC24YC44YCV4YCrIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4YCV4YCt4YCQ4YC64YCV4YCrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiLhgYbhgYRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IuGBguGBheGBhksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4i4YGBTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLhgJXhgK3hgJDhgLrhgJXhgKsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsg4YCc4YCx4YCs4YC3IOGAmOGArOGAluGArOGAuOGAkOGAveGAgOGAuiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIOGAnOGAseGArOGAtyDhgJjhgKzhgJbhgKzhgLjhgJDhgL3hgIDhgLoiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0g4YCc4YCx4YCs4YC3IOGAmOGArOGAluGArOGAuOGAkOGAveGAgOGAuiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSDhgJzhgLHhgKzhgLcg4YCY4YCs4YCW4YCs4YC44YCQ4YC94YCA4YC6IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSDhgJzhgLHhgKzhgLcg4YCY4YCs4YCW4YCs4YC44YCQ4YC94YCA4YC6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuGAleGAreGAkOGAuuGAleGAqyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLhgJnhgL7hgJDhgLrhgJDhgJnhgLrhgLjhgJrhgKzhgJrhgK7hgIDhgLzhgKzhgLjhgIHhgLbhgJThgJrhgLrhgJDhgIXhgLrhgIHhgK/hgJzhgLvhgL7hgIThgLogNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuGAmeGAvuGAkOGAuuGAkOGAmeGAuuGAuOGAmuGArOGAmuGAruGAgOGAvOGArOGAuOGAgeGAtuGAlOGAmuGAuuGAkOGAheGAuuGAgeGAr+GAnOGAu+GAvuGAhOGAuiAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuGAmeGAvuGAkOGAuuGAkOGAmeGAuuGAuOGAmuGArOGAmuGAruGAgOGAvOGArOGAuOGAgeGAtuGAlOGAmuGAuuGAkOGAheGAuuGAgeGAr+GAnOGAu+GAvuGAhOGAuiAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLhgJnhgL7hgJDhgLrhgJDhgJnhgLrhgLjhgJrhgKzhgJrhgK7hgIDhgLzhgKzhgLjhgIHhgLbhgJThgJrhgLrhgJDhgIXhgLrhgIHhgK/hgJzhgLvhgL7hgIThgLogNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4YCZ4YC+4YCQ4YC64YCQ4YCZ4YC64YC44YCa4YCs4YCa4YCu4YCA4YC84YCs4YC44YCB4YC24YCU4YCa4YC64YCQ4YCF4YC64YCB4YCv4YCc4YC74YC+4YCE4YC6IDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLhgJzhgL7hgK/hgJXhgLrhgJvhgL7hgKzhgLjhgJ7hgIDhgLrhgJ3hgIThgLrhgJnhgL7hgK/hgJXhgK/hgLbhgJnhgLvhgKzhgLjhgIDhgK3hgK/hgJXhgK3hgJDhgLrhgJXhgKsiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbAppbmRleCBmMjkzZDRhLi5hYjdhOGQwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuGAleGAvOGAlOGAseGAkOGAsuGAtyDhgJDhgJThgLrhgJbhgK3hgK/hgLgg4YCY4YCa4YC64YCc4YCt4YCv4YCV4YCy4YCb4YC+4YCt4YCU4YCx4YCU4YCx4YGKIOGAmOGAmuGAuiBhcHDhgIDhgK3hgK8g4YCZ4YCG4YCt4YCvIOGAoeGAleGAvOGAhOGAuiDhgJ7hgK3hgK/hgJzhgL7hgLHhgKzhgIThgLrhgIHhgJThgLrhgLjhgJ7hgK3hgK/hgLcg4YCb4YCx4YC44YCe4YCs4YC44YCB4YC94YCE4YC34YC6IOGAleGAseGAuOGAkOGAmuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuGAnOGAr+GAleGAuuGAhuGAseGArOGAhOGAuuGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuCDhgIbhgK3hgK/hgIDhgLrhgIrhgL7hgK3hgJvhgJThgK3hgK/hgIThgLrhgJvhgJThgLog4YCc4YCv4YCV4YC64YCB4YCt4YCv4YCE4YC64YC44YCV4YCrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLhgJnhgJThgLrhgJThgK7hgLjhgJbhgIDhgLrhgIXhgLog4YCQ4YCU4YC64YCW4YCt4YCv4YC44YCZ4YCb4YC94YCx4YC44YGKIOGAnOGAr+GAleGAuuGAhuGAseGArOGAhOGAuuGAgeGAu+GAgOGAuiDhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCG4YCt4YCv4YCA4YC64YCK4YC+4YCt4YCb4YCU4YCt4YCv4YCE4YC64YCh4YCx4YCs4YCE4YC6IOGAnOGAr+GAleGAuuGAleGAseGAuOGAleGAq+GBiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuGAoeGAgeGAmeGAsuGAt+GAleGAr+GAtuGAheGAtiDhgJ3hgIThgLrhgLjhgJLhgK3hgK/hgLjhgIDhgK3hgK8g4YCW4YC94YCE4YC34YC64YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLhgIXhgJnhgLrhgLjhgJ7hgJXhgLrhgJnhgL7hgK8g4YCh4YCB4YCZ4YCy4YC34YCV4YCv4YC24YCF4YC2IOGAneGAhOGAuuGAuOGAkuGAreGAr+GAuOGAmeGAu+GArOGAuOGAoeGAkOGAveGAgOGAuiDhgJXhgLbhgLfhgJXhgK3hgK/hgLjhgJnhgL7hgK/hgIDhgK3hgK8g4YCW4YC94YCE4YC34YC64YCV4YCr4YGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkRlc2t0b3Ag4YCh4YCb4YCU4YC64YCF4YCA4YCs4YC44YCd4YC+4YCA4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLhgKHhgJzhgK/hgJXhgLrhgIHhgK/hgLbhgJDhgL3hgIThgLog4YCh4YCb4YCU4YC64YCe4YCt4YCZ4YC64YC44YCG4YCK4YC64YC44YCB4YC84YCE4YC64YC44YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAnOGAseGArOGAnOGAseGArOGAhuGAmuGAuiDhgJnhgIDhgKzhgIDhgL3hgJrhgLrhgJThgK3hgK/hgIThgLrhgJXhgKvhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4YCh4YCc4YCv4YCV4YC64YCB4YCv4YC2IOGAkOGAveGAhOGAuiDhgKHhgJvhgJThgLrhgJ7hgK3hgJnhgLrhgLjhgIbhgIrhgLrhgLjhgIHhgLzhgIThgLrhgLjhgKHhgJXhgLzhgIrhgLfhgLrhgJzhgK/hgJXhgLrhgJvhgJThgLog4YCh4YCQ4YC94YCA4YC6IOGAheGAgOGArOGAuOGAneGAvuGAgOGAuuGAluGAmuGAuuGAm+GAlOGAuiDhgJ7hgK3hgK/hgLcg4YCV4YC84YCx4YCs4YCE4YC64YC44YCb4YCU4YC6IOGAkOGAreGAr+GAt+GAkeGAreGAleGAq+GBiyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i4YCV4YCt4YCQ4YC64YCR4YCs4YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i4YCh4YCZ4YC84YCy4YCQ4YCZ4YC64YC4IOGAluGAveGAhOGAt+GAuuGAkeGArOGAuOGAm+GAlOGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLhgKHhgJzhgK3hgK/hgKHhgJzhgLvhgLHhgKzhgIDhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3IOGAoeGAgOGAseGArOGAhOGAuuGAoeGAkeGAiuGAuuGAluGAseGArOGAuuGAmeGAvuGAryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3IOGAoeGAgOGAseGArOGAhOGAuuGAoeGAkeGAiuGAuuGAluGAseGArOGAuuGAmeGAvuGAryDhgJ7hgJDhgLrhgJnhgL7hgJDhgLrhgJXhgKsiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLhgJbhgK3hgK/hgIThgLrhgJzhgK/hgLbhgIHhgLzhgK/hgLbhgKHhgLHhgKzhgIThgLrhgJXhgLzhgK/hgJzhgK/hgJXhgLrhgIHhgLzhgIThgLrhgLjhgJ7hgK3hgK/hgLcg4YCV4YC84YCx4YCs4YCE4YC64YC44YCV4YCrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLhgJXhgLzhgLHhgKzhgIThgLrhgLjhgJvhgJThgLrigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuGAluGAreGAr+GAhOGAuuGAgOGAreGAryDhgJzhgK/hgLbhgIHhgLzhgK/hgLbhgKHhgLHhgKzhgIThgLrhgJXhgLzhgK/hgJzhgK/hgJXhgLrhgJXhgLzhgK7hgLjhgJXhgKvhgJXhgLzhgK4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuGAoeGAm+GAseGArOGAhOGAuuGAleGAvOGAhOGAuuGAhuGAhOGAuuGAmeGAvuGAryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i4YCS4YCu4YCh4YCE4YC64YC54YCC4YCr4YCb4YCV4YC64YCZ4YC+4YCsIOGAheGAmeGAuuGAuOGAnuGAleGAuuGAmeGAvuGAryDhgJbhgLzhgIXhgLrhgY0g4YCc4YCv4YCV4YC64YCA4YCt4YCv4YCE4YC64YCZ4YC+4YCv4YCA4YCt4YCvIOGAoeGAgOGAu+GAreGAr+GAuOGAnuGAgOGAuuGAm+GAseGArOGAgOGAuuGAlOGAreGAr+GAhOGAuuGAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+Ijx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4g4YCZ4YC+IOGAgOGAu+GAseGArOGAuuGBjSDhgJzhgK/hgJXhgLrhgJHhgKzhgLjhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4YCB4YCU4YC34YC64YCZ4YC+4YCU4YC64YC44YCB4YC84YCx4YGLIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhgIDhgLvhgJThgLrhgJvhgL7hgK3hgJThgLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4YCh4YCV4YC84YCK4YC34YC64YCh4YCR4YCtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDhgJzhgLvhgL7hgJXhgLrhgIXhgIXhgLrhgJbhgLzhgIThgLfhgLog4YCh4YCV4YC84YCK4YC34YC64YCh4YCR4YCtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBVU0Ig4YCW4YC84YCE4YC34YC6IOGAoeGAleGAvOGAiuGAt+GAuuGAoeGAkeGArSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4YCA4YC84YCt4YCv4YC44YCZ4YCy4YC34YCW4YC84YCE4YC34YC6IOGAoeGAleGAvOGAiuGAt+GAuuGAoeGAkeGArSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuGAoeGAgOGAvOGAseGArOGAhOGAuuGAuOGAoeGAm+GArCDhgJnhgJ7hgK3hgJvhgL7hgK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuGAoeGArOGAuOGAnuGAveGAhOGAuuGAuOGAlOGAseGAleGAq+GAnuGAiuGAuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i4YCc4YC74YC+4YCV4YC64YCF4YCF4YC64YCW4YC84YCE4YC34YC6IOGAoeGArOGAuOGAnuGAveGAhOGAuuGAuOGAlOGAsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQuGAluGAvOGAhOGAt+GAuiDhgKHhgKzhgLjhgJ7hgL3hgIThgLrhgLjhgJThgLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuGAgOGAvOGAreGAr+GAuOGAmeGAsuGAtyDhgKHhgKzhgLjhgJ7hgL3hgIThgLrhgLjhgJThgLEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4YCh4YCs4YC44YCe4YC94YCE4YC64YC44YCZ4YCU4YCx4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i4YCh4YCs4YC44YCe4YC94YCE4YC64YC44YCZ4YCU4YCx4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuGAoeGAleGAvOGAiuGAt+GAuiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9hcnJheXMueG1sCmluZGV4IDA4NzdmNWMuLjgzMTFkYjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmIvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5iL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkJydWsgYWxsdGlkIEhEQ1Ata29udHJvbGwiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iQXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IDAwMCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgMDAwIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgbWlsbGlvbiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJBdiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGtCIHByIGxvZ2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IGtCIHByIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxIE1CIHByIGxvZ2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNQiBwciBsb2dnYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIHByIGxvZ2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iQXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjRLIHBlciBsb2dnYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NksgcGVyIGxvZ2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0gcGVyIGxvZ2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNE0gcGVyIGxvZ2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNIHBlciBsb2dnYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hc2pvbiBhdiI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAppbmRleCAyYjQ2MWU3Li5lMzljZjMwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJHasO4ciBhdCBhcHBlciBrYW4gc2tyaXZlcyB0aWwgZWtzdGVybiBsYWdyaW5nLCB1YXZoZW5naWcgYXYgbWFuaWZlc3R2ZXJkaWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVHZpbmcgYWt0aXZpdGV0ZXIgdGlsIMOlIGt1bm5lIGVuZHJlIHN0w7hycmVsc2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkRldHRlIGdqw7hyIGF0IGFsbGUgYWt0aXZpdGVuZSBrYW4gZW5kcmUgc3TDuHJyZWxzZSBmb3IgZmxlcnZpbmR1c21vZHVzLCB1YXZoZW5naWcgYXYgbWFuaWZlc3R2ZXJkaWVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IlNsw6UgcMOlIHZpbmR1ZXIgaSBmcml0dCBmb3JtYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IlNsw6VyIHDDpSBzdMO4dHRlIGZvciB2aW5kdWVyIGkgZWtzcGVyaW1lbnRlbHQgZnJpdHQgZm9ybWF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJQYXNzb3JkIGZvciBzaWtrZXJoZXRza29waWVyaW5nIHDDpSBkYXRhbWFza2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJGdWxsc3RlbmRpZyBzaWtrZXJoZXRza29waWVyaW5nIHDDpSBkYXRhbWFza2luIGJlc2t5dHRlcyBpa2tlIGZvciDDuHllYmxpa2tldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVHJ5a2sgZm9yIMOlIGVuZHJlIGVsbGVyIGZqZXJuZSBwYXNzb3JkZXQgZm9yIGZ1bGxzdGVuZGlnZSBzaWtrZXJoZXRza29waWVyIHDDpSBkYXRhbWFza2luZW4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iU2zDpXR0IGF2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWxsdGlkIHDDpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aXNrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldy1pbXBsZW1lbnRlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJBbmdpIFdlYlZpZXctaW1wbGVtZW50ZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJEZW4gdmFsZ3RlIGltcGxlbWVudGVyaW5nZW4gYXYgbmV0dHZpc25pbmdlbiBlciBzbMOldHQgYXYg4oCTIGRlbiBtw6Ugc2zDpXMgcMOlIGZvciDDpSBicnVrZXMuIFZpbCBkdSBzbMOlIGRlbiBww6U/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iS29udmVydMOpciB0aWwga3J5cHRlcnQgZmlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJLb252ZXJ0w6lyIOKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iQWxsZXJlZGUga3J5cHRlcnQgb2cgbGFncmV0IHNvbSBmaWwiPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IkZhcmdla29ycmlnZXJpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkRlbm5lIGZ1bmtzam9uZW4gZXIgZWtzcGVyaW1lbnRlbGwgb2cga2FuIHDDpXZpcmtlIHl0ZWxzZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iT3ZlcnN0eXJlcyBhdiA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgY2EuIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBpZ2plbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBmdWxsYWRldCBvbSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyAgZnVsbGFkZXQgb20gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IG1lZCB2ZWtzZWxzdHLDuG0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyBmdWxsYWRldCBvbSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdmlhIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIGZ1bGxhZGV0IG9tIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB2aWEgdHLDpWRsw7hzIGxhZGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IlVramVudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iTGFkZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkxhZGVyIHZpYSBzdHLDuG11dHRhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IkxhZGVyIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkxhZGVyIHRyw6VkbMO4c3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTGFkZXIgaWtrZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IkxhZGVyIGlra2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRnVsbHQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9hcnJheXMueG1sCmluZGV4IDk5ZWM4ODEuLjc0Njg5ODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmUtck5QL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uZS1yTlAvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4KS44KSn4KWI4KSBIEhEQ1Ag4KSc4KS+4KSB4KSaIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgpKjgpL/gpLfgpY3gpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IuClrOClquCkleClhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IuClqOClq+ClrOCkleClhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiLgpafgpI/gpK4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiLgpargpI/gpK4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4i4KWn4KWs4KSP4KSuIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4i4KWs4KWqSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiLgpajgpavgpaxLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IuClpyDgpK7gpYfgpJfgpL4g4KSq4KS/4KSV4KWN4KS44KWH4KSyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCkqOCkv+Ckt+CljeCkleCljeCksOCkv+CkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4i4KWs4KWq4KSV4KWHIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IuClqOClq+ClrOCkleClhyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiLgpafgpI/gpK4iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsg4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0g4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4KSo4KS/4KS34KWN4KSV4KWN4KSw4KS/4KSvIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgpazgpargpJXgpYcg4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4i4KWo4KWr4KWs4KSV4KWHIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IuClp+Ckj+CkriDgpKrgpY3gpLDgpKTgpL8g4KSy4KSXIOCkrOCkq+CksCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgpargpI/gpK4g4KSq4KWN4KSw4KSk4KS/IOCksuCklyDgpKzgpKvgpLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4KWn4KWs4KSP4KSuIOCkquCljeCksOCkpOCkvyDgpLLgpJcg4KSs4KSr4KSwIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCkuOCknOClgOCkteCkv+CkleCksOCkoyDgpKzgpKjgpY3gpKYiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAppbmRleCBmODU5Mjg3Li5kOWNmYmNjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuCkruCljeCkr+CkvuCkqOCkv+Ckq+Clh+Clh+CkuOCljeCkn+CkleCliyDgpIngpKrgpYfgpJXgpY3gpLfgpL4g4KSX4KSw4KWALCDgpJXgpYHgpKjgpYgg4KSq4KSo4KS/IOCkheCkqOClgeCkquCljeCksOCkr+Cli+Ckl+CksuCkvuCkiCDgpKzgpL7gpLngpY3gpK8g4KSt4KSj4KWN4KSh4KS+4KSw4KSj4KSu4KS+IOCksuClh+CkluCljeCkqCDgpK/gpYvgpJfgpY3gpK8g4KSs4KSo4KS+4KSJ4KSB4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4KSX4KSk4KS/4KS14KS/4KSn4KS/4KS54KSw4KWCIOCksOCkv+CkuOCkvuCkh+CknCDgpJfgpLDgpY3gpKjgpJXgpYsg4KSy4KS+4KSX4KS/IOCkrOCkvuCkp+CljeCkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuCkruCljeCkr+CkvuCkqOCkv+Ckq+Clh+Clh+CkuOCljeCknyDgpK7gpL7gpKjgpLngpLDgpYLgpJXgpYsg4KSW4KWN4KSv4KS+4KSyIOCkqOCkl+CksOClgCwg4KSs4KS54KWBLeCkteCkv+CkqOCljeCkoeCli+CkleCliyDgpLLgpL7gpJfgpL8g4KS44KSs4KWIIOCksOCkv+CkuOCkvuCkh+CknCDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSo4KWHIOCkl+CkpOCkv+CkteCkv+Ckp+Ckv+CkueCksOClgiDgpKzgpKjgpL7gpIngpIHgpJvgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgpKvgpY3gpLDgpL/gpKvgpLDgpY3gpK4g4KS14KS/4KSo4KWN4KSh4KWL4KS54KSw4KWCIOCkuOCkleCljeCksOCkv+CkryDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuCkquCljeCksOCkr+Cli+Ckl+CkvuCkpOCljeCkruCklSDgpKvgpY3gpLDgpL/gpKvgpLDgpY3gpK4g4KS14KS/4KSo4KWN4KSh4KWL4KS54KSw4KWC4KSV4KS+IOCksuCkvuCkl+CkvyDgpLjgpK7gpLDgpY3gpKXgpKjgpLLgpL7gpIgg4KS44KSV4KWN4KSw4KS/4KSvIOCkl+CksOCljeCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgpKHgpYfgpLjgpY3gpJXgpJ/gpKog4KSs4KWN4KSv4KS+4KSV4KSF4KSqIOCkquCkvuCkuOCkteCksOCljeCkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4KSh4KWH4KS44KWN4KSV4KSf4KSqIOCkquClguCksOCljeCkoyDgpJzgpJfgpYfgpKHgpL7gpLngpLDgpYIg4KS54KS+4KSy4KSy4KS+4KSIIOCkuOClgeCksOCkleCljeCkt+Ckv+CkpCDgpJvgpYjgpKjgpKjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4KSh4KWH4KS44KWN4KSV4KSf4KSqIOCkquClguCksOCljeCkoyDgpKzgpY3gpK/gpL7gpJXgpIXgpKrgpJXgpYsg4KSy4KS+4KSX4KS/IOCkquCkvuCkuOCkteCksOCljeCkoSDgpKzgpKbgpLLgpY3gpKgg4KS14KS+IOCkueCkn+CkvuCkieCkqCDgpJvgpYHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuCkheCkuOCkleCljeCkt+CkriDgpJfgpLDgpL/gpK/gpYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgpLjgpKfgpYjgpIIg4KSW4KWB4KSy4KWN4oCN4KSy4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuCkuOCljeCkteCkmuCkvuCksuCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4KSV4KS+4KSw4KWN4KSv4KS+4KSo4KWN4KS14KSv4KSoIOCkuOClh+CknyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLgpKvgpL7gpIfgpLIg4KSH4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KS44KSo4KSu4KS+IOCksOClguCkquCkvuCkqOCljeCkpOCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCksOClgeCkquCkvuCkqOCljeCkpOCksOCkoyDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY3igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuCkquCkueCkv+CksuCljeCkr+CliCDgpKvgpL7gpIfgpLIg4KSH4KSo4KWN4KSV4KWN4KSw4KS/4KSq4KWN4KSfIOCkl+CksOCkv+Ckj+CkleCliyDgpJsiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuCksOCkmeCljeCklyDgpLjgpYHgpKfgpL7gpLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuCkr+CliyDgpLjgpYHgpLXgpL/gpKfgpL4g4KSq4KWN4KSw4KSv4KWL4KSX4KS+4KSk4KWN4KSu4KSVIOCkmyDgpLAg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSo4KSu4KS+IOCkheCkuOCksCDgpJfgpLDgpY3gpKgg4KS44KSV4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgpKbgpY3gpLXgpL7gpLDgpL4g4KSF4KSn4KS/4KSw4KWL4KS54KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCksuCkl+CkreCkl+ClpCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4KSs4KS+4KSv4KS+4KSBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCkquClguCksOCljeCkoyDgpKjgpK3gpI8g4KS44KSu4KWN4KSuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBBQyDgpK7gpL4g4KSq4KWC4KSw4KWN4KSjIOCkqOCkreCkjyDgpLjgpK7gpY3gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IFVTQiDgpK7gpL4g4KSq4KWC4KSw4KWN4KSjIOCkqOCkreCkjyDgpLjgpK7gpY3gpK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCkteCkvuCkr+CksOCksuClh+CkuOCkrOCkvuCknyDgpKrgpYLgpLDgpY3gpKMg4KSo4KSt4KSPIOCkuOCkruCljeCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCkheCknOCljeCknuCkvuCkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4KSa4KS+4KSw4KWN4KScIOCkueClgeCkgeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMg4KSu4KS+IOCkmuCkvuCksOCljeCknCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0Ig4KSu4KS+IOCkmuCkvuCksOCljeCknCDgpJfgpLDgpY3gpKbgpYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuCkrOCkv+CkqOCkviDgpKTgpL7gpLAg4KSa4KS+4KSw4KWN4KScIOCkl+CksOCljeCkpuCliCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLgpJrgpL7gpLDgpY3gpJwg4KSt4KSH4KSw4KS54KWH4KSV4KWLIOCkm+CliOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IuCkmuCkvuCksOCljeCknCDgpLngpYHgpIHgpKbgpYgg4KSb4KWI4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuCkquClguCksOCljeCkoyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ubC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ubC9hcnJheXMueG1sCmluZGV4IDdmNzZiYmEuLjQ4YjEzNWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5sL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhEQ1AtY29udHJvbGUgYWx0aWpkIGdlYnJ1aWtlbiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IlVpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJVaXQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsgcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIHBlciBsb2didWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSBwZXIgbG9nYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlVpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLIHBlciBsb2didWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsgcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0gcGVyIGxvZ2J1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIHBlciBsb2didWZmZXIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWF0aWUgdWl0IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDQ5MjQyZjkuLjQ4NzNhYzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkhpZXJkb29yIGtvbXQgZWVuIGFwcCBpbiBhYW5tZXJraW5nIG9tIHRlIHdvcmRlbiBnZXNjaHJldmVuIG5hYXIgZXh0ZXJuZSBvcHNsYWcsIG9uZ2VhY2h0IGRlIG1hbmlmZXN0d2FhcmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcm1hYXQgYWN0aXZpdGVpdGVuIGdlZm9yY2VlcmQgYWFucGFzYmFhciBtYWtlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iSGllcm1lZSB3b3JkdCBoZXQgZm9ybWFhdCB2YW4gYWxsZSBhY3Rpdml0ZWl0ZW4gYWFucGFzYmFhciBnZW1hYWt0LCBvbmdlYWNodCBkZSBtYW5pZmVzdHdhYXJkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iVmVuc3RlcnMgbWV0IHZyaWplIHZvcm0gaW5zY2hha2VsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IlNjaGFrZWx0IG9uZGVyc3RldW5pbmcgaW4gdm9vciB2ZW5zdGVycyBtZXQgZXhwZXJpbWVudGVsZSB2cmlqZSB2b3JtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJXYWNodHdvb3JkIGRlc2t0b3BiYWNrLXVwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJWb2xsZWRpZ2UgYmFjay11cHMgbmFhciBkZXNrdG9wcyB6aWpuIG1vbWVudGVlbCBuaWV0IGJldmVpbGlnZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJSYWFrIGRpdCBhYW4gb20gaGV0IHdhY2h0d29vcmQgdm9vciB2b2xsZWRpZ2UgYmFjay11cHMgbmFhciBkZXNrdG9wcyB0ZSB3aWp6aWdlbiBvZiB0ZSB2ZXJ3aWpkZXJlbiI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJVaXRnZXNjaGFrZWxkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iQWx0aWpkIGFhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBdXRvbWF0aXNjaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXctaW1wbGVtZW50YXRpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3LWltcGxlbWVudGF0aWUgaW5zdGVsbGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iRGUgZ2Vrb3plbiBXZWJWaWV3LWltcGxlbWVudGF0aWUgaXMgdWl0Z2VzY2hha2VsZCBlbiBtb2V0IHdvcmRlbiBpbmdlc2NoYWtlbGQgdm9vciBnZWJydWlrLiBXaWwgamUgZGV6ZSBpbnNjaGFrZWxlbj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJDb252ZXJ0ZXJlbiBuYWFyIHZlcnNsZXV0ZWxpbmcgb3AgYmFzaXMgdmFuIGJlc3RhbmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGVyZW7igKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkFsIHZlcnNsZXV0ZWxkIG9wIGJhc2lzIHZhbiBiZXN0YW5kZW4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktsZXVyY29ycmVjdGllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJEZXplIGZ1bmN0aWUgaXMgZXhwZXJpbWVudGVlbCBlbiBrYW4gaW52bG9lZCBoZWJiZW4gb3AgZGUgcHJlc3RhdGllcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJPdmVyc2NocmV2ZW4gZG9vciA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIGNhLiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcmVzdGVyZW5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHRvdCB2b2wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHRvdCB2b2wgdmlhIHdpc3NlbHN0cm9vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdG90IHZvbCB2aWEgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0b3Qgdm9sIHZpYSBkcmFhZGxvb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJPbmJla2VuZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iT3BsYWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iT3BsYWRlbiB2aWEgbmV0dm9lZGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Ik9wbGFkZW4gdmlhIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iRHJhYWRsb29zIG9wbGFkZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iV29yZHQgbmlldCBvcGdlbGFkZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJXb3JkdCBuaWV0IG9wZ2VsYWRlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJWb2xsZWRpZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGEtcklOL2FycmF5cy54bWwKaW5kZXggZmE2MjRhMC4uZDY0NGRhNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBhLXJJTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLgqLngqK7gqYfgqLjgqL7gqIIgSERDUCDgqJzgqL7gqILgqJog4Ki14Kiw4Kik4KmLIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i4Kis4Kmw4KimIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLgqKzgqbDgqKYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsg4Kiq4KmN4Kiw4Kik4KmAIOCosuCpjOColyDgqKzgqKvgqLAiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TSDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0g4Kiq4KmN4Kiw4Kik4KmAIOCosuCpjOColyDgqKzgqKvgqLAiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4Kis4Kmw4KimIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTZLIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIOCoquCpjeCosOCopOCpgCDgqLLgqYzgqJcg4Kis4Kir4KiwIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2TSDgqKrgqY3gqLDgqKTgqYAg4Kiy4KmM4KiXIOCorOCoq+CosCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgqJDgqKjgqYDgqK7gqYfgqLjgqLzgqKgg4Kis4Kmw4KimIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKaW5kZXggY2JlMTk2Yy4uNjFmMTg3ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgqIfgqbHgqJUg4KiQ4KiqIOCoqOCpguCpsCDgqKzgqL7gqLngqLDgqLLgqYAg4Ki44Kif4KmL4Kiw4KmH4KicIOCopOCphyDgqLLgqL/gqJbgqKMg4Kim4KmHIOCor+Cpi+ColyDgqKzgqKPgqL7gqIngqILgqKbgqL4g4Ki54KmILCDgqK7gqYjgqKjgqYDgqKvgqYjgqLjgqJ8g4Ki14KmI4Kiy4Kiv4KmC4KicIOCopOCphyDgqLXgqL/gqJrgqL7gqLAg4KiV4KmA4Kik4KmHIOCorOCov+CoqOCovuCogiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuCoruCpgeCpnC3gqIbgqJXgqL7gqLAg4Kis4Kim4Kiy4KijIOCosuCoiCDgqLjgqLDgqJfgqLDgqK7gqYDgqIbgqIIgXCfgqKTgqYcg4Kic4Ki84KmL4KiwIOCopuCov+CokyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4Kiu4Kiy4Kif4KmALeCoteCov+CpsOCooeCpiyDgqLLgqIgg4Ki44Ki+4Kiw4KmA4KiG4KiCIOCouOCosOCol+CosOCoruCpgOCohuCogiDgqKjgqYLgqbAg4Kiu4KmB4KmcLeCohuColeCovuCosCDgqLXgqL/gqbHgqJog4Kiy4Ki/4KiG4KiJ4KiC4Kim4KmAIOCoueCpiCwg4Kia4Ki+4Ki54KmHIOCoruCpiOCoqOCpgOCoq+CpiOCouOConyDgqLXgqYjgqLLgqK/gqYLgqJzgqLwg4KiV4KmB4KidIOCoteCpgCDgqLngqYvgqKPgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJmcmVlZm9ybSB3aW5kb3dzIOCoqOCpguCpsCDgqK/gqYvgqJcg4Kis4Kij4Ki+4KiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgqKrgqY3gqLDgqK/gqYvgqJfgqL7gqKTgqK7gqJUgZnJlZWZvcm0gd2luZG93cyDgqLLgqIgg4Ki44Kiu4Kiw4Kil4KioIOCoqOCpguCpsCDgqK/gqYvgqJcg4Kis4Kij4Ki+4KiJ4KiC4Kim4KmAIOCoueCpiOClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgqKHgqYjgqLjgqJXgqJ/gqYzgqKog4Kis4KmI4KiV4KiF4KiqIOCoquCovuCouOCoteCosOCooSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4Kih4KmI4Ki44KiV4Kif4KmM4KiqIOCoquCpguCosOCphyDgqKzgqYjgqJXgqIXgqKrgqLgg4KiH4Ki4IOCoteCph+CosuCphyDgqLjgqYHgqLDgqbHgqJbgqL/gqIXgqKQg4Kio4Ki54KmA4KiCIOCoueCoqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgqKHgqYjgqLjgqJXgqJ/gqYzgqKog4Kiq4KmC4Kiw4KmHIOCorOCpiOColeCoheCoquCouCDgqLLgqIgg4Kiq4Ki+4Ki44Ki14Kiw4KihIOCorOCopuCosuCooyDgqJzgqL7gqIIg4Ki54Kif4Ki+4KiJ4KijIOCosuCoiCDgqJvgqYvgqLngqLXgqYsiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i4KiF4Ki44Kiu4Kiw4Kmx4KilIOCorOCoo+CovuCoh+CohiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IuCoueCoruCph+CouOCovOCoviDgqJrgqL7gqLLgqYIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i4KiG4Kif4KmL4Kiu4KmI4Kif4Ki/4KiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldyDgqIXgqK7gqLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iV2ViVmlldyDgqIXgqK7gqLIg4Ki44KmI4Kmx4KifIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+IuComuCpgeCoo+Cov+CohiDgqJfgqL/gqIYgV2ViVmlldyDgqIXgqK7gqLIg4KiF4Kiv4KmL4KiXIOCorOCoo+CovuCoh+CohiDgqJfgqL/gqIYg4Ki54KmILCDgqIXgqKTgqYcg4Ki14Kiw4Kik4KmL4KiCIOColeCosOCoqCDgqLLgqIgg4KiH4Ki4IOCoqOCpguCpsCDgqK/gqYvgqJcg4Kis4Kij4Ki+4KiH4KiGIOConOCovuCoo+CoviDgqJzgqLzgqLDgqYLgqLDgqYAg4Ki54KmILCDgqJXgqYAg4Kik4KmB4Ki44KmA4KiCIOCoh+CouCDgqKjgqYLgqbAg4Kiv4KmL4KiXIOCorOCoo+CovuCoieCoo+CoviDgqJrgqL7gqLngqYHgqbDgqKbgqYcg4Ki54KmLPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuCoq+CovOCovuCoiOCosiDgqIfgqKjgqJXgqY3gqLDgqL/gqKrgqLjgqLzgqKgg4Ki14Ki/4Kmx4KiaIOCopOCorOCopuCpgOCosiDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCopOCorOCopuCpgOCosiDgqJXgqLDgqYsgLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLgqKvgqLzgqL7gqIjgqLIg4Kiq4Ki54Ki/4Kiy4Ki+4KiCIOCopOCpi+CogiDgqIfgqKjgqJXgqY3gqLDgqL/gqKrgqJ/gqKEg4Ki54KmIIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgqLDgqbDgqJcg4Ki44Kmw4Ki44Ki84KmL4Kin4KioIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLgqIfgqLkg4Ki14Ki/4Ki44Ki84KmH4Ki44Ki84Kik4Ki+IOCoquCpjeCosOCor+Cpi+Col+CovuCopOCoruCov+ColSDgqLngqYgg4KiF4Kik4KmHIOCoquCpjeCosOCopuCosOCouOCovOCoqCDgqKTgqYcg4KiF4Ki44KiwIOCoquCoviDgqLjgqJXgqKbgqYAg4Ki54KmI4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgqKbgqYHgqIbgqLDgqL4g4KiT4Ki14Kiw4Kiw4Ki+4KiI4KihIOColeCpgOCopOCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDgqLLgqJfgqK3gqJcgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCorOCovuColeCpgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgqKrgqYLgqLDgqYAg4Ki54KmL4KijIOCopOCpseColSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gQUMg4Kik4KmHIOCoquCpguCosOCoviDgqLngqYvgqKMg4Kik4Kmx4KiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBVU0Ig4Kik4KmHIOCoquCpguCosOCoviDgqLngqYvgqKMg4Kik4Kmx4KiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgqLXgqL7gqIfgqLDgqLLgqYjgqLgg4Kik4KmL4KiCIOCoquCpguCosOCoviDgqLngqYvgqKMg4Kik4Kmx4KiVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i4KiF4KiX4Ki/4KiG4KikIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLgqJrgqL7gqLDgqJzgqL/gqbDgqJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IkFDIOCopOCphyDgqJrgqL7gqLDgqJzgqL/gqbDgqJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJVU0Ig4Kik4KmHIOComuCovuCosOConOCov+CpsOColyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i4Ki14Ki+4KiH4Kiw4Kiy4KmI4Ki4IOCopOCpjOCosCDgqKTgqYcg4Kia4Ki+4Kiw4Kic4Ki/4Kmw4KiXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuComuCovuCosOConCDgqKjgqLngqYDgqIIg4Ki54KmLIOCosOCov+CoueCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IuComuCovuCosOConCDgqKjgqLngqYDgqIIg4Ki54KmLIOCosOCov+CoueCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiLgqKrgqYLgqLDgqYAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvYXJyYXlzLnhtbAppbmRleCA4ZGYyNmNkLi4zYjNlOTVkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wbC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJaYXdzemUgdcW8eXdhaiBzcHJhd2R6YW5pYSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ild5xYIuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NsKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0wqBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNsKgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJXecWCLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NMKgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxwqBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IEtCL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTUIvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJXecWCLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NMKgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NsKgS0IvYnVmb3IgZHppZW5uaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjHCoE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0wqBNQi9idWZvciBkemllbm5pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTbCoE1CL2J1Zm9yIGR6aWVubmlrYSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNqYSB3ecWCxIVjem9uYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCAyZWZiNWM5Li4wMTg5ZmFiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJQb3p3YWxhIG5hIHphcGlzIGFwbGlrYWNqaSB3IHBhbWnEmWNpIHpld24uIG5pZXphbGXFvG5pZSBvZCB3YXJ0b8WbY2kgdyBwbGlrdSBtYW5pZmVzdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJXeW11xZsgem1pYW7EmSByb3ptaWFydSBva2llbiBha3R5d25vxZtjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iVW1vxbxsaXdpYSB6bWlhbsSZIHJvem1pYXJ1IHdzenlzdGtpY2ggb2tpZW4gYWt0eXdub8WbY2kgdyB0cnliaWUgd2llbHUgb2tpZW4gbmllemFsZcW8bmllIG9kIHVzdGF3aWXFhCB3IHBsaWt1IG1hbmlmZXN0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJXxYLEhWN6IGRvd29sbnkgcm96bWlhciBva2llbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iV8WCxIVjemEgb2JzxYJ1Z8SZIGVrc3BlcnltZW50YWxuZWogZnVua2NqaSBkb3dvbG5lZ28gcm96bWlhcnUgb2tpZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikhhc8WCbyBrb3BpaSB6YXBhc293ZWoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlBlxYJuZSBrb3BpZSB6YXBhc293ZSBuYSBrb21wdXRlcnplIG5pZSBzxIUgb2JlY25pZSBjaHJvbmlvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iV3liaWVyeiwgYWJ5IHptaWVuacSHIGx1YiB1c3VuxIXEhyBoYXPFgm8gcGXFgm55Y2gga29waWkgemFwYXNvd3ljaCBuYSBrb21wdXRlcnplIHN0YWNqb25hcm55bS4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+Ild5xYLEhWN6b25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iWmF3c3plIHfFgsSFY3pvbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdHljem5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudGFjamEgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJVc3RhdyBpbXBsZW1lbnRhY2rEmSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iUHJ6ZWtzenRhxYLEhyBuYSBzenlmcm93YW5pZSBwbGlrw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJQcnpla3N6dGHFgsSH4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJQbGlraSBzxIUganXFvCB6YXN6eWZyb3dhbmUiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvcmVrY2phIGtvbG9yw7N3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJUbyBqZXN0IGZ1bmtjamEgZWtzcGVyeW1lbnRhbG5hIGkgbW/FvGUgd3DFgnl3YcSHIG5hIGR6aWHFgmFuaWUgdXJ6xIVkemVuaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iTmFkcGlzYW5hIHByemV6IDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyB6b3N0YcWCbyBvay4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyBwZcWCbmVnbyBuYcWCYWRvd2FuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gcGXFgm5lZ28gbmHFgmFkb3dhbmlhIHogZ25pYXpka2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gcGXFgm5lZ28gbmHFgmFkb3dhbmlhIHByemV6IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkbyBwZcWCbmVnbyBuYcWCYWRvd2FuaWEgYmV6cHJ6ZXdvZG93byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik5pZXpuYW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLFgWFkb3dhbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLFgWFkb3dhbmllIHphc2lsYWN6ZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiLFgWFkb3dhbmllIHByemV6IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4ixYFhZC4gYmV6cHJ6ZXdvZG93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJOaWUgcG9kxYLEhWN6b255Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmllIHBvZMWCxIVjem9ueSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJOYcWCYWRvd2FuYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL2FycmF5cy54bWwKaW5kZXggZDhiZTI1MS4uMGQ5NGE2ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yQlIvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJCUi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJTZW1wcmUgdXNhciBhIHZlcmlmaWNhw6fDo28gSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGVzYXRpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNCBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2Sy9idWZmZXIgZGUgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsvYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSy9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYcOnw6NvIGRlc2xpZ2FkYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCmluZGV4IDI4MDE3YTkuLmVlNzAxYTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iUXVhbGlmaWNhIGFwcHMgcC8gZ3JhdmHDp8OjbyBlbSBhcm1hemVuYW1lbnRvIGV4dGVybm8sIGluZGVwZW5kZW50ZW1lbnRlIGRlIHZhbG9yZXMgZGUgbWFuaWZlc3RvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcsOnYXIgYXRpdmlkYWRlcyBhIHNlcmVtIHJlZGltZW5zaW9uw6F2ZWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJUb3JuYSB0b2RhcyBhcyBhdGl2aWRhZGVzIHJlZGltZW5zaW9uw6F2ZWlzIHBhcmEgdsOhcmlhcyBqYW5lbGFzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkbyBtYW5pZmVzdG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQXRpdmFyIGphbmVsYXMgZGUgZm9ybWEgbGl2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkF0aXZhIGEgY29tcGF0aWJpbGlkYWRlIGNvbSBqYW5lbGFzIGRlIGZvcm1hIGxpdnJlIGV4cGVyaW1lbnRhaXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlNlbmhhIGRvIGJhY2t1cCBsb2NhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iT3MgYmFja3VwcyBjb21wbGV0b3MgZG8gY29tcHV0YWRvciBuw6NvIGVzdMOjbyBwcm90ZWdpZG9zIG5vIG1vbWVudG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9xdWUgcGFyYSBhbHRlcmFyIG91IHJlbW92ZXIgYSBzZW5oYSBkZSBiYWNrdXBzIGNvbXBsZXRvcyBkbyBkZXNrdG9wIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEZXNhdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iU2VtcHJlIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23DoXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhw6fDo28gZG8gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJDb25maWd1cmFyIGltcGxlbWVudGHDp8OjbyBkbyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGVyIHBhcmEgY3JpcHRvZ3JhZmlhIGRlIGFycXVpdm9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ0ZXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkrDoSBjcmlwdG9ncmFmYWRvIGNvbSBiYXNlIGVtIGFycXVpdm9zIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJDb3JyZcOnw6NvIGRlIGNvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iRXN0ZSByZWN1cnNvIMOpIGV4cGVyaW1lbnRhbCBlIHBvZGUgYWZldGFyIG8gZGVzZW1wZW5oby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJTdWJzdGl0dcOtZG8gcG9yIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gY2VyY2EgZGUgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHJlc3RhbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIGVtIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGF0w6kgY29uY2x1aXIgc2VtIGZpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkRlc2NvbmhlY2lkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQ2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQ2FycmVnYW1lbnRvIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iQ2FycmVnYW1lbnRvIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkNhcnJlZ2FtZW50byBzZW0gZmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ik7Do28gZXN0w6EgY2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik7Do28gZXN0w6EgY2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJDaGVpbyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtclBUL2FycmF5cy54bWwKaW5kZXggNjkzNDMwYy4uNmU4NGZjZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0LXJQVC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJVdGlsaXphciBzZW1wcmUgYSB2ZXJpZmljYcOnw6NvIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVzYXRpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+Ik1lbS4gaW50LiA2NEsgcCByZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iTWVtLiBpbnQuIDI1NksgcCByZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiJNZW0uIGludC4gMU0gcCByZWcuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+Ik1lbS4gaW50LiA0TSBwIHJlZy4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iTWVtLiBpbnQuIDE2TSBwLiByZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJEZXNhdGl2YWRvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IEsgcG9yIGJ1ZmZlciBkZSByZWdpc3RvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBLIHBvciBidWZmZXIgZGUgcmVnaXN0byI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0gcG9yIGJ1ZmZlciBkZSByZWdpc3RvIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTSBwb3IgYnVmZmVyIGRlIHJlZ2lzdG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTSBwb3IgYnVmZmVyIGRlIHJlZ2lzdG8iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWHDp8OjbyBkZXNhdGl2YWRhIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQtclBUL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKaW5kZXggMmE4NDAyZS4uMmYyNWFlMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJRdWFscXVlciBhcGxpYy4gcG9kZSBzZXIgZ3JhdmFkYSBubyBhcm0uIGV4dC4sIGluZGVwZW5kLiBkb3MgdmFsb3JlcyBkbyBtYW5pZi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJGb3LDp2FyIGFzIGF0aXZpZGFkZXMgYSBzZXJlbSByZWRpbWVuc2lvbsOhdmVpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iVG9ybmEgdG9kYXMgYXMgYXRpdmlkYWRlcyByZWRpbWVuc2lvbsOhdmVpcyBwYXJhIHbDoXJpYXMgamFuZWxhcywgaW5kZXBlbmRlbnRlbWVudGUgZG9zIHZhbG9yZXMgZG8gbWFuaWZlc3RvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkF0aXZhciBqYW5lbGFzIGRlIGZvcm1hIGxpdnJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBdGl2YSBhIGNvbXBhdGliaWxpZGFkZSBjb20gamFuZWxhcyBkZSBmb3JtYSBsaXZyZSBleHBlcmltZW50YWlzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJQYWxhdnJhLXBhc3NlIGPDs3BpYSBkbyBjb21wLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iQXMgY8OzcGlhcyBkZSBzZWd1cmFuw6dhIGNvbXBsZXRhcyBubyBhbWJpZW50ZSBkZSB0cmFiYWxobyBuw6NvIGVzdMOjbyBhdHVhbG1lbnRlIHByb3RlZ2lkYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9xdWUgcGFyYSBhbHRlcmFyIG91IHJlbW92ZXIgYSBwYWxhdnJhLXBhc3NlIHBhcmEgY8OzcGlhcyBkZSBzZWd1cmFuw6dhIGNvbXBsZXRhcyBubyBhbWJpZW50ZSBkZSB0cmFiYWxobyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEZXNhdGl2YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iU2VtcHJlIGF0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23DoXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhw6fDo28gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJEZWZpbmlyIGltcGxlbWVudGHDp8OjbyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iQSBpbXBsZW1lbnRhw6fDo28gV2ViVmlldyBlc2NvbGhpZGEgZm9pIGRlc2F0aXZhZGEgZSB0ZW0gZGUgc2VyIGF0aXZhZGEgcGFyYSBwb2RlciBzZXIgdXRpbGl6YWRhLiBQcmV0ZW5kZSBhdGl2w6EtbGE/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGVyIHBhcmEgYSBlbmNyaXB0YcOnw6NvIGRlIGZpY2hlaXJvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQ29udmVydGVyLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJPcyBmaWNoZWlyb3MgasOhIGVzdMOjbyBlbmNyaXB0YWRvcyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iQ29ycmXDp8OjbyBkYSBjb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkVzdGEgZnVuY2lvbmFsaWRhZGUgw6kgZXhwZXJpbWVudGFsIGUgcG9kZSBhZmV0YXIgbyBkZXNlbXBlbmhvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlN1YnN0aXR1w61kbyBwb3IgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIHJlc3RhKG0pIGFwcm94LiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGF0w6kgZmljYXIgY29tcGxldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYXTDqSBmaWNhciBjb21wbGV0YSBhdHJhdsOpcyBkZSBDQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGZpY2FyIGNvbXBsZXRhIGF0cmF2w6lzIGRlIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYXTDqSBmaWNhciBjb21wbC4gcG9yIHJlZGUgcy8gZmlvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkRlc2NvbmhlY2lkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQSBjYXJyZWdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQSBjYXJyZWdhciBwb3IgQ0EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJBIGNhcnJlZ2FyIHBvciBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkEgY2FycmVnYXIgc2VtIGZpb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTsOjbyBlc3TDoSBhIGNhcnJlZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTsOjbyBlc3TDoSBhIGNhcnJlZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkNvbXBsZXRvIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0L2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0L2FycmF5cy54bWwKaW5kZXggZDhiZTI1MS4uMGQ5NGE2ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iU2VtcHJlIHVzYXIgYSB2ZXJpZmljYcOnw6NvIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkRlc2F0aXZhZG8iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGVzYXRpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0Sy9idWZmZXIgZGUgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NksvYnVmZmVyIGRlIGxvZyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTS9idWZmZXIgZGUgbG9nIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTZNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iRGVzYXRpdmFkbyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsvYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0vYnVmZmVyIGRlIGxvZyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNL2J1ZmZlciBkZSBsb2ciPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWHDp8OjbyBkZXNsaWdhZGEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggMjgwMTdhOS4uZWU3MDFhNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iUXVhbGlmaWNhIGFwcHMgcC8gZ3JhdmHDp8OjbyBlbSBhcm1hemVuYW1lbnRvIGV4dGVybm8sIGluZGVwZW5kZW50ZW1lbnRlIGRlIHZhbG9yZXMgZGUgbWFuaWZlc3RvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZvcsOnYXIgYXRpdmlkYWRlcyBhIHNlcmVtIHJlZGltZW5zaW9uw6F2ZWlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJUb3JuYSB0b2RhcyBhcyBhdGl2aWRhZGVzIHJlZGltZW5zaW9uw6F2ZWlzIHBhcmEgdsOhcmlhcyBqYW5lbGFzLCBpbmRlcGVuZGVudGVtZW50ZSBkb3MgdmFsb3JlcyBkbyBtYW5pZmVzdG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQXRpdmFyIGphbmVsYXMgZGUgZm9ybWEgbGl2cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkF0aXZhIGEgY29tcGF0aWJpbGlkYWRlIGNvbSBqYW5lbGFzIGRlIGZvcm1hIGxpdnJlIGV4cGVyaW1lbnRhaXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlNlbmhhIGRvIGJhY2t1cCBsb2NhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iT3MgYmFja3VwcyBjb21wbGV0b3MgZG8gY29tcHV0YWRvciBuw6NvIGVzdMOjbyBwcm90ZWdpZG9zIG5vIG1vbWVudG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iVG9xdWUgcGFyYSBhbHRlcmFyIG91IHJlbW92ZXIgYSBzZW5oYSBkZSBiYWNrdXBzIGNvbXBsZXRvcyBkbyBkZXNrdG9wIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJEZXNhdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iU2VtcHJlIGF0aXZhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b23DoXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJbXBsZW1lbnRhw6fDo28gZG8gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJDb25maWd1cmFyIGltcGxlbWVudGHDp8OjbyBkbyBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ29udmVydGVyIHBhcmEgY3JpcHRvZ3JhZmlhIGRlIGFycXVpdm9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiJDb252ZXJ0ZXIuLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkrDoSBjcmlwdG9ncmFmYWRvIGNvbSBiYXNlIGVtIGFycXVpdm9zIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJDb3JyZcOnw6NvIGRlIGNvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iRXN0ZSByZWN1cnNvIMOpIGV4cGVyaW1lbnRhbCBlIHBvZGUgYWZldGFyIG8gZGVzZW1wZW5oby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJTdWJzdGl0dcOtZG8gcG9yIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gY2VyY2EgZGUgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHJlc3RhbnRlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIGVtIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhdMOpIGNvbmNsdWlyIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGF0w6kgY29uY2x1aXIgc2VtIGZpbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkRlc2NvbmhlY2lkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iQ2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQ2FycmVnYW1lbnRvIENBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iQ2FycmVnYW1lbnRvIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkNhcnJlZ2FtZW50byBzZW0gZmlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ik7Do28gZXN0w6EgY2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik7Do28gZXN0w6EgY2FycmVnYW5kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJDaGVpbyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1yby9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1yby9hcnJheXMueG1sCmluZGV4IGY3NTE1NGYuLjE0MWY4NzcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJvL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlV0aWxpemVhesSDIMOubnRvdGRlYXVuYSB2ZXJpZmljYXJlYSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iRGV6YWN0aXZhdMSDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iRGV6YWN0aXZhdMSDIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLL3RhbXBvbiBqdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2Sy90YW1wb24ganVybmFsIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjFNL3RhbXBvbiBqdXJuYWwiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0vdGFtcG9uIGp1cm5hbCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0vdGFtcG9uIGp1cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJEZXphY3RpdmF0xIMiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgS0Ivem9uxIMtdGFtcG9uIGRlIMOubnJlZ2lzdHLEg3JpIMOubiBqdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEtCL3pvbsSDLXRhbXBvbiBkZSDDrm5yZWdpc3RyxINyaSDDrm4ganVybmFsIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTUIvem9uxIMtdGFtcG9uIGRlIMOubnJlZ2lzdHLEg3JpIMOubiBqdXJuYWwiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNQi96b27Egy10YW1wb24gZGUgw65ucmVnaXN0csSDcmkgw65uIGp1cm5hbCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNQi96b27Egy10YW1wb24gZGUgw65ucmVnaXN0csSDcmkgw65uIGp1cm5hbCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYcibaWUgZGV6YWN0aXZhdMSDIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCmluZGV4IGM0NWVkZTUuLjI5ZDg3OGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkZhY2Ugb3JpY2UgYXBsaWNhyJtpZSBlbGlnaWJpbMSDIHPEgyBmaWUgc2NyaXPEgyDDrm4gc3RvY2FyZWEgZXh0ZXJuxIMsIGluZGlmZXJlbnQgZGUgdmFsb3JpbGUgbWFuaWZlc3R1bHVpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iRm9yyJthyJtpIHJlZGltZW5zaW9uYXJlYSBhY3Rpdml0xIPIm2lsb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlBlcm1pdGUgcmVkaW1lbnNpb25hcmVhIHR1dHVyb3IgYWN0aXZpdMSDyJtpbG9yIHBlbnRydSBtb2R1bCBjdSBmZXJlc3RyZSBtdWx0aXBsZSwgaW5kaWZlcmVudCBkZSB2YWxvcmlsZSBtYW5pZmVzdHVsdWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4iQWN0aXZhyJtpIGZlcmVzdHJlbGUgY3UgZm9ybcSDIGxpYmVyxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkFjdGl2ZWF6xIMgY29tcGF0aWJpbGl0YXRlYSBwZW50cnUgZmVyZXN0cmVsZSBleHBlcmltZW50YWxlIGN1IGZvcm3EgyBsaWJlcsSDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJQYXJvbMSDIGNvcGllIHJlei4gZGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iw45uIHByZXplbnQsIGNvcGlpbGUgZGUgcmV6ZXJ2xIMgY29tcGxldGUgcGUgZGVza3RvcCBudSBzdW50IHByb3RlamF0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJBdGluZ2XFo2kgcGVudHJ1IGEgbW9kaWZpY2Egc2F1IHBlbnRydSBhIGVsaW1pbmEgcGFyb2xhIHBlbnRydSBjb3BpaWxlIGRlIHJlemVydsSDIGNvbXBsZXRlIHBlIGRlc2t0b3AiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IkRlemFjdGl2YXTEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkFjdGl2YXTEgyBwZXJtYW5lbnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iQXV0b21hdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudGFyZSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlNldGHIm2kgaW1wbGVtZW50YXJlYSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iRmFjZcibaSBjb252ZXJzaWEgbGEgY3JpcHRhcmVhIGJhemF0xIMgcGUgc2lzdGVtdWwgZGUgZmnImWllcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IkNvbnZlcnRpyJtp4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJDcmlwdGFyZWEgYmF6YXTEgyBwZSBzaXN0ZW11bCBkZSBmaciZaWVyZSBlc3RlIGZpbmFsaXphdMSDIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJDb3JlY8ibaWEgY3Vsb3JpaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iQWNlYXN0xIMgZnVuY8ibaWUgZXN0ZSBleHBlcmltZW50YWzEgyDImWkgcG9hdGUgYWZlY3RhIHBlcmZvcm1hbsibZWxlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IlZhbG9hcmUgw65ubG9jdWl0xIMgZGUgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIHRpbXAgcsSDbWFzOiBhcHJveGltYXRpdiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcMOibsSDIGxhIMOubmPEg3JjYXJlIGNvbXBsZXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcMOibsSDIGxhIMOubmPEg3JjYXJlIGNvbXBsZXTEgyBsYSBjLmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBww6JuxIMgbGEgw65uY8SDcmNhcmUgY29tcGxldMSDIHByaW4gVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBww6JuxIMgbGEgw65uY8SDcmNhcmUgY29tcGxldMSDIHdpcmVsZXNzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iTmVjdW5vc2N1dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iw45uY2FyY8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJTZSDDrm5jYXJjxIMgbGEgQy5BLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlNlIMOubmNhcmPEgyBwcmluIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iU2Ugw65uY2FyY8SDIGbEg3LEgyBmaXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTnUgc2Ugw65uY2FyY8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTnUgw65uY2FyY8SDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IkNvbXBsZXQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcnUvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcnUvYXJyYXlzLnhtbAppbmRleCBjOGM3ODllLi43ODk2NWFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ydS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLQktGB0LXQs9C00LAg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC/0YDQvtCy0LXRgNC60YMgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0wqDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2wqDQmtCRIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjHCoNCc0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNMKg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNsKg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLQktGL0LrQuy4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjTCoNCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTbCoNCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMcKg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjTCoNCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTbCoNCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NMKg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTbCoNCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMcKg0JzQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLQktGL0LrQuy4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjTCoNCa0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2wqDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjHCoNCc0JEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gNjTCoNCa0JEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDI1NsKg0JrQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMcKg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gNMKg0JzQkSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMTbCoNCc0JEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i0JLRi9C60LsuIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+ItCR0YPRhNC10YA6INC80LDQutGBLiA2NMKg0JrQkSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMjU2wqDQmtCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+ItCR0YPRhNC10YA6INC80LDQutGBLiAxwqDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+ItCR0YPRhNC10YA6INC80LDQutGBLiA0wqDQnNCRIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+ItCR0YPRhNC10YA6INC80LDQutGBLiAxNsKg0JzQkSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLQkdC10Lcg0LDQvdC40LzQsNGG0LjQuCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCAzYzMwYjI2Li5iYTIxZDNlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQoNCw0LfRgNC10YjQsNC10YIg0YHQvtGF0YDQsNC90LXQvdC40LUg0L/RgNC40LvQvtC20LXQvdC40Lkg0L3QsCDQstC90LXRiNC90LjQtSDQvdCw0LrQvtC/0LjRgtC10LvQuCDQvdC10LfQsNCy0LjRgdC40LzQviDQvtGCINC30L3QsNGH0LXQvdC40Y8g0LzQsNC90LjRhNC10YHRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i0JjQt9C80LXQvdC10L3QuNC1INGA0LDQt9C80LXRgNCwINCyINC80L3QvtCz0L7QvtC60L7QvdC90L7QvCDRgNC10LbQuNC80LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+ItCf0L7Qt9Cy0L7Qu9GP0LXRgiDQvNC10L3Rj9GC0Ywg0YDQsNC30LzQtdGAINCyINC80L3QvtCz0L7QvtC60L7QvdC90L7QvCDRgNC10LbQuNC80LUgKNC90LXQt9Cw0LLQuNGB0LjQvNC+INC+0YIg0LfQvdCw0YfQtdC90LjQuSDQvNCw0L3QuNGE0LXRgdGC0LApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i0KDQsNC30YDQtdGI0LjRgtGMINGB0L7Qt9C00LDQvdC40LUg0L7QutC+0L0g0L/RgNC+0LjQt9Cy0L7Qu9GM0L3QvtC5INGE0L7RgNC80YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+ItCS0LrQu9GO0YfQuNGC0Ywg0Y3QutGB0L/QtdGA0LjQvNC10L3RgtCw0LvRjNC90YPRjiDRhNGD0L3QutGG0LjRjiDRgdC+0LfQtNCw0L3QuNGPINC+0LrQvtC9INC/0YDQvtC40LfQstC+0LvRjNC90L7QuSDRhNC+0YDQvNGLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+ItCf0LDRgNC+0LvRjCDQtNC70Y8g0YDQtdC30LXRgNCy0L3QvtCz0L4g0LrQvtC/0LjRgNC+0LLQsNC90LjRjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0J/QvtC70L3Ri9C1INGA0LXQt9C10YDQstC90YvQtSDQutC+0L/QuNC4INCyINC90LDRgdGC0L7Rj9GJ0LXQtSDQstGA0LXQvNGPINC90LUg0LfQsNGJ0LjRidC10L3RiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQmNC30LzQtdC90LjRgtGMINC40LvQuCDRg9C00LDQu9C40YLRjCDQv9Cw0YDQvtC70Ywg0LTQu9GPINGA0LXQt9C10YDQstC90L7Qs9C+INC60L7Qv9C40YDQvtCy0LDQvdC40Y8iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+ItCe0YLQutC70Y7Rh9C10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+ItCS0YHQtdCz0LTQsCDQstC60LvRjtGH0LXQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+ItCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i0KHQtdGA0LLQuNGBIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i0J3QsNGB0YLRgNC+0LnQutC4INGB0LXRgNCy0LjRgdCwIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLQn9C10YDQtdGF0L7QtCDQuiDRiNC40YTRgNC+0LLQsNC90LjRjiDRhNCw0LnQu9C+0LIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+ItCf0LXRgNC10LnRgtC44oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLQqNC40YTRgNC+0LLQsNC90LjQtSDRhNCw0LnQu9C+0LIg0YPQttC1INCy0LrQu9GO0YfQtdC90L4iPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+ItCa0L7RgNGA0LXQutGG0LjRjyDRhtCy0LXRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLQrdGC0L4g0Y3QutGB0L/QtdGA0LjQvNC10L3RgtCw0LvRjNC90LDRjyDRhNGD0L3QutGG0LjRjywg0L7QvdCwINC80L7QttC10YIg0YHQvdC40LfQuNGC0Ywg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtGMINGD0YHRgtGA0L7QudGB0YLQstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+ItCd0L7QstCw0Y8g0L3QsNGB0YLRgNC+0LnQutCwOiA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPsKg4oCTINC+0YHRgtCw0LvQvtGB0Ywg0L7QutC+0LvQviA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDQv9C+0LvQvdC+0Lkg0LfQsNGA0Y/QtNC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+wqDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/QvtC70L3QvtC5INC30LDRgNGP0LTQutC4ICjQvtGCINGB0LXRgtC4KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDQv9C+0LvQvdC+0Lkg0LfQsNGA0Y/QtNC60LggKNGH0LXRgNC10LcgVVNCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7CoOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDQv9C+0LvQvdC+0Lkg0LfQsNGA0Y/QtNC60LggKNCx0LXRgdC/0YDQvtCy0L7QtNC90LDRjykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLQndC10LjQt9Cy0LXRgdGC0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i0JjQtNC10YIg0LfQsNGA0Y/QtNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+ItCX0LDRgNGP0LTQutCwINC+0YIg0YHQtdGC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiLQl9Cw0YDRj9C00LrQsCDRh9C10YDQtdC3IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i0JHQtdGB0L/RgNC+0LLQvtC00L3QsNGPINC30LDRgNGP0LTQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+ItCd0LUg0LfQsNGA0Y/QttCw0LXRgtGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQndC1INC30LDRgNGP0LbQsNC10YLRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItCR0LDRgtCw0YDQtdGPINC30LDRgNGP0LbQtdC90LAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9hcnJheXMueG1sCmluZGV4IDU2NGVjZWUuLmFiMzBlNDUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2ktckxLL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zaS1yTEsvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4LeD4LeQ4La44LeA4LeS4Lan4La4IEhEQ1Ag4La04LeS4La74LeS4Laa4LeK4LeD4LeU4La4IOC2t+C3j+C3gOC3kuC2reC3jyDgtprgtrvgtrHgt4rgtrEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5Lgtrvgt4Tgt5Lgtq3gtroiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C3gOC3kuC2u+C3hOC3kuC2reC2uiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgtr3gt5zgtpwg4LaF4Lax4LeK4Lat4La74LeP4LeA4Laa4LanIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4Laa4LeK4oCN4La74LeS4La64LeP4LeA4LeS4La74LeE4LeS4Lat4La6IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLgtr3gt5zgtpwg4LaF4Lax4LeK4Lat4La74LeP4LeA4Laa4LanIDFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IuC2veC3nOC2nCDgtoXgtrHgt4rgtq3gtrvgt4/gt4DgtprgtqcgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i4La94Lec4LacIOC2heC2seC3iuC2reC2u+C3j+C3gOC2muC2pyAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i4LeD4Lai4LeS4LeA4LeS4Laa4La74Lar4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgt5Lgtrvgt5PgtrgiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAppbmRleCAxZmZkODQwLi4wZjMyYTBjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuC2uOC3kOC2seC3kuC3huC3meC3g+C3iuC2p+C3iiDgtoXgtpzgtrrgtrHgt4og4Lax4Lec4LeD4La94Laa4LePLCDgtpXgtrHgt5Hgtrgg4La64LeZ4Lav4LeU4La44Laa4LeKIOC2heC2t+C3iuKAjeC2uuC2seC3iuC2reC2uyDgtpzgtrbgtqngt4/gt4Dgtqcg4La94LeS4LeA4LeT4La44LanIOC3g+C3lOC2r+C3lOC3g+C3lOC2muC2uOC3iiDgtr3gtrbgt48g4Lav4LeZ4La64LeSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74Laa4La44LeKIOC2tOC3iuKAjeC2u+C2reC3kuC2tOC3iuKAjeC2u+C2uOC3j+C2qyDgtprgt4Ug4LeE4LeQ4Laa4LeSIOC2tuC3gOC2pyDgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgtrjgt5DgtrHgt5Lgt4bgt5ngt4Pgt4rgtqfgt4og4LaF4Lac4La64Lax4LeKIOC2seC3nOC3g+C2veC2muC3jywg4LeD4LeS4La64La94LeUIOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C2muC2uOC3iiDgtrbgt4Tgt5Qt4Laa4LeA4LeU4LeF4LeUIOC3g+C2s+C3hOC3jyDgtrTgt4rigI3gtrvgtq3gt5LgtrTgt4rigI3gtrvgtrjgt4/gtqsg4Laa4LeFIOC3hOC3kOC2muC3kiDgtrbgt4Dgtqcg4La04Lat4LeKIOC2muC2u+C2uuC3ki4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgtoXgtrHgt5Lgtrrgtrjgt4og4LeE4LeQ4Lap4LeQ4Lat4LeSIOC2muC3gOC3lOC3heC3lCDgt4Pgtrbgtr0g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgt4/gtq3gt4rgtrjgtpog4LaF4Lax4LeS4La64La44LeKIOC3hOC3kOC2qeC3kOC2reC3kiDgtprgt4Dgt5Tgt4Xgt5Qg4LeD4Laz4LeE4LePIOC3g+C3hOC3j+C2uiDgt4Pgtrbgtr0g4Laa4La74La64LeSLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgtqngt5ngt4Pgt4rgtprgt4rgtqfgt5zgtrTgt4og4LaL4La04LeD4LeK4LauIOC2uOC3lOC2u+C2tOC2r+C2uiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4Lap4LeZ4LeD4LeK4Laa4LeK4Lan4Lec4La04LeKIOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgtovgtrTgt4Pgt4rgtq4g4Lav4LeQ4Lax4LanIOC2huC2u+C2muC3iuC3guC3jyDgtprgtrsg4Lax4Lec4La44LeQ4LatIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuC2qeC3meC3g+C3iuC2muC3iuC2p+C3nOC2tOC3iiDgt4Pgtrjgt4rgtrTgt5bgtrvgt4rgtqsg4LaL4La04LeD4LeK4LauIOC3g+C2s+C3hOC3jyDgtrjgt5TgtrvgtrTgtq/gtrog4LeA4LeZ4Lax4LeD4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Tgt50g4LaJ4LeA4Lat4LeKIOC2muC3kuC2u+C3k+C2uOC2pyDgt4Pgt4rgtrTgtrvgt4rgt4Eg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLgtoXgtrbgtr3gtrrgt5IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgt4Pgt5Dgtrjgt4Dgt5Lgtqcg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuC3g+C3iuC3gOC2uuC2guC2muC3iuKAjeC2u+C3k+C2uiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4Laa4LeK4oCN4La74LeS4La64LeP4Lat4LeK4La44LaaIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWJWaWV3IOC2muC3iuKAjeC2u+C3kuC2uuC3j+C2reC3iuC2uOC2miDgtprgt5Lgtrvgt5Pgtrgg4LeD4Laa4LeD4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4Lac4Lec4Lax4LeUIOC3g+C2guC2muC3muC2reC2seC2uuC2pyDgtrTgtrvgt5Lgt4Dgtrvgt4rgtq3gtrHgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLgtrTgtrvgt5Lgt4Dgtrvgt4rgtq3gtrHgtrog4Laa4La74Lax4LeK4LaxLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLgtq/gt5DgtrHgtqfgtrjgtq3gt4og4Lac4Lec4Lax4LeU4LeAIOC3g+C2guC2muC3muC2reC2seC2uiDgtprgtrsg4LaH4LatIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgt4Dgtrvgt4rgtqsg4Lax4LeS4LeA4LeQ4La74Lav4LeSIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i4La44LeZ4La4IOC3gOC3kuC3geC3muC3guC3j+C2guC2nOC2uiDgtrTgtrvgt5Pgtprgt4rgt4Lgtqvgt4/gtq3gt4rgtrjgtpog4LeD4LeEIOC2h+C2reC3kOC2uOC3iiDgt4Dgt5Lgtqcg4Laa4LeK4oCN4La74LeS4La64LeP4Laa4LeP4La74LeS4Lat4LeK4LeA4La64LanIOC2tuC2veC2tOC3kSDgt4Tgt5DgtpouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgtrjgtpzgt5LgtrHgt4og4LaJ4Laa4LeK4La44LeA4LaxIOC2veC2r+C3kyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDgtobgt4PgtrHgt4rgtrEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC3gOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDgt4Pgtrjgt4rgtrTgt5Tgtrvgt4rgtqsg4LeA4LaxIOC2reC3meC2muC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+IkFDIOC3hOC3kiA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC3g+C2uOC3iuC2tOC3lOC2u+C3iuC2qyDgt4DgtrEg4Lat4LeZ4Laa4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iVVNCIOC3hOC2u+C3hCA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC3g+C2uOC3iuC2tOC3lOC2u+C3iuC2qyDgt4DgtrEg4Lat4LeZ4Laa4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4i4La74Lea4Lap4LeS4La64Led4LeAIOC3gOC3meC2reC3kuC2seC3iiA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC3g+C2uOC3iuC2tOC3luC2u+C3iuC2qyDgt4DgtrEg4Lat4LeZ4Laa4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i4Lax4Lec4Lav4Lax4LeTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJBQyDgt4Tgt5Ig4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDgt4Tgtrvgt4Tgt48g4LaG4La74Led4La04Lar4La6IOC3gOC3meC2uOC3kuC2seC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i4La74LeQ4LeE4LeQ4Lax4LeKIOC2u+C3hOC3kuC2reC3gCDgtobgtrvgt53gtrTgtqvgtrog4LeA4LeZ4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuC2huC2u+C3neC2tOC2q+C2uiDgtrHgt5zgt4Dgt5oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLgtobgtrvgt53gtrTgtqvgtrog4Lax4Lec4LeA4LeZ4La44LeS4Lax4LeKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuC2tOC3luC2u+C3iuC2qyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9hcnJheXMueG1sCmluZGV4IGVjMzNlNjMuLjlhNTZlNzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2svYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlbFvmR5IHBvdcW+w612YcWlIGtvbnRyb2x1IEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxIE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iVnlwbnV0w6kiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJWeXBudXTDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCBrQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNQiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0IGtCIG5hIHZ5cm92bi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTUIgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjQgTUIgbmEgdnlyb3ZuLiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CIG5hIHZ5cm92bi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJWeXBudXTDqSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQiBuYSB2eXJvdi4gcGFtw6TFpSBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYga0IgbmEgdnlyb3YuIHBhbcOkxaUgZGVubsOta2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiBuYSB2eXJvdi4gcGFtLiBkZW5uw61rYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CIG5hIHZ5cm92LiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CIG5hIHZ5cm92LiBwYW3DpMWlIGRlbm7DrWthIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW3DoWNpYSBqZSB2eXBudXTDoSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCA5Yjg1MWI5Li44ZGYwMmVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJVbW/FvsWIdWplIHphcMOtc2HFpSBha8O6a2/EvnZlayBhcGxpa8OhY2l1IGRvIGV4dGVybsOpaG8gw7psb8W+aXNrYSBiZXogb2jEvmFkdSBuYSBob2Rub3R5IHYgbWFuaWZlc3RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVnluw7p0acWlIG1vxb5ub3PFpSB6bWVueSB2ZcS+a29zdGkgYWt0aXbDrXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IlZlxL5rb3N0aSB2xaFldGvDvWNoIGFrdGl2w610IGJ1ZGUgbW/Fvm7DqSB6bWVuacWlIG5hIG5pZWtvxL5rbyBva2llbiAoYmV6IG9oxL5hZHUgbmEgaG9kbm90eSBtYW5pZmVzdHUpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IlBvdm9sacWlIG9rbsOhIHPCoHZvxL5uw71tIHR2YXJvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iUG92b2xlbmllIHBvZHBvcnkgcHJlIGV4cGVyaW1lbnTDoWxuZSBva27DoSBzwqB2b8S+bsO9bSB0dmFyb20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikhlc2xvIHByZSB6w6Fsb2h5IHbCoHBvxI3DrXRhxI1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLDmnBsbsOpIHrDoWxvaHkgbmEgcG/EjcOtdGHEjWkgbmllIHPDuiBtb21lbnTDoWxuZSBjaHLDoW5lbsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IkRvdHlrb20gem1lbsOtdGUgYWxlYm8gb2RzdHLDoW5pdGUgaGVzbG8gcHJlIMO6cGxuw6kgesOhbG9oeSBkbyBwb8SNw610YcSNYSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiJWeXBudXTDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IlbFvmR5IHphcG51dMOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRpY2vDvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IkltcGxlbWVudMOhY2lhIGtvbXBvbmVudGEgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJOYXN0YXZlbmllIGltcGxlbWVudMOhY2llIGtvbXBvbmVudGEgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+Ilp2b2xlbsOhIGltcGxlbWVudMOhY2lhIHRlY2hub2zDs2dpZSBXZWJWaWV3IGplIHpha8OhemFuw6EuIEFrIGp1IGNoY2V0ZSBwb3XFvmnFpSwgbXVzw610ZSBqdSBuYWpwcnYgcG92b2xpxaUuIENoY2V0ZSBqdSBwb3ZvbGnFpT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJLb252ZXJ0b3ZhxaUgbmEgxaFpZnJvdmFuaWUgc8O6Ym9yb3YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IktvbnZlcnRvdmHFpeKApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iU8O6Ym9yeSBzw7ogdcW+IMWhaWZyb3ZhbsOpIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLDmnByYXZhIGZhcmllYiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iRnVua2NpYSBqZSBleHBlcmltZW50w6FsbmEgYcKgbcO0xb5lIG1hxaUgdnBseXYgbmEgdsO9a29ubm9zxaUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iUHJla29uYW7DqSBwcmVkdm/EvmJvdSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgem9zdMOhdmEgcHJpYmxpxb5uZSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIMO6cGxuw6lobyBuYWJpdGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIMO6cGxuw6lobyBuYWJpdGlhIHpvIHrDoXN1dmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIMO6cGxuw6lobyBuYWJpdGlhIGNleiBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gw7pwbG7DqWhvIG5hYml0aWEgYmV6ZHLDtHRvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJOZXpuw6FtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4iTmFiw61qYW5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iTmFiw61qYW5pZSB6byB6w6FzdXZreSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Ik5hYsOtamFuaWUgY2V6IFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iQmV6ZHLDtHRvdsOpIG5hYsOtamFuaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTmVuYWLDrWphIHNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTmVuYWLDrWphIHNhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Ik5hYml0w6EiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2wvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2wvYXJyYXlzLnhtbAppbmRleCAyNTNmMTEzLi4xMWIyYmFiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zbC9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJWZWRubyB1cG9yYWJpIHByZXZlcmphbmplIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ikl6a2xvcGxqZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+Ikl6a2xvcGxqZW5vIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSy9tZWRwb20uIGRuZXZuLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYgSy9tZWRwb20uIGRuZXYuIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTS9tZWRwb20uIGRuZXZuLiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0vbWVkcG9tLiBkbmV2bi4iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTS9tZWRwb20uIGRuZXZuLiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJJemtsb3BsamVubyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBLL21lZHBvbW5pbG5payBkbmV2bmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYgSy9tZWRwb21uaWxuaWsgZG5ldm5pa2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNL21lZHBvbW5pbG5payBkbmV2bmlrYSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE0vbWVkcG9tbmlsbmlrIGRuZXZuaWthIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE0vbWVkcG9tbmlsbmlrIGRuZXZuaWthIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hY2lqYSBqZSBpemtsanXEjWVuYSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCAwNDkxOGUwLi41ZDQ3YWY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJQb3NrcmJpLCBkYSBqZSBuZSBnbGVkZSBuYSB2cmVkbm9zdGkgdiBtYW5pZmVzdHUgbW9nb8SNZSB2c2FrbyBhcGxpa2FjaWpvIHphcGlzYXRpIHYgenVuYW5qbyBzaHJhbWJvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iVnNpbGkgcG92ZcSNYW5qZSB2ZWxpa29zdGkgemEgYWt0aXZub3N0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iUG9za3JiaSwgZGEgamUgbmUgZ2xlZGUgbmEgdnJlZG5vc3RpIHYgbWFuaWZlc3R1IG1vZ2/EjWUgdnNlbSBha3Rpdm5vc3RpbSBwb3ZlxI1hdGkgdmVsaWtvc3QgemEgbmHEjWluIHogdmXEjSBva25pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik9tb2dvxI1hbmplIG9rZW4gc3ZvYm9kbmUgb2JsaWtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJPbW9nb8SNYW5qZSBwb2Rwb3JlIHphIHBvc2t1c25hIG9rbmEgc3ZvYm9kbmUgb2JsaWtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ikdlc2xvIHphIHZhcm4uIGtvcC4gcmHEjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlBvcG9sbmUgdmFybm9zdG5lIGtvcGlqZSBuYW1pemphIHRyZW51dG5vIG5pc28gemHFocSNaXRlbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iRG90YWtuaXRlIHNlLCDEjWUgxb5lbGl0ZSBzcHJlbWVuaXRpIGFsaSBvZHN0cmFuaXRpIGdlc2xvIHphIHBvcG9sbm8gdmFybm9zdG5vIGtvcGlyYW5qZSBuYW1pemphLiI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iT25lbW9nb8SNZW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iVmVkbm8gdmtsb3BsamVubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJTYW1vZGVqbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJJenZlZGJhIHNwbGV0bmVnYSBwb2dsZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+Ik5hc3Rhdml0ZXYgaXp2ZWRiZSBzcGxldG5lZ2EgcG9nbGVkYSI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IlByZWtsb3AgbmEgxaFpZnJpcmFuamUgcG9kYXRrb3YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IlByZWtsb3Ag4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLFoGlmcmlyYW5qZSBwb2RhdGtvdiBqZSDFvmUgdXZlbGphdmxqZW5vIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJQb3ByYXZsamFuamUgYmFydiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iVG8gamUgcHJlc2t1c25hIGZ1bmtjaWphIGluIGxhaGtvIHZwbGl2YSBuYSB1xI1pbmtvdml0b3N0IGRlbG92YW5qYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJQcmVnbGFzaWxhIG5hc3Rhdml0ZXY6IDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyDFoWUgcHJpYmxpxb5ubyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIG5hcG9sbmplbm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gbmFwb2xuamVub3N0aSBwcmVrIG5hcGFqYWxuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRvIG5hcG9sbmplbm9zdGkgcHJlayBVU0ItamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZG8gbmFwb2xuamVub3N0aSBwcmVrIGJyZXrFvi4gcG9sLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik5lem5hbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IlBvbG5qZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iUG9sbmouIHByZWsgaXouIHRva2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJQb2xuai4gcHJlayBVU0ItamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkJyZXrFvmnEjW5vIHBvbG5qZW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJTZSBuZSBwb2xuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IlNlIG5lIHBvbG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IlBvbG4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9hcnJheXMueG1sCmluZGV4IDc0NzNmMTYuLjBmMGVmYjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3EtckFML2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zcS1yQUwvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4iUMOrcmRvciBnaml0aG1vbsOrIGtvbnRyb2xsaW4gZSBIRENQLXPDqyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkpvYWt0aXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgbWlqw6siPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgbWlqw6siPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBtaWxpb24iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IG1pbGlvbsOrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IG1pbGlvbsOrIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkpvYWt0aXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgbWlqw6siPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IG1pasOrIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgbWlsaW9uIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgbWlqw6sgLyBtZW1vcmllIHJlZ2ppc3RyaW1pIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IjI1NksgcMOrciDDp2RvIG1lbW9yaWUgdMOrIHDDq3Jrb2hzaG1lIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTSBww6tyIG1lbW9yaWVuIGUgcmVnamlzdHJpdCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE0gcMOrciBtZW1vcmllbiBlIHJlZ2ppc3RyaXQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iMTYgTSBww6tyIG1lbW9yaWVuIGUgcmVnamlzdHJpdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJKb2FrdGl2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IG1pasOrL21lbW9yaWUgcmVnamlzdHJpbWkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IG1pasOrL21lbW9yaWUgcmVnamlzdHJpbWkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBtaWxpb24vbWVtb3JpZSByZWdqaXN0cmltaSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IG1pbGlvbsOrL21lbW9yaWUgcmVnamlzdHJpbWkiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgbWlsaW9uw6svbWVtb3JpZSByZWdqaXN0cmltaSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiJBbmltYWNpb25pIMOrc2h0w6sgaSDDp2FrdGl2aXp1YXIiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAppbmRleCAzYmM3NjljLi44ZTgxMTJmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNxLXJBTC9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IkLDq24gccOrIMOnZG8gYXBsaWthY2lvbiB0w6sgamV0w6sgaSBww6tyc2h0YXRzaMOrbSBww6tyIHRcJ3Ugc2hrcnVhciBuw6sgaGFww6tzaXLDq24gcnVhanTDq3NlIHTDqyBqYXNodG1lLCBwYXZhcsOrc2lzaHQgbmdhIHZsZXJhdCBlIG1hbmlmZXN0aXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJEZXR5cm8gbWFkaMOrc2luw6sgZSBuZHJ5c2h1ZXNobWUgcMOrciBha3Rpdml0ZXRldCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iQsOrbiBxw6sgdMOrIGdqaXRoYSBha3Rpdml0ZXRldCB0w6sga2Vuw6sgbWFkaMOrc2kgdMOrIG5kcnlzaHVlc2htZSBww6tyIHDDq3Jkb3JpbWluIG1lIHNodW3DqyBkcml0YXJlLCBwYXZhcsOrc2lzaHQgdmxlcmF2ZSB0w6sgbWFuaWZlc3RpdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJBa3Rpdml6byBkcml0YXJldCBtZSBmb3Jtw6sgdMOrIGxpcsOrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJBa3Rpdml6b24gbWLDq3NodGV0amVuIHDDq3IgZHJpdGFyZXQgZWtzcGVyaW1lbnRhbGUgbWUgZm9ybcOrIHTDqyBsaXLDqy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iRmphbMOra2FsaW1pIHJlemVydsOrIGkga29tcGp1dGVyaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IlJlemVydmltZXQgZSBwbG90YSBuw6sga29tcGp1dGVyIG51ayBqYW7DqyB0w6sgbWJyb2p0dXJhIGFrdHVhbGlzaHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iUHJlayBww6tyIHTDqyBuZHJ5c2h1YXIgb3NlIGhlcXVyIGZqYWzDq2thbGltaW4gcMOrciByZXplcnZpbWUgdMOrIHBsb3RhIHTDqyBkZXNrdG9waXQiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IsOHYWt0aXZpenVhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkdqaXRobW9uw6sgYWt0aXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRpa2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJaYmF0aW1pIGkgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJDYWt0byB6YmF0aW1pbiBlIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJLb252ZXJ0byBuw6sgZW5rcmlwdGltaW4gZSBza2VkYXJpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iS29udmVydG8uLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkVua3JpcHRpbWkgaSBza2VkYXJpdCDDq3NodMOrIGtyeWVyIHRhc2htw6siPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IktvcnJpZ2ppbWkgaSBuZ2p5csOrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iS3kgZnVua3Npb24gw6tzaHTDqyBla3NwZXJpbWVudGFsIGRoZSBtdW5kIHTDqyBuZGlrb2rDqyBuw6sgdmVwcmltdGFyaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJNYml2ZW5kb3N1ciBuZ2EgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBhZsOrcnNpc2h0IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0w6sgbWJldHVyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkZXJpc2EgdMOrIGpldMOrIGUgcGxvdMOrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBkZXJpIHNhIHTDqyBtYnVzaGV0IG7DqyBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZGVyaSBzYSB0w6sgbWJ1c2hldCBtZSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGRlcmkgc2EgdMOrIG1idXNoZXQgbmdhIGxpZGhqYSBwYSB0ZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJJIHBhbmpvaHVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJQbyBuZ2Fya29oZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IlBvIG5nYXJrb2hldCBuw6sgQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJQbyBuZ2Fya29oZXQgbWUgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJQbyBuZ2Fya29oZXQgbWUgdmFsw6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4iTnVrIHBvIG5nYXJrb2hldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+Ik51ayBwbyBuZ2Fya29oZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRSBtYnVzaHVyIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL2FycmF5cy54bWwKaW5kZXggY2Q0NGUxNS4uMjM4OTMzOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zci9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3IvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i0KPQstC10Log0LrQvtGA0LjRgdGC0LggSERDUCDQv9GA0L7QstC10YDRgyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLQmNGB0LrRmdGD0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBrQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiLQmNGB0LrRmdGD0YfQtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrQiDQv9C+INCx0LDRhNC10YDRgyDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0Ig0L/QviDQsdCw0YTQtdGA0YMg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQiDQv9C+INCx0LDRhNC10YDRgyDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE1CINC/0L4g0LHQsNGE0LXRgNGDINC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CINC/0L4g0LHQsNGE0LXRgNGDINC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+ItCY0YHQutGZ0YPRh9C10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NCBrQiDQv9C+INC80LXRktGD0LzQtdC80L7RgNC40ZjQuCDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiIyNTYga0Ig0L/QviDQvNC10ZLRg9C80LXQvNC+0YDQuNGY0Lgg0LXQstC40LTQtdC90YbQuNGY0LUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMSBNQiDQv9C+INC80LXRktGD0LzQtdC80L7RgNC40ZjQuCDQtdCy0LjQtNC10L3RhtC40ZjQtSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0IE1CINC/0L4g0LzQtdGS0YPQvNC10LzQvtGA0LjRmNC4INC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IjE2IE1CINC/0L4g0LzQtdGS0YPQvNC10LzQvtGA0LjRmNC4INC10LLQuNC00LXQvdGG0LjRmNC1IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+ItCQ0L3QuNC80LDRhtC40ZjQsCDRmNC1INC40YHQutGZ0YPRh9C10L3QsCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAwMzY2MjJmLi45MzVmNDRkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLQntC80L7Qs9GD0ZvQsNCy0LAg0YPQv9C40YHQuNCy0LDRmtC1INGB0LLQuNGFINCw0L/Qu9C40LrQsNGG0LjRmNCwINGDINGB0L/QvtGZ0L3RgyDQvNC10LzQvtGA0LjRmNGDLCDQsdC10Lcg0L7QsdC30LjRgNCwINC90LAg0LLRgNC10LTQvdC+0YHRgtC4INC80LDQvdC40YTQtdGB0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+ItCf0YDQuNC90YPQtNC90L4g0L7QvNC+0LPRg9Gb0Lgg0L/RgNC+0LzQtdC90YMg0LLQtdC70LjRh9C40L3QtSDQsNC60YLQuNCy0L3QvtGB0YLQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0J7QvNC+0LPRg9Gb0LDQstCwINC/0YDQvtC80LXQvdGDINCy0LXQu9C40YfQuNC90LUg0YHQstC40YUg0LDQutGC0LjQstC90L7RgdGC0Lgg0LfQsCDRgNC10LbQuNC8INGB0LAg0LLQuNGI0LUg0L/RgNC+0LfQvtGA0LAsINCx0LXQtyDQvtCx0LfQuNGA0LAg0L3QsCDQstGA0LXQtNC90L7RgdGC0Lgg0LzQsNC90LjRhNC10YHRgtCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+ItCe0LzQvtCz0YPRm9C4INC/0YDQvtC30L7RgNC1INC/0YDQvtC40LfQstC+0ZnQvdC+0LMg0YTQvtGA0LzQsNGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+ItCe0LzQvtCz0YPRm9Cw0LLQsCDQv9C+0LTRgNGI0LrRgyDQt9CwINC10LrRgdC/0LXRgNC40LzQtdC90YLQsNC70L3QtSDQv9GA0L7Qt9C+0YDQtSDQv9GA0L7QuNC30LLQvtGZ0L3QvtCzINGE0L7RgNC80LDRgtCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLQm9C+0LfQuNC90LrQsCDRgNC10LfQtdGA0LLQvdC1INC60L7Qv9C40ZjQtSDQt9CwINGA0LDRh9GD0L3QsNGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLQoNC10LfQtdGA0LLQvdC1INC60L7Qv9C40ZjQtSDRh9C40YLQsNCy0L7QsyDRgdC40YHRgtC10LzQsCDRgtGA0LXQvdGD0YLQvdC+INC90LjRgdGDINC30LDRiNGC0LjRm9C10L3QtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQlNC+0LTQuNGA0L3QuNGC0LUg0LTQsCDQsdC40YHRgtC1INC/0YDQvtC80LXQvdC40LvQuCDQuNC70Lgg0YPQutC70L7QvdC40LvQuCDQu9C+0LfQuNC90LrRgyDQt9CwINC/0YDQsNCy0ZnQtdGa0LUg0YDQtdC30LXRgNCy0L3QuNGFINC60L7Qv9C40ZjQsCDRh9C40YLQsNCy0L7QsyDRgdC40YHRgtC10LzQsCDQvdCwINGA0LDRh9GD0L3QsNGA0YMiPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+ItCe0L3QtdC80L7Qs9GD0ZvQtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLQo9Cy0LXQuiDRg9C60ZnRg9GH0LXQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+ItCQ0YPRgtC+0LzQsNGC0YHQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i0J/RgNC40LzQtdC90LAgV2ViVmlldy3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiLQn9C+0LTQtdGB0LjRgtC1INC/0YDQuNC80LXQvdGDIFdlYlZpZXct0LAiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLQmtC+0L3QstC10YDRgtGD0Zgg0YMg0YjQuNGE0YDQvtCy0LDRmtC1INC00LDRgtC+0YLQtdC60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+ItCa0L7QvdCy0LXRgNGC0YPRmC4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i0JLQtdGbINGB0LUg0LrQvtGA0LjRgdGC0Lgg0YjQuNGE0YDQvtCy0LDRmtC1INC00LDRgtC+0YLQtdC60LAiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+ItCa0L7RgNC10LrRhtC40ZjQsCDQsdC+0ZjQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i0J7QstCwINGE0YPQvdC60YbQuNGY0LAg0ZjQtSDQtdC60YHQv9C10YDQuNC80LXQvdGC0LDQu9C90LAg0Lgg0LzQvtC20LUg0LTQsCDRg9GC0LjRh9C1INC90LAg0L/QtdGA0YTQvtGA0LzQsNC90YHQtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiLQl9Cw0LzQtdGa0YPRmNC1INCz0LAgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTINC/0YDQtdC+0YHRgtCw0LvQviDQvtC60L4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+0Log0YHQtSDQvdC1INC90LDQv9GD0L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+0Log0YHQtSDQvdC1INC90LDQv9GD0L3QuCDQv9GD0ZrQsNGH0LXQvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+0Log0YHQtSDQvdC1INC90LDQv9GD0L3QuCDQv9GA0LXQutC+IFVTQi3QsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+0Log0YHQtSDQvdC1INC90LDQv9GD0L3QuCDQsdC10LbQuNGH0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+ItCd0LXQv9C+0LfQvdCw0YLQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i0J/Rg9Ga0LXRmtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLQn9GD0ZrQtdGa0LUg0L/RgNC10LrQviDQv9GD0ZrQsNGH0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiLQn9GD0ZrQtdGa0LUg0L/RgNC10LrQviBVU0It0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+ItCR0LXQttC40YfQvdC+INC/0YPRmtC10ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiLQndC1INC/0YPQvdC4INGB0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLQndC1INC/0YPQvdC4INGB0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i0J/Rg9C90L4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3YvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3YvYXJyYXlzLnhtbAppbmRleCA1NDUzN2Y0Li5jYmM3ZGRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJBbnbDpG5kIGFsbHRpZCBIRENQLWtvbnRyb2xsIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQga0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IGtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iQXYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQga0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IGtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NCBrQi9sb2dnYnVmZmVydCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTYga0IvbG9nZ2J1ZmZlcnQiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMSBNQi9sb2dnYnVmZmVydCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0IE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2IE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkF2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0IGtCL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NiBrQi9sb2dnYnVmZmVydCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxIE1CL2xvZ2didWZmZXJ0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjQgTUIvbG9nZ2J1ZmZlcnQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTYgTUIvbG9nZ2J1ZmZlcnQiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWVyaW5nIGF2c3TDpG5nZCI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCAyZjk1YjA2Li4xYmRmNmIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJBcHBlbiBrYW4gc2tyaXZhcyB0aWxsIGV4dGVybiBsYWdyaW5nLCBvYXZzZXR0IG1hbmlmZXN0dsOkcmRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkZyYW10dmluZ2Egc3Rvcmxla3NhbnBhc3NuaW5nIGbDtnIgYWt0aXZpdGV0ZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IkRldHRhIGfDtnIgZGV0IG3DtmpsaWd0IGF0dCDDpG5kcmEgc3Rvcmxla2VuIHDDpSBhbGxhIGFrdGl2aXRldGVyIGkgZmxlcmbDtm5zdGVybMOkZ2UsIG9hdnNldHQgbWFuaWZlc3R2w6RyZGVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkFrdGl2ZXJhIGZyaWhhbmRzZsO2bnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IkFrdGl2ZXJhciBzdMO2ZCBmw7ZyIGV4cGVyaW1lbnRlbGxhIGZyaWhhbmRzZsO2bnN0ZXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IkzDtnNlbm9yZCBmw7ZyIHPDpGtlcmhldHNrb3BpYSBhdiBkYXRvcm4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IkRlIGZ1bGxzdMOkbmRpZ2Egc8Oka2VyaGV0c2tvcGlvcm5hIGF2IGRhdG9ybiDDpHIgZsO2ciBuw6RydmFyYW5kZSBpbnRlIHNreWRkYWRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlRyeWNrIG9tIGR1IHZpbGwgw6RuZHJhIGVsbGVyIHRhIGJvcnQgbMO2c2Vub3JkZXQgZsO2ciBmdWxsc3TDpG5kaWcgc8Oka2VyaGV0c2tvcGllcmluZyBhdiBkYXRvcm4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDkgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iSW5ha3RpdmVyYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJBbGx0aWQgcMOlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF1dG9tYXRpc2t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldy1pbXBsZW1lbnRlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJBbmdlIFdlYlZpZXctaW1wbGVtZW50ZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCIgbXNnaWQ9IjY2NzE0NzIwODA2NzEwNjY5NzIiPiJEZW4gdmFsZGEgV2ViVmlldy1pbXBsZW1lbnRlcmluZ2VuIGhhciBpbmFrdGl2ZXJhdHMgb2NoIG3DpXN0ZSBha3RpdmVyYXMgb20gZHUgc2thIGt1bm5hIGFudsOkbmRhIGRlbi4gVmlsbCBkdSBha3RpdmVyYSBkZW4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iS29udmVydGVyYSB0aWxsIGZpbGtyeXB0ZXJpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IktvbnZlcnRlcmEg4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJGaWxrcnlwdGVyaW5nIGFudsOkbmRzIHJlZGFuIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NCwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJGw6RyZ2tvcnJpZ2VyaW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJEZW4gaMOkciBmdW5rdGlvbmVuIMOkciBleHBlcmltZW50ZWxsIG9jaCBrYW4gcMOldmVya2EgcHJlc3RhbmRhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiJIYXIgw6VzaWRvc2F0dHMgYXYgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIGNhIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBrdmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0aWxsIGZ1bGxhZGRhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0aWxsIGZ1bGxhZGRhdCB2aWEgbGFkZGFyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiB0aWxsIGZ1bGxhZGRhdCB2aWEgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHRpbGwgZnVsbGFkZGF0IHZpYSB0csOlZGzDtnMgbGFkZG5pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJPa8OkbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkxhZGRhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iTGFkZGFzIHZpYSBhZGFwdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iTGFkZGFzIHZpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkxhZGRhcyB0csOlZGzDtnN0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IkxhZGRhciBpbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iTGFkZGFyIGludGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRnVsbHQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvYXJyYXlzLnhtbAppbmRleCA0NTBlMzg1Li44NTkzZmQ1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN3L2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJLaWxhIHdha2F0aSB0dW1pYSB1a2FrdWFqaSB3YSBIRENQIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iSzY0IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iSzI1NiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiJNMSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiJNNCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiJNMTYiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4iSW1lemltd2EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iSzY0IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iSzI1NiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiJNMSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+Ik00IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+Ik0xNiI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+Iks2NCI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiJLMjU2IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+Ik0xIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IkltZXppbXdhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+Iks2NCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiJLMjU2IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+Ik0xIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iSzY0IGt3YSBrdW1idWt1bWJ1IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IksyNTYga3dhIGt1bWJ1a3VtYnUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iTTEga3dhIGt1bWJ1a3VtYnUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iTTQga3dhIGt1bWJ1a3VtYnUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4iTTE2IGt3YSBrdW1idWt1bWJ1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IkltZXppbXdhIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+Iks2NCBrd2Ega2lsYSBha2liYSB5YSBrdW1idWt1bWJ1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IksyNTYga3dhIGtpbGEgYWtpYmEgeWEga3VtYnVrdW1idSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiJNMSBrd2Ega2lsYSBha2liYSB5YSBrdW1idWt1bWJ1IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+Ik00IGt3YSBraWxhIGFraWJhIHlhIGt1bWJ1a3VtYnUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iTTE2IGt3YSBraWxhIGFraWJhIHlhIGt1bWJ1a3VtYnUiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iSGFpd2FuaSBpbWV6aW13YSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBjNGFkY2M5Li44YTVkZGQwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJIdXdla2EgcHJvZ3JhbXUga3dlbnllIGhpZmFkaGkgeWEgbmplLCBiaWxhIGt1amFsaSBtYWVsZXpvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iTGF6aW1pc2hhIHNodWdodWxpIHppd2V6ZSBrdWJhZGlsaXNod2EgdWt1YndhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJGYW55YSBzaHVnaHVsaSB6b3RlIHppd2V6ZSBrdWJhZGlsaXNod2EgdWt1YndhIGt3YSBhamlsaSB5YSBkaXJpc2hhIG55aW5naSwgYmlsYSBrdWphbGkgdGhhbWFuaSB6YSBmYWlsaSB5YSBtYWVsZXpvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ildhc2hhIG1hZGlyaXNoYSB5ZW55ZSBtdXVuZG8gaHVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iSHV3YXNoYSB1d2V6byB3YSBrdXR1bWlhIG1hZGlyaXNoYSB5YSBtYWphcmliaW8geWVueWUgbXV1bmRvIGh1cnUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik5lbm9zaXJpIGxhIGhpZmFkaGkgcnVkdWZ1IHlhIGVuZW8ga2F6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iSGlmYWRoaSBydWR1ZnUga2FtaWxpIHphIGVuZW8ga2F6aSBoYXppamFsaW5kd2Ega3dhIHNhc2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iR3VzYSBpbGkgdWJhZGlsaXNoZSBhdSB1b25kb2UgbmVub3NpcmkgbGEgaGlmYWRoaSBydWR1ZnUga2FtaWxpIHphIGVuZW8ga2F6aSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iSW1lemltd2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJJbWV3YXNod2Ega2lsYSB3YWthdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iT3RvbWF0aWtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iVXRla2VsZXphamkgd2EgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiJXZWthIHV0ZWtlbGV6YWppIHdhIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiJCYWRpbGlzaGEga3V3YSB1c2ltYmFqaSBmaWNoZSB3YSBmYWlsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iQmFkaWxpc2hhLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJUYXlhcmkgZmFpbGkgaW1lc2ltYndhIGt3YSBuamlhIGZpY2hlIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJVc2FoaWhpc2hhamkgd2EgcmFuZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IktpcGVuZ2VsZSBoaWtpIG5pIGNoYSBtYWphcmliaW8gbmEgaHVlbmRhIGtpa2FhdGhpcmkgdXRlbmRhamkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iSW1ldGFuZ3VsaXdhIG5hIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gaW1lc2FsaWEgdGFrcmliYW4gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gaW1lc2FsaWEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGhhZGkgaWphZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBpbWVzYWxpYSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gaGFkaSBpamFlIGt3YSBrdXR1bWlhIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiUlIC0gaW1lc2FsaWEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGhhZGkgaWphZSBrd2Ega3V0dW1pYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gaW1lc2FsaWEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGhhZGkgaWphZSBrd2EgaXNpeW90dW1pYSB3YXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4iSGFpanVsaWthbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IkluYWNoYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJJbmFjaGFqaSBrdXBpdGlhIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iSW5hY2hhamkga3VwaXRpYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IkluYWNoYWppIGJpbGEga3V0dW1pYSB3YXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IkhhaWNoYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iSGFpY2hhamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iSW1lamFhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vYXJyYXlzLnhtbAppbmRleCBhZDQyMTU5Li4xOGRlZmYzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRhLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGEtcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhEQ1Ag4K6a4K6w4K6/4K6q4K6+4K6w4K+N4K6q4K+N4K6q4K+IIOCujuCuquCvjeCuquCvi+CupOCvgeCuruCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgr4EiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgrq7gr4Hgrp/grpXgr43grpXgr4EiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCuruCvgeCun+CuleCvjeCuleCvgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0gLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0gLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IuCuruCvgeCun+CuleCvjeCuleCupOCvjeCupOCuv+CusuCvjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiI2NEsgLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NksgLyDgrrLgrr7grpXgr40g4K6q4K6D4K6q4K6w4K+NIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjFNIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiI0TSAvIOCusuCuvuCuleCvjSDgrqrgroPgrqrgrrDgr40iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNIC8g4K6y4K6+4K6V4K+NIOCuquCug+CuquCusOCvjSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLgroXgrqngrr/grq7gr4fgrrfgrqngr4gg4K6u4K+B4K6f4K6V4K+N4K6V4K+BIjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKaW5kZXggZjRmZWUxZi4uNDJhNTUzNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgrq7gr4fgrqngrr/groPgrqrgr4bgrrjgr43grp/gr40g4K6u4K6k4K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+IIOCuquCviuCusOCvgeCun+CvjeCuquCun+CvgeCupOCvjeCupOCuvuCuruCusuCvjSwg4K6O4K6o4K+N4K6k4K6q4K+NIOCuquCur+CuqeCvjeCuquCuvuCun+CvjeCun+CviOCur+CvgeCuruCvjSDgrrXgr4bgrrPgrr/grqrgr43grqrgr4HgrrEg4K6a4K+H4K6u4K6/4K6q4K+N4K6q4K6/4K6f4K6k4K+N4K6k4K6/4K6y4K+NIOCujuCutOCvgeCupCDgroXgrqngr4Hgrq7grqTgrr/grpXgr43grpXgr4Hgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLgrprgr4bgrq/grrLgr43grqrgrr7grp/gr4HgrpXgrrPgr4gg4K6F4K6z4K614K+B4K6u4K6+4K6x4K6V4K+N4K6V4K+C4K6f4K6/4K6v4K6k4K6+4K6VIOCuheCuruCviCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i4K6u4K+H4K6p4K6/4K6D4K6q4K+G4K644K+N4K6f4K+NIOCuruCupOCuv+CuquCvjeCuquCvgeCuleCus+CviOCuquCvjSDgrqrgr4rgrrDgr4Hgrp/gr43grqrgrp/gr4HgrqTgr43grqTgrr7grq7grrLgr40sIOCuquCusiDgrprgrr7grrPgrrDgrqTgr43grqTgrr/grrHgr43grpXgr4Eg4K6O4K6y4K+N4K6y4K6+IOCumuCvhuCur+CusuCvjeCuquCuvuCun+CvgeCuleCus+CviOCur+CvgeCuruCvjSDgroXgrrPgrrXgr4Hgrq7grr7grrHgrpXgr43grpXgr4Lgrp/grr/grq/grqTgrr7grpUg4K6F4K6u4K+I4K6V4K+N4K6V4K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuCuleCvgeCuseCuv+CuquCvjeCuquCuv+Cun+CvjeCunyDgrrXgrp/grr/grrXgrq7grr/grrLgr43grrLgrr7grqQg4K6a4K6+4K6z4K6w4K6Z4K+N4K6V4K6z4K+IIOCuh+Cur+CuleCvjeCuleCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i4K6q4K6w4K6/4K6a4K+L4K6k4K6p4K+I4K6V4K+N4K6V4K+B4K6w4K6/4K6vIOCuleCvgeCuseCuv+CuquCvjeCuquCuv+Cun+CvjeCunyDgrrXgrp/grr/grrXgrq7grr/grrLgr43grrLgrr7grqQg4K6a4K6+4K6z4K6w4K6Z4K+N4K6V4K6z4K+B4K6V4K+N4K6V4K6+4K6pIOCuhuCupOCusOCuteCviCDgrofgrq/grpXgr43grpXgr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuCun+CvhuCuuOCvjeCuleCvjeCun+CuvuCuquCvjSDgrpXgrr7grqrgr43grqrgr4Hgrqrgr43grqrgrr/grrDgrqTgrr8g4K6V4K6f4K614K+B4K6a4K+N4K6a4K+K4K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLgrp/gr4bgrrjgr43grpXgr43grp/grr7grqrgr43grqrgrr/grqngr40g4K6u4K+B4K604K+BIOCuleCuvuCuquCvjeCuquCvgeCuquCvjeCuquCuv+CusOCupOCuv+CuleCus+CvjSDgrqTgrrHgr43grqrgr4vgrqTgr4Eg4K6q4K6+4K6k4K+B4K6V4K6+4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K614K6/4K6y4K+N4K6y4K+IIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuCun+CvhuCuuOCvjeCuleCvjeCun+CuvuCuquCvjeCuquCuv+CuqeCvjSDgrq7gr4HgrrTgr4Hgrq7gr4jgrq/grr7grqkg4K6V4K6+4K6q4K+N4K6q4K+B4K6q4K+N4K6q4K6/4K6w4K6k4K6/4K6V4K6z4K+B4K6V4K+N4K6V4K6+4K6pIOCuleCun+CuteCvgeCumuCvjeCumuCviuCusuCvjeCusuCviCDgrq7grr7grrHgr43grrHgr4HgrrXgrqTgrrHgr43grpXgr4Eg4K6F4K6y4K+N4K6y4K6k4K+BIOCuheCuleCuseCvjeCuseCvgeCuteCupOCuseCvjeCuleCvgeCupOCvjSDgrqTgr4rgrp/grrXgr4Hgrq7gr40iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+IuCuruCvgeCun+CuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IuCujuCuquCvjeCuquCvi+CupOCvgeCuruCvjSDgrofgrq/grpXgr43grpXgrqTgr43grqTgrr/grrLgr40g4K614K+IIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuCupOCuvuCuqeCuv+Cur+CumeCvjeCuleCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6y4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcg4K6a4K+G4K6v4K6y4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6y4K+IIOCuheCuruCviCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IuCuleCvi+CuquCvjeCuquCvgSDgrq7gr4HgrrHgr4jgrq7gr4jgrq/grr7grpXgr43grpXgrqTgr43grqTgrr/grrHgr43grpXgr4Eg4K6u4K6+4K6x4K+N4K6x4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLgrq7grr7grrHgr43grrHgr4HigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuCuj+CuseCvjeCuleCuqeCuteCvhyDgrpXgr4vgrqrgr43grqrgr4Eg4K6u4K+B4K6x4K+I4K6u4K+I4K6v4K6+4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLgrrXgrqPgr43grqPgrqTgr43grqTgrr/grrDgr4HgrqTgr43grqTgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuCuh+CupOCvgSDgrprgr4vgrqTgrqngr4gg4K6u4K+B4K6x4K+I4K6v4K6/4K6y4K6+4K6pIOCuheCuruCvjeCumuCuruCvjSwg4K6H4K6k4K+BIOCumuCvhuCur+CusuCvjeCupOCuv+CuseCuqeCviOCuquCvjSDgrqrgrr7grqTgrr/grpXgr43grpXgrrLgrr7grq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDgrq7gr4LgrrLgrq7gr40g4K6u4K+H4K6y4K+G4K604K+B4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4i4K6k4K+L4K6w4K6+4K6v4K6u4K+NOiA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOCuieCus+CvjeCus+CupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4i4K6u4K+B4K604K+BIOCumuCuvuCusOCvjeCunOCuv+CuseCvjeCuleCvgTogPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+IuCuruCvgeCutOCvgSBBQyDgrprgrr7grrDgr43grpzgrr/grrHgr43grpXgr4E6IDx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiLgrq7gr4HgrrTgr4EgVVNCIOCumuCuvuCusOCvjeCunOCuv+CuseCvjeCuleCvgTogPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+IuCuruCvgeCutOCvgSDgrrXgrq/grrDgr43grrLgr4bgrrjgr40g4K6a4K6+4K6w4K+N4K6c4K6/4K6x4K+N4K6V4K+BOiA8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i4K6F4K6x4K6/4K6v4K6q4K+N4K6q4K6f4K6+4K6kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiLgrprgrr7grrDgr43grpzgr40g4K6P4K6x4K+N4K6x4K6q4K+N4K6q4K6f4K+B4K6V4K6/4K6x4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJBQyDgrq7gr4LgrrLgrq7gr40g4K6a4K6+4K6w4K+N4K6c4K6+4K6V4K6/4K6x4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iVVNCIOCuruCvguCusuCuruCvjSDgrprgrr7grrDgr43grpzgrr7grpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IuCuteCur+CusOCvjeCusuCvhuCuuOCuv+CusuCvjSDgrprgrr7grrDgr43grpzgrr7grpXgrr/grrHgrqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4K6a4K6+4K6w4K+N4K6c4K+NIOCumuCvhuCur+CvjeCur+CuquCvjeCuquCun+CuteCuv+CusuCvjeCusuCviCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IuCumuCuvuCusOCvjeCunOCvjSDgro/grrHgrrXgrr/grrLgr43grrLgr4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i4K6u4K+B4K604K+B4K6u4K+IIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRlLXJJTi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vYXJyYXlzLnhtbAppbmRleCA5Mjg3YWJhLi4zYmEwZGM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRlLXJJTi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGUtcklOL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuCwjuCwquCxjeCwquCwn+Cwv+CwleCxgCBIRENQIOCwpOCwqOCwv+CwluCxgOCwqOCwvyDgsIngsKrgsK/gsYvgsJfgsL/gsILgsJrgsYEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLgsIbgsKvgsY0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuCwhuCwq+CxjSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i4LCy4LC+4LCX4LGNIOCwrOCwq+CwsOCxjeKAjOCwleCwvyAxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i4LCG4LCr4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4i4LCy4LC+4LCX4LGNIOCwrOCwq+CwsOCxjeKAjOCwleCwvyAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLgsLLgsL7gsJfgsY0g4LCs4LCr4LCw4LGN4oCM4LCV4LC/IDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuCwsuCwvuCwl+CxjSDgsKzgsKvgsLDgsY3igIzgsJXgsL8gMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IuCwr+CwvuCwqOCwv+CwruCxh+Cwt+CwqOCxjSDgsIbgsKvgsY3igIzgsLLgsYsg4LCJ4LCC4LCm4LC/IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGUtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKaW5kZXggY2U3ZmJmMi4uMDRmMGNhMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLgsI8g4LCF4LCo4LGB4LC14LCw4LGN4LCk4LCo4LC+4LCo4LGN4LCo4LC/IOCwheCwr+Cwv+CwqOCwviDgsK7gsL7gsKjgsL/gsKvgsYbgsLjgsY3gsJ/gsY0g4LC14LC/4LCy4LGB4LC14LCy4LCk4LGLIOCwuOCwguCwrOCwguCwp+CwgiDgsLLgsYfgsJXgsYHgsILgsKHgsL4g4LCs4LC+4LC54LGN4LCvIOCwqOCwv+CwsuCxjeCwteCwsuCxiyDgsLXgsY3gsLDgsL7gsK/gsJfgsLLgsL/gsJfgsYfgsLLgsL4g4LCF4LCo4LGB4LCu4LCk4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i4LCV4LC+4LCw4LGN4LCv4LC+4LCa4LCw4LCj4LCy4LCo4LGBIOCwquCwsOCwv+CwruCwvuCwo+CwgiDgsK7gsL7gsLDgsY3gsJrgsJfgsLLgsL/gsJfgsYfgsLLgsL4g4LCo4LC/4LCw4LGN4LCs4LCC4LCn4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiLgsK7gsL7gsKjgsL/gsKvgsYbgsLjgsY3gsJ/gsY0g4LC14LC/4LCy4LGB4LC14LCy4LCk4LGLIOCwuOCwguCwrOCwguCwp+CwgiDgsLLgsYfgsJXgsYHgsILgsKHgsL4g4LCF4LCo4LGN4LCo4LC/IOCwleCwvuCwsOCxjeCwr+CwvuCwmuCwsOCwo+CwsuCwqOCxgSDgsKzgsLngsYHgsLMg4LC14LC/4LCC4LCh4LGL4LCy4LGN4LCy4LGLIOCwuOCwsOCwv+CwquCxi+Cwr+Cxh+Cwn+Cwn+CxjeCwsuCxgSDgsKrgsLDgsL/gsK7gsL7gsKPgsIIg4LCu4LC+4LCw4LGN4LCa4LCX4LCy4LC/4LCX4LGH4LCy4LC+IOCwmuCxh+CwuOCxjeCwpOCxgeCwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLgsLjgsY3gsLXgsKTgsILgsKTgsY3gsLAg4LCw4LGC4LCqIOCwteCwv+CwguCwoeCxi+CwsuCwqOCxgSDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsILgsKHgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuCwquCxjeCwsOCwr+Cxi+Cwl+CwvuCwpOCxjeCwruCwlSDgsLjgsY3gsLXgsKTgsILgsKTgsY3gsLAg4LCw4LGC4LCqIOCwteCwv+CwguCwoeCxi+CwsuCwleCxgSDgsK7gsKbgsY3gsKbgsKTgsYHgsKjgsYEg4LCq4LGN4LCw4LC+4LCw4LCC4LCt4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLgsKHgsYbgsLjgsY3gsJXgsY3igIzgsJ/gsL7gsKrgsY0g4LCs4LGN4LCv4LC+4LCV4LCq4LGNIOCwquCwvuCwuOCxjeKAjOCwteCwsOCxjeCwoeCxjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i4LCh4LGG4LC44LGN4LCV4LGN4oCM4LCf4LC+4LCq4LGNIOCwquCxguCwsOCxjeCwpOCwvyDgsKzgsY3gsK/gsL7gsJXgsKrgsY3igIzgsLLgsYEg4LCq4LGN4LCw4LC44LGN4LCk4LGB4LCk4LCCIOCwsOCwleCxjeCwt+Cwv+CwguCwmuCwrOCwoeCwsuCxh+CwpuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLgsKHgsYbgsLjgsY3gsJXgsY3igIzgsJ/gsL7gsKrgsY0g4LCq4LGC4LCw4LGN4LCk4LC/IOCwrOCxjeCwr+CwvuCwleCwquCxjeKAjOCwsiDgsJXgsYvgsLjgsIIg4LCq4LC+4LC44LGN4oCM4LC14LCw4LGN4LCh4LGN4oCM4LCo4LGBIOCwruCwvuCwsOCxjeCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsLLgsYfgsKbgsL4g4LCk4LGA4LC44LC/4LC14LGH4LCv4LCh4LC+4LCo4LC/4LCV4LC/IOCwpOCwvuCwleCwguCwoeCwvyI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLgsKjgsL/gsLLgsL/gsKrgsL/gsLXgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLgsI7gsLLgsY3gsLLgsKrgsY3gsKrgsYHgsKHgsYIg4LCG4LCo4LGN4oCM4LCy4LGLIOCwieCwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLgsLjgsY3gsLXgsK/gsILgsJrgsL7gsLLgsJXgsIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiLgsLXgsYbgsKzgsY0g4LC14LGA4LCV4LGN4LC34LCjIOCwheCwruCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjQzNzA1NTEzNzg3MjAwMDQ4NzIiPiLgsLXgsYbgsKzgsY0g4LC14LGA4LCV4LGN4LC34LCjIOCwheCwruCwsuCxgeCwqOCwvyDgsLjgsYbgsJ/gsY0g4LCa4LGH4LCv4LCC4LCh4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4i4LCO4LCC4LCa4LGB4LCV4LGB4LCo4LGN4LCoIOCwteCxhuCwrOCxjSDgsLXgsYDgsJXgsY3gsLfgsKMg4LCF4LCu4LCy4LGBIOCwqOCwv+CwsuCwv+CwquCwv+CwteCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvywg4LCV4LC+4LCo4LGAIOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsKTgsKrgsY3gsKrgsKjgsL/gsLjgsLDgsL/gsJfgsL4g4LCq4LGN4LCw4LC+4LCw4LCC4LCt4LC/4LCC4LCa4LC+4LCy4LGN4LC44LC/IOCwieCwguCwn+CxgeCwguCwpuCwvywg4LCu4LGA4LCw4LGBIOCwpuCxgOCwqOCxjeCwqOCwvyDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsL7gsLLgsKjgsYHgsJXgsYHgsILgsJ/gsYHgsKjgsY3gsKjgsL7gsLDgsL4/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i4LCr4LGI4LCy4LGNIOCwl+CxgeCwquCxjeCwpOCxgOCwleCwsOCwo+CwleCxgSDgsK7gsL7gsLDgsY3gsJrgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuCwruCwvuCwsOCxjeCwmuCwguCwoeCwv+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4LCr4LGI4LCy4LGNIOCwh+CwquCxjeCwquCwn+Cwv+CwleCxhyDgsJfgsYHgsKrgsY3gsKTgsYDgsJXgsLDgsL/gsILgsJrgsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuCwsOCwguCwl+CxgSDgsLjgsLXgsLDgsKMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuCwiCDgsLLgsJXgsY3gsLfgsKPgsIIg4LCq4LGN4LCw4LCv4LGL4LCX4LC+4LCk4LGN4LCu4LCV4LCu4LGI4LCo4LCm4LC/IOCwruCwsOCwv+Cwr+CxgSDgsKrgsKjgsL/gsKTgsYDgsLDgsYHgsKrgsYgg4LCq4LGN4LCw4LCt4LC+4LC14LCCIOCwmuCxguCwquCwteCwmuCxjeCwmuCxgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+IOCwpuCxjeCwteCwvuCwsOCwviDgsK3gsLDgsY3gsKTgsYAg4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCwuOCxgeCwruCwvuCwsOCxgSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LCu4LC/4LCX4LC/4LCy4LC/IOCwieCwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOCwquCxguCwsOCxjeCwpOCwv+Cwl+CwviDgsKjgsL/gsILgsKHgsJ/gsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIEFD4LCy4LGLIOCwquCxguCwsOCxjeCwpOCwv+Cwl+CwviDgsKjgsL/gsILgsKHgsJ/gsL7gsKjgsL/gsJXgsL8gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIFVTQiDgsKbgsY3gsLXgsL7gsLDgsL4g4LCq4LGC4LCw4LGN4LCk4LC/4LCX4LC+IOCwqOCwv+CwguCwoeCwn+CwvuCwqOCwv+CwleCwvyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g4LC14LGI4LCw4LGN4oCM4LCy4LGG4LC44LGNIOCwqOCxgeCwguCwoeCwvyDgsKrgsYLgsLDgsY3gsKTgsL/gsJfgsL4g4LCo4LC/4LCC4LCh4LCf4LC+4LCo4LC/4LCV4LC/IDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuCwpOCxhuCwsuCwv+Cwr+CwpuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4LCb4LC+4LCw4LGN4LCc4LGNIOCwheCwteCxgeCwpOCxi+CwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUPgsLLgsYsg4LCb4LC+4LCw4LGN4LCc4LGNIOCwheCwteCxgeCwpOCxi+CwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiDgsKbgsY3gsLXgsL7gsLDgsL4g4LCb4LC+4LCw4LGN4LCc4LGNIOCwheCwteCxgeCwpOCxi+CwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i4LC14LGI4LCw4LGN4oCM4LCy4LGG4LC44LGN4oCMIOCwpuCxjeCwteCwvuCwsOCwviDgsJvgsL7gsLDgsY3gsJzgsY0g4LCF4LC14LGB4LCk4LGL4LCC4LCm4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IuCwm+CwvuCwsOCxjeCwnOCxjSDgsJXgsL7gsLXgsKHgsIIg4LCy4LGH4LCm4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i4LCb4LC+4LCw4LGN4LCc4LGNIOCwleCwvuCwteCwoeCwgiDgsLLgsYfgsKbgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i4LCo4LC/4LCC4LCh4LC/4LCC4LCm4LC/Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL2FycmF5cy54bWwKaW5kZXggNDNkMjczOS4uNDI4Mjk3NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10aC9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGgvYXJyYXlzLnhtbApAQCAtNTksMjMgKzU5LDI2IEBACiAgICAgPGl0ZW0gbXNnaWQ9IjQ1MDc1NjMxMjMxMjEyNzMyIj4i4LmD4LiK4LmJ4LiB4Liy4Lij4LiV4Lij4Lin4LiI4Liq4Lit4LiaIEhEQ1Ag4LmA4Liq4Lih4LitIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NiBLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjEgTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTYgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLguJvguLTguJQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgSyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiBLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgSyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxIE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i4Lib4Li04LiUIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMSBNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjQgSyDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2IEsg4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IjEgTSDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNCBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNiBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLguJvguLTguJQiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iNjQgSyDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2IEsg4LiV4LmI4Lit4Lia4Lix4Lif4LmA4Lif4Lit4Lij4LmM4LmE4Lif4Lil4LmM4Lia4Lix4LiZ4LiX4Li24LiBIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+IjEgTSDguJXguYjguK3guJrguLHguJ/guYDguJ/guK3guKPguYzguYTguJ/guKXguYzguJrguLHguJnguJfguLbguIEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iNCBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNiBNIOC4leC5iOC4reC4muC4seC4n+C5gOC4n+C4reC4o+C5jOC5hOC4n+C4peC5jOC4muC4seC4meC4l+C4tuC4gSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLguJvguLTguJTguKDguLLguJ7guYDguITguKXguLfguYjguK3guJnguYTguKvguKciPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggYzkxYmI0Mi4uMjQxZmQwNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i4LmD4Lir4LmJ4Liq4Liy4Lih4Liy4Lij4LiW4LmA4LiC4Li14Lii4LiZ4LmB4Lit4Lib4LiV4LmI4Liy4LiH4LmGIOC5hOC4m+C4ouC4seC4h+C4l+C4teC5iOC5gOC4geC5h+C4muC4oOC4suC4ouC4meC4reC4geC5hOC4lOC5iSDguYLguJTguKLguYTguKHguYjguITguLPguJnguLbguIfguJbguLbguIfguITguYjguLLguYPguJnguYTguJ/guKXguYwgTWFuaWZlc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLguJrguLHguIfguITguLHguJrguYPguKvguYnguIHguLTguIjguIHguKPguKPguKHguJvguKPguLHguJrguILguJnguLLguJTguYTguJTguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuC4l+C4s+C5g+C4q+C5ieC4geC4tOC4iOC4geC4o+C4o+C4oeC4l+C4seC5ieC4h+C4q+C4oeC4lOC4m+C4o+C4seC4muC4guC4meC4suC4lOC5hOC4lOC5ieC4quC4s+C4q+C4o+C4seC4muC4q+C4meC5ieC4suC4leC5iOC4suC4h+C4q+C4peC4suC4ouC4muC4suC4mSDguYLguJTguKLguYTguKHguYjguITguLPguJnguLbguIfguJbguLbguIfguITguYjguLLguYPguJnguYTguJ/guKXguYwgTWFuaWZlc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiLguYDguJvguLTguJTguYPguIrguYnguKvguJnguYnguLLguJXguYjguLLguIfguKPguLnguJvguYHguJrguJrguK3guLTguKrguKPguLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuC5gOC4m+C4tOC4lOC4geC4suC4o+C4quC4meC4seC4muC4quC4meC4uOC4meC4q+C4meC5ieC4suC4leC5iOC4suC4h+C4o+C4ueC4m+C5geC4muC4muC4reC4tOC4quC4o+C4sOC5geC4muC4muC4l+C4lOC4peC4reC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiLguKPguKvguLHguKrguJzguYjguLLguJnguIHguLLguKPguKrguLPguKPguK3guIfguILguYnguK3guKHguLnguKXguYPguJnguYDguJTguKrguIHguYzguJfguYfguK3guJsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9ub25lIiBtc2dpZD0iNjk1MTA5NTQ4NTUzNzc2Nzk1NiI+IuC4geC4suC4o+C4quC4s+C4o+C4reC4h+C4guC5ieC4reC4oeC4ueC4peC5gOC4leC5h+C4oeC4o+C4ueC4m+C5geC4muC4muC5g+C4meC5gOC4lOC4quC4geC5jOC4l+C5h+C4reC4myDguYTguKHguYjguYTguJTguYnguKPguLHguJrguIHguLLguKPguJvguYnguK3guIfguIHguLHguJnguYPguJnguILguJPguLDguJnguLXguYkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i4LmB4LiV4Liw4LmA4Lie4Li34LmI4Lit4LmA4Lib4Lil4Li14LmI4Lii4LiZ4Lir4Lij4Li34Lit4Lil4Lia4Lij4Lir4Lix4Liq4Lic4LmI4Liy4LiZ4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Liy4Lij4Liq4Liz4Lij4Lit4LiH4LiC4LmJ4Lit4Lih4Li54Lil4LmA4LiV4LmH4Lih4Lij4Li54Lib4LmB4Lia4Lia4LmD4LiZ4LmA4LiU4Liq4LiB4LmM4LiX4LmH4Lit4LibIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLguJvguLTguJTguYPguIrguYnguYHguKXguYnguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLguYDguJvguLTguJTguYPguIrguYnguYDguKrguKHguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i4Lit4Lix4LiV4LmC4LiZ4Lih4Lix4LiV4Li0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLguYHguJvguKXguIfguYDguJvguYfguJnguIHguLLguKPguYDguILguYnguLLguKPguKvguLHguKrguYTguJ/guKXguYwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IuC5geC4m+C4peC4h+KApiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4i4LmA4LiC4LmJ4Liy4Lij4Lir4Lix4Liq4LmE4Lif4Lil4LmM4LmB4Lil4LmJ4LinIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiLguIHguLLguKPguYHguIHguYnguKrguLUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IuC4hOC4uOC4k+C4peC4seC4geC4qeC4k+C4sOC4meC4teC5ieC5gOC4m+C5h+C4meC5geC4muC4muC4l+C4lOC4peC4reC4h+C5geC4peC4sOC4reC4suC4iOC4quC5iOC4h+C4nOC4peC4leC5iOC4reC4m+C4o+C4sOC4quC4tOC4l+C4mOC4tOC4oOC4suC4nuC4geC4suC4o+C4l+C4s+C4h+C4suC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhbHRvbml6ZXJfdHlwZV9vdmVycmlkZGVuIiBtc2dpZD0iMzExNjk0NzI0NDQxMDI0NTkxNiI+IuC5geC4l+C4meC4l+C4teC5iOC5guC4lOC4oiA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOC5gOC4q+C4peC4t+C4reC4m+C4o+C4sOC4oeC4suC4kyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g4LiI4LiZ4LiB4Lin4LmI4Liy4LiI4Liw4LmA4LiV4LmH4LihIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDguIjguJnguIHguKfguYjguLLguIjguLDguYDguJXguYfguKHguYDguKHguLfguYjguK3guIrguLLguKPguYzguIjguJzguYjguLLguJkgQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC4iOC4meC4geC4p+C5iOC4suC4iOC4sOC5gOC4leC5h+C4oeC5gOC4oeC4t+C5iOC4reC4iuC4suC4o+C5jOC4iOC4nOC5iOC4suC4mSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOC4iOC4meC4geC4p+C5iOC4suC4iOC4sOC5gOC4leC5h+C4oeC5gOC4oeC4t+C5iOC4reC4iuC4suC4o+C5jOC4iOC4nOC5iOC4suC4meC4o+C4sOC4muC4muC5hOC4o+C5ieC4quC4suC4oiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IuC5hOC4oeC5iOC4l+C4o+C4suC4miI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i4LiB4Liz4Lil4Lix4LiH4LiK4Liy4Lij4LmM4LiIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiLguIHguLPguKXguLHguIfguIrguLLguKPguYzguIjguYTguJ8gQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiLguIHguLPguKXguLHguIfguIrguLLguKPguYzguIjguJzguYjguLLguJkgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLguIHguLPguKXguLHguIfguIrguLLguKPguYzguIjguYHguJrguJrguYTguKPguYnguKrguLLguKIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i4LmE4Lih4LmI4LmE4LiU4LmJ4LiK4Liy4Lij4LmM4LiIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i4LmE4Lih4LmI4LmE4LiU4LmJ4LiK4Liy4Lij4LmM4LiIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IuC5gOC4leC5h+C4oSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9hcnJheXMueG1sCmluZGV4IGM3Y2Y2ZDIuLmE3ZmI2OGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGwvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRsL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlBhbGFnaW5nIGd1bWFtaXQgbmcgcGFnc3VzdXJpbmcgSERDUCI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ikktb2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJJLW9mZiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IjY0SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iMjU2SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IjRNIGthZGEgbG9nIGJ1ZmZlciI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiIxNk0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Ikktb2ZmIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyBrYWRhIGxvZyBidWZmZXIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIGthZGEgbG9nIGJ1ZmZlciI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0ga2FkYSBsb2cgYnVmZmVyIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+Ik5ha2Etb2ZmIGFuZyBhbmltYXRpb24iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggYTM4OWZlYi4uZDFhNTI1YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iTWFyYS13cml0ZSBuYSBzYSBleHRlcm5hbCBzdG9yYWdlIGFuZyBhbnVtYW5nIGFwcCwgYW51bWFuIGFuZyBtYW5pZmVzdCB2YWx1ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IlNhcGlsaXRhbmcgZ2F3aW5nIHJlc2l6YWJsZSBhbmcgbWdhIGFrdGliaWRhZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iR2F3aW5nIHJlc2l6YWJsZSBwYXJhIHNhIG11bHRpLXdpbmRvdyBhbmcgbGFoYXQgbmcgYWt0aWJpZGFkLCBhbnVtYW4gYW5nIG1nYSBtYW5pZmVzdCB2YWx1ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJJLWVuYWJsZSBhbmcgbWdhIGZyZWVmb3JtIHdpbmRvdyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4iSW5lLWVuYWJsZSBhbmcgc3Vwb3J0YSBwYXJhIHNhIG1nYSBwYW5nLWVrc3BlcmltZW50b25nIGZyZWVmb3JtIHdpbmRvdy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4iUGFzc3dvcmQgbmcgcGFnLWJhY2t1cCBuZyBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJLYXNhbHVrdXlhbmcgaGluZGkgcGlub3Byb3Rla3RhaGFuIGFuZyBtZ2EgYnVvbmcgcGFnLWJhY2t1cCBuZyBkZXNrdG9wIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IlBpbmR1dGluIHVwYW5nIGJhZ3VoaW4gbyBhbGlzaW4gYW5nIHBhc3N3b3JkIHBhcmEgc2EgbWdhIGJ1b25nIHBhZy1iYWNrdXAgbmcgZGVza3RvcCI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iTmFrYS1kaXNhYmxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iUGFsYWdpbmcgbmFrYS1vbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiJBd3RvbWF0aWtvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iUGFncGFwYXR1cGFkIHNhIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4iSXRha2RhIGFuZyBwYWdwYXBhdHVwYWQgc2EgV2ViVmlldyI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkktY29udmVydCBhdCBnYXdpbmcgcGFnLWVuY3J5cHQgbmcgZmlsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iSS1jb252ZXJ0Li4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJOYS1lbmNyeXB0IG5hIGFuZyBmaWxlIjwvc3RyaW5nPgpAQCAtMjg5LDQgKzI5NSwxOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjU4MDA3NjEzNjI2Nzg3MDc4NzIiPiJQYWd0YXRhbWEgbmcga3VsYXkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+IkFuZyBmZWF0dXJlIG5hIGl0byBheSBwaW5hZy1lZWtzcGVyaW1lbnR1aGFuIGF0IG1hYWFyaW5nIG1ha2FhcGVrdG8gc2EgcGFnZ2FuYXAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iTmEtb3ZlcnJpZGUgbmcgPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBodW1pZ2l0IGt1bXVsYW5nIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBhbmcgbmF0aXRpcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gYmFnbyBtYXB1bm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGJhZ28gbWFwdW5vIHNhIEFDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBiYWdvIG1hcHVubyBzYSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl93aXJlbGVzcyIgbXNnaWQ9IjE4MjkyOTU3MDgyNDMxNTk0NjQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGJhZ28gbWFwdW5vIG11bGEgc2Egd2lyZWxlc3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiJIaW5kaSBLaWxhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+Ik5hZ2NoYS1jaGFyZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+Ik5hZ2NoYS1jaGFyZ2Ugc2EgQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJOYWdjaGEtY2hhcmdlIHNhIFVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4iV2lyZWxlc3MgbmFnLWNoYXJnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJIaW5kaSBuYWdjaGEtY2hhcmdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iSGluZGkgbmFna2FrYXJnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZnVsbCIgbXNnaWQ9IjI4MjQ2MTQ3NTM4NjE0NjI4MDgiPiJQdW5vIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL2FycmF5cy54bWwKaW5kZXggOTMyNjkwM2UuLjBiYWU0MzcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhEQ1AgZGVuZXRpbWluaSBoZXIgemFtYW4ga3VsbGFuIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IkthcGFsxLEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyNDIzNTI4Njc1Mjk0MzMzODMxIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX2xvd3JhbV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI1MjQ3OTkzOTU3NzA2MTAxNTQiPiI2NCBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMSBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjYwODk0NzA3MjA0NTEwNjgzNjQiPiJLYXBhbMSxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxIE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDEgTUIiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSAxNiBNQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiJLYXBhbMSxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDI1NiBLQiI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiJHw7xubMO8ayBhcmFiZWxsZcSfaSBiYcWfxLFuYSAxIE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IkfDvG5sw7xrIGFyYWJlbGxlxJ9pIGJhxZ/EsW5hIDQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iR8O8bmzDvGsgYXJhYmVsbGXEn2kgYmHFn8SxbmEgMTYgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iQW5pbWFzeW9uIGthcGFsxLEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggNDhlZDg2Ny4uZDRjMjExYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4iQmlsZGlyaWxlbiBkZcSfZXJsZXJkZW4gYmHEn8SxbXPEsXogb2xhcmFrIHV5Z3VsYW1hbGFyxLEgaGFyaWNpIGRlcG9sYW1heWEgeWF6bWFrIGnDp2luIHV5Z3VuIGhhbGUgZ2V0aXJpciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkV0a2lubGlrbGVyaSB5ZW5pZGVuIGJveXV0bGFuZMSxcsSxbGFiaWxtZXllIHpvcmxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJNYW5pZmVzdCBkZcSfZXJsZXJpbmRlbiBiYcSfxLFtc8SxeiBvbGFyYWssIHTDvG0gZXRraW5saWtsZXJpIGJpcmRlbiBmYXpsYSBwZW5jZXJlZGUgeWVuaWRlbiBib3l1dGxhbmTEsXLEsWxhYmlsaXIgaGFsZSBnZXRpcmlyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IlNlcmJlc3QgYmnDp2ltbGkgcGVuY2VyZWxlcmkgZXRraW5sZcWfdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJEZW5leXNlbCBzZXJiZXN0IGJpw6dpbWxpIHBlbmNlcmVsZXJpIGV0a2lubGXFn3RpcmlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJNYXNhw7xzdMO8IHllZGVrbGVtZSDFn2lmcmVzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iTWFzYcO8c3TDvCB0YW0geWVkZWtsZW1lbGVyaSDFn3UgYW4ga29ydW5tdXlvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiJNYXNhw7xzdMO8IHRhbSB5ZWRla2xlbWVsZXJpbmluIMWfaWZyZXNpbmkgZGXEn2nFn3Rpcm1layB2ZXlhIGthbGTEsXJtYWsgacOnaW4gZG9rdW51biI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4iRGV2cmUgZMSxxZ/EsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfeWVzIiBtc2dpZD0iMjIxODE1NzI2NTk5NzYzMzQzMiI+IkhlciB6YW1hbiBhw6fEsWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iT3RvbWF0aWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJXZWJWaWV3IGt1bGxhbsSxbcSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcga3VsbGFuxLFtxLFuxLEgYXlhcmxhIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iRG9zeWEgxZ9pZnJlbGVtZXllIGTDtm7DvMWfdMO8ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iRMO2bsO8xZ90w7xy4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiJEb3N5YSDFn2lmcmVsZW1lIHphdGVuIHV5Z3VsYW5kxLEiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IlJlbmsgZMO8emVsdG1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJCdSDDtnplbGxpayBkZW5leXNlbGRpciB2ZSBwZXJmb3JtYW5zxLEgZXRraWxleWViaWxpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+IHRhcmFmxLFuZGFuIGdlw6dlcnNpeiBrxLFsxLFuZMSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIHlha2xhxZ/EsWsgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGthbGTEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIHRhbSDFn2FyaiBvbG1hc8SxbmEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSBwcml6ZSB0YWvEsWzEsSwgdGFtIMWfYXJqIG9sbWFzxLFuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIFVTQiDDvHplcmluZGVuIMWfYXJqIG9sbWFzxLFuYSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gdmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIGthYmxvc3V6ZGFuIHRhbSDFn2FyaiBvbG1hc8SxbmEgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IHZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkJpbGlubWl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IsWeYXJqIG9sdXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iQUMgaWxlIMWfYXJqIG9sdXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlVTQiBpbGUgxZ9hcmogb2x1eW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiJLYWJsb3N1eiDFn2FyaiBvbHV5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4ixZ5hcmogb2xtdXlvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIiBtc2dpZD0iMjgyMDA3MDUwNjYyMTQ4MzU3NiI+IsWeYXJqIGV0bWl5b3IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iRG9sdSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9hcnJheXMueG1sCmluZGV4IDZjY2NjOGMuLjA3ODZhYzMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdWsvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVrL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+ItCX0LDQstC20LTQuCDQstC40LrQvtGA0LjRgdGC0L7QstGD0LLQsNGC0Lgg0L/QtdGA0LXQstGW0YDQutGDIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NCDQmtCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2INCa0LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSDQnNCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjQg0JzQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNiDQnNCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+ItCS0LjQvNC60L3QtdC90L4iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjQg0JrQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ4NzU0NTM0MDIzNjE0NTMyNCI+IjI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjQg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI4MDMxOTkxMDI1ODkxMjY5MzgiPiIxNiDQnNCxIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTYg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjgwODU4NjcyMDkyMDIxNTM0MDMiPiIxINCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i0JLQuNC80LrQvdC10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NCDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEg0JzQsSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+ItCR0YPRhNC10YA6INC80LDQutGBLiA2NCDQmtCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMjgyMjMwOTc0NzY3NTc1ODYyOCI+ItCR0YPRhNC10YA6INC80LDQutGBLiAyNTYg0JrQsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiLQkdGD0YTQtdGAOiDQvNCw0LrRgS4gMSDQnNCxIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+ItCR0YPRhNC10YA6INC80LDQutGBLiA0INCc0LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIxOTc4NjI5MDUxMDg1MTExNTkyIj4i0JHRg9GE0LXRgDog0LzQsNC60YEuIDE2INCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4i0JLQuNC80LrQvdC10L3QviI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLQkdGD0YTQtdGAINC20YPRgNC90LDQu9GDOiA2NCDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+ItCR0YPRhNC10YAg0LbRg9GA0L3QsNC70YM6IDI1NiDQmtCxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+ItCR0YPRhNC10YAg0LbRg9GA0L3QsNC70YM6IDEg0JzQsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLQkdGD0YTQtdGAINC20YPRgNC90LDQu9GDOiA0INCc0LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i0JHRg9GE0LXRgCDQttGD0YDQvdCw0LvRgzogMTYg0JzQsSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLQkNC90ZbQvNCw0YbRltGOINCy0LjQvNC60L3QtdC90L4iPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggNWEwZGRkMC4uM2U4OWNjZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0yNDcsNiArMjQ3LDggQEAKICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX2FsbG93X29uX2V4dGVybmFsX3N1bW1hcnkiIG1zZ2lkPSIzMTkxOTUyNTA1ODYwMzQzMjMzIj4i0JTQvtC00LDRgtC60Lgg0LzQvtC20L3QsCDQt9Cw0L/QuNGB0YPQstCw0YLQuCDQvdCwINC30L7QstC90ZbRiNC90Y4g0L/QsNC84oCZ0Y/RgtGMINC90LXQt9Cw0LvQtdC20L3QviDQstGW0LQg0LfQvdCw0YfQtdC90Ywg0LzQsNC90ZbRhNC10YHRgtGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4i0J/RgNC40LzRg9GB0L7QstC+INC80LDRgdGI0YLQsNCx0YPQstCw0YLQuCDQsNC60YLQuNCy0L3RltGB0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i0JDQutGC0LjQstC90ZbRgdGC0Ywg0LzQsNGB0YjRgtCw0LHRg9Cy0LDRgtC40LzQtdGC0YzRgdGPINC90LAg0LrRltC70YzQutCwINCy0ZbQutC+0L0sINC90LXQt9Cw0LvQtdC20L3QviDQstGW0LQg0LfQvdCw0YfQtdC90Ywg0YMg0YTQsNC50LvRliDQvNCw0L3RltGE0LXRgdGC0YMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i0KPQstGW0LzQutC90YPRgtC4INCy0ZbQutC90LAg0LTQvtCy0ZbQu9GM0L3QvtCz0L4g0YTQvtGA0LzQsNGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+ItCj0LLRltC80LrQvdGD0YLRjNGB0Y8g0LXQutGB0L/QtdGA0LjQvNC10L3RgtCw0LvRjNC90ZYg0LLRltC60L3QsCDQtNC+0LLRltC70YzQvdC+0LPQviDRhNC+0YDQvNCw0YLRgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i0J/QsNGA0L7Qu9GMINGA0LXQt9C10YDQsi7QutC+0L/RltGXINC90LAg0J/QmiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i0J/QvtCy0L3RliDRgNC10LfQtdGA0LLQvdGWINC60L7Qv9GW0Zcg0L3QsCDQutC+0LzQv+KAmdGO0YLQtdGA0ZYg0L3QsNGA0LDQt9GWINC90LUg0LfQsNGF0LjRidC10L3RliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X2NoYW5nZSIgbXNnaWQ9IjI3MzExNjM0MjUwODExNzI2MzgiPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINC30LzRltC90LjRgtC4INGH0Lgg0LLQuNC00LDQu9C40YLQuCDQv9Cw0YDQvtC70Ywg0LTQu9GPINC/0L7QstC90L7Qs9C+INGA0LXQt9C10YDQstC90L7Qs9C+INC60L7Qv9GW0Y7QstCw0L3QvdGPINC90LAg0LrQvtC80L/igJnRjtGC0LXRgCI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsOSBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLQktC40LzQutC90LXQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i0JfQsNCy0LbQtNC4INCy0LLRltC80LrQvdC10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byIgbXNnaWQ9Ijc1MDgzNDgxNzU4MDQzMDQzMjciPiLQkNCy0YLQvtC80LDRgtC40YfQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i0JfQsNGB0YLQvtGB0YPQstCw0L3QvdGPIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i0J3QsNC70LDRiNGC0YPQstCw0YLQuCDQt9Cw0YHRgtC+0YHRg9Cy0LDQvdC90Y8gV2ViVmlldyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0IiBtc2dpZD0iNjY3MTQ3MjA4MDY3MTA2Njk3MiI+ItCS0LjQsdGA0LDQvdC1INC30LDRgdGC0L7RgdGD0LLQsNC90L3RjyBXZWJWaWV3INCy0LjQvNC60L3QtdC90L4uINCj0LLRltC80LrQvdGD0YLQuCDQudC+0LPQvj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLQmtC+0L3QstC10YDRgtGD0LLQsNGC0Lgg0LIg0LfQsNGI0LjRhNGA0L7QstCw0L3QuNC5INGE0LDQudC7Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLQmtC+0L3QstC10YDRgtCw0YbRltGP4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLQo9C20LUg0LrQvtC90LLQtdGA0YLQvtCy0LDQvdC+INCyINC30LDRiNC40YTRgNC+0LLQsNC90LjQuSDRhNCw0LnQuyI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTQsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i0JrQvtGA0LXQutGG0ZbRjyDQutC+0LvRjNC+0YDRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i0KbQtSDQtdC60YHQv9C10YDQuNC80LXQvdGC0LDQu9GM0L3QsCDRhNGD0L3QutGG0ZbRjy4g0JLQvtC90LAg0LzQvtC20LUg0LLQv9C70LjQvdGD0YLQuCDQvdCwINC/0YDQvtC00YPQutGC0LjQstC90ZbRgdGC0YwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i0JfQsNC80ZbQvdC10L3QviDQvdCwIDx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyDQt9Cw0LvQuNGI0LjQu9C+0YHRjCDQsdC70LjQt9GM0LrQviA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/QvtCy0L3QvtCz0L4g0LfQsNGA0Y/QtNC20LXQvdC90Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g0LTQviDQv9C+0LLQvdC+0LPQviDQt9Cw0YDRj9C00LbQtdC90L3RjyDQtyDRgNC+0LfQtdGC0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDQtNC+INC/0L7QstC90L7Qs9C+INC30LDRgNGP0LTQttC10L3QvdGPINGH0LXRgNC10LcgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INC00L4g0L/QvtCy0L3QvtCz0L4g0Lcg0LHQtdC30LTRgNC+0YLQvtCy0L7Qs9C+INC30LDRgNGP0LTQttC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i0J3QtdCy0ZbQtNC+0LzQviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmciIG1zZ2lkPSIxNzA1MTc5OTQ4MzUwMzY1NjA0Ij4i0JfQsNGA0Y/QtNC2LdGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+ItCX0LDRgNGP0LTQttCw0L3QvdGPINC3INGA0L7Qt9C10YLQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i0JfQsNGA0Y/QtNC20LDQvdC90Y8g0YfQtdGA0LXQtyBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+ItCX0LDRgNGP0LTQttCw0L3QvdGPINCx0LXQtyDQtNGA0L7RgtGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+ItCd0LUg0LfQsNGA0Y/QtNC20LDRlNGC0YzRgdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i0J3QtSDQt9Cw0YDRj9C00LbQsNGU0YLRjNGB0Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4i0JDQutGD0LzRg9C70Y/RgtC+0YAg0LfQsNGA0Y/QtNC20LXQvdC+Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ci1yUEsvYXJyYXlzLnhtbAppbmRleCA4MGZiNzUwLi5lMWZlMjY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXItclBLL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IuKAj9uB2YXbjNi024EgSERDUCDahtuM2qnZhtqvINin2LPYqti52YXYp9mEINqp2LHbjNq6IjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTA1NjExNzU0NTA4OTg4NDc2Ij4iMjU2SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjYzNjEyODY5MjQyNjg3MTYzOTciPiIxTSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMwMjU0MzEyMTEwMTM0MjQwOTciPiIxNk0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI4NjY1MjA2MTk5MjA5Njk4NTAxIj4i2KLZgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4i2KLZgSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+IuKAjzY0SyDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i4oCPMjU2SyDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i4oCPMU0g2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+IuKAjzRNINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLigI8xNk0g2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+Itii2YEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i4oCPNjRLINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLigI8yNTZLINmB24wg2YTYp9qvINio2YHYsSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLigI8xTSDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i4oCPNE0g2YHbjCDZhNin2q8g2KjZgdixIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+IuKAjzE2TSDZgduMINmE2KfaryDYqNmB2LEiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i2KfbjNmG24zZhduM2LTZhiDYotmBINuB25IiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAppbmRleCAzZjY1NjNiLi4wYTJhZGY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuKAj21hbmlmZXN0INin2YLYr9in2LEg2LPbkiDZgti32Lkg2YbYuNix2Iwg2qnYs9uMINio2r7bjCDYp9uM2b4g2qnZiCDYqNuM2LHZiNmG24wg2KfYs9m52YjYsduM2Kwg2b7YsSDZhNqp2r7bkiDYrNin2YbbkiDaqdinINin24HZhCDYqNmG2KfYqtinINuB25IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLYs9ix2q/YsdmF24zZiNq6INqp2Ygg2LHbjCDYs9in2KbYsiDYp9uM2KjZhCDYqNmG2KfYptuM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuKAj21hbmlmZXN0INin2YLYr9in2LEg2LPbkiDZgti32Lkg2YbYuNix2Iwg2YXZhNm524wg2YjZhtqI2Ygg2qnbjNmE2KbbkiDYqtmF2KfZhSDYs9ix2q/YsdmF24zZiNq6INqp2Ygg2LHbjCDYs9in2KbYsiDYp9uM2KjZhCDYqNmG2KfYqtinINuB25LblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuKAj2ZyZWVmb3JtINmI2YbaiNmI2LIg2YHYudin2YQg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydF9zdW1tYXJ5IiBtc2dpZD0iMjI1MjU2MzQ5NzQ4NTQzNjUzNCI+IuKAj9iq2KzYsdio2KfYqtuMIGZyZWVmb3JtINmI2YbaiNmI2LIg2qnbkiDZhNim25Ig2LPZvtmI2LHZuSDZgdi52KfZhCDaqdix2KrYpyDbgduS25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i2ojbjNiz2qkg2bnYp9m+INqp2Kcg2KjbjNqpINin2b4g2b7Yp9izINmI2LHaiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i2ojbjNiz2qkg2bnYp9m+INqp25Ig2YXaqdmF2YQg2KjbjNqpINin2b7YsyDZgduMINin2YTYrdin2YQg2YXYrdmB2YjYuCDaqduM25Ig24HZiNim25Ig2YbbgduM2rog24HbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+ItqI24zYs9qpINm52KfZviDaqduSINmF2qnZhdmEINio24zaqSDYp9m+2LMg2qnbjNmE2KbbkiDZvtin2LMg2YjYsdqIINqp2Ygg2KrYqNiv24zZhCDaqdix2YbbkiDbjNinINuB2bnYp9mG25Ig2qnbjNmE2KbbkiDZudqGINqp2LHbjNq6Ijwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLYutuM2LEg2YHYudin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLbgdmF24zYtNuBINii2YYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i2K7ZiNiv2qnYp9ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4i4oCPV2ViVmlldyDaqdinINmG2YHYp9iwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuKAj1dlYlZpZXcg2qnYpyDZhtmB2KfYsCDYs9uM2bkg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3Igc2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQgKDY2NzE0NzIwODA2NzEwNjY5NzIpIC0tPgorICAgIDxza2lwIC8+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbiIgbXNnaWQ9IjMwNjAxNTY3MzA2NTEwNjEyMjMiPiLZgdin2KbZhCDZhdix2YXZiNiyINqp2KfYsduMINmF24zauiDYqNiv2YTbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLYqNiv2YTbjNq64oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLZgdin2KbZhCDZvtuB2YTbkiDbgduMINmF2LHZhdmI2LIg2LTYr9uBINuB25IiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+Itix2YbaryDaqduMINin2LXZhNin2K0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+ItuM24Eg2K7YtdmI2LXbjNiqINiq2KzYsdio2KfYqtuMINuB25Ig2KfZiNixINin2LMg2qnbjCDZiNis24Eg2LPbkiDaqdin2qnYsdiv2q/bjCDZhdiq2KfYq9ixINuB2Ygg2LPaqdiq24wg24HbktuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiDaqduSINiw2LHbjNi524Eg2YXZhtiz2YjYriDaqdix2K/bjNinINqv24zYpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+IuKAj+KAjjx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz7igI4gLSDYqtmC2LHbjNio2KcgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+INio2KfZgtuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4i4oCOPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz7igI4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiLigI/igI48eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+4oCOINm+2YjYsdinINuB2YjZhtuSINiq2qkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiLigI/igI48eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IEFD4oCOINm+2LEg2b7ZiNix2Kcg24HZiNmG25Ig2KraqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+IuKAj+KAjjx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gVVNC4oCOINm+2LEg2b7ZiNix2Kcg24HZiNmG25Ig2KraqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+IuKAj+KAjjx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7igI4g2YjYp9im2LHZhNuM2LMg2LPbkiDZvtmI2LHYpyDbgdmI2YbbkiDYqtqpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c191bmtub3duIiBtc2dpZD0iMTk2MTMwNjAwOTM4MDU4NTQ3Ij4i2YbYp9mF2LnZhNmI2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+ItqG2KfYsdisINuB2Ygg2LHbgdinINuB25IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIiBtc2dpZD0iMjkwOTg2MTg5MDY3NDM5OTk0OSI+IuKAj0FDINm+2LEg2obYp9ix2Kwg24HZiCDYsduB24wg24HbkiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IuKAj+KAq1VTQiDZvtixINqG2KfYsdisINuB2YjYsduB24wg24HbkiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiIG1zZ2lkPSIzNTc0MDMyNjAzNzM1NDQ2NTczIj4i2YjYp9im2LHZhNuM2LMg2obYp9ix2KzZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+ItqG2KfYsdisINmG24HbjNq6INuB2Ygg2LHbgdinINuB25IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiLahtin2LHYrCDZhtuB24zauiDbgdmIINix24HYpyDbgduSIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+ItmF2qnZhdmEIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ei1yVVovYXJyYXlzLnhtbAppbmRleCBhODRjNWQ1Li41M2Q0ZGI3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdXotclVaL2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IkhhciBkb2ltIEhEQ1AgdGVrc2hpcnV2aWRhbiBmb3lkYWxhbmlsc2luIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV90aXRsZXMiPgotICAgIDxpdGVtIG1zZ2lkPSIzMTAwNTM0ODc0NTI5MjQwMjkxIj4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTYgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY0MDUyMDMyMzk1NjA2OTUyNjYiPiI0IE1CIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+Ik/igJhjaGlxIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTU5MzI4OTM3NjUwMjMxMjkyMyI+IjY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxODA4ODM3NzQ1MDk0NzY1NDEiPiI0IE1CIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzNTM0NzgyNzExMDQ1MjYyMzQ0Ij4iMjU2IEtCIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iT+KAmGNoaXEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjQgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjEgTUIiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiJCdWZlcjogbWFrcy4gNjQgS0IiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4iQnVmZXI6IG1ha3MuIDI1NiBLQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiJCdWZlcjogbWFrcy4gMSBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiJCdWZlcjogbWFrcy4gNCBNQiI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiJCdWZlcjogbWFrcy4gMTYgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iT+KAmGNoaXEiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4iQnVmZXI6IG1ha3MuIDY0IEtCIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IkJ1ZmVyOiBtYWtzLiAyNTYgS0IiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iQnVmZXI6IG1ha3MuIDEgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4iQnVmZXI6IG1ha3MuIDQgTUIiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iQnVmZXI6IG1ha3MuIDE2IE1CIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IkFuaW1hdHNpeWEgb+KAmGNoaXEiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy11ei1yVVovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbAppbmRleCA4MmU4ZGM2Li4xMzQ5NGE1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbApAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJkZXZlbG9wbWVudF9zZXR0aW5nc19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNDMwODU2OTA0MTcwMTUzNTYwNyI+IkJ1IGZveWRhbGFudXZjaGlnYSBkYXN0dXJjaGkgaW1rb25peWF0bGFyaSB0YXFkaW0gZXRpbG1hZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idnBuX3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI5NTY4NDE0MzAxNzY5ODU1OTgiPiJVc2hidSBmb3lkYWxhbnV2Y2hpIHVjaHVuIFZQTiBzb3psYW1hbGFyaSBtYXZqdWQgZW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InRldGhlcmluZ19zZXR0aW5nc19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNjc2NTc3MDQzODQzODI5MTAxMiI+IlVzaGJ1IGZveWRhbGFudXZjaGkgdWNodW4gTW9kZW0gcmVqaW1pIHNvemxhbWFsYXJpIG1hdmp1ZCBlbWFzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYXBuX3NldHRpbmdzX25vdF9hdmFpbGFibGUiIG1zZ2lkPSI3ODczNzI5MDMyMTY1MzI0MDAwIj4iVXNoYnUgZm95ZGFsYW51dmNoaSB1Y2h1biBVbGFuaXNoIG51cXRhc2kgbm9taSAoQVBOKSBzb3psYW1hbGFyaSBtYXZqdWQgZW1hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwbl9zZXR0aW5nc19ub3RfYXZhaWxhYmxlIiBtc2dpZD0iNzg3MzcyOTAzMjE2NTMyNDAwMCI+IlVzaGJ1IGZveWRhbGFudXZjaGkgdWNodW4gSW50ZXJuZXRnYSBraXJpc2ggbnVxdGFzaSAoQVBOKSBzb3psYW1hbGFyaSBtYXZqdWQgZW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9hZGIiIG1zZ2lkPSI3OTgyMzA2OTM0NDE5Nzk3NDg1Ij4iVVNCIG9ycWFsaSBub3Nvemxpa2xhcm5pIHR1emF0aXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2FkYl9zdW1tYXJ5IiBtc2dpZD0iNDg4MTE4Njk3MTc0NjA1NjYzNSI+IlVTQiBvcnFhbGkga29tcHl1dGVyZ2EgdWxhbmdhbmRhIHR1emF0aXNoIHJlamltaSB5b3FpbHNpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FkYl9rZXlzIiBtc2dpZD0iNDAzODg4OTIyMTUwMzEyMjc0MyI+IlVTQiBvcnFhbGkgbm9zb3psaWtsYXJuaSB0dXphdGlzaG5pIHRhcWlxbGFzaCI8L3N0cmluZz4KQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJNYW5pZmVzdCBxaXltYXRpZGFuIHFhdOKAmWkgbmF6YXIgaXN0YWxnYW4gaWxvdmFuaSB0YXNocWkgeG90aXJhZ2Egc2FxbGFzaCBpbWtvbmluaSBiZXJhZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiJIYXJha2F0bGFybmkgbW9zbGFzaHV2Y2hhbiBv4oCYbGNoYW1nYSBrZWx0aXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+Ik1hbmlmZXN0IHFpeW1hdGlkYW4gcWF04oCZaSBuYXphciBiYXJjaGEgaGFyYWthdGxhcm5pIGtv4oCYcCBveW5hbGkgcmVqaW1nYSBtb3NsYXNodGlyYWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IkVya2luIHNoYWtsZGFnaSBveW5hbGFybmkgeW9xaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJUYWpyaWJhdml5IGVya2luIHNoYWtsZGFnaSBveW5hbGFyIHRh4oCZbWlub3RpbmkgeW9xYWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IlpheGlyYSBudXN4YSB1Y2h1biBwYXJvbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iS29tcHl1dGVyZGFnaSB6YXhpcmEgbnVzeGFsYXIgaG96aXJnaSB2YXF0ZGEgaGltb3lhbGFubWFnYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iSXNoIHN0b2xpIHRvXCdsaXEgemF4aXJhIG51c3hhbGFyaSBwYXJvbGluaSBv4oCYemdhcnRpcmlzaCB5b2tpIG/igJhjaGlyaXNoIHVjaHVuIGJ1IHllcm5pIGJvc2luZy4iPC9zdHJpbmc+CkBAIC0yNzMsNiArMjc1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+Ik/igJhjaGlxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iSGFyIGRvaW0geW9uaXEgdHVyc2luIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IkF2dG9tYXRpayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcgdGHigJltaW5vdGNoaXNpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IldlYlZpZXcgdGHigJltaW5vdGNoaXNpbmkgc296bGFzaCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IkZheWxsaSBzaGlmcmdhIG/igJhnaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+Ik/igJhnaXJpc2jigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IkZheWwgYWxsYXFhY2hvbiBzaGlmcmxhbmdhbiI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iUmFuZ25pIHR1emF0aXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiJCdSBmdW5rc2l5YSB0YWpyaWJhdml5IGJv4oCYbGliLCB1IHF1cmlsbWEgdW51bWRvcmxpZ2lnYSB0YeKAmXNpciBxaWxpc2hpIG11bWtpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiI8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+IGJpbGFuIGFsbWFzaHRpcmlsZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyB0YXhtaW5hbiA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gcW9sZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+LCB0b+KAmGxndW5jaGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IOKAkyA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4sIG/igJh6Z2FydXZjaGFuIHRvayBvcnFhbGkgdG/igJhsZ3VuY2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiDigJMgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+LCBVU0Igb3JxYWxpIHRv4oCYbGd1bmNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4g4oCTIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiwgc2ltc2l6IHF1dnZhdGxhc2ggb3JxYWxpIHRv4oCYbGd1bmNoYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Ik5vbWHigJlsdW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IlF1dnZhdCBvbG1vcWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJRdXZ2YXQgb2xtb3FkYSAoQUMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4iUXV2dmF0IG9sbW9xZGEgKFVTQikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IlNpbXNpeiBxdXZ2YXQgb2xtb3FkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfZGlzY2hhcmdpbmciIG1zZ2lkPSIzMTA5MzI4MTI2OTgyNjg1ODgiPiJRdXZ2YXRsYW50aXJpbG1heWFwdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJRdXZ2YXRsYW5tYXlhcHRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IlRv4oCYbGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvYXJyYXlzLnhtbAppbmRleCA3YzMxODFmLi5iMDNkODQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy12aS9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiJMdcO0biBz4butIGThu6VuZyBraeG7g20gdHJhIEhEQ1AiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiJU4bqvdCI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVOG6r3QiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0NjIyNDYwMzMzMDM4NTg2NzkxIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjIxMjEyNTYyNTE2OTU4MjMzMCI+IjI1NksiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNzA0OTQ2NzY2Njk5MjQyNjUzIj4iMU0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjczNDY1OTU0NzM1ODg3NjUwMTkiPiI2NEsvbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4iMU0vbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjU3NDg1Mjg2NDM5Mzc1MDAzNDkiPiI0TS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IlThuq90IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0Sy9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+IjI1NksvbOG6p24gdOG6o2kgbmjhuq10IGvDvSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiIxTS9s4bqnbiB04bqjaSBuaOG6rXQga8O9IjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4iMTZNL2zhuqduIHThuqNpIG5o4bqtdCBrw70iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4iVOG6r3QgaMOsbmggxJHhu5luZyI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAppbmRleCBlNzNmOTI1Li44MWI4N2RhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJHacO6cCDhu6luZyBk4bulbmcgYuG6pXQga+G7syDEkeG7pyDEkWnhu4F1IGtp4buHbiDEkcaw4bujYyBnaGkgdsOgbyBi4buZIG5o4bubIG5nb8OgaSBi4bqldCBr4buDIGdpw6EgdHLhu4sgdOG7h3Aga8OqIGtoYWkgbMOgIGfDrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IkJ14buZYyBjw6FjIGhv4bqhdCDEkeG7mW5nIGPDsyB0aOG7gyB0aGF5IMSR4buVaSBrw61jaCB0aMaw4bubYyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4iR2nDunAgdOG6pXQgY+G6oyBob+G6oXQgxJHhu5luZyBjw7MgdGjhu4MgdGhheSDEkeG7lWkga8OtY2ggdGjGsOG7m2MgY2hvIG5oaeG7gXUgY+G7rWEgc+G7lSBi4bqldCBr4buDIGdpw6EgdHLhu4sgdOG7h3Aga8OqIGtoYWkgbMOgIGfDrC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfZnJlZWZvcm1fc3VwcG9ydCIgbXNnaWQ9IjE0NjE4OTMzNTEyNzg5NDA0MTYiPiJC4bqtdCBj4butYSBz4buVIGThuqFuZyB04buxIGRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJC4bqtdCB0w61uaCBuxINuZyBo4buXIHRy4bujIGPhu61hIHPhu5UgZOG6oW5nIHThu7EgZG8gdGjhu60gbmdoaeG7h20uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Ik3huq10IGto4bqpdSBzYW8gbMawdSBj4bunYSBtw6F5IHTDrW5oIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiJTYW8gbMawdSB0b8OgbiBi4buZIG3DoXkgdMOtbmggaGnhu4duIGtow7RuZyDEkcaw4bujYyBi4bqjbyB24buHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IkNo4bqhbSDEkeG7gyB0aGF5IMSR4buVaSBob+G6t2MgeMOzYSBt4bqtdCBraOG6qXUgZMOgbmggY2hvIGLhu5kgc2FvIGzGsHUgdG/DoG4gYuG7mSB04bubaSBtw6F5IHTDrW5oIjwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLEkMOjIHThuq90Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4iTHXDtG4gYuG6rXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4iVOG7sSDEkeG7mW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iVHJp4buDbiBraGFpIFdlYlZpZXciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4ixJDhurd0IHRyaeG7g24ga2hhaSBXZWJWaWV3Ijwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4iQ2h1eeG7g24gxJHhu5VpIHNhbmcgbcOjIGjDs2EgdOG7h3AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9lbmFibGVkIiBtc2dpZD0iMjg2MTI1ODY3MTE1MTQyODM0NiI+IkNodXnhu4NuIMSR4buVaS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4ixJDDoyBtw6MgaMOzYSB04buHcCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4iU+G7rWEgbcOgdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4iVMOtbmggbsSDbmcgbsOgeSBsw6AgdMOtbmggbsSDbmcgdGjhu60gbmdoaeG7h20gdsOgIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gaG/huqF0IMSR4buZbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iQuG7iyBnaGkgxJHDqCBi4bufaSA8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIGPDsm4ga2hv4bqjbmcgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGNobyDEkeG6v24ga2hpIMSR4bqneSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIiBtc2dpZD0iMzk2OTE4NjE5MjU3NjU5NDI1NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gY2hvIMSR4bq/biBraGkgxJHhuqd5IGtoaSBj4bqvbSB2w6BvIG5ndeG7k24gQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGNobyDEkeG6v24ga2hpIMSR4bqneSBxdWEgVVNCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBjaG8gxJHhur9uIGtoaSDEkeG6p3kgdOG7qyBraMO0bmcgZMOieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+Iktow7RuZyB4w6FjIMSR4buLbmgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IsSQYW5nIHPhuqFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ19hYyIgbXNnaWQ9IjI5MDk4NjE4OTA2NzQzOTk5NDkiPiJT4bqhYyB0csOqbiBBQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+IlPhuqFjIHF1YSBVU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+IlPhuqFjIGtow7RuZyBkw6J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+Ikhp4buHbiBraMO0bmcgc+G6oWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX25vdF9jaGFyZ2luZyIgbXNnaWQ9IjI4MjAwNzA1MDY2MjE0ODM1NzYiPiJIaeG7h24ga2jDtG5nIHPhuqFjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IsSQ4bqneSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckNOL2FycmF5cy54bWwKaW5kZXggMTM3OGFhYS4uZDFkODkzNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJDTi9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLlp4vnu4jkvb/nlKggSERDUCDmo4Dmn6UiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLlhbPpl60iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IuWFs+mXrSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+Iuavj+S4quaXpeW/l+e8k+WGsuWMujY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiLmr4/kuKrml6Xlv5fnvJPlhrLljLoyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjY5OTMwNjE5ODM1NzQ5NjczMSI+Iuavj+S4quaXpeW/l+e8k+WGsuWMujFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+Iuavj+S4quaXpeW/l+e8k+WGsuWMujRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+Iuavj+S4quaXpeW/l+e8k+WGsuWMujE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjY5MjEwNDg4Mjk3OTExNzkzMzEiPiLlhbPpl60iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyOTY5NDU4MDI5MzQ0NzUwMjYyIj4i5q+P5Liq5pel5b+X57yT5Yay5Yy6IDY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzNDIyODUxMTU2NjU2OTgxNjgiPiLmr4/kuKrml6Xlv5fnvJPlhrLljLogMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjEzMTQyMzQyOTk1NTIyNTQ2MjEiPiLmr4/kuKrml6Xlv5fnvJPlhrLljLogMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIzNjA2MDQ3NzgwNzkyODk0MTUxIj4i5q+P5Liq5pel5b+X57yT5Yay5Yy6IDRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNTQzMTM1NDk1Njg1NjY1NTEyMCI+Iuavj+S4quaXpeW/l+e8k+WGsuWMuiAxNk0iPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJ3aW5kb3dfYW5pbWF0aW9uX3NjYWxlX2VudHJpZXMiPgogICAgIDxpdGVtIG1zZ2lkPSI4MTM0MTU2NTk5MzcwODI0MDgxIj4i5YWz6Zet5Yqo55S7IjwvaXRlbT4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKaW5kZXggODg2YTdjZS4uNWZmY2MwYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLlhYHorrjlsIbku7vkvZXlupTnlKjlhpnlhaXlpJbpg6jlrZjlgqjorr7lpIfvvIjml6DorrrmuIXljZXlgLzmmK/ku4DkuYjvvIkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLlvLrliLblsIbmtLvliqjorr7kuLrlj6/osIPmlbTlpKflsI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuWwhuaJgOaciea0u+WKqOiuvuS4uuWPr+mFjeWQiOWkmueql+WPo+eOr+Wig+iwg+aVtOWkp+Wwj++8iOaXoOiuuua4heWNleWAvOaYr+S7gOS5iO+8ieOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuWQr+eUqOWPr+iHqueUseiwg+aVtOeahOeql+WPoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i5ZCv55So5Y+v6Ieq55Sx6LCD5pW055qE56qX5Y+j6L+Z5LiA5a6e6aqM5oCn5Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+IuahjOmdouWkh+S7veWvhueggSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i5qGM6Z2i5a6M5pW05aSH5Lu95b2T5YmN5pyq6K6+572u5a+G56CB5L+d5oqkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+IuinpuaRuOWPr+abtOaUueaIluWIoOmZpOeUqOS6juahjOmdouWujOaVtOWkh+S7veeahOWvhueggSI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i5bey5YGc55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i5aeL57uI5byA5ZCvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuiHquWKqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg5a6e546wIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+Iuiuvue9riBXZWJWaWV3IOWunueOsCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+Iui9rOaNouS4uuaWh+S7tuWKoOWvhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i6L2s5o2i4oCmIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLmlofku7blt7LliqDlr4YiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuiJsuW9qeagoeatoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i5q2k5Yqf6IO95Li65a6e6aqM5oCn5Yqf6IO977yM5Y+v6IO95Lya5b2x5ZON5oCn6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i5bey6KKr4oCcPHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPuKAneimhuebliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDov5jlj6/nlKjlpKfnuqY8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDov5jpnIA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7lhYXmu6EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0g6L+Y6ZyAPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+5YWF5ruh77yI5Lqk5rWB55S15YWF55S177yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOi/mOmcgDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPuWFhea7oe+8iFVTQuWFheeUte+8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDov5jpnIA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7lhYXmu6HvvIjml6Dnur/lhYXnlLXvvIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLmnKrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+Iuato+WcqOWFheeUtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i5q2j5Zyo6YCa6L+H5Lqk5rWB55S15rqQ5YWF55S1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ191c2IiIG1zZ2lkPSIyMjA3NDg5MzY5NjgwOTIzOTI5Ij4i5q2j5Zyo6YCa6L+HVVNC5YWF55S1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLmraPlnKjml6Dnur/lhYXnlLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i5pyq5Zyo5YWF55S1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i5pyq5Zyo5YWF55S1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+IueUtemHj+WFhei2syI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtckhLL2FycmF5cy54bWwKaW5kZXggZjE1Y2FmZi4uYTdiMDAzMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJISy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLmsLjpgaDkvb/nlKggSERDUCDmqqLmn6UiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLpl5zplokiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IumXnOmWiSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+Iuavj+WAi+iomOmMhOe3qeihneWNgCA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+Iuavj+WAi+iomOmMhOe3qeihneWNgCA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IumXnOmWiSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+Iuavj+WAi+iomOmMhOe3qeihneWNgCAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+Iuavj+WAi+iomOmMhOe3qeihneWNgCAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLmr4/lgIvoqJjpjITnt6nooZ3ljYAgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i5q+P5YCL6KiY6YyE57ep6KGd5Y2AIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLpl5zplonli5XnlasiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1ySEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAppbmRleCBhZmJkYjMxLi44ZWVkZjZkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9hbGxvd19vbl9leHRlcm5hbF9zdW1tYXJ5IiBtc2dpZD0iMzE5MTk1MjUwNTg2MDM0MzIzMyI+IuWFgeioseWwh+aJgOacieaHieeUqOeoi+W8j+Wvq+WFpeWIsOWklumDqOWEsuWtmOWujOmWkyAo5omA5pyJ6LOH6KiK5riF5Zau5YC8KSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzIiBtc2dpZD0iODYxNTc2NDM3ODE0NzgyNDk4NSI+IuW8t+WItuWPr+iuiuabtOa0u+WLleWwuuWvuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiIG1zZ2lkPSI0NTA4MjE3NDc2OTk3MTgyMjE2Ij4i5Zyo5Lu75L2V6LOH6KiK5riF5Zau5YC85LiL77yM5YWB6Kix54K65aSa5YCL6KaW56qX6K6K5pu05omA5pyJ5rS75YuV55qE5bC65a+444CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnQiIG1zZ2lkPSIxNDYxODkzMzUxMjc4OTQwNDE2Ij4i5ZWf55So6Ieq55Sx5b2i5oWL6KaW56qXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiLllZ/nlKjlr6bpqZfniYjoh6rnlLHlvaLmhYvoppbnqpfnmoTmlK/mj7Tlip/og73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiIG1zZ2lkPSIzODYwNDcxNjU0NDM5NDE4ODIyIj4i5qGM6Z2i6Zu76IWm5YKZ5Lu95a+G56K8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfbm9uZSIgbXNnaWQ9IjY5NTEwOTU0ODU1Mzc3Njc5NTYiPiLmoYzkuIrpm7vohabnmoTlrozmlbTlgpnku73nm67liY3mnKrlj5fkv53orbciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4i6LyV6Ke45Y2z5Y+v5pu05pS55oiW56e76Zmk5qGM5LiK6Zu76IWm5a6M5pW05YKZ5Lu955qE5a+G56K8Ijwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9ubyIgbXNnaWQ9IjkxNzE3NzIyNDQ3NzU4Mzg5MDEiPiLlt7LlgZznlKgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiLmsLjpgaDplovllZ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX2F1dG8iIG1zZ2lkPSI3NTA4MzQ4MTc1ODA0MzA0MzI3Ij4i6Ieq5YuVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfdGl0bGUiIG1zZ2lkPSI0NjI4NTkyOTc5NzUxOTE4OTA3Ij4iV2ViVmlldyDoqK3nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiIG1zZ2lkPSI0MzcwNTUxMzc4NzIwMDA0ODcyIj4i6Kit5a6aIFdlYlZpZXcg6Kit572uIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0ICg2NjcxNDcyMDgwNjcxMDY2OTcyKSAtLT4KKyAgICA8c2tpcCAvPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb24iIG1zZ2lkPSIzMDYwMTU2NzMwNjUxMDYxMjIzIj4i6L2J5o+b54K65qqU5qGI5Yqg5a+GIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZW5hYmxlZCIgbXNnaWQ9IjI4NjEyNTg2NzExNTE0MjgzNDYiPiLovYnmj5vigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjb252ZXJ0X3RvX2ZpbGVfZW5jcnlwdGlvbl9kb25lIiBtc2dpZD0iNzg1OTc2NjM1ODAwMDUyMzk1MyI+IuW3suWKoOWvhuaqlOahiCI8L3N0cmluZz4KQEAgLTI4OSw0ICsyOTUsMTggQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2VfdGl0bGUiIG1zZ2lkPSI1ODAwNzYxMzYyNjc4NzA3ODcyIj4i6Imy5b2p5qCh5q2jIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kaXNwbGF5X2RhbHRvbml6ZXJfcHJlZmVyZW5jZV9zdWJ0aXRsZSIgbXNnaWQ9IjM0ODQ5NjkwMTUyOTUyODI5MTEiPiLpgJnmmK/kuIDpoIXlr6bpqZfmgKflip/og73vvIzlj6/og73mnIPlvbHpn7/mlYjog73jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYWx0b25pemVyX3R5cGVfb3ZlcnJpZGRlbiIgbXNnaWQ9IjMxMTY5NDcyNDQ0MTAyNDU5MTYiPiLlt7LnlLHjgIw8eGxpZmY6ZyBpZD0iVElUTEUiPiUxJHM8L3hsaWZmOmc+44CN6KaG5a+rIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIxNjA1OTI5MTc0NzM0NjAwNTkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIOWwmumkmOWkp+e0hCA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZyIgbXNnaWQ9IjE3Nzk1MzI1NjEzNTU4NjQyNjciPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlNUQVRFIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMjg1MzI2NTE3Nzc2MTUyMDQ5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4g5b6M5a6M5oiQ5YWF6Zu7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDlvozlrozmiJDlhYXpm7sgKOmAj+mBjuaPkumgreWFhembuykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl91c2IiIG1zZ2lkPSIxODI0MDU2NDUzNDA5NzY1NDYiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IOW+jOWujOaIkOWFhembuyAo6YCP6YGOIFVTQiDlhYXpm7spIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiIG1zZ2lkPSIxODI5Mjk1NzA4MjQzMTU5NDY0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiDlvozlrozmiJDlhYXpm7sgKOeEoee3muWFhembuykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLmnKrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuWFhembu+S4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i5q2j5Zyo6YCP6YGOIEFDIOWFhembuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Iuato+WcqOmAj+mBjiBVU0Ig5YWF6Zu7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLmraPlnKjpgI/pgY7nhKHnt5rmlrnlvI/lhYXpm7siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i6Z2e5YWF6Zu75LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i5pyq6ZaL5aeL5YWF6Zu7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Iumbu+mHj+W3sua7vyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtemgtclRXL2FycmF5cy54bWwKaW5kZXggNTBiZGU4MC4uMzJhMjA2NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJUVy9hcnJheXMueG1sCkBAIC01OSwyMyArNTksMjYgQEAKICAgICA8aXRlbSBtc2dpZD0iNDUwNzU2MzEyMzEyMTI3MzIiPiLkuIDlvovkvb/nlKggSERDUCDmqqLmn6UiPC9pdGVtPgogICA8L3N0cmluZy1hcnJheT4KICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjMxMDA1MzQ4NzQ1MjkyNDAyOTEiPiI2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1MDU2MTE3NTQ1MDg5ODg0NzYiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjM2MTI4NjkyNDI2ODcxNjM5NyI+IjFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNjQwNTIwMzIzOTU2MDY5NTI2NiI+IjRNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzAyNTQzMTIxMTAxMzQyNDA5NyI+IjE2TSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9Ijg2NjUyMDYxOTkyMDk2OTg1MDEiPiLpl5zplokiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxNTkzMjg5Mzc2NTAyMzEyOTIzIj4iNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDg3NTQ1MzQwMjM2MTQ1MzI0Ij4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI0MjM1Mjg2NzUyOTQzMzM4MzEiPiIxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE4MDg4Mzc3NDUwOTQ3NjU0MSI+IjRNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjgwMzE5OTEwMjU4OTEyNjkzOCI+IjE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfbG93cmFtX3RpdGxlcyI+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUyNDc5OTM5NTc3MDYxMDE1NCI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjM1MzQ3ODI3MTEwNDUyNjIzNDQiPiIyNTZLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iODA4NTg2NzIwOTIwMjE1MzQwMyI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjA4OTQ3MDcyMDQ1MTA2ODM2NCI+IumXnOmWiSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjQ2MjI0NjAzMzMwMzg1ODY3OTEiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyMjEyMTI1NjI1MTY5NTgyMzMwIj4iMjU2SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE3MDQ5NDY3NjY2OTkyNDI2NTMiPiIxTSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfc3VtbWFyaWVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNzM0NjU5NTQ3MzU4ODc2NTAxOSI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCA2NEsiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIyODIyMzA5NzQ3Njc1NzU4NjI4Ij4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2Njk5MzA2MTk4MzU3NDk2NzMxIj4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDFNIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iNTc0ODUyODY0MzkzNzUwMDM0OSI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCA0TSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjE5Nzg2MjkwNTEwODUxMTE1OTIiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNjkyMTA0ODgyOTc5MTE3OTMzMSI+IumXnOmWiSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjI5Njk0NTgwMjkzNDQ3NTAyNjIiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgNjRLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTM0MjI4NTExNTY2NTY5ODE2OCI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCAyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTMxNDIzNDI5OTU1MjI1NDYyMSI+Iuavj+WAi+e0gOmMhOe3qeihneWNgCAxTSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjM2MDYwNDc3ODA3OTI4OTQxNTEiPiLmr4/lgIvntIDpjITnt6nooZ3ljYAgNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI1NDMxMzU0OTU2ODU2NjU1MTIwIj4i5q+P5YCL57SA6YyE57ep6KGd5Y2AIDE2TSI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9IndpbmRvd19hbmltYXRpb25fc2NhbGVfZW50cmllcyI+CiAgICAgPGl0ZW0gbXNnaWQ9IjgxMzQxNTY1OTkzNzA4MjQwODEiPiLpl5zplonli5XnlasiPC9pdGVtPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCA4ODEwOWEyLi4xMGQyZTAxZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiLlhYHoqLHlsIfku7vkvZXmh4nnlKjnqIvlvI/lr6vlhaXlpJbpg6jlhLLlrZjnqbrplpMgKOeEoeirluizh+ioiua4heWWruWAvOeCuuS9lSkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllcyIgbXNnaWQ9Ijg2MTU3NjQzNzgxNDc4MjQ5ODUiPiLlsIfmtLvli5XlvLfliLboqK3ngrrlj6/oqr/mlbTlpKflsI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJmb3JjZV9yZXNpemFibGVfYWN0aXZpdGllc19zdW1tYXJ5IiBtc2dpZD0iNDUwODIxNzQ3Njk5NzE4MjIxNiI+IuWwh+aJgOaciea0u+WLleioreeCuuWPr+mFjeWQiOWkmumHjeimlueql+eSsOWig+iqv+aVtOWkp+WwjyAo54Sh6KuW6LOH6KiK5riF5Zau5YC854K65L2VKeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+IuWVn+eUqOiHqueUseW9ouW8j+imlueqlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiIG1zZ2lkPSIyMjUyNTYzNDk3NDg1NDM2NTM0Ij4i5ZWf55So5a+m6amX54mI6Ieq55Sx5b2i5byP6KaW56qX55qE5pSv5o+05Yqf6IO944CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3RpdGxlIiBtc2dpZD0iMzg2MDQ3MTY1NDQzOTQxODgyMiI+Iumbu+iFpuWCmeS7veWvhueivCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4i6Zu76IWm5a6M5pW05YKZ5Lu955uu5YmN5pyq5Y+X5L+d6K23Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibG9jYWxfYmFja3VwX3Bhc3N3b3JkX3N1bW1hcnlfY2hhbmdlIiBtc2dpZD0iMjczMTE2MzQyNTA4MTE3MjYzOCI+Iui8leinuOWNs+WPr+iuiuabtOaIluenu+mZpOmbu+iFpuWujOaVtOWCmeS7veeahOWvhueivCI8L3N0cmluZz4KQEAgLTI3Myw2ICsyNzUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfbm8iIG1zZ2lkPSI5MTcxNzcyMjQ0Nzc1ODM4OTAxIj4i5bey5YGc55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV95ZXMiIG1zZ2lkPSIyMjE4MTU3MjY1OTk3NjMzNDMyIj4i5LiA5b6L6ZaL5ZWfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+IuiHquWLlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX3RpdGxlIiBtc2dpZD0iNDYyODU5Mjk3OTc1MTkxODkwNyI+IldlYlZpZXcg5a+m5L2cIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IuioreWumiBXZWJWaWV3IOWvpuS9nCI8L3N0cmluZz4KKyAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9jb25maXJtYXRpb25fdGV4dCAoNjY3MTQ3MjA4MDY3MTA2Njk3MikgLS0+CisgICAgPHNraXAgLz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+Iui9ieaPm+aIkOaqlOahiOWKoOWvhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4i6L2J5o+bLi4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY29udmVydF90b19maWxlX2VuY3J5cHRpb25fZG9uZSIgbXNnaWQ9Ijc4NTk3NjYzNTgwMDA1MjM5NTMiPiLlt7LlsIfmqpTmoYjliqDlr4YiPC9zdHJpbmc+CkBAIC0yODksNCArMjk1LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IuiJsuW9qeagoeatoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGlzcGxheV9kYWx0b25pemVyX3ByZWZlcmVuY2Vfc3VidGl0bGUiIG1zZ2lkPSIzNDg0OTY5MDE1Mjk1MjgyOTExIj4i6YCZ5piv5LiA6aCF5a+m6amX5oCn5Yqf6IO977yM5Y+v6IO95pyD5bCN5pWI6IO96YCg5oiQ5b2x6Z+/44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4i5bey5pS554K6PHhsaWZmOmcgaWQ9IlRJVExFIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIiBtc2dpZD0iMTYwNTkyOTE3NDczNDYwMDU5MCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSDlpKfntITpgoTliakgPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmciIG1zZ2lkPSIxNzc5NTMyNTYxMzU1ODY0MjY3Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJTVEFURSI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjI4NTMyNjUxNzc3NjE1MjA0OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+5b6M5YWF6aO9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWMiIG1zZ2lkPSIzOTY5MTg2MTkyNTc2NTk0MjU0Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPuW+jOWFhemjvSAoQUMpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIiBtc2dpZD0iMTgyNDA1NjQ1MzQwOTc2NTQ2Ij4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPuW+jOWFhemjvSAoVVNCKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz7lvozlhYXpo70gKOeEoee3muWFhembuykiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24iIG1zZ2lkPSIxOTYxMzA2MDA5MzgwNTg1NDciPiLkuI3mmI4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nIiBtc2dpZD0iMTcwNTE3OTk0ODM1MDM2NTYwNCI+IuWFhembu+S4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4i5q2j5Zyo6YCP6YGOIEFDIOiuiuWjk+WZqOWFhembuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIiBtc2dpZD0iMjIwNzQ4OTM2OTY4MDkyMzkyOSI+Iuato+WcqOmAj+mBjiBVU0Ig5YWF6Zu7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZ193aXJlbGVzcyIgbXNnaWQ9IjM1NzQwMzI2MDM3MzU0NDY1NzMiPiLmraPlnKjpgI/pgY7nhKHnt5rmlrnlvI/lhYXpm7siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nIiBtc2dpZD0iMzEwOTMyODEyNjk4MjY4NTg4Ij4i6Z2e5YWF6Zu75LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4i6Z2e5YWF6Zu75LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIiBtc2dpZD0iMjgyNDYxNDc1Mzg2MTQ2MjgwOCI+Iumbu+WKm+WFhei2syI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9hcnJheXMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9hcnJheXMueG1sCmluZGV4IGVhYWRjZTYuLjJiYjg0OWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtenUvYXJyYXlzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L2FycmF5cy54bWwKQEAgLTU5LDIzICs1OSwyNiBAQAogICAgIDxpdGVtIG1zZ2lkPSI0NTA3NTYzMTIzMTIxMjczMiI+IlNlYmVuemlzYSBuamFsbyB1a3VobG9sYSBrd2UtSERQQyI8L2l0ZW0+CiAgIDwvc3RyaW5nLWFycmF5PgogICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iMzEwMDUzNDg3NDUyOTI0MDI5MSI+IjY0SyI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjUwNTYxMTc1NDUwODk4ODQ3NiI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2MzYxMjg2OTI0MjY4NzE2Mzk3Ij4iMU0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI2NDA1MjAzMjM5NTYwNjk1MjY2Ij4iNE0iPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSIzMDI1NDMxMjExMDEzNDI0MDk3Ij4iMTZNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iODY2NTIwNjE5OTIwOTY5ODUwMSI+IlZhbGl3ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjE1OTMyODkzNzY1MDIzMTI5MjMiPiI2NEsiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI0ODc1NDUzNDAyMzYxNDUzMjQiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjQyMzUyODY3NTI5NDMzMzgzMSI+IjFNIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTgwODgzNzc0NTA5NDc2NTQxIj4iNE0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIyODAzMTk5MTAyNTg5MTI2OTM4Ij4iMTZNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KLSAgICA8aXRlbSBtc2dpZD0iNTI0Nzk5Mzk1NzcwNjEwMTU0Ij4iNjRLIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMzUzNDc4MjcxMTA0NTI2MjM0NCI+IjI1NksiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI4MDg1ODY3MjA5MjAyMTUzNDAzIj4iMU0iPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2MDg5NDcwNzIwNDUxMDY4MzY0Ij4iVmFsaXdlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iNDYyMjQ2MDMzMzAzODU4Njc5MSI+IjY0SyI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjIyMTIxMjU2MjUxNjk1ODIzMzAiPiIyNTZLIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMTcwNDk0Njc2NjY5OTI0MjY1MyI+IjFNIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9zdW1tYXJpZXMiPgotICAgIDxpdGVtIG1zZ2lkPSI3MzQ2NTk1NDczNTg4NzY1MDE5Ij4iNjRLIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjI4MjIzMDk3NDc2NzU3NTg2MjgiPiIyNTZLIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+Ci0gICAgPGl0ZW0gbXNnaWQ9IjY2OTkzMDYxOTgzNTc0OTY3MzEiPiIxTSBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgotICAgIDxpdGVtIG1zZ2lkPSI1NzQ4NTI4NjQzOTM3NTAwMzQ5Ij4iNE0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpbnllIjwvaXRlbT4KLSAgICA8aXRlbSBtc2dpZD0iMTk3ODYyOTA1MTA4NTExMTU5MiI+IjE2TSBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSI2OTIxMDQ4ODI5NzkxMTc5MzMxIj4iVmFsaXdlIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMjk2OTQ1ODAyOTM0NDc1MDI2MiI+IjY0SyBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzQyMjg1MTE1NjY1Njk4MTY4Ij4iMjU2SyBuZ2ViaGFmYSB5ZWxvZ3UgbmdheWlueWUiPC9pdGVtPgorICAgIDxpdGVtIG1zZ2lkPSIxMzE0MjM0Mjk5NTUyMjU0NjIxIj4iMU0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpIjwvaXRlbT4KKyAgICA8aXRlbSBtc2dpZD0iMzYwNjA0Nzc4MDc5Mjg5NDE1MSI+IjRNIG5nZWJoYWZhIHllbG9ndSBuZ2F5aW55ZSI8L2l0ZW0+CisgICAgPGl0ZW0gbXNnaWQ9IjU0MzEzNTQ5NTY4NTY2NTUxMjAiPiIxNk0gbmdlYmhhZmEgeWVsb2d1IG5nYXlpbnllIjwvaXRlbT4KICAgPC9zdHJpbmctYXJyYXk+CiAgIDxzdHJpbmctYXJyYXkgbmFtZT0id2luZG93X2FuaW1hdGlvbl9zY2FsZV9lbnRyaWVzIj4KICAgICA8aXRlbSBtc2dpZD0iODEzNDE1NjU5OTM3MDgyNDA4MSI+IklzaXRob21iZSBlc2lueWFrYXpheW8gc2l2bGl3ZSI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbAppbmRleCA2OWMzYzIxLi5mNDJhYmJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKQEAgLTI0Nyw2ICsyNDcsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfYWxsb3dfb25fZXh0ZXJuYWxfc3VtbWFyeSIgbXNnaWQ9IjMxOTE5NTI1MDU4NjAzNDMyMzMiPiJZZW56YSBub21hIHVsdXBoaSB1aGxlbG8gbG9rdXNlYmVuemEgbGlmYW5lbGVrZSB1a3V0aGkgbGliaGFsd2Uga3VzaXRvcmVqaSBzYW5nYXBoYW5kbGUsIG5nYXBoYW5kbGUga3dhbWF2ZWx1IHdlLW1hbmlmZXN0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXMiIG1zZ2lkPSI4NjE1NzY0Mzc4MTQ3ODI0OTg1Ij4iSW1pc2ViZW56aSB5YW1hbmRsYSBpem9uaWtlendhIHVzYXlpemkgb211c2hhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZm9yY2VfcmVzaXphYmxlX2FjdGl2aXRpZXNfc3VtbWFyeSIgbXNnaWQ9IjQ1MDgyMTc0NzY5OTcxODIyMTYiPiJZZW56YSB5b25rZSBpbWlzZWJlbnppIGliZSBub3NheWl6aSBhYmFzaGEga3V3aW5kaSBsb2t1bmluZ2ksIG5nb2t1bmdhbmFraSBhbWFuYW5pIHdlLW1hbmlmZXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0IiBtc2dpZD0iMTQ2MTg5MzM1MTI3ODk0MDQxNiI+Ik5pa2EgYW1hbmRsYSBhbWF3aW5kaSBlLWZyZWVmb3JtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2ZyZWVmb3JtX3N1cHBvcnRfc3VtbWFyeSIgbXNnaWQ9IjIyNTI1NjM0OTc0ODU0MzY1MzQiPiJJbmlrYSBhbWFuZGxhIHVzZWtlbG8gbHdhbWF3aW5kaSBva3VobG9sYSBlLWZyZWVmb3JtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF90aXRsZSIgbXNnaWQ9IjM4NjA0NzE2NTQ0Mzk0MTg4MjIiPiJJcGhhc2l3ZWRpIHlva3VzZWtlbGEgbmdva3Vsb25kb2xvemEgeWUtRGVza3RvcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImxvY2FsX2JhY2t1cF9wYXNzd29yZF9zdW1tYXJ5X25vbmUiIG1zZ2lkPSI2OTUxMDk1NDg1NTM3NzY3OTU2Ij4iVWt1c2VrZWxhIG5nb2t1bG9uZG9sb3phIG9rdWdjd2VsZSBrd2UtRGVza3RvcCBha3V2aWtlbGVraWxlIG9rd2FtYW5qZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfc3VtbWFyeV9jaGFuZ2UiIG1zZ2lkPSIyNzMxMTYzNDI1MDgxMTcyNjM4Ij4iS2hldGhhIHVrdXNoaW50c2hhIG5vbWEgdWt1c3VzYSBpcGhhc2l3ZWRpIHlva3dlbnppd2Ega3dlemlwZWxlIG5nb2t1Z2N3ZWxlIGt3aWRlc2tpdGhvcGh1Ijwvc3RyaW5nPgpAQCAtMjczLDYgKzI3NSw5IEBACiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX25vIiBtc2dpZD0iOTE3MTc3MjI0NDc3NTgzODkwMSI+Ikt1a2h1dHNoYXppd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJuaWdodF9tb2RlX3llcyIgbXNnaWQ9IjIyMTgxNTcyNjU5OTc2MzM0MzIiPiJOamFsbyBpdnVsaXdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibmlnaHRfbW9kZV9hdXRvIiBtc2dpZD0iNzUwODM0ODE3NTgwNDMwNDMyNyI+Ik9rdXplbnpha2FsZWxheW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSIgbXNnaWQ9IjQ2Mjg1OTI5Nzk3NTE5MTg5MDciPiJVa3VmYWt3YSBrZS1XZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfZGlhbG9nX3RpdGxlIiBtc2dpZD0iNDM3MDU1MTM3ODcyMDAwNDg3MiI+IlNlc2JhIHVrdWZha3dhIGt3ZS1XZWJWaWV3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2VsZWN0X3dlYnZpZXdfcHJvdmlkZXJfY29uZmlybWF0aW9uX3RleHQiIG1zZ2lkPSI2NjcxNDcyMDgwNjcxMDY2OTcyIj4iVWt1c2V0c2hlbnppc3dhIGt3ZS1XZWJWaWV3IG9rdWtoZXRoaXdlIGt1a2h1dHNoYXppd2UsIGZ1dGhpIGt1em9tZWxlIGt1bmlrd2UgYW1hbmRsYSB1a3V6ZSBrdXNldHNoZW56aXN3ZSwgaW5nYWJlIHVmaXNhIHVrdWt1bmlrYSBhbWFuZGxhPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIiBtc2dpZD0iMzA2MDE1NjczMDY1MTA2MTIyMyI+IlBoZW5kdWxpc2VsYSBla3ViZXRoZWx3ZW5pIGt3ZWZheWVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2VuYWJsZWQiIG1zZ2lkPSIyODYxMjU4NjcxMTUxNDI4MzQ2Ij4iSXlhcGhlbmR1bGVsYS4uLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uX2RvbmUiIG1zZ2lkPSI3ODU5NzY2MzU4MDAwNTIzOTUzIj4iU2VrdXZlbGUga3ViZXRoZWx3ZSBuZ2VmYXllbGEiPC9zdHJpbmc+CkBAIC0yODksNCArMjk0LDE4IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3RpdGxlIiBtc2dpZD0iNTgwMDc2MTM2MjY3ODcwNzg3MiI+IlVrdWx1bmdpc3dhIGtvbWJhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rpc3BsYXlfZGFsdG9uaXplcl9wcmVmZXJlbmNlX3N1YnRpdGxlIiBtc2dpZD0iMzQ4NDk2OTAxNTI5NTI4MjkxMSI+Ikxlc2kgc2ljaSBlc2VzaWxpbmdvIGZ1dGhpIHNpbmdhdGhpbnRhIHVrdXNlYmVuemEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iIG1zZ2lkPSIzMTE2OTQ3MjQ0NDEwMjQ1OTE2Ij4iSWdpdHNoZXp3ZSBuZ2FwaGV6dWx1IHlpLTx4bGlmZjpnIGlkPSJUSVRMRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9kaXNjaGFyZ2luZ19kdXJhdGlvbiIgbXNnaWQ9IjE2MDU5MjkxNzQ3MzQ2MDA1OTAiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gaXNpbGluZ2FuaXNvIGVzaW5ndS08eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4gZXNpc2VsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIiBtc2dpZD0iMTc3OTUzMjU2MTM1NTg2NDI2NyI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iU1RBVEUiPiUyJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb24iIG1zZ2lkPSIyODUzMjY1MTc3NzYxNTIwNDkwIj4iPHhsaWZmOmcgaWQ9IkxFVkVMIj4lMSRzPC94bGlmZjpnPiAtIDx4bGlmZjpnIGlkPSJUSU1FIj4lMiRzPC94bGlmZjpnPiBrdXplIGlnY3dhbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbl9hYyIgbXNnaWQ9IjM5NjkxODYxOTI1NzY1OTQyNTQiPiI8eGxpZmY6ZyBpZD0iTEVWRUwiPiUxJHM8L3hsaWZmOmc+IC0gPHhsaWZmOmcgaWQ9IlRJTUUiPiUyJHM8L3hsaWZmOmc+IGt1emUgaWdjd2FsZSBrdS1BQyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3VzYiIgbXNnaWQ9IjE4MjQwNTY0NTM0MDk3NjU0NiI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4ga3V6ZSBpZ2N3YWxlIG5nYXBoZXp1bHUga3dlLVVTQiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX3dpcmVsZXNzIiBtc2dpZD0iMTgyOTI5NTcwODI0MzE1OTQ2NCI+Ijx4bGlmZjpnIGlkPSJMRVZFTCI+JTEkczwveGxpZmY6Zz4gLSA8eGxpZmY6ZyBpZD0iVElNRSI+JTIkczwveGxpZmY6Zz4ga3V6ZSBpZ2N3YWxlIGt1c3VrZWxhIGtva3VuZ2VuYW50YW1ibyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biIgbXNnaWQ9IjE5NjEzMDYwMDkzODA1ODU0NyI+IkFrd2F6aXdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyIgbXNnaWQ9IjE3MDUxNzk5NDgzNTAzNjU2MDQiPiJJeWFzaGFqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWMiIG1zZ2lkPSIyOTA5ODYxODkwNjc0Mzk5OTQ5Ij4iSXlhc2hhamEga3UtQUMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3VzYiIgbXNnaWQ9IjIyMDc0ODkzNjk2ODA5MjM5MjkiPiJJeWFzaGFqYSBuZ2FwaGV6dWx1IGt3ZS1VU0IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX3dpcmVsZXNzIiBtc2dpZD0iMzU3NDAzMjYwMzczNTQ0NjU3MyI+Ikl5YXNoYWphIG5nYXBoYW5kbGUga3dlbnRhbWJvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyIgbXNnaWQ9IjMxMDkzMjgxMjY5ODI2ODU4OCI+IkF5aXNoYWppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19ub3RfY2hhcmdpbmciIG1zZ2lkPSIyODIwMDcwNTA2NjIxNDgzNTc2Ij4iQXlpc2hhamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwiIG1zZ2lkPSIyODI0NjE0NzUzODYxNDYyODA4Ij4iS3VnY3dlbGUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAppbmRleCA0ZTg4YzFjLi4xYmNlN2Y5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL2FycmF5cy54bWwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9hcnJheXMueG1sCkBAIC0xMDIsNiArMTAyLDcgQEAKIAogICAgIDwhLS0gVGl0bGVzIGZvciBsb2dkIGxpbWl0IHNpemUgc2VsZWN0aW9uIHByZWZlcmVuY2UuIFtDSEFSIExJTUlUPTE0XSAtLT4KICAgICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdGl0bGVzIj4KKyAgICAgICAgPGl0ZW0+T2ZmPC9pdGVtPgogICAgICAgICA8aXRlbT42NEs8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjI1Nks8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjFNPC9pdGVtPgpAQCAtMTExLDYgKzExMiw3IEBACiAKICAgICA8IS0tIFRpdGxlcyBmb3IgbG9nZCBsaW1pdCBzaXplIGxvd3JhbSBzZWxlY3Rpb24gcHJlZmVyZW5jZS4gW0NIQVIgTElNSVQ9MTRdIC0tPgogICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic2VsZWN0X2xvZ2Rfc2l6ZV9sb3dyYW1fdGl0bGVzIj4KKyAgICAgICAgPGl0ZW0+T2ZmPC9pdGVtPgogICAgICAgICA8aXRlbT42NEs8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjI1Nks8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjFNPC9pdGVtPgpAQCAtMTE4LDYgKzEyMCw3IEBACiAKICAgICA8IS0tIFZhbHVlcyBmb3IgbG9nZCBsaW1pdCBzaXplIHNlbGVjdGlvbiBwcmVmZXJlbmNlLiAtLT4KICAgICA8c3RyaW5nLWFycmF5IG5hbWU9InNlbGVjdF9sb2dkX3NpemVfdmFsdWVzIiB0cmFuc2xhdGFibGU9ImZhbHNlIiA+CisgICAgICAgIDxpdGVtPjMyNzY4PC9pdGVtPgogICAgICAgICA8aXRlbT42NTUzNjwvaXRlbT4KICAgICAgICAgPGl0ZW0+MjYyMTQ0PC9pdGVtPgogICAgICAgICA8aXRlbT4xMDQ4NTc2PC9pdGVtPgpAQCAtMTI1LDggKzEyOCw5IEBACiAgICAgICAgIDxpdGVtPjE2Nzc3MjE2PC9pdGVtPgogICAgIDwvc3RyaW5nLWFycmF5PgogCi0gICAgPCEtLSBTdW1tYXJpZXMgZm9yIGxvZ2QgbGltaXQgc2l6ZSBzZWxlY3Rpb24gcHJlZmVyZW5jZS4gW0NIQVIgTElNSVQ9MzBdLS0+CisgICAgPCEtLSBTdW1tYXJpZXMgZm9yIGxvZ2QgbGltaXQgc2l6ZSBzZWxlY3Rpb24gcHJlZmVyZW5jZS4gW0NIQVIgTElNSVQ9NTBdLS0+CiAgICAgPHN0cmluZy1hcnJheSBuYW1lPSJzZWxlY3RfbG9nZF9zaXplX3N1bW1hcmllcyIgPgorICAgICAgICA8aXRlbT5PZmY8L2l0ZW0+CiAgICAgICAgIDxpdGVtPjY0SyBwZXIgbG9nIGJ1ZmZlcjwvaXRlbT4KICAgICAgICAgPGl0ZW0+MjU2SyBwZXIgbG9nIGJ1ZmZlcjwvaXRlbT4KICAgICAgICAgPGl0ZW0+MU0gcGVyIGxvZyBidWZmZXI8L2l0ZW0+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL2F0dHJzLnhtbApzaW1pbGFyaXR5IGluZGV4IDc2JQpjb3B5IGZyb20gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCmNvcHkgdG8gcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9hdHRycy54bWwKaW5kZXggN2QyOGY5Yy4uNDYyNjdhMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvYXR0cnMueG1sCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKzwhLS0gQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAogICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgpAQCAtMTUsNSArMTUsNyBAQAogLS0+CiAKIDxyZXNvdXJjZXM+Ci0gICAgPGl0ZW0gbmFtZT0iZG9jc19hY3Rpdml0eSIgdHlwZT0ibGF5b3V0Ij5AbGF5b3V0L2ZpeGVkX2xheW91dDwvaXRlbT4KLTwvcmVzb3VyY2VzPgorICAgIDxkZWNsYXJlLXN0eWxlYWJsZSBuYW1lPSJSZXN0cmljdGVkUHJlZmVyZW5jZSI+CisgICAgICAgIDxhdHRyIG5hbWU9InVzZXJSZXN0cmljdGlvbiIgZm9ybWF0PSJzdHJpbmciLz4KKyAgICA8L2RlY2xhcmUtc3R5bGVhYmxlPgorPC9yZXNvdXJjZXM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9sYXlvdXRzLnhtbApyZW5hbWUgdG8gcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCmluZGV4IDdkMjhmOWMuLmMwOTA0NjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL0RvY3VtZW50c1VJL3Jlcy92YWx1ZXMtc3c3MjBkcC9sYXlvdXRzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL2NvbG9ycy54bWwKQEAgLTEsNSArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCiAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCkBAIC0xNSw1ICsxNSw1IEBACiAtLT4KIAogPHJlc291cmNlcz4KLSAgICA8aXRlbSBuYW1lPSJkb2NzX2FjdGl2aXR5IiB0eXBlPSJsYXlvdXQiPkBsYXlvdXQvZml4ZWRfbGF5b3V0PC9pdGVtPgorICAgIDxjb2xvciBuYW1lPSJkaXNhYmxlZF90ZXh0X2NvbG9yIj4jNjYwMDAwMDA8L2NvbG9yPiA8IS0tIDM4JSBibGFjayAtLT4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9kaW1lbnMueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCmluZGV4IGQ3Yzc4ZjYuLjlhMWQ2YTQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL2RpbWVucy54bWwKQEAgLTMxLDQgKzMxLDggQEAKICAgICA8ZGltZW4gbmFtZT0idXNlcl9zcGlubmVyX3BhZGRpbmciPjRkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9InVzZXJfc3Bpbm5lcl9wYWRkaW5nX3NpZGVzIj4yMGRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0idXNlcl9zcGlubmVyX2l0ZW1faGVpZ2h0Ij41NmRwPC9kaW1lbj4KKworICAgIDwhLS0gTG9jayBpY29uIGZvciBwcmVmZXJlbmNlcyBsb2NrZWQgYnkgYWRtaW4gLS0+CisgICAgPGRpbWVuIG5hbWU9InJlc3RyaWN0ZWRfbG9ja19pY29uX3NpemUiPjE2ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJyZXN0cmljdGVkX2xvY2tfaWNvbl9wYWRkaW5nIj40ZHA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCA1NWJkMDhhLi42ZGZhOWFkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTYyNCw2ICs2MjQsMTEgQEAKICAgICA8IS0tIFVJIGRlYnVnIHNldHRpbmc6IGZvcmNlIGFsbG93IG9uIGV4dGVybmFsIHN1bW1hcnkgW0NIQVIgTElNSVQ9MTUwXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImZvcmNlX3Jlc2l6YWJsZV9hY3Rpdml0aWVzX3N1bW1hcnkiPk1ha2VzIGFsbCBhY3Rpdml0aWVzIHJlc2l6YWJsZSBmb3IgbXVsdGktd2luZG93LCByZWdhcmRsZXNzIG9mIG1hbmlmZXN0IHZhbHVlcy48L3N0cmluZz4KIAorICAgIDwhLS0gVUkgZGVidWcgc2V0dGluZzogZW5hYmxlIGZyZWVmb3JtIHdpbmRvdyBzdXBwb3J0IFtDSEFSIExJTUlUPTUwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0Ij5FbmFibGUgZnJlZWZvcm0gd2luZG93czwvc3RyaW5nPgorICAgIDwhLS0gVUkgZGVidWcgc2V0dGluZzogZW5hYmxlIGZyZWVmb3JtIHdpbmRvdyBzdXBwb3J0IHN1bW1hcnkgW0NIQVIgTElNSVQ9MTUwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9mcmVlZm9ybV9zdXBwb3J0X3N1bW1hcnkiPkVuYWJsZXMgc3VwcG9ydCBmb3IgZXhwZXJpbWVudGFsIGZyZWVmb3JtIHdpbmRvd3MuPC9zdHJpbmc+CisKICAgICA8IS0tIExvY2FsIChkZXNrdG9wKSBiYWNrdXAgcGFzc3dvcmQgbWVudSB0aXRsZSBbQ0hBUiBMSU1JVD0yNV0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJsb2NhbF9iYWNrdXBfcGFzc3dvcmRfdGl0bGUiPkRlc2t0b3AgYmFja3VwIHBhc3N3b3JkPC9zdHJpbmc+CiAgICAgPCEtLSBTdW1tYXJ5IHRleHQgb2YgdGhlICJsb2NhbCBiYWNrdXAgcGFzc3dvcmQiIHNldHRpbmcgd2hlbiB0aGUgdXNlciBoYXMgbm90IHN1cHBsaWVkIGEgcGFzc3dvcmQgLS0+CkBAIC02NzUsNiArNjgwLDEzIEBACiAgICAgPCEtLSBTb3VuZCAmIGRpc3BsYXkgc2V0dGluZ3Mgc2NyZWVuLCB0aGVtZSBzZXR0aW5nIHZhbHVlIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIGJldHdlZW4gYSBsaWdodC0gb3IgZGFyay1jb2xvcmVkIHVzZXIgaW50ZXJmYWNlIFtDSEFSIExJTUlUPTMwXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9Im5pZ2h0X21vZGVfYXV0byI+QXV0b21hdGljPC9zdHJpbmc+CiAKKyAgICA8IS0tIERldmVsb3BlciBzZXR0aW5nczogc2VsZWN0IFdlYlZpZXcgcHJvdmlkZXIgdGl0bGUgLS0+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl90aXRsZSI+V2ViVmlldyBpbXBsZW1lbnRhdGlvbjwvc3RyaW5nPgorICAgIDwhLS0gRGV2ZWxvcGVyIHNldHRpbmdzOiBzZWxlY3QgV2ViVmlldyBwcm92aWRlciBkaWFsb2cgdGl0bGUgLS0+CisgICAgPHN0cmluZyBuYW1lPSJzZWxlY3Rfd2Vidmlld19wcm92aWRlcl9kaWFsb2dfdGl0bGUiPlNldCBXZWJWaWV3IGltcGxlbWVudGF0aW9uPC9zdHJpbmc+CisgICAgPCEtLSBEZXZlbG9wZXIgc2V0dGluZ3M6IGNvbmZpcm1hdGlvbiBkaWFsb2cgdGV4dCBmb3IgdGhlIFdlYlZpZXcgcHJvdmlkZXIgc2VsZWN0aW9uIGRpYWxvZyAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InNlbGVjdF93ZWJ2aWV3X3Byb3ZpZGVyX2NvbmZpcm1hdGlvbl90ZXh0Ij5UaGUgY2hvc2VuIFdlYlZpZXcgaW1wbGVtZW50YXRpb24gaXMgZGlzYWJsZWQsIGFuZCBtdXN0IGJlIGVuYWJsZWQgdG8gYmUgdXNlZCwgZG8geW91IHdpc2ggdG8gZW5hYmxlIGl0Pzwvc3RyaW5nPgorCiAgICAgPCEtLSBEZXZlbG9wZXIgc2V0dGluZ3Mgc2NyZWVuLCBjb252ZXJ0IHVzZXJkYXRhIHRvIGZpbGUgZW5jcnlwdGlvbiBvcHRpb24gbmFtZSAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImNvbnZlcnRfdG9fZmlsZV9lbmNyeXB0aW9uIj5Db252ZXJ0IHRvIGZpbGUgZW5jcnlwdGlvbjwvc3RyaW5nPgogICAgIDwhLS0gRGV2ZWxvcGVyIHNldHRpbmdzIHNjcmVlbiwgY29udmVydCB1c2VyZGF0YSB0byBmaWxlIGVuY3J5cHRpb24gc3VtbWFyeSB3aGVuIG9wdGlvbiBpcyBhdmFpbGFibGUgLS0+CkBAIC03MTYsNCArNzI4LDQxIEBACiAgICAgPCEtLSBTdW1tYXJ5IHNob3duIGZvciBjb2xvciBzcGFjZSBjb3JyZWN0aW9uIHByZWZlcmVuY2Ugd2hlbiBpdHMgdmFsdWUgaXMgb3ZlcnJpZGRlbiBieSBhbm90aGVyIHByZWZlcmVuY2UgW0NIQVIgTElNSVQ9MzVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iZGFsdG9uaXplcl90eXBlX292ZXJyaWRkZW4iPk92ZXJyaWRkZW4gYnkgPHhsaWZmOmcgaWQ9InRpdGxlIiBleGFtcGxlPSJTaW11bGF0ZSBjb2xvciBzcGFjZSI+JTEkczwveGxpZmY6Zz48L3N0cmluZz4KIAorICAgIDwhLS0gW0NIQVJfTElNSVQ9NDBdIExhYmVsIGZvciBiYXR0ZXJ5IGxldmVsIGNoYXJ0IHdoZW4gZGlzY2hhcmdpbmcgd2l0aCBkdXJhdGlvbiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2Rpc2NoYXJnaW5nX2R1cmF0aW9uIj48eGxpZmY6ZyBpZD0ibGV2ZWwiPiUxJHM8L3hsaWZmOmc+CisgICAgICAgIC0gYXBwcm94LiA8eGxpZmY6ZyBpZD0idGltZSI+JTIkczwveGxpZmY6Zz4gbGVmdDwvc3RyaW5nPgorCisgICAgPCEtLSBbQ0hBUl9MSU1JVD00MF0gTGFiZWwgZm9yIGJhdHRlcnkgbGV2ZWwgY2hhcnQgd2hlbiBjaGFyZ2luZyAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nIj48eGxpZmY6ZyBpZD0ibGV2ZWwiPiUxJHM8L3hsaWZmOmc+IC0KKyAgICAgICAgICAgIDx4bGlmZjpnIGlkPSJzdGF0ZSI+JTIkczwveGxpZmY6Zz48L3N0cmluZz4KKyAgICA8IS0tIFtDSEFSX0xJTUlUPTQwXSBMYWJlbCBmb3IgYmF0dGVyeSBsZXZlbCBjaGFydCB3aGVuIGNoYXJnaW5nIHdpdGggZHVyYXRpb24gLS0+CisgICAgPHN0cmluZyBuYW1lPSJwb3dlcl9jaGFyZ2luZ19kdXJhdGlvbiI+PHhsaWZmOmcgaWQ9ImxldmVsIj4lMSRzPC94bGlmZjpnPiAtCisgICAgICAgICAgICA8eGxpZmY6ZyBpZD0idGltZSI+JTIkczwveGxpZmY6Zz4gdW50aWwgZnVsbDwvc3RyaW5nPgorICAgIDwhLS0gW0NIQVJfTElNSVQ9NDBdIExhYmVsIGZvciBiYXR0ZXJ5IGxldmVsIGNoYXJ0IHdoZW4gY2hhcmdpbmcgd2l0aCBkdXJhdGlvbiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9InBvd2VyX2NoYXJnaW5nX2R1cmF0aW9uX2FjIj48eGxpZmY6ZyBpZD0ibGV2ZWwiPiUxJHM8L3hsaWZmOmc+IC0KKyAgICAgICAgICAgIDx4bGlmZjpnIGlkPSJ0aW1lIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIG9uIEFDPC9zdHJpbmc+CisgICAgPCEtLSBbQ0hBUl9MSU1JVD00MF0gTGFiZWwgZm9yIGJhdHRlcnkgbGV2ZWwgY2hhcnQgd2hlbiBjaGFyZ2luZyB3aXRoIGR1cmF0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiIj48eGxpZmY6ZyBpZD0ibGV2ZWwiPiUxJHM8L3hsaWZmOmc+IC0KKyAgICAgICAgICAgIDx4bGlmZjpnIGlkPSJ0aW1lIj4lMiRzPC94bGlmZjpnPiB1bnRpbCBmdWxsIG92ZXIgVVNCPC9zdHJpbmc+CisgICAgPCEtLSBbQ0hBUl9MSU1JVD00MF0gTGFiZWwgZm9yIGJhdHRlcnkgbGV2ZWwgY2hhcnQgd2hlbiBjaGFyZ2luZyB3aXRoIGR1cmF0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3MiPjx4bGlmZjpnIGlkPSJsZXZlbCI+JTEkczwveGxpZmY6Zz4gLQorICAgICAgICAgICAgPHhsaWZmOmcgaWQ9InRpbWUiPiUyJHM8L3hsaWZmOmc+IHVudGlsIGZ1bGwgZnJvbSB3aXJlbGVzczwvc3RyaW5nPgorCisgICAgPCEtLSBCYXR0ZXJ5IEluZm8gc2NyZWVuLiBWYWx1ZSBmb3IgYSBzdGF0dXMgaXRlbS4gIFVzZWQgZm9yIGRpYWdub3N0aWMgaW5mbyBzY3JlZW5zLCBwcmVjaXNlIHRyYW5zbGF0aW9uIGlzbid0IG5lZWRlZCAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfdW5rbm93biI+VW5rbm93bjwvc3RyaW5nPgorICAgIDwhLS0gW0NIQVJfTElNSVQ9MjBdIEJhdHRlcnkgdXNlIHNjcmVlbi4gIEJhdHRlcnkgc3RhdHVzIHNob3duIGluIGNoYXJ0IGxhYmVsIHdoZW4gY2hhcmdpbmcgZnJvbSBhbiB1bmtub3duIHNvdXJjZS4gIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZyI+Q2hhcmdpbmc8L3N0cmluZz4KKyAgICA8IS0tIFtDSEFSX0xJTUlUPTIwXSBCYXR0ZXJ5IHVzZSBzY3JlZW4uICBCYXR0ZXJ5IHN0YXR1cyBzaG93biBpbiBjaGFydCBsYWJlbCB3aGVuIGNoYXJnaW5nIG9uIEFDLiAgLS0+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2luZm9fc3RhdHVzX2NoYXJnaW5nX2FjIj5DaGFyZ2luZyBvbiBBQzwvc3RyaW5nPgorICAgIDwhLS0gW0NIQVJfTElNSVQ9MjBdIEJhdHRlcnkgdXNlIHNjcmVlbi4gIEJhdHRlcnkgc3RhdHVzIHNob3duIGluIGNoYXJ0IGxhYmVsIHdoZW4gY2hhcmdpbmcgb3ZlciBVU0IuICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiIj5DaGFyZ2luZyBvdmVyIFVTQjwvc3RyaW5nPgorICAgIDwhLS0gW0NIQVJfTElNSVQ9MjBdIEJhdHRlcnkgdXNlIHNjcmVlbi4gIEJhdHRlcnkgc3RhdHVzIHNob3duIGluIGNoYXJ0IGxhYmVsIHdoZW4gY2hhcmdpbmcgb3ZlciBhIHdpcmVsZXNzIGNvbm5lY3Rpb24uICAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3MiPkNoYXJnaW5nIHdpcmVsZXNzbHk8L3N0cmluZz4KKyAgICA8IS0tIEJhdHRlcnkgSW5mbyBzY3JlZW4uIFZhbHVlIGZvciBhIHN0YXR1cyBpdGVtLiAgVXNlZCBmb3IgZGlhZ25vc3RpYyBpbmZvIHNjcmVlbnMsIHByZWNpc2UgdHJhbnNsYXRpb24gaXNuJ3QgbmVlZGVkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19kaXNjaGFyZ2luZyI+Tm90IGNoYXJnaW5nPC9zdHJpbmc+CisgICAgPCEtLSBCYXR0ZXJ5IEluZm8gc2NyZWVuLiBWYWx1ZSBmb3IgYSBzdGF0dXMgaXRlbS4gIFVzZWQgZm9yIGRpYWdub3N0aWMgaW5mbyBzY3JlZW5zLCBwcmVjaXNlIHRyYW5zbGF0aW9uIGlzbid0IG5lZWRlZCAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nIj5Ob3QgY2hhcmdpbmc8L3N0cmluZz4KKyAgICA8IS0tIEJhdHRlcnkgSW5mbyBzY3JlZW4uIFZhbHVlIGZvciBhIHN0YXR1cyBpdGVtLiAgVXNlZCBmb3IgZGlhZ25vc3RpYyBpbmZvIHNjcmVlbnMsIHByZWNpc2UgdHJhbnNsYXRpb24gaXNuJ3QgbmVlZGVkIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9pbmZvX3N0YXR1c19mdWxsIj5GdWxsPC9zdHJpbmc+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL0JhdHRlcnlJbmZvLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvQmF0dGVyeUluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODFiZGViCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL0JhdHRlcnlJbmZvLmphdmEKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisgKiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCisgKiBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgKiBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKK2ltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeVN0YXRzOworaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC50ZXh0LmZvcm1hdC5Gb3JtYXR0ZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmF0dGVyeVN0YXRzSGVscGVyOworCitwdWJsaWMgY2xhc3MgQmF0dGVyeUluZm8geworCisgICAgcHVibGljIFN0cmluZyBtQ2hhcmdlTGFiZWxTdHJpbmc7CisgICAgcHVibGljIGludCBtQmF0dGVyeUxldmVsOworICAgIHB1YmxpYyBib29sZWFuIG1EaXNjaGFyZ2luZyA9IHRydWU7CisgICAgcHVibGljIGxvbmcgcmVtYWluaW5nVGltZVVzID0gMDsKKworICAgIHB1YmxpYyBpbnRlcmZhY2UgQ2FsbGJhY2sgeworICAgICAgICB2b2lkIG9uQmF0dGVyeUluZm9Mb2FkZWQoQmF0dGVyeUluZm8gaW5mbyk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGdldEJhdHRlcnlJbmZvKGZpbmFsIENvbnRleHQgY29udGV4dCwgZmluYWwgQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgbmV3IEFzeW5jVGFzazxWb2lkLCBWb2lkLCBCYXR0ZXJ5U3RhdHM+KCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwcm90ZWN0ZWQgQmF0dGVyeVN0YXRzIGRvSW5CYWNrZ3JvdW5kKFZvaWQuLi4gcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQmF0dGVyeVN0YXRzSGVscGVyIHN0YXRzSGVscGVyID0gbmV3IEJhdHRlcnlTdGF0c0hlbHBlcihjb250ZXh0LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBzdGF0c0hlbHBlci5jcmVhdGUoKEJ1bmRsZSkgbnVsbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRzSGVscGVyLmdldFN0YXRzKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0RXhlY3V0ZShCYXR0ZXJ5U3RhdHMgYmF0dGVyeVN0YXRzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBlbGFwc2VkUmVhbHRpbWVVcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpICogMTAwMDsKKyAgICAgICAgICAgICAgICBJbnRlbnQgYmF0dGVyeUJyb2FkY2FzdCA9IGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0JBVFRFUllfQ0hBTkdFRCkpOworICAgICAgICAgICAgICAgIEJhdHRlcnlJbmZvIGJhdHRlcnlJbmZvID0gQmF0dGVyeUluZm8uZ2V0QmF0dGVyeUluZm8oY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhdHRlcnlCcm9hZGNhc3QsIGJhdHRlcnlTdGF0cywgZWxhcHNlZFJlYWx0aW1lVXMpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrLm9uQmF0dGVyeUluZm9Mb2FkZWQoYmF0dGVyeUluZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9LmV4ZWN1dGUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEJhdHRlcnlJbmZvIGdldEJhdHRlcnlJbmZvKENvbnRleHQgY29udGV4dCwgSW50ZW50IGJhdHRlcnlCcm9hZGNhc3QsCisgICAgICAgICAgICBCYXR0ZXJ5U3RhdHMgc3RhdHMsIGxvbmcgZWxhcHNlZFJlYWx0aW1lVXMpIHsKKyAgICAgICAgQmF0dGVyeUluZm8gaW5mbyA9IG5ldyBCYXR0ZXJ5SW5mbygpOworICAgICAgICBpbmZvLm1CYXR0ZXJ5TGV2ZWwgPSBVdGlscy5nZXRCYXR0ZXJ5TGV2ZWwoYmF0dGVyeUJyb2FkY2FzdCk7CisgICAgICAgIFN0cmluZyBiYXR0ZXJ5UGVyY2VudFN0cmluZyA9IFV0aWxzLmZvcm1hdFBlcmNlbnRhZ2UoaW5mby5tQmF0dGVyeUxldmVsKTsKKyAgICAgICAgaWYgKGJhdHRlcnlCcm9hZGNhc3QuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfUExVR0dFRCwgMCkgPT0gMCkgeworICAgICAgICAgICAgZmluYWwgbG9uZyBkcmFpblRpbWUgPSBzdGF0cy5jb21wdXRlQmF0dGVyeVRpbWVSZW1haW5pbmcoZWxhcHNlZFJlYWx0aW1lVXMpOworICAgICAgICAgICAgaWYgKGRyYWluVGltZSA+IDApIHsKKyAgICAgICAgICAgICAgICBpbmZvLnJlbWFpbmluZ1RpbWVVcyA9IGRyYWluVGltZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGltZVN0cmluZyA9IEZvcm1hdHRlci5mb3JtYXRTaG9ydEVsYXBzZWRUaW1lKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBkcmFpblRpbWUgLyAxMDAwKTsKKyAgICAgICAgICAgICAgICBpbmZvLm1DaGFyZ2VMYWJlbFN0cmluZyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcucG93ZXJfZGlzY2hhcmdpbmdfZHVyYXRpb24sIGJhdHRlcnlQZXJjZW50U3RyaW5nLCB0aW1lU3RyaW5nKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW5mby5tQ2hhcmdlTGFiZWxTdHJpbmcgPSBiYXR0ZXJ5UGVyY2VudFN0cmluZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbmFsIGxvbmcgY2hhcmdlVGltZSA9IHN0YXRzLmNvbXB1dGVDaGFyZ2VUaW1lUmVtYWluaW5nKGVsYXBzZWRSZWFsdGltZVVzKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdGF0dXNMYWJlbCA9IFV0aWxzLmdldEJhdHRlcnlTdGF0dXMoCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGJhdHRlcnlCcm9hZGNhc3QpOworICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IGJhdHRlcnlCcm9hZGNhc3QuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfU1RBVFVTLAorICAgICAgICAgICAgICAgICAgICBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1NUQVRVU19VTktOT1dOKTsKKyAgICAgICAgICAgIGlmIChjaGFyZ2VUaW1lID4gMCAmJiBzdGF0dXMgIT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfRlVMTCkgeworICAgICAgICAgICAgICAgIGluZm8ubURpc2NoYXJnaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5mby5yZW1haW5pbmdUaW1lVXMgPSBjaGFyZ2VUaW1lOworICAgICAgICAgICAgICAgIFN0cmluZyB0aW1lU3RyaW5nID0gRm9ybWF0dGVyLmZvcm1hdFNob3J0RWxhcHNlZFRpbWUoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJnZVRpbWUgLyAxMDAwKTsKKyAgICAgICAgICAgICAgICBpbnQgcGx1Z1R5cGUgPSBiYXR0ZXJ5QnJvYWRjYXN0LmdldEludEV4dHJhKEJhdHRlcnlNYW5hZ2VyLkVYVFJBX1BMVUdHRUQsIDApOworICAgICAgICAgICAgICAgIGludCByZXNJZDsKKyAgICAgICAgICAgICAgICBpZiAocGx1Z1R5cGUgPT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9QTFVHR0VEX0FDKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcucG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fYWM7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnVHlwZSA9PSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1BMVUdHRURfVVNCKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcucG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fdXNiOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGx1Z1R5cGUgPT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9QTFVHR0VEX1dJUkVMRVNTKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcucG93ZXJfY2hhcmdpbmdfZHVyYXRpb25fd2lyZWxlc3M7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzSWQgPSBSLnN0cmluZy5wb3dlcl9jaGFyZ2luZ19kdXJhdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5mby5tQ2hhcmdlTGFiZWxTdHJpbmcgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc0lkLCBiYXR0ZXJ5UGVyY2VudFN0cmluZywgdGltZVN0cmluZyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGluZm8ubUNoYXJnZUxhYmVsU3RyaW5nID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICBSLnN0cmluZy5wb3dlcl9jaGFyZ2luZywgYmF0dGVyeVBlcmNlbnRTdHJpbmcsIHN0YXR1c0xhYmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mbzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZERyb3BEb3duUHJlZmVyZW5jZS5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWREcm9wRG93blByZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmY4ODVkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWREcm9wRG93blByZWZlcmVuY2UuamF2YQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWI7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLkRyb3BEb3duUHJlZmVyZW5jZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcucHJlZmVyZW5jZS5QcmVmZXJlbmNlVmlld0hvbGRlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQWRhcHRlclZpZXcuT25JdGVtU2VsZWN0ZWRMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5BcnJheUFkYXB0ZXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuU3Bpbm5lcjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWIuUmVzdHJpY3RlZExvY2tVdGlscy5FbmZvcmNlZEFkbWluOworCitwdWJsaWMgY2xhc3MgUmVzdHJpY3RlZERyb3BEb3duUHJlZmVyZW5jZSBleHRlbmRzIERyb3BEb3duUHJlZmVyZW5jZSB7CisgICAgcHJpdmF0ZSBTcGlubmVyIG1TcGlubmVyOworICAgIHByaXZhdGUgZmluYWwgRHJhd2FibGUgbVJlc3RyaWN0ZWRQYWRsb2NrOworICAgIHByaXZhdGUgZmluYWwgaW50IG1SZXN0cmljdGVkUGFkbG9ja1BhZGRpbmc7CisgICAgcHJpdmF0ZSBMaXN0PFJlc3RyaWN0ZWRJdGVtPiBtUmVzdHJpY3RlZEl0ZW1zID0gbmV3IEFycmF5TGlzdDw+KCk7CisKKyAgICBwdWJsaWMgUmVzdHJpY3RlZERyb3BEb3duUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVzdHJpY3RlZERyb3BEb3duUHJlZmVyZW5jZShDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisKKyAgICAgICAgbVJlc3RyaWN0ZWRQYWRsb2NrID0gUmVzdHJpY3RlZExvY2tVdGlscy5nZXRSZXN0cmljdGVkUGFkbG9jayhjb250ZXh0KTsKKyAgICAgICAgbVJlc3RyaWN0ZWRQYWRsb2NrUGFkZGluZyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVzdHJpY3RlZF9sb2NrX2ljb25fcGFkZGluZyk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBPbkl0ZW1TZWxlY3RlZExpc3RlbmVyIG1JdGVtU2VsZWN0ZWRMaXN0ZW5lciA9IG5ldyBPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25JdGVtU2VsZWN0ZWQoQWRhcHRlclZpZXc8Pz4gcGFyZW50LCBWaWV3IHYsIGludCBwb3NpdGlvbiwgbG9uZyBpZCkgeworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBnZXRFbnRyeVZhbHVlcygpW3Bvc2l0aW9uXS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIFJlc3RyaWN0ZWRJdGVtIGl0ZW0gPSBnZXRSZXN0cmljdGVkSXRlbUZvckVudHJ5VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChpdGVtICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVzdHJpY3RlZExvY2tVdGlscy5zZW5kU2hvd0FkbWluU3VwcG9ydERldGFpbHNJbnRlbnQoZ2V0Q29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5mb3JjZWRBZG1pbik7CisgICAgICAgICAgICAgICAgICAgIG1TcGlubmVyLnNldFNlbGVjdGlvbihmaW5kSW5kZXhPZlZhbHVlKGdldFZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF2YWx1ZS5lcXVhbHMoZ2V0VmFsdWUoKSkgJiYgY2FsbENoYW5nZUxpc3RlbmVyKHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uTm90aGluZ1NlbGVjdGVkKEFkYXB0ZXJWaWV3PD8+IHBhcmVudCkgeworICAgICAgICAgICAgLy8gbm9vcAorICAgICAgICB9CisgICAgfTsKKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBBcnJheUFkYXB0ZXIgY3JlYXRlQWRhcHRlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXN0cmljdGVkQXJyYXlJdGVtQWRhcHRlcihnZXRDb250ZXh0KCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFN0cmluZyB2YWx1ZSkgeworICAgICAgICBpZiAoZ2V0UmVzdHJpY3RlZEl0ZW1Gb3JFbnRyeVZhbHVlKHZhbHVlKSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoUHJlZmVyZW5jZVZpZXdIb2xkZXIgdmlldykgeworICAgICAgICBzdXBlci5vbkJpbmRWaWV3SG9sZGVyKHZpZXcpOworICAgICAgICBtU3Bpbm5lciA9IChTcGlubmVyKSB2aWV3Lml0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLnNwaW5uZXIpOworICAgICAgICBtU3Bpbm5lci5zZXRPbkl0ZW1TZWxlY3RlZExpc3RlbmVyKG1JdGVtU2VsZWN0ZWRMaXN0ZW5lcik7CisgICAgfQorCisgICAgcHJpdmF0ZSBjbGFzcyBSZXN0cmljdGVkQXJyYXlJdGVtQWRhcHRlciBleHRlbmRzIEFycmF5QWRhcHRlcjxTdHJpbmc+IHsKKyAgICAgICAgcHVibGljIFJlc3RyaWN0ZWRBcnJheUl0ZW1BZGFwdGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCwgUi5sYXlvdXQuc3Bpbm5lcl9kcm9wZG93bl9yZXN0cmljdGVkX2l0ZW0pOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBWaWV3IGdldERyb3BEb3duVmlldyhpbnQgcG9zaXRpb24sIFZpZXcgY29udmVydFZpZXcsIFZpZXdHcm91cCBwYXJlbnQpIHsKKyAgICAgICAgICAgIFRleHRWaWV3IHZpZXcgPSAoVGV4dFZpZXcpIHN1cGVyLmdldFZpZXcocG9zaXRpb24sIGNvbnZlcnRWaWV3LCBwYXJlbnQpOworICAgICAgICAgICAgQ2hhclNlcXVlbmNlIGVudHJ5ID0gZ2V0SXRlbShwb3NpdGlvbik7CisgICAgICAgICAgICBib29sZWFuIGlzRW50cnlSZXN0cmljdGVkID0gaXNSZXN0cmljdGVkRm9yRW50cnkoZW50cnkpOworICAgICAgICAgICAgUmVzdHJpY3RlZExvY2tVdGlscy5zZXRUZXh0Vmlld1BhZGxvY2soZ2V0Q29udGV4dCgpLCB2aWV3LCBpc0VudHJ5UmVzdHJpY3RlZCk7CisgICAgICAgICAgICB2aWV3LnNldEVuYWJsZWQoIWlzRW50cnlSZXN0cmljdGVkKTsKKyAgICAgICAgICAgIHJldHVybiB2aWV3OworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGlzUmVzdHJpY3RlZEZvckVudHJ5KENoYXJTZXF1ZW5jZSBlbnRyeSkgeworICAgICAgICBpZiAoZW50cnkgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZvciAoUmVzdHJpY3RlZEl0ZW0gaXRlbSA6IG1SZXN0cmljdGVkSXRlbXMpIHsKKyAgICAgICAgICAgIGlmIChlbnRyeS5lcXVhbHMoaXRlbS5lbnRyeSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBSZXN0cmljdGVkSXRlbSBnZXRSZXN0cmljdGVkSXRlbUZvckVudHJ5VmFsdWUoQ2hhclNlcXVlbmNlIGVudHJ5VmFsdWUpIHsKKyAgICAgICAgaWYgKGVudHJ5VmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChSZXN0cmljdGVkSXRlbSBpdGVtIDogbVJlc3RyaWN0ZWRJdGVtcykgeworICAgICAgICAgICAgaWYgKGVudHJ5VmFsdWUuZXF1YWxzKGl0ZW0uZW50cnlWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRSZXN0cmljdGVkSXRlbShSZXN0cmljdGVkSXRlbSBpdGVtKSB7CisgICAgICAgIG1SZXN0cmljdGVkSXRlbXMuYWRkKGl0ZW0pOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgUmVzdHJpY3RlZEl0ZW0geworICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGVudHJ5OworICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGVudHJ5VmFsdWU7CisgICAgICAgIHB1YmxpYyBFbmZvcmNlZEFkbWluIGVuZm9yY2VkQWRtaW47CisKKyAgICAgICAgcHVibGljIFJlc3RyaWN0ZWRJdGVtKENoYXJTZXF1ZW5jZSBlbnRyeSwgQ2hhclNlcXVlbmNlIGVudHJ5VmFsdWUsCisgICAgICAgICAgICAgICAgRW5mb3JjZWRBZG1pbiBlbmZvcmNlZEFkbWluKSB7CisgICAgICAgICAgICB0aGlzLmVudHJ5ID0gZW50cnk7CisgICAgICAgICAgICB0aGlzLmVudHJ5VmFsdWUgPSBlbnRyeVZhbHVlOworICAgICAgICAgICAgdGhpcy5lbmZvcmNlZEFkbWluID0gZW5mb3JjZWRBZG1pbjsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZExvY2tJbWFnZVNwYW4uamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9SZXN0cmljdGVkTG9ja0ltYWdlU3Bhbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzEzMGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZExvY2tJbWFnZVNwYW4uamF2YQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuSW1hZ2VTcGFuOworCisvKioKKyAqIEFuIGV4dGVuc2lvbiBvZiBJbWFnZVNwYW4gd2hpY2ggYWRkcyBhIHBhZGRpbmcgYmVmb3JlIHRoZSBpbWFnZS4KKyAqLworcHVibGljIGNsYXNzIFJlc3RyaWN0ZWRMb2NrSW1hZ2VTcGFuIGV4dGVuZHMgSW1hZ2VTcGFuIHsKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBtRXh0cmFQYWRkaW5nOworICAgIHByaXZhdGUgZmluYWwgRHJhd2FibGUgbVJlc3RyaWN0ZWRQYWRsb2NrOworCisgICAgcHVibGljIFJlc3RyaWN0ZWRMb2NrSW1hZ2VTcGFuKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAvLyB3ZSBhcmUgb3ZlcnJpZGluZyBnZXREcmF3YWJsZSwgc28gcGFzc2luZyBudWxsIHRvIHN1cGVyIGNsYXNzIGhlcmUuCisgICAgICAgIHN1cGVyKChEcmF3YWJsZSkgbnVsbCk7CisKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtRXh0cmFQYWRkaW5nID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVzdHJpY3RlZF9sb2NrX2ljb25fcGFkZGluZyk7CisgICAgICAgIG1SZXN0cmljdGVkUGFkbG9jayA9IFJlc3RyaWN0ZWRMb2NrVXRpbHMuZ2V0UmVzdHJpY3RlZFBhZGxvY2sobUNvbnRleHQpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREcmF3YWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIG1SZXN0cmljdGVkUGFkbG9jazsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMsIENoYXJTZXF1ZW5jZSB0ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQsIGZsb2F0IHgsIGludCB0b3AsIGludCB5LAorICAgICAgICAgICAgaW50IGJvdHRvbSwgUGFpbnQgcGFpbnQpIHsKKyAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBnZXREcmF3YWJsZSgpOworICAgICAgICBjYW52YXMuc2F2ZSgpOworCisgICAgICAgIC8vIEFkZCBleHRyYSBwYWRkaW5nIGJlZm9yZSB0aGUgcGFkbG9jay4KKyAgICAgICAgZmxvYXQgdHJhbnNYID0geCArIG1FeHRyYVBhZGRpbmc7CisgICAgICAgIGZsb2F0IHRyYW5zWSA9IGJvdHRvbSAtIGRyYXdhYmxlLmdldEJvdW5kcygpLmJvdHRvbSAtIHBhaW50LmdldEZvbnRNZXRyaWNzSW50KCkuZGVzY2VudDsKKworICAgICAgICBjYW52YXMudHJhbnNsYXRlKHRyYW5zWCwgdHJhbnNZKTsKKyAgICAgICAgZHJhd2FibGUuZHJhdyhjYW52YXMpOworICAgICAgICBjYW52YXMucmVzdG9yZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0U2l6ZShQYWludCBwYWludCwgQ2hhclNlcXVlbmNlIHRleHQsIGludCBzdGFydCwgaW50IGVuZCwKKyAgICAgICAgICAgIFBhaW50LkZvbnRNZXRyaWNzSW50IGZvbnRNZXRyaWNzKSB7CisgICAgICAgIGludCBzaXplID0gc3VwZXIuZ2V0U2l6ZShwYWludCwgdGV4dCwgc3RhcnQsIGVuZCwgZm9udE1ldHJpY3MpOworICAgICAgICBzaXplICs9IDIgKiBtRXh0cmFQYWRkaW5nOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWRMb2NrVXRpbHMuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9SZXN0cmljdGVkTG9ja1V0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjYWFhOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9SZXN0cmljdGVkTG9ja1V0aWxzLmphdmEKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNldHRpbmdzbGliOworCitpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnRleHQuU3Bhbm5lZDsKK2ltcG9ydCBhbmRyb2lkLnRleHQuU3Bhbm5hYmxlU3RyaW5nQnVpbGRlcjsKK2ltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuRm9yZWdyb3VuZENvbG9yU3BhbjsKK2ltcG9ydCBhbmRyb2lkLnRleHQuc3R5bGUuSW1hZ2VTcGFuOworaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIFV0aWxpdHkgY2xhc3MgdG8gaG9zdCBtZXRob2RzIHVzYWJsZSBpbiBhZGRpbmcgYSByZXN0cmljdGVkIHBhZGxvY2sgaWNvbiBhbmQgc2hvd2luZyBhZG1pbgorICogc3VwcG9ydCBtZXNzYWdlIGRpYWxvZy4KKyAqLworcHVibGljIGNsYXNzIFJlc3RyaWN0ZWRMb2NrVXRpbHMgeworICAgIC8qKgorICAgICAqIEByZXR1cm4gZHJhd2FibGVzIGZvciBkaXNwbGF5aW5nIHdpdGggc2V0dGluZ3MgdGhhdCBhcmUgbG9ja2VkIGJ5IGEgZGV2aWNlIGFkbWluLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgRHJhd2FibGUgZ2V0UmVzdHJpY3RlZFBhZGxvY2soQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIERyYXdhYmxlIHJlc3RyaWN0ZWRQYWRsb2NrID0gY29udGV4dC5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3NldHRpbmdzX2xvY2tfb3V0bGluZSk7CisgICAgICAgIGZpbmFsIGludCBpY29uU2l6ZSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVzdHJpY3RlZF9sb2NrX2ljb25fc2l6ZSk7CisgICAgICAgIHJlc3RyaWN0ZWRQYWRsb2NrLnNldEJvdW5kcygwLCAwLCBpY29uU2l6ZSwgaWNvblNpemUpOworICAgICAgICByZXR1cm4gcmVzdHJpY3RlZFBhZGxvY2s7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ2hlY2tzIGlmIGEgcmVzdHJpY3Rpb24gaXMgZW5mb3JjZWQgb24gYSB1c2VyIGFuZCByZXR1cm5zIHRoZSBlbmZvcmNlZCBhZG1pbiBhbmQKKyAgICAgKiBhZG1pbiB1c2VySWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXNlclJlc3RyaWN0aW9uIFJlc3RyaWN0aW9uIHRvIGNoZWNrCisgICAgICogQHBhcmFtIHVzZXJJZCBVc2VyIHdoaWNoIHdlIG5lZWQgdG8gY2hlY2sgaWYgcmVzdHJpY3Rpb24gaXMgZW5mb3JjZWQgb24uCisgICAgICogQHJldHVybiBFbmZvcmNlZEFkbWluIE9iamVjdCBjb250YWluaW5nIHRoZSBlbmZvcmNlIGFkbWluIGFuZCBhZG1pbiB1c2VyIGRldGFpbHMsIG9yCisgICAgICoge0Bjb2RlIG51bGx9IElmIHRoZSByZXN0cmljdGlvbiBpcyBub3Qgc2V0LiBJZiB0aGUgcmVzdHJpY3Rpb24gaXMgc2V0IGJ5IGJvdGggZGV2aWNlIG93bmVyCisgICAgICogYW5kIHByb2ZpbGUgb3duZXIsIHRoZW4gdGhlIGFkbWluIHdpbGwgYmUgc2V0IHRvIHtAY29kZSBudWxsfSBhbmQgdXNlcklkIHRvCisgICAgICoge0BsaW5rIFVzZXJIYW5kbGUjVVNFUl9OVUxMfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVuZm9yY2VkQWRtaW4gY2hlY2tJZlJlc3RyaWN0aW9uRW5mb3JjZWQoQ29udGV4dCBjb250ZXh0LAorICAgICAgICAgICAgU3RyaW5nIHVzZXJSZXN0cmljdGlvbiwgaW50IHVzZXJJZCkgeworICAgICAgICBEZXZpY2VQb2xpY3lNYW5hZ2VyIGRwbSA9IChEZXZpY2VQb2xpY3lNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOworICAgICAgICBDb21wb25lbnROYW1lIGRldmljZU93bmVyID0gZHBtLmdldERldmljZU93bmVyQ29tcG9uZW50T25BbnlVc2VyKCk7CisgICAgICAgIGludCBkZXZpY2VPd25lclVzZXJJZCA9IGRwbS5nZXREZXZpY2VPd25lclVzZXJJZCgpOworICAgICAgICBib29sZWFuIGVuZm9yY2VkQnlEZXZpY2VPd25lciA9IGZhbHNlOworICAgICAgICBpZiAoZGV2aWNlT3duZXIgIT0gbnVsbCAmJiBkZXZpY2VPd25lclVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfTlVMTCkgeworICAgICAgICAgICAgQnVuZGxlIGVuZm9yY2VkUmVzdHJpY3Rpb25zID0gZHBtLmdldFVzZXJSZXN0cmljdGlvbnMoZGV2aWNlT3duZXIsIGRldmljZU93bmVyVXNlcklkKTsKKyAgICAgICAgICAgIGlmIChlbmZvcmNlZFJlc3RyaWN0aW9ucyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIGVuZm9yY2VkUmVzdHJpY3Rpb25zLmdldEJvb2xlYW4odXNlclJlc3RyaWN0aW9uLCBmYWxzZSkpIHsKKyAgICAgICAgICAgICAgICBlbmZvcmNlZEJ5RGV2aWNlT3duZXIgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQ29tcG9uZW50TmFtZSBwcm9maWxlT3duZXIgPSBudWxsOworICAgICAgICBib29sZWFuIGVuZm9yY2VkQnlQcm9maWxlT3duZXIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfTlVMTCkgeworICAgICAgICAgICAgcHJvZmlsZU93bmVyID0gZHBtLmdldFByb2ZpbGVPd25lckFzVXNlcih1c2VySWQpOworICAgICAgICAgICAgaWYgKHByb2ZpbGVPd25lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgQnVuZGxlIGVuZm9yY2VkUmVzdHJpY3Rpb25zID0gZHBtLmdldFVzZXJSZXN0cmljdGlvbnMocHJvZmlsZU93bmVyLCB1c2VySWQpOworICAgICAgICAgICAgICAgIGlmIChlbmZvcmNlZFJlc3RyaWN0aW9ucyAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbmZvcmNlZFJlc3RyaWN0aW9ucy5nZXRCb29sZWFuKHVzZXJSZXN0cmljdGlvbiwgZmFsc2UpKSB7CisgICAgICAgICAgICAgICAgICAgIGVuZm9yY2VkQnlQcm9maWxlT3duZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZW5mb3JjZWRCeURldmljZU93bmVyICYmICFlbmZvcmNlZEJ5UHJvZmlsZU93bmVyKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEVuZm9yY2VkQWRtaW4gYWRtaW4gPSBudWxsOworICAgICAgICBpZiAoZW5mb3JjZWRCeURldmljZU93bmVyICYmIGVuZm9yY2VkQnlQcm9maWxlT3duZXIpIHsKKyAgICAgICAgICAgIGFkbWluID0gbmV3IEVuZm9yY2VkQWRtaW4oKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbmZvcmNlZEJ5RGV2aWNlT3duZXIpIHsKKyAgICAgICAgICAgIGFkbWluID0gbmV3IEVuZm9yY2VkQWRtaW4oZGV2aWNlT3duZXIsIGRldmljZU93bmVyVXNlcklkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkbWluID0gbmV3IEVuZm9yY2VkQWRtaW4ocHJvZmlsZU93bmVyLCB1c2VySWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhZG1pbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVja3MgaWYgbG9jayBzY3JlZW4gbm90aWZpY2F0aW9uIGZlYXR1cmVzIGFyZSBkaXNhYmxlZCBieSBwb2xpY3kuIFRoaXMgc2hvdWxkIGJlCisgICAgICogb25seSB1c2VkIGZvciBrZXlndWFyZCBub3RpZmljYXRpb24gZmVhdHVyZXMgYnV0IG5vdCB0aGUga2V5Z3VhcmQgZmVhdHVyZXMKKyAgICAgKiAoZS5nLiBLRVlHVUFSRF9ESVNBQkxFX0ZJTkdFUlBSSU5UKSB3aGVyZSBhIHByb2ZpbGUgb3duZXIgY2FuIHNldCB0aGVtIG9uIHRoZSBwYXJlbnQgdXNlcgorICAgICAqIGFzIGl0IHdvbid0IHdvcmsgZm9yIHRoYXQgY2FzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBrZXlndWFyZE5vdGlmaWNhdGlvbkZlYXR1cmVzIENvdWxkIGJlIGFueSBvZiBub3RpZmljYXRpb24gZmVhdHVyZXMgdGhhdCBjYW4gYmUKKyAgICAgKiBkaXNhYmxlZCBieSB7QGxpbmsgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlciNzZXRLZXlndWFyZERpc2FibGVkRmVhdHVyZXN9LgorICAgICAqIEByZXR1cm4gRW5mb3JjZWRBZG1pbiBPYmplY3QgY29udGFpbmluZyB0aGUgZW5mb3JjZSBhZG1pbiBhbmQgYWRtaW4gdXNlciBkZXRhaWxzLCBvcgorICAgICAqIHtAY29kZSBudWxsfSBJZiB0aGUgbm90aWZpY2F0aW9uIGZlYXR1cmVzIGFyZSBub3QgZGlzYWJsZWQuIElmIHRoZSByZXN0cmljdGlvbiBpcyBzZXQgYnkKKyAgICAgKiBtdWx0aXBsZSBhZG1pbnMsIHRoZW4gdGhlIGFkbWluIHdpbGwgYmUgc2V0IHRvIHtAY29kZSBudWxsfSBhbmQgdXNlcklkIHRvCisgICAgICoge0BsaW5rIFVzZXJIYW5kbGUjVVNFUl9OVUxMfS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIEVuZm9yY2VkQWRtaW4gY2hlY2tJZktleWd1YXJkTm90aWZpY2F0aW9uRmVhdHVyZXNEaXNhYmxlZChDb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICBpbnQga2V5Z3VhcmROb3RpZmljYXRpb25GZWF0dXJlcykgeworICAgICAgICBmaW5hbCBEZXZpY2VQb2xpY3lNYW5hZ2VyIGRwbSA9IChEZXZpY2VQb2xpY3lNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOworICAgICAgICBib29sZWFuIGlzRGlzYWJsZWRCeU11bHRpcGxlQWRtaW5zID0gZmFsc2U7CisgICAgICAgIENvbXBvbmVudE5hbWUgYWRtaW5Db21wb25lbnQgPSBudWxsOworICAgICAgICBMaXN0PENvbXBvbmVudE5hbWU+IGFkbWlucyA9IGRwbS5nZXRBY3RpdmVBZG1pbnMoKTsKKyAgICAgICAgaW50IGRpc2FibGVkS2V5Z3VhcmRGZWF0dXJlczsKKyAgICAgICAgZm9yIChDb21wb25lbnROYW1lIGFkbWluIDogYWRtaW5zKSB7CisgICAgICAgICAgICBkaXNhYmxlZEtleWd1YXJkRmVhdHVyZXMgPSBkcG0uZ2V0S2V5Z3VhcmREaXNhYmxlZEZlYXR1cmVzKGFkbWluKTsKKyAgICAgICAgICAgIGlmICgoZGlzYWJsZWRLZXlndWFyZEZlYXR1cmVzICYga2V5Z3VhcmROb3RpZmljYXRpb25GZWF0dXJlcykgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChhZG1pbkNvbXBvbmVudCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFkbWluQ29tcG9uZW50ID0gYWRtaW47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaXNEaXNhYmxlZEJ5TXVsdGlwbGVBZG1pbnMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRW5mb3JjZWRBZG1pbiBlbmZvcmNlZEFkbWluID0gbnVsbDsKKyAgICAgICAgaWYgKGFkbWluQ29tcG9uZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICghaXNEaXNhYmxlZEJ5TXVsdGlwbGVBZG1pbnMpIHsKKyAgICAgICAgICAgICAgICBlbmZvcmNlZEFkbWluID0gbmV3IEVuZm9yY2VkQWRtaW4oYWRtaW5Db21wb25lbnQsIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVuZm9yY2VkQWRtaW4gPSBuZXcgRW5mb3JjZWRBZG1pbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlbmZvcmNlZEFkbWluOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbWVudSBpdGVtIGFzIGRpc2FibGVkIGJ5IGFkbWluIGJ5IGFkZGluZyBhIHJlc3RyaWN0ZWQgcGFkbG9jayBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAqIHRleHQgYW5kIHNldCB0aGUgY2xpY2sgbGlzdGVuZXIgd2hpY2ggd2lsbCBzZW5kIGFuIGludGVudCB0byBzaG93IHRoZSBhZG1pbiBzdXBwb3J0IGRldGFpbHMKKyAgICAgKiBkaWFsb2cuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1lbnVJdGVtQXNEaXNhYmxlZEJ5QWRtaW4oZmluYWwgQ29udGV4dCBjb250ZXh0LAorICAgICAgICAgICAgZmluYWwgTWVudUl0ZW0gaXRlbSwgZmluYWwgRW5mb3JjZWRBZG1pbiBhZG1pbikgeworICAgICAgICBTcGFubmFibGVTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIoaXRlbS5nZXRUaXRsZSgpKTsKKyAgICAgICAgcmVtb3ZlRXhpc3RpbmdSZXN0cmljdGVkU3BhbnMoc2IpOworCisgICAgICAgIGZpbmFsIGludCBkaXNhYmxlZENvbG9yID0gY29udGV4dC5nZXRDb2xvcihSLmNvbG9yLmRpc2FibGVkX3RleHRfY29sb3IpOworICAgICAgICBzYi5zZXRTcGFuKG5ldyBGb3JlZ3JvdW5kQ29sb3JTcGFuKGRpc2FibGVkQ29sb3IpLCAwLCBzYi5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICBTcGFubmVkLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRSk7CisgICAgICAgIEltYWdlU3BhbiBpbWFnZSA9IG5ldyBSZXN0cmljdGVkTG9ja0ltYWdlU3Bhbihjb250ZXh0KTsKKyAgICAgICAgc2IuYXBwZW5kKCIgIiwgaW1hZ2UsIFNwYW5uZWQuU1BBTl9FWENMVVNJVkVfRVhDTFVTSVZFKTsKKyAgICAgICAgaXRlbS5zZXRUaXRsZShzYik7CisKKyAgICAgICAgaXRlbS5zZXRPbk1lbnVJdGVtQ2xpY2tMaXN0ZW5lcihuZXcgTWVudUl0ZW0uT25NZW51SXRlbUNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTWVudUl0ZW1DbGljayhNZW51SXRlbSBpdGVtKSB7CisgICAgICAgICAgICAgICAgc2VuZFNob3dBZG1pblN1cHBvcnREZXRhaWxzSW50ZW50KGNvbnRleHQsIGFkbWluKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZW1vdmVFeGlzdGluZ1Jlc3RyaWN0ZWRTcGFucyhTcGFubmFibGVTdHJpbmdCdWlsZGVyIHNiKSB7CisgICAgICAgIGZpbmFsIGludCBsZW5ndGggPSBzYi5sZW5ndGgoKTsKKyAgICAgICAgUmVzdHJpY3RlZExvY2tJbWFnZVNwYW5bXSBpbWFnZVNwYW5zID0gc2IuZ2V0U3BhbnMobGVuZ3RoIC0gMSwgbGVuZ3RoLAorICAgICAgICAgICAgICAgIFJlc3RyaWN0ZWRMb2NrSW1hZ2VTcGFuLmNsYXNzKTsKKyAgICAgICAgZm9yIChJbWFnZVNwYW4gc3BhbiA6IGltYWdlU3BhbnMpIHsKKyAgICAgICAgICAgIHNiLnJlbW92ZVNwYW4oc3Bhbik7CisgICAgICAgIH0KKyAgICAgICAgRm9yZWdyb3VuZENvbG9yU3BhbltdIGNvbG9yU3BhbnMgPSBzYi5nZXRTcGFucygwLCBsZW5ndGgsIEZvcmVncm91bmRDb2xvclNwYW4uY2xhc3MpOworICAgICAgICBmb3IgKEZvcmVncm91bmRDb2xvclNwYW4gc3BhbiA6IGNvbG9yU3BhbnMpIHsKKyAgICAgICAgICAgIHNiLnJlbW92ZVNwYW4oc3Bhbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kIHRoZSBpbnRlbnQgdG8gdHJpZ2dlciB0aGUge0BsaW5rIGFuZHJvaWQuc2V0dGluZ3MuU2hvd0FkbWluU3VwcG9ydERldGFpbHNEaWFsb2d9LgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZW5kU2hvd0FkbWluU3VwcG9ydERldGFpbHNJbnRlbnQoQ29udGV4dCBjb250ZXh0LCBFbmZvcmNlZEFkbWluIGFkbWluKSB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9TSE9XX0FETUlOX1NVUFBPUlRfREVUQUlMUyk7CisgICAgICAgIGludCBhZG1pblVzZXJJZCA9IFVzZXJIYW5kbGUubXlVc2VySWQoKTsKKyAgICAgICAgaWYgKGFkbWluICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChhZG1pbi5jb21wb25lbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShEZXZpY2VQb2xpY3lNYW5hZ2VyLkVYVFJBX0RFVklDRV9BRE1JTiwgYWRtaW4uY29tcG9uZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChhZG1pbi51c2VySWQgIT0gVXNlckhhbmRsZS5VU0VSX05VTEwpIHsKKyAgICAgICAgICAgICAgICBhZG1pblVzZXJJZCA9IGFkbWluLnVzZXJJZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9JRCwgYWRtaW5Vc2VySWQpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQuc3RhcnRBY3Rpdml0eUFzVXNlcihpbnRlbnQsIG5ldyBVc2VySGFuZGxlKGFkbWluVXNlcklkKSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRleHRWaWV3UGFkbG9jayhDb250ZXh0IGNvbnRleHQsCisgICAgICAgICAgICBUZXh0VmlldyB0ZXh0VmlldywgYm9vbGVhbiBzaG93UGFkbG9jaykgeworICAgICAgICBmaW5hbCBTcGFubmFibGVTdHJpbmdCdWlsZGVyIHNiID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIodGV4dFZpZXcuZ2V0VGV4dCgpKTsKKyAgICAgICAgcmVtb3ZlRXhpc3RpbmdSZXN0cmljdGVkU3BhbnMoc2IpOworICAgICAgICBpZiAoc2hvd1BhZGxvY2spIHsKKyAgICAgICAgICAgIGZpbmFsIEltYWdlU3BhbiBpbWFnZSA9IG5ldyBSZXN0cmljdGVkTG9ja0ltYWdlU3Bhbihjb250ZXh0KTsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiICIsIGltYWdlLCBTcGFubmVkLlNQQU5fRVhDTFVTSVZFX0VYQ0xVU0lWRSk7CisgICAgICAgIH0KKyAgICAgICAgdGV4dFZpZXcuc2V0VGV4dChzYik7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBFbmZvcmNlZEFkbWluIHsKKyAgICAgICAgcHVibGljIENvbXBvbmVudE5hbWUgY29tcG9uZW50ID0gbnVsbDsKKyAgICAgICAgcHVibGljIGludCB1c2VySWQgPSBVc2VySGFuZGxlLlVTRVJfTlVMTDsKKworICAgICAgICBwdWJsaWMgRW5mb3JjZWRBZG1pbihDb21wb25lbnROYW1lIGNvbXBvbmVudCwgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgICAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBFbmZvcmNlZEFkbWluKCkge30KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWRQcmVmZXJlbmNlLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZFByZWZlcmVuY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjkwMTdhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWRQcmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQuY29udGVudC5yZXMuVHlwZWRBcnJheVV0aWxzOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZVZpZXdIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYi5SZXN0cmljdGVkTG9ja1V0aWxzLkVuZm9yY2VkQWRtaW47CisKKy8qKgorICogUHJlZmVyZW5jZSBjbGFzcyB0aGF0IHN1cHBvcnRzIGJlaW5nIGRpc2FibGVkIGJ5IGEgdXNlciByZXN0cmljdGlvbgorICogc2V0IGJ5IGEgZGV2aWNlIGFkbWluLgorICovCitwdWJsaWMgY2xhc3MgUmVzdHJpY3RlZFByZWZlcmVuY2UgZXh0ZW5kcyBQcmVmZXJlbmNlIHsKKyAgICBSZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlciBtSGVscGVyOworCisgICAgcHVibGljIFJlc3RyaWN0ZWRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgbUhlbHBlciA9IG5ldyBSZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlcihjb250ZXh0LCB0aGlzLCBhdHRycyk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIFR5cGVkQXJyYXlVdGlscy5nZXRBdHRyKGNvbnRleHQsIFIuYXR0ci5wcmVmZXJlbmNlU3R5bGUsCisgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmF0dHIucHJlZmVyZW5jZVN0eWxlKSk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoUHJlZmVyZW5jZVZpZXdIb2xkZXIgaG9sZGVyKSB7CisgICAgICAgIHN1cGVyLm9uQmluZFZpZXdIb2xkZXIoaG9sZGVyKTsKKyAgICAgICAgbUhlbHBlci5vbkJpbmRWaWV3SG9sZGVyKGhvbGRlcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcGVyZm9ybUNsaWNrKCkgeworICAgICAgICBpZiAoIW1IZWxwZXIucGVyZm9ybUNsaWNrKCkpIHsKKyAgICAgICAgICAgIHN1cGVyLnBlcmZvcm1DbGljaygpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvSGllcmFyY2h5KFByZWZlcmVuY2VNYW5hZ2VyIHByZWZlcmVuY2VNYW5hZ2VyKSB7CisgICAgICAgIG1IZWxwZXIub25BdHRhY2hlZFRvSGllcmFyY2h5KCk7CisgICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb0hpZXJhcmNoeShwcmVmZXJlbmNlTWFuYWdlcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2hlY2tSZXN0cmljdGlvbkFuZFNldERpc2FibGVkKFN0cmluZyB1c2VyUmVzdHJpY3Rpb24pIHsKKyAgICAgICAgbUhlbHBlci5jaGVja1Jlc3RyaWN0aW9uQW5kU2V0RGlzYWJsZWQodXNlclJlc3RyaWN0aW9uLCBVc2VySGFuZGxlLm15VXNlcklkKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNoZWNrUmVzdHJpY3Rpb25BbmRTZXREaXNhYmxlZChTdHJpbmcgdXNlclJlc3RyaWN0aW9uLCBpbnQgdXNlcklkKSB7CisgICAgICAgIG1IZWxwZXIuY2hlY2tSZXN0cmljdGlvbkFuZFNldERpc2FibGVkKHVzZXJSZXN0cmljdGlvbiwgdXNlcklkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREaXNhYmxlZEJ5QWRtaW4oRW5mb3JjZWRBZG1pbiBhZG1pbikgeworICAgICAgICBpZiAobUhlbHBlci5zZXREaXNhYmxlZEJ5QWRtaW4oYWRtaW4pKSB7CisgICAgICAgICAgICBub3RpZnlDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Rpc2FibGVkQnlBZG1pbigpIHsKKyAgICAgICAgcmV0dXJuIG1IZWxwZXIuaXNEaXNhYmxlZEJ5QWRtaW4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZFByZWZlcmVuY2VIZWxwZXIuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9SZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNDE1MDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZFByZWZlcmVuY2VIZWxwZXIuamF2YQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuVHlwZWRBcnJheTsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcucHJlZmVyZW5jZS5QcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2VWaWV3SG9sZGVyOworaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmVkOworaW1wb3J0IGFuZHJvaWQudGV4dC5TcGFubmFibGVTdHJpbmdCdWlsZGVyOworaW1wb3J0IGFuZHJvaWQudGV4dC5zdHlsZS5JbWFnZVNwYW47CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYi5SZXN0cmljdGVkTG9ja1V0aWxzLkVuZm9yY2VkQWRtaW47CisKKy8qKgorICogSGVscGVyIGNsYXNzIGZvciBtYW5hZ2luZyBzZXR0aW5ncyBwcmVmZXJlbmNlcyB0aGF0IGNhbiBiZSBkaXNhYmxlZAorICogYnkgZGV2aWNlIGFkbWlucyB2aWEgdXNlciByZXN0cmljdGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBSZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgZmluYWwgUHJlZmVyZW5jZSBtUHJlZmVyZW5jZTsKKyAgICBwcml2YXRlIGZpbmFsIERyYXdhYmxlIG1SZXN0cmljdGVkUGFkbG9jazsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtUmVzdHJpY3RlZFBhZGxvY2tQYWRkaW5nOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1EaXNhYmxlZEJ5QWRtaW47CisgICAgcHJpdmF0ZSBFbmZvcmNlZEFkbWluIG1FbmZvcmNlZEFkbWluOworICAgIHByaXZhdGUgU3RyaW5nIG1BdHRyVXNlclJlc3RyaWN0aW9uID0gbnVsbDsKKworICAgIFJlc3RyaWN0ZWRQcmVmZXJlbmNlSGVscGVyKENvbnRleHQgY29udGV4dCwgUHJlZmVyZW5jZSBwcmVmZXJlbmNlLAorICAgICAgICAgICAgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbVByZWZlcmVuY2UgPSBwcmVmZXJlbmNlOworCisgICAgICAgIG1SZXN0cmljdGVkUGFkbG9jayA9IFJlc3RyaWN0ZWRMb2NrVXRpbHMuZ2V0UmVzdHJpY3RlZFBhZGxvY2sobUNvbnRleHQpOworICAgICAgICBtUmVzdHJpY3RlZFBhZGxvY2tQYWRkaW5nID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVzdHJpY3RlZF9sb2NrX2ljb25fcGFkZGluZyk7CisKKyAgICAgICAgbUF0dHJVc2VyUmVzdHJpY3Rpb24gPSBhdHRycy5nZXRBdHRyaWJ1dGVWYWx1ZSgKKyAgICAgICAgICAgICAgICBSLnN0eWxlYWJsZS5SZXN0cmljdGVkUHJlZmVyZW5jZV91c2VyUmVzdHJpY3Rpb24pOworICAgICAgICBmaW5hbCBUeXBlZEFycmF5IGF0dHJpYnV0ZXMgPSBjb250ZXh0Lm9idGFpblN0eWxlZEF0dHJpYnV0ZXMoYXR0cnMsCisgICAgICAgICAgICAgICAgUi5zdHlsZWFibGUuUmVzdHJpY3RlZFByZWZlcmVuY2UpOworICAgICAgICBmaW5hbCBUeXBlZFZhbHVlIHVzZXJSZXN0cmljdGlvbiA9CisgICAgICAgICAgICAgICAgYXR0cmlidXRlcy5wZWVrVmFsdWUoUi5zdHlsZWFibGUuUmVzdHJpY3RlZFByZWZlcmVuY2VfdXNlclJlc3RyaWN0aW9uKTsKKyAgICAgICAgQ2hhclNlcXVlbmNlIGRhdGEgPSBudWxsOworICAgICAgICBpZiAodXNlclJlc3RyaWN0aW9uICE9IG51bGwgJiYgdXNlclJlc3RyaWN0aW9uLnR5cGUgPT0gVHlwZWRWYWx1ZS5UWVBFX1NUUklORykgeworICAgICAgICAgICAgaWYgKHVzZXJSZXN0cmljdGlvbi5yZXNvdXJjZUlkICE9IDApIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gY29udGV4dC5nZXRUZXh0KHVzZXJSZXN0cmljdGlvbi5yZXNvdXJjZUlkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IHVzZXJSZXN0cmljdGlvbi5zdHJpbmc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbUF0dHJVc2VyUmVzdHJpY3Rpb24gPSBkYXRhID09IG51bGwgPyBudWxsIDogZGF0YS50b1N0cmluZygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1vZGlmeSBQcmVmZXJlbmNlVmlld0hvbGRlciB0byBhZGQgcGFkbG9jayBpZiByZXN0cmljdGlvbiBpcyBkaXNhYmxlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFByZWZlcmVuY2VWaWV3SG9sZGVyIGhvbGRlcikgeworICAgICAgICBmaW5hbCBUZXh0VmlldyB0aXRsZVZpZXcgPSAoVGV4dFZpZXcpIGhvbGRlci5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKTsKKyAgICAgICAgaWYgKHRpdGxlVmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBSZXN0cmljdGVkTG9ja1V0aWxzLnNldFRleHRWaWV3UGFkbG9jayhtQ29udGV4dCwgdGl0bGVWaWV3LCBtRGlzYWJsZWRCeUFkbWluKTsKKyAgICAgICAgICAgIGlmIChtRGlzYWJsZWRCeUFkbWluKSB7CisgICAgICAgICAgICAgICAgaG9sZGVyLml0ZW1WaWV3LnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDaGVjayBpZiB0aGUgcHJlZmVyZW5jZSBpcyBkaXNhYmxlZCBpZiBzbyBoYW5kbGUgdGhlIGNsaWNrIGJ5IGluZm9ybWluZyB0aGUgdXNlci4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbWV0aG9kIGhhbmRsZWQgdGhlIGNsaWNrLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1DbGljaygpIHsKKyAgICAgICAgaWYgKG1EaXNhYmxlZEJ5QWRtaW4pIHsKKyAgICAgICAgICAgIFJlc3RyaWN0ZWRMb2NrVXRpbHMuc2VuZFNob3dBZG1pblN1cHBvcnREZXRhaWxzSW50ZW50KG1Db250ZXh0LCBtRW5mb3JjZWRBZG1pbik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGlzYWJsZSAvIGVuYWJsZSBpZiB3ZSBoYXZlIGJlZW4gcGFzc2VkIHRoZSByZXN0cmljdGlvbiBpbiB0aGUgeG1sLgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIG9uQXR0YWNoZWRUb0hpZXJhcmNoeSgpIHsKKyAgICAgICAgaWYgKG1BdHRyVXNlclJlc3RyaWN0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNoZWNrUmVzdHJpY3Rpb25BbmRTZXREaXNhYmxlZChtQXR0clVzZXJSZXN0cmljdGlvbiwgVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgdXNlciByZXN0cmljdGlvbiB0aGF0IGlzIHVzZWQgdG8gZGlzYWJsZSB0aGlzIHByZWZlcmVuY2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdXNlclJlc3RyaWN0aW9uIGNvbnN0YW50IGZyb20ge0BsaW5rIGFuZHJvaWQub3MuVXNlck1hbmFnZXJ9CisgICAgICogQHBhcmFtIHVzZXJJZCB1c2VyIHRvIGNoZWNrIHRoZSByZXN0cmljdGlvbiBmb3IuCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2hlY2tSZXN0cmljdGlvbkFuZFNldERpc2FibGVkKFN0cmluZyB1c2VyUmVzdHJpY3Rpb24sIGludCB1c2VySWQpIHsKKyAgICAgICAgRW5mb3JjZWRBZG1pbiBhZG1pbiA9IFJlc3RyaWN0ZWRMb2NrVXRpbHMuY2hlY2tJZlJlc3RyaWN0aW9uRW5mb3JjZWQobUNvbnRleHQsCisgICAgICAgICAgICAgICAgdXNlclJlc3RyaWN0aW9uLCB1c2VySWQpOworICAgICAgICBzZXREaXNhYmxlZEJ5QWRtaW4oYWRtaW4pOworICAgIH0KKworICAgIC8qKgorICAgICAqIERpc2FibGUgdGhpcyBwcmVmZXJlbmNlIGJhc2VkIG9uIHRoZSBlbmZvcmNlIGFkbWluLgorICAgICAqCisgICAgICogQHBhcmFtIEVuZm9yY2VkQWRtaW4gRGV0YWlscyBvZiB0aGUgYWRtaW4gd2hvIGVuZm9yY2VkIHRoZSByZXN0cmljdGlvbi4gSWYgaXQKKyAgICAgKiBpcyB7QGNvZGUgbnVsbH0sIHRoZW4gdGhpcyBwcmVmZXJlbmNlIHdpbGwgYmUgZW5hYmxlZC4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIGRpc2FibGVkLgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgZGlzYWJsZWQgc3RhdGUgd2FzIGNoYW5nZWQuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gc2V0RGlzYWJsZWRCeUFkbWluKEVuZm9yY2VkQWRtaW4gYWRtaW4pIHsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBkaXNhYmxlZCA9IChhZG1pbiAhPSBudWxsID8gdHJ1ZSA6IGZhbHNlKTsKKyAgICAgICAgbUVuZm9yY2VkQWRtaW4gPSAoZGlzYWJsZWQgPyBhZG1pbiA6IG51bGwpOworICAgICAgICBpZiAobURpc2FibGVkQnlBZG1pbiAhPSBkaXNhYmxlZCkgeworICAgICAgICAgICAgbURpc2FibGVkQnlBZG1pbiA9IGRpc2FibGVkOworICAgICAgICAgICAgbVByZWZlcmVuY2Uuc2V0RW5hYmxlZCghZGlzYWJsZWQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzRGlzYWJsZWRCeUFkbWluKCkgeworICAgICAgICByZXR1cm4gbURpc2FibGVkQnlBZG1pbjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvUmVzdHJpY3RlZFN3aXRjaFByZWZlcmVuY2UuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9SZXN0cmljdGVkU3dpdGNoUHJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODQ3N2IwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1Jlc3RyaWN0ZWRTd2l0Y2hQcmVmZXJlbmNlLmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQuY29udGVudC5yZXMuVHlwZWRBcnJheVV0aWxzOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2VWaWV3SG9sZGVyOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZS5Td2l0Y2hQcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CisKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWIuUmVzdHJpY3RlZExvY2tVdGlscy5FbmZvcmNlZEFkbWluOworCisvKioKKyAqIFZlcnNpb24gb2YgU3dpdGNoUHJlZmVyZW5jZSB0aGF0IGNhbiBiZSBkaXNhYmxlZCBieSBhIGRldmljZSBhZG1pbgorICogdXNpbmcgYSB1c2VyIHJlc3RyaWN0aW9uLgorICovCitwdWJsaWMgY2xhc3MgUmVzdHJpY3RlZFN3aXRjaFByZWZlcmVuY2UgZXh0ZW5kcyBTd2l0Y2hQcmVmZXJlbmNlIHsKKyAgICBSZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlciBtSGVscGVyOworCisgICAgcHVibGljIFJlc3RyaWN0ZWRTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLAorICAgICAgICAgICAgaW50IGRlZlN0eWxlQXR0ciwgaW50IGRlZlN0eWxlUmVzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKKyAgICAgICAgbUhlbHBlciA9IG5ldyBSZXN0cmljdGVkUHJlZmVyZW5jZUhlbHBlcihjb250ZXh0LCB0aGlzLCBhdHRycyk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgMCk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgYXR0cnMsIFR5cGVkQXJyYXlVdGlscy5nZXRBdHRyKGNvbnRleHQsIFIuYXR0ci5zd2l0Y2hQcmVmZXJlbmNlU3R5bGUsCisgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmF0dHIuc3dpdGNoUHJlZmVyZW5jZVN0eWxlKSk7CisgICAgfQorCisgICAgcHVibGljIFJlc3RyaWN0ZWRTd2l0Y2hQcmVmZXJlbmNlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uQmluZFZpZXdIb2xkZXIoUHJlZmVyZW5jZVZpZXdIb2xkZXIgaG9sZGVyKSB7CisgICAgICAgIHN1cGVyLm9uQmluZFZpZXdIb2xkZXIoaG9sZGVyKTsKKyAgICAgICAgbUhlbHBlci5vbkJpbmRWaWV3SG9sZGVyKGhvbGRlcik7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcGVyZm9ybUNsaWNrKCkgeworICAgICAgICBpZiAoIW1IZWxwZXIucGVyZm9ybUNsaWNrKCkpIHsKKyAgICAgICAgICAgIHN1cGVyLnBlcmZvcm1DbGljaygpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvSGllcmFyY2h5KFByZWZlcmVuY2VNYW5hZ2VyIHByZWZlcmVuY2VNYW5hZ2VyKSB7CisgICAgICAgIG1IZWxwZXIub25BdHRhY2hlZFRvSGllcmFyY2h5KCk7CisgICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb0hpZXJhcmNoeShwcmVmZXJlbmNlTWFuYWdlcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2hlY2tSZXN0cmljdGlvbkFuZFNldERpc2FibGVkKFN0cmluZyB1c2VyUmVzdHJpY3Rpb24pIHsKKyAgICAgICAgbUhlbHBlci5jaGVja1Jlc3RyaWN0aW9uQW5kU2V0RGlzYWJsZWQodXNlclJlc3RyaWN0aW9uLCBVc2VySGFuZGxlLm15VXNlcklkKCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNoZWNrUmVzdHJpY3Rpb25BbmRTZXREaXNhYmxlZChTdHJpbmcgdXNlclJlc3RyaWN0aW9uLCBpbnQgdXNlcklkKSB7CisgICAgICAgIG1IZWxwZXIuY2hlY2tSZXN0cmljdGlvbkFuZFNldERpc2FibGVkKHVzZXJSZXN0cmljdGlvbiwgdXNlcklkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREaXNhYmxlZEJ5QWRtaW4oRW5mb3JjZWRBZG1pbiBhZG1pbikgeworICAgICAgICBpZiAobUhlbHBlci5zZXREaXNhYmxlZEJ5QWRtaW4oYWRtaW4pKSB7CisgICAgICAgICAgICBub3RpZnlDaGFuZ2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Rpc2FibGVkQnlBZG1pbigpIHsKKyAgICAgICAgcmV0dXJuIG1IZWxwZXIuaXNEaXNhYmxlZEJ5QWRtaW4oKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvU3VnZ2VzdGlvblBhcnNlci5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1N1Z2dlc3Rpb25QYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGE0NzdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1N1Z2dlc3Rpb25QYXJzZXIuamF2YQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWI7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5mbGF0ZUV4Y2VwdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYi5kcmF3ZXIuVGlsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYi5kcmF3ZXIuVGlsZVV0aWxzOworaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CitpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIFN1Z2dlc3Rpb25QYXJzZXIgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTdWdnZXN0aW9uUGFyc2VyIjsKKworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8U3VnZ2VzdGlvbkNhdGVnb3J5PiBtU3VnZ2VzdGlvbkxpc3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxQYWlyPFN0cmluZywgU3RyaW5nPiwgVGlsZT4gYWRkQ2FjaGUgPSBuZXcgQXJyYXlNYXA8PigpOworCisgICAgcHVibGljIFN1Z2dlc3Rpb25QYXJzZXIoQ29udGV4dCBjb250ZXh0LCBpbnQgb3JkZXJYbWwpIHsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtU3VnZ2VzdGlvbkxpc3QgPSAoTGlzdDxTdWdnZXN0aW9uQ2F0ZWdvcnk+KSBuZXcgU3VnZ2VzdGlvbk9yZGVySW5mbGF0ZXIobUNvbnRleHQpCisgICAgICAgICAgICAgICAgLnBhcnNlKG9yZGVyWG1sKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxUaWxlPiBnZXRTdWdnZXN0aW9ucygpIHsKKyAgICAgICAgTGlzdDxUaWxlPiBzdWdnZXN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmaW5hbCBpbnQgTiA9IG1TdWdnZXN0aW9uTGlzdC5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICByZWFkU3VnZ2VzdGlvbnMobVN1Z2dlc3Rpb25MaXN0LmdldChpKSwgc3VnZ2VzdGlvbnMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdWdnZXN0aW9uczsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVhZFN1Z2dlc3Rpb25zKFN1Z2dlc3Rpb25DYXRlZ29yeSBjYXRlZ29yeSwgTGlzdDxUaWxlPiBzdWdnZXN0aW9ucykgeworICAgICAgICBpbnQgY291bnRCZWZvcmUgPSBzdWdnZXN0aW9ucy5zaXplKCk7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fTUFJTik7CisgICAgICAgIGludGVudC5hZGRDYXRlZ29yeShjYXRlZ29yeS5jYXRlZ29yeSk7CisgICAgICAgIGlmIChjYXRlZ29yeS5wa2cgIT0gbnVsbCkgeworICAgICAgICAgICAgaW50ZW50LnNldFBhY2thZ2UoY2F0ZWdvcnkucGtnKTsKKyAgICAgICAgfQorICAgICAgICBUaWxlVXRpbHMuZ2V0VGlsZXNGb3JJbnRlbnQobUNvbnRleHQsIG5ldyBVc2VySGFuZGxlKFVzZXJIYW5kbGUubXlVc2VySWQoKSksIGludGVudCwKKyAgICAgICAgICAgICAgICBhZGRDYWNoZSwgbnVsbCwgc3VnZ2VzdGlvbnMsIHRydWUsIGZhbHNlKTsKKyAgICAgICAgaWYgKCFjYXRlZ29yeS5tdWx0aXBsZSAmJiBzdWdnZXN0aW9ucy5zaXplKCkgPiAoY291bnRCZWZvcmUgKyAxKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHRvbyBtYW55LCByZW1vdmUgdGhlbSBhbGwgYW5kIG9ubHkgcmUtYWRkIHRoZSBvbmUgd2l0aCB0aGUgaGlnaGVzdAorICAgICAgICAgICAgLy8gcHJpb3JpdHkuCisgICAgICAgICAgICBUaWxlIGl0ZW0gPSBzdWdnZXN0aW9ucy5yZW1vdmUoc3VnZ2VzdGlvbnMuc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICB3aGlsZSAoc3VnZ2VzdGlvbnMuc2l6ZSgpID4gY291bnRCZWZvcmUpIHsKKyAgICAgICAgICAgICAgICBUaWxlIGxhc3QgPSBzdWdnZXN0aW9ucy5yZW1vdmUoc3VnZ2VzdGlvbnMuc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKGxhc3QucHJpb3JpdHkgPiBpdGVtLnByaW9yaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBsYXN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1Z2dlc3Rpb25zLmFkZChpdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN1Z2dlc3Rpb25DYXRlZ29yeSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgY2F0ZWdvcnk7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcGtnOworICAgICAgICBwdWJsaWMgYm9vbGVhbiBtdWx0aXBsZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdWdnZXN0aW9uT3JkZXJJbmZsYXRlciB7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTElTVCA9ICJvcHRpb25hbC1zdGVwcyI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSVRFTSA9ICJzdGVwIjsKKworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9DQVRFR09SWSA9ICJjYXRlZ29yeSI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BBQ0tBR0UgPSAicGFja2FnZSI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX01VTFRJUExFID0gIm11bHRpcGxlIjsKKworICAgICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CisKKyAgICAgICAgcHVibGljIFN1Z2dlc3Rpb25PcmRlckluZmxhdGVyKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE9iamVjdCBwYXJzZShpbnQgcmVzb3VyY2UpIHsKKyAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0WG1sKHJlc291cmNlKTsKKyAgICAgICAgICAgIGZpbmFsIEF0dHJpYnV0ZVNldCBhdHRycyA9IFhtbC5hc0F0dHJpYnV0ZVNldChwYXJzZXIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcm9vdCBub2RlLgorICAgICAgICAgICAgICAgIGludCB0eXBlOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnNlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAodHlwZSAhPSBYbWxQdWxsUGFyc2VyLlNUQVJUX1RBRyAmJiB0eXBlICE9IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKTsKKworICAgICAgICAgICAgICAgIGlmICh0eXBlICE9IFhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmZsYXRlRXhjZXB0aW9uKHBhcnNlci5nZXRQb3NpdGlvbkRlc2NyaXB0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IE5vIHN0YXJ0IHRhZyBmb3VuZCEiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUZW1wIGlzIHRoZSByb290IHRoYXQgd2FzIGZvdW5kIGluIHRoZSB4bWwKKyAgICAgICAgICAgICAgICBPYmplY3QgeG1sUm9vdCA9IG9uQ3JlYXRlSXRlbShwYXJzZXIuZ2V0TmFtZSgpLCBhdHRycyk7CisKKyAgICAgICAgICAgICAgICAvLyBJbmZsYXRlIGFsbCBjaGlsZHJlbiB1bmRlciB0ZW1wCisgICAgICAgICAgICAgICAgclBhcnNlKHBhcnNlciwgeG1sUm9vdCwgYXR0cnMpOworICAgICAgICAgICAgICAgIHJldHVybiB4bWxSb290OworICAgICAgICAgICAgfSBjYXRjaCAoWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJQcm9ibGVtIHBhcnNlciByZXNvdXJjZSAiICsgcmVzb3VyY2UsIGUpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIFJlY3Vyc2l2ZSBtZXRob2QgdXNlZCB0byBkZXNjZW5kIGRvd24gdGhlIHhtbCBoaWVyYXJjaHkgYW5kIGluc3RhbnRpYXRlCisgICAgICAgICAqIGl0ZW1zLCBpbnN0YW50aWF0ZSB0aGVpciBjaGlsZHJlbi4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgdm9pZCByUGFyc2UoWG1sUHVsbFBhcnNlciBwYXJzZXIsIE9iamVjdCBwYXJlbnQsIGZpbmFsIEF0dHJpYnV0ZVNldCBhdHRycykKKyAgICAgICAgICAgICAgICB0aHJvd3MgWG1sUHVsbFBhcnNlckV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICAgICAgZmluYWwgaW50IGRlcHRoID0gcGFyc2VyLmdldERlcHRoKCk7CisKKyAgICAgICAgICAgIGludCB0eXBlOworICAgICAgICAgICAgd2hpbGUgKCgodHlwZSA9IHBhcnNlci5uZXh0KCkpICE9IFhtbFB1bGxQYXJzZXIuRU5EX1RBRyB8fAorICAgICAgICAgICAgICAgICAgICBwYXJzZXIuZ2V0RGVwdGgoKSA+IGRlcHRoKSAmJiB0eXBlICE9IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT0gWG1sUHVsbFBhcnNlci5TVEFSVF9UQUcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBwYXJzZXIuZ2V0TmFtZSgpOworCisgICAgICAgICAgICAgICAgT2JqZWN0IGl0ZW0gPSBvbkNyZWF0ZUl0ZW0obmFtZSwgYXR0cnMpOworICAgICAgICAgICAgICAgIG9uQWRkQ2hpbGRJdGVtKHBhcmVudCwgaXRlbSk7CisgICAgICAgICAgICAgICAgclBhcnNlKHBhcnNlciwgaXRlbSwgYXR0cnMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25BZGRDaGlsZEl0ZW0oT2JqZWN0IHBhcmVudCwgT2JqZWN0IGNoaWxkKSB7CisgICAgICAgICAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgTGlzdDw/PiAmJiBjaGlsZCBpbnN0YW5jZW9mIFN1Z2dlc3Rpb25DYXRlZ29yeSkgeworICAgICAgICAgICAgICAgICgoTGlzdDxTdWdnZXN0aW9uQ2F0ZWdvcnk+KSBwYXJlbnQpLmFkZCgoU3VnZ2VzdGlvbkNhdGVnb3J5KSBjaGlsZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlBhcmVudCB3YXMgbm90IGEgbGlzdCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBvbkNyZWF0ZUl0ZW0oU3RyaW5nIG5hbWUsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKFRBR19MSVNUKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PFN1Z2dlc3Rpb25DYXRlZ29yeT4oKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5lcXVhbHMoVEFHX0lURU0pKSB7CisgICAgICAgICAgICAgICAgU3VnZ2VzdGlvbkNhdGVnb3J5IGNhdGVnb3J5ID0gbmV3IFN1Z2dlc3Rpb25DYXRlZ29yeSgpOworICAgICAgICAgICAgICAgIGNhdGVnb3J5LmNhdGVnb3J5ID0gYXR0cnMuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9DQVRFR09SWSk7CisgICAgICAgICAgICAgICAgY2F0ZWdvcnkucGtnID0gYXR0cnMuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9QQUNLQUdFKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXVsdGlwbGUgPSBhdHRycy5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX01VTFRJUExFKTsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeS5tdWx0aXBsZSA9ICFUZXh0VXRpbHMuaXNFbXB0eShtdWx0aXBsZSkgJiYgQm9vbGVhbi5wYXJzZUJvb2xlYW4obXVsdGlwbGUpOworICAgICAgICAgICAgICAgIHJldHVybiBjYXRlZ29yeTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBpdGVtICIgKyBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1V0aWxzLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvVXRpbHMuamF2YQppbmRleCA2MjFhMDljZC4uNzJkZjk2ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1V0aWxzLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL1V0aWxzLmphdmEKQEAgLTEsMTcgKzEsMjEgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWI7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuVXNlckljb25zOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNldHRpbmdzbGliLmRyYXdhYmxlLkNpcmNsZUZyYW1lZERyYXdhYmxlOwogCi1wdWJsaWMgZmluYWwgY2xhc3MgVXRpbHMgeworaW1wb3J0IGphdmEudGV4dC5OdW1iZXJGb3JtYXQ7CisKK3B1YmxpYyBjbGFzcyBVdGlscyB7CiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gc3RyaW5nIHJlc291cmNlIHRoYXQgYmVzdCBkZXNjcmliZXMgY29tYmluYXRpb24gb2YgdGV0aGVyaW5nCkBAIC04MSw0ICs4NSw1NyBAQAogICAgICAgICByZXR1cm4gQ2lyY2xlRnJhbWVkRHJhd2FibGUuZ2V0SW5zdGFuY2UoY29udGV4dCwgVXNlckljb25zLmNvbnZlcnRUb0JpdG1hcCgKICAgICAgICAgICAgICAgICBVc2VySWNvbnMuZ2V0RGVmYXVsdFVzZXJJY29uKHVzZXIuaWQsIC8qIGxpZ2h0PSAqLyBmYWxzZSkpKTsKICAgICB9CisKKyAgICAvKiogRm9ybWF0cyB0aGUgcmF0aW8gb2YgYW1vdW50L3RvdGFsIGFzIGEgcGVyY2VudGFnZS4gKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBmb3JtYXRQZXJjZW50YWdlKGxvbmcgYW1vdW50LCBsb25nIHRvdGFsKSB7CisgICAgICAgIHJldHVybiBmb3JtYXRQZXJjZW50YWdlKCgoZG91YmxlKSBhbW91bnQpIC8gdG90YWwpOworICAgIH0KKworICAgIC8qKiBGb3JtYXRzIGFuIGludGVnZXIgZnJvbSAwLi4xMDAgYXMgYSBwZXJjZW50YWdlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdFBlcmNlbnRhZ2UoaW50IHBlcmNlbnRhZ2UpIHsKKyAgICAgICAgcmV0dXJuIGZvcm1hdFBlcmNlbnRhZ2UoKChkb3VibGUpIHBlcmNlbnRhZ2UpIC8gMTAwLjApOworICAgIH0KKworICAgIC8qKiBGb3JtYXRzIGEgZG91YmxlIGZyb20gMC4wLi4xLjAgYXMgYSBwZXJjZW50YWdlLiAqLworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRQZXJjZW50YWdlKGRvdWJsZSBwZXJjZW50YWdlKSB7CisgICAgICByZXR1cm4gTnVtYmVyRm9ybWF0LmdldFBlcmNlbnRJbnN0YW5jZSgpLmZvcm1hdChwZXJjZW50YWdlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGludCBnZXRCYXR0ZXJ5TGV2ZWwoSW50ZW50IGJhdHRlcnlDaGFuZ2VkSW50ZW50KSB7CisgICAgICAgIGludCBsZXZlbCA9IGJhdHRlcnlDaGFuZ2VkSW50ZW50LmdldEludEV4dHJhKEJhdHRlcnlNYW5hZ2VyLkVYVFJBX0xFVkVMLCAwKTsKKyAgICAgICAgaW50IHNjYWxlID0gYmF0dGVyeUNoYW5nZWRJbnRlbnQuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfU0NBTEUsIDEwMCk7CisgICAgICAgIHJldHVybiAobGV2ZWwgKiAxMDApIC8gc2NhbGU7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QmF0dGVyeVN0YXR1cyhSZXNvdXJjZXMgcmVzLCBJbnRlbnQgYmF0dGVyeUNoYW5nZWRJbnRlbnQpIHsKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IGJhdHRlcnlDaGFuZ2VkSW50ZW50OworCisgICAgICAgIGludCBwbHVnVHlwZSA9IGludGVudC5nZXRJbnRFeHRyYShCYXR0ZXJ5TWFuYWdlci5FWFRSQV9QTFVHR0VELCAwKTsKKyAgICAgICAgaW50IHN0YXR1cyA9IGludGVudC5nZXRJbnRFeHRyYShCYXR0ZXJ5TWFuYWdlci5FWFRSQV9TVEFUVVMsCisgICAgICAgICAgICAgICAgQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfVU5LTk9XTik7CisgICAgICAgIFN0cmluZyBzdGF0dXNTdHJpbmc7CisgICAgICAgIGlmIChzdGF0dXMgPT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkcpIHsKKyAgICAgICAgICAgIGludCByZXNJZDsKKyAgICAgICAgICAgIGlmIChwbHVnVHlwZSA9PSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1BMVUdHRURfQUMpIHsKKyAgICAgICAgICAgICAgICByZXNJZCA9IFIuc3RyaW5nLmJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfYWM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBsdWdUeXBlID09IEJhdHRlcnlNYW5hZ2VyLkJBVFRFUllfUExVR0dFRF9VU0IpIHsKKyAgICAgICAgICAgICAgICByZXNJZCA9IFIuc3RyaW5nLmJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfdXNiOworICAgICAgICAgICAgfSBlbHNlIGlmIChwbHVnVHlwZSA9PSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1BMVUdHRURfV0lSRUxFU1MpIHsKKyAgICAgICAgICAgICAgICByZXNJZCA9IFIuc3RyaW5nLmJhdHRlcnlfaW5mb19zdGF0dXNfY2hhcmdpbmdfd2lyZWxlc3M7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlc0lkID0gUi5zdHJpbmcuYmF0dGVyeV9pbmZvX3N0YXR1c19jaGFyZ2luZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXR1c1N0cmluZyA9IHJlcy5nZXRTdHJpbmcocmVzSWQpOworICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBCYXR0ZXJ5TWFuYWdlci5CQVRURVJZX1NUQVRVU19ESVNDSEFSR0lORykgeworICAgICAgICAgICAgc3RhdHVzU3RyaW5nID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5iYXR0ZXJ5X2luZm9fc3RhdHVzX2Rpc2NoYXJnaW5nKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfTk9UX0NIQVJHSU5HKSB7CisgICAgICAgICAgICBzdGF0dXNTdHJpbmcgPSByZXMuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfaW5mb19zdGF0dXNfbm90X2NoYXJnaW5nKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gQmF0dGVyeU1hbmFnZXIuQkFUVEVSWV9TVEFUVVNfRlVMTCkgeworICAgICAgICAgICAgc3RhdHVzU3RyaW5nID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5iYXR0ZXJ5X2luZm9fc3RhdHVzX2Z1bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhdHVzU3RyaW5nID0gcmVzLmdldFN0cmluZyhSLnN0cmluZy5iYXR0ZXJ5X2luZm9fc3RhdHVzX3Vua25vd24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0YXR1c1N0cmluZzsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcFV0aWxzLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcFV0aWxzLmphdmEKaW5kZXggMzQ0YmY2MjIuLmY2ZDkxMzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwVXRpbHMuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcFV0aWxzLmphdmEKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gYXBwRW50cnkuaW5mby5wYWNrYWdlTmFtZTsKICAgICAgICAgYm9vbGVhbiBoYXNQcmVmZXJyZWQgPSBoYXNQcmVmZXJyZWRBY3Rpdml0aWVzKHBtLCBwYWNrYWdlTmFtZSkKICAgICAgICAgICAgICAgICB8fCBoYXNVc2JEZWZhdWx0cyh1c2JNYW5hZ2VyLCBwYWNrYWdlTmFtZSk7Ci0gICAgICAgIGludCBzdGF0dXMgPSBwbS5nZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXMocGFja2FnZU5hbWUsIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7CisgICAgICAgIGludCBzdGF0dXMgPSBwbS5nZXRJbnRlbnRWZXJpZmljYXRpb25TdGF0dXNBc1VzZXIocGFja2FnZU5hbWUsIFVzZXJIYW5kbGUubXlVc2VySWQoKSk7CiAgICAgICAgIC8vIGNvbnNpZGVyIGEgdmlzaWJsZSBjdXJyZW50IGxpbmstaGFuZGxpbmcgc3RhdGUgdG8gYmUgYW55IGV4cGxpY2l0bHkgZGVzaWduYXRlZCBiZWhhdmlvcgogICAgICAgICBib29sZWFuIGhhc0RvbWFpblVSTHNQcmVmZXJlbmNlID0KICAgICAgICAgICAgICAgICBzdGF0dXMgIT0gUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTkRFRklORUQ7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcGxpY2F0aW9uc1N0YXRlLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvYXBwbGljYXRpb25zL0FwcGxpY2F0aW9uc1N0YXRlLmphdmEKaW5kZXggZTZmZTQ0Ny4uZDM1M2YzMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnNTdGF0ZS5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9hcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zU3RhdGUuamF2YQpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAobUVudHJpZXNNYXApIHsKICAgICAgICAgICAgIEFwcEVudHJ5IGVudHJ5ID0gbUVudHJpZXNNYXAuZ2V0KHVzZXJJZCkuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbVBtLmdldFBhY2thZ2VTaXplSW5mbyhwYWNrYWdlTmFtZSwgdXNlcklkLCBtQmFja2dyb3VuZEhhbmRsZXIubVN0YXRzT2JzZXJ2ZXIpOworICAgICAgICAgICAgICAgIG1QbS5nZXRQYWNrYWdlU2l6ZUluZm9Bc1VzZXIocGFja2FnZU5hbWUsIHVzZXJJZCwgbUJhY2tncm91bmRIYW5kbGVyLm1TdGF0c09ic2VydmVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChERUJVR19MT0NLSU5HKSBMb2cudihUQUcsICIuLi5yZXF1ZXN0U2l6ZSByZWxlYXNpbmcgbG9jayIpOwogICAgICAgICB9CkBAIC05MDYsNyArOTA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnNpemVMb2FkU3RhcnQgPSBub3c7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyQ29tcHV0aW5nU2l6ZVBrZyA9IGVudHJ5LmluZm8ucGFja2FnZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyQ29tcHV0aW5nU2l6ZVVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0VXNlcklkKGVudHJ5LmluZm8udWlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QbS5nZXRQYWNrYWdlU2l6ZUluZm8obUN1ckNvbXB1dGluZ1NpemVQa2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUG0uZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKG1DdXJDb21wdXRpbmdTaXplUGtnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyQ29tcHV0aW5nU2l6ZVVzZXJJZCwgbVN0YXRzT2JzZXJ2ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19MT0NLSU5HKSBMb2cudihUQUcsICJNU0dfTE9BRF9TSVpFUyByZWxlYXNpbmc6IG5vdyBjb21wdXRpbmciKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kZXZpY2VpbmZvL1N0b3JhZ2VNZWFzdXJlbWVudC5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RldmljZWluZm8vU3RvcmFnZU1lYXN1cmVtZW50LmphdmEKaW5kZXggOTc5MGU2NC4uM2I4MThjOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RldmljZWluZm8vU3RvcmFnZU1lYXN1cmVtZW50LmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RldmljZWluZm8vU3RvcmFnZU1lYXN1cmVtZW50LmphdmEKQEAgLTQyMiw3ICs0MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSwgY3VycmVudFByb2ZpbGVzLCBmaW5pc2hlZCwgY291bnQpOwogICAgICAgICAgICAgZm9yIChVc2VySW5mbyB1c2VyIDogdXNlcnMpIHsKICAgICAgICAgICAgICAgICBmb3IgKEFwcGxpY2F0aW9uSW5mbyBhcHAgOiB2b2x1bWVBcHBzKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VNYW5hZ2VyLmdldFBhY2thZ2VTaXplSW5mbyhhcHAucGFja2FnZU5hbWUsIHVzZXIuaWQsIG9ic2VydmVyKTsKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKGFwcC5wYWNrYWdlTmFtZSwgdXNlci5pZCwgb2JzZXJ2ZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9EYXNoYm9hcmRDYXRlZ29yeS5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9EYXNoYm9hcmRDYXRlZ29yeS5qYXZhCmluZGV4IDBmMzIyY2YuLjUzYmUwZTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvRGFzaGJvYXJkQ2F0ZWdvcnkuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZHJhd2VyL0Rhc2hib2FyZENhdGVnb3J5LmphdmEKQEAgLTQzLDIyICs0MywyMiBAQAogICAgIC8qKgogICAgICAqIExpc3Qgb2YgdGhlIGNhdGVnb3J5J3MgY2hpbGRyZW4KICAgICAgKi8KLSAgICBwdWJsaWMgTGlzdDxEYXNoYm9hcmRUaWxlPiB0aWxlcyA9IG5ldyBBcnJheUxpc3Q8RGFzaGJvYXJkVGlsZT4oKTsKKyAgICBwdWJsaWMgTGlzdDxUaWxlPiB0aWxlcyA9IG5ldyBBcnJheUxpc3Q8VGlsZT4oKTsKIAogCiAgICAgcHVibGljIERhc2hib2FyZENhdGVnb3J5KCkgewogICAgICAgICAvLyBFbXB0eQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFRpbGUoRGFzaGJvYXJkVGlsZSB0aWxlKSB7CisgICAgcHVibGljIHZvaWQgYWRkVGlsZShUaWxlIHRpbGUpIHsKICAgICAgICAgdGlsZXMuYWRkKHRpbGUpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZFRpbGUoaW50IG4sIERhc2hib2FyZFRpbGUgdGlsZSkgeworICAgIHB1YmxpYyB2b2lkIGFkZFRpbGUoaW50IG4sIFRpbGUgdGlsZSkgewogICAgICAgICB0aWxlcy5hZGQobiwgdGlsZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlVGlsZShEYXNoYm9hcmRUaWxlIHRpbGUpIHsKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVUaWxlKFRpbGUgdGlsZSkgewogICAgICAgICB0aWxlcy5yZW1vdmUodGlsZSk7CiAgICAgfQogCkBAIC03MCw3ICs3MCw3IEBACiAgICAgICAgIHJldHVybiB0aWxlcy5zaXplKCk7CiAgICAgfQogCi0gICAgcHVibGljIERhc2hib2FyZFRpbGUgZ2V0VGlsZShpbnQgbikgeworICAgIHB1YmxpYyBUaWxlIGdldFRpbGUoaW50IG4pIHsKICAgICAgICAgcmV0dXJuIHRpbGVzLmdldChuKTsKICAgICB9CiAKQEAgLTg5LDcgKzg5LDcgQEAKICAgICAgICAgZGVzdC53cml0ZUludChjb3VudCk7CiAKICAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0gICAgICAgICAgICBEYXNoYm9hcmRUaWxlIHRpbGUgPSB0aWxlcy5nZXQobik7CisgICAgICAgICAgICBUaWxlIHRpbGUgPSB0aWxlcy5nZXQobik7CiAgICAgICAgICAgICB0aWxlLndyaXRlVG9QYXJjZWwoZGVzdCwgZmxhZ3MpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IGluLnJlYWRJbnQoKTsKIAogICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLSAgICAgICAgICAgIERhc2hib2FyZFRpbGUgdGlsZSA9IERhc2hib2FyZFRpbGUuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGluKTsKKyAgICAgICAgICAgIFRpbGUgdGlsZSA9IFRpbGUuQ1JFQVRPUi5jcmVhdGVGcm9tUGFyY2VsKGluKTsKICAgICAgICAgICAgIHRpbGVzLmFkZCh0aWxlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvUHJvZmlsZVNlbGVjdERpYWxvZy5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9Qcm9maWxlU2VsZWN0RGlhbG9nLmphdmEKaW5kZXggNzkzZTg3N2QuLjJmZDA0M2YgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvUHJvZmlsZVNlbGVjdERpYWxvZy5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvUHJvZmlsZVNlbGVjdERpYWxvZy5qYXZhCkBAIC0zMCw5ICszMCw5IEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVJHX1NFTEVDVEVEX1RJTEUgPSAic2VsZWN0ZWRUaWxlIjsKIAotICAgIHByaXZhdGUgRGFzaGJvYXJkVGlsZSBtU2VsZWN0ZWRUaWxlOworICAgIHByaXZhdGUgVGlsZSBtU2VsZWN0ZWRUaWxlOwogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNob3coRnJhZ21lbnRNYW5hZ2VyIG1hbmFnZXIsIERhc2hib2FyZFRpbGUgdGlsZSkgeworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzaG93KEZyYWdtZW50TWFuYWdlciBtYW5hZ2VyLCBUaWxlIHRpbGUpIHsKICAgICAgICAgUHJvZmlsZVNlbGVjdERpYWxvZyBkaWFsb2cgPSBuZXcgUHJvZmlsZVNlbGVjdERpYWxvZygpOwogICAgICAgICBCdW5kbGUgYXJncyA9IG5ldyBCdW5kbGUoKTsKICAgICAgICAgYXJncy5wdXRQYXJjZWxhYmxlKEFSR19TRUxFQ1RFRF9USUxFLCB0aWxlKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvU2V0dGluZ3NEcmF3ZXJBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9TZXR0aW5nc0RyYXdlckFjdGl2aXR5LmphdmEKaW5kZXggMTAyZTQ3YS4uM2ZjMGMyMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9TZXR0aW5nc0RyYXdlckFjdGl2aXR5LmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9TZXR0aW5nc0RyYXdlckFjdGl2aXR5LmphdmEKQEAgLTQ5LDcgKzQ5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNldHRpbmdzRHJhd2VyQWN0aXZpdHkiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxEYXNoYm9hcmRDYXRlZ29yeT4gc0Rhc2hib2FyZENhdGVnb3JpZXM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxQYWlyPFN0cmluZywgU3RyaW5nPiwgRGFzaGJvYXJkVGlsZT4gc1RpbGVDYWNoZTsKKyAgICBwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFBhaXI8U3RyaW5nLCBTdHJpbmc+LCBUaWxlPiBzVGlsZUNhY2hlOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlUmVjZWl2ZXIgbVBhY2thZ2VSZWNlaXZlciA9IG5ldyBQYWNrYWdlUmVjZWl2ZXIoKTsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8Q2F0ZWdvcnlMaXN0ZW5lcj4gbUNhdGVnb3J5TGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBib29sZWFuIG9wZW5UaWxlKERhc2hib2FyZFRpbGUgdGlsZSkgeworICAgIHB1YmxpYyBib29sZWFuIG9wZW5UaWxlKFRpbGUgdGlsZSkgewogICAgICAgICBjbG9zZURyYXdlcigpOwogICAgICAgICBpZiAodGlsZSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIHZvaWQgb25UaWxlQ2xpY2tlZChEYXNoYm9hcmRUaWxlIHRpbGUpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBvblRpbGVDbGlja2VkKFRpbGUgdGlsZSkgewogICAgICAgICBpZiAob3BlblRpbGUodGlsZSkpIHsKICAgICAgICAgICAgIGZpbmlzaCgpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZHJhd2VyL1NldHRpbmdzRHJhd2VyQWRhcHRlci5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9TZXR0aW5nc0RyYXdlckFkYXB0ZXIuamF2YQppbmRleCAyNGM2YWU4Li43MmYxYzU2NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9TZXR0aW5nc0RyYXdlckFkYXB0ZXIuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZHJhd2VyL1NldHRpbmdzRHJhd2VyQWRhcHRlci5qYXZhCkBAIC00OCw3ICs0OCw3IEBACiAgICAgICAgICAgICBtSXRlbXMuYWRkKGNhdGVnb3J5KTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZGFzaGJvYXJkQ2F0ZWdvcnkudGlsZXMuc2l6ZSgpOyBqKyspIHsKICAgICAgICAgICAgICAgICBJdGVtIHRpbGUgPSBuZXcgSXRlbSgpOwotICAgICAgICAgICAgICAgIERhc2hib2FyZFRpbGUgZGFzaGJvYXJkVGlsZSA9IGRhc2hib2FyZENhdGVnb3J5LnRpbGVzLmdldChqKTsKKyAgICAgICAgICAgICAgICBUaWxlIGRhc2hib2FyZFRpbGUgPSBkYXNoYm9hcmRDYXRlZ29yeS50aWxlcy5nZXQoaik7CiAgICAgICAgICAgICAgICAgdGlsZS5sYWJlbCA9IGRhc2hib2FyZFRpbGUudGl0bGU7CiAgICAgICAgICAgICAgICAgdGlsZS5pY29uID0gZGFzaGJvYXJkVGlsZS5pY29uOwogICAgICAgICAgICAgICAgIHRpbGUudGlsZSA9IGRhc2hib2FyZFRpbGU7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgICAgIG5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgcHVibGljIERhc2hib2FyZFRpbGUgZ2V0VGlsZShpbnQgcG9zaXRpb24pIHsKKyAgICBwdWJsaWMgVGlsZSBnZXRUaWxlKGludCBwb3NpdGlvbikgewogICAgICAgICByZXR1cm4gbUl0ZW1zLmdldChwb3NpdGlvbikudGlsZTsKICAgICB9CiAKQEAgLTEwMSw2ICsxMDEsNiBAQAogICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEl0ZW0gewogICAgICAgICBwdWJsaWMgSWNvbiBpY29uOwogICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGxhYmVsOwotICAgICAgICBwdWJsaWMgRGFzaGJvYXJkVGlsZSB0aWxlOworICAgICAgICBwdWJsaWMgVGlsZSB0aWxlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvRGFzaGJvYXJkVGlsZS5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9UaWxlLmphdmEKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9EYXNoYm9hcmRUaWxlLmphdmEKcmVuYW1lIHRvIHBhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvVGlsZS5qYXZhCmluZGV4IDM0N2U5ZjcuLmIxNmNkMDggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvRGFzaGJvYXJkVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvVGlsZS5qYXZhCkBAIC0yOSw3ICsyOSw3IEBACiAvKioKICAqIERlc2NyaXB0aW9uIG9mIGEgc2luZ2xlIGRhc2hib2FyZCB0aWxlIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdC4KICAqLwotcHVibGljIGNsYXNzIERhc2hib2FyZFRpbGUgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKK3B1YmxpYyBjbGFzcyBUaWxlIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAKICAgICAvKioKICAgICAgKiBUaXRsZSBvZiB0aGUgdGlsZSB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLgpAQCAtNzksNyArNzksNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBCdW5kbGUgbWV0YURhdGE7CiAKLSAgICBwdWJsaWMgRGFzaGJvYXJkVGlsZSgpIHsKKyAgICBwdWJsaWMgVGlsZSgpIHsKICAgICAgICAgLy8gRW1wdHkKICAgICB9CiAKQEAgLTEzNCwxNiArMTM0LDE2IEBACiAgICAgICAgIG1ldGFEYXRhID0gaW4ucmVhZEJ1bmRsZSgpOwogICAgIH0KIAotICAgIERhc2hib2FyZFRpbGUoUGFyY2VsIGluKSB7CisgICAgVGlsZShQYXJjZWwgaW4pIHsKICAgICAgICAgcmVhZEZyb21QYXJjZWwoaW4pOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ3JlYXRvcjxEYXNoYm9hcmRUaWxlPiBDUkVBVE9SID0gbmV3IENyZWF0b3I8RGFzaGJvYXJkVGlsZT4oKSB7Ci0gICAgICAgIHB1YmxpYyBEYXNoYm9hcmRUaWxlIGNyZWF0ZUZyb21QYXJjZWwoUGFyY2VsIHNvdXJjZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXNoYm9hcmRUaWxlKHNvdXJjZSk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBDcmVhdG9yPFRpbGU+IENSRUFUT1IgPSBuZXcgQ3JlYXRvcjxUaWxlPigpIHsKKyAgICAgICAgcHVibGljIFRpbGUgY3JlYXRlRnJvbVBhcmNlbChQYXJjZWwgc291cmNlKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFRpbGUoc291cmNlKTsKICAgICAgICAgfQotICAgICAgICBwdWJsaWMgRGFzaGJvYXJkVGlsZVtdIG5ld0FycmF5KGludCBzaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERhc2hib2FyZFRpbGVbc2l6ZV07CisgICAgICAgIHB1YmxpYyBUaWxlW10gbmV3QXJyYXkoaW50IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgVGlsZVtzaXplXTsKICAgICAgICAgfQogICAgIH07CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZHJhd2VyL1RpbGVVdGlscy5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL2RyYXdlci9UaWxlVXRpbHMuamF2YQppbmRleCA2YjM2NjgwLi4yZGZkZmRhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvZHJhd2VyL1RpbGVVdGlscy5qYXZhCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzTGliL3NyYy9jb20vYW5kcm9pZC9zZXR0aW5nc2xpYi9kcmF3ZXIvVGlsZVV0aWxzLmphdmEKQEAgLTEsMTMgKzEsMTggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICAqCiAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQogICovCi0KIHBhY2thZ2UgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWIuZHJhd2VyOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwpAQCAtMTA4LDkgKzExMyw5IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFVFRJTkdfUEtHID0gImNvbS5hbmRyb2lkLnNldHRpbmdzIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxEYXNoYm9hcmRDYXRlZ29yeT4gZ2V0Q2F0ZWdvcmllcyhDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICBIYXNoTWFwPFBhaXI8U3RyaW5nLCBTdHJpbmc+LCBEYXNoYm9hcmRUaWxlPiBjYWNoZSkgeworICAgICAgICAgICAgSGFzaE1hcDxQYWlyPFN0cmluZywgU3RyaW5nPiwgVGlsZT4gY2FjaGUpIHsKICAgICAgICAgZmluYWwgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgQXJyYXlMaXN0PERhc2hib2FyZFRpbGU+IHRpbGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIEFycmF5TGlzdDxUaWxlPiB0aWxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBVc2VyTWFuYWdlciB1c2VyTWFuYWdlciA9IFVzZXJNYW5hZ2VyLmdldChjb250ZXh0KTsKICAgICAgICAgZm9yIChVc2VySGFuZGxlIHVzZXIgOiB1c2VyTWFuYWdlci5nZXRVc2VyUHJvZmlsZXMoKSkgewogICAgICAgICAgICAgLy8gVE9ETzogTmVlZHMgbXVjaCBvcHRpbWl6YXRpb24sIHRvbyBtYW55IFBNIHF1ZXJpZXMgZ29pbmcgb24gaGVyZS4KQEAgLTEyNSw3ICsxMzAsNyBAQAogICAgICAgICAgICAgZ2V0VGlsZXNGb3JBY3Rpb24oY29udGV4dCwgdXNlciwgRVhUUkFfU0VUVElOR1NfQUNUSU9OLCBjYWNoZSwgbnVsbCwgdGlsZXMsIGZhbHNlKTsKICAgICAgICAgfQogICAgICAgICBIYXNoTWFwPFN0cmluZywgRGFzaGJvYXJkQ2F0ZWdvcnk+IGNhdGVnb3J5TWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgICAgICBmb3IgKERhc2hib2FyZFRpbGUgdGlsZSA6IHRpbGVzKSB7CisgICAgICAgIGZvciAoVGlsZSB0aWxlIDogdGlsZXMpIHsKICAgICAgICAgICAgIERhc2hib2FyZENhdGVnb3J5IGNhdGVnb3J5ID0gY2F0ZWdvcnlNYXAuZ2V0KHRpbGUuY2F0ZWdvcnkpOwogICAgICAgICAgICAgaWYgKGNhdGVnb3J5ID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IGNyZWF0ZUNhdGVnb3J5KGNvbnRleHQsIHRpbGUuY2F0ZWdvcnkpOwpAQCAtMTcwLDMwICsxNzUsMzQgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdldFRpbGVzRm9yQWN0aW9uKENvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgU3RyaW5nIGFjdGlvbiwgTWFwPFBhaXI8U3RyaW5nLCBTdHJpbmc+LCBEYXNoYm9hcmRUaWxlPiBhZGRlZENhY2hlLAotICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRDYXRlZ29yeSwgQXJyYXlMaXN0PERhc2hib2FyZFRpbGU+IG91dFRpbGVzLCBib29sZWFuIHJlcXVpcmVTZXR0aW5ncykgewotICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgU3RyaW5nIGFjdGlvbiwgTWFwPFBhaXI8U3RyaW5nLCBTdHJpbmc+LCBUaWxlPiBhZGRlZENhY2hlLAorICAgICAgICAgICAgU3RyaW5nIGRlZmF1bHRDYXRlZ29yeSwgQXJyYXlMaXN0PFRpbGU+IG91dFRpbGVzLCBib29sZWFuIHJlcXVpcmVTZXR0aW5ncykgewogICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChhY3Rpb24pOworICAgICAgICBpZiAocmVxdWlyZVNldHRpbmdzKSB7CisgICAgICAgICAgICBpbnRlbnQuc2V0UGFja2FnZShTRVRUSU5HX1BLRyk7CisgICAgICAgIH0KKyAgICAgICAgZ2V0VGlsZXNGb3JJbnRlbnQoY29udGV4dCwgdXNlciwgaW50ZW50LCBhZGRlZENhY2hlLCBkZWZhdWx0Q2F0ZWdvcnksIG91dFRpbGVzLAorICAgICAgICAgICAgICAgIHJlcXVpcmVTZXR0aW5ncywgdHJ1ZSk7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGdldFRpbGVzRm9ySW50ZW50KENvbnRleHQgY29udGV4dCwgVXNlckhhbmRsZSB1c2VyLCBJbnRlbnQgaW50ZW50LAorICAgICAgICAgICAgTWFwPFBhaXI8U3RyaW5nLCBTdHJpbmc+LCBUaWxlPiBhZGRlZENhY2hlLCBTdHJpbmcgZGVmYXVsdENhdGVnb3J5LCBMaXN0PFRpbGU+IG91dFRpbGVzLAorICAgICAgICAgICAgYm9vbGVhbiB1c2VQcmlvcml0eSwgYm9vbGVhbiBjaGVja0NhdGVnb3J5KSB7CisgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiByZXN1bHRzID0gcG0ucXVlcnlJbnRlbnRBY3Rpdml0aWVzQXNVc2VyKGludGVudCwKICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgIGZvciAoUmVzb2x2ZUluZm8gcmVzb2x2ZWQgOiByZXN1bHRzKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZVNldHRpbmdzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFTRVRUSU5HX1BLRy5lcXVhbHMocmVzb2x2ZWQuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLnN5c3RlbSkgewotICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgYW55IGFwcCB0byBhZGQgdG8gc2V0dGluZ3MsIG9ubHkgc3lzdGVtIG9uZXMuCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcmVzb2x2ZWQuc3lzdGVtKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IGFueSBhcHAgdG8gYWRkIHRvIHNldHRpbmdzLCBvbmx5IHN5c3RlbSBvbmVzLgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IHJlc29sdmVkLmFjdGl2aXR5SW5mbzsKICAgICAgICAgICAgIEJ1bmRsZSBtZXRhRGF0YSA9IGFjdGl2aXR5SW5mby5tZXRhRGF0YTsKICAgICAgICAgICAgIFN0cmluZyBjYXRlZ29yeUtleSA9IGRlZmF1bHRDYXRlZ29yeTsKLSAgICAgICAgICAgIGlmICgoKG1ldGFEYXRhID09IG51bGwpIHx8ICFtZXRhRGF0YS5jb250YWluc0tleShFWFRSQV9DQVRFR09SWV9LRVkpKQorICAgICAgICAgICAgaWYgKGNoZWNrQ2F0ZWdvcnkgJiYgKChtZXRhRGF0YSA9PSBudWxsKSB8fCAhbWV0YURhdGEuY29udGFpbnNLZXkoRVhUUkFfQ0FURUdPUllfS0VZKSkKICAgICAgICAgICAgICAgICAgICAgJiYgY2F0ZWdvcnlLZXkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGb3VuZCAiICsgcmVzb2x2ZWQuYWN0aXZpdHlJbmZvLm5hbWUgKyAiIGZvciBhY3Rpb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3Rpb24gKyAiIG1pc3NpbmcgbWV0YWRhdGEgIgorICAgICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJGb3VuZCAiICsgcmVzb2x2ZWQuYWN0aXZpdHlJbmZvLm5hbWUgKyAiIGZvciBpbnRlbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQgKyAiIG1pc3NpbmcgbWV0YWRhdGEgIgogICAgICAgICAgICAgICAgICAgICAgICAgKyAobWV0YURhdGEgPT0gbnVsbCA/ICIiIDogRVhUUkFfQ0FURUdPUllfS0VZKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjAxLDEzICsyMTAsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBhaXI8U3RyaW5nLCBTdHJpbmc+IGtleSA9IG5ldyBQYWlyPFN0cmluZywgU3RyaW5nPihhY3Rpdml0eUluZm8ucGFja2FnZU5hbWUsCiAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5SW5mby5uYW1lKTsKLSAgICAgICAgICAgIERhc2hib2FyZFRpbGUgdGlsZSA9IGFkZGVkQ2FjaGUuZ2V0KGtleSk7CisgICAgICAgICAgICBUaWxlIHRpbGUgPSBhZGRlZENhY2hlLmdldChrZXkpOwogICAgICAgICAgICAgaWYgKHRpbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRpbGUgPSBuZXcgRGFzaGJvYXJkVGlsZSgpOworICAgICAgICAgICAgICAgIHRpbGUgPSBuZXcgVGlsZSgpOwogICAgICAgICAgICAgICAgIHRpbGUuaW50ZW50ID0gbmV3IEludGVudCgpLnNldENsYXNzTmFtZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZSwgYWN0aXZpdHlJbmZvLm5hbWUpOwogICAgICAgICAgICAgICAgIHRpbGUuY2F0ZWdvcnkgPSBjYXRlZ29yeUtleTsKLSAgICAgICAgICAgICAgICB0aWxlLnByaW9yaXR5ID0gcmVxdWlyZVNldHRpbmdzID8gcmVzb2x2ZWQucHJpb3JpdHkgOiAwOworICAgICAgICAgICAgICAgIHRpbGUucHJpb3JpdHkgPSB1c2VQcmlvcml0eSA/IHJlc29sdmVkLnByaW9yaXR5IDogMDsKICAgICAgICAgICAgICAgICB0aWxlLm1ldGFEYXRhID0gYWN0aXZpdHlJbmZvLm1ldGFEYXRhOwogICAgICAgICAgICAgICAgIHVwZGF0ZVRpbGVEYXRhKGNvbnRleHQsIHRpbGUsIGFjdGl2aXR5SW5mbywgYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgIHBtKTsKQEAgLTIzNCw3ICsyNDMsNyBAQAogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHVwZGF0ZVRpbGVEYXRhKENvbnRleHQgY29udGV4dCwgRGFzaGJvYXJkVGlsZSB0aWxlLAorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdXBkYXRlVGlsZURhdGEoQ29udGV4dCBjb250ZXh0LCBUaWxlIHRpbGUsCiAgICAgICAgICAgICBBY3Rpdml0eUluZm8gYWN0aXZpdHlJbmZvLCBBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25JbmZvLCBQYWNrYWdlTWFuYWdlciBwbSkgewogICAgICAgICBpZiAoYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKICAgICAgICAgICAgIGludCBpY29uID0gMDsKQEAgLTI1MiwxMCArMjYxLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpY29uID0gbWV0YURhdGEuZ2V0SW50KE1FVEFfREFUQV9QUkVGRVJFTkNFX0lDT04pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS5jb250YWluc0tleShNRVRBX0RBVEFfUFJFRkVSRU5DRV9USVRMRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gbWV0YURhdGEuZ2V0U3RyaW5nKE1FVEFfREFUQV9QUkVGRVJFTkNFX1RJVExFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS5nZXQoTUVUQV9EQVRBX1BSRUZFUkVOQ0VfVElUTEUpIGluc3RhbmNlb2YgSW50ZWdlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gcmVzLmdldFN0cmluZyhtZXRhRGF0YS5nZXRJbnQoTUVUQV9EQVRBX1BSRUZFUkVOQ0VfVElUTEUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBtZXRhRGF0YS5nZXRTdHJpbmcoTUVUQV9EQVRBX1BSRUZFUkVOQ0VfVElUTEUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS5jb250YWluc0tleShNRVRBX0RBVEFfUFJFRkVSRU5DRV9TVU1NQVJZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IG1ldGFEYXRhLmdldFN0cmluZyhNRVRBX0RBVEFfUFJFRkVSRU5DRV9TVU1NQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS5nZXQoTUVUQV9EQVRBX1BSRUZFUkVOQ0VfU1VNTUFSWSkgaW5zdGFuY2VvZiBJbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IHJlcy5nZXRTdHJpbmcobWV0YURhdGEuZ2V0SW50KE1FVEFfREFUQV9QUkVGRVJFTkNFX1NVTU1BUlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IG1ldGFEYXRhLmdldFN0cmluZyhNRVRBX0RBVEFfUFJFRkVSRU5DRV9TVU1NQVJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB8IFJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC0yODUsMTAgKzMwMiwxMCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvcjxEYXNoYm9hcmRUaWxlPiBUSUxFX0NPTVBBUkFUT1IgPQotICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8RGFzaGJvYXJkVGlsZT4oKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvcjxUaWxlPiBUSUxFX0NPTVBBUkFUT1IgPQorICAgICAgICAgICAgbmV3IENvbXBhcmF0b3I8VGlsZT4oKSB7CiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoRGFzaGJvYXJkVGlsZSBsaHMsIERhc2hib2FyZFRpbGUgcmhzKSB7CisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShUaWxlIGxocywgVGlsZSByaHMpIHsKICAgICAgICAgICAgIHJldHVybiByaHMucHJpb3JpdHkgLSBsaHMucHJpb3JpdHk7CiAgICAgICAgIH0KICAgICB9OwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL3VzZXJzL0FwcFJlc3RyaWN0aW9uc0hlbHBlci5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NMaWIvc3JjL2NvbS9hbmRyb2lkL3NldHRpbmdzbGliL3VzZXJzL0FwcFJlc3RyaWN0aW9uc0hlbHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmViMTAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc0xpYi9zcmMvY29tL2FuZHJvaWQvc2V0dGluZ3NsaWIvdXNlcnMvQXBwUmVzdHJpY3Rpb25zSGVscGVyLmphdmEKQEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2V0dGluZ3NsaWIudXNlcnM7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOworaW1wb3J0IGFuZHJvaWQuYXBwd2lkZ2V0LkFwcFdpZGdldE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFyY2VsZWRMaXN0U2xpY2U7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuSW5wdXRNZXRob2RNYW5hZ2VyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitwdWJsaWMgY2xhc3MgQXBwUmVzdHJpY3Rpb25zSGVscGVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSZXN0cmljdGlvbnNIZWxwZXIiOworCisgICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IG1Db250ZXh0OworICAgIHByaXZhdGUgZmluYWwgUGFja2FnZU1hbmFnZXIgbVBhY2thZ2VNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgSVBhY2thZ2VNYW5hZ2VyIG1JUG07CisgICAgcHJpdmF0ZSBmaW5hbCBVc2VyTWFuYWdlciBtVXNlck1hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBVc2VySGFuZGxlIG1Vc2VyOworICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUmVzdHJpY3RlZFByb2ZpbGU7CisKKyAgICBIYXNoTWFwPFN0cmluZyxCb29sZWFuPiBtU2VsZWN0ZWRQYWNrYWdlcyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICBwcml2YXRlIExpc3Q8U2VsZWN0YWJsZUFwcEluZm8+IG1WaXNpYmxlQXBwczsKKworICAgIHB1YmxpYyBBcHBSZXN0cmljdGlvbnNIZWxwZXIoQ29udGV4dCBjb250ZXh0LCBVc2VySGFuZGxlIHVzZXIpIHsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtUGFja2FnZU1hbmFnZXIgPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIG1JUG0gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIG1Vc2VyID0gdXNlcjsKKyAgICAgICAgbVVzZXJNYW5hZ2VyID0gKFVzZXJNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5VU0VSX1NFUlZJQ0UpOworICAgICAgICBtUmVzdHJpY3RlZFByb2ZpbGUgPSBtVXNlck1hbmFnZXIuZ2V0VXNlckluZm8obVVzZXIuZ2V0SWRlbnRpZmllcigpKS5pc1Jlc3RyaWN0ZWQoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYWNrYWdlU2VsZWN0ZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBib29sZWFuIHNlbGVjdGVkKSB7CisgICAgICAgIG1TZWxlY3RlZFBhY2thZ2VzLnB1dChwYWNrYWdlTmFtZSwgc2VsZWN0ZWQpOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzUGFja2FnZVNlbGVjdGVkKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICByZXR1cm4gbVNlbGVjdGVkUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxTZWxlY3RhYmxlQXBwSW5mbz4gZ2V0VmlzaWJsZUFwcHMoKSB7CisgICAgICAgIHJldHVybiBtVmlzaWJsZUFwcHM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYXBwbHlVc2VyQXBwc1N0YXRlcyhPbkRpc2FibGVVaUZvclBhY2thZ2VMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gbVVzZXIuZ2V0SWRlbnRpZmllcigpOworICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5nZXRVc2VySW5mbyh1c2VySWQpLmlzUmVzdHJpY3RlZCgpICYmIHVzZXJJZCAhPSBVc2VySGFuZGxlLm15VXNlcklkKCkpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBhcHBseSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgb24gYW5vdGhlciB1c2VyISIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZyxCb29sZWFuPiBlbnRyeSA6IG1TZWxlY3RlZFBhY2thZ2VzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGVudHJ5LmdldEtleSgpOworICAgICAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gZW50cnkuZ2V0VmFsdWUoKTsKKyAgICAgICAgICAgIGFwcGx5VXNlckFwcFN0YXRlKHBhY2thZ2VOYW1lLCBlbmFibGVkLCBsaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhcHBseVVzZXJBcHBTdGF0ZShTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gZW5hYmxlZCwKKyAgICAgICAgICAgIE9uRGlzYWJsZVVpRm9yUGFja2FnZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBtVXNlci5nZXRJZGVudGlmaWVyKCk7CisgICAgICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgICAgICAvLyBFbmFibGUgc2VsZWN0ZWQgYXBwcworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gaW5mbyA9IG1JUG0uZ2V0QXBwbGljYXRpb25JbmZvKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8gPT0gbnVsbCB8fCAhaW5mby5lbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaW5mby5mbGFncyZBcHBsaWNhdGlvbkluZm8uRkxBR19JTlNUQUxMRUQpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUlQbS5pbnN0YWxsRXhpc3RpbmdQYWNrYWdlQXNVc2VyKHBhY2thZ2VOYW1lLCBtVXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkluc3RhbGxpbmcgIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW5mbyAhPSBudWxsICYmIChpbmZvLnByaXZhdGVGbGFncyZBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX0hJRERFTikgIT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGluZm8uZmxhZ3MmQXBwbGljYXRpb25JbmZvLkZMQUdfSU5TVEFMTEVEKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLm9uRGlzYWJsZVVpRm9yUGFja2FnZShwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIG1JUG0uc2V0QXBwbGljYXRpb25IaWRkZW5TZXR0aW5nQXNVc2VyKHBhY2thZ2VOYW1lLCBmYWxzZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJVbmhpZGluZyAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBCbGFja2xpc3QgYWxsIG90aGVyIGFwcHMsIHN5c3RlbSBvciBkb3dubG9hZGVkCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBpbmZvID0gbUlQbS5nZXRBcHBsaWNhdGlvbkluZm8ocGFja2FnZU5hbWUsIDAsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobVJlc3RyaWN0ZWRQcm9maWxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSVBtLmRlbGV0ZVBhY2thZ2VBc1VzZXIocGFja2FnZU5hbWUsIG51bGwsIG1Vc2VyLmdldElkZW50aWZpZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuREVMRVRFX1NZU1RFTV9BUFApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiVW5pbnN0YWxsaW5nICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lci5vbkRpc2FibGVVaUZvclBhY2thZ2UocGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbUlQbS5zZXRBcHBsaWNhdGlvbkhpZGRlblNldHRpbmdBc1VzZXIocGFja2FnZU5hbWUsIHRydWUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJIaWRpbmcgIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgIC8vIElnbm9yZQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZmV0Y2hBbmRNZXJnZUFwcHMoKSB7CisgICAgICAgIG1WaXNpYmxlQXBwcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1QYWNrYWdlTWFuYWdlcjsKKyAgICAgICAgZmluYWwgSVBhY2thZ2VNYW5hZ2VyIGlwbSA9IG1JUG07CisKKyAgICAgICAgZmluYWwgSGFzaFNldDxTdHJpbmc+IGV4Y2x1ZGVQYWNrYWdlcyA9IG5ldyBIYXNoU2V0PD4oKTsKKyAgICAgICAgYWRkU3lzdGVtSW1lcyhleGNsdWRlUGFja2FnZXMpOworCisgICAgICAgIC8vIEFkZCBsYXVuY2hlcnMKKyAgICAgICAgSW50ZW50IGxhdW5jaGVySW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX01BSU4pOworICAgICAgICBsYXVuY2hlckludGVudC5hZGRDYXRlZ29yeShJbnRlbnQuQ0FURUdPUllfTEFVTkNIRVIpOworICAgICAgICBhZGRTeXN0ZW1BcHBzKG1WaXNpYmxlQXBwcywgbGF1bmNoZXJJbnRlbnQsIGV4Y2x1ZGVQYWNrYWdlcyk7CisKKyAgICAgICAgLy8gQWRkIHdpZGdldHMKKyAgICAgICAgSW50ZW50IHdpZGdldEludGVudCA9IG5ldyBJbnRlbnQoQXBwV2lkZ2V0TWFuYWdlci5BQ1RJT05fQVBQV0lER0VUX1VQREFURSk7CisgICAgICAgIGFkZFN5c3RlbUFwcHMobVZpc2libGVBcHBzLCB3aWRnZXRJbnRlbnQsIGV4Y2x1ZGVQYWNrYWdlcyk7CisKKyAgICAgICAgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGluc3RhbGxlZEFwcHMgPSBwbS5nZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoCisgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpOworICAgICAgICBmb3IgKEFwcGxpY2F0aW9uSW5mbyBhcHAgOiBpbnN0YWxsZWRBcHBzKSB7CisgICAgICAgICAgICAvLyBJZiBpdCdzIG5vdCBpbnN0YWxsZWQsIHNraXAKKyAgICAgICAgICAgIGlmICgoYXBwLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfSU5TVEFMTEVEKSA9PSAwKSBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKChhcHAuZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19TWVNURU0pID09IDAKKyAgICAgICAgICAgICAgICAgICAgJiYgKGFwcC5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1VQREFURURfU1lTVEVNX0FQUCkgPT0gMCkgeworICAgICAgICAgICAgICAgIC8vIERvd25sb2FkZWQgYXBwCisgICAgICAgICAgICAgICAgU2VsZWN0YWJsZUFwcEluZm8gaW5mbyA9IG5ldyBTZWxlY3RhYmxlQXBwSW5mbygpOworICAgICAgICAgICAgICAgIGluZm8ucGFja2FnZU5hbWUgPSBhcHAucGFja2FnZU5hbWU7CisgICAgICAgICAgICAgICAgaW5mby5hcHBOYW1lID0gYXBwLmxvYWRMYWJlbChwbSk7CisgICAgICAgICAgICAgICAgaW5mby5hY3Rpdml0eU5hbWUgPSBpbmZvLmFwcE5hbWU7CisgICAgICAgICAgICAgICAgaW5mby5pY29uID0gYXBwLmxvYWRJY29uKHBtKTsKKyAgICAgICAgICAgICAgICBtVmlzaWJsZUFwcHMuYWRkKGluZm8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBwaSA9IHBtLmdldFBhY2thZ2VJbmZvKGFwcC5wYWNrYWdlTmFtZSwgMCk7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgYSBzeXN0ZW0gYXBwIHRoYXQgcmVxdWlyZXMgYW4gYWNjb3VudCBhbmQgZG9lc24ndCBzZWUgcmVzdHJpY3RlZAorICAgICAgICAgICAgICAgICAgICAvLyBhY2NvdW50cywgbWFyayBmb3IgcmVtb3ZhbC4gSXQgbWlnaHQgZ2V0IHNob3duIGluIHRoZSBVSSBpZiBpdCBoYXMgYW4gaWNvbgorICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMgZmFsc2UgYW5kIGltbXV0YWJsZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXN0cmljdGVkUHJvZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHBpLnJlcXVpcmVkQWNjb3VudFR5cGUgIT0gbnVsbCAmJiBwaS5yZXN0cmljdGVkQWNjb3VudFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbVNlbGVjdGVkUGFja2FnZXMucHV0KGFwcC5wYWNrYWdlTmFtZSwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNraXAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBHZXQgdGhlIGxpc3Qgb2YgYXBwcyBhbHJlYWR5IGluc3RhbGxlZCBmb3IgdGhlIHVzZXIKKyAgICAgICAgTGlzdDxBcHBsaWNhdGlvbkluZm8+IHVzZXJBcHBzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPEFwcGxpY2F0aW9uSW5mbz4gbGlzdFNsaWNlID0gaXBtLmdldEluc3RhbGxlZEFwcGxpY2F0aW9ucygKKyAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIG1Vc2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICBpZiAobGlzdFNsaWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICB1c2VyQXBwcyA9IGxpc3RTbGljZS5nZXRMaXN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgLy8gSWdub3JlCisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlckFwcHMgIT0gbnVsbCkgeworICAgICAgICAgICAgZm9yIChBcHBsaWNhdGlvbkluZm8gYXBwIDogdXNlckFwcHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGFwcC5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX0lOU1RBTExFRCkgPT0gMCkgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoKGFwcC5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGFwcC5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1VQREFURURfU1lTVEVNX0FQUCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvLyBEb3dubG9hZGVkIGFwcAorICAgICAgICAgICAgICAgICAgICBTZWxlY3RhYmxlQXBwSW5mbyBpbmZvID0gbmV3IFNlbGVjdGFibGVBcHBJbmZvKCk7CisgICAgICAgICAgICAgICAgICAgIGluZm8ucGFja2FnZU5hbWUgPSBhcHAucGFja2FnZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGluZm8uYXBwTmFtZSA9IGFwcC5sb2FkTGFiZWwocG0pOworICAgICAgICAgICAgICAgICAgICBpbmZvLmFjdGl2aXR5TmFtZSA9IGluZm8uYXBwTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5pY29uID0gYXBwLmxvYWRJY29uKHBtKTsKKyAgICAgICAgICAgICAgICAgICAgbVZpc2libGVBcHBzLmFkZChpbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTb3J0IHRoZSBsaXN0IG9mIHZpc2libGUgYXBwcworICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KG1WaXNpYmxlQXBwcywgbmV3IEFwcExhYmVsQ29tcGFyYXRvcigpKTsKKworICAgICAgICAvLyBSZW1vdmUgZHVwZXMKKyAgICAgICAgU2V0PFN0cmluZz4gZGVkdXBQYWNrYWdlU2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICBmb3IgKGludCBpID0gbVZpc2libGVBcHBzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBTZWxlY3RhYmxlQXBwSW5mbyBpbmZvID0gbVZpc2libGVBcHBzLmdldChpKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmkoVEFHLCBpbmZvLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgU3RyaW5nIGJvdGggPSBpbmZvLnBhY2thZ2VOYW1lICsgIisiICsgaW5mby5hY3Rpdml0eU5hbWU7CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGluZm8ucGFja2FnZU5hbWUpCisgICAgICAgICAgICAgICAgICAgICYmICFUZXh0VXRpbHMuaXNFbXB0eShpbmZvLmFjdGl2aXR5TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgZGVkdXBQYWNrYWdlU2V0LmNvbnRhaW5zKGJvdGgpKSB7CisgICAgICAgICAgICAgICAgbVZpc2libGVBcHBzLnJlbW92ZShpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVkdXBQYWNrYWdlU2V0LmFkZChib3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEVzdGFibGlzaCBtYXN0ZXIvc2xhdmUgcmVsYXRpb25zaGlwIGZvciBlbnRyaWVzIHRoYXQgc2hhcmUgYSBwYWNrYWdlIG5hbWUKKyAgICAgICAgSGFzaE1hcDxTdHJpbmcsU2VsZWN0YWJsZUFwcEluZm8+IHBhY2thZ2VNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU2VsZWN0YWJsZUFwcEluZm8+KCk7CisgICAgICAgIGZvciAoU2VsZWN0YWJsZUFwcEluZm8gaW5mbyA6IG1WaXNpYmxlQXBwcykgeworICAgICAgICAgICAgaWYgKHBhY2thZ2VNYXAuY29udGFpbnNLZXkoaW5mby5wYWNrYWdlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpbmZvLm1hc3RlckVudHJ5ID0gcGFja2FnZU1hcC5nZXQoaW5mby5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhY2thZ2VNYXAucHV0KGluZm8ucGFja2FnZU5hbWUsIGluZm8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluZCBhbGwgcHJlLWluc3RhbGxlZCBpbnB1dCBtZXRob2RzIHRoYXQgYXJlIG1hcmtlZCBhcyBkZWZhdWx0CisgICAgICogYW5kIGFkZCB0aGVtIHRvIGFuIGV4Y2x1c2lvbiBsaXN0IHNvIHRoYXQgdGhleSBhcmVuJ3QKKyAgICAgKiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgZm9yIHRvZ2dsaW5nLgorICAgICAqIERvbid0IGFkZCBub24tZGVmYXVsdCBvbmVzLCBhcyB0aGV5IG1heSBpbmNsdWRlIG90aGVyIHN0dWZmIHRoYXQgd2UKKyAgICAgKiBkb24ndCBuZWVkIHRvIGF1dG8taW5jbHVkZS4KKyAgICAgKiBAcGFyYW0gZXhjbHVkZVBhY2thZ2VzIHRoZSBzZXQgb2YgcGFja2FnZSBuYW1lcyB0byBhcHBlbmQgdG8KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYWRkU3lzdGVtSW1lcyhTZXQ8U3RyaW5nPiBleGNsdWRlUGFja2FnZXMpIHsKKyAgICAgICAgSW5wdXRNZXRob2RNYW5hZ2VyIGltbSA9IChJbnB1dE1ldGhvZE1hbmFnZXIpCisgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LklOUFVUX01FVEhPRF9TRVJWSUNFKTsKKyAgICAgICAgTGlzdDxJbnB1dE1ldGhvZEluZm8+IGltaXMgPSBpbW0uZ2V0SW5wdXRNZXRob2RMaXN0KCk7CisgICAgICAgIGZvciAoSW5wdXRNZXRob2RJbmZvIGltaSA6IGltaXMpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKGltaS5pc0RlZmF1bHQobUNvbnRleHQpICYmIGlzU3lzdGVtUGFja2FnZShpbWkuZ2V0UGFja2FnZU5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZVBhY2thZ2VzLmFkZChpbWkuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uIHJuZmUpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3QgZGVmYXVsdAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIHN5c3RlbSBhcHBzIHRoYXQgbWF0Y2ggYW4gaW50ZW50IHRvIHRoZSBsaXN0LCBleGNsdWRpbmcgYW55IHBhY2thZ2VzIGluIHRoZSBleGNsdWRlIGxpc3QuCisgICAgICogQHBhcmFtIHZpc2libGVBcHBzIGxpc3Qgb2YgYXBwcyB0byBhcHBlbmQgdGhlIG5ldyBsaXN0IHRvCisgICAgICogQHBhcmFtIGludGVudCB0aGUgaW50ZW50IHRvIG1hdGNoCisgICAgICogQHBhcmFtIGV4Y2x1ZGVQYWNrYWdlcyB0aGUgc2V0IG9mIHBhY2thZ2UgbmFtZXMgdG8gYmUgZXhjbHVkZWQsIHNpbmNlIHRoZXkncmUgcmVxdWlyZWQKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYWRkU3lzdGVtQXBwcyhMaXN0PFNlbGVjdGFibGVBcHBJbmZvPiB2aXNpYmxlQXBwcywgSW50ZW50IGludGVudCwKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IGV4Y2x1ZGVQYWNrYWdlcykgeworICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1QYWNrYWdlTWFuYWdlcjsKKyAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gbGF1bmNoYWJsZUFwcHMgPSBwbS5xdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LAorICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RJU0FCTEVEX0NPTVBPTkVOVFMgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUyk7CisgICAgICAgIGZvciAoUmVzb2x2ZUluZm8gYXBwIDogbGF1bmNoYWJsZUFwcHMpIHsKKyAgICAgICAgICAgIGlmIChhcHAuYWN0aXZpdHlJbmZvICE9IG51bGwgJiYgYXBwLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYWNrYWdlTmFtZSA9IGFwcC5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7CisgICAgICAgICAgICAgICAgaW50IGZsYWdzID0gYXBwLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8uZmxhZ3M7CisgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgIT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfVVBEQVRFRF9TWVNURU1fQVBQKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBhcHAKKyAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBleGNsdWRlZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZVBhY2thZ2VzLmNvbnRhaW5zKHBhY2thZ2VOYW1lKSkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGVkID0gcG0uZ2V0QXBwbGljYXRpb25FbmFibGVkU2V0dGluZyhwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkID09IFBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VOVElMX1VTRUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbmFibGVkID09IFBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYXBwIGlzIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhlIHRhcmdldCB1c2VyCisgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gdGFyZ2V0VXNlckFwcEluZm8gPSBnZXRBcHBJbmZvRm9yVXNlcihwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgbVVzZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVzZXJBcHBJbmZvID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHRhcmdldFVzZXJBcHBJbmZvLmZsYWdzJkFwcGxpY2F0aW9uSW5mby5GTEFHX0lOU1RBTExFRCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFNlbGVjdGFibGVBcHBJbmZvIGluZm8gPSBuZXcgU2VsZWN0YWJsZUFwcEluZm8oKTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5wYWNrYWdlTmFtZSA9IGFwcC5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7CisgICAgICAgICAgICAgICAgICAgIGluZm8uYXBwTmFtZSA9IGFwcC5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLmxvYWRMYWJlbChwbSk7CisgICAgICAgICAgICAgICAgICAgIGluZm8uaWNvbiA9IGFwcC5hY3Rpdml0eUluZm8ubG9hZEljb24ocG0pOworICAgICAgICAgICAgICAgICAgICBpbmZvLmFjdGl2aXR5TmFtZSA9IGFwcC5hY3Rpdml0eUluZm8ubG9hZExhYmVsKHBtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uYWN0aXZpdHlOYW1lID09IG51bGwpIGluZm8uYWN0aXZpdHlOYW1lID0gaW5mby5hcHBOYW1lOworCisgICAgICAgICAgICAgICAgICAgIHZpc2libGVBcHBzLmFkZChpbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNTeXN0ZW1QYWNrYWdlKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgUGFja2FnZUluZm8gcGkgPSBtUGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDApOworICAgICAgICAgICAgaWYgKHBpLmFwcGxpY2F0aW9uSW5mbyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBwaS5hcHBsaWNhdGlvbkluZm8uZmxhZ3M7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSAhPSAwCisgICAgICAgICAgICAgICAgICAgIHx8IChmbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1VQREFURURfU1lTVEVNX0FQUCkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChQYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb24gbm5mZSkgeworICAgICAgICAgICAgLy8gTWlzc2luZyBwYWNrYWdlPworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcml2YXRlIEFwcGxpY2F0aW9uSW5mbyBnZXRBcHBJbmZvRm9yVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgVXNlckhhbmRsZSB1c2VyKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbUlQbS5nZXRBcHBsaWNhdGlvbkluZm8ocGFja2FnZU5hbWUsIGZsYWdzLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50ZXJmYWNlIE9uRGlzYWJsZVVpRm9yUGFja2FnZUxpc3RlbmVyIHsKKyAgICAgICAgdm9pZCBvbkRpc2FibGVVaUZvclBhY2thZ2UoU3RyaW5nIHBhY2thZ2VOYW1lKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNlbGVjdGFibGVBcHBJbmZvIHsKKyAgICAgICAgcHVibGljIFN0cmluZyBwYWNrYWdlTmFtZTsKKyAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBhcHBOYW1lOworICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGFjdGl2aXR5TmFtZTsKKyAgICAgICAgcHVibGljIERyYXdhYmxlIGljb247CisgICAgICAgIHB1YmxpYyBTZWxlY3RhYmxlQXBwSW5mbyBtYXN0ZXJFbnRyeTsKKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlTmFtZSArICI6IGFwcE5hbWU9IiArIGFwcE5hbWUgKyAiOyBhY3Rpdml0eU5hbWU9IiArIGFjdGl2aXR5TmFtZQorICAgICAgICAgICAgICAgICAgICArICI7IGljb249IiArIGljb24gKyAiOyBtYXN0ZXJFbnRyeT0iICsgbWFzdGVyRW50cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBBcHBMYWJlbENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yPFNlbGVjdGFibGVBcHBJbmZvPiB7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShTZWxlY3RhYmxlQXBwSW5mbyBsaHMsIFNlbGVjdGFibGVBcHBJbmZvIHJocykgeworICAgICAgICAgICAgU3RyaW5nIGxoc0xhYmVsID0gbGhzLmFjdGl2aXR5TmFtZS50b1N0cmluZygpOworICAgICAgICAgICAgU3RyaW5nIHJoc0xhYmVsID0gcmhzLmFjdGl2aXR5TmFtZS50b1N0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIGxoc0xhYmVsLnRvTG93ZXJDYXNlKCkuY29tcGFyZVRvKHJoc0xhYmVsLnRvTG93ZXJDYXNlKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWIrc3IrTGF0bi9kZWZhdWx0cy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYitzcitMYXRuL2RlZmF1bHRzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjQxMzJlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzLWIrc3IrTGF0bi9kZWZhdWx0cy54bWwKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZl9kZXZpY2VfbmFtZSIgbXNnaWQ9IjYzMDkzMTc0MDk2MzQzMzk0MDIiPiIlMiRzICUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZfZGV2aWNlX25hbWVfc2ltcGxlIiBtc2dpZD0iOTAzNzc4NTYyNTE0MDc0ODIyMSI+IiUxJHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZfbmZjX3BheW1lbnRfY29tcG9uZW50IiBtc2dpZD0iNTg2MTI5NzQzOTg3MzAyNjk1OCI+PC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzN2IxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgCisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIAorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIAorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisgLS0+CisKKzxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjQ1Njc1NjYwOTg1Mjg1ODg4NjMiPiJQb2RlxaFhdmFuamEgc2tsYWRpxaF0YSI8L3N0cmluZz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzL2RlZmF1bHRzLnhtbCBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvcmVzL3ZhbHVlcy9kZWZhdWx0cy54bWwKaW5kZXggNjY4MGQ4OC4uNTFkOGNhMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9yZXMvdmFsdWVzL2RlZmF1bHRzLnhtbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Jlcy92YWx1ZXMvZGVmYXVsdHMueG1sCkBAIC0yNSw2ICsyNSw3IEBACiAgICAgPCEtLSBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBibHVldG9vdGgsIHdpZmksIGFuZCBjZWxsLiAtLT4KICAgICA8c3RyaW5nIG5hbWU9ImRlZl9haXJwbGFuZV9tb2RlX3JhZGlvcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Y2VsbCxibHVldG9vdGgsd2lmaSxuZmMsd2ltYXg8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFpcnBsYW5lX21vZGVfdG9nZ2xlYWJsZV9yYWRpb3MiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmJsdWV0b290aCx3aWZpLG5mYzwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmX2JsdWV0b290aF9kaXNhYmxlZF9wcm9maWxlcyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+MDwvc3RyaW5nPgogICAgIDxib29sIG5hbWU9ImRlZl9hdXRvX3RpbWUiPnRydWU8L2Jvb2w+CiAgICAgPGJvb2wgbmFtZT0iZGVmX2F1dG9fdGltZV96b25lIj50cnVlPC9ib29sPgogICAgIDxib29sIG5hbWU9ImRlZl9hY2NlbGVyb21ldGVyX3JvdGF0aW9uIj50cnVlPC9ib29sPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL0RhdGFiYXNlSGVscGVyLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQppbmRleCBkNGU0MjhlLi43MzM4YTljIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvRGF0YWJhc2VIZWxwZXIuamF2YQpAQCAtMTE2LDYgKzExNiwxMiBAQAogICAgICAgICAgICAgLy8gY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHVzZXIgaXMgZGVsZXRlZC4KICAgICAgICAgICAgIEZpbGUgZGF0YWJhc2VGaWxlID0gbmV3IEZpbGUoCiAgICAgICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldFVzZXJTeXN0ZW1EaXJlY3RvcnkodXNlckhhbmRsZSksIERBVEFCQVNFX05BTUUpOworICAgICAgICAgICAgLy8gSWYgZGF0YWJhc2VGaWxlIGRvZXNuJ3QgZXhpc3QsIGRhdGFiYXNlIGNhbiBiZSBrZXB0IGluIG1lbW9yeS4gSXQncyBzYWZlIGJlY2F1c2UgdGhlCisgICAgICAgICAgICAvLyBkYXRhYmFzZSB3aWxsIGJlIG1pZ3JhdGVkIGFuZCBkaXNwb3NlZCBvZiBpbW1lZGlhdGVseSBhZnRlciBvbkNyZWF0ZSBmaW5pc2hlcworICAgICAgICAgICAgaWYgKCFkYXRhYmFzZUZpbGUuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJObyBwcmV2aW91cyBkYXRhYmFzZSBmaWxlIGV4aXN0cyAtIHJ1bm5pbmcgaW4gaW4tbWVtb3J5IG1vZGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBkYXRhYmFzZUZpbGUuZ2V0UGF0aCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTMwLDggKzEzNiwxNiBAQAogICAgICAgICByZXR1cm4gbVZhbGlkVGFibGVzLmNvbnRhaW5zKG5hbWUpOwogICAgIH0KIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc0luTWVtb3J5KCkgeworICAgICAgICByZXR1cm4gZ2V0RGF0YWJhc2VOYW1lKCkgPT0gbnVsbDsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBkcm9wRGF0YWJhc2UoKSB7CiAgICAgICAgIGNsb3NlKCk7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gcmVtb3ZlIGZpbGVzIGlmIGRiIGlzIGluIG1lbW9yeQorICAgICAgICBpZiAoaXNJbk1lbW9yeSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgRmlsZSBkYXRhYmFzZUZpbGUgPSBtQ29udGV4dC5nZXREYXRhYmFzZVBhdGgoZ2V0RGF0YWJhc2VOYW1lKCkpOwogICAgICAgICBpZiAoZGF0YWJhc2VGaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICBkYXRhYmFzZUZpbGUuZGVsZXRlKCk7CkBAIC0xNDUsNiArMTU5LDEwIEBACiAKICAgICBwdWJsaWMgdm9pZCBiYWNrdXBEYXRhYmFzZSgpIHsKICAgICAgICAgY2xvc2UoKTsKKyAgICAgICAgLy8gTm8gbmVlZCB0byBiYWNrdXAgZmlsZXMgaWYgZGIgaXMgaW4gbWVtb3J5CisgICAgICAgIGlmIChpc0luTWVtb3J5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBGaWxlIGRhdGFiYXNlRmlsZSA9IG1Db250ZXh0LmdldERhdGFiYXNlUGF0aChnZXREYXRhYmFzZU5hbWUoKSk7CiAgICAgICAgIGlmICghZGF0YWJhc2VGaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9OZXR3b3JrUG9saWN5U2VyaWFsaXplci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODdkYTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIuamF2YQpAQCAtMCwwICsxLDE4NiBAQAorcGFja2FnZSBjb20uYW5kcm9pZC5wcm92aWRlcnMuc2V0dGluZ3M7CisKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrUG9saWN5OworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtUZW1wbGF0ZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqCisgKiBCYWNrdXAvUmVzdG9yZSBTZXJpYWxpemVyIENsYXNzIGZvciBhbmRyb2lkLm5ldC5OZXR3b3JrUG9saWN5CisgKi8KK3B1YmxpYyBjbGFzcyBOZXR3b3JrUG9saWN5U2VyaWFsaXplciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTEwgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1RfTlVMTCA9IDE7CisgICAgLyoqCisgICAgICogQ3VycmVudCBWZXJzaW9uIG9mIHRoZSBTZXJpYWxpemVyLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBTVEFURV9WRVJTSU9OID0gMTsKKworICAgIC8qKgorICAgICAqIE1hcnNoYWxzIGFuIGFycmF5IG9mIE5ldHdvcmtQb2xpY3kgb2JqZWN0cyBpbnRvIGEgYnl0ZS1hcnJheS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwb2xpY2llcyAtIE5ldHdvcmtQb2xpY2llcyB0byBiZSBNYXJzaGFsZWQKKyAgICAgKiBAcmV0dXJuIGJ5dGUgYXJyYXkKKyAgICAgKi8KKworICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIG1hcnNoYWxOZXR3b3JrUG9saWNpZXMoTmV0d29ya1BvbGljeSBwb2xpY2llc1tdKSB7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBpZiAocG9saWNpZXMgIT0gbnVsbCAmJiBwb2xpY2llcy5sZW5ndGggIT0gMCkgeworICAgICAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRGF0YU91dHB1dFN0cmVhbShiYW9zKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KFNUQVRFX1ZFUlNJT04pOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludChwb2xpY2llcy5sZW5ndGgpOworICAgICAgICAgICAgICAgIGZvciAoTmV0d29ya1BvbGljeSBwb2xpY3kgOiBwb2xpY2llcykgeworICAgICAgICAgICAgICAgICAgICBieXRlW10gbWFyc2hhbGVkUG9saWN5ID0gbWFyc2hhbE5ldHdvcmtQb2xpY3kocG9saWN5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hcnNoYWxlZFBvbGljeSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUludChtYXJzaGFsZWRQb2xpY3kubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShtYXJzaGFsZWRQb2xpY3kpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBDb252ZXJ0IE5ldHdvcmtQb2xpY2llcyB0byBieXRlIGFycmF5IiwgaW9lKTsKKyAgICAgICAgICAgICAgICBiYW9zLnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhb3MudG9CeXRlQXJyYXkoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbm1hcnNoYWxzIGEgYnl0ZSBhcnJheSBpbnRvIGFuIGFycmF5IG9mIE5ldHdvcmtQb2xpY3kgT2JqZWN0cworICAgICAqCisgICAgICogQHBhcmFtIGRhdGEgLSBtYXJzaGFsZWQgTmV0d29ya1BvbGljaWVzIEFycmF5CisgICAgICogQHJldHVybiBOZXR3b3JrUG9saWN5W10gYXJyYXkKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE5ldHdvcmtQb2xpY3lbXSB1bm1hcnNoYWxOZXR3b3JrUG9saWNpZXMoYnl0ZVtdIGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtQb2xpY3lbMF07CisgICAgICAgIH0KKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZGF0YSkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW50IHZlcnNpb24gPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgTmV0d29ya1BvbGljeVtdIHBvbGljaWVzID0gbmV3IE5ldHdvcmtQb2xpY3lbbGVuZ3RoXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBieXRlIGlzTnVsbCA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgICAgICAgICAgaWYgKGlzTnVsbCA9PSBOVUxMKSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnQgYnl0ZUxlbmd0aCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgICAgICBieXRlW10gcG9saWN5RGF0YSA9IG5ldyBieXRlW2J5dGVMZW5ndGhdOworICAgICAgICAgICAgICAgIGluLnJlYWQocG9saWN5RGF0YSwgMCwgYnl0ZUxlbmd0aCk7CisgICAgICAgICAgICAgICAgcG9saWNpZXNbaV0gPSB1bm1hcnNoYWxOZXR3b3JrUG9saWN5KHBvbGljeURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHBvbGljaWVzOworICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gTmV0d29ya1BvbGljaWVzIiwgaW9lKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTmV0d29ya1BvbGljeVswXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1hcnNoYWxzIGEgTmV0d29ya1BvbGljeSBvYmplY3QgaW50byBhIGJ5dGUtYXJyYXkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmV0d29ya1BvbGljeSAtIE5ldHdvcmtQb2xpY3kgdG8gYmUgTWFyc2hhbGVkCisgICAgICogQHJldHVybiBieXRlIGFycmF5CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBieXRlW10gbWFyc2hhbE5ldHdvcmtQb2xpY3koTmV0d29ya1BvbGljeSBuZXR3b3JrUG9saWN5KSB7CisgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBpZiAobmV0d29ya1BvbGljeSAhPSBudWxsKSB7CisgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGJhb3MpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoU1RBVEVfVkVSU0lPTik7CisgICAgICAgICAgICAgICAgd3JpdGVOZXR3b3JrVGVtcGxhdGUob3V0LCBuZXR3b3JrUG9saWN5LnRlbXBsYXRlKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQobmV0d29ya1BvbGljeS5jeWNsZURheSk7CisgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LCBuZXR3b3JrUG9saWN5LmN5Y2xlVGltZXpvbmUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcobmV0d29ya1BvbGljeS53YXJuaW5nQnl0ZXMpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcobmV0d29ya1BvbGljeS5saW1pdEJ5dGVzKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVMb25nKG5ldHdvcmtQb2xpY3kubGFzdFdhcm5pbmdTbm9vemUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcobmV0d29ya1BvbGljeS5sYXN0TGltaXRTbm9vemUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludChuZXR3b3JrUG9saWN5Lm1ldGVyZWQgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KG5ldHdvcmtQb2xpY3kuaW5mZXJyZWQgPyAxIDogMCk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gQ29udmVydCBOZXR3b3JrUG9saWN5IHRvIGJ5dGUgYXJyYXkiLCBpb2UpOworICAgICAgICAgICAgICAgIGJhb3MucmVzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmFvcy50b0J5dGVBcnJheSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVubWFyc2hhbHMgYSBieXRlIGFycmF5IGludG8gYSBOZXR3b3JrUG9saWN5IE9iamVjdAorICAgICAqCisgICAgICogQHBhcmFtIGRhdGEgLSBtYXJzaGFsZWQgTmV0d29ya1BvbGljeSBPYmplY3QKKyAgICAgKiBAcmV0dXJuIE5ldHdvcmtQb2xpY3kgT2JqZWN0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBOZXR3b3JrUG9saWN5IHVubWFyc2hhbE5ldHdvcmtQb2xpY3koYnl0ZVtdIGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCBkYXRhLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBEYXRhSW5wdXRTdHJlYW0gaW4gPSBuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShkYXRhKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgdmVyc2lvbiA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSA9IHJlYWROZXR3b3JrVGVtcGxhdGUoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgaW50IGN5Y2xlRGF5ID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgU3RyaW5nIGN5Y2xlVGltZVpvbmUgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGxvbmcgd2FybmluZ0J5dGVzID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgICAgIGxvbmcgbGltaXRCeXRlcyA9IGluLnJlYWRMb25nKCk7CisgICAgICAgICAgICBsb25nIGxhc3RXYXJuaW5nU25vb3plID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgICAgIGxvbmcgbGFzdExpbWl0U25vb3plID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gbWV0ZXJlZCA9IGluLnJlYWRJbnQoKSA9PSAxOworICAgICAgICAgICAgYm9vbGVhbiBpbmZlcnJlZCA9IGluLnJlYWRJbnQoKSA9PSAxOworICAgICAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5KHRlbXBsYXRlLCBjeWNsZURheSwgY3ljbGVUaW1lWm9uZSwgd2FybmluZ0J5dGVzLCBsaW1pdEJ5dGVzLAorICAgICAgICAgICAgICAgICAgICBsYXN0V2FybmluZ1Nub296ZSwgbGFzdExpbWl0U25vb3plLCBtZXRlcmVkLCBpbmZlcnJlZCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGlvZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIENvbnZlcnQgYnl0ZSBhcnJheSB0byBOZXR3b3JrUG9saWN5IiwgaW9lKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgTmV0d29ya1RlbXBsYXRlIHJlYWROZXR3b3JrVGVtcGxhdGUoRGF0YUlucHV0U3RyZWFtIGluLCBpbnQgdmVyc2lvbikKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGJ5dGUgaXNOdWxsID0gaW4ucmVhZEJ5dGUoKTsKKyAgICAgICAgaWYgKGlzTnVsbCA9PSBOVUxMKSByZXR1cm4gbnVsbDsKKyAgICAgICAgaW50IG1hdGNoUnVsZSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgU3RyaW5nIHN1YnNjcmliZXJJZCA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICBTdHJpbmcgbmV0d29ya0lkID0gcmVhZFN0cmluZyhpbiwgdmVyc2lvbik7CisgICAgICAgIHJldHVybiBuZXcgTmV0d29ya1RlbXBsYXRlKG1hdGNoUnVsZSwgc3Vic2NyaWJlcklkLCBuZXR3b3JrSWQpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVOZXR3b3JrVGVtcGxhdGUoRGF0YU91dHB1dFN0cmVhbSBvdXQsIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSkKKyAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICh0ZW1wbGF0ZSAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgIG91dC53cml0ZUludCh0ZW1wbGF0ZS5nZXRNYXRjaFJ1bGUoKSk7CisgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHRlbXBsYXRlLmdldFN1YnNjcmliZXJJZCgpKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgdGVtcGxhdGUuZ2V0TmV0d29ya0lkKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZWFkU3RyaW5nKERhdGFJbnB1dFN0cmVhbSBpbiwgaW50IHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGJ5dGUgaXNOdWxsID0gaW4ucmVhZEJ5dGUoKTsKKyAgICAgICAgaWYgKGlzTnVsbCA9PSBOT1RfTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIGluLnJlYWRVVEYoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlU3RyaW5nKERhdGFPdXRwdXRTdHJlYW0gb3V0LCBTdHJpbmcgdmFsKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAodmFsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoTk9UX05VTEwpOworICAgICAgICAgICAgb3V0LndyaXRlVVRGKHZhbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5VTEwpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzQmFja3VwQWdlbnQuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc0JhY2t1cEFnZW50LmphdmEKaW5kZXggMmU5NmYxOC4uMTg1YTAzZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzQmFja3VwQWdlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvU2V0dGluZ3NCYWNrdXBBZ2VudC5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRWYWx1ZXM7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5DdXJzb3I7CitpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1BvbGljeU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpQ29uZmlndXJhdGlvbi5LZXlNZ210OwpAQCAtODEsMTAgKzgyLDEzIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9HTE9CQUwgPSAiZ2xvYmFsIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0xPQ0FMRSA9ICJsb2NhbGUiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfTE9DS19TRVRUSU5HUyA9ICJsb2NrX3NldHRpbmdzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1NPRlRBUF9DT05GSUcgPSAic29mdGFwX2NvbmZpZyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ORVRfUE9MSUNJRVMgPSAibmV0d29ya19wb2xpY2llcyI7CisKIAogICAgIC8vIFZlcnNpb25pbmcgb2YgdGhlIHN0YXRlIGZpbGUuICBJbmNyZW1lbnQgdGhpcyB2ZXJzaW9uCiAgICAgLy8gbnVtYmVyIGFueSB0aW1lIHRoZSBzZXQgb2Ygc3RhdGUgaXRlbXMgaXMgYWx0ZXJlZC4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfVkVSU0lPTiA9IDQ7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1ZFUlNJT04gPSA2OwogCiAgICAgLy8gU2xvdHMgaW4gdGhlIGNoZWNrc3VtIGFycmF5LiAgTmV2ZXIgaW5zZXJ0IG5ldyBpdGVtcyBpbiB0aGUgbWlkZGxlCiAgICAgLy8gb2YgdGhpcyBhcnJheTsgbmV3IHNsb3RzIG11c3QgYmUgYXBwZW5kZWQuCkBAIC05NSwyMiArOTksMjggQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfV0lGSV9DT05GSUcgICAgID0gNDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfR0xPQkFMICAgICAgICAgID0gNTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfTE9DS19TRVRUSU5HUyAgID0gNjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU09GVEFQX0NPTkZJRyAgID0gNzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfTkVUX1BPTElDSUVTICAgID0gODsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9TSVpFICAgICAgICAgICAgPSA3OyAvLyBUaGUgY3VycmVudCBudW1iZXIgb2Ygc3RhdGUgaXRlbXMKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU0laRSAgICAgICAgICAgID0gOTsgLy8gVGhlIGN1cnJlbnQgbnVtYmVyIG9mIHN0YXRlIGl0ZW1zCiAKICAgICAvLyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2hlY2tzdW0gYXJyYXkgYXQgdmFyaW91cyB2ZXJzaW9uIG51bWJlcnMKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfU0laRVNbXSA9IHsKLSAgICAgICAgMCwKLSAgICAgICAgNCwgICAgICAgICAgICAgIC8vIHZlcnNpb24gMQotICAgICAgICA1LCAgICAgICAgICAgICAgLy8gdmVyc2lvbiAyIGFkZGVkIFNUQVRFX1dJRklfQ09ORklHCi0gICAgICAgIDYsICAgICAgICAgICAgICAvLyB2ZXJzaW9uIDMgYWRkZWQgU1RBVEVfR0xPQkFMCi0gICAgICAgIFNUQVRFX1NJWkUgICAgICAvLyB2ZXJzaW9uIDQgYWRkZWQgU1RBVEVfTE9DS19TRVRUSU5HUworICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIDQsICAgICAgICAgICAgICAvLyB2ZXJzaW9uIDEKKyAgICAgICAgICAgIDUsICAgICAgICAgICAgICAvLyB2ZXJzaW9uIDIgYWRkZWQgU1RBVEVfV0lGSV9DT05GSUcKKyAgICAgICAgICAgIDYsICAgICAgICAgICAgICAvLyB2ZXJzaW9uIDMgYWRkZWQgU1RBVEVfR0xPQkFMCisgICAgICAgICAgICA3LCAgICAgICAgICAgICAgLy8gdmVyc2lvbiA0IGFkZGVkIFNUQVRFX0xPQ0tfU0VUVElOR1MKKyAgICAgICAgICAgIDgsICAgICAgICAgICAgICAvLyB2ZXJzaW9uIDUgYWRkZWQgU1RBVEVfU09GVEFQX0NPTkZJRworICAgICAgICAgICAgU1RBVEVfU0laRSAgICAgIC8vIHZlcnNpb24gNiBhZGRlZCBTVEFURV9ORVRfUE9MSUNJRVMKICAgICB9OwogCiAgICAgLy8gVmVyc2lvbmluZyBvZiB0aGUgJ2Z1bGwgYmFja3VwJyBmb3JtYXQKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlVMTF9CQUNLVVBfVkVSU0lPTiA9IDM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZVTExfQkFDS1VQX0FEREVEX0dMT0JBTCA9IDI7ICAvLyBhZGRlZCB0aGUgImdsb2JhbCIgZW50cnkKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlVMTF9CQUNLVVBfQURERURfTE9DS19TRVRUSU5HUyA9IDM7IC8vIGFkZGVkIHRoZSAibG9ja19zZXR0aW5ncyIgZW50cnkKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlVMTF9CQUNLVVBfQURERURfU09GVEFQX0NPTkYgPSA0OyAvL2FkZGVkIHRoZSAic29mdGFwX2NvbmZpZyIgZW50cnkKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlVMTF9CQUNLVVBfQURERURfTkVUX1BPTElDSUVTID0gNTsgLy9hZGRlZCB0aGUgIm5ldHdvcmtfcG9saWNpZXMiIGVudHJ5CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5URUdFUl9CWVRFX0NPVU5UID0gSW50ZWdlci5TSVpFIC8gQnl0ZS5TSVpFOwogCkBAIC0xMTksOCArMTI5LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlNldHRpbmdzQmFja3VwQWdlbnQiOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gUFJPSkVDVElPTiA9IHsKLSAgICAgICAgU2V0dGluZ3MuTmFtZVZhbHVlVGFibGUuTkFNRSwKLSAgICAgICAgU2V0dGluZ3MuTmFtZVZhbHVlVGFibGUuVkFMVUUKKyAgICAgICAgICAgIFNldHRpbmdzLk5hbWVWYWx1ZVRhYmxlLk5BTUUsCisgICAgICAgICAgICBTZXR0aW5ncy5OYW1lVmFsdWVUYWJsZS5WQUxVRQogICAgIH07CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRV9XSUZJX1NVUFBMSUNBTlQgPSAiL2RhdGEvbWlzYy93aWZpL3dwYV9zdXBwbGljYW50LmNvbmYiOwpAQCAtMzk2LDcgKzQwNiw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkJhY2t1cChQYXJjZWxGaWxlRGVzY3JpcHRvciBvbGRTdGF0ZSwgQmFja3VwRGF0YU91dHB1dCBkYXRhLAotICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IgbmV3U3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IgbmV3U3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKICAgICAgICAgYnl0ZVtdIHN5c3RlbVNldHRpbmdzRGF0YSA9IGdldFN5c3RlbVNldHRpbmdzKCk7CiAgICAgICAgIGJ5dGVbXSBzZWN1cmVTZXR0aW5nc0RhdGEgPSBnZXRTZWN1cmVTZXR0aW5ncygpOwpAQCAtNDA1LDI2ICs0MTUsMzQgQEAKICAgICAgICAgYnl0ZVtdIGxvY2FsZSA9IG1TZXR0aW5nc0hlbHBlci5nZXRMb2NhbGVEYXRhKCk7CiAgICAgICAgIGJ5dGVbXSB3aWZpU3VwcGxpY2FudERhdGEgPSBnZXRXaWZpU3VwcGxpY2FudChGSUxFX1dJRklfU1VQUExJQ0FOVCk7CiAgICAgICAgIGJ5dGVbXSB3aWZpQ29uZmlnRGF0YSA9IGdldEZpbGVEYXRhKG1XaWZpQ29uZmlnRmlsZSk7CisgICAgICAgIGJ5dGVbXSBzb2Z0QXBDb25maWdEYXRhID0gZ2V0U29mdEFQQ29uZmlndXJhdGlvbigpOworICAgICAgICBieXRlW10gbmV0UG9saWNpZXNEYXRhID0gZ2V0TmV0d29ya1BvbGljaWVzKCk7CiAKICAgICAgICAgbG9uZ1tdIHN0YXRlQ2hlY2tzdW1zID0gcmVhZE9sZENoZWNrc3VtcyhvbGRTdGF0ZSk7CiAKICAgICAgICAgc3RhdGVDaGVja3N1bXNbU1RBVEVfU1lTVEVNXSA9Ci0gICAgICAgICAgICB3cml0ZUlmQ2hhbmdlZChzdGF0ZUNoZWNrc3Vtc1tTVEFURV9TWVNURU1dLCBLRVlfU1lTVEVNLCBzeXN0ZW1TZXR0aW5nc0RhdGEsIGRhdGEpOworICAgICAgICAgICAgICAgIHdyaXRlSWZDaGFuZ2VkKHN0YXRlQ2hlY2tzdW1zW1NUQVRFX1NZU1RFTV0sIEtFWV9TWVNURU0sIHN5c3RlbVNldHRpbmdzRGF0YSwgZGF0YSk7CiAgICAgICAgIHN0YXRlQ2hlY2tzdW1zW1NUQVRFX1NFQ1VSRV0gPQotICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfU0VDVVJFXSwgS0VZX1NFQ1VSRSwgc2VjdXJlU2V0dGluZ3NEYXRhLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB3cml0ZUlmQ2hhbmdlZChzdGF0ZUNoZWNrc3Vtc1tTVEFURV9TRUNVUkVdLCBLRVlfU0VDVVJFLCBzZWN1cmVTZXR0aW5nc0RhdGEsIGRhdGEpOwogICAgICAgICBzdGF0ZUNoZWNrc3Vtc1tTVEFURV9HTE9CQUxdID0KLSAgICAgICAgICAgIHdyaXRlSWZDaGFuZ2VkKHN0YXRlQ2hlY2tzdW1zW1NUQVRFX0dMT0JBTF0sIEtFWV9HTE9CQUwsIGdsb2JhbFNldHRpbmdzRGF0YSwgZGF0YSk7CisgICAgICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfR0xPQkFMXSwgS0VZX0dMT0JBTCwgZ2xvYmFsU2V0dGluZ3NEYXRhLCBkYXRhKTsKICAgICAgICAgc3RhdGVDaGVja3N1bXNbU1RBVEVfTE9DQUxFXSA9Ci0gICAgICAgICAgICB3cml0ZUlmQ2hhbmdlZChzdGF0ZUNoZWNrc3Vtc1tTVEFURV9MT0NBTEVdLCBLRVlfTE9DQUxFLCBsb2NhbGUsIGRhdGEpOworICAgICAgICAgICAgICAgIHdyaXRlSWZDaGFuZ2VkKHN0YXRlQ2hlY2tzdW1zW1NUQVRFX0xPQ0FMRV0sIEtFWV9MT0NBTEUsIGxvY2FsZSwgZGF0YSk7CiAgICAgICAgIHN0YXRlQ2hlY2tzdW1zW1NUQVRFX1dJRklfU1VQUExJQ0FOVF0gPQotICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfV0lGSV9TVVBQTElDQU5UXSwgS0VZX1dJRklfU1VQUExJQ0FOVCwKLSAgICAgICAgICAgICAgICAgICAgd2lmaVN1cHBsaWNhbnREYXRhLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB3cml0ZUlmQ2hhbmdlZChzdGF0ZUNoZWNrc3Vtc1tTVEFURV9XSUZJX1NVUFBMSUNBTlRdLCBLRVlfV0lGSV9TVVBQTElDQU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgd2lmaVN1cHBsaWNhbnREYXRhLCBkYXRhKTsKICAgICAgICAgc3RhdGVDaGVja3N1bXNbU1RBVEVfV0lGSV9DT05GSUddID0KLSAgICAgICAgICAgIHdyaXRlSWZDaGFuZ2VkKHN0YXRlQ2hlY2tzdW1zW1NUQVRFX1dJRklfQ09ORklHXSwgS0VZX1dJRklfQ09ORklHLCB3aWZpQ29uZmlnRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfV0lGSV9DT05GSUddLCBLRVlfV0lGSV9DT05GSUcsIHdpZmlDb25maWdEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAgICAgICAgIHN0YXRlQ2hlY2tzdW1zW1NUQVRFX0xPQ0tfU0VUVElOR1NdID0KLSAgICAgICAgICAgIHdyaXRlSWZDaGFuZ2VkKHN0YXRlQ2hlY2tzdW1zW1NUQVRFX0xPQ0tfU0VUVElOR1NdLCBLRVlfTE9DS19TRVRUSU5HUywKLSAgICAgICAgICAgICAgICAgICAgbG9ja1NldHRpbmdzRGF0YSwgZGF0YSk7CisgICAgICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfTE9DS19TRVRUSU5HU10sIEtFWV9MT0NLX1NFVFRJTkdTLAorICAgICAgICAgICAgICAgICAgICAgICAgbG9ja1NldHRpbmdzRGF0YSwgZGF0YSk7CisgICAgICAgIHN0YXRlQ2hlY2tzdW1zW1NUQVRFX1NPRlRBUF9DT05GSUddID0KKyAgICAgICAgICAgICAgICB3cml0ZUlmQ2hhbmdlZChzdGF0ZUNoZWNrc3Vtc1tTVEFURV9TT0ZUQVBfQ09ORklHXSwgS0VZX1NPRlRBUF9DT05GSUcsCisgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0QXBDb25maWdEYXRhLCBkYXRhKTsKKyAgICAgICAgc3RhdGVDaGVja3N1bXNbU1RBVEVfTkVUX1BPTElDSUVTXSA9CisgICAgICAgICAgICAgICAgd3JpdGVJZkNoYW5nZWQoc3RhdGVDaGVja3N1bXNbU1RBVEVfTkVUX1BPTElDSUVTXSwgS0VZX05FVF9QT0xJQ0lFUywKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldFBvbGljaWVzRGF0YSwgZGF0YSk7CiAKICAgICAgICAgd3JpdGVOZXdDaGVja3N1bXMoc3RhdGVDaGVja3N1bXMsIG5ld1N0YXRlKTsKICAgICB9CkBAIC01MDQsNyArNTIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlZFN1cHBsaWNhbnREYXRhLCByZXN0b3JlZFN1cHBsaWNhbnREYXRhLmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIEZpbGVVdGlscy5zZXRQZXJtaXNzaW9ucyhGSUxFX1dJRklfU1VQUExJQ0FOVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlVXRpbHMuU19JUlVTUiB8IEZpbGVVdGlscy5TX0lXVVNSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlVXRpbHMuU19JUkdSUCB8IEZpbGVVdGlscy5TX0lXR1JQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZVV0aWxzLlNfSVJHUlAgfCBGaWxlVXRpbHMuU19JV0dSUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzLm15VWlkKCksIFByb2Nlc3MuV0lGSV9VSUQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAocmVzdG9yZWRXaWZpQ29uZmlnRmlsZSAhPSBudWxsKSB7CkBAIC01MzMsNyArNTUxLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uUmVzdG9yZShCYWNrdXBEYXRhSW5wdXQgZGF0YSwgaW50IGFwcFZlcnNpb25Db2RlLAotICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IgbmV3U3RhdGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG5ld1N0YXRlKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCiAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtb3ZlZFRvR2xvYmFsID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogICAgICAgICBTZXR0aW5ncy5TeXN0ZW0uZ2V0TW92ZWRUb0dsb2JhbFNldHRpbmdzKG1vdmVkVG9HbG9iYWwpOwpAQCAtNTYxLDcgKzU3OSwxNSBAQAogICAgICAgICAgICAgICAgIG1XaWZpUmVzdG9yZS5pbmNvcnBvcmF0ZVdpZmlDb25maWdGaWxlKGRhdGEpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChLRVlfTE9DS19TRVRUSU5HUy5lcXVhbHMoa2V5KSkgewogICAgICAgICAgICAgICAgIHJlc3RvcmVMb2NrU2V0dGluZ3MoZGF0YSk7Ci0gICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoS0VZX1NPRlRBUF9DT05GSUcuZXF1YWxzKGtleSkpeworICAgICAgICAgICAgICAgIGJ5dGVbXSBzb2Z0YXBEYXRhID0gbmV3IGJ5dGVbc2l6ZV07CisgICAgICAgICAgICAgICAgZGF0YS5yZWFkRW50aXR5RGF0YShzb2Z0YXBEYXRhLCAwLCBzaXplKTsKKyAgICAgICAgICAgICAgICByZXN0b3JlU29mdEFwQ29uZmlndXJhdGlvbihzb2Z0YXBEYXRhKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoS0VZX05FVF9QT0xJQ0lFUy5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgICAgIGJ5dGVbXSBuZXRQb2xpY2llc0RhdGEgPSBuZXcgYnl0ZVtzaXplXTsKKyAgICAgICAgICAgICAgICBkYXRhLnJlYWRFbnRpdHlEYXRhKG5ldFBvbGljaWVzRGF0YSwgMCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdG9yZU5ldHdvcmtQb2xpY2llcyhuZXRQb2xpY2llc0RhdGEpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkYXRhLnNraXBFbnRpdHlEYXRhKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4OSw2ICs2MTUsOCBAQAogICAgICAgICBieXRlW10gbG9jYWxlID0gbVNldHRpbmdzSGVscGVyLmdldExvY2FsZURhdGEoKTsKICAgICAgICAgYnl0ZVtdIHdpZmlTdXBwbGljYW50RGF0YSA9IGdldFdpZmlTdXBwbGljYW50KEZJTEVfV0lGSV9TVVBQTElDQU5UKTsKICAgICAgICAgYnl0ZVtdIHdpZmlDb25maWdEYXRhID0gZ2V0RmlsZURhdGEobVdpZmlDb25maWdGaWxlKTsKKyAgICAgICAgYnl0ZVtdIHNvZnRBcENvbmZpZ0RhdGEgPSBnZXRTb2Z0QVBDb25maWd1cmF0aW9uKCk7CisgICAgICAgIGJ5dGVbXSBuZXRQb2xpY2llc0RhdGEgPSBnZXROZXR3b3JrUG9saWNpZXMoKTsKIAogICAgICAgICAvLyBXcml0ZSB0aGUgZGF0YSB0byB0aGUgc3RhZ2luZyBmaWxlLCB0aGVuIGVtaXQgdGhhdCBhcyBvdXIgdGFyZmlsZQogICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFja2VkLXVwIHNldHRpbmdzLgpAQCAtNjIzLDYgKzY1MSwxMiBAQAogICAgICAgICAgICAgaWYgKERFQlVHX0JBQ0tVUCkgTG9nLmQoVEFHLCBsb2NrU2V0dGluZ3NEYXRhLmxlbmd0aCArICIgYnl0ZXMgb2YgbG9jayBzZXR0aW5ncyBkYXRhIik7CiAgICAgICAgICAgICBvdXQud3JpdGVJbnQobG9ja1NldHRpbmdzRGF0YS5sZW5ndGgpOwogICAgICAgICAgICAgb3V0LndyaXRlKGxvY2tTZXR0aW5nc0RhdGEpOworICAgICAgICAgICAgaWYgKERFQlVHX0JBQ0tVUCkgTG9nLmQoVEFHLCBzb2Z0QXBDb25maWdEYXRhLmxlbmd0aCArICIgYnl0ZXMgb2Ygc29mdGFwIGNvbmZpZyBkYXRhIik7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQoc29mdEFwQ29uZmlnRGF0YS5sZW5ndGgpOworICAgICAgICAgICAgb3V0LndyaXRlKHNvZnRBcENvbmZpZ0RhdGEpOworICAgICAgICAgICAgaWYgKERFQlVHX0JBQ0tVUCkgTG9nLmQoVEFHLCBuZXRQb2xpY2llc0RhdGEubGVuZ3RoICsgIiBieXRlcyBvZiBuZXR3b3JrIHBvbGljaWVzIGRhdGEiKTsKKyAgICAgICAgICAgIG91dC53cml0ZUludChuZXRQb2xpY2llc0RhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIG91dC53cml0ZShuZXRQb2xpY2llc0RhdGEpOwogCiAgICAgICAgICAgICBvdXQuZmx1c2goKTsgICAgLy8gYWxzbyBmbHVzaGVzIGRvd25zdHJlYW0KIApAQCAtNjM1LDcgKzY2OSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblJlc3RvcmVGaWxlKFBhcmNlbEZpbGVEZXNjcmlwdG9yIGRhdGEsIGxvbmcgc2l6ZSwKLSAgICAgICAgICAgIGludCB0eXBlLCBTdHJpbmcgZG9tYWluLCBTdHJpbmcgcmVscGF0aCwgbG9uZyBtb2RlLCBsb25nIG10aW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsIFN0cmluZyBkb21haW4sIFN0cmluZyByZWxwYXRoLCBsb25nIG1vZGUsIGxvbmcgbXRpbWUpCiAgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBpZiAoREVCVUdfQkFDS1VQKSBMb2cuZChUQUcsICJvblJlc3RvcmVGaWxlKCkgaW52b2tlZCIpOwogICAgICAgICAvLyBPdXIgZGF0YSBpcyBhY3R1YWxseSBhIGJsb2Igb2YgZmxhdHRlbmVkIHNldHRpbmdzIGRhdGEgaWRlbnRpY2FsIHRvIHRoYXQKQEAgLTY5Miw3ICs3MjYsNyBAQAogICAgICAgICAgICAgcmVzdG9yZVdpZmlTdXBwbGljYW50KEZJTEVfV0lGSV9TVVBQTElDQU5ULCBidWZmZXIsIG5CeXRlcyk7CiAgICAgICAgICAgICBGaWxlVXRpbHMuc2V0UGVybWlzc2lvbnMoRklMRV9XSUZJX1NVUFBMSUNBTlQsCiAgICAgICAgICAgICAgICAgICAgIEZpbGVVdGlscy5TX0lSVVNSIHwgRmlsZVV0aWxzLlNfSVdVU1IgfAotICAgICAgICAgICAgICAgICAgICBGaWxlVXRpbHMuU19JUkdSUCB8IEZpbGVVdGlscy5TX0lXR1JQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVVdGlscy5TX0lSR1JQIHwgRmlsZVV0aWxzLlNfSVdHUlAsCiAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3MubXlVaWQoKSwgUHJvY2Vzcy5XSUZJX1VJRCk7CiAgICAgICAgICAgICAvLyByZXRhaW4gdGhlIHByZXZpb3VzIFdJRkkgc3RhdGUuCiAgICAgICAgICAgICBlbmFibGVXaWZpKHJldGFpbmVkV2lmaVN0YXRlID09IFdpZmlNYW5hZ2VyLldJRklfU1RBVEVfRU5BQkxFRCB8fApAQCAtNzE1LDYgKzc0OSwyNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gRlVMTF9CQUNLVVBfQURERURfU09GVEFQX0NPTkYpeworICAgICAgICAgICAgICAgIG5CeXRlcyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfQkFDS1VQKSBMb2cuZChUQUcsIG5CeXRlcyArICIgYnl0ZXMgb2Ygc29mdGFwIGNvbmZpZyBkYXRhIik7CisgICAgICAgICAgICAgICAgaWYgKG5CeXRlcyA+IGJ1ZmZlci5sZW5ndGgpIGJ1ZmZlciA9IG5ldyBieXRlW25CeXRlc107CisgICAgICAgICAgICAgICAgaWYgKG5CeXRlcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW4ucmVhZEZ1bGx5KGJ1ZmZlciwgMCwgbkJ5dGVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVNvZnRBcENvbmZpZ3VyYXRpb24oYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2ZXJzaW9uID49IEZVTExfQkFDS1VQX0FEREVEX05FVF9QT0xJQ0lFUyl7CisgICAgICAgICAgICAgICAgbkJ5dGVzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19CQUNLVVApIExvZy5kKFRBRywgbkJ5dGVzICsgIiBieXRlcyBvZiBuZXR3b3JrIHBvbGljaWVzIGRhdGEiKTsKKyAgICAgICAgICAgICAgICBpZiAobkJ5dGVzID4gYnVmZmVyLmxlbmd0aCkgYnVmZmVyID0gbmV3IGJ5dGVbbkJ5dGVzXTsKKyAgICAgICAgICAgICAgICBpZiAobkJ5dGVzID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpbi5yZWFkRnVsbHkoYnVmZmVyLCAwLCBuQnl0ZXMpOworICAgICAgICAgICAgICAgICAgICByZXN0b3JlTmV0d29ya1BvbGljaWVzKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoREVCVUdfQkFDS1VQKSBMb2cuZChUQUcsICJGdWxsIHJlc3RvcmUgY29tcGxldGUuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkYXRhLmNsb3NlKCk7CkBAIC03NTQsNyArODA4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGxvbmcgd3JpdGVJZkNoYW5nZWQobG9uZyBvbGRDaGVja3N1bSwgU3RyaW5nIGtleSwgYnl0ZVtdIGRhdGEsCi0gICAgICAgICAgICBCYWNrdXBEYXRhT3V0cHV0IG91dHB1dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrdXBEYXRhT3V0cHV0IG91dHB1dCkgewogICAgICAgICBDUkMzMiBjaGVja1N1bW1lciA9IG5ldyBDUkMzMigpOwogICAgICAgICBjaGVja1N1bW1lci51cGRhdGUoZGF0YSk7CiAgICAgICAgIGxvbmcgbmV3Q2hlY2tzdW0gPSBjaGVja1N1bW1lci5nZXRWYWx1ZSgpOwpAQCAtODI5LDcgKzg4Myw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlc3RvcmVTZXR0aW5ncyhCYWNrdXBEYXRhSW5wdXQgZGF0YSwgVXJpIGNvbnRlbnRVcmksCi0gICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4gbW92ZWRUb0dsb2JhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxTdHJpbmc+IG1vdmVkVG9HbG9iYWwpIHsKICAgICAgICAgYnl0ZVtdIHNldHRpbmdzID0gbmV3IGJ5dGVbZGF0YS5nZXREYXRhU2l6ZSgpXTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGRhdGEucmVhZEVudGl0eURhdGEoc2V0dGluZ3MsIDAsIHNldHRpbmdzLmxlbmd0aCk7CkBAIC04NDEsNyArODk1LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVzdG9yZVNldHRpbmdzKGJ5dGVbXSBzZXR0aW5ncywgaW50IGJ5dGVzLCBVcmkgY29udGVudFVyaSwKLSAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBtb3ZlZFRvR2xvYmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PFN0cmluZz4gbW92ZWRUb0dsb2JhbCkgewogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIExvZy5pKFRBRywgInJlc3RvcmVTZXR0aW5nczogIiArIGNvbnRlbnRVcmkpOwogICAgICAgICB9CkBAIC0xMTYwLDYgKzEyMTQsMzAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgYnl0ZVtdIGdldFNvZnRBUENvbmZpZ3VyYXRpb24oKXsKKyAgICAgICAgV2lmaU1hbmFnZXIgd2lmaU1hbmFnZXIgPSAoV2lmaU1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJRklfU0VSVklDRSk7CisgICAgICAgIHJldHVybiBXaUZpQ29uZmlndXJhdGlvblNlcmlhbGl6ZXIubWFyc2hhbFdpZmlDb25maWcod2lmaU1hbmFnZXIuZ2V0V2lmaUFwQ29uZmlndXJhdGlvbigpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVzdG9yZVNvZnRBcENvbmZpZ3VyYXRpb24oYnl0ZVtdIGRhdGEpeworICAgICAgICBXaWZpTWFuYWdlciB3aWZpTWFuYWdlciA9IChXaWZpTWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lGSV9TRVJWSUNFKTsKKyAgICAgICAgd2lmaU1hbmFnZXIuc2V0V2lmaUFwQ29uZmlndXJhdGlvbihXaUZpQ29uZmlndXJhdGlvblNlcmlhbGl6ZXIudW5tYXJzaGFsV2lmaUNvbmZpZyhkYXRhKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBieXRlW10gZ2V0TmV0d29ya1BvbGljaWVzKCl7CisgICAgICAgIE5ldHdvcmtQb2xpY3lNYW5hZ2VyIG5ldHdvcmtQb2xpY3lNYW5hZ2VyID0KKyAgICAgICAgICAgICAgICAoTmV0d29ya1BvbGljeU1hbmFnZXIpZ2V0U3lzdGVtU2VydmljZShORVRXT1JLX1BPTElDWV9TRVJWSUNFKTsKKyAgICAgICAgcmV0dXJuIE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyCisgICAgICAgICAgICAgICAgLm1hcnNoYWxOZXR3b3JrUG9saWNpZXMobmV0d29ya1BvbGljeU1hbmFnZXIuZ2V0TmV0d29ya1BvbGljaWVzKCkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXN0b3JlTmV0d29ya1BvbGljaWVzKGJ5dGVbXSBkYXRhKXsKKyAgICAgICAgTmV0d29ya1BvbGljeU1hbmFnZXIgbmV0d29ya1BvbGljeU1hbmFnZXIgPQorICAgICAgICAgICAgICAgIChOZXR3b3JrUG9saWN5TWFuYWdlcilnZXRTeXN0ZW1TZXJ2aWNlKE5FVFdPUktfUE9MSUNZX1NFUlZJQ0UpOworICAgICAgICBuZXR3b3JrUG9saWN5TWFuYWdlcgorICAgICAgICAgICAgICAgIC5zZXROZXR3b3JrUG9saWNpZXMoTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIudW5tYXJzaGFsTmV0d29ya1BvbGljaWVzKGRhdGEpKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBXcml0ZSBhbiBpbnQgaW4gQmlnRW5kaWFuIGludG8gdGhlIGJ5dGUgYXJyYXkuCiAgICAgICogQHBhcmFtIG91dCBieXRlIGFycmF5CkBAIC0xMTgxLDggKzEyNTksNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgaW50IHJlYWRJbnQoYnl0ZVtdIGluLCBpbnQgcG9zKSB7Ci0gICAgICAgIGludCByZXN1bHQgPQotICAgICAgICAgICAgICAgICgoaW5bcG9zICAgIF0gJiAweEZGKSA8PCAyNCkgfAorICAgICAgICBpbnQgcmVzdWx0ID0gICAgKChpbltwb3MgICAgXSAmIDB4RkYpIDw8IDI0KSB8CiAgICAgICAgICAgICAgICAgKChpbltwb3MgKyAxXSAmIDB4RkYpIDw8IDE2KSB8CiAgICAgICAgICAgICAgICAgKChpbltwb3MgKyAyXSAmIDB4RkYpIDw8ICA4KSB8CiAgICAgICAgICAgICAgICAgKChpbltwb3MgKyAzXSAmIDB4RkYpIDw8ICAwKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc0hlbHBlci5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzSGVscGVyLmphdmEKaW5kZXggZTEyZTNhNS4uZTVhZWIzYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzSGVscGVyLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzSGVscGVyLmphdmEKQEAgLTIyOSwxOCArMjI5LDI1IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQWxyZWFkeUNvbmZpZ3VyZWRDcml0aWNhbEFjY2Vzc2liaWxpdHlTZXR0aW5nKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIC8vIFRoZXNlIGFyZSB0aGUgY3JpdGljYWwgYWNjZXNzaWJpbGl0eSBzZXR0aW5ncyB0aGF0IGFyZSByZXF1aXJlZCBmb3IgYQotICAgICAgICAvLyBibGluZCB1c2VyIHRvIGJlIGFibGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZGV2aWNlLiBJZiB0aGVzZSBzZXR0aW5ncyBhcmUKKyAgICAgICAgLy8gVGhlc2UgYXJlIHRoZSBjcml0aWNhbCBhY2Nlc3NpYmlsaXR5IHNldHRpbmdzIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB1c2VycyB3aXRoCisgICAgICAgIC8vIGFjY2Vzc2liaWxpdHkgbmVlZHMgdG8gYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIHRoZSBkZXZpY2UuIElmIHRoZXNlIHNldHRpbmdzIGFyZQogICAgICAgICAvLyBhbHJlYWR5IGNvbmZpZ3VyZWQsIHdlIHdpbGwgbm90IG92ZXJ3cml0ZSB0aGVtLiBJZiB0aGV5IGFyZSBhbHJlYWR5IHNldCwKLSAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgcGVyZm9ybWVkIGEgZ2xvYmFsIGdlc3R1cmUgdG8gZW5hYmxlIGFjY2Vzc2liaWxpdHkKLSAgICAgICAgLy8gYW5kIGRlZmluaXRlbHkgbmVlZHMgdGhlc2UgZmVhdHVyZXMgd29ya2luZyBhZnRlciB0aGUgcmVzdG9yZS4KKyAgICAgICAgLy8gaXQgbWVhbnMgdGhhdCB0aGUgdXNlciBoYXMgcGVyZm9ybWVkIGEgZ2xvYmFsIGdlc3R1cmUgdG8gZW5hYmxlIGFjY2Vzc2liaWxpdHkgb3Igc2V0CisgICAgICAgIC8vIHRoZXNlIHNldHRpbmdzIGluIHRoZSBBY2Nlc3NpYmlsaXR5IHBvcnRpb24gb2YgdGhlIFNldHVwIFdpemFyZCwgYW5kIGRlZmluaXRlbHkgbmVlZHMKKyAgICAgICAgLy8gdGhlc2UgZmVhdHVyZXMgd29ya2luZyBhZnRlciB0aGUgcmVzdG9yZS4KICAgICAgICAgaWYgKFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0VOQUJMRUQuZXF1YWxzKG5hbWUpCiAgICAgICAgICAgICAgICAgfHwgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfU0NSSVBUX0lOSkVDVElPTi5lcXVhbHMobmFtZSkKICAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9TUEVBS19QQVNTV09SRC5lcXVhbHMobmFtZSkKLSAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuVE9VQ0hfRVhQTE9SQVRJT05fRU5BQkxFRC5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuVE9VQ0hfRVhQTE9SQVRJT05fRU5BQkxFRC5lcXVhbHMobmFtZSkKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0RBTFRPTklaRVJfRU5BQkxFRC5lcXVhbHMobmFtZSkKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX01BR05JRklDQVRJT05fRU5BQkxFRC5lcXVhbHMobmFtZSkKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuVUlfTklHSFRfTU9ERS5lcXVhbHMobmFtZSkpIHsKICAgICAgICAgICAgIHJldHVybiBTZXR0aW5ncy5TZWN1cmUuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLCBuYW1lLCAwKSAhPSAwOwogICAgICAgICB9IGVsc2UgaWYgKFNldHRpbmdzLlNlY3VyZS5UT1VDSF9FWFBMT1JBVElPTl9HUkFOVEVEX0FDQ0VTU0lCSUxJVFlfU0VSVklDRVMuZXF1YWxzKG5hbWUpCi0gICAgICAgICAgICAgICAgfHwgU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfQUNDRVNTSUJJTElUWV9TRVJWSUNFUy5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9BQ0NFU1NJQklMSVRZX1NFUlZJQ0VTLmVxdWFscyhuYW1lKQorICAgICAgICAgICAgICAgIHx8IFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYLmVxdWFscyhuYW1lKQorICAgICAgICAgICAgICAgIHx8IFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfREFMVE9OSVpFUi5lcXVhbHMobmFtZSkKKyAgICAgICAgICAgICAgICB8fCBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX01BR05JRklDQVRJT05fU0NBTEUuZXF1YWxzKG5hbWUpKSB7CiAgICAgICAgICAgICByZXR1cm4gIVRleHRVdGlscy5pc0VtcHR5KFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLCBuYW1lKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc1Byb3ZpZGVyLmphdmEgYi9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvU2V0dGluZ3NQcm92aWRlci5qYXZhCmluZGV4IDczNjVlNjYuLjU3ZDQ5NWYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9TZXR0aW5nc1Byb3ZpZGVyLmphdmEKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzUHJvdmlkZXIuamF2YQpAQCAtMTAxMCw2ICsxMDEwLDExIEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcgIT0gbnVsbCAmJiBzZXR0aW5nLnN0YXJ0c1dpdGgoU2V0dGluZ3MuR2xvYmFsLkRBVEFfUk9BTUlORykpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCIwIi5lcXVhbHModmFsdWUpKSByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uID0gVXNlck1hbmFnZXIuRElTQUxMT1dfREFUQV9ST0FNSU5HOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTE4OTAsNyArMTg5NSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFVwZ3JhZGVDb250cm9sbGVyIHsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRVRUSU5HU19WRVJTSU9OID0gMTIzOworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFVFRJTkdTX1ZFUlNJT04gPSAxMjQ7CiAKICAgICAgICAgICAgIHByaXZhdGUgZmluYWwgaW50IG1Vc2VySWQ7CiAKQEAgLTIwNjAsNiArMjA2NSwxNiBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uID0gMTIzOwogICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmVyc2lvbiA9PSAxMjMpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU2V0dGluZ3NTdGF0ZSBnbG9iYWxTZXR0aW5ncyA9IGdldEdsb2JhbFNldHRpbmdzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkZWZhdWx0RGlzYWJsZWRQcm9maWxlcyA9IChnZXRDb250ZXh0KCkuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmRlZl9ibHVldG9vdGhfZGlzYWJsZWRfcHJvZmlsZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2V0dGluZ3MuaW5zZXJ0U2V0dGluZ0xvY2tlZChTZXR0aW5ncy5HbG9iYWwuQkxVRVRPT1RIX0RJU0FCTEVEX1BST0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHREaXNhYmxlZFByb2ZpbGVzLCBTZXR0aW5nc1N0YXRlLlNZU1RFTV9QQUNLQUdFX05BTUUpOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmVyc2lvbiA9IDEyNDsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyB2WFhYOiBBZGQgbmV3IHNldHRpbmdzIGFib3ZlIHRoaXMgcG9pbnQuCiAKICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmVyc2lvbi4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9XaUZpQ29uZmlndXJhdGlvblNlcmlhbGl6ZXIuamF2YSBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvc3JjL2NvbS9hbmRyb2lkL3Byb3ZpZGVycy9zZXR0aW5ncy9XaUZpQ29uZmlndXJhdGlvblNlcmlhbGl6ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWYxZDNmCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1dpRmlDb25maWd1cmF0aW9uU2VyaWFsaXplci5qYXZhCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQubmV0LklwQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Qcm94eUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQuU3RhdGljSXBDb25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb247CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5EYXRhT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQml0U2V0OworCisKKy8qKgorICogQmFja3VwL1Jlc3RvcmUgU2VyaWFsaXplciBDbGFzcyBmb3IgY29tLmFuZHJvaWQubmV0LndpZmkuV2lmaUNvbmZpZ3VyYXRpb24KKyAqLworcHVibGljIGNsYXNzIFdpRmlDb25maWd1cmF0aW9uU2VyaWFsaXplciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2lGaUNvbmZpZ1NlcmlhbGl6ZXIiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTEwgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1RfTlVMTCA9IDE7CisgICAgLyoqCisgICAgICogQ3VycmVudCBWZXJzaW9uIG9mIHRoZSBTZXJpYWxpemVyLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGludCBTVEFURV9WRVJTSU9OID0gMTsKKworCisgICAgLyoqCisgICAgICogTWFyc2hhbHMgYSBXaWZpQ29uZmlnIG9iamVjdCBpbnRvIGEgYnl0ZS1hcnJheS4KKyAgICAgKgorICAgICAqIEBwYXJhbSB3aWZpQ29uZmlnIC0gV2lmaUNvbmZpZ3VyYXRpb24gdG8gYmUgTWFyc2hhbGxlZAorICAgICAqIEByZXR1cm4gYnl0ZSBhcnJheQorICAgICAqLworCisgICAgcHVibGljIHN0YXRpYyBieXRlW10gbWFyc2hhbFdpZmlDb25maWcoV2lmaUNvbmZpZ3VyYXRpb24gd2lmaUNvbmZpZykgeworICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYmFvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgaWYod2lmaUNvbmZpZyAhPSBudWxsKSB7CisgICAgICAgICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGJhb3MpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQoU1RBVEVfVkVSU0lPTik7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcubmV0d29ya0lkKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5zdGF0dXMpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLmRpc2FibGVSZWFzb24pOworICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgd2lmaUNvbmZpZy5TU0lEKTsKKyAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHdpZmlDb25maWcuQlNTSUQpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLmFwQmFuZCk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcuYXBDaGFubmVsKTsKKyAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHdpZmlDb25maWcuYXV0b0pvaW5CU1NJRCk7CisgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LCB3aWZpQ29uZmlnLkZRRE4pOworICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgd2lmaUNvbmZpZy5wcm92aWRlckZyaWVuZGx5TmFtZSk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcucm9hbWluZ0NvbnNvcnRpdW1JZHMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGxvbmcgaWQgOiB3aWZpQ29uZmlnLnJvYW1pbmdDb25zb3J0aXVtSWRzKSB7CisgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcoaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHdpZmlDb25maWcucHJlU2hhcmVkS2V5KTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyB3ZXBLZXkgOiB3aWZpQ29uZmlnLndlcEtleXMpIHsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LCB3ZXBLZXkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy53ZXBUeEtleUluZGV4KTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5wcmlvcml0eSk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcuaGlkZGVuU1NJRCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5yZXF1aXJlUE1GID8gMSA6IDApOworICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgd2lmaUNvbmZpZy51cGRhdGVJZGVudGlmaWVyKTsKKworICAgICAgICAgICAgICAgIHdyaXRlQml0U2V0KG91dCwgd2lmaUNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudCk7CisgICAgICAgICAgICAgICAgd3JpdGVCaXRTZXQob3V0LCB3aWZpQ29uZmlnLmFsbG93ZWRQcm90b2NvbHMpOworICAgICAgICAgICAgICAgIHdyaXRlQml0U2V0KG91dCwgd2lmaUNvbmZpZy5hbGxvd2VkQXV0aEFsZ29yaXRobXMpOworICAgICAgICAgICAgICAgIHdyaXRlQml0U2V0KG91dCwgd2lmaUNvbmZpZy5hbGxvd2VkUGFpcndpc2VDaXBoZXJzKTsKKyAgICAgICAgICAgICAgICB3cml0ZUJpdFNldChvdXQsIHdpZmlDb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycyk7CisKKworICAgICAgICAgICAgICAgIC8vSXBDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgd3JpdGVJcENvbmZpZ3VyYXRpb24ob3V0LCB3aWZpQ29uZmlnLmdldElwQ29uZmlndXJhdGlvbigpKTsKKworICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgd2lmaUNvbmZpZy5kaGNwU2VydmVyKTsKKyAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHdpZmlDb25maWcuZGVmYXVsdEd3TWFjQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcuYXV0b0pvaW5TdGF0dXMpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLnNlbGZBZGRlZCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5kaWRTZWxmQWRkID8gMSA6IDApOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLnZhbGlkYXRlZEludGVybmV0QWNjZXNzID8gMSA6IDApOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLmVwaGVtZXJhbCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5jcmVhdG9yVWlkKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5sYXN0Q29ubmVjdFVpZCk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcubGFzdFVwZGF0ZVVpZCk7CisgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LCB3aWZpQ29uZmlnLmNyZWF0b3JOYW1lKTsKKyAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHdpZmlDb25maWcubGFzdFVwZGF0ZU5hbWUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcod2lmaUNvbmZpZy5ibGFja0xpc3RUaW1lc3RhbXApOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcod2lmaUNvbmZpZy5sYXN0Q29ubmVjdGlvbkZhaWx1cmUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUxvbmcod2lmaUNvbmZpZy5sYXN0Um9hbWluZ0ZhaWx1cmUpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLmxhc3RSb2FtaW5nRmFpbHVyZVJlYXNvbik7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlTG9uZyh3aWZpQ29uZmlnLnJvYW1pbmdGYWlsdXJlQmxhY2tMaXN0VGltZU1pbGxpKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVMb25nKHdpZmlDb25maWcubnVtQ29ubmVjdGlvbkZhaWx1cmVzKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVMb25nKHdpZmlDb25maWcubnVtSXBDb25maWdGYWlsdXJlcyk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcubnVtQXV0aEZhaWx1cmVzKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5udW1TY29yZXJPdmVycmlkZSk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcubnVtU2NvcmVyT3ZlcnJpZGVBbmRTd2l0Y2hlZE5ldHdvcmspOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLm51bUFzc29jaWF0aW9uKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5udW1Vc2VyVHJpZ2dlcmVkV2lmaURpc2FibGVMb3dSU1NJKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5udW1Vc2VyVHJpZ2dlcmVkV2lmaURpc2FibGVCYWRSU1NJKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5udW1Vc2VyVHJpZ2dlcmVkV2lmaURpc2FibGVOb3RIaWdoUlNTSSk7CisgICAgICAgICAgICAgICAgb3V0LndyaXRlSW50KHdpZmlDb25maWcubnVtVGlja3NBdExvd1JTU0kpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLm51bVRpY2tzQXRCYWRSU1NJKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5udW1UaWNrc0F0Tm90SGlnaFJTU0kpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLm51bVVzZXJUcmlnZ2VyZWRKb2luQXR0ZW1wdHMpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLmF1dG9Kb2luVXNlQWdncmVzc2l2ZUpvaW5BdHRlbXB0VGhyZXNob2xkKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5hdXRvSm9pbkJhaWxlZER1ZVRvTG93UnNzaSA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy51c2VyQXBwcm92ZWQpOworICAgICAgICAgICAgICAgIG91dC53cml0ZUludCh3aWZpQ29uZmlnLm51bU5vSW50ZXJuZXRBY2Nlc3NSZXBvcnRzKTsKKyAgICAgICAgICAgICAgICBvdXQud3JpdGVJbnQod2lmaUNvbmZpZy5ub0ludGVybmV0QWNjZXNzRXhwZWN0ZWQgPyAxIDogMCk7CisgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBpb2UpIHsKKyAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gQ29udmVydCBXaWZpQ29uZmlndXJhdGlvbiB0byBieXRlIGFycmF5IiwgaW9lKTsKKyAgICAgICAgICAgICAgICBiYW9zLnJlc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhb3MudG9CeXRlQXJyYXkoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbm1hcnNoYWxzIGEgYnl0ZSBhcnJheSBpbnRvIGEgV2lmaUNvbmZpZyBPYmplY3QKKyAgICAgKgorICAgICAqIEBwYXJhbSBkYXRhIC0gbWFyc2hhbGxlZCBXaWZpQ29uZmlnIE9iamVjdAorICAgICAqIEByZXR1cm4gV2lmaUNvbmZpZ3VyYXRpb24gT2JqZWN0CisgICAgICovCisKKyAgICBwdWJsaWMgc3RhdGljIFdpZmlDb25maWd1cmF0aW9uIHVubWFyc2hhbFdpZmlDb25maWcoYnl0ZVtdIGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCB8fCAgZGF0YS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgRGF0YUlucHV0U3RyZWFtIGluID0gbmV3IERhdGFJbnB1dFN0cmVhbShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZGF0YSkpOworICAgICAgICBXaWZpQ29uZmlndXJhdGlvbiBjb25maWcgPSBuZXcgV2lmaUNvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGludCB2ZXJzaW9uID0gaW4ucmVhZEludCgpOworCisgICAgICAgICAgICBjb25maWcubmV0d29ya0lkID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLnN0YXR1cyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5kaXNhYmxlUmVhc29uID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLlNTSUQgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5CU1NJRCA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgY29uZmlnLmFwQmFuZCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5hcENoYW5uZWwgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcuYXV0b0pvaW5CU1NJRCA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgY29uZmlnLkZRRE4gPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5wcm92aWRlckZyaWVuZGx5TmFtZSA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgaW50IG51bVJvYW1pbmdDb25zb3J0aXVtSWRzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLnJvYW1pbmdDb25zb3J0aXVtSWRzID0gbmV3IGxvbmdbbnVtUm9hbWluZ0NvbnNvcnRpdW1JZHNdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Sb2FtaW5nQ29uc29ydGl1bUlkczsgaSsrKSB7CisgICAgICAgICAgICAgICAgY29uZmlnLnJvYW1pbmdDb25zb3J0aXVtSWRzW2ldID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbmZpZy5wcmVTaGFyZWRLZXkgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uZmlnLndlcEtleXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBjb25maWcud2VwS2V5c1tpXSA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uZmlnLndlcFR4S2V5SW5kZXggPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcucHJpb3JpdHkgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcuaGlkZGVuU1NJRCA9IGluLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgY29uZmlnLnJlcXVpcmVQTUYgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIGNvbmZpZy51cGRhdGVJZGVudGlmaWVyID0gcmVhZFN0cmluZyhpbiwgdmVyc2lvbik7CisKKyAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkS2V5TWFuYWdlbWVudCA9IHJlYWRCaXRTZXQoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgY29uZmlnLmFsbG93ZWRQcm90b2NvbHMgPSByZWFkQml0U2V0KGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkQXV0aEFsZ29yaXRobXMgPSByZWFkQml0U2V0KGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5hbGxvd2VkUGFpcndpc2VDaXBoZXJzID0gcmVhZEJpdFNldChpbiwgdmVyc2lvbik7CisgICAgICAgICAgICBjb25maWcuYWxsb3dlZEdyb3VwQ2lwaGVycyA9IHJlYWRCaXRTZXQoaW4sIHZlcnNpb24pOworCisgICAgICAgICAgICAvL05vdCBiYWNrZWQtdXAgYmVjYXVzZSBFbnRlcnByaXNlQ29uZmlnIGludm9sdmVzCisgICAgICAgICAgICAvL0NlcnRpZmljYXRlcyB3aGljaCBhcmUgZGV2aWNlIHNwZWNpZmljLgorICAgICAgICAgICAgLy9jb25maWcuZW50ZXJwcmlzZUNvbmZpZyA9IG5ldyBXaWZpRW50ZXJwcmlzZUNvbmZpZygpOworCisgICAgICAgICAgICBjb25maWcuc2V0SXBDb25maWd1cmF0aW9uKHJlYWRJcENvbmZpZ3VyYXRpb24oaW4sIHZlcnNpb24pKTsKKworCisgICAgICAgICAgICBjb25maWcuZGhjcFNlcnZlciA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgY29uZmlnLmRlZmF1bHRHd01hY0FkZHJlc3MgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5hdXRvSm9pblN0YXR1cyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5zZWxmQWRkZWQgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIGNvbmZpZy5kaWRTZWxmQWRkID0gaW4ucmVhZEludCgpICE9IDA7CisgICAgICAgICAgICBjb25maWcudmFsaWRhdGVkSW50ZXJuZXRBY2Nlc3MgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIGNvbmZpZy5lcGhlbWVyYWwgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgICAgIGNvbmZpZy5jcmVhdG9yVWlkID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLmxhc3RDb25uZWN0VWlkID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLmxhc3RVcGRhdGVVaWQgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcuY3JlYXRvck5hbWUgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgICAgIGNvbmZpZy5sYXN0VXBkYXRlTmFtZSA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICAgICAgY29uZmlnLmJsYWNrTGlzdFRpbWVzdGFtcCA9IGluLnJlYWRMb25nKCk7CisgICAgICAgICAgICBjb25maWcubGFzdENvbm5lY3Rpb25GYWlsdXJlID0gaW4ucmVhZExvbmcoKTsKKyAgICAgICAgICAgIGNvbmZpZy5sYXN0Um9hbWluZ0ZhaWx1cmUgPSBpbi5yZWFkTG9uZygpOworICAgICAgICAgICAgY29uZmlnLmxhc3RSb2FtaW5nRmFpbHVyZVJlYXNvbiA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5yb2FtaW5nRmFpbHVyZUJsYWNrTGlzdFRpbWVNaWxsaSA9IGluLnJlYWRMb25nKCk7CisgICAgICAgICAgICBjb25maWcubnVtQ29ubmVjdGlvbkZhaWx1cmVzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLm51bUlwQ29uZmlnRmFpbHVyZXMgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcubnVtQXV0aEZhaWx1cmVzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLm51bVNjb3Jlck92ZXJyaWRlID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLm51bVNjb3Jlck92ZXJyaWRlQW5kU3dpdGNoZWROZXR3b3JrID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLm51bUFzc29jaWF0aW9uID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgY29uZmlnLm51bVVzZXJUcmlnZ2VyZWRXaWZpRGlzYWJsZUxvd1JTU0kgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcubnVtVXNlclRyaWdnZXJlZFdpZmlEaXNhYmxlQmFkUlNTSSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5udW1Vc2VyVHJpZ2dlcmVkV2lmaURpc2FibGVOb3RIaWdoUlNTSSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5udW1UaWNrc0F0TG93UlNTSSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5udW1UaWNrc0F0QmFkUlNTSSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5udW1UaWNrc0F0Tm90SGlnaFJTU0kgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBjb25maWcubnVtVXNlclRyaWdnZXJlZEpvaW5BdHRlbXB0cyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5hdXRvSm9pblVzZUFnZ3Jlc3NpdmVKb2luQXR0ZW1wdFRocmVzaG9sZCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5hdXRvSm9pbkJhaWxlZER1ZVRvTG93UnNzaSA9IGluLnJlYWRJbnQoKSAhPSAwOworICAgICAgICAgICAgY29uZmlnLnVzZXJBcHByb3ZlZCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5udW1Ob0ludGVybmV0QWNjZXNzUmVwb3J0cyA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGNvbmZpZy5ub0ludGVybmV0QWNjZXNzRXhwZWN0ZWQgPSBpbi5yZWFkSW50KCkgIT0gMDsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gY29udmVydCBieXRlIGFycmF5IHRvIFdpZmlDb25maWd1cmF0aW9uIG9iamVjdCIsIGlvZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY29uZmlnOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFByb3h5SW5mbyByZWFkUHJveHlJbmZvKERhdGFJbnB1dFN0cmVhbSBpbiwgaW50IHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGludCBpc051bGwgPSBpbi5yZWFkQnl0ZSgpOworICAgICAgICBpZiAoaXNOdWxsID09IE5VTEwpIHJldHVybiBudWxsOworICAgICAgICBTdHJpbmcgaG9zdCA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICBpbnQgcG9ydCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgU3RyaW5nIGV4Y2x1c2lvbkxpc3QgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQcm94eUluZm8oaG9zdCwgcG9ydCwgZXhjbHVzaW9uTGlzdCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZVByb3h5SW5mbyhEYXRhT3V0cHV0U3RyZWFtIG91dCwgUHJveHlJbmZvIHByb3h5SW5mbykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHByb3h5SW5mbyAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgcHJveHlJbmZvLmdldEhvc3QoKSk7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQocHJveHlJbmZvLmdldFBvcnQoKSk7CisgICAgICAgICAgICB3cml0ZVN0cmluZyhvdXQsIHByb3h5SW5mby5nZXRFeGNsdXNpb25MaXN0QXNTdHJpbmcoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgSW5ldEFkZHJlc3MgcmVhZEluZXRBZGRyZXNzKERhdGFJbnB1dFN0cmVhbSBpbiwgaW50IHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGludCBpc051bGwgPSBpbi5yZWFkQnl0ZSgpOworICAgICAgICBpZiAoaXNOdWxsID09IE5VTEwpIHJldHVybiBudWxsOworICAgICAgICBJbmV0QWRkcmVzcyBhZGRyZXNzID0gbnVsbDsKKyAgICAgICAgaW50IGFkZHJlc3NMZW5ndGggPSBpbi5yZWFkSW50KCk7CisgICAgICAgIGlmIChhZGRyZXNzTGVuZ3RoIDwgMSkgcmV0dXJuIGFkZHJlc3M7CisgICAgICAgIGJ5dGVbXSBhZGRyZXNzQnl0ZXMgPSBuZXcgYnl0ZVthZGRyZXNzTGVuZ3RoXTsKKyAgICAgICAgaW4ucmVhZChhZGRyZXNzQnl0ZXMsIDAsIGFkZHJlc3NMZW5ndGgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgYWRkcmVzcyA9IEluZXRBZGRyZXNzLmdldEJ5QWRkcmVzcyhhZGRyZXNzQnl0ZXMpOworICAgICAgICB9IGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiB1bmtub3duSG9zdEV4Y2VwdGlvbikgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkZHJlc3M7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZUluZXRBZGRyZXNzKERhdGFPdXRwdXRTdHJlYW0gb3V0LCBJbmV0QWRkcmVzcyBhZGRyZXNzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoYWRkcmVzcy5nZXRBZGRyZXNzKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOT1RfTlVMTCk7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQoYWRkcmVzcy5nZXRBZGRyZXNzKCkubGVuZ3RoKTsKKyAgICAgICAgICAgIG91dC53cml0ZShhZGRyZXNzLmdldEFkZHJlc3MoKSwgMCwgYWRkcmVzcy5nZXRBZGRyZXNzKCkubGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBMaW5rQWRkcmVzcyByZWFkTGlua0FkZHJlc3MoRGF0YUlucHV0U3RyZWFtIGluLCBpbnQgdmVyc2lvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IGlzTnVsbCA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgIGlmIChpc051bGwgPT0gTlVMTCkgcmV0dXJuIG51bGw7CisgICAgICAgIEluZXRBZGRyZXNzIGFkZHJlc3MgPSByZWFkSW5ldEFkZHJlc3MoaW4sIHZlcnNpb24pOworICAgICAgICBpbnQgcHJlZml4TGVuZ3RoID0gaW4ucmVhZEludCgpOworICAgICAgICBpbnQgZmxhZ3MgPSBpbi5yZWFkSW50KCk7CisgICAgICAgIGludCBzY29wZSA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBMaW5rQWRkcmVzcyhhZGRyZXNzLCBwcmVmaXhMZW5ndGgsIGZsYWdzLCBzY29wZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZUxpbmtBZGRyZXNzKERhdGFPdXRwdXRTdHJlYW0gb3V0LCBMaW5rQWRkcmVzcyBhZGRyZXNzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoYWRkcmVzcyAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgIHdyaXRlSW5ldEFkZHJlc3Mob3V0LCBhZGRyZXNzLmdldEFkZHJlc3MoKSk7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQoYWRkcmVzcy5nZXRQcmVmaXhMZW5ndGgoKSk7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQoYWRkcmVzcy5nZXRGbGFncygpKTsKKyAgICAgICAgICAgIG91dC53cml0ZUludChhZGRyZXNzLmdldFNjb3BlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0YXRpY0lwQ29uZmlndXJhdGlvbiByZWFkU3RhdGljSXBDb25maWd1cmF0aW9uKERhdGFJbnB1dFN0cmVhbSBpbiwgaW50IHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGludCBpc051bGwgPSBpbi5yZWFkQnl0ZSgpOworICAgICAgICBpZiAoaXNOdWxsID09IE5VTEwpIHJldHVybiBudWxsOworICAgICAgICBTdGF0aWNJcENvbmZpZ3VyYXRpb24gc3RhdGljSXBDb25maWd1cmF0aW9uID0gbmV3IFN0YXRpY0lwQ29uZmlndXJhdGlvbigpOworICAgICAgICBzdGF0aWNJcENvbmZpZ3VyYXRpb24uaXBBZGRyZXNzID0gcmVhZExpbmtBZGRyZXNzKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgc3RhdGljSXBDb25maWd1cmF0aW9uLmdhdGV3YXkgPSByZWFkSW5ldEFkZHJlc3MoaW4sIHZlcnNpb24pOworICAgICAgICBpbnQgZG5zU2VydmVyc0xlbmd0aCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkbnNTZXJ2ZXJzTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHN0YXRpY0lwQ29uZmlndXJhdGlvbi5kbnNTZXJ2ZXJzLmFkZChyZWFkSW5ldEFkZHJlc3MoaW4sIHZlcnNpb24pKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWNJcENvbmZpZ3VyYXRpb24uZG9tYWlucyA9IHJlYWRTdHJpbmcoaW4sIHZlcnNpb24pOworICAgICAgICByZXR1cm4gc3RhdGljSXBDb25maWd1cmF0aW9uOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVTdGF0aWNJcENvbmZpZ3VyYXRpb24oRGF0YU91dHB1dFN0cmVhbSBvdXQsIFN0YXRpY0lwQ29uZmlndXJhdGlvbiBzdGF0aWNJcENvbmZpZ3VyYXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmIChzdGF0aWNJcENvbmZpZ3VyYXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOT1RfTlVMTCk7CisgICAgICAgICAgICB3cml0ZUxpbmtBZGRyZXNzKG91dCwgc3RhdGljSXBDb25maWd1cmF0aW9uLmlwQWRkcmVzcyk7CisgICAgICAgICAgICB3cml0ZUluZXRBZGRyZXNzKG91dCwgc3RhdGljSXBDb25maWd1cmF0aW9uLmdhdGV3YXkpOworICAgICAgICAgICAgb3V0LndyaXRlSW50KHN0YXRpY0lwQ29uZmlndXJhdGlvbi5kbnNTZXJ2ZXJzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKEluZXRBZGRyZXNzIGluZXRBZGRyZXNzIDogc3RhdGljSXBDb25maWd1cmF0aW9uLmRuc1NlcnZlcnMpIHsKKyAgICAgICAgICAgICAgICB3cml0ZUluZXRBZGRyZXNzKG91dCwgaW5ldEFkZHJlc3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd3JpdGVTdHJpbmcob3V0LCBzdGF0aWNJcENvbmZpZ3VyYXRpb24uZG9tYWlucyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgSXBDb25maWd1cmF0aW9uIHJlYWRJcENvbmZpZ3VyYXRpb24oRGF0YUlucHV0U3RyZWFtIGluLCBpbnQgdmVyc2lvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaW50IGlzTnVsbCA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgIGlmIChpc051bGwgPT0gTlVMTCkgcmV0dXJuIG51bGw7CisgICAgICAgIElwQ29uZmlndXJhdGlvbiBpcENvbmZpZ3VyYXRpb24gPSBuZXcgSXBDb25maWd1cmF0aW9uKCk7CisgICAgICAgIFN0cmluZyB0bXAgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgaXBDb25maWd1cmF0aW9uLmlwQXNzaWdubWVudCA9IHRtcCA9PSBudWxsID8gbnVsbCA6IElwQ29uZmlndXJhdGlvbi5JcEFzc2lnbm1lbnQudmFsdWVPZih0bXApOworICAgICAgICB0bXAgPSByZWFkU3RyaW5nKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgaXBDb25maWd1cmF0aW9uLnByb3h5U2V0dGluZ3MgPSB0bXAgPT0gbnVsbCA/IG51bGwgOiBJcENvbmZpZ3VyYXRpb24uUHJveHlTZXR0aW5ncy52YWx1ZU9mKHRtcCk7CisgICAgICAgIGlwQ29uZmlndXJhdGlvbi5zdGF0aWNJcENvbmZpZ3VyYXRpb24gPSByZWFkU3RhdGljSXBDb25maWd1cmF0aW9uKGluLCB2ZXJzaW9uKTsKKyAgICAgICAgaXBDb25maWd1cmF0aW9uLmh0dHBQcm94eSA9IHJlYWRQcm94eUluZm8oaW4sIHZlcnNpb24pOworICAgICAgICByZXR1cm4gaXBDb25maWd1cmF0aW9uOworICAgIH0KKworCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZUlwQ29uZmlndXJhdGlvbihEYXRhT3V0cHV0U3RyZWFtIG91dCwgSXBDb25maWd1cmF0aW9uIGlwQ29uZmlndXJhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKGlwQ29uZmlndXJhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgaXBDb25maWd1cmF0aW9uLmlwQXNzaWdubWVudCAhPSBudWxsID8gaXBDb25maWd1cmF0aW9uLmlwQXNzaWdubWVudC5uYW1lKCkgOiBudWxsKTsKKyAgICAgICAgICAgIHdyaXRlU3RyaW5nKG91dCwgaXBDb25maWd1cmF0aW9uLnByb3h5U2V0dGluZ3MgIT0gbnVsbCA/IGlwQ29uZmlndXJhdGlvbi5wcm94eVNldHRpbmdzLm5hbWUoKSA6IG51bGwpOworICAgICAgICAgICAgd3JpdGVTdGF0aWNJcENvbmZpZ3VyYXRpb24ob3V0LCBpcENvbmZpZ3VyYXRpb24uc3RhdGljSXBDb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIHdyaXRlUHJveHlJbmZvKG91dCwgaXBDb25maWd1cmF0aW9uLmh0dHBQcm94eSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5VTEwpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVhZFN0cmluZyhEYXRhSW5wdXRTdHJlYW0gaW4sIGludCB2ZXJzaW9uKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBieXRlIGlzTnVsbCA9IGluLnJlYWRCeXRlKCk7CisgICAgICAgIGlmIChpc051bGwgPT0gTk9UX05VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBpbi5yZWFkVVRGKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZVN0cmluZyhEYXRhT3V0cHV0U3RyZWFtIG91dCwgU3RyaW5nIHZhbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHZhbCAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXQud3JpdGVCeXRlKE5PVF9OVUxMKTsKKyAgICAgICAgICAgIG91dC53cml0ZVVURih2YWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEJpdFNldCByZWFkQml0U2V0KERhdGFJbnB1dFN0cmVhbSBpbiwgaW50IHZlcnNpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGJ5dGUgaXNOdWxsID0gaW4ucmVhZEJ5dGUoKTsKKyAgICAgICAgaWYgKGlzTnVsbCA9PSBOT1RfTlVMTCkgeworICAgICAgICAgICAgaW50IGxlbmd0aCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIGJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW2xlbmd0aF07CisgICAgICAgICAgICBpbi5yZWFkKGJ5dGVzLCAwLCBsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIEJpdFNldC52YWx1ZU9mKGJ5dGVzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IEJpdFNldCgpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVCaXRTZXQoRGF0YU91dHB1dFN0cmVhbSBvdXQsIEJpdFNldCB2YWwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGlmICh2YWwgIT0gbnVsbCkgeworICAgICAgICAgICAgb3V0LndyaXRlQnl0ZShOT1RfTlVMTCk7CisgICAgICAgICAgICBieXRlW10gYnl0ZUFycmF5ID0gdmFsLnRvQnl0ZUFycmF5KCk7CisgICAgICAgICAgICBvdXQud3JpdGVJbnQoYnl0ZUFycmF5Lmxlbmd0aCk7CisgICAgICAgICAgICBvdXQud3JpdGUoYnl0ZUFycmF5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dC53cml0ZUJ5dGUoTlVMTCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TZXR0aW5nc1Byb3ZpZGVyL3Rlc3QvQW5kcm9pZC5tayBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvdGVzdC9BbmRyb2lkLm1rCmluZGV4IGVmODYzZTcuLmYyNzg5NjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvdGVzdC9BbmRyb2lkLm1rCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvdGVzdC9BbmRyb2lkLm1rCkBAIC01LDcgKzUsMTAgQEAKICMgTm90ZSB3ZSBzdGF0aWNhbGx5IGxpbmsgU2V0dGluZ3NTdGF0ZSB0byBkbyBzb21lIHVuaXQgdGVzdHMuICBJdCdzIG5vdCBhY2Nlc3NpYmxlIG90aGVyd2lzZQogIyBiZWNhdXNlIHRoaXMgdGVzdCBpcyBub3QgYW4gaW5zdHJ1bWVudGF0aW9uIHRlc3QuIChiZWNhdXNlIHRoZSB0YXJnZXQgcnVucyBpbiB0aGUgc3lzdGVtIHByb2Nlc3MuKQogTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtc3ViZGlyLWphdmEtZmlsZXMpIFwKLSAgICAuLi9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1NldHRpbmdzU3RhdGUuamF2YQorICAgIC4uL3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvU2V0dGluZ3NTdGF0ZS5qYXZhIFwKKyAgICAuLi9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL1dpRmlDb25maWd1cmF0aW9uU2VyaWFsaXplci5qYXZhIFwKKyAgICAuLi9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL05ldHdvcmtQb2xpY3lTZXJpYWxpemVyLmphdmEKKwogCiBMT0NBTF9QQUNLQUdFX05BTUUgOj0gU2V0dGluZ3NQcm92aWRlclRlc3QKIApAQCAtMTMsNCArMTYsNCBAQAogCiBMT0NBTF9DRVJUSUZJQ0FURSA6PSBwbGF0Zm9ybQogCi1pbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitpbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvdGVzdC9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL05ldHdvcmtQb2xpY3lTZXJpYWxpemVyVGVzdC5qYXZhIGIvcGFja2FnZXMvU2V0dGluZ3NQcm92aWRlci90ZXN0L3NyYy9jb20vYW5kcm9pZC9wcm92aWRlcnMvc2V0dGluZ3MvTmV0d29ya1BvbGljeVNlcmlhbGl6ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4NjU5NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NldHRpbmdzUHJvdmlkZXIvdGVzdC9zcmMvY29tL2FuZHJvaWQvcHJvdmlkZXJzL3NldHRpbmdzL05ldHdvcmtQb2xpY3lTZXJpYWxpemVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLnByb3ZpZGVycy5zZXR0aW5nczsKKworaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtQb2xpY3k7CitpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1RlbXBsYXRlOworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOworCisvKioKKyAqIFRlc3RzIGZvciBOZXR3b3JrUG9saWN5U2VyaWFsaXplcgorICovCitwdWJsaWMgY2xhc3MgTmV0d29ya1BvbGljeVNlcmlhbGl6ZXJUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKKyAgICBzdGF0aWMgUmFuZG9tIHNSYW5kb20gPSBuZXcgUmFuZG9tKCk7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TWFyc2hhbGxBbmRVbm1hcnNoYWxOZXR3b3JrUG9saWN5KCkgeworICAgICAgICBOZXR3b3JrUG9saWN5IHBvbGljeSA9IGdldER1bW15TmV0d29ya1BvbGljeSgpOworICAgICAgICBieXRlW10gZGF0YSA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLm1hcnNoYWxOZXR3b3JrUG9saWN5KHBvbGljeSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIkdvdCBOdWxsIGRhdGEgZnJvbSBtYXJzaGFsIiwgZGF0YSk7CisgICAgICAgIGFzc2VydEZhbHNlKCJHb3QgYmFjayBhbiBlbXB0eSBieXRlW10gZnJvbSBtYXJzaGFsIiwgZGF0YS5sZW5ndGggPT0gMCk7CisKKyAgICAgICAgTmV0d29ya1BvbGljeSB1bm1hcnNoYWxlZCA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLnVubWFyc2hhbE5ldHdvcmtQb2xpY3koZGF0YSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIkdvdCBOdWxsIGRhdGEgZnJvbSB1bm1hcnNoYWxlZCIsIHVubWFyc2hhbGVkKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZSgiTmV0d29ya1BvbGljeSBNYXJzaGFsbCBhbmQgVW5tYXJzaGFsIEZhaWxlZCEiLCBwb2xpY3kuZXF1YWxzKHVubWFyc2hhbGVkKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1hcnNoYWxsTmV0d29ya1BvbGljeUVkZ2VDYXNlcygpIHsKKyAgICAgICAgYnl0ZVtdIGRhdGEgPSBOZXR3b3JrUG9saWN5U2VyaWFsaXplci5tYXJzaGFsTmV0d29ya1BvbGljeShudWxsKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTmV0d29ya1BvbGljeSBtYXJzaGFsIHJldHVybmVkIG51bGwuIEV4cGVjdGVkOiBieXRlWzBdIiwgZGF0YSk7CisgICAgICAgIGFzc2VydEVxdWFscygiTmV0d29ya1BvbGljeSBtYXJzaGFsIHJldHVybmVkIGluY29tcGxldGUgYnl0ZSBhcnJheS4gRXhwZWN0ZWQ6IGJ5dGVbMF0iLAorICAgICAgICAgICAgICAgIGRhdGEubGVuZ3RoLCAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0VW5tYXJzaGFsbE5ldHdvcmtQb2xpY3lFZGdlQ2FzZXMoKSB7CisgICAgICAgIE5ldHdvcmtQb2xpY3kgcG9saWN5ID0gTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIudW5tYXJzaGFsTmV0d29ya1BvbGljeShudWxsKTsKKyAgICAgICAgYXNzZXJ0TnVsbCgiTm9uIG51bGwgTmV0d29ya1BvbGljeSByZXR1cm5lZCBmb3IgbnVsbCBieXRlW10gaW5wdXQiLCBwb2xpY3kpOworCisgICAgICAgIHBvbGljeSA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLnVubWFyc2hhbE5ldHdvcmtQb2xpY3kobmV3IGJ5dGVbMF0pOworICAgICAgICBhc3NlcnROdWxsKCJOb24gbnVsbCBOZXR3b3JrUG9saWN5IHJldHVybmVkIGZvciBlbXB0eSBieXRlW10gaW5wdXQiLCBwb2xpY3kpOworCisgICAgICAgIHBvbGljeSA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLnVubWFyc2hhbE5ldHdvcmtQb2xpY3kobmV3IGJ5dGVbXXsxMCwgMjAsIDMwLCA0MCwgNTAsIDYwfSk7CisgICAgICAgIGFzc2VydE51bGwoIk5vbiBudWxsIE5ldHdvcmtQb2xpY3kgcmV0dXJuZWQgZm9yIGluY29tcGxldGUgYnl0ZVtdIGlucHV0IiwgcG9saWN5KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TWFyc2hhbGxBbmRVbm1hcnNoYWxOZXR3b3JrUG9saWNpZXMoKSB7CisgICAgICAgIE5ldHdvcmtQb2xpY3lbXSBwb2xpY2llcyA9IGdldER1bW15TmV0d29ya1BvbGljaWVzKDUpOworICAgICAgICBieXRlW10gZGF0YSA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLm1hcnNoYWxOZXR3b3JrUG9saWNpZXMocG9saWNpZXMpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJHb3QgTnVsbCBkYXRhIGZyb20gbWFyc2hhbCIsIGRhdGEpOworICAgICAgICBhc3NlcnRGYWxzZSgiR290IGJhY2sgYW4gZW1wdHkgYnl0ZVtdIGZyb20gbWFyc2hhbCIsIGRhdGEubGVuZ3RoID09IDApOworCisgICAgICAgIE5ldHdvcmtQb2xpY3lbXSB1bm1hcnNoYWxlZCA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLnVubWFyc2hhbE5ldHdvcmtQb2xpY2llcyhkYXRhKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiR290IE51bGwgZGF0YSBmcm9tIHVubWFyc2hhbGVkIiwgdW5tYXJzaGFsZWQpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2xpY2llcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIk5ldHdvcmtQb2xpY2llcyBNYXJzaGFsbCBhbmQgVW5tYXJzaGFsIEZhaWxlZCEiLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9saWNpZXNbaV0uZXF1YWxzKHVubWFyc2hhbGVkW2ldKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIG5wZSkgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiU29tZSBwb2xpY2llcyB3ZXJlIG5vdCBtYXJzaGFsZWQvdW5tYXJzaGFsZWQgY29ycmVjdGx5IiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdE1hcnNoYWxsTmV0d29ya1BvbGljaWVzRWRnZUNhc2VzKCkgeworICAgICAgICBieXRlW10gZGF0YSA9IE5ldHdvcmtQb2xpY3lTZXJpYWxpemVyLm1hcnNoYWxOZXR3b3JrUG9saWNpZXMobnVsbCk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIk5ldHdvcmtQb2xpY2llcyBtYXJzaGFsIHJldHVybmVkIG51bGwhIiwgZGF0YSk7CisgICAgICAgIGFzc2VydEVxdWFscygiTmV0d29ya1BvbGljaWVzIG1hcnNoYWwgcmV0dXJuZWQgaW5jb21wbGV0ZSBieXRlIGFycmF5IiwgZGF0YS5sZW5ndGgsIDApOworCisgICAgICAgIGRhdGEgPSBOZXR3b3JrUG9saWN5U2VyaWFsaXplci5tYXJzaGFsTmV0d29ya1BvbGljaWVzKG5ldyBOZXR3b3JrUG9saWN5WzBdKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCgiTmV0d29ya1BvbGljaWVzIG1hcnNoYWwgcmV0dXJuZWQgbnVsbCBmb3IgZW1wdHkgTmV0d29ya1BvbGljeVtdIiwgZGF0YSk7CisgICAgICAgIGFzc2VydEVxdWFscygiTmV0d29ya1BvbGljaWVzIG1hcnNoYWwgcmV0dXJuZWQgaW5jb21wbGV0ZSBieXRlIGFycmF5IGZvciBlbXB0eSBOZXR3b3JrUG9saWN5W10iCisgICAgICAgICAgICAgICAgLCBkYXRhLmxlbmd0aCwgMCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFVubWFyc2hhbE5ldHdvcmtQb2xpY2llc0VkZ2VDYXNlcygpIHsKKyAgICAgICAgTmV0d29ya1BvbGljeVtdIHBvbGljaWVzID0gTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIudW5tYXJzaGFsTmV0d29ya1BvbGljaWVzKG51bGwpOworICAgICAgICBhc3NlcnROb3ROdWxsKCJOZXR3b3JrUG9saWNpZXMgdW5tYXJzaGFsIHJldHVybmVkIG51bGwgZm9yIG51bGwgaW5wdXQuIEV4cGVjdGVkOiBieXRlWzBdICIsCisgICAgICAgICAgICAgICAgcG9saWNpZXMpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk5vbiBFbXB0eSBOZXR3b3JrUG9saWN5W10gcmV0dXJuZWQgZm9yIG51bGwgaW5wdXQgRXhwZWN0ZWQ6IGJ5dGVbMF0iLAorICAgICAgICAgICAgICAgIHBvbGljaWVzLmxlbmd0aCwgMCk7CisKKyAgICAgICAgcG9saWNpZXMgPSBOZXR3b3JrUG9saWN5U2VyaWFsaXplci51bm1hcnNoYWxOZXR3b3JrUG9saWNpZXMobmV3IGJ5dGVbMF0pOworICAgICAgICBhc3NlcnROb3ROdWxsKCJOZXR3b3JrUG9saWNpZXMgdW5tYXJzaGFsIHJldHVybmVkIG51bGwgZm9yIGVtcHR5IGJ5dGVbXSBpbnB1dC4gRXhwZWN0ZWQ6IGJ5dGVbMF0iLAorICAgICAgICAgICAgICAgIHBvbGljaWVzKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJOb24gRW1wdHkgTmV0d29ya1BvbGljeVtdIHJldHVybmVkIGZvciBlbXB0eSBieXRlW10gaW5wdXQuIEV4cGVjdGVkOiBieXRlWzBdIiwKKyAgICAgICAgICAgICAgICBwb2xpY2llcy5sZW5ndGgsIDApOworCisgICAgICAgIHBvbGljaWVzID0gTmV0d29ya1BvbGljeVNlcmlhbGl6ZXIudW5tYXJzaGFsTmV0d29ya1BvbGljaWVzKG5ldyBieXRlW117MTAsIDIwLCAzMCwgNDAsIDUwLCA2MH0pOworICAgICAgICBhc3NlcnROb3ROdWxsKCJOZXR3b3JrUG9saWNpZXMgdW5tYXJzaGFsIHJldHVybmVkIG51bGwgZm9yIGluY29tcGxldGUgYnl0ZVtdIGlucHV0LiAiICsKKyAgICAgICAgICAgICAgICAiRXhwZWN0ZWQ6IGJ5dGVbMF0gIiwgcG9saWNpZXMpOworICAgICAgICBhc3NlcnRFcXVhbHMoIk5vbiBFbXB0eSBOZXR3b3JrUG9saWN5W10gcmV0dXJuZWQgZm9yIGluY29tcGxldGUgYnl0ZVtdIGlucHV0IEV4cGVjdGVkOiBieXRlWzBdIiwKKyAgICAgICAgICAgICAgICBwb2xpY2llcy5sZW5ndGgsIDApOworCisgICAgfQorCisgICAgcHJpdmF0ZSBOZXR3b3JrUG9saWN5W10gZ2V0RHVtbXlOZXR3b3JrUG9saWNpZXMoaW50IG51bSkgeworICAgICAgICBOZXR3b3JrUG9saWN5W10gcG9saWNpZXMgPSBuZXcgTmV0d29ya1BvbGljeVtudW1dOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICBwb2xpY2llc1tpXSA9IGdldER1bW15TmV0d29ya1BvbGljeSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwb2xpY2llczsKKyAgICB9CisKKyAgICBwcml2YXRlIE5ldHdvcmtQb2xpY3kgZ2V0RHVtbXlOZXR3b3JrUG9saWN5KCkgeworICAgICAgICBOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUgPSBuZXcgTmV0d29ya1RlbXBsYXRlKE5ldHdvcmtUZW1wbGF0ZS5NQVRDSF9NT0JJTEVfQUxMLCAic3ViSWQiLAorICAgICAgICAgICAgICAgICJHb29nbGVHdWVzdCIpOworICAgICAgICBpbnQgY3ljbGVEYXkgPSBzUmFuZG9tLm5leHRJbnQoKTsKKyAgICAgICAgU3RyaW5nIGN5Y2xlVGltZXpvbmUgPSAidGltZXpvbmUiOworICAgICAgICBsb25nIHdhcm5pbmdCeXRlcyA9IHNSYW5kb20ubmV4dExvbmcoKTsKKyAgICAgICAgbG9uZyBsaW1pdEJ5dGVzID0gc1JhbmRvbS5uZXh0TG9uZygpOworICAgICAgICBsb25nIGxhc3RXYXJuaW5nU25vb3plID0gc1JhbmRvbS5uZXh0TG9uZygpOworICAgICAgICBsb25nIGxhc3RMaW1pdFNub296ZSA9IHNSYW5kb20ubmV4dExvbmcoKTsKKyAgICAgICAgYm9vbGVhbiBtZXRlcmVkID0gc1JhbmRvbS5uZXh0SW50KCkgJSAyID09IDA7CisgICAgICAgIGJvb2xlYW4gaW5mZXJyZWQgPSBzUmFuZG9tLm5leHRJbnQoKSAlIDIgPT0gMDsKKyAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrUG9saWN5KHRlbXBsYXRlLCBjeWNsZURheSwgY3ljbGVUaW1lem9uZSwgd2FybmluZ0J5dGVzLCBsaW1pdEJ5dGVzLAorICAgICAgICAgICAgICAgIGxhc3RXYXJuaW5nU25vb3plLCBsYXN0TGltaXRTbm9vemUsIG1ldGVyZWQsIGluZmVycmVkKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9wYWNrYWdlcy9TaGVsbC9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IDI1MzQ2YWMuLjc0MTZmYjUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTA3LDYgKzEwNyw4IEBACiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUdJU1RFUl9DT05ORUNUSU9OX01BTkFHRVIiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUdJU1RFUl9TSU1fU1VCU0NSSVBUSU9OIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uR0VUX0FQUF9PUFNfU1RBVFMiIC8+CisgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5WSUJSQVRFIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUyIgLz4KIAogICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9sYWJlbCIKICAgICAgICAgICAgICAgICAgYW5kcm9pZDpmb3JjZURldmljZUVuY3J5cHRlZD0idHJ1ZSIKQEAgLTE0OSw2ICsxNTEsMTQgQEAKICAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KICAgICAgICAgPC9yZWNlaXZlcj4KIAorICAgICAgICA8cmVjZWl2ZXIKKyAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iLlJlbW90ZUJ1Z3JlcG9ydFJlY2VpdmVyIgorICAgICAgICAgICAgYW5kcm9pZDpwZXJtaXNzaW9uPSJhbmRyb2lkLnBlcm1pc3Npb24uRFVNUCI+CisgICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KKyAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlJFTU9URV9CVUdSRVBPUlRfRklOSVNIRUQiIC8+CisgICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+CisgICAgICAgIDwvcmVjZWl2ZXI+CisKICAgICAgICAgPHNlcnZpY2UKICAgICAgICAgICAgIGFuZHJvaWQ6bmFtZT0iLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZSIKICAgICAgICAgICAgIGFuZHJvaWQ6ZXhwb3J0ZWQ9ImZhbHNlIi8+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvbGF5b3V0L2RpYWxvZ19idWdyZXBvcnRfaW5mby54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvbGF5b3V0L2RpYWxvZ19idWdyZXBvcnRfaW5mby54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxZTlmOQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy9sYXlvdXQvZGlhbG9nX2J1Z3JlcG9ydF9pbmZvLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorCis8TGluZWFyTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50Ij4KKyAgICA8RWRpdFRleHQKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9uYW1lIgorICAgICAgICBhbmRyb2lkOm1heExlbmd0aD0iMzAiCisgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDppbnB1dFR5cGU9InRleHROb1N1Z2dlc3Rpb25zIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpoaW50PSJAc3RyaW5nL2J1Z3JlcG9ydF9pbmZvX25hbWUiLz4KKyAgICA8RWRpdFRleHQKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIKKyAgICAgICAgYW5kcm9pZDptYXhMZW5ndGg9IjgwIgorICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmhpbnQ9IkBzdHJpbmcvYnVncmVwb3J0X2luZm9fdGl0bGUiLz4KKyAgICA8RWRpdFRleHQKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kZXNjcmlwdGlvbiIKKyAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJmYWxzZSIKKyAgICAgICAgYW5kcm9pZDppbnB1dFR5cGU9InRleHRNdWx0aUxpbmUiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmhpbnQ9IkBzdHJpbmcvYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iLz4KKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKaW5kZXggOGM0ZGU0ZS4uMjQ3Y2NmYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRm91dHZlcnNsYWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iRm91dHZlcnNsYWdsw6plciBrb24gbmllIGdlbGVlcyB3b3JkIG5pZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5hYW1sb29zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkJlc29uZGVyaGVkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTa2VybWtpZWtpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNrZXJta2lla2llIHN1a3Nlc3ZvbCBnZW5lZW0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IktvbiBuaWUgc2tlcm1raWVraWUgbmVlbSBuaWUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkZvdXR2ZXJzbGFnYmVzb25kZXJoZWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLb3J0IG5hYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtcmXDq2xvcHNvbW1pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJHZWRldGFpbGxlZXJkZSBiZXNrcnl3aW5nIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCA0MTVmM2VjLi45ZjM2MTVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLhi6jhiLPhipXhiqsg4Yiq4Y2W4Yit4Ym24Ym9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuGLqOGIs+GKleGKqyDhiKrhjZbhiK3hibUg4Y2L4Yut4YiNIOGIiuGKkOGJoOGJpSDhiqDhiI3hibDhibvhiIjhiJ0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLhi6vhiI3hibDhiLDhi6jhiJgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4Yud4Yit4Yud4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuGJheGMveGJoOGJs+GLiiDhjIjhjL0g4Yql4Yut4YmzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4YmF4Yy94Ymg4Ymz4YuKIOGMiOGMvSDhiqXhi63hibMg4Ymg4Yi14Yqs4Ym1IOGJsOGKkOGIteGJt+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLhiYXhjL3hiaDhibPhi4og4YyI4Yy9IOGKpeGLreGJsyDhiIrhipDhiLMg4Yqg4Yut4Ym94YiN4YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuGLqOGIs+GKleGKqyDhiKrhjZbhiK3hibUg4Yud4Yit4Yud4Yiu4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLhiqDhjK3hiK0g4Yi14YidIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLhi6gxIOGImOGIteGImOGIrSDhiJvhjKDhiYPhiIjhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLhi53hiK3hi53hiK0g4YiY4YyN4YiI4YyrIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbAppbmRleCA3OWQ2MTVlLi5iNjcwZTM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLYqtmC2KfYsdmK2LEg2KfZhNij2K7Yt9in2KEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i2KrYudiw2LHYqiDZgtix2KfYodipINmF2YTZgSDYqtmC2LHZitixINin2YTYrti32KMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i2KjYr9mI2YYg2KfYs9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Itin2YTYqtmB2KfYtdmK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i2YTZgti32Kkg2LTYp9i02KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLYqtmFINin2YTYqtmC2KfYtyDZhNmC2LfYqSDYp9mE2LTYp9i02Kkg2KjZhtis2KfYrS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i2KrYudiw2LEg2KfZhNiq2YLYp9i3INmE2YLYt9ipINin2YTYtNin2LTYqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i2KrZgdin2LXZitmEINiq2YLYsdmK2LEg2KfZhNiu2LfYoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i2KfYs9mFINmF2K7Yqti12LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Itiz2LfYsSDYp9mE2YXZhNiu2LUg2KfZhNij2YjZhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItmI2LXZgSDYqtmB2LXZitmE2YoiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKaW5kZXggMTc2YjAwOS4uNjM0ZDEyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1hei1yQVovc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJCYXEgaGVzYWJhdGxhcsSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkJhcSBoZXNhYmF0IGZheWzEsSBveHVubXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYWRzxLF6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ImRpc3BsZXkgZ8O2csO8bnTDvHPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkRpc3BsZXkgZ8O2csO8bnTDvHPDvCB1xJ91cmxhIMOnyZlraWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRGlzcGxleSBnw7Zyw7xudMO8c8O8IMmZbMOnYXRhbiBkZXlpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQmFxIGhlc2FiYXQgZGV0YWxsYXLEsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iUcSxc2EgYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtc8mZdHJsaWsgeMO8bGFzyZkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLGj3RyYWZsxLEgdMmZc3ZpciI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWFjYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIAorICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlIiBtc2dpZD0iNzQwOTkxNzMzODIyMzM4NjYzNyI+Ikl6dmXFoXRhaiBvIGdyZcWhY2kgc2UgZ2VuZXJpxaFlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlIiBtc2dpZD0iMjI5MzcxMTU0Njg5Mjg2Mzg5OCI+Ikl6dmXFoXRhaiBvIGdyZcWhY2kgamUgc25pbWxqZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgcHJvZHVjdD0id2F0Y2giIG1zZ2lkPSI4Mzg5MTcyMjQ4NDMzNTk3NjgzIj4iUHJldnVjaXRlIHVsZXZvIGRhIGJpc3RlIGRlbGlsaSBpenZlxaF0YWogbyBncmXFoWthbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJEb2Rpcm5pdGUgZGEgYmlzdGUgZGVsaWxpIGl6dmXFoXRhaiBvIGdyZcWhY2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybSIgbXNnaWQ9IjUxMzA2OTg0Njc3OTU2Njk3ODAiPiJJenZlxaF0YWppIG8gZ3JlxaFrYW1hIHNhZHLFvmUgcG9kYXRrZSBpeiByYXpsacSNaXRpaCBzaXN0ZW1za2loIGRhdG90ZWthIGV2aWRlbmNpamUsIHVrbGp1xI11anXEh2kgbGnEjW5lIGkgcHJpdmF0bmUgcG9kYXRrZS4gRGVsaXRlIGl6dmXFoXRhamUgbyBncmXFoWthbWEgc2FtbyBzYSBhcGxpa2FjaWphbWEgaSBsanVkaW1hIHUga29qZSBpbWF0ZSBwb3ZlcmVuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IlByaWthxb5pIG92dSBwb3J1a3Ugc2xlZGXEh2kgcHV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSXp2ZcWhdGFqaSBvIGdyZcWha2FtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJEYXRvdGVrYSBpenZlxaF0YWphIG8gZ3JlxaFjaSBuZSBtb8W+ZSBkYSBzZSBwcm/EjWl0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5laW1lbm92YW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU25pbWNpIGVrcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNuaW1hbmplIGVrcmFuYSBqZSB1c3BlbG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNuaW1hbmplIGVrcmFuYSBuaWplIHVzcGVsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWxqaSBpenZlxaF0YWphIG8gZ3JlxaFjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS3JhdGtpIG5heml2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXppbWUgdSBqZWRub20gcmVkdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFsam5pIG9waXMiPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCmluZGV4IGE0NzA5OTguLjY2MWEwYjY1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLQntGC0YfQtdGC0Lgg0LfQsCDQv9GA0L7Qs9GALiDQs9GA0LXRiNC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0KTQsNC50LvRitGCINGB0YrRgSDRgdC40LPQvdCw0Lsg0LfQsCDQv9GA0L7Qs9GA0LDQvNC90LAg0LPRgNC10YjQutCwINC90LUg0LzQvtC20LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i0LHQtdC3INC40LzQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQn9C+0LTRgNC+0LHQvdC+0YHRgtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCV0LrRgNCw0L3QvdCwINGB0L3QuNC80LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCV0LrRgNCw0L3QvdCw0YLQsCDRgdC90LjQvNC60LAg0LHQtSDQvdCw0L/RgNCw0LLQtdC90LAg0YPRgdC/0LXRiNC90L4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCV0LrRgNCw0L3QvdCw0YLQsCDRgdC90LjQvNC60LAg0L3QtSDQvNC+0LbQsCDQtNCwINCx0YrQtNC1INC90LDQv9GA0LDQstC10L3QsC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0J/QvtC00YDQvtCx0L3QvtGB0YLQuCDQt9CwINGB0LjQs9C90LDQu9CwINC30LAg0L/RgNC+0LPRgNCw0LzQvdCwINCz0YDQtdGI0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i0JrRgNCw0YLQutC+INC40LzQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i0JXQtNC90L7RgNC10LTQvtCy0L4g0L7QsdC+0LHRidC10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i0J/QvtC00YDQvtCx0L3QviDQvtC/0LjRgdCw0L3QuNC1Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCmluZGV4IGFmYTNhNDYuLmU3MjU2Y2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtYm4tckJEL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Kak4KeN4Kaw4KeB4Kaf4Ka/4KawIOCmquCnjeCmsOCmpOCmv+CmrOCnh+CmpuCmqOCml+CngeCmsuCmvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgpqTgp43gprDgp4Hgpp/gpr/gprAg4Kaq4KeN4Kaw4Kak4Ka/4Kas4KeH4Kam4Kao4KeH4KawIOCmq+CmvuCmh+CmsuCmn+CmvyDgpqrgpqHgprzgpr4g4Kav4Ka+4Kav4Ka84Kao4Ka/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4Kao4Ka+4Kau4Kas4Ka/4Ka54KeA4KaoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCmrOCmv+CmtuCmpiDgpqzgpr/gpqzgprDgpqMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Ka44KeN4KaV4KeN4Kaw4KeA4Kao4Ka24KafIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4Ka44KeN4KaV4KeN4Kaw4KeA4Kao4Ka24KafIOCmuOCmq+CmsuCmreCmvuCmrOCnhyDgpqjgp4fgppPgpq/gprzgpr4g4Ka54Kav4Ka84KeH4Kab4KeH4Ke3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCmuOCnjeCmleCnjeCmsOCngOCmqOCmtuCmnyDgpqjgp4fgppPgpq/gprzgpr4g4Kav4Ka+4Kav4Ka84Kao4Ka/4Ke3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCmpOCnjeCmsOCngeCmn+CmvyDgpqrgp43gprDgpqTgpr/gpqzgp4fgpqbgpqjgp4fgprAg4Kas4Ka/4Kas4Kaw4KajIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgppvgp4vgpp8g4Kao4Ka+4KauIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgp6ct4Kay4Ka+4KaH4Kao4KeH4KawIOCmuOCmvuCmsOCmuOCmguCmleCnjeCmt+Cnh+CmqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCmrOCmv+CmuOCnjeCmpOCmvuCmsOCmv+CmpCDgpqzgpr/gpqzgprDgpqMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IDE4OGRhNjcuLmE4Yzk1NTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkluZm9ybWVzIGRcJ2Vycm9yIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik5vIHNcJ2hhIHBvZ3V0IGxsZWdpciBlbCBmaXR4ZXIgZGUgbFwnaW5mb3JtZSBkXCdlcnJvcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJzZW5zZSBub20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWxscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJDYXB0dXJhIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzXCdoYSBmZXQgY29ycmVjdGFtZW50LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJObyBzXCdoYSBwb2d1dCBmZXIgbGEgY2FwdHVyYSBkZSBwYW50YWxsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWxscyBkZSBsXCdpbmZvcm1lIGRcJ2Vycm9ycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTm9tIGN1cnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlJlc3VtIGRcJ3VuYSBsw61uaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXNjcmlwY2nDsyBkZXRhbGxhZGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCmluZGV4IGZkYzgwMjMuLjE5MzUwMWUyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJacHLDoXZ5IG8gY2h5YsOhY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iU291Ym9yIGNoeWJvdsOpIHpwcsOhdnkgbmVsemUgbmHEjcOtc3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbsOhenZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlBvZHJvYm5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNuw61tZWsgb2JyYXpvdmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU27DrW1layBvYnJhem92a3kgYnlsIMO6c3DEm8WhbsSbIHBvxZnDrXplbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU27DrW1layBvYnJhem92a3kgc2UgbmVwb2RhxZlpbG8gcG/FmcOtZGl0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJQb2Ryb2Jub3N0aSB6cHLDoXZ5IG/CoGNoeWLEmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS3LDoXRrw70gbsOhemV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJTaHJudXTDrSBuYSBqZWRlbiDFmcOhZGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iUG9kcm9ibsO9IHBvcGlzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbAppbmRleCAwNTAyNjU1Li4zOTc1ODAwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJGZWpscmFwcG9ydGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZlamxyYXBwb3J0ZmlsZW4ga3VubmUgaWtrZSBsw6ZzZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJpa2tlIG5hdm5naXZldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJPcGx5c25pbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTa8Omcm1iaWxsZWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iRGVyIGJsZXYgdGFnZXQgZXQgc2vDpnJtYmlsbGVkZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iRGVyIGt1bm5lIGlra2UgdGFnZXMgZXQgc2vDpnJtYmlsbGVkZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRmVqbHJhcHBvcnRvcGx5c25pbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS29ydCBuYXZuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJTYW1tZW5mYXRuaW5nIHDDpSDDqW4gbGluamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbGplcmV0IGJlc2tyaXZlbHNlIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1kZS9zdHJpbmdzLnhtbAppbmRleCAxM2MxYzk2Li5iMDQ1MGRkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJGZWhsZXJiZXJpY2h0ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJGZWhsZXJiZXJpY2h0ZGF0ZWkga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IlVuYmVuYW5udCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTY3JlZW5zaG90IHd1cmRlIGF1Zmdlbm9tbWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTY3JlZW5zaG90IGtvbm50ZSBuaWNodCBhdWZnZW5vbW1lbiB3ZXJkZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFpbHMgZGVzIEZlaGxlcmJlcmljaHRzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLdXJ6bmFtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iWnVzYW1tZW5mYXNzdW5nIGluIGVpbmVyIFplaWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWlsbGllcnRlIEJlc2NocmVpYnVuZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKaW5kZXggYWEwM2JlYy4uZWM1ZjNhYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4izpHOvc6xz4bOv8+Bzq3PgiDPg8+GzrHOu868zqzPhM+Jzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4izpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOsc69zqzOs869z4nPg863IM+Ezr/PhSDOsc+Bz4fOtc6vzr/PhSDPhM63z4IgzrHOvc6xz4bOv8+BzqzPgiDPg8+GzrHOu868zqzPhM+Jzr0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLOsc69z47Ovc+FzrzOtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLOm861z4DPhM6/zrzOrc+BzrXOuc61z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4izqPPhM65zrPOvM65z4zPhM+Fz4DOvyDOv864z4zOvc63z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLOlyDOu86uz4jOtyDPhM6/z4Ugz4PPhM65zrPOvM65z4zPhM+Fz4DOv8+FIM6/zrjPjM69zrfPgiDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLOlM61zr0gzq7PhM6xzr0gzrTPhc69zrHPhM6uIM63IM67zq7PiM63IM+Ezr/PhSDPg8+EzrnOs868zrnPjM+Ez4XPgM6/z4Ugzr/OuM+Mzr3Ot8+CLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLOm861z4DPhM6/zrzOrc+BzrXOuc61z4IgzrHOvc6xz4bOv8+BzqzPgiDPg8+GzrHOu868zqzPhM+Jzr0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Is6lz4DOv866zr/Pgc65z4PPhM65zrrPjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4izqPPjc69zr/PiM63IM68zq/Osc+CIM+DzrXOuc+BzqzPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Is6Rzr3Osc67z4XPhM65zrrOriDPgM61z4HOuc6zz4HOsc+Gzq4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKaW5kZXggYTkyNDdkMi4uMjZhM2QzOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJCdWcgcmVwb3J0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJCdWcgcmVwb3J0IGZpbGUgY291bGQgbm90IGJlIHJlYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ1bm5hbWVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2NyZWVuc2hvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNjcmVlbnNob3QgdGFrZW4gc3VjY2Vzc2Z1bGx5LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTY3JlZW5zaG90IGNvdWxkIG5vdCBiZSB0YWtlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQnVnIHJlcG9ydCBkZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJTaG9ydCBuYW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLWxpbmUgc3VtbWFyeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFpbGVkIGRlc2NyaXB0aW9uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJHQi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCmluZGV4IGE5MjQ3ZDIuLjI2YTNkMzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iQnVnIHJlcG9ydHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iQnVnIHJlcG9ydCBmaWxlIGNvdWxkIG5vdCBiZSByZWFkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4idW5uYW1lZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTY3JlZW5zaG90IHRha2VuIHN1Y2Nlc3NmdWxseS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iU2NyZWVuc2hvdCBjb3VsZCBub3QgYmUgdGFrZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkJ1ZyByZXBvcnQgZGV0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iU2hvcnQgbmFtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS1saW5lIHN1bW1hcnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhaWxlZCBkZXNjcmlwdGlvbiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAppbmRleCBhOTI0N2QyLi4yNmEzZDM4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVuLXJJTi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkJ1ZyByZXBvcnRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkJ1ZyByZXBvcnQgZmlsZSBjb3VsZCBub3QgYmUgcmVhZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InVubmFtZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTY3JlZW5zaG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2NyZWVuc2hvdCB0YWtlbiBzdWNjZXNzZnVsbHkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNjcmVlbnNob3QgY291bGQgbm90IGJlIHRha2VuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJCdWcgcmVwb3J0IGRldGFpbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlNob3J0IG5hbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEtbGluZSBzdW1tYXJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWlsZWQgZGVzY3JpcHRpb24iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggYWIyZGQ2My4uN2Y3MGZlYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJJbmZvcm1lcyBkZSBlcnJvcmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik5vIHNlIHB1ZG8gbGVlciBlbCBhcmNoaXZvIGRlIGluZm9ybWUgZGUgZXJyb3JlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNpbiBub21icmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWxsZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyYSBkZSBwYW50YWxsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNlIHRvbcOzIGxhIGNhcHR1cmEgZGUgcGFudGFsbGEgY29ycmVjdGFtZW50ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTm8gc2UgcHVkbyB0b21hciBsYSBjYXB0dXJhIGRlIHBhbnRhbGxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGxlcyBkZWwgaW5mb3JtZSBkZSBlcnJvcmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb21icmUgY29ydG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlJlc3VtZW4gZGUgdW5hIGzDrW5lYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyaXBjacOzbiBjb21wbGV0YSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggZDMyZjAxMi4uZGYwODBkMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSW5mb3JtZXMgZGUgZXJyb3IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTm8gc2UgaGEgcG9kaWRvIGxlZXIgZWwgYXJjaGl2byBkZWwgaW5mb3JtZSBkZSBlcnJvcmVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2luIG5vbWJyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhbGxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJDYXB0dXJhIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iTGEgY2FwdHVyYSBkZSBwYW50YWxsYSBzZSBoYSByZWFsaXphZG8gY29ycmVjdGFtZW50ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTm8gc2UgcHVlZGUgcmVhbGl6YXIgbGEgY2FwdHVyYSBkZSBwYW50YWxsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWxsZXMgZGVsIGluZm9ybWUgZGUgZXJyb3JlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTm9tYnJlIGNvcnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXN1bWVuIGRlIDEgbMOtbmVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpcGNpw7NuIGNvbXBsZXRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCmluZGV4IDNlZGVmYTQuLjk0YjRiODkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZXQtckVFL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iVmVhYXJ1YW5kZWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iVmVhYXJ1YW5kZSBmYWlsaSBlaSDDtW5uZXN0dW51ZCBsdWdlZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuaW1ldGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iw5xrc2lrYXNqYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iRWtyYWFuaXBpbHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJFa3JhYW5pcGlsZGkgdGVnZW1pbmUgw7VubmVzdHVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJFa3JhYW5pcGlsdGkgZWkgc2FhbnVkIHRlaGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IlZlYWFydWFuZGUgw7xrc2lrYXNqYWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkzDvGhpa2UgbmltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS1yZWFsaW5lIGtva2t1dsO1dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLDnGtzaWthc2phbGlrIGtpcmplbGR1cyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAppbmRleCBjNTkyZjUwLi5jYWQ1NWZjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkFrYXRzZW4gdHhvc3RlbmFrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkV6aW4gaXphbiBkYSBpcmFrdXJyaSBha2F0c2VuIHR4b3N0ZW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iaXplbmdhYmVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlhlaGV0YXN1bmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlBhbnRhaWxhLWFyZ2F6a2lhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iQXRlcmEgZGEgcGFudGFpbGEtYXJnYXpraWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkV6aW4gaXphbiBkYSBhdGVyYSBwYW50YWlsYS1hcmdhemtpYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQWthdHNlbiB0eG9zdGVuYXJlbiB4ZWhldGFzdW5hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iSXplbiBsYWJ1cnJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJMZXJybyBiYWthcnJla28gbGFidXJwZW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iQXphbHBlbiB4ZWhhdHVhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA0MDlmZDUzLi5iNjE5ZjEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLar9iy2KfYsdi0INin2LTaqdin2YQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i2YHYp9uM2YQg2q/Ystin2LHYtCDYp9i02qnYp9mEINiu2YjYp9mG2K/ZhyDZhti02K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLYqNuM4oCM2YbYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Itis2LLYptuM2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLYudqp2LMg2LXZgdit2YfigIzZhtmF2KfbjNi0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i2LnaqdizINi12YHYrdmH4oCM2YbZhdin24zYtCDYqNinINmF2YjZgdmC24zYqiDar9ix2YHYqtmHINi02K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItmG2YXbjOKAjNiq2YjYp9mGINi52qnYsyDYtdmB2K3Zh+KAjNmG2YXYp9uM2LQg2q/YsdmB2KouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+Itis2LLYptuM2KfYqiDar9iy2KfYsdi0INin2LTaqdin2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItmG2KfZhSDZhdiu2YHZgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i2K7ZhNin2LXZhyDbjNqpINiu2LfbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Itis2LLYptuM2KfYqiDYr9mC24zZgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKaW5kZXggYmZhOTIwYS4uYTkwZmZiNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iVmlyaGVyYXBvcnRpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJWaXJoZXJhcG9ydHRpdGllZG9zdG9hIGVpIHZvaSBsdWtlYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuaW1ldMO2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJUaWV0b2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+Ikt1dmFrYWFwcGF1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+Ikt1dmFrYWFwcGF1cyB0YWxsZW5uZXR0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iS3V2YWthYXBwYXVrc2VuIHRhbGxlbnRhbWluZW4gZXDDpG9ubmlzdHVpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJWaXJoZXJhcG9ydGluIHRpZWRvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTHloeXQgbmltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iTHloeXQgdGlpdmlzdGVsbcOkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iWWtzaXR5aXNrb2h0YWluZW4ga3V2YXVzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCmluZGV4IDRkYzQ0ODIuLjUyYmU5OWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmFwcG9ydHMgZGUgYm9ndWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIGR1IHJhcHBvcnQgZGUgYm9ndWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJzYW5zIG5vbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEw6l0YWlscyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTYWlzaWUgZFwnw6ljcmFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iTGEgc2Fpc2llIGRcJ8OpY3JhbiBhIHLDqXVzc2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlVuZSBlcnJldXIgc1wnZXN0IHByb2R1aXRlIGxvcnMgZGUgbGEgc2Fpc2llIGRcJ8OpY3Jhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRMOpdGFpbHMgZHUgcmFwcG9ydCBkZSBib2d1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTm9tIGFicsOpZ8OpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSw6lzdW3DqSBkXCd1bmUgbGlnbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXNjcmlwdGlvbiBkw6l0YWlsbMOpZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKaW5kZXggYTNlNGY3ZC4uZTEwZTI4ZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmFwcG9ydHMgZFwnZXJyZXVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIGRlIHJhcHBvcnQgZGUgYnVnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNhbnMgbm9tIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkTDqXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmVzIGRcJ8OpY3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkxhIGNhcHR1cmUgZFwnw6ljcmFuIGEgYmllbiDDqXTDqSBlZmZlY3R1w6llLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJJbXBvc3NpYmxlIGRcJ2VmZmVjdHVlciB1bmUgY2FwdHVyZSBkXCfDqWNyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkTDqXRhaWxzIGR1IHJhcHBvcnQgZGUgYnVnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb20gY291cnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlLDqXN1bcOpIGRcJ3VuZSBsaWduZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyaXB0aW9uIGTDqXRhaWxsw6llIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCmluZGV4IDhiMjhjYWEuLjIwZjhjZGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSW5mb3JtZXMgZGUgZXJyb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTm9uIHNlIHB1aWRvIGxlciBvIGZpY2hlaXJvIGRlIGluZm9ybWUgZGUgZXJyb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJzZW4gbm9tZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhbGxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJDYXB0dXJhIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iQSBjYXB0dXJhIGRlIHBhbnRhbGxhIHJlYWxpem91c2UgY29ycmVjdGFtZW50ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTm9uIHNlIHB1aWRvIHJlYWxpemFyIGEgY2FwdHVyYSBkZSBwYW50YWxsYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWxsZXMgZG8gaW5mb3JtZSBkZSBlcnJvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iTm9tZSBhYnJldmlhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlJlc3VtbyBkZSAxIGxpw7FhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpY2nDs24gZGV0YWxsYWRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCmluZGV4IDkxYjEzNjIuLjk2N2QyNTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtZ3UtcklOL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Kqs4KqXIOCqsOCqv+CqquCri+CqsOCrjeCqn+CrjeCquCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgqqzgqpcg4Kqw4KuA4Kqq4KuL4Kqw4KuN4KqfIOCqq+CqvuCqh+CqsiDgqrXgqr7gqoLgqprgq4Ag4Kq24KqV4Kq+4KqHIOCqqOCqpeCrgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCqheCqqOCqvuCqruCqvuCqguCqleCqv+CqpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgqrXgqr/gqpfgqqTgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Kq44KuN4KqV4KuN4Kqw4KuA4Kqo4Kq24KuL4KqfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4Kq44KuN4KqV4KuN4Kqw4KuA4Kqo4Kq24KuL4KqfIOCquOCqq+Cqs+CqpOCqvuCqquCrguCqsOCrjeCqteCqlSDgqrLgq4fgqrXgqr7gqq/gq4suIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCquOCrjeCqleCrjeCqsOCrgOCqqOCqtuCri+CqnyDgqrLgqocg4Kq24KqV4Kq+4Kqv4KuLIOCqqOCqpeCrgC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4Kqs4KqXIOCqsOCqv+CqquCri+CqsOCrjeCqn+CqqOCrgCDgqrXgqr/gqpfgqqTgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuCqqOCqvuCqqOCrgeCqgiDgqqjgqr7gqq4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEt4Kqw4KuH4KqW4Kq+4Kqo4KuLIOCquOCqvuCqsOCqvuCqguCqtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCqteCqv+Cql+CqpOCqteCqvuCqsCDgqrXgqrDgq43gqqPgqqgiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IDU5NWVjN2YuLjcwZTRmMzggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4KSs4KSXIOCksOCkv+CkquCli+CksOCljeCknyDgpKvgpLzgpL7gpIfgpLIg4KSo4KS54KWA4KSCIOCkquCkouCkvOClgCDgpJzgpL4g4KS44KSV4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i4KSF4KSo4KS+4KSu4KS+4KSC4KSV4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCkteCkv+CkteCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKjgpLbgpYngpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKjgpLbgpYngpJ8g4KS44KSr4KSy4KSk4KS+4KSq4KWC4KSw4KWN4KS14KSVIOCksuCkv+Ckr+CkviDgpJfgpK/gpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpKjgpLngpYDgpIIg4KSy4KS/4KSv4KS+IOCknOCkviDgpLjgpJXgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSV4KWHIOCkteCkv+CkteCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4KS44KSC4KSV4KWN4KS34KS/4KSq4KWN4KSkIOCkqOCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS3gpKrgpILgpJXgpY3gpKTgpL8g4KSu4KWH4KSCIOCkuOCkvuCksOCkvuCkguCktiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCkteCkv+CkuOCljeCkpOClg+CkpCDgpLXgpLDgpY3gpKPgpKgiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCmluZGV4IDE5NTdiZGIuLmYzOGEyODEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+Ikl6dmouIG8gcHJvZy4gcG9ncmXFoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iSXp2amXFocSHZSBvIHByb2dyYW1za29qIHBvZ3JlxaFjaSBuaWplIHByb8SNaXRhbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbmF6aXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlBvamVkaW5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNuaW1rYSB6YXNsb25hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iWmFzbG9uIGplIHNuaW1samVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTbmltYW5qZSB6YXNsb25hIG5pamUgdXNwamVsby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iUG9qZWRpbm9zdGkgaXp2amXFocSHYSBvIHByb2dyYW1za29qIHBvZ3JlxaFjaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS3JhdGtvIGltZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2HFvmV0YWsgdSBqZWRub20gcmV0a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbGphbiBvcGlzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbAppbmRleCA3NGI0YWJhLi41NDRjMTE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJIaWJhamVsZW50w6lzZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iQSBoaWJhamVsZW50w6lzaSBmw6FqbHQgbmVtIHNpa2Vyw7xsdCBiZW9sdmFzbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuw6l2dGVsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iUsOpc3psZXRlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJLw6lwZXJuecWRa8OpcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNpa2Vyw7xsdCBlbGvDqXN6w610ZW5pIGEga8OpcGVybnnFkWvDqXBldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTmVtIHNpa2Vyw7xsdCBlbGvDqXN6w610ZW5pIGEga8OpcGVybnnFkWvDqXBldC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iSGliYWplbGVudMOpcyByw6lzemxldGVpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJSw7Z2aWQgbsOpdiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iRWd5c29yb3Mgw7Zzc3plZm9nbGFsw6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iUsOpc3psZXRlcyBsZcOtcsOhcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1oeS1yQU0vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAppbmRleCAzMTdjYjBiLi42MjU5OTRkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItWO1oDVq9W61aHVr9W21aXWgNWrINWw1aHVt9W+1aXVv9W+1bjWgtWp1bXVuNaC1bbVttWl1oAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i1YDVttWh1oDVodW+1bjWgCDVudWnINWv1aHWgNWk1aHVrCDVvtaA1avVutWh1a/VttWl1oDVqyDVptWl1a/VuNaC1bXWgdWrINaG1aHVtdWs1agiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLVodW21aHVttW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLVhNWh1bbWgNWh1bTVodW91bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItS31a/WgNWh1bbVqyDVutWh1b/Vr9Wl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLUt9Wv1oDVodW21asg1brVodW/1a/VpdaA1agg1bDVodW71bjVstW41oLVqdW11aHVtNWiINW91b/VodaB1b7VpdaBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLVidWw1aHVu9W41bLVvtWl1oEg1b3Vv9Wh1bbVodWsINWn1a/WgNWh1bbVqyDVutWh1b/Vr9Wl1oDVqDoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i1Y7WgNWr1brVodWv1asg1abVpdWv1bjWgtW11oHVqyDVtNWh1bbWgNWh1bTVodW91bbVpdaA1agiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItS/1oDVs9Wh1b8g1aHVttW41oLVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i1LHVtNaD1bjWg9Wh1aPVq9aAINW01aXVryDVv9W41bLVuNW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i1YTVodW21oDVodW01aHVvdW2INW21a/VodaA1aHVo9aA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCmluZGV4IDU3ZDRjNzMuLjc0N2ZlY2QgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkxhcG9yYW4gYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZpbGUgbGFwb3JhbiBidWcgdGlkYWsgZGFwYXQgZGliYWNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4idGFucGEgbmFtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iVGFuZ2thcGFuIGxheWFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iVGFuZ2thcGFuIGxheWFyIGJlcmhhc2lsIGRpYW1iaWwuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlRhbmdrYXBhbiBsYXlhciB0aWRhayBkYXBhdCBkaWFtYmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhaWwgbGFwb3JhbiBidWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5hbWEgcGVuZGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSaW5na2FzYW4gMSBiYXJpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2tyaXBzaSBkZXRhaWwiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXMtcklTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKaW5kZXggMzk2MDVkYi4uZDBkM2U2MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJWaWxsdXRpbGt5bm5pbmdhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJFa2tpIHZhciBow6ZndCBhw7AgbGVzYSDDunIgdmlsbHVza8O9cnNsdW5uaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IsOhbiBoZWl0aXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iTsOhbmFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNrasOhbXluZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlTDs2tzdCBhw7AgdGFrYSBza2rDoW15bmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkVra2kgdMOza3N0IGHDsCB0YWthIHNrasOhbXluZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iVXBwbMO9c2luZ2FyIHVtIHZpbGx1dGlsa3lubmluZ3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IlN0dXR0IGhlaXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJFaW5uYXIgbMOtbnUgc2FtYW50ZWt0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iw410YXJsZWcgbMO9c2luZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKaW5kZXggMTBiYTdkZC4uMDUxMWM1OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmFwcG9ydGkgc3VpIGJ1ZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJJbXBvc3NpYmlsZSBsZWdnZXJlIGlsIGZpbGUgcmVsYXRpdm8gYWxsYSBzZWduYWxhemlvbmUgZGkgYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ic2VuemEgbm9tZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXR0YWdsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJTY3JlZW5zaG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU2NyZWVuc2hvdCBhY3F1aXNpdG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkltcG9zc2liaWxlIGFjcXVpc2lyZSBsbyBzY3JlZW5zaG90LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXR0YWdsaSBkZWxsYSBzZWduYWxhemlvbmUgZGkgYnVnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOb21lIGJyZXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJTaW50ZXNpIHN1IHVuYSByaWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpemlvbmUgZGV0dGFnbGlhdGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCmluZGV4IDViMGNiMjYuLmI5YmNhZjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IteT15XXl9eV16og15HXkNeS15nXnSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLXnNeQINeg15nXqtefINeU15nXlCDXnNen16jXldeQINeQ16og16fXldeR16Ug15TXk9eV15cg16LXnCDXlNeR15DXkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Itec15zXkCDXqdedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Itek16jXmNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i16bXmdec15XXnSDXnteh15oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLXpteZ15zXldedINeU157XodeaINeR15XXpteiINeR15TXptec15fXlC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i15zXkCDXoNeZ16rXnyDXlNeZ15Qg15zXptec150g157XodeaLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLXpNeo15jXmSDXk9eV15cg16LXnCDXkdeQ15IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Iteb15nXoNeV15kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Iteh15nXm9eV150g15HXqdeV16jXlCDXkNeX16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLXqteZ15DXldeoINee16TXldeo15giPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCmluZGV4IGZkNGExNTAuLjA1Yjk1ZWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuODkOOCsOODrOODneODvOODiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLjg5DjgrDjg6zjg53jg7zjg4gg44OV44Kh44Kk44Or44KS6Kqt44G/5Y+W44KL44GT44Go44GM44Gn44GN44G+44Gb44KT44Gn44GX44GfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i5ZCN5YmN44Gq44GXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Iuips+e0sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLjgrnjgq/jg6rjg7zjg7Pjgrfjg6fjg4Pjg4jjgpLmkq7lvbHjgZfjgb7jgZfjgZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i44K544Kv44Oq44O844Oz44K344On44OD44OI44KS5pKu5b2x44Gn44GN44G+44Gb44KT44Gn44GX44Gf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuODkOOCsOODrOODneODvOODiOOBruips+e0sCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i55yB55Wl5ZCNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxIOihjOOBruamguimgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Iuips+e0sOiqrOaYjiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCA4MDJmOTQ0Li4yY2ZkODBhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuGDqOGDlOGDquGDk+GDneGDm+GDlOGDkeGDmOGDoSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5Thg5Hhg5giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4YOu4YOQ4YOg4YOV4YOU4YOW4YOU4YOR4YOY4YOhIOGDqOGDlOGDoeGDkOGDruGDlOGDkSDhg5Dhg5zhg5Lhg5Dhg6Dhg5jhg6jhg5jhg6Eg4YOs4YOQ4YOZ4YOY4YOX4YOu4YOV4YOQIOGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLhg6Phg6Hhg5Dhg67hg5Thg5rhg50iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4YOT4YOU4YOi4YOQ4YOa4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Dhg5zhg5Dhg5Hhg5Thg63hg5Phg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOQ4YOc4YOQ4YOR4YOU4YOt4YOT4YOYIOGDkuGDkOGDk+GDkOGDpuGDlOGDkeGDo+GDmuGDmOGDkCDhg6zhg5Dhg6Dhg5vhg5Dhg6Lhg5Thg5Hhg5jhg5cuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuGDlOGDmeGDoOGDkOGDnOGDmOGDoSDhg5Dhg5zhg5Dhg5Hhg5Thg63hg5Phg5jhg6Eg4YOS4YOQ4YOT4YOQ4YOm4YOU4YOR4YOQIOGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuGDruGDkOGDoOGDleGDlOGDluGDmOGDoSDhg6jhg5Thg6Hhg5Dhg67hg5Thg5Eg4YOQ4YOc4YOS4YOQ4YOg4YOY4YOo4YOY4YOhIOGDk+GDlOGDouGDkOGDmuGDlOGDkeGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4YOb4YOd4YOZ4YOa4YOUIOGDoeGDkOGDruGDlOGDmuGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS3hg67hg5Dhg5bhg5jhg5Dhg5zhg5gg4YOg4YOU4YOW4YOY4YOj4YOb4YOUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4YOT4YOU4YOi4YOQ4YOa4YOj4YOg4YOYIOGDkOGDpuGDrOGDlOGDoOGDkCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ray1yS1ovc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAppbmRleCAyODI1MzQyLi4yODI5YjliIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItKa0LDRgtC1INGC0YPRgNCw0LvRiyDQsdCw0Y/QvdC00LDQvNCw0LvQsNGAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItKa0LDRgtC1INGC0YPRgNCw0LvRiyDQtdGB0LXQvyDRhNCw0LnQu9GL0L0g0L7Sm9GDINC80q/QvNC60ZbQvSDQsdC+0LvQvNCw0LTRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCw0YLQsNGD0YHRi9C3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+ItCc05nQu9GW0LzQtdGC0YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCh0LrRgNC40L3RiNC+0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLQodC60YDQuNC90YjQvtGCINGB05nRgtGC0ZYg0YLSr9GB0ZbRgNGW0LvQtNGWLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQodC60YDQuNC90YjQvtGCINGC0q/RgdGW0YDRgyDQvNKv0LzQutGW0L0g0LHQvtC70LzQsNC00YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItKa0LDRgtC1INGC0YPRgNCw0LvRiyDQtdGB0LXQv9GC0ZbSoyDQvNOZ0LvRltC80LXRgtGC0LXRgNGWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLSmtGL0YHSm9CwINCw0YLRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMSDQttC+0LvQtNGL0psg0LbQuNGL0L3RgtGL0psg0LzTmdC70ZbQvNC10YLRgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLQldCz0LbQtdC5LdGC0LXQs9C20LXQudC70ZYg0YHQuNC/0LDRgtGC0LDQvNCwIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWttLXJLSC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCmluZGV4IDk2NmNlYzAuLjM1NzM1ODggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Z6a4Z624Z6Z4Z6A4Z624Z6a4Z6O4Z+N4Z6W4Z644Z6A4Z+G4Z6g4Z674Z6fIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuGemOGet+Gek+GeouGetuGeheGeouGetuGek+Ger+GegOGen+GetuGemuGemuGelOGetuGemeGegOGetuGejuGfjeGegOGfhuGeoOGeu+Gen+GelOGetuGek+GekeGfgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuGeguGfkuGemOGetuGek+GeiOGfkuGemOGfhOGfhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLhnpbhn5Dhno/hn4zhnpjhnrbhnpPhnpvhnpjhn5LhnqLhnrfhno8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Z6a4Z684Z6U4Z6Q4Z6P4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4Z6U4Z624Z6T4Z6Q4Z6P4Z6a4Z684Z6U4Z6Q4Z6P4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4Z6K4Z+E4Z6Z4Z6H4Z+E4Z6C4Z6H4Z+Q4Z6ZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuGemOGet+Gek+GeouGetuGeheGekOGej+GemuGevOGelOGekOGej+GeouGfgeGegOGfkuGemuGehOGfi+GelOGetuGek+GekeGfgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLhnpbhn5Dhno/hn4zhnpjhnrbhnpPhnpvhnpjhn5LhnqLhnrfhno/hnpbhnrjhnprhnpThnrbhnpnhnoDhnrbhnprhno7hn43hnoDhn4bhnqDhnrvhnp8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuGeiOGfkuGemOGfhOGfh+KAi+GegeGfkuGem+GeuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i4Z6A4Z624Z6a4Z6f4Z6E4Z+S4Z6B4Z+B4Z6U4Z6Y4Z694Z6Z4Z6H4Z694Z6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4Z6A4Z624Z6a4Z6W4Z634Z6W4Z6O4Z+M4Z6T4Z624Z6b4Z6Y4Z+S4Z6i4Z634Z6PIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtuLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCmluZGV4IDZkYTUzMTkuLjcwNzEyNjQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4LKm4LOL4LK3IOCyteCysOCypuCyv+Cyl+Cys+CzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgsqzgspfgs43igIwg4LK14LKw4LKm4LK/IOCyq+CziOCysuCzjeKAjOKAjCDgsoXgsqjgs43gsqjgs4Eg4LKT4LKm4LKy4LOBIOCyuOCyvuCyp+CzjeCyr+CyteCyvuCyl+CzgeCypOCzjeCypOCyv+CysuCzjeCysiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCyueCzhuCyuOCysOCyv+CyuOCypuCyv+CysOCzgeCyteCzgeCypuCzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgsrXgsr/gsrXgsrDgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4LK44LON4LKV4LON4LKw4LOA4LKo4LON4oCM4LK24LK+4LKf4LONIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LK44LON4LKV4LON4LKw4LOA4LKo4LON4oCM4LK24LK+4LKf4LON4oCMIOCyr+CytuCyuOCzjeCyteCyv+Cyr+CyvuCyl+CyvyDgsqTgs4bgspfgs4bgsqbgs4HgspXgs4rgsrPgs43gsrPgsrLgsr7gspfgsr/gsqbgs4YuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCyuOCzjeCyleCzjeCysOCzgOCyqOCzjeKAjOCytuCyvuCyn+CzjeKAjCDgsqTgs4bgspfgs4bgsqbgs4HgspXgs4rgsrPgs43gsrPgsrLgs4Eg4LK44LK+4LKn4LON4LKv4LK14LK+4LKX4LOB4LK14LOB4LKm4LK/4LKy4LON4LKyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgsqzgspfgs40g4LK14LKw4LKm4LK/IOCyteCyv+CyteCysOCyl+Cys+CzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4LKa4LK/4LKV4LON4LKVIOCyueCzhuCyuOCysOCzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMS3gsrjgsr7gsrLgsr/gsqgg4LK44LK+4LKw4LK+4LKC4LK2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4LK14LK/4LK14LKw4LK14LK+4LKmIOCyteCyv+CyteCysOCyo+CzhiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKaW5kZXggNWU5NmU2ZC4uNGUzYzNmNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i67KE6re4IOyLoOqzoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLrsoTqt7gg7Iug6rOgIO2MjOydvOydhCDsnb3snYQg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLsnbTrpoQg7JeG7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuyEuOu2gOygleuztCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLsiqTtgazrprDsg7ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLsiqTtgazrprDsg7fsnYQg7LCN7JeI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLsiqTtgazrprDsg7fsnYQg7LCN7J2EIOyImCDsl4bsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuuyhOq3uCDsi6Dqs6Ag7IS467aA7KCV67O0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLsp6fsnYAg7J2066aEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLtlZwg7KSEIOyalOyVvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuyekOyEuO2VnCDshKTrqoUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKaW5kZXggYWFmZWIyNC4uMDUxYmUzOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1reS1yS0cvc3RyaW5ncy54bWwKQEAgLTE3LDcgKzE3LDcgQEAKIDxyZXNvdXJjZXMgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgogICAgIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KICAgICA8c3RyaW5nIG5hbWU9ImFwcF9sYWJlbCIgbXNnaWQ9IjM3MDE4NDYwMTcwNDk1NDA5MTAiPiLQmtC+0LzQsNC90LTQsNC70YvQuiDQutCw0LHRi9C6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlIiBtc2dpZD0iNzQwOTkxNzMzODIyMzM4NjYzNyI+ItCc0q/Rh9Kv0LvSr9GI0YLSr9C60YLTqdGAINGC0YPRg9GA0LDQu9GD0YMg0LHQuNC70LTQuNGA0q/SryDTqdC90LTSr9GA0q/Qu9Kv0q/QtNOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlIiBtc2dpZD0iNzQwOTkxNzMzODIyMzM4NjYzNyI+ItCc0q/Rh9Kv0LvSr9GI0YLSr9C60YLTqdGAINGC0YPRg9GA0LDQu9GD0YMg0LHQuNC70LTQuNGA0q/SryDRgtKv0LfSr9C70q/Sr9C006kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i0JrQsNGC0LAg0YLRg9GD0YDQsNC70YPRgyDQsdC40LvQtNC40YDSr9KvINGC0q/Qt9Kv0LvQtNKvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIHByb2R1Y3Q9IndhdGNoIiBtc2dpZD0iODM4OTE3MjI0ODQzMzU5NzY4MyI+ItCa0LDRgtCwINC206nQvdKv0L3QtNOpINC60LDQsdCw0YAg0LzQtdC90LXQvSDQsdOp0LvSr9GI0q/SryDSr9GH0q/QvSDRgdC+0LvQs9C+INGB0LXRgNC/0LjQvyDQutC+0Y7So9GD0LciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiLQmtCw0YLQsCDRgtGD0YPRgNCw0LvRg9GDINCx0LjQu9C00LjRgNKv0q/So9Kv0LfQtNKvINC206nQvdOp0YLSr9GIINKv0YfSr9C9LCDRgtC40LnQuNKj0LjQtyI8L3N0cmluZz4KQEAgLTI1LDUgKzI1LDEzIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfY29uZmlybV9yZXBlYXQiIG1zZ2lkPSI0OTI2ODQyNDYwNjg4NjQ1MDU4Ij4i0JHRg9C7INCx0LjQu9C00LjRgNKv0q8g0LrQuNC50LjQvSDQutOp0YDRgdOp0YLSr9C70YHSr9C9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i0JzSr9GH0q/Qu9Kv0YjRgtKv0LrRgtOp0YDQtNKvINC60LDQsdCw0YDQu9C+0L7Qu9C+0YAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0JzSr9GH0q/Qu9Kv0YjRgtKv0Log0YLRg9GD0YDQsNC70YPRgyDQutCw0LHQsNGA0LvQsNCz0LDQvSDRhNCw0LnQuyDQvtC60YPQu9Cx0LDQuSDQutC+0LnQtNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i0LDRgtGLINC20L7QuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCw0YLQsNC70YvRiNGLINC20L7QuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQp9C+0L4t0LbQsNC50YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i0KHQutGA0LjQvdGI0L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCh0LrRgNC40L3RiNC+0YIg0LjQudCz0LjQu9C40LrRgtKv0q8g0YLQsNGA0YLRi9C70LTRiy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i0KHQutGA0LjQvdGI0L7RgiDRgtCw0YDRgtGL0LvQsdCw0Lkg0LrQvtC50LTRgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0JzSr9GH0q/Qu9Kv0YjRgtKv0LrRgtOp0YAg0LbTqdC90q/QvdC006kg0LrQsNCx0LDRgNC00YvQvSDRh9C+0L4t0LbQsNC50YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YvRgdC60LAg0LDRgtCw0LvRi9GI0YsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEg0YHQsNC/0YLRi9C6INC60L7RgNGD0YLRg9C90LTRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCa0LXQvdC10L3QuNGA0Y3RjdC6INC80LDQsNC70YvQvNCw0YIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKaW5kZXggMDM0NjY4OC4uYTA0YTM1NTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Lql4Lqy4LqN4oCL4LqH4Lqy4LqZ4oCL4Lqa4Lqx4LqZ4oCL4Lqr4LqyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC6muC7jeC7iOC6quC6suC6oeC6suC6lOC6reC7iOC6suC6meC7hOC6n+C6peC7jOC6peC6suC6jeC6h+C6suC6meC6guC7jeC7ieC6nOC6tOC6lOC6nuC6suC6lOC7hOC6lOC7iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC6muC7jeC7iOC6oeC6teC6iuC6t+C7iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLguqXgurLguo3guqXgurDguq3gur3gupQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LqW4LuI4Lqy4LqN4Lqe4Lqy4Lqa4Luc4LuJ4Lqy4LqI4LuN4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLguprgu43gu4jguqrgurLguqHgurLgupTgupbgu4jgurLguo3gup7gurLguprgu5zgu4ngurLguojgu43gu4TgupTgu4kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuC6peC6suC6jeKAi+C6peC6sOKAi+C6reC6veC6lOKAi+C6geC6suC6meC6peC6suC6jeC6h+C6suC6meC6muC6seC6meC6q+C6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4LqK4Lq34LuI4Lqq4Lqx4LuJ4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLguqrgurDguqvgurzgurjgupogMSDgu4HgupbguqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLguoTgurPguq3gurDgupfgurTguprgurLguo3gu4HguprguprguqXgurDguq3gur3gupQiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IDg0MDY2YzAuLjhkOGQzMWUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJpa3TFsyBhdGFza2FpdG9zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Ik5lcGF2eWtvIHN1a3VydGkgcHJhbmXFoWltbyBhcGllIHJpa3TEhSBmYWlsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImJlIHBhdmFkaW5pbW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iSW5mb3JtYWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iRWtyYW5vIGtvcGlqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkVrcmFubyBrb3BpamEgc8SXa21pbmdhaSBwYWRhcnl0YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTmVwYXZ5a28gcGFkYXJ5dGkgZWtyYW5vIGtvcGlqb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IknFoXNhbWkgcHJhbmXFoWltbyBhcGllIHJpa3TEhSBpbmZvcm1hY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iVHJ1bXBhc2lzIHBhdmFkaW5pbWFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxIGVpbHV0xJdzIHN1dmVzdGluxJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJJxaFzYW11cyBhcHJhxaFhcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKaW5kZXggOTVkMTY4Yy4uZGJhMWFkMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iS8S8xatkdSB6acWGb2p1bWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTmV2YXLEk2phIG5vbGFzxKt0IGvEvMWrZGFzIHDEgXJza2F0YSBmYWlsdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbm9zYXVrdW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaXrEk3RhIGluZm9ybcSBY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJFa3LEgW51esWGxJNtdW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iRWtyxIFudXrFhsSTbXVtcyBpciB2ZWlrdHMgc2VrbcSrZ2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+Ik5ldmFyxJNqYSB2ZWlrdCBla3LEgW51esWGxJNtdW11LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJLxLzFq2RhcyBwxIFyc2thdGEgaW5mb3JtxIFjaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJTYcSrc2luxIF0cyBub3NhdWt1bXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IktvcHNhdmlsa3VtcyAxwqByaW5kacWGxIEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJEZXRhbGl6xJN0cyBhcHJha3N0cyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCAwZjNlZDVhLi42ZTIzYWQ4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCY0LfQstC10YjRgtCw0Lgg0LfQsCDQs9GA0LXRiNC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i0JTQsNGC0L7RgtC10LrQsNGC0LAg0YHQviDQuNC30LLQtdGI0YLQsNGYINC30LAg0LPRgNC10YjQutCwINC90LUg0LzQvtC20LXRiNC1INC00LAg0YHQtSDQv9GA0L7Rh9C40YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItC90LXQuNC80LXQvdGD0LLQsNC90LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i0JTQtdGC0LDQu9C4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCh0LvQuNC60LAg0L7QtCDQtdC60YDQsNC90L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+ItCj0YHQv9C10YjQvdC+INC1INC90LDQv9GA0LDQstC10L3QsCDRgdC70LjQutCwINC+0LQg0LXQutGA0LDQvdC+0YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC90LDQv9GA0LDQstC4INGB0LvQuNC60LAg0L7QtCDQtdC60YDQsNC90L7Rgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i0JTQtdGC0LDQu9C4INC90LAg0LjQt9Cy0LXRiNGC0LDRmNC+0YIg0LfQsCDQs9GA0LXRiNC60LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItCa0YDQsNGC0LrQviDQuNC80LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCg0LXQt9C40LzQtSDQstC+IDEg0YDQtdC0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i0JTQtdGC0LDQu9C10L0g0L7Qv9C40YEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKaW5kZXggMjkwYzEwYi4uNzNhNGZmZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbC1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgtKzgtJfgtY0g4LSx4LS/4LSq4LWN4LSq4LWL4LW84LSf4LWN4LSf4LWB4LSV4LW+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuC0rOC0l+C1jSDgtLHgtL/gtKrgtY3gtKrgtYvgtbzgtJ/gtY3gtJ/gtY0g4LSr4LSv4LW9IOC0teC0vuC0r+C0v+C0leC1jeC0leC0vuC0qOC0vuC0r+C0v+C0suC1jeC0siI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC0quC1h+C0sOC0v+C0suC1jeC0suC0vuC0pOC1jeC0pOC0teC1vCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgtLXgtL/gtLbgtKbgtL7gtILgtLbgtJngtY3gtJngtb4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4LS44LWN4oCM4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4LS44LWN4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIOC0juC0n+C1geC0pOC1jeC0pOC1gS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i4LS44LWN4LSV4LWN4LSw4LWA4LW74LS34LWL4LSf4LWN4LSf4LWNIOC0juC0n+C1geC0leC1jeC0leC0vuC1uyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtL/gtLLgtY3gtLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuC0rOC0l+C1jSDgtLHgtL/gtKrgtY3gtKrgtYvgtbzgtJ/gtY3gtJ/gtY0g4LS14LS/4LS24LSm4LS+4LSC4LS24LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgtLngtY3gtLDgtLjgtY3gtLUg4LSo4LS+4LSu4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgtJLgtLDgtYEg4LS14LSw4LS/IOC0uOC0guC0l+C1jeC0sOC0ueC0giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuC0teC0v+C0tuC0puC0ruC0vuC0ryDgtLXgtL/gtLXgtLDgtKPgtIIiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggOGY2YTJiMC4uMWY0YmU0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLQk9GN0LzRgtC70LjQudC9INGC0YPRhdCw0Lkg0YLQsNC50LvQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCQ0LvQtNCw0LDQvdGLINGC0LDQudC70LDQvdCz0LjQudC9INGE0LDQudC70YvQsyDRg9C90YjQuNC2INGH0LDQtNCw0YXQs9Kv0Lkg0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItC90Y3RgCDQsdCw0LnRhdCz0q/QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQlNGN0LvQs9GN0YDRjdC90LPSr9C5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+ItCU0Y3Qu9Cz0Y3RhtC40LnQvSDQt9GD0YDQsNCzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i0JTRjdC70LPRjdGG0LjQudC9INC30YPRgNCz0LjQudCzINCw0LzQttC40LvRgtGC0LDQuSDQsNCy0LvQsNCwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQlNGN0LvQs9GN0YbQuNC50L0g0LfRg9GA0LDQsyDQsNCy0LDRhSDQsdC+0LvQvtC80LbQs9Kv0LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCQ0LvQtNCw0LDQvdGLINC00Y3Qu9Cz0Y3RgNGN0L3Qs9Kv0Lkg0YLQsNC50LvQsNC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLQkdC+0LPQuNC90L4g0L3RjdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLdGAINGI0YPQs9Cw0LzRi9C9INGF0YPRgNCw0LDQvdCz0YPQuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCU0Y3Qu9Cz0Y3RgNGN0L3Qs9Kv0Lkg0YLQsNC50LvQsdCw0YAiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXItcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKaW5kZXggNDBkN2E5Yy4uNmIwNmNmNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgpKbgpYvgpLcg4KSF4KS54KS14KS+4KSyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCkpuCli+CktyDgpIXgpLngpLXgpL7gpLIg4KSr4KS+4KSI4KSyIOCkteCkvuCkmuCko+ClhyDgpLbgpJXgpY3gpK8g4KSd4KS+4KSy4KWHIOCkqOCkvuCkueClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCkheCkqOCkvuCkruCkv+CkpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgpKTgpKrgpLbgpYDgpLIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS24KWJ4KSfIOCkr+CktuCkuOCljeCkteClgOCkquCko+ClhyDgpJjgpYfgpKTgpLLgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IuCkuOCljeCkleCljeCksOClgOCkqOCktuClieCknyDgpJjgpYfgpKPgpYcg4KS24KSV4KWN4KSvIOCkneCkvuCksuClhyDgpKjgpL7gpLngpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCkpuCli+CktyDgpIXgpLngpLXgpL7gpLIg4KSk4KSq4KS24KWA4KSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgpLLgpJjgpYEg4KSo4KS+4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeCkk+Cks+ClgOCkmuCkviDgpLjgpL7gpLDgpL7gpILgpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgpKTgpKrgpLbgpYDgpLLgpLXgpL7gpLAg4KS14KSw4KWN4KSj4KSoIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IDQ0OTFhZGQuLmUyMmY4ODAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0xNyw3ICsxNyw3IEBACiA8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CiAgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSIzNzAxODQ2MDE3MDQ5NTQwOTEwIj4iU2hlbGwiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUiIG1zZ2lkPSI3NDA5OTE3MzM4MjIzMzg2NjM3Ij4iTGFwb3JhbiBwZXBpamF0IHNlZGFuZyBkaWphbmFrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUiIG1zZ2lkPSI3NDA5OTE3MzM4MjIzMzg2NjM3Ij4iTGFwb3JhbiBwZXBpamF0IHNlZGFuZyBkaWphbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iTGFwb3JhbiBwZXBpamF0IHRlbGFoIGRpdGFuZ2thcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBwcm9kdWN0PSJ3YXRjaCIgbXNnaWQ9IjgzODkxNzIyNDg0MzM1OTc2ODMiPiJMZXJldCBrZSBraXJpIHVudHVrIGJlcmtvbmdzaSBsYXBvcmFuIHBlcGlqYXQgYW5kYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9maW5pc2hlZF90ZXh0IiBwcm9kdWN0PSJkZWZhdWx0IiBtc2dpZD0iMzU1OTkwNDc0Njg1OTQwMDczMiI+IlNlbnR1aCB1bnR1ayBiZXJrb25nc2kgbGFwb3JhbiBwZXBpamF0IGFuZGEiPC9zdHJpbmc+CkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iTGFwb3JhbiBwZXBpamF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZhaWwgbGFwb3JhbiBwZXBpamF0IHRpZGFrIGRhcGF0IGRpYmFjYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InRpZGFrIGJlcm5hbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iQnV0aXJhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJUYW5na2FwYW4gc2tyaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJUYW5na2FwYW4gc2tyaW4gYmVyamF5YSBkaWFtYmlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJUYW5na2FwYW4gc2tyaW4gdGlkYWsgZGFwYXQgZGlhbWJpbC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iQnV0aXJhbiBsYXBvcmFuIHBlcGlqYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5hbWEgcGVuZGVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSaW5na2FzYW4gMSBiYXJpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IlBlcmloYWxhbiB0ZXJwZXJpbmNpIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW15LXJNTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCmluZGV4IDc3Y2E1YmYuLjcyN2NkYzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4YCB4YC74YCt4YCv4YC34YCa4YC94YCE4YC64YC44YCZ4YC+4YCvIOGAoeGAheGAruGAm+GAhOGAuuGAgeGAtuGAheGArOGAmeGAu+GArOGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLhgIHhgLvhgL3hgJDhgLrhgJrhgL3hgIThgLrhgLjhgIHhgLvhgIDhgLog4YCh4YCF4YCu4YCb4YCE4YC64YCB4YC24YCF4YCs4YCA4YCt4YCvIOGAluGAkOGAuuGBjeGAmeGAm+GAleGAqyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuGAoeGAmeGAiuGAuuGAmeGAsuGAtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLhgKHhgJ7hgLHhgLjhgIXhgK3hgJDhgLrhgJnhgLvhgKzhgLgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4YCZ4YC74YCA4YC64YCU4YC+4YCs4YCV4YC84YCE4YC6IOGAnOGAu+GAvuGAleGAuuGAkOGAheGAuuGAleGAvOGAgOGAuuGAleGAr+GAtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuGAmeGAu+GAgOGAuuGAlOGAvuGArOGAleGAvOGAhOGAuiDhgJzhgLvhgL7hgJXhgLrhgJDhgIXhgLrhgJXhgLzhgIDhgLrhgJXhgK/hgLbhgIDhgK3hgK8g4YCh4YCx4YCs4YCE4YC64YCZ4YC84YCE4YC64YCF4YC94YCsIOGAm+GAreGAr+GAgOGAuuGAleGAvOGAruGAuOGAleGAvOGAruGBiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCc4YC74YC+4YCV4YC64YCQ4YCF4YC64YCV4YC84YCA4YC64YCV4YCv4YC2IOGAmeGAm+GAreGAr+GAgOGAuuGAlOGAreGAr+GAhOGAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLhgIHhgLvhgL3hgJDhgLrhgJrhgL3hgIThgLrhgLjhgIHhgLvhgIDhgLrhgKHhgIXhgK7hgJvhgIThgLrhgIHhgLbhgIXhgKwg4YCh4YCe4YCx4YC44YCF4YCt4YCQ4YC64YCZ4YC74YCs4YC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLhgKHhgJnhgIrhgLrhgKHhgJDhgK3hgK/hgIDhgLHhgKzhgIDhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IuGAnOGAreGAr+GAhOGAuuGAuCDhgYEg4YCc4YCt4YCv4YCE4YC64YC44YCh4YCA4YC74YCJ4YC64YC44YCB4YC74YCv4YCV4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4YCh4YCe4YCx4YC44YCF4YCt4YCQ4YC6IOGAluGAseGArOGAuuGAleGAvOGAgeGAu+GAgOGAuiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKaW5kZXggMTRhODczYy4uYzc3MDJlZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRmVpbHJhcHBvcnRlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJGZWlscmFwcG9ydGZpbGVuIGt1bm5lIGlra2UgbGVzZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJ1dGVuIG5hdm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWxqZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iU2tqZXJtZHVtcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNramVybWR1bXBlbiBlciB0YXR0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJTa2plcm1kdW1wZW4ga3VubmUgaWtrZSB0YXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFsamVyIG9tIGZlaWxyYXBwb3J0ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkthbGxlbmF2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2FtbWVuZHJhZyBww6Ugw6luIGxpbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWxqZXJ0IGJlc2tyaXZlbHNlIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5lLXJOUC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCmluZGV4IDFkZWNiOTguLjczMmYzOTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0yNSw1ICsyNSwxMyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2NvbmZpcm1fcmVwZWF0IiBtc2dpZD0iNDkyNjg0MjQ2MDY4ODY0NTA1OCI+IuCkr+CliyDgpLjgpKjgpY3gpKbgpYfgpLYg4KSF4KSw4KWN4KSV4KWLIOCkquCkn+CklSDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KS54KSw4KWCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCkrOCklyDgpLDgpL/gpKrgpYvgpLDgpY3gpJ8g4KSr4KS+4KSH4KSyIOCkquCkouCljeCkqCDgpLjgpJXgpL/gpI/gpKgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiIo4KSs4KWH4KSo4KS+4KSu4KWAKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IijgpKjgpL7gpK7gpLXgpL/gpLngpYDgpKgpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IuCkteCkv+CkteCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLbgpJ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLbgpJ8g4KS44KSr4KSy4KSk4KS+4KSq4KWC4KSw4KWN4KS14KSVIOCksuCkv+Ckh+Ckr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpLbgpJ8g4KSy4KS/4KSoIOCkuOCkleCkv+Ckj+CkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgpKzgpJcg4KSw4KS/4KSq4KWL4KSw4KWN4KSf4KSV4KWLIOCkteCkv+CkteCksOCkoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4KSb4KWL4KSf4KWLIOCkqOCkvuCkriI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i4KWnIOCksuCkvuCkh+CkqOCkleCliyDgpLjgpL7gpLDgpL7gpILgpLYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgpLXgpL/gpLjgpY3gpKTgpYPgpKQg4KS14KS/4KS14KSw4KSjIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAppbmRleCA5YmZjZTk0Li4wMzc4Y2E0YSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRm91dGVucmFwcG9ydGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkJlc3RhbmQgbWV0IGJ1Z3JhcHBvcnQga2FuIG5pZXQgd29yZGVuIGdlbGV6ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJuYWFtbG9vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJEZXRhaWxzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJTY3JlZW5zaG90IGlzIGdlbWFha3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNjcmVlbnNob3Qga2FuIG5pZXQgd29yZGVuIGdlbWFha3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkRldGFpbHMgdmFuIGJ1Z3JhcHBvcnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IktvcnRlIG5hYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IlNhbWVudmF0dGluZyB2YW4gw6nDqW4gcmVnZWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJHZWRldGFpbGxlZXJkZSBiZXNjaHJpanZpbmciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKaW5kZXggY2Y2ZGYxNy4uNzIwYmRlMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgqKzgqJcg4Kiw4Ki/4Kiq4KmL4Kiw4Kif4Ki+4KiCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCorOColyDgqLDgqL/gqKrgqYvgqLDgqJ8g4Kir4Ki84Ki+4KiI4KiyIOCoquCpnOCpjeCoueCpgCDgqKjgqLngqYDgqIIg4Kic4Ki+IOCouOColeCpgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCorOCov+CoqOCovuCogi3gqKjgqL7gqK4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4Ki14KmH4Kiw4Ki14KmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuCouOColeCpjeCosOCpgOCoqOCouOCovOCovuConyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCouOColeCpjeCosOCpgOCoqOCouOCovOCovuConyDgqLjgqKvgqLLgqKTgqL7gqKrgqYLgqLDgqLXgqJUg4Kiy4Ki/4KiGIOCol+Cov+CohuClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgqLjgqJXgqY3gqLDgqYDgqKjgqLjgqLzgqL7gqJ8g4Kio4Ki54KmA4KiCIOCosuCov+CohiDgqJzgqL4g4Ki44KiV4Ki/4KiG4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCorOCpseColyDgqLDgqL/gqKrgqYvgqLDgqJ8g4Ki14KmH4Kiw4Ki14KmHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgqJvgqYvgqJ/gqL4g4Kio4Ki+4KiuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxLeCosuCovuCoiOCoqCDgqLjgqL7gqLDgqL7gqILgqLjgqLwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLgqLXgqL/gqLjgqKXgqL7gqLAg4Ki44Ki54Ki/4KikIOCoteCosOCoo+CoqCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKaW5kZXggMGM4YTZiNC4uZDY3MTVhNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmFwb3J0eSBvIGLFgsSZZGFjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJOaWUgbW/FvG5hIG9kY3p5dGHEhyByYXBvcnR1IG8gYsWCxJlkemllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iYmV6IG5hend5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlN6Y3plZ8OzxYJ5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlpyenV0IGVrcmFudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+Ilpyb2Jpb25vIHpyenV0IGVrcmFudS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTmllIHVkYcWCbyBzacSZIHpyb2JpxIcgenJ6dXR1IGVrcmFudS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iU3pjemVnw7PFgnkgemfFgm9zemVuaWEgYsWCxJlkdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iS3LDs3RrYSBuYXp3YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iSmVkbm93aWVyc3pvd2UgcG9kc3Vtb3dhbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iU3pjemVnw7PFgm93eSBvcGlzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCmluZGV4IGIxOTRlY2MuLmZiMTZkZDggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQtckJSL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmVsYXTDs3Jpb3MgZGUgYnVncyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gYXJxdWl2byBkZSByZWxhdMOzcmlvIGRlIGJ1ZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmFzIGRlIHRlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIHRlbGEgY29uY2x1w61kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTsOjbyBmb2kgcG9zc8OtdmVsIGZhemVyIGEgY2FwdHVyYSBkZSB0ZWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGhlcyBkbyByZWxhdMOzcmlvIGRvIGJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iQXBlbGlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmVzdW1vIGRlIHVtYSBsaW5oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyacOnw6NvIGRldGFsaGFkYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCA0MTdjNDQ0Li4wN2QzMTllIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMTcsNyArMTcsNyBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+IlNoZWxsIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlIiBtc2dpZD0iNzQwOTkxNzMzODIyMzM4NjYzNyI+Ik8gcmVsYXTDs3JpbyBkZSBlcnJvIGVzdMOhIGEgc2VyIGdlcmFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbl9wcm9ncmVzc190aXRsZSIgbXNnaWQ9Ijc0MDk5MTczMzgyMjMzODY2MzciPiJPIHJlbGF0w7NyaW8gZGUgZXJybyBlc3TDoSBhIHNlciBjcmlhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4iUmVsYXTDs3JpbyBkZSBlcnJvcyBjYXB0dXJhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgcHJvZHVjdD0id2F0Y2giIG1zZ2lkPSI4Mzg5MTcyMjQ4NDMzNTk3NjgzIj4iRGVzbGl6YXIgcmFwaWRhbWVudGUgcGFyYSBhIGVzcXVlcmRhIHBhcmEgcGFydGlsaGFyIG8gc2V1IHJlbGF0w7NyaW8gZGUgZXJyb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGV4dCIgcHJvZHVjdD0iZGVmYXVsdCIgbXNnaWQ9IjM1NTk5MDQ3NDY4NTk0MDA3MzIiPiJUb3F1ZSBwYXJhIHBhcnRpbGhhciBvIHJlbGF0w7NyaW8gZGUgZXJyb3MiPC9zdHJpbmc+CkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmVsYXTDs3Jpb3MgZGUgZXJyb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGxlciBvIGZpY2hlaXJvIGRlIHJlbGF0w7NyaW8gZGUgZXJybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmEgZGUgZWNyw6MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIGVjcsOjIHRpcmFkYSBjb20gw6p4aXRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJOw6NvIGZvaSBwb3Nzw612ZWwgdGlyYXIgYSBjYXB0dXJhIGRlIGVjcsOjLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGhlcyBkbyByZWxhdMOzcmlvIGRlIGVycm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik5vbWUgYWJyZXZpYWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXN1bW8gZGUgMSBsaW5oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyacOnw6NvIGRldGFsaGFkYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggYjE5NGVjYy4uZmIxNmRkOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iUmVsYXTDs3Jpb3MgZGUgYnVncyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gYXJxdWl2byBkZSByZWxhdMOzcmlvIGRlIGJ1ZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+InNlbSBub21lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IkNhcHR1cmFzIGRlIHRlbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIHRlbGEgY29uY2x1w61kYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iTsOjbyBmb2kgcG9zc8OtdmVsIGZhemVyIGEgY2FwdHVyYSBkZSB0ZWxhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGhlcyBkbyByZWxhdMOzcmlvIGRvIGJ1ZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iQXBlbGlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iUmVzdW1vIGRlIHVtYSBsaW5oYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRlc2NyacOnw6NvIGRldGFsaGFkYSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKaW5kZXggMTMyZjIxZi4uMDY0ZGZhZjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJhcG9hcnRlIGRlIGVyb3JpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkZpyJlpZXJ1bCBjdSByYXBvcnR1bCBkZSBlcm9hcmUgbnUgYSBwdXR1dCBmaSBjaXRpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImbEg3LEgyBudW1lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkRldGFsaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iQ2FwdHVyxIMgZGUgZWNyYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJDYXB0dXJhIGRlIGVjcmFuIGEgZm9zdCBmxINjdXTEgy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iQ2FwdHVyYSBkZSBlY3JhbiBudSBhIHB1dHV0IGZpIGbEg2N1dMSDLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiJEZXRhbGlpIHByaXZpbmQgcmFwb3J0dWwgZGUgZXJvYXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJOdW1lIHNjdXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJSZXp1bWF0IGRlIHVuIHLDom5kIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGVzY3JpZXJlIGRldGFsaWF0xIMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCmluZGV4IDJhZTgzMmIuLjMzNTA3NDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbApAQCAtMTcsNyArMTcsNyBAQAogPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCiAgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgogICAgIDxzdHJpbmcgbmFtZT0iYXBwX2xhYmVsIiBtc2dpZD0iMzcwMTg0NjAxNzA0OTU0MDkxMCI+ItCe0LHQvtC70L7Rh9C60LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUiIG1zZ2lkPSI3NDA5OTE3MzM4MjIzMzg2NjM3Ij4i0KHQvtC30LTQsNC90LjQtSDQvtGC0YfQtdGC0LAg0L7QsSDQvtGI0LjQsdC60LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUiIG1zZ2lkPSI3NDA5OTE3MzM4MjIzMzg2NjM3Ij4i0KHQvtC30LTQsNC90LjQtSDQvtGC0YfQtdGC0LAg0L7QsSDQvtGI0LjQsdC60LXigKYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfZmluaXNoZWRfdGl0bGUiIG1zZ2lkPSIyMjkzNzExNTQ2ODkyODYzODk4Ij4i0J7RgtGH0LXRgiDQvtCxINC+0YjQuNCx0LrQtSDRgdC+0YXRgNCw0L3QtdC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIHByb2R1Y3Q9IndhdGNoIiBtc2dpZD0iODM4OTE3MjI0ODQzMzU5NzY4MyI+ItCf0YDQvtCy0LXQtNC40YLQtSDQstC70LXQstC+LCDRh9GC0L7QsdGLINC+0YLQv9GA0LDQstC40YLRjCDQvtGC0YfQtdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQiIHByb2R1Y3Q9ImRlZmF1bHQiIG1zZ2lkPSIzNTU5OTA0NzQ2ODU5NDAwNzMyIj4i0J3QsNC20LzQuNGC0LUsINGH0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINC+0YLRh9C10YIg0L7QsSDQvtGI0LjQsdC60LDRhSI8L3N0cmluZz4KQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLQntGC0YfQtdGC0Ysg0L7QsSDQvtGI0LjQsdC60LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLQndC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINC+0YLRh9C10YIg0L7QsSDQvtGI0LjQsdC60LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLQsdC10Lcg0L3QsNC30LLQsNC90LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLQlNC10YLQsNC70LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i0KHQutGA0LjQvdGI0L7RgtGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i0KHQutGA0LjQvdGI0L7RgiDQs9C+0YLQvtCyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+ItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQtNC10LvQsNGC0Ywg0YHQutGA0LjQvdGI0L7RgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLQlNC10YLQsNC70Lgg0L7RgtGH0LXRgtCwINC+0LEg0L7RiNC40LHQutC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLQmtGA0LDRgtC60L7QtSDQvdCw0LfQstCw0L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLQmtGA0LDRgtC60L7QtSDQvtC/0LjRgdCw0L3QuNC1INC+0YjQuNCx0LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+ItCf0L7QtNGA0L7QsdC90L7QtSDQvtC/0LjRgdCw0L3QuNC1Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCmluZGV4IGM4NDZmODcuLmQ5MTUxMDkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2ktckxLL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i4Lav4Led4LeCIOC3gOC3j+C2u+C3iuC2reC3jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LePIOC2nOC3nOC2seC3lOC3gCDgtprgt5Lgtrrgt4Dgt5Pgtrjgtqcg4Lax4Lec4LeE4LeQ4Laa4LeSIOC3gOC3kuC2uiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuC2seC2uOC3iiDgtrHgt5zgtprgt4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4LeA4LeS4LeD4LeK4Lat4La7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuC2reC3kuC2uyDgtrvgt5Tgt4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLgt4Pgt4/gtrvgt4rgtq7gtprgt4Ag4Lat4LeS4La7IOC2u+C3lOC3gOC2muC3iiDgtpzgtrHgt4rgtrHgt48g4La94Lav4LeTLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgtq3gt5Lgtrsg4La74LeU4LeA4Laa4LeKIOC2nOC2rSDgtrHgt5zgt4Tgt5Dgtprgt5Ig4LeA4LeS4La6LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLgtq/gt53gt4Ig4LeA4LeP4La74LeK4Lat4LePIOC3gOC3kuC3g+C3iuC2reC2uyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i4Laa4LeZ4Lan4LeSIOC2seC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i4La04Lea4LeF4LeSLTEg4LeD4LeP4La74LeP4LaC4LeB4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4LeD4LeA4LeS4LeD4LeK4Lat4La7IOC3gOC3kuC3g+C3iuC2reC2u+C2uiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKaW5kZXggYjM5NWQxYS4uZWM5MDAzZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iSGzDoXNlbmlhIGNow71iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IlPDumJvciBzwqBobMOhc2Vuw61tIGNoeWJ5IHNhIG5lcG9kYXJpbG8gcHJlxI3DrXRhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiJiZXogbsOhenZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlBvZHJvYm5vc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNuw61ta2Egb2JyYXpvdmt5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4iU27DrW1rYSBvYnJhem92a3kgYm9sYSB6YXpuYW1lbmFuw6EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNuw61ta3Ugb2JyYXpvdmt5IHNhIG5lcG9kYXJpbG8gemF6bmFtZW5hxaUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IlBvZHJvYm5vc3RpIGhsw6FzZW5pYSBjaHlieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4iU2tyw6F0ZW7DvSBuw6F6b3YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IkplZG5vcmlhZGtvdsOpIHpocm51dGllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iUG9kcm9ibsO9IHBvcGlzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbAppbmRleCA5MTA0MWUxLi5hYTY2Y2U5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJQb3JvxI1pbGEgbyBuYXBha2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkRhdG90ZWtlIHMgcG9yb8SNaWxvbSBvIG5hcGFrYWggbmkgYmlsbyBtb2dvxI1lIHByZWJyYXRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ibmVpbWVub3Zhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iUG9kcm9ibm9zdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iUG9zbmV0ZWsgemFzbG9uYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlBvc25ldGVrIHphc2xvbiBqZSBiaWwgdXNwZcWhbm8gdXN0dmFyamVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJQb3NuZXRrYSB6YXNsb24gbmkgYmlsbyBtb2dvxI1lIHVzdHZhcml0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iUG9kcm9ibm9zdGkgbyBwb3JvxI1pbHUgbyBuYXBha2FoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJJbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IkVub3Zyc3RpxI1uaSBwb3Z6ZXRlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IlBvZHJvYmVuIG9waXMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKaW5kZXggZTkxYWEwOS4uZGQxM2YzNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJSYXBvcnRldCBlIGdhYmltZXZlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IlNrZWRhcmkgaSByYXBvcnRpbWl0IHTDqyBkZWZla3RpdCBuw6sga29kIG51ayBtdW5kIHTDqyBsZXhvaGVqLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImUgcGFlbcOrcnR1YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iRGV0YWpldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJQYW1qYSBlIGVrcmFuaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJQYW1qYSBlIGVrcmFuaXQgdSByZWFsaXp1YSBtZSBzdWtzZXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlBhbWphIGUgZWtyYW5pdCBudWsgbXVuZCB0w6sgcmVhbGl6b2hlai4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iRGV0YWpldCBlIHJhcG9ydGltaXQgdMOrIGdhYmltZXZlIG7DqyBrb2QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IkVtcmkgc2hrdXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJQw6tybWJsZWRoamUgbWUgMSBycmVzaHQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJQw6tyc2hrcmltaSBpIGRldGFqdWFyIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAxYmU0N2RhLi4xZGE3ZWNiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLQmNC30LLQtdGI0YLQsNGY0Lgg0L4g0LPRgNC10YjQutCw0LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLQlNCw0YLQvtGC0LXQutCwINC40LfQstC10YjRgtCw0ZjQsCDQviDQs9GA0LXRiNGG0Lgg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQuNGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLQvdC10LjQvNC10L3QvtCy0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+ItCU0LXRgtCw0ZnQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLQodC90LjQvNGG0Lgg0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i0KHQvdC40LzQsNGa0LUg0LXQutGA0LDQvdCwINGY0LUg0YPRgdC/0LXQu9C+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQodC90LjQvNCw0ZrQtSDQtdC60YDQsNC90LAg0L3QuNGY0LUg0YPRgdC/0LXQu9C+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLQlNC10YLQsNGZ0Lgg0LjQt9Cy0LXRiNGC0LDRmNCwINC+INCz0YDQtdGI0YbQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i0JrRgNCw0YLQutC4INC90LDQt9C40LIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+ItCg0LXQt9C40LzQtSDRgyDRmNC10LTQvdC+0Lwg0YDQtdC00YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLQlNC10YLQsNGZ0L3QuCDQvtC/0LjRgSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKaW5kZXggOWY1YjVmMC4uOGFmYTBhNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iRmVscmFwcG9ydGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkRldCBnaWNrIGludGUgYXR0IGzDpHNhIGZlbHJhcHBvcnRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+Im5hbW5sw7ZzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IkluZm9ybWF0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNrw6RybWR1bXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJFbiBza8Okcm1kdW1wIGhhciB0YWdpdHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkRldCBnaWNrIGludGUgYXR0IHRhIHNrcsOkbWR1bXAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkluZm9ybWF0aW9uIGbDtnIgZmVscmFwcG9ydGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLb3J0bmFtbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iU2FtbWFuZmF0dG5pbmcgcMOlIGVuIHJhZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IkRldGFsamVyYWQgYmVza3Jpdm5pbmciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCmluZGV4IDQyMmNhODEuLjViNzAyNjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IlJpcG90aSB6YSBoaXRpbGFmdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJGYWlsaSB5YSByaXBvdGkgeWEgaGl0aWxhZnUgaGFpa3Vzb213YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IklzaXlvIG5hIGppbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iTWFlbGV6byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiJQaWNoYSB5YSBza3JpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJJbWVwaWdhIHBpY2hhIHlhIHNrcmluaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4iSGFpa3VwaWdhIHBpY2hhIHlhIHNrcmluaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iTWFlbGV6byBrdWh1c3Ugcmlwb3RpIHlhIGhpdGlsYWZ1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJKaW5hIGZ1cGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+Ik11aHRhc2FyaSB3YSBtc3RhcmkgbW1vamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJNYWVsZXpvIHlhIGtpbmEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKaW5kZXggMzFkYWY1NC4uOTFlYjcxOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLgrqrgrr/grrTgr4gg4K6F4K6x4K6/4K6V4K+N4K6V4K+I4K6V4K6z4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IuCuquCuv+CutOCviCDgroXgrrHgrr/grpXgr43grpXgr4jgrq/gr4jgrqrgr40g4K6q4K6f4K6/4K6V4K+N4K6VIOCuruCvgeCun+Cuv+Cur+CuteCuv+CusuCvjeCusuCviCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCuquCvhuCur+CusOCuv+Cun+CuquCvjeCuquCun+CuvuCupOCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLgrrXgrr/grrXgrrDgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i4K644K+N4K6V4K6/4K6w4K+A4K6p4K+NIOCut+CuvuCun+CvjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCuuOCvjeCuleCuv+CusOCvgOCuqeCvjSDgrrfgrr7grp/gr40g4K6O4K6f4K+B4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgrrjgr43grpXgrr/grrDgr4Dgrqngr40g4K634K6+4K6f4K+N4K6f4K+IIOCujuCun+CvgeCuleCvjeCulSDgrq7gr4Hgrp/grr/grq/grrXgrr/grrLgr43grrLgr4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IuCuquCuv+CutOCviCDgroXgrrHgrr/grpXgr43grpXgr4gg4K614K6/4K614K6w4K6Z4K+N4K6V4K6z4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLgrprgr4HgrrDgr4HgrpXgr43grpXgrqrgr40g4K6q4K+G4K6v4K6w4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLgrprgr4HgrrDgr4HgrpXgr43grpXgrrXgrr/grrXgrrDgrq7gr40gKOCukuCusOCvgSDgrrXgrrDgrr/grq/grr/grrLgr40pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i4K614K6/4K6w4K6/4K614K6+4K6pIOCuteCuv+Cus+CuleCvjeCuleCuruCvjSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCAzNGFiNmYyLi41MTdkZDVlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuCwrOCwl+CxjSDgsKjgsL/gsLXgsYfgsKbgsL/gsJXgsLLgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i4LCs4LCX4LGNIOCwqOCwv+CwteCxh+CwpuCwv+CwlSDgsKvgsYjgsLLgsY3igIzgsKjgsYEg4LCa4LCm4LC14LCh4LCCIOCwuOCwvuCwp+CxjeCwr+CwquCwoeCwsuCxh+CwpuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuCwquCxh+CwsOCxgSDgsLLgsYfgsKjgsL/gsLXgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4LC14LC/4LC14LCw4LC+4LCy4LGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwt+CwvuCwn+CxjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwt+CwvuCwn+CxjSDgsLXgsL/gsJzgsK/gsLXgsILgsKTgsILgsJfgsL4g4LCk4LGA4LCv4LCs4LCh4LC/4LCC4LCm4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLgsLjgsY3gsJXgsY3gsLDgsYDgsKjgsY3igIzgsLfgsL7gsJ/gsY3igIzgsKjgsYEg4LCk4LGA4LCv4LCh4LCCIOCwuOCwvuCwp+CxjeCwr+CwquCwoeCwsuCxh+CwpuCxgS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4LCs4LCX4LGNIOCwqOCwv+CwteCxh+CwpuCwv+CwlSDgsLXgsL/gsLXgsLDgsL7gsLLgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuCwmuCwv+CwqOCxjeCwqCDgsKrgsYfgsLDgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IjEt4LCq4LCC4LCV4LGN4LCk4LC/IOCwuOCwvuCwsOCwvuCwguCwtuCwgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuCwuOCwruCwl+CxjeCwsCDgsLXgsL/gsLXgsLDgsKMiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCmluZGV4IDJkOWE2NWUuLmI3MzQwOTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IuC4o+C4suC4ouC4h+C4suC4meC4guC5ieC4reC4muC4geC4nuC4o+C5iOC4reC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLguYTguKHguYjguKrguLLguKHguLLguKPguJbguK3guYjguLLguJnguYTguJ/guKXguYzguKPguLLguKLguIfguLLguJnguILguYnguK3guJrguIHguJ7guKPguYjguK3guIciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLguYTguKHguYjguKHguLXguIrguLfguYjguK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i4Lij4Liy4Lii4Lil4Liw4LmA4Lit4Li14Lii4LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuC4oOC4suC4nuC4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuC4iOC4seC4muC4oOC4suC4nuC4q+C4meC5ieC4suC4iOC4reC4quC4s+C5gOC4o+C5h+C4iOC5geC4peC5ieC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLguYTguKHguYjguKrguLLguKHguLLguKPguJbguIjguLHguJrguKDguLLguJ7guKvguJnguYnguLLguIjguK3guYTguJTguYkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i4Lij4Liy4Lii4Lil4Liw4LmA4Lit4Li14Lii4LiU4Lij4Liy4Lii4LiH4Liy4LiZ4LiC4LmJ4Lit4Lia4LiB4Lie4Lij4LmI4Lit4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLguIrguLfguYjguK3guKLguYjguK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IuC4quC4o+C4uOC4myAxIOC4muC4o+C4o+C4l+C4seC4lCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+IuC4hOC4s+C4reC4mOC4tOC4muC4suC4ouC5guC4lOC4ouC4peC4sOC5gOC4reC4teC4ouC4lCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKaW5kZXggOGZlYWQ4Zi4uYmNjZTFkYiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iTWdhIHVsYXQgc2EgYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IkhpbmRpIG1hYmFzYSBhbmcgZmlsZSBuZyBwYWctdXVsYXQgbmcgYnVnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4id2FsYW5nIHBhbmdhbGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Ik1nYSBEZXRhbHllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNjcmVlbnNob3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJOYWt1bmFuIG5nIHNjcmVlbnNob3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkhpbmRpIG1ha3VuYW4gbmcgc2NyZWVuc2hvdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iTWdhIGRldGFseWUgbmcgdWxhdCBuZyBidWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+Ik1haWtsaW5nIHBhbmdhbGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJCdW9kIG5hIG1heSAxIGxpbnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iRGV0YWx5YWRvbmcgcGFnbGFsYXJhd2FuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAppbmRleCBlMWQzMGNjLi5lMWZkZjEwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiJIYXRhIHJhcG9ybGFyxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4iSGF0YSByYXBvcnUgZG9zeWFzxLEgb2t1bmFtYWTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImFkc8SxeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJBeXLEsW50xLFsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4iRWtyYW4gZ8O2csO8bnTDvHPDvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IkVrcmFuIGfDtnLDvG50w7xzw7wgYmHFn2FyxLF5bGEgYWzEsW5kxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IkVrcmFuIGfDtnLDvG50w7xzw7wgYWzEsW5hbWFkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkhhdGEgcmFwb3J1IGF5csSxbnTEsWxhcsSxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJLxLFzYSBhZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iMSBzYXTEsXJsxLFrIMO2emV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iQXlyxLFudMSxbMSxIGHDp8Sxa2xhbWEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCmluZGV4IGYxMzk2Y2IuLmRkNDNjNGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+ItCX0LLRltGC0Lgg0L/RgNC+INC/0L7QvNC40LvQutC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+ItCd0LUg0LLQtNCw0LvQvtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtC4INC30LLRltGCINC/0YDQviDQv9C+0LzQuNC70LrQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ItCx0LXQtyDQvdCw0LfQstC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+ItCU0LXRgtCw0LvRliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLQl9C90ZbQvNC+0Log0LXQutGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i0JfQvdGW0LzQvtC6INC10LrRgNCw0L3QsCDQt9GA0L7QsdC70LXQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLQndC1INCy0LTQsNC70L7RgdGPINC30YDQvtCx0LjRgtC4INC30L3RltC80L7QuiDQtdC60YDQsNC90LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+ItCU0LXRgtCw0LvRliDQv9C+0LLRltC00L7QvNC70LXQvdC90Y8g0L/RgNC+INC/0L7QvNC40LvQutGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLQmtC+0YDQvtGC0LrQsCDQvdCw0LfQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLQn9GW0LTRgdGD0LzQvtC6INC+0LTQvdC40Lwg0YDRj9C00LrQvtC8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i0JTQtdGC0LDQu9GM0L3QuNC5INC+0L/QuNGBIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXVyLXJQSy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCmluZGV4IDQxMmQyMzAuLmI5N2M4YjUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i2KjaryDYsdm+2YjYsdm52LMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i2KjaryDYsdm+2YjYsdm5INmB2KfYptmEINm+2pHavtuMINmG24HbjNq6INis2Kcg2LPaqduMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i2KjYutuM2LEg2YbYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Itiq2YHYtduM2YTYp9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+Itin2LPaqdix24zZhiDYtNin2bkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLYp9iz2qnYsduM2YYg2LTYp9m5INqp2KfZhduM2KfYqNuMINiz25Ig2YTbkiDZhNuM2Kcg2q/bjNin25QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i2LPaqdix24zZhiDYtNin2bkg2YbbgduM2rog2YTbjNinINis2Kcg2LPaqdin25QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i2KjaryDYsdm+2YjYsdm5INqp24wg2KrZgdi124zZhNin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+ItmF2K7Yqti12LEg2YbYp9mFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiIxINmE2KfYptmGINqp2Kcg2K7ZhNin2LXbgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIiBtc2dpZD0iNDExNzA4ODk5ODczMzU0Njc4NCI+Itiq2YHYtduM2YTbjCDZiNi22KfYrdiqIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCmluZGV4IGNhNDZkMmEuLjI3OWM4NzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iWGF0b2xpa2xhciBoaXNvYm90aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJYYXRvbGlrbGFyIGhpc29ib3RpIGZheWxpbmkgb+KAmHFpYiBib+KAmGxtYWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4ibm9tc2l6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+IlRhZnNpbG90bGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IlNrcmluc2hvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IlNrcmluc2hvdCB0YXl5b3IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IlNrcmluc2hvdCBvbGliIGJv4oCYbG1hZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IlhhdG9saWtsYXIgaGlzb2JvdGkgdGFmc2lsb3RsYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJRaXNxYSBub21pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiJYYXRvbGlrbmluZyBxaXNxYWNoYSB0YeKAmXJpZmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJCYXRhZnNpbCB0YeKAmXJpZiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggZWM0MzY0ZS4uNGUxZWJjNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4iQsOhbyBjw6FvIGzhu5dpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+Iktow7RuZyB0aOG7gyDEkeG7jWMgdOG7h3AgYsOhbyBjw6FvIGzhu5dpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4iY2jGsGEgxJHGsOG7o2MgxJHhurd0IHTDqm4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4iQ2hpIHRp4bq/dCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLhuqJuaCBjaOG7pXAgbcOgbiBow6xuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IsSQw6MgY2jhu6VwIOG6o25oIG3DoG4gaMOsbmggdGjDoG5oIGPDtG5nLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiJLaMO0bmcgdGjhu4MgY2jhu6VwIOG6o25oIG3DoG4gaMOsbmguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IkNoaSB0aeG6v3QgYsOhbyBjw6FvIGzhu5dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiJUw6puIG5n4bqvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4iVMOzbSB04bqvdCAxIGTDsm5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4iTcO0IHThuqMgY2hpIHRp4bq/dCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1yQ04vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAppbmRleCA1YThlNWY3Li5iNWJhN2E5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IumUmeivr+aKpeWRiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiLml6Dms5Xor7vlj5bplJnor6/miqXlkYrmlofku7YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCIgbXNnaWQ9IjI4MDA1ODI0MDY4NDIwOTI3MDkiPiLmnKrlkb3lkI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19hY3Rpb24iIG1zZ2lkPSIyMTU4MjA0MjI4NTEwNTc2MjI3Ij4i6K+m57uG5L+h5oGvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IuWxj+W5leaIquWbviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X3Rha2VuIiBtc2dpZD0iNzE3NTM0MzE4MTc2NzQyOTA4OCI+IuW3suaIkOWKn+aIquWbvuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCIgbXNnaWQ9IjU4NTMwNDkxNDA4MDY4MzQ2MDEiPiLml6Dms5XmiKrlm77jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4i6ZSZ6K+v5oql5ZGK6K+m57uG5L+h5oGvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fbmFtZSIgbXNnaWQ9IjUwODkxOTE4MzIyNzE4NTI4MjYiPiLnroDnp7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IueugOefreaRmOimge+8iDEg6KGM77yJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGVzY3JpcHRpb24iIG1zZ2lkPSI0MTE3MDg4OTk4NzMzNTQ2Nzg0Ij4i6K+m57uG6K+05piOIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCmluZGV4IDdlNTdjYzQuLjg5NmE5MjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0yNiw0ICsyNiwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3N0b3JhZ2VfdGl0bGUiIG1zZ2lkPSI1MzMyNDg4MTQ0NzQwNTI3MTA5Ij4i6Yyv6Kqk5aCx5ZGKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCIgbXNnaWQ9IjU4NjUxNzg1MTA0NDUzNTQ4NiI+IueEoeazleiugOWPlumMr+iqpOWgseWRiuaqlOahiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+IuacquWRveWQjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiLoqbPntLDos4foqIoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iIG1zZ2lkPSI4Njc3NzgxNzIxOTQwNjE0OTk1Ij4i6J6i5bmV5pO35Y+W55Wr6Z2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW4iIG1zZ2lkPSI3MTc1MzQzMTgxNzY3NDI5MDg4Ij4i5oiQ5Yqf5ouN5pSd6J6i5bmV5pO35Y+W55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IueEoeazleaTt+WPluieouW5leeVq+mdouOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2RpYWxvZ190aXRsZSIgbXNnaWQ9IjMxMTM1NDk4Mzk3OTg1NjQ2NDUiPiLpjK/oqqTloLHlkYroqbPmg4UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IuewoeeosSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX3RpdGxlIiBtc2dpZD0iMTI3MTY3ODUzMzcwNTU3MTc1Ij4i57Ch55+t5pGY6KaBICgxIOihjCkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLoqbPntLDoqqrmmI4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtemgtclRXL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKaW5kZXggZTQ5NWQ0YS4uMmJkZjU2MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwKQEAgLTI2LDQgKzI2LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc3RvcmFnZV90aXRsZSIgbXNnaWQ9IjUzMzI0ODgxNDQ3NDA1MjcxMDkiPiLpjK/oqqTloLHlkYoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5yZWFkYWJsZV90ZXh0IiBtc2dpZD0iNTg2NTE3ODUxMDQ0NTM1NDg2Ij4i54Sh5rOV6K6A5Y+W6Yyv6Kqk5aCx5ZGK5qqU5qGIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3VubmFtZWQiIG1zZ2lkPSIyODAwNTgyNDA2ODQyMDkyNzA5Ij4i5pyq5ZG95ZCNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fYWN0aW9uIiBtc2dpZD0iMjE1ODIwNDIyODUxMDU3NjIyNyI+Iuips+e0sOizh+aWmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2FjdGlvbiIgbXNnaWQ9Ijg2Nzc3ODE3MjE5NDA2MTQ5OTUiPiLonqLluZXmk7flj5bnlavpnaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiLlt7LmiJDlip/mi43mlJ3onqLluZXmk7flj5bnlavpnaLjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9mYWlsZWQiIG1zZ2lkPSI1ODUzMDQ5MTQwODA2ODM0NjAxIj4i54Sh5rOV5ouN5pSd6J6i5bmV5pO35Y+W55Wr6Z2i44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIiBtc2dpZD0iMzExMzU0OTgzOTc5ODU2NDY0NSI+IumMr+iqpOWgseWRiuips+e0sOizh+aWmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX25hbWUiIG1zZ2lkPSI1MDg5MTkxODMyMjcxODUyODI2Ij4i57Ch56ixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fdGl0bGUiIG1zZ2lkPSIxMjcxNjc4NTMzNzA1NTcxNzUiPiLnsKHnn63mkZjopoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiLoqbPntLDoqqrmmI4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCmluZGV4IDkxZjI5NTEuLjY1MjEwNWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMjYsNCArMjYsMTIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zdG9yYWdlX3RpdGxlIiBtc2dpZD0iNTMzMjQ4ODE0NDc0MDUyNzEwOSI+IkltaWJpa28geWV6aXBoYXphbWlzbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQiIG1zZ2lkPSI1ODY1MTc4NTEwNDQ1MzU0ODYiPiJJZmF5ZWxhIGxvbWJpa28gd2VzaXBoYXphbXNvIGFsaWt3YXphbmdhIHVrdWZ1bmR3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF91bm5hbWVkIiBtc2dpZD0iMjgwMDU4MjQwNjg0MjA5MjcwOSI+ImF3dW5pa2l3ZSBpZ2FtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiIgbXNnaWQ9IjIxNTgyMDQyMjg1MTA1NzYyMjciPiJJbWluaW5pbmd3YW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uIiBtc2dpZD0iODY3Nzc4MTcyMTk0MDYxNDk5NSI+IklzaXRob21iZS1za3JpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiIgbXNnaWQ9IjcxNzUzNDMxODE3Njc0MjkwODgiPiJJc2l0aG9tYmUtc2tyaW5pIHNpdGhhdGh3ZSBuZ2VtcHVtZWxlbG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkIiBtc2dpZD0iNTg1MzA0OTE0MDgwNjgzNDYwMSI+IklzaXRob21iZS1za3JpbmkgYXNpa3dhemFuZ2EgdWt1dGhhdGh3YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzMTEzNTQ5ODM5Nzk4NTY0NjQ1Ij4iSW1pbmluaW5nd2FuZSB5b21iaWtvIHdlc2lwaGF6YW1pc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIiBtc2dpZD0iNTA4OTE5MTgzMjI3MTg1MjgyNiI+IklnYW1hIGVsaWZpc2hhbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSIgbXNnaWQ9IjEyNzE2Nzg1MzM3MDU1NzE3NSI+IklzaWZpbnllem8gc29tdWdxYSBvbmd1LTEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19kZXNjcmlwdGlvbiIgbXNnaWQ9IjQxMTcwODg5OTg3MzM1NDY3ODQiPiJJbmNhemVsbyBlbmVtaW5pbmluZ3dhbmUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TaGVsbC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmluZGV4IDVjMjU1NzYuLmRjZDVmMDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU2hlbGwvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbApAQCAtNDIsNCArNDIsMjcgQEAKICAgICA8IS0tIFRpdGxlIGZvciBidWcgcmVwb3J0cyByZWNlaXZlZCBmcm9tIGR1bXBzdGF0ZSB3aXRob3V0IGEgbmFtZS4gW0NIQVIgTElNSVQ9MzBdLS0+CiAgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfdW5uYW1lZCI+dW5uYW1lZDwvc3RyaW5nPgogCisgICAgPCEtLSBUaXRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiB0aGF0IG9wZW5zIHRoZSBkaWFsb2cgZm9yIHRoZSB1c2VyLWRlZmluZWQgYnVnIHJlcG9ydCBkZXRhaWxzLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2FjdGlvbiI+RGV0YWlsczwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBvZiB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiB0aGF0IHRha2VzIGFkaXRpb25hbCBzY3JlZW5zaG90cy4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF9hY3Rpb24iPlNjcmVlbnNob3Q8L3N0cmluZz4KKworICAgIDwhLS0gVG9hc3QgbWVzc2FnZSBzZW50IHdoZW4gdGhlIGEgc2NyZWVuc2hvdCBmb3IgdGhlIGJ1ZyByZXBvcnQgd2FzIHRha2VuIHN1Y2Nlc3NmdWxseS4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfc2NyZWVuc2hvdF90YWtlbiI+U2NyZWVuc2hvdCB0YWtlbiBzdWNjZXNmdWxseS48L3N0cmluZz4KKyAgICA8IS0tIFRvYXN0IG1lc3NhZ2Ugc2VudCB3aGVuIHRoZSBhIHNjcmVlbnNob3QgZm9yIHRoZSBidWcgcmVwb3J0IHdhcyBub3QgdGFrZW4gZHVlIHRvIGFuIGVycm9yLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9zY3JlZW5zaG90X2ZhaWxlZCI+U2NyZWVuc2hvdCBjb3VsZCBub3QgYmUgdGFrZW4uPC9zdHJpbmc+CisKKyAgICA8IS0tICBUaXRsZSBvZiB0aGUgZGlhbG9nIGFza2luZyBmb3IgdXNlci1kZWZpbmVkIGJ1ZyByZXBvcnQgZGV0YWlscyBsaWtlIG5hbWUsIHRpdGxlLCBhbmQgZGVzY3JpcHRpb24uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYnVncmVwb3J0X2luZm9fZGlhbG9nX3RpdGxlIj5CdWcgcmVwb3J0IGRldGFpbHM8L3N0cmluZz4KKworICAgIDwhLS0gVGV4dCBvZiB0aGUgaGludCBhc2tpbmcgZm9yIHRoZSBidWcgcmVwb3J0IG5hbWUsIHdoaWNoIHdoZW4gc2V0IHdpbGwgZGVmaW5lIGEgc3VmZml4IGluIHRoZQorICAgICAgICAgYnVnIHJlcG9ydCBmaWxlIG5hbWVzLiBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb19uYW1lIj5TaG9ydCBuYW1lPC9zdHJpbmc+CisgICAgPCEtLSBUZXh0IG9mIGhpbnQgYXNraW5nIGZvciB0aGUgYnVnIHJlcG9ydCB0aXRsZSwgd2hpY2ggd2hlbiBzZXQgd2lsbCBkZWZpbmUgdGhlCisgICAgICAgICBTdWJqZWN0IG9mIHRoZSBlbWFpbCBtZXNzYWdlLiBbQ0hBUiBMSU1JVD02MF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJidWdyZXBvcnRfaW5mb190aXRsZSI+MS1saW5lIHN1bW1hcnk8L3N0cmluZz4KKyAgICA8IS0tIFRleHQgb2YgaGludCBhc2tpbmcgZm9yIHRoZSBidWcgcmVwb3J0IGRlc2NyaXB0aW9uLCB3aGljaCB3aGVuIHNldCB3aWxsIGRlc2NyaWJlCisgICAgICAgICB3aGF0IHRoZSBidWcgcmVwb3J0IGlzIGFib3V0LiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJ1Z3JlcG9ydF9pbmZvX2Rlc2NyaXB0aW9uIj5EZXRhaWxlZCBkZXNjcmlwdGlvbjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmphdmEgYi9wYWNrYWdlcy9TaGVsbC9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmphdmEKaW5kZXggNzhlMzczYi4uZGY4ZmFkNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5qYXZhCisrKyBiL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuamF2YQpAQCAtMTYsMTAgKzE2LDEyIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2hlbGw7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlRIUkVBRF9QUklPUklUWV9CQUNLR1JPVU5EOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcmVmcy5TVEFURV9TSE9XOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcmVmcy5nZXRXYXJuaW5nU3RhdGU7CiAKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CkBAIC0yNywxOCArMjksMjQgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS50ZXh0Lk51bWJlckZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OworaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcE91dHB1dFN0cmVhbTsKIAogaW1wb3J0IGxpYmNvcmUuaW8uU3RyZWFtczsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwogaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0Lkxpc3RzOwogCiBpbXBvcnQgYW5kcm9pZC5hY2NvdW50cy5BY2NvdW50OwogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uLkFjdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwpAQCAtNDYsNiArNTQsOCBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0V3JhcHBlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKQEAgLTU1LDE4ICs2NSwyNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CitpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CitpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjQuY29udGVudC5GaWxlUHJvdmlkZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYXR0ZXJuczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Gb2N1c0NoYW5nZUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZvOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAogLyoqCi0gKiBTZXJ2aWNlIHVzZWQgdG8ga2VlcCBwcm9ncmVzcyBvZiBidWcgcmVwb3J0cyBwcm9jZXNzZXMgKHtAY29kZSBkdW1wc3RhdGV9KS4KKyAqIFNlcnZpY2UgdXNlZCB0byBrZWVwIHByb2dyZXNzIG9mIGJ1Z3JlcG9ydCBwcm9jZXNzZXMgKHtAY29kZSBkdW1wc3RhdGV9KS4KICAqIDxwPgogICogVGhlIHdvcmtmbG93IGlzOgogICogPG9sPgpAQCAtODQsMzQgKzEwMiw1OSBAQAogICogPGxpPntAbGluayBCdWdyZXBvcnRSZWNlaXZlcn0gcmVjZWl2ZXMgdGhlIGludGVudCBhbmQgZGVsZWdhdGVzIGl0IHRvIHRoaXMgc2VydmljZSwgd2hpY2ggaW4KICAqIHR1cm46CiAgKiA8b2w+Ci0gKiA8bGk+VXBkYXRlcyB0aGUgc3lzdGVtIG5vdGlmaWNhdGlvbiBzbyB1c2VyIGNhbiBzaGFyZSB0aGUgYnVnIHJlcG9ydC4KKyAqIDxsaT5VcGRhdGVzIHRoZSBzeXN0ZW0gbm90aWZpY2F0aW9uIHNvIHVzZXIgY2FuIHNoYXJlIHRoZSBidWdyZXBvcnQuCiAgKiA8bGk+U3RvcHMgbW9uaXRvcmluZyB0aGF0IHtAY29kZSBkdW1wc3RhdGV9IHByb2Nlc3MuCiAgKiA8bGk+U3RvcHMgaXRzZWxmIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJvY2VzcyBsZWZ0IHRvIG1vbml0b3IuCiAgKiA8L29sPgogICogPC9vbD4KICAqLwogcHVibGljIGNsYXNzIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZSBleHRlbmRzIFNlcnZpY2UgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU2hlbGwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVUSE9SSVRZID0gImNvbS5hbmRyb2lkLnNoZWxsIjsKIAorICAgIC8vIEV4dGVybmFsIGludGVudHMgc2VudCBieSBkdW1wc3RhdGUuCiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFTlRfQlVHUkVQT1JUX1NUQVJURUQgPSAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9TVEFSVEVEIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQgPSAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9GSU5JU0hFRCI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFTlRfUkVNT1RFX0JVR1JFUE9SVF9GSU5JU0hFRCA9CisgICAgICAgICAgICAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlJFTU9URV9CVUdSRVBPUlRfRklOSVNIRUQiOworICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5URU5UX1JFTU9URV9CVUdSRVBPUlRfRElTUEFUQ0ggPQorICAgICAgICAgICAgImFuZHJvaWQuaW50ZW50LmFjdGlvbi5SRU1PVEVfQlVHUkVQT1JUX0RJU1BBVENIIjsKKworICAgIC8vIEludGVybmFsIGludGVudHMgdXNlZCBvbiBub3RpZmljYXRpb24gYWN0aW9ucy4KICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfQ0FOQ0VMID0gImFuZHJvaWQuaW50ZW50LmFjdGlvbi5CVUdSRVBPUlRfQ0FOQ0VMIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfU0hBUkUgPSAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9TSEFSRSI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBJTlRFTlRfQlVHUkVQT1JUX0lORk9fTEFVTkNIID0KKyAgICAgICAgICAgICJhbmRyb2lkLmludGVudC5hY3Rpb24uQlVHUkVQT1JUX0lORk9fTEFVTkNIIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIElOVEVOVF9CVUdSRVBPUlRfU0NSRUVOU0hPVCA9CisgICAgICAgICAgICAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLkJVR1JFUE9SVF9TQ1JFRU5TSE9UIjsKIAogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQlVHUkVQT1JUID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLkJVR1JFUE9SVCI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQ1JFRU5TSE9UID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLlNDUkVFTlNIT1QiOwogICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUElEID0gImFuZHJvaWQuaW50ZW50LmV4dHJhLlBJRCI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9NQVggPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuTUFYIjsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX05BTUUgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuTkFNRSI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9USVRMRSA9ICJhbmRyb2lkLmludGVudC5leHRyYS5USVRMRSI7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ERVNDUklQVElPTiA9ICJhbmRyb2lkLmludGVudC5leHRyYS5ERVNDUklQVElPTiI7CiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9PUklHSU5BTF9JTlRFTlQgPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuT1JJR0lOQUxfSU5URU5UIjsKKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0lORk8gPSAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuSU5GTyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NFUlZJQ0VfQ09NTUFORCA9IDE7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19QT0xMID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0RFTEFZRURfU0NSRUVOU0hPVCA9IDM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19TQ1JFRU5TSE9UX1JFUVVFU1QgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfU0NSRUVOU0hPVF9SRVNQT05TRSA9IDU7CisKKyAgICAvKioKKyAgICAgKiBEZWxheSBiZWZvcmUgYSBzY3JlZW5zaG90IGlzIHRha2VuLgorICAgICAqIDxwPgorICAgICAqIFNob3VsZCBiZSBhdCBsZWFzdCAzIHNlY29uZHMsIG90aGVyd2lzZSBpdHMgdG9hc3QgbWlnaHQgc2hvdyB1cCBpbiB0aGUgc2NyZWVuc2hvdC4KKyAgICAgKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IFNDUkVFTlNIT1RfREVMQVlfU0VDT05EUyA9IDM7CiAKICAgICAvKiogUG9sbGluZyBmcmVxdWVuY3ksIGluIG1pbGxpc2Vjb25kcy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFBPTExJTkdfRlJFUVVFTkNZID0gNTAwOworICAgIHN0YXRpYyBmaW5hbCBsb25nIFBPTExJTkdfRlJFUVVFTkNZID0gMiAqIERhdGVVdGlscy5TRUNPTkRfSU5fTUlMTElTOwogCiAgICAgLyoqIEhvdyBsb25nIChpbiBtcykgYSBkdW1wc3RhdGUgcHJvY2VzcyB3aWxsIGJlIG1vbml0b3JlZCBpZiBpdCBkaWRuJ3Qgc2hvdyBwcm9ncmVzcy4gKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIElOQUNUSVZJVFlfVElNRU9VVCA9IDMgKiBEYXRlVXRpbHMuTUlOVVRFX0lOX01JTExJUzsKQEAgLTEyMCwzNSArMTYzLDYyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVTVBTVEFURV9QUkVGSVggPSAiZHVtcHN0YXRlLiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBST0dSRVNTX1NVRkZJWCA9ICIucHJvZ3Jlc3MiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfU1VGRklYID0gIi5tYXgiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1NVRkZJWCA9ICIubmFtZSI7CiAKLSAgICAvKiogU3lzdGVtIHByb3BlcnR5IChhbmQgdmFsdWUpIHVzZWQgZm9yIHN0b3AgZHVtcHN0YXRlLiAqLworICAgIC8qKiBTeXN0ZW0gcHJvcGVydHkgKGFuZCB2YWx1ZSkgdXNlZCB0byBzdG9wIGR1bXBzdGF0ZS4gKi8KKyAgICAvLyBUT0RPOiBzaG91bGQgY2FsbCBBY3RpdmVNYW5hZ2VyIEFQSSBpbnN0ZWFkCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENUTF9TVE9QID0gImN0bC5zdG9wIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHUkVQT1JUX1NFUlZJQ0UgPSAiYnVncmVwb3J0cGx1cyI7CiAKKyAgICAvKioKKyAgICAgKiBEaXJlY3Rvcnkgb24gU2hlbGwncyBkYXRhIHN0b3JhZ2Ugd2hlcmUgc2NyZWVuc2hvdHMgd2lsbCBiZSBzdG9yZWQuCisgICAgICogPHA+CisgICAgICogTXVzdCBiZSBhIHBhdGggc3VwcG9ydGVkIGJ5IGl0cyBGaWxlUHJvdmlkZXIuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDUkVFTlNIT1RfRElSID0gImJ1Z3JlcG9ydHMiOworCiAgICAgLyoqIE1hbmFnZWQgZHVtcHN0YXRlIHByb2Nlc3NlcyAoa2V5ZWQgYnkgcGlkKSAqLwogICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8QnVncmVwb3J0SW5mbz4gbVByb2Nlc3NlcyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CiAKLSAgICBwcml2YXRlIExvb3BlciBtU2VydmljZUxvb3BlcjsKLSAgICBwcml2YXRlIFNlcnZpY2VIYW5kbGVyIG1TZXJ2aWNlSGFuZGxlcjsKKyAgICBwcml2YXRlIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBTZXJ2aWNlSGFuZGxlciBtTWFpbkhhbmRsZXI7CisgICAgcHJpdmF0ZSBTY3JlZW5zaG90SGFuZGxlciBtU2NyZWVuc2hvdEhhbmRsZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIEJ1Z3JlcG9ydEluZm9EaWFsb2cgbUluZm9EaWFsb2cgPSBuZXcgQnVncmVwb3J0SW5mb0RpYWxvZygpOworCisgICAgcHJpdmF0ZSBGaWxlIG1TY3JlZW5zaG90c0RpcjsKKworICAgIC8qKgorICAgICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGEgc2NyZWVuc2hvdCBpcyBiZWluZyB0YWtlbi4KKyAgICAgKiA8cD4KKyAgICAgKiBUaGlzIGlzIHRoZSBvbmx5IHN0YXRlIHRoYXQgaXMgc2hhcmVkIGJldHdlZW4gdGhlIDIgaGFuZGxlcnMgYW5kIGhlbmNlIG11c3QgaGF2ZSBzeW5jaHJvbml6ZWQKKyAgICAgKiBhY2Nlc3MuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIG1UYWtpbmdTY3JlZW5zaG90OwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25DcmVhdGUoKSB7Ci0gICAgICAgIEhhbmRsZXJUaHJlYWQgdGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoIkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZVRocmVhZCIsCi0gICAgICAgICAgICAgICAgUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7Ci0gICAgICAgIHRocmVhZC5zdGFydCgpOworICAgICAgICBtQ29udGV4dCA9IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICBtTWFpbkhhbmRsZXIgPSBuZXcgU2VydmljZUhhbmRsZXIoIkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZU1haW5UaHJlYWQiKTsKKyAgICAgICAgbVNjcmVlbnNob3RIYW5kbGVyID0gbmV3IFNjcmVlbnNob3RIYW5kbGVyKCJCdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2VTY3JlZW5zaG90VGhyZWFkIik7CiAKLSAgICAgICAgbVNlcnZpY2VMb29wZXIgPSB0aHJlYWQuZ2V0TG9vcGVyKCk7Ci0gICAgICAgIG1TZXJ2aWNlSGFuZGxlciA9IG5ldyBTZXJ2aWNlSGFuZGxlcihtU2VydmljZUxvb3Blcik7CisgICAgICAgIG1TY3JlZW5zaG90c0RpciA9IG5ldyBGaWxlKG5ldyBDb250ZXh0V3JhcHBlcihtQ29udGV4dCkuZ2V0RmlsZXNEaXIoKSwgU0NSRUVOU0hPVF9ESVIpOworICAgICAgICBpZiAoIW1TY3JlZW5zaG90c0Rpci5leGlzdHMoKSkgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICIgKyBtU2NyZWVuc2hvdHNEaXIgKyAiIHRvIHN0b3JlIHRlbXBvcmFyeSBzY3JlZW5zaG90cyIpOworICAgICAgICAgICAgaWYgKCFtU2NyZWVuc2hvdHNEaXIubWtkaXIoKSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICIgKyBtU2NyZWVuc2hvdHNEaXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBvblN0YXJ0Q29tbWFuZChJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCBzdGFydElkKSB7CiAgICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gSGFuZGxlIGl0IGluIGEgc2VwYXJhdGUgdGhyZWFkLgotICAgICAgICAgICAgTWVzc2FnZSBtc2cgPSBtU2VydmljZUhhbmRsZXIub2J0YWluTWVzc2FnZSgpOworICAgICAgICAgICAgZmluYWwgTWVzc2FnZSBtc2cgPSBtTWFpbkhhbmRsZXIub2J0YWluTWVzc2FnZSgpOwogICAgICAgICAgICAgbXNnLndoYXQgPSBNU0dfU0VSVklDRV9DT01NQU5EOwogICAgICAgICAgICAgbXNnLm9iaiA9IGludGVudDsKLSAgICAgICAgICAgIG1TZXJ2aWNlSGFuZGxlci5zZW5kTWVzc2FnZShtc2cpOworICAgICAgICAgICAgbU1haW5IYW5kbGVyLnNlbmRNZXNzYWdlKG1zZyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBzZXJ2aWNlIGlzIGtpbGxlZCBpdCBjYW5ub3QgYmUgcmVjcmVhdGVkIGJlY2F1c2UgaXQgd291bGQgbm90IGtub3cgd2hpY2gKQEAgLTE2MywyNCArMjMzLDMxIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkRlc3Ryb3koKSB7Ci0gICAgICAgIG1TZXJ2aWNlTG9vcGVyLnF1aXQoKTsKKyAgICAgICAgbU1haW5IYW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKKyAgICAgICAgbVNjcmVlbnNob3RIYW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKICAgICAgICAgc3VwZXIub25EZXN0cm95KCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZHVtcChGaWxlRGVzY3JpcHRvciBmZCwgUHJpbnRXcml0ZXIgd3JpdGVyLCBTdHJpbmdbXSBhcmdzKSB7Ci0gICAgICAgIHdyaXRlci5wcmludGYoIk1vbml0b3JlZCBkdW1wc3RhdGUgcHJvY2Vzc2VzOiBcbiIpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVByb2Nlc3Nlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICB3cml0ZXIucHJpbnRmKCJcdCVzXG4iLCBtUHJvY2Vzc2VzLnZhbHVlQXQoaSkpOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IG1Qcm9jZXNzZXMuc2l6ZSgpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRmKCJObyBtb25pdG9yZWQgcHJvY2Vzc2VzIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd3JpdGVyLnByaW50ZigiTW9uaXRvcmVkIGR1bXBzdGF0ZSBwcm9jZXNzZXNcbiIpOworICAgICAgICB3cml0ZXIucHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB3cml0ZXIucHJpbnRmKCIlc1xuIiwgbVByb2Nlc3Nlcy52YWx1ZUF0KGkpKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIE1haW4gdGhyZWFkIHVzZWQgdG8gaGFuZGxlIGFsbCByZXF1ZXN0cyBidXQgdGFraW5nIHNjcmVlbnNob3RzLgorICAgICAqLwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU2VydmljZUhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKLSAgICAgICAgcHVibGljIFNlcnZpY2VIYW5kbGVyKExvb3BlciBsb29wZXIpIHsKLSAgICAgICAgICAgIHN1cGVyKGxvb3Blcik7Ci0gICAgICAgICAgICBwb2xsKCk7CisgICAgICAgIHB1YmxpYyBTZXJ2aWNlSGFuZGxlcihTdHJpbmcgbmFtZSkgeworICAgICAgICAgICAgc3VwZXIobmV3TG9vcGVyKG5hbWUpKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMTkwLDMxICsyNjcsNDAgQEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBNU0dfREVMQVlFRF9TQ1JFRU5TSE9UKSB7CisgICAgICAgICAgICAgICAgdGFrZVNjcmVlbnNob3QobXNnLmFyZzEsIG1zZy5hcmcyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBNU0dfU0NSRUVOU0hPVF9SRVNQT05TRSkgeworICAgICAgICAgICAgICAgIGhhbmRsZVNjcmVlbnNob3RSZXNwb25zZShtc2cpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKG1zZy53aGF0ICE9IE1TR19TRVJWSUNFX0NPTU1BTkQpIHsKICAgICAgICAgICAgICAgICAvLyBTYW5pdHkgY2hlY2suCiAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBtZXNzYWdlIHR5cGU6ICIgKyBtc2cud2hhdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0J3MgaGFuZGxpbmcgb25TdGFydENvbW1hbmQoKSwgd2hvc2UgaW50ZW50IGNvbnRhaW5zIHRoZSBleHRyYXMKLSAgICAgICAgICAgIC8vIG9yaWdpbmFsbHkgcmVjZWl2ZWQgYnkgQnVncmVwb3J0UmVjZWl2ZXIuCisgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGl0J3MgaGFuZGxpbmcgb25TdGFydENvbW1hbmQoKSwgd2l0aCB0aGUgaW50ZW50IHBhc3NlZCBhcyBhbiBFeHRyYS4KICAgICAgICAgICAgIGlmICghKG1zZy5vYmogaW5zdGFuY2VvZiBJbnRlbnQpKSB7CiAgICAgICAgICAgICAgICAgLy8gU2FuaXR5IGNoZWNrLgogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIkludGVybmFsIGVycm9yOiBpbnZhbGlkIG1zZy5vYmo6ICIgKyBtc2cub2JqKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBQYXJjZWxhYmxlIHBhcmNlbCA9ICgoSW50ZW50KSBtc2cub2JqKS5nZXRQYXJjZWxhYmxlRXh0cmEoRVhUUkFfT1JJR0lOQUxfSU5URU5UKTsKLSAgICAgICAgICAgIGlmICghKHBhcmNlbCBpbnN0YW5jZW9mIEludGVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTYW5pdHkgY2hlY2suCi0gICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW50ZXJuYWwgZXJyb3I6IG1zZy5vYmogaXMgbWlzc2luZyBleHRyYSAiICsgRVhUUkFfT1JJR0lOQUxfSU5URU5UKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50OworICAgICAgICAgICAgaWYgKHBhcmNlbCBpbnN0YW5jZW9mIEludGVudCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSByZWFsIGludGVudCB3YXMgcGFzc2VkIHRvIEJ1Z3JlcG9ydFJlY2VpdmVyLCB3aGljaCBkZWxlZ2F0ZWQgdG8gdGhlIHNlcnZpY2UuCisgICAgICAgICAgICAgICAgaW50ZW50ID0gKEludGVudCkgcGFyY2VsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnRlbnQgPSAoSW50ZW50KSBtc2cub2JqOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gKEludGVudCkgcGFyY2VsOwogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKLSAgICAgICAgICAgIGludCBwaWQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfUElELCAwKTsKLSAgICAgICAgICAgIGludCBtYXggPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfTUFYLCAtMSk7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9OQU1FKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBwaWQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfUElELCAwKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBtYXggPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfTUFYLCAtMSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9OQU1FKTsKIAogICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJhY3Rpb246ICIgKyBhY3Rpb24gKyAiLCBuYW1lOiAiICsgbmFtZSArICIsIHBpZDogIiArIHBpZAogICAgICAgICAgICAgICAgICAgICArICIsIG1heDogIisgbWF4KTsKQEAgLTIyNCwxNCArMzEwLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wU2VsZldoZW5Eb25lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcG9sbCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIElOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGRuJ3QgaGFwcGVuLCB1bmxlc3MgQlVHUkVQT1JUX0ZJTklTSEVEIGlzIHJlY2VpdmVkIGZyb20gYSBsZWdhY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2Ytc3luYyBkdW1wc3RhdGUgcHJvY2Vzcy4KICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk1pc3NpbmcgIiArIEVYVFJBX1BJRCArICIgb24gaW50ZW50ICIgKyBpbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9ncmVzcyhwaWQsIGludGVudCk7CisgICAgICAgICAgICAgICAgICAgIG9uQnVncmVwb3J0RmluaXNoZWQocGlkLCBpbnRlbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElOVEVOVF9CVUdSRVBPUlRfSU5GT19MQVVOQ0g6CisgICAgICAgICAgICAgICAgICAgIGxhdW5jaEJ1Z3JlcG9ydEluZm9EaWFsb2cocGlkKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJTlRFTlRfQlVHUkVQT1JUX1NDUkVFTlNIT1Q6CisgICAgICAgICAgICAgICAgICAgIHRha2VTY3JlZW5zaG90KHBpZCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSU5URU5UX0JVR1JFUE9SVF9TSEFSRToKKyAgICAgICAgICAgICAgICAgICAgc2hhcmVCdWdyZXBvcnQocGlkLCAoQnVncmVwb3J0SW5mbykgaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShFWFRSQV9JTkZPKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgSU5URU5UX0JVR1JFUE9SVF9DQU5DRUw6CiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbChwaWQpOwpAQCAtMjQ3LDExICszNDMsMzkgQEAKICAgICAgICAgICAgIGlmIChwb2xsUHJvZ3Jlc3MoKSkgewogICAgICAgICAgICAgICAgIC8vIEtlZXAgcG9sbGluZy4uLgogICAgICAgICAgICAgICAgIHNlbmRFbXB0eU1lc3NhZ2VEZWxheWVkKE1TR19QT0xMLCBQT0xMSU5HX0ZSRVFVRU5DWSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIlN0b3BwZWQgcG9sbGluZyIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCisgICAgICogU2VwYXJhdGUgdGhyZWFkIHVzZWQgb25seSB0byB0YWtlIHNjcmVlbnNob3RzIHNvIGl0IGRvZXNuJ3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU2NyZWVuc2hvdEhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHsKKyAgICAgICAgcHVibGljIFNjcmVlbnNob3RIYW5kbGVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICBzdXBlcihuZXdMb29wZXIobmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgICAgIGlmIChtc2cud2hhdCAhPSBNU0dfU0NSRUVOU0hPVF9SRVFVRVNUKSB7CisgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBtZXNzYWdlIHR5cGU6ICIgKyBtc2cud2hhdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlU2NyZWVuc2hvdFJlcXVlc3QobXNnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgQnVncmVwb3J0SW5mbyBnZXRJbmZvKGludCBwaWQpIHsKKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gbVByb2Nlc3Nlcy5nZXQocGlkKTsKKyAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiTm90IG1vbml0b3JpbmcgcHJvY2VzcyB3aXRoIFBJRCAiICsgcGlkKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5mbzsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDcmVhdGVzIHRoZSB7QGxpbmsgQnVncmVwb3J0SW5mb30gZm9yIGEgcHJvY2VzcyBhbmQgaXNzdWUgYSBzeXN0ZW0gbm90aWZpY2F0aW9uIHRvCiAgICAgICogaW5kaWNhdGUgaXRzIHByb2dyZXNzLgogICAgICAqCkBAIC0yNzAsMjAgKzM5NCwyMCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gbmV3IEJ1Z3JlcG9ydEluZm8oZ2V0QXBwbGljYXRpb25Db250ZXh0KCksIHBpZCwgbmFtZSwgbWF4KTsKLSAgICAgICAgc3luY2hyb25pemVkIChtUHJvY2Vzc2VzKSB7Ci0gICAgICAgICAgICBpZiAobVByb2Nlc3Nlcy5pbmRleE9mS2V5KHBpZCkgPj0gMCkgewotICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlBJRCAiICsgcGlkICsgIiBhbHJlYWR5IHdhdGNoZWQiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVByb2Nlc3Nlcy5wdXQoaW5mby5waWQsIGluZm8pOwotICAgICAgICAgICAgfQorICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBuZXcgQnVncmVwb3J0SW5mbyhtQ29udGV4dCwgcGlkLCBuYW1lLCBtYXgpOworICAgICAgICBpZiAobVByb2Nlc3Nlcy5pbmRleE9mS2V5KHBpZCkgPj0gMCkgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiUElEICIgKyBwaWQgKyAiIGFscmVhZHkgd2F0Y2hlZCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVByb2Nlc3Nlcy5wdXQoaW5mby5waWQsIGluZm8pOwogICAgICAgICB9CisgICAgICAgIC8vIFRha2UgaW5pdGlhbCBzY3JlZW5zaG90LgorICAgICAgICB0YWtlU2NyZWVuc2hvdChwaWQsIGZhbHNlKTsKICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoaW5mbyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFVwZGF0ZXMgdGhlIHN5c3RlbSBub3RpZmljYXRpb24gZm9yIGEgZ2l2ZW4gYnVnIHJlcG9ydC4KKyAgICAgKiBVcGRhdGVzIHRoZSBzeXN0ZW0gbm90aWZpY2F0aW9uIGZvciBhIGdpdmVuIGJ1Z3JlcG9ydC4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdXBkYXRlUHJvZ3Jlc3MoQnVncmVwb3J0SW5mbyBpbmZvKSB7CiAgICAgICAgIGlmIChpbmZvLm1heCA8PSAwIHx8IGluZm8ucHJvZ3Jlc3MgPCAwKSB7CkBAIC0yOTEsMjUgKzQxNSwzNSBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7CiAgICAgICAgIGZpbmFsIE51bWJlckZvcm1hdCBuZiA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoKTsKICAgICAgICAgbmYuc2V0TWluaW11bUZyYWN0aW9uRGlnaXRzKDIpOwogICAgICAgICBuZi5zZXRNYXhpbXVtRnJhY3Rpb25EaWdpdHMoMik7CiAgICAgICAgIGZpbmFsIFN0cmluZyBwZXJjZW50VGV4dCA9IG5mLmZvcm1hdCgoZG91YmxlKSBpbmZvLnByb2dyZXNzIC8gaW5mby5tYXgpOworICAgICAgICBmaW5hbCBBY3Rpb24gY2FuY2VsQWN0aW9uID0gbmV3IEFjdGlvbi5CdWlsZGVyKG51bGwsIG1Db250ZXh0LmdldFN0cmluZygKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jYW5jZWwpLCBuZXdDYW5jZWxJbnRlbnQobUNvbnRleHQsIGluZm8pKS5idWlsZCgpOworICAgICAgICBmaW5hbCBJbnRlbnQgaW5mb0ludGVudCA9IG5ldyBJbnRlbnQobUNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CisgICAgICAgIGluZm9JbnRlbnQuc2V0QWN0aW9uKElOVEVOVF9CVUdSRVBPUlRfSU5GT19MQVVOQ0gpOworICAgICAgICBpbmZvSW50ZW50LnB1dEV4dHJhKEVYVFJBX1BJRCwgaW5mby5waWQpOworICAgICAgICBmaW5hbCBBY3Rpb24gaW5mb0FjdGlvbiA9IG5ldyBBY3Rpb24uQnVpbGRlcihudWxsLAorICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfaW5mb19hY3Rpb24pLAorICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0U2VydmljZShtQ29udGV4dCwgaW5mby5waWQsIGluZm9JbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfVVBEQVRFX0NVUlJFTlQpKS5idWlsZCgpOworICAgICAgICBmaW5hbCBJbnRlbnQgc2NyZWVuc2hvdEludGVudCA9IG5ldyBJbnRlbnQobUNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CisgICAgICAgIHNjcmVlbnNob3RJbnRlbnQuc2V0QWN0aW9uKElOVEVOVF9CVUdSRVBPUlRfU0NSRUVOU0hPVCk7CisgICAgICAgIHNjcmVlbnNob3RJbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCBpbmZvLnBpZCk7CisgICAgICAgIFBlbmRpbmdJbnRlbnQgc2NyZWVuc2hvdFBlbmRpbmdJbnRlbnQgPSBtVGFraW5nU2NyZWVuc2hvdCA/IG51bGwgOiBQZW5kaW5nSW50ZW50CisgICAgICAgICAgICAgICAgLmdldFNlcnZpY2UobUNvbnRleHQsIGluZm8ucGlkLCBzY3JlZW5zaG90SW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5GTEFHX1VQREFURV9DVVJSRU5UKTsKKyAgICAgICAgZmluYWwgQWN0aW9uIHNjcmVlbnNob3RBY3Rpb24gPSBuZXcgQWN0aW9uLkJ1aWxkZXIobnVsbCwKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uKSwKKyAgICAgICAgICAgICAgICBzY3JlZW5zaG90UGVuZGluZ0ludGVudCkuYnVpbGQoKTsKIAotICAgICAgICBmaW5hbCBJbnRlbnQgY2FuY2VsSW50ZW50ID0gbmV3IEludGVudChjb250ZXh0LCBCdWdyZXBvcnRSZWNlaXZlci5jbGFzcyk7Ci0gICAgICAgIGNhbmNlbEludGVudC5zZXRBY3Rpb24oSU5URU5UX0JVR1JFUE9SVF9DQU5DRUwpOwotICAgICAgICBjYW5jZWxJbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCBpbmZvLnBpZCk7Ci0gICAgICAgIGZpbmFsIEFjdGlvbiBjYW5jZWxBY3Rpb24gPSBuZXcgQWN0aW9uLkJ1aWxkZXIobnVsbCwKLSAgICAgICAgICAgICAgICBjb250ZXh0LmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jYW5jZWwpLAotICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KGNvbnRleHQsIGluZm8ucGlkLCBjYW5jZWxJbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQpKS5idWlsZCgpOworICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlKTsKIAotICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfaW5fcHJvZ3Jlc3NfdGl0bGUpOwogICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9Ci0gICAgICAgICAgICAgICAgaW5mby5uYW1lICE9IG51bGwgPyBpbmZvLm5hbWUgOiBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfdW5uYW1lZCk7CisgICAgICAgICAgICAgICAgaW5mby5uYW1lICE9IG51bGwgPyBpbmZvLm5hbWUgOiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X3VubmFtZWQpOwogCi0gICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoY29udGV4dCkKKyAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihtQ29udGV4dCkKICAgICAgICAgICAgICAgICAuc2V0U21hbGxJY29uKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZHJhd2FibGUuc3RhdF9zeXNfYWRiKQogICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUodGl0bGUpCiAgICAgICAgICAgICAgICAgLnNldFRpY2tlcih0aXRsZSkKQEAgLTMxOCw0MiArNDUyLDU5IEBACiAgICAgICAgICAgICAgICAgLnNldFByb2dyZXNzKGluZm8ubWF4LCBpbmZvLnByb2dyZXNzLCBmYWxzZSkKICAgICAgICAgICAgICAgICAuc2V0T25nb2luZyh0cnVlKQogICAgICAgICAgICAgICAgIC5zZXRMb2NhbE9ubHkodHJ1ZSkKLSAgICAgICAgICAgICAgICAuc2V0Q29sb3IoY29udGV4dC5nZXRDb2xvcigKKyAgICAgICAgICAgICAgICAuc2V0Q29sb3IobUNvbnRleHQuZ2V0Q29sb3IoCiAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmNvbG9yLnN5c3RlbV9ub3RpZmljYXRpb25fYWNjZW50X2NvbG9yKSkKKyAgICAgICAgICAgICAgICAuYWRkQWN0aW9uKGluZm9BY3Rpb24pCisgICAgICAgICAgICAgICAgLmFkZEFjdGlvbihzY3JlZW5zaG90QWN0aW9uKQogICAgICAgICAgICAgICAgIC5hZGRBY3Rpb24oY2FuY2VsQWN0aW9uKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwogCi0gICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShjb250ZXh0KS5ub3RpZnkoVEFHLCBpbmZvLnBpZCwgbm90aWZpY2F0aW9uKTsKKyAgICAgICAgaWYgKGluZm8uZmluaXNoZWQpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIk5vdCBzZW5kaW5nIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBiZWNhdXNlIGJ1Z3JlcG9ydCBoYXMgZmluaXNoZWQgYWxyZWFkeSAoIgorICAgICAgICAgICAgICAgICAgICArIGluZm8gKyAiKSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShtQ29udGV4dCkubm90aWZ5KFRBRywgaW5mby5waWQsIG5vdGlmaWNhdGlvbik7CiAgICAgfQogCiAgICAgLyoqCi0gICAgICogRmluYWxpemVzIHRoZSBwcm9ncmVzcyBvbiBhIGdpdmVuIHByb2Nlc3MgYW5kIHNlbmRzIHRoZSBmaW5pc2hlZCBpbnRlbnQuCisgICAgICogQ3JlYXRlcyBhIHtAbGluayBQZW5kaW5nSW50ZW50fSBmb3IgYSBub3RpZmljYXRpb24gYWN0aW9uIHVzZWQgdG8gY2FuY2VsIGEgYnVncmVwb3J0LgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzdG9wUHJvZ3Jlc3MoaW50IHBpZCwgSW50ZW50IGludGVudCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChtUHJvY2Vzc2VzLmluZGV4T2ZLZXkocGlkKSA8IDApIHsKLSAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJQSUQgbm90IHdhdGNoZWQ6ICIgKyBwaWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUHJvY2Vzc2VzLnJlbW92ZShwaWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RvcFNlbGZXaGVuRG9uZSgpOworICAgIHByaXZhdGUgc3RhdGljIFBlbmRpbmdJbnRlbnQgbmV3Q2FuY2VsSW50ZW50KENvbnRleHQgY29udGV4dCwgQnVncmVwb3J0SW5mbyBpbmZvKSB7CisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KElOVEVOVF9CVUdSRVBPUlRfQ0FOQ0VMKTsKKyAgICAgICAgaW50ZW50LnNldENsYXNzKGNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9QSUQsIGluZm8ucGlkKTsKKyAgICAgICAgcmV0dXJuIFBlbmRpbmdJbnRlbnQuZ2V0U2VydmljZShjb250ZXh0LCBpbmZvLnBpZCwgaW50ZW50LAorICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19VUERBVEVfQ1VSUkVOVCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogRmluYWxpemVzIHRoZSBwcm9ncmVzcyBvbiBhIGdpdmVuIGJ1Z3JlcG9ydCBhbmQgY2FuY2VsIGl0cyBub3RpZmljYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHN0b3BQcm9ncmVzcyhpbnQgcGlkKSB7CisgICAgICAgIGlmIChtUHJvY2Vzc2VzLmluZGV4T2ZLZXkocGlkKSA8IDApIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIlBJRCBub3Qgd2F0Y2hlZDogIiArIHBpZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJSZW1vdmluZyBQSUQgIiArIHBpZCk7CisgICAgICAgICAgICBtUHJvY2Vzc2VzLnJlbW92ZShwaWQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAic3RvcFByb2dyZXNzKCIgKyBwaWQgKyAiKTogY2FuY2VsIG5vdGlmaWNhdGlvbiIpOwotICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLmZyb20oZ2V0QXBwbGljYXRpb25Db250ZXh0KCkpLmNhbmNlbChUQUcsIHBpZCk7Ci0gICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gQnVnIHJlcG9ydCBmaW5pc2hlZCBmaW5lOiBzZW5kIGEgbmV3LCBkaWZmZXJlbnQgbm90aWZpY2F0aW9uLgotICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJzdG9wUHJvZ3Jlc3MoIiArIHBpZCArICIpOiBmaW5pc2ggYnVnIHJlcG9ydCIpOwotICAgICAgICAgICAgb25CdWdyZXBvcnRGaW5pc2hlZChwaWQsIGludGVudCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RvcFNlbGZXaGVuRG9uZSgpOworICAgICAgICBMb2cudihUQUcsICJzdG9wUHJvZ3Jlc3MoIiArIHBpZCArICIpOiBjYW5jZWwgbm90aWZpY2F0aW9uIik7CisgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShtQ29udGV4dCkuY2FuY2VsKFRBRywgcGlkKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBDYW5jZWxzIGEgYnVncmVwb3J0IHVwb24gdXNlcidzIHJlcXVlc3QuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbChpbnQgcGlkKSB7Ci0gICAgICAgIExvZy5pKFRBRywgIkNhbmNlbGxpbmcgUElEICIgKyBwaWQgKyAiIG9uIHVzZXIncyByZXF1ZXN0Iik7Ci0gICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KENUTF9TVE9QLCBCVUdSRVBPUlRfU0VSVklDRSk7Ci0gICAgICAgIHN0b3BQcm9ncmVzcyhwaWQsIG51bGwpOworICAgICAgICBMb2cudihUQUcsICJjYW5jZWw6IHBpZD0iICsgcGlkKTsKKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyAhPSBudWxsICYmICFpbmZvLmZpbmlzaGVkKSB7CisgICAgICAgICAgICBMb2cuaShUQUcsICJDYW5jZWxsaW5nIGJ1Z3JlcG9ydCBzZXJ2aWNlIChwaWQ9IiArIHBpZCArICIpIG9uIHVzZXIncyByZXF1ZXN0Iik7CisgICAgICAgICAgICBzZXRTeXN0ZW1Qcm9wZXJ0eShDVExfU1RPUCwgQlVHUkVQT1JUX1NFUlZJQ0UpOworICAgICAgICAgICAgZGVsZXRlU2NyZWVuc2hvdHMoaW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgc3RvcFByb2dyZXNzKHBpZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNjIsNDYgKzUxMywxOTMgQEAKICAgICAgKiBAcmV0dXJuIHdoZXRoZXIgaXQgc2hvdWxkIGtlZXAgcG9sbGluZy4KICAgICAgKi8KICAgICBwcml2YXRlIGJvb2xlYW4gcG9sbFByb2dyZXNzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1Qcm9jZXNzZXMpIHsKLSAgICAgICAgICAgIGlmIChtUHJvY2Vzc2VzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm8gcHJvY2VzcyB0byBwb2xsIHByb2dyZXNzLiIpOworICAgICAgICBmaW5hbCBpbnQgdG90YWwgPSBtUHJvY2Vzc2VzLnNpemUoKTsKKyAgICAgICAgaWYgKHRvdGFsID09IDApIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIk5vIHByb2Nlc3MgdG8gcG9sbCBwcm9ncmVzcy4iKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYWN0aXZlUHJvY2Vzc2VzID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgcGlkID0gbVByb2Nlc3Nlcy5rZXlBdChpKTsKKyAgICAgICAgICAgIGZpbmFsIEJ1Z3JlcG9ydEluZm8gaW5mbyA9IG1Qcm9jZXNzZXMudmFsdWVBdChpKTsKKyAgICAgICAgICAgIGlmIChpbmZvLmZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJTa2lwcGluZyBmaW5pc2hlZCBwcm9jZXNzICIgKyBwaWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYWN0aXZlUHJvY2Vzc2VzKys7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcHJvZ3Jlc3NLZXkgPSBEVU1QU1RBVEVfUFJFRklYICsgcGlkICsgUFJPR1JFU1NfU1VGRklYOworICAgICAgICAgICAgZmluYWwgaW50IHByb2dyZXNzID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQocHJvZ3Jlc3NLZXksIDApOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID09IDApIHsKKyAgICAgICAgICAgICAgICBMb2cudihUQUcsICJTeXN0ZW0gcHJvcGVydHkgIiArIHByb2dyZXNzS2V5ICsgIiBpcyBub3Qgc2V0IHlldCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgaW50IG1heCA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0SW50KERVTVBTVEFURV9QUkVGSVggKyBwaWQgKyBNQVhfU1VGRklYLCAwKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbWF4Q2hhbmdlZCA9IG1heCA+IDAgJiYgbWF4ICE9IGluZm8ubWF4OworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBwcm9ncmVzc0NoYW5nZWQgPSBwcm9ncmVzcyA+IDAgJiYgcHJvZ3Jlc3MgIT0gaW5mby5wcm9ncmVzczsKKworICAgICAgICAgICAgaWYgKHByb2dyZXNzQ2hhbmdlZCB8fCBtYXhDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgIlVwZGF0aW5nIHByb2dyZXNzIGZvciBQSUQgIiArIHBpZCArICIgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnByb2dyZXNzICsgIiB0byAiICsgcHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgICAgICBpbmZvLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtYXhDaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgIlVwZGF0aW5nIG1heCBwcm9ncmVzcyBmb3IgUElEICIgKyBwaWQgKyAiIGZyb20gIiArIGluZm8ubWF4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRvICIgKyBtYXgpOworICAgICAgICAgICAgICAgICAgICBpbmZvLm1heCA9IG1heDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5mby5sYXN0VXBkYXRlID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoaW5mbyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxvbmcgaW5hY3RpdmVUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBpbmZvLmxhc3RVcGRhdGU7CisgICAgICAgICAgICAgICAgaWYgKGluYWN0aXZlVGltZSA+PSBJTkFDVElWSVRZX1RJTUVPVVQpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTm8gcHJvZ3Jlc3MgdXBkYXRlIGZvciBwcm9jZXNzICIgKyBwaWQgKyAiIHNpbmNlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8uZ2V0Rm9ybWF0dGVkTGFzdFVwZGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RvcFByb2dyZXNzKGluZm8ucGlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJwb2xsUHJvZ3Jlc3MoKSB0b3RhbD0iICsgdG90YWwgKyAiLCBhY3RpdmVzPSIgKyBhY3RpdmVQcm9jZXNzZXMpOworICAgICAgICByZXR1cm4gYWN0aXZlUHJvY2Vzc2VzID4gMDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGZXRjaGVzIGEge0BsaW5rIEJ1Z3JlcG9ydEluZm99IGZvciBhIGdpdmVuIHByb2Nlc3MgYW5kIGxhdW5jaGVzIGEgZGlhbG9nIHdoZXJlIHRoZSB1c2VyIGNhbgorICAgICAqIGNoYW5nZSBpdHMgdmFsdWVzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBsYXVuY2hCdWdyZXBvcnRJbmZvRGlhbG9nKGludCBwaWQpIHsKKyAgICAgICAgLy8gQ29weSB2YWx1ZXMgc28gaXQgZG9lc24ndCBsb2NrIG1Qcm9jZXNzZXMgd2hpbGUgVUkgaXMgYmVpbmcgdXBkYXRlZAorICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSwgdGl0bGUsIGRlc2NyaXB0aW9uOworICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHBpZCk7CisgICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gaW5mby5uYW1lOworICAgICAgICB0aXRsZSA9IGluZm8udGl0bGU7CisgICAgICAgIGRlc2NyaXB0aW9uID0gaW5mby5kZXNjcmlwdGlvbjsKKworICAgICAgICBjb2xsYXBzZU5vdGlmaWNhdGlvbkJhcigpOworICAgICAgICBtSW5mb0RpYWxvZy5pbml0aWFsaXplKG1Db250ZXh0LCBwaWQsIG5hbWUsIHRpdGxlLCBkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnRpbmcgcG9pbnQgZm9yIHRha2luZyBhIHNjcmVlbnNob3QuCisgICAgICogPHA+CisgICAgICogSWYge0Bjb2RlIGRlbGF5ZWR9IGlzIHNldCwgaXQgZmlyc3QgZGlzcGxheSBhIHRvYXN0IG1lc3NhZ2UgYW5kIHdhaXRzCisgICAgICoge0BsaW5rICNTQ1JFRU5TSE9UX0RFTEFZX1NFQ09ORFN9IHNlY29uZHMgYmVmb3JlIHRha2luZyBpdCwgb3RoZXJ3aXNlIGl0IHRha2VzIHRoZSBzY3JlZW5zaG90CisgICAgICogcmlnaHQgYXdheS4KKyAgICAgKiA8cD4KKyAgICAgKiBUeXBpY2FsIHVzYWdlIGlzIGRlbGF5aW5nIHdoZW4gdGFrZW4gZnJvbSB0aGUgbm90aWZpY2F0aW9uIGFjdGlvbiwgYW5kIHRha2luZyBpdCByaWdodCBhd2F5CisgICAgICogdXBvbiByZWNlaXZpbmcgYSB7QGxpbmsgI0lOVEVOVF9CVUdSRVBPUlRfU1RBUlRFRH0uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHRha2VTY3JlZW5zaG90KGludCBwaWQsIGJvb2xlYW4gZGVsYXllZCkgeworICAgICAgICBzZXRUYWtpbmdTY3JlZW5zaG90KHRydWUpOworICAgICAgICBpZiAoZGVsYXllZCkgeworICAgICAgICAgICAgY29sbGFwc2VOb3RpZmljYXRpb25CYXIoKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKQorICAgICAgICAgICAgICAgICAgICAuZ2V0UXVhbnRpdHlTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5wbHVyYWxzLmJ1Z3JlcG9ydF9jb3VudGRvd24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTLCBTQ1JFRU5TSE9UX0RFTEFZX1NFQ09ORFMpOworICAgICAgICAgICAgTG9nLmkoVEFHLCBtc2cpOworICAgICAgICAgICAgLy8gU2hvdyBhIHRvYXN0IGp1c3Qgb25jZSwgb3RoZXJ3aXNlIGl0IG1pZ2h0IGJlIGNhcHR1cmVkIGluIHRoZSBzY3JlZW5zaG90LgorICAgICAgICAgICAgVG9hc3QubWFrZVRleHQobUNvbnRleHQsIG1zZywgVG9hc3QuTEVOR1RIX1NIT1JUKS5zaG93KCk7CisKKyAgICAgICAgICAgIHRha2VTY3JlZW5zaG90KHBpZCwgU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRha2VTY3JlZW5zaG90KHBpZCwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIHNjcmVlbnNob3QgYWZ0ZXIge0Bjb2RlIGRlbGF5fSBzZWNvbmRzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB0YWtlU2NyZWVuc2hvdChpbnQgcGlkLCBpbnQgZGVsYXkpIHsKKyAgICAgICAgaWYgKGRlbGF5ID4gMCkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiVGFraW5nIHNjcmVlbnNob3QgZm9yICIgKyBwaWQgKyAiIGluICIgKyBkZWxheSArICIgc2Vjb25kcyIpOworICAgICAgICAgICAgZmluYWwgTWVzc2FnZSBtc2cgPSBtTWFpbkhhbmRsZXIub2J0YWluTWVzc2FnZSgpOworICAgICAgICAgICAgbXNnLndoYXQgPSBNU0dfREVMQVlFRF9TQ1JFRU5TSE9UOworICAgICAgICAgICAgbXNnLmFyZzEgPSBwaWQ7CisgICAgICAgICAgICBtc2cuYXJnMiA9IGRlbGF5IC0gMTsKKyAgICAgICAgICAgIG1NYWluSGFuZGxlci5zZW5kTWVzc2FnZURlbGF5ZWQobXNnLCBEYXRlVXRpbHMuU0VDT05EX0lOX01JTExJUyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJdCdzIHRpbWUgdG8gdGFrZSB0aGUgc2NyZWVuc2hvdDogbGV0IHRoZSBwcm9wZXIgdGhyZWFkIGhhbmRsZSBpdAorICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHBpZCk7CisgICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBTdHJpbmcgc2NyZWVuc2hvdFBhdGggPQorICAgICAgICAgICAgICAgIG5ldyBGaWxlKG1TY3JlZW5zaG90c0RpciwgaW5mby5nZXRQYXRoTmV4dFNjcmVlbnNob3QoKSkuZ2V0QWJzb2x1dGVQYXRoKCk7CisKKyAgICAgICAgZmluYWwgTWVzc2FnZSByZXF1ZXN0TXNnID0gbmV3IE1lc3NhZ2UoKTsKKyAgICAgICAgcmVxdWVzdE1zZy53aGF0ID0gTVNHX1NDUkVFTlNIT1RfUkVRVUVTVDsKKyAgICAgICAgcmVxdWVzdE1zZy5hcmcxID0gcGlkOworICAgICAgICByZXF1ZXN0TXNnLm9iaiA9IHNjcmVlbnNob3RQYXRoOworICAgICAgICBtU2NyZWVuc2hvdEhhbmRsZXIuc2VuZE1lc3NhZ2UocmVxdWVzdE1zZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgaW50ZXJuYWwge0Bjb2RlIG1UYWtpbmdTY3JlZW5zaG90fSBzdGF0ZSBhbmQgdXBkYXRlcyBhbGwgbm90aWZpY2F0aW9ucyBzbyB0aGVpcgorICAgICAqIFNDUkVFTlNIT1QgYnV0dG9uIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYWNjb3JkaW5nbHkuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNldFRha2luZ1NjcmVlbnNob3QoYm9vbGVhbiBmbGFnKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAoQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLnRoaXMpIHsKKyAgICAgICAgICAgIG1UYWtpbmdTY3JlZW5zaG90ID0gZmxhZzsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVByb2Nlc3Nlcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCBwaWQgPSBtUHJvY2Vzc2VzLmtleUF0KGkpOwotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwcm9ncmVzc0tleSA9IERVTVBTVEFURV9QUkVGSVggKyBwaWQgKyBQUk9HUkVTU19TVUZGSVg7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHByb2dyZXNzID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQocHJvZ3Jlc3NLZXksIDApOwotICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIlN5c3RlbSBwcm9wZXJ0eSAiICsgcHJvZ3Jlc3NLZXkgKyAiIGlzIG5vdCBzZXQgeWV0Iik7CisgICAgICAgICAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gbVByb2Nlc3Nlcy52YWx1ZUF0KGkpOworICAgICAgICAgICAgICAgIGlmIChpbmZvLmZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5vdCB1cGRhdGluZyBwcm9ncmVzcyBiZWNhdXNlIHNoYXJlIG5vdGlmaWNhdGlvbiB3YXMgYWxyZWFkeSBzZW50Iik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbWF4ID0gU3lzdGVtUHJvcGVydGllcy5nZXRJbnQoRFVNUFNUQVRFX1BSRUZJWCArIHBpZCArIE1BWF9TVUZGSVgsIDApOwotICAgICAgICAgICAgICAgIGZpbmFsIEJ1Z3JlcG9ydEluZm8gaW5mbyA9IG1Qcm9jZXNzZXMudmFsdWVBdChpKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIG1heENoYW5nZWQgPSBtYXggPiAwICYmIG1heCAhPSBpbmZvLm1heDsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHByb2dyZXNzQ2hhbmdlZCA9IHByb2dyZXNzID4gMCAmJiBwcm9ncmVzcyAhPSBpbmZvLnByb2dyZXNzOwotCi0gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzQ2hhbmdlZCB8fCBtYXhDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9ncmVzc0NoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiVXBkYXRpbmcgcHJvZ3Jlc3MgZm9yIFBJRCAiICsgcGlkICsgIiBmcm9tICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnByb2dyZXNzICsgIiB0byAiICsgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5wcm9ncmVzcyA9IHByb2dyZXNzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXhDaGFuZ2VkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuaShUQUcsICJVcGRhdGluZyBtYXggcHJvZ3Jlc3MgZm9yIFBJRCAiICsgcGlkICsgIiBmcm9tICIgKyBpbmZvLm1heAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdG8gIiArIG1heCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm1heCA9IG1heDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpbmZvLmxhc3RVcGRhdGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoaW5mbyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9uZyBpbmFjdGl2ZVRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGluZm8ubGFzdFVwZGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluYWN0aXZlVGltZSA+PSBJTkFDVElWSVRZX1RJTUVPVVQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5vIHByb2dyZXNzIHVwZGF0ZSBmb3IgcHJvY2VzcyAiICsgcGlkICsgIiBzaW5jZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW5mby5nZXRGb3JtYXR0ZWRMYXN0VXBkYXRlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb2dyZXNzKGluZm8ucGlkLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cGRhdGVQcm9ncmVzcyhpbmZvKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVNjcmVlbnNob3RSZXF1ZXN0KE1lc3NhZ2UgcmVxdWVzdE1zZykgeworICAgICAgICBTdHJpbmcgc2NyZWVuc2hvdEZpbGUgPSAoU3RyaW5nKSByZXF1ZXN0TXNnLm9iajsKKyAgICAgICAgYm9vbGVhbiB0YWtlbiA9IHRha2VTY3JlZW5zaG90KG1Db250ZXh0LCBzY3JlZW5zaG90RmlsZSk7CisgICAgICAgIHNldFRha2luZ1NjcmVlbnNob3QoZmFsc2UpOworCisgICAgICAgIGZpbmFsIE1lc3NhZ2UgcmVzdWx0TXNnID0gbmV3IE1lc3NhZ2UoKTsKKyAgICAgICAgcmVzdWx0TXNnLndoYXQgPSBNU0dfU0NSRUVOU0hPVF9SRVNQT05TRTsKKyAgICAgICAgcmVzdWx0TXNnLmFyZzEgPSByZXF1ZXN0TXNnLmFyZzE7CisgICAgICAgIHJlc3VsdE1zZy5hcmcyID0gdGFrZW4gPyAxIDogMDsKKyAgICAgICAgcmVzdWx0TXNnLm9iaiA9IHNjcmVlbnNob3RGaWxlOworICAgICAgICBtTWFpbkhhbmRsZXIuc2VuZE1lc3NhZ2UocmVzdWx0TXNnKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlU2NyZWVuc2hvdFJlc3BvbnNlKE1lc3NhZ2UgcmVzdWx0TXNnKSB7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gdGFrZW4gPSByZXN1bHRNc2cuYXJnMiAhPSAwOworICAgICAgICBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHJlc3VsdE1zZy5hcmcxKTsKKyAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZpbmFsIEZpbGUgc2NyZWVuc2hvdEZpbGUgPSBuZXcgRmlsZSgoU3RyaW5nKSByZXN1bHRNc2cub2JqKTsKKworICAgICAgICBmaW5hbCBpbnQgbXNnSWQ7CisgICAgICAgIGlmICh0YWtlbikgeworICAgICAgICAgICAgaW5mby5hZGRTY3JlZW5zaG90KHNjcmVlbnNob3RGaWxlKTsKKyAgICAgICAgICAgIGlmIChpbmZvLmZpbmlzaGVkKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2NyZWVuc2hvdCBmaW5pc2hlZCBhZnRlciBidWdyZXBvcnQ7IHVwZGF0aW5nIHNoYXJlIG5vdGlmaWNhdGlvbiIpOworICAgICAgICAgICAgICAgIGluZm8ucmVuYW1lU2NyZWVuc2hvdHMobVNjcmVlbnNob3RzRGlyKTsKKyAgICAgICAgICAgICAgICBzZW5kQnVncmVwb3J0Tm90aWZpY2F0aW9uKG1Db250ZXh0LCBpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1zZ0lkID0gUi5zdHJpbmcuYnVncmVwb3J0X3NjcmVlbnNob3RfdGFrZW47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUT0RPOiB0cnkgYWdhaW4gdXNpbmcgRnJhbWV3b3JrIEFQSXMgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHNjcmVlbmNhcC4KKyAgICAgICAgICAgIG1zZ0lkID0gUi5zdHJpbmcuYnVncmVwb3J0X3NjcmVlbnNob3RfZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSBtQ29udGV4dC5nZXRTdHJpbmcobXNnSWQpOworICAgICAgICBMb2cuZChUQUcsIG1zZyk7CisgICAgICAgIFRvYXN0Lm1ha2VUZXh0KG1Db250ZXh0LCBtc2csIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOworICAgIH0KKworICAgIC8qKgorICAgICAqIERlbGV0ZXMgYWxsIHNjcmVlbnNob3RzIHRha2VuIGZvciBhIGdpdmVuIGJ1Z3JlcG9ydC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlU2NyZWVuc2hvdHMoQnVncmVwb3J0SW5mbyBpbmZvKSB7CisgICAgICAgIGZvciAoRmlsZSBmaWxlIDogaW5mby5zY3JlZW5zaG90RmlsZXMpIHsKKyAgICAgICAgICAgIExvZy5pKFRBRywgIkRlbGV0aW5nIHNjcmVlbnNob3QgZmlsZSAiICsgZmlsZSk7CisgICAgICAgICAgICBmaWxlLmRlbGV0ZSgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MDksNDkgKzcwNyw2MSBAQAogICAgICAqIEZpbmlzaGVzIHRoZSBzZXJ2aWNlIHdoZW4gaXQncyBub3QgbW9uaXRvcmluZyBhbnkgbW9yZSBwcm9jZXNzZXMuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHN0b3BTZWxmV2hlbkRvbmUoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVByb2Nlc3NlcykgewotICAgICAgICAgICAgaWYgKG1Qcm9jZXNzZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAiU3RheWluZyBhbGl2ZSwgd2FpdGluZyBmb3IgcGlkcyAiICsgbVByb2Nlc3Nlcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTG9nLnYoVEFHLCAiTm8gbW9yZSBwaWRzIHRvIGhhbmRsZSwgc2h1dHRpbmcgZG93biIpOwotICAgICAgICAgICAgc3RvcFNlbGYoKTsKKyAgICAgICAgaWYgKG1Qcm9jZXNzZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJTdGF5aW5nIGFsaXZlLCB3YWl0aW5nIGZvciBwaWRzICIgKyBtUHJvY2Vzc2VzKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBMb2cudihUQUcsICJObyBtb3JlIHBpZHMgdG8gaGFuZGxlLCBzaHV0dGluZyBkb3duIik7CisgICAgICAgIHN0b3BTZWxmKCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogSGFuZGxlcyB0aGUgQlVHUkVQT1JUX0ZJTklTSEVEIGludGVudCBzZW50IGJ5IHtAY29kZSBkdW1wc3RhdGV9LgorICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBvbkJ1Z3JlcG9ydEZpbmlzaGVkKGludCBwaWQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgZmluYWwgQ29udGV4dCBjb250ZXh0ID0gZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAgICAgIGZpbmFsIENvbmZpZ3VyYXRpb24gY29uZiA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpOwotICAgICAgICBmaW5hbCBGaWxlIGJ1Z3JlcG9ydEZpbGUgPSBnZXRGaWxlRXh0cmEoaW50ZW50LCBFWFRSQV9CVUdSRVBPUlQpOwotICAgICAgICBmaW5hbCBGaWxlIHNjcmVlbnNob3RGaWxlID0gZ2V0RmlsZUV4dHJhKGludGVudCwgRVhUUkFfU0NSRUVOU0hPVCk7CisgICAgICAgIG1JbmZvRGlhbG9nLm9uQnVncmVwb3J0RmluaXNoZWQocGlkKTsKKyAgICAgICAgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBIYXBwZW5zIHdoZW4gQlVHUkVQT1JUX0ZJTklTSEVEIHdhcyByZWNlaXZlZCB3aXRob3V0IGEgQlVHUkVQT1JUX1NUQVJURUQgZmlyc3QuCisgICAgICAgICAgICBMb2cudihUQUcsICJDcmVhdGluZyBpbmZvIGZvciB1bnRyYWNrZWQgcGlkICIgKyBwaWQpOworICAgICAgICAgICAgaW5mbyA9IG5ldyBCdWdyZXBvcnRJbmZvKG1Db250ZXh0LCBwaWQpOworICAgICAgICAgICAgbVByb2Nlc3Nlcy5wdXQocGlkLCBpbmZvKTsKKyAgICAgICAgfQorICAgICAgICBpbmZvLnJlbmFtZVNjcmVlbnNob3RzKG1TY3JlZW5zaG90c0Rpcik7CisgICAgICAgIGluZm8uYnVncmVwb3J0RmlsZSA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX0JVR1JFUE9SVCk7CisgICAgICAgIGZpbmFsIEZpbGUgc2NyZWVuc2hvdCA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX1NDUkVFTlNIT1QpOworICAgICAgICBpZiAoc2NyZWVuc2hvdCAhPSBudWxsKSB7CisgICAgICAgICAgICBpbmZvLmFkZFNjcmVlbnNob3Qoc2NyZWVuc2hvdCk7CisgICAgICAgIH0KKyAgICAgICAgaW5mby5maW5pc2hlZCA9IHRydWU7CiAKKyAgICAgICAgZmluYWwgQ29uZmlndXJhdGlvbiBjb25mID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0Q29uZmlndXJhdGlvbigpOwogICAgICAgICBpZiAoKGNvbmYudWlNb2RlICYgQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfTUFTSykgIT0gQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfV0FUQ0gpIHsKLSAgICAgICAgICAgIHRyaWdnZXJMb2NhbE5vdGlmaWNhdGlvbihjb250ZXh0LCBwaWQsIGJ1Z3JlcG9ydEZpbGUsIHNjcmVlbnNob3RGaWxlKTsKKyAgICAgICAgICAgIHRyaWdnZXJMb2NhbE5vdGlmaWNhdGlvbihtQ29udGV4dCwgaW5mbyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyBhIG5vdGlmaWNhdGlvbiB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzdGFydCBhICJzaGFyZSIgaW50ZW50IHdpdGgKLSAgICAgKiB0aGUgYnVnIHJlcG9ydC4gT24gd2F0Y2hlcyB3ZSBoYXZlIG90aGVyIG1ldGhvZHMgdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3RhcnQgdGhpcyBpbnRlbnQKKyAgICAgKiB0aGUgYnVncmVwb3J0LiBPbiB3YXRjaGVzIHdlIGhhdmUgb3RoZXIgbWV0aG9kcyB0byBhbGxvdyB0aGUgdXNlciB0byBzdGFydCB0aGlzIGludGVudAogICAgICAqICh1c3VhbGx5IGJ5IHRyaWdnZXJpbmcgaXQgb24gYW5vdGhlciBjb25uZWN0ZWQgZGV2aWNlKTsgd2UgZG9uJ3QgbmVlZCB0byBkaXNwbGF5IHRoZQogICAgICAqIG5vdGlmaWNhdGlvbiBpbiB0aGlzIGNhc2UuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cmlnZ2VyTG9jYWxOb3RpZmljYXRpb24oZmluYWwgQ29udGV4dCBjb250ZXh0LCBmaW5hbCBpbnQgcGlkLAotICAgICAgICAgICAgZmluYWwgRmlsZSBidWdyZXBvcnRGaWxlLCBmaW5hbCBGaWxlIHNjcmVlbnNob3RGaWxlKSB7Ci0gICAgICAgIGlmICghYnVncmVwb3J0RmlsZS5leGlzdHMoKSB8fCAhYnVncmVwb3J0RmlsZS5jYW5SZWFkKCkpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCByZWFkIGJ1Z3JlcG9ydCBmaWxlICIgKyBidWdyZXBvcnRGaWxlKTsKLSAgICAgICAgICAgIFRvYXN0Lm1ha2VUZXh0KGNvbnRleHQsIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF91bnJlYWRhYmxlX3RleHQpLAotICAgICAgICAgICAgICAgICAgICBUb2FzdC5MRU5HVEhfTE9ORykuc2hvdygpOworICAgIHByaXZhdGUgdm9pZCB0cmlnZ2VyTG9jYWxOb3RpZmljYXRpb24oZmluYWwgQ29udGV4dCBjb250ZXh0LCBmaW5hbCBCdWdyZXBvcnRJbmZvIGluZm8pIHsKKyAgICAgICAgaWYgKCFpbmZvLmJ1Z3JlcG9ydEZpbGUuZXhpc3RzKCkgfHwgIWluZm8uYnVncmVwb3J0RmlsZS5jYW5SZWFkKCkpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCByZWFkIGJ1Z3JlcG9ydCBmaWxlICIgKyBpbmZvLmJ1Z3JlcG9ydEZpbGUpOworICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoY29udGV4dCwgUi5zdHJpbmcuYnVncmVwb3J0X3VucmVhZGFibGVfdGV4dCwgVG9hc3QuTEVOR1RIX0xPTkcpLnNob3coKTsKKyAgICAgICAgICAgIHN0b3BQcm9ncmVzcyhpbmZvLnBpZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBib29sZWFuIGlzUGxhaW5UZXh0ID0gYnVncmVwb3J0RmlsZS5nZXROYW1lKCkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgiLnR4dCIpOworICAgICAgICBib29sZWFuIGlzUGxhaW5UZXh0ID0gaW5mby5idWdyZXBvcnRGaWxlLmdldE5hbWUoKS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCIudHh0Iik7CiAgICAgICAgIGlmICghaXNQbGFpblRleHQpIHsKICAgICAgICAgICAgIC8vIEFscmVhZHkgemlwcGVkLCBzZW5kIGl0IHJpZ2h0IGF3YXkuCi0gICAgICAgICAgICBzZW5kQnVncmVwb3J0Tm90aWZpY2F0aW9uKGNvbnRleHQsIHBpZCwgYnVncmVwb3J0RmlsZSwgc2NyZWVuc2hvdEZpbGUpOworICAgICAgICAgICAgc2VuZEJ1Z3JlcG9ydE5vdGlmaWNhdGlvbihjb250ZXh0LCBpbmZvKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEFzeW5jaHJvbm91c2x5IHppcCB0aGUgZmlsZSBmaXJzdCwgdGhlbiBzZW5kIGl0LgotICAgICAgICAgICAgc2VuZFppcHBlZEJ1Z3JlcG9ydE5vdGlmaWNhdGlvbihjb250ZXh0LCBwaWQsIGJ1Z3JlcG9ydEZpbGUsIHNjcmVlbnNob3RGaWxlKTsKKyAgICAgICAgICAgIHNlbmRaaXBwZWRCdWdyZXBvcnROb3RpZmljYXRpb24oY29udGV4dCwgaW5mbyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2NCwyNSArNzc0LDM2IEBACiAgICAgLyoqCiAgICAgICogQnVpbGQge0BsaW5rIEludGVudH0gdGhhdCBjYW4gYmUgdXNlZCB0byBzaGFyZSB0aGUgZ2l2ZW4gYnVncmVwb3J0LgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIEludGVudCBidWlsZFNlbmRJbnRlbnQoQ29udGV4dCBjb250ZXh0LCBVcmkgYnVncmVwb3J0VXJpLCBVcmkgc2NyZWVuc2hvdFVyaSkgeworICAgIHByaXZhdGUgc3RhdGljIEludGVudCBidWlsZFNlbmRJbnRlbnQoQ29udGV4dCBjb250ZXh0LCBCdWdyZXBvcnRJbmZvIGluZm8pIHsKKyAgICAgICAgLy8gRmlsZXMgYXJlIGtlcHQgb24gcHJpdmF0ZSBzdG9yYWdlLCBzbyB0dXJuIGludG8gVXJpcyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBncmFudCB0ZW1wb3JhcnkgcGVybWlzc2lvbnMgZm9yLgorICAgICAgICBmaW5hbCBVcmkgYnVncmVwb3J0VXJpID0gZ2V0VXJpKGNvbnRleHQsIGluZm8uYnVncmVwb3J0RmlsZSk7CisKICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9TRU5EX01VTFRJUExFKTsKICAgICAgICAgZmluYWwgU3RyaW5nIG1pbWVUeXBlID0gImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLmJ1Z3JlcG9ydCI7CiAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19HUkFOVF9SRUFEX1VSSV9QRVJNSVNTSU9OKTsKICAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KEludGVudC5DQVRFR09SWV9ERUZBVUxUKTsKICAgICAgICAgaW50ZW50LnNldFR5cGUobWltZVR5cGUpOwogCi0gICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfU1VCSkVDVCwgYnVncmVwb3J0VXJpLmdldExhc3RQYXRoU2VnbWVudCgpKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHN1YmplY3QgPSBpbmZvLnRpdGxlICE9IG51bGwgPyBpbmZvLnRpdGxlIDogYnVncmVwb3J0VXJpLmdldExhc3RQYXRoU2VnbWVudCgpOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1NVQkpFQ1QsIHN1YmplY3QpOwogCiAgICAgICAgIC8vIEVYVFJBX1RFWFQgc2hvdWxkIGJlIGFuIEFycmF5TGlzdCwgYnV0IHNvbWUgY2xpZW50cyBhcmUgZXhwZWN0aW5nIGEgc2luZ2xlIFN0cmluZy4KICAgICAgICAgLy8gU28sIHRvIGF2b2lkIGFuIGV4Y2VwdGlvbiBvbiBJbnRlbnQubWlncmF0ZUV4dHJhU3RyZWFtVG9DbGlwRGF0YSgpLCB3ZSBuZWVkIHRvIG1hbnVhbGx5CiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgQ2xpcERhdGEgb2JqZWN0IHdpdGggdGhlIGF0dGFjaG1lbnRzIFVSSXMuCi0gICAgICAgIFN0cmluZyBtZXNzYWdlQm9keSA9IFN0cmluZy5mb3JtYXQoIkJ1aWxkIGluZm86ICVzXG5TZXJpYWwgbnVtYmVyOiVzIiwKLSAgICAgICAgICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8uYnVpbGQuZGVzY3JpcHRpb24iKSwgU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLnNlcmlhbG5vIikpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1RFWFQsIG1lc3NhZ2VCb2R5KTsKKyAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBtZXNzYWdlQm9keSA9IG5ldyBTdHJpbmdCdWlsZGVyKCJCdWlsZCBpbmZvOiAiKQorICAgICAgICAgICAgLmFwcGVuZChTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8uYnVpbGQuZGVzY3JpcHRpb24iKSkKKyAgICAgICAgICAgIC5hcHBlbmQoIlxuU2VyaWFsIG51bWJlcjogIikKKyAgICAgICAgICAgIC5hcHBlbmQoU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLnNlcmlhbG5vIikpOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGluZm8uZGVzY3JpcHRpb24pKSB7CisgICAgICAgICAgICBtZXNzYWdlQm9keS5hcHBlbmQoIlxuRGVzY3JpcHRpb246ICIpLmFwcGVuZChpbmZvLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1RFWFQsIG1lc3NhZ2VCb2R5LnRvU3RyaW5nKCkpOwogICAgICAgICBmaW5hbCBDbGlwRGF0YSBjbGlwRGF0YSA9IG5ldyBDbGlwRGF0YShudWxsLCBuZXcgU3RyaW5nW10geyBtaW1lVHlwZSB9LAogICAgICAgICAgICAgICAgIG5ldyBDbGlwRGF0YS5JdGVtKG51bGwsIG51bGwsIG51bGwsIGJ1Z3JlcG9ydFVyaSkpOwogICAgICAgICBmaW5hbCBBcnJheUxpc3Q8VXJpPiBhdHRhY2htZW50cyA9IExpc3RzLm5ld0FycmF5TGlzdChidWdyZXBvcnRVcmkpOwotICAgICAgICBpZiAoc2NyZWVuc2hvdFVyaSAhPSBudWxsKSB7CisgICAgICAgIGZvciAoRmlsZSBzY3JlZW5zaG90IDogaW5mby5zY3JlZW5zaG90RmlsZXMpIHsKKyAgICAgICAgICAgIGZpbmFsIFVyaSBzY3JlZW5zaG90VXJpID0gZ2V0VXJpKGNvbnRleHQsIHNjcmVlbnNob3QpOwogICAgICAgICAgICAgY2xpcERhdGEuYWRkSXRlbShuZXcgQ2xpcERhdGEuSXRlbShudWxsLCBudWxsLCBudWxsLCBzY3JlZW5zaG90VXJpKSk7CiAgICAgICAgICAgICBhdHRhY2htZW50cy5hZGQoc2NyZWVuc2hvdFVyaSk7CiAgICAgICAgIH0KQEAgLTQ5OCw1MiArODE5LDc4IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU2VuZHMgYSBidWdyZXBvcnQgbm90aXRpY2F0aW9uLgorICAgICAqIFNoYXJlcyB0aGUgYnVncmVwb3J0IHVwb24gdXNlcidzIHJlcXVlc3QgYnkgaXNzdWluZyBhIHtAbGluayBJbnRlbnQjQUNUSU9OX1NFTkRfTVVMVElQTEV9CisgICAgICogaW50ZW50LCBidXQgaXNzdWluZyBhIHdhcm5pbmcgZGlhbG9nIHRoZSBmaXJzdCB0aW1lLgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2VuZEJ1Z3JlcG9ydE5vdGlmaWNhdGlvbihDb250ZXh0IGNvbnRleHQsIGludCBwaWQsIEZpbGUgYnVncmVwb3J0RmlsZSwKLSAgICAgICAgICAgIEZpbGUgc2NyZWVuc2hvdEZpbGUpIHsKLSAgICAgICAgLy8gRmlsZXMgYXJlIGtlcHQgb24gcHJpdmF0ZSBzdG9yYWdlLCBzbyB0dXJuIGludG8gVXJpcyB0aGF0IHdlIGNhbgotICAgICAgICAvLyBncmFudCB0ZW1wb3JhcnkgcGVybWlzc2lvbnMgZm9yLgotICAgICAgICBmaW5hbCBVcmkgYnVncmVwb3J0VXJpID0gZ2V0VXJpKGNvbnRleHQsIGJ1Z3JlcG9ydEZpbGUpOwotICAgICAgICBmaW5hbCBVcmkgc2NyZWVuc2hvdFVyaSA9IGdldFVyaShjb250ZXh0LCBzY3JlZW5zaG90RmlsZSk7CisgICAgcHJpdmF0ZSB2b2lkIHNoYXJlQnVncmVwb3J0KGludCBwaWQsIEJ1Z3JlcG9ydEluZm8gc2hhcmVkSW5mbykgeworICAgICAgICBCdWdyZXBvcnRJbmZvIGluZm8gPSBnZXRJbmZvKHBpZCk7CisgICAgICAgIGlmIChpbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFNlcnZpY2Ugd2FzIHRlcm1pbmF0ZWQgYnV0IG5vdGlmaWNhdGlvbiBwZXJzaXN0ZWQKKyAgICAgICAgICAgIGluZm8gPSBzaGFyZWRJbmZvOworICAgICAgICAgICAgTG9nLmQoVEFHLCAic2hhcmVCdWdyZXBvcnQoKTogbm8gaW5mbyBmb3IgUElEICIgKyBwaWQgKyAiIG9uIG1hbmFnZWQgcHJvY2Vzc2VzICgiCisgICAgICAgICAgICAgICAgICAgICsgbVByb2Nlc3NlcyArICIpLCB1c2luZyBpbmZvIGZyb20gaW50ZW50IGluc3RlYWQgKCIgKyBpbmZvICsgIikiKTsKKyAgICAgICAgfQogCi0gICAgICAgIEludGVudCBzZW5kSW50ZW50ID0gYnVpbGRTZW5kSW50ZW50KGNvbnRleHQsIGJ1Z3JlcG9ydFVyaSwgc2NyZWVuc2hvdFVyaSk7Ci0gICAgICAgIEludGVudCBub3RpZkludGVudDsKKyAgICAgICAgYWRkRGV0YWlsc1RvWmlwRmlsZShpbmZvKTsKKworICAgICAgICBmaW5hbCBJbnRlbnQgc2VuZEludGVudCA9IGJ1aWxkU2VuZEludGVudChtQ29udGV4dCwgaW5mbyk7CisgICAgICAgIGZpbmFsIEludGVudCBub3RpZkludGVudDsKIAogICAgICAgICAvLyBTZW5kIHRocm91Z2ggd2FybmluZyBkaWFsb2cgYnkgZGVmYXVsdAotICAgICAgICBpZiAoZ2V0V2FybmluZ1N0YXRlKGNvbnRleHQsIFNUQVRFX1NIT1cpID09IFNUQVRFX1NIT1cpIHsKLSAgICAgICAgICAgIG5vdGlmSW50ZW50ID0gYnVpbGRXYXJuaW5nSW50ZW50KGNvbnRleHQsIHNlbmRJbnRlbnQpOworICAgICAgICBpZiAoZ2V0V2FybmluZ1N0YXRlKG1Db250ZXh0LCBTVEFURV9TSE9XKSA9PSBTVEFURV9TSE9XKSB7CisgICAgICAgICAgICBub3RpZkludGVudCA9IGJ1aWxkV2FybmluZ0ludGVudChtQ29udGV4dCwgc2VuZEludGVudCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBub3RpZkludGVudCA9IHNlbmRJbnRlbnQ7CiAgICAgICAgIH0KICAgICAgICAgbm90aWZJbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOwogCisgICAgICAgIC8vIFNlbmQgdGhlIHNoYXJlIGludGVudC4uLgorICAgICAgICBtQ29udGV4dC5zdGFydEFjdGl2aXR5KG5vdGlmSW50ZW50KTsKKworICAgICAgICAvLyAuLi4gYW5kIHN0b3Agd2F0Y2hpbmcgdGhpcyBwcm9jZXNzLgorICAgICAgICBzdG9wUHJvZ3Jlc3MocGlkKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyBhIG5vdGl0aWNhdGlvbiBpbmRpY2F0aW5nIHRoZSBidWdyZXBvcnQgaGFzIGZpbmlzaGVkIHNvIHVzZSBjYW4gc2hhcmUgaXQuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZW5kQnVncmVwb3J0Tm90aWZpY2F0aW9uKENvbnRleHQgY29udGV4dCwgQnVncmVwb3J0SW5mbyBpbmZvKSB7CisgICAgICAgIGZpbmFsIEludGVudCBzaGFyZUludGVudCA9IG5ldyBJbnRlbnQoSU5URU5UX0JVR1JFUE9SVF9TSEFSRSk7CisgICAgICAgIHNoYXJlSW50ZW50LnNldENsYXNzKGNvbnRleHQsIEJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5jbGFzcyk7CisgICAgICAgIHNoYXJlSW50ZW50LnNldEFjdGlvbihJTlRFTlRfQlVHUkVQT1JUX1NIQVJFKTsKKyAgICAgICAgc2hhcmVJbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCBpbmZvLnBpZCk7CisgICAgICAgIHNoYXJlSW50ZW50LnB1dEV4dHJhKEVYVFJBX0lORk8sIGluZm8pOworCiAgICAgICAgIGZpbmFsIFN0cmluZyB0aXRsZSA9IGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSk7CiAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbi5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoY29udGV4dCkKICAgICAgICAgICAgICAgICAuc2V0U21hbGxJY29uKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZHJhd2FibGUuc3RhdF9zeXNfYWRiKQogICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUodGl0bGUpCiAgICAgICAgICAgICAgICAgLnNldFRpY2tlcih0aXRsZSkKICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRleHQoY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2ZpbmlzaGVkX3RleHQpKQotICAgICAgICAgICAgICAgIC5zZXRDb250ZW50SW50ZW50KFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCAwLCBub3RpZkludGVudCwgUGVuZGluZ0ludGVudC5GTEFHX0NBTkNFTF9DVVJSRU5UKSkKLSAgICAgICAgICAgICAgICAuc2V0QXV0b0NhbmNlbCh0cnVlKQorICAgICAgICAgICAgICAgIC5zZXRDb250ZW50SW50ZW50KFBlbmRpbmdJbnRlbnQuZ2V0U2VydmljZShjb250ZXh0LCBpbmZvLnBpZCwgc2hhcmVJbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfVVBEQVRFX0NVUlJFTlQpKQorICAgICAgICAgICAgICAgIC5zZXREZWxldGVJbnRlbnQobmV3Q2FuY2VsSW50ZW50KGNvbnRleHQsIGluZm8pKQogICAgICAgICAgICAgICAgIC5zZXRMb2NhbE9ubHkodHJ1ZSkKICAgICAgICAgICAgICAgICAuc2V0Q29sb3IoY29udGV4dC5nZXRDb2xvcigKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuY29sb3Iuc3lzdGVtX25vdGlmaWNhdGlvbl9hY2NlbnRfY29sb3IpKTsKIAotICAgICAgICBOb3RpZmljYXRpb25NYW5hZ2VyLmZyb20oY29udGV4dCkubm90aWZ5KFRBRywgcGlkLCBidWlsZGVyLmJ1aWxkKCkpOworICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGluZm8ubmFtZSkpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuc2V0Q29udGVudEluZm8oaW5mby5uYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXIuZnJvbShjb250ZXh0KS5ub3RpZnkoVEFHLCBpbmZvLnBpZCwgYnVpbGRlci5idWlsZCgpKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBTZW5kcyBhIHppcHBlZCBidWdyZXBvcnQgbm90aWZpY2F0aW9uLgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2VuZFppcHBlZEJ1Z3JlcG9ydE5vdGlmaWNhdGlvbihmaW5hbCBDb250ZXh0IGNvbnRleHQsCi0gICAgICAgICAgICBmaW5hbCBpbnQgcGlkLCBmaW5hbCBGaWxlIGJ1Z3JlcG9ydEZpbGUsIGZpbmFsIEZpbGUgc2NyZWVuc2hvdEZpbGUpIHsKKyAgICAgICAgICAgIGZpbmFsIEJ1Z3JlcG9ydEluZm8gaW5mbykgewogICAgICAgICBuZXcgQXN5bmNUYXNrPFZvaWQsIFZvaWQsIFZvaWQ+KCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwcm90ZWN0ZWQgVm9pZCBkb0luQmFja2dyb3VuZChWb2lkLi4uIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEZpbGUgemlwcGVkRmlsZSA9IHppcEJ1Z3JlcG9ydChidWdyZXBvcnRGaWxlKTsKLSAgICAgICAgICAgICAgICBzZW5kQnVncmVwb3J0Tm90aWZpY2F0aW9uKGNvbnRleHQsIHBpZCwgemlwcGVkRmlsZSwgc2NyZWVuc2hvdEZpbGUpOworICAgICAgICAgICAgICAgIHppcEJ1Z3JlcG9ydChpbmZvKTsKKyAgICAgICAgICAgICAgICBzZW5kQnVncmVwb3J0Tm90aWZpY2F0aW9uKGNvbnRleHQsIGluZm8pOwogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICB9LmV4ZWN1dGUoKTsKQEAgLTU1MywzNSArOTAwLDk3IEBACiAgICAgICogWmlwcyBhIGJ1Z3JlcG9ydCBmaWxlLCByZXR1cm5pbmcgdGhlIHBhdGggdG8gdGhlIG5ldyBmaWxlIChvciB0byB0aGUKICAgICAgKiBvcmlnaW5hbCBpbiBjYXNlIG9mIGZhaWx1cmUpLgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIEZpbGUgemlwQnVncmVwb3J0KEZpbGUgYnVncmVwb3J0RmlsZSkgewotICAgICAgICBTdHJpbmcgYnVncmVwb3J0UGF0aCA9IGJ1Z3JlcG9ydEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgIFN0cmluZyB6aXBwZWRQYXRoID0gYnVncmVwb3J0UGF0aC5yZXBsYWNlKCIudHh0IiwgIi56aXAiKTsKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHppcEJ1Z3JlcG9ydChCdWdyZXBvcnRJbmZvIGluZm8pIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGJ1Z3JlcG9ydFBhdGggPSBpbmZvLmJ1Z3JlcG9ydEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyB6aXBwZWRQYXRoID0gYnVncmVwb3J0UGF0aC5yZXBsYWNlKCIudHh0IiwgIi56aXAiKTsKICAgICAgICAgTG9nLnYoVEFHLCAiemlwcGluZyAiICsgYnVncmVwb3J0UGF0aCArICIgYXMgIiArIHppcHBlZFBhdGgpOwotICAgICAgICBGaWxlIGJ1Z3JlcG9ydFppcHBlZEZpbGUgPSBuZXcgRmlsZSh6aXBwZWRQYXRoKTsKLSAgICAgICAgdHJ5IChJbnB1dFN0cmVhbSBpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oYnVncmVwb3J0RmlsZSk7CisgICAgICAgIGZpbmFsIEZpbGUgYnVncmVwb3J0WmlwcGVkRmlsZSA9IG5ldyBGaWxlKHppcHBlZFBhdGgpOworICAgICAgICB0cnkgKElucHV0U3RyZWFtIGlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShpbmZvLmJ1Z3JlcG9ydEZpbGUpOwogICAgICAgICAgICAgICAgIFppcE91dHB1dFN0cmVhbSB6b3MgPSBuZXcgWmlwT3V0cHV0U3RyZWFtKAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGJ1Z3JlcG9ydFppcHBlZEZpbGUpKSkpIHsKLSAgICAgICAgICAgIFppcEVudHJ5IGVudHJ5ID0gbmV3IFppcEVudHJ5KGJ1Z3JlcG9ydEZpbGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGVudHJ5LnNldFRpbWUoYnVncmVwb3J0RmlsZS5sYXN0TW9kaWZpZWQoKSk7Ci0gICAgICAgICAgICB6b3MucHV0TmV4dEVudHJ5KGVudHJ5KTsKLSAgICAgICAgICAgIGludCB0b3RhbEJ5dGVzID0gU3RyZWFtcy5jb3B5KGlzLCB6b3MpOwotICAgICAgICAgICAgTG9nLnYoVEFHLCAic2l6ZSBvZiBvcmlnaW5hbCBidWdyZXBvcnQ6ICIgKyB0b3RhbEJ5dGVzICsgIiBieXRlcyIpOwotICAgICAgICAgICAgem9zLmNsb3NlRW50cnkoKTsKLSAgICAgICAgICAgIC8vIERlbGV0ZSBvbGQgZmlsZTsKLSAgICAgICAgICAgIGJvb2xlYW4gZGVsZXRlZCA9IGJ1Z3JlcG9ydEZpbGUuZGVsZXRlKCk7CisgICAgICAgICAgICBhZGRFbnRyeSh6b3MsIGluZm8uYnVncmVwb3J0RmlsZS5nZXROYW1lKCksIGlzKTsKKyAgICAgICAgICAgIC8vIERlbGV0ZSBvbGQgZmlsZQorICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBkZWxldGVkID0gaW5mby5idWdyZXBvcnRGaWxlLmRlbGV0ZSgpOwogICAgICAgICAgICAgaWYgKGRlbGV0ZWQpIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJkZWxldGVkIG9yaWdpbmFsIGJ1Z3JlcG9ydCAoIiArIGJ1Z3JlcG9ydFBhdGggKyAiKSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJjb3VsZCBub3QgZGVsZXRlIG9yaWdpbmFsIGJ1Z3JlcG9ydCAoIiArIGJ1Z3JlcG9ydFBhdGggKyAiKSIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGJ1Z3JlcG9ydFppcHBlZEZpbGU7CisgICAgICAgICAgICBpbmZvLmJ1Z3JlcG9ydEZpbGUgPSBidWdyZXBvcnRaaXBwZWRGaWxlOwogICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJleGNlcHRpb24gemlwcGluZyBmaWxlICIgKyB6aXBwZWRQYXRoLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBidWdyZXBvcnRGaWxlOyAvLyBSZXR1cm4gb3JpZ2luYWwuCiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKKyAgICAgKiBBZGRzIHRoZSB1c2VyLXByb3ZpZGVkIGluZm8gaW50byB0aGUgYnVncmVwb3J0IHppcCBmaWxlLgorICAgICAqIDxwPgorICAgICAqIElmIHVzZXIgcHJvdmlkZWQgYSB0aXRsZSwgaXQgd2lsbCBiZSBzYXZlZCBpbnRvIGEge0Bjb2RlIHRpdGxlLnR4dH0gZW50cnk7IHNpbWlsYXJseSwgdGhlCisgICAgICogZGVzY3JpcHRpb24gd2lsbCBiZSBzYXZlZCBvbiB7QGNvZGUgZGVzY3JpcHRpb24udHh0fS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYWRkRGV0YWlsc1RvWmlwRmlsZShCdWdyZXBvcnRJbmZvIGluZm8pIHsKKyAgICAgICAgaWYgKGluZm8uYnVncmVwb3J0RmlsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBPbmUgcG9zc2libGUgcmVhc29uIGlzIGEgYnVnIGluIHRoZSBQYXJjZWxpemF0aW9uIGNvZGUuCisgICAgICAgICAgICBMb2cuZShUQUcsICJJTlRFUk5BTCBFUlJPUjogbm8gYnVncmVwb3J0RmlsZSBvbiAiICsgaW5mbyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gSXQncyBub3QgcG9zc2libGUgdG8gYWRkIGEgbmV3IGVudHJ5IGludG8gYW4gZXhpc3RpbmcgZmlsZSwgc28gd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcKKyAgICAgICAgLy8gemlwLCBjb3B5IGFsbCBlbnRyaWVzLCB0aGVuIHJlbmFtZSBpdC4KKyAgICAgICAgZmluYWwgRmlsZSBkaXIgPSBpbmZvLmJ1Z3JlcG9ydEZpbGUuZ2V0UGFyZW50RmlsZSgpOworICAgICAgICBmaW5hbCBGaWxlIHRtcFppcCA9IG5ldyBGaWxlKGRpciwgInRtcC0iICsgaW5mby5idWdyZXBvcnRGaWxlLmdldE5hbWUoKSk7CisgICAgICAgIExvZy5kKFRBRywgIldyaXRpbmcgdGVtcG9yYXJ5IHppcCBmaWxlICgiICsgdG1wWmlwICsgIikiKTsKKyAgICAgICAgdHJ5IChaaXBGaWxlIG9sZFppcCA9IG5ldyBaaXBGaWxlKGluZm8uYnVncmVwb3J0RmlsZSk7CisgICAgICAgICAgICAgICAgWmlwT3V0cHV0U3RyZWFtIHpvcyA9IG5ldyBaaXBPdXRwdXRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0odG1wWmlwKSkpIHsKKworICAgICAgICAgICAgLy8gRmlyc3QgY29weSBjb250ZW50cyBmcm9tIG9yaWdpbmFsIHppcC4KKyAgICAgICAgICAgIEVudW1lcmF0aW9uPD8gZXh0ZW5kcyBaaXBFbnRyeT4gZW50cmllcyA9IG9sZFppcC5lbnRyaWVzKCk7CisgICAgICAgICAgICB3aGlsZSAoZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIFppcEVudHJ5IGVudHJ5ID0gZW50cmllcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBlbnRyeU5hbWUgPSBlbnRyeS5nZXROYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZEVudHJ5KHpvcywgZW50cnlOYW1lLCBlbnRyeS5nZXRUaW1lKCksIG9sZFppcC5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgInNraXBwaW5nIGRpcmVjdG9yeSBlbnRyeTogIiArIGVudHJ5TmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGVuIGFkZCB0aGUgdXNlci1wcm92aWRlZCBpbmZvLgorICAgICAgICAgICAgYWRkRW50cnkoem9zLCAidGl0bGUudHh0IiwgaW5mby50aXRsZSk7CisgICAgICAgICAgICBhZGRFbnRyeSh6b3MsICJkZXNjcmlwdGlvbi50eHQiLCBpbmZvLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiZXhjZXB0aW9uIHppcHBpbmcgZmlsZSAiICsgdG1wWmlwLCBlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdG1wWmlwLnJlbmFtZVRvKGluZm8uYnVncmVwb3J0RmlsZSkpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCByZW5hbWUgIiArIHRtcFppcCArICIgdG8gIiArIGluZm8uYnVncmVwb3J0RmlsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZEVudHJ5KFppcE91dHB1dFN0cmVhbSB6b3MsIFN0cmluZyBlbnRyeSwgU3RyaW5nIHRleHQpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgImFkZGluZyBlbnRyeSAnIiArIGVudHJ5ICsgIic6ICIgKyB0ZXh0KTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh0ZXh0KSkgeworICAgICAgICAgICAgYWRkRW50cnkoem9zLCBlbnRyeSwgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHRleHQuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkRW50cnkoWmlwT3V0cHV0U3RyZWFtIHpvcywgU3RyaW5nIGVudHJ5TmFtZSwgSW5wdXRTdHJlYW0gaXMpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBhZGRFbnRyeSh6b3MsIGVudHJ5TmFtZSwgU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCksIGlzKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZEVudHJ5KFppcE91dHB1dFN0cmVhbSB6b3MsIFN0cmluZyBlbnRyeU5hbWUsIGxvbmcgdGltZXN0YW1wLAorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFppcEVudHJ5IGVudHJ5ID0gbmV3IFppcEVudHJ5KGVudHJ5TmFtZSk7CisgICAgICAgIGVudHJ5LnNldFRpbWUodGltZXN0YW1wKTsKKyAgICAgICAgem9zLnB1dE5leHRFbnRyeShlbnRyeSk7CisgICAgICAgIGZpbmFsIGludCB0b3RhbEJ5dGVzID0gU3RyZWFtcy5jb3B5KGlzLCB6b3MpOworICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgInNpemUgb2YgJyIgKyBlbnRyeU5hbWUgKyAiJyBlbnRyeTogIiArIHRvdGFsQnl0ZXMgKyAiIGJ5dGVzIik7CisgICAgICAgIHpvcy5jbG9zZUVudHJ5KCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogRmluZCB0aGUgYmVzdCBtYXRjaGluZyB7QGxpbmsgQWNjb3VudH0gYmFzZWQgb24gYnVpbGQgcHJvcGVydGllcy4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBBY2NvdW50IGZpbmRTZW5kVG9BY2NvdW50KENvbnRleHQgY29udGV4dCkgewpAQCAtNjE1LDcgKzEwMjQsNyBAQAogICAgICAgICByZXR1cm4gZm91bmRBY2NvdW50OwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIFVyaSBnZXRVcmkoQ29udGV4dCBjb250ZXh0LCBGaWxlIGZpbGUpIHsKKyAgICBzdGF0aWMgVXJpIGdldFVyaShDb250ZXh0IGNvbnRleHQsIEZpbGUgZmlsZSkgewogICAgICAgICByZXR1cm4gZmlsZSAhPSBudWxsID8gRmlsZVByb3ZpZGVyLmdldFVyaUZvckZpbGUoY29udGV4dCwgQVVUSE9SSVRZLCBmaWxlKSA6IG51bGw7CiAgICAgfQogCkBAIC02MjgsMzIgKzEwMzcsMzAwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHNldFN5c3RlbVByb3BlcnR5KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJTZXR0aW5nIHN5c3RlbSBwcm9wZXJ0eSIgKyBrZXkgKyAiIHRvICIgKyB2YWx1ZSk7CisgICAgICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCBzZXQgcHJvcGVydHkgIiArIGtleSArICIgdG8gIiArIHZhbHVlLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICAvKioKLSAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCBhIGJ1ZyByZXBvcnQgcHJvY2VzcyB3aGlsZSBpdHMgaW4gcHJvZ3Jlc3MuCisgICAgICogVXBkYXRlcyB0aGUgc3lzdGVtIHByb3BlcnR5IHVzZWQgYnkge0Bjb2RlIGR1bXBzdGF0ZX0gdG8gcmVuYW1lIHRoZSBmaW5hbCBidWdyZXBvcnQgZmlsZXMuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQnVncmVwb3J0SW5mbyB7CisgICAgcHJpdmF0ZSBib29sZWFuIHNldEJ1Z3JlcG9ydE5hbWVQcm9wZXJ0eShpbnQgcGlkLCBTdHJpbmcgbmFtZSkgeworICAgICAgICBMb2cuZChUQUcsICJVcGRhdGluZyBidWdyZXBvcnQgbmFtZSB0byAiICsgbmFtZSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBrZXkgPSBEVU1QU1RBVEVfUFJFRklYICsgcGlkICsgTkFNRV9TVUZGSVg7CisgICAgICAgIHJldHVybiBzZXRTeXN0ZW1Qcm9wZXJ0eShrZXksIG5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIHVzZXItcHJvdmlkZWQgZGV0YWlscyBvZiBhIGJ1Z3JlcG9ydC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQnVncmVwb3J0SW5mbyhpbnQgcGlkLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHRpdGxlLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgZmluYWwgQnVncmVwb3J0SW5mbyBpbmZvID0gZ2V0SW5mbyhwaWQpOworICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW5mby50aXRsZSA9IHRpdGxlOworICAgICAgICBpbmZvLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247CisgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIWluZm8ubmFtZS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgIGluZm8ubmFtZSA9IG5hbWU7CisgICAgICAgICAgICB1cGRhdGVQcm9ncmVzcyhpbmZvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjb2xsYXBzZU5vdGlmaWNhdGlvbkJhcigpIHsKKyAgICAgICAgc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KEludGVudC5BQ1RJT05fQ0xPU0VfU1lTVEVNX0RJQUxPR1MpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBMb29wZXIgbmV3TG9vcGVyKFN0cmluZyBuYW1lKSB7CisgICAgICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgdGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQobmFtZSwgVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQpOworICAgICAgICB0aHJlYWQuc3RhcnQoKTsKKyAgICAgICAgcmV0dXJuIHRocmVhZC5nZXRMb29wZXIoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIHNjcmVlbnNob3QgYW5kIHNhdmUgaXQgdG8gdGhlIGdpdmVuIGxvY2F0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdGFrZVNjcmVlbnNob3QoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgc2NyZWVuc2hvdEZpbGUpIHsKKyAgICAgICAgKChWaWJyYXRvcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuVklCUkFUT1JfU0VSVklDRSkpCisgICAgICAgICAgICAgICAgLnZpYnJhdGUoMTUwKTsKKyAgICAgICAgZmluYWwgUHJvY2Vzc0J1aWxkZXIgc2NyZWVuY2FwID0gbmV3IFByb2Nlc3NCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuY29tbWFuZCgiL3N5c3RlbS9iaW4vc2NyZWVuY2FwIiwgIi1wIiwgc2NyZWVuc2hvdEZpbGUpOworICAgICAgICBMb2cuZChUQUcsICJUYWtpbmcgc2NyZWVuc2hvdCB1c2luZyAiICsgc2NyZWVuY2FwLmNvbW1hbmQoKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgZXhpdFZhbHVlID0gc2NyZWVuY2FwLnN0YXJ0KCkud2FpdEZvcigpOworICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBMb2cuZShUQUcsICJzY3JlZW5jYXAgKCIgKyBzY3JlZW5jYXAuY29tbWFuZCgpICsgIikgZmFpbGVkOiAiICsgZXhpdFZhbHVlKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAic2NyZWVuY2FwICgiICsgc2NyZWVuY2FwLmNvbW1hbmQoKSArICIpIGZhaWxlZCIsIGUpOworICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJUaHJlYWQgaW50ZXJydXB0ZWQgd2hpbGUgc2NyZWVuY2FwIHN0aWxsIHJ1bm5pbmciKTsKKyAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENoZWNrcyB3aGV0aGVyIGEgY2hhcmFjdGVyIGlzIHZhbGlkIG9uIGJ1Z3JlcG9ydCBuYW1lcy4KKyAgICAgKi8KKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkKGNoYXIgYykgeworICAgICAgICByZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICcwJyAmJiBjIDw9ICc5JykKKyAgICAgICAgICAgICAgICB8fCBjID09ICdfJyB8fCBjID09ICctJzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIZWxwZXIgY2xhc3MgZW5jYXBzdWxhdGluZyB0aGUgVUkgZWxlbWVudHMgYW5kIGxvZ2ljIHVzZWQgdG8gZGlzcGxheSBhIGRpYWxvZyB3aGVyZSB1c2VyCisgICAgICogY2FuIGNoYW5nZSB0aGUgZGV0YWlscyBvZiBhIGJ1Z3JlcG9ydC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEJ1Z3JlcG9ydEluZm9EaWFsb2cgeworICAgICAgICBwcml2YXRlIEVkaXRUZXh0IG1JbmZvTmFtZTsKKyAgICAgICAgcHJpdmF0ZSBFZGl0VGV4dCBtSW5mb1RpdGxlOworICAgICAgICBwcml2YXRlIEVkaXRUZXh0IG1JbmZvRGVzY3JpcHRpb247CisgICAgICAgIHByaXZhdGUgQWxlcnREaWFsb2cgbURpYWxvZzsKKyAgICAgICAgcHJpdmF0ZSBCdXR0b24gbU9rQnV0dG9uOworICAgICAgICBwcml2YXRlIGludCBtUGlkOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBMYXN0ICJjb21taXR0ZWQiIHZhbHVlIG9mIHRoZSBidWdyZXBvcnQgbmFtZS4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIE9uY2UgaW5pdGlhbGx5IHNldCwgaXQncyBvbmx5IHVwZGF0ZWQgd2hlbiB1c2VyIGNsaWNrcyB0aGUgT0sgYnV0dG9uLgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVNhdmVkTmFtZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogTGFzdCB2YWx1ZSBvZiB0aGUgYnVncmVwb3J0IG5hbWUgYXMgZW50ZXJlZCBieSB0aGUgdXNlci4KKyAgICAgICAgICogPHA+CisgICAgICAgICAqIEV2ZXJ5IHRpbWUgaXQncyBjaGFuZ2VkIHRoZSBlcXVpdmFsZW50IHN5c3RlbSBwcm9wZXJ0eSBpcyBjaGFuZ2VkIGFzIHdlbGwsIGJ1dCBpZiB0aGUKKyAgICAgICAgICogdXNlciBjbGlja3MgQ0FOQ0VMLCB0aGUgb2xkIHZhbHVlIChzdG9yZWQgb24ge0Bjb2RlIG1TYXZlZE5hbWV9IGlzIHJlc3RvcmVkLgorICAgICAgICAgKiA8cD4KKyAgICAgICAgICogVGhpcyBsb2dpYyBoYW5kbGVzIHRoZSBjb3JuZXItY2FzZSBzY2VuYXJpbyB3aGVyZSB7QGNvZGUgZHVtcHN0YXRlfSBmaW5pc2hlcyBhZnRlciB0aGUKKyAgICAgICAgICogdXNlciBjaGFuZ2VkIHRoZSBuYW1lIGJ1dCBkaWRuJ3QgY2xpY2tlZCBPSyB5ZXQgKGZvciBleGFtcGxlLCBiZWNhdXNlIHRoZSB1c2VyIGlzIHR5cGluZworICAgICAgICAgKiB0aGUgZGVzY3JpcHRpb24pLiBUaGUgb25seSBkcmF3YmFjayBpcyB0aGF0IGlmIHRoZSB1c2VyIGNoYW5nZXMgdGhlIG5hbWUgd2hpbGUKKyAgICAgICAgICoge0Bjb2RlIGR1bXBzdGF0ZX0gaXMgcnVubmluZyBidXQgY2xpY2tzIENBTkNFTCBhZnRlciBpdCBmaW5pc2hlcywgdGhlbiB0aGUgZmluYWwgbmFtZQorICAgICAgICAgKiB3aWxsIGJlIHRoZSBvbmUgdGhhdCBoYXMgYmVlbiBjYW5jZWxlZC4gQnV0IHdoZW4ge0Bjb2RlIGR1bXBzdGF0ZX0gZmluaXNoZXMgdGhlIHtjb2RlCisgICAgICAgICAqIG5hbWV9IFVJIGlzIGRpc2FibGVkIGFuZCB0aGUgb2xkIG5hbWUgcmVzdG9yZWQgYW55d2F5cywgc28gdGhlIHVzZXIgd2lsbCBiZSAiYWxlcnRlZCIgb2YKKyAgICAgICAgICogc3VjaCBkcmF3YmFjay4KKyAgICAgICAgICovCisgICAgICAgIHByaXZhdGUgU3RyaW5nIG1UZW1wTmFtZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogU2V0cyBpdHMgaW50ZXJuYWwgc3RhdGUgYW5kIGRpc3BsYXlzIHRoZSBkaWFsb2cuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZShDb250ZXh0IGNvbnRleHQsIGludCBwaWQsIFN0cmluZyBuYW1lLCBTdHJpbmcgdGl0bGUsCisgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICAvLyBGaXJzdCBpbml0aWFsaXplcyBzaW5nbGV0b24uCisgICAgICAgICAgICBpZiAobURpYWxvZyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgQFN1cHByZXNzTGludCgiSW5mbGF0ZVBhcmFtcyIpCisgICAgICAgICAgICAgICAgLy8gSXQncyBvayBwYXNzIG51bGwgVmlld1Jvb3Qgb24gQWxlcnREaWFsb2dzLgorICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgdmlldyA9IFZpZXcuaW5mbGF0ZShjb250ZXh0LCBSLmxheW91dC5kaWFsb2dfYnVncmVwb3J0X2luZm8sIG51bGwpOworCisgICAgICAgICAgICAgICAgbUluZm9OYW1lID0gKEVkaXRUZXh0KSB2aWV3LmZpbmRWaWV3QnlJZChSLmlkLm5hbWUpOworICAgICAgICAgICAgICAgIG1JbmZvVGl0bGUgPSAoRWRpdFRleHQpIHZpZXcuZmluZFZpZXdCeUlkKFIuaWQudGl0bGUpOworICAgICAgICAgICAgICAgIG1JbmZvRGVzY3JpcHRpb24gPSAoRWRpdFRleHQpIHZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZGVzY3JpcHRpb24pOworCisgICAgICAgICAgICAgICAgbUluZm9OYW1lLnNldE9uRm9jdXNDaGFuZ2VMaXN0ZW5lcihuZXcgT25Gb2N1c0NoYW5nZUxpc3RlbmVyKCkgeworCisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkZvY3VzQ2hhbmdlKFZpZXcgdiwgYm9vbGVhbiBoYXNGb2N1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0ZvY3VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIG1EaWFsb2cgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFZpZXcodmlldykKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUaXRsZShjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfaW5mb19kaWFsb2dfdGl0bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldENhbmNlbGFibGUoZmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oY29udGV4dC5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcub2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5lZ2F0aXZlQnV0dG9uKGNvbnRleHQuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmNhbmNlbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1UZW1wTmFtZS5lcXVhbHMobVNhdmVkTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCByZXN0b3JlIGR1bXBzdGF0ZSdzIG5hbWUgc2luY2UgaXQgd2FzIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVmb3JlIHVzZXIgY2xpY2tlZCBPSy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QnVncmVwb3J0TmFtZVByb3BlcnR5KG1QaWQsIG1TYXZlZE5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jcmVhdGUoKTsKKworICAgICAgICAgICAgICAgIG1EaWFsb2cuZ2V0V2luZG93KCkuc2V0QXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9TWVNURU1fRElBTE9HKSk7CisKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlbiBzZXQgZmllbGRzLgorICAgICAgICAgICAgbVNhdmVkTmFtZSA9IG1UZW1wTmFtZSA9IG5hbWU7CisgICAgICAgICAgICBtUGlkID0gcGlkOworICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShuYW1lKSkgeworICAgICAgICAgICAgICAgIG1JbmZvTmFtZS5zZXRUZXh0KG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh0aXRsZSkpIHsKKyAgICAgICAgICAgICAgICBtSW5mb1RpdGxlLnNldFRleHQodGl0bGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShkZXNjcmlwdGlvbikpIHsKKyAgICAgICAgICAgICAgICBtSW5mb0Rlc2NyaXB0aW9uLnNldFRleHQoZGVzY3JpcHRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBbmQgZmluYWxseSBkaXNwbGF5IGl0LgorICAgICAgICAgICAgbURpYWxvZy5zaG93KCk7CisKKyAgICAgICAgICAgIC8vIFRPRE86IGluIGEgdHJhZGl0aW9uYWwgQWxlcnREaWFsb2csIHdoZW4gdGhlIHBvc2l0aXZlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZQorICAgICAgICAgICAgLy8gZGlhbG9nIGlzIGFsd2F5cyBjbG9zZWQsIGJ1dCB3ZSBuZWVkIHRvIHZhbGlkYXRlIHRoZSBuYW1lIGZpcnN0LCBzbyB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBnZXQgYSByZWZlcmVuY2UgdG8gaXQsIHdoaWNoIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyIGl0J3MgZGlzcGxheWVkLgorICAgICAgICAgICAgLy8gSXQgd291bGQgYmUgY2xlYW5lciB0byB1c2UgYSByZWd1bGFyIGRpYWxvZyBpbnN0ZWFkLCBidXQgbGV0J3Mga2VlcCB0aGlzCisgICAgICAgICAgICAvLyB3b3JrYXJvdW5kIGZvciBub3cgYW5kIGNoYW5nZSBpdCBsYXRlciwgd2hlbiB3ZSBhZGQgYW5vdGhlciBidXR0b24gdG8gdGFrZQorICAgICAgICAgICAgLy8gZXh0cmEgc2NyZWVuc2hvdHMuCisgICAgICAgICAgICBpZiAobU9rQnV0dG9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtT2tCdXR0b24gPSBtRGlhbG9nLmdldEJ1dHRvbihEaWFsb2dJbnRlcmZhY2UuQlVUVE9OX1BPU0lUSVZFKTsKKyAgICAgICAgICAgICAgICBtT2tCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKKworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0aXplTmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBtSW5mb05hbWUuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdGl0bGUgPSBtSW5mb1RpdGxlLmdldFRleHQoKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uID0gbUluZm9EZXNjcmlwdGlvbi5nZXRUZXh0KCkudG9TdHJpbmcoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVncmVwb3J0SW5mbyhtUGlkLCBuYW1lLCB0aXRsZSwgZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbURpYWxvZy5kaXNtaXNzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBTYW5pdGl6ZXMgdGhlIHVzZXItcHJvdmlkZWQgdmFsdWUgZm9yIHRoZSB7QGNvZGUgbmFtZX0gZmllbGQsIGF1dG9tYXRpY2FsbHkgcmVwbGFjaW5nCisgICAgICAgICAqIGludmFsaWQgY2hhcmFjdGVycyBpZiBuZWNlc3NhcnkuCisgICAgICAgICAqLworICAgICAgICBwcml2YXRlIHZvaWQgc2FuaXRpemVOYW1lKCkgeworICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBtSW5mb05hbWUuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMobVRlbXBOYW1lKSkgeworICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAibmFtZSBkaWRuJ3QgY2hhbmdlLCBubyBuZWVkIHRvIHNhbml0aXplOiAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmluYWwgU3RyaW5nQnVpbGRlciBzYWZlTmFtZSA9IG5ldyBTdHJpbmdCdWlsZGVyKG5hbWUubGVuZ3RoKCkpOworICAgICAgICAgICAgYm9vbGVhbiBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWUubGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIGNoYXIgYyA9IG5hbWUuY2hhckF0KGkpOworICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKGMpKSB7CisgICAgICAgICAgICAgICAgICAgIHNhZmVOYW1lLmFwcGVuZChjKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgc2FmZU5hbWUuYXBwZW5kKCdfJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICBMb2cudihUQUcsICJjaGFuZ2VkIGludmFsaWQgbmFtZSAnIiArIG5hbWUgKyAiJyB0byAnIiArIHNhZmVOYW1lICsgIiciKTsKKyAgICAgICAgICAgICAgICBuYW1lID0gc2FmZU5hbWUudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBtSW5mb05hbWUuc2V0VGV4dChuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1UZW1wTmFtZSA9IG5hbWU7CisKKyAgICAgICAgICAgIC8vIE11c3QgdXBkYXRlIHN5c3RlbSBwcm9wZXJ0eSBmb3IgdGhlIGNhc2VzIHdoZXJlIGR1bXBzdGF0ZSBmaW5pc2hlcworICAgICAgICAgICAgLy8gd2hpbGUgdGhlIHVzZXIgaXMgc3RpbGwgZW50ZXJpbmcgb3RoZXIgZmllbGRzIChsaWtlIHRpdGxlIG9yCisgICAgICAgICAgICAvLyBkZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHNldEJ1Z3JlcG9ydE5hbWVQcm9wZXJ0eShtUGlkLCBuYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgLyoqCisgICAgICAgICAqIE5vdGlmaWVzIHRoZSBkaWFsb2cgdGhhdCB0aGUgYnVncmVwb3J0IGhhcyBmaW5pc2hlZCBzbyBpdCBkaXNhYmxlcyB0aGUge0Bjb2RlIG5hbWV9CisgICAgICAgICAqIGZpZWxkLgorICAgICAgICAgKiA8cD5PbmNlIHRoZSBidWdyZXBvcnQgaXMgZmluaXNoZWQgZHVtcHN0YXRlIGhhcyBhbHJlYWR5IGdlbmVyYXRlZCB0aGUgZmluYWwgZmlsZXMsIHNvCisgICAgICAgICAqIGNoYW5naW5nIHRoZSBuYW1lIHdvdWxkIGhhdmUgbm8gZWZmZWN0LgorICAgICAgICAgKi8KKyAgICAgICAgcHJpdmF0ZSB2b2lkIG9uQnVncmVwb3J0RmluaXNoZWQoaW50IHBpZCkgeworICAgICAgICAgICAgaWYgKG1JbmZvTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUluZm9OYW1lLnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIG1JbmZvTmFtZS5zZXRUZXh0KG1TYXZlZE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmZvcm1hdGlvbiBhYm91dCBhIGJ1Z3JlcG9ydCBwcm9jZXNzIHdoaWxlIGl0cyBpbiBwcm9ncmVzcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBCdWdyZXBvcnRJbmZvIGltcGxlbWVudHMgUGFyY2VsYWJsZSB7CiAgICAgICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiB7QGNvZGUgcGlkfSBvZiB0aGUge0Bjb2RlIGR1bXBzdGF0ZX0gcHJvY2VzcyBnZW5lcmF0aW5nIHRoZSBidWcgcmVwb3J0LgorICAgICAgICAgKiB7QGNvZGUgcGlkfSBvZiB0aGUge0Bjb2RlIGR1bXBzdGF0ZX0gcHJvY2VzcyBnZW5lcmF0aW5nIHRoZSBidWdyZXBvcnQuCiAgICAgICAgICAqLwogICAgICAgICBmaW5hbCBpbnQgcGlkOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBOYW1lIG9mIHRoZSBidWcgcmVwb3J0LCB3aWxsIGJlIHVzZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBmaWxlcy4KKyAgICAgICAgICogTmFtZSBvZiB0aGUgYnVncmVwb3J0LCB3aWxsIGJlIHVzZWQgdG8gcmVuYW1lIHRoZSBmaW5hbCBmaWxlcy4KICAgICAgICAgICogPHA+Ci0gICAgICAgICAqIEluaXRpYWwgdmFsdWUgaXMgdGhlIGJ1ZyByZXBvcnQgZmlsZW5hbWUgcmVwb3J0ZWQgYnkge0Bjb2RlIGR1bXBzdGF0ZX0sIGJ1dCB1c2VyIGNhbgorICAgICAgICAgKiBJbml0aWFsIHZhbHVlIGlzIHRoZSBidWdyZXBvcnQgZmlsZW5hbWUgcmVwb3J0ZWQgYnkge0Bjb2RlIGR1bXBzdGF0ZX0sIGJ1dCB1c2VyIGNhbgogICAgICAgICAgKiBjaGFuZ2UgaXQgbGF0ZXIgdG8gYSBtb3JlIG1lYW5pbmdmdWwgbmFtZS4KICAgICAgICAgICovCiAgICAgICAgIFN0cmluZyBuYW1lOwogCiAgICAgICAgIC8qKgotICAgICAgICAgKiBNYXhpbXVtIHByb2dyZXNzIG9mIHRoZSBidWcgcmVwb3J0IGdlbmVyYXRpb24uCisgICAgICAgICAqIFVzZXItcHJvdmlkZWQsIG9uZS1saW5lIHN1bW1hcnkgb2YgdGhlIGJ1Zzsgd2hlbiBzZXQsIHdpbGwgYmUgdXNlZCBhcyB0aGUgc3ViamVjdAorICAgICAgICAgKiBvZiB0aGUge0BsaW5rIEludGVudCNBQ1RJT05fU0VORF9NVUxUSVBMRX0gaW50ZW50LgorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIHRpdGxlOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBVc2VyLXByb3ZpZGVkLCBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgYnVncmVwb3J0OyB3aGVuIHNldCwgd2lsbCBiZSBhZGRlZCB0byB0aGUgYm9keQorICAgICAgICAgKiBvZiB0aGUge0BsaW5rIEludGVudCNBQ1RJT05fU0VORF9NVUxUSVBMRX0gaW50ZW50LgorICAgICAgICAgKi8KKyAgICAgICAgU3RyaW5nIGRlc2NyaXB0aW9uOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBNYXhpbXVtIHByb2dyZXNzIG9mIHRoZSBidWdyZXBvcnQgZ2VuZXJhdGlvbi4KICAgICAgICAgICovCiAgICAgICAgIGludCBtYXg7CiAKICAgICAgICAgLyoqCi0gICAgICAgICAqIEN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGJ1ZyByZXBvcnQgZ2VuZXJhdGlvbi4KKyAgICAgICAgICogQ3VycmVudCBwcm9ncmVzcyBvZiB0aGUgYnVncmVwb3J0IGdlbmVyYXRpb24uCiAgICAgICAgICAqLwogICAgICAgICBpbnQgcHJvZ3Jlc3M7CiAKQEAgLTY2Miw2ICsxMzM5LDM0IEBACiAgICAgICAgICAqLwogICAgICAgICBsb25nIGxhc3RVcGRhdGUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAorICAgICAgICAvKioKKyAgICAgICAgICogVGltZSBvZiB0aGUgbGFzdCBwcm9ncmVzcyB1cGRhdGUgd2hlbiBQYXJjZWwgd2FzIGNyZWF0ZWQuCisgICAgICAgICAqLworICAgICAgICBTdHJpbmcgZm9ybWF0dGVkTGFzdFVwZGF0ZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogUGF0aCBvZiB0aGUgbWFpbiBidWdyZXBvcnQgZmlsZS4KKyAgICAgICAgICovCisgICAgICAgIEZpbGUgYnVncmVwb3J0RmlsZTsKKworICAgICAgICAvKioKKyAgICAgICAgICogUGF0aCBvZiB0aGUgc2NyZWVuc2hvdCBmaWxlcy4KKyAgICAgICAgICovCisgICAgICAgIExpc3Q8RmlsZT4gc2NyZWVuc2hvdEZpbGVzID0gbmV3IEFycmF5TGlzdDw+KDEpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIGR1bXBzdGF0ZSBzZW50IGFuIGludGVudCBpbmZvcm1pbmcgaXQgaGFzIGZpbmlzaGVkLgorICAgICAgICAgKi8KKyAgICAgICAgYm9vbGVhbiBmaW5pc2hlZDsKKworICAgICAgICAvKioKKyAgICAgICAgICogSW50ZXJuYWwgY291bnRlciB1c2VkIHRvIG5hbWUgc2NyZWVuc2hvdCBmaWxlcy4KKyAgICAgICAgICovCisgICAgICAgIGludCBzY3JlZW5zaG90Q291bnRlcjsKKworICAgICAgICAvKioKKyAgICAgICAgICogQ29uc3RydWN0b3IgZm9yIHRyYWNrZWQgYnVncmVwb3J0cyAtIHR5cGljYWxseSBjYWxsZWQgdXBvbiByZWNlaXZpbmcgQlVHUkVQT1JUX1NUQVJURUQuCisgICAgICAgICAqLwogICAgICAgICBCdWdyZXBvcnRJbmZvKENvbnRleHQgY29udGV4dCwgaW50IHBpZCwgU3RyaW5nIG5hbWUsIGludCBtYXgpIHsKICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgICAgICB0aGlzLnBpZCA9IHBpZDsKQEAgLTY2OSw3ICsxMzc0LDYwIEBACiAgICAgICAgICAgICB0aGlzLm1heCA9IG1heDsKICAgICAgICAgfQogCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdW50cmFja2VkIGJ1Z3JlcG9ydHMgLSB0eXBpY2FsbHkgY2FsbGVkIHVwb24gcmVjZWl2aW5nIEJVR1JFUE9SVF9GSU5JU0hFRAorICAgICAgICAgKiB3aXRob3V0IGEgcHJldmlvdXMgY2FsbCB0byBCVUdSRVBPUlRfU1RBUlRFRC4KKyAgICAgICAgICovCisgICAgICAgIEJ1Z3JlcG9ydEluZm8oQ29udGV4dCBjb250ZXh0LCBpbnQgcGlkKSB7CisgICAgICAgICAgICB0aGlzKGNvbnRleHQsIHBpZCwgbnVsbCwgMCk7CisgICAgICAgICAgICB0aGlzLmZpbmlzaGVkID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBHZXRzIHRoZSBuYW1lIGZvciBuZXh0IHNjcmVlbnNob3QgZmlsZS4KKyAgICAgICAgICovCisgICAgICAgIFN0cmluZyBnZXRQYXRoTmV4dFNjcmVlbnNob3QoKSB7CisgICAgICAgICAgICBzY3JlZW5zaG90Q291bnRlciArKzsKKyAgICAgICAgICAgIHJldHVybiAic2NyZWVuc2hvdC0iICsgcGlkICsgIi0iICsgc2NyZWVuc2hvdENvdW50ZXIgKyAiLnBuZyI7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogU2F2ZXMgdGhlIGxvY2F0aW9uIG9mIGEgdGFrZW4gc2NyZWVuc2hvdCBzbyBpdCBjYW4gYmUgc2VudCBvdXQgYXQgdGhlIGVuZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgYWRkU2NyZWVuc2hvdChGaWxlIHNjcmVlbnNob3QpIHsKKyAgICAgICAgICAgIHNjcmVlbnNob3RGaWxlcy5hZGQoc2NyZWVuc2hvdCk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogUmVuYW1lIGFsbCBzY3JlZW5zaG90cyBmaWxlcyBzbyB0aGF0IHRoZXkgY29udGFpbiB0aGUgdXNlci1nZW5lcmF0ZWQgbmFtZSBpbnN0ZWFkIG9mIHBpZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgcmVuYW1lU2NyZWVuc2hvdHMoRmlsZSBzY3JlZW5zaG90RGlyKSB7CisgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBMaXN0PEZpbGU+IHJlbmFtZWRGaWxlcyA9IG5ldyBBcnJheUxpc3Q8PihzY3JlZW5zaG90RmlsZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAoRmlsZSBvbGRGaWxlIDogc2NyZWVuc2hvdEZpbGVzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG9sZE5hbWUgPSBvbGRGaWxlLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmV3TmFtZSA9IG9sZE5hbWUucmVwbGFjZShJbnRlZ2VyLnRvU3RyaW5nKHBpZCksIG5hbWUpOworICAgICAgICAgICAgICAgIGZpbmFsIEZpbGUgbmV3RmlsZTsKKyAgICAgICAgICAgICAgICBpZiAoIW5ld05hbWUuZXF1YWxzKG9sZE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIEZpbGUgcmVuYW1lZEZpbGUgPSBuZXcgRmlsZShzY3JlZW5zaG90RGlyLCBuZXdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3RmlsZSA9IG9sZEZpbGUucmVuYW1lVG8ocmVuYW1lZEZpbGUpID8gcmVuYW1lZEZpbGUgOiBvbGRGaWxlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIk5hbWUgZGlkbid0IGNoYW5nZTogIiArIG9sZE5hbWUpOyAvLyBTaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgICAgICBuZXdGaWxlID0gb2xkRmlsZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVuYW1lZEZpbGVzLmFkZChuZXdGaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjcmVlbnNob3RGaWxlcyA9IHJlbmFtZWRGaWxlczsKKyAgICAgICAgfQorCiAgICAgICAgIFN0cmluZyBnZXRGb3JtYXR0ZWRMYXN0VXBkYXRlKCkgeworICAgICAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFJlc3RvcmVkIGZyb20gUGFyY2VsCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZExhc3RVcGRhdGUgPT0gbnVsbCA/CisgICAgICAgICAgICAgICAgICAgICAgICBMb25nLnRvU3RyaW5nKGxhc3RVcGRhdGUpIDogZm9ybWF0dGVkTGFzdFVwZGF0ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBEYXRlVXRpbHMuZm9ybWF0RGF0ZVRpbWUoY29udGV4dCwgbGFzdFVwZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgRGF0ZVV0aWxzLkZPUk1BVF9TSE9XX0RBVEUgfCBEYXRlVXRpbHMuRk9STUFUX1NIT1dfVElNRSk7CiAgICAgICAgIH0KQEAgLTY3Nyw4ICsxNDM1LDgwIEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgZmluYWwgZmxvYXQgcGVyY2VudCA9ICgoZmxvYXQpIHByb2dyZXNzICogMTAwIC8gbWF4KTsKLSAgICAgICAgICAgIHJldHVybiAiUHJvZ3Jlc3MgZm9yICIgKyBuYW1lICsgIiAocGlkPSIgKyBwaWQgKyAiKTogIiArIHByb2dyZXNzICsgIi8iICsgbWF4Ci0gICAgICAgICAgICAgICAgICAgICsgIiAoIiArIHBlcmNlbnQgKyAiJSkgTGFzdCB1cGRhdGU6ICIgKyBnZXRGb3JtYXR0ZWRMYXN0VXBkYXRlKCk7CisgICAgICAgICAgICByZXR1cm4gInBpZDogIiArIHBpZCArICIsIG5hbWU6ICIgKyBuYW1lICsgIiwgZmluaXNoZWQ6ICIgKyBmaW5pc2hlZAorICAgICAgICAgICAgICAgICAgICArICJcblx0dGl0bGU6ICIgKyB0aXRsZSArICJcblx0ZGVzY3JpcHRpb246ICIgKyBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICArICJcblx0ZmlsZTogIiArIGJ1Z3JlcG9ydEZpbGUgKyAiXG5cdHNjcmVlbnNob3RzOiAiICsgc2NyZWVuc2hvdEZpbGVzCisgICAgICAgICAgICAgICAgICAgICsgIlxuXHRwcm9ncmVzczogIiArIHByb2dyZXNzICsgIi8iICsgbWF4ICsgIigiICsgcGVyY2VudCArICIpIgorICAgICAgICAgICAgICAgICAgICArICJcblx0bGFzdF91cGRhdGU6ICIgKyBnZXRGb3JtYXR0ZWRMYXN0VXBkYXRlKCk7CiAgICAgICAgIH0KKworICAgICAgICAvLyBQYXJjZWxhYmxlIGNvbnRyYWN0CisgICAgICAgIHByb3RlY3RlZCBCdWdyZXBvcnRJbmZvKFBhcmNlbCBpbikgeworICAgICAgICAgICAgY29udGV4dCA9IG51bGw7CisgICAgICAgICAgICBwaWQgPSBpbi5yZWFkSW50KCk7CisgICAgICAgICAgICBuYW1lID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICAgICAgdGl0bGUgPSBpbi5yZWFkU3RyaW5nKCk7CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGluLnJlYWRTdHJpbmcoKTsKKyAgICAgICAgICAgIG1heCA9IGluLnJlYWRJbnQoKTsKKyAgICAgICAgICAgIHByb2dyZXNzID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgbGFzdFVwZGF0ZSA9IGluLnJlYWRMb25nKCk7CisgICAgICAgICAgICBmb3JtYXR0ZWRMYXN0VXBkYXRlID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICAgICAgYnVncmVwb3J0RmlsZSA9IHJlYWRGaWxlKGluKTsKKworICAgICAgICAgICAgaW50IHNjcmVlbnNob3RTaXplID0gaW4ucmVhZEludCgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc2NyZWVuc2hvdFNpemU7IGkrKykgeworICAgICAgICAgICAgICAgICAgc2NyZWVuc2hvdEZpbGVzLmFkZChyZWFkRmlsZShpbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5pc2hlZCA9IGluLnJlYWRJbnQoKSA9PSAxOworICAgICAgICAgICAgc2NyZWVuc2hvdENvdW50ZXIgPSBpbi5yZWFkSW50KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgd3JpdGVUb1BhcmNlbChQYXJjZWwgZGVzdCwgaW50IGZsYWdzKSB7CisgICAgICAgICAgICBkZXN0LndyaXRlSW50KHBpZCk7CisgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKG5hbWUpOworICAgICAgICAgICAgZGVzdC53cml0ZVN0cmluZyh0aXRsZSk7CisgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4KTsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQocHJvZ3Jlc3MpOworICAgICAgICAgICAgZGVzdC53cml0ZUxvbmcobGFzdFVwZGF0ZSk7CisgICAgICAgICAgICBkZXN0LndyaXRlU3RyaW5nKGdldEZvcm1hdHRlZExhc3RVcGRhdGUoKSk7CisgICAgICAgICAgICB3cml0ZUZpbGUoZGVzdCwgYnVncmVwb3J0RmlsZSk7CisKKyAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoc2NyZWVuc2hvdEZpbGVzLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKEZpbGUgc2NyZWVuc2hvdEZpbGUgOiBzY3JlZW5zaG90RmlsZXMpIHsKKyAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZGVzdCwgc2NyZWVuc2hvdEZpbGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZXN0LndyaXRlSW50KGZpbmlzaGVkID8gMSA6IDApOworICAgICAgICAgICAgZGVzdC53cml0ZUludChzY3JlZW5zaG90Q291bnRlcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBkZXNjcmliZUNvbnRlbnRzKCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgd3JpdGVGaWxlKFBhcmNlbCBkZXN0LCBGaWxlIGZpbGUpIHsKKyAgICAgICAgICAgIGRlc3Qud3JpdGVTdHJpbmcoZmlsZSA9PSBudWxsID8gbnVsbCA6IGZpbGUuZ2V0UGF0aCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgRmlsZSByZWFkRmlsZShQYXJjZWwgaW4pIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXRoID0gaW4ucmVhZFN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIHBhdGggPT0gbnVsbCA/IG51bGwgOiBuZXcgRmlsZShwYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGFyY2VsYWJsZS5DcmVhdG9yPEJ1Z3JlcG9ydEluZm8+IENSRUFUT1IgPQorICAgICAgICAgICAgICAgIG5ldyBQYXJjZWxhYmxlLkNyZWF0b3I8QnVncmVwb3J0SW5mbz4oKSB7CisgICAgICAgICAgICBwdWJsaWMgQnVncmVwb3J0SW5mbyBjcmVhdGVGcm9tUGFyY2VsKFBhcmNlbCBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1Z3JlcG9ydEluZm8oc291cmNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIEJ1Z3JlcG9ydEluZm9bXSBuZXdBcnJheShpbnQgc2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQnVncmVwb3J0SW5mb1tzaXplXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRSZWNlaXZlci5qYXZhIGIvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFJlY2VpdmVyLmphdmEKaW5kZXggNTEzMzE2Mi4uOWFmYTkwMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFJlY2VpdmVyLmphdmEKKysrIGIvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFJlY2VpdmVyLmphdmEKQEAgLTI5LDEyICsyOSwxNCBAQAogaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwogaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIC8qKgogICogUmVjZWl2ZXIgdGhhdCBoYW5kbGVzIGZpbmlzaGVkIGJ1Z3JlcG9ydHMsIHVzdWFsbHkgYnkgYXR0YWNoaW5nIHRoZW0gdG8gYW4KICAqIHtAbGluayBJbnRlbnQjQUNUSU9OX1NFTkRfTVVMVElQTEV9LgogICovCiBwdWJsaWMgY2xhc3MgQnVncmVwb3J0UmVjZWl2ZXIgZXh0ZW5kcyBCcm9hZGNhc3RSZWNlaXZlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJCdWdyZXBvcnRSZWNlaXZlciI7CiAKICAgICAvKioKICAgICAgKiBBbHdheXMga2VlcCB0aGUgbmV3ZXN0IDggYnVncmVwb3J0IGZpbGVzOyA0IHJlcG9ydHMgYW5kIDQgc2NyZWVuc2hvdHMgYXJlCkBAIC01MCw3ICs1Miw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewogICAgICAgICAvLyBDbGVhbiB1cCBvbGRlciBidWdyZXBvcnRzIGluIGJhY2tncm91bmQKLSAgICAgICAgY2xlYW51cE9sZEZpbGVzKGludGVudCk7CisgICAgICAgIGNsZWFudXBPbGRGaWxlcyh0aGlzLCBpbnRlbnQsIElOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQsIE1JTl9LRUVQX0NPVU5ULCBNSU5fS0VFUF9BR0UpOwogCiAgICAgICAgIC8vIERlbGVnYXRlIGludGVudCBoYW5kbGluZyB0byBzZXJ2aWNlLgogICAgICAgICBJbnRlbnQgc2VydmljZUludGVudCA9IG5ldyBJbnRlbnQoY29udGV4dCwgQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzKTsKQEAgLTU4LDE3ICs2MCwyNSBAQAogICAgICAgICBjb250ZXh0LnN0YXJ0U2VydmljZShzZXJ2aWNlSW50ZW50KTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgY2xlYW51cE9sZEZpbGVzKEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgaWYgKCFJTlRFTlRfQlVHUkVQT1JUX0ZJTklTSEVELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgc3RhdGljIHZvaWQgY2xlYW51cE9sZEZpbGVzKEJyb2FkY2FzdFJlY2VpdmVyIGJyLCBJbnRlbnQgaW50ZW50LCBTdHJpbmcgZXhwZWN0ZWRBY3Rpb24sCisgICAgICAgICAgICBmaW5hbCBpbnQgbWluQ291bnQsIGZpbmFsIGxvbmcgbWluQWdlKSB7CisgICAgICAgIGlmICghZXhwZWN0ZWRBY3Rpb24uZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmaW5hbCBGaWxlIGJ1Z3JlcG9ydEZpbGUgPSBnZXRGaWxlRXh0cmEoaW50ZW50LCBFWFRSQV9CVUdSRVBPUlQpOwotICAgICAgICBmaW5hbCBQZW5kaW5nUmVzdWx0IHJlc3VsdCA9IGdvQXN5bmMoKTsKKyAgICAgICAgaWYgKGJ1Z3JlcG9ydEZpbGUgPT0gbnVsbCB8fCAhYnVncmVwb3J0RmlsZS5leGlzdHMoKSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiTm90IGRlbGV0aW5nIG9sZCBmaWxlcyBiZWNhdXNlIGZpbGUgIiArIGJ1Z3JlcG9ydEZpbGUgKyAiIGRvZXNuJ3QgZXhpc3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBQZW5kaW5nUmVzdWx0IHJlc3VsdCA9IGJyLmdvQXN5bmMoKTsKICAgICAgICAgbmV3IEFzeW5jVGFzazxWb2lkLCBWb2lkLCBWb2lkPigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHJvdGVjdGVkIFZvaWQgZG9JbkJhY2tncm91bmQoVm9pZC4uLiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBGaWxlVXRpbHMuZGVsZXRlT2xkZXJGaWxlcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Z3JlcG9ydEZpbGUuZ2V0UGFyZW50RmlsZSgpLCBNSU5fS0VFUF9DT1VOVCwgTUlOX0tFRVBfQUdFKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBGaWxlVXRpbHMuZGVsZXRlT2xkZXJGaWxlcyhidWdyZXBvcnRGaWxlLmdldFBhcmVudEZpbGUoKSwgbWluQ291bnQsIG1pbkFnZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgIlJ1bnRpbWVFeGNlcHRpb24gZGVsZXRpbmcgb2xkIGZpbGVzIiwgZSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlc3VsdC5maW5pc2goKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9SZW1vdGVCdWdyZXBvcnRSZWNlaXZlci5qYXZhIGIvcGFja2FnZXMvU2hlbGwvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL1JlbW90ZUJ1Z3JlcG9ydFJlY2VpdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3ODNhMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9SZW1vdGVCdWdyZXBvcnRSZWNlaXZlci5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNoZWxsOworCitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5FWFRSQV9CVUdSRVBPUlQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5JTlRFTlRfUkVNT1RFX0JVR1JFUE9SVF9GSU5JU0hFRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2hlbGwuQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLklOVEVOVF9SRU1PVEVfQlVHUkVQT1JUX0RJU1BBVENIOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuZ2V0RmlsZUV4dHJhOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuZ2V0VXJpOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRSZWNlaXZlci5jbGVhbnVwT2xkRmlsZXM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworCisvKioKKyAqIFJlY2VpdmVyIHRoYXQgaGFuZGxlcyBmaW5pc2hlZCByZW1vdGUgYnVncmVwb3J0cywgYnkgcmUtc2VuZGluZworICogdGhlIGludGVudCB3aXRoIGFwcGVuZGVkIGJ1Z3JlcG9ydCB6aXAgZmlsZSBVUkkuCisgKgorICogPHA+IFJlbW90ZSBidWdyZXBvcnQgbmV2ZXIgY29udGFpbnMgYSBzY3JlZW5zaG90LgorICovCitwdWJsaWMgY2xhc3MgUmVtb3RlQnVncmVwb3J0UmVjZWl2ZXIgZXh0ZW5kcyBCcm9hZGNhc3RSZWNlaXZlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHUkVQT1JUX01JTUVUWVBFID0gImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLmJ1Z3JlcG9ydCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JFTU9URV9CVUdSRVBPUlRfSEFTSCA9CisgICAgICAgICAgICAiYW5kcm9pZC5pbnRlbnQuZXh0cmEuUkVNT1RFX0JVR1JFUE9SVF9IQVNIIjsKKworICAgIC8qKiBBbHdheXMga2VlcCBqdXN0IHRoZSBsYXN0IHJlbW90ZSBidWdyZXBvcnQgemlwIGZpbGUgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0tFRVBfQ09VTlQgPSAxOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgeworICAgICAgICBjbGVhbnVwT2xkRmlsZXModGhpcywgaW50ZW50LCBJTlRFTlRfUkVNT1RFX0JVR1JFUE9SVF9GSU5JU0hFRCwgTUlOX0tFRVBfQ09VTlQsIDApOworCisgICAgICAgIGZpbmFsIEZpbGUgYnVncmVwb3J0RmlsZSA9IGdldEZpbGVFeHRyYShpbnRlbnQsIEVYVFJBX0JVR1JFUE9SVCk7CisgICAgICAgIGZpbmFsIFVyaSBidWdyZXBvcnRVcmkgPSBnZXRVcmkoY29udGV4dCwgYnVncmVwb3J0RmlsZSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBidWdyZXBvcnRIYXNoID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1JFTU9URV9CVUdSRVBPUlRfSEFTSCk7CisKKyAgICAgICAgZmluYWwgSW50ZW50IG5ld0ludGVudCA9IG5ldyBJbnRlbnQoSU5URU5UX1JFTU9URV9CVUdSRVBPUlRfRElTUEFUQ0gpOworICAgICAgICBuZXdJbnRlbnQuc2V0RGF0YUFuZFR5cGUoYnVncmVwb3J0VXJpLCBCVUdSRVBPUlRfTUlNRVRZUEUpOworICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoRVhUUkFfUkVNT1RFX0JVR1JFUE9SVF9IQVNILCBidWdyZXBvcnRIYXNoKTsKKyAgICAgICAgY29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKG5ld0ludGVudCwgVXNlckhhbmRsZS5TWVNURU0sCisgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkRVTVApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9TaGVsbC90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IDYyYTM3YmMuLjFlMGVhYWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvcGFja2FnZXMvU2hlbGwvdGVzdHMvQW5kcm9pZC5tawpAQCAtOCw5ICs4LDcgQEAKIAogTE9DQUxfSkFWQV9MSUJSQVJJRVMgOj0gYW5kcm9pZC50ZXN0LnJ1bm5lcgogCi0jIFRPRE86IHVwZGF0ZSBhbmQvb3IgcmVtb3ZlCiBMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gdWItdWlhdXRvbWF0b3IKLSNMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gYW5kcm9pZC1zdXBwb3J0LXY0IG1vY2tpdG8tdGFyZ2V0IHViLXVpYXV0b21hdG9yCiAKIExPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBTaGVsbFRlc3RzCiBMT0NBTF9JTlNUUlVNRU5UQVRJT05fRk9SIDo9IFNoZWxsCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UmVjZWl2ZXJUZXN0LmphdmEgYi9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvQnVncmVwb3J0UmVjZWl2ZXJUZXN0LmphdmEKaW5kZXggMGUzMWNkZi4uNTJlMWI1NiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU2hlbGwvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL0J1Z3JlcG9ydFJlY2VpdmVyVGVzdC5qYXZhCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9CdWdyZXBvcnRSZWNlaXZlclRlc3QuamF2YQpAQCAtMjUsMjQgKzI1LDMyIEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5FWFRSQV9TQ1JFRU5TSE9UOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2UuSU5URU5UX0JVR1JFUE9SVF9GSU5JU0hFRDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2hlbGwuQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLklOVEVOVF9CVUdSRVBPUlRfU1RBUlRFRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2hlbGwuQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLlNDUkVFTlNIT1RfREVMQVlfU0VDT05EUzsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKIGltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Tb3J0ZWRTZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuemlwLlppcElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEudXRpbC56aXAuWmlwT3V0cHV0U3RyZWFtOwogCiBpbXBvcnQgbGliY29yZS5pby5TdHJlYW1zOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUnVubmluZ1NlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLkluc3RydW1lbnRhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0V3JhcHBlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTUxLDkgKzU5LDEzIEBACiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QudWlhdXRvbWF0b3IuVWlEZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnRlc3QudWlhdXRvbWF0b3IuVWlPYmplY3Q7CiBpbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOworaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc2hlbGwuQWN0aW9uU2VuZE11bHRpcGxlQ29uc3VtZXJBY3Rpdml0eS5DdXN0b21BY3Rpb25TZW5kTXVsdGlwbGVMaXN0ZW5lcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zaGVsbC5CdWdyZXBvcnRQcm9ncmVzc1NlcnZpY2U7CiAKIC8qKgogICogSW50ZWdyYXRpb24gdGVzdHMgZm9yIHtAbGluayBCdWdyZXBvcnRSZWNlaXZlcn0uCkBAIC03MSw2NiArODMsMjkzIEBACiAgKiA8cD4KICAqIDxzdHJvbmc+Tk9URTwvc3Ryb25nPjogdGhlc2UgdGVzdHMgb25seSB3b3JrIGlmIHRoZSBkZXZpY2UgaXMgdW5sb2NrZWQuCiAgKi8KK0BMYXJnZVRlc3QKIHB1YmxpYyBjbGFzcyBCdWdyZXBvcnRSZWNlaXZlclRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkJ1Z3JlcG9ydFJlY2VpdmVyVGVzdCI7CiAKICAgICAvLyBUaW1lb3V0IGZvciBVSSBvcGVyYXRpb25zLCBpbiBtaWxsaXNlY29uZHMuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJTUVPVVQgPSAxMDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FT1VUID0gKGludCkgQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLlBPTExJTkdfRlJFUVVFTkNZICogNDsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UX0RJUiA9ICIvZGF0YS9kYXRhL2NvbS5hbmRyb2lkLnNoZWxsL2ZpbGVzL2J1Z3JlcG9ydHMiOworICAgIC8vIFRpbWVvdXQgZm9yIHdoZW4gd2FpdGluZyBmb3IgYSBzY3JlZW5zaG90IHRvIGZpbmlzaC4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0FGRV9TQ1JFRU5TSE9UX0RFTEFZID0gU0NSRUVOU0hPVF9ERUxBWV9TRUNPTkRTICsgMTA7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHUkVQT1JUU19ESVIgPSAiYnVncmVwb3J0cyI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJVR1JFUE9SVF9GSUxFID0gInRlc3RfYnVncmVwb3J0LnR4dCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpJUF9GSUxFID0gInRlc3RfYnVncmVwb3J0LnppcCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMQUlOX1RFWFRfUEFUSCA9IFJPT1RfRElSICsgIi8iICsgQlVHUkVQT1JUX0ZJTEU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFpJUF9QQVRIID0gUk9PVF9ESVIgKyAiLyIgKyBaSVBfRklMRTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NSRUVOU0hPVF9QQVRIID0gUk9PVF9ESVIgKyAiL3Rlc3Rfc2NyZWVuc2hvdC5wbmciOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ1JFRU5TSE9UX0ZJTEUgPSAidGVzdF9zY3JlZW5zaG90LnBuZyI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVHUkVQT1JUX0NPTlRFTlQgPSAiRHVtcCwgbWlnaHQgYXMgd2VsbCBkdW1wIVxuIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NSRUVOU0hPVF9DT05URU5UID0gIkEgcGljdHVyZSBpcyB3b3J0aCBhIHRob3VzYW5kIHdvcmRzIVxuIjsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQSUQgPSA0MjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPR1JFU1NfUFJPUEVSVFkgPSAiZHVtcHN0YXRlLjQyLnByb2dyZXNzIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFYX1BST1BFUlRZID0gImR1bXBzdGF0ZS40Mi5tYXgiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOQU1FX1BST1BFUlRZID0gImR1bXBzdGF0ZS40Mi5uYW1lIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRSA9ICJCVUcsIFkgVSBOTyBSRVBPUlQ/IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkVXX05BTUUgPSAiQnVnX0ZvcnJlc3RfQnVnIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVElUTEUgPSAiV2ltYnVnZG9tIENoYW1waW9uIDIwMTUiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX0RFU0NSSVBUSU9OID0gbnVsbDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9fTkFNRSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PX1NDUkVFTlNIT1QgPSBudWxsOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT19USVRMRSA9IG51bGw7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSW50ZWdlciBOT19QSUQgPSBudWxsOworCisgICAgcHJpdmF0ZSBTdHJpbmcgbURlc2NyaXB0aW9uOworCisgICAgcHJpdmF0ZSBTdHJpbmcgbVBsYWluVGV4dFBhdGg7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVppcFBhdGg7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVNjcmVlbnNob3RQYXRoOworCiAgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwogICAgIHByaXZhdGUgVWlCb3QgbVVpQm90OwogICAgIHByaXZhdGUgQ3VzdG9tQWN0aW9uU2VuZE11bHRpcGxlTGlzdGVuZXIgbUxpc3RlbmVyOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgTG9nLmkoVEFHLCAiIyMjIyBzZXR1cCgpIG9uICIgKyBnZXROYW1lKCkpOwogICAgICAgICBJbnN0cnVtZW50YXRpb24gaW5zdHJ1bWVudGF0aW9uID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCk7CiAgICAgICAgIG1Db250ZXh0ID0gaW5zdHJ1bWVudGF0aW9uLmdldFRhcmdldENvbnRleHQoKTsKICAgICAgICAgbVVpQm90ID0gbmV3IFVpQm90KFVpRGV2aWNlLmdldEluc3RhbmNlKGluc3RydW1lbnRhdGlvbiksIFRJTUVPVVQpOwogICAgICAgICBtTGlzdGVuZXIgPSBBY3Rpb25TZW5kTXVsdGlwbGVDb25zdW1lckFjdGl2aXR5LmdldExpc3RlbmVyKG1Db250ZXh0KTsKKwogICAgICAgICBjYW5jZWxFeGlzdGluZ05vdGlmaWNhdGlvbnMoKTsKKworICAgICAgICBtUGxhaW5UZXh0UGF0aCA9IGdldFBhdGgoQlVHUkVQT1JUX0ZJTEUpOworICAgICAgICBtWmlwUGF0aCA9IGdldFBhdGgoWklQX0ZJTEUpOworICAgICAgICBtU2NyZWVuc2hvdFBhdGggPSBnZXRQYXRoKFNDUkVFTlNIT1RfRklMRSk7CisgICAgICAgIGNyZWF0ZVRleHRGaWxlKG1QbGFpblRleHRQYXRoLCBCVUdSRVBPUlRfQ09OVEVOVCk7CisgICAgICAgIGNyZWF0ZVRleHRGaWxlKG1TY3JlZW5zaG90UGF0aCwgU0NSRUVOU0hPVF9DT05URU5UKTsKKyAgICAgICAgY3JlYXRlWmlwRmlsZShtWmlwUGF0aCwgQlVHUkVQT1JUX0ZJTEUsIEJVR1JFUE9SVF9DT05URU5UKTsKKworICAgICAgICAvLyBDcmVhdGVzIGEgbXVsdGktbGluZSBkZXNjcmlwdGlvbi4KKyAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDIwOyBpKyspIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiQWxsIHdvcmsgYW5kIG5vIHBsYXkgbWFrZXMgU2hlbGwgYSBkdWxsIGFwcCFcbiIpOworICAgICAgICB9CisgICAgICAgIG1EZXNjcmlwdGlvbiA9IHNiLnRvU3RyaW5nKCk7CisKICAgICAgICAgQnVncmVwb3J0UHJlZnMuc2V0V2FybmluZ1N0YXRlKG1Db250ZXh0LCBCdWdyZXBvcnRQcmVmcy5TVEFURV9ISURFKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RnVsbFdvcmtmbG93KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBuYW1lID0gIkJVRywgWSBVIE5PIFJFUE9SVD8iOwotICAgICAgICAvLyBUT0RPOiBjYWxsIG1ldGhvZCB0byByZW1vdmUgcHJvcGVydHkgaW5zdGVhZAotICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgiZHVtcHN0YXRlLjQyLnByb2dyZXNzIiwgIjAiKTsKLSAgICAgICAgU3lzdGVtUHJvcGVydGllcy5zZXQoImR1bXBzdGF0ZS40Mi5tYXgiLCAiMCIpOworICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9ncmVzcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXNldFByb3BlcnRpZXMoKTsKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoMTAwMCk7CisgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKIAotICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJTlRFTlRfQlVHUkVQT1JUX1NUQVJURUQpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfUElELCA0Mik7Ci0gICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9OQU1FLCBuYW1lKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX01BWCwgMTAwMCk7Ci0gICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3QoaW50ZW50KTsKKyAgICAgICAgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24oTkFNRSwgIjAuMDAlIik7CiAKLSAgICAgICAgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24obmFtZSwgIjAuMDAlIik7CisgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KFBST0dSRVNTX1BST1BFUlRZLCAiMTA4Iik7CisgICAgICAgIGFzc2VydFByb2dyZXNzTm90aWZpY2F0aW9uKE5BTUUsICIxMC44MCUiKTsKIAotICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgiZHVtcHN0YXRlLjQyLnByb2dyZXNzIiwgIjEwOCIpOwotICAgICAgICBhc3NlcnRQcm9ncmVzc05vdGlmaWNhdGlvbihuYW1lLCAiMTAuODAlIik7CisgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KFBST0dSRVNTX1BST1BFUlRZLCAiNTAwIik7CisgICAgICAgIGFzc2VydFByb2dyZXNzTm90aWZpY2F0aW9uKE5BTUUsICI1MC4wMCUiKTsKIAotICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgiZHVtcHN0YXRlLjQyLnByb2dyZXNzIiwgIjUwMCIpOwotICAgICAgICBhc3NlcnRQcm9ncmVzc05vdGlmaWNhdGlvbihuYW1lLCAiNTAuMDAlIik7CisgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KE1BWF9QUk9QRVJUWSwgIjIwMDAiKTsKKyAgICAgICAgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24oTkFNRSwgIjI1LjAwJSIpOwogCi0gICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KCJkdW1wc3RhdGUuNDIubWF4IiwgIjIwMDAiKTsKLSAgICAgICAgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24obmFtZSwgIjI1LjAwJSIpOworICAgICAgICBCdW5kbGUgZXh0cmFzID0KKyAgICAgICAgICAgICAgICBzZW5kQnVncmVwb3J0RmluaXNoZWRBbmRHZXRTaGFyZWRJbnRlbnQoUElELCBtUGxhaW5UZXh0UGF0aCwgbVNjcmVlbnNob3RQYXRoKTsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIFNDUkVFTlNIT1RfQ09OVEVOVCwgUElELCBaSVBfRklMRSwKKyAgICAgICAgICAgICAgICBOQU1FLCBOT19USVRMRSwgTk9fREVTQ1JJUFRJT04sIDEsIHRydWUpOwogCi0gICAgICAgIGNyZWF0ZVRleHRGaWxlKFBMQUlOX1RFWFRfUEFUSCwgQlVHUkVQT1JUX0NPTlRFTlQpOwotICAgICAgICBjcmVhdGVUZXh0RmlsZShTQ1JFRU5TSE9UX1BBVEgsIFNDUkVFTlNIT1RfQ09OVEVOVCk7Ci0gICAgICAgIEJ1bmRsZSBleHRyYXMgPSBzZW5kQnVncmVwb3J0RmluaXNoZWRJbnRlbnQoNDIsIFBMQUlOX1RFWFRfUEFUSCwgU0NSRUVOU0hPVF9QQVRIKTsKLSAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIFNDUkVFTlNIT1RfQ09OVEVOVCk7CisgICAgICAgIGFzc2VydFNlcnZpY2VOb3RSdW5uaW5nKCk7CisgICAgfQogCi0gICAgICAgIC8vIFRPRE86IGFzc2VydCBzZXJ2aWNlIGlzIGRvd24KKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvZ3Jlc3NfdGFrZUV4dHJhU2NyZWVuc2hvdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0YWtlRXh0cmFTY3JlZW5zaG90VGVzdChmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFByb2dyZXNzX3Rha2VFeHRyYVNjcmVlbnNob3RTZXJ2aWNlRGllc0FmdGVyU2NyZWVuc2hvdFRha2VuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRha2VFeHRyYVNjcmVlbnNob3RUZXN0KHRydWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB0YWtlRXh0cmFTY3JlZW5zaG90VGVzdChib29sZWFuIHNlcnZpY2VEaWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmVzZXRQcm9wZXJ0aWVzKCk7CisgICAgICAgIHNlbmRCdWdyZXBvcnRTdGFydGVkKDEwMDApOworCisgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgdGFrZVNjcmVlbnNob3QoKTsKKyAgICAgICAgYXNzZXJ0U2NyZWVuc2hvdEJ1dHRvbkVuYWJsZWQoZmFsc2UpOworICAgICAgICB3YWl0Rm9yU2NyZWVuc2hvdEJ1dHRvbkVuYWJsZWQodHJ1ZSk7CisKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkKFBJRCwgbVBsYWluVGV4dFBhdGgsIG1TY3JlZW5zaG90UGF0aCk7CisKKyAgICAgICAgaWYgKHNlcnZpY2VEaWVzKSB7CisgICAgICAgICAgICB3YWl0U2hhcmVOb3RpZmljYXRpb24oKTsKKyAgICAgICAgICAgIGtpbGxTZXJ2aWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBCdW5kbGUgZXh0cmFzID0gYWNjZXB0QnVncmVwb3J0QW5kR2V0U2hhcmVkSW50ZW50KCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBTQ1JFRU5TSE9UX0NPTlRFTlQsIFBJRCwgWklQX0ZJTEUsCisgICAgICAgICAgICAgICAgTkFNRSwgTk9fVElUTEUsIE5PX0RFU0NSSVBUSU9OLCAyLCB0cnVlKTsKKworICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTY3JlZW5zaG90RmluaXNoZXNBZnRlckJ1Z3JlcG9ydCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzY3JlZW5zaG90RmluaXNoZXNBZnRlckJ1Z3JlcG9ydFRlc3QoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTY3JlZW5zaG90RmluaXNoZXNBZnRlckJ1Z3JlcG9ydEFuZFNlcnZpY2VEaWVzQmVmb3JlU2hhcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzY3JlZW5zaG90RmluaXNoZXNBZnRlckJ1Z3JlcG9ydFRlc3QodHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNjcmVlbnNob3RGaW5pc2hlc0FmdGVyQnVncmVwb3J0VGVzdChib29sZWFuIHNlcnZpY2VEaWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmVzZXRQcm9wZXJ0aWVzKCk7CisKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoMTAwMCk7CisgICAgICAgIHNlbmRCdWdyZXBvcnRGaW5pc2hlZChQSUQsIG1QbGFpblRleHRQYXRoLCBOT19TQ1JFRU5TSE9UKTsKKyAgICAgICAgd2FpdFNoYXJlTm90aWZpY2F0aW9uKCk7CisKKyAgICAgICAgLy8gVGhlcmUncyBubyBpbmRpY2F0aW9uIGluIHRoZSBVSSBhYm91dCB0aGUgc2NyZWVuc2hvdCBmaW5pc2gsIHNvIGp1c3Qgc2xlZXAgbGlrZSBhIGJhYnkuLi4KKyAgICAgICAgVGhyZWFkLnNsZWVwKFNBRkVfU0NSRUVOU0hPVF9ERUxBWSAqIERhdGVVdGlscy5TRUNPTkRfSU5fTUlMTElTKTsKKworICAgICAgICBpZiAoc2VydmljZURpZXMpIHsKKyAgICAgICAgICAgIGtpbGxTZXJ2aWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBCdW5kbGUgZXh0cmFzID0gYWNjZXB0QnVncmVwb3J0QW5kR2V0U2hhcmVkSW50ZW50KCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBOT19TQ1JFRU5TSE9ULCBQSUQsIFpJUF9GSUxFLAorICAgICAgICAgICAgICAgIE5BTUUsIE5PX1RJVExFLCBOT19ERVNDUklQVElPTiwgMSwgdHJ1ZSk7CisKKyAgICAgICAgYXNzZXJ0U2VydmljZU5vdFJ1bm5pbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvZ3Jlc3NfY2hhbmdlRGV0YWlsc0ludmFsaWRJbnB1dCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIHJlc2V0UHJvcGVydGllcygpOworICAgICAgICBzZW5kQnVncmVwb3J0U3RhcnRlZCgxMDAwKTsKKyAgICAgICAgd2FpdEZvclNjcmVlbnNob3RCdXR0b25FbmFibGVkKHRydWUpOworCisgICAgICAgIERldGFpbHNVaSBkZXRhaWxzVWkgPSBuZXcgRGV0YWlsc1VpKG1VaUJvdCk7CisKKyAgICAgICAgLy8gQ2hlY2sgaW5pdGlhbCBuYW1lLgorICAgICAgICBTdHJpbmcgYWN0dWFsTmFtZSA9IGRldGFpbHNVaS5uYW1lRmllbGQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7CisgICAgICAgIGFzc2VydEVxdWFscygiV3JvbmcgdmFsdWUgb24gZmllbGQgJ25hbWUnIiwgTkFNRSwgYWN0dWFsTmFtZSk7CisKKyAgICAgICAgLy8gQ2hhbmdlIG5hbWUgLSBpdCBzaG91bGQgaGF2ZSBjaGFuZ2VkIHN5c3RlbSBwcm9wZXJ0eSBvbmNlIGZvY3VzIGlzIGNoYW5nZWQuCisgICAgICAgIGRldGFpbHNVaS5uYW1lRmllbGQuc2V0VGV4dChORVdfTkFNRSk7CisgICAgICAgIGRldGFpbHNVaS5mb2N1c0F3YXlGcm9tTmFtZSgpOworICAgICAgICBhc3NlcnRQcm9wZXJ0eVZhbHVlKE5BTUVfUFJPUEVSVFksIE5FV19OQU1FKTsKKworICAgICAgICAvLyBDYW5jZWwgdGhlIGRpYWxvZyB0byBtYWtlIHN1cmUgcHJvcGVydHkgd2FzIHJlc3RvcmVkLgorICAgICAgICBkZXRhaWxzVWkuY2xpY2tDYW5jZWwoKTsKKyAgICAgICAgYXNzZXJ0UHJvcGVydHlWYWx1ZShOQU1FX1BST1BFUlRZLCBOQU1FKTsKKworICAgICAgICAvLyBOb3cgdHJ5IHRvIHNldCBhbiBpbnZhbGlkIG5hbWUuCisgICAgICAgIGRldGFpbHNVaS5yZU9wZW4oKTsKKyAgICAgICAgZGV0YWlsc1VpLm5hbWVGaWVsZC5zZXRUZXh0KCIvZXRjL3Bhc3N3ZCIpOworICAgICAgICBkZXRhaWxzVWkuY2xpY2tPaygpOworICAgICAgICBhc3NlcnRQcm9wZXJ0eVZhbHVlKE5BTUVfUFJPUEVSVFksICJfZXRjX3Bhc3N3ZCIpOworCisgICAgICAgIC8vIEZpbmFsbHksIG1ha2UgdGhlIHJlYWwgY2hhbmdlcy4KKyAgICAgICAgZGV0YWlsc1VpLnJlT3BlbigpOworICAgICAgICBkZXRhaWxzVWkubmFtZUZpZWxkLnNldFRleHQoTkVXX05BTUUpOworICAgICAgICBkZXRhaWxzVWkudGl0bGVGaWVsZC5zZXRUZXh0KFRJVExFKTsKKyAgICAgICAgZGV0YWlsc1VpLmRlc2NGaWVsZC5zZXRUZXh0KG1EZXNjcmlwdGlvbik7CisKKyAgICAgICAgZGV0YWlsc1VpLmNsaWNrT2soKTsKKworICAgICAgICBhc3NlcnRQcm9wZXJ0eVZhbHVlKE5BTUVfUFJPUEVSVFksIE5FV19OQU1FKTsKKyAgICAgICAgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24oTkVXX05BTUUsICIwLjAwJSIpOworCisgICAgICAgIEJ1bmRsZSBleHRyYXMgPSBzZW5kQnVncmVwb3J0RmluaXNoZWRBbmRHZXRTaGFyZWRJbnRlbnQoUElELCBtUGxhaW5UZXh0UGF0aCwKKyAgICAgICAgICAgICAgICBtU2NyZWVuc2hvdFBhdGgpOworICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBCVUdSRVBPUlRfQ09OVEVOVCwgU0NSRUVOU0hPVF9DT05URU5ULCBQSUQsIFRJVExFLAorICAgICAgICAgICAgICAgIE5FV19OQU1FLCBUSVRMRSwgbURlc2NyaXB0aW9uLCAxLCB0cnVlKTsKKworICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9ncmVzc19jaGFuZ2VEZXRhaWxzUGxhaW5CdWdyZXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgY2hhbmdlRGV0YWlsc1Rlc3QodHJ1ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFByb2dyZXNzX2NoYW5nZURldGFpbHNaaXBwZWRCdWdyZXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgY2hhbmdlRGV0YWlsc1Rlc3QoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNoYW5nZURldGFpbHNUZXN0KGJvb2xlYW4gcGxhaW5UZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICByZXNldFByb3BlcnRpZXMoKTsKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoMTAwMCk7CisgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKKworICAgICAgICBEZXRhaWxzVWkgZGV0YWlsc1VpID0gbmV3IERldGFpbHNVaShtVWlCb3QpOworCisgICAgICAgIC8vIENoZWNrIGluaXRpYWwgbmFtZS4KKyAgICAgICAgU3RyaW5nIGFjdHVhbE5hbWUgPSBkZXRhaWxzVWkubmFtZUZpZWxkLmdldFRleHQoKS50b1N0cmluZygpOworICAgICAgICBhc3NlcnRFcXVhbHMoIldyb25nIHZhbHVlIG9uIGZpZWxkICduYW1lJyIsIE5BTUUsIGFjdHVhbE5hbWUpOworCisgICAgICAgIC8vIENoYW5nZSBmaWVsZHMuCisgICAgICAgIGRldGFpbHNVaS5yZU9wZW4oKTsKKyAgICAgICAgZGV0YWlsc1VpLm5hbWVGaWVsZC5zZXRUZXh0KE5FV19OQU1FKTsKKyAgICAgICAgZGV0YWlsc1VpLnRpdGxlRmllbGQuc2V0VGV4dChUSVRMRSk7CisgICAgICAgIGRldGFpbHNVaS5kZXNjRmllbGQuc2V0VGV4dChtRGVzY3JpcHRpb24pOworCisgICAgICAgIGRldGFpbHNVaS5jbGlja09rKCk7CisKKyAgICAgICAgYXNzZXJ0UHJvcGVydHlWYWx1ZShOQU1FX1BST1BFUlRZLCBORVdfTkFNRSk7CisgICAgICAgIGFzc2VydFByb2dyZXNzTm90aWZpY2F0aW9uKE5FV19OQU1FLCAiMC4wMCUiKTsKKworICAgICAgICBCdW5kbGUgZXh0cmFzID0gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KFBJRCwKKyAgICAgICAgICAgICAgICBwbGFpblRleHQ/IG1QbGFpblRleHRQYXRoIDogbVppcFBhdGgsIG1TY3JlZW5zaG90UGF0aCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBTQ1JFRU5TSE9UX0NPTlRFTlQsIFBJRCwgVElUTEUsCisgICAgICAgICAgICAgICAgTkVXX05BTUUsIFRJVExFLCBtRGVzY3JpcHRpb24sIDEsIHRydWUpOworCisgICAgICAgIGFzc2VydFNlcnZpY2VOb3RSdW5uaW5nKCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdHMgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBpbml0aWFsIHNjcmVlbnNob3QgYW5kIGR1bXBzdGF0ZSBhcmUgZmluaXNoZWQgd2hpbGUgdGhlIHVzZXIKKyAgICAgKiBpcyBjaGFuZ2luZyB0aGUgaW5mbyBpbiB0aGUgZGV0YWlscyBzY3JlZW4uCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFByb2dyZXNzX2J1Z3JlcG9ydEFuZFNjcmVlbnNob3RGaW5pc2hlZFdoaWxlQ2hhbmdpbmdEZXRhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGJ1Z3JlcG9ydEZpbmlzaGVkV2hpbGVDaGFuZ2luZ0RldGFpbHNUZXN0KGZhbHNlKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0cyB0aGUgc2NlbmFyaW8gd2hlcmUgZHVtcHN0YXRlIGlzIGZpbmlzaGVkIHdoaWxlIHRoZSB1c2VyIGlzIGNoYW5naW5nIHRoZSBpbmZvIGluIHRoZQorICAgICAqIGRldGFpbHMgc2NyZWVuLCBidXQgdGhlIGluaXRpYWwgc2NyZWVuc2hvdCBmaW5pc2hlcyBhZnRlcndhcmRzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9ncmVzc19idWdyZXBvcnRGaW5pc2hlZFdoaWxlQ2hhbmdpbmdEZXRhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGJ1Z3JlcG9ydEZpbmlzaGVkV2hpbGVDaGFuZ2luZ0RldGFpbHNUZXN0KHRydWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBidWdyZXBvcnRGaW5pc2hlZFdoaWxlQ2hhbmdpbmdEZXRhaWxzVGVzdChib29sZWFuIHdhaXRTY3JlZW5zaG90KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmVzZXRQcm9wZXJ0aWVzKCk7CisgICAgICAgIHNlbmRCdWdyZXBvcnRTdGFydGVkKDEwMDApOworICAgICAgICBpZiAod2FpdFNjcmVlbnNob3QpIHsKKyAgICAgICAgICAgIHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIERldGFpbHNVaSBkZXRhaWxzVWkgPSBuZXcgRGV0YWlsc1VpKG1VaUJvdCk7CisKKyAgICAgICAgLy8gRmluaXNoIHRoZSBidWdyZXBvcnQgd2hpbGUgdXNlcidzIHN0aWxsIHR5cGluZyB0aGUgbmFtZS4KKyAgICAgICAgZGV0YWlsc1VpLm5hbWVGaWVsZC5zZXRUZXh0KE5FV19OQU1FKTsKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkKFBJRCwgbVBsYWluVGV4dFBhdGgsIG1TY3JlZW5zaG90UGF0aCk7CisKKyAgICAgICAgLy8gV2FpdCB1bnRpbCB0aGUgc2hhcmUgbm90aWZpY2F0aW9uIGlzIHJlY2VpdmVkLi4uCisgICAgICAgIG1VaUJvdC5nZXROb3RpZmljYXRpb24obUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSkpOworICAgICAgICAvLyAuLi50aGVuIGNsb3NlIG5vdGlmaWNhdGlvbiBiYXIuCisgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChJbnRlbnQuQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTKSk7CisKKyAgICAgICAgLy8gTWFrZSBzdXJlIFVJIHdhcyB1cGRhdGVkIHByb3Blcmx5LgorICAgICAgICBhc3NlcnRGYWxzZSgiZGlkbid0IGRpc2FibGUgbmFtZSBvbiBVSSIsIGRldGFpbHNVaS5uYW1lRmllbGQuaXNFbmFibGVkKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImRpZG4ndCByZXZlcnQgbmFtZSBvbiBVSSIsIE5BTUUsIGRldGFpbHNVaS5uYW1lRmllbGQuZ2V0VGV4dCgpLnRvU3RyaW5nKCkpOworCisgICAgICAgIC8vIEZpbmlzaCBjaGFuZ2luZyBvdGhlciBmaWVsZHMuCisgICAgICAgIGRldGFpbHNVaS50aXRsZUZpZWxkLnNldFRleHQoVElUTEUpOworICAgICAgICBkZXRhaWxzVWkuZGVzY0ZpZWxkLnNldFRleHQobURlc2NyaXB0aW9uKTsKKyAgICAgICAgZGV0YWlsc1VpLmNsaWNrT2soKTsKKworICAgICAgICAvLyBGaW5hbGx5LCBzaGFyZSBidWdyZXBvcnQuCisgICAgICAgIEJ1bmRsZSBleHRyYXMgPSBhY2NlcHRCdWdyZXBvcnRBbmRHZXRTaGFyZWRJbnRlbnQoKTsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIFNDUkVFTlNIT1RfQ09OVEVOVCwgUElELCBUSVRMRSwKKyAgICAgICAgICAgICAgICBOQU1FLCBUSVRMRSwgbURlc2NyaXB0aW9uLCAxLCB0cnVlKTsKKworICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RCdWdyZXBvcnRGaW5pc2hlZF93aXRoV2FybmluZygpIHRocm93cyBFeGNlcHRpb24gewpAQCAtMTM4LDExICszNzcsOCBAQAogICAgICAgICBCdWdyZXBvcnRQcmVmcy5zZXRXYXJuaW5nU3RhdGUobUNvbnRleHQsIEJ1Z3JlcG9ydFByZWZzLlNUQVRFX1NIT1cpOwogCiAgICAgICAgIC8vIFNlbmQgbm90aWZpY2F0aW9uIGFuZCBjbGljayBvbiBzaGFyZS4KLSAgICAgICAgY3JlYXRlVGV4dEZpbGUoUExBSU5fVEVYVF9QQVRILCBCVUdSRVBPUlRfQ09OVEVOVCk7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KElOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQpOwotICAgICAgICBpbnRlbnQucHV0RXh0cmEoRVhUUkFfQlVHUkVQT1JULCBQTEFJTl9URVhUX1BBVEgpOwotICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0KGludGVudCk7Ci0gICAgICAgIG1VaUJvdC5jbGlja09uTm90aWZpY2F0aW9uKG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfZmluaXNoZWRfdGl0bGUpKTsKKyAgICAgICAgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkKE5PX1BJRCwgbVBsYWluVGV4dFBhdGgsIG51bGwpOworICAgICAgICBhY2NlcHRCdWdyZXBvcnQoKTsKIAogICAgICAgICAvLyBIYW5kbGUgdGhlIHdhcm5pbmcKICAgICAgICAgbVVpQm90LmdldFZpc2libGVPYmplY3QobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF9jb25maXJtKSk7CkBAIC0xNTYsMzcgKzM5MiwzOCBAQAogICAgICAgICAvLyBTaGFyZSB0aGUgYnVncmVwb3J0LgogICAgICAgICBtVWlCb3QuY2hvb3NlQWN0aXZpdHkoVUlfTkFNRSk7CiAgICAgICAgIEJ1bmRsZSBleHRyYXMgPSBtTGlzdGVuZXIuZ2V0RXh0cmFzKCk7Ci0gICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBudWxsKTsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIE5PX1NDUkVFTlNIT1QpOwogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCdzIGhpZGRlbiBub3cuCiAgICAgICAgIGludCBuZXdTdGF0ZSA9IEJ1Z3JlcG9ydFByZWZzLmdldFdhcm5pbmdTdGF0ZShtQ29udGV4dCwgQnVncmVwb3J0UHJlZnMuU1RBVEVfVU5LTk9XTik7CiAgICAgICAgIGFzc2VydEVxdWFscygiRGlkbid0IGNoYW5nZSBzdGF0ZSIsIEJ1Z3JlcG9ydFByZWZzLlNUQVRFX0hJREUsIG5ld1N0YXRlKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2hhcmVCdWdyZXBvcnRBZnRlclNlcnZpY2VEaWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHNlbmRCdWdyZXBvcnRGaW5pc2hlZChOT19QSUQsIG1QbGFpblRleHRQYXRoLCBOT19TQ1JFRU5TSE9UKTsKKyAgICAgICAga2lsbFNlcnZpY2UoKTsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IGFjY2VwdEJ1Z3JlcG9ydEFuZEdldFNoYXJlZEludGVudCgpOworICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBCVUdSRVBPUlRfQ09OVEVOVCwgTk9fU0NSRUVOU0hPVCk7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgdGVzdEJ1Z3JlcG9ydEZpbmlzaGVkX3BsYWluQnVncmVwb3J0QW5kU2NyZWVuc2hvdCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBjcmVhdGVUZXh0RmlsZShQTEFJTl9URVhUX1BBVEgsIEJVR1JFUE9SVF9DT05URU5UKTsKLSAgICAgICAgY3JlYXRlVGV4dEZpbGUoU0NSRUVOU0hPVF9QQVRILCBTQ1JFRU5TSE9UX0NPTlRFTlQpOwotICAgICAgICBCdW5kbGUgZXh0cmFzID0gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkSW50ZW50KFBMQUlOX1RFWFRfUEFUSCwgU0NSRUVOU0hPVF9QQVRIKTsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IHNlbmRCdWdyZXBvcnRGaW5pc2hlZEFuZEdldFNoYXJlZEludGVudChtUGxhaW5UZXh0UGF0aCwgbVNjcmVlbnNob3RQYXRoKTsKICAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIFNDUkVFTlNIT1RfQ09OVEVOVCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdEJ1Z3JlcG9ydEZpbmlzaGVkX3ppcHBlZEJ1Z3JlcG9ydEFuZFNjcmVlbnNob3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgY3JlYXRlWmlwRmlsZShaSVBfUEFUSCwgQlVHUkVQT1JUX0ZJTEUsIEJVR1JFUE9SVF9DT05URU5UKTsKLSAgICAgICAgY3JlYXRlVGV4dEZpbGUoU0NSRUVOU0hPVF9QQVRILCBTQ1JFRU5TSE9UX0NPTlRFTlQpOwotICAgICAgICBCdW5kbGUgZXh0cmFzID0gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkSW50ZW50KFpJUF9QQVRILCBTQ1JFRU5TSE9UX1BBVEgpOworICAgICAgICBCdW5kbGUgZXh0cmFzID0gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KG1aaXBQYXRoLCBtU2NyZWVuc2hvdFBhdGgpOwogICAgICAgICBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoZXh0cmFzLCBCVUdSRVBPUlRfQ09OVEVOVCwgU0NSRUVOU0hPVF9DT05URU5UKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QnVncmVwb3J0RmluaXNoZWRfcGxhaW5CdWdyZXBvcnRBbmROb1NjcmVlbnNob3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgY3JlYXRlVGV4dEZpbGUoUExBSU5fVEVYVF9QQVRILCBCVUdSRVBPUlRfQ09OVEVOVCk7Ci0gICAgICAgIEJ1bmRsZSBleHRyYXMgPSBzZW5kQnVncmVwb3J0RmluaXNoZWRJbnRlbnQoUExBSU5fVEVYVF9QQVRILCBudWxsKTsKLSAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIG51bGwpOworICAgICAgICBCdW5kbGUgZXh0cmFzID0gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KG1QbGFpblRleHRQYXRoLCBOT19TQ1JFRU5TSE9UKTsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgQlVHUkVQT1JUX0NPTlRFTlQsIE5PX1NDUkVFTlNIT1QpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RCdWdyZXBvcnRGaW5pc2hlZF96aXBwZWRCdWdyZXBvcnRBbmROb1NjcmVlbnNob3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgY3JlYXRlWmlwRmlsZShaSVBfUEFUSCwgQlVHUkVQT1JUX0ZJTEUsIEJVR1JFUE9SVF9DT05URU5UKTsKLSAgICAgICAgQnVuZGxlIGV4dHJhcyA9IHNlbmRCdWdyZXBvcnRGaW5pc2hlZEludGVudChaSVBfUEFUSCwgbnVsbCk7Ci0gICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBudWxsKTsKKyAgICAgICAgQnVuZGxlIGV4dHJhcyA9IHNlbmRCdWdyZXBvcnRGaW5pc2hlZEFuZEdldFNoYXJlZEludGVudChtWmlwUGF0aCwgTk9fU0NSRUVOU0hPVCk7CisgICAgICAgIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShleHRyYXMsIEJVR1JFUE9SVF9DT05URU5ULCBOT19TQ1JFRU5TSE9UKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY2FuY2VsRXhpc3RpbmdOb3RpZmljYXRpb25zKCkgewpAQCAtMTk5LDI3ICs0MzYsODcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYXNzZXJ0UHJvZ3Jlc3NOb3RpZmljYXRpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBwZXJjZW50KSB7Ci0gICAgICAgIC8vIFRPRE86IGl0IGN1cnJlbnQgbG9va3MgZm9yIDMgZGlzdGluY3Qgb2JqZWN0cywgd2l0aG91dCB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZWlyCisgICAgICAgIC8vIFRPRE86IGl0IGN1cnJlbnRseSBsb29rcyBmb3IgMyBkaXN0aW5jdCBvYmplY3RzLCB3aXRob3V0IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlaXIKICAgICAgICAgLy8gcmVsYXRpb25zaGlwLgotICAgICAgICBTdHJpbmcgdGl0bGUgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlKTsKLSAgICAgICAgTG9nLnYoVEFHLCAiTG9va2luZyBmb3IgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIHRpdGxlOiAnIiArIHRpdGxlKyAiJyIpOwotICAgICAgICBtVWlCb3QuZ2V0Tm90aWZpY2F0aW9uKHRpdGxlKTsKKyAgICAgICAgb3BlblByb2dyZXNzTm90aWZpY2F0aW9uKCk7CiAgICAgICAgIExvZy52KFRBRywgIkxvb2tpbmcgZm9yIHByb2dyZXNzIG5vdGlmaWNhdGlvbiBkZXRhaWxzOiAnIiArIG5hbWUgKyAiLSIgKyBwZXJjZW50ICsgIiciKTsKICAgICAgICAgbVVpQm90LmdldE9iamVjdChuYW1lKTsKICAgICAgICAgbVVpQm90LmdldE9iamVjdChwZXJjZW50KTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgb3BlblByb2dyZXNzTm90aWZpY2F0aW9uKCkgeworICAgICAgICBTdHJpbmcgdGl0bGUgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2luX3Byb2dyZXNzX3RpdGxlKTsKKyAgICAgICAgTG9nLnYoVEFHLCAiTG9va2luZyBmb3IgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uIHRpdGxlOiAnIiArIHRpdGxlICsgIiciKTsKKyAgICAgICAgbVVpQm90LmdldE5vdGlmaWNhdGlvbih0aXRsZSk7CisgICAgfQorCisgICAgdm9pZCByZXNldFByb3BlcnRpZXMoKSB7CisgICAgICAgIC8vIFRPRE86IGNhbGwgbWV0aG9kIHRvIHJlbW92ZSBwcm9wZXJ0eSBpbnN0ZWFkCisgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KFBST0dSRVNTX1BST1BFUlRZLCAiMCIpOworICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldChNQVhfUFJPUEVSVFksICIwIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZHMgYSAiYnVncmVwb3J0IHN0YXJ0ZWQiIGludGVudCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2VuZEJ1Z3JlcG9ydFN0YXJ0ZWQoaW50IG1heCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KElOVEVOVF9CVUdSRVBPUlRfU1RBUlRFRCk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9QSUQsIFBJRCk7CisgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9OQU1FLCBOQU1FKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX01BWCwgbWF4KTsKKyAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdChpbnRlbnQpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFNlbmRzIGEgImJ1Z3JlcG9ydCBmaW5pc2hlZCIgaW50ZW50IGFuZCB3YWl0cyBmb3IgdGhlIHJlc3VsdC4KICAgICAgKgotICAgICAqIEByZXR1cm4gZXh0cmFzIHNlbnQgdG8gdGhlIGJ1Z3JlcG9ydCBmaW5pc2hlZCBjb25zdW1lci4KKyAgICAgKiBAcmV0dXJuIGV4dHJhcyBzZW50IGluIHRoZSBzaGFyZWQgaW50ZW50LgogICAgICAqLwotICAgIHByaXZhdGUgQnVuZGxlIHNlbmRCdWdyZXBvcnRGaW5pc2hlZEludGVudChTdHJpbmcgYnVncmVwb3J0UGF0aCwgU3RyaW5nIHNjcmVlbnNob3RQYXRoKSB7Ci0gICAgICAgIHJldHVybiBzZW5kQnVncmVwb3J0RmluaXNoZWRJbnRlbnQobnVsbCwgYnVncmVwb3J0UGF0aCwgc2NyZWVuc2hvdFBhdGgpOworICAgIHByaXZhdGUgQnVuZGxlIHNlbmRCdWdyZXBvcnRGaW5pc2hlZEFuZEdldFNoYXJlZEludGVudChTdHJpbmcgYnVncmVwb3J0UGF0aCwKKyAgICAgICAgICAgIFN0cmluZyBzY3JlZW5zaG90UGF0aCkgeworICAgICAgICByZXR1cm4gc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KG51bGwsIGJ1Z3JlcG9ydFBhdGgsIHNjcmVlbnNob3RQYXRoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIEJ1bmRsZSBzZW5kQnVncmVwb3J0RmluaXNoZWRJbnRlbnQoSW50ZWdlciBwaWQsIFN0cmluZyBidWdyZXBvcnRQYXRoLAorICAgIC8qKgorICAgICAqIFNlbmRzIGEgImJ1Z3JlcG9ydCBmaW5pc2hlZCIgaW50ZW50IGFuZCB3YWl0cyBmb3IgdGhlIHJlc3VsdC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gZXh0cmFzIHNlbnQgaW4gdGhlIHNoYXJlZCBpbnRlbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBCdW5kbGUgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkQW5kR2V0U2hhcmVkSW50ZW50KEludGVnZXIgcGlkLCBTdHJpbmcgYnVncmVwb3J0UGF0aCwKICAgICAgICAgICAgIFN0cmluZyBzY3JlZW5zaG90UGF0aCkgeworICAgICAgICBzZW5kQnVncmVwb3J0RmluaXNoZWQocGlkLCBidWdyZXBvcnRQYXRoLCBzY3JlZW5zaG90UGF0aCk7CisgICAgICAgIHJldHVybiBhY2NlcHRCdWdyZXBvcnRBbmRHZXRTaGFyZWRJbnRlbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBY2NlcHRzIHRoZSBub3RpZmljYXRpb24gdG8gc2hhcmUgdGhlIGZpbmlzaGVkIGJ1Z3JlcG9ydCBhbmQgd2FpdHMgZm9yIHRoZSByZXN1bHQuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIGV4dHJhcyBzZW50IGluIHRoZSBzaGFyZWQgaW50ZW50LgorICAgICAqLworICAgIHByaXZhdGUgQnVuZGxlIGFjY2VwdEJ1Z3JlcG9ydEFuZEdldFNoYXJlZEludGVudCgpIHsKKyAgICAgICAgYWNjZXB0QnVncmVwb3J0KCk7CisgICAgICAgIG1VaUJvdC5jaG9vc2VBY3Rpdml0eShVSV9OQU1FKTsKKyAgICAgICAgcmV0dXJuIG1MaXN0ZW5lci5nZXRFeHRyYXMoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXYWl0cyBmb3IgdGhlIG5vdGlmaWNhdGlvbiB0byBzaGFyZSB0aGUgZmluaXNoZWQgYnVncmVwb3J0LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3YWl0U2hhcmVOb3RpZmljYXRpb24oKSB7CisgICAgICAgIG1VaUJvdC5nZXROb3RpZmljYXRpb24obUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJ1Z3JlcG9ydF9maW5pc2hlZF90aXRsZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFjY2VwdHMgdGhlIG5vdGlmaWNhdGlvbiB0byBzaGFyZSB0aGUgZmluaXNoZWQgYnVncmVwb3J0LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhY2NlcHRCdWdyZXBvcnQoKSB7CisgICAgICAgIG1VaUJvdC5jbGlja09uTm90aWZpY2F0aW9uKG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5idWdyZXBvcnRfZmluaXNoZWRfdGl0bGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZW5kcyBhICJidWdyZXBvcnQgZmluaXNoZWQiIGludGVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgc2VuZEJ1Z3JlcG9ydEZpbmlzaGVkKEludGVnZXIgcGlkLCBTdHJpbmcgYnVncmVwb3J0UGF0aCwgU3RyaW5nIHNjcmVlbnNob3RQYXRoKSB7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KElOVEVOVF9CVUdSRVBPUlRfRklOSVNIRUQpOwogICAgICAgICBpZiAocGlkICE9IG51bGwpIHsKICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShFWFRSQV9QSUQsIHBpZCk7CkBAIC0yMzIsNDggKzUyOSwxMDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIG1Db250ZXh0LnNlbmRCcm9hZGNhc3QoaW50ZW50KTsKLQotICAgICAgICBtVWlCb3QuY2xpY2tPbk5vdGlmaWNhdGlvbihtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2ZpbmlzaGVkX3RpdGxlKSk7Ci0gICAgICAgIG1VaUJvdC5jaG9vc2VBY3Rpdml0eShVSV9OQU1FKTsKLSAgICAgICAgcmV0dXJuIG1MaXN0ZW5lci5nZXRFeHRyYXMoKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBBc3NlcnRzIHRoZSBwcm9wZXIgQUNUSU9OX1NFTkRfTVVMVElQTEUgaW50ZW50IHdhcyBzZW50LgorICAgICAqIEFzc2VydHMgdGhlIHByb3BlciB7QGxpbmsgSW50ZW50I0FDVElPTl9TRU5EX01VTFRJUExFfSBpbnRlbnQgd2FzIHNlbnQuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGFzc2VydEFjdGlvblNlbmRNdWx0aXBsZShCdW5kbGUgZXh0cmFzLCBTdHJpbmcgYnVncmVwb3J0Q29udGVudCwKICAgICAgICAgICAgIFN0cmluZyBzY3JlZW5zaG90Q29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgYXNzZXJ0QWN0aW9uU2VuZE11bHRpcGxlKGV4dHJhcywgYnVncmVwb3J0Q29udGVudCwgc2NyZWVuc2hvdENvbnRlbnQsIFBJRCwgWklQX0ZJTEUsCisgICAgICAgICAgICAgICAgTk9fTkFNRSwgTk9fVElUTEUsIE5PX0RFU0NSSVBUSU9OLCAwLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXNzZXJ0cyB0aGUgcHJvcGVyIHtAbGluayBJbnRlbnQjQUNUSU9OX1NFTkRfTVVMVElQTEV9IGludGVudCB3YXMgc2VudC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBleHRyYXMgZXh0cmFzIHJlY2VpdmVkIGluIHRoZSBpbnRlbnQKKyAgICAgKiBAcGFyYW0gYnVncmVwb3J0Q29udGVudCBleHBlY3RlZCBjb250ZW50IGluIHRoZSBidWdyZXBvcnQgZmlsZQorICAgICAqIEBwYXJhbSBzY3JlZW5zaG90Q29udGVudCBleHBlY3RlZCBjb250ZW50IGluIHRoZSBzY3JlZW5zaG90IGZpbGUgKHNlbnQgYnkgZHVtcHN0YXRlKSwgaWYgYW55CisgICAgICogQHBhcmFtIHBpZCBlbXVsYXRlZCBkdW1wc3RhdGUgcGlkCisgICAgICogQHBhcmFtIG5hbWUgZXhwZWN0ZWQgc3ViamVjdAorICAgICAqIEBwYXJhbSBuYW1lIGJ1Z3JlcG9ydCBuYW1lIGFzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIChvciByZWNlaXZlZCBieSBkdW1wc3RhdGUpCisgICAgICogQHBhcmFtIHRpdGxlIGJ1Z3JlcG9ydCBuYW1lIGFzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgICAgICogQHBhcmFtIGRlc2NyaXB0aW9uIGJ1Z3JlcG9ydCBkZXNjcmlwdGlvbiBhcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICAgICAqIEBwYXJhbSBudW1iZXJTY3JlZW5zaG90cyBleHBlY3RlZCBudW1iZXIgb2Ygc2NyZWVuc2hvdHMgdGFrZW4gYnkgU2hlbGwuCisgICAgICogQHBhcmFtIHJlbmFtZWRTY3JlZW5zaG90cyB3aGV0aGVyIHRoZSBzY3JlZW5zaG90cyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVuYW1lZAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBhc3NlcnRBY3Rpb25TZW5kTXVsdGlwbGUoQnVuZGxlIGV4dHJhcywgU3RyaW5nIGJ1Z3JlcG9ydENvbnRlbnQsCisgICAgICAgICAgICBTdHJpbmcgc2NyZWVuc2hvdENvbnRlbnQsIGludCBwaWQsIFN0cmluZyBzdWJqZWN0LAorICAgICAgICAgICAgU3RyaW5nIG5hbWUsIFN0cmluZyB0aXRsZSwgU3RyaW5nIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgaW50IG51bWJlclNjcmVlbnNob3RzLCBib29sZWFuIHJlbmFtZWRTY3JlZW5zaG90cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIGJvZHkgPSBleHRyYXMuZ2V0U3RyaW5nKEludGVudC5FWFRSQV9URVhUKTsKICAgICAgICAgYXNzZXJ0Q29udGFpbnNSZWdleCgibWlzc2luZyBidWlsZCBpbmZvIiwKICAgICAgICAgICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLmdldCgicm8uYnVpbGQuZGVzY3JpcHRpb24iKSwgYm9keSk7CiAgICAgICAgIGFzc2VydENvbnRhaW5zUmVnZXgoIm1pc3Npbmcgc2VyaWFsIG51bWJlciIsCiAgICAgICAgICAgICAgICAgU3lzdGVtUHJvcGVydGllcy5nZXQoInJvLnNlcmlhbG5vIiksIGJvZHkpOworICAgICAgICBpZiAoZGVzY3JpcHRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgYXNzZXJ0Q29udGFpbnNSZWdleCgibWlzc2luZyBkZXNjcmlwdGlvbiIsIGRlc2NyaXB0aW9uLCBib2R5KTsKKyAgICAgICAgfQogCi0gICAgICAgIGFzc2VydEVxdWFscygid3Jvbmcgc3ViamVjdCIsIFpJUF9GSUxFLCBleHRyYXMuZ2V0U3RyaW5nKEludGVudC5FWFRSQV9TVUJKRUNUKSk7CisgICAgICAgIGFzc2VydEVxdWFscygid3Jvbmcgc3ViamVjdCIsIHN1YmplY3QsIGV4dHJhcy5nZXRTdHJpbmcoSW50ZW50LkVYVFJBX1NVQkpFQ1QpKTsKIAogICAgICAgICBMaXN0PFVyaT4gYXR0YWNobWVudHMgPSBleHRyYXMuZ2V0UGFyY2VsYWJsZUFycmF5TGlzdChJbnRlbnQuRVhUUkFfU1RSRUFNKTsKLSAgICAgICAgaW50IGV4cGVjdGVkU2l6ZSA9IHNjcmVlbnNob3RDb250ZW50ICE9IG51bGwgPyAyIDogMTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgYXR0YWNobWVudHMiLCBleHBlY3RlZFNpemUsIGF0dGFjaG1lbnRzLnNpemUoKSk7CisgICAgICAgIGludCBleHBlY3RlZE51bWJlclNjcmVlbnNob3RzID0gbnVtYmVyU2NyZWVuc2hvdHM7CisgICAgICAgIGlmIChzY3JlZW5zaG90Q29udGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBleHBlY3RlZE51bWJlclNjcmVlbnNob3RzICsrOyAvLyBBZGQgc2NyZWVuc2hvdCByZWNlaXZlZCBieSBkdW1wc3RhdGUKKyAgICAgICAgfQorICAgICAgICBpbnQgZXhwZWN0ZWRTaXplID0gZXhwZWN0ZWROdW1iZXJTY3JlZW5zaG90cyArIDE7IC8vIEFsbCBzY3JlZW5zaG90cyBwbHVzIHRoZSBidWdyZXBvcnQgZmlsZQorICAgICAgICBhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBhdHRhY2htZW50cyAoIiArIGF0dGFjaG1lbnRzICsgIikiLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkU2l6ZSwgYXR0YWNobWVudHMuc2l6ZSgpKTsKIAogICAgICAgICAvLyBOZWVkIHRvIGludGVyYWN0IHRocm91Z2ggYWxsIGF0dGFjaG1lbnRzLCBzaW5jZSBvcmRlciBpcyBub3QgZ3VhcmFudGVlZC4KLSAgICAgICAgVXJpIHppcFVyaSA9IG51bGwsIHNjcmVlbnNob3RVcmkgPSBudWxsOworICAgICAgICBVcmkgemlwVXJpID0gbnVsbDsKKyAgICAgICAgTGlzdDxVcmk+IHNjcmVlbnNob3RVcmlzID0gbmV3IEFycmF5TGlzdDw+KGV4cGVjdGVkTnVtYmVyU2NyZWVuc2hvdHMpOwogICAgICAgICBmb3IgKFVyaSBhdHRhY2htZW50IDogYXR0YWNobWVudHMpIHsKICAgICAgICAgICAgIGlmIChhdHRhY2htZW50LmdldFBhdGgoKS5lbmRzV2l0aCgiLnppcCIpKSB7CiAgICAgICAgICAgICAgICAgemlwVXJpID0gYXR0YWNobWVudDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhdHRhY2htZW50LmdldFBhdGgoKS5lbmRzV2l0aCgiLnBuZyIpKSB7Ci0gICAgICAgICAgICAgICAgc2NyZWVuc2hvdFVyaSA9IGF0dGFjaG1lbnQ7CisgICAgICAgICAgICAgICAgc2NyZWVuc2hvdFVyaXMuYWRkKGF0dGFjaG1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGFzc2VydE5vdE51bGwoImRpZCBub3QgZ2V0IC56aXAgYXR0YWNobWVudCIsIHppcFVyaSk7CiAgICAgICAgIGFzc2VydFppcENvbnRlbnQoemlwVXJpLCBCVUdSRVBPUlRfRklMRSwgQlVHUkVQT1JUX0NPTlRFTlQpOwotCi0gICAgICAgIGlmIChzY3JlZW5zaG90Q29udGVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKCJkaWQgbm90IGdldCAucG5nIGF0dGFjaG1lbnQiLCBzY3JlZW5zaG90VXJpKTsKLSAgICAgICAgICAgIGFzc2VydENvbnRlbnQoc2NyZWVuc2hvdFVyaSwgU0NSRUVOU0hPVF9DT05URU5UKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydE51bGwoInNob3VsZCBub3QgaGF2ZSAucG5nIGF0dGFjaG1lbnQiLCBzY3JlZW5zaG90VXJpKTsKKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eSh0aXRsZSkpIHsKKyAgICAgICAgICAgIGFzc2VydFppcENvbnRlbnQoemlwVXJpLCAidGl0bGUudHh0IiwgdGl0bGUpOwogICAgICAgICB9CisgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkoZGVzY3JpcHRpb24pKSB7CisgICAgICAgICAgICBhc3NlcnRaaXBDb250ZW50KHppcFVyaSwgImRlc2NyaXB0aW9uLnR4dCIsIGRlc2NyaXB0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFVSSSBvZiB0aGUgc2NyZWVuc2hvdCB0YWtlbiBieSBkdW1wc3RhdGUuCisgICAgICAgIFVyaSBleHRlcm5hbFNjcmVlbnNob3RVcmkgPSBudWxsOworICAgICAgICBTb3J0ZWRTZXQ8U3RyaW5nPiBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcyA9IG5ldyBUcmVlU2V0PD4oKTsKKyAgICAgICAgZm9yIChVcmkgc2NyZWVuc2hvdFVyaSA6IHNjcmVlbnNob3RVcmlzKSB7CisgICAgICAgICAgICBTdHJpbmcgc2NyZWVuc2hvdE5hbWUgPSBzY3JlZW5zaG90VXJpLmdldExhc3RQYXRoU2VnbWVudCgpOworICAgICAgICAgICAgaWYgKHNjcmVlbnNob3ROYW1lLmVuZHNXaXRoKFNDUkVFTlNIT1RfRklMRSkpIHsKKyAgICAgICAgICAgICAgICBleHRlcm5hbFNjcmVlbnNob3RVcmkgPSBzY3JlZW5zaG90VXJpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcy5hZGQoc2NyZWVuc2hvdE5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGV4dGVybmFsIHNjcmVlbnNob3QKKyAgICAgICAgaWYgKHNjcmVlbnNob3RDb250ZW50ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoImRpZCBub3QgZ2V0IC5wbmcgYXR0YWNobWVudCBmb3IgZXh0ZXJuYWwgc2NyZWVuc2hvdCIsCisgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsU2NyZWVuc2hvdFVyaSk7CisgICAgICAgICAgICBhc3NlcnRDb250ZW50KGV4dGVybmFsU2NyZWVuc2hvdFVyaSwgU0NSRUVOU0hPVF9DT05URU5UKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydE51bGwoInNob3VsZCBub3QgaGF2ZSAucG5nIGF0dGFjaG1lbnQgZm9yIGV4dGVybmFsIHNjcmVlbnNob3QiLAorICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFNjcmVlbnNob3RVcmkpOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGludGVybmFsIHNjcmVlbnNob3RzLgorICAgICAgICBTb3J0ZWRTZXQ8U3RyaW5nPiBleHBlY3RlZE5hbWVzID0gbmV3IFRyZWVTZXQ8PigpOworICAgICAgICBmb3IgKGludCBpID0gMSA7IGkgPD0gbnVtYmVyU2NyZWVuc2hvdHM7IGkrKykgeworICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHJlbmFtZWRTY3JlZW5zaG90cyAgPyBuYW1lIDogSW50ZWdlci50b1N0cmluZyhwaWQpOworICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkTmFtZSA9ICJzY3JlZW5zaG90LSIgKyBwcmVmaXggKyAiLSIgKyBpICsgIi5wbmciOworICAgICAgICAgICAgZXhwZWN0ZWROYW1lcy5hZGQoZXhwZWN0ZWROYW1lKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZGVhbGx5IHdlIHNob3VsZCB1c2UgTW9yZUFzc2VydHMsIGJ1dCB0aGUgZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIGZhaWx1cmUgaXMgbm90CisgICAgICAgIC8vIHJlYWxseSB1c2VmdWwuCisgICAgICAgIGFzc2VydEVxdWFscygid3JvbmcgbmFtZXMgZm9yIGludGVybmFsIHNjcmVlbnNob3RzIiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZE5hbWVzLCBpbnRlcm5hbFNjcmVlbnNob3ROYW1lcyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFzc2VydENvbnRlbnQoVXJpIHVyaSwgU3RyaW5nIGV4cGVjdGVkQ29udGVudCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKQEAgLTMwNiw2ICs2NjEsNjMgQEAKICAgICAgICAgZmFpbCgiRGlkIG5vdCBmaW5kIGVudHJ5ICciICsgZW50cnlOYW1lICsgIicgb24gZmlsZSAnIiArIHVyaSArICInIik7CiAgICAgfQogCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFByb3BlcnR5VmFsdWUoU3RyaW5nIGtleSwgU3RyaW5nIGV4cGVjdGVkVmFsdWUpIHsKKyAgICAgICAgU3RyaW5nIGFjdHVhbFZhbHVlID0gU3lzdGVtUHJvcGVydGllcy5nZXQoa2V5KTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJXcm9uZyB2YWx1ZSBmb3IgcHJvcGVydHkgJyIgKyBrZXkgKyAiJyIsIGV4cGVjdGVkVmFsdWUsIGFjdHVhbFZhbHVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U2VydmljZU5vdFJ1bm5pbmcoKSB7CisgICAgICAgIFN0cmluZyBzZXJ2aWNlID0gQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoIlNlcnZpY2UgJyIgKyBzZXJ2aWNlICsgIicgaXMgc3RpbGwgcnVubmluZyIsIGlzU2VydmljZVJ1bm5pbmcoc2VydmljZSkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBraWxsU2VydmljZSgpIHsKKyAgICAgICAgd2FpdEZvclNlcnZpY2UodHJ1ZSk7CisgICAgICAgIExvZy52KFRBRywgIlN0b3BwaW5nIHNlcnZpY2UiKTsKKyAgICAgICAgYm9vbGVhbiBzdG9wcGVkID0gbUNvbnRleHQuc3RvcFNlcnZpY2UobmV3IEludGVudChtQ29udGV4dCwgQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzKSk7CisgICAgICAgIExvZy5kKFRBRywgInN0b3BTZXJ2aWNlIHJldHVybmVkICIgKyBzdG9wcGVkKTsKKyAgICAgICAgd2FpdEZvclNlcnZpY2UoZmFsc2UpOworICAgICAgICBhc3NlcnRTZXJ2aWNlTm90UnVubmluZygpOyAgLy8gU2FuaXR5IGNoZWNrLgorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc1NlcnZpY2VSdW5uaW5nKFN0cmluZyBuYW1lKSB7CisgICAgICAgIEFjdGl2aXR5TWFuYWdlciBtYW5hZ2VyID0gKEFjdGl2aXR5TWFuYWdlcikgbUNvbnRleHQKKyAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFDVElWSVRZX1NFUlZJQ0UpOworICAgICAgICBmb3IgKFJ1bm5pbmdTZXJ2aWNlSW5mbyBzZXJ2aWNlIDogbWFuYWdlci5nZXRSdW5uaW5nU2VydmljZXMoSW50ZWdlci5NQVhfVkFMVUUpKSB7CisgICAgICAgICAgICBpZiAoc2VydmljZS5zZXJ2aWNlLmdldENsYXNzTmFtZSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgd2FpdEZvclNlcnZpY2UoYm9vbGVhbiBleHBlY3RSdW5uaW5nKSB7CisgICAgICAgIFN0cmluZyBzZXJ2aWNlID0gQnVncmVwb3J0UHJvZ3Jlc3NTZXJ2aWNlLmNsYXNzLmdldE5hbWUoKTsKKyAgICAgICAgYm9vbGVhbiBhY3R1YWxSdW5uaW5nOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSA1OyBpKyspIHsKKyAgICAgICAgICAgIGFjdHVhbFJ1bm5pbmcgPSBpc1NlcnZpY2VSdW5uaW5nKHNlcnZpY2UpOworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQXR0ZW1wdCAiICsgaSArICIgdG8gY2hlY2sgc3RhdHVzIG9mIHNlcnZpY2UgJyIKKyAgICAgICAgICAgICAgICAgICAgKyBzZXJ2aWNlICsgIic6IGV4cGVjdGVkPSIgKyBleHBlY3RSdW5uaW5nICsgIiwgYWN0dWFsPSAiICsgYWN0dWFsUnVubmluZyk7CisgICAgICAgICAgICBpZiAoYWN0dWFsUnVubmluZyA9PSBleHBlY3RSdW5uaW5nKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoRGF0ZVV0aWxzLlNFQ09ORF9JTl9NSUxMSVMpOworICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgInRocmVhZCBpbnRlcnJ1cHRlZCIpOworICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFleHBlY3RSdW5uaW5nKSB7CisgICAgICAgICAgICAvLyBUeXBpY2FsbHkgaGFwcGVucyB3aGVuIHNlcnZpY2UgaXMgd2FpdGluZyBmb3IgYSBzY3JlZW5zaG90IHRvIGZpbmlzaC4KKyAgICAgICAgICAgIExvZy53KFRBRywgIlNlcnZpY2UgZGlkbid0IHN0b3A7IHRyeSB0byBraWxsIGl0IGFnYWluIik7CisgICAgICAgICAgICBraWxsU2VydmljZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmFpbCgiU2VydmljZSBzdGF0dXMgZGlkbid0IGNoYW5nZSB0byAiICsgZXhwZWN0UnVubmluZyk7CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVUZXh0RmlsZShTdHJpbmcgcGF0aCwgU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIExvZy52KFRBRywgImNyZWF0ZUZpbGUoIiArIHBhdGggKyAiKSIpOwogICAgICAgICB0cnkgKFdyaXRlciB3cml0ZXIgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcigKQEAgLTMyNSw0ICs3MzcsMTA4IEBACiAgICAgICAgICAgICB6b3MuY2xvc2VFbnRyeSgpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0UGF0aChTdHJpbmcgZmlsZSkgeworICAgICAgICBGaWxlIHJvb3REaXIgPSBuZXcgQ29udGV4dFdyYXBwZXIobUNvbnRleHQpLmdldEZpbGVzRGlyKCk7CisgICAgICAgIEZpbGUgZGlyID0gbmV3IEZpbGUocm9vdERpciwgQlVHUkVQT1JUU19ESVIpOworICAgICAgICBpZiAoIWRpci5leGlzdHMoKSkgeworICAgICAgICAgICAgTG9nLmkoVEFHLCAiQ3JlYXRpbmcgZGlyZWN0b3J5ICIgKyBkaXIpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgIiArIGRpciwgZGlyLm1rZGlyKCkpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBwYXRoID0gbmV3IEZpbGUoZGlyLCBmaWxlKS5nZXRBYnNvbHV0ZVBhdGgoKTsKKyAgICAgICAgTG9nLnYoVEFHLCAiUGF0aCBmb3IgJyIgKyBmaWxlICsgIic6ICIgKyBwYXRoKTsKKyAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgbm90aWZpY2F0aW9uIGJ1dHRvbiB1c2VkIHRvIHRha2UgYSBzY3JlZW5zaG90LgorICAgICAqLworICAgIHByaXZhdGUgVWlPYmplY3QgZ2V0U2NyZWVuc2hvdEJ1dHRvbigpIHsKKyAgICAgICAgb3BlblByb2dyZXNzTm90aWZpY2F0aW9uKCk7CisgICAgICAgIHJldHVybiBtVWlCb3QuZ2V0VmlzaWJsZU9iamVjdCgKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X3NjcmVlbnNob3RfYWN0aW9uKS50b1VwcGVyQ2FzZSgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUYWtlcyBhIHNjcmVlbnNob3QgdXNpbmcgdGhlIHN5c3RlbSBub3RpZmljYXRpb24uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHRha2VTY3JlZW5zaG90KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVpT2JqZWN0IHNjcmVlbnNob3RCdXR0b24gPSBnZXRTY3JlZW5zaG90QnV0dG9uKCk7CisgICAgICAgIG1VaUJvdC5jbGljayhzY3JlZW5zaG90QnV0dG9uLCAic2NyZWVuc2hvdF9idXR0b24iKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFVpT2JqZWN0IHdhaXRGb3JTY3JlZW5zaG90QnV0dG9uRW5hYmxlZChib29sZWFuIGV4cGVjdGVkRW5hYmxlZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFVpT2JqZWN0IHNjcmVlbnNob3RCdXR0b24gPSBnZXRTY3JlZW5zaG90QnV0dG9uKCk7CisgICAgICAgIGludCBtYXhBdHRlbXB0cyA9IFNBRkVfU0NSRUVOU0hPVF9ERUxBWTsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBib29sZWFuIGVuYWJsZWQgPSBzY3JlZW5zaG90QnV0dG9uLmlzRW5hYmxlZCgpOworICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gZXhwZWN0ZWRFbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmVlbnNob3RCdXR0b247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpKys7CisgICAgICAgICAgICBMb2cudihUQUcsICJTbGVlcGluZyBmb3IgMSBzZWNvbmQgd2hpbGUgd2FpdGluZyBmb3Igc2NyZWVuc2hvdC5lbmFibGUgdG8gYmUgIgorICAgICAgICAgICAgICAgICAgICArIGV4cGVjdGVkRW5hYmxlZCArICIgKGF0dGVtcHQgIiArIGkgKyAiKSIpOworICAgICAgICAgICAgVGhyZWFkLnNsZWVwKERhdGVVdGlscy5TRUNPTkRfSU5fTUlMTElTKTsKKyAgICAgICAgfSB3aGlsZSAoaSA8PSBtYXhBdHRlbXB0cyk7CisgICAgICAgIGZhaWwoInNjcmVlbnNob3QuZW5hYmxlIGRpZG4ndCBjaGFuZ2UgdG8gIiArIGV4cGVjdGVkRW5hYmxlZCArICIgaW4gIiArIG1heEF0dGVtcHRzICsgInMiKTsKKyAgICAgICAgcmV0dXJuIHNjcmVlbnNob3RCdXR0b247CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFzc2VydFNjcmVlbnNob3RCdXR0b25FbmFibGVkKGJvb2xlYW4gZXhwZWN0ZWRFbmFibGVkKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgVWlPYmplY3Qgc2NyZWVuc2hvdEJ1dHRvbiA9IGdldFNjcmVlbnNob3RCdXR0b24oKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJ3cm9uZyBzdGF0ZSBmb3Igc2NyZWVuc2hvdCBidXR0b24gIiwgZXhwZWN0ZWRFbmFibGVkLAorICAgICAgICAgICAgICAgIHNjcmVlbnNob3RCdXR0b24uaXNFbmFibGVkKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEhlbHBlciBjbGFzcyBjb250YWluaW5nIHRoZSBVaU9iamVjdHMgcHJlc2VudCBpbiB0aGUgYnVncmVwb3J0IGluZm8gZGlhbG9nLgorICAgICAqLworICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRGV0YWlsc1VpIHsKKworICAgICAgICBmaW5hbCBVaU9iamVjdCBkZXRhaWxzQnV0dG9uOworICAgICAgICBmaW5hbCBVaU9iamVjdCBuYW1lRmllbGQ7CisgICAgICAgIGZpbmFsIFVpT2JqZWN0IHRpdGxlRmllbGQ7CisgICAgICAgIGZpbmFsIFVpT2JqZWN0IGRlc2NGaWVsZDsKKyAgICAgICAgZmluYWwgVWlPYmplY3Qgb2tCdXR0b247CisgICAgICAgIGZpbmFsIFVpT2JqZWN0IGNhbmNlbEJ1dHRvbjsKKworICAgICAgICAvKioKKyAgICAgICAgICogR2V0cyB0aGUgVUkgb2JqZWN0cyBieSBvcGVuaW5nIHRoZSBwcm9ncmVzcyBub3RpZmljYXRpb24gYW5kIGNsaWNraW5nIERFVEFJTFMuCisgICAgICAgICAqLworICAgICAgICBEZXRhaWxzVWkoVWlCb3QgdWlCb3QpIHsKKyAgICAgICAgICAgIG9wZW5Qcm9ncmVzc05vdGlmaWNhdGlvbigpOworICAgICAgICAgICAgZGV0YWlsc0J1dHRvbiA9IG1VaUJvdC5nZXRWaXNpYmxlT2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYnVncmVwb3J0X2luZm9fYWN0aW9uKS50b1VwcGVyQ2FzZSgpKTsKKyAgICAgICAgICAgIG1VaUJvdC5jbGljayhkZXRhaWxzQnV0dG9uLCAiZGV0YWlsc19idXR0b24iKTsKKyAgICAgICAgICAgIC8vIFRPRE86IHVuaGFyZGNvZGUgcmVzb3VyY2UgaWRzCisgICAgICAgICAgICBuYW1lRmllbGQgPSBtVWlCb3QuZ2V0VmlzaWJsZU9iamVjdEJ5SWQoImNvbS5hbmRyb2lkLnNoZWxsOmlkL25hbWUiKTsKKyAgICAgICAgICAgIHRpdGxlRmllbGQgPSBtVWlCb3QuZ2V0VmlzaWJsZU9iamVjdEJ5SWQoImNvbS5hbmRyb2lkLnNoZWxsOmlkL3RpdGxlIik7CisgICAgICAgICAgICBkZXNjRmllbGQgPSBtVWlCb3QuZ2V0VmlzaWJsZU9iamVjdEJ5SWQoImNvbS5hbmRyb2lkLnNoZWxsOmlkL2Rlc2NyaXB0aW9uIik7CisgICAgICAgICAgICBva0J1dHRvbiA9IG1VaUJvdC5nZXRPYmplY3RCeUlkKCJhbmRyb2lkOmlkL2J1dHRvbjEiKTsKKyAgICAgICAgICAgIGNhbmNlbEJ1dHRvbiA9IG1VaUJvdC5nZXRPYmplY3RCeUlkKCJhbmRyb2lkOmlkL2J1dHRvbjIiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBUYWtlcyBmb2N1cyBhd2F5IGZyb20gdGhlIG5hbWUgZmllbGQgc28gaXQgY2FuIGJlIHZhbGlkYXRlZC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgZm9jdXNBd2F5RnJvbU5hbWUoKSB7CisgICAgICAgICAgICBtVWlCb3QuY2xpY2sodGl0bGVGaWVsZCwgInRpdGxlX2ZpZWxkIik7IC8vIENoYW5nZSBmb2N1cy4KKyAgICAgICAgICAgIG1VaUJvdC5wcmVzc0JhY2soKTsgLy8gRGlzbWlzcyBrZXlib2FyZC4KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVPcGVuKCkgeworICAgICAgICAgICAgb3BlblByb2dyZXNzTm90aWZpY2F0aW9uKCk7CisgICAgICAgICAgICBtVWlCb3QuY2xpY2soZGV0YWlsc0J1dHRvbiwgImRldGFpbHNfYnV0dG9uIik7CisKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY2xpY2tPaygpIHsKKyAgICAgICAgICAgIG1VaUJvdC5jbGljayhva0J1dHRvbiwgImRldGFpbHNfb2tfYnV0dG9uIik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsaWNrQ2FuY2VsKCkgeworICAgICAgICAgICAgbVVpQm90LmNsaWNrKGNhbmNlbEJ1dHRvbiwgImRldGFpbHNfY2FuY2VsX2J1dHRvbiIpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL1VpQm90LmphdmEgYi9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvVWlCb3QuamF2YQppbmRleCA1ZThiYWIxLi4zODRjM2RhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvVWlCb3QuamF2YQorKysgYi9wYWNrYWdlcy9TaGVsbC90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2hlbGwvVWlCb3QuamF2YQpAQCAtNzksNiArNzksMTcgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBHZXRzIGFuIG9iamVjdCB0aGF0IG1pZ2h0IG5vdCB5ZXQgYmUgYXZhaWxhYmxlIGluIGN1cnJlbnQgVUkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaWQgT2JqZWN0J3MgZnVsbHktcXVhbGlmaWVkIHJlc291cmNlIGlkIChsaWtlIHtAY29kZSBhbmRyb2lkOmlkL2J1dHRvbjF9KQorICAgICAqLworICAgIHB1YmxpYyBVaU9iamVjdCBnZXRPYmplY3RCeUlkKFN0cmluZyBpZCkgeworICAgICAgICBib29sZWFuIGdvdEl0ID0gbURldmljZS53YWl0KFVudGlsLmhhc09iamVjdChCeS5yZXMoaWQpKSwgbVRpbWVvdXQpOworICAgICAgICBhc3NlcnRUcnVlKCJvYmplY3Qgd2l0aCBpZCAnKCIgKyBpZCArICInKSBub3QgdmlzaWJsZSB5ZXQiLCBnb3RJdCk7CisgICAgICAgIHJldHVybiBnZXRWaXNpYmxlT2JqZWN0QnlJZChpZCk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0cyBhbiBvYmplY3Qgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIHRoZSBjdXJyZW50IFVJLgogICAgICAqCiAgICAgICogQHBhcmFtIHRleHQgT2JqZWN0J3MgdGV4dCBhcyBkaXNwbGF5ZWQgYnkgdGhlIFVJLgpAQCAtOTAsNiArMTAxLDE4IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogR2V0cyBhbiBvYmplY3Qgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIHRoZSBjdXJyZW50IFVJLgorICAgICAqCisgICAgICogQHBhcmFtIHRleHQgT2JqZWN0J3MgdGV4dCBhcyBkaXNwbGF5ZWQgYnkgdGhlIFVJLgorICAgICAqLworICAgIHB1YmxpYyBVaU9iamVjdCBnZXRWaXNpYmxlT2JqZWN0QnlJZChTdHJpbmcgaWQpIHsKKyAgICAgICAgVWlPYmplY3QgdWlPYmplY3QgPSBtRGV2aWNlLmZpbmRPYmplY3QobmV3IFVpU2VsZWN0b3IoKS5yZXNvdXJjZUlkKGlkKSk7CisgICAgICAgIGFzc2VydFRydWUoImNvdWxkIG5vdCBmaW5kIG9iamVjdCB3aXRoIGlkICciICsgaWQrICInIiwgdWlPYmplY3QuZXhpc3RzKCkpOworICAgICAgICByZXR1cm4gdWlPYmplY3Q7CisgICAgfQorCisKKyAgICAvKioKICAgICAgKiBDbGlja3Mgb24gYSBVSSBlbGVtZW50LgogICAgICAqCiAgICAgICogQHBhcmFtIHVpT2JqZWN0IFVJIGVsZW1lbnQgdG8gYmUgY2xpY2tlZC4KQEAgLTExOCwxMSArMTQxLDIyIEBACiAgICAgLy8gVE9ETzogVUkgQXV0b21hdG9yIHNob3VsZCBwcm92aWRlIHN1Y2ggbG9naWMuCiAgICAgcHVibGljIHZvaWQgY2hvb3NlQWN0aXZpdHkoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIGFjdGl2aXR5IGlzIHRoZSBkZWZhdWx0IG9wdGlvbi4KLSAgICAgICAgU3RyaW5nIHNoYXJlVGV4dCA9IFN0cmluZy5mb3JtYXQoIlNoYXJlIHdpdGggJXMiLCBuYW1lKTsKKyAgICAgICAgU3RyaW5nIHNoYXJlVGV4dCA9ICJTaGFyZSB3aXRoICIgKyBuYW1lOworICAgICAgICBMb2cudihUQUcsICJXYWl0aW5nIGZvciBBY3Rpdml0eUNob29zZXIgdGV4dDogJyIgKyBzaGFyZVRleHQgKyAiJyIpOwogICAgICAgICBib29sZWFuIGdvdEl0ID0gbURldmljZS53YWl0KFVudGlsLmhhc09iamVjdChCeS50ZXh0KHNoYXJlVGV4dCkpLCBtVGltZW91dCk7CiAKICAgICAgICAgaWYgKGdvdEl0KSB7CiAgICAgICAgICAgICBMb2cudihUQUcsICJGb3VuZCBhY3Rpdml0eSAiICsgbmFtZSArICIsIGl0J3MgdGhlIGRlZmF1bHQgYWN0aW9uIik7CisgICAgICAgICAgICAvLyBDbGlja3MgdGhlICJKdXN0IE9uY2UiIGJ1dHRvbi4KKyAgICAgICAgICAgIGdvdEl0ID0gbURldmljZQorICAgICAgICAgICAgICAgICAgICAud2FpdChVbnRpbC5oYXNPYmplY3QoQnkucmVzKCJhbmRyb2lkIiwgImJ1dHRvbl9vbmNlIikpLCBtVGltZW91dCk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKCInSnVzdCBPbmNlJyBidXR0b24gbm90IHZpc2libGUgeWV0IiwgZ290SXQpOworCisgICAgICAgICAgICBVaU9iamVjdCBqdXN0T25jZSA9IG1EZXZpY2UKKyAgICAgICAgICAgICAgICAgICAgLmZpbmRPYmplY3QobmV3IFVpU2VsZWN0b3IoKS5yZXNvdXJjZUlkKCJhbmRyb2lkOmlkL2J1dHRvbl9vbmNlIikpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiJ0p1c3QgT25jZScgYnV0dG9uIG5vdCBmb3VuZCIsIGp1c3RPbmNlLmV4aXN0cygpKTsKKworICAgICAgICAgICAgY2xpY2soanVzdE9uY2UsICJKdXN0IE9uY2UiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNpbmNlIGl0J3Mgbm90LCBuZWVkIHRvIGZpbmQgaXQgaW4gdGhlIHNjcm9sbGFibGUgbGlzdC4uLgogICAgICAgICAgICAgTG9nLnYoVEFHLCAiQWN0aXZpdHkgIiArIG5hbWUgKyAiIGlzIG5vdCBkZWZhdWx0IGFjdGlvbiIpOwpAQCAtMTM5LDE2ICsxNzMsOSBAQAogICAgICAgICAgICAgLy8gLi4uIHRoZW4gc2VsZWN0IGl0LgogICAgICAgICAgICAgY2xpY2soYWN0aXZpdHksIG5hbWUpOwogICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIFRoZW4gY2xpY2tzIHRoZSAiSnVzdCBPbmNlIiBidXR0b24uCi0gICAgICAgIGdvdEl0ID0gbURldmljZQotICAgICAgICAgICAgICAgIC53YWl0KFVudGlsLmhhc09iamVjdChCeS5yZXMoImFuZHJvaWQiLCAiYnV0dG9uX29uY2UiKSksIG1UaW1lb3V0KTsKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiJ0p1c3QgT25jZScgYnV0dG9uIG5vdCB2aXNpYmxlIHlldCIsIGdvdEl0KTsKLQotICAgICAgICBVaU9iamVjdCBqdXN0T25jZSA9IG1EZXZpY2UKLSAgICAgICAgICAgICAgICAuZmluZE9iamVjdChuZXcgVWlTZWxlY3RvcigpLnJlc291cmNlSWQoImFuZHJvaWQ6aWQvYnV0dG9uX29uY2UiKSk7Ci0gICAgICAgIGFzc2VydFRydWUoIidKdXN0IE9uY2UnIGJ1dHRvbiBub3QgZm91bmQiLCBqdXN0T25jZS5leGlzdHMoKSk7Ci0KLSAgICAgICAgY2xpY2soanVzdE9uY2UsICJKdXN0IE9uY2UiKTsKKyAgICBwdWJsaWMgdm9pZCBwcmVzc0JhY2soKSB7CisgICAgICAgIG1EZXZpY2UucHJlc3NCYWNrKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU2hlbGwvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NoZWxsL1V0aWxpdGllc1Rlc3QuamF2YSBiL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9VdGlsaXRpZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiN2JhOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1NoZWxsL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zaGVsbC9VdGlsaXRpZXNUZXN0LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNoZWxsOworCitpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNoZWxsLkJ1Z3JlcG9ydFByb2dyZXNzU2VydmljZS5pc1ZhbGlkOworCitAU21hbGxUZXN0CitwdWJsaWMgY2xhc3MgVXRpbGl0aWVzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkQ2hhcl92YWxpZCgpIHsKKyAgICAgICAgU3RyaW5nIHZhbGlkQ2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsaWRDaGFycy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGMgPSB2YWxpZENoYXJzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoImNoYXIgJyIgKyBjICsgIicgc2hvdWxkIGJlIHZhbGlkIiwgaXNWYWxpZChjKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SXNWYWxpZENoYXJfaW52YWxpZCgpIHsKKyAgICAgICAgU3RyaW5nIHZhbGlkQ2hhcnMgPSAiLy48Pjs6J1wnXCJcXCs9KiZeJSQjQCFgfsOhw6nDrcOzw7rDo8Oxw4LDisOOw5TDmyI7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsaWRDaGFycy5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBjaGFyIGMgPSB2YWxpZENoYXJzLmNoYXJBdChpKTsKKyAgICAgICAgICAgIGFzc2VydEZhbHNlKCJjaGFyICciICsgYyArICInIHNob3VsZCBub3QgYmUgdmFsaWQiLCBpc1ZhbGlkKGMpKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9TeXN0ZW1VSS9BbmRyb2lkLm1rCmluZGV4IGViNjNlNWQuLjYxY2FkMmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL0FuZHJvaWQubWsKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvQW5kcm9pZC5tawpAQCAtOCw3ICs4LDExIEBACiAKIExPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBcCiAgICAgS2V5Z3VhcmQgXAotICAgIGFuZHJvaWQtc3VwcG9ydC12Ny1yZWN5Y2xlcnZpZXcKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjctcmVjeWNsZXJ2aWV3IFwKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjctcHJlZmVyZW5jZSBcCisgICAgYW5kcm9pZC1zdXBwb3J0LXY3LWFwcGNvbXBhdCBcCisgICAgYW5kcm9pZC1zdXBwb3J0LXYxNC1wcmVmZXJlbmNlCisKIExPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IHRlbGVwaG9ueS1jb21tb24KIAogTE9DQUxfUEFDS0FHRV9OQU1FIDo9IFN5c3RlbVVJCkBAIC0yMiwxMCArMjYsMTMgQEAKIExPQ0FMX1JFU09VUkNFX0RJUiA6PSBcCiAgICAgZnJhbWV3b3Jrcy9iYXNlL3BhY2thZ2VzL0tleWd1YXJkL3JlcyBcCiAgICAgJChMT0NBTF9QQVRIKS9yZXMgXAorICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92Ny9wcmVmZXJlbmNlL3JlcyBcCisgICAgZnJhbWV3b3Jrcy9zdXBwb3J0L3YxNC9wcmVmZXJlbmNlL3JlcyBcCisgICAgZnJhbWV3b3Jrcy9zdXBwb3J0L3Y3L2FwcGNvbXBhdC9yZXMgXAogICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92Ny9yZWN5Y2xlcnZpZXcvcmVzCiAKIExPQ0FMX0FBUFRfRkxBR1MgOj0gLS1hdXRvLWFkZC1vdmVybGF5IFwKLSAgICAgLS1leHRyYS1wYWNrYWdlcyBjb20uYW5kcm9pZC5rZXlndWFyZDphbmRyb2lkLnN1cHBvcnQudjcucmVjeWNsZXJ2aWV3CisgICAgLS1leHRyYS1wYWNrYWdlcyBjb20uYW5kcm9pZC5rZXlndWFyZDphbmRyb2lkLnN1cHBvcnQudjcucmVjeWNsZXJ2aWV3OmFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlOmFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZTphbmRyb2lkLnN1cHBvcnQudjcuYXBwY29tcGF0CiAKIGlmbmVxICgkKFNZU1RFTV9VSV9JTkNSRU1FTlRBTF9CVUlMRFMpLCkKICAgICBMT0NBTF9QUk9HVUFSRF9FTkFCTEVEIDo9IGRpc2FibGVkCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9BbmRyb2lkTWFuaWZlc3QueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvQW5kcm9pZE1hbmlmZXN0LnhtbAppbmRleCAyZTY1NjU2Li42MjAxZmQ2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTU4LDYgKzU4LDcgQEAKICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk9WRVJSSURFX1dJRklfQ09ORklHIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTUFOQUdFX05FVFdPUktfUE9MSUNZIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ09OTkVDVElWSVRZX0lOVEVSTkFMIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uVEVUSEVSX1BSSVZJTEVHRUQiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX05FVFdPUktfVVNBR0VfSElTVE9SWSIgLz4KICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNPTlRST0xfVlBOIiAvPgogICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uUEVFUlNfTUFDX0FERFJFU1MiLz4KQEAgLTEzNiw2ICsxMzcsMTUgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6cHJvdGVjdGlvbkxldmVsPSJzaWduYXR1cmUiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLnN5c3RlbXVpLnBlcm1pc3Npb24uU0VMRiIgLz4KIAorICAgIDwhLS0gQWRkaW5nIFF1aWNrIFNldHRpbmdzIHRpbGVzIC0tPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9RVUlDS19TRVRUSU5HU19USUxFIiAvPgorCisgICAgPCEtLSBCbG9jayBub3RpZmljYXRpb25zIGlubGluZSBub3RpZmljYXRpb25zIC0tPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uVVBEQVRFX0FQUF9PUFNfU1RBVFMiIC8+CisKKyAgICA8IS0tIEFjY2VzcyBiYXR0ZXJ5IGluZm9ybWF0aW9uIC0tPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQkFUVEVSWV9TVEFUUyIgLz4KKwogICAgIDxhcHBsaWNhdGlvbgogICAgICAgICBhbmRyb2lkOm5hbWU9Ii5TeXN0ZW1VSUFwcGxpY2F0aW9uIgogICAgICAgICBhbmRyb2lkOnBlcnNpc3RlbnQ9InRydWUiCkBAIC0xODMsNyArMTkzLDcgQEAKICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iLnR1bmVyLlR1bmVyQWN0aXZpdHkiCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmVuYWJsZWQ9ImZhbHNlIgogICAgICAgICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvdHVuZXIiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5NYXRlcmlhbC5TZXR0aW5ncyIKKyAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhlbWU9IkBzdHlsZS9UdW5lclNldHRpbmdzIgogICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9zeXN0ZW1fdWlfdHVuZXIiCiAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnByb2Nlc3M9Ijp0dW5lciIKICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZXhwb3J0ZWQ9InRydWUiPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcHJvZ3VhcmQuZmxhZ3MgYi9wYWNrYWdlcy9TeXN0ZW1VSS9wcm9ndWFyZC5mbGFncwppbmRleCA3NWU3OTU5Li5iYzE4MjIxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9wcm9ndWFyZC5mbGFncworKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9wcm9ndWFyZC5mbGFncwpAQCAtMTAsNiArMTAsNyBAQAogICBwdWJsaWMgdm9pZCBzZXRHbG93U2NhbGUoZmxvYXQpOwogfQogCista2VlcCBjbGFzcyBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuY2FyLkNhclN0YXR1c0JhcgogLWtlZXAgY2xhc3MgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlBob25lU3RhdHVzQmFyCiAta2VlcCBjbGFzcyBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIudHYuVHZTdGF0dXNCYXIKIApAQCAtMjcsMyArMjgsOSBAQAogICAgIHB1YmxpYyBmbG9hdCBnZXRUYXNrUHJvZ3Jlc3MoKTsKICAgICBwdWJsaWMgdm9pZCBzZXRUYXNrUHJvZ3Jlc3MoZmxvYXQpOwogfQorCista2VlcGNsYXNzZXN3aXRobWVtYmVycyBjbGFzcyAqIHsKKyAgICBwdWJsaWMgPGluaXQ+KGFuZHJvaWQuY29udGVudC5Db250ZXh0LCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0KTsKK30KKworLWtlZXAgY2xhc3MgKiogZXh0ZW5kcyBhbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvY29sb3IvcmVtb3RlX2lucHV0X3NlbmQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2NvbG9yL3JlbW90ZV9pbnB1dF9zZW5kLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTJmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2NvbG9yL3JlbW90ZV9pbnB1dF9zZW5kLnhtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICB+IENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgIH4KKyAgfiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgIH4KKyAgfiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICB+CisgIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgIC0tPgorCis8c2VsZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KKyAgICA8aXRlbSBhbmRyb2lkOnN0YXRlX2VuYWJsZWQ9InRydWUiIGFuZHJvaWQ6Y29sb3I9IkBhbmRyb2lkOmNvbG9yL3doaXRlIiAvPgorICAgIDxpdGVtIGFuZHJvaWQ6Y29sb3I9IiM0ZGZmZmZmZiIgLz4gPCEtLSAzMCUgd2hpdGUgLS0+Cis8L3NlbGVjdG9yPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9jb2xvci9yZW1vdGVfaW5wdXRfdGV4dC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvY29sb3IvcmVtb3RlX2lucHV0X3RleHQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExY2UwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvY29sb3IvcmVtb3RlX2lucHV0X3RleHQueG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgIH4gQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAgfgorICB+IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgfgorICB+ICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgIH4KKyAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKKyAgLS0+CisKKzxzZWxlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgorICAgIDxpdGVtIGFuZHJvaWQ6c3RhdGVfZW5hYmxlZD0idHJ1ZSIgYW5kcm9pZDpjb2xvcj0iQGFuZHJvaWQ6Y29sb3Ivd2hpdGUiIC8+CisgICAgPGl0ZW0gYW5kcm9pZDpjb2xvcj0iIzk5ZmZmZmZmIiAvPiA8IS0tIDYwJSB3aGl0ZSAtLT4KKzwvc2VsZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQyMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMzdhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19zeXNiYXJfYmFja19pbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtaGRwaS9pY19zeXNiYXJfaG9tZV9jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA1NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWhkcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLWhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbGRydGwtaGRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmNmZGRlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLWhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLW1kcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbGRydGwtbWRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODcwOGE1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLW1kcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLXhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLXhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzMxODQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbGRydGwteGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLWxkcnRsLXh4aGRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1sZHJ0bC14eGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2OTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS1sZHJ0bC14eGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJkNGJjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Y2NmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19zeXNiYXJfYmFja19pbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUtbWRwaS9pY19zeXNiYXJfaG9tZV9jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBiYmJjCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLW1kcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMWJlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N5c2Jhcl9iYWNrX2ltZV9jYXJtb2RlLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19zeXNiYXJfYmFja19pbWVfY2FybW9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3MGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19zeXNiYXJfYmFja19pbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYzY0OTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteGhkcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19zeXNiYXJfYmFja19jYXJtb2RlLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUzNjc4YgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4aGRwaS9pY19zeXNiYXJfYmFja19pbWVfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3N5c2Jhcl9iYWNrX2ltZV9jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdjYjA1OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eGhkcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMmIxMDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUteHhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfc3lzYmFyX2JhY2tfY2FybW9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxMTAyMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9iYWNrX2Nhcm1vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9iYWNrX2ltZV9jYXJtb2RlLnBuZyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9iYWNrX2ltZV9jYXJtb2RlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTgyMTNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9kb2NrZWQucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfc3lzYmFyX2RvY2tlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiZTJlZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9kb2NrZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlLXh4eGhkcGkvaWNfc3lzYmFyX2hvbWVfY2FybW9kZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExN2VmZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS14eHhoZHBpL2ljX3N5c2Jhcl9ob21lX2Nhcm1vZGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9kb2NrZWRfZGl2aWRlcl9oYW5kbGUueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL2RvY2tlZF9kaXZpZGVyX2hhbmRsZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YzAzNDMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL2RvY2tlZF9kaXZpZGVyX2hhbmRsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMiAodGhlICJMaWNlbnNlIik7Ci0gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHNoYXBlIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDpzaGFwZT0icmVjdGFuZ2xlIj4KLSAgICA8c2l6ZSBhbmRyb2lkOmhlaWdodD0iQGRpbWVuL2RvY2tlZF9kaXZpZGVyX2hhbmRsZV9oZWlnaHQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IkBkaW1lbi9kb2NrZWRfZGl2aWRlcl9oYW5kbGVfd2lkdGgiIC8+Ci0gICAgPGNvcm5lcnMgYW5kcm9pZDpyYWRpdXM9IjFkcCIgLz4KLSAgICA8c29saWQgYW5kcm9pZDpjb2xvcj0iQGNvbG9yL2RvY2tlZF9kaXZpZGVyX2hhbmRsZSIgLz4KLTwvc2hhcGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2JvdHRvbS54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvaWNfY29sb3JpemUueG1sCnNpbWlsYXJpdHkgaW5kZXggNjElCmNvcHkgZnJvbSBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tLnhtbApjb3B5IHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9pY19jb2xvcml6ZS54bWwKaW5kZXggZjExYjY5MC4uNzlmZDZkOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2JvdHRvbS54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL2ljX2NvbG9yaXplLnhtbApAQCAtMSw3ICsxLDcgQEAKIDwhLS0KLUNvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CiAgICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDBGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAuMCwwLjBsMC4wLDI0LjBsMjQuMCwwLjBMMjQuMCwwLjBMMC4wLDAuMHpNNC4wLDEwLjBsMTYuMCwwLjBsMC4wLDEwLjBMNC4wLDIwLjBMNC4wLDEwLjB6Ii8+CisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkZGRkZGRkYiCisgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yMC43MSw1LjYzbC0yLjM0LC0yLjM0Yy0wLjM5LC0wLjM5IC0xLjAyLC0wLjM5IC0xLjQxLDAuMGwtMy4xMiwzLjEyIC0xLjkzLC0xLjkxIC0xLjQxLDEuNDEgMS40MiwxLjQyTDMuMCwxNi4yNUwzLjAsMjEuMGw0Ljc1LDAuMGw4LjkyLC04LjkyIDEuNDIsMS40MiAxLjQxLC0xLjQxIC0xLjkyLC0xLjkyIDMuMTIsLTMuMTJjMC40LDAuMCAwLjQsLTEuMCAwLjAxLC0xLjQyek02LjkyLDE5LjBMNS4wLDE3LjA4bDguMDYsLTguMDYgMS45MiwxLjkyTDYuOTIsMTkuMHoiLz4KIDwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZGlzbWlzc19kYXJrLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9yZWNlbnRzX2Rpc21pc3NfZGFyay54bWwKaW5kZXggYmEwOWViZS4uOTUxMjY5YiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZGlzbWlzc19kYXJrLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19kaXNtaXNzX2RhcmsueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iNDguMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iNDguMCI+CiAgICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IkBjb2xvci9yZWNlbnRzX3Rhc2tfYmFyX2RhcmtfZGlzbWlzc19jb2xvciIKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IkBjb2xvci9yZWNlbnRzX3Rhc2tfYmFyX2RhcmtfaWNvbl9jb2xvciIKICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTM4LjAwMDAwMCwxMi44MDAwMDBsLTIuNzk5OTk5LC0yLjgwMDAwMCAtMTEuMjAwMDAxLDExLjIwMDAwMSAtMTEuMjAwMDAwLC0xMS4yMDAwMDEgLTIuODAwMDAwLDIuODAwMDAwIDExLjIwMDAwMSwxMS4yMDAwMDAgLTExLjIwMDAwMSwxMS4yMDAwMDEgMi44MDAwMDAsMi43OTk5OTkgMTEuMjAwMDAwLC0xMS4yMDAwMDEgMTEuMjAwMDAxLDExLjIwMDAwMSAyLjc5OTk5OSwtMi43OTk5OTkgLTExLjIwMDAwMSwtMTEuMjAwMDAxeiIvPgogPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZGlzbWlzc19saWdodC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19kaXNtaXNzX2xpZ2h0LnhtbAppbmRleCBiZTA4MjVjLi4xZjQ0YzFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19kaXNtaXNzX2xpZ2h0LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19kaXNtaXNzX2xpZ2h0LnhtbApAQCAtMTksNiArMTksNiBAQAogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjQ4LjAiCiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjQ4LjAiPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9saWdodF9kaXNtaXNzX2NvbG9yIgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iQGNvbG9yL3JlY2VudHNfdGFza19iYXJfbGlnaHRfaWNvbl9jb2xvciIKICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTM4LjAwMDAwMCwxMi44MDAwMDBsLTIuNzk5OTk5LC0yLjgwMDAwMCAtMTEuMjAwMDAxLDExLjIwMDAwMSAtMTEuMjAwMDAwLC0xMS4yMDAwMDEgLTIuODAwMDAwLDIuODAwMDAwIDExLjIwMDAwMSwxMS4yMDAwMDAgLTExLjIwMDAwMSwxMS4yMDAwMDEgMi44MDAwMDAsMi43OTk5OTkgMTEuMjAwMDAwLC0xMS4yMDAwMDEgMTEuMjAwMDAxLDExLjIwMDAwMSAyLjc5OTk5OSwtMi43OTk5OTkgLTExLjIwMDAwMSwtMTEuMjAwMDAxeiIvPgogPC92ZWN0b3I+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZnJlZWZvcm1fd29ya3NwYWNlX2JnLnhtbApzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gcGFja2FnZXMvRG9jdW1lbnRzVUkvcmVzL3ZhbHVlcy1zdzcyMGRwL2xheW91dHMueG1sCmNvcHkgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZnJlZWZvcm1fd29ya3NwYWNlX2JnLnhtbAppbmRleCA3ZDI4ZjljLi41ZjkzNDFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9Eb2N1bWVudHNVSS9yZXMvdmFsdWVzLXN3NzIwZHAvbGF5b3V0cy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfZnJlZWZvcm1fd29ya3NwYWNlX2JnLnhtbApAQCAtMSw1ICsxLDUgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Cis8IS0tIENvcHlyaWdodCAoQykgMjAxNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAKICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KQEAgLTE0LDYgKzE0LDkgQEAKICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KIAotPHJlc291cmNlcz4KLSAgICA8aXRlbSBuYW1lPSJkb2NzX2FjdGl2aXR5IiB0eXBlPSJsYXlvdXQiPkBsYXlvdXQvZml4ZWRfbGF5b3V0PC9pdGVtPgotPC9yZXNvdXJjZXM+Cis8c2hhcGUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgIGFuZHJvaWQ6c2hhcGU9InJlY3RhbmdsZSI+CisgICAgPGNvcm5lcnMgYW5kcm9pZDp0b3BMZWZ0UmFkaXVzPSJAZGltZW4vcmVjZW50c190YXNrX3ZpZXdfcm91bmRlZF9jb3JuZXJzX3JhZGl1cyIKKyAgICAgICAgICAgICBhbmRyb2lkOnRvcFJpZ2h0UmFkaXVzPSJAZGltZW4vcmVjZW50c190YXNrX3ZpZXdfcm91bmRlZF9jb3JuZXJzX3JhZGl1cyIvPgorICAgIDxzb2xpZCBhbmRyb2lkOmNvbG9yPSIjMDAwMDAwMDAiIC8+Cis8L3NoYXBlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wX2xlZnQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2ZyZWVmb3JtX2RhcmsueG1sCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wX2xlZnQueG1sCnJlbmFtZSB0byBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19tb3ZlX3Rhc2tfZnJlZWZvcm1fZGFyay54bWwKaW5kZXggZmViNjEyYy4uY2UwN2IyZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV90b3BfbGVmdC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2ZyZWVmb3JtX2RhcmsueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CiAgICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IkBjb2xvci9yZWNlbnRzX3Rhc2tfYmFyX2RhcmtfaWNvbl9jb2xvciIKICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAuMCwwLjBsMC4wLDI0LjBsMjQuMCwwLjBMMjQuMCwwLjBMMC4wLDAuMHpNNC4wLDQuMGwxMC4wLDAuMGwwLjAsMTAuMEw0LjAsMTQuMEw0LjAsNC4weiIvPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9sZWZ0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9yZWNlbnRzX21vdmVfdGFza19mcmVlZm9ybV9saWdodC54bWwKc2ltaWxhcml0eSBpbmRleCA5MiUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wX2xlZnQueG1sCmNvcHkgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2ZyZWVmb3JtX2xpZ2h0LnhtbAppbmRleCBmZWI2MTJjLi5iZjQ1MmFlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9sZWZ0LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvcmVjZW50c19tb3ZlX3Rhc2tfZnJlZWZvcm1fbGlnaHQueG1sCkBAIC0xOSw2ICsxOSw2IEBACiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+CiAgICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKKyAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IkBjb2xvci9yZWNlbnRzX3Rhc2tfYmFyX2xpZ2h0X2ljb25fY29sb3IiCiAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsMC4wbDAuMCwyNC4wbDI0LjAsMC4wTDI0LjAsMC4wTDAuMCwwLjB6TTQuMCw0LjBsMTAuMCwwLjBsMC4wLDEwLjBMNC4wLDE0LjBMNC4wLDQuMHoiLz4KIDwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9mdWxsc2NyZWVuLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9yZWNlbnRzX21vdmVfdGFza19mdWxsc2NyZWVuX2RhcmsueG1sCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZnVsbHNjcmVlbi54bWwKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS9yZWNlbnRzX21vdmVfdGFza19mdWxsc2NyZWVuX2RhcmsueG1sCmluZGV4IGFlZTBiN2YuLjQxNjBlZmIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZnVsbHNjcmVlbi54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2Z1bGxzY3JlZW5fZGFyay54bWwKQEAgLTE5LDE1ICsxOSwxNSBAQAogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCiAgICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9kYXJrX2ljb25fY29sb3IiCiAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsOC4wbDQuMCwwLjAgMC4wLC00LjAgNC4wLDAuMCAwLjAsLTQuMCAtOC4wLDAuMHoiLz4KICAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iQGNvbG9yL3JlY2VudHNfdGFza19iYXJfZGFya19pY29uX2NvbG9yIgogICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNC4wLDE2LjBsLTQuMCwwLjAgMC4wLDguMCA4LjAsMC4wIDAuMCwtNC4wIC00LjAsMC4weiIvPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9kYXJrX2ljb25fY29sb3IiCiAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0xNi4wLDAuMGwwLjAsNC4wIDQuMCwwLjAgMC4wLDQuMCA0LjAsMC4wIDAuMCwtOC4weiIvPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9kYXJrX2ljb25fY29sb3IiCiAgICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yMC4wLDIwLjBsLTQuMCwwLjAgMC4wLDQuMCA4LjAsMC4wIDAuMCwtOC4wIC00LjAsMC4weiIvPgogPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2Z1bGxzY3JlZW4ueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2Z1bGxzY3JlZW5fbGlnaHQueG1sCnNpbWlsYXJpdHkgaW5kZXggODElCmNvcHkgZnJvbSBwYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2Z1bGxzY3JlZW4ueG1sCmNvcHkgdG8gcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2Z1bGxzY3JlZW5fbGlnaHQueG1sCmluZGV4IGFlZTBiN2YuLmY0MjRiZjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZnVsbHNjcmVlbi54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3JlY2VudHNfbW92ZV90YXNrX2Z1bGxzY3JlZW5fbGlnaHQueG1sCkBAIC0xOSwxNSArMTksMTUgQEAKICAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgogICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KICAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iQGNvbG9yL3JlY2VudHNfdGFza19iYXJfbGlnaHRfaWNvbl9jb2xvciIKICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAuMCw4LjBsNC4wLDAuMCAwLjAsLTQuMCA0LjAsMC4wIDAuMCwtNC4wIC04LjAsMC4weiIvPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9saWdodF9pY29uX2NvbG9yIgogICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNNC4wLDE2LjBsLTQuMCwwLjAgMC4wLDguMCA4LjAsMC4wIDAuMCwtNC4wIC00LjAsMC4weiIvPgogICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCisgICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSJAY29sb3IvcmVjZW50c190YXNrX2Jhcl9saWdodF9pY29uX2NvbG9yIgogICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMTYuMCwwLjBsMC4wLDQuMCA0LjAsMC4wIDAuMCw0LjAgNC4wLDAuMCAwLjAsLTguMHoiLz4KICAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgorICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iQGNvbG9yL3JlY2VudHNfdGFza19iYXJfbGlnaHRfaWNvbl9jb2xvciIKICAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTIwLjAsMjAuMGwtNC4wLDAuMCAwLjAsNC4wIDguMCwwLjAgMC4wLC04LjAgLTQuMCwwLjB6Ii8+CiA8L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRmMTk4MS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsMC4wbDAuMCwyNC4wbDI0LjAsMC4wTDI0LjAsMC4wTDAuMCwwLjB6TTQuMCwxMC4wbDE2LjAsMC4wbDAuMCwxMC4wTDQuMCwyMC4wTDQuMCwxMC4weiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbV9sZWZ0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tX2xlZnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWE2MzI0Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tX2xlZnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCEtLQotQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMjQuMCwyNC4wTDI0LjAsMC4wTDAuMCwwLjBsMC4wLDI0LjBMMjQuMCwyNC4wek00LjAsMTAuMGwxMC4wLDAuMGwwLjAsMTAuMEw0LjAsMjAuMEw0LjAsMTAuMHoiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9ib3R0b21fcmlnaHQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9ib3R0b21fcmlnaHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmFlOWM4Li4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tX3JpZ2h0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwhLS0KLUNvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTI0LjAsMjQuMEwyNC4wLDAuMEwwLjAsMC4wbDAuMCwyNC4wTDI0LjAsMjQuMHpNMjAuMCwyMC4wTDEwLjAsMjAuMEwxMC4wLDEwLjBsMTAuMCwwLjBMMjAuMCwyMC4weiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfbGVmdC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfbGVmdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YWRlNDIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2xlZnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCEtLQotQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMEZGIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMjQuMCwwLjBMMC4wLDAuMGwwLjAsMjQuMGwyNC4wLDAuMEwyNC4wLDAuMHpNMTQuMCw0LjBsMC4wLDE2LjBMNC4wLDIwLjBMNC4wLDQuMEwxNC4wLDQuMHoiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX3JpZ2h0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19yaWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YzJhMzguLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX3JpZ2h0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwhLS0KLUNvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDBGRiIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTAuMCwyNC4wbDI0LjAsMC4wTDI0LjAsMC4wTDAuMCwwLjBMMC4wLDI0LjB6TTEwLjAsMjAuMEwxMC4wLDQuMGwxMC4wLDAuMGwwLjAsMTYuMEwxMC4wLDIwLjB6Ii8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja190b3AueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX3RvcC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYWJlYzIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX3RvcC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwRkYiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0yNC4wLDI0LjBMMjQuMCwwLjBMMC4wLDAuMGwwLjAsMjQuMEwyNC4wLDI0LjB6TTIwLjAsMTQuMEw0LjAsMTQuMEw0LjAsNC4wbDE2LjAsMC4wTDIwLjAsMTQuMHoiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9sZWZ0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfbGVmdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OGY4M2MuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9sZWZ0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTwhLS0KLUNvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTx2ZWN0b3IgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBhbmRyb2lkOndpZHRoPSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6aGVpZ2h0PSIyNC4wZHAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRXaWR0aD0iMjQuMCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydEhlaWdodD0iMjQuMCI+Ci0gICAgPHBhdGgKLSAgICAgICAgYW5kcm9pZDpmaWxsQ29sb3I9IiNGRjAwMDAwMCIKLSAgICAgICAgYW5kcm9pZDpwYXRoRGF0YT0iTTI0LjAsMC4wTDAuMCwwLjBsMC4wLDI0LjBsMjQuMCwwLjBMMjQuMCwwLjB6TTE0LjAsNC4wbDAuMCwxNi4wTDQuMCwyMC4wTDQuMCw0LjBMMTQuMCw0LjB6Ii8+Ci08L3ZlY3Rvcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9kcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfcmlnaHQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9yaWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NzMwZGIuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9yaWdodC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08IS0tCi1Db3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08dmVjdG9yIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgYW5kcm9pZDp3aWR0aD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOmhlaWdodD0iMjQuMGRwIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0V2lkdGg9IjI0LjAiCi0gICAgICAgIGFuZHJvaWQ6dmlld3BvcnRIZWlnaHQ9IjI0LjAiPgotICAgIDxwYXRoCi0gICAgICAgIGFuZHJvaWQ6ZmlsbENvbG9yPSIjRkYwMDAwMDAiCi0gICAgICAgIGFuZHJvaWQ6cGF0aERhdGE9Ik0wLjAsMjQuMGwyNC4wLDAuMEwyNC4wLDAuMEwwLjAsMC4wTDAuMCwyNC4wek0xMC4wLDIwLjBMMTAuMCw0LjBsMTAuMCwwLjBsMC4wLDE2LjBMMTAuMCwyMC4weiIvPgotPC92ZWN0b3I+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9yaWdodC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9yaWdodC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNGVlNDkuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2RyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV90b3BfcmlnaHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPCEtLQotQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHZlY3RvciB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIGFuZHJvaWQ6d2lkdGg9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDpoZWlnaHQ9IjI0LjBkcCIKLSAgICAgICAgYW5kcm9pZDp2aWV3cG9ydFdpZHRoPSIyNC4wIgotICAgICAgICBhbmRyb2lkOnZpZXdwb3J0SGVpZ2h0PSIyNC4wIj4KLSAgICA8cGF0aAotICAgICAgICBhbmRyb2lkOmZpbGxDb2xvcj0iI0ZGMDAwMDAwIgotICAgICAgICBhbmRyb2lkOnBhdGhEYXRhPSJNMC4wLDAuMGwwLjAsMjQuMGwyNC4wLDAuMEwyNC4wLDAuMEwwLjAsMC4wek0yMC4wLDE0LjBMMTAuMCwxNC4wTDEwLjAsNC4wbDEwLjAsMC4wTDIwLjAsMTQuMHoiLz4KLTwvdmVjdG9yPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1sYW5kL3JlY2VudHNfdGFza19yZXNpemVfZGlhbG9nLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtbGFuZC9yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhNGMwODYuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1sYW5kL3JlY2VudHNfdGFza19yZXNpemVfZGlhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQKLSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOnBhZGRpbmc9IjE2ZHAiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpkZXNjZW5kYW50Rm9jdXNhYmlsaXR5PSJiZWZvcmVEZXNjZW5kYW50cyIKLSAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIj4KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9kb2NrX2xlZnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX2xlZnQiIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfZG9ja19yaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfcmlnaHQiIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfbGVmdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2xlZnQiIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfcmlnaHQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9yaWdodCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9mdWxsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZnVsbHNjcmVlbiIgLz4KLSAgICA8L0xpbmVhckxheW91dD4KLTwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtcG9ydC9yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LXBvcnQvcmVjZW50c190YXNrX3Jlc2l6ZV9kaWFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjUyMDdhLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtcG9ydC9yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotCi0gICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08TGluZWFyTGF5b3V0Ci0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgYW5kcm9pZDpwYWRkaW5nPSIxNmRwIgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6ZGVzY2VuZGFudEZvY3VzYWJpbGl0eT0iYmVmb3JlRGVzY2VuZGFudHMiCi0gICAgYW5kcm9pZDpmb2N1c2FibGVJblRvdWNoTW9kZT0idHJ1ZSI+Ci0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfZG9ja190b3AiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9kb2NrX3RvcCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9kb2NrX2JvdHRvbSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfYm90dG9tIiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX3RvcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9ib3R0b20iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9ib3R0b20iIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfZnVsbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2Z1bGxzY3JlZW4iIC8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci08L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LXN3NjAwZHAtbGFuZC9yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0LXN3NjAwZHAtbGFuZC9yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOTJhZmMuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwLWxhbmQvcmVjZW50c190YXNrX3Jlc2l6ZV9kaWFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLQotPExpbmVhckxheW91dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgIGFuZHJvaWQ6cGFkZGluZz0iMTZkcCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOmRlc2NlbmRhbnRGb2N1c2FiaWxpdHk9ImJlZm9yZURlc2NlbmRhbnRzIgotICAgIGFuZHJvaWQ6Zm9jdXNhYmxlSW5Ub3VjaE1vZGU9InRydWUiPgotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2RvY2tfbGVmdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfbGVmdCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9kb2NrX3JpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19yaWdodCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9sZWZ0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfbGVmdCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9yaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3JpZ2h0IiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX3RvcF9sZWZ0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wX2xlZnQiIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfdG9wX3JpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wX3JpZ2h0IiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2JvdHRvbV9sZWZ0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tX2xlZnQiIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfYm90dG9tX3JpZ2h0IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tX3JpZ2h0IiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2Z1bGwiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzZkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3ZlY3Rvcl9kcmF3YWJsZV9wbGFjZV9mdWxsc2NyZWVuIiAvPgotICAgIDwvTGluZWFyTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwLXBvcnQvcmVjZW50c190YXNrX3Jlc2l6ZV9kaWFsb2cueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC1zdzYwMGRwLXBvcnQvcmVjZW50c190YXNrX3Jlc2l6ZV9kaWFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWE1ZjRiLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQtc3c2MDBkcC1wb3J0L3JlY2VudHNfdGFza19yZXNpemVfZGlhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci0KLTxMaW5lYXJMYXlvdXQKLSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICBhbmRyb2lkOnBhZGRpbmc9IjE2ZHAiCi0gICAgYW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDpkZXNjZW5kYW50Rm9jdXNhYmlsaXR5PSJiZWZvcmVEZXNjZW5kYW50cyIKLSAgICBhbmRyb2lkOmZvY3VzYWJsZUluVG91Y2hNb2RlPSJ0cnVlIj4KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIj4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9kb2NrX3RvcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2RvY2tfdG9wIiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2RvY2tfYm90dG9tIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZG9ja19ib3R0b20iIC8+Ci0gICAgICAgIDxCdXR0b24KLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGxhY2VfdG9wIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wIiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2JvdHRvbSIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbSIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV90b3BfbGVmdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9sZWZ0IiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX3RvcF9yaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9yaWdodCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9ib3R0b21fbGVmdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbV9sZWZ0IiAvPgotICAgICAgICA8QnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BsYWNlX2JvdHRvbV9yaWdodCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIzNmRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSIxMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvdmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbV9yaWdodCIgLz4KLSAgICAgICAgPEJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9wbGFjZV9mdWxsIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjM2ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjEwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS92ZWN0b3JfZHJhd2FibGVfcGxhY2VfZnVsbHNjcmVlbiIgLz4KLSAgICA8L0xpbmVhckxheW91dD4KLTwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvYXNzaXN0X29yYi54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Fzc2lzdF9vcmIueG1sCmluZGV4IGFiMGEwYTViLi4wMDM2ZWQ2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Fzc2lzdF9vcmIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvYXNzaXN0X29yYi54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTIsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2JhdHRlcnlfZGV0YWlsLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvYmF0dGVyeV9kZXRhaWwueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGRiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2JhdHRlcnlfZGV0YWlsLnhtbApAQCAtMCwwICsxLDY0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorICAgICBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPFJlbGF0aXZlTGF5b3V0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMTZkcCIKKyAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIgorICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIj4KKworICAgIDxJbWFnZVZpZXcKKyAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvaWNvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjI0ZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjRkcCIKKyAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImZpdENlbnRlciIKKyAgICAgICAgYW5kcm9pZDphZGp1c3RWaWV3Qm91bmRzPSJ0cnVlIgorICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRTdGFydD0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjE2ZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iMzJkcCIgLz4KKworICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC90aXRsZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvU3RhcnRPZj0iQGFuZHJvaWQ6aWQvdG9nZ2xlIgorICAgICAgICBhbmRyb2lkOmxheW91dF90b0VuZE9mPSJAYW5kcm9pZDppZC9pY29uIgorICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuUVMuRGV0YWlsSXRlbVByaW1hcnkiCisgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9iYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIC8+CisKKyAgICA8VGV4dFZpZXcKKyAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvc3VtbWFyeSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2JlbG93PSJAYW5kcm9pZDppZC90aXRsZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9TdGFydE9mPSJAYW5kcm9pZDppZC90b2dnbGUiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvRW5kT2Y9IkBhbmRyb2lkOmlkL2ljb24iCisgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5RUy5EZXRhaWxJdGVtU2Vjb25kYXJ5IgorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIC8+CisKKyAgICA8U3dpdGNoCisgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL3RvZ2dsZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50RW5kPSJ0cnVlIgorICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxNmRwIgorICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5RUy5EZXRhaWxIZWFkZXIiIC8+CisKKzwvUmVsYXRpdmVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Nhcl9uYXZpZ2F0aW9uX2Jhci54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2Nhcl9uYXZpZ2F0aW9uX2Jhci54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmNjczZAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvY2FyX25hdmlnYXRpb25fYmFyLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPCEtLQorKioKKyoqIENvcHlyaWdodCAyMDE2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisqKgorKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisqKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisqKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyoqCisqKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisqKgorKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLworLS0+CisKKzxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuY2FyLkNhck5hdmlnYXRpb25CYXJWaWV3CisgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvc3lzdGVtX2Jhcl9iYWNrZ3JvdW5kIj4KKworICAgIDwhLS0gcGhvbmUuTmF2aWdhdGlvbkJhclZpZXcgaGFzIHJvdDAgYW5kIHJvdDkwIGJ1dCB3ZSBleHBlY3QgdGhlIGNhciBoZWFkIHVuaXQgdG8gaGF2ZSBhIGZpeGVkCisgICAgICAgICByb3RhdGlvbiBzbyBza2lwIHRoaXMgbGV2ZWwgb2YgdGhlIGhlaXJhcmNoeS4KKyAgICAtLT4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgICBhbmRyb2lkOmNsaXBDaGlsZHJlbj0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6Y2xpcFRvUGFkZGluZz0iZmFsc2UiCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbmF2X2J1dHRvbnMiCisgICAgICAgIGFuZHJvaWQ6YW5pbWF0ZUxheW91dENoYW5nZXM9InRydWUiPgorCisgICAgICAgIDwhLS0gQnV0dG9ucyBnZXQgcG9wdWxhdGVkIGhlcmUgZnJvbSBhIGNhcl9hcnJheXMueG1sLiAtLT4KKyAgICA8L0xpbmVhckxheW91dD4KKworICAgIDwhLS0gbGlnaHRzIG91dCBsYXlvdXQgdG8gbWF0Y2ggZXhhY3RseSAtLT4KKyAgICA8TGluZWFyTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xpZ2h0c19vdXQiCisgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSI+CisgICAgICAgIDwhLS0gTXVzdCBtYXRjaCBuYXZfYnV0dG9ucy4gLS0+CisgICAgPC9MaW5lYXJMYXlvdXQ+CisKKzwvY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLmNhci5DYXJOYXZpZ2F0aW9uQmFyVmlldz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvZG9ja2VkX3N0YWNrX2RpdmlkZXIueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9kb2NrZWRfc3RhY2tfZGl2aWRlci54bWwKaW5kZXggMjJlZDIxNi4uN2VhNTAyNyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9kb2NrZWRfc3RhY2tfZGl2aWRlci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9kb2NrZWRfc3RhY2tfZGl2aWRlci54bWwKQEAgLTI0LDEwICsyNCw5IEBACiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZG9ja2VkX2RpdmlkZXJfYmFja2dyb3VuZCIKICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvZG9ja2VkX2RpdmlkZXJfYmFja2dyb3VuZCIvPgogCi0gICAgPEltYWdlQnV0dG9uCisgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlci5EaXZpZGVySGFuZGxlVmlldwogICAgICAgICBzdHlsZT0iQHN0eWxlL0RvY2tlZERpdmlkZXJIYW5kbGUiCiAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZG9ja2VkX2RpdmlkZXJfaGFuZGxlIgotICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBudWxsIgotICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2RvY2tlZF9kaXZpZGVyX2hhbmRsZSIvPgorICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBudWxsIi8+CiAKIDwvY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhY2tkaXZpZGVyLkRpdmlkZXJWaWV3PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9rZXlib2FyZF9zaG9ydGN1dHNfdmlldy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L2tleWJvYXJkX3Nob3J0Y3V0c192aWV3LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjA0MzNlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9rZXlib2FyZF9zaG9ydGN1dHNfdmlldy54bWwKQEAgLTAsMCArMSwyNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgfiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICB+CisgIH4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICB+CisgIH4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgfgorICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICAtLT4KKzxSZWxhdGl2ZUxheW91dAorICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmlkPSJAK2lkL2tleWJvYXJkX3Nob3J0Y3V0c193cmFwcGVyIgorICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSI0MGRwIgorICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIj4KKzwvUmVsYXRpdmVMYXlvdXQ+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L21vYmlsZV9zaWduYWxfZ3JvdXAueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9tb2JpbGVfc2lnbmFsX2dyb3VwLnhtbAppbmRleCA2YWU1Y2YzLi5hMjBlYzhlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L21vYmlsZV9zaWduYWxfZ3JvdXAueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbW9iaWxlX3NpZ25hbF9ncm91cC54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L25hdmlnYXRpb25fYmFyLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbmF2aWdhdGlvbl9iYXIueG1sCmluZGV4IGQ1ODY2NGYuLjg0OThhNGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbmF2aWdhdGlvbl9iYXIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvbmF2aWdhdGlvbl9iYXIueG1sCkBAIC0xLDYgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDwhLS0KLS8qIGFwcHMvY29tbW9uL2Fzc2V0cy9kZWZhdWx0L2RlZmF1bHQvc2tpbnMvU3RhdHVzQmFyLnhtbAogKioKICoqIENvcHlyaWdodCAyMDExLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAqKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9ub3RpZmljYXRpb25fZ3V0cy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9ndXRzLnhtbAppbmRleCBkNTJjMjc0Li4wMzQ1MWI0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9ndXRzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L25vdGlmaWNhdGlvbl9ndXRzLnhtbApAQCAtMTYsODQgKzE2LDE2NSBAQAogLS0+CiAKIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuTm90aWZpY2F0aW9uR3V0cwotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6aWQ9IkAraWQvbm90aWZpY2F0aW9uX2d1dHMiCi0gICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIgotICAgIGFuZHJvaWQ6Z3Jhdml0eT0idG9wfHN0YXJ0IgotICAgID4KKyAgICAgICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fZ3V0cyIKKyAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgorICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJ0b3B8c3RhcnQiCisgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iQCphbmRyb2lkOmRpbWVuL25vdGlmaWNhdGlvbl9jb250ZW50X21hcmdpbl9zdGFydCIKKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSI4ZHAiCisgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX2JnX2NvbG9yIiA+CisKKyAgICA8IS0tIGhlYWRlciAtLT4KICAgICA8TGluZWFyTGF5b3V0CiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAYW5kcm9pZDpkaW1lbi9ub3RpZmljYXRpb25fbGFyZ2VfaWNvbl9oZWlnaHQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjMwZHAiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjlkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0VuZD0iOGRwIgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fZ3V0c19oZWFkZXIiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICAgPgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsfHN0YXJ0Ij4KIAotICAgICAgICA8SW1hZ2VWaWV3IGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2ljb24iCi0gICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGFuZHJvaWQ6ZGltZW4vbm90aWZpY2F0aW9uX2xhcmdlX2ljb25fd2lkdGgiCi0gICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBhbmRyb2lkOmRpbWVuL25vdGlmaWNhdGlvbl9sYXJnZV9pY29uX2hlaWdodCIKLSAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKLSAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iOGRwIgotICAgICAgICAgICAgICAgYW5kcm9pZDpzY2FsZVR5cGU9ImNlbnRlckluc2lkZSIKLSAgICAgICAgICAgICAgIC8+Ci0gICAgICAgIDxMaW5lYXJMYXlvdXQKKyAgICAgICAgPEltYWdlVmlldworICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkBhbmRyb2lkOmlkL2ljb24iCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjE4ZHAiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIxOGRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNmRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAYW5kcm9pZDpkcmF3YWJsZS9hcnJvd19kb3duX2Zsb2F0IiAvPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BrZ25hbWUiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMuSGVhZGVyIiAvPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGVidWdfaW5mbyIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCisgICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ob3RpZmljYXRpb25HdXRzLkhlYWRlciIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJib3R0b218c3RhcnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgorICAgIDwhLS0gSW1wb3J0YW5jZSBzbGlkZXIgLS0+CisgICAgPExpbmVhckxheW91dAogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0ic3RhcnR8Y2VudGVyX3ZlcnRpY2FsIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCiAgICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSI4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgID4KLSAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3BrZ25hbWUiCisgICAgICAgICAgICBhbmRyb2lkOmNsaWNrYWJsZT0iZmFsc2UiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjhkaXAiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkcCIgPgorICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3RpdGxlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgorICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5QcmltYXJ5IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZWxsaXBzaXplPSJtYXJxdWVlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6ZmFkaW5nRWRnZT0iaG9yaXpvbnRhbCIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjJkcCIvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvc3VtbWFyeSIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduU3RhcnQ9IkBhbmRyb2lkOmlkL3RpdGxlIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFsaWdubWVudD0idmlld1N0YXJ0IgorICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5TZWNvbmRhcnkiCisgICAgICAgICAgICAgICAgYW5kcm9pZDptYXhMaW5lcz0iMyIKKyAgICAgICAgICAgICAgICBhbmRyb2lkOm1pbkxpbmVzPSIyIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRwIiAvPgorCisgICAgICAgIDxGcmFtZUxheW91dAorICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iOGRwIiA+CisKKyAgICAgICAgICAgIDxJbWFnZVZpZXcKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sb3dfaW1wb3J0YW5jZSIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkAqYW5kcm9pZDpkcmF3YWJsZS9pY19ub3RpZmljYXRpb25fYmxvY2siCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxzdGFydCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjI0ZHAiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMjRkcCIgLz4KKworICAgICAgICAgICAgPFNlZWtCYXIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9zZWVrYmFyIgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iNTZkcCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI1NmRwIgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8c3RhcnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQCphbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5UaXRsZSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBjb2xvci9ub3RpZmljYXRpb25fZ3V0c190aXRsZV9jb2xvciIKLSAgICAgICAgICAgICAgICAgICAgLz4KLSAgICAgICAgICAgIDxEYXRlVGltZVZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aW1lc3RhbXAiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjAiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxzdGFydCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iQCphbmRyb2lkOnN0eWxlL1RleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5UaW1lIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiCi0gICAgICAgICAgICAgICAgICAgIC8+Ci0gICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZGVidWdfaW5mbyIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAKmFuZHJvaWQ6c3R5bGUvVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLlRpbWUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImJvdHRvbXxzdGFydCIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL25vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiCi0gICAgICAgICAgICAgICAgICAgIC8+Ci0gICAgICAgIDwvTGluZWFyTGF5b3V0PgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IiMwMGZmZmZmZiIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpwcm9ncmVzc0JhY2tncm91bmRUaW50PSJAY29sb3Ivbm90aWZpY2F0aW9uX2d1dHNfc2Vjb25kYXJ5X3NsaWRlcl9jb2xvciIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aHVtYlRpbnQ9IkBjb2xvci9ub3RpZmljYXRpb25fZ3V0c19zbGlkZXJfY29sb3IiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6cHJvZ3Jlc3NUaW50PSJAY29sb3Ivbm90aWZpY2F0aW9uX2d1dHNfc2xpZGVyX2NvbG9yIgorICAgICAgICAgICAgICAgICAgICBzdHlsZT0iQGFuZHJvaWQ6c3R5bGUvV2lkZ2V0Lk1hdGVyaWFsLlNlZWtCYXIuRGlzY3JldGUiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGlja01hcmtUaW50PSJAYW5kcm9pZDpjb2xvci9ibGFjayIgLz4KIAotICAgICAgICA8SW1hZ2VCdXR0b24gc3R5bGU9IkBhbmRyb2lkOnN0eWxlL1dpZGdldC5NYXRlcmlhbC5MaWdodC5CdXR0b24uQm9yZGVybGVzcy5TbWFsbCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25faW5zcGVjdF9hcHBfcHJvdmlkZWRfc2V0dGluZ3MiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI1MmRwIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIwIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19zZXR0aW5ncyIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICA8SW1hZ2VWaWV3CisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbWF4X2ltcG9ydGFuY2UiCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAKmFuZHJvaWQ6ZHJhd2FibGUvaWNfbm90aWZpY2F0aW9uX2FsZXJ0IgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWx8ZW5kIgorICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMjRkcCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyNGRwIi8+CiAKLSAgICAgICAgPEltYWdlQnV0dG9uIHN0eWxlPSJAYW5kcm9pZDpzdHlsZS9XaWRnZXQuTWF0ZXJpYWwuTGlnaHQuQnV0dG9uLkJvcmRlcmxlc3MuU21hbGwiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25faW5zcGVjdF9pdGVtIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI1MmRwIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpzcmM9IkBkcmF3YWJsZS9pY19pbmZvIgotICAgICAgICAgICAgICAgIC8+CisgICAgICAgIDwvRnJhbWVMYXlvdXQ+CisKKyAgICAgICAgPFJhZGlvR3JvdXAKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcHBseV90byIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiID4KKyAgICAgICAgICAgIDxSYWRpb0J1dHRvbiBhbmRyb2lkOmlkPSJAK2lkL2FwcGx5X3RvX3RvcGljIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgorICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5QcmltYXJ5IgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOmJ1dHRvblRpbnQ9IiM4NTgzODMiCisgICAgICAgICAgICAvPgorICAgICAgICAgICAgPFJhZGlvQnV0dG9uIGFuZHJvaWQ6aWQ9IkAraWQvYXBwbHlfdG9fYXBwIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9hcHBseV90b19hcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IkBzdHlsZS9UZXh0QXBwZWFyYW5jZS5Ob3RpZmljYXRpb25HdXRzLlByaW1hcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgorICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6YnV0dG9uVGludD0iIzg1ODM4MyIKKyAgICAgICAgICAgIC8+CisgICAgICAgIDwvUmFkaW9Hcm91cD4KKyAgICA8L0xpbmVhckxheW91dD4KKyAgICA8IS0tIGJ1dHRvbnMgLS0+CisgICAgPExpbmVhckxheW91dAorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJlbmQiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjhkcCIgPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9tb3JlX3NldHRpbmdzIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIKKyAgICAgICAgICAgIHN0eWxlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5CdXR0b24iCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9idG5fYm9yZGVybGVzc19yZWN0IgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjhkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1N0YXJ0PSI4ZHAiCisgICAgICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0idHJ1ZSIgLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZG9uZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub3RpZmljYXRpb25fZG9uZSIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiCisgICAgICAgICAgICBzdHlsZT0iQHN0eWxlL1RleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMuQnV0dG9uIgorICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUvYnRuX2JvcmRlcmxlc3NfcmVjdCIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjhkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRwIgorICAgICAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9InRydWUiLz4KICAgICA8L0xpbmVhckxheW91dD4KIDwvY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLk5vdGlmaWNhdGlvbkd1dHM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2VfbWF0cml4LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV9tYXRyaXgueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZjQ4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2VfbWF0cml4LnhtbApAQCAtMCwwICsxLDEwMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPExpbmVhckxheW91dAorICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgorICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiPgorICAgIDxTcGFjZQorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMGRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIiAvPgorICAgIDxHcmlkTGF5b3V0CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZWRpdF9ncm91cCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6cm93Q291bnQ9IjUiCisgICAgICAgIGFuZHJvaWQ6Y29sdW1uQ291bnQ9IjUiPgorCisgICAgICAgIDxTcGFjZSBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbG9yX21vZGlmaWNhdGlvbl9yIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIiAvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29sb3JfbW9kaWZpY2F0aW9uX2ciCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iIC8+CisKKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb2xvcl9tb2RpZmljYXRpb25fYiIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIgLz4KKworICAgICAgICA8U3BhY2UgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisKKyAgICAgICAgPFRleHRWaWV3CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9jb2xvcl9tb2RpZmljYXRpb25fciIKKyAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKyAgICAgICAgPEVkaXRUZXh0IGFuZHJvaWQ6aW5wdXRUeXBlPSJudW1iZXJEZWNpbWFsIiBhbmRyb2lkOmxheW91dF93aWR0aD0iNDBkcCIgLz4KKworICAgICAgICA8VGV4dFZpZXcKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NvbG9yX21vZGlmaWNhdGlvbl9nIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorCisgICAgICAgIDxUZXh0VmlldworICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiCisgICAgICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29sb3JfbW9kaWZpY2F0aW9uX2IiCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9hbmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisgICAgICAgIDxFZGl0VGV4dCBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyRGVjaW1hbCIgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQwZHAiIC8+CisKKyAgICAgICAgPFNwYWNlIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorICAgICAgICA8RWRpdFRleHQgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlckRlY2ltYWwiIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0MGRwIiAvPgorCisgICAgPC9HcmlkTGF5b3V0PgorICAgIDxCdXR0b24KKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcHBseSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iYm90dG9tIgorICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvY29sb3JfYXBwbHkiIC8+Cis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV93aWRnZXRfc2V0dGluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX3dpZGdldF9zZXR0aW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgyYTI5NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcHJlZmVyZW5jZV93aWRnZXRfc2V0dGluZ3MueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisgICAgIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+CisKKzxMaW5lYXJMYXlvdXQKKyAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCI+CisKKyAgICA8UmFkaW9CdXR0b24KKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yYWRpb19idXR0b24iCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjRkcCIKKyAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOmZvY3VzYWJsZT0iZmFsc2UiIC8+CisKKyAgICA8VmlldworICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iMWRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKKyAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSI/YW5kcm9pZDphdHRyL2xpc3REaXZpZGVyIiAvPgorCisgICAgPEltYWdlVmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3dpZGdldF9pY29uIgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNTBkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyNGRwIgorICAgICAgICBhbmRyb2lkOnRpbnQ9IkBhbmRyb2lkOmNvbG9yL2JsYWNrIgorICAgICAgICBhbmRyb2lkOnNyYz0iQGRyYXdhYmxlL2ljX3NldHRpbmdzIgorICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiIC8+CisKKzwvTGluZWFyTGF5b3V0PgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX3dpZGdldF9zd2l0Y2gueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9wcmVmZXJlbmNlX3dpZGdldF9zd2l0Y2gueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjEwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3ByZWZlcmVuY2Vfd2lkZ2V0X3N3aXRjaC54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0KKyAgICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKworPExpbmVhckxheW91dAorICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKKyAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50Ij4KKworICAgIDxSYWRpb0J1dHRvbgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JhZGlvX2J1dHRvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJmYWxzZSIKKyAgICAgICAgYW5kcm9pZDpmb2N1c2FibGU9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5FbmQ9IjRkcCIgLz4KKworICAgIDxWaWV3CisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIxZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvbGlzdERpdmlkZXIiIC8+CisKKyAgICA8U3dpdGNoCisgICAgICAgIGFuZHJvaWQ6aWQ9IkAqYW5kcm9pZDppZC9zd2l0Y2hfd2lkZ2V0IgorICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNTBkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCisgICAgICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJmYWxzZSIKKyAgICAgICAgYW5kcm9pZDpjbGlja2FibGU9ImZhbHNlIgorICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBudWxsIiAvPgorCis8L0xpbmVhckxheW91dD4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcXVpY2tfc3RhdHVzX2Jhcl9leHBhbmRlZF9oZWFkZXIueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9xdWlja19zdGF0dXNfYmFyX2V4cGFuZGVkX2hlYWRlci54bWwKaW5kZXggZTk0OWFkYy4uMjM3NzY4NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9xdWlja19zdGF0dXNfYmFyX2V4cGFuZGVkX2hlYWRlci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9xdWlja19zdGF0dXNfYmFyX2V4cGFuZGVkX2hlYWRlci54bWwKQEAgLTc4LDQ3ICs3OCw2NCBAQAogICAgICAgICAgICAgYW5kcm9pZDp0aW50PSJAYW5kcm9pZDpjb2xvci93aGl0ZSIgLz4KICAgICA8L0xpbmVhckxheW91dD4KIAotICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9zcGxpdF9jbG9ja192aWV3IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgIDxUZXh0VmlldworICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2hlYWRlcl9lbWVyZ2VuY3lfY2FsbHNfb25seSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblN0YXJ0PSIxNmRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjJkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRTdGFydD0idHJ1ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2xvY2siCi0gICAgICAgIC8+Ci0KLSAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5EYXRlVmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RhdGUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iNmRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjhkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfdG9FbmRPZj0iQGlkL2Nsb2NrIgotICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVN0YXJ0PSJAZHJhd2FibGUvaGVhZGVyX2RvdCIKLSAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVBhZGRpbmc9IjZkcCIKLSAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkNsb2NrIgotICAgICAgICBhbmRyb2lkOnRleHRTaXplPSJAZGltZW4vcXNfdGltZV9jb2xsYXBzZWRfc2l6ZSIKLSAgICAgICAgc3lzdGVtdWk6ZGF0ZVBhdHRlcm49IkBzdHJpbmcvYWJicmV2X3dkYXlfbW9udGhfZGF5X25vX3llYXJfYWxhcm0iCi0gICAgICAgIC8+Ci0KLSAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkFscGhhT3B0aW1pemVkQnV0dG9uCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWxhcm1fc3RhdHVzIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRUb3A9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3RvRW5kT2Y9IkBpZC9kYXRlIgotICAgICAgICBhbmRyb2lkOmRyYXdhYmxlUGFkZGluZz0iNmRwIgotICAgICAgICBhbmRyb2lkOmRyYXdhYmxlU3RhcnQ9IkBkcmF3YWJsZS9pY19hY2Nlc3NfYWxhcm1zX3NtYWxsIgotICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iIzY0ZmZmZmZmIgotICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkRhdGUiCi0gICAgICAgIGFuZHJvaWQ6bWluSGVpZ2h0PSIzNmRwIgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iNmRwIgotICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iMTZkcCIKKyAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSIxNmRwIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjhkcCIKICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIgotICAgICAgICAvPgorICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkVtZXJnZW5jeUNhbGxzT25seSIKKyAgICAgICAgYW5kcm9pZDp0ZXh0PSJAKmFuZHJvaWQ6c3RyaW5nL2VtZXJnZW5jeV9jYWxsc19vbmx5IgorICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRpY2FsIiAvPgorCisgICAgPExpbmVhckxheW91dAorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2RhdGVfdGltZV9ncm91cCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIyOGRwIgorICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFN0YXJ0PSJ0cnVlIgorICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFRvcD0idHJ1ZSIKKyAgICAgICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCI+CisKKyAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L3NwbGl0X2Nsb2NrX3ZpZXciCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iMTZkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iMmRwIgorICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jbG9jayIgLz4KKworICAgICAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5EYXRlVmlldworICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kYXRlIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjZkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iOGRwIgorICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVN0YXJ0PSJAZHJhd2FibGUvaGVhZGVyX2RvdCIKKyAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd2FibGVQYWRkaW5nPSI2ZHAiCisgICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkNsb2NrIgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iQGRpbWVuL3FzX3RpbWVfY29sbGFwc2VkX3NpemUiCisgICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9InRvcCIKKyAgICAgICAgICAgIHN5c3RlbXVpOmRhdGVQYXR0ZXJuPSJAc3RyaW5nL2FiYnJldl93ZGF5X21vbnRoX2RheV9ub195ZWFyX2FsYXJtIiAvPgorCisgICAgICAgIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuQWxwaGFPcHRpbWl6ZWRCdXR0b24KKyAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWxhcm1fc3RhdHVzIgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKKyAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luVG9wPSI4ZHAiCisgICAgICAgICAgICBhbmRyb2lkOmRyYXdhYmxlUGFkZGluZz0iNmRwIgorICAgICAgICAgICAgYW5kcm9pZDpkcmF3YWJsZVN0YXJ0PSJAZHJhd2FibGUvaWNfYWNjZXNzX2FsYXJtc19zbWFsbCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjNjRmZmZmZmYiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRBcHBlYXJhbmNlPSJAc3R5bGUvVGV4dEFwcGVhcmFuY2UuU3RhdHVzQmFyLkV4cGFuZGVkLkRhdGUiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iNmRwIgorICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJ0b3AiCisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOmF0dHIvc2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIgorICAgICAgICAgICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJnb25lIiAvPgorICAgIDwvTGluZWFyTGF5b3V0PgogCiAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLlF1aWNrUVNQYW5lbAogICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3F1aWNrX3FzX3BhbmVsIgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50cy54bWwKaW5kZXggMmMwMTBkZC4uMTZmZjE0YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHMueG1sCkBAIC0zMywxMiArMzMsNiBAQAogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+CiAgICAgPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzLlJlY2VudHNWaWV3PgogCi0gICAgPCEtLSBFbXB0eSBWaWV3IC0tPgotICAgIDxWaWV3U3R1YiBhbmRyb2lkOmlkPSJAK2lkL2VtcHR5X3ZpZXdfc3R1YiIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXQ9IkBsYXlvdXQvcmVjZW50c19lbXB0eSIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiIC8+Ci0KICAgICA8IS0tIEhpc3RvcnkgVmlldyAtLT4KICAgICA8Vmlld1N0dWIgYW5kcm9pZDppZD0iQCtpZC9oaXN0b3J5X3ZpZXdfc3R1YiIKICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXQ9IkBsYXlvdXQvcmVjZW50c19oaXN0b3J5IgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX2hpc3RvcnlfYnV0dG9uLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50c19oaXN0b3J5X2J1dHRvbi54bWwKaW5kZXggNjAxYzVlZC4uOGM5NmZjNiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX2hpc3RvcnlfYnV0dG9uLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfaGlzdG9yeV9idXR0b24ueG1sCkBAIC0yNiw1ICsyNiw0IEBACiAgICAgYW5kcm9pZDpzaGFkb3dEeD0iMCIKICAgICBhbmRyb2lkOnNoYWRvd0R5PSIyIgogICAgIGFuZHJvaWQ6c2hhZG93UmFkaXVzPSI1IgotICAgIGFuZHJvaWQ6Zm9udEZhbWlseT0ic2Fucy1zZXJpZi1tZWRpdW0iCi0gICAgYW5kcm9pZDp2aXNpYmlsaXR5PSJpbnZpc2libGUiIC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorICAgIGFuZHJvaWQ6Zm9udEZhbWlseT0ic2Fucy1zZXJpZi1tZWRpdW0iIC8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX2hpc3RvcnlfdGFzay54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfaGlzdG9yeV90YXNrLnhtbAppbmRleCBiOWRlMTU2Li5hZTExMDA2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfaGlzdG9yeV90YXNrLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfaGlzdG9yeV90YXNrLnhtbApAQCAtMTMsMTUgKzEzLDMwIEBACiAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAtLT4KLTxUZXh0VmlldworPExpbmVhckxheW91dAogICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5NYXRlcmlhbCIKICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIKLSAgICBhbmRyb2lkOnBhZGRpbmdMZWZ0PSIzMmRwIgotICAgIGFuZHJvaWQ6Z3Jhdml0eT0ic3RhcnR8Y2VudGVyX3ZlcnRpY2FsIgotICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE0c3AiCi0gICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNGRkZGRkYiCi0gICAgYW5kcm9pZDpmb250RmFtaWx5PSJzYW5zLXNlcmlmLW1lZGl1bSIKLSAgICBhbmRyb2lkOmJhY2tncm91bmQ9Ij9hbmRyb2lkOnNlbGVjdGFibGVJdGVtQmFja2dyb3VuZCIKLSAgICBhbmRyb2lkOmFscGhhPSIxIiAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgorICAgIGFuZHJvaWQ6Y2xpY2thYmxlPSJ0cnVlIgorICAgIGFuZHJvaWQ6Zm9jdXNhYmxlPSJ0cnVlIgorICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iP2FuZHJvaWQ6c2VsZWN0YWJsZUl0ZW1CYWNrZ3JvdW5kIj4KKyAgICA8SW1hZ2VWaWV3CisgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaWNvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjMyZHAiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iMzJkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIgorICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5TdGFydD0iMTZkcCIgLz4KKyAgICA8VGV4dFZpZXcKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9kZXNjcmlwdGlvbiIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCisgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0iZW5kIgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iMTZkcCIKKyAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJzdGFydHxjZW50ZXJfdmVydGljYWwiCisgICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE0c3AiCisgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjRkZGRkZGIgorICAgICAgICBhbmRyb2lkOmZvbnRGYW1pbHk9InNhbnMtc2VyaWYtbWVkaXVtIiAvPgorPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX3Rhc2tfdmlldy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbAppbmRleCAyYjgyYjA1Li41YjQ0YzE3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3LnhtbApAQCAtMzQsOSArMzQsMTAgQEAKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImJvdHRvbXxyaWdodCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpblJpZ2h0PSIxNWRwIgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIxNWRwIgotICAgICAgICAgICAgYW5kcm9pZDp0cmFuc2xhdGlvblo9IjJkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6dHJhbnNsYXRpb25aPSI0ZHAiCiAgICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9yZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL3JlY2VudHNfbG9ja190b190YXNrX2J1dHRvbl9iZyI+CisgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWNlbnRzX2xvY2tfdG9fdGFza19idXR0b25fYmciCisgICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImludmlzaWJsZSI+CiAgICAgICAgICAgICA8SW1hZ2VWaWV3CiAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IkBkaW1lbi9yZWNlbnRzX2xvY2tfdG9fYXBwX2ljb25fc2l6ZSIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IkBkaW1lbi9yZWNlbnRzX2xvY2tfdG9fYXBwX2ljb25fc2l6ZSIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50c190YXNrX3ZpZXdfaGVhZGVyLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVjZW50c190YXNrX3ZpZXdfaGVhZGVyLnhtbAppbmRleCAyMTY4ZThiLi4wNGYxOGM1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlY2VudHNfdGFza192aWV3X2hlYWRlci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZWNlbnRzX3Rhc2tfdmlld19oZWFkZXIueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vcmVjZW50c190YXNrX2Jhcl9oZWlnaHQiCiAgICAgYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eT0idG9wfGNlbnRlcl9ob3Jpem9udGFsIj4KICAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5GaXhlZFNpemVJbWFnZVZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hcHBsaWNhdGlvbl9pY29uIgorICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2ljb24iCiAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3JlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iQGRpbWVuL3JlY2VudHNfdGFza192aWV3X2FwcGxpY2F0aW9uX2ljb25fc2l6ZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJAZGltZW4vcmVjZW50c190YXNrX3ZpZXdfYXBwbGljYXRpb25faWNvbl9zaXplIgpAQCAtMjksMTIgKzI5LDEyIEBACiAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iOGRwIgogICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yZWNlbnRzX2J1dHRvbl9iZyIgLz4KICAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hY3Rpdml0eV9kZXNjcmlwdGlvbiIKKyAgICAgICAgYW5kcm9pZDppZD0iQCtpZC90aXRsZSIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbHxzdGFydCIKICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luU3RhcnQ9IjY0ZHAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iNjRkcCIKKyAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxMTJkcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIKICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNmZmZmZmZmZiIKICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL3JlY2VudHNfZW1wdHlfbWVzc2FnZSIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVtb3RlX2lucHV0LnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvcmVtb3RlX2lucHV0LnhtbAppbmRleCA3NDA5MmMxLi5jY2UwN2JkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3JlbW90ZV9pbnB1dC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9yZW1vdGVfaW5wdXQueG1sCkBAIC0yMywyMCArMjMsMjEgQEAKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yZW1vdGVfaW5wdXQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iMTZkcCIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nRW5kPSIxMmRwIgotICAgICAgICBhbmRyb2lkOnBhZGRpbmdCb3R0b209IjRkcCIKLSAgICAgICAgYW5kcm9pZDpwYWRkaW5nVG9wPSIyZHAiPgorICAgICAgICBhbmRyb2lkOnBhZGRpbmdFbmQ9IjEyZHAiPgogCiAgICAgPHZpZXcgY2xhc3M9ImNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuUmVtb3RlSW5wdXRWaWV3JFJlbW90ZUVkaXRUZXh0IgogICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yZW1vdGVfaW5wdXRfdGV4dCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgogICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ1RvcD0iMmRwIgorICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nQm90dG9tPSI0ZHAiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdTdGFydD0iMTZkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0VuZD0iMTJkcCIKICAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0ic3RhcnR8Y2VudGVyX3ZlcnRpY2FsIgogICAgICAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjZGVmZmZmZmYiCisgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGNvbG9yL3JlbW90ZV9pbnB1dF90ZXh0IgorICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3JIaW50PSJAY29sb3IvcmVtb3RlX2lucHV0X2hpbnQiCiAgICAgICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxNnNwIgogICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAbnVsbCIKICAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKQEAgLTQ2LDcgKzQ3LDkgQEAKICAgICA8RnJhbWVMYXlvdXQKICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCiAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2dyYXZpdHk9ImNlbnRlcl92ZXJ0aWNhbCI+CisgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9ncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiCisgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmdUb3A9IjJkcCIKKyAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iNGRwIj4KIAogICAgICAgICA8SW1hZ2VCdXR0b24KICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgpAQCAtNTgsOCArNjEsOCBAQAogICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZ0JvdHRvbT0iMTJkcCIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JlbW90ZV9pbnB1dF9zZW5kIgogICAgICAgICAgICAgICAgIGFuZHJvaWQ6c3JjPSJAZHJhd2FibGUvaWNfc2VuZCIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOnRpbnQ9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGludE1vZGU9InNyY19hdG9wIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGludD0iQGNvbG9yL3JlbW90ZV9pbnB1dF9zZW5kIgorICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGludE1vZGU9InNyY19pbiIKICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9yaXBwbGVfZHJhd2FibGUiIC8+CiAKICAgICAgICAgPFByb2dyZXNzQmFyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3NpZ25hbF9jbHVzdGVyX3ZpZXcueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zaWduYWxfY2x1c3Rlcl92aWV3LnhtbAppbmRleCBmOGJkNmZkLi4xOThlNjU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3NpZ25hbF9jbHVzdGVyX3ZpZXcueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc2lnbmFsX2NsdXN0ZXJfdmlldy54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXIueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyLnhtbAppbmRleCBhNWIzYTgzLi5hYWE1YTA5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXIueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhci54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfZXhwYW5kZWQueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX2V4cGFuZGVkLnhtbAppbmRleCBiZmExM2UyLi4xMmNmMTM3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfZXhwYW5kZWQueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9leHBhbmRlZC54bWwKQEAgLTEsNiArMSw1IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPCEtLQotLyogYXBwcy9jb21tb24vYXNzZXRzL2RlZmF1bHQvZGVmYXVsdC9za2lucy9TdGF0dXNCYXIueG1sCiAqKgogKiogQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzLnhtbAppbmRleCAxNjc1NzczLi5hZGZhZWQxMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm9fcmVjZW50X2FwcHMueG1sCkBAIC0xLDYgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDwhLS0KLS8qIGFwcHMvY29tbW9uL2Fzc2V0cy9kZWZhdWx0L2RlZmF1bHQvc2tpbnMvU3RhdHVzQmFyLnhtbAogKioKICoqIENvcHlyaWdodCAyMDExLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAqKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9yb3cueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9yb3cueG1sCmluZGV4IDBjZWE3YWUuLjYyZmRkNDIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25fcm93LnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N0YXR1c19iYXJfbm90aWZpY2F0aW9uX3Jvdy54bWwKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9ub3RpZmljYXRpb25fZ3V0c19zdHViIgogICAgICAgICBhbmRyb2lkOmluZmxhdGVkSWQ9IkAraWQvbm90aWZpY2F0aW9uX2d1dHMiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgorICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKICAgICAgICAgLz4KIAogPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3VwZXJfc3RhdHVzX2Jhci54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvbGF5b3V0L3N1cGVyX3N0YXR1c19iYXIueG1sCmluZGV4IDdhYzljNDEuLjM5ZGE4ZDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy9sYXlvdXQvc3VwZXJfc3RhdHVzX2Jhci54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL2xheW91dC9zdXBlcl9zdGF0dXNfYmFyLnhtbApAQCAtODQsMTYgKzg0LDEwIEBACiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCiAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ii8+CiAKLSAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlBhbmVsSG9sZGVyCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcGFuZWxfaG9sZGVyIgorICAgIDxpbmNsdWRlIGxheW91dD0iQGxheW91dC9zdGF0dXNfYmFyX2V4cGFuZGVkIgogICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgogICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAY29sb3IvdHJhbnNwYXJlbnQiID4KLSAgICAgICAgPGluY2x1ZGUgbGF5b3V0PSJAbGF5b3V0L3N0YXR1c19iYXJfZXhwYW5kZWQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOnZpc2liaWxpdHk9ImdvbmUiIC8+Ci0gICAgPC9jb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUGFuZWxIb2xkZXI+CisgICAgICAgIGFuZHJvaWQ6dmlzaWJpbGl0eT0iZ29uZSIgLz4KIAogICAgIDxjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuU2NyaW1WaWV3IGFuZHJvaWQ6aWQ9IkAraWQvc2NyaW1faW5fZnJvbnQiCiAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hZi9zdHJpbmdzLnhtbAppbmRleCBmM2U3Y2ZlLi4xOWZiMjhlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFmL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYWYvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Ikx1aXRvZXN0ZWwgc3RpbC4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iV2Vya21vZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJNYWFrIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB0b2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB2ZXJ3ZXJwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkFsbGUgb25sYW5nc2UgcHJvZ3JhbW1lIGlzIHRvZWdlbWFhay4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik1vYmllbGUgd2FybWtvbCBhZmdlc2tha2VsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmllbGUgd2FybWtvbCBhYW5nZXNrYWtlbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJVaXRzYWFpIHZhbiBza2VybSBnZXN0YWFrLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+Ildlcmttb2R1cyBpcyBhZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJXZXJrbW9kdXMgaXMgYWFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ildlcmttb2R1cyBpcyBhZmdlc2tha2VsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJXZXJrbW9kdXMgaXMgYWFuZ2Vza2FrZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IlNrZXJtaGVsZGVyaGVpZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHLWRhdGEgaXMgbGFhdCB3YWciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0Ry1kYXRhIGlzIGxhYXQgd2FnIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGdlYnJ1aWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPi1saW1pZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4gd2FhcnNrdXdpbmciPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ildlcmttb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJKb3Ugb25sYW5nc2Ugc2tlcm1zIHZlcnNreW4gaGllciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IlByb2dyYW1pbmxpZ3RpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJza2VybXZhc3BlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJzb2VrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJLb24gbmllIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBiZWdpbiBuaWUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik1lZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iR2Vza2llZGVuaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtZWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJWZXJkZWVsIGhvcmlzb250YWFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iVmVyZGVlbCB2ZXJ0aWthYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iVmVyZGVlbCBnZXBhc21hYWsiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyeXNwYWFyZGVyIGlzIGFhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJWZXJtaW5kZXIgd2Vya3ZlcnJpZ3RpbmcgZW4gYWd0ZXJncm9uZGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlNrYWtlbCBiYXR0ZXJ5YmVzcGFhcmRlciBhZiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmhvdWQgdmVyc3RlZWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gc2FsIGFsbGVzIGJlZ2luIHZhc3Zhbmcgd2F0IG9wIGpvdSBza2VybSBnZXd5cyB3b3JkLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJNb2VuaWUgd2VlciB3eXMgbmllIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlZlZSBhbGxlcyB1aXQiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IldlaWVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gaXMgZGllIHZvbHVtZWRpYWxvb2ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJSYWFrIG9tIGRpZSBvb3JzcHJvbmtsaWtlIHRlcnVnIHRlIHN0ZWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+Ikp5IGdlYnJ1aWsgdGFucyBqb3Ugd2Vya3Byb2ZpZWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTdGVsc2VsLVVJLW9udHZhbmdlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+Ild5cyBwZXJzZW50YXNpZSB2YW4gaW5nZWJlZGRlIGJhdHRlcnkiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlNrYWtlbCBCbHVldG9vdGggYWFuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJKeSBtb2V0IEJsdWV0b290aCBhYW5za2FrZWwgb20gam91IHNsZXV0ZWxib3JkIGFhbiBqb3UgdGFibGV0IHRlIGtvcHBlbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJTa2FrZWwgYWFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iUGFzIHRvZSBvcCA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4ta2VubmlzZ2V3aW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlBhcyB0b2Ugb3AgYWxsZSBrZW5uaXNnZXdpbmdzIHZhbiBoaWVyZGllIHByb2dyYW0gYWYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iR2VibG9ra2VlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+Ik1pbiBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybWFsZSBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iR3Jvb3QgYmVsYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iRHJpbmdlbmRlIGJlbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTW9ldCBub29pdCBoaWVyZGllIGtlbm5pc2dld2luZ3Mgd3lzIG5pZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJXeXMgb25kZXJhYW4gZGllIGtlbm5pc2dld2luZ2x5cyBzb25kZXIgXCduIGdlbHVpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iV3lzIGhpZXJkaWUga2VubmlzZ2V3aW5ncyBzb25kZXIgZ2VsdWlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iV3lzIGJvYWFuIGRpZSBrZW5uaXNnZXdpbmdseXMgZW4gbWFhayBcJ24gZ2VsdWlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IlZlcnNreW4gdmx1Z3RpZyBvcCBkaWUgc2tlcm0gZW4gbWFhayBcJ24gZ2VsdWlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJNZWVyIGluc3RlbGxpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iS2xhYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWxlIGtsZXVyZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJBYW5ka2xldXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJHZXBhc21hYWt0ZSBrbGV1cmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJPbmJla2VuZGUga2xldXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IktsZXVydmVyYW5kZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJXeXMga2l0c2luc3RlbGxpbmdzLXRlw6tsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBa3RpdmVlciBnZXBhc21hYWt0ZSBvbXNrZXBwaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iUGFzIHRvZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJCZXZlc3RpZyBpbnN0ZWxsaW5ncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlNvbW1pZ2Uga2xldXJpbnN0ZWxsaW5ncyBrYW4gaGllcmRpZSB0b2VzdGVsIG9uYnJ1aWtiYWFyIG1hYWsuIEtsaWsgT0sgb20gaGllcmRpZSBrbGV1cmluc3RlbGxpbmdzIHRlIGJldmVzdGlnOyBhbmRlcnNpbnMgc2FsIGhpZXJkaWUgaW5zdGVsbGluZ3MgbsOhIDEwIHNla29uZGVzIHRlcnVnZ2VzdGVsIHdvcmQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXR0ZXJ5ICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkJhdHRlcnliZXNwYWFyZGVyIGlzIG5pZSBiZXNraWtiYWFyIHdhbm5lZXIgZ2VsYWFpIHdvcmQgbmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcnliZXNwYWFyZGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iVmVybWluZGVyIHdlcmt2ZXJyaWd0aW5nIGVuIGFndGVyZ3JvbmRkYXRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hbS9zdHJpbmdzLnhtbAppbmRleCA4MzhhNGViLi4yMDhhYWZmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFtL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYW0vc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuGLqOGIteGIjeGKrSDhjKXhiKog4Y2A4Yyl4Ymz4Y2iIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuGLqOGIpeGIqyDhiIHhipDhibMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhiqDhiLXhi4jhjI3hi7XhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGJsOGIsOGKk+GJpeGJt+GIjTo6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i4YiB4YiJ4YidIOGLqOGJheGIreGJpSDhjIrhi5wg4Yib4YiY4YiN4Yqo4Ym74YuO4Ym9IOGJsOGIsOGKk+GJpeGJsOGLi+GIjeGNoiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4Yuo4Ymw4YqV4YmA4Yiz4YmD4Yi9IOGIteGIjeGKrSDhiJjhjIjhipPhipsg4YqQ4Yyl4YmlIOGMoOGNjeGJt+GIjeGNoiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuGLqOGJsOGKleGJgOGIs+GJg+GIvSDhiLXhiI3hiq0g4YiY4YyI4YqT4YqbIOGKkOGMpeGJpSDhiaDhiK3hibfhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLhiJvhi6sg4YyI4Yy9IOGImOGLjeGIsOGLtSDhiYbhiJ/hiI3hjaIiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLhi6jhiKXhiKsg4YiB4YqQ4YmzIOGMoOGNjeGJt+GIjeGNoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuGLqOGIpeGIqyDhiIHhipDhibMg4Ymg4Yit4Ym34YiN4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i4Yuo4Yil4YirIOGIgeGKkOGJsyDhjKDhjY3hibfhiI3hjaIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i4Yuo4Yil4YirIOGIgeGKkOGJsyDhiaDhiK3hibfhiI3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4Yml4Yip4YiF4YqQ4Ym1IOGLq+GIs+GLqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjLhjIItM+GMgiDhi43hiILhiaUg4YiL4Y2N4YmzIOGJhuGIn+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjThjIIg4YuN4YiC4YmlIOGIi+GNjeGJsyDhiYbhiJ/hiI0iPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4Yyl4YmF4YidIOGIi+GLrSDhi43hiI/hiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDhjIjhi7DhiaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IuGLqDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4Yib4Yi14Yyg4YqV4YmA4YmC4YurIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLhi6jhiKXhiKsg4YiB4YqQ4YmzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuGLqOGJheGIreGJpSDhjIrhi5wg4Yib4YurIOGMiOGMvuGJveGLjiDhiqXhi5rhiIUg4Yut4Ymz4Yur4YiJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i4Yuo4YiY4Ymw4YyN4Ymg4Yiq4YurIOGImOGIqOGMgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuGIm+GLqyDhjIjhjL0g4YiY4Yiw4Yqr4Ym1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuGNiOGIjeGMjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+4YqVIOGImOGMgOGImOGIrSDhiqDhiI3hibDhibvhiIjhiJ3hjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4Ymw4Yyo4Yib4YiqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuGJs+GIquGKrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOGJsOGMqOGIm+GIqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4Yqg4YyN4Yu14YidIOGKreGNiOGIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuGJgeGIjeGJgeGIjSDhiq3hjYjhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4Ymg4Yml4YyBIOGKreGNiOGIjSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLhi6jhiaPhibXhiKog4YqD4Yut4YiNIOGJhuGMo+GJoiDhiaDhiK3hibfhiI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4Yqg4Y2I4Yy74Yy44Yid4YqVIOGKpeGKkyDhi6jhjIDhiK3hiaMg4YuN4YiC4YmlIOGLreGJgOGKleGIs+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Ymj4Ym14YiqIOGJhuGMo+GJouGKlSDhiqDhjKXhjYsiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Yut4YuY4Ym24Ym9IOGJsOGLsOGJpeGJgOGLi+GIjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDhiaDhiJvhi6sg4YyI4Yy94YuOIOGIi+GLrSDhi6jhibPhi6jhi43hipUg4YqQ4YyI4YitIOGJoOGImeGIiSDhiJvhipXhiLPhibUg4Yut4YyA4Yid4Yir4YiN4Y2iIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuGLs+GMjeGImOGKmyDhiqDhibPhiLPhi60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4YiB4YiJ4YqV4YidIOGKoOGMveGLsyI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4Yqo4YiN4Yqt4YiNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Yuo4Yu14Yid4Yy9IOGImOGMoOGKlSDhiJjhjIjhipPhipvhi40g4YqQ4YuNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i4Yuo4YiY4YyA4YiY4Yiq4Yur4YuN4YqVIOGLiOGLsOGKkOGJoOGIqOGJoOGJtSDhiIjhiJjhiJjhiIjhiLUg4Yut4YqV4Yqp4Y2iIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiLhjaMgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i4Yuo4Yi14YirIOGImOGMiOGIiOGMq+GLjuGKlSDhiqXhi6jhibDhjKDhiYDhiJkg4YqQ4YuNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4Yuo4Yi14Yit4YuT4Ym1IOGJoOGLreGKkOGMiOGMvSDhiJjhiYPhipsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLhi6jhibDhiYDhiIvhiYDhiIgg4Yuo4Ymj4Ym14YiqIOGKoOGMoOGJg+GJgOGInSDhiJjhibbhipsg4Yqg4Yiz4YutIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLhiaXhiInhibHhi50g4Yut4Yml4YirPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLhi6jhiYHhiI3hjY0g4Yiw4YiM4Yuz4YuO4YqVIOGKqOGKpeGIreGIteGLjiDhjKHhiaPhi4og4YyL4YitIOGIiOGIm+GMiOGKk+GKmOGJtSDhiaDhiJjhjIDhiJjhiKrhi6sg4Yml4YiJ4Ymx4Yud4YqVIOGIm+GJpeGIq+GJtSDhiqDhiIjhiaXhi47hibXhjaIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLhiqDhiaXhiKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLhiaA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGIi+GLrSDhibDhjI3hiaXhiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLhiqjhi5rhiIUg4YiY4Ymw4YyN4Ymg4Yiq4YurIOGJoOGImuGImOGMoSDhiIHhiInhiJ0g4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGIi+GLrSDhibDhjI3hiaXhiK0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4Yuo4Ymz4YyI4YuxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4Yud4YmF4Ymw4YqbIOGKoOGIteGNiOGIi+GMiuGKkOGJtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLhiJjhi7DhiaDhipsg4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuGKqOGNjeGJsOGKmyDhiqDhiLXhjYjhiIvhjIrhipDhibUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLhiqDhiLXhibjhirPhi60g4Yqg4Yi14Y2I4YiL4YyK4YqQ4Ym1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLhiqXhipDhi5rhiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGJoOGMreGIq+GIvSDhiqDhibPhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Ymg4Yib4Yiz4YuI4YmC4YurIOGLneGIreGLneGIqSDhibPhib3hipvhi43hipUg4Yqt4Y2N4YiNIOGIi+GLrSDhiaDhjLjhjKXhibMg4Yqg4Yiz4YutIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLhiqXhipDhi5rhiIXhipUg4Yib4Yiz4YuI4YmC4Yur4YuO4Ym9IOGJoOGMuOGMpeGJsyDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuGJoOGIm+GIs+GLiOGJguGLq+GLjuGJvSDhi53hiK3hi53hiK0g4YiL4Yut4Yqb4YuNIOGKreGNjeGIjSDhiIvhi60g4Yqg4Yiz4Yut4YqTIOGLteGIneGNhSDhiqDhiLDhiJsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4YuI4YuwIOGMiOGMuCDhiJvhi6vhi40g4Yut4YiY4YiN4Yqo4Ymx4YqTIOGLteGIneGNhSDhi63hiYXhiKjhjLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuGJsOGMqOGIm+GIqiDhiYXhipXhiaXhiK7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLhibDhiqjhipPhi43hipfhiI0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLhiJjhi7DhiaDhipsg4YmA4YiI4Yie4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuGLqOGIiOGIiuGJtSDhiYDhiIjhiJ7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuGJpeGMgSDhiYDhiIjhiJ7hib0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLhi6jhiJvhi63hibPhi4jhiYEg4YmA4YiI4Yie4Ym9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuGLqOGJgOGIiOGInSDhiJvhiLvhiLvhi6siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLhi6jhjYjhjKPhipUg4YmF4YqV4Yml4Yiu4Ym9IOGIsOGJheGKlSDhiqDhiLPhi60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuGJpeGMgSDhiYXhi6jhiKvhipUg4Yqg4YqV4YmDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Ymw4YyN4Yml4YitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuGJheGKleGJpeGIruGJveGKlSDhi6vhiKjhjIvhjI3hjKEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLhiqDhipXhi7PhipXhi7Ug4Yuo4YmA4YiI4YidIOGJheGKleGJpeGIruGJvSDhi63hiIXhipUg4YiY4Yij4Yiq4YurIOGLqOGIm+GLreGMoOGJheGInSDhiIrhi6vhi7DhiK3hjInhibUg4Yut4Ym94YiL4YiJ4Y2iIOGKpeGKkOGLmuGIheGKlSDhi6jhiYDhiIjhiJ0g4YmF4YqV4Yml4Yiu4Ym9IOGIiOGIm+GIqOGMi+GMiOGMpSDhiqXhiLog4Yuo4Yia4YiI4YuN4YqVIOGMoOGJhSDhi6vhi7XhiK3hjInhjaMg4Yqg4YiI4Ymg4YiI4Yua4YurIOGKpeGKkOGLmuGIhSDhiYXhipXhiaXhiK7hib0g4YqoMTAg4Yiw4Yqo4YqV4Yu24Ym9IOGJoOGKi+GIiyDhi7PhjI3hiJ0g4Yut4YyA4Yid4Yir4YiJ4Y2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLhiaPhibXhiKogKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4YqD4Yut4YiNIOGJoOGImuGInuGIi+GJoOGJtSDhjIrhi5wg4Ymj4Ym14YiqIOGJhuGMo+GJoiDhiqDhi63hjIjhip3hiJ0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i4Ymj4Ym14YiqIOGJhuGMo+GJoiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuGKoOGNiOGMu+GMuOGIneGKlSDhiqXhipMg4Yuo4YyA4Yit4YmjIOGLjeGIguGJpeGKlSDhi63hiYDhipXhiLPhiI0iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWFyL3N0cmluZ3MueG1sCmluZGV4IDI3ODlmZmEuLjM1ZTc4YzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1hci9zdHJpbmdzLnhtbApAQCAtMTY1LDggKzE2NSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i2LHZhtmK2YYg2LXYp9mF2KouIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+ItmI2LbYuSDYp9mE2LnZhdmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLYpdiy2KfZhNipIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i2KrZhdiqINil2LLYp9mE2KkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+Itiq2YUg2KrYrNin2YfZhCDZg9mEINin2YTYqti32KjZitmC2KfYqiDYp9mE2YXYs9iq2K7Yr9mF2Kkg2YXYpNiu2LHZi9inLiI8L3N0cmluZz4KQEAgLTIxOCwxNCArMjE3LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i2KrZhSDYpdmK2YLYp9mBINmG2YLYt9ipINin2KrYtdin2YQg2KfZhNis2YjZkdin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i2KrZhSDYqti02LrZitmEINmG2YLYt9ipINin2KrYtdin2YQg2KfZhNis2YjZkdin2YQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i2KrZiNmC2YEg2KXYsdiz2KfZhCDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i2YjYtti5INin2YTYudmF2YQg2YXYudi32Y7ZkdmELiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+ItmI2LbYuSDYp9mE2LnZhdmEINmC2YrYryDYp9mE2KrYtNi62YrZhC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLYqtmFINiq2LnYt9mK2YQg2YjYtti5INin2YTYudmF2YQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Itiq2YUg2KrYtNi62YrZhCDZiNi22Lkg2KfZhNi52YXZhC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i2LPYt9mI2Lkg2KfZhNi02KfYtNipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i2KjZitin2YbYp9iqINi02KjZg9in2Kog2KfZhNis2YrZhCDYp9mE2KvYp9mG2Yog2YjYp9mE2KvYp9mE2Ksg2YXYqtmI2YLZgdipINmF2KTZgtiq2YvYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+Itiq2YUg2KXZitmC2KfZgSDYqNmK2KfZhtin2Kog2LTYqNmD2Kkg2KfZhNis2YrZhCDYp9mE2LHYp9io2Lkg2YXYpNmC2KrZi9inIjwvc3RyaW5nPgpAQCAtMzAzLDE1ICsyOTgsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+INmF2LPYqtiu2K/ZhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLZgtmK2K8gPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4i2KrYrdiw2YrYsSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLZiNi22Lkg2KfZhNi52YXZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLYqti42YfYsSDYtNin2LTYp9iq2YMg2KfZhNmF2LnYsdmI2LbYqSDZhdik2K7YsdmL2Kcg2YfZhtinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i2YXYudmE2YjZhdin2Kog2KfZhNiq2LfYqNmK2YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLYqtir2KjZitiqINin2YTYtNin2LTYqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLYqNit2KsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Itiq2LnYsNixINio2K/YoSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Itin2YTZhdiy2YrYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLYp9mE2LPYrNmE2ZEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDYo9iu2LHZiSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i2KrZgtiz2YrZhSDYo9mB2YLZiiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Itiq2YLYs9mK2YUg2LHYo9iz2YoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i2KrZgtiz2YrZhSDZhdiu2LXYtSI8L3N0cmluZz4KQEAgLTM3NCw3ICszNjgsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLZiNi22Lkg2KrZiNmB2YrYsSDYp9mE2LfYp9mC2Kkg2YLZitivINin2YTYqti02LrZitmEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItmE2K7Zgdi2INmF2LPYqtmI2Ykg2KfZhNij2K/Yp9ihINmI2KjZitin2YbYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLYpdmK2YLYp9mBINiq2YjZgdmK2LEg2LTYrdmGINin2YTYqNi32KfYsdmK2KkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i2KfZhNmF2K3YqtmI2YrYp9iqINmF2K7ZgdmK2KkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g2LPZitio2K/YoyDYp9mE2KrZgtin2Lcg2YPZhCDYtNmK2KEg2YrYqtmFINi52LHYttmHINi52YTZiSDYp9mE2LTYp9i02KkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Iti52K/ZhSDYp9mE2KXYuNmH2KfYsSDZhdix2Kkg2KPYrtix2YkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i2YXYrdmIINin2YTZg9mEIjwvc3RyaW5nPgpAQCAtNDE5LDggKzQxMiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLYsdmB2LYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDZh9mIINmF2LHYqNi5INit2YjYp9ixINmF2LPYqtmI2Ykg2KfZhNi12YjYqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+Itin2YTZhdizINmE2KfYs9iq2LnYp9iv2Kkg2KfZhNil2LnYr9in2K8g2KfZhNij2LXZhNmKLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4i2IwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i2KPZhtiqINiq2LPYqtiu2K/ZhSDZhdmE2YHZgyDYp9mE2LTYrti12Yog2YTZhNi52YXZhCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+Itij2K/Yp9ipINi22KjYtyDZiNin2KzZh9ipINmF2LPYqtiu2K/ZhSDYp9mE2YbYuNin2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLYudix2LYg2YbYs9io2Kkg2KfZhNio2LfYp9ix2YrYqSDYp9mE2YXYr9mF2KzYqSI8L3N0cmluZz4KQEAgLTQ2MCw0ICs0NTIsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i2KrYtNi62YrZhCDYp9mE2KjZhNmI2KrZiNir2J8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i2YTYqtmI2LXZitmEINmE2YjYrdipINin2YTZhdmB2KfYqtmK2K0g2KjYp9mE2KzZh9in2LIg2KfZhNmE2YjYrdmK2Iwg2YrZhNiy2YXZgyDYqti02LrZitmEINio2YTZiNiq2YjYqyDYo9mI2YTYp9mLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Itiq2LTYutmK2YQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLYp9mE2KrYt9io2YrZgiDYudmE2Ykg2KXYtNi52KfYsdin2KogPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i2KfZhNiq2LfYqNmK2YIg2YHZiiDYrNmF2YrYuSDYp9mE2KXYtNi52KfYsdin2Kog2YXZhiDZh9iw2Kcg2KfZhNiq2LfYqNmK2YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i2KrZhSDYp9mE2K3YuNixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i2KPZh9mF2YrYqSDZhdmG2K7Zgdi22KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i2KPZh9mF2YrYqSDYudin2K/ZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Itij2YfZhdmK2Kkg2LnYp9mE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Itij2YfZhdmK2Kkg2YXZhNit2Y7ZkdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLYudiv2YUg2LnYsdi2INmH2LDZhyDYp9mE2KXYtNi52KfYsdin2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i2KfZhNi52LHYtiDYo9iz2YHZhCDZgtin2KbZhdipINin2YTYpdi02LnYp9ix2KfYqiDYqNiv2YjZhiDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLYudix2LYg2YfYsNmHINin2YTYpdi02LnYp9ix2KfYqiDYqNiv2YjZhiDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLYp9mE2LnYsdi2INij2LnZhNmJINmC2KfYptmF2Kkg2KfZhNil2LTYudin2LHYp9iqINmF2Lkg2KrZhtio2YrZhyDYtdmI2KrZiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLYp9mE2LjZh9mI2LEg2LPYsdmK2LnZi9inINi52YTZiSDYp9mE2LTYp9i02Kkg2YXYuSDYqtmG2KjZitmHINi12YjYqtmKIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLYp9mE2YXYstmK2K8g2YXZhiDYp9mE2KXYudiv2KfYr9in2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLYqtmFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i2KPZhNmI2KfZhiDYudin2K/ZitipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Itij2YTZiNin2YYg2YTZitmE2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i2KPZhNmI2KfZhiDZhdiu2LXYtdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i2KPZhNmI2KfZhiDYutmK2LEg2YXYudix2YjZgdipIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Itil2LTYudin2LEg2KfZhNij2YTZiNin2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLYpdi42YfYp9ixINmC2LPZhSDYp9mE2KXYudiv2KfYr9in2Kog2KfZhNiz2LHZiti52KkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Itiq2YXZg9mK2YYg2KfZhNiq2K3ZiNmK2YQg2KfZhNmF2K7Ytdi1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i2KrYt9io2YrZgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLYqtij2YPZitivINin2YTYpdi52K/Yp9iv2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItmK2YXZg9mGINij2YYg2KrYqtiz2KjYqCDYqNi52LYg2KXYudiv2KfYr9in2Kog2KfZhNij2YTZiNin2YYg2YHZiiDYqti52LfZitmEINil2YXZg9in2YbZitipINin2LPYqtiu2K/Yp9mFINin2YTYrNmH2KfYsi4g2YrZhdmD2YbZgyDYp9mE2YbZgtixINi52YTZiSBcItmF2YjYp9mB2YJcIiDZhNiq2KPZg9mK2K8g2KXYudiv2KfYr9in2Kog2KfZhNij2YTZiNin2YYg2YfYsNmH2Iwg2YjYpdmE2Kcg2YHYs9iq2KrZhSDYpdi52KfYr9ipINiq2LnZitmK2YYg2YfYsNmHINin2YTYpdi52K/Yp9iv2KfYqiDYqNi52K8gMTAg2KvZiNin2YbZjS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+Itin2YTYqNi32KfYsdmK2KkgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i2YjYtti5INiq2YjZgdmK2LEg2LTYrdmGINin2YTYqNi32KfYsdmK2Kkg2LrZitixINmF2KrYp9itINij2KvZhtin2KEg2KfZhNi02K3Zhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i2KrZiNmB2YrYsSDYtNit2YYg2KfZhNio2LfYp9ix2YrYqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+ItmE2K7Zgdi2INmF2LPYqtmI2Ykg2KfZhNij2K/Yp9ihINmI2KjZitin2YbYp9iqINin2YTYrtmE2YHZitipIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWF6LXJBWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCmluZGV4IDY1MmY3MWMuLjg2NGZkMzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYXotckFaL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJayZluZ3Z1cmFuIHPJmXNzaXouIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IsSwxZ8gcmVqaW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4ga8mZbmFybGHFn2TEsXLEsW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDDp8SxeGFyxLFsZMSxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkLDvHTDvG4gc29uIHTJmXRiaXFsyZlyIGvJmW5hcmxhxZ9kxLFyxLFsZMSxLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWwgaG90c3BvdCBkZWFrdGl2ZGlyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsIGhvdHNwb3QgYWt0aXZkaXIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iRWtyYW4geWF5xLFtxLEgZGF5YW5kxLFyxLFsZMSxLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IsSwxZ8gcmVqaW1pIGRlYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4ixLDFnyByZWppbWkgYWt0aXZkaXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4ixLDFnyByZWppbWkgc8O2bsO8bMO8ZMO8ci4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4ixLDFnyByZWppbWkgeWFuxLFsxLFkxLFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJEaXNwbGF5IGJyaWdodG5lc3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyBtyZlsdW1hdGxhcsSxbmEgZmFzaWzJmSB2ZXJpbGRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcgbcmZbHVtYXRsYXLEsW5hIGZhc2lsyZkgdmVyaWxkaSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBpxZ9syZluaWIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBsaW1pdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiB4yZliyZlyZGFybMSxxJ/EsSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4ixLDFnyByZWppbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iWW91ciByZWNlbnQgc2NyZWVucyBhcHBlYXIgaGVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IlTJmXRiaXEgaGFxccSxbmRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4iZWtyYW4gc2FuY2HEn8SxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImF4dGFyxLHFnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGJhxZ9sYW5hIGJpbG1pci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iRGFoYSDDp294Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IlRhcml4w6fJmSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IERhaGEgw6dveCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iw5xmw7xxaSBCw7ZsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4ixZ5hcXVsaSBCw7ZsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkbJmXJkaSBCw7ZsIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVuZXJqaSBxyZluYcmZdGkgYWt0aXZkaXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUGVyZm9ybWFuc8SxIGF6YWxkxLFyIHbJmSBhcnhhIGZvbiBkYXRhc8SxbsSxIG3JmWhkdWRsYcWfZMSxcsSxciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRW5lcmppecmZIHHJmW5hyZl0IHJlamltaW5pIGRlYWt0aXYgZWRpbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJNyZl6bXVuIGdpemxpZGlyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGVrcmFuxLFuxLF6ZGEgb2xhbiBoyZlyIMWfZXlpbiDFn8mZa2xpbmkgw6fJmWvJmWPJmWsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRhaGEgZ8O2c3TJmXJtyZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSGFtxLFzxLFuxLEgc2lsaW4iPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IlLJmWRkIGV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gcHJvcXJhbcSxIHPJmXMgc8mZdml5ecmZc2kgZGlhbG9xdWR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+Ik9yaWppbmFsxLEgYsmZcnBhIGV0bcmZayDDvMOnw7xuIHRveHVuLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLEsMWfIHByb2ZpbGluaXppIGlzdGlmYWTJmSBlZGlyc2luaXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTeXN0ZW0gVUkgVHVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJEYXhpbCBiYXRhcmV5YSBmYWl6aW5pIGfDtnN0yZlyaW4iPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCBha3RpdmzJmcWfc2luPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJUYWJsZXRpbml6bMmZIGtsYXZpYXR1cmF5YSBiYcSfbGFubWFxIMO8w6fDvG4gaWxrIG9sYXJhcSBCbHVldG9vdGhcJ3UgYWt0aXZsyZnFn2Rpcm3JmWxpc2luaXouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aXZsyZnFn2RpcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IGJpbGRpcmnFn2zJmXJpbsmZIG3DvHJhY2nJmXQgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkJ1IHTJmXRiaXFkyZluIG9sYW4gYsO8dMO8biBiaWxkaXJpxZ9syZlyyZkgbcO8cmFjacmZdCBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tsYW5txLHFnyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkF6IMmZaMmZbWl5ecmZdGxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik5vcm1hbCDJmWjJmW1peXnJmXRsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLDh294IMmZaMmZbWl5ecmZdGxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVMmZY2lsaSDJmWjJmW1peXnJmXRsaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iQnUgYmlsZGlyacWfbMmZcmkgaGXDpyB2YXh0IGfDtnN0yZlybcmZeWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkJpbGRpcmnFn2zJmXIgc2l5YWjEsXPEsW7EsW4gYcWfYcSfxLFzxLFuZGEgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJCdSBiaWxkacWfbMmZcmkgc8mZc3NpeiBnw7ZzdMmZcmluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCaWxkaXJpxZ9syZlyIHNpeWFoxLFzxLFuZGEgeXV4YXLEsWRhIGfDtnN0yZlyaW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkVrcmFuZGEgbsmZesmZciBzYWzEsW4gdsmZIHPJmXNsaSBlZGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJEYWhhIMOnb3ggYXlhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkhhesSxcmTEsXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWwgcsmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkdlY8mZIHLJmW5nbMmZcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IljDvHN1c2kgcsmZbmdsyZlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmFtyZlsdW0gcsmZbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUsmZbmcgbW9kaWZpa2FzaXlhc8SxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iQ8mZbGQgYXlhcmxhciDDtnJ0w7x5w7xuw7wgZ8O2c3TJmXJpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iWMO8c3VzaSBkyZl5acWfaWtsaXlpIGFrdGl2IGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJUyZl0YmlxIGVkaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQXlhcmxhcsSxIHTJmXNkaXEgZWRpbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkLJmXppIHJlbmsgYXlhcmxhcsSxIGJ1IGNpaGF6xLEgeWFyYXJzxLF6IGVkyZkgYmlsyZlyLiBCdSByyZluayBheWFybGFyxLFuxLEgdMmZc2RpcSBldG3JmWsgw7zDp8O8biBPSyBiYXPEsW4sIMmZa3MgaGFsZGEgYnUgYXlhcmxhciAxMCBzYW5pecmZIHNvbnJhIHPEsWbEsXJsYW5hY2FxLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iRW5lcmppICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkVuZXJqaSBRyZluYcmZdGkgZG9sZHVydWxtYSB6YW1hbsSxIMmZbMOnYXRhbiBkZXlpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJFbmVyamkgUcmZbmHJmXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUGVyZm9ybWFuc8SxIGF6YWxkxLFyIHbJmSBhcnhhIGZvbiBkYXRhc8SxbsSxIG3JmWhkdWRsYcWfZMSxcsSxciI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iK3NyK0xhdG4tbGFuZC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYitzcitMYXRuLWxhbmQvc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViYmIwYgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYitzcitMYXRuLWxhbmQvc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gCisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgCisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIAorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyAtLT4KKworPHJlc291cmNlcyB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCisgICAgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgorICAgIDxzdHJpbmcgbmFtZT0idG9hc3Rfcm90YXRpb25fbG9ja2VkIiBtc2dpZD0iNzYwOTY3MzAxMTQzMTU1NjA5MiI+IkVrcmFuIGplIHNhZGEgemFrbGp1xI1hbiB1IHZlcnRpa2Fsbm9tIHBvbG/FvmFqdS4iPC9zdHJpbmc+Cis8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3OWQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYitzcitMYXRuL3N0cmluZ3MueG1sCkBAIC0wLDAgKzEsNDgwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSAKKy8qKgorICogQ29weXJpZ2h0IChjKSAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IAorICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAKKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAKKyAqCisgKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAKKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJhcHBfbGFiZWwiIG1zZ2lkPSI3MTY0OTM3MzQ0ODUwMDA0NDY2Ij4iVUkgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfY2xlYXJfYWxsX2J1dHRvbiIgbXNnaWQ9Ijc3NzQ3MjEzNDQ3MTY3MzE2MDMiPiJPYnJpxaFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9yZWNlbnRfcmVtb3ZlX2l0ZW1fdGl0bGUiIG1zZ2lkPSI2MDI2Mzk1ODY4MTI5ODUyOTY4Ij4iVWtsYW5qYW5qZSBzYSBsaXN0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfcmVjZW50X2luc3BlY3RfaXRlbV90aXRsZSIgbXNnaWQ9Ijc3OTM2MjQ4NjQ1Mjg4MTg1NjkiPiJJbmZvcm1hY2lqZSBvIGFwbGlrYWNpamkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vX3JlY2VudF9hcHBzIiBtc2dpZD0iNzM3NDkwNzg0NTEzMTIwMzE4OSI+Ik5lZGF2bmkgZWtyYW5pIHNlIHBvamF2bGp1anUgb3ZkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWNjZXNzaWJpbGl0eV9kaXNtaXNzX3JlY2VudHMiIG1zZ2lkPSI0NTc2MDc2MDc1MjI2NTQwMTA1Ij4iT2RiYWNpIG5lZGF2bmUgYXBsaWthY2lqZSI8L3N0cmluZz4KKyAgICA8cGx1cmFscyBuYW1lPSJzdGF0dXNfYmFyX2FjY2Vzc2liaWxpdHlfcmVjZW50X2FwcHMiIGZvcm1hdHRlZD0iZmFsc2UiIG1zZ2lkPSI5MTM4NTM1OTA3ODAyMjM4NzU5Ij4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPiVkIGVrcmFuIHUgUHJlZ2xlZHU8L2l0ZW0+CisgICAgICA8aXRlbSBxdWFudGl0eT0iZmV3Ij4lZCBla3JhbmEgdSBQcmVnbGVkdTwvaXRlbT4KKyAgICAgIDxpdGVtIHF1YW50aXR5PSJvdGhlciI+JWQgZWtyYW5hIHUgUHJlZ2xlZHU8L2l0ZW0+CisgICAgPC9wbHVyYWxzPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+Ik5lbWEgb2JhdmXFoXRlbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJUZWt1xIdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRzX3RpdGxlIiBtc2dpZD0iNjU5NDc2NzQzODU3NzU5MzE3MiI+Ik9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iNjQ1NjM4NTkyNzQwOTc0MjQzNyI+Ik5pdm8gbmFwdW5qZW5vc3RpIGJhdGVyaWplIGplIG5pemFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXQiIG1zZ2lkPSIyOTAwOTQwNTExMjAxMzgwNzc1Ij4iSm/FoSA8eGxpZmY6ZyBpZD0iUEVSQ0VOVEFHRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXRfc2F2ZXJfc3RhcnRlZCIgbXNnaWQ9IjY4NTkyMzU1ODQwMzUzMzg4MzMiPiJKb8WhIDx4bGlmZjpnIGlkPSJQRVJDRU5UQUdFIj4lczwveGxpZmY6Zz4uIFVrbGp1xI1lbmEgamUgxaF0ZWRuamEgYmF0ZXJpamUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF9jaGFyZ2VyIiBtc2dpZD0iNDU0OTEwNTk5Njc0MDUyMjUyMyI+IlB1bmplbmplIHByZWtvIFVTQi1hIG5pamUgcG9kcsW+YW5vLlxuS29yaXN0aXRlIHNhbW8gcHJpbG/FvmVuaSBwdW5qYcSNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlcl90aXRsZSIgbXNnaWQ9IjM1MTU3NDAzODI1NzI3OTg0NjAiPiJQdW5qZW5qZSBwcmVrbyBVU0ItYSBuaWplIHBvZHLFvmFuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXJfdGV4dCIgbXNnaWQ9IjU0NzQ5OTcyODc5NTM4OTI3MTAiPiJLb3Jpc3RpdGUgc2FtbyBwdW5qYcSNIGtvamkgc3RlIGRvYmlsaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI0NTUzNjAwMjg3NjM5MTk4MTExIj4iUG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9jb25maXJtYXRpb25fdGl0bGUiIG1zZ2lkPSI1Mjk5NTg1NDMzMDUwMzYxNjM0Ij4ixb1lbGl0ZSBsaSBkYSB1a2xqdcSNaXRlIMWhdGVkbmp1IGJhdGVyaWplPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNzUwNzk2ODQzMDQ0NzkzMDI1NyI+IlVrbGp1xI1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9zdGFydF9hY3Rpb24iIG1zZ2lkPSI1NTc2Njk3NDUxNjc3NDg2MzIwIj4iVWtsanXEjWkgxaF0ZWRuanUgYmF0ZXJpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiJQb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+IkF1dG9tYXRza28gcm90aXJhbmplIGVrcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+IlVHQVNJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX2JyaWdodG5lc3NfbGFiZWwiIG1zZ2lkPSI1MTE0NTM2MTQ5NjIzMjQ2NzQiPiJBVVRPTS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX25vdGlmaWNhdGlvbnMiIG1zZ2lkPSIzOTcxNDYxNzYyODA5MDUxMzciPiJPYmF2ZcWhdGVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibHVldG9vdGhfdGV0aGVyZWQiIG1zZ2lkPSI3MDk0MTAxNjEyMTYxMTMzMjY3Ij4iVmV6YSBwcmVrbyBCbHVldG9vdGgtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfaW5wdXRfbWV0aG9kX3NldHRpbmdzX2NvbmZpZ3VyZV9pbnB1dF9tZXRob2RzIiBtc2dpZD0iMzUwNDI5MjQ3MTUxMjMxNzgyNyI+IlBvZGVzaSBtZXRvZGUgdW5vc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3VzZV9waHlzaWNhbF9rZXlib2FyZCIgbXNnaWQ9Ijc1NTE5MDMwODQ0MTYwNTc4MTAiPiJGaXppxI1rYSB0YXN0YXR1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGV2aWNlX3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iODM0Njk4MDAxMjcxNTYyMDU3Ij4ixb1lbGl0ZSBsaSBkYSBkb3p2b2xpdGUgYXBsaWthY2lqaSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+IGRhIHByaXN0dXBhIFVTQiB1cmXEkWFqdT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X3Blcm1pc3Npb25fcHJvbXB0IiBtc2dpZD0iNTE3MTc3NTQxMTE3ODg2NTc1MCI+IsW9ZWxpdGUgbGkgZGEgZG96dm9saXRlIGFwbGlrYWNpamkgPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiBkYSBwcmlzdHVwYSBVU0IgcG9tb8SHbm9tIHVyZcSRYWp1PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZXZpY2VfY29uZmlybV9wcm9tcHQiIG1zZ2lkPSI1MTYxMjA1MjU4NjM1MjUzMjA2Ij4ixb1lbGl0ZSBsaSBkYSBzZSBvdHZvcmkgPHhsaWZmOmcgaWQ9IkFDVElWSVRZIj4lMSRzPC94bGlmZjpnPiBrYWRhIHNlIHByaWtsanXEjWkgb3ZhaiBVU0IgdXJlxJFhaj8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfYWNjZXNzb3J5X2NvbmZpcm1fcHJvbXB0IiBtc2dpZD0iMzgwODk4NDkzMTgzMDIyOTg4OCI+IsW9ZWxpdGUgbGkgZGEgc2Ugb3R2b3JpIDx4bGlmZjpnIGlkPSJBQ1RJVklUWSI+JTEkczwveGxpZmY6Zz4ga2FkYSBzZSBwcmlrbGp1xI1pIG92YWogVVNCIGRvZGF0YWs/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2FjY2Vzc29yeV91cmlfcHJvbXB0IiBtc2dpZD0iNTEzNDUwNjIxNDEzNzMzMzQzIj4iSW5zdGFsaXJhbmUgYXBsaWthY2lqZSBuZSBmdW5rY2lvbmnFoXUgc2Egb3ZpbSBVU0IgcG9tb8SHbmltIHVyZcSRYWplbS4gU2F6bmFqdGUgdmnFoWUgbyBuamVtdSBuYSBhZHJlc2kgPHhsaWZmOmcgaWQ9IlVSTCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0aXRsZV91c2JfYWNjZXNzb3J5IiBtc2dpZD0iNDk2NjI2NTI2MzQ2NTE4MTM3MiI+IlVTQiBwb21vxIduaSB1cmXEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGFiZWxfdmlldyIgbXNnaWQ9IjYzMDQ1NjU1NTMyMTgxOTI5OTAiPiJQcmlrYcW+aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFsd2F5c191c2VfZGV2aWNlIiBtc2dpZD0iMTQ1MDI4NzQzNzAxNzMxNTkwNiI+IktvcmlzdGkgcG9kcmF6dW1ldmFubyB6YSBvdmFqIFVTQiB1cmXEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWx3YXlzX3VzZV9hY2Nlc3NvcnkiIG1zZ2lkPSIxMjEwOTU0NTc2OTc5NjIxNTk2Ij4iS29yaXN0aSBwb2RyYXp1bWV2YW5vIHphIG92YWogVVNCIGRvZGF0YWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX3RpdGxlIiBtc2dpZD0iNDUxMzkxODM5MzM4NzE0MTk0OSI+IsW9ZWxpdGUgbGkgZGEgZG96dm9saXRlIG90a2xhbmphbmplIFVTQiBncmXFoWFrYT8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX21lc3NhZ2UiIG1zZ2lkPSIyMjIwMTQzODU1OTEyMzc2NDk2Ij4iRGlnaXRhbG5pIG90aXNhayBSU0Ega2xqdcSNYSBvdm9nIHJhxI11bmFyYSBqZTpcbjx4bGlmZjpnIGlkPSJGSU5HRVJQUklOVCI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfZGVidWdnaW5nX2Fsd2F5cyIgbXNnaWQ9IjMwMzMzNTQ5NjcwNTg2MzA3MCI+IlV2ZWsgZG96dm9saSBzYSBvdm9nIHJhxI11bmFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzYl9kZWJ1Z2dpbmdfc2Vjb25kYXJ5X3VzZXJfdGl0bGUiIG1zZ2lkPSI2MzUzODA4NzIxNzYxMjIwNDIxIj4iT3RrbGFuamFuamUgZ3JlxaFha2EgbmEgVVNCLXUgbmlqZSBkb3p2b2xqZW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNiX2RlYnVnZ2luZ19zZWNvbmRhcnlfdXNlcl9tZXNzYWdlIiBtc2dpZD0iODU3MjIyODEzNzgzMzAyMDE5NiI+IktvcmlzbmlrIGtvamkgamUgdHJlbnV0bm8gcHJpamF2bGplbiBuYSBvdmFqIHVyZcSRYWogbmUgbW/FvmUgZGEgdWtsanXEjWkgb3RrbGFuamFuamUgZ3JlxaFha2EgbmEgVVNCLXUuIERhIGJpc3RlIGtvcmlzdGlsaSBvdnUgZnVua2NpanUsIHByZWJhY2l0ZSBuYSBrb3Jpc25pa2Egc2EgYWRtaW5pc3RyYXRvcnNraW0gcHJhdmltYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb21wYXRfbW9kZV9vbiIgbXNnaWQ9IjY2MjM4MzkyNDQ4NDA2MzgyMTMiPiJadW1pcmFqIG5hIGNlbG9tIGVrcmFudSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbXBhdF9tb2RlX29mZiIgbXNnaWQ9IjQ0MzQ0Njc1NzI0NjEzMjc4OTgiPiJSYXp2dWNpIG5hIGNlbyBla3JhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RpY2tlciIgbXNnaWQ9Ijc0MDM2NTI4OTQwNTY2OTM1MTUiPiLEjHV2YW5qZSBzbmlta2EgZWtyYW5hLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuc2hvdF9zYXZpbmdfdGl0bGUiIG1zZ2lkPSI4MjQyMjgyMTQ0NTM1NTU1Njk3Ij4ixIx1dmFuamUgc25pbWthIGVrcmFuYS4uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3Rfc2F2aW5nX3RleHQiIG1zZ2lkPSIyNDE5NzE4NDQzNDExNzM4ODE4Ij4iU25pbWFrIGVrcmFuYSBzZSDEjXV2YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RpdGxlIiBtc2dpZD0iNjQ2MTg2NTk2MDk2MTQxNDk2MSI+IlNuaW1hayBla3JhbmEgamUgbmFwcmF2bGplbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5zaG90X3NhdmVkX3RleHQiIG1zZ2lkPSIxMTUyODM5NjQ3Njc3NTU4ODE1Ij4iRG9kaXJuaXRlIGRhIGJpc3RlIHZpZGVsaSBzbmltYWsgZWtyYW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RpdGxlIiBtc2dpZD0iNzA1NzgxMTE2NzQ2OTIyNzcxIj4iTmlqZSBtb2d1xIdlIG5hcHJhdml0aSBzbmltYWsgZWtyYW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbnNob3RfZmFpbGVkX3RleHQiIG1zZ2lkPSIxMjYwMjAzMDU4NjYxMzM3Mjc0Ij4iTmlqZSBtb2d1xIdlIHNuaW1pdGkgZWtyYW4gemJvZyBuZWRvdm9sam5lIG1lbW9yaWplIGlsaSB0byBuZSBkb3p2b2xqYXZhIGFwbGlrYWNpamEgaWxpIG9yZ2FuaXphY2lqYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJPcGNpamUgVVNCIHByZW5vc2EgZGF0b3Rla2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiJQcmlrbGp1xI1pIGthbyBtZWRpamEgcGxlamVyIChNVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlX3B0cF9idXR0b25fdGl0bGUiIG1zZ2lkPSI3NTE3MTI3NTQwMzAxNjI1NzUxIj4iUHJpa2xqdcSNaSBrYW8ga2FtZXJ1IChQVFApIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiJJbnN0YWxpcmFqIEFuZHJvaWQgcHJlYmFjaXZhbmplIGRhdG90ZWthIHphIE1hYyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+Ik5hemFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ob21lIiBtc2dpZD0iODIxNzIxNjA3NDg5NTM3NzY0MSI+IlBvxI1ldG5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tZW51IiBtc2dpZD0iMzE2ODM5MzAzMzI0Njk1OTQ5Ij4iTWVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50IiBtc2dpZD0iNTIwODYwODU2Njc5MzYwNzYyNiI+IlByZWdsZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NlYXJjaF9saWdodCIgbXNnaWQ9IjExMDM4Njc1OTYzMzAyNzE4NDgiPiJQcmV0cmHFvml0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FtZXJhX2J1dHRvbiIgbXNnaWQ9IjgwNjQ2NzE1ODI4MjAzNTgxNTIiPiJLYW1lcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX2J1dHRvbiIgbXNnaWQ9IjY3MzgxMTI1ODk1Mzg1NjM1NzQiPiJUZWxlZm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV92b2ljZV9hc3Npc3RfYnV0dG9uIiBtc2dpZD0iNDg3NjExMDgzODg0ODUyOTY1Ij4iR2xhc292bmEgcG9tb8SHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV91bmxvY2tfYnV0dG9uIiBtc2dpZD0iMTI4MTU4NDU0NjMxMTE4ODI4Ij4iT3RrbGp1xI1hanRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV91bmxvY2tfYnV0dG9uX2ZpbmdlcnByaW50IiBtc2dpZD0iODIxNDEyNTYyMzQ5MzkyMzc1MSI+IkR1Z21lIHphIG90a2xqdcSNYXZhbmplLCDEjWVrYSBzZSBuYSBvdGlzYWsgcHJzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3VubG9ja193aXRob3V0X2ZpbmdlcnByaW50IiBtc2dpZD0iNzU0MTcwNTU3NTE4MzY5NDQ0NiI+Ik90a2xqdcSNYWogYmV6IGtvcmnFocSHZW5qYSBvdGlza2EgcHJzdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1bmxvY2tfbGFiZWwiIG1zZ2lkPSI4Nzc5NzEyMzU4MDQxMDI5NDM5Ij4ib3RrbGp1xI1haiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InBob25lX2xhYmVsIiBtc2dpZD0iMjMyMDA3NDE0MDIwNTMzMTcwOCI+Im90dm9yaSB0ZWxlZm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9pY2VfYXNzaXN0X2xhYmVsIiBtc2dpZD0iMzk1Njg1NDM3ODMxMDAxOTg1NCI+Im90dm9yaSBnbGFzb3ZudSBwb21vxIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjYW1lcmFfbGFiZWwiIG1zZ2lkPSI3MjYxMTA3OTU2MDU0ODM2OTYxIj4ib3R2b3JpIGthbWVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfY2FwdGlvbl9yZXNpemUiIG1zZ2lkPSIzNTE3MDU2NDcxNzc0OTU4MjAwIj4iSXphYmVyaSBub3ZpIHJhc3BvcmVkIHphZGF0YWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FuY2VsIiBtc2dpZD0iNjQ0MjU2MDU3MTI1OTkzNTEzMCI+Ik90a2HFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9idXR0b24iIG1zZ2lkPSI4NDYxMTE1MzE4NzQyMzUwNjk5Ij4iRHVnbWUgWnVtIGtvbXBhdGliaWxub3N0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NvbXBhdGliaWxpdHlfem9vbV9leGFtcGxlIiBtc2dpZD0iNDIyMDY4NzI5NDU2NDk0NTc4MCI+Ilp1bWlyYW5qZSBzYSBtYW5qZWcgbmEgdmXEh2kgZWtyYW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iMjcwNzAyNzYzMzI0Mjk4MzM3MCI+IkJsdWV0b290aCBqZSBwcmlrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI3NDE2NjQ4NjY5OTc2ODcwMTc1Ij4iQmx1ZXRvb3RoIGplIGlza2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19iYXR0ZXJ5IiBtc2dpZD0iMzU4MzQzMDIyMzUyODIwOTQ2Ij4iTmVtYSBiYXRlcmlqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfb25lX2JhciIgbXNnaWQ9Ijc3NzQ4ODc3MjE4OTEwNTc1MjMiPiJCYXRlcmlqYSBvZCBqZWRuZSBjcnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmF0dGVyeV90d29fYmFycyIgbXNnaWQ9Ijg1MDA2NTA0Mzg3MzUwMDk5NzMiPiJCYXRlcmlqYSBvZCBkdmUgY3J0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfdGhyZWVfYmFycyIgbXNnaWQ9IjIzMDI5ODMzMzA4NjUwNDA0NDYiPiJCYXRlcmlqYSBvZCB0cmkgY3J0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JhdHRlcnlfZnVsbCIgbXNnaWQ9Ijg5MDkxMjI0MDE3MjAxNTg1ODIiPiJCYXRlcmlqYSBqZSBwdW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm9fcGhvbmUiIG1zZ2lkPSI0ODk0NzA4OTM3MDUyNjExMjgxIj4iTmVtYSB0ZWxlZm9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX29uZV9iYXIiIG1zZ2lkPSI2ODc2OTkyNzgxMzI2NjQxMTUiPiJTaWduYWwgdGVsZWZvbmEgaW1hIGplZG51IGNydHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90d29fYmFycyIgbXNnaWQ9IjgzODQ5MDUzODI4MDQ4MTUyMDEiPiJTaWduYWwgdGVsZWZvbmEgb2QgZHZlIGNydGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9waG9uZV90aHJlZV9iYXJzIiBtc2dpZD0iODUyMTkwNDg0MzkxOTk3MTg4NSI+IlNpZ25hbCB0ZWxlZm9uYSBvZCB0cmkgY3J0ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Bob25lX3NpZ25hbF9mdWxsIiBtc2dpZD0iNjQ3MTgzNDg2ODU4MDc1Nzg5OCI+IlNpZ25hbCB0ZWxlZm9uYSBqZSBwdW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19kYXRhIiBtc2dpZD0iNDc5MTk2NjI5NTA5Njg2NzU1NSI+Ik5lbWEgcG9kYXRha2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX29uZV9iYXIiIG1zZ2lkPSIxNDE1NjI1ODMzMjM4MjczNjI4Ij4iU2lnbmFsIHphIHBvZGF0a2UgaW1hIGplZG51IGNydHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX3R3b19iYXJzIiBtc2dpZD0iNjE2NjAxODQ5MjM2MDQzMjA5MSI+IlNpZ25hbCB6YSBwb2RhdGtlIG9kIGR2ZSBjcnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV90aHJlZV9iYXJzIiBtc2dpZD0iOTE2NzY3MDQ1MjM5NTAzODUyMCI+IlNpZ25hbCB6YSBwb2RhdGtlIG9kIHRyaSBjcnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3MDgzODQ2MDgxMjQ1MTkzNjkiPiJTaWduYWwgemEgcG9kYXRrZSBqZSBuYWpqYcSNaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpZmlfbmFtZSIgbXNnaWQ9IjcyMDIxNTEzNjUxNzExNDg1MDEiPiJQb3ZlemFuaSBzdGUgc2EgPHhsaWZmOmcgaWQ9IldJRkkiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF9uYW1lIiBtc2dpZD0iODQ0MTUxNzE0NjU4NTUzMTY3NiI+IlBvdmV6YW5pIHN0ZSBzYSA8eGxpZmY6ZyBpZD0iQkxVRVRPT1RIIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub193aW1heCIgbXNnaWQ9IjQzMjkxODAxMjk3Mjc2MzAzNjgiPiJOZW1hIFdpTUFYIHNpZ25hbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9vbmVfYmFyIiBtc2dpZD0iNDE3MDk5NDI5OTAxMTg2MzY0OCI+IldpTUFYIHNpZ25hbCBpbWEgamVkbnUgY3J0dS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dpbWF4X3R3b19iYXJzIiBtc2dpZD0iOTE3NjIzNjg1ODMzNjUwMjI4OCI+IldpTUFYIHNpZ25hbCBpbWEgZHZlIGNydGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF90aHJlZV9iYXJzIiBtc2dpZD0iNjExNjU1MTYzNjc1MjEwMzkyNyI+IldpTUFYIHNpZ25hbCBpbWEgdHJpIGNydGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93aW1heF9zaWduYWxfZnVsbCIgbXNnaWQ9IjI3NjgwODk5ODY3OTU1Nzk1NTgiPiJXaU1BWCBzaWduYWwgamUgbmFqamHEjWkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ldGhlcm5ldF9kaXNjb25uZWN0ZWQiIG1zZ2lkPSI1ODk2MDU5MzAzMzc3NTg5NDY5Ij4iVmV6YSBzYSBldGVybmV0b20gamUgcHJla2ludXRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZXRoZXJuZXRfY29ubmVjdGVkIiBtc2dpZD0iMjY5MjEzMDMxMzA2OTE4MjYzNiI+IkV0ZXJuZXQgamUgcG92ZXphbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpZ25hbCIgbXNnaWQ9IjcwNjQ2NDUzMjA3ODI1ODUxNjciPiJOZW1hIHNpZ25hbGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RfY29ubmVjdGVkIiBtc2dpZD0iNjM5NTMyNjI3NjIxMzQwMjg4MyI+Ik5pamUgcG92ZXphbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV96ZXJvX2JhcnMiIG1zZ2lkPSIzODA2MDYwMjI0NDY3MDI3ODg3Ij4iTmlqZWRuYSBjcnRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfb25lX2JhciIgbXNnaWQ9IjE2ODU3MzAxMTMxOTIwODE4OTUiPiJKZWRuYSBjcnRhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdHdvX2JhcnMiIG1zZ2lkPSI2NDM3MzYzNjQ4Mzg1MjA2Njc5Ij4iRHZlIGNydGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90aHJlZV9iYXJzIiBtc2dpZD0iMjY0ODI0MTQxNTExOTM5NjY0OCI+IlRyaSBjcnRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfc2lnbmFsX2Z1bGwiIG1zZ2lkPSI5MTIyOTIyODg2NTE5Njc2ODM5Ij4iU2lnbmFsIGplIG5hamphxI1pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vbiIgbXNnaWQ9IjIzODUyNTQ2OTM2MjQzNDUyNjUiPiJVa2xqdcSNZW5vLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19vZmYiIG1zZ2lkPSI2NDc1NTA4MTU3Nzg2ODUzMTU3Ij4iSXNrbGp1xI1lbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nvbm5lY3RlZCIgbXNnaWQ9IjgzNjYyNTY2OTM3MTk0OTk2NjUiPiJQb3ZlemFubyBqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2NfY29ubmVjdGluZyIgbXNnaWQ9IjM4MTI5MjQ1MjAzMTYyODAxNDkiPiJQb3Zleml2YW5qZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9ncHJzIiBtc2dpZD0iMTYwNjQ3NzIyNDQ4Njc0Nzc1MSI+IkdQUlMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl8xeCIgbXNnaWQ9Ijk5NDEzMzQ2ODEyMDI0NDAxOCI+IjEgWCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uX2hzcGEiIG1zZ2lkPSIyMDMyMzI4ODU1NDYyNjQ1MTk4Ij4iSFNQQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGF0YV9jb25uZWN0aW9uXzNnIiBtc2dpZD0iODYyODU2MjMwNTAwMzU2ODI2MCI+IjNHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fMy41ZyIgbXNnaWQ9Ijg2NjQ4NDU2MDk5ODE2OTIwMDEiPiIzLjVHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fNGciIG1zZ2lkPSI3NzQxMDAwNzUwNjMwMDg5NjEyIj4iNEciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9sdGUiIG1zZ2lkPSI1NDEzNDY4ODA4NjM3NTQwNjU4Ij4iTFRFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fY2RtYSIgbXNnaWQ9IjYxMzI2NDgxOTM5Nzg4MjMwMjMiPiJDRE1BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kYXRhX2Nvbm5lY3Rpb25fcm9hbWluZyIgbXNnaWQ9IjU5NzczNjIzMzM0NjY1NTYwOTQiPiJSb21pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl9lZGdlIiBtc2dpZD0iNDQ3NzQ1NzA1MTYzMTk3OTI3OCI+IkVkZ2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2RhdGFfY29ubmVjdGlvbl93aWZpIiBtc2dpZD0iMjMyNDQ5Njc1NjU5MDY0NTIyMSI+IldpLUZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW0iIG1zZ2lkPSI4Mjc0MDE3MTE4NDcyNDU1MTU1Ij4iTmVtYSBTSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JsdWV0b290aF90ZXRoZXIiIG1zZ2lkPSI0MTAyNzg0NDk4MTQwMjcxOTY5Ij4iQmx1ZXRvb3RoIHByaXZleml2YW5qZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2FpcnBsYW5lX21vZGUiIG1zZ2lkPSI4MzQ3NDg5OTk3OTA3NjMwOTIiPiJSZcW+aW0gcmFkYSB1IGF2aW9udS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X25vX3NpbXMiIG1zZ2lkPSIzOTU3OTk3MDE4MzI0OTk1NzgxIj4iTmVtYSBTSU0ga2FydGljZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2NhcnJpZXJfbmV0d29ya19jaGFuZ2VfbW9kZSIgbXNnaWQ9IjQwMTczMDE1ODA0NDEzMDQzMDUiPiJQcm9tZW5hIG1yZcW+ZSBtb2JpbG5vZyBvcGVyYXRlcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+IkJhdGVyaWphIGplIG5hIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBwb3N0by4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+IlNpc3RlbXNrYSBwb2RlxaFhdmFuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiJPYmF2ZcWhdGVuamEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+Ik9icmnFoWkgb2JhdmXFoXRlbmplLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZ3BzX2VuYWJsZWQiIG1zZ2lkPSIzNTExNDY5NDk5MjQwMTIzMDE5Ij4iR1BTIGplIG9tb2d1xIdlbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2dwc19hY3F1aXJpbmciIG1zZ2lkPSI4OTU5MzMzMzUxMDU4OTY3MTU4Ij4iVcSNaXRhdmFuamUgR1BTLWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCIgbXNnaWQ9IjQ2MTMyMDAzNjUzNzk0MjY1NjEiPiJUZWxlVHlwZXdyaXRlciBqZSBvbW9ndcSHZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfdmlicmF0ZSIgbXNnaWQ9IjY2NjU4NTM2MzM2NDE1NTA1NSI+IlZpYnJhY2lqYSB6dm9uYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iTmXEjXVqbm8genZvbm8uIjwvc3RyaW5nPgorICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CisgICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IlJlxb5pbSByYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJPZGJhY2l0ZSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IkFwbGlrYWNpamEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGplIG9kYmHEjWVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJTdmUgbmVkYXZubyBrb3JpxaHEh2VuZSBhcGxpa2FjaWplIHN1IG9kYmHEjWVuZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9sYXVuY2hlZCIgbXNnaWQ9Ijc2MTYwMzk4OTIzODI1MjUyMDMiPiJQb2tyZcSHZW1vIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfdGFza19oZWFkZXIiIG1zZ2lkPSIxNDM3MTgzNTQwOTI0NTM1NDU3Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JTEkczwveGxpZmY6Zz4gPHhsaWZmOmcgaWQ9IkFDVElWSVRZX0xBQkVMIj4lMiRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbm90aWZpY2F0aW9uX2Rpc21pc3NlZCIgbXNnaWQ9Ijg1NDIxMTM4NzE4NjMwNjkyNyI+Ik9iYXZlxaF0ZW5qZSBqZSBvZGJhxI1lbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX25vdGlmaWNhdGlvbl9zaGFkZSIgbXNnaWQ9IjQ2OTAyNzQ4NDQ0NDc1MDQyMDgiPiJQcm96b3Igc2Egb2JhdmXFoXRlbmppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3F1aWNrX3NldHRpbmdzIiBtc2dpZD0iNjE4NjM3ODQxMTU4MjQzNzA0NiI+IkJyemEgcG9kZcWhYXZhbmphLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfZGVzY19sb2NrX3NjcmVlbiIgbXNnaWQ9IjU2MjUxNDM3MTM2MTE3NTkxNjQiPiJaYWtsanXEjWFuaSBla3Jhbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Rlc2Nfc2V0dGluZ3MiIG1zZ2lkPSIzNDE3ODg0MjQxNzUxNDM0NTIxIj4iUG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX3JlY2VudF9hcHBzIiBtc2dpZD0iNDg3NjkwMDk4NjY2MTgxOTc4OCI+IlByZWdsZWQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9kZXNjX2Nsb3NlIiBtc2dpZD0iNzQ3OTc1NTM2NDk2Mjc2NjcyOSI+IlphdHZvcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3VzZXIiIG1zZ2lkPSIxMTA0ODQ2Njk5ODY5NDc2ODU1Ij4iS29yaXNuaWs6IDx4bGlmZjpnIGlkPSJVU0VSIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193aWZpIiBtc2dpZD0iNTUxODIxMDIxMzExODE4MTY5MiI+Ijx4bGlmZjpnIGlkPSJTSUdOQUwiPiUxJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaV9jaGFuZ2VkX29mZiIgbXNnaWQ9Ijg3MTY0ODQ0NjA4OTc4MTk0MDAiPiJXaS1GaSBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd2lmaV9jaGFuZ2VkX29uIiBtc2dpZD0iNjQ0MDExNzE3MDc4OTUyODYyMiI+IldpLUZpIGplIHVrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX21vYmlsZSIgbXNnaWQ9IjQ4NzY4MDY1NjQwODYyNDEzNDEiPiJNb2JpbG5hIG1yZcW+YTogPHhsaWZmOmcgaWQ9IlNJR05BTCI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJUWVBFIj4lMiRzPC94bGlmZjpnPi4gPHhsaWZmOmcgaWQ9Ik5FVFdPUksiPiUzJHM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmF0dGVyeSIgbXNnaWQ9IjE0ODA5MzE1ODMzODE0MDg5NzIiPiJCYXRlcmlqYTogPHhsaWZmOmcgaWQ9IlNUQVRFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19haXJwbGFuZV9vZmYiIG1zZ2lkPSI3Nzg2MzI5MzYwMDU2NjM0NDEyIj4iUmXFvmltIHJhZGEgdSBhdmlvbnUgamUgaXNrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lX29uIiBtc2dpZD0iNjQwNjE0MTQ2OTE1NzU5OTI5NiI+IlJlxb5pbSByYWRhIHUgYXZpb251IGplIHVrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FpcnBsYW5lX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNjY4NDYzMDc4MTg4NTA2NjQiPiJSZcW+aW0gcmFkYSB1IGF2aW9udSBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYWlycGxhbmVfY2hhbmdlZF9vbiIgbXNnaWQ9Ijg5ODMwMDU2MDM1MDUwODc3MjgiPiJSZcW+aW0gcmFkYSB1IGF2aW9udSBqZSB1a2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19kbmRfcHJpb3JpdHlfb24iIG1zZ2lkPSIxNDQ4NDAyMjk3MjIxMjQ5MzU1Ij4iUG9kZcWhYXZhbmplIE5lIHV6bmVtaXJhdmFqIGplIHVrbGp1xI1lbm8sIHNhbW8gcHJpb3JpdGV0bmkgcHJla2lkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2RuZF9ub25lX29uIiBtc2dpZD0iNjg4MjU4MjEzMjY2MjYxMzUzNyI+IlBvZGXFoWF2YW5qZSBOZSB1em5lbWlyYXZhaiBqZSB1a2xqdcSNZW5vLCBwb3RwdW5hIHRpxaFpbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19kbmRfYWxhcm1zX29uIiBtc2dpZD0iOTE1MjgzNDg0NTU4NzU1NDE1NyI+IlBvZGXFoWF2YW5qZSBOZSB1em5lbWlyYXZhaiBqZSB1a2xqdcSNZW5vLCBzYW1vIGFsYXJtaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2RuZF9vZmYiIG1zZ2lkPSIyMzcxODMyNjAzNzUzNzM4NTgxIj4iUG9kZcWhYXZhbmplIE5lIHV6bmVtaXJhdmFqIGplIGlza2xqdcSNZW5vLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZG5kX2NoYW5nZWRfb2ZmIiBtc2dpZD0iODk4MTA3NTkzNDUzMDIyOTM1Ij4iUG9kZcWhYXZhbmplIE5lIHV6bmVtaXJhdmFqIGplIGlza2xqdcSNZW5vLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZG5kX2NoYW5nZWRfb24iIG1zZ2lkPSI0NDgzNzgwODU2NjEzNTYxMDM5Ij4iUG9kZcWhYXZhbmplIE5lIHV6bmVtaXJhdmFqIGplIHVrbGp1xI1lbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmIiBtc2dpZD0iMjEzMzYzMTM3MjM3MjA2NDMzOSI+IkJsdWV0b290aCBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX29uIiBtc2dpZD0iNzY4MTk5OTE2NjIxNjYyMTgzOCI+IkJsdWV0b290aCBqZSB1a2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGhfY29ubmVjdGluZyIgbXNnaWQ9IjY5NTMyNDI5NjY2ODUzNDM4NTUiPiJCbHVldG9vdGggc2UgcG92ZXp1amUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ibHVldG9vdGhfY29ubmVjdGVkIiBtc2dpZD0iNDMwNjYzNzc5MzYxNDU3MzY1OSI+IkJsdWV0b290aCBqZSBwb3ZlemFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2NoYW5nZWRfb2ZmIiBtc2dpZD0iMjczMDAwMzc2MzQ4MDkzNDUyOSI+IkJsdWV0b290aCBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2NoYW5nZWRfb24iIG1zZ2lkPSI4NzIyMzUxNzk4NzYzMjA2NTc3Ij4iQmx1ZXRvb3RoIGplIHVrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZiIgbXNnaWQ9IjUxMTkwODA1NTY5NzYxMTU1MjAiPiJJenZlxaF0YXZhbmplIG8gbG9rYWNpamkgamUgaXNrbGp1xI1lbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19sb2NhdGlvbl9vbiIgbXNnaWQ9IjU4MDk5MzcwOTY1OTAxMDIwMzYiPiJJenZlxaF0YXZhbmplIG8gbG9rYWNpamkgamUgdWtsanXEjWVuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2NoYW5nZWRfb2ZmIiBtc2dpZD0iODUyNjg0NTU3MTUwMzM4NzM3NiI+Ikl6dmXFoXRhdmFuamUgbyBsb2thY2lqaSBqZSBpc2tsanXEjWVuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xvY2F0aW9uX2NoYW5nZWRfb24iIG1zZ2lkPSIzMzk0MDMwNTMwNzkzMzg0NjgiPiJJenZlxaF0YXZhbmplIG8gbG9rYWNpamkgamUgdWtsanXEjWVuby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2FsYXJtIiBtc2dpZD0iMzk1OTkwODk3Mjg5NzI5NTY2MCI+IkFsYXJtIGplIHBvZGXFoWVuIHphIDx4bGlmZjpnIGlkPSJUSU1FIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19jbG9zZSIgbXNnaWQ9IjMxMTU4NDc3OTQ2OTI1MTYzMDYiPiJaYXR2b3JpdGUgdGFibHUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19tb3JlX3RpbWUiIG1zZ2lkPSIzNjU5Mjc0OTM1MzU2MTk3NzA4Ij4iVmnFoWUgdnJlbWVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2xlc3NfdGltZSIgbXNnaWQ9IjI0MDQ3Mjg3NDYyOTM1MTU2MjMiPiJNYW5qZSB2cmVtZW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZmxhc2hsaWdodF9vZmYiIG1zZ2lkPSI0OTM2NDMyMDAwMDY5Nzg2OTg4Ij4iQmF0ZXJpanNrYSBsYW1wYSBqZSBpc2tsanXEjWVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2ZsYXNobGlnaHRfb24iIG1zZ2lkPSIyMDAzNDc5MzIwMDA3ODQxMDc3Ij4iQmF0ZXJpanNrYSBsYW1wYSBqZSB1a2xqdcSNZW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZmxhc2hsaWdodF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjMzMDM3MDE3ODY3NjgyMjQzMDQiPiJCYXRlcmlqc2thIGxhbXBhIGplIGlza2xqdcSNZW5hLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZmxhc2hsaWdodF9jaGFuZ2VkX29uIiBtc2dpZD0iNjUzMTc5MzMwMTUzMzg5NDY4NiI+IkJhdGVyaWpza2EgbGFtcGEgamUgdWtsanXEjWVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2NvbG9yX2ludmVyc2lvbl9jaGFuZ2VkX29mZiIgbXNnaWQ9IjQ0MDY1NzcyMTMyOTAxNzM5MTEiPiJJbnZlcnppamEgYm9qYSBqZSBpc2tsanXEjWVuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2NvbG9yX2ludmVyc2lvbl9jaGFuZ2VkX29uIiBtc2dpZD0iNjg5NzQ2MjMyMDE4NDkxMTEyNiI+IkludmVyemlqYSBib2phIGplIHVrbGp1xI1lbmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik1vYmlsbmkgaG90c3BvdCBqZSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsbmkgaG90c3BvdCBqZSB1a2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iUHJlYmFjaXZhbmplIGVrcmFuYSBqZSB6YXVzdGF2bGplbm8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IlJlxb5pbSByYWRhIGplIGlza2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iUmXFvmltIHJhZGEgamUgdWtsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IlJlxb5pbSByYWRhIGplIGlza2xqdcSNZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IlJlxb5pbSByYWRhIGplIHVrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iT3N2ZXRsamVub3N0IGVrcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJH4oCTM0cgcG9kYWNpIHN1IHBhdXppcmFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIHBvZGFjaSBzdSBwYXV6aXJhbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ19tb2JpbGVfdGl0bGUiIG1zZ2lkPSI0NjUxMDAxMjkwOTQ3MzE4OTMxIj4iTW9iaWxuaSBwb2RhY2kgc3UgcGF1emlyYW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfdGl0bGUiIG1zZ2lkPSIzOTMyNDM3MjMyMTk5NjcxOTY3Ij4iUG9kYWNpIHN1IHBhdXppcmFuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nIiBtc2dpZD0iODQ1MzI0Mjg4ODkwMzc3MjUyNCI+Ilpib2cgdG9nYSDFoXRvIHN0ZSBkb3N0aWdsaSBwb2RlxaFlbm8gb2dyYW5pxI1lbmplIHphIHBvZGF0a2UsIHVyZcSRYWogamUgcGF1emlyYW8ga29yacWhxIdlbmplIHBvZGF0YWthIHRva29tIG9zdGF0a2Egb3ZvZyBjaWtsdXNhLlxuXG5Ba28gbmFzdGF2aXRlLCBtb2JpbG5pIG9wZXJhdGVyIG1vxb5lIGRhIHZhbSBuYXBsYXRpIGRvZGF0bmUgdHJvxaFrb3ZlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nX2VuYWJsZSIgbXNnaWQ9IjE0MTIzOTU0MTAzMDYzOTA1OTMiPiJOYXN0YXZpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19zaWduYWxfbWV0ZXJfZGlzY29ubmVjdGVkIiBtc2dpZD0iMTk0MDIzMTUyMTI3NDE0Nzc3MSI+Ik5lbWEgaW50ZXJuZXQgdmV6ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2lnbmFsX21ldGVyX3dpZmlfbm9zc2lkIiBtc2dpZD0iNjU1NzQ4NjQ1Mjc3NDU5NzgyMCI+IldpLUZpIGplIHBvdmV6YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX3NlYXJjaGluZ190ZXh0IiBtc2dpZD0iODU3NDI0NzAwNTY0MjczNjA2MCI+IlRyYcW+aSBzZSBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJncHNfbm90aWZpY2F0aW9uX2ZvdW5kX3RleHQiIG1zZ2lkPSI0NjE5Mjc0MjQ0MTQ2NDQ2NDY0Ij4iTG9rYWNpanUgamUgcG9kZXNpbyBHUFMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2xvY2F0aW9uX2FjdGl2ZSIgbXNnaWQ9IjI0MjcyOTAxNDYxMzgxNjkwMTQiPiJJbWEgYWt0aXZuaWggemFodGV2YSB6YSBsb2thY2lqdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2xlYXJfYWxsIiBtc2dpZD0iNTIzNTkzODU1OTI0NzE2NDkyNSI+Ik9icmnFoWkgc3ZhIG9iYXZlxaF0ZW5qYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI1NjY4MzQ4MTQyNDEwMTE1MzIzIj4iUG9kZcWhYXZhbmphIG9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2FwcF9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjU1MjUyNjAxNjAzNDE1NTg4NjkiPiJQb2RlxaFhdmFuamEgemEgPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmIiBtc2dpZD0iNDA2Mjc4MDIyODkzMTU5MDA2OSI+IkVrcmFuIMSHZSBzZSBhdXRvbWF0c2tpIHJvdGlyYXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYW4gamUgemFrbGp1xI1hbiB1IGhvcml6b250YWxub20gcG9sb8W+YWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBqZSB6YWtsanXEjWFuIHUgdmVydGlrYWxub20gcG9sb8W+YWp1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmZfY2hhbmdlZCIgbXNnaWQ9IjgxMzQ2MDEwNzEwMjYzMDUxNTMiPiJFa3JhbiDEh2Ugc2Ugc2FkYSBhdXRvbWF0c2tpIHJvdGlyYXRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGVfY2hhbmdlZCIgbXNnaWQ9IjMxMzU5NjU1NTM3MDc1MTk3NDMiPiJFa3JhbiBqZSBzYWRhIHpha2xqdcSNYW4gdSB2ZXJ0aWthbG5vbSBwb2xvxb5hanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0X2NoYW5nZWQiIG1zZ2lkPSI4OTIyNDgxOTgxODM0MDEyMTI2Ij4iRWtyYW4gamUgc2FkYSB6YWtsanXEjWFuIHUgaG9yaXpvbnRhbG5vbSBwb2xvxb5hanUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzc2VydF9jYXNlIiBtc2dpZD0iMTI5NTE2MTc3NjIyMzk1OTIyMSI+IlZpdHJpbmEgc2EgcG9zbGFzdGljYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhcnRfZHJlYW1zIiBtc2dpZD0iNzIxOTU3NTg1ODM0ODcxOTc5MCI+IlNhbmphcmVuamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJldGhlcm5ldF9sYWJlbCIgbXNnaWQ9Ijc5Njc1NjM2NzYzMjQwODc0NjQiPiJFdGVybmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfZG5kX2xhYmVsIiBtc2dpZD0iODczNTg1NTczNzU3NTAyODIwOCI+Ik5lIHV6bmVtaXJhdmFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfZG5kX3ByaW9yaXR5X2xhYmVsIiBtc2dpZD0iNDgzMjMyOTUwNjcwNjkyMDM2Ij4iU2FtbyBwcmlvcml0ZXRuaSBwcmVraWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfZG5kX2FsYXJtc19sYWJlbCIgbXNnaWQ9IjI1NTkyMjk0NDQzMTI0NDU4NTgiPiJTYW1vIGFsYXJtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2RuZF9ub25lX2xhYmVsIiBtc2dpZD0iNTAyNTQ3NzgwNzEyMzAyOTQ3OCI+IlBvdHB1bmEgdGnFoWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbCIgbXNnaWQ9IjYzMDQxOTAyODUxNzA3MjE0MDEiPiJCbHVldG9vdGgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfbXVsdGlwbGVfZGV2aWNlc19sYWJlbCIgbXNnaWQ9IjM5MTIyNDU1NjU2MTM2ODQ3MzUiPiJCbHVldG9vdGggKDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB1cmXEkWFqYSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCBpc2tsanXEjWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2RldGFpbF9lbXB0eV90ZXh0IiBtc2dpZD0iNDkxMDAxNTc2MjQzMzMwMjg2MCI+Ik5pamUgZG9zdHVwYW4gbmlqZWRhbiB1cGFyZW5pIHVyZcSRYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+Ik9zdmV0bGplbm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iNzMwNTMyMzAzMTgwODE1MDA5OSI+IkF1dG9tYXRza2Egcm90YWNpamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFiZWwiIG1zZ2lkPSI2MzU5MjA1NzA2MTU0MjgyMzc3Ij4iUm90YWNpamEgamUgemFrbGp1xI1hbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSI1MTAyNjkxOTIxNDQyMTM1MDUzIj4iVmVydGlrYWxuaSBwcmlrYXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfbGFuZHNjYXBlX2xhYmVsIiBtc2dpZD0iODU1MzE1Nzc3MDA2MTE3ODcxOSI+Ikhvcml6b250YWxuaSBwcmlrYXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbWVfbGFiZWwiIG1zZ2lkPSI3MDczNDYzMDY0MzY5NDY4NDI5Ij4iTWV0b2QgdW5vc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19sb2NhdGlvbl9sYWJlbCIgbXNnaWQ9IjUwMTEzMjcwNDg3NDg3NjIyNTciPiJMb2thY2lqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2xvY2F0aW9uX29mZl9sYWJlbCIgbXNnaWQ9Ijc0NjQ1NDQwODY1MDczMzE0NTkiPiJMb2thY2lqYSBqZSBpc2tsanXEjWVuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX21lZGlhX2RldmljZV9sYWJlbCIgbXNnaWQ9IjEzMDI5MDY4MzYzNzI2MDM3NjIiPiJNZWRpanNraSB1cmXEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiJTYW1vIGhpdG5pIHBveml2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+IlBvZGXFoWF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3RpbWVfbGFiZWwiIG1zZ2lkPSI0NjM1OTY5MTgyMjM5NzM2NDA4Ij4iVnJlbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+IkphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdXNlcl90aXRsZSIgbXNnaWQ9IjQ0Njc2OTA0Mjc2NDIzOTI0MDMiPiJLb3Jpc25payI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfbmV3X3VzZXIiIG1zZ2lkPSI5MDMwNTIxMzYyMDIzNDc5Nzc4Ij4iTm92aSBrb3Jpc25payI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbGFiZWwiIG1zZ2lkPSI5MTM1MzQ0NzA0ODk5NTQ2MDQxIj4iV2ktRmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vdF9jb25uZWN0ZWQiIG1zZ2lkPSI3MTcxOTA0ODQ1MzQ1NTczNDMxIj4iVmV6YSBuaWplIHVzcG9zdGF2bGplbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX25vX25ldHdvcmsiIG1zZ2lkPSIyMjIxOTkzMDc3MjIwODU2Mzc2Ij4iTmVtYSBtcmXFvmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaS1GaSBqZSBpc2tsanXEjWVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd2lmaV9kZXRhaWxfZW1wdHlfdGV4dCIgbXNnaWQ9IjI2OTk5MDM1MDM4MzkwOTIyNiI+Ik5pamUgZG9zdHVwbmEgbmlqZWRuYSBXaS1GaSBtcmXFvmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jYXN0X3RpdGxlIiBtc2dpZD0iNzcwOTAxNjU0NjQyNjQ1NDcyOSI+IlByZWJhY2l2YW5qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2Nhc3RpbmciIG1zZ2lkPSI2NjAxNzEwNjgxMDMzMzUzMzE2Ij4iUHJlYmFjaXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2FzdF9kZXZpY2VfZGVmYXVsdF9uYW1lIiBtc2dpZD0iNTM2NzI1MzEwNDc0MjM4Mjk0NSI+Ik5laW1lbm92YW5pIHVyZcSRYWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jYXN0X2RldmljZV9kZWZhdWx0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjQ4NDU3MzY4MjM3ODYzNDQxMyI+IlNwcmVtbm8gemEgcHJlYmFjaXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2FzdF9kZXRhaWxfZW1wdHlfdGV4dCIgbXNnaWQ9IjMxMTc4NTgyMTI2MTY0MDYyMyI+Ik5pamUgZG9zdHVwYW4gbmlqZWRhbiB1cmXEkWFqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfdGl0bGUiIG1zZ2lkPSI4NTk5Njc0MDU3NjczNjA1MzY4Ij4iT3N2ZXRsamVub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYnJpZ2h0bmVzc19kaWFsb2dfYXV0b19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNTA2NDk4Mjc0Mzc4NDA3MTIxOCI+IkFVVE9NQVRTS0EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19pbnZlcnNpb25fbGFiZWwiIG1zZ2lkPSI4NzkwOTE5ODg0NzE4NjE5NjQ4Ij4iT2JybmkgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NvbG9yX3NwYWNlX2xhYmVsIiBtc2dpZD0iODUzNDQzNjg5NzQ1NTg0NzcwIj4iUmXFvmltIGtvcmVrY2lqZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjMyNjExMjYyMTQ2MjgxMzY4MiI+IkpvxaEgcG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfZG9uZSIgbXNnaWQ9IjM0MDI5OTk5NTg4MzkxNTMzNzYiPiJHb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jb25uZWN0ZWQiIG1zZ2lkPSIxNzIyMjUzNTQyOTg0ODQ3NDg3Ij4iUG92ZXphbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2Nvbm5lY3RpbmciIG1zZ2lkPSI0NzYyMzAyNzQxOTI2NDQwNCI+IlBvdmV6dWplIHNlLi4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfdGV0aGVyaW5nX2xhYmVsIiBtc2dpZD0iNzE1MzQ1MjA2MDQ0ODU3NTU0OSI+IlBvdmV6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfaG90c3BvdF9sYWJlbCIgbXNnaWQ9IjYwNDY5MTc5MzQ5NzQwMDQ4NzkiPiJIb3RzcG90Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfbm90aWZpY2F0aW9uc19sYWJlbCIgbXNnaWQ9IjQ4MTgxNTY0NDIxNjkxNTQ1MjMiPiJPYmF2ZcWhdGVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19mbGFzaGxpZ2h0X2xhYmVsIiBtc2dpZD0iMjEzMzA5MzQ5NzY5MTY2MTU0NiI+IkxhbXBhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX3RpdGxlIiBtc2dpZD0iODU3NTA2Mjc4MzY3NTE3MTY5NSI+IlBvZGFjaSB6YSBtb2JpbG5lIHVyZcSRYWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNhZ2UiIG1zZ2lkPSIxOTY0MjYwMzYwMjU5MzEyMDAyIj4iUG90cm/FoW5qYSBwb2RhdGFrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9yZW1haW5pbmdfZGF0YSIgbXNnaWQ9IjcyMjcxNTQxNTU0MzU0MTI0OSI+IlByZW9zdGFsYSBrb2xpxI1pbmEgcG9kYXRha2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfb3Zlcl9saW1pdCIgbXNnaWQ9Ijk2NzY2OTY2NTM5MDk5MDQyNyI+IlByZWtvIG9ncmFuacSNZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iSXNrb3Jpc3RpbGkgc3RlIDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJPZ3JhbmnEjWVuamUgb2QgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iVXBvem9yZW5qZSB6YSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IlJlxb5pbSByYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+Ik5lZGF2bmkgZWtyYW5pIHNlIHBvamF2bGp1anUgb3ZkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjaWplIG8gYXBsaWthY2lqaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImthxI1lbmplIGVrcmFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwcmV0cmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IlBva3JldGFuamUgYXBsaWthY2lqZSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbmlqZSB1c3BlbG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IkpvxaEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQb2RlbGkgaG9yaXpvbnRhbG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iUG9kZWxpIHZlcnRpa2Fsbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iUHJpbGFnb8SRZW5vIGRlbGplbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwYW5kZWRfaGVhZGVyX2JhdHRlcnlfY2hhcmdlZCIgbXNnaWQ9IjU5NDU4NTU5NzAyNjc2NTc5NTEiPiJOYXB1bmplbmEgamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHBhbmRlZF9oZWFkZXJfYmF0dGVyeV9jaGFyZ2luZyIgbXNnaWQ9IjIwNTYyMzE5ODQ4NzE4OTcyNCI+IlB1bmplbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwYW5kZWRfaGVhZGVyX2JhdHRlcnlfY2hhcmdpbmdfd2l0aF90aW1lIiBtc2dpZD0iNDU3NTU5ODg0Mjc1Mzk1Mzc2Ij4iPHhsaWZmOmcgaWQ9IkNIQVJHSU5HX1RJTUUiPiVzPC94bGlmZjpnPiBkb2sgc2UgbmUgbmFwdW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZXhwYW5kZWRfaGVhZGVyX2JhdHRlcnlfbm90X2NoYXJnaW5nIiBtc2dpZD0iNDc5ODE0NzE1MjM2NzA0OTczMiI+Ik5lIHB1bmkgc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzc2xfY2FfY2VydF93YXJuaW5nIiBtc2dpZD0iOTAwNTk1NDEwNjkwMjA1MzY0MSI+Ik1yZcW+YSBzZSBtb8W+ZGFcbm5hZGdsZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVzY3JpcHRpb25fdGFyZ2V0X3NlYXJjaCIgbXNnaWQ9IjMwOTE1ODcyNDk3NzYwMzMxMzkiPiJQcmV0cmFnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlc2NyaXB0aW9uX2RpcmVjdGlvbl91cCIgbXNnaWQ9IjcxNjkwMzI0NzgyNTk0ODUxODAiPiJQcmV2dWNpdGUgbmFnb3JlIHphIDx4bGlmZjpnIGlkPSJUQVJHRVRfREVTQ1JJUFRJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZXNjcmlwdGlvbl9kaXJlY3Rpb25fbGVmdCIgbXNnaWQ9IjcyMDc0Nzg3MTk4MDU1NjIxNjUiPiJQcmV2dWNpdGUgdWxldm8gemEgPHhsaWZmOmcgaWQ9IlRBUkdFVF9ERVNDUklQVElPTiI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9wcmlvcml0eV9pbnRyb2R1Y3Rpb24iIG1zZ2lkPSIzMDcwNTA2OTYxODY2OTE5NTAyIj4iTmXEh2UgdmFzIHV6bmVtaXJhdmF0aSB6dnVrb3ZpIGkgdmlicmFjaWplLCBvc2ltIHphIGFsYXJtZSwgcG9kc2V0bmlrZSwgZG9nYcSRYWplIGkgcG96aXZhb2NlIGtvamUgaXphYmVyZXRlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9wcmlvcml0eV9jdXN0b21pemVfYnV0dG9uIiBtc2dpZD0iNzk0ODA0MzI3ODIyNjk1NTA2MyI+IlByaWxhZ29kaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9zaWxlbmNlX2ludHJvZHVjdGlvbl92b2ljZSIgbXNnaWQ9IjIyODQ1NDA5OTIyOTgyMDA3MjkiPiJPdm8gYmxva2lyYSBTVkUgenZ1a292ZSBpIHZpYnJhY2lqZSB1a2xqdcSNdWp1xIdpIGFsYXJtZSwgbXV6aWt1LCB2aWRlbyBzbmlta2UgaSBpZ3JlLiBJIGRhbGplIMSHZXRlIG1vxIdpIGRhIHVwdcSHdWpldGUgcG96aXZlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9zaWxlbmNlX2ludHJvZHVjdGlvbiIgbXNnaWQ9IjMxMzc4ODIzODEwOTMyNzE1NjgiPiJPdm8gYmxva2lyYSBTVkUgenZ1a292ZSBpIHZpYnJhY2lqZSB1a2xqdcSNdWp1xIdpIGFsYXJtZSwgbXV6aWt1LCB2aWRlbyBzbmlta2UgaSBpZ3JlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX21vcmVfb3ZlcmZsb3dfdGV4dCIgbXNnaWQ9IjkxOTUyMjI0NjkwNDE2MDEzNjUiPiIrPHhsaWZmOmcgaWQ9Ik5VTUJFUl9PRl9OT1RJRklDQVRJT05TIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzcGVlZF9idW1wX2V4cGxhbmF0aW9uIiBtc2dpZD0iMTI4ODg3NTY5OTY1ODgxOTc1NSI+Ik1hbmplIGhpdG5hIG9iYXZlxaF0ZW5qYSBzdSB1IG5hc3Rhdmt1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX3RhcF9hZ2FpbiIgbXNnaWQ9Ijg1MjQ5NDk1NzM2NzU5MjIxMzgiPiJEb2Rpcm5pdGUgcG9ub3ZvIGRhIGJpc3RlIG90dm9yaWxpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfdW5sb2NrIiBtc2dpZD0iODA0MzQ2Njg5NDIxMjg0MTk5OCI+IlByZXZ1Y2l0ZSBuYWdvcmUgZGEgYmlzdGUgb3RrbGp1xI1hbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwaG9uZV9oaW50IiBtc2dpZD0iNDg3Mjg5MDk4Njg2OTIwOTk1MCI+IlByZXZ1Y2l0ZSBvZCBpa29uZSB6YSB0ZWxlZm9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9pY2VfaGludCIgbXNnaWQ9Ijg5Mzk4ODg3MzIxMTk3MjY2NjUiPiJQcmV2dWNpdGUgb2QgaWtvbmUgemEgZ2xhc292bnUgcG9tb8SHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2FtZXJhX2hpbnQiIG1zZ2lkPSI3OTM5Njg4NDM2Nzk3MTU3NDgzIj4iUHJldnVjaXRlIG9kIGlrb25lIHphIGthbWVydSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludGVycnVwdGlvbl9sZXZlbF9ub25lX3dpdGhfd2FybmluZyIgbXNnaWQ9IjUxMTQ4NzIxNzE2MTQxNjEwODQiPiJQb3RwdW5hIHRpxaFpbmEuIEkgxI1pdGHEjWkgZWtyYW5hIMSHZSBiaXRpIGlza2xqdcSNZW5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludGVycnVwdGlvbl9sZXZlbF9ub25lIiBtc2dpZD0iNjAwMDA4MzY4MTI0NDQ5Mjk5MiI+IlBvdHB1bmEgdGnFoWluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludGVycnVwdGlvbl9sZXZlbF9wcmlvcml0eSIgbXNnaWQ9IjY0MjY3NjY0NjUzNjM4NTU1MDUiPiJTYW1vIHByaW9yaXRldG5pIHByZWtpZGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJpbnRlcnJ1cHRpb25fbGV2ZWxfYWxhcm1zIiBtc2dpZD0iNTIyNjMwNjk5MzQ0ODMyODg5NiI+IlNhbW8gYWxhcm1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW50ZXJydXB0aW9uX2xldmVsX25vbmVfdHdvbGluZSIgbXNnaWQ9IjM5NTc1ODE1NDgxOTA3NjU4ODkiPiJQb3RwdW5hXG50acWhaW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW50ZXJydXB0aW9uX2xldmVsX3ByaW9yaXR5X3R3b2xpbmUiIG1zZ2lkPSIxNTY0NzE1MzM1MjE3MTY0MTI0Ij4iU2Ftb1xucHJpb3JpdC4gcHJla2lkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludGVycnVwdGlvbl9sZXZlbF9hbGFybXNfdHdvbGluZSIgbXNnaWQ9IjMyNjY5MDk1NjY0MTAxMDYxNDYiPiJTYW1vXG5hbGFybWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJrZXlndWFyZF9pbmRpY2F0aW9uX2NoYXJnaW5nX3RpbWUiIG1zZ2lkPSIxNzU3MjUxNzc2ODcyODM1NzY4Ij4iUHVuamVuamUgKHB1biBqZSB6YSA8eGxpZmY6ZyBpZD0iQ0hBUkdJTkdfVElNRV9MRUZUIj4lczwveGxpZmY6Zz4pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5kaWNhdGlvbl9jaGFyZ2luZ190aW1lX2Zhc3QiIG1zZ2lkPSI5MDE4OTgxOTUyMDUzOTE0OTg2Ij4iQnJ6byBzZSBwdW5pIChuYXB1bmnEh2Ugc2UgemEgPHhsaWZmOmcgaWQ9IkNIQVJHSU5HX1RJTUVfTEVGVCI+JXM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWd1YXJkX2luZGljYXRpb25fY2hhcmdpbmdfdGltZV9zbG93bHkiIG1zZ2lkPSI5NTUyNTI3OTc5NjE3MjQ5NTIiPiJTcG9ybyBzZSBwdW5pIChuYXB1bmnEh2Ugc2UgemEgPHhsaWZmOmcgaWQ9IkNIQVJHSU5HX1RJTUVfTEVGVCI+JXM8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbXVsdGlfdXNlcl9zd2l0Y2hfc3dpdGNoZXIiIG1zZ2lkPSI3MzA1OTQ4OTM4MTQxMDI0OTM3Ij4iWmFtZW5pIGtvcmlzbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbXVsdGlfdXNlcl9zd2l0Y2hfc3dpdGNoZXJfd2l0aF9jdXJyZW50IiBtc2dpZD0iODQzNDg4MDU5NTI4NDYwMTYwMSI+IlByb21lbml0ZSBrb3Jpc25pa2EsIGFrdHVlbG5pIGtvcmlzbmlrIGplIDx4bGlmZjpnIGlkPSJDVVJSRU5UX1VTRVJfTkFNRSI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tdWx0aV91c2VyX3N3aXRjaF9pbmFjdGl2ZSIgbXNnaWQ9IjE0MjQwODE4MzE0NjgwODM0MDIiPiJBa3R1ZWxuaSBrb3Jpc25payA8eGxpZmY6ZyBpZD0iQ1VSUkVOVF9VU0VSX05BTUUiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbXVsdGlfdXNlcl9zd2l0Y2hfcXVpY2tfY29udGFjdCIgbXNnaWQ9IjMwMjAzNjc3MjkyODc5OTA0NzUiPiJQcmlrYcW+aSBwcm9maWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX2FkZF91c2VyIiBtc2dpZD0iNTExMDI1MTUyNDQ4NjA3OTQ5MiI+IkRvZGFqIGtvcmlzbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfbmV3X3VzZXJfbmFtZSIgbXNnaWQ9IjQyNjU0MDYxMjA1MTE3ODc1MyI+Ik5vdmkga29yaXNuaWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJndWVzdF9uaWNrbmFtZSIgbXNnaWQ9IjgwNTk5ODkxMjg5NjM3ODk2NzgiPiJHb3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3RfbmV3X2d1ZXN0IiBtc2dpZD0iNjAwNTM3NTQzMDc4ODQ3ODAzIj4iRG9kYWogZ29zdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJndWVzdF9leGl0X2d1ZXN0IiBtc2dpZD0iNzE4NzM1OTM0MjAzMDA5Njg4NSI+IlVrbG9uaSBnb3N0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imd1ZXN0X2V4aXRfZ3Vlc3RfZGlhbG9nX3RpdGxlIiBtc2dpZD0iODQ4MDY5MzUyMDUyMTc2NjY4OCI+IsW9ZWxpdGUgbGkgZGEgdWtsb25pdGUgZ29zdGE/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3RfZXhpdF9ndWVzdF9kaWFsb2dfbWVzc2FnZSIgbXNnaWQ9IjQxNTU1MDMyMjQ3Njk2NzY2MjUiPiJTdmUgYXBsaWthY2lqZSBpIHBvZGFjaSB1IG92b2ogc2VzaWppIMSHZSBiaXRpIGl6YnJpc2FuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJndWVzdF9leGl0X2d1ZXN0X2RpYWxvZ19yZW1vdmUiIG1zZ2lkPSI3NDAyMjMxOTYzODYyNTIwNTMxIj4iVWtsb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3Rfd2lwZV9zZXNzaW9uX3RpdGxlIiBtc2dpZD0iNjQxOTQzOTkxMjg4NTk1NjEzMiI+IkRvYnJvIGRvxaFsaSBuYXphZCwgZ29zdGUhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3Rfd2lwZV9zZXNzaW9uX21lc3NhZ2UiIG1zZ2lkPSI4NDc2MjM4MTc4MjcwMTEyODExIj4ixb1lbGl0ZSBsaSBkYSBuYXN0YXZpdGUgc2VzaWp1PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imd1ZXN0X3dpcGVfc2Vzc2lvbl93aXBlIiBtc2dpZD0iNTA2NTU1ODU2NjkzOTg1ODg4NCI+IlBvxI1uaSBpeiBwb8SNZXRrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imd1ZXN0X3dpcGVfc2Vzc2lvbl9kb250d2lwZSIgbXNnaWQ9IjE0MDExMTM0NjI1MjQ4OTQ3MTYiPiJEYSwgbmFzdGF2aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imd1ZXN0X25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjE1ODUyNzg1MzM4NDA2MDMwNjMiPiJHb3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3Rfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIzMzU3NDc5NTc3MzQ3OTY2ODkiPiJEYSBiaXN0ZSBpemJyaXNhbGkgYXBsaWthY2lqZSBpIHBvZGF0a2UsIHVrbG9uaXRlIGdvc3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZ3Vlc3Rfbm90aWZpY2F0aW9uX3JlbW92ZV9hY3Rpb24iIG1zZ2lkPSI4ODIwNjcwNzAzODkyMTAxOTkwIj4iVUtMT05JIEdPU1RBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9sb2dvdXRfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMTQ1Mzk2MDkyNjQzNzI0MDcyNyI+Ik9kamF2bGppdmFuamUga29yaXNuaWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9sb2dvdXRfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIzMzUwMjYyODA5NjExODc2Mjg0Ij4iT2RqYXZpdGUgYWt0dWVsbm9nIGtvcmlzbmlrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfbG9nb3V0X25vdGlmaWNhdGlvbl9hY3Rpb24iIG1zZ2lkPSIxMTk1NDI4OTkxNDIzNDI1MDYyIj4iT0RKQVZJIEtPUklTTklLQSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfYWRkX3VzZXJfdGl0bGUiIG1zZ2lkPSI0NTUzNTk2Mzk1ODI0MTMyNjM4Ij4iRG9kYWpldGUgbm92b2cga29yaXNuaWthPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfYWRkX3VzZXJfbWVzc2FnZV9zaG9ydCIgbXNnaWQ9IjIxNjE2MjQ4MzQwNjYyMTQ1NTkiPiJLYWRhIGRvZGF0ZSBub3ZvZyBrb3Jpc25pa2EsIHRhIG9zb2JhIHRyZWJhIGRhIHBvZGVzaSBzb3BzdHZlbmkgcHJvc3Rvci5cblxuU3Zha2kga29yaXNuaWsgbW/FvmUgZGEgYcW+dXJpcmEgYXBsaWthY2lqZSB6YSBzdmUgb3N0YWxlIGtvcmlzbmlrZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ1c2VyX3JlbW92ZV91c2VyX3RpdGxlIiBtc2dpZD0iNDY4MTI1Njk1NjA3Njg5NTU1OSI+IsW9ZWxpdGUgbGkgZGEgdWtsb25pdGUga29yaXNuaWthPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InVzZXJfcmVtb3ZlX3VzZXJfbWVzc2FnZSIgbXNnaWQ9IjE0NTMyMTgwMTM5NTk0OTgwMzkiPiJTdmUgYXBsaWthY2lqZSBpIHBvZGFjaSBvdm9nIGtvcmlzbmlrYSDEh2UgYml0aSBpemJyaXNhbmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idXNlcl9yZW1vdmVfdXNlcl9yZW1vdmUiIG1zZ2lkPSI3NDc5Mjc1NzQxNzQyMTc4Mjk3Ij4iVWtsb25pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLFoHRlZG5qYSBiYXRlcmlqZSBqZSB1a2xqdcSNZW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlNtYW5qdWplIHBlcmZvcm1hbnNlIGkgcG96YWRpbnNrZSBwb2RhdGtlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJc2tsanXEjWkgxaF0ZWRuanUgYmF0ZXJpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gxIdlIHBvxI1ldGkgZGEgc25pbWEgc3ZlIMWhdG8gc2UgcHJpa2F6dWplIG5hIGVrcmFudS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmUgcHJpa2F6dWogcG9ub3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Ik9icmnFoWkgc3ZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9Ijg0NzA4NzI5Njk0NTc5ODU5NTQiPiJaYXBvxI1uaSBvZG1haCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVtcHR5X3NoYWRlX3RleHQiIG1zZ2lkPSI3MDgxMzU3MTYyNzI4NjcwMDIiPiJOZW1hIG9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRldmljZV9vd25lZF9mb290ZXIiIG1zZ2lkPSIzODAyNzUyNjYzMzI2MDMwMDUzIj4iVXJlxJFhaiBzZSBtb8W+ZGEgbmFkZ2xlZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJwcm9maWxlX293bmVkX2Zvb3RlciIgbXNnaWQ9IjgwMjE4ODgxMDg1NTM2OTYwNjkiPiJQcm9maWwgc2UgbW/FvmRhIG5hZGdsZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idnBuX2Zvb3RlciIgbXNnaWQ9IjIzODg2MTEwOTYxMjkxMDY4MTIiPiJNcmXFvmEgc2UgbW/FvmRhIG5hZGdsZWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9uaXRvcmluZ190aXRsZV9kZXZpY2Vfb3duZWQiIG1zZ2lkPSI3MTIxMDc5MzExOTAzODU5NjEwIj4iTmFkZ2xlZGFuamUgdXJlxJFhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb25pdG9yaW5nX3RpdGxlX3Byb2ZpbGVfb3duZWQiIG1zZ2lkPSI2NzkwMTA5ODc0NzMzNTAxNDg3Ij4iTmFkZ2xlZGFuamUgcHJvZmlsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vbml0b3JpbmdfdGl0bGUiIG1zZ2lkPSIxNjkyMDYyNTkyNTMwNDgxMDYiPiJOYWRnbGVkYW5qZSBtcmXFvmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkaXNhYmxlX3ZwbiIgbXNnaWQ9IjQ0MzU1MzQzMTE1MTAyNzI1MDYiPiJPbmVtb2d1xIdpIFZQTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3RfdnBuIiBtc2dpZD0iMTMyNDkxNTA1OTU2ODU0ODY1NSI+IlByZWtpbmkgdmV6dSBzYSBWUE4tb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb25pdG9yaW5nX2Rlc2NyaXB0aW9uX2RldmljZV9vd25lZCIgbXNnaWQ9IjU3ODA5ODgyOTE4OTg0NjE4ODMiPiJVcmXEkWFqZW0gdXByYXZsamEgPHhsaWZmOmcgaWQ9Ik9SR0FOSVpBVElPTiI+JTEkczwveGxpZmY6Zz4uXG5cbkFkbWluaXN0cmF0b3IgbW/FvmUgZGEgbmFkZ2xlZGEgcG9kZcWhYXZhbmphLCBrb3Jwb3JhdGl2bmkgcHJpc3R1cCwgYXBsaWthY2lqZSwgcG9kYXRrZSBwb3ZlemFuZSBzYSB1cmXEkWFqZW0gaSBpbmZvcm1hY2lqZSBvIGxva2FjaWppIHVyZcSRYWphLCBrYW8gaSBkYSB1cHJhdmxqYSBuamltYS4gVmnFoWUgaW5mb3JtYWNpamEgcG90cmHFvml0ZSBvZCBhZG1pbmlzdHJhdG9yYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb25pdG9yaW5nX2Rlc2NyaXB0aW9uX3ZwbiIgbXNnaWQ9IjQ0NDUxNTAxMTk1MTUzOTM1MjYiPiJEYWxpIHN0ZSBkb3p2b2x1IGFwbGlrYWNpamkgZGEgcG9kZcWhYXZhIFZQTiB2ZXp1LlxuXG5UYSBhcGxpa2FjaWphIG1vxb5lIGRhIG5hZGdsZWRhIGFrdGl2bm9zdGkgbmEgdXJlxJFhanUgaSBtcmXFvmksIHVrbGp1xI11anXEh2kgaW1lamxvdmUsIGFwbGlrYWNpamUgaSB2ZWItc2FqdG92ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb25pdG9yaW5nX2Rlc2NyaXB0aW9uX3Zwbl9kZXZpY2Vfb3duZWQiIG1zZ2lkPSIzMDkwNjcwNzc3NDk5MTYxMjQ2Ij4iVXJlxJFhamVtIHVwcmF2bGphIDx4bGlmZjpnIGlkPSJPUkdBTklaQVRJT04iPiUxJHM8L3hsaWZmOmc+LlxuXG5BZG1pbmlzdHJhdG9yIG1vxb5lIGRhIG5hZGdsZWRhIHBvZGXFoWF2YW5qYSwga29ycG9yYXRpdm5pIHByaXN0dXAsIGFwbGlrYWNpamUsIHBvZGF0a2UgcG92ZXphbmUgc2EgdXJlxJFhamVtIGkgaW5mb3JtYWNpamUgbyBsb2thY2lqaSB1cmXEkWFqYSwga2FvIGkgZGEgdXByYXZsamEgbmppbWEuXG5cblBvdmV6YW5pIHN0ZSBuYSBWUE4sIGtvamkgbW/FvmUgZGEgbmFkZ2xlZGEgYWt0aXZub3N0aSBuYSBtcmXFvmksIHVrbGp1xI11anXEh2kgaW1lamxvdmUsIGFwbGlrYWNpamUgaSBiZXpiZWRuZSB2ZWItc2FqdG92ZS5cblxuVmnFoWUgaW5mb3JtYWNpamEgcG90cmHFvml0ZSBvZCBhZG1pbmlzdHJhdG9yYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtb25pdG9yaW5nX2Rlc2NyaXB0aW9uX3Zwbl9wcm9maWxlX293bmVkIiBtc2dpZD0iMjA1NDk0OTEzMjE0NTAzOTI5MCI+IlByb2ZpbG9tIHphIFdvcmsgdXByYXZsamEgPHhsaWZmOmcgaWQ9Ik9SR0FOSVpBVElPTiI+JTEkczwveGxpZmY6Zz4uXG5cbkFkbWluaXN0cmF0b3IgbW/FvmUgZGEgbmFkZ2xlZGEgYWt0aXZub3N0aSBuYSBtcmXFvmksIHVrbGp1xI11anXEh2kgaW1lamxvdmUsIGFwbGlrYWNpamUgaSB2ZWItc2FqdG92ZS5cblxuVmnFoWUgaW5mb3JtYWNpamEgcG90cmHFvml0ZSBvZCBhZG1pbmlzdHJhdG9yYS5cblxuUG92ZXphbmkgc3RlIGkgbmEgVlBOLCBrb2ppIG1vxb5lIGRhIG5hZGdsZWRhIGFrdGl2bm9zdGkgbmEgbGnEjW5vaiBtcmXFvmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3Zwbl9uYW1lIiBtc2dpZD0iNjYwNDEyMzEwNTc2NTczNzgzMCI+IlZQTiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vbml0b3JpbmdfZGVzY3JpcHRpb25fYXBwIiBtc2dpZD0iNjI1OTE3OTM0MjI4NDc0Mjg3OCI+IlBvdmV6YW5pIHN0ZSBzYSBhcGxpa2FjaWpvbSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUxJHM8L3hsaWZmOmc+LCBrb2phIG1vxb5lIGRhIG5hZGdsZWRhIGFrdGl2bm9zdGkgbmEgbXJlxb5pLCB1a2xqdcSNdWp1xIdpIGltZWpsb3ZlLCBhcGxpa2FjaWplIGkgdmViLXNhanRvdmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9uaXRvcmluZ19kZXNjcmlwdGlvbl9hcHBfcGVyc29uYWwiIG1zZ2lkPSI0ODQ1OTkwNTIxMTgzMTYyNjgiPiJQb3ZlemFuaSBzdGUgc2EgYXBsaWthY2lqb20gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OIj4lMSRzPC94bGlmZjpnPiwga29qYSBtb8W+ZSBkYSBuYWRnbGVkYSBha3Rpdm5vc3RpIG5hIGxpxI1ub2ogbXJlxb5pLCB1a2xqdcSNdWp1xIdpIGltZWpsb3ZlLCBhcGxpa2FjaWplIGkgdmViLXNhanRvdmUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9uaXRvcmluZ19kZXNjcmlwdGlvbl9hcHBfd29yayIgbXNnaWQ9IjE3NTQzMjU4NjA5MTgwNjA4OTciPiJQcm9maWxvbSB6YSBXb3JrIHVwcmF2bGphIDx4bGlmZjpnIGlkPSJPUkdBTklaQVRJT04iPiUxJHM8L3hsaWZmOmc+LiBQb3ZlemFuIGplIHNhIGFwbGlrYWNpam9tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTiI+JTIkczwveGxpZmY6Zz4sIGtvamEgbW/FvmUgZGEgbmFkZ2xlZGEgYWt0aXZub3N0aSBuYSBwb3Nsb3Zub2ogbXJlxb5pLCB1a2xqdcSNdWp1xIdpIGltZWpsb3ZlLCBhcGxpa2FjaWplIGkgdmViLXNhanRvdmUuXG5cblZpxaFlIGluZm9ybWFjaWphIHBvdHJhxb5pdGUgb2QgYWRtaW5pc3RyYXRvcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibW9uaXRvcmluZ19kZXNjcmlwdGlvbl9hcHBfcGVyc29uYWxfd29yayIgbXNnaWQ9IjQ5NDY2MDA0NDM4NTIwNDU5MDMiPiJQcm9maWxvbSB6YSBXb3JrIHVwcmF2bGphIDx4bGlmZjpnIGlkPSJPUkdBTklaQVRJT04iPiUxJHM8L3hsaWZmOmc+LiBQb3ZlemFuIGplIHNhIGFwbGlrYWNpam9tIDx4bGlmZjpnIGlkPSJBUFBMSUNBVElPTl9XT1JLIj4lMiRzPC94bGlmZjpnPiwga29qYSBtb8W+ZSBkYSBuYWRnbGVkYSBha3Rpdm5vc3RpIG5hIHBvc2xvdm5vaiBtcmXFvmksIHVrbGp1xI11anXEh2kgaW1lamxvdmUsIGFwbGlrYWNpamUgaSB2ZWItc2FqdG92ZS5cblxuUG92ZXphbmkgc3RlIGkgc2EgYXBsaWthY2lqb20gPHhsaWZmOmcgaWQ9IkFQUExJQ0FUSU9OX1BFUlNPTkFMIj4lMyRzPC94bGlmZjpnPiwga29qYSBtb8W+ZSBkYSBuYWRnbGVkYSBha3Rpdm5vc3RpIG5hIGxpxI1ub2ogbXJlxb5pLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1vbml0b3JpbmdfZGVzY3JpcHRpb25fdnBuX2FwcF9kZXZpY2Vfb3duZWQiIG1zZ2lkPSI0OTcwNDQzODI3MDQzMjYxNzAzIj4iVXJlxJFhamVtIHVwcmF2bGphIDx4bGlmZjpnIGlkPSJPUkdBTklaQVRJT04iPiUxJHM8L3hsaWZmOmc+LlxuXG5BZG1pbmlzdHJhdG9yIG1vxb5lIGRhIG5hZGdsZWRhIHBvZGXFoWF2YW5qYSwga29ycG9yYXRpdm5pIHByaXN0dXAsIGFwbGlrYWNpamUsIHBvZGF0a2UgcG92ZXphbmUgc2EgdXJlxJFhamVtIGkgaW5mb3JtYWNpamUgbyBsb2thY2lqaSB1cmXEkWFqYSwga2FvIGkgZGEgdXByYXZsamEgbmppbWEuXG5cblBvdmV6YW5pIHN0ZSBzYSBhcGxpa2FjaWpvbSA8eGxpZmY6ZyBpZD0iQVBQTElDQVRJT04iPiUyJHM8L3hsaWZmOmc+LCBrb2phIG1vxb5lIGRhIG5hZGdsZWRhIGFrdGl2bm9zdGkgbmEgbXJlxb5pLCB1a2xqdcSNdWp1xIdpIGltZWpsb3ZlLCBhcGxpa2FjaWplIGkgdmViLXNhanRvdmUuXG5cblZpxaFlIGluZm9ybWFjaWphIHBvdHJhxb5pdGUgb2QgYWRtaW5pc3RyYXRvcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Z3VhcmRfaW5kaWNhdGlvbl90cnVzdF9kaXNhYmxlZCIgbXNnaWQ9Ijc0MTI1MzQyMDM2MzM1MjgxMzUiPiJVcmXEkWFqIMSHZSBvc3RhdGkgemFrbGp1xI1hbiBkb2sgZ2EgbmUgb3RrbGp1xI1hdGUgcnXEjW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlkZGVuX25vdGlmaWNhdGlvbnNfdGl0bGUiIG1zZ2lkPSI3MTM5NjI4NTM0MjA3NDQzMjkwIj4iQnLFvmUgZG9iaWphanRlIG9iYXZlxaF0ZW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZGRlbl9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSIyMzI2NDA5Mzg5MDg4NjY4OTgxIj4iUHJlZ2xlZGFqdGUgaWggcHJlIG90a2xqdcSNYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlkZGVuX25vdGlmaWNhdGlvbnNfY2FuY2VsIiBtc2dpZD0iMzY5MDcwOTczNTEyMjM0NDkxMyI+Ik5lLCBodmFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZGRlbl9ub3RpZmljYXRpb25zX3NldHVwIiBtc2dpZD0iNDEwNzk1MTQ4MDE5NzY4MTAiPiJQb2Rlc2kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ6ZW5fbW9kZV9hbmRfY29uZGl0aW9uIiBtc2dpZD0iNDQ2MjQ3MTAzNjQyOTc1OTkwMyI+Ijx4bGlmZjpnIGlkPSJaRU5fTU9ERSI+JTEkczwveGxpZmY6Zz4uIDx4bGlmZjpnIGlkPSJFWElUX0NPTkRJVElPTiI+JTIkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWVfemVuX2VuZF9ub3ciIG1zZ2lkPSIzMTc5ODQ1MzQ1NDI5ODQxODIyIj4iUHJla2luaSBvZG1haCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdm9sdW1lX2V4cGFuZCIgbXNnaWQ9IjU5NDY4MTI3OTA5OTkyNDQyMDUiPiJQcm/FoWlyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfdm9sdW1lX2NvbGxhcHNlIiBtc2dpZD0iMzYwOTU0OTU5MzAzMTgxMDg3NSI+IlNrdXBpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX3Bpbm5pbmdfdGl0bGUiIG1zZ2lkPSIzMjczNzQwMzgxOTc2MTc1ODExIj4iRWtyYW4gamUgemFrYcSNZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzY3JlZW5fcGlubmluZ19kZXNjcmlwdGlvbiIgbXNnaWQ9IjM1Nzc5Mzc2OTg0MDYxNTE2MDQiPiJaYm9nIHRvZ2Egc2Ugb24gc3RhbG5vIHByaWthenVqZSBkb2sgZ2EgbmUgb3RrYcSNaXRlLiBEb2Rpcm5pdGUgaSB6YWRyxb5pdGUgTmF6YWQgZGEgYmlzdGUgZ2Egb3RrYcSNaWxpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNjcmVlbl9waW5uaW5nX3Bvc2l0aXZlIiBtc2dpZD0iMzc4Mzk4NTc5ODM2Njc1MTIyNiI+IlZhxb5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2NyZWVuX3Bpbm5pbmdfbmVnYXRpdmUiIG1zZ2lkPSIzNzQxNjAyMzA4MzQzODgwMjY4Ij4iTmUsIGh2YWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVzZXRfY29uZmlybWF0aW9uX3RpdGxlIiBtc2dpZD0iNzQ4NzkyNTg2NzQ5ODk3ODgzIj4ixb1lbGl0ZSBsaSBkYSBzYWtyaWpldGUgPHhsaWZmOmcgaWQ9IlRJTEVfTEFCRUwiPiUxJHM8L3hsaWZmOmc+PyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3Jlc2V0X2NvbmZpcm1hdGlvbl9tZXNzYWdlIiBtc2dpZD0iMjIzNTk3MDEyNjgwMzMxNzM3NCI+Ik92byDEh2Ugc2UgcG9ub3ZvIHBvamF2aXRpIGthZGEgZ2Egc2xlZGXEh2kgcHV0IGJ1ZGV0ZSB1a2xqdcSNaWxpIHUgcG9kZcWhYXZhbmppbWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcmVzZXRfY29uZmlybWF0aW9uX2J1dHRvbiIgbXNnaWQ9IjI2NjAzMzkxMDE4NjgzNjc1MTUiPiJTYWtyaWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfbWVzc2FnZSIgbXNnaWQ9IjkxODY4MDk0NzQzMzM4OTExMCI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gxb5lbGkgZGEgYnVkZSBkaWphbG9nIHphIGphxI1pbnUgenZ1a2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2FsbG93IiBtc2dpZD0iNzk1NDM5NjkwMjQ4MjIyODc4NiI+IkRvenZvbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJPZGJpaiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGplIGRpamFsb2cgemEgamHEjWludSB6dnVrYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IkRvZGlybml0ZSBkYSBiaXN0ZSB2cmF0aWxpIG9yaWdpbmFsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IktvcmlzdGl0ZSBwcm9maWwgemEgV29yayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlRqdW5lciB6YSBrb3Jpc25pxI1raSBpbnRlcmZlanMgc2lzdGVtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlByaWthenVqIHVncmHEkWVuaSBwcm9jZW5hdCBiYXRlcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlX3N1bW1hcnkiIG1zZ2lkPSIzMjE1MDI1Nzc1NTc2Nzg2MDM3Ij4iUHJpa2F6aXZhbmplIG5pdm9hIG5hcHVuamVub3N0aSBiYXRlcmlqZSB1IHByb2NlbnRpbWEgdW51dGFyIGlrb25lIG5hIHN0YXR1c25vaiB0cmFjaSBrYWRhIHNlIGJhdGVyaWphIG5lIHB1bmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5ncyIgbXNnaWQ9IjEwMDQyOTk4MTkxNzI1NDI4Ij4iQnJ6YSBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyIiBtc2dpZD0iNDg3NzY0NTQ3Njk1OTMyNDc2MCI+IlN0YXR1c25hIHRyYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ib3ZlcnZpZXciIG1zZ2lkPSI0MDE4NjAyMDEzODk1OTI2OTU2Ij4iUHJlZ2xlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlbW9fbW9kZSIgbXNnaWQ9IjIzODkxNjMwMTg1MzM1MTQ2MTkiPiJSZcW+aW0gZGVtb25zdHJhY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9kZW1vX21vZGUiIG1zZ2lkPSI0ODQ0MjA1NjY4NzE4NjM2NTE4Ij4iT21vZ3XEh2kgcmXFvmltIGRlbW9uc3RyYWNpamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaG93X2RlbW9fbW9kZSIgbXNnaWQ9IjIwMTgzMzY2OTc3ODI0NjQwMjkiPiJQcmlrYcW+aSByZcW+aW0gZGVtb25zdHJhY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfZXRoZXJuZXQiIG1zZ2lkPSI1MDQ0MjkwOTYzNTQ5NTAwMTI4Ij4iRXRlcm5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfYWxhcm0iIG1zZ2lkPSI4NTM2MjU2NzUzNTc1ODgxODE4Ij4iQWxhcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3dvcmsiIG1zZ2lkPSI2MDIyNTUzMzI0ODAyODY2MzczIj4iUHJvZmlsIHphIFdvcmsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX2FpcnBsYW5lIiBtc2dpZD0iNzA1NzU3NTUwMTQ3MjI0OTAwMiI+IlJlxb5pbSByYWRhIHUgYXZpb251Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWRkX3RpbGUiIG1zZ2lkPSIyOTk1Mzg5NTEwMjQwNzg2MjIxIj4iRG9kYWogcGxvxI1pY3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJicm9hZGNhc3RfdGlsZSIgbXNnaWQ9IjM4OTQwMzY1MTE3NjMyODkzODMiPiJQbG/EjWljYSB6YSBlbWl0b3ZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX2FsYXJtX3dhcm5pbmdfaW5kZWYiIG1zZ2lkPSIzNDgyOTY2MzQ1NTc4MzE5NjA1Ij4iTmXEh2V0ZSDEjXV0aSBzbGVkZcSHaSBhbGFybSB1IDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiBha28gbmUgaXNrbGp1xI1pdGUgb3ZvIHByZSB0b2dhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iemVuX2FsYXJtX3dhcm5pbmciIG1zZ2lkPSI0NDQ1MzMxMTk1ODIyNDQyOTMiPiJOZcSHZXRlIMSNdXRpIHNsZWRlxIdpIGFsYXJtIHUgPHhsaWZmOmcgaWQ9IldIRU4iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWxhcm1fdGVtcGxhdGUiIG1zZ2lkPSIzOTgwMDYzNDA5MzUwNTIyNzM1Ij4idSA8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhbGFybV90ZW1wbGF0ZV9mYXIiIG1zZ2lkPSI0MjQyMTc5OTgyNTg2NzE0ODEwIj4idSA8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2RldGFpbCIgbXNnaWQ9IjI1NzkzNjkwOTE2NzI5MDIxMDEiPiJCcnphIHBvZGXFoWF2YW5qYSwgPHhsaWZmOmcgaWQ9IlRJVExFIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zdGF0dXNfYmFyX2hvdHNwb3QiIG1zZ2lkPSI0MDk5MzgxMzI5OTU2NDAyODY1Ij4iSG90c3BvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfbWFuYWdlZF9wcm9maWxlIiBtc2dpZD0iNjYxMzY0MTM2MzExMjU4NDEyMCI+IlByb2ZpbCB6YSBXb3JrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVuZXJfd2FybmluZ190aXRsZSIgbXNnaWQ9IjcwOTQ2ODk5MzA3OTMwMzE2ODIiPiJaYWJhdmEgemEgbmVrZSwgYWxpIG5lIHphIHN2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InR1bmVyX3dhcm5pbmciIG1zZ2lkPSI4NzMwNjQ4MTIxOTczNTc1NzAxIj4iVGp1bmVyIHphIGtvcmlzbmnEjWtpIGludGVyZmVqcyBzaXN0ZW1hIHZhbSBwcnXFvmEgZG9kYXRuZSBuYcSNaW5lIHphIHBvZGXFoWF2YW5qZSBpIHByaWxhZ2/EkWF2YW5qZSBBbmRyb2lkIGtvcmlzbmnEjWtvZyBpbnRlcmZlanNhLiBPdmUgZWtzcGVyaW1lbnRhbG5lIGZ1bmtjaWplIG1vZ3UgZGEgc2UgcHJvbWVuZSwgb3RrYcW+dSBpbGkgbmVzdGFudSB1IGJ1ZHXEh2ltIGl6ZGFuamltYS4gQnVkaXRlIG9wcmV6bmkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0idHVuZXJfcGVyc2lzdGVudF93YXJuaW5nIiBtc2dpZD0iODU5NzMzMzc5NTU2NTYyMTc5NSI+Ik92ZSBla3NwZXJpbWVudGFsbmUgZnVua2NpamUgbW9ndSBkYSBzZSBwcm9tZW5lLCBvdGthxb51IGlsaSBuZXN0YW51IHUgYnVkdcSHaW0gaXpkYW5qaW1hLiBCdWRpdGUgb3ByZXpuaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJnb3RfaXQiIG1zZ2lkPSIyMjM5NjUzODM0Mzg3OTcyNjAyIj4iVmHFvmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ0dW5lcl90b2FzdCIgbXNnaWQ9IjYwMzQyOTgxMTA4NDQyODQzOSI+IsSMZXN0aXRhbW8hIFRqdW5lciB6YSBrb3Jpc25pxI1raSBpbnRlcmZlanMgc2lzdGVtYSBqZSBkb2RhdCB1IFBvZGXFoWF2YW5qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlbW92ZV9mcm9tX3NldHRpbmdzIiBtc2dpZD0iODM4OTU5MTkxNjYwMzQwNjM3OCI+IlVrbG9uaSBpeiBQb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZW1vdmVfZnJvbV9zZXR0aW5nc19wcm9tcHQiIG1zZ2lkPSI2MDY5MDg1OTkzMzU1ODg3NzQ4Ij4ixb1lbGl0ZSBsaSBkYSB1a2xvbml0ZSBUanVuZXIgemEga29yaXNuacSNa2kgaW50ZXJmZWpzIHNpc3RlbWEgaXogUG9kZcWhYXZhbmphIGkgZGEgcHJlc3RhbmV0ZSBkYSBrb3Jpc3RpdGUgc3ZlIG5qZWdvdmUgZnVua2NpamU/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbm90X2ZvdW5kIiBtc2dpZD0iMzQ4NDIzMjQ0MzI3Nzk5OTc0Ij4iQXBsaWthY2lqYSBuaWplIGluc3RhbGlyYW5hIG5hIHVyZcSRYWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY2xvY2tfc2Vjb25kcyIgbXNnaWQ9Ijc2ODk1NTQxNDc1NzkxNzk1MDciPiJQcmlrYXp1aiBzZWt1bmRlIG5hIHNhdHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjbG9ja19zZWNvbmRzX2Rlc2MiIG1zZ2lkPSI2MjgyNjkzMDY3MTMwNDcwNjc1Ij4iU2VrdW5kZSBuYSBzYXR1IHNlIHByaWthenVqdSBuYSBzdGF0dXNub2ogdHJhY2kuIFRvIG1vxb5lIGRhIHV0acSNZSBuYSB0cmFqYW5qZSBiYXRlcmlqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxc19yZWFycmFuZ2UiIG1zZ2lkPSI4MDYwOTE4Njk3NTUxMDY4NzY1Ij4iUHJldXJlZGkgQnJ6YSBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJzaG93X2JyaWdodG5lc3MiIG1zZ2lkPSI2NjEzOTMwODQyODA1OTQyNTE5Ij4iUHJpa2HFvmkgb3N2ZXRsamVub3N0IHUgQnJ6aW0gcG9kZcWhYXZhbmppbWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJleHBlcmltZW50YWwiIG1zZ2lkPSI2MTk4MTgyMzE1NTM2NzI2MTYyIj4iRWtzcGVyaW1lbnRhbG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLFvWVsaXRlIGxpIGRhIHVrbGp1xI1pdGUgQmx1ZXRvb3RoPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJEYSBiaXN0ZSBwb3ZlemFsaSB0YXN0YXR1cnUgc2EgdGFibGV0b20sIHBydm8gbW9yYXRlIGRhIHVrbGp1xI1pdGUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlVrbGp1xI1pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iUHJpbWVuaSBuYSBvYmF2ZcWhdGVuamEgbyB0ZW1pIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlByaW1lbmkgbmEgc3ZhIG9iYXZlxaF0ZW5qYSBpeiBvdmUgYXBsaWthY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9raXJhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJNYWxhIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlVvYmnEjWFqZW5hIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlZlbGlrYSB2YcW+bm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlZhxb5ub3N0OiBoaXRubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iT3ZhIG9iYXZlxaF0ZW5qYSBzZSBuaWthZGEgbmUgcHJpa2F6dWp1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlByaWthenVqdSBzZSB1IGRudSBsaXN0ZSBvYmF2ZcWhdGVuamEgYmV6IHp2dWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJPdmEgb2JhdmXFoXRlbmphIHNlIHByaWthenVqdSBiZXogenZ1a2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlByaWthenVqdSBzZSB1IHZyaHUgbGlzdGUgb2JhdmXFoXRlbmphIGkgZW1pdHVqZSBzZSB6dnVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik5ha3JhdGtvIHNlIHByaWthenVqdSBuYSBla3JhbnUgaSBlbWl0dWplIHNlIHp2dWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkpvxaEgcG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iR290b3ZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsbmUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOb8SHbmUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iUHJpbGFnb8SRZW5lIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXBvem5hdGUgYm9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJJem1lbmEgYm9qYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlByaWthxb5pIHBsb8SNaWN1IEJyemEgcG9kZcWhYXZhbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJPbW9ndcSHaSBwcmlsYWdvxJFlbnUgdHJhbnNmb3JtYWNpanUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJQcmltZW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlBvdHZyZGl0ZSBwb2RlxaFhdmFuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJOZWthIHBvZGXFoWF2YW5qYSBib2phIG1vZ3UgZGEgdcSNaW5lIHVyZcSRYWogbmV1cG90cmVibGppdmltLiBLbGlrbml0ZSBuYSBQb3R2cmRpIGRhIGJpc3RlIHBvdHZyZGlsaSBvdmEgcG9kZcWhYXZhbmphIGJvamEsIHBvxaF0byDEh2Ugc2UgdSBzdXByb3Rub20gb3ZhIHBvZGXFoWF2YW5qYSByZXNldG92YXRpIG5ha29uIDEwIHNla3VuZGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXRlcmlqYSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJVxaF0ZWRhIGJhdGVyaWplIG5pamUgZG9zdHVwbmEgdG9rb20gcHVuamVuamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iVcWhdGVkYSBiYXRlcmlqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlNtYW5qdWplIHBlcmZvcm1hbnNlIGkgcG96YWRpbnNrZSBwb2RhdGtlIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1iZy9zdHJpbmdzLnhtbAppbmRleCAwYmJkYmU5Li5mNTcxM2MyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJnL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtYmcvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCX0LLRitC90YrRgiDQtSDQt9Cw0LPQu9GD0YjQtdC9LiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLQoNCw0LHQvtGC0LXQvSDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLQntGC0YXQstGK0YDQu9GP0L3QtSDQvdCwIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i0J/RgNC40LvQvtC20LXQvdC40LXRgtC+IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQtSDQvtGC0YXQstGK0YDQu9C10L3Qvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLQktGB0LjRh9C60Lgg0YHQutC+0YDQvtGI0L3QuCDQv9GA0LjQu9C+0LbQtdC90LjRjyDRgdCwINC+0YLRhdCy0YrRgNC70LXQvdC4LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i0JzQvtCx0LjQu9C90LDRgtCwINGC0L7Rh9C60LAg0LfQsCDQtNC+0YHRgtGK0L8g0YHQtSDQuNC30LrQu9GO0YfQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLQnNC+0LHQuNC70L3QsNGC0LAg0YLQvtGH0LrQsCDQt9CwINC00L7RgdGC0YrQvyDRgdC1INCy0LrQu9GO0YfQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLQn9GA0LXQtNCw0LLQsNC90LXRgtC+INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC+0YIg0LXQutGA0LDQvdCwINGB0L/RgNGPLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+ItCg0LDQsdC+0YLQvdC40Y/RgiDRgNC10LbQuNC8INC1INC40LfQutC70Y7Rh9C10L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i0KDQsNCx0L7RgtC90LjRj9GCINGA0LXQttC40Lwg0LUg0LLQutC70Y7Rh9C10L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i0KDQsNCx0L7RgtC90LjRj9GCINGA0LXQttC40Lwg0LUg0LjQt9C60LvRjtGH0LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0KDQsNCx0L7RgtC90LjRj9GCINGA0LXQttC40Lwg0LUg0LLQutC70Y7Rh9C10L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+ItCv0YDQutC+0YHRgiDQvdCwINC10LrRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+ItCU0LDQvdC90LjRgtC1INC+0YIgMkcg4oCTIDNHINGB0LAg0L/QvtGB0YLQsNCy0LXQvdC4INC90LAg0L/QsNGD0LfQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+ItCU0LDQvdC90LjRgtC1INC+0YIgNEcg0YHQsCDQv9C+0YHRgtCw0LLQtdC90Lgg0L3QsCDQv9Cw0YPQt9CwIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i0JjQt9C/0L7Qu9C30LLQsNC90L46IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLQntCz0YDQsNC90LjRh9C10L3QuNC1INC+0YIgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4i0J/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtTogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0KDQsNCx0L7RgtC10L0g0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLQodC60L7RgNC+0YjQvdC40YLQtSDQstC4INC10LrRgNCw0L3QuCDRgdC1INC/0L7QutCw0LfQstCw0YIg0YLRg9C6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i0JjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9GA0LjQu9C+0LbQtdC90LjQtdGC0L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLRhNC40LrRgdC40YDQsNC90LUg0L3QsCDQtdC60YDQsNC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0YLRitGA0YHQtdC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQvdC1INC80L7QttCwINC00LAg0YHRgtCw0YDRgtC40YDQsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0J7RidC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+ItCY0YHRgtC+0YDQuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQntGJ0LUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLQpdC+0YDQuNC30L7QvdGC0LDQu9C90L4g0YDQsNC30LTQtdC70Y/QvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i0JLQtdGA0YLQuNC60LDQu9C90L4g0YDQsNC30LTQtdC70Y/QvdC1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCf0LXRgNGB0L7QvdCw0LvQuNC30LjRgNCw0L3QviDRgNCw0LfQtNC10LvRj9C90LUiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i0KDQtdC20LjQvNGK0YIg0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsdCw0YLQtdGA0LjRj9GC0LAg0LUg0LLQutC70Y7Rh9C10L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i0J3QsNC80LDQu9GP0LLQsCDQtdGE0LXQutGC0LjQstC90L7RgdGC0YLQsCDQuCDQtNCw0L3QvdC40YLQtSDQvdCwINC30LDQtNC10L0g0L/Qu9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+ItCY0LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0YDQtdC20LjQvNCwINC30LAg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LHQsNGC0LXRgNC40Y/RgtCwIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCh0LrRgNC40YLQviDRgdGK0LTRitGA0LbQsNC90LjQtSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDRidC1INC30LDQv9C+0YfQvdC1INC00LAg0LfQsNGB0L3QtdC80LAg0LLRgdC40YfQutC+LCDQutC+0LXRgtC+INGB0LUg0L/QvtC60LDQt9Cy0LAg0L3QsCDQtdC60YDQsNC90LAg0LLQuC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i0JTQsCDQvdC1INGB0LUg0L/QvtC60LDQt9Cy0LAg0L7RgtC90L7QstC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCY0LfRh9C40YHRgtCy0LDQvdC1INC90LAg0LLRgdC40YfQutC4Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLQntGC0LrQsNC30LLQsNC90LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQuNC30L/RitC70L3Rj9Cy0LAg0YDQvtC70Y/RgtCwINC90LAg0LTQuNCw0LvQvtCz0L7QstC40Y8g0L/RgNC+0LfQvtGA0LXRhiDQt9CwINGB0LjQu9Cw0YLQsCDQvdCwINC30LLRg9C60LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLQlNC+0LrQvtGB0L3QtdGC0LUsINC30LAg0LTQsCDQstGK0LfRgdGC0LDQvdC+0LLQuNGC0LUg0L7RgNC40LPQuNC90LDQu9CwLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLQmNC30L/QvtC70LfQstCw0YLQtSDRgdC70YPQttC10LHQvdC40Y8g0YHQuCDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQuCDQv9GA0L7RhNC40LsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLQotGD0L3QtdGAINC90LAg0YHQuNGB0YLQtdC80L3QuNGPINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC4INC40L3RgtC10YDRhNC10LnRgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+ItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YDQvtGG0LXQvdGC0LAg0L3QsCDQstCz0YDQsNC00LXQvdCw0YLQsCDQsdCw0YLQtdGA0LjRjyI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0JTQsCDRgdC1INCy0LrQu9GO0YfQuCDQu9C4IEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i0JfQsCDQtNCwINGB0LLRitGA0LbQtdGC0LUg0LrQu9Cw0LLQuNCw0YLRg9GA0LDRgtCwINGBINGC0LDQsdC70LXRgtCwINGB0LgsINC/0YrRgNCy0L4g0YLRgNGP0LHQstCwINC00LAg0LLQutC70Y7Rh9C40YLQtSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i0JLQutC70Y7Rh9Cy0LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i0J/RgNC40LvQsNCz0LDQvdC1INC30LAg0LjQt9Cy0LXRgdGC0LjRj9GC0LAg0L3QsCDRgtC10LzQsCDigJ48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLQn9GA0LjQu9Cw0LPQsNC90LUg0LfQsCDQstGB0LjRh9C60Lgg0LjQt9Cy0LXRgdGC0LjRjyDQvtGCINGC0L7QstCwINC/0YDQuNC70L7QttC10L3QuNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCR0LvQvtC60LjRgNCw0L3QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+ItCc0LDQu9C60LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0J3QvtGA0LzQsNC70L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQk9C+0LvRj9C80LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQndC10L7RgtC70L7QttC90LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItCi0LXQt9C4INC40LfQstC10YHRgtC40Y8g0L3QtSDRgdC1INC/0L7QutCw0LfQstCw0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0JHQtdC30LfQstGD0YfQvdC+INC/0L7QutCw0LfQstCw0L3QtSDQvdCw0Lkt0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0LjQt9Cy0LXRgdGC0LjRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0KLQtdC30Lgg0LjQt9Cy0LXRgdGC0LjRjyDRgdC1INC/0L7QutCw0LfQstCw0YIg0LHQtdC3INC30LLRg9C6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9C+0LrQsNC30LLQsNC90LUg0L3QsNC5LdCz0L7RgNC1INCyINGB0L/QuNGB0YrQutCwINGBINC40LfQstC10YHRgtC40Y8g0Lgg0LjQt9C00LDQstCw0L3QtSDQvdCwINC30LLRg9C60L7QsiDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LXQutGA0LDQvdCwINC4INC40LfQtNCw0LLQsNC90LUg0L3QsCDQt9Cy0YPQutC+0LIg0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLQntGJ0LUg0L3QsNGB0YLRgNC+0LnQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i0J3QvtGA0LzQsNC70L3QuCDRhtCy0LXRgtC+0LLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLQndC+0YnQvdC4INGG0LLQtdGC0L7QstC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLQn9C10YDRgdC+0L3QsNC70LjQt9C40YDQsNC90Lgg0YbQstC10YLQvtCy0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10LjQt9Cy0LXRgdGC0L3QuCDRhtCy0LXRgtC+0LLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLQn9GA0L7QvNGP0L3QsCDQvdCwINGG0LLQtdGC0L7QstC10YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0LvQvtGH0LrQsNGC0LAg0LfQsCDQsdGK0YDQt9C4INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i0JDQutGC0LjQstC40YDQsNC90LUg0L3QsCDQv9C10YDRgdC+0L3QsNC70LjQt9C40YDQsNC90L7RgtC+INGC0YDQsNC90YHRhNC+0YDQvNC40YDQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLQn9GA0LjQu9Cw0LPQsNC90LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i0J/QvtGC0LLRitGA0LbQtNCw0LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i0J3Rj9C60L7QuCDQvdCw0YHRgtGA0L7QudC60Lgg0LfQsCDRhtCy0LXRgtC+0LLQtdGC0LUg0LzQvtCz0LDRgiDQtNCwINC90LDQv9GA0LDQstGP0YIg0YLQvtCy0LAg0YPRgdGC0YDQvtC50YHRgtCy0L4g0L3QtdC40LfQv9C+0LvQt9Cy0LDQtdC80L4uINCX0LAg0LTQsCDQs9C4INC/0L7RgtCy0YrRgNC00LjRgtC1LCDQutC70LjQutC90LXRgtC1INCy0YrRgNGF0YMg4oCeT0vigJwuINCSINC/0YDQvtGC0LjQstC10L0g0YHQu9GD0YfQsNC5INGC0LUg0YnQtSDQsdGK0LTQsNGCINC90YPQu9C40YDQsNC90Lgg0YHQu9C10LQgMTAg0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLQkdCw0YLQtdGA0LjRjyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLQoNC10LbQuNC80YrRgiDQt9CwINC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINCx0LDRgtC10YDQuNGP0YLQsCDQvdC1INC1INC90LDQu9C40YbQtSDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+ItCg0LXQttC40Lwg0LfQsCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsdCw0YLQtdGA0LjRj9GC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLQndCw0LzQsNC70Y/QstCwINC10YTQtdC60YLQuNCy0L3QvtGB0YLRgtCwINC4INC00LDQvdC90LjRgtC1INC90LAg0LfQsNC00LXQvSDQv9C70LDQvSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ibi1yQkQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAppbmRleCBlMWMzZDVlLi5iZmNiMjU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWJuLXJCRC9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4Kaw4Ka/4KaCIOCmrOCmvuCmnOCmvuCmqOCniyDgpqzgpqjgp43gpqcg4KaV4Kaw4KeB4Kao4Ke3Ijwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCmleCmvuCmnOCnh+CmsCDgpq7gp4vgpqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgppbgpr7gprDgpr/gppwg4KaV4Kaw4KeB4Kao4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgppbgpr7gprDgpr/gppwg4KaV4Kaw4Ka+IOCmueCmr+CmvOCnh+Cmm+Cnh+CntyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuCmuOCmruCmuOCnjeCmpCDgprjgpr7gpq7gp43gpqrgp43gprDgpqTgpr/gppUg4KaF4KeN4Kav4Ka+4Kaq4KeN4Kay4Ka/4KaV4KeH4Ka24KaoIOCmluCmvuCmsOCmv+CmnCDgppXgprDgpr4g4Ka54Kav4Ka84KeH4Kab4KeH4KWkIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLgpq7gp4vgpqzgpr7gpofgprIg4Ka54Kaf4Ka44KeN4Kaq4KafIOCmrOCmqOCnjeCmpyDgprngpq/gprzgp4fgppvgp4fgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLgpq7gp4vgpqzgpr7gpofgprIg4Ka54Kaf4Ka44KeN4Kaq4KafIOCmmuCmvuCmsuCngSDgprngpq/gprzgp4fgppvgp4fgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLgprjgp43gppXgp43gprDgp4Dgpqgg4KaV4Ka+4Ka44KeN4KafIOCmleCmsOCmviDgpqXgp4fgpq7gp4fgppvgp4fgpaQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgppXgpr7gppzgp4fgprAg4Kau4KeL4KahIOCmrOCmqOCnjeCmpyDgpobgppvgp4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLgppXgpr7gppzgp4fgprAg4Kau4KeL4KahIOCmmuCmvuCmsuCngSDgpobgppvgp4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLgppXgpr7gppzgp4fgprAg4Kau4KeL4KahIOCmrOCmqOCnjeCmpyDgpobgppvgp4fgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i4KaV4Ka+4Kac4KeH4KawIOCmruCni+CmoSDgpprgpr7gprLgp4Eg4KaG4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IuCmquCnjeCmsOCmpuCmsOCnjeCmtuCmqOCnh+CmsCDgpongppzgp43gppzgp43gpqzgprLgpqTgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyDgpqHgp4fgpp/gpr4g4Kas4Ka/4Kaw4Kak4Ka/IOCmpuCnh+Cmk+Cmr+CmvOCmviDgprngpq/gprzgp4fgppvgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyDgpqHgp4fgpp/gpr4g4Kas4Ka/4Kaw4Kak4Ka/IOCmpuCnh+Cmk+Cmr+CmvOCmviDgprngpq/gprzgp4fgppvgp4ciPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4Kas4KeN4Kav4Kas4Ka54KeD4KakIOCmueCmr+CmvOCnh+Cmm+CnhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLgprjgp4Dgpq7gpr4gPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgprjgpqTgprDgp43gppXgpqTgpr4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IuCmleCmvuCmnOCnh+CmsCDgpq7gp4vgpqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i4KaG4Kaq4Kao4Ka+4KawIOCmuOCmvuCmruCnjeCmquCnjeCmsOCmpOCmv+CmlSDgprjgp43gppXgp43gprDgp4Dgpqjgppfgp4HgprLgp4sg4KaP4KaW4Ka+4Kao4KeHIOCmpuCnh+CmluCmviDgpq/gpr7gpqzgp4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgpoXgp43gpq/gpr7gpqrgp43gprLgpr/gppXgp4fgprbgpr7gpqjgp4fgprAg4Kak4Kal4KeN4KavIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4Ka44KeN4KaV4KeN4Kaw4KeA4KaoIOCmquCmv+CmqCDgppXgprDgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4KaF4Kao4KeB4Ka44Kao4KeN4Kan4Ka+4KaoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Ka24KeB4Kaw4KeBIOCmleCmsOCmviDgpq/gpr7gpq/gprzgpqjgpr/gp7ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4KaG4Kaw4KeLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuCmh+CmpOCmv+CmueCmvuCmuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4KaG4Kaw4KeLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPuCmn+CmvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4KaF4Kao4KeB4Kat4KeC4Kau4Ka/4KaVIOCmuOCnjeCmquCnjeCmsuCmv+CmnyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuCmieCmsuCnjeCmsuCmruCnjeCmrCDgprjgp43gpqrgp43gprLgpr/gpp8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4KaV4Ka+4Ka44KeN4Kaf4KauIOCmuOCnjeCmquCnjeCmsuCmv+CmnyDgppXgprDgp4HgpqgiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4Kas4KeN4Kav4Ka+4Kaf4Ka+4Kaw4Ka/IOCmuOCnh+CmreCmvuCmsCDgpprgpr7gprLgp4Eg4Kaw4Kav4Ka84KeH4Kab4KeHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuCmleCmvuCmsOCnjeCmry3gprjgpq7gp43gpqrgpr7gpqbgpqjgpr4g4KaTIOCmquCmtuCnjeCmmuCmvuCmpuCmquCmnyDgpqHgp4fgpp/gpr7gppXgp4cg4KaV4Kau4Ka/4Kav4Ka84KeHIOCmpuCnh+Cmr+CmvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Kas4KeN4Kav4Ka+4Kaf4Ka+4Kaw4Ka/IOCmuOCmnuCnjeCmmuCmr+CmvOCmleCmvuCmsOCngCDgpqzgpqjgp43gpqcg4KaV4Kaw4KeB4KaoIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuCmsuCngeCmleCmvuCmqOCniyDgpqzgpr/gprfgpq/gprzgpqzgprjgp43gpqTgp4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4KaG4Kaq4Kao4Ka+4KawIOCmuOCnjeCmleCnjeCmsOCngOCmqOCnhyDgpqbgp4fgppbgpr7gpqjgp4sg4Ka44KasIOCmleCmv+Cmm+CngSDgppXgp43gpq/gpr7gpqrgpprgpr7gprAg4KaV4Kaw4Ka+IOCmtuCngeCmsOCngSDgppXgprDgpqzgp4fgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4KaG4KawIOCmpuCnh+CmluCmvuCmrOCnh+CmqCDgpqjgpr4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4Ka44Kas4KaV4Ka/4Kab4KeBIOCmuOCmvuCmqyDgppXgprDgp4HgpqgiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuCmquCnjeCmsOCmpOCnjeCmr+CmvuCmluCnjeCmr+CmvuCmqCDgppXgprDgp4HgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgprngprIg4Kat4Kay4Ka/4KaJ4KauIOCmoeCmvuCmr+CmvOCmsuCmlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCmhuCmuOCmsuCmn+CmvyDgpqrgp4HgpqjgpoPgprjgp43gpqXgpr7gpqrgpqgg4KaV4Kaw4Kak4KeHIOCmuOCnjeCmquCmsOCnjeCmtiDgppXgprDgp4Hgpqjgp7ciPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i4KaG4Kaq4Kao4Ka/IOCmhuCmquCmqOCmvuCmsCDgppXgpr7gppzgp4fgprAg4Kaq4KeN4Kaw4KeL4Kar4Ka+4KaH4KayIOCmrOCnjeCmr+CmrOCmueCmvuCmsCDgppXgprDgppvgp4fgpqgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLgprjgpr/gprjgp43gpp/gp4fgpq4gVUkg4Kaf4Ka/4KaJ4Kao4Ka+4KawIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i4KaP4Kau4KeN4Kas4KeH4KahIOCmleCmsOCmviDgpqzgp43gpq/gpr7gpp/gpr7gprDgpr/gprAg4Ka24Kak4KaV4Kaw4Ka+IOCmueCmvuCmsCDgpqbgp4fgppbgpr7gpq/gprwiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCDgpprgpr7gprLgp4Eg4KaV4Kaw4Kas4KeH4KaoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLgpobgpqrgpqjgpr7gprAg4Kaf4KeN4Kav4Ka+4Kas4Kay4KeH4Kaf4KeH4KawIOCmuOCmvuCmpeCnhyDgpobgpqrgpqjgpr7gprAg4KaV4KeA4Kas4KeL4Kaw4KeN4KahIOCmuOCmguCmr+CngeCmleCnjeCmpCDgppXgprDgpqTgp4csIOCmhuCmquCmqOCmvuCmleCnhyDgpqrgp43gprDgpqXgpq7gp4cgQmx1ZXRvb3RoIOCmmuCmvuCmsuCngSDgppXgprDgpqTgp4cg4Ka54Kas4KeH4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4Kaa4Ka+4Kay4KeBIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr/gppfgp4HgprLgpr/gpqTgp4cg4Kaq4KeN4Kaw4Kav4Ka84KeL4KaXIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCmj+CmhyDgpoXgp43gpq/gpr7gpqrgp43gprLgpr/gppXgp4fgprbgpqjgp4fgprAg4Kal4KeH4KaV4KeHIOCmuOCmrCDgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr/gpqTgp4cg4Kaq4KeN4Kaw4Kav4Ka84KeL4KaXIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgpoXgpqzgprDgp4Hgpqbgp43gpqciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgppXgpq4g4KaX4KeB4Kaw4KeB4Kak4KeN4KasIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuCmuOCmvuCmp+CmvuCmsOCmoyDgppfgp4HgprDgp4HgpqTgp43gpqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4Kas4KeH4Ka24Ka/IOCml+CngeCmsOCngeCmpOCnjeCmrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuCmnOCmsOCngeCmsOCmvyDgppfgp4HgprDgp4HgpqTgp43gpqwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuCmj+CmhyDgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr/gppfgp4HgprLgpr8g4KaV4KaW4Kao4KeL4KaHIOCmpuCnh+CmluCmvuCmqOCniyDgprngpqzgp4cg4Kao4Ka+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCmrOCmv+CmnOCnjeCmnuCmquCnjeCmpOCmvyDgpqTgpr7gprLgpr/gppXgpr7gprAg4Kao4KeA4Kaa4KeH4KawIOCmheCmguCmtuCnhyDgpqjgpr/gpoPgprbgpqzgp43gpqbgp4cg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4Kao4Ka/4KaD4Ka24Kas4KeN4Kam4KeHIOCmj+CmhyDgpqzgpr/gppzgp43gpp7gpqrgp43gpqTgpr/gppfgp4HgprLgpr8g4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Kas4Ka/4Kac4KeN4Kae4Kaq4KeN4Kak4Ka/IOCmpOCmvuCmsuCmv+CmleCmvuCmsCDgprbgp4DgprDgp43gprfgp4cg4Kam4KeH4KaW4Ka+4Kao4KeLIOCmueCmr+CmvCDgpo/gpqzgpoIg4Ka24Kas4KeN4KamIOCmleCmsOCnhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgprjgp43gppXgp43gprDgp4Dgpqjgp4fgprAg4KaJ4Kaq4Kaw4KeHIOCmpuCnh+CmluCmvuCmqOCniyDgprngpq/gprwg4KaP4Kas4KaCIOCmtuCmrOCnjeCmpiDgppXgprDgp4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCmhuCmsOCniyDgprjgp4fgpp/gpr/gpoLgprgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgprjgpq7gp43gpqrgpqjgp43gpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgprjgp43gpqzgpr7gpq3gpr7gpqzgpr/gppUg4Kaw4KaZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCmsOCmvuCmpOCnh+CmsCDgprDgppkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCmleCmvuCmuOCnjeCmn+CmriDgprDgppkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgpoXgppzgpr7gpqjgpr4g4Kaw4KaZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCmsOCmmSDgprjgpoLgprbgp4vgpqfgpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgpqbgp43gprDgp4HgpqQg4Ka44KeH4Kaf4Ka/4KaC4Ka4IOCmn+CmvuCmh+CmsiDgpqbgp4fgppbgpr7gpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCmleCmvuCmuOCnjeCmn+CmriDgprDgp4Lgpqrgpr7gpqjgp43gpqTgprAg4Ka44KaV4KeN4Ka34KauIOCmleCmsOCngeCmqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCmquCnjeCmsOCmr+CmvOCni+CmlyDgppXgprDgp4HgpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4Ka44KeH4Kaf4Ka/4KaC4Ka4IOCmqOCmv+CmtuCnjeCmmuCmv+CmpCDgppXgprDgp4HgpqgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgppXgpr/gppvgp4Eg4Kaw4KaZ4KeH4KawIOCmuOCnh+Cmn+Cmv+CmguCmuCDgpo/gpocg4Kah4Ka/4Kat4Ka+4KaH4Ka44KaV4KeHIOCmrOCnjeCmr+CmrOCmueCmvuCmsOCnh+CmsCDgpoXgpq/gp4vgppfgp43gpq8g4KaV4Kaw4KeHIOCmpuCmv+CmpOCnhyDgpqrgpr7gprDgp4fgp7cg4KaP4KaHIOCmsOCmmeCnh+CmsCDgprjgp4fgpp/gpr/gpoLgprgg4Kao4Ka/4Ka24KeN4Kaa4Ka/4KakIOCmleCmsOCmpOCnhyDgppPgppXgp4cg4KaPIOCmleCnjeCmsuCmv+CmlSDgppXgprDgp4HgpqgsIOCmheCmqOCnjeCmr+CmpeCmvuCmr+CmvCDgp6fgp6Yg4Ka44KeH4KaV4KeH4Kao4KeN4KahIOCmquCmsOCnhyDgpo/gpocg4Ka44KeH4Kaf4Ka/4KaC4Ka4IOCmquCngeCmqOCmsOCmvuCmr+CmvCDgprjgp4fgpp8g4Ka54Kas4KeH4Ke3Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLgpqzgp43gpq/gpr7gpp/gpr7gprDgpr8gKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4Kaa4Ka+4Kaw4KeN4KacIOCmleCmsOCmvuCmsCDgprjgpq7gpq/gprwg4Kas4KeN4Kav4Ka+4Kaf4Ka+4Kaw4Ka/IOCmuOCnh+CmreCmvuCmsCDgpongpqrgprLgpqzgp43gpqcg4Kao4Kav4Ka8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuCmrOCnjeCmr+CmvuCmn+CmvuCmsOCmvyDgprjgp4fgpq3gpr7gprAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLgppXgpr7gprDgp43gpq8t4Ka44Kau4KeN4Kaq4Ka+4Kam4Kao4Ka+IOCmkyDgpqrgprbgp43gpprgpr7gpqbgpqrgpp8g4Kah4KeH4Kaf4Ka+4KaV4KeHIOCmleCmruCmv+Cmr+CmvOCnhyDgpqbgp4fgpq/gprwiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNhL3N0cmluZ3MueG1sCmluZGV4IGUzNjFlZDAuLmM3YTMwZjAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY2Evc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jYS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iTW9kZSBzaWxlbmNpLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJNb2RlIGRlIGZlaW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJJZ25vcmEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJTXCdoYSBvbcOocyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iU1wnaGFuIGRlc2NhcnRhdCB0b3RlcyBsZXMgYXBsaWNhY2lvbnMgcmVjZW50cy4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IkVsIHB1bnQgZFwnYWNjw6lzIG3DsmJpbCBlc3TDoCBkZXNhY3RpdmF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IkVsIHB1bnQgZFwnYWNjw6lzIG3DsmJpbCBlc3TDoCBhY3RpdmF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IlNcJ2hhIGF0dXJhdCBsXCdlbWlzc2nDsyBkZSBsYSBwYW50YWxsYS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJFbCBtb2RlIGRlIGZlaW5hIGVzdMOgIGRlc2FjdGl2YXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iRWwgbW9kZSBkZSBmZWluYSBlc3TDoCBhY3RpdmF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IlNcJ2hhIGRlc2FjdGl2YXQgZWwgbW9kZSBkZSBmZWluYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iU1wnaGEgYWN0aXZhdCBlbCBtb2RlIGRlIGZlaW5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJCcmlsbGFudG9yIGRlIGxhIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iTGVzIGRhZGVzIDJHLTNHIGVzdGFuIGF0dXJhZGVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iTGVzIGRhZGVzIDRHIGVzdGFuIGF0dXJhZGVzIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVXRpbGl0emF0czogPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkzDrW1pdDogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQWR2ZXJ0aW1lbnQ6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGUgZGUgZmVpbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iQXF1w60gZXMgbW9zdHJlbiBsZXMgdGV2ZXMgcGFudGFsbGVzIHJlY2VudHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mb3JtYWNpw7MgZGUgbFwnYXBsaWNhY2nDsyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImZpeGFjacOzIGRlIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImNlcmNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJObyBzXCdoYSBwb2d1dCBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOpcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtw6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc2nDsyBob3JpdHpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzacOzIHZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IkRpdmlzacOzIHBlcnNvbmFsaXR6YWRhIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkVzdGFsdmkgZGUgYmF0ZXJpYSBhY3RpdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVlaXggZWwgcmVuZGltZW50IGkgbFwnw7pzIGRlIGxlcyBkYWRlcyBlbiBzZWdvbiBwbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmEgbFwnZXN0YWx2aSBkZSBiYXRlcmlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpbmd1dCBhbWFnYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gY29tZW7Dp2Fyw6AgYSBlbnJlZ2lzdHJhciB0b3QgZWwgcXVlIGVzIG1vc3RyaSBhIGxhIHBhbnRhbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJObyBobyB0b3JuaXMgYSBtb3N0cmFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkVzYm9ycmEtaG8gdG90Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJEZW5lZ2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDDqXMgZWwgZGnDoGxlZyBkZSB2b2x1bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRvY2EgcGVyIHJlc3RhdXJhciBsXCdvcmlnaW5hbC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iRXN0w6BzIHV0aWxpdHphbnQgZWwgcGVyZmlsIHByb2Zlc3Npb25hbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlBlcnNvbmFsaXR6YWRvciBkXCdpbnRlcmbDrWNpZSBkXCd1c3VhcmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJNb3N0cmEgZWwgcGVyY2VudGF0Z2UgZGUgbGEgYmF0ZXJpYSBpbnNlcml0Ijwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWb2xzIGFjdGl2YXIgZWwgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJQZXIgY29ubmVjdGFyIGVsIHRlY2xhdCBhbWIgbGEgdGF1bGV0YSwgcHJpbWVyIGhhcyBkXCdhY3RpdmFyIGVsIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBY3RpdmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2EgYSBsZXMgbm90aWZpY2FjaW9ucyBzb2JyZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2EgYSB0b3RlcyBsZXMgbm90aWZpY2FjaW9ucyBkXCdhcXVlc3RhIGFwbGljYWNpw7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlamFkZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnTDoG5jaWEgYmFpeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0w6BuY2lhIG5vcm1hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJJbXBvcnTDoG5jaWEgYWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkltcG9ydMOgbmNpYSB1cmdlbnQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vIG1vc3RyaXMgbWFpIGFxdWVzdGVzIG5vdGlmaWNhY2lvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTW9zdHJhIGRlIG1hbmVyYSBzaWxlbmNpb3NhIGEgbGEgcGFydCBpbmZlcmlvciBkZSBsYSBsbGlzdGEgZGUgbm90aWZpY2FjaW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhIGFxdWVzdGVzIG5vdGlmaWNhY2lvbnMgZGUgbWFuZXJhIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Ik1vc3RyYSBhIGxhIHBhcnQgc3VwZXJpb3IgZGUgbGEgbGxpc3RhIGRlIG5vdGlmaWNhY2lvbnMgaSBlbWV0IHVuIHNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik1vc3RyYSBhIGxhIHBhbnRhbGxhIGkgZW1ldCB1biBzbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTcOpcyBvcGNpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iRmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29sb3JzIG5vcm1hbHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29sb3JzIG5vY3R1cm5zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJDb2xvcnMgcGVyc29uYWxpdHphdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb2xvcnMgZGVzY29uZWd1dHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2FjacOzIGRlbCBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYSBlbCBtb3NhaWMgZGUgQ29uZmlndXJhY2nDsyByw6BwaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBY3RpdmEgbGEgdHJhbnNmb3JtYWNpw7MgcGVyc29uYWxpdHphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWEgbGEgY29uZmlndXJhY2nDsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuZXMgb3BjaW9ucyBkZSBjb25maWd1cmFjacOzIGRlIGNvbG9yIHBvZGVuIGRlaXhhciBlbCBkaXNwb3NpdGl1IGluc2VydmlibGUuIEZlcyBjbGljIGEgRFwnYWNvcmQgcGVyIGNvbmZpcm1hciBsYSBjb25maWd1cmFjacOzIGRlIGNvbG9yOyBlbiBjYXMgY29udHJhcmksIGxhIGNvbmZpZ3VyYWNpw7MgZXMgcmVzdGFibGlyw6AgYWwgY2FwIGRlIDEwIHNlZ29ucy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyaWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iTGEgZnVuY2nDsyBFc3RhbHZpIGRlIGJhdGVyaWEgbm8gZXN0w6AgZGlzcG9uaWJsZSBkdXJhbnQgbGEgY8OgcnJlZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iRXN0YWx2aSBkZSBiYXRlcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUmVkdWVpeCBlbCByZW5kaW1lbnQgaSBsZXMgZGFkZXMgZW4gc2Vnb24gcGxhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1jcy9zdHJpbmdzLnhtbAppbmRleCAxMWE5YmJlLi5kZjE4MzQ3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWNzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtY3Mvc3RyaW5ncy54bWwKQEAgLTE2Myw4ICsxNjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlRpY2jDqSB2eXp2w6FuxJtuw60uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IlByYWNvdm7DrSByZcW+aW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IlphdsWZw610IGFwbGlrYWNpIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iQXBsaWthY2UgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGJ5bGEgb2RlYnLDoW5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlbFoWVjaG55IG5hcG9zbGVkeSBwb3XFvml0w6kgYXBsaWthY2UgYnlseSBvZHN0cmFuxJtueS4iPC9zdHJpbmc+CkBAIC0yMTYsMTQgKzIxNSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik1vYmlsZSBob3RzcG90IGplIHZ5cG51dMO9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsZSBob3RzcG90IGplIHphcG51dMO9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+Ik9kZXPDrWzDoW7DrSBvYnJhem92a3kgemFzdGF2ZW5vLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IlByYWNvdm7DrSByZcW+aW0gdnlwbnV0w70iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJQcmFjb3Zuw60gcmXFvmltIHphcG51dMO9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iUHJhY292bsOtIHJlxb5pbSBqZSB2eXBudXTDvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iUHJhY292bsOtIHJlxb5pbSBqZSB6YXBudXTDvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iSmFzIGRpc3BsZWplIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iRGF0YSAyRyBhwqAzRyBqc291IHBvemFzdGF2ZW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iRGF0YSA0RyBqc291IHBvemFzdGF2ZW5hIjwvc3RyaW5nPgpAQCAtMzAxLDE1ICsyOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVnl1xb5pdG86IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJMaW1pdDogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iVXBvem9ybsSbbsOtIHDFmWkgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iUHJhY292bsOtIHJlxb5pbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJaZGUgYnVkb3Ugem9icmF6ZW55IHZhxaFlIHBvc2xlZG7DrSBvYnJhem92a3kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJJbmZvcm1hY2UgbyBhcGxpa2FjaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+InDFmWlwbnV0w60gb2JyYXpvdmt5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InZ5aGxlZGF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJBcGxpa2FjaSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbmVsemUgc3B1c3RpdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iRGFsxaHDrSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iamXFoXTEmyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlZvZG9yb3Zuw6kgcm96ZMSbbGVuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWvDoWxuw60gcm96ZMSbbGVuw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iVmxhc3Ruw60gcm96ZMSbbGVuw60iPC9zdHJpbmc+CkBAIC0zNzIsNyArMzY2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUmXFvmltIMOac3BvcmEgYmF0ZXJpZSBqZSB6YXBudXTDvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iT21lenVqZSB2w71rb24gYSBkYXRhIG5hIHBvemFkw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlZ5cG5vdXQgw7pzcG9ydSBiYXRlcmllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNrcnl0w70gb2JzYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IkFwbGlrYWNlIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gemHEjW5lIHphem5hbWVuw6F2YXQgdsWhZSwgY28gamUgem9icmF6ZW5vIG5hIG9icmF6b3ZjZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVHV0byB6cHLDoXZ1IHDFmcOtxaF0xJsgbmV6b2JyYXpvdmF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlNtYXphdCB2xaFlIjwvc3RyaW5nPgpAQCAtNDE3LDggKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJPZG3DrXRub3V0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gamUgZGlhbG9nIGhsYXNpdG9zdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJLbGVwbnV0w61tIG9ibm92w610ZSBvcmlnaW7DoWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlBvdcW+w612w6F0ZSBwcmFjb3Zuw60gcHJvZmlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iTsOhc3Ryb2ogbmEgbGFkxJtuw60gdcW+aXZhdGVsc2vDqWhvIHJvemhyYW7DrSBzeXN0w6ltdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlpvYnJhem92YXQgdmxvxb5lbsOpIHByb2NlbnRvIG5hYml0w60gYmF0ZXJpZSI8L3N0cmluZz4KQEAgLTQ1OCw0ICs0NTAsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iWmFwbm91dCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkNoY2V0ZS1saSBrbMOhdmVzbmljaSBwxZlpcG9qaXQga8KgdGFibGV0dSwgbmVqZMWZw612ZSBtdXPDrXRlIHphcG5vdXQgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlphcG5vdXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJQb3XFvsOtdCB1wqBvem7DoW1lbsOtIHrCoGFwbGlrYWNlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlBvdcW+w610IHXCoHbFoWVjaCBvem7DoW1lbsOtIHrCoHTDqXRvIGFwbGlrYWNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tvdsOhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJOw616a8OhIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3Jtw6FsbsOtIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJWeXNva8OhIGTFr2xlxb5pdG9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudG7DrSBkxa9sZcW+aXRvc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IlRhdG8gb3puw6FtZW7DrSBuaWtkeSBuZXpvYnJhem92YXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEga29uY2kgc2V6bmFtdSBiZXogenZ1a292w6lobyB1cG96b3JuxJtuw60iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlRhdG8gb3puw6FtZW7DrSB6b2JyYXpvdmF0IGJleiB6dnVrb3bDqWhvIHVwb3pvcm7Em27DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgbmEgemHEjcOhdGt1IHNlem5hbXUgYcKgdXBvem9ybml0IG5hIG7EmyB6dnVrZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iVGF0byBvem7DoW1lbsOtIHpvYnJhem92YXQgcMWZw61tbyBuYSBvYnJhem92Y2UgYcKgdXBvem9ybml0IG5hIG7EmyB6dnVrZW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkRhbMWhw60gbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkhvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm3DoWxuw60gYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTm/EjW7DrSBiYXJ2eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iVmxhc3Ruw60gYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXpuw6Ftw6kgYmFydnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iWm3Em25hIGJhcmV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iWm9icmF6aXQgZGxhxb5kaWNpIFJ5Y2hsw6kgbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iVW1vxb5uaXQgcMWZZXZvZCBuYSB2bGFzdG7DrSBiYXJ2eSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlBvdcW+w610Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ik92xJvFmWVuw60gbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik7Em2t0ZXLDoSBuYXN0YXZlbsOtIGJhcmV2IG1vaG91IHpwxa9zb2JpdCwgxb5lIHphxZnDrXplbsOtIG5lYnVkZSBwb3XFvml0ZWxuw6kuIEtsaWtudXTDrW0gbmEgT0sgdG90byBuYXN0YXZlbsOtIGJhcmV2IHBvdHZyZMOtdGUsIHbCoG9wYcSNbsOpbSBwxZnDrXBhZMSbIHNlIG5hc3RhdmVuw60gcG8gMTAgc2VrdW5kw6FjaCByZXNldHVqZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyaWUgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPsKgJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJTcG/FmWnEjSBiYXRlcmllIHDFmWkgbmFiw61qZW7DrSBuZW7DrSBrwqBkaXNwb3ppY2kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IlNwb8WZacSNIGJhdGVyaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJPbWV6dWplIHbDvWtvbiBhwqBkYXRhIG5hIHBvemFkw60iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRhL3N0cmluZ3MueG1sCmluZGV4IGFlZjEwMzcuLmQ2OWU5NDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1kYS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iTHlkbMO4cy4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iQXJiZWpkc3RpbHN0YW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJBZnZpcyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBlciBhbm51bGxlcmV0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkFsbGUgZGUgc2VuZXN0ZSBhcHBsaWthdGlvbmVyIGVyIGx1a2tldC4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik1vYmlsaG90c3BvdCBlciBzbMOlZXQgZnJhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsaG90c3BvdCBlciBzbMOlZXQgdGlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkNhc3RpbmcgYWYgZGluIHNrw6ZybSBlciBzdG9wcGV0LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IkFyYmVqZHN0aWxzdGFuZCBlciBzbMOlZXQgZnJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkFyYmVqZHN0aWxzdGFuZCBlciBzbMOlZXQgdGlsLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IkFyYmVqZHN0aWxzdGFuZCBlciBzbMOlZXQgZnJhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJBcmJlamRzdGlsc3RhbmQgZXIgc2zDpWV0IHRpbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iU2vDpnJtZW5zIGx5c3N0eXJrZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHLWRhdGEgZXIgc2F0IHDDpSBwYXVzZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHLWRhdGEgZXIgc2F0IHDDpSBwYXVzZSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBicnVndCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJHcsOmbnNlOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBZHZhcnNlbCB2ZWQgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iQXJiZWpkc3RpbHN0YW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IkRpbmUgc2VuZXN0ZSBza8Omcm1lIHZpc2VzIGhlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+Ik9wbHlzbmluZ2VyIG9tIGFwcGxpa2F0aW9uZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJibGl2IGkgYXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InPDuGciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBrdW5uZSBpa2tlIHN0YXJ0ZXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik1lcmUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yaWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtZXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJPcGRlbCB2YW5kcmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iT3BkZWwgbG9kcmV0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Ik9wZGVsIGJydWdlcmRlZmluZXJldCI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJCYXR0ZXJpc3BhcmVmdW5rdGlvbiBlciBzbMOlZXQgdGlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZXJlciB5ZGVldm5lIG9nIGJhZ2dydW5kc2RhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlYWt0aXZlciBiYXR0ZXJpc3BhcmVmdW5rdGlvbiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbmRob2xkZXQgZXIgc2tqdWx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHZpbCBiZWd5bmRlIGF0IG9wdGFnZSBhbHQsIGh2YWQgZGVyIHZpc2VzIHDDpSBkaW4gc2vDpnJtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJWaXMgaWtrZSBpZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlJ5ZCBhbHQiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IkFmdmlzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gZXIgZGlhbG9nYm9rc2VuIGZvciBseWRzdHlya2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJUcnlrIGZvciBhdCBnZW5kYW5uZSBvcmlnaW5hbGVuLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJEdSBicnVnZXIgZGluIGFyYmVqZHNwcm9maWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTeXN0ZW0gVUkgVHVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJWaXMgcHJvY2VudCBmb3IgZGV0IGluZGJ5Z2dlZGUgYmF0dGVyaSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iVmlsIGR1IHNsw6UgQmx1ZXRvb3RoIHRpbD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iQmx1ZXRvb3RoIHNrYWwgdsOmcmUgc2zDpWV0IHRpbCwgZsO4ciBkdSBrYW4ga255dHRlIGRpdCB0YXN0YXR1ciB0aWwgZGluIHRhYmxldC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJTbMOlIHRpbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFudmVuZCBmb3IgdW5kZXJyZXRuaW5nZXIgdmVkcsO4cmVuZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQW52ZW5kIGZvciBhbGxlIHVuZGVycmV0bmluZ2VyIGZyYSBkZW5uZSBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxva2VyZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJMaWxsZSB2aWd0aWdoZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybWFsIHZpZ3RpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJTdG9yIHZpZ3RpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlByZXNzZXJlbmRlIHZpZ3RpZ2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iVmlzIGFsZHJpZyBkaXNzZSB1bmRlcnJldG5pbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJWaXMgbHlkbMO4c3QgbmVkZXJzdCBww6UgbGlzdGVuIG92ZXIgdW5kZXJyZXRuaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlZpcyBkaXNzZSB1bmRlcnJldG5pbmdlciBseWRsw7hzdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVmlzIMO4dmVyc3QgcMOlIGxpc3RlbiBvdmVyIHVuZGVycmV0bmluZ2VyLCBvZyBnaXYgbHlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IlZpcyBww6Ugc2vDpnJtZW4sIG9nIGdpdiBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZXJlIGluZHN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGw6ZyZGlnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQWxtaW5kZWxpZ2UgZmFydmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5hdHRlZmFydmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJUaWxwYXNzZWRlIGZhcnZlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVrZW5kdGUgZmFydmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IkZhcnZlw6ZuZHJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJWaXMgZmVsdGV0IEh1cnRpZ2UgaW5kc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWt0aXbDqXIgdGlscGFzc2V0IGZhcnZlw6ZuZHJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBbnZlbmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmVrcsOmZnQgaW5kc3RpbGxpbmdlcm5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iTm9nbGUgZmFydmVpbmRzdGlsbGluZ2VyIGthbiBtZWRmw7hyZSwgYXQgZHUgaWtrZSBrYW4gYnJ1Z2UgZW5oZWRlbi4gS2xpayBww6UgT0sgZm9yIGF0IGJla3LDpmZ0ZSBkaXNzZSBmYXJ2ZWluZHN0aWxsaW5nZXIuIEVsbGVycyBudWxzdGlsbGVzIGRpc3NlIGluZHN0aWxsaW5nZXIgZWZ0ZXIgdGkgc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXR0ZXJpICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4gJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJCYXR0ZXJpc3BhcmVmdW5rdGlvbmVuIGVyIGlra2UgdGlsZ8OmbmdlbGlnIHVuZGVyIG9wbGFkbmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJCYXR0ZXJpc3BhcmVmdW5rdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlJlZHVjZXJlciB5ZGVldm5lIG9nIGJhZ2dydW5kc2RhdGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCmluZGV4IDZiYTFhOGUuLjllMTdmMjUzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWRlL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZGUvc3RyaW5ncy54bWwKQEAgLTM1LDcgKzM1LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfbG93X3RpdGxlIiBtc2dpZD0iNjQ1NjM4NTkyNzQwOTc0MjQzNyI+IkFra3UgaXN0IHNjaHdhY2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd19wZXJjZW50X2Zvcm1hdCIgbXNnaWQ9IjI5MDA5NDA1MTEyMDEzODA3NzUiPiI8eGxpZmY6ZyBpZD0iUEVSQ0VOVEFHRSI+JXM8L3hsaWZmOmc+IHZlcmJsZWliZW5kIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfcGVyY2VudF9mb3JtYXRfc2F2ZXJfc3RhcnRlZCIgbXNnaWQ9IjY4NTkyMzU1ODQwMzUzMzg4MzMiPiI8eGxpZmY6ZyBpZD0iUEVSQ0VOVEFHRSI+JXM8L3hsaWZmOmc+IHZlcmJsZWliZW5kLiBEZXIgRW5lcmdpZXNwYXJtb2R1cyBpc3QgYWt0aXZpZXJ0LiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0ItQXVmbGFkdW5nIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LlxuVmVyd2VuZGVuIFNpZSBkYXMgbWl0Z2VsaWVmZXJ0ZSBBdWZsYWRlZ2Vyw6R0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfY2hhcmdlciIgbXNnaWQ9IjQ1NDkxMDU5OTY3NDA1MjI1MjMiPiJVU0ItQXVmbGFkdW5nIHdpcmQgbmljaHQgdW50ZXJzdMO8dHp0LlxuVmVyd2VuZGUgZGFzIG1pdGdlbGllZmVydGUgQXVmbGFkZWdlcsOkdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXJfdGl0bGUiIG1zZ2lkPSIzNTE1NzQwMzgyNTcyNzk4NDYwIj4iTGFkZW4gcGVyIFVTQiB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX2NoYXJnZXJfdGV4dCIgbXNnaWQ9IjU0NzQ5OTcyODc5NTM4OTI3MTAiPiJWZXJ3ZW5kZW4gU2llIG51ciBkYXMgaW0gTGllZmVydW1mYW5nIGVudGhhbHRlbmUgTGFkZWdlcsOkdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2xvd193aHkiIG1zZ2lkPSI0NTUzNjAwMjg3NjM5MTk4MTExIj4iRWluc3RlbGx1bmdlbiI8L3N0cmluZz4KQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IktsaW5nZWx0b24gbGF1dGxvcyI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJBcmJlaXRzbW9kdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBiZWVuZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBlbnRmZXJudCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkFsbGUga8O8cnpsaWNoIHZlcndlbmRldGVuIEFwcHMgd3VyZGVuIGVudGZlcm50LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iRGVyIG1vYmlsZSBIb3RzcG90IGlzdCBkZWFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJEZXIgbW9iaWxlIEhvdHNwb3QgaXN0IGFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJEaWUgQmlsZHNjaGlybcO8YmVydHJhZ3VuZyB3dXJkZSBhbmdlaGFsdGVuLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IkFyYmVpdHNtb2R1cyBhdXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iQXJiZWl0c21vZHVzIGFuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IkFyYmVpdHNtb2R1cyBkZWFrdGl2aWVydC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iQXJiZWl0c21vZHVzIGFrdGl2aWVydC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iSGVsbGlna2VpdCBkZXMgRGlzcGxheXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0vM0ctRGF0ZW4gcGF1c2llcnQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0Ry1EYXRlbiBwYXVzaWVydCI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiB2ZXJ3ZW5kZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBEYXRlbmxpbWl0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJXYXJudW5nIGbDvHIgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iQXJiZWl0c21vZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IkhpZXIgc2VoZW4gU2llIElocmUgenVsZXR6dCBnZcO2ZmZuZXRlbiBBcHBzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkFwcC1JbmZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4iQmlsZHNjaGlybWZpeGllcnVuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJTdWNoZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNZWhyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IlZlcmxhdWYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB3ZWl0ZXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJHZXRlaWx0ZSBTY2hhbHRmbMOkY2hlIOKAkyBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iR2V0ZWlsdGUgU2NoYWx0ZmzDpGNoZSDigJMgdmVydGlrYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iR2V0ZWlsdGUgU2NoYWx0ZmzDpGNoZSDigJMgYmVudXR6ZXJkZWZpbmllcnQiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iRW5lcmdpZXNwYXJtb2R1cyBpc3QgYWt0aXZpZXJ0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHV6aWVydW5nIGRlciBMZWlzdHVuZyB1bmQgSGludGVyZ3J1bmRkYXRlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRW5lcmdpZXNwYXJtb2R1cyBkZWFrdGl2aWVyZW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5oYWx0ZSBhdXNnZWJsZW5kZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gbmltbXQgYWxsZSBhdWYgSWhyZW0gQmlsZHNjaGlybSBhbmdlemVpZ3RlbiBBa3Rpdml0w6R0ZW4gYXVmLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOaWNodCBlcm5ldXQgYW56ZWlnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQWxsZSBsw7ZzY2hlbiI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iQWJsZWhuZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiByZWdlbHQgZGllIExhdXRzdMOkcmtlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+Ilp1bSBXaWVkZXJoZXJzdGVsbGVuIGRlcyBPcmlnaW5hbHMgaGllciB0aXBwZW4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IlwiLCBcIiAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJTaWUgdmVyd2VuZGVuIElociBBcmJlaXRzcHJvZmlsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSBUdW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IkVpbmdlYmV0dGV0ZSBBa2t1LVByb3plbnR6YWhsIGFuemVpZ2VuIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGggYWt0aXZpZXJlbj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iWnVtIFZlcmJpbmRlbiB2b24gVGFzdGF0dXIgdW5kIFRhYmxldCBtdXNzIEJsdWV0b290aCBha3RpdmllcnQgc2Vpbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBa3RpdmllcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iRsO8ciBCZW5hY2hyaWNodGlndW5nZW4gw7xiZXIgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFud2VuZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXVmIGFsbGUgQmVuYWNocmljaHRpZ3VuZ2VuIGRpZXNlciBBcHAgYW53ZW5kZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvY2tpZXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iR2VyaW5nZSBXaWNodGlna2VpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJSZWd1bMOkcmUgV2ljaHRpZ2tlaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSG9oZSBXaWNodGlna2VpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlNlaHIgaG9oZSBXaWNodGlna2VpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iRGllc2UgQmVuYWNocmljaHRpZ3VuZ2VuIG5pZW1hbHMgYW56ZWlnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iT2huZSBUb24gYW0gRW5kZSBkZXIgQmVuYWNocmljaHRpZ3VuZ3NsaXN0ZSBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iRGllc2UgQmVuYWNocmljaHRpZ3VuZ2VuIG9obmUgVG9uIGFuemVpZ2VuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNaXQgVG9uIGdhbnogb2JlbiBpbiBkZXIgQmVuYWNocmljaHRpZ3VuZ3NsaXN0ZSBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNaXQgVG9uIGF1ZiBkZW0gRGlzcGxheSBlaW5ibGVuZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJXZWl0ZXJlIEVpbnN0ZWxsdW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGZXJ0aWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJTdGFuZGFyZGZhcmJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYWNodGZhcmJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQmVudXR6ZXJkZWZpbmllcnRlIEZhcmJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVuYmVrYW5udGUgRmFyYmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IkZhcmJlbiDDpG5kZXJuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iS2FjaGVsIFwiU2NobmVsbGVpbnN0ZWxsdW5nZW5cIiBhbnplaWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQmVudXR6ZXJkZWZpbmllcnRlIEFucGFzc3VuZyBha3RpdmllcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iw5xiZXJuZWhtZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iRWluc3RlbGx1bmdlbiBiZXN0w6R0aWdlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkVpbmlnZSBGYXJiZWluc3RlbGx1bmdlbiBrw7ZubmVuIGRhenUgZsO8aHJlbiwgZGFzcyBkYXMgR2Vyw6R0IG5pY2h0IG1laHIgZ2VudXR6dCB3ZXJkZW4ga2Fubi4gS2xpY2tlIGF1ZiBcIk9LXCIsIHVtIGRpZXNlIEZhcmJlaW5zdGVsbHVuZ2VuIHp1IGJlc3TDpHRpZ2VuLiBBbmRlcmVuZmFsbHMgd2VyZGVuIGRpZXNlIEVpbnN0ZWxsdW5nZW4gaW4gMTDCoFNla3VuZGVuIHp1csO8Y2tnZXNldHp0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQWtrdSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+wqAlJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkRlciBFbmVyZ2llc3Bhcm1vZHVzIGlzdCBiZWltIEF1ZmxhZGVuIG5pY2h0IHZlcmbDvGdiYXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkVuZXJnaWVzcGFybW9kdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1emllcnVuZyBkZXIgTGVpc3R1bmcgdW5kIEhpbnRlcmdydW5kZGF0ZW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVsL3N0cmluZ3MueG1sCmluZGV4IGM5YzdlZmIuLmZiMDk2NjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZWwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbC9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4izpXOuc60zr/PgM6/zq/Ot8+Dzrcgzq7Ph86/z4Ugz4PPhM6/IM6xzrjPjM+Bz4XOss6/LiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLOm861zrnPhM6/z4XPgc6zzq/OsSDOtc+BzrPOsc+Dzq/Osc+CIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLOoM6xz4HOrM6yzrvOtc+IzrcgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiLOkc+Azr/Pgc+Bzq/Phs64zrfOus6xzr0gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+Is6IzrPOuc69zrUgz4DOsc+BzqzOss67zrXPiM63IM+MzrvPic69IM+Ez4nOvSDPgM+Bz4zPg8+GzrHPhM+Jzr0gzrXPhs6xz4HOvM6/zrPPjs69LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4izqTOvyDPg863zrzOtc6vzr8gz4DPgc+Mz4POss6xz4POt8+CIM66zrnOvc63z4TOrs+CIM+Dz4XPg866zrXPhc6uz4IgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uzrjOt866zrUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4izqTOvyDPg863zrzOtc6vzr8gz4DPgc+Mz4POss6xz4POt8+CIM66zrnOvc63z4TOrs+CIM+Dz4XPg866zrXPhc6uz4IgzrXOvc61z4HOs86/z4DOv865zq7OuM63zrrOtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLOlyDOvM61z4TOrM60zr/Pg863IM+EzrfPgiDOv864z4zOvc63z4IgzrTOuc6xzrrPjM+AzrfOus61LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+Is6XIM67zrXOuc+Ezr/Phc+BzrPOr86xIM61z4HOs86xz4POr86xz4IgzrXOr869zrHOuSDOsc+AzrXOvc61z4HOs86/z4DOv865zrfOvM6tzr3Oty4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLOlyDOu861zrnPhM6/z4XPgc6zzq/OsSDOtc+BzrPOsc+Dzq/Osc+CIM61zq/Ovc6xzrkgzrXOvc61z4HOs86uLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Is6XIM67zrXOuc+Ezr/Phc+BzrPOr86xIM61z4HOs86xz4POr86xz4IgzrHPgM61zr3Otc+BzrPOv8+Azr/Ouc6uzrjOt866zrUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Is6XIM67zrXOuc+Ezr/Phc+BzrPOr86xIM61z4HOs86xz4POr86xz4IgzrXOvc61z4HOs86/z4DOv865zq7OuM63zrrOtS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4izqbPic+EzrXOuc69z4zPhM63z4TOsSDOv864z4zOvc63z4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiLOpM6xIM60zrXOtM6/zrzOrc69zrEgMkctM0cgz4TOrc64zrfOus6xzr0gz4POtSDPgM6xz43Pg863Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4izqTOsSDOtM61zrTOv868zq3Ovc6xIDRHIM+Ezq3OuM63zrrOsc69IM+DzrUgz4DOsc+Nz4POtyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Is6nz4HOt8+DzrnOvM6/z4DOv865zr/Pjc69z4TOsc65IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLOjM+BzrnOvyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiLOoM+Bzr/Otc65zrTOv8+Azr/Or863z4POtyDOs865zrEgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4izpvOtc65z4TOv8+Fz4HOs86vzrEgzrXPgc6zzrHPg86vzrHPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLOn865IM+Az4HPjM+Dz4bOsc+EzrXPgiDOv864z4zOvc61z4Igz4POsc+CIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDOtc60z44iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLOoM67zrfPgc6/z4bOv8+Bzq/Otc+CIM61z4bOsc+BzrzOv86zzq7PgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+Is66zrHPgc+Gzq/PhM+Dz4nOvM6xIM6/zrjPjM69zrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLOsc69zrHOts6uz4TOt8+DzrciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Is6UzrXOvSDOrs+EzrHOvSDOtM+Fzr3Osc+Ezq4gzrcgzrXOus66zq/Ovc63z4POtyDPhM63z4IgzrXPhs6xz4HOvM6/zrPOrs+CIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4izqDOtc+BzrnPg8+Dz4zPhM61z4HOsSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLOmc+Dz4TOv8+BzrnOus+MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gzrHOus+MzrzOsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4izp/Pgc65zrbPjM69z4TOuc6/z4IgzrTOuc6xz4fPic+BzrnPg868z4zPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Is6azqzOuM61z4TOv8+CIM60zrnOsc+Hz4nPgc65z4POvM+Mz4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4izqDPgc6/z4POsc+BzrzOv8+DzrzOrc69zr/PgiDOtM65zrHPh8+Jz4HOuc+DzrzPjM+CIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Is6XIM6Vzr7Ov865zrrOv869z4zOvM63z4POtyDOvM+AzrHPhM6xz4HOr86xz4IgzrXOr869zrHOuSDOtc69zrXPgc6zzq4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4izpzOtc65z47Ovc61zrkgz4TOt869IM6xz4DPjM60zr/Pg863IM66zrHOuSDPhM6xIM60zrXOtM6/zrzOrc69zrEgz4DOsc+BzrHPg866zrfOvc6vzr/PhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4izpHPgM61zr3Otc+BLiDOtc6+zr/Ouc66L8+DzrfPgiDOvM+AzrHPhM6xz4HOr86xz4IiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4izprPgc+Fz4bPjCDPgM61z4HOuc61z4fPjM68zrXOvc6/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLOmM6xIM6+zrXOus65zr3Ors+DzrXOuSDOtyDOus6xz4TOsc6zz4HOsc+Gzq4gz4TOv8+FIM+AzrXPgc65zrXPh86/zrzOrc69zr/PhSDPgM6/z4UgzrXOvM+GzrHOvc6vzrbOtc+EzrHOuSDPg8+EzrfOvSDOv864z4zOvc63IM+DzrHPgiDOsc+Az4wgz4TOt869IM61z4bOsc+BzrzOv86zzq4gPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4izp3OsSDOvM63zr0gzrXOvM+GzrHOvc65z4PPhM61zq8gzr7Osc69zqwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4izpTOuc6xzrPPgc6xz4bOriDPjM67z4nOvSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4izpHPgM+Mz4HPgc65z4jOtyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiLOlyDOtc+GzrHPgc68zr/Os86uIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gzrHPgM6/z4TOtc67zrXOryDPhM6/IM+AzrHPgc6szrjPhc+Bzr8gzrTOuc6xzrvPjM6zzr/PhSDOtc67zq3Os8+Hzr/PhSDOrc69z4TOsc+DzrfPgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+Is6RzrPOs86vzr7PhM61IM6zzrnOsSDOtc+AzrHOvc6xz4bOv8+BzqwgzrHPgc+HzrnOus6/z40uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+Is6nz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrUgz4TOvyDPgM+Bzr/Phs6vzrsgzrXPgc6zzrHPg86vzrHPgiDPg86xz4IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTeXN0ZW0gVUkgVHVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLOlc68z4bOrM69zrnPg863IM+Azr/Pg86/z4PPhM6/z40gzrXOvc+Dz4nOvM6xz4TPic68zq3Ovc63z4IgzrzPgM6xz4TOsc+Bzq/Osc+CIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+DzrcgQmx1ZXRvb3RoOyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLOk865zrEgzr3OsSDPg8+Fzr3OtM6tz4POtc+EzrUgz4TOvyDPgM67zrfOus+Ez4HOv867z4zOs865zr8gzrzOtSDPhM6/IHRhYmxldCDPg86xz4IsIM64zrEgz4DPgc6tz4DOtc65IM+Az4HPjs+EzrEgzr3OsSDOtc69zrXPgc6zzr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Is6Vzr3Otc+BzrPOv8+Azr/Or863z4POtyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Is6dzrEgzrXPhs6xz4HOvM6/z4PPhM61zq8gz4PPhM65z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Is6dzrEgzrXPhs6xz4HOvM6/z4PPhM61zq8gz4POtSDPjM67zrXPgiDPhM65z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CIM6xz4DPjCDOsc+Fz4TOrs69IM+EzrfOvSDOtc+GzrHPgc68zr/Os86uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+Is6Rz4DOv866zrvOtc65z4POvM6tzr3Otc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4izpzOuc66z4HOrs+CIM6yzrHPgc+Nz4TOt8+EzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLOms6xzr3Ov869zrnOus6uz4IgzrLOsc+Bz43PhM63z4TOsc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Is6czrXOs86szrvOt8+CIM6yzrHPgc+Nz4TOt8+EzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Is6Vz4DOtc6vzrPOv8+Fz4POtc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLOnc6xIM68zrfOvSDOtc68z4bOsc69zq/Ots6/zr3PhM6xzrkgz4DOv8+Ezq0gzrHPhc+Ezq3PgiDOv865IM61zrnOtM6/z4DOv865zq7Pg861zrnPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLOnc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuSDPg8+Ezr8gzrrOrM+Ez4kgz4TOvM6uzrzOsSDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDPh8+Jz4HOr8+CIM+Ezq/PhM67zr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Is6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM6xz4XPhM6tz4Igzr/OuSDOtc65zrTOv8+Azr/Ouc6uz4POtc65z4Igz4fPic+Bzq/PgiDOrs+Hzr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Is6dzrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65IM+Dz4TOt869IM66zr/Pgc+Fz4bOriDPhM63z4IgzrvOr8+Dz4TOsc+CIM61zrnOtM6/z4DOv865zq7Pg861z4nOvSDOvM61IM6uz4fOvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLOnc6xIM+Az4HOv86yzqzOu867zr/Ovc+EzrHOuSDPg8+EzrfOvSDOv864z4zOvc63IM66zrHOuSDOvc6xIM+Dz4XOvc6/zrTOtc+Nzr/Ovc+EzrHOuSDOsc+Az4wgzrrOrM+Azr/Ouc6/zr0gzq7Ph86/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLOoM61z4HOuc+Dz4PPjM+EzrXPgc61z4Igz4HPhc64zrzOr8+DzrXOuc+CIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4izqTOrc67zr/PgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Is6azrHOvc6/zr3Ouc66zqwgz4fPgc+OzrzOsc+EzrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4izp3Phc+Hz4TOtc+BzrnOvc6sIM+Hz4HPjs68zrHPhM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLOoM+Bzr/Pg86xz4HOvM6/z4POvM6tzr3OsSDPh8+Bz47OvM6xz4TOsSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Is6GzrPOvc+Jz4PPhM6xIM+Hz4HPjs68zrHPhM6xIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Is6kz4HOv8+Azr/PgM6/zq/Ot8+Dzrcgz4fPgc+JzrzOrM+Ez4nOvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Is6VzrzPhs6szr3Ouc+Dzrcgz4DOu86xzrrOuc60zq/Ov8+FIM6Tz4HOrs6zzr/Pgc+Jzr0gz4HPhc64zrzOr8+DzrXPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLOlc69zrXPgc6zzr/PgM6/zq/Ot8+Dzrcgz4DPgc6/z4POsc+BzrzOv8+DzrzOrc69zr/PhSDOvM61z4TOsc+Dz4fOt868zrHPhM65z4POvM6/z40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLOlc+GzrHPgc68zr/Os86uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Is6Vz4DOuc6yzrXOss6xzq/Pic+Dzrcgz4HPhc64zrzOr8+DzrXPic69Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4izp/Pgc65z4POvM6tzr3Otc+CIM+Bz4XOuM68zq/Pg861zrnPgiDPh8+Bz4nOvM6sz4TPic69IM68z4DOv8+BzrXOryDOvc6xIM68zrfOvSDOtc+AzrnPhM+Bzq3PgM6/z4XOvSDPhM63IM+Hz4HOrs+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4PPhc+DzrrOtc+Fzq7Pgi4gzprOrM69z4TOtSDOus67zrnOuiDPg8+EzrfOvSDOtc+AzrnOu86/zrPOriBPSyDOs865zrEgzr3OsSDOtc+AzrnOss61zrLOsc65z47Pg861z4TOtSDOsc+Fz4TOrc+CIM+EzrnPgiDPgc+FzrjOvM6vz4POtc65z4Igz4fPgc+JzrzOrM+Ez4nOvSwgzrTOuc6xz4bOv8+BzrXPhM65zrrOrCDOuM6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc+Gzr/Pgc6sIM6xz4XPhM+Ozr0gz4TPic69IM+Bz4XOuM68zq/Pg861z4nOvSDOvM61z4TOrCDOsc+Az4wgMTAgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4izpzPgM6xz4TOsc+Bzq/OsSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLOlyDOtc6+zr/Ouc66zr/Ovc+MzrzOt8+DzrcgzrzPgM6xz4TOsc+Bzq/Osc+CIM60zrXOvSDOtc6vzr3Osc65IM60zrnOsc64zq3Pg865zrzOtyDOus6xz4TOrCDPhM63IM60zrnOrM+BzrrOtc65zrEgz4TOt8+CIM+Gz4zPgc+EzrnPg863z4IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4izpXOvs6/zrnOus6/zr3PjM68zrfPg863IM68z4DOsc+EzrHPgc6vzrHPgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+Is6czrXOuc+Ozr3Otc65IM+EzrfOvSDOsc+Az4zOtM6/z4POtyDOus6xzrkgz4TOsSDOtM61zrTOv868zq3Ovc6xIM+AzrHPgc6xz4POus63zr3Or86/z4UiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tckFVL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKaW5kZXggZjMwNjFkNy4uYTk2YzIzYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yQVUvc3RyaW5ncy54bWwKQEAgLTMwMSw3ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InNlYXJjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iQ291bGQgbm90IHN0YXJ0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTW9yZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gTW9yZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iU3BsaXQgSG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlNwbGl0IFZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlNwbGl0IEN1c3RvbWlzZWQiPC9zdHJpbmc+CkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyeSBzYXZlciBpcyBvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudHMgaGlkZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHdpbGwgc3RhcnQgY2FwdHVyaW5nIGV2ZXJ5dGhpbmcgdGhhdFwncyBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRvblwndCBzaG93IGFnYWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkNsZWFyIGFsbCI8L3N0cmluZz4KQEAgLTQ0OSw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iVHVybiBvbiBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlRvIGNvbm5lY3QgeW91ciBrZXlib2FyZCB3aXRoIHlvdXIgdGFibGV0LCB5b3UgZmlyc3QgaGF2ZSB0byB0dXJuIG9uIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJUdXJuIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbHkgdG8gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBseSB0byBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJMb3cgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWwgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIaWdoIGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmV2ZXIgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUGVlayBvbnRvIHRoZSBzY3JlZW4gYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1vcmUgc2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm1hbCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5pZ2h0IGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkN1c3RvbWlzZWQgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVua25vd24gY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJDb2xvdXIgbW9kaWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iU2hvdyBRdWljayBTZXR0aW5ncyB0aWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJFbmFibGUgY3VzdG9taXNlZCB0cmFuc2Zvcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtIFNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iU29tZSBjb2xvdXIgc2V0dGluZ3MgY2FuIG1ha2UgdGhpcyBkZXZpY2UgdW51c2FibGUuIENsaWNrIE9LIHRvIGNvbmZpcm0gdGhlc2UgY29sb3VyIHNldHRpbmdzLCBvdGhlcndpc2UgdGhlc2Ugc2V0dGluZ3Mgd2lsbCByZXNldCBhZnRlciAxMCBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyeSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJCYXR0ZXJ5IFNhdmVyIG5vdCBhdmFpbGFibGUgZHVyaW5nIGNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcnkgU2F2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tckdCL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKaW5kZXggZjMwNjFkNy4uYTk2YzIzYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1yR0Ivc3RyaW5ncy54bWwKQEAgLTMwMSw3ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InNlYXJjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iQ291bGQgbm90IHN0YXJ0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTW9yZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gTW9yZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iU3BsaXQgSG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlNwbGl0IFZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlNwbGl0IEN1c3RvbWlzZWQiPC9zdHJpbmc+CkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyeSBzYXZlciBpcyBvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudHMgaGlkZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHdpbGwgc3RhcnQgY2FwdHVyaW5nIGV2ZXJ5dGhpbmcgdGhhdFwncyBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRvblwndCBzaG93IGFnYWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkNsZWFyIGFsbCI8L3N0cmluZz4KQEAgLTQ0OSw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iVHVybiBvbiBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlRvIGNvbm5lY3QgeW91ciBrZXlib2FyZCB3aXRoIHlvdXIgdGFibGV0LCB5b3UgZmlyc3QgaGF2ZSB0byB0dXJuIG9uIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJUdXJuIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbHkgdG8gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBseSB0byBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJMb3cgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWwgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIaWdoIGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmV2ZXIgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUGVlayBvbnRvIHRoZSBzY3JlZW4gYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1vcmUgc2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm1hbCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5pZ2h0IGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkN1c3RvbWlzZWQgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVua25vd24gY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJDb2xvdXIgbW9kaWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iU2hvdyBRdWljayBTZXR0aW5ncyB0aWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJFbmFibGUgY3VzdG9taXNlZCB0cmFuc2Zvcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtIFNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iU29tZSBjb2xvdXIgc2V0dGluZ3MgY2FuIG1ha2UgdGhpcyBkZXZpY2UgdW51c2FibGUuIENsaWNrIE9LIHRvIGNvbmZpcm0gdGhlc2UgY29sb3VyIHNldHRpbmdzLCBvdGhlcndpc2UgdGhlc2Ugc2V0dGluZ3Mgd2lsbCByZXNldCBhZnRlciAxMCBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyeSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJCYXR0ZXJ5IFNhdmVyIG5vdCBhdmFpbGFibGUgZHVyaW5nIGNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcnkgU2F2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZW4tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggZjMwNjFkNy4uYTk2YzIzYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lbi1ySU4vc3RyaW5ncy54bWwKQEAgLTMwMSw3ICszMDEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InNlYXJjaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iQ291bGQgbm90IHN0YXJ0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTW9yZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3J5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gTW9yZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iU3BsaXQgSG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlNwbGl0IFZlcnRpY2FsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlNwbGl0IEN1c3RvbWlzZWQiPC9zdHJpbmc+CkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQmF0dGVyeSBzYXZlciBpcyBvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGVudHMgaGlkZGVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHdpbGwgc3RhcnQgY2FwdHVyaW5nIGV2ZXJ5dGhpbmcgdGhhdFwncyBkaXNwbGF5ZWQgb24geW91ciBzY3JlZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkRvblwndCBzaG93IGFnYWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkNsZWFyIGFsbCI8L3N0cmluZz4KQEAgLTQ0OSw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iVHVybiBvbiBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlRvIGNvbm5lY3QgeW91ciBrZXlib2FyZCB3aXRoIHlvdXIgdGFibGV0LCB5b3UgZmlyc3QgaGF2ZSB0byB0dXJuIG9uIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJUdXJuIG9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbHkgdG8gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBseSB0byBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIHRoaXMgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2NrZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJMb3cgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWwgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIaWdoIGltcG9ydGFuY2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQgaW1wb3J0YW5jZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmV2ZXIgc2hvdyB0aGVzZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlNpbGVudGx5IHNob3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbm90aWZpY2F0aW9uIGxpc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9ucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUGVlayBvbnRvIHRoZSBzY3JlZW4gYW5kIG1ha2Ugc291bmQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1vcmUgc2V0dGluZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGaW5pc2hlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm1hbCBjb2xvdXJzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5pZ2h0IGNvbG91cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkN1c3RvbWlzZWQgY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlVua25vd24gY29sb3VycyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJDb2xvdXIgbW9kaWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iU2hvdyBRdWljayBTZXR0aW5ncyB0aWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJFbmFibGUgY3VzdG9taXNlZCB0cmFuc2Zvcm0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBseSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtIFNldHRpbmdzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iU29tZSBjb2xvdXIgc2V0dGluZ3MgY2FuIG1ha2UgdGhpcyBkZXZpY2UgdW51c2FibGUuIENsaWNrIE9LIHRvIGNvbmZpcm0gdGhlc2UgY29sb3VyIHNldHRpbmdzLCBvdGhlcndpc2UgdGhlc2Ugc2V0dGluZ3Mgd2lsbCByZXNldCBhZnRlciAxMCBzZWNvbmRzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyeSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJCYXR0ZXJ5IFNhdmVyIG5vdCBhdmFpbGFibGUgZHVyaW5nIGNoYXJnaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcnkgU2F2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2VzIHBlcmZvcm1hbmNlIGFuZCBiYWNrZ3JvdW5kIGRhdGEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMtclVTL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKaW5kZXggMGQ5ZjU1ZS4uNmJhOGE0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy1yVVMvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlRpbWJyZSBlbiBzaWxlbmNpbyI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJNb2RvIGRlIHRyYWJham8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IlJlY2hhemFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGRlc2NhcnRhZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iU2UgZGVzY2FydGFyb24gdG9kYXMgbGFzIGFwbGljYWNpb25lcyByZWNpZW50ZXMuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJab25hIG3Ds3ZpbCBkZXNhY3RpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlpvbmEgbcOzdmlsIGFjdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iVHJhbnNtaXNpw7NuIGRlIHBhbnRhbGxhIGRldGVuaWRhIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTW9kbyBkZSB0cmFiYWpvIGRlc2FjdGl2YWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iTW9kbyBkZSB0cmFiYWpvIGFjdGl2YWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iU2UgZGVzYWN0aXbDsyBlbCBtb2RvIGRlIHRyYWJham8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IlNlIGFjdGl2w7MgZWwgbW9kbyBkZSB0cmFiYWpvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJCcmlsbG8gZGUgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEYXRvcyAyRy0zRyBwYXVzYWRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IkRhdG9zIDRHIHBhdXNhZG9zIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVXRpbGl6YWRvczogPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkzDrW1pdGUgZGUgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQWR2ZXJ0ZW5jaWEgZGUgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iTW9kbyBkZSB0cmFiYWpvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IkxhcyBwYW50YWxsYXMgcmVjaWVudGVzIGFwYXJlY2VuIGFxdcOtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjacOzbiBkZSBsYSBhcGxpY2FjacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IkZpamFyIHBhbnRhbGxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImJ1c2NhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTm8gc2UgcHVkbyBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtw6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc2nDs24gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzacOzbiB2ZXJ0aWNhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEaXZpc2nDs24gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBaG9ycm8gZGUgYmF0ZXLDrWEgYWN0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdWNlIGVsIHJlbmRpbWllbnRvIHkgZWwgdXNvIGRlIGRhdG9zIGVuIHNlZ3VuZG8gcGxhbm8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmFyIGVsIGFob3JybyBkZSBiYXRlcsOtYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW5pZG9zIG9jdWx0b3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gY29tZW56YXLDoSBsYSBjYXB0dXJhIGRlIHRvZG8gbG8gcXVlIHNlIG11ZXN0cmUgZW4gbGEgcGFudGFsbGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5vIHZvbHZlciBhIG1vc3RyYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQm9ycmFyIHRvZG8iPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IlJlY2hhemFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gZXMgZWwgY3VhZHJvIGRlIGRpw6Fsb2dvIGRlIHZvbHVtZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iVG9jYSBwYXJhIHJlc3RhdXJhciBlbCBvcmlnaW5hbC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iRXN0w6FzIHVzYW5kbyB0dSBwZXJmaWwgZGUgdHJhYmFqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlNpbnRvbml6YWRvciBkZSBJVSBkZWwgc2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+Ik1vc3RyYXIgcG9yY2VudGFqZSBkZSBsYSBiYXRlcsOtYSBpbnRlZ3JhZGEiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IsK/QWN0aXZhciBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBhcmEgY29uZWN0YXIgZWwgdGVjbGFkbyBjb24gbGEgdGFibGV0LCBwcmltZXJvIGRlYmVzIGFjdGl2YXIgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbGFzIG5vdGlmaWNhY2lvbmVzIGRlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwbGljYXIgYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgZGUgZXN0YSBhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iUG9jYSBpbXBvcnRhbmNpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW5jaWEgYWx0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5vIG1vc3RyYXIgbnVuY2EgZXN0YXMgbm90aWZpY2FjaW9uZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTW9zdHJhciBlbiBsYSBwYXJ0ZSBpbmZlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpb25lcyBzaW4gZW1pdGlyIHNvbmlkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyBkZSBtYW5lcmEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBlbiBsYSBwYXJ0ZSBzdXBlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpb25lcyB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBlbiBsYSBwYW50YWxsYSB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik3DoXMgb3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJMaXN0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvbG9yZXMgbm9ybWFsZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29sb3JlcyBub2N0dXJub3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvbG9yZXMgcGVyc29uYWxpemFkb3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb2xvcmVzIGRlc2Nvbm9jaWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYWNpw7NuIGRlbCBjb2xvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgZWwgbW9zYWljbyBkZSBDb25maWd1cmFjacOzbiByw6FwaWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJIYWJpbGl0YXIgbGEgdHJhbnNmb3JtYWNpw7NuIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBsYSBjb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuYXMgb3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs24gZGUgY29sb3IgcHVlZGVuIHByb3ZvY2FyIHF1ZSBlbCBkaXNwb3NpdGl2byBxdWVkZSBpbnV0aWxpemFibGUuIEhheiBjbGljIGVuIEFjZXB0YXIgcGFyYSBjb25maXJtYXIgZXN0b3MgcGFyw6FtZXRyb3MgZGUgY29sb3IuIERlIGxvIGNvbnRyYXJpbywgbGEgY29uZmlndXJhY2nDs24gc2UgcmVzdGFibGVjZXLDoSBlbiBkaWV6IHNlZ3VuZG9zLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0ZXLDrWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQWhvcnJvIGRlIGJhdGVyw61hIG5vIGVzdMOhIGRpc3BvbmlibGUgZHVyYW50ZSBsYSBjYXJnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJBaG9ycm8gZGUgYmF0ZXLDrWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2UgZWwgcmVuZGltaWVudG8geSBlbCB1c28gZGUgZGF0b3MgZW4gc2VndW5kbyBwbGFubyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZXMvc3RyaW5ncy54bWwKaW5kZXggYTVhMzljZS4uMDU5ODA3OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1lcy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWVzL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJNb2RvIHNpbGVuY2lvIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+Ik1vZG8gZGUgdHJhYmFqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iSWdub3JhciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IlNlIGhhIGVsaW1pbmFkbyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iU2UgaGFuIGlnbm9yYWRvIHRvZGFzIGxhcyBhcGxpY2FjaW9uZXMgcmVjaWVudGVzLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iUHVudG8gZGUgYWNjZXNvIG3Ds3ZpbCBkZXNhY3RpdmFkby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJQdW50byBkZSBhY2Nlc28gbcOzdmlsIGFjdGl2YWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkVudsOtbyBkZSBwYW50YWxsYSBkZXRlbmlkby4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJNb2RvIGRlIHRyYWJham8gZGVzYWN0aXZhZG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iTW9kbyBkZSB0cmFiYWpvIGFjdGl2YWRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik1vZG8gZGUgdHJhYmFqbyBkZXNhY3RpdmFkby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTW9kbyBkZSB0cmFiYWpvIGFjdGl2YWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJCcmlsbG8gZGUgbGEgcGFudGFsbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEYXRvcyAyRy0zRyBwYXVzYWRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IkRhdG9zIDRHIHBhdXNhZG9zIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IHV0aWxpemFkbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJMw61taXRlIGRlIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IkFkdmVydGVuY2lhIGRlIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZG8gZGUgdHJhYmFqbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJBcXXDrSBhcGFyZWNlcsOhbiB0dXMgcGFudGFsbGFzIHJlY2llbnRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjacOzbiBkZSBsYSBhcGxpY2FjacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImZpamFjacOzbiBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJidXNjYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik5vIHNlIGhhIHBvZGlkbyBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOhcyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBtw6FzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc2nDs24gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzacOzbiB2ZXJ0aWNhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEaXZpc2nDs24gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBaG9ycm8gZGUgYmF0ZXLDrWEgYWN0aXZhZG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmVkdWNlIGVsIHJlbmRpbWllbnRvIHkgZWwgZW52w61vIGRlIGRhdG9zIGVuIHNlZ3VuZG8gcGxhbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlc2FjdGl2YXIgYWhvcnJvIGRlIGJhdGVyw61hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbmlkb3Mgb2N1bHRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBlbXBlemFyw6EgYSBjYXB0dXJhciB0b2RvIGxvIHF1ZSBhcGFyZXpjYSBlbiBsYSBwYW50YWxsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTm8gdm9sdmVyIGEgbW9zdHJhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJCb3JyYXIgdG9kbyI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iUmVjaGF6YXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBlcyBlbCBjdWFkcm8gZGUgZGnDoWxvZ28gZGUgdm9sdW1lbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRvY2EgcGFyYSByZXN0YXVyYXIgbGEgdmVyc2nDs24gb3JpZ2luYWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiJ5ICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkVzdMOhcyB1c2FuZG8gdHUgcGVyZmlsIGRlIHRyYWJham8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJDb25maWd1cmFkb3IgZGUgSVUgZGVsIHNpc3RlbWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJNb3N0cmFyIHBvcmNlbnRhamUgZGUgYmF0ZXLDrWEgaW5zZXJ0YWRvIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLCv0FjdGl2YXIgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJQYXJhIHBvZGVyIGNvbmVjdGFyIHR1IHRlY2xhZG8gYSB0dSB0YWJsZXQsIGRlYmVzIGFjdGl2YXIgZWwgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbGFzIG5vdGlmaWNhY2lvbmVzIGRlIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwbGljYXIgYSB0b2RhcyBsYXMgbm90aWZpY2FjaW9uZXMgZGUgZXN0YSBhcGxpY2FjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdWVhZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJQb2NvIGltcG9ydGFudGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0YW5jaWEgbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ik11eSBpbXBvcnRhbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTm8gbW9zdHJhciBlc3RhcyBub3RpZmljYWNpb25lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIGVuIGxhIHBhcnRlIGluZmVyaW9yIGRlIGxhIGxpc3RhIGRlIG5vdGlmaWNhY2lvbmVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXN0YXMgbm90aWZpY2FjaW9uZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBlbiBsYSBwYXJ0ZSBzdXBlcmlvciBkZSBsYSBsaXN0YSBkZSBub3RpZmljYWNpb25lcyB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBlbiBsYSBwYW50YWxsYSB5IGVtaXRpciBzb25pZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik3DoXMgYWp1c3RlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Ikxpc3RvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29sb3JlcyBub3JtYWxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb2xvcmVzIG5vY3R1cm5vcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ29sb3JlcyBwZXJzb25hbGl6YWRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkNvbG9yZXMgZGVzY29ub2NpZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhY2nDs24gZGUgY29sb3JlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgbW9zYWljbyBkZSBBanVzdGVzIHLDoXBpZG9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJIYWJpbGl0YXIgdHJhbnNmb3JtYWNpw7NuIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBjb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuYXMgb3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs24gZGUgY29sb3IgcHVlZGVuIGhhY2VyIHF1ZSBlbCBkaXNwb3NpdGl2byBubyBzZSBwdWVkYSB1dGlsaXphci4gSGF6IGNsaWMgZW4gQWNlcHRhciBwYXJhIGNvbmZpcm1hciBlc3RhIGNvbmZpZ3VyYWNpw7NuLiBTaSBubyBsbyBoYWNlcywgc2UgcmVzdGFibGVjZXLDoSBlc3RhIGNvbmZpZ3VyYWNpw7NuIGN1YW5kbyB0cmFuc2N1cnJhbiAxMCBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyw61hICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkFob3JybyBkZSBiYXRlcsOtYSBubyBkaXNwb25pYmxlIG1pZW50cmFzIHNlIGNhcmdhIGVsIGRpc3Bvc2l0aXZvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkFob3JybyBkZSBiYXRlcsOtYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlJlZHVjZSBlbCByZW5kaW1pZW50byB5IGxhcyBjb25leGlvbmVzIGF1dG9tw6F0aWNhcyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldC1yRUUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAppbmRleCA3OWFiMWVlLi44ZDI1ZDQ4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV0LXJFRS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iVmFpa25lIGvDtWxpc3RpLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJUw7bDtnJlxb5paW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IlJha2VuZHVzZXN0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBsb29idW1pbmUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ikxvb2J1c2l0ZSByYWtlbmR1c2VzdCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iS8O1aWtpZGVzdCBoaWxqdXRpc3Rlc3QgcmFrZW5kdXN0ZXN0IG9uIGxvb2J1dHVkIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpaWxzaWRlIGxldmlhbGEgb24gdsOkbGphIGzDvGxpdGF0dWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWlsc2lkZSBsZXZpYWxhIG9uIHNpc3NlIGzDvGxpdGF0dWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iRWtyYWFuaWt1dmEgw7xsZWthbmRtaW5lIG9uIHBlYXRhdHVkLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IlTDtsO2cmXFvmlpbSBvbiB2w6RsamFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IlTDtsO2cmXFvmlpbSBvbiBzZWVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IlTDtsO2cmXFvmlpbSBvbiB2w6RsamEgbMO8bGl0YXR1ZC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iVMO2w7ZyZcW+aWltIG9uIHNpc3NlIGzDvGxpdGF0dWQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkVrcmFhbmkgaGVsZWR1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJH4oCTM0cgYW5kbWVrYXN1dHVzIG9uIHBlYXRhdHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcgYW5kbWVrYXN1dHVzIG9uIHBlYXRhdHVkIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IG9uIGthc3V0YXR1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJMaW1paXQ6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4gaG9pYXR1cyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iVMO2w7ZyZcW+aWltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IlRlaWUgdmlpbWFuZSBla3JhYW5pa3V2YSBpbG11YiBzaWlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iUmFrZW5kdXN0ZSB0ZWF2ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImVrcmFhbmlrdXZhIGtpbm5pdGFtaW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Im90c2luZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iUmFrZW5kdXN0IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBlaSBzYWFudWQga8OkaXZpdGFkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iUm9oa2VtIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IkFqYWx1Z3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IlZlZWwgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJIb3Jpc29udGFhbG5lIHBvb2xpdGFtaW5lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iVmVydGlrYWFsbmUgcG9vbGl0YW1pbmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iS29oYW5kYXR1ZCBwb29saXRhbWluZSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBa3Vzw6TDpHN0amEgb24gc2lzc2UgbMO8bGl0YXR1ZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJWw6RoZW5kYWIgasO1dWRsdXN0IGphIHRhdXN0YWFuZG1laWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkFrdXPDpMOkc3RqYSB2w6RsamFsw7xsaXRhbWluZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTaXN1IG9uIHBlaWRldHVkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGhha2thYiBqw6TDpGR2dXN0YW1hIGvDtWlrZSwgbWlkYSBla3JhYW5pbCBrdXZhdGFrc2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IsOEcmEga3V2YSB1dWVzdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVMO8aGplbmRhIGvDtWlrIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJLZWVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IG9uIGhlbGl0dWdldnVzZSBkaWFsb29nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iT3JpZ2luYWFsaSB0YWFzdGFtaXNla3MgcHV1ZHV0YWdlLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJLYXN1dGF0ZSBvbWEgdMO2w7Zwcm9maWlsaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlPDvHN0ZWVtaSBrYXN1dGFqYWxpaWRlc2UgdHV1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iS3V2YSBsaXNhdHVkIGFrdXRhc2VtZSBwcm90c2VudCI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iS2FzIGzDvGxpdGFkYSBCbHVldG9vdGggc2lzc2U/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IktsYXZpYXR1dXJpIMO8aGVuZGFtaXNla3MgdGFodmVsYXJ2dXRpZ2EgcGVhdGUgZXNtYWx0IEJsdWV0b290aGkgc2lzc2UgbMO8bGl0YW1hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkzDvGxpdGEgc2lzc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJSYWtlbmRhIHRlZW1hIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiBtw6RyZ3Vhbm5ldGUgcHVodWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJSYWtlbmRhIHNlbGxlIHJha2VuZHVzZSBrw7VpZ2kgbcOkcmd1YW5uZXRlIHB1aHVsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2tlZXJpdHVkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTWFkYWwgdMOkaHRzdXNlIHRhc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVGF2YWxpbmUgdMOkaHRzdXNlIHRhc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iS8O1cmdlIHTDpGh0c3VzZSB0YXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iS2lpcmVsb29tdWxpbmUgdMOkaHRzdXNlIHRhc2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IsOEcmEga3VuYWdpIG7DpGl0YSBuZWlkIG3DpHJndWFuZGVpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJLdXZhIG3DpHJndWFubmV0ZSBsb2VuZGkgYWxsb3NhcyB2YWlrc2VsdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iS3V2YSBuZWVkIG3DpHJndWFuZGVkIHZhaWtzZWx0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJLdXZhIG3DpHJndWFubmV0ZSBsb2VuZGkgw7xsYW9zYXMga29vcyBoZWxpZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iS3V2YSBla3JhYW5pIHNlcnZhcyBrb29zIGhlbGlnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iUm9oa2VtIHNlYWRlaWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJUYXZhbGlzZWQgdsOkcnZpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLDlmlzZWQgdsOkcnZpZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iS29oYW5kYXR1ZCB2w6RydmlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iVsOkcnZpZCBvbiB0ZWFkbWF0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJWw6RydmkgbXV1dG1pbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJLdXZhIHBhYW4gS2lpcnNlYWRlZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iTHViYSBrb2hhbmRhdHVkIHRlaXNlbmRhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlJha2VuZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iU2VhZGV0ZSBraW5uaXRhbWluZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik3DtW5pIHbDpHJ2aXNlYWRlIGVpIHNhYSBzZWFkZXQgdsO1aWItb2xsYSBrYXN1dGFkYS4gTmVuZGUgdsOkcnZpc2VhZGV0ZSBraW5uaXRhbWlzZWtzIGtsw7Vwc2FrZSBPSywgbXVpZHUgbMOkaHRlc3RhdGFrc2UgbmVlZCBzZWFkZWQgMTAgc2VrdW5kaSBww6RyYXN0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQWt1ICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkFrdXPDpMOkc3RqYSBwb2xlIGxhYWRpbWlzZSBhamFsIHNhYWRhdmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkFrdXPDpMOkc3RqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlbDpGhlbmRhYiBqw7V1ZGx1c3QgamEgdGF1c3RhYW5kbWVpZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ldS1yRVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAppbmRleCA5NGNlMGZmLi5mYzk2YjQyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWV1LXJFUy9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iVG9udS1qb3R6YWlsZWEgaXNpbGlrLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJMYW4gbW9kdWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IkJhenRlcnR1IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGJhenRlcnR1IGRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkF6a2VuIGFwbGlrYXppbyBndXp0aWFrIGJhenRlcnR1IGRhLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iS29uZXhpb2EgcGFydGVrYXR6ZWtvIGF1a2VyYSBkZXNha3RpYmF0dSBlZ2luIGRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IktvbmV4aW9hIHBhcnRla2F0emVrbyBhdWtlcmEgYWt0aWJhdHUgZWdpbiBkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJQYW50YWlsYSBpZ29ydHplYXJpIHV0emkgemFpby4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJEZXNha3RpYmF0dXRhIGRhZ28gbGFuIG1vZHVhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkFrdGliYXR1dGEgZGFnbyBsYW4gbW9kdWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iRGVzYWt0aWJhdHV0YSBkYWdvIGxhbiBtb2R1YS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iQWt0aWJhdHV0YSBkYWdvIGxhbiBtb2R1YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iQmlzdGFyYXR1IGRpc3RpcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyBkYXR1ZW4gZXJhYmlsZXJhIGV0ZW4gZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyBkYXR1ZW4gZXJhYmlsZXJhIGV0ZW4gZGEiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4gZXJhYmlsaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ik11Z2E6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IkFiaXN1YTogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iTGFuIG1vZHVhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IklrdXNpdGFrbyBhemtlbiBwYW50YWlsYWsgZXJha3VzdGVuIGRpcmEgaGVtZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJBcGxpa2F6aW9hcmVuIGluZm9ybWF6aW9hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4icGFudGFpbGEtYWluZ3VyYXR6ZWEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iYmlsYXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJFemluIGl6YW4gZGEgaGFzaSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IkdlaGlhZ28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkJlc3RlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iQmFuYWtldGEgaG9yaXpvbnRhbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJCYW5ha2V0YSBiZXJ0aWthbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iQmFuYWtldGEgcGVydHNvbmFsaXphdHVhIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkJhdGVyaWEgYXVycmV6bGVhIGFrdGliYXR1dGEgZGFnbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJFcnJlbmRpbWVuZHVhIGV0YSBhdHpla28gcGxhbm9rbyBkYXR1YWsgbXVycml6dGVuIGRpdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlc2FrdGliYXR1IGJhdGVyaWEgYXVycmV6dGVrbyBhdWtlcmEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iRWR1a2lhayBlemt1dGF0dXRhIGRhdWRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGFwbGlrYXppb2FrIHBhbnRhaWxhbiBiaXN0YXJhdHplbiBkZW4gZ3V6dGlhIGdyYWJhdHVrbyBkdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iRXogZXJha3V0c2kgYmVycmlybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJHYXJiaXR1IGd1enRpYWsiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IlVrYXR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gZGEgYm9sdW1lbmFyZW4gbGVpaG9hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iVWtpdHUgamF0b3JyaXprb3JhIGxlaGVuZXJhdHpla28iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iV29yayBwcm9maWxhIGVyYWJpbHR6ZW4gYXJpIHphcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTaXN0ZW1ha28gZXJhYmlsdHphaWxlLWludGVyZmF6ZWFyZW4ga29uZmlndXJhdHphaWxlYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IkVyYWt1dHNpIHR4ZXJ0YXR1dGFrbyBiYXRlcmlhcmVuIGVodW5la29hIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGggZWdpbmJpZGVhIGFrdGliYXR1IG5haGkgZHV6dT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iVGVrbGF0dWEgdGFibGV0YXJhIGtvbmVrdGF0emVrbywgQmx1ZXRvb3RoIGVnaW5iaWRlYSBha3RpYmF0dSBiZWhhciBkdXp1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFrdGliYXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBsaWthdHUgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiBnYWlhcmkgYnVydXprbyBqYWtpbmFyYXpwZW5laSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkFwbGlrYXR1IGFwbGlrYXppbyBob25ldGFrbyBqYWtpbmFyYXpwZW4gZ3V6dGllaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9rZWF0dXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iR2FycmFudHppIHR4aWtpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJHYXJyYW50emkgbm9ybWFsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJHYXJyYW50emkgaGFuZGlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iUHJlbWlhemtvYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iRXogZXJha3V0c2kgamFraW5hcmF6cGVuIGhhdWVrIGlub2l6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkVyYWt1dHNpIGpha2luYXJhenBlbiBoYXVlayB6ZXJyZW5kYXJlbiBiZWhlYWxkZWFuLCBiYWluYSBzb2ludXJpayBlZ2luIGdhYmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkVyYWt1dHNpIGpha2luYXJhenBlbiBoYXVlaywgYmFpbmEgc29pbnVyaWsgZWdpbiBnYWJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJFcmFrdXRzaSBqYWtpbmFyYXpwZW4gaGF1ZWsgemVycmVuZGFyZW4gZ29pYWxkZWFuIGV0YSBlZ2luIHNvaW51YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJBZ2VycmFyYXppIGpha2luYXJhenBlbiBoYXVlayBwYW50YWlsYW4gZXRhIGVnaW4gc29pbnVhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJFemFycGVuIGdlaGlhZ28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJFZ2luZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJLb2xvcmUgbm9ybWFsYWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iR2F1ZWtvIGtvbG9yZWFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJLb2xvcmUgcGVydHNvbmFsaXphdHVhayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IktvbG9yZSBlemV6YWd1bmFrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IktvbG9yZS1hbGRha2V0YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IkVyYWt1dHNpIGV6YXJwZW4gYml6a29ycmVuIGxhdXphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJHYWl0dSBpdHh1cmFsZGFrZXRhIHBlcnRzb25hbGl6YXR1YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwbGlrYXR1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkJlcnJldHNpIGV6YXJwZW5hayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJhbGl0ZWtlIGdhaWx1YSBrb2xvcmUtZXphcnBlbiBiYXR6dWVraW4gZXppbiBlcmFiaWxpIGl6YXRlYS4gS29sb3JlLWV6YXJwZW5hayBiZXJyZXN0ZWtvLCBzYWthdHUgQWRvcy4gQmVzdGVsYSwgaGFtYXIgc2VndW5kb3JlbiBidXJ1YW4gYmVycmV6YXJyaWtvIGRpcmEgZXphcnBlbmFrLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0ZXJpYSAoJSUgPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQmF0ZXJpYS1hdXJyZXpsZWEgZXogZGFnbyBlcmFiaWxnYXJyaSBnYWlsdWEga2FyZ2F0emVuIGFyaSBkZW5lYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iQmF0ZXJpYS1hdXJyZXpsZWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJFcnJlbmRpbWVuZHVhIGV0YSBhdHpla28gcGxhbm9rbyBkYXR1ZW4gZXJhYmlsZXJhIG11cnJpenRlbiBkaXR1Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mYS9zdHJpbmdzLnhtbAppbmRleCA5ZmJhZmMyLi4zYTk4ZTljIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZhL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmEvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Itiy2YbaryDYqNuM4oCM2LXYr9inLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLYrdin2YTYqiDaqdin2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Itix2K8g2qnYsdiv2YYgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2YbYp9iv24zYr9mHINqv2LHZgdiq2Ycg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLZh9mF2Ycg2KjYsdmG2KfZhdmH4oCM2YfYp9uMINin2K7bjNixINix2K8g2LTYr9mG2K8uIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLZhtmC2LfZhyDYp9iq2LXYp9mEINiv2LPYqtqv2KfZhyDZh9mF2LHYp9mHINiu2KfZhdmI2LQg2LTYry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLZhtmC2LfZhyDYp9iq2LXYp9mEINiv2LPYqtqv2KfZhyDZh9mF2LHYp9mHINix2YjYtNmGINi02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i2YHYsdiz2KrYp9iv2YYg2LXZgdit2Ycg2YbZhdin24zYtCDZhdiq2YjZgtmBINi02K8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i2K3Yp9mE2Kog2qnYp9ixINiu2KfZhdmI2LQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i2K3Yp9mE2Kog2qnYp9ixINix2YjYtNmGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Itit2KfZhNiqINqp2KfYsSDYrtin2YXZiNi0INi02K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Itit2KfZhNiqINqp2KfYsSDYsdmI2LTZhiDYtNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLYsdmI2LTZhtin24zbjCDZhtmF2KfbjNi02q/YsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IuKAj9iv2KfYr9mHIDJHLTNHINmF2YjZgtiq2KfZiyDZhdiq2YjZgtmBINi02K/ZhyDYp9iz2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiLigI/Yr9in2K/ZhyA0RyDZhdmI2YLYqtin2Ysg2YXYqtmI2YLZgSDYtNiv2Ycg2KfYs9iqIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+INin2LPYqtmB2KfYr9mHINi02K/ZhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+INmF2K3Yr9mI2K/bjNiqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiLZh9i02K/Yp9ixIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Itit2KfZhNiqINqp2KfYsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLYtdmB2K3Zh+KAjNmH2KfbjCDYp9iu24zYsSDYtNmF2Kcg2KfbjNmG2KzYpyDZhtmF2KfbjNin2YYg2YXbjOKAjNi02YjZhtivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i2KfYt9mE2KfYudin2Kog2KjYsdmG2KfZhdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i2b7bjNmGINqp2LHYr9mGINi12YHYrdmHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Itis2LPYqtis2YgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDYtNix2YjYuSDZhti02K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Itio24zYtNiq2LEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i2LPYp9io2YLZhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INmF2YjYsdivINiv24zar9ixIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLYqtmC2LPbjNmFINin2YHZgtuMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i2KrZgtiz24zZhSDYudmF2YjYr9uMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Itiz2YHYp9ix2LTbjCDaqdix2K/ZhiDYqtmC2LPbjNmFIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Itio2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMINix2YjYtNmGINin2LPYqi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i2LnZhdmE2qnYsdivINmIINin2LfZhNin2LnYp9iqINm+2LPigIzYstmF24zZhtmHINix2Kcg2qnYp9mH2LQg2YXbjOKAjNiv2YfYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i2KjZh9uM2YbZh+KAjNiz2KfYstuMINio2KfYqtix24wg2LHYpyDYrtin2YXZiNi0INqp2YbbjNivIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2K3YqtmI2KfZh9inINm+2YbZh9in2YYg2YfYs9iq2YbYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDYtNix2YjYuSDYqNmHINi22KjYtyDZh9ixINqG24zYstuMINmF24zigIzaqdmG2K8g2qnZhyDYr9ixINi12YHYrdmH4oCM2YbZhdin24zYtCDYtNmF2Kcg2YbZhdin24zYtCDYr9in2K/ZhyDZhduM4oCM2LTZiNivLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLYr9mI2KjYp9ix2Ycg2YbYtNin2YYg2K/Yp9iv2Ycg2YbYtNmI2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i2b7Yp9qpINqp2LHYr9mGINmH2YXZhyDZhdmI2KfYsdivIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLYp9is2KfYstmHINmG2K/Yp9ix2K8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDaqdmG2KrYsdmE4oCM2qnZhtmG2K/ZhyDYtdiv2Kcg2KfYs9iqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i2KjYsdin24wg2KjYp9iy24zYp9io24wg2qnZhtiq2LHZhOKAjNqp2YbZhtiv2Ycg2KfYtdmE24zYjCDZhNmF2LMg2qnZhtuM2K8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiLYjCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLYr9ix2K3Yp9mEINin2LPYqtmB2KfYr9mHINin2LIg2YbZhdin24zZhyDaqdin2LHbjOKAjNiq2KfZhiDZh9iz2KrbjNivIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i2KrZhti424zZheKAjNqp2YbZhtiv2Ycg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINiz24zYs9iq2YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLZhtmF2KfbjNi0INiv2LHYtdivINi02KfYsdqYINio2KfYqtix24wg2KzYp9iz2KfYstuMINi02K/ZhyI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i2KjZhNmI2KrZiNirINix2YjYtNmGINi02YjYr9ifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+Itio2LHYp9uMINmF2LHYqtio2Lcg2qnYsdiv2YYg2LXZgdit2YfigIzaqdmE24zYryDYqNinINix2KfbjNin2YbZhyDZhNmI2K3bjNiMINin2KjYqtiv2Kcg2KjYp9uM2K8g2KjZhNmI2KrZiNirINix2Kcg2LHZiNi02YYg2qnZhtuM2K8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i2LHZiNi02YYg2qnYsdiv2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLYp9i52YXYp9mEINio2LEg2LHZiNuMINin2LnZhNin2YbigIzZh9in24wgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i2KfYudmF2KfZhCDYqNixINix2YjbjCDYqtmF2KfZhSDYp9i52YTYp9mG4oCM2YfYp9uMINin24zZhiDYqNix2YbYp9mF2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i2YXYs9iv2YjYryDYtNiv2YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLYp9mH2YXbjNiqINqp2YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i2KfZh9mF24zYqiDZhdi52YXZiNmE24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i2KfZh9mF24zYqiDYstuM2KfYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Itin2YfZhduM2Kog2YHZiNix24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItmH2LHar9iyINin24zZhiDYp9i52YTYp9mG4oCM2YfYpyDZhti02KfZhiDYr9in2K/ZhyDZhti02YjZhtivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Itio2K/ZiNmGINi12K/YpyDYr9ixINm+2KfbjNuM2YYg2YHZh9ix2LPYqiDYp9i52YTYp9mGINmG2LTYp9mGINiv2KfYr9mHINi02YjYryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i2KfbjNmGINin2LnZhNin2YbigIzZh9inINio24zigIzYtdiv2Kcg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNmG2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Itiv2LEg2KjYp9mE2KfbjCDZgdmH2LHYs9iqINin2LnZhNin2YbigIzZh9inINmIINio2Ycg2YfZhdix2KfZhyDYtdiv2Kcg2YbYtNin2YYg2K/Yp9iv2Ycg2LTZiNivIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Itiv2LEg2KzZhNmI24wg2LXZgdit2Ycg2KjZhyDZh9mF2LHYp9mHINi12K/YpyDZhti02KfZhiDYr9in2K/ZhyDYtNmI2K8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Itiq2YbYuNuM2YXYp9iqINio24zYtNiq2LEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLYqtmF2KfZhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Itix2Ybar+KAjNmH2KfbjCDYudin2K/bjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLYsdmG2q/igIzZh9in24wg2LTYqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i2LHZhtqv4oCM2YfYp9uMINiz2YHYp9ix2LTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Itix2Ybar+KAjNmH2KfbjCDZhtin2YXYtNiu2LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i2KfYtdmE2KfYrSDYsdmG2q8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLZhtmF2KfbjNi0INqp2KfYtNuMINiq2YbYuNuM2YXYp9iqINiz2LHbjNi5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLZgdi52KfZhCDaqdix2K/ZhiDYqtio2K/bjNmEINiz2YHYp9ix2LTbjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+Itin2LnZhdin2YTigIwg2qnYsdiv2YYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i2KrYo9uM24zYryDYqtmG2LjbjNmF2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Itio2LnYttuMINin2LIg2KrZhti424zZhdin2Kog2LHZhtqvINmF24zigIzYqtmI2KfZhtmG2K8g2KfbjNmGINiv2LPYqtqv2KfZhyDYsdinINi624zYsdmC2KfYqNmEINin2LPYqtmB2KfYr9mHINqp2YbZhtivLiDYqNix2KfbjCDYqtij24zbjNivINin24zZhiDYqtmG2LjbjNmF2KfYqiDYsdmG2q8g2LHZiNuMIMKr2KrYo9uM24zYr8K7INqp2YTbjNqpINqp2YbbjNiv2Iwg2K/YsSDYutuM2LEg2KfbjNmGINi12YjYsdiqINin24zZhiDYqti624zbjNix2KfYqiDYqNi52K8g2KfYsiDbsduwINir2KfZhtuM2Ycg2KjYp9iy2YbYtNin2YbbjCDZhduM4oCM2LTZiNmG2K8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLYqNin2KrYsduMICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz7ZqtmqKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i2YfZhtqv2KfZhSDYtNin2LHamCDYtNiv2YbYjCDCq9io2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMwrsg2K/YsSDYr9iz2KrYsdizINmG24zYs9iqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+Itio2YfbjNmG2YfigIzYs9in2LLbjCDYqNin2KrYsduMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i2LnZhdmE2qnYsdivINmIINin2LfZhNin2LnYp9iqINm+2LPigIzYstmF24zZhtmHINix2Kcg2qnYp9mH2LQg2YXbjOKAjNiv2YfYryI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZmkvc3RyaW5ncy54bWwKaW5kZXggNmM5ZTlkNi4uOGM5NjNhZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1maS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZpL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJTb2l0dG/DpMOkbmk6IMOkw6RuZXTDtm4uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IlR5w7Z0aWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJIeWzDpHTDpMOkbiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBoeWzDpHR0aWluLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IkthaWtraSB2aWltZWlzaW1tw6R0IHNvdmVsbHVrc2V0IG9uIGh5bMOkdHR5LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWlsaXlodGV5ZGVuIGhvdHNwb3QgcG9pc3RldHRpaW4ga8OkeXTDtnN0w6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWlsaXlodGV5ZGVuIGhvdHNwb3Qgb3RldHRpaW4ga8OkeXR0w7bDtm4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iUnV1ZHVuIGzDpGhldHlzIHB5c8OkeXRldHRpaW4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iVHnDtnRpbGEgb24gcG9pc3RldHR1IGvDpHl0w7ZzdMOkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IlR5w7Z0aWxhIG9uIGvDpHl0w7Zzc8OkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IlR5w7Z0aWxhIHBvaXN0ZXR0aWluIGvDpHl0w7ZzdMOkLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJUecO2dGlsYSBvdGV0dGlpbiBrw6R5dHTDtsO2bi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iTsOkeXTDtm4ga2lya2thdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyR+KAkzNHLXRpZWRvbnNpaXJ0byBrZXNrZXl0ZXR0aWluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEctdGllZG9uc2lpcnRvIGtlc2tleXRldHRpaW4iPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiJrw6R5dGV0dHkgPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+ImtpaW50acO2IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4oCTIHZhcm9pdHVzIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJUecO2dGlsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLDhHNrZXR0w6RpbiBrw6R5dGV0eXQgcnV1ZHV0IG7DpGt5dsOkdCB0w6Rzc8OkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iU292ZWxsdXN0aWVkb3QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJuw6R5dMO2biBraWlubml0eXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iaGFrdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iU292ZWxsdWtzZW4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGvDpHlubmlzdMOkbWluZW4gZXDDpG9ubmlzdHVpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJMaXPDpMOkIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikhpc3RvcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiIrPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGxpc8Okw6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlZhYWthc3V1bnRhaW5lbiBqYWtvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iUHlzdHlzdXVudGFpbmVuIGpha28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iTXVva2F0dHUgamFrbyI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJWaXJyYW5zw6TDpHN0w7Ygb24ga8OkeXTDtnNzw6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iUmFqb2l0dGFhIHN1b3JpdHVza3lrecOkIGphIHRhdXN0YXRpZWRvbnNpaXJ0b2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlBvaXN0YSB2aXJyYW5zw6TDpHN0w7Yga8OkeXTDtnN0w6QiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iU2lzw6RsdMO2IHBpaWxvdGV0dHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYWxrYWEgdGFsbGVudGFhIGthaWtlbiBuw6R5dMO2bGzDpHNpIG7DpGt5dsOkbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iw4Rsw6QgbsOkeXTDpCB1dWRlbGxlZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iUG9pc3RhIGthaWtraSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iRXN0w6QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBvbiDDpMOkbmVudm9pbWFra3V1c3ZhbGludGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iUGFsYXV0YSBhbGt1cGVyw6RpbmVuIGtvc2tldHRhbWFsbGEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkvDpHl0w6R0IHR5w7Zwcm9maWlsaWEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iTsOkeXTDpCBha3VuIHZhcmF1cyBrdXZha2tlZXNzYSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iT3RldGFhbmtvIEJsdWV0b290aCBrw6R5dHTDtsO2bj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iSm90dGEgdm9pdCB5aGRpc3TDpMOkIG7DpHBww6RpbWlzdMO2biB0YWJsZXR0aWlzaSwgc2ludW4gb24gZW5zaW4gb3RldHRhdmEgQmx1ZXRvb3RoIGvDpHl0dMO2w7ZuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ik90YSBrw6R5dHTDtsO2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlNvdmVsbGEgYWloZWVuIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiBpbG1vaXR1a3NpaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJTb3ZlbGxhIGthaWtraWluIHTDpG3DpG4gc292ZWxsdWtzZW4gaWxtb2l0dWtzaWluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkVzdGV0eXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJFaSBrb3ZpbiB0w6Rya2XDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJUw6Rya2XDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJIeXZpbiB0w6Rya2XDpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IktpaXJlZWxsaW5lbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iw4Rsw6Qga29za2FhbiBuw6R5dMOkIG7DpGl0w6QgaWxtb2l0dWtzaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTsOkeXTDpCBodW9tYWFtYXR0b21hc3RpIGlsbW9pdHVzbHVldHRlbG9uIGFsYW9zYXNzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTsOkeXTDpCBuw6Rtw6QgaWxtb2l0dWtzZXQgaHVvbWFhbWF0dG9tYXN0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTsOkeXTDpCBpbG1vaXR1a3NldCBsdWV0dGVsb24ga8Okcmplc3PDpCBqYSB0b2lzdGEgbWVya2tpw6TDpG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik7DpHl0w6QgaWxtb2l0dXMgbsOkeXTDtmxsw6QgamEgdG9pc3RhIMOkw6RuaW1lcmtraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTGlzw6Rhc2V0dWtzZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJWYWxtaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJUYXZhbGxpc2V0IHbDpHJpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJZw7Z2w6RyaXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ik11b2thdHV0IHbDpHJpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlR1bnRlbWF0dG9tYXQgdsOkcml0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik11b2thdHV0IHbDpHJpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik7DpHl0w6QgcGlrYS1hc2V0dXNydXV0dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iT3RhIG11b2thdHV0IHbDpHJpdCBrw6R5dHTDtsO2biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkvDpHl0w6QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iVmFodmlzdGEgYXNldHVrc2V0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iSm90a2luIHbDpHJpYXNldHVrc2V0IHZvaXZhdCBow6Rpcml0w6QgbGFpdHRlZW4ga8OkeXR0w7bDpC4gVmFodmlzdGEgdXVkZXQgdsOkcmlhc2V0dWtzZXQgdmFsaXRzZW1hbGxhIE9LLiBNdXVzc2EgdGFwYXVrc2Vzc2EgYWllbW1hdCBhc2V0dWtzZXQgcGFsYXV0ZXRhYW4gMTAgc2VrdW5uaW4ga3VsdXR0dWEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJBa2t1ICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4gJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJWaXJyYW5zw6TDpHN0w7YgZWkgb2xlIGvDpHl0ZXR0w6R2aXNzw6QgbGF0YXVrc2VuIGFpa2FuYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iVmlycmFuc8Okw6RzdMO2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUmFqb2l0dGFhIHN1b3JpdHVza3lrecOkIGphIHRhdXN0YXRpZWRvbnNpaXJ0b2EuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyLXJDQS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCmluZGV4IDg2YjIwN2UuLmJjZGUxN2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnItckNBL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJTb25uZXJpZSBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTW9kZSBUcmF2YWlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJTdXBwcmltZXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJBcHBsaWNhdGlvbiBcIjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPlwiIGlnbm9yw6llLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlRvdXRlcyBsZXMgYXBwbGljYXRpb25zIHLDqWNlbnRlcyBvbnQgw6l0w6kgc3VwcHJpbcOpZXMuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJQb2ludCBkXCdhY2PDqHMgbW9iaWxlIGTDqXNhY3RpdsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlBvaW50IGRcJ2FjY8OocyBtb2JpbGUgYWN0aXbDqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJEaWZmdXNpb24gZFwnw6ljcmFuIGFycsOqdMOpZS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJNb2RlIFRyYXZhaWwgZMOpc2FjdGl2w6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iTW9kZSBUcmF2YWlsIGFjdGl2w6kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTGUgbW9kZSBUcmF2YWlsIGVzdCBkw6lzYWN0aXbDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTGUgbW9kZSBUcmF2YWlsIGVzdCBhY3RpdsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJMdW1pbm9zaXTDqSBkZSBsXCfDqWNyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEb25uw6llcyAyRy8zRyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iRG9ubsOpZXMgNEcgZMOpc2FjdGl2w6llcyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IlF1YW50aXTDqSBkZSBkb25uw6llcyB1dGlsaXPDqWVzIDo8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iTGltaXRlIDogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQXZlcnRpc3NlbWVudCA6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGUgVHJhdmFpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJWb3Mgw6ljcmFucyByw6ljZW50cyBzXCdhZmZpY2hlbnQgaWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iRMOpdGFpbHMgZGUgbFwnYXBwbGljYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLDqXBpbmdsYWdlIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJyZWNoZXJjaGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlBsdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yaXF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IGF1dHJlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iU8OpcGFyYXRpb24gaG9yaXpvbnRhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJTw6lwYXJhdGlvbiB2ZXJ0aWNhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iU8OpcGFyYXRpb24gcGVyc29ubmFsaXPDqWUiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iTGEgZm9uY3Rpb24gw4ljb25vbWllIGRcJ8OpbmVyZ2llIGVzdCBhY3RpdsOpZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSw6lkdWlyZSBsZXMgcGVyZm9ybWFuY2VzIGV0IGRlIGZvbmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkTDqXNhY3RpdmVyIGxcJ8OpY29ub21pc2V1ciBkXCfDqW5lcmdpZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBjb21tZW5jZXIgw6AgZW5yZWdpc3RyZXIgdG91dCBjZSBxdWkgc1wnYWZmaWNoZSBzdXIgdm90cmUgw6ljcmFuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOZSBwbHVzIGFmZmljaGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlRvdXQgZWZmYWNlciI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iUmVmdXNlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGNvcnJlc3BvbmQgw6AgbGEgYm/DrnRlIGRlIGRpYWxvZ3VlIGR1IHZvbHVtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRvdWNoZXogcG91ciByZXN0YXVyZXIgbFwnb3JpZ2luYWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlZvdXMgdXRpbGlzZXogdm90cmUgcHJvZmlsIHByb2Zlc3Npb25uZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iQWZmaWNoZXIgbGUgcG91cmNlbnRhZ2UgaW50w6lncsOpIGRlIGNoYXJnZSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQWN0aXZlciBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBvdXIgY29ubmVjdGVyIHZvdHJlIGNsYXZpZXIgw6Agdm90cmUgdGFibGV0dGUsIHZvdXMgZGV2ZXogZFwnYWJvcmQgYWN0aXZlciBsYSBjb25uZWN0aXZpdMOpIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBY3RpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbGlxdWVyIMOgIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgbm90aWZpY2F0aW9ucyBkZSBjZXR0ZSBhcHBsaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdcOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkltcG9ydGFuY2UgZmFpYmxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydGFuY2Ugbm9ybWFsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJJbXBvcnRhbmNlIMOpbGV2w6llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iSW1wb3J0YW5jZSB1cmdlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOZSBqYW1haXMgYWZmaWNoZXIgY2VzIG5vdGlmaWNhdGlvbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iQWZmaWNoZXIgZW4gbW9kZSBzaWxlbmNpZXV4IGF1IGJhcyBkZSBsYSBsaXN0ZSBkZSBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJBZmZpY2hlciBjZXMgbm90aWZpY2F0aW9ucyBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkFmZmljaGVyIGVuIGhhdXQgZGUgbGEgbGlzdGUgZGVzIG5vdGlmaWNhdGlvbnMgZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkFmZmljaGVyIHN1ciBsXCfDqWNyYW4gZXQgw6ltZXR0cmUgdW4gc29uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJQbHVzIGRlIHBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVGVybWluw6kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJDb3VsZXVycyBub3JtYWxlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb3VsZXVycyBub2N0dXJuZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvdWxldXJzIHBlcnNvbm5hbGlzw6llcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IkNvdWxldXJzIGluY29ubnVlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmllciBsYSBjb3VsZXVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iQWZmaWNoZXIgbGEgdHVpbGUgZGUgY29uZmlndXJhdGlvbiByYXBpZGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkFjdGl2ZXIgbGEgdHJhbnNmb3JtYXRpb24gcGVyc29ubmFsaXPDqWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcHBsaXF1ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWVyIGxlcyBwYXJhbcOodHJlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkNlcnRhaW5zIHBhcmFtw6h0cmVzIGRlIGNvdWxldXJzIHBldXZlbnQgcmVuZHJlIGNldCBhcHBhcmVpbCBpbnV0aWxpc2FibGUuIENsaXF1ZXogc3VyIMKrIE9LIMK7IHBvdXIgdmFsaWRlciBjZXMgcGFyYW3DqHRyZXMsIHNpbm9uIGlscyBzZXJvbnQgcsOpaW5pdGlhbGlzw6lzIGFwcsOocyAxMCBzZWNvbmRlcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IlBpbGUgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiAlJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkxlIG1vZGUgw4ljb25vbWllIGRcJ8OpbmVyZ2llIG5cJ2VzdCBwYXMgYWNjZXNzaWJsZSBwZW5kYW50IGxhIGNoYXJnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLDiWNvbm9taWUgZFwnw6luZXJnaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSw6lkdWl0IGxlcyBwZXJmb3JtYW5jZXMgZXQgbGVzIGRvbm7DqWVzIGVuIGFycmnDqHJlLXBsYW4iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWZyL3N0cmluZ3MueG1sCmluZGV4IDY5NTNjODcuLjk1MmJhYWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZnIvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1mci9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iU29ubmVyaWUgZW4gbW9kZSBzaWxlbmNpZXV4Ijwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+Ik1vZGUgVHJhdmFpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iU3VwcHJpbWVyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJBcHBsaWNhdGlvbiBcIjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPlwiIGlnbm9yw6llLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlRvdXRlcyBsZXMgYXBwbGljYXRpb25zIHLDqWNlbnRlcyBvbnQgw6l0w6kgc3VwcHJpbcOpZXMuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJQb2ludCBkXCdhY2PDqHMgbW9iaWxlIGTDqXNhY3RpdsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlBvaW50IGRcJ2FjY8OocyBtb2JpbGUgYWN0aXbDqS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJEaWZmdXNpb24gZFwnw6ljcmFuIGludGVycm9tcHVlLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+Ik1vZGUgVHJhdmFpbCBkw6lzYWN0aXbDqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ik1vZGUgVHJhdmFpbCBhY3RpdsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTGUgbW9kZSBUcmF2YWlsIGVzdCBkw6lzYWN0aXbDqS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTGUgbW9kZSBUcmF2YWlsIGVzdCBhY3RpdsOpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJMdW1pbm9zaXTDqSBkZSBsXCdhZmZpY2hhZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEb25uw6llcyAyRy0zRyBkw6lzYWN0aXbDqWVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iRG9ubsOpZXMgNEcgZMOpc2FjdGl2w6llcyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiB1dGlsaXPDqXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBhdSBtYXhpbXVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBdmVydGlzc2VtZW50wqA6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGUgVHJhdmFpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJWb3Mgw6ljcmFucyByw6ljZW50cyBzXCdhZmZpY2hlbnQgaWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mb3MgYXBwbGljYXRpb24iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLDqXBpbmdsYWdlIGRcJ8OpY3JhbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJyZWNoZXJjaGVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJJbXBvc3NpYmxlIGRlIGxhbmNlciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlBsdXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yaXF1ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+wqBhdXRyZXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlPDqXBhcmF0aW9uIGhvcml6b250YWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iU8OpcGFyYXRpb24gdmVydGljYWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlPDqXBhcmF0aW9uIHBlcnNvbm5hbGlzw6llIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkxcJ8OpY29ub21pc2V1ciBkZSBiYXR0ZXJpZSBlc3QgYWN0aXbDqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJMaW1pdGUgbGVzIHBlcmZvcm1hbmNlcyBldCBsZXMgZG9ubsOpZXMgZW4gYXJyacOocmUtcGxhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkTDqXNhY3RpdmVyIGxcJ8OpY29ub21pc2V1ciBkZSBiYXR0ZXJpZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZW51cyBtYXNxdcOpcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB2YSBjb21tZW5jZXIgw6AgY2FwdHVyZXIgdG91cyBsZXMgY29udGVudXMgYWZmaWNow6lzIMOgIGxcJ8OpY3Jhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmUgcGx1cyBhZmZpY2hlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJUb3V0IGVmZmFjZXIiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IlJlZnVzZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBjb3JyZXNwb25kIMOgIGxhIGJvw650ZSBkZSBkaWFsb2d1ZSBkdSB2b2x1bWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJBcHB1eWV6IHBvdXIgcmVzdGF1cmVyIGxcJ2ludGVyZmFjZSBkXCdvcmlnaW5lLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iJmFtcDtxdW90OywgJmFtcDtxdW90OyAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJWb3VzIHV0aWxpc2V6IHZvdHJlIHByb2ZpbCBwcm9mZXNzaW9ubmVsLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSBUdW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IkFmZmljaGVyIGxlIHBvdXJjZW50YWdlIGludMOpZ3LDqSBkZSBsYSBiYXR0ZXJpZSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQWN0aXZlciBsZSBCbHVldG9vdGjCoD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUG91ciBjb25uZWN0ZXIgdW4gY2xhdmllciDDoCB2b3RyZSB0YWJsZXR0ZSwgdm91cyBkZXZleiBhdm9pciBhY3RpdsOpIGxlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBY3RpdmVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbGlxdWVyIGF1eCBub3RpZmljYXRpb25zIHJlbGF0aXZlcyBhdSBzdWpldCBcIjx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPlwiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgbm90aWZpY2F0aW9ucyBkZSBjZXR0ZSBhcHBsaWNhdGlvbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdcOpZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnRhbmNlIGZhaWJsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbmNlIG5vcm1hbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW5jZSDDqWxldsOpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVyZ2VudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmUgamFtYWlzIGFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkFmZmljaGVyIGF1IGJhcyBkZSBsYSBsaXN0ZSBkZXMgbm90aWZpY2F0aW9ucyBlbiBtb2RlIHNpbGVuY2lldXgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkFmZmljaGVyIGNlcyBub3RpZmljYXRpb25zIGVuIG1vZGUgc2lsZW5jaWV1eCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iQWZmaWNoZXIgZW4gaGF1dCBkZSBsYSBsaXN0ZSBkZXMgbm90aWZpY2F0aW9ucyBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iQWZmaWNoZXIgc3VyIGxcJ8OpY3JhbiBldCDDqW1ldHRyZSB1biBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlBsdXMgZGUgcGFyYW3DqHRyZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJUZXJtaW7DqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvdWxldXJzIG5vcm1hbGVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkNvdWxldXJzIG5vY3R1cm5lcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ291bGV1cnMgcGVyc29ubmFsaXPDqWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ291bGV1cnMgaW5jb25udWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhdGlvbiBkZXMgY291bGV1cnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJBZmZpY2hlciBsYSB0dWlsZSBkZSBjb25maWd1cmF0aW9uIHJhcGlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWN0aXZlciBsYSB0cmFuc2Zvcm1hdGlvbiBwZXJzb25uYWxpc8OpZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwcGxpcXVlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJWw6lyaWZpZXIgbGVzIHBhcmFtw6h0cmVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQ2VydGFpbnMgcGFyYW3DqHRyZXMgZGUgY291bGV1cnMgcGV1dmVudCByZW5kcmUgY2V0IGFwcGFyZWlsIGludXRpbGlzYWJsZS4gQ2xpcXVleiBzdXIgXCJPS1wiIHBvdXIgdmFsaWRlciBjZXMgcGFyYW3DqHRyZXMsIHNhbnMgcXVvaSBpbHMgc2Vyb250IHLDqWluaXRpYWxpc8OpcyBhcHLDqHMgMTDCoHNlY29uZGVzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyaWUgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPsKgJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJMXCfDqWNvbm9taXNldXIgZGUgYmF0dGVyaWUgblwnZXN0IHBhcyBkaXNwb25pYmxlIGxvcnNxdWUgbFwnYXBwYXJlaWwgZXN0IGVuIGNoYXJnZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iw4ljb25vbWlzZXVyIGRlIGJhdHRlcmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iTGltaXRlIGxlcyBwZXJmb3JtYW5jZXMgZXQgbGVzIGRvbm7DqWVzIGVuIGFycmnDqHJlLXBsYW4uIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWdsLXJFUy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCmluZGV4IDJhMmEyZTAuLjlkNDkwYzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtZ2wtckVTL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJUaW1icmUgc2lsZW5jaWFkbyI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJNb2RvIGRlIHRyYWJhbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJSZXhlaXRhciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IlJleGVpdG91c2UgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlJleGVpdMOhcm9uc2UgdG9kYXMgYXMgYXBsaWNhY2nDs25zIHJlY2VudGVzLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iRGVzYWN0aXZvdXNlIGEgem9uYSBpbnRlcmFjdGl2YSBtw7NiaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iQWN0aXZvdXNlIGEgem9uYSBpbnRlcmFjdGl2YSBtw7NiaWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iRGV0w612b3NlIGEgZW1pc2nDs24gZW4gcGFudGFsbGEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTW9kbyBkZSB0cmFiYWxsbyBkZXNhY3RpdmFkby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNb2RvIGRlIHRyYWJhbGxvIGFjdGl2YWRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IkRlc2FjdGl2b3VzZSBvIG1vZG8gZGUgdHJhYmFsbG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IkFjdGl2b3VzZSBvIG1vZG8gZGUgdHJhYmFsbG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkJyaWxsbyBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+Ik9zIGRhdG9zIDJHLTNHIGVzdMOhbiBlbiBwYXVzYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+Ik9zIGRhdG9zIDRHIGVzdMOhbiBlbiBwYXVzYSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiB1c2Fkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iTMOtbWl0ZSBkZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBZHZlcnRlbmNpYSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJNb2RvIGRlIHRyYWJhbGxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IkFzIHTDumFzIHBhbnRhbGxhcyByZWNlbnRlcyBhcGFyZWNlbiBhcXXDrSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjacOzbiBkYSBhcGxpY2FjacOzbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImZpeGFjacOzbiBkZSBwYW50YWxsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJidXNjYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik5vbiBmb2kgcG9zaWJsZSBpbmljaWFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOhaXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yaWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gbcOhaXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkRpdmlkaXIgZW4gaG9yaXpvbnRhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlkaXIgZW4gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aWRpciBkZSB4ZWl0byBwZXJzb25hbGl6YWRvIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ik8gYWZvcnJvIGRlIGJhdGVyw61hIGVzdMOhIGFjdGl2YWRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZSBvIHJlbmRlbWVudG8gZSBvcyBkYXRvcyBlbiBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhY3RpdmFyIG8gYWZvcnJvIGRlIGJhdGVyw61hIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRpZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGNvbWV6YXLDoSBhIGNhcHR1cmFyIHRvZG8gbyBxdWUgYXBhcmV6YSBuYSB0w7phIHBhbnRhbGxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOb24gbW9zdHJhciBvdXRyYSB2ZXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iRWxpbWluYXIgdG9kYXMiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IkRlbmVnYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDDqSBvIGNhZHJvIGRlIGRpw6Fsb2dvIGRlIHZvbHVtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRvY2EgcGFyYSByZXN0YXVyYXIgbyBvcml4aW5hbC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iRXN0w6FzIHVzYW5kbyBvIHBlcmZpbCBkZSB0cmFiYWxsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IkNvbmZpZ3VyYWRvciBkYSBJVSBkbyBzaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iTW9zdHJhciBwb3JjZW50YXhlIGRlIGJhdGVyw61hIGluc2VyaWRhIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJRdWVyZXMgYWN0aXZhciBvIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGFyYSBjb25lY3RhciBvIHRldSB0ZWNsYWRvIGNvIHRhYmxldCwgcHJpbWVpcm8gdGVzIHF1ZSBhY3RpdmFyIG8gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFjdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIMOhcyBub3RpZmljYWNpw7NucyBkZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2FyIGEgdG9kYXMgYXMgbm90aWZpY2FjacOzbnMgcHJvY2VkZW50ZXMgZGVzdGEgYXBsaWNhY2nDs24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvcXVlYWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0YW5jaWEgYmFpeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0YW5jaWEgbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkltcG9ydGFuY2lhIGFsdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnRhbmNpYSB1cnhlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOb24gbW9zdHJhciBudW5jYSBlc3RhcyBub3RpZmljYWNpw7NucyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIGRlIGZvcm1hIHNpbGVuY2lvc2EgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2FjacOzbnMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXN0YXMgbm90aWZpY2FjacOzbnMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYWNpw7NucyBlIGVtaXRpciBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBuYSBwYW50YWxsYSBlIGVtaXRpciBzb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik3DoWlzIG9wY2nDs25zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iRmVpdG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJDb3JlcyBub3JtYWlzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkNvcmVzIG5vY3R1cm5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ29yZXMgcGVyc29uYWxpemFkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb3JlcyBkZXNjb8OxZWNpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhY2nDs24gZGUgY29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iTW9zdHJhciBtb3NhaWNvIGRlIGNvbmZpZ3VyYWNpw7NuIHLDoXBpZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkFjdGl2YXIgdHJhbnNmb3JtYWNpw7NuIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBjb25maWd1cmFjacOzbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VuaGFzIG9wY2nDs25zIGRlIGNvbmZpZ3VyYWNpw7NuIGRlIGNvciBwb2RlbiBmYWNlciBxdWUgZXN0ZSBkaXNwb3NpdGl2byBzZXhhIGludXRpbGl6YWJsZS4gRmFpIGNsaWMgZW4gQWNlcHRhciBwYXJhIGNvbmZpcm1hciBlc3RhIGNvbmZpZ3VyYWNpw7NuIGRlIGNvcjsgZW4gY2FzbyBjb250cmFyaW8sIGEgY29uZmlndXJhY2nDs24gcmVzdGFibGVjZXJhc2UgdHJhcyAxMCBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyw61hICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz7CoCUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQSBmdW5jacOzbiBhZm9ycm8gZGUgYmF0ZXLDrWEgbm9uIGVzdMOhIGRpc3Bvw7FpYmxlIGR1cmFudGUgYSBjYXJnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJBZm9ycm8gZGUgYmF0ZXLDrWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2UgbyByZW5kZW1lbnRvIGUgb3MgZGF0b3MgZW4gc2VndW5kbyBwbGFubyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ndS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAppbmRleCA2YjY3YTIwLi5kNDUxNjdmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWd1LXJJTi9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4Kqw4Kq/4KqC4KqX4KqwIOCqtuCqvuCqguCqpCDgqpvgq4cuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCqleCqvuCqsOCrjeCqryDgqq7gq4vgqqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4KuLLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KqV4Kq+4Kqi4KuAIOCqqOCqvuCqluCrgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLgqqTgqq7gqr7gqq4g4Kqk4Kq+4Kqc4KuH4Kqk4Kqw4Kqo4KuAIOCqj+CqquCrjeCqsuCqv+CqleCrh+CqtuCqqOCriyDgqpXgqr7gqqLgq4Ag4Kqo4Kq+4KqW4KuALiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4Kqu4KuL4Kqs4Kq+4KqH4KqyIOCqueCri+Cqn+CquOCrjeCqquCri+CqnyDgqqzgqoLgqqcg4KqV4Kqw4KuN4Kqv4KuB4KqCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuCqruCri+CqrOCqvuCqh+CqsiDgqrngq4vgqp/gqrjgq43gqqrgq4vgqp8g4Kqa4Kq+4Kqy4KuBIOCqleCqsOCrjeCqr+CrgeCqgi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLgqrjgq43gqpXgq43gqrDgq4Dgqqgg4KqV4Kq+4Kq44KuN4Kqf4Kq/4KqC4KqXIOCqrOCqguCqpyDgqpXgqrDgq43gqq/gq4HgqoIuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i4KqV4Kq+4Kqw4KuN4KqvIOCqruCri+CqoSDgqqzgqoLgqqcuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4KqV4Kq+4Kqw4KuN4KqvIOCqruCri+CqoSDgqprgqr7gqrLgq4EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i4KqV4Kq+4Kqw4KuN4KqvIOCqruCri+CqoSDgqqzgqoLgqqcg4KqV4Kqw4KuN4Kqv4KuLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLgqpXgqr7gqrDgq43gqq8g4Kqu4KuL4KqhIOCqmuCqvuCqsuCrgSDgqpXgqrDgq43gqq/gq4suIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IuCqquCrjeCqsOCqpuCqsOCrjeCqtuCqqCDgqqTgq4fgqpwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyDgqqHgq4fgqp/gqr4g4Kql4KuL4Kqt4Kq+4Kq14KuN4Kqv4KuLIOCqm+CrhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOCqoeCrh+Cqn+CqviDgqqXgq4vgqq3gqr7gqrXgq43gqq/gq4sg4Kqb4KuHIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IOCqteCqvuCqquCqsOCrjeCqr+CriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOCqruCqsOCrjeCqr+CqvuCqpuCqviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgqprgq4fgqqTgqrXgqqPgq4AiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IuCqleCqvuCqsOCrjeCqryDgqq7gq4vgqqEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i4Kqk4Kqu4Kq+4Kqw4KuAIOCqpOCqvuCqnOCrh+CqpOCqsOCqqOCrgCDgqrjgq43gqpXgq43gqrDgq4Dgqqjgq43gqrgg4KqF4Kq54KuA4KqCIOCqpuCrh+CqluCqvuCqryDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgqo/gqqrgq43gqrLgqr/gqpXgq4fgqrbgqqgg4Kqu4Kq+4Kq54Kq/4Kqk4KuAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4Kq44KuN4KqV4KuN4Kqw4KuA4KqoIOCqquCqv+CqqOCqv+CqguCqlyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLgqrbgq4vgqqciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgqqrgq43gqrDgqr7gqrDgqoLgqq0g4KqV4Kqw4KuAIOCqtuCqleCqvuCqr+CrgeCqgiDgqqjgqqXgq4AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuCqteCqp+CrgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLgqofgqqTgqr/gqrngqr7gqrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDgqrXgqqfgq4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuCqhuCqoeCrgeCqgiDgqrXgqr/gqq3gqpXgq43gqqQg4KqV4Kqw4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4KqK4Kqt4KuB4KqCIOCqteCqv+CqreCqleCrjeCqpCDgqpXgqrDgq4siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4KqV4Kq44KuN4Kqf4KquIOCqteCqv+CqreCqleCrjeCqpCDgqpXgqrDgq4siPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4Kqs4KuH4Kqf4Kqw4KuAIOCquOCrh+CqteCqsCDgqprgqr7gqrLgq4Eg4Kqb4KuHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuCqquCrjeCqsOCqpuCqsOCrjeCqtuCqqCDgqoXgqqjgq4cg4Kqq4KuD4Kq34KuN4Kqg4Kqt4KuC4Kqu4Kq/IOCqoeCrh+Cqn+CqviDgqpjgqp/gqr7gqqHgq4cg4Kqb4KuHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgqqzgq4Xgqp/gqrDgq4Ag4Kq44KuH4Kq14KqwIOCqrOCqguCqpyDgqpXgqrDgq4siPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4Kq44Kq+4Kqu4KqX4KuN4Kqw4KuA4KqTIOCqm+CrgeCqquCqvuCqteCrh+CqsiDgqpvgq4ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4Kqk4Kqu4Kq+4Kqw4KuAIOCquOCrjeCqleCrjeCqsOCrgOCqqCDgqqrgqrAg4Kqc4KuHIOCqquCrjeCqsOCqpuCqsOCrjeCqtuCqv+CqpCDgqqXgqr7gqq8g4Kqb4KuHIOCqpOCrhyDgqqbgqrDgq4fgqpUg4Kq14Kq44KuN4Kqk4KuB4Kqo4KuHIOCqleCrh+CqquCrjeCqmuCqsCDgqpXgqrDgqrXgqr7gqqjgq4HgqoIg4Kqq4KuN4Kqw4Kq+4Kqw4KqC4KqtIOCqleCqsOCqtuCrhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4Kqr4Kqw4KuA4Kql4KuAIOCqrOCqpOCqvuCqteCqtuCriyDgqqjgqrngq4DgqoIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4Kqs4Kqn4KuBIOCquOCqvuCqqyDgqpXgqrDgq4siPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuCqqOCqleCqvuCqsOCriyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCqjyDgqrXgq4ngqrLgq43gqq/gq4Lgqq4g4Kq44KqC4Kq14Kq+4KqmIOCqm+CrhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCqruCrguCqs+CqqOCrhyDgqqrgq4HgqqjgqoPgqrjgq43gqqXgqr7gqqrgqr/gqqQg4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqp/gqpog4KqV4Kqw4KuLLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLgqqTgqq7gq4cg4Kqk4Kqu4Kq+4Kqw4KuAIOCqleCqvuCqsOCrjeCqryDgqqrgq43gqrDgq4vgqqvgqr7gqofgqrLgqqjgq4sg4KqJ4Kqq4Kqv4KuL4KqXIOCqleCqsOCrgCDgqrDgqrngq43gqq/gqr7gqoIg4Kqb4KuLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4Kq44Kq/4Kq44KuN4Kqf4KquIFVJIOCqn+CrjeCqr+CrguCqqOCqsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuCqj+CqruCrjeCqrOCrh+CqoSDgqpXgqrDgq4fgqrIg4Kqs4KuF4Kqf4Kqw4KuAIOCqn+CqleCqviDgqqzgqqTgqr7gqrXgq4siPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCDgqprgqr7gqrLgq4Eg4KqV4Kqw4Kq14KuBIOCqm+Crhz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4Kqk4Kqu4Kq+4Kqw4Kq+IOCqn+Crh+CqrOCrjeCqsuCrh+CqnyDgqrjgqr7gqqXgq4cg4KqV4KuA4Kqs4KuL4Kqw4KuN4KqhIOCqleCqqOCrh+CqleCrjeCqnyDgqpXgqrDgqrXgqr4g4Kqu4Kq+4Kqf4KuHLCDgqqTgqq7gqr7gqrDgq4cg4Kqq4Kq54KuH4Kqy4Kq+4KqCIEJsdWV0b290aCDgqprgqr7gqrLgq4Eg4KqV4Kqw4Kq14Kq+4Kqo4KuAIOCqnOCqsOCrguCqsCDgqqrgqqHgqrbgq4cuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4Kqa4Kq+4Kqy4KuBIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgqrjgq4Lgqprgqqjgqr7gqpMg4Kqq4KqwIOCqsuCqvuCql+CrgSDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgqoYg4KqN4Kqq4KuN4Kqy4Kq/4KqV4KuH4Kq24Kqo4Kqo4KuAIOCqpOCqruCqvuCqriDgqrjgq4Lgqprgqqjgqr7gqpMg4Kqq4KqwIOCqsuCqvuCql+CrgSDgqpXgqrDgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4KqF4Kq14Kqw4KuL4Kqn4Kq/4KqkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4Kqo4Kq/4Kqu4KuN4KqoIOCqruCqueCqpOCrjeCqteCqqOCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgqrjgqr7gqq7gqr7gqqjgq43gqq8g4Kqu4Kq54Kqk4KuN4Kq14Kqo4KuAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCqieCqmuCrjeCqmiDgqq7gqrngqqTgq43gqrXgqqjgq4AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgqqTgqr7gqqTgq43gqpXgqr7gqrLgqr/gqpUg4Kqu4Kq54Kqk4KuN4Kq14Kqo4KuAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgqoYg4Kq44KuC4Kqa4Kqo4Kq+4KqTIOCqleCrjeCqr+CqvuCqsOCrh+CqryDgqqzgqqTgqr7gqrXgqrbgq4sg4Kqo4Kq54KuA4KqCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCquOCrguCqmuCqqOCqvuCqqOCrgCDgqrjgq4Lgqprgqr/gqqjgq4Ag4Kqo4KuA4Kqa4KuHIOCqmuCrgeCqquCqmuCqvuCqqiDgqqzgqqTgqr7gqrXgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCqhiDgqrjgq4Lgqprgqqjgqr7gqpMg4Kqa4KuB4Kqq4Kqa4Kq+4KqqIOCqrOCqpOCqvuCqteCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Kq44KuC4Kqa4Kqo4Kq+4KqT4Kqo4KuAIOCquOCrguCqmuCqv+CqqOCrgCDgqp/gq4vgqpog4Kqq4KqwIOCqrOCqpOCqvuCqteCriyDgqoXgqqjgq4cg4KqF4Kq14Kq+4KqcIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgqrjgq43gqpXgq43gqrDgq4Dgqqgg4Kqq4KqwIOCqpOCrjeCqteCqsOCqv+CqpCDgqqbgq43gqrDgqrfgq43gqp/gqr8g4KqV4Kqw4KuLIOCqheCqqOCrhyDgqoXgqrXgqr7gqpwg4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgqrXgqqfgq4Eg4Kq44KuH4Kqf4Kq/4KqC4KqX4KuN4Kq4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4Kql4KqIIOCql+Cqr+CrgeCqgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCquOCqvuCqruCqvuCqqOCrjeCqryDgqrDgqoLgqpfgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4Kqw4Kq+4Kqk4KuN4Kqw4Kq/IOCqsOCqguCql+CriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KqV4Kq44KuN4Kqf4KquIOCqsOCqguCql+CriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCqheCqnOCqvuCqo+CrjeCqr+CqviDgqrDgqoLgqpfgq4siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4Kqw4KqC4KqXIOCquOCqguCqtuCri+Cqp+CqqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCqneCqoeCqquCrgCDgqrjgq4fgqp/gqr/gqoLgqpfgq43gqrgg4Kqf4Kq+4KqH4KqyIOCqrOCqpOCqvuCqteCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KqV4Kq44KuN4Kqf4KquIOCqsOCrguCqquCqvuCqguCqpOCqsOCqo+CqqOCrhyDgqrjgqpXgq43gqrfgqq4g4KqV4Kqw4KuLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Kqy4Kq+4KqX4KuBIOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgqrjgq4fgqp/gqr/gqoLgqpfgq43gqrjgqqjgq4Ag4Kqq4KuB4Kq34KuN4Kqf4Kq/IOCqleCqsOCriyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCqleCrh+Cqn+CqsuCrgOCqlSDgqrDgqoLgqpcg4Kq44KuH4Kqf4Kq/4KqC4KqX4KuN4Kq4IOCqhiDgqongqqrgqpXgqrDgqqPgqqjgq4cg4Kqs4Kq/4Kqo4KqJ4Kqq4Kqv4KuL4KqX4KuAIOCqrOCqqOCqvuCqteCrgCDgqrbgqpXgq4cg4Kqb4KuHLiDgqoYg4Kqw4KqC4KqXIOCquOCrh+Cqn+Cqv+CqguCql+CrjeCquOCqqOCrgCDgqqrgq4Hgqrfgq43gqp/gqr8g4KqV4Kqw4Kq14Kq+IOCqruCqvuCqn+CrhyDgqpHgqpXgq4cg4KqV4KuN4Kqy4Kq/4KqVIOCqleCqsOCriywg4KqF4Kqo4KuN4Kqv4Kql4Kq+IDEwIOCquOCrh+CqleCqguCqoSDgqqrgqpvgq4Ag4KqGIOCquOCrh+Cqn+Cqv+CqguCql+CrjeCquCDgqqvgqrDgq4DgqqXgq4Ag4Kq44KuH4KqfIOCqpeCqtuCrhy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuCqrOCrheCqn+CqsOCrgCAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLgqprgqr7gqrDgq43gqpzgqr/gqoLgqpcg4Kqm4Kqw4Kqu4Kq/4Kqv4Kq+4KqoIOCqrOCrheCqn+CqsOCrgCDgqqzgqprgqqTgqpXgqrDgq43gqqTgqr4g4KqJ4Kqq4Kqy4Kqs4KuN4KqnIOCqqOCqpeCrgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLgqqzgq4Xgqp/gqrDgq4Ag4Kqs4Kqa4Kqk4KqV4Kqw4KuN4Kqk4Kq+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i4Kqq4KuN4Kqw4Kqm4Kqw4KuN4Kq24KqoIOCqheCqqOCrhyDgqqrgq4Pgqrfgq43gqqDgqq3gq4Lgqq7gqr8g4Kqh4KuH4Kqf4Kq+IOCqmOCqn+CqvuCqoeCrhyDgqpvgq4ciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhpL3N0cmluZ3MueG1sCmluZGV4IGZlYmExZmUuLjNlMmFiMmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaGkvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oaS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4KSw4KS/4KSC4KSX4KSwIOCkruCljOCkqC4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkruCli+CkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkleCliyDgpJbgpLzgpL7gpLDgpL/gpJwg4KSV4KSw4KWH4KSCLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSW4KS+4KS84KSw4KS/4KScIOCkleCksCDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuCkueCkvuCksiDgpLngpYAg4KSV4KWHIOCkuOCkreClgCDgpJDgpKrgpY3gpLLgpL/gpJXgpYfgpLbgpKgg4KSW4KS84KS+4KSw4KS/4KScIOCkleCksCDgpKbgpL/gpI8g4KSX4KSPLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkueClieCkn+CkuOCljeKAjeCkquClieCknyDgpJXgpYsg4KSs4KSC4KSmIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i4KSu4KWL4KSs4KS+4KSH4KSyIOCkueClieCkn+CkuOCljeKAjeCkquClieCknyDgpJXgpYsg4KSa4KS+4KSy4KWCIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkleCkvuCkuOCljeKAjeCknyDgpJXgpLDgpKjgpL4g4KSw4KWB4KSVIOCkl+Ckr+Ckvi4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkrOCkguCkpiDgpLngpYguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4KSV4KS+4KSw4KWN4KSvIOCkruCli+CkoSDgpJrgpL7gpLLgpYIg4KS54KWILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuCkleCkvuCksOCljeCkryDgpK7gpYvgpKEg4KSs4KSC4KSmIOCkleCksCDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkmuCkvuCksuClgiDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLgpLjgpY3gpJXgpY3gpLDgpYDgpKgg4KSV4KWAIOCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpYAg4KSw4KWL4KS24KSo4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cg4KSh4KWH4KSf4KS+IOCksOCli+CklSDgpKbgpL/gpK/gpL4g4KSX4KSv4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOCkoeClh+Ckn+CkviDgpLDgpYvgpJUg4KSm4KS/4KSv4KS+IOCkl+Ckr+CkviDgpLngpYgiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4KSJ4KSq4KSv4KWL4KSXIOCkleCkv+Ckr+CkviDgpJfgpK/gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgpLjgpYDgpK7gpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4KSa4KWH4KSk4KS+4KS14KSo4KWAIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuCkhuCkquCkleClgCDgpLngpL7gpLIg4KSV4KWAIOCkuOCljeKAjeCkleCljeCksOClgOCkqCDgpK/gpLngpL7gpIIg4KSm4KS/4KSW4KS+4KSIIOCkpuClh+CkpOClgCDgpLngpYjgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgpI/gpKrgpY3igI3gpLLgpL/gpJXgpYfgpLbgpKgg4KSc4KS+4KSo4KSV4KS+4KSw4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkquCkv+CkqCDgpJXgpLDgpKjgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4KSW4KWL4KScIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkqOCkueClgOCkgiDgpJXgpL/gpK/gpL4g4KSc4KS+IOCkuOCkleCkvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4KSF4KSn4KS/4KSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuCkh+CkpOCkv+CkueCkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCkheCkp+Ckv+CklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4KSV4KWN4KS34KWI4KSk4KS/4KScIOCksOClguCkqiDgpLjgpYcg4KS14KS/4KSt4KS+4KSc4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuCksuCkruCljeCkrOCkteCkpCDgpLDgpYLgpKog4KS44KWHIOCkteCkv+CkreCkvuCknOCkv+CkpCDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4KSV4KS44KWN4oCN4KSf4KSuIOCksOClguCkqiDgpLjgpYcg4KS14KS/4KSt4KS+4KSc4KS/4KSkIOCkleCksOClh+CkgiI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgpKzgpYjgpJ/gpLDgpYAg4KS44KWH4KS14KSwIOCkmuCkvuCksuClgiDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4KSo4KS/4KS34KWN4oCN4KSq4KS+4KSm4KSoIOCklOCksCDgpKrgpYPgpLfgpY3gpKDgpK3gpYLgpK7gpL8g4KSh4KWH4KSf4KS+IOCkleCliyDgpJXgpK4g4KSV4KSw4KSk4KS+IOCkueCliCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4KSs4KWI4KSf4KSw4KWAIOCkrOCkmuCkpOCkleCksOCljeCkpOCkviDgpJXgpYsg4KSs4KSC4KSmIOCkleCksOClh+CkgiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgpJvgpL/gpKrgpYAg4KS54KWB4KSIIOCkuOCkvuCkruCkl+CljeCksOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgpIbgpKrgpJXgpYcg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpKrgpY3gpLDgpKbgpLDgpY3gpLbgpL/gpKQg4KSq4KWN4KSw4KSk4KWN4KSv4KWH4KSVIOCkuOCkvuCkruCkl+CljeCksOClgCDgpJXgpYsg4KSV4KWI4KSq4KWN4KSa4KSwIOCkleCksOCkqOCkviDgpKrgpY3gpLDgpL7gpLDgpILgpK0g4KSV4KSwIOCkpuClh+Ckl+ClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4KSr4KS/4KSwIOCkuOClhyDgpKgg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuCkuOCkreClgCDgpLjgpL7gpKsg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLgpIXgpLjgpY3gpLXgpYDgpJXgpL7gpLAg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4KS14KWJ4KSy4KWN4KSv4KWC4KSuIOCkuOCkguCkteCkvuCkpiDgpLngpYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLgpK7gpYLgpLIg4KS14KWJ4KSy4KWN4KSv4KWC4KSuIOCkleCliyDgpKvgpL/gpLAg4KS44KWHIOCksuCkvuCkqOClhyDgpJXgpYcg4KSy4KS/4KSPIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpYfgpIIuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuCkhuCkqiDgpIXgpKrgpKjgpYAg4KSV4KS+4KSw4KWN4KSvIOCkquCljeCksOCli+Ckq+CkvOCkvuCkh+CksiDgpJXgpL4g4KSJ4KSq4KSv4KWL4KSXIOCkleCksCDgpLDgpLngpYcg4KS54KWI4KSCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4KS44KS/4KS44KWN4KSf4KSuIFVJIOCkn+CljeCkr+ClguCkqOCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuCkj+CkruCljeCkrOClh+CkoSDgpJXgpL/gpK/gpL4g4KSX4KSv4KS+IOCkrOCliOCkn+CksOClgCDgpKrgpY3gpLDgpKTgpL/gpLbgpKQg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgpKzgpY3gpLLgpYLgpJ/gpYLgpKUg4KSa4KS+4KSy4KWCIOCkleCksOClh+Ckgj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KSF4KSq4KSo4KWHIOCkleClgOCkrOCli+CksOCljeCkoSDgpJXgpYsg4KSF4KSq4KSo4KWHIOCkn+CliOCkrOCksuClh+CknyDgpLjgpYcg4KSV4KSo4KWH4KSV4KWN4KSfIOCkleCksOCkqOClhyDgpJXgpYcg4KSy4KS/4KSPLCDgpIbgpKrgpJXgpYsg4KSq4KS54KSy4KWHIOCkrOCljeCksuClguCkn+ClguCkpSDgpJrgpL7gpLLgpYIg4KSV4KSw4KSo4KS+IOCkueCli+Ckl+Ckvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgpJrgpL7gpLLgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpKrgpLAg4KSy4KS+4KSX4KWCIOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCkh+CkuCDgpJDgpKog4KSV4KWHIOCkuOCkreClgCDgpKjgpYvgpJ/gpL/gpKvgpL/gpJXgpYfgpLbgpKgg4KSq4KSwIOCksuCkvuCkl+ClgiDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4KSF4KS14KSw4KWL4KSn4KS/4KSkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4KSo4KS/4KSu4KWN4KSoIOCkruCkueCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSu4KS54KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCkieCkmuCljeCkmiDgpK7gpLngpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLgpKTgpKTgpY3gpJXgpL7gpLIg4KSu4KS54KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLgpK/gpYcg4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkleCkreClgCDgpKjgpL4g4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCkqOCli+Ckn+Ckv+Ckq+Ckv+CkleClh+CktuCkqCDgpLjgpYLgpJrgpYAg4KSu4KWH4KSCIOCkuOCkrOCkuOClhyDgpKjgpYDgpJrgpYcg4KSu4KWM4KSoIOCksOClguCkqiDgpLjgpYcg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgpK/gpYcg4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkruCljOCkqCDgpLDgpYLgpKog4KS44KWHIOCkpuCkv+CkluCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4KSo4KWL4KSf4KS/4KSr4KS/4KSV4KWH4KS24KSoIOCkuOClguCkmuClgCDgpK7gpYfgpIIg4KS44KSs4KS44KWHIOCkiuCkquCksCDgpKbgpL/gpJbgpL7gpI/gpIIg4KSU4KSwIOCkp+CljeCkteCkqOCkvyDgpJrgpLLgpL7gpI/gpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCksCDgpI/gpJUg4KSd4KSy4KSVIOCkpuCkv+CkluCkvuCkj+CkgiDgpJTgpLAg4KSn4KWN4oCN4KS14KSo4KS/IOCkmuCksuCkvuCkj+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4KSU4KSwIOCkuOClh+Ckn+Ckv+CkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCkueCliyDgpJfgpK/gpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgpLjgpL7gpK7gpL7gpKjgpY3gpK8g4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCksOCkvuCkpOCljeCksOCkvyDgpJXgpYcg4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgpJXgpLjgpY3gpJ/gpK4g4KSw4KSC4KSXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4KSF4KSc4KWN4KSe4KS+4KSkIOCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgpLDgpILgpJcg4KSq4KSw4KS/4KS14KSw4KWN4KSk4KSoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4KSk4KWN4oCN4KS14KSw4KS/4KSkLeCkuOClh+Ckn+Ckv+CkguCklyDgpJ/gpL7gpIfgpLIg4KSm4KS/4KSW4KS+4KSP4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgpJXgpLjgpY3gpJ/gpK4g4KSw4KWC4KSq4KS+4KSC4KSk4KSw4KSjIOCkuOCkleCljeCkt+CkriDgpJXgpLDgpYfgpIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLgpLLgpL7gpJfgpYIg4KSV4KSw4KWH4KSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuCkuOClh+KAjeClh+Ckn+Ckv+CkguCklyDgpJXgpYAg4KSq4KWB4KS34KWN4KSf4KS/IOCkleCksOClh+CkgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCkleClgeCkmyDgpLDgpILgpJcg4KS44KWH4KSf4KS/4KSC4KSXIOCkh+CkuCDgpKHgpL/gpLXgpL7gpIfgpLgg4KSV4KWLIOCkheCkqOClgeCkquCkr+Cli+Ckl+ClgCDgpKzgpKjgpL4g4KS44KSV4KSk4KWAIOCkueCliOCkgi4g4KSH4KSoIOCksOCkguCklyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSV4KWAIOCkquClgeCkt+CljeCkn+CkvyDgpJXgpLDgpKjgpYcg4KSV4KWHIOCksuCkv+CkjyDgpKDgpYDgpJUg4KSV4KWN4KSy4KS/4KSVIOCkleCksOClh+Ckgiwg4KSF4KSo4KWN4KSv4KSl4KS+IDEwIOCkuOClh+CkleCkguCkoSDgpJXgpYcg4KSs4KS+4KSmIOCkr+ClhyDgpLjgpYfgpJ/gpL/gpILgpJcg4KSw4KWA4KS44KWH4KSfIOCkueCliyDgpJzgpL7gpI/gpILgpJfgpYAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLgpKzgpYjgpJ/gpLDgpYAgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4KSa4KS+4KSw4KWN4KScIOCkleCkv+CkjyDgpJzgpL7gpKjgpYcg4KSV4KWHIOCkpuCljOCksOCkvuCkqCDgpKzgpYjgpJ/gpLDgpYAg4KS44KWH4KS14KSwIOCkieCkquCksuCkrOCljeCkpyDgpKjgpLngpYDgpIIg4KS54KWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuCkrOCliOCkn+CksOClgCDgpLjgpYfgpLXgpLAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLgpKjgpL/gpLfgpY3igI3gpKrgpL7gpKbgpKgg4KSU4KSwIOCkquClg+Ckt+CljeCkoOCkreClguCkruCkvyDgpKHgpYfgpJ/gpL4g4KSV4KWLIOCkleCkriDgpJXgpLDgpKTgpL4g4KS54KWIIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1oci9zdHJpbmdzLnhtbAppbmRleCBkZTFjYTcyLi5mYmRjNWZlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWhyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHIvc3RyaW5ncy54bWwKQEAgLTE2Miw4ICsxNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlNvZnR2ZXIgenZvbmEgdXRpxaFhbi4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTmHEjWluIHJhZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ik9kYmFjaXZhbmplIGFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBvZGJhxI1lbmEgamUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iT2RiYcSNZW5lIHN1IHN2ZSBuZWRhdm5lIGFwbGlrYWNpamUuIjwvc3RyaW5nPgpAQCAtMjE1LDE0ICsyMTQsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpbG5hIMW+YXJpxaFuYSB0b8SNa2EgaXNrbGp1xI1lbmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWxuYSDFvmFyacWhbmEgdG/EjWthIHVrbGp1xI1lbmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iRW1pdGlyYW5qZSB6YXNsb25hIHphdXN0YXZsamVuby4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJOYcSNaW4gcmFkYSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ik5hxI1pbiByYWRhIHVrbGp1xI1lbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJOYcSNaW4gcmFkYSBpc2tsanXEjWVuLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJOYcSNaW4gcmFkYSB1a2xqdcSNZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IlN2amV0bGluYSB6YXNsb25hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkcg4oCTIDNHIHBvZGFjaSBwYXV6aXJhbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyBwb2RhY2kgcGF1emlyYW5pIjwvc3RyaW5nPgpAQCAtMzAwLDE1ICsyOTUsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGlza29yacWhdGVubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJPZ3JhbmnEjWVuamUgb2QgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iVXBvem9yZW5qZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJOYcSNaW4gcmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJPdmRqZSBzZSBwb2phdmxqdWp1IHZhxaFpIG5lZGF2bmkgemFzbG9uaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjaWplIG8gYXBsaWthY2lqaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+InByaWt2YcSNaXZhbmplIHphc2xvbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4icHJldHJhxb5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBuaWplIHBva3JlbnV0YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iVmnFoWUiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iUG92aWplc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IkpvxaEgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQb2RpamVsaSB2b2RvcmF2bm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJQb2RpamVsaSBva29taXRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlBvZGlqZWxpIHByaWxhZ2/EkWVubyI8L3N0cmluZz4KQEAgLTM3MSw3ICszNjUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLFoHRlZG5qYSBiYXRlcmlqZSBqZSB1a2xqdcSNZW5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlNtYW5qdWplIGtvbGnEjWludSByYWRhIGkgcG96YWRpbnNrZSBwb2RhdGtlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJc2tsanXEjWkgdcWhdGVkdSBiYXRlcmlqZSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJTYWRyxb5haiBqZSBza3JpdmVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gcG/EjWV0IMSHZSBzbmltYXRpIHN2ZSDFoXRvIHNlIHByaWthenVqZSBuYSB6YXNsb251LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOZSBwcmlrYXp1aiBwb25vdm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSXpicmnFoWkgc3ZlIjwvc3RyaW5nPgpAQCAtNDE2LDggKzQwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJPZGJpaiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IHByZWRzdGF2bGphIGRpamFsb8Wha2kgb2t2aXIgemEgdXByYXZsamFuamUgZ2xhc25vxIdvbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IkRvZGlybml0ZSBkYSBiaXN0ZSB2cmF0aWxpIGl6dm9ybm8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlVwb3RyZWJsamF2YXRlIHJhZG5pIHByb2ZpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlVnYcSRYW5qZSBrb3Jpc25pxI1rb2cgc3XEjWVsamEgc3VzdGF2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlByaWthxb5pIHVncmHEkWVuaSBwb3N0b3RhayBiYXRlcmlqZSI8L3N0cmluZz4KQEAgLTQ1Nyw0ICs0NDksMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4ixb1lbGl0ZSBsaSB1a2xqdcSNaXRpIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iRGEgYmlzdGUgcG92ZXphbGkgdGlwa292bmljdSBzIHRhYmxldG9tLCBtb3JhdGUgdWtsanXEjWl0aSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iVWtsanXEjWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJQcmltaWplbmkgbmEgb2JhdmlqZXN0aSB6YSB0ZW11IDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlByaW1pamVuaSBuYSBzdmUgb2JhdmlqZXN0aSBvdmUgYXBsaWthY2lqZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9raXJhbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJNYWxhIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlVvYmnEjWFqZW5hIHZhxb5ub3N0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlZlbGlrYSB2YcW+bm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkhpdG5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOaWthZCBuZSBwcmlrYXp1aiB0ZSBvYmF2aWplc3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlByaWthxb5pIHRpaG8gcHJpIGRudSBwb3Bpc2Egb2JhdmlqZXN0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iUHJpa2HFvmkgdGUgb2JhdmlqZXN0aSB0aWhvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJQcmlrYcW+aSBuYSB2cmh1IHBvcGlzYSBvYmF2aWplc3RpIGkgZW1pdGlyYWogenZ1xI1uaSBzaWduYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUHJpa2HFvmkgbmEgemFzbG9udSBpIGVtaXRpcmFqIHp2dcSNbmkgc2lnbmFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJWacWhZSBwb3N0YXZraSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkdvdG92byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IlVvYmnEjWFqZW5lIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTm/Eh25lIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlByaWxhZ2/EkWVuZSBib2plIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmVwb3puYXRlIGJvamUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iSXptamVuYSBib2phIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUHJpa2HFvmkgcGxvxI1pY3UgcyBicnppbSBwb3N0YXZrYW1hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJPbW9ndcSHaSBwcmlsYWdvxJFlbnUgcHJlb2JyYXpidSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlByaW1pamVuaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJQb3R2cmRpdGUgcG9zdGF2a2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJOZWtlIHBvc3RhdmtlIGJvamEgbW9ndSB1xI1pbml0aSB1cmXEkWFqIG5ldXBvdHJlYmxqaXZpbS4gS2xpa25pdGUgVSByZWR1IGRhIGJpc3RlIHBvdHZyZGlsaSBwb3N0YXZrZSBib2phIGplciDEh2Ugc2UgdSBzdXByb3Rub20gcG9uacWhdGl0aSB6YSAxMCBzZWt1bmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0ZXJpamEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4ixaB0ZWRuamEgYmF0ZXJpamUgbmlqZSBkb3N0dXBuYSB0aWpla29tIHB1bmplbmphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IsWgdGVkbmphIGJhdGVyaWplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iU21hbmp1amUga29sacSNaW51IHJhZGEgaSBwb3phZGluc2tlIHBvZGF0a2UiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh1L3N0cmluZ3MueG1sCmluZGV4IDc3NjNmYTcuLjlkMjZjMzYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1odS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iQ3NlbmfFkSBuw6ltYS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTXVua2EgbcOzZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iQSh6KSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZWx2ZXTDqXNlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZWx0w6F2b2zDrXR2YS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJBeiDDtnNzemVzIGFsa2FsbWF6w6FzIGVsdMOhdm9sw610dmEgYSBuZW1yw6lnIGhhc3puw6FsdGFrIGvDtnrDvGwuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJBIG1vYmlsIGhvdHNwb3Qga2lrYXBjc29sdmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iQSBtb2JpbCBob3RzcG90IGJla2FwY3NvbHZhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkEga8OpcGVybnnFkSDDoXRrw7xsZMOpc2UgbGXDoWxsw610dmEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTXVua2EgbcOzZCBraS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNdW5rYSBtw7NkIGJlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik11bmthIG3Ds2Qga2lrYXBjc29sdmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Ik11bmthIG3Ds2QgYmVrYXBjc29sdmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkEga2lqZWx6xZEgZsOpbnllcmVqZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IkEgMkcgw6lzIDNHIGFkYXRmb3JnYWxvbSBzesO8bmV0ZWwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iQSA0RyBhZGF0Zm9yZ2Fsb20gc3rDvG5ldGVsIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGZlbGhhc3puw6FsdmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBrb3Jsw6F0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJGaWd5ZWxlbSEgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iTXVua2EgbcOzZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJBIGxlZ3V0w7NiYmkga8OpcGVybnnFkWsgaXR0IGplbGVubmVrIG1lZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkF6IGFsa2FsbWF6w6FzIGFkYXRhaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImvDqXBlcm55xZEgcsO2Z3rDrXTDqXNlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImtlcmVzw6lzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJOZW0gbGVoZXQgZWxpbmTDrXRhbmkgYSBrw7Z2ZXRrZXrFkXQ6IDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iVG92w6FiYmlhayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJFbMWRem3DqW55ZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0b3bDoWJiaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iT3N6dG90dCB2w616c3ppbnRlcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+Ik9zenRvdHQgZsO8Z2fFkWxlZ2VzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Ik9zenRvdHQgZWd5w6luaSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBa2t1bXVsw6F0b3Jrw61tw6lsxZEgbcOzZCBiZWthcGNzb2x2YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJDc8O2a2tlbnRpIGEgdGVsamVzw610bcOpbnl0IMOpcyBhIGjDoXR0w6lyYWRhdG9rIGhhc3puw6FsYXTDoXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkFra3VtdWzDoXRvcmvDrW3DqWzFkSBtw7NkIGtpa2FwY3NvbMOhc2EiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iVGFydGFsb20gZWxyZWp0dmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IkEoeikgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBhbGthbG1hesOhcyByw7ZnesOtdGVuaSBmb2cgbWluZGVudCwgYW1pIG1lZ2plbGVuaWsgYSBrw6lwZXJuecWRbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmUgamVsZW5qZW4gbWVnIHTDtmJiw6kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQXogw7Zzc3plcyB0w7ZybMOpc2UiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IkVsdXRhc8OtdMOhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiJBKHopIDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gYWxrYWxtYXrDoXMga2V6ZWxpIGEgaGFuZ2VyxZF0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iw4lyaW50c2UgbWVnIGF6IGVyZWRldGkgw6lydMOpayB2aXNzemHDoWxsw610w6Fzw6Fob3ouIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkEgbXVua2Fwcm9maWx0IGhhc3puw6FsamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJLZXplbMWRZmVsw7xsZXQtaGFuZ29sw7MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJBIGJlw6lww610ZXR0IGFra3VtdWzDoXRvciB0w7ZsdMO2dHRzw6lnaSBzemludGrDqW5layBtZWdqZWxlbsOtdMOpc2UiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkVuZ2Vkw6lseWV6aSBhIEJsdWV0b290aC1rYXBjc29sYXRvdD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iSGEgYSBiaWxsZW50ecWxemV0ZXQgY3NhdGxha296dGF0bmkgc3plcmV0bsOpIHTDoWJsYWfDqXDDqWhleiwgZWzFkXN6w7ZyIGVuZ2Vkw6lseWV6bmllIGtlbGwgYSBCbHVldG9vdGgta2FwY3NvbGF0b3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQmVrYXBjc29sw6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQSBrw7Z2ZXRrZXrFkSDDqXJ0ZXPDrXTDqXNlayBlc2V0w6luOiA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBeiBhbGthbG1hesOhcyBtaW5kZW4gw6lydGVzw610w6lzZSBlc2V0w6luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkxldGlsdHZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iS2V2w6lzYsOpIGZvbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3Jtw6FsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkZvbnRvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlPDvHJnxZFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJTb2hhIG5lbSBqZWxlbm5layBtZWcgZXplayBheiDDqXJ0ZXPDrXTDqXNlayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJIYW5namVsesOpcyBuw6lsa8O8bCBqZWxlbm5layBtZWcgYXogw6lydGVzw610w6lzaSBsaXN0YSBhbGrDoW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkhhbmcgbsOpbGvDvGwgamVsZW5uZWsgbWVnIGV6ZWsgYXogw6lydGVzw610w6lzZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkF6IMOpcnRlc8OtdMOpc2kgbGlzdGEgdGV0ZWrDqW4gamVsZW5uZWsgbWVnIGhhbmdqZWx6w6lzc2VsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkF6IMOpcnRlc8OtdMOpc2VrIGZlbHVncmFuYWsgYSBrw6lwZXJuecWRbiBoYW5namVsesOpc3NlbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iVG92w6FiYmkgYmXDoWxsw610w6Fzb2siPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJLw6lzeiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkhhZ3lvbcOhbnlvcyBzesOtbmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkVzdGkgc3rDrW5layI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iRWd5w6luaSBzesOtbmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iSXNtZXJldGxlbiBzesOtbmVrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlN6w61ubcOzZG9zw610w6FzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iR3lvcnNiZcOhbGzDrXTDoXNvayBtb3phaWtqw6FuYWsgbWVnamVsZW7DrXTDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJFZ3nDqW5pIMOhdGFsYWvDrXTDoXMgZW5nZWTDqWx5ZXrDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iQWxrYWxtYXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmXDoWxsw610w6Fzb2sgbWVnZXLFkXPDrXTDqXNlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQml6b255b3Mgc3rDrW5iZcOhbGzDrXTDoXNvayBoYXN6bsOhbGhhdGF0bGFubsOhIHRlaGV0aWsgZXp0IGF6IGVzemvDtnp0LiBBIHN6w61uYmXDoWxsw610w6FzIG1lZ2VyxZFzw610w6lzw6loZXoga2F0dGludHNvbiBheiBPSyBsZWhldMWRc8OpZ3JlLCBtw6Fza8O8bMO2bmJlbiBhIHJlbmRzemVyIDEwIG3DoXNvZHBlcmNlbiBiZWzDvGwgdmlzc3phw6FsbCBhIGtvcsOhYmJpcmEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJBa2t1bXVsw6F0b3IgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQXogQWtrdW11bMOhdG9ya8OtbcOpbMWRIG3Ds2RvdCB0w7ZsdMOpcyBrw7Z6YmVuIG5lbSBsZWhldCBoYXN6bsOhbG5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkFra3VtdWzDoXRvcmvDrW3DqWzFkSBtw7NkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iQ3PDtmtrZW50aSBhIHRlbGplc8OtdG3DqW55dCDDqXMgYSBow6F0dMOpcmFkYXRvayBoYXN6bsOhbGF0w6F0Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWh5LXJBTS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCmluZGV4IGNiYjlhODkuLjI5ZTNhMjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaHktckFNL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLUttWh1bbVo9Wh1a/VqCDVrNW81aXWgdW+1aHVriDVpzoiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i1LHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INW81aXVqtWr1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+ItSx1bbVv9Wl1b3VpdWsIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LdWoINWh1bbVv9Wl1b3VvtWh1a4g1ac6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i1LLVuNWs1bjWgCDVvtWl1oDVu9Wr1bYg1bDVodW+1aXVrNW+1aHVrtW21aXWgNWoINWw1aXVvNWh1oHVvtWl1awg1aXVtiDWgdW41oLWgdWh1a/Vq9aBOiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i1YfVodaA1arVodWv1aHVtiDVr9Wh1brVqyBXaUZpINaB1oDVq9W51bYg1aHVttW71aHVv9W+1aXWgToiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLVh9Wh1oDVqtWh1a/VodW2INWv1aHVutWrIFdpRmkg1oHWgNWr1bnVqCDVtNWr1aHWgdWh1b46Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i1LfVr9aA1aHVttWrINWw1aXVvNWh1oDVsdWh1a/VuNaC1bTVtiDVqNW21aTVsNWh1b/VvtWl1oE6Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i1LHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INW81aXVqtWr1bTVtiDVodW21bvVodW/1b7VodWuINWnOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+ItSx1bfVrdWh1b/VodW21oTVodW11avVtiDVvNWl1arVq9W01agg1bTVq9Wh1oHVvtWh1a4g1ac6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i1LHVt9Wt1aHVv9Wh1bbWhNWh1bXVq9W2INW81aXVqtWr1bTVtiDVodW21bvVodW/1b7VpdaBOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLUsdW31a3VodW/1aHVttaE1aHVtdWr1bYg1bzVpdWq1avVtNWoINW01avVodaB1b7VpdaBOiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLVkdW41oLWgdWh1aTWgNWl1awg1brVodW11a7VodW81bjWgtWp1bXVuNaC1bbVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjLUsy0z1LMg1b/VvtW11aHVrNW21aXWgNWrINaF1aPVv9Wh1aPVuNaA1a7VuNaC1bTVqCDVpNWh1aTVodaA1aXWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjTUsyDVv9W+1bXVodWs1bbVpdaA1asg1oXVo9W/1aHVo9W41oDVrtW41oLVtNWoINWk1aHVpNWh1oDVpdaB1b7VodWuINWnIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i1ZXVo9W/1aHVo9W41oDVrtW+1aHVriDVp9WdIDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLVjdWh1bDVtNWh1bbVodW51aHWg9WdIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g1abVo9W41oLVt9Wh1oHVuNaC1bQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+ItSx1bfVrdWh1b/VodW21oTVodW11avVtiDVvNWl1arVq9W0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+ItWB1aXWgCDVvtWl1oDVu9Wr1bYg1afVr9aA1aHVttW21aXWgNWoINW/1aXVvdWh1bbVpdWs1asg1aXVtiDVodW11b3Vv9Wl1bIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLVgNWh1b7VpdWs1b7VodWu1asg1bTVodW91avVtiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ItWn1a/WgNWh1bbVqyDVodW01oDVodWv1oHVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i1bjWgNW41bbVpdWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLVgNW21aHWgNWh1b7VuNaAINW51acg1aPVuNaA1a7VodaA1a/VpdWsIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3VqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i1LHVvtWl1azVq9W2Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+ItWK1aHVv9W01bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItaH1b0gPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLVgNW41oDVq9Wm1bjVttWh1a/VodW2INW/1oDVuNWw1bjWgtW0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i1YjWgtWy1bLVodWw1aHVtdWh1oEg1b/WgNW41bDVuNaC1bQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i1YDVodW/1bjWgtWvINW/1oDVuNWw1bjWgtW0Ijwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItWE1aHWgNW/1a/VuNaB1asg1b/VttW/1aXVvdW41oLVtNWoINW01avVodaB1b7VodWuINWnIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItWG1b7VodWm1aXWgdW21bjWgtW0INWnINWu1aHVttaA1aHVotWl1bzVttW+1aHVrtW41oLVqdW11bjWgtW21agg1ocg1obVuNW21aHVtdWr1bYg1b/VvtW11aHVrNW21aXWgNWoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLUsdW21bvVodW/1aXVrCDVtNWh1oDVv9Wv1bjWgdWrINW/1bbVv9Wl1b3VuNaC1bTVqCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLUstW41b7VodW21aTVodWv1bjWgtWp1bXVuNaC1bbVqCDVqdWh1oTWgdW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDVrtaA1aHVo9Wr1oDVqCDVr9W91a/VvdWrINWw1aHVvtWh1oTVodWj1oDVpdWsINWh1bXVtiDVodW01aXVttW2INWr1bbVuSDWgdW41oLWgdWh1aTWgNW+1bjWgtW0INWnINWx1aXWgCDVp9Wv1oDVodW21avVtjoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i1LHVtdWs1ofVvSDWgdW41oLVtdaBINW51b/VodWsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItWE1aHWhNaA1aXVrCDVotW41azVuNaA1agiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+ItWE1aXWgNWq1aXVrCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+LdWoINWx1aHVtdW21asg1bjWgtWq1aPVttW41oLVqdW11aHVtiDVpdaA1a/VrdW41b3VuNaC1anVtdWh1bYg1bDVodW+1aXVrNW+1aHVriDVpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+ItS01avVutW51aXWhNWdINW91a/VptWi1bbWhdaA1avVttWh1a/VqCDVvtWl1oDVodWv1aHVttWj1bbVpdWs1bjWgiDVsNWh1bTVodaAOiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLUtNW41oLWhCDWhdWj1b/VodWj1bjWgNWu1bjWgtW0INWl1oQg1bHVpdaAINWh1bfVrdWh1b/VodW21oTVodW11avVtiDVutaA1bjWhtWr1azVqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+ItWA1aHVtNWh1a/VodaA1aPVqyDVldWELdWrINWv1aHWgNWj1aHVvtW41oDVq9W5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i1ZHVuNaC1oHVodWk1oDVpdWsINW21aXWgNWv1aHVvNW41oLWgdW+1aHVriDVtNWh1oDVv9Wv1bjWgdWrINW/1bjVr9W41b3VodW11bbVuNaC1anVtdW41oLVttWoIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLVhNWr1aHWgdW21aXVntWsIEJsdWV0b290aC3VqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i1Y3Vv9Wl1bLVttWh1bfVodaA1agg1bHVpdaAINW61azVodW21bfVpdW/1avVtiDVtNWr1aHWgdW21aXVrNW41oIg1bDVodW01aHWgCDVttWh1a0g1aHVttWw1oDVodWq1aXVt9W/INWnINW01avVodaB1bbVpdWsIEJsdWV0b290aC3VqDoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLVhNWr1aHWgdW21aXVrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+ItS/1avWgNWh1bzVpdWsIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPi3VqyDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDVttWv1aHVv9W01aHVtNWiIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i1L/Vq9aA1aHVvNWl1awg1aHVtdW9INWw1aHVvtWl1azVvtWh1a7VqyDVotW41azVuNaAINWu1aHVttW41oLWgdW41oLVtNW21aXWgNWrINW21a/VodW/1bTVodW01aIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i1LHWgNWj1aXVrNWh1oPVodWv1b7VodWuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i1ZHVodWu1oAg1a/VodaA1ofVuNaA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i1Y3VuNW+1bjWgNWh1a/VodW2INWv1aHWgNaH1bjWgNW41oLVqdW11bjWgtW2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+ItSy1aHWgNWx1oAg1a/VodaA1ofVuNaA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLVgNaA1aHVv9Wh1bog1a/VodaA1ofVuNaA1bjWgtWp1bXVuNaC1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItS11oDVotWl1oQg1bnWgdW41oLWgdWh1aTWgNWl1awg1aHVtdW9INWu1aHVttW41oLWgdW41oLVtNW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItWR1bjWgtaB1aHVpNaA1aXVrCDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVqyDWgdWh1bbVr9WrINW21aXWgNaE1ofVuNaC1bQg1aHVvNWh1bbWgSDVsdWh1bXVttWh1bXVq9W2INWh1abVpNWh1bbVt9Wh1bbVqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i1ZHVuNaC1oHVodWk1oDVpdWsINWh1bXVvSDVrtWh1bbVuNaC1oHVuNaC1bTVttWl1oDVtiDVodW81aHVttaBINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVttWrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLVkdW41oLWgdWh1aTWgNWl1awg1a7VodW21bjWgtaB1bjWgtW01bbVpdaA1asg1oHVodW21a/VqyDVvtWl1oDWh9W41oLVtCDWhyDVsNW21bnVpdaB1bbVpdWsINWx1aHVtdW21aHVtdWr1bYg1aHVptWk1aHVttW31aHVtiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLVkdW41oLWgdWh1aTWgNWl1awg1afVr9aA1aHVttWr1bYg1ocg1bDVttW51aXWgdW21aXVrCDVsdWh1bXVttWh1bXVq9W2INWh1abVpNWh1bbVt9Wh1bYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItSx1bXVrCDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i1YrVodW/1oDVodW91b8g1aciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLVjdW41b7VuNaA1aHVr9Wh1bYg1aPVuNaC1bXVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i1LPVq9W31aXWgNWh1bXVq9W2INWj1bjWgtW11bbVpdaAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLVgNWh1b/VuNaC1a8g1aPVuNaC1bXVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLUsdW21bDVodW11b8g1aPVuNaC1bXVttWl1oAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i1LPVuNaC1bXVttWrINaD1bjWg9W41a3VuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLVkdW41oLVtdaBINW/1aHVrCDUsdaA1aHVoyDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaA1asg1b3VodWs1avVr9WoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLVhNWr1aHWgdW21aXVrCDVsNWh1b/VuNaC1a8g1aPVuNaC1bbVodW11avVtiDVodW21oHVuNaC1bTVqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItS/1avWgNWh1bzVpdWsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+ItWA1aHVvdW/1aHVv9Wl1awg1a/VodaA1aPVodW+1bjWgNW41oLVtNW21aXWgNWoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i1LPVuNaC1bbVodW11avVtiDVuNaA1bjVtyDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaA1agg1a/VodaA1bjVsiDVpdW2INWh1bXVvSDVvdWh1oDWhNWoINaF1aPVv9Wh1aPVuNaA1a7VtNWh1bYg1bDVodW01aHWgCDVuNW5INW61avVv9Wh1bbVqyDVpNWh1oDVsdW21aXVrDog1Y3VpdWy1bTVpdaEINS81aHVviDVr9W41bPVodWv1ajVnSDVo9W41oLVttWh1bXVq9W2INWh1bXVvSDVr9Wh1oDVo9Wh1b7VuNaA1bjWgtW01bbVpdaA1agg1bDVodW91b/VodW/1aXVrNW41oIg1bDVodW01aHWgDog1YDVodWv1aHVvNWh1a8g1aTVpdW61oTVuNaC1bQg1aHVtdW9INWv1aHWgNWj1aHVvtW41oDVuNaC1bTVttWl1oDVqCDVr9W+1aXWgNWh1a/VodW11b7VpdW2IDEwINW+1aHVtdaA1a/VtdWh1bYg1bDVpdW/1bg6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLVhNWh1oDVv9Wv1bjWgSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLVhNWh1oDVv9Wv1bjWgdWrINW/1bbVv9Wl1b3VuNaC1bTVqCDVrNWr1oHWhNWh1b7VuNaA1bTVodW2INWq1aHVtNWh1bbVodWvINWw1aHVvdWh1bbVpdWs1asg1bnVpyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLVhNWh1oDVv9Wv1bjWgdWrINW/1bbVv9Wl1b3VuNaC1bQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLVhtW+1aHVptWl1oHVttW41oLVtCDVpyDVrtWh1bbWgNWh1aLVpdW81bbVvtWh1a7VuNaC1anVtdW41oLVttWoINaHINaG1bjVttWh1bXVq9W2INW/1b7VtdWh1azVttWl1oDVqCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaW4vc3RyaW5ncy54bWwKaW5kZXggYmJmMDE4ZC4uZjdmMzM3MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pbi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWluL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJQZW5kZXJpbmcgc2VueWFwLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJNb2RlIGtlcmphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJNZW55aW5na2lya2FuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGRpc2luZ2tpcmthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJTZW11YSBhcGxpa2FzaSB0ZXJiYXJ1IHRlbGFoIGRpdHV0dXAuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJIb3RzcG90IHNlbHVsZXIgZGlub25ha3RpZmthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJIb3RzcG90IHNlbHVsZXIgZGlha3RpZmthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJUcmFuc21pc2kgbGF5YXIgYmVyaGVudGkuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTW9kZSBrZXJqYSBub25ha3RpZi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNb2RlIGtlcmphIGFrdGlmLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik1vZGUga2VyamEgZGlub25ha3RpZmthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTW9kZSBrZXJqYSBkaWFrdGlma2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJLZWNlcmFoYW4gdGFtcGlsYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEYXRhIDJHLTNHIGRpamVkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IkRhdGEgNEcgZGlqZWRhIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGRpZ3VuYWthbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJCYXRhcyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJQZXJpbmdhdGFuIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGUga2VyamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iTGF5YXIgdGVya2luaSBBbmRhIG11bmN1bCBkaSBzaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mbyBBcGxpa2FzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+InBpbiBrZSBsYXlhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJ0ZWx1c3VyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iVGlkYWsgZGFwYXQgbWVtdWxhaSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IkxhaW5ueWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iUml3YXlhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IExhZ2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IlBpc2Foa2FuIEhvcml6b250YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJQaXNhaGthbiBWZXJ0aWthbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJQaXNhaGthbiBLaHVzdXMiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUGVuZ2hlbWF0IGJhdGVyYWkgYWt0aWYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iTWVuZ3VyYW5naSBraW5lcmphIGRhbiBkYXRhIGxhdGFyIGJlbGFrYW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJOb25ha3RpZmthbiBwZW5naGVtYXQgYmF0ZXJhaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLb250ZW4gdGVyc2VtYnVueWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYWthbiBtdWxhaSBtZW5hbmdrYXAgYXBhIHNhamEgeWFuZyBkaXRhbXBpbGthbiBwYWRhIGxheWFyIEFuZGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IkphbmdhbiB0YW1waWxrYW4gbGFnaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJIYXB1cyBzZW11YSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iVG9sYWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBhZGFsYWggZGlhbG9nIHZvbHVtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlNlbnR1aCB1bnR1ayBtZW11bGloa2FuIGFzbGlueWEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkFuZGEgbWVuZ2d1bmFrYW4gcHJvZmlsIGtlcmphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iUGVueWV0ZWwgQW50YXJtdWthIFBlbmdndW5hIFNpc3RlbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlRhbXBpbGthbiBwZXJzZW50YXNlIGJhdGVyYWkgeWFuZyB0ZXJzZW1hdCI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQWt0aWZrYW4gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJVbnR1ayBtZW5naHVidW5na2FuIGtleWJvYXJkIGRlbmdhbiB0YWJsZXQsIHRlcmxlYmloIGRhaHVsdSBha3RpZmthbiBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aWZrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJUZXJhcGthbiBrZSBub3RpZmlrYXNpIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlRlcmFwa2FuIHVudHVrIHNlbXVhIG5vdGlmaWthc2kgZGFyaSBhcGxpa2FzaSBpbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iRGlibG9raXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJUaW5na2F0IGtlcGVudGluZ2FuOiByZW5kYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVGluZ2thdCBrZXBlbnRpbmdhbjogbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlRpbmdrYXQga2VwZW50aW5nYW46IHRpbmdnaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlRpbmdrYXQga2VwZW50aW5nYW46IGRhcnVyYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IkphbmdhbiBwZXJuYWggdHVuanVra2FuIG5vdGlmaWthc2kgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlR1bmp1a2thbiBkaSBiYXdhaCBkYWZ0YXIgbm90aWZpa2FzaSB0YW5wYSBzdWFyYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVHVuanVra2FuIG5vdGlmaWthc2kgaW5pIHRhbnBhIHN1YXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJUdW5qdWtrYW4gZGkgYmFnaWFuIGF0YXMgZGFmdGFyIG5vdGlmaWthc2kgZGFuIGJ1bnlpa2FuIHN1YXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik11bmN1bCBkaSBsYXlhciBkYW4gYnVueWlrYW4gc3VhcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IlNldGVsYW4gbGFpbm55YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IlNlbGVzYWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJXYXJuYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iV2FybmEgbWFsYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ildhcm5hIGtodXN1cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ildhcm5hIHRpZGFrIGRpa2V0YWh1aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJQZXJ1YmFoYW4gd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJUYW1waWxrYW4gdWJpbiBTZXRlbGFuIENlcGF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBa3RpZmthbiB0cmFuc2Zvcm1hc2kga2h1c3VzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVGVyYXBrYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iS29uZmlybWFzaSBzZXRlbGFuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQmViZXJhcGEgc2V0ZWxhbiB3YXJuYSBkYXBhdCBtZW1idWF0IHBlcmFuZ2thdCBpbmkgdGlkYWsgZGFwYXQgZGlndW5ha2FuLiBLbGlrIE9LRSB1bnR1ayBtZW5nb25maXJtYXNpIHNldGVsYW4gd2FybmEgaW5pLiBKaWthIHRpZGFrLCBzZXRlbGFuIGluaSBha2FuIGRpc2V0ZWwgdWxhbmcgc2V0ZWxhaCAxMCBkZXRpay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyYWkgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iUGVuZ2hlbWF0IEJhdGVyYWkgdGlkYWsgdGVyc2VkaWEgc2VsYW1hIHBlbmdpc2lhbiBkYXlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IlBlbmdoZW1hdCBCYXRlcmFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iTWVuZ3VyYW5naSBwZXJmb3JtYSBkYW4gZGF0YSBsYXRhciBiZWxha2FuZyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pcy1ySVMvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAppbmRleCBmOTIzNWEwLi5jMWQzNTkxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWlzLXJJUy9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iRW5naW4gaHJpbmdpbmcuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IlZpbm51c3RpbGxpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ikh1bnNhIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHbDrXNhw7AgZnLDoS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLDlmxsIG7DvWxlZyBmb3JyaXQgZmphcmzDpmfDsC4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IlNsw7Zra3Qgw6EgZmFyc8OtbWFhw7BnYW5nc3N0YcOwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ikt2ZWlrdCDDoSBmYXJzw61tYWHDsGdhbmdzc3Rhw7AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iU2tqw6HDunRzZW5kaW5ndSBow6Z0dC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJTbMO2a2t0IMOhIHZpbm51c3RpbGxpbmd1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ikt2ZWlrdCDDoSB2aW5udXN0aWxsaW5ndS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJTbMO2a2t0IMOhIHZpbm51c3RpbGxpbmd1LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJLdmVpa3Qgw6EgdmlubnVzdGlsbGluZ3UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkJpcnR1c3RpZyBza2rDoXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJTbMO2a2t0IGVyIMOhIDJHLSBvZyAzRy1nw7ZnbnVtIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iU2zDtmtrdCBlciDDoSA0Ry1nw7ZnbnVtIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IG5vdHXDsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IGjDoW1hcmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4gdmnDsHbDtnJ1biI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iVmlubnVzdGlsbGluZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJOw71sZWdhciBza2rDoW15bmRpciBiaXJ0YXN0IGjDqXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJGb3JyaXRzdXBwbMO9c2luZ2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4ic2tqw6FmZXN0aW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImxlaXRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJFa2tpIHZhciBow6ZndCBhw7AgcsOmc2EgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNZWlyYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJGZXJpbGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDDrSB2acOwYsOzdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iTMOhcsOpdHQgc2tpcHRpbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJMw7PDsHLDqXR0IHNraXB0aW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlPDqXJzbmnDsGluIHNraXB0aW5nIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ikt2ZWlrdCBlciDDoSByYWZobMO2w7B1c3Bhcm5hw7BpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IkRyZWd1ciDDunIgYWZrw7ZzdHVtIG9nIGJha2dydW5uc2fDtmdudW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlNsw7Zra3ZhIMOhIHJhZmhsw7bDsHVzcGFybmHDsGkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iSW5uaWhhbGQgZmFsacOwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IG11biBmYW5nYSBhbGx0IHNlbSBiaXJ0aXN0IMOhIHNrasOhbnVtLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJFa2tpIHPDvW5hIMO+ZXR0YSBhZnR1ciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJIcmVpbnNhIGFsbHQiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IkhhZm5hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gZXIgaGxqw7PDsHN0eXJrc3ZhbG15bmRpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlNuZXJ0dSB0aWwgYcOwIGbDpnJhIMOtIHVwcHJ1bmFsZWd0IGhvcmYuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IsOew7ogZXJ0IGHDsCBub3RhIHZpbm51c25pw7Bpw7AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJGw61uc3RpbGxpbmdhciBrZXJmaXN2acOwbcOzdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJTw71uYSBpbm5mZWxsZGEgcmFmaGzDtsOwdXN0w7bDsHUiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+Ikt2ZWlramEgw6EgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJUaWwgYcOwIGdldGEgdGVuZ3QgbHlrbGFib3LDsGnDsCB2acOwIHNwamFsZHTDtmx2dW5hIMO+YXJmdHUgZnlyc3QgYcOwIGt2ZWlramEgw6EgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ikt2ZWlramEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJMw6F0YSBnaWxkYSB1bSB0aWxreW5uaW5nYXIgdmFyw7BhbmRpIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkzDoXRhIGdpbGRhIHVtIGFsbGFyIHRpbGt5bm5pbmdhciBmcsOhIMO+ZXNzdSBmb3JyaXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IsOadGlsb2t1w7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJFa2tpIHN2byBtaWtpbHbDpmd0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlZlbmp1bGVndCBtaWtpbHbDpmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ik1qw7ZnIG1pa2lsdsOmZ3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJBZmFyIMOhcsOtw7BhbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJBbGRyZWkgc8O9bmEgw75lc3NhciB0aWxreW5uaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iU8O9bmEgbmXDsHN0IMOhIHRpbGt5bm5pbmdhbGlzdGFudW0gw6FuIGhsasOzw7BzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJTw71uYSDDvmVzc2FyIHRpbGt5bm5pbmdhciDDoW4gaGxqw7PDsHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlPDvW5hIGVmc3Qgw6EgdGlsa3lubmluZ2FsaXN0YW51bSBvZyBzcGlsYSBobGrDs8OwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkJpcnRhIMOhIHNrasOhbnVtIG9nIHNwaWxhIGhsasOzw7AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZWlyaSBzdGlsbGluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iTG9racOwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iVmVuanVsZWdpciBsaXRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOw6Z0dXJsaXRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iU8OpcnNuacOwbmlyIGxpdGlyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iw5PDvmVra3RpciBsaXRpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJMaXRhYnJleXRpbmdhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlPDvW5hIGZsw61zYXIgw60gZmzDvXRpc3RpbGxpbmd1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iS3ZlaWtqYSDDoSBzw6lyc25pw7Bpbm5pIHVtYnJleXRpbmd1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iTm90YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJTdGHDsGZlc3RhIHN0aWxsaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJTdW1hciBsaXRhc3RpbGxpbmdhciBrdW5uYSBhw7AgYml0bmEgw6Egbm90YWdpbGRpIHTDpmtpc2lucy4gVmVsZHUg4oCew40gbGFnaeKAnCB0aWwgYcOwIHN0YcOwZmVzdGEgw75lc3NhciBsaXRhc3RpbGxpbmdhciwgYcOwIMO2w7BydW0ga29zdGkgdmVyw7BhIGxpdGlybmlyIGVuZHVyc3RpbGx0aXIgZWZ0aXIgdMOtdSBzZWvDum5kdXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJSYWZobGHDsGEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iRWtraSBlciBow6ZndCBhw7Agbm90YSByYWZobMO2w7B1c3Bhcm5hw7AgbWXDsGFuIMOhIGhsZcOwc2x1IHN0ZW5kdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iUmFmaGzDtsOwdXNwYXJuYcOwdXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJEcmVndXIgw7pyIGFma8O2c3R1bSBvZyBiYWtncnVubnNnw7ZnbnVtIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdC9zdHJpbmdzLnhtbAppbmRleCBhMzg5MTI2Li5kZDY1OTcwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl0L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXQvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlN1b25lcmlhIHNpbGVuemlvc2EuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+Ik1vZGFsaXTDoCBMYXZvcm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IkVsaW1pbmEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gZWxpbWluYXRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlR1dHRlIGxlIGFwcGxpY2F6aW9uaSByZWNlbnRpIHNvbm8gc3RhdGUgcmltb3NzZS4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IkhvdHNwb3QgbW9iaWxlIGRpc2F0dGl2YXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IkhvdHNwb3QgbW9iaWxlIGF0dGl2YXRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IlRyYXNtaXNzaW9uZSBkZWxsbyBzY2hlcm1vIGludGVycm90dGEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTW9kYWxpdMOgIExhdm9ybyBub24gYXR0aXZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ik1vZGFsaXTDoCBMYXZvcm8gYXR0aXZhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik1vZGFsaXTDoCBMYXZvcm8gZGlzYXR0aXZhdGEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Ik1vZGFsaXTDoCBMYXZvcm8gYXR0aXZhdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+Ikx1bWlub3NpdMOgIGRlbGxvIHNjaGVybW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJEYXRpIDJHLTNHIHNvc3Blc2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiJEYXRpIDRHIHNvc3Blc2kiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4gdXRpbGl6emF0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJMaW1pdGUgZGkgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQXZ2aXNvIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGFsaXTDoCBMYXZvcm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iTGUgdHVlIHNjaGVybWF0ZSByZWNlbnRpIHZlbmdvbm8gdmlzdWFsaXp6YXRlIGluIHF1ZXN0YSBzZXppb25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mb3JtYXppb25pIHN1bGxcJ2FwcGxpY2F6aW9uZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImJsb2NjbyBzdSBzY2hlcm1vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ImNlcmNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJJbXBvc3NpYmlsZSBhdnZpYXJlIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iQWx0cm8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iQ3Jvbm9sb2dpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iQWx0cmUgYXR0aXZpdMOgOiA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkRpdmlzaW9uZSBpbiBvcml6em9udGFsZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdmlzaW9uZSBpbiB2ZXJ0aWNhbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXNpb25lIHBlcnNvbmFsaXp6YXRhIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlJpc3Bhcm1pbyBlbmVyZ2V0aWNvIGF0dGl2byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSaWR1Y2UgbGUgcHJlc3RhemlvbmkgZSBpIGRhdGkgaW4gYmFja2dyb3VuZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iRGlzYXR0aXZhIHJpc3Bhcm1pbyBlbmVyZ2V0aWNvIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlbnV0aSBuYXNjb3N0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBpbml6aWVyw6AgYWQgYWNxdWlzaXJlIHR1dHRvIGNpw7IgY2hlIMOoIHZpc3VhbGl6emF0byBzdWwgdHVvIHNjaGVybW8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5vbiBtb3N0cmFyZSBwacO5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkNhbmNlbGxhIHR1dHRvIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJOZWdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gcmFwcHJlc2VudGEgbGEgZmluZXN0cmEgZGkgZGlhbG9nbyByZWxhdGl2YSBhbCB2b2x1bWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJUb2NjYSBwZXIgcmlwcmlzdGluYXJlIGxcJ29yaWdpbmFsZS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iU3RhaSB1dGlsaXp6YW5kbyBpbCBwcm9maWxvIGRpIGxhdm9ybyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlNpbnRldGl6emF0b3JlIGludGVyZmFjY2lhIHV0ZW50ZSBkaSBzaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iTW9zdHJhIHBlcmNlbnR1YWxlIGJhdHRlcmlhIGluY29ycG9yYXRhIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJBdHRpdmFyZSBpbCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBlciBjb25uZXR0ZXJlIGxhIHRhc3RpZXJhIGFsIHRhYmxldCwgZGV2aSBwcmltYSBhdHRpdmFyZSBpbCBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQXR0aXZhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBwbGljYSBhIG5vdGlmaWNoZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcHBsaWNhIGEgdHV0dGUgbGUgbm90aWZpY2hlIGRpIHF1ZXN0XCdhcHAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvY2NhdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnRhbnphIHNjYXJzYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbnphIG5vcm1hbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW56YSBlbGV2YXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iSW1wb3J0YW56YSB1cmdlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOb24gbW9zdHJhcmUgbWFpIHF1ZXN0ZSBub3RpZmljaGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iTW9zdHJhIHNpbGVuemlvc2FtZW50ZSBuZWxsYSBwYXJ0ZSBpbmZlcmlvcmUgZGVsbFwnZWxlbmNvIGRlbGxlIG5vdGlmaWNoZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhIHNpbGVuemlvc2FtZW50ZSBxdWVzdGUgbm90aWZpY2hlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNb3N0cmEgbmVsbGEgcGFydGUgc3VwZXJpb3JlIGRlbGxcJ2VsZW5jbyBkZWxsZSBub3RpZmljaGUgZSByaXByb2R1Y2kgc3Vvbm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iQXByaSBzdWxsbyBzY2hlcm1vIGUgcmlwcm9kdWNpIHN1b25vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJBbHRyZSBpbXBvc3RhemlvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGaW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29sb3JpIG5vcm1hbGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29sb3JpIHBlciBsYSBub3R0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ29sb3JpIHBlcnNvbmFsaXp6YXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29sb3JpIHNjb25vc2NpdXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhIGRlbCBjb2xvcmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJNb3N0cmEgaWwgcmlxdWFkcm8gSW1wb3N0YXppb25pIHJhcGlkZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQXR0aXZhIGxhIHRyYXNmb3JtYXppb25lIHBlcnNvbmFsaXp6YXRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iQXBwbGljYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25mZXJtYSBsZSBpbXBvc3RhemlvbmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJBbGN1bmUgaW1wb3N0YXppb25pIHJlbGF0aXZlIGFpIGNvbG9yaSBwb3RyZWJiZXJvIHJlbmRlcmUgaW51dGlsaXp6YWJpbGUgaWwgZGlzcG9zaXRpdm8uIEZhaSBjbGljIHN1IE9LIHBlciBjb25mZXJtYXJlIHF1ZXN0ZSBpbXBvc3Rhemlvbmk7IGluIGNhc28gY29udHJhcmlvLCBsZSBpbXBvc3RhemlvbmkgdmVycmFubm8gcmVpbXBvc3RhdGUgZG9wbyAxMCBzZWNvbmRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyaWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iUmlzcGFybWlvIGVuZXJnZXRpY28gbm9uIGRpc3BvbmliaWxlIGR1cmFudGUgbGEgcmljYXJpY2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iUmlzcGFybWlvIGVuZXJnZXRpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSaWR1Y2UgbGUgcHJlc3RhemlvbmkgZSBpIGRhdGkgaW4gYmFja2dyb3VuZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtaXcvc3RyaW5ncy54bWwKaW5kZXggY2Q2NDAzNC4uOTViYmUyMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1pdy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWl3L3N0cmluZ3MueG1sCkBAIC0xNjMsOCArMTYzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLXptec16bXldecINep16fXmC4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i157XpteRINei15HXldeT15QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Iteh15LXldeoINeQ16ogPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g16DXk9eX15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i15vXnCDXlNeQ16TXnNeZ16fXpteZ15XXqiDXlNeQ15fXqNeV16DXldeqINeg16HXkteo15UuIjwvc3RyaW5nPgpAQCAtMjE2LDE0ICsyMTUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLXoNen15XXk9eUINec16nXmdeq15XXoyDXkNeZ16DXmNeo16DXmCDXkdeg15nXmdeTINeb15HXldeZ15QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i16DXp9eV15PXlCDXnNep15nXqteV16Mg15DXmdeg15jXqNeg15gg15HXoNeZ15nXkyDXnteV16TXotec16ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i15TXoteR16jXqiDXlNee16HXmiDXlNeV16TXoden15QuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i157XpteRINei15HXldeT15Qg15vXkdeV15kuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i157XpteRINei15HXldeT15Qg157Xldek16LXnC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLXntem15Eg16LXkdeV15PXlCDXlNeV16nXkdeqLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLXntem15Eg16LXkdeV15PXlCDXlNeV16TXotecLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLXkdeU15nXqNeV16og16rXpteV15LXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IuKAj9eU16nXmdee15XXqSDXkdeg16rXldeg15kgMkctM0cg157Xldep15TXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IuKAj9eU16nXmdee15XXqSDXkdeg16rXldeg15kgNEcg157Xldep15TXlCI8L3N0cmluZz4KQEAgLTMwMSwxNSArMjk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDXkdep15nXnteV16kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4i15TXkteR15zXlCDXqdecIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IteQ15bXlNeo15QgLSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLXntem15Eg16LXkdeV15PXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLXlNee16HXm9eZ150g15TXkNeX16jXldeg15nXnSDXnteV16TXmdei15nXnSDXm9eQ158iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLXnteZ15PXoiDXotecINeU15DXpNec15nXp9em15nXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IteU16bXnteT16og157XodeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IteX16TXqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i15zXkCDXoNeZ16rXnyDXlNeZ15Qg15zXlNek16LXmdecINeQ16ogPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLXoteV15MiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i15TXmdeh15jXldeo15nXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INeg15XXodek15XXqiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i16TXmdem15XXnCDXkNeV16TXp9eZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i16TXmdem15XXnCDXkNeg15vXmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLXpNeZ16bXldecINee15XXqteQ150g15DXmdep15nXqiI8L3N0cmluZz4KQEAgLTM3Miw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLXqteb15XXoNeqIFwn15fXmdeh15vXldefINeR16HXldec15zXlFwnINek15XXotec16oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i157XpNeX15nXqiDXkNeqINeU15HXmdem15XXoteZ150g15XXoNeq15XXoNeZ150g15HXqNen16IiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+Iteb15HXlCDXkNeqINeU15fXmdeh15vXldefINeR16HXldec15zXlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLXlNeq15XXm9efINee15XXodeq16giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g15nXqteX15nXnCDXnNeU16fXnNeZ15gg15DXqiDXm9ecINeU16rXldeb158g15TXnteV16bXkiDXkdee16HXmiDXqdec15ouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IteQ15wg16rXpteZ15Ig16nXldeRIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Iteg16fXlCDXlNeb15wiPC9zdHJpbmc+CkBAIC00MTcsOCArNDEwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IteT15fXlCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INeU15XXkCDXqteZ15HXqiDXlNeT15Ut16nXmdeXINep15wg16LXldem157XqiDXlNen15XXnCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IteS16Ig15vXk9eZINec16nXl9eW16gg15DXqiDXoteV16bXnteqINeU16fXldecINeU157Xp9eV16jXmdeqLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLXkNeq15Qg157Xqdeq157XqSDXkdek16jXldek15nXnCDXlNei15HXldeT15Qg16nXnNeaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i15TXpteSINeR16nXldeo16og15TXodeY15jXldehINeQ16og15DXl9eV15Yg16LXldem157XqiDXlNeh15XXnNec15QiPC9zdHJpbmc+CkBAIC00NTgsNCArNDUwLDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuKAj9eU15DXnSDXnNeU16TXoteZ15wg15DXqiDXlC1CbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuKAj9eb15PXmSDXnNeX15HXqCDXkNeqINeU157Xp9ec15PXqiDXnNeY15DXkdec15gsINeq15fXmdec15Qg16LXnNeZ15og15zXlNek16LXmdecINeQ16og15QtQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IteU16TXotecIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i15TXl9ecINei15wg15TXldeT16LXldeqINep15wgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i15TXl9ecINei15wg15vXnCDXlNeU15XXk9ei15XXqiDXnteQ16TXnNeZ16fXpteZ15Qg15bXlSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLXl9eh15XXnSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IteX16nXmdeR15XXqiDXoNee15XXm9eUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IteX16nXmdeR15XXqiDXqNeS15nXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IteX16nXmdeR15XXqiDXkteR15XXlNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i15fXqdeZ15HXldeqINeT15fXldek15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Itec16LXldec150g15DXnCDXqtem15nXkiDXkNeqINeU15TXldeT16LXldeqINeU15DXnNeUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IteU16bXkiDXkdeX15zXpyDXlNeq15fXqteV158g16nXnCDXqNep15nXnteqINeU15TXldeT16LXldeqINeR15zXmSDXnNeU16nXnteZ16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IteU16bXkiDXkNeqINeU15TXldeT16LXldeqINeU15DXnNeUINeR15zXmSDXnNeU16nXnteZ16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IteU16bXkiDXkdeX15zXpyDXlNei15zXmdeV158g16nXnCDXqNep15nXnteqINeU15TXldeT16LXldeqINeV15TXqdee16Ig16bXnNeZ15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i15TXpteSINec16jXkteiINei15wg15TXnteh15og15XXlNep157XoiDXptec15nXnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i15TXkteT16jXldeqINeg15XXodek15XXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+Iteh15nXldedIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i16bXkdei15nXnSDXqNeS15nXnNeZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i16bXkdei15kg15zXmdec15QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Item15HXoteZ150g157Xldeq15DXnteZ150g15DXmdep15nXqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Item15HXoteZ150g15zXkCDXmdeT15XXoteZ150iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i16nXmdeg15XXmSDXpteR16IiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLXlNem15LXqiDXkNeo15nXlyDXqdecINeU15LXk9eo15XXqiDXnteU15nXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IteU16TXotecINeY16jXoNeh16TXldeo157XpteZ15Qg157Xldeq15DXnteqINeQ15nXqdeZ16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLXlNeX15wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i15DXmdep15XXqCDXlNeS15PXqNeV16oiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLXlNeS15PXqNeV16og16bXkdeiINee16HXldeZ157XldeqINei15zXldec15XXqiDXnNeU16TXldeaINeQ16og15TXnteb16nXmdeoINeU15bXlCDXnNeR15zXqteZINep157XmdepLiDXnNeX16Ug16LXnCDXkNeZ16nXldeoINeb15PXmSDXnNeQ16nXqCDXkNeqINeU15LXk9eo15XXqiDXlNem15HXoiDXlNeQ15zXlCwg15DXl9eo16og15TXkteT16jXldeqINeQ15zXlCDXmdeq15DXpNeh15Ug15zXkNeX16ggMTAg16nXoNeZ15XXqi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+Iteh15XXnNec15QgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i16rXm9eV16DXqiDXlNeX15nXodeb15XXnyDXkdeh15XXnNec15Qg15DXmdeg15Qg15bXnteZ16DXlCDXkdei16og15jXoteZ16DXqiDXlNee15vXqdeZ16giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i15fXmdeh15vXldefINeR16HXldec15zXlCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+Itee16TXl9eZ16og15DXqiDXqNee16og15TXkdeZ16bXldei15nXnSDXldeQ16og16DXqteV16DXmSDXlNeo16fXoiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtamEvc3RyaW5ncy54bWwKaW5kZXggMzljNzE2MS4uZWQwYzdlOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1qYS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWphL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLjg57jg4rjg7zjg6Ljg7zjg4nnnYDkv6HjgIIiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iV29yayDjg6Ljg7zjg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuOCkuWJiumZpOOBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jga/liYrpmaTjgZXjgozjgb7jgZfjgZ/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLmnIDov5Hjga7jgqLjg5fjg6rjgrHjg7zjgrfjg6fjg7PjgpLjgZnjgbnjgabmtojljrvjgZfjgb7jgZfjgZ/jgIIiPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuODouODkOOCpOODq+OCouOCr+OCu+OCueODneOCpOODs+ODiOOCkk9GRuOBq+OBl+OBvuOBl+OBn+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuODouODkOOCpOODq+OCouOCr+OCu+OCueODneOCpOODs+ODiOOCkk9O44Gr44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i55S76Z2i44Gu44Kt44Oj44K544OI44GM5YGc5q2i44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iV29yayDjg6Ljg7zjg4njgYzjgqrjg5XjgafjgZnjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJXb3JrIOODouODvOODieOBjOOCquODs+OBp+OBmeOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ildvcmsg44Oi44O844OJ44KS44Kq44OV44Gr44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Ildvcmsg44Oi44O844OJ44KS44Kq44Oz44Gr44GX44G+44GX44Gf44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IuODh+OCo+OCueODl+ODrOOCpOOBruaYjuOCi+OBlSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJH772eM0fjg4fjg7zjgr/jga/kuIDmmYLlgZzmraLkuK3jgafjgZkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0R+ODh+ODvOOCv+OBr+S4gOaZguWBnOatouS4reOBp+OBmSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPuS9v+eUqOS4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLkuIrpmZA6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IuitpuWRijog5LiK6ZmQ44GvPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPuOBp+OBmSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iV29yayDjg6Ljg7zjg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i44GT44GT44Gr5pyA6L+R44Gu55S76Z2i44GM6KGo56S644GV44KM44G+44GZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i44Ki44OX44Oq5oOF5aCxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i55S76Z2i5Zu65a6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuaknOe0oiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44KS6ZaL5aeL44Gn44GN44G+44Gb44KT44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuOCguOBo+OBqOimi+OCiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLlsaXmrbQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IuS7liA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g5Lu2Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLmqKrjgavliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLnuKbjgavliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i5YiG5Ymy77yI44Kr44K544K/44Og77yJIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuODkOODg+ODhuODquODvOOCu+ODvOODkOODvOOBjE9OIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuODkeODleOCqeODvOODnuODs+OCueOBqOODkOODg+OCr+OCsOODqeOCpuODs+ODieODh+ODvOOCv+OCkuWItumZkOOBl+OBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i44OQ44OD44OG44Oq44O844K744O844OQ44O844KST0ZG44Gr44GX44G+44GZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuOCs+ODs+ODhuODs+ODhOOBjOmdnuihqOekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPuOBp+OAgeeUu+mdouOBq+ihqOekuuOBleOCjOOBpuOBhOOCi+OCs+ODs+ODhuODs+ODhOOBruOCreODo+ODl+ODgeODo+OCkumWi+Wni+OBl+OBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLmrKHlm57jgYvjgonooajnpLrjgZfjgarjgYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i44GZ44G544Gm5raI5Y67Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLoqLHlj6/jgZfjgarjgYQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuOCkumfs+mHj+ODgOOCpOOCouODreOCsOOBqOOBl+OBpuS9v+eUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuOCv+ODg+ODl+OBmeOCi+OBqOWFg+OBrumfs+mHj+ODgOOCpOOCouODreOCsOOBjOW+qeWFg+OBleOCjOOBvuOBmeOAgiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4i44CBICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuS7leS6i+eUqOODl+ODreODleOCoeOCpOODq+OCkuS9v+eUqOOBl+OBpuOBhOOBvuOBmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IuOCt+OCueODhuODoFVJ6Kq/5pW044OE44O844OrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i5YaF6JS16Zu75rGg44Gu5q6L6YeP44Gu5Ymy5ZCI44KS6KGo56S644GZ44KLIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGjjgpJPTuOBq+OBl+OBvuOBmeOBi++8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLjgr/jg5bjg6zjg4Pjg4jjgafjgq3jg7zjg5zjg7zjg4njgavmjqXntprjgZnjgovjgavjga/jgIHmnIDliJ3jgatCbHVldG9vdGjjgpJPTuOBq+OBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmeOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ik9O44Gr44GZ44KLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i44CMPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+44CN44Gu6YCa55+l44Gr6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i44GT44Gu44Ki44OX44Oq44GL44KJ44Gu44GZ44G544Gm44Gu6YCa55+l44Gr6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuODluODreODg+OCr+S4rSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IumHjeimgeW6pjog5L2OIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IumHjeimgeW6pjog5LitIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IumHjeimgeW6pjog6auYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i6YeN6KaB5bqmOiDnt4rmgKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuS7iuW+jOOBr+OBk+OBrumAmuefpeOCkuihqOekuuOBl+OBquOBhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLpgJrnn6Xjg6rjgrnjg4jjga7mnKvlsL7jgavjg57jg4rjg7zjg6Ljg7zjg4njgafooajnpLrjgZnjgosiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuOBk+OBrumAmuefpeOCkuODnuODiuODvOODouODvOODieOBp+ihqOekuuOBmeOCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i6YCa55+l44Oq44K544OI44Gu5YWI6aCt44Gr6KGo56S644GX44CB6Z+z5aOw44Gn44KC55+l44KJ44Gb44KLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IueUu+mdouOBq+aVsOenkumWk+ihqOekuuOBl+OAgemfs+WjsOOBp+OCguefpeOCieOBm+OCiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i6Kmz57Sw6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i5a6M5LqGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5qiZ5rqW44Gu6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuWknOmWk+OBruiJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i44Kr44K544K/44Og44Gu6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5LiN5piO44Gq6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuiJsuOBruWkieabtCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ilvjgq/jgqTjg4Pjgq/oqK3lrppdIOOCv+OCpOODq+OBruihqOekuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i44Kr44K544K/44Og5aSJ5o+b44Gu5pyJ5Yq55YyWIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i6YGp55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuioreWumuOBrueiuuiqjSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuS4gOmDqOOBruiJsuioreWumuOCkumBqeeUqOOBmeOCi+OBqOOAgeOBk+OBruerr+acq+OCkuS9v+eUqOOBp+OBjeOBquOBj+OBquOCi+OBk+OBqOOBjOOBguOCiuOBvuOBmeOAguOBk+OBruiJsuioreWumuOCkueiuuiqjeOBmeOCi+OBq+OBr+OAgVtPS10g44KS44Kv44Oq44OD44Kv44GX44Gm44GP44Gg44GV44GE44CC56K66KqN44GX44Gq44GE5aC05ZCI44CBMTAg56eS5b6M44Gr6Kit5a6a44Gv44Oq44K744OD44OI44GV44KM44G+44GZ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLjg5Djg4Pjg4bjg6rjg7zvvIg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJe+8iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i5YWF6Zu75Lit44Gv44OQ44OD44OG44Oq44O8IOOCu+ODvOODkOODvOOBr+WIqeeUqOOBp+OBjeOBvuOBm+OCkyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLjg5Djg4Pjg4bjg6rjg7wg44K744O844OQ44O8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i44OR44OV44Kp44O844Oe44Oz44K544Go44OQ44OD44Kv44Kw44Op44Km44Oz44OJIOODh+ODvOOCv+OCkuWItumZkOOBl+OBvuOBmSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rYS1yR0Uvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAppbmRleCAyMzQ4OTFmLi41Yzg2MWY4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWthLXJHRS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4YOj4YOu4YOb4YOdIOGDoOGDlOGDn+GDmOGDm+GDmC4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i4YOh4YOQ4YOb4YOh4YOQ4YOu4YOj4YOg4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LeGDmOGDoSDhg6Phg5Lhg6Phg5rhg5Thg5Hhg5Thg5rhg6fhg53hg6Thg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhg5Dhg5vhg53hg6jhg5rhg5jhg5rhg5jhg5Ag4YOh4YOY4YOY4YOT4YOQ4YOcLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuGDp+GDleGDlOGDmuGDkCDhg5Hhg53hg5rhg50g4YOQ4YOe4YOa4YOY4YOZ4YOQ4YOq4YOY4YOQIOGDkuGDkOGDo+GDpeGDm+GDk+GDkC4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuGDm+GDneGDkeGDmOGDmuGDo+GDoOGDmCDhg6Xhg6Hhg5Thg5rhg5jhg6Eg4YOs4YOU4YOg4YOi4YOY4YOa4YOYIOGDkuGDkOGDm+GDneGDmOGDoOGDl+GDnS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLhg5vhg53hg5Hhg5jhg5rhg6Phg6Dhg5gg4YOl4YOh4YOU4YOa4YOY4YOhIOGDrOGDlOGDoOGDouGDmOGDmuGDmCDhg6nhg5Dhg5jhg6Dhg5fhg50uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i4YOU4YOZ4YOg4YOQ4YOc4YOY4YOhIOGDkuGDkOGDk+GDkOGDquGDlOGDm+GDkCDhg6jhg5Thg6nhg5Thg6Dhg5Thg5Hhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i4YOh4YOQ4YOb4YOh4YOQ4YOu4YOj4YOg4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4YOh4YOQ4YOb4YOh4YOQ4YOu4YOj4YOg4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCDhg6nhg5Dhg6Dhg5fhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i4YOh4YOQ4YOb4YOh4YOQ4YOu4YOj4YOg4YOY4YOhIOGDoOGDlOGDn+GDmOGDm+GDmCDhg5Lhg5Dhg5vhg53hg6Dhg5fhg6Phg5rhg5jhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IuGDoeGDkOGDm+GDoeGDkOGDruGDo+GDoOGDmOGDoSDhg6Dhg5Thg5/hg5jhg5vhg5gg4YOp4YOQ4YOg4YOX4YOj4YOa4YOY4YOQLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLhg5Thg5nhg6Dhg5Dhg5zhg5jhg6Eg4YOh4YOY4YOZ4YOQ4YOo4YOZ4YOQ4YOo4YOUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cg4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOYIOGDqOGDlOGDqeGDlOGDoOGDlOGDkeGDo+GDmuGDmOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOGDm+GDneGDnOGDkOGDquGDlOGDm+GDlOGDkeGDmCDhg6jhg5Thg6nhg5Thg6Dhg5Thg5Hhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiLhg5Lhg5Dhg5vhg53hg6fhg5Thg5zhg5Thg5Hhg6Phg5rhg5jhg5A6IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLhg5rhg5jhg5vhg5jhg6Lhg5g6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4YOS4YOQ4YOk4YOg4YOX4YOu4YOY4YOa4YOU4YOR4YOQIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLhg6Hhg5Dhg5vhg6Hhg5Dhg67hg6Phg6Dhg5jhg6Eg4YOg4YOU4YOf4YOY4YOb4YOYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuGDl+GDpeGDleGDlOGDnOGDmCDhg5Hhg53hg5rhg50g4YOU4YOZ4YOg4YOQ4YOc4YOU4YOR4YOYIOGDkOGDpSDhg5Lhg5Dhg5vhg53hg6nhg5zhg5Phg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLhg5Dhg57hg5rhg5jhg5nhg5Dhg6rhg5jhg5jhg6Eg4YOo4YOU4YOh4YOQ4YOu4YOU4YORIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4YOU4YOZ4YOg4YOQ4YOc4YOW4YOUIOGDqeGDkOGDm+GDkOGDkuGDoOGDlOGDkeGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLhg6vhg5jhg5Thg5Hhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi3hg5jhg6Eg4YOS4YOQ4YOb4YOd4YOr4YOQ4YOu4YOU4YOR4YOQIOGDleGDlOGDoCDhg5vhg53hg67hg5Thg6Dhg67hg5Phg5AuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuGDm+GDlOGDouGDmCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLhg5jhg6Hhg6Lhg53hg6Dhg5jhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IuGDmeGDmOGDk+GDlOGDlSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuGDsOGDneGDoOGDmOGDluGDneGDnOGDouGDkOGDmuGDo+GDoOGDmCDhg5Lhg5Dhg6fhg53hg6Thg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLhg5Xhg5Thg6Dhg6Lhg5jhg5nhg5Dhg5rhg6Phg6Dhg5gg4YOS4YOQ4YOn4YOd4YOk4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuGDmOGDnOGDk+GDmOGDleGDmOGDk+GDo+GDkOGDmuGDo+GDoOGDmCDhg5Lhg5Dhg6fhg53hg5Hhg5AiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4YOR4YOQ4YOi4YOQ4YOg4YOU4YOY4YOhIOGDk+GDkOGDm+GDluGDneGDkuGDmCDhg6nhg5Dhg6Dhg5fhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4YOQ4YOb4YOq4YOY4YOg4YOU4YOR4YOhIOGDrOGDkOGDoOGDm+GDkOGDk+GDneGDkeGDkOGDoSDhg5Phg5Ag4YOj4YOZ4YOQ4YOc4YOQIOGDpOGDneGDnOGDmOGDoSDhg5vhg53hg5zhg5Dhg6rhg5Thg5vhg5Thg5Hhg6EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuGDkeGDkOGDouGDkOGDoOGDlOGDmOGDoSDhg5Phg5Dhg5bhg53hg5Lhg5Xhg5jhg6Eg4YOS4YOQ4YOb4YOd4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuGDqOGDmOGDkuGDl+GDkOGDleGDoeGDmCDhg5Phg5Dhg5vhg5Dhg5rhg6Phg5rhg5jhg5AiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4YOT4YOQ4YOY4YOs4YOn4YOU4YOR4YOhIOGDmOGDmyDhg6fhg5Xhg5Thg5rhg5Dhg6Thg6Dhg5jhg6Eg4YOQ4YOm4YOR4YOU4YOt4YOT4YOV4YOQ4YOhLCDhg6Dhg5Dhg6og4YOX4YOl4YOV4YOU4YOc4YOhIOGDlOGDmeGDoOGDkOGDnOGDluGDlCDhg6nhg5Dhg5zhg6EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuGDkOGDpuGDkOGDoCDhg5vhg5Dhg6nhg5Xhg5Thg5zhg50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4YOn4YOV4YOU4YOa4YOQ4YOhIOGDkuGDkOGDoeGDo+GDpOGDl+GDkOGDleGDlOGDkeGDkCI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4YOj4YOQ4YOg4YOn4YOd4YOk4YOQIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4YOu4YOb4YOd4YOV4YOQ4YOcIOGDk+GDmOGDkOGDmuGDneGDkuGDqOGDmOGDkCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuGDneGDoOGDmOGDkuGDmOGDnOGDkOGDmuGDmOGDoSDhg5Dhg6bhg5Phg5Lhg5Thg5zhg5jhg6Hhg5Dhg5fhg5Xhg5jhg6EsIOGDqOGDlOGDlOGDruGDlOGDly4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i4YOX4YOl4YOV4YOU4YOcIOGDoeGDkOGDm+GDoeGDkOGDruGDo+GDoOGDmOGDoSDhg57hg6Dhg53hg6Thg5jhg5rhg6Eg4YOY4YOn4YOU4YOc4YOU4YOR4YOXIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4YOh4YOY4YOh4YOi4YOU4YOb4YOY4YOhIFVJIOGDouGDo+GDnOGDlOGDoOGDmCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuGDqeGDkOGDm+GDkOGDkuGDoOGDlOGDkeGDo+GDmuGDmCDhg5Hhg5Dhg6Lhg5Dhg6Dhg5Thg5jhg6Eg4YOe4YOg4YOd4YOq4YOU4YOc4YOi4YOY4YOhIOGDqeGDleGDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4YOS4YOh4YOj4YOg4YOXIEJsdWV0b290aC3hg5jhg6Eg4YOp4YOQ4YOg4YOX4YOV4YOQPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLhg5nhg5rhg5Dhg5Xhg5jhg5Dhg6Lhg6Phg6Dhg5jhg6Eg4YOi4YOQ4YOR4YOa4YOU4YOi4YOX4YOQ4YOcIOGDk+GDkOGDoeGDkOGDmeGDkOGDleGDqOGDmOGDoOGDlOGDkeGDmuGDkOGDkywg4YOv4YOU4YOgIOGDo+GDnOGDk+GDkCDhg6nhg5Dhg6Dhg5fhg53hg5cgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuGDqeGDkOGDoOGDl+GDleGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IuKAnjx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPuKAnCDhg6Lhg5jhg57hg5jhg6Eg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOh4YOX4YOV4YOY4YOhIOGDm+GDmOGDoeGDkOGDk+GDkOGDkuGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuGDkOGDmyDhg5Dhg57hg5jhg6Eg4YOn4YOV4YOU4YOa4YOQIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDmOGDoeGDl+GDleGDmOGDoSDhg5vhg5jhg6Hhg5Dhg5Phg5Dhg5Lhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4YOT4YOQ4YOR4YOa4YOd4YOZ4YOY4YOa4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4YOT4YOQ4YOR4YOQ4YOa4YOYIOGDnuGDoOGDmOGDneGDoOGDmOGDouGDlOGDouGDmCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLhg6nhg5Xhg5Thg6Phg5rhg5Thg5Hhg6Dhg5jhg5Xhg5gg4YOe4YOg4YOY4YOd4YOg4YOY4YOi4YOU4YOi4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuGDm+GDkOGDpuGDkOGDmuGDmCDhg57hg6Dhg5jhg53hg6Dhg5jhg6Lhg5Thg6Lhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLhg5Lhg5Dhg5Phg5Dhg6Phg5Phg5Thg5Hhg5Thg5rhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuGDkOGDmyDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5jhg6Eg4YOp4YOV4YOU4YOc4YOU4YOR4YOY4YOhIOGDqOGDlOGDrOGDp+GDleGDlOGDouGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLhg5Dhg5sg4YOo4YOU4YOi4YOn4YOd4YOR4YOY4YOc4YOU4YOR4YOU4YOR4YOY4YOhIOGDoeGDmOGDmOGDoSDhg5Hhg53hg5rhg53hg6jhg5gsIOGDo+GDruGDm+GDneGDkyDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuGDkOGDmyDhg6jhg5Thg6Lhg6fhg53hg5Hhg5jhg5zhg5Thg5Hhg5Thg5Hhg5jhg6Eg4YOj4YOu4YOb4YOd4YOTIOGDqeGDleGDlOGDnOGDlOGDkeGDkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4YOQ4YObIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg6Hhg5jhg5jhg6Eg4YOX4YOQ4YOV4YOo4YOYLCDhg67hg5vhg53hg5Xhg5Dhg5wg4YOh4YOY4YOS4YOc4YOQ4YOa4YOX4YOQ4YOcIOGDlOGDoOGDl+GDkOGDkyDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4YOQ4YObIOGDqOGDlOGDouGDp+GDneGDkeGDmOGDnOGDlOGDkeGDlOGDkeGDmOGDoSDhg57hg5jhg6Dhg5Phg5Dhg57hg5jhg6Ag4YOU4YOZ4YOg4YOQ4YOc4YOW4YOULCDhg67hg5vhg53hg5Xhg5Dhg5wg4YOh4YOY4YOS4YOc4YOQ4YOa4YOX4YOQ4YOcIOGDlOGDoOGDl+GDkOGDkyDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuGDk+GDkOGDm+GDkOGDouGDlOGDkeGDmOGDl+GDmCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLhg5vhg5bhg5Dhg5Phg5Dhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLhg6nhg5Xhg5Thg6Phg5rhg5Thg5Hhg6Dhg5jhg5Xhg5gg4YOk4YOU4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuGDpuGDkOGDm+GDmOGDoSDhg6Thg5Thg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuGDm+GDneGDoOGDkuGDlOGDkeGDo+GDmuGDmCDhg6Thg5Thg6Dhg5Thg5Hhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLhg6Phg6rhg5zhg53hg5Hhg5gg4YOk4YOU4YOg4YOU4YOR4YOYIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuGDpOGDlOGDoOGDlOGDkeGDmOGDoSDhg6jhg5Thg6rhg5Xhg5rhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLhg6Hhg6zhg6Dhg5Dhg6Thg5gg4YOe4YOQ4YOg4YOQ4YOb4YOU4YOi4YOg4YOU4YOR4YOY4YOhIOGDm+GDneGDluGDkOGDmOGDmeGDmOGDoSDhg6nhg5Xhg5Thg5zhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuGDm+GDneGDoOGDkuGDlOGDkeGDo+GDmuGDmCDhg5Lhg5Dhg6Dhg5Phg5Dhg6Xhg5vhg5zhg5jhg6Eg4YOp4YOQ4YOg4YOX4YOV4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4YOS4YOQ4YOb4YOd4YOn4YOU4YOc4YOU4YOR4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg5Phg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5AiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLhg6Thg5Thg6Dhg5fhg5Ag4YOW4YOd4YOS4YOY4YOU4YOg4YOXIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDoSDhg5Dhg5sg4YOb4YOd4YOs4YOn4YOd4YOR4YOY4YOa4YOd4YOR4YOQ4YOh4YOX4YOQ4YOcIOGDm+GDo+GDqOGDkOGDneGDkeGDmOGDoSDhg5Lhg5Dhg6Dhg5fhg6Phg5rhg5Thg5Hhg5Ag4YOo4YOU4YOj4YOr4YOa4YOY4YOQLiDhg6Thg5Thg6Dhg5fhg5Ag4YOQ4YOb4YOf4YOQ4YOb4YOY4YOc4YOT4YOU4YOa4YOYIOGDnuGDkOGDoOGDkOGDm+GDlOGDouGDoOGDlOGDkeGDmOGDoSDhg5Phg5Dhg6Hhg5Dhg5Phg5Dhg6Hhg6Lhg6Phg6Dhg5Thg5Hhg5rhg5Dhg5MsIOGDk+GDkOGDkOGDrOGDmeGDkOGDnuGDo+GDnOGDlOGDlyDigJ7hg5nhg5Dhg6Dhg5Lhg5jigJwt4YOW4YOULiDhg6zhg5jhg5zhg5Dhg5Dhg6bhg5vhg5Phg5Thg5Ig4YOo4YOU4YOb4YOX4YOu4YOV4YOU4YOV4YOQ4YOo4YOYLCDhg57hg5Dhg6Dhg5Dhg5vhg5Thg6Lhg6Dhg5Thg5Hhg5ggMTAg4YOs4YOQ4YOb4YOY4YOhIOGDqOGDlOGDm+GDk+GDlOGDkiDhg6nhg5Dhg5vhg53hg5jhg6fhg6Dhg5Thg5Hhg5AuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLhg5Hhg5Dhg6Lhg5Dhg6Dhg5Thg5AgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4YOR4YOQ4YOi4YOQ4YOg4YOU4YOY4YOhIOGDk+GDkOGDm+GDluGDneGDkuGDmCDhg5Phg5Dhg6Lhg5Thg5zhg5Xhg5jhg6Hhg5Dhg6Eg4YOb4YOY4YOs4YOV4YOT4YOd4YOb4YOU4YOa4YOY4YOQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuGDkeGDkOGDouGDkOGDoOGDlOGDmOGDoSDhg5Phg5Dhg5vhg5bhg53hg5Lhg5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLhg5Dhg5vhg6rhg5jhg6Dhg5Thg5Hhg6Eg4YOs4YOQ4YOg4YOb4YOQ4YOT4YOd4YOR4YOQ4YOhIOGDk+GDkCDhg6Thg53hg5zhg6Phg6Ag4YOb4YOd4YOc4YOQ4YOq4YOU4YOb4YOU4YOR4YOhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtrLXJLWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCmluZGV4IDA4ZTJhNTAuLjQyZTZhNWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta2stcktaL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLSmtC+0qPRi9GA0LDRgyDSr9C90YHRltC3LiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLQltKx0LzRi9GBINGA0LXQttC40LzRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INKb0L7Qu9C00LDQvdCx0LDRgdGL0L3QsNC9INCx0LDRgSDRgtCw0YDRgtGDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LDQu9GL0L3Ri9C/INGC0LDRgdGC0LDQu9KT0LDQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLQkdCw0YDQu9GL0psg0LbQsNKb0YvQvdC00LDSk9GLINKb0LDQsdGL0LvQtNCw0L3QsdCw0pPQsNC9INKb0L7Qu9C00LDQvdCx0LDQu9Cw0YAuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLQnNC+0LHQuNC70YzQtNGWINGF0L7RgtGB0L/QvtGCINOp0YjRltGA0ZbQu9C00ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i0JzQvtCx0LjQu9GM0LTRliDRhdC+0YLRgdC/0L7RgiDSm9C+0YHRi9C70LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLQrdC60YDQsNC90LTRiyDRgtGA0LDQvdGB0LvRj9GG0LjRj9C70LDRgyDRgtC+0pvRgtCw0YLRi9C70LTRiy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLQltKx0LzRi9GBINGA0LXQttC40LzRliDTqdGI0ZbRgNGD0LvRli4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLQltKx0LzRi9GBINGA0LXQttC40LzRliDSm9C+0YHRg9C70YsuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i0JbSsdC80YvRgSDRgNC10LbQuNC80ZYg06nRiNGW0YDRltC70LTRli4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0JbSsdC80YvRgSDRgNC10LbQuNC80ZYg0pvQvtGB0YvQu9C00YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+ItCU0LjRgdC/0LvQtdC5INC20LDRgNGL0pvRgtGL0pPRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHINC00LXRgNC10LrRgtC10YDRliDQutGW0LTRltGA0YLRltC70LTRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHINC00LXRgNC10LrRgtC10YDRliDQutGW0LTRltGA0YLRltC70LTRliI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDQv9Cw0LnQtNCw0LvQsNC90YvQu9KT0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+INGI0LXQs9GWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+INGC0YPRgNCw0LvRiyDQtdGB0LrQtdGA0YLRgyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0JbSsdC80YvRgSDRgNC10LbQuNC80ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i0JzSsdC90LTQsCDQttCw0pvRi9C90LTQsNKT0Ysg0Y3QutGA0LDQvdC00LDRgCDQutOp0YDRgdC10YLRltC70LXQtNGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i0prQvtC70LTQsNC90LHQsCDRgtGD0YDQsNC70Ysg0LDSm9C/0LDRgNCw0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLRjdC60YDQsNC90LTRiyDQsdC10LrRltGC0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0ZbQt9C00LXRgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INGW0YHQutC1INKb0L7RgdGDINC80q/QvNC60ZbQvSDQsdC+0LvQvNCw0LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0prQvtGB0YvQvNGI0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i0KLQsNGA0LjRhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INKa0L7RgdGL0LzRiNCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLQkdOp0LvRltC90LPQtdC9INC606nQu9C00LXQvdC10qMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQkdOp0LvRltC90LPQtdC9INGC0ZbQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLQkdOp0LvRltC90LPQtdC9INGC0LXSo9GI0LXQu9C10YLRltC9Ijwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCR0LDRgtCw0YDQtdGPINKv0L3QtdC80LTQtdCz0ZbRiCDSm9C+0YHRg9C70YsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i06jQvdGW0LzQtNGW0LvRltC60YLRliDQttOZ0L3QtSDRhNC+0L3QtNGL0psg0LTQtdGA0LXQutGC0LXRgNC00ZYg0LDQt9Cw0LnRgtCw0LTRiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JHQsNGC0LDRgNC10Y8g0q/QvdC10LzQtNC10LPRltGI0YLRliDTqdGI0ZbRgNGDIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCc0LDQt9C80rHQvSDQttCw0YHRi9GA0YvQu9KT0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDRjdC60YDQsNC90LTQsCDQutOp0YDRgdC10YLRltC70LPQtdC90L3RltKjINCx0LDRgNC70YvSk9GL0L0g0YLSr9GB0ZbRgNC1INCx0LDRgdGC0LDQudC00YsuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItKa0LDQudGC0LAg0LrTqdGA0YHQtdGC0L/QtdGDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCR0LDRgNC70YvSk9GL0L0g0YLQsNC30LDQu9Cw0YMiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+ItOo0YjRltGA0YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDigJQg0LrTqdC70LXQvCDQtNC40LDQu9C+0LPRgtGL0psg0YLQtdGA0LXQt9C10YHRliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+ItCi0q/Qv9C90rHRgdKb0LDQvdGLINKb0LDQu9C/0YvQvdCwINC60LXQu9GC0ZbRgNGDINKv0YjRltC9INGC0q/RgNGC0ZbSo9GW0LcuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+ItCh0ZbQtyDQttKx0LzRi9GBINC/0YDQvtGE0LjQu9GW0qPRltC30LTRliDQv9Cw0LnQtNCw0LvQsNC90YvQvyDQttCw0YLRi9GA0YHRi9C3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i0JbSr9C50LXQu9GW0Log0L/QsNC50LTQsNC70LDQvdGD0YjRi9C70YvSmyDQuNC90YLQtdGA0YTQtdC50YEg0YLRjtC90LXRgNGWIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i0JXQvdC00ZbRgNGW0LvQs9C10L0g0LHQsNGC0LDRgNC10Y8g0L/QsNC50YvQt9C00YvSmyDRiNCw0LzQsNGB0YvQvSDQutOp0YDRgdC10YLRgyI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQmx1ZXRvb3RoINGE0YPQvdC60YbQuNGP0YHRi9C9INKb0L7RgdGDINC60LXRgNC10Log0L/QtT8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i0J/QtdGA0L3QtdGC0LDSm9GC0LDQvdGLINC/0LvQsNC90YjQtdGC0LrQtSDSm9C+0YHRgyDSr9GI0ZbQvSDQsNC70LTRi9C80LXQvSBCbHVldG9vdGgg0YTRg9C90LrRhtC40Y/RgdGL0L0g0pvQvtGB0YMg0LrQtdGA0LXQui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLSmtC+0YHRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDRhdCw0LHQsNGA0LvQsNC90LTRi9GA0YPSk9CwINKb0L7Qu9C00LDQvdGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i0J7RgdGLINKb0L7Qu9C00LDQvdCx0LDQvdGL0qMg0LHQsNGA0LvRi9KbINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNGL0L3QsCDSm9C+0LvQtNCw0L3RgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLQkdOp0LPQtdC70LPQtdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0KLTqdC80LXQvSDQvNCw0qPRi9C30LTRi9C70YvSmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLSmtCw0LvRi9C/0YLRiyDQvNCw0qPRi9C30LTRi9C70YvSmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQltC+0pPQsNGA0Ysg0LzQsNKj0YvQt9C00YvQu9GL0psiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQqNKx0pPRi9C7INC80LDSo9GL0LfQtNGL0LvRi9KbIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLQntGB0Ysg0YXQsNCx0LDRgNC70LDQvdC00YvRgNGD0LvQsNGA0LTRiyDQtdGI0pvQsNGI0LDQvSDQutOp0YDRgdC10YLQv9C10YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0KXQsNCx0LDRgNC70LDQvdC00YvRgNGD0LvQsNGAINGC0ZbQt9GW0LzQvdGW0qMg0YLTqdC80LXQvdCz0ZYg0LbQsNKT0YvQvdC00LAg0q/QvdGB0ZbQtyDQutOp0YDRgdC10YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0J7RgdGLINGF0LDQsdCw0YDQu9Cw0L3QtNGL0YDRg9C70LDRgNC00Ysg0q/QvdGB0ZbQtyDQutOp0YDRgdC10YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i0KXQsNCx0LDRgNC70LDQvdC00YvRgNGD0LvQsNGA0LTRiyDRgtGW0LfRltC80ZbQvdGW0qMg0LbQvtKT0LDRgNKT0Ysg0LbQsNKT0YvQvdC00LAg0LrTqdGA0YHQtdGC0YMg0LbTmdC90LUg0LTRi9Cx0YvRgSDRiNGL0pPQsNGA0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0K3QutGA0LDQvdKT0LAg0LHQtdC60ZbRgtGDINC205nQvdC1INC00YvQsdGL0YEg0YjRi9KT0LDRgNGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLSmtC+0YHRi9C80YjQsCDQv9Cw0YDQsNC80LXRgtGA0LvQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JTQsNC50YvQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItKa0LDQu9GL0L/RgtGLINGC0q/RgdGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLQotKv0L3Qs9GWINGC0q/RgdGC0LXRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0JDRgNC90LDRg9C70Ysg0YLSr9GB0YLQtdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i0JHQtdC70LPRltGB0ZbQtyDRgtKv0YHRgtC10YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0KLSr9GB0YLRliDTqdC30LPQtdGA0YLRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCW0YvQu9C00LDQvCDQv9Cw0YDQsNC80LXRgtGA0LvQtdGAINGC0L7RgNGL0L0g0LrTqdGA0YHQtdGC0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItCQ0YDQvdCw0YPQu9GLINGC0q/RgNC70LXQvdC00ZbRgNGD0LTRliDSm9C+0YHRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItKa0L7Qu9C00LDQvdGDIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+ItCf0LDRgNCw0LzQtdGC0YDQu9C10YDQtNGWINGA0LDRgdGC0LDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCa0LXQudCx0ZbRgCDRgtKv0YEg0L/QsNGA0LDQvNC10YLRgNC70LXRgNGWINCx0rHQuyDSm9Kx0YDRi9C70pPRi9C90Ysg0L/QsNC50LTQsNC70LDQvdGDINC80q/QvNC60ZbQvSDQtdC80LXRgSDQtdGC0YPRliDQvNKv0LzQutGW0L0uINCR0rHQuyDRgtKv0YEg0L/QsNGA0LDQvNC10YLRgNC70LXRgNGW0L0g0YDQsNGB0YLQsNGDINKv0YjRltC9IE9LINGC0q/QudC80LXRgdGW0L0g0LHQsNGB0YvSo9GL0LcsINOZ0LnRgtC/0LXRgdC1INC/0LDRgNCw0LzQtdGC0YDQu9C10YAgMTAg0YHQtdC60YPQvdC00YLQsNC9INC60LXQudGW0L0g0YvRgdGL0YDRi9C70LDQtNGLLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i0JHQsNGC0LDRgNC10Y8gKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i0JfQsNGA0Y/QtNGC0LDRgyDQutC10LfRltC90LTQtSDQkdCw0YLQsNGA0LXRjyDSr9C90LXQvNC00LXQs9GW0Ygg0pvQvtC7INC20LXRgtGW0LzQtNGWINC10LzQtdGBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+ItCR0LDRgtCw0YDQtdGPINKv0L3QtdC80LTQtdCz0ZbRiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+ItOo0L3RltC80LTRltC70ZbQutGC0ZYg0LbTmdC90LUg0YTQvtC90LTRi9KbINC00LXRgNC10LrRgtC10YDQtNGWINCw0LfQsNC50YLQsNC00YsiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta20tcktIL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKaW5kZXggMmRmN2YxZi4uNTNmNTg2OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbS1yS0gvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOKAi+GemuGfhOGekeGfjeKAi+Gen+GfkuGehOGetuGej+Gfi+GflCI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLhnprhnpThn4DhnpThnoDhnrbhnprhnoThnrbhnpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IuGelOGfhOGfh+GelOGehOGfiyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhnpThnorhnrfhnp/hn4HhnpLhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnpDhn5Lhnpjhnrjhn5fhnpHhnrbhn4bhnoThnqLhnp/hn4vhno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnpThn4Thn4fhnpThnoThn4vhn5QiPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuGelOGetuGek+KAi+GelOGet+GekeKAi+GeoOGej+Gen+GfkuGelOGfieGej+KAi+GeheGem+GfkOGej+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuGelOGetuGek+KAi+GelOGevuGegOKAi+GeoOGej+Gen+GfkuGelOGfieGej+KAi+GeheGem+GfkOGej+GflCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuGelOGetuGek+KAi+GelOGeieGfkuGeiOGelOGfi+KAi+GegOGetuGemuKAi+GeheGetuGej+Gfi+KAi+GekOGfkuGek+GetuGegOGfi+KAi+GeouGfgeGegOGfkuGemuGehOGfi+GflCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuGelOGet+GekeGemuGelOGfgOGelOGegOGetuGemuGehOGetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuGelOGevuGegOGemuGelOGfgOGelOGegOGetuGemuGehOGetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuGelOGetuGek+GelOGet+GekeGemuGelOGfgOGelOGegOGetuGemuGehOGetuGemiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLhnpThnrbhnpPhnpThnr7hnoDhnprhnpThn4DhnpThnoDhnrbhnprhnoThnrbhnpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4Z6W4Z6T4Z+S4Z6b4Z664oCL4Z6A4Z624Z6a4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6JIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i4Z6R4Z634Z6T4Z+S4Z6T4Z6T4Z+Q4Z6ZIDJHLTNHIOGej+GfkuGemuGevOGenOGelOGetuGek+GeleGfkuGeouGetuGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IuGekeGet+Gek+GfkuGek+Gek+GfkOGemSA0RyDhno/hn5LhnprhnrzhnpzhnpThnrbhnpPhnpXhn5LhnqLhnrbhnoAiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiLhnpThnrbhnpPigIvhnpThn5Lhnprhnr4gPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IuGeiuGfguGek+KAi+GegOGfhuGejuGej+GfiyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOGegOGetuGemuKAi+GeluGfkuGemuGemOGetuGekyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4Z6a4Z6U4Z+A4Z6U4Z6A4Z624Z6a4Z6E4Z624Z6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuGeouGfgeGegOGfkuGemuGehOGfi+KAi+GelOGeheGfkuGeheGeu+GelOGfkuGelOGek+GfkuGek+KAi+GemuGelOGen+Gfi+KAi+GeouGfkuGek+GegOKAi+GelOGehOGfkuGeoOGetuGeieKAi+Gek+GfheKAi+GekeGeuOGek+GfgeGfhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IuGeluGfkOGej+GfjOGemOGetuGek+KAi+GegOGemOGfkuGemOGenOGet+GekuGeuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuGegOGetuGemuKAi+Gel+GfkuGeh+GetuGelOGfi+KAi+GeouGfgeGegOGfkuGemuGehOGfiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLhnp/hn5Lhnpzhn4LhnoThnprhnoAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IuGemOGet+Gek+KAi+GeouGetuGeheKAi+GeheGetuGelOGfi+GeleGfkuGeiuGevuGemCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Z6R4Z+B4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuGeheGfkuGemuGevuGek+GekeGfgOGejyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLhnpThn5Lhnprhnpzhno/hn5Lhno/hnrciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhnpHhn4Dhno8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuGelOGfhuGelOGfguGegOGeleGfkuGej+GfgeGegCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuGelOGfhuGelOGfguGegOGelOGeieGfkuGeiOGemiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLhnpThn4bhnpThn4LhnoDhnpXhn5LhnpHhnrbhnpvhn4vhnoHhn5Lhnpvhnr3hnpMiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644oCL4Z6f4Z6T4Z+S4Z6f4Z+G4oCL4Z6Q4Z+S4Z6Y4oCL4Z6C4Z664oCL4Z6U4Z6+4Z6AIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuGegOGetuGemuKAi+GelOGek+GfkuGekOGemeKAi+GegOGetuGemuKAi+GelOGfkuGemuGej+Get+GelOGej+GfkuGej+GetyDhnpPhnrfhnoTigIvhnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnigIvhnpXhn5LhnpHhn4PigIvhnoHhnrbhnoThnoDhn5Lhnprhn4ThnpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuGelOGet+GekeKAi+GekuGetuGej+Geu+KAi+GemuGegOGfkuGen+GetuKAi+GekOGetuGemOGeluGem+KAi+GekOGfkuGemCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhnpThnrbhnpPigIvhnpvhnrbhnoDhn4vigIvhnpjhnrbhno/hnrfhnoDhnrYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4Z6T4Z654Z6E4oCL4Z6F4Z624Z6U4Z+L4Z6V4Z+S4Z6K4Z6+4Z6Y4oCL4Z6F4Z624Z6U4Z+L4oCL4Z6Z4Z6A4oCL4Z6i4Z+S4Z6c4Z644Z+X4oCL4Z6C4Z+S4Z6a4Z6U4Z+L4Z6Z4Z+J4Z624Z6E4oCL4Z6K4Z+C4Z6b4oCL4Z6U4Z6E4Z+S4Z6g4Z624Z6J4oCL4Z6b4Z6+4oCL4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+L4oCL4Z6a4Z6U4Z6f4Z+L4oCL4Z6i4Z+S4Z6T4Z6A4Z+UIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuGegOGeu+GfhuKAi+GelOGehOGfkuGeoOGetuGeieKAi+GemOGfkuGeiuGehOGekeGfgOGejyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLhnp/hnpjhn5LhnqLhnrbhno/igIvhnpHhnrbhn4bhnoThnqLhnp/hn4siPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuGelOGeiuGet+Gen+GfgeGekiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOGeguGeuuGeh+GetuGelOGfkuGemuGeouGelOGfi+Gen+GemOGfkuGem+GfgeGehCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuGelOGfieGfh+GeiuGevuGemOGfkuGelOGeuOGen+GfkuGej+GetuGemuGeheGfkuGelOGetuGelOGfi+GeiuGevuGemOGflCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLhnqLhn5LhnpPhnoDhnoDhn4bhnpbhnrvhnoThnpThn5Lhnprhnr7hnpThn5Lhnprhnpzhno/hn5Lhno/hnrfhnprhnrzhnpThnoDhnrbhnprhnoThnrbhnprhnprhnpThnp/hn4vhnqLhn5LhnpPhnoAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLhnoDhnpjhn5LhnpjhnpzhnrfhnpLhnrjhnp/hnpjhn5Lhnprhnr3hnpsgVUkg4Z6U4Z+S4Z6a4Z6W4Z+Q4Z6T4Z+S4Z6SIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6X4Z624Z6C4Z6a4Z6Z4Z6Q4Z624Z6Y4Z6W4Z6b4Z6Q4Z+S4Z6Y4Z6K4Z+C4Z6b4Z6U4Z624Z6T4Z6U4Z6E4Z+S4Z6A4Z6U4Z+LIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLhnpThnr7hnoDhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp/hnqw/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuGeiuGevuGemOGfkuGelOGeuOGel+GfkuGeh+GetuGelOGfi+GegOGfkuGej+GetuGemuGeheGeu+GeheGemuGelOGen+Gfi+GeouGfkuGek+GegOGeh+GetuGemOGeveGemeGek+GeueGehOGekOGfgeGelOGfkuGem+GfgeGej+GemuGelOGen+Gfi+GeouGfkuGek+GegCDhnqLhn5LhnpPhnoDhno/hn5Lhnprhnrzhnpzhno/hn4LhnpThnr7hnoDhnpThn4rhn5LhnpvhnrzhnpLhnrzhnp/hnofhnrbhnpjhnrvhnpPhnp/hnrfhnpPhn5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLhnpThnr7hnoAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLhnqLhnpPhnrvhnpzhno/hn5Lhno/hnoXhn4bhnpbhn4Thn4fhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoQgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4Z6i4Z6T4Z674Z6c4Z6P4Z+S4Z6P4Z6F4Z+G4Z6W4Z+E4Z+H4Z6A4Z624Z6a4Z6H4Z684Z6T4Z6K4Z+G4Z6O4Z654Z6E4Z6R4Z624Z+G4Z6E4Z6i4Z6f4Z+L4Z6W4Z644Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644Z6T4Z+B4Z+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuGelOGetuGek+GemuGetuGemuGetuGfhuGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuGemOGet+Gek+Gen+GevOGenOGen+GfhuGegeGetuGek+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLhnp/hn4bhnoHhnrbhnpPhn4vhnpjhnpLhn5LhnpnhnpgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4Z6f4Z+G4Z6B4Z624Z6T4Z+L4Z6B4Z+S4Z6b4Z624Z+G4Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4Z6f4Z+G4Z6B4Z624Z6T4Z+L4Z6H4Z624Z6U4Z6T4Z+S4Z6R4Z624Z6T4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLhnoDhnrvhn4bhnpThnoThn5LhnqDhnrbhnonhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoThnpHhnrbhn4bhnoThnpPhn4Hhn4ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6f4Z+S4Z6E4Z624Z6P4Z+L4Z+X4Z6T4Z+F4Z6V4Z+S4Z6T4Z+C4Z6A4Z6B4Z624Z6E4Z6A4Z+S4Z6a4Z+E4Z6Y4Z6U4Z6J4Z+S4Z6H4Z644Z6T4Z+D4Z6A4Z624Z6a4Z6H4Z684Z6T4Z6K4Z+G4Z6O4Z654Z6EIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLhnpThnoThn5LhnqDhnrbhnonhnoDhnrbhnprhnofhnrzhnpPhnorhn4bhno7hnrnhnoThnpHhnrbhn4bhnoThnpPhn4Hhn4fhnp/hn5LhnoThnrbhno/hn4vhn5ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuGelOGehOGfkuGeoOGetuGeieGek+GfheGeleGfkuGek+GfguGegOGegeGetuGehOGem+GevuGelOGeieGfkuGeh+GeuOGek+Gfg+GegOGetuGemuGeh+GevOGek+GeiuGfhuGejuGeueGehCDhnpPhnrfhnoThnpThnpPhn5Lhnpvhnrrhnp/hn4bhnqHhn4HhnoQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4Z6b4Z+E4Z6P4Z6U4Z6E4Z+S4Z6g4Z624Z6J4Z6T4Z+F4Z6b4Z6+4Z6i4Z+B4Z6A4Z+S4Z6a4Z6E4Z+LIOGek+Get+GehOGelOGek+GfkuGem+GeuuGen+GfhuGeoeGfgeGehCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4Z6A4Z624Z6a4Z6A4Z+G4Z6O4Z6P4Z+L4Z6F4Z+S4Z6a4Z6+4Z6T4Z6R4Z+A4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4Z6a4Z694Z6F4Z6a4Z624Z6b4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4Z6W4Z6O4Z+M4Z6S4Z6Y4Z+S4Z6Y4Z6P4Z62Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuGeluGejuGfjOGeluGfgeGem+GemeGelOGfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4Z6W4Z6O4Z+M4Z6V4Z+S4Z6R4Z624Z6b4Z+L4Z6B4Z+S4Z6b4Z694Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4Z6W4Z6O4Z+M4Z6Y4Z634Z6T4Z6f4Z+S4Z6C4Z624Z6b4Z+LIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuGegOGetuGemuGegOGfguGen+GemOGfkuGemuGeveGem+GeluGejuGfjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuGelOGehOGfkuGeoOGetuGeieGeleGfkuGekeGetuGfhuGehOGelOGfkuGemuGeouGelOGfi+GegOGetuGemuGegOGfhuGejuGej+Gfi+GemuGeoOGfkOGenyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4Z6U4Z6+4Z6A4Z6K4Z+G4Z6O4Z6+4Z6a4Z6A4Z624Z6a4Z6V4Z+S4Z6b4Z624Z6f4Z+L4Z6U4Z+S4Z6P4Z684Z6a4Z6V4Z+S4Z6R4Z624Z6b4Z+L4Z6B4Z+S4Z6b4Z694Z6TIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4Z6i4Z6T4Z674Z6c4Z6P4Z+S4Z6PIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuGelOGeieGfkuGeh+GetuGegOGfi+GegOGetuGemuGegOGfhuGejuGej+GfiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuGegOGetuGemuGegOGfhuGejuGej+Gfi+GeluGejuGfjOGemOGeveGemeGeheGfhuGek+GeveGek+GeouGetuGeheGekuGfkuGenOGevuGesuGfkuGemeGep+GelOGegOGemuGejuGfjeGek+GfgeGfh+GemOGet+Gek+GeouGetuGeheGelOGfkuGemuGevuGelOGetuGek+GflCDhnp/hnrzhnpjhnoXhnrvhnoUg4Z6Z4Z6b4Z+L4Z6W4Z+S4Z6a4Z6YIOGeiuGevuGemOGfkuGelOGeuOGelOGeieGfkuGeh+GetuGegOGfi+GegOGetuGemuGegOGfhuGejuGej+Gfi+GeluGejuGfjOGekeGetuGfhuGehOGek+GfgeGfhyDhnpThnr7hnpjhnrfhnpPhnorhnrzhnoXhn5LhnpPhn4Hhn4fhnpHhn4HhnoDhnrbhnprhnoDhn4bhno7hno/hn4vhnpHhnrbhn4bhnoThnpPhn4Hhn4fhnpPhnrnhnoThnoDhn4bhno7hno/hn4vhnqHhnr7hnoThnpzhnrfhnonhnoDhn5LhnpPhnrvhnoThnprhnpnhn4jhnpbhn4HhnpsgMTAg4Z6c4Z634Z6T4Z624Z6R4Z644Z6U4Z6T4Z+S4Z6R4Z624Z6U4Z+L4Z+UIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLhnpDhn5LhnpggKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4Z6A4Z6Y4Z+S4Z6Y4Z6c4Z634Z6S4Z644Z6f4Z6T4Z+S4Z6f4Z+G4Z6Q4Z+S4Z6Y4Z6Y4Z634Z6T4Z6i4Z624Z6F4Z6U4Z+S4Z6a4Z6+4Z6U4Z624Z6T4Z6i4Z+G4Z6h4Z674Z6E4Z6W4Z+B4Z6b4Z6f4Z624Z6A4Z6Q4Z+S4Z6Y4Z6R4Z+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuGegOGemOGfkuGemOGenOGet+GekuGeuOGen+Gek+GfkuGen+GfhuGekOGfkuGemCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuGegOGetuGej+Gfi+GelOGek+GfkuGekOGemeGelOGfkuGemuGej+Get+GelOGej+GfkuGej+Get+GegOGetuGemiDhnpPhnrfhnoThnpHhnrfhnpPhn5LhnpPhnpPhn5DhnpnhnpXhn5LhnpHhn4PhnoHhnrbhnoThnoDhn5Lhnprhn4ThnpkiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta24tcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKaW5kZXggZWU0NjZkMC4uMWIyMTJmMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rbi1ySU4vc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuCysOCyv+CyguCyl+CysOCzjSDgsrbgsr7gsoLgsqQuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCyleCzhuCysuCyuOCypiDgsq7gs4vgsqHgs40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgsrXgspzgsr7gspfgs4rgsrPgsr/gsrjgs4EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgsrXgspzgsr7gspfgs4rgsrPgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i4LKH4LKk4LON4LKk4LOA4LKa4LK/4LKoIOCyjuCysuCzjeCysuCyviDgsoXgsqrgs43gsrLgsr/gspXgs4fgsrbgsqjgs43igIzgspfgsrPgsqjgs43gsqjgs4Eg4LK14LKc4LK+4LKX4LOK4LKz4LK/4LK44LKy4LK+4LKX4LK/4LKm4LOGLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4LKu4LOK4LKs4LOI4LKy4LONIOCyueCyvuCyn+CzjeKAjOCyuOCzjeCyquCyvuCyn+CzjSDgsobgsqvgs40g4LKu4LK+4LKh4LKy4LK+4LKX4LK/4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuCyruCziuCyrOCziOCysuCzjSDgsrngsr7gsp/gs43igIzgsrjgs43gsqrgsr7gsp/gs40g4LKG4LKo4LONIOCyruCyvuCyoeCysuCyvuCyl+Cyv+CypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLgsrjgs43gspXgs43gsrDgs4Dgsqjgs40g4LKq4LON4LKw4LK44LK+4LKw4LK14LKo4LON4LKo4LOBIOCyqOCyv+CysuCzjeCysuCyv+CyuOCysuCyvuCyl+Cyv+CypuCzhi4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgspXgs4bgsrLgsrjgsqYg4LKu4LOL4LKh4LONIOCyhuCyq+CzjSDgsobgspfgsr/gsqbgs4YuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4LKV4LOG4LKy4LK44LKmIOCyruCzi+CyoeCzjSDgsobgsqjgs40g4LKG4LKX4LK/4LKm4LOGLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuCyleCzhuCysuCyuOCypiDgsq7gs4vgsqHgs40g4LKG4LKr4LONIOCyruCyvuCyoeCysuCyvuCyl+Cyv+CypuCzhi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i4LKV4LOG4LKy4LK44LKmIOCyruCzi+CyoeCzjSDgsobgsqjgs40g4LKu4LK+4LKh4LKy4LK+4LKX4LK/4LKm4LOGLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLgsrngs4rgsrPgsqrgsqjgs43gsqjgs4Eg4LKq4LON4LKw4LKm4LKw4LON4LK24LK/4LK44LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyteCyv+CysOCyvuCyruCyl+CziuCys+Cyv+CyuOCysuCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOCyoeCzh+Cyn+CyviDgsrXgsr/gsrDgsr7gsq7gspfgs4rgsrPgsr/gsrjgsrLgsr7gspfgsr/gsqbgs4YiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4LKs4LKz4LK44LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4LKu4LK/4LKk4LK/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOCyjuCymuCzjeCymuCysOCyv+CyleCzhiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4LKV4LOG4LKy4LK44LKmIOCyruCzi+CyoeCzjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLgsqjgsr/gsq7gs43gsq4g4LKH4LKk4LON4LKk4LOA4LKa4LK/4LKoIOCyquCysOCypuCzhuCyl+Cys+CzgSDgsofgsrLgs43gsrLgsr8g4LKV4LK+4LKj4LK/4LK44LK/4LKV4LOK4LKz4LON4LKz4LOB4LKk4LON4LKk4LK14LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LONIOCyruCyvuCyueCyv+CypOCyvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuCyuOCzjeCyleCzjeCysOCzgOCyqOCzjSDgsqrgsr/gsqjgs43gsqjgsr/gsoLgspfgs40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4LK54LOB4LKh4LOB4LKV4LK+4LKfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LKq4LON4LKw4LK+4LKw4LKC4LKt4LK/4LK44LKy4LOBIOCyuOCyvuCypuCzjeCyr+CyteCyv+CysuCzjeCysi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4LKH4LKo4LON4LKo4LK34LON4LKf4LOBIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuCyh+CypOCyv+CyueCyvuCyuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOCyh+CyqOCzjeCyqOCyt+CzjeCyn+CzgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4LKF4LKh4LON4LKh4LKy4LK+4LKX4LK/IOCyteCyv+CyreCynOCyv+CyuOCyv+CypiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuCysuCyguCyrOCyteCyvuCyl+CyvyDgsrXgsr/gsq3gspzgsr/gsrjgsr/gsqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4LKV4LK44LON4LKf4LKu4LONIOCyteCyv+CyreCynOCyv+CyuOCyv+CypiI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgsqzgs43gsq/gsr7gsp/gsrDgsr8g4LKw4LKV4LON4LK34LKVIOCyhuCyqOCzjSDgsobgspfgsr/gsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4LKV4LK+4LKw4LON4LKv4LKV4LON4LK34LKu4LKk4LOGIOCyruCypOCzjeCypOCzgSDgsrngsr/gsqjgs43gsqjgs4bgsrLgs4Yg4LKh4LOH4LKf4LK+4LK14LKo4LON4LKo4LOBIOCyleCyoeCyv+CyruCzhiDgsq7gsr7gsqHgs4HgsqTgs43gsqTgsqbgs4YiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuCyrOCzjeCyr+CyvuCyn+CysOCyvyDgsongsrPgsr/gsqTgsr7gsq/gsrXgsqjgs43gsqjgs4Eg4LKG4LKr4LONIOCyruCyvuCyoeCyvyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgsrXgsr/gsrfgsq/gspfgsrPgsqjgs43gsqjgs4Eg4LKu4LKw4LOG4LKu4LK+4LKh4LKy4LK+4LKX4LK/4LKm4LOGIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLgsqjgsr/gsq7gs43gsq4g4LKq4LKw4LKm4LOG4LKvIOCyruCzh+CysuCzhiDgsqrgs43gsrDgsqbgsrDgs43gsrbgsr/gsrjgsrLgsr7gspfgs4HgsrUg4LKO4LKy4LON4LKy4LK14LKo4LON4LKo4LOCIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4LKv4LOBIOCyuOCzhuCysOCzhuCyueCyv+CyoeCyv+Cyr+CysuCzgSDgsqrgs43gsrDgsr7gsrDgsoLgsq3gsr/gsrjgs4HgsqTgs43gsqTgsqbgs4YuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCyruCypOCzjeCypOCziuCyruCzjeCyruCzhiDgsqTgs4vgsrDgsr/gsrjgsqbgsr/gsrDgs4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4LKO4LKy4LON4LKy4LK14LKo4LON4LKo4LOCIOCypOCzhuCysOCyteCzgeCyl+CziuCys+Cyv+CyuOCzgSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4LKo4LK/4LKw4LK+4LKV4LKw4LK/4LK44LOBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LK14LK+4LKy4LON4LKv4LOC4LKu4LONIOCyuOCyguCyteCyvuCypuCyteCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCyruCzguCysiDgsq7gsrDgs4Hgsrjgs43gsqXgsr7gsqrgsr/gsrjgsrLgs4Eg4LK44LON4LKq4LKw4LON4LK24LK/4LK44LK/LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLgsqjgsr/gsq7gs43gsq4g4LKV4LOG4LKy4LK44LKmIOCyquCzjeCysOCziuCyq+CziOCysuCzjeKAjCDgsoXgsqjgs43gsqjgs4Eg4LKo4LOA4LK14LOBIOCyrOCys+CyuOCzgeCypOCzjeCypOCyv+CysOCzgeCyteCyv+CysOCyvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IuCyuOCyv+CyuOCzjeCyn+CyruCzjSBVSSDgsp/gs43gsq/gs4LgsqjgsrDgs40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLgso7gsoLgsqzgs4bgsqHgs40g4LKu4LK+4LKh4LKy4LK+4LKmIOCyrOCzjeCyr+CyvuCyn+CysOCyvyDgsrbgs4fgspXgsqHgsr4g4LKk4LOL4LKw4LK/4LK44LK/Ijwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgsqzgs43gsrLgs4Lgsp/gs4LgsqTgs40g4LKG4LKo4LONIOCyruCyvuCyoeCzgeCyteCzgeCypuCzhz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4LKo4LK/4LKu4LON4LKuIOCyleCzgOCyrOCzi+CysOCzjeCyoeCzjSDgsoXgsqjgs43gsqjgs4Eg4LKf4LON4LKv4LK+4LKs4LON4LKy4LOG4LKf4LON4oCM4LKX4LOGIOCyuOCyguCyquCysOCzjeCyleCyv+CyuOCysuCzgSwg4LKo4LOA4LK14LOBIOCyruCziuCypuCysuCzgSDgsqzgs43gsrLgs4Lgsp/gs4LgsqTgs40g4LKG4LKo4LONIOCyruCyvuCyoeCyrOCzh+CyleCyvuCyl+CzgeCypOCzjeCypOCypuCzhi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgsobgsqjgs40g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCyheCyp+Cyv+CyuOCzguCymuCyqOCzhuCyl+Cys+Cyv+Cyl+CzhiDgsoXgsqjgs43gsrXgsq/gsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgsogg4LKF4LKq4LON4LKy4LK/4LKV4LOH4LK24LKo4LON4oCM4LKo4LK/4LKC4LKmIOCyjuCysuCzjeCysuCyviDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsr/gspfgs4Yg4LKF4LKo4LON4LK14LKv4LK/4LK44LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCyqOCyv+CysOCzjeCyrOCyguCyp+Cyv+CyuOCysuCyvuCyl+Cyv+CypuCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCyleCyoeCyv+CyruCzhiDgsqrgs43gsrDgsr7gsq7gs4Hgspbgs43gsq/gsqTgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4LK44LK+4LKu4LK+4LKo4LON4LKvIOCyquCzjeCysOCyvuCyruCzgeCyluCzjeCyr+CypOCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgsongsqjgs43gsqjgsqQg4LKq4LON4LKw4LK+4LKu4LOB4LKW4LON4LKv4LKk4LOGIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LKk4LOB4LKw4LON4LKk4LOBIOCyquCzjeCysOCyvuCyruCzgeCyluCzjeCyr+CypOCzhiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4LKIIOCyheCyp+Cyv+CyuOCzguCymuCyqOCzhuCyl+Cys+CyqOCzjeCyqOCzgSDgso7gsoLgsqbgsr/gspfgs4Ig4LKk4LOL4LKw4LK/4LK44LKs4LOH4LKhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCyheCyp+Cyv+CyuOCzguCymuCyqOCzhiDgsqrgsp/gs43gsp/gsr/gsq8g4LKV4LOG4LKz4LKt4LK+4LKX4LKm4LKy4LON4LKy4LK/IOCyuOCzjeCypeCyrOCzjeCyp+CyteCyvuCyl+CyvyDgsqTgs4vgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCyiCDgsoXgsqfgsr/gsrjgs4Lgsprgsqjgs4bgspfgsrPgsqjgs43gsqjgs4Eg4LK44LON4LKl4LKs4LON4LKn4LK14LK+4LKX4LK/IOCypOCzi+CysOCyv+CyuOCzgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4LKF4LKn4LK/4LK44LOC4LKa4LKo4LOG4LKX4LKzIOCyquCyn+CzjeCyn+Cyv+CyryDgsq7gs4fgsrLgs43gsq3gsr7gspfgsqbgsrLgs43gsrLgsr8g4LKk4LOL4LKw4LK/4LK44LOBIOCyruCypOCzjeCypOCzgSDgsqfgs43gsrXgsqjgsr8g4LKu4LK+4LKh4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuCyquCysOCypuCzhuCyr+CyqOCzjeCyqOCzgSDgsrXgs4DgspXgs43gsrfgsr/gsrjgsr8g4LKu4LKk4LON4LKk4LOBIOCyp+CzjeCyteCyqOCyvyDgsq7gsr7gsqHgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCyueCzhuCymuCzjeCymuCyv+CyqCDgsrjgs4bgsp/gs43gsp/gsr/gsoLgspfgs43igIzgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgsq7gs4Hgspfgsr/gsqbgsr/gsqbgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgsrjgsr7gsq7gsr7gsqjgs43gsq8g4LKs4LKj4LON4LKj4LKX4LKz4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCysOCyvuCypOCzjeCysOCyvyDgsqzgsqPgs43gsqPgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCyleCyuOCzjeCyn+CyruCzjSDgsqzgsqPgs43gsqPgspfgsrPgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgsoXgsqrgsrDgsr/gsprgsr/gsqQg4LKs4LKj4LON4LKj4LKX4LKz4LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCyrOCyo+CzjeCyoyDgsqzgsqbgsrLgsr7gsrXgsqPgs4YiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgsqTgs43gsrXgsrDgsr/gsqQg4LK44LOG4LKf4LON4LKf4LK/4LKC4LKX4LON4oCM4LKX4LKzIOCyn+CziOCysuCzjSDgsqTgs4vgsrDgsr/gsrjgs4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCyleCyuOCzjeCyn+CyruCzjSDgsqrgsrDgsr/gsrXgsrDgs43gsqTgsqjgs4bgsq/gsqjgs43gsqjgs4Eg4LK44LKV4LON4LKw4LK/4LKv4LKX4LOK4LKz4LK/4LK44LK/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4LKF4LKo4LON4LK14LKv4LK/4LK44LOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CyqOCzjeCyqOCzgSDgspbgsprgsr/gsqTgsqrgsqHgsr/gsrjgsr8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgspXgs4bgsrLgsrXgs4Eg4LKs4LKj4LON4LKjIOCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CzgSDgsogg4LK44LK+4LKn4LKo4LK14LKo4LON4LKo4LOBIOCyheCyqOCzgeCyquCyr+CzgeCyleCzjeCypOCyl+CziuCys+Cyv+CyuOCyrOCyueCzgeCypuCzgS4g4LKIIOCyrOCyo+CzjeCyoyDgsrjgs4bgsp/gs43gsp/gsr/gsoLgspfgs43igIzgspfgsrPgsqjgs43gsqjgs4Eg4LKW4LKa4LK/4LKk4LKq4LKh4LK/4LK44LKy4LOBIOCyuOCysOCyvyDgspXgs43gsrLgsr/gspXgs40g4LKu4LK+4LKh4LK/LCDgsofgsrLgs43gsrLgsrXgsr7gsqbgsrDgs4Yg4LKIIOCyuOCzhuCyn+CzjeCyn+Cyv+CyguCyl+CzjeKAjOCyl+Cys+CyqOCzjeCyqOCzgSAxMCDgsrjgs4bgspXgs4bgsoLgsqHgs4HgspfgsrMg4LKo4LKC4LKk4LKwIOCyruCysOCzgeCyueCziuCyguCypuCyv+CyuOCyvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuCyrOCzjeCyr+CyvuCyn+CysOCyvyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLgsprgsr7gsrDgs43gspzgsr/gsoLgspfgs40g4LK44LKu4LKv4LKm4LKy4LON4LKy4LK/IOCyrOCzjeCyr+CyvuCyn+CysOCyvyDgsrjgs4fgsrXgsrDgs43igIzigIwg4LKy4LKt4LON4LKv4LK14LK/4LKw4LOB4LK14LOB4LKm4LK/4LKy4LON4LKyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuCyrOCzjeCyr+CyvuCyn+CysOCyvyDgsrjgs4fgsrXgsrDgs43igIzigIwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLgspXgsr7gsrDgs43gsq/gspXgs43gsrfgsq7gsqTgs4Yg4LKu4LKk4LON4LKk4LOBIOCyueCyv+CyqOCzjeCyqOCzhuCysuCzhiDgsqHgs4fgsp/gsr7gsrXgsqjgs43gsqjgs4Eg4LKV4LKh4LK/4LKu4LOGIOCyruCyvuCyoeCzgeCypOCzjeCypOCypuCzhiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta28vc3RyaW5ncy54bWwKaW5kZXggMzU3MjVhYS4uZWNmZjJhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1rby9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWtvL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLrsqjshozrpqzqsIAg66y07J2M7J6F64uI64ukLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLsnpHsl4Ug66qo65OcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7snYQo66W8KSDsiKjquYHri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuydtCjqsIApIOygnOqxsOuQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLstZzqt7wg7IKs7Jqp7ZWcIOyVoO2UjOumrOy8gOydtOyFmOydhCDrqqjrkZAg64ur7JWY7Iq164uI64ukLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i66qo67CU7J28IO2Vq+yKpO2Mn+ydtCDsgqzsmqkg7KSR7KeA65CY7JeI7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuuqqOuwlOydvCDtlavsiqTtjJ/snYQg7IKs7Jqp7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+Iu2ZlOuptCDsoITshqHsnbQg7KSR7KeA65CY7JeI7Iq164uI64ukLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuyekeyXhSDrqqjrk5zqsIAg7IKs7JqpIOykkeyngOuQmOyXiOyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLsnpHsl4Ug66qo65Oc6rCAIOyCrOyaqSDshKTsoJXrkJjsl4jsirXri4jri6QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i7J6R7JeFIOuqqOuTnOqwgCDsgqzsmqkg7KSR7KeA65CY7JeI7Iq164uI64ukLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLsnpHsl4Ug66qo65Oc6rCAIOyCrOyaqSDshKTsoJXrkJjsl4jsirXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IuuUlOyKpO2UjOugiOydtCDrsJ3quLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyDrjbDsnbTthLAg7IKs7JqpIOykkeyngOuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOuNsOydtO2EsCDsgqzsmqkg7KSR7KeA65CoIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IOyCrOyaqeuQqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLtlZzrj4Q6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g6rK96rOgIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLsnpHsl4Ug66qo65OcIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuyXrOq4sOyXkCDstZzqt7wg7ZmU66m07J20IO2RnOyLnOuQqeuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLslaDtlIzrpqzsvIDsnbTshZgg7KCV67O0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i7ZmU66m0IOqzoOyglSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLqsoDsg4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuydhCjrpbwpIOyLnOyeke2VoCDsiJgg7JeG7Iq164uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLrjZTrs7TquLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i6riw66GdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz7qsJwg642U67O06riwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLsiJjtj4kg67aE7ZWgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i7IiY7KeBIOu2hO2VoCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLrp57stqQg67aE7ZWgIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuuwsO2EsOumrCDshLjsnbTrsoQg7IKs7JqpIOykkSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLshLHriqUg67CPIOuwseq3uOudvOyatOuTnCDrjbDsnbTthLDrpbwg7KSE7J6F64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i67Cw7YSw66asIOygiOyVvSDquLDriqUg7IKs7JqpIOykkeyngCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLsiKjqsqjsp4Qg7L2Y7YWQ7LigIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+7JeQ7IScIO2ZlOuptOyXkCDtkZzsi5zrkJwg66qo65OgIOqyg+ydhCDsuqHsspjtlZjquLAg7Iuc7J6R7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLri6Tsi5wg7ZGc7IucIOyViO2VqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLrqqjrkZAg7KeA7Jqw6riwIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLqsbDrtoAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuydgCjripQpIOuzvOulqCDrjIDtmZTsnoXri4jri6QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i7JuQ67O47J2EIOuzteybkO2VmOugpOuptCDthLDsuZjtlZjshLjsmpQuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuyngeyepSDtlITroZztlYTsnYQg7IKs7Jqp7ZWY6rOgIOyeiOyKteuLiOuLpC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLsi5zsiqTthZwgVUkg7Yqc64SIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i64K07J6l7ZiVIOuwsO2EsOumrCDsnpTrn4kg67mE7JyoIO2RnOyLnCI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i67iU66Oo7Yis7Iqk66W8IOy8nOyLnOqyoOyKteuLiOq5jD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i7YKk67O065Oc66W8IO2DnOu4lOumv+yXkCDsl7DqsrDtlZjroKTrqbQg66i87KCAIOu4lOujqO2IrOyKpOulvCDsvJzslbwg7ZWp64uI64ukLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuyCrOyaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDslYzrprzsl5Ag7KCB7JqpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i7J20IOyVseydmCDsoITssrQg7JWM66a87JeQIOyggeyaqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLssKjri6jrkKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLspJHsmpTrj4Qg64Ku7J2MIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuykkeyalOuPhCDrs7TthrUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i7KSR7JqU64+EIOuGkuydjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuykkeyalOuPhCDquLTquIkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuyVjOumvCDri6Tsi5wg7ZGc7IucIOyViO2VqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLslYzrprwg66qp66GdIO2VmOuLqOyXkCDrrLTsnYzsnLzroZwg7ZGc7IucIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLrrLTsnYzsnLzroZwg7JWM66a8IO2RnOyLnCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i7JWM66a8IOuqqeuhnSDsg4Hri6jsl5Ag7ZGc7Iuc7ZWY6rOgIOyGjOumrOuhnCDslYzrprwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i7ZmU66m07JeQIO2RnOyLnO2VmOqzoCDshozrpqzroZwg7JWM66a8Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLshKTsoJUg642U67O06riwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i7JmE66OMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i7J2867CYIOyDieyDgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLslbzqsIQg7IOJ7IOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLrp57stqQg7IOJ7IOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i7JWMIOyImCDsl4bripQg7IOJ7IOBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuyDieyDgSDsiJjsoJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLruaDrpbgg7ISk7KCVIO2DgOydvCDtkZzsi5wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+Iuunnuy2pCDrs4DtmZgg7IKs7JqpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i7KCB7JqpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuyEpOyglSDtmZXsnbgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLsnbzrtoAg7IOJ7IOBIOyEpOygleycvOuhnCDsnbjtlbQg7J20IOq4sOq4sOulvCDsgqzsmqntlZjsp4Ag66q77ZWgIOyImCDsnojsirXri4jri6QuIO2ZleyduOydhCDtgbTrpq3tlZjsl6wg7J2065+s7ZWcIOyDieyDgSDshKTsoJXsnYQg7ZmV7J247ZWY7KeAIOyViuycvOuptCAxMOy0iCDtm4Tsl5Ag7ISk7KCV7J20IOy0iOq4sO2ZlOuQqeuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuuwsO2EsOumrCg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+Iuy2qeyghO2VmOuKlCDrj5nslYgg67Cw7YSw66asIOyEuOydtOuyhOuKlCDsgqzsmqntlaAg7IiYIOyXhuyKteuLiOuLpC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i67Cw7YSw66asIOyEuOydtOuyhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuyEseuKpSDrsI8g67Cx6re465287Jq065OcIOuNsOydtO2EsOulvCDspITsnoXri4jri6QuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWt5LXJLRy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCmluZGV4IDc5Yjg5MzcuLmFkNDMwZWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMta3ktcktHL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLSrtC90YHSr9C3INGI0YvSo9Cz0YvRgNC+0L4uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+ItCY0YjRgtOp06kg0YDQtdC20LjQvNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0Y3RgtC40LHQsNGA0LPQsCDQsNC70LHQvtC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0LbQvtC6INCx0L7Qu9C00YMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i0JDQutGL0YDQutGLINC60L7Qu9C00L7QvdC80L7Qu9C+0YDQtNGD0L0g0LHQsNCw0YDRiyDQutOp0Lcg0LbQsNC30LTRi9C80LTQsCDQutCw0LvRgtGL0YDRi9C70LTRiy4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+ItCc0L7QsdC40LvQtNC40Log0LHQsNC50LvQsNC90YvRiCDRgtKv0LnSr9C90q8g06nRh9Kv0YDSr9C70LTSry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLQnNC+0LHQuNC70LTQuNC6INCx0LDQudC70LDQvdGL0Ygg0YLSr9C50q/QvdKvINC60q/QudCz0q/Qt9Kv0LvQtNKvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+ItCi0YvRiNC60Ysg0Y3QutGA0LDQvdCz0LAg0YfRi9Cz0LDRgNGD0YMg0LDRgNCw0LrQtdGC0Lgg0YLQvtC60YLQvtGC0YPQu9C00YMuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i0JjRiNGC06nTqSDRgNC10LbQuNC80Lgg06nRh9Kv0LouIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i0JjRiNGC06nTqSDRgNC10LbQuNC80Lgg0LrSr9C50q/Qui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLQmNGI0YLTqdOpINGA0LXQttC40LzQuCDTqdGH0q/RgNKv0LvQtNKvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLQmNGI0YLTqdOpINGA0LXQttC40LzQuCDQutKv0LnQs9Kv0LfSr9C70LTSry4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i0JbQsNGA0YvQutGC0YvQs9GL0L0g0LrTqdGA0YHTqdGC0q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHINC00LDQudGL0L3QtNCw0YDRiyDRgtGL0L3QtNGL0YDRi9C70LTRiy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyDQtNCw0LnRi9C90LTQsNGA0Ysg0YLRi9C90LTRi9GA0YvQu9C00YsiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g0LrQvtC70LTQvtC90YPQu9C00YMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDRh9C10LrRgtOp06kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g0Y3RgdC60LXRgNGC0q/SryI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0JjRiNGC06nTqSDRgNC10LbQuNC80LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i0JDQutGL0YDQutGLINGN0LrRgNCw0L3QtNCw0YDRi9Kj0YvQtyDQsdGD0Lsg0LbQtdGA0LTQtdC9INC606nRgNKv0L3TqdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i0JrQvtC70LTQvtC90LzQviDQttOp0L3Sr9C90LTTqSDQvNCw0LDQu9GL0LzQsNGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i0Y3QutGA0LDQvSDQutCw0LTQvtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ItC40LfQtNOp06kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQsdCw0YjRgtCw0Lkg0LDQu9Cz0LDQvSDQttC+0LouIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItCU0LDQs9GLIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+ItCi0LDRgNC20YvQvNCw0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItCU0LDQs9GLIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i0KLRg9GD0YDQsNGB0YvQvdCw0L0g0LHTqdC70q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCi0LjQs9C40L3QtdC9INCx06nQu9Kv0q8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i0KvSo9Cz0LDQudC70LDRiNGC0YvRgNGL0LvQs9Cw0L0g0LHTqdC70q/SryI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQkdCw0YLQsNGA0LXRj9C90Ysg0q/QvdOp0LzQtNOp0LPSr9GHINC60q/QudCz0q/Qt9Kv0LvQtNKvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItCY0YjRgtC40L0g0LzQsNC50L3QsNC/0YLRg9GD0LvRg9Cz0YPQvSDQvdCw0YfQsNGA0LvQsNGC0YvQvywg0YTQvtC90LTRg9C6INC00LDQudGL0L3QtNCw0YDQtNGLINGH0LXQutGC0LXQudGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLQkdCw0YLQsNGA0LXRj9C90YvQvSDQutGD0LHQsNGC0YvQvSDSr9C906nQvNC006nQs9Kv0YfRgtKvINOp0YfSr9GA0q/QvyDQutC+0Y7RgyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQnNCw0LfQvNGD0L3QtNCw0YAg0LbQsNGI0YvRgNGL0LvQs9Cw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g0Y3QutGA0LDQvdCz0LAg0YfRi9C60LrQsNC9INC90LXRgNGB0LXQvdC40L0g0LHQsNCw0YDRi9C9INGB0q/RgNOp0YLQutOpINGC0LDRgNGC0LAg0LHQsNGI0YLQsNC50YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCt0LrQuNC90YfQuCDQutOp0YDRgdOp0YLSr9C70LHTqdGB0q/QvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLQkdCw0YDQtNGL0LPRi9C9INGC0LDQt9Cw0LvQsNC/INGB0LDQu9GD0YMiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+ItCW0L7QuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+INKv0L3QtNKvINC60LDRgtGD0YPQu9Cw0YLRg9GDINC00LjQsNC70L7Qs9GDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i0KLSr9C/0L3Rg9GB0LrQsNC90Ysg0LrQsNC70YvQsdGL0L3QsCDQutC10LvRgtC40YDSr9KvINKv0YfSr9C9INGC0LjQudC40L8g0LrQvtGO0qPRg9C3LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLQltGD0LzRg9GIINC/0YDQvtGE0LjQu9C40qPQuNC30LTQuCDQutC+0LvQtNC+0L3Rg9C/INC20LDRgtCw0YHRi9C3Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i0JHQsNGC0LDRgNGP0L3Ri9C9INC60YPQsdCw0YLQvdGL0L0g0LTQtdKj0LPRjdGN0LvQuCDQv9Cw0LnRi9C3INC80LXQvdC10L0g0LrTqdGA0YHTqdGC0LvRgdKv0L0iPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCDQutKv0LnQs9Kv0LfSr9C70YHSr9C90LHSrz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i0JHQsNGB0LrRi9GH0YLQvtCx0YPSo9GD0LfQtNGDINC/0LvQsNC90YjQtdGC0LjSo9C40LfQs9C1INGC0YPRgtCw0YjRgtGL0YDRg9GDINKv0YfSr9C9LCDQsNC00LXQs9C10L3QtNC1IEJsdWV0b290aFwn0YLRgyDQutKv0LnQs9Kv0LfSr9GI0q/So9Kv0Lcg0LrQtdGA0LXQui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLQmtKv0LnQs9Kv0LfSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+INGN0YHQutC10YDRgtC80LXQu9C10YDQuNC90LUg0LrQvtC70LTQvtC90YPQu9GB0YPQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCj0YjRg9C7INC60L7Qu9C00L7QvdC80L7QtNC+0L0g0LDQu9GL0L3Qs9Cw0L0g0LHQsNGA0LTRi9C6INGN0YHQutC10YDRgtC80LXQu9C10YDQs9C1INC60L7Qu9C00L7QvdGD0LvRgdGD0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i0JHTqdCz06nRgtGC06nQu9Cz06nQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+ItCc0LDQsNC90LjQu9Kv0q/Qu9Kv0LPSryDRgtOp0LzTqdC9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+ItCc0LDQsNC90LjQu9Kv0q/Qu9Kv0LPSryDQvtGA0YLQvtGH0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JzQsNCw0L3QuNC70q/Sr9C70q/Qs9KvINC20L7Qs9C+0YDRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+ItCc0LDQsNC90LjQu9Kv0q/Qu9Kv0LPSryDRiNCw0YjRi9C70YvRiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0JHRg9C7INGN0YHQutC10YDRgtC80LXQu9C10YAg0Y3RhyDQutCw0YfQsNC9INC606nRgNGB06nRgtKv0LvQsdOp0YHSr9C9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCt0YHQutC10YDRgtC80LXQu9C10YAg0YLQuNC30LzQtdGB0LjQvdC40L0g0Y3SoyDRi9C70LTRi9C50YvQvdC00LAg0q/QvdGB0q/QtyDQutOp0YDRgdOp0YLSr9C70YHSr9C9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLQkdGD0Lsg0Y3RgdC60LXRgNGC0LzQtdC70LXRgCDSr9C90YHSr9C3INC606nRgNGB06nRgtKv0LvRgdKv0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItCt0YHQutC10YDRgtC80LXQu9C10YAg0YLQuNC30LzQtdGB0LjQvdC40L0g0Y3SoyDQttC+0LPQvtGA0YPRgdGD0L3QtNCwINKv0L0g0YfRi9Cz0LDRgNGL0L8g0LrTqdGA0YHTqdGC0q/Qu9GB0q/QvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLSrtC9INC80LXQvdC10L0g0LrQvtGI0YLQvtC70YPQvywg0Y3QutGA0LDQvdCz0LAg0YfRi9Cz0LDRgNGL0LvRgdGL0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCU0LDQs9GLINC206nQvdC006nTqdC706nRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+ItCQ0YLQutCw0YDRi9C70LTRiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItCa0LDQtNC40LzQutC4INGC0q/RgdGC06nRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLQotKv0L3QutKvINGC0q/RgdGC06nRgCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0KvSo9Cz0LDQudC70LDRiNGC0YvRgNGL0LvQs9Cw0L0g0YLSr9GB0YLTqdGAIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i0JHQtdC70LPQuNGB0LjQtyDRgtKv0YHRgtOp0YAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0KLSr9GB0q/QvSDTqdC30LPTqdGA0YLSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i0KvQutGH0LDQvCDQttOp0L3QtNOp06nQu9Op0YAg0YLQsNC60YLQsNGB0YvQvSDQutOp0YDRgdOp0YLSr9KvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLQq9Kj0LPQsNC50LvQsNGI0YLRi9GA0YvQu9Cz0LDQvSDTqdC30LPTqdGA0YLSr9Kv0L3SryDQuNGI0YLQtdGC0q/SryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCa0L7Qu9C00L7QvdGD0YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i0JbTqdC90LTTqdOp0LvTqdGA0LTSryDRi9GA0LDRgdGC0L7QviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCQ0LnRgNGL0Lwg0YLSr9GBINC206nQvdC006nTqdC706nRgNKvINCx0YPQuyDRgtKv0LfQvNOp0LrRgtKvINC60L7Qu9C00L7QvdGD0LvQs9GD0YEg0LrRi9C70YvQvyDQutC+0Y7RiNGDINC80q/QvNC60q/QvS4g0JHRg9C7INGC0q/RgSDQttOp0L3QtNOp06nQu9Op0YDSr9C9INGL0YDQsNGB0YLQvtC+INKv0YfSr9C9IE9LINCx0LDRgdC60YvRh9GL0L0g0YfRi9C60YvQu9C00LDRgtGL0qPRi9C3LCDQsdC+0LvQsdC+0YHQviDQsdGD0Lsg0LbTqdC90LTTqdOp0LvTqdGAIDEwINGB0LXQutGD0L3QtNC00LDQvSDQutC40LnQuNC9INCx0LDRiNGC0LDQv9C60Ysg0LDQsdCw0LvRi9C90LAg0LrQtdC70YLQuNGA0LjQu9C10YIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLQkdCw0YLQsNGA0LXRjyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLQkdCw0YLQsNGA0LXRj9C90Ysg0q/QvdOp0LzQtNOp0LPSr9GHINC60YPQsdCw0YLRgtC+0L4g0YPRh9GD0YDRg9C90LTQsCDQuNGI0YLQtdCx0LXQudGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+ItCR0LDRgtCw0YDQtdGP0L3RiyDSr9C906nQvNC006nQs9Kv0YciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLQmNGI0YLQuNC9INC80LDQudC90LDQv9GC0YPRg9C70YPQs9GD0L0g0L3QsNGH0LDRgNC70LDRgtGL0L8sINGE0L7QvdC00YPQuiDQtNCw0LnRi9C90LTQsNGA0LTRiyDRh9C10LrRgtC10LnRgiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sYW5kL2RpbWVucy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbAppbmRleCA0NTYzOTFkLi5jNzVhODlmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvZGltZW5zLnhtbApAQCAtMjQsNSArMjQsNSBAQAogICAgIDxpbnRlZ2VyIG5hbWU9Im5vdGlmaWNhdGlvbl9wYW5lbF9sYXlvdXRfZ3Jhdml0eSI+QGludGVnZXIvc3RhbmRhcmRfbm90aWZpY2F0aW9uX3BhbmVsX2xheW91dF9ncmF2aXR5PC9pbnRlZ2VyPgogCiAgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCI+MmRwPC9kaW1lbj4KLSAgICA8ZGltZW4gbmFtZT0iZG9ja2VkX2RpdmlkZXJfaGFuZGxlX2hlaWdodCI+MjRkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV9oZWlnaHQiPjE2ZHA8L2RpbWVuPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWxhbmQvc3R5bGVzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCmluZGV4IDk2ZDhmYjguLmI3MTFmYWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbGFuZC9zdHlsZXMueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgICAgPC9zdHlsZT4KIAogICAgIDxzdHlsZSBuYW1lPSJEb2NrZWREaXZpZGVyQmFja2dyb3VuZCI+Ci0gICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj4xMmRwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+MTBkcDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfaGVpZ2h0Ij5tYXRjaF9wYXJlbnQ8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2dyYXZpdHkiPmNlbnRlcl9ob3Jpem9udGFsPC9pdGVtPgogICAgIDwvc3R5bGU+CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgPHN0eWxlIG5hbWU9IkRvY2tlZERpdmlkZXJIYW5kbGUiPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9ncmF2aXR5Ij5jZW50ZXJfdmVydGljYWw8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X3dpZHRoIj40OGRwPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPjY0ZHA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+OTZkcDwvaXRlbT4KICAgICA8L3N0eWxlPgogCiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbG8tckxBL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKaW5kZXggMDE1ZDRkYS4uNDhkOTRjZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sby1yTEEvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuC6m+C6tOC6lOC6quC6veC6hy4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i4LuC4Lud4LqU4LqB4Lqy4LqZ4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLgupvgurTgupQgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC7hOC6p+C7iS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i4Lqb4Lq04LqUIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgu4HguqXgu4nguqcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i4LqX4Lq44LqB4oCL4LuB4Lqt4Lqx4Lqa4oCL4Lqe4oCL4Lql4Lq04oCL4LuA4LqE4oCL4LqK4Lqx4LqZ4oCL4Lqa4LuN4LuI4oCL4LqU4Lq74LqZ4oCL4Lqh4Lqy4oCL4LqZ4Lq14LuJ4oCL4LqW4Lq34LqB4oCL4Lqb4LuI4Lqt4LqN4oCL4LuE4LqbLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4Lqb4Lq04LqU4oCL4Lqu4Lqx4Lqt4LqU4oCL4Lqq4Lqw4oCL4Lqb4Lqt4LqU4oCL4LuA4LqE4Lq34LuI4Lqt4LqZ4oCL4LqX4Lq14LuI4oCL4LuB4Lql4LuJ4LqnLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuC7gOC6m+C6teC6lOKAi+C6ruC6seC6reC6lOKAi+C6quC6sOKAi+C6m+C6reC6lOKAi+C7gOC6hOC6t+C7iOC6reC6meKAi+C6l+C6teC7iOKAi+C7geC6peC7ieC6py4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLguqLgurjgupTigIvguoHgurLgupnigIvguqrgurvgu4jguofigIvigIvgup7gurLguprigIvgu5zgu4ngurLigIvguojgu43igIvgu4HguqXgu4nguqcuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i4LuC4Lud4LqU4LqB4Lqy4LqZ4LuA4Lqu4Lqx4LqU4Lqn4Lq94LqB4Lqb4Lq04LqU4Lqi4Lq54LuILiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuC7guC7neC6lOC6geC6suC6meC7gOC6ruC6seC6lOC6p+C6veC6geC7gOC6m+C6teC6lOC6ouC6ueC7iC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLgu4Lgu53gupTguoHgurLgupngu4Dguq7gurHgupTguqfgur3guoHgupvgurTgupTguqLgurngu4guIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IuC7guC7neC6lOC6geC6suC6meC7gOC6ruC6seC6lOC6p+C6veC6geC7gOC6m+C6teC6lOC6ouC6ueC7iC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4oCL4LqE4Lqn4Lqy4Lqh4oCL4LuB4LqI4LuJ4LqH4oCL4oCL4LqC4Lqt4LqH4oCL4LqI4LuNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i4LqC4LuN4LuJ4oCL4Lqh4Lq54LqZIDJH4oCLLTNHIOC6ouC6uOC6lOKAi+C6iuC6u+C7iOC6p+KAi+C6hOC6suC6p+C7geC6peC7ieC6pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IuC6guC7jeC7ieKAi+C6oeC6ueC6mSA0RyDguqLgurjgupTigIvguorgurvgu4jguqfigIvguoTgurLguqfgu4HguqXgu4nguqciPC9zdHJpbmc+CkBAIC0yNzUsNyArMjcwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dpZmlfbm9fbmV0d29yayIgbXNnaWQ9IjIyMjE5OTMwNzcyMjA4NTYzNzYiPiLguprgu43gu4jguqHgurXgu4DguoTgurfguq3guoLgu4jgurLguo0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX29mZl9sYWJlbCIgbXNnaWQ9Ijc1NTg3NzgxMDA4NDM4ODU4NjQiPiJXaeKAiy1GaSDgupvgurTgupQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193aWZpX2RldGFpbF9lbXB0eV90ZXh0IiBtc2dpZD0iMjY5OTkwMzUwMzgzOTA5MjI2Ij4i4Lqa4LuN4LuI4oCL4Lqh4Lq14oCL4LuA4LqE4Lq34Lqt4oCL4LqC4LuI4Lqy4LqNIFdpLUZpIOC6ouC6ueC7iCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2Nhc3RfdGl0bGUiIG1zZ2lkPSI3NzA5MDE2NTQ2NDI2NDU0NzI5Ij4i4LqE4Lqy4Lqq4LqX4LuMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2FzdF90aXRsZSIgbXNnaWQ9Ijc3MDkwMTY1NDY0MjY0NTQ3MjkiPiLguoHgurLgupnguqrgurvgu4jguofguqrgurHgupnguo3gurLgupkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jYXN0aW5nIiBtc2dpZD0iNjYwMTcxMDY4MTAzMzM1MzMxNiI+IuKAi+C6geC6s+KAi+C6peC6seC6h+KAi+C6quC6u+C7iOC6h+KAi+C6quC6seC6meKAi+C6jeC6suC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2Nhc3RfZGV2aWNlX2RlZmF1bHRfbmFtZSIgbXNnaWQ9IjUzNjcyNTMxMDQ3NDIzODI5NDUiPiLigIvguq3gurjigIvgupvgurDigIvguoHguq3gupnguprgu43gu4jigIvguqHgurXigIvguorgurfgu4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jYXN0X2RldmljZV9kZWZhdWx0X2Rlc2NyaXB0aW9uIiBtc2dpZD0iMjQ4NDU3MzY4MjM3ODYzNDQxMyI+IuKAi+C6nuC7ieC6reKAi+C6oeKAi+C6quC6u+C7iOC6h+KAi+C6quC6seC6meKAi+C6jeC6suC6meKAi+C7geC6peC7ieC6pyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IuC7g+C6iuC7ieKAi+C7hOC6m+KAi+C7geC6peC7ieC6pyA8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4i4LqI4Lqz4oCL4LqB4Lqx4LqUIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IuC6hOC6s+KAi+C7gOC6leC6t+C6reC6mSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgu4Lgu53gupTguoHgurLgupngu4Dguq7gurHgupTguqfgur3guoEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iWW91ciByZWNlbnQgc2NyZWVucyBhcHBlYXIgaGVyZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IuKAi+C6guC7jeC7ieKAi+C6oeC6ueC6meKAi+C7geC6reC6seC6muKAi+C6nuKAi+C6peC6tOKAi+C7gOC6hOKAi+C6iuC6seC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuC6geC6suC6meKAi+C6m+C6seC6geKAi+C7neC6uOC6lOKAi+C7nOC7ieC6suKAi+C6iOC7jeKAiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLguorguq3guoHguqvgurIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IuC6muC7jeC7iOKAi+C6quC6suKAi+C6oeC6suC6lOKAi+C7gOC6peC6teC7iOC6oSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LuE4LqU4LuJLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgu4Dgup7gurXgu4jguqHgu4DgupXgurXguqEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i4Lqb4Lqw4Lqr4Lqn4Lqx4LqUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4LuA4Lqe4Lq14LuI4Lqh4LuA4LqV4Lq14LqhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLguoHgurLgupnigIvgu4Hguo3guoHigIvguqXguqfguofigIvguoLguqfgurLguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLguoHgurLgupnigIvgu4Hguo3guoHigIvguqXguqfguofigIvgupXgurHgu4nguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4LqB4Lqy4LqZ4oCL4LuB4LqN4LqB4oCL4LqB4Lqz4oCL4LqZ4Lq74LqU4oCL4LuA4Lqt4LqHIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuC7gOC6m+C6teC6lOKAi+C7g+C6iuC7ieKAi+C7guC6leKAi+C6m+C6sOC6ouC6seC6lOKAi+C7geC6muC6seC6lOC7gOC6leC6teC6o+C6teKAi+C7geC6peC7ieC6pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLguqvgurzgurjgupTigIvgupvgurDigIvguqrgurTigIvgupfgurTigIvgup7gurLguprigIvgu4HguqXgurDigIvguoHgurLgupnigIvgupngurPigIvgu4Pguorgu4nigIvguoLgu43gu4nigIvguqHgurngupnigIvgup7gurfgu4ngupnguqvgurzgurHguociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuC6m+C6tOC6lOKAi+C7guC6leKAi+C6m+C6sOKAi+C6ouC6seC6lOKAi+C7geC6muC6seC6lOKAi+C7gOC6leC6teKAi+C6o+C6tSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgu4Dgupngurfgu4nguq3guqvgurLigIvgupbgurfguoHigIvgu4Dguorgurfgu4jguq3guofigIvgu4Tguqfgu4kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4oCL4LqI4Lqw4oCL4LuA4Lql4Lq14LuI4Lqh4oCL4Lqa4Lqx4LqZ4oCL4LqX4Lq24LqB4oCL4LqX4Lq44LqB4oCL4Lqi4LuI4Lqy4LqH4oCL4LqX4Lq14LuI4oCL4Lqq4Lqw4oCL4LuB4LqU4LqH4oCL4Lqc4Lq74LqZ4oCL4LuD4LqZ4oCL4Luc4LuJ4Lqy4oCL4LqI4LuN4oCL4LqX4LuI4Lqy4LqZLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLguprgu43gu4jigIvgupXgu4nguq3guofigIvguqrgurDigIvgu4HgupTguofigIvguq3gurXguoEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4Lql4Lq24Lqa4Lql4LuJ4Lqy4LqH4LqX4Lqx4LqH4Lud4Lq74LqUIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLgupvgurDgupXgurTgu4DguqrgupQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgu4HguqHgu4jgupnigIvgu5zgu4ngurLigIvgupXgu4jgurLguofigIvguqXgurDigIvgupTgurHguprigIvguqrgur3guociPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLguqrgu43gurLigIvgupzgurHgupTigIvgu4Dgup7gurfgu4jguq3guoHgurngu4nigIvguoTgurfgupnigIvgupXgurvgu4ngupnigIvguqrgurDigIvguprgurHguprigIsuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuC6l+C7iOC6suC6meC6geC6s+C6peC6seC6h+C7g+C6iuC7ieC7guC6m+C6o+C7hOC6n+C6peC7jOC6muC7iOC6reC6meC7gOC6ruC6seC6lOC6p+C6veC6geC6guC6reC6h+C6l+C7iOC6suC6mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSBUdW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuC6quC6sOKAi+C7geC6lOC6h+KAi+C7gOC6m+C6teKAi+C7gOC6iuC6seC6meKAi+C7geC6muC6seC6lOKAi+C7gOC6leC6teKAi+C6o+C6teKAi+C6l+C6teC7iOKAi+C6leC6tOC6lOKAi+C6oeC6siI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4LuA4Lqb4Lq14LqU4oCL4LuD4LqK4LuJIEJsdWV0b290aCDguprgu43gu4g/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuC7gOC6nuC6t+C7iOC6reKAi+C7gOC6iuC6t+C7iOC6reC6oeKAi+C6leC7jeC7iOKAi+C7geC6m+C7ieC6meKAi+C6nuC6tOC6oeKAi+C6guC6reC6h+KAi+C6l+C7iOC6suC6meKAi+C6geC6seC6muKAi+C7geC6l+C6seC6muKAi+C7gOC6peC6seC6lOKAi+C6guC6reC6h+KAi+C6l+C7iOC6suC6mSwg4LqB4LuI4Lqt4LqZ4oCL4Lqt4Lq34LuI4LqZ4oCL4Lud4Lq74LqU4oCL4LqX4LuI4Lqy4LqZ4oCL4LqV4LuJ4Lqt4LqH4oCL4LuA4Lqb4Lq14LqUIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgu4DgupvgurXgupTigIsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLgupngurPgu4Pguorgu4nguoHgurHguprguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupkgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4LqZ4Lqz4LuD4LqK4LuJ4LqB4Lqx4Lqa4LqX4Lq44LqB4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LqI4Lqy4LqB4LuB4Lqt4Lqx4Lqa4LqZ4Lq14LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuC6muC6peC6seC6reC6geC7hOC6p+C7ieKAi+C7geC6peC7ieC6pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuC6hOC6p+C6suC6oeKAi+C6quC7jeC6suKAi+C6hOC6seC6meKAi+C6leC7jeC7iOC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLguoTguqfgurLguqHguqrgurPguoTgurHgupngupvgurvguoHguoHgurDgupXgurQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4LqE4Lqn4Lqy4Lqh4oCL4Lqq4LuN4Lqy4oCL4LqE4Lqx4LqZ4oCL4Lqq4Lq54LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LqE4Lqn4Lqy4Lqh4oCL4Lqq4LuN4Lqy4oCL4LqE4Lqx4LqZ4oCL4Lqu4Lq14Lqa4oCL4LqU4LuI4Lqn4LqZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLguqLgu4jgurLigIvguqrgurDigIvgu4HgupTguofigIvguoHgurLgupnigIvgu4Hguojgu4nguofigIvgu4DgupXgurfguq3gupnigIvgu4Dguqvgurzgurvgu4jgurLigIvgupngurXgu4kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4Lqq4Lqw4LuB4LqU4LqH4Lqi4Lq54LuI4Lqq4LuI4Lqn4LqZ4Lql4Lq44LuI4Lqh4LqC4Lqt4LqH4Lql4Lqy4LqN4LqB4Lqy4LqZ4LuB4LqI4LuJ4LqH4LuA4LqV4Lq34Lqt4LqZ4LuB4Lqa4Lqa4Lqh4Lq14Lqa4LuN4LuI4Lqq4Lq94LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLguqrgurDgu4HgupTguofguoHgurLgupngu4Hguojgu4nguofgu4DgupXgurfguq3gupngu4Dguqvgurzgurvgu4jgurLgupngurXgu4ngu4Hguprguprguprgu43gu4jguqHgurXguqrgur3guociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuC6quC6sOC7geC6lOC6h+C6ouC6ueC7iOC6quC7iOC6p+C6meC7gOC6l+C6tOC6h+C6guC6reC6h+C6peC6suC6jeC6geC6suC6meC7geC6iOC7ieC6h+C7gOC6leC6t+C6reC6mSDgu4HguqXgurDguqrgurvgu4jguofguqrgur3guofgupTgurHguociPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4LuA4LqU4Lqx4LuJ4LqH4LqC4Lq24LuJ4LqZ4LuA4LqX4Lq04LqH4Lqr4LqZ4LuJ4Lqy4LqI4LuNIOC7geC6peC6sOC6quC6u+C7iOC6h+C6quC6veC6h+C6lOC6seC6hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4oCL4LqB4Lqy4LqZ4oCL4LqV4Lqx4LuJ4LqH4oCL4LqE4LuI4Lqy4oCL4LuA4Lqe4Lq14LuI4Lqh4oCL4LuA4LqV4Lq14LqhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4Lqq4Lqz4LuA4Lql4Lqx4LqU4LuB4Lql4LuJ4LqnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4Lqq4Lq14oCL4Lqb4Lq74LqB4oCL4LqB4Lqw4oCL4LqV4Lq0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuC6quC6teKAi+C6leC6reC6meKAi+C6geC6suC6h+KAi+C6hOC6t+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4Lqq4Lq14LuB4Lqa4Lqa4LqB4Lqz4LqZ4Lq74LqU4LuA4Lqt4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4Lqq4Lq14LqX4Lq14LuI4Lqa4LuN4LuI4Lqu4Lq54LuJ4LqI4Lqx4LqBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuC6geC6suC6meKAi+C6lOC6seC6lOKAi+C7geC6m+C6h+C6quC6tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuC6quC6sOC7geC6lOC6h+C7hOC6l+C6peC7jOC6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC6lOC7iOC6p+C6mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4LuA4Lqb4Lq14LqU4LuD4LqK4LuJ4LqB4Lqy4LqZ4Lqb4LuI4Lq94LqZ4Lqq4Lq14LuB4Lqa4Lqa4LqB4Lqz4LqZ4Lq74LqU4LuA4Lqt4LqHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4LqZ4Lqz4LuD4LqK4LuJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuC6ouC6t+C6meKAi+C6ouC6seC6meKAi+C6geC6suC6meKAi+C6leC6seC7ieC6h+KAi+C6hOC7iOC6siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuC6muC6suC6h+C6geC6suC6meC6leC6seC7ieC6h+C6hOC7iOC6suC6quC6teC6quC6suC6oeC6suC6lOC7gOC6ruC6seC6lOC7g+C6q+C7ieC6reC6uOC6m+C6sOC6geC6reC6meC6meC6teC7ieC6muC7jeC7iOC6quC6suC6oeC6suC6lOC7g+C6iuC7ieC7hOC6lOC7iS4g4LqE4Lql4Lq04LqBIOC6leC6u+C6geC6peC6u+C6hyDgu4Dgup7gurfgu4jguq3guqLgurfgupnguqLgurHgupnguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLguqrgurXgu4Dguqvgurzgurvgu4jgurLgupngurXgu4ksIOC6luC7ieC6suC6muC7jeC7iOC6lOC6seC7iOC6h+C6meC6seC7ieC6mSDguoHgurLgupngupXgurHgu4nguofguoTgu4jgurLgu4Dguqvgurzgurvgu4jgurLgupngurXgu4nguojgurDgupXgurHgu4nguofguoTgurfgupngu4Pgu53gu4gg4Lqr4Lq84Lqx4LqH4LqI4Lqy4LqBIDEwIOC6p+C6tOC6meC6suC6l+C6tS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuC7geC6muC6seC6lOC7gOC6leC6teC6o+C6tSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLgupXgurvguqfgupvgurDguqLgurHgupTgu4HguprgurHgupTgu4DgupXgurXguqPgurXguprgu43gu4jguqHgurXgu4Pguqvgu4ngupngurPgu4Pguorgu4ngu4PgupnguqXgurDguqvguqfgu4jgurLguofguoHgurLgupnguqrgurLguoEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i4LqV4Lq74Lqn4Lqb4Lqw4Lqi4Lqx4LqU4oCL4LuB4Lqa4Lqx4LqU4LuA4LqV4Lq14Lqj4Lq1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i4Lqr4Lq84Lq44LqU4oCL4Lqb4Lqw4oCL4Lqq4Lq04oCL4LqX4Lq04oCL4Lqe4Lqy4Lqa4oCL4LqB4Lqy4LqZ4LuD4LqK4LuJ4LqH4Lqy4LqZIOC7geC6peC6sCDigIvguoLgu43gu4nigIvguqHgurngupnigIvgup7gurfgu4ngupnguqvgurzgurHguociPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx0L3N0cmluZ3MueG1sCmluZGV4IDI4Mjg2NmYuLmFkYjVhNTMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHQvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdC9zdHJpbmdzLnhtbApAQCAtMTYzLDggKzE2Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iU2thbWJ1dGlzIHR5bHVzLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJEYXJibyByZcW+aW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iQXRzaXNha3l0aSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IkF0c2lzYWt5dGEgcHJvZ3JhbW9zIOKAnjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuKAnC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJBdHNpc2FreXRhIHZpc8WzIG5hdWphdXNpxbMgcHJvZ3JhbcWzLiI8L3N0cmluZz4KQEAgLTIxNiwxNCArMjE1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWxpb2pvIHJ5xaFpbyB2aWXFoW9zaW9zIGludGVybmV0byBwcmllaWdvcyB0YcWha2FzIGnFoWp1bmd0YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWxpb2pvIHJ5xaFpbyB2aWXFoW9zaW9zIGludGVybmV0byBwcmllaWdvcyB0YcWha2FzIMSvanVuZ3Rhcy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJFa3Jhbm8gcGVyZGF2aW1hcyBzdXN0YWJkeXRhcy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJEYXJibyByZcW+aW1hcyBpxaFqdW5ndGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkRhcmJvIHJlxb5pbWFzIMSvanVuZ3Rhcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJEYXJibyByZcW+aW1hcyBpxaFqdW5ndGFzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJEYXJibyByZcW+aW1hcyDEr2p1bmd0YXMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkVrcmFubyDFoXZpZXN1bWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkfigJMzRyBkdW9tZW55cyBwcmlzdGFiZHl0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIGR1b21lbnlzIHByaXN0YWJkeXRpIjwvc3RyaW5nPgpAQCAtMzAxLDE1ICsyOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iScWhbmF1ZG90YTogPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkxpbWl0YXM6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4gxK9zcMSXamltYXMiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IkRhcmJvIHJlxb5pbWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IsSMaWEgcm9kb21pIG5hdWphdXNpIGVrcmFuYWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJQcm9ncmFtb3MgaW5mb3JtYWNpamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJla3Jhbm8gcHJpc2VnaW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwYWllxaFrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTmVwYXZ5a28gcGFsZWlzdGkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJEYXVnaWF1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IklzdG9yaWphIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJEYXIgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJIb3Jpem9udGFsdXMgc2thaWR5bWFzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iVmVydGlrYWx1cyBza2FpZHltYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iVGlua2ludGFzIHNrYWlkeW1hcyI8L3N0cmluZz4KQEAgLTM3Miw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBa3VtdWxpYXRvcmlhdXMgdGF1c29qaW1vIHByaWVtb27ElyDEr2p1bmd0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJTdW1hxb5pbmFtYXMgbmHFoXVtYXMgaXIgZm9uaW5pxbMgZHVvbWVuxbMgbmF1ZG9qaW1hcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iScWhanVuZ3RpIEFrdW11bGlhdG9yaWF1cyB0YXVzb2ppbW8gcHJpZW1vbsSZIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlR1cmlueXMgcGFzbMSXcHRhcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4i4oCePHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPuKAnCBwcmFkxJdzIGZpa3N1b3RpIHZpc2vEhSwga2FzIHJvZG9tYSBqxatzxbMgZWtyYW5lLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJEYXVnaWF1IG5lYmVyb2R5dGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVmlza8SFIGnFoXZhbHl0aSI8L3N0cmluZz4KQEAgLTQxNyw4ICs0MTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iQXRtZXN0aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiLigJ48eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCcIHlyYSBnYXJzdW1vIHZhbGR5bW8gZGlhbG9nbyBsYW5nYXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJQYWxpZXNraXRlLCBrYWQgYXRrdXJ0dW3El3RlIG9yaWdpbmFsxIUuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+Ik5hdWRvamF0ZSBkYXJibyBwcm9maWzEryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlNpc3RlbW9zIG5hdWRvdG9qbyBzxIVzYWpvcyBkZXJpbmltbyBwcmllbW9uxJciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJSb2R5dGkgxK90ZXJwdMSFIGFrdW11bGlhdC4gxK9rcm92b3MgcHJvY2VudGluxJkgdmVydMSZIjwvc3RyaW5nPgpAQCAtNDU4LDQgKzQ1MCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLErmp1bmd0aSDigJ5CbHVldG9vdGjigJw/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkthZCBnYWzEl3R1bcSXdGUgcHJpanVuZ3RpIGtsYXZpYXTFq3LEhSBwcmllIHBsYW7FoWV0aW5pbyBrb21waXV0ZXJpbywgcGlybWlhdXNpYSB0dXJpdGUgxK9qdW5ndGkg4oCeQmx1ZXRvb3Ro4oCcLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IsSuanVuZ3RpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iVGFpa3l0aSDigJ48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJwgcHJhbmXFoWltYW1zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iVGFpa3l0aSB2aXNpZW1zIHByYW5lxaFpbWFtcyBpxaEgxaFpb3MgcHJvZ3JhbW9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IlXFvmJsb2t1b3RhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTWHFvmEgc3ZhcmJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IsSucHJhc3RhIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJEaWRlbMSXIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlNrdWJpIHN2YXJiYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmlla2FkYSBuZXJvZHl0aSDFoWnFsyBwcmFuZcWhaW3FsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJUeWxpYWkgcm9keXRpIHByYW5lxaFpbcWzIHPEhXJhxaFvIGFwYcSNaW9qZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVHlsaWFpIHJvZHl0aSDFoWl1b3MgcHJhbmXFoWltdXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlJvZHl0aSBwcmFuZcWhaW3FsyBzxIVyYcWhbyB2aXLFoXVqZSBpciBza2FtYsSXdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUm9keXRpIGVrcmFuZSBpciBza2FtYsSXdGkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkRhdWdpYXUgbnVzdGF0eW3FsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkF0bGlrdGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLErnByYXN0b3Mgc3BhbHZvcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYWt0aWVzIHNwYWx2b3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlRpbmtpbnRvcyBzcGFsdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmXFvmlub21vcyBzcGFsdm9zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlNwYWx2xbMga2VpdGltYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJSb2R5dGkgU3BhcsSNacWzasWzIG51c3RhdHltxbMgacWha2xvdGluxJdzIGVsZW1lbnTEhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4ixK5nYWxpbnRpIHRpbmtpbnTEhSB0cmFuc2Zvcm1hdmltxIUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJUYWlreXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+Ik51c3RhdHltxbMgcGF0dmlydGluaW1hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkTEl2wga2FpIGt1cmnFsyBzcGFsdsWzIG51c3RhdHltxbMgxK9yZW5naW55cyBnYWxpIGLFq3RpIG5ldGlua2FtYXMgbmF1ZG90aS4gU3B1c3RlbMSXa2l0ZSDigJ5HZXJhaeKAnCwga2FkIHBhdHZpcnRpbnR1bcSXdGUgxaFpdW9zIHNwYWx2xbMgbnVzdGF0eW11cy4gS2l0YWlwIMWhaWUgbnVzdGF0eW1haSBidXMgbnVzdGF0eXRpIGnFoSBuYXVqbyBwbyAxMCBzZWt1bmTFvmnFsy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkFrdW11bGlhdG9yaXVzICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4gJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJBa3VtdWxpYXRvcmlhdXMgdGF1c29qaW1vIHByaWVtb27ElyBuZXBhc2lla2lhbWEgxK9rcmF1bmFudCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJBa3VtdWxpYXRvcmlhdXMgdGF1c29qaW1vIHByaWVtb27ElyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlN1bWHFvmluYW1hcyBuYcWhdW1hcyBpciBmb25pbmnFsyBkdW9tZW7FsyBuYXVkb2ppbWFzIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1sdi9zdHJpbmdzLnhtbAppbmRleCA4ZTk5YzU3Li5iOGE2ZDAxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLWx2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbHYvc3RyaW5ncy54bWwKQEAgLTE2Miw4ICsxNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Ilp2YW5hIHNpZ27EgWxzwqDigJQga2x1c3MuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IkRhcmJhIHJlxb7Eq21zIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJOZXLEgWTEq3QgbGlldG90bmkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IkxpZXRvdG5lIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB2YWlycyBuZXRpZWsgcsSBZMSrdGEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iVmlzYXMgbmVzZW4gaXptYW50b3TEgXMgbGlldG9qdW1wcm9ncmFtbWFzIHRpa2Egbm/FhmVtdGFzLiI8L3N0cmluZz4KQEAgLTIxNSwxNCArMjE0LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWxhaXMgdMSra2zEgWpzIGlyIGl6c2zEk2d0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJNb2JpbGFpcyB0xKtrbMSBanMgaXIgaWVzbMSTZ3RzLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkVrcsSBbmEgYXByYWlkxKvFoWFuYSBpciBhcHR1csSTdGEuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iRGFyYmEgcmXFvsSrbXMgaXIgaXpzbMSTZ3RzLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkRhcmJhIHJlxb7Eq21zIGlyIGllc2zEk2d0cy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJEYXJiYSByZcW+xKttcyBpciBpenNsxJNndHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IkRhcmJhIHJlxb7Eq21zIGlyIGllc2zEk2d0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iRWtyxIFuYSBzcGlsZ3R1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyR+KAkzNHwqBkYXR1IGxpZXRvanVtcyBpciBhcHR1csSTdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0R8KgZGF0dSBsaWV0b2p1bXMgaXIgYXB0dXLEk3RzIjwvc3RyaW5nPgpAQCAtMzAwLDE1ICsyOTUsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVGllayBpem1hbnRvdHM6IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJJZXJvYmXFvm9qdW1zOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+wqBicsSrZGluxIFqdW1zIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJEYXJiYSByZcW+xKttcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJKxatzdSBwxJNkxJNqaWUgZWtyxIFuaSB0aWVrIHLEgWTEq3RpIMWhZWl0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybcSBY2lqYSBwYXIgbGlldG9qdW1wcm9ncmFtbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJQaWVzcHJhdXN0IGVrcsSBbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iTWVrbMSTdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTmV2YXLEk2phIHBhbGFpc3QgbGlldG90bmkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJWYWlyxIFrIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IlbEk3N0dXJlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJWxJNswqA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ikhvcml6b250xIFscyBkYWzEq2p1bXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJWZXJ0aWvEgWxzIGRhbMSranVtcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJQaWVsxIFnb3RzIGRhbMSranVtcyI8L3N0cmluZz4KQEAgLTM3MSw3ICszNjUsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJJZXNsxJNndHMgYWt1bXVsYXRvcmEgZW5lcsSjaWphcyB0YXVwxKvFoWFuYXMgcmXFvsSrbXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iU2FtYXppbmEgdmVpa3RzcMSTanUgdW4gZm9uYSBkYXR1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iSXpzbMSTZ3QgYWt1bXVsYXRvcmEgamF1ZGFzIHRhdXDEq8WhYW51Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNhdHVycyBwYXNsxJNwdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gc8SBa3MgdXrFhmVtdCB2aXN1LCBrYXMgdGlrcyByxIFkxKt0cyBqxatzdSBla3LEgW7EgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVmFpcnMgbmVyxIFkxKt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkR6xJNzdCB2aXN1Ijwvc3RyaW5nPgpAQCAtNDE2LDggKzQwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJOZWF0xLxhdXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpciBza2HEvHVtYSBkaWFsb2dsb2R6acWGxaEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJQaWVza2FyaWV0aWVzLCBsYWkgYXRqYXVub3R1IHPEgWtvdG7Ek2pvLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJKxatzIGl6bWFudG9qYXQgZGFyYmEgcHJvZmlsdS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTaXN0xJNtYXMgc2Fza2FybmVzIHJlZ3VsYXRvcnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJSxIFkxKt0IGFrdW11bGF0b3JhIHV6bMSBZGVzIGzEq21lbmkgcHJvY2VudG9zIjwvc3RyaW5nPgpAQCAtNDU3LDQgKzQ0OSwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWYWkgaWVzbMSTZ3QgQmx1ZXRvb3RoIHNhdmllbm9qdW11PyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJMYWkgcGlldmllbm90dSB0YXN0YXTFq3J1IHBsYW7FoWV0ZGF0b3JhbSwgdmlzcGlybXMgaXIgasSBaWVzbMSTZHogQmx1ZXRvb3RoIHNhdmllbm9qdW1zLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ikllc2zEk2d0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iTGlldG90IHBhemnFhm9qdW1pZW0g4oCcPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+4oCdIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iTGlldG90IHZpc2llbSDFocSrcyBsaWV0b3RuZXMgcGF6acWGb2p1bWllbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG/Et8STdHMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJOYXYgc3ZhcsSrZ3MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iUGFyYXN0cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLEu290aSBzdmFyxKtncyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlN0ZWlkemFtcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTmVrYWQgbmVyxIFkxKt0IMWhb3MgcGF6acWGb2p1bXVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlLEgWTEq3QgcGF6acWGb2p1bXUgc2FyYWtzdGEgYXBha8WhZGHEvMSBIGJleiBza2HFhmFzIHNpZ27EgWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJSxIFkxKt0IMWhb3MgcGF6acWGb2p1bXVzIGJleiBza2HFhmFzIHNpZ27EgWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJSxIFkxKt0IHBhemnFhm9qdW11IHNhcmFrc3RhIGF1Z8WhZGHEvMSBIHVuIGFyIHNrYcWGYXMgc2lnbsSBbHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iUsSBZMSrdCBla3LEgW7EgSBhciBza2HFhmFzIHNpZ27EgWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJDaXRpIGllc3RhdMSranVtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkdhdGF2cyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IlBhcmFzdGFzIGtyxIFzYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmFrdHMga3LEgXNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iUGllbMSBZ290YXMga3LEgXNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik5lemluxIFtYXMga3LEgXNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJLcsSBc3UgcMSBcnZlaWRvxaFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLEgHRybyBpZXN0YXTEq2p1bXUgZWxlbWVudGEgcsSBZMSrxaFhbmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IlBpZWzEgWdvdMSBcyBwxIFydmVpZG/FoWFuYXMgaWVzcMSTam/FoWFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkxpZXRvdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJJZXN0YXTEq2p1bXUgYXBzdGlwcmluxIHFoWFuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5vdGVpa3R1IGtyxIFzdSBpZXN0YXTEq2p1bXUgZMSTxLwgxaHEqyBpZXLEq2NlIHZhciBrxLzFq3QgbmVsaWV0b2phbWEuIExhaSBhcHN0aXByaW7EgXR1IMWhb3Mga3LEgXN1IGllc3RhdMSranVtdXMsIG5va2xpa8WhxLdpbmlldCB1eiBMYWJpLiBKYSB0byBuZWl6ZGFyxKtzaWV0LCBwxJNjIDEwwqBzZWt1bmTEk20gxaFpZSBpZXN0YXTEq2p1bWkgdGlrcyBhdGllc3RhdMSrdGkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJBa3VtdWxhdG9ycyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJBa3VtdWxhdG9yYSBqYXVkYXMgdGF1cMSrxaFhbmFzIHJlxb7Eq21zIHV6bMSBZGVzIGxhaWvEgSBuYXYgcGllZWphbXMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkFrdW11bGF0b3JhIGphdWRhcyB0YXVwxKvFoWFuYXMgcmXFvsSrbXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJTYW1hemluYSB2ZWlrdHNwxJNqdSB1biBmb25hIGRhdHVzLiI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tay1yTUsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAppbmRleCBjMmRlNzU1Li44YmE4MDk0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1rLXJNSy9zdHJpbmdzLnhtbApAQCAtNDIsNyArNDIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9jb25maXJtYXRpb25fdGl0bGUiIG1zZ2lkPSI1Mjk5NTg1NDMzMDUwMzYxNjM0Ij4i0JTQsNC70Lgg0LTQsCDRgdC1INCy0LrQu9GD0YfQuCDRiNGC0LXQtNCw0YfQvtGCINC90LAg0LHQsNGC0LXRgNC40ZjQsD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9Ijc1MDc5Njg0MzA0NDc5MzAyNTciPiLQktC60LvRg9GH0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX3N0YXJ0X2FjdGlvbiIgbXNnaWQ9IjU1NzY2OTc0NTE2Nzc0ODYzMjAiPiLQktC60LvRg9GH0LXRgtC1INCz0L4g0YjRgtC10LTQsNGH0L7RgiDQvdCwINCx0LDRgtC10YDQuNGY0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9IjMwMjM4ODk5MTY2OTkyNzAyMjQiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3Nfc2V0dGluZ3NfYnV0dG9uIiBtc2dpZD0iMzAyMzg4OTkxNjY5OTI3MDIyNCI+ItCf0L7RgdGC0LDQstC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX3NldHRpbmdzX3dpZmlfYnV0dG9uIiBtc2dpZD0iMTczMzkyODE1MTY5ODMxMTkyMyI+IldpLUZpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9zZXR0aW5nc19hdXRvX3JvdGF0aW9uIiBtc2dpZD0iMzc5MDQ4MjU0MTM1Nzc5ODQyMSI+ItCQ0LLRgtC+0LzQsNGC0YHQutC+INGA0L7RgtC40YDQsNGa0LUg0L3QsCDQtdC60YDQsNC90L7RgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfc2V0dGluZ3NfbXV0ZV9sYWJlbCIgbXNnaWQ9IjU1NDY4MjU0OTkxNzQyOTM5NiI+ItCY0KHQmtCbLiI8L3N0cmluZz4KQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub19zaW1zIiBtc2dpZD0iMzk1Nzk5NzAxODMyNDk5NTc4MSI+ItCd0LXQvNCwINCh0JjQnC3QutCw0YDRgtC40YfQutCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXJyaWVyX25ldHdvcmtfY2hhbmdlX21vZGUiIG1zZ2lkPSI0MDE3MzAxNTgwNDQxMzA0MzA1Ij4i0J/RgNC+0LzQtdC90YPQstCw0ZrQtSDQvdCwINC80YDQtdC20LDRgtCwINC90LAg0L7Qv9C10YDQsNGC0L7RgNC+0YIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9iYXR0ZXJ5X2xldmVsIiBtc2dpZD0iNzQ1MTQ3NDE4NzExMzM3MTk2NSI+ItCR0LDRgtC10YDQuNGY0LAgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+INC/0YDQvtGG0LXQvdGC0LguIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zZXR0aW5nc19idXR0b24iIG1zZ2lkPSI3OTk1ODM5MTEyMzE4OTMzODAiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCDQvdCwINGB0LjRgdGC0LXQvC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3NldHRpbmdzX2J1dHRvbiIgbXNnaWQ9Ijc5OTU4MzkxMTIzMTg5MzM4MCI+ItCf0L7RgdGC0LDQstC60Lgg0L3QsCDRgdC40YHRgtC10LwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ub3RpZmljYXRpb25zX2J1dHRvbiIgbXNnaWQ9IjQ0OTgwMDAzNjk3Nzk0MjE4OTIiPiLQmNC30LLQtdGB0YLRg9Cy0LDRmtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZW1vdmVfbm90aWZpY2F0aW9uIiBtc2dpZD0iMzYwMzA5OTUxNDkwMjE4MjM1MCI+ItCY0LfQsdGA0LjRiNC4INC40LfQstC10YHRgtGD0LLQsNGa0LUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9ncHNfZW5hYmxlZCIgbXNnaWQ9IjM1MTE0Njk0OTkyNDAxMjMwMTkiPiLQk9Cf0KEg0LUg0L7QstC+0LfQvNC+0LbQtdC9LiI8L3N0cmluZz4KQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCF0LLQvtC90YfQtSDQvdCwINGC0LjQstC60L4uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+ItCg0LXQttC40Lwg0L3QsCDRgNCw0LHQvtGC0LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+ItCe0YLRhNGA0LvQuCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQtSDQvtGC0YTRgNC70LXQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+ItCh0LjRgtC1INC90LXQvtC00LDQvNC90LXRiNC90Lgg0LDQv9C70LjQutCw0YbQuNC4INGB0LUg0L7RgtGE0YDQu9C10L3QuC4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+ItCc0L7QsdC40LvQvdCw0YLQsCDRgtC+0YfQutCwINC90LAg0L/RgNC40YHRgtCw0L8g0LUg0LjRgdC60LvRg9GH0LXQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+ItCc0L7QsdC40LvQvdCw0YLQsCDRgtC+0YfQutCwINC90LAg0L/RgNC40YHRgtCw0L8g0LUg0LLQutC70YPRh9C10L3QsC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLQldC80LjRgtGD0LLQsNGa0LXRgtC+INC90LAg0LXQutGA0LDQvdC+0YIg0LfQsNC/0YDQtS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLQoNC10LbQuNC80L7RgiDQvdCwINGA0LDQsdC+0YLQsCDQtSDQuNGB0LrQu9GD0YfQtdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+ItCg0LXQttC40LzQvtGCINC90LAg0YDQsNCx0L7RgtCwINC1INCy0LrQu9GD0YfQtdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+ItCg0LXQttC40LzQvtGCINC90LAg0YDQsNCx0L7RgtCwINC1INC40YHQutC70YPRh9C10L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+ItCg0LXQttC40LzQvtGCINC90LAg0YDQsNCx0L7RgtCwINC1INCy0LrQu9GD0YfQtdC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLQntGB0LLQtdGC0LvQtdC90L7RgdGCINC90LAg0LXQutGA0LDQvdC+0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiLQn9C+0LTQsNGC0L7RhtC40YLQtSAyRy0zRyDRgdC1INC/0LDRg9C30LjRgNCw0L3QuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+ItCf0L7QtNCw0YLQvtGG0LjRgtC1IDRHINGB0LUg0L/QsNGD0LfQuNGA0LDQvdC4Ijwvc3RyaW5nPgpAQCAtMjY1LDcgKzI2MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19tZWRpYV9kZXZpY2VfbGFiZWwiIG1zZ2lkPSIxMzAyOTA2ODM2MzcyNjAzNzYyIj4i0JzQtdC00LjRg9C80YHQutC4INGD0YDQtdC0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9sYWJlbCIgbXNnaWQ9Ijc3MjU2NzEzMzU1NTA2OTU1ODkiPiJSU1NJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfcnNzaV9lbWVyZ2VuY3lfb25seSIgbXNnaWQ9IjI3MTM3NzQwNDE2NzI4ODY3NTAiPiLQodCw0LzQviDQuNGC0L3QuCDQv9C+0LLQuNGG0LgiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19zZXR0aW5nc19sYWJlbCIgbXNnaWQ9IjUzMjY1NTY1OTI1NzgwNjU0MDEiPiLQn9C+0LTQtdGB0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3NldHRpbmdzX2xhYmVsIiBtc2dpZD0iNTMyNjU1NjU5MjU3ODA2NTQwMSI+ItCf0L7RgdGC0LDQstC60LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aW1lX2xhYmVsIiBtc2dpZD0iNDYzNTk2OTE4MjIzOTczNjQwOCI+ItCS0YDQtdC80LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc191c2VyX2xhYmVsIiBtc2dpZD0iNTIzODk5NTYzMjEzMDg5Nzg0MCI+ItCI0LDRgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3VzZXJfdGl0bGUiIG1zZ2lkPSI0NDY3NjkwNDI3NjQyMzkyNDAzIj4i0JrQvtGA0LjRgdC90LjQuiI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+ItCY0YHQutC+0YDQuNGB0YLQtdC90L46IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLQm9C40LzQuNGCOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiLQn9GA0LXQtNGD0L/RgNC10LTRg9Cy0LDRmtC1INC30LAgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0KDQtdC20LjQvCDQvdCwINGA0LDQsdC+0YLQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLQktCw0YjQuNGC0LUg0L3QtdC+0LTQsNC80L3QtdGI0L3QuCDQtdC60YDQsNC90Lgg0YHQtSDQv9C+0ZjQsNCy0YPQstCw0LDRgiDRgtGD0LrQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+ItCY0L3RhNC+0YDQvNCw0YbQuNC4INC30LAg0LDQv9C70LjQutCw0YbQuNGY0LDRgtCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i0L/RgNC40LrQsNGH0YPQstCw0ZrQtSDQtdC60YDQsNC9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+ItC/0YDQtdCx0LDRgNCw0ZgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC60LvRg9GH0LguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItCf0L7QstC10ZzQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLQmNGB0YLQvtGA0LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQo9GI0YLQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+ItCg0LDQt9C00LXQu9C4INGF0L7RgNC40LfQvtC90YLQsNC70L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCg0LDQt9C00LXQu9C4INCy0LXRgNGC0LjQutCw0LvQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCg0LDQt9C00LXQu9C4INC/0YDQuNC70LDQs9C+0LTQtdC90L4iPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i0KjRgtC10LTQsNGH0L7RgiDQvdCwINCx0LDRgtC10YDQuNGY0LAg0LUg0LLQutC70YPRh9C10L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i0IjQsCDQvdCw0LzQsNC70YPQstCwINC40LfQstC10LTQsdCw0YLQsCDQuCDQv9C+0LTQsNGC0L7RhtC40YLQtSDQstC+INC30LDQtNC90LjQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLQmNGB0LrQu9GD0YfQtdGC0LUg0LPQviDRiNGC0LXQtNCw0YfQvtGCINC90LAg0LHQsNGC0LXRgNC40ZjQsCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLQodC+0LTRgNC20LjQvdC40YLQtSDRgdC1INGB0LrRgNC40LXQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+INGc0LUg0LfQsNC/0L7Rh9C90LUg0LTQsCDQv9GA0LXQt9C10LzQsCDRgdGQINGI0YLQviDRgdC1INC/0YDQuNC60LDQttGD0LLQsCDQvdCwINCy0LDRiNC40L7RgiDQtdC60YDQsNC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLQndC1INC/0L7QutCw0LbRg9Cy0LDRmCDQv9C+0LLRgtC+0YDQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCY0YHRh9C40YHRgtC4INGBw6giPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+ItCe0LTQsdC40ZgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQtSDQtNC40ZjQsNC70L7QsyDQt9CwINGY0LDRh9C40L3QsCDQvdCwINC30LLRg9C6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i0JTQvtC/0YDQtdGC0LUg0LfQsCDQtNCwINCz0L4g0LLRgNCw0YLQuNGC0LUg0L7RgNC40LPQuNC90LDQu9C+0YIuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+ItCT0L4g0LrQvtGA0LjRgdGC0LjRgtC1INGA0LDQsdC+0YLQvdC40L7RgiDQv9GA0L7RhNC40LsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLQkNC00LDQv9GC0LXRgCDQvdCwINCj0Jgg0L3QsCDRgdC40YHRgtC10LzQvtGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i0J/RgNC40LrQsNC20Lgg0LLQs9GA0LDQtNC10L0g0L/RgNC+0YbQtdC90YIg0L3QsCDQsdCw0YLQtdGA0LjRmNCw0YLQsCI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0JTQsCDRgdC1INCy0LrQu9GD0YfQuCBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCX0LAg0LTQsCDRmNCwINC/0L7QstGA0LfQtdGC0LUg0YLQsNGB0YLQsNGC0YPRgNCw0YLQsCDRgdC+INGC0LDQsdC70LXRgtC+0YIsINC90LDRmNC/0YDQstC+INGC0YDQtdCx0LAg0LTQsCDQstC60LvRg9GH0LjRgtC1IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLQktC60LvRg9GH0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQktCw0LbQuCDQt9CwINC40LfQstC10YHRgtGD0LLQsNGa0LDRgtCwINC30LAgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i0JLQsNC20Lgg0LfQsCDRgdC40YLQtSDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwINC+0LQg0L7QstCw0LAg0LDQv9C70LjQutCw0YbQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i0JHQu9C+0LrQuNGA0LDQvdC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0JzQsNC70LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0J3QvtGA0LzQsNC70L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQk9C+0LvQtdC80LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLQmNGC0L3QsCDQstCw0LbQvdC+0YHRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J3QuNC60L7Qs9Cw0Ygg0L3QtSDQs9C4INC/0YDQuNC60LDQttGD0LLQsNGYINC40LfQstC10YHRgtGD0LLQsNGa0LDQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCi0LjQstC60L4g0L/RgNC40LrQsNC20YPQstCw0Zgg0LPQuCDQvdCwINC00L3QvtGC0L4g0L3QsCDRgdC/0LjRgdC+0LrQvtGCINGB0L4g0LjQt9Cy0LXRgdGC0YPQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0KLQuNCy0LrQviDQv9GA0LjQutCw0LbRg9Cy0LDRmCDQs9C4INC40LfQstC10YHRgtGD0LLQsNGa0LDQstCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9GA0LjQutCw0LbRg9Cy0LDRmCDQs9C4INC90LAg0LLRgNCy0L7RgiDQvdCwINGB0L/QuNGB0L7QutC+0YIg0YHQviDQuNC30LLQtdGB0YLRg9Cy0LDRmtCwINC4INC00LDRmCDQt9Cy0YPRh9C10L0g0YHQuNCz0L3QsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCf0L7RmNCw0LLQuCDRgdC1INC90LAg0LXQutGA0LDQvdC+0YIg0Lgg0LTQsNGYINC30LLRg9GH0LXQvSDRgdC40LPQvdCw0LsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCf0L7QstC10ZzQtSDQv9C+0YHRgtCw0LLQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i0J3QvtGA0LzQsNC70L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3QvtGc0L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItCf0YDQuNGB0L/QvtGB0L7QsdC10L3QuCDQsdC+0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10L/QvtC30L3QsNGC0Lgg0LHQvtC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCf0YDQvtC80LXQvdCwINC90LAg0LHQvtGY0LDRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i0J/RgNC40LrQsNC20Lgg0L/Qu9C+0YfQutCwINCR0YDQt9C4INC/0L7RgdGC0LDQstC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItCe0LLQvtC30LzQvtC20Lgg0L/RgNC40YHQv9C+0YHQvtCx0LXQvdC+INGC0YDQsNC90YHRhNC+0YDQvNC40YDQsNGa0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLQn9GA0LjQvNC10L3QuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9C+0YLQstGA0LTQtdGC0LUg0LPQuCDQv9C+0YHRgtCw0LLQutC40YLQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0LXQutC+0Lgg0L/QvtGB0YLQsNCy0LrQuCDQvdCwINCx0L7QuNGC0LUg0LzQvtC20LUg0LTQsCDQs9C+INC90LDQv9GA0LDQstCw0YIg0YPRgNC10LTQvtGCINC90LXRg9C/0L7RgtGA0LXQsdC70LjQsi4g0JrQu9C40LrQvdC10YLQtSDQvdCwINCS0L4g0YDQtdC0INC30LAg0LTQsCDQs9C4INC/0L7RgtCy0YDQtNC40YLQtSDQvtCy0LjQtSDQv9C+0YHRgtCw0LLQutC4INC90LAg0LHQvtC40YLQtSwg0LjQvdCw0LrRgyDRgtC40LUg0L/QvtGB0YLQsNCy0LrQuCDRnNC1INGB0LUg0YDQtdGB0LXRgtC40YDQsNCw0YIg0L/QviAxMCDRgdC10LrRg9C90LTQuC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+ItCR0LDRgtC10YDQuNGY0LAgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i0KjRgtC10LTQsNGH0L7RgiDQvdCwINCx0LDRgtC10YDQuNGY0LAg0L3QtSDQtSDQtNC+0YHRgtCw0L/QtdC9INC/0YDQuCDQv9C+0LvQvdC10ZrQtSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLQqNGC0LXQtNCw0Ycg0L3QsCDQsdCw0YLQtdGA0LjRmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i0IjQsCDQvdCw0LzQsNC70YPQstCwINC40LfQstC10LTQsdCw0YLQsCDQuCDQv9C+0LTQsNGC0L7RhtC40YLQtSDQstC+INC30LDQtNC90LjQvdCwIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1sLXJJTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCmluZGV4IDU1OTQ3OTIuLjI0MDM3M2IgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbWwtcklOL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgtLHgtL/gtILgtJfgtbwg4LSo4LS/4LS24LWN4LS24LSs4LWN4oCM4LSm4LSu4LS+4LSj4LWNLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKgg4LSu4LWL4LSh4LWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LSo4LS/4LSw4LS44LS/4LSV4LWN4LSV4LWB4LSVLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LSo4LS/4LSw4LS44LS/4LSa4LWN4LSa4LWBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuC0heC0n+C1geC0pOC1jeC0pOC0v+C0n+C1huC0r+C1geC0s+C1jeC0syDgtI7gtLLgtY3gtLLgtL4g4LSF4LSq4LWN4LSy4LS/4LSV4LWN4LSV4LWH4LS34LSo4LWB4LSCIOC0qOC0v+C0sOC0uOC0v+C0muC1jeC0muC1gS4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuC0ruC1iuC0rOC1iOC1vSDgtLngtYvgtJ/gtY3gtJ/gtY3igIzgtLjgtY3igIzgtKrgtYvgtJ/gtY3gtJ/gtY0g4LST4LSr4LS+4LSV4LWN4LSV4LS/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuC0ruC1iuC0rOC1iOC1vSDgtLngtYvgtJ/gtY3gtJ/gtY3igIzgtLjgtY3igIzgtKrgtYvgtJ/gtY3gtJ/gtY0g4LST4LSj4LS+4LSV4LWN4LSV4LS/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuC0uOC1jeC0leC1jeC0sOC1gOC1uyDgtJXgtL7gtLjgtY3igIzgtLHgtY3gtLHgtYHgtJrgtYbgtK/gtY3gtK/gtb0g4LSo4LS/4LW84LSk4LWN4LSk4LS/LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qCDgtK7gtYvgtKHgtY0g4LST4LSr4LS+4LSj4LWNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qCDgtK7gtYvgtKHgtY0g4LST4LSj4LS+4LSj4LWNLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuC0quC1jeC0sOC0teC1vOC0pOC1jeC0pOC0qCDgtK7gtYvgtKHgtY0g4LST4LSr4LS+4LSV4LWN4LSV4LS/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKgg4LSu4LWL4LSh4LWNIOC0k+C0o+C0vuC0leC1jeC0leC0vy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4LSh4LS/4LS44LWN4LSq4LWN4LSy4LWHIOC0pOC1huC0s+C0v+C0muC1jeC0muC0giI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOC0oeC0vuC0seC1jeC0sSDgtKTgtL7gtb3gtJXgtY3gtJXgtL7gtLLgtL/gtJXgtK7gtL7gtK/gtL8g4LSo4LS/4LW84LSk4LWN4LSk4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcg4LSh4LS+4LSx4LWN4LSxIOC0pOC0vuC1veC0leC1jeC0leC0vuC0suC0v+C0leC0ruC0vuC0r+C0vyDgtKjgtL/gtbzgtKTgtY3gtKTgtL8iPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4LSJ4LSq4LSv4LWL4LSX4LS/4LSa4LWN4LSa4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4LSq4LSw4LS/4LSn4LS/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOC0ruC1geC0qOC1jeC0qOC0seC0v+C0r+C0v+C0quC1jeC0quC1jSI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSoIOC0ruC1i+C0oeC1jSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LSq4LWB4LSk4LS/4LSvIOC0uOC1jeC0leC1jeC0sOC1gOC0qOC1geC0leC1viDgtIfgtLXgtL/gtJ/gtYYg4LSm4LWD4LS24LWN4LSv4LSu4LS+4LSV4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i4LSG4LSq4LWN4LSq4LWNIOC0teC0v+C0teC0sOC0giI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuC0uOC1jeC0leC1jeC0sOC1gOC1uyDgtKrgtL/gtbsg4LSa4LWG4LSv4LWN4LSv4LW9Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuC0pOC0v+C0sOC0r+C1geC0lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC0huC0sOC0guC0reC0v+C0leC1jeC0leC0vuC0qOC0vuC0r+C0v+C0suC1jeC0si4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4LSV4LWC4LSf4LWB4LSk4LW9Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuC0muC0sOC0v+C0pOC1jeC0sOC0giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IOC0juC0o+C1jeC0o+C0giDgtJXgtYLgtJ/gtL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuC0pOC0v+C0sOC0tuC1jeC0muC1gOC0qOC0ruC0vuC0r+C0vyDgtLXgtYfgtbzgtKTgtL/gtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgtLLgtILgtKzgtK7gtL7gtK/gtL8g4LS14LWH4LW84LSk4LS/4LSw4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuC0h+C0t+C1jeKAjOC0n+C0vuC0qOC1geC0uOC1g+C0pOC0ruC0vuC0r+C0vyDgtLXgtYfgtbzgtKTgtL/gtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4LSs4LS+4LSx4LWN4LSx4LSx4LS/IOC0uOC1h+C0teC1vCDgtJPgtKPgtL7gtKPgtY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LS14LWB4LSCIOC0quC0tuC1jeC0muC0vuC0pOC1jeC0pOC0siDgtKHgtL7gtLHgtY3gtLHgtK/gtYHgtIIg4LSV4LWB4LSx4LSv4LWN4oCM4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgtKzgtL7gtLHgtY3gtLHgtLHgtL8g4LS44LWH4LS14LW8IOC0k+C0q+C0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgtJXgtYvgtbrgtJ/gtL7gtJXgtY3igIzgtLHgtY3gtLHgtYHgtJXgtb4g4LSu4LSx4LSa4LWN4LSa4LWBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLgtKjgtL/gtJngtY3gtJngtLPgtYHgtJ/gtYYg4LS44LWN4LSV4LWN4LSw4LWA4LSo4LS/4LW9IOC0quC1jeC0sOC0puC1vOC0tuC0v+C0quC1jeC0quC0v+C0muC1jeC0muC0v+C0sOC0v+C0leC1jeC0leC1geC0qOC1jeC0qCDgtI7gtLLgtY3gtLLgtL4g4LSV4LS+4LSw4LWN4LSv4LSZ4LWN4LSZ4LSz4LWB4LSCIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4LSV4LWN4LSv4LS+4LSq4LWN4oCM4LSa4LW8IOC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC1jSDgtIbgtLDgtILgtK3gtL/gtJXgtY3gtJXgtYHgtIIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuC0teC1gOC0o+C1jeC0n+C1geC0giDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtLDgtYHgtKTgtY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4LSO4LSy4LWN4LSy4LS+4LSCIOC0ruC0vuC0r+C1jeKAjOC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4LSo4LS/4LSw4LS44LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4sIOC0teC1i+C0s+C0v+C0r+C0giDgtKHgtK/gtLLgtYvgtJfgtL7gtKPgtY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLgtIbgtKbgtY3gtK/gtKTgtY3gtKTgtYfgtKTgtY0g4LSq4LWB4LSo4LSD4LS44LWN4LSl4LS+4LSq4LS/4LSV4LWN4LSV4LS+4LW7IOC0uOC1jeKAjOC0quC1vOC0tuC0v+C0leC1jeC0leC1geC0lS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i4LSo4LS/4LSZ4LWN4LSZ4LW+IOC0ieC0quC0r+C1i+C0l+C0v+C0leC1jeC0leC1geC0qOC1jeC0qOC0pOC1jSDgtJTgtKbgtY3gtK/gtYvgtJfgtL/gtJUg4LSq4LWN4LSw4LWK4LSr4LWI4LSy4LS+4LSj4LWNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4LS44LS/4LS44LWN4LSx4LWN4LSx4LSCIFVJIOC0n+C1jeC0r+C1guC0o+C1vCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuC0juC0guC0rOC0oeC1jSDgtJrgtYbgtK/gtY3igIzgtKQg4LSs4LS+4LSx4LWN4LSx4LSx4LS/IOC0tuC0pOC0ruC0vuC0qOC0giDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aCDgtJPgtKPgtL7gtJXgtY3gtJXgtKPgtYs/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IuC0qOC0v+C0meC1jeC0meC0s+C1geC0n+C1hiDgtJ/gtL7gtKzgtY3igIzgtLLgtYbgtLHgtY3gtLHgtYHgtK7gtL7gtK/gtL8g4LSV4LWA4LSs4LWL4LW84LSh4LWNIOC0leC0o+C0leC1jeC0seC1jeC0seC1geC0muC1huC0r+C1jeC0r+C1geC0qOC1jeC0qOC0pOC0v+C0qOC1jSwg4LSG4LSm4LWN4LSv4LSCIEJsdWV0b290aCDgtJPgtKPgtL7gtJXgtY3gtJXgtYfgtKPgtY3gtJ/gtKTgtYHgtKPgtY3gtJ/gtY0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4LST4LSj4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1geC0leC0s+C0v+C0suC1h+C0leC1jeC0leC1jSDgtKrgtY3gtLDgtK/gtYvgtJfgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgtIgg4LSG4LSq4LWN4LSq4LS/4LW9IOC0qOC0v+C0qOC1jeC0qOC1geC0s+C1jeC0syDgtI7gtLLgtY3gtLLgtL4g4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWB4LSV4LSz4LS/4LSy4LWH4LSV4LWN4LSV4LWB4LSCIOC0quC1jeC0sOC0r+C1i+C0l+C0v+C0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgtKzgtY3gtLLgtYvgtJXgtY3gtJXgtYHgtJrgtYbgtK/gtY3gtKTgtYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgtKTgtL7gtLTgtY3gtKjgtY3gtKgg4LSq4LWN4LSw4LS+4LSn4LS+4LSo4LWN4LSv4LSCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuC0uOC0vuC0p+C0vuC0sOC0oyDgtKrgtY3gtLDgtL7gtKfgtL7gtKjgtY3gtK/gtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4LSJ4LSv4LW84LSo4LWN4LSoIOC0quC1jeC0sOC0vuC0p+C0vuC0qOC1jeC0r+C0giI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuC0heC0n+C0v+C0r+C0qOC1jeC0pOC0sCDgtKrgtY3gtLDgtL7gtKfgtL7gtKjgtY3gtK/gtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuC0iCDgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtYHgtJXgtb4g4LSS4LSw4LS/4LSV4LWN4LSV4LSy4LWB4LSCIOC0leC0vuC0o+C0v+C0leC1jeC0leC0sOC1geC0pOC1jSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLgtIXgtLHgtL/gtK/gtL/gtKrgtY3gtKrgtY0g4LSy4LS/4LS44LWN4LSx4LWN4LSx4LS/4LSo4LWN4LSx4LWGIOC0pOC0vuC0tOC1hiDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtL7gtKTgtYYg4LSV4LS+4LSj4LS/4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgtIgg4LSF4LSx4LS/4LSv4LS/4LSq4LWN4LSq4LWB4LSV4LW+IOC0qOC0v+C0tuC0rOC1jeC0puC0ruC0vuC0r+C0vyDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuC0heC0seC0v+C0r+C0v+C0quC1jeC0quC1jSDgtLLgtL/gtLjgtY3gtLHgtY3gtLHgtL/gtKjgtY3gtLHgtYYg4LSP4LSx4LWN4LSx4LS14LWB4LSCIOC0ruC1geC0leC0s+C0v+C1vSDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtYHgtJUsIOC0tuC0rOC1jeC0puC0ruC1geC0o+C1jeC0n+C0vuC0leC1jeC0leC1geC0lSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgtLjgtY3gtJXgtY3gtLDgtYDgtKjgtL/gtb0g4LSm4LWD4LS24LWN4LSv4LSu4LS+4LSV4LWN4LSV4LWB4LSVLCDgtLbgtKzgtY3gtKbgtK7gtYHgtKPgtY3gtJ/gtL7gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuC0leC1guC0n+C1geC0pOC1vSDgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtKPgtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgtKrgtYLgtbzgtKTgtY3gtKTgtL/gtK/gtL7gtK/gtL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgtLjgtL7gtKfgtL7gtLDgtKMg4LS14LSw4LWN4oCN4LSj4LWN4LSj4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuC0sOC0vuC0pOC1jeC0sOC0vyDgtLXgtLDgtY3igI3gtKPgtY3gtKPgtJngtY3gtJngtb4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuC0h+C0t+C1jeC0n+C0vuC0qOC1geC0uOC1g+C0pCDgtLXgtLDgtY3igI3gtKPgtY3gtKPgtJngtY3gtJngtb4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgtKTgtL/gtLDgtL/gtJrgtY3gtJrgtLHgtL/gtK/gtL7gtKjgtL7gtJXgtL7gtKTgtY3gtKQg4LS14LW84LSj4LWN4LSj4LSZ4LWN4LSZ4LW+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuC0teC1vOC0o+C1jeC0oyDgtKrgtLDgtL/gtLfgtY3gtJXgtLDgtKPgtIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgtKbgtY3gtLDgtYHgtKQg4LSV4LWN4LSw4LSu4LWA4LSV4LSw4LSjIOC0n+C1iOC1vSDgtJXgtL7gtKPgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuC0h+C0t+C1jeC0n+C0vuC0qOC1geC0uOC1g+C0pCDgtKrgtLDgtL/gtLXgtbzgtKTgtY3gtKTgtKjgtIIg4LSq4LWN4LSw4LS14LW84LSk4LWN4LSk4LSo4LSV4LWN4LS34LSu4LSu4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4LSs4LS+4LSn4LSV4LSu4LS+4LSV4LWN4LSV4LWB4LSVIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuC0leC1jeC0sOC0ruC1gOC0leC0sOC0o+C0giDgtLjgtY3gtKXgtL/gtLDgtYDgtJXgtLDgtL/gtJXgtY3gtJXgtYHgtJUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLgtJrgtL/gtLIg4LS14LW84LSj4LWN4LSjIOC0leC1jeC0sOC0ruC1gOC0leC0sOC0o+C0pOC1jeC0pOC0v+C0qOC1jSDgtIgg4LSJ4LSq4LSV4LSw4LSj4LSk4LWN4LSk4LWGIOC0ieC0quC0r+C1i+C0l+C0sOC0ueC0v+C0pOC0ruC0vuC0leC1jeC0leC0vuC0qOC0vuC0leC1geC0gi4g4LSIIOC0teC1vOC0o+C1jeC0oyDgtJXgtY3gtLDgtK7gtYDgtJXgtLDgtKPgtIIg4LS44LWN4LSl4LS/4LSw4LWA4LSV4LSw4LS/4LSV4LWN4LSV4LWB4LSo4LWN4LSo4LSk4LS/4LSo4LWNIOC0tuC0sOC0vyDgtI7gtKjgtY3gtKjgtKTgtL/gtb0g4LSV4LWN4LSy4LS/4LSV4LWN4LSV4LWB4LSa4LWG4LSv4LWN4LSv4LWB4LSVLCDgtIXgtLLgtY3gtLLgtYbgtJngtY3gtJXgtL/gtb0gMTAg4LS44LWG4LSV4LWN4LSV4LW74LSh4LS/4LSo4LWNIOC0tuC1h+C0t+C0giDgtIgg4LSV4LWN4LSw4LSu4LWA4LSV4LSw4LSj4LSCIOC0quC1geC0qOC0g+C0leC1jeC0sOC0ruC1gOC0leC0sOC0v+C0leC1jeC0leC0quC1jeC0quC1huC0n+C1geC0gi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuC0rOC0vuC0seC1jeC0seC0seC0vyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLgtJrgtL7gtbzgtJzgtYHgtJrgtYbgtK/gtY3gtK/gtYHgtKjgtY3gtKgg4LS44LSu4LSv4LSk4LWN4LSk4LWNIOC0rOC0vuC0seC1jeC0seC0seC0vyDgtLjgtYfgtLXgtbwg4LSy4LSt4LWN4LSv4LSu4LSy4LWN4LSyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IuC0rOC0vuC0seC1jeC0seC0seC0vyDgtLjgtYfgtLXgtbwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLgtKrgtY3gtLDgtLXgtbzgtKTgtY3gtKTgtKjgtLXgtYHgtIIg4LSq4LS24LWN4LSa4LS+4LSk4LWN4LSk4LSyIOC0oeC0vuC0seC1jeC0seC0r+C1geC0giDgtJXgtYHgtLHgtK/gtY3igIzgtJXgtY3gtJXgtYHgtKjgtY3gtKjgtYEiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbW4tck1OL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKaW5kZXggMjYwYTU4MC4uZGU1YzAzNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tbi1yTU4vc3RyaW5ncy54bWwKQEAgLTE1OSw4ICsxNTksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCl0L7QvdGF0YvQsyDRhdCw0LDRhS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i0JDQttC70YvQvSDQs9C+0YDQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4t0LMg0YXQsNCw0YUuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDQsdCw0LnRhdCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLQpdCw0LzQs9C40LnQvSDRgdKv0q/Qu9C40LnQvSDQsdKv0YUg0L/RgNC+0LPRgNCw0LzRi9CzINCw0YDQuNC70LPQsNGB0LDQvSDQsdCw0LnQvdCwLiI8L3N0cmluZz4KQEAgLTIxMiwxNCArMjExLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i0JzQvtCx0LDQudC7INGF0L7RgtGB0L/QvtGC0YvQsyDRg9C90YLRgNCw0LDRgdCw0L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i0JzQvtCx0LDQudC7INGF0L7RgtGB0L/QvtGC0YvQsyDQsNGB0LDQsNGB0LDQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLQlNGN0LvQs9GN0YYg0LTQsNC80LbRg9GD0LvQsNC70YIg0LfQvtCz0YHRgdC+0L0uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i0JDQttC70YvQvSDQs9C+0YDQuNC80YvQsyDRg9C90YLRgNCw0LDRgdCw0L0uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i0JDQttC70YvQvSDQs9C+0YDQuNC80YvQsyDQsNGB0LDQsNGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLQkNC20LvRi9C9INCz0L7RgNC40LzRi9CzINGD0L3RgtGA0LDQsNGB0LDQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0JDQttC70YvQvSDQs9C+0YDQuNC80YvQsyDQsNGB0LDQsNGB0LDQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i0JTRjdC70LPRjdGG0LjQudC9INCz0Y3RgNGN0LvRgtGN0LvRgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHINC00LDRgtCwLdCzINGC0q/RgCDQt9C+0LPRgdC+0L7RgdC+0L0g0LHQsNC50L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHINC00LDRgtCwLdCzINGC0q/RgCDQt9C+0LPRgdC+0L7RgdC+0L0g0LHQsNC50L3QsCI8L3N0cmluZz4KQEAgLTI5NywxNSArMjkyLDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDQsNGI0LjQs9C70LDRgdCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDRhdGP0LfQs9Cw0LDRgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDQsNC90YXQsNCw0YDRg9GD0LvQs9CwIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLQkNC20LvRi9C9INCz0L7RgNC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i0KLQsNC90Ysg0YHQsNGP0YXQvdGLINC00Y3Qu9Cz0Y3RhiDRjdC90LQg0YXQsNGA0LDQs9C00LDRhSDQsdC+0LvQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i0JDQv9C/0LvQuNC60LXRiNC90Ysg0LzRjdC00Y3RjdC70Y3QuyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ItC00Y3Qu9Cz0Y3RhiDRgtC+0LPRgtC+0L7RhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLRhdCw0LnRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LdCzINGN0YXQu9Kv0q/Qu9C2INGH0LDQtNGB0LDQvdCz0q/QuS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0JjQu9Kv0q8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i0KLSr9Kv0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDQmNC70q/SryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i0KXRjdCy0YLRjdGNwqDRh9C40LPQu9GN0LvQtCDRhdGD0LLQsNCw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQkdC+0YHQvtC+INGH0LjQs9C70Y3Qu9C0INGF0YPQstCw0LDRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLQpdKv0YHRgdGN0L0g0YXRjdC70LHRjdGA0Y3RjdGAINGF0YPQstCw0LDRhSI8L3N0cmluZz4KQEAgLTM2OCw3ICszNjIsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQkdCw0YLQtdGA0LXQuSDRhdGN0LzQvdGN0LPRhyDQsNGB0LDQsNC70YLRgtCw0LkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i0JDQttC40LvQu9Cw0LPQsNCwINCx0L7Qu9C+0L0g0LTQsNC70LQg0LTQsNGC0LDQsyDQsdGD0YPRgNGD0YPQu9C90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+ItCR0LDRgtC10YDQtdC5INGF0Y3QvNC90Y3Qs9GH0LjQudCzINGD0L3RgtGA0LDQsNGFIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCa0L7QvdGC0LXQvdGC0YvQsyDQvdGD0YPRgdCw0L0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g0YLQsNC90Ysg0LTRjdC70LPRjdGGINC00Y3RjdGAINCz0LDRgNCz0LDRgdCw0L0g0LHSr9GFINC30q/QudC70LjQudC9INC30YPRgNCz0LjQudCzINCw0LLRhyDRjdGF0Y3Qu9C90Y0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCU0LDRhdC40LYg0q/QuyDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCR0q/Qs9C00LjQudCzINCw0YDQuNC70LPQsNGFIjwvc3RyaW5nPgpAQCAtNDEzLDggKzQwNiw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLQotCw0YLQs9Cw0LvQt9Cw0YUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQvdGMINC00YPRg9C90Ysg0LTQuNCw0LvQvtCzINGO0LwuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i0JDQvdGF0L3RiyDRhdGD0LLQuNC70LHQsNGA0YvQsyDRjdGA0LPSr9Kv0LvRjdC9INGF0LDQtNCz0LDQu9Cw0YXRi9CzINGF0q/RgdCy0Y3QuyDRhdKv0YDQvdGNINKv0q8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+ItCi0LAg06nTqdGA0LjQudC9INCw0LbQu9GL0L0g0L/RgNC+0YTQsNC50LvRi9CzINCw0YjQuNCz0LvQsNC2INCx0LDQudC90LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLQodC40YHRgtC10LzQuNC50L0gVUkg0KLQvtGF0LjRgNGD0YPQu9Cw0LPRhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+ItCX0LDQu9Cz0LDQsNGC0LDQuSDRgtGN0LbRjdGN0LvQuNC50L0g0YXRg9Cy0LjQudCzINGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CkBAIC00NTQsNCArNDQ2LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkJsdWV0b290aC3QsyDQsNGB0LDQsNGFINGD0YM/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCa0L7QvNC/0YzRjtGC0LXRgNC40LnQvSDQs9Cw0YDQsNCwINGC0LDQsdC70LXRgtCw0LQg0YXQvtC70LHQvtGF0YvQvSDRgtGD0LvQtCDRjdGF0LvRjdGN0LQgQmx1ZXRvb3RoLdCzINCw0YHQsNCw0L3QsCDRg9GDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCQ0YHQsNCw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g0LzRjdC00Y3Qs9C00Y3Qu9C0INGF0Y3RgNGN0LPQttKv0q/Qu9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLQrdC90Y0g0LDQv9C/LdC9INCx0q/RhSDQvNGN0LTRjdCz0LTRjdC70LQg0YXRjdGA0Y3Qs9C20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLQkdC70L7QutC70L7RgdC+0L0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQkdCw0LPQsCDQsNGHINGF0L7Qu9Cx0L7Qs9C00L7Qu9GC0L7QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLQrdC90LPQuNC50L0g0LDRhyDRhdC+0LvQsdC+0LPQtNC+0LvRgtC+0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i06jQvdC006nRgCDQsNGHINGF0L7Qu9Cx0L7Qs9C00L7Qu9GC0L7QuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+ItCv0LDRgNCw0LvRgtCw0Lkg0LDRhyDRhdC+0LvQsdC+0LPQtNC+0LvRgtC+0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItCt0LTQs9GN0Y3RgCDQvNGN0LTRjdCz0LTQu9C40LnQsyDRhdGN0LfRjdGNINGHINGF0LDRgNGD0YPQu9Cw0YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0JzRjdC00Y3Qs9C00LvQuNC50LMg0LbQsNCz0YHQsNCw0LvRgtGL0L0g0LTQvtC+0LQg0YXRjdGB0Y3Qs9GCINC00YPRg9Cz0q/QuSDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLQrdC00LPRjdGN0YAg0LzRjdC00Y3Qs9C00LvQuNC50LMg0LTRg9GD0LPSr9C5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+ItCc0Y3QtNGN0LPQtNC70LjQudCzINC20LDQs9GB0LDQsNC70YLRi9C9INGN0YXRjdC90LQg0LTRg9GD0YLQsNC5INGF0LDRgNGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0JTRjdC70LPRjdGG0Y3QvdC0INGP0LDRgNCw0LvRgtCw0LnQs9Cw0LDRgCDQtNGD0YPRgtCw0Lkg0LPQsNGA0LPQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLQkdGD0YHQsNC0INGC0L7RhdC40YDQs9C+0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQlNGD0YPRgdGB0LDQvSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+ItCl0Y3QstC40LnQvSDTqdC90LPTqSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLQqNOp0L3QuNC50L0g06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItOo0LPTqdCz0LTQvNOp0Lsg06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLSrtC7INC80Y3QtNGN0LPQtNGN0YUg06nQvdCz06kiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i06jQvdCz06nQvdC40Lkg06nTqdGA0YfQu9Op0LvRgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCi0q/RgNCz0Y3QvSDRgtC+0YXQuNGA0LPQvtC+0L3RiyDRhdGN0YHQs9C40LnQsyDRhdCw0YDRg9GD0LvQsNGFIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLTqNCz06nQs9C00LzTqdC7INOp06nRgNGH0LvTqdC70YLQuNC50LMg0LjQtNGN0LLRhdC20q/Sr9C70Y3RhSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCl0Y3RgNGN0LPQttKv0q/Qu9GN0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i0KLQvtGF0LjRgNCz0L7QvtCzINCx0LDRgtCw0LvQs9Cw0LDQttGD0YPQu9Cw0YUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLQl9Cw0YDQuNC8INOp0L3Qs9Op0L3QuNC5INGC0L7RhdC40YDQs9C+0L4g0Y3QvdGNINGC06nRhdOp06nRgNOp0LzQttC40LnQsyDQsNGI0LjQs9C70LDRhSDQsdC+0LvQvtC80LbQs9Kv0Lkg0LHQvtC70LPQvtC2INCx0L7Qu9C30L7RiNCz0q/QuS4gT0sg0YLQvtCy0YfQu9GD0YPRgNGL0LMg0LTQsNGA0LYg0Y3QtNCz0Y3RjdGAINOp0L3Qs9Op0L3QuNC5INGC0L7RhdC40YDQs9C+0L7QsyDQt9Op0LLRiNOp06nRgNOp0YXQs9Kv0Lkg0LHQvtC7INGN0L3RjSDRgtC+0YXQuNGA0LPQvtC+INC90YwgMTAg0YHQtdC60YPQvdC00YvQvSDQtNCw0YDQsNCwINGI0LjQvdGN0YfQu9GN0LPQtNGN0YUg0LHQvtC70L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+ItCi0Y3QttGN0Y3QuyAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLQptGN0L3RjdCz0LvRjdGFINKv0LXQtCDRgtGN0LbRjdGN0Lsg0YXRjdC80L3RjdCz0Ycg0LDQttC40LvQu9Cw0YXQs9Kv0LkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i0KLRjdC20Y3RjdC7INGF0Y3QvNC90Y3Qs9GHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i0JPSr9C50YbRjdGC0LPRjdC7INCx0L7Qu9C+0L0g0LTRjdCy0YHQs9GN0YDQuNC50L0g0LTQsNGC0LDQsyDQsdCw0LPQsNGB0LPQsNC00LDQsyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1tci1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAppbmRleCAwYzdmNzk1Li44MGRjMTJlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1yLXJJTi9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4KSw4KS/4KSC4KSX4KSwIOCkruClguCklS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i4KSV4KS+4KSw4KWN4KSvIOCkruCli+CkoSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCkoeCkv+CkuOCkruCkv+CkuCDgpJXgpLDgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpKHgpL/gpLjgpK7gpL/gpLgg4KSV4KWH4KSy4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuCkheCksuClgOCkleCkoeClgOCksiDgpLjgpLDgpY3gpLUg4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCkoeCkv+CkuOCkruCkv+CkuCDgpJ3gpL7gpLLgpYcuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLgpK7gpYvgpKzgpL7gpIjgpLIg4KS54KWJ4KSf4KS44KWN4KSq4KWJ4KSfIOCkrOCkguCkpiDgpJXgpYfgpLLgpL4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i4KSu4KWL4KSs4KS+4KSI4KSyIOCkueClieCkn+CkuOCljeCkquClieCknyDgpJrgpL7gpLLgpYIg4KSV4KWH4KSy4KS+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuCkuOCljeCkleCljeCksOClgOCkqCDgpJXgpL7gpLjgpY3gpJ8g4KSV4KSw4KSj4KWHIOCkpeCkvuCkguCkrOCksuClhy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkrOCkguCkpi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkmuCkvuCksuClgi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkrOCkguCkpiDgpJXgpYfgpLLgpL4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IuCkleCkvuCksOCljeCkryDgpK7gpYvgpKEg4KSa4KS+4KSy4KWCIOCkleClh+CksuCkvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkmuCkruCklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOCkoeClh+Ckn+CkvuCkuCDgpLXgpL/gpLDgpL7gpK4g4KSm4KS/4KSy4KS+IOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOCkoeClh+Ckn+CkvuCkuCDgpLXgpL/gpLDgpL7gpK4g4KSm4KS/4KSy4KS+IOCkhuCkueClhyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDgpLXgpL7gpKrgpLDgpLLgpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgpK7gpLDgpY3gpK/gpL7gpKbgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4KSa4KWH4KSk4KS+4KS14KSj4KWAIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuCkhuCkquCksuCljeCkr+CkviDgpIXgpLLgpYDgpJXgpKHgpYDgpLIg4KS44KWN4KSV4KWN4KSw4KWA4KSoIOCkr+Clh+CkpeClhyDgpKbgpL/gpLjgpKTgpL7gpKQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJcg4KSu4KS+4KS54KS/4KSk4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4KS44KWN4oCN4KSV4KWN4KSw4KWA4KSoIOCkquCkv+CkqCDgpJXgpLDgpKPgpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4KS24KWL4KSn4KS+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOCko+ClhyDgpLbgpJXgpY3gpK8g4KSd4KS+4KSy4KWHIOCkqOCkvuCkueClgC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4KSF4KSn4KS/4KSVIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuCkh+CkpOCkv+CkueCkvuCkuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4KSG4KSj4KSW4KWAIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4KSV4KWN4KS34KWI4KSk4KS/4KScIOCkteCkv+CkreCkvuCknOCkv+CkpCDgpJXgpLDgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgpIXgpKjgpYHgpLLgpILgpKwg4KS14KS/4KSt4KS+4KSc4KS/4KSkIOCkleCksOCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgpLjgpL7gpKjgpYHgpJXgpYLgpLIg4KS14KS/4KSt4KS+4KSc4KS/4KSkIOCkleCksOCkviI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgpKzgpYXgpJ/gpLDgpYAg4KSs4KSa4KSk4KSV4KSw4KWN4KSk4KS+IOCkmuCkvuCksuClgiDgpIbgpLngpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4KSV4KS+4KSw4KWN4KSv4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkhuCko+CkvyDgpKrgpL7gpLDgpY3gpLbgpY3gpLXgpK3gpYLgpK7gpYAg4KSh4KWH4KSf4KS+IOCkleCkruClgCDgpJXgpLDgpKTgpYciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuCkrOClheCkn+CksOClgCDgpKzgpJrgpKTgpJXgpLDgpY3gpKTgpL4g4KSs4KSC4KSmIOCkleCksOCkviI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgpLLgpKrgpLXgpL/gpLLgpYfgpLLgpYAg4KS44KS+4KSu4KSX4KWN4KSw4KWAIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOCkhuCkquCksuCljeKAjeCkr+CkviDgpLjgpY3igI3gpJXgpY3gpLDgpYDgpKjgpLXgpLAg4KSq4KWN4KSw4KSm4KSw4KWN4KS24KS/4KSkIOCkueCli+Cko+CkvuCksOClgCDgpKrgpY3gpLDgpKTgpY3igI3gpK/gpYfgpJUg4KSX4KWL4KS34KWN4oCN4KSfIOCkleClheCkquCljeKAjeCkmuCksCDgpJXgpLDgpKPgpYcg4KSq4KWN4KSw4KS+4KSw4KSC4KStIOCkleCksOClh+Cksi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4KSq4KWB4KSo4KWN4KS54KS+IOCkpuCksOCljeCktuCkteClgiDgpKjgpJXgpL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4KS44KSw4KWN4KS1IOCkuOCkvuCkqyDgpJXgpLDgpL4iPC9zdHJpbmc+CkBAIC00MTUsMTMgKzQwOCwxMiBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4KSo4KSV4KS+4KSwIOCkpuCljeCkr+CkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkueCkviDgpLXgpY3gpLngpYngpLLgpY3gpK/gpYLgpK4g4KS44KSC4KS14KS+4KSmIOCkhuCkueClhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCkruClguCksyDgpKrgpYHgpKjgpLDgpY3gpLjgpILgpJrgpK/gpL/gpKQg4KSV4KSw4KSj4KWN4KSv4KS+4KS44KS+4KSg4KWAIOCkuOCljeCkquCksOCljeCktiDgpJXgpLDgpL4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuCkhuCkquCkoyDgpIbgpKrgpLLgpYcg4KSV4KS+4KSw4KWN4KSvIOCkquCljeCksOCli+Ckq+CkvuCkiOCksiDgpLXgpL7gpKrgpLDgpKQg4KSG4KS54KS+4KSkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4KS44KS/4KS44KWN4KSf4KWA4KSuIFVJIOCkn+CljeCkr+ClguCkqOCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuCkj+CkruCljeCkrOClh+CkoeClh+CkoSDgpKzgpYXgpJ/gpLDgpYAg4KSf4KSV4KWN4KSV4KWH4KS14KS+4KSw4KWAIOCkpuCksOCljeCktuCkteCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlX3N1bW1hcnkiIG1zZ2lkPSIzMjE1MDI1Nzc1NTc2Nzg2MDM3Ij4i4KSa4KS+4KSw4KWN4KScIOCkueCli+CkpCDgpKjgpLjgpKTgpL7gpKjgpL4g4KS44KWN4KSf4KWH4KSf4KS4IOCkrOCkvuCksCDgpJrgpL/gpKjgpY3gpLngpL7gpK7gpKfgpY3igI3gpK/gpYcg4KSs4KWF4KSf4KSw4KWAIOCkquCkvuCkpOCks+ClgCDgpJ/gpJXgpY3gpJXgpYfgpLXgpL7gpLDgpYAg4KSm4KSw4KWN4KS24KS14KS+Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3MiIG1zZ2lkPSIxMDA0Mjk5ODE5MTcyNTQyOCI+IuCkpuClg+CkpCDgpLjgpYfgpJ/gpL/gpILgpJfgpY3gpJwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5ncyIgbXNnaWQ9IjEwMDQyOTk4MTkxNzI1NDI4Ij4i4KSm4KWN4KSw4KWB4KSkIOCkuOClh+Ckn+Ckv+CkguCkl+CljeCknCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXIiIG1zZ2lkPSI0ODc3NjQ1NDc2OTU5MzI0NzYwIj4i4KS44KWN4KSf4KWH4KSf4KS4IOCkrOCkvuCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im92ZXJ2aWV3IiBtc2dpZD0iNDAxODYwMjAxMzg5NTkyNjk1NiI+IuCkteCkv+CkueCkguCkl+CkvuCkteCksuCli+CkleCkqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRlbW9fbW9kZSIgbXNnaWQ9IjIzODkxNjMwMTg1MzM1MTQ2MTkiPiLgpKHgpYfgpK7gpYsg4KSu4KWL4KShIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgpKzgpY3gpLLgpYLgpJ/gpYHgpKUg4KS44KWB4KSw4KWCIOCkleCksOCkvuCkr+CkmuClhz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KSG4KSq4KSy4KS+IOCkleClgOCkrOCli+CksOCljeCkoSDgpIbgpKrgpLLgpY3gpK/gpL4g4KSf4KWF4KSs4KWN4KSy4KWH4KSf4KS44KS5IOCkleCkqOClh+CkleCljeCknyDgpJXgpLDgpKPgpY3gpK/gpL7gpLjgpL7gpKDgpYAsIOCkhuCkquCksuCljeCkr+CkvuCksuCkviDgpKrgpY3gpLDgpKXgpK4g4KSs4KWN4KSy4KWC4KSf4KWB4KSlIOCkmuCkvuCksuClgiDgpJXgpLDgpKPgpYcg4KSG4KS14KS24KWN4KSv4KSVIOCkhuCkueClhy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgpJrgpL7gpLLgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkuOClguCkmuCkqOCkvuCkguCkteCksCDgpLLgpL7gpJfgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4KSv4KS+IOCkheClheCkquCkruCkp+ClgOCksiDgpLjgpLDgpY3gpLUg4KS44KWC4KSa4KSo4KS+4KSC4KS14KSwIOCksuCkvuCkl+ClgiDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4KSF4KS14KSw4KWL4KSn4KS/4KSkIOCkleClh+CksuClhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCkleCkruClgCDgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgpLjgpLDgpY3gpLXgpL7gpKfgpL/gpJUg4KSu4KS54KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4KSk4KWN4KS14KSw4KS/4KSkIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4KSv4KS+IOCkuOClguCkmuCkqOCkviDgpJXgpKfgpYDgpLngpYAg4KSm4KSw4KWN4KS24KS14KWCIOCkqOCkleCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLgpLjgpYLgpJrgpKjgpL4g4KS44KWC4KSa4KWA4KSa4KWN4KSv4KS+IOCkpOCks+CkvuCktuClgCDgpLbgpL7gpILgpKTgpKrgpKPgpYcg4KSm4KSw4KWN4KS24KS14KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLgpK/gpL4g4KS44KWC4KSa4KSo4KS+IOCktuCkvuCkguCkpOCkquCko+ClhyDgpKbgpLDgpY3gpLbgpLXgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCkuOClguCkmuCkqOCkviDgpLjgpYLgpJrgpYDgpJrgpY3gpK/gpL4g4KS24KWA4KSw4KWN4KS34KS44KWN4KSl4KS+4KSo4KWAIOCkpuCksOCljeCktuCkteCkviDgpIbgpKPgpL8g4KSn4KWN4KS14KSo4KWAIOCkmuCkvuCksuClgiDgpJXgpLDgpL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4KS44KWN4KSV4KWN4KSw4KWA4KSo4KS14KSwIOCkoeCli+CkleCkvuCkteClguCkqCDgpKrgpLngpL4g4KSG4KSj4KS/IOCkp+CljeCkteCkqOClgCDgpJrgpL7gpLLgpYIg4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgpIXgpKfgpL/gpJUg4KS44KWH4KSf4KS/4KSC4KSX4KWN4KScIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4KSq4KWC4KSw4KWN4KSjIOCkneCkvuCksuClhyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCkuOCkvuCkruCkvuCkqOCljeCkryDgpLDgpILgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4KSw4KS+4KSk4KWN4KSw4KWA4KSa4KWHIOCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KS44KS+4KSo4KWB4KSV4KWC4KSyIOCksOCkguCklyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCkheCknOCljeCknuCkvuCkpCDgpLDgpILgpJciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4KSw4KSC4KSXIOCkuOClgeCkp+CkvuCksOCko+CkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCkpuCljeCksOClgeCkpCDgpLjgpYfgpJ/gpL/gpILgpJfgpY3gpJwg4KSf4KS+4KSH4KSyIOCkpuCksOCljeCktuCkteCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KS44KS+4KSo4KWB4KSV4KWC4KSyIOCksOClguCkquCkvuCkguCkpOCksOCkoyDgpLjgpJXgpY3gpLfgpK4g4KSV4KSw4KS+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4KSy4KS+4KSX4KWCIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgpLjgpYfgpJ/gpL/gpILgpJfgpY3gpJzgpJrgpYAg4KSq4KWB4KS34KWN4KSf4KWAIOCkleCksOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCkleCkvuCkueClgCDgpLDgpILgpJcg4KS44KWH4KSf4KS/4KSC4KSX4KWN4KScIOCkr+CkviDgpKHgpL/gpLXgpY3gpLngpL7gpIfgpLjgpLLgpL4g4KSo4KS/4KSw4KWB4KSq4KSv4KWL4KSX4KWAIOCkleCksOClgiDgpLbgpJXgpKTgpL7gpKQuIOCkr+CkviDgpLDgpILgpJcg4KS44KWH4KSf4KS/4KSC4KSX4KWN4KSc4KSa4KWAIOCkquClgeCkt+CljeCkn+ClgCDgpJXgpLDgpKPgpY3igI3gpK/gpL7gpLjgpL7gpKDgpYAg4KSg4KWA4KSVIOCkhuCkueClhyDgpKbgpL7gpKzgpL4g4KSF4KSo4KWN4KSv4KSl4KS+IOCkr+CkviDgpLjgpYfgpJ/gpL/gpILgpJfgpY3gpJwgMTAg4KS44KWH4KSV4KSC4KSm4KS+4KSC4KSo4KSC4KSk4KSwIOCksOClgOCkuOClh+CknyDgpLngpYvgpKTgpYDgpLIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLgpKzgpYXgpJ/gpLDgpYAgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i4KSa4KS+4KSw4KWN4KScIOCkleCksOCkpOCkvuCkqOCkviDgpKzgpYXgpJ/gpLDgpYAg4KSs4KSa4KSk4KSV4KSw4KWN4KSk4KS+IOCkieCkquCksuCkrOCljeCkpyDgpKjgpL7gpLngpYAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i4KSs4KWF4KSf4KSw4KWAIOCkrOCkmuCkpOCkleCksOCljeCkpOCkviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuCkleCkvuCksOCljeCkr+CkquCljeCksOCkpuCksOCljeCktuCkqCDgpIbgpKPgpL8g4KSq4KS+4KSw4KWN4KS24KWN4KS14KSt4KWC4KSu4KWAIOCkoeClh+Ckn+CkviDgpJXgpK7gpYAg4KSV4KSw4KSk4KWHIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW1zLXJNWS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCmluZGV4IDk3NzJhM2MuLmVjNGIyOGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXMtck1ZL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJQZW5kZXJpbmcgc2VueWFwLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJNb2Qga2VyamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IktldGVwaWthbiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBkaXRvbGFrLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlNlbXVhIGFwbGlrYXNpIHRlcmJhaGFydSBkaWtldGVwaWthbi4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IlRlbXBhdCBsaXB1dGFuIG11ZGFoIGFsaWggYmVyZ2VyYWsgZGltYXRpa2FuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlRlbXBhdCBsaXB1dGFuIG11ZGFoIGFsaWggYmVyZ2VyYWsgZGloaWR1cGthbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJQZW5naGFudGFyYW4gc2tyaW4gZGloZW50aWthbi4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJNb2Qga2VyamEgbWF0aS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNb2Qga2VyamEgaGlkdXAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTW9kIGtlcmphIGRpbWF0aWthbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTW9kIGtlcmphIGRpaGlkdXBrYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IktlY2VyYWhhbiBwYXBhcmFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iRGF0YSAyRy0zRyBkaWplZGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiJEYXRhIDRHIGRpamVkYSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBkaWd1bmFrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBoYWQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IkFtYXJhbiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJNb2Qga2VyamEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iU2tyaW4gdGVyYmFydSBhbmRhIHRlcnBhcGFyIGRpIHNpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJNYWtsdW1hdCBBcGxpa2FzaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+InBlbnllbWF0YW4gc2tyaW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iY2FyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iVGlkYWsgZGFwYXQgbWVtdWxha2FuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTGFnaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJTZWphcmFoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gTGFnaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iTWVuZGF0YXIgVGVycGlzYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJNZW5lZ2FrIFRlcnBpc2FoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlRlcnN1YWkgVGVycGlzYWgiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUGVuamltYXQgYmF0ZXJpIGRpaGlkdXBrYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iTWVuZ3VyYW5na2FuIHByZXN0YXNpIGRhbiBkYXRhIGxhdGFyIGJlbGFrYW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJNYXRpa2FuIHBlbmppbWF0IGJhdGVyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJLYW5kdW5nYW4gdGVyc2VtYnVueWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYWthbiBtdWxhIG1lbmdhYmFkaWthbiBzZW11YSB5YW5nIGRpcGFwYXJrYW4gcGFkYSBza3JpbiBhbmRhLi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iSmFuZ2FuIHR1bmp1a2thbiBsYWdpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Iktvc29uZ2thbiBzZW11YSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iVG9sYWsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBpYWxhaCBkaWFsb2cga2VsYW50YW5nYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJTZW50dWggdW50dWsgbWVtdWxpaGthbiB5YW5nIGFzYWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkFuZGEgc2VkYW5nIG1lbmdndW5ha2FuIHByb2ZpbCBrZXJqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlBlbmFsYSBVSSBTaXN0ZW0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJUdW5qdWtrYW4gcGVyYXR1c2FuIGJhdGVyaSB0ZXJiZW5hbSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iSGlkdXBrYW4gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJVbnR1ayBtZW55YW1idW5na2FuIHBhcGFuIGtla3VuY2kgYW5kYSBkZW5nYW4gdGFibGV0LCBhbmRhIHBlcmx1IG1lbmdoaWR1cGthbiBCbHVldG9vdGggdGVybGViaWggZGFodWx1LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkhpZHVwa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iR3VuYWthbiB1bnR1ayBwZW1iZXJpdGFodWFuIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Ikd1bmFrYW4gdW50dWsgc2VtdWEgcGVtYmVyaXRhaHVhbiBkYXJpcGFkYSBhcGwgaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkRpc2VrYXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJLZXBlbnRpbmdhbiByZW5kYWgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iS2VwZW50aW5nYW4gYmlhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iS2VwZW50aW5nYW4gdGluZ2dpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iS2VwZW50aW5nYW4gc2VnZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJKYW5nYW4gc2VrYWxpLWthbGkgdHVuanVra2FuIHBlbWJlcml0YWh1YW4gaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlR1bmp1a2thbiBwYWRhIGJhaGFnaWFuIGJhd2FoIHNlbmFyYWkgcGVtYmVyaXRhaHVhbiBzZWNhcmEgc2VueWFwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJUdW5qdWtrYW4gcGVtYmVyaXRhaHVhbiBpbmkgc2VjYXJhIHNlbnlhcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iVHVuanVra2FuIHBhZGEgYmFoYWdpYW4gYXRhcyBzZW5hcmFpIHBlbWJlcml0YWh1YW4gZGFuIGJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkludGFpIHBhZGEgc2tyaW4gZGFuIGJ1bnlpa2FuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJMYWdpIHRldGFwYW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJTZWxlc2FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iV2FybmEgYmlhc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iV2FybmEgbWFsYW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ildhcm5hIHRlcnN1YWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJXYXJuYSB0aWRhayBkaWtldGFodWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUGVuZ3ViYWhzdWFpYW4gd2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJUdW5qdWtrYW4ganViaW4gVGV0YXBhbiBQYW50YXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkRheWFrYW4gamVsbWFhbiB0ZXJzdWFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iR3VuYWthbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJTYWhrYW4gdGV0YXBhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlNlc2V0ZW5nYWggdGV0YXBhbiB3YXJuYSBib2xlaCBtZW5qYWRpa2FuIHBlcmFudGkgaW5pIHRpZGFrIGRhcGF0IGRpZ3VuYWthbi4gS2xpayBPSyB1bnR1ayBtZW5nZXNhaGthbiB0ZXRhcGFuIHdhcm5hIGluaSwgamlrYSB0aWRhaywgdGV0YXBhbiBpbmkgYWthbiBkaXRldGFwa2FuIHNlbXVsYSBzZWxlcGFzIDEwIHNhYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXRlcmkgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iUGVuamltYXQgQmF0ZXJpIHRpZGFrIHRlcnNlZGlhIHNlbWFzYSBtZW5nZWNhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJQZW5qaW1hdCBCYXRlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJNZW5ndXJhbmdrYW4gcHJlc3Rhc2kgZGFuIGRhdGEgbGF0YXIgYmVsYWthbmciPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbXktck1NL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKaW5kZXggMmIxYWNmYi4uMjU3ZGQ0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1teS1yTU0vc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuGAluGAr+GAlOGAuuGAuOGAmeGAvOGAiuGAuuGAnuGAtuGAleGAreGAkOGAuuGAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLhgKHhgJzhgK/hgJXhgLog4YCZ4YCv4YCS4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7hgIDhgK3hgK8g4YCV4YCa4YC64YCc4YCt4YCv4YCA4YC64YCb4YCU4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDhgJHhgK/hgJDhgLrhgJHhgKzhgLjhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLhgJnhgIDhgLzhgKzhgJ7hgLHhgLjhgJnhgK7hgIAg4YCh4YCV4YCc4YCu4YCA4YCx4YC44YCb4YC+4YCE4YC64YC44YCZ4YC74YCs4YC44YCh4YCs4YC44YCc4YCv4YC24YC4IOGAluGAmuGAuuGAkeGAr+GAkOGAuuGAleGAvOGAruGAuOGAleGAq+GAleGAvOGAruGBiyI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4YCZ4YCt4YCv4YCY4YCt4YCv4YCE4YC64YC4IOGAn+GAseGArOGAt+GAheGAleGAseGAq+GAtyDhgJXhgK3hgJDhgLrhgJHhgKzhgLjhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLhgJnhgK3hgK/hgJjhgK3hgK/hgIThgLrhgLgg4YCf4YCx4YCs4YC34YCF4YCV4YCx4YCr4YC3IOGAluGAveGAhOGAt+GAuuGAkeGArOGAuOGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuGAmeGAu+GAgOGAuuGAlOGAvuGArOGAleGAvOGAhOGAuiDhgIDhgKzhgIXhgLrhgJDhgIThgLog4YCc4YCv4YCV4YC64YCZ4YC+4YCvIOGAm+GAleGAuuGAnOGAreGAr+GAgOGAuuGAleGAvOGAruGBiyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuGAoeGAnOGAr+GAleGAuiDhgJnhgK/hgJLhgLrhgIDhgK3hgK8g4YCV4YCt4YCQ4YC64YCR4YCs4YC44YCV4YCr4YCe4YCK4YC64YGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4YCh4YCc4YCv4YCV4YC6IOGAmeGAr+GAkuGAuuGAgOGAreGAryDhgJbhgL3hgIThgLfhgLrhgJHhgKzhgLjhgJXhgKvhgJ7hgIrhgLrhgYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLhgKHhgJzhgK/hgJXhgLog4YCZ4YCv4YCS4YC64YCA4YCt4YCvIOGAleGAreGAkOGAuuGAkeGArOGAuOGAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLhgKHhgJzhgK/hgJXhgLog4YCZ4YCv4YCS4YC64YCA4YCt4YCvIOGAluGAveGAhOGAt+GAuuGAkeGArOGAuOGAleGAq+GAnuGAiuGAuuGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLhgJDhgLHhgKzhgIDhgLrhgJXhgJnhgL7hgK/hgIDhgK3hgK8g4YCV4YC84YCb4YCU4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cg4YCS4YCx4YCQ4YCsIOGAgeGAseGAkOGAueGAkOGAm+GAleGAuuGAkOGAlOGAt+GAuuGAnuGAiuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIGRhdGEg4YCB4YCx4YCQ4YC54YCQ4YCb4YCV4YC64YCQ4YCU4YC34YC64YCe4YCK4YC6Ijwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IOGAnuGAr+GAtuGAuOGAkeGArOGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOGAgOGAlOGAt+GAuuGAnuGAkOGAuuGAgeGAu+GAgOGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDhgJ7hgJDhgK3hgJXhgLHhgLjhgIHhgLvhgIDhgLoiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IuGAoeGAnOGAr+GAleGAuiDhgJnhgK/hgJLhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i4YCe4YCE4YC64YGPIOGAmeGAgOGAvOGArOGAmeGAruGAgCDhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLrhgJnhgLvhgKzhgLgg4YCS4YCu4YCZ4YC+4YCsIOGAleGAseGAq+GAuuGAnOGArOGAgOGAvOGAmeGAiuGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IuGAoeGAleGAnOGAruGAgOGAseGAuOGAm+GAvuGAhOGAuuGAuCDhgKHhgIThgLrhgJbhgK3hgK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLhgJnhgLvhgIDhgLrhgJThgL7hgKzhgJXhgLzhgIThgLog4YCV4YCE4YC64YCR4YCt4YCv4YC44YCZ4YC+4YCvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuGAm+GAvuGArOGAluGAveGAseGAm+GAlOGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOGAgOGAreGAryDhgJnhgIXhgJThgK3hgK/hgIThgLrhgJXhgKvhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4YCU4YCx4YCs4YCA4YC64YCR4YCV4YC6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuGAmeGAvuGAkOGAuuGAkOGAmeGAuuGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4YCU4YCx4YCs4YCA4YC64YCR4YCV4YC6IDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDhgIHhgK8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuGAm+GAseGAleGAvOGAhOGAuuGAiuGAriDhgJXhgK3hgK/hgIThgLrhgLjhgJnhgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLhgJLhgLHhgKvhgIThgLrhgJzhgK3hgK/hgIDhgLrhgJXhgK3hgK/hgIThgLrhgLjhgJnhgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4YCF4YCt4YCQ4YC64YCA4YC84YCt4YCv4YCA4YC6IOGAleGAreGAr+GAhOGAuuGAuOGAmeGAiuGAuiI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLhgJjhgIDhgLrhgJHhgJvhgK4g4YCB4YC74YC94YCx4YCQ4YCs4YCe4YCwIOGAluGAveGAhOGAt+GAuuGAkeGArOGAuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLhgJzhgK/hgJXhgLrhgIDhgK3hgK/hgIThgLrhgJnhgL7hgK/hgIDhgK3hgK8g4YCc4YC74YC+4YCx4YCs4YC34YCB4YC74YCc4YC74YCA4YC6IOGAlOGAseGArOGAgOGAuuGAgeGAtiDhgJLhgLHhgJDhgKzhgIDhgK3hgK8g4YCA4YCU4YC34YC64YCe4YCQ4YC64YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLhgJjhgIDhgLrhgJHhgJvhgK4g4YCB4YC74YC94YCx4YCQ4YCs4YCZ4YC+4YCv4YCA4YCt4YCvIOGAleGAreGAkOGAuuGAkeGArOGAuOGAm+GAlOGAuiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLhgKHhgIDhgLzhgLHhgKzhgIThgLrhgLjhgKHhgJvhgKzhgJnhgLvhgKzhgLgg4YCd4YC+4YCA4YC64YCR4YCs4YC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOGAgCDhgJ7hgIThgLrhgY8g4YCZ4YC74YCA4YC64YCU4YC+4YCs4YCV4YC84YCE4YC6IOGAleGAseGAq+GAuuGAmeGAvuGArCDhgJXhgLzhgJ7hgJHhgKzhgLjhgJ7hgIrhgLfhgLog4YCh4YCb4YCs4YCQ4YCt4YCv4YCE4YC64YC44YCA4YCt4YCvIOGAheGAkOGAhOGAuiDhgJbhgJnhgLrhgLjhgJrhgLDhgJnhgIrhgLrhgYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4YCU4YCx4YCs4YCA4YC64YCR4YCV4YC6IOGAmeGAleGAvOGAleGAq+GAlOGAvuGAhOGAt+GAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLhgKHhgKzhgLjhgJzhgK/hgLbhgLgg4YCb4YC+4YCE4YC64YC44YCc4YCE4YC64YC44YCb4YCU4YC6Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLhgIThgLzhgIThgLrhgLjhgJXhgJrhgLrhgJ7hgIrhgLoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDhgJ7hgIrhgLog4YCh4YCe4YC24YCS4YCt4YCv4YCE4YC64YCa4YCs4YCc4YCx4YCs4YC34YCB4YC64YCW4YC84YCF4YC64YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i4YCZ4YCw4YCb4YCE4YC64YC44YCh4YCs4YC44YCV4YC84YCU4YC64YCc4YCK4YC64YCe4YCt4YCZ4YC64YC44YCG4YCK4YC64YC44YCb4YCU4YC6IOGAkeGAreGAleGAq+GBiyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4i4YGKICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuGAnuGAhOGAuuGAnuGAiuGAuiDhgKHhgJzhgK/hgJXhgLrhgJXhgJvhgK3hgK/hgJbhgK3hgK/hgIThgLrhgLjhgKHhgKzhgLgg4YCe4YCv4YC24YC44YCU4YCx4YCe4YCK4YC6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4YCF4YCU4YCF4YC6IFVJIOGAluGAmeGAuuGAuOGAheGAgOGAuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuGAmeGAvOGAr+GAkOGAuuGAkeGArOGAuOGAnuGAiuGAt+GAuiDhgJjhgJDhgLrhgJHhgJvhgK4g4YCb4YCs4YCB4YCt4YCv4YCE4YC64YCU4YC+4YCv4YCU4YC64YC44YCA4YCt4YCvIOGAleGAvOGAleGAqyI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4YCY4YCc4YCw4YC44YCQ4YCv4YCe4YC6IOGAluGAveGAhOGAt+GAuuGAm+GAmeGAnOGArOGAuOGBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLhgIDhgK7hgLjhgJjhgK/hgJDhgLrhgIDhgK3hgK8g4YCQ4YCV4YC64YCY4YCc4YCA4YC64YCU4YC+4YCE4YC34YC6IOGAgeGAu+GAreGAkOGAuuGAhuGAgOGAuuGAm+GAlOGAuuGBiiDhgJXhgJnhgJHhgKbhgLjhgIXhgL3hgKwg4YCY4YCc4YCw4YC44YCQ4YCv4YCe4YC64YCA4YCt4YCvIOGAluGAveGAhOGAt+GAuuGAleGAq+GBiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IuGAluGAveGAhOGAt+GAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IuGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuiA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g4YCB4YCv4YCe4YCt4YCv4YC34YCe4YCA4YC64YCb4YCx4YCs4YCA4YC64YCF4YCx4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4YCk4YCh4YCA4YC64YCV4YC64YCZ4YC+IOGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuOGAoeGArOGAuOGAnOGAr+GAtuGAuOGAnuGAreGAr+GAtyDhgJ7hgIDhgLrhgJvhgLHhgKzhgIDhgLrhgIXhgLHhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i4YCV4YCt4YCQ4YC64YCG4YCt4YCv4YC34YCR4YCs4YC44YCe4YCK4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i4YCh4YCU4YCK4YC64YC44YCE4YCa4YC64YCe4YCsIOGAoeGAm+GAseGAuOGAleGAq+GAnuGAiuGAuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLhgJ7hgKzhgJnhgJThgLrhgJ7hgKwg4YCh4YCb4YCx4YC44YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuGAoeGAnOGAveGAlOGAuuGAoeGAm+GAseGAuOGAleGAq+GAnuGAiuGAuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuGAoeGAm+GAseGAuOGAkOGAgOGAvOGAruGAuCDhgKHhgJvhgLHhgLjhgJXhgKvhgJ7hgIrhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuGApOGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuOGAgOGAreGAryDhgJjhgJrhgLrhgJDhgLHhgKzhgLfhgJnhgL7hgJnhgJXhgLzhgJXhgKvhgJThgL7hgIThgLfhgLoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i4YCe4YCQ4YCt4YCV4YCx4YC44YCB4YC74YCA4YC64YCF4YCs4YCb4YCE4YC64YC44YGPIOGAoeGAseGArOGAgOGAuuGAhuGAr+GAtuGAuOGAkOGAveGAhOGAuiDhgJDhgK3hgJDhgLrhgJDhgIbhgK3hgJDhgLrhgJXhgLzhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuGApOGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAmeGAu+GArOGAuOGAgOGAreGAryDhgJDhgK3hgJDhgLrhgJDhgIbhgK3hgJDhgLrhgJXhgLzhgJXhgKsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuGAnuGAkOGAreGAleGAseGAuOGAgeGAu+GAgOGAuuGAheGArOGAm+GAhOGAuuGAuOGAmeGAu+GArOGAuOGBjyDhgJHhgK3hgJXhgLrhgJDhgL3hgIThgLrhgJXhgLzhgIDhgKwg4YCh4YCe4YC24YCW4YC94YCE4YC34YC64YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuGAmeGAu+GAgOGAuuGAlOGAvuGArOGAleGAvOGAhOGAuuGAleGAseGAq+GAuuGAnuGAreGAr+GAtyDhgJbhgLHhgKzhgLrhgJXhgLzhgIDhgKwg4YCh4YCe4YC24YCW4YC94YCE4YC34YC64YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLhgJThgLHhgKzhgIDhgLrhgJHhgJXhgLog4YCG4YCA4YC64YCQ4YCE4YC64YCZ4YC74YCs4YC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4YCV4YC84YCu4YC44YCV4YCr4YCV4YC84YCuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4YCV4YCv4YC24YCZ4YC+4YCU4YC6IOGAoeGAm+GAseGArOGAhOGAuuGAmeGAu+GArOGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLhgIog4YCh4YCb4YCx4YCs4YCE4YC64YCZ4YC74YCs4YC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLhgIXhgK3hgJDhgLrhgIDhgLzhgK3hgK/hgIDhgLog4YCh4YCb4YCx4YCs4YCE4YC64YCZ4YC74YCs4YC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4YCZ4YCe4YCt4YCe4YCK4YC34YC6IOGAoeGAm+GAseGArOGAhOGAuuGAmeGAu+GArOGAuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLhgKHhgJvhgLHhgKzhgIThgLog4YCZ4YC94YCZ4YC64YC44YCZ4YC24YCZ4YC+4YCvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4YCh4YCZ4YC84YCU4YC6IOGAhuGAgOGAuuGAkOGAhOGAuiDhgJzhgLHhgLjhgJHhgLHhgKzhgIThgLfhgLrhgIDhgL3hgIDhgLrhgIDhgK3hgK8g4YCV4YC84YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLhgIXhgK3hgJDhgLrhgIDhgLzhgK3hgK/hgIDhgLog4YCV4YC84YCx4YCs4YCE4YC64YC44YCc4YCy4YCZ4YC+4YCv4YCA4YCt4YCvIOGAluGAveGAhOGAt+GAuuGAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuGAoeGAnuGAr+GAtuGAuOGAleGAvOGAr+GAleGAqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLhgIbhgIDhgLrhgJDhgIThgLrhgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YCh4YCQ4YCK4YC64YCV4YC84YCv4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4YCh4YCB4YC74YCt4YCv4YC34YCe4YCx4YCsIOGAoeGAm+GAseGArOGAhOGAuuGAhuGAgOGAuuGAkOGAgOGAuuGAmeGAu+GArOGAuOGAgCDhgKThgIDhgK3hgJvhgK3hgJrhgKzhgIDhgK3hgK8g4YCe4YCv4YC24YC44YCZ4YCb4YCh4YCx4YCs4YCE4YC6IOGAnOGAr+GAleGAuuGAleGAheGAuuGAlOGAreGAr+GAhOGAuuGAleGAq+GAnuGAiuGAuuGBiyDhgKThgKHhgJvhgLHhgKzhgIThgLog4YCG4YCA4YC64YCQ4YCE4YC64YCZ4YC74YCs4YC44YCA4YCt4YCvIOGAoeGAkOGAiuGAuuGAleGAvOGAr+GAm+GAlOGAuiDhgKHhgK3hgK/hgIDhgLHhgIDhgK3hgK8g4YCU4YC+4YCt4YCV4YC64YCV4YCr4YGKIOGAnuGAreGAr+GAt+GAmeGAn+GAr+GAkOGAuiDhgKThgIbhgIDhgLrhgJDhgIThgLrhgJnhgLvhgKzhgLjhgIDhgK3hgK8g4YGB4YGAIOGAheGAgOGAueGAgOGAlOGAt+GAuiDhgKHhgIDhgLzhgKzhgJDhgL3hgIThgLog4YCV4YC84YCU4YC64YCK4YC+4YCt4YCc4YCt4YCv4YCA4YC64YCV4YCr4YCZ4YCK4YC64YGLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLhgJjhgIDhgLrhgJHhgJvhgK4gKCA8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4gJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLhgKHhgKzhgLjhgJ7hgL3hgIThgLrhgLjhgJThgLHhgIHhgLvhgK3hgJThgLrhgJnhgL7hgKwgQmF0dGVyeSBTYXZlciDhgIDhgK3hgK8g4YCe4YCv4YC24YC44YCZ4YCb4YCV4YCrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcnkgU2F2ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLhgJzhgK/hgJXhgLrhgIbhgLHhgKzhgIThgLrhgJnhgL7hgK8g4YCU4YC+4YCE4YC34YC6IOGAlOGAseGArOGAgOGAuuGAgeGAtiDigIvhgJLhgLHhgJDhgKzhgIDhgK3hgK8g4YCc4YC74YCx4YCs4YC34YCU4YCK4YC64YC44YCF4YCx4YCV4YCr4YCe4YCK4YC6Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uYi9zdHJpbmdzLnhtbAppbmRleCA2ZGNkNmJjLi40NDQ2YTc3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5iL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmIvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlN0aWxsZSBtb2R1cy4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iQXJiZWlkc21vZHVzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJBdnZpcyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBhdnZpc3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iQWxsZSBueWxpZyBicnVrdGUgYXBwZXIgZXIgYXZ2aXN0LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWwgV2ktRmktc29uZSBlciBzbMOldHQgYXYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWwgV2ktRmktc29uZSBlciBzbMOldHQgcMOlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IlNramVybWNhc3RpbmdlbiBlciBzdG9wcGV0LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IkFyYmVpZHNtb2R1c2VuIGVyIGF2LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkFyYmVpZHNtb2R1c2VuIGVyIHDDpS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJBcmJlaWRzbW9kdXNlbiBlciBzbMOldHQgYXYuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IkFyYmVpZHNtb2R1c2VuIGVyIHNsw6V0dCBww6UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+Ikx5c3N0eXJrZW4gcMOlIHNramVybWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctIG9nIDNHLWRhdGEgZXIgc2F0dCBww6UgcGF1c2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0Ry1kYXRhIGVyIHNhdHQgcMOlIHBhdXNlIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGJydWt0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkdyZW5zZSBww6UgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQWR2YXJzZWwgZm9yIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IkFyYmVpZHNtb2R1cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJEZSBzaXN0IGJydWt0ZSBza2plcm1lbmUgZGluZSB2aXNlcyBoZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJBcHBpbmZvcm1hc2pvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IsOpbi1hcHBzbW9kdXMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iU8O4ayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iS3VubmUgaWtrZSBzdGFydGUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNZXIiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iTG9nZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iRGVsIGhvcmlzb250YWx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGVsIHZlcnRpa2FsdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEZWwgdGlscGFzc2V0Ijwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkJhdHRlcmlzcGFyaW5nIGVyIHDDpSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1c2VyZXIgeXRlbHNlbiBvZyBiZWdyZW5zZXIgYmFrZ3J1bm5zZGF0YWVuZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iU2zDpSBhdiBiYXR0ZXJpc3BhcmluZyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbm5ob2xkZXQgZXIgc2tqdWx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHRhciBvcHAgYWx0IHNvbSB2aWVzIHDDpSBza2plcm1lbiBkaW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Iklra2UgdmlzIGlnamVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkZqZXJuIGFsdCI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iSWtrZSB0aWxsYXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBlciB2b2x1bWRpYWxvZ2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iVHJ5a2sgZm9yIMOlIGfDpSB0aWxiYWtlIHRpbCBkZW4gb3BwcmlubmVsaWdlIHZvbHVtZGlhbG9nZW4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiImYW1wO3F1b3Q7LCAmYW1wO3F1b3Q7ICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IkR1IGJydWtlciBqb2JicHJvZmlsZW4gZGluIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iVmlzIHByb3NlbnQgZm9yIGRldCBpbm5lYnlnZGUgYmF0dGVyaWV0Ijwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWaWwgZHUgc2zDpSBww6UgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJGb3Igw6Uga29ibGUgdGFzdGF0dXJldCB0aWwgbmV0dGJyZXR0ZXQgZGl0dCBtw6UgZHUgZsO4cnN0IHNsw6UgcMOlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJTbMOlIHDDpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkJydWsgZm9yIHZhcnNsZXIgZm9yIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IkJydWsgZm9yIGFsbGUgdmFyc2xlbmUgZnJhIGRlbm5lIGFwcGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2trZXJ0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTGF2IHZpa3RpZ2hldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJWYW5saWcgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkjDuHkgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iU3bDpnJ0IGjDuHkgdmlrdGlnaGV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJBbGRyaSB2aXMgZGlzc2UgdmFyc2xlbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVmlzIG5lZGVyc3QgcMOlIHZhcnNlbGxpc3RlbiB1dGVuIGx5ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iVmlzIGRpc3NlIHZhcnNsZW5lIHV0ZW4gbHlkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJWaXMgw7h2ZXJzdCBww6UgdmFyc2VsbGlzdGVuIG1lZCBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iVmlzIGZvcnQgcMOlIHNramVybWVuIG1lZCBseWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZXJlIGlubnN0aWxsaW5nZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJGZXJkaWciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWxlIGZhcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOYXR0ZmFyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJTcGVzaWFsdGlscGFzc2VkZSBmYXJnZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJVa2plbnRlIGZhcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJGYXJnZW1vZGlmaXNlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlZpcyBydXRlbiBmb3IgaHVydGlnaW5uc3RpbGxpbmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iU2zDpSBww6Ugc3Blc2lhbHRpbHBhc3NldCBmb3J2YW5kbGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkJydWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQmVrcmVmdCBpbm5zdGlsbGluZ2VuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5vZW4gZmFyZ2Vpbm5zdGlsbGluZ2VyIGthbiBnasO4cmUgZGVubmUgZW5oZXRlbiB1YnJ1a2VsaWcuIEtsaWtrIHDDpSBPSyBmb3Igw6UgYmVrcmVmdGUgZGlzc2UgZmFyZ2Vpbm5zdGlsbGluZ2VuZSwgZWxsZXJzIGJsaXIgZGUgdGlsYmFrZXN0aWx0IGV0dGVyIHRpIHNla3VuZGVyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0dGVyaSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+ICUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQmF0dGVyaXNwYXJpbmcgZXIgaWtrZSB0aWxnamVuZ2VsaWcgdW5kZXIgbGFkaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkJhdHRlcmlzcGFyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUmVkdXNlcmVyIHl0ZWxzZW4gb2cgYmVncmVuc2VyIGJha2dydW5uc2RhdGFlbmUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1uZS1yTlAvc3RyaW5ncy54bWwKaW5kZXggYTA1Y2U5Yi4uZjEwMDk1NTAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmUtck5QL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLgpJjgpKjgpY3gpJ/gpYAg4KSu4KWM4KSo4KWkIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCkleCkvuCksOCljeCkryDgpK7gpYvgpKEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpJbgpL7gpLDgpYfgpJwg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgpJbgpL7gpLDgpYfgpJwg4KSX4KSw4KS/4KSP4KSV4KWLIOCkm+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuCkuOCkrOCliCDgpLngpL7gpLLgpJXgpL4g4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSX4KS54KSw4KWCIOCkluCkvuCksOClh+CknCDgpJfgpLDgpL/gpK/gpYvgpaQiPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuCkruCli+CkrOCkvuCkh+CksiDgpLngpJ/gpLjgpY3gpKrgpJ8g4KSs4KSo4KWN4KSmIOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuCkruCli+CkrOCkvuCkh+CksiDgpLngpJ/gpLjgpY3gpKrgpJ8g4KSW4KWB4KSy4KS+IOCkl+CksOCkv+Ckr+Cli+ClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpJXgpL7gpLjgpY3gpJ/gpL/gpJkg4KSw4KWL4KSV4KS/4KSv4KWL4KWkIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i4KSV4KS+4KSw4KWN4KSvIOCkruCli+CkoSDgpKzgpKjgpY3gpKbgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkheCkqOClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuCkleCkvuCksOCljeCkryDgpK7gpYvgpKEg4KSs4KSo4KWN4KSmIOCkreCkr+Cli+ClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIOCkuOCkleCljeCksOCkv+CkryDgpK3gpK/gpYvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4KSq4KWN4KSw4KSm4KSw4KWN4KS24KSoIOCkmuCkruCklSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOCkoeClh+Ckn+CkviDgpLDgpYvgpJXgpL/gpI/gpJXgpYsg4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcg4KSh4KWH4KSf4KS+IOCksOCli+CkleCkv+Ckj+CkleCliyDgpJsiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4KSq4KWN4KSw4KSv4KWL4KSXIOCkl+CksOCkv+Ckr+CliyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOCkuOClgOCkruCkviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgpJrgpYfgpKTgpL7gpLXgpKjgpYAg4KSm4KS/4KSB4KSm4KWIIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgpJXgpL7gpLDgpY3gpK8g4KSu4KWL4KShIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuCkpOCkquCkvuCkiOCkgeCkleCliyDgpLngpL7gpLLgpJXgpYsg4KS44KWN4KSV4KWN4KSw4KS/4KSoIOCkr+CkueCkvuCkgSDgpKrgpY3gpLDgpJXgpJ8g4KS54KWB4KSo4KWN4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i4KSF4KSo4KWB4KSq4KWN4KSw4KSv4KWL4KSXIOCknOCkvuCkqOCkleCkvuCksOClgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuCkuOCljeCkleCljeCksOCkv+CkqCDgpKrgpL/gpKgg4KSX4KSw4KWN4KSm4KWIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuCkluCli+CknOClgCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IuCkuOClgeCksOClgSDgpJfgpLDgpY3gpKgg4KS44KSV4KS/4KSP4KSoIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgpKXgpKoiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i4KSH4KSk4KS/4KS54KS+4KS4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4KSl4KSqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgpKTgpYfgpLDgpY3gpLjgpYsg4KSw4KWC4KSq4KSu4KS+IOCkteCkv+CkreCkvuCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLgpKDgpL7gpKHgpYsg4KSw4KWC4KSq4KSu4KS+IOCkteCkv+CkreCkvuCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIOCkteCkv+CkreCkvuCknOCkqCDgpJfgpLDgpY3gpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KS/IOCkuOClh+CkreCksCDgpJrgpL7gpLLgpYEg4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuCkquCljeCksOCkpuCksOCljeCktuCkqCDgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpJjgpJ/gpL7gpIngpIHgpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuCkrOCljeCkr+CkvuCkn+CljeCksOClgCDgpKzgpJrgpKQg4KSs4KSo4KWN4KSmIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgpLLgpYHgpJXgpYfgpJXgpL4g4KS44KS+4KSu4KS+4KSX4KWN4KSw4KWA4KS54KSw4KWCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOCksuClhyDgpIbgpKvgpY3gpKjgpYsg4KS44KWN4KSV4KWN4KSw4KWA4KSo4KSu4KS+IOCkquCljeCksOCkpuCksOCljeCktuCkv+CkpCDgpLngpYHgpKjgpYcg4KS44KSs4KWIIOCkluCkv+CkmuCljeCkqCDgpLbgpYHgpLDgpYIg4KSX4KSw4KWN4KSo4KWH4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCkq+Clh+CksOCkvyDgpKjgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4KS44KSs4KWIIOCkueCkn+CkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4KSF4KS44KWN4KS14KWA4KSV4KS+4KSwIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCkreCli+CksuCljeCkr+ClguCkriDgpLjgpILgpLXgpL7gpKYg4KS54KWLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i4KSu4KWC4KSyIOCkquClgeCkqOCksOCljeCkuOCljeCkpeCkvuCkquCkqOCkviDgpJfgpLDgpY3gpKgg4KSb4KWB4KSo4KWB4KS54KWL4KS44KWN4KWkIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuCkpOCkquCkvuCkiOCkgeCksuClhyDgpJXgpL7gpLDgpY3gpK8g4KSq4KWN4KSw4KWL4KSr4KS+4KSH4KSyIOCkquCljeCksOCkr+Cli+CklyDgpJfgpLDgpY3gpKbgpYgg4KS54KWB4KSo4KWB4KS54KWB4KSo4KWN4KSbIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4KSq4KWN4KSw4KSj4KS+4KSy4KWAIFVJIOCkn+CljeCkr+ClgeCkqOCksCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuCkh+CkruCljeCkrOClh+CkoSDgpJfgpLDgpL/gpI/gpJXgpYsg4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KWAIOCkquCljeCksOCkpOCkv+CktuCkpCDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpJXgpY3gpLDgpL/gpK8g4KSq4KS+4KSw4KWN4KSo4KWHIOCkueCliz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KSG4KSr4KWN4KSo4KWLIOCkn+CljeCkr+CkvuCkrOCljeCksuClh+Ckn+CkuOCkgeCklyDgpJXgpL/gpKzgpYvgpLDgpY3gpKEg4KSc4KWL4KSh4KWN4KSoLCDgpKrgpLngpL/gpLLgpYcg4KSk4KSq4KS+4KSI4KSB4KSy4KWHIOCkrOCljeCksuClgeCkn+ClgeCkpSDgpLjgpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KSq4KSw4KWN4KSb4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4KS44KSV4KWN4KSw4KS/4KSvIOCkquCkvuCksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYLgpK7gpL4g4KSy4KS+4KSX4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuCkr+CliyDgpIXgpKjgpYHgpKrgpY3gpLDgpK/gpYvgpJfgpJXgpL4g4KS44KSs4KWIIOCkuOClguCkmuCkqOCkvuCkueCksOClguCkruCkviDgpLLgpL7gpJfgpYIg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCksOCli+CkleCkv+Ckr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuCkqOCljeCkr+ClguCkqCDgpK7gpLngpKTgpY3gpKTgpY3gpLUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4KS44KS+4KSu4KS+4KSo4KWN4KSvIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgpIngpJrgpY3gpJog4KSu4KS54KSk4KWN4KSk4KWN4KS1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4KSc4KSw4KWC4KSw4KWAIOCkruCkueCkpOCljeCkpOCljeCktSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4KSv4KWAIOCkuOClguCkmuCkqOCkvuCkueCksOClgiDgpJXgpLngpL/gpLLgpY3gpK/gpYgg4KSo4KSm4KWH4KSW4KS+4KSJ4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCkuOClguCkmuClgOCkleCliyDgpKvgpYfgpKbgpK7gpL4g4KSs4KS/4KSo4KS+IOCkhuCkteCkvuCknCDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCkr+ClgCDgpLjgpYLgpJrgpKjgpL7gpLngpLDgpYIg4KSs4KS/4KSo4KS+IOCkhuCkteCkvuCknCDgpKbgpYfgpJbgpL7gpIngpKjgpYHgpLngpYvgpLjgpY0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCkuOClguCkmuCkqOCkviDgpLjgpYLgpJrgpYDgpJXgpYsg4KS24KWA4KSw4KWN4KS34KSu4KS+IOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSDgpLAg4KSG4KS14KS+4KScIOCkqOCkv+CkleCkvuCksuCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgpLjgpY3gpJXgpY3gpLDgpL/gpKjgpK7gpL4g4KS54KWH4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIOCksCDgpIbgpLXgpL7gpJwg4KSo4KS/4KSV4KS+4KSy4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLgpKXgpKog4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4KS44KSu4KWN4KSq4KSo4KWN4oCN4KSoIOCkreCkr+CliyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCkuOCkvuCkruCkvuCkqOCljeCkryDgpLDgpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4KSw4KS+4KSk4KWN4KSw4KWAIOCksOCkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIOCksOCkmeCkueCksOClgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCkheCknOCljeCknuCkvuCkpCDgpLDgpJngpLngpLDgpYIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4KSw4KSZIOCkquCksOCkv+CkruCkvuCksOCljeCknOCkqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCkpuCljeCksOClgeCkpCDgpLjgpYfgpJ/gpL/gpJkg4KSf4KS+4KSH4KSyIOCkpuClh+CkluCkvuCkieCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4KSF4KSo4KWB4KSV4KWC4KSy4KSoIOCksOClguCkquCkvuCkqOCljeCkpOCksOCkoyDgpLjgpJXgpY3gpLDgpL/gpK8g4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4KSy4KS+4KSX4KWCIOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYLgpJXgpYsg4KSq4KWB4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqOClgeCkueCli+CkuOCljSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCkleClh+CkueClgCDgpLDgpJkg4KS44KWH4KSf4KS/4KSZ4KS54KSw4KWC4KSy4KWHIOCkr+CkuCDgpK/gpKjgpY3gpKTgpY3gpLDgpLLgpL7gpIgg4KSF4KSo4KWB4KSq4KSv4KWL4KSX4KWAIOCkrOCkqOCkvuCkieCkqCDgpLjgpJXgpY3gpJvgpKjgpY3gpaQg4KSv4KWAIOCksOCkmSDgpLjgpYfgpJ/gpL/gpJngpLngpLDgpYIg4KSq4KWB4KS34KWN4KSf4KS/IOCkl+CksOCljeCkqCDgpKDgpYDgpJUg4KSbIOCkruCkviDgpJXgpY3gpLLgpL/gpJUg4KSX4KSw4KWN4KSo4KWB4KS54KWL4KS44KWNLCDgpIXgpKjgpY3gpK/gpKXgpL4g4KSv4KWAIOCkuOClh+Ckn+Ckv+CkmeCkueCksOClgiDgpafgpaYg4KS44KWH4KSV4KWH4KSj4KWN4KSh4KSq4KSb4KS/IOCksOCkv+CkuOClh+CknyDgpLngpYHgpKjgpYfgpJvgpKjgpY3gpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IuCkrOCljeCkr+CkvuCkn+CljeCksOClgCAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLgpJrgpL7gpLDgpY3gpJwg4KSX4KSw4KWN4KSo4KWHIOCkuOCkruCkr+CkruCkviDgpKzgpY3gpK/gpL7gpJ/gpY3gpLDgpYAg4KS44KWH4KSt4KSwIOCkieCkquCksuCkrOCljeCkpyDgpJvgpYjgpKgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i4KSs4KWN4KSv4KS+4KSf4KWN4KSw4KWAIOCkuOClh+CkreCksCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuCkleCkvuCksOCljeCkr+CkuOCkruCljeCkquCkvuCkpuCkqCDgpLAg4KSq4KWD4KS34KWN4KSg4KSt4KWC4KSu4KS/IOCkoeClh+Ckn+CkviDgpJjgpJ/gpL7gpIngpIHgpJsiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLW5sL3N0cmluZ3MueG1sCmluZGV4IDdkZWQ3MWMuLmM2NTYyZDYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtbmwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ubC9zdHJpbmdzLnhtbApAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iem9la2VuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJLYW4gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IG5pZXQgc3RhcnRlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTWVlciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJHZXNjaGllZGVuaXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ik5vZyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gYW5kZXJlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJIb3Jpem9udGFhbCBzcGxpdHNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlZlcnRpY2FhbCBzcGxpdHNlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJBYW5nZXBhc3Qgc3BsaXRzZW4iPC9zdHJpbmc+CkBAIC0zNjQsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iQWNjdWJlc3BhcmluZyBpcyBpbmdlc2NoYWtlbGQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iVmVybWluZGVydCBkZSBwcmVzdGF0aWVzIGVuIGFjaHRlcmdyb25kZ2VnZXZlbnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkFjY3ViZXNwYXJpbmcgdWl0c2NoYWtlbGVuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkluaG91ZCB2ZXJib3JnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gZ2FhdCBhbGxlcyB2YXN0bGVnZ2VuIGRhdCB3b3JkdCB3ZWVyZ2VnZXZlbiBvcCBqZSBzY2hlcm0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5pZXQgb3BuaWV1dyB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iQWxsZXMgd2lzc2VuIjwvc3RyaW5nPgpAQCAtNDA2LDcgKzQwNSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yZXNldF9jb25maXJtYXRpb25fYnV0dG9uIiBtc2dpZD0iMjY2MDMzOTEwMTg2ODM2NzUxNSI+IlZlcmJlcmdlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9tZXNzYWdlIiBtc2dpZD0iOTE4NjgwOTQ3NDMzMzg5MTEwIj4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiB3aWwgaGV0IHZvbHVtZWRpYWxvb2d2ZW5zdGVyIHppam4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2FsbG93IiBtc2dpZD0iNzk1NDM5NjkwMjQ4MjIyODc4NiI+IlRvZXN0YWFuIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iQWZ3aWp6ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJXZWlnZXJlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGlzIGhldCB2b2x1bWVkaWFsb29ndmVuc3RlciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRpayBoaWVyb3Agb20gaGV0IG9yaWdpbmVlbCB0ZSBoZXJzdGVsbGVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KQEAgLTQ0OSw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQmx1ZXRvb3RoIGluc2NoYWtlbGVuPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJBbHMgamUgamUgdG9ldHNlbmJvcmQgd2lsdCB2ZXJiaW5kZW4gbWV0IGplIHRhYmxldCwgbW9ldCBqZSBlZXJzdCBCbHVldG9vdGggaW5zY2hha2VsZW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iSW5zY2hha2VsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJUb2VwYXNzZW4gb3AgbWVsZGluZ2VuIHZvb3IgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iVG9lcGFzc2VuIG9wIGFsbGUgbWVsZGluZ2VuIHZhbiBkZXplIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJHZWJsb2trZWVyZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IktsZWluIGJlbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJOb3JtYWFsIGJlbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJHcm9vdCBiZWxhbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJVcmdlbnQgYmVsYW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJEZXplIG1lbGRpbmdlbiBub29pdCB3ZWVyZ2V2ZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iT25kZXIgYWFuIGRlIGxpanN0IG1ldCBtZWxkaW5nZW4gd2VlcmdldmVuIHpvbmRlciBnZWx1aWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkRlemUgbWVsZGluZ2VuIHpvbmRlciBnZWx1aWQgd2VlcmdldmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCb3ZlbiBhYW4gZGUgbGlqc3QgbWV0IG1lbGRpbmdlbiB3ZWVyZ2V2ZW4gZW4gZ2VsdWlkIGxhdGVuIGhvcmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ik9wIGhldCBzY2hlcm0gd2VlcmdldmVuIGVuIGdlbHVpZCBsYXRlbiBob3JlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWVlciBpbnN0ZWxsaW5nZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJHZXJlZWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3JtYWxlIGtsZXVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmFjaHRrbGV1cmVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJBYW5nZXBhc3RlIGtsZXVyZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJPbmJla2VuZGUga2xldXJlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJLbGV1cmFhbnBhc3NpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJUZWdlbCB2b29yIFwnU25lbGxlIGluc3RlbGxpbmdlblwnIHdlZXJnZXZlbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQWFuZ2VwYXN0IHRyYW5zZm9ybWVyZW4gaW5zY2hha2VsZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJUb2VwYXNzZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iSW5zdGVsbGluZ2VuIGJldmVzdGlnZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJCaWogc29tbWlnZSBrbGV1cmluc3RlbGxpbmdlbiBrYW4gaGV0IGFwcGFyYWF0IG9uYnJ1aWtiYWFyIHdvcmRlbi4gS2xpayBvcCBPSyBvbSBkZXplIGtsZXVyaW5zdGVsbGluZ2VuIHRlIGJldmVzdGlnZW4sIGFuZGVycyB3b3JkZW4gZGV6ZSBpbnN0ZWxsaW5nZW4gbmEgdGllbiBzZWNvbmRlbiBnZXJlc2V0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQWNjdSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJBY2N1YmVzcGFyaW5nIG5pZXQgYmVzY2hpa2JhYXIgdGlqZGVucyBvcGxhZGVuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkFjY3ViZXNwYXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJWZXJtaW5kZXJ0IGRlIHByZXN0YXRpZXMgZW4gYWNodGVyZ3JvbmRnZWdldmVucyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wYS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAppbmRleCAwMjgzOGJkLi5mZDE3ZGFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBhLXJJTi9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4Kiw4Ki/4Kmw4KiX4KiwIOCouOCovuCoiOCosuCpiOCoguCon+ClpCI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLgqJXgqbDgqK4g4Kiu4KmL4KihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Kio4KmC4KmwIOCosOCpseCopiDgqJXgqLDgqYvgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOCosOCpseCopiDgqJXgqYDgqKTgqL7gpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLgqLjgqL7gqLDgqYDgqIbgqIIg4Ki54Ki+4Kiy4KmA4KiGIOCokOCoquCosuCpgOColeCph+CouOCovOCoqOCovuCogiDgqLDgqbHgqKYg4KiV4KmA4Kik4KmA4KiG4KiC4KWkIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLgqK7gqYvgqKzgqL7gqIjgqLIg4Ki54KmM4Kif4Ki44Kiq4KmM4KifIOCorOCpsOCopiDgqJXgqYDgqKTgqYDgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLgqK7gqYvgqKzgqL7gqIjgqLIg4Ki54KmM4Kif4Ki44Kiq4KmM4KifIOComuCovuCosuCpgiDgqJXgqYDgqKTgqYDgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLgqLjgqJXgqY3gqLDgqYDgqKgg4Kic4KmL4Kmc4Kio4Ki+IOCorOCpsOCopiDgqLngqYvgqIfgqIbgpaQiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgqJXgqbDgqK4g4Kiu4KmL4KihIOCorOCpsOCopiDgqLngqYjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLgqJXgqbDgqK4g4Kiu4KmL4KihIOComuCovuCosuCpgiDgqLngqYjgpaQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLgqJXgqbDgqK4g4Kiu4KmL4KihIOCorOCpsOCopiDgqJXgqYDgqKTgqL4g4KiX4Ki/4KiG4KWkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IuColeCpsOCoriDgqK7gqYvgqKEg4Kia4Ki+4Kiy4KmCIOColeCpgOCopOCoviDgqJfgqL/gqIbgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4Kih4Ki/4Ki44Kiq4Kiy4KmHIOComuCoruColSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOCooeCovuCon+CoviDgqLDgqYHgqJUg4KiX4Ki/4KiGIOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOCooeCovuCon+CoviDgqLDgqYHgqJUg4KiX4Ki/4KiGIOCoueCpiCI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDgqLXgqLDgqKTgqL/gqIYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgqLjgqYDgqK7gqL4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4Kia4Ki/4Kik4Ki+4Ki14Kio4KmAIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgqJXgqbDgqK4g4Kiu4KmL4KihIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuCopOCpgeCoueCovuCooeCpgOCohuCogiDgqLngqL7gqLLgqYDgqIYg4Ki44KiV4KmN4Kiw4KmA4Kio4Ki+4KiCIOCoh+CpseCopeCphyDgqKrgqY3gqLDgqJfgqJ8g4Ki54KmL4Kij4KiX4KmA4KiG4KiCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i4KiQ4Kiq4Kiy4KmA4KiV4KmH4Ki44Ki84KioIOConOCovuCoo+ColeCovuCosOCpgCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuCouOColeCpjeCosOCpgOCoqCDgqKrgqL/gqKjgqL/gqbDgqJciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4KiW4KmL4Kic4KmLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4Kio4KmC4KmwIOComuCovuCosuCpgiDgqKjgqLngqYDgqIIg4KiV4KiwIOCouOColeCov+CohuClpCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgqLngqYvgqLAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i4KiH4Kik4Ki/4Ki54Ki+4Ki4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g4Ki54KmL4KiwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgqLngqYzgqLDgqYDgqJzgqLzgqYzgqILgqJ/gqLIg4Ki44Kiq4Kiy4Ki/4KifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4Ki14Kiw4Kif4KmA4KiV4KiyIOCouOCoquCosuCov+ConyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgqJXgqLjgqJ/gqK4g4Ki44Kiq4Kiy4Ki/4KifIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCorOCpiOCon+CosOCpgCDgqLjgqYfgqLXgqLAg4Kia4Ki+4Kiy4KmCIOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgqKrgqY3gqLDgqKbgqLDgqLjgqLzgqKgg4KiF4Kik4KmHIOCoquCov+Com+Cpi+ColeCpnCDgqKHgqL7gqJ/gqL4g4KiY4Kmx4KifIOColeCosOCopuCoviDgqLngqYgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuCorOCpiOCon+CosOCpgCDgqLjgqYfgqLXgqLAg4Kis4Kmw4KimIOColeCosOCpiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgqLjgqK7gqbHgqJfgqLDgqYDgqIbgqIIg4Kiy4KmB4KiV4Ki+4KiI4KiG4KiCIOCol+CoiOCohuCogiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgqIngqLkg4Ki44KitIOColeCpgeConSDgqJXgqYjgqKrgqJrgqLAg4KiV4Kiw4Kio4Ki+IOCouOCovOCpgeCosOCpgiDgqJXgqLAg4Kim4KmH4Ki14KmH4KiX4Ki+LCDgqJzgqYsg4Kik4KmB4Ki54Ki+4Kih4KmAIOCouOColeCpjeCosOCpgOCoqCDgqKTgqYcg4Kih4Ki/4Ki44Kiq4Kiy4KmHIOColeCpgOCopOCoviDgqJzgqL7gqILgqKbgqL4g4Ki54KmI4KWkIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCopuCpgeCorOCovuCosOCoviDgqKjgqL4g4Kim4Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuCouOCovuCosOCphyDgqLngqJ/gqL7gqJMiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuCoheCouOCoteCpgOColeCovuCosCDgqJXgqLDgqYsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDgqLXgqYvgqLLgqK/gqYLgqK4g4Kih4Ki+4KiH4Kiy4KmM4KiXIOCoueCpiCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCoheCouOCosuCpgCDgqKjgqYLgqbAg4Kiw4KmA4Ki44Kif4KmL4KiwIOColeCosOCoqCDgqLLgqIgg4Kib4KmL4Ki54Ki14KmL4KWkIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuCopOCpgeCouOCpgOCogiDgqIbgqKrgqKPgqYAg4KiV4Kmw4KiuIOCoquCpjeCosOCpi+Coq+CovuCoiOCosiDgqLXgqLDgqKQg4Kiw4Ki54KmHIOCoueCpiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSDgqJ/gqL/gqIrgqKjgqLAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLgqJzgqYvgqKHgqLzgqYAg4KiX4KiIIOCorOCpiOCon+CosOCpgCDgqKrgqY3gqLDgqKTgqL/gqLjgqLzgqKTgqKTgqL4g4Kim4Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGgg4Kia4Ki+4Kiy4KmCIOColeCosOCpiz8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4KiG4Kiq4Kij4KmHIOCon+CpiOCorOCosuCph+ConyDgqKjgqL7gqLIg4KiG4Kiq4Kij4Ki+IOColeCpgC3gqKzgqYvgqLDgqKEg4KiV4Kio4KmI4KiV4KifIOColeCosOCoqCDgqLLgqIgsIOCopOCpgeCoueCovuCoqOCpguCpsCDgqKrgqLngqL/gqLLgqL7gqIIgQmx1ZXRvb3RoIOComuCovuCosuCpgiDgqJXgqLDgqKgg4Kim4KmAIOConOCovOCosOCpguCosOCopCDgqLngqYjgpaQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgqJrgqL7gqLLgqYIg4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCouOCpguComuCoqOCovuCoteCovuCogiBcJ+CopOCphyDgqLLgqL7gqJfgqYIg4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4KiH4Ki4IOCokOCoqiDgqKbgqYDgqIbgqIIg4Ki44Ki+4Kiw4KmA4KiG4KiCIOCouOCpguComuCoqOCovuCoteCovuCogiBcJ+CopOCphyDgqLLgqL7gqJfgqYIg4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCorOCosuCpjOColSDgqJXgqYDgqKTgqL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgqJjgqbHgqJ8g4Kiu4Ki54Kmx4Kik4Kik4Ki+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuCouOCop+CovuCosOCoqCDgqK7gqLngqbHgqKTgqKTgqL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4Ki14Kmx4KinIOCoruCoueCpseCopOCopOCoviI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuConOCovOCosOCpguCosOCpgCDgqK7gqLngqbHgqKTgqKTgqL4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuCoh+CoueCoqOCovuCogiDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIg4Kio4KmC4KmwIOColeCopuCphyDgqKjgqL4g4Ki14Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCouOCpguComuCoqOCoviDgqLjgqYLgqJrgqYAg4Kim4KmHIOCoueCph+CooOCovuCogiDgqJrgqYHgqbHgqKrgqJrgqL7gqKog4Kii4Kmw4KiXIOCoqOCovuCosiDgqLXgqL/gqJbgqL7gqJMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCoh+CoueCoqOCovuCogiDgqLjgqYLgqJrgqKjgqL7gqLXgqL7gqIIg4Kio4KmC4KmwIOComuCpgeCpseCoquComuCovuCoqiDgqKLgqbDgqJcg4Kio4Ki+4KiyIOCoteCov+ColuCovuCokyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Ki44KmC4Kia4Kio4Ki+4Ki14Ki+4KiCIOCouOCpguComuCpgCDgqKbgqYcg4Ki44Ki/4KiW4KiwIFwn4Kik4KmHIOCoteCov+ColuCovuCokyDgqIXgqKTgqYcg4KiG4Ki14Ki+4Kic4Ki8IOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLgqLjgqJXgqLDgqYDgqKggXCfgqKTgqYcg4Kid4Ki+4Kik4KmAIOCoruCovuCosOCpiyDgqIXgqKTgqYcg4KiG4Ki14Ki+4Kic4Ki8IOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4Ki54KmL4KiwIOCouOCpiOCon+Cov+CpsOCol+CovuCogiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCoueCpiyDgqJfgqL/gqIYiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgqLjgqKfgqL7gqLDgqKgg4Kiw4Kmw4KiXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCosOCovuCopCDgqKbgqYcg4Kiw4Kmw4KiXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLgqJXgqLjgqJ/gqK4g4Kiw4Kmw4KiXIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4KiF4KiX4Ki/4KiG4KikIOCosOCpsOColyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLgqLDgqbDgqJcg4Ki44KmL4KinIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i4Kik4Kik4KiV4Ki+4KiyIOCouOCpiOCon+Cov+CpsOCol+CovuCogiDgqJ/gqL7gqIfgqLIg4Ki14Ki/4KiW4Ki+4KiTIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLgqJXgqLjgqJ/gqK4g4Kik4Kis4Kim4KmA4Kiy4KmAIOCor+Cpi+ColyDgqKzgqKPgqL7gqJMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLgqLLgqL7gqJfgqYIg4KiV4Kiw4KmLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuCouOCpiOCon+Cov+CpsOCol+CovuCogiDgqKbgqYAg4Kiq4KmB4Ki44Ki84Kif4KmAIOColeCosOCpiyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuColeCpgeConSDgqLDgqbDgqJcg4Ki44KmI4Kif4Ki/4Kmw4KiX4Ki+4KiCIOCoh+CouCDgqKHgqYDgqLXgqL7gqIjgqLgg4Kio4KmC4KmwIOCorOCph+ColeCovuCosCDgqJXgqLAg4Ki44KiV4Kim4KmA4KiG4KiCIOCoueCoqOClpCDgqIfgqLngqKjgqL7gqIIg4Kiw4Kmw4KiXIOCouOCpiOCon+Cov+CpsOCol+CovuCogiDgqKbgqYAg4Kiq4KmB4Ki44Ki84Kif4KmAIOColeCosOCoqCDgqLLgqIgg4Kig4KmA4KiVIFwn4Kik4KmHIOColeCosuCov+CpseColSDgqJXgqLDgqYssIOCoqOCoueCpgOCogiDgqKTgqL7gqIIg4KiH4Ki5IOCouOCpiOCon+Cov+CpsOCol+CovuCogiAxMCDgqLjgqJXgqL/gqbDgqJ8g4Kis4Ki+4KiF4KimIOCoruCpgeCpnC3gqLjgqYjgqbHgqJ8g4Ki54KmLIOConOCovuCoo+Col+CpgOCohuCoguClpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i4Kis4KmI4Kif4Kiw4KmAICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuCorOCpiOCon+CosOCpgCDgqLjgqYfgqLXgqLAg4Kia4Ki+4Kiw4Kic4Ki/4Kmw4KiXIOCopuCpjOCosOCovuCoqCDgqIngqKrgqLLgqKzgqKcg4Kio4Ki54KmA4KiCIOCoueCpiCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLgqKzgqYjgqJ/gqLDgqYAg4Ki44KmH4Ki14KiwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i4KiV4Ki+4Kiw4KiX4KmB4Kic4Ki84Ki+4Kiw4KmAIOCoheCopOCphyDgqKzgqYjgqJXgqJfgqY3gqLDgqL7gqIrgqILgqKEg4Kih4KmI4Kif4KmHIOCoqOCpguCpsCDgqJjgqJ/gqL7gqIngqILgqKbgqL4g4Ki54KmIIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wbC9zdHJpbmdzLnhtbAppbmRleCBkOWQxZGM0Li4zNjMwNDI5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXBsL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcGwvc3RyaW5ncy54bWwKQEAgLTE2Myw4ICsxNjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IkR6d29uZWsgd3ljaXN6b255LiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJUcnliIHByYWN5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJVc3XFhCBzdMSFZCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPjogemFta25pxJl0by4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJXc3p5c3RraWUgb3N0YXRuaWUgYXBsaWthY2plIHpvc3RhxYJ5IHphbWtuacSZdGUuIjwvc3RyaW5nPgpAQCAtMjE2LDE0ICsyMTUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpbG55IGhvdHNwb3Qgem9zdGHFgiB3ecWCxIVjem9ueS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJNb2JpbG55IGhvdHNwb3Qgem9zdGHFgiB3xYLEhWN6b255LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IlphdHJ6eW1hbm8gcHJ6ZXN5xYJhbmllIGVrcmFudS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJUcnliIHByYWN5IHd5xYLEhWN6b255LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IlRyeWIgcHJhY3kgd8WCxIVjem9ueS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJUcnliIHByYWN5IHd5xYLEhWN6b255LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJUcnliIHByYWN5IHfFgsSFY3pvbnkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+Ikphc25vxZvEhyB3ecWbd2lldGxhY3phIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iVHJhbnNtaXNqYSBkYW55Y2ggMkctM0cgem9zdGHFgmEgd3N0cnp5bWFuYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IlRyYW5zbWlzamEgZGFueWNoIDRHIHpvc3RhxYJhIHdzdHJ6eW1hbmEiPC9zdHJpbmc+CkBAIC0zMDEsMTUgKzI5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiJXeWtvcnp5c3Rhbm8gPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkxpbWl0IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ik9zdHJ6ZcW8ZW5pZTogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iVHJ5YiBwcmFjeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJUdXRhaiBwb2phd2nEhSBzacSZIG9zdGF0bmllIGVrcmFueSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWFjamUgbyBhcGxpa2FjamkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJwcnp5cGluYW5pZSBla3JhbnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ic3p1a2FqIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJOaWUgdWRhxYJvIHNpxJkgdXJ1Y2hvbWnEhyBhcGxpa2FjamkgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJXacSZY2VqIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikhpc3RvcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiJpIGplc3pjemUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQb2R6aWVsIHBvemlvbW8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJQb2R6aWVsIHBpb25vd28iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iUG9kemllbCBuaWVzdGFuZGFyZG93byI8L3N0cmluZz4KQEAgLTM3Miw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJPc3pjesSZZHphbmllIGJhdGVyaWkgamVzdCB3xYLEhWN6b25lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlptbmllanN6YSB3eWRham5vxZvEhyBpIG9ncmFuaWN6YSBkYW5lIHcgdGxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJXecWCxIVjeiBvc3pjesSZZHphbmllIGJhdGVyaWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iVHJlxZtjaSB1a3J5dGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYsSZZHppZSB6YXBpc3l3YcSHIHdzenlzdGtvLCBjbyB3ecWbd2lldGxpIHNpxJkgbmEgZWtyYW5pZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTmllIHBva2F6dWogcG9ub3duaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iVXN1xYQgd3N6eXN0a2llIjwvc3RyaW5nPgpAQCAtNDE3LDggKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJPZG3Ds3ciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBzdGVydWplIGfFgm/Fm25vxZtjacSFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iRG90a25paiwgYnkgcHJ6eXdyw7NjacSHIHBpZXJ3b3RuxIUuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlXFvHl3YXN6IHByb2ZpbHUgZG8gcHJhY3kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJLYWxpYnJhdG9yIFN5c3RlbSBVSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlBva2HFvCBwcm9jZW50IG5hxYJhZG93YW5pYSBiYXRlcmlpIjwvc3RyaW5nPgpAQCAtNDU4LDQgKzQ1MCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJXxYLEhWN6ecSHIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iQWJ5IHBvxYLEhWN6ecSHIGtsYXdpYXR1csSZIHogdGFibGV0ZW0sIG11c2lzeiBuYWpwaWVydyB3xYLEhWN6ecSHIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJXxYLEhWN6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iWmFzdG9zdWogZG8gcG93aWFkb21pZcWEIHR5cHUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iWmFzdG9zdWogZG8gd3N6eXN0a2ljaCBwb3dpYWRvbWllxYQgeiB0ZWogYXBsaWthY2ppIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IlphYmxva293YW5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTWHFgm8gd2HFvG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IldhxbxuZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJCYXJkem8gd2HFvG5lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iUGlsbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5pZ2R5IG5pZSBwb2thenVqIHR5Y2ggcG93aWFkb21pZcWEIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IlBva2F6dWogbmEgZG9sZSBsaXN0eSBwb3dpYWRvbWllxYQgYmV6IHN5Z25hxYJ1IGTFundpxJlrb3dlZ28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlBva2F6dWogdGUgcG93aWFkb21pZW5pYSBiZXogc3lnbmHFgnUgZMW6d2nEmWtvd2VnbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iUG9rYXp1aiBuYSBnw7NyemUgbGlzdHkgcG93aWFkb21pZcWEIGkgc3lnbmFsaXp1aiBkxbp3acSZa2llbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJXecWbd2lldGxhaiBuYSBla3JhbmllIGkgb2R0d2FyemFqIGTFundpxJlrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJXacSZY2VqIHVzdGF3aWXFhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IkdvdG93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IktvbG9yeSBzdGFuZGFyZG93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJLb2xvcnkgbm9jbmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IktvbG9yeSBuaWVzdGFuZGFyZG93ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik5pZXpuYW5lIGtvbG9yeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJabWlhbmEga29sb3J1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUG9rYXp1aiBrYWZlbGVrIHN6eWJraWNoIHVzdGF3aWXFhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iV8WCxIVjeiBwcnpla3N6dGHFgmNlbmllIG5pZXN0YW5kYXJkb3dlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iWmFzdG9zdWoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iUG90d2llcmTFuiB1c3Rhd2llbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iTmlla3TDs3JlIHVzdGF3aWVuaWEga29sb3LDs3cgbW9nxIUgdXRydWRuaWHEhyBrb3J6eXN0YW5pZSB6IHVyesSFZHplbmlhLiBLbGlrbmlqIE9LLCBieSBwb3R3aWVyZHppxIcgdGUgdXN0YXdpZW5pYSBrb2xvcsOzdy4gSmXFm2xpIHRlZ28gbmllIHpyb2Jpc3osIHpvc3RhbsSFIG9uZSB6cmVzZXRvd2FuZSBwbyAxMMKgc2VrdW5kYWNoLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4iQmF0ZXJpYSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJPc3pjesSZZHphbmllIGJhdGVyaWkgbmllIGplc3QgZG9zdMSZcG5lIHBvZGN6YXMgxYJhZG93YW5pYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJPc3pjesSZZHphbmllIGJhdGVyaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJabW5pZWpzemEgd3lkYWpub8WbxIcgaSBvZ3JhbmljemEgZGFuZSB3IHRsZSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC1yQlIvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAppbmRleCA3NDA0NjIxLi43ZmEyOGFkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJCUi9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iQ2FtcGFpbmhhIHNpbGVuY2lvc2EuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+Ik1vZG8gZGUgdHJhYmFsaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IkRlc2NhcnRhciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBkZXNjYXJ0YWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlRvZG9zIG9zIGFwcHMgcmVjZW50ZXMgZm9yYW0gZGlzcGVuc2Fkb3MuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJPIHBvbnRvIGRlIGFjZXNzbyBtw7N2ZWwgZm9pIGRlc2F0aXZhZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTyBwb250byBkZSBhY2Vzc28gbcOzdmVsIGZvaSBhdGl2YWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkEgdHJhbnNtaXNzw6NvIGRlIHRlbGEgZm9pIGludGVycm9tcGlkYS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJNb2RvIGRlIHRyYWJhbGhvIGRlc2F0aXZhZG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iTW9kbyBkZSB0cmFiYWxobyBhdGl2YWRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik1vZG8gZGUgdHJhYmFsaG8gZGVzYXRpdmFkby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTW9kbyBkZSB0cmFiYWxobyBhdGl2YWRvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJCcmlsaG8gZGEgdGVsYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+Ik9zIGRhZG9zIDJHIGUgM0cgZm9yYW0gcGF1c2Fkb3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiJPcyBkYWRvcyA0RyBmb3JhbSBwYXVzYWRvcyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IlVzYWRvczogPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkxpbWl0ZTogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQXZpc28gZGUgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iTW9kbyBkZSB0cmFiYWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJTdWFzIHRlbGFzIHJlY2VudGVzIGFwYXJlY2VtIGFxdWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJJbmZvcm1hw6fDtWVzIGRvIGFwcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImZpeGHDp8OjbyBkZSB0ZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InBlc3F1aXNhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNYWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikhpc3TDs3JpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ik1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc8OjbyBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGl2aXPDo28gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXPDo28gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBIEVjb25vbWlhIGRlIGJhdGVyaWEgZXN0w6EgYXRpdmFkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1eiBvIGRlc2VtcGVuaG8gZSBvcyBkYWRvcyBlbSBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhdGl2YXIgYSBlY29ub21pYSBkZSBiYXRlcmlhIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IkNvbnRlw7pkbyBvY3VsdG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gY29tZcOnYXLDoSBhIGNhcHR1cmFyIHR1ZG8gbyBxdWUgZm9yIGV4aWJpZG8gbmEgdGVsYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iTsOjbyBtb3N0cmFyIG5vdmFtZW50ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJMaW1wYXIgdHVkbyI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iTmVnYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDDqSBhIGNhaXhhIGRlIGRpw6Fsb2dvIHJlZmVyZW50ZSBhbyB2b2x1bWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJUb3F1ZSBwYXJhIHJlc3RhdXJhciBvIG9yaWdpbmFsLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJWb2PDqiBlc3TDoSB1c2FuZG8gc2V1IHBlcmZpbCBkZSB0cmFiYWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlNpbnRvbml6YWRvciBTeXN0ZW0gVUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJNb3N0cmFyIHBvcmNlbnRhZ2VtIGRlIGJhdGVyaWEgaW5jb3Jwb3JhZGEiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IkF0aXZhciBvIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGFyYSBjb25lY3RhciBvIHRlY2xhZG8gYW8gdGFibGV0LCDDqSBwcmVjaXNvIHByaW1laXJvIGF0aXZhciBvIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbm90aWZpY2HDp8O1ZXMgZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhciBhIHRvZGFzIGFzIG5vdGlmaWNhw6fDtWVzIGRlc3RlIGFwcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJCbG9xdWVhZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSW1wb3J0w6JuY2lhIGJhaXhhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IkltcG9ydMOibmNpYSBub3JtYWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0w6JuY2lhIGVsZXZhZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJJbXBvcnTDom5jaWEgdXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTnVuY2EgbW9zdHJhciBlc3NhcyBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGRlIGZvcm1hIHNpbGVuY2lvc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXNzYXMgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYcOnw7VlcyBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBwYXJjaWFsbWVudGUgbmEgdGVsYSBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1haXMgY29uZmlndXJhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvcmVzIG5vcm1haXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29yZXMgbm90dXJuYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvcmVzIHBlcnNvbmFsaXphZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29yZXMgZGVzY29uaGVjaWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgYmxvY28gZGUgY29uZmlndXJhw6fDtWVzIHLDoXBpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBdGl2YXIgdHJhbnNmb3JtYcOnw6NvIHBlcnNvbmFsaXphZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJBcGxpY2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IkNvbmZpcm1hciBjb25maWd1cmHDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJBbGd1bWFzIGNvbmZpZ3VyYcOnw7VlcyBkZSBjb3IgcG9kZW0gdG9ybmFyIG8gZGlzcG9zaXRpdm8gaW51dGlsaXrDoXZlbC4gQ2xpcXVlIGVtIFwiT0tcIiBwYXJhIGNvbmZpcm1hciBlc3NhcyBjb25maWd1cmHDp8O1ZXMgZGUgY29yOyBjYXNvIGNvbnRyw6FyaW8sIGVzc2FzIGNvbmZpZ3VyYcOnw7VlcyBzZXLDo28gcmVkZWZpbmlkYXMgYXDDs3MgMTAgc2VndW5kb3MuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXRlcmlhICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkEgRWNvbm9taWEgZGUgYmF0ZXJpYSBuw6NvIGZpY2EgZGlzcG9uw612ZWwgZHVyYW50ZSBvIGNhcnJlZ2FtZW50byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJFY29ub21pYSBkZSBiYXRlcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUmVkdXogbyBkZXNlbXBlbmhvIGUgb3MgZGFkb3MgZW0gc2VndW5kbyBwbGFubyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC1yUFQvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAppbmRleCBlMTQxOTRiLi4zZDI5ZDdlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0LXJQVC9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iQ2FtcGFpbmhhIGVtIHNpbMOqbmNpby4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTW9kbyBkZSB0cmFiYWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iSWdub3JhciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBpZ25vcmFkby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJUb2RhcyBhcyBhcGxpY2HDp8O1ZXMgcmVjZW50ZXMgZm9yYW0gaWdub3JhZGFzLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iWm9uYSBXaS1GaSBtw7N2ZWwgZGVzbGlnYWRhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlpvbmEgV2ktRmkgbcOzdmVsIGxpZ2FkYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJUcmFuc21pc3PDo28gZG8gZWNyw6MgaW50ZXJyb21waWRhLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+Ik1vZG8gZGUgdHJhYmFsaG8gZGVzYXRpdmFkby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNb2RvIGRlIHRyYWJhbGhvIGF0aXZhZG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTyBtb2RvIGRlIHRyYWJhbGhvIGZvaSBkZXNhdGl2YWRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJPIG1vZG8gZGUgdHJhYmFsaG8gZm9pIGF0aXZhZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkJyaWxobyBkbyB2aXNvciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IkRhZG9zIDJHLTNHIGVtIHBhdXNhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iRGFkb3MgNEcgZW0gcGF1c2EiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4gdXRpbGl6YWRvKHMpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkxpbWl0ZSBkZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBdmlzbyBkZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJNb2RvIGRlIHRyYWJhbGhvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+Ik9zIGVjcsOjcyByZWNlbnRlcyBhcGFyZWNlbSBhcXVpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mb3JtYcOnw7VlcyBkYSBhcGxpY2HDp8OjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+ImZpeGHDp8OjbyBubyBlY3LDoyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJwZXNxdWlzYXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ik7Do28gZm9pIHBvc3PDrXZlbCBpbmljaWFyIG8gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNYWlzIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikhpc3TDs3JpY28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ik1haXMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpc8OjbyBob3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGl2aXPDo28gdmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXPDo28gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJBIHBvdXBhbsOnYSBkZSBiYXRlcmlhIGVzdMOhIGxpZ2FkYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJSZWR1eiBvIGRlc2VtcGVuaG8gZSBvcyBkYWRvcyBkZSBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJEZXNhdGl2YXIgYSBwb3VwYW7Dp2EgZGUgYmF0ZXJpYSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJDb250ZcO6ZG8gb2N1bHRvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJPKGEpIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gdmFpIGNvbWXDp2FyIGEgY2FwdGFyIHR1ZG8gbyBxdWUgw6kgYXByZXNlbnRhZG8gbm8gZWNyw6MuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik7Do28gbW9zdHJhciBkZSBub3ZvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkxpbXBhciB0dWRvIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJSZWN1c2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gw6kgYSBjYWl4YSBkZSBkacOhbG9nbyBkbyB2b2x1bWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJUb3F1ZSBwYXJhIHJlc3RhdXJhciBvIG9yaWdpbmFsLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJFc3TDoSBhIHV0aWxpemFyIG8gc2V1IHBlcmZpbCBkZSB0cmFiYWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlNpbnRvbml6YWRvciBkYSBpbnRlcmZhY2UgZG8gc2lzdGVtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+Ik1vc3RyYXIgcGVyY2VudGFnZW0gZGEgYmF0ZXJpYSBpbmNvcnBvcmFkYSI8L3N0cmluZz4KQEAgLTQzMyw3ICs0MjUsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9haXJwbGFuZSIgbXNnaWQ9IjcwNTc1NzU1MDE0NzIyNDkwMDIiPiJNb2RvIGRlIGF2acOjbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFkZF90aWxlIiBtc2dpZD0iMjk5NTM4OTUxMDI0MDc4NjIyMSI+IkFkaWNpb25hciBtb3NhaWNvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYnJvYWRjYXN0X3RpbGUiIG1zZ2lkPSIzODk0MDM2NTExNzYzMjg5MzgzIj4iTW9zYWljbyBkZSB0cmFuc21pc3PDo28iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJ6ZW5fYWxhcm1fd2FybmluZ19pbmRlZiIgbXNnaWQ9IjM0ODI5NjYzNDU1NzgzMTk2MDUiPiJTw7MgdmFpIG91dmlyIG8gcHLDs3hpbW8gYWxhcm1lIMOgcyA8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4gc2UgZGVzYXRpdmFyIGVzdGEgZnVuY2lvbmFsaWRhZGUgYW50ZXMgZGVzc2EgaG9yYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Inplbl9hbGFybV93YXJuaW5nX2luZGVmIiBtc2dpZD0iMzQ4Mjk2NjM0NTU3ODMxOTYwNSI+IlPDsyB2YWkgb3V2aXIgbyBwcsOzeGltbyBhbGFybWUgKDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPikgc2UgZGVzYXRpdmFyIGVzdGEgZnVuY2lvbmFsaWRhZGUgYW50ZXMgZGVzc2EgaG9yYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Inplbl9hbGFybV93YXJuaW5nIiBtc2dpZD0iNDQ0NTMzMTE5NTgyMjQ0MjkzIj4iTsOjbyB2YWkgb3V2aXIgbyBwcsOzeGltbyBhbGFybWUgw6BzIDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlIiBtc2dpZD0iMzk4MDA2MzQwOTM1MDUyMjczNSI+IsOgcyA8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhbGFybV90ZW1wbGF0ZV9mYXIiIG1zZ2lkPSI0MjQyMTc5OTgyNTg2NzE0ODEwIj4iZW0gPHhsaWZmOmcgaWQ9IldIRU4iPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJQcmV0ZW5kZSBhdGl2YXIgbyBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlBhcmEgbGlnYXIgbyB0ZWNsYWRvIGFvIHRhYmxldCwgdGVtIGRlIGF0aXZhciBwcmltZWlybyBvIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBdGl2YXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJBcGxpY2FyIGEgbm90aWZpY2HDp8O1ZXMgZGUgPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQXBsaWNhciBhIHRvZGFzIGFzIG5vdGlmaWNhw6fDtWVzIGRlc3RhIGFwbGljYcOnw6NvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb3F1ZWFkbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkltcG9ydMOibmNpYSBiYWl4YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnTDom5jaWEgbm9ybWFsIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IkltcG9ydMOibmNpYSBhbHRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTnVuY2EgbW9zdHJhciBlc3RhcyBub3RpZmljYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJNb3N0cmFyIG5hIHBhcnRlIGluZmVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIHNlbSBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Ik1vc3RyYXIgZXN0YXMgbm90aWZpY2HDp8O1ZXMgc2VtIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iTW9zdHJhciBuYSBwYXJ0ZSBzdXBlcmlvciBkYSBsaXN0YSBkZSBub3RpZmljYcOnw7VlcyBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iTW9zdHJhciBubyBlY3LDoyBlIGVtaXRpciBzb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ik1haXMgZGVmaW5pw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iQ29uY2x1w61kbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IkNvcmVzIG5vcm1haXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ29yZXMgbm90dXJuYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkNvcmVzIHBlcnNvbmFsaXphZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iQ29yZXMgZGVzY29uaGVjaWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJNb2RpZmljYcOnw6NvIGRlIGNvciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik1vc3RyYXIgbyBtb3NhaWNvIGRlIERlZmluacOnw7VlcyByw6FwaWRhcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQXRpdmFyIHRyYW5zZm9ybWHDp8OjbyBwZXJzb25hbGl6YWRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iQXBsaWNhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtYXIgYXMgZGVmaW5pw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQWxndW1hcyBkZWZpbmnDp8O1ZXMgZGUgY29yIHBvZGVtIHRvcm5hciBlc3RlIGRpc3Bvc2l0aXZvIGluc3TDoXZlbC4gQ2xpcXVlIGVtIE9LIHBhcmEgY29uZmlybWFyIGVzdGFzIGRlZmluacOnw7VlcyBkZSBjb3IuIENhc28gY29udHLDoXJpbywgZXN0YXMgZGVmaW5pw6fDtWVzIHNlcsOjbyByZXBvc3RhcyBhcMOzcyAxMCBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyaWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iUG91cGFuw6dhIGRlIGJhdGVyaWEgbsOjbyBkaXNwb27DrXZlbCBkdXJhbnRlIG8gY2FycmVnYW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IlBvdXBhbsOnYSBkZSBiYXRlcmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUmVkdXogbyBkZXNlbXBlbmhvIGUgb3MgZGFkb3MgZGUgc2VndW5kbyBwbGFubyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcHQvc3RyaW5ncy54bWwKaW5kZXggNzQwNDYyMS4uN2ZhMjhhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1wdC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXB0L3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJDYW1wYWluaGEgc2lsZW5jaW9zYS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTW9kbyBkZSB0cmFiYWxobyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iRGVzY2FydGFyIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGRlc2NhcnRhZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iVG9kb3Mgb3MgYXBwcyByZWNlbnRlcyBmb3JhbSBkaXNwZW5zYWRvcy4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik8gcG9udG8gZGUgYWNlc3NvIG3Ds3ZlbCBmb2kgZGVzYXRpdmFkby4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJPIHBvbnRvIGRlIGFjZXNzbyBtw7N2ZWwgZm9pIGF0aXZhZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iQSB0cmFuc21pc3PDo28gZGUgdGVsYSBmb2kgaW50ZXJyb21waWRhLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+Ik1vZG8gZGUgdHJhYmFsaG8gZGVzYXRpdmFkby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJNb2RvIGRlIHRyYWJhbGhvIGF0aXZhZG8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTW9kbyBkZSB0cmFiYWxobyBkZXNhdGl2YWRvLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJNb2RvIGRlIHRyYWJhbGhvIGF0aXZhZG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkJyaWxobyBkYSB0ZWxhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iT3MgZGFkb3MgMkcgZSAzRyBmb3JhbSBwYXVzYWRvcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+Ik9zIGRhZG9zIDRHIGZvcmFtIHBhdXNhZG9zIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVXNhZG9zOiA8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iTGltaXRlOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBdmlzbyBkZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJNb2RvIGRlIHRyYWJhbGhvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IlN1YXMgdGVsYXMgcmVjZW50ZXMgYXBhcmVjZW0gYXF1aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkluZm9ybWHDp8O1ZXMgZG8gYXBwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4iZml4YcOnw6NvIGRlIHRlbGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4icGVzcXVpc2FyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiJOw6NvIGZvaSBwb3Nzw612ZWwgaW5pY2lhciA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik1haXMiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdMOzcmljbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iTWFpcyA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkRpdmlzw6NvIGhvcml6b250YWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJEaXZpc8OjbyB2ZXJ0aWNhbCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJEaXZpc8OjbyBwZXJzb25hbGl6YWRhIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IkEgRWNvbm9taWEgZGUgYmF0ZXJpYSBlc3TDoSBhdGl2YWRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHV6IG8gZGVzZW1wZW5obyBlIG9zIGRhZG9zIGVtIHNlZ3VuZG8gcGxhbm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlc2F0aXZhciBhIGVjb25vbWlhIGRlIGJhdGVyaWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29udGXDumRvIG9jdWx0byI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBjb21lw6dhcsOhIGEgY2FwdHVyYXIgdHVkbyBvIHF1ZSBmb3IgZXhpYmlkbyBuYSB0ZWxhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJOw6NvIG1vc3RyYXIgbm92YW1lbnRlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IkxpbXBhciB0dWRvIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJOZWdhciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IMOpIGEgY2FpeGEgZGUgZGnDoWxvZ28gcmVmZXJlbnRlIGFvIHZvbHVtZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlRvcXVlIHBhcmEgcmVzdGF1cmFyIG8gb3JpZ2luYWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlZvY8OqIGVzdMOhIHVzYW5kbyBzZXUgcGVyZmlsIGRlIHRyYWJhbGhvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU2ludG9uaXphZG9yIFN5c3RlbSBVSSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+Ik1vc3RyYXIgcG9yY2VudGFnZW0gZGUgYmF0ZXJpYSBpbmNvcnBvcmFkYSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQXRpdmFyIG8gQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJQYXJhIGNvbmVjdGFyIG8gdGVjbGFkbyBhbyB0YWJsZXQsIMOpIHByZWNpc28gcHJpbWVpcm8gYXRpdmFyIG8gQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkF0aXZhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IkFwbGljYXIgYSBub3RpZmljYcOnw7VlcyBkZSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2FyIGEgdG9kYXMgYXMgbm90aWZpY2HDp8O1ZXMgZGVzdGUgYXBwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb3F1ZWFkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnTDom5jaWEgYmFpeGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iSW1wb3J0w6JuY2lhIG5vcm1hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJJbXBvcnTDom5jaWEgZWxldmFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkltcG9ydMOibmNpYSB1cmdlbnRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJOdW5jYSBtb3N0cmFyIGVzc2FzIG5vdGlmaWNhw6fDtWVzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ik1vc3RyYXIgbmEgcGFydGUgaW5mZXJpb3IgZGEgbGlzdGEgZGUgbm90aWZpY2HDp8O1ZXMgZGUgZm9ybWEgc2lsZW5jaW9zYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iTW9zdHJhciBlc3NhcyBub3RpZmljYcOnw7VlcyBkZSBmb3JtYSBzaWxlbmNpb3NhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJNb3N0cmFyIG5hIHBhcnRlIHN1cGVyaW9yIGRhIGxpc3RhIGRlIG5vdGlmaWNhw6fDtWVzIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJNb3N0cmFyIHBhcmNpYWxtZW50ZSBuYSB0ZWxhIGUgZW1pdGlyIHNvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iTWFpcyBjb25maWd1cmHDp8O1ZXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJDb25jbHXDrWRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ29yZXMgbm9ybWFpcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJDb3JlcyBub3R1cm5hcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ29yZXMgcGVyc29uYWxpemFkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDb3JlcyBkZXNjb25oZWNpZGFzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Ik1vZGlmaWNhw6fDo28gZGUgY29yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iTW9zdHJhciBibG9jbyBkZSBjb25maWd1cmHDp8O1ZXMgcsOhcGlkYXMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IkF0aXZhciB0cmFuc2Zvcm1hw6fDo28gcGVyc29uYWxpemFkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwbGljYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iQ29uZmlybWFyIGNvbmZpZ3VyYcOnw7VlcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkFsZ3VtYXMgY29uZmlndXJhw6fDtWVzIGRlIGNvciBwb2RlbSB0b3JuYXIgbyBkaXNwb3NpdGl2byBpbnV0aWxpesOhdmVsLiBDbGlxdWUgZW0gXCJPS1wiIHBhcmEgY29uZmlybWFyIGVzc2FzIGNvbmZpZ3VyYcOnw7VlcyBkZSBjb3I7IGNhc28gY29udHLDoXJpbywgZXNzYXMgY29uZmlndXJhw6fDtWVzIHNlcsOjbyByZWRlZmluaWRhcyBhcMOzcyAxMCBzZWd1bmRvcy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyaWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQSBFY29ub21pYSBkZSBiYXRlcmlhIG7Do28gZmljYSBkaXNwb27DrXZlbCBkdXJhbnRlIG8gY2FycmVnYW1lbnRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IkVjb25vbWlhIGRlIGJhdGVyaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1eiBvIGRlc2VtcGVuaG8gZSBvcyBkYWRvcyBlbSBzZWd1bmRvIHBsYW5vIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1yby9zdHJpbmdzLnhtbAppbmRleCBlYWNjOTA5Li4xM2YzZWYyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJvL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcm8vc3RyaW5ncy54bWwKQEAgLTE2Miw4ICsxNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlNvbmVyaWUgc2lsZW7Im2lvYXPEgy4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTW9kdWwgZGUgbHVjcnUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IsOObmNoaWRlyJtpIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGEgZm9zdCBlbGltaW5hdMSDLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlRvYXRlIGFwbGljYcibaWlsZSByZWNlbnRlIGF1IGZvc3Qgw65uY2hpc2UuIjwvc3RyaW5nPgpAQCAtMjE1LDE0ICsyMTQsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJIb3RzcG90dWwgbW9iaWwgZXN0ZSBkZXphY3RpdmF0LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IkhvdHNwb3R1bCBtb2JpbCBlc3RlIGFjdGl2YXQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iVHJhbnNtaXRlcmVhIGVjcmFudWx1aSBhIGZvc3Qgb3ByaXTEgy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJNb2R1bCBkZSBsdWNydSBlc3RlIGRlemFjdGl2YXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iTW9kdWwgZGUgbHVjcnUgZXN0ZSBhY3RpdmF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ik1vZHVsIGRlIGx1Y3J1IGEgZm9zdCBkZXphY3RpdmF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJNb2R1bCBkZSBsdWNydSBhIGZvc3QgYWN0aXZhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iTHVtaW5veml0YXRlYSBlY3JhbnVsdWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiJDb25leGl1bmVhIGRlIGRhdGUgMkcg4oCTIDNHIGVzdGUgw65udHJlcnVwdMSDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iQ29uZXhpdW5lYSBkZSBkYXRlIDRHIGVzdGUgw65udHJlcnVwdMSDIjwvc3RyaW5nPgpAQCAtMzAwLDE1ICsyOTUsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IHV0aWxpemHIm2kiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iTGltaXTEgyBkZSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJBdmVydGl6YXJlOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJNb2R1bCBkZSBsdWNydSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJFY3JhbmVsZSBkdnMuIHJlY2VudGUgYXBhciBhaWNpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iSW5mb3JtYcibaWkgZGVzcHJlIGFwbGljYcibaWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJmaXhhcmUgcGUgZWNyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iY8SDdXRhcmUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBudSBhIHB1dHV0IHBvcm5pLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJNYWkgbXVsdCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJJc3RvcmljIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLDjm5jxIMgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJEaXZpemFyZSBwZSBvcml6b250YWzEgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IkRpdml6YXJlIHBlIHZlcnRpY2FsxIMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGl2aXphcmUgcGVyc29uYWxpemF0xIMiPC9zdHJpbmc+CkBAIC0zNzEsNyArMzY1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iRWNvbm9taXNpcmVhIGJhdGVyaWVpIGVzdGUgYWN0aXZhdMSDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlJlZHVjZSBwZXJmb3JtYW7Im2EgyJlpIGRhdGVsZSBkZSBmdW5kYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IkRlemFjdGl2YcibaSBlY29ub21pc2lyZWEgYmF0ZXJpZWkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iQ29uyJtpbnV0dWwgZXN0ZSBhc2N1bnMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gdmEgw65uY2VwZSBzxIMgY2FwdHVyZXplIHRvdCBjZWVhIGNlIHNlIGFmaciZZWF6xIMgcGUgZWNyYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik51IHNlIG1haSBhZmnImWVhesSDIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IsiYdGVyZ2XIm2kgdG9hdGUgbm90aWZpY8SDcmlsZSI8L3N0cmluZz4KQEAgLTQxNiw4ICs0MDksNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iUmVmdXphyJtpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gYWZpyJllYXrEgyBjYXNldGEgZGUgZGlhbG9nIHBlbnRydSB2b2x1bSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IkF0aW5nZcibaSBwZW50cnUgYSByZXZlbmkgbGEgc2V0YXJlYSBpbmnIm2lhbMSDLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJBY3VtIGZvbG9zacibaSBwcm9maWx1bCBkZSBzZXJ2aWNpdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSBUdW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IkFmaciZYcibaSBwcm9jZW50YWp1bCBiYXRlcmllaSDDrm5jb3Jwb3JhdCI8L3N0cmluZz4KQEAgLTQ1Nyw0ICs0NDksMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQWN0aXZhyJtpIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4iUGVudHJ1IGEgY29uZWN0YSB0YXN0YXR1cmEgbGEgdGFibGV0xIMsIG1haSDDrm50w6JpIHRyZWJ1aWUgc8SDIGFjdGl2YcibaSBCbHVldG9vdGguIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWN0aXZhyJtpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iQXBsaWNhyJtpIG5vdGlmaWPEg3JpbG9yIGRlIHRpcCA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJBcGxpY2HIm2kgdHV0dXJvciBub3RpZmljxINyaWxvciBkZSBsYSBhY2Vhc3TEgyBhcGxpY2HIm2llIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IkJsb2NhdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJJbXBvcnRhbsibxIMgcmVkdXPEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJJbXBvcnRhbsibxIMgbm9ybWFsxIMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iSW1wb3J0YW7Im8SDIHJpZGljYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IkltcG9ydGFuyJvEgzogdXJnZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iQWNlc3RlIG5vdGlmaWPEg3JpIG51IHNlIGFmaciZZWF6xIMgbmljaW9kYXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJTZSBhZmnImWVhesSDIMOubiBwYXJ0ZWEgZGUgam9zIGEgbGlzdGVpIGN1IG5vdGlmaWPEg3JpIGbEg3LEgyBhIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJBY2VzdGUgbm90aWZpY8SDcmkgc2UgYWZpyJllYXrEgyBmxINyxIMgYSBzZSBlbWl0ZSB1biBzdW5ldCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iU2UgYWZpyJllYXrEgyDDrm4gcGFydGVhIGRlIHN1cyBhIGxpc3RlaSBjdSBub3RpZmljxINyaSDImWkgc2UgZW1pdGUgdW4gc3VuZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iU2UgYWZpyJllYXrEgyBwZW50cnUgbyBzY3VydMSDIGR1cmF0xIMgcGUgZWNyYW4gyJlpIHNlIGVtaXRlIHVuIHN1bmV0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJNYWkgbXVsdGUgc2V0xINyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IlRlcm1pbmF0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iQ3Vsb3JpIG5vcm1hbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iQ3Vsb3JpIGRlIG5vYXB0ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iQ3Vsb3JpIHBlcnNvbmFsaXphdGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJDdWxvcmkgbmVjdW5vc2N1dGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpY2FyZWEgY3Vsb3JpbG9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iQWZpyJlhyJtpIGNhc2V0YSBjdSBTZXTEg3JpbGUgcmFwaWRlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBY3RpdmHIm2kgdHJhbnNmb3JtYXJlYSBwZXJzb25hbGl6YXTEgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IkFwbGljYcibaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJDb25maXJtYcibaSBzZXTEg3JpbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJVbmVsZSBzZXTEg3JpIHBlbnRydSBjdWxvcmkgcG90IGZhY2UgZGlzcG96aXRpdnVsIHPEgyBudSBtYWkgZnVuY8ibaW9uZXplLiBEYcibaSBjbGljIHBlIE9LIHBlbnRydSBhIGNvbmZpcm1hIGFjZXN0ZSBzZXTEg3JpIHBlbnRydSBjdWxvcmkuIMOObiBjYXogY29udHJhciwgYWNlc3RlYSBzZSB2b3IgcmVzZXRhIGR1cMSDIDEwIHNlY3VuZGUuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXRlcmllICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IkVjb25vbWlzaXJlYSBiYXRlcmllaSBudSBlc3RlIGRpc3BvbmliaWzEgyBwZSBkdXJhdGEgw65uY8SDcmPEg3JpaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJFY29ub21pc2lyZWEgYmF0ZXJpZWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiJSZWR1Y2UgcGVyZm9ybWFuyJthIMiZaSBkYXRlbGUgZGUgZnVuZGFsIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1ydS9zdHJpbmdzLnhtbAppbmRleCBjMjZmNzg1Li40ZDdlZTY5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXJ1L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtcnUvc3RyaW5ncy54bWwKQEAgLTE2Myw4ICsxNjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCR0LXQt9C30LLRg9GH0L3Ri9C5INGA0LXQttC40LwuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+ItCg0LDQsdC+0YfQuNC5INGA0LXQttC40LwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+ItCj0LTQsNC70LXQvdC40LUg0L/RgNC40LvQvtC20LXQvdC40Y8gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC40Lcg0YHQv9C40YHQutCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSBcIjx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPlwiINGD0LTQsNC70LXQvdC+INC40Lcg0YHQv9C40YHQutCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+ItCS0YHQtSDQvdC10LTQsNCy0L3QuNC1INC/0YDQuNC70L7QttC10L3QuNGPINC30LDQutGA0YvRgtGLLiI8L3N0cmluZz4KQEAgLTIxNiwxNCArMjE1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i0KLQvtGH0LrQsCDQtNC+0YHRgtGD0L/QsCDQvtGC0LrQu9GO0YfQtdC90LAuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i0KLQvtGH0LrQsCDQtNC+0YHRgtGD0L/QsCDQstC60LvRjtGH0LXQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+ItCi0YDQsNC90YHQu9GP0YbQuNGPINC/0YDQtdC60YDQsNGJ0LXQvdCwLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+ItCg0LDQsdC+0YfQuNC5INGA0LXQttC40Lwg0L7RgtC60LvRjtGH0LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLQoNCw0LHQvtGH0LjQuSDRgNC10LbQuNC8INCy0LrQu9GO0YfQtdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+ItCg0LDQsdC+0YfQuNC5INGA0LXQttC40Lwg0L7RgtC60LvRjtGH0LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0KDQsNCx0L7Rh9C40Lkg0YDQtdC20LjQvCDQstC60LvRjtGH0LXQvS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i0K/RgNC60L7RgdGC0Ywg0Y3QutGA0LDQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i0J/QtdGA0LXQtNCw0YfQsCDQtNCw0L3QvdGL0YUgMkcg0LggM0cg0L/RgNC40L7RgdGC0LDQvdC+0LLQu9C10L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+ItCf0LXRgNC10LTQsNGH0LAg0LTQsNC90L3Ri9GFIDRHINC/0YDQuNC+0YHRgtCw0L3QvtCy0LvQtdC90LAiPC9zdHJpbmc+CkBAIC0zMDEsMTUgKzI5NiwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiLQmNGB0L/QvtC70YzQt9C+0LLQsNC90L46IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLQntCz0YDQsNC90LjRh9C10L3QuNC1OiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLQoNCw0LHQvtGH0LjQuSDRgNC10LbQuNC8Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+ItCX0LTQtdGB0Ywg0LHRg9C00YPRgiDQv9C+0LrQsNC30LDQvdGLINC90LXQtNCw0LLQvdC40LUg0L/RgNC40LvQvtC20LXQvdC40Y8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLQodCy0LXQtNC10L3QuNGPINC+INC/0YDQuNC70L7QttC10L3QuNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i0JfQsNCx0LvQvtC60LjRgNC+0LLQsNGC0Ywg0LIg0L/RgNC40LvQvtC20LXQvdC40LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i0L/QvtC40YHQuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC40LvQvtC20LXQvdC40LUgXCI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLQldGJ0ZEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i0JbRg9GA0L3QsNC7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLQldGJ0ZHCoDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i0KDQsNC30LTQtdC70LjRgtGMINC/0L4g0LPQvtGA0LjQt9C+0L3RgtCw0LvQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCg0LDQt9C00LXQu9C40YLRjCDQv9C+INCy0LXRgNGC0LjQutCw0LvQuCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLQoNCw0LfQtNC10LvQuNGC0Ywg0L/Qvi3QtNGA0YPQs9C+0LzRgyI8L3N0cmluZz4KQEAgLTM3Miw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLQktC60LvRjtGH0LXQvSDRgNC10LbQuNC8INGN0L3QtdGA0LPQvtGB0LHQtdGA0LXQttC10L3QuNGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItCe0YLQutC7LiDRhNC+0L3QvtCy0L7QuSDQv9C10YDQtdC00LDRh9C4INC00LDQvdC90YvRhSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0J7RgtC60LvRjtGH0LjRgtGMINGA0LXQttC40Lwg0Y3QvdC10YDQs9C+0YHQsdC10YDQtdC20LXQvdC40Y8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0KHQvtC00LXRgNC20LjQvNC+0LUg0YHQutGA0YvRgtC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLQn9GA0LjQu9C+0LbQtdC90LjQtSA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+INC/0L7Qu9GD0YfQuNGCINC00L7RgdGC0YPQvyDQuiDQuNC30L7QsdGA0LDQttC10L3QuNGOINC90LAg0Y3QutGA0LDQvdC1INGD0YHRgtGA0L7QudGB0YLQstCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLQkdC+0LvRjNGI0LUg0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLQntGH0LjRgdGC0LjRgtGMINCy0YHQtSI8L3N0cmluZz4KQEAgLTQxNyw4ICs0MTAsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i0J3QtdGCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+ItCf0YDQuNC70L7QttC10L3QuNC1IDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g0L3QsNC30L3QsNGH0LXQvdC+INGA0LXQs9GD0LvRj9GC0L7RgNC+0Lwg0LPRgNC+0LzQutC+0YHRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i0J3QsNC20LzQuNGC0LUsINGH0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC/0YDQuNC70L7QttC10L3QuNC1INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLQktGLINC/0LXRgNC10YjQu9C4INCyINGA0LDQsdC+0YfQuNC5INC/0YDQvtGE0LjQu9GMIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtIFVJIFR1bmVyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i0J/QvtC60LDQt9GL0LLQsNGC0Ywg0YPRgNC+0LLQtdC90Ywg0LfQsNGA0Y/QtNCwINCx0LDRgtCw0YDQtdC4INCyINC/0YDQvtGG0LXQvdGC0LDRhSI8L3N0cmluZz4KQEAgLTQ1OCw0ICs0NTAsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i0J/QvtC00LrQu9GO0YfQtdC90LjQtSDQv9C+IEJsdWV0b290aCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLQp9GC0L7QsdGLINC/0L7QtNC60LvRjtGH0LjRgtGMINC60LvQsNCy0LjQsNGC0YPRgNGDINC6INC/0LvQsNC90YjQtdGC0YMsINCy0LrQu9GO0YfQuNGC0LUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCS0LrQu9GO0YfQuNGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQn9GA0LjQvNC10L3QuNGC0Ywg0Log0YPQstC10LTQvtC80LvQtdC90LjRj9C8INC90LAg0YLQtdC80YMgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCf0YDQuNC80LXQvdC40YLRjCDQutC+INCy0YHQtdC8INGD0LLQtdC00L7QvNC70LXQvdC40Y/QvCDRjdGC0L7Qs9C+INC/0YDQuNC70L7QttC10L3QuNGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCR0LvQvtC60LjRgNC+0LLQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0J3QuNC30LrQsNGPINCy0LDQttC90L7RgdGC0YwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0KHRgNC10LTQvdGP0Y8g0LLQsNC20L3QvtGB0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLQktGL0YHQvtC60LDRjyDQstCw0LbQvdC+0YHRgtGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0JrRgNCw0LnQvdGP0Y8g0LLQsNC20L3QvtGB0YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i0J3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDRjdGC0Lgg0YPQstC10LTQvtC80LvQtdC90LjRjy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i0J/QvtC60LDQt9GL0LLQsNGC0Ywg0LHQtdC3INC30LLRg9C60LAg0LIg0LrQvtC90YbQtSDRgdC/0LjRgdC60LAg0YPQstC10LTQvtC80LvQtdC90LjQuS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCf0L7QutCw0LfRi9Cy0LDRgtGMINGD0LLQtdC00L7QvNC70LXQvdC40Y8g0LHQtdC3INC30LLRg9C60LAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9C+0LrQsNC30YvQstCw0YLRjCDRgdC+INC30LLRg9C60L7QvCDQsiDQvdCw0YfQsNC70LUg0YHQv9C40YHQutCwINGD0LLQtdC00L7QvNC70LXQvdC40LkuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+ItCf0L7QutCw0LfRi9Cy0LDRgtGMINGB0L4g0LfQstGD0LrQvtC8INC/0L7QstC10YDRhSDQstGB0LXRhSDQvtC60L7QvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCU0YDRg9Cz0LjQtSDQvdCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLQntCx0YvRh9C90YvQtSDRhtCy0LXRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+ItCd0L7Rh9C90YvQtSDRhtCy0LXRgtCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiLQodC+0LHRgdGC0LLQtdC90L3Ri9C1INGG0LLQtdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10LjQt9Cy0LXRgdGC0L3Ri9C1INGG0LLQtdGC0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0KbQstC10YLQvtCy0YvQtSDQvdCw0YHRgtGA0L7QudC60LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLQn9C+0LrQsNC30YvQstCw0YLRjCDQv9Cw0L3QtdC70Ywg0LHRi9GB0YLRgNGL0YUg0L3QsNGB0YLRgNC+0LXQuiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i0JLQutC70Y7Rh9C40YLRjCDRgdC+0LHRgdGC0LLQtdC90L3Ri9C1INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCf0YDQuNC80LXQvdC40YLRjCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC90LDRgdGC0YDQvtC50LrQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0LXQutC+0YLQvtGA0YvQtSDRhtCy0LXRgtC+0LLRi9C1INC90LDRgdGC0YDQvtC50LrQuCDQvNC+0LPRg9GCINC30LDRgtGA0YPQtNC90LjRgtGMINGA0LDQsdC+0YLRgyDRgSDRg9GB0YLRgNC+0LnRgdGC0LLQvtC8LiDQp9GC0L7QsdGLINC/0YDQuNC80LXQvdC40YLRjCDQstGL0LHRgNCw0L3QvdGL0LUg0L/QsNGA0LDQvNC10YLRgNGLLCDQvdCw0LbQvNC40YLQtSBcItCe0JpcIi4g0JIg0L/RgNC+0YLQuNCy0L3QvtC8INGB0LvRg9GH0LDQtSDQvtC90Lgg0LHRg9C00YPRgiDRgdCx0YDQvtGI0LXQvdGLINGH0LXRgNC10LcgMTDCoNGB0LXQutGD0L3QtC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+ItCR0LDRgtCw0YDQtdGPICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+ItCg0LXQttC40Lwg0Y3QvdC10YDQs9C+0YHQsdC10YDQtdC20LXQvdC40Y8g0L3QtdC70YzQt9GPINCy0LrQu9GO0YfQuNGC0Ywg0LLQviDQstGA0LXQvNGPINC30LDRgNGP0LTQutC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+ItCg0LXQttC40Lwg0Y3QvdC10YDQs9C+0YHQsdC10YDQtdC20LXQvdC40Y8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLQl9Cw0LzQtdC00LvRj9C10YIg0YDQsNCx0L7RgtGDINGD0YHRgtGA0L7QudGB0YLQstCwINC4INC+0LPRgNCw0L3QuNGH0LjQstCw0LXRgiDRhNC+0L3QvtCy0YPRjiDQv9C10YDQtdC00LDRh9GDINC00LDQvdC90YvRhSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNpLXJMSy9zdHJpbmdzLnhtbAppbmRleCAzZWY2NzJhMi4uZjczZmY2YyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zaS1yTEsvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuC3hOC2rCDgtrHgtp/gtrHgtrog4Lax4LeS4LeB4LeK4LeB4La24LeK4Lav4La64LeSLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLgt4Dgt5Dgtqkg4La04LeK4oCN4La74Laa4LeP4La74La6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaJ4LeA4Lat4La94Lax4LeK4LaxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4LaF4LeD4LeKIOC2muC2uyDgtofgtq0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i4LeD4LeS4La64La94LeU4La4IOC2uOC3keC2rSDgtrrgt5ngtrPgt5Tgtrjgt4og4LaF4LeD4LeKIOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLgtqLgtoLgtpzgtrgg4LeE4Lec4Lan4LeK4LeD4LeK4La04Lec4Lan4La6IOC2heC2muC3iuKAjeC2u+C3kuC2uiDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuC2ouC2guC2nOC2uCDgt4Tgt5zgtqfgt4rgt4Pgt4rgtrTgt5zgtqfgtrog4LeD4Laa4LeK4oCN4La74LeS4La6IOC2muC2u+C2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i4Lat4LeS4La74La6IOC3gOC3kuC2muC3j+C3geC2uiDgtprgt5Lgtrvgt5Pgtrgg4Lax4LeQ4LeA4Lat4LeKIOC3gOC2sSDgtr3gtq/gt5IuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i4LeA4LeQ4LapIOC2tOC3iuKAjeC2u+C2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5Lgtrvgt4Tgt5Lgtq3gtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4LeA4LeQ4LapIOC2tOC3iuKAjeC2u+C2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtprgtrrgt5IuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i4LeA4LeQ4LapIOC2tOC3iuKAjeC2u+C2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gt4Dgt5Lgtrvgt4Tgt5Lgtq0g4Laa4La74LaxIOC2veC2r+C3ky4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i4LeA4LeQ4LapIOC2tOC3iuKAjeC2u+C2muC3j+C2u+C2uiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74LaxIOC2veC2r+C3ky4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4Lav4LeT4La04LeK4Lat4LeS4La6IOC2r+C2u+C3iuC3geC2seC2uiDgtprgtrvgtrHgt4rgtrEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyDgtq/gtq3gt4rgtq0g4LeA4LeS4La74LeP4La4IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyDgtq/gtq3gt4rgtq0g4LeA4LeS4La74LeP4La4IOC2muC2uyDgtofgtq0iPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4g4La34LeP4LeA4LeS4Lat4LePIOC2muC2uyDgtq3gt5Lgtrbgt5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgt4Pgt5Pgtrjgt5Lgtq0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4LaF4LeA4LeA4LeP4LavIOC2muC3kuC2u+C3k+C2uCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4LeA4LeQ4LapIOC2tOC3iuKAjeC2u+C2muC3j+C2u+C2uiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLgtrjgt5ngt4Tgt5Ig4LaU4La24Lac4LeaIOC2uOC3keC2reC2miDgtq3gt5Lgtrsg4La04LeZ4Lax4LeK4Lax4LeU4La44LeKIOC2muC2u+C2uuC3kiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IuC2uuC3meC2r+C3lOC2uOC3iiDgtq3gt5zgtrvgtq3gt5Tgtrvgt5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLgtq3gt5Lgtrsg4LaH4La44LeS4Lar4LeT4La4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuC3g+C3meC3gOC3k+C2uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IOC2huC2u+C2uOC3iuC2tyDgtprgt4Ug4Lax4Lec4LeE4LeQ4LaaLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgtq3gt4Dgtq3gt4oiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i4LaJ4Lat4LeS4LeE4LeP4LeD4La6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLgtq3gt4AgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgtq3gt5Lgtrvgt4Pgt4rgt4Ag4LeA4LeZ4Lax4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuC3g+C3kuC2u+C3g+C3iuC3gCDgt4Dgt5ngtrHgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IuC2heC2t+C3kuC2uOC2rSDgtr3gt5ngt4Mg4LeA4LeZ4Lax4LeKIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgtrbgt5Dgtqfgtrvgt5Lgtrog4LeD4LeU4La74Laa4LeS4Lax4LeK4Lax4LePIOC3g+C2muC3iuKAjeC2u+C3k+C2uuC2uuC3kiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtprgt4/gtrvgt5Lgtq3gt4rgt4Dgtrog4LeD4LeEIOC2tOC3g+C3lOC2tuC3kuC2uOC3iiDgtq/gtq3gt4rgtq0g4LaF4Lap4LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4La24LeQ4Lan4La74LeSIOC3g+C3lOC2u+C3kOC2muC3k+C2uCDgtoXgtprgt4rigI3gtrvgt5Lgtrog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC3g+C3kOC2n+C3gOC3lOC2q+C3lCDgt4Pgtrjgt4rgtrbgtrHgt4rgtrDgtq3gt48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IuC2lOC2tuC2nOC3miDgtq3gt5Pgtrvgtrrgt5og4Lav4La74LeK4LeB4Lax4La6IOC3gOC2sSDgt4Pgt5Hgtrgg4Lav4LeZ4La64La4IDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g4La94La24LeP4Lac4LeQ4Lax4LeT4La4IOC2huC2u+C2uOC3iuC2tyDgtprgtrvgtrEg4La94Lav4LeSLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiLgtrHgt5Dgt4Dgtq0g4Lax4Lec4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuC3g+C3kuC2uuC2veC3iuC2vSDgt4Tgt5Lgt4Pgt4og4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLgtrTgt4rigI3gtrvgtq3gt5Lgtprgt4rgt4Lgt5rgtrQg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4Law4LeP4La74LeS4Lat4LePIOC3g+C2guC3gOC3j+C2r+C2uuC2uuC3kiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuC2uOC3lOC2veC3iiDgtq3gtq3gt4rgtq3gt4rgt4Dgtrog4Lax4LeQ4LeA4LatIOC2tOC3iuKAjeC2u+C2reC3kuC3g+C3j+C2sOC2seC2uiDgtprgt5Lgtrvgt5Pgtrjgtqcg4LeD4LeK4La04La74LeK4LeBIOC2muC2u+C2seC3iuC2sS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i4LaU4La2IOC2lOC2tuC3miDgtprgt4/gtrvgt4rgtrrgt4/gtr0g4La04LeQ4Lat4LeS4Laa4LapIOC2t+C3j+C3gOC3kuC2rSDgtprgtrvgtrjgt5LgtrHgt4og4LeD4LeS4Lan4LeTIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i4La04Lav4LeK4Law4Lat4LeSIFVJIOC3g+C3lOC3g+C2u+C2muC2uiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuC2muC3j+C3gOC2r+C3iuC2r+C2sSDgtr3gtq8g4La24LeQ4Lan4La74LeSIOC2tOC3iuKAjeC2u+C2reC3kuC3geC2reC2uiDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4Lax4LavPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLgtpTgtrbgt5og4La64Lat4LeU4La74LeUIOC2tOC3lOC3gOC2u+C3lOC3gCDgtpTgtrbgt5og4Lan4LeQ4La24LeK4La94Lan4LeKIOC2tOC2u+C3kuC2nOC2q+C2muC2uuC2pyDgt4Pgtrjgt4rgtrbgtrHgt4rgtrAg4Laa4LeS4La74LeT4La44LanLCDgtpTgtrYg4La04LeF4La44LeU4LeAIOC2tuC3iuC2veC3luC2p+C3luC2reC3iiDgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4LeFIOC2uuC3lOC2reC3lOC2ui4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLgtprgt4rigI3gtrvgt5Lgtrrgt4/gtq3gt4rgtrjgtpog4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgt4Dgt5ngtq0g4La64Lec4Lav4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4La44LeZ4La4IOC2uuC3meC2r+C3lOC2uCDgt4Dgt5ngtq3gt5LgtrHgt4og4LeA4LaxIOC3g+C3kuC2uuC2veC3lCDgtq/gt5DgtrHgt5Tgtrjgt4rgtq/gt5Pgtrjgt4og4LeD4Laz4LeE4LePIOC2uuC3nOC2r+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgtoXgt4Dgt4Tgt5Lgtrsg4Laa4La74LaxIOC2veC2r+C3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuC2heC2qeC3lCDgt4Dgt5Dgtq/gtpzgtq3gt4rgtprgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4LeD4LeP4La44LeP4Lax4LeK4oCN4La6IOC3gOC3kOC2r+C2nOC2reC3iuC2muC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLgt4Dgt5Dgtqngt5Ig4LeA4LeQ4Lav4Lac4Lat4LeK4Laa4La4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i4LeE4Lav4LeS4LeD4LeSIOC3gOC3kOC2r+C2nOC2reC3iuC2muC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4La44LeZ4La4IOC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtprgt5Lgt4Pgt5Lgtq/gt48g4Lax4Lec4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuC2r+C3kOC2seC3lOC2uOC3iuC2r+C3k+C2uOC3iiDgtr3gt5Dgtrrgt5Lgt4Pgt4rgtq3gt5Tgt4Dgt5ngt4Tgt5Ig4La04LeE4LeF4LeS4Lax4LeK4La4IOC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C3gCDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuC2seC3kuC3geC3iuC3geC2tuC3iuC2r+C3gCDgtrjgt5ngtrgg4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2tOC3meC2seC3iuC3gOC2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4Lav4LeQ4Lax4LeU4La44LeK4Lav4LeT4La44LeKIOC2veC3kOC2uuC3kuC3g+C3iuC2reC3lOC3gOC3meC3hOC3kiDgtongt4Tgt4Xgt5LgtrHgt4rgtrgg4La04LeZ4Lax4LeK4LeA4Lax4LeK4LaxIOC3g+C3hCDgt4Hgtrbgt4rgtq8g4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuC2reC3kuC2u+C2uuC2pyDgtrTgt5Dgtrjgt5Lgtqsg4LeB4La24LeK4LavIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4Lat4LeAIOC3g+C3kOC2muC3g+C3k+C2uOC3iiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuC2seC3kuC2uOC2uuC3kiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuC3g+C3j+C2uOC3j+C2seC3iuKAjeC2uiDgt4Dgtrvgt4rgtqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4La74LeP4Lat4LeK4oCN4La74LeTIOC3gOC2u+C3iuC2qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4LaF4La34LeS4La74LeU4Lag4LeSIOC3gOC2u+C3iuC2qyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuC2seC3nOC2r+C2seC3iuC2seC3jyDgt4Dgtrvgt4rgtqsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4LeA4La74LeK4LarIOC3gOC3meC2seC3g+C3iiDgtprgt5Lgtrvgt5PgtrgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgtongtprgt4rgtrjgtrHgt4og4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2p+C2uuC3kuC2veC2uiDgtrTgt5ngtrHgt4rgt4DgtrHgt4rgtrEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuC2heC2t+C3kuC2u+C3lOC2oOC3kiDgtrTgtrvgt5Lgt4Dgtrvgt4rgtq3gtrHgtrog4LeD4La24La9IOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuC2uuC3nOC2r+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgt4Pgt5Dgtprgt4Pgt5Pgtrjgt4og4Lat4LeE4LeA4LeU4La74LeUIOC2muC2u+C2seC3iuC2sSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuC3g+C2uOC3hOC2uyDgt4Dgtrvgt4rgtqsg4LeD4LeQ4Laa4LeD4LeT4La44LeKIOC2uOC3meC2uCDgtovgtrTgt4/gtoLgtpzgtrog4La34LeP4LeA4LeS4LatIOC2muC3hSDgtrHgt5zgt4Tgt5Dgtprgt5Ig4Lat4Lat4LeK4Lat4LeK4LeA4La64LanIOC2tOC2reC3iiDgtprgt4Ug4LeE4LeQ4Laa4LeS4La6LiDgtrjgt5ngtrgg4LeA4La74LeK4LarIOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtq3gt4Tgt4Dgt5Tgtrvgt5Qg4Laa4LeS4La74LeT4La44LanIOC3hOC2u+C3kiDgtprgt4rgtr3gt5Lgtprgt4og4Laa4La74Lax4LeK4LaxLCDgtrHgt5Dgtq3gt4Tgt5zgtq3gt4og4La44LeZ4La4IOC3g+C3kOC2muC3g+C3k+C2uOC3iiDgtq3gtq3gt4rgtrTgtrsgMTDgtprgtqcg4La04LeD4LeU4LeAIOC2uuC3heC3kiDgt4Pgtprgt4PgtrHgt5Qg4LaH4LatLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i4La24LeQ4Lan4La74LeS4La6ICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuC2huC2u+C3neC2tOC2q+C2uiDgtoXgtq3gtrvgtq3gt5Tgtrsg4La24LeQ4Lan4La74LeSIOC3g+C3lOC2u+C3kOC2muC3lOC2uCDgtr3gtrbgt48g4Lac4LatIOC2seC3nOC3hOC3kOC2muC3kuC2ui4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i4La24LeQ4Lan4La74LeSIOC3g+C3lOC2u+C3kOC2muC3lOC2uCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IuC2muC3iuKAjeC2u+C3kuC2uuC3j+C2muC3j+C2u+C3kuC2reC3iuC3gOC2uiDgt4Pgt4Qg4La04LeD4LeU4La24LeS4La44LeKIOC2r+C2reC3iuC2rSDgtoXgtqngt5Qg4Laa4La74Lax4LeK4LaxIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zay9zdHJpbmdzLnhtbAppbmRleCAyZDZhYTlkLi5kZGYyZGU4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNrL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2svc3RyaW5ncy54bWwKQEAgLTE2Myw4ICsxNjMsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlRpY2jDqSB6dm9uZW5pZS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iUHJhY292bsO9IHJlxb5pbSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iWnJ1xaFpxaUgYXBsaWvDoWNpdSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iQXBsaWvDoWNpYSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYm9sYSB6cnXFoWVuw6EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iVsWhZXRreSBuZWTDoXZuZSBhcGxpa8OhY2llIGJvbGkgb2RtaWV0bnV0w6kuIjwvc3RyaW5nPgpAQCAtMjE2LDE0ICsyMTUsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpbG7DvSBob3RzcG90IGplIHZ5cG51dMO9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsbsO9IGhvdHNwb3QgamUgemFwbnV0w70uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iUHJlbsOhxaFhbmllIGJvbG8gemFzdGF2ZW7DqS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJQcmFjb3Zuw70gcmXFvmltIOKAkyB2eXAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iUHJhY292bsO9IHJlxb5pbSDigJMgemFwLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IlByYWNvdm7DvSByZcW+aW0gamUgdnlwbnV0w70uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IlByYWNvdm7DvSByZcW+aW0gamUgemFwbnV0w70uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkphcyBkaXNwbGVqYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IkTDoXRvdsOpIHByZW5vc3kgMkcgYSAzRyBzw7ogcG96YXN0YXZlbsOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iRMOhdG92w6kgcHJlbm9zeSA0RyBzw7ogcG96YXN0YXZlbsOpIjwvc3RyaW5nPgpAQCAtMzAxLDE1ICsyOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iVnl1xb5pdMOpOiA8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iTGltaXQ6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+IlVwb3pvcm5lbmllIHByaSA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJQcmFjb3Zuw70gcmXFvmltIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IlZhxaFlIG5lZMOhdm5lIG9icmF6b3ZreSBzYSB6b2JyYXppYSB0dS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJJbmZvcm3DoWNpZSBvIGFwbGlrw6FjaWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJwcmlwbnV0aWUgayBvYnJhem92a2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iaMS+YWRhxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkFwbGlrw6FjaXUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHNhIG5lcG9kYXJpbG8gc3B1c3RpxaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iVmlhYyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0w7NyaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IsSOYWzFoWllICg8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJSb3pkZWxpxaUgdm9kb3Jvdm7DqSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlJvemRlbGnFpSB6dmlzbMOpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlJvemRlbGnFpSB2bGFzdG7DqSI8L3N0cmluZz4KQEAgLTM3Miw3ICszNjYsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLFoGV0cmnEjSBiYXTDqXJpZSBqZSB6YXBudXTDvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJPYm1lZHrDrSB2w71rb25ub3PFpSBhIHByZW5vcyDDumRham92IG5hIHBvemFkw60iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IlZ5cG7DusWlIMWhZXRyacSNIGJhdMOpcmllIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IlNrcnl0w70gb2JzYWgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IkFwbGlrw6FjaWEgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiB6YcSNbmUgemF6bmFtZW7DoXZhxaUgdsWhZXRvayBvYnNhaCB6b2JyYXplbsO9IG5hIHZhxaFlaiBvYnJhem92a2UuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik5hYnVkw7pjZSBuZXpvYnJhem92YcWlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlZ5bWF6YcWlIHbFoWV0a28iPC9zdHJpbmc+CkBAIC00MTcsOCArNDEwLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+Ik9kbWlldG51xaUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBqZSBkaWFsw7NnIGhsYXNpdG9zdGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJLbGVwbnV0w61tIG9ibm92w610ZSBvcmlnaW7DoWwuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlBvdcW+w612YXRlIHN2b2ogcHJhY292bsO9IHByb2ZpbC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJUdW5lciBwb3XFvsOtdmF0ZcS+c2vDqWhvIHJvemhyYW5pYSBzeXN0w6ltdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlpvYnJhemnFpSBwZXJjZW50w6Egdmxvxb5lbmVqIGJhdMOpcmllIjwvc3RyaW5nPgpAQCAtNDU4LDQgKzQ1MCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJaYXBuw7rFpSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IkFrIGNoY2V0ZSBrbMOhdmVzbmljdSBwcmlwb2ppxaUga8KgdGFibGV0dSwgbmFqcHJ2IG11c8OtdGUgemFwbsO6xaUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IlphcG7DusWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iUG91xb5pxaUgbmEgdXBvem9ybmVuaWEgdMO9a2Fqw7pjZSBzYSB0w6lteSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJQb3XFvmnFpSBuYSB2xaFldGt5IHVwb3pvcm5lbmlhIHrCoHRlanRvIGFwbGlrw6FjaWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iWmFibG9rb3ZhbsOpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTsOtemthIGTDtGxlxb5pdG9zxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iTm9ybcOhbG5hIGTDtGxlxb5pdG9zxaUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4iVnlzb2vDoSBkw7RsZcW+aXRvc8WlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iTmVvZGtsYWRuw6EgZMO0bGXFvml0b3PFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iVGlldG8gdXBvem9ybmVuaWEgbmlrZHkgbmV6b2JyYXpvdmHFpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJab2JyYXpvdmHFpSB2wqBkb2xuZWogxI1hc3RpIHpvem5hbXUgdXBvem9ybmVuw60gYmV6IHp2dWtvdsOpaG8gc2lnbsOhbHUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlRpZXRvIHVwb3pvcm5lbmlhIHpvYnJhem92YcWlIGJleiB6dnVrb3bDqWhvIHNpZ27DoWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJab2JyYXpvdmHFpSB2wqBob3JuZWogxI1hc3RpIHpvem5hbXUgdXBvem9ybmVuw60gc28genZ1a292w71tIHNpZ27DoWxvbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJab2JyYXpvdmHFpSBjZXogb2JyYXpvdmt1IHNvIHp2dWtvdsO9bSBzaWduw6Fsb20iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IsSOYWzFoWllIG5hc3RhdmVuaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJIb3Rvdm8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOb3Jtw6FsbmUgZmFyYnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTm/EjW7DqSBmYXJieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iVmxhc3Ruw6kgZmFyYnkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXpuw6FtZSBmYXJieSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLDmnByYXZhIGZhcmllYiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IlpvYnJhemnFpSBkbGHFvmRpY3UgUsO9Y2hsZSBuYXN0YXZlbmlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJQb3ZvbGnFpSB2bGFzdG7DuiB0cmFuc2Zvcm3DoWNpdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlBvdcW+acWlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlBvdHZyZGVuaWUgbmFzdGF2ZW7DrSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+Ik5pZWt0b3LDqSBuYXN0YXZlbmlhIGZhcmllYiBtw7TFvnUgdG90byB6YXJpYWRlbmllIHpuZWZ1bmvEjW5pxaUuIFRpZXRvIG5hc3RhdmVuaWEgZmFyaWViIHBvdHZyZMOtdGUga2xpa251dMOtbSBuYSB0bGHEjWlkbG8gT0ssIGluw6HEjSBzYSB0aWV0byBuYXN0YXZlbmlhIG/CoDEwIHNla8O6bmQgb2Jub3ZpYS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdMOpcmlhICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz7CoCUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iUG/EjWFzIG5hYsOtamFuaWEgbmllIGplIMWgZXRyacSNIGJhdMOpcmllIGvCoGRpc3BvesOtY2lpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IsWgZXRyacSNIGJhdMOpcmllIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iT2JtZWR6w60gdsO9a29ubm9zxaUgYcKgw7pkYWplIG5hIHBvemFkw60iPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNsL3N0cmluZ3MueG1sCmluZGV4IDE4ZmE1MDQuLjI0OWMxYWQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc2wvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zbC9zdHJpbmdzLnhtbApAQCAtMTYzLDggKzE2Myw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iWnZvbmplbmplIGl6a2xvcGxqZW5vLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJOYcSNaW4gemEgZGVsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iT3B1c3RpIGFwbGlrYWNpam8gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiJBcGxpa2FjaWphIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBqZSBiaWxhIG9kc3RyYW5qZW5hLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IlZzZSBuZWRhdm5lIGFwbGlrYWNpamUgc28gYmlsZSBvcHXFocSNZW5lLiI8L3N0cmluZz4KQEAgLTIxNiwxNCArMjE1LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTW9iaWxuYSBkb3N0b3BuYSB0b8SNa2EgamUgaXprbG9wbGplbmEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTW9iaWxuYSBkb3N0b3BuYSB0b8SNa2EgamUgdmtsb3BsamVuYS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJQcmVkdmFqYW5qZSB6YXNsb25hIGplIHVzdGF2bGplbm8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTmHEjWluIHphIGRlbG8gaXprbG9wbGplbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiJOYcSNaW4gemEgZGVsbyB2a2xvcGxqZW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTmHEjWluIHphIGRlbG8gamUgaXprbG9wbGplbi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTmHEjWluIHphIGRlbG8gamUgdmtsb3BsamVuLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJTdmV0bG9zdCB6YXNsb25hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iUHJlbm9zIHBvZGF0a292IHYgb21yZcW+anUgMkcvM0cgamUgemF1c3RhdmxqZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiJQcmVub3MgcG9kYXRrb3YgdiBvbXJlxb5qdSA0RyBqZSB6YXVzdGF2bGplbiI8L3N0cmluZz4KQEAgLTMwMSwxNSArMjk2LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IlBvcmFibGplbm86IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJPbWVqaXRldjogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iT3Bvem9yaWxvIOKAkyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJOYcSNaW4gemEgZGVsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJWYcWhaSBuZWRhdm5pIHphc2xvbmkgc28gcHJpa2F6YW5pIHR1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4iUG9kYXRraSBvIGFwbGlrYWNpamkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJwcmlwZW5qYW5qZSB6YXNsb25hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Imlza2FuamUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkFwbGlrYWNpamUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IG5pIGJpbG8gbW9nb8SNZSB6YWduYXRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJWZcSNIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ilpnb2RvdmluYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iSW4gxaFlIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iUmF6ZGVsaSB2b2RvcmF2bm8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiJSYXpkZWxpIG5hdnBpxI1ubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiJSYXpkZWxpIHBvIG1lcmkiPC9zdHJpbmc+CkBAIC0zNzIsNyArMzY2LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iVmFyxI1ldmFuamUgeiBlbmVyZ2lqbyBha3VtdWxhdG9yamEgamUgdmtsb3BsamVubyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJPbWVqaSB6bW9nbGppdm9zdCBkZWxvdmFuamEgaW4gcHJlbm9zIHBvZGF0a292IHYgb3phZGp1Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJJemtsb3AgdmFyxI1ldmFuamEgeiBlbmVyZ2lqbyBha3VtdWxhdG9yamEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iVnNlYmluYSBqZSBza3JpdGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+IkFwbGlrYWNpamEgPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiBibyB6YcSNZWxhIHphamVtYXRpIHZzZSwga2FyIGplIHByaWthemFubyBuYSB6YXNsb251LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJUZWdhIG5lIHByaWthxb5pIHZlxI0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSXpicmnFoWkgdnNlIjwvc3RyaW5nPgpAQCAtNDE3LDggKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJaYXZybmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBqZSBwb2dvdm9ybm8gb2tubyBnbGVkZSBwcm9zdG9ybmluZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IkRvdGFrbml0ZSBzZSwgxI1lIMW+ZWxpdGUgb2Jub3ZpdGkgaXp2aXJuaWsuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IlVwb3JhYmxqYXRlIGRlbG92bmkgcHJvZmlsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iVWdsYcWhZXZhbG5payB1cG9yYWJuacWha2VnYSB2bWVzbmlrYSBzaXN0ZW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iUHJpa2HFvmkgb2RzdG90ZWsgbmFwb2xuamVub3N0aSB2Z3Jhai4gYWt1bXVsYXRvcmphIjwvc3RyaW5nPgpAQCAtNDU4LDQgKzQ1MCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLFvWVsaXRlIHZrbG9waXRpIEJsdWV0b290aD8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4ixIxlIMW+ZWxpdGUgcG92ZXphdGkgdGlwa292bmljbyBpbiB0YWJsacSNbmkgcmHEjXVuYWxuaWssIHZrbG9waXRlIEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJWa2xvcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IlVwb3JhYmkgemEgb2J2ZXN0aWxhIHphIHRlbW8gPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iVXBvcmFiaSB6YSB2c2Egb2J2ZXN0aWxhIHphIHRvIGFwbGlrYWNpam8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxva2lyYW5vIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iTml6a2EgcG9tZW1ibm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJPYmnEjWFqbmEgcG9tZW1ibm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJWaXNva2EgcG9tZW1ibm9zdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Ik51am5hIHBvbWVtYm5vc3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ik5pa29saSBuZSBwcmlrYcW+aSB0ZWggb2J2ZXN0aWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iUHJpa2HFvmkgbmEgZG51IHNlem5hbWEgb2J2ZXN0aWwgYnJleiB6dm9rYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4iUHJpa2HFvmkgdGEgb2J2ZXN0aWxhIGJyZXogenZva2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlByaWthxb5pIG5hIHZyaHUgc2V6bmFtYSBvYnZlc3RpbCBpbiBwcmVkdmFqYWogenZvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJaYSBoaXAgcG9rYcW+aSBwcmVkb2dsZWQgbmEgemFzbG9udSBpbiBwcmVkdmFqYWogenZvayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iVmXEjSBuYXN0YXZpdGV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iRG9rb27EjWFubyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik9iacSNYWpuZSBiYXJ2ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJOb8SNbmUgYmFydmUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkJhcnZlIHBvIG1lcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJOZXpuYW5lIGJhcnZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlNwcmVtaW5qYW5qZSBiYXJ2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUHJpa2F6IHBsb8WhxI1pY2UgcyBoaXRyaW1pIG5hc3Rhdml0dmFtaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iT21vZ2/EjWFuamUgc3ByZW1lbWJlIHBvIG1lcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJVcG9yYWJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IlBvdHJkaXRldiBuYXN0YXZpdGV2Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iWmFyYWRpIG5la2F0ZXJpaCBiYXJ2bmloIG5hc3Rhdml0ZXYgbGFoa28gcG9zdGFuZSB0YSBuYXByYXZhIG5ldXBvcmFibmEuIEtsaWtuaXRlIMK7ViByZWR1wqssIMSNZSDFvmVsaXRlIHBvdHJkaXRpIHRlIGJhcnZuZSBuYXN0YXZpdHZlLiBWIG5hc3Byb3RuZW0gcHJpbWVydSBzZSBib2RvIMSNZXogMTAgc2VrdW5kIHBvbmFzdGF2aWxlIG5hIHBydm90bm8gdnJlZG5vc3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJBa3VtdWxhdG9yICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4gJSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJWYXLEjWV2YW5qZSB6IGVuZXJnaWpvIGFrdW11bGF0b3JqYSBtZWQgcG9sbmplbmplbSBuaSBuYSB2b2xqbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJWYXLEjWV2YW5qZSB6IGVuZXJnaWpvIGFrdW11bGF0b3JqYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+Ik9tZWppIHptb2dsaml2b3N0IGRlbG92YW5qYSBpbiBwcmVub3MgcG9kYXRrb3YgdiBvemFkanUiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3EtckFML3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKaW5kZXggYWI3ZTViMC4uNjBlMmU4MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zcS1yQUwvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlppbGphIMOrc2h0w6sgaGVzaHR1ci4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iTW9kYWxpdGV0aSBpIHB1bsOrcyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iTGFyZ28gPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gw6tzaHTDqyBoZXF1ci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJUw6sgZ2ppdGhhIGFwbGlrYWNpb25ldCBlIGZ1bmRpdCB1IGxhcmd1YW4uIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJRYXNqYSBuw6sgem9uYSBwdWJsaWtlIGludGVybmV0aSDDq3NodMOrIGUgw6dha3Rpdml6dWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IlpvbmEgZSBxYXNqZXMgcHVibGlrZSBww6tyIGludGVybmV0IMOrc2h0w6sgZSBha3Rpdml6dWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IlRyYW5zbWV0aW1pIGkgZWtyYW5pdCBuZGFsb2kuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iTW9kYWxpdGV0aSBpIHB1bsOrcyDDq3NodMOrIGkgw6dha3Rpdml6dWFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ik1vZGFsaXRldGkgaSBwdW7Dq3Mgw6tzaHTDqyBpIGFrdGl2aXp1YXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iTW9kYWxpdGV0aSBpIHB1bsOrcyDDq3NodMOrIGkgw6dha3Rpdml6dWFyLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJNb2RhbGl0ZXRpIGkgcHVuw6tzIMOrc2h0w6sgaSBha3Rpdml6dWFyLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJOZHJpw6dpbWkgaSBla3Jhbml0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iVMOrIGRow6tuYXQgMkctM0cgamFuw6sgbmTDq3JwcmVyw6siPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiJUw6sgZGjDq25hdCA0RyBqYW7DqyBuZMOrcnByZXLDqyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IlTDqyBww6tyZG9ydXJhOiA8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iS3VmaXJpOiA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJQYXJhbGFqbcOrcmltIHDDq3Iga3VmaXJpbiBwcmVqIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Ik1vZGFsaXRldGkgaSBwdW7Dq3MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iRWtyYW5ldCBlIHR1YSB0w6sgZnVuZGl0IHNoZmFxZW4ga8OrdHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJJbmZvcm1hY2lvbmkgaSBhcGxpa2FjaW9uaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJnb3poZGltaSBpIGVrcmFuaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ia8OrcmtvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gbnVrIG11bmRpIHTDqyBuaXNlai4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iTcOrIHNodW3DqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3Jpa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiB0w6sgdGplcmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+Ik5kYWplIGhvcml6b250YWxpc2h0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iTmRhaiB2ZXJ0aWthbGlzaHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iTmRhaiB0w6sgcGVyc29uYWxpenVhcsOrbiI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJLdXJzaW1pIGkgYmF0ZXJpc8OrIMOrc2h0w6sgaSBha3Rpdml6dWFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlBha8Orc29uIHZlcHJpbXRhcmluw6sgZGhlIHTDqyBkaMOrbmF0IG7DqyBzZm9uZCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iw4dha3Rpdml6byBrdXJzaW1pbiBlIGJhdGVyaXPDqyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJQw6tybWJhanRqZXQgamFuw6sgdMOrIGZzaGVodXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGRvIHTDqyBmaWxsb2rDqyB0w6sgcmVnamlzdHJvasOrIMOnZG8gZ2rDqyBxw6sgc2hmYXFldCBuw6sgZWtyYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Ik1vcyBlIHNoZmFxIHPDq3Jpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iUGFzdHJvamkgdMOrIGdqaXRoYSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iUmVmdXpvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4gw6tzaHTDqyBkaWFsb2d1IGkgdm9sdW1pdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IlByZWsgcMOrciB0w6sgcmVzdGF1cnVhciBvcmlnamluYWxpbi4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iUG8gcMOrcmRvciBwcm9maWxpbiB0w6tuZCB0w6sgcHVuw6tzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU2ludG9uaXp1ZXNpIGkgU2lzdGVtaXQgdMOrIE5kw6tyZmFxZXMgc8OrIFDDq3Jkb3J1ZXNpdCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlNoZmFxIHDDq3JxaW5kamVuIGUgYmF0ZXJpc8OrIHPDqyBpbnRlZ3J1YXIiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlTDqyBha3Rpdml6b2hldCBcImJsdWV0b290aC1pXCI/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlDDq3IgdMOrIGxpZGh1ciB0YXN0aWVyw6tuIG1lIHRhYmxldGluLCBuw6sgZmlsbGltIGR1aGV0IHTDqyBha3Rpdml6b3NoIFwiYmx1ZXRvb3RoLWluXCIuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4iQWt0aXZpem8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJaYmF0b2plIHDDq3IgbmpvZnRpbWV0IG5nYSA8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiJaYmF0b2plIHDDq3IgdMOrIGdqaXRoYSBuam9mdGltZXQgbmdhIGt5IGFwbGlrYWNpb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iSSBibGxva3VhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlLDq25kw6tzaSBlIHVsw6t0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlLDq25kw6tzaSBub3JtYWxlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IlLDq25kw6tzaSBlIGxhcnTDqyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlLDq25kw6tzaSB1cmdqZW50ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iTW9zIGkgc2hmYXEgYXNuasOraGVyw6sga8OrdG8gbmpvZnRpbWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iU2hmYXFpIG7DqyBoZXNodGplIG7DqyBmdW5kIHTDqyBsaXN0w6tzIHPDqyBuam9mdGltZXZlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJTaGZhcWkga8OrdG8gbmpvZnRpbWUgbsOrIGhlc2h0amUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlNoZmFxaSBuw6sga3J5ZSB0w6sgbGlzdMOrcyBzw6sgbmpvZnRpbWV2ZSBkaGUgbMOrc2hvIHRpbmd1bGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iU2hmYXEgbmrDqyB2w6tzaHRyaW0gdMOrIHNocGVqdMOrIG7DqyBla3JhbiBkaGUgbMOrc2hvIHRpbmd1bGwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkNpbMOrc2ltZSB0w6sgdGplcmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJVIGtyeWUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJOZ2p5cmF0IG5vcm1hbGUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iTmdqeXJhdCBlIG5hdMOrcyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iTmdqeXJhdCBlIHBlcnNvbmFsaXp1YXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4iTmdqeXJhIHTDqyBwYW5qb2h1cmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iTW9kaWZpa2ltaSBpIG5nanlyw6tzIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iUGxsYWvDq3phIFNoZmFxIGNpbMOrc2ltZXQgZSBzaHBlanRhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJaYmF0byB0cmFuc2Zvcm1pbWluIGUgcGVyc29uYWxpenVhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlpiYXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IktvbmZpcm1vIGNpbMOrc2ltZXQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJEaXNhIGNpbMOrc2ltZSBuZ2p5cmFzaCBtdW5kIHRhIGLDq2puw6sga8OrdMOrIHBhamlzamUgdMOrIHBhcMOrcmRvcnNobWUuIEtsaWtvIE9LIHDDq3IgdMOrIGtvbmZpcm11YXIga8OrdG8gY2lsw6tzaW1lIG5nanlyYXNoLCBww6tybmRyeXNoZSBrw6t0byBjaWzDq3NpbWUgZG8gdMOrIHJpdmVuZG9zZW4gcGFzIDEwIHNla29uZGFzaC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyaWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iXCJLdXJzeWVzaSBpIGJhdGVyaXPDq1wiIG51ayDDq3NodMOrIGkgZGlzcG9udWVzaMOrbSBnamF0w6sga2FyaWtpbWl0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+Ikt1cnN5ZXNpIGkgYmF0ZXJpc8OrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iUGFrw6tzb24gdmVwcmltdGFyaW7DqyBkaGUgdMOrIGRow6tuYXQgbsOrIHNmb25kIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zci9zdHJpbmdzLnhtbAppbmRleCAxOTZkMWYxLi40OTU0ZjA1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXNyL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Ivc3RyaW5ncy54bWwKQEAgLTE2Miw4ICsxNjIsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+ItCd0LXRh9GD0ZjQvdC+INC30LLQvtC90L4uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+ItCg0LXQttC40Lwg0YDQsNC00LAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+ItCe0LTQsdCw0YbQuNGC0LUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiLQkNC/0LvQuNC60LDRhtC40ZjQsCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g0ZjQtSDQvtC00LHQsNGH0LXQvdCwLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+ItCh0LLQtSDQvdC10LTQsNCy0L3QviDQutC+0YDQuNGI0ZvQtdC90LUg0LDQv9C70LjQutCw0YbQuNGY0LUg0YHRgyDQvtC00LHQsNGH0LXQvdC1LiI8L3N0cmluZz4KQEAgLTIxNSwxNCArMjE0LDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i0JzQvtCx0LjQu9C90Lgg0YXQvtGC0YHQv9C+0YIg0ZjQtSDQuNGB0LrRmdGD0YfQtdC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+ItCc0L7QsdC40LvQvdC4INGF0L7RgtGB0L/QvtGCINGY0LUg0YPQutGZ0YPRh9C10L0uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i0J/RgNC10LHQsNGG0LjQstCw0ZrQtSDQtdC60YDQsNC90LAg0ZjQtSDQt9Cw0YPRgdGC0LDQstGZ0LXQvdC+LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+ItCg0LXQttC40Lwg0YDQsNC00LAg0ZjQtSDQuNGB0LrRmdGD0YfQtdC9LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+ItCg0LXQttC40Lwg0YDQsNC00LAg0ZjQtSDRg9C60ZnRg9GH0LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLQoNC10LbQuNC8INGA0LDQtNCwINGY0LUg0LjRgdC60ZnRg9GH0LXQvS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0KDQtdC20LjQvCDRgNCw0LTQsCDRmNC1INGD0LrRmdGD0YfQtdC9LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLQntGB0LLQtdGC0ZnQtdC90L7RgdGCINC10LrRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJH4oCTM0cg0L/QvtC00LDRhtC4INGB0YMg0L/QsNGD0LfQuNGA0LDQvdC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcg0L/QvtC00LDRhtC4INGB0YMg0L/QsNGD0LfQuNGA0LDQvdC4Ijwvc3RyaW5nPgpAQCAtMzAwLDE1ICsyOTUsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i0JjRgdC60L7RgNC40YHRgtC40LvQuCDRgdGC0LUgPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+ItCe0LPRgNCw0L3QuNGH0LXRmtC1INC+0LQgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4i0KPQv9C+0LfQvtGA0LXRmtC1INC30LAgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0KDQtdC20LjQvCDRgNCw0LTQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLQndC10LTQsNCy0L3QuCDQtdC60YDQsNC90Lgg0YHQtSDQv9C+0ZjQsNCy0ZnRg9GY0YMg0L7QstC00LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLQmNC90YTQvtGA0LzQsNGG0LjRmNC1INC+INCw0L/Qu9C40LrQsNGG0LjRmNC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i0LrQsNGH0LXRmtC1INC10LrRgNCw0L3QsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLQv9GA0LXRgtGA0LDQttC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLQn9C+0LrRgNC10YLQsNGa0LUg0LDQv9C70LjQutCw0YbQuNGY0LUgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC90LjRmNC1INGD0YHQv9C10LvQvi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i0IjQvtGIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+ItCY0YHRgtC+0YDQuNGY0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+ItCI0L7RiCA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+ItCf0L7QtNC10LvQuCDRhdC+0YDQuNC30L7QvdGC0LDQu9C90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLQn9C+0LTQtdC70Lgg0LLQtdGA0YLQuNC60LDQu9C90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i0J/RgNC40LvQsNCz0L7RktC10L3QviDQtNC10ZnQtdGa0LUiPC9zdHJpbmc+CkBAIC0zNzEsNyArMzY1LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i0KjRgtC10LTRmtCwINCx0LDRgtC10YDQuNGY0LUg0ZjQtSDRg9C60ZnRg9GH0LXQvdCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+ItCh0LzQsNGa0YPRmNC1INC/0LXRgNGE0L7RgNC80LDQvdGB0LUg0Lgg0L/QvtC30LDQtNC40L3RgdC60LUg0L/QvtC00LDRgtC60LUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+ItCY0YHQutGZ0YPRh9C4INGI0YLQtdC00ZrRgyDQsdCw0YLQtdGA0LjRmNC1Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItCh0LDQtNGA0LbQsNGYINGY0LUg0YHQsNC60YDQuNCy0LXQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDRm9C1INC/0L7Rh9C10YLQuCDQtNCwINGB0L3QuNC80LAg0YHQstC1INGI0YLQviDRgdC1INC/0YDQuNC60LDQt9GD0ZjQtSDQvdCwINC10LrRgNCw0L3Rgy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i0J3QtSDQv9GA0LjQutCw0LfRg9GYINC/0L7QvdC+0LLQviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLQntCx0YDQuNGI0Lgg0YHQstC1Ijwvc3RyaW5nPgpAQCAtNDE2LDggKzQwOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLQntC00LHQuNGYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g0ZjQtSDQtNC40ZjQsNC70L7QsyDQt9CwINGY0LDRh9C40L3RgyDQt9Cy0YPQutCwIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i0JTQvtC00LjRgNC90LjRgtC1INC00LAg0LHQuNGB0YLQtSDQstGA0LDRgtC40LvQuCDQvtGA0LjQs9C40L3QsNC7LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLQmtC+0YDQuNGB0YLQuNGC0LUg0L/RgNC+0YTQuNC7INC30LAgV29yayI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+ItCi0ZjRg9C90LXRgCDQt9CwINC60L7RgNC40YHQvdC40YfQutC4INC40L3RgtC10YDRhNC10ZjRgSDRgdC40YHRgtC10LzQsCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+ItCf0YDQuNC60LDQt9GD0Zgg0YPQs9GA0LDRktC10L3QuCDQv9GA0L7RhtC10L3QsNGCINCx0LDRgtC10YDQuNGY0LUiPC9zdHJpbmc+CkBAIC00NTcsNCArNDQ5LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+ItCW0LXQu9C40YLQtSDQu9C4INC00LAg0YPQutGZ0YPRh9C40YLQtSBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+ItCU0LAg0LHQuNGB0YLQtSDQv9C+0LLQtdC30LDQu9C4INGC0LDRgdGC0LDRgtGD0YDRgyDRgdCwINGC0LDQsdC70LXRgtC+0LwsINC/0YDQstC+INC80L7RgNCw0YLQtSDQtNCwINGD0LrRmdGD0YfQuNGC0LUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+ItCj0LrRmdGD0YfQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+ItCf0YDQuNC80LXQvdC4INC90LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0L4g0YLQtdC80LggPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i0J/RgNC40LzQtdC90Lgg0L3QsCDRgdCy0LAg0L7QsdCw0LLQtdGI0YLQtdGa0LAg0LjQtyDQvtCy0LUg0LDQv9C70LjQutCw0YbQuNGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i0JHQu9C+0LrQuNGA0LDQvdCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i0JzQsNC70LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0KPQvtCx0LjRh9Cw0ZjQtdC90LAg0LLQsNC20L3QvtGB0YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JLQtdC70LjQutCwINCy0LDQttC90L7RgdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0JLQsNC20L3QvtGB0YI6INGF0LjRgtC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+ItCe0LLQsCDQvtCx0LDQstC10YjRgtC10ZrQsCDRgdC1INC90LjQutCw0LTQsCDQvdC1INC/0YDQuNC60LDQt9GD0ZjRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQtNC90YMg0LvQuNGB0YLQtSDQvtCx0LDQstC10YjRgtC10ZrQsCDQsdC10Lcg0LfQstGD0LrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i0J7QstCwINC+0LHQsNCy0LXRiNGC0LXRmtCwINGB0LUg0L/RgNC40LrQsNC30YPRmNGDINCx0LXQtyDQt9Cy0YPQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLQn9GA0LjQutCw0LfRg9GY0YMg0YHQtSDRgyDQstGA0YXRgyDQu9C40YHRgtC1INC+0LHQsNCy0LXRiNGC0LXRmtCwINC4INC10LzQuNGC0YPRmNC1INGB0LUg0LfQstGD0LoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0J3QsNC60YDQsNGC0LrQviDRgdC1INC/0YDQuNC60LDQt9GD0ZjRgyDQvdCwINC10LrRgNCw0L3RgyDQuCDQtdC80LjRgtGD0ZjQtSDRgdC1INC30LLRg9C6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLQiNC+0Ygg0L/QvtC00LXRiNCw0LLQsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLQk9C+0YLQvtCy0L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLQndC+0YDQvNCw0LvQvdC1INCx0L7RmNC1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+ItCd0L7Rm9C90LUg0LHQvtGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+ItCf0YDQuNC70LDQs9C+0ZLQtdC90LUg0LHQvtGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10L/QvtC30L3QsNGC0LUg0LHQvtGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i0JjQt9C80LXQvdCwINCx0L7RmNCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4i0J/RgNC40LrQsNC20Lgg0L/Qu9C+0YfQuNGG0YMg0JHRgNC30LAg0L/QvtC00LXRiNCw0LLQsNGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+ItCe0LzQvtCz0YPRm9C4INC/0YDQuNC70LDQs9C+0ZLQtdC90YMg0YLRgNCw0L3RgdGE0L7RgNC80LDRhtC40ZjRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+ItCf0YDQuNC80LXQvdC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+ItCf0L7RgtCy0YDQtNC40YLQtSDQv9C+0LTQtdGI0LDQstCw0ZrQsCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCd0LXQutCwINC/0L7QtNC10YjQsNCy0LDRmtCwINCx0L7RmNCwINC80L7Qs9GDINC00LAg0YPRh9C40L3QtSDRg9GA0LXRktCw0Zgg0L3QtdGD0L/QvtGC0YDQtdCx0ZnQuNCy0LjQvC4g0JrQu9C40LrQvdC40YLQtSDQvdCwINCf0L7RgtCy0YDQtNC4INC00LAg0LHQuNGB0YLQtSDQv9C+0YLQstGA0LTQuNC70Lgg0L7QstCwINC/0L7QtNC10YjQsNCy0LDRmtCwINCx0L7RmNCwLCDQv9C+0YjRgtC+INGb0LUg0YHQtSDRgyDRgdGD0L/RgNC+0YLQvdC+0Lwg0L7QstCwINC/0L7QtNC10YjQsNCy0LDRmtCwINGA0LXRgdC10YLQvtCy0LDRgtC4INC90LDQutC+0L0gMTAg0YHQtdC60YPQvdC00LguIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLQkdCw0YLQtdGA0LjRmNCwICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+ItCj0YjRgtC10LTQsCDQsdCw0YLQtdGA0LjRmNC1INC90LjRmNC1INC00L7RgdGC0YPQv9C90LAg0YLQvtC60L7QvCDQv9GD0ZrQtdGa0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i0KPRiNGC0LXQtNCwINCx0LDRgtC10YDQuNGY0LUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLQodC80LDRmtGD0ZjQtSDQv9C10YDRhNC+0YDQvNCw0L3RgdC1INC4INC/0L7Qt9Cw0LTQuNC90YHQutC1INC/0L7QtNCw0YLQutC1Ijwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdi9zdHJpbmdzLnhtbAppbmRleCAzMTA2NmJmLi44ZjY3ZjBlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN2L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3Yvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IlR5c3QgcmluZ3NpZ25hbC4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iQXJiZXRzbMOkZ2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IlRhIGJvcnQgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGZyw6VuIGxpc3Rhbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IHRvZ3MgYm9ydCBwZXJtYW5lbnQuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iQWxsYSBhcHBhciBoYXIgdGFnaXRzIGJvcnQgZnLDpW4gbGlzdGFuIFNlbmFzdGUuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJEZW4gbW9iaWxhIHRyw6VkbMO2c2Egc3VyZnpvbmVuIGhhciBpbmFrdGl2ZXJhdHMuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iRGVuIG1vYmlsYSB0csOlZGzDtnNhIHN1cmZ6b25lbiBoYXIgYWt0aXZlcmF0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJDYXN0bmluZ2VuIGF2IHNrw6RybWVuIGhhciBzdG9wcGF0cy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJBcmJldHNsw6RnZXQgw6RyIGluYWt0aXZlcmF0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkFyYmV0c2zDpGdldCBha3RpdmVyYXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iQXJiZXRzbMOkZ2V0IGhhciBpbmFrdGl2ZXJhdHMuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IkFyYmV0c2zDpGdldCBoYXIgYWt0aXZlcmF0cy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iU2vDpHJtZW5zIGxqdXNzdHlya2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0gb2NoIDNHLWRhdGEgaGFyIHBhdXNhdHMiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0Ry1kYXRhIGhhciBwYXVzYXRzIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+IGFudsOkbmRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ikdyw6RuczogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iVmFybmluZyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJBcmJldHNsw6RnZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJEaW5hIHNlbmFzdGUgc2vDpHJtYXIgdmlzYXMgaMOkciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkFwcGluZm9ybWF0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4iZsOkc3RhIHNrw6RybWVuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+InPDtmsiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkRldCBnaWNrIGludGUgYXR0IHN0YXJ0YSBhcHBlbiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik1lciI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRpbGwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IkRlbGEgaG9yaXNvbnRlbGx0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGVsYSB2ZXJ0aWthbHQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iRGVsYSBhbnBhc3NhZCI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJCYXR0ZXJpc3BhcmzDpGdldCBoYXIgYWt0aXZlcmF0cyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJNaW5za2FyIHByZXN0YW5kYSBvY2ggYmFrZ3J1bmRzZGF0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iSW5ha3RpdmVyYSBiYXR0ZXJpc3BhcmzDpGdldCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJJbm5laMOlbGwgaGFyIGRvbHRzIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IHRhciBlbiBiaWxkIGF2IGFsbHQgc29tIHZpc2FzIHDDpSBza8Okcm1lbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iVmlzYSBpbnRlIGlnZW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iUmVuc2EgYWxsYSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iTmVrYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFudsOkbmRzIHNvbSB2b2x5bWtvbnRyb2xsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iVHJ5Y2sgaMOkciBvbSBkdSB2aWxsIMOldGVyc3TDpGxsYSBkZW4gdXJzcHJ1bmdsaWdhIGFwcGVuLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJEdSBhbnbDpG5kZXIgZGluIGpvYmJwcm9maWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJJbnN0w6RsbG5pbmdhciBmw7ZyIHN5c3RlbWdyw6Ruc3NuaXR0Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iVmlzYSBpbmLDpGRkYWQgYmF0dGVyaXByb2NlbnQiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IlZpbGwgZHUgYWt0aXZlcmEgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJPbSBkdSB2aWxsIGFuc2x1dGEgdGFuZ2VudGJvcmRldCB0aWxsIHN1cmZwbGF0dGFuIG3DpXN0ZSBkdSBmw7Zyc3QgYWt0aXZlcmEgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+IkFrdGl2ZXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iw4RuZHJhIGbDtnIgYWxsYSBhdmlzZXJpbmdhciBmw7ZyIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IsOEbmRyYSBmw7ZyIGFsbGEgYXZpc2VyaW5nYXIgZnLDpW4gZGVuIGjDpHIgYXBwZW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxvY2tlcmFkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iT3Zpa3RpZyBhdmlzZXJpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVmFubGlnIGF2aXNlcmluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJWaWt0aWcgYXZpc2VyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iQnLDpWRza2FuZGUgYXZpc2VyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJWaXNhIGFsZHJpZyBkZSBow6RyIGF2aXNlcmluZ2FybmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iVmlzYSBsw6RuZ3N0IG5lZCBww6UgbGlzdGFuLCB1dGFuIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IlZpc2EgYXZpc2VyaW5nYXJuYSB1dGFuIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IlZpc2EgaMO2Z3N0IHVwcCBww6UgbGlzdGFuLCBtZWQgbGp1ZCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJWaXNhIHDDpSBza8Okcm1lbiwgbWVkIGxqdWQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkZsZXIgaW5zdMOkbGxuaW5nYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJLbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iTm9ybWFsYSBmw6RyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Ik5hdHRmw6RyZ2VyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJBbnBhc3NhZGUgZsOkcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik9rw6RuZGEgZsOkcmdlciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJGw6RyZ8OkbmRyaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iVmlzYSBydXRhbiBTbmFiYmluc3TDpGxsbmluZ2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJBa3RpdmVyYSBhbnBhc3NhZCBvbXZhbmRsaW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVmVya3N0w6RsbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJCZWtyw6RmdGEgaW5zdMOkbGxuaW5nYXJuYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IlZpc3NhIGbDpHJnaW5zdMOkbGxuaW5nYXIga2FuIGfDtnJhIGRlbiBow6RyIGVuaGV0ZW4gb2FudsOkbmRiYXIuIEtsaWNrYSBww6UgT0sgb20gZHUgdmlsbCBiZWtyw6RmdGEgZsOkcmdpbnN0w6RsbG5pbmdhcm5hLCBhbm5hcnMgw6V0ZXJzdMOkbGxzIGluc3TDpGxsbmluZ2FybmEgZWZ0ZXIgMTAgc2VrdW5kZXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCYXR0ZXJpICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz7CoCUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iQmF0dGVyaXNwYXJsw6RnZXQgw6RyIGludGUgdGlsbGfDpG5nbGlndCB2aWQgbGFkZG5pbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iQmF0dGVyaXNwYXJsw6RnZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+Ik1pbnNrYXIgcHJlc3RhbmRhIG9jaCBiYWtncnVuZHNkYXRhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy1zdy9zdHJpbmdzLnhtbAppbmRleCBlZWVlZjFmLi4wZjY2ODI2IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXN3L3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtc3cvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Ik1saW8gd2Egc2ltdSB1a28ga2lteWEuIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IkhhbGkgeWEga2F6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4iT25kb2EgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gaW1lb25kb2xld2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iUHJvZ3JhbXUgemEgaGl2aSBtYWp1emkgemltZW9uZG9sZXdhLiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4iTXRhbmRhby1oZXdhIHVuYW93ZXphIGt1aGFtaXNoaWthIHVtZXppbXdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik10YW5kYW8taGV3YSB1bmFvd2V6YSBrdWhhbWlzaGlrYSB1bWV3YXNod2EuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4iVXR1bWFqaSB3YSBza3JpbmkgdW1lc2l0aXNod2EuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iSGFsaSB5YSBrYXppIGltZXppbXdhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IkhhbGkgeWEga2F6aSBpbWV3YXNod2EuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iSGFsaSB5YSBrYXppIGltZXppbXdhLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiJIYWxpIHlhIGthemkgaW1ld2FzaHdhLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJVbmdcJ2FhdnUgd2Egc2tyaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iRGF0YSB5YSAyRy0zRyBpbWVzaXRpc2h3YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IkRhdGEgeWEgNEcgaW1lc2l0aXNod2EiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4gaW1ldHVtaWthIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Imtpa29tbyA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiJPbnlvIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IkhhbGkgeWEga2F6aSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJTa3JpbmkgemFrbyB6YSBoaXZpIG1hanV6aSBodW9uZWthbmEgaGFwYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+Ik1hZWxlem8geWEgUHJvZ3JhbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJrdWR1bWlzaGEgcHJvZ3JhbXUgbW9qYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJ0YWZ1dGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkhhaWt1d2V6YSBrdWFuemlzaGEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiJaYWlkaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiJIaXN0b3JpYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iTnlpbmdpbmUgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJHYXdhbnlhIE1sYWxvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iR2F3YW55YSBXaW1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Ik1hYWx1bSBJbGl5b2dhd2FueXdhIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Iktpb2tvYSBiZXRyaSBraW1ld2FzaHdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Ikh1cHVuZ3V6YSB1dGVuZGFqaSBuYSBkYXRhIHlhIGNoaW5pIGNoaW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJaaW1hIGtpb2tvYSBiZXRyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiJNYXVkaHVpIHlhbWVmaWNod2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz7CoGl0YWFuemEga3VwaWdhIHBpY2hhIGtpbGEga2l0dSBraW5hY2hvb255ZXNod2Ega3dlbnllIHNrcmluaSB5YWtvLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJVc2lvbnllc2hlIHRlbmEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iRnV0YSB6b3RlIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJLYXRhYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IG5pIG1henVuZ3Vtem8geWEgc2F1dGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJHdXNhIGlsaSB1cmVqZXNoZSB5YSBhd2FsaS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iVW5hdHVtaWEgd2FzaWZ1IHdha28gd2Ega2F6aW5pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iS2lwb2tlYSBJc2hhcmEgY2hhIFN5c3RlbVVJIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iT255ZXNoYSBhc2lsaW1pYSB5YSBiZXRyaSBpbGl5b3BhY2hpa3dhIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJKZSwgdW5nZXBlbmRhIGt1d2FzaGEgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJJbGkgdXVuZ2FuaXNoZSBLaWJvZGkgeWFrbyBrd2VueWUga29tcHl1dGEgeWFrbyBraWJhbywgbGF6aW1hIGt3YW56YSB1d2FzaGUgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ildhc2hhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iVHVtaWEga2F0aWthIGFyaWZhIHphIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlR1bWlhIGthdGlrYSBhcmlmYSB6b3RlIGt1dG9rYSBwcm9ncmFtdSBoaWkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQW1lenVpd2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiJVbXVoaW11IGtpd2FuZ28gY2hhIGNoaW5pIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IlVtdWhpbXUgd2Ega2l3YW5nbyBjaGEga2F3YWlkYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJVbXVoaW11IHdhIGtpd2FuZ28gY2hhIGp1dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IlVtdWhpbXUgd2EgaGFsaSB5YSBkaGFydXJhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJVc2lvbnllc2hlIGFyaWZhIGhpemkga2Ftd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iT255ZXNoYSBrYXRpa2Egc2VoZW11IHlhIGNoaW5pIHlhIG9yb2RoYSB5YSBhcmlmYSBiaWxhIHNhdXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJPbnllc2hhIGFyaWZhIGhpemkgYmlsYSBzYXV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iT255ZXNoYSBrYXRpa2Egc2VoZW11IHlhIGp1dSB5YSBvcm9kaGEgeWEgYXJpZmEgbmEgaXRvZSBzYXV0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiJXZWthIG9ueWVzaG8gbGEga3VjaHVuZ3VsaWEga3dlbnllIHNrcmluaSBuYSBpdG9lIHNhdXRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJNaXBhbmdpbGlvIHphaWRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iTmltZW1hbGl6YSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IlJhbmdpIHphIGthd2FpZGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iUmFuZ2kgemEgdXNpa3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IlJhbmdpIG1hYWx1bSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IlJhbmdpIHppc2l6b2p1bGlrYW5hIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlViYWRpbGlzaGFqaSB3YSByYW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ik9ueWVzaGEga2lnYWUgY2hhIE1pcGFuZ2lsaW8geWEgSGFyYWthIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJXYXNoYSB1YmFkaWxpc2hhamkgbWFhbHVtIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iVHVtaWEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iVGhpYml0aXNoYSBtaXBhbmdpbGlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4iQmFhZGhpIHlhIG1pcGFuZ2lsaW8geWEgcmFuZ2kgaW5hd2V6YSBrdWZhbnlhIGtpZmFhIGhpa2kga2lzaXR1bWlrZS4gQm9meWEgU2F3YSBpbGkgdXRoaWJpdGlzaGUgbWlwYW5naWxpbyBoaWkgeWEgcmFuZ2ksIHZpbmdpbmV2eW8sIG1pcGFuZ2lsaW8gaGlpIGl0YWppd2VrYSB1cHlhIGJhYWRhIHlhIHNla3VuZGUgMTAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJCZXRyaSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJLaW9rb2EgQmV0cmkgaGFraXBhdGlrYW5pIHVuYXBvY2hhamkgYmV0cmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iS2lva29hIEJldHJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iSHVwdW5ndXphIGRhdGEgeWEgY2hpbmkgY2hpbmkgbmEgdXRlbmRhamkiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGEtcklOL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKaW5kZXggYTZhZDBkZi4uMDY1Mzg0MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10YS1ySU4vc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+IuCusOCuv+CumeCvjeCuleCusOCvjSDgrqjgrr/grprgrqrgr43grqTgrq7gr40uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCuquCuo+Cuv+CuquCvjSDgrqrgrq/grqngr43grq7gr4HgrrHgr4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgrpAg4K6o4K6/4K6w4K6+4K6V4K6w4K6/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g4K614K6/4K6y4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuCujuCusuCvjeCusuCuviDgrprgrq7gr4DgrqrgrqTgr43grqTgrr/grq8g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+B4K6V4K6z4K+B4K6u4K+NIOCuteCuv+CusuCuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CuqS4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuCuruCviuCuquCviOCusuCvjSDgrrngrr7grp/gr43grrjgr43grqrgrr7grp/gr40g4K6u4K+B4K6f4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuCuruCviuCuquCviOCusuCvjSDgrrngrr7grp/gr43grrjgr43grqrgrr7grp/gr40g4K6H4K6v4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuCupOCuv+CusOCviOCur+CviCDgroXgrqngr4Hgrqrgr43grqrgr4HgrqTgrrLgr40g4K6o4K6/4K6x4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuCuquCuo+Cuv+CuquCvjSDgrqrgrq/grqngr43grq7gr4HgrrHgr4gg4K6u4K+B4K6f4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K+B4K6z4K+N4K6z4K6k4K+BLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuCuquCuo+Cuv+CuquCvjSDgrqrgrq/grqngr43grq7gr4HgrrHgr4gg4K6H4K6v4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K+B4K6z4K+N4K6z4K6k4K+BLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuCuquCuo+Cuv+CuquCvjSDgrqrgrq/grqngr43grq7gr4HgrrHgr4gg4K6u4K+B4K6f4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLgrqrgrqPgrr/grqrgr40g4K6q4K6v4K6p4K+N4K6u4K+B4K6x4K+IIOCuh+Cur+CuleCvjeCuleCuquCvjeCuquCun+CvjeCun+CupOCvgS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4K6k4K6/4K6w4K+IIOCuquCuv+CusOCuleCuvuCumuCuruCvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOCun+Cvh+Cun+CvjeCun+CuviDgrofgrp/gr4jgrqjgrr/grrHgr4HgrqTgr43grqTgrqrgr43grqrgrp/gr43grp/grqTgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyDgrp/gr4fgrp/gr43grp/grr4g4K6H4K6f4K+I4K6o4K6/4K6x4K+B4K6k4K+N4K6k4K6q4K+N4K6q4K6f4K+N4K6f4K6k4K+BIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i4K6q4K6v4K6p4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K6/4K6v4K6k4K+BIC0gPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4K614K6w4K6u4K+N4K6q4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IOCujuCumuCvjeCumuCusOCuv+CuleCvjeCuleCviCI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4K6q4K6j4K6/4K6q4K+NIOCuquCur+CuqeCvjeCuruCvgeCuseCviCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLgrprgrq7gr4DgrqrgrqTgr43grqTgrr/grq8g4K6k4K6/4K6w4K+I4K6V4K6z4K+NIOCuh+CumeCvjeCuleCvgSDgrqTgr4vgrqngr43grrHgr4Hgrq7gr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgrqrgrq/grqngr43grqrgrr7grp/gr43grp/gr4Eg4K6k4K6V4K614K6y4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4K6k4K6/4K6w4K+I4K6v4K+IIOCuquCuv+CuqeCvjSDgrprgr4bgrq/gr43grqTgrrLgr40iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i4K6k4K+H4K6f4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7grpDgrqTgr40g4K6k4K+K4K6f4K6Z4K+N4K6VIOCuruCvgeCun+Cuv+Cur+CuteCuv+CusuCvjeCusuCviC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4K6u4K+H4K6y4K+B4K6u4K+NIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuCuteCusOCusuCuvuCuseCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4K6u4K+H4K6y4K+B4K6u4K+NIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i4K6V4K6/4K6f4K+I4K6u4K6f4K+N4K6f4K6u4K6+4K6V4K6q4K+NIOCuquCuv+CusOCuvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuCumuCvhuCumeCvjeCuleCvgeCupOCvjeCupOCuvuCuleCuquCvjSDgrqrgrr/grrDgrr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i4K6k4K6p4K6/4K614K6/4K6w4K+B4K6q4K+N4K6q4K6k4K+N4K6k4K6/4K6y4K+NIOCuquCuv+CusOCuvyI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiLgrqrgr4fgrp/gr43grp/grrDgrr8g4K6a4K+H4K6u4K6/4K6q4K+N4K6q4K6+4K6p4K+NIOCuh+Cur+CuleCvjeCuleCupOCvjeCupOCuv+CusuCvjSDgrongrrPgr43grrPgrqTgr4EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i4K6a4K+G4K6v4K6y4K+N4K6k4K6/4K6x4K6p4K+I4K6v4K+B4K6u4K+NIOCuquCuv+CuqeCvjeCuquCvgeCusuCupOCvjSDgrqTgrrDgrrXgr4jgrq/gr4Hgrq7gr40g4K6V4K+B4K6x4K+I4K6V4K+N4K6V4K6/4K6x4K6k4K+BIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgrqrgr4fgrp/gr43grp/grrDgrr8g4K6a4K+H4K6u4K6/4K6q4K+N4K6q4K6+4K6p4K+IIOCuruCvgeCun+CuleCvjeCuleCvgSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLgrq7grrHgr4jgrqjgr43grqTgr4HgrrPgr43grrMg4K6J4K6z4K+N4K6z4K6f4K6V4K+N4K6V4K6u4K+NIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiLgrqTgrr/grrDgr4jgrq/grr/grrLgr40g4K6V4K6+4K6f4K+N4K6f4K6q4K+N4K6q4K6f4K+B4K6u4K+NIOCuheCuqeCviOCupOCvjeCupOCviOCur+CvgeCuruCvjSA8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IOCuquCun+CuruCvhuCun+CvgeCuleCvjeCuleCvgeCuruCvjS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4K6u4K+A4K6j4K+N4K6f4K+B4K6u4K+NIOCuleCuvuCun+CvjeCun+CuvuCupOCvhyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLgro7grrLgr43grrLgrr7grrXgrrHgr43grrHgr4jgrq/gr4Hgrq7gr40g4K6F4K604K6/Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLgrqjgrr/grrDgrr7grpXgrrDgrr8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4i4K6S4K6y4K6/4K6v4K6z4K614K+BIOCumuCvhuCur+CvjeCupOCuvzogPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuCuheCumuCusuCviCDgrq7gr4Dgrp/gr43grp/grq7gr4jgrpXgr43grpXgrqTgr40g4K6k4K+K4K6f4K614K+B4K6u4K+NLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLgrqrgrqPgrr8g4K6a4K+B4K6v4K614K6/4K614K6w4K6k4K+N4K6k4K+I4K6q4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgeCuleCuv+CuseCvgOCusOCvjeCuleCus+CvjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IlN5c3RlbSBVSSBUdW5lciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuCuieCus+CvjeCus+Cuv+Cuo+CviOCuqOCvjeCupCDgrqrgr4fgrp/gr43grp/grrDgrr8g4K6a4K6k4K614K+A4K6k4K6k4K+N4K6k4K+I4K6V4K+NIOCuleCuvuCun+CvjeCun+CvgSI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i4K6q4K+B4K6z4K+C4K6f4K+C4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCuleCuteCuvj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4K6J4K6Z4K+N4K6V4K6z4K+NIOCun+Cvh+CuquCvjeCusuCvhuCun+CvjeCun+CvgeCun+CuqeCvjSDgrrXgrr/grprgr4jgrqrgr43grqrgrrLgrpXgr4jgrq/gr4gg4K6H4K6j4K+I4K6V4K+N4K6VLCDgrq7gr4HgrqTgrrLgrr/grrLgr40g4K6q4K+B4K6z4K+C4K6f4K+C4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCulSDgrrXgr4fgrqPgr43grp/gr4Hgrq7gr40uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4K6H4K6v4K6V4K+N4K6V4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CvgeCuleCvjeCuleCvgeCuquCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLgrofgrqjgr43grqTgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6+4K6f4K+N4K6f4K6/4K6y4K6/4K6w4K+B4K6o4K+N4K6k4K+BIOCuteCusOCvgeCuruCvjSDgro7grrLgr43grrLgrr4g4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+B4K6V4K+N4K6V4K+B4K6u4K+NIOCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLgrqTgrp/gr4HgrpXgr43grpXgrqrgr43grqrgrp/gr43grp/grqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgrq7gr4HgrpXgr43grpXgrr/grq/grqTgr43grqTgr4HgrrXgrq7gr40gKOCuleCvgeCuseCviOCuteCvgSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4K6u4K+B4K6V4K+N4K6V4K6/4K6v4K6k4K+N4K6k4K+B4K614K6u4K+NICjgrofgrq/grrLgr43grqrgr4EpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuCuruCvgeCuleCvjeCuleCuv+Cur+CupOCvjeCupOCvgeCuteCuruCvjSAo4K6F4K6k4K6/4K6V4K6u4K+NKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuCuruCvgeCuleCvjeCuleCuv+Cur+CupOCvjeCupOCvgeCuteCuruCvjSAo4K6F4K614K6a4K6w4K6u4K+NKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4K6H4K6o4K+N4K6kIOCuheCuseCuv+CuteCuv+CuquCvjeCuquCvgeCuleCus+CviCDgrpLgrrDgr4Hgrqrgr4vgrqTgr4Hgrq7gr40g4K6V4K6+4K6f4K+N4K6f4K6+4K6k4K+HIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuCukuCusuCuv+Cur+Cuv+CuqeCvjeCuseCuvyDgroXgrrHgrr/grrXgrr/grqrgr43grqrgr4Hgrqrgr40g4K6q4K6f4K+N4K6f4K6/4K6v4K6y4K6/4K6p4K+NIOCuleCvgOCutOCvhyDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCukuCusuCuv+Cur+Cuv+CuqeCvjeCuseCuvyDgrofgrqjgr43grqQg4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+I4K6V4K+NIOCuleCuvuCun+CvjeCun+CvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i4K6F4K6x4K6/4K614K6/4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCuquCun+CvjeCun+Cuv+Cur+CusuCuv+CuqeCvjSDgrq7gr4fgrrLgr40g4K6q4K6V4K+B4K6k4K6/4K6v4K6/4K6y4K+NIOCukuCusuCuv+Cur+CvgeCun+CuqeCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4K6S4K6y4K6/4K6v4K+B4K6f4K6p4K+NIOCupOCuv+CusOCviOCur+Cuv+CusuCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuCuruCvh+CusuCvgeCuruCvjSDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiLgrq7gr4Hgrp/grr/grqjgr43grqTgrqTgr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLgrofgrq/grrLgr43grqrgrr7grqkg4K614K6j4K+N4K6j4K6Z4K+N4K6V4K6z4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuCuh+CusOCuteCvgeCuqOCvh+CusCDgrrXgrqPgr43grqPgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuCupOCuqeCuv+CuquCvjeCuquCur+CuqeCvjSDgrrXgrqPgr43grqPgrpngr43grpXgrrPgr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLgroXgrrHgrr/grq/grqrgr43grqrgrp/grr7grqQg4K614K6j4K+N4K6j4K6Z4K+N4K6V4K6z4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuCuteCuo+CvjeCuoyDgrq7grr7grrHgr43grrHgrq7gr40iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLgrrXgrr/grrDgr4jgrrXgr4Eg4K6F4K6u4K+I4K6q4K+N4K6q4K+B4K6V4K6z4K+NIOCun+CviOCusuCviOCuleCvjSDgrpXgrr7grp/gr43grp/gr4EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuCupOCuqeCuv+CuquCvjeCuquCur+CuqeCvjSDgrrXgrqPgr43grqMg4K6u4K6+4K6x4K+N4K6x4K6k4K+N4K6k4K+IIOCuh+Cur+CuleCvjeCuleCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuCuquCur+CuqeCvjeCuquCun+CvgeCupOCvjeCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr4gg4K6J4K6x4K+B4K6k4K6/4K6q4K+N4K6q4K6f4K+B4K6k4K+N4K6k4K+BIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i4K6a4K6/4K6yIOCuteCuo+CvjeCuoyDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr40g4K6H4K6o4K+N4K6k4K6a4K+NIOCumuCuvuCupOCuqeCupOCvjeCupOCviOCuquCvjSDgrqrgrq/grqngr43grqrgrp/gr4HgrqTgr43grqQg4K6u4K+B4K6f4K6/4K6v4K6+4K6k4K6q4K6f4K6/IOCumuCvhuCur+CvjeCur+CusuCuvuCuruCvjS4g4K6H4K6o4K+N4K6kIOCuteCuo+CvjeCuoyDgroXgrq7gr4jgrqrgr43grqrgr4HgrpXgrrPgr4gg4K6J4K6x4K+B4K6k4K6/4K6q4K+N4K6q4K6f4K+B4K6k4K+N4K6kLCDgrprgrrDgrr8g4K6O4K6p4K+N4K6q4K6k4K+I4K6V4K+NIOCuleCuv+Cus+Cuv+CuleCvjSDgrprgr4bgrq/gr43grq/grrXgr4Hgrq7gr40sIOCuh+CusuCvjeCusuCviOCur+CvhuCuqeCuv+CusuCvjSDgrofgrqjgr43grqQg4K6F4K6u4K+I4K6q4K+N4K6q4K+B4K6V4K6z4K+NIDEwIOCuteCuv+CuqeCuvuCun+Cuv+CuleCus+CvgeCuleCvjeCuleCvgeCuquCvjSDgrqrgrr/grqngr40g4K6u4K+A4K6f4K+N4K6f4K6u4K+I4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K6u4K+NLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i4K6q4K+H4K6f4K+N4K6f4K6w4K6/ICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuCumuCuvuCusOCvjeCunOCvjSDgrprgr4bgrq/gr43grq/gr4Hgrq7gr40g4K6q4K+L4K6k4K+BIOCuquCvh+Cun+CvjeCun+CusOCuvyDgrprgr4fgrq7grr/grqrgr43grqrgrr7grqngr4jgrqrgr40g4K6q4K6v4K6p4K+N4K6q4K6f4K+B4K6k4K+N4K6kIOCuruCvgeCun+Cuv+Cur+CuvuCupOCvgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLgrqrgr4fgrp/gr43grp/grrDgrr8g4K6a4K+H4K6u4K6/4K6q4K+N4K6q4K6+4K6p4K+NIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i4K6a4K+G4K6v4K6y4K+N4K6k4K6/4K6x4K6p4K+I4K6v4K+B4K6u4K+NIOCuquCuv+CuqeCvjeCuquCvgeCusuCupOCvjeCupOCuv+CusuCvjSDgrqTgrrDgrrXgr4Eg4K6a4K+G4K6v4K6y4K6+4K6V4K+N4K6V4K6q4K+N4K6q4K6f4K+B4K614K6k4K+I4K6v4K+B4K6u4K+NIOCuleCvgeCuseCviOCuleCvjeCuleCvgeCuruCvjSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ZS1ySU4vc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAppbmRleCA0NjhkMDBkLi5mNzExNTQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRlLXJJTi9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i4LCw4LC/4LCC4LCX4LCw4LGNIOCwqOCwv+CwtuCxjeCwtuCwrOCxjeCwpuCwguCwsuCxiyDgsIngsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuCwquCwqOCwvyDgsK7gsYvgsKHgsY0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuCwqOCwvyDgsKTgsYDgsLjgsL/gsLXgsYfgsK/gsILgsKHgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDgsKTgsYDgsLjgsL/gsLXgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i4LCF4LCo4LGN4LCo4LC/IOCwh+Cwn+CxgOCwteCwsuCwvyDgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKjgsL7gsLLgsYEg4LCk4LGA4LC44LC/4LC14LGH4LCv4LCs4LCh4LGN4LCh4LC+4LCv4LC/LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i4LCu4LGK4LCs4LGI4LCy4LGNIOCwueCwvuCwn+CxjeKAjOCwuOCxjeCwquCwvuCwn+CxjSDgsIbgsKvgsY0g4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuCwruCxiuCwrOCxiOCwsuCxjSDgsLngsL7gsJ/gsY3igIzgsLjgsY3gsKrgsL7gsJ/gsY0g4LCG4LCo4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvy4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLgsLjgsY3gsJXgsY3gsLDgsYDgsKjgsY0g4LCq4LGN4LCw4LC44LC+4LCw4LCCIOCwhuCwquCwv+CwteCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvy4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLgsKrgsKjgsL8g4LCu4LGL4LCh4LGNIOCwhuCwq+CxjeKAjOCwsuCxiyDgsIngsILgsKbgsL8uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i4LCq4LCo4LC/IOCwruCxi+CwoeCxjSDgsIbgsKjgsY3igIzgsLLgsYsg4LCJ4LCC4LCm4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuCwquCwqOCwvyDgsK7gsYvgsKHgsY0g4LCG4LCr4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvy4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i4LCq4LCo4LC/IOCwruCxi+CwoeCxjSDgsIbgsKjgsY0g4LCa4LGH4LCv4LCs4LCh4LC/4LCC4LCm4LC/LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLgsKrgsY3gsLDgsKbgsLDgsY3gsLbgsKgg4LCq4LGN4LCw4LCV4LC+4LC24LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cg4LCh4LGH4LCf4LC+IOCwquCwvuCwnOCxjSDgsJrgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyDgsKHgsYfgsJ/gsL4g4LCq4LC+4LCc4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiDgsLXgsL/gsKjgsL/gsK/gsYvgsJfgsL/gsILgsJrgsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDgsKrgsLDgsL/gsK7gsL/gsKTgsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g4LC54LGG4LCa4LGN4LCa4LCw4LC/4LCVIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLgsKrgsKjgsL8g4LCu4LGL4LCh4LGNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuCwruCxgCDgsIfgsJ/gsYDgsLXgsLLgsL8g4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LCy4LGBIOCwh+CwleCxjeCwleCwoSDgsJXgsKjgsL/gsKrgsL/gsLjgsY3gsKTgsL7gsK/gsL8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLgsIXgsKjgsYHgsLXgsLDgsY3gsKTgsKgg4LC44LCu4LC+4LCa4LC+4LCw4LCCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGNIOCwquCwv+CwqOCxjeCwqOCwv+CwguCwl+CxjSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLgsLbgsYvgsKfgsL/gsILgsJrgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuCwqOCwvyDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsKHgsIIg4LC44LC+4LCn4LGN4LCv4LCq4LCh4LCy4LGH4LCm4LGBLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLgsK7gsLDgsL/gsILgsKQiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4i4LCa4LCw4LC/4LCk4LGN4LCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiLgsK7gsLDgsYsgPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLgsLjgsK7gsKTgsLLgsILgsJfgsL4g4LC14LC/4LCt4LCc4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4i4LCy4LCC4LCs4LCC4LCX4LC+IOCwteCwv+CwreCwnOCwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLgsIXgsKjgsYHgsJXgsYLgsLLgsILgsJfgsL4g4LC14LC/4LCt4LCc4LC/4LCC4LCa4LGBIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuCwrOCxjeCwr+CwvuCwn+CwsOCxjSDgsLjgsYfgsLXgsLDgsY0g4LCG4LCo4LGNIOCwmuCxh+Cwr+CwrOCwoeCwv+CwguCwpuCwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLgsKrgsKjgsL/gsKTgsYDgsLDgsYHgsKjgsL8g4LCu4LCw4LC/4LCv4LGBIOCwqOCxh+CwquCwpeCxjeCwryDgsKHgsYfgsJ/gsL7gsKjgsYEg4LCk4LCX4LGN4LCX4LC/4LC44LGN4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiLgsKzgsY3gsK/gsL7gsJ/gsLDgsYAg4LC44LGH4LC14LCw4LGN4oCM4LCo4LGBIOCwhuCwq+CxjSDgsJrgsYfgsK/gsL8iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i4LCV4LCC4LCf4LGG4LCC4LCf4LGN4oCM4LCy4LGBIOCwpuCwvuCwmuCwrOCwoeCxjeCwoeCwvuCwr+CwvyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDgsK7gsYAg4LC44LGN4LCV4LGN4LCw4LGA4LCo4LGN4oCM4LCq4LGIIOCwleCwqOCwv+CwquCwv+CwguCwmuCxhyDgsKrgsY3gsLDgsKTgsL/gsKbgsL7gsKjgsY3gsKjgsL8g4LCV4LGN4LCv4LC+4LCq4LGN4LCa4LCw4LGNIOCwmuCxh+Cwr+CwoeCwgiDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsLjgsY3gsKTgsYHgsILgsKbgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuCwruCws+CxjeCwsuCxgCDgsJrgsYLgsKrgsLXgsKbgsY3gsKbgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4i4LCF4LCo4LGN4LCo4LGAIOCwleCxjeCwsuCwv+Cwr+CwsOCxjSDgsJrgsYfgsK/gsILgsKHgsL8iPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuCwpOCwv+CwsOCwuOCxjeCwleCwsOCwv+CwguCwmuCxgSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IOCwheCwqOCxh+CwpuCwvyDgsLXgsL7gsLLgsY3gsK/gsYLgsK7gsY0g4LCh4LGI4LCy4LC+4LCX4LGNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i4LCF4LC44LCy4LGB4LCm4LC+4LCo4LGN4LCo4LC/IOCwquCxgeCwqOCwsOCxgeCwpuCxjeCwp+CwsOCwv+CwguCwmuCwoeCwvuCwqOCwv+CwleCwvyDgsKTgsL7gsJXgsILgsKHgsL8uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuCwruCxgOCwsOCxgSDgsK7gsYAg4LCV4LC+4LCw4LGN4LCv4LC+4LCy4LCvIOCwquCxjeCwsOCxiuCwq+CxiOCwsuCxjeKAjOCwqOCxgSDgsIngsKrgsK/gsYvgsJfgsL/gsLjgsY3gsKTgsYHgsKjgsY3gsKjgsL7gsLDgsYEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLgsLjgsL/gsLjgsY3gsJ/gsK7gsY0gVUkg4LCf4LGN4LCv4LGC4LCo4LCw4LGNIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i4LCq4LGK4LCC4LCm4LGB4LCq4LCw4LC/4LCa4LC/4LCoIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLbgsL7gsKTgsIIg4LCa4LGC4LCq4LGBIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLgsKzgsY3gsLLgsYLgsJ/gsYLgsKTgsY0g4LCG4LCo4LGNIOCwmuCxh+Cwr+CwvuCwsuCwvj8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i4LCu4LGAIOCwleCxgOCwrOCxi+CwsOCxjeCwoeCxjeKAjOCwqOCxgSDgsK7gsYAg4LCf4LC+4LCs4LGN4LCy4LGG4LCf4LGN4oCM4LCk4LGLIOCwleCwqOCxhuCwleCxjeCwn+CxjSDgsJrgsYfgsK/gsKHgsL7gsKjgsL/gsJXgsL8sIOCwruCxgOCwsOCxgSDgsK7gsYHgsILgsKbgsYHgsJfgsL4g4LCs4LGN4LCy4LGC4LCf4LGC4LCk4LGNIOCwhuCwqOCxjSDgsJrgsYfgsK/gsL7gsLLgsL8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4LCG4LCo4LGNIOCwmuCxh+Cwr+CwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+Ijx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLLgsJXgsYEg4LC14LCw4LGN4LCk4LC/4LCC4LCq4LCc4LGH4LCv4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i4LCIIOCwheCwqOCxgeCwteCwsOCxjeCwpOCwqOCwgiDgsKjgsYHgsILgsKHgsL8g4LCF4LCC4LCm4LC/4LCC4LCa4LCs4LCh4LGHIOCwheCwqOCxjeCwqOCwvyDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLLgsJXgsYEg4LC14LCw4LGN4LCk4LC/4LCC4LCq4LCc4LGH4LCv4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuCwrOCxjeCwsuCwvuCwleCxjSDgsJrgsYfgsK/gsKzgsKHgsL/gsILgsKbgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLgsKTgsJXgsY3gsJXgsYHgsLUg4LCq4LGN4LCw4LC+4LCu4LGB4LCW4LGN4LCv4LCkIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuCwuOCwvuCwp+CwvuCwsOCwoyDgsKrgsY3gsLDgsL7gsK7gsYHgsJbgsY3gsK/gsKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i4LCF4LCn4LC/4LCVIOCwquCxjeCwsOCwvuCwruCxgeCwluCxjeCwr+CwpCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuCwheCwpOCxjeCwr+CwteCwuOCwsCDgsKrgsY3gsLDgsL7gsK7gsYHgsJbgsY3gsK/gsKQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuCwiCDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLLgsKjgsYEg4LCO4LCq4LGN4LCq4LGB4LCh4LGCIOCwmuCxguCwquCwpuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLIg4LCc4LC+4LCs4LC/4LCk4LC+IOCwpuCwv+Cwl+CxgeCwtSDgsK3gsL7gsJfgsILgsLLgsYsg4LC24LCs4LGN4LCm4LCCIOCwsuCxh+CwleCxgeCwguCwoeCwviDgsJrgsYLgsKrgsYHgsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuCwiCDgsKjgsYvgsJ/gsL/gsKvgsL/gsJXgsYfgsLfgsKjgsY3igIzgsLLgsKjgsYEg4LC24LCs4LGN4LCm4LCCIOCwsuCxh+CwleCxgeCwguCwoeCwviDgsJrgsYLgsKrgsYHgsKTgsYHgsILgsKbgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IuCwqOCxi+Cwn+Cwv+Cwq+Cwv+CwleCxh+Cwt+CwqOCxjeKAjOCwsiDgsJzgsL7gsKzgsL/gsKTgsL4g4LCO4LCX4LGB4LC1IOCwreCwvuCwl+CwguCwsuCxiyDgsLbgsKzgsY3gsKbgsILgsKTgsYsg4LCa4LGC4LCq4LGB4LCk4LGB4LCC4LCm4LC/Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuCwuOCxjeCwleCxjeCwsOCxgOCwqOCxjeKAjOCwquCxiCDgsLbgsYDgsJjgsY3gsLDgsILgsJfgsL4g4LC24LCs4LGN4LCm4LCC4LCk4LGLIOCwmuCxguCwquCxgeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4LCu4LCw4LC/4LCo4LGN4LCo4LC/IOCwuOCxhuCwn+CxjeCwn+Cwv+CwguCwl+CxjeKAjOCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuCwquCxguCwsOCxjeCwpOCwr+Cwv+CwguCwpuCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuCwuOCwvuCwp+CwvuCwsOCwoyDgsLDgsILgsJfgsYHgsLLgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i4LCw4LC+4LCk4LGN4LCw4LC/IOCwsOCwguCwl+CxgeCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4LCF4LCo4LGB4LCV4LGC4LCyIOCwsOCwguCwl+CxgeCwsuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuCwpOCxhuCwsuCwv+Cwr+CwqOCwvyDgsLDgsILgsJfgsYHgsLLgsYEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4i4LCw4LCC4LCX4LGBIOCwuOCwteCwsOCwoyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuCwtuCxgOCwmOCxjeCwsCDgsLjgsYbgsJ/gsY3gsJ/gsL/gsILgsJfgsY3igIzgsLIg4LCf4LGI4LCy4LGN4oCM4LCo4LGBIOCwmuCxguCwquCwguCwoeCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4LCF4LCo4LGB4LCV4LGC4LCyIOCwquCwsOCwv+CwteCwsOCxjeCwpOCwqOCwqOCxgSDgsKrgsY3gsLDgsL7gsLDgsILgsK3gsL/gsILgsJrgsILgsKHgsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiLgsLXgsLDgsY3gsKTgsL/gsILgsKrgsJzgsYfgsK/gsL8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i4LC44LGG4LCf4LGN4LCf4LC/4LCC4LCX4LGN4oCM4LCy4LCo4LGBIOCwqOCwv+CwsOCxjeCwp+CwvuCwsOCwv+CwguCwmuCwguCwoeCwvyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuCwleCxiuCwqOCxjeCwqOCwvyDgsLDgsILgsJfgsYEg4LC44LGG4LCf4LGN4LCf4LC/4LCC4LCX4LGN4oCM4LCyIOCwteCwsuCwqCDgsIgg4LCq4LCw4LC/4LCV4LCw4LCCIOCwieCwquCwr+Cxi+Cwl+Cwv+CwguCwmuCwsuCxh+CwqOCwvyDgsLXgsL/gsKfgsILgsJfgsL4g4LCF4LCv4LC/4LCq4LGL4LC14LCa4LGN4LCa4LGBLiDgsIgg4LCw4LCC4LCX4LGBIOCwuOCxhuCwn+CxjeCwn+Cwv+CwguCwl+CxjeKAjOCwsuCwqOCxgSDgsKjgsL/gsLDgsY3gsKfgsL7gsLDgsL/gsILgsJrgsKHgsL7gsKjgsL/gsJXgsL8g4LC44LCw4LGHIOCwleCxjeCwsuCwv+CwleCxjSDgsJrgsYfgsK/gsILgsKHgsL8g4LCy4LGH4LCm4LCC4LCf4LGHIOCwiCDgsLjgsYbgsJ/gsY3gsJ/gsL/gsILgsJfgsY3igIzgsLLgsYEgMTAg4LC44LGG4LCV4LCo4LGN4LCyIOCwpOCwsOCxjeCwteCwvuCwpCDgsLDgsYDgsLjgsYbgsJ/gsY0g4LCa4LGH4LCv4LCs4LCh4LCk4LC+4LCv4LC/LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i4LCs4LGN4LCv4LC+4LCf4LCw4LGAICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuCwm+CwvuCwsOCxjeCwnOCxjSDgsIXgsLXgsYHgsKTgsYHgsKjgsY3gsKgg4LC44LCu4LCv4LCC4LCy4LGLIOCwrOCxjeCwr+CwvuCwn+CwsOCxgCDgsLjgsYfgsLXgsLDgsY0g4LCF4LCC4LCm4LGB4LCs4LC+4LCf4LGB4LCy4LGLIOCwieCwguCwoeCwpuCxgSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLgsKzgsY3gsK/gsL7gsJ/gsLDgsYAg4LC44LGH4LC14LCw4LGNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i4LCq4LCo4LC/4LCk4LGA4LCw4LGB4LCo4LC/IOCwruCwsOCwv+Cwr+CxgSDgsKjgsYfgsKrgsKXgsY3gsK8g4LCh4LGH4LCf4LC+4LCo4LGBIOCwpOCwl+CxjeCwl+Cwv+CwuOCxjeCwpOCxgeCwguCwpuCwvyI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGgvc3RyaW5ncy54bWwKaW5kZXggMTMwYThiZi4uOGMyODRhMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10aC9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRoL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLguYDguKrguLXguKLguIfguYDguKPguLXguKLguIHguYDguILguYnguLLguYHguJrguJrguJvguLTguJTguYDguKrguLXguKLguIciPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i4LmC4Lir4Lih4LiU4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLguKLguIHguYDguKXguLTguIEgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDguJbguLnguIHguKXguJrguYTguJvguYHguKXguYnguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiLguJvguLTguJTguYHguK3guJvguJ7guKXguLTguYDguITguIrguLHguJnguKXguYjguLLguKrguLjguJTguJfguLHguYnguIfguKvguKHguJTguYHguKXguYnguKciPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+IuC4m+C4tOC4lOC4ruC4reC4leC4quC4m+C4reC4leC5gOC4hOC4peC4t+C5iOC4reC4meC4l+C4teC5iOC5geC4peC5ieC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+IuC5gOC4m+C4tOC4lOC4ruC4reC4leC4quC4m+C4reC4leC5gOC4hOC4peC4t+C5iOC4reC4meC4l+C4teC5iOC5geC4peC5ieC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IuC4q+C4ouC4uOC4lOC4geC4suC4o+C4quC5iOC4h+C4q+C4meC5ieC4suC4iOC4reC5geC4peC5ieC4pyI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IuC5guC4q+C4oeC4lOC4geC4suC4o+C4l+C4s+C4h+C4suC4meC4m+C4tOC4lOC4reC4ouC4ueC5iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+IuC5guC4q+C4oeC4lOC4geC4suC4o+C4l+C4s+C4h+C4suC4meC5gOC4m+C4tOC4lOC4reC4ouC4ueC5iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+IuC4m+C4tOC4lOC5guC4q+C4oeC4lOC4geC4suC4o+C4l+C4s+C4h+C4suC4meC5geC4peC5ieC4pyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24iIG1zZ2lkPSIyNDk4NDAzMzA3NTY5OTg2MTIiPiLguYDguJvguLTguJTguYLguKvguKHguJTguIHguLLguKPguJfguLPguIfguLLguJnguYHguKXguYnguKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4i4LiE4Lin4Liy4Lih4Liq4Lin4LmI4Liy4LiH4LiC4Lit4LiH4Lir4LiZ4LmJ4Liy4LiI4LitIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i4Lir4Lii4Li44LiU4LiB4Liy4Lij4LmD4LiK4LmJ4LiC4LmJ4Lit4Lih4Li54LilIDJHLTNHIOC4iuC4seC5iOC4p+C4hOC4o+C4suC4p+C5geC4peC5ieC4pyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IuC4q+C4ouC4uOC4lOC4geC4suC4o+C5g+C4iuC5ieC4guC5ieC4reC4oeC4ueC4pSA0RyDguIrguLHguYjguKfguITguKPguLLguKfguYHguKXguYnguKciPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiLguYPguIrguYnguYTguJvguYHguKXguYnguKcgPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IuC4guC4teC4lOC4iOC4s+C4geC4seC4lCA8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiLguITguLPguYDguJXguLfguK3guJkgPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i4LmC4Lir4Lih4LiU4LiB4Liy4Lij4LiX4Liz4LiH4Liy4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+IuC4q+C4meC5ieC4suC4iOC4reC4peC5iOC4suC4quC4uOC4lOC4guC4reC4h+C4hOC4uOC4k+C5geC4quC4lOC4h+C4l+C4teC5iOC4meC4teC5iCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IuC4guC5ieC4reC4oeC4ueC4peC5geC4reC4m+C4nuC4peC4tOC5gOC4hOC4iuC4seC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+IuC4geC4suC4o+C4leC4o+C4tuC4h+C4q+C4meC5ieC4suC4iOC4rSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLguITguYnguJnguKvguLIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5gOC4o+C4tOC5iOC4oeC5g+C4iuC5iSA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i4LmA4Lie4Li04LmI4Lih4LmA4LiV4Li04LihIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuC4m+C4o+C4sOC4p+C4seC4leC4tCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i4Lit4Li14LiBIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDguIfguLLguJkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuC5geC4ouC4geC5g+C4meC5geC4meC4p+C4meC4reC4mSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuC5geC4ouC4geC5g+C4meC5geC4meC4p+C4leC4seC5ieC4hyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLguYHguKLguIHguYHguJrguJrguIHguLPguKvguJnguJTguYDguK3guIciPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i4LmA4Lib4Li04LiU4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmI4Lit4Lii4Li54LmIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IuC4peC4lOC4geC4suC4o+C5g+C4iuC5ieC5geC4muC4leC5gOC4leC4reC4o+C4teC5iOC5geC4peC4sOC4guC5ieC4reC4oeC4ueC4peC5geC4muC5h+C4geC4geC4o+C4suC4p+C4lOC5jCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i4Lib4Li04LiU4LmC4Lir4Lih4LiU4Lib4Lij4Liw4Lir4Lii4Lix4LiU4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmIIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuC5gOC4meC4t+C5ieC4reC4q+C4suC4luC4ueC4geC4i+C5iOC4reC4meC5hOC4p+C5iSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDguIjguLDguYDguKPguLTguYjguKHguIjguLHguJrguKDguLLguJ7guJfguLjguIHguK3guKLguYjguLLguIfguJfguLXguYjguYHguKrguJTguIfguJrguJnguKvguJnguYnguLLguIjguK0iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiH4LiC4LmJ4Lit4LiE4Lin4Liy4Lih4LiZ4Li14LmJ4Lit4Li14LiBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuC4peC5ieC4suC4h+C4l+C4seC5ieC4h+C4q+C4oeC4lCI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i4Lib4LiP4Li04LmA4Liq4LiYIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g4LmA4Lib4LmH4LiZ4LiK4LmI4Lit4LiH4LmC4LiV4LmJ4LiV4Lit4Lia4Lij4Liw4LiU4Lix4Lia4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i4LmB4LiV4Liw4LmA4Lie4Li34LmI4Lit4LiE4Li34LiZ4LiE4LmI4Liy4LiU4Lix4LmJ4LiH4LmA4LiU4Li04LihIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiIsICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuC4hOC4uOC4k+C4geC4s+C4peC4seC4h+C5g+C4iuC5ieC5guC4m+C4o+C5hOC4n+C4peC5jOC4h+C4suC4meC4guC4reC4h+C4hOC4uOC4kyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IuC4leC4seC4p+C4o+C4seC4muC4quC4seC4jeC4jeC4suC4kyBVSSDguKPguLDguJrguJoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLguYHguKrguJTguIfguYDguJvguK3guKPguYzguYDguIvguYfguJnguJXguYzguILguK3guIfguYHguJrguJXguYDguJXguK3guKPguLXguYjguYPguJnguJXguLHguKciPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuC5gOC4m+C4tOC4lOC4muC4peC4ueC4l+C4ueC4mOC5hOC4q+C4oSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLguKvguLLguIHguJXguYnguK3guIfguIHguLLguKPguYDguIrguLfguYjguK3guKHguJXguYjguK3guYHguJvguYnguJnguJ7guLTguKHguJ7guYzguIHguLHguJrguYHguJfguYfguJrguYDguKXguYfguJUg4LiE4Li44LiT4LiV4LmJ4Lit4LiH4LmA4Lib4Li04LiU4Lia4Lil4Li54LiX4Li54LiY4LiB4LmI4Lit4LiZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i4LmA4Lib4Li04LiUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i4LiZ4Liz4LmE4Lib4LmD4LiK4LmJ4LiB4Lix4Lia4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IuC4meC4s+C5hOC4m+C5g+C4iuC5ieC4geC4seC4muC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC4l+C4seC5ieC4h+C4q+C4oeC4lOC4iOC4suC4geC5geC4reC4m+C4meC4teC5iSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLguJrguKXguYfguK3guIHguYHguKXguYnguKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLguITguKfguLLguKHguKrguLPguITguLHguI3guJXguYjguLMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i4LiE4Lin4Liy4Lih4Liq4Liz4LiE4Lix4LiN4Lib4LiB4LiV4Li0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+IuC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC4quC4ueC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+IuC4hOC4p+C4suC4oeC4quC4s+C4hOC4seC4jeC5gOC4o+C5iOC4h+C4lOC5iOC4p+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4i4LmE4Lih4LmI4LiV4LmJ4Lit4LiH4LmB4Liq4LiU4LiH4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmA4Lir4Lil4LmI4Liy4LiZ4Li14LmJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IuC5geC4quC4lOC4h+C4l+C4teC5iOC4lOC5ieC4suC4meC4peC5iOC4suC4h+C4guC4reC4h+C4o+C4suC4ouC4geC4suC4o+C5geC4iOC5ieC4h+C5gOC4leC4t+C4reC4meC5guC4lOC4ouC5hOC4oeC5iOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiIG1zZ2lkPSI0OTI2NTI5NjE1OTIwNjEwODE3Ij4i4LmB4Liq4LiU4LiH4LiB4Liy4Lij4LmB4LiI4LmJ4LiH4LmA4LiV4Li34Lit4LiZ4LmA4Lir4Lil4LmI4Liy4LiZ4Li14LmJ4LmC4LiU4Lii4LmE4Lih4LmI4Liq4LmI4LiH4LmA4Liq4Li14Lii4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLguYHguKrguJTguIfguJfguLXguYjguJTguYnguLLguJnguJrguJnguILguK3guIfguKPguLLguKLguIHguLLguKPguYHguIjguYnguIfguYDguJXguLfguK3guJnguYHguKXguLDguKrguYjguIfguYDguKrguLXguKLguIciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i4LmB4Liq4LiU4LiH4Lia4LiZ4Lir4LiZ4LmJ4Liy4LiI4Lit4LmD4LiZ4LiK4LmI4Lin4LiH4LmA4Lin4Lil4Liy4Liq4Lix4LmJ4LiZ4LmGIOC5geC4peC4sOC4quC5iOC4h+C5gOC4quC4teC4ouC4hyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4LmA4Lie4Li04LmI4Lih4LmA4LiV4Li04LihIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i4LmA4Liq4Lij4LmH4LiI4Liq4Li04LmJ4LiZIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i4Liq4Li14Lib4LiB4LiV4Li0Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuC4quC4teC4ouC4suC4oeC4hOC5iOC4s+C4hOC4t+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i4Liq4Li14LiX4Li14LmI4LiB4Liz4Lir4LiZ4LiU4LmA4Lit4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i4Liq4Li14LiX4Li14LmI4LmE4Lih4LmI4Lij4Li54LmJ4LiI4Lix4LiBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuC4geC4suC4o+C4m+C4o+C4seC4muC5gOC4m+C4peC4teC5iOC4ouC4meC4quC4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuC5geC4quC4lOC4h+C5hOC4l+C4peC5jOC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4lOC5iOC4p+C4mSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i4LmA4Lib4Li04LiU4LmD4LiK4LmJ4LiB4Liy4Lij4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LiX4Li14LmI4LiB4Liz4Lir4LiZ4LiU4LmA4Lit4LiHIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i4LmD4LiK4LmJIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuC4ouC4t+C4meC4ouC4seC4meC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4siI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IuC4geC4suC4o+C4leC4seC5ieC4h+C4hOC5iOC4suC4quC4teC4muC4suC4h+C4reC4ouC5iOC4suC4h+C4reC4suC4iOC4l+C4s+C5g+C4q+C5ieC4reC4uOC4m+C4geC4o+C4k+C5jOC4meC4teC5ieC5g+C4iuC5ieC4h+C4suC4meC5hOC4oeC5iOC5hOC4lOC5iSDguITguKXguLTguIHguJXguIHguKXguIfguYDguJ7guLfguYjguK3guKLguLfguJnguKLguLHguJnguIHguLLguKPguJXguLHguYnguIfguITguYjguLLguKrguLXguYDguKvguKXguYjguLLguJnguLXguYkg4Lih4Li04LiJ4Liw4LiZ4Lix4LmJ4LiZ4Lij4Liw4Lia4Lia4LiI4Liw4Lij4Li14LmA4LiL4LmH4LiV4LiB4Liy4Lij4LiV4Lix4LmJ4LiH4LiE4LmI4Liy4Lir4Lil4Lix4LiH4LiI4Liy4LiBIDEwIOC4p+C4tOC4meC4suC4l+C4tSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i4LmB4Lia4LiV4LmA4LiV4Lit4Lij4Li14LmIICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuC5hOC4oeC5iOC4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC5guC4q+C4oeC4lOC4m+C4o+C4sOC4q+C4ouC4seC4lOC5geC4muC4leC5gOC4leC4reC4o+C4teC5iOC4o+C4sOC4q+C4p+C5iOC4suC4h+C4geC4suC4o+C4iuC4suC4o+C5jOC4iCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLguYLguKvguKHguJTguJvguKPguLDguKvguKLguLHguJTguYHguJrguJXguYDguJXguK3guKPguLXguYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLguKXguJTguJvguKPguLDguKrguLTguJfguJjguLTguKDguLLguJ7guIHguLLguKPguJfguLPguIfguLLguJnguYHguKXguLDguILguYnguK3guKHguLnguKXguYHguJrguYfguIHguIHguKPguLLguKfguJTguYwiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRsL3N0cmluZ3MueG1sCmluZGV4IDI1NDZjOWUuLjMzZTU5NjggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdGwvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10bC9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iTmFrYS1zaWxlbnQgYW5nIHJpbmdlci4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iV29yayBtb2RlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJJLWRpc21pc3MgYW5nIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iSGluZGkgcGluYW5zaW4gYW5nIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJOYS1kaXNtaXNzIGFuZyBsYWhhdCBuZyBrYW1ha2FpbGFuZyBhcHBsaWNhdGlvbi4iPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+Ik5hLW9mZiBhbmcgbW9iaWxlIGhvdHNwb3QuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4iTmEtb24gYW5nIG1vYmlsZSBob3RzcG90LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+Ikl0aW5pZ2lsIGFuZyBwYWdrYS1jYXN0IHNhIHNjcmVlbi4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJOYWthLW9mZiBhbmcgd29yayBtb2RlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+Ik5ha2Etb24gYW5nIHdvcmsgbW9kZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJOYS1vZmYgYW5nIHdvcmsgbW9kZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iTmEtb24gYW5nIHdvcmsgbW9kZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4iTGl3YW5hZyBuZyBkaXNwbGF5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iTmFrYS1wYXVzZSBhbmcgMkctM0cgZGF0YSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+Ik5ha2EtcGF1c2UgYW5nIDRHIGRhdGEiPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiI8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4gYW5nIG5hZ2FtaXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBhbmcgbGltaXRhc3lvbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQmFiYWxhIHNhIDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IldvcmsgbW9kZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJMdW1hbGFiYXMgZGl0byBhbmcgaXlvbmcgbWdhIGthbWFrYWlsYW5nIHNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IkltcG9ybWFzeW9uIG5nIEFwcGxpY2F0aW9uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4icGFncGktcGluIHNhIHNjcmVlbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiJtYWdoYW5hcCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4iSGluZGkgbWFzaW11bGFuIDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iSGlnaXQgcGEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiIG1zZ2lkPSIzMDc2MjEzODIzMzgyMTk4Mjg3Ij4iSGlzdG9yeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IFBhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJTcGxpdCBIb3Jpem9udGFsIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iU3BsaXQgVmVydGljYWwiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iU3BsaXQgQ3VzdG9tIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Ik5ha2Etb24gYW5nIHRhZ2F0aXBpZCBuZyBiYXRlcnlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IkJpbmFiYXdhc2FuIGFuZyBwYWdnYW5hcCBhdCBkYXRhIHNhIGJhY2tncm91bmQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+Ikktb2ZmIGFuZyBwYWd0aXRpcGlkIG5nIGJhdGVyeWEiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iTmFrYXRhZ28gYW5nIG1nYSBjb250ZW50Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiJTaXNpbXVsYW4gbmcgaS1jYXB0dXJlIG5nIDx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gYW5nIGxhaGF0IG5nIGlwaW5hcGFraXRhIHNhIGl5b25nIHNjcmVlbi4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iSHV3YWcgaXBha2l0YW5nIG11bGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iSS1jbGVhciBsYWhhdCI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iVGFuZ2dpaGFuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+IkFuZyA8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IGFuZyB2b2x1bWUgZGlhbG9nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iUGluZHV0aW4gdXBhbmcgaWJhbGlrIGFuZyBvcmloaW5hbC4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IiwgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4iR2luYWdhbWl0IG1vIGFuZyBpeW9uZyBwcm9maWxlIHNhIHRyYWJhaG8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJUdW5lciBuZyBTeXN0ZW0gVUkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJJcGFraXRhIGFuZyBuYWthLWVtYmVkIG5hIHBvcnN5ZW50byBuZyBiYXRlcnlhIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJJLW9uIGFuZyBCbHVldG9vdGg/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IlVwYW5nIGlrb25la3RhIGFuZyBpeW9uZyBrZXlib2FyZCBzYSBpeW9uZyB0YWJsZXQsIGthaWxhbmdhbiBtbyBtdW5hbmcgaS1vbiBhbmcgQmx1ZXRvb3RoLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Ikktb24iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiJOYWFhbmdrb3Agc2EgbWdhIG5vdGlmaWNhdGlvbiB0dW5na29sIHNhIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Ik5hYWFuZ2tvcCBzYSBsYWhhdCBuZyBub3RpZmljYXRpb24gbXVsYSBzYSBhcHAgbmEgaXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+Ik5hLWJsb2NrIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iSGluZGkgbWFzeWFkb25nIG1haGFsYWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Ik1haGFsYWdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ik5hcGFrYWhhbGFnYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im1heF9pbXBvcnRhbmNlIiBtc2dpZD0iNTA4OTAwNTg3MjcxOTU2Mzg5NCI+Ik1haGFsYWdhbmctbWFoYWxhZ2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+Ikh1d2FnIGthaWxhbm1hbiBpcGFraXRhIGFuZyBtZ2Egbm90aWZpY2F0aW9uIG5hIGl0byI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJUYWhpbWlrIG5hIGlwYWtpdGEgc2EgaWJhYmEgbmcgbGlzdGFoYW4gbmcgbm90aWZpY2F0aW9uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJUYWhpbWlrIG5hIGlwYWtpdGEgYW5nIG1nYSBub3RpZmljYXRpb24gbmEgaXRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJJcGFraXRhIHNhIGl0YWFzIG5nIGxpc3RhaGFuIG5nIG1nYSBub3RpZmljYXRpb24gYXQgbWFnLXBsYXkgbmcgdHVub2ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4iSXBhc2lsaXAgc2Egc2NyZWVuIGF0IG1hZy1wbGF5IG5nIHR1bm9nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiJIaWdpdCBwYW5nIG1nYSBzZXR0aW5nIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVGFwb3MgTmEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJNZ2Ega2FyYW5pd2FuZyBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJNYWRpZGlsaW0gbmEga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+Ik1nYSBjdXN0b20gbmEga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJNZ2EgaGluZGkga2lsYWxhbmcga3VsYXkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUGFnYmFnbyBzYSBrdWxheSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IklwYWtpdGEgYW5nIHRpbGUgbmcgTWdhIE1hYmlsaXNhbmcgU2V0dGluZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iSS1lbmFibGUgYW5nIGN1c3RvbSBuYSBwYWdwYWxpdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IklsYXBhdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJLdW1waXJtYWhpbiBhbmcgbWdhIHNldHRpbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJNYWFhcmluZyBoaW5kaSBtYWdhbWl0IGFuZyBkZXZpY2UgbmEgaXRvIGRhaGlsIHNhIGlsYW5nIHNldHRpbmcgbmcga3VsYXkuIEktY2xpY2sgYW5nIE9LIHVwYW5nIGt1bXBpcm1haGluIGFuZyBtZ2Egc2V0dGluZyBuZyBrdWxheSBuYSBpdG8sIGt1bmcgaGluZGkgYXkgbWFyZS1yZXNldCBhbmcgbWdhIHNldHRpbmcgbmEgaXRvIHBhZ2thdGFwb3MgbmcgMTAgc2VndW5kby4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IkJhdGVyeWEgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4iSGluZGkgYXZhaWxhYmxlIGFuZyBQYW5ndGlwaWQgc2EgQmF0ZXJ5YSBrYXBhZyBuYWdjaGEtY2hhcmdlIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+IlBhbmd0aXBpZCBzYSBCYXRlcnlhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iQmluYWJhd2FzYW4gYW5nIHBhZ2dhbmFwIGF0IGRhdGEgc2EgYmFja2dyb3VuZCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdHIvc3RyaW5ncy54bWwKaW5kZXggYzlhYTFmNS4uZDkzN2RjMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy10ci9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXRyL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJUZWxlZm9uIHppbGkgc2Vzc2l6LiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLDh2FsxLHFn21hIG1vZHUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiB1eWd1bGFtYXPEsW7EsSBrYXBhdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+IGthbGTEsXLEsWxkxLEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iVMO8bSBzb24gdXlndWxhbWFsYXIga2FwYXTEsWxkxLEuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpbCBob3RzcG90IGthcGF0xLFsZMSxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsIGhvdHNwb3QgYcOnxLFsZMSxLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkVrcmFuIHlhecSxbsSxIGR1cmR1cnVsZHUuIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iw4dhbMSxxZ9tYSBtb2R1IGthcGFsxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iw4dhbMSxxZ9tYSBtb2R1IGHDp8Sxay4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLDh2FsxLHFn21hIG1vZHUga2FwYXTEsWxkxLEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IsOHYWzEscWfbWEgbW9kdSBhw6fEsWxkxLEuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IkVrcmFuIHBhcmxha2zEscSfxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiIyRy0zRyB2ZXJpIGt1bGxhbsSxbcSxIGR1cmFrbGF0xLFsZMSxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4iNEcgdmVyaSBrdWxsYW7EsW3EsSBkdXJha2xhdMSxbGTEsSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBrdWxsYW7EsWxkxLEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4iU8SxbsSxcjogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiB1eWFyxLFzxLEiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IsOHYWzEscWfbWEgbW9kdSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiJTb24gZWtyYW5sYXLEsW7EsXogYnVyYWRhIGfDtnLDvG7DvHIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJVeWd1bGFtYSBCaWxnaWxlcmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiJla3JhbiBzYWJpdGxlbWUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4iYXJhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gYmHFn2xhdMSxbGFtYWTEsS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iRGnEn2VyIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikdlw6dtacWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gVGFuZSBEYWhhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJZYXRheSBBecSxcm1hIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iRGlrZXkgQXnEsXJtYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLDlnplbCBBecSxcm1hIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IlBpbCB0YXNhcnJ1ZnUgYcOnxLFrIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlBlcmZvcm1hbnPEsSB2ZSBhcmthIHBsYW4gdmVyaWxlcmluaSBhemFsdMSxciI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iUGlsIHRhc2FycnVmdW51IGthcGF0Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IsSww6dlcmlrIGdpemxlbmRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+LCBla3JhbsSxbsSxemRhIGfDtnLDvG50w7xsZW5lbiBoZXIgxZ9leWkga2F5ZGV0bWV5ZSBiYcWfbGF5YWNhay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4iQmlyIGRhaGEgZ8O2c3Rlcm1lIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IlTDvG3DvCB0ZW1pemxlIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJSZWRkZXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBzZXMgZGVuZXRpbWkgaWxldGnFn2ltIGt1dHVzdSBvbGFyYWsgYXlhcmxhbmTEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+Ik9yaWppbmFsaSBnZXJpIHnDvGtsZW1layBpw6dpbiBkb2t1bnVuLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLEsMWfIHByb2ZpbGluaXppIGt1bGxhbsSxeW9yc3VudXoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTaXN0ZW0gQXJhecO8esO8IEF5YXJsYXnEsWPEsXPEsSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IlllcmxlxZ9payBwaWwgecO8emRlc2luaSBnw7ZzdGVyIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJCbHVldG9vdGggYcOnxLFsc8SxbiBtxLE/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IktsYXZ5ZW5pemkgdGFibGV0aW5pemUgYmHEn2xhbWFrIGnDp2luIMO2bmNlIEJsdWV0b290aFwndSBhw6dtYW7EsXogZ2VyZWtpci4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJBw6ciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4gYmlsZGlyaW1sZXJpbmUgdXlndWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iQnUgdXlndWxhbWFkYW4gZ2VsZW4gdMO8bSBiaWxkaXJpbWxlcmUgdXlndWxhbnPEsW4gbcSxPyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJFbmdlbGxlbmRpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4iw5ZuZW0gZMO8emV5aSBkw7zFn8O8ayI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLDlm5lbSBkw7x6ZXlpIG5vcm1hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLDlm5lbSBkw7x6ZXlpIHnDvGtzZWsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLDlm5lbSBkw7x6ZXlpIGFjaWwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IkJ1IGJpbGRpcmltbGVyaSBoacOnYmlyIHphbWFuIGfDtnN0ZXJtZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiJCaWxkaXJpbSBsaXN0ZXNpbmluIGVuIGFsdMSxbmRhIHNlc3NpemNlIGfDtnN0ZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IkJ1IGJpbGRpcmltbGVyaSBzZXNzaXpjZSBnw7ZzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCaWxkaXJpbSBsaXN0ZXNpbmluIGVuIMO8c3TDvG5kZSBnw7ZzdGVyIHZlIHNlcyDDp8Sxa2FyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkVrcmFuYSBnZXRpciB2ZSBzZXMgw6fEsWthciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4iRGnEn2VyIGF5YXJsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fZG9uZSIgbXNnaWQ9IjUyNzk0MjYwNDcyNzM5MzAxNzUiPiJCaXR0aSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik5vcm1hbCByZW5rbGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IkdlY2UgcmVua2xlcmkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IsOWemVsIHJlbmtsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJCaWxpbm1leWVuIHJlbmtsZXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iIG1zZ2lkPSI2OTg1NDYwNDA4MDc5MDg2MDkwIj4iUmVuayBkZcSfacWfaWtsacSfaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IkjEsXpsxLEgQXlhcmxhciBrdXR1c3VudSBnw7ZzdGVyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLDlnplbCBkw7Zuw7zFn8O8bcO8IGV0a2lubGXFn3RpciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IlV5Z3VsYSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJBeWFybGFyxLEgb25heWxhecSxbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJhesSxIHJlbmtsZXIgYnUgY2loYXrEsSBrdWxsYW7EsWxtYXogeWFwYWJpbGlyLiBCdSByZW5rbGVyaSBvbmF5bGFtYWsgacOnaW4gVGFtYW1cJ8SxIHTEsWtsYXnEsW4uIFTEsWtsYW1henNhbsSxeiBidSBheWFybGFyIDEwIHNhbml5ZSBzb25yYSBzxLFmxLFybGFuYWNha3TEsXIuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJQaWwgKCUlPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+KSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4ixZ5hcmogc8SxcmFzxLFuZGEgUGlsIFRhc2FycnVmdSDDtnplbGxpxJ9pIGt1bGxhbsSxbGFtYXoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iUGlsIFRhc2FycnVmdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlBlcmZvcm1hbnPEsSB2ZSBhcmthIHBsYW4gdmVyaWxlcmluaSBhemFsdMSxciI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdWsvc3RyaW5ncy54bWwKaW5kZXggNThhZTY1NS4uNTUwM2NiOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ay9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXVrL3N0cmluZ3MueG1sCkBAIC0xNjMsOCArMTYzLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLQlNC30LLRltC90L7QuiDQsdC10LfQt9Cy0YPRh9C90LjQuS4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i0KDQvtCx0L7Rh9C40Lkg0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4i0JLQuNC00LDQu9C40YLQuCDQtNC+0LTQsNGC0L7QuiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+ItCf0YDQvtCz0YDQsNC80YMgPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INC30LDQutGA0LjRgtC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+ItCj0YHRliDQvtGB0YLQsNC90L3RliDQtNC+0LTQsNGC0LrQuCDQt9Cw0LrRgNC40YLQvi4iPC9zdHJpbmc+CkBAIC0yMTYsMTQgKzIxNSwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+ItCc0L7QsdGW0LvRjNC90YMg0YLQvtGH0LrRgyDQtNC+0YHRgtGD0L/RgyDQstC40LzQutC90LXQvdC+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+ItCc0L7QsdGW0LvRjNC90YMg0YLQvtGH0LrRgyDQtNC+0YHRgtGD0L/RgyDQstCy0ZbQvNC60L3QtdC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i0KLRgNCw0L3RgdC70Y/RhtGW0Y4g0LXQutGA0LDQvdCwINC30YPQv9C40L3QtdC90L4uIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i0KDQvtCx0L7Rh9C40Lkg0YDQtdC20LjQvCDQstC40LzQutC90LXQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uIiBtc2dpZD0iNzY1MDU4ODU1Mzk4ODAxNDM0MSI+ItCg0L7QsdC+0YfQuNC5INGA0LXQttC40Lwg0YPQstGW0LzQutC90LXQvdC+LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+ItCg0L7QsdC+0YfQuNC5INGA0LXQttC40Lwg0LLQuNC80LrQvdC10L3Qvi4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i0KDQvtCx0L7Rh9C40Lkg0YDQtdC20LjQvCDRg9Cy0ZbQvNC60L3QtdC90L4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+ItCv0YHQutGA0LDQstGW0YHRgtGMINC00LjRgdC/0LvQtdGPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4i0J/QtdGA0LXQtNCw0LLQsNC90L3RjyDQtNCw0L3QuNGFIDJH4oCTM0cg0L/RgNC40LfRg9C/0LjQvdC10L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+ItCf0LXRgNC10LTQsNCy0LDQvdC90Y8g0LTQsNC90LjRhSA0RyDQv9GA0LjQt9GD0L/QuNC90LXQvdC+Ijwvc3RyaW5nPgpAQCAtMzAxLDE1ICsyOTYsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i0JLQuNC60L7RgNC40YHRgtC+0LLRg9GU0YLRjNGB0Y86IDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLQntCx0LzQtdC20LXQvdC90Y86IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+ItCX0LDRgdGC0LXRgNC10LbQtdC90L3RjzogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4i0KDQvtCx0L7Rh9C40Lkg0YDQtdC20LjQvCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLQktCw0YjRliDQvtGB0YLQsNC90L3RliDQtdC60YDQsNC90Lgg0LLRltC00L7QsdGA0LDQttCw0Y7RgtGM0YHRjyDRgtGD0YIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLQhtC90YTQvtGA0LzQsNGG0ZbRjyDQv9GA0L4g0LTQvtC00LDRgtC+0LoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLQt9Cw0LrRgNGW0L/QuNGC0Lgg0LXQutGA0LDQvSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2VhcmNoX2Jhcl9sYWJlbCIgbXNnaWQ9IjgwNzQ5OTc0MDAxODc4MzY2NzciPiLQv9C+0YjRg9C6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLQndC1INCy0LTQsNC70L7RgdGPINC30LDQv9GD0YHRgtC40YLQuCA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+ItCR0ZbQu9GM0YjQtSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLQhtGB0YLQvtGA0ZbRjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i0KnQtSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+ItCg0L7Qt9C00ZbQu9C40YLQuCDQs9C+0YDQuNC30L7QvdGC0LDQu9GM0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+ItCg0L7Qt9C00ZbQu9C40YLQuCDQstC10YDRgtC40LrQsNC70YzQvdC+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+ItCg0L7Qt9C00ZbQu9C40YLQuCAo0LLQu9Cw0YHQvdC40Lkg0LLQsNGA0ZbQsNC90YIpIjwvc3RyaW5nPgpAQCAtMzcyLDcgKzM2Niw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+ItCg0LXQttC40Lwg0LfQsNC+0YnQsNC00LbQtdC90L3RjyDQt9Cw0YDRj9C00YMg0LDQutGD0LzRg9C70Y/RgtC+0YDQsCDQstCy0ZbQvNC60L3QtdC90L4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4i0JfQvdC40LbRg9GU0YLRjNGB0Y8g0L/RgNC+0LTRg9C60YLQuNCy0L3RltGB0YLRjCDRliDQvtCx0LzQtdC20YPRjtGC0YzRgdGPINGE0L7QvdC+0LLRliDQtNCw0L3RliI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i0JLQuNC80LrQvdGD0YLQuCDRgNC10LbQuNC8INC30LDQvtGJ0LDQtNC20LXQvdC90Y8g0LfQsNGA0Y/QtNGDINCw0LrRg9C80YPQu9GP0YLQvtGA0LAiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4i0JLQvNGW0YHRgiDRgdGF0L7QstCw0L3QviI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDQvtGC0YDQuNC80LDRlCDQtNC+0YHRgtGD0L8g0LTQviDQstGB0ZbRhSDQtNCw0L3QuNGFLCDRj9C60ZYg0LLRltC00L7QsdGA0LDQttCw0Y7RgtGM0YHRjyDQvdCwINCy0LDRiNC+0LzRgyDQtdC60YDQsNC90ZYuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+ItCR0ZbQu9GM0YjQtSDQvdC1INC/0L7QutCw0LfRg9Cy0LDRgtC4Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+ItCe0YfQuNGB0YLQuNGC0Lgg0LLRgdC1Ijwvc3RyaW5nPgpAQCAtNDE3LDggKzQxMCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLQktGW0LTRhdC40LvQuNGC0LgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiDQv9GA0LjQt9C90LDRh9C10L3QviDRgNC10LPRg9C70Y/RgtC+0YDQvtC8INCz0YPRh9C90L7RgdGC0ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLQotC+0YDQutC90ZbRgtGM0YHRjywg0YnQvtCxINCy0ZbQtNC90L7QstC40YLQuCDQvtGA0LjQs9GW0L3QsNC7LiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLQktC4INCyINGA0L7QsdC+0YfQvtC80YMg0L/RgNC+0YTRltC70ZYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJTeXN0ZW0gVUkgVHVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLQn9C+0LrQsNC30YPQstCw0YLQuCDQt9Cw0YDRj9C0INCw0LrRg9C80YPQu9GP0YLQvtGA0LAg0YMg0LLRltC00YHQvtGC0LrQsNGFIjwvc3RyaW5nPgpAQCAtNDU4LDQgKzQ1MCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLQo9Cy0ZbQvNC60L3Rg9GC0LggQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLQqdC+0LEg0L/RltC04oCZ0ZTQtNC90LDRgtC4INC60LvQsNCy0ZbQsNGC0YPRgNGDINC00L4g0L/Qu9Cw0L3RiNC10YLQsCwg0YHQv9C10YDRiNGDINC/0L7RgtGA0ZbQsdC90L4g0LLQstGW0LzQutC90YPRgtC4IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLQo9Cy0ZbQvNC60L3Rg9GC0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLQl9Cw0YHRgtC+0YHRg9Cy0LDRgtC4INC00L4g0YHQv9C+0LLRltGJ0LXQvdGMINC90LAg0YLQtdC80YMgXCI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz5cIiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+ItCX0LDRgdGC0L7RgdGD0LLQsNGC0Lgg0LTQviDQstGB0ZbRhSDRgdC/0L7QstGW0YnQtdC90Ywg0ZbQtyDRhtGM0L7Qs9C+INC00L7QtNCw0YLQutCwIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+ItCX0LDQsdC70L7QutC+0LLQsNC90L4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSIgbXNnaWQ9IjQxMDk5Mjk5ODYxMDcxNDc5MzAiPiLQndC40LfRjNC60LjQuSDQv9GA0ZbQvtGA0LjRgtC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4i0KHRgtCw0L3QtNCw0YDRgtC90LjQuSDQv9GA0ZbQvtGA0LjRgtC10YIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i0JLQuNGB0L7QutC40Lkg0L/RgNGW0L7RgNC40YLQtdGCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i0KLQtdGA0LzRltC90L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLQndGW0LrQvtC70Lgg0L3QtSDQv9C+0LrQsNC30YPQstCw0YLQuCDRhtGWINGB0L/QvtCy0ZbRidC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+ItCf0L7QutCw0LfRg9Cy0LDRgtC4INGB0L/QvtCy0ZbRidC10L3QvdGPINCy0L3QuNC30YMg0YHQv9C40YHQutGDINCx0LXQtyDQt9Cy0YPQutC+0LLQvtCz0L4g0YHQuNCz0L3QsNC70YMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+ItCf0L7QutCw0LfRg9Cy0LDRgtC4INGG0ZYg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0LHQtdC3INC30LLRg9C60L7QstC+0LPQviDRgdC40LPQvdCw0LvRgyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i0J/QvtC60LDQt9GD0LLQsNGC0Lgg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0LLQs9C+0YDRliDRgdC/0LjRgdC60YMg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9tYXgiIG1zZ2lkPSI1MjM2OTg3MTcxOTA0NzU2MTM0Ij4i0J/QvtC60LDQt9GD0LLQsNGC0Lgg0YHQv9C+0LLRltGJ0LXQvdC90Y8g0L3QsCDQtdC60YDQsNC90ZYg0LfRliDQt9Cy0YPQutC+0LLQuNC8INGB0LjQs9C90LDQu9C+0LwiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+ItCR0ZbQu9GM0YjQtSDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i0JPQvtGC0L7QstC+Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i0KHRgtCw0L3QtNCw0YDRgtC90ZYg0LrQvtC70YzQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4i0J3RltGH0L3RliDQutC+0LvRjNC+0YDQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i0JrQvtGA0LjRgdGC0YPQstCw0YbRjNC60ZYg0LrQvtC70YzQvtGA0LgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiLQndC10LLRltC00L7QvNGWINC60L7Qu9GM0L7RgNC4Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+ItCX0LzRltC90LXQvdC90Y8g0LrQvtC70YzQvtGA0ZbQsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+ItCf0L7QutCw0LfQsNGC0Lgg0L7Qv9GG0ZbRjiDRiNCy0LjQtNC60LjRhSDQvdCw0LvQsNGI0YLRg9Cy0LDQvdGMIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiLQo9Cy0ZbQvNC60L3Rg9GC0Lgg0LrQvtGA0LjRgdGC0YPQstCw0YbRjNC60LUg0L/QtdGA0LXRgtCy0L7RgNC10L3QvdGPIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i0JfQsNGB0YLQvtGB0YPQstCw0YLQuCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLQn9GW0LTRgtCy0LXRgNC00LjRgtC4INC90LDQu9Cw0YjRgtGD0LLQsNC90L3RjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+ItCU0LXRj9C60ZYg0L3QsNC70LDRiNGC0YPQstCw0L3QvdGPINC60L7Qu9GM0L7RgNGW0LIg0LzQvtC20YPRgtGMINC30YDQvtCx0LjRgtC4INGG0LXQuSDQv9GA0LjRgdGC0YDRltC5INC90LXQv9GA0LjQtNCw0YLQvdC40Lwg0LTQu9GPINCy0LjQutC+0YDQuNGB0YLQsNC90L3Rjy4g0J3QsNGC0LjRgdC90ZbRgtGMIE9LLCDRidC+0LEg0L/RltC00YLQstC10YDQtNC40YLQuCDQvdCw0LvQsNGI0YLRg9Cy0LDQvdC90Y8sINGW0L3QsNC60YjQtSDRl9GFINCx0YPQtNC1INGB0LrQuNC90YPRgtC+INGH0LXRgNC10LcgMTAg0YHQtdC60YPQvdC0LiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i0JDQutGD0LzRg9C70Y/RgtC+0YAgKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i0KDQtdC20LjQvCDQtdC60L7QvdC+0LzRltGXINC30LDRgNGP0LTRgyDQsNC60YPQvNGD0LvRj9GC0L7RgNCwINC90LXQtNC+0YHRgtGD0L/QvdC40Lkg0L/RltC0INGH0LDRgSDQt9Cw0YDRj9C00LbQsNC90L3RjyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLQoNC10LbQuNC8INC10LrQvtC90L7QvNGW0Zcg0LfQsNGA0Y/QtNGDINCw0LrRg9C80YPQu9GP0YLQvtGA0LAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLQl9C90LjQttGD0ZTRgtGM0YHRjyDQv9GA0L7QtNGD0LrRgtC40LLQvdGW0YHRgtGMINGWINC+0LHQvNC10LbRg9GU0YLRjNGB0Y8g0L7QsdC80ZbQvSDQtNCw0L3QuNC80Lgg0YMg0YTQvtC90L7QstC+0LzRgyDRgNC10LbQuNC80ZYiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdXItclBLL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKaW5kZXggOWQ0MmFhZC4uZjNkZWE5NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy11ci1yUEsvc3RyaW5ncy54bWwKQEAgLTE2MSw4ICsxNjEsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yaW5nZXJfc2lsZW50IiBtc2dpZD0iOTA2MTI0MzMwNzkzOTEzNTM4MyI+Itix2Ybar9ixINiu2KfZhdmI2LTblCI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiLaqdin2YUg2YXZiNqIIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2qnZiCDZhdiz2KrYsdivINqp2LHbjNq625QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4iPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+INqp2Ygg24HZudinINiv24zYpyDar9uM2KfblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+Itiz2KjavtuMINit2KfZhNuM24Eg2KfbjNm+2YTbjNqp24zYtNmG2LIg2qnZiCDYqNix2K7Yp9iz2Kog2qnYsSDYr9uM2Kcg2q/bjNin25QiPC9zdHJpbmc+CkBAIC0yMTQsMTQgKzIxMywxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTAwNDcwODAwMzQ0NzU2MTM5NCI+ItmF2YjYqNin2KbZhCDbgdin2bkg2KfYs9m+2KfZuSDaqdmIINii2YEg2qnYsSDYr9uM2Kcg2q/bjNin25QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLZhdmI2KjYp9im2YQg24HYp9m5INin2LPZvtin2bkg2qnZiCDYotmGINqp2LEg2K/bjNinINqv24zYp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i2KfYs9qp2LHbjNmGINqp2Ygg2qnYp9iz2bkg2qnYsdmG2Kcg2KjZhtivINqp2LEg2K/bjNin25QiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLaqdin2YUg2YXZiNqIINii2YEg24HbktuUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i2qnYp9mFINmF2YjaiCDYotmGINuB25LblCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Itqp2KfZhSDZhdmI2ogg2KLZgSDbgdmIINqv24zYp9uUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+Itqp2KfZhSDZhdmI2ogg2KLZhiDbgdmIINqv24zYp9uUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+ItqI2LPZvtmE25Ig2qnbjCDahtmF2qkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiLigI8yRy0zRyDaiNuM2bnYpyDZhdmI2YLZiNmBINqp2LEg2K/bjNinINqv24zYpyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IuKAjzRHINqI24zZudinINmF2YjZgtmI2YEg2qnYsSDYr9uM2Kcg2q/bjNinIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfVVNFRCI+JXM8L3hsaWZmOmc+INin2LPYqti52YXYp9mEINqp2LHYr9uBIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g2K3YryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDZiNin2LHZhtmG2q8iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+Itqp2KfZhSDZhdmI2ogiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i2KLZviDaqduMINit2KfZhNuM24Eg2KfYs9qp2LHbjNmG2LIg24zbgdin2rog2LjYp9uB2LEg24HZiNiq24wg24HbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i2KfbjNm+2YTbjNqp24zYtNmGINqp24wg2YXYudmE2YjZhdin2KoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLYp9iz2qnYsduM2YYg2qnZiCDZvtmGINqp2LHZhtinIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+Itiq2YTYp9i0INqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4g2qnZiCDYtNix2YjYuSDZhtuB24zauiDaqduM2Kcg2KzYpyDYs9qp2KfblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjcwNjIwODgxOTY0NDk3NDcyNDUiPiLZhdiy24zYryI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLYs9ix2q/Ysti02KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDZhdiy24zYryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4i2KjZhNit2KfYuCDYp9mB2YLbjCDYp9mE2q8g2qnYsduM2roiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLYqNmE2K3Yp9i4INi52YXZiNiv24wg2KfZhNqvINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+Itio2YTYrdin2Lgg2K3Ys9ioINi22LHZiNix2Kog2KfZhNqvINqp2LHbjNq6Ijwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+Itio24zZudix24wg2LPbjNmI2LEg2KLZhiDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+Itqp2KfYsdqp2LHYr9qv24wg2KfZiNixINm+2LMg2YXZhti42LEg2qnYpyDaiNuM2bnYpyDaqdmFINqp2LEg2K/bjNiq2Kcg24HbkiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i2KjbjNm52LHbjCDaqduMINio2obYqiDYotmBINqp2LHbjNq6Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+ItmF2YjYp9ivINmF2K7ZgduMINuB24zauiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDYotm+INqp24wg2KfYs9qp2LHbjNmGINm+2LEg2ojYs9m+2YTbkiDbgdmI2YbbkiDZiNin2YTbjCDbgdixINqG24zYsiDaqdmIINqp24zZvtqG2LEg2qnYsdmG2Kcg2LTYsdmI2Lkg2qnYsSDYr9uM2q/bjNuUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+Itiv2YjYqNin2LHbgSDZhtuBINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+Itiz2KjavtuMINqp2Ygg2LXYp9mBINqp2LHbjNq6Ijwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLZhdiz2KrYsdivINqp2LHbjNq6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+Ijx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz4g2YjYp9mE24zZiNmFINqI2KfYptmE2KfaryDbgduSIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i2KfYtdmEINqp2Ygg2KjYrdin2YQg2qnYsdmG25Ig2qnbjNmE2KbbkiDZudqGINqp2LHbjNq625QiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+ItiMICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+Itii2b4g2KfZvtmG2Kcg2K/Zgdiq2LHbjCDZvtix2YjZgdin2KbZhCDYp9iz2KrYudmF2KfZhCDaqdixINix24HbkiDbgduM2rrblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+IuKAj9iz2LPZudmFIFVJINm524zZiNmG2LEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLYs9ix2KfbjNiqINqp2LHYr9uBINio24zZudix24wg2qnbjCDZgduM2LXYryDYr9qp2r7Yp9im24zauiI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4i2KjZhNmI2bnZiNiq2r4g2KLZhiDaqdix24zautifIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+Itin2b7ZhtuSINqp24wg2KjZiNix2ogg2qnZiCDYp9m+2YbbkiDZuduM2KjZhNm5INqp25Ig2LPYp9iq2r4g2YXZhtiz2YTaqSDaqdix2YbbkiDaqduM2YTYptuSINm+24HZhNuSINii2b4g2qnZiCDYp9m+2YbYpyDYqNmE2Ygg2bnZiNiq2r4g2KLZhiDaqdix2YbYpyDbgdmIINqv2KfblCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfY29uZmlybWF0aW9uX29rIiBtc2dpZD0iNjI1ODA3NDI1MDk0ODMwOTcxNSI+Itii2YYg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiI8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz4g2KfYt9mE2KfYudin2Kog2b7YsSDZhNin2q/ZiCDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+Itin2LMg2KfbjNm+INiz25Ig2KrZhdin2YUg2KfYt9mE2KfYudin2Kog2b7YsSDZhNin2q/ZiCDaqdix24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiLZhdiz2K/ZiNivINqp2LHYr9uBIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i2qnZhSDYp9uB2YXbjNiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+Iti52YXZiNmF24wg2KfbgdmF24zYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLYstuM2KfYr9uBINin24HZhduM2KoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLZgdmI2LHbjCDYp9uB2YXbjNiqIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLbjNuBINin2LfZhNin2LnYp9iqINqp2KjavtuMINmF2Kog2K/aqdq+2KfYptuM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i2KfYt9mE2KfYudin2Kog2qnbjCDZgduB2LHYs9iqINqp25Ig2LPYqCDYs9uSINmG24zahtuSINiu2KfZhdmI2LTbjCDYs9uSINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLYrtin2YXZiNi024wg2LPbkiDbjNuBINin2LfZhNin2LnYp9iqINiv2qnavtin2KbbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiLYp9i32YTYp9i52KfYqiDaqduMINmB24HYsdiz2Kog2b7YsSDYs9ioINiz25Ig2KfZiNm+2LEg2K/aqdq+2KfYptuM2rog2KfZiNixINii2YjYp9iyINqG2YTYp9im24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLYp9iz2qnYsduM2YYg2b7YsSDYr9qp2r7Yp9im24zauiDYp9mI2LEg2KLZiNin2LIg2obZhNin2KbbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiIG1zZ2lkPSI4MTYzMDYyODMzOTY1NTM1NzEiPiLZhdiy24zYryDYqtix2KrbjNio2KfYqiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+ItuB2Yjar9uM2KciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiLYudin2YUg2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Itix2KfYqiDaqduSINix2YbaryI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i2K3Ys9ioINi22LHZiNix2Kog2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i2YbYp9mF2LnZhNmI2YUg2LHZhtqvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Itix2Ybar9mI2rog2qnbjCDYqtio2K/bjNmE24wiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLZgdmI2LHbjCDYqtix2KrbjNio2KfYqiDZiNin2YTbjCDZudin2KbZhCDYr9qp2r7Yp9im24zauiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i2K3Ys9ioINi22LHZiNix2Kog2bnYsdin2YbYs9mB2KfYsdmFINmB2LnYp9mEINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i2YTYp9qv2Ygg2qnYsduM2roiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4i2KrYsdiq24zYqNin2Kog2qnbjCDYqtmI2KvbjNmCINqp2LHbjNq6Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiIG1zZ2lkPSI5MTE2MDAxMDY5Mzk3OTk2NjkxIj4i2LHZhtqv2YjauiDaqduMINqp2obaviDYqtix2KrbjNio2KfYqiDYp9izINii2YTbkiDaqdmIINmG2KfZgtin2KjZhCDYp9iz2KrYudmF2KfZhCDYqNmG2Kcg2LPaqdiq24wg24HbjNq625Qg2LHZhtqv2YjauiDaqduMINin2YYg2KrYsdiq24zYqNin2Kog2qnbjCDYqtmI2KvbjNmCINqp2LHZhtuSINqp24zZhNim25Ig2bnavtuM2qkg24HbkiDZvtixINqp2YTaqSDaqdix24zautiMINio2LXZiNix2Kog2K/bjNqv2LEgMTAg2LPbjNqp2YbaiCDYqNi52K8g24zbgSDYqtix2KrbjNio2KfYqiDYsduMINiz24zZuSDbgdmIINis2KfYptuM2rog2q/bjNuUIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLYqNuM2bnYsduMICglJTx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPikiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+ItqG2KfYsdis2YbaryDaqduSINiv2YjYsdin2YYg2KjbjNm52LHbjCDYs9uM2YjYsSDYr9iz2KrbjNin2Kgg2YbbgduM2rog24HbkiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLYqNuM2bnYsduMINiz24zZiNixIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i2qnYp9ix2qnYsdiv2q/bjCDYp9mI2LEg2b7YsyDZhdmG2LjYsSDaqdinINqI24zZudinINqp2YUg2qnYsSDYr9uM2KrYpyDbgduSIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXV6LXJVWi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCmluZGV4IGY3OTU5ZWEuLmM3ODEwODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdXotclVaL3N0cmluZ3MueG1sCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICA8aXRlbSBxdWFudGl0eT0ib3RoZXIiPlVtdW1peSBtYeKAmWx1bW90IGJv4oCYbGltaWRhICVkIHRhIGVrcmFuIGJvcjwvaXRlbT4KICAgICAgIDxpdGVtIHF1YW50aXR5PSJvbmUiPlVtdW1peSBtYeKAmWx1bW90IGJv4oCYbGltaWRhIDEgdGEgZWtyYW4gYm9yPC9pdGVtPgogICAgIDwvcGx1cmFscz4KLSAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm9fbm90aWZpY2F0aW9uc190aXRsZSIgbXNnaWQ9IjQ3NTUyNjExNjcxOTM4MzMyMTMiPiJFc2xhdG1hbGFyIC0geW/igJhxIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9ub19ub3RpZmljYXRpb25zX3RpdGxlIiBtc2dpZD0iNDc1NTI2MTE2NzE5MzgzMzIxMyI+IkJpbGRpcmlzaG5vbWFsYXIgeW/igJhxIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2Jhcl9vbmdvaW5nX2V2ZW50c190aXRsZSIgbXNnaWQ9IjE2ODI1MDQ1MTMzMTY4NzkyMDIiPiJKb3JpeSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50c190aXRsZSIgbXNnaWQ9IjY1OTQ3Njc0Mzg1Nzc1OTMxNzIiPiJFc2xhdG1hbGFyIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9sb3dfdGl0bGUiIG1zZ2lkPSI2NDU2Mzg1OTI3NDA5NzQyNDM3Ij4iQmF0YXJleWEgcXV2dmF0aSBrYW0iPC9zdHJpbmc+CkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJPdm96c2l6IHFv4oCYbmfigJhpcm9xLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJJc2ggcmVqaW1pIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJPbGliIHRhc2hsYXNoOiA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiBvbGliIHRhc2hsYW5nYW4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4iWWFxaW5kYSBpc2hsYXRpbGdhbiBiYXJjaGEgaWxvdmFsYXIgb2xpYiB0YXNobGFuZGkuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJNb2JpbCB1bGFuaXNoIG51cXRhc2kgb+KAmGNoaXJpbGRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29uIiBtc2dpZD0iMjg5MDk1MTYwOTIyNjQ3NjIwNiI+Ik1vYmlsIHVsYW5pc2ggbnVxdGFzaSB5b3FpbGRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfY2FzdGluZ190dXJuZWRfb2ZmIiBtc2dpZD0iMTQzMDY2ODk4MjI3MTk3NjE3MiI+IkVrcmFubmkgdHJhbnNsYXRzaXlhIHFpbGlzaCB0b+KAmHh0YWRpLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYgKDcwNDU0MTczOTY0MzY1NTI4OTApIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24gKDc2NTA1ODg1NTM5ODgwMTQzNDEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYgKDU2MDU1MzQ4NzYxMDczMDA3MTEpIC0tPgotICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiAoMjQ5ODQwMzMwNzU2OTk4NjEyKSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmIiBtc2dpZD0iNzA0NTQxNzM5NjQzNjU1Mjg5MCI+IklzaCByZWppbWkgb+KAmGNoaXEuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iSXNoIHJlamltaSB5b25pcS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiJJc2ggcmVqaW1pIG/igJhjaGlyaWIgcW/igJh5aWxkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iSXNoIHJlamltaSB5b3FpbGRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJFa3JhbiB5b3JxaW5saWdpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cgaW50ZXJuZXQgdG/igJh4dGF0aWIgcW/igJh5aWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIGludGVybmV0IHRv4oCYeHRhdGliIHFv4oCYeWlsZGkiPC9zdHJpbmc+CkBAIC0yMzcsMTAgKzIzMiwxMCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jbGVhcl9hbGwiIG1zZ2lkPSI1MjM1OTM4NTU5MjQ3MTY0OTI1Ij4iQmFyY2hhIGVzbGF0bWFsYXJuaSB0b3phbGFzaC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzdGF0dXNfYmFyX25vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW1fdGl0bGUiIG1zZ2lkPSI1NjY4MzQ4MTQyNDEwMTE1MzIzIj4iQmlsZGlyaXNobm9tYSBzb3psYW1hbGFyaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN0YXR1c19iYXJfbm90aWZpY2F0aW9uX2FwcF9zZXR0aW5nc190aXRsZSIgbXNnaWQ9IjU1MjUyNjAxNjAzNDE1NTg4NjkiPiI8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiVzPC94bGlmZjpnPiBzb3psYW1hbGFyaSI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW4gYXZ0b21hdGlrIHJhdmlzaGRhIGF5bGFuYWRpLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmYiIG1zZ2lkPSI0MDYyNzgwMjI4OTMxNTkwMDY5Ij4iRWtyYW4gYXZ0b21hdGlrIGJ1cmlsYWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUiIG1zZ2lkPSI2NzMxMTk3MzM3NjY1MzY2MjczIj4iRWtyYW4gZW5pZ2EgaG9sYXRpZGEgcXVsZmxhbmRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdCIgbXNnaWQ9IjU4MDkzNjc1MjE2NDQwMTIxMTUiPiJFa3JhbiBib+KAmHlpZ2EgaG9sYXRpZGEgcXVsZmxhbmRpLiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vZmZfY2hhbmdlZCIgbXNnaWQ9IjgxMzQ2MDEwNzEwMjYzMDUxNTMiPiJFa3JhbiBlbmRpIGF2dG9tYXRpayByYXZpc2hkYSBheWxhbmFkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JvdGF0aW9uX2xvY2tfb2ZmX2NoYW5nZWQiIG1zZ2lkPSI4MTM0NjAxMDcxMDI2MzA1MTUzIj4iRWtyYW4gZW5kaSBhdnRvbWF0aWsgYnVyaWxhZGkuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX2xhbmRzY2FwZV9jaGFuZ2VkIiBtc2dpZD0iMzEzNTk2NTU1MzcwNzUxOTc0MyI+IkVrcmFuIHlvdGlxIGhvbGF0ZGEgYXlsYW5tYXlkaWdhbiBxaWxpbmRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9wb3J0cmFpdF9jaGFuZ2VkIiBtc2dpZD0iODkyMjQ4MTk4MTgzNDAxMjEyNiI+IkVrcmFuIHRpayBob2xhdGRhIGF5bGFubWF5ZGlnYW4gcWlsaW5kaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZXNzZXJ0X2Nhc2UiIG1zZ2lkPSIxMjk1MTYxNzc2MjIzOTU5MjIxIj4iRGVzc2VydCBDYXNlIjwvc3RyaW5nPgpAQCAtMjU1LDcgKzI1MCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19ibHVldG9vdGhfb2ZmX2xhYmVsIiBtc2dpZD0iODE1OTY1MjE0NjE0OTIxOTkzNyI+IkJsdWV0b290aCBv4oCYY2hpcmlsZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2RldGFpbF9lbXB0eV90ZXh0IiBtc2dpZD0iNDkxMDAxNTc2MjQzMzMwMjg2MCI+IlVsYW5nYW4gcXVyaWxtYWxhciB0b3BpbG1hZGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19icmlnaHRuZXNzX2xhYmVsIiBtc2dpZD0iNjk2ODM3MjI5NzAxODc1NTgxNSI+IllvcnFpbmxpayI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3JvdGF0aW9uX3VubG9ja2VkX2xhYmVsIiBtc2dpZD0iNzMwNTMyMzAzMTgwODE1MDA5OSI+IkF1dG8tYXlsYW50aXJpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl91bmxvY2tlZF9sYWJlbCIgbXNnaWQ9IjczMDUzMjMwMzE4MDgxNTAwOTkiPiJBdnRvbWF0aWsgYnVyaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhYmVsIiBtc2dpZD0iNjM1OTIwNTcwNjE1NDI4MjM3NyI+IkF5bGFubWF5ZGlnYW4gcWlsaW5nYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19yb3RhdGlvbl9sb2NrZWRfcG9ydHJhaXRfbGFiZWwiIG1zZ2lkPSI1MTAyNjkxOTIxNDQyMTM1MDUzIj4iQm/igJh5aWdhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbCIgbXNnaWQ9Ijg1NTMxNTc3NzAwNjExNzg3MTkiPiJFbmlnYSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBmb3lkYWxhbmlsZ2FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfbGltaXQiIG1zZ2lkPSI1NjAxMTE1ODUwNDk5NDEyOCI+IkNoZWtsb3Y6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ik9nb2hsYW50aXJpc2g6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IklzaCByZWppbWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iU2l6IHlhcWluZGEgaXNobGF0Z2FuIGlsb3ZhIGVrcmFubGFyaSBidSB5ZXJkYSBrb+KAmHJpbmFkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+Iklsb3ZhIGhhcWlkYSBtYeKAmWx1bW90Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4ib+KAmHpnYXJtYXMgZWtyYW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4icWlkaXJpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IuKAnDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuKAnSBpbG92YXNpbmkgaXNoZ2EgdHVzaGlyaWIgYm/igJhsbWFkaS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4iS2/igJhwcm9xIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikp1cm5hbCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4iPHhsaWZmOmcgaWQ9Ik5VTUJFUiI+JWQ8L3hsaWZmOmc+IHRhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJHb3Jpem9udGFsIHlv4oCYbmFsaXNoZGEgYm/igJhsaXNoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iVmVydGlrYWwgeW/igJhuYWxpc2hkYSBib+KAmGxpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iQm9zaHFhIHVzdWxkYSBib+KAmGxpc2giPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4iUXV2dmF0IHRlamFzaCByZWppbWkgeW9xaWxkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiJVbnVtZG9ybGlrbmkgcGFzYXl0aXJhZGkgdmEgZm9uZGEgaW50LWRhbiBmb3lkLW5pIGNoZWtsYXlkaSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4iUXV2dmF0IHRlamFzaCBmdW5rc2l5YXNpbmkgb+KAmGNoaXJpbmciPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iS29udGVudCB5YXNoaXJpbGRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGlsb3Zhc2kgcXVyaWxtYSBla3JhbmlkYWdpIGhhciBxYW5kYXkgdGFzdmlybmkga2/igJhyaXNobmkgYm9zaGxheWRpLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJCb3NocWEga2/igJhyc2F0aWxtYXNpbiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiJCYXJjaGFzaW5pIHRvemFsYXNoIjwvc3RyaW5nPgpAQCAtNDE1LDggKzQwOCw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiJSYWQgZXRpc2giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBvdm96IGJhbGFuZGxpZ2luaSBib3NocWFyYWRpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iQXNsaW5pIHRpa2xhc2ggdWNodW4gYm9zaW5nLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJTaXogaXNoY2hpIHByb2ZpbGRhbiBmb3lkYWxhbm1vcWRhc2l6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4iU3lzdGVtVUkgVHVuZXIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJCYXRhcmV5YSBmb2l6aSBrb+KAmHJzYXRpbHNpbiI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQmx1ZXRvb3RoIHlvcWlsc2lubWk/Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9tZXNzYWdlIiBtc2dpZD0iOTEwNjU5NTk5MDcwODk4NTM4NSI+IktsYXZpYXR1cmFuaSBwbGFuc2hldGluZ2l6Z2EgdWxhc2ggdWNodW4gQmx1ZXRvb3RoIHhpem1hdGluaSB5b3Fpc2hpbmdpeiBrZXJhay4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJZb3Fpc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLigJw8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7igJ0gYmlsZGlyaXNobm9tYWxhcmlnYSBxb+KAmGxsYXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4iVXNoYnUgaWxvdmFuaW5nIGJhcmNoYSBiaWxkaXJpc2hub21hbGFyaWdhIHFv4oCYbGxhc2giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iQmxva2xhbmdhbiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IkthbXJvcSBtdWhpbSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJP4oCYcnRhY2hhIG11aGltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaGlnaF9pbXBvcnRhbmNlIiBtc2dpZD0iMTUyNzA2NjE5NTYxNDA1MDI2MyI+Ikp1ZGEgbXVoaW0iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiJGYXZxdWxvZGRhIG11aGltIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiJCdSBiaWxkaXJpc2hub21hbGFyIGJvc2hxYSBrb+KAmHJzYXRpbG1hc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+IkJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgb3hpcmlkYSBvdm96c2l6IGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJCdSBiaWxkaXJpc2hub21hbGFyIG92b3pzaXoga2/igJhyc2F0aWxzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+IkJpbGRpcmlzaG5vbWFsYXIgcm/igJh5eGF0aW5pbmcgYm9zaGlkYSBvdm96IGJpbGFuIGtv4oCYcnNhdGlsc2luIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkJhcmNoYSBveW5hbGFyIHVzdGlkYSBzaWduYWwgb3ZvemkgYmlsYW4ga2/igJhyc2F0aWxzaW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkJvc2hxYSBzb3psYW1hbGFyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iVGF5eW9yIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4iT2RhdGl5IHJhbmdsYXIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiIG1zZ2lkPSI1OTQzODE3NjIyMTA1MzA3MDcyIj4iUW9yYW10aXIgcmFuZ2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4iRm95ZGFsYW51dmNoaSByYW5naSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik5vbWHigJlsdW0gcmFuZ2xhciI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJSYW5nIHNvemxhbWFsYXJpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiIG1zZ2lkPSIxNzYzMjQ0MzU0Mzk5Mjc2Njc5Ij4iVGV6a29yIHNvemxhbWFsYXIgcGFuZWxpbmkga2/igJhyc2F0aXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJGb3lkYWxhbnV2Y2hpIHNvemxhbWFsYXJpbmkgeW9xaXNoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4iUW/igJhsbGFzaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiJTb3psYW1hbGFybmkgdGFzZGlxbGFuZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkJh4oCZemkgcmFuZyBzb3psYW1hbGFyaSBxdXJpbG1hZGFuIGZveWRhbGFuaXNobmkgcWl5aW5sYXNodGlyaXNoIG11bWtpbi4gVGFubGdhbiBwYXJhbWV0cmxhcm5pIHRhc2RpcWxhc2ggdWNodW4g4oCcT0vigJ0gdHVnbWFzaW5pIGJvc2luZy4gQWtzIGhvbGRhLCB1bGFyIDEwIHNvbml5YWRhbiBzb+KAmG5nIHFheXRhIHRpa2xhbmFkaS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IlF1dnZhdCAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJRdXZ2YXQgdGVqYXNoIHJlamltaWRhbiBxdXZ2YXRsYXNoIHZhcXRpZGEgZm95ZGFsYW5pYiBib+KAmGxtYXlkaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiJRdXZ2YXQgdGVqYXNoIHJlamltaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlVudW1kb3JsaWtuaSBwYXNheXRpcmFkaSB2YSBmb25kYSBpbnRlcm5ldGRhbiBmb3lkYWxhbmlzaG5pIGNoZWtsYXlkaSI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtdmkvc3RyaW5ncy54bWwKaW5kZXggZmZjYzczYS4uMzgyODNhZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy12aS9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXZpL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiJDaHXDtG5nIGltIGzhurduZy4iPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCIgbXNnaWQ9IjM5NTc3MDI0MjQ5ODAzMTQ4MSI+IljDs2EgYuG7jyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDEkcOjIGLhu4sgbG/huqFpIGLhu48uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4ixJDDoyBi4buPIHF1YSB04bqldCBj4bqjIGPDoWMg4bupbmcgZOG7pW5nIGfhuqduIMSRw6J5LiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4ixJDDoyB04bqvdCDEkWnhu4NtIHBow6F0IHPDs25nIGRpIMSR4buZbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4ixJDDoyBi4bqtdCDEkWnhu4NtIHBow6F0IHPDs25nIGRpIMSR4buZbmcuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4ixJDDoyBuZ+G7q25nIHRydXnhu4FuIG3DoG4gaMOsbmguIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MgdOG6r3QuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MgYuG6rXQuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MgxJHDoyB04bqvdC4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MgxJHDoyBi4bqtdC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2JyaWdodG5lc3MiIG1zZ2lkPSI4MDAzNjgxMjg1NTQ3ODAzMDk1Ij4ixJDhu5kgc8OhbmcgbcOgbiBow6xuaCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IsSQw6MgdOG6oW0gZOG7q25nIGThu68gbGnhu4d1IDJHLTNHIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4ixJDDoyB04bqhbSBk4burbmcgZOG7ryBsaeG7h3UgNEciPC9zdHJpbmc+CkBAIC0yOTksMTUgKzI5NCwxNCBAQAogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfdXNlZCIgbXNnaWQ9IjE0NzY4MTA1ODc0NzU3NjE0NzgiPiLEkMOjIHPhu60gZOG7pW5nIDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiJHaeG7m2kgaOG6oW4gPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iQ+G6o25oIGLDoW8gPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwgKDYyNDQ5MTUyNzQzNTA0OTA0MjkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc193b3JrX21vZGVfbGFiZWwiIG1zZ2lkPSI2MjQ0OTE1Mjc0MzUwNDkwNDI5Ij4iQ2jhur8gxJHhu5kgbMOgbSB2aeG7h2MiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4iTcOgbiBow6xuaCBn4bqnbiDEkcOieSBj4bunYSBi4bqhbiBz4bq9IHh14bqldCBoaeG7h24gdOG6oWkgxJHDonkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiJUaMO0bmcgdGluIOG7qW5nIGThu6VuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbG9ja190b19hcHBfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNjk0Mjg5OTA0OTA3MjUwNjA0NCI+Imtow7NhIG3DoG4gaMOsbmgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4idMOsbSBraeG6v20iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+Iktow7RuZyB0aOG7gyBraOG7n2kgxJHhu5luZyA8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IlRow6ptIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+Ikzhu4tjaCBz4butIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCIgbXNnaWQ9IjYzMzcxNTU2MDgwNTUwNjI0MjkiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4gdMOhYyB24bulIGtow6FjIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiJQaMOibiB0w6FjaCBuZ2FuZyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IlBow6JuIHTDoWNoIGThu41jIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfY3VzdG9tIiBtc2dpZD0iNDE3NzgzNzU5NzUxMzcwMTk0MyI+IlTDuXkgY2jhu4luaCBwaMOibiB0w6FjaCI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJUcsOsbmggdGnhur90IGtp4buHbSBwaW4gxJFhbmcgYuG6rXQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iODIwMzE4Nzg4MTI2NjcyNjkyIj4iR2nhuqNtIGhp4buHdSBzdeG6pXQgdsOgIGThu68gbGnhu4d1IG7hu4FuIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJU4bqvdCB0csOsbmggdGnhur90IGtp4buHbSBwaW4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iTuG7mWkgZHVuZyBi4buLIOG6qW4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4gc+G6vSBi4bqvdCDEkeG6p3UgY2jhu6VwIG3hu41pIHRo4bupIGhp4buDbiB0aOG7iyB0csOqbiBtw6BuIGjDrG5oLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fcmVtZW1iZXJfdGV4dCIgbXNnaWQ9IjMxMDM1MTA4ODIxNzI3NDY3NTIiPiJLaMO0bmcgaGnhu4NuIHRo4buLIGzhuqFpIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IljDs2EgdOG6pXQgY+G6oyI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iVOG7qyBjaOG7kWkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPiBsw6AgaOG7mXAgdGhv4bqhaSBraOG7kWkgbMaw4bujbmciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiJDaOG6oW0gxJHhu4Mga2jDtGkgcGjhu6VjIGLhuqNuIGfhu5FjLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJC4bqhbiDEkWFuZyBz4butIGThu6VuZyBo4buTIHPGoSBjw7RuZyB2aeG7h2MgY+G7p2EgbcOsbmgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJC4buZIMSRaeG7gXUgaMaw4bubbmcgZ2lhbyBkaeG7h24gbmfGsOG7nWkgZMO5bmcgaOG7hyB0aOG7kW5nIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4iSGnhu4NuIHRo4buLIHThu7cgbOG7hyBwaOG6p24gdHLEg20gcGluIMSRxrDhu6NjIG5ow7puZyI8L3N0cmluZz4KQEAgLTQ1Niw0ICs0NDgsMzIgQEAKICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfdGl0bGUiIG1zZ2lkPSI1MDI3MDM3NzA2NTAwNjM1MjY5Ij4iQuG6rXQgQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLEkOG7gyBr4bq/dCBu4buRaSBiw6BuIHBow61tIHbhu5tpIG3DoXkgdMOtbmggYuG6o25nLCB0csaw4bubYyB0acOqbiwgYuG6oW4gcGjhuqNpIGLhuq10IEJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJC4bqtdCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX3RvcGljIiBtc2dpZD0iMzY0MTQwMzQ4OTMxODY1OTY2NiI+IsOBcCBk4bulbmcgY2hvIHRow7RuZyBiw6FvIDx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IsOBcCBk4bulbmcgY2hvIHThuqV0IGPhuqMgdGjDtG5nIGLDoW8gdOG7qyDhu6luZyBk4bulbmcgbsOgeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJsb2NrZWRfaW1wb3J0YW5jZSIgbXNnaWQ9IjUxOTg1Nzg5ODg5NzgyMzQxNjEiPiJC4buLIGNo4bq3biI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlThuqdtIHF1YW4gdHLhu41uZyB0aOG6pXAiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiIG1zZ2lkPSI4MTkyMTA3Njg5OTk1NzQyNjUzIj4iVOG6p20gcXVhbiB0cuG7jW5nIGLDrG5oIHRoxrDhu51uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJU4bqnbSBxdWFuIHRy4buNbmcgY2FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVOG6p20gcXVhbiB0cuG7jW5nIGto4bqpbiBj4bqlcCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQiIG1zZ2lkPSIyMzk3MTkyNjQyNjU3ODcyODcyIj4iS2jDtG5nIGJhbyBnaeG7nSBoaeG7g24gdGjhu4sgY8OhYyB0aMO0bmcgYsOhbyBuw6B5Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93IiBtc2dpZD0iNDM4MzU2MzI2NzM3MDg1OTcyNSI+Ikhp4buDbiB0aOG7iyBpbSBs4bq3bmcg4bufIGN14buRaSBkYW5oIHPDoWNoIHRow7RuZyBiw6FvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJIaeG7g24gdGjhu4sgaW0gbOG6t25nIGPDoWMgdGjDtG5nIGLDoW8gbsOgeSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4iSGnhu4NuIHRo4buLIOG7nyDEkeG6p3UgZGFuaCBzw6FjaCB0aMO0bmcgYsOhbyB2w6AgcGjDoXQgcmEgw6JtIHRoYW5oIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+Ikhp4buDbiB0aOG7iyB0csOqbiBtw6BuIGjDrG5oIHbDoCBwaMOhdCByYSDDom0gdGhhbmgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IkPDoGkgxJHhurd0IGtow6FjIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iWG9uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+Ik3DoHUgdGjDtG5nIHRoxrDhu51uZyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJNw6B1IHThu5FpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X2N1c3RvbSIgbXNnaWQ9IjM2NTU1NzY0OTIzMjIyOTg3MTMiPiJNw6B1IHTDuXkgY2jhu4luaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+Ik3DoHUga2jDtG5nIHjDoWMgxJHhu4tuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiJT4butYSDEkeG7lWkgbcOgdSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Ikhp4buDbiB0aOG7iyDDtCBDw6BpIMSR4bq3dCBuaGFuaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4iQuG6rXQgY2h1eeG7g24gxJHhu5VpIHTDuXkgY2jhu4luaCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IsOBcCBk4bulbmciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iWMOhYyBuaOG6rW4gY8OgaSDEkeG6t3QiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiJN4buZdCBz4buRIGPDoGkgxJHhurd0IG3DoHUgY8OzIHRo4buDIGtoaeG6v24gdGhp4bq/dCBi4buLIG7DoHkga2jDtG5nIHPhu60gZOG7pW5nIMSRxrDhu6NjLiBIw6N5IG5o4bqlcCB2w6BvIE9LIMSR4buDIHjDoWMgbmjhuq1uIGPDoWMgY8OgaSDEkeG6t3QgbcOgdSBuw6B5LCBu4bq/dSBraMO0bmcgbmjhu69uZyBjw6BpIMSR4bq3dCBuw6B5IHPhur0gxJHGsOG7o2MgxJHhurd0IGzhuqFpIHNhdSAxMCBnacOieS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IlBpbiAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJUcsOsbmggdGnhur90IGtp4buHbSBwaW4ga2jDtG5nIGto4bqjIGThu6VuZyB0cm9uZyBraGkgc+G6oWMiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iVHLDrG5oIHRp4bq/dCBraeG7h20gcGluIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4iR2nhuqNtIGhp4buHdSBzdeG6pXQgdsOgIGThu68gbGnhu4d1IG7hu4FuIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJDTi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCmluZGV4IDJkOGRkMmEuLjg1MzRkODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckNOL3N0cmluZ3MueG1sCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ1c2JfcHJlZmVyZW5jZV90aXRsZSIgbXNnaWQ9IjY1NTEwNTAzNzczODg4ODI3ODciPiJVU0Lmlofku7bkvKDovpPpgInpobkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ1c2VfbXRwX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjQzMzM1MDQ0MTM1NjMwMjM2MjYiPiLkvZzkuLrlqpLkvZPmkq3mlL7lmagoTVRQKeijhei9vSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InVzZV9wdHBfYnV0dG9uX3RpdGxlIiBtc2dpZD0iNzUxNzEyNzU0MDMwMTYyNTc1MSI+IuS9nOS4uuebuOacuihQVFAp6KOF6L29Ijwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLlronoo4XpgILnlKjkuo5NYWPnmoRBbmRyb2lk5paH5Lu25Lyg6L6T5bqU55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iaW5zdGFsbGVyX2NkX2J1dHRvbl90aXRsZSIgbXNnaWQ9IjIzMTI2Njc1Nzg1NjIyMDE1ODMiPiLlronoo4XpgILnlKjkuo4gTWFjIOeahCBBbmRyb2lkIOaWh+S7tuS8oOi+k+W6lOeUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYmFjayIgbXNnaWQ9IjU2NzAxMTUzODk5NDQyOTEyMCI+Iui/lOWbniI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfaG9tZSIgbXNnaWQ9IjgyMTcyMTYwNzQ4OTUzNzc2NDEiPiLkuLvlsY/luZUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X21lbnUiIG1zZ2lkPSIzMTY4MzkzMDMzMjQ2OTU5NDkiPiLoj5zljZUiPC9zdHJpbmc+CkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLmjK/pk4PlmajpnZnpn7PjgIIiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i5bel5L2c5qih5byPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLnp7vpmaQ8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i5bey5Yig6ZmkPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i5bey5YWz6Zet5omA5pyJ5pyA6L+R55So6L+H55qE5bqU55So44CCIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLnp7vliqjng63ngrnlt7LlhbPpl63jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLnp7vliqjng63ngrnlt7LlvIDlkK/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLlsY/luZXmipXlsITlt7LlgZzmraLjgIIiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLlt6XkvZzmqKHlvI/lhbPpl63jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLlt6XkvZzmqKHlvI/lvIDlkK/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLlt6XkvZzmqKHlvI/lt7LlhbPpl63jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i5bel5L2c5qih5byP5bey5byA5ZCv44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+IuWxj+W5leS6ruW6piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IjJHLTNHIOaVsOaNrue9kee7nOW3suaaguWBnOS9v+eUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzRnX3RpdGxlIiBtc2dpZD0iMTYwMTc2OTczNjg4MTA3ODAxNiI+IjRHIOaVsOaNrue9kee7nOW3suaaguWBnOS9v+eUqCI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IuW3suS9v+eUqDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLkuIrpmZDkuLo8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX2RhdGFfd2FybmluZyIgbXNnaWQ9IjI0NDAwOTgwNDU2OTIzOTkwMDkiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+6K2m5ZGKIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLlt6XkvZzmqKHlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i5oKo5pyA6L+R5rWP6KeI6L+H55qE5bGP5bmV5Lya5pi+56S65Zyo5q2k5aSEIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i5bqU55So5L+h5oGvIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i5Zu65a6a5bGP5bmVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuaQnOe0oiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i5peg5rOV5ZCv5YqoPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuabtOWkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLljoblj7LorrDlvZUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Iui/mOaciSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g6aG5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLmsLTlubPliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLlnoLnm7TliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i6Ieq5a6a5LmJ5YiG5YmyIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuiKgueUteWKqeaJi+W3suW8gOWQryI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLpmY3kvY7mgKfog73lubbpmZDliLblkI7lj7DmtYHph48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IuWFs+mXreiKgueUteWKqeaJiyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLlhoXlrrnlt7LpmpDol48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz7lsIblvIDlp4vmiKrlj5bmgqjnmoTlsY/luZXkuIrmmL7npLrnmoTmiYDmnInlhoXlrrnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i5LiN5YaN5pi+56S6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuWFqOmDqOa4hemZpCI8L3N0cmluZz4KQEAgLTQxNSwxMyArNDA4LDEyIEBACiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9wcm9tcHRfZGVueSIgbXNnaWQ9IjU3MjA2NjM2NDM0MTE2OTY3MzEiPiLmi5Lnu50iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4i4oCcPHhsaWZmOmcgaWQ9IkFQUF9OQU1FIj4lMSRzPC94bGlmZjpnPuKAneW3sueUqOS9nOmfs+mHj+aOp+WItuWvueivneahhiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90ZXh0IiBtc2dpZD0iMTgyNjg4OTcwNTA5NTc2ODY1NiI+IuinpuaRuOWNs+WPr+aBouWkjeWOn+Wni+iuvue9ruOAgiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4i44CBICI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1hbmFnZWRfcHJvZmlsZV9mb3JlZ3JvdW5kX3RvYXN0IiBtc2dpZD0iNTQyMTQ4NzExNDczOTI0NTk3MiI+IuaCqOW9k+WJjeato+WcqOS9v+eUqOW3peS9nOi1hOaWmSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InN5c3RlbV91aV90dW5lciIgbXNnaWQ9IjcwODIyNDEyNzM5MjQ1MjAxOCI+Iuezu+e7n+eVjOmdouiwg+iwkOWZqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InNob3dfYmF0dGVyeV9wZXJjZW50YWdlIiBtc2dpZD0iNTQ0NDEzNjYwMDUxMjk2ODc5OCI+IuW1jOWFpeW8j+aYvuekuueUteaxoOeUtemHj+eZvuWIhuavlCDmmL7npLrltYzlhaXnmoTnlLXmsaDnlLXph4/nmb7liIbmr5QiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZV9zdW1tYXJ5IiBtc2dpZD0iMzIxNTAyNTc3NTU3Njc4NjAzNyI+IuacquWFheeUteaXtuWcqOeKtuaAgeagj+Wbvuagh+WGheaYvuekuueUteaxoOeUtemHj+eZvuWIhuavlCI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzIiBtc2dpZD0iMTAwNDI5OTgxOTE3MjU0MjgiPiLlv6vpgJ/orr7nva4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5ncyIgbXNnaWQ9IjEwMDQyOTk4MTkxNzI1NDI4Ij4i5b+r5o236K6+572uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3RhdHVzX2JhciIgbXNnaWQ9IjQ4Nzc2NDU0NzY5NTkzMjQ3NjAiPiLnirbmgIHmoI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJvdmVydmlldyIgbXNnaWQ9IjQwMTg2MDIwMTM4OTU5MjY5NTYiPiLmpoLop4giPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkZW1vX21vZGUiIG1zZ2lkPSIyMzg5MTYzMDE4NTMzNTE0NjE5Ij4i5ryU56S65qih5byPIjwvc3RyaW5nPgpAQCAtNDM3LDcgKzQyOSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJ6ZW5fYWxhcm1fd2FybmluZyIgbXNnaWQ9IjQ0NDUzMzExOTU4MjI0NDI5MyI+IuaCqOWcqDx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPuWwhuS4jeS8muWQrOWIsOS4i+asoemXuemSn+WTjemTgyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlIiBtc2dpZD0iMzk4MDA2MzQwOTM1MDUyMjczNSI+Ijx4bGlmZjpnIGlkPSJXSEVOIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFsYXJtX3RlbXBsYXRlX2ZhciIgbXNnaWQ9IjQyNDIxNzk5ODI1ODY3MTQ4MTAiPiI8eGxpZmY6ZyBpZD0iV0hFTiI+JTEkczwveGxpZmY6Zz4iPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2RldGFpbCIgbXNnaWQ9IjI1NzkzNjkwOTE2NzI5MDIxMDEiPiLlv6vpgJ/orr7nva7vvIw8eGxpZmY6ZyBpZD0iVElUTEUiPiVzPC94bGlmZjpnPuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZGV0YWlsIiBtc2dpZD0iMjU3OTM2OTA5MTY3MjkwMjEwMSI+IuW/q+aNt+iuvue9ru+8jDx4bGlmZjpnIGlkPSJUSVRMRSI+JXM8L3hsaWZmOmc+44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9zdGF0dXNfYmFyX2hvdHNwb3QiIG1zZ2lkPSI0MDk5MzgxMzI5OTU2NDAyODY1Ij4i54Ot54K5Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9tYW5hZ2VkX3Byb2ZpbGUiIG1zZ2lkPSI2NjEzNjQxMzYzMTEyNTg0MTIwIj4i5bel5L2c6LWE5paZIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idHVuZXJfd2FybmluZ190aXRsZSIgbXNnaWQ9IjcwOTQ2ODk5MzA3OTMwMzE2ODIiPiLmmK/lkKbmnInotqPlrozlhajlj5blhrPkuo7kuKrkurrmhJ/op4kiPC9zdHJpbmc+CkBAIC00NTAsMTAgKzQ0MiwzOCBAQAogICAgIDxzdHJpbmcgbmFtZT0iYWN0aXZpdHlfbm90X2ZvdW5kIiBtc2dpZD0iMzQ4NDIzMjQ0MzI3Nzk5OTc0Ij4i5oKo55qE6K6+5aSH5Lit5pyq5a6J6KOF5q2k5bqU55SoIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xvY2tfc2Vjb25kcyIgbXNnaWQ9Ijc2ODk1NTQxNDc1NzkxNzk1MDciPiLmmL7npLrml7bpkp/nmoTnp5LmlbAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbG9ja19zZWNvbmRzX2Rlc2MiIG1zZ2lkPSI2MjgyNjkzMDY3MTMwNDcwNjc1Ij4i5Zyo54q25oCB5qCP5Lit5pi+56S65pe26ZKf55qE56eS5pWw44CC6L+Z5Y+v6IO95Lya5b2x5ZON55S15rGg55qE57ut6Iiq5pe26Ze044CCIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icXNfcmVhcnJhbmdlIiBtc2dpZD0iODA2MDkxODY5NzU1MTA2ODc2NSI+IumHjeaWsOaOkuWIl+W/q+mAn+iuvue9riI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNob3dfYnJpZ2h0bmVzcyIgbXNnaWQ9IjY2MTM5MzA4NDI4MDU5NDI1MTkiPiLlnKjlv6vpgJ/orr7nva7kuK3mmL7npLrkuq7luqbmoI8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJxc19yZWFycmFuZ2UiIG1zZ2lkPSI4MDYwOTE4Njk3NTUxMDY4NzY1Ij4i6YeN5paw5o6S5YiX5b+r5o236K6+572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ic2hvd19icmlnaHRuZXNzIiBtc2dpZD0iNjYxMzkzMDg0MjgwNTk0MjUxOSI+IuWcqOW/q+aNt+iuvue9ruS4reaYvuekuuS6ruW6puagjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImV4cGVyaW1lbnRhbCIgbXNnaWQ9IjYxOTgxODIzMTU1MzY3MjYxNjIiPiLlrp7pqozmgKciPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuimgeW8gOWQr+iTneeJmeWQl++8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLopoHlsIbmgqjnmoTplK7nm5jov57mjqXliLDlubPmnb/nlLXohJHvvIzmgqjlv4XpobvlhYjlvIDlkK/ok53niZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLlvIDlkK8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLlupTnlKjkuo48eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7pgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLlupTnlKjkuo7mnaXoh6rmraTlupTnlKjnmoTmiYDmnInpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i5bGP6JS9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i6YeN6KaB5oCn77ya5L2OIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IumHjeimgeaAp++8muS4gOiIrCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLph43opoHmgKfvvJrpq5giPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLph43opoHmgKfvvJrntKfmgKUiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuS4gOW+i+S4jeaYvuekuui/meS6m+mAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLlnKjpgJrnn6XliJfooajlupXpg6jmmL7npLrvvIzkvYbkuI3lj5Hlh7rmj5DnpLrpn7MiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+IuaYvuekuui/meS6m+mAmuefpe+8jOS9huS4jeWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i5Zyo6YCa55+l5YiX6KGo6aG26YOo5pi+56S677yM5bm25Y+R5Ye65o+Q56S66Z+zIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuWcqOWxj+W5leS4iuaMgee7reaYvuekuu+8jOW5tuWPkeWHuuaPkOekuumfsyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i5pu05aSa6K6+572uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i5a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5bi46KeE6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+IuWknOmXtOminOiJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i6Ieq5a6a5LmJ6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5pyq55+l6aKc6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IuminOiJsuS/ruaUuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+IuaYvuekuuKAnOW/q+aNt+iuvue9ruKAneWbvuWdlyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i5ZCv55So6Ieq5a6a5LmJ6L2s5o2iIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i5bqU55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IuehruiupOiuvue9riI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IumDqOWIhuminOiJsuiuvue9ruWPr+iDveS8muWvvOiHtOatpOiuvuWkh+aXoOazleS9v+eUqOOAguivt+eCueWHu+KAnOehruWumuKAneehruiupOi/meS6m+minOiJsuiuvue9ru+8jOWQpuWIme+8jOezu+e7n+WwhuWcqCAxMCDnp5LlkI7ph43nva7ov5nkupvorr7nva7jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3BhbmVsX3RpdGxlIiBtc2dpZD0iMzQ3NjcxNTE2MzY4NTU5MjQ1MyI+IueUteaxoCAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiLlhYXnlLXov4fnqIvkuK3ml6Dms5Xkvb/nlKjoioLnlLXliqnmiYsiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4i6IqC55S15Yqp5omLIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3N1bW1hcnkiIG1zZ2lkPSI5MDQ5MTExMTQ5NDA3NjI2ODA0Ij4i6ZmN5L2O5oCn6IO95bm26ZmQ5Yi25ZCO5Y+w5rWB6YePIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJISy9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCmluZGV4IDU2OWQ4NDcuLjBmMGFjNjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtemgtckhLL3N0cmluZ3MueG1sCkBAIC0xNjEsOCArMTYxLDcgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmluZ2VyX3NpbGVudCIgbXNnaWQ9IjkwNjEyNDMzMDc5MzkxMzUzODMiPiLpiLTogbLpnZzpn7PjgIIiPC9zdHJpbmc+CiAgICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9jYXN0aW5nICg2ODg3MzgyMTQxNzI2NTQzNjY4KSAtLT4KICAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfd29ya19tb2RlICgyNDc4NjMxOTQxNzE0NjA3MjI1KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV93b3JrX21vZGUiIG1zZ2lkPSIyNDc4NjMxOTQxNzE0NjA3MjI1Ij4i5bel5L2c5qih5byPIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiLpl5zplonjgIw8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jgI3jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQiIG1zZ2lkPSI2ODAzNTc0OTM1MDg0ODY3MDcwIj4i44CMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CN5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2FsbF9pdGVtc19kaXNtaXNzZWQiIG1zZ2lkPSI0NDY0Njk3MzY2MTc5MTY4ODM2Ij4i5omA5pyJ5pyA6L+R5L2/55So55qE5oeJ55So56iL5byP5Z2H5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiLmtYHli5XnhrHpu57lt7Lpl5zplonjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiLmtYHli5XnhrHpu57lt7LplovllZ/jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiLlt7LlgZzmraLmipXmlL7onqLluZXjgIIiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiLlt6XkvZzmqKHlvI/lt7Lpl5zplonjgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiIgbXNnaWQ9Ijc2NTA1ODg1NTM5ODgwMTQzNDEiPiLlt6XkvZzmqKHlvI/lt7LplovllZ/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiIgbXNnaWQ9IjU2MDU1MzQ4NzYxMDczMDA3MTEiPiLlt7Lpl5zplonlt6XkvZzmqKHlvI/jgIIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4i5bey6ZaL5ZWf5bel5L2c5qih5byP44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9icmlnaHRuZXNzIiBtc2dpZD0iODAwMzY4MTI4NTU0NzgwMzA5NSI+Iumhr+ekuuWFieaal+W6piI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdXNhZ2VfZGlzYWJsZWRfZGlhbG9nXzNnX3RpdGxlIiBtc2dpZD0iNTI4MTc3MDU5MzQ1OTg0MTg4OSI+IuW3suaaq+WBnCAyRy0zRyDmlbjmk5oiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiLlt7LmmqvlgZwgNEcg5pW45pOaIjwvc3RyaW5nPgpAQCAtMjk5LDE1ICsyOTQsMTQgQEAKICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3VzZWQiIG1zZ2lkPSIxNDc2ODEwNTg3NDc1NzYxNDc4Ij4i5bey5L2/55SoIDx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiLkuIrpmZDngrogPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiDorablkYoiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsICg2MjQ0OTE1Mjc0MzUwNDkwNDI5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0icXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2xhYmVsIiBtc2dpZD0iNjI0NDkxNTI3NDM1MDQ5MDQyOSI+IuW3peS9nOaooeW8jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfZW1wdHlfbWVzc2FnZSIgbXNnaWQ9Ijg2ODIxMjk1MDk1NDA4Mjc5OTkiPiLmgqjmnIDov5HnmoTonqLluZXpoa/npLrlnKjpgJnoo6EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2FwcF9pbmZvX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjI4OTAzMTcxODkzNzYwMDAwMzAiPiLmh4nnlKjnqIvlvI/os4fmlpkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xvY2tfdG9fYXBwX2J1dHRvbl9sYWJlbCIgbXNnaWQ9IjY5NDI4OTkwNDkwNzI1MDYwNDQiPiLonqLluZXlm7rlrpoiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4i5pCc5bCLIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSIgbXNnaWQ9IjI5NjkyODc4MzgxMjA1NTA1MDYiPiLnhKHms5XllZ/li5XjgIw8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz7jgI3jgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3Nob3dfaGlzdG9yeV9idXR0b25fbGFiZWwiIG1zZ2lkPSI3MDYyMDg4MTk2NDQ5NzQ3MjQ1Ij4i5pu05aSaIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IuiomOmMhCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbF9mb3JtYXQiIG1zZ2lkPSI2MzM3MTU1NjA4MDU1MDYyNDI5Ij4i6YKE5pyJIDx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiDpoIUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9ob3Jpem9udGFsIiBtc2dpZD0iODg0ODUxNDQ3NDU0MzQyNzMzMiI+IuawtOW5s+WIhuWJsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X3ZlcnRpY2FsIiBtc2dpZD0iOTA3NTI5MjIzMzY5NjE4MDgxMyI+IuWeguebtOWIhuWJsiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2N1c3RvbSIgbXNnaWQ9IjQxNzc4Mzc1OTc1MTM3MDE5NDMiPiLoh6roqILliIblibIiPC9zdHJpbmc+CkBAIC0zNzAsNyArMzY0LDYgQEAKICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iMjM3OTE4NzI2NzUwOTU1ODU5Ij4i55yB6Zu75qih5byP5bey6ZaL5ZWfIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IumZjeS9juaViOiDveS4pumZkOWItuiDjOaZr+aVuOaTmuWCs+i8uCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0IiBtc2dpZD0iMTA5MTU4NjU4MjM4MTEwMzgyIj4i6Zec6ZaJ55yB6Zu75qih5byPIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0IiBtc2dpZD0iMTEzNTE2OTMwMTg5NzE1MTkwOSI+IuWFp+WuueW3sumaseiXjyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9Im1lZGlhX3Byb2plY3Rpb25fZGlhbG9nX3RleHQiIG1zZ2lkPSIzMDcxNDMxMDI1NDQ4MjE4OTI4Ij4iPHhsaWZmOmcgaWQ9IkFQUF9TRUVLSU5HX1BFUk1JU1NJT04iPiVzPC94bGlmZjpnPiDlsIfplovlp4vmk7flj5bmgqjnmoTonqLluZXkuIrpoa/npLrnmoTlhaflrrnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX3JlbWVtYmVyX3RleHQiIG1zZ2lkPSIzMTAzNTEwODgyMTcyNzQ2NzUyIj4i5LiN55So5YaN6aGv56S6Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iY2xlYXJfYWxsX25vdGlmaWNhdGlvbnNfdGV4dCIgbXNnaWQ9IjgxNDE5Mjg4OTc3MTQ2MjgyOCI+IuWFqOmDqOa4hemZpCI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4i5ouS57WVIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RpdGxlIiBtc2dpZD0iNDkwNjc3MDEyNjM0NTkxMDk1NSI+IuOAjDx4bGlmZjpnIGlkPSJBUFBfTkFNRSI+JTEkczwveGxpZmY6Zz7jgI3ngrrpn7Pph4/lsI3oqbHmoYYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjE4MjY4ODk3MDUwOTU3Njg2NTYiPiLovJXop7jljbPlj6/lvqnljp/jgIIiPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uICg2ODQ2NDAyMzc4MTAwMTQ4Nzg5KSAtLT4KLSAgICA8c2tpcCAvPgorICAgIDxzdHJpbmcgbmFtZT0iZ3JvdXBfc3VtbWFyeV9jb25jYWRlbmF0aW9uIiBtc2dpZD0iNjg0NjQwMjM3ODEwMDE0ODc4OSI+IuOAgSAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiLmgqjmraPlnKjkvb/nlKjlt6XkvZzoqK3lrprmqpQiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiLns7vntbHkvb/nlKjogIXku4vpnaLoqr/oq6flmagiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiLpoa/npLrltYzlhaXnmoTpm7vmsaDnmb7liIbmr5QiPC9zdHJpbmc+CkBAIC00NTYsNCArNDQ4LDMyIEBACiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX3RpdGxlIiBtc2dpZD0iNTAyNzAzNzcwNjUwMDYzNTI2OSI+IuimgemWi+WVn+iXjeeJmeWXju+8nyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiLlpoLopoHlsIfpjbXnm6TpgKPmjqXoh7PlubPmnb/pm7vohabvvIzoq4vlhYjplovllZ/ol43niZnjgIIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiLplovllZ8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyIgbXNnaWQ9IjM2NDE0MDM0ODkzMTg2NTk2NjYiPiLlpZfnlKjliLDjgIw8eGxpZmY6ZyBpZD0iVE9QSUNfTkFNRSI+JTEkczwveGxpZmY6Zz7jgI3pgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b19hcHAiIG1zZ2lkPSIzNjMwMTY3ODM5Mzk4MTU5NjAiPiLlpZfnlKjliLDmraTmh4nnlKjnqIvlvI/nmoTmiYDmnInpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4i5bey5bCB6Y6WIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibG93X2ltcG9ydGFuY2UiIG1zZ2lkPSI0MTA5OTI5OTg2MTA3MTQ3OTMwIj4i5L2O6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGVmYXVsdF9pbXBvcnRhbmNlIiBtc2dpZD0iODE5MjEwNzY4OTk5NTc0MjY1MyI+IuS4gOiIrOmHjeimgeaApyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiLpq5jph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJtYXhfaW1wb3J0YW5jZSIgbXNnaWQ9IjUwODkwMDU4NzI3MTk1NjM4OTQiPiLnt4rmgKXph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IuawuOS4jemhr+ekuumAmeS6m+mAmuefpSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2xvdyIgbXNnaWQ9IjQzODM1NjMyNjczNzA4NTk3MjUiPiLpoa/npLrlnKjpgJrnn6XmuIXllq7lupXpg6jkvYbkuI3nmbzlh7rpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9kZWZhdWx0IiBtc2dpZD0iNDkyNjUyOTYxNTkyMDYxMDgxNyI+Iumhr+ekuumAmeS6m+mAmuefpeS9huS4jeeZvOWHuumfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2giIG1zZ2lkPSIzMjIyNjgwMTM2NjEyNDA4MjIzIj4i6aGv56S65Zyo6YCa55+l5riF5Zau6aCC6YOo5Lim55m85Ye66Z+z5pWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IuS4jeaZguaWvOieouW5leWHuuePvuS4pueZvOWHuumfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9tb3JlX3NldHRpbmdzIiBtc2dpZD0iODE2MzA2MjgzMzk2NTUzNTcxIj4i5pu05aSa6Kit5a6aIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4i5a6M5oiQIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiIG1zZ2lkPSIyMTIxOTU3OTI2MDQwNTQzMTQ4Ij4i5LiA6Iis6Imy57O7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25pZ2h0IiBtc2dpZD0iNTk0MzgxNzYyMjEwNTMwNzA3MiI+Iua3seayieiJsuezuyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9jdXN0b20iIG1zZ2lkPSIzNjU1NTc2NDkyMzIyMjk4NzEzIj4i6Ieq6KiC6aGP6ImyIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Vua25vd24iIG1zZ2lkPSIyNzA5MjAyMTA0MjU2MjY1MTA3Ij4i5LiN5piO6Imy57O7Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+Iumhj+iJsuS/ruaUuSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9zaG93X3FzIiBtc2dpZD0iMTc2MzI0NDM1NDM5OTI3NjY3OSI+Iumhr+ekuuOAjOW/q+mAn+ioreWumuOAjeWcluWhiiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iIG1zZ2lkPSI2NzI5MDAxMzA4MjE3MzQ3NTAxIj4i5ZWf55So6Ieq6KiC6K6K6Imy5Yqf6IO9Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfYXBwbHkiIG1zZ2lkPSI5MjEyNjAyMDEyNjQxMDM0MjgzIj4i5aWX55SoIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X3RpdGxlIiBtc2dpZD0iNDc0NjY2NjU0NTQ4MDUzNDY2MyI+IueiuuiqjeioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IumDqOWIhumhj+iJsuioreWumuacg+S7pOatpOijnee9rueEoeazleS9v+eUqOOAguiri+aMieS4gOS4iyBb56K65a6aXSDliqDku6Xnorroqo3vvIzlkKbliYfpgJnkupvpoY/oibLoqK3lrprlsIfmlrwgMTAg56eS5b6M6YeN6Kit44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiLpm7vmsaDpm7vph48gKDx4bGlmZjpnIGlkPSJJRF8xIj4lMSRkPC94bGlmZjpnPiUlKSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX2NoYXJnaW5nX3N1bW1hcnkiIG1zZ2lkPSIxMjc5MDk1NjUzNTMzMDQ0MDA4Ij4i5YWF6Zu75pmC54Sh5rOV5L2/55So44CM55yB6Zu75qih5byP44CNIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlIiBtc2dpZD0iNjI4NTg3MjQ3MDI2MDc5NTQyMSI+Iuecgembu+aooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IumZjeS9juaViOiDveS4pumZkOWItuiDjOaZr+aVuOaTmuWCs+i8uCI8L3N0cmluZz4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16aC1yVFcvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAppbmRleCBmMmZmZTE2Li4zMTM5ZTQxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXpoLXJUVy9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4i6Yi06IGy6Z2c6Z+z44CCIjwvc3RyaW5nPgogICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfY2FzdGluZyAoNjg4NzM4MjE0MTcyNjU0MzY2OCkgLS0+CiAgICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSAoMjQ3ODYzMTk0MTcxNDYwNzIyNSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfd29ya19tb2RlIiBtc2dpZD0iMjQ3ODYzMTk0MTcxNDYwNzIyNSI+IuW3peS9nOaooeW8jyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX3dpbGxfYmVfZGlzbWlzc2VkIiBtc2dpZD0iMzk1NzcwMjQyNDk4MDMxNDgxIj4i6Zec6ZaJ44CMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CN44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkIiBtc2dpZD0iNjgwMzU3NDkzNTA4NDg2NzA3MCI+IuOAjDx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPuOAjeW3sumXnOmWieOAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19hbGxfaXRlbXNfZGlzbWlzc2VkIiBtc2dpZD0iNDQ2NDY5NzM2NjE3OTE2ODgzNiI+IuacgOi/keS9v+eUqOeahOaHieeUqOeoi+W8j+W3suWFqOmDqOmXnOmWieOAgiI8L3N0cmluZz4KQEAgLTIxNCwxNCArMjEzLDEwIEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1MDA0NzA4MDAzNDQ3NTYxMzk0Ij4i5Y+v5pSc5byP54Sh57ea5Z+65Zyw5Y+w5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc19ob3RzcG90X2NoYW5nZWRfb24iIG1zZ2lkPSIyODkwOTUxNjA5MjI2NDc2MjA2Ij4i5Y+v5pSc5byP54Sh57ea5Z+65Zyw5Y+w5bey6ZaL5ZWf44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9jYXN0aW5nX3R1cm5lZF9vZmYiIG1zZ2lkPSIxNDMwNjY4OTgyMjcxOTc2MTcyIj4i5bey5YGc5q2i5oqV5pS+6J6i5bmV44CCIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiAoNzA0NTQxNzM5NjQzNjU1Mjg5MCkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vbiAoNzY1MDU4ODU1Mzk4ODAxNDM0MSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29mZiAoNTYwNTUzNDg3NjEwNzMwMDcxMSkgLS0+Ci0gICAgPHNraXAgLz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uICgyNDk4NDAzMzA3NTY5OTg2MTIpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9vZmYiIG1zZ2lkPSI3MDQ1NDE3Mzk2NDM2NTUyODkwIj4i5bel5L2c5qih5byP5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4i5bel5L2c5qih5byP5bey6ZaL5ZWf44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vZmYiIG1zZ2lkPSI1NjA1NTM0ODc2MTA3MzAwNzExIj4i5bel5L2c5qih5byP5bey6Zec6ZaJ44CCIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfY2hhbmdlZF9vbiIgbXNnaWQ9IjI0OTg0MDMzMDc1Njk5ODYxMiI+IuW3peS9nOaooeW8j+W3sumWi+WVn+OAgiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiLonqLluZXkuq7luqYiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ18zZ190aXRsZSIgbXNnaWQ9IjUyODE3NzA1OTM0NTk4NDE4ODkiPiLlt7LmmqvlgZwgMkctM0cg5pW45pOa6YCj57eaIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfNGdfdGl0bGUiIG1zZ2lkPSIxNjAxNzY5NzM2ODgxMDc4MDE2Ij4i5bey5pqr5YGcIDRHIOaVuOaTmumAo+e3miI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+IuW3suS9v+eUqCA8eGxpZmY6ZyBpZD0iREFUQV9VU0VEIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV9saW1pdCIgbXNnaWQ9IjU2MDExMTU4NTA0OTk0MTI4Ij4i5LiK6ZmQ54K6IDx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV93YXJuaW5nIiBtc2dpZD0iMjQ0MDA5ODA0NTY5MjM5OTAwOSI+Ijx4bGlmZjpnIGlkPSJEQVRBX0xJTUlUIj4lczwveGxpZmY6Zz4g6K2m5ZGKIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiLlt6XkvZzmqKHlvI8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2VtcHR5X21lc3NhZ2UiIG1zZ2lkPSI4NjgyMTI5NTA5NTQwODI3OTk5Ij4i5oKo5pyA6L+R55qE6J6i5bmV5pyD6aGv56S65Zyo6YCZ6KOhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19hcHBfaW5mb19idXR0b25fbGFiZWwiIG1zZ2lkPSIyODkwMzE3MTg5Mzc2MDAwMDMwIj4i5oeJ55So56iL5byP6LOH6KiKIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4i6J6i5bmV5Zu65a6aIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zZWFyY2hfYmFyX2xhYmVsIiBtc2dpZD0iODA3NDk5NzQwMDE4NzgzNjY3NyI+IuaQnOWwiyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbGF1bmNoX2Vycm9yX21lc3NhZ2UiIG1zZ2lkPSIyOTY5Mjg3ODM4MTIwNTUwNTA2Ij4i54Sh5rOV5ZWf5YuV44CMPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+44CN44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+IuabtOWkmiI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfaGlzdG9yeV9sYWJlbCIgbXNnaWQ9IjMwNzYyMTM4MjMzODIxOTgyODciPiLntIDpjIQiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+IumChOaciSA8eGxpZmY6ZyBpZD0iTlVNQkVSIj4lZDwveGxpZmY6Zz4g6aCFIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCIgbXNnaWQ9Ijg4NDg1MTQ0NzQ1NDM0MjczMzIiPiLmsLTlubPliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF92ZXJ0aWNhbCIgbXNnaWQ9IjkwNzUyOTIyMzM2OTYxODA4MTMiPiLlnoLnm7TliIblibIiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4i6Ieq6KiC5YiG5YmyIjwvc3RyaW5nPgpAQCAtMzcwLDcgKzM2NCw2IEBACiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjIzNzkxODcyNjc1MDk1NTg1OSI+IuevgOe0hOiAl+mbu+mHj+aooeW8j+W3suWVn+eUqCI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSI4MjAzMTg3ODgxMjY2NzI2OTIiPiLpmY3kvY7mlYjog73kuKbpmZDliLbog4zmma/mlbjmk5rlgrPovLgiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl9hY3Rpb25fdGV4dCIgbXNnaWQ9IjEwOTE1ODY1ODIzODExMDM4MiI+IumXnOmWieevgOe0hOiAl+mbu+mHj+aooeW8jyI8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCIgbXNnaWQ9IjExMzUxNjkzMDE4OTcxNTE5MDkiPiLlhaflrrnlt7LpmrHol48iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtZWRpYV9wcm9qZWN0aW9uX2RpYWxvZ190ZXh0IiBtc2dpZD0iMzA3MTQzMTAyNTQ0ODIxODkyOCI+Ijx4bGlmZjpnIGlkPSJBUFBfU0VFS0lOR19QRVJNSVNTSU9OIj4lczwveGxpZmY6Zz4g5bCH6ZaL5aeL5pO35Y+W5oKo55qE6J6i5bmV5LiK6aGv56S655qE5YWn5a6544CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IuS4jeimgeWGjemhr+ekuiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImNsZWFyX2FsbF9ub3RpZmljYXRpb25zX3RleHQiIG1zZ2lkPSI4MTQxOTI4ODk3NzE0NjI4MjgiPiLlhajpg6jmuIXpmaQiPC9zdHJpbmc+CkBAIC00MTUsOCArNDA4LDcgQEAKICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX3Byb21wdF9kZW55IiBtc2dpZD0iNTcyMDY2MzY0MzQxMTY5NjczMSI+IuaLkue1lSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InZvbHVtZXVpX25vdGlmaWNhdGlvbl90aXRsZSIgbXNnaWQ9IjQ5MDY3NzAxMjYzNDU5MTA5NTUiPiLjgIw8eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+44CN54++5Zyo5piv6aCQ6Kit55qE6Z+z6YeP5o6n5Yi25bCN6Kmx5pa55aGK44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4i6LyV6Ke46YCZ6KOh5Y2z5Y+v5oGi5b6p5Y6f5aeL6Kit5a6a44CCIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiAoNjg0NjQwMjM3ODEwMDE0ODc4OSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9Imdyb3VwX3N1bW1hcnlfY29uY2FkZW5hdGlvbiIgbXNnaWQ9IjY4NDY0MDIzNzgxMDAxNDg3ODkiPiLjgIEgIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWFuYWdlZF9wcm9maWxlX2ZvcmVncm91bmRfdG9hc3QiIG1zZ2lkPSI1NDIxNDg3MTE0NzM5MjQ1OTcyIj4i5oKo5q2j5Zyo5L2/55SoIFdvcmsg6Kit5a6a5qqUIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic3lzdGVtX3VpX3R1bmVyIiBtc2dpZD0iNzA4MjI0MTI3MzkyNDUyMDE4Ij4i57O757Wx5L2/55So6ICF5LuL6Z2i6Kq/5pW057K+6Z2IIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ic2hvd19iYXR0ZXJ5X3BlcmNlbnRhZ2UiIG1zZ2lkPSI1NDQ0MTM2NjAwNTEyOTY4Nzk4Ij4i6aGv56S65bWM5YWl5byP6Zu75rGg55m+5YiG5q+UIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiLopoHplovllZ/ol43niZnlip/og73ll47vvJ8iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX21lc3NhZ2UiIG1zZ2lkPSI5MTA2NTk1OTkwNzA4OTg1Mzg1Ij4i5aaC6KaB5bCH6Y2155uk6YCj57ea5Yiw5bmz5p2/6Zu76IWm77yM5oKo5b+F6aCI5YWI6ZaL5ZWf6JeN54mZ44CCIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF9jb25maXJtYXRpb25fb2siIG1zZ2lkPSI2MjU4MDc0MjUwOTQ4MzA5NzE1Ij4i6ZaL5ZWfIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4i5aWX55So5Yiw44CMPHhsaWZmOmcgaWQ9IlRPUElDX05BTUUiPiUxJHM8L3hsaWZmOmc+44CN6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fYXBwIiBtc2dpZD0iMzYzMDE2NzgzOTM5ODE1OTYwIj4i5aWX55So5Yiw6YCZ5YCL5oeJ55So56iL5byP55qE5omA5pyJ6YCa55+lIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmxvY2tlZF9pbXBvcnRhbmNlIiBtc2dpZD0iNTE5ODU3ODk4ODk3ODIzNDE2MSI+IuWwgemOliI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IuS9jumHjeimgeaApyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiLkuIDoiKzph43opoHmgKciPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJoaWdoX2ltcG9ydGFuY2UiIG1zZ2lkPSIxNTI3MDY2MTk1NjE0MDUwMjYzIj4i6auY6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4i57eK5oCl6YeN6KaB5oCnIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfYmxvY2tlZCIgbXNnaWQ9IjIzOTcxOTI2NDI2NTc4NzI4NzIiPiLkuIDlvovkuI3poa/npLrpgJnkupvpgJrnn6UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4i6aGv56S65Zyo6YCa55+l5riF5Zau5bqV6YOo5LiU5LiN55m85Ye65Lu75L2V6Z+z5pWIIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiLpoa/npLrpgJnkupvpgJrnn6XkuJTkuI3nmbzlh7rku7vkvZXpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9oaWdoIiBtc2dpZD0iMzIyMjY4MDEzNjYxMjQwODIyMyI+Iumhr+ekuuWcqOmAmuefpea4heWWrumgguerr+S4pueZvOWHuumfs+aViCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX21heCIgbXNnaWQ9IjUyMzY5ODcxNzE5MDQ3NTYxMzQiPiLnn63mmqvpoa/npLrlnKjonqLluZXkuIrkuKbnmbzlh7rpn7PmlYgiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+IuabtOWkmuioreWumiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIiBtc2dpZD0iNTI3OTQyNjA0NzI3MzkzMDE3NSI+IuWujOaIkCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9ub25lIiBtc2dpZD0iMjEyMTk1NzkyNjA0MDU0MzE0OCI+IuS4gOiIrOmhj+iJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiLlpJzplpPpoY/oibIiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IuiHquiogumhj+iJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF91bmtub3duIiBtc2dpZD0iMjcwOTIwMjEwNDI1NjI2NTEwNyI+IuS4jeaYjumhj+iJsiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3RyYW5zZm9ybSIgbXNnaWQ9IjY5ODU0NjA0MDgwNzkwODYwOTAiPiLpoY/oibLkv67mlLkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiLpoa/npLrlv6vpgJ/oqK3lrprlnJbloYoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9lbmFibGVfY3VzdG9tIiBtc2dpZD0iNjcyOTAwMTMwODIxNzM0NzUwMSI+IuWVn+eUqOiHquiogumhj+iJsuiuiuaPmyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2FwcGx5IiBtc2dpZD0iOTIxMjYwMjAxMjY0MTAzNDI4MyI+IuWll+eUqCI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF90aXRsZSIgbXNnaWQ9IjQ3NDY2NjY1NDU0ODA1MzQ2NjMiPiLnorroqo3oqK3lrpoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfbWVzc2FnZSIgbXNnaWQ9IjkxMTYwMDEwNjkzOTc5OTY2OTEiPiLpg6jliIbpoY/oibLoqK3lrprlj6/og73mnIPpgKDmiJDpgJnpg6joo53nva7nhKHms5Xkvb/nlKjjgILoq4vmjInkuIDkuIsgW+eiuuWuml0g5L6G56K66KqN5oKo6KaB5L2/55So6YCZ6aGe6aGP6Imy6Kit5a6a77yM5ZCm5YmH57O757Wx5bCH5ZyoIDEwIOenkuW+jOmHjeioremAmeS6m+ioreWumuOAgiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiIG1zZ2lkPSIzNDc2NzE1MTYzNjg1NTkyNDUzIj4i6Zu75rGgICg8eGxpZmY6ZyBpZD0iSURfMSI+JTEkZDwveGxpZmY6Zz4lJSkiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9jaGFyZ2luZ19zdW1tYXJ5IiBtc2dpZD0iMTI3OTA5NTY1MzUzMzA0NDAwOCI+IuWFhembu+aZgueEoeazleS9v+eUqOevgOe0hOiAl+mbu+mHj+aooeW8jyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF90aXRsZSIgbXNnaWQ9IjYyODU4NzI0NzAyNjA3OTU0MjEiPiLnr4DntITogJfpm7vph48iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSIgbXNnaWQ9IjkwNDkxMTExNDk0MDc2MjY4MDQiPiLpmY3kvY7mlYjog73kuKbpmZDliLbog4zmma/os4fmlpnlgrPovLgiPC9zdHJpbmc+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzLXp1L3N0cmluZ3MueG1sCmluZGV4IGVmYTA0ZTYuLmI5MzU5NmEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMtenUvc3RyaW5ncy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy16dS9zdHJpbmdzLnhtbApAQCAtMTYxLDggKzE2MSw3IEBACiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3Jpbmdlcl9zaWxlbnQiIG1zZ2lkPSI5MDYxMjQzMzA3OTM5MTM1MzgzIj4iSXNpa2hhbGkgc2l0aHVsaWxlLiI8L3N0cmluZz4KICAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBhY2Nlc3NpYmlsaXR5X2Nhc3RpbmcgKDY4ODczODIxNDE3MjY1NDM2NjgpIC0tPgogICAgIDxza2lwIC8+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV93b3JrX21vZGUgKDI0Nzg2MzE5NDE3MTQ2MDcyMjUpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3dvcmtfbW9kZSIgbXNnaWQ9IjI0Nzg2MzE5NDE3MTQ2MDcyMjUiPiJJbW9kaSB5b21zZWJlbnppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQiIG1zZ2lkPSIzOTU3NzAyNDI0OTgwMzE0ODEiPiJDYXNoaXNhIGktPHhsaWZmOmcgaWQ9IkFQUCI+JXM8L3hsaWZmOmc+LiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcmVjZW50c19pdGVtX2Rpc21pc3NlZCIgbXNnaWQ9IjY4MDM1NzQ5MzUwODQ4NjcwNzAiPiI8eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4gaXZhbGl3ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3JlY2VudHNfYWxsX2l0ZW1zX2Rpc21pc3NlZCIgbXNnaWQ9IjQ0NjQ2OTczNjYxNzkxNjg4MzYiPiJab25rZSBpemluaGxlbG8gem9rdXNlYmVuemEgemFrYW11dmEgemljYXNoaXNpd2UuIjwvc3RyaW5nPgpAQCAtMjE0LDE0ICsyMTMsMTAgQEAKICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfaG90c3BvdF9jaGFuZ2VkX29mZiIgbXNnaWQ9IjUwMDQ3MDgwMDM0NDc1NjEzOTQiPiJJLWhvdHNwb3QgaXZhbGl3ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX2hvdHNwb3RfY2hhbmdlZF9vbiIgbXNnaWQ9IjI4OTA5NTE2MDkyMjY0NzYyMDYiPiJJLWhvdHNwb3QgaXZ1bGl3ZS4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X2Nhc3RpbmdfdHVybmVkX29mZiIgbXNnaWQ9IjE0MzA2Njg5ODIyNzE5NzYxNzIiPiJVa3VzYWthemEga3dlc2lrcmluaSBrdW1pc2l3ZS4iPC9zdHJpbmc+Ci0gICAgPCEtLSBubyB0cmFuc2xhdGlvbiBmb3VuZCBmb3IgYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb2ZmICg3MDQ1NDE3Mzk2NDM2NTUyODkwKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uICg3NjUwNTg4NTUzOTg4MDE0MzQxKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmICg1NjA1NTM0ODc2MTA3MzAwNzExKSAtLT4KLSAgICA8c2tpcCAvPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIGFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb24gKDI0OTg0MDMzMDc1Njk5ODYxMikgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZiIgbXNnaWQ9IjcwNDU0MTczOTY0MzY1NTI4OTAiPiJJbW9kaSB5b21zZWJlbnppIGl2YWxpd2UuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYWNjZXNzaWJpbGl0eV9xdWlja19zZXR0aW5nc193b3JrX21vZGVfb24iIG1zZ2lkPSI3NjUwNTg4NTUzOTg4MDE0MzQxIj4iSW1vZGkgeW9tc2ViZW56aSBpdnVsaXdlLiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX2NoYW5nZWRfb2ZmIiBtc2dpZD0iNTYwNTUzNDg3NjEwNzMwMDcxMSI+Ikltb2RpIHlvbXNlYmVuemkgaXZhbGl3ZS4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJhY2Nlc3NpYmlsaXR5X3F1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9jaGFuZ2VkX29uIiBtc2dpZD0iMjQ5ODQwMzMwNzU2OTk4NjEyIj4iSW1vZGkgeW9tc2ViZW56aSBpdnVsaXdlLiI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImFjY2Vzc2liaWxpdHlfYnJpZ2h0bmVzcyIgbXNnaWQ9IjgwMDM2ODEyODU1NDc4MDMwOTUiPiJCb25pc2EgdWt1a2hhbnlhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iZGF0YV91c2FnZV9kaXNhYmxlZF9kaWFsb2dfM2dfdGl0bGUiIG1zZ2lkPSI1MjgxNzcwNTkzNDU5ODQxODg5Ij4iMkctM0cgaWRhdGhhIGltaXNpd2UiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJkYXRhX3VzYWdlX2Rpc2FibGVkX2RpYWxvZ180Z190aXRsZSIgbXNnaWQ9IjE2MDE3Njk3MzY4ODEwNzgwMTYiPiI0RyBpZGF0aGEgaW1pc2l3ZSI8L3N0cmluZz4KQEAgLTI5OSwxNSArMjk0LDE0IEBACiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc19jZWxsdWxhcl9kZXRhaWxfZGF0YV91c2VkIiBtc2dpZD0iMTQ3NjgxMDU4NzQ3NTc2MTQ3OCI+Ijx4bGlmZjpnIGlkPSJEQVRBX1VTRUQiPiVzPC94bGlmZjpnPiBpc2V0c2hlbnppc2l3ZSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX2xpbWl0IiBtc2dpZD0iNTYwMTExNTg1MDQ5OTQxMjgiPiI8eGxpZmY6ZyBpZD0iREFUQV9MSU1JVCI+JXM8L3hsaWZmOmc+IHVta2hhd3VsbyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF9kYXRhX3dhcm5pbmciIG1zZ2lkPSIyNDQwMDk4MDQ1NjkyMzk5MDA5Ij4iPHhsaWZmOmcgaWQ9IkRBVEFfTElNSVQiPiVzPC94bGlmZjpnPiBpc2V4d2F5aXNvIjwvc3RyaW5nPgotICAgIDwhLS0gbm8gdHJhbnNsYXRpb24gZm91bmQgZm9yIHF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCAoNjI0NDkxNTI3NDM1MDQ5MDQyOSkgLS0+Ci0gICAgPHNraXAgLz4KKyAgICA8c3RyaW5nIG5hbWU9InF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCIgbXNnaWQ9IjYyNDQ5MTUyNzQzNTA0OTA0MjkiPiJJbW9kaSB5b21zZWJlbnppIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19lbXB0eV9tZXNzYWdlIiBtc2dpZD0iODY4MjEyOTUwOTU0MDgyNzk5OSI+Ikl6aWtyaW5pIHpha2hvIHpha2FtdXZhIHppdmVsYSBsYXBoYSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfYXBwX2luZm9fYnV0dG9uX2xhYmVsIiBtc2dpZD0iMjg5MDMxNzE4OTM3NjAwMDAzMCI+IlVsd2F6aSBsb2hsZWxvIGxva3VzZWJlbnphIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sb2NrX3RvX2FwcF9idXR0b25fbGFiZWwiIG1zZ2lkPSI2OTQyODk5MDQ5MDcyNTA2MDQ0Ij4idWt1cGhpbmEgaXNpa3JpbmkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX3NlYXJjaF9iYXJfbGFiZWwiIG1zZ2lkPSI4MDc0OTk3NDAwMTg3ODM2Njc3Ij4ic2VzaGEiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2xhdW5jaF9lcnJvcl9tZXNzYWdlIiBtc2dpZD0iMjk2OTI4NzgzODEyMDU1MDUwNiI+IkF5aWt3YXphbmdhIHVrdXFhbGEgaS08eGxpZmY6ZyBpZD0iQVBQIj4lczwveGxpZmY6Zz4uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19zaG93X2hpc3RvcnlfYnV0dG9uX2xhYmVsIiBtc2dpZD0iNzA2MjA4ODE5NjQ0OTc0NzI0NSI+Ik9rdW5pbmdpIjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsIiBtc2dpZD0iMzA3NjIxMzgyMzM4MjE5ODI4NyI+IlVtbGFuZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0IiBtc2dpZD0iNjMzNzE1NTYwODA1NTA2MjQyOSI+Ijx4bGlmZjpnIGlkPSJOVU1CRVIiPiVkPC94bGlmZjpnPiBPa3VuaW5naSI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfbXVsdGlzdGFja19hZGRfc3RhY2tfZGlhbG9nX3NwbGl0X2hvcml6b250YWwiIG1zZ2lkPSI4ODQ4NTE0NDc0NTQzNDI3MzMyIj4iSGx1a2FuaXNhIG9rdXZ1bmRsaWxlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfdmVydGljYWwiIG1zZ2lkPSI5MDc1MjkyMjMzNjk2MTgwODEzIj4iSGx1a2FuaXNhIG9rdW1pbGUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX211bHRpc3RhY2tfYWRkX3N0YWNrX2RpYWxvZ19zcGxpdF9jdXN0b20iIG1zZ2lkPSI0MTc3ODM3NTk3NTEzNzAxOTQzIj4iSGx1a2FuaXNhIGt3ZXppZmlzbyI8L3N0cmluZz4KQEAgLTM3MCw3ICszNjQsNiBAQAogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSIyMzc5MTg3MjY3NTA5NTU4NTkiPiJJc2lsb25kb2xvemkgc2ViaGV0aHJpIHNpdnVsaXdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fdGV4dCIgbXNnaWQ9IjgyMDMxODc4ODEyNjY3MjY5MiI+IlNlaGxpc2EgdWt1c2ViZW56YSBuZWRhdGhhIHlhc2VtdXZhIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiIG1zZ2lkPSIxMDkxNTg2NTgyMzgxMTAzODIiPiJWYWxhIGlzaWxvbmRvbG96aSBzZWJoZXRocmkiPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faGlkZGVuX3RleHQiIG1zZ2lkPSIxMTM1MTY5MzAxODk3MTUxOTA5Ij4iT2t1cXVrZXRod2Uga3VmaWhsaXdlIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCIgbXNnaWQ9IjMwNzE0MzEwMjU0NDgyMTg5MjgiPiI8eGxpZmY6ZyBpZD0iQVBQX1NFRUtJTkdfUEVSTUlTU0lPTiI+JXM8L3hsaWZmOmc+IGl6b3FhbGEgdWt1dGh3ZWJ1bGEgeW9ua2UgaW50byBlYm9uaXN3YSBrdXNpa3Jpbmkgc2FraG8uIjwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9yZW1lbWJlcl90ZXh0IiBtc2dpZD0iMzEwMzUxMDg4MjE3Mjc0Njc1MiI+IlVuZ2Fib25pc2kgZnV0aGkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJjbGVhcl9hbGxfbm90aWZpY2F0aW9uc190ZXh0IiBtc2dpZD0iODE0MTkyODg5NzcxNDYyODI4Ij4iU3VsYSBrb25rZSI8L3N0cmluZz4KQEAgLTQxNSw4ICs0MDgsNyBAQAogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfcHJvbXB0X2RlbnkiIG1zZ2lkPSI1NzIwNjYzNjQzNDExNjk2NzMxIj4iUGhpa2EiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJ2b2x1bWV1aV9ub3RpZmljYXRpb25fdGl0bGUiIG1zZ2lkPSI0OTA2NzcwMTI2MzQ1OTEwOTU1Ij4iSS08eGxpZmY6ZyBpZD0iQVBQX05BTUUiPiUxJHM8L3hsaWZmOmc+IHlpbmd4b3hvIHlldm9sdW11Ijwvc3RyaW5nPgogICAgIDxzdHJpbmcgbmFtZT0idm9sdW1ldWlfbm90aWZpY2F0aW9uX3RleHQiIG1zZ2lkPSIxODI2ODg5NzA1MDk1NzY4NjU2Ij4iVGhpbnRhIHVrdXplIHVidXlpc2VsZSBrb2t3YW5nZW1wZWxhLiI8L3N0cmluZz4KLSAgICA8IS0tIG5vIHRyYW5zbGF0aW9uIGZvdW5kIGZvciBncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24gKDY4NDY0MDIzNzgxMDAxNDg3ODkpIC0tPgotICAgIDxza2lwIC8+CisgICAgPHN0cmluZyBuYW1lPSJncm91cF9zdW1tYXJ5X2NvbmNhZGVuYXRpb24iIG1zZ2lkPSI2ODQ2NDAyMzc4MTAwMTQ4Nzg5Ij4iLCAiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJtYW5hZ2VkX3Byb2ZpbGVfZm9yZWdyb3VuZF90b2FzdCIgbXNnaWQ9IjU0MjE0ODcxMTQ3MzkyNDU5NzIiPiJVc2ViZW56aXNhIGlwaHJvZmF5ZWxhIHlha2hvIHlvbXNlYmVuemkiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzeXN0ZW1fdWlfdHVuZXIiIG1zZ2lkPSI3MDgyMjQxMjczOTI0NTIwMTgiPiJJc2lzaHVuaSBzZS1VSSB5ZXNpc3RpbXUiPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJzaG93X2JhdHRlcnlfcGVyY2VudGFnZSIgbXNnaWQ9IjU0NDQxMzY2MDA1MTI5Njg3OTgiPiJCb25pc2EgYW1hcGhlc2VudGkgZWJoZXRocmkgZWxpbmFtYXRoaXNlbHdlIjwvc3RyaW5nPgpAQCAtNDU2LDQgKzQ0OCwzMiBAQAogICAgIDxzdHJpbmcgbmFtZT0iZW5hYmxlX2JsdWV0b290aF90aXRsZSIgbXNnaWQ9IjUwMjcwMzc3MDY1MDA2MzUyNjkiPiJWdWxhIGktQmx1ZXRvb3RoPyI8L3N0cmluZz4KICAgICA8c3RyaW5nIG5hbWU9ImVuYWJsZV9ibHVldG9vdGhfbWVzc2FnZSIgbXNnaWQ9IjkxMDY1OTU5OTA3MDg5ODUzODUiPiJVa3V6ZSB1eGh1bWUgaWtoaWJob2RpIHlha2hvIG5ldGhlYmh1bGV0aGkgeWFraG8sIGt1ZmFuZWxlIHVxYWxlIG5nb2t1dnVsYSBpLUJsdWV0b290aC4iPC9zdHJpbmc+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayIgbXNnaWQ9IjYyNTgwNzQyNTA5NDgzMDk3MTUiPiJWdWxhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYXBwbHlfdG9fdG9waWMiIG1zZ2lkPSIzNjQxNDAzNDg5MzE4NjU5NjY2Ij4iU2ViZW56aXNhIGt1emF6aXNvIHplLTx4bGlmZjpnIGlkPSJUT1BJQ19OQU1FIj4lMSRzPC94bGlmZjpnPiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCIgbXNnaWQ9IjM2MzAxNjc4MzkzOTgxNTk2MCI+IlNlYmVuemlzYSBrdXpvIHpvbmtlIGl6YXppc28gZXppdmVsYSBrdWxvbHUgaGxlbG8gbG9rdXNlYmVuemEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiIG1zZ2lkPSI1MTk4NTc4OTg4OTc4MjM0MTYxIj4iS3V2aW5qZWx3ZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9Imxvd19pbXBvcnRhbmNlIiBtc2dpZD0iNDEwOTkyOTk4NjEwNzE0NzkzMCI+IlVrdWJhbHVsZWthIG9rdXBoYW5zaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRlZmF1bHRfaW1wb3J0YW5jZSIgbXNnaWQ9IjgxOTIxMDc2ODk5OTU3NDI2NTMiPiJVa3ViYWx1bGVrYSBva3Vqd2F5ZWxla2lsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSIgbXNnaWQ9IjE1MjcwNjYxOTU2MTQwNTAyNjMiPiJVa3ViYWx1bGVrYSBva3VwaGV6dWx1Ijwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiIG1zZ2lkPSI1MDg5MDA1ODcyNzE5NTYzODk0Ij4iVWt1YmFsdWxla2Egb2t1c2hlc2hheW8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIiBtc2dpZD0iMjM5NzE5MjY0MjY1Nzg3Mjg3MiI+IlVuZ2Fsb2tvdGhpIHVib25pc2UgbGV6aSB6YXppc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9sb3ciIG1zZ2lkPSI0MzgzNTYzMjY3MzcwODU5NzI1Ij4iQm9uaXNhIG5nb2t1dGh1bGlsZSBuZ2FwaGFuc2kga29obHUgbHdlc2F6aXNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfZGVmYXVsdCIgbXNnaWQ9IjQ5MjY1Mjk2MTU5MjA2MTA4MTciPiJCb25pc2Egbmdva3V0aHVsaWxlIGxlemkgemF6aXNvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCIgbXNnaWQ9IjMyMjI2ODAxMzY2MTI0MDgyMjMiPiJCb25pc2EgbmdhcGhlenVsdSBrb2hsdSBsd2V6YXppc28gdXBoaW5kZSB3ZW56ZSB1bXNpbmRvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4IiBtc2dpZD0iNTIzNjk4NzE3MTkwNDc1NjEzNCI+IkJoZWthIGt1c2lrcmluaSB1cGhpbmRlIHdlbnplIHVtc2luZG8iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25fbW9yZV9zZXR0aW5ncyIgbXNnaWQ9IjgxNjMwNjI4MzM5NjU1MzU3MSI+Ikl6aWx1bmdpc2VsZWxvIGV6aW5pbmdpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2RvbmUiIG1zZ2lkPSI1Mjc5NDI2MDQ3MjczOTMwMTc1Ij4iS3dlbnppd2UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbm9uZSIgbXNnaWQ9IjIxMjE5NTc5MjYwNDA1NDMxNDgiPiJJbWliYWxhIGVqd2F5ZWxla2lsZSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21hdHJpeF9uaWdodCIgbXNnaWQ9IjU5NDM4MTc2MjIxMDUzMDcwNzIiPiJJbWliYWxhIHlhc2VidXN1a3UiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIiBtc2dpZD0iMzY1NTU3NjQ5MjMyMjI5ODcxMyI+IkltaWJhbGEgeWFuZ29rd2V6aWZpc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biIgbXNnaWQ9IjI3MDkyMDIxMDQyNTYyNjUxMDciPiJJbWliYWxhIGVuZ2F6aXdhIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfdHJhbnNmb3JtIiBtc2dpZD0iNjk4NTQ2MDQwODA3OTA4NjA5MCI+IlVrdWx1bmdpc3dhIGtvbWJhbGEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfc2hvd19xcyIgbXNnaWQ9IjE3NjMyNDQzNTQzOTkyNzY2NzkiPiJCb25pc2EgaXRoYXlpbGkgbGV6aWx1bmdpc2VsZWxvIGV6aXNoZXNoYXlvIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfZW5hYmxlX2N1c3RvbSIgbXNnaWQ9IjY3MjkwMDEzMDgyMTczNDc1MDEiPiJOaWthIGFtYW5kbGEgdWt1Z3VxdWx3YSBrd2FuZ29rd2V6aWZpc28iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSIgbXNnaWQ9IjkyMTI2MDIwMTI2NDEwMzQyODMiPiJTZWJlbnppc2EiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiIG1zZ2lkPSI0NzQ2NjY2NTQ1NDgwNTM0NjYzIj4iUWluaXNla2lzYSBpemlsdW5naXNlbGVsbyI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX3JldmVydF9tZXNzYWdlIiBtc2dpZD0iOTExNjAwMTA2OTM5Nzk5NjY5MSI+IkV6aW55ZSBpemlsdW5naXNlbGVsbyB6b21iYWxhIHppbmdlbnphIGxlIGRpdmF5aXNpIGluZ2FzZWJlbnppc2VraS4gQ2hvZm96YSBrdS1LVUxVTkdJTEUgdWt1emUgdXFpbmlzZWtpc2UgbGV6aSB6aWx1bmdpc2VsZWxvIHpvbWJhbGEsIHVtYSBrdW5nZW5qYWxvIGxlemkgemlsdW5naXNlbGVsbyB6aXpvc2V0aHdhIGthYnVzaGEgbmdlbXV2YSBrd2FtYXNla2hvbmRpIGFuZ3UtMTAuIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9wYW5lbF90aXRsZSIgbXNnaWQ9IjM0NzY3MTUxNjM2ODU1OTI0NTMiPiJJYmhldGhyaSAoPHhsaWZmOmcgaWQ9IklEXzEiPiUxJGQ8L3hsaWZmOmc+JSUpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSIgbXNnaWQ9IjEyNzkwOTU2NTM1MzMwNDQwMDgiPiJJc2lsb25kb2xvemkgc2ViaGV0aHJpIGFzaXRob2xha2FsaSBuZ2VzaWtoYXRoaSBzb2t1c2hhamEiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiIG1zZ2lkPSI2Mjg1ODcyNDcwMjYwNzk1NDIxIj4iSXNpbG9uZG9sb3ppIHNlYmhldGhyaSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5IiBtc2dpZD0iOTA0OTExMTE0OTQwNzYyNjgwNCI+IlNlaGxpc2EgdWt1c2ViZW56YSBuZWRhdGhhIHlhc2VtdXZhIjwvc3RyaW5nPgogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5cy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5cy54bWwKaW5kZXggNjEwMmFhNi4uYmYwY2JhMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9hcnJheXMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbApAQCAtMzcsNCArMzcsMTggQEAKICAgICAgICAgPGl0ZW0+MTU3PC9pdGVtPjxpdGVtPjMzNDwvaXRlbT4KICAgICAgICAgPGl0ZW0+MDwvaXRlbT4gIDxpdGVtPjMzNDwvaXRlbT4KICAgICA8L2FycmF5PgorICAgIDxhcnJheSBuYW1lPSJiYXR0ZXJ5bWV0ZXJfcGx1c19wb2ludHMiPgorICAgICAgICA8aXRlbT4zPC9pdGVtPjxpdGVtPjA8L2l0ZW0+CisgICAgICAgIDxpdGVtPjU8L2l0ZW0+PGl0ZW0+MDwvaXRlbT4KKyAgICAgICAgPGl0ZW0+NTwvaXRlbT48aXRlbT4zPC9pdGVtPgorICAgICAgICA8aXRlbT44PC9pdGVtPjxpdGVtPjM8L2l0ZW0+CisgICAgICAgIDxpdGVtPjg8L2l0ZW0+PGl0ZW0+NTwvaXRlbT4KKyAgICAgICAgPGl0ZW0+NTwvaXRlbT48aXRlbT41PC9pdGVtPgorICAgICAgICA8aXRlbT41PC9pdGVtPjxpdGVtPjg8L2l0ZW0+CisgICAgICAgIDxpdGVtPjM8L2l0ZW0+PGl0ZW0+ODwvaXRlbT4KKyAgICAgICAgPGl0ZW0+MzwvaXRlbT48aXRlbT41PC9pdGVtPgorICAgICAgICA8aXRlbT4wPC9pdGVtPjxpdGVtPjU8L2l0ZW0+CisgICAgICAgIDxpdGVtPjA8L2l0ZW0+PGl0ZW0+MzwvaXRlbT4KKyAgICAgICAgPGl0ZW0+MzwvaXRlbT48aXRlbT4zPC9pdGVtPgorICAgIDwvYXJyYXk+CiA8L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvYXJyYXlzX2Nhci54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5c19jYXIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMDQ3OWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2FycmF5c19jYXIueG1sCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IS0tCisqKgorKiogQ29weXJpZ2h0IDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCistLT4KKzxyZXNvdXJjZXM+CisgICAgPCEtLSBUaGVzZSBzaG91bGQgYmUgb3ZlcnJpZGVuIGluIGFuIG92ZXJsYXkuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGVtcHR5LgorICAgICAgICAgVGhlcmUgbmVlZHMgdG8gYmUgY29ycmVzcG9uZGVuY2UgcGVyIGluZGV4IGJldHdlZW4gdGhlc2UgYXJyYXlzLCB3aGljaCBtZWFucyB0aGF0IGlmIHRoZXJlCisgICAgICAgICBpc24ndCBhIGxvbmdwcmVzcyBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGEgc2hvcnRjdXQgaXRlbSwgcHV0IGluIGFuIGVtcHR5IGl0ZW0gdG8gbWFrZQorICAgICAgICAgc3VyZSBldmVyeXRoaW5nIGxpbmVzIHVwLgorICAgIC0tPgorICAgIDxhcnJheSBuYW1lPSJjYXJfc2hvcnRjdXRfaWNvbnMiIC8+CisgICAgPGFycmF5IG5hbWU9ImNhcl9zaG9ydGN1dF9pbnRlbnRfdXJpcyIgLz4KKyAgICA8YXJyYXkgbmFtZT0iY2FyX3Nob3J0Y3V0X2xvbmdwcmVzc19pbnRlbnRfdXJpcyIgLz4KKzwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb2xvcnMueG1sCmluZGV4IDU2MThlOWIuLjYxYzcxZGQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29sb3JzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2NvbG9ycy54bWwKQEAgLTU5LDE1ICs1OSwxNSBAQAogICAgIDwhLS0gVGhlIHJlY2VudHMgdGFzayBiYXIgZGFyayB0ZXh0IGNvbG9yIHRvIGJlIGRyYXduIG9uIHRvcCBvZiBsaWdodCBiYWNrZ3JvdW5kcy4gLS0+CiAgICAgPGNvbG9yIG5hbWU9InJlY2VudHNfdGFza19iYXJfZGFya190ZXh0X2NvbG9yIj4jY2MwMDAwMDA8L2NvbG9yPgogICAgIDwhLS0gVGhlIHJlY2VudHMgdGFzayBiYXIgbGlnaHQgZGlzbWlzcyBpY29uIGNvbG9yIHRvIGJlIGRyYXduIG9uIHRvcCBvZiBkYXJrIGJhY2tncm91bmRzLiAtLT4KLSAgICA8Y29sb3IgbmFtZT0icmVjZW50c190YXNrX2Jhcl9saWdodF9kaXNtaXNzX2NvbG9yIj4jZmZlZWVlZWU8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJyZWNlbnRzX3Rhc2tfYmFyX2xpZ2h0X2ljb25fY29sb3IiPiNmZmVlZWVlZTwvY29sb3I+CiAgICAgPCEtLSBUaGUgcmVjZW50cyB0YXNrIGJhciBkYXJrIGRpc21pc3MgaWNvbiBjb2xvciB0byBiZSBkcmF3biBvbiB0b3Agb2YgbGlnaHQgYmFja2dyb3VuZHMuIC0tPgotICAgIDxjb2xvciBuYW1lPSJyZWNlbnRzX3Rhc2tfYmFyX2RhcmtfZGlzbWlzc19jb2xvciI+Izk5MDAwMDAwPC9jb2xvcj4KLSAgICA8IS0tIFRoZSByZWNlbnRzIHRhc2sgYmFyIGhpZ2hsaWdodCBjb2xvci4gLS0+Ci0gICAgPGNvbG9yIG5hbWU9InJlY2VudHNfdGFza19iYXJfaGlnaGxpZ2h0X2NvbG9yIj4jMjhmZmZmZmY8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJyZWNlbnRzX3Rhc2tfYmFyX2RhcmtfaWNvbl9jb2xvciI+Izk5MDAwMDAwPC9jb2xvcj4KICAgICA8IS0tIFRoZSBsb2NrIHRvIHRhc2sgYnV0dG9uIGJhY2tncm91bmQgY29sb3IuIC0tPgogICAgIDxjb2xvciBuYW1lPSJyZWNlbnRzX3Rhc2tfdmlld19sb2NrX3RvX2FwcF9idXR0b25fYmFja2dyb3VuZF9jb2xvciI+I2ZmZTZlNmU2PC9jb2xvcj4KICAgICA8IS0tIFRoZSBsb2NrIHRvIHRhc2sgYnV0dG9uIGZvcmVncm91bmQgY29sb3IuIC0tPgogICAgIDxjb2xvciBuYW1lPSJyZWNlbnRzX3Rhc2tfdmlld19sb2NrX3RvX2FwcF9idXR0b25fY29sb3IiPiNmZjY2NjY2NjwvY29sb3I+CisgICAgPCEtLSBUaGUgYmFja2dyb3VuZCBjb2xvciBmb3IgdGhlIGZyZWVmb3JtIHdvcmtzcGFjZS4gLS0+CisgICAgPGNvbG9yIG5hbWU9InJlY2VudHNfZnJlZWZvcm1fd29ya3NwYWNlX2JnX2NvbG9yIj4jMzNGRkZGRkY8L2NvbG9yPgogCiAgICAgPGNvbG9yIG5hbWU9ImtleWd1YXJkX2FmZm9yZGFuY2UiPiNmZmZmZmZmZjwvY29sb3I+CiAKQEAgLTEwMCwxMCArMTAwLDkgQEAKICAgICA8Y29sb3IgbmFtZT0iY3VycmVudF91c2VyX2JvcmRlcl9jb2xvciI+QGNvbG9yL3N5c3RlbV9hY2NlbnRfY29sb3I8L2NvbG9yPgogCiAgICAgPCEtLSBUaGUgImluc2lkZSIgb2YgYSBub3RpZmljYXRpb24sIHJlYWNoZWQgdmlhIGxvbmdwcmVzcyAtLT4KLSAgICA8Y29sb3IgbmFtZT0ibm90aWZpY2F0aW9uX2d1dHNfYmdfY29sb3IiPkBjb2xvci9zeXN0ZW1fc2Vjb25kYXJ5X2NvbG9yPC9jb2xvcj4KLSAgICA8Y29sb3IgbmFtZT0ibm90aWZpY2F0aW9uX2d1dHNfdGl0bGVfY29sb3IiPiNGRkZGRkZGRjwvY29sb3I+Ci0gICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9ndXRzX3RleHRfY29sb3IiPiNiMkZGRkZGRjwvY29sb3I+Ci0gICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9ndXRzX2J0bl9jb2xvciI+I0ZGRkZGRkZGPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0ibm90aWZpY2F0aW9uX2d1dHNfYmdfY29sb3IiPkAqYW5kcm9pZDpjb2xvci9tYXRlcmlhbF9ncmV5XzUwPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0ibm90aWZpY2F0aW9uX2d1dHNfc2xpZGVyX2NvbG9yIj5AKmFuZHJvaWQ6Y29sb3IvbWF0ZXJpYWxfZGVlcF90ZWFsXzUwMDwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9Im5vdGlmaWNhdGlvbl9ndXRzX3NlY29uZGFyeV9zbGlkZXJfY29sb3IiPiM4NTgzODM8L2NvbG9yPgogCiAgICAgPGNvbG9yIG5hbWU9ImFzc2lzdF9vcmJfY29sb3IiPiNmZmZmZmY8L2NvbG9yPgogCkBAIC0xNDQsNCArMTQzLDExIEBACiAKICAgICA8Y29sb3IgbmFtZT0iZG9ja2VkX2RpdmlkZXJfYmFja2dyb3VuZCI+I2ZmMDAwMDAwPC9jb2xvcj4KICAgICA8Y29sb3IgbmFtZT0iZG9ja2VkX2RpdmlkZXJfaGFuZGxlIj4jZmZmZmZmPC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJkZWZhdWx0X3JlbW90ZV9pbnB1dF9iYWNrZ3JvdW5kIj5AKmFuZHJvaWQ6Y29sb3Ivbm90aWZpY2F0aW9uX2RlZmF1bHRfY29sb3I8L2NvbG9yPgorICAgIDxjb2xvciBuYW1lPSJyZW1vdGVfaW5wdXRfaGludCI+IzRkZmZmZmZmPC9jb2xvcj4KKworICAgIDxjb2xvciBuYW1lPSJxc190aWxlX3RpbnRfdW5hdmFpbGFibGUiPiM0MGZmZmZmZjwvY29sb3I+CisgICAgPGNvbG9yIG5hbWU9InFzX3RpbGVfdGludF9pbmFjdGl2ZSI+IzRkZmZmZmZmPC9jb2xvcj4KKyAgICA8Y29sb3IgbmFtZT0icXNfdGlsZV90aW50X2FjdGl2ZSI+I2ZmZmZmZmZmPC9jb2xvcj4KIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb25maWcueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9jb25maWcueG1sCmluZGV4IDM4OGRhMTcuLjk1NWFmODIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvY29uZmlnLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2NvbmZpZy54bWwKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAgICAgPCEtLSBUaGUgZGVmYXVsdCB0aWxlcyB0byBkaXNwbGF5IGluIFF1aWNrU2V0dGluZ3MgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJxdWlja19zZXR0aW5nc190aWxlc19kZWZhdWx0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj4KLSAgICAgICAgd2lmaSxidCxpbnZlcnNpb24sZG5kLGNlbGwsYWlycGxhbmUscm90YXRpb24sZmxhc2hsaWdodCxsb2NhdGlvbixjYXN0LGhvdHNwb3QKKyAgICAgICAgd2lmaSxidCxmbGFzaGxpZ2h0LGRuZCxjZWxsLGJhdHRlcnkscm90YXRpb24sYWlycGxhbmUsbG9jYXRpb24sY2FzdAogICAgIDwvc3RyaW5nPgogCiAgICAgPCEtLSBUaGUgdGlsZXMgdG8gZGlzcGxheSBpbiBRdWlja1NldHRpbmdzIC0tPgpAQCAtMTcyLDcgKzE3Miw3IEBACiAgICAgPGludGVnZXIgbmFtZT0icmVjZW50c19uYXZfYmFyX3NjcmltX2VudGVyX2R1cmF0aW9uIj40MDA8L2ludGVnZXI+CiAKICAgICA8IS0tIFRoZSBhbmltYXRpb24gZHVyYXRpb24gZm9yIGFuaW1hdGluZyB0aGUgcmVtb3ZhbCBvZiBhIHRhc2sgdmlldy4gLS0+Ci0gICAgPGludGVnZXIgbmFtZT0icmVjZW50c19hbmltYXRlX3Rhc2tfdmlld19yZW1vdmVfZHVyYXRpb24iPjI1MDwvaW50ZWdlcj4KKyAgICA8aW50ZWdlciBuYW1lPSJyZWNlbnRzX2FuaW1hdGVfdGFza192aWV3X3JlbW92ZV9kdXJhdGlvbiI+MTc1PC9pbnRlZ2VyPgogCiAgICAgPCEtLSBUaGUgYW5pbWF0aW9uIGR1cmF0aW9uIGZvciBzY3JvbGxpbmcgdGhlIHN0YWNrIHRvIGEgcGFydGljdWxhciBpdGVtLiAtLT4KICAgICA8aW50ZWdlciBuYW1lPSJyZWNlbnRzX2FuaW1hdGVfdGFza19zdGFja19zY3JvbGxfZHVyYXRpb24iPjIwMDwvaW50ZWdlcj4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbCBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvZGltZW5zLnhtbAppbmRleCA0ZTgxMmFhLi4wOTdjMzUyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2RpbWVucy54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9kaW1lbnMueG1sCkBAIC00NSwxMiArNDUsMTggQEAKICAgICA8IS0tIEhlaWdodCBvZiBhIGxhcmdlIG5vdGlmaWNhdGlvbiBpbiB0aGUgc3RhdHVzIGJhciAtLT4KICAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21heF9oZWlnaHQiPjI3NmRwPC9kaW1lbj4KIAotICAgIDwhLS0gSGVpZ2h0IG9mIGEgbWVkaXVtIG5vdGlmaWNhdGlvbiBpbiB0aGUgc3RhdHVzIGJhciAtLT4KLSAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21pZF9oZWlnaHQiPjEyOGRwPC9kaW1lbj4KKyAgICA8IS0tIEhlaWdodCBvZiBhIGhlYWRzIHVwIG5vdGlmaWNhdGlvbiBpbiB0aGUgc3RhdHVzIGJhciBmb3IgbGVnYWN5IGN1c3RvbSB2aWV3cyAtLT4KKyAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21heF9oZWFkc191cF9oZWlnaHRfbGVnYWN5Ij4xMjhkcDwvZGltZW4+CisKKyAgICA8IS0tIEhlaWdodCBvZiBhIGhlYWRzIHVwIG5vdGlmaWNhdGlvbiBpbiB0aGUgc3RhdHVzIGJhciAtLT4KKyAgICA8ZGltZW4gbmFtZT0ibm90aWZpY2F0aW9uX21heF9oZWFkc191cF9oZWlnaHQiPjE0MWRwPC9kaW1lbj4KIAogICAgIDwhLS0gSGVpZ2h0IG9mIGEgdGhlIHN1bW1hcnkgKCJtb3JlIGNhcmQiKSBub3RpZmljYXRpb24gb24ga2V5Z3VhcmQuIC0tPgogICAgIDxkaW1lbiBuYW1lPSJub3RpZmljYXRpb25fc3VtbWFyeV9oZWlnaHQiPjQ0ZHA8L2RpbWVuPgogCisgICAgPCEtLSBNaW5pbXVtIGxheW91dGVkIGhlaWdodCBvZiBhIG5vdGlmaWNhdGlvbiBpbiB0aGUgc3RhdHVzYmFyLS0+CisgICAgPGRpbWVuIG5hbWU9Im1pbl9ub3RpZmljYXRpb25fbGF5b3V0X2hlaWdodCI+NDhkcDwvZGltZW4+CisKICAgICA8IS0tIHNpemUgYXQgd2hpY2ggTm90aWZpY2F0aW9uIGljb25zIHdpbGwgYmUgZHJhd24gaW4gdGhlIHN0YXR1cyBiYXIgLS0+CiAgICAgPGRpbWVuIG5hbWU9InN0YXR1c19iYXJfaWNvbl9kcmF3aW5nX3NpemUiPjE3ZGlwPC9kaW1lbj4KIApAQCAtMTMzLDYgKzEzOSw3IEBACiAgICAgPGRpbWVuIG5hbWU9InFzX3F1aWNrX2FjdGlvbnNfcGFkZGluZyI+MjVkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9InFzX3F1aWNrX3RpbGVfc2l6ZSI+NDhkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9InFzX3F1aWNrX3RpbGVfcGFkZGluZyI+MTJkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9InFzX2RhdGVfYW5pbV90cmFuc2xhdGlvbiI+NDQuNWRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0icXNfcGFnZV9pbmRpY2F0b3Jfc2l6ZSI+MTJkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9InFzX3RpbGVfaWNvbl9zaXplIj4yNGRwPC9kaW1lbj4KICAgICA8ZGltZW4gbmFtZT0icXNfdGlsZV90ZXh0X3NpemUiPjEyc3A8L2RpbWVuPgpAQCAtMTkxLDE2ICsxOTgsMTYgQEAKICAgICA8ZGltZW4gbmFtZT0icmVjZW50c190YXNrX3ZpZXdfcm91bmRlZF9jb3JuZXJzX3JhZGl1cyI+MmRwPC9kaW1lbj4KIAogICAgIDwhLS0gVGhlIG1pbiB0cmFuc2xhdGlvbiBpbiB0aGUgWiBpbmRleCBmb3IgdGhlIGxhc3QgdGFzay4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9InJlY2VudHNfdGFza192aWV3X3pfbWluIj4yMGRwPC9kaW1lbj4KKyAgICA8ZGltZW4gbmFtZT0icmVjZW50c190YXNrX3ZpZXdfel9taW4iPjE2ZHA8L2RpbWVuPgogCiAgICAgPCEtLSBUaGUgbWF4IHRyYW5zbGF0aW9uIGluIHRoZSBaIGluZGV4IGZvciB0aGUgbGFzdCB0YXNrLiAtLT4KLSAgICA8ZGltZW4gbmFtZT0icmVjZW50c190YXNrX3ZpZXdfel9tYXgiPjgwZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJyZWNlbnRzX3Rhc2tfdmlld196X21heCI+NDhkcDwvZGltZW4+CiAKICAgICA8IS0tIFRoZSBhbW91bnQgdG8gdHJhbnNsYXRlIHdoZW4gYW5pbWF0aW5nIHRoZSByZW1vdmFsIG9mIGEgdGFzay4gLS0+CiAgICAgPGRpbWVuIG5hbWU9InJlY2VudHNfdGFza192aWV3X3JlbW92ZV9hbmltX3RyYW5zbGF0aW9uX3giPjEwMGRwPC9kaW1lbj4KIAogICAgIDwhLS0gVGhlIGFtb3VudCBvZiBoaWdobGlnaHQgdG8gbWFrZSBvbiBlYWNoIHRhc2sgdmlldy4gLS0+Ci0gICAgPGRpbWVuIG5hbWU9InJlY2VudHNfdGFza192aWV3X2hpZ2hsaWdodCI+MS41ZHA8L2RpbWVuPgorICAgIDxkaW1lbiBuYW1lPSJyZWNlbnRzX3Rhc2tfdmlld19oaWdobGlnaHQiPjFkcDwvZGltZW4+CiAKICAgICA8IS0tIFRoZSBhbW91bnQgdG8gb2Zmc2V0IHdoZW4gYW5pbWF0aW5nIGludG8gYW4gYWZmaWxpYXRlIGdyb3VwLiAtLT4KICAgICA8ZGltZW4gbmFtZT0icmVjZW50c190YXNrX3ZpZXdfYWZmaWxpYXRlX2dyb3VwX2VudGVyX29mZnNldCI+NjRkcDwvZGltZW4+CkBAIC0yNDEsNiArMjQ4LDkgQEAKICAgICA8IS0tIFRoZSBoZWlnaHQgb2YgdGhlIGhpc3RvcnkgYnV0dG9uLiAtLT4KICAgICA8ZGltZW4gbmFtZT0icmVjZW50c19oaXN0b3J5X2J1dHRvbl9oZWlnaHQiPjQ4ZHA8L2RpbWVuPgogCisgICAgPCEtLSBUaGUgcGFkZGluZyBiZXR3ZWVuIGZyZWVmb3JtIHdvcmtzcGFjZSB0YXNrcyAtLT4KKyAgICA8ZGltZW4gbmFtZT0icmVjZW50c19mcmVlZm9ybV93b3Jrc3BhY2VfdGFza19wYWRkaW5nIj44ZHA8L2RpbWVuPgorCiAgICAgPCEtLSBTcGFjZSByZXNlcnZlZCBmb3IgdGhlIGNhcmRzIGJlaGluZCB0aGUgdG9wIGNhcmQgaW4gdGhlIHRvcCBzdGFjayAtLT4KICAgICA8ZGltZW4gbmFtZT0idG9wX3N0YWNrX3BlZWtfYW1vdW50Ij4xMmRwPC9kaW1lbj4KIApAQCAtNTczLDkgKzU4Myw5IEBACiAgICAgPGRpbWVuIG5hbWU9InFzX2hlYWRlcl9uZWdfcGFkZGluZyI+LThkcDwvZGltZW4+CiAKICAgICA8IS0tIEhvdyBoaWdoIHdlIGxpZnQgdGhlIGRpdmlkZXIgd2hlbiB0b3VjaGluZyAtLT4KLSAgICA8ZGltZW4gbmFtZT0iZG9ja2VkX3N0YWNrX2RpdmlkZXJfbGlmdF9lbGV2YXRpb24iPjZkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9zdGFja19kaXZpZGVyX2xpZnRfZWxldmF0aW9uIj40ZHA8L2RpbWVuPgogCi0gICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCI+MjRkcDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCI+MTZkcDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9ImRvY2tlZF9kaXZpZGVyX2hhbmRsZV9oZWlnaHQiPjJkcDwvZGltZW4+CiAKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9pbnRlcm5hbC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2ludGVybmFsLnhtbAppbmRleCA2NzY4NWVlLi5lMGQzY2QyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2ludGVybmFsLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL2ludGVybmFsLnhtbApAQCAtMTcsNiArMTcsNyBAQAogPHJlc291cmNlcz4KICAgICA8ZGltZW4gbmFtZT0ic3RhdHVzX2Jhcl9oZWlnaHQiPkAqYW5kcm9pZDpkaW1lbi9zdGF0dXNfYmFyX2hlaWdodDwvZGltZW4+CiAgICAgPGRpbWVuIG5hbWU9Im5hdmlnYXRpb25fYmFyX2hlaWdodCI+QCphbmRyb2lkOmRpbWVuL25hdmlnYXRpb25fYmFyX2hlaWdodDwvZGltZW4+CisgICAgPGRpbWVuIG5hbWU9Im5hdmlnYXRpb25fYmFyX2hlaWdodF9jYXJfbW9kZSI+QCphbmRyb2lkOmRpbWVuL25hdmlnYXRpb25fYmFyX2hlaWdodF9jYXJfbW9kZTwvZGltZW4+CiAgICAgPGNvbG9yIG5hbWU9InNjcmVlbl9waW5uaW5nX3ByaW1hcnlfdGV4dCI+QCphbmRyb2lkOmNvbG9yL3ByaW1hcnlfdGV4dF9kZWZhdWx0X21hdGVyaWFsX2xpZ2h0PC9jb2xvcj4KIDwvcmVzb3VyY2VzPgogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sIGIvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAppbmRleCA2NjZhMDI0Li4wZTRmOThmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKQEAgLTcxMyw4ICs3MTMsOCBAQAogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSI+Q291bGQgbm90IHN0YXJ0IDx4bGlmZjpnIGlkPSJhcHAiIGV4YW1wbGU9IkNhbGVuZGFyIj4lczwveGxpZmY6Zz4uPC9zdHJpbmc+CiAgICAgPCEtLSBSZWNlbnRzOiBTaG93IGhpc3Rvcnkgc3RyaW5nLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KICAgICA8c3RyaW5nIG5hbWU9InJlY2VudHNfc2hvd19oaXN0b3J5X2J1dHRvbl9sYWJlbCI+TW9yZTwvc3RyaW5nPgotICAgIDwhLS0gUmVjZW50czogVGhlIGhpc3Rvcnkgb2YgcmVjZW50cy4gW0NIQVIgTElNSVQ9Tk9ORV0gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJyZWNlbnRzX2hpc3RvcnlfbGFiZWwiPkhpc3Rvcnk8L3N0cmluZz4KKyAgICA8IS0tIFJlY2VudHM6IEEgZm9ybWF0IHN0cmluZyB0byBzZXQgdGhlIG51bWJlciBvZiBhdmFpbGFiZSBoaXN0b3JpY2FsIHRhc2tzIGluIHJlY2VudHMuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19oaXN0b3J5X2xhYmVsX2Zvcm1hdCI+PHhsaWZmOmcgaWQ9Im51bWJlciI+JWQ8L3hsaWZmOmc+IE1vcmU8L3N0cmluZz4KIAogICAgIDwhLS0gUmVjZW50czogTXVsdGlTdGFjayBhZGQgc3RhY2sgc3BsaXQgaG9yaXpvbnRhbCByYWRpbyBidXR0b24uIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0icmVjZW50c19tdWx0aXN0YWNrX2FkZF9zdGFja19kaWFsb2dfc3BsaXRfaG9yaXpvbnRhbCI+U3BsaXQgSG9yaXpvbnRhbDwvc3RyaW5nPgpAQCAtOTA2LDkgKzkwNiw2IEBACiAgICAgPCEtLSBCYXR0ZXJ5IHNhdmVyIG5vdGlmaWNhdGlvbiBhY3Rpb24gdGV4dC4gW0NIQVIgTElNSVQ9NjBdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9zYXZlcl9ub3RpZmljYXRpb25fYWN0aW9uX3RleHQiPlR1cm4gb2ZmIGJhdHRlcnkgc2F2ZXI8L3N0cmluZz4KIAotICAgIDwhLS0gVGV4dCBzaG93biBpbiBwbGFjZSBvZiBub3RpZmljYXRpb24gY29udGVudHMgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGlzIGhpZGRlbiBvbiBhIHNlY3VyZSBsb2Nrc2NyZWVuIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2hpZGRlbl90ZXh0Ij5Db250ZW50cyBoaWRkZW48L3N0cmluZz4KLQogICAgIDwhLS0gTWVkaWEgcHJvamVjdGlvbiBwZXJtaXNzaW9uIGRpYWxvZyB3YXJuaW5nIHRleHQuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ibWVkaWFfcHJvamVjdGlvbl9kaWFsb2dfdGV4dCI+PHhsaWZmOmcgaWQ9ImFwcF9zZWVraW5nX3Blcm1pc3Npb24iIGV4YW1wbGU9IkhhbmdvdXRzIj4lczwveGxpZmY6Zz4gd2lsbCBzdGFydCBjYXB0dXJpbmcgZXZlcnl0aGluZyB0aGF0XCdzIGRpc3BsYXllZCBvbiB5b3VyIHNjcmVlbi48L3N0cmluZz4KIApAQCAtMTE3MSwzMSArMTE2OCwxMSBAQAogICAgIDwhLS0gT3B0aW9uIHRvIHVzZSBuZXcgcGFnaW5nIGxheW91dCBpbiBxdWljayBzZXR0aW5ncyBbQ0hBUiBMSU1JVD02MF0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJxc19wYWdpbmciIHRyYW5zbGF0YWJsZT0iZmFsc2UiPlVzZSB0aGUgbmV3IFF1aWNrIFNldHRpbmdzPC9zdHJpbmc+CiAKLSAgICA8IS0tIFRvZ2dsZXMgcGFnaW5nIHJlY2VudHMgdmlhIHRoZSByZWNlbnRzIGJ1dHRvbi4gRE8gTk9UIFRSQU5TTEFURSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im92ZXJ2aWV3X3BhZ2Vfb25fdG9nZ2xlIj5FbmFibGUgcGFnaW5nPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBmb3IgdGhlIHRvZ2dsZSBmb3IgZmFzdC10b2dnbGluZyByZWNlbnRzIHZpYSB0aGUgcmVjZW50cyBidXR0b24uIERPIE5PVCBUUkFOU0xBVEUgLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJvdmVydmlld19wYWdlX29uX3RvZ2dsZV9kZXNjIj5FbmFibGUgcGFnaW5nIHZpYSB0aGUgT3ZlcnZpZXcgYnV0dG9uPC9zdHJpbmc+Ci0KICAgICA8IS0tIFRvZ2dsZXMgZmFzdC10b2dnbGluZyByZWNlbnRzIHZpYSB0aGUgcmVjZW50cyBidXR0b24uIERPIE5PVCBUUkFOU0xBVEUgLS0+CiAgICAgPHN0cmluZyBuYW1lPSJvdmVydmlld19mYXN0X3RvZ2dsZV92aWFfYnV0dG9uIj5FbmFibGUgZmFzdCB0b2dnbGU8L3N0cmluZz4KICAgICA8IS0tIERlc2NyaXB0aW9uIGZvciB0aGUgdG9nZ2xlIGZvciBmYXN0LXRvZ2dsaW5nIHJlY2VudHMgdmlhIHRoZSByZWNlbnRzIGJ1dHRvbi4gRE8gTk9UIFRSQU5TTEFURSAtLT4KICAgICA8c3RyaW5nIG5hbWU9Im92ZXJ2aWV3X2Zhc3RfdG9nZ2xlX3ZpYV9idXR0b25fZGVzYyI+RW5hYmxlIGxhdW5jaCB0aW1lb3V0IHdoaWxlIHBhZ2luZzwvc3RyaW5nPgogCi0gICAgPCEtLSBUb2dnbGVzIGZ1bGxzY3JlZW4gc2NyZWVuc2hvdHMuIERPIE5PVCBUUkFOU0xBVEUgLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJvdmVydmlld19mdWxsc2NyZWVuX3RodW1ibmFpbHMiPkVuYWJsZSBmdWxsc2NyZWVuIHNjcmVlbnNob3RzPC9zdHJpbmc+Ci0gICAgPCEtLSBEZXNjcmlwdGlvbiBmb3IgdGhlIHRvZ2dsZSBmb3IgZnVsbHNjcmVlbiBzY3JlZW5zaG90cy4gRE8gTk9UIFRSQU5TTEFURSAtLT4KLSAgICA8c3RyaW5nIG5hbWU9Im92ZXJ2aWV3X2Z1bGxzY3JlZW5fdGh1bWJuYWlsc19kZXNjIj5FbmFibGUgZnVsbHNjcmVlbiBzY3JlZW5zaG90cyBpbiBPdmVydmlldy4gUmVzdGFydCByZXF1aXJlZC48L3N0cmluZz4KLQotICAgIDwhLS0gVG9nZ2xlIHRvIGVuYWJsZSB0aGUgT3ZlcnZpZXcgbmF2IGJhciBnZXN0dXJlLiBETyBOT1QgVFJBTlNMQVRFIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ib3ZlcnZpZXdfbmF2X2Jhcl9nZXN0dXJlIj5FbmFibGUgbmF2aWdhdGlvbiBiYXIgZ2VzdHVyZTwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gZm9yIHRoZSB0b2dnbGUgdG8gZW5hYmxlIHRoZSBPdmVydmlldyBuYXYgYmFyIGdlc3R1cmUuIERPIE5PVCBUUkFOU0xBVEUgLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJvdmVydmlld19uYXZfYmFyX2dlc3R1cmVfZGVzYyI+RW5hYmxlcyB0aGUgZ2VzdHVyZSB0byBlbnRlciBPdmVydmlldyBieSBzd2lwaW5nIHVwIG9uIHRoZSBOYXYgYmFyPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFRvZ2dsZSB0byBzaG93IHRoZSBoaXN0b3J5IHZpZXcgaW4gT3ZlcnZpZXcuIERPIE5PVCBUUkFOU0xBVEUgLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJvdmVydmlld19zaG93X2hpc3RvcnkiPlNob3cgSGlzdG9yeTwvc3RyaW5nPgotICAgIDwhLS0gRGVzY3JpcHRpb24gZm9yIHRoZSB0b2dnbGUgdG8gc2hvdyB0aGUgaGlzdG9yeSB2aWV3IGluIE92ZXJ2aWV3LiBETyBOT1QgVFJBTlNMQVRFIC0tPgotICAgIDxzdHJpbmcgbmFtZT0ib3ZlcnZpZXdfc2hvd19oaXN0b3J5X2Rlc2MiPkVuYWJsZXMgdGhlIGhpc3RvcnkgdmlldyB0byBzZWUgbW9yZSByZWNlbnQgdGFza3M8L3N0cmluZz4KLQogICAgIDwhLS0gVG9nZ2xlIHRvIHNldCB0aGUgaW5pdGlhbCBzY3JvbGwgc3RhdGUgdG8gYmUgcGFnaW5nIG9yIHN0YWNrLiBETyBOT1QgVFJBTlNMQVRFIC0tPgogICAgIDxzdHJpbmcgbmFtZT0ib3ZlcnZpZXdfaW5pdGlhbF9zdGF0ZV9wYWdpbmciPkluaXRpYWxpemUgdG8gcGFnaW5nPC9zdHJpbmc+CiAgICAgPCEtLSBEZXNjcmlwdGlvbiBmb3IgdGhlIHRvZ2dsZSB0byBzZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHN0YXRlIHRvIGJlIHBhZ2luZyBvciBzdGFjay4gRE8gTk9UIFRSQU5TTEFURSAtLT4KQEAgLTEyMjEsNCArMTE5OCw5NiBAQAogICAgIDwhLS0gQmx1ZXRvb3RoIGVuYWJsZW1lbnQgb2sgdGV4dCBbQ0hBUiBMSU1JVD00MF0gLS0+CiAgICAgPHN0cmluZyBuYW1lPSJlbmFibGVfYmx1ZXRvb3RoX2NvbmZpcm1hdGlvbl9vayI+VHVybiBvbjwvc3RyaW5nPgogCisgICAgPCEtLSBBcHBseSBub3RpZmljYXRpb24gaW1wb3J0YW5jZSBzZXR0aW5nIHRvIGEgdG9waWMgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJhcHBseV90b190b3BpYyI+QXBwbHkgdG8gPHhsaWZmOmcgaWQ9InRvcGljX25hbWUiIGV4YW1wbGU9IkZyaWVuZCBSZXF1ZXN0Ij4lMSRzPC94bGlmZjpnPiBub3RpZmljYXRpb25zPC9zdHJpbmc+CisgICAgPCEtLSBBcHBseSBub3RpZmljYXRpb24gaW1wb3J0YW5jZSBzZXR0aW5nIHRvIGFuIGFwcCBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImFwcGx5X3RvX2FwcCI+QXBwbHkgdG8gYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGlzIGFwcDwvc3RyaW5nPgorICAgIDwhLS0gTm90aWZpY2F0aW9uIGltcG9ydGFuY2UgdGl0bGUsIGJsb2NrZWQgc3RhdHVzLS0+CisgICAgPHN0cmluZyBuYW1lPSJibG9ja2VkX2ltcG9ydGFuY2UiPkJsb2NrZWQ8L3N0cmluZz4KKyAgICA8IS0tIE5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHRpdGxlLCBsb3cgc3RhdHVzLS0+CisgICAgPHN0cmluZyBuYW1lPSJsb3dfaW1wb3J0YW5jZSI+TG93IGltcG9ydGFuY2U8L3N0cmluZz4KKyAgICA8IS0tIE5vdGlmaWNhdGlvbiBpbXBvcnRhbmNlIHRpdGxlLCBub3JtYWwgc3RhdHVzLS0+CisgICAgPHN0cmluZyBuYW1lPSJkZWZhdWx0X2ltcG9ydGFuY2UiPk5vcm1hbCBpbXBvcnRhbmNlPC9zdHJpbmc+CisgICAgPCEtLSBOb3RpZmljYXRpb24gaW1wb3J0YW5jZSB0aXRsZSwgaGlnaCBzdGF0dXMtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImhpZ2hfaW1wb3J0YW5jZSI+SGlnaCBpbXBvcnRhbmNlPC9zdHJpbmc+CisgICAgPCEtLSBOb3RpZmljYXRpb24gaW1wb3J0YW5jZSB0aXRsZSwgbWF4IHN0YXR1cy0tPgorICAgIDxzdHJpbmcgbmFtZT0ibWF4X2ltcG9ydGFuY2UiPlVyZ2VudCBpbXBvcnRhbmNlPC9zdHJpbmc+CisKKyAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBibG9ja2VkIGltcG9ydGFuY2UgbGV2ZWwgZGVzY3JpcHRpb24gLS0+CisgICAgPHN0cmluZyBuYW1lPSJub3RpZmljYXRpb25faW1wb3J0YW5jZV9ibG9ja2VkIj5OZXZlciBzaG93IHRoZXNlIG5vdGlmaWNhdGlvbnM8L3N0cmluZz4KKworICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IGxvdyBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93Ij5TaWxlbnRseSBzaG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0PC9zdHJpbmc+CisKKyAgICA8IS0tIFtDSEFSIExJTUlUPTEwMF0gTm90aWZpY2F0aW9uIEltcG9ydGFuY2Ugc2xpZGVyOiBub3JtYWwgaW1wb3J0YW5jZSBsZXZlbCBkZXNjcmlwdGlvbiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQiPlNpbGVudGx5IHNob3cgdGhlc2Ugbm90aWZpY2F0aW9uczwvc3RyaW5nPgorCisgICAgPCEtLSBbQ0hBUiBMSU1JVD0xMDBdIE5vdGlmaWNhdGlvbiBJbXBvcnRhbmNlIHNsaWRlcjogaGlnaCBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfaGlnaCI+U2hvdyBhdCB0aGUgdG9wIG9mIHRoZSBub3RpZmljYXRpb25zIGxpc3QgYW5kIG1ha2Ugc291bmQ8L3N0cmluZz4KKworICAgIDwhLS0gW0NIQVIgTElNSVQ9MTAwXSBOb3RpZmljYXRpb24gSW1wb3J0YW5jZSBzbGlkZXI6IG1heCBpbXBvcnRhbmNlIGxldmVsIGRlc2NyaXB0aW9uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4Ij5QZWVrIG9udG8gdGhlIHNjcmVlbiBhbmQgbWFrZSBzb3VuZDwvc3RyaW5nPgorCisgICAgPCEtLSBOb3RpZmljYXRpb246IENvbnRyb2wgcGFuZWw6IExhYmVsIGZvciBidXR0b24gdGhhdCBsYXVuY2hlcyBub3RpZmljYXRpb24gc2V0dGluZ3MuIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ibm90aWZpY2F0aW9uX21vcmVfc2V0dGluZ3MiPk1vcmUgc2V0dGluZ3M8L3N0cmluZz4KKyAgICA8IS0tIE5vdGlmaWNhdGlvbjogQ29udHJvbCBwYW5lbDogTGFiZWwgZm9yIGJ1dHRvbiB0aGF0IGRpc21pc3NlcyBjb250cm9sIHBhbmVsLiBbQ0hBUiBMSU1JVD1OT05FXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9Im5vdGlmaWNhdGlvbl9kb25lIj5Eb25lPC9zdHJpbmc+CisKKyAgICA8IS0tIExhYmVsIGZvciBubyBjb2xvciB0cmFuc2Zvcm0gW0NIQVIgTElNSVQ9MzBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X25vbmUiPk5vcm1hbCBjb2xvcnM8L3N0cmluZz4KKworICAgIDwhLS0gTGFiZWwgZm9yIG5pZ2h0IGNvbG9yIHRyYW5zZm9ybSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfbmlnaHQiPk5pZ2h0IGNvbG9yczwvc3RyaW5nPgorCisgICAgPCEtLSBMYWJlbCBmb3IgY3VzdG9tIGNvbG9yIHRyYW5zZm9ybSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfY3VzdG9tIj5DdXN0b20gY29sb3JzPC9zdHJpbmc+CisKKyAgICA8IS0tIExhYmVsIGZvciB1bmtub3duIGNvbG9yIHRyYW5zZm9ybSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tYXRyaXhfdW5rbm93biI+VW5rbm93biBjb2xvcnM8L3N0cmluZz4KKworICAgIDwhLS0gVGl0bGUgZm9yIGNvbG9yIHRyYW5zZm9ybSBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl90cmFuc2Zvcm0iPkNvbG9yIG1vZGlmaWNhdGlvbjwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBmb3Igc2V0dGluZyB0byBzaG93IFF1aWNrIFNldHRpbmdzIHRpbGUgW0NIQVIgTElNSVQ9NjBdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbWF0cml4X3Nob3dfcXMiPlNob3cgUXVpY2sgU2V0dGluZ3MgdGlsZTwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBmb3Igc3dpdGNoIHRvIGVuYWJsZSBjdXN0b20gY29sb3IgdHJhbnNmb3JtIFtDSEFSIExJTUlUPTYwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX2VuYWJsZV9jdXN0b20iPkVuYWJsZSBjdXN0b20gdHJhbnNmb3JtPC9zdHJpbmc+CisKKyAgICA8IS0tIEJ1dHRvbiB0byBhcHBseSBzZXR0aW5ncyBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9hcHBseSI+QXBwbHk8L3N0cmluZz4KKworICAgIDwhLS0gVGl0bGUgb2Ygd2FybmluZyBkaWFsb2cgYWJvdXQgYmFkIGNvbG9yIHNldHRpbmdzLiBbQ0hBUiBMSU1JVD0zMF0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9yZXZlcnRfdGl0bGUiPkNvbmZpcm0gc2V0dGluZ3M8L3N0cmluZz4KKworICAgIDwhLS0gTWVzc2FnZSB3YXJuaW5nIHVzZXIgYWJvdXQgY3VzdG9tIGNvbG9yIHNldHRpbmdzIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfcmV2ZXJ0X21lc3NhZ2UiPlNvbWUgY29sb3Igc2V0dGluZ3MgY2FuIG1ha2UgdGhpcworICAgICAgICBkZXZpY2UgdW51c2FibGUuIENsaWNrIE9LIHRvIGNvbmZpcm0gdGhlc2UgY29sb3Igc2V0dGluZ3MsCisgICAgICAgIG90aGVyd2lzZSB0aGVzZSBzZXR0aW5ncyB3aWxsIHJlc2V0IGFmdGVyIDEwIHNlY29uZHMuPC9zdHJpbmc+CisKKyAgICA8c3RyaW5nIG5hbWU9ImNvbG9yX21vZGlmaWNhdGlvbl9yIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5SPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb2xvcl9tb2RpZmljYXRpb25fZyIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+Rzwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iY29sb3JfbW9kaWZpY2F0aW9uX2IiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkI8L3N0cmluZz4KKworICAgIDwhLS0gVGl0bGUgb2YgdGhlIGJhdHRlcnkgc2V0dGluZ3MgZGV0YWlsIHBhbmVsIFtDSEFSIExJTUlUPTIwXSAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImJhdHRlcnlfcGFuZWxfdGl0bGUiPkJhdHRlcnkgKDx4bGlmZjpnIG5hbWU9InBhdHRlcnlfcGVyY2VudCIgZXhhbXBsZT0iNTIiPiUxJGQ8L3hsaWZmOmc+JSUpPC9zdHJpbmc+CisKKyAgICA8IS0tIFN1bW1hcnkgb2YgYmF0dGVyeSBzYXZlciBub3QgYXZhaWxhYmxlIFtDSEFSIExJTUlUPU5PTkVdIC0tPgorICAgIDxzdHJpbmcgbmFtZT0iYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSI+QmF0dGVyeSBTYXZlciBub3QgYXZhaWxhYmxlIGR1cmluZyBjaGFyZ2luZzwvc3RyaW5nPgorCisgICAgPCEtLSBUaXRsZSBvZiBzd2l0Y2ggZm9yIGJhdHRlcnkgc2F2ZXIgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfdGl0bGUiPkJhdHRlcnkgU2F2ZXI8L3N0cmluZz4KKworICAgIDwhLS0gU3VtbWFyeSBvZiBzd2l0Y2ggZm9yIGJhdHRlcnkgc2F2ZXIgW0NIQVIgTElNSVQ9Tk9ORV0gLS0+CisgICAgPHN0cmluZyBuYW1lPSJiYXR0ZXJ5X2RldGFpbF9zd2l0Y2hfc3VtbWFyeSI+UmVkdWNlcyBwZXJmb3JtYW5jZSBhbmQgYmFja2dyb3VuZCBkYXRhPC9zdHJpbmc+CisKKyAgICA8IS0tIFVzZXIgdmlzaWJsZSB0aXRsZSBmb3IgdGhlIHN5c3RlbS13aWRlIGtleWJvYXJkIHNob3J0Y3V0cyBsaXN0LiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Nob3J0Y3V0X2dyb3VwX3N5c3RlbSI+U3lzdGVtPC9zdHJpbmc+CisgICAgPCEtLSBVc2VyIHZpc2libGUgdGl0bGUgZm9yIHRoZSBrZXlib2FyZCBzaG9ydGN1dCB0aGF0IHRha2VzIHRoZSB1c2VyIHRvIHRoZSBob21lIHNjcmVlbi4gLS0+CisgICAgPHN0cmluZyBuYW1lPSJrZXlib2FyZF9zaG9ydGN1dF9ncm91cF9zeXN0ZW1faG9tZSI+SG9tZTwvc3RyaW5nPgorICAgIDwhLS0gVXNlciB2aXNpYmxlIHRpdGxlIGZvciB0aGUgdGhlIGtleWJvYXJkIHNob3J0Y3V0IHRoYXQgdGFrZXMgdGhlIHVzZXIgdG8gdGhlIHJlY2VudHMgc2NyZWVuLiAtLT4KKyAgICA8c3RyaW5nIG5hbWU9ImtleWJvYXJkX3Nob3J0Y3V0X2dyb3VwX3N5c3RlbV9yZWNlbnRzIj5SZWNlbnRzPC9zdHJpbmc+CisgICAgPCEtLSBVc2VyIHZpc2libGUgdGl0bGUgZm9yIHRoZSB0aGUga2V5Ym9hcmQgc2hvcnRjdXQgdGhhdCB0cmlnZ2VycyB0aGUgYmFjayBhY3Rpb24uIC0tPgorICAgIDxzdHJpbmcgbmFtZT0ia2V5Ym9hcmRfc2hvcnRjdXRfZ3JvdXBfc3lzdGVtX2JhY2siPkJhY2s8L3N0cmluZz4KKwogPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0eWxlcy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMvdmFsdWVzL3N0eWxlcy54bWwKaW5kZXggNDdhZDZkYy4uNDMyOWY3OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbApAQCAtMjM3LDEyICsyMzcsNiBAQAogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmdyYXZpdHkiPmNlbnRlcjwvaXRlbT4KICAgICA8L3N0eWxlPgogCi0gICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLk1hdGVyaWFsLk5vdGlmaWNhdGlvbi5QYXJlbnRoZXRpY2FsIgotICAgICAgICAgICBwYXJlbnQ9IkAqYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24iPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTdHlsZSI+aXRhbGljPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+IzYwMDAwMDAwPC9pdGVtPgotICAgIDwvc3R5bGU+Ci0KICAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTWF0ZXJpYWwuTm90aWZpY2F0aW9uLkhlYWRlclRpdGxlIgogICAgICAgICBwYXJlbnQ9IkAqYW5kcm9pZDpzdHlsZS9UZXh0QXBwZWFyYW5jZS5NYXRlcmlhbC5Ob3RpZmljYXRpb24uSW5mbyI+CiAgICAgPC9zdHlsZT4KQEAgLTMwNSwxNCArMjk5LDUwIEBACiAKICAgICA8c3R5bGUgbmFtZT0iRG9ja2VkRGl2aWRlckJhY2tncm91bmQiPgogICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+bWF0Y2hfcGFyZW50PC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF9oZWlnaHQiPjEyZHA8L2l0ZW0+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+MTBkcDwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfZ3Jhdml0eSI+Y2VudGVyX3ZlcnRpY2FsPC9pdGVtPgogICAgIDwvc3R5bGU+CiAKICAgICA8c3R5bGUgbmFtZT0iRG9ja2VkRGl2aWRlckhhbmRsZSI+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2dyYXZpdHkiPmNlbnRlcl9ob3Jpem9udGFsPC9pdGVtPgotICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmxheW91dF93aWR0aCI+NjRkcDwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDpsYXlvdXRfd2lkdGgiPjk2ZHA8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6bGF5b3V0X2hlaWdodCI+NDhkcDwvaXRlbT4KICAgICA8L3N0eWxlPgogCisgICAgPHN0eWxlIG5hbWU9IlR1bmVyU2V0dGluZ3MiIHBhcmVudD0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuTWF0ZXJpYWwuU2V0dGluZ3MiPgorICAgICAgICA8aXRlbSBuYW1lPSJwcmVmZXJlbmNlVGhlbWUiPkBzdHlsZS9UdW5lclByZWZlcmVuY2VUaGVtZTwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlR1bmVyUHJlZmVyZW5jZVRoZW1lIiBwYXJlbnQ9IkBhbmRyb2lkOnN0eWxlL1RoZW1lLk1hdGVyaWFsLlNldHRpbmdzIj4KKyAgICAgICAgPGl0ZW0gbmFtZT0iQGRyb3Bkb3duUHJlZmVyZW5jZVN0eWxlIj5Ac3R5bGUvUHJlZmVyZW5jZS5Ecm9wRG93bi5NYXRlcmlhbDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMiPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xNHNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmZvbnRGYW1pbHkiPnNhbnMtc2VyaWYtbWVkaXVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRDb2xvciI+QGFuZHJvaWQ6Y29sb3IvYmxhY2s8L2l0ZW0+CisgICAgPC9zdHlsZT4KKworICAgIDxzdHlsZSBuYW1lPSJUZXh0QXBwZWFyYW5jZS5Ob3RpZmljYXRpb25HdXRzLkhlYWRlciI+CisgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6YWxwaGEiPi4zODwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0U2l6ZSI+MTJzcDwvaXRlbT4KKyAgICA8L3N0eWxlPgorCisgICAgPHN0eWxlIG5hbWU9IlRleHRBcHBlYXJhbmNlLk5vdGlmaWNhdGlvbkd1dHMuU2Vjb25kYXJ5Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbHBoYSI+LjU0PC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5QcmltYXJ5Ij4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphbHBoYSI+Ljg3PC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xNnNwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKKyAgICA8c3R5bGUgbmFtZT0iVGV4dEFwcGVhcmFuY2UuTm90aWZpY2F0aW9uR3V0cy5CdXR0b24iPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRTaXplIj4xNHNwPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOnRleHRBbGxDYXBzIj50cnVlPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmZvbnRGYW1pbHkiPnNhbnMtc2VyaWYtbWVkaXVtPC9pdGVtPgorICAgICAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOmdyYXZpdHkiPmNlbnRlcjwvaXRlbT4KKyAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp0ZXh0Q29sb3IiPkAqYW5kcm9pZDpjb2xvci9tYXRlcmlhbF9kZWVwX3RlYWxfNTAwPC9pdGVtPgorICAgIDwvc3R5bGU+CisKIDwvcmVzb3VyY2VzPgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvcmVzL3htbC90dW5lcl9wcmVmcy54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMveG1sL3R1bmVyX3ByZWZzLnhtbAppbmRleCBlMzE5MjdlLi45MGNkMzk0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMveG1sL3R1bmVyX3ByZWZzLnhtbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9yZXMveG1sL3R1bmVyX3ByZWZzLnhtbApAQCAtMjQsNiArMjQsNyBAQAogICAgICAgICBzeXN1aTpkZWZWYWx1ZT0idHJ1ZSIgLz4KIAogICAgIDxQcmVmZXJlbmNlU2NyZWVuCisgICAgICAgIGFuZHJvaWQ6a2V5PSJzdGF0dXNfYmFyIgogICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3N0YXR1c19iYXIiID4KIAogICAgICAgICA8Y29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuU3RhdHVzQmFyU3dpdGNoCkBAIC03MCwzOCArNzEsMTkgQEAKIAogCiAgICAgPFByZWZlcmVuY2VTY3JlZW4KKyAgICAgICAgYW5kcm9pZDprZXk9Im92ZXJ2aWV3IgogICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL292ZXJ2aWV3IiA+CiAKICAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfcGFnZV9vbl90b2dnbGUiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL292ZXJ2aWV3X3BhZ2Vfb25fdG9nZ2xlIgotICAgICAgICAgICAgYW5kcm9pZDpzdW1tYXJ5PSJAc3RyaW5nL292ZXJ2aWV3X3BhZ2Vfb25fdG9nZ2xlX2Rlc2MiIC8+Ci0KLSAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCiAgICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfaW5pdGlhbF9zdGF0ZV9wYWdpbmciCiAgICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL292ZXJ2aWV3X2luaXRpYWxfc3RhdGVfcGFnaW5nIgogICAgICAgICAgICAgYW5kcm9pZDpzdW1tYXJ5PSJAc3RyaW5nL292ZXJ2aWV3X2luaXRpYWxfc3RhdGVfcGFnaW5nX2Rlc2MiIC8+CiAKICAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfZmFzdF90b2dnbGUiCisgICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfZmFzdF90b2dnbGVfdmlhX2J1dHRvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvb3ZlcnZpZXdfZmFzdF90b2dnbGVfdmlhX2J1dHRvbiIKICAgICAgICAgICAgIGFuZHJvaWQ6c3VtbWFyeT0iQHN0cmluZy9vdmVydmlld19mYXN0X3RvZ2dsZV92aWFfYnV0dG9uX2Rlc2MiIC8+CiAKLSAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfbmF2X2Jhcl9nZXN0dXJlIgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9vdmVydmlld19uYXZfYmFyX2dlc3R1cmUiCi0gICAgICAgICAgICBhbmRyb2lkOnN1bW1hcnk9IkBzdHJpbmcvb3ZlcnZpZXdfbmF2X2Jhcl9nZXN0dXJlX2Rlc2MiIC8+Ci0KLSAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfZnVsbHNjcmVlbl90aHVtYm5haWxzIgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9vdmVydmlld19mdWxsc2NyZWVuX3RodW1ibmFpbHMiCi0gICAgICAgICAgICBhbmRyb2lkOnN1bW1hcnk9IkBzdHJpbmcvb3ZlcnZpZXdfZnVsbHNjcmVlbl90aHVtYm5haWxzX2Rlc2MiIC8+Ci0KLSAgICAgICAgPGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU3dpdGNoCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0ib3ZlcnZpZXdfc2hvd19oaXN0b3J5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9vdmVydmlld19zaG93X2hpc3RvcnkiCi0gICAgICAgICAgICBhbmRyb2lkOnN1bW1hcnk9IkBzdHJpbmcvb3ZlcnZpZXdfc2hvd19oaXN0b3J5X2Rlc2MiIC8+Ci0KICAgICA8L1ByZWZlcmVuY2VTY3JlZW4+CiAKICAgICA8U3dpdGNoUHJlZmVyZW5jZQpAQCAtMTE3LDcgKzk5LDEzIEBACiAKICAgICA8UHJlZmVyZW5jZQogICAgICAgICBhbmRyb2lkOmtleT0iZGVtb19tb2RlIgotICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2RlbW9fbW9kZSIgLz4KKyAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9kZW1vX21vZGUiCisgICAgICAgIGFuZHJvaWQ6ZnJhZ21lbnQ9ImNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLkRlbW9Nb2RlRnJhZ21lbnQiIC8+CisKKyAgICA8UHJlZmVyZW5jZQorICAgICAgICBhbmRyb2lkOmtleT0iY29sb3JfdHJhbnNmb3JtIgorICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2NvbG9yX3RyYW5zZm9ybSIKKyAgICAgICAgYW5kcm9pZDpmcmFnbWVudD0iY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuQ29sb3JNYXRyaXhGcmFnbWVudCIgLz4KIAogICAgIDwhLS0gV2FybmluZywgdGhpcyBnb2VzIGxhc3QuIC0tPgogICAgIDxQcmVmZXJlbmNlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyRHJhd2FibGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJEcmF3YWJsZS5qYXZhCmluZGV4IDNlYjEyNzEuLjM4YWUzNDUgMTAwNzU1Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJEcmF3YWJsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJEcmF3YWJsZS5qYXZhCkBAIC00OSw3ICs0OSw4IEBACiAgICAgcHJpdmF0ZSBmbG9hdCBtQnV0dG9uSGVpZ2h0RnJhY3Rpb247CiAgICAgcHJpdmF0ZSBmbG9hdCBtU3VicGl4ZWxTbW9vdGhpbmdMZWZ0OwogICAgIHByaXZhdGUgZmxvYXQgbVN1YnBpeGVsU21vb3RoaW5nUmlnaHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtRnJhbWVQYWludCwgbUJhdHRlcnlQYWludCwgbVdhcm5pbmdUZXh0UGFpbnQsIG1UZXh0UGFpbnQsIG1Cb2x0UGFpbnQ7CisgICAgcHJpdmF0ZSBmaW5hbCBQYWludCBtRnJhbWVQYWludCwgbUJhdHRlcnlQYWludCwgbVdhcm5pbmdUZXh0UGFpbnQsIG1UZXh0UGFpbnQsIG1Cb2x0UGFpbnQsCisgICAgICAgICAgICBtUGx1c1BhaW50OwogICAgIHByaXZhdGUgZmxvYXQgbVRleHRIZWlnaHQsIG1XYXJuaW5nVGV4dEhlaWdodDsKICAgICBwcml2YXRlIGludCBtSWNvblRpbnQgPSBDb2xvci5XSElURTsKIApAQCAtNjAsMTAgKzYxLDEzIEBACiAgICAgcHJpdmF0ZSBpbnQgbUNoYXJnZUNvbG9yOwogICAgIHByaXZhdGUgZmluYWwgZmxvYXRbXSBtQm9sdFBvaW50czsKICAgICBwcml2YXRlIGZpbmFsIFBhdGggbUJvbHRQYXRoID0gbmV3IFBhdGgoKTsKKyAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVBsdXNQb2ludHM7CisgICAgcHJpdmF0ZSBmaW5hbCBQYXRoIG1QbHVzUGF0aCA9IG5ldyBQYXRoKCk7CiAKICAgICBwcml2YXRlIGZpbmFsIFJlY3RGIG1GcmFtZSA9IG5ldyBSZWN0RigpOwogICAgIHByaXZhdGUgZmluYWwgUmVjdEYgbUJ1dHRvbkZyYW1lID0gbmV3IFJlY3RGKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0RiBtQm9sdEZyYW1lID0gbmV3IFJlY3RGKCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0RiBtUGx1c0ZyYW1lID0gbmV3IFJlY3RGKCk7CiAKICAgICBwcml2YXRlIGZpbmFsIFBhdGggbVNoYXBlUGF0aCA9IG5ldyBQYXRoKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBQYXRoIG1DbGlwUGF0aCA9IG5ldyBQYXRoKCk7CkBAIC0xNDEsNiArMTQ1LDkgQEAKICAgICAgICAgbUJvbHRQYWludC5zZXRDb2xvcihjb250ZXh0LmdldENvbG9yKFIuY29sb3IuYmF0dGVyeW1ldGVyX2JvbHRfY29sb3IpKTsKICAgICAgICAgbUJvbHRQb2ludHMgPSBsb2FkQm9sdFBvaW50cyhyZXMpOwogCisgICAgICAgIG1QbHVzUGFpbnQgPSBuZXcgUGFpbnQobUJvbHRQYWludCk7CisgICAgICAgIG1QbHVzUG9pbnRzID0gbG9hZFBsdXNQb2ludHMocmVzKTsKKwogICAgICAgICBtRGFya01vZGVCYWNrZ3JvdW5kQ29sb3IgPQogICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Q29sb3IoUi5jb2xvci5kYXJrX21vZGVfaWNvbl9jb2xvcl9kdWFsX3RvbmVfYmFja2dyb3VuZCk7CiAgICAgICAgIG1EYXJrTW9kZUZpbGxDb2xvciA9IGNvbnRleHQuZ2V0Q29sb3IoUi5jb2xvci5kYXJrX21vZGVfaWNvbl9jb2xvcl9kdWFsX3RvbmVfZmlsbCk7CkBAIC0xODcsOCArMTk0LDggQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblBvd2VyU2F2ZUNoYW5nZWQoKSB7Ci0gICAgICAgIG1Qb3dlclNhdmVFbmFibGVkID0gbUJhdHRlcnlDb250cm9sbGVyLmlzUG93ZXJTYXZlKCk7CisgICAgcHVibGljIHZvaWQgb25Qb3dlclNhdmVDaGFuZ2VkKGJvb2xlYW4gaXNQb3dlclNhdmUpIHsKKyAgICAgICAgbVBvd2VyU2F2ZUVuYWJsZWQgPSBpc1Bvd2VyU2F2ZTsKICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKICAgICB9CiAKQEAgLTIwNyw2ICsyMTQsMjEgQEAKICAgICAgICAgcmV0dXJuIHB0c0Y7CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXRbXSBsb2FkUGx1c1BvaW50cyhSZXNvdXJjZXMgcmVzKSB7CisgICAgICAgIGZpbmFsIGludFtdIHB0cyA9IHJlcy5nZXRJbnRBcnJheShSLmFycmF5LmJhdHRlcnltZXRlcl9wbHVzX3BvaW50cyk7CisgICAgICAgIGludCBtYXhYID0gMCwgbWF4WSA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcHRzW2ldKTsKKyAgICAgICAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBwdHNbaSArIDFdKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBmbG9hdFtdIHB0c0YgPSBuZXcgZmxvYXRbcHRzLmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHRzLmxlbmd0aDsgaSArPSAyKSB7CisgICAgICAgICAgICBwdHNGW2ldID0gKGZsb2F0KXB0c1tpXSAvIG1heFg7CisgICAgICAgICAgICBwdHNGW2kgKyAxXSA9IChmbG9hdClwdHNbaSArIDFdIC8gbWF4WTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRzRjsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRCb3VuZHMoaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewogICAgICAgICBzdXBlci5zZXRCb3VuZHMobGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKQEAgLTMyOCw5ICszNTAsOSBAQAogCiAgICAgICAgIGlmIChtUGx1Z2dlZEluKSB7CiAgICAgICAgICAgICAvLyBkZWZpbmUgdGhlIGJvbHQgc2hhcGUKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IGJsID0gbUZyYW1lLmxlZnQgKyBtRnJhbWUud2lkdGgoKSAvIDQuNWY7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBibCA9IG1GcmFtZS5sZWZ0ICsgbUZyYW1lLndpZHRoKCkgLyA0ZjsKICAgICAgICAgICAgIGZpbmFsIGZsb2F0IGJ0ID0gbUZyYW1lLnRvcCArIG1GcmFtZS5oZWlnaHQoKSAvIDZmOwotICAgICAgICAgICAgZmluYWwgZmxvYXQgYnIgPSBtRnJhbWUucmlnaHQgLSBtRnJhbWUud2lkdGgoKSAvIDdmOworICAgICAgICAgICAgZmluYWwgZmxvYXQgYnIgPSBtRnJhbWUucmlnaHQgLSBtRnJhbWUud2lkdGgoKSAvIDRmOwogICAgICAgICAgICAgZmluYWwgZmxvYXQgYmIgPSBtRnJhbWUuYm90dG9tIC0gbUZyYW1lLmhlaWdodCgpIC8gMTBmOwogICAgICAgICAgICAgaWYgKG1Cb2x0RnJhbWUubGVmdCAhPSBibCB8fCBtQm9sdEZyYW1lLnRvcCAhPSBidAogICAgICAgICAgICAgICAgICAgICB8fCBtQm9sdEZyYW1lLnJpZ2h0ICE9IGJyIHx8IG1Cb2x0RnJhbWUuYm90dG9tICE9IGJiKSB7CkBAIC0zNTgsNiArMzgwLDM5IEBACiAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGN1dCB0aGUgYm9sdCBvdXQgb2YgdGhlIG92ZXJhbGwgc2hhcGUKICAgICAgICAgICAgICAgICBtU2hhcGVQYXRoLm9wKG1Cb2x0UGF0aCwgUGF0aC5PcC5ESUZGRVJFTkNFKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtUG93ZXJTYXZlRW5hYmxlZCkgeworICAgICAgICAgICAgLy8gZGVmaW5lIHRoZSBwbHVzIHNoYXBlCisgICAgICAgICAgICBmaW5hbCBmbG9hdCBwdyA9IG1GcmFtZS53aWR0aCgpICogMiAvIDM7CisgICAgICAgICAgICBmaW5hbCBmbG9hdCBwbCA9IG1GcmFtZS5sZWZ0ICsgKG1GcmFtZS53aWR0aCgpIC0gcHcpIC8gMjsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHB0ID0gbUZyYW1lLnRvcCArIChtRnJhbWUuaGVpZ2h0KCkgLSBwdykgLyAyOworICAgICAgICAgICAgZmluYWwgZmxvYXQgcHIgPSBtRnJhbWUucmlnaHQgLSAobUZyYW1lLndpZHRoKCkgLSBwdykgLyAyOworICAgICAgICAgICAgZmluYWwgZmxvYXQgcGIgPSBtRnJhbWUuYm90dG9tIC0gKG1GcmFtZS5oZWlnaHQoKSAtIHB3KSAvIDI7CisgICAgICAgICAgICBpZiAobVBsdXNGcmFtZS5sZWZ0ICE9IHBsIHx8IG1QbHVzRnJhbWUudG9wICE9IHB0CisgICAgICAgICAgICAgICAgICAgIHx8IG1QbHVzRnJhbWUucmlnaHQgIT0gcHIgfHwgbVBsdXNGcmFtZS5ib3R0b20gIT0gcGIpIHsKKyAgICAgICAgICAgICAgICBtUGx1c0ZyYW1lLnNldChwbCwgcHQsIHByLCBwYik7CisgICAgICAgICAgICAgICAgbVBsdXNQYXRoLnJlc2V0KCk7CisgICAgICAgICAgICAgICAgbVBsdXNQYXRoLm1vdmVUbygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1QbHVzRnJhbWUubGVmdCArIG1QbHVzUG9pbnRzWzBdICogbVBsdXNGcmFtZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbVBsdXNGcmFtZS50b3AgKyBtUGx1c1BvaW50c1sxXSAqIG1QbHVzRnJhbWUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAyOyBpIDwgbVBsdXNQb2ludHMubGVuZ3RoOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgbVBsdXNQYXRoLmxpbmVUbygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGx1c0ZyYW1lLmxlZnQgKyBtUGx1c1BvaW50c1tpXSAqIG1QbHVzRnJhbWUud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGx1c0ZyYW1lLnRvcCArIG1QbHVzUG9pbnRzW2kgKyAxXSAqIG1QbHVzRnJhbWUuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtUGx1c1BhdGgubGluZVRvKAorICAgICAgICAgICAgICAgICAgICAgICAgbVBsdXNGcmFtZS5sZWZ0ICsgbVBsdXNQb2ludHNbMF0gKiBtUGx1c0ZyYW1lLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICBtUGx1c0ZyYW1lLnRvcCArIG1QbHVzUG9pbnRzWzFdICogbVBsdXNGcmFtZS5oZWlnaHQoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZsb2F0IGJvbHRQY3QgPSAobVBsdXNGcmFtZS5ib3R0b20gLSBsZXZlbFRvcCkgLyAobVBsdXNGcmFtZS5ib3R0b20gLSBtUGx1c0ZyYW1lLnRvcCk7CisgICAgICAgICAgICBib2x0UGN0ID0gTWF0aC5taW4oTWF0aC5tYXgoYm9sdFBjdCwgMCksIDEpOworICAgICAgICAgICAgaWYgKGJvbHRQY3QgPD0gQk9MVF9MRVZFTF9USFJFU0hPTEQpIHsKKyAgICAgICAgICAgICAgICAvLyBkcmF3IHRoZSBib2x0IGlmIG9wYXF1ZQorICAgICAgICAgICAgICAgIGMuZHJhd1BhdGgobVBsdXNQYXRoLCBtUGx1c1BhaW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGN1dCB0aGUgYm9sdCBvdXQgb2YgdGhlIG92ZXJhbGwgc2hhcGUKKyAgICAgICAgICAgICAgICBtU2hhcGVQYXRoLm9wKG1QbHVzUGF0aCwgUGF0aC5PcC5ESUZGRVJFTkNFKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIGNvbXB1dGUgcGVyY2VudGFnZSB0ZXh0CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL0JhdHRlcnlNZXRlclZpZXcuamF2YQppbmRleCA2Y2I4ZGE0Li5jZGJkYzIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvQmF0dGVyeU1ldGVyVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9CYXR0ZXJ5TWV0ZXJWaWV3LmphdmEKQEAgLTc0LDcgKzc0LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblBvd2VyU2F2ZUNoYW5nZWQoKSB7CisgICAgcHVibGljIHZvaWQgb25Qb3dlclNhdmVDaGFuZ2VkKGJvb2xlYW4gaXNQb3dlclNhdmUpIHsKIAogICAgIH0KIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1JlY2VudHNDb21wb25lbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9SZWNlbnRzQ29tcG9uZW50LmphdmEKaW5kZXggN2Y2Y2RhMC4uOTkwMjhhNmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9SZWNlbnRzQ29tcG9uZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1JlY2VudHNDb21wb25lbnQuamF2YQpAQCAtMzIsNyArMzIsNyBAQAogICAgIC8qKgogICAgICAqIERvY2tzIHRoZSB0b3AtbW9zdCB0YXNrIGFuZCBvcGVucyByZWNlbnRzLgogICAgICAqLwotICAgIHZvaWQgZG9ja1RvcFRhc2soYm9vbGVhbiBkcmFnZ2luZ0luUmVjZW50cywgaW50IHN0YWNrQ3JlYXRlTW9kZSwgUmVjdCBpbml0aWFsQm91bmRzKTsKKyAgICBib29sZWFuIGRvY2tUb3BUYXNrKGJvb2xlYW4gZHJhZ2dpbmdJblJlY2VudHMsIGludCBzdGFja0NyZWF0ZU1vZGUsIFJlY3QgaW5pdGlhbEJvdW5kcyk7CiAKICAgICAvKioKICAgICAgKiBDYWxsZWQgZHVyaW5nIGEgZHJhZy1mcm9tLW5hdmJhci1pbiBnZXN0dXJlLgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1N3aXBlSGVscGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU3dpcGVIZWxwZXIuamF2YQppbmRleCA2MjA3MzI0Li44NzBlMGFmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU3dpcGVIZWxwZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvU3dpcGVIZWxwZXIuamF2YQpAQCAtMjQ2LDcgKzI0NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1XYXRjaExvbmdQcmVzcyA9IG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VyclZpZXcgIT0gbnVsbCAmJiAhbUxvbmdQcmVzc1NlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHBvcyA9IGdldFBvcyhldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBkZWx0YSA9IHBvcyAtIG1Jbml0aWFsVG91Y2hQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUN1cnJWaWV3ICE9IG51bGwgJiYgIW1Mb25nUHJlc3NTZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIE1hdGguYWJzKGRlbHRhKSA8IG1QYWdpbmdUb3VjaFNsb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTG9uZ1ByZXNzU2VudCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJWaWV3LnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX0xPTkdfQ0xJQ0tFRCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvVmlld0ludmVydEhlbHBlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1ZpZXdJbnZlcnRIZWxwZXIuamF2YQppbmRleCA1YjhkM2Q2Li5jOWJhODg1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvVmlld0ludmVydEhlbHBlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9WaWV3SW52ZXJ0SGVscGVyLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXg7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeENvbG9yRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGFpbnQ7CkBAIC0zNSwxMyArMzYsMTkgQEAKIAogICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbURhcmtQYWludCA9IG5ldyBQYWludCgpOwogICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1MaW5lYXJPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8Vmlldz4gbVRhcmdldHM7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb2xvck1hdHJpeCBtTWF0cml4ID0gbmV3IENvbG9yTWF0cml4KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBDb2xvck1hdHJpeCBtR3JheXNjYWxlTWF0cml4ID0gbmV3IENvbG9yTWF0cml4KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBsb25nIG1GYWRlRHVyYXRpb247CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8Vmlldz4gbVRhcmdldHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAotICAgIHB1YmxpYyBWaWV3SW52ZXJ0SGVscGVyKFZpZXcgdGFyZ2V0LCBsb25nIGZhZGVEdXJhdGlvbikgewotICAgICAgICB0aGlzKGNvbnN0cnVjdEFycmF5KHRhcmdldCksIGZhZGVEdXJhdGlvbik7CisgICAgcHVibGljIFZpZXdJbnZlcnRIZWxwZXIoVmlldyB2LCBsb25nIGZhZGVEdXJhdGlvbikgeworICAgICAgICB0aGlzKHYuZ2V0Q29udGV4dCgpLCBmYWRlRHVyYXRpb24pOworICAgICAgICBhZGRUYXJnZXQodik7CisgICAgfQorICAgIHB1YmxpYyBWaWV3SW52ZXJ0SGVscGVyKENvbnRleHQgY29udGV4dCwgbG9uZyBmYWRlRHVyYXRpb24pIHsKKyAgICAgICAgbUxpbmVhck91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY29udGV4dCwKKyAgICAgICAgICAgICAgICBhbmRyb2lkLlIuaW50ZXJwb2xhdG9yLmxpbmVhcl9vdXRfc2xvd19pbik7CisgICAgICAgIG1GYWRlRHVyYXRpb24gPSBmYWRlRHVyYXRpb247CiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQXJyYXlMaXN0PFZpZXc+IGNvbnN0cnVjdEFycmF5KFZpZXcgdGFyZ2V0KSB7CkBAIC01MCwxMSArNTcsMTIgQEAKICAgICAgICAgcmV0dXJuIHZpZXdzOwogICAgIH0KIAotICAgIHB1YmxpYyBWaWV3SW52ZXJ0SGVscGVyKEFycmF5TGlzdDxWaWV3PiB0YXJnZXRzLCBsb25nIGZhZGVEdXJhdGlvbikgewotICAgICAgICBtVGFyZ2V0cyA9IHRhcmdldHM7Ci0gICAgICAgIG1MaW5lYXJPdXRTbG93SW5JbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKG1UYXJnZXRzLmdldCgwKS5nZXRDb250ZXh0KCksCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5SLmludGVycG9sYXRvci5saW5lYXJfb3V0X3Nsb3dfaW4pOwotICAgICAgICBtRmFkZUR1cmF0aW9uID0gZmFkZUR1cmF0aW9uOworICAgIHB1YmxpYyB2b2lkIGNsZWFyVGFyZ2V0cygpIHsKKyAgICAgICAgbVRhcmdldHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRUYXJnZXQoVmlldyB0YXJnZXQpIHsKKyAgICAgICAgbVRhcmdldHMuYWRkKHRhcmdldCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZmFkZShmaW5hbCBib29sZWFuIGludmVydCwgbG9uZyBkZWxheSkgewpAQCAtMTEyLDQgKzEyMCwxMiBAQAogICAgICAgICBtTWF0cml4LnByZUNvbmNhdChtR3JheXNjYWxlTWF0cml4KTsKICAgICAgICAgbURhcmtQYWludC5zZXRDb2xvckZpbHRlcihuZXcgQ29sb3JNYXRyaXhDb2xvckZpbHRlcihtTWF0cml4KSk7CiAgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SW52ZXJ0ZWQoYm9vbGVhbiBpbnZlcnQsIGJvb2xlYW4gZmFkZSwgbG9uZyBkZWxheSkgeworICAgICAgICBpZiAoZmFkZSkgeworICAgICAgICAgICAgZmFkZShpbnZlcnQsIGRlbGF5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVwZGF0ZShpbnZlcnQpOworICAgICAgICB9CisgICAgfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9rZXlib2FyZC9LZXlib2FyZFVJLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkva2V5Ym9hcmQvS2V5Ym9hcmRVSS5qYXZhCmluZGV4IGQ5MzE4NTYuLjQ4MWI5MTgwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkva2V5Ym9hcmQvS2V5Ym9hcmRVSS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9rZXlib2FyZC9LZXlib2FyZFVJLmphdmEKQEAgLTcwLDE3ICs3MCwxOSBAQAogICAgIC8vIHRpbWUgZm9yIHVzIHRvIHJlY2VpdmUgdGhlIHNpZ25hbCB0aGF0IGl0J3Mgc3RhcnRpbmcuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBCTFVFVE9PVEhfU1RBUlRfREVMQVlfTUlMTElTID0gMTAgKiAxMDAwOwogCisgICAgLy8gV2Ugd2lsbCBiZSBzY2FubmluZyB1cCB0byAzMCBzZWNvbmRzLCBhZnRlciB3aGljaCB3ZSdsbCBzdG9wLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgQkxVRVRPT1RIX1NDQU5fVElNRU9VVF9NSUxMSVMgPSAzMCAqIDEwMDA7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfTk9UX0VOQUJMRUQgPSAtMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfVU5LTk9XTiA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1dBSVRJTkdfRk9SX0JPT1RfQ09NUExFVEVEID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfV0FJVElOR19GT1JfVEFCTEVUX01PREVfRVhJVCA9IDI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1dBSVRJTkdfRk9SX0RFVklDRV9ESVNDT1ZFUlkgPSAzOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9XQUlUSU5HX0ZPUl9CTFVFVE9PVEggPSA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9XQUlUSU5HX0ZPUl9TVEFURV9QQUlSRUQgPSA1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9QQUlSSU5HID0gNjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfUEFJUkVEID0gNzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfVVNFUl9DQU5DRUxMRUQgPSA4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9ERVZJQ0VfTk9UX0ZPVU5EID0gOTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfUEFJUklORyA9IDU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BBSVJFRCA9IDY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VTRVJfQ0FOQ0VMTEVEID0gNzsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfREVWSUNFX05PVF9GT1VORCA9IDg7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0lOSVQgPSAwOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfT05fQk9PVF9DT01QTEVURUQgPSAxOwpAQCAtOTIsNiArOTQsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfT05fQkxFX1NDQU5fRkFJTEVEID0gNzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NIT1dfQkxVRVRPT1RIX0RJQUxPRyA9IDg7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19ESVNNSVNTX0JMVUVUT09USF9ESUFMT0cgPSA5OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfQkxFX0FCT1JUX1NDQU4gPSAxMDsKIAogICAgIHByaXZhdGUgdm9sYXRpbGUgS2V5Ym9hcmRIYW5kbGVyIG1IYW5kbGVyOwogICAgIHByaXZhdGUgdm9sYXRpbGUgS2V5Ym9hcmRVSUhhbmRsZXIgbVVJSGFuZGxlcjsKQEAgLTEwNyw2ICsxMTAsNyBAQAogICAgIHByaXZhdGUgbG9uZyBtQm9vdENvbXBsZXRlZFRpbWU7CiAKICAgICBwcml2YXRlIGludCBtSW5UYWJsZXRNb2RlID0gSW5wdXRNYW5hZ2VyLlNXSVRDSF9TVEFURV9VTktOT1dOOworICAgIHByaXZhdGUgaW50IG1TY2FuQXR0ZW1wdCA9IDA7CiAgICAgcHJpdmF0ZSBTY2FuQ2FsbGJhY2sgbVNjYW5DYWxsYmFjazsKICAgICBwcml2YXRlIEJsdWV0b290aERpYWxvZyBtRGlhbG9nOwogCkBAIC0zMjgsNiArMzMyLDkgQEAKICAgICAgICAgICAgIC5idWlsZCgpOwogICAgICAgICBtU2NhbkNhbGxiYWNrID0gbmV3IEtleWJvYXJkU2NhbkNhbGxiYWNrKCk7CiAgICAgICAgIHNjYW5uZXIuc3RhcnRTY2FuKEFycmF5cy5hc0xpc3QoZmlsdGVyKSwgc2V0dGluZ3MsIG1TY2FuQ2FsbGJhY2spOworCisgICAgICAgIE1lc3NhZ2UgYWJvcnRNc2cgPSBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19CTEVfQUJPUlRfU0NBTiwgKyttU2NhbkF0dGVtcHQsIDApOworICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZURlbGF5ZWQoYWJvcnRNc2csIEJMVUVUT09USF9TQ0FOX1RJTUVPVVRfTUlMTElTKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc3RvcFNjYW5uaW5nKCkgewpAQCAtMzM4LDYgKzM0NSwxOSBAQAogICAgIH0KIAogICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgaGFuZGxlciB0aHJlYWQKKyAgICBwcml2YXRlIHZvaWQgYmxlQWJvcnRTY2FuSW50ZXJuYWwoaW50IHNjYW5BdHRlbXB0KSB7CisgICAgICAgIGlmIChtU3RhdGUgPT0gU1RBVEVfV0FJVElOR19GT1JfREVWSUNFX0RJU0NPVkVSWSAmJiBzY2FuQXR0ZW1wdCA9PSBtU2NhbkF0dGVtcHQpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJCbHVldG9vdGggc2NhbiB0aW1lZCBvdXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0b3BTY2FubmluZygpOworICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBhbHNvIHRyeSBzaHV0dGluZyBvZmYgYmx1ZXRvb3RoIGlmIHdlIGVuYWJsZWQKKyAgICAgICAgICAgIC8vIGl0IGluIHRoZSBmaXJzdCBwbGFjZT8KKyAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX0RFVklDRV9OT1RfRk9VTkQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIGhhbmRsZXIgdGhyZWFkCiAgICAgcHJpdmF0ZSB2b2lkIG9uRGV2aWNlQWRkZWRJbnRlcm5hbChDYWNoZWRCbHVldG9vdGhEZXZpY2UgZCkgewogICAgICAgICBpZiAobVN0YXRlID09IFNUQVRFX1dBSVRJTkdfRk9SX0RFVklDRV9ESVNDT1ZFUlkgJiYgZC5nZXROYW1lKCkuZXF1YWxzKG1LZXlib2FyZE5hbWUpKSB7CiAgICAgICAgICAgICBzdG9wU2Nhbm5pbmcoKTsKQEAgLTQyNSw2ICs0NDUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGF0ZSA9IFNUQVRFX1VTRVJfQ0FOQ0VMTEVEOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIE1TR19CTEVfQUJPUlRfU0NBTjogeworICAgICAgICAgICAgICAgICAgICBpbnQgc2NhbkF0dGVtcHQgPSBtc2cuYXJnMTsKKyAgICAgICAgICAgICAgICAgICAgYmxlQWJvcnRTY2FuSW50ZXJuYWwoc2NhbkF0dGVtcHQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfT05fQkxVRVRPT1RIX1NUQVRFX0NIQU5HRUQ6IHsKICAgICAgICAgICAgICAgICAgICAgaW50IGJsdWV0b290aFN0YXRlID0gbXNnLmFyZzE7CkBAIC01NTUsOCArNTgxLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gIlNUQVRFX1dBSVRJTkdfRk9SX0RFVklDRV9ESVNDT1ZFUlkiOwogICAgICAgICAgICAgY2FzZSBTVEFURV9XQUlUSU5HX0ZPUl9CTFVFVE9PVEg6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJTVEFURV9XQUlUSU5HX0ZPUl9CTFVFVE9PVEgiOwotICAgICAgICAgICAgY2FzZSBTVEFURV9XQUlUSU5HX0ZPUl9TVEFURV9QQUlSRUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJTVEFURV9XQUlUSU5HX0ZPUl9TVEFURV9QQUlSRUQiOwogICAgICAgICAgICAgY2FzZSBTVEFURV9QQUlSSU5HOgogICAgICAgICAgICAgICAgIHJldHVybiAiU1RBVEVfUEFJUklORyI7CiAgICAgICAgICAgICBjYXNlIFNUQVRFX1BBSVJFRDoKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9rZXlndWFyZC9LZXlndWFyZFZpZXdNZWRpYXRvci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL2tleWd1YXJkL0tleWd1YXJkVmlld01lZGlhdG9yLmphdmEKaW5kZXggNDQzNzc4ZS4uZWQyOWE4ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL2tleWd1YXJkL0tleWd1YXJkVmlld01lZGlhdG9yLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL2tleWd1YXJkL0tleWd1YXJkVmlld01lZGlhdG9yLmphdmEKQEAgLTQ3NCwxMCArNDc0LDEyIEBACiAKICAgICBWaWV3TWVkaWF0b3JDYWxsYmFjayBtVmlld01lZGlhdG9yQ2FsbGJhY2sgPSBuZXcgVmlld01lZGlhdG9yQ2FsbGJhY2soKSB7CiAKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHVzZXJBY3Rpdml0eSgpIHsKICAgICAgICAgICAgIEtleWd1YXJkVmlld01lZGlhdG9yLnRoaXMudXNlckFjdGl2aXR5KCk7CiAgICAgICAgIH0KIAorICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQga2V5Z3VhcmREb25lKGJvb2xlYW4gc3Ryb25nQXV0aCkgewogICAgICAgICAgICAgaWYgKCFtS2V5Z3VhcmREb25lUGVuZGluZykgewogICAgICAgICAgICAgICAgIEtleWd1YXJkVmlld01lZGlhdG9yLnRoaXMua2V5Z3VhcmREb25lKHRydWUgLyogYXV0aGVudGljYXRlZCAqLyk7CkBAIC00ODcsNiArNDg5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBrZXlndWFyZERvbmVEcmF3aW5nKCkgewogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShLRVlHVUFSRF9ET05FX0RSQVdJTkcpOwogICAgICAgICB9CkBAIC03NDEsOCArNzQ0LDcgQEAKIAogICAgICAgICBsb25nIHRpbWVvdXQ7CiAKLSAgICAgICAgVXNlckluZm8gdXNlciA9IFVzZXJNYW5hZ2VyLmdldChtQ29udGV4dCkuZ2V0VXNlckluZm8odXNlcklkKTsKLSAgICAgICAgaWYgKCghdXNlci5pc01hbmFnZWRQcm9maWxlKCkgJiYgTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlV29ya0NoYWxsZW5nZUVuYWJsZWQoKSkKKyAgICAgICAgaWYgKChtTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQodXNlcklkKSkKICAgICAgICAgICAgICAgICB8fCBwb2xpY3lUaW1lb3V0IDw9IDApIHsKICAgICAgICAgICAgIHRpbWVvdXQgPSBsb2NrQWZ0ZXJUaW1lb3V0OwogICAgICAgICB9IGVsc2UgewpAQCAtNzgyLDkgKzc4NCw5IEBACiAgICAgcHJpdmF0ZSB2b2lkIGRvS2V5Z3VhcmRMYXRlckxvY2tlZEZvckNoaWxkUHJvZmlsZXMoKSB7CiAgICAgICAgIFVzZXJNYW5hZ2VyIHVtID0gVXNlck1hbmFnZXIuZ2V0KG1Db250ZXh0KTsKICAgICAgICAgTGlzdDxVc2VySW5mbz4gcHJvZmlsZXMgPSB1bS5nZXRFbmFibGVkUHJvZmlsZXMoVXNlckhhbmRsZS5teVVzZXJJZCgpKTsKLSAgICAgICAgaWYgKExvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVdvcmtDaGFsbGVuZ2VFbmFibGVkKCkgJiYgcHJvZmlsZXMuc2l6ZSgpID4gMSkgeworICAgICAgICBpZiAocHJvZmlsZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgZm9yIChVc2VySW5mbyBpbmZvIDogcHJvZmlsZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5mby5pZCAhPSBVc2VySGFuZGxlLm15VXNlcklkKCkgJiYgaW5mby5pc01hbmFnZWRQcm9maWxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKGluZm8uaWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvbmcgdXNlclRpbWVvdXQgPSBnZXRMb2NrVGltZW91dChpbmZvLmlkKTsKICAgICAgICAgICAgICAgICAgICAgbG9uZyB1c2VyV2hlbiA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpICsgdXNlclRpbWVvdXQ7CiAgICAgICAgICAgICAgICAgICAgIEludGVudCBsb2NrSW50ZW50ID0gbmV3IEludGVudChERUxBWUVEX0xPQ0tfUFJPRklMRV9BQ1RJT04pOwpAQCAtMTI0OCw3ICsxMjUwLDkgQEAKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInJlY2VpdmVkIERFTEFZRURfS0VZR1VBUkRfQUNUSU9OIHdpdGggc2VxID0gIgogICAgICAgICAgICAgICAgICAgICAgICAgKyBzZXF1ZW5jZSArICIsIG1EZWxheWVkU2hvd2luZ1NlcXVlbmNlID0gIiArIG1EZWxheWVkU2hvd2luZ1NlcXVlbmNlKTsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEtleWd1YXJkVmlld01lZGlhdG9yLnRoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgZG9LZXlndWFyZExvY2tlZChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EZWxheWVkU2hvd2luZ1NlcXVlbmNlID09IHNlcXVlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb0tleWd1YXJkTG9ja2VkKG51bGwpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChERUxBWUVEX0xPQ0tfUFJPRklMRV9BQ1RJT04uZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpbnQgdXNlcklkID0gaW50ZW50LmdldEludEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0lELCAwKTsKQEAgLTE2OTgsNiArMTcwMiw3IEBACiAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKEtFWUdVQVJEX0RPTkVfUEVORElOR19USU1FT1VUKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkJvb3RDb21wbGV0ZWQoKSB7CiAgICAgICAgIG1VcGRhdGVNb25pdG9yLmRpc3BhdGNoQm9vdENvbXBsZXRlZCgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9wb3dlci9Qb3dlck5vdGlmaWNhdGlvbldhcm5pbmdzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcG93ZXIvUG93ZXJOb3RpZmljYXRpb25XYXJuaW5ncy5qYXZhCmluZGV4IDE5YjY1ZjcuLmVhMWM5YmYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9wb3dlci9Qb3dlck5vdGlmaWNhdGlvbldhcm5pbmdzLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3Bvd2VyL1Bvd2VyTm90aWZpY2F0aW9uV2FybmluZ3MuamF2YQpAQCAtNTIsNyArNTIsNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNIT1dJTkdfTk9USElORyA9IDA7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNIT1dJTkdfV0FSTklORyA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNIT1dJTkdfU0FWRVIgPSAyOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTSE9XSU5HX0lOVkFMSURfQ0hBUkdFUiA9IDM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gU0hPV0lOR19TVFJJTkdTID0gewogICAgICAgICAiU0hPV0lOR19OT1RISU5HIiwKQEAgLTYzLDcgKzYyLDYgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU0hPV19CQVRURVJZX1NFVFRJTkdTID0gIlBOVy5iYXR0ZXJ5U2V0dGluZ3MiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU1RBUlRfU0FWRVIgPSAiUE5XLnN0YXJ0U2F2ZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fU1RPUF9TQVZFUiA9ICJQTlcuc3RvcFNhdmVyIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQUNUSU9OX0RJU01JU1NFRF9XQVJOSU5HID0gIlBOVy5kaXNtaXNzZWRXYXJuaW5nIjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEF1ZGlvQXR0cmlidXRlcyBBVURJT19BVFRSSUJVVEVTID0gbmV3IEF1ZGlvQXR0cmlidXRlcy5CdWlsZGVyKCkKQEAgLTc3LDcgKzc1LDYgQEAKICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwogICAgIHByaXZhdGUgZmluYWwgUmVjZWl2ZXIgbVJlY2VpdmVyID0gbmV3IFJlY2VpdmVyKCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBJbnRlbnQgbU9wZW5CYXR0ZXJ5U2V0dGluZ3MgPSBzZXR0aW5ncyhJbnRlbnQuQUNUSU9OX1BPV0VSX1VTQUdFX1NVTU1BUlkpOwotICAgIHByaXZhdGUgZmluYWwgSW50ZW50IG1PcGVuU2F2ZXJTZXR0aW5ncyA9IHNldHRpbmdzKFNldHRpbmdzLkFDVElPTl9CQVRURVJZX1NBVkVSX1NFVFRJTkdTKTsKIAogICAgIHByaXZhdGUgaW50IG1CYXR0ZXJ5TGV2ZWw7CiAgICAgcHJpdmF0ZSBpbnQgbUJ1Y2tldDsKQEAgLTg2LDcgKzgzLDYgQEAKIAogICAgIHByaXZhdGUgbG9uZyBtQnVja2V0RHJvcHBlZE5lZ2F0aXZlVGltZU1zOwogCi0gICAgcHJpdmF0ZSBib29sZWFuIG1TYXZlcjsKICAgICBwcml2YXRlIGJvb2xlYW4gbVdhcm5pbmc7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1QbGF5U291bmQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1JbnZhbGlkQ2hhcmdlcjsKQEAgLTEwMSw3ICs5Nyw2IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3KSB7Ci0gICAgICAgIHB3LnByaW50KCJtU2F2ZXI9Iik7IHB3LnByaW50bG4obVNhdmVyKTsKICAgICAgICAgcHcucHJpbnQoIm1XYXJuaW5nPSIpOyBwdy5wcmludGxuKG1XYXJuaW5nKTsKICAgICAgICAgcHcucHJpbnQoIm1QbGF5U291bmQ9Iik7IHB3LnByaW50bG4obVBsYXlTb3VuZCk7CiAgICAgICAgIHB3LnByaW50KCJtSW52YWxpZENoYXJnZXI9Iik7IHB3LnByaW50bG4obUludmFsaWRDaGFyZ2VyKTsKQEAgLTEyMSwyNyArMTE2LDE1IEBACiAgICAgICAgIG1TY3JlZW5PZmZUaW1lID0gc2NyZWVuT2ZmVGltZTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzaG93U2F2ZXJNb2RlKGJvb2xlYW4gbW9kZSkgewotICAgICAgICBtU2F2ZXIgPSBtb2RlOwotICAgICAgICBpZiAobVNhdmVyICYmIG1TYXZlckNvbmZpcm1hdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtU2F2ZXJDb25maXJtYXRpb24uZGlzbWlzcygpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZU5vdGlmaWNhdGlvbigpOwotICAgIH0KLQogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVOb3RpZmljYXRpb24oKSB7CiAgICAgICAgIGlmIChERUJVRykgU2xvZy5kKFRBRywgInVwZGF0ZU5vdGlmaWNhdGlvbiBtV2FybmluZz0iICsgbVdhcm5pbmcgKyAiIG1QbGF5U291bmQ9IgotICAgICAgICAgICAgICAgICsgbVBsYXlTb3VuZCArICIgbVNhdmVyPSIgKyBtU2F2ZXIgKyAiIG1JbnZhbGlkQ2hhcmdlcj0iICsgbUludmFsaWRDaGFyZ2VyKTsKKyAgICAgICAgICAgICAgICArIG1QbGF5U291bmQgKyAiIG1JbnZhbGlkQ2hhcmdlcj0iICsgbUludmFsaWRDaGFyZ2VyKTsKICAgICAgICAgaWYgKG1JbnZhbGlkQ2hhcmdlcikgewogICAgICAgICAgICAgc2hvd0ludmFsaWRDaGFyZ2VyTm90aWZpY2F0aW9uKCk7CiAgICAgICAgICAgICBtU2hvd2luZyA9IFNIT1dJTkdfSU5WQUxJRF9DSEFSR0VSOwogICAgICAgICB9IGVsc2UgaWYgKG1XYXJuaW5nKSB7CiAgICAgICAgICAgICBzaG93V2FybmluZ05vdGlmaWNhdGlvbigpOwogICAgICAgICAgICAgbVNob3dpbmcgPSBTSE9XSU5HX1dBUk5JTkc7Ci0gICAgICAgIH0gZWxzZSBpZiAobVNhdmVyKSB7Ci0gICAgICAgICAgICBzaG93U2F2ZXJOb3RpZmljYXRpb24oKTsKLSAgICAgICAgICAgIG1TaG93aW5nID0gU0hPV0lOR19TQVZFUjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1Ob01hbi5jYW5jZWxBc1VzZXIoVEFHX05PVElGSUNBVElPTiwgUi5pZC5ub3RpZmljYXRpb25fcG93ZXIsIFVzZXJIYW5kbGUuQUxMKTsKICAgICAgICAgICAgIG1TaG93aW5nID0gU0hPV0lOR19OT1RISU5HOwpAQCAtMTY1LDggKzE0OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNob3dXYXJuaW5nTm90aWZpY2F0aW9uKCkgewotICAgICAgICBmaW5hbCBpbnQgdGV4dFJlcyA9IG1TYXZlciA/IFIuc3RyaW5nLmJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0X3NhdmVyX3N0YXJ0ZWQKLSAgICAgICAgICAgICAgICA6IFIuc3RyaW5nLmJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0OworICAgICAgICBmaW5hbCBpbnQgdGV4dFJlcyA9IFIuc3RyaW5nLmJhdHRlcnlfbG93X3BlcmNlbnRfZm9ybWF0OwogICAgICAgICBmaW5hbCBTdHJpbmcgcGVyY2VudGFnZSA9IE51bWJlckZvcm1hdC5nZXRQZXJjZW50SW5zdGFuY2UoKS5mb3JtYXQoKGRvdWJsZSkgbUJhdHRlcnlMZXZlbCAvIDEwMC4wKTsKICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uLkJ1aWxkZXIgbmIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIobUNvbnRleHQpCiAgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmljX3Bvd2VyX2xvdykKQEAgLTE4NCwxMyArMTY2LDkgQEAKICAgICAgICAgaWYgKGhhc0JhdHRlcnlTZXR0aW5ncygpKSB7CiAgICAgICAgICAgICBuYi5zZXRDb250ZW50SW50ZW50KHBlbmRpbmdCcm9hZGNhc3QoQUNUSU9OX1NIT1dfQkFUVEVSWV9TRVRUSU5HUykpOwogICAgICAgICB9Ci0gICAgICAgIGlmICghbVNhdmVyKSB7Ci0gICAgICAgICAgICBuYi5hZGRBY3Rpb24oMCwKLSAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfc2F2ZXJfc3RhcnRfYWN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgcGVuZGluZ0Jyb2FkY2FzdChBQ1RJT05fU1RBUlRfU0FWRVIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkZFN0b3BTYXZlckFjdGlvbihuYik7Ci0gICAgICAgIH0KKyAgICAgICAgbmIuYWRkQWN0aW9uKDAsCisgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfc2F2ZXJfc3RhcnRfYWN0aW9uKSwKKyAgICAgICAgICAgICAgICBwZW5kaW5nQnJvYWRjYXN0KEFDVElPTl9TVEFSVF9TQVZFUikpOwogICAgICAgICBpZiAobVBsYXlTb3VuZCkgewogICAgICAgICAgICAgYXR0YWNoTG93QmF0dGVyeVNvdW5kKG5iKTsKICAgICAgICAgICAgIG1QbGF5U291bmQgPSBmYWxzZTsKQEAgLTE5OSwzNSArMTc3LDYgQEAKICAgICAgICAgbU5vTWFuLm5vdGlmeUFzVXNlcihUQUdfTk9USUZJQ0FUSU9OLCBSLmlkLm5vdGlmaWNhdGlvbl9wb3dlciwgbiwgVXNlckhhbmRsZS5BTEwpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBzaG93U2F2ZXJOb3RpZmljYXRpb24oKSB7Ci0gICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbi5CdWlsZGVyIG5iID0gbmV3IE5vdGlmaWNhdGlvbi5CdWlsZGVyKG1Db250ZXh0KQotICAgICAgICAgICAgICAgIC5zZXRTbWFsbEljb24oUi5kcmF3YWJsZS5pY19wb3dlcl9zYXZlcikKLSAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRpdGxlKG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5iYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90aXRsZSkpCi0gICAgICAgICAgICAgICAgLnNldENvbnRlbnRUZXh0KG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5iYXR0ZXJ5X3NhdmVyX25vdGlmaWNhdGlvbl90ZXh0KSkKLSAgICAgICAgICAgICAgICAuc2V0T25nb2luZyh0cnVlKQotICAgICAgICAgICAgICAgIC5zZXRTaG93V2hlbihmYWxzZSkKLSAgICAgICAgICAgICAgICAuc2V0VmlzaWJpbGl0eShOb3RpZmljYXRpb24uVklTSUJJTElUWV9QVUJMSUMpCi0gICAgICAgICAgICAgICAgLnNldENvbG9yKG1Db250ZXh0LmdldENvbG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5jb2xvci5iYXR0ZXJ5X3NhdmVyX21vZGVfY29sb3IpKTsKLSAgICAgICAgYWRkU3RvcFNhdmVyQWN0aW9uKG5iKTsKLSAgICAgICAgaWYgKGhhc1NhdmVyU2V0dGluZ3MoKSkgewotICAgICAgICAgICAgbmIuc2V0Q29udGVudEludGVudChwZW5kaW5nQWN0aXZpdHkobU9wZW5TYXZlclNldHRpbmdzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgbU5vTWFuLm5vdGlmeUFzVXNlcihUQUdfTk9USUZJQ0FUSU9OLCBSLmlkLm5vdGlmaWNhdGlvbl9wb3dlciwgbmIuYnVpbGQoKSwgVXNlckhhbmRsZS5BTEwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRTdG9wU2F2ZXJBY3Rpb24oTm90aWZpY2F0aW9uLkJ1aWxkZXIgbmIpIHsKLSAgICAgICAgbmIuYWRkQWN0aW9uKDAsCi0gICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfc2F2ZXJfbm90aWZpY2F0aW9uX2FjdGlvbl90ZXh0KSwKLSAgICAgICAgICAgICAgICBwZW5kaW5nQnJvYWRjYXN0KEFDVElPTl9TVE9QX1NBVkVSKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRpc21pc3NTYXZlck5vdGlmaWNhdGlvbigpIHsKLSAgICAgICAgaWYgKG1TYXZlcikgU2xvZy5pKFRBRywgImRpc21pc3Npbmcgc2F2ZXIgbm90aWZpY2F0aW9uIik7Ci0gICAgICAgIG1TYXZlciA9IGZhbHNlOwotICAgICAgICB1cGRhdGVOb3RpZmljYXRpb24oKTsKLSAgICB9Ci0KICAgICBwcml2YXRlIFBlbmRpbmdJbnRlbnQgcGVuZGluZ0FjdGl2aXR5KEludGVudCBpbnRlbnQpIHsKICAgICAgICAgcmV0dXJuIFBlbmRpbmdJbnRlbnQuZ2V0QWN0aXZpdHlBc1VzZXIobUNvbnRleHQsCiAgICAgICAgICAgICAgICAgMCwgaW50ZW50LCAwLCBudWxsLCBVc2VySGFuZGxlLkNVUlJFTlQpOwpAQCAtMjcyLDEwICsyMjEsNiBAQAogICAgICAgICByZXR1cm4gbU9wZW5CYXR0ZXJ5U2V0dGluZ3MucmVzb2x2ZUFjdGl2aXR5KG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkpICE9IG51bGw7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGhhc1NhdmVyU2V0dGluZ3MoKSB7Ci0gICAgICAgIHJldHVybiBtT3BlblNhdmVyU2V0dGluZ3MucmVzb2x2ZUFjdGl2aXR5KG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkpICE9IG51bGw7Ci0gICAgfQotCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2hvd0xvd0JhdHRlcnlXYXJuaW5nKGJvb2xlYW4gcGxheVNvdW5kKSB7CiAgICAgICAgIFNsb2cuaShUQUcsCkBAIC0zNjcsNyArMzEyLDYgQEAKICAgICAgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7CiAgICAgICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEFDVElPTl9TSE9XX0JBVFRFUllfU0VUVElOR1MpOwogICAgICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihBQ1RJT05fU1RBUlRfU0FWRVIpOwotICAgICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihBQ1RJT05fU1RPUF9TQVZFUik7CiAgICAgICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEFDVElPTl9ESVNNSVNTRURfV0FSTklORyk7CiAgICAgICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyQXNVc2VyKHRoaXMsIFVzZXJIYW5kbGUuQUxMLCBmaWx0ZXIsCiAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5TVEFUVVNfQkFSX1NFUlZJQ0UsIG1IYW5kbGVyKTsKQEAgLTM4MywxMCArMzI3LDYgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhBQ1RJT05fU1RBUlRfU0FWRVIpKSB7CiAgICAgICAgICAgICAgICAgZGlzbWlzc0xvd0JhdHRlcnlOb3RpZmljYXRpb24oKTsKICAgICAgICAgICAgICAgICBzaG93U3RhcnRTYXZlckNvbmZpcm1hdGlvbigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEFDVElPTl9TVE9QX1NBVkVSKSkgewotICAgICAgICAgICAgICAgIGRpc21pc3NTYXZlck5vdGlmaWNhdGlvbigpOwotICAgICAgICAgICAgICAgIGRpc21pc3NMb3dCYXR0ZXJ5Tm90aWZpY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2V0U2F2ZXJNb2RlKGZhbHNlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhBQ1RJT05fRElTTUlTU0VEX1dBUk5JTkcpKSB7CiAgICAgICAgICAgICAgICAgZGlzbWlzc0xvd0JhdHRlcnlXYXJuaW5nKCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcG93ZXIvUG93ZXJVSS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3Bvd2VyL1Bvd2VyVUkuamF2YQppbmRleCA5NDU5NzQwLi41MjJkNTMzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcG93ZXIvUG93ZXJVSS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9wb3dlci9Qb3dlclVJLmphdmEKQEAgLTc2LDEwICs3Niw2IEBACiAgICAgICAgIG1SZWNlaXZlci5pbml0KCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNldFNhdmVyTW9kZShib29sZWFuIG1vZGUpIHsKLSAgICAgICAgbVdhcm5pbmdzLnNob3dTYXZlck1vZGUobW9kZSk7Ci0gICAgfQotCiAgICAgdm9pZCB1cGRhdGVCYXR0ZXJ5V2FybmluZ0xldmVscygpIHsKICAgICAgICAgaW50IGNyaXRMZXZlbCA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldEludGVnZXIoCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19jcml0aWNhbEJhdHRlcnlXYXJuaW5nTGV2ZWwpOwpAQCAtMTQxLDExICsxMzcsNiBAQAogICAgICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihQb3dlck1hbmFnZXIuQUNUSU9OX1BPV0VSX1NBVkVfTU9ERV9DSEFOR0lORyk7CiAgICAgICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKFBvd2VyTWFuYWdlci5BQ1RJT05fUE9XRVJfU0FWRV9NT0RFX0NIQU5HRUQpOwogICAgICAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcih0aGlzLCBmaWx0ZXIsIG51bGwsIG1IYW5kbGVyKTsKLSAgICAgICAgICAgIHVwZGF0ZVNhdmVyTW9kZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNhdmVyTW9kZSgpIHsKLSAgICAgICAgICAgIHNldFNhdmVyTW9kZShtUG93ZXJNYW5hZ2VyLmlzUG93ZXJTYXZlTW9kZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMjEwLDEwICsyMDEsNiBAQAogICAgICAgICAgICAgICAgIG1TY3JlZW5PZmZUaW1lID0gLTE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9TV0lUQ0hFRC5lcXVhbHMoYWN0aW9uKSkgewogICAgICAgICAgICAgICAgIG1XYXJuaW5ncy51c2VyU3dpdGNoZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoUG93ZXJNYW5hZ2VyLkFDVElPTl9QT1dFUl9TQVZFX01PREVfQ0hBTkdFRC5lcXVhbHMoYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNhdmVyTW9kZSgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChQb3dlck1hbmFnZXIuQUNUSU9OX1BPV0VSX1NBVkVfTU9ERV9DSEFOR0lORy5lcXVhbHMoYWN0aW9uKSkgewotICAgICAgICAgICAgICAgIHNldFNhdmVyTW9kZShpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKFBvd2VyTWFuYWdlci5FWFRSQV9QT1dFUl9TQVZFX01PREUsIGZhbHNlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJ1bmtub3duIGludGVudDogIiArIGludGVudCk7CiAgICAgICAgICAgICB9CkBAIC0yNTEsNyArMjM4LDYgQEAKIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgV2FybmluZ3NVSSB7CiAgICAgICAgIHZvaWQgdXBkYXRlKGludCBiYXR0ZXJ5TGV2ZWwsIGludCBidWNrZXQsIGxvbmcgc2NyZWVuT2ZmVGltZSk7Ci0gICAgICAgIHZvaWQgc2hvd1NhdmVyTW9kZShib29sZWFuIG1vZGUpOwogICAgICAgICB2b2lkIGRpc21pc3NMb3dCYXR0ZXJ5V2FybmluZygpOwogICAgICAgICB2b2lkIHNob3dMb3dCYXR0ZXJ5V2FybmluZyhib29sZWFuIHBsYXlTb3VuZCk7CiAgICAgICAgIHZvaWQgZGlzbWlzc0ludmFsaWRDaGFyZ2VyV2FybmluZygpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTSWNvblZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU0ljb25WaWV3LmphdmEKaW5kZXggYjU2YWQ3Ni4uMDFlYjVmOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTSWNvblZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNJY29uVmlldy5qYXZhCkBAIC03NSw3ICs3NSw4IEBACiAgICAgICAgICAgICBpdi5zZXRUYWcoUi5pZC5xc19pY29uX3RhZywgc3RhdGUuaWNvbik7CiAgICAgICAgICAgICBpZiAoZCBpbnN0YW5jZW9mIEFuaW1hdGFibGUpIHsKICAgICAgICAgICAgICAgICBBbmltYXRhYmxlIGEgPSAoQW5pbWF0YWJsZSkgZDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaWNvbiBpbnN0YW5jZW9mIFFTVGlsZS5BbmltYXRpb25JY29uICYmICFpdi5pc1Nob3duKCkpIHsKKyAgICAgICAgICAgICAgICBhLnN0YXJ0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFpdi5pc1Nob3duKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYS5zdG9wKCk7IC8vIHNraXAgZGlyZWN0bHkgdG8gZW5kIHN0YXRlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTUGFuZWwuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU1BhbmVsLmphdmEKaW5kZXggYWU4NTQyYS4uZmQwN2U1MCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTUGFuZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNQYW5lbC5qYXZhCkBAIC0xNTQsNiArMTU0LDIwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBvcGVuRGV0YWlscyhTdHJpbmcgc3ViUGFuZWwpIHsKKyAgICAgICAgUVNUaWxlPD8+IHRpbGUgPSBnZXRUaWxlKHN1YlBhbmVsKTsKKyAgICAgICAgc2hvd0RldGFpbEFkYXB0ZXIodHJ1ZSwgdGlsZS5nZXREZXRhaWxBZGFwdGVyKCksIG5ldyBpbnRbXSB7Z2V0V2lkdGgoKSAvIDIsIDB9KTsKKyAgICB9CisKKyAgICBwcml2YXRlIFFTVGlsZTw/PiBnZXRUaWxlKFN0cmluZyBzdWJQYW5lbCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZWNvcmRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc3ViUGFuZWwuZXF1YWxzKG1SZWNvcmRzLmdldChpKS50aWxlLmdldFRpbGVTcGVjKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1SZWNvcmRzLmdldChpKS50aWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtSG9zdC5jcmVhdGVUaWxlKHN1YlBhbmVsKTsKKyAgICB9CisKICAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDdXN0b21pemVQYW5lbCgpIHsKICAgICAgICAgbUN1c3RvbWl6ZVBhbmVsID0gKFFTQ3VzdG9taXplcikgTGF5b3V0SW5mbGF0ZXIuZnJvbShtQ29udGV4dCkKICAgICAgICAgICAgICAgICAuaW5mbGF0ZShSLmxheW91dC5xc19jdXN0b21pemVfcGFuZWwsIG51bGwpOwpAQCAtMzE1LDE2ICszMjksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgZHJhd1RpbGUociwgc3RhdGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNob3dEZXRhaWwoYm9vbGVhbiBzaG93KSB7CiAgICAgICAgICAgICAgICAgUVNQYW5lbC50aGlzLnNob3dEZXRhaWwoc2hvdywgcik7CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25Ub2dnbGVTdGF0ZUNoYW5nZWQoYm9vbGVhbiBzdGF0ZSkgewogICAgICAgICAgICAgICAgIGlmIChtRGV0YWlsUmVjb3JkID09IHIpIHsKICAgICAgICAgICAgICAgICAgICAgZmlyZVRvZ2dsZVN0YXRlQ2hhbmdlZChzdGF0ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2NhblN0YXRlQ2hhbmdlZChib29sZWFuIHN0YXRlKSB7CiAgICAgICAgICAgICAgICAgci5zY2FuU3RhdGUgPSBzdGF0ZTsKQEAgLTMzOCw3ICszNTUsNyBAQAogICAgICAgICAgICAgICAgIGFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShhbm5vdW5jZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICByLnRpbGUuc2V0Q2FsbGJhY2soY2FsbGJhY2spOworICAgICAgICByLnRpbGUuYWRkQ2FsbGJhY2soY2FsbGJhY2spOwogICAgICAgICBmaW5hbCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBjbGljayA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKQEAgLTQwMSw2ICs0MTgsOSBAQAogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVNob3dEZXRhaWwoUmVjb3JkIHIsIGJvb2xlYW4gc2hvdykgeworICAgICAgICBpZiAoc2hvdyAmJiAhbUV4cGFuZGVkKSB7CisgICAgICAgICAgICBtSG9zdC5hbmltYXRlRXhwYW5kUVMoKTsKKyAgICAgICAgfQogICAgICAgICBpZiAociBpbnN0YW5jZW9mIFRpbGVSZWNvcmQpIHsKICAgICAgICAgICAgIGhhbmRsZVNob3dEZXRhaWxUaWxlKChUaWxlUmVjb3JkKSByLCBzaG93KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ1Miw3ICs0NzIsNyBAQAogICAgICAgICAgICAgTWV0cmljc0xvZ2dlci52aXNpYmxlKG1Db250ZXh0LCBkZXRhaWxBZGFwdGVyLmdldE1ldHJpY3NDYXRlZ29yeSgpKTsKICAgICAgICAgICAgIGFubm91bmNlRm9yQWNjZXNzaWJpbGl0eShtQ29udGV4dC5nZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoZGV0YWlsQWRhcHRlci5nZXRUaXRsZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBkZXRhaWxBZGFwdGVyLmdldFRpdGxlKCkpKTsKICAgICAgICAgICAgIHNldERldGFpbFJlY29yZChyKTsKICAgICAgICAgICAgIGxpc3RlbmVyID0gbUhpZGVHcmlkQ29udGVudFdoZW5Eb25lOwogICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBUaWxlUmVjb3JkICYmIHZpc2libGVEaWZmKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUVNUaWxlLmphdmEKaW5kZXggMzlmMGM1NS4uMmQ5ZDEwNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU1RpbGUuamF2YQpAQCAtMTksOCArMTksNiBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkFuaW1hdGFibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5BbmltYXRlZFZlY3RvckRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwpAQCAtMjksMTAgKzI3LDIzIEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGUuU3RhdGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS4qOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLlRpbGVTZXJ2aWNlczsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkJhdHRlcnlDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuQmx1ZXRvb3RoQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkNhc3RDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuRmxhc2hsaWdodENvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Ib3RzcG90Q29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LktleWd1YXJkTW9uaXRvcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Lkxpc3RlbmFibGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Mb2NhdGlvbkNvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5OZXR3b3JrQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LlJvdGF0aW9uTG9ja0NvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Vc2VySW5mb0NvbnRyb2xsZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Vc2VyU3dpdGNoZXJDb250cm9sbGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuWmVuTW9kZUNvbnRyb2xsZXI7CiAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogCkBAIC01Miw3ICs2Myw3IEBACiAgICAgcHJvdGVjdGVkIGZpbmFsIEggbUhhbmRsZXI7CiAgICAgcHJvdGVjdGVkIGZpbmFsIEhhbmRsZXIgbVVpSGFuZGxlciA9IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwogCi0gICAgcHJpdmF0ZSBDYWxsYmFjayBtQ2FsbGJhY2s7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8Q2FsbGJhY2s+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICBwcm90ZWN0ZWQgVFN0YXRlIG1TdGF0ZSA9IG5ld1RpbGVTdGF0ZSgpOwogICAgIHByaXZhdGUgVFN0YXRlIG1UbXBTdGF0ZSA9IG5ld1RpbGVTdGF0ZSgpOwogICAgIHByaXZhdGUgYm9vbGVhbiBtQW5ub3VuY2VOZXh0U3RhdGVDaGFuZ2U7CkBAIC05OSw3ICsxMTAsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgRGV0YWlsQWRhcHRlciB7Ci0gICAgICAgIGludCBnZXRUaXRsZSgpOworICAgICAgICBDaGFyU2VxdWVuY2UgZ2V0VGl0bGUoKTsKICAgICAgICAgQm9vbGVhbiBnZXRUb2dnbGVTdGF0ZSgpOwogICAgICAgICBWaWV3IGNyZWF0ZURldGFpbFZpZXcoQ29udGV4dCBjb250ZXh0LCBWaWV3IGNvbnZlcnRWaWV3LCBWaWV3R3JvdXAgcGFyZW50KTsKICAgICAgICAgSW50ZW50IGdldFNldHRpbmdzSW50ZW50KCk7CkBAIC0xMDksOCArMTIwLDggQEAKIAogICAgIC8vIHNhZmUgdG8gY2FsbCBmcm9tIGFueSB0aHJlYWQKIAotICAgIHB1YmxpYyB2b2lkIHNldENhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7Ci0gICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoSC5TRVRfQ0FMTEJBQ0ssIGNhbGxiYWNrKS5zZW5kVG9UYXJnZXQoKTsKKyAgICBwdWJsaWMgdm9pZCBhZGRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKEguQUREX0NBTExCQUNLLCBjYWxsYmFjaykuc2VuZFRvVGFyZ2V0KCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2xpY2soKSB7CkBAIC0xNjcsOCArMTc4LDggQEAKIAogICAgIC8vIGNhbGwgb25seSBvbiB0aWxlIHdvcmtlciBsb29wZXIKIAotICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTZXRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykgewotICAgICAgICBtQ2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlQWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgbUNhbGxiYWNrcy5hZGQoY2FsbGJhY2spOwogICAgICAgICBoYW5kbGVSZWZyZXNoU3RhdGUobnVsbCk7CiAgICAgfQogCkBAIC0xOTYsMTIgKzIwNywxNCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVN0YXRlQ2hhbmdlZCgpIHsKICAgICAgICAgYm9vbGVhbiBkZWxheUFubm91bmNlbWVudCA9IHNob3VsZEFubm91bmNlbWVudEJlRGVsYXllZCgpOwotICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblN0YXRlQ2hhbmdlZChtU3RhdGUpOworICAgICAgICBpZiAobUNhbGxiYWNrcy5zaXplKCkgIT0gMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25TdGF0ZUNoYW5nZWQobVN0YXRlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtQW5ub3VuY2VOZXh0U3RhdGVDaGFuZ2UgJiYgIWRlbGF5QW5ub3VuY2VtZW50KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGFubm91bmNlbWVudCA9IGNvbXBvc2VDaGFuZ2VBbm5vdW5jZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoYW5ub3VuY2VtZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrLm9uQW5ub3VuY2VtZW50UmVxdWVzdGVkKGFubm91bmNlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja3MuZ2V0KDApLm9uQW5ub3VuY2VtZW50UmVxdWVzdGVkKGFubm91bmNlbWVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTcsMjAgKzIzMCwyMCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBoYW5kbGVTaG93RGV0YWlsKGJvb2xlYW4gc2hvdykgewotICAgICAgICBpZiAobUNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DYWxsYmFjay5vblNob3dEZXRhaWwoc2hvdyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNhbGxiYWNrcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25TaG93RGV0YWlsKHNob3cpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVRvZ2dsZVN0YXRlQ2hhbmdlZChib29sZWFuIHN0YXRlKSB7Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uVG9nZ2xlU3RhdGVDaGFuZ2VkKHN0YXRlKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ2FsbGJhY2tzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLmdldChpKS5vblRvZ2dsZVN0YXRlQ2hhbmdlZChzdGF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU2NhblN0YXRlQ2hhbmdlZChib29sZWFuIHN0YXRlKSB7Ci0gICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNhbGxiYWNrLm9uU2NhblN0YXRlQ2hhbmdlZChzdGF0ZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNhbGxiYWNrcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25TY2FuU3RhdGVDaGFuZ2VkKHN0YXRlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQwLDExICsyNTMsMTEgQEAKIAogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZURlc3Ryb3koKSB7CiAgICAgICAgIHNldExpc3RlbmluZyhmYWxzZSk7Ci0gICAgICAgIG1DYWxsYmFjayA9IG51bGw7CisgICAgICAgIG1DYWxsYmFja3MuY2xlYXIoKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgZmluYWwgY2xhc3MgSCBleHRlbmRzIEhhbmRsZXIgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VUX0NBTExCQUNLID0gMTsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFERF9DQUxMQkFDSyA9IDE7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDTElDSyA9IDI7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRUNPTkRBUllfQ0xJQ0sgPSAzOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9OR19DTElDSyA9IDQ7CkBAIC0yNjQsOSArMjc3LDkgQEAKICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlTWVzc2FnZShNZXNzYWdlIG1zZykgewogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAobXNnLndoYXQgPT0gU0VUX0NBTExCQUNLKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAiaGFuZGxlU2V0Q2FsbGJhY2siOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZXRDYWxsYmFjaygoUVNUaWxlLkNhbGxiYWNrKW1zZy5vYmopOworICAgICAgICAgICAgICAgIGlmIChtc2cud2hhdCA9PSBBRERfQ0FMTEJBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICJoYW5kbGVBZGRDYWxsYmFjayI7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUFkZENhbGxiYWNrKChRU1RpbGUuQ2FsbGJhY2spbXNnLm9iaik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtc2cud2hhdCA9PSBDTElDSykgewogICAgICAgICAgICAgICAgICAgICBuYW1lID0gImhhbmRsZUNsaWNrIjsKICAgICAgICAgICAgICAgICAgICAgbUFubm91bmNlTmV4dFN0YXRlQ2hhbmdlID0gdHJ1ZTsKQEAgLTMyMyw2ICszMzYsNyBAQAogICAgICAgICB2b2lkIHN0YXJ0UnVubmFibGVEaXNtaXNzaW5nS2V5Z3VhcmQoUnVubmFibGUgcnVubmFibGUpOwogICAgICAgICB2b2lkIHdhcm4oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSB0KTsKICAgICAgICAgdm9pZCBjb2xsYXBzZVBhbmVscygpOworICAgICAgICB2b2lkIGFuaW1hdGVFeHBhbmRRUygpOwogICAgICAgICB2b2lkIG9wZW5QYW5lbHMoKTsKICAgICAgICAgTG9vcGVyIGdldExvb3BlcigpOwogICAgICAgICBDb250ZXh0IGdldENvbnRleHQoKTsKQEAgLTM0MCw4ICszNTQsMTAgQEAKICAgICAgICAgVXNlclN3aXRjaGVyQ29udHJvbGxlciBnZXRVc2VyU3dpdGNoZXJDb250cm9sbGVyKCk7CiAgICAgICAgIFVzZXJJbmZvQ29udHJvbGxlciBnZXRVc2VySW5mb0NvbnRyb2xsZXIoKTsKICAgICAgICAgQmF0dGVyeUNvbnRyb2xsZXIgZ2V0QmF0dGVyeUNvbnRyb2xsZXIoKTsKKyAgICAgICAgVGlsZVNlcnZpY2VzIGdldFRpbGVTZXJ2aWNlcygpOwogICAgICAgICB2b2lkIHJlbW92ZVRpbGUoU3RyaW5nIHRpbGVTcGVjKTsKIAorCiAgICAgICAgIHB1YmxpYyBpbnRlcmZhY2UgQ2FsbGJhY2sgewogICAgICAgICAgICAgdm9pZCBvblRpbGVzQ2hhbmdlZCgpOwogICAgICAgICB9CkBAIC0zODksMTEgKzQwNSw3IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBEcmF3YWJsZSBnZXREcmF3YWJsZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIERyYXdhYmxlIGQgPSBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCk7Ci0gICAgICAgICAgICBpZiAoZCBpbnN0YW5jZW9mIEFuaW1hdGFibGUpIHsKLSAgICAgICAgICAgICAgICAoKEFuaW1hdGFibGUpIGQpLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTQwOCw0MSArNDIwLDE0IEBACiAgICAgfQogCiAgICAgcHJvdGVjdGVkIGNsYXNzIEFuaW1hdGlvbkljb24gZXh0ZW5kcyBSZXNvdXJjZUljb24gewotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbUFsbG93QW5pbWF0aW9uOwotCiAgICAgICAgIHB1YmxpYyBBbmltYXRpb25JY29uKGludCByZXNJZCkgewogICAgICAgICAgICAgc3VwZXIocmVzSWQpOwogICAgICAgICB9CiAKLSAgICAgICAgcHVibGljIHZvaWQgc2V0QWxsb3dBbmltYXRpb24oYm9vbGVhbiBhbGxvd0FuaW1hdGlvbikgewotICAgICAgICAgICAgbUFsbG93QW5pbWF0aW9uID0gYWxsb3dBbmltYXRpb247Ci0gICAgICAgIH0KLQogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIERyYXdhYmxlIGdldERyYXdhYmxlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICAgICAgLy8gd29ya2Fyb3VuZDogZ2V0IGEgY2xlYW4gc3RhdGUgZm9yIGV2ZXJ5IG5ldyBBVkQKLSAgICAgICAgICAgIGZpbmFsIEFuaW1hdGVkVmVjdG9yRHJhd2FibGUgZCA9IChBbmltYXRlZFZlY3RvckRyYXdhYmxlKSBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCkKLSAgICAgICAgICAgICAgICAgICAgLmdldENvbnN0YW50U3RhdGUoKS5uZXdEcmF3YWJsZSgpOwotICAgICAgICAgICAgZC5zdGFydCgpOwotICAgICAgICAgICAgaWYgKG1BbGxvd0FuaW1hdGlvbikgewotICAgICAgICAgICAgICAgIG1BbGxvd0FuaW1hdGlvbiA9IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkLnN0b3AoKTsgLy8gc2tpcCBkaXJlY3RseSB0byBlbmQgc3RhdGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGVudW0gVXNlckJvb2xlYW4gewotICAgICAgICBVU0VSX1RSVUUodHJ1ZSwgdHJ1ZSksCi0gICAgICAgIFVTRVJfRkFMU0UodHJ1ZSwgZmFsc2UpLAotICAgICAgICBCQUNLR1JPVU5EX1RSVUUoZmFsc2UsIHRydWUpLAotICAgICAgICBCQUNLR1JPVU5EX0ZBTFNFKGZhbHNlLCBmYWxzZSk7Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbHVlOwotICAgICAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB1c2VySW5pdGlhdGVkOwotICAgICAgICBwcml2YXRlIFVzZXJCb29sZWFuKGJvb2xlYW4gdXNlckluaXRpYXRlZCwgYm9vbGVhbiB2YWx1ZSkgewotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgdGhpcy51c2VySW5pdGlhdGVkID0gdXNlckluaXRpYXRlZDsKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldERyYXdhYmxlKG1SZXNJZCkuZ2V0Q29uc3RhbnRTdGF0ZSgpLm5ld0RyYXdhYmxlKCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RU1RpbGVTZXJ2aWNlV3JhcHBlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1ZTFmZDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgUVNUaWxlU2VydmljZVdyYXBwZXIgaW1wbGVtZW50cyBJUVNUaWxlU2VydmljZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJJUVNUaWxlU2VydmljZVdyYXBwZXIiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBJUVNUaWxlU2VydmljZSBtU2VydmljZTsKLSAgICAKLSAgICBwdWJsaWMgUVNUaWxlU2VydmljZVdyYXBwZXIoSVFTVGlsZVNlcnZpY2Ugc2VydmljZSkgewotICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIElCaW5kZXIgYXNCaW5kZXIoKSB7Ci0gICAgICAgIHJldHVybiBtU2VydmljZS5hc0JpbmRlcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFFTVGlsZShUaWxlIHRpbGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldFFTVGlsZSh0aWxlKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBRU1RpbGVTZXJ2aWNlIiwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRpbGVBZGRlZCgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uVGlsZUFkZGVkKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gUVNUaWxlU2VydmljZSIsIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UaWxlUmVtb3ZlZCgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uVGlsZVJlbW92ZWQoKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBRU1RpbGVTZXJ2aWNlIiwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVNlcnZpY2Uub25TdGFydExpc3RlbmluZygpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFFTVGlsZVNlcnZpY2UiLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RvcExpc3RlbmluZygpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RvcExpc3RlbmluZygpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFFTVGlsZVNlcnZpY2UiLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soSUJpbmRlciB0b2tlbikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbVNlcnZpY2Uub25DbGljayh0b2tlbik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gUVNUaWxlU2VydmljZSIsIGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1F1aWNrUVNQYW5lbC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL1F1aWNrUVNQYW5lbC5qYXZhCmluZGV4IGJkYTQ2NzUuLjU3ODI4MDAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9RdWlja1FTUGFuZWwuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvUXVpY2tRU1BhbmVsLmphdmEKQEAgLTQ5LDIwICs0OSwxOSBAQAogICAgICAgICBtUXNDb250YWluZXIuYWRkVmlldygoVmlldykgbVRpbGVMYXlvdXQsIDEgLyogQmV0d2VlbiBicmlnaHRuZXNzIGFuZCBmb290ZXIgKi8pOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUN1c3RvbWl6ZVBhbmVsKCkgeworICAgICAgICAvLyBObyBjdXN0b21pemluZyBmcm9tIHRoZSBoZWFkZXIuCisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc2V0UVNQYW5lbEFuZEhlYWRlcihRU1BhbmVsIGZ1bGxQYW5lbCwgVmlldyBoZWFkZXIpIHsKICAgICAgICAgbUZ1bGxQYW5lbCA9IGZ1bGxQYW5lbDsKICAgICAgICAgbUhlYWRlciA9IGhlYWRlcjsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTaG93RGV0YWlsKFFTUGFuZWwuUmVjb3JkIHIsIGJvb2xlYW4gc2hvdykgewotICAgICAgICBpZiAoc2hvdykgewotICAgICAgICAgICAgbUhlYWRlci5wZXJmb3JtQ2xpY2soKTsKLSAgICAgICAgICAgIG1GdWxsUGFuZWwuc2hvd0RldGFpbChzaG93LCByKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE5vdCBzdXJlIGhvdyB3ZSB3b3VsZCBlbmQgdXAgaGVyZS4uLgotICAgICAgICAgICAgc3VwZXIuaGFuZGxlU2hvd0RldGFpbChyLCBzaG93KTsKLSAgICAgICAgfQorICAgIHByb3RlY3RlZCB2b2lkIHNob3dEZXRhaWwoYm9vbGVhbiBzaG93LCBSZWNvcmQgcikgeworICAgICAgICAvLyBEbyBub3RoaW5nLCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIFFTUGFuZWwuCiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvY3VzdG9taXplL0JsYW5rQ3VzdG9tVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9CbGFua0N1c3RvbVRpbGUuamF2YQppbmRleCA5NWZmNjExLi5hYzRmMDVmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvY3VzdG9taXplL0JsYW5rQ3VzdG9tVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvQmxhbmtDdXN0b21UaWxlLmphdmEKQEAgLTE5LDggKzE5LDkgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwotCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGU7CiAKIHB1YmxpYyBjbGFzcyBCbGFua0N1c3RvbVRpbGUgZXh0ZW5kcyBRU1RpbGU8UVNUaWxlLlN0YXRlPiB7CkBAIC03Miw3ICs3Myw5IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgICAgICBTZXJ2aWNlSW5mbyBpbmZvID0gcG0uZ2V0U2VydmljZUluZm8obUNvbXBvbmVudCwgMCk7Ci0gICAgICAgICAgICBzdGF0ZS5pY29uID0gbmV3IERyYXdhYmxlSWNvbihpbmZvLmxvYWRJY29uKHBtKSk7CisgICAgICAgICAgICBEcmF3YWJsZSBkcmF3YWJsZSA9IGluZm8ubG9hZEljb24ocG0pOworICAgICAgICAgICAgZHJhd2FibGUuc2V0VGludChtQ29udGV4dC5nZXRDb2xvcihSLmNvbG9yLnFzX3RpbGVfdGludF9hY3RpdmUpKTsKKyAgICAgICAgICAgIHN0YXRlLmljb24gPSBuZXcgRHJhd2FibGVJY29uKGRyYXdhYmxlKTsKICAgICAgICAgICAgIHN0YXRlLmxhYmVsID0gaW5mby5sb2FkTGFiZWwocG0pLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSBzdGF0ZS5sYWJlbDsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvQ3VzdG9tUVNQYW5lbC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9DdXN0b21RU1BhbmVsLmphdmEKaW5kZXggODdjMjk3MzUuLmVhYjRkY2EgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvQ3VzdG9tUVNQYW5lbC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvQ3VzdG9tUVNQYW5lbC5qYXZhCkBAIC0xNiwzMiArMTYsMjggQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuY3VzdG9taXplOwogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNsaXBEYXRhOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2VjdXJlOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNQYW5lbDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlU2VydmljZVdyYXBwZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQ3VzdG9tVGlsZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5leHRlcm5hbC5DdXN0b21UaWxlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLlRpbGVMaWZlY3ljbGVNYW5hZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5RU1RpbGVIb3N0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU2VydmljZTsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKQEAgLTUyLDggKzQ4LDkgQEAKIHB1YmxpYyBjbGFzcyBDdXN0b21RU1BhbmVsIGV4dGVuZHMgUVNQYW5lbCB7CiAgICAgCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDdXN0b21RU1BhbmVsIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAKLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtU2F2ZWRUaWxlczsKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBtU2F2ZWRUaWxlcyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwogICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gbVN0YXNoOwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IG1UaWxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCkBAIC02NywxNyArNjQsMzAgQEAKICAgICAgICAgKChOb25QYWdlZFRpbGVMYXlvdXQpIG1UaWxlTGF5b3V0KS5zZXRDdXN0b21Rc1BhbmVsKHRoaXMpOwogICAgICAgICByZW1vdmVWaWV3KG1Gb290ZXIuZ2V0VmlldygpKTsKIAorICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm5ldyBDdXN0b21RU1BhbmVsIiwgbmV3IFRocm93YWJsZSgpKTsKICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChtQ29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBRU1RpbGVIb3N0LlRJTEVTX1NFVFRJTkcpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNob3dEZXRhaWwoYm9vbGVhbiBzaG93LCBSZWNvcmQgcikgeworICAgICAgICAvLyBObyBkZXRhaWwgaGVyZS4KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKKyAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIHN1cGVyIHRvIHVucmVnaXN0ZXIgdGhlIHR1bmFibGUuCisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25UdW5pbmdDaGFuZ2VkKFN0cmluZyBrZXksIFN0cmluZyBuZXdWYWx1ZSkgewogICAgICAgICBpZiAoa2V5LmVxdWFscyhRU19TSE9XX0JSSUdIVE5FU1MpKSB7CiAgICAgICAgICAgICAvLyBObyBCcmlnaHRuZXNzIGZvciB5b3UuCiAgICAgICAgICAgICBzdXBlci5vblR1bmluZ0NoYW5nZWQoa2V5LCAiMCIpOwogICAgICAgICB9CiAgICAgICAgIGlmIChRU1RpbGVIb3N0LlRJTEVTX1NFVFRJTkcuZXF1YWxzKGtleSkpIHsKLSAgICAgICAgICAgIG1TYXZlZFRpbGVzID0gUVNUaWxlSG9zdC5sb2FkVGlsZVNwZWNzKG1Db250ZXh0LCBuZXdWYWx1ZSk7CisgICAgICAgICAgICBtU2F2ZWRUaWxlcyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoCisgICAgICAgICAgICAgICAgICAgIFFTVGlsZUhvc3QubG9hZFRpbGVTcGVjcyhtQ29udGV4dCwgbmV3VmFsdWUpKTsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTmV3IHNhdmVkIHRpbGVzICIgKyBUZXh0VXRpbHMuam9pbigiLCIsIG1TYXZlZFRpbGVzKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNiw2ICsxMTYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFNhdmVkVGlsZXMoKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAic2V0U2F2ZWRUaWxlcyAiICsgVGV4dFV0aWxzLmpvaW4oIiwiLCBtU2F2ZWRUaWxlcykpOwogICAgICAgICBzZXRUaWxlcyhtU2F2ZWRUaWxlcyk7CiAgICAgfQogCkBAIC0xMTQsNDcgKzEyNSwyNiBAQAogICAgICAgICAgICAgU3RyaW5nIHRpbGVTcGVjID0gbVNhdmVkVGlsZXMuZ2V0KGkpOwogICAgICAgICAgICAgaWYgKCF0aWxlU3BlYy5zdGFydHNXaXRoKEN1c3RvbVRpbGUuUFJFRklYKSkgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIW1UaWxlcy5jb250YWlucyh0aWxlU3BlYykpIHsKLSAgICAgICAgICAgICAgICBtQ29udGV4dC5iaW5kU2VydmljZUFzVXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoKS5zZXRDb21wb25lbnQoQ3VzdG9tVGlsZS5nZXRDb21wb25lbnRGcm9tU3BlYyh0aWxlU3BlYykpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVNUaWxlU2VydmljZVdyYXBwZXIgd3JhcHBlciA9IG5ldyBRU1RpbGVTZXJ2aWNlV3JhcHBlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUVNUaWxlU2VydmljZS5TdHViLmFzSW50ZXJmYWNlKHNlcnZpY2UpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5vblN0b3BMaXN0ZW5pbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5vblRpbGVSZW1vdmVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSwgU2VydmljZS5CSU5EX0FVVE9fQ1JFQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpKTsKKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCgpLnNldENvbXBvbmVudChDdXN0b21UaWxlLmdldENvbXBvbmVudEZyb21TcGVjKHRpbGVTcGVjKSk7CisgICAgICAgICAgICAgICAgVGlsZUxpZmVjeWNsZU1hbmFnZXIgbGlmZWN5Y2xlTWFuYWdlciA9IG5ldyBUaWxlTGlmZWN5Y2xlTWFuYWdlcihuZXcgSGFuZGxlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQsIGludGVudCwgbmV3IFVzZXJIYW5kbGUoQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpKTsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGVNYW5hZ2VyLm9uU3RvcExpc3RlbmluZygpOworICAgICAgICAgICAgICAgIGxpZmVjeWNsZU1hbmFnZXIub25UaWxlUmVtb3ZlZCgpOworICAgICAgICAgICAgICAgIGxpZmVjeWNsZU1hbmFnZXIuZmx1c2hNZXNzYWdlc0FuZFVuYmluZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVRpbGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBTdHJpbmcgdGlsZVNwZWMgPSBtVGlsZXMuZ2V0KGkpOwogICAgICAgICAgICAgaWYgKCF0aWxlU3BlYy5zdGFydHNXaXRoKEN1c3RvbVRpbGUuUFJFRklYKSkgY29udGludWU7CiAgICAgICAgICAgICBpZiAoIW1TYXZlZFRpbGVzLmNvbnRhaW5zKHRpbGVTcGVjKSkgewotICAgICAgICAgICAgICAgIG1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludGVudCgpLnNldENvbXBvbmVudChDdXN0b21UaWxlLmdldENvbXBvbmVudEZyb21TcGVjKHRpbGVTcGVjKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUsIElCaW5kZXIgc2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU1RpbGVTZXJ2aWNlV3JhcHBlciB3cmFwcGVyID0gbmV3IFFTVGlsZVNlcnZpY2VXcmFwcGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElRU1RpbGVTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc2VydmljZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLm9uVGlsZUFkZGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSwgU2VydmljZS5CSU5EX0FVVE9fQ1JFQVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUoQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpKTsKKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCgpLnNldENvbXBvbmVudChDdXN0b21UaWxlLmdldENvbXBvbmVudEZyb21TcGVjKHRpbGVTcGVjKSk7CisgICAgICAgICAgICAgICAgVGlsZUxpZmVjeWNsZU1hbmFnZXIgbGlmZWN5Y2xlTWFuYWdlciA9IG5ldyBUaWxlTGlmZWN5Y2xlTWFuYWdlcihuZXcgSGFuZGxlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQsIGludGVudCwgbmV3IFVzZXJIYW5kbGUoQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpKTsKKyAgICAgICAgICAgICAgICBsaWZlY3ljbGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgICAgICAgICAgbGlmZWN5Y2xlTWFuYWdlci5mbHVzaE1lc3NhZ2VzQW5kVW5iaW5kKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzYXZlQ3VycmVudFRpbGVzICIgKyBtVGlsZXMpOwogICAgICAgICBTZWN1cmUucHV0U3RyaW5nRm9yVXNlcihnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCksIFFTVGlsZUhvc3QuVElMRVNfU0VUVElORywKICAgICAgICAgICAgICAgICBUZXh0VXRpbHMuam9pbigiLCIsIG1UaWxlcyksIEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKTsKICAgICB9CkBAIC0xNzMsMzAgKzE2MywzNyBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzZXRUaWxlc0ludGVybmFsKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlNldCB0aWxlcyBpbnRlcm5hbCIpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1DdXJyZW50VGlsZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIG1DdXJyZW50VGlsZXMuZ2V0KGkpLmRlc3Ryb3koKTsKICAgICAgICAgfQogICAgICAgICBtQ3VycmVudFRpbGVzLmNsZWFyKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVRpbGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAobVRpbGVzLmdldChpKS5zdGFydHNXaXRoKEN1c3RvbVRpbGUuUFJFRklYKSkgewotICAgICAgICAgICAgICAgIG1DdXJyZW50VGlsZXMuYWRkKEJsYW5rQ3VzdG9tVGlsZS5jcmVhdGUobUhvc3QsIG1UaWxlcy5nZXQoaSkpKTsKKyAgICAgICAgICAgICAgICBRU1RpbGU8Pz4gdGlsZSA9IEJsYW5rQ3VzdG9tVGlsZS5jcmVhdGUobUhvc3QsIG1UaWxlcy5nZXQoaSkpOworICAgICAgICAgICAgICAgIHRpbGUuc2V0VGlsZVNwZWMobVRpbGVzLmdldChpKSk7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRUaWxlcy5hZGQodGlsZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFFTVGlsZTw/PiB0aWxlID0gbUhvc3QuY3JlYXRlVGlsZShtVGlsZXMuZ2V0KGkpKTsKICAgICAgICAgICAgICAgICBpZiAodGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbGUuc2V0VGlsZVNwZWMobVRpbGVzLmdldChpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VGlsZXMuYWRkKHRpbGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiU2tpcHBpbmcgIiArIG1UaWxlcy5nZXQoaSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DdXJyZW50VGlsZXMuZ2V0KG1DdXJyZW50VGlsZXMuc2l6ZSgpIC0gMSkuc2V0VGlsZVNwZWMobVRpbGVzLmdldChpKSk7CiAgICAgICAgIH0KICAgICAgICAgc3VwZXIuc2V0VGlsZXMobUN1cnJlbnRUaWxlcyk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYWRkVGlsZShTdHJpbmcgc3BlYykgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgImFkZFRpbGUgIiArIHNwZWMpOwogICAgICAgICBtVGlsZXMuYWRkKHNwZWMpOwogICAgICAgICBzZXRUaWxlc0ludGVybmFsKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbW92ZVRvKFN0cmluZyBmcm9tLCBTdHJpbmcgdG8pIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJtb3ZlVG8gIiArIGZyb20gKyAiICIgKyB0byk7CiAgICAgICAgIGludCBmcm9tSW5kZXggPSBtVGlsZXMuaW5kZXhPZihmcm9tKTsKICAgICAgICAgaWYgKGZyb21JbmRleCA8IDApIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gZnJvbSB0aWxlICIgKyBmcm9tKTsKQEAgLTIyMCw2ICsyMTcsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFRpbGVzKExpc3Q8U3RyaW5nPiB0aWxlcykgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlNldCB0aWxlcyAiICsgVGV4dFV0aWxzLmpvaW4oIiwiLCB0aWxlcykpOwogICAgICAgICBtVGlsZXMgPSBuZXcgQXJyYXlMaXN0PD4odGlsZXMpOwogICAgICAgICBzZXRUaWxlc0ludGVybmFsKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9UaWxlQWRhcHRlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2N1c3RvbWl6ZS9UaWxlQWRhcHRlci5qYXZhCmluZGV4IDY3MDZjN2EuLmE2YTcxNDMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9jdXN0b21pemUvVGlsZUFkYXB0ZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvY3VzdG9taXplL1RpbGVBZGFwdGVyLmphdmEKQEAgLTQxLDcgKzQxLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLlFTVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5RU1RpbGUuSWNvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5DdXN0b21UaWxlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLkN1c3RvbVRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlFTVGlsZUhvc3Q7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuUVNQYWdpbmdTd2l0Y2g7CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9DdXN0b21UaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvQ3VzdG9tVGlsZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjQlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9DdXN0b21UaWxlLmphdmEKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9DdXN0b21UaWxlLmphdmEKaW5kZXggYmI3NGYzNC4uZDM5OGI2NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0N1c3RvbVRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvQ3VzdG9tVGlsZS5qYXZhCkBAIC0xMSwzMiArMTEsMjkgQEAKICAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKICAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy5leHRlcm5hbDsKIAotcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlczsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlNwYW5uYWJsZVN0cmluZ0J1aWxkZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LnN0eWxlLkZvcmVncm91bmRDb2xvclNwYW47CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSVdpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLlFTVGlsZVNlcnZpY2VXcmFwcGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5RU1RpbGVIb3N0OwogCiBwdWJsaWMgY2xhc3MgQ3VzdG9tVGlsZSBleHRlbmRzIFFTVGlsZTxRU1RpbGUuU3RhdGU+IHsKQEAgLTUyLDggKzQ5LDkgQEAKICAgICBwcml2YXRlIGZpbmFsIFRpbGUgbVRpbGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBJV2luZG93TWFuYWdlciBtV2luZG93TWFuYWdlcjsKICAgICBwcml2YXRlIGZpbmFsIElCaW5kZXIgbVRva2VuID0gbmV3IEJpbmRlcigpOworICAgIHByaXZhdGUgZmluYWwgSVFTVGlsZVNlcnZpY2UgbVNlcnZpY2U7CisgICAgcHJpdmF0ZSBmaW5hbCBUaWxlU2VydmljZU1hbmFnZXIgbVNlcnZpY2VNYW5hZ2VyOwogCi0gICAgcHJpdmF0ZSBRU1RpbGVTZXJ2aWNlV3JhcHBlciBtU2VydmljZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbUxpc3RlbmluZzsKICAgICBwcml2YXRlIGJvb2xlYW4gbUJvdW5kOwogICAgIHByaXZhdGUgYm9vbGVhbiBtSXNUb2tlbkdyYW50ZWQ7CkBAIC02Myw3ICs2MSw5IEBACiAgICAgICAgIHN1cGVyKGhvc3QpOwogICAgICAgICBtV2luZG93TWFuYWdlciA9IFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKTsKICAgICAgICAgbUNvbXBvbmVudCA9IENvbXBvbmVudE5hbWUudW5mbGF0dGVuRnJvbVN0cmluZyhhY3Rpb24pOwotICAgICAgICBtVGlsZSA9IG5ldyBUaWxlKG1Db21wb25lbnQsIGhvc3QpOworICAgICAgICBtU2VydmljZU1hbmFnZXIgPSBob3N0LmdldFRpbGVTZXJ2aWNlcygpLmdldFRpbGVXcmFwcGVyKHRoaXMpOworICAgICAgICBtU2VydmljZSA9IG1TZXJ2aWNlTWFuYWdlci5nZXRUaWxlU2VydmljZSgpOworICAgICAgICBtVGlsZSA9IG5ldyBUaWxlKG1Db21wb25lbnQpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICAgICAgU2VydmljZUluZm8gaW5mbyA9IHBtLmdldFNlcnZpY2VJbmZvKG1Db21wb25lbnQsIDApOwpAQCAtNzIsNiArNzIsMTEgQEAKICAgICAgICAgICAgIG1UaWxlLnNldExhYmVsKGluZm8ubG9hZExhYmVsKHBtKSk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXJ2aWNlLnNldFFTVGlsZShtVGlsZSk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBDYWxsZWQgdGhyb3VnaCB3cmFwcGVyLCB3b24ndCBoYXBwZW4gaGVyZS4KKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBDb21wb25lbnROYW1lIGdldENvbXBvbmVudCgpIHsKQEAgLTg2LDYgKzkxLDcgQEAKICAgICAgICAgbVRpbGUuc2V0SWNvbih0aWxlLmdldEljb24oKSk7CiAgICAgICAgIG1UaWxlLnNldExhYmVsKHRpbGUuZ2V0TGFiZWwoKSk7CiAgICAgICAgIG1UaWxlLnNldENvbnRlbnREZXNjcmlwdGlvbih0aWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgbVRpbGUuc2V0U3RhdGUodGlsZS5nZXRTdGF0ZSgpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBvbkRpYWxvZ1Nob3duKCkgewpAQCAtOTYsNDIgKzEwMiwzMyBAQAogICAgIHB1YmxpYyB2b2lkIHNldExpc3RlbmluZyhib29sZWFuIGxpc3RlbmluZykgewogICAgICAgICBpZiAobUxpc3RlbmluZyA9PSBsaXN0ZW5pbmcpIHJldHVybjsKICAgICAgICAgbUxpc3RlbmluZyA9IGxpc3RlbmluZzsKLSAgICAgICAgaWYgKGxpc3RlbmluZykgewotICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG1VbmJpbmQpOwotICAgICAgICAgICAgaWYgKCFtQm91bmQpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiBHdWFyYW50ZWUgcmUtYmluZCBvbiB1c2VyLXN3aXRjaC4KLSAgICAgICAgICAgICAgICBtQ29udGV4dC5iaW5kU2VydmljZUFzVXNlcihuZXcgSW50ZW50KCkuc2V0Q29tcG9uZW50KG1Db21wb25lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VDb25uZWN0aW9uLCBTZXJ2aWNlLkJJTkRfQVVUT19DUkVBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVXNlckhhbmRsZShBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSkpOwotICAgICAgICAgICAgICAgIG1Cb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobGlzdGVuaW5nKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlTWFuYWdlci5nZXRUeXBlKCkgPT0gVGlsZVNlcnZpY2UuVElMRV9NT0RFX1BBU1NJVkUpIHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRSZXF1ZXN0ZWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RhcnRMaXN0ZW5pbmcoKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJDYW4ndCBzdGFydCBzZXJ2aWNlIGxpc3RlbmluZyIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtU2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RvcExpc3RlbmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1Jc1Rva2VuR3JhbnRlZCAmJiAhbUlzU2hvd2luZ0RpYWxvZykgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiUmVtb3ZpbmcgdG9rZW4iKTsKLSAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVtb3ZlV2luZG93VG9rZW4obVRva2VuKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGlmIChtSXNUb2tlbkdyYW50ZWQgJiYgIW1Jc1Nob3dpbmdEaWFsb2cpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiUmVtb3ZpbmcgdG9rZW4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnJlbW92ZVdpbmRvd1Rva2VuKG1Ub2tlbik7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbUlzVG9rZW5HcmFudGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1Jc1Rva2VuR3JhbnRlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1Jc1Nob3dpbmdEaWFsb2cgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtU2VydmljZU1hbmFnZXIuc2V0QmluZFJlcXVlc3RlZChmYWxzZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtSXNTaG93aW5nRGlhbG9nID0gZmFsc2U7Ci0gICAgICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChtVW5iaW5kLCBVTkJJTkRfREVMQVkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQ2FsbGVkIHRocm91Z2ggd3JhcHBlciwgd29uJ3QgaGFwcGVuIGhlcmUuCiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVEZXN0cm95KCkgewogICAgICAgICBzdXBlci5oYW5kbGVEZXN0cm95KCk7Ci0gICAgICAgIG1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhtVW5iaW5kKTsKICAgICAgICAgaWYgKG1Jc1Rva2VuR3JhbnRlZCkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIlJlbW92aW5nIHRva2VuIik7CkBAIC0xMzksNyArMTM2LDcgQEAKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgbVVuYmluZC5ydW4oKTsKKyAgICAgICAgbUhvc3QuZ2V0VGlsZVNlcnZpY2VzKCkuZnJlZVNlcnZpY2UodGhpcywgbVNlcnZpY2VNYW5hZ2VyKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTE1NCwxNiArMTUxLDIzIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDbGljaygpIHsKLSAgICAgICAgaWYgKG1TZXJ2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJBZGRpbmcgdG9rZW4iKTsKLSAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5hZGRXaW5kb3dUb2tlbihtVG9rZW4sIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfUVNfRElBTE9HKTsKLSAgICAgICAgICAgICAgICBtSXNUb2tlbkdyYW50ZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgaWYgKG1UaWxlLmdldFN0YXRlKCkgPT0gVGlsZS5TVEFURV9VTkFWQUlMQUJMRSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkFkZGluZyB0b2tlbiIpOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuYWRkV2luZG93VG9rZW4obVRva2VuLCBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1FTX0RJQUxPRyk7CisgICAgICAgICAgICBtSXNUb2tlbkdyYW50ZWQgPSB0cnVlOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAobVNlcnZpY2VNYW5hZ2VyLmdldFR5cGUoKSA9PSBUaWxlU2VydmljZS5USUxFX01PREVfQUNUSVZFKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRSZXF1ZXN0ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgbVNlcnZpY2Uub25TdGFydExpc3RlbmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbVNlcnZpY2Uub25DbGljayhtVG9rZW4pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiQ2xpY2sgd2l0aCBubyBzZXJ2aWNlICIgKyBnZXRUaWxlU3BlYygpKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIENhbGxlZCB0aHJvdWdoIHdyYXBwZXIsIHdvbid0IGhhcHBlbiBoZXJlLgogICAgICAgICB9CiAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSwgbUNvbXBvbmVudC5nZXRQYWNrYWdlTmFtZSgpKTsKICAgICB9CkBAIC0xNzUsOSArMTc5LDE1IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlVXBkYXRlU3RhdGUoU3RhdGUgc3RhdGUsIE9iamVjdCBhcmcpIHsKICAgICAgICAgRHJhd2FibGUgZHJhd2FibGUgPSBtVGlsZS5nZXRJY29uKCkubG9hZERyYXdhYmxlKG1Db250ZXh0KTsKLSAgICAgICAgZHJhd2FibGUuc2V0VGludChtQ29udGV4dC5nZXRDb2xvcihhbmRyb2lkLlIuY29sb3Iud2hpdGUpKTsKKyAgICAgICAgaW50IGNvbG9yID0gbUNvbnRleHQuZ2V0Q29sb3IoZ2V0Q29sb3IobVRpbGUuZ2V0U3RhdGUoKSkpOworICAgICAgICBkcmF3YWJsZS5zZXRUaW50KGNvbG9yKTsKICAgICAgICAgc3RhdGUuaWNvbiA9IG5ldyBEcmF3YWJsZUljb24oZHJhd2FibGUpOwogICAgICAgICBzdGF0ZS5sYWJlbCA9IG1UaWxlLmdldExhYmVsKCk7CisgICAgICAgIGlmIChtVGlsZS5nZXRTdGF0ZSgpID09IFRpbGUuU1RBVEVfVU5BVkFJTEFCTEUpIHsKKyAgICAgICAgICAgIHN0YXRlLmxhYmVsID0gbmV3IFNwYW5uYWJsZVN0cmluZ0J1aWxkZXIoKS5hcHBlbmQoc3RhdGUubGFiZWwsCisgICAgICAgICAgICAgICAgICAgIG5ldyBGb3JlZ3JvdW5kQ29sb3JTcGFuKGNvbG9yKSwKKyAgICAgICAgICAgICAgICAgICAgU3Bhbm5hYmxlU3RyaW5nQnVpbGRlci5TUEFOX0lOQ0xVU0lWRV9JTkNMVVNJVkUpOworICAgICAgICB9CiAgICAgICAgIGlmIChtVGlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSBtVGlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE4NywzMyArMTk3LDMyIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldE1ldHJpY3NDYXRlZ29yeSgpIHsKLSAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfSU5URU5UOworICAgICAgICByZXR1cm4gTWV0cmljc0xvZ2dlci5RU19DVVNUT007CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBTZXJ2aWNlQ29ubmVjdGlvbiBtU2VydmljZUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIHNlcnZpY2UpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlID0gbmV3IFFTVGlsZVNlcnZpY2VXcmFwcGVyKElRU1RpbGVTZXJ2aWNlLlN0dWIuYXNJbnRlcmZhY2Uoc2VydmljZSkpOwotICAgICAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKLSAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRRU1RpbGUobVRpbGUpOwotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm9uU3RhcnRMaXN0ZW5pbmcoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2Uub25TdG9wTGlzdGVuaW5nKCk7CisgICAgcHVibGljIHZvaWQgc3RhcnRVbmxvY2tBbmRSdW4oKSB7CisgICAgICAgIG1Ib3N0LnN0YXJ0UnVubmFibGVEaXNtaXNzaW5nS2V5Z3VhcmQobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uub25VbmxvY2tDb21wbGV0ZSgpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KIAotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGlzY29ubmVjdGVkKENvbXBvbmVudE5hbWUgbmFtZSkgeworICAgIHByaXZhdGUgc3RhdGljIGludCBnZXRDb2xvcihpbnQgc3RhdGUpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICAgICAgY2FzZSBUaWxlLlNUQVRFX1VOQVZBSUxBQkxFOgorICAgICAgICAgICAgICAgIHJldHVybiBSLmNvbG9yLnFzX3RpbGVfdGludF91bmF2YWlsYWJsZTsKKyAgICAgICAgICAgIGNhc2UgVGlsZS5TVEFURV9JTkFDVElWRToKKyAgICAgICAgICAgICAgICByZXR1cm4gUi5jb2xvci5xc190aWxlX3RpbnRfaW5hY3RpdmU7CisgICAgICAgICAgICBjYXNlIFRpbGUuU1RBVEVfQUNUSVZFOgorICAgICAgICAgICAgICAgIHJldHVybiBSLmNvbG9yLnFzX3RpbGVfdGludF9hY3RpdmU7CiAgICAgICAgIH0KLSAgICB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtVW5iaW5kID0gbmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZShtU2VydmljZUNvbm5lY3Rpb24pOwotICAgICAgICAgICAgbUJvdW5kID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIENvbXBvbmVudE5hbWUgZ2V0Q29tcG9uZW50RnJvbVNwZWMoU3RyaW5nIHNwZWMpIHsKICAgICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbiA9IHNwZWMuc3Vic3RyaW5nKFBSRUZJWC5sZW5ndGgoKSwgc3BlYy5sZW5ndGgoKSAtIDEpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvUVNUaWxlU2VydmljZVdyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODMwYWM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1FTVGlsZVNlcnZpY2VXcmFwcGVyLmphdmEKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1NlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTVGlsZVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworCisKK3B1YmxpYyBjbGFzcyBRU1RpbGVTZXJ2aWNlV3JhcHBlciB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJJUVNUaWxlU2VydmljZVdyYXBwZXIiOworCisgICAgcHJpdmF0ZSBmaW5hbCBJUVNUaWxlU2VydmljZSBtU2VydmljZTsKKworICAgIHB1YmxpYyBRU1RpbGVTZXJ2aWNlV3JhcHBlcihJUVNUaWxlU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSUJpbmRlciBhc0JpbmRlcigpIHsKKyAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLmFzQmluZGVyKCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc2V0UVNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uuc2V0UVNUaWxlKHRpbGUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gVGlsZVNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG9uVGlsZUFkZGVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25UaWxlQWRkZWQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFRpbGVTZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBvblRpbGVSZW1vdmVkKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25UaWxlUmVtb3ZlZCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsICJDYXVnaHQgZXhjZXB0aW9uIGZyb20gVGlsZVNlcnZpY2UiLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIG9uU3RhcnRMaXN0ZW5pbmcoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5vblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gb25TdG9wTGlzdGVuaW5nKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gb25DbGljayhJQmluZGVyIHRva2VuKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5vbkNsaWNrKHRva2VuKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFRpbGVTZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtU2VydmljZS5zZXRRU1NlcnZpY2Uoc2VydmljZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKFRBRywgIkNhdWdodCBleGNlcHRpb24gZnJvbSBUaWxlU2VydmljZSIsIGUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gb25VbmxvY2tDb21wbGV0ZSgpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm9uVW5sb2NrQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmQoVEFHLCAiQ2F1Z2h0IGV4Y2VwdGlvbiBmcm9tIFRpbGVTZXJ2aWNlIiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZUxpZmVjeWNsZU1hbmFnZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlTGlmZWN5Y2xlTWFuYWdlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NzdkODAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZUxpZmVjeWNsZU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWw7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CitpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1NlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTVGlsZVNlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuVGlsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQuYW5ub3RhdGlvbi5WaXNpYmxlRm9yVGVzdGluZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBsaWJjb3JlLnV0aWwuT2JqZWN0czsKKworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogTWFuYWdlcyB0aGUgbGlmZWN5Y2xlIG9mIGEgVGlsZVNlcnZpY2UuCisgKiA8cD4KKyAqIFdpbGwga2VlcCB0cmFjayBvZiBhbGwgY2FsbHMgb24gdGhlIElRU1RpbGVTZXJ2aWNlIGludGVyZmFjZSBhbmQgd2lsbCByZWxheSB0aG9zZSBjYWxscyB0byB0aGUKKyAqIFRpbGVTZXJ2aWNlIGFzIHNvb24gYXMgaXQgaXMgYm91bmQuICBJdCB3aWxsIG9ubHkgYmluZCB0byB0aGUgc2VydmljZSB3aGVuIGl0IGlzIGFsbG93ZWQgdG8KKyAqICh7QGxpbmsgI3NldEJpbmRTZXJ2aWNlKGJvb2xlYW4pfSkgYW5kIHdoZW4gdGhlIHNlcnZpY2UgaXMgYXZhaWxhYmxlLgorICovCitwdWJsaWMgY2xhc3MgVGlsZUxpZmVjeWNsZU1hbmFnZXIgZXh0ZW5kcyBCcm9hZGNhc3RSZWNlaXZlciBpbXBsZW1lbnRzCisgICAgICAgIElRU1RpbGVTZXJ2aWNlLCBTZXJ2aWNlQ29ubmVjdGlvbiwgSUJpbmRlci5EZWF0aFJlY2lwaWVudCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRpbGVMaWZlY3ljbGVNYW5hZ2VyIjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfT05fQURERUQgPSAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfT05fUkVNT1ZFRCA9IDE7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9DTElDSyA9IDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9VTkxPQ0tfQ09NUExFVEUgPSAzOworCisgICAgLy8gQmluZCByZXRyeSBjb250cm9sLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfQklORF9SRVRSSUVTID0gNTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklORF9SRVRSWV9ERUxBWSA9IDEwMDA7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyOworICAgIHByaXZhdGUgZmluYWwgSW50ZW50IG1JbnRlbnQ7CisgICAgcHJpdmF0ZSBmaW5hbCBVc2VySGFuZGxlIG1Vc2VyOworCisgICAgcHJpdmF0ZSBTZXQ8SW50ZWdlcj4gbVF1ZXVlZE1lc3NhZ2VzID0gbmV3IEFycmF5U2V0PD4oKTsKKyAgICBwcml2YXRlIFFTVGlsZVNlcnZpY2VXcmFwcGVyIG1XcmFwcGVyOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGlzdGVuaW5nOworICAgIHByaXZhdGUgVGlsZSBtVGlsZTsKKyAgICBwcml2YXRlIElCaW5kZXIgbUNsaWNrQmluZGVyOworCisgICAgcHJpdmF0ZSBpbnQgbUJpbmRUcnlDb3VudDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUJvdW5kOworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIGJvb2xlYW4gbVJlY2VpdmVyUmVnaXN0ZXJlZDsKKyAgICBwcml2YXRlIElRU1NlcnZpY2UgbVNlcnZpY2U7CisgICAgcHJpdmF0ZSBib29sZWFuIG1VbmJpbmRJbW1lZGlhdGU7CisKKyAgICBwdWJsaWMgVGlsZUxpZmVjeWNsZU1hbmFnZXIoSGFuZGxlciBoYW5kbGVyLCBDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQsIFVzZXJIYW5kbGUgdXNlcikgeworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIG1IYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgbUludGVudCA9IGludGVudDsKKyAgICAgICAgbVVzZXIgPSB1c2VyOworICAgIH0KKworICAgIHB1YmxpYyBDb21wb25lbnROYW1lIGdldENvbXBvbmVudCgpIHsKKyAgICAgICAgcmV0dXJuIG1JbnRlbnQuZ2V0Q29tcG9uZW50KCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzUGVuZGluZ0NsaWNrKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1RdWV1ZWRNZXNzYWdlcykgeworICAgICAgICAgICAgcmV0dXJuIG1RdWV1ZWRNZXNzYWdlcy5jb250YWlucyhNU0dfT05fQ0xJQ0spOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQmluZHMganVzdCBsb25nIGVub3VnaCB0byBzZW5kIGFueSBxdWV1ZWQgbWVzc2FnZXMsIHRoZW4gdW5iaW5kcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmbHVzaE1lc3NhZ2VzQW5kVW5iaW5kKCkgeworICAgICAgICBtVW5iaW5kSW1tZWRpYXRlID0gdHJ1ZTsKKyAgICAgICAgc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QmluZFNlcnZpY2UoYm9vbGVhbiBiaW5kKSB7CisgICAgICAgIG1Cb3VuZCA9IGJpbmQ7CisgICAgICAgIGlmIChiaW5kKSB7CisgICAgICAgICAgICBpZiAobUJpbmRUcnlDb3VudCA9PSBNQVhfQklORF9SRVRSSUVTKSB7CisgICAgICAgICAgICAgICAgLy8gVG9vIG1hbnkgZmFpbHVyZXMsIGdpdmUgdXAgb24gdGhpcyB0aWxlIHVudGlsIGFuIHVwZGF0ZS4KKyAgICAgICAgICAgICAgICBzdGFydFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNoZWNrQ29tcG9uZW50U3RhdGUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiQmluZGluZyBzZXJ2aWNlICIgKyBtSW50ZW50KTsKKyAgICAgICAgICAgIG1CaW5kVHJ5Q291bnQrKzsKKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKG1JbnRlbnQsIHRoaXMsCisgICAgICAgICAgICAgICAgICAgIENvbnRleHQuQklORF9BVVRPX0NSRUFURSB8IENvbnRleHQuQklORF9GT1JFR1JPVU5EX1NFUlZJQ0VfV0hJTEVfQVdBS0UsCisgICAgICAgICAgICAgICAgICAgIG1Vc2VyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiVW5iaW5kaW5nIHNlcnZpY2UgIiArIG1JbnRlbnQpOworICAgICAgICAgICAgLy8gR2l2ZSBpdCBhbm90aGVyIGNoYW5jZSBuZXh0IHRpbWUgaXQgbmVlZHMgdG8gYmUgYm91bmQsIG91dCBvZiBraW5kbmVzcy4KKyAgICAgICAgICAgIG1CaW5kVHJ5Q291bnQgPSAwOworICAgICAgICAgICAgbVdyYXBwZXIgPSBudWxsOworICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUsIElCaW5kZXIgc2VydmljZSkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uU2VydmljZUNvbm5lY3RlZCAiICsgbmFtZSk7CisgICAgICAgIC8vIEdvdCBhIGNvbm5lY3Rpb24sIHNldCB0aGUgYmluZGluZyBjb3VudCB0byAwLgorICAgICAgICBtQmluZFRyeUNvdW50ID0gMDsKKyAgICAgICAgbVdyYXBwZXIgPSBuZXcgUVNUaWxlU2VydmljZVdyYXBwZXIoU3R1Yi5hc0ludGVyZmFjZShzZXJ2aWNlKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzZXJ2aWNlLmxpbmtUb0RlYXRoKHRoaXMsIDApOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICB9CisgICAgICAgIHNldFFTU2VydmljZShtU2VydmljZSk7CisgICAgICAgIHNldFFTVGlsZShtVGlsZSk7CisgICAgICAgIGhhbmRsZVBlbmRpbmdNZXNzYWdlcygpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvblNlcnZpY2VEaXNjb25uZWN0ZWQgIiArIG5hbWUpOworICAgICAgICBtV3JhcHBlciA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVBlbmRpbmdNZXNzYWdlcygpIHsKKyAgICAgICAgLy8gVGhpcyBvcmRlcmluZyBpcyBsYWlkIG91dCBtYW51YWxseSB0byBtYWtlIHN1cmUgd2UgcHJlc2VydmUgdGhlIFRpbGVTZXJ2aWNlCisgICAgICAgIC8vIGxpZmVjeWNsZS4KKyAgICAgICAgQXJyYXlTZXQ8SW50ZWdlcj4gcXVldWU7CisgICAgICAgIHN5bmNocm9uaXplZCAobVF1ZXVlZE1lc3NhZ2VzKSB7CisgICAgICAgICAgICBxdWV1ZSA9IG5ldyBBcnJheVNldDw+KG1RdWV1ZWRNZXNzYWdlcyk7CisgICAgICAgICAgICBtUXVldWVkTWVzc2FnZXMuY2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVldWUuY29udGFpbnMoTVNHX09OX0FEREVEKSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIYW5kbGluZyBwZW5kaW5nIG9uQWRkZWQiKTsKKyAgICAgICAgICAgIG9uVGlsZUFkZGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSGFuZGxpbmcgcGVuZGluZyBvblN0YXJ0TGlzdGVuaW5nIik7CisgICAgICAgICAgICBvblN0YXJ0TGlzdGVuaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1ZXVlLmNvbnRhaW5zKE1TR19PTl9DTElDSykpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiSGFuZGxpbmcgcGVuZGluZyBvbkNsaWNrIik7CisgICAgICAgICAgICBpZiAoIW1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNYW5hZ2VkIHRvIGdldCBjbGljayBvbiBub24tbGlzdGVuaW5nIHN0YXRlLi4uIik7CisgICAgICAgICAgICAgICAgLy8gU2tpcHBpbmcgY2xpY2sgc2luY2UgbG9zdCBjbGljayBwcml2aWxlZ2VzLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvbkNsaWNrKG1DbGlja0JpbmRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1ZXVlLmNvbnRhaW5zKE1TR19PTl9VTkxPQ0tfQ09NUExFVEUpKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIkhhbmRsaW5nIHBlbmRpbmcgb25VbmxvY2tDb21wbGV0ZSIpOworICAgICAgICAgICAgaWYgKCFtTGlzdGVuaW5nKSB7CisgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTWFuYWdlZCB0byBnZXQgdW5sb2NrIG9uIG5vbi1saXN0ZW5pbmcgc3RhdGUuLi4iKTsKKyAgICAgICAgICAgICAgICAvLyBTa2lwcGluZyB1bmxvY2sgc2luY2UgbG9zdCBjbGljayBwcml2aWxlZ2VzLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvblVubG9ja0NvbXBsZXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHF1ZXVlLmNvbnRhaW5zKE1TR19PTl9SRU1PVkVEKSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJIYW5kbGluZyBwZW5kaW5nIG9uUmVtb3ZlZCIpOworICAgICAgICAgICAgaWYgKG1MaXN0ZW5pbmcpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJNYW5hZ2VkIHRvIGdldCByZW1vdmUgaW4gbGlzdGVuaW5nIHN0YXRlLi4uIik7CisgICAgICAgICAgICAgICAgb25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvblRpbGVSZW1vdmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1VbmJpbmRJbW1lZGlhdGUpIHsKKyAgICAgICAgICAgIG1VbmJpbmRJbW1lZGlhdGUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNldEJpbmRTZXJ2aWNlKGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGhhbmRsZURlc3Ryb3koKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiaGFuZGxlRGVzdHJveSIpOworICAgICAgICBpZiAobVJlY2VpdmVyUmVnaXN0ZXJlZCkgeworICAgICAgICAgICAgc3RvcFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBoYW5kbGVEZWF0aCgpIHsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwpIHJldHVybjsKKyAgICAgICAgbVdyYXBwZXIgPSBudWxsOworICAgICAgICBpZiAoIW1Cb3VuZCkgcmV0dXJuOworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgImhhbmRsZURlYXRoIik7CisgICAgICAgIGlmIChjaGVja0NvbXBvbmVudFN0YXRlKCkpIHsKKyAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHJ5IGJpbmRpbmcuCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRCaW5kU2VydmljZSh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIEJJTkRfUkVUUllfREVMQVkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UVNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInNldFFTVGlsZSAiICsgdGlsZSk7CisgICAgICAgIG1UaWxlID0gdGlsZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyICE9IG51bGwgJiYgIW1XcmFwcGVyLnNldFFTVGlsZSh0aWxlKSkgeworICAgICAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0NvbXBvbmVudFN0YXRlKCkgeworICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIGlmICghaXNQYWNrYWdlQXZhaWxhYmxlKHBtKSB8fCAhaXNDb21wb25lbnRBdmFpbGFibGUocG0pKSB7CisgICAgICAgICAgICBzdGFydFBhY2thZ2VMaXN0ZW5pbmcoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc3RhcnRQYWNrYWdlTGlzdGVuaW5nKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInN0YXJ0UGFja2FnZUxpc3RlbmluZyIpOworICAgICAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfQURERUQpOworICAgICAgICBmaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fUEFDS0FHRV9DSEFOR0VEKTsKKyAgICAgICAgZmlsdGVyLmFkZERhdGFTY2hlbWUoInBhY2thZ2UiKTsKKyAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlckFzVXNlcih0aGlzLCBtVXNlciwgZmlsdGVyLCBudWxsLCBtSGFuZGxlcik7CisgICAgICAgIG1SZWNlaXZlclJlZ2lzdGVyZWQgPSB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzdG9wUGFja2FnZUxpc3RlbmluZygpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzdG9wUGFja2FnZUxpc3RlbmluZyIpOworICAgICAgICBtQ29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIodGhpcyk7CisgICAgICAgIG1SZWNlaXZlclJlZ2lzdGVyZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25SZWNlaXZlOiAiICsgaW50ZW50KTsKKyAgICAgICAgVXJpIGRhdGEgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICBTdHJpbmcgcGtnTmFtZSA9IGRhdGEuZ2V0RW5jb2RlZFNjaGVtZVNwZWNpZmljUGFydCgpOworICAgICAgICBpZiAoIU9iamVjdHMuZXF1YWwocGtnTmFtZSwgbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0b3BQYWNrYWdlTGlzdGVuaW5nKCk7CisgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgIC8vIFRyeWluZyB0byBiaW5kIGFnYWluIHdpbGwgY2hlY2sgdGhlIHN0YXRlIG9mIHRoZSBwYWNrYWdlIGJlZm9yZSBib3RoZXJpbmcgdG8gYmluZC4KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiVHJ5aW5nIHRvIHJlYmluZCIpOworICAgICAgICAgICAgc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDb21wb25lbnRBdmFpbGFibGUoUGFja2FnZU1hbmFnZXIgcG0pIHsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU2VydmljZUluZm8gc2kgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0U2VydmljZUluZm8obUludGVudC5nZXRDb21wb25lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgMCwgbVVzZXIuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgIGlmIChERUJVRyAmJiBzaSA9PSBudWxsKSBMb2cuZChUQUcsICJDYW4ndCBmaW5kIGNvbXBvbmVudCAiICsgbUludGVudC5nZXRDb21wb25lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gc2kgIT0gbnVsbDsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW4uCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBpc1BhY2thZ2VBdmFpbGFibGUoUGFja2FnZU1hbmFnZXIgcG0pIHsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gbUludGVudC5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcG0uZ2V0UGFja2FnZUluZm9Bc1VzZXIocGFja2FnZU5hbWUsIDAsIG1Vc2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiUGFja2FnZSBub3QgYXZhaWxhYmxlOiAiICsgcGFja2FnZU5hbWUsIGUpOworICAgICAgICAgICAgZWxzZSBMb2cuZChUQUcsICJQYWNrYWdlIG5vdCBhdmFpbGFibGU6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBxdWV1ZU1lc3NhZ2UoaW50IG1lc3NhZ2UpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtUXVldWVkTWVzc2FnZXMpIHsKKyAgICAgICAgICAgIG1RdWV1ZWRNZXNzYWdlcy5hZGQobWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRRU1NlcnZpY2UoSVFTU2VydmljZSBzZXJ2aWNlKSB7CisgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLnNldFFTU2VydmljZShzZXJ2aWNlKSkgeworICAgICAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVGlsZUFkZGVkKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uVGlsZUFkZGVkIik7CisgICAgICAgIGlmIChtV3JhcHBlciA9PSBudWxsIHx8ICFtV3JhcHBlci5vblRpbGVBZGRlZCgpKSB7CisgICAgICAgICAgICBxdWV1ZU1lc3NhZ2UoTVNHX09OX0FEREVEKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblRpbGVSZW1vdmVkKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uVGlsZVJlbW92ZWQiKTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLm9uVGlsZVJlbW92ZWQoKSkgeworICAgICAgICAgICAgcXVldWVNZXNzYWdlKE1TR19PTl9SRU1PVkVEKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0YXJ0TGlzdGVuaW5nKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICAgICAgbUxpc3RlbmluZyA9IHRydWU7CisgICAgICAgIGlmIChtV3JhcHBlciAhPSBudWxsICYmICFtV3JhcHBlci5vblN0YXJ0TGlzdGVuaW5nKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25TdG9wTGlzdGVuaW5nIik7CisgICAgICAgIG1MaXN0ZW5pbmcgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1XcmFwcGVyICE9IG51bGwgJiYgIW1XcmFwcGVyLm9uU3RvcExpc3RlbmluZygpKSB7CisgICAgICAgICAgICBoYW5kbGVEZWF0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DbGljayhJQmluZGVyIGlCaW5kZXIpIHsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJvbkNsaWNrICIgKyBpQmluZGVyKTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLm9uQ2xpY2soaUJpbmRlcikpIHsKKyAgICAgICAgICAgIG1DbGlja0JpbmRlciA9IGlCaW5kZXI7CisgICAgICAgICAgICBxdWV1ZU1lc3NhZ2UoTVNHX09OX0NMSUNLKTsKKyAgICAgICAgICAgIGhhbmRsZURlYXRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblVubG9ja0NvbXBsZXRlKCkgeworICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIm9uVW5sb2NrQ29tcGxldGUiKTsKKyAgICAgICAgaWYgKG1XcmFwcGVyID09IG51bGwgfHwgIW1XcmFwcGVyLm9uVW5sb2NrQ29tcGxldGUoKSkgeworICAgICAgICAgICAgcXVldWVNZXNzYWdlKE1TR19PTl9VTkxPQ0tfQ09NUExFVEUpOworICAgICAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBJQmluZGVyIGFzQmluZGVyKCkgeworICAgICAgICByZXR1cm4gbVdyYXBwZXIgIT0gbnVsbCA/IG1XcmFwcGVyLmFzQmluZGVyKCkgOiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGJpbmRlckRpZWQoKSB7CisgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiYmluZGVyRGVhdGgiKTsKKyAgICAgICAgaGFuZGxlRGVhdGgoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VNYW5hZ2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY3N2EzMAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlU2VydmljZU1hbmFnZXIuamF2YQpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWw7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLklRU1RpbGVTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGVTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC5hbm5vdGF0aW9uLlZpc2libGVGb3JUZXN0aW5nOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKKy8qKgorICogTWFuYWdlcyB0aGUgcHJpb3JpdHkgd2hpY2ggbGV0cyB7QGxpbmsgVGlsZVNlcnZpY2VzfSBtYWtlIGRlY2lzaW9ucyBhYm91dCB3aGljaCB0aWxlcworICogdG8gYmluZC4gIEFsc28gaG9sZHMgb24gdG8gYW5kIG1hbmFnZXMgdGhlIHtAbGluayBUaWxlTGlmZWN5Y2xlTWFuYWdlcn0sIGluZm9ybWluZyBpdAorICogb2Ygd2hlbiBpdCBpcyBhbGxvd2VkIHRvIGJpbmQgYmFzZWQgb24gZGVjaXNpb25zIGZyb21lIHRoZSB7QGxpbmsgVGlsZVNlcnZpY2VzfS4KKyAqLworcHVibGljIGNsYXNzIFRpbGVTZXJ2aWNlTWFuYWdlciB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1JTl9CSU5EX1RJTUUgPSA1MDAwOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgVU5CSU5EX0RFTEFZID0gMzAwMDA7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSB0cnVlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUaWxlU2VydmljZU1hbmFnZXIiOworCisgICAgQFZpc2libGVGb3JUZXN0aW5nCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGU19GSUxFID0gIkN1c3RvbVRpbGVNb2RlcyI7CisKKyAgICBwcml2YXRlIGZpbmFsIFRpbGVTZXJ2aWNlcyBtU2VydmljZXM7CisgICAgcHJpdmF0ZSBmaW5hbCBUaWxlTGlmZWN5Y2xlTWFuYWdlciBtU3RhdGVNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUJpbmRSZXF1ZXN0ZWQ7CisgICAgcHJpdmF0ZSBib29sZWFuIG1CaW5kQWxsb3dlZDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUJvdW5kOworICAgIHByaXZhdGUgaW50IG1Qcmlvcml0eTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUp1c3RCb3VuZDsKKyAgICBwcml2YXRlIGxvbmcgbUxhc3RVcGRhdGU7CisgICAgcHJpdmF0ZSBpbnQgbVR5cGU7CisKKyAgICBUaWxlU2VydmljZU1hbmFnZXIoVGlsZVNlcnZpY2VzIHRpbGVTZXJ2aWNlcywgSGFuZGxlciBoYW5kbGVyLCBDb21wb25lbnROYW1lIGNvbXBvbmVudCkgeworICAgICAgICB0aGlzKHRpbGVTZXJ2aWNlcywgaGFuZGxlciwgbmV3IFRpbGVMaWZlY3ljbGVNYW5hZ2VyKGhhbmRsZXIsCisgICAgICAgICAgICAgICAgdGlsZVNlcnZpY2VzLmdldENvbnRleHQoKSwgbmV3IEludGVudCgpLnNldENvbXBvbmVudChjb21wb25lbnQpLAorICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSkpOworICAgIH0KKworICAgIEBWaXNpYmxlRm9yVGVzdGluZworICAgIFRpbGVTZXJ2aWNlTWFuYWdlcihUaWxlU2VydmljZXMgdGlsZVNlcnZpY2VzLCBIYW5kbGVyIGhhbmRsZXIsCisgICAgICAgICAgICBUaWxlTGlmZWN5Y2xlTWFuYWdlciB0aWxlTGlmZWN5Y2xlTWFuYWdlcikgeworICAgICAgICBtU2VydmljZXMgPSB0aWxlU2VydmljZXM7CisgICAgICAgIG1IYW5kbGVyID0gaGFuZGxlcjsKKyAgICAgICAgbVN0YXRlTWFuYWdlciA9IHRpbGVMaWZlY3ljbGVNYW5hZ2VyOworICAgICAgICBtVHlwZSA9IHRpbGVTZXJ2aWNlcy5nZXRDb250ZXh0KCkuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoUFJFRlNfRklMRSwgMCkKKyAgICAgICAgICAgICAgICAuZ2V0SW50KHRpbGVMaWZlY3ljbGVNYW5hZ2VyLmdldENvbXBvbmVudCgpLmZsYXR0ZW5Ub1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgVGlsZVNlcnZpY2UuVElMRV9NT0RFX1VOU0VUKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5zZXRRU1NlcnZpY2UodGlsZVNlcnZpY2VzKTsKKyAgICAgICAgaWYgKG1UeXBlID09IFRpbGVTZXJ2aWNlLlRJTEVfTU9ERV9VTlNFVCkgeworICAgICAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgICAgIG1TdGF0ZU1hbmFnZXIub25UaWxlQWRkZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIG1UeXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IHR5cGUpIHsKKyAgICAgICAgbVNlcnZpY2VzLmdldENvbnRleHQoKS5nZXRTaGFyZWRQcmVmZXJlbmNlcyhQUkVGU19GSUxFLCAwKS5lZGl0KCkKKyAgICAgICAgICAgICAgICAucHV0SW50KG1TdGF0ZU1hbmFnZXIuZ2V0Q29tcG9uZW50KCkuZmxhdHRlblRvU3RyaW5nKCksIHR5cGUpLmNvbW1pdCgpOworICAgICAgICBtVHlwZSA9IHR5cGU7CisgICAgICAgIG1TZXJ2aWNlcy5yZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSVFTVGlsZVNlcnZpY2UgZ2V0VGlsZVNlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiBtU3RhdGVNYW5hZ2VyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEJpbmRSZXF1ZXN0ZWQoYm9vbGVhbiBiaW5kUmVxdWVzdGVkKSB7CisgICAgICAgIGlmIChtQmluZFJlcXVlc3RlZCA9PSBiaW5kUmVxdWVzdGVkKSByZXR1cm47CisgICAgICAgIG1CaW5kUmVxdWVzdGVkID0gYmluZFJlcXVlc3RlZDsKKyAgICAgICAgaWYgKG1CaW5kQWxsb3dlZCAmJiBtQmluZFJlcXVlc3RlZCAmJiAhbUJvdW5kKSB7CisgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVVuYmluZCk7CisgICAgICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVNlcnZpY2VzLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChtQm91bmQgJiYgIW1CaW5kUmVxdWVzdGVkKSB7CisgICAgICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChtVW5iaW5kLCBVTkJJTkRfREVMQVkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TGFzdFVwZGF0ZShsb25nIGxhc3RVcGRhdGUpIHsKKyAgICAgICAgbUxhc3RVcGRhdGUgPSBsYXN0VXBkYXRlOworICAgICAgICBpZiAobUJvdW5kICYmIG1UeXBlID09IFRpbGVTZXJ2aWNlLlRJTEVfTU9ERV9BQ1RJVkUpIHsKKyAgICAgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgICAgICBzZXRCaW5kUmVxdWVzdGVkKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICBtU2VydmljZXMucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgaGFuZGxlRGVzdHJveSgpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5oYW5kbGVEZXN0cm95KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QmluZEFsbG93ZWQoYm9vbGVhbiBhbGxvd2VkKSB7CisgICAgICAgIGlmIChtQmluZEFsbG93ZWQgPT0gYWxsb3dlZCkgcmV0dXJuOworICAgICAgICBtQmluZEFsbG93ZWQgPSBhbGxvd2VkOworICAgICAgICBpZiAoIW1CaW5kQWxsb3dlZCAmJiBtQm91bmQpIHsKKyAgICAgICAgICAgIHVuYmluZFNlcnZpY2UoKTsKKyAgICAgICAgfSBlbHNlIGlmIChtQmluZEFsbG93ZWQgJiYgbUJpbmRSZXF1ZXN0ZWQgJiYgIW1Cb3VuZCkgeworICAgICAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBiaW5kU2VydmljZSgpIHsKKyAgICAgICAgaWYgKG1Cb3VuZCkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiU2VydmljZSBhbHJlYWR5IGJvdW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUJvdW5kID0gdHJ1ZTsKKyAgICAgICAgbUp1c3RCb3VuZCA9IHRydWU7CisgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG1KdXN0Qm91bmRPdmVyLCBNSU5fQklORF9USU1FKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5zZXRCaW5kU2VydmljZSh0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdW5iaW5kU2VydmljZSgpIHsKKyAgICAgICAgaWYgKCFtQm91bmQpIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlNlcnZpY2Ugbm90IGJvdW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUJvdW5kID0gZmFsc2U7CisgICAgICAgIG1KdXN0Qm91bmQgPSBmYWxzZTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5zZXRCaW5kU2VydmljZShmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2FsY3VsYXRlQmluZFByaW9yaXR5KGxvbmcgY3VycmVudFRpbWUpIHsKKyAgICAgICAgaWYgKG1TdGF0ZU1hbmFnZXIuaGFzUGVuZGluZ0NsaWNrKCkpIHsKKyAgICAgICAgICAgIC8vIFBlbmRpbmcgY2xpY2sgaXMgdGhlIG1vc3QgaW1wb3J0YW50IHRoaW5nLCBuZWVkIHRvIHB1dCB0aGlzIHNlcnZpY2UgYXQgdGhlIHRvcCBvZgorICAgICAgICAgICAgLy8gdGhlIGxpc3QgdG8gYmUgYm91bmQuCisgICAgICAgICAgICBtUHJpb3JpdHkgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKyAgICAgICAgfSBlbHNlIGlmIChtSnVzdEJvdW5kKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBqdXN0IGJvdW5kLCBsZXRzIG5vdCB0aHJhc2ggb24gYmluZGluZy91bmJpbmRpbmcgdG9vIG11Y2gsIHRoaXMgaXMgc2Vjb25kIG1vc3QKKyAgICAgICAgICAgIC8vIGltcG9ydGFudC4KKyAgICAgICAgICAgIG1Qcmlvcml0eSA9IEludGVnZXIuTUFYX1ZBTFVFIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmICghbUJpbmRSZXF1ZXN0ZWQpIHsKKyAgICAgICAgICAgIC8vIERvbid0IGNhcmUgYWJvdXQgYmluZGluZyByaWdodCBub3csIHB1dCB1cyBsYXN0LgorICAgICAgICAgICAgbVByaW9yaXR5ID0gSW50ZWdlci5NSU5fVkFMVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBPcmRlciBiYXNlZCBvbiB3aGV0aGVyIHRoaXMgd2FzIGp1c3QgdXBkYXRlZC4KKyAgICAgICAgICAgIGxvbmcgdGltZVNpbmNlVXBkYXRlID0gY3VycmVudFRpbWUgLSBtTGFzdFVwZGF0ZTsKKyAgICAgICAgICAgIC8vIEZpdCBjb21wYXJlIGludG8gaW50ZWdlciBzcGFjZSBmb3Igc2ltcGxpY2l0eS4gTWFrZSBzdXJlIHRvIGxlYXZlIE1BWF9WQUxVRSBhbmQKKyAgICAgICAgICAgIC8vIE1BWF9WQUxVRSAtIDEgZm9yIHRoZSBtb3JlIGltcG9ydGFudCBzdGF0ZXMgYWJvdmUuCisgICAgICAgICAgICBpZiAodGltZVNpbmNlVXBkYXRlID4gSW50ZWdlci5NQVhfVkFMVUUgLSAyKSB7CisgICAgICAgICAgICAgICAgbVByaW9yaXR5ID0gSW50ZWdlci5NQVhfVkFMVUUgLSAyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtUHJpb3JpdHkgPSAoaW50KSB0aW1lU2luY2VVcGRhdGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEJpbmRQcmlvcml0eSgpIHsKKyAgICAgICAgcmV0dXJuIG1Qcmlvcml0eTsKKyAgICB9CisKKyAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG1VbmJpbmQgPSBuZXcgUnVubmFibGUoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBpZiAobUJvdW5kICYmICFtQmluZFJlcXVlc3RlZCkgeworICAgICAgICAgICAgICAgIHVuYmluZFNlcnZpY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBAVmlzaWJsZUZvclRlc3RpbmcKKyAgICBmaW5hbCBSdW5uYWJsZSBtSnVzdEJvdW5kT3ZlciA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIG1KdXN0Qm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIG1TZXJ2aWNlcy5yZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICAgICAgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkODc3NgotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlU2VydmljZXMuamF2YQpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWw7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5JY29uOworaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGVTZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5TdGF0dXNCYXJJY29uOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5RU1RpbGVIb3N0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5TdGF0dXNCYXJJY29uQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LktleWd1YXJkTW9uaXRvcjsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOworCisvKioKKyAqIFJ1bnMgdGhlIGRheS10by1kYXkgb3BlcmF0aW9ucyBvZiB3aGljaCB0aWxlcyBzaG91bGQgYmUgYm91bmQgYW5kIHdoZW4uCisgKi8KK3B1YmxpYyBjbGFzcyBUaWxlU2VydmljZXMgZXh0ZW5kcyBJUVNTZXJ2aWNlLlN0dWIgeworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9NQVhfQk9VTkQgPSAzOworICAgIHN0YXRpYyBmaW5hbCBpbnQgUkVEVUNFRF9NQVhfQk9VTkQgPSAxOworCisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxDdXN0b21UaWxlLCBUaWxlU2VydmljZU1hbmFnZXI+IG1TZXJ2aWNlcyA9IG5ldyBBcnJheU1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxDb21wb25lbnROYW1lLCBDdXN0b21UaWxlPiBtVGlsZXMgPSBuZXcgQXJyYXlNYXA8PigpOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1NYWluSGFuZGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIFFTVGlsZUhvc3QgbUhvc3Q7CisKKyAgICBwcml2YXRlIGludCBtTWF4Qm91bmQgPSBERUZBVUxUX01BWF9CT1VORDsKKworICAgIHB1YmxpYyBUaWxlU2VydmljZXMoUVNUaWxlSG9zdCBob3N0LCBMb29wZXIgbG9vcGVyKSB7CisgICAgICAgIG1Ib3N0ID0gaG9zdDsKKyAgICAgICAgbUNvbnRleHQgPSBtSG9zdC5nZXRDb250ZXh0KCk7CisgICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobVJlcXVlc3RMaXN0ZW5pbmdSZWNlaXZlciwKKyAgICAgICAgICAgICAgICBuZXcgSW50ZW50RmlsdGVyKFRpbGVTZXJ2aWNlLkFDVElPTl9SRVFVRVNUX0xJU1RFTklORykpOworICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKGxvb3Blcik7CisgICAgICAgIG1NYWluSGFuZGxlciA9IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOworICAgIH0KKworICAgIHB1YmxpYyBDb250ZXh0IGdldENvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBtQ29udGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgVGlsZVNlcnZpY2VNYW5hZ2VyIGdldFRpbGVXcmFwcGVyKEN1c3RvbVRpbGUgdGlsZSkgeworICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudCA9IHRpbGUuZ2V0Q29tcG9uZW50KCk7CisgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlciBzZXJ2aWNlID0gb25DcmVhdGVUaWxlU2VydmljZShjb21wb25lbnQpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgbVNlcnZpY2VzLnB1dCh0aWxlLCBzZXJ2aWNlKTsKKyAgICAgICAgICAgIG1UaWxlcy5wdXQoY29tcG9uZW50LCB0aWxlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgVGlsZVNlcnZpY2VNYW5hZ2VyIG9uQ3JlYXRlVGlsZVNlcnZpY2UoQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBUaWxlU2VydmljZU1hbmFnZXIodGhpcywgbUhhbmRsZXIsIGNvbXBvbmVudCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZnJlZVNlcnZpY2UoQ3VzdG9tVGlsZSB0aWxlLCBUaWxlU2VydmljZU1hbmFnZXIgc2VydmljZSkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgc2VydmljZS5zZXRCaW5kQWxsb3dlZChmYWxzZSk7CisgICAgICAgICAgICBtU2VydmljZXMucmVtb3ZlKHRpbGUpOworICAgICAgICAgICAgbVRpbGVzLnJlbW92ZSh0aWxlLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzbG90ID0gdGlsZS5nZXRDb21wb25lbnQoKS5nZXRDbGFzc05hbWUoKTsKKyAgICAgICAgICAgIG1NYWluSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIG1Ib3N0LmdldEljb25Db250cm9sbGVyKCkucmVtb3ZlSWNvbihzbG90KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE1lbW9yeVByZXNzdXJlKGJvb2xlYW4gbWVtb3J5UHJlc3N1cmUpIHsKKyAgICAgICAgbU1heEJvdW5kID0gbWVtb3J5UHJlc3N1cmUgPyBSRURVQ0VEX01BWF9CT1VORCA6IERFRkFVTFRfTUFYX0JPVU5EOworICAgICAgICByZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKSB7CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxUaWxlU2VydmljZU1hbmFnZXI+IHNlcnZpY2VzOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PD4obVNlcnZpY2VzLnZhbHVlcygpKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgTiA9IHNlcnZpY2VzLnNpemUoKTsKKyAgICAgICAgaWYgKE4gPiBtTWF4Qm91bmQpIHsKKyAgICAgICAgICAgIGxvbmcgY3VycmVudFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKKyAgICAgICAgICAgIC8vIFByZWNhbGN1bGF0ZSB0aGUgcHJpb3JpdHkgb2Ygc2VydmljZXMgZm9yIGJpbmRpbmcuCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgICAgIHNlcnZpY2VzLmdldChpKS5jYWxjdWxhdGVCaW5kUHJpb3JpdHkoY3VycmVudFRpbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gU29ydCB0aGVtIHNvIHdlIGNhbiBiaW5kIHRoZSBtb3N0IGltcG9ydGFudCBmaXJzdC4KKyAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoc2VydmljZXMsIFNFUlZJQ0VfU09SVCk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGk7CisgICAgICAgIC8vIEFsbG93IG1NYXhCb3VuZCBpdGVtcyB0byBiaW5kLgorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbU1heEJvdW5kICYmIGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIHNlcnZpY2VzLmdldChpKS5zZXRCaW5kQWxsb3dlZCh0cnVlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgcmVzdCBhcmVuJ3QgYWxsb3dlZCB0byBiaW5kIGZvciBub3cuCisgICAgICAgIHdoaWxlIChpIDwgTikgeworICAgICAgICAgICAgc2VydmljZXMuZ2V0KGkpLnNldEJpbmRBbGxvd2VkKGZhbHNlKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB2ZXJpZnlDYWxsZXIoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgaWYgKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkgIT0gdWlkKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDb21wb25lbnQgb3V0c2lkZSBjYWxsZXIncyB1aWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXF1ZXN0TGlzdGVuaW5nKENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2VzKSB7CisgICAgICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgICAgICBpZiAoY3VzdG9tVGlsZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgTG9nLmQoIlRpbGVTZXJ2aWNlcyIsICJDb3VsZG4ndCBmaW5kIHRpbGUgZm9yICIgKyBjb21wb25lbnQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlciBzZXJ2aWNlID0gbVNlcnZpY2VzLmdldChjdXN0b21UaWxlKTsKKyAgICAgICAgICAgIGlmIChzZXJ2aWNlLmdldFR5cGUoKSAhPSBUaWxlU2VydmljZS5USUxFX01PREVfQUNUSVZFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VydmljZS5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLmdldFRpbGVTZXJ2aWNlKCkub25TdGFydExpc3RlbmluZygpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFRpbGVNb2RlKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgbW9kZSkgeworICAgICAgICB2ZXJpZnlDYWxsZXIoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudCk7CisgICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2VzLmdldChjdXN0b21UaWxlKS5zZXRUeXBlKG1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXBkYXRlUXNUaWxlKFRpbGUgdGlsZSkgeworICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSB0aWxlLmdldENvbXBvbmVudE5hbWUoKTsKKyAgICAgICAgdmVyaWZ5Q2FsbGVyKGNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQoY29tcG9uZW50TmFtZSk7CisgICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2VzKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2VzLmdldChjdXN0b21UaWxlKS5zZXRMYXN0VXBkYXRlKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN1c3RvbVRpbGUudXBkYXRlU3RhdGUodGlsZSk7CisgICAgICAgICAgICBjdXN0b21UaWxlLnJlZnJlc2hTdGF0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TaG93RGlhbG9nKFRpbGUgdGlsZSkgeworICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSB0aWxlLmdldENvbXBvbmVudE5hbWUoKTsKKyAgICAgICAgdmVyaWZ5Q2FsbGVyKGNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQoY29tcG9uZW50TmFtZSk7CisgICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1c3RvbVRpbGUub25EaWFsb2dTaG93bigpOworICAgICAgICAgICAgbUhvc3QuY29sbGFwc2VQYW5lbHMoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRBY3Rpdml0eShUaWxlIHRpbGUpIHsKKyAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gdGlsZS5nZXRDb21wb25lbnROYW1lKCk7CisgICAgICAgIHZlcmlmeUNhbGxlcihjb21wb25lbnROYW1lLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudE5hbWUpOworICAgICAgICBpZiAoY3VzdG9tVGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBtSG9zdC5jb2xsYXBzZVBhbmVscygpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXBkYXRlU3RhdHVzSWNvbihUaWxlIHRpbGUsIEljb24gaWNvbiwgU3RyaW5nIGNvbnRlbnREZXNjcmlwdGlvbikgeworICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSB0aWxlLmdldENvbXBvbmVudE5hbWUoKTsKKyAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gY29tcG9uZW50TmFtZS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICB2ZXJpZnlDYWxsZXIocGFja2FnZU5hbWUpOworICAgICAgICBDdXN0b21UaWxlIGN1c3RvbVRpbGUgPSBnZXRUaWxlRm9yQ29tcG9uZW50KGNvbXBvbmVudE5hbWUpOworICAgICAgICBpZiAoY3VzdG9tVGlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlckhhbmRsZSA9IGdldENhbGxpbmdVc2VySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgUGFja2FnZUluZm8gaW5mbyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZUluZm9Bc1VzZXIocGFja2FnZU5hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VySGFuZGxlLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RhdHVzQmFySWNvbiBzdGF0dXNJY29uID0gaWNvbiAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgU3RhdHVzQmFySWNvbih1c2VySGFuZGxlLCBwYWNrYWdlTmFtZSwgaWNvbiwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnREZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7CisgICAgICAgICAgICAgICAgICAgIG1NYWluSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c0Jhckljb25Db250cm9sbGVyIGljb25Db250cm9sbGVyID0gbUhvc3QuZ2V0SWNvbkNvbnRyb2xsZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ29udHJvbGxlci5zZXRJY29uKGNvbXBvbmVudE5hbWUuZ2V0Q2xhc3NOYW1lKCksIHN0YXR1c0ljb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25Db250cm9sbGVyLnNldEV4dGVybmFsSWNvbihjb21wb25lbnROYW1lLmdldENsYXNzTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHN0YXJ0VW5sb2NrQW5kUnVuKFRpbGUgdGlsZSkgeworICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSB0aWxlLmdldENvbXBvbmVudE5hbWUoKTsKKyAgICAgICAgdmVyaWZ5Q2FsbGVyKGNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQoY29tcG9uZW50TmFtZSk7CisgICAgICAgIGlmIChjdXN0b21UaWxlICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1c3RvbVRpbGUuc3RhcnRVbmxvY2tBbmRSdW4oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzTG9ja2VkKCkgeworICAgICAgICBLZXlndWFyZE1vbml0b3Iga2V5Z3VhcmRNb25pdG9yID0gbUhvc3QuZ2V0S2V5Z3VhcmRNb25pdG9yKCk7CisgICAgICAgIHJldHVybiBrZXlndWFyZE1vbml0b3IuaXNTaG93aW5nKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNTZWN1cmUoKSB7CisgICAgICAgIEtleWd1YXJkTW9uaXRvciBrZXlndWFyZE1vbml0b3IgPSBtSG9zdC5nZXRLZXlndWFyZE1vbml0b3IoKTsKKyAgICAgICAgcmV0dXJuIGtleWd1YXJkTW9uaXRvci5pc1NlY3VyZSgpICYmIGtleWd1YXJkTW9uaXRvci5pc1Nob3dpbmcoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEN1c3RvbVRpbGUgZ2V0VGlsZUZvckNvbXBvbmVudChDb21wb25lbnROYW1lIGNvbXBvbmVudCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZXJ2aWNlcykgeworICAgICAgICAgICAgcmV0dXJuIG1UaWxlcy5nZXQoY29tcG9uZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbVJlcXVlc3RMaXN0ZW5pbmdSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgICAgIGlmIChUaWxlU2VydmljZS5BQ1RJT05fUkVRVUVTVF9MSVNURU5JTkcuZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXF1ZXN0TGlzdGVuaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgKENvbXBvbmVudE5hbWUpIGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoVGlsZVNlcnZpY2UuRVhUUkFfQ09NUE9ORU5UKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ29tcGFyYXRvcjxUaWxlU2VydmljZU1hbmFnZXI+IFNFUlZJQ0VfU09SVCA9CisgICAgICAgICAgICBuZXcgQ29tcGFyYXRvcjxUaWxlU2VydmljZU1hbmFnZXI+KCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKFRpbGVTZXJ2aWNlTWFuYWdlciBsZWZ0LCBUaWxlU2VydmljZU1hbmFnZXIgcmlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiAtSW50ZWdlci5jb21wYXJlKGxlZnQuZ2V0QmluZFByaW9yaXR5KCksIHJpZ2h0LmdldEJpbmRQcmlvcml0eSgpKTsKKyAgICAgICAgfQorICAgIH07Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQWlycGxhbmVNb2RlVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0FpcnBsYW5lTW9kZVRpbGUuamF2YQppbmRleCBmYzgwMmRkLi5jNjk2Zjg4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQWlycGxhbmVNb2RlVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9BaXJwbGFuZU1vZGVUaWxlLmphdmEKQEAgLTU4LDggKzU4LDYgQEAKICAgICBwdWJsaWMgdm9pZCBoYW5kbGVDbGljaygpIHsKICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhbVN0YXRlLnZhbHVlKTsKICAgICAgICAgc2V0RW5hYmxlZCghbVN0YXRlLnZhbHVlKTsKLSAgICAgICAgbUVuYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKLSAgICAgICAgbURpc2FibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQmF0dGVyeVRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9CYXR0ZXJ5VGlsZS5qYXZhCmluZGV4IDg0ZWFjNjUuLjYwMjM4ZmMzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQmF0dGVyeVRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQmF0dGVyeVRpbGUuamF2YQpAQCAtMTksNyArMTksMTQgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkNoZWNrYWJsZTsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOworaW1wb3J0IGNvbS5hbmRyb2lkLnNldHRpbmdzbGliLkJhdHRlcnlJbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkJhdHRlcnlNZXRlckRyYXdhYmxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlOwpAQCAtMzEsOCArMzgsMTEgQEAKIAogICAgIHByaXZhdGUgZmluYWwgQmF0dGVyeU1ldGVyRHJhd2FibGUgbURyYXdhYmxlOwogICAgIHByaXZhdGUgZmluYWwgQmF0dGVyeUNvbnRyb2xsZXIgbUJhdHRlcnlDb250cm9sbGVyOworICAgIHByaXZhdGUgZmluYWwgQmF0dGVyeURldGFpbCBtQmF0dGVyeURldGFpbCA9IG5ldyBCYXR0ZXJ5RGV0YWlsKCk7CiAKICAgICBwcml2YXRlIGludCBtTGV2ZWw7CisgICAgcHJpdmF0ZSBib29sZWFuIG1Qb3dlclNhdmU7CisgICAgcHJpdmF0ZSBib29sZWFuIG1DaGFyZ2luZzsKIAogICAgIHB1YmxpYyBCYXR0ZXJ5VGlsZShIb3N0IGhvc3QpIHsKICAgICAgICAgc3VwZXIoaG9zdCk7CkBAIC00OCw2ICs1OCwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBEZXRhaWxBZGFwdGVyIGdldERldGFpbEFkYXB0ZXIoKSB7CisgICAgICAgIHJldHVybiBtQmF0dGVyeURldGFpbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldE1ldHJpY3NDYXRlZ29yeSgpIHsKICAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfQkFUVEVSWV9USUxFOwogICAgIH0KQEAgLTY0LDggKzc5LDE2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RGV0YWlsTGlzdGVuaW5nKGJvb2xlYW4gbGlzdGVuaW5nKSB7CisgICAgICAgIHN1cGVyLnNldERldGFpbExpc3RlbmluZyhsaXN0ZW5pbmcpOworICAgICAgICBpZiAoIWxpc3RlbmluZykgeworICAgICAgICAgICAgbUJhdHRlcnlEZXRhaWwubUN1cnJlbnRWaWV3ID0gbnVsbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNsaWNrKCkgewotICAgICAgICBtSG9zdC5zdGFydEFjdGl2aXR5RGlzbWlzc2luZ0tleWd1YXJkKG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9QT1dFUl9VU0FHRV9TVU1NQVJZKSk7CisgICAgICAgIHNob3dEZXRhaWwodHJ1ZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC04NSwxMSArMTA4LDk4IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25CYXR0ZXJ5TGV2ZWxDaGFuZ2VkKGludCBsZXZlbCwgYm9vbGVhbiBwbHVnZ2VkSW4sIGJvb2xlYW4gY2hhcmdpbmcpIHsKICAgICAgICAgbUxldmVsID0gbGV2ZWw7CisgICAgICAgIG1DaGFyZ2luZyA9IGNoYXJnaW5nOwogICAgICAgICByZWZyZXNoU3RhdGUoKEludGVnZXIpIGxldmVsKTsKKyAgICAgICAgaWYgKG1CYXR0ZXJ5RGV0YWlsLm1DdXJyZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBtQmF0dGVyeURldGFpbC5iaW5kVmlldygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Qb3dlclNhdmVDaGFuZ2VkKCkgeworICAgIHB1YmxpYyB2b2lkIG9uUG93ZXJTYXZlQ2hhbmdlZChib29sZWFuIGlzUG93ZXJTYXZlKSB7CisgICAgICAgIG1Qb3dlclNhdmUgPSBpc1Bvd2VyU2F2ZTsKKyAgICAgICAgaWYgKG1CYXR0ZXJ5RGV0YWlsLm1DdXJyZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICBtQmF0dGVyeURldGFpbC5iaW5kVmlldygpOworICAgICAgICB9CisgICAgfQogCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBCYXR0ZXJ5RGV0YWlsIGltcGxlbWVudHMgRGV0YWlsQWRhcHRlciwgVmlldy5PbkNsaWNrTGlzdGVuZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIEJhdHRlcnlNZXRlckRyYXdhYmxlIG1EcmF3YWJsZSA9IG5ldyBCYXR0ZXJ5TWV0ZXJEcmF3YWJsZShtSG9zdC5nZXRDb250ZXh0KCksCisgICAgICAgICAgICAgICAgbmV3IEhhbmRsZXIoKSwgbUhvc3QuZ2V0Q29udGV4dCgpLmdldENvbG9yKFIuY29sb3IuYmF0dGVyeW1ldGVyX2ZyYW1lX2NvbG9yKSk7CisgICAgICAgIHByaXZhdGUgVmlldyBtQ3VycmVudFZpZXc7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgZ2V0VGl0bGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmJhdHRlcnlfcGFuZWxfdGl0bGUsIG1MZXZlbCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEJvb2xlYW4gZ2V0VG9nZ2xlU3RhdGUoKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgVmlldyBjcmVhdGVEZXRhaWxWaWV3KENvbnRleHQgY29udGV4dCwgVmlldyBjb252ZXJ0VmlldywgVmlld0dyb3VwIHBhcmVudCkgeworICAgICAgICAgICAgaWYgKGNvbnZlcnRWaWV3ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VmlldyA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpLmluZmxhdGUoUi5sYXlvdXQuYmF0dGVyeV9kZXRhaWwsIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1DdXJyZW50VmlldyA9IGNvbnZlcnRWaWV3OworICAgICAgICAgICAgYmluZFZpZXcoKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VmlldzsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCBiaW5kVmlldygpIHsKKyAgICAgICAgICAgIG1EcmF3YWJsZS5vbkJhdHRlcnlMZXZlbENoYW5nZWQoMTAwLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgbURyYXdhYmxlLm9uUG93ZXJTYXZlQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgICgoSW1hZ2VWaWV3KSBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5pY29uKSkuc2V0SW1hZ2VEcmF3YWJsZShtRHJhd2FibGUpOworICAgICAgICAgICAgQ2hlY2thYmxlIGNoZWNrYm94ID0gKENoZWNrYWJsZSkgbUN1cnJlbnRWaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudG9nZ2xlKTsKKyAgICAgICAgICAgIGNoZWNrYm94LnNldENoZWNrZWQobVBvd2VyU2F2ZSk7CisgICAgICAgICAgICBpZiAobUNoYXJnaW5nKSB7CisgICAgICAgICAgICAgICAgQmF0dGVyeUluZm8uZ2V0QmF0dGVyeUluZm8obUNvbnRleHQsIG5ldyBCYXR0ZXJ5SW5mby5DYWxsYmFjaygpIHsKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQmF0dGVyeUluZm9Mb2FkZWQoQmF0dGVyeUluZm8gaW5mbykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50VmlldyAhPSBudWxsICYmIG1DaGFyZ2luZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVGV4dFZpZXcpIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnRpdGxlKSkuc2V0VGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubUNoYXJnZUxhYmVsU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICgoVGV4dFZpZXcpIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLnN1bW1hcnkpKS5zZXRUZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuYmF0dGVyeV9kZXRhaWxfY2hhcmdpbmdfc3VtbWFyeSk7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRWaWV3LnNldENsaWNrYWJsZShmYWxzZSk7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRWaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuaWNvbikuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRWaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudG9nZ2xlKS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKChUZXh0VmlldykgbUN1cnJlbnRWaWV3LmZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQudGl0bGUpKS5zZXRUZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuYmF0dGVyeV9kZXRhaWxfc3dpdGNoX3RpdGxlKTsKKyAgICAgICAgICAgICAgICAoKFRleHRWaWV3KSBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5zdW1tYXJ5KSkuc2V0VGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmJhdHRlcnlfZGV0YWlsX3N3aXRjaF9zdW1tYXJ5KTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudFZpZXcuc2V0Q2xpY2thYmxlKHRydWUpOworICAgICAgICAgICAgICAgIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLmljb24pLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC50b2dnbGUpLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudFZpZXcuc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICBtQmF0dGVyeUNvbnRyb2xsZXIuc2V0UG93ZXJTYXZlTW9kZSghbVBvd2VyU2F2ZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEludGVudCBnZXRTZXR0aW5nc0ludGVudCgpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fUE9XRVJfVVNBR0VfU1VNTUFSWSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0VG9nZ2xlU3RhdGUoYm9vbGVhbiBzdGF0ZSkgeworICAgICAgICAgICAgLy8gTm8gdG9nZ2xlIHN0YXRlLgorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBpbnQgZ2V0TWV0cmljc0NhdGVnb3J5KCkgeworICAgICAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfQkFUVEVSWV9ERVRBSUw7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQmx1ZXRvb3RoVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0JsdWV0b290aFRpbGUuamF2YQppbmRleCBjZmMwOWEwLi4zNzUwMjkwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQmx1ZXRvb3RoVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9CbHVldG9vdGhUaWxlLmphdmEKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgICAgICBwcml2YXRlIFFTRGV0YWlsSXRlbXMgbUl0ZW1zOwogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldFRpdGxlKCkgewotICAgICAgICAgICAgcmV0dXJuIFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX2JsdWV0b290aF9sYWJlbDsKKyAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRUaXRsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfYmx1ZXRvb3RoX2xhYmVsKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0Nhc3RUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ2FzdFRpbGUuamF2YQppbmRleCBhOGUxMzljLi5kZTRjMjFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ2FzdFRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ2FzdFRpbGUuamF2YQpAQCAtMTYwLDggKzE2MCw4IEBACiAgICAgICAgIHByaXZhdGUgUVNEZXRhaWxJdGVtcyBtSXRlbXM7CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0VGl0bGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfY2FzdF90aXRsZTsKKyAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRUaXRsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfY2FzdF90aXRsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9DZWxsdWxhclRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9DZWxsdWxhclRpbGUuamF2YQppbmRleCA2YzdiMzM3Li5jMWRjZmVhIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ2VsbHVsYXJUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0NlbGx1bGFyVGlsZS5qYXZhCkBAIC0yMjMsOCArMjIzLDggQEAKICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIENlbGx1bGFyRGV0YWlsQWRhcHRlciBpbXBsZW1lbnRzIERldGFpbEFkYXB0ZXIgewogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgaW50IGdldFRpdGxlKCkgewotICAgICAgICAgICAgcmV0dXJuIFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX2NlbGx1bGFyX2RldGFpbF90aXRsZTsKKyAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRUaXRsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfY2VsbHVsYXJfZGV0YWlsX3RpdGxlKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0NvbG9ySW52ZXJzaW9uVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0NvbG9ySW52ZXJzaW9uVGlsZS5qYXZhCmluZGV4IGY3M2VlMzUuLjIzYTE1YjkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Db2xvckludmVyc2lvblRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvQ29sb3JJbnZlcnNpb25UaWxlLmphdmEKQEAgLTcxLDggKzcxLDYgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVDbGljaygpIHsKICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhbVN0YXRlLnZhbHVlKTsKICAgICAgICAgbVNldHRpbmcuc2V0VmFsdWUobVN0YXRlLnZhbHVlID8gMCA6IDEpOwotICAgICAgICBtRW5hYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwotICAgICAgICBtRGlzYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9EbmRUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvRG5kVGlsZS5qYXZhCmluZGV4IGQ5NmY3MzUuLjRkOWIyNjYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9EbmRUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0RuZFRpbGUuamF2YQpAQCAtMTA3LDggKzEwNyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9MT05HKS5zaG93KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbURpc2FibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7Ci0gICAgICAgIG1EaXNhYmxlVG90YWxTaWxlbmNlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICFtU3RhdGUudmFsdWUpOwogICAgICAgICBpZiAobVN0YXRlLnZhbHVlKSB7CiAgICAgICAgICAgICBtQ29udHJvbGxlci5zZXRaZW4oR2xvYmFsLlpFTl9NT0RFX09GRiwgbnVsbCwgVEFHKTsKQEAgLTIyMCw4ICsyMTgsOCBAQAogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRG5kRGV0YWlsQWRhcHRlciBpbXBsZW1lbnRzIERldGFpbEFkYXB0ZXIsIE9uQXR0YWNoU3RhdGVDaGFuZ2VMaXN0ZW5lciB7CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0VGl0bGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfZG5kX2xhYmVsOworICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRpdGxlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc19kbmRfbGFiZWwpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvRmxhc2hsaWdodFRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9GbGFzaGxpZ2h0VGlsZS5qYXZhCmluZGV4IDEyYzEyOTguLjM5ZDlkYTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9GbGFzaGxpZ2h0VGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9GbGFzaGxpZ2h0VGlsZS5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIH0KICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhbVN0YXRlLnZhbHVlKTsKICAgICAgICAgYm9vbGVhbiBuZXdTdGF0ZSA9ICFtU3RhdGUudmFsdWU7Ci0gICAgICAgIHJlZnJlc2hTdGF0ZShuZXdTdGF0ZSA/IFVzZXJCb29sZWFuLlVTRVJfVFJVRSA6IFVzZXJCb29sZWFuLlVTRVJfRkFMU0UpOworICAgICAgICByZWZyZXNoU3RhdGUobmV3U3RhdGUpOwogICAgICAgICBtRmxhc2hsaWdodENvbnRyb2xsZXIuc2V0Rmxhc2hsaWdodChuZXdTdGF0ZSk7CiAgICAgfQogCkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgIC8vIFRPRE86IEZsYXNobGlnaHQgYXZhaWxhYmxlIGhhbmRsaW5nLi4uCiAvLyAgICAgICAgc3RhdGUudmlzaWJsZSA9IG1GbGFzaGxpZ2h0Q29udHJvbGxlci5pc0F2YWlsYWJsZSgpOwogICAgICAgICBzdGF0ZS5sYWJlbCA9IG1Ib3N0LmdldENvbnRleHQoKS5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfZmxhc2hsaWdodF9sYWJlbCk7Ci0gICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBVc2VyQm9vbGVhbikgewotICAgICAgICAgICAgYm9vbGVhbiB2YWx1ZSA9ICgoVXNlckJvb2xlYW4pIGFyZykudmFsdWU7CisgICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBCb29sZWFuKSB7CisgICAgICAgICAgICBib29sZWFuIHZhbHVlID0gKEJvb2xlYW4pIGFyZzsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBzdGF0ZS52YWx1ZSkgewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTgzLDcgKzgzLDYgQEAKICAgICAgICAgICAgIHN0YXRlLnZhbHVlID0gbUZsYXNobGlnaHRDb250cm9sbGVyLmlzRW5hYmxlZCgpOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIEFuaW1hdGlvbkljb24gaWNvbiA9IHN0YXRlLnZhbHVlID8gbUVuYWJsZSA6IG1EaXNhYmxlOwotICAgICAgICBpY29uLnNldEFsbG93QW5pbWF0aW9uKGFyZyBpbnN0YW5jZW9mIFVzZXJCb29sZWFuICYmICgoVXNlckJvb2xlYW4pIGFyZykudXNlckluaXRpYXRlZCk7CiAgICAgICAgIHN0YXRlLmljb24gPSBpY29uOwogICAgICAgICBpbnQgb25Pck9mZklkID0gc3RhdGUudmFsdWUKICAgICAgICAgICAgICAgICA/IFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3NfZmxhc2hsaWdodF9vbgpAQCAtMTA3LDEyICsxMDYsMTIgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uRmxhc2hsaWdodENoYW5nZWQoYm9vbGVhbiBlbmFibGVkKSB7Ci0gICAgICAgIHJlZnJlc2hTdGF0ZShlbmFibGVkID8gVXNlckJvb2xlYW4uQkFDS0dST1VORF9UUlVFIDogVXNlckJvb2xlYW4uQkFDS0dST1VORF9GQUxTRSk7CisgICAgICAgIHJlZnJlc2hTdGF0ZShlbmFibGVkKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkZsYXNobGlnaHRFcnJvcigpIHsKLSAgICAgICAgcmVmcmVzaFN0YXRlKFVzZXJCb29sZWFuLkJBQ0tHUk9VTkRfRkFMU0UpOworICAgICAgICByZWZyZXNoU3RhdGUoZmFsc2UpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0hvdHNwb3RUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvSG90c3BvdFRpbGUuamF2YQppbmRleCAyNTBkNTY3Li41NWFhMzJiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvSG90c3BvdFRpbGUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvSG90c3BvdFRpbGUuamF2YQpAQCAtNTksOCArNTksNiBAQAogICAgICAgICBmaW5hbCBib29sZWFuIGlzRW5hYmxlZCA9IChCb29sZWFuKSBtU3RhdGUudmFsdWU7CiAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LCBnZXRNZXRyaWNzQ2F0ZWdvcnkoKSwgIWlzRW5hYmxlZCk7CiAgICAgICAgIG1Db250cm9sbGVyLnNldEhvdHNwb3RFbmFibGVkKCFpc0VuYWJsZWQpOwotICAgICAgICBtRW5hYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwotICAgICAgICBtRGlzYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Mb2NhdGlvblRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Mb2NhdGlvblRpbGUuamF2YQppbmRleCAwODU0MGY2Li5lNzlhYWJmIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvTG9jYXRpb25UaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL0xvY2F0aW9uVGlsZS5qYXZhCkBAIC02Nyw4ICs2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgIG1Ib3N0Lm9wZW5QYW5lbHMoKTsKICAgICAgICAgICAgICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIGdldE1ldHJpY3NDYXRlZ29yeSgpLCAhd2FzRW5hYmxlZCk7CiAgICAgICAgICAgICAgICAgICAgIG1Db250cm9sbGVyLnNldExvY2F0aW9uRW5hYmxlZCghd2FzRW5hYmxlZCk7Ci0gICAgICAgICAgICAgICAgICAgIG1FbmFibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1EaXNhYmxlLnNldEFsbG93QW5pbWF0aW9uKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzYsOCArNzQsNiBAQAogICAgICAgICBmaW5hbCBib29sZWFuIHdhc0VuYWJsZWQgPSAoQm9vbGVhbikgbVN0YXRlLnZhbHVlOwogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICF3YXNFbmFibGVkKTsKICAgICAgICAgbUNvbnRyb2xsZXIuc2V0TG9jYXRpb25FbmFibGVkKCF3YXNFbmFibGVkKTsKLSAgICAgICAgbUVuYWJsZS5zZXRBbGxvd0FuaW1hdGlvbih0cnVlKTsKLSAgICAgICAgbURpc2FibGUuc2V0QWxsb3dBbmltYXRpb24odHJ1ZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvUm90YXRpb25Mb2NrVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1JvdGF0aW9uTG9ja1RpbGUuamF2YQppbmRleCBkODVjZjYwLi43YmNlNTRiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvUm90YXRpb25Mb2NrVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Sb3RhdGlvbkxvY2tUaWxlLmphdmEKQEAgLTYzLDE1ICs2MywxNCBAQAogICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwgZ2V0TWV0cmljc0NhdGVnb3J5KCksICFtU3RhdGUudmFsdWUpOwogICAgICAgICBmaW5hbCBib29sZWFuIG5ld1N0YXRlID0gIW1TdGF0ZS52YWx1ZTsKICAgICAgICAgbUNvbnRyb2xsZXIuc2V0Um90YXRpb25Mb2NrZWQobmV3U3RhdGUpOwotICAgICAgICByZWZyZXNoU3RhdGUobmV3U3RhdGUgPyBVc2VyQm9vbGVhbi5VU0VSX1RSVUUgOiBVc2VyQm9vbGVhbi5VU0VSX0ZBTFNFKTsKKyAgICAgICAgcmVmcmVzaFN0YXRlKG5ld1N0YXRlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBoYW5kbGVVcGRhdGVTdGF0ZShCb29sZWFuU3RhdGUgc3RhdGUsIE9iamVjdCBhcmcpIHsKICAgICAgICAgaWYgKG1Db250cm9sbGVyID09IG51bGwpIHJldHVybjsKLSAgICAgICAgZmluYWwgYm9vbGVhbiByb3RhdGlvbkxvY2tlZCA9IGFyZyAhPSBudWxsID8gKChVc2VyQm9vbGVhbikgYXJnKS52YWx1ZQorICAgICAgICBmaW5hbCBib29sZWFuIHJvdGF0aW9uTG9ja2VkID0gYXJnICE9IG51bGwgPyAoQm9vbGVhbikgYXJnCiAgICAgICAgICAgICAgICAgOiBtQ29udHJvbGxlci5pc1JvdGF0aW9uTG9ja2VkKCk7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlckluaXRpYXRlZCA9IGFyZyAhPSBudWxsID8gKChVc2VyQm9vbGVhbikgYXJnKS51c2VySW5pdGlhdGVkIDogZmFsc2U7CiAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBhY2Nlc3NpYmlsaXR5IHJvdGF0aW9uIGxvY2sgYW5kIHdoYXRub3QuCiAvLyAgICAgICAgc3RhdGUudmlzaWJsZSA9IG1Db250cm9sbGVyLmlzUm90YXRpb25Mb2NrQWZmb3JkYW5jZVZpc2libGUoKTsKICAgICAgICAgaWYgKHN0YXRlLnZhbHVlID09IHJvdGF0aW9uTG9ja2VkICYmIHN0YXRlLmNvbnRlbnREZXNjcmlwdGlvbiAhPSBudWxsKSB7CkBAIC04MCwxOCArNzksMTUgQEAKICAgICAgICAgfQogICAgICAgICBzdGF0ZS52YWx1ZSA9IHJvdGF0aW9uTG9ja2VkOwogICAgICAgICBmaW5hbCBib29sZWFuIHBvcnRyYWl0ID0gaXNDdXJyZW50T3JpZW50YXRpb25Mb2NrUG9ydHJhaXQoKTsKLSAgICAgICAgZmluYWwgQW5pbWF0aW9uSWNvbiBpY29uOwogICAgICAgICBpZiAocm90YXRpb25Mb2NrZWQpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBsYWJlbCA9IHBvcnRyYWl0ID8gUi5zdHJpbmcucXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX3BvcnRyYWl0X2xhYmVsCiAgICAgICAgICAgICAgICAgICAgIDogUi5zdHJpbmcucXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fbG9ja2VkX2xhbmRzY2FwZV9sYWJlbDsKICAgICAgICAgICAgIHN0YXRlLmxhYmVsID0gbUNvbnRleHQuZ2V0U3RyaW5nKGxhYmVsKTsKLSAgICAgICAgICAgIGljb24gPSBwb3J0cmFpdCA/IG1BdXRvVG9Qb3J0cmFpdCA6IG1BdXRvVG9MYW5kc2NhcGU7CisgICAgICAgICAgICBzdGF0ZS5pY29uID0gcG9ydHJhaXQgPyBtQXV0b1RvUG9ydHJhaXQgOiBtQXV0b1RvTGFuZHNjYXBlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdGUubGFiZWwgPSBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3Nfcm90YXRpb25fdW5sb2NrZWRfbGFiZWwpOwotICAgICAgICAgICAgaWNvbiA9IHBvcnRyYWl0ID8gbVBvcnRyYWl0VG9BdXRvIDogbUxhbmRzY2FwZVRvQXV0bzsKKyAgICAgICAgICAgIHN0YXRlLmljb24gPSBwb3J0cmFpdCA/IG1Qb3J0cmFpdFRvQXV0byA6IG1MYW5kc2NhcGVUb0F1dG87CiAgICAgICAgIH0KLSAgICAgICAgaWNvbi5zZXRBbGxvd0FuaW1hdGlvbih1c2VySW5pdGlhdGVkKTsKLSAgICAgICAgc3RhdGUuaWNvbiA9IGljb247CiAgICAgICAgIHN0YXRlLmNvbnRlbnREZXNjcmlwdGlvbiA9IGdldEFjY2Vzc2liaWxpdHlTdHJpbmcocm90YXRpb25Mb2NrZWQsCiAgICAgICAgICAgICAgICAgUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9yb3RhdGlvbl9sb2NrX29uX3BvcnRyYWl0LAogICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcm90YXRpb25fbG9ja19vbl9sYW5kc2NhcGUsCkBAIC0xNDUsOCArMTQxLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIFJvdGF0aW9uTG9ja0NvbnRyb2xsZXJDYWxsYmFjayBtQ2FsbGJhY2sgPSBuZXcgUm90YXRpb25Mb2NrQ29udHJvbGxlckNhbGxiYWNrKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25Sb3RhdGlvbkxvY2tTdGF0ZUNoYW5nZWQoYm9vbGVhbiByb3RhdGlvbkxvY2tlZCwgYm9vbGVhbiBhZmZvcmRhbmNlVmlzaWJsZSkgewotICAgICAgICAgICAgcmVmcmVzaFN0YXRlKHJvdGF0aW9uTG9ja2VkID8gVXNlckJvb2xlYW4uQkFDS0dST1VORF9UUlVFCi0gICAgICAgICAgICAgICAgICAgIDogVXNlckJvb2xlYW4uQkFDS0dST1VORF9GQUxTRSk7CisgICAgICAgICAgICByZWZyZXNoU3RhdGUocm90YXRpb25Mb2NrZWQpOwogICAgICAgICB9CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9XaWZpVGlsZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dpZmlUaWxlLmphdmEKaW5kZXggNDhiNDA5Ni4uOTVlYTNmOCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dpZmlUaWxlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dpZmlUaWxlLmphdmEKQEAgLTI0MCw4ICsyNDAsOCBAQAogICAgICAgICBwcml2YXRlIEFjY2Vzc1BvaW50W10gbUFjY2Vzc1BvaW50czsKIAogICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGludCBnZXRUaXRsZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBSLnN0cmluZy5xdWlja19zZXR0aW5nc193aWZpX2xhYmVsOworICAgICAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIGdldFRpdGxlKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5xdWlja19zZXR0aW5nc193aWZpX2xhYmVsKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyBJbnRlbnQgZ2V0U2V0dGluZ3NJbnRlbnQoKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvV29ya01vZGVUaWxlLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvdGlsZXMvV29ya01vZGVUaWxlLmphdmEKaW5kZXggMDc5MTVmOC4uMjU1ZjI5ZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL3RpbGVzL1dvcmtNb2RlVGlsZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy90aWxlcy9Xb3JrTW9kZVRpbGUuamF2YQpAQCAtOTMsMTIgKzkzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFF1aWV0TW9kZVN0YXRlKGJvb2xlYW4gYmFja2dyb3VuZFJlZnJlc2gpIHsKLSAgICAgICAgaWYgKGJhY2tncm91bmRSZWZyZXNoKSB7Ci0gICAgICAgICAgICByZWZyZXNoU3RhdGUoaXNXb3JrTW9kZUVuYWJsZWQoKSA/IFVzZXJCb29sZWFuLkJBQ0tHUk9VTkRfVFJVRQotICAgICAgICAgICAgICAgICAgICA6IFVzZXJCb29sZWFuLkJBQ0tHUk9VTkRfRkFMU0UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVmcmVzaFN0YXRlKGlzV29ya01vZGVFbmFibGVkKCkgPyBVc2VyQm9vbGVhbi5VU0VSX1RSVUUgOiBVc2VyQm9vbGVhbi5VU0VSX0ZBTFNFKTsKLSAgICAgICAgfQorICAgICAgICByZWZyZXNoU3RhdGUoaXNXb3JrTW9kZUVuYWJsZWQoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMDgsMjggKzEwMywyMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VySW5pdGlhbGl6ZWQ7Ci0gICAgICAgIGlmIChhcmcgaW5zdGFuY2VvZiBVc2VyQm9vbGVhbikgewotICAgICAgICAgICAgc3RhdGUudmFsdWUgPSAoKFVzZXJCb29sZWFuKSBhcmcpLnZhbHVlOwotICAgICAgICAgICAgdXNlckluaXRpYWxpemVkID0gKChVc2VyQm9vbGVhbikgYXJnKS51c2VySW5pdGlhdGVkOworICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgQm9vbGVhbikgeworICAgICAgICAgICAgc3RhdGUudmFsdWUgPSAoQm9vbGVhbikgYXJnOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBpc1dvcmtNb2RlRW5hYmxlZCgpOwotICAgICAgICAgICAgdXNlckluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBBbmltYXRpb25JY29uIGljb247CiAgICAgICAgIHN0YXRlLmxhYmVsID0gbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLnF1aWNrX3NldHRpbmdzX3dvcmtfbW9kZV9sYWJlbCk7CiAgICAgICAgIGlmIChzdGF0ZS52YWx1ZSkgewotICAgICAgICAgICAgaWNvbiA9IG1FbmFibGU7CisgICAgICAgICAgICBzdGF0ZS5pY29uID0gbUVuYWJsZTsKICAgICAgICAgICAgIHN0YXRlLmNvbnRlbnREZXNjcmlwdGlvbiA9ICBtQ29udGV4dC5nZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29uKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGljb24gPSBtRGlzYWJsZTsKKyAgICAgICAgICAgIHN0YXRlLmljb24gPSBtRGlzYWJsZTsKICAgICAgICAgICAgIHN0YXRlLmNvbnRlbnREZXNjcmlwdGlvbiA9ICBtQ29udGV4dC5nZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfcXVpY2tfc2V0dGluZ3Nfd29ya19tb2RlX29mZik7CiAgICAgICAgIH0KLSAgICAgICAgaWNvbi5zZXRBbGxvd0FuaW1hdGlvbih1c2VySW5pdGlhbGl6ZWQpOwotICAgICAgICBzdGF0ZS5pY29uID0gaWNvbjsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL0NvbnN0YW50cy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvQ29uc3RhbnRzLmphdmEKaW5kZXggYzA4ZmIwNS4uMDcwYjM5NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvQ29uc3RhbnRzLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvQ29uc3RhbnRzLmphdmEKQEAgLTI3LDYgKzI3LDcgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRGlzbWlzc1NvdXJjZUtleWJvYXJkID0gMDsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRGlzbWlzc1NvdXJjZVN3aXBlR2VzdHVyZSA9IDE7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERpc21pc3NTb3VyY2VIZWFkZXJCdXR0b24gPSAyOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEaXNtaXNzU291cmNlSGlzdG9yeVN3aXBlR2VzdHVyZSA9IDM7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzLmphdmEKaW5kZXggYjgxYzIzYS4uMmJhZWZkNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50cy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHMuamF2YQpAQCAtMTcsNiArMTcsNyBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzOwogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5TZXJ2aWNlQ29ubmVjdGlvbjsKQEAgLTIwNSw3ICsyMDYsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNob3dSZWNlbnRzKGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUFsdFRhYiwgVmlldyBzdGF0dXNCYXJWaWV3KSB7CiAgICAgICAgIC8vIEVuc3VyZSB0aGUgZGV2aWNlIGhhcyBiZWVuIHByb3Zpc2lvbmVkIGJlZm9yZSBhbGxvd2luZyB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoCiAgICAgICAgIC8vIHJlY2VudHMKLSAgICAgICAgaWYgKCFpc0RldmljZVByb3Zpc2lvbmVkKCkpIHsKKyAgICAgICAgaWYgKCFpc1VzZXJTZXR1cCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjQyLDcgKzI0Myw3IEBACiAgICAgcHVibGljIHZvaWQgaGlkZVJlY2VudHMoYm9vbGVhbiB0cmlnZ2VyZWRGcm9tQWx0VGFiLCBib29sZWFuIHRyaWdnZXJlZEZyb21Ib21lS2V5KSB7CiAgICAgICAgIC8vIEVuc3VyZSB0aGUgZGV2aWNlIGhhcyBiZWVuIHByb3Zpc2lvbmVkIGJlZm9yZSBhbGxvd2luZyB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoCiAgICAgICAgIC8vIHJlY2VudHMKLSAgICAgICAgaWYgKCFpc0RldmljZVByb3Zpc2lvbmVkKCkpIHsKKyAgICAgICAgaWYgKCFpc1VzZXJTZXR1cCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjc3LDcgKzI3OCw3IEBACiAgICAgcHVibGljIHZvaWQgdG9nZ2xlUmVjZW50cyhEaXNwbGF5IGRpc3BsYXksIGludCBsYXlvdXREaXJlY3Rpb24sIFZpZXcgc3RhdHVzQmFyVmlldykgewogICAgICAgICAvLyBFbnN1cmUgdGhlIGRldmljZSBoYXMgYmVlbiBwcm92aXNpb25lZCBiZWZvcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aAogICAgICAgICAvLyByZWNlbnRzCi0gICAgICAgIGlmICghaXNEZXZpY2VQcm92aXNpb25lZCgpKSB7CisgICAgICAgIGlmICghaXNVc2VyU2V0dXAoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMxMiw3ICszMTMsNyBAQAogICAgIHB1YmxpYyB2b2lkIHByZWxvYWRSZWNlbnRzKCkgewogICAgICAgICAvLyBFbnN1cmUgdGhlIGRldmljZSBoYXMgYmVlbiBwcm92aXNpb25lZCBiZWZvcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aAogICAgICAgICAvLyByZWNlbnRzCi0gICAgICAgIGlmICghaXNEZXZpY2VQcm92aXNpb25lZCgpKSB7CisgICAgICAgIGlmICghaXNVc2VyU2V0dXAoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MCw3ICszNDEsNyBAQAogICAgIHB1YmxpYyB2b2lkIGNhbmNlbFByZWxvYWRpbmdSZWNlbnRzKCkgewogICAgICAgICAvLyBFbnN1cmUgdGhlIGRldmljZSBoYXMgYmVlbiBwcm92aXNpb25lZCBiZWZvcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aAogICAgICAgICAvLyByZWNlbnRzCi0gICAgICAgIGlmICghaXNEZXZpY2VQcm92aXNpb25lZCgpKSB7CisgICAgICAgIGlmICghaXNVc2VyU2V0dXAoKSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM2NSwxMSArMzY2LDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZG9ja1RvcFRhc2soYm9vbGVhbiBkcmFnZ2luZ0luUmVjZW50cywgaW50IHN0YWNrQ3JlYXRlTW9kZSwgUmVjdCBpbml0aWFsQm91bmRzKSB7Ci0gICAgICAgIG1JbXBsLmRvY2tUb3BUYXNrKGRyYWdnaW5nSW5SZWNlbnRzLCBzdGFja0NyZWF0ZU1vZGUsaW5pdGlhbEJvdW5kcyk7Ci0gICAgICAgIGlmIChkcmFnZ2luZ0luUmVjZW50cykgewotICAgICAgICAgICAgbURyYWdnaW5nSW5SZWNlbnRzQ3VycmVudFVzZXIgPSBzU3lzdGVtU2VydmljZXNQcm94eS5nZXRDdXJyZW50VXNlcigpOworICAgIHB1YmxpYyBib29sZWFuIGRvY2tUb3BUYXNrKGJvb2xlYW4gZHJhZ2dpbmdJblJlY2VudHMsIGludCBzdGFja0NyZWF0ZU1vZGUsIFJlY3QgaW5pdGlhbEJvdW5kcykgeworICAgICAgICAvLyBFbnN1cmUgdGhlIGRldmljZSBoYXMgYmVlbiBwcm92aXNpb25lZCBiZWZvcmUgYWxsb3dpbmcgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aAorICAgICAgICAvLyByZWNlbnRzCisgICAgICAgIGlmICghaXNVc2VyU2V0dXAoKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKG1JbXBsLmRvY2tUb3BUYXNrKGRyYWdnaW5nSW5SZWNlbnRzLCBzdGFja0NyZWF0ZU1vZGUsaW5pdGlhbEJvdW5kcykpIHsKKyAgICAgICAgICAgIGlmIChkcmFnZ2luZ0luUmVjZW50cykgeworICAgICAgICAgICAgICAgIG1EcmFnZ2luZ0luUmVjZW50c0N1cnJlbnRVc2VyID0gc1N5c3RlbVNlcnZpY2VzUHJveHkuZ2V0Q3VycmVudFVzZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTQyMiw3ICs0MzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHNob3dOZXh0QWZmaWxpYXRlZFRhc2soKSB7CiAgICAgICAgIC8vIEVuc3VyZSB0aGUgZGV2aWNlIGhhcyBiZWVuIHByb3Zpc2lvbmVkIGJlZm9yZSBhbGxvd2luZyB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoCiAgICAgICAgIC8vIHJlY2VudHMKLSAgICAgICAgaWYgKCFpc0RldmljZVByb3Zpc2lvbmVkKCkpIHsKKyAgICAgICAgaWYgKCFpc1VzZXJTZXR1cCgpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNDMzLDcgKzQ0Myw3IEBACiAgICAgcHVibGljIHZvaWQgc2hvd1ByZXZBZmZpbGlhdGVkVGFzaygpIHsKICAgICAgICAgLy8gRW5zdXJlIHRoZSBkZXZpY2UgaGFzIGJlZW4gcHJvdmlzaW9uZWQgYmVmb3JlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGludGVyYWN0IHdpdGgKICAgICAgICAgLy8gcmVjZW50cwotICAgICAgICBpZiAoIWlzRGV2aWNlUHJvdmlzaW9uZWQoKSkgeworICAgICAgICBpZiAoIWlzVXNlclNldHVwKCkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01NTksMTEgKzU2OSwxMiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gd2hldGhlciB0aGlzIGRldmljZSBpcyBwcm92aXNpb25lZC4KKyAgICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhpcyBkZXZpY2UgaXMgcHJvdmlzaW9uZWQgYW5kIHRoZSBjdXJyZW50IHVzZXIgaXMgc2V0IHVwLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc0RldmljZVByb3Zpc2lvbmVkKCkgewotICAgICAgICByZXR1cm4gU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuREVWSUNFX1BST1ZJU0lPTkVELCAwKSAhPSAwOworICAgIHByaXZhdGUgYm9vbGVhbiBpc1VzZXJTZXR1cCgpIHsKKyAgICAgICAgQ29udGVudFJlc29sdmVyIGNyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CisgICAgICAgIHJldHVybiAoU2V0dGluZ3MuR2xvYmFsLmdldEludChjciwgU2V0dGluZ3MuR2xvYmFsLkRFVklDRV9QUk9WSVNJT05FRCwgMCkgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAoU2V0dGluZ3MuU2VjdXJlLmdldEludChjciwgU2V0dGluZ3MuU2VjdXJlLlVTRVJfU0VUVVBfQ09NUExFVEUsIDApICE9IDApOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0FjdGl2aXR5LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHkuamF2YQppbmRleCAzODRiODZmLi5lNGQ4MDY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHkuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHkuamF2YQpAQCAtNDMsMjAgKzQzLDIyIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuQXBwV2lkZ2V0UHJvdmlkZXJDaGFuZ2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuQ2FuY2VsRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRGVidWdGbGFnc0NoYW5nZWRFdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5EaXNtaXNzUmVjZW50c1RvSG9tZUFuaW1hdGlvblN0YXJ0ZWQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uQ29tcGxldGVkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRW50ZXJSZWNlbnRzV2luZG93TGFzdEFuaW1hdGlvbkZyYW1lRXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRXhpdFJlY2VudHNXaW5kb3dGaXJzdEFuaW1hdGlvbkZyYW1lRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuSGlkZUhpc3RvcnlFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5IaWRlUmVjZW50c0V2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5Lkl0ZXJhdGVSZWNlbnRzRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuTGF1bmNoVGFza0ZhaWxlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkxhdW5jaFRhc2tTdWNjZWVkZWRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5TaG93SGlzdG9yeUV2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LlRhc2tTdGFja1VwZGF0ZWRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5Ub2dnbGVSZWNlbnRzRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuY29tcG9uZW50LlJlY2VudHNWaXNpYmlsaXR5Q2hhbmdlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmNvbXBvbmVudC5TY3JlZW5QaW5uaW5nUmVxdWVzdEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLkFsbFRhc2tWaWV3c0Rpc21pc3NlZEV2ZW50OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLkRpc21pc3NUYXNrVmlld0V2ZW50OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlJlc2l6ZVRhc2tFdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5EZWxldGVUYXNrRGF0YUV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlNob3dBcHBsaWNhdGlvbkluZm9FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5TdGFja1ZpZXdTY3JvbGxlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlVwZGF0ZUZyZWVmb3JtVGFza1ZpZXdWaXNpYmlsaXR5RXZlbnQ7CkBAIC02Niw3ICs2OCw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuZm9jdXMuRm9jdXNQcmV2aW91c1Rhc2tWaWV3RXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5oaXN0b3J5LlJlY2VudHNIaXN0b3J5VmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuRG96ZVRyaWdnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5TeXN0ZW1TZXJ2aWNlc1Byb3h5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuUmVjZW50c1BhY2thZ2VNb25pdG9yOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuUmVjZW50c1Rhc2tMb2FkUGxhbjsKQEAgLTc1LDcgKzc2LDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2tTdGFjazsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzLlJlY2VudHNWaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuU3lzdGVtQmFyU2NyaW1WaWV3czsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzLlZpZXdBbmltYXRpb247CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkJhc2VTdGF0dXNCYXI7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCkBAIC04Nyw2ICs4OCw5IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJSZWNlbnRzQWN0aXZpdHkiOwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKIAorICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBLRVlfU0FWRURfU1RBVEVfSElTVE9SWV9WSVNJQkxFID0KKyAgICAgICAgICAgICJzYXZlZF9pbnN0YW5jZV9zdGF0ZV9oaXN0b3J5X3Zpc2libGUiOworCiAgICAgcHVibGljIGZpbmFsIHN0YXRpYyBpbnQgRVZFTlRfQlVTX1BSSU9SSVRZID0gUmVjZW50cy5FVkVOVF9CVVNfUFJJT1JJVFkgKyAxOwogCiAgICAgcHJpdmF0ZSBSZWNlbnRzUGFja2FnZU1vbml0b3IgbVBhY2thZ2VNb25pdG9yOwpAQCAtOTcsMTQgKzEwMSw5IEBACiAgICAgLy8gVG9wIGxldmVsIHZpZXdzCiAgICAgcHJpdmF0ZSBSZWNlbnRzVmlldyBtUmVjZW50c1ZpZXc7CiAgICAgcHJpdmF0ZSBTeXN0ZW1CYXJTY3JpbVZpZXdzIG1TY3JpbVZpZXdzOwotICAgIHByaXZhdGUgVmlld1N0dWIgbUVtcHR5Vmlld1N0dWI7Ci0gICAgcHJpdmF0ZSBWaWV3IG1FbXB0eVZpZXc7CiAgICAgcHJpdmF0ZSBWaWV3U3R1YiBtSGlzdG9yeVZpZXdTdHViOwogICAgIHByaXZhdGUgUmVjZW50c0hpc3RvcnlWaWV3IG1IaXN0b3J5VmlldzsKIAotICAgIC8vIFJlc2l6ZSB0YXNrIGRlYnVnCi0gICAgcHJpdmF0ZSBSZWNlbnRzUmVzaXplVGFza0RpYWxvZyBtUmVzaXplVGFza0RlYnVnRGlhbG9nOwotCiAgICAgLy8gU2VhcmNoIEFwcFdpZGdldAogICAgIHByaXZhdGUgQXBwV2lkZ2V0UHJvdmlkZXJJbmZvIG1TZWFyY2hXaWRnZXRJbmZvOwogICAgIHByaXZhdGUgUmVjZW50c0FwcFdpZGdldEhvc3QgbUFwcFdpZGdldEhvc3Q7CkBAIC0xOTcsNyArMTk2LDYgQEAKICAgICAgICAgbG9hZGVyLmxvYWRUYXNrcyh0aGlzLCBwbGFuLCBsb2FkT3B0cyk7CiAKICAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gcGxhbi5nZXRUYXNrU3RhY2soKTsKLSAgICAgICAgbGF1bmNoU3RhdGUubGF1bmNoZWRXaXRoTm9SZWNlbnRUYXNrcyA9ICFwbGFuLmhhc1Rhc2tzKCk7CiAgICAgICAgIG1SZWNlbnRzVmlldy5zZXRUYXNrU3RhY2soc3RhY2spOwogCiAgICAgICAgIC8vIE1hcmsgdGhlIHRhc2sgdGhhdCBpcyB0aGUgbGF1bmNoIHRhcmdldApAQCAtMjE1LDMwICsyMTMsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgdG9wIGxldmVsIHZpZXcncyB2aXNpYmlsaXRpZXMKLSAgICAgICAgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkV2l0aE5vUmVjZW50VGFza3MpIHsKLSAgICAgICAgICAgIGlmIChtRW1wdHlWaWV3ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRW1wdHlWaWV3ID0gbUVtcHR5Vmlld1N0dWIuaW5mbGF0ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbUVtcHR5Vmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyKSB7Ci0gICAgICAgICAgICAgICAgbVJlY2VudHNWaWV3LnNldFNlYXJjaEJhclZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtRW1wdHlWaWV3ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtRW1wdHlWaWV3LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIpIHsKLSAgICAgICAgICAgICAgICBpZiAobVJlY2VudHNWaWV3Lmhhc1ZhbGlkU2VhcmNoQmFyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVJlY2VudHNWaWV3LnNldFNlYXJjaEJhclZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZWZyZXNoU2VhcmNoV2lkZ2V0VmlldygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIC8vIEFuaW1hdGUgdGhlIFN5c3RlbVVJIHNjcmltcyBpbnRvIHZpZXcKLSAgICAgICAgbVNjcmltVmlld3MucHJlcGFyZUVudGVyUmVjZW50c0FuaW1hdGlvbigpOworICAgICAgICBib29sZWFuIGhhc1N0YXR1c0JhclNjcmltID0gc3RhY2suZ2V0U3RhY2tUYXNrQ291bnQoKSA+IDA7CisgICAgICAgIGJvb2xlYW4gYW5pbWF0ZVN0YXR1c0JhclNjcmltID0gbGF1bmNoU3RhdGUubGF1bmNoZWRGcm9tSG9tZTsKKyAgICAgICAgYm9vbGVhbiBoYXNOYXZCYXJTY3JpbSA9IChzdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpID4gMCkgJiYgIWNvbmZpZy5oYXNUcmFuc3Bvc2VkTmF2QmFyOworICAgICAgICBib29sZWFuIGFuaW1hdGVOYXZCYXJTY3JpbSA9IHRydWU7CisgICAgICAgIG1TY3JpbVZpZXdzLnByZXBhcmVFbnRlclJlY2VudHNBbmltYXRpb24oaGFzU3RhdHVzQmFyU2NyaW0sIGFuaW1hdGVTdGF0dXNCYXJTY3JpbSwgaGFzTmF2QmFyU2NyaW0sCisgICAgICAgICAgICAgICAgYW5pbWF0ZU5hdkJhclNjcmltKTsKIAogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHdoZXRoZXIgd2UgbGF1bmNoZWQgZnJvbSB0aGUgbmF2IGJhciBidXR0b24gb3IgdmlhIGFsdC10YWIKICAgICAgICAgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkV2l0aEFsdFRhYikgewpAQCAtMjkyLDcgKzI3Myw3IEBACiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZm9jdXNlZCBUYXNrLCBsYXVuY2ggdGhhdCBUYXNrIG5vdwogICAgICAgICAgICAgaWYgKG1SZWNlbnRzVmlldy5sYXVuY2hQcmV2aW91c1Rhc2soKSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBJZiBub25lIG9mIHRoZSBvdGhlciBjYXNlcyBhcHBseSwgdGhlbiBqdXN0IGdvIEhvbWUKLSAgICAgICAgICAgIGRpc21pc3NSZWNlbnRzVG9Ib21lKHRydWUpOworICAgICAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUodHJ1ZSAvKiBhbmltYXRlVGFza1ZpZXdzICovKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzA2LDcgKzI4Nyw3IEBACiAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgZm9jdXNlZCBUYXNrLCBsYXVuY2ggdGhhdCBUYXNrIG5vdwogICAgICAgICAgICAgaWYgKG1SZWNlbnRzVmlldy5sYXVuY2hGb2N1c2VkVGFzaygpKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIG90aGVyIGNhc2VzIGFwcGx5LCB0aGVuIGp1c3QgZ28gSG9tZQotICAgICAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUodHJ1ZSk7CisgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVUYXNrVmlld3MgKi8pOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE1LDIxICsyOTYsMTggQEAKICAgICAvKioKICAgICAgKiBEaXNtaXNzZXMgUmVjZW50cyBkaXJlY3RseSB0byBIb21lIHdpdGhvdXQgY2hlY2tpbmcgd2hldGhlciBpdCBpcyBjdXJyZW50bHkgdmlzaWJsZS4KICAgICAgKi8KLSAgICB2b2lkIGRpc21pc3NSZWNlbnRzVG9Ib21lKGJvb2xlYW4gYW5pbWF0ZWQpIHsKLSAgICAgICAgaWYgKGFuaW1hdGVkKSB7Ci0gICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBleGl0VHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcih0aGlzLAotICAgICAgICAgICAgICAgICAgICBudWxsLCBtRmluaXNoTGF1bmNoSG9tZVJ1bm5hYmxlLCBudWxsKTsKLSAgICAgICAgICAgIG1SZWNlbnRzVmlldy5zdGFydEV4aXRUb0hvbWVBbmltYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIG5ldyBWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RXhpdENvbnRleHQoZXhpdFRyaWdnZXIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1GaW5pc2hMYXVuY2hIb21lUnVubmFibGUucnVuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogRGlzbWlzc2VzIFJlY2VudHMgZGlyZWN0bHkgdG8gSG9tZSB3aXRob3V0IHRyYW5zaXRpb24gYW5pbWF0aW9uLiAqLwotICAgIHZvaWQgZGlzbWlzc1JlY2VudHNUb0hvbWVXaXRob3V0VHJhbnNpdGlvbkFuaW1hdGlvbigpIHsKLSAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgIG92ZXJyaWRlUGVuZGluZ1RyYW5zaXRpb24oMCwgMCk7CisgICAgdm9pZCBkaXNtaXNzUmVjZW50c1RvSG9tZShib29sZWFuIGFuaW1hdGVUYXNrVmlld3MpIHsKKyAgICAgICAgRGlzbWlzc1JlY2VudHNUb0hvbWVBbmltYXRpb25TdGFydGVkIGRpc21pc3NFdmVudCA9CisgICAgICAgICAgICAgICAgbmV3IERpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZChhbmltYXRlVGFza1ZpZXdzKTsKKyAgICAgICAgZGlzbWlzc0V2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhtRmluaXNoTGF1bmNoSG9tZVJ1bm5hYmxlKTsKKyAgICAgICAgZGlzbWlzc0V2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCkuc2VuZENsb3NlU3lzdGVtV2luZG93cygKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VTdGF0dXNCYXIuU1lTVEVNX0RJQUxPR19SRUFTT05fSE9NRV9LRVkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQoZGlzbWlzc0V2ZW50KTsKICAgICB9CiAKICAgICAvKiogRGlzbWlzc2VzIFJlY2VudHMgZGlyZWN0bHkgdG8gSG9tZSBpZiB3ZSBjdXJyZW50bHkgYXJlbid0IHRyYW5zaXRpb25pbmcuICovCkBAIC0zNjIsNyArMzQwLDcgQEAKICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnJlZ2lzdGVyKHRoaXMsIEVWRU5UX0JVU19QUklPUklUWSk7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgd2lkZ2V0IGhvc3QgKHRoZSBob3N0IGlkIGlzIHN0YXRpYyBhbmQgZG9lcyBub3QgY2hhbmdlKQotICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyKSB7CisgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU2VhcmNoQmFyKSB7CiAgICAgICAgICAgICBtQXBwV2lkZ2V0SG9zdCA9IG5ldyBSZWNlbnRzQXBwV2lkZ2V0SG9zdCh0aGlzLCBSZWNlbnRzQXBwV2lkZ2V0SG9zdC5IT1NUX0lEKTsKICAgICAgICAgfQogICAgICAgICBtUGFja2FnZU1vbml0b3IgPSBuZXcgUmVjZW50c1BhY2thZ2VNb25pdG9yKCk7CkBAIC0zNzQsNyArMzUyLDYgQEAKICAgICAgICAgbVJlY2VudHNWaWV3LnNldFN5c3RlbVVpVmlzaWJpbGl0eShWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9TVEFCTEUgfAogICAgICAgICAgICAgICAgIFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0ZVTExTQ1JFRU4gfAogICAgICAgICAgICAgICAgIFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX0hJREVfTkFWSUdBVElPTik7Ci0gICAgICAgIG1FbXB0eVZpZXdTdHViID0gKFZpZXdTdHViKSBmaW5kVmlld0J5SWQoUi5pZC5lbXB0eV92aWV3X3N0dWIpOwogICAgICAgICBtSGlzdG9yeVZpZXdTdHViID0gKFZpZXdTdHViKSBmaW5kVmlld0J5SWQoUi5pZC5oaXN0b3J5X3ZpZXdfc3R1Yik7CiAgICAgICAgIG1TY3JpbVZpZXdzID0gbmV3IFN5c3RlbUJhclNjcmltVmlld3ModGhpcyk7CiAgICAgICAgIGdldFdpbmRvdygpLmdldEF0dHJpYnV0ZXMoKS5wcml2YXRlRmxhZ3MgfD0KQEAgLTM4OCwxNCArMzY1LDE0IEBACiAgICAgICAgIG1GaW5pc2hMYXVuY2hIb21lUnVubmFibGUgPSBuZXcgRmluaXNoUmVjZW50c1J1bm5hYmxlKGhvbWVJbnRlbnQpOwogCiAgICAgICAgIC8vIEJpbmQgdGhlIHNlYXJjaCBhcHAgd2lkZ2V0IHdoZW4gd2UgZmlyc3Qgc3RhcnQgdXAKLSAgICAgICAgaWYgKCFSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRGlzYWJsZVNlYXJjaEJhcikgeworICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhcikgewogICAgICAgICAgICAgbVNlYXJjaFdpZGdldEluZm8gPSBzc3AuZ2V0T3JCaW5kU2VhcmNoQXBwV2lkZ2V0KHRoaXMsIG1BcHBXaWRnZXRIb3N0KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBicm9hZGNhc3QgcmVjZWl2ZXIgdG8gaGFuZGxlIG1lc3NhZ2VzIHdoZW4gdGhlIHNjcmVlbiBpcyB0dXJuZWQgb2ZmCiAgICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKCk7CiAgICAgICAgIGZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9TQ1JFRU5fT0ZGKTsKLSAgICAgICAgaWYgKCFSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRGlzYWJsZVNlYXJjaEJhcikgeworICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhcikgewogICAgICAgICAgICAgZmlsdGVyLmFkZEFjdGlvbihTZWFyY2hNYW5hZ2VyLklOVEVOVF9HTE9CQUxfU0VBUkNIX0FDVElWSVRZX0NIQU5HRUQpOwogICAgICAgICB9CiAgICAgICAgIHJlZ2lzdGVyUmVjZWl2ZXIobVN5c3RlbUJyb2FkY2FzdFJlY2VpdmVyLCBmaWx0ZXIpOwpAQCAtNDk1LDcgKzQ3Miw3IEBACiAgICAgICAgIG1QYWNrYWdlTW9uaXRvci51bnJlZ2lzdGVyKCk7CiAKICAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgZm9yIHdpZGdldCBwYWNrYWdlIGNoYW5nZXMgaWYgdGhlcmUgd2FzIG9uZSBib3VuZAotICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyKSB7CisgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU2VhcmNoQmFyKSB7CiAgICAgICAgICAgICBtQXBwV2lkZ2V0SG9zdC5zdG9wTGlzdGVuaW5nKCk7CiAgICAgICAgIH0KIApAQCAtNTE1LDYgKzQ5MiwyMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uU2F2ZUluc3RhbmNlU3RhdGUoQnVuZGxlIG91dFN0YXRlKSB7CisgICAgICAgIHN1cGVyLm9uU2F2ZUluc3RhbmNlU3RhdGUob3V0U3RhdGUpOworICAgICAgICBvdXRTdGF0ZS5wdXRCb29sZWFuKEtFWV9TQVZFRF9TVEFURV9ISVNUT1JZX1ZJU0lCTEUsCisgICAgICAgICAgICAgICAgKG1IaXN0b3J5VmlldyAhPSBudWxsKSAmJiBtSGlzdG9yeVZpZXcuaXNWaXNpYmxlKCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdG9yZUluc3RhbmNlU3RhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgeworICAgICAgICBzdXBlci5vblJlc3RvcmVJbnN0YW5jZVN0YXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CisgICAgICAgIGlmIChzYXZlZEluc3RhbmNlU3RhdGUuZ2V0Qm9vbGVhbihLRVlfU0FWRURfU1RBVEVfSElTVE9SWV9WSVNJQkxFLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBTaG93SGlzdG9yeUV2ZW50KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25UcmltTWVtb3J5KGludCBsZXZlbCkgewogICAgICAgICBSZWNlbnRzVGFza0xvYWRlciBsb2FkZXIgPSBSZWNlbnRzLmdldFRhc2tMb2FkZXIoKTsKICAgICAgICAgaWYgKGxvYWRlciAhPSBudWxsKSB7CkBAIC01MjMsNiArNTE1LDIyIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25NdWx0aVdpbmRvd01vZGVDaGFuZ2VkKGJvb2xlYW4gbXVsdGlXaW5kb3dNb2RlKSB7CisgICAgICAgIHN1cGVyLm9uTXVsdGlXaW5kb3dNb2RlQ2hhbmdlZChtdWx0aVdpbmRvd01vZGUpOworICAgICAgICBpZiAoIW11bHRpV2luZG93TW9kZSkgeworICAgICAgICAgICAgUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyID0gUmVjZW50cy5nZXRUYXNrTG9hZGVyKCk7CisgICAgICAgICAgICBSZWNlbnRzVGFza0xvYWRQbGFuLk9wdGlvbnMgbGF1bmNoT3B0cyA9IG5ldyBSZWNlbnRzVGFza0xvYWRQbGFuLk9wdGlvbnMoKTsKKyAgICAgICAgICAgIGxhdW5jaE9wdHMubG9hZEljb25zID0gZmFsc2U7CisgICAgICAgICAgICBsYXVuY2hPcHRzLmxvYWRUaHVtYm5haWxzID0gZmFsc2U7CisgICAgICAgICAgICBsYXVuY2hPcHRzLm9ubHlMb2FkRm9yQ2FjaGUgPSB0cnVlOworICAgICAgICAgICAgUmVjZW50c1Rhc2tMb2FkUGxhbiBsb2FkUGxhbiA9IGxvYWRlci5jcmVhdGVMb2FkUGxhbih0aGlzKTsKKyAgICAgICAgICAgIGxvYWRlci5wcmVsb2FkVGFza3MobG9hZFBsYW4sIGZhbHNlKTsKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGFza3ModGhpcywgbG9hZFBsYW4sIGxhdW5jaE9wdHMpOworICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFRhc2tTdGFja1VwZGF0ZWRFdmVudChsb2FkUGxhbi5nZXRUYXNrU3RhY2soKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25LZXlEb3duKGludCBrZXlDb2RlLCBLZXlFdmVudCBldmVudCkgewogICAgICAgICBzd2l0Y2ggKGtleUNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9UQUI6IHsKQEAgLTU4MCwyMiArNTg4LDEzIEBACiAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBUb2dnbGVSZWNlbnRzRXZlbnQoKSk7CiAgICAgfQogCi0gICAgLyoqKiogUmVjZW50c1Jlc2l6ZVRhc2tEaWFsb2cgKioqKi8KLQotICAgIHByaXZhdGUgUmVjZW50c1Jlc2l6ZVRhc2tEaWFsb2cgZ2V0UmVzaXplVGFza0RlYnVnRGlhbG9nKCkgewotICAgICAgICBpZiAobVJlc2l6ZVRhc2tEZWJ1Z0RpYWxvZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtUmVzaXplVGFza0RlYnVnRGlhbG9nID0gbmV3IFJlY2VudHNSZXNpemVUYXNrRGlhbG9nKGdldEZyYWdtZW50TWFuYWdlcigpLCB0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVJlc2l6ZVRhc2tEZWJ1Z0RpYWxvZzsKLSAgICB9Ci0KICAgICAvKioqKiBFdmVudEJ1cyBldmVudHMgKioqKi8KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoVG9nZ2xlUmVjZW50c0V2ZW50IGV2ZW50KSB7CiAgICAgICAgIGlmICghZGlzbWlzc0hpc3RvcnkoKSkgewogICAgICAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYXVuY2hTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkRnJvbUhvbWUpIHsKLSAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVUYXNrVmlld3MgKi8pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvTGF1bmNoVGFyZ2V0VGFza09ySG9tZSgpOwogICAgICAgICAgICAgfQpAQCAtNjAzLDE2ICs2MDIsMTggQEAKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KEl0ZXJhdGVSZWNlbnRzRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgLy8gRm9jdXMgdGhlIG5leHQgdGFzawotICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgRm9jdXNOZXh0VGFza1ZpZXdFdmVudCgpKTsKKyAgICAgICAgaWYgKCFkaXNtaXNzSGlzdG9yeSgpKSB7CisgICAgICAgICAgICAvLyBGb2N1cyB0aGUgbmV4dCB0YXNrCisgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgRm9jdXNOZXh0VGFza1ZpZXdFdmVudCgpKTsKIAotICAgICAgICAvLyBTdGFydCBkb3ppbmcgYWZ0ZXIgdGhlIHJlY2VudHMgYnV0dG9uIGlzIGNsaWNrZWQKLSAgICAgICAgUmVjZW50c0RlYnVnRmxhZ3MgZGVidWdGbGFncyA9IFJlY2VudHMuZ2V0RGVidWdGbGFncygpOwotICAgICAgICBpZiAoZGVidWdGbGFncy5pc0Zhc3RUb2dnbGVSZWNlbnRzRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1JdGVyYXRlVHJpZ2dlci5pc0RvemluZygpKSB7Ci0gICAgICAgICAgICAgICAgbUl0ZXJhdGVUcmlnZ2VyLnN0YXJ0RG96aW5nKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1JdGVyYXRlVHJpZ2dlci5wb2tlKCk7CisgICAgICAgICAgICAvLyBTdGFydCBkb3ppbmcgYWZ0ZXIgdGhlIHJlY2VudHMgYnV0dG9uIGlzIGNsaWNrZWQKKyAgICAgICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKKyAgICAgICAgICAgIGlmIChkZWJ1Z0ZsYWdzLmlzRmFzdFRvZ2dsZVJlY2VudHNFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1JdGVyYXRlVHJpZ2dlci5pc0RvemluZygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1JdGVyYXRlVHJpZ2dlci5zdGFydERvemluZygpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1JdGVyYXRlVHJpZ2dlci5wb2tlKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjMwLDE5ICs2MzEsMTcgQEAKICAgICAgICAgfSBlbHNlIGlmIChldmVudC50cmlnZ2VyZWRGcm9tSG9tZUtleSkgewogICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBkaXNtaXNzIFJlY2VudHMgdG8gSG9tZQogICAgICAgICAgICAgaWYgKG1IaXN0b3J5VmlldyAhPSBudWxsICYmIG1IaXN0b3J5Vmlldy5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHQgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIodGhpcywgbnVsbCwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgdC5pbmNyZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB0LmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgSGlkZUhpc3RvcnlFdmVudCBoaWRlRXZlbnQgPSBuZXcgSGlkZUhpc3RvcnlFdmVudCh0cnVlIC8qIGFuaW1hdGUgKi8pOworICAgICAgICAgICAgICAgIGhpZGVFdmVudC5hZGRQb3N0QW5pbWF0aW9uQ2FsbGJhY2sobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUodHJ1ZSAvKiBhbmltYXRlZCAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVUYXNrVmlld3MgKi8pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSwgdCkpOwotICAgICAgICAgICAgICAgIHQuZGVjcmVtZW50KCk7CisgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQoaGlkZUV2ZW50KTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVkICovKTsKKyAgICAgICAgICAgICAgICBkaXNtaXNzUmVjZW50c1RvSG9tZSh0cnVlIC8qIGFuaW1hdGVUYXNrVmlld3MgKi8pOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRG8gbm90aGluZwpAQCAtNjUxLDEyICs2NTAsOSBAQAogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudCBldmVudCkgewogICAgICAgICAvLyBUcnkgYW5kIHN0YXJ0IHRoZSBlbnRlciBhbmltYXRpb24gKG9yIHJlc3RhcnQgaXQgb24gY29uZmlndXJhdGlvbiBjaGFuZ2VkKQotICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciB0ID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKHRoaXMsIG51bGwsIG51bGwsIG51bGwpOwotICAgICAgICBWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RW50ZXJDb250ZXh0IGN0eCA9IG5ldyBWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RW50ZXJDb250ZXh0KHQpOwotICAgICAgICBjdHgucG9zdEFuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7Ci0gICAgICAgIGlmIChtU2VhcmNoV2lkZ2V0SW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyKSB7Ci0gICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7CisgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU2VhcmNoQmFyKSB7CisgICAgICAgICAgICBpZiAobVNlYXJjaFdpZGdldEluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGV2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIHdpZGdldCBwYWNrYWdlIGNoYW5nZXMgaWYgdGhlcmUgaXMgb25lIGJvdW5kCkBAIC02NjcsOCArNjYzLDYgQEAKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtUmVjZW50c1ZpZXcuc3RhcnRFbnRlclJlY2VudHNBbmltYXRpb24oY3R4KTsKLSAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudCgpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRW50ZXJSZWNlbnRzV2luZG93TGFzdEFuaW1hdGlvbkZyYW1lRXZlbnQgZXZlbnQpIHsKQEAgLTcxMyw3ICs3MDcsNyBAQAogICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KHRoaXMsICJvdmVydmlld19hcHBfaW5mbyIsIDEpOwogICAgIH0KIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRGlzbWlzc1Rhc2tWaWV3RXZlbnQgZXZlbnQpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KERlbGV0ZVRhc2tEYXRhRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gUmVtb3ZlIGFueSBzdG9yZWQgZGF0YSBmcm9tIHRoZSBsb2FkZXIKICAgICAgICAgUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyID0gUmVjZW50cy5nZXRUYXNrTG9hZGVyKCk7CiAgICAgICAgIGxvYWRlci5kZWxldGVUYXNrRGF0YShldmVudC50YXNrLCBmYWxzZSk7CkBAIC03MjQsMjQgKzcxOCwyNSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoQWxsVGFza1ZpZXdzRGlzbWlzc2VkRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgLy8gSnVzdCBnbyBzdHJhaWdodCBob21lIChubyBhbmltYXRpb24gbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgdGFzayB2aWV3cykKLSAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUoZmFsc2UgLyogYW5pbWF0ZWQgKi8pOworICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKKyAgICAgICAgaWYgKHNzcC5oYXNEb2NrZWRUYXNrKCkpIHsKKyAgICAgICAgICAgIG1SZWNlbnRzVmlldy5zaG93RW1wdHlWaWV3KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBKdXN0IGdvIHN0cmFpZ2h0IGhvbWUgKG5vIGFuaW1hdGlvbiBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbW9yZSB0YXNrIHZpZXdzKQorICAgICAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUoZmFsc2UgLyogYW5pbWF0ZVRhc2tWaWV3cyAqLyk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGFsbC1kZWxldGlvbnMKICAgICAgICAgTWV0cmljc0xvZ2dlci5jb3VudCh0aGlzLCAib3ZlcnZpZXdfdGFza19hbGxfZGlzbWlzc2VkIiwgMSk7CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChSZXNpemVUYXNrRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgZ2V0UmVzaXplVGFza0RlYnVnRGlhbG9nKCkuc2hvd1Jlc2l6ZVRhc2tEaWFsb2coZXZlbnQudGFzaywgbVJlY2VudHNWaWV3KTsKLSAgICB9Ci0KICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KExhdW5jaFRhc2tTdWNjZWVkZWRFdmVudCBldmVudCkgewogICAgICAgICBNZXRyaWNzTG9nZ2VyLmhpc3RvZ3JhbSh0aGlzLCAib3ZlcnZpZXdfdGFza19sYXVuY2hfaW5kZXgiLCBldmVudC50YXNrSW5kZXhGcm9tU3RhY2tGcm9udCk7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChMYXVuY2hUYXNrRmFpbGVkRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gUmV0dXJuIHRvIEhvbWUKLSAgICAgICAgZGlzbWlzc1JlY2VudHNUb0hvbWUodHJ1ZSk7CisgICAgICAgIGRpc21pc3NSZWNlbnRzVG9Ib21lKHRydWUgLyogYW5pbWF0ZVRhc2tWaWV3cyAqLyk7CiAKICAgICAgICAgTWV0cmljc0xvZ2dlci5jb3VudCh0aGlzLCAib3ZlcnZpZXdfdGFza19sYXVuY2hfZmFpbGVkIiwgMSk7CiAgICAgfQpAQCAtNzY5LDEzICs3NjQsMTEgQEAKICAgICAgICAgICAgIC8vIHByb3ZpZGVkLgogICAgICAgICAgICAgbUhpc3RvcnlWaWV3LnNldFN5c3RlbUluc2V0cyhtUmVjZW50c1ZpZXcuZ2V0U3lzdGVtSW5zZXRzKCkpOwogICAgICAgICB9Ci0gICAgICAgIG1IaXN0b3J5Vmlldy5zaG93KG1SZWNlbnRzVmlldy5nZXRUYXNrU3RhY2soKSk7CisgICAgICAgIG1IaXN0b3J5Vmlldy5zaG93KG1SZWNlbnRzVmlldy5nZXRUYXNrU3RhY2soKSwgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KEhpZGVIaXN0b3J5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaWYgKG1IaXN0b3J5VmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtSGlzdG9yeVZpZXcuaGlkZShldmVudC5hbmltYXRlLCBldmVudC5wb3N0QW5pbWF0aW9uVHJpZ2dlcik7Ci0gICAgICAgIH0KKyAgICAgICAgbUhpc3RvcnlWaWV3LmhpZGUoZXZlbnQuYW5pbWF0ZSwgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFNlYXJjaFdpZGdldFZpZXcoKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUuamF2YQppbmRleCBlMGJkNTliLi40YWIwNzQwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlLmphdmEKQEAgLTI4LDcgKzI4LDYgQEAKIHB1YmxpYyBjbGFzcyBSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSB7CiAKICAgICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hlZFdpdGhBbHRUYWI7Ci0gICAgcHVibGljIGJvb2xlYW4gbGF1bmNoZWRXaXRoTm9SZWNlbnRUYXNrczsKICAgICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hlZEZyb21BcHBXaXRoVGh1bWJuYWlsOwogICAgIHB1YmxpYyBib29sZWFuIGxhdW5jaGVkRnJvbUhvbWU7CiAgICAgcHVibGljIGJvb2xlYW4gbGF1bmNoZWRGcm9tU2VhcmNoSG9tZTsKQEAgLTQ5LDY3ICs0OCwzMSBAQAogICAgICAgICBsYXVuY2hlZFZpYURyYWdHZXN0dXJlID0gZmFsc2U7CiAgICAgfQogCi0gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgc3RhdHVzIGJhciBzY3JpbSBzaG91bGQgYmUgYW5pbWF0ZWQgd2hlbiBzaG93biBmb3IgdGhlIGZpcnN0IHRpbWUuICovCi0gICAgcHVibGljIGJvb2xlYW4gc2hvdWxkQW5pbWF0ZVN0YXR1c0JhclNjcmltKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBzdGF0dXMgYmFyIHNjcmltIHNob3VsZCBiZSB2aXNpYmxlLiAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc1N0YXR1c0JhclNjcmltKCkgewotICAgICAgICByZXR1cm4gIWxhdW5jaGVkV2l0aE5vUmVjZW50VGFza3M7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgbmF2IGJhciBzY3JpbSBzaG91bGQgYmUgYW5pbWF0ZWQgd2hlbiBzaG93biBmb3IgdGhlIGZpcnN0IHRpbWUuICovCi0gICAgcHVibGljIGJvb2xlYW4gc2hvdWxkQW5pbWF0ZU5hdkJhclNjcmltKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBuYXYgYmFyIHNjcmltIHNob3VsZCBiZSB2aXNpYmxlLiAqLwotICAgIHB1YmxpYyBib29sZWFuIGhhc05hdkJhclNjcmltKCkgewotICAgICAgICAvLyBPbmx5IHNob3cgdGhlIHNjcmltIGlmIHdlIGhhdmUgcmVjZW50IHRhc2tzLCBhbmQgaWYgdGhlIG5hdiBiYXIgaXMgbm90IHRyYW5zcG9zZWQKLSAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIHJldHVybiAhbGF1bmNoZWRXaXRoTm9SZWNlbnRUYXNrcyAmJiAhY29uZmlnLmhhc1RyYW5zcG9zZWROYXZCYXI7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgdGFzayB0byBmb2N1cyBnaXZlbiB0aGUgY3VycmVudCBsYXVuY2ggc3RhdGUuCiAgICAgICovCiAgICAgcHVibGljIGludCBnZXRJbml0aWFsRm9jdXNUYXNrSW5kZXgoaW50IG51bVRhc2tzKSB7CiAgICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGZsYWdzID0gUmVjZW50cy5nZXREZWJ1Z0ZsYWdzKCk7Ci0gICAgICAgIGlmIChmbGFncy5pc1BhZ2VPblRvZ2dsZUVuYWJsZWQoKSAmJiAhbGF1bmNoZWRXaXRoQWx0VGFiKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgZmFzdCB0b2dnbGluZywgdGhlbiBmb2N1cyB0aGUgbmV4dCB0YXNrIGRlcGVuZGluZyBvbiB3aGVuIHlvdSBhcmUgb24gaG9tZQotICAgICAgICAgICAgLy8gb3IgY29taW5nIGluIGZyb20gYW5vdGhlciBhcHAKKyAgICAgICAgaWYgKGxhdW5jaGVkV2l0aEFsdFRhYikgeworICAgICAgICAgICAgaWYgKGxhdW5jaGVkRnJvbUFwcFdpdGhUaHVtYm5haWwpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBhbHQtdGFiYmluZyBmcm9tIGFub3RoZXIgYXBwLCBmb2N1cyB0aGUgbmV4dCB0YXNrCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bVRhc2tzIC0gMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgYWx0LXRhYmJpbmcgZnJvbSBob21lLCBmb2N1cyB0aGUgZmlyc3QgdGFzaworICAgICAgICAgICAgICAgIHJldHVybiBudW1UYXNrcyAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobGF1bmNoZWRGcm9tSG9tZSkgewogICAgICAgICAgICAgICAgIHJldHVybiBudW1UYXNrcyAtIDE7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChmbGFncy5pc0Zhc3RUb2dnbGVSZWNlbnRzRW5hYmxlZCgpIHx8ICFmbGFncy5pc0luaXRpYWxTdGF0ZVBhZ2luZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgZmFzdC10b2dnbGluZyBvciBhcmUgc3RhcnRpbmcgaW4gdGhlIG5vbi1mb2N1c2VkIG1vZGUsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGFzc3VtZSB0aGUgZnJvbnQgbW9zdCB0YXNrIGhhcyBmb2N1cwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtVGFza3MgLSAxOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1UYXNrcyAtIDI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhdW5jaGVkV2l0aEFsdFRhYiAmJiBsYXVuY2hlZEZyb21BcHBXaXRoVGh1bWJuYWlsKSB7Ci0gICAgICAgICAgICAvLyBJZiBhbHQtdGFiYmluZyBmcm9tIGFub3RoZXIgYXBwLCBmb2N1cyB0aGUgbmV4dCB0YXNrCi0gICAgICAgICAgICByZXR1cm4gbnVtVGFza3MgLSAyOwotICAgICAgICB9IGVsc2UgaWYgKChsYXVuY2hlZFdpdGhBbHRUYWIgJiYgbGF1bmNoZWRGcm9tSG9tZSkgfHwKLSAgICAgICAgICAgICAgICAoIWxhdW5jaGVkV2l0aEFsdFRhYiAmJiBsYXVuY2hlZEZyb21BcHBXaXRoVGh1bWJuYWlsKSkgewotICAgICAgICAgICAgLy8gSWYgYWx0LXRhYmJpbmcgZnJvbSBob21lLCBvciBsYXVuY2hpbmcgZnJvbSBhbiBhcHAgbm9ybWFsbHksIGZvY3VzIHRoYXQgdGFzawotICAgICAgICAgICAgcmV0dXJuIG51bVRhc2tzIC0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UgYXJlIGxhdW5jaGluZyByZWNlbnRzIGZyb20gaG9tZSBub3JtYWxseSwgZm9jdXMgbm8gdGFza3Mgc28gdGhhdCB3ZQotICAgICAgICAgICAgLy8ga25vdyB0byByZXR1cm4gaG9tZQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSBhbHRUYWI6ICIgKyBsYXVuY2hlZFdpdGhBbHRUYWIgKwotICAgICAgICAgICAgICAgICIsIG5vVGFza3M6ICIgKyBsYXVuY2hlZFdpdGhOb1JlY2VudFRhc2tzICsKLSAgICAgICAgICAgICAgICAiLCBmcm9tSG9tZTogIiArIGxhdW5jaGVkRnJvbUhvbWUgKwotICAgICAgICAgICAgICAgICIsIGZyb21TZWFyY2hIb21lOiAiICsgbGF1bmNoZWRGcm9tU2VhcmNoSG9tZSArCi0gICAgICAgICAgICAgICAgIiwgcmV1c2U6ICIgKyBsYXVuY2hlZFJldXNlVGFza1N0YWNrVmlld3M7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0NvbmZpZ3VyYXRpb24uamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNDb25maWd1cmF0aW9uLmphdmEKaW5kZXggNTNjMTBiNy4uNjcxMzVkNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0NvbmZpZ3VyYXRpb24uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuU3lzdGVtU2VydmljZXNQcm94eTsKIApAQCAtNzQsOSArNzMsNiBAQAogICAgIHB1YmxpYyBpbnQgc3ZlbHRlTGV2ZWw7CiAgICAgcHVibGljIGludCBzZWFyY2hCYXJTcGFjZUhlaWdodFB4OwogCi0gICAgLyoqIERldiBvcHRpb25zIGFuZCBnbG9iYWwgc2V0dGluZ3MgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBsb2NrVG9BcHBFbmFibGVkOwotCiAgICAgcHVibGljIFJlY2VudHNDb25maWd1cmF0aW9uKENvbnRleHQgY29udGV4dCkgewogICAgICAgICAvLyBMb2FkIG9ubHkgcmVzb3VyY2VzIHRoYXQgY2FuIG5vdCBjaGFuZ2UgYWZ0ZXIgdGhlIGZpcnN0IGxvYWQgZWl0aGVyIHRocm91Z2ggZGV2ZWxvcGVyCiAgICAgICAgIC8vIHNldHRpbmdzIG9yIHZpYSBtdWx0aSB3aW5kb3cKQEAgLTEwNiwxMiArMTAyLDcgQEAKICAgICAvKioKICAgICAgKiBVcGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0KICAgICAgKi8KLSAgICB2b2lkIHVwZGF0ZShDb250ZXh0IGNvbnRleHQsIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwLCBSZWN0IHdpbmRvd1JlY3QpIHsKLSAgICAgICAgLy8gT25seSB1cGRhdGUgcmVzb3VyY2VzIHRoYXQgY2FuIGNoYW5nZSBhZnRlciB0aGUgZmlyc3QgbG9hZCwgZWl0aGVyIHRocm91Z2ggZGV2ZWxvcGVyCi0gICAgICAgIC8vIHNldHRpbmdzIG9yIHZpYSBtdWx0aSB3aW5kb3cKLSAgICAgICAgbG9ja1RvQXBwRW5hYmxlZCA9ICFzc3AuaGFzRnJlZWZvcm1Xb3Jrc3BhY2VTdXBwb3J0KCkgJiYKLSAgICAgICAgICAgICAgICBzc3AuZ2V0U3lzdGVtU2V0dGluZyhjb250ZXh0LCBTZXR0aW5ncy5TeXN0ZW0uTE9DS19UT19BUFBfRU5BQkxFRCkgIT0gMDsKLQorICAgIHZvaWQgdXBkYXRlKFJlY3Qgd2luZG93UmVjdCkgewogICAgICAgICAvLyBSZWNvbXB1dGUgc29tZSB2YWx1ZXMgYmFzZWQgb24gdGhlIGdpdmVuIHN0YXRlLCBzaW5jZSB3ZSBjYW4gbm90IHJlbHkgb24gdGhlIHJlc291cmNlCiAgICAgICAgIC8vIHN5c3RlbSB0byBnZXQgY2VydGFpbiB2YWx1ZXMuCiAgICAgICAgIGJvb2xlYW4gaXNMYW5kc2NhcGUgPSB3aW5kb3dSZWN0LndpZHRoKCkgPiB3aW5kb3dSZWN0LmhlaWdodCgpOwpAQCAtMTQzLDE2ICsxMzQsMTMgQEAKICAgICAgICAgICAgIGludCByaWdodEluc2V0LCBSZWN0IHNlYXJjaEJhckJvdW5kcywgUmVjdCB0YXNrU3RhY2tCb3VuZHMpIHsKICAgICAgICAgaWYgKGhhc1RyYW5zcG9zZWROYXZCYXIpIHsKICAgICAgICAgICAgIC8vIEluIGxhbmRzY2FwZSBwaG9uZXMsIHRoZSBzZWFyY2ggYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQsIGJ1dCB3ZSBvdmVybGF5IGl0IG9uIHRvcAotICAgICAgICAgICAgaW50IHN3SW5zZXQgPSBnZXRJbnNldFRvU21hbGxlc3RXaWR0aCh3aW5kb3dCb3VuZHMucmlnaHQgLSByaWdodEluc2V0IC0KLSAgICAgICAgICAgICAgICAgICAgd2luZG93Qm91bmRzLmxlZnQpOwotICAgICAgICAgICAgdGFza1N0YWNrQm91bmRzLnNldCh3aW5kb3dCb3VuZHMubGVmdCArIHN3SW5zZXQsIHdpbmRvd0JvdW5kcy50b3AgKyB0b3BJbnNldCwKLSAgICAgICAgICAgICAgICAgICAgd2luZG93Qm91bmRzLnJpZ2h0IC0gc3dJbnNldCAtIHJpZ2h0SW5zZXQsIHdpbmRvd0JvdW5kcy5ib3R0b20pOworICAgICAgICAgICAgdGFza1N0YWNrQm91bmRzLnNldCh3aW5kb3dCb3VuZHMubGVmdCwgd2luZG93Qm91bmRzLnRvcCArIHRvcEluc2V0LAorICAgICAgICAgICAgICAgICAgICB3aW5kb3dCb3VuZHMucmlnaHQgLSByaWdodEluc2V0LCB3aW5kb3dCb3VuZHMuYm90dG9tKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEluIHBvcnRyYWl0LCB0aGUgc2VhcmNoIGJhciBhcHBlYXJzIG9uIHRoZSB0b3AgKHdoaWNoIGFscmVhZHkgaGFzIHRoZSBpbnNldCkKLSAgICAgICAgICAgIGludCBzd0luc2V0ID0gZ2V0SW5zZXRUb1NtYWxsZXN0V2lkdGgod2luZG93Qm91bmRzLnJpZ2h0IC0gd2luZG93Qm91bmRzLmxlZnQpOwogICAgICAgICAgICAgaW50IHRvcCA9IHNlYXJjaEJhckJvdW5kcy5pc0VtcHR5KCkgPyB0b3BJbnNldCA6IDA7Ci0gICAgICAgICAgICB0YXNrU3RhY2tCb3VuZHMuc2V0KHdpbmRvd0JvdW5kcy5sZWZ0ICsgc3dJbnNldCwgc2VhcmNoQmFyQm91bmRzLmJvdHRvbSArIHRvcCwKLSAgICAgICAgICAgICAgICAgICAgd2luZG93Qm91bmRzLnJpZ2h0IC0gc3dJbnNldCAtIHJpZ2h0SW5zZXQsIHdpbmRvd0JvdW5kcy5ib3R0b20pOworICAgICAgICAgICAgdGFza1N0YWNrQm91bmRzLnNldCh3aW5kb3dCb3VuZHMubGVmdCwgc2VhcmNoQmFyQm91bmRzLmJvdHRvbSArIHRvcCwKKyAgICAgICAgICAgICAgICAgICAgd2luZG93Qm91bmRzLnJpZ2h0IC0gcmlnaHRJbnNldCwgd2luZG93Qm91bmRzLmJvdHRvbSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MywxNSArMTYxLDQgQEAKICAgICAgICAgICAgICAgICAgICAgd2luZG93Qm91bmRzLnJpZ2h0LCB3aW5kb3dCb3VuZHMudG9wICsgdG9wSW5zZXQgKyBzZWFyY2hCYXJTaXplKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cmFpbiB0aGUgd2lkdGggb2YgdGhlIGxhbmRzY2FwZSBzdGFjayB0byB0aGUgc21hbGxlc3Qgd2lkdGggb2YgdGhlIGRldmljZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBnZXRJbnNldFRvU21hbGxlc3RXaWR0aChpbnQgYXZhaWxhYmxlV2lkdGgpIHsKLSAgICAgICAgUmVjZW50c0RlYnVnRmxhZ3MgZGVidWdGbGFncyA9IFJlY2VudHMuZ2V0RGVidWdGbGFncygpOwotICAgICAgICBpZiAoIWRlYnVnRmxhZ3MuaXNGdWxsc2NyZWVuVGh1bWJuYWlsc0VuYWJsZWQoKSAmJiAoYXZhaWxhYmxlV2lkdGggPiBzbWFsbGVzdFdpZHRoKSkgewotICAgICAgICAgICAgcmV0dXJuIChhdmFpbGFibGVXaWR0aCAtIHNtYWxsZXN0V2lkdGgpIC8gMjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzRGVidWdGbGFncy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0RlYnVnRmxhZ3MuamF2YQppbmRleCBkNzc4ODg2Li5jMzIzNTIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzRGVidWdGbGFncy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNEZWJ1Z0ZsYWdzLmphdmEKQEAgLTI2LDE3ICsyNiwxNCBAQAogICovCiBwdWJsaWMgY2xhc3MgUmVjZW50c0RlYnVnRmxhZ3MgaW1wbGVtZW50cyBUdW5lclNlcnZpY2UuVHVuYWJsZSB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0ZBU1RfVE9HR0xFID0gIm92ZXJ2aWV3X2Zhc3RfdG9nZ2xlIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX1BBR0VfT05fVE9HR0xFID0gIm92ZXJ2aWV3X3BhZ2Vfb25fdG9nZ2xlIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0ZVTExTQ1JFRU5fVEhVTUJOQUlMUyA9ICJvdmVydmlld19mdWxsc2NyZWVuX3RodW1ibmFpbHMiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfU0hPV19ISVNUT1JZID0gIm92ZXJ2aWV3X3Nob3dfaGlzdG9yeSI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9GQVNUX1RPR0dMRSA9ICJvdmVydmlld19mYXN0X3RvZ2dsZV92aWFfYnV0dG9uIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZX0lOSVRJQUxfU1RBVEVfUEFHSU5HID0gIm92ZXJ2aWV3X2luaXRpYWxfc3RhdGVfcGFnaW5nIjsKIAogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhdGljIHsKICAgICAgICAgLy8gRW5hYmxlcyBkZWJ1ZyBkcmF3aW5nIGZvciB0aGUgdHJhbnNpdGlvbiB0aHVtYm5haWwKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVuYWJsZVRyYW5zaXRpb25UaHVtYm5haWxEZWJ1Z01vZGUgPSBmYWxzZTsKLSAgICAgICAgLy8gVGhpcyBkaXNhYmxlcyB0aGUgc2VhcmNoIGJhciBpbnRlZ3JhdGlvbgotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gRGlzYWJsZVNlYXJjaEJhciA9IHRydWU7CisgICAgICAgIC8vIFRoaXMgZW5hYmxlcyB0aGUgc2VhcmNoIGJhciBpbnRlZ3JhdGlvbgorICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gRW5hYmxlU2VhcmNoQmFyID0gZmFsc2U7CiAgICAgICAgIC8vIFRoaXMgZGlzYWJsZXMgdGhlIGJpdG1hcCBhbmQgaWNvbiBjYWNoZXMKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERpc2FibGVCYWNrZ3JvdW5kQ2FjaGUgPSBmYWxzZTsKICAgICAgICAgLy8gRW5hYmxlcyB0aGUgc2ltdWxhdGVkIHRhc2sgYWZmaWxpYXRpb25zCkBAIC01Miw5ICs0OSw2IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1GYXN0VG9nZ2xlUmVjZW50czsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVBhZ2VPblRvZ2dsZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbVVzZUZ1bGxzY3JlZW5UaHVtYm5haWxzOwotICAgIHByaXZhdGUgYm9vbGVhbiBtU2hvd0hpc3Rvcnk7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1Jbml0aWFsU3RhdGVQYWdpbmc7CiAKICAgICAvKioKQEAgLTY0LDM2ICs1OCwxNCBAQAogICAgIHB1YmxpYyBSZWNlbnRzRGVidWdGbGFncyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgLy8gUmVnaXN0ZXIgYWxsIG91ciBmbGFncywgdGhpcyB3aWxsIGFsc28gY2FsbCBvblR1bmluZ0NoYW5nZWQoKSBmb3IgZWFjaCBrZXksIHdoaWNoIHdpbGwKICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoIGZsYWcKLSAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChjb250ZXh0KS5hZGRUdW5hYmxlKHRoaXMsIEtFWV9GQVNUX1RPR0dMRSwgS0VZX1BBR0VfT05fVE9HR0xFLAotICAgICAgICAgICAgICAgIEtFWV9GVUxMU0NSRUVOX1RIVU1CTkFJTFMsIEtFWV9TSE9XX0hJU1RPUlksIEtFWV9JTklUSUFMX1NUQVRFX1BBR0lORyk7CisgICAgICAgIFR1bmVyU2VydmljZS5nZXQoY29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBLRVlfRkFTVF9UT0dHTEUsIEtFWV9JTklUSUFMX1NUQVRFX1BBR0lORyk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogQHJldHVybiB3aGV0aGVyIHdlIGFyZSBlbmFibGluZyBmYXN0IHRvZ2dsaW5nLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGlzRmFzdFRvZ2dsZVJlY2VudHNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbVBhZ2VPblRvZ2dsZSAmJiBtRmFzdFRvZ2dsZVJlY2VudHM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB3aGV0aGVyIHRoZSByZWNlbnRzIGJ1dHRvbiB0b2dnbGVzIHBhZ2VzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUGFnZU9uVG9nZ2xlRW5hYmxlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1QYWdlT25Ub2dnbGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiB3aGV0aGVyIHdlIHNob3VsZCBzaG93IGZ1bGxzY3JlZW4gdGh1bWJuYWlscwotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRnVsbHNjcmVlblRodW1ibmFpbHNFbmFibGVkKCkgewotICAgICAgICByZXR1cm4gbVVzZUZ1bGxzY3JlZW5UaHVtYm5haWxzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEByZXR1cm4gd2hldGhlciB3ZSBzaG91bGQgc2hvdyB0aGUgaGlzdG9yeQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzSGlzdG9yeUVuYWJsZWQoKSB7Ci0gICAgICAgIHJldHVybiBtU2hvd0hpc3Rvcnk7CisgICAgICAgIHJldHVybiBtRmFzdFRvZ2dsZVJlY2VudHM7CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMTAsMTggKzgyLDYgQEAKICAgICAgICAgICAgICAgICBtRmFzdFRvZ2dsZVJlY2VudHMgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgS0VZX1BBR0VfT05fVE9HR0xFOgotICAgICAgICAgICAgICAgIG1QYWdlT25Ub2dnbGUgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgS0VZX0ZVTExTQ1JFRU5fVEhVTUJOQUlMUzoKLSAgICAgICAgICAgICAgICBtVXNlRnVsbHNjcmVlblRodW1ibmFpbHMgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgS0VZX1NIT1dfSElTVE9SWToKLSAgICAgICAgICAgICAgICBtU2hvd0hpc3RvcnkgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgS0VZX0lOSVRJQUxfU1RBVEVfUEFHSU5HOgogICAgICAgICAgICAgICAgIG1Jbml0aWFsU3RhdGVQYWdpbmcgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNJbXBsLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzSW1wbC5qYXZhCmluZGV4IDJhNDAxN2EuLmRkZWI4ZGMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL1JlY2VudHNJbXBsLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c0ltcGwuamF2YQpAQCAtMTksNiArMTksNyBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU9wdGlvbnM7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSVRhc2tTdGFja0xpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQuYXBwd2lkZ2V0LkFwcFdpZGdldFByb3ZpZGVySW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwpAQCAtNjAsNiArNjEsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuVGFza1N0YWNrVmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzLlRhc2tWaWV3SGVhZGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuVGFza1ZpZXdUcmFuc2Zvcm07CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkJhc2VTdGF0dXNCYXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlBob25lU3RhdHVzQmFyOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKQEAgLTc0LDggKzc2LDYgQEAKICAgICAgICAgQWN0aXZpdHlPcHRpb25zLk9uQW5pbWF0aW9uRmluaXNoZWRMaXN0ZW5lciB7CiAKICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIlJlY2VudHNJbXBsIjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KICAgICAvLyBUaGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIGVhY2ggcmVjZW50cyBidXR0b24gcHJlc3MgdGhhdCB3ZSB3aWxsIGhhbmRsZQogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBNSU5fVE9HR0xFX0RFTEFZX01TID0gMzUwOwogICAgIC8vIFRoZSBkdXJhdGlvbiB3aXRoaW4gd2hpY2ggdGhlIHVzZXIgcmVsZWFzaW5nIHRoZSBhbHQgdGFiIChmcm9tIHdoZW4gdGhleSBwcmVzc2VkIGFsdCB0YWIpCkBAIC0xMDQsNiArMTA0LDEwIEBACiAgICAgICAgICAgICBtSGFuZGxlci5wb3N0KHRoaXMpOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlQaW5uZWQoKSB7CisgICAgICAgIH0KKwogICAgICAgICAvKiogUHJlbG9hZHMgdGhlIG5leHQgdGFzayAqLwogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAvLyBUT0RPOiBUZW1wb3JhcmlseSBza2lwIHRoaXMgaWYgbXVsdGkgc3RhY2sgaXMgZW5hYmxlZApAQCAtMTgwLDggKzE4NCw2IEBACiAgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKICAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwogICAgICAgICBtQXBwV2lkZ2V0SG9zdCA9IG5ldyBSZWNlbnRzQXBwV2lkZ2V0SG9zdChtQ29udGV4dCwgUmVjZW50c0FwcFdpZGdldEhvc3QuSE9TVF9JRCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KTsKIAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0aWMgZm9yZWdyb3VuZCB0aHJlYWQKICAgICAgICAgRm9yZWdyb3VuZFRocmVhZC5nZXQoKTsKQEAgLTE5MiwxNCArMTk0LDggQEAKICAgICAgICAgc3NwLnJlZ2lzdGVyVGFza1N0YWNrTGlzdGVuZXIobVRhc2tTdGFja0xpc3RlbmVyKTsKIAogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBzdGF0aWMgY29uZmlndXJhdGlvbiByZXNvdXJjZXMKLSAgICAgICAgbVN0YXR1c0JhckhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5zdGF0dXNfYmFyX2hlaWdodCk7Ci0gICAgICAgIG1OYXZCYXJIZWlnaHQgPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4ubmF2aWdhdGlvbl9iYXJfaGVpZ2h0KTsKLSAgICAgICAgbU5hdkJhcldpZHRoID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLm5hdmlnYXRpb25fYmFyX3dpZHRoKTsKLSAgICAgICAgbVRhc2tCYXJIZWlnaHQgPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ucmVjZW50c190YXNrX2Jhcl9oZWlnaHQpOwotICAgICAgICBtRHVtbXlTdGFja1ZpZXcgPSBuZXcgVGFza1N0YWNrVmlldyhtQ29udGV4dCwgbmV3IFRhc2tTdGFjaygpKTsKLSAgICAgICAgbUhlYWRlckJhciA9IChUYXNrVmlld0hlYWRlcikgaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5yZWNlbnRzX3Rhc2tfdmlld19oZWFkZXIsCi0gICAgICAgICAgICAgICAgbnVsbCwgZmFsc2UpOwotICAgICAgICByZWxvYWRIZWFkZXJCYXJMYXlvdXQodHJ1ZSAvKiB0cnlBbmRCaW5kU2VhcmNoV2lkZ2V0ICovLCBudWxsIC8qIHN0YWNrICovKTsKKyAgICAgICAgcmVsb2FkSGVhZGVyQmFyTGF5b3V0KCk7CisgICAgICAgIHVwZGF0ZUhlYWRlckJhckxheW91dCh0cnVlIC8qIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQgKi8sIG51bGwgLyogc3RhY2sgKi8pOwogCiAgICAgICAgIC8vIFdoZW4gd2Ugc3RhcnQsIHByZWxvYWQgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcmV2aW91cyByZWNlbnQgdGFza3MuCiAgICAgICAgIC8vIFdlIGNhbiB1c2UgYSBuZXcgcGxhbiBzaW5jZSB0aGUgY2FjaGVzIHdpbGwgYmUgdGhlIHNhbWUuCkBAIC0yMDcsNyArMjAzLDcgQEAKICAgICAgICAgUmVjZW50c1Rhc2tMb2FkUGxhbiBwbGFuID0gbG9hZGVyLmNyZWF0ZUxvYWRQbGFuKG1Db250ZXh0KTsKICAgICAgICAgbG9hZGVyLnByZWxvYWRUYXNrcyhwbGFuLCB0cnVlIC8qIGlzVG9wVGFza0hvbWUgKi8pOwogICAgICAgICBSZWNlbnRzVGFza0xvYWRQbGFuLk9wdGlvbnMgbGF1bmNoT3B0cyA9IG5ldyBSZWNlbnRzVGFza0xvYWRQbGFuLk9wdGlvbnMoKTsKLSAgICAgICAgbGF1bmNoT3B0cy5udW1WaXNpYmxlVGFza3MgPSBsb2FkZXIuZ2V0QXBwbGljYXRpb25JY29uQ2FjaGVTaXplKCk7CisgICAgICAgIGxhdW5jaE9wdHMubnVtVmlzaWJsZVRhc2tzID0gbG9hZGVyLmdldEljb25DYWNoZVNpemUoKTsKICAgICAgICAgbGF1bmNoT3B0cy5udW1WaXNpYmxlVGFza1RodW1ibmFpbHMgPSBsb2FkZXIuZ2V0VGh1bWJuYWlsQ2FjaGVTaXplKCk7CiAgICAgICAgIGxhdW5jaE9wdHMub25seUxvYWRGb3JDYWNoZSA9IHRydWU7CiAgICAgICAgIGxvYWRlci5sb2FkVGFza3MobUNvbnRleHQsIHBsYW4sIGxhdW5jaE9wdHMpOwpAQCAtMjE1LDExICsyMTEsMTIgQEAKIAogICAgIHB1YmxpYyB2b2lkIG9uQm9vdENvbXBsZXRlZCgpIHsKICAgICAgICAgbUJvb3RDb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICByZWxvYWRIZWFkZXJCYXJMYXlvdXQodHJ1ZSAvKiB0cnlBbmRCaW5kU2VhcmNoV2lkZ2V0ICovLCBudWxsIC8qIHN0YWNrICovKTsKKyAgICAgICAgdXBkYXRlSGVhZGVyQmFyTGF5b3V0KHRydWUgLyogdHJ5QW5kQmluZFNlYXJjaFdpZGdldCAqLywgbnVsbCAvKiBzdGFjayAqLyk7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZCgpIHsKKyAgICAgICAgcmVsb2FkSGVhZGVyQmFyTGF5b3V0KCk7CisgICAgICAgIHVwZGF0ZUhlYWRlckJhckxheW91dCh0cnVlIC8qIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQgKi8sIG51bGwgLyogc3RhY2sgKi8pOwogICAgICAgICAvLyBEb24ndCByZXVzZSB0YXNrIHN0YWNrIHZpZXdzIGlmIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMKICAgICAgICAgbUNhblJldXNlVGFza1N0YWNrVmlld3MgPSBmYWxzZTsKICAgICAgICAgUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCkudXBkYXRlT25Db25maWd1cmF0aW9uQ2hhbmdlKCk7CkBAIC0yNTEsNyArMjQ4LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNob3dSZWNlbnRzKGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUFsdFRhYiwgYm9vbGVhbiBkcmFnZ2luZ0luUmVjZW50cywKICAgICAgICAgICAgIGJvb2xlYW4gYW5pbWF0ZSwgYm9vbGVhbiByZWxvYWRUYXNrcykgewogICAgICAgICBtVHJpZ2dlcmVkRnJvbUFsdFRhYiA9IHRyaWdnZXJlZEZyb21BbHRUYWI7CkBAIC0yOTQsNyArMjkwLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGhpZGVSZWNlbnRzKGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUFsdFRhYiwgYm9vbGVhbiB0cmlnZ2VyZWRGcm9tSG9tZUtleSkgewogICAgICAgICBpZiAobUJvb3RDb21wbGV0ZWQpIHsKICAgICAgICAgICAgIGlmICh0cmlnZ2VyZWRGcm9tQWx0VGFiICYmIG1GYXN0QWx0VGFiVHJpZ2dlci5pc0RvemluZygpKSB7CkBAIC0zMTUsNyArMzEwLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHRvZ2dsZVJlY2VudHMoKSB7CiAgICAgICAgIC8vIFNraXAgdGhpcyB0b2dnbGUgaWYgd2UgYXJlIGFscmVhZHkgd2FpdGluZyB0byB0cmlnZ2VyIHJlY2VudHMgdmlhIGFsdC10YWIKICAgICAgICAgaWYgKG1GYXN0QWx0VGFiVHJpZ2dlci5pc0RvemluZygpKSB7CkBAIC0zMzIsOCArMzI2LDcgQEAKICAgICAgICAgICAgIGlmICh0b3BUYXNrICE9IG51bGwgJiYgc3NwLmlzUmVjZW50c1RvcE1vc3QodG9wVGFzaywgaXNUb3BUYXNrSG9tZSkpIHsKICAgICAgICAgICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgICAgICAgICBSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSBsYXVuY2hTdGF0ZSA9IGNvbmZpZy5nZXRMYXVuY2hTdGF0ZSgpOwotICAgICAgICAgICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGZsYWdzID0gUmVjZW50cy5nZXREZWJ1Z0ZsYWdzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzLmlzUGFnZU9uVG9nZ2xlRW5hYmxlZCgpICYmICFsYXVuY2hTdGF0ZS5sYXVuY2hlZFdpdGhBbHRUYWIpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxhdW5jaFN0YXRlLmxhdW5jaGVkV2l0aEFsdFRhYikgewogICAgICAgICAgICAgICAgICAgICAvLyBOb3RpZnkgcmVjZW50cyB0byBtb3ZlIG9udG8gdGhlIG5leHQgdGFzawogICAgICAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkucG9zdChuZXcgSXRlcmF0ZVJlY2VudHNFdmVudCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzYwLDYgKzM1Myw5IEBACiAKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHN0YXJ0IHRoZSByZWNlbnRzIGFjdGl2aXR5CiAgICAgICAgICAgICAgICAgc3RhcnRSZWNlbnRzQWN0aXZpdHkodG9wVGFzaywgaXNUb3BUYXNrSG9tZS52YWx1ZSwgdHJ1ZSAvKiBhbmltYXRlICovKTsKKworICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xvc2UgdGhlIG90aGVyIHN5c3RlbSB3aW5kb3dzIGlmIHdlIGFyZSBhY3R1YWxseSBzaG93aW5nIHJlY2VudHMKKyAgICAgICAgICAgICAgICBzc3Auc2VuZENsb3NlU3lzdGVtV2luZG93cyhCYXNlU3RhdHVzQmFyLlNZU1RFTV9ESUFMT0dfUkVBU09OX1JFQ0VOVF9BUFBTKTsKICAgICAgICAgICAgICAgICBtTGFzdFRvZ2dsZVRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoQWN0aXZpdHlOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC0zNjcsNyArMzYzLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHByZWxvYWRSZWNlbnRzKCkgewogICAgICAgICAvLyBQcmVsb2FkIG9ubHkgdGhlIHJhdyB0YXNrIGxpc3QgaW50byBhIG5ldyBsb2FkIHBsYW4gKHdoaWNoIHdpbGwgYmUgY29uc3VtZWQgYnkgdGhlCiAgICAgICAgIC8vIFJlY2VudHNBY3Rpdml0eSkgb25seSBpZiB0aGVyZSBpcyBhIHRhc2sgdG8gYW5pbWF0ZSB0by4KQEAgLTM4OCwxNyArMzgzLDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBjYW5jZWxQcmVsb2FkaW5nUmVjZW50cygpIHsKICAgICAgICAgLy8gRG8gbm90aGluZwogICAgIH0KIAotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uRHJhZ2dpbmdJblJlY2VudHMoZmxvYXQgZGlzdGFuY2VGcm9tVG9wKSB7CiAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kT250b01haW5UaHJlYWQobmV3IERyYWdnaW5nSW5SZWNlbnRzRXZlbnQoZGlzdGFuY2VGcm9tVG9wKSk7CiAgICAgfQogCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25EcmFnZ2luZ0luUmVjZW50c0VuZGVkKGZsb2F0IHZlbG9jaXR5KSB7CiAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kT250b01haW5UaHJlYWQobmV3IERyYWdnaW5nSW5SZWNlbnRzRW5kZWRFdmVudCh2ZWxvY2l0eSkpOwogICAgIH0KQEAgLTQ1Miw3ICs0NDQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gTGF1bmNoIHRoZSB0YXNrCi0gICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHMobUNvbnRleHQsIHRvVGFzay5rZXkuaWQsIHRvVGFzay5hY3Rpdml0eUxhYmVsLCBsYXVuY2hPcHRzKTsKKyAgICAgICAgc3NwLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhtQ29udGV4dCwgdG9UYXNrLmtleS5pZCwgdG9UYXNrLnRpdGxlLCBsYXVuY2hPcHRzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTUyNCw3ICs1MTYsNyBAQAogICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KG1Db250ZXh0LCAib3ZlcnZpZXdfYWZmaWxpYXRlZF90YXNrX2xhdW5jaCIsIDEpOwogCiAgICAgICAgIC8vIExhdW5jaCB0aGUgdGFzawotICAgICAgICBzc3Auc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKG1Db250ZXh0LCB0b1Rhc2sua2V5LmlkLCB0b1Rhc2suYWN0aXZpdHlMYWJlbCwgbGF1bmNoT3B0cyk7CisgICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHMobUNvbnRleHQsIHRvVGFzay5rZXkuaWQsIHRvVGFzay50aXRsZSwgbGF1bmNoT3B0cyk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2hvd05leHRBZmZpbGlhdGVkVGFzaygpIHsKQEAgLTUzOSwxNCArNTMxLDE4IEBACiAgICAgICAgIHNob3dSZWxhdGl2ZUFmZmlsaWF0ZWRUYXNrKGZhbHNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBkb2NrVG9wVGFzayhib29sZWFuIGRyYWdnaW5nSW5SZWNlbnRzLCBpbnQgc3RhY2tDcmVhdGVNb2RlLCBSZWN0IGluaXRpYWxCb3VuZHMpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBkb2NrVG9wVGFzayhib29sZWFuIGRyYWdnaW5nSW5SZWNlbnRzLCBpbnQgc3RhY2tDcmVhdGVNb2RlLCBSZWN0IGluaXRpYWxCb3VuZHMpIHsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CiAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SdW5uaW5nVGFza0luZm8gdG9wVGFzayA9IHNzcC5nZXRUb3BNb3N0VGFzaygpOwotICAgICAgICBpZiAodG9wVGFzayAhPSBudWxsICYmICFTeXN0ZW1TZXJ2aWNlc1Byb3h5LmlzSG9tZVN0YWNrKHRvcFRhc2suc3RhY2tJZCkpIHsKKyAgICAgICAgYm9vbGVhbiBzY3JlZW5QaW5uaW5nQWN0aXZlID0gc3NwLmlzU2NyZWVuUGlubmluZ0FjdGl2ZSgpOworICAgICAgICBib29sZWFuIGlzVG9wVGFza0hvbWUgPSBTeXN0ZW1TZXJ2aWNlc1Byb3h5LmlzSG9tZVN0YWNrKHRvcFRhc2suc3RhY2tJZCk7CisgICAgICAgIGlmICh0b3BUYXNrICE9IG51bGwgJiYgIWlzVG9wVGFza0hvbWUgJiYgIXNjcmVlblBpbm5pbmdBY3RpdmUpIHsKICAgICAgICAgICAgIHNzcC5tb3ZlVGFza1RvRG9ja2VkU3RhY2sodG9wVGFzay5pZCwgc3RhY2tDcmVhdGVNb2RlLCBpbml0aWFsQm91bmRzKTsKICAgICAgICAgICAgIHNob3dSZWNlbnRzKGZhbHNlIC8qIHRyaWdnZXJlZEZyb21BbHRUYWIgKi8sIGRyYWdnaW5nSW5SZWNlbnRzLCBmYWxzZSAvKiBhbmltYXRlICovLAogICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHJlbG9hZFRhc2tzKi8pOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTU5LDYgKzU1NSwyNiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJlbG9hZHMgYWxsIHRoZSBsYXlvdXRzIGZvciB0aGUgaGVhZGVyIGJhciB0cmFuc2l0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCByZWxvYWRIZWFkZXJCYXJMYXlvdXQoKSB7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIgPSBMYXlvdXRJbmZsYXRlci5mcm9tKG1Db250ZXh0KTsKKworICAgICAgICBtU3RhdHVzQmFySGVpZ2h0ID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLnN0YXR1c19iYXJfaGVpZ2h0KTsKKyAgICAgICAgbU5hdkJhckhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5uYXZpZ2F0aW9uX2Jhcl9oZWlnaHQpOworICAgICAgICBtTmF2QmFyV2lkdGggPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4ubmF2aWdhdGlvbl9iYXJfd2lkdGgpOworICAgICAgICBtVGFza0JhckhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgUi5kaW1lbi5yZWNlbnRzX3Rhc2tfYmFyX2hlaWdodCk7CisgICAgICAgIG1EdW1teVN0YWNrVmlldyA9IG5ldyBUYXNrU3RhY2tWaWV3KG1Db250ZXh0LCBuZXcgVGFza1N0YWNrKCkpOworICAgICAgICBtSGVhZGVyQmFyID0gKFRhc2tWaWV3SGVhZGVyKSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LnJlY2VudHNfdGFza192aWV3X2hlYWRlciwKKyAgICAgICAgICAgICAgICBudWxsLCBmYWxzZSk7CisgICAgfQorCisgICAgLyoqCiAgICAgICogUHJlcGFyZXMgdGhlIGhlYWRlciBiYXIgbGF5b3V0IGZvciB0aGUgbmV4dCB0cmFuc2l0aW9uLCBpZiB0aGUgdGFzayB2aWV3IGJvdW5kcyBoYXMgY2hhbmdlZAogICAgICAqIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGl0IHdpbGwgYXR0ZW1wdCB0byByZS1tZWFzdXJlIGFuZCBsYXlvdXQgdGhlIGhlYWRlciBiYXIgdG8gdGhlIG5ldyBzaXplLgogICAgICAqCkBAIC01NjYsMTUgKzU4MiwxNiBAQAogICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhbHJlYWR5IGJvdW5kIChjYW4gYmUgZXhwZW5zaXZlKQogICAgICAqIEBwYXJhbSBzdGFjayB0aGUgc3RhY2sgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhY2sgbGF5b3V0IHdpdGgKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVsb2FkSGVhZGVyQmFyTGF5b3V0KGJvb2xlYW4gdHJ5QW5kQmluZFNlYXJjaFdpZGdldCwgVGFza1N0YWNrIHN0YWNrKSB7CisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUhlYWRlckJhckxheW91dChib29sZWFuIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQsCisgICAgICAgICAgICBUYXNrU3RhY2sgc3RhY2spIHsKICAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7CiAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICBSZWN0IHdpbmRvd1JlY3QgPSBzc3AuZ2V0V2luZG93UmVjdCgpOwogCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUKLSAgICAgICAgY29uZmlnLnVwZGF0ZShtQ29udGV4dCwgc3NwLCBzc3AuZ2V0V2luZG93UmVjdCgpKTsKKyAgICAgICAgY29uZmlnLnVwZGF0ZSh3aW5kb3dSZWN0KTsKIAotICAgICAgICBpZiAoIVJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5EaXNhYmxlU2VhcmNoQmFyICYmIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIgJiYgdHJ5QW5kQmluZFNlYXJjaFdpZGdldCkgewogICAgICAgICAgICAgLy8gVHJ5IGFuZCBwcmUtZW1wdGl2ZWx5IGJpbmQgdGhlIHNlYXJjaCB3aWRnZXQgb24gc3RhcnR1cCB0byBlbnN1cmUgdGhhdCB3ZQogICAgICAgICAgICAgLy8gaGF2ZSB0aGUgcmlnaHQgdGh1bWJuYWlsIGJvdW5kcyB0byBhbmltYXRlIHRvLgogICAgICAgICAgICAgLy8gTm90ZTogV2UgaGF2ZSB0byByZWxvYWQgdGhlIHdpZGdldCBpZCBiZWZvcmUgd2UgZ2V0IHRoZSB0YXNrIHN0YWNrIGJvdW5kcyBiZWxvdwpAQCAtNjMxLDcgKzY0OCw3IEBACiAgICAgICAgIHByZWxvYWRJY29uKHRvcFRhc2spOwogCiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgaGVhZGVyIGJhciBpZiBuZWNlc3NhcnkKLSAgICAgICAgcmVsb2FkSGVhZGVyQmFyTGF5b3V0KGZhbHNlIC8qIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQgKi8sIHN0YWNrKTsKKyAgICAgICAgdXBkYXRlSGVhZGVyQmFyTGF5b3V0KGZhbHNlIC8qIHRyeUFuZEJpbmRTZWFyY2hXaWRnZXQgKi8sIHN0YWNrKTsKIAogICAgICAgICAvLyBVcGRhdGUgdGhlIGRlc3RpbmF0aW9uIHJlY3QKICAgICAgICAgbUR1bW15U3RhY2tWaWV3LnVwZGF0ZUxheW91dEZvclN0YWNrKHN0YWNrKTsKQEAgLTc3Niw4ICs3OTMsMTAgQEAKICAgICAgICAgaWYgKHRvVHJhbnNmb3JtICE9IG51bGwgJiYgdG9UYXNrLmtleSAhPSBudWxsKSB7CiAgICAgICAgICAgICBCaXRtYXAgdGh1bWJuYWlsOwogICAgICAgICAgICAgc3luY2hyb25pemVkIChtSGVhZGVyQmFyTG9jaykgewotICAgICAgICAgICAgICAgIGludCB0b0hlYWRlcldpZHRoID0gKGludCkgKG1IZWFkZXJCYXIuZ2V0TWVhc3VyZWRXaWR0aCgpICogdG9UcmFuc2Zvcm0uc2NhbGUpOworICAgICAgICAgICAgICAgIGludCB0b0hlYWRlcldpZHRoID0gKGludCkgdG9UcmFuc2Zvcm0ucmVjdC53aWR0aCgpOwogICAgICAgICAgICAgICAgIGludCB0b0hlYWRlckhlaWdodCA9IChpbnQpIChtSGVhZGVyQmFyLmdldE1lYXN1cmVkSGVpZ2h0KCkgKiB0b1RyYW5zZm9ybS5zY2FsZSk7CisgICAgICAgICAgICAgICAgbUhlYWRlckJhci5vblRhc2tWaWV3U2l6ZUNoYW5nZWQoKGludCkgdG9UcmFuc2Zvcm0ucmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgdG9UcmFuc2Zvcm0ucmVjdC5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgdGh1bWJuYWlsID0gQml0bWFwLmNyZWF0ZUJpdG1hcCh0b0hlYWRlcldpZHRoLCB0b0hlYWRlckhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKICAgICAgICAgICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVRyYW5zaXRpb25UaHVtYm5haWxEZWJ1Z01vZGUpIHsKQEAgLTgxNSw3ICs4MzQsNyBAQAogICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBzSW5zdGFuY2VMb2FkUGxhbi5nZXRUYXNrU3RhY2soKTsKIAogICAgICAgICAvLyBVcGRhdGUgdGhlIGhlYWRlciBiYXIgaWYgbmVjZXNzYXJ5Ci0gICAgICAgIHJlbG9hZEhlYWRlckJhckxheW91dChmYWxzZSAvKiB0cnlBbmRCaW5kU2VhcmNoV2lkZ2V0ICovLCBzdGFjayk7CisgICAgICAgIHVwZGF0ZUhlYWRlckJhckxheW91dChmYWxzZSAvKiB0cnlBbmRCaW5kU2VhcmNoV2lkZ2V0ICovLCBzdGFjayk7CiAKICAgICAgICAgLy8gUHJlcGFyZSB0aGUgZHVtbXkgc3RhY2sgZm9yIHRoZSB0cmFuc2l0aW9uCiAgICAgICAgIG1EdW1teVN0YWNrVmlldy51cGRhdGVMYXlvdXRGb3JTdGFjayhzdGFjayk7CkBAIC04NDgsMTEgKzg2NywxOSBAQAogICAgICAgICBpZiAoIXVzZVRodW1ibmFpbFRyYW5zaXRpb24pIHsKICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHRodW1ibmFpbCB0cmFuc2l0aW9uLCBidXQgaXMgbGF1bmNoaW5nIGZyb20gaG9tZSBpbnRvIHJlY2VudHMsIHRoZW4KICAgICAgICAgICAgIC8vIHVzZSBhIHF1aWNrIGhvbWUgdHJhbnNpdGlvbiBhbmQgZG8gdGhlIGFuaW1hdGlvbiBmcm9tIGhvbWUKLSAgICAgICAgICAgIGlmICghUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkRpc2FibGVTZWFyY2hCYXIgJiYgaGFzUmVjZW50VGFza3MpIHsKKyAgICAgICAgICAgIGlmIChoYXNSZWNlbnRUYXNrcykgewogICAgICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICAgICAgICAgIFN0cmluZyBob21lQWN0aXZpdHlQYWNrYWdlID0gc3NwLmdldEhvbWVBY3Rpdml0eVBhY2thZ2VOYW1lKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNlYXJjaFdpZGdldFBhY2thZ2UgPSBQcmVmcy5nZXRTdHJpbmcobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQcmVmcy5LZXkuT1ZFUlZJRVdfU0VBUkNIX0FQUF9XSURHRVRfUEFDS0FHRSwgbnVsbCk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHNlYXJjaFdpZGdldFBhY2thZ2UgPSBudWxsOworICAgICAgICAgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU2VhcmNoQmFyKSB7CisgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdpZGdldFBhY2thZ2UgPSBQcmVmcy5nZXRTdHJpbmcobUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZnMuS2V5Lk9WRVJWSUVXX1NFQVJDSF9BUFBfV0lER0VUX1BBQ0tBR0UsIG51bGwpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEFwcFdpZGdldFByb3ZpZGVySW5mbyBzZWFyY2hXaWRnZXRJbmZvID0gc3NwLnJlc29sdmVTZWFyY2hBcHBXaWRnZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaFdpZGdldEluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV2lkZ2V0UGFja2FnZSA9IHNlYXJjaFdpZGdldEluZm8ucHJvdmlkZXIuZ2V0UGFja2FnZU5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIERldGVybWluZSB3aGV0aGVyIHdlIGFyZSBjb21pbmcgZnJvbSBhIHNlYXJjaCBvd25lZCBob21lIGFjdGl2aXR5CiAgICAgICAgICAgICAgICAgYm9vbGVhbiBmcm9tU2VhcmNoSG9tZSA9IChob21lQWN0aXZpdHlQYWNrYWdlICE9IG51bGwpICYmCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzUmVzaXplVGFza0RpYWxvZy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvUmVjZW50c1Jlc2l6ZVRhc2tEaWFsb2cuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQxNTg0NS4uMDAwMDAwMAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9SZWNlbnRzUmVzaXplVGFza0RpYWxvZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuYXBwLkRpYWxvZ0ZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlN5c3RlbVNlcnZpY2VzUHJveHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuUmVjZW50c1ZpZXc7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7Ci0KLS8qKgotICogQSBoZWxwZXIgZm9yIHRoZSBkaWFsb2dzIHRoYXQgc2hvdyB3aGVuIHRhc2sgZGVidWdnaW5nIGlzIG9uLgotICovCi1wdWJsaWMgY2xhc3MgUmVjZW50c1Jlc2l6ZVRhc2tEaWFsb2cgZXh0ZW5kcyBEaWFsb2dGcmFnbWVudCB7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSZWNlbnRzUmVzaXplVGFza0RpYWxvZyI7Ci0KLSAgICAvLyBUaGUgdmFyaW91cyB3aW5kb3cgYXJyYW5nZW1lbnRzIHdlIGNhbiBoYW5kbGUuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQUNFX0xFRlQgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQTEFDRV9SSUdIVCA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQUNFX1RPUCA9IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQUNFX0JPVFRPTSA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQUNFX1RPUF9MRUZUID0gNTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUExBQ0VfVE9QX1JJR0hUID0gNjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUExBQ0VfQk9UVE9NX0xFRlQgPSA3OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQTEFDRV9CT1RUT01fUklHSFQgPSA4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQTEFDRV9GVUxMID0gOTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUExBQ0VfRE9DS19MRUZUID0gMTA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFBMQUNFX0RPQ0tfUklHSFQgPSAxMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUExBQ0VfRE9DS19UT1AgPSAxMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUExBQ0VfRE9DS19CT1RUT00gPSAxMzsKLQotICAgIC8vIFRoZSBidXR0b24gcmVzb3VyY2UgSUQgY29tYmluZWQgd2l0aCB0aGUgYXJyYW5nZW1lbnQgY29tbWFuZC4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXVtdIEJVVFRPTl9ERUZJTklUSU9OUyA9Ci0gICAgICAgICAgIHt7Ui5pZC5wbGFjZV9kb2NrX2xlZnQsIFBMQUNFX0RPQ0tfTEVGVH0sCi0gICAgICAgICAgICB7Ui5pZC5wbGFjZV9kb2NrX3JpZ2h0LCBQTEFDRV9ET0NLX1JJR0hUfSwKLSAgICAgICAgICAgIHtSLmlkLnBsYWNlX2RvY2tfdG9wLCBQTEFDRV9ET0NLX1RPUH0sCi0gICAgICAgICAgICB7Ui5pZC5wbGFjZV9kb2NrX2JvdHRvbSwgUExBQ0VfRE9DS19CT1RUT019LAotICAgICAgICAgICAge1IuaWQucGxhY2VfbGVmdCwgUExBQ0VfTEVGVH0sCi0gICAgICAgICAgICB7Ui5pZC5wbGFjZV9yaWdodCwgUExBQ0VfUklHSFR9LAotICAgICAgICAgICAge1IuaWQucGxhY2VfdG9wLCBQTEFDRV9UT1B9LAotICAgICAgICAgICAge1IuaWQucGxhY2VfYm90dG9tLCBQTEFDRV9CT1RUT019LAotICAgICAgICAgICAge1IuaWQucGxhY2VfdG9wX2xlZnQsIFBMQUNFX1RPUF9MRUZUfSwKLSAgICAgICAgICAgIHtSLmlkLnBsYWNlX3RvcF9yaWdodCwgUExBQ0VfVE9QX1JJR0hUfSwKLSAgICAgICAgICAgIHtSLmlkLnBsYWNlX2JvdHRvbV9sZWZ0LCBQTEFDRV9CT1RUT01fTEVGVH0sCi0gICAgICAgICAgICB7Ui5pZC5wbGFjZV9ib3R0b21fcmlnaHQsIFBMQUNFX0JPVFRPTV9SSUdIVH0sCi0gICAgICAgICAgICB7Ui5pZC5wbGFjZV9mdWxsLCBQTEFDRV9GVUxMfX07Ci0KLSAgICAvLyBUaGUgdGFzayB3ZSB3YW50IHRvIHJlc2l6ZS4KLSAgICBwcml2YXRlIEZyYWdtZW50TWFuYWdlciBtRnJhZ21lbnRNYW5hZ2VyOwotICAgIHByaXZhdGUgVmlldyBtUmVzaXplVGFza0RpYWxvZ0NvbnRlbnQ7Ci0gICAgcHJpdmF0ZSBSZWNlbnRzQWN0aXZpdHkgbVJlY2VudHNBY3Rpdml0eTsKLSAgICBwcml2YXRlIFJlY2VudHNWaWV3IG1SZWNlbnRzVmlldzsKLSAgICBwcml2YXRlIFJlY3RbXSBtQm91bmRzID0ge25ldyBSZWN0KCksIG5ldyBSZWN0KCksIG5ldyBSZWN0KCksIG5ldyBSZWN0KCl9OwotICAgIHByaXZhdGUgVGFza1tdIG1UYXNrcyA9IHtudWxsLCBudWxsLCBudWxsLCBudWxsfTsKLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSBGcmFnbWVudE1hbmFnZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgUmVjZW50c1Jlc2l6ZVRhc2tEaWFsb2coKSB7Ci0gICAgfQotCi0gICAgcHVibGljIFJlY2VudHNSZXNpemVUYXNrRGlhbG9nKEZyYWdtZW50TWFuYWdlciBtZ3IsIFJlY2VudHNBY3Rpdml0eSBhY3Rpdml0eSkgewotICAgICAgICBtRnJhZ21lbnRNYW5hZ2VyID0gbWdyOwotICAgICAgICBtUmVjZW50c0FjdGl2aXR5ID0gYWN0aXZpdHk7Ci0gICAgfQotCi0gICAgLyoqIFNob3dzIHRoZSByZXNpemUtdGFzayBkaWFsb2cuICovCi0gICAgdm9pZCBzaG93UmVzaXplVGFza0RpYWxvZyhUYXNrIG1haW5UYXNrLCBSZWNlbnRzVmlldyBydikgewotICAgICAgICBtVGFza3NbMF0gPSBtYWluVGFzazsKLSAgICAgICAgbVJlY2VudHNWaWV3ID0gcnY7Ci0gICAgICAgIHNob3dBbGxvd2luZ1N0YXRlTG9zcyhtRnJhZ21lbnRNYW5hZ2VyLCBUQUcpOwotICAgIH0KLQotICAgIC8qKiBDcmVhdGVzIGEgbmV3IHJlc2l6ZS10YXNrIGRpYWxvZy4gKi8KLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlUmVzaXplVGFza0RpYWxvZyhMYXlvdXRJbmZsYXRlciBpbmZsYXRlciwgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyKSB7Ci0gICAgICAgIGJ1aWxkZXIuc2V0VGl0bGUoUi5zdHJpbmcucmVjZW50c19jYXB0aW9uX3Jlc2l6ZSk7Ci0gICAgICAgIG1SZXNpemVUYXNrRGlhbG9nQ29udGVudCA9Ci0gICAgICAgICAgICAgICAgaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5yZWNlbnRzX3Rhc2tfcmVzaXplX2RpYWxvZywgbnVsbCwgZmFsc2UpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQlVUVE9OX0RFRklOSVRJT05TLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBCdXR0b24gYiA9IChCdXR0b24pbVJlc2l6ZVRhc2tEaWFsb2dDb250ZW50LmZpbmRWaWV3QnlJZChCVVRUT05fREVGSU5JVElPTlNbaV1bMF0pOwotICAgICAgICAgICAgaWYgKGIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBCVVRUT05fREVGSU5JVElPTlNbaV1bMV07Ci0gICAgICAgICAgICAgICAgYi5zZXRPbkNsaWNrTGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUExBQ0VfRE9DS19MRUZUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQTEFDRV9ET0NLX1JJR0hUOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQTEFDRV9ET0NLX1RPUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUExBQ0VfRE9DS19CT1RUT006Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VEb2NrVGFza3MoYWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VUYXNrcyhhY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBidWlsZGVyLnNldE5lZ2F0aXZlQnV0dG9uKFIuc3RyaW5nLmNhbmNlbCwgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7Ci0gICAgICAgICAgICAgICAgZGlzbWlzc0FsbG93aW5nU3RhdGVMb3NzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGJ1aWxkZXIuc2V0VmlldyhtUmVzaXplVGFza0RpYWxvZ0NvbnRlbnQpOwotICAgIH0KLQotICAgIC8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGxhY2Ugd2luZG93KHMpIG9uIHRoZSBkaXNwbGF5IGFjY29yZGluZyB0byBhbiBhcnJhbmdlbWVudCByZXF1ZXN0LiAqLwotICAgIHByaXZhdGUgdm9pZCBwbGFjZVRhc2tzKGludCBhcnJhbmdlbWVudCkgewotICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKLSAgICAgICAgUmVjdCByZWN0ID0gc3NwLmdldERpc3BsYXlSZWN0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUJvdW5kcy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgbUJvdW5kc1tpXS5zZXQocmVjdCk7Ci0gICAgICAgICAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgbVRhc2tzW2ldID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnQgYWRkaXRpb25hbFRhc2tzID0gMDsKLSAgICAgICAgc3dpdGNoIChhcnJhbmdlbWVudCkgewotICAgICAgICAgICAgY2FzZSBQTEFDRV9MRUZUOgotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMF0ucmlnaHQgPSBtQm91bmRzWzBdLmNlbnRlclgoKTsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzFdLmxlZnQgPSBtQm91bmRzWzBdLnJpZ2h0OwotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxUYXNrcyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBMQUNFX1JJR0hUOgotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0ucmlnaHQgPSBtQm91bmRzWzFdLmNlbnRlclgoKTsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdLmxlZnQgPSBtQm91bmRzWzFdLnJpZ2h0OwotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxUYXNrcyA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBMQUNFX1RPUDoKLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdLmJvdHRvbSA9IG1Cb3VuZHNbMF0uY2VudGVyWSgpOwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0udG9wID0gbUJvdW5kc1swXS5ib3R0b207Ci0gICAgICAgICAgICAgICAgYWRkaXRpb25hbFRhc2tzID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUExBQ0VfQk9UVE9NOgotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0uYm90dG9tID0gbUJvdW5kc1sxXS5jZW50ZXJZKCk7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1swXS50b3AgPSBtQm91bmRzWzFdLmJvdHRvbTsKLSAgICAgICAgICAgICAgICBhZGRpdGlvbmFsVGFza3MgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQTEFDRV9UT1BfTEVGVDogIC8vIFRMLCBUUiwgQkwsIEJSCi0gICAgICAgICAgICAgICAgbUJvdW5kc1swXS5yaWdodCA9IG1Cb3VuZHNbMF0uY2VudGVyWCgpOwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMF0uYm90dG9tID0gbUJvdW5kc1swXS5jZW50ZXJZKCk7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1sxXS5sZWZ0ID0gbUJvdW5kc1swXS5yaWdodDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzFdLmJvdHRvbSA9IG1Cb3VuZHNbMF0uYm90dG9tOwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMl0ucmlnaHQgPSBtQm91bmRzWzBdLnJpZ2h0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMl0udG9wID0gbUJvdW5kc1swXS5ib3R0b207Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1szXS5sZWZ0ID0gbUJvdW5kc1swXS5yaWdodDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzNdLnRvcCA9IG1Cb3VuZHNbMF0uYm90dG9tOwotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxUYXNrcyA9IDM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBMQUNFX1RPUF9SSUdIVDogIC8vIFRSLCBUTCwgQlIsIEJMCi0gICAgICAgICAgICAgICAgbUJvdW5kc1swXS5sZWZ0ID0gbUJvdW5kc1swXS5jZW50ZXJYKCk7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1swXS5ib3R0b20gPSBtQm91bmRzWzBdLmNlbnRlclkoKTsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzFdLnJpZ2h0ID0gbUJvdW5kc1swXS5sZWZ0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0uYm90dG9tID0gbUJvdW5kc1swXS5ib3R0b207Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1syXS5sZWZ0ID0gbUJvdW5kc1swXS5sZWZ0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMl0udG9wID0gbUJvdW5kc1swXS5ib3R0b207Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1szXS5yaWdodCA9IG1Cb3VuZHNbMF0ubGVmdDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzNdLnRvcCA9IG1Cb3VuZHNbMF0uYm90dG9tOwotICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxUYXNrcyA9IDM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBMQUNFX0JPVFRPTV9MRUZUOiAgLy8gQkwsIEJSLCBUTCwgVFIKLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdLnJpZ2h0ID0gbUJvdW5kc1swXS5jZW50ZXJYKCk7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1swXS50b3AgPSBtQm91bmRzWzBdLmNlbnRlclkoKTsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzFdLmxlZnQgPSBtQm91bmRzWzBdLnJpZ2h0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0udG9wID0gbUJvdW5kc1swXS50b3A7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1syXS5yaWdodCA9IG1Cb3VuZHNbMF0ucmlnaHQ7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1syXS5ib3R0b20gPSBtQm91bmRzWzBdLnRvcDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzNdLmxlZnQgPSBtQm91bmRzWzBdLnJpZ2h0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbM10uYm90dG9tID0gbUJvdW5kc1swXS50b3A7Ci0gICAgICAgICAgICAgICAgYWRkaXRpb25hbFRhc2tzID0gMzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUExBQ0VfQk9UVE9NX1JJR0hUOiAgLy8gQlIsIEJMLCBUUiwgVEwKLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdLmxlZnQgPSBtQm91bmRzWzBdLmNlbnRlclgoKTsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdLnRvcCA9IG1Cb3VuZHNbMF0uY2VudGVyWSgpOwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbMV0ucmlnaHQgPSBtQm91bmRzWzBdLmxlZnQ7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1sxXS50b3AgPSBtQm91bmRzWzBdLnRvcDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzJdLmxlZnQgPSBtQm91bmRzWzBdLmxlZnQ7Ci0gICAgICAgICAgICAgICAgbUJvdW5kc1syXS5ib3R0b20gPSBtQm91bmRzWzBdLnRvcDsKLSAgICAgICAgICAgICAgICBtQm91bmRzWzNdLnJpZ2h0ID0gbUJvdW5kc1swXS5sZWZ0OwotICAgICAgICAgICAgICAgIG1Cb3VuZHNbM10uYm90dG9tID0gbUJvdW5kc1swXS50b3A7Ci0gICAgICAgICAgICAgICAgYWRkaXRpb25hbFRhc2tzID0gMzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUExBQ0VfRlVMTDoKLSAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNoYW5nZS4KLSAgICAgICAgICAgICAgICBtQm91bmRzWzBdID0gbmV3IFJlY3QoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEdldCB0aGUgb3RoZXIgdGFza3MuCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGFkZGl0aW9uYWxUYXNrcyAmJiBtVGFza3NbaSAtIDFdICE9IG51bGw7ICsraSkgewotICAgICAgICAgICAgbVRhc2tzW2ldID0gbVJlY2VudHNWaWV3LmdldE5leHRUYXNrT3JUb3BUYXNrKG1UYXNrc1tpIC0gMV0pOwotICAgICAgICAgICAgLy8gRG8gc3RvcCBpZiB3ZSBjaXJjbGVkIGJhY2sgdG8gdGhlIGZpcnN0IGl0ZW0uCi0gICAgICAgICAgICBpZiAobVRhc2tzW2ldID09IG1UYXNrc1swXSkgewotICAgICAgICAgICAgICAgIG1UYXNrc1tpXSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgcmlkIG9mIHRoZSBkaWFsb2cuCi0gICAgICAgIGRpc21pc3NBbGxvd2luZ1N0YXRlTG9zcygpOwotICAgICAgICBtUmVjZW50c0FjdGl2aXR5LmRpc21pc3NSZWNlbnRzVG9Ib21lV2l0aG91dFRyYW5zaXRpb25BbmltYXRpb24oKTsKLQotICAgICAgICAvLyBTaG93IHRhc2tzIGFzIHRoZXkgbWlnaHQgbm90IGJlIGN1cnJlbnRseSB2aXNpYmxlIC0gYmVnaW5uaW5nIHdpdGggdGhlIG9sZGVzdCBzbyB0aGF0Ci0gICAgICAgIC8vIHRoZSBmb2N1cyBlbmRzIG9uIHRoZSBzZWxlY3RlZCBvbmUuCi0gICAgICAgIGZvciAoaW50IGkgPSBhZGRpdGlvbmFsVGFza3M7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBpZiAobVRhc2tzW2ldICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUmVjZW50c1ZpZXcubGF1bmNoVGFzayhtVGFza3NbaV0sIG1Cb3VuZHNbaV0sIEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGxhY2UgZG9ja2VkIHdpbmRvdyhzKSBvbiB0aGUgZGlzcGxheSBhY2NvcmRpbmcgdG8gYW4gYXJyYW5nZW1lbnQgcmVxdWVzdC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcGxhY2VEb2NrVGFza3MoaW50IGFycmFuZ2VtZW50KSB7Ci0gICAgICAgIGludCBjcmVhdGVNb2RlID0gQWN0aXZpdHlNYW5hZ2VyLkRPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVDsKLSAgICAgICAgc3dpdGNoIChhcnJhbmdlbWVudCkgewotICAgICAgICAgICAgY2FzZSBQTEFDRV9ET0NLX0xFRlQ6Ci0gICAgICAgICAgICAgICAgY3JlYXRlTW9kZSA9IEFjdGl2aXR5TWFuYWdlci5ET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfVE9QX09SX0xFRlQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFBMQUNFX0RPQ0tfVE9QOgotICAgICAgICAgICAgICAgIGNyZWF0ZU1vZGUgPSBBY3Rpdml0eU1hbmFnZXIuRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBQTEFDRV9ET0NLX1JJR0hUOgotICAgICAgICAgICAgICAgIGNyZWF0ZU1vZGUgPSBBY3Rpdml0eU1hbmFnZXIuRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX0JPVFRPTV9PUl9SSUdIVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgUExBQ0VfRE9DS19CT1RUT006Ci0gICAgICAgICAgICAgICAgY3JlYXRlTW9kZSA9IEFjdGl2aXR5TWFuYWdlci5ET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfQk9UVE9NX09SX1JJR0hUOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRGlzbWlzcyB0aGUgZGlhbG9nIGJlZm9yZSB0cnlpbmcgdG8gbGF1bmNoIHRoZSB0YXNrCi0gICAgICAgIGRpc21pc3NBbGxvd2luZ1N0YXRlTG9zcygpOwotCi0gICAgICAgIGlmIChtVGFza3NbMF0ua2V5LnN0YWNrSWQgIT0gRE9DS0VEX1NUQUNLX0lEKSB7Ci0gICAgICAgICAgICBpbnQgdGFza0lkID0gbVRhc2tzWzBdLmtleS5pZDsKLSAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwotICAgICAgICAgICAgc3NwLnN0YXJ0VGFza0luRG9ja2VkTW9kZSh0YXNrSWQsIGNyZWF0ZU1vZGUpOwotICAgICAgICAgICAgbVJlY2VudHNWaWV3LmxhdW5jaFRhc2sobVRhc2tzWzBdLCBudWxsLCBET0NLRURfU1RBQ0tfSUQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgVG9hc3QubWFrZVRleHQoZ2V0Q29udGV4dCgpLCAiQWxyZWFkeSBkb2NrZWQiLCBUb2FzdC5MRU5HVEhfU0hPUlQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIERpYWxvZyBvbkNyZWF0ZURpYWxvZyhCdW5kbGUgYXJncykgewotICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IGdldEFjdGl2aXR5KCkuZ2V0TGF5b3V0SW5mbGF0ZXIoKTsKLSAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoZ2V0QWN0aXZpdHkoKSk7Ci0gICAgICAgIGNyZWF0ZVJlc2l6ZVRhc2tEaWFsb2coaW5mbGF0ZXIsIGJ1aWxkZXIpOwotICAgICAgICByZXR1cm4gYnVpbGRlci5jcmVhdGUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvRXZlbnRCdXMuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9FdmVudEJ1cy5qYXZhCmluZGV4IGQ3MjIxOGYuLmIwYzhmZjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9FdmVudEJ1cy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9FdmVudEJ1cy5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLk11dGFibGVCb29sZWFuOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5SZWZlcmVuY2VDb3VudGVkVHJpZ2dlcjsKIAogaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKQEAgLTIyMCw2ICsyMjEsMjAgQEAKICAgICAgICAgLy8gT25seSBhY2Nlc3NpYmxlIGZyb20gZGVyaXZlZCBldmVudHMKICAgICAgICAgcHJvdGVjdGVkIEV2ZW50KCkge30KIAorICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIGJ5IHRoZSBFdmVudEJ1cyBwcmlvciB0byBkaXNwYXRjaGluZyB0aGlzIGV2ZW50IHRvIGFueSBzdWJzY3JpYmVyIG9mIHRoaXMgZXZlbnQuCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uUHJlRGlzcGF0Y2goKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogQ2FsbGVkIGJ5IHRoZSBFdmVudEJ1cyBhZnRlciBkaXNwYXRjaGluZyB0aGlzIGV2ZW50IHRvIGV2ZXJ5IHN1YnNjcmliZXIgb2YgdGhpcyBldmVudC4KKyAgICAgICAgICovCisgICAgICAgIHZvaWQgb25Qb3N0RGlzcGF0Y2goKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIH0KKwogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CiAgICAgICAgICAgICBFdmVudCBldnQgPSAoRXZlbnQpIHN1cGVyLmNsb25lKCk7CkBAIC0yMzAsNiArMjQ1LDUxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogQW4gZXZlbnQgdGhhdCByZXByZXNlbnRzIGFuIGFuaW1hdGVkIHN0YXRlIGNoYW5nZSwgd2hpY2ggYWxsb3dzIHN1YnNjcmliZXJzIHRvIGNvb3JkaW5hdGUKKyAgICAgKiBjYWxsYmFja3Mgd2hpY2ggaGFwcGVuIGFmdGVyIHRoZSBhbmltYXRpb24gaGFzIHRha2VuIHBsYWNlLgorICAgICAqCisgICAgICogSW50ZXJuYWxseSwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IGluY3JlbWVudCgpIGFuZCBkZWNyZW1lbnQoKSB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW5kIHRoZQorICAgICAqIGFmdGVyIHRoZSBldmVudCBpcyBkaXNwYXRjaGVkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQW5pbWF0ZWRFdmVudCBleHRlbmRzIEV2ZW50IHsKKworICAgICAgICBwcml2YXRlIGZpbmFsIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIG1UcmlnZ2VyID0gbmV3IFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKCk7CisKKyAgICAgICAgLy8gT25seSBhY2Nlc3NpYmxlIGZyb20gZGVyaXZlZCBldmVudHMKKyAgICAgICAgcHJvdGVjdGVkIEFuaW1hdGVkRXZlbnQoKSB7fQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBSZXR1cm5zIHRoZSByZWZlcmVuY2UgY291bnRlZCB0cmlnZ2VyIHRoYXQgY29vcmRpbmF0ZXMgdGhlIGFuaW1hdGlvbnMgZm9yIHRoaXMgZXZlbnQuCisgICAgICAgICAqLworICAgICAgICBwdWJsaWMgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgZ2V0QW5pbWF0aW9uVHJpZ2dlcigpIHsKKyAgICAgICAgICAgIHJldHVybiBtVHJpZ2dlcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBBZGRzIGEgY2FsbGJhY2sgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgc3RhdGUgaGFzIGNoYW5nZWQgcmVnYXJkbGVzcyBvZgorICAgICAgICAgKiB3aGV0aGVyIGFuIGFjdHVhbCBhbmltYXRpb24gdG9vayBwbGFjZS4KKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIGFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhSdW5uYWJsZSByKSB7CisgICAgICAgICAgICBtVHJpZ2dlci5hZGRMYXN0RGVjcmVtZW50UnVubmFibGUocik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBvblByZURpc3BhdGNoKCkgeworICAgICAgICAgICAgbVRyaWdnZXIuaW5jcmVtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBvblBvc3REaXNwYXRjaCgpIHsKKyAgICAgICAgICAgIG1UcmlnZ2VyLmRlY3JlbWVudCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3cgbmV3IENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBBbiBpbnRlci1wcm9jZXNzIGV2ZW50IHN1cGVyIGNsYXNzIHRoYXQgYWxsb3dzIHVzIHRvIHRyYWNrIHVzZXIgc3RhdGUgYWNyb3NzIHN1YnNjcmliZXIKICAgICAgKiBpbnZvY2F0aW9ucy4KICAgICAgKi8KQEAgLTYwMiw4ICs2NjIsNiBAQAogCiAgICAgLyoqCiAgICAgICogUmVnaXN0ZXJzIGEgbmV3IHN1YnNjcmliZXIuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGlzCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyU3Vic2NyaWJlcihPYmplY3Qgc3Vic2NyaWJlciwgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgTXV0YWJsZUJvb2xlYW4gaGFzSW50ZXJwcm9jZXNzRXZlbnRzQ2hhbmdlZE91dCkgewpAQCAtNzA2LDYgKzc2NCwxMSBAQAogICAgICAgICBpZiAoZXZlbnRIYW5kbGVycyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICAvLyBQcmVwYXJlIHRoaXMgZXZlbnQKKyAgICAgICAgYm9vbGVhbiBoYXNQb3N0ZWRFdmVudCA9IGZhbHNlOworICAgICAgICBldmVudC5vblByZURpc3BhdGNoKCk7CisKICAgICAgICAgLy8gV2UgbmVlZCB0byBjbG9uZSB0aGUgbGlzdCBpbiBjYXNlIGEgc3Vic2NyaWJlciB1bnJlZ2lzdGVycyBpdHNlbGYgZHVyaW5nIHRyYXZlcnNhbAogICAgICAgICBldmVudEhhbmRsZXJzID0gKEFycmF5TGlzdDxFdmVudEhhbmRsZXI+KSBldmVudEhhbmRsZXJzLmNsb25lKCk7CiAgICAgICAgIGZvciAoZmluYWwgRXZlbnRIYW5kbGVyIGV2ZW50SGFuZGxlciA6IGV2ZW50SGFuZGxlcnMpIHsKQEAgLTcxNywxMSArNzgwLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0V2ZW50KGV2ZW50SGFuZGxlciwgZXZlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgaGFzUG9zdGVkRXZlbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFdmVudChldmVudEhhbmRsZXIsIGV2ZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvLyBDbGVhbiB1cCBhZnRlciB0aGlzIGV2ZW50LCBkZWZlcnJpbmcgdW50aWwgYWxsIHN1YnNjcmliZXJzIGhhdmUgYmVlbiBjYWxsZWQKKyAgICAgICAgaWYgKGhhc1Bvc3RlZEV2ZW50KSB7CisgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50Lm9uUG9zdERpc3BhdGNoKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBldmVudC5vblBvc3REaXNwYXRjaCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvRGlzbWlzc1JlY2VudHNUb0hvbWVBbmltYXRpb25TdGFydGVkLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvRGlzbWlzc1JlY2VudHNUb0hvbWVBbmltYXRpb25TdGFydGVkLmphdmEKaW5kZXggNWYzZTgzMC4uZTdiZTg1OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L0Rpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9EaXNtaXNzUmVjZW50c1RvSG9tZUFuaW1hdGlvblN0YXJ0ZWQuamF2YQpAQCAtMjEsNiArMjEsMTEgQEAKIC8qKgogICogVGhpcyBpcyBzZW50IHdoZW4gdGhlIHRhc2sgYW5pbWF0aW9uIHdoZW4gZGlzbWlzc2luZyBSZWNlbnRzIHN0YXJ0cy4KICAqLwotcHVibGljIGNsYXNzIERpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZCBleHRlbmRzIEV2ZW50QnVzLkV2ZW50IHsKLSAgICAvLyBTaW1wbGUgZXZlbnQKK3B1YmxpYyBjbGFzcyBEaXNtaXNzUmVjZW50c1RvSG9tZUFuaW1hdGlvblN0YXJ0ZWQgZXh0ZW5kcyBFdmVudEJ1cy5BbmltYXRlZEV2ZW50IHsKKworICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGFuaW1hdGVkOworCisgICAgcHVibGljIERpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZChib29sZWFuIGFuaW1hdGVkKSB7CisgICAgICAgIHRoaXMuYW5pbWF0ZWQgPSBhbmltYXRlZDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uQ29tcGxldGVkRXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9FbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudC5qYXZhCmluZGV4IGIzMWYzMjAuLjkxODg3NWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9FbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9FbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudC5qYXZhCkBAIC0yMyw2ICsyMyw2IEBACiAgKiB3ZSBjYW4gc3RhcnQgaW4tYXBwIGFuaW1hdGlvbnMgc28gdGhhdCB0aGV5IGRvbid0IGNvbmZsaWN0IHdpdGggdGhlIHdpbmRvdyB0cmFuc2l0aW9uIGludG8KICAqIFJlY2VudHMuCiAgKi8KLXB1YmxpYyBjbGFzcyBFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudCBleHRlbmRzIEV2ZW50QnVzLkV2ZW50IHsKK3B1YmxpYyBjbGFzcyBFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogICAgIC8vIFNpbXBsZSBldmVudAogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvRXhpdFJlY2VudHNXaW5kb3dGaXJzdEFuaW1hdGlvbkZyYW1lRXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9FeGl0UmVjZW50c1dpbmRvd0ZpcnN0QW5pbWF0aW9uRnJhbWVFdmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL0V4aXRSZWNlbnRzV2luZG93Rmlyc3RBbmltYXRpb25GcmFtZUV2ZW50LmphdmEKcmVuYW1lIHRvIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9FeGl0UmVjZW50c1dpbmRvd0ZpcnN0QW5pbWF0aW9uRnJhbWVFdmVudC5qYXZhCmluZGV4IDhhZThjNTMuLmZhODA2ZWIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL0V4aXRSZWNlbnRzV2luZG93Rmlyc3RBbmltYXRpb25GcmFtZUV2ZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L0V4aXRSZWNlbnRzV2luZG93Rmlyc3RBbmltYXRpb25GcmFtZUV2ZW50LmphdmEKQEAgLTE0LDcgKzE0LDcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50czsKK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHk7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L0hpZGVIaXN0b3J5RXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9IaWRlSGlzdG9yeUV2ZW50LmphdmEKaW5kZXggMzRjMzVhNy4uYWYzZWViMCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L0hpZGVIaXN0b3J5RXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvSGlkZUhpc3RvcnlFdmVudC5qYXZhCkBAIC0xNywyMiArMTcsMTUgQEAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHk7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuUmVmZXJlbmNlQ291bnRlZFRyaWdnZXI7CiAKIC8qKgogICogVGhpcyBpcyBzZW50IHdoZW4gdGhlIGhpc3RvcnkgdmlldyB3aWxsIGJlIGNsb3NlZC4KICAqLwotcHVibGljIGNsYXNzIEhpZGVIaXN0b3J5RXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CitwdWJsaWMgY2xhc3MgSGlkZUhpc3RvcnlFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogCiAgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gYW5pbWF0ZTsKLSAgICBwdWJsaWMgZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXI7CiAKICAgICBwdWJsaWMgSGlkZUhpc3RvcnlFdmVudChib29sZWFuIGFuaW1hdGUpIHsKLSAgICAgICAgdGhpcyhhbmltYXRlLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSGlkZUhpc3RvcnlFdmVudChib29sZWFuIGFuaW1hdGUsIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyKSB7CiAgICAgICAgIHRoaXMuYW5pbWF0ZSA9IGFuaW1hdGU7Ci0gICAgICAgIHRoaXMucG9zdEFuaW1hdGlvblRyaWdnZXIgPSBwb3N0QW5pbWF0aW9uVHJpZ2dlcjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvTGF1bmNoVGFza0V2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvTGF1bmNoVGFza0V2ZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiOTMwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9MYXVuY2hUYXNrRXZlbnQuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eTsKKworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2s7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrVmlldzsKKworLyoqCisgKiBUaGlzIGV2ZW50IGlzIHNlbnQgdG8gcmVxdWVzdCB0aGF0IGEgcGFydGljdWxhciB0YXNrIGlzIGxhdW5jaGVkLgorICovCitwdWJsaWMgY2xhc3MgTGF1bmNoVGFza0V2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworCisgICAgcHVibGljIGZpbmFsIFRhc2tWaWV3IHRhc2tWaWV3OworICAgIHB1YmxpYyBmaW5hbCBUYXNrIHRhc2s7CisgICAgcHVibGljIGZpbmFsIFJlY3QgdGFyZ2V0VGFza0JvdW5kczsKKyAgICBwdWJsaWMgZmluYWwgaW50IHRhcmdldFRhc2tTdGFjazsKKyAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkOworCisgICAgcHVibGljIExhdW5jaFRhc2tFdmVudChUYXNrVmlldyB0YXNrVmlldywgVGFzayB0YXNrLCBSZWN0IHRhcmdldFRhc2tCb3VuZHMsIGludCB0YXJnZXRUYXNrU3RhY2ssCisgICAgICAgICAgICBib29sZWFuIHNjcmVlblBpbm5pbmdSZXF1ZXN0ZWQpIHsKKyAgICAgICAgdGhpcy50YXNrVmlldyA9IHRhc2tWaWV3OworICAgICAgICB0aGlzLnRhc2sgPSB0YXNrOworICAgICAgICB0aGlzLnRhcmdldFRhc2tCb3VuZHMgPSB0YXJnZXRUYXNrQm91bmRzOworICAgICAgICB0aGlzLnRhcmdldFRhc2tTdGFjayA9IHRhcmdldFRhc2tTdGFjazsKKyAgICAgICAgdGhpcy5zY3JlZW5QaW5uaW5nUmVxdWVzdGVkID0gc2NyZWVuUGlubmluZ1JlcXVlc3RlZDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9MYXVuY2hUYXNrU3RhcnRlZEV2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvTGF1bmNoVGFza1N0YXJ0ZWRFdmVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MjVhYjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvTGF1bmNoVGFza1N0YXJ0ZWRFdmVudC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5OworCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrVmlldzsKKworLyoqCisgKiBUaGlzIGV2ZW50IGlzIHNlbnQgZm9sbG93aW5nIHtAbGluayBMYXVuY2hUYXNrRXZlbnR9IGFmdGVyIHRoZSBjYWxsIHRvIHRoZSBzeXN0ZW0gaXMgbWFkZSB0bworICogc3RhcnQgdGhlIHRhc2suCisgKi8KK3B1YmxpYyBjbGFzcyBMYXVuY2hUYXNrU3RhcnRlZEV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuQW5pbWF0ZWRFdmVudCB7CisKKyAgICBwdWJsaWMgZmluYWwgVGFza1ZpZXcgdGFza1ZpZXc7CisgICAgcHVibGljIGZpbmFsIGJvb2xlYW4gc2NyZWVuUGlubmluZ1JlcXVlc3RlZDsKKworICAgIHB1YmxpYyBMYXVuY2hUYXNrU3RhcnRlZEV2ZW50KFRhc2tWaWV3IHRhc2tWaWV3LCBib29sZWFuIHNjcmVlblBpbm5pbmdSZXF1ZXN0ZWQpIHsKKyAgICAgICAgdGhpcy50YXNrVmlldyA9IHRhc2tWaWV3OworICAgICAgICB0aGlzLnNjcmVlblBpbm5pbmdSZXF1ZXN0ZWQgPSBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L1Nob3dIaXN0b3J5RXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9TaG93SGlzdG9yeUV2ZW50LmphdmEKaW5kZXggODcwMTE5ZC4uYjM5ZDY0NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L1Nob3dIaXN0b3J5RXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvU2hvd0hpc3RvcnlFdmVudC5qYXZhCkBAIC0yMSw2ICsyMSw4IEBACiAvKioKICAqIFRoaXMgaXMgc2VudCB3aGVuIHRoZSBoaXN0b3J5IHZpZXcgYnV0dG9uIGlzIGNsaWNrZWQuCiAgKi8KLXB1YmxpYyBjbGFzcyBTaG93SGlzdG9yeUV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIFNob3dIaXN0b3J5RXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5BbmltYXRlZEV2ZW50IHsKKwogICAgIC8vIFNpbXBsZSBldmVudAorCiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvYWN0aXZpdHkvVGFza1N0YWNrVXBkYXRlZEV2ZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCA2MSUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YQpjb3B5IHRvIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy9hY3Rpdml0eS9UYXNrU3RhY2tVcGRhdGVkRXZlbnQuamF2YQppbmRleCBlMGQ4M2ZkLi43NTc5Y2Q4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL2FjdGl2aXR5L1Rhc2tTdGFja1VwZGF0ZWRFdmVudC5qYXZhCkBAIC0xNCwxOSArMTQsMjIgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWk7CitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOwogCiAvKioKLSAqIFRoaXMgaXMgc2VudCB3aGVuIGEge0BsaW5rIFRhc2t9IGlzIHJlc2l6ZWQuCisgKiBUaGlzIGlzIHNlbnQgYnkgdGhlIGFjdGl2aXR5IHdoZW5ldmVyIHRoZSB0YXNrIHN0YWNoIGhhcyBjaGFuZ2VkLgogICovCi1wdWJsaWMgY2xhc3MgUmVzaXplVGFza0V2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIFRhc2tTdGFja1VwZGF0ZWRFdmVudCBleHRlbmRzIEV2ZW50QnVzLkV2ZW50IHsKIAotICAgIHB1YmxpYyBmaW5hbCBUYXNrIHRhc2s7CisgICAgLyoqCisgICAgICogQSBuZXcgVGFza1N0YWNrIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgbGF0ZXN0IHN0YWNrIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBUYXNrU3RhY2sgc3RhY2s7CiAKLSAgICBwdWJsaWMgUmVzaXplVGFza0V2ZW50KFRhc2sgdGFzaykgewotICAgICAgICB0aGlzLnRhc2sgPSB0YXNrOworICAgIHB1YmxpYyBUYXNrU3RhY2tVcGRhdGVkRXZlbnQoVGFza1N0YWNrIHN0YWNrKSB7CisgICAgICAgIHRoaXMuc3RhY2sgPSBzdGFjazsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvRGVsZXRlVGFza0RhdGFFdmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YQpyZW5hbWUgdG8gcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL0RlbGV0ZVRhc2tEYXRhRXZlbnQuamF2YQppbmRleCBlMGQ4M2ZkLi40ZWQwMjcwIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL0RlbGV0ZVRhc2tEYXRhRXZlbnQuamF2YQpAQCAtMjAsMTMgKzIwLDE0IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwogCiAvKioKLSAqIFRoaXMgaXMgc2VudCB3aGVuIGEge0BsaW5rIFRhc2t9IGlzIHJlc2l6ZWQuCisgKiBUaGlzIGlzIHNlbnQgd2hlbiB0aGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiB7QGxpbmsgVGFza30gc2hvdWxkIGJlIGRlbGV0ZWQgZnJvbSB0aGUKKyAqIHN5c3RlbS4KICAqLwotcHVibGljIGNsYXNzIFJlc2l6ZVRhc2tFdmVudCBleHRlbmRzIEV2ZW50QnVzLkV2ZW50IHsKK3B1YmxpYyBjbGFzcyBEZWxldGVUYXNrRGF0YUV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgewogCiAgICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKIAotICAgIHB1YmxpYyBSZXNpemVUYXNrRXZlbnQoVGFzayB0YXNrKSB7CisgICAgcHVibGljIERlbGV0ZVRhc2tEYXRhRXZlbnQoVGFzayB0YXNrKSB7CiAgICAgICAgIHRoaXMudGFzayA9IHRhc2s7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL0Rpc21pc3NUYXNrVmlld0V2ZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvRGlzbWlzc1Rhc2tWaWV3RXZlbnQuamF2YQppbmRleCA5Njg4OTBhLi4xMTY1ZjRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvRGlzbWlzc1Rhc2tWaWV3RXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvRGlzbWlzc1Rhc2tWaWV3RXZlbnQuamF2YQpAQCAtMjEsMTUgKzIxLDE1IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrVmlldzsKIAogLyoqCi0gKiBUaGlzIGlzIHNlbnQgd2hlbiBhIHtAbGluayBUYXNrVmlld30gaGFzIGJlZW4gZGlzbWlzc2VkLgorICogVGhpcyBldmVudCBpcyBzZW50IHRvIHJlcXVlc3QgdGhhdCB0aGUgZ2l2ZW4ge0BsaW5rIFRhc2tWaWV3fSBpcyBkaXNtaXNzZWQuCiAgKi8KLXB1YmxpYyBjbGFzcyBEaXNtaXNzVGFza1ZpZXdFdmVudCBleHRlbmRzIEV2ZW50QnVzLkV2ZW50IHsKK3B1YmxpYyBjbGFzcyBEaXNtaXNzVGFza1ZpZXdFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogCi0gICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKICAgICBwdWJsaWMgZmluYWwgVGFza1ZpZXcgdGFza1ZpZXc7CisgICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKIAotICAgIHB1YmxpYyBEaXNtaXNzVGFza1ZpZXdFdmVudChUYXNrIHRhc2ssIFRhc2tWaWV3IHRhc2tWaWV3KSB7Ci0gICAgICAgIHRoaXMudGFzayA9IHRhc2s7CisgICAgcHVibGljIERpc21pc3NUYXNrVmlld0V2ZW50KFRhc2tWaWV3IHRhc2tWaWV3LCBUYXNrIHRhc2spIHsKICAgICAgICAgdGhpcy50YXNrVmlldyA9IHRhc2tWaWV3OworICAgICAgICB0aGlzLnRhc2sgPSB0YXNrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9UYXNrVmlld0Rpc21pc3NlZEV2ZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCA3MSUKY29weSBmcm9tIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YQpjb3B5IHRvIHBhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9UYXNrVmlld0Rpc21pc3NlZEV2ZW50LmphdmEKaW5kZXggZTBkODNmZC4uN2JkMDk1OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL1Jlc2l6ZVRhc2tFdmVudC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9UYXNrVmlld0Rpc21pc3NlZEV2ZW50LmphdmEKQEAgLTE4LDE1ICsxOCwxOCBAQAogCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuVGFza1ZpZXc7CiAKIC8qKgotICogVGhpcyBpcyBzZW50IHdoZW4gYSB7QGxpbmsgVGFza30gaXMgcmVzaXplZC4KKyAqIFRoaXMgZXZlbnQgaXMgc2VudCB3aGVuIGEge0BsaW5rIFRhc2tWaWV3fSBoYXMgYmVlbiBkaXNtaXNzZWQgYW5kIGlzIG5vIGxvbmdlciB2aXNpYmxlLgogICovCi1wdWJsaWMgY2xhc3MgUmVzaXplVGFza0V2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIFRhc2tWaWV3RGlzbWlzc2VkRXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CiAKICAgICBwdWJsaWMgZmluYWwgVGFzayB0YXNrOworICAgIHB1YmxpYyBmaW5hbCBUYXNrVmlldyB0YXNrVmlldzsKIAotICAgIHB1YmxpYyBSZXNpemVUYXNrRXZlbnQoVGFzayB0YXNrKSB7CisgICAgcHVibGljIFRhc2tWaWV3RGlzbWlzc2VkRXZlbnQoVGFzayB0YXNrLCBUYXNrVmlldyB0YXNrVmlldykgewogICAgICAgICB0aGlzLnRhc2sgPSB0YXNrOworICAgICAgICB0aGlzLnRhc2tWaWV3ID0gdGFza1ZpZXc7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2RyYWduZHJvcC9EcmFnRW5kRXZlbnQuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9kcmFnbmRyb3AvRHJhZ0VuZEV2ZW50LmphdmEKaW5kZXggM2RlZWI0Ny4uNzNjMjgyZiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2RyYWduZHJvcC9EcmFnRW5kRXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvZHJhZ25kcm9wL0RyYWdFbmRFdmVudC5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLmRyYWduZHJvcDsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLkV2ZW50QnVzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5SZWZlcmVuY2VDb3VudGVkVHJpZ2dlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2s7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5Ecm9wVGFyZ2V0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3MuVGFza1ZpZXc7CkBAIC0yNSwxOCArMjQsMTUgQEAKIC8qKgogICogVGhpcyBldmVudCBpcyBzZW50IHdoZW5ldmVyIGEgZHJhZyBlbmRzLgogICovCi1wdWJsaWMgY2xhc3MgRHJhZ0VuZEV2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgeworcHVibGljIGNsYXNzIERyYWdFbmRFdmVudCBleHRlbmRzIEV2ZW50QnVzLkFuaW1hdGVkRXZlbnQgewogCiAgICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKICAgICBwdWJsaWMgZmluYWwgVGFza1ZpZXcgdGFza1ZpZXc7CiAgICAgcHVibGljIGZpbmFsIERyb3BUYXJnZXQgZHJvcFRhcmdldDsKLSAgICBwdWJsaWMgZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXI7CiAKLSAgICBwdWJsaWMgRHJhZ0VuZEV2ZW50KFRhc2sgdGFzaywgVGFza1ZpZXcgdGFza1ZpZXcsIERyb3BUYXJnZXQgZHJvcFRhcmdldCwKLSAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyKSB7CisgICAgcHVibGljIERyYWdFbmRFdmVudChUYXNrIHRhc2ssIFRhc2tWaWV3IHRhc2tWaWV3LCBEcm9wVGFyZ2V0IGRyb3BUYXJnZXQpIHsKICAgICAgICAgdGhpcy50YXNrID0gdGFzazsKICAgICAgICAgdGhpcy50YXNrVmlldyA9IHRhc2tWaWV3OwogICAgICAgICB0aGlzLmRyb3BUYXJnZXQgPSBkcm9wVGFyZ2V0OwotICAgICAgICB0aGlzLnBvc3RBbmltYXRpb25UcmlnZ2VyID0gcG9zdEFuaW1hdGlvblRyaWdnZXI7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2ZvY3VzL0Rpc21pc3NGb2N1c2VkVGFza1ZpZXdFdmVudC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL2ZvY3VzL0Rpc21pc3NGb2N1c2VkVGFza1ZpZXdFdmVudC5qYXZhCmluZGV4IDlmM2U5ZDUuLmRmNzQwMTggMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9mb2N1cy9EaXNtaXNzRm9jdXNlZFRhc2tWaWV3RXZlbnQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvZm9jdXMvRGlzbWlzc0ZvY3VzZWRUYXNrVmlld0V2ZW50LmphdmEKQEAgLTE3LDkgKzE3LDEwIEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLmZvY3VzOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3cy5UYXNrVmlldzsKIAogLyoqCi0gKiBEaXNtaXNzZXMgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHRhc2sgdmlldy4KKyAqIFRoaXMgZXZlbnQgaXMgc2VudCB0byByZXF1ZXN0IHRoYXQgdGhlIGN1cnJlbnRseSBmb2N1c2VkIHtAbGluayBUYXNrVmlld30gaXMgZGlzbWlzc2VkLgogICovCiBwdWJsaWMgY2xhc3MgRGlzbWlzc0ZvY3VzZWRUYXNrVmlld0V2ZW50IGV4dGVuZHMgRXZlbnRCdXMuRXZlbnQgewogICAgIC8vIFNpbXBsZSBldmVudApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeUFkYXB0ZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlBZGFwdGVyLmphdmEKaW5kZXggMmVlZTFkYS4uZjBmYTFkYSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeUFkYXB0ZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9oaXN0b3J5L1JlY2VudHNIaXN0b3J5QWRhcHRlci5qYXZhCkBAIC0yMCwxNCArMjAsMjEgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LlJlY3ljbGVyVmlldzsKIGltcG9ydCBhbmRyb2lkLnRleHQuZm9ybWF0LkRhdGVGb3JtYXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50czsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5IaWRlSGlzdG9yeUJ1dHRvbkV2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkhpZGVIaXN0b3J5RXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlN5c3RlbVNlcnZpY2VzUHJveHk7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5SZWNlbnRzVGFza0xvYWRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2s7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrU3RhY2s7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKQEAgLTQ5LDI4ICs1Niw0OCBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgVEFTS19ST1dfVklFV19UWVBFID0gMTsKIAogICAgIC8qKgotICAgICAqIFZpZXcgaG9sZGVyIGltcGxlbWVudGF0aW9uLgorICAgICAqIFZpZXcgaG9sZGVyIGltcGxlbWVudGF0aW9uLiBUaGUge0BwYXJhbSBUYXNrQ2FsbGJhY2tzfSBhcmUgb25seSBjYWxsZWQgZm9yIFRhc2tSb3cgdmlldworICAgICAqIGhvbGRlcnMuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBWaWV3SG9sZGVyIGV4dGVuZHMgUmVjeWNsZXJWaWV3LlZpZXdIb2xkZXIgewotICAgICAgICBwdWJsaWMgVmlldyBtQ29udGVudDsKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFZpZXdIb2xkZXIgZXh0ZW5kcyBSZWN5Y2xlclZpZXcuVmlld0hvbGRlciBpbXBsZW1lbnRzIFRhc2suVGFza0NhbGxiYWNrcyB7CisgICAgICAgIHB1YmxpYyBmaW5hbCBWaWV3IGNvbnRlbnQ7CiAKICAgICAgICAgcHVibGljIFZpZXdIb2xkZXIoVmlldyB2KSB7CiAgICAgICAgICAgICBzdXBlcih2KTsKLSAgICAgICAgICAgIG1Db250ZW50ID0gdjsKKyAgICAgICAgICAgIGNvbnRlbnQgPSB2OworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVGFza0RhdGFMb2FkZWQoVGFzayB0YXNrKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbGxiYWNrIGlzIG9ubHkgbWFkZSBmb3IgVGFza1JvdyB2aWV3IGhvbGRlcnMKKyAgICAgICAgICAgIEltYWdlVmlldyBpdiA9IChJbWFnZVZpZXcpIGNvbnRlbnQuZmluZFZpZXdCeUlkKFIuaWQuaWNvbik7CisgICAgICAgICAgICBpdi5zZXRJbWFnZURyYXdhYmxlKHRhc2suaWNvbik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25UYXNrRGF0YVVubG9hZGVkKCkgeworICAgICAgICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyBvbmx5IG1hZGUgZm9yIFRhc2tSb3cgdmlldyBob2xkZXJzCisgICAgICAgICAgICBJbWFnZVZpZXcgaXYgPSAoSW1hZ2VWaWV3KSBjb250ZW50LmZpbmRWaWV3QnlJZChSLmlkLmljb24pOworICAgICAgICAgICAgaXYuc2V0SW1hZ2VCaXRtYXAobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25UYXNrU3RhY2tJZENoYW5nZWQoKSB7CisgICAgICAgICAgICAvLyBEbyBub3RoaW5nLCB0aGlzIGNhbGxiYWNrIGlzIG9ubHkgbWFkZSBmb3IgVGFza1JvdyB2aWV3IGhvbGRlcnMKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgogICAgICAqIEEgc2luZ2xlIHJvdyBvZiBjb250ZW50LgogICAgICAqLwotICAgIHByaXZhdGUgaW50ZXJmYWNlIFJvdyB7CisgICAgaW50ZXJmYWNlIFJvdyB7CiAgICAgICAgIGludCBnZXRWaWV3VHlwZSgpOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIEEgZGF0ZSByb3cuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGF0ZVJvdyBpbXBsZW1lbnRzIFJvdyB7CisgICAgc3RhdGljIGNsYXNzIERhdGVSb3cgaW1wbGVtZW50cyBSb3cgewogCiAgICAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZGF0ZTsKIApAQCAtODcsMjAgKzExNCwyMCBAQAogICAgIC8qKgogICAgICAqIEEgdGFzayByb3cuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGFza1JvdyBpbXBsZW1lbnRzIFJvdywgVmlldy5PbkNsaWNrTGlzdGVuZXIgeworICAgIHN0YXRpYyBjbGFzcyBUYXNrUm93IGltcGxlbWVudHMgUm93LCBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciB7CiAKLSAgICAgICAgcHVibGljIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVRhc2tJZDsKKyAgICAgICAgcHVibGljIGZpbmFsIFRhc2sgdGFzazsKKyAgICAgICAgcHVibGljIGZpbmFsIGludCBkYXRlS2V5OwogCi0gICAgICAgIHB1YmxpYyBUYXNrUm93KFRhc2sgdGFzaykgewotICAgICAgICAgICAgbVRhc2tJZCA9IHRhc2sua2V5LmlkOwotICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0YXNrLmFjdGl2aXR5TGFiZWw7CisgICAgICAgIHB1YmxpYyBUYXNrUm93KFRhc2sgdGFzaywgaW50IGRhdGVLZXkpIHsKKyAgICAgICAgICAgIHRoaXMudGFzayA9IHRhc2s7CisgICAgICAgICAgICB0aGlzLmRhdGVLZXkgPSBkYXRlS2V5OwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CiAgICAgICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKLSAgICAgICAgICAgIHNzcC5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModi5nZXRDb250ZXh0KCksIG1UYXNrSWQsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgc3NwLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyh2LmdldENvbnRleHQoKSwgdGFzay5rZXkuaWQsIHRhc2sudGl0bGUsCiAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5tYWtlQmFzaWMoKSk7CiAgICAgICAgIH0KIApAQCAtMTEwLDggKzEzNywxMiBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBDb250ZXh0IG1Db250ZXh0OwogICAgIHByaXZhdGUgTGF5b3V0SW5mbGF0ZXIgbUxheW91dEluZmxhdGVyOworICAgIHByaXZhdGUgZmluYWwgTGlzdDxUYXNrPiBtVGFza3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8Um93PiBtUm93cyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIHByaXZhdGUgZmluYWwgU3BhcnNlSW50QXJyYXkgbVRhc2tSb3dDb3VudCA9IG5ldyBTcGFyc2VJbnRBcnJheSgpOworICAgIHByaXZhdGUgVGFza1N0YWNrIG1TdGFjazsKIAogICAgIHB1YmxpYyBSZWNlbnRzSGlzdG9yeUFkYXB0ZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIG1MYXlvdXRJbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20oY29udGV4dCk7CkBAIC0xMjAsMTMgKzE1MSwxNyBAQAogICAgIC8qKgogICAgICAqIFVwZGF0ZXMgdGhpcyBhZGFwdGVyIHdpdGggdGhlIGdpdmVuIHRhc2tzLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRhc2tzKENvbnRleHQgY29udGV4dCwgTGlzdDxUYXNrPiB0YXNrcykgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRhc2tzKENvbnRleHQgY29udGV4dCwgVGFza1N0YWNrIHN0YWNrKSB7CisgICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgbVN0YWNrID0gc3RhY2s7CisKICAgICAgICAgZmluYWwgTG9jYWxlIGwgPSBjb250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGU7CiAgICAgICAgIGZpbmFsIFN0cmluZyBkYXRlRm9ybWF0U3RyID0gRGF0ZUZvcm1hdC5nZXRCZXN0RGF0ZVRpbWVQYXR0ZXJuKGwsICJFRUVFTU1NTWQiKTsKLSAgICAgICAgZmluYWwgTGlzdDxUYXNrPiB0YXNrc01vc3RSZWNlbnQgPSBuZXcgQXJyYXlMaXN0PD4odGFza3MpOworICAgICAgICBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzTW9zdFJlY2VudCA9IG5ldyBBcnJheUxpc3Q8PihzdGFjay5nZXRIaXN0b3JpY2FsVGFza3MoKSk7CiAgICAgICAgIENvbGxlY3Rpb25zLnJldmVyc2UodGFza3NNb3N0UmVjZW50KTsKLSAgICAgICAgaW50IHByZXZEYXlLZXkgPSAtMTsKKyAgICAgICAgaW50IHByZXZEYXRlS2V5ID0gLTE7CiAgICAgICAgIG1Sb3dzLmNsZWFyKCk7CisgICAgICAgIG1UYXNrUm93Q291bnQuY2xlYXIoKTsKICAgICAgICAgZm9yIChUYXNrIHRhc2sgOiB0YXNrc01vc3RSZWNlbnQpIHsKICAgICAgICAgICAgIGlmICh0YXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEzNCwxNiArMTY5LDQ1IEBACiAKICAgICAgICAgICAgIENhbGVuZGFyIGNhbCA9IENhbGVuZGFyLmdldEluc3RhbmNlKGwpOwogICAgICAgICAgICAgY2FsLnNldFRpbWVJbk1pbGxpcyh0YXNrLmtleS5sYXN0QWN0aXZlVGltZSk7Ci0gICAgICAgICAgICBpbnQgZGF5S2V5ID0gT2JqZWN0cy5oYXNoKGNhbC5nZXQoQ2FsZW5kYXIuWUVBUiksIGNhbC5nZXQoQ2FsZW5kYXIuREFZX09GX1lFQVIpKTsKLSAgICAgICAgICAgIGlmIChkYXlLZXkgIT0gcHJldkRheUtleSkgewotICAgICAgICAgICAgICAgIHByZXZEYXlLZXkgPSBkYXlLZXk7CisgICAgICAgICAgICBpbnQgZGF0ZUtleSA9IE9iamVjdHMuaGFzaChjYWwuZ2V0KENhbGVuZGFyLllFQVIpLCBjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9ZRUFSKSk7CisgICAgICAgICAgICBpZiAoZGF0ZUtleSAhPSBwcmV2RGF0ZUtleSkgeworICAgICAgICAgICAgICAgIHByZXZEYXRlS2V5ID0gZGF0ZUtleTsKICAgICAgICAgICAgICAgICBtUm93cy5hZGQobmV3IERhdGVSb3coRGF0ZUZvcm1hdC5mb3JtYXQoZGF0ZUZvcm1hdFN0ciwgY2FsKS50b1N0cmluZygpKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUm93cy5hZGQobmV3IFRhc2tSb3codGFzaykpOworICAgICAgICAgICAgbVJvd3MuYWRkKG5ldyBUYXNrUm93KHRhc2ssIGRhdGVLZXkpKTsKKyAgICAgICAgICAgIG1UYXNrUm93Q291bnQucHV0KGRhdGVLZXksIG1UYXNrUm93Q291bnQuZ2V0KGRhdGVLZXksIDApICsgMSk7CiAgICAgICAgIH0KICAgICAgICAgbm90aWZ5RGF0YVNldENoYW5nZWQoKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBSZW1vdmVzIGhpc3RvcmljYWwgdGFza3MgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFja2FnZSBhbmQgdXNlci4gV2UgZG8gbm90IG5lZWQgdG8KKyAgICAgKiByZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgVGFza1N0YWNrIHNpbmNlIHRoZSBUYXNrU3RhY2tWaWV3IHdpbGwgYWxzbyByZWNlaXZlIHRoaXMgZXZlbnQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVtb3ZlVGFza3MoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBtUm93cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgUm93IHJvdyA9IG1Sb3dzLmdldChpKTsKKyAgICAgICAgICAgIGlmIChyb3cuZ2V0Vmlld1R5cGUoKSA9PSBUQVNLX1JPV19WSUVXX1RZUEUpIHsKKyAgICAgICAgICAgICAgICBUYXNrUm93IHRhc2tSb3cgPSAoVGFza1Jvdykgcm93OworICAgICAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tSb3cudGFzazsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGFza1BhY2thZ2UgPSB0YXNrLmtleS5nZXRDb21wb25lbnQoKS5nZXRQYWNrYWdlTmFtZSgpOworICAgICAgICAgICAgICAgIGlmICh0YXNrLmtleS51c2VySWQgPT0gdXNlcklkICYmIHRhc2tQYWNrYWdlLmVxdWFscyhwYWNrYWdlTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IHJlbW92ZVRhc2tSb3coaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtUm93cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRpc21pc3NIaXN0b3J5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSByb3cgYXQgdGhlIGdpdmVuIHtAcGFyYW0gcG9zaXRpb259LgorICAgICAqLworICAgIHB1YmxpYyBSb3cgZ2V0Um93KGludCBwb3NpdGlvbikgeworICAgICAgICByZXR1cm4gbVJvd3MuZ2V0KHBvc2l0aW9uKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgVmlld0hvbGRlciBvbkNyZWF0ZVZpZXdIb2xkZXIoVmlld0dyb3VwIHBhcmVudCwgaW50IHZpZXdUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAodmlld1R5cGUpIHsKQEAgLTE2MCwyNSArMjI0LDU1IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFZpZXdIb2xkZXIgaG9sZGVyLCBpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyID0gUmVjZW50cy5nZXRUYXNrTG9hZGVyKCk7CisKICAgICAgICAgUm93IHJvdyA9IG1Sb3dzLmdldChwb3NpdGlvbik7Ci0gICAgICAgIGludCB2aWV3VHlwZSA9IG1Sb3dzLmdldChwb3NpdGlvbikuZ2V0Vmlld1R5cGUoKTsKKyAgICAgICAgaW50IHZpZXdUeXBlID0gcm93LmdldFZpZXdUeXBlKCk7CiAgICAgICAgIHN3aXRjaCAodmlld1R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgREFURV9ST1dfVklFV19UWVBFOiB7Ci0gICAgICAgICAgICAgICAgVGV4dFZpZXcgdHYgPSAoVGV4dFZpZXcpIGhvbGRlci5tQ29udGVudDsKKyAgICAgICAgICAgICAgICBUZXh0VmlldyB0diA9IChUZXh0VmlldykgaG9sZGVyLmNvbnRlbnQ7CiAgICAgICAgICAgICAgICAgdHYuc2V0VGV4dCgoKERhdGVSb3cpIHJvdykuZGF0ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFRBU0tfUk9XX1ZJRVdfVFlQRTogewotICAgICAgICAgICAgICAgIFRleHRWaWV3IHR2ID0gKFRleHRWaWV3KSBob2xkZXIubUNvbnRlbnQ7CiAgICAgICAgICAgICAgICAgVGFza1JvdyB0YXNrUm93ID0gKFRhc2tSb3cpIHJvdzsKLSAgICAgICAgICAgICAgICB0di5zZXRUZXh0KHRhc2tSb3cuZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIHR2LnNldE9uQ2xpY2tMaXN0ZW5lcih0YXNrUm93KTsKKyAgICAgICAgICAgICAgICB0YXNrUm93LnRhc2suYWRkQ2FsbGJhY2soaG9sZGVyKTsKKyAgICAgICAgICAgICAgICBUZXh0VmlldyB0diA9IChUZXh0VmlldykgaG9sZGVyLmNvbnRlbnQuZmluZFZpZXdCeUlkKFIuaWQuZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgIHR2LnNldFRleHQodGFza1Jvdy50YXNrLnRpdGxlKTsKKyAgICAgICAgICAgICAgICBob2xkZXIuY29udGVudC5zZXRPbkNsaWNrTGlzdGVuZXIodGFza1Jvdyk7CisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRUYXNrRGF0YSh0YXNrUm93LnRhc2spOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25WaWV3UmVjeWNsZWQoVmlld0hvbGRlciBob2xkZXIpIHsKKyAgICAgICAgUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyID0gUmVjZW50cy5nZXRUYXNrTG9hZGVyKCk7CisKKyAgICAgICAgaW50IHBvc2l0aW9uID0gaG9sZGVyLmdldEFkYXB0ZXJQb3NpdGlvbigpOworICAgICAgICBpZiAocG9zaXRpb24gIT0gUmVjeWNsZXJWaWV3Lk5PX1BPU0lUSU9OKSB7CisgICAgICAgICAgICBSb3cgcm93ID0gbVJvd3MuZ2V0KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGludCB2aWV3VHlwZSA9IHJvdy5nZXRWaWV3VHlwZSgpOworICAgICAgICAgICAgaWYgKHZpZXdUeXBlID09IFRBU0tfUk9XX1ZJRVdfVFlQRSkgeworICAgICAgICAgICAgICAgIFRhc2tSb3cgdGFza1JvdyA9IChUYXNrUm93KSByb3c7CisgICAgICAgICAgICAgICAgdGFza1Jvdy50YXNrLnJlbW92ZUNhbGxiYWNrKGhvbGRlcik7CisgICAgICAgICAgICAgICAgbG9hZGVyLnVubG9hZFRhc2tEYXRhKHRhc2tSb3cudGFzayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvblRhc2tSZW1vdmVkKFRhc2sgdGFzaywgaW50IHBvc2l0aW9uKSB7CisgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgcmVtb3ZlZCBmcm9tIHRoZSBoaXN0b3J5LCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhY2sgYXMgd2VsbCB0byBlbnN1cmUKKyAgICAgICAgLy8gdGhhdCB0aGUgbW9kZWwgaXMgY29ycmVjdAorICAgICAgICBtU3RhY2sucmVtb3ZlVGFzayh0YXNrKTsKKyAgICAgICAgcmVtb3ZlVGFza1Jvdyhwb3NpdGlvbik7CisgICAgICAgIGlmIChtUm93cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRpc21pc3NIaXN0b3J5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGdldEl0ZW1Db3VudCgpIHsKICAgICAgICAgcmV0dXJuIG1Sb3dzLnNpemUoKTsKICAgICB9CkBAIC0xODcsNCArMjgxLDM3IEBACiAgICAgcHVibGljIGludCBnZXRJdGVtVmlld1R5cGUoaW50IHBvc2l0aW9uKSB7CiAgICAgICAgIHJldHVybiBtUm93cy5nZXQocG9zaXRpb24pLmdldFZpZXdUeXBlKCk7CiAgICAgfQorCisgICAgLyoqCisgICAgICogUmVtb3ZlcyBhIHRhc2sgcm93LCBhbHNvIHJlbW92aW5nIHRoZSBhc3NvY2lhdGVkIHtAbGluayBEYXRlUm93fSBpZiB0aGVyZSBhcmUgbm8gbW9yZSB0YXNrcworICAgICAqIGluIHRoYXQgZGF0ZSBncm91cC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwb3NpdGlvbiBhbiBhZGFwdGVyIHBvc2l0aW9uIG9mIGEgdGFzayByb3cgc3VjaCB0aGF0IDAgPCBwb3NpdGlvbiA8IG51bSByb3dzLgorICAgICAqIEByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBsYXN0IHJlbW92ZWQgcm93CisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcmVtb3ZlVGFza1JvdyhpbnQgcG9zaXRpb24pIHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSB0YXNrIGF0IHRoYXQgcm93CisgICAgICAgIFRhc2tSb3cgdGFza1JvdyA9IChUYXNrUm93KSBtUm93cy5yZW1vdmUocG9zaXRpb24pOworICAgICAgICBpbnQgbnVtVGFza3MgPSBtVGFza1Jvd0NvdW50LmdldCh0YXNrUm93LmRhdGVLZXkpIC0gMTsKKyAgICAgICAgbVRhc2tSb3dDb3VudC5wdXQodGFza1Jvdy5kYXRlS2V5LCBudW1UYXNrcyk7CisgICAgICAgIG5vdGlmeUl0ZW1SZW1vdmVkKHBvc2l0aW9uKTsKKworICAgICAgICBpZiAobnVtVGFza3MgPT0gMCkgeworICAgICAgICAgICAgLy8gSWYgdGhhdCB3YXMgdGhlIGxhc3QgdGFzayByb3cgaW4gdGhlIGdyb3VwLCB0aGVuIHJlbW92ZSB0aGUgZGF0ZSBhcyB3ZWxsCisgICAgICAgICAgICBtUm93cy5yZW1vdmUocG9zaXRpb24gLSAxKTsKKyAgICAgICAgICAgIG1UYXNrUm93Q291bnQucmVtb3ZlQXQobVRhc2tSb3dDb3VudC5pbmRleE9mS2V5KHRhc2tSb3cuZGF0ZUtleSkpOworICAgICAgICAgICAgbm90aWZ5SXRlbVJlbW92ZWQocG9zaXRpb24gLSAxKTsKKyAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiAtIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb247CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEaXNtaXNzZXMgaGlzdG9yeSBiYWNrIHRvIHRoZSBzdGFjayB2aWV3LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBkaXNtaXNzSGlzdG9yeSgpIHsKKyAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IEhpZGVIaXN0b3J5RXZlbnQodHJ1ZSAvKiBhbmltYXRlICovKSk7CisgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBIaWRlSGlzdG9yeUJ1dHRvbkV2ZW50KCkpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlJdGVtVG91Y2hDYWxsYmFja3MuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlJdGVtVG91Y2hDYWxsYmFja3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFlYTdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeUl0ZW1Ub3VjaENhbGxiYWNrcy5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuaGlzdG9yeTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuUmVjeWNsZXJWaWV3OworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny53aWRnZXQuaGVscGVyLkl0ZW1Ub3VjaEhlbHBlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5Db25zdGFudHM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuRGVsZXRlVGFza0RhdGFFdmVudDsKKworCisvKioKKyAqIEFuIGl0ZW0gdG91Y2ggaGFuZGxlciBmb3IgaXRlbXMgaW4gdGhlIGhpc3Rvcnkgdmlldy4KKyAqLworcHVibGljIGNsYXNzIFJlY2VudHNIaXN0b3J5SXRlbVRvdWNoQ2FsbGJhY2tzIGV4dGVuZHMgSXRlbVRvdWNoSGVscGVyLlNpbXBsZUNhbGxiYWNrIHsKKworICAgIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBwcml2YXRlIFJlY2VudHNIaXN0b3J5QWRhcHRlciBtQWRhcHRlcjsKKworICAgIHB1YmxpYyBSZWNlbnRzSGlzdG9yeUl0ZW1Ub3VjaENhbGxiYWNrcyhDb250ZXh0IGNvbnRleHQsIFJlY2VudHNIaXN0b3J5QWRhcHRlciBhZGFwdGVyKSB7CisgICAgICAgIHN1cGVyKDAsIEl0ZW1Ub3VjaEhlbHBlci5MRUZUIHwgSXRlbVRvdWNoSGVscGVyLlJJR0hUKTsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtQWRhcHRlciA9IGFkYXB0ZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25Nb3ZlKFJlY3ljbGVyVmlldyByZWN5Y2xlclZpZXcsIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIHZpZXdIb2xkZXIsCisgICAgICAgICAgICBSZWN5Y2xlclZpZXcuVmlld0hvbGRlciB0YXJnZXQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0U3dpcGVEaXJzKFJlY3ljbGVyVmlldyByZWN5Y2xlclZpZXcsIFJlY3ljbGVyVmlldy5WaWV3SG9sZGVyIHZpZXdIb2xkZXIpIHsKKyAgICAgICAgaW50IHZpZXdUeXBlID0gbUFkYXB0ZXIuZ2V0SXRlbVZpZXdUeXBlKHZpZXdIb2xkZXIuZ2V0QWRhcHRlclBvc2l0aW9uKCkpOworICAgICAgICBzd2l0Y2ggKHZpZXdUeXBlKSB7CisgICAgICAgICAgICBjYXNlIFJlY2VudHNIaXN0b3J5QWRhcHRlci5EQVRFX1JPV19WSUVXX1RZUEU6CisgICAgICAgICAgICAgICAgLy8gRGlzYWxsb3cgc3dpcGluZworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIuZ2V0U3dpcGVEaXJzKHJlY3ljbGVyVmlldywgdmlld0hvbGRlcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN3aXBlZChSZWN5Y2xlclZpZXcuVmlld0hvbGRlciB2aWV3SG9sZGVyLCBpbnQgZGlyZWN0aW9uKSB7CisgICAgICAgIGludCBwb3NpdGlvbiA9IHZpZXdIb2xkZXIuZ2V0QWRhcHRlclBvc2l0aW9uKCk7CisgICAgICAgIGlmIChwb3NpdGlvbiAhPSBSZWN5Y2xlclZpZXcuTk9fUE9TSVRJT04pIHsKKyAgICAgICAgICAgIFJlY2VudHNIaXN0b3J5QWRhcHRlci5Sb3cgcm93ID0gbUFkYXB0ZXIuZ2V0Um93KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIFJlY2VudHNIaXN0b3J5QWRhcHRlci5UYXNrUm93IHRhc2tSb3cgPSAoUmVjZW50c0hpc3RvcnlBZGFwdGVyLlRhc2tSb3cpIHJvdzsKKworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0YXNrIGZyb20gdGhlIHN5c3RlbQorICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IERlbGV0ZVRhc2tEYXRhRXZlbnQodGFza1Jvdy50YXNrKSk7CisgICAgICAgICAgICBtQWRhcHRlci5vblRhc2tSZW1vdmVkKHRhc2tSb3cudGFzaywgcG9zaXRpb24pOworCisgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGRlbGV0aW9ucyBieSBzd2lwaW5nIHdpdGhpbiBoaXN0b3J5CisgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmhpc3RvZ3JhbShtQ29udGV4dCwgIm92ZXJ2aWV3X3Rhc2tfZGlzbWlzc2VkX3NvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgIENvbnN0YW50cy5NZXRyaWNzLkRpc21pc3NTb3VyY2VIaXN0b3J5U3dpcGVHZXN0dXJlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9oaXN0b3J5L1JlY2VudHNIaXN0b3J5Vmlldy5qYXZhCmluZGV4IDU4NTExMTEuLmEyZjUxNTkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2hpc3RvcnkvUmVjZW50c0hpc3RvcnlWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvaGlzdG9yeS9SZWNlbnRzSGlzdG9yeVZpZXcuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcud2lkZ2V0LkxpbmVhckxheW91dE1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5SZWN5Y2xlclZpZXc7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LndpZGdldC5oZWxwZXIuSXRlbVRvdWNoSGVscGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd0luc2V0czsKQEAgLTI5LDcgKzMwLDEwIEBACiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0FjdGl2aXR5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0NvbmZpZ3VyYXRpb247CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuUGFja2FnZXNDaGFuZ2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOwogCkBAIC00Myw2ICs0Nyw3IEBACiAKICAgICBwcml2YXRlIFJlY3ljbGVyVmlldyBtUmVjeWNsZXJWaWV3OwogICAgIHByaXZhdGUgUmVjZW50c0hpc3RvcnlBZGFwdGVyIG1BZGFwdGVyOworICAgIHByaXZhdGUgUmVjZW50c0hpc3RvcnlJdGVtVG91Y2hDYWxsYmFja3MgbUl0ZW1Ub3VjaEhhbmRsZXI7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc1Zpc2libGU7CiAgICAgcHJpdmF0ZSBSZWN0IG1TeXN0ZW1JbnNldHMgPSBuZXcgUmVjdCgpOwogCkBAIC02Nyw2ICs3Miw3IEBACiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIsIGRlZlN0eWxlUmVzKTsKICAgICAgICAgUmVzb3VyY2VzIHJlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIG1BZGFwdGVyID0gbmV3IFJlY2VudHNIaXN0b3J5QWRhcHRlcihjb250ZXh0KTsKKyAgICAgICAgbUl0ZW1Ub3VjaEhhbmRsZXIgPSBuZXcgUmVjZW50c0hpc3RvcnlJdGVtVG91Y2hDYWxsYmFja3MoY29udGV4dCwgbUFkYXB0ZXIpOwogICAgICAgICBtSGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbiA9IHJlcy5nZXRJbnRlZ2VyKFIuaW50ZWdlci5yZWNlbnRzX2hpc3RvcnlfdHJhbnNpdGlvbl9kdXJhdGlvbik7CiAgICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjb250ZXh0LAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmZhc3Rfb3V0X3Nsb3dfaW4pOwpAQCAtNzcsMTcgKzgzLDIxIEBACiAgICAgLyoqCiAgICAgICogVXBkYXRlcyB0aGlzIGhpc3RvcnkgdmlldyB3aXRoIHRoZSByZWNlbnQgdGFza3MsIGFuZCB0aGVuIHNob3dzIGl0LgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNob3coVGFza1N0YWNrIHN0YWNrKSB7CisgICAgcHVibGljIHZvaWQgc2hvdyhUYXNrU3RhY2sgc3RhY2ssIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RIaWRlQW5pbWF0aW9uVHJpZ2dlcikgewogICAgICAgICBzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CiAgICAgICAgIHNldEFscGhhKDBmKTsKLSAgICAgICAgYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLmFscGhhKDFmKQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihtSGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbikKLSAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQotICAgICAgICAgICAgICAgIC5zdGFydCgpOwotCi0gICAgICAgIG1BZGFwdGVyLnVwZGF0ZVRhc2tzKGdldENvbnRleHQoKSwgc3RhY2suY29tcHV0ZUFsbFRhc2tzTGlzdCgpKTsKKyAgICAgICAgcG9zdEhpZGVBbmltYXRpb25UcmlnZ2VyLmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBhbmltYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hbHBoYSgxZikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihtSGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAud2l0aExheWVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbUFkYXB0ZXIudXBkYXRlVGFza3MoZ2V0Q29udGV4dCgpLCBzdGFjayk7CiAgICAgICAgIG1Jc1Zpc2libGUgPSB0cnVlOwogICAgIH0KIApAQCAtMTQyLDYgKzE1Miw4IEBACiAgICAgICAgIG1SZWN5Y2xlclZpZXcgPSAoUmVjeWNsZXJWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5saXN0KTsKICAgICAgICAgbVJlY3ljbGVyVmlldy5zZXRBZGFwdGVyKG1BZGFwdGVyKTsKICAgICAgICAgbVJlY3ljbGVyVmlldy5zZXRMYXlvdXRNYW5hZ2VyKG5ldyBMaW5lYXJMYXlvdXRNYW5hZ2VyKGdldENvbnRleHQoKSkpOworICAgICAgICBJdGVtVG91Y2hIZWxwZXIgdG91Y2hIZWxwZXIgPSBuZXcgSXRlbVRvdWNoSGVscGVyKG1JdGVtVG91Y2hIYW5kbGVyKTsKKyAgICAgICAgdG91Y2hIZWxwZXIuYXR0YWNoVG9SZWN5Y2xlclZpZXcobVJlY3ljbGVyVmlldyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNjUsOCArMTc3LDI2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgeworICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkucmVnaXN0ZXIodGhpcywgUmVjZW50c0FjdGl2aXR5LkVWRU5UX0JVU19QUklPUklUWSArIDEpOworICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKKyAgICAgICAgc3VwZXIub25EZXRhY2hlZEZyb21XaW5kb3coKTsKKyAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnVucmVnaXN0ZXIodGhpcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFdpbmRvd0luc2V0cyBvbkFwcGx5V2luZG93SW5zZXRzKFdpbmRvd0luc2V0cyBpbnNldHMpIHsKICAgICAgICAgc2V0U3lzdGVtSW5zZXRzKGluc2V0cy5nZXRTeXN0ZW1XaW5kb3dJbnNldHMoKSk7CiAgICAgICAgIHJldHVybiBpbnNldHM7CiAgICAgfQorCisgICAgLyoqKiogRXZlbnRCdXMgRXZlbnRzICoqKiovCisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFBhY2thZ2VzQ2hhbmdlZEV2ZW50IGV2ZW50KSB7CisgICAgICAgIG1BZGFwdGVyLnJlbW92ZVRhc2tzKGV2ZW50LnBhY2thZ2VOYW1lLCBldmVudC51c2VySWQpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIuamF2YQppbmRleCA0MDFiNDQ4Li4yNjM3ZDg4IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1JlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbWlzYy9SZWZlcmVuY2VDb3VudGVkVHJpZ2dlci5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIApAQCAtMjksMTIgKzI3LDkgQEAKICAqLwogcHVibGljIGNsYXNzIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIiOwotCi0gICAgQ29udGV4dCBtQ29udGV4dDsKICAgICBpbnQgbUNvdW50OwotICAgIEFycmF5TGlzdDxSdW5uYWJsZT4gbUZpcnN0SW5jUnVubmFibGVzID0gbmV3IEFycmF5TGlzdDxSdW5uYWJsZT4oKTsKLSAgICBBcnJheUxpc3Q8UnVubmFibGU+IG1MYXN0RGVjUnVubmFibGVzID0gbmV3IEFycmF5TGlzdDxSdW5uYWJsZT4oKTsKKyAgICBBcnJheUxpc3Q8UnVubmFibGU+IG1GaXJzdEluY1J1bm5hYmxlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIEFycmF5TGlzdDxSdW5uYWJsZT4gbUxhc3REZWNSdW5uYWJsZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICBSdW5uYWJsZSBtRXJyb3JSdW5uYWJsZTsKIAogICAgIC8vIENvbnZlbmllbmNlIHJ1bm5hYmxlcwpAQCAtNTEsOSArNDYsMTIgQEAKICAgICAgICAgfQogICAgIH07CiAKLSAgICBwdWJsaWMgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoQ29udGV4dCBjb250ZXh0LCBSdW5uYWJsZSBmaXJzdEluY1J1bm5hYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW5uYWJsZSBsYXN0RGVjUnVubmFibGUsIFJ1bm5hYmxlIGVycm9yUnVuYW5hYmxlKSB7Ci0gICAgICAgIG1Db250ZXh0ID0gY29udGV4dDsKKyAgICBwdWJsaWMgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoKSB7CisgICAgICAgIHRoaXMobnVsbCwgbnVsbCwgbnVsbCk7CisgICAgfQorCisgICAgcHVibGljIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyKFJ1bm5hYmxlIGZpcnN0SW5jUnVubmFibGUsIFJ1bm5hYmxlIGxhc3REZWNSdW5uYWJsZSwKKyAgICAgICAgICAgIFJ1bm5hYmxlIGVycm9yUnVuYW5hYmxlKSB7CiAgICAgICAgIGlmIChmaXJzdEluY1J1bm5hYmxlICE9IG51bGwpIG1GaXJzdEluY1J1bm5hYmxlcy5hZGQoZmlyc3RJbmNSdW5uYWJsZSk7CiAgICAgICAgIGlmIChsYXN0RGVjUnVubmFibGUgIT0gbnVsbCkgbUxhc3REZWNSdW5uYWJsZXMuYWRkKGxhc3REZWNSdW5uYWJsZSk7CiAgICAgICAgIG1FcnJvclJ1bm5hYmxlID0gZXJyb3JSdW5hbmFibGU7CkBAIC03Nyw0MSArNzUsNTAgQEAKIAogICAgIC8qKiBBZGRzIGEgcnVubmFibGUgdG8gdGhlIGxhc3QtZGVjcmVtZW50IHJ1bm5hYmxlcyBsaXN0LiAqLwogICAgIHB1YmxpYyB2b2lkIGFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShSdW5uYWJsZSByKSB7Ci0gICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBsYXN0IGRlY3JlbWVudCBhbHdheXMgY2FsbHMsIHdlIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IGFmdGVyIHNldHRpbmcKLSAgICAgICAgLy8gdGhlIGxhc3QgZGVjcmVtZW50IHJ1bm5hYmxlCi0gICAgICAgIGJvb2xlYW4gZW5zdXJlTGFzdERlY3JlbWVudCA9IChtQ291bnQgPT0gMCk7Ci0gICAgICAgIGlmIChlbnN1cmVMYXN0RGVjcmVtZW50KSBpbmNyZW1lbnQoKTsKICAgICAgICAgbUxhc3REZWNSdW5uYWJsZXMuYWRkKHIpOwotICAgICAgICBpZiAoZW5zdXJlTGFzdERlY3JlbWVudCkgZGVjcmVtZW50KCk7CiAgICAgfQogCiAgICAgLyoqIERlY3JlbWVudHMgdGhlIHJlZiBjb3VudCAqLwogICAgIHB1YmxpYyB2b2lkIGRlY3JlbWVudCgpIHsKICAgICAgICAgbUNvdW50LS07Ci0gICAgICAgIGlmIChtQ291bnQgPT0gMCAmJiAhbUxhc3REZWNSdW5uYWJsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpbnQgbnVtUnVubmFibGVzID0gbUxhc3REZWNSdW5uYWJsZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SdW5uYWJsZXM7IGkrKykgewotICAgICAgICAgICAgICAgIG1MYXN0RGVjUnVubmFibGVzLmdldChpKS5ydW4oKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG1Db3VudCA9PSAwKSB7CisgICAgICAgICAgICBmbHVzaExhc3REZWNyZW1lbnRSdW5uYWJsZXMoKTsKICAgICAgICAgfSBlbHNlIGlmIChtQ291bnQgPCAwKSB7CiAgICAgICAgICAgICBpZiAobUVycm9yUnVubmFibGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1FcnJvclJ1bm5hYmxlLnJ1bigpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIHJlZiBjb3VudCIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHJlZiBjb3VudCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoqIENvbnZlbmllbmNlIG1ldGhvZCB0byBkZWNyZW1lbnQgdGhpcyB0cmlnZ2VyIGFzIGEgcnVubmFibGUuICovCi0gICAgcHVibGljIFJ1bm5hYmxlIGRlY3JlbWVudEFzUnVubmFibGUoKSB7Ci0gICAgICAgIHJldHVybiBtRGVjcmVtZW50UnVubmFibGU7CisgICAgLyoqCisgICAgICogUnVucyBhbmQgY2xlYXJzIGFsbCB0aGUgbGFzdC1kZWNyZW1lbnQgcnVubmFibGVzIG5vdy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBmbHVzaExhc3REZWNyZW1lbnRSdW5uYWJsZXMoKSB7CisgICAgICAgIGlmICghbUxhc3REZWNSdW5uYWJsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbnQgbnVtUnVubmFibGVzID0gbUxhc3REZWNSdW5uYWJsZXMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SdW5uYWJsZXM7IGkrKykgeworICAgICAgICAgICAgICAgIG1MYXN0RGVjUnVubmFibGVzLmdldChpKS5ydW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtTGFzdERlY1J1bm5hYmxlcy5jbGVhcigpOwogICAgIH0KLSAgICAvKiogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGRlY3JlbWVudCB0aGlzIHRyaWdnZXIgYXMgYSBhbmltYXRvciBsaXN0ZW5lci4gKi8KKworICAgIC8qKgorICAgICAqIENvbnZlbmllbmNlIG1ldGhvZCB0byBkZWNyZW1lbnQgdGhpcyB0cmlnZ2VyIGFzIGEgYW5pbWF0b3IgbGlzdGVuZXIuICBUaGlzIGxpc3RlbmVyIGlzCisgICAgICogZ3VhcmRlZCB0byBwcmV2ZW50IGJlaW5nIGNhbGxlZCBiYWNrIG11bHRpcGxlIHRpbWVzLCBhbmQgd2lsbCB0cmlnZ2VyIGEgZGVjcmVtZW50IG9uY2UgYW5kCisgICAgICogb25seSBvbmNlLgorICAgICAqLwogICAgIHB1YmxpYyBBbmltYXRvci5BbmltYXRvckxpc3RlbmVyIGRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkgewogICAgICAgICByZXR1cm4gbmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgeworICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGhhc0VuZGVkOworCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uRW5kKEFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChoYXNFbmRlZCkgcmV0dXJuOwogICAgICAgICAgICAgICAgIGRlY3JlbWVudCgpOworICAgICAgICAgICAgICAgIGhhc0VuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9taXNjL1N5c3RlbVNlcnZpY2VzUHJveHkuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvU3lzdGVtU2VydmljZXNQcm94eS5qYXZhCmluZGV4IDg5Nzk4NDMuLmY5ZTgyNWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvU3lzdGVtU2VydmljZXNQcm94eS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21pc2MvU3lzdGVtU2VydmljZXNQcm94eS5qYXZhCkBAIC00Myw2ICs0Myw3IEBACiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZlhmZXJtb2RlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQ29sb3JEcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwpAQCAtNTcsMTUgKzU4LDE1IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLk11dGFibGVCb29sZWFuOwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwotaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LklEb2NrZWRTdGFja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLktleWJvYXJkU2hvcnRjdXRzUmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkFzc2lzdFV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkJhY2tncm91bmRUaHJlYWQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUHJlZnM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzRGVidWdGbGFnczsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNJbXBsOwogCkBAIC03OCw3ICs3OSw3IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5IT01FX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbC5ERVZFTE9QTUVOVF9FTkFCTEVfRlJFRUZPUk1fV0lORE9XU19TVVBQT1JUOwogCiAvKioKICAqIEFjdHMgYXMgYSBzaGltIGFyb3VuZCB0aGUgcmVhbCBzeXN0ZW0gc2VydmljZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcyBkYXRhIGZyb20sIGFuZCBwcm92aWRlcwpAQCAtMTI3LDggKzEyOCwxMCBAQAogICAgICAgICBtVW0gPSBVc2VyTWFuYWdlci5nZXQoY29udGV4dCk7CiAgICAgICAgIG1EaXNwbGF5ID0gbVdtLmdldERlZmF1bHREaXNwbGF5KCk7CiAgICAgICAgIG1SZWNlbnRzUGFja2FnZSA9IGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKTsKLSAgICAgICAgbUhhc0ZyZWVmb3JtV29ya3NwYWNlU3VwcG9ydCA9IGZhbHNlICYmCi0gICAgICAgICAgICAgICAgbVBtLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9GUkVFRk9STV9XSU5ET1dfTUFOQUdFTUVOVCk7CisgICAgICAgIG1IYXNGcmVlZm9ybVdvcmtzcGFjZVN1cHBvcnQgPQorICAgICAgICAgICAgICAgIG1QbS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFVkVMT1BNRU5UX0VOQUJMRV9GUkVFRk9STV9XSU5ET1dTX1NVUFBPUlQsIDApICE9IDA7CiAKICAgICAgICAgLy8gR2V0IHRoZSBkdW1teSB0aHVtYm5haWwgd2lkdGgvaGVpZ2h0cwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKQEAgLTE5NCw2ICsxOTcsOCBAQAogICAgICAgICBpbnQgbnVtVGFza3NUb1F1ZXJ5ID0gTWF0aC5tYXgobWluTnVtVGFza3NUb1F1ZXJ5LCBudW1MYXRlc3RUYXNrcyk7CiAgICAgICAgIExpc3Q8QWN0aXZpdHlNYW5hZ2VyLlJlY2VudFRhc2tJbmZvPiB0YXNrcyA9IG1BbS5nZXRSZWNlbnRUYXNrc0ZvclVzZXIobnVtVGFza3NUb1F1ZXJ5LAogICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SRUNFTlRfSUdOT1JFX0hPTUVfU1RBQ0tfVEFTS1MgfAorICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5SRUNFTlRfSU5HT1JFX0RPQ0tFRF9TVEFDS19UQVNLUyB8CisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlJFQ0VOVF9JTkdPUkVfUElOTkVEX1NUQUNLX1RBU0tTIHwKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lHTk9SRV9VTkFWQUlMQUJMRSB8CiAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlJFQ0VOVF9JTkNMVURFX1BST0ZJTEVTIHwKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX1dJVEhfRVhDTFVERUQsIHVzZXJJZCk7CkBAIC0zMDgsNyArMzEzLDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zID0gQWN0aXZpdHlPcHRpb25zLm1ha2VCYXNpYygpOwogICAgICAgICAgICAgb3B0aW9ucy5zZXREb2NrQ3JlYXRlTW9kZShjcmVhdGVNb2RlKTsKLSAgICAgICAgICAgIG1JYW0uc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKHRhc2tJZCwgRE9DS0VEX1NUQUNLX0lELCBvcHRpb25zLnRvQnVuZGxlKCkpOworICAgICAgICAgICAgb3B0aW9ucy5zZXRMYXVuY2hTdGFja0lkKERPQ0tFRF9TVEFDS19JRCk7CisgICAgICAgICAgICBtSWFtLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyh0YXNrSWQsIG9wdGlvbnMudG9CdW5kbGUoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CkBAIC00NjMsNyArNDY5LDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbUlhbS5wb3NpdGlvblRhc2tJblN0YWNrKHRhc2tJZCwgc3RhY2tJZCwgMCk7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiB8IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDk2LDYgKzUwMiwxOCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFNlbmRzIGEgbWVzc2FnZSB0byBjbG9zZSBvdGhlciBzeXN0ZW0gd2luZG93cy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZW5kQ2xvc2VTeXN0ZW1XaW5kb3dzKFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgaWYgKEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5pc1N5c3RlbVJlYWR5KCkpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUlhbS5jbG9zZVN5c3RlbURpYWxvZ3MocmVhc29uKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBhY3Rpdml0eSBpbmZvIGZvciBhIGdpdmVuIGNvbXBvbmVudCBuYW1lLgogICAgICAqCiAgICAgICogQHBhcmFtIGNuIFRoZSBjb21wb25lbnQgbmFtZSBvZiB0aGUgYWN0aXZpdHkuCkBAIC01NzMsNyArNTkxLDcgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBhY3Rpdml0eSBpY29uIGZvciB0aGUgQWN0aXZpdHlJbmZvIGZvciBhIHVzZXIsIGJhZGdpbmcgaWYKICAgICAgKiBuZWNlc3NhcnkuCiAgICAgICovCi0gICAgcHVibGljIERyYXdhYmxlIGdldEFjdGl2aXR5SWNvbihBY3Rpdml0eUluZm8gaW5mbywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBEcmF3YWJsZSBnZXRCYWRnZWRBY3Rpdml0eUljb24oQWN0aXZpdHlJbmZvIGluZm8sIGludCB1c2VySWQpIHsKICAgICAgICAgaWYgKG1QbSA9PSBudWxsKSByZXR1cm4gbnVsbDsKIAogICAgICAgICAvLyBJZiB3ZSBhcmUgbW9ja2luZywgdGhlbiByZXR1cm4gYSBtb2NrIGxhYmVsCkBAIC01ODYsOSArNjA0LDMxIEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgdGFzayBkZXNjcmlwdGlvbiBpY29uLCBsb2FkaW5nIGFuZCBiYWRnaW5nIGl0IGlmIGl0IG5lY2Vzc2FyeS4KKyAgICAgKi8KKyAgICBwdWJsaWMgRHJhd2FibGUgZ2V0QmFkZ2VkVGFza0Rlc2NyaXB0aW9uSWNvbihBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRhc2tEZXNjcmlwdGlvbiwKKyAgICAgICAgICAgIGludCB1c2VySWQsIFJlc291cmNlcyByZXMpIHsKKworICAgICAgICAvLyBJZiB3ZSBhcmUgbW9ja2luZywgdGhlbiByZXR1cm4gYSBtb2NrIGxhYmVsCisgICAgICAgIGlmIChSZWNlbnRzRGVidWdGbGFncy5TdGF0aWMuRW5hYmxlU3lzdGVtU2VydmljZXNQcm94eSkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckRyYXdhYmxlKDB4RkY2NjY2NjYpOworICAgICAgICB9CisKKyAgICAgICAgQml0bWFwIHRkSWNvbiA9IHRhc2tEZXNjcmlwdGlvbi5nZXRJbk1lbW9yeUljb24oKTsKKyAgICAgICAgaWYgKHRkSWNvbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0ZEljb24gPSBBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uLmxvYWRUYXNrRGVzY3JpcHRpb25JY29uKAorICAgICAgICAgICAgICAgICAgICB0YXNrRGVzY3JpcHRpb24uZ2V0SWNvbkZpbGVuYW1lKCksIHVzZXJJZCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRkSWNvbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0QmFkZ2VkSWNvbihuZXcgQml0bWFwRHJhd2FibGUocmVzLCB0ZEljb24pLCB1c2VySWQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGdpdmVuIGljb24gZm9yIGEgdXNlciwgYmFkZ2luZyBpZiBuZWNlc3NhcnkuCiAgICAgICovCi0gICAgcHVibGljIERyYXdhYmxlIGdldEJhZGdlZEljb24oRHJhd2FibGUgaWNvbiwgaW50IHVzZXJJZCkgeworICAgIHByaXZhdGUgRHJhd2FibGUgZ2V0QmFkZ2VkSWNvbihEcmF3YWJsZSBpY29uLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICh1c2VySWQgIT0gVXNlckhhbmRsZS5teVVzZXJJZCgpKSB7CiAgICAgICAgICAgICBpY29uID0gbVBtLmdldFVzZXJCYWRnZWRJY29uKGljb24sIG5ldyBVc2VySGFuZGxlKHVzZXJJZCkpOwogICAgICAgICB9CkBAIC01OTgsNyArNjM4LDcgQEAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBnaXZlbiBsYWJlbCBmb3IgYSB1c2VyLCBiYWRnaW5nIGlmIG5lY2Vzc2FyeS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEJhZGdlZExhYmVsKFN0cmluZyBsYWJlbCwgaW50IHVzZXJJZCkgeworICAgIHByaXZhdGUgU3RyaW5nIGdldEJhZGdlZExhYmVsKFN0cmluZyBsYWJlbCwgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUubXlVc2VySWQoKSkgewogICAgICAgICAgICAgbGFiZWwgPSBtUG0uZ2V0VXNlckJhZGdlZExhYmVsKGxhYmVsLCBuZXcgVXNlckhhbmRsZSh1c2VySWQpKS50b1N0cmluZygpOwogICAgICAgICB9CkBAIC02MTAsNyArNjUwLDcgQEAKICAgICAgICAgaWYgKG1QbSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTeXN0ZW1TZXJ2aWNlc1Byb3h5KSByZXR1cm4gbnVsbDsKIAotICAgICAgICBBcnJheUxpc3Q8UmVzb2x2ZUluZm8+IGhvbWVBY3Rpdml0aWVzID0gbmV3IEFycmF5TGlzdDxSZXNvbHZlSW5mbz4oKTsKKyAgICAgICAgQXJyYXlMaXN0PFJlc29sdmVJbmZvPiBob21lQWN0aXZpdGllcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBDb21wb25lbnROYW1lIGRlZmF1bHRIb21lQWN0aXZpdHkgPSBtUG0uZ2V0SG9tZUFjdGl2aXRpZXMoaG9tZUFjdGl2aXRpZXMpOwogICAgICAgICBpZiAoZGVmYXVsdEhvbWVBY3Rpdml0eSAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEhvbWVBY3Rpdml0eS5nZXRQYWNrYWdlTmFtZSgpOwpAQCAtNjk4LDcgKzczOCw3IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgUmVjZW50cyB3aWRnZXQgZnJvbSB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBnbG9iYWwgYXNzaXN0IGFjdGl2aXR5LgogICAgICAqLwotICAgIHByaXZhdGUgQXBwV2lkZ2V0UHJvdmlkZXJJbmZvIHJlc29sdmVTZWFyY2hBcHBXaWRnZXQoKSB7CisgICAgcHVibGljIEFwcFdpZGdldFByb3ZpZGVySW5mbyByZXNvbHZlU2VhcmNoQXBwV2lkZ2V0KCkgewogICAgICAgICBpZiAobUFzc2lzdENvbXBvbmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgTGlzdDxBcHBXaWRnZXRQcm92aWRlckluZm8+IHdpZGdldHMgPSBtQXdtLmdldEluc3RhbGxlZFByb3ZpZGVycygKICAgICAgICAgICAgICAgICBBcHBXaWRnZXRQcm92aWRlckluZm8uV0lER0VUX0NBVEVHT1JZX1NFQVJDSEJPWCk7CkBAIC03NDAsNiArNzgwLDE5IEBACiAgICAgfQogCiAgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHRhc2sgaXMgaW4gc2NyZWVuLXBpbm5pbmcgbW9kZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVlblBpbm5pbmdBY3RpdmUoKSB7CisgICAgICAgIGlmIChtSWFtID09IG51bGwpIHJldHVybiBmYWxzZTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG1JYW0uaXNJbkxvY2tUYXNrTW9kZSgpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGdsb2JhbCBzZXR0aW5nLgogICAgICAqLwogICAgIHB1YmxpYyBpbnQgZ2V0R2xvYmFsU2V0dGluZyhDb250ZXh0IGNvbnRleHQsIFN0cmluZyBzZXR0aW5nKSB7CkBAIC04MTIsOCArODY1LDcgQEAKICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CiAgICAgICAgIGlmIChtSWFtICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUlhbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrSWQsIElOVkFMSURfU1RBQ0tfSUQsIG9wdGlvbnMgPT0gbnVsbCA/IG51bGwgOiBvcHRpb25zLnRvQnVuZGxlKCkpOworICAgICAgICAgICAgICAgIG1JYW0uc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKHRhc2tJZCwgb3B0aW9ucyA9PSBudWxsID8gbnVsbCA6IG9wdGlvbnMudG9CdW5kbGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy5lKFRBRywgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucmVjZW50c19sYXVuY2hfZXJyb3JfbWVzc2FnZSwgdGFza05hbWUpLCBlKTsKQEAgLTg1NSwxNCArOTA3LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRG9ja2VkU3RhY2tMaXN0ZW5lcihJRG9ja2VkU3RhY2tMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgICAgICBpZiAobVdtID09IG51bGwpIHJldHVybjsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpLnJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKTsKKyAgICAgICAgICAgIFdpbmRvd01hbmFnZXJHbG9iYWwuZ2V0V2luZG93TWFuYWdlclNlcnZpY2UoKS5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIobGlzdGVuZXIpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhDb250ZXh0IGNvbnRleHQsIEtleWJvYXJkU2hvcnRjdXRzUmVjZWl2ZXIgcmVjZWl2ZXIpIHsKKyAgICAgICAgbVdtLnJlcXVlc3RBcHBLZXlib2FyZFNob3J0Y3V0cyhyZWNlaXZlcik7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkUGxhbi5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkUGxhbi5qYXZhCmluZGV4IDE4NDViZjkuLmQ4ZGZjZTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1JlY2VudHNUYXNrTG9hZFBsYW4uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9SZWNlbnRzVGFza0xvYWRQbGFuLmphdmEKQEAgLTI1LDExICsyNSw5IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUHJlZnM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0NvbmZpZ3VyYXRpb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzRGVidWdGbGFnczsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuU3lzdGVtU2VydmljZXNQcm94eTsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC00Nyw5ICs0NSw2IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBSZWNlbnRzVGFza0xvYWRQbGFuIHsKIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiUmVjZW50c1Rhc2tMb2FkUGxhbiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCiAgICAgcHJpdmF0ZSBzdGF0aWMgaW50IE1JTl9OVU1fVEFTS1MgPSA1OwogICAgIHByaXZhdGUgc3RhdGljIGludCBTRVNTSU9OX0JFR0lOX1RJTUUgPSAxMDAwIC8qIG1zL3MgKi8gKiA2MCAvKiBzL21pbiAqLyAqIDYwIC8qIG1pbi9ociAqLyAqCiAgICAgICAgICAgICA2IC8qIGhycyAqLzsKQEAgLTEwNywxMyArMTAyLDYgQEAKIAogICAgICAgICAvLyBTaW5jZSB0aGUgcmF3IHRhc2tzIGFyZSBnaXZlbiBpbiBtb3N0LXJlY2VudCB0byBsZWFzdC1yZWNlbnQgb3JkZXIsIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdAogICAgICAgICBDb2xsZWN0aW9ucy5yZXZlcnNlKG1SYXdUYXNrcyk7Ci0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJwcmVsb2FkUmF3VGFza3MsIHRhc2tzOiAiICsgbVJhd1Rhc2tzLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKEFjdGl2aXR5TWFuYWdlci5SZWNlbnRUYXNrSW5mbyBpbmZvIDogbVJhd1Rhc2tzKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiICAiICsgaW5mby5iYXNlSW50ZW50ICsgIiwgIiArIGluZm8ubGFzdEFjdGl2ZVRpbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC0xMjYsMTQgKzExNCw4IEBACiAgICAgICogLSBsZWFzdC1yZWNlbnQgdG8gbW9zdC1yZWNlbnQgZnJlZWZvcm0gdGFza3MKICAgICAgKi8KICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcHJlbG9hZFBsYW4oUmVjZW50c1Rhc2tMb2FkZXIgbG9hZGVyLCBib29sZWFuIGlzVG9wVGFza0hvbWUpIHsKLSAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJwcmVsb2FkUGxhbiIpOwotCi0gICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKLSAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7Ci0gICAgICAgIEFycmF5TGlzdDxUYXNrPiBmcmVlZm9ybVRhc2tzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIEFycmF5TGlzdDxUYXNrPiBzdGFja1Rhc2tzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIEFycmF5TGlzdDxUYXNrPiBhbGxUYXNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBpZiAobVJhd1Rhc2tzID09IG51bGwpIHsKICAgICAgICAgICAgIHByZWxvYWRSYXdUYXNrcyhpc1RvcFRhc2tIb21lKTsKICAgICAgICAgfQpAQCAtMTUxLDU4ICsxMzMsMzcgQEAKIAogICAgICAgICAgICAgLy8gVGhpcyB0YXNrIGlzIG9ubHkgc2hvd24gaW4gdGhlIHN0YWNrIGlmIGl0IHN0YXRpc2ZpZXMgdGhlIGhpc3RvcmljYWwgdGltZSBvciBtaW4KICAgICAgICAgICAgIC8vIG51bWJlciBvZiB0YXNrcyBjb25zdHJhaW50cy4gRnJlZWZvcm0gdGFza3MgYXJlIGFsc28gYWx3YXlzIHNob3duLgotICAgICAgICAgICAgYm9vbGVhbiBpc1N0YWNrVGFzayA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoZGVidWdGbGFncy5pc0hpc3RvcnlFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzRnJlZWZvcm1UYXNrID0gU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sodC5zdGFja0lkKTsKLSAgICAgICAgICAgICAgICBpc1N0YWNrVGFzayA9IGlzRnJlZWZvcm1UYXNrIHx8ICghaXNIaXN0b3JpY2FsVGFzayh0KSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgKHQubGFzdEFjdGl2ZVRpbWUgPj0gbGFzdFN0YWNrQWN0aXZlVGltZSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID49ICh0YXNrQ291bnQgLSBNSU5fTlVNX1RBU0tTKSkpOwotICAgICAgICAgICAgICAgIGlmIChpc1N0YWNrVGFzayAmJiBuZXdMYXN0U3RhY2tBY3RpdmVUaW1lIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBuZXdMYXN0U3RhY2tBY3RpdmVUaW1lID0gdC5sYXN0QWN0aXZlVGltZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGlzRnJlZWZvcm1UYXNrID0gU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sodC5zdGFja0lkKTsKKyAgICAgICAgICAgIGJvb2xlYW4gaXNTdGFja1Rhc2sgPSBpc0ZyZWVmb3JtVGFzayB8fCAoIWlzSGlzdG9yaWNhbFRhc2sodCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKHQubGFzdEFjdGl2ZVRpbWUgPj0gbGFzdFN0YWNrQWN0aXZlVGltZSAmJiBpID49ICh0YXNrQ291bnQgLSBNSU5fTlVNX1RBU0tTKSkpOworICAgICAgICAgICAgaWYgKGlzU3RhY2tUYXNrICYmIG5ld0xhc3RTdGFja0FjdGl2ZVRpbWUgPCAwKSB7CisgICAgICAgICAgICAgICAgbmV3TGFzdFN0YWNrQWN0aXZlVGltZSA9IHQubGFzdEFjdGl2ZVRpbWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIExvYWQgdGhlIGxhYmVsLCBpY29uLCBhbmQgY29sb3IKLSAgICAgICAgICAgIFN0cmluZyBhY3Rpdml0eUxhYmVsID0gbG9hZGVyLmdldEFuZFVwZGF0ZUFjdGl2aXR5TGFiZWwodGFza0tleSwgdC50YXNrRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgIHNzcCk7Ci0gICAgICAgICAgICBTdHJpbmcgY29udGVudERlc2NyaXB0aW9uID0gbG9hZGVyLmdldEFuZFVwZGF0ZUNvbnRlbnREZXNjcmlwdGlvbih0YXNrS2V5LAotICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eUxhYmVsLCBzc3AsIHJlcyk7Ci0gICAgICAgICAgICBEcmF3YWJsZSBhY3Rpdml0eUljb24gPSBpc1N0YWNrVGFzawotICAgICAgICAgICAgICAgICAgICA/IGxvYWRlci5nZXRBbmRVcGRhdGVBY3Rpdml0eUljb24odGFza0tleSwgdC50YXNrRGVzY3JpcHRpb24sIHNzcCwgcmVzLCBmYWxzZSkKKyAgICAgICAgICAgIC8vIExvYWQgdGhlIHRpdGxlLCBpY29uLCBhbmQgY29sb3IKKyAgICAgICAgICAgIFN0cmluZyB0aXRsZSA9IGxvYWRlci5nZXRBbmRVcGRhdGVBY3Rpdml0eVRpdGxlKHRhc2tLZXksIHQudGFza0Rlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIFN0cmluZyBjb250ZW50RGVzY3JpcHRpb24gPSBsb2FkZXIuZ2V0QW5kVXBkYXRlQ29udGVudERlc2NyaXB0aW9uKHRhc2tLZXksIHRpdGxlLCByZXMpOworICAgICAgICAgICAgRHJhd2FibGUgaWNvbiA9IGlzU3RhY2tUYXNrCisgICAgICAgICAgICAgICAgICAgID8gbG9hZGVyLmdldEFuZFVwZGF0ZUFjdGl2aXR5SWNvbih0YXNrS2V5LCB0LnRhc2tEZXNjcmlwdGlvbiwgcmVzLCBmYWxzZSkKICAgICAgICAgICAgICAgICAgICAgOiBudWxsOworICAgICAgICAgICAgQml0bWFwIHRodW1ibmFpbCA9IGxvYWRlci5nZXRBbmRVcGRhdGVUaHVtYm5haWwodGFza0tleSwgZmFsc2UpOwogICAgICAgICAgICAgaW50IGFjdGl2aXR5Q29sb3IgPSBsb2FkZXIuZ2V0QWN0aXZpdHlQcmltYXJ5Q29sb3IodC50YXNrRGVzY3JpcHRpb24pOwogCi0gICAgICAgICAgICBCaXRtYXAgaWNvbiA9IHQudGFza0Rlc2NyaXB0aW9uICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgPyB0LnRhc2tEZXNjcmlwdGlvbi5nZXRJbk1lbW9yeUljb24oKSA6IG51bGw7Ci0gICAgICAgICAgICBTdHJpbmcgaWNvbkZpbGVuYW1lID0gdC50YXNrRGVzY3JpcHRpb24gIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IHQudGFza0Rlc2NyaXB0aW9uLmdldEljb25GaWxlbmFtZSgpIDogbnVsbDsKLQogICAgICAgICAgICAgLy8gQWRkIHRoZSB0YXNrIHRvIHRoZSBzdGFjawotICAgICAgICAgICAgVGFzayB0YXNrID0gbmV3IFRhc2sodGFza0tleSwgdC5hZmZpbGlhdGVkVGFza0lkLCB0LmFmZmlsaWF0ZWRUYXNrQ29sb3IsIGFjdGl2aXR5TGFiZWwsCi0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnREZXNjcmlwdGlvbiwgYWN0aXZpdHlJY29uLCBhY3Rpdml0eUNvbG9yLCAoaSA9PSAodGFza0NvdW50IC0gMSkpLAotICAgICAgICAgICAgICAgICAgICBjb25maWcubG9ja1RvQXBwRW5hYmxlZCwgIWlzU3RhY2tUYXNrLCBpY29uLCBpY29uRmlsZW5hbWUsIHQuYm91bmRzKTsKLSAgICAgICAgICAgIHRhc2sudGh1bWJuYWlsID0gbG9hZGVyLmdldEFuZFVwZGF0ZVRodW1ibmFpbCh0YXNrS2V5LCBzc3AsIGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgYWN0aXZpdHlMYWJlbCArICIgYm91bmRzOiAiICsgdC5ib3VuZHMpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgVGFzayB0YXNrID0gbmV3IFRhc2sodGFza0tleSwgdC5hZmZpbGlhdGVkVGFza0lkLCB0LmFmZmlsaWF0ZWRUYXNrQ29sb3IsIGljb24sCisgICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbCwgdGl0bGUsIGNvbnRlbnREZXNjcmlwdGlvbiwgYWN0aXZpdHlDb2xvciwgIWlzU3RhY2tUYXNrLAorICAgICAgICAgICAgICAgICAgICB0LmJvdW5kcywgdC50YXNrRGVzY3JpcHRpb24pOwogCi0gICAgICAgICAgICBpZiAodGFzay5pc0ZyZWVmb3JtVGFzaygpKSB7Ci0gICAgICAgICAgICAgICAgZnJlZWZvcm1UYXNrcy5hZGQodGFzayk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YWNrVGFza3MuYWRkKHRhc2spOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYWxsVGFza3MuYWRkKHRhc2spOwogICAgICAgICB9Ci0gICAgICAgIGlmIChkZWJ1Z0ZsYWdzLmlzSGlzdG9yeUVuYWJsZWQoKSAmJiBuZXdMYXN0U3RhY2tBY3RpdmVUaW1lICE9IC0xKSB7CisgICAgICAgIGlmIChuZXdMYXN0U3RhY2tBY3RpdmVUaW1lICE9IC0xKSB7CiAgICAgICAgICAgICBQcmVmcy5wdXRMb25nKG1Db250ZXh0LCBQcmVmcy5LZXkuT1ZFUlZJRVdfTEFTVF9TVEFDS19UQVNLX0FDVElWRV9USU1FLAogICAgICAgICAgICAgICAgICAgICBuZXdMYXN0U3RhY2tBY3RpdmVUaW1lKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHN0YWNrcwotICAgICAgICBBcnJheUxpc3Q8VGFzaz4gYWxsVGFza3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgYWxsVGFza3MuYWRkQWxsKHN0YWNrVGFza3MpOwotICAgICAgICBhbGxUYXNrcy5hZGRBbGwoZnJlZWZvcm1UYXNrcyk7CiAgICAgICAgIG1TdGFjayA9IG5ldyBUYXNrU3RhY2soKTsKLSAgICAgICAgbVN0YWNrLnNldFRhc2tzKGFsbFRhc2tzKTsKKyAgICAgICAgbVN0YWNrLnNldFRhc2tzKGFsbFRhc2tzLCBmYWxzZSAvKiBub3RpZnlTdGFja0NoYW5nZXMgKi8pOwogICAgICAgICBtU3RhY2suY3JlYXRlQWZmaWxpYXRlZEdyb3VwaW5ncyhtQ29udGV4dCk7CiAgICAgfQogCkBAIC0yMTEsMTkgKzE3MiwxMyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleGVjdXRlUGxhbihPcHRpb25zIG9wdHMsIFJlY2VudHNUYXNrTG9hZGVyIGxvYWRlciwKICAgICAgICAgICAgIFRhc2tSZXNvdXJjZUxvYWRRdWV1ZSBsb2FkUXVldWUpIHsKLSAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJleGVjdXRlUGxhbiwgIyB0YXNrczogIiArIG9wdHMubnVtVmlzaWJsZVRhc2tzICsKLSAgICAgICAgICAgICAgICAiLCAjIHRodW1ibmFpbHM6ICIgKyBvcHRzLm51bVZpc2libGVUYXNrVGh1bWJuYWlscyArCi0gICAgICAgICAgICAgICAgIiwgcnVubmluZyB0YXNrIGlkOiAiICsgb3B0cy5ydW5uaW5nVGFza0lkKTsKLQogICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKLSAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CiAgICAgICAgIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKIAogICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBvZiB0aGUgdGFza3MgYW5kIGxvYWQgdGhlbSBhY2NvcmRpbmcgdG8gdGhlIGxvYWQgY29uZGl0aW9ucy4KICAgICAgICAgQXJyYXlMaXN0PFRhc2s+IHRhc2tzID0gbVN0YWNrLmdldFN0YWNrVGFza3MoKTsKICAgICAgICAgaW50IHRhc2tDb3VudCA9IHRhc2tzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrQ291bnQ7IGkrKykgewotICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlJlY2VudFRhc2tJbmZvIHQgPSBtUmF3VGFza3MuZ2V0KGkpOwogICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza3MuZ2V0KGkpOwogICAgICAgICAgICAgVGFzay5UYXNrS2V5IHRhc2tLZXkgPSB0YXNrLmtleTsKIApAQCAtMjM3LDE3ICsxOTIsMTUgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG9wdHMubG9hZEljb25zICYmIChpc1J1bm5pbmdUYXNrIHx8IGlzVmlzaWJsZVRhc2spKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRhc2suYWN0aXZpdHlJY29uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJcdExvYWRpbmcgaWNvbjogIiArIHRhc2tLZXkpOwotICAgICAgICAgICAgICAgICAgICB0YXNrLmFjdGl2aXR5SWNvbiA9IGxvYWRlci5nZXRBbmRVcGRhdGVBY3Rpdml0eUljb24odGFza0tleSwgdC50YXNrRGVzY3JpcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwLCByZXMsIHRydWUpOworICAgICAgICAgICAgICAgIGlmICh0YXNrLmljb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0YXNrLmljb24gPSBsb2FkZXIuZ2V0QW5kVXBkYXRlQWN0aXZpdHlJY29uKHRhc2tLZXksIHRhc2sudGFza0Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcywgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG9wdHMubG9hZFRodW1ibmFpbHMgJiYgKGlzUnVubmluZ1Rhc2sgfHwgaXNWaXNpYmxlVGh1bWJuYWlsKSkgewogICAgICAgICAgICAgICAgIGlmICh0YXNrLnRodW1ibmFpbCA9PSBudWxsIHx8IGlzUnVubmluZ1Rhc2spIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJcdExvYWRpbmcgdGh1bWJuYWlsOiAiICsgdGFza0tleSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuc3ZlbHRlTGV2ZWwgPD0gUmVjZW50c0NvbmZpZ3VyYXRpb24uU1ZFTFRFX0xJTUlUX0NBQ0hFKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnRodW1ibmFpbCA9IGxvYWRlci5nZXRBbmRVcGRhdGVUaHVtYm5haWwodGFza0tleSwgc3NwLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sudGh1bWJuYWlsID0gbG9hZGVyLmdldEFuZFVwZGF0ZVRodW1ibmFpbCh0YXNrS2V5LCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuc3ZlbHRlTGV2ZWwgPT0gUmVjZW50c0NvbmZpZ3VyYXRpb24uU1ZFTFRFX0RJU0FCTEVfQ0FDSEUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRRdWV1ZS5hZGRUYXNrKHRhc2spOwogICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9SZWNlbnRzVGFza0xvYWRlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkZXIuamF2YQppbmRleCA5NjVlN2E2Ny4uMjgzMzhkODMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1JlY2VudHNUYXNrTG9hZGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvUmVjZW50c1Rhc2tMb2FkZXIuamF2YQpAQCAtOTMsMjMgKzkzLDIzIEBACiAgICAgSGFuZGxlciBtTWFpblRocmVhZEhhbmRsZXI7CiAKICAgICBUYXNrUmVzb3VyY2VMb2FkUXVldWUgbUxvYWRRdWV1ZTsKLSAgICBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1BcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1JY29uQ2FjaGU7CiAgICAgVGFza0tleUxydUNhY2hlPEJpdG1hcD4gbVRodW1ibmFpbENhY2hlOwogICAgIEJpdG1hcCBtRGVmYXVsdFRodW1ibmFpbDsKLSAgICBCaXRtYXBEcmF3YWJsZSBtRGVmYXVsdEFwcGxpY2F0aW9uSWNvbjsKKyAgICBCaXRtYXBEcmF3YWJsZSBtRGVmYXVsdEljb247CiAKICAgICBib29sZWFuIG1DYW5jZWxsZWQ7CiAgICAgYm9vbGVhbiBtV2FpdGluZ09uTG9hZFF1ZXVlOwogCiAgICAgLyoqIENvbnN0cnVjdG9yLCBjcmVhdGVzIGEgbmV3IGxvYWRpbmcgdGhyZWFkIHRoYXQgbG9hZHMgdGFzayByZXNvdXJjZXMgaW4gdGhlIGJhY2tncm91bmQgKi8KICAgICBwdWJsaWMgQmFja2dyb3VuZFRhc2tMb2FkZXIoVGFza1Jlc291cmNlTG9hZFF1ZXVlIGxvYWRRdWV1ZSwKLSAgICAgICAgICAgIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gYXBwbGljYXRpb25JY29uQ2FjaGUsIFRhc2tLZXlMcnVDYWNoZTxCaXRtYXA+IHRodW1ibmFpbENhY2hlLAotICAgICAgICAgICAgQml0bWFwIGRlZmF1bHRUaHVtYm5haWwsIEJpdG1hcERyYXdhYmxlIGRlZmF1bHRBcHBsaWNhdGlvbkljb24pIHsKKyAgICAgICAgICAgIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gaWNvbkNhY2hlLCBUYXNrS2V5THJ1Q2FjaGU8Qml0bWFwPiB0aHVtYm5haWxDYWNoZSwKKyAgICAgICAgICAgIEJpdG1hcCBkZWZhdWx0VGh1bWJuYWlsLCBCaXRtYXBEcmF3YWJsZSBkZWZhdWx0SWNvbikgewogICAgICAgICBtTG9hZFF1ZXVlID0gbG9hZFF1ZXVlOwotICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUgPSBhcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICAgICAgbUljb25DYWNoZSA9IGljb25DYWNoZTsKICAgICAgICAgbVRodW1ibmFpbENhY2hlID0gdGh1bWJuYWlsQ2FjaGU7CiAgICAgICAgIG1EZWZhdWx0VGh1bWJuYWlsID0gZGVmYXVsdFRodW1ibmFpbDsKLSAgICAgICAgbURlZmF1bHRBcHBsaWNhdGlvbkljb24gPSBkZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgICAgICBtRGVmYXVsdEljb24gPSBkZWZhdWx0SWNvbjsKICAgICAgICAgbU1haW5UaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKICAgICAgICAgbUxvYWRUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCgiUmVjZW50cy1UYXNrUmVzb3VyY2VMb2FkZXIiLAogICAgICAgICAgICAgICAgIGFuZHJvaWQub3MuUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7CkBAIC0xNjMsMzAgKzE2MywzMCBAQAogICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgcXVldWUKICAgICAgICAgICAgICAgICAgICAgZmluYWwgVGFzayB0ID0gbUxvYWRRdWV1ZS5uZXh0VGFzaygpOwogICAgICAgICAgICAgICAgICAgICBpZiAodCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZSBjYWNoZWRJY29uID0gbUFwcGxpY2F0aW9uSWNvbkNhY2hlLmdldCh0LmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEcmF3YWJsZSBjYWNoZWRJY29uID0gbUljb25DYWNoZS5nZXQodC5rZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwIGNhY2hlZFRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXQodC5rZXkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBhcHBsaWNhdGlvbiBpY29uIGlmIGl0IGlzIHN0YWxlIG9yIHdlIGhhdmVuJ3QgY2FjaGVkIG9uZSB5ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIGljb24gaWYgaXQgaXMgc3RhbGUgb3Igd2UgaGF2ZW4ndCBjYWNoZWQgb25lIHlldAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZEljb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZEljb24gPSBnZXRUYXNrRGVzY3JpcHRpb25JY29uKHQua2V5LCB0Lmljb24sIHQuaWNvbkZpbGVuYW1lLCBzc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IHNzcC5nZXRCYWRnZWRUYXNrRGVzY3JpcHRpb25JY29uKHQudGFza0Rlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5rZXkudXNlcklkLCBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkSWNvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBpbmZvID0gc3NwLmdldEFjdGl2aXR5SW5mbygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmtleS5nZXRDb21wb25lbnQoKSwgdC5rZXkudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJMb2FkaW5nIGljb246ICIgKyB0LmtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRJY29uID0gc3NwLmdldEFjdGl2aXR5SWNvbihpbmZvLCB0LmtleS51c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IHNzcC5nZXRCYWRnZWRBY3Rpdml0eUljb24oaW5mbywgdC5rZXkudXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRJY29uID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkSWNvbiA9IG1EZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRJY29uID0gbURlZmF1bHRJY29uOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGV2ZW4gaWYgd2UgY2FuJ3QgbG9hZCB0aGUgaWNvbiwgd2Ugd2lsbCBzZXQgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBpY29uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS5wdXQodC5rZXksIGNhY2hlZEljb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUucHV0KHQua2V5LCBjYWNoZWRJY29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvYWQgdGhlIHRodW1ibmFpbCBpZiBpdCBpcyBzdGFsZSBvciB3ZSBoYXZlbid0IGNhY2hlZCBvbmUgeWV0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkVGh1bWJuYWlsID09IG51bGwpIHsKQEAgLTIzNCwxOCArMjM0LDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIERyYXdhYmxlIGdldFRhc2tEZXNjcmlwdGlvbkljb24oVGFzay5UYXNrS2V5IHRhc2tLZXksIEJpdG1hcCBpY29uQml0bWFwLCBTdHJpbmcgaWNvbkZpbGVuYW1lLAotICAgICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgQml0bWFwIHRkSWNvbiA9IGljb25CaXRtYXAgIT0gbnVsbAotICAgICAgICAgICAgICAgID8gaWNvbkJpdG1hcAotICAgICAgICAgICAgICAgIDogQWN0aXZpdHlNYW5hZ2VyLlRhc2tEZXNjcmlwdGlvbi5sb2FkVGFza0Rlc2NyaXB0aW9uSWNvbihpY29uRmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrS2V5LnVzZXJJZCk7Ci0gICAgICAgIGlmICh0ZEljb24gIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHNzcC5nZXRCYWRnZWRJY29uKG5ldyBCaXRtYXBEcmF3YWJsZShyZXMsIHRkSWNvbiksIHRhc2tLZXkudXNlcklkKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9CiB9CiAKIC8qKgpAQCAtMjYyLDcgKzI1MCw3IEBACiAgICAgLy8gYWN0aXZlIHRpbWUuICBJbnN0ZWFkLCB3ZSByZWx5IG9uIHRoZSBSZWNlbnRzUGFja2FnZU1vbml0b3IgdG8ga2VlcCB1cyBpbmZvcm1lZCB3aGVuZXZlciBhCiAgICAgLy8gcGFja2FnZSBpbiB0aGUgY2FjaGUgaGFzIGJlZW4gdXBkYXRlZCwgc28gdGhhdCB3ZSBtYXkgcmVtb3ZlIGl0LgogICAgIHByaXZhdGUgZmluYWwgTHJ1Q2FjaGU8Q29tcG9uZW50TmFtZSwgQWN0aXZpdHlJbmZvPiBtQWN0aXZpdHlJbmZvQ2FjaGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBUYXNrS2V5THJ1Q2FjaGU8RHJhd2FibGU+IG1BcHBsaWNhdGlvbkljb25DYWNoZTsKKyAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxEcmF3YWJsZT4gbUljb25DYWNoZTsKICAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxCaXRtYXA+IG1UaHVtYm5haWxDYWNoZTsKICAgICBwcml2YXRlIGZpbmFsIFRhc2tLZXlMcnVDYWNoZTxTdHJpbmc+IG1BY3Rpdml0eUxhYmVsQ2FjaGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBUYXNrS2V5THJ1Q2FjaGU8U3RyaW5nPiBtQ29udGVudERlc2NyaXB0aW9uQ2FjaGU7CkBAIC0yNzUsNyArMjYzLDcgQEAKICAgICBwcml2YXRlIGludCBtTnVtVmlzaWJsZVRodW1ibmFpbHNMb2FkZWQ7CiAKICAgICBpbnQgbURlZmF1bHRUYXNrQmFyQmFja2dyb3VuZENvbG9yOwotICAgIEJpdG1hcERyYXdhYmxlIG1EZWZhdWx0QXBwbGljYXRpb25JY29uOworICAgIEJpdG1hcERyYXdhYmxlIG1EZWZhdWx0SWNvbjsKICAgICBCaXRtYXAgbURlZmF1bHRUaHVtYm5haWw7CiAKICAgICBwdWJsaWMgUmVjZW50c1Rhc2tMb2FkZXIoQ29udGV4dCBjb250ZXh0KSB7CkBAIC0yOTUsMjIgKzI4MywyMiBAQAogICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoMSwgMSwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwogICAgICAgICBtRGVmYXVsdFRodW1ibmFpbC5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIG1EZWZhdWx0VGh1bWJuYWlsLmVyYXNlQ29sb3IoMHhGRmZmZmZmZik7Ci0gICAgICAgIG1EZWZhdWx0QXBwbGljYXRpb25JY29uID0gbmV3IEJpdG1hcERyYXdhYmxlKGNvbnRleHQuZ2V0UmVzb3VyY2VzKCksIGljb24pOworICAgICAgICBtRGVmYXVsdEljb24gPSBuZXcgQml0bWFwRHJhd2FibGUoY29udGV4dC5nZXRSZXNvdXJjZXMoKSwgaWNvbik7CiAKICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgcHJveHksIGNhY2hlIGFuZCBsb2FkZXJzCiAgICAgICAgIGludCBudW1SZWNlbnRUYXNrcyA9IEFjdGl2aXR5TWFuYWdlci5nZXRNYXhSZWNlbnRUYXNrc1N0YXRpYygpOwogICAgICAgICBtTG9hZFF1ZXVlID0gbmV3IFRhc2tSZXNvdXJjZUxvYWRRdWV1ZSgpOwotICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUgPSBuZXcgVGFza0tleUxydUNhY2hlPD4oaWNvbkNhY2hlU2l6ZSk7CisgICAgICAgIG1JY29uQ2FjaGUgPSBuZXcgVGFza0tleUxydUNhY2hlPD4oaWNvbkNhY2hlU2l6ZSk7CiAgICAgICAgIG1UaHVtYm5haWxDYWNoZSA9IG5ldyBUYXNrS2V5THJ1Q2FjaGU8Pih0aHVtYm5haWxDYWNoZVNpemUpOwogICAgICAgICBtQWN0aXZpdHlMYWJlbENhY2hlID0gbmV3IFRhc2tLZXlMcnVDYWNoZTw+KG51bVJlY2VudFRhc2tzKTsKICAgICAgICAgbUNvbnRlbnREZXNjcmlwdGlvbkNhY2hlID0gbmV3IFRhc2tLZXlMcnVDYWNoZTw+KG51bVJlY2VudFRhc2tzKTsKICAgICAgICAgbUFjdGl2aXR5SW5mb0NhY2hlID0gbmV3IExydUNhY2hlKG51bVJlY2VudFRhc2tzKTsKLSAgICAgICAgbUxvYWRlciA9IG5ldyBCYWNrZ3JvdW5kVGFza0xvYWRlcihtTG9hZFF1ZXVlLCBtQXBwbGljYXRpb25JY29uQ2FjaGUsIG1UaHVtYm5haWxDYWNoZSwKLSAgICAgICAgICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCwgbURlZmF1bHRBcHBsaWNhdGlvbkljb24pOworICAgICAgICBtTG9hZGVyID0gbmV3IEJhY2tncm91bmRUYXNrTG9hZGVyKG1Mb2FkUXVldWUsIG1JY29uQ2FjaGUsIG1UaHVtYm5haWxDYWNoZSwKKyAgICAgICAgICAgICAgICBtRGVmYXVsdFRodW1ibmFpbCwgbURlZmF1bHRJY29uKTsKICAgICB9CiAKICAgICAvKiogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgYXBwIGljb24gY2FjaGUuICovCi0gICAgcHVibGljIGludCBnZXRBcHBsaWNhdGlvbkljb25DYWNoZVNpemUoKSB7CisgICAgcHVibGljIGludCBnZXRJY29uQ2FjaGVTaXplKCkgewogICAgICAgICByZXR1cm4gbU1heEljb25DYWNoZVNpemU7CiAgICAgfQogCkBAIC0zNDgsMzMgKzMzNiwzMyBAQAogCiAgICAgLyoqIEFjcXVpcmVzIHRoZSB0YXNrIHJlc291cmNlIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgcG9vbC4gKi8KICAgICBwdWJsaWMgdm9pZCBsb2FkVGFza0RhdGEoVGFzayB0KSB7Ci0gICAgICAgIERyYXdhYmxlIGFwcGxpY2F0aW9uSWNvbiA9IG1BcHBsaWNhdGlvbkljb25DYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0LmtleSk7CisgICAgICAgIERyYXdhYmxlIGljb24gPSBtSWNvbkNhY2hlLmdldEFuZEludmFsaWRhdGVJZk1vZGlmaWVkKHQua2V5KTsKICAgICAgICAgQml0bWFwIHRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0LmtleSk7CiAKICAgICAgICAgLy8gR3JhYiB0aGUgdGh1bWJuYWlsL2ljb24gZnJvbSB0aGUgY2FjaGUsIGlmIGVpdGhlciBkb24ndCBleGlzdCwgdGhlbiB0cmlnZ2VyIGEgcmVsb2FkIGFuZAogICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgYXNzZXRzIGluIHRoZWlyIHBsYWNlIHVudGlsIHRoZXkgbG9hZAotICAgICAgICBib29sZWFuIHJlcXVpcmVzTG9hZCA9IChhcHBsaWNhdGlvbkljb24gPT0gbnVsbCkgfHwgKHRodW1ibmFpbCA9PSBudWxsKTsKLSAgICAgICAgYXBwbGljYXRpb25JY29uID0gYXBwbGljYXRpb25JY29uICE9IG51bGwgPyBhcHBsaWNhdGlvbkljb24gOiBtRGVmYXVsdEFwcGxpY2F0aW9uSWNvbjsKKyAgICAgICAgYm9vbGVhbiByZXF1aXJlc0xvYWQgPSAoaWNvbiA9PSBudWxsKSB8fCAodGh1bWJuYWlsID09IG51bGwpOworICAgICAgICBpY29uID0gaWNvbiAhPSBudWxsID8gaWNvbiA6IG1EZWZhdWx0SWNvbjsKICAgICAgICAgaWYgKHJlcXVpcmVzTG9hZCkgewogICAgICAgICAgICAgbUxvYWRRdWV1ZS5hZGRUYXNrKHQpOwogICAgICAgICB9Ci0gICAgICAgIHQubm90aWZ5VGFza0RhdGFMb2FkZWQodGh1bWJuYWlsID09IG1EZWZhdWx0VGh1bWJuYWlsID8gbnVsbCA6IHRodW1ibmFpbCwgYXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgdC5ub3RpZnlUYXNrRGF0YUxvYWRlZCh0aHVtYm5haWwgPT0gbURlZmF1bHRUaHVtYm5haWwgPyBudWxsIDogdGh1bWJuYWlsLCBpY29uKTsKICAgICB9CiAKICAgICAvKiogUmVsZWFzZXMgdGhlIHRhc2sgcmVzb3VyY2UgZGF0YSBiYWNrIGludG8gdGhlIHBvb2wuICovCiAgICAgcHVibGljIHZvaWQgdW5sb2FkVGFza0RhdGEoVGFzayB0KSB7CiAgICAgICAgIG1Mb2FkUXVldWUucmVtb3ZlVGFzayh0KTsKLSAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0QXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0SWNvbik7CiAgICAgfQogCiAgICAgLyoqIENvbXBsZXRlbHkgcmVtb3ZlcyB0aGUgcmVzb3VyY2UgZGF0YSBmcm9tIHRoZSBwb29sLiAqLwogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZVRhc2tEYXRhKFRhc2sgdCwgYm9vbGVhbiBub3RpZnlUYXNrRGF0YVVubG9hZGVkKSB7CiAgICAgICAgIG1Mb2FkUXVldWUucmVtb3ZlVGFzayh0KTsKICAgICAgICAgbVRodW1ibmFpbENhY2hlLnJlbW92ZSh0LmtleSk7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS5yZW1vdmUodC5rZXkpOworICAgICAgICBtSWNvbkNhY2hlLnJlbW92ZSh0LmtleSk7CiAgICAgICAgIG1BY3Rpdml0eUluZm9DYWNoZS5yZW1vdmUodC5rZXkuZ2V0Q29tcG9uZW50KCkpOwogICAgICAgICBpZiAobm90aWZ5VGFza0RhdGFVbmxvYWRlZCkgewotICAgICAgICAgICAgdC5ub3RpZnlUYXNrRGF0YVVubG9hZGVkKG51bGwsIG1EZWZhdWx0QXBwbGljYXRpb25JY29uKTsKKyAgICAgICAgICAgIHQubm90aWZ5VGFza0RhdGFVbmxvYWRlZChudWxsLCBtRGVmYXVsdEljb24pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTYsMTQgKzM4NCwxNCBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnN2ZWx0ZUxldmVsID49IFJlY2VudHNDb25maWd1cmF0aW9uLlNWRUxURV9ESVNBQkxFX0NBQ0hFKSB7CiAgICAgICAgICAgICAgICAgICAgIG1UaHVtYm5haWxDYWNoZS5ldmljdEFsbCgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heChtTnVtVmlzaWJsZVRhc2tzTG9hZGVkLAorICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heChtTnVtVmlzaWJsZVRhc2tzTG9hZGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgbU1heEljb25DYWNoZVNpemUgLyAyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENvbXBvbmVudENhbGxiYWNrczIuVFJJTV9NRU1PUllfUlVOTklOR19NT0RFUkFURToKICAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50Q2FsbGJhY2tzMi5UUklNX01FTU9SWV9CQUNLR1JPVU5EOgogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBsZWF2aW5nIHJlY2VudHMsIHNvIHRyaW0gdGhlIGRhdGEgYSBiaXQKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLCBtTWF4VGh1bWJuYWlsQ2FjaGVTaXplIC8gMikpOwotICAgICAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb25DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhJY29uQ2FjaGVTaXplIC8gMikpOworICAgICAgICAgICAgICAgIG1JY29uQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLCBtTWF4SWNvbkNhY2hlU2l6ZSAvIDIpKTsKICAgICAgICAgICAgICAgICBtQWN0aXZpdHlJbmZvQ2FjaGUudHJpbVRvU2l6ZShNYXRoLm1heCgxLAogICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLmdldE1heFJlY2VudFRhc2tzU3RhdGljKCkgLyAyKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MTEsNyArMzk5LDcgQEAKICAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50Q2FsbGJhY2tzMi5UUklNX01FTU9SWV9NT0RFUkFURToKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZ29pbmcgdG8gYmUgbG93IG9uIG1lbW9yeQogICAgICAgICAgICAgICAgIG1UaHVtYm5haWxDYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhUaHVtYm5haWxDYWNoZVNpemUgLyA0KSk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnRyaW1Ub1NpemUoTWF0aC5tYXgoMSwgbU1heEljb25DYWNoZVNpemUgLyA0KSk7CisgICAgICAgICAgICAgICAgbUljb25DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsIG1NYXhJY29uQ2FjaGVTaXplIC8gNCkpOwogICAgICAgICAgICAgICAgIG1BY3Rpdml0eUluZm9DYWNoZS50cmltVG9TaXplKE1hdGgubWF4KDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuZ2V0TWF4UmVjZW50VGFza3NTdGF0aWMoKSAvIDQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQxOSw3ICs0MDcsNyBAQAogICAgICAgICAgICAgY2FzZSBDb21wb25lbnRDYWxsYmFja3MyLlRSSU1fTUVNT1JZX0NPTVBMRVRFOgogICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBsb3cgb24gbWVtb3J5LCBzbyByZWxlYXNlIGV2ZXJ5dGhpbmcKICAgICAgICAgICAgICAgICBtVGh1bWJuYWlsQ2FjaGUuZXZpY3RBbGwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGljYXRpb25JY29uQ2FjaGUuZXZpY3RBbGwoKTsKKyAgICAgICAgICAgICAgICBtSWNvbkNhY2hlLmV2aWN0QWxsKCk7CiAgICAgICAgICAgICAgICAgbUFjdGl2aXR5SW5mb0NhY2hlLmV2aWN0QWxsKCk7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGNhY2hlIGlzIHNtYWxsLCBvbmx5IGNsZWFyIHRoZSBsYWJlbCBjYWNoZSB3aGVuIHdlIGFyZSBjcml0aWNhbAogICAgICAgICAgICAgICAgIG1BY3Rpdml0eUxhYmVsQ2FjaGUuZXZpY3RBbGwoKTsKQEAgLTQzMyw4ICs0MjEsOSBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCB0YXNrIGxhYmVsIGlmIHRoZSB0YXNrIGtleSBpcyBub3QgZXhwaXJlZCwgdXBkYXRpbmcgdGhlIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwotICAgIFN0cmluZyBnZXRBbmRVcGRhdGVBY3Rpdml0eUxhYmVsKFRhc2suVGFza0tleSB0YXNrS2V5LCBBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwKSB7CisgICAgU3RyaW5nIGdldEFuZFVwZGF0ZUFjdGl2aXR5VGl0bGUoVGFzay5UYXNrS2V5IHRhc2tLZXksIEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24gdGQpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSB0YXNrIGRlc2NyaXB0aW9uIGxhYmVsIGlmIGl0IGV4aXN0cwogICAgICAgICBpZiAodGQgIT0gbnVsbCAmJiB0ZC5nZXRMYWJlbCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiB0ZC5nZXRMYWJlbCgpOwpAQCAtNDQ1LDcgKzQzNCw3IEBACiAgICAgICAgICAgICByZXR1cm4gbGFiZWw7CiAgICAgICAgIH0KICAgICAgICAgLy8gQWxsIHNob3J0IHBhdGhzIGZhaWxlZCwgbG9hZCB0aGUgbGFiZWwgZnJvbSB0aGUgYWN0aXZpdHkgaW5mbyBhbmQgY2FjaGUgaXQKLSAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5LCBzc3ApOworICAgICAgICBBY3Rpdml0eUluZm8gYWN0aXZpdHlJbmZvID0gZ2V0QW5kVXBkYXRlQWN0aXZpdHlJbmZvKHRhc2tLZXkpOwogICAgICAgICBpZiAoYWN0aXZpdHlJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgIGxhYmVsID0gc3NwLmdldEFjdGl2aXR5TGFiZWwoYWN0aXZpdHlJbmZvKTsKICAgICAgICAgICAgIG1BY3Rpdml0eUxhYmVsQ2FjaGUucHV0KHRhc2tLZXksIGxhYmVsKTsKQEAgLTQ2MSw3ICs0NTAsOSBAQAogICAgICAqIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwogICAgIFN0cmluZyBnZXRBbmRVcGRhdGVDb250ZW50RGVzY3JpcHRpb24oVGFzay5UYXNrS2V5IHRhc2tLZXksIFN0cmluZyBhY3Rpdml0eUxhYmVsLAotICAgICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgICAgIFJlc291cmNlcyByZXMpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgY29udGVudCBkZXNjcmlwdGlvbiBpZiBpdCBleGlzdHMKICAgICAgICAgU3RyaW5nIGxhYmVsID0gbUNvbnRlbnREZXNjcmlwdGlvbkNhY2hlLmdldEFuZEludmFsaWRhdGVJZk1vZGlmaWVkKHRhc2tLZXkpOwogICAgICAgICBpZiAobGFiZWwgIT0gbnVsbCkgewpAQCAtNDg2LDI4ICs0NzcsMjkgQEAKICAgICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgdGFzayBpY29uIGlmIHRoZSB0YXNrIGtleSBpcyBub3QgZXhwaXJlZCwgdXBkYXRpbmcgdGhlIGNhY2hlIGlmIGl0IGlzLgogICAgICAqLwogICAgIERyYXdhYmxlIGdldEFuZFVwZGF0ZUFjdGl2aXR5SWNvbihUYXNrLlRhc2tLZXkgdGFza0tleSwgQWN0aXZpdHlNYW5hZ2VyLlRhc2tEZXNjcmlwdGlvbiB0ZCwKLSAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwLCBSZXNvdXJjZXMgcmVzLCBib29sZWFuIGxvYWRJZk5vdENhY2hlZCkgeworICAgICAgICAgICAgUmVzb3VyY2VzIHJlcywgYm9vbGVhbiBsb2FkSWZOb3RDYWNoZWQpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisKICAgICAgICAgLy8gUmV0dXJuIHRoZSBjYWNoZWQgYWN0aXZpdHkgaWNvbiBpZiBpdCBleGlzdHMKLSAgICAgICAgRHJhd2FibGUgaWNvbiA9IG1BcHBsaWNhdGlvbkljb25DYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0YXNrS2V5KTsKKyAgICAgICAgRHJhd2FibGUgaWNvbiA9IG1JY29uQ2FjaGUuZ2V0QW5kSW52YWxpZGF0ZUlmTW9kaWZpZWQodGFza0tleSk7CiAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBpY29uOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxvYWRJZk5vdENhY2hlZCkgewogICAgICAgICAgICAgLy8gUmV0dXJuIGFuZCBjYWNoZSB0aGUgdGFzayBkZXNjcmlwdGlvbiBpY29uIGlmIGl0IGV4aXN0cwotICAgICAgICAgICAgaWNvbiA9IG1Mb2FkZXIuZ2V0VGFza0Rlc2NyaXB0aW9uSWNvbih0YXNrS2V5LCB0ZC5nZXRJbk1lbW9yeUljb24oKSwKLSAgICAgICAgICAgICAgICAgICAgdGQuZ2V0SWNvbkZpbGVuYW1lKCksIHNzcCwgcmVzKTsKKyAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QmFkZ2VkVGFza0Rlc2NyaXB0aW9uSWNvbih0ZCwgdGFza0tleS51c2VySWQsIHJlcyk7CiAgICAgICAgICAgICBpZiAoaWNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKKyAgICAgICAgICAgICAgICBtSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaWNvbjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTG9hZCB0aGUgaWNvbiBmcm9tIHRoZSBhY3Rpdml0eSBpbmZvIGFuZCBjYWNoZSBpdAotICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5LCBzc3ApOworICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyh0YXNrS2V5KTsKICAgICAgICAgICAgIGlmIChhY3Rpdml0eUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QWN0aXZpdHlJY29uKGFjdGl2aXR5SW5mbywgdGFza0tleS51c2VySWQpOworICAgICAgICAgICAgICAgIGljb24gPSBzc3AuZ2V0QmFkZ2VkQWN0aXZpdHlJY29uKGFjdGl2aXR5SW5mbywgdGFza0tleS51c2VySWQpOwogICAgICAgICAgICAgICAgIGlmIChpY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbkNhY2hlLnB1dCh0YXNrS2V5LCBpY29uKTsKKyAgICAgICAgICAgICAgICAgICAgbUljb25DYWNoZS5wdXQodGFza0tleSwgaWNvbik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpY29uOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTUxOSw4ICs1MTEsOSBAQAogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIGNhY2hlZCB0aHVtYm5haWwgaWYgdGhlIHRhc2sga2V5IGlzIG5vdCBleHBpcmVkLCB1cGRhdGluZyB0aGUgY2FjaGUgaWYgaXQgaXMuCiAgICAgICovCi0gICAgQml0bWFwIGdldEFuZFVwZGF0ZVRodW1ibmFpbChUYXNrLlRhc2tLZXkgdGFza0tleSwgU3lzdGVtU2VydmljZXNQcm94eSBzc3AsCi0gICAgICAgICAgICBib29sZWFuIGxvYWRJZk5vdENhY2hlZCkgeworICAgIEJpdG1hcCBnZXRBbmRVcGRhdGVUaHVtYm5haWwoVGFzay5UYXNrS2V5IHRhc2tLZXksIGJvb2xlYW4gbG9hZElmTm90Q2FjaGVkKSB7CisgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOworCiAgICAgICAgIC8vIFJldHVybiB0aGUgY2FjaGVkIHRodW1ibmFpbCBpZiBpdCBleGlzdHMKICAgICAgICAgQml0bWFwIHRodW1ibmFpbCA9IG1UaHVtYm5haWxDYWNoZS5nZXRBbmRJbnZhbGlkYXRlSWZNb2RpZmllZCh0YXNrS2V5KTsKICAgICAgICAgaWYgKHRodW1ibmFpbCAhPSBudWxsKSB7CkBAIC01NDMsNyArNTM2LDggQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0YXNrJ3MgcHJpbWFyeSBjb2xvci4KKyAgICAgKiBSZXR1cm5zIHRoZSB0YXNrJ3MgcHJpbWFyeSBjb2xvciBpZiBwb3NzaWJsZSwgZGVmYXVsdGluZyB0byB0aGUgZGVmYXVsdCBjb2xvciBpZiB0aGVyZSBpcworICAgICAqIG5vIHNwZWNpZmllZCBwcmltYXJ5IGNvbG9yLgogICAgICAqLwogICAgIGludCBnZXRBY3Rpdml0eVByaW1hcnlDb2xvcihBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRkKSB7CiAgICAgICAgIGlmICh0ZCAhPSBudWxsICYmIHRkLmdldFByaW1hcnlDb2xvcigpICE9IDApIHsKQEAgLTU1Niw3ICs1NTAsOCBAQAogICAgICAqIFJldHVybnMgdGhlIGFjdGl2aXR5IGluZm8gZm9yIHRoZSBnaXZlbiB0YXNrIGtleSwgcmV0cmlldmluZyBvbmUgZnJvbSB0aGUgc3lzdGVtIGlmIHRoZQogICAgICAqIHRhc2sga2V5IGlzIGV4cGlyZWQuCiAgICAgICovCi0gICAgcHJpdmF0ZSBBY3Rpdml0eUluZm8gZ2V0QW5kVXBkYXRlQWN0aXZpdHlJbmZvKFRhc2suVGFza0tleSB0YXNrS2V5LCBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCkgeworICAgIHByaXZhdGUgQWN0aXZpdHlJbmZvIGdldEFuZFVwZGF0ZUFjdGl2aXR5SW5mbyhUYXNrLlRhc2tLZXkgdGFza0tleSkgeworICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjbiA9IHRhc2tLZXkuZ2V0Q29tcG9uZW50KCk7CiAgICAgICAgIEFjdGl2aXR5SW5mbyBhY3Rpdml0eUluZm8gPSBtQWN0aXZpdHlJbmZvQ2FjaGUuZ2V0KGNuKTsKICAgICAgICAgaWYgKGFjdGl2aXR5SW5mbyA9PSBudWxsKSB7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9tb2RlbC9UYXNrLmphdmEKaW5kZXggNjBiZWRhZS4uZjdlMmI5ZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFzay5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1Rhc2suamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWw7CiAKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKQEAgLTI2LDYgKzI3LDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuU3lzdGVtU2VydmljZXNQcm94eTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuVXRpbGl0aWVzOwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIAogCkBAIC0zNiwxMCArMzgsOSBAQAogICAgIC8qIFRhc2sgY2FsbGJhY2tzICovCiAgICAgcHVibGljIGludGVyZmFjZSBUYXNrQ2FsbGJhY2tzIHsKICAgICAgICAgLyogTm90aWZpZXMgd2hlbiBhIHRhc2sgaGFzIGJlZW4gYm91bmQgKi8KLSAgICAgICAgcHVibGljIHZvaWQgb25UYXNrRGF0YUxvYWRlZCgpOworICAgICAgICBwdWJsaWMgdm9pZCBvblRhc2tEYXRhTG9hZGVkKFRhc2sgdGFzayk7CiAgICAgICAgIC8qIE5vdGlmaWVzIHdoZW4gYSB0YXNrIGhhcyBiZWVuIHVuYm91bmQgKi8KICAgICAgICAgcHVibGljIHZvaWQgb25UYXNrRGF0YVVubG9hZGVkKCk7Ci0KICAgICAgICAgLyogTm90aWZpZXMgd2hlbiBhIHRhc2sncyBzdGFjayBpZCBoYXMgY2hhbmdlZC4gKi8KICAgICAgICAgcHVibGljIHZvaWQgb25UYXNrU3RhY2tJZENoYW5nZWQoKTsKICAgICB9CkBAIC05Miw4MSArOTMsMTA3IEBACiAgICAgfQogCiAgICAgcHVibGljIFRhc2tLZXkga2V5OworCisgICAgLyoqCisgICAgICogVGhlIGdyb3VwIHdpbGwgYmUgY29tcHV0ZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFzaworICAgICAqLwogICAgIHB1YmxpYyBUYXNrR3JvdXBpbmcgZ3JvdXA7Ci0gICAgcHVibGljIGludCB0YXNrQWZmaWxpYXRpb247Ci0gICAgcHVibGljIGludCB0YXNrQWZmaWxpYXRpb25Db2xvcjsKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xhdW5jaFRhcmdldDsKLSAgICBwdWJsaWMgRHJhd2FibGUgYXBwbGljYXRpb25JY29uOwotICAgIHB1YmxpYyBEcmF3YWJsZSBhY3Rpdml0eUljb247CisgICAgLyoqCisgICAgICogVGhlIGFmZmlsaWF0aW9uVGFza0lkIGlzIHRoZSB0YXNrIGlkIG9mIHRoZSBwYXJlbnQgdGFzayBvciBpdHNlbGYgaWYgaXQgaXMgbm90IGFmZmlsaWF0ZWQKKyAgICAgKiB3aXRoIGFueSB0YXNrLgorICAgICAqLworICAgIHB1YmxpYyBpbnQgYWZmaWxpYXRpb25UYXNrSWQ7CisgICAgcHVibGljIGludCBhZmZpbGlhdGlvbkNvbG9yOworCisgICAgLyoqCisgICAgICogVGhlIGljb24gaXMgdGhlIHRhc2sgZGVzY3JpcHRpb24gaWNvbiAoaWYgcHJvdmlkZWQpLCB3aGljaCBmYWxscyBiYWNrIHRvIHRoZSBhY3Rpdml0eSBpY29uLAorICAgICAqIHdoaWNoIGNhbiB0aGVuIGZhbGwgYmFjayB0byB0aGUgYXBwbGljYXRpb24gaWNvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgRHJhd2FibGUgaWNvbjsKKyAgICBwdWJsaWMgQml0bWFwIHRodW1ibmFpbDsKKyAgICBwdWJsaWMgU3RyaW5nIHRpdGxlOwogICAgIHB1YmxpYyBTdHJpbmcgY29udGVudERlc2NyaXB0aW9uOwotICAgIHB1YmxpYyBTdHJpbmcgYWN0aXZpdHlMYWJlbDsKICAgICBwdWJsaWMgaW50IGNvbG9yUHJpbWFyeTsKICAgICBwdWJsaWMgYm9vbGVhbiB1c2VMaWdodE9uUHJpbWFyeUNvbG9yOwotICAgIHB1YmxpYyBCaXRtYXAgdGh1bWJuYWlsOwotICAgIHB1YmxpYyBib29sZWFuIGxvY2tUb1RoaXNUYXNrOwotICAgIHB1YmxpYyBib29sZWFuIGxvY2tUb1Rhc2tFbmFibGVkOwotICAgIHB1YmxpYyBib29sZWFuIGlzSGlzdG9yaWNhbDsKLSAgICBwdWJsaWMgQml0bWFwIGljb247Ci0gICAgcHVibGljIFN0cmluZyBpY29uRmlsZW5hbWU7CisKKyAgICAvKioKKyAgICAgKiBUaGUgYm91bmRzIG9mIHRoZSB0YXNrLCB1c2VkIG9ubHkgaWYgaXQgaXMgYSBmcmVlZm9ybSB0YXNrLgorICAgICAqLwogICAgIHB1YmxpYyBSZWN0IGJvdW5kczsKIAotICAgIHByaXZhdGUgVGFza0NhbGxiYWNrcyBtQ2I7CisgICAgLyoqCisgICAgICogVGhlIHRhc2sgZGVzY3JpcHRpb24gZm9yIHRoaXMgdGFzaywgb25seSB1c2VkIHRvIHJlbG9hZCB0YXNrIGljb25zLgorICAgICAqLworICAgIHB1YmxpYyBBY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uIHRhc2tEZXNjcmlwdGlvbjsKKworICAgIC8qKgorICAgICAqIFRoZSBzdGF0ZSBpc0xhdW5jaFRhcmdldCB3aWxsIGJlIHNldCBmb3IgdGhlIGNvcnJlY3QgdGFzayB1cG9uIGxhdW5jaGluZyBSZWNlbnRzLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzTGF1bmNoVGFyZ2V0OworICAgIHB1YmxpYyBib29sZWFuIGlzSGlzdG9yaWNhbDsKKworICAgIHByaXZhdGUgQXJyYXlMaXN0PFRhc2tDYWxsYmFja3M+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgIHB1YmxpYyBUYXNrKCkgewogICAgICAgICAvLyBEbyBub3RoaW5nCiAgICAgfQogCi0gICAgcHVibGljIFRhc2soVGFza0tleSBrZXksIGludCB0YXNrQWZmaWxpYXRpb24sIGludCB0YXNrQWZmaWxpYXRpb25Db2xvciwKLSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aXZpdHlUaXRsZSwgU3RyaW5nIGNvbnRlbnREZXNjcmlwdGlvbiwgRHJhd2FibGUgYWN0aXZpdHlJY29uLAotICAgICAgICAgICAgICAgIGludCBjb2xvclByaW1hcnksIGJvb2xlYW4gbG9ja1RvVGhpc1Rhc2ssIGJvb2xlYW4gbG9ja1RvVGFza0VuYWJsZWQsCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBpc0hpc3RvcmljYWwsIEJpdG1hcCBpY29uLCBTdHJpbmcgaWNvbkZpbGVuYW1lLCBSZWN0IGJvdW5kcykgewotICAgICAgICBib29sZWFuIGlzSW5BZmZpbGlhdGlvbkdyb3VwID0gKHRhc2tBZmZpbGlhdGlvbiAhPSBrZXkuaWQpOwotICAgICAgICBib29sZWFuIGhhc0FmZmlsaWF0aW9uR3JvdXBDb2xvciA9IGlzSW5BZmZpbGlhdGlvbkdyb3VwICYmICh0YXNrQWZmaWxpYXRpb25Db2xvciAhPSAwKTsKKyAgICBwdWJsaWMgVGFzayhUYXNrS2V5IGtleSwgaW50IGFmZmlsaWF0aW9uVGFza0lkLCBpbnQgYWZmaWxpYXRpb25Db2xvciwgRHJhd2FibGUgaWNvbiwKKyAgICAgICAgICAgICAgICBCaXRtYXAgdGh1bWJuYWlsLCBTdHJpbmcgdGl0bGUsIFN0cmluZyBjb250ZW50RGVzY3JpcHRpb24sIGludCBjb2xvclByaW1hcnksCisgICAgICAgICAgICAgICAgYm9vbGVhbiBpc0hpc3RvcmljYWwsIFJlY3QgYm91bmRzLAorICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5UYXNrRGVzY3JpcHRpb24gdGFza0Rlc2NyaXB0aW9uKSB7CisgICAgICAgIGJvb2xlYW4gaXNJbkFmZmlsaWF0aW9uR3JvdXAgPSAoYWZmaWxpYXRpb25UYXNrSWQgIT0ga2V5LmlkKTsKKyAgICAgICAgYm9vbGVhbiBoYXNBZmZpbGlhdGlvbkdyb3VwQ29sb3IgPSBpc0luQWZmaWxpYXRpb25Hcm91cCAmJiAoYWZmaWxpYXRpb25Db2xvciAhPSAwKTsKICAgICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICAgIHRoaXMudGFza0FmZmlsaWF0aW9uID0gdGFza0FmZmlsaWF0aW9uOwotICAgICAgICB0aGlzLnRhc2tBZmZpbGlhdGlvbkNvbG9yID0gdGFza0FmZmlsaWF0aW9uQ29sb3I7Ci0gICAgICAgIHRoaXMuYWN0aXZpdHlMYWJlbCA9IGFjdGl2aXR5VGl0bGU7CisgICAgICAgIHRoaXMuYWZmaWxpYXRpb25UYXNrSWQgPSBhZmZpbGlhdGlvblRhc2tJZDsKKyAgICAgICAgdGhpcy5hZmZpbGlhdGlvbkNvbG9yID0gYWZmaWxpYXRpb25Db2xvcjsKKyAgICAgICAgdGhpcy5pY29uID0gaWNvbjsKKyAgICAgICAgdGhpcy50aHVtYm5haWwgPSB0aHVtYm5haWw7CisgICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKICAgICAgICAgdGhpcy5jb250ZW50RGVzY3JpcHRpb24gPSBjb250ZW50RGVzY3JpcHRpb247Ci0gICAgICAgIHRoaXMuYWN0aXZpdHlJY29uID0gYWN0aXZpdHlJY29uOwotICAgICAgICB0aGlzLmNvbG9yUHJpbWFyeSA9IGhhc0FmZmlsaWF0aW9uR3JvdXBDb2xvciA/IHRhc2tBZmZpbGlhdGlvbkNvbG9yIDogY29sb3JQcmltYXJ5OworICAgICAgICB0aGlzLmNvbG9yUHJpbWFyeSA9IGhhc0FmZmlsaWF0aW9uR3JvdXBDb2xvciA/IGFmZmlsaWF0aW9uQ29sb3IgOiBjb2xvclByaW1hcnk7CiAgICAgICAgIHRoaXMudXNlTGlnaHRPblByaW1hcnlDb2xvciA9IFV0aWxpdGllcy5jb21wdXRlQ29udHJhc3RCZXR3ZWVuQ29sb3JzKHRoaXMuY29sb3JQcmltYXJ5LAogICAgICAgICAgICAgICAgIENvbG9yLldISVRFKSA+IDNmOwotICAgICAgICB0aGlzLmxvY2tUb1RoaXNUYXNrID0gbG9ja1RvVGFza0VuYWJsZWQgJiYgbG9ja1RvVGhpc1Rhc2s7Ci0gICAgICAgIHRoaXMubG9ja1RvVGFza0VuYWJsZWQgPSBsb2NrVG9UYXNrRW5hYmxlZDsKLSAgICAgICAgdGhpcy5pc0hpc3RvcmljYWwgPSBpc0hpc3RvcmljYWw7Ci0gICAgICAgIHRoaXMuaWNvbiA9IGljb247Ci0gICAgICAgIHRoaXMuaWNvbkZpbGVuYW1lID0gaWNvbkZpbGVuYW1lOwogICAgICAgICB0aGlzLmJvdW5kcyA9IGJvdW5kczsKKyAgICAgICAgdGhpcy50YXNrRGVzY3JpcHRpb24gPSB0YXNrRGVzY3JpcHRpb247CisgICAgICAgIHRoaXMuaXNIaXN0b3JpY2FsID0gaXNIaXN0b3JpY2FsOwogICAgIH0KIAogICAgIC8qKiBDb3BpZXMgdGhlIG90aGVyIHRhc2suICovCiAgICAgcHVibGljIHZvaWQgY29weUZyb20oVGFzayBvKSB7CiAgICAgICAgIHRoaXMua2V5ID0gby5rZXk7Ci0gICAgICAgIHRoaXMudGFza0FmZmlsaWF0aW9uID0gby50YXNrQWZmaWxpYXRpb247Ci0gICAgICAgIHRoaXMudGFza0FmZmlsaWF0aW9uQ29sb3IgPSBvLnRhc2tBZmZpbGlhdGlvbkNvbG9yOwotICAgICAgICB0aGlzLmFjdGl2aXR5TGFiZWwgPSBvLmFjdGl2aXR5TGFiZWw7CisgICAgICAgIHRoaXMuZ3JvdXAgPSBvLmdyb3VwOworICAgICAgICB0aGlzLmFmZmlsaWF0aW9uVGFza0lkID0gby5hZmZpbGlhdGlvblRhc2tJZDsKKyAgICAgICAgdGhpcy5hZmZpbGlhdGlvbkNvbG9yID0gby5hZmZpbGlhdGlvbkNvbG9yOworICAgICAgICB0aGlzLmljb24gPSBvLmljb247CisgICAgICAgIHRoaXMudGh1bWJuYWlsID0gby50aHVtYm5haWw7CisgICAgICAgIHRoaXMudGl0bGUgPSBvLnRpdGxlOwogICAgICAgICB0aGlzLmNvbnRlbnREZXNjcmlwdGlvbiA9IG8uY29udGVudERlc2NyaXB0aW9uOwotICAgICAgICB0aGlzLmFjdGl2aXR5SWNvbiA9IG8uYWN0aXZpdHlJY29uOwogICAgICAgICB0aGlzLmNvbG9yUHJpbWFyeSA9IG8uY29sb3JQcmltYXJ5OwogICAgICAgICB0aGlzLnVzZUxpZ2h0T25QcmltYXJ5Q29sb3IgPSBvLnVzZUxpZ2h0T25QcmltYXJ5Q29sb3I7Ci0gICAgICAgIHRoaXMubG9ja1RvVGhpc1Rhc2sgPSBvLmxvY2tUb1RoaXNUYXNrOwotICAgICAgICB0aGlzLmxvY2tUb1Rhc2tFbmFibGVkID0gby5sb2NrVG9UYXNrRW5hYmxlZDsKLSAgICAgICAgdGhpcy5pc0hpc3RvcmljYWwgPSBvLmlzSGlzdG9yaWNhbDsKLSAgICAgICAgdGhpcy5pY29uID0gby5pY29uOwotICAgICAgICB0aGlzLmljb25GaWxlbmFtZSA9IG8uaWNvbkZpbGVuYW1lOwogICAgICAgICB0aGlzLmJvdW5kcyA9IG8uYm91bmRzOworICAgICAgICB0aGlzLmlzTGF1bmNoVGFyZ2V0ID0gby5pc0xhdW5jaFRhcmdldDsKKyAgICAgICAgdGhpcy5pc0hpc3RvcmljYWwgPSBvLmlzSGlzdG9yaWNhbDsKICAgICB9CiAKLSAgICAvKiogU2V0IHRoZSBjYWxsYmFja3MgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRDYWxsYmFja3MoVGFza0NhbGxiYWNrcyBjYikgewotICAgICAgICBtQ2IgPSBjYjsKKyAgICAvKioKKyAgICAgKiBBZGQgYSBjYWxsYmFjay4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRDYWxsYmFjayhUYXNrQ2FsbGJhY2tzIGNiKSB7CisgICAgICAgIGlmICghbUNhbGxiYWNrcy5jb250YWlucyhjYikpIHsKKyAgICAgICAgICAgIG1DYWxsYmFja3MuYWRkKGNiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJlbW92ZSBhIGNhbGxiYWNrLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJlbW92ZUNhbGxiYWNrKFRhc2tDYWxsYmFja3MgY2IpIHsKKyAgICAgICAgbUNhbGxiYWNrcy5yZW1vdmUoY2IpOwogICAgIH0KIAogICAgIC8qKiBTZXQgdGhlIGdyb3VwaW5nICovCiAgICAgcHVibGljIHZvaWQgc2V0R3JvdXAoVGFza0dyb3VwaW5nIGdyb3VwKSB7Ci0gICAgICAgIGlmIChncm91cCAhPSBudWxsICYmIHRoaXMuZ3JvdXAgIT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgdGFzayBpcyBhbHJlYWR5IGFzc2lnbmVkIHRvIGEgZ3JvdXAuIik7Ci0gICAgICAgIH0KICAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwOwogICAgIH0KIApAQCAtMTc1LDggKzIwMiw5IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0U3RhY2tJZChpbnQgc3RhY2tJZCkgewogICAgICAgICBrZXkuc3RhY2tJZCA9IHN0YWNrSWQ7Ci0gICAgICAgIGlmIChtQ2IgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNiLm9uVGFza1N0YWNrSWRDaGFuZ2VkKCk7CisgICAgICAgIGludCBjYWxsYmFja0NvdW50ID0gbUNhbGxiYWNrcy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLmdldChpKS5vblRhc2tTdGFja0lkQ2hhbmdlZCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTAsMjIgKzIxOCwzMCBAQAogCiAgICAgLyoqIE5vdGlmaWVzIHRoZSBjYWxsYmFjayBsaXN0ZW5lcnMgdGhhdCB0aGlzIHRhc2sgaGFzIGJlZW4gbG9hZGVkICovCiAgICAgcHVibGljIHZvaWQgbm90aWZ5VGFza0RhdGFMb2FkZWQoQml0bWFwIHRodW1ibmFpbCwgRHJhd2FibGUgYXBwbGljYXRpb25JY29uKSB7Ci0gICAgICAgIHRoaXMuYXBwbGljYXRpb25JY29uID0gYXBwbGljYXRpb25JY29uOworICAgICAgICB0aGlzLmljb24gPSBhcHBsaWNhdGlvbkljb247CiAgICAgICAgIHRoaXMudGh1bWJuYWlsID0gdGh1bWJuYWlsOwotICAgICAgICBpZiAobUNiICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DYi5vblRhc2tEYXRhTG9hZGVkKCk7CisgICAgICAgIGludCBjYWxsYmFja0NvdW50ID0gbUNhbGxiYWNrcy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FsbGJhY2tDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLmdldChpKS5vblRhc2tEYXRhTG9hZGVkKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIE5vdGlmaWVzIHRoZSBjYWxsYmFjayBsaXN0ZW5lcnMgdGhhdCB0aGlzIHRhc2sgaGFzIGJlZW4gdW5sb2FkZWQgKi8KICAgICBwdWJsaWMgdm9pZCBub3RpZnlUYXNrRGF0YVVubG9hZGVkKEJpdG1hcCBkZWZhdWx0VGh1bWJuYWlsLCBEcmF3YWJsZSBkZWZhdWx0QXBwbGljYXRpb25JY29uKSB7Ci0gICAgICAgIGFwcGxpY2F0aW9uSWNvbiA9IGRlZmF1bHRBcHBsaWNhdGlvbkljb247CisgICAgICAgIGljb24gPSBkZWZhdWx0QXBwbGljYXRpb25JY29uOwogICAgICAgICB0aHVtYm5haWwgPSBkZWZhdWx0VGh1bWJuYWlsOwotICAgICAgICBpZiAobUNiICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DYi5vblRhc2tEYXRhVW5sb2FkZWQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1DYWxsYmFja3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIG1DYWxsYmFja3MuZ2V0KGkpLm9uVGFza0RhdGFVbmxvYWRlZCgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgdGFzayBpcyBhZmZpbGlhdGVkIHdpdGggYW5vdGhlciB0YXNrLgorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQWZmaWxpYXRlZFRhc2soKSB7CisgICAgICAgIHJldHVybiBrZXkuaWQgIT0gYWZmaWxpYXRpb25UYXNrSWQ7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7CiAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGlkIG1hdGNoZXMKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL21vZGVsL1Rhc2tTdGFjay5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFza1N0YWNrLmphdmEKaW5kZXggN2E5ODM5My4uODU2MjAwZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFza1N0YWNrLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvbW9kZWwvVGFza1N0YWNrLmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNvbG9yRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0RlYnVnRmxhZ3M7CkBAIC01MCw3ICs1MSw3IEBACiAgKi8KIGludGVyZmFjZSBUYXNrRmlsdGVyIHsKICAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBmaWx0ZXIgYWNjZXB0cyB0aGUgc3BlY2lmaWVkIHRhc2sgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFRhc2sgdCwgaW50IGluZGV4KTsKKyAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFNwYXJzZUFycmF5PFRhc2s+IHRhc2tJZE1hcCwgVGFzayB0LCBpbnQgaW5kZXgpOwogfQogCiAvKioKQEAgLTE1NywxMCArMTU4LDE3IEBACiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUZpbHRlcmVkVGFza3MoKSB7CiAgICAgICAgIG1GaWx0ZXJlZFRhc2tzLmNsZWFyKCk7CiAgICAgICAgIGlmIChtRmlsdGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHNwYXJzZSBhcnJheSBmcm9tIHRhc2sgaWQgdG8gVGFzaworICAgICAgICAgICAgU3BhcnNlQXJyYXk8VGFzaz4gdGFza0lkTWFwID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKICAgICAgICAgICAgIGludCB0YXNrQ291bnQgPSBtVGFza3Muc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIFRhc2sgdCA9IG1UYXNrcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1GaWx0ZXIuYWNjZXB0VGFzayh0LCBpKSkgeworICAgICAgICAgICAgICAgIHRhc2tJZE1hcC5wdXQodC5rZXkuaWQsIHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhc2tDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgVGFzayB0ID0gbVRhc2tzLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAobUZpbHRlci5hY2NlcHRUYXNrKHRhc2tJZE1hcCwgdCwgaSkpIHsKICAgICAgICAgICAgICAgICAgICAgbUZpbHRlcmVkVGFza3MuYWRkKHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5OCwxMSArMjA2LDIwIEBACiAKICAgICAvKiogVGFzayBzdGFjayBjYWxsYmFja3MgKi8KICAgICBwdWJsaWMgaW50ZXJmYWNlIFRhc2tTdGFja0NhbGxiYWNrcyB7Ci0gICAgICAgIC8qIE5vdGlmaWVzIHdoZW4gYSB0YXNrIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgKi8KKyAgICAgICAgLyoqCisgICAgICAgICAqIE5vdGlmaWVzIHdoZW4gYSBuZXcgdGFzayBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc3RhY2suCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uU3RhY2tUYXNrQWRkZWQoVGFza1N0YWNrIHN0YWNrLCBUYXNrIG5ld1Rhc2spOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBOb3RpZmllcyB3aGVuIGEgdGFzayBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIHN0YWNrLgorICAgICAgICAgKi8KICAgICAgICAgdm9pZCBvblN0YWNrVGFza1JlbW92ZWQoVGFza1N0YWNrIHN0YWNrLCBUYXNrIHJlbW92ZWRUYXNrLCBib29sZWFuIHdhc0Zyb250TW9zdFRhc2ssCiAgICAgICAgICAgICBUYXNrIG5ld0Zyb250TW9zdFRhc2spOwogCi0gICAgICAgIC8qIE5vdGlmaWVzIHdoZW4gYSB0YXNrIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGlzdG9yeSAqLworICAgICAgICAvKioKKyAgICAgICAgICogTm90aWZpZXMgd2hlbiBhIHRhc2sgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoaXN0b3J5LgorICAgICAgICAgKi8KICAgICAgICAgdm9pZCBvbkhpc3RvcnlUYXNrUmVtb3ZlZChUYXNrU3RhY2sgc3RhY2ssIFRhc2sgcmVtb3ZlZFRhc2spOwogICAgIH0KIApAQCAtMjE1LDE2ICsyMzIsMTYgQEAKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBEb2NrU3RhdGUgTk9ORSA9IG5ldyBEb2NrU3RhdGUoLTEsIDk2LCBudWxsLCBudWxsKTsKICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBEb2NrU3RhdGUgTEVGVCA9IG5ldyBEb2NrU3RhdGUoCiAgICAgICAgICAgICAgICAgRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZULCBET0NLX0FSRUFfQUxQSEEsCi0gICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAsIDAsIDAuMjVmLCAxKSwgbmV3IFJlY3RGKDAsIDAsIDAuMjVmLCAxKSk7CisgICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAsIDAsIDAuMTVmLCAxKSwgbmV3IFJlY3RGKDAsIDAsIDAuMTVmLCAxKSk7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRG9ja1N0YXRlIFRPUCA9IG5ldyBEb2NrU3RhdGUoCiAgICAgICAgICAgICAgICAgRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZULCBET0NLX0FSRUFfQUxQSEEsCi0gICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAsIDAsIDEsIDAuMjVmKSwgbmV3IFJlY3RGKDAsIDAsIDEsIDAuMjVmKSk7CisgICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAsIDAsIDEsIDAuMTVmKSwgbmV3IFJlY3RGKDAsIDAsIDEsIDAuMTVmKSk7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRG9ja1N0YXRlIFJJR0hUID0gbmV3IERvY2tTdGF0ZSgKICAgICAgICAgICAgICAgICBET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfQk9UVE9NX09SX1JJR0hULCBET0NLX0FSRUFfQUxQSEEsCi0gICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAuNzVmLCAwLCAxLCAxKSwgbmV3IFJlY3RGKDAuNzVmLCAwLCAxLCAxKSk7CisgICAgICAgICAgICAgICAgbmV3IFJlY3RGKDAuODVmLCAwLCAxLCAxKSwgbmV3IFJlY3RGKDAuODVmLCAwLCAxLCAxKSk7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgRG9ja1N0YXRlIEJPVFRPTSA9IG5ldyBEb2NrU3RhdGUoCiAgICAgICAgICAgICAgICAgRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX0JPVFRPTV9PUl9SSUdIVCwgRE9DS19BUkVBX0FMUEhBLAotICAgICAgICAgICAgICAgIG5ldyBSZWN0RigwLCAwLjc1ZiwgMSwgMSksIG5ldyBSZWN0RigwLCAwLjc1ZiwgMSwgMSkpOworICAgICAgICAgICAgICAgIG5ldyBSZWN0RigwLCAwLjg1ZiwgMSwgMSksIG5ldyBSZWN0RigwLCAwLjg1ZiwgMSwgMSkpOwogCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRzRHJvcChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewpAQCAtMzA0LDkgKzMyMSwyNCBAQAogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8vIEEgY29tcGFyYXRvciB0aGF0IHNvcnRzIHRhc2tzIGJ5IHRoZWlyIGxhc3QgYWN0aXZlIHRpbWUgYW5kIGZyZWVmb3JtIHN0YXRlCisgICAgcHJpdmF0ZSBDb21wYXJhdG9yPFRhc2s+IEZSRUVGT1JNX0xBU1RfQUNUSVZFX1RJTUVfQ09NUEFSQVRPUiA9IG5ldyBDb21wYXJhdG9yPFRhc2s+KCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIGludCBjb21wYXJlKFRhc2sgbzEsIFRhc2sgbzIpIHsKKyAgICAgICAgICAgIGlmIChvMS5pc0ZyZWVmb3JtVGFzaygpICYmICFvMi5pc0ZyZWVmb3JtVGFzaygpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG8yLmlzRnJlZWZvcm1UYXNrKCkgJiYgIW8xLmlzRnJlZWZvcm1UYXNrKCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTG9uZy5jb21wYXJlKG8xLmtleS5sYXN0QWN0aXZlVGltZSwgbzIua2V5Lmxhc3RBY3RpdmVUaW1lKTsKKyAgICAgICAgfQorICAgIH07CisKKwogICAgIC8vIFRoZSB0YXNrIG9mZnNldCB0byBhcHBseSB0byBhIHRhc2sgaWQgYXMgYSBncm91cCBhZmZpbGlhdGlvbgogICAgIHN0YXRpYyBmaW5hbCBpbnQgSW5kaXZpZHVhbFRhc2tJZE9mZnNldCA9IDEgPDwgMTY7CiAKKyAgICBBcnJheUxpc3Q8VGFzaz4gbVJhd1Rhc2tMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgRmlsdGVyZWRUYXNrTGlzdCBtU3RhY2tUYXNrTGlzdCA9IG5ldyBGaWx0ZXJlZFRhc2tMaXN0KCk7CiAgICAgRmlsdGVyZWRUYXNrTGlzdCBtSGlzdG9yeVRhc2tMaXN0ID0gbmV3IEZpbHRlcmVkVGFza0xpc3QoKTsKICAgICBUYXNrU3RhY2tDYWxsYmFja3MgbUNiOwpAQCAtMzE4LDE0ICszNTAsMzAgQEAKICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2Ugb25seSBzaG93IG5vbi1kb2NrZWQgdGFza3MKICAgICAgICAgbVN0YWNrVGFza0xpc3Quc2V0RmlsdGVyKG5ldyBUYXNrRmlsdGVyKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFRhc2sgdCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICF0LmlzSGlzdG9yaWNhbCAmJiAhU3lzdGVtU2VydmljZXNQcm94eS5pc0RvY2tlZFN0YWNrKHQua2V5LnN0YWNrSWQpOworICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0VGFzayhTcGFyc2VBcnJheTxUYXNrPiB0YXNrSWRNYXAsIFRhc2sgdCwgaW50IGluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKHQuaXNBZmZpbGlhdGVkVGFzaygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgdGFzayBpcyBhZmZpbGlhdGVkIHdpdGggYW5vdGhlciBwYXJlbnQgaW4gdGhlIHN0YWNrLCB0aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBoaXN0b3JpY2FsIHN0YXRlIG9mIHRoaXMgdGFzayBkZXBlbmRzIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcGFyZW50IHRhc2sKKyAgICAgICAgICAgICAgICAgICAgVGFzayBwYXJlbnRUYXNrID0gdGFza0lkTWFwLmdldCh0LmFmZmlsaWF0aW9uVGFza0lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHBhcmVudFRhc2s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuICF0LmlzSGlzdG9yaWNhbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIG1IaXN0b3J5VGFza0xpc3Quc2V0RmlsdGVyKG5ldyBUYXNrRmlsdGVyKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFRhc2sgdCwgaW50IGluZGV4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHQuaXNIaXN0b3JpY2FsICYmICFTeXN0ZW1TZXJ2aWNlc1Byb3h5LmlzRG9ja2VkU3RhY2sodC5rZXkuc3RhY2tJZCk7CisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHRUYXNrKFNwYXJzZUFycmF5PFRhc2s+IHRhc2tJZE1hcCwgVGFzayB0LCBpbnQgaW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAodC5pc0FmZmlsaWF0ZWRUYXNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyB0YXNrIGlzIGFmZmlsaWF0ZWQgd2l0aCBhbm90aGVyIHBhcmVudCBpbiB0aGUgc3RhY2ssIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGhpc3RvcmljYWwgc3RhdGUgb2YgdGhpcyB0YXNrIGRlcGVuZHMgb24gdGhlIHN0YXRlIG9mIHRoZSBwYXJlbnQgdGFzaworICAgICAgICAgICAgICAgICAgICBUYXNrIHBhcmVudFRhc2sgPSB0YXNrSWRNYXAuZ2V0KHQuYWZmaWxpYXRpb25UYXNrSWQpOworICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50VGFzayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gcGFyZW50VGFzazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdC5pc0hpc3RvcmljYWw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTM3MywyNCArNDIxLDIwIEBACiAgICAgICAgIHRhc2tMaXN0LnJlbW92ZSh0KTsKICAgICAgICAgLy8gUmVtb3ZlIGl0IGZyb20gdGhlIGdyb3VwIGFzIHdlbGwsIGFuZCBpZiBpdCBpcyBlbXB0eSwgcmVtb3ZlIHRoZSBncm91cAogICAgICAgICBUYXNrR3JvdXBpbmcgZ3JvdXAgPSB0Lmdyb3VwOwotICAgICAgICBncm91cC5yZW1vdmVUYXNrKHQpOwotICAgICAgICBpZiAoZ3JvdXAuZ2V0VGFza0NvdW50KCkgPT0gMCkgewotICAgICAgICAgICAgcmVtb3ZlR3JvdXAoZ3JvdXApOworICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCkgeworICAgICAgICAgICAgZ3JvdXAucmVtb3ZlVGFzayh0KTsKKyAgICAgICAgICAgIGlmIChncm91cC5nZXRUYXNrQ291bnQoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jay10by1hcHAgc3RhdGUKLSAgICAgICAgdC5sb2NrVG9UaGlzVGFzayA9IGZhbHNlOwogICAgIH0KIAogICAgIC8qKiBSZW1vdmVzIGEgdGFzayAqLwogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVRhc2soVGFzayB0KSB7CiAgICAgICAgIGlmIChtU3RhY2tUYXNrTGlzdC5jb250YWlucyh0KSkgewogICAgICAgICAgICAgYm9vbGVhbiB3YXNGcm9udE1vc3RUYXNrID0gKGdldFN0YWNrRnJvbnRNb3N0VGFzaygpID09IHQpOwotICAgICAgICAgICAgaW50IHJlbW92ZWRUYXNrSW5kZXggPSBpbmRleE9mU3RhY2tUYXNrKHQpOwogICAgICAgICAgICAgcmVtb3ZlVGFza0ltcGwobVN0YWNrVGFza0xpc3QsIHQpOwogICAgICAgICAgICAgVGFzayBuZXdGcm9udE1vc3RUYXNrID0gZ2V0U3RhY2tGcm9udE1vc3RUYXNrKCk7Ci0gICAgICAgICAgICBpZiAobmV3RnJvbnRNb3N0VGFzayAhPSBudWxsICYmIG5ld0Zyb250TW9zdFRhc2subG9ja1RvVGFza0VuYWJsZWQpIHsKLSAgICAgICAgICAgICAgICBuZXdGcm9udE1vc3RUYXNrLmxvY2tUb1RoaXNUYXNrID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtQ2IgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIE5vdGlmeSB0aGF0IGEgdGFzayBoYXMgYmVlbiByZW1vdmVkCiAgICAgICAgICAgICAgICAgbUNiLm9uU3RhY2tUYXNrUmVtb3ZlZCh0aGlzLCB0LCB3YXNGcm9udE1vc3RUYXNrLCBuZXdGcm9udE1vc3RUYXNrKTsKQEAgLTQwNiwyNSArNDUwLDg3IEBACiAKICAgICAvKioKICAgICAgKiBTZXRzIGEgZmV3IHRhc2tzIGluIG9uZSBnbywgd2l0aG91dCBjYWxsaW5nIGFueSBjYWxsYmFja3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdGFza3MgdGhlIG5ldyBzZXQgb2YgdGFza3MgdG8gcmVwbGFjZSB0aGUgY3VycmVudCBzZXQuCisgICAgICogQHBhcmFtIG5vdGlmeVN0YWNrQ2hhbmdlcyB3aGV0aGVyIG9yIG5vdCB0byBjYWxsYmFjayBvbiBzcGVjaWZpYyBjaGFuZ2VzIHRvIHRoZSBsaXN0IG9mIHRhc2tzLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFRhc2tzKExpc3Q8VGFzaz4gdGFza3MpIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRUYXNrcyhMaXN0PFRhc2s+IHRhc2tzLCBib29sZWFuIG5vdGlmeVN0YWNrQ2hhbmdlcykgeworICAgICAgICAvLyBDb21wdXRlIGEgaGFzIHNldCBmb3IgZWFjaCBvZiB0aGUgdGFza3MKKyAgICAgICAgSGFzaE1hcDxUYXNrLlRhc2tLZXksIFRhc2s+IGN1cnJlbnRUYXNrc01hcCA9IGNyZWF0ZVRhc2tLZXlNYXBGcm9tTGlzdChtUmF3VGFza0xpc3QpOworICAgICAgICBIYXNoTWFwPFRhc2suVGFza0tleSwgVGFzaz4gbmV3VGFza3NNYXAgPSBjcmVhdGVUYXNrS2V5TWFwRnJvbUxpc3QodGFza3MpOworCisgICAgICAgIEFycmF5TGlzdDxUYXNrPiBuZXdUYXNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgICAgIC8vIERpc2FibGUgbm90aWZpY2F0aW9ucyBpZiB0aGVyZSBhcmUgbm8gY2FsbGJhY2tzCisgICAgICAgIGlmIChtQ2IgPT0gbnVsbCkgeworICAgICAgICAgICAgbm90aWZ5U3RhY2tDaGFuZ2VzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZW1vdmUgYW55IHRhc2tzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0CisgICAgICAgIGludCB0YXNrQ291bnQgPSBtUmF3VGFza0xpc3Quc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhc2tDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBUYXNrIHRhc2sgPSBtUmF3VGFza0xpc3QuZ2V0KGkpOworICAgICAgICAgICAgaWYgKCFuZXdUYXNrc01hcC5jb250YWluc0tleSh0YXNrLmtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm90aWZ5U3RhY2tDaGFuZ2VzKSB7CisgICAgICAgICAgICAgICAgICAgIG1DYi5vblN0YWNrVGFza1JlbW92ZWQodGhpcywgdGFzaywgaSA9PSAodGFza0NvdW50IC0gMSksIG51bGwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhc2suc2V0R3JvdXAobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGQgYW55IG5ldyB0YXNrcworICAgICAgICB0YXNrQ291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tzLmdldChpKTsKKyAgICAgICAgICAgIGlmICghY3VycmVudFRhc2tzTWFwLmNvbnRhaW5zS2V5KHRhc2sua2V5KSkgeworICAgICAgICAgICAgICAgIGlmIChub3RpZnlTdGFja0NoYW5nZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbUNiLm9uU3RhY2tUYXNrQWRkZWQodGhpcywgdGFzayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5ld1Rhc2tzLmFkZCh0YXNrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3VGFza3MuYWRkKGN1cnJlbnRUYXNrc01hcC5nZXQodGFzay5rZXkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNvcnQgYWxsIHRoZSB0YXNrcyB0byBlbnN1cmUgdGhleSBhcmUgb3JkZXJlZCBjb3JyZWN0bHkKKyAgICAgICAgQ29sbGVjdGlvbnMuc29ydChuZXdUYXNrcywgRlJFRUZPUk1fTEFTVF9BQ1RJVkVfVElNRV9DT01QQVJBVE9SKTsKKworICAgICAgICAvLyBGaWx0ZXIgb3V0IHRoZSBoaXN0b3JpY2FsIHRhc2tzIGZyb20gdGhpcyBuZXcgbGlzdAogICAgICAgICBBcnJheUxpc3Q8VGFzaz4gc3RhY2tUYXNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBBcnJheUxpc3Q8VGFzaz4gaGlzdG9yeVRhc2tzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0gICAgICAgIGZvciAoVGFzayB0YXNrIDogdGFza3MpIHsKKyAgICAgICAgaW50IG5ld1Rhc2tDb3VudCA9IG5ld1Rhc2tzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXdUYXNrQ291bnQ7IGkrKykgeworICAgICAgICAgICAgVGFzayB0YXNrID0gbmV3VGFza3MuZ2V0KGkpOwogICAgICAgICAgICAgaWYgKHRhc2suaXNIaXN0b3JpY2FsKSB7CiAgICAgICAgICAgICAgICAgaGlzdG9yeVRhc2tzLmFkZCh0YXNrKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3RhY2tUYXNrcy5hZGQodGFzayk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBtU3RhY2tUYXNrTGlzdC5zZXQoc3RhY2tUYXNrcyk7CiAgICAgICAgIG1IaXN0b3J5VGFza0xpc3Quc2V0KGhpc3RvcnlUYXNrcyk7CisgICAgICAgIG1SYXdUYXNrTGlzdC5jbGVhcigpOworICAgICAgICBtUmF3VGFza0xpc3QuYWRkQWxsKG5ld1Rhc2tzKTsKKyAgICAgICAgbUdyb3Vwcy5jbGVhcigpOworICAgICAgICBtQWZmaW5pdGllc0dyb3Vwcy5jbGVhcigpOwogICAgIH0KIAotICAgIC8qKiBHZXRzIHRoZSBmcm9udCB0YXNrICovCisgICAgLyoqCisgICAgICogR2V0cyB0aGUgZnJvbnQtbW9zdCB0YXNrIGluIHRoZSBzdGFjay4KKyAgICAgKi8KICAgICBwdWJsaWMgVGFzayBnZXRTdGFja0Zyb250TW9zdFRhc2soKSB7Ci0gICAgICAgIGlmIChtU3RhY2tUYXNrTGlzdC5zaXplKCkgPT0gMCkgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBtU3RhY2tUYXNrTGlzdC5nZXRUYXNrcygpLmdldChtU3RhY2tUYXNrTGlzdC5zaXplKCkgLSAxKTsKKyAgICAgICAgQXJyYXlMaXN0PFRhc2s+IHN0YWNrVGFza3MgPSBtU3RhY2tUYXNrTGlzdC5nZXRUYXNrcygpOworICAgICAgICBpZiAoc3RhY2tUYXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSBzdGFja1Rhc2tzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBUYXNrIHRhc2sgPSBzdGFja1Rhc2tzLmdldChpKTsKKyAgICAgICAgICAgIGlmICghdGFzay5pc0ZyZWVmb3JtVGFzaygpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRhc2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCiAgICAgLyoqIEdldHMgdGhlIHRhc2sga2V5cyAqLwpAQCAtNDU1LDYgKzU2MSwyMiBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIHNldCBvZiAiZnJlZWZvcm0iIHRhc2tzIGluIHRoZSBzdGFjay4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXJyYXlMaXN0PFRhc2s+IGdldEZyZWVmb3JtVGFza3MoKSB7CisgICAgICAgIEFycmF5TGlzdDxUYXNrPiBmcmVlZm9ybVRhc2tzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIEFycmF5TGlzdDxUYXNrPiB0YXNrcyA9IG1TdGFja1Rhc2tMaXN0LmdldFRhc2tzKCk7CisgICAgICAgIGludCB0YXNrQ291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tzLmdldChpKTsKKyAgICAgICAgICAgIGlmICh0YXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKKyAgICAgICAgICAgICAgICBmcmVlZm9ybVRhc2tzLmFkZCh0YXNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZnJlZWZvcm1UYXNrczsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBDb21wdXRlcyBhIHNldCBvZiBhbGwgdGhlIGFjdGl2ZSBhbmQgaGlzdG9yaWNhbCB0YXNrcyBvcmRlcmVkIGJ5IHRoZWlyIGxhc3QgYWN0aXZlIHRpbWUuCiAgICAgICovCiAgICAgcHVibGljIEFycmF5TGlzdDxUYXNrPiBjb21wdXRlQWxsVGFza3NMaXN0KCkgewpAQCAtNTQ4LDcgKzY3MCw3IEBACiAgICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KHRhc2tzLCBuZXcgQ29tcGFyYXRvcjxUYXNrPigpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoVGFzayB0YXNrLCBUYXNrIHRhc2syKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSAodGFzay5rZXkuZmlyc3RBY3RpdmVUaW1lIC0gdGFzazIua2V5LmZpcnN0QWN0aXZlVGltZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMb25nLmNvbXBhcmUodGFzay5rZXkuZmlyc3RBY3RpdmVUaW1lLCB0YXNrMi5rZXkuZmlyc3RBY3RpdmVUaW1lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIC8vIENyZWF0ZSBncm91cHMgd2hlbiBzZXF1ZW50aWFsIHBhY2thZ2VzIGFyZSB0aGUgc2FtZQpAQCAtNTgxLDEyICs3MDMsMTIgQEAKICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQobUdyb3VwcywgbmV3IENvbXBhcmF0b3I8VGFza0dyb3VwaW5nPigpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoVGFza0dyb3VwaW5nIHRhc2tHcm91cGluZywgVGFza0dyb3VwaW5nIHRhc2tHcm91cGluZzIpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpICh0YXNrR3JvdXBpbmcubGF0ZXN0QWN0aXZlVGltZUluR3JvdXAgLQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9uZy5jb21wYXJlKHRhc2tHcm91cGluZy5sYXRlc3RBY3RpdmVUaW1lSW5Hcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrR3JvdXBpbmcyLmxhdGVzdEFjdGl2ZVRpbWVJbkdyb3VwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIC8vIFNvcnQgZ3JvdXAgdGFza3MgYnkgaW5jcmVhc2luZyBmaXJzdEFjdGl2ZVRpbWUgb2YgdGhlIHRhc2ssIGFuZCBhbHNvIGJ1aWxkIGEgbmV3IGxpc3Qgb2YKLSAgICAgICAgICAgIC8vIHRhc2tzCisgICAgICAgICAgICAvLyBTb3J0IGdyb3VwIHRhc2tzIGJ5IGluY3JlYXNpbmcgZmlyc3RBY3RpdmVUaW1lIG9mIHRoZSB0YXNrLCBhbmQgYWxzbyBidWlsZCBhIG5ldyBsaXN0CisgICAgICAgICAgICAvLyBvZiB0YXNrcwogICAgICAgICAgICAgaW50IHRhc2tJbmRleCA9IDA7CiAgICAgICAgICAgICBpbnQgZ3JvdXBDb3VudCA9IG1Hcm91cHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBncm91cENvdW50OyBpKyspIHsKQEAgLTU5NCw3ICs3MTYsNyBAQAogICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoZ3JvdXAubVRhc2tLZXlzLCBuZXcgQ29tcGFyYXRvcjxUYXNrLlRhc2tLZXk+KCkgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgcHVibGljIGludCBjb21wYXJlKFRhc2suVGFza0tleSB0YXNrS2V5LCBUYXNrLlRhc2tLZXkgdGFza0tleTIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSAodGFza0tleS5maXJzdEFjdGl2ZVRpbWUgLSB0YXNrS2V5Mi5maXJzdEFjdGl2ZVRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvbmcuY29tcGFyZSh0YXNrS2V5LmZpcnN0QWN0aXZlVGltZSwgdGFza0tleTIuZmlyc3RBY3RpdmVUaW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrLlRhc2tLZXk+IGdyb3VwVGFza3MgPSBncm91cC5tVGFza0tleXM7CkBAIC02MDcsMTMgKzcyOSwxMyBAQAogICAgICAgICAgICAgbVN0YWNrVGFza0xpc3Quc2V0KHRhc2tzKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgdGFzayBncm91cHMKLSAgICAgICAgICAgIEhhc2hNYXA8VGFzay5UYXNrS2V5LCBUYXNrPiB0YXNrc01hcCA9IG5ldyBIYXNoTWFwPFRhc2suVGFza0tleSwgVGFzaz4oKTsKKyAgICAgICAgICAgIEhhc2hNYXA8VGFzay5UYXNrS2V5LCBUYXNrPiB0YXNrc01hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrPiB0YXNrcyA9IG1TdGFja1Rhc2tMaXN0LmdldFRhc2tzKCk7CiAgICAgICAgICAgICBpbnQgdGFza0NvdW50ID0gdGFza3Muc2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrQ291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIFRhc2sgdCA9IHRhc2tzLmdldChpKTsKICAgICAgICAgICAgICAgICBUYXNrR3JvdXBpbmcgZ3JvdXA7Ci0gICAgICAgICAgICAgICAgaW50IGFmZmlsaWF0aW9uID0gdC50YXNrQWZmaWxpYXRpb24gPiAwID8gdC50YXNrQWZmaWxpYXRpb24gOgorICAgICAgICAgICAgICAgIGludCBhZmZpbGlhdGlvbiA9IHQuYWZmaWxpYXRpb25UYXNrSWQgPiAwID8gdC5hZmZpbGlhdGlvblRhc2tJZCA6CiAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpdmlkdWFsVGFza0lkT2Zmc2V0ICsgdC5rZXkuaWQ7CiAgICAgICAgICAgICAgICAgaWYgKG1BZmZpbml0aWVzR3JvdXBzLmNvbnRhaW5zS2V5KGFmZmlsaWF0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICBncm91cCA9IGdldEdyb3VwV2l0aEFmZmlsaWF0aW9uKGFmZmlsaWF0aW9uKTsKQEAgLTYzNCw3ICs3NTYsNyBAQAogICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgZ3JvdXBzIHRoYXQgb25seSBoYXZlIG9uZSB0YXNrCiAgICAgICAgICAgICAgICAgaWYgKHRhc2tDb3VudCA8PSAxKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGdyb3VwIGNvbG9yIGRpc3RyaWJ1dGlvbgotICAgICAgICAgICAgICAgIGludCBhZmZpbGlhdGlvbkNvbG9yID0gdGFza3NNYXAuZ2V0KGdyb3VwLm1UYXNrS2V5cy5nZXQoMCkpLnRhc2tBZmZpbGlhdGlvbkNvbG9yOworICAgICAgICAgICAgICAgIGludCBhZmZpbGlhdGlvbkNvbG9yID0gdGFza3NNYXAuZ2V0KGdyb3VwLm1UYXNrS2V5cy5nZXQoMCkpLmFmZmlsaWF0aW9uQ29sb3I7CiAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGFTdGVwID0gKDFmIC0gbWluQWxwaGEpIC8gdGFza0NvdW50OwogICAgICAgICAgICAgICAgIGZsb2F0IGFscGhhID0gMWY7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0YXNrQ291bnQ7IGorKykgewpAQCAtNjkwLDQgKzgxMiwxNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgbGlzdCBvZiB0YXNrcywgcmV0dXJucyBhIG1hcCBvZiBlYWNoIHRhc2sncyBrZXkgdG8gdGhlIHRhc2suCisgICAgICovCisgICAgcHJpdmF0ZSBIYXNoTWFwPFRhc2suVGFza0tleSwgVGFzaz4gY3JlYXRlVGFza0tleU1hcEZyb21MaXN0KExpc3Q8VGFzaz4gdGFza3MpIHsKKyAgICAgICAgSGFzaE1hcDxUYXNrLlRhc2tLZXksIFRhc2s+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgaW50IHRhc2tDb3VudCA9IHRhc2tzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrQ291bnQ7IGkrKykgeworICAgICAgICAgICAgVGFzayB0YXNrID0gdGFza3MuZ2V0KGkpOworICAgICAgICAgICAgbWFwLnB1dCh0YXNrLmtleSwgdGFzayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9BbmltYXRlYWJsZVZpZXdCb3VuZHMuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL0FuaW1hdGVhYmxlVmlld0JvdW5kcy5qYXZhCmluZGV4IDc1N2QyYWEuLmI4YmJmNTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL0FuaW1hdGVhYmxlVmlld0JvdW5kcy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL0FuaW1hdGVhYmxlVmlld0JvdW5kcy5qYXZhCkBAIC0xOCw4ICsxOCw2IEBACiAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk91dGxpbmU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRQcm9wZXJ0eTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUHJvcGVydHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdPdXRsaW5lUHJvdmlkZXI7CiAKQEAgLTI5LDM2ICsyNywxMSBAQAogICAgIFZpZXcgbVNvdXJjZVZpZXc7CiAgICAgUmVjdCBtQ2xpcFJlY3QgPSBuZXcgUmVjdCgpOwogICAgIFJlY3QgbUNsaXBCb3VuZHMgPSBuZXcgUmVjdCgpOworICAgIFJlY3QgbUxhc3RDbGlwQm91bmRzID0gbmV3IFJlY3QoKTsKICAgICBpbnQgbUNvcm5lclJhZGl1czsKICAgICBmbG9hdCBtQWxwaGEgPSAxZjsKICAgICBmaW5hbCBmbG9hdCBtTWluQWxwaGEgPSAwLjI1ZjsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJvcGVydHk8QW5pbWF0ZWFibGVWaWV3Qm91bmRzLCBJbnRlZ2VyPiBDTElQX0JPVFRPTSA9Ci0gICAgICAgICAgICBuZXcgSW50UHJvcGVydHk8QW5pbWF0ZWFibGVWaWV3Qm91bmRzPigiY2xpcEJvdHRvbSIpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShBbmltYXRlYWJsZVZpZXdCb3VuZHMgb2JqZWN0LCBpbnQgY2xpcCkgewotICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V0Q2xpcEJvdHRvbShjbGlwLCBmYWxzZSAvKiBmb3JjZSAqLyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIEludGVnZXIgZ2V0KEFuaW1hdGVhYmxlVmlld0JvdW5kcyBvYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRDbGlwQm90dG9tKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJvcGVydHk8QW5pbWF0ZWFibGVWaWV3Qm91bmRzLCBJbnRlZ2VyPiBDTElQX1JJR0hUID0KLSAgICAgICAgICAgIG5ldyBJbnRQcm9wZXJ0eTxBbmltYXRlYWJsZVZpZXdCb3VuZHM+KCJjbGlwUmlnaHQiKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoQW5pbWF0ZWFibGVWaWV3Qm91bmRzIG9iamVjdCwgaW50IGNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldENsaXBSaWdodChjbGlwLCBmYWxzZSAvKiBmb3JjZSAqLyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIEludGVnZXIgZ2V0KEFuaW1hdGVhYmxlVmlld0JvdW5kcyBvYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRDbGlwUmlnaHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9OwotCiAgICAgcHVibGljIEFuaW1hdGVhYmxlVmlld0JvdW5kcyhWaWV3IHNvdXJjZSwgaW50IGNvcm5lclJhZGl1cykgewogICAgICAgICBtU291cmNlVmlldyA9IHNvdXJjZTsKICAgICAgICAgbUNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1czsKQEAgLTY4LDcgKzQxLDcgQEAKICAgICAgKiBSZXNldHMgdGhlIHJpZ2h0IGFuZCBib3R0b20gY2xpcCBmb3IgdGhpcyB2aWV3LgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgICBtQ2xpcFJlY3Quc2V0RW1wdHkoKTsKKyAgICAgICAgbUNsaXBSZWN0LnNldCgtMSwgLTEsIC0xLCAtMSk7CiAgICAgICAgIHVwZGF0ZUNsaXBCb3VuZHMoKTsKICAgICB9CiAKQEAgLTkwLDExICs2Myw5IEBACiAgICAgfQogCiAgICAgLyoqIFNldHMgdGhlIGJvdHRvbSBjbGlwLiAqLwotICAgIHB1YmxpYyB2b2lkIHNldENsaXBCb3R0b20oaW50IGJvdHRvbSwgYm9vbGVhbiBmb3JjZSkgewotICAgICAgICBpZiAoYm90dG9tICE9IG1DbGlwUmVjdC5ib3R0b20gfHwgZm9yY2UpIHsKLSAgICAgICAgICAgIG1DbGlwUmVjdC5ib3R0b20gPSBib3R0b207Ci0gICAgICAgICAgICB1cGRhdGVDbGlwQm91bmRzKCk7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRDbGlwQm90dG9tKGludCBib3R0b20pIHsKKyAgICAgICAgbUNsaXBSZWN0LmJvdHRvbSA9IGJvdHRvbTsKKyAgICAgICAgdXBkYXRlQ2xpcEJvdW5kcygpOwogICAgIH0KIAogICAgIC8qKiBSZXR1cm5zIHRoZSBib3R0b20gY2xpcC4gKi8KQEAgLTEwMiwyNCArNzMsMTQgQEAKICAgICAgICAgcmV0dXJuIG1DbGlwUmVjdC5ib3R0b207CiAgICAgfQogCi0gICAgLyoqIFNldHMgdGhlIHJpZ2h0IGNsaXAuICovCi0gICAgcHVibGljIHZvaWQgc2V0Q2xpcFJpZ2h0KGludCByaWdodCwgYm9vbGVhbiBmb3JjZSkgewotICAgICAgICBpZiAocmlnaHQgIT0gbUNsaXBSZWN0LnJpZ2h0IHx8IGZvcmNlKSB7Ci0gICAgICAgICAgICBtQ2xpcFJlY3QucmlnaHQgPSByaWdodDsKLSAgICAgICAgICAgIHVwZGF0ZUNsaXBCb3VuZHMoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSByaWdodCBjbGlwLiAqLwotICAgIHB1YmxpYyBpbnQgZ2V0Q2xpcFJpZ2h0KCkgewotICAgICAgICByZXR1cm4gbUNsaXBSZWN0LnJpZ2h0OwotICAgIH0KLQogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDbGlwQm91bmRzKCkgewotICAgICAgICBtQ2xpcEJvdW5kcy5zZXQobUNsaXBSZWN0LmxlZnQsIG1DbGlwUmVjdC50b3AsCi0gICAgICAgICAgICAgICAgbVNvdXJjZVZpZXcuZ2V0V2lkdGgoKSAtIG1DbGlwUmVjdC5yaWdodCwKLSAgICAgICAgICAgICAgICBtU291cmNlVmlldy5nZXRIZWlnaHQoKSAtIG1DbGlwUmVjdC5ib3R0b20pOwotICAgICAgICBtU291cmNlVmlldy5zZXRDbGlwQm91bmRzKG1DbGlwQm91bmRzKTsKLSAgICAgICAgbVNvdXJjZVZpZXcuaW52YWxpZGF0ZU91dGxpbmUoKTsKKyAgICAgICAgbUNsaXBCb3VuZHMuc2V0KE1hdGgubWF4KDAsIG1DbGlwUmVjdC5sZWZ0KSwgTWF0aC5tYXgoMCwgbUNsaXBSZWN0LnRvcCksCisgICAgICAgICAgICAgICAgbVNvdXJjZVZpZXcuZ2V0V2lkdGgoKSAtIE1hdGgubWF4KDAsIG1DbGlwUmVjdC5yaWdodCksCisgICAgICAgICAgICAgICAgbVNvdXJjZVZpZXcuZ2V0SGVpZ2h0KCkgLSBNYXRoLm1heCgwLCBtQ2xpcFJlY3QuYm90dG9tKSk7CisgICAgICAgIGlmICghbUxhc3RDbGlwQm91bmRzLmVxdWFscyhtQ2xpcEJvdW5kcykpIHsKKyAgICAgICAgICAgIG1Tb3VyY2VWaWV3LnNldENsaXBCb3VuZHMobUNsaXBCb3VuZHMpOworICAgICAgICAgICAgbVNvdXJjZVZpZXcuaW52YWxpZGF0ZU91dGxpbmUoKTsKKyAgICAgICAgICAgIG1MYXN0Q2xpcEJvdW5kcy5zZXQobUNsaXBCb3VuZHMpOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvRnJlZWZvcm1Xb3Jrc3BhY2VMYXlvdXRBbGdvcml0aG0uamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL0ZyZWVmb3JtV29ya3NwYWNlTGF5b3V0QWxnb3JpdGhtLmphdmEKaW5kZXggOWI5ZDU4Yy4uODkwNzEzZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvRnJlZWZvcm1Xb3Jrc3BhY2VMYXlvdXRBbGdvcml0aG0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9GcmVlZm9ybVdvcmtzcGFjZUxheW91dEFsZ29yaXRobS5qYXZhCkBAIC0xNiwxMCArMTYsMTAgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzOwogCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuVXRpbGl0aWVzOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwogCiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwpAQCAtMzEsMTIgKzMxLDE3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBGcmVlZm9ybVdvcmtzcGFjZUxheW91dEFsZ29yaXRobSB7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkZyZWVmb3JtV29ya3NwYWNlTGF5b3V0QWxnb3JpdGhtIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KICAgICAvLyBPcHRpbWl6YXRpb24sIGFsbG93cyBmb3IgcXVpY2sgbG9va3VwIG9mIHRhc2sgLT4gcmVjdAogICAgIHByaXZhdGUgSGFzaE1hcDxUYXNrLlRhc2tLZXksIFJlY3RGPiBtVGFza1JlY3RNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAKKyAgICBwcml2YXRlIGludCBtVGFza1BhZGRpbmc7CisKKyAgICBwdWJsaWMgRnJlZWZvcm1Xb3Jrc3BhY2VMYXlvdXRBbGdvcml0aG0oQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIC8vIFRoaXMgaXMgYXBwbGllZCB0byB0aGUgZWRnZXMgb2YgZWFjaCB0YXNrCisgICAgICAgIG1UYXNrUGFkZGluZyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVjZW50c19mcmVlZm9ybV93b3Jrc3BhY2VfdGFza19wYWRkaW5nKSAvIDI7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogVXBkYXRlcyB0aGUgbGF5b3V0IGZvciBlYWNoIG9mIHRoZSBmcmVlZm9ybSB3b3Jrc3BhY2UgdGFza3MuICBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgc3RhY2sKICAgICAgKiBsYXlvdXQgaXMgdXBkYXRlZC4KQEAgLTgwLDcgKzg1LDYgQEAKICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9IG5vcm1hbGl6ZWRUYXNrV2lkdGhzW2ldICogcm93U2NhbGU7CiAgICAgICAgICAgICAgICAgaWYgKHJvd1dpZHRoICsgd2lkdGggPiBub3JtYWxpemVkV29ya3NwYWNlV2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCBpcyB0b28gbG9uZyBmb3IgdGhpcyByb3csIGNyZWF0ZSBuZXcgcm93Ci0gICAgICAgICAgICAgICAgICAgIHJvd1dpZHRoID0gMGY7CiAgICAgICAgICAgICAgICAgICAgIGlmICgocm93Q291bnQgKyAxKSAqIHJvd1NjYWxlID4gbm9ybWFsaXplZFdvcmtzcGFjZUhlaWdodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByb3cgaXMgdG9vIGhpZ2gsIHNvIHdlIG5lZWQgdG8gdHJ5IGZpdHRpbmcgYWdhaW4uICBVcGRhdGUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzY2FsZSB0byBiZSB0aGUgc21hbGxlciBvZiB0aGUgc2NhbGUgbmVlZGVkIHRvIGZpdCB0aGUgdGFzayBpbiB0aGUKQEAgLTg4LDkgKzkyLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByb3dTY2FsZSA9IE1hdGgubWluKG5vcm1hbGl6ZWRXb3Jrc3BhY2VXaWR0aCAvIChyb3dXaWR0aCArIHdpZHRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFdvcmtzcGFjZUhlaWdodCAvIChyb3dDb3VudCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0NvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd1dpZHRoID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIG5ldyByb3cgZml0cywgc28gY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd1dpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICByb3dDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMDMsMjAgKzEwOSwyMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBOb3JtYWxpemUgZWFjaCBvZiB0aGUgYWN0dWFsIHJlY3RzIHRvIHRoYXQgc2NhbGUKLSAgICAgICAgICAgIGludCBoZWlnaHQgPSAoaW50KSAocm93U2NhbGUgKiB3b3Jrc3BhY2VIZWlnaHQpOwotICAgICAgICAgICAgZmxvYXQgcm93VG9wID0gKCgxZiAtIChyb3dTY2FsZSAqIHJvd0NvdW50KSkgKiB3b3Jrc3BhY2VIZWlnaHQpIC8gMmY7CiAgICAgICAgICAgICBmbG9hdCBkZWZhdWx0Um93TGVmdCA9ICgoMWYgLSAobWF4Um93V2lkdGggLyBub3JtYWxpemVkV29ya3NwYWNlV2lkdGgpKSAqCiAgICAgICAgICAgICAgICAgICAgIHdvcmtzcGFjZVdpZHRoKSAvIDJmOwogICAgICAgICAgICAgZmxvYXQgcm93TGVmdCA9IGRlZmF1bHRSb3dMZWZ0OworICAgICAgICAgICAgZmxvYXQgcm93VG9wID0gKCgxZiAtIChyb3dTY2FsZSAqIHJvd0NvdW50KSkgKiB3b3Jrc3BhY2VIZWlnaHQpIC8gMmY7CisgICAgICAgICAgICBmbG9hdCByb3dIZWlnaHQgPSByb3dTY2FsZSAqIHdvcmtzcGFjZUhlaWdodDsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRnJlZWZvcm1UYXNrczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgVGFzayB0YXNrID0gZnJlZWZvcm1UYXNrcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaW50IHdpZHRoID0gKGludCkgKGhlaWdodCAqIG5vcm1hbGl6ZWRUYXNrV2lkdGhzW2ldKTsKKyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9IHJvd0hlaWdodCAqIG5vcm1hbGl6ZWRUYXNrV2lkdGhzW2ldOwogICAgICAgICAgICAgICAgIGlmIChyb3dMZWZ0ICsgd2lkdGggPiB3b3Jrc3BhY2VXaWR0aCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGdvZXMgb24gdGhlIG5leHQgbGluZQotICAgICAgICAgICAgICAgICAgICByb3dUb3AgKz0gaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICByb3dUb3AgKz0gcm93SGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICByb3dMZWZ0ID0gZGVmYXVsdFJvd0xlZnQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFJlY3RGIHJlY3QgPSBuZXcgUmVjdEYocm93TGVmdCwgcm93VG9wLCByb3dMZWZ0ICsgd2lkdGgsIHJvd1RvcCArIGhlaWdodCk7CisgICAgICAgICAgICAgICAgUmVjdEYgcmVjdCA9IG5ldyBSZWN0Rihyb3dMZWZ0LCByb3dUb3AsIHJvd0xlZnQgKyB3aWR0aCwgcm93VG9wICsgcm93SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZWN0Lmluc2V0KG1UYXNrUGFkZGluZywgbVRhc2tQYWRkaW5nKTsKICAgICAgICAgICAgICAgICByb3dMZWZ0ICs9IHdpZHRoOwogICAgICAgICAgICAgICAgIG1UYXNrUmVjdE1hcC5wdXQodGFzay5rZXksIHJlY3QpOwogICAgICAgICAgICAgfQpAQCAtMTQwLDQwICsxNDcsMTUgQEAKICAgICBwdWJsaWMgVGFza1ZpZXdUcmFuc2Zvcm0gZ2V0VHJhbnNmb3JtKFRhc2sgdGFzaywgVGFza1ZpZXdUcmFuc2Zvcm0gdHJhbnNmb3JtT3V0LAogICAgICAgICAgICAgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIHN0YWNrTGF5b3V0KSB7CiAgICAgICAgIGlmIChtVGFza1JlY3RNYXAuY29udGFpbnNLZXkodGFzay5rZXkpKSB7Ci0gICAgICAgICAgICBSZWN0IHRhc2tSZWN0ID0gc3RhY2tMYXlvdXQubVRhc2tSZWN0OwotICAgICAgICAgICAgUmVjdEYgZmZSZWN0ID0gbVRhc2tSZWN0TWFwLmdldCh0YXNrLmtleSk7Ci0gICAgICAgICAgICBmbG9hdCBzY2FsZSA9IE1hdGgubWF4KGZmUmVjdC53aWR0aCgpIC8gdGFza1JlY3Qud2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgZmZSZWN0LmhlaWdodCgpIC8gdGFza1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgaW50IHRvcE9mZnNldCA9IChzdGFja0xheW91dC5tRnJlZWZvcm1SZWN0LnRvcCAtIHRhc2tSZWN0LnRvcCk7Ci0gICAgICAgICAgICBpbnQgc2NhbGVYT2Zmc2V0ID0gKGludCkgKCgoMWYgLSBzY2FsZSkgKiB0YXNrUmVjdC53aWR0aCgpKSAvIDIpOwotICAgICAgICAgICAgaW50IHNjYWxlWU9mZnNldCA9IChpbnQpICgoKDFmIC0gc2NhbGUpICogdGFza1JlY3QuaGVpZ2h0KCkpIC8gMik7CisgICAgICAgICAgICBmaW5hbCBSZWN0RiBmZlJlY3QgPSBtVGFza1JlY3RNYXAuZ2V0KHRhc2sua2V5KTsKIAotICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnNjYWxlID0gc2NhbGUgKiAwLjk1ZjsKLSAgICAgICAgICAgIHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblggPSAoaW50KSAoZmZSZWN0LmxlZnQgLSBzY2FsZVhPZmZzZXQpOwotICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnRyYW5zbGF0aW9uWSA9IChpbnQpICh0b3BPZmZzZXQgKyBmZlJlY3QudG9wIC0gc2NhbGVZT2Zmc2V0KTsKKyAgICAgICAgICAgIHRyYW5zZm9ybU91dC5zY2FsZSA9IDFmOworICAgICAgICAgICAgdHJhbnNmb3JtT3V0LmFscGhhID0gMWY7CiAgICAgICAgICAgICB0cmFuc2Zvcm1PdXQudHJhbnNsYXRpb25aID0gc3RhY2tMYXlvdXQubU1heFRyYW5zbGF0aW9uWjsKLSAgICAgICAgICAgIHRyYW5zZm9ybU91dC5jbGlwQm90dG9tID0gKGludCkgKHRhc2tSZWN0LmhlaWdodCgpIC0gKGZmUmVjdC5oZWlnaHQoKSAvIHNjYWxlKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PdXQuY2xpcFJpZ2h0ID0gKGludCkgKHRhc2tSZWN0LndpZHRoKCkgLSAoZmZSZWN0LndpZHRoKCkgLyBzY2FsZSkpOwotICAgICAgICAgICAgaWYgKHRhc2sudGh1bWJuYWlsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PdXQudGh1bWJuYWlsU2NhbGUgPSBNYXRoLm1pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICgoZmxvYXQpIHRhc2tSZWN0LndpZHRoKCkgLSB0cmFuc2Zvcm1PdXQuY2xpcFJpZ2h0KSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sudGh1bWJuYWlsLmdldFdpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAoKGZsb2F0KSB0YXNrUmVjdC5oZWlnaHQoKSAtIHRyYW5zZm9ybU91dC5jbGlwQm90dG9tKSAvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sudGh1bWJuYWlsLmdldEhlaWdodCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnRodW1ibmFpbFNjYWxlID0gMWY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cmFuc2Zvcm1PdXQucmVjdC5zZXQodGFza1JlY3QpOwotICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnJlY3Qub2Zmc2V0KHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblgsIHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblkpOwotICAgICAgICAgICAgVXRpbGl0aWVzLnNjYWxlUmVjdEFib3V0Q2VudGVyKHRyYW5zZm9ybU91dC5yZWN0LCB0cmFuc2Zvcm1PdXQuc2NhbGUpOwotICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnJlY3QucmlnaHQgLT0gdHJhbnNmb3JtT3V0LmNsaXBSaWdodCAqIHNjYWxlOwotICAgICAgICAgICAgdHJhbnNmb3JtT3V0LnJlY3QuYm90dG9tIC09IHRyYW5zZm9ybU91dC5jbGlwQm90dG9tICogc2NhbGU7CisgICAgICAgICAgICB0cmFuc2Zvcm1PdXQucmVjdC5zZXQoZmZSZWN0KTsKKyAgICAgICAgICAgIHRyYW5zZm9ybU91dC5yZWN0Lm9mZnNldChzdGFja0xheW91dC5tRnJlZWZvcm1SZWN0LmxlZnQsIHN0YWNrTGF5b3V0Lm1GcmVlZm9ybVJlY3QudG9wKTsKICAgICAgICAgICAgIHRyYW5zZm9ybU91dC52aXNpYmxlID0gdHJ1ZTsKICAgICAgICAgICAgIHRyYW5zZm9ybU91dC5wID0gMWY7Ci0KLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImdldFRyYW5zZm9ybTogIiArIHRhc2sua2V5ICsgIiwgIiArIHRyYW5zZm9ybU91dCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtT3V0OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1RyYW5zaXRpb25IZWxwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNUcmFuc2l0aW9uSGVscGVyLmphdmEKaW5kZXggOTZiMWE0MS4uZmRiMGQzMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1RyYW5zaXRpb25IZWxwZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVHJhbnNpdGlvbkhlbHBlci5qYXZhCkBAIC0zMiwxNSArMzIsMTUgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuSUFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjc0Z1dHVyZTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5FeGl0UmVjZW50c1dpbmRvd0ZpcnN0QW5pbWF0aW9uRnJhbWVFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzRGVidWdGbGFnczsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5DYW5jZWxFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25FdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5FeGl0UmVjZW50c1dpbmRvd0ZpcnN0QW5pbWF0aW9uRnJhbWVFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5MYXVuY2hUYXNrRmFpbGVkRXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuTGF1bmNoVGFza1N0YXJ0ZWRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5MYXVuY2hUYXNrU3VjY2VlZGVkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuY29tcG9uZW50LlNjcmVlblBpbm5pbmdSZXF1ZXN0RXZlbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuRGlzbWlzc1Rhc2tWaWV3RXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlN5c3RlbVNlcnZpY2VzUHJveHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOwpAQCAtOTAsNyArOTAsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGxhdW5jaFRhc2tGcm9tUmVjZW50cyhmaW5hbCBUYXNrU3RhY2sgc3RhY2ssIEBOdWxsYWJsZSBmaW5hbCBUYXNrIHRhc2ssCiAgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2tWaWV3IHN0YWNrVmlldywgZmluYWwgVGFza1ZpZXcgdGFza1ZpZXcsCi0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGxvY2tUb1Rhc2ssIGZpbmFsIFJlY3QgYm91bmRzLCBpbnQgZGVzdGluYXRpb25TdGFjaykgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkLCBmaW5hbCBSZWN0IGJvdW5kcywgaW50IGRlc3RpbmF0aW9uU3RhY2spIHsKICAgICAgICAgZmluYWwgQWN0aXZpdHlPcHRpb25zIG9wdHMgPSBBY3Rpdml0eU9wdGlvbnMubWFrZUJhc2ljKCk7CiAgICAgICAgIGlmIChib3VuZHMgIT0gbnVsbCkgewogICAgICAgICAgICAgb3B0cy5zZXRMYXVuY2hCb3VuZHMoYm91bmRzLmlzRW1wdHkoKSA/IG51bGwgOiBib3VuZHMpOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBDYW5jZWxFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25FdmVudCh0YXNrKSk7CiAgICAgICAgICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBFeGl0UmVjZW50c1dpbmRvd0ZpcnN0QW5pbWF0aW9uRnJhbWVFdmVudCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAobG9ja1RvVGFzaykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2NyZWVuUGlubmluZ1JlcXVlc3RlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVxdWVzdCBzY3JlZW4gcGlubmluZyBhZnRlciB0aGUgYW5pbWF0aW9uIHJ1bnMKICAgICAgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG1TdGFydFNjcmVlblBpbm5pbmdSdW5uYWJsZSwgMzUwKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTMxLDE2ICsxMzEsMTkgQEAKICAgICAgICAgICAgIC8vIHRhc2sgdmlld3MsIGFuZCB3ZSBjYW4gbGF1bmNoIGltbWVkaWF0ZWx5CiAgICAgICAgICAgICBzdGFydFRhc2tBY3Rpdml0eShzdGFjaywgdGFzaywgdGFza1ZpZXcsIG9wdHMsIHRyYW5zaXRpb25GdXR1cmUsIGFuaW1TdGFydGVkTGlzdGVuZXIpOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTGF1bmNoVGFza1N0YXJ0ZWRFdmVudCBsYXVuY2hTdGFydGVkRXZlbnQgPSBuZXcgTGF1bmNoVGFza1N0YXJ0ZWRFdmVudCh0YXNrVmlldywKKyAgICAgICAgICAgICAgICAgICAgc2NyZWVuUGlubmluZ1JlcXVlc3RlZCk7CiAgICAgICAgICAgICBpZiAodGFzay5ncm91cCAhPSBudWxsICYmICF0YXNrLmdyb3VwLmlzRnJvbnRNb3N0VGFzayh0YXNrKSkgewotICAgICAgICAgICAgICAgIHN0YWNrVmlldy5zdGFydExhdW5jaFRhc2tBbmltYXRpb24odGFza1ZpZXcsIG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBsYXVuY2hTdGFydGVkRXZlbnQuYWRkUG9zdEFuaW1hdGlvbkNhbGxiYWNrKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGFza0FjdGl2aXR5KHN0YWNrLCB0YXNrLCB0YXNrVmlldywgb3B0cywgdHJhbnNpdGlvbkZ1dHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbVN0YXJ0ZWRMaXN0ZW5lcik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9LCBsb2NrVG9UYXNrKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChsYXVuY2hTdGFydGVkRXZlbnQpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzdGFja1ZpZXcuc3RhcnRMYXVuY2hUYXNrQW5pbWF0aW9uKHRhc2tWaWV3LCBudWxsLCBsb2NrVG9UYXNrKTsKKyAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChsYXVuY2hTdGFydGVkRXZlbnQpOwogICAgICAgICAgICAgICAgIHN0YXJ0VGFza0FjdGl2aXR5KHN0YWNrLCB0YXNrLCB0YXNrVmlldywgb3B0cywgdHJhbnNpdGlvbkZ1dHVyZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1TdGFydGVkTGlzdGVuZXIpOwogICAgICAgICAgICAgfQpAQCAtMTU3LDcgKzE2MCw3IEBACiAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0cywgSUFwcFRyYW5zaXRpb25BbmltYXRpb25TcGVjc0Z1dHVyZSB0cmFuc2l0aW9uRnV0dXJlLAogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlPcHRpb25zLk9uQW5pbWF0aW9uU3RhcnRlZExpc3RlbmVyIGFuaW1TdGFydGVkTGlzdGVuZXIpIHsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7Ci0gICAgICAgIGlmIChzc3Auc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKG1Db250ZXh0LCB0YXNrLmtleS5pZCwgdGFzay5hY3Rpdml0eUxhYmVsLCBvcHRzKSkgeworICAgICAgICBpZiAoc3NwLnN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50cyhtQ29udGV4dCwgdGFzay5rZXkuaWQsIHRhc2sudGl0bGUsIG9wdHMpKSB7CiAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBpbmRleCBvZiB0aGUgdGFzayBsYXVuY2gKICAgICAgICAgICAgIGludCB0YXNrSW5kZXhGcm9tRnJvbnQgPSAwOwogICAgICAgICAgICAgaW50IHRhc2tJbmRleCA9IHN0YWNrLmluZGV4T2ZTdGFja1Rhc2sodGFzayk7CkBAIC0xNjcsNyArMTcwLDcgQEAKICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBMYXVuY2hUYXNrU3VjY2VlZGVkRXZlbnQodGFza0luZGV4RnJvbUZyb250KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBEaXNtaXNzIHRoZSB0YXNrIGlmIHdlIGZhaWwgdG8gbGF1bmNoIGl0Ci0gICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgRGlzbWlzc1Rhc2tWaWV3RXZlbnQodGFzaywgdGFza1ZpZXcpKTsKKyAgICAgICAgICAgIHRhc2tWaWV3LmRpc21pc3NUYXNrKCk7CiAKICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2YgZmFpbGVkIGxhdW5jaGVzCiAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgTGF1bmNoVGFza0ZhaWxlZEV2ZW50KCkpOwpAQCAtMjg2LDcgKzI4OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIG5ldmVyIGhhcHBlbikKICAgICAgICAgICAgICAgICAgICAgc3BlY3MuYWRkKGNvbXBvc2VPZmZzY3JlZW5BbmltYXRpb25TcGVjKHQsIG9mZnNjcmVlblRhc2tSZWN0KSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbGF5b3V0QWxnb3JpdGhtLmdldFN0YWNrVHJhbnNmb3JtKHRhc2ssIHN0YWNrU2Nyb2xsLCBtVG1wVHJhbnNmb3JtLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0QWxnb3JpdGhtLmdldFN0YWNrVHJhbnNmb3JtKHQsIHN0YWNrU2Nyb2xsLCBtVG1wVHJhbnNmb3JtLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgc3BlY3MuYWRkKGNvbXBvc2VBbmltYXRpb25TcGVjKHR2LCBtVG1wVHJhbnNmb3JtLCB0cnVlIC8qIGFkZEhlYWRlckJpdG1hcCAqLykpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMxMSw3ICszMTQsNyBAQAogICAgICAgICBCaXRtYXAgYiA9IG51bGw7CiAgICAgICAgIGlmIChhZGRIZWFkZXJCaXRtYXApIHsKICAgICAgICAgICAgIGZsb2F0IHNjYWxlID0gdHJhbnNmb3JtLnNjYWxlOwotICAgICAgICAgICAgaW50IGZyb21IZWFkZXJXaWR0aCA9IChpbnQpICh0YXNrVmlldy5tSGVhZGVyVmlldy5nZXRNZWFzdXJlZFdpZHRoKCkgKiBzY2FsZSk7CisgICAgICAgICAgICBpbnQgZnJvbUhlYWRlcldpZHRoID0gKGludCkgKHRyYW5zZm9ybS5yZWN0LndpZHRoKCkpOwogICAgICAgICAgICAgaW50IGZyb21IZWFkZXJIZWlnaHQgPSAoaW50KSAodGFza1ZpZXcubUhlYWRlclZpZXcuZ2V0TWVhc3VyZWRIZWlnaHQoKSAqIHNjYWxlKTsKICAgICAgICAgICAgIGIgPSBCaXRtYXAuY3JlYXRlQml0bWFwKGZyb21IZWFkZXJXaWR0aCwgZnJvbUhlYWRlckhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1ZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNWaWV3LmphdmEKaW5kZXggN2FlNjg2ZS4uZTI4ZTJiMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1ZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlldy5qYXZhCkBAIC0xOSw3ICsxOSw2IEBACiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JMaXN0ZW5lckFkYXB0ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CkBAIC0yOSwxMiArMjgsMTMgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1Byb3BlcnR5QW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd0luc2V0czsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmxvZ2dpbmcuTWV0cmljc0xvZ2dlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNBY3Rpdml0eTsKQEAgLTQ0LDE4ICs0NCwyMCBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0RlYnVnRmxhZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuQ2FuY2VsRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uRXZlbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRGVidWdGbGFnc0NoYW5nZWRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5EaXNtaXNzUmVjZW50c1RvSG9tZUFuaW1hdGlvblN0YXJ0ZWQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuSGlkZUhpc3RvcnlCdXR0b25FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5IaWRlSGlzdG9yeUV2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkxhdW5jaFRhc2tFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5TaG93SGlzdG9yeUJ1dHRvbkV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LlNob3dIaXN0b3J5RXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuVGFza1N0YWNrVXBkYXRlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmNvbXBvbmVudC5SZWNlbnRzVmlzaWJpbGl0eUNoYW5nZWRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5EcmFnZ2luZ0luUmVjZW50c0VuZGVkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuRHJhZ2dpbmdJblJlY2VudHNFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5kcmFnbmRyb3AuRHJhZ0Ryb3BUYXJnZXRDaGFuZ2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuZHJhZ25kcm9wLkRyYWdFbmRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5kcmFnbmRyb3AuRHJhZ1N0YXJ0RXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5TeXN0ZW1TZXJ2aWNlc1Byb3h5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFzazsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2tTdGFjazsKQEAgLTYzLDYgKzY1LDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuRmxpbmdBbmltYXRpb25VdGlsczsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLklOVkFMSURfU1RBQ0tfSUQ7CkBAIC03MSwzNiArNzQsMzQgQEAKICAqIFRoaXMgdmlldyBpcyB0aGUgdGhlIHRvcCBsZXZlbCBsYXlvdXQgdGhhdCBjb250YWlucyBUYXNrU3RhY2tzICh3aGljaCBhcmUgbGFpZCBvdXQgYWNjb3JkaW5nCiAgKiB0byB0aGVpciBTcGFjZU5vZGUgYm91bmRzLgogICovCi1wdWJsaWMgY2xhc3MgUmVjZW50c1ZpZXcgZXh0ZW5kcyBGcmFtZUxheW91dCBpbXBsZW1lbnRzIFRhc2tTdGFja1ZpZXcuVGFza1N0YWNrVmlld0NhbGxiYWNrcyB7CitwdWJsaWMgY2xhc3MgUmVjZW50c1ZpZXcgZXh0ZW5kcyBGcmFtZUxheW91dCB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlJlY2VudHNWaWV3IjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CiAKLSAgICBIYW5kbGVyIG1IYW5kbGVyOworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKIAotICAgIFRhc2tTdGFjayBtU3RhY2s7Ci0gICAgVGFza1N0YWNrVmlldyBtVGFza1N0YWNrVmlldzsKLSAgICBSZWNlbnRzQXBwV2lkZ2V0SG9zdFZpZXcgbVNlYXJjaEJhcjsKLSAgICBWaWV3IG1IaXN0b3J5QnV0dG9uOwotICAgIGJvb2xlYW4gbUF3YWl0aW5nRmlyc3RMYXlvdXQgPSB0cnVlOwotICAgIGJvb2xlYW4gbUxhc3RUYXNrTGF1bmNoZWRXYXNGcmVlZm9ybTsKKyAgICBwcml2YXRlIFRhc2tTdGFjayBtU3RhY2s7CisgICAgcHJpdmF0ZSBUYXNrU3RhY2tWaWV3IG1UYXNrU3RhY2tWaWV3OworICAgIHByaXZhdGUgUmVjZW50c0FwcFdpZGdldEhvc3RWaWV3IG1TZWFyY2hCYXI7CisgICAgcHJpdmF0ZSBUZXh0VmlldyBtSGlzdG9yeUJ1dHRvbjsKKyAgICBwcml2YXRlIFZpZXcgbUVtcHR5VmlldzsKKyAgICBwcml2YXRlIGJvb2xlYW4gbUF3YWl0aW5nRmlyc3RMYXlvdXQgPSB0cnVlOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGFzdFRhc2tMYXVuY2hlZFdhc0ZyZWVmb3JtOworICAgIHByaXZhdGUgUmVjdCBtU3lzdGVtSW5zZXRzID0gbmV3IFJlY3QoKTsKIAotICAgIFJlY2VudHNUcmFuc2l0aW9uSGVscGVyIG1UcmFuc2l0aW9uSGVscGVyOwotICAgIFJlY2VudHNWaWV3VG91Y2hIYW5kbGVyIG1Ub3VjaEhhbmRsZXI7Ci0gICAgVGFza1N0YWNrLkRvY2tTdGF0ZVtdIG1WaXNpYmxlRG9ja1N0YXRlcyA9IHsKKyAgICBwcml2YXRlIFJlY2VudHNUcmFuc2l0aW9uSGVscGVyIG1UcmFuc2l0aW9uSGVscGVyOworICAgIHByaXZhdGUgUmVjZW50c1ZpZXdUb3VjaEhhbmRsZXIgbVRvdWNoSGFuZGxlcjsKKyAgICBwcml2YXRlIFRhc2tTdGFjay5Eb2NrU3RhdGVbXSBtVmlzaWJsZURvY2tTdGF0ZXMgPSB7CiAgICAgICAgICAgICBUYXNrU3RhY2suRG9ja1N0YXRlLkxFRlQsCiAgICAgICAgICAgICBUYXNrU3RhY2suRG9ja1N0YXRlLlRPUCwKICAgICAgICAgICAgIFRhc2tTdGFjay5Eb2NrU3RhdGUuUklHSFQsCiAgICAgICAgICAgICBUYXNrU3RhY2suRG9ja1N0YXRlLkJPVFRPTSwKICAgICB9OwogCi0gICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3I7Ci0gICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbUZhc3RPdXRMaW5lYXJJbkludGVycG9sYXRvcjsKLSAgICBwcml2YXRlIGludCBtSGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbjsKLQotICAgIFJlY3QgbVN5c3RlbUluc2V0cyA9IG5ldyBSZWN0KCk7Ci0KLSAgICBmaW5hbCBGbGluZ0FuaW1hdGlvblV0aWxzIG1GbGluZ0FuaW1hdGlvblV0aWxzOworICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3I7CisgICAgcHJpdmF0ZSBmaW5hbCBGbGluZ0FuaW1hdGlvblV0aWxzIG1GbGluZ0FuaW1hdGlvblV0aWxzOwogCiAgICAgcHVibGljIFJlY2VudHNWaWV3KENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwpAQCAtMTE2LDcgKzExNyw2IEBACiAKICAgICBwdWJsaWMgUmVjZW50c1ZpZXcoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMsIGludCBkZWZTdHlsZUF0dHIsIGludCBkZWZTdHlsZVJlcykgewogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVBdHRyLCBkZWZTdHlsZVJlcyk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOwogICAgICAgICBzZXRXaWxsTm90RHJhdyhmYWxzZSk7CiAgICAgICAgIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKICAgICAgICAgbVRyYW5zaXRpb25IZWxwZXIgPSBuZXcgUmVjZW50c1RyYW5zaXRpb25IZWxwZXIoZ2V0Q29udGV4dCgpLCBtSGFuZGxlcik7CkBAIC0xMjQsMzQgKzEyNCwzNCBAQAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmZhc3Rfb3V0X3Nsb3dfaW4pOwogICAgICAgICBtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjb250ZXh0LAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmZhc3Rfb3V0X2xpbmVhcl9pbik7Ci0gICAgICAgIG1IaXN0b3J5VHJhbnNpdGlvbkR1cmF0aW9uID0gcmVzLmdldEludGVnZXIoUi5pbnRlZ2VyLnJlY2VudHNfaGlzdG9yeV90cmFuc2l0aW9uX2R1cmF0aW9uKTsKICAgICAgICAgbVRvdWNoSGFuZGxlciA9IG5ldyBSZWNlbnRzVmlld1RvdWNoSGFuZGxlcih0aGlzKTsKICAgICAgICAgbUZsaW5nQW5pbWF0aW9uVXRpbHMgPSBuZXcgRmxpbmdBbmltYXRpb25VdGlscyhjb250ZXh0LCAwLjNmKTsKIAogICAgICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciA9IExheW91dEluZmxhdGVyLmZyb20oY29udGV4dCk7Ci0gICAgICAgIG1IaXN0b3J5QnV0dG9uID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5yZWNlbnRzX2hpc3RvcnlfYnV0dG9uLCB0aGlzLCBmYWxzZSk7CisgICAgICAgIG1IaXN0b3J5QnV0dG9uID0gKFRleHRWaWV3KSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LnJlY2VudHNfaGlzdG9yeV9idXR0b24sIHRoaXMsIGZhbHNlKTsKICAgICAgICAgbUhpc3RvcnlCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKICAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgU2hvd0hpc3RvcnlFdmVudCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CisgICAgICAgIGFkZFZpZXcobUhpc3RvcnlCdXR0b24pOworICAgICAgICBtRW1wdHlWaWV3ID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5yZWNlbnRzX2VtcHR5LCB0aGlzLCBmYWxzZSk7CisgICAgICAgIGFkZFZpZXcobUVtcHR5Vmlldyk7CiAgICAgfQogCiAgICAgLyoqIFNldC9nZXQgdGhlIGJzcCByb290IG5vZGUgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUYXNrU3RhY2soVGFza1N0YWNrIHN0YWNrKSB7CiAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOworICAgICAgICBSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSBsYXVuY2hTdGF0ZSA9IGNvbmZpZy5nZXRMYXVuY2hTdGF0ZSgpOwogICAgICAgICBtU3RhY2sgPSBzdGFjazsKLSAgICAgICAgaWYgKGNvbmZpZy5nZXRMYXVuY2hTdGF0ZSgpLmxhdW5jaGVkUmV1c2VUYXNrU3RhY2tWaWV3cykgeworICAgICAgICBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRSZXVzZVRhc2tTdGFja1ZpZXdzKSB7CiAgICAgICAgICAgICBpZiAobVRhc2tTdGFja1ZpZXcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIC8vIElmIG9uUmVjZW50c0hpZGRlbiBpcyBub3QgdHJpZ2dlcmVkLCB3ZSBuZWVkIHRvIHRoZSBzdGFjayB2aWV3IGFnYWluIGhlcmUKICAgICAgICAgICAgICAgICBtVGFza1N0YWNrVmlldy5yZXNldCgpOwogICAgICAgICAgICAgICAgIG1UYXNrU3RhY2tWaWV3LnNldFN0YWNrKHN0YWNrKTsKLSAgICAgICAgICAgICAgICByZW1vdmVWaWV3KG1UYXNrU3RhY2tWaWV3KTsKLSAgICAgICAgICAgICAgICBhZGRWaWV3KG1UYXNrU3RhY2tWaWV3KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcgPSBuZXcgVGFza1N0YWNrVmlldyhnZXRDb250ZXh0KCksIHN0YWNrKTsKLSAgICAgICAgICAgICAgICBtVGFza1N0YWNrVmlldy5zZXRDYWxsYmFja3ModGhpcyk7CiAgICAgICAgICAgICAgICAgYWRkVmlldyhtVGFza1N0YWNrVmlldyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNTksMTMgKzE1OSwxNCBAQAogICAgICAgICAgICAgICAgIHJlbW92ZVZpZXcobVRhc2tTdGFja1ZpZXcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcgPSBuZXcgVGFza1N0YWNrVmlldyhnZXRDb250ZXh0KCksIHN0YWNrKTsKLSAgICAgICAgICAgIG1UYXNrU3RhY2tWaWV3LnNldENhbGxiYWNrcyh0aGlzKTsKICAgICAgICAgICAgIGFkZFZpZXcobVRhc2tTdGFja1ZpZXcpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpbmRleE9mQ2hpbGQobUhpc3RvcnlCdXR0b24pID09IC0xKSB7Ci0gICAgICAgICAgICBhZGRWaWV3KG1IaXN0b3J5QnV0dG9uKTsKKworICAgICAgICAvLyBVcGRhdGUgdGhlIHRvcCBsZXZlbCB2aWV3J3MgdmlzaWJpbGl0aWVzCisgICAgICAgIGlmIChzdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpID4gMCkgeworICAgICAgICAgICAgaGlkZUVtcHR5VmlldygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUhpc3RvcnlCdXR0b24uYnJpbmdUb0Zyb250KCk7CisgICAgICAgICAgICBzaG93RW1wdHlWaWV3KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUcmlnZ2VyIGEgbmV3IGxheW91dApAQCAtMjEyLDEyICsyMTMsMTEgQEAKICAgICAvKiogTGF1bmNoZXMgdGhlIGZvY3VzZWQgdGFzayBmcm9tIHRoZSBmaXJzdCBzdGFjayBpZiBwb3NzaWJsZSAqLwogICAgIHB1YmxpYyBib29sZWFuIGxhdW5jaEZvY3VzZWRUYXNrKCkgewogICAgICAgICBpZiAobVRhc2tTdGFja1ZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gbVRhc2tTdGFja1ZpZXcuZ2V0U3RhY2soKTsKICAgICAgICAgICAgIFRhc2sgdGFzayA9IG1UYXNrU3RhY2tWaWV3LmdldEZvY3VzZWRUYXNrKCk7CiAgICAgICAgICAgICBpZiAodGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgVGFza1ZpZXcgdGFza1ZpZXcgPSBtVGFza1N0YWNrVmlldy5nZXRDaGlsZFZpZXdGb3JUYXNrKHRhc2spOwotICAgICAgICAgICAgICAgIG9uVGFza1ZpZXdDbGlja2VkKG1UYXNrU3RhY2tWaWV3LCB0YXNrVmlldywgc3RhY2ssIHRhc2ssIGZhbHNlLCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFDS19JRCk7CisgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudCh0YXNrVmlldywgdGFzaywgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfU1RBQ0tfSUQsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIzMSw4ICsyMzEsOCBAQAogICAgICAgICAgICAgVGFzayB0YXNrID0gc3RhY2suZ2V0TGF1bmNoVGFyZ2V0KCk7CiAgICAgICAgICAgICBpZiAodGFzayAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgVGFza1ZpZXcgdGFza1ZpZXcgPSBtVGFza1N0YWNrVmlldy5nZXRDaGlsZFZpZXdGb3JUYXNrKHRhc2spOwotICAgICAgICAgICAgICAgIG9uVGFza1ZpZXdDbGlja2VkKG1UYXNrU3RhY2tWaWV3LCB0YXNrVmlldywgc3RhY2ssIHRhc2ssIGZhbHNlLCBudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFDS19JRCk7CisgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudCh0YXNrVmlldywgdGFzaywgbnVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOVkFMSURfU1RBQ0tfSUQsIGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0MiwxNSArMjQyLDE0IEBACiAgICAgLyoqIExhdW5jaGVzIGEgZ2l2ZW4gdGFzay4gKi8KICAgICBwdWJsaWMgYm9vbGVhbiBsYXVuY2hUYXNrKFRhc2sgdGFzaywgUmVjdCB0YXNrQm91bmRzLCBpbnQgZGVzdGluYXRpb25TdGFjaykgewogICAgICAgICBpZiAobVRhc2tTdGFja1ZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gbVRhc2tTdGFja1ZpZXcuZ2V0U3RhY2soKTsKICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhlIHN0YWNrIHZpZXdzIGFuZCB0cnkgYW5kIGZpbmQgdGhlIGdpdmVuIHRhc2suCiAgICAgICAgICAgICBMaXN0PFRhc2tWaWV3PiB0YXNrVmlld3MgPSBtVGFza1N0YWNrVmlldy5nZXRUYXNrVmlld3MoKTsKICAgICAgICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGFza1ZpZXdDb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGopOwogICAgICAgICAgICAgICAgIGlmICh0di5nZXRUYXNrKCkgPT0gdGFzaykgewotICAgICAgICAgICAgICAgICAgICBvblRhc2tWaWV3Q2xpY2tlZChtVGFza1N0YWNrVmlldywgdHYsIHN0YWNrLCB0YXNrLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrQm91bmRzLCBkZXN0aW5hdGlvblN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudCh0diwgdGFzaywgdGFza0JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblN0YWNrLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yNTgsMzkgKzI1Nyw2IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvKiogUmVxdWVzdHMgYWxsIHRhc2sgc3RhY2tzIHRvIHN0YXJ0IHRoZWlyIGVudGVyLXJlY2VudHMgYW5pbWF0aW9uICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFbnRlclJlY2VudHNBbmltYXRpb24oVmlld0FuaW1hdGlvbi5UYXNrVmlld0VudGVyQ29udGV4dCBjdHgpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZSBwb3N0IGFuaW1hdGlvbiB0cmlnZ2VyIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNoaWxkcmVuCi0gICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IGl0IHJ1bnMKLSAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICBpZiAobVRhc2tTdGFja1ZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcuc3RhcnRFbnRlclJlY2VudHNBbmltYXRpb24oY3R4KTsKLSAgICAgICAgfQotICAgICAgICBjdHgucG9zdEFuaW1hdGlvblRyaWdnZXIuZGVjcmVtZW50KCk7Ci0gICAgfQotCi0gICAgLyoqIFJlcXVlc3RzIGFsbCB0YXNrIHN0YWNrcyB0byBzdGFydCB0aGVpciBleGl0LXJlY2VudHMgYW5pbWF0aW9uICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFeGl0VG9Ib21lQW5pbWF0aW9uKFZpZXdBbmltYXRpb24uVGFza1ZpZXdFeGl0Q29udGV4dCBjdHgpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZSBwb3N0IGFuaW1hdGlvbiB0cmlnZ2VyIGluIGNhc2UgdGhlcmUgYXJlIG5vIGNoaWxkcmVuCi0gICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IGl0IHJ1bnMKLSAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICBpZiAobVRhc2tTdGFja1ZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcuc3RhcnRFeGl0VG9Ib21lQW5pbWF0aW9uKGN0eCk7Ci0gICAgICAgIH0KLSAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudCgpOwotCi0gICAgICAgIC8vIEhpZGUgdGhlIGhpc3RvcnkgYnV0dG9uCi0gICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfdGFza19leGl0X3RvX2hvbWVfZHVyYXRpb24pOwotICAgICAgICBoaWRlSGlzdG9yeUJ1dHRvbih0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbik7Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIGdvaW5nIGhvbWUsIGNhbmNlbCB0aGUgcHJldmlvdXMgdGFzaydzIHdpbmRvdyB0cmFuc2l0aW9uCi0gICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBDYW5jZWxFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25FdmVudChudWxsKSk7Ci0KLSAgICAgICAgLy8gTm90aWZ5IHNvZiB0aGUgZXhpdCBhbmltYXRpb24KLSAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IERpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZCgpKTsKLSAgICB9Ci0KICAgICAvKiogQWRkcyB0aGUgc2VhcmNoIGJhciAqLwogICAgIHB1YmxpYyB2b2lkIHNldFNlYXJjaEJhcihSZWNlbnRzQXBwV2lkZ2V0SG9zdFZpZXcgc2VhcmNoQmFyKSB7CiAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgc2VhcmNoIGJhciBpZiBvbmUgZXhpc3RzCkBAIC0zMDksMTMgKzI3NSwzMyBAQAogICAgICAgICByZXR1cm4gbVNlYXJjaEJhciAhPSBudWxsICYmICFtU2VhcmNoQmFyLmlzUmVpbmZsYXRlUmVxdWlyZWQoKTsKICAgICB9CiAKLSAgICAvKiogU2V0cyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2VhcmNoIGJhciAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNlYXJjaEJhclZpc2liaWxpdHkoaW50IHZpc2liaWxpdHkpIHsKKyAgICAvKioKKyAgICAgKiBIaWRlcyB0aGUgdGFzayBzdGFjayBhbmQgc2hvd3MgdGhlIGVtcHR5IHZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2hvd0VtcHR5VmlldygpIHsKKyAgICAgICAgaWYgKFJlY2VudHNEZWJ1Z0ZsYWdzLlN0YXRpYy5FbmFibGVTZWFyY2hCYXIgJiYgKG1TZWFyY2hCYXIgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgIG1TZWFyY2hCYXIuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgbVRhc2tTdGFja1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgIG1FbXB0eVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICBtRW1wdHlWaWV3LmJyaW5nVG9Gcm9udCgpOworICAgICAgICBtSGlzdG9yeUJ1dHRvbi5icmluZ1RvRnJvbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTaG93cyB0aGUgdGFzayBzdGFjayBhbmQgaGlkZXMgdGhlIGVtcHR5IHZpZXcuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaGlkZUVtcHR5VmlldygpIHsKKyAgICAgICAgbUVtcHR5Vmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgbVRhc2tTdGFja1ZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICBpZiAoUmVjZW50c0RlYnVnRmxhZ3MuU3RhdGljLkVuYWJsZVNlYXJjaEJhciAmJiAobVNlYXJjaEJhciAhPSBudWxsKSkgeworICAgICAgICAgICAgbVNlYXJjaEJhci5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgIH0KKyAgICAgICAgbVRhc2tTdGFja1ZpZXcuYnJpbmdUb0Zyb250KCk7CiAgICAgICAgIGlmIChtU2VhcmNoQmFyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZWFyY2hCYXIuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICAgICAgICAgIC8vIEFsd2F5cyBicmluZyB0aGUgc2VhcmNoIGJhciB0byB0aGUgdG9wCiAgICAgICAgICAgICBtU2VhcmNoQmFyLmJyaW5nVG9Gcm9udCgpOwogICAgICAgICB9CisgICAgICAgIG1IaXN0b3J5QnV0dG9uLmJyaW5nVG9Gcm9udCgpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzY2LDYgKzM1MiwxMCBAQAogICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRNZWFzdXJlU3BlYyk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBNZWFzdXJlIHRoZSBlbXB0eSB2aWV3CisgICAgICAgIG1lYXN1cmVDaGlsZChtRW1wdHlWaWV3LCBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMod2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFkpLAorICAgICAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpKTsKKwogICAgICAgICAvLyBNZWFzdXJlIHRoZSBoaXN0b3J5IGJ1dHRvbiB3aXRoIHRoZSBmdWxsIHNwYWNlIGFib3ZlIHRoZSBzdGFjaywgYnV0IHdpZHRoLWNvbnN0cmFpbmVkCiAgICAgICAgIC8vIHRvIHRoZSBzdGFjawogICAgICAgICBSZWN0IGhpc3RvcnlCdXR0b25SZWN0ID0gbVRhc2tTdGFja1ZpZXcubUxheW91dEFsZ29yaXRobS5tSGlzdG9yeUJ1dHRvblJlY3Q7CkBAIC0zNzMsNiArMzYzLDcgQEAKICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGlzdG9yeUJ1dHRvblJlY3Qud2lkdGgoKSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSksCiAgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGhpc3RvcnlCdXR0b25SZWN0LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgTWVhc3VyZVNwZWMuRVhBQ1RMWSkpOworCiAgICAgICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIApAQCAtMzk3LDYgKzM4OCw5IEBACiAgICAgICAgICAgICBtVGFza1N0YWNrVmlldy5sYXlvdXQobGVmdCwgdG9wLCBsZWZ0ICsgZ2V0TWVhc3VyZWRXaWR0aCgpLCB0b3AgKyBnZXRNZWFzdXJlZEhlaWdodCgpKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIExheW91dCB0aGUgZW1wdHkgdmlldworICAgICAgICBtRW1wdHlWaWV3LmxheW91dChsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCiAgICAgICAgIC8vIExheW91dCB0aGUgaGlzdG9yeSBidXR0b24gbGVmdC1hbGlnbmVkIHdpdGggdGhlIHN0YWNrLCBidXQgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUKICAgICAgICAgLy8gdmlldwogICAgICAgICBSZWN0IGhpc3RvcnlCdXR0b25SZWN0ID0gbVRhc2tTdGFja1ZpZXcubUxheW91dEFsZ29yaXRobS5tSGlzdG9yeUJ1dHRvblJlY3Q7CkBAIC00NTYsMTggKzQ1MCwyMyBAQAogICAgICAgICByZXR1cm4gc3VwZXIudmVyaWZ5RHJhd2FibGUod2hvKTsKICAgICB9CiAKLSAgICAvKioqKiBUYXNrU3RhY2tWaWV3LlRhc2tTdGFja0NhbGxiYWNrcyBJbXBsZW1lbnRhdGlvbiAqKioqLworICAgIC8qKioqIEV2ZW50QnVzIEV2ZW50cyAqKioqLwogCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UYXNrVmlld0NsaWNrZWQoZmluYWwgVGFza1N0YWNrVmlldyBzdGFja1ZpZXcsIGZpbmFsIFRhc2tWaWV3IHR2LAotICAgICAgICAgICAgZmluYWwgVGFza1N0YWNrIHN0YWNrLCBmaW5hbCBUYXNrIHRhc2ssIGZpbmFsIGJvb2xlYW4gbG9ja1RvVGFzaywKLSAgICAgICAgICAgIGZpbmFsIFJlY3QgYm91bmRzLCBpbnQgZGVzdGluYXRpb25TdGFjaykgewotICAgICAgICBtTGFzdFRhc2tMYXVuY2hlZFdhc0ZyZWVmb3JtID0gdGFzay5pc0ZyZWVmb3JtVGFzaygpOwotICAgICAgICBtVHJhbnNpdGlvbkhlbHBlci5sYXVuY2hUYXNrRnJvbVJlY2VudHMoc3RhY2ssIHRhc2ssIHN0YWNrVmlldywgdHYsIGxvY2tUb1Rhc2ssIGJvdW5kcywKLSAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblN0YWNrKTsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KExhdW5jaFRhc2tFdmVudCBldmVudCkgeworICAgICAgICBtTGFzdFRhc2tMYXVuY2hlZFdhc0ZyZWVmb3JtID0gZXZlbnQudGFzay5pc0ZyZWVmb3JtVGFzaygpOworICAgICAgICBtVHJhbnNpdGlvbkhlbHBlci5sYXVuY2hUYXNrRnJvbVJlY2VudHMobVN0YWNrLCBldmVudC50YXNrLCBtVGFza1N0YWNrVmlldywgZXZlbnQudGFza1ZpZXcsCisgICAgICAgICAgICAgICAgZXZlbnQuc2NyZWVuUGlubmluZ1JlcXVlc3RlZCwgZXZlbnQudGFyZ2V0VGFza0JvdW5kcywgZXZlbnQudGFyZ2V0VGFza1N0YWNrKTsKICAgICB9CiAKLSAgICAvKioqKiBFdmVudEJ1cyBFdmVudHMgKioqKi8KKyAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KERpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZCBldmVudCkgeworICAgICAgICAvLyBIaWRlIHRoZSBoaXN0b3J5IGJ1dHRvbgorICAgICAgICBpbnQgdGFza1ZpZXdFeGl0VG9Ib21lRHVyYXRpb24gPSBnZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZXhpdF90b19ob21lX2R1cmF0aW9uKTsKKyAgICAgICAgaGlkZUhpc3RvcnlCdXR0b24odGFza1ZpZXdFeGl0VG9Ib21lRHVyYXRpb24pOworCisgICAgICAgIC8vIElmIHdlIGFyZSBnb2luZyBob21lLCBjYW5jZWwgdGhlIHByZXZpb3VzIHRhc2sncyB3aW5kb3cgdHJhbnNpdGlvbgorICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgQ2FuY2VsRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uRXZlbnQobnVsbCkpOworICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRHJhZ1N0YXJ0RXZlbnQgZXZlbnQpIHsKICAgICAgICAgdXBkYXRlVmlzaWJsZURvY2tSZWdpb25zKG1Ub3VjaEhhbmRsZXIuZ2V0RG9ja1N0YXRlc0ZvckN1cnJlbnRPcmllbnRhdGlvbigpLApAQCAtNDkwLDI4ICs0ODksMzMgQEAKIAogICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgZHJvcCBvbnRvIGEgZG9jayByZWdpb24KICAgICAgICAgaWYgKGV2ZW50LmRyb3BUYXJnZXQgaW5zdGFuY2VvZiBUYXNrU3RhY2suRG9ja1N0YXRlKSB7Ci0gICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2suRG9ja1N0YXRlIGRvY2tTdGF0ZSA9IChUYXNrU3RhY2suRG9ja1N0YXRlKSBldmVudC5kcm9wVGFyZ2V0OworICAgICAgICAgICAgVGFza1N0YWNrLkRvY2tTdGF0ZSBkb2NrU3RhdGUgPSAoVGFza1N0YWNrLkRvY2tTdGF0ZSkgZXZlbnQuZHJvcFRhcmdldDsKKyAgICAgICAgICAgIFRhc2tTdGFja0xheW91dEFsZ29yaXRobSBzdGFja0xheW91dCA9IG1UYXNrU3RhY2tWaWV3LmdldFN0YWNrQWxnb3JpdGhtKCk7CisgICAgICAgICAgICBUYXNrU3RhY2tWaWV3U2Nyb2xsZXIgc3RhY2tTY3JvbGxlciA9IG1UYXNrU3RhY2tWaWV3LmdldFNjcm9sbGVyKCk7CisgICAgICAgICAgICBUYXNrVmlld1RyYW5zZm9ybSB0bXBUcmFuc2Zvcm0gPSBuZXcgVGFza1ZpZXdUcmFuc2Zvcm0oKTsKIAotICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0YXNrIGFmdGVyIGl0IGlzIGRvY2tlZAotICAgICAgICAgICAgZXZlbnQudGFza1ZpZXcuYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5hbHBoYSgwZikKLSAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDE1MCkKLSAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgICAgICAuc2V0VXBkYXRlTGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAgICAgLnNldExpc3RlbmVyKG51bGwpCi0gICAgICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UYXNrU3RhY2tWaWV3LmdldFN0YWNrKCkucmVtb3ZlVGFzayhldmVudC50YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0YXNrIHZpZXcgYWZ0ZXIgaXQgaXMgZG9ja2VkCisgICAgICAgICAgICBzdGFja0xheW91dC5nZXRTdGFja1RyYW5zZm9ybShldmVudC50YXNrLCBzdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksIHRtcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCk7CisgICAgICAgICAgICB0bXBUcmFuc2Zvcm0uc2NhbGUgPSBldmVudC50YXNrVmlldy5nZXRTY2FsZVgoKTsKKyAgICAgICAgICAgIHRtcFRyYW5zZm9ybS5yZWN0Lm9mZnNldChldmVudC50YXNrVmlldy5nZXRUcmFuc2xhdGlvblgoKSwKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQudGFza1ZpZXcuZ2V0VHJhbnNsYXRpb25ZKCkpOworICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcudXBkYXRlVGFza1ZpZXdUb1RyYW5zZm9ybShldmVudC50YXNrVmlldywgdG1wVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICBuZXcgVGFza1ZpZXdBbmltYXRpb24oMTUwLCBtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBbmltYXRvckxpc3RlbmVyQWRhcHRlcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uRW5kKEFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRhc2tTdGFja1ZpZXcuZ2V0U3RhY2soKS5yZW1vdmVUYXNrKGV2ZW50LnRhc2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpOwogCiAgICAgICAgICAgICAvLyBEb2NrIHRoZSB0YXNrIGFuZCBsYXVuY2ggaXQKICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICAgICAgc3NwLnN0YXJ0VGFza0luRG9ja2VkTW9kZShldmVudC50YXNrLmtleS5pZCwgZG9ja1N0YXRlLmNyZWF0ZU1vZGUpOwogICAgICAgICAgICAgbGF1bmNoVGFzayhldmVudC50YXNrLCBudWxsLCBJTlZBTElEX1NUQUNLX0lEKTsKKworICAgICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuQUNUSU9OX1dJTkRPV19ET0NLX0RSQUdfRFJPUCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU0MiwxMiArNTQ2LDIxIEBACiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFNob3dIaXN0b3J5RXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gSGlkZSB0aGUgaGlzdG9yeSBidXR0b24gd2hlbiB0aGUgaGlzdG9yeSB2aWV3IGlzIHNob3duCi0gICAgICAgIGhpZGVIaXN0b3J5QnV0dG9uKG1IaXN0b3J5VHJhbnNpdGlvbkR1cmF0aW9uKTsKKyAgICAgICAgaGlkZUhpc3RvcnlCdXR0b24oZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcihSLmludGVnZXIucmVjZW50c19oaXN0b3J5X3RyYW5zaXRpb25fZHVyYXRpb24pLAorICAgICAgICAgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKSk7CisgICAgICAgIGV2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBzZXRBbHBoYSgwZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoSGlkZUhpc3RvcnlFdmVudCBldmVudCkgewogICAgICAgICAvLyBTaG93IHRoZSBoaXN0b3J5IGJ1dHRvbiB3aGVuIHRoZSBoaXN0b3J5IHZpZXcgaXMgaGlkZGVuCi0gICAgICAgIHNob3dIaXN0b3J5QnV0dG9uKG1IaXN0b3J5VHJhbnNpdGlvbkR1cmF0aW9uKTsKKyAgICAgICAgc2V0QWxwaGEoMWYpOworICAgICAgICBzaG93SGlzdG9yeUJ1dHRvbihnZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKFIuaW50ZWdlci5yZWNlbnRzX2hpc3RvcnlfdHJhbnNpdGlvbl9kdXJhdGlvbiksCisgICAgICAgICAgICAgICAgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFNob3dIaXN0b3J5QnV0dG9uRXZlbnQgZXZlbnQpIHsKQEAgLTU1OCw0NyArNTcxLDY4IEBACiAgICAgICAgIGhpZGVIaXN0b3J5QnV0dG9uKDEwMCk7CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChEZWJ1Z0ZsYWdzQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKLSAgICAgICAgaWYgKCFkZWJ1Z0ZsYWdzLmlzSGlzdG9yeUVuYWJsZWQoKSkgewotICAgICAgICAgICAgaGlkZUhpc3RvcnlCdXR0b24oMTAwKTsKLSAgICAgICAgfQorICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoVGFza1N0YWNrVXBkYXRlZEV2ZW50IGV2ZW50KSB7CisgICAgICAgIG1TdGFjay5zZXRUYXNrcyhldmVudC5zdGFjay5jb21wdXRlQWxsVGFza3NMaXN0KCksIHRydWUgLyogbm90aWZ5U3RhY2tDaGFuZ2VzICovKTsKKyAgICAgICAgbVN0YWNrLmNyZWF0ZUFmZmlsaWF0ZWRHcm91cGluZ3MoZ2V0Q29udGV4dCgpKTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBTaG93cyB0aGUgaGlzdG9yeSBidXR0b24uCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNob3dIaXN0b3J5QnV0dG9uKGludCBkdXJhdGlvbikgewotICAgICAgICBSZWNlbnRzRGVidWdGbGFncyBkZWJ1Z0ZsYWdzID0gUmVjZW50cy5nZXREZWJ1Z0ZsYWdzKCk7Ci0gICAgICAgIGlmICghZGVidWdGbGFncy5pc0hpc3RvcnlFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIHByaXZhdGUgdm9pZCBzaG93SGlzdG9yeUJ1dHRvbihmaW5hbCBpbnQgZHVyYXRpb24pIHsKKyAgICAgICAgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIgPSBuZXcgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIoKTsKKyAgICAgICAgc2hvd0hpc3RvcnlCdXR0b24oZHVyYXRpb24sIHBvc3RBbmltYXRpb25UcmlnZ2VyKTsKKyAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZmx1c2hMYXN0RGVjcmVtZW50UnVubmFibGVzKCk7CisgICAgfQogCi0gICAgICAgIG1IaXN0b3J5QnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgbUhpc3RvcnlCdXR0b24uYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLmFscGhhKDFmKQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQotICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgIHByaXZhdGUgdm9pZCBzaG93SGlzdG9yeUJ1dHRvbihmaW5hbCBpbnQgZHVyYXRpb24sCisgICAgICAgICAgICBmaW5hbCBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0SGlkZUhpc3RvcnlBbmltYXRpb25UcmlnZ2VyKSB7CisgICAgICAgIG1IaXN0b3J5QnV0dG9uLnNldFRleHQoZ2V0Q29udGV4dCgpLmdldFN0cmluZyhSLnN0cmluZy5yZWNlbnRzX2hpc3RvcnlfbGFiZWxfZm9ybWF0LAorICAgICAgICAgICAgICAgIG1TdGFjay5nZXRIaXN0b3JpY2FsVGFza3MoKS5zaXplKCkpKTsKKyAgICAgICAgaWYgKG1IaXN0b3J5QnV0dG9uLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LklOVklTSUJMRSkgeworICAgICAgICAgICAgbUhpc3RvcnlCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgbUhpc3RvcnlCdXR0b24uc2V0QWxwaGEoMGYpOworICAgICAgICAgICAgcG9zdEhpZGVIaXN0b3J5QW5pbWF0aW9uVHJpZ2dlci5hZGRMYXN0RGVjcmVtZW50UnVubmFibGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgbUhpc3RvcnlCdXR0b24uYW5pbWF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFscGhhKDFmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogSGlkZXMgdGhlIGhpc3RvcnkgYnV0dG9uLgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBoaWRlSGlzdG9yeUJ1dHRvbihpbnQgZHVyYXRpb24pIHsKLSAgICAgICAgbUhpc3RvcnlCdXR0b24uYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLmFscGhhKDBmKQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgLndpdGhFbmRBY3Rpb24obmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUhpc3RvcnlCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KQotICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQotICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcigpOworICAgICAgICBoaWRlSGlzdG9yeUJ1dHRvbihkdXJhdGlvbiwgcG9zdEFuaW1hdGlvblRyaWdnZXIpOworICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5mbHVzaExhc3REZWNyZW1lbnRSdW5uYWJsZXMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGlkZUhpc3RvcnlCdXR0b24oaW50IGR1cmF0aW9uLAorICAgICAgICAgICAgZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIpIHsKKyAgICAgICAgaWYgKG1IaXN0b3J5QnV0dG9uLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpIHsKKyAgICAgICAgICAgIG1IaXN0b3J5QnV0dG9uLmFuaW1hdGUoKQorICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCisgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yKQorICAgICAgICAgICAgICAgICAgICAud2l0aEVuZEFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGlzdG9yeUJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0SGlkZVN0YWNrQW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCisgICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOworICAgICAgICAgICAgcG9zdEhpZGVTdGFja0FuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTYwNyw5ICs2NDEsNyBAQAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVWaXNpYmxlRG9ja1JlZ2lvbnMoVGFza1N0YWNrLkRvY2tTdGF0ZVtdIG5ld0RvY2tTdGF0ZXMsIGludCBvdmVycmlkZUFscGhhKSB7CiAgICAgICAgIEFycmF5U2V0PFRhc2tTdGFjay5Eb2NrU3RhdGU+IG5ld0RvY2tTdGF0ZXNTZXQgPSBuZXcgQXJyYXlTZXQ8PigpOwogICAgICAgICBpZiAobmV3RG9ja1N0YXRlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKFRhc2tTdGFjay5Eb2NrU3RhdGUgZG9ja1N0YXRlIDogbmV3RG9ja1N0YXRlcykgewotICAgICAgICAgICAgICAgIG5ld0RvY2tTdGF0ZXNTZXQuYWRkKGRvY2tTdGF0ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBDb2xsZWN0aW9ucy5hZGRBbGwobmV3RG9ja1N0YXRlc1NldCwgbmV3RG9ja1N0YXRlcyk7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChUYXNrU3RhY2suRG9ja1N0YXRlIGRvY2tTdGF0ZSA6IG1WaXNpYmxlRG9ja1N0YXRlcykgewogICAgICAgICAgICAgVGFza1N0YWNrLkRvY2tTdGF0ZS5WaWV3U3RhdGUgdmlld1N0YXRlID0gZG9ja1N0YXRlLnZpZXdTdGF0ZTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNWaWV3VG91Y2hIYW5kbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9SZWNlbnRzVmlld1RvdWNoSGFuZGxlci5qYXZhCmluZGV4IDI5MjAyOTUuLjQ3MzMzNGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1JlY2VudHNWaWV3VG91Y2hIYW5kbGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvUmVjZW50c1ZpZXdUb3VjaEhhbmRsZXIuamF2YQpAQCAtMjYsNyArMjYsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLmRyYWduZHJvcC5EcmFnRW5kRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuZHJhZ25kcm9wLkRyYWdTdGFydEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLmRyYWduZHJvcC5EcmFnU3RhcnRJbml0aWFsaXplRHJvcFRhcmdldHNFdmVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuUmVmZXJlbmNlQ291bnRlZFRyaWdnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlN5c3RlbVNlcnZpY2VzUHJveHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOwpAQCAtNTgsOSArNTcsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgUmVjZW50c1ZpZXdUb3VjaEhhbmRsZXIgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSZWNlbnRzVmlld1RvdWNoSGFuZGxlciI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCiAgICAgcHJpdmF0ZSBSZWNlbnRzVmlldyBtUnY7CiAKICAgICBwcml2YXRlIFRhc2sgbURyYWdUYXNrOwpAQCAtMTI4LDcgKzEyNCw2IEBACiAgICAgICAgIG1UYXNrVmlldy5zZXRUcmFuc2xhdGlvblgoeCk7CiAgICAgICAgIG1UYXNrVmlldy5zZXRUcmFuc2xhdGlvblkoeSk7CiAKLSAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7CiAgICAgICAgIGlmICghc3NwLmhhc0RvY2tlZFRhc2soKSkgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBkb2NrIHN0YXRlIGRyb3AgdGFyZ2V0cyAodGhlc2UgdGFrZSBwcmlvcml0eSkKICAgICAgICAgICAgIFRhc2tTdGFjay5Eb2NrU3RhdGVbXSBkb2NrU3RhdGVzID0gZ2V0RG9ja1N0YXRlc0ZvckN1cnJlbnRPcmllbnRhdGlvbigpOwpAQCAtMTUwLDcgKzE0NSw2IEBACiAKICAgICAvKioKICAgICAgKiBIYW5kbGVzIGRyYWdnaW5nIHRvdWNoIGV2ZW50cwotICAgICAqIEBwYXJhbSBldgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBoYW5kbGVUb3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2KSB7CiAgICAgICAgIGludCBhY3Rpb24gPSBldi5nZXRBY3Rpb24oKTsKQEAgLTE4OCwxMiArMTgyLDggQEAKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOgogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMOiB7CiAgICAgICAgICAgICAgICAgaWYgKG1EcmFnZ2luZykgewotICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IG5ldyBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUnYuZ2V0Q29udGV4dCgpLCBudWxsLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7CiAgICAgICAgICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBEcmFnRW5kRXZlbnQobURyYWdUYXNrLCBtVGFza1ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxhc3REcm9wVGFyZ2V0LCBwb3N0QW5pbWF0aW9uVHJpZ2dlcikpOwotICAgICAgICAgICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGFzdERyb3BUYXJnZXQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvU3lzdGVtQmFyU2NyaW1WaWV3cy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvU3lzdGVtQmFyU2NyaW1WaWV3cy5qYXZhCmluZGV4IDVhMDllZTQuLjk2MThmMjEyZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvU3lzdGVtQmFyU2NyaW1WaWV3cy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1N5c3RlbUJhclNjcmltVmlld3MuamF2YQpAQCAtMjIsOSArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZTsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNDb25maWd1cmF0aW9uOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkRpc21pc3NSZWNlbnRzVG9Ib21lQW5pbWF0aW9uU3RhcnRlZDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5FbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudDsKIApAQCAtNjIsMTMgKzU5LDEyIEBACiAgICAgICogUHJlcGFyZXMgdGhlIHNjcmltIHZpZXdzIGZvciBhbmltYXRpbmcgd2hlbiBlbnRlcmluZyBSZWNlbnRzLiBUaGlzIHdpbGwgYmUgY2FsbGVkIGJlZm9yZQogICAgICAqIHRoZSBmaXJzdCBkcmF3LgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByZXBhcmVFbnRlclJlY2VudHNBbmltYXRpb24oKSB7Ci0gICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOwotICAgICAgICBSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSBsYXVuY2hTdGF0ZSA9IGNvbmZpZy5nZXRMYXVuY2hTdGF0ZSgpOwotICAgICAgICBtSGFzTmF2QmFyU2NyaW0gPSBsYXVuY2hTdGF0ZS5oYXNOYXZCYXJTY3JpbSgpOwotICAgICAgICBtU2hvdWxkQW5pbWF0ZU5hdkJhclNjcmltID0gbGF1bmNoU3RhdGUuc2hvdWxkQW5pbWF0ZU5hdkJhclNjcmltKCk7Ci0gICAgICAgIG1IYXNTdGF0dXNCYXJTY3JpbSA9IGxhdW5jaFN0YXRlLmhhc1N0YXR1c0JhclNjcmltKCk7Ci0gICAgICAgIG1TaG91bGRBbmltYXRlU3RhdHVzQmFyU2NyaW0gPSBsYXVuY2hTdGF0ZS5zaG91bGRBbmltYXRlU3RhdHVzQmFyU2NyaW0oKTsKKyAgICBwdWJsaWMgdm9pZCBwcmVwYXJlRW50ZXJSZWNlbnRzQW5pbWF0aW9uKGJvb2xlYW4gaGFzU3RhdHVzQmFyU2NyaW0sIGJvb2xlYW4gYW5pbWF0ZVN0YXR1c0JhclNjcmltLAorICAgICAgICAgICAgYm9vbGVhbiBoYXNOYXZCYXJTY3JpbSwgYm9vbGVhbiBhbmltYXRlTmF2QmFyU2NyaW0pIHsKKyAgICAgICAgbUhhc05hdkJhclNjcmltID0gaGFzU3RhdHVzQmFyU2NyaW07CisgICAgICAgIG1TaG91bGRBbmltYXRlU3RhdHVzQmFyU2NyaW0gPSBhbmltYXRlU3RhdHVzQmFyU2NyaW07CisgICAgICAgIG1IYXNTdGF0dXNCYXJTY3JpbSA9IGhhc05hdkJhclNjcmltOworICAgICAgICBtU2hvdWxkQW5pbWF0ZU5hdkJhclNjcmltID0gYW5pbWF0ZU5hdkJhclNjcmltOwogCiAgICAgICAgIG1OYXZCYXJTY3JpbVZpZXcuc2V0VmlzaWJpbGl0eShtSGFzTmF2QmFyU2NyaW0gJiYgIW1TaG91bGRBbmltYXRlTmF2QmFyU2NyaW0gPwogICAgICAgICAgICAgICAgIFZpZXcuVklTSUJMRSA6IFZpZXcuSU5WSVNJQkxFKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja0FuaW1hdGlvbkhlbHBlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrQW5pbWF0aW9uSGVscGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhMzVkZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja0FuaW1hdGlvbkhlbHBlci5qYXZhCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzOworCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JMaXN0ZW5lckFkYXB0ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0RjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuUmVmZXJlbmNlQ291bnRlZFRyaWdnZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5QaG9uZVN0YXR1c0JhcjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKioKKyAqIEEgaGVscGVyIGNsYXNzIHRvIGNyZWF0ZSB0YXNrIHZpZXcgYW5pbWF0aW9ucyBmb3Ige0BsaW5rIFRhc2tWaWV3fXMgaW4gYSB7QGxpbmsgVGFza1N0YWNrVmlld30sCisgKiBidXQgbm90IHRoZSBjb250ZW50cyBvZiB0aGUge0BsaW5rIFRhc2tWaWV3fXMuCisgKi8KK3B1YmxpYyBjbGFzcyBUYXNrU3RhY2tBbmltYXRpb25IZWxwZXIgeworCisgICAgLyoqCisgICAgICogQ2FsbGJhY2tzIGZyb20gdGhlIGhlbHBlciB0byBjb29yZGluYXRlIHZpZXctY29udGVudCBhbmltYXRpb25zIHdpdGggdmlldyBhbmltYXRpb25zLgorICAgICAqLworICAgIHB1YmxpYyBpbnRlcmZhY2UgQ2FsbGJhY2tzIHsKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxiYWNrIHRvIHByZXBhcmUgZm9yIHRoZSBzdGFydCBhbmltYXRpb24gZm9yIHRoZSBsYXVuY2ggdGFyZ2V0IHtAbGluayBUYXNrVmlld30uCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uUHJlcGFyZUxhdW5jaFRhcmdldEZvckVudGVyQW5pbWF0aW9uKCk7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIENhbGxiYWNrIHRvIHN0YXJ0IHRoZSBhbmltYXRpb24gZm9yIHRoZSBsYXVuY2ggdGFyZ2V0IHtAbGluayBUYXNrVmlld30uCisgICAgICAgICAqLworICAgICAgICB2b2lkIG9uU3RhcnRMYXVuY2hUYXJnZXRFbnRlckFuaW1hdGlvbihpbnQgZHVyYXRpb24sIGJvb2xlYW4gc2NyZWVuUGlubmluZ0VuYWJsZWQsCisgICAgICAgICAgICAgICAgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIpOworCisgICAgICAgIC8qKgorICAgICAgICAgKiBDYWxsYmFjayB0byBzdGFydCB0aGUgYW5pbWF0aW9uIGZvciB0aGUgbGF1bmNoIHRhcmdldCB7QGxpbmsgVGFza1ZpZXd9IHdoZW4gaXQgaXMKKyAgICAgICAgICogbGF1bmNoZWQgZnJvbSBSZWNlbnRzLgorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCBvblN0YXJ0TGF1bmNoVGFyZ2V0TGF1bmNoQW5pbWF0aW9uKGludCBkdXJhdGlvbiwgYm9vbGVhbiBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkLAorICAgICAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIFRhc2tTdGFja1ZpZXcgbVN0YWNrVmlldzsKKworICAgIHByaXZhdGUgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByaXZhdGUgSW50ZXJwb2xhdG9yIG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3I7CisgICAgcHJpdmF0ZSBJbnRlcnBvbGF0b3IgbVF1aW50T3V0SW50ZXJwb2xhdG9yOworCisgICAgcHJpdmF0ZSBUYXNrVmlld1RyYW5zZm9ybSBtVG1wVHJhbnNmb3JtID0gbmV3IFRhc2tWaWV3VHJhbnNmb3JtKCk7CisKKyAgICBwdWJsaWMgVGFza1N0YWNrQW5pbWF0aW9uSGVscGVyKENvbnRleHQgY29udGV4dCwgVGFza1N0YWNrVmlldyBzdGFja1ZpZXcpIHsKKyAgICAgICAgbVN0YWNrVmlldyA9IHN0YWNrVmlldzsKKyAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKGNvbnRleHQsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlcnBvbGF0b3IuZmFzdF9vdXRfc2xvd19pbik7CisgICAgICAgIG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKGNvbnRleHQsCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlcnBvbGF0b3IuZmFzdF9vdXRfbGluZWFyX2luKTsKKyAgICAgICAgbVF1aW50T3V0SW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjb250ZXh0LAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmRlY2VsZXJhdGVfcXVpbnQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByZXBhcmVzIHRoZSBzdGFjayB2aWV3cyBhbmQgcHV0cyB0aGVtIGluIHRoZWlyIGluaXRpYWwgYW5pbWF0aW9uIHN0YXRlIHdoaWxlIHZpc2libGUsIGJlZm9yZQorICAgICAqIHRoZSBpbi1hcHAgZW50ZXIgYW5pbWF0aW9ucyBzdGFydCAoYWZ0ZXIgdGhlIHdpbmRvdy10cmFuc2l0aW9uIGNvbXBsZXRlcykuCisgICAgICovCisgICAgcHVibGljIHZvaWQgcHJlcGFyZUZvckVudGVyQW5pbWF0aW9uKCkgeworICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBjb25maWcuZ2V0TGF1bmNoU3RhdGUoKTsKKyAgICAgICAgUmVzb3VyY2VzIHJlcyA9IG1TdGFja1ZpZXcuZ2V0UmVzb3VyY2VzKCk7CisKKyAgICAgICAgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIHN0YWNrTGF5b3V0ID0gbVN0YWNrVmlldy5nZXRTdGFja0FsZ29yaXRobSgpOworICAgICAgICBUYXNrU3RhY2tWaWV3U2Nyb2xsZXIgc3RhY2tTY3JvbGxlciA9IG1TdGFja1ZpZXcuZ2V0U2Nyb2xsZXIoKTsKKyAgICAgICAgVGFza1N0YWNrIHN0YWNrID0gbVN0YWNrVmlldy5nZXRTdGFjaygpOworICAgICAgICBUYXNrIGxhdW5jaFRhcmdldFRhc2sgPSBzdGFjay5nZXRMYXVuY2hUYXJnZXQoKTsKKworICAgICAgICAvLyBCcmVhayBlYXJseSBpZiB0aGVyZSBhcmUgbm8gdGFza3MKKyAgICAgICAgaWYgKHN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IG9mZnNjcmVlblkgPSBzdGFja0xheW91dC5tU3RhY2tSZWN0LmJvdHRvbTsKKyAgICAgICAgaW50IHRhc2tWaWV3QWZmaWxpYXRlR3JvdXBFbnRlck9mZnNldCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgUi5kaW1lbi5yZWNlbnRzX3Rhc2tfdmlld19hZmZpbGlhdGVfZ3JvdXBfZW50ZXJfb2Zmc2V0KTsKKworICAgICAgICAvLyBQcmVwYXJlIGVhY2ggb2YgdGhlIHRhc2sgdmlld3MgZm9yIHRoZWlyIGVudGVyIGFuaW1hdGlvbiBmcm9tIGZyb250IHRvIGJhY2sKKyAgICAgICAgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gbVN0YWNrVmlldy5nZXRUYXNrVmlld3MoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHRhc2tWaWV3cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOworICAgICAgICAgICAgYm9vbGVhbiBjdXJyZW50VGFza09jY2x1ZGVzTGF1bmNoVGFyZ2V0ID0gKGxhdW5jaFRhcmdldFRhc2sgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBsYXVuY2hUYXJnZXRUYXNrLmdyb3VwLmlzVGFza0Fib3ZlVGFzayh0YXNrLCBsYXVuY2hUYXJnZXRUYXNrKSk7CisgICAgICAgICAgICBib29sZWFuIGhpZGVUYXNrID0gKGxhdW5jaFRhcmdldFRhc2sgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBsYXVuY2hUYXJnZXRUYXNrLmlzRnJlZWZvcm1UYXNrKCkgJiYgdGFzay5pc0ZyZWVmb3JtVGFzaygpKTsKKworICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHRyYW5zZm9ybSBmb3IgdGhlIHRhc2ssIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBwb3NpdGlvbiBpdCBvZmZzY3JlZW4KKyAgICAgICAgICAgIHN0YWNrTGF5b3V0LmdldFN0YWNrVHJhbnNmb3JtKHRhc2ssIHN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSwgbVRtcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgbnVsbCk7CisKKyAgICAgICAgICAgIGlmIChoaWRlVGFzaykgeworICAgICAgICAgICAgICAgIHR2LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTdGF0ZS5sYXVuY2hlZEhhc0NvbmZpZ3VyYXRpb25DaGFuZ2VkKSB7CisgICAgICAgICAgICAgICAgLy8gSnVzdCBsb2FkIHRoZSB2aWV3cyBhcy1pcworICAgICAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTdGF0ZS5sYXVuY2hlZEZyb21BcHBXaXRoVGh1bWJuYWlsKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhc2suaXNMYXVuY2hUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdHYub25QcmVwYXJlTGF1bmNoVGFyZ2V0Rm9yRW50ZXJBbmltYXRpb24oKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUYXNrT2NjbHVkZXNMYXVuY2hUYXJnZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFzayB2aWV3IHNsaWdodGx5IGxvd2VyIHNvIHdlIGNhbiBhbmltYXRlIGl0IGluCisgICAgICAgICAgICAgICAgICAgIFJlY3RGIGJvdW5kcyA9IG5ldyBSZWN0RihtVG1wVHJhbnNmb3JtLnJlY3QpOworICAgICAgICAgICAgICAgICAgICBib3VuZHMub2Zmc2V0KDAsIHRhc2tWaWV3QWZmaWxpYXRlR3JvdXBFbnRlck9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHR2LnNldEFscGhhKDBmKTsKKyAgICAgICAgICAgICAgICAgICAgdHYuc2V0TGVmdFRvcFJpZ2h0Qm90dG9tKChpbnQpIGJvdW5kcy5sZWZ0LCAoaW50KSBib3VuZHMudG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGJvdW5kcy5yaWdodCwgKGludCkgYm91bmRzLmJvdHRvbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTdGF0ZS5sYXVuY2hlZEZyb21Ib21lKSB7CisgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgdGFzayB2aWV3IG9mZiBzY3JlZW4gKGJlbG93KSBzbyB3ZSBjYW4gYW5pbWF0ZSBpdCBpbgorICAgICAgICAgICAgICAgIFJlY3RGIGJvdW5kcyA9IG5ldyBSZWN0RihtVG1wVHJhbnNmb3JtLnJlY3QpOworICAgICAgICAgICAgICAgIGJvdW5kcy5vZmZzZXQoMCwgb2Zmc2NyZWVuWSk7CisgICAgICAgICAgICAgICAgdHYuc2V0TGVmdFRvcFJpZ2h0Qm90dG9tKChpbnQpIGJvdW5kcy5sZWZ0LCAoaW50KSBib3VuZHMudG9wLCAoaW50KSBib3VuZHMucmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBib3VuZHMuYm90dG9tKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUgaW4tYXBwIGVudGVyIGFuaW1hdGlvbiwgd2hpY2ggYW5pbWF0ZXMgdGhlIHtAbGluayBUYXNrVmlld31zIHRvIHRoZWlyIGZpbmFsIHBsYWNlcworICAgICAqIGRlcGVuZGluZyBvbiBob3cgUmVjZW50cyB3YXMgdHJpZ2dlcmVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0YXJ0RW50ZXJBbmltYXRpb24oZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIpIHsKKyAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7CisgICAgICAgIFJlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlIGxhdW5jaFN0YXRlID0gY29uZmlnLmdldExhdW5jaFN0YXRlKCk7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBtU3RhY2tWaWV3LmdldFJlc291cmNlcygpOworCisgICAgICAgIFRhc2tTdGFja0xheW91dEFsZ29yaXRobSBzdGFja0xheW91dCA9IG1TdGFja1ZpZXcuZ2V0U3RhY2tBbGdvcml0aG0oKTsKKyAgICAgICAgVGFza1N0YWNrVmlld1Njcm9sbGVyIHN0YWNrU2Nyb2xsZXIgPSBtU3RhY2tWaWV3LmdldFNjcm9sbGVyKCk7CisgICAgICAgIFRhc2tTdGFjayBzdGFjayA9IG1TdGFja1ZpZXcuZ2V0U3RhY2soKTsKKyAgICAgICAgVGFzayBsYXVuY2hUYXJnZXRUYXNrID0gc3RhY2suZ2V0TGF1bmNoVGFyZ2V0KCk7CisKKyAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzCisgICAgICAgIGlmIChzdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCB0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uID0gcmVzLmdldEludGVnZXIoCisgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfdGFza19lbnRlcl9mcm9tX2FwcF9kdXJhdGlvbik7CisgICAgICAgIGludCB0YXNrVmlld0VudGVyRnJvbUhvbWVEdXJhdGlvbiA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZW50ZXJfZnJvbV9ob21lX2R1cmF0aW9uKTsKKyAgICAgICAgaW50IHRhc2tWaWV3RW50ZXJGcm9tSG9tZVN0YWdnZXJEZWxheSA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZW50ZXJfZnJvbV9ob21lX3N0YWdnZXJfZGVsYXkpOworCisgICAgICAgIC8vIENyZWF0ZSBlbnRlciBhbmltYXRpb25zIGZvciBlYWNoIG9mIHRoZSB2aWV3cyBmcm9tIGZyb250IHRvIGJhY2sKKyAgICAgICAgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gbVN0YWNrVmlldy5nZXRUYXNrVmlld3MoKTsKKyAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gdGFza1ZpZXdDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7CisgICAgICAgICAgICBUYXNrIHRhc2sgPSB0di5nZXRUYXNrKCk7CisgICAgICAgICAgICBib29sZWFuIGN1cnJlbnRUYXNrT2NjbHVkZXNMYXVuY2hUYXJnZXQgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChsYXVuY2hUYXJnZXRUYXNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VGFza09jY2x1ZGVzTGF1bmNoVGFyZ2V0ID0gbGF1bmNoVGFyZ2V0VGFzay5ncm91cC5pc1Rhc2tBYm92ZVRhc2sodGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaFRhcmdldFRhc2spOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZvciB0aGUgdGFzaywgd2hpY2ggd2lsbCBiZSB1cGRhdGVkIHRvIHRoZSBmaW5hbCB0cmFuc2Zvcm0KKyAgICAgICAgICAgIC8vIHRvIGFuaW1hdGUgdG8gZGVwZW5kaW5nIG9uIGhvdyByZWNlbnRzIHdhcyBpbnZva2VkCisgICAgICAgICAgICBzdGFja0xheW91dC5nZXRTdGFja1RyYW5zZm9ybSh0YXNrLCBzdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksIG1UbXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworCisgICAgICAgICAgICBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRGcm9tQXBwV2l0aFRodW1ibmFpbCkgeworICAgICAgICAgICAgICAgIGlmICh0YXNrLmlzTGF1bmNoVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHR2Lm9uU3RhcnRMYXVuY2hUYXJnZXRFbnRlckFuaW1hdGlvbih0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1ZpZXcubVNjcmVlblBpbm5pbmdFbmFibGVkLCBwb3N0QW5pbWF0aW9uVHJpZ2dlcik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQW5pbWF0ZSB0aGUgdGFzayB1cCBpZiBpdCB3YXMgb2NjbHVkaW5nIHRoZSBsYXVuY2ggdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGFza09jY2x1ZGVzTGF1bmNoVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBUYXNrVmlld0FuaW1hdGlvbiB0YXNrQW5pbWF0aW9uID0gbmV3IFRhc2tWaWV3QW5pbWF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uLCBQaG9uZVN0YXR1c0Jhci5BTFBIQV9JTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZGVjcmVtZW50T25BbmltYXRpb25FbmQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1ZpZXcudXBkYXRlVGFza1ZpZXdUb1RyYW5zZm9ybSh0diwgbVRtcFRyYW5zZm9ybSwgdGFza0FuaW1hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRGcm9tSG9tZSkgeworICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIHRhc2tzIHVwCisgICAgICAgICAgICAgICAgaW50IGZyb250SW5kZXggPSAodGFza1ZpZXdDb3VudCAtIGkgLSAxKTsKKyAgICAgICAgICAgICAgICBpbnQgZGVsYXkgPSBmcm9udEluZGV4ICogdGFza1ZpZXdFbnRlckZyb21Ib21lU3RhZ2dlckRlbGF5OworICAgICAgICAgICAgICAgIGludCBkdXJhdGlvbiA9IHRhc2tWaWV3RW50ZXJGcm9tSG9tZUR1cmF0aW9uICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb250SW5kZXggKiB0YXNrVmlld0VudGVyRnJvbUhvbWVTdGFnZ2VyRGVsYXk7CisKKyAgICAgICAgICAgICAgICBUYXNrVmlld0FuaW1hdGlvbiB0YXNrQW5pbWF0aW9uID0gbmV3IFRhc2tWaWV3QW5pbWF0aW9uKGRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24sIG1RdWludE91dEludGVycG9sYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpOworICAgICAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworICAgICAgICAgICAgICAgIG1TdGFja1ZpZXcudXBkYXRlVGFza1ZpZXdUb1RyYW5zZm9ybSh0diwgbVRtcFRyYW5zZm9ybSwgdGFza0FuaW1hdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgYW4gaW4tYXBwIGFuaW1hdGlvbiB0byBoaWRlIGFsbCB0aGUgdGFzayB2aWV3cyBzbyB0aGF0IHdlIGNhbiB0cmFuc2l0aW9uIGJhY2sgaG9tZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydEV4aXRUb0hvbWVBbmltYXRpb24oYm9vbGVhbiBhbmltYXRlZCwKKyAgICAgICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyKSB7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBtU3RhY2tWaWV3LmdldFJlc291cmNlcygpOworICAgICAgICBUYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0gc3RhY2tMYXlvdXQgPSBtU3RhY2tWaWV3LmdldFN0YWNrQWxnb3JpdGhtKCk7CisgICAgICAgIFRhc2tTdGFja1ZpZXdTY3JvbGxlciBzdGFja1Njcm9sbGVyID0gbVN0YWNrVmlldy5nZXRTY3JvbGxlcigpOworICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tWaWV3LmdldFN0YWNrKCk7CisKKyAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgdGhlcmUgYXJlIG5vIHRhc2tzCisgICAgICAgIGlmIChzdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBvZmZzY3JlZW5ZID0gc3RhY2tMYXlvdXQubVN0YWNrUmVjdC5ib3R0b207CisgICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZXhpdF90b19ob21lX2R1cmF0aW9uKTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIGFuaW1hdGlvbnMgZm9yIGVhY2ggb2YgdGhlIHRhc2tzCisgICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IG1TdGFja1ZpZXcuZ2V0VGFza1ZpZXdzKCk7CisgICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrVmlld0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFRhc2tWaWV3IHR2ID0gdGFza1ZpZXdzLmdldChpKTsKKyAgICAgICAgICAgIFRhc2sgdGFzayA9IHR2LmdldFRhc2soKTsKKyAgICAgICAgICAgIFRhc2tWaWV3QW5pbWF0aW9uIHRhc2tBbmltYXRpb24gPSBuZXcgVGFza1ZpZXdBbmltYXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkID8gdGFza1ZpZXdFeGl0VG9Ib21lRHVyYXRpb24gOiAwLCBtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yLAorICAgICAgICAgICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnRPbkFuaW1hdGlvbkVuZCgpKTsKKyAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworCisgICAgICAgICAgICBzdGFja0xheW91dC5nZXRTdGFja1RyYW5zZm9ybSh0YXNrLCBzdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksIG1UbXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbVRtcFRyYW5zZm9ybS5yZWN0Lm9mZnNldCgwLCBvZmZzY3JlZW5ZKTsKKyAgICAgICAgICAgIG1TdGFja1ZpZXcudXBkYXRlVGFza1ZpZXdUb1RyYW5zZm9ybSh0diwgbVRtcFRyYW5zZm9ybSwgdGFza0FuaW1hdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIGxhdW5jaGluZyB0YXNrIHZpZXcsIGhpZGluZyBhbnkgdGFza3MgdGhhdCBtaWdodCBvY2NsdWRlIHRoZQorICAgICAqIHdpbmRvdyB0cmFuc2l0aW9uIGZvciB0aGUgbGF1bmNoaW5nIHRhc2suCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RhcnRMYXVuY2hUYXNrQW5pbWF0aW9uKFRhc2tWaWV3IGxhdW5jaGluZ1Rhc2tWaWV3LCBib29sZWFuIHNjcmVlblBpbm5pbmdSZXF1ZXN0ZWQsCisgICAgICAgICAgICBmaW5hbCBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlcikgeworICAgICAgICBSZXNvdXJjZXMgcmVzID0gbVN0YWNrVmlldy5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIHN0YWNrTGF5b3V0ID0gbVN0YWNrVmlldy5nZXRTdGFja0FsZ29yaXRobSgpOworICAgICAgICBUYXNrU3RhY2tWaWV3U2Nyb2xsZXIgc3RhY2tTY3JvbGxlciA9IG1TdGFja1ZpZXcuZ2V0U2Nyb2xsZXIoKTsKKworICAgICAgICBpbnQgdGFza1ZpZXdFeGl0VG9BcHBEdXJhdGlvbiA9IHJlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZXhpdF90b19hcHBfZHVyYXRpb24pOworICAgICAgICBpbnQgdGFza1ZpZXdBZmZpbGlhdGVHcm91cEVudGVyT2Zmc2V0ID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X2FmZmlsaWF0ZV9ncm91cF9lbnRlcl9vZmZzZXQpOworCisgICAgICAgIFRhc2sgbGF1bmNoaW5nVGFzayA9IGxhdW5jaGluZ1Rhc2tWaWV3LmdldFRhc2soKTsKKyAgICAgICAgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gbVN0YWNrVmlldy5nZXRUYXNrVmlld3MoKTsKKyAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhc2tWaWV3Q291bnQ7IGkrKykgeworICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOworICAgICAgICAgICAgYm9vbGVhbiBjdXJyZW50VGFza09jY2x1ZGVzTGF1bmNoVGFyZ2V0ID0gKGxhdW5jaGluZ1Rhc2sgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBsYXVuY2hpbmdUYXNrLmdyb3VwLmlzVGFza0Fib3ZlVGFzayh0YXNrLCBsYXVuY2hpbmdUYXNrKSk7CisKKyAgICAgICAgICAgIGlmICh0diA9PSBsYXVuY2hpbmdUYXNrVmlldykgeworICAgICAgICAgICAgICAgIHR2LnNldENsaXBWaWV3SW5TdGFjayhmYWxzZSk7CisgICAgICAgICAgICAgICAgdHYub25TdGFydExhdW5jaFRhcmdldExhdW5jaEFuaW1hdGlvbih0YXNrVmlld0V4aXRUb0FwcER1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyZWVuUGlubmluZ1JlcXVlc3RlZCwgcG9zdEFuaW1hdGlvblRyaWdnZXIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGFza09jY2x1ZGVzTGF1bmNoVGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgLy8gQW5pbWF0ZSB0aGlzIHRhc2sgb3V0IG9mIHZpZXcKKyAgICAgICAgICAgICAgICBUYXNrVmlld0FuaW1hdGlvbiB0YXNrQW5pbWF0aW9uID0gbmV3IFRhc2tWaWV3QW5pbWF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgdGFza1ZpZXdFeGl0VG9BcHBEdXJhdGlvbiwgbUZhc3RPdXRMaW5lYXJJbkludGVycG9sYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpOworICAgICAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworCisgICAgICAgICAgICAgICAgc3RhY2tMYXlvdXQuZ2V0U3RhY2tUcmFuc2Zvcm0odGFzaywgc3RhY2tTY3JvbGxlci5nZXRTdGFja1Njcm9sbCgpLCBtVG1wVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCk7CisgICAgICAgICAgICAgICAgbVRtcFRyYW5zZm9ybS5hbHBoYSA9IDBmOworICAgICAgICAgICAgICAgIG1UbXBUcmFuc2Zvcm0ucmVjdC5vZmZzZXQoMCwgdGFza1ZpZXdBZmZpbGlhdGVHcm91cEVudGVyT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBtU3RhY2tWaWV3LnVwZGF0ZVRhc2tWaWV3VG9UcmFuc2Zvcm0odHYsIG1UbXBUcmFuc2Zvcm0sIHRhc2tBbmltYXRpb24pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnRzIHRoZSBkZWxldGUgYW5pbWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHtAbGluayBUYXNrVmlld30uCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RhcnREZWxldGVUYXNrQW5pbWF0aW9uKFRhc2sgZGVsZXRlVGFzaywgZmluYWwgVGFza1ZpZXcgZGVsZXRlVGFza1ZpZXcsCisgICAgICAgICAgICBmaW5hbCBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlcikgeworICAgICAgICBSZXNvdXJjZXMgcmVzID0gbVN0YWNrVmlldy5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIHN0YWNrTGF5b3V0ID0gbVN0YWNrVmlldy5nZXRTdGFja0FsZ29yaXRobSgpOworICAgICAgICBUYXNrU3RhY2tWaWV3U2Nyb2xsZXIgc3RhY2tTY3JvbGxlciA9IG1TdGFja1ZpZXcuZ2V0U2Nyb2xsZXIoKTsKKworICAgICAgICBpbnQgdGFza1ZpZXdSZW1vdmVBbmltRHVyYXRpb24gPSByZXMuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c19hbmltYXRlX3Rhc2tfdmlld19yZW1vdmVfZHVyYXRpb24pOworICAgICAgICBpbnQgdGFza1ZpZXdSZW1vdmVBbmltVHJhbnNsYXRpb25YUHggPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgIFIuZGltZW4ucmVjZW50c190YXNrX3ZpZXdfcmVtb3ZlX2FuaW1fdHJhbnNsYXRpb25feCk7CisKKyAgICAgICAgLy8gRGlzYWJsaW5nIGNsaXBwaW5nIHdpdGggdGhlIHN0YWNrIHdoaWxlIHRoZSB2aWV3IGlzIGFuaW1hdGluZyBhd2F5CisgICAgICAgIGRlbGV0ZVRhc2tWaWV3LnNldENsaXBWaWV3SW5TdGFjayhmYWxzZSk7CisKKyAgICAgICAgLy8gQ29tcG9zZSB0aGUgbmV3IGFuaW1hdGlvbiBhbmQgdHJhbnNmb3JtIGFuZCBzdGFyIHRoZSBhbmltYXRpb24KKyAgICAgICAgVGFza1ZpZXdBbmltYXRpb24gdGFza0FuaW1hdGlvbiA9IG5ldyBUYXNrVmlld0FuaW1hdGlvbih0YXNrVmlld1JlbW92ZUFuaW1EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICBQaG9uZVN0YXR1c0Jhci5BTFBIQV9PVVQsIG5ldyBBbmltYXRvckxpc3RlbmVyQWRhcHRlcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25FbmQoQW5pbWF0b3IgYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZGVjcmVtZW50KCk7CisKKyAgICAgICAgICAgICAgICAvLyBSZS1lbmFibGUgY2xpcHBpbmcgd2l0aCB0aGUgc3RhY2sgKHdlIHdpbGwgcmV1c2UgdGhpcyB2aWV3KQorICAgICAgICAgICAgICAgIGRlbGV0ZVRhc2tWaWV3LnNldENsaXBWaWV3SW5TdGFjayh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworCisgICAgICAgIHN0YWNrTGF5b3V0LmdldFN0YWNrVHJhbnNmb3JtKGRlbGV0ZVRhc2ssIHN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSwgbVRtcFRyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICBudWxsKTsKKyAgICAgICAgbVRtcFRyYW5zZm9ybS5hbHBoYSA9IDBmOworICAgICAgICBtVG1wVHJhbnNmb3JtLnJlY3Qub2Zmc2V0KHRhc2tWaWV3UmVtb3ZlQW5pbVRyYW5zbGF0aW9uWFB4LCAwKTsKKyAgICAgICAgbVN0YWNrVmlldy51cGRhdGVUYXNrVmlld1RvVHJhbnNmb3JtKGRlbGV0ZVRhc2tWaWV3LCBtVG1wVHJhbnNmb3JtLCB0YXNrQW5pbWF0aW9uKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydHMgdGhlIGFuaW1hdGlvbiB0byBoaWRlIHRoZSB7QGxpbmsgVGFza1ZpZXd9cyB3aGVuIHRoZSBoaXN0b3J5IGlzIHNob3duLiAgVGhlIGhpc3RvcnkKKyAgICAgKiB2aWV3J3MgYW5pbWF0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgYWxsIHRoZSB7QGxpbmsgVGFza1ZpZXd9cyBhcmUgZmluaXNoZWQgYW5pbWF0aW5nLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0YXJ0U2hvd0hpc3RvcnlBbmltYXRpb24oUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIpIHsKKyAgICAgICAgUmVzb3VyY2VzIHJlcyA9IG1TdGFja1ZpZXcuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIFRhc2tTdGFja0xheW91dEFsZ29yaXRobSBzdGFja0xheW91dCA9IG1TdGFja1ZpZXcuZ2V0U3RhY2tBbGdvcml0aG0oKTsKKyAgICAgICAgVGFza1N0YWNrVmlld1Njcm9sbGVyIHN0YWNrU2Nyb2xsZXIgPSBtU3RhY2tWaWV3LmdldFNjcm9sbGVyKCk7CisKKyAgICAgICAgaW50IGhpc3RvcnlUcmFuc2l0aW9uRHVyYXRpb24gPSByZXMuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c19oaXN0b3J5X3RyYW5zaXRpb25fZHVyYXRpb24pOworCisgICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IG1TdGFja1ZpZXcuZ2V0VGFza1ZpZXdzKCk7CisgICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHRhc2tWaWV3Q291bnQgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOworICAgICAgICAgICAgVGFza1ZpZXdBbmltYXRpb24gdGFza0FuaW1hdGlvbiA9IG5ldyBUYXNrVmlld0FuaW1hdGlvbigKKyAgICAgICAgICAgICAgICAgICAgaGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbiwgUGhvbmVTdGF0dXNCYXIuQUxQSEFfT1VULAorICAgICAgICAgICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnRPbkFuaW1hdGlvbkVuZCgpKTsKKyAgICAgICAgICAgIHBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOworCisgICAgICAgICAgICBzdGFja0xheW91dC5nZXRTdGFja1RyYW5zZm9ybSh0YXNrLCBzdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksIG1UbXBUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgIG51bGwpOworICAgICAgICAgICAgbVRtcFRyYW5zZm9ybS5hbHBoYSA9IDBmOworICAgICAgICAgICAgbVN0YWNrVmlldy51cGRhdGVUYXNrVmlld1RvVHJhbnNmb3JtKHR2LCBtVG1wVHJhbnNmb3JtLCB0YXNrQW5pbWF0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyB0aGUgYW5pbWF0aW9uIHRvIHNob3cgdGhlIHtAbGluayBUYXNrVmlld31zIHdoZW4gdGhlIGhpc3RvcnkgaXMgaGlkZGVuLiAgVGhlCisgICAgICoge0BsaW5rIFRhc2tWaWV3fSBhbmltYXRpb25zIHdpbGwgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGhpc3RvcnkgdmlldyBoYXMgYmVlbiBhbmltYXRlZCBhd2F5LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0YXJ0SGlkZUhpc3RvcnlBbmltYXRpb24oZmluYWwgUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgcG9zdEFuaW1hdGlvblRyaWdnZXIpIHsKKyAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IG1TdGFja1ZpZXcuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgIGZpbmFsIFRhc2tTdGFja0xheW91dEFsZ29yaXRobSBzdGFja0xheW91dCA9IG1TdGFja1ZpZXcuZ2V0U3RhY2tBbGdvcml0aG0oKTsKKyAgICAgICAgZmluYWwgVGFza1N0YWNrVmlld1Njcm9sbGVyIHN0YWNrU2Nyb2xsZXIgPSBtU3RhY2tWaWV3LmdldFNjcm9sbGVyKCk7CisKKyAgICAgICAgZmluYWwgaW50IGhpc3RvcnlUcmFuc2l0aW9uRHVyYXRpb24gPSByZXMuZ2V0SW50ZWdlcigKKyAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c19oaXN0b3J5X3RyYW5zaXRpb25fZHVyYXRpb24pOworCisgICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IG1TdGFja1ZpZXcuZ2V0VGFza1ZpZXdzKCk7CisgICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IHRhc2tWaWV3Q291bnQgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgZmluYWwgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgIFRhc2tWaWV3QW5pbWF0aW9uIHRhc2tBbmltYXRpb24gPSBuZXcgVGFza1ZpZXdBbmltYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdG9yeVRyYW5zaXRpb25EdXJhdGlvbiwgUGhvbmVTdGF0dXNCYXIuQUxQSEFfSU4pOworICAgICAgICAgICAgICAgICAgICBzdGFja0xheW91dC5nZXRTdGFja1RyYW5zZm9ybSh0di5nZXRUYXNrKCksIHN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wVHJhbnNmb3JtLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgbVRtcFRyYW5zZm9ybS5hbHBoYSA9IDFmOworICAgICAgICAgICAgICAgICAgICBtU3RhY2tWaWV3LnVwZGF0ZVRhc2tWaWV3VG9UcmFuc2Zvcm0odHYsIG1UbXBUcmFuc2Zvcm0sIHRhc2tBbmltYXRpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQppbmRleCA3ZDVkYWFlLi5jMmJiNzQ1IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0uamF2YQpAQCAtMjIsNyArMjIsNiBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUGF0aDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0UHJvcGVydHk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuUHJvcGVydHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb25VdGlsczsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcjsKQEAgLTEwMyw5ICsxMDIsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVGFza1N0YWNrVmlld0xheW91dEFsZ29yaXRobSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCiAgICAgLy8gVGhlIHNjYWxlIGZhY3RvciB0byBhcHBseSB0byB0aGUgdXNlciBtb3ZlbWVudCBpbiB0aGUgc3RhY2sgdG8gdW5mb2N1cyBpdAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFVORk9DVVNfTVVMVElQTElFUiA9IDAuOGY7CiAKQEAgLTExOCw3ICsxMTQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3RhY2tTdGF0ZSB7CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdGFja1N0YXRlIEZSRUVGT1JNX09OTFkgPSBuZXcgU3RhY2tTdGF0ZSgxZiwgMCk7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RhY2tTdGF0ZSBGUkVFRk9STV9PTkxZID0gbmV3IFN0YWNrU3RhdGUoMWYsIDI1NSk7CiAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RhY2tTdGF0ZSBTVEFDS19PTkxZID0gbmV3IFN0YWNrU3RhdGUoMGYsIDApOwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0YWNrU3RhdGUgU1BMSVQgPSBuZXcgU3RhY2tTdGF0ZSgwLjVmLCAyNTUpOwogCkBAIC0xMzAsNyArMTI2LDcgQEAKICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlIHRvIHRoZSBmcmVlZm9ybSB3b3Jrc3BhY2UKICAgICAgICAgICogQHBhcmFtIGZyZWVmb3JtQmFja2dyb3VuZEFscGhhIHRoZSBiYWNrZ3JvdW5kIGFscGhhIGZvciB0aGUgZnJlZWZvcm0gd29ya3NwYWNlCiAgICAgICAgICAqLwotICAgICAgICBTdGFja1N0YXRlKGZsb2F0IGZyZWVmb3JtSGVpZ2h0UGN0LCBpbnQgZnJlZWZvcm1CYWNrZ3JvdW5kQWxwaGEpIHsKKyAgICAgICAgcHJpdmF0ZSBTdGFja1N0YXRlKGZsb2F0IGZyZWVmb3JtSGVpZ2h0UGN0LCBpbnQgZnJlZWZvcm1CYWNrZ3JvdW5kQWxwaGEpIHsKICAgICAgICAgICAgIHRoaXMuZnJlZWZvcm1IZWlnaHRQY3QgPSBmcmVlZm9ybUhlaWdodFBjdDsKICAgICAgICAgICAgIHRoaXMuZnJlZWZvcm1CYWNrZ3JvdW5kQWxwaGEgPSBmcmVlZm9ybUJhY2tncm91bmRBbHBoYTsKICAgICAgICAgfQpAQCAtMjEyLDcgKzIwOCw2IEBACiAgICAgfQogCiAgICAgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIFRhc2tTdGFja1ZpZXcgbVN0YWNrVmlldzsKICAgICBwcml2YXRlIEludGVycG9sYXRvciBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yOwogICAgIHByaXZhdGUgU3RhY2tTdGF0ZSBtU3RhdGUgPSBTdGFja1N0YXRlLlNQTElUOwogCkBAIC0yODAsOSArMjc1LDEyIEBACiAgICAgLy8gVGhlIGZyZWVmb3JtIHdvcmtzcGFjZSBsYXlvdXQKICAgICBGcmVlZm9ybVdvcmtzcGFjZUxheW91dEFsZ29yaXRobSBtRnJlZWZvcm1MYXlvdXRBbGdvcml0aG07CiAKLSAgICBwdWJsaWMgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtKENvbnRleHQgY29udGV4dCwgVGFza1N0YWNrVmlldyBzdGFja1ZpZXcpIHsKKyAgICAvLyBUaGUgdHJhbnNmb3JtIHRvIHBsYWNlIFRhc2tWaWV3cyBhdCB0aGUgZnJvbnQgYW5kIGJhY2sgb2YgdGhlIHN0YWNrIHJlc3BlY3RpdmVseQorICAgIFRhc2tWaWV3VHJhbnNmb3JtIG1CYWNrT2ZTdGFja1RyYW5zZm9ybSA9IG5ldyBUYXNrVmlld1RyYW5zZm9ybSgpOworICAgIFRhc2tWaWV3VHJhbnNmb3JtIG1Gcm9udE9mU3RhY2tUcmFuc2Zvcm0gPSBuZXcgVGFza1ZpZXdUcmFuc2Zvcm0oKTsKKworICAgIHB1YmxpYyBUYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0oQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOwotICAgICAgICBtU3RhY2tWaWV3ID0gc3RhY2tWaWV3OwogCiAgICAgICAgIG1Gb2N1c2VkUmFuZ2UgPSBuZXcgUmFuZ2UocmVzLmdldEZsb2F0KFIuaW50ZWdlci5yZWNlbnRzX2xheW91dF9mb2N1c2VkX3JhbmdlX21pbiksCiAgICAgICAgICAgICAgICAgcmVzLmdldEZsb2F0KFIuaW50ZWdlci5yZWNlbnRzX2xheW91dF9mb2N1c2VkX3JhbmdlX21heCkpOwpAQCAtMjk0LDcgKzI5Miw3IEBACiAgICAgICAgIG1NaW5UcmFuc2xhdGlvblogPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ucmVjZW50c190YXNrX3ZpZXdfel9taW4pOwogICAgICAgICBtTWF4VHJhbnNsYXRpb25aID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X3pfbWF4KTsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwotICAgICAgICBtRnJlZWZvcm1MYXlvdXRBbGdvcml0aG0gPSBuZXcgRnJlZWZvcm1Xb3Jrc3BhY2VMYXlvdXRBbGdvcml0aG0oKTsKKyAgICAgICAgbUZyZWVmb3JtTGF5b3V0QWxnb3JpdGhtID0gbmV3IEZyZWVmb3JtV29ya3NwYWNlTGF5b3V0QWxnb3JpdGhtKGNvbnRleHQpOwogICAgICAgICBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjb250ZXh0LAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmxpbmVhcl9vdXRfc2xvd19pbik7CiAgICAgfQpAQCAtMzE4LDcgKzMxNiw3IEBACiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Rm9jdXNTdGF0ZShmbG9hdCBmb2N1c1N0YXRlKSB7CiAgICAgICAgIG1Gb2N1c1N0YXRlID0gZm9jdXNTdGF0ZTsKLSAgICAgICAgbVN0YWNrVmlldy5yZXF1ZXN0U3luY2hyb25pemVTdGFja1ZpZXdzV2l0aE1vZGVsKCk7CisgICAgICAgIHVwZGF0ZUZyb250QmFja1RyYW5zZm9ybXMoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTMzMyw3ICszMzEsNiBAQAogICAgICAqIGluY2x1ZGluZyB0aGUgc2VhcmNoIGJhci4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFJlY3QgdGFza1N0YWNrQm91bmRzLCBTdGFja1N0YXRlIHN0YXRlKSB7Ci0gICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKICAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7CiAgICAgICAgIGludCB3aWR0aFBhZGRpbmcgPSAoaW50KSAoY29uZmlnLnRhc2tTdGFja1dpZHRoUGFkZGluZ1BjdCAqIHRhc2tTdGFja0JvdW5kcy53aWR0aCgpKTsKICAgICAgICAgaW50IGhlaWdodFBhZGRpbmcgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCkBAIC0zNTUsOSArMzUyLDcgQEAKICAgICAgICAgICAgICAgICAvICh0YXNrU3RhY2tCb3VuZHMuaGVpZ2h0KCkgLSBtU3lzdGVtSW5zZXRzLmJvdHRvbSk7CiAgICAgICAgIGludCB3aWR0aCA9IG1TdGFja1JlY3Qud2lkdGgoKTsKICAgICAgICAgaW50IG1pbkhlaWdodCA9IG1TdGFja1JlY3QuaGVpZ2h0KCkgLSBtRm9jdXNlZFBlZWtIZWlnaHQgLSBtU3RhY2tCb3R0b21PZmZzZXQ7Ci0gICAgICAgIGludCBoZWlnaHQgPSBkZWJ1Z0ZsYWdzLmlzRnVsbHNjcmVlblRodW1ibmFpbHNFbmFibGVkKCkKLSAgICAgICAgICAgICAgICA/IChpbnQpIE1hdGgubWluKHdpZHRoIC8gYXNwZWN0LCBtaW5IZWlnaHQpCi0gICAgICAgICAgICAgICAgOiB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdodCA9IChpbnQpIE1hdGgubWluKHdpZHRoIC8gYXNwZWN0LCBtaW5IZWlnaHQpOwogICAgICAgICBtVGFza1JlY3Quc2V0KG1TdGFja1JlY3QubGVmdCwgbVN0YWNrUmVjdC50b3AsCiAgICAgICAgICAgICAgICAgbVN0YWNrUmVjdC5sZWZ0ICsgd2lkdGgsIG1TdGFja1JlY3QudG9wICsgaGVpZ2h0KTsKIApAQCAtMzcxLDE0ICszNjYsNyBAQAogICAgICAgICBtVW5mb2N1c2VkQ3VydmVJbnRlcnBvbGF0b3IgPSBuZXcgRnJlZVBhdGhJbnRlcnBvbGF0b3IobVVuZm9jdXNlZEN1cnZlKTsKICAgICAgICAgbUZvY3VzZWRDdXJ2ZSA9IGNvbnN0cnVjdEZvY3VzZWRDdXJ2ZSgpOwogICAgICAgICBtRm9jdXNlZEN1cnZlSW50ZXJwb2xhdG9yID0gbmV3IEZyZWVQYXRoSW50ZXJwb2xhdG9yKG1Gb2N1c2VkQ3VydmUpOwotCi0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiaW5pdGlhbGl6ZSIpOwotICAgICAgICAgICAgTG9nLmQoVEFHLCAiXHRtRnJlZWZvcm1SZWN0OiAiICsgbUZyZWVmb3JtUmVjdCk7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJcdG1TdGFja1JlY3Q6ICIgKyBtU3RhY2tSZWN0KTsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIlx0bVRhc2tSZWN0OiAiICsgbVRhc2tSZWN0KTsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIlx0bVN5c3RlbUluc2V0czogIiArIG1TeXN0ZW1JbnNldHMpOwotICAgICAgICB9CisgICAgICAgIHVwZGF0ZUZyb250QmFja1RyYW5zZm9ybXMoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQ1OCwxMyArNDQ2LDYgQEAKICAgICAgICAgICAgICAgICBtSW5pdGlhbFNjcm9sbFAgPSAobU51bVN0YWNrVGFza3MgLSAxKSAtIG1VbmZvY3VzZWRSYW5nZS5nZXRBYnNvbHV0ZVgobm9ybVgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJtTnVtU3RhY2tUYXNrczogIiArIG1OdW1TdGFja1Rhc2tzKTsKLSAgICAgICAgICAgIExvZy5kKFRBRywgIm1OdW1GcmVlZm9ybVRhc2tzOiAiICsgbU51bUZyZWVmb3JtVGFza3MpOwotICAgICAgICAgICAgTG9nLmQoVEFHLCAibU1pblNjcm9sbFA6ICIgKyBtTWluU2Nyb2xsUCk7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJtTWF4U2Nyb2xsUDogIiArIG1NYXhTY3JvbGxQKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtNDc0LDcgKzQ1NSw3IEBACiAgICAgICAgIFV0aWxpdGllcy5jYW5jZWxBbmltYXRpb25XaXRob3V0Q2FsbGJhY2tzKG1Gb2N1c1N0YXRlQW5pbWF0b3IpOwogICAgICAgICBpZiAobUZvY3VzU3RhdGUgPiBTVEFURV9VTkZPQ1VTRUQpIHsKICAgICAgICAgICAgIGZsb2F0IGRlbHRhID0gKGZsb2F0KSB5TW92ZW1lbnQgLyAoVU5GT0NVU19NVUxUSVBMSUVSICogbVN0YWNrUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBtRm9jdXNTdGF0ZSAtPSBNYXRoLm1pbihtRm9jdXNTdGF0ZSwgTWF0aC5hYnMoZGVsdGEpKTsKKyAgICAgICAgICAgIHNldEZvY3VzU3RhdGUobUZvY3VzU3RhdGUgLSBNYXRoLm1pbihtRm9jdXNTdGF0ZSwgTWF0aC5hYnMoZGVsdGEpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ5OSwyMCArNDgwLDI0IEBACiAgICAgcHVibGljIGZsb2F0IGdldERlZmF1bHRGb2N1c1N0YXRlKCkgewogICAgICAgICBSZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZSBsYXVuY2hTdGF0ZSA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpLmdldExhdW5jaFN0YXRlKCk7CiAgICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKLSAgICAgICAgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkV2l0aEFsdFRhYiB8fAotICAgICAgICAgICAgICAgIChkZWJ1Z0ZsYWdzLmlzUGFnZU9uVG9nZ2xlRW5hYmxlZCgpICYmIGRlYnVnRmxhZ3MuaXNJbml0aWFsU3RhdGVQYWdpbmcoKSkpIHsKLSAgICAgICAgICAgIHJldHVybiAxZjsKKyAgICAgICAgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkV2l0aEFsdFRhYiB8fCBkZWJ1Z0ZsYWdzLmlzSW5pdGlhbFN0YXRlUGFnaW5nKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBTVEFURV9GT0NVU0VEOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwZjsKKyAgICAgICAgcmV0dXJuIFNUQVRFX1VORk9DVVNFRDsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0YXNrIHByb2dyZXNzIHRoYXQgd291bGQgcHV0IHRoZSB0YXNrIGp1c3Qgb2ZmIHRoZSBmcm9udCBvZiB0aGUgc3RhY2suCisgICAgICogUmV0dXJucyB0aGUgVGFza1ZpZXdUcmFuc2Zvcm0gdGhhdCB3b3VsZCBwdXQgdGhlIHRhc2sganVzdCBvZmYgdGhlIGJhY2sgb2YgdGhlIHN0YWNrLgogICAgICAqLwotICAgIHB1YmxpYyBmbG9hdCBnZXRTdGFja0Zyb250VGFza1Byb2dyZXNzKGZsb2F0IHN0YWNrU2Nyb2xsKSB7Ci0gICAgICAgIGZsb2F0IG1heCA9IG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCArCi0gICAgICAgICAgICAgICAgbUZvY3VzU3RhdGUgKiAobUZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCAtIG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCk7Ci0gICAgICAgIHJldHVybiBzdGFja1Njcm9sbCArIG1heDsKKyAgICBwdWJsaWMgVGFza1ZpZXdUcmFuc2Zvcm0gZ2V0QmFja09mU3RhY2tUcmFuc2Zvcm0oKSB7CisgICAgICAgIHJldHVybiBtQmFja09mU3RhY2tUcmFuc2Zvcm07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVGFza1ZpZXdUcmFuc2Zvcm0gdGhhdCB3b3VsZCBwdXQgdGhlIHRhc2sganVzdCBvZmYgdGhlIGZyb250IG9mIHRoZSBzdGFjay4KKyAgICAgKi8KKyAgICBwdWJsaWMgVGFza1ZpZXdUcmFuc2Zvcm0gZ2V0RnJvbnRPZlN0YWNrVHJhbnNmb3JtKCkgeworICAgICAgICByZXR1cm4gbUZyb250T2ZTdGFja1RyYW5zZm9ybTsKICAgICB9CiAKICAgICAvKioKQEAgLTYwNywxNSArNTkyLDggQEAKICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PdXQucmVzZXQoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtT3V0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2V0U3RhY2tUcmFuc2Zvcm0obVRhc2tJbmRleE1hcC5nZXQodGFzay5rZXkpLCBzdGFja1Njcm9sbCwgdHJhbnNmb3JtT3V0LAorICAgICAgICAgICAgcmV0dXJuIGdldFN0YWNrVHJhbnNmb3JtKG1UYXNrSW5kZXhNYXAuZ2V0KHRhc2sua2V5KSwgc3RhY2tTY3JvbGwsIHRyYW5zZm9ybU91dCwKICAgICAgICAgICAgICAgICAgICAgZnJvbnRUcmFuc2Zvcm0pOwotICAgICAgICAgICAgaWYgKHRhc2sudGh1bWJuYWlsICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PdXQudGh1bWJuYWlsU2NhbGUgPSAoZmxvYXQpIG1UYXNrUmVjdC53aWR0aCgpIC8gdGFzay50aHVtYm5haWwuZ2V0V2lkdGgoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImdldFRyYW5zZm9ybTogIiArIHRhc2sua2V5ICsgIiwgIiArIHRyYW5zZm9ybU91dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtT3V0OwogICAgICAgICB9CiAgICAgfQogCkBAIC02NDcsNiArNjI1LDcgQEAKICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1PdXQ7CiAgICAgICAgIH0KIAorICAgICAgICBpbnQgeCA9IChtU3RhY2tSZWN0LndpZHRoKCkgLSBtVGFza1JlY3Qud2lkdGgoKSkgLyAyOwogICAgICAgICBpbnQgeTsKICAgICAgICAgZmxvYXQgejsKICAgICAgICAgZmxvYXQgcmVsUDsKQEAgLTY3MSwxNyArNjUwLDEzIEBACiAKICAgICAgICAgLy8gRmlsbCBvdXQgdGhlIHRyYW5zZm9ybQogICAgICAgICB0cmFuc2Zvcm1PdXQuc2NhbGUgPSAxZjsKLSAgICAgICAgdHJhbnNmb3JtT3V0LnRyYW5zbGF0aW9uWCA9IChtU3RhY2tSZWN0LndpZHRoKCkgLSBtVGFza1JlY3Qud2lkdGgoKSkgLyAyOwotICAgICAgICB0cmFuc2Zvcm1PdXQudHJhbnNsYXRpb25ZID0geTsKKyAgICAgICAgdHJhbnNmb3JtT3V0LmFscGhhID0gMWY7CiAgICAgICAgIHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblogPSB6OwogICAgICAgICB0cmFuc2Zvcm1PdXQucmVjdC5zZXQobVRhc2tSZWN0KTsKLSAgICAgICAgdHJhbnNmb3JtT3V0LnJlY3Qub2Zmc2V0KHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblgsIHRyYW5zZm9ybU91dC50cmFuc2xhdGlvblkpOworICAgICAgICB0cmFuc2Zvcm1PdXQucmVjdC5vZmZzZXQoeCwgeSk7CiAgICAgICAgIFV0aWxpdGllcy5zY2FsZVJlY3RBYm91dENlbnRlcih0cmFuc2Zvcm1PdXQucmVjdCwgdHJhbnNmb3JtT3V0LnNjYWxlKTsKICAgICAgICAgdHJhbnNmb3JtT3V0LnZpc2libGUgPSAodHJhbnNmb3JtT3V0LnJlY3QudG9wIDwgbVN0YWNrUmVjdC5ib3R0b20pICYmCiAgICAgICAgICAgICAgICAgKGZyb250VHJhbnNmb3JtID09IG51bGwgfHwgdHJhbnNmb3JtT3V0LnJlY3QudG9wICE9IGZyb250VHJhbnNmb3JtLnJlY3QudG9wKTsKLSAgICAgICAgdHJhbnNmb3JtT3V0LmNsaXBCb3R0b20gPSAwOwotICAgICAgICB0cmFuc2Zvcm1PdXQuY2xpcFJpZ2h0ID0gMDsKLSAgICAgICAgdHJhbnNmb3JtT3V0LnRodW1ibmFpbFNjYWxlID0gMWY7CiAgICAgICAgIHRyYW5zZm9ybU91dC5wID0gcmVsUDsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU91dDsKICAgICB9CkBAIC03NjYsNCArNzQxLDIzIEBACiAgICAgICAgIHAuY3ViaWNUbygwLjVmLCAxZiAtIHBlZWtIZWlnaHRQY3QsIGNwb2ludDJYLCBjcG9pbnQyWSwgMWYsIDBmKTsKICAgICAgICAgcmV0dXJuIHA7CiAgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlcyB0aGUgY3VycmVudCB0cmFuc2Zvcm1zIHRoYXQgd291bGQgcHV0IGEgVGFza1ZpZXcgYXQgdGhlIGZyb250IGFuZCBiYWNrIG9mIHRoZSBzdGFjay4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlRnJvbnRCYWNrVHJhbnNmb3JtcygpIHsKKyAgICAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHdlIGhhdmUgbm90IHlldCBpbml0aWFsaXplZAorICAgICAgICBpZiAobVN0YWNrUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IG1pbiA9IG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1pbiArCisgICAgICAgICAgICAgICAgbUZvY3VzU3RhdGUgKiAobUZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1pbiAtIG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1pbik7CisgICAgICAgIGZsb2F0IG1heCA9IG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCArCisgICAgICAgICAgICAgICAgbUZvY3VzU3RhdGUgKiAobUZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCAtIG1VbmZvY3VzZWRSYW5nZS5yZWxhdGl2ZU1heCk7CisgICAgICAgIGdldFN0YWNrVHJhbnNmb3JtKG1pbiwgMGYsIG1CYWNrT2ZTdGFja1RyYW5zZm9ybSwgbnVsbCk7CisgICAgICAgIGdldFN0YWNrVHJhbnNmb3JtKG1heCwgMGYsIG1Gcm9udE9mU3RhY2tUcmFuc2Zvcm0sIG51bGwpOworICAgICAgICBtQmFja09mU3RhY2tUcmFuc2Zvcm0udmlzaWJsZSA9IHRydWU7CisgICAgICAgIG1Gcm9udE9mU3RhY2tUcmFuc2Zvcm0udmlzaWJsZSA9IHRydWU7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrVmlldy5qYXZhCmluZGV4IGNjNWFhYWUuLjk1NjhmYWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja1ZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3LmphdmEKQEAgLTIwLDE0ICsyMCwxNSBAQAogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdEY7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5Db2xvckRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOworaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRQcm9wZXJ0eTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwpAQCAtNDIsMjAgKzQzLDI0IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzQWN0aXZpdHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzQWN0aXZpdHlMYXVuY2hTdGF0ZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNDb25maWd1cmF0aW9uOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0RlYnVnRmxhZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuQ2FuY2VsRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uRXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuRGlzbWlzc1JlY2VudHNUb0hvbWVBbmltYXRpb25TdGFydGVkOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkVudGVyUmVjZW50c1dpbmRvd0FuaW1hdGlvbkNvbXBsZXRlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkhpZGVIaXN0b3J5QnV0dG9uRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuSGlkZUhpc3RvcnlFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5JdGVyYXRlUmVjZW50c0V2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkxhdW5jaFRhc2tFdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5hY3Rpdml0eS5MYXVuY2hUYXNrU3RhcnRlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LlBhY2thZ2VzQ2hhbmdlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LlNob3dIaXN0b3J5QnV0dG9uRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuU2hvd0hpc3RvcnlFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5jb21wb25lbnQuUmVjZW50c1Zpc2liaWxpdHlDaGFuZ2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuQWxsVGFza1ZpZXdzRGlzbWlzc2VkRXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuRGVsZXRlVGFza0RhdGFFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5EaXNtaXNzVGFza1ZpZXdFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5TdGFja1ZpZXdTY3JvbGxlZEV2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlRhc2tWaWV3RGlzbWlzc2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuVXBkYXRlRnJlZWZvcm1UYXNrVmlld1Zpc2liaWxpdHlFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5Vc2VySW50ZXJhY3Rpb25FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5kcmFnbmRyb3AuRHJhZ0Ryb3BUYXJnZXRDaGFuZ2VkRXZlbnQ7CkBAIC03Miw3ICs3Nyw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrU3RhY2s7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTg3LDY0ICs5MSw2NCBAQAogICAgICAgICBUYXNrVmlldy5UYXNrVmlld0NhbGxiYWNrcywgVGFza1N0YWNrVmlld1Njcm9sbGVyLlRhc2tTdGFja1ZpZXdTY3JvbGxlckNhbGxiYWNrcywKICAgICAgICAgVmlld1Bvb2wuVmlld1Bvb2xDb25zdW1lcjxUYXNrVmlldywgVGFzaz4gewogCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJUYXNrU3RhY2tWaWV3IjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEtFWV9TQVZFRF9TVEFURV9TVVBFUiA9ICJzYXZlZF9pbnN0YW5jZV9zdGF0ZV9zdXBlciI7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIEtFWV9TQVZFRF9TVEFURV9MQVlPVVRfRk9DVVNFRF9TVEFURSA9CisgICAgICAgICAgICAic2F2ZWRfaW5zdGFuY2Vfc3RhdGVfbGF5b3V0X2ZvY3VzZWRfc3RhdGUiOworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBLRVlfU0FWRURfU1RBVEVfTEFZT1VUX1NUQUNLX1NDUk9MTCA9CisgICAgICAgICAgICAic2F2ZWRfaW5zdGFuY2Vfc3RhdGVfbGF5b3V0X3N0YWNrX3Njcm9sbCI7CiAKICAgICAvLyBUaGUgdGhyZXNob2xkcyBhdCB3aGljaCB0byBzaG93L2hpZGUgdGhlIGhpc3RvcnkgYnV0dG9uLgogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IFNIT1dfSElTVE9SWV9CVVRUT05fU0NST0xMX1RIUkVTSE9MRCA9IDAuM2Y7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgSElERV9ISVNUT1JZX0JVVFRPTl9TQ1JPTExfVEhSRVNIT0xEID0gMC4zZjsKIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJvcGVydHk8Q29sb3JEcmF3YWJsZSwgSW50ZWdlcj4gQ09MT1JfRFJBV0FCTEVfQUxQSEEgPQotICAgICAgICAgICAgbmV3IEludFByb3BlcnR5PENvbG9yRHJhd2FibGU+KCJjb2xvckRyYXdhYmxlQWxwaGEiKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU1lOQ19TVEFDS19EVVJBVElPTiA9IDIwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRFJBR19TQ0FMRV9EVVJBVElPTiA9IDE3NTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBEUkFHX1NDQUxFX0ZBQ1RPUiA9IDEuMDVmOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQcm9wZXJ0eTxEcmF3YWJsZSwgSW50ZWdlcj4gRFJBV0FCTEVfQUxQSEEgPQorICAgICAgICAgICAgbmV3IEludFByb3BlcnR5PERyYXdhYmxlPigiZHJhd2FibGVBbHBoYSIpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShDb2xvckRyYXdhYmxlIG9iamVjdCwgaW50IGFscGhhKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoRHJhd2FibGUgb2JqZWN0LCBpbnQgYWxwaGEpIHsKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldEFscGhhKGFscGhhKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgSW50ZWdlciBnZXQoQ29sb3JEcmF3YWJsZSBvYmplY3QpIHsKKyAgICAgICAgICAgICAgICBwdWJsaWMgSW50ZWdlciBnZXQoRHJhd2FibGUgb2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuZ2V0QWxwaGEoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogCi0gICAgLyoqIFRoZSBUYXNrVmlldyBjYWxsYmFja3MgKi8KLSAgICBpbnRlcmZhY2UgVGFza1N0YWNrVmlld0NhbGxiYWNrcyB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uVGFza1ZpZXdDbGlja2VkKFRhc2tTdGFja1ZpZXcgc3RhY2tWaWV3LCBUYXNrVmlldyB0diwgVGFza1N0YWNrIHN0YWNrLCBUYXNrIHQsCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBsb2NrVG9UYXNrLCBSZWN0IGJvdW5kcywgaW50IGRlc3RpbmF0aW9uU3RhY2spOwotICAgIH0KLQogICAgIFRhc2tTdGFjayBtU3RhY2s7CiAgICAgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtIG1MYXlvdXRBbGdvcml0aG07CiAgICAgVGFza1N0YWNrVmlld1Njcm9sbGVyIG1TdGFja1Njcm9sbGVyOwogICAgIFRhc2tTdGFja1ZpZXdUb3VjaEhhbmRsZXIgbVRvdWNoSGFuZGxlcjsKLSAgICBUYXNrU3RhY2tWaWV3Q2FsbGJhY2tzIG1DYjsKLSAgICBDb2xvckRyYXdhYmxlIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQ7CisgICAgVGFza1N0YWNrQW5pbWF0aW9uSGVscGVyIG1BbmltYXRpb25IZWxwZXI7CisgICAgR3JhZGllbnREcmF3YWJsZSBtRnJlZWZvcm1Xb3Jrc3BhY2VCYWNrZ3JvdW5kOwogICAgIE9iamVjdEFuaW1hdG9yIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmRBbmltYXRvcjsKICAgICBWaWV3UG9vbDxUYXNrVmlldywgVGFzaz4gbVZpZXdQb29sOworCisgICAgQXJyYXlMaXN0PFRhc2tWaWV3PiBtVGFza1ZpZXdzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgQXJyYXlMaXN0PFRhc2tWaWV3VHJhbnNmb3JtPiBtQ3VycmVudFRhc2tUcmFuc2Zvcm1zID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgVGFza1ZpZXdBbmltYXRpb24gbURlZmVycmVkVGFza1ZpZXdVcGRhdGVBbmltYXRpb24gPSBudWxsOworCiAgICAgRG96ZVRyaWdnZXIgbVVJRG96ZVRyaWdnZXI7CiAgICAgVGFzayBtRm9jdXNlZFRhc2s7Ci0gICAgLy8gT3B0aW1pemF0aW9ucwotICAgIGludCBtU3RhY2tWaWV3c0FuaW1hdGlvbkR1cmF0aW9uOwotICAgIGJvb2xlYW4gbVN0YWNrVmlld3NEaXJ0eSA9IHRydWU7Ci0gICAgYm9vbGVhbiBtU3RhY2tWaWV3c0NsaXBEaXJ0eSA9IHRydWU7CisKKyAgICBpbnQgbVRhc2tDb3JuZXJSYWRpdXNQeDsKKworICAgIGJvb2xlYW4gbVRhc2tWaWV3c0NsaXBEaXJ0eSA9IHRydWU7CiAgICAgYm9vbGVhbiBtQXdhaXRpbmdGaXJzdExheW91dCA9IHRydWU7CiAgICAgYm9vbGVhbiBtRW50ZXJBbmltYXRpb25Db21wbGV0ZSA9IGZhbHNlOwotICAgIGJvb2xlYW4gbVN0YXJ0RW50ZXJBbmltYXRpb25SZXF1ZXN0ZWRBZnRlckxheW91dDsKLSAgICBWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RW50ZXJDb250ZXh0IG1TdGFydEVudGVyQW5pbWF0aW9uQ29udGV4dDsKKyAgICBib29sZWFuIG1Ub3VjaEV4cGxvcmF0aW9uRW5hYmxlZDsKKyAgICBib29sZWFuIG1TY3JlZW5QaW5uaW5nRW5hYmxlZDsKIAogICAgIFJlY3QgbVRhc2tTdGFja0JvdW5kcyA9IG5ldyBSZWN0KCk7CiAgICAgaW50W10gbVRtcFZpc2libGVSYW5nZSA9IG5ldyBpbnRbMl07CiAgICAgUmVjdCBtVG1wUmVjdCA9IG5ldyBSZWN0KCk7Ci0gICAgUmVjdEYgbVRtcFRhc2tSZWN0ID0gbmV3IFJlY3RGKCk7Ci0gICAgVGFza1ZpZXdUcmFuc2Zvcm0gbVRtcFN0YWNrQmFja1RyYW5zZm9ybSA9IG5ldyBUYXNrVmlld1RyYW5zZm9ybSgpOwotICAgIFRhc2tWaWV3VHJhbnNmb3JtIG1UbXBTdGFja0Zyb250VHJhbnNmb3JtID0gbmV3IFRhc2tWaWV3VHJhbnNmb3JtKCk7CiAgICAgSGFzaE1hcDxUYXNrLCBUYXNrVmlldz4gbVRtcFRhc2tWaWV3TWFwID0gbmV3IEhhc2hNYXA8PigpOwotICAgIEFycmF5TGlzdDxUYXNrVmlldz4gbVRhc2tWaWV3cyA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIExpc3Q8VGFza1ZpZXc+IG1JbW11dGFibGVUYXNrVmlld3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICBMaXN0PFRhc2tWaWV3PiBtVG1wVGFza1ZpZXdzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgVGFza1ZpZXdUcmFuc2Zvcm0gbVRtcFRyYW5zZm9ybSA9IG5ldyBUYXNrVmlld1RyYW5zZm9ybSgpOwogICAgIExheW91dEluZmxhdGVyIG1JbmZsYXRlcjsKLSAgICBib29sZWFuIG1Ub3VjaEV4cGxvcmF0aW9uRW5hYmxlZDsKIAogICAgIEludGVycG9sYXRvciBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvcjsKIApAQCAtMTUzLDcgKzE1Nyw4IEBACiAgICAgICAgICAgICBuZXcgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcGRhdGVTdGFja1ZpZXdzQ2xpcCgpOworICAgICAgICAgICAgICAgICAgICBtVGFza1ZpZXdzQ2xpcERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKQEAgLTE3NCwxNiArMTc5LDIyIEBACiAKICAgICBwdWJsaWMgVGFza1N0YWNrVmlldyhDb250ZXh0IGNvbnRleHQsIFRhc2tTdGFjayBzdGFjaykgewogICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CisgICAgICAgIFJlc291cmNlcyByZXMgPSBjb250ZXh0LmdldFJlc291cmNlcygpOworCiAgICAgICAgIC8vIFNldCB0aGUgc3RhY2sgZmlyc3QKICAgICAgICAgc2V0U3RhY2soc3RhY2spOwogICAgICAgICBtVmlld1Bvb2wgPSBuZXcgVmlld1Bvb2w8Pihjb250ZXh0LCB0aGlzKTsKICAgICAgICAgbUluZmxhdGVyID0gTGF5b3V0SW5mbGF0ZXIuZnJvbShjb250ZXh0KTsKLSAgICAgICAgbUxheW91dEFsZ29yaXRobSA9IG5ldyBUYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0oY29udGV4dCwgdGhpcyk7CisgICAgICAgIG1MYXlvdXRBbGdvcml0aG0gPSBuZXcgVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtKGNvbnRleHQpOwogICAgICAgICBtU3RhY2tTY3JvbGxlciA9IG5ldyBUYXNrU3RhY2tWaWV3U2Nyb2xsZXIoY29udGV4dCwgbUxheW91dEFsZ29yaXRobSk7CiAgICAgICAgIG1TdGFja1Njcm9sbGVyLnNldENhbGxiYWNrcyh0aGlzKTsKICAgICAgICAgbVRvdWNoSGFuZGxlciA9IG5ldyBUYXNrU3RhY2tWaWV3VG91Y2hIYW5kbGVyKGNvbnRleHQsIHRoaXMsIG1TdGFja1Njcm9sbGVyKTsKKyAgICAgICAgbUFuaW1hdGlvbkhlbHBlciA9IG5ldyBUYXNrU3RhY2tBbmltYXRpb25IZWxwZXIoY29udGV4dCwgdGhpcyk7CiAgICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjb250ZXh0LAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZXJwb2xhdG9yLmZhc3Rfb3V0X3Nsb3dfaW4pOworICAgICAgICBtVGFza0Nvcm5lclJhZGl1c1B4ID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X3JvdW5kZWRfY29ybmVyc19yYWRpdXMpOwogCiAgICAgICAgIGludCB0YXNrQmFyRGlzbWlzc0RvemVEZWxheVNlY29uZHMgPSBnZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAogICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfYmFyX2Rpc21pc3NfZGVsYXlfc2Vjb25kcyk7CkBAIC0yMDEsMTkgKzIxMiwyMSBAQAogICAgICAgICB9KTsKICAgICAgICAgc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShWaWV3LklNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9ZRVMpOwogCi0gICAgICAgIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQgPSBuZXcgQ29sb3JEcmF3YWJsZSgweDMzMDAwMDAwKTsKKyAgICAgICAgbUZyZWVmb3JtV29ya3NwYWNlQmFja2dyb3VuZCA9IChHcmFkaWVudERyYXdhYmxlKSBnZXRDb250ZXh0KCkuZ2V0RHJhd2FibGUoCisgICAgICAgICAgICAgICAgUi5kcmF3YWJsZS5yZWNlbnRzX2ZyZWVmb3JtX3dvcmtzcGFjZV9iZyk7CiAgICAgICAgIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQuc2V0Q2FsbGJhY2sodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqIFNldHMgdGhlIGNhbGxiYWNrcyAqLwotICAgIHZvaWQgc2V0Q2FsbGJhY2tzKFRhc2tTdGFja1ZpZXdDYWxsYmFja3MgY2IpIHsKLSAgICAgICAgbUNiID0gY2I7CisgICAgICAgIGlmIChzc3AuaGFzRnJlZWZvcm1Xb3Jrc3BhY2VTdXBwb3J0KCkpIHsKKyAgICAgICAgICAgIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQuc2V0Q29sb3IoCisgICAgICAgICAgICAgICAgICAgIGdldENvbnRleHQoKS5nZXRDb2xvcihSLmNvbG9yLnJlY2VudHNfZnJlZWZvcm1fd29ya3NwYWNlX2JnX2NvbG9yKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7CiAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICBtVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQgPSBzc3AuaXNUb3VjaEV4cGxvcmF0aW9uRW5hYmxlZCgpOworICAgICAgICBtU2NyZWVuUGlubmluZ0VuYWJsZWQgPSBzc3AuZ2V0U3lzdGVtU2V0dGluZyhnZXRDb250ZXh0KCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU3lzdGVtLkxPQ0tfVE9fQVBQX0VOQUJMRUQpICE9IDA7CiAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5yZWdpc3Rlcih0aGlzLCBSZWNlbnRzQWN0aXZpdHkuRVZFTlRfQlVTX1BSSU9SSVRZICsgMSk7CiAgICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwogICAgIH0KQEAgLTI1MCwxMiArMjYzLDExIEBACiAgICAgICAgICAgICAgICAgbVRhc2tWaWV3cy5hZGQoKFRhc2tWaWV3KSB2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtSW1tdXRhYmxlVGFza1ZpZXdzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChtVGFza1ZpZXdzKTsKICAgICB9CiAKICAgICAvKiogR2V0cyB0aGUgbGlzdCBvZiB0YXNrIHZpZXdzICovCiAgICAgTGlzdDxUYXNrVmlldz4gZ2V0VGFza1ZpZXdzKCkgewotICAgICAgICByZXR1cm4gbUltbXV0YWJsZVRhc2tWaWV3czsKKyAgICAgICAgcmV0dXJuIG1UYXNrVmlld3M7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zMTQsNDQgKzMyNiwxNiBAQAogCiAgICAgICAgIC8vIFJlc2V0IHRoZSBzdGFjayBzdGF0ZQogICAgICAgICBtU3RhY2sucmVzZXQoKTsKLSAgICAgICAgbVN0YWNrVmlld3NEaXJ0eSA9IHRydWU7Ci0gICAgICAgIG1TdGFja1ZpZXdzQ2xpcERpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbVRhc2tWaWV3c0NsaXBEaXJ0eSA9IHRydWU7CiAgICAgICAgIG1Bd2FpdGluZ0ZpcnN0TGF5b3V0ID0gdHJ1ZTsKICAgICAgICAgbUVudGVyQW5pbWF0aW9uQ29tcGxldGUgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1VSURvemVUcmlnZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1VSURvemVUcmlnZ2VyLnN0b3BEb3ppbmcoKTsKLSAgICAgICAgICAgIG1VSURvemVUcmlnZ2VyLnJlc2V0VHJpZ2dlcigpOwotICAgICAgICB9CisgICAgICAgIG1VSURvemVUcmlnZ2VyLnN0b3BEb3ppbmcoKTsKKyAgICAgICAgbVVJRG96ZVRyaWdnZXIucmVzZXRUcmlnZ2VyKCk7CiAgICAgICAgIG1TdGFja1Njcm9sbGVyLnJlc2V0KCk7CiAgICAgICAgIG1MYXlvdXRBbGdvcml0aG0ucmVzZXQoKTsKICAgICAgICAgcmVxdWVzdExheW91dCgpOwogICAgIH0KIAotICAgIC8qKiBSZXF1ZXN0cyB0aGF0IHRoZSB2aWV3cyBiZSBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgbW9kZWwgKi8KLSAgICB2b2lkIHJlcXVlc3RTeW5jaHJvbml6ZVN0YWNrVmlld3NXaXRoTW9kZWwoKSB7Ci0gICAgICAgIHJlcXVlc3RTeW5jaHJvbml6ZVN0YWNrVmlld3NXaXRoTW9kZWwoMCk7Ci0gICAgfQotICAgIHZvaWQgcmVxdWVzdFN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbChpbnQgZHVyYXRpb24pIHsKLSAgICAgICAgaWYgKCFtU3RhY2tWaWV3c0RpcnR5KSB7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICBtU3RhY2tWaWV3c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobUF3YWl0aW5nRmlyc3RMYXlvdXQpIHsKLSAgICAgICAgICAgIC8vIFNraXAgdGhlIGFuaW1hdGlvbiBpZiB3ZSBhcmUgYXdhaXRpbmcgZmlyc3QgbGF5b3V0Ci0gICAgICAgICAgICBtU3RhY2tWaWV3c0FuaW1hdGlvbkR1cmF0aW9uID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TdGFja1ZpZXdzQW5pbWF0aW9uRHVyYXRpb24gPSBNYXRoLm1heChtU3RhY2tWaWV3c0FuaW1hdGlvbkR1cmF0aW9uLCBkdXJhdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogUmVxdWVzdHMgdGhhdCB0aGUgdmlld3MgY2xpcHBpbmcgYmUgdXBkYXRlZC4gKi8KLSAgICB2b2lkIHJlcXVlc3RVcGRhdGVTdGFja1ZpZXdzQ2xpcCgpIHsKLSAgICAgICAgaWYgKCFtU3RhY2tWaWV3c0NsaXBEaXJ0eSkgewotICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgbVN0YWNrVmlld3NDbGlwRGlydHkgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLyoqIFJldHVybnMgdGhlIHN0YWNrIGFsZ29yaXRobSBmb3IgdGhpcyB0YXNrIHN0YWNrLiAqLwogICAgIHB1YmxpYyBUYXNrU3RhY2tMYXlvdXRBbGdvcml0aG0gZ2V0U3RhY2tBbGdvcml0aG0oKSB7CiAgICAgICAgIHJldHVybiBtTGF5b3V0QWxnb3JpdGhtOwpAQCAtMzY0LDggKzM0OCw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIHVwZGF0ZVN0YWNrVHJhbnNmb3JtcyhBcnJheUxpc3Q8VGFza1ZpZXdUcmFuc2Zvcm0+IHRhc2tUcmFuc2Zvcm1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFRhc2s+IHRhc2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3RhY2tTY3JvbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSB2aXNpYmxlUmFuZ2VPdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJvdW5kVHJhbnNsYXRpb25zVG9SZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRbXSB2aXNpYmxlUmFuZ2VPdXQpIHsKICAgICAgICAgaW50IHRhc2tUcmFuc2Zvcm1Db3VudCA9IHRhc2tUcmFuc2Zvcm1zLnNpemUoKTsKICAgICAgICAgaW50IHRhc2tDb3VudCA9IHRhc2tzLnNpemUoKTsKICAgICAgICAgaW50IGZyb250TW9zdFZpc2libGVJbmRleCA9IC0xOwpAQCAtMzg2LDE1ICszNjksMTUgQEAKICAgICAgICAgVGFza1ZpZXdUcmFuc2Zvcm0gZnJvbnRUcmFuc2Zvcm0gPSBudWxsOwogICAgICAgICBmb3IgKGludCBpID0gdGFza0NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tzLmdldChpKTsKKyAgICAgICAgICAgIFRhc2tWaWV3VHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1MYXlvdXRBbGdvcml0aG0uZ2V0U3RhY2tUcmFuc2Zvcm0odGFzaywgc3RhY2tTY3JvbGwsCisgICAgICAgICAgICAgICAgICAgIHRhc2tUcmFuc2Zvcm1zLmdldChpKSwgZnJvbnRUcmFuc2Zvcm0pOworCisgICAgICAgICAgICAvLyBGb3IgZnJlZWZvcm0gdGFza3MsIG9ubHkgY2FsY3VsYXRlIHRoZSBzdGFjayB0cmFuc2Zvcm0gYW5kIHNraXAgdGhlIGNhbGN1bGF0aW9uIG9mCisgICAgICAgICAgICAvLyB0aGUgdmlzaWJsZSBzdGFjayBpbmRpY2VzCiAgICAgICAgICAgICBpZiAodGFzay5pc0ZyZWVmb3JtVGFzaygpKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFRhc2tWaWV3VHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1MYXlvdXRBbGdvcml0aG0uZ2V0U3RhY2tUcmFuc2Zvcm0odGFzaywgc3RhY2tTY3JvbGwsCi0gICAgICAgICAgICAgICAgICAgIHRhc2tUcmFuc2Zvcm1zLmdldChpKSwgZnJvbnRUcmFuc2Zvcm0pOwotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAidXBkYXRlU3RhY2tUcmFuc2Zvcm06ICIgKyBpICsgIiwgIiArIHRyYW5zZm9ybS52aXNpYmxlKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0udmlzaWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChmcm9udE1vc3RWaXNpYmxlSW5kZXggPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGZyb250TW9zdFZpc2libGVJbmRleCA9IGk7CkBAIC00MTEsMTEgKzM5NCw2IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGJvdW5kVHJhbnNsYXRpb25zVG9SZWN0KSB7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0aW9uWSA9IE1hdGgubWluKHRyYW5zZm9ybS50cmFuc2xhdGlvblksCi0gICAgICAgICAgICAgICAgICAgICAgICBtTGF5b3V0QWxnb3JpdGhtLm1TdGFja1JlY3QuYm90dG9tKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZyb250VHJhbnNmb3JtID0gdHJhbnNmb3JtOwogICAgICAgICB9CiAgICAgICAgIGlmICh2aXNpYmxlUmFuZ2VPdXQgIT0gbnVsbCkgewpAQCAtNDI1LDE0MyArNDAzLDE1NSBAQAogICAgICAgICByZXR1cm4gZnJvbnRNb3N0VmlzaWJsZUluZGV4ICE9IC0xICYmIGJhY2tNb3N0VmlzaWJsZUluZGV4ICE9IC0xOwogICAgIH0KIAotICAgIC8qKiBTeW5jaHJvbml6ZXMgdGhlIHZpZXdzIHdpdGggdGhlIG1vZGVsICovCi0gICAgYm9vbGVhbiBzeW5jaHJvbml6ZVN0YWNrVmlld3NXaXRoTW9kZWwoKSB7Ci0gICAgICAgIGlmIChtU3RhY2tWaWV3c0RpcnR5KSB7Ci0gICAgICAgICAgICAvLyBHZXQgYWxsIHRoZSB0YXNrIHRyYW5zZm9ybXMKLSAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrPiB0YXNrcyA9IG1TdGFjay5nZXRTdGFja1Rhc2tzKCk7Ci0gICAgICAgICAgICBmbG9hdCBzdGFja1Njcm9sbCA9IG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCk7Ci0gICAgICAgICAgICBpbnRbXSB2aXNpYmxlU3RhY2tSYW5nZSA9IG1UbXBWaXNpYmxlUmFuZ2U7Ci0gICAgICAgICAgICBib29sZWFuIGlzVmFsaWRWaXNpYmxlU3RhY2tSYW5nZSA9IHVwZGF0ZVN0YWNrVHJhbnNmb3JtcyhtQ3VycmVudFRhc2tUcmFuc2Zvcm1zLCB0YXNrcywKLSAgICAgICAgICAgICAgICAgICAgc3RhY2tTY3JvbGwsIHZpc2libGVTdGFja1JhbmdlLCBmYWxzZSk7Ci0gICAgICAgICAgICBib29sZWFuIGhhc1N0YWNrQmFja1RyYW5zZm9ybSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbGVhbiBoYXNTdGFja0Zyb250VHJhbnNmb3JtID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJ2aXNpYmxlUmFuZ2U6ICIgKyB2aXNpYmxlU3RhY2tSYW5nZVswXSArICIgdG8gIiArIHZpc2libGVTdGFja1JhbmdlWzFdKTsKLSAgICAgICAgICAgIH0KKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBjaGlsZHJlbiB7QGxpbmsgVGFza1ZpZXd9cyB0byBtYXRjaCB0aGUgdGFza3MgaW4gdGhlIGN1cnJlbnQge0BsaW5rIFRhc2tTdGFja30uCisgICAgICogVGhpcyBjYWxsIGRvZXMgbm90IHVwZGF0ZSB0aGUge0BsaW5rIFRhc2tWaWV3fXMgdG8gdGhlaXIgcG9zaXRpb24gaW4gdGhlIGxheW91dCBleGNlcHQgd2hlbgorICAgICAqIHRoZXkgYXJlIGluaXRpYWxseSBwaWNrZWQgdXAgZnJvbSB0aGUgcG9vbCwgd2hlbiB0aGV5IHdpbGwgYmUgcGxhY2VkIGluIGEgc3VpdGFibGUgaW5pdGlhbAorICAgICAqIHBvc2l0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBiaW5kVGFza1ZpZXdzV2l0aFN0YWNrKCkgeworICAgICAgICBmaW5hbCBmbG9hdCBzdGFja1Njcm9sbCA9IG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCk7CisgICAgICAgIGZpbmFsIGludFtdIHZpc2libGVTdGFja1JhbmdlID0gbVRtcFZpc2libGVSYW5nZTsKIAotICAgICAgICAgICAgLy8gUmV0dXJuIGFsbCB0aGUgaW52aXNpYmxlIGNoaWxkcmVuIHRvIHRoZSBwb29sCi0gICAgICAgICAgICBtVG1wVGFza1ZpZXdNYXAuY2xlYXIoKTsKLSAgICAgICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IGdldFRhc2tWaWV3cygpOwotICAgICAgICAgICAgaW50IGxhc3RGb2N1c2VkVGFza0luZGV4ID0gLTE7Ci0gICAgICAgICAgICBpbnQgdGFza1ZpZXdDb3VudCA9IHRhc2tWaWV3cy5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gdGFza1ZpZXdDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOwotICAgICAgICAgICAgICAgIFRhc2sgdGFzayA9IHR2LmdldFRhc2soKTsKLSAgICAgICAgICAgICAgICBpbnQgdGFza0luZGV4ID0gbVN0YWNrLmluZGV4T2ZTdGFja1Rhc2sodGFzayk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhc2suaXNGcmVlZm9ybVRhc2soKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVN0YWNrUmFuZ2VbMV0gPD0gdGFza0luZGV4ICYmIHRhc2tJbmRleCA8PSB2aXNpYmxlU3RhY2tSYW5nZVswXSkgewotICAgICAgICAgICAgICAgICAgICBtVG1wVGFza1ZpZXdNYXAucHV0KHRhc2ssIHR2KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAobVRvdWNoRXhwbG9yYXRpb25FbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNlZFRhc2tJbmRleCA9IHRhc2tJbmRleDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXNlZFRhc2sodGFzayk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJyZXR1cm5pbmcgdG8gcG9vbDogIiArIHRhc2sua2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtVmlld1Bvb2wucmV0dXJuVmlld1RvUG9vbCh0dik7CisgICAgICAgIC8vIEdldCBhbGwgdGhlIHRhc2sgdHJhbnNmb3JtcworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8VGFzaz4gdGFza3MgPSBtU3RhY2suZ2V0U3RhY2tUYXNrcygpOworICAgICAgICBmaW5hbCBib29sZWFuIGlzVmFsaWRWaXNpYmxlU3RhY2tSYW5nZSA9IHVwZGF0ZVN0YWNrVHJhbnNmb3JtcyhtQ3VycmVudFRhc2tUcmFuc2Zvcm1zLCB0YXNrcywKKyAgICAgICAgICAgICAgICBzdGFja1Njcm9sbCwgdmlzaWJsZVN0YWNrUmFuZ2UpOworCisgICAgICAgIC8vIFJldHVybiBhbGwgdGhlIGludmlzaWJsZSBjaGlsZHJlbiB0byB0aGUgcG9vbAorICAgICAgICBtVG1wVGFza1ZpZXdNYXAuY2xlYXIoKTsKKyAgICAgICAgZmluYWwgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gZ2V0VGFza1ZpZXdzKCk7CisgICAgICAgIGZpbmFsIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKKyAgICAgICAgaW50IGxhc3RGb2N1c2VkVGFza0luZGV4ID0gLTE7CisgICAgICAgIGZvciAoaW50IGkgPSB0YXNrVmlld0NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGZpbmFsIFRhc2tWaWV3IHR2ID0gdGFza1ZpZXdzLmdldChpKTsKKyAgICAgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IHR2LmdldFRhc2soKTsKKyAgICAgICAgICAgIGZpbmFsIGludCB0YXNrSW5kZXggPSBtU3RhY2suaW5kZXhPZlN0YWNrVGFzayh0YXNrKTsKKworICAgICAgICAgICAgaWYgKHRhc2suaXNGcmVlZm9ybVRhc2soKSB8fAorICAgICAgICAgICAgICAgICAgICB2aXNpYmxlU3RhY2tSYW5nZVsxXSA8PSB0YXNrSW5kZXggJiYgdGFza0luZGV4IDw9IHZpc2libGVTdGFja1JhbmdlWzBdKSB7CisgICAgICAgICAgICAgICAgbVRtcFRhc2tWaWV3TWFwLnB1dCh0YXNrLCB0dik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdEZvY3VzZWRUYXNrSW5kZXggPSB0YXNrSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJlc2V0Rm9jdXNlZFRhc2sodGFzayk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1WaWV3UG9vbC5yZXR1cm5WaWV3VG9Qb29sKHR2KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUGljayB1cCBhbGwgdGhlIGZyZWVmb3JtIHRhc2tzCi0gICAgICAgICAgICBpbnQgZmlyc3RWaXNTdGFja0luZGV4ID0gaXNWYWxpZFZpc2libGVTdGFja1JhbmdlID8gdmlzaWJsZVN0YWNrUmFuZ2VbMF0gOiAwOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1TdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpIC0gMTsgaSA+PSBmaXJzdFZpc1N0YWNrSW5kZXg7IGktLSkgewotICAgICAgICAgICAgICAgIFRhc2sgdGFzayA9IHRhc2tzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhc2suaXNGcmVlZm9ybVRhc2soKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVGFza1ZpZXdUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbUxheW91dEFsZ29yaXRobS5nZXRTdGFja1RyYW5zZm9ybSh0YXNrLCBzdGFja1Njcm9sbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VGFza1RyYW5zZm9ybXMuZ2V0KGkpLCBudWxsKTsKLSAgICAgICAgICAgICAgICBUYXNrVmlldyB0diA9IG1UbXBUYXNrVmlld01hcC5nZXQodGFzayk7Ci0gICAgICAgICAgICAgICAgaWYgKHR2ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJwaWNraW5nIHVwIGZyb20gcG9vbDogIiArIHRhc2sua2V5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0diA9IG1WaWV3UG9vbC5waWNrVXBWaWV3RnJvbVBvb2wodGFzaywgdGFzayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVhdHRhY2ggaXQgaW4gdGhlIHJpZ2h0IHogb3JkZXIKLSAgICAgICAgICAgICAgICAgICAgaW50IHRhc2tJbmRleCA9IG1TdGFjay5pbmRleE9mU3RhY2tUYXNrKHRhc2spOwotICAgICAgICAgICAgICAgICAgICBpbnQgaW5zZXJ0SW5kZXggPSBmaW5kVGFza1ZpZXdJbnNlcnRJbmRleCh0YXNrLCB0YXNrSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0SW5kZXggIT0gZ2V0VGFza1ZpZXdzKCkuaW5kZXhPZih0dikpewotICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoVmlld0Zyb21QYXJlbnQodHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNoVmlld1RvUGFyZW50KHR2LCBpbnNlcnRJbmRleCwgdHYuZ2V0TGF5b3V0UGFyYW1zKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQW5pbWF0ZSB0aGUgdGFzayBpbnRvIHBsYWNlCi0gICAgICAgICAgICAgICAgdHYudXBkYXRlVmlld1Byb3BlcnRpZXNUb1Rhc2tUcmFuc2Zvcm0odHJhbnNmb3JtLCB0cmFuc2Zvcm0uY2xpcEJvdHRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1ZpZXdzQW5pbWF0aW9uRHVyYXRpb24sIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgbVJlcXVlc3RVcGRhdGVDbGlwcGluZ0xpc3RlbmVyKTsKLQotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFzayB2aWV3cyBsaXN0IGFmdGVyIGFkZGluZyB0aGUgbmV3IHRhc2sgdmlldwotICAgICAgICAgICAgICAgIHVwZGF0ZVRhc2tWaWV3c0xpc3QoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUGljayB1cCBhbGwgdGhlIG5ld2x5IHZpc2libGUgY2hpbGRyZW4gYW5kIHVwZGF0ZSBhbGwgdGhlIGV4aXN0aW5nIGNoaWxkcmVuCi0gICAgICAgICAgICBmb3IgKGludCBpID0gdmlzaWJsZVN0YWNrUmFuZ2VbMF07Ci0gICAgICAgICAgICAgICAgICAgIGlzVmFsaWRWaXNpYmxlU3RhY2tSYW5nZSAmJiBpID49IHZpc2libGVTdGFja1JhbmdlWzFdOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBUYXNrIHRhc2sgPSB0YXNrcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgVGFza1ZpZXdUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbUN1cnJlbnRUYXNrVHJhbnNmb3Jtcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSBtVG1wVGFza1ZpZXdNYXAuZ2V0KHRhc2spOwotCi0gICAgICAgICAgICAgICAgaWYgKHR2ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdHYgPSBtVmlld1Bvb2wucGlja1VwVmlld0Zyb21Qb29sKHRhc2ssIHRhc2spOwotICAgICAgICAgICAgICAgICAgICBpZiAobVN0YWNrVmlld3NBbmltYXRpb25EdXJhdGlvbiA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBpdGVtcyBpbiB0aGUgbGlzdCwgcHV0IHRoZW0gaW4gc3RhcnQgYW5pbWF0aW5nIHRoZW0gZnJvbSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcHJvcmlhdGUgZW5kcyBvZiB0aGUgbGlzdCB3aGVyZSB0aGV5IGFyZSBleHBlY3RlZCB0byBhcHBlYXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGbG9hdC5jb21wYXJlKHRyYW5zZm9ybS5wLCAwZikgPD0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhY2tCYWNrVHJhbnNmb3JtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1N0YWNrQmFja1RyYW5zZm9ybSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MYXlvdXRBbGdvcml0aG0uZ2V0U3RhY2tUcmFuc2Zvcm0oMGYsIDBmLCBtVG1wU3RhY2tCYWNrVHJhbnNmb3JtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0di51cGRhdGVWaWV3UHJvcGVydGllc1RvVGFza1RyYW5zZm9ybShtVG1wU3RhY2tCYWNrVHJhbnNmb3JtLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IsIG1SZXF1ZXN0VXBkYXRlQ2xpcHBpbmdMaXN0ZW5lcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhY2tGcm9udFRyYW5zZm9ybSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNTdGFja0Zyb250VHJhbnNmb3JtID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUxheW91dEFsZ29yaXRobS5nZXRTdGFja1RyYW5zZm9ybSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGF5b3V0QWxnb3JpdGhtLmdldFN0YWNrRnJvbnRUYXNrUHJvZ3Jlc3MoMGYpLCAwZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wU3RhY2tGcm9udFRyYW5zZm9ybSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2LnVwZGF0ZVZpZXdQcm9wZXJ0aWVzVG9UYXNrVHJhbnNmb3JtKG1UbXBTdGFja0Zyb250VHJhbnNmb3JtLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IsIG1SZXF1ZXN0VXBkYXRlQ2xpcHBpbmdMaXN0ZW5lcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBbmltYXRlIHRoZSB0YXNrIGludG8gcGxhY2UsIHRoZSBjbGlwIGZvciBzdGFjayB0YXNrcyB3aWxsIGJlIGNhbGN1bGF0ZWQgaW4KLSAgICAgICAgICAgICAgICAvLyBjbGlwVGFza1ZpZXdzKCkKLSAgICAgICAgICAgICAgICB0di51cGRhdGVWaWV3UHJvcGVydGllc1RvVGFza1RyYW5zZm9ybSh0cmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICB0di5nZXRWaWV3Qm91bmRzKCkuZ2V0Q2xpcEJvdHRvbSgpLCBtU3RhY2tWaWV3c0FuaW1hdGlvbkR1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IsIG1SZXF1ZXN0VXBkYXRlQ2xpcHBpbmdMaXN0ZW5lcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZm9jdXMgaWYgdGhlIHByZXZpb3VzIGZvY3VzZWQgdGFzayB3YXMgcmV0dXJuZWQgdG8gdGhlIHZpZXcgcG9vbAotICAgICAgICAgICAgaWYgKGxhc3RGb2N1c2VkVGFza0luZGV4ICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3RGb2N1c2VkVGFza0luZGV4IDwgdmlzaWJsZVN0YWNrUmFuZ2VbMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZFRhc2sodmlzaWJsZVN0YWNrUmFuZ2VbMV0sIGZhbHNlIC8qIGFuaW1hdGVkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0Rm9jdXNlZFRhc2sodmlzaWJsZVN0YWNrUmFuZ2VbMF0sIGZhbHNlIC8qIGFuaW1hdGVkICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBSZXNldCB0aGUgcmVxdWVzdC1zeW5jaHJvbml6ZSBwYXJhbXMKLSAgICAgICAgICAgIG1TdGFja1ZpZXdzQW5pbWF0aW9uRHVyYXRpb24gPSAwOwotICAgICAgICAgICAgbVN0YWNrVmlld3NEaXJ0eSA9IGZhbHNlOwotICAgICAgICAgICAgbVN0YWNrVmlld3NDbGlwRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFBpY2sgdXAgYWxsIHRoZSBuZXdseSB2aXNpYmxlIGNoaWxkcmVuCisgICAgICAgIGludCBsYXN0VmlzU3RhY2tJbmRleCA9IGlzVmFsaWRWaXNpYmxlU3RhY2tSYW5nZSA/IHZpc2libGVTdGFja1JhbmdlWzFdIDogMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IG1TdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpIC0gMTsgaSA+PSBsYXN0VmlzU3RhY2tJbmRleDsgaS0tKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSB0YXNrcy5nZXQoaSk7CisgICAgICAgICAgICBmaW5hbCBUYXNrVmlld1RyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtQ3VycmVudFRhc2tUcmFuc2Zvcm1zLmdldChpKTsKKworICAgICAgICAgICAgLy8gU2tpcCB0aGUgaW52aXNpYmxlIG5vbi1mcmVlZm9ybSBzdGFjayB0YXNrcworICAgICAgICAgICAgaWYgKGkgPiB2aXNpYmxlU3RhY2tSYW5nZVswXSAmJiAhdGFzay5pc0ZyZWVmb3JtVGFzaygpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRhc2tWaWV3IHR2ID0gbVRtcFRhc2tWaWV3TWFwLmdldCh0YXNrKTsKKyAgICAgICAgICAgIGlmICh0diA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdHYgPSBtVmlld1Bvb2wucGlja1VwVmlld0Zyb21Qb29sKHRhc2ssIHRhc2spOworICAgICAgICAgICAgICAgIGlmICh0YXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdHYudXBkYXRlVmlld1Byb3BlcnRpZXNUb1Rhc2tUcmFuc2Zvcm0odHJhbnNmb3JtLCBUYXNrVmlld0FuaW1hdGlvbi5JTU1FRElBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlcXVlc3RVcGRhdGVDbGlwcGluZ0xpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoRmxvYXQuY29tcGFyZSh0cmFuc2Zvcm0ucCwgMGYpIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnVwZGF0ZVZpZXdQcm9wZXJ0aWVzVG9UYXNrVHJhbnNmb3JtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGF5b3V0QWxnb3JpdGhtLmdldEJhY2tPZlN0YWNrVHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tWaWV3QW5pbWF0aW9uLklNTUVESUFURSwgbVJlcXVlc3RVcGRhdGVDbGlwcGluZ0xpc3RlbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnVwZGF0ZVZpZXdQcm9wZXJ0aWVzVG9UYXNrVHJhbnNmb3JtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTGF5b3V0QWxnb3JpdGhtLmdldEZyb250T2ZTdGFja1RyYW5zZm9ybSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYXNrVmlld0FuaW1hdGlvbi5JTU1FRElBVEUsIG1SZXF1ZXN0VXBkYXRlQ2xpcHBpbmdMaXN0ZW5lcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFJlYXR0YWNoIGl0IGluIHRoZSByaWdodCB6IG9yZGVyCisgICAgICAgICAgICAgICAgZmluYWwgaW50IHRhc2tJbmRleCA9IG1TdGFjay5pbmRleE9mU3RhY2tUYXNrKHRhc2spOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbnNlcnRJbmRleCA9IGZpbmRUYXNrVmlld0luc2VydEluZGV4KHRhc2ssIHRhc2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGluc2VydEluZGV4ICE9IGdldFRhc2tWaWV3cygpLmluZGV4T2YodHYpKXsKKyAgICAgICAgICAgICAgICAgICAgZGV0YWNoVmlld0Zyb21QYXJlbnQodHYpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2hWaWV3VG9QYXJlbnQodHYsIGluc2VydEluZGV4LCB0di5nZXRMYXlvdXRQYXJhbXMoKSk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRhc2tWaWV3c0xpc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBVcGRhdGUgdGhlIGZvY3VzIGlmIHRoZSBwcmV2aW91cyBmb2N1c2VkIHRhc2sgd2FzIHJldHVybmVkIHRvIHRoZSB2aWV3IHBvb2wKKyAgICAgICAgaWYgKGxhc3RGb2N1c2VkVGFza0luZGV4ICE9IC0xKSB7CisgICAgICAgICAgICBpZiAobGFzdEZvY3VzZWRUYXNrSW5kZXggPCB2aXNpYmxlU3RhY2tSYW5nZVsxXSkgeworICAgICAgICAgICAgICAgIHNldEZvY3VzZWRUYXNrKHZpc2libGVTdGFja1JhbmdlWzFdLCBmYWxzZSAvKiBzY3JvbGxUb1Rhc2sgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIHJlcXVlc3RWaWV3Rm9jdXMgKi8pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzZXRGb2N1c2VkVGFzayh2aXNpYmxlU3RhY2tSYW5nZVswXSwgZmFsc2UgLyogc2Nyb2xsVG9UYXNrICovLAorICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiByZXF1ZXN0Vmlld0ZvY3VzICovKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbmNlbHMgYW55IGV4aXN0aW5nIHtAbGluayBUYXNrVmlld30gYW5pbWF0aW9ucywgYW5kIHVwZGF0ZXMgZWFjaCB7QGxpbmsgVGFza1ZpZXd9IHRvIGl0cworICAgICAqIGN1cnJlbnQgcG9zaXRpb24gYXMgZGVmaW5lZCBieSB0aGUge0BsaW5rIFRhc2tTdGFja0xheW91dEFsZ29yaXRobX0uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRhc2tWaWV3c1RvTGF5b3V0KFRhc2tWaWV3QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAgICAgICAvLyBJZiB3ZSBoYWQgYSBkZWZlcnJlZCBhbmltYXRpb24sIGNhbmNlbCB0aGF0CisgICAgICAgIG1EZWZlcnJlZFRhc2tWaWV3VXBkYXRlQW5pbWF0aW9uID0gbnVsbDsKKworICAgICAgICAvLyBDYW5jZWwgYWxsIHRhc2sgdmlldyBhbmltYXRpb25zCisgICAgICAgIGNhbmNlbEFsbFRhc2tWaWV3QW5pbWF0aW9ucygpOworCisgICAgICAgIC8vIEZldGNoIHRoZSBjdXJyZW50IHNldCBvZiBUYXNrVmlld3MKKyAgICAgICAgYmluZFRhc2tWaWV3c1dpdGhTdGFjaygpOworCisgICAgICAgIC8vIEFuaW1hdGUgdGhlbSB0byB0aGVpciBmaW5hbCB0cmFuc2Zvcm1zIHdpdGggdGhlIGdpdmVuIGFuaW1hdGlvbgorICAgICAgICBMaXN0PFRhc2tWaWV3PiB0YXNrVmlld3MgPSBnZXRUYXNrVmlld3MoKTsKKyAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhc2tWaWV3Q291bnQ7IGkrKykgeworICAgICAgICAgICAgZmluYWwgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgZmluYWwgaW50IHRhc2tJbmRleCA9IG1TdGFjay5pbmRleE9mU3RhY2tUYXNrKHR2LmdldFRhc2soKSk7CisgICAgICAgICAgICBmaW5hbCBUYXNrVmlld1RyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtQ3VycmVudFRhc2tUcmFuc2Zvcm1zLmdldCh0YXNrSW5kZXgpOworCisgICAgICAgICAgICB1cGRhdGVUYXNrVmlld1RvVHJhbnNmb3JtKHR2LCB0cmFuc2Zvcm0sIGFuaW1hdGlvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQb3N0cyBhbiB1cGRhdGUgdG8gc3luY2hyb25pemUgdGhlIHtAbGluayBUYXNrVmlld31zIHdpdGggdGhlIHN0YWNrIG9uIHRoZSBuZXh0IGZyYW1lLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYXNrVmlld3NUb0xheW91dE9uTmV4dEZyYW1lKFRhc2tWaWV3QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAgICAgICBtRGVmZXJyZWRUYXNrVmlld1VwZGF0ZUFuaW1hdGlvbiA9IGFuaW1hdGlvbjsKKyAgICAgICAgcG9zdEludmFsaWRhdGVPbkFuaW1hdGlvbigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCB0byB1cGRhdGUgYSBzcGVjaWZpYyB7QGxpbmsgVGFza1ZpZXd9IHRvIGEgZ2l2ZW4ge0BsaW5rIFRhc2tWaWV3VHJhbnNmb3JtfSB3aXRoIGEKKyAgICAgKiBnaXZlbiBzZXQgb2Yge0BsaW5rIFRhc2tWaWV3QW5pbWF0aW9ufSBwcm9wZXJ0aWVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRhc2tWaWV3VG9UcmFuc2Zvcm0oVGFza1ZpZXcgdGFza1ZpZXcsIFRhc2tWaWV3VHJhbnNmb3JtIHRyYW5zZm9ybSwKKyAgICAgICAgICAgIFRhc2tWaWV3QW5pbWF0aW9uIGFuaW1hdGlvbikgeworICAgICAgICB0YXNrVmlldy51cGRhdGVWaWV3UHJvcGVydGllc1RvVGFza1RyYW5zZm9ybSh0cmFuc2Zvcm0sIGFuaW1hdGlvbiwKKyAgICAgICAgICAgICAgICBtUmVxdWVzdFVwZGF0ZUNsaXBwaW5nTGlzdGVuZXIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENhbmNlbHMgYWxsIHtAbGluayBUYXNrVmlld30gYW5pbWF0aW9ucy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgY2FuY2VsQWxsVGFza1ZpZXdBbmltYXRpb25zKCkgeworICAgICAgICBMaXN0PFRhc2tWaWV3PiB0YXNrVmlld3MgPSBnZXRUYXNrVmlld3MoKTsKKyAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhc2tWaWV3Q291bnQ7IGkrKykgeworICAgICAgICAgICAgZmluYWwgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOworICAgICAgICAgICAgdHYuY2FuY2VsVHJhbnNmb3JtQW5pbWF0aW9uKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKICAgICAgKiBVcGRhdGVzIHRoZSBjbGlwIGZvciBlYWNoIG9mIHRoZSB0YXNrIHZpZXdzIGZyb20gYmFjayB0byBmcm9udC4KICAgICAgKi8KLSAgICB2b2lkIGNsaXBUYXNrVmlld3MoYm9vbGVhbiBmb3JjZVVwZGF0ZSkgeworICAgIHByaXZhdGUgdm9pZCBjbGlwVGFza1ZpZXdzKCkgewogICAgICAgICBSZWNlbnRzQ29uZmlndXJhdGlvbiBjb25maWcgPSBSZWNlbnRzLmdldENvbmZpZ3VyYXRpb24oKTsKIAogICAgICAgICAvLyBVcGRhdGUgdGhlIGNsaXAgb24gZWFjaCB0YXNrIGNoaWxkCkBAIC01NzYsNiArNTY2LDcgQEAKICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBuZXh0IHZpZXcgdG8gY2xpcCBhZ2FpbnN0CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgdGFza1ZpZXdDb3VudDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIHRtcFR2ID0gdGFza1ZpZXdzLmdldChqKTsKKwogICAgICAgICAgICAgICAgICAgICBpZiAodG1wVHYuc2hvdWxkQ2xpcFZpZXdJblN0YWNrKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZyb250VHYgPSB0bXBUdjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg2LDI2ICs1NzcsMjAgQEAKICAgICAgICAgICAgICAgICAvLyBzdGFja2VkIGFuZCB3ZSBjYW4gbWFrZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdGhpcwogICAgICAgICAgICAgICAgIC8vIHRhc2sgcmVsYXRpdmUgdG8gdGhlIG9uZXMgaW4gZnJvbnQgb2YgaXQuCiAgICAgICAgICAgICAgICAgaWYgKGZyb250VHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtVG1wVGFza1JlY3Quc2V0KG1MYXlvdXRBbGdvcml0aG0ubVRhc2tSZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgbVRtcFRhc2tSZWN0Lm9mZnNldCgwLCB0di5nZXRUcmFuc2xhdGlvblkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5zY2FsZVJlY3RBYm91dENlbnRlcihtVG1wVGFza1JlY3QsIHR2LmdldFNjYWxlWCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGFza0JvdHRvbSA9IG1UbXBUYXNrUmVjdC5ib3R0b207Ci0gICAgICAgICAgICAgICAgICAgIG1UbXBUYXNrUmVjdC5zZXQobUxheW91dEFsZ29yaXRobS5tVGFza1JlY3QpOwotICAgICAgICAgICAgICAgICAgICBtVG1wVGFza1JlY3Qub2Zmc2V0KDAsIGZyb250VHYuZ2V0VHJhbnNsYXRpb25ZKCkpOwotICAgICAgICAgICAgICAgICAgICBVdGlsaXRpZXMuc2NhbGVSZWN0QWJvdXRDZW50ZXIobVRtcFRhc2tSZWN0LCBmcm9udFR2LmdldFNjYWxlWCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgZnJvbnRUYXNrVG9wID0gbVRtcFRhc2tSZWN0LnRvcDsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGFza0JvdHRvbSA9IHR2LmdldEJvdHRvbSgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBmcm9udFRhc2tUb3AgPSBmcm9udFR2LmdldFRvcCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZnJvbnRUYXNrVG9wIDwgdGFza0JvdHRvbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFwIHRoZSBzdGFjayB2aWV3IHNwYWNlIGNvb3JkaW5hdGUgKHRoZSByZWN0cykgdG8gdmlldyBzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEJvdHRvbSA9IChpbnQpICgodGFza0JvdHRvbSAtIGZyb250VGFza1RvcCkgLyB0di5nZXRTY2FsZVgoKSkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEJvdHRvbSA9IChpbnQpICh0YXNrQm90dG9tIC0gZnJvbnRUYXNrVG9wKSAtIG1UYXNrQ29ybmVyUmFkaXVzUHg7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0di5nZXRWaWV3Qm91bmRzKCkuc2V0Q2xpcEJvdHRvbShjbGlwQm90dG9tLCBmb3JjZVVwZGF0ZSk7CisgICAgICAgICAgICB0di5nZXRWaWV3Qm91bmRzKCkuc2V0Q2xpcEJvdHRvbShjbGlwQm90dG9tKTsKICAgICAgICAgICAgIGlmICghY29uZmlnLnVzZUhhcmR3YXJlTGF5ZXJzKSB7CiAgICAgICAgICAgICAgICAgdHYubVRodW1ibmFpbFZpZXcudXBkYXRlVGh1bWJuYWlsVmlzaWJpbGl0eShjbGlwQm90dG9tIC0gdHYuZ2V0UGFkZGluZ0JvdHRvbSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtU3RhY2tWaWV3c0NsaXBEaXJ0eSA9IGZhbHNlOworICAgICAgICBtVGFza1ZpZXdzQ2xpcERpcnR5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgLyoqIFVwZGF0ZXMgdGhlIG1pbiBhbmQgbWF4IHZpcnR1YWwgc2Nyb2xsIGJvdW5kcyAqLwpAQCAtNjM2LDE2ICs2MjEsNyBAQAogICAgICAqCiAgICAgICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCB0aGUgc3RhY2sgd2lsbCBzY3JvbGwgYXMgYSBwYXJ0IG9mIHRoaXMgZm9jdXMgY2hhbmdlCiAgICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIHNldEZvY3VzZWRUYXNrKGludCB0YXNrSW5kZXgsIGJvb2xlYW4gc2Nyb2xsVG9UYXNrLCBmaW5hbCBib29sZWFuIGFuaW1hdGVkKSB7Ci0gICAgICAgIHJldHVybiBzZXRGb2N1c2VkVGFzayh0YXNrSW5kZXgsIHNjcm9sbFRvVGFzaywgYW5pbWF0ZWQsIHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGZvY3VzZWQgdGFzayB0byB0aGUgcHJvdmlkZWQgKGJvdW5kZWQgdGFza0luZGV4KS4KLSAgICAgKgotICAgICAqIEByZXR1cm4gd2hldGhlciBvciBub3QgdGhlIHN0YWNrIHdpbGwgc2Nyb2xsIGFzIGEgcGFydCBvZiB0aGlzIGZvY3VzIGNoYW5nZQotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBzZXRGb2N1c2VkVGFzayhpbnQgdGFza0luZGV4LCBib29sZWFuIHNjcm9sbFRvVGFzaywgZmluYWwgYm9vbGVhbiBhbmltYXRlZCwKKyAgICBwcml2YXRlIGJvb2xlYW4gc2V0Rm9jdXNlZFRhc2soaW50IHRhc2tJbmRleCwgYm9vbGVhbiBzY3JvbGxUb1Rhc2ssCiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHJlcXVlc3RWaWV3Rm9jdXMpIHsKICAgICAgICAgLy8gRmluZCB0aGUgbmV4dCB0YXNrIHRvIGZvY3VzCiAgICAgICAgIGludCBuZXdGb2N1c2VkVGFza0luZGV4ID0gbVN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkgPiAwID8KQEAgLTY2NiwxOSArNjQyLDE0IEBACiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgICAgICAgICBUYXNrVmlldyB0diA9IGdldENoaWxkVmlld0ZvclRhc2sobmV3Rm9jdXNlZFRhc2spOwogICAgICAgICAgICAgICAgICAgICBpZiAodHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHYuc2V0Rm9jdXNlZFN0YXRlKHRydWUsIGFuaW1hdGVkLCByZXF1ZXN0Vmlld0ZvY3VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR2LnNldEZvY3VzZWRTdGF0ZSh0cnVlLCByZXF1ZXN0Vmlld0ZvY3VzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07CiAKICAgICAgICAgICAgIGlmIChzY3JvbGxUb1Rhc2spIHsKICAgICAgICAgICAgICAgICAvLyBUT0RPOiBDZW50ZXIgdGhlIG5ld2x5IGZvY3VzZWQgdGFzayB2aWV3LCBvbmx5IGlmIG5vdCBmcmVlZm9ybQotICAgICAgICAgICAgICAgIFJlY2VudHNEZWJ1Z0ZsYWdzIGRlYnVnRmxhZ3MgPSBSZWNlbnRzLmdldERlYnVnRmxhZ3MoKTsKICAgICAgICAgICAgICAgICBmbG9hdCBuZXdTY3JvbGwgPSBtTGF5b3V0QWxnb3JpdGhtLmdldFN0YWNrU2Nyb2xsRm9yVGFzayhuZXdGb2N1c2VkVGFzayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWJ1Z0ZsYWdzLmlzRnVsbHNjcmVlblRodW1ibmFpbHNFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbmV3U2Nyb2xsIC09IDAuNWY7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5ld1Njcm9sbCA9IG1TdGFja1Njcm9sbGVyLmdldEJvdW5kZWRTdGFja1Njcm9sbChuZXdTY3JvbGwpOwogICAgICAgICAgICAgICAgIGlmIChGbG9hdC5jb21wYXJlKG5ld1Njcm9sbCwgbVN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSkgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5hbmltYXRlU2Nyb2xsKG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksIG5ld1Njcm9sbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1Rhc2tSdW5uYWJsZSk7CkBAIC02ODYsMTAgKzY1Nyw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgLy8gQ2FuY2VsIGFueSBydW5uaW5nIGVudGVyIGFuaW1hdGlvbnMgYXQgdGhpcyBwb2ludCB3aGVuIHdlIHNjcm9sbCBhcyB3ZWxsCiAgICAgICAgICAgICAgICAgICAgIGlmICghbUVudGVyQW5pbWF0aW9uQ29tcGxldGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IGdldFRhc2tWaWV3cygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChUYXNrVmlldyB0diA6IHRhc2tWaWV3cykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR2LmNhbmNlbEVudGVyUmVjZW50c0FuaW1hdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQWxsVGFza1ZpZXdBbmltYXRpb25zKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmb2N1c1Rhc2tSdW5uYWJsZS5ydW4oKTsKQEAgLTc2NCw3ICs3MzIsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChuZXdJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgYm9vbGVhbiB3aWxsU2Nyb2xsID0gc2V0Rm9jdXNlZFRhc2sobmV3SW5kZXgsIHRydWUsIGFuaW1hdGVkKTsKKyAgICAgICAgICAgIGJvb2xlYW4gd2lsbFNjcm9sbCA9IHNldEZvY3VzZWRUYXNrKG5ld0luZGV4LCB0cnVlIC8qIHNjcm9sbFRvVGFzayAqLywKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiByZXF1ZXN0Vmlld0ZvY3VzICovKTsKICAgICAgICAgICAgIGlmICh3aWxsU2Nyb2xsICYmIGNhbmNlbFdpbmRvd0FuaW1hdGlvbnMpIHsKICAgICAgICAgICAgICAgICAvLyBBcyB3ZSBpdGVyYXRlIHRvIHRoZSBuZXh0L3ByZXZpb3VzIHRhc2ssIGNhbmNlbCBhbnkgY3VycmVudC9sYWdnaW5nIHdpbmRvdwogICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24gYW5pbWF0aW9ucwpAQCAtNzgwLDcgKzc0OSw3IEBACiAgICAgICAgIGlmICh0YXNrICE9IG51bGwpIHsKICAgICAgICAgICAgIFRhc2tWaWV3IHR2ID0gZ2V0Q2hpbGRWaWV3Rm9yVGFzayh0YXNrKTsKICAgICAgICAgICAgIGlmICh0diAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdHYuc2V0Rm9jdXNlZFN0YXRlKGZhbHNlLCBmYWxzZSAvKiBhbmltYXRlZCAqLywgZmFsc2UgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7CisgICAgICAgICAgICAgICAgdHYuc2V0Rm9jdXNlZFN0YXRlKGZhbHNlLCBmYWxzZSAvKiByZXF1ZXN0Vmlld0ZvY3VzICovKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtRm9jdXNlZFRhc2sgPSBudWxsOwpAQCAtODAzLDcgKzc3Miw3IEBACiAgICAgICAgICAgICBUYXNrVmlldyBmcm9udE1vc3RUYXNrID0gdGFza1ZpZXdzLmdldCh0YXNrVmlld0NvdW50IC0gMSk7CiAgICAgICAgICAgICBldmVudC5zZXRGcm9tSW5kZXgobVN0YWNrLmluZGV4T2ZTdGFja1Rhc2soYmFja01vc3RUYXNrLmdldFRhc2soKSkpOwogICAgICAgICAgICAgZXZlbnQuc2V0VG9JbmRleChtU3RhY2suaW5kZXhPZlN0YWNrVGFzayhmcm9udE1vc3RUYXNrLmdldFRhc2soKSkpOwotICAgICAgICAgICAgZXZlbnQuc2V0Q29udGVudERlc2NyaXB0aW9uKGZyb250TW9zdFRhc2suZ2V0VGFzaygpLmFjdGl2aXR5TGFiZWwpOworICAgICAgICAgICAgZXZlbnQuc2V0Q29udGVudERlc2NyaXB0aW9uKGZyb250TW9zdFRhc2suZ2V0VGFzaygpLnRpdGxlKTsKICAgICAgICAgfQogICAgICAgICBldmVudC5zZXRJdGVtQ291bnQobVN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkpOwogICAgICAgICBldmVudC5zZXRTY3JvbGxZKG1TdGFja1Njcm9sbGVyLm1TY3JvbGxlci5nZXRDdXJyWSgpKTsKQEAgLTgyOCw2ICs3OTcsMjQgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgUGFyY2VsYWJsZSBvblNhdmVJbnN0YW5jZVN0YXRlKCkgeworICAgICAgICBCdW5kbGUgc2F2ZWRTdGF0ZSA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgc2F2ZWRTdGF0ZS5wdXRQYXJjZWxhYmxlKEtFWV9TQVZFRF9TVEFURV9TVVBFUiwgc3VwZXIub25TYXZlSW5zdGFuY2VTdGF0ZSgpKTsKKyAgICAgICAgc2F2ZWRTdGF0ZS5wdXRGbG9hdChLRVlfU0FWRURfU1RBVEVfTEFZT1VUX0ZPQ1VTRURfU1RBVEUsIG1MYXlvdXRBbGdvcml0aG0uZ2V0Rm9jdXNTdGF0ZSgpKTsKKyAgICAgICAgc2F2ZWRTdGF0ZS5wdXRGbG9hdChLRVlfU0FWRURfU1RBVEVfTEFZT1VUX1NUQUNLX1NDUk9MTCwgbVN0YWNrU2Nyb2xsZXIuZ2V0U3RhY2tTY3JvbGwoKSk7CisgICAgICAgIHJldHVybiBzdXBlci5vblNhdmVJbnN0YW5jZVN0YXRlKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25SZXN0b3JlSW5zdGFuY2VTdGF0ZShQYXJjZWxhYmxlIHN0YXRlKSB7CisgICAgICAgIEJ1bmRsZSBzYXZlZFN0YXRlID0gKEJ1bmRsZSkgc3RhdGU7CisgICAgICAgIHN1cGVyLm9uUmVzdG9yZUluc3RhbmNlU3RhdGUoc2F2ZWRTdGF0ZS5nZXRQYXJjZWxhYmxlKEtFWV9TQVZFRF9TVEFURV9TVVBFUikpOworCisgICAgICAgIG1MYXlvdXRBbGdvcml0aG0uc2V0Rm9jdXNTdGF0ZShzYXZlZFN0YXRlLmdldEZsb2F0KEtFWV9TQVZFRF9TVEFURV9MQVlPVVRfRk9DVVNFRF9TVEFURSkpOworICAgICAgICBtU3RhY2tTY3JvbGxlci5zZXRTdGFja1Njcm9sbChzYXZlZFN0YXRlLmdldEZsb2F0KEtFWV9TQVZFRF9TVEFURV9MQVlPVVRfU1RBQ0tfU0NST0xMKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRBY2Nlc3NpYmlsaXR5Q2xhc3NOYW1lKCkgewogICAgICAgICByZXR1cm4gVGFza1N0YWNrVmlldy5jbGFzcy5nZXROYW1lKCk7CiAgICAgfQpAQCAtODY3LDEyICs4NTQsMTggQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNvbXB1dGVTY3JvbGwoKSB7Ci0gICAgICAgIG1TdGFja1Njcm9sbGVyLmNvbXB1dGVTY3JvbGwoKTsKLSAgICAgICAgLy8gU3luY2hyb25pemUgdGhlIHZpZXdzCi0gICAgICAgIHN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbCgpOwotICAgICAgICBjbGlwVGFza1ZpZXdzKGZhbHNlIC8qIGZvcmNlVXBkYXRlICovKTsKLSAgICAgICAgLy8gTm90aWZ5IGFjY2Vzc2liaWxpdHkKLSAgICAgICAgc2VuZEFjY2Vzc2liaWxpdHlFdmVudChBY2Nlc3NpYmlsaXR5RXZlbnQuVFlQRV9WSUVXX1NDUk9MTEVEKTsKKyAgICAgICAgaWYgKG1TdGFja1Njcm9sbGVyLmNvbXB1dGVTY3JvbGwoKSkgeworICAgICAgICAgICAgLy8gTm90aWZ5IGFjY2Vzc2liaWxpdHkKKyAgICAgICAgICAgIHNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfVklFV19TQ1JPTExFRCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1EZWZlcnJlZFRhc2tWaWV3VXBkYXRlQW5pbWF0aW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIHVwZGF0ZVRhc2tWaWV3c1RvTGF5b3V0KG1EZWZlcnJlZFRhc2tWaWV3VXBkYXRlQW5pbWF0aW9uKTsKKyAgICAgICAgICAgIG1UYXNrVmlld3NDbGlwRGlydHkgPSB0cnVlOworICAgICAgICAgICAgbURlZmVycmVkVGFza1ZpZXdVcGRhdGVBbmltYXRpb24gPSBudWxsOworICAgICAgICB9CisgICAgICAgIGlmIChtVGFza1ZpZXdzQ2xpcERpcnR5KSB7CisgICAgICAgICAgICBjbGlwVGFza1ZpZXdzKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogQ29tcHV0ZXMgdGhlIHN0YWNrIGFuZCB0YXNrIHJlY3RzICovCkBAIC05MTksMTMgKzkxMiwxMiBAQAogICAgICAgICAvLyBDb21wdXRlIG91ciBzdGFjay90YXNrIHJlY3RzCiAgICAgICAgIGNvbXB1dGVSZWN0cyhtVGFza1N0YWNrQm91bmRzKTsKIAotICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBsYXlvdXQsIHRoZW4gc2Nyb2xsIHRvIHRoZSBmcm9udCBvZiB0aGUgc3RhY2sgYW5kIHN5bmNocm9uaXplIHRoZQotICAgICAgICAvLyBzdGFjayB2aWV3cyBpbW1lZGlhdGVseSB0byBsb2FkIGFsbCB0aGUgdmlld3MKKyAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgbGF5b3V0LCB0aGVuIHNjcm9sbCB0byB0aGUgZnJvbnQgb2YgdGhlIHN0YWNrLCB0aGVuIHVwZGF0ZSB0aGUKKyAgICAgICAgLy8gVGFza1ZpZXdzIHdpdGggdGhlIHN0YWNrIHNvIHRoYXQgd2UgY2FuIGxheSB0aGVtIG91dAogICAgICAgICBpZiAobUF3YWl0aW5nRmlyc3RMYXlvdXQpIHsKICAgICAgICAgICAgIG1TdGFja1Njcm9sbGVyLnNldFN0YWNrU2Nyb2xsVG9Jbml0aWFsU3RhdGUoKTsKLSAgICAgICAgICAgIHJlcXVlc3RTeW5jaHJvbml6ZVN0YWNrVmlld3NXaXRoTW9kZWwoKTsKLSAgICAgICAgICAgIHN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbCgpOwogICAgICAgICB9CisgICAgICAgIGJpbmRUYXNrVmlld3NXaXRoU3RhY2soKTsKIAogICAgICAgICAvLyBNZWFzdXJlIGVhY2ggb2YgdGhlIFRhc2tWaWV3cwogICAgICAgICBtVG1wVGFza1ZpZXdzLmNsZWFyKCk7CkBAIC05NzUsNTQgKzk2NywyNSBAQAogICAgICAgICAgICAgICAgICAgICB0YXNrUmVjdC5yaWdodCArIG1UbXBSZWN0LnJpZ2h0LCB0YXNrUmVjdC5ib3R0b20gKyBtVG1wUmVjdC5ib3R0b20pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Bd2FpdGluZ0ZpcnN0TGF5b3V0KSB7Ci0gICAgICAgICAgICBtQXdhaXRpbmdGaXJzdExheW91dCA9IGZhbHNlOwotICAgICAgICAgICAgb25GaXJzdExheW91dCgpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICAgICAgIGlmIChtU3RhY2tTY3JvbGxlci5pc1Njcm9sbE91dE9mQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5ib3VuZFNjcm9sbCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVxdWVzdFN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbCgpOwotICAgICAgICAgICAgc3luY2hyb25pemVTdGFja1ZpZXdzV2l0aE1vZGVsKCk7Ci0gICAgICAgICAgICByZXF1ZXN0VXBkYXRlU3RhY2tWaWV3c0NsaXAoKTsKLSAgICAgICAgICAgIGNsaXBUYXNrVmlld3ModHJ1ZSAvKiBmb3JjZVVwZGF0ZSAqLyk7CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVGFza1ZpZXdzVG9MYXlvdXQoVGFza1ZpZXdBbmltYXRpb24uSU1NRURJQVRFKTsKKyAgICAgICAgY2xpcFRhc2tWaWV3cygpOworCisgICAgICAgIGlmIChtQXdhaXRpbmdGaXJzdExheW91dCB8fCAhbUVudGVyQW5pbWF0aW9uQ29tcGxldGUpIHsKKyAgICAgICAgICAgIG1Bd2FpdGluZ0ZpcnN0TGF5b3V0ID0gZmFsc2U7CisgICAgICAgICAgICBvbkZpcnN0TGF5b3V0KCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvKiogSGFuZGxlciBmb3IgdGhlIGZpcnN0IGxheW91dC4gKi8KICAgICB2b2lkIG9uRmlyc3RMYXlvdXQoKSB7Ci0gICAgICAgIGludCBvZmZzY3JlZW5ZID0gbUxheW91dEFsZ29yaXRobS5tU3RhY2tSZWN0LmJvdHRvbTsKLQotICAgICAgICAvLyBGaW5kIHRoZSBsYXVuY2ggdGFyZ2V0IHRhc2sKLSAgICAgICAgVGFzayBsYXVuY2hUYXJnZXRUYXNrID0gbVN0YWNrLmdldExhdW5jaFRhcmdldCgpOwotICAgICAgICBMaXN0PFRhc2tWaWV3PiB0YXNrVmlld3MgPSBnZXRUYXNrVmlld3MoKTsKLSAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOwotCi0gICAgICAgIC8vIFByZXBhcmUgdGhlIGZpcnN0IHZpZXcgZm9yIGl0cyBlbnRlciBhbmltYXRpb24KLSAgICAgICAgZm9yIChpbnQgaSA9IHRhc2tWaWV3Q291bnQgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOwotICAgICAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOwotICAgICAgICAgICAgYm9vbGVhbiBoaWRlVGFzayA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbGVhbiBvY2NsdWRlc0xhdW5jaFRhcmdldCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGxhdW5jaFRhcmdldFRhc2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG9jY2x1ZGVzTGF1bmNoVGFyZ2V0ID0gbGF1bmNoVGFyZ2V0VGFzay5ncm91cC5pc1Rhc2tBYm92ZVRhc2sodGFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaFRhcmdldFRhc2spOwotICAgICAgICAgICAgICAgIGhpZGVUYXNrID0gU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sobGF1bmNoVGFyZ2V0VGFzay5rZXkuc3RhY2tJZCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkuaXNGcmVlZm9ybVN0YWNrKHRhc2sua2V5LnN0YWNrSWQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHYucHJlcGFyZUVudGVyUmVjZW50c0FuaW1hdGlvbih0YXNrLmlzTGF1bmNoVGFyZ2V0LCBoaWRlVGFzaywgb2NjbHVkZXNMYXVuY2hUYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9mZnNjcmVlblkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlIGVudGVyIGFuaW1hdGlvbiBzdGFydGVkIGFscmVhZHkgYW5kIHdlIGhhdmVuJ3QgY29tcGxldGVkIGEgbGF5b3V0IHlldCwgZG8gdGhlCi0gICAgICAgIC8vIGVudGVyIGFuaW1hdGlvbiBub3cKLSAgICAgICAgaWYgKG1TdGFydEVudGVyQW5pbWF0aW9uUmVxdWVzdGVkQWZ0ZXJMYXlvdXQpIHsKLSAgICAgICAgICAgIHN0YXJ0RW50ZXJSZWNlbnRzQW5pbWF0aW9uKG1TdGFydEVudGVyQW5pbWF0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICBtU3RhcnRFbnRlckFuaW1hdGlvblJlcXVlc3RlZEFmdGVyTGF5b3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICBtU3RhcnRFbnRlckFuaW1hdGlvbkNvbnRleHQgPSBudWxsOwotICAgICAgICB9CisgICAgICAgIC8vIFNldHVwIHRoZSB2aWV3IGZvciB0aGUgZW50ZXIgYW5pbWF0aW9uCisgICAgICAgIG1BbmltYXRpb25IZWxwZXIucHJlcGFyZUZvckVudGVyQW5pbWF0aW9uKCk7CiAKICAgICAgICAgLy8gQW5pbWF0ZSBpbiB0aGUgZnJlZWZvcm0gd29ya3NwYWNlCiAgICAgICAgIGFuaW1hdGVGcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmRBbHBoYSgKQEAgLTEwMzUsMTA4ICs5OTgsMTYgQEAKICAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBjb25maWcuZ2V0TGF1bmNoU3RhdGUoKTsKICAgICAgICAgaW50IGZvY3VzZWRUYXNrSW5kZXggPSBsYXVuY2hTdGF0ZS5nZXRJbml0aWFsRm9jdXNUYXNrSW5kZXgobVN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkpOwogICAgICAgICBpZiAoZm9jdXNlZFRhc2tJbmRleCAhPSAtMSkgewotICAgICAgICAgICAgc2V0Rm9jdXNlZFRhc2soZm9jdXNlZFRhc2tJbmRleCwgZmFsc2UgLyogc2Nyb2xsVG9UYXNrICovLCBmYWxzZSAvKiBhbmltYXRlZCAqLywKKyAgICAgICAgICAgIHNldEZvY3VzZWRUYXNrKGZvY3VzZWRUYXNrSW5kZXgsIGZhbHNlIC8qIHNjcm9sbFRvVGFzayAqLywKICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgdGhlIGhpc3RvcnkgYnV0dG9uIHZpc2liaWxpdHkKLSAgICAgICAgaWYgKG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCkgPCBTSE9XX0hJU1RPUllfQlVUVE9OX1NDUk9MTF9USFJFU0hPTEQpIHsKKyAgICAgICAgaWYgKHNob3VsZFNob3dIaXN0b3J5QnV0dG9uKCkgJiYKKyAgICAgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5nZXRTdGFja1Njcm9sbCgpIDwgU0hPV19ISVNUT1JZX0JVVFRPTl9TQ1JPTExfVEhSRVNIT0xEKSB7CiAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgU2hvd0hpc3RvcnlCdXR0b25FdmVudCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0YXJ0IGRvemluZwotICAgICAgICBtVUlEb3plVHJpZ2dlci5zdGFydERvemluZygpOwotICAgIH0KLQotICAgIC8qKiBSZXF1ZXN0cyB0aGlzIHRhc2sgc3RhY2tzIHRvIHN0YXJ0IGl0J3MgZW50ZXItcmVjZW50cyBhbmltYXRpb24gKi8KLSAgICBwdWJsaWMgdm9pZCBzdGFydEVudGVyUmVjZW50c0FuaW1hdGlvbihWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RW50ZXJDb250ZXh0IGN0eCkgewotICAgICAgICAvLyBJZiB3ZSBhcmUgc3RpbGwgd2FpdGluZyB0byBsYXlvdXQsIHRoZW4ganVzdCBkZWZlciB1bnRpbCB0aGVuCi0gICAgICAgIGlmIChtQXdhaXRpbmdGaXJzdExheW91dCkgewotICAgICAgICAgICAgbVN0YXJ0RW50ZXJBbmltYXRpb25SZXF1ZXN0ZWRBZnRlckxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICBtU3RhcnRFbnRlckFuaW1hdGlvbkNvbnRleHQgPSBjdHg7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVN0YWNrLmdldFN0YWNrVGFza0NvdW50KCkgPiAwKSB7Ci0gICAgICAgICAgICAvLyBGaW5kIHRoZSBsYXVuY2ggdGFyZ2V0IHRhc2sKLSAgICAgICAgICAgIFRhc2sgbGF1bmNoVGFyZ2V0VGFzayA9IG1TdGFjay5nZXRMYXVuY2hUYXJnZXQoKTsKLSAgICAgICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IGdldFRhc2tWaWV3cygpOwotICAgICAgICAgICAgaW50IHRhc2tWaWV3Q291bnQgPSB0YXNrVmlld3Muc2l6ZSgpOwotCi0gICAgICAgICAgICAvLyBBbmltYXRlIGFsbCB0aGUgdGFzayB2aWV3cyBpbnRvIHZpZXcKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSB0YXNrVmlld0NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOwotICAgICAgICAgICAgICAgIGN0eC5jdXJyZW50VGFza1RyYW5zZm9ybSA9IG5ldyBUYXNrVmlld1RyYW5zZm9ybSgpOwotICAgICAgICAgICAgICAgIGN0eC5jdXJyZW50U3RhY2tWaWV3SW5kZXggPSBpOwotICAgICAgICAgICAgICAgIGN0eC5jdXJyZW50U3RhY2tWaWV3Q291bnQgPSB0YXNrVmlld0NvdW50OwotICAgICAgICAgICAgICAgIGN0eC5jdXJyZW50VGFza1JlY3QgPSBtTGF5b3V0QWxnb3JpdGhtLm1UYXNrUmVjdDsKLSAgICAgICAgICAgICAgICBjdHguY3VycmVudFRhc2tPY2NsdWRlc0xhdW5jaFRhcmdldCA9IChsYXVuY2hUYXJnZXRUYXNrICE9IG51bGwpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXVuY2hUYXJnZXRUYXNrLmdyb3VwLmlzVGFza0Fib3ZlVGFzayh0YXNrLCBsYXVuY2hUYXJnZXRUYXNrKTsKLSAgICAgICAgICAgICAgICBjdHgudXBkYXRlTGlzdGVuZXIgPSBtUmVxdWVzdFVwZGF0ZUNsaXBwaW5nTGlzdGVuZXI7Ci0gICAgICAgICAgICAgICAgbUxheW91dEFsZ29yaXRobS5nZXRTdGFja1RyYW5zZm9ybSh0YXNrLCBtU3RhY2tTY3JvbGxlci5nZXRTdGFja1Njcm9sbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmN1cnJlbnRUYXNrVHJhbnNmb3JtLCBudWxsKTsKLSAgICAgICAgICAgICAgICB0di5zdGFydEVudGVyUmVjZW50c0FuaW1hdGlvbihjdHgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgYSBydW5uYWJsZSB0byB0aGUgcG9zdCBhbmltYXRpb24gcmVmIGNvdW50ZXIgdG8gY2xlYXIgYWxsIHRoZSB2aWV3cwotICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmFkZExhc3REZWNyZW1lbnRSdW5uYWJsZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAvLyBQb2tlIHRoZSBkb3plciB0byByZXN0YXJ0IHRoZSB0cmlnZ2VyIGFmdGVyIHRoZSBhbmltYXRpb24gY29tcGxldGVzCi0gICAgICAgICAgICAgICAgICAgIG1VSURvemVUcmlnZ2VyLnBva2UoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGZvY3VzZWQgc3RhdGUgaGVyZSAtLSBzaW5jZSB3ZSBvbmx5IHNldCB0aGUgZm9jdXNlZCB0YXNrIHdpdGhvdXQKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGluZyB2aWV3IGZvY3VzIGluIG9uRmlyc3RMYXlvdXQoKSwgYWN0dWFsbHkgcmVxdWVzdCB2aWV3IGZvY3VzIGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIHRoZSBmb2N1c2VkIHN0YXRlIGlmIHdlIGFyZSBhbHQtdGFiYmluZyBub3csIGFmdGVyIHRoZSB3aW5kb3cgZW50ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGlzIGNvbXBsZXRlZAotICAgICAgICAgICAgICAgICAgICBpZiAobUZvY3VzZWRUYXNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBjb25maWcuZ2V0TGF1bmNoU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWRUYXNrKG1TdGFjay5pbmRleE9mU3RhY2tUYXNrKG1Gb2N1c2VkVGFzayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHNjcm9sbFRvVGFzayAqLywgbGF1bmNoU3RhdGUubGF1bmNoZWRXaXRoQWx0VGFiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqIFJlcXVlc3RzIHRoaXMgdGFzayBzdGFjayB0byBzdGFydCBpdCdzIGV4aXQtcmVjZW50cyBhbmltYXRpb24uICovCi0gICAgcHVibGljIHZvaWQgc3RhcnRFeGl0VG9Ib21lQW5pbWF0aW9uKFZpZXdBbmltYXRpb24uVGFza1ZpZXdFeGl0Q29udGV4dCBjdHgpIHsKLSAgICAgICAgLy8gU3RvcCBhbnkgc2Nyb2xsaW5nCi0gICAgICAgIG1TdGFja1Njcm9sbGVyLnN0b3BTY3JvbGxlcigpOwotICAgICAgICBtU3RhY2tTY3JvbGxlci5zdG9wQm91bmRTY3JvbGxBbmltYXRpb24oKTsKLSAgICAgICAgLy8gQW5pbWF0ZSBhbGwgdGhlIHRhc2sgdmlld3Mgb3V0IG9mIHZpZXcKLSAgICAgICAgY3R4Lm9mZnNjcmVlblRyYW5zbGF0aW9uWSA9IG1MYXlvdXRBbGdvcml0aG0ubVN0YWNrUmVjdC5ib3R0b207Ci0gICAgICAgIC8vIERpc21pc3MgdGhlIGZyZWVmb3JtIHdvcmtzcGFjZSBiYWNrZ3JvdW5kCi0gICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfdGFza19leGl0X3RvX2hvbWVfZHVyYXRpb24pOwotICAgICAgICBhbmltYXRlRnJlZWZvcm1Xb3Jrc3BhY2VCYWNrZ3JvdW5kQWxwaGEoMCwgdGFza1ZpZXdFeGl0VG9Ib21lRHVyYXRpb24sCi0gICAgICAgICAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpOwotCi0gICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IGdldFRhc2tWaWV3cygpOwotICAgICAgICBpbnQgdGFza1ZpZXdDb3VudCA9IHRhc2tWaWV3cy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza1ZpZXdDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7Ci0gICAgICAgICAgICB0di5zdGFydEV4aXRUb0hvbWVBbmltYXRpb24oY3R4KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKiBBbmltYXRlcyBhIHRhc2sgdmlldyBpbiB0aGlzIHN0YWNrIGFzIGl0IGxhdW5jaGVzLiAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0TGF1bmNoVGFza0FuaW1hdGlvbihUYXNrVmlldyB0diwgUnVubmFibGUgciwgYm9vbGVhbiBsb2NrVG9UYXNrKSB7Ci0gICAgICAgIFRhc2sgbGF1bmNoVGFyZ2V0VGFzayA9IHR2LmdldFRhc2soKTsKLSAgICAgICAgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gZ2V0VGFza1ZpZXdzKCk7Ci0gICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXNrVmlld0NvdW50OyBpKyspIHsKLSAgICAgICAgICAgIFRhc2tWaWV3IHQgPSB0YXNrVmlld3MuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKHQgPT0gdHYpIHsKLSAgICAgICAgICAgICAgICB0LnNldENsaXBWaWV3SW5TdGFjayhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdC5zdGFydExhdW5jaFRhc2tBbmltYXRpb24ociwgdHJ1ZSwgdHJ1ZSwgbG9ja1RvVGFzayk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gb2NjbHVkZXNMYXVuY2hUYXJnZXQgPSBsYXVuY2hUYXJnZXRUYXNrLmdyb3VwLmlzVGFza0Fib3ZlVGFzayh0LmdldFRhc2soKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhdW5jaFRhcmdldFRhc2spOwotICAgICAgICAgICAgICAgIHQuc3RhcnRMYXVuY2hUYXNrQW5pbWF0aW9uKG51bGwsIGZhbHNlLCBvY2NsdWRlc0xhdW5jaFRhcmdldCwgbG9ja1RvVGFzayk7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgSGlkZUhpc3RvcnlCdXR0b25FdmVudCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTE0Nyw4ICsxMDE4LDcgQEAKICAgICAgICAgdHJhbnNmb3JtUG9pbnRUb1ZpZXdMb2NhbChwb2ludCwgdHYpOwogICAgICAgICB4ID0gcG9pbnRbMF07CiAgICAgICAgIHkgPSBwb2ludFsxXTsKLSAgICAgICAgcmV0dXJuICgwIDw9IHgpICYmICh4IDwgKHR2LmdldE1lYXN1cmVkV2lkdGgoKSAtIHR2LmdldFZpZXdCb3VuZHMoKS5nZXRDbGlwUmlnaHQoKSkpICYmCi0gICAgICAgICAgICAgICAgKDAgPD0geSkgJiYgKHkgPCAodHYuZ2V0TWVhc3VyZWRIZWlnaHQoKSAtIHR2LmdldFZpZXdCb3VuZHMoKS5nZXRDbGlwQm90dG9tKCkpKTsKKyAgICAgICAgcmV0dXJuICgwIDw9IHgpICYmICh4IDwgdHYuZ2V0V2lkdGgoKSkgJiYgKDAgPD0geSkgJiYgKHkgPCB0di5nZXRIZWlnaHQoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMTc2LDEwICsxMDQ2LDE0IEBACiAgICAgICogTGF1bmNoZXMgdGhlIGZyZWVmb3JtIHRhc2tzLgogICAgICAqLwogICAgIHB1YmxpYyBib29sZWFuIGxhdW5jaEZyZWVmb3JtVGFza3MoKSB7Ci0gICAgICAgIFRhc2sgZnJvbnRUYXNrID0gbVN0YWNrLmdldFN0YWNrRnJvbnRNb3N0VGFzaygpOwotICAgICAgICBpZiAoZnJvbnRUYXNrICE9IG51bGwgJiYgZnJvbnRUYXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKLSAgICAgICAgICAgIG9uVGFza1ZpZXdDbGlja2VkKGdldENoaWxkVmlld0ZvclRhc2soZnJvbnRUYXNrKSwgZnJvbnRUYXNrLCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgQXJyYXlMaXN0PFRhc2s+IHRhc2tzID0gbVN0YWNrLmdldEZyZWVmb3JtVGFza3MoKTsKKyAgICAgICAgaWYgKCF0YXNrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFRhc2sgZnJvbnRUYXNrID0gdGFza3MuZ2V0KHRhc2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgaWYgKGZyb250VGFzayAhPSBudWxsICYmIGZyb250VGFzay5pc0ZyZWVmb3JtVGFzaygpKSB7CisgICAgICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudChnZXRDaGlsZFZpZXdGb3JUYXNrKGZyb250VGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBmcm9udFRhc2ssIG51bGwsIElOVkFMSURfU1RBQ0tfSUQsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTExODcsNiArMTA2MSwxNiBAQAogICAgIC8qKioqIFRhc2tTdGFja0NhbGxiYWNrcyBJbXBsZW1lbnRhdGlvbiAqKioqLwogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdGFja1Rhc2tBZGRlZChUYXNrU3RhY2sgc3RhY2ssIFRhc2sgbmV3VGFzaykgeworICAgICAgICAvLyBVcGRhdGUgdGhlIG1pbi9tYXggc2Nyb2xsIGFuZCBhbmltYXRlIG90aGVyIHRhc2sgdmlld3MgaW50byB0aGVpciBuZXcgcG9zaXRpb25zCisgICAgICAgIHVwZGF0ZUxheW91dCh0cnVlKTsKKworICAgICAgICAvLyBBbmltYXRlIGFsbCB0aGUgdGFza3MgaW50byBwbGFjZQorICAgICAgICB1cGRhdGVUYXNrVmlld3NUb0xheW91dChuZXcgVGFza1ZpZXdBbmltYXRpb24oREVGQVVMVF9TWU5DX1NUQUNLX0RVUkFUSU9OLAorICAgICAgICAgICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25TdGFja1Rhc2tSZW1vdmVkKFRhc2tTdGFjayBzdGFjaywgVGFzayByZW1vdmVkVGFzaywgYm9vbGVhbiB3YXNGcm9udE1vc3RUYXNrLAogICAgICAgICAgICAgVGFzayBuZXdGcm9udE1vc3RUYXNrKSB7CiAgICAgICAgIGlmIChtRm9jdXNlZFRhc2sgPT0gcmVtb3ZlZFRhc2spIHsKQEAgLTEyMjEsMTkgKzExMDUsMTUgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAocHVsbFN0YWNrRm9yd2FyZCkgewogICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgb2Zmc2V0IHRoZSBzY3JvbGwgYnkgdGhlIG1vdmVtZW50IG9mIHRoZSBhbmNob3IgdGFzawogICAgICAgICAgICAgICAgIGZsb2F0IGFuY2hvclRhc2tTY3JvbGwgPSBtTGF5b3V0QWxnb3JpdGhtLmdldFN0YWNrU2Nyb2xsRm9yVGFzayhhbmNob3JUYXNrKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBuZXdTdGFja1Njcm9sbCA9IG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgKGFuY2hvclRhc2tTY3JvbGwgLSBwcmV2QW5jaG9yVGFza1Njcm9sbCk7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhY2tTY3JvbGxPZmZzZXQgPSAoYW5jaG9yVGFza1Njcm9sbCAtIHByZXZBbmNob3JUYXNrU2Nyb2xsKTsKICAgICAgICAgICAgICAgICBpZiAobUxheW91dEFsZ29yaXRobS5nZXRGb2N1c1N0YXRlKCkgIT0gVGFza1N0YWNrTGF5b3V0QWxnb3JpdGhtLlNUQVRFX0ZPQ1VTRUQpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGZvY3VzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGZyb250IHRhc2sgdG8gbW92ZSwgYnV0IG90aGVyd2lzZSwgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhlIGJhY2sgdGFzayB0byBtb3ZlIHVwLCBhbmQgdGhlIGZyb250IHRhc2sgdG8gbW92ZSBiYWNrCi0gICAgICAgICAgICAgICAgICAgIG5ld1N0YWNrU2Nyb2xsIC89IDI7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrU2Nyb2xsT2Zmc2V0IC89IDI7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1TdGFja1Njcm9sbGVyLnNldFN0YWNrU2Nyb2xsKG5ld1N0YWNrU2Nyb2xsKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5zZXRTdGFja1Njcm9sbChtU3RhY2tTY3JvbGxlci5nZXRTdGFja1Njcm9sbCgpICsgc3RhY2tTY3JvbGxPZmZzZXQpOwogICAgICAgICAgICAgICAgIG1TdGFja1Njcm9sbGVyLmJvdW5kU2Nyb2xsKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFuaW1hdGUgYWxsIHRoZSB0YXNrcyBpbnRvIHBsYWNlCi0gICAgICAgICAgICByZXF1ZXN0U3luY2hyb25pemVTdGFja1ZpZXdzV2l0aE1vZGVsKDIwMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHZpZXcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFzaywgd2UgY2FuJ3QgcmVseSBvbiB1cGRhdGVUcmFuc2Zvcm1zCiAgICAgICAgICAgICAvLyB0byB3b3JrIGhlcmUgYmVjYXVzZSB0aGUgdGFzayBpcyBubyBsb25nZXIgaW4gdGhlIGxpc3QKQEAgLTEyNDQsMTggKzExMjQsMTcgQEAKIAogICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBtaW4vbWF4IHNjcm9sbCBhbmQgYW5pbWF0ZSBvdGhlciB0YXNrIHZpZXdzIGludG8gdGhlaXIgbmV3IHBvc2l0aW9ucwogICAgICAgICAgICAgdXBkYXRlTGF5b3V0KHRydWUpOwotCi0gICAgICAgICAgICAvLyBBbmltYXRlIGFsbCB0aGUgdGFza3MgaW50byBwbGFjZQotICAgICAgICAgICAgcmVxdWVzdFN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbCgyMDApOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVXBkYXRlIHRoZSBuZXcgZnJvbnQgbW9zdCB0YXNrCi0gICAgICAgIGlmIChuZXdGcm9udE1vc3RUYXNrICE9IG51bGwpIHsKKyAgICAgICAgLy8gQW5pbWF0ZSBhbGwgdGhlIHRhc2tzIGludG8gcGxhY2UKKyAgICAgICAgdXBkYXRlVGFza1ZpZXdzVG9MYXlvdXQobmV3IFRhc2tWaWV3QW5pbWF0aW9uKERFRkFVTFRfU1lOQ19TVEFDS19EVVJBVElPTiwKKyAgICAgICAgICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvcikpOworCisgICAgICAgIC8vIFVwZGF0ZSB0aGUgbmV3IGZyb250IG1vc3QgdGFzaydzIGFjdGlvbiBidXR0b24KKyAgICAgICAgaWYgKG1TY3JlZW5QaW5uaW5nRW5hYmxlZCAmJiBuZXdGcm9udE1vc3RUYXNrICE9IG51bGwpIHsKICAgICAgICAgICAgIFRhc2tWaWV3IGZyb250VHYgPSBnZXRDaGlsZFZpZXdGb3JUYXNrKG5ld0Zyb250TW9zdFRhc2spOwogICAgICAgICAgICAgaWYgKGZyb250VHYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGZyb250VHYub25UYXNrQm91bmQobmV3RnJvbnRNb3N0VGFzayk7Ci0gICAgICAgICAgICAgICAgZnJvbnRUdi5mYWRlSW5BY3Rpb25CdXR0b24oZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZW50ZXJfZnJvbV9hcHBfZHVyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBmcm9udFR2LnNob3dBY3Rpb25CdXR0b24odHJ1ZSAvKiBmYWRlSW4gKi8sIERFRkFVTFRfU1lOQ19TVEFDS19EVVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTI4Miw3ICsxMTYxLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHByZXBhcmVWaWV3VG9FbnRlclBvb2woVGFza1ZpZXcgdHYpIHsKLSAgICAgICAgVGFzayB0YXNrID0gdHYuZ2V0VGFzaygpOworICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSB0di5nZXRUYXNrKCk7CiAKICAgICAgICAgLy8gUmVwb3J0IHRoYXQgdGhpcyB0YXNrcydzIGRhdGEgaXMgbm8gbG9uZ2VyIGJlaW5nIHVzZWQKICAgICAgICAgUmVjZW50cy5nZXRUYXNrTG9hZGVyKCkudW5sb2FkVGFza0RhdGEodGFzayk7CkBAIC0xMjkyLDIyICsxMTcxLDE3IEBACiAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFzayB2aWV3cyBsaXN0IGFmdGVyIHJlbW92aW5nIHRoZSB0YXNrIHZpZXcKICAgICAgICAgdXBkYXRlVGFza1ZpZXdzTGlzdCgpOwogCi0gICAgICAgIC8vIFJlc2V0IHRoZSB2aWV3IHByb3BlcnRpZXMKKyAgICAgICAgLy8gUmVzZXQgdGhlIHZpZXcgcHJvcGVydGllcyBhbmQgdmlldyBzdGF0ZQogICAgICAgICB0di5yZXNldFZpZXdQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIGZvY3VzZWQgdmlldyBzdGF0ZQotICAgICAgICB0di5zZXRGb2N1c2VkU3RhdGUoZmFsc2UsIGZhbHNlIC8qIGFuaW1hdGVkICovLCBmYWxzZSAvKiByZXF1ZXN0Vmlld0ZvY3VzICovKTsKLQotICAgICAgICAvLyBSZXNldCB0aGUgY2xpcCBzdGF0ZSBvZiB0aGUgdGFzayB2aWV3CisgICAgICAgIHR2LnNldEZvY3VzZWRTdGF0ZShmYWxzZSwgZmFsc2UgLyogcmVxdWVzdFZpZXdGb2N1cyAqLyk7CiAgICAgICAgIHR2LnNldENsaXBWaWV3SW5TdGFjayhmYWxzZSk7CisgICAgICAgIGlmIChtU2NyZWVuUGlubmluZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIHR2LmhpZGVBY3Rpb25CdXR0b24oZmFsc2UgLyogZmFkZU91dCAqLywgMCAvKiBkdXJhdGlvbiAqLywgZmFsc2UgLyogc2NhbGVEb3duICovLCBudWxsKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHByZXBhcmVWaWV3VG9MZWF2ZVBvb2woVGFza1ZpZXcgdHYsIFRhc2sgdGFzaywgYm9vbGVhbiBpc05ld1ZpZXcpIHsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgZm9yIGEgdmlldyB0byBiZSByZXR1cm5lZCB0byB0aGUgdmlldyBwb29sIGJlZm9yZSBpdCBpcyBsYWlkIG91dCwKLSAgICAgICAgLy8gd2hpY2ggbWVhbnMgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gcmVsYXlvdXQgdGhlIHZpZXcgd2hlbiBpdCBpcyBmaXJzdCB1c2VkIG5leHQuCi0gICAgICAgIGJvb2xlYW4gcmVxdWlyZXNSZWxheW91dCA9IHR2LmdldFdpZHRoKCkgPD0gMCAmJiAhaXNOZXdWaWV3OwotCiAgICAgICAgIC8vIFJlYmluZCB0aGUgdGFzayBhbmQgcmVxdWVzdCB0aGF0IHRoaXMgdGFzaydzIGRhdGEgYmUgZmlsbGVkIGludG8gdGhlIFRhc2tWaWV3CiAgICAgICAgIHR2Lm9uVGFza0JvdW5kKHRhc2spOwogCkBAIC0xMzI2LDkgKzEyMDAsNiBAQAogICAgICAgICAgICAgYWRkVmlldyh0diwgaW5zZXJ0SW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXR0YWNoVmlld1RvUGFyZW50KHR2LCBpbnNlcnRJbmRleCwgdHYuZ2V0TGF5b3V0UGFyYW1zKCkpOwotICAgICAgICAgICAgaWYgKHJlcXVpcmVzUmVsYXlvdXQpIHsKLSAgICAgICAgICAgICAgICB0di5yZXF1ZXN0TGF5b3V0KCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLy8gVXBkYXRlIHRoZSB0YXNrIHZpZXdzIGxpc3QgYWZ0ZXIgYWRkaW5nIHRoZSBuZXcgdGFzayB2aWV3CiAgICAgICAgIHVwZGF0ZVRhc2tWaWV3c0xpc3QoKTsKQEAgLTEzMzgsNyArMTIwOSwxMiBAQAogICAgICAgICB0di5zZXRUb3VjaEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIHR2LnNldENsaXBWaWV3SW5TdGFjayh0cnVlKTsKICAgICAgICAgaWYgKG1Gb2N1c2VkVGFzayA9PSB0YXNrKSB7Ci0gICAgICAgICAgICB0di5zZXRGb2N1c2VkU3RhdGUodHJ1ZSwgZmFsc2UgLyogYW5pbWF0ZWQgKi8sIGZhbHNlIC8qIHJlcXVlc3RWaWV3Rm9jdXMgKi8pOworICAgICAgICAgICAgdHYuc2V0Rm9jdXNlZFN0YXRlKHRydWUsIGZhbHNlIC8qIHJlcXVlc3RWaWV3Rm9jdXMgKi8pOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVzdG9yZSB0aGUgYWN0aW9uIGJ1dHRvbiB2aXNpYmlsaXR5IGlmIGl0IGlzIHRoZSBmcm9udCBtb3N0IHRhc2sgdmlldworICAgICAgICBpZiAobVNjcmVlblBpbm5pbmdFbmFibGVkICYmIHR2LmdldFRhc2soKSA9PSBtU3RhY2suZ2V0U3RhY2tGcm9udE1vc3RUYXNrKCkpIHsKKyAgICAgICAgICAgIHR2LnNob3dBY3Rpb25CdXR0b24oZmFsc2UgLyogZmFkZUluICovLCAwIC8qIGZhZGVJbkR1cmF0aW9uICovKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM1MCwyOSArMTIyNiwxOSBAQAogICAgIC8qKioqIFRhc2tWaWV3Q2FsbGJhY2tzIEltcGxlbWVudGF0aW9uICoqKiovCiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRhc2tWaWV3Q2xpY2tlZChUYXNrVmlldyB0diwgVGFzayB0YXNrLCBib29sZWFuIGxvY2tUb1Rhc2spIHsKLSAgICAgICAgLy8gQ2FuY2VsIGFueSBkb3plIHRyaWdnZXJzCi0gICAgICAgIG1VSURvemVUcmlnZ2VyLnN0b3BEb3ppbmcoKTsKLQotICAgICAgICBpZiAobUNiICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1DYi5vblRhc2tWaWV3Q2xpY2tlZCh0aGlzLCB0diwgbVN0YWNrLCB0YXNrLCBsb2NrVG9UYXNrLCBudWxsLCBJTlZBTElEX1NUQUNLX0lEKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uVGFza1ZpZXdDbGlwU3RhdGVDaGFuZ2VkKFRhc2tWaWV3IHR2KSB7Ci0gICAgICAgIHJlcXVlc3RVcGRhdGVTdGFja1ZpZXdzQ2xpcCgpOworICAgICAgICBjbGlwVGFza1ZpZXdzKCk7CiAgICAgfQogCiAgICAgLyoqKiogVGFza1N0YWNrVmlld1Njcm9sbGVyLlRhc2tTdGFja1ZpZXdTY3JvbGxlckNhbGxiYWNrcyAqKioqLwogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TY3JvbGxDaGFuZ2VkKGZsb2F0IHByZXZTY3JvbGwsIGZsb2F0IGN1clNjcm9sbCkgeworICAgIHB1YmxpYyB2b2lkIG9uU2Nyb2xsQ2hhbmdlZChmbG9hdCBwcmV2U2Nyb2xsLCBmbG9hdCBjdXJTY3JvbGwsIFRhc2tWaWV3QW5pbWF0aW9uIGFuaW1hdGlvbikgewogICAgICAgICBtVUlEb3plVHJpZ2dlci5wb2tlKCk7Ci0gICAgICAgIHJlcXVlc3RTeW5jaHJvbml6ZVN0YWNrVmlld3NXaXRoTW9kZWwoKTsKLSAgICAgICAgcG9zdEludmFsaWRhdGVPbkFuaW1hdGlvbigpOworICAgICAgICB1cGRhdGVUYXNrVmlld3NUb0xheW91dE9uTmV4dEZyYW1lKGFuaW1hdGlvbik7CiAKLSAgICAgICAgaWYgKHByZXZTY3JvbGwgPiBTSE9XX0hJU1RPUllfQlVUVE9OX1NDUk9MTF9USFJFU0hPTEQgJiYKKyAgICAgICAgaWYgKHNob3VsZFNob3dIaXN0b3J5QnV0dG9uKCkgJiYKKyAgICAgICAgICAgICAgICBwcmV2U2Nyb2xsID4gU0hPV19ISVNUT1JZX0JVVFRPTl9TQ1JPTExfVEhSRVNIT0xEICYmCiAgICAgICAgICAgICAgICAgY3VyU2Nyb2xsIDw9IFNIT1dfSElTVE9SWV9CVVRUT05fU0NST0xMX1RIUkVTSE9MRCkgewogICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dIaXN0b3J5QnV0dG9uRXZlbnQoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAocHJldlNjcm9sbCA8IEhJREVfSElTVE9SWV9CVVRUT05fU0NST0xMX1RIUkVTSE9MRCAmJgpAQCAtMTM5NiwxMiArMTI2Miw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgVGFza1ZpZXcgdHYgPSBnZXRDaGlsZFZpZXdGb3JUYXNrKHQpOwogICAgICAgICAgICAgICAgIGlmICh0diAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB2aXNpYmxlIGNoaWxkcmVuLCBkZWZlciByZW1vdmluZyB0aGUgdGFzayB1bnRpbCBhZnRlciB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHR2LnN0YXJ0RGVsZXRlVGFza0FuaW1hdGlvbihuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVUYXNrVmlld0Zyb21TdGFjayh0dik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgICAgICAgICB0di5kaXNtaXNzVGFzaygpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoZSB0YXNrIGZyb20gdGhlIHN0YWNrIGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICAgICAgIG1TdGFjay5yZW1vdmVUYXNrKHQpOwpAQCAtMTQxMCwxNiArMTI3MSwyOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChEaXNtaXNzVGFza1ZpZXdFdmVudCBldmVudCkgewotICAgICAgICByZW1vdmVUYXNrVmlld0Zyb21TdGFjayhldmVudC50YXNrVmlldyk7CisgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChMYXVuY2hUYXNrRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgLy8gQ2FuY2VsIGFueSBkb3plIHRyaWdnZXJzIG9uY2UgYSB0YXNrIGlzIGxhdW5jaGVkCisgICAgICAgIG1VSURvemVUcmlnZ2VyLnN0b3BEb3ppbmcoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KEZvY3VzTmV4dFRhc2tWaWV3RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgc2V0UmVsYXRpdmVGb2N1c2VkVGFzayh0cnVlLCBmYWxzZSAvKiBzdGFja1Rhc2tzT25seSAqLywgdHJ1ZSAvKiBhbmltYXRlZCAqLyk7CisgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChMYXVuY2hUYXNrU3RhcnRlZEV2ZW50IGV2ZW50KSB7CisgICAgICAgIG1BbmltYXRpb25IZWxwZXIuc3RhcnRMYXVuY2hUYXNrQW5pbWF0aW9uKGV2ZW50LnRhc2tWaWV3LCBldmVudC5zY3JlZW5QaW5uaW5nUmVxdWVzdGVkLAorICAgICAgICAgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKSk7CiAgICAgfQogCi0gICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChGb2N1c1ByZXZpb3VzVGFza1ZpZXdFdmVudCBldmVudCkgewotICAgICAgICBzZXRSZWxhdGl2ZUZvY3VzZWRUYXNrKGZhbHNlLCBmYWxzZSAvKiBzdGFja1Rhc2tzT25seSAqLywgdHJ1ZSAvKiBhbmltYXRlZCAqLyk7CisgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChEaXNtaXNzUmVjZW50c1RvSG9tZUFuaW1hdGlvblN0YXJ0ZWQgZXZlbnQpIHsKKyAgICAgICAgLy8gU3RvcCBhbnkgc2Nyb2xsaW5nCisgICAgICAgIG1TdGFja1Njcm9sbGVyLnN0b3BTY3JvbGxlcigpOworICAgICAgICBtU3RhY2tTY3JvbGxlci5zdG9wQm91bmRTY3JvbGxBbmltYXRpb24oKTsKKworICAgICAgICAvLyBTdGFydCB0aGUgdGFzayBhbmltYXRpb25zCisgICAgICAgIG1BbmltYXRpb25IZWxwZXIuc3RhcnRFeGl0VG9Ib21lQW5pbWF0aW9uKGV2ZW50LmFuaW1hdGVkLCBldmVudC5nZXRBbmltYXRpb25UcmlnZ2VyKCkpOworCisgICAgICAgIC8vIERpc21pc3MgdGhlIGZyZWVmb3JtIHdvcmtzcGFjZSBiYWNrZ3JvdW5kCisgICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCisgICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfdGFza19leGl0X3RvX2hvbWVfZHVyYXRpb24pOworICAgICAgICBhbmltYXRlRnJlZWZvcm1Xb3Jrc3BhY2VCYWNrZ3JvdW5kQWxwaGEoMCwgdGFza1ZpZXdFeGl0VG9Ib21lRHVyYXRpb24sCisgICAgICAgICAgICAgICAgbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRGlzbWlzc0ZvY3VzZWRUYXNrVmlld0V2ZW50IGV2ZW50KSB7CkBAIC0xNDMyLDYgKzEzMDYsMjUgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoZmluYWwgRGlzbWlzc1Rhc2tWaWV3RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgLy8gRm9yIHZpc2libGUgY2hpbGRyZW4sIGRlZmVyIHJlbW92aW5nIHRoZSB0YXNrIHVudGlsIGFmdGVyIHRoZSBhbmltYXRpb24KKyAgICAgICAgbUFuaW1hdGlvbkhlbHBlci5zdGFydERlbGV0ZVRhc2tBbmltYXRpb24oZXZlbnQudGFzaywgZXZlbnQudGFza1ZpZXcsCisgICAgICAgICAgICAgICAgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFRhc2tWaWV3RGlzbWlzc2VkRXZlbnQgZXZlbnQpIHsKKyAgICAgICAgcmVtb3ZlVGFza1ZpZXdGcm9tU3RhY2soZXZlbnQudGFza1ZpZXcpOworICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgRGVsZXRlVGFza0RhdGFFdmVudChldmVudC50YXNrKSk7CisgICAgfQorCisgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChGb2N1c05leHRUYXNrVmlld0V2ZW50IGV2ZW50KSB7CisgICAgICAgIHNldFJlbGF0aXZlRm9jdXNlZFRhc2sodHJ1ZSwgZmFsc2UgLyogc3RhY2tUYXNrc09ubHkgKi8sIHRydWUgLyogYW5pbWF0ZWQgKi8pOworICAgIH0KKworICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRm9jdXNQcmV2aW91c1Rhc2tWaWV3RXZlbnQgZXZlbnQpIHsKKyAgICAgICAgc2V0UmVsYXRpdmVGb2N1c2VkVGFzayhmYWxzZSwgZmFsc2UgLyogc3RhY2tUYXNrc09ubHkgKi8sIHRydWUgLyogYW5pbWF0ZWQgKi8pOworICAgIH0KKwogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoVXNlckludGVyYWN0aW9uRXZlbnQgZXZlbnQpIHsKICAgICAgICAgLy8gUG9rZSB0aGUgZG96ZSB0cmlnZ2VyIG9uIHVzZXIgaW50ZXJhY3Rpb24KICAgICAgICAgbVVJRG96ZVRyaWdnZXIucG9rZSgpOwpAQCAtMTQ0OSw2ICsxMzQyLDE0IEBACiAgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5hbmltYXRlU2Nyb2xsKG1TdGFja1Njcm9sbGVyLmdldFN0YWNrU2Nyb2xsKCksCiAgICAgICAgICAgICAgICAgICAgIG1MYXlvdXRBbGdvcml0aG0ubUluaXRpYWxTY3JvbGxQLCBudWxsKTsKICAgICAgICAgfQorCisgICAgICAgIC8vIEVubGFyZ2UgdGhlIGRyYWdnZWQgdmlldyBzbGlnaHRseQorICAgICAgICBmbG9hdCBmaW5hbFNjYWxlID0gZXZlbnQudGFza1ZpZXcuZ2V0U2NhbGVYKCkgKiBEUkFHX1NDQUxFX0ZBQ1RPUjsKKyAgICAgICAgbUxheW91dEFsZ29yaXRobS5nZXRTdGFja1RyYW5zZm9ybShldmVudC50YXNrLCBnZXRTY3JvbGxlcigpLmdldFN0YWNrU2Nyb2xsKCksCisgICAgICAgICAgICAgICAgbVRtcFRyYW5zZm9ybSwgbnVsbCk7CisgICAgICAgIG1UbXBUcmFuc2Zvcm0uc2NhbGUgPSBmaW5hbFNjYWxlOworICAgICAgICB1cGRhdGVUYXNrVmlld1RvVHJhbnNmb3JtKGV2ZW50LnRhc2tWaWV3LCBtVG1wVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgIG5ldyBUYXNrVmlld0FuaW1hdGlvbihEUkFHX1NDQUxFX0RVUkFUSU9OLCBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvcikpOwogICAgIH0KIAogICAgIHB1YmxpYyBmaW5hbCB2b2lkIG9uQnVzRXZlbnQoRHJhZ1N0YXJ0SW5pdGlhbGl6ZURyb3BUYXJnZXRzRXZlbnQgZXZlbnQpIHsKQEAgLTE0NzQsNyArMTM3NSw2IEBACiAgICAgICAgICAgICAgICAgKCFpc0ZyZWVmb3JtVGFzayAmJiBldmVudC5kcm9wVGFyZ2V0ID09IG1GcmVlZm9ybVdvcmtzcGFjZURyb3BUYXJnZXQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAoaXNGcmVlZm9ybVRhc2sgJiYgZXZlbnQuZHJvcFRhcmdldCA9PSBtU3RhY2tEcm9wVGFyZ2V0KTsKIAotICAgICAgICBldmVudC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKICAgICAgICAgaWYgKGhhc0NoYW5nZWRTdGFja3MpIHsKICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHRhc2sgdG8gdGhlIHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBzdGFjayAoaWUuIHRoZSBmcm9udCBvZiB0aGUgc3RhY2sgaWYKICAgICAgICAgICAgIC8vIGZyZWVmb3JtIG9yIHRoZSBmcm9udCBvZiB0aGUgc3RhY2sgaWYgZnVsbHNjcmVlbikuICBOb3RlLCB3ZSBNVVNUIG1vdmUgdGhlIHRhc2tzCkBAIC0xNDg3LDcgKzEzODcsNyBAQAogICAgICAgICAgICAgdXBkYXRlTGF5b3V0KHRydWUpOwogCiAgICAgICAgICAgICAvLyBNb3ZlIHRoZSB0YXNrIHRvIHRoZSBuZXcgc3RhY2sgaW4gdGhlIHN5c3RlbSBhZnRlciB0aGUgYW5pbWF0aW9uIGNvbXBsZXRlcwotICAgICAgICAgICAgZXZlbnQucG9zdEFuaW1hdGlvblRyaWdnZXIuYWRkTGFzdERlY3JlbWVudFJ1bm5hYmxlKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIGV2ZW50LmFkZFBvc3RBbmltYXRpb25DYWxsYmFjayhuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1TZXJ2aWNlc1Byb3h5IHNzcCA9IFJlY2VudHMuZ2V0U3lzdGVtU2VydmljZXMoKTsKQEAgLTE0OTUsMTEgKzEzOTUsMjggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBldmVudC50YXNrVmlldy5hbmltYXRlKCkKLSAgICAgICAgICAgICAgICAud2l0aEVuZEFjdGlvbihldmVudC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnRBc1J1bm5hYmxlKCkpOwogCi0gICAgICAgIC8vIEFuaW1hdGUgdGhlIHRhY2sgdmlldyBiYWNrIGludG8gcG9zaXRpb24KLSAgICAgICAgcmVxdWVzdFN5bmNocm9uaXplU3RhY2tWaWV3c1dpdGhNb2RlbCgyNTApOworICAgICAgICAvLyBXZSB0cmFuc2xhdGVkIHRoZSB2aWV3IGJ1dCB3ZSBuZWVkIHRvIGFuaW1hdGUgaXQgYmFjayBmcm9tIHRoZSBjdXJyZW50IGxheW91dC1zcGFjZSByZWN0CisgICAgICAgIC8vIHRvIGl0cyBmaW5hbCBsYXlvdXQtc3BhY2UgcmVjdAorICAgICAgICBpbnQgeCA9IChpbnQpIGV2ZW50LnRhc2tWaWV3LmdldFRyYW5zbGF0aW9uWCgpOworICAgICAgICBpbnQgeSA9IChpbnQpIGV2ZW50LnRhc2tWaWV3LmdldFRyYW5zbGF0aW9uWSgpOworICAgICAgICBSZWN0IHRhc2tWaWV3UmVjdCA9IG5ldyBSZWN0KGV2ZW50LnRhc2tWaWV3LmdldExlZnQoKSwgZXZlbnQudGFza1ZpZXcuZ2V0VG9wKCksCisgICAgICAgICAgICAgICAgZXZlbnQudGFza1ZpZXcuZ2V0UmlnaHQoKSwgZXZlbnQudGFza1ZpZXcuZ2V0Qm90dG9tKCkpOworICAgICAgICB0YXNrVmlld1JlY3Qub2Zmc2V0KHgsIHkpOworICAgICAgICBldmVudC50YXNrVmlldy5zZXRUcmFuc2xhdGlvblgoMCk7CisgICAgICAgIGV2ZW50LnRhc2tWaWV3LnNldFRyYW5zbGF0aW9uWSgwKTsKKyAgICAgICAgZXZlbnQudGFza1ZpZXcuc2V0TGVmdFRvcFJpZ2h0Qm90dG9tKHRhc2tWaWV3UmVjdC5sZWZ0LCB0YXNrVmlld1JlY3QudG9wLAorICAgICAgICAgICAgICAgIHRhc2tWaWV3UmVjdC5yaWdodCwgdGFza1ZpZXdSZWN0LmJvdHRvbSk7CisKKyAgICAgICAgLy8gQW5pbWF0ZSBhbGwgdGhlIFRhc2tWaWV3cyBiYWNrIGludG8gcG9zaXRpb24KKyAgICAgICAgbUxheW91dEFsZ29yaXRobS5nZXRTdGFja1RyYW5zZm9ybShldmVudC50YXNrLCBnZXRTY3JvbGxlcigpLmdldFN0YWNrU2Nyb2xsKCksCisgICAgICAgICAgICAgICAgbVRtcFRyYW5zZm9ybSwgbnVsbCk7CisgICAgICAgIGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKS5pbmNyZW1lbnQoKTsKKyAgICAgICAgdXBkYXRlVGFza1ZpZXdzVG9MYXlvdXQobmV3IFRhc2tWaWV3QW5pbWF0aW9uKERFRkFVTFRfU1lOQ19TVEFDS19EVVJBVElPTiwKKyAgICAgICAgICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvcikpOworICAgICAgICB1cGRhdGVUYXNrVmlld1RvVHJhbnNmb3JtKGV2ZW50LnRhc2tWaWV3LCBtVG1wVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgIG5ldyBUYXNrVmlld0FuaW1hdGlvbihERUZBVUxUX1NZTkNfU1RBQ0tfRFVSQVRJT04sIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuZ2V0QW5pbWF0aW9uVHJpZ2dlcigpLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpKTsKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFN0YWNrVmlld1Njcm9sbGVkRXZlbnQgZXZlbnQpIHsKQEAgLTE1MDcsMTEgKzE0MjQsMzkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KEl0ZXJhdGVSZWNlbnRzRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgbUxheW91dEFsZ29yaXRobS5hbmltYXRlRm9jdXNTdGF0ZShtTGF5b3V0QWxnb3JpdGhtLmdldERlZmF1bHRGb2N1c1N0YXRlKCkpOworICAgICAgICBpZiAoIW1FbnRlckFuaW1hdGlvbkNvbXBsZXRlKSB7CisgICAgICAgICAgICAvLyBDYW5jZWwgdGhlIHByZXZpb3VzIHRhc2sncyB3aW5kb3cgdHJhbnNpdGlvbiBiZWZvcmUgYW5pbWF0aW5nIHRoZSBmb2N1c2VkIHN0YXRlCisgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgQ2FuY2VsRW50ZXJSZWNlbnRzV2luZG93QW5pbWF0aW9uRXZlbnQobnVsbCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChFbnRlclJlY2VudHNXaW5kb3dBbmltYXRpb25Db21wbGV0ZWRFdmVudCBldmVudCkgewogICAgICAgICBtRW50ZXJBbmltYXRpb25Db21wbGV0ZSA9IHRydWU7CisKKyAgICAgICAgaWYgKG1TdGFjay5nZXRTdGFja1Rhc2tDb3VudCgpID4gMCkgeworICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHRhc2sgZW50ZXIgYW5pbWF0aW9ucworICAgICAgICAgICAgbUFuaW1hdGlvbkhlbHBlci5zdGFydEVudGVyQW5pbWF0aW9uKGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKSk7CisKKyAgICAgICAgICAgIC8vIEFkZCBhIHJ1bm5hYmxlIHRvIHRoZSBwb3N0IGFuaW1hdGlvbiByZWYgY291bnRlciB0byBjbGVhciBhbGwgdGhlIHZpZXdzCisgICAgICAgICAgICBldmVudC5hZGRQb3N0QW5pbWF0aW9uQ2FsbGJhY2sobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGRvemVyIHRvIHRyaWdnZXIgdG8gdHJpZ2dlciBhbnkgVUkgdGhhdCBzaG93cyBhZnRlciBhIHRpbWVvdXQKKyAgICAgICAgICAgICAgICAgICAgbVVJRG96ZVRyaWdnZXIuc3RhcnREb3ppbmcoKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGZvY3VzZWQgc3RhdGUgaGVyZSAtLSBzaW5jZSB3ZSBvbmx5IHNldCB0aGUgZm9jdXNlZCB0YXNrIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVxdWVzdGluZyB2aWV3IGZvY3VzIGluIG9uRmlyc3RMYXlvdXQoKSwgYWN0dWFsbHkgcmVxdWVzdCB2aWV3IGZvY3VzIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIHRoZSBmb2N1c2VkIHN0YXRlIGlmIHdlIGFyZSBhbHQtdGFiYmluZyBub3csIGFmdGVyIHRoZSB3aW5kb3cgZW50ZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGlzIGNvbXBsZXRlZAorICAgICAgICAgICAgICAgICAgICBpZiAobUZvY3VzZWRUYXNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOworICAgICAgICAgICAgICAgICAgICAgICAgUmVjZW50c0FjdGl2aXR5TGF1bmNoU3RhdGUgbGF1bmNoU3RhdGUgPSBjb25maWcuZ2V0TGF1bmNoU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWRUYXNrKG1TdGFjay5pbmRleE9mU3RhY2tUYXNrKG1Gb2N1c2VkVGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIHNjcm9sbFRvVGFzayAqLywgbGF1bmNoU3RhdGUubGF1bmNoZWRXaXRoQWx0VGFiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChVcGRhdGVGcmVlZm9ybVRhc2tWaWV3VmlzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CkBAIC0xNTIwLDQwICsxNDY1LDE4IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFza1ZpZXdDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBUYXNrVmlldyB0diA9IHRhc2tWaWV3cy5nZXQoaSk7CiAgICAgICAgICAgICBUYXNrIHRhc2sgPSB0di5nZXRUYXNrKCk7Ci0gICAgICAgICAgICBpZiAoU3lzdGVtU2VydmljZXNQcm94eS5pc0ZyZWVmb3JtU3RhY2sodGFzay5rZXkuc3RhY2tJZCkpIHsKKyAgICAgICAgICAgIGlmICh0YXNrLmlzRnJlZWZvcm1UYXNrKCkpIHsKICAgICAgICAgICAgICAgICB0di5zZXRWaXNpYmlsaXR5KGV2ZW50LnZpc2libGUgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklTSUJMRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgZmluYWwgdm9pZCBvbkJ1c0V2ZW50KFNob3dIaXN0b3J5RXZlbnQgZXZlbnQpIHsKLSAgICAgICAgTGlzdDxUYXNrVmlldz4gdGFza1ZpZXdzID0gZ2V0VGFza1ZpZXdzKCk7Ci0gICAgICAgIGludCB0YXNrVmlld0NvdW50ID0gdGFza1ZpZXdzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IHRhc2tWaWV3Q291bnQgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSB0YXNrVmlld3MuZ2V0KGkpOwotICAgICAgICAgICAgdHYuYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5hbHBoYSgwZikKLSAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDIwMCkKLSAgICAgICAgICAgICAgICAgICAgLnNldFVwZGF0ZUxpc3RlbmVyKG51bGwpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRMaXN0ZW5lcihudWxsKQotICAgICAgICAgICAgICAgICAgICAud2l0aExheWVyKCkKLSAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbUFuaW1hdGlvbkhlbHBlci5zdGFydFNob3dIaXN0b3J5QW5pbWF0aW9uKGV2ZW50LmdldEFuaW1hdGlvblRyaWdnZXIoKSk7CiAgICAgfQogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChIaWRlSGlzdG9yeUV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIExpc3Q8VGFza1ZpZXc+IHRhc2tWaWV3cyA9IGdldFRhc2tWaWV3cygpOwotICAgICAgICBpbnQgdGFza1ZpZXdDb3VudCA9IHRhc2tWaWV3cy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSB0YXNrVmlld0NvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIFRhc2tWaWV3IHR2ID0gdGFza1ZpZXdzLmdldChpKTsKLSAgICAgICAgICAgIHR2LmFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMWYpCi0gICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbigyMDApCi0gICAgICAgICAgICAgICAgICAgIC5zZXRVcGRhdGVMaXN0ZW5lcihudWxsKQotICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwotICAgICAgICB9CisgICAgICAgIG1BbmltYXRpb25IZWxwZXIuc3RhcnRIaWRlSGlzdG9yeUFuaW1hdGlvbihldmVudC5nZXRBbmltYXRpb25UcmlnZ2VyKCkpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTU2NSw3ICsxNDg4LDcgQEAKIAogICAgICAgICAvLyBBbm5vdW5jZSBmb3IgYWNjZXNzaWJpbGl0eQogICAgICAgICB0di5hbm5vdW5jZUZvckFjY2Vzc2liaWxpdHkoZ2V0Q29udGV4dCgpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV9kaXNtaXNzZWQsIHR2LmdldFRhc2soKS5hY3Rpdml0eUxhYmVsKSk7CisgICAgICAgICAgICAgICAgUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fZGlzbWlzc2VkLCB0di5nZXRUYXNrKCkudGl0bGUpKTsKIAogICAgICAgICAvLyBSZW1vdmUgdGhlIHRhc2sgZnJvbSB0aGUgc3RhY2sKICAgICAgICAgbVN0YWNrLnJlbW92ZVRhc2sodGFzayk7CkBAIC0xNTgyLDcgKzE1MDUsNyBAQAogCiAgICAgICAgIFV0aWxpdGllcy5jYW5jZWxBbmltYXRpb25XaXRob3V0Q2FsbGJhY2tzKG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmRBbmltYXRvcik7CiAgICAgICAgIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmRBbmltYXRvciA9IE9iamVjdEFuaW1hdG9yLm9mSW50KG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQsCi0gICAgICAgICAgICAgICAgQ09MT1JfRFJBV0FCTEVfQUxQSEEsIG1GcmVlZm9ybVdvcmtzcGFjZUJhY2tncm91bmQuZ2V0QWxwaGEoKSwgdGFyZ2V0QWxwaGEpOworICAgICAgICAgICAgICAgIERSQVdBQkxFX0FMUEhBLCBtRnJlZWZvcm1Xb3Jrc3BhY2VCYWNrZ3JvdW5kLmdldEFscGhhKCksIHRhcmdldEFscGhhKTsKICAgICAgICAgbUZyZWVmb3JtV29ya3NwYWNlQmFja2dyb3VuZEFuaW1hdG9yLnNldER1cmF0aW9uKGR1cmF0aW9uKTsKICAgICAgICAgbUZyZWVmb3JtV29ya3NwYWNlQmFja2dyb3VuZEFuaW1hdG9yLnNldEludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpOwogICAgICAgICBtRnJlZWZvcm1Xb3Jrc3BhY2VCYWNrZ3JvdW5kQW5pbWF0b3Iuc3RhcnQoKTsKQEAgLTE2MTYsNCArMTUzOSwxMSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHdoZXRoZXIgdGhlIGhpc3RvcnkgYnV0dG9uIHNob3VsZCBiZSB2aXNpYmxlCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHNob3VsZFNob3dIaXN0b3J5QnV0dG9uKCkgeworICAgICAgICByZXR1cm4gIW1TdGFjay5nZXRIaXN0b3JpY2FsVGFza3MoKS5pc0VtcHR5KCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrVmlld1Njcm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3U2Nyb2xsZXIuamF2YQppbmRleCA1Njk0MmE4Li4zMmYwMmFjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3U2Nyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3U2Nyb2xsZXIuamF2YQpAQCAtMzQsNyArMzQsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKIAogICAgIHB1YmxpYyBpbnRlcmZhY2UgVGFza1N0YWNrVmlld1Njcm9sbGVyQ2FsbGJhY2tzIHsKLSAgICAgICAgdm9pZCBvblNjcm9sbENoYW5nZWQoZmxvYXQgcHJldlNjcm9sbCwgZmxvYXQgY3VyU2Nyb2xsKTsKKyAgICAgICAgdm9pZCBvblNjcm9sbENoYW5nZWQoZmxvYXQgcHJldlNjcm9sbCwgZmxvYXQgY3VyU2Nyb2xsLCBUYXNrVmlld0FuaW1hdGlvbiBhbmltYXRpb24pOwogICAgIH0KIAogICAgIENvbnRleHQgbUNvbnRleHQ7CkBAIC01Nyw3ICs1Nyw2IEBACiAgICAgICAgIG1MYXlvdXRBbGdvcml0aG0gPSBsYXlvdXRBbGdvcml0aG07CiAgICAgICAgIG1MaW5lYXJPdXRTbG93SW5JbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKGNvbnRleHQsCiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlcnBvbGF0b3IubGluZWFyX291dF9zbG93X2luKTsKLSAgICAgICAgc2V0U3RhY2tTY3JvbGwoZ2V0U3RhY2tTY3JvbGwoKSk7CiAgICAgfQogCiAgICAgLyoqIFJlc2V0cyB0aGUgdGFzayBzY3JvbGxlci4gKi8KQEAgLTc1LDEyICs3NCwyMiBAQAogICAgICAgICByZXR1cm4gbVN0YWNrU2Nyb2xsUDsKICAgICB9CiAKLSAgICAvKiogU2V0cyB0aGUgY3VycmVudCBzdGFjayBzY3JvbGwgKi8KKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHN0YWNrIHNjcm9sbCBpbW1lZGlhdGVseS4KKyAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRTdGFja1Njcm9sbChmbG9hdCBzKSB7CisgICAgICAgIHNldFN0YWNrU2Nyb2xsKHMsIFRhc2tWaWV3QW5pbWF0aW9uLklNTUVESUFURSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgY3VycmVudCBzdGFjayBzY3JvbGwsIGJ1dCBpbmRpY2F0ZXMgdG8gdGhlIGNhbGxiYWNrIHRoZSBwcmVmZXJyZWQgYW5pbWF0aW9uIHRvCisgICAgICogdXBkYXRlIHRvIHRoaXMgbmV3IHNjcm9sbC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRTdGFja1Njcm9sbChmbG9hdCBzLCBUYXNrVmlld0FuaW1hdGlvbiBhbmltYXRpb24pIHsKICAgICAgICAgZmxvYXQgcHJldlN0YWNrU2Nyb2xsID0gbVN0YWNrU2Nyb2xsUDsKICAgICAgICAgbVN0YWNrU2Nyb2xsUCA9IHM7CiAgICAgICAgIGlmIChtQ2IgIT0gbnVsbCkgewotICAgICAgICAgICAgbUNiLm9uU2Nyb2xsQ2hhbmdlZChwcmV2U3RhY2tTY3JvbGwsIG1TdGFja1Njcm9sbFApOworICAgICAgICAgICAgbUNiLm9uU2Nyb2xsQ2hhbmdlZChwcmV2U3RhY2tTY3JvbGwsIG1TdGFja1Njcm9sbFAsIGFuaW1hdGlvbik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja1ZpZXdUb3VjaEhhbmRsZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tTdGFja1ZpZXdUb3VjaEhhbmRsZXIuamF2YQppbmRleCAxYTZmMTI5Li5jNzQ4ZWZjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrU3RhY2tWaWV3VG91Y2hIYW5kbGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1N0YWNrVmlld1RvdWNoSGFuZGxlci5qYXZhCkBAIC0zMyw4ICszMyw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLkV2ZW50QnVzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLmFjdGl2aXR5LkhpZGVSZWNlbnRzRXZlbnQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuRGlzbWlzc1Rhc2tWaWV3RXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuU3RhY2tWaWV3U2Nyb2xsZWRFdmVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5UYXNrVmlld0Rpc21pc3NlZEV2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5TeXN0ZW1TZXJ2aWNlc1Byb3h5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5VdGlsaXRpZXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkZsaW5nQW5pbWF0aW9uVXRpbHM7CkBAIC0yOTUsNiArMjk1LDcgQEAKICAgICAgICAgICAgIFJlY3QgZnJlZWZvcm1SZWN0ID0gbVN2Lm1MYXlvdXRBbGdvcml0aG0ubUZyZWVmb3JtUmVjdDsKICAgICAgICAgICAgIGlmIChmcmVlZm9ybVJlY3QudG9wIDw9IHkgJiYgeSA8PSBmcmVlZm9ybVJlY3QuYm90dG9tKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1Tdi5sYXVuY2hGcmVlZm9ybVRhc2tzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogQW5pbWF0ZSBSZWNlbnRzIGF3YXkgYXMgd2UgbGF1bmNoIHRoZSBmcmVlZm9ybSB0YXNrcwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzY3LDcgKzM2OCw3IEBACiAgICAgICAgIC8vIFJlLWVuYWJsZSB0b3VjaCBldmVudHMgZnJvbSB0aGlzIHRhc2sgdmlldwogICAgICAgICB0di5zZXRUb3VjaEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGFzayB2aWV3IGZyb20gdGhlIHN0YWNrCi0gICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBEaXNtaXNzVGFza1ZpZXdFdmVudCh0di5nZXRUYXNrKCksIHR2KSk7CisgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBUYXNrVmlld0Rpc21pc3NlZEV2ZW50KHR2LmdldFRhc2soKSwgdHYpKTsKICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBkZWxldGlvbnMgYnkga2V5Ym9hcmQKICAgICAgICAgTWV0cmljc0xvZ2dlci5oaXN0b2dyYW0odHYuZ2V0Q29udGV4dCgpLCAib3ZlcnZpZXdfdGFza19kaXNtaXNzZWRfc291cmNlIiwKICAgICAgICAgICAgICAgICBDb25zdGFudHMuTWV0cmljcy5EaXNtaXNzU291cmNlU3dpcGVHZXN0dXJlKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlldy5qYXZhCmluZGV4IDgxM2ExZmMuLmJjNDQxYjIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXcuamF2YQpAQCAtMzEsNyArMzEsOSBAQAogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLkZsb2F0UHJvcGVydHk7CitpbXBvcnQgYW5kcm9pZC51dGlsLkludFByb3BlcnR5OworaW1wb3J0IGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdPdXRsaW5lUHJvdmlkZXI7CkBAIC00MiwzMyArNDQsNjQgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNBY3Rpdml0eTsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLlJlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50c0NvbmZpZ3VyYXRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuTGF1bmNoVGFza0V2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLkRpc21pc3NUYXNrVmlld0V2ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlRhc2tWaWV3RGlzbWlzc2VkRXZlbnQ7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMudWkuZHJhZ25kcm9wLkRyYWdFbmRFdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5kcmFnbmRyb3AuRHJhZ1N0YXJ0RXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5taXNjLlJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5TeXN0ZW1TZXJ2aWNlc1Byb3h5OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubWlzYy5VdGlsaXRpZXM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFza1N0YWNrOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5QaG9uZVN0YXR1c0JhcjsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKKwogLyogQSB0YXNrIHZpZXcgKi8KIHB1YmxpYyBjbGFzcyBUYXNrVmlldyBleHRlbmRzIEZyYW1lTGF5b3V0IGltcGxlbWVudHMgVGFzay5UYXNrQ2FsbGJhY2tzLAotICAgICAgICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciwgVmlldy5PbkxvbmdDbGlja0xpc3RlbmVyIHsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiVGFza1ZpZXciOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKKyAgICAgICAgVGFza1N0YWNrQW5pbWF0aW9uSGVscGVyLkNhbGxiYWNrcywgVmlldy5PbkNsaWNrTGlzdGVuZXIsIFZpZXcuT25Mb25nQ2xpY2tMaXN0ZW5lciB7CiAKICAgICAvKiogVGhlIFRhc2tWaWV3IGNhbGxiYWNrcyAqLwogICAgIGludGVyZmFjZSBUYXNrVmlld0NhbGxiYWNrcyB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uVGFza1ZpZXdDbGlja2VkKFRhc2tWaWV3IHR2LCBUYXNrIHRhc2ssIGJvb2xlYW4gbG9ja1RvVGFzayk7Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uVGFza1ZpZXdDbGlwU3RhdGVDaGFuZ2VkKFRhc2tWaWV3IHR2KTsKKyAgICAgICAgdm9pZCBvblRhc2tWaWV3Q2xpcFN0YXRlQ2hhbmdlZChUYXNrVmlldyB0dik7CiAgICAgfQogCisgICAgLyoqCisgICAgICogVGhlIGRpbSBvdmVybGF5IGlzIGdlbmVyYWxseSBjYWxjdWxhdGVkIGZyb20gdGhlIHRhc2sgcHJvZ3Jlc3MsIGJ1dCBvY2Nhc2lvbmFsbHkgKGxpa2Ugd2hlbgorICAgICAqIGxhdW5jaGluZykgbmVlZHMgdG8gYmUgYW5pbWF0ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgdGFzayBwcm9ncmVzcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFByb3BlcnR5PFRhc2tWaWV3LCBJbnRlZ2VyPiBESU0gPQorICAgICAgICAgICAgbmV3IEludFByb3BlcnR5PFRhc2tWaWV3PigiZGltIikgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFRhc2tWaWV3IHR2LCBpbnQgZGltKSB7CisgICAgICAgICAgICAgICAgICAgIHR2LnNldERpbShkaW0pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBJbnRlZ2VyIGdldChUYXNrVmlldyB0dikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHYuZ2V0RGltKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJvcGVydHk8VGFza1ZpZXcsIEZsb2F0PiBUQVNLX1BST0dSRVNTID0KKyAgICAgICAgICAgIG5ldyBGbG9hdFByb3BlcnR5PFRhc2tWaWV3PigidGFza1Byb2dyZXNzIikgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFRhc2tWaWV3IHR2LCBmbG9hdCBwKSB7CisgICAgICAgICAgICAgICAgICAgIHR2LnNldFRhc2tQcm9ncmVzcyhwKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgRmxvYXQgZ2V0KFRhc2tWaWV3IHR2KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0di5nZXRUYXNrUHJvZ3Jlc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCiAgICAgZmxvYXQgbVRhc2tQcm9ncmVzczsKLSAgICBPYmplY3RBbmltYXRvciBtVGFza1Byb2dyZXNzQW5pbWF0b3I7CiAgICAgZmxvYXQgbU1heERpbVNjYWxlOwogICAgIGludCBtRGltQWxwaGE7CiAgICAgQWNjZWxlcmF0ZUludGVycG9sYXRvciBtRGltSW50ZXJwb2xhdG9yID0gbmV3IEFjY2VsZXJhdGVJbnRlcnBvbGF0b3IoM2YpOwpAQCAtNzgsOSArMTExLDExIEBACiAKICAgICBUYXNrIG1UYXNrOwogICAgIGJvb2xlYW4gbVRhc2tEYXRhTG9hZGVkOwotICAgIGJvb2xlYW4gbUNsaXBWaWV3SW5TdGFjazsKKyAgICBib29sZWFuIG1DbGlwVmlld0luU3RhY2sgPSB0cnVlOwogICAgIEFuaW1hdGVhYmxlVmlld0JvdW5kcyBtVmlld0JvdW5kczsKLSAgICBwcml2YXRlIEFuaW1hdG9yU2V0IG1DbGlwQW5pbWF0aW9uOworCisgICAgcHJpdmF0ZSBBbmltYXRvclNldCBtVHJhbnNmb3JtQW5pbWF0aW9uOworICAgIHByaXZhdGUgQXJyYXlMaXN0PEFuaW1hdG9yPiBtVG1wQW5pbWF0b3JzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAKICAgICBWaWV3IG1Db250ZW50OwogICAgIFRhc2tWaWV3VGh1bWJuYWlsIG1UaHVtYm5haWxWaWV3OwpAQCAtOTEsMTggKzEyNiw2IEBACiAgICAgUG9pbnQgbURvd25Ub3VjaFBvcyA9IG5ldyBQb2ludCgpOwogCiAgICAgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOwotICAgIEludGVycG9sYXRvciBtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yOwotICAgIEludGVycG9sYXRvciBtUXVpbnRPdXRJbnRlcnBvbGF0b3I7Ci0KLSAgICAvLyBPcHRpbWl6YXRpb25zCi0gICAgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIG1VcGRhdGVEaW1MaXN0ZW5lciA9Ci0gICAgICAgICAgICBuZXcgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRhc2tQcm9ncmVzcygoRmxvYXQpIGFuaW1hdGlvbi5nZXRBbmltYXRlZFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0KIAogICAgIHB1YmxpYyBUYXNrVmlldyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgdGhpcyhjb250ZXh0LCBudWxsKTsKQEAgLTEyMSwyMSArMTQ0LDE1IEBACiAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOwogICAgICAgICBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKICAgICAgICAgbU1heERpbVNjYWxlID0gcmVzLmdldEludGVnZXIoUi5pbnRlZ2VyLnJlY2VudHNfbWF4X3Rhc2tfc3RhY2tfdmlld19kaW0pIC8gMjU1ZjsKLSAgICAgICAgbUNsaXBWaWV3SW5TdGFjayA9IHRydWU7CiAgICAgICAgIG1WaWV3Qm91bmRzID0gbmV3IEFuaW1hdGVhYmxlVmlld0JvdW5kcyh0aGlzLCByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAogICAgICAgICAgICAgICAgIFIuZGltZW4ucmVjZW50c190YXNrX3ZpZXdfcm91bmRlZF9jb3JuZXJzX3JhZGl1cykpOwogICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY29udGV4dCwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKLSAgICAgICAgbUZhc3RPdXRMaW5lYXJJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY29udGV4dCwKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVycG9sYXRvci5mYXN0X291dF9saW5lYXJfaW4pOwotICAgICAgICBtUXVpbnRPdXRJbnRlcnBvbGF0b3IgPSBBbmltYXRpb25VdGlscy5sb2FkSW50ZXJwb2xhdG9yKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlcnBvbGF0b3IuZGVjZWxlcmF0ZV9xdWludCk7Ci0gICAgICAgIHNldFRhc2tQcm9ncmVzcyhnZXRUYXNrUHJvZ3Jlc3MoKSk7Ci0gICAgICAgIHNldERpbShnZXREaW0oKSk7CiAgICAgICAgIGlmIChjb25maWcuZmFrZVNoYWRvd3MpIHsKICAgICAgICAgICAgIHNldEJhY2tncm91bmQobmV3IEZha2VTaGFkb3dEcmF3YWJsZShyZXMsIGNvbmZpZykpOwogICAgICAgICB9CiAgICAgICAgIHNldE91dGxpbmVQcm92aWRlcihtVmlld0JvdW5kcyk7CisgICAgICAgIHNldE9uTG9uZ0NsaWNrTGlzdGVuZXIodGhpcyk7CiAgICAgfQogCiAgICAgLyoqIFNldCBjYWxsYmFjayAqLwpAQCAtMTczLDEyICsxOTAsMjggQEAKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGdldE91dGxpbmUoVmlldyB2aWV3LCBPdXRsaW5lIG91dGxpbmUpIHsKICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIG91dGxpbmUgdG8gbWF0Y2ggdGhlIEZBQiBiYWNrZ3JvdW5kCiAgICAgICAgICAgICAgICAgb3V0bGluZS5zZXRPdmFsKDAsIDAsIG1BY3Rpb25CdXR0b25WaWV3LmdldFdpZHRoKCksIG1BY3Rpb25CdXR0b25WaWV3LmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBvdXRsaW5lLnNldEFscGhhKDAuMzVmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgbUFjdGlvbkJ1dHRvblRyYW5zbGF0aW9uWiA9IG1BY3Rpb25CdXR0b25WaWV3LmdldFRyYW5zbGF0aW9uWigpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIG9uU2l6ZUNoYW5nZWQoaW50IHcsIGludCBoLCBpbnQgb2xkdywgaW50IG9sZGgpIHsKKyAgICAgICAgc3VwZXIub25TaXplQ2hhbmdlZCh3LCBoLCBvbGR3LCBvbGRoKTsKKyAgICAgICAgaWYgKHcgPiAwICYmIGggPiAwKSB7CisgICAgICAgICAgICBtSGVhZGVyVmlldy5vblRhc2tWaWV3U2l6ZUNoYW5nZWQodywgaCk7CisgICAgICAgICAgICBtVGh1bWJuYWlsVmlldy5vblRhc2tWaWV3U2l6ZUNoYW5nZWQodywgaCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG9uSW50ZXJjZXB0VG91Y2hFdmVudChNb3Rpb25FdmVudCBldikgewogICAgICAgICBpZiAoZXYuZ2V0QWN0aW9uKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKICAgICAgICAgICAgIG1Eb3duVG91Y2hQb3Muc2V0KChpbnQpIChldi5nZXRYKCkgKiBnZXRTY2FsZVgoKSksIChpbnQpIChldi5nZXRZKCkgKiBnZXRTY2FsZVkoKSkpOwpAQCAtMjE1LDI5NSArMjQ4LDUzIEBACiAgICAgICAgIGludmFsaWRhdGVPdXRsaW5lKCk7CiAgICAgfQogCi0gICAgLyoqIFN5bmNocm9uaXplcyB0aGlzIHZpZXcncyBwcm9wZXJ0aWVzIHdpdGggdGhlIHRhc2sncyB0cmFuc2Zvcm0gKi8KLSAgICB2b2lkIHVwZGF0ZVZpZXdQcm9wZXJ0aWVzVG9UYXNrVHJhbnNmb3JtKFRhc2tWaWV3VHJhbnNmb3JtIHRvVHJhbnNmb3JtLCBpbnQgY2xpcEJvdHRvbSwKLSAgICAgICAgICAgIGludCBkdXJhdGlvbiwgSW50ZXJwb2xhdG9yIGludGVycG9sYXRvciwKLSAgICAgICAgICAgIFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lciB1cGRhdGVDYWxsYmFjaykgeworICAgIHZvaWQgdXBkYXRlVmlld1Byb3BlcnRpZXNUb1Rhc2tUcmFuc2Zvcm0oVGFza1ZpZXdUcmFuc2Zvcm0gdG9UcmFuc2Zvcm0sCisgICAgICAgICAgICBUYXNrVmlld0FuaW1hdGlvbiB0b0FuaW1hdGlvbiwgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUNhbGxiYWNrKSB7CiAgICAgICAgIFJlY2VudHNDb25maWd1cmF0aW9uIGNvbmZpZyA9IFJlY2VudHMuZ2V0Q29uZmlndXJhdGlvbigpOwotICAgICAgICBVdGlsaXRpZXMuY2FuY2VsQW5pbWF0aW9uV2l0aG91dENhbGxiYWNrcyhtQ2xpcEFuaW1hdGlvbik7CisgICAgICAgIFV0aWxpdGllcy5jYW5jZWxBbmltYXRpb25XaXRob3V0Q2FsbGJhY2tzKG1UcmFuc2Zvcm1BbmltYXRpb24pOwogCi0gICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0KLSAgICAgICAgdG9UcmFuc2Zvcm0uYXBwbHlUb1Rhc2tWaWV3KHRoaXMsIGR1cmF0aW9uLCBpbnRlcnBvbGF0b3IsIGZhbHNlLAotICAgICAgICAgICAgICAgICFjb25maWcuZmFrZVNoYWRvd3MsIHVwZGF0ZUNhbGxiYWNrKTsKLQotICAgICAgICAvLyBVcGRhdGUgdGhlIGNsaXBwaW5nCi0gICAgICAgIGlmIChkdXJhdGlvbiA+IDApIHsKLSAgICAgICAgICAgIG1DbGlwQW5pbWF0aW9uID0gbmV3IEFuaW1hdG9yU2V0KCk7Ci0gICAgICAgICAgICBtQ2xpcEFuaW1hdGlvbi5wbGF5VG9nZXRoZXIoCi0gICAgICAgICAgICAgICAgICAgIE9iamVjdEFuaW1hdG9yLm9mSW50KG1WaWV3Qm91bmRzLCBBbmltYXRlYWJsZVZpZXdCb3VuZHMuQ0xJUF9CT1RUT00sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXdCb3VuZHMuZ2V0Q2xpcEJvdHRvbSgpLCBjbGlwQm90dG9tKSwKLSAgICAgICAgICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3Iub2ZJbnQobVZpZXdCb3VuZHMsIEFuaW1hdGVhYmxlVmlld0JvdW5kcy5DTElQX1JJR0hULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3Qm91bmRzLmdldENsaXBSaWdodCgpLCB0b1RyYW5zZm9ybS5jbGlwUmlnaHQpLAotICAgICAgICAgICAgICAgICAgICBPYmplY3RBbmltYXRvci5vZkZsb2F0KG1UaHVtYm5haWxWaWV3LCBUYXNrVmlld1RodW1ibmFpbC5CSVRNQVBfU0NBTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRodW1ibmFpbFZpZXcuZ2V0Qml0bWFwU2NhbGUoKSwgdG9UcmFuc2Zvcm0udGh1bWJuYWlsU2NhbGUpKTsKLSAgICAgICAgICAgIG1DbGlwQW5pbWF0aW9uLnNldFN0YXJ0RGVsYXkodG9UcmFuc2Zvcm0uc3RhcnREZWxheSk7Ci0gICAgICAgICAgICBtQ2xpcEFuaW1hdGlvbi5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgICAgICBtQ2xpcEFuaW1hdGlvbi5zZXRJbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTsKLSAgICAgICAgICAgIG1DbGlwQW5pbWF0aW9uLnN0YXJ0KCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVmlld0JvdW5kcy5zZXRDbGlwQm90dG9tKGNsaXBCb3R0b20sIGZhbHNlIC8qIGZvcmNlVXBkYXRlICovKTsKLSAgICAgICAgICAgIG1WaWV3Qm91bmRzLnNldENsaXBSaWdodCh0b1RyYW5zZm9ybS5jbGlwUmlnaHQsIGZhbHNlIC8qIGZvcmNlVXBkYXRlICovKTsKLSAgICAgICAgICAgIG1UaHVtYm5haWxWaWV3LnNldEJpdG1hcFNjYWxlKHRvVHJhbnNmb3JtLnRodW1ibmFpbFNjYWxlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNvbmZpZy51c2VIYXJkd2FyZUxheWVycykgewotICAgICAgICAgICAgbVRodW1ibmFpbFZpZXcudXBkYXRlVGh1bWJuYWlsVmlzaWJpbGl0eShjbGlwQm90dG9tIC0gZ2V0UGFkZGluZ0JvdHRvbSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgdGFzayBwcm9ncmVzcwotICAgICAgICBVdGlsaXRpZXMuY2FuY2VsQW5pbWF0aW9uV2l0aG91dENhbGxiYWNrcyhtVGFza1Byb2dyZXNzQW5pbWF0b3IpOwotICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkgeworICAgICAgICAvLyBDb21wb3NlIHRoZSBhbmltYXRpb25zIGZvciB0aGUgdHJhbnNmb3JtCisgICAgICAgIG1UbXBBbmltYXRvcnMuY2xlYXIoKTsKKyAgICAgICAgdG9UcmFuc2Zvcm0uYXBwbHlUb1Rhc2tWaWV3KHRoaXMsIG1UbXBBbmltYXRvcnMsIHRvQW5pbWF0aW9uLCAhY29uZmlnLmZha2VTaGFkb3dzKTsKKyAgICAgICAgaWYgKHRvQW5pbWF0aW9uLmlzSW1tZWRpYXRlKCkpIHsKICAgICAgICAgICAgIHNldFRhc2tQcm9ncmVzcyh0b1RyYW5zZm9ybS5wKTsKKyAgICAgICAgICAgIGlmICh0b0FuaW1hdGlvbi5saXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdG9BbmltYXRpb24ubGlzdGVuZXIub25BbmltYXRpb25FbmQobnVsbCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVGFza1Byb2dyZXNzQW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZkZsb2F0KHRoaXMsICJ0YXNrUHJvZ3Jlc3MiLCB0b1RyYW5zZm9ybS5wKTsKLSAgICAgICAgICAgIG1UYXNrUHJvZ3Jlc3NBbmltYXRvci5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgICAgICBtVGFza1Byb2dyZXNzQW5pbWF0b3IuYWRkVXBkYXRlTGlzdGVuZXIobVVwZGF0ZURpbUxpc3RlbmVyKTsKLSAgICAgICAgICAgIG1UYXNrUHJvZ3Jlc3NBbmltYXRvci5zdGFydCgpOworICAgICAgICAgICAgaWYgKEZsb2F0LmNvbXBhcmUoZ2V0VGFza1Byb2dyZXNzKCksIHRvVHJhbnNmb3JtLnApICE9IDApIHsKKyAgICAgICAgICAgICAgICBtVG1wQW5pbWF0b3JzLmFkZChPYmplY3RBbmltYXRvci5vZkZsb2F0KHRoaXMsIFRBU0tfUFJPR1JFU1MsIGdldFRhc2tQcm9ncmVzcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9UcmFuc2Zvcm0ucCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVmFsdWVBbmltYXRvciB1cGRhdGVDYWxsYmFja0FuaW0gPSBWYWx1ZUFuaW1hdG9yLm9mSW50KDAsIDEpOworICAgICAgICAgICAgdXBkYXRlQ2FsbGJhY2tBbmltLmFkZFVwZGF0ZUxpc3RlbmVyKHVwZGF0ZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIG1UbXBBbmltYXRvcnMuYWRkKHVwZGF0ZUNhbGxiYWNrQW5pbSk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYW5pbWF0b3IKKyAgICAgICAgICAgIG1UcmFuc2Zvcm1BbmltYXRpb24gPSB0b0FuaW1hdGlvbi5jcmVhdGVBbmltYXRvcihtVG1wQW5pbWF0b3JzKTsKKyAgICAgICAgICAgIG1UcmFuc2Zvcm1BbmltYXRpb24uc3RhcnQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8qKiBSZXNldHMgdGhpcyB2aWV3J3MgcHJvcGVydGllcyAqLwogICAgIHZvaWQgcmVzZXRWaWV3UHJvcGVydGllcygpIHsKKyAgICAgICAgVXRpbGl0aWVzLmNhbmNlbEFuaW1hdGlvbldpdGhvdXRDYWxsYmFja3MobVRyYW5zZm9ybUFuaW1hdGlvbik7CiAgICAgICAgIHNldERpbSgwKTsKLSAgICAgICAgc2V0TGF5ZXJUeXBlKFZpZXcuTEFZRVJfVFlQRV9OT05FLCBudWxsKTsKICAgICAgICAgc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwogICAgICAgICBnZXRWaWV3Qm91bmRzKCkucmVzZXQoKTsKICAgICAgICAgVGFza1ZpZXdUcmFuc2Zvcm0ucmVzZXQodGhpcyk7Ci0gICAgICAgIGlmIChtQWN0aW9uQnV0dG9uVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRTY2FsZVgoMWYpOwotICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0U2NhbGVZKDFmKTsKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldEFscGhhKDFmKTsKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFRyYW5zbGF0aW9uWihtQWN0aW9uQnV0dG9uVHJhbnNsYXRpb25aKTsKLSAgICAgICAgfQorCisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFNjYWxlWCgxZik7CisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFNjYWxlWSgxZik7CisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldEFscGhhKDFmKTsKKyAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0VHJhbnNsYXRpb25aKG1BY3Rpb25CdXR0b25UcmFuc2xhdGlvblopOwogICAgIH0KIAotICAgIC8qKiBQcmVwYXJlcyB0aGlzIHRhc2sgdmlldyBmb3IgdGhlIGVudGVyLXJlY2VudHMgYW5pbWF0aW9ucy4gIFRoaXMgaXMgY2FsbGVkIGVhcmxpZXIgaW4gdGhlCi0gICAgICogZmlyc3QgbGF5b3V0IGJlY2F1c2UgdGhlIGFjdHVhbCBhbmltYXRpb24gaW50byByZWNlbnRzIG1heSB0YWtlIGEgbG9uZyB0aW1lLiAqLwotICAgIHZvaWQgcHJlcGFyZUVudGVyUmVjZW50c0FuaW1hdGlvbihib29sZWFuIGlzVGFza1ZpZXdMYXVuY2hUYXJnZXRUYXNrLCBib29sZWFuIGhpZGVUYXNrLAotICAgICAgICAgICAgYm9vbGVhbiBvY2NsdWRlc0xhdW5jaFRhcmdldCwgaW50IG9mZnNjcmVlblkpIHsKLSAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIFJlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlIGxhdW5jaFN0YXRlID0gY29uZmlnLmdldExhdW5jaFN0YXRlKCk7Ci0gICAgICAgIGludCBpbml0aWFsRGltID0gZ2V0RGltKCk7Ci0gICAgICAgIGlmIChoaWRlVGFzaykgewotICAgICAgICAgICAgc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRIYXNDb25maWd1cmF0aW9uQ2hhbmdlZCkgewotICAgICAgICAgICAgLy8gSnVzdCBsb2FkIHRoZSB2aWV3cyBhcy1pcwotICAgICAgICB9IGVsc2UgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkRnJvbUFwcFdpdGhUaHVtYm5haWwpIHsKLSAgICAgICAgICAgIGlmIChpc1Rhc2tWaWV3TGF1bmNoVGFyZ2V0VGFzaykgewotICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZGltIHRvIDAgc28gd2UgY2FuIGFuaW1hdGUgaXQgaW4KLSAgICAgICAgICAgICAgICBpbml0aWFsRGltID0gMDsKLSAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBhY3Rpb24gYnV0dG9uCi0gICAgICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0QWxwaGEoMGYpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvY2NsdWRlc0xhdW5jaFRhcmdldCkgewotICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIHRhc2sgdmlldyBvZmYgc2NyZWVuIChiZWxvdykgc28gd2UgY2FuIGFuaW1hdGUgaXQgaW4KLSAgICAgICAgICAgICAgICBzZXRUcmFuc2xhdGlvblkob2Zmc2NyZWVuWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTdGF0ZS5sYXVuY2hlZEZyb21Ib21lKSB7Ci0gICAgICAgICAgICAvLyBNb3ZlIHRoZSB0YXNrIHZpZXcgb2ZmIHNjcmVlbiAoYmVsb3cpIHNvIHdlIGNhbiBhbmltYXRlIGl0IGluCi0gICAgICAgICAgICBzZXRUcmFuc2xhdGlvblkob2Zmc2NyZWVuWSk7Ci0gICAgICAgICAgICBzZXRUcmFuc2xhdGlvblooMCk7Ci0gICAgICAgICAgICBzZXRTY2FsZVgoMWYpOwotICAgICAgICAgICAgc2V0U2NhbGVZKDFmKTsKLSAgICAgICAgfQotICAgICAgICAvLyBBcHBseSB0aGUgY3VycmVudCBkaW0KLSAgICAgICAgc2V0RGltKGluaXRpYWxEaW0pOwotICAgIH0KLQotICAgIC8qKiBBbmltYXRlcyB0aGlzIHRhc2sgdmlldyBhcyBpdCBlbnRlcnMgcmVjZW50cyAqLwotICAgIHZvaWQgc3RhcnRFbnRlclJlY2VudHNBbmltYXRpb24oZmluYWwgVmlld0FuaW1hdGlvbi5UYXNrVmlld0VudGVyQ29udGV4dCBjdHgpIHsKLSAgICAgICAgUmVjZW50c0NvbmZpZ3VyYXRpb24gY29uZmlnID0gUmVjZW50cy5nZXRDb25maWd1cmF0aW9uKCk7Ci0gICAgICAgIFJlY2VudHNBY3Rpdml0eUxhdW5jaFN0YXRlIGxhdW5jaFN0YXRlID0gY29uZmlnLmdldExhdW5jaFN0YXRlKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgZmluYWwgVGFza1ZpZXdUcmFuc2Zvcm0gdHJhbnNmb3JtID0gY3R4LmN1cnJlbnRUYXNrVHJhbnNmb3JtOwotICAgICAgICBmaW5hbCBpbnQgdGFza1ZpZXdFbnRlckZyb21BcHBEdXJhdGlvbiA9IHJlcy5nZXRJbnRlZ2VyKAotICAgICAgICAgICAgICAgIFIuaW50ZWdlci5yZWNlbnRzX3Rhc2tfZW50ZXJfZnJvbV9hcHBfZHVyYXRpb24pOwotICAgICAgICBmaW5hbCBpbnQgdGFza1ZpZXdFbnRlckZyb21Ib21lRHVyYXRpb24gPSByZXMuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c190YXNrX2VudGVyX2Zyb21faG9tZV9kdXJhdGlvbik7Ci0gICAgICAgIGZpbmFsIGludCB0YXNrVmlld0VudGVyRnJvbUhvbWVTdGFnZ2VyRGVsYXkgPSByZXMuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c190YXNrX2VudGVyX2Zyb21faG9tZV9zdGFnZ2VyX2RlbGF5KTsKLSAgICAgICAgZmluYWwgaW50IHRhc2tWaWV3QWZmaWxpYXRlR3JvdXBFbnRlck9mZnNldCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgUi5kaW1lbi5yZWNlbnRzX3Rhc2tfdmlld19hZmZpbGlhdGVfZ3JvdXBfZW50ZXJfb2Zmc2V0KTsKLQotICAgICAgICBpZiAobGF1bmNoU3RhdGUubGF1bmNoZWRGcm9tQXBwV2l0aFRodW1ibmFpbCkgewotICAgICAgICAgICAgaWYgKG1UYXNrLmlzTGF1bmNoVGFyZ2V0KSB7Ci0gICAgICAgICAgICAgICAgLy8gSW1tZWRpYXRlbHkgc3RhcnQgdGhlIGRpbSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBhbmltYXRlRGltVG9Qcm9ncmVzcyh0YXNrVmlld0VudGVyRnJvbUFwcER1cmF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpOwotICAgICAgICAgICAgICAgIGN0eC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIGFjdGlvbiBidXR0b24gaW4KLSAgICAgICAgICAgICAgICBmYWRlSW5BY3Rpb25CdXR0b24odGFza1ZpZXdFbnRlckZyb21BcHBEdXJhdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIHRhc2sgdXAgaWYgaXQgd2FzIG9jY2x1ZGluZyB0aGUgbGF1bmNoIHRhcmdldAotICAgICAgICAgICAgICAgIGlmIChjdHguY3VycmVudFRhc2tPY2NsdWRlc0xhdW5jaFRhcmdldCkgewotICAgICAgICAgICAgICAgICAgICBzZXRUcmFuc2xhdGlvblkodHJhbnNmb3JtLnRyYW5zbGF0aW9uWSArIHRhc2tWaWV3QWZmaWxpYXRlR3JvdXBFbnRlck9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEFscGhhKDBmKTsKLSAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZSgpLmFscGhhKDFmKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvblkodHJhbnNmb3JtLnRyYW5zbGF0aW9uWSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VXBkYXRlTGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGFzRW5kZWQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSBhbmltYXRpb24gbGlzdGVuZXIgaW5zdGVhZCBvZiB3aXRoRW5kQWN0aW9uKCkgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgb25BbmltYXRpb25FbmQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgYW5pbWF0b3IgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZChBbmltYXRvciBhbmltYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbmRlZCkgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRW5kZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbih0YXNrVmlld0VudGVyRnJvbUhvbWVEdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGVsc2UgaWYgKGxhdW5jaFN0YXRlLmxhdW5jaGVkRnJvbUhvbWUpIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIHRhc2tzIHVwCi0gICAgICAgICAgICBpbnQgZnJvbnRJbmRleCA9IChjdHguY3VycmVudFN0YWNrVmlld0NvdW50IC0gY3R4LmN1cnJlbnRTdGFja1ZpZXdJbmRleCAtIDEpOwotICAgICAgICAgICAgaW50IGRlbGF5ID0gZnJvbnRJbmRleCAqIHRhc2tWaWV3RW50ZXJGcm9tSG9tZVN0YWdnZXJEZWxheTsKLQotICAgICAgICAgICAgc2V0U2NhbGVYKHRyYW5zZm9ybS5zY2FsZSk7Ci0gICAgICAgICAgICBzZXRTY2FsZVkodHJhbnNmb3JtLnNjYWxlKTsKLSAgICAgICAgICAgIGlmICghY29uZmlnLmZha2VTaGFkb3dzKSB7Ci0gICAgICAgICAgICAgICAgYW5pbWF0ZSgpLnRyYW5zbGF0aW9uWih0cmFuc2Zvcm0udHJhbnNsYXRpb25aKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25ZKHRyYW5zZm9ybS50cmFuc2xhdGlvblkpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KGRlbGF5KQotICAgICAgICAgICAgICAgICAgICAuc2V0VXBkYXRlTGlzdGVuZXIoY3R4LnVwZGF0ZUxpc3RlbmVyKQotICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZSBib29sZWFuIGhhc0VuZGVkOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgdGhlIGFuaW1hdGlvbiBsaXN0ZW5lciBpbnN0ZWFkIG9mIHdpdGhFbmRBY3Rpb24oKSB0byBlbnN1cmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25BbmltYXRpb25FbmQoKSBpcyBjYWxsZWQgd2hlbiB0aGUgYW5pbWF0b3IgaXMgY2FuY2VsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uRW5kKEFuaW1hdG9yIGFuaW1hdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNFbmRlZCkgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNFbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobVF1aW50T3V0SW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24odGFza1ZpZXdFbnRlckZyb21Ib21lRHVyYXRpb24gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb250SW5kZXggKiB0YXNrVmlld0VudGVyRnJvbUhvbWVTdGFnZ2VyRGVsYXkpCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwotICAgICAgICAgICAgY3R4LnBvc3RBbmltYXRpb25UcmlnZ2VyLmluY3JlbWVudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2FuY2VsRW50ZXJSZWNlbnRzQW5pbWF0aW9uKCkgewotICAgICAgICBhbmltYXRlKCkuY2FuY2VsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZmFkZUluQWN0aW9uQnV0dG9uKGludCBkdXJhdGlvbikgewotICAgICAgICAvLyBIaWRlIHRoZSBhY3Rpb24gYnV0dG9uCi0gICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldEFscGhhKDBmKTsKLQotICAgICAgICAvLyBBbmltYXRlIHRoZSBhY3Rpb24gYnV0dG9uIGluCi0gICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LmFuaW1hdGUoKS5hbHBoYSgxZikKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZHVyYXRpb24pCi0gICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihQaG9uZVN0YXR1c0Jhci5BTFBIQV9JTikKLSAgICAgICAgICAgICAgICAuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICAvKiogQW5pbWF0ZXMgdGhpcyB0YXNrIHZpZXcgYXMgaXQgbGVhdmVzIHJlY2VudHMgYnkgcHJlc3NpbmcgaG9tZS4gKi8KLSAgICB2b2lkIHN0YXJ0RXhpdFRvSG9tZUFuaW1hdGlvbihWaWV3QW5pbWF0aW9uLlRhc2tWaWV3RXhpdENvbnRleHQgY3R4KSB7Ci0gICAgICAgIGludCB0YXNrVmlld0V4aXRUb0hvbWVEdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfdGFza19leGl0X3RvX2hvbWVfZHVyYXRpb24pOwotICAgICAgICBhbmltYXRlKCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25ZKGN0eC5vZmZzY3JlZW5UcmFuc2xhdGlvblkpCi0gICAgICAgICAgICAgICAgLnNldFN0YXJ0RGVsYXkoMCkKLSAgICAgICAgICAgICAgICAuc2V0VXBkYXRlTGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKHRhc2tWaWV3RXhpdFRvSG9tZUR1cmF0aW9uKQotICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKGN0eC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5kZWNyZW1lbnRBc1J1bm5hYmxlKCkpCi0gICAgICAgICAgICAgICAgLnN0YXJ0KCk7Ci0gICAgICAgIGN0eC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKLSAgICB9Ci0KLSAgICAvKiogQW5pbWF0ZXMgdGhpcyB0YXNrIHZpZXcgYXMgaXQgZXhpdHMgcmVjZW50cyAqLwotICAgIHZvaWQgc3RhcnRMYXVuY2hUYXNrQW5pbWF0aW9uKGZpbmFsIFJ1bm5hYmxlIHBvc3RBbmltUnVubmFibGUsIGJvb2xlYW4gaXNMYXVuY2hpbmdUYXNrLAotICAgICAgICAgICAgYm9vbGVhbiBvY2NsdWRlc0xhdW5jaFRhcmdldCwgYm9vbGVhbiBsb2NrVG9UYXNrKSB7Ci0gICAgICAgIGZpbmFsIGludCB0YXNrVmlld0V4aXRUb0FwcER1cmF0aW9uID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcigKLSAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c190YXNrX2V4aXRfdG9fYXBwX2R1cmF0aW9uKTsKLSAgICAgICAgZmluYWwgaW50IHRhc2tWaWV3QWZmaWxpYXRlR3JvdXBFbnRlck9mZnNldCA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X2FmZmlsaWF0ZV9ncm91cF9lbnRlcl9vZmZzZXQpOwotCi0gICAgICAgIGlmIChpc0xhdW5jaGluZ1Rhc2spIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIGRpbQotICAgICAgICAgICAgaWYgKG1EaW1BbHBoYSA+IDApIHsKLSAgICAgICAgICAgICAgICBPYmplY3RBbmltYXRvciBhbmltID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgImRpbSIsIDApOwotICAgICAgICAgICAgICAgIGFuaW0uc2V0RHVyYXRpb24odGFza1ZpZXdFeGl0VG9BcHBEdXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgYW5pbS5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRMaW5lYXJJbkludGVycG9sYXRvcik7Ci0gICAgICAgICAgICAgICAgYW5pbS5zdGFydCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBbmltYXRlIHRoZSBhY3Rpb24gYnV0dG9uIGF3YXkKLSAgICAgICAgICAgIGlmICghbG9ja1RvVGFzaykgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvU2NhbGUgPSAwLjlmOwotICAgICAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LmFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNjYWxlWCh0b1NjYWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNjYWxlWSh0b1NjYWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LmFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KDApCi0gICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbih0YXNrVmlld0V4aXRUb0FwcER1cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0TGluZWFySW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKHBvc3RBbmltUnVubmFibGUpCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSGlkZSB0aGUgZGlzbWlzcyBidXR0b24KLSAgICAgICAgICAgIG1IZWFkZXJWaWV3LnN0YXJ0TGF1bmNoVGFza0Rpc21pc3NBbmltYXRpb24ocG9zdEFuaW1SdW5uYWJsZSk7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFub3RoZXIgdmlldyBpbiB0aGUgdGFzayBncm91cGluZyBhbmQgaXMgaW4gZnJvbnQgb2YgdGhlIGxhdW5jaCB0YXNrLAotICAgICAgICAgICAgLy8gYW5pbWF0ZSBpdCBhd2F5IGZpcnN0Ci0gICAgICAgICAgICBpZiAob2NjbHVkZXNMYXVuY2hUYXJnZXQpIHsKLSAgICAgICAgICAgICAgICBhbmltYXRlKCkuYWxwaGEoMGYpCi0gICAgICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvblkoZ2V0VHJhbnNsYXRpb25ZKCkgKyB0YXNrVmlld0FmZmlsaWF0ZUdyb3VwRW50ZXJPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KDApCi0gICAgICAgICAgICAgICAgICAgIC5zZXRVcGRhdGVMaXN0ZW5lcihudWxsKQotICAgICAgICAgICAgICAgICAgICAuc2V0TGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24odGFza1ZpZXdFeGl0VG9BcHBEdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQW5pbWF0ZXMgdGhlIGRlbGV0aW9uIG9mIHRoaXMgdGFzayB2aWV3ICovCi0gICAgdm9pZCBzdGFydERlbGV0ZVRhc2tBbmltYXRpb24oZmluYWwgUnVubmFibGUgciwgaW50IGRlbGF5KSB7Ci0gICAgICAgIGludCB0YXNrVmlld1JlbW92ZUFuaW1EdXJhdGlvbiA9IGdldFJlc291cmNlcygpLmdldEludGVnZXIoCi0gICAgICAgICAgICAgICAgUi5pbnRlZ2VyLnJlY2VudHNfYW5pbWF0ZV90YXNrX3ZpZXdfcmVtb3ZlX2R1cmF0aW9uKTsKLSAgICAgICAgaW50IHRhc2tWaWV3UmVtb3ZlQW5pbVRyYW5zbGF0aW9uWFB4ID0gZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAotICAgICAgICAgICAgICAgIFIuZGltZW4ucmVjZW50c190YXNrX3ZpZXdfcmVtb3ZlX2FuaW1fdHJhbnNsYXRpb25feCk7Ci0KLSAgICAgICAgLy8gRGlzYWJsaW5nIGNsaXBwaW5nIHdpdGggdGhlIHN0YWNrIHdoaWxlIHRoZSB2aWV3IGlzIGFuaW1hdGluZyBhd2F5Ci0gICAgICAgIHNldENsaXBWaWV3SW5TdGFjayhmYWxzZSk7Ci0KLSAgICAgICAgYW5pbWF0ZSgpLnRyYW5zbGF0aW9uWCh0YXNrVmlld1JlbW92ZUFuaW1UcmFuc2xhdGlvblhQeCkKLSAgICAgICAgICAgIC5hbHBoYSgwZikKLSAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KGRlbGF5KQotICAgICAgICAgICAgLnNldFVwZGF0ZUxpc3RlbmVyKG51bGwpCi0gICAgICAgICAgICAuc2V0TGlzdGVuZXIobnVsbCkKLSAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAuc2V0RHVyYXRpb24odGFza1ZpZXdSZW1vdmVBbmltRHVyYXRpb24pCi0gICAgICAgICAgICAud2l0aEVuZEFjdGlvbihuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByLnJ1bigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gUmUtZW5hYmxlIGNsaXBwaW5nIHdpdGggdGhlIHN0YWNrICh3ZSB3aWxsIHJldXNlIHRoaXMgdmlldykKLSAgICAgICAgICAgICAgICAgICAgc2V0Q2xpcFZpZXdJblN0YWNrKHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAuc3RhcnQoKTsKKyAgICAvKioKKyAgICAgKiBDYW5jZWxzIGFueSBjdXJyZW50IHRyYW5zZm9ybSBhbmltYXRpb25zLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNhbmNlbFRyYW5zZm9ybUFuaW1hdGlvbigpIHsKKyAgICAgICAgVXRpbGl0aWVzLmNhbmNlbEFuaW1hdGlvbldpdGhvdXRDYWxsYmFja3MobVRyYW5zZm9ybUFuaW1hdGlvbik7CiAgICAgfQogCiAgICAgLyoqIEVuYWJsZXMvZGlzYWJsZXMgaGFuZGxpbmcgdG91Y2ggb24gdGhpcyB0YXNrIHZpZXcuICovCkBAIC01MzAsMTIgKzMyMSwxNCBAQAogICAgIHZvaWQgZGlzbWlzc1Rhc2soKSB7CiAgICAgICAgIC8vIEFuaW1hdGUgb3V0IHRoZSB2aWV3IGFuZCBjYWxsIHRoZSBjYWxsYmFjawogICAgICAgICBmaW5hbCBUYXNrVmlldyB0diA9IHRoaXM7Ci0gICAgICAgIHN0YXJ0RGVsZXRlVGFza0FuaW1hdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgIERpc21pc3NUYXNrVmlld0V2ZW50IGRpc21pc3NFdmVudCA9IG5ldyBEaXNtaXNzVGFza1ZpZXdFdmVudCh0diwgbVRhc2spOworICAgICAgICBkaXNtaXNzRXZlbnQuYWRkUG9zdEFuaW1hdGlvbkNhbGxiYWNrKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIEV2ZW50QnVzLmdldERlZmF1bHQoKS5zZW5kKG5ldyBEaXNtaXNzVGFza1ZpZXdFdmVudChtVGFzaywgdHYpKTsKKyAgICAgICAgICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChuZXcgVGFza1ZpZXdEaXNtaXNzZWRFdmVudChtVGFzaywgdHYpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSwgMCk7CisgICAgICAgIH0pOworICAgICAgICBFdmVudEJ1cy5nZXREZWZhdWx0KCkuc2VuZChkaXNtaXNzRXZlbnQpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNTg2LDEyICszNzksOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmxvYXQgZGltQWxwaGEgPSBtRGltQWxwaGEgLyAyNTUuMGY7Ci0gICAgICAgICAgICBpZiAobVRodW1ibmFpbFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1UaHVtYm5haWxWaWV3LnNldERpbUFscGhhKGRpbUFscGhhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtSGVhZGVyVmlldyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUhlYWRlclZpZXcuc2V0RGltQWxwaGEoZGltKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1UaHVtYm5haWxWaWV3LnNldERpbUFscGhhKGRpbUFscGhhKTsKKyAgICAgICAgICAgIG1IZWFkZXJWaWV3LnNldERpbUFscGhhKGRpbUFscGhhKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjAxLDE4ICszOTAsMTggQEAKICAgICB9CiAKICAgICAvKiogQW5pbWF0ZXMgdGhlIGRpbSB0byB0aGUgdGFzayBwcm9ncmVzcy4gKi8KLSAgICB2b2lkIGFuaW1hdGVEaW1Ub1Byb2dyZXNzKGludCBkdXJhdGlvbiwgQW5pbWF0b3IuQW5pbWF0b3JMaXN0ZW5lciBwb3N0QW5pbVJ1bm5hYmxlKSB7CisgICAgdm9pZCBhbmltYXRlRGltVG9Qcm9ncmVzcyhpbnQgZHVyYXRpb24sIEFuaW1hdG9yLkFuaW1hdG9yTGlzdGVuZXIgYW5pbUxpc3RlbmVyKSB7CiAgICAgICAgIC8vIEFuaW1hdGUgdGhlIGRpbSBpbnRvIHZpZXcgYXMgd2VsbAogICAgICAgICBpbnQgdG9EaW0gPSBnZXREaW1Gcm9tVGFza1Byb2dyZXNzKCk7CiAgICAgICAgIGlmICh0b0RpbSAhPSBnZXREaW0oKSkgewotICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbSA9IE9iamVjdEFuaW1hdG9yLm9mSW50KFRhc2tWaWV3LnRoaXMsICJkaW0iLCB0b0RpbSk7CisgICAgICAgICAgICBPYmplY3RBbmltYXRvciBhbmltID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgRElNLCBnZXREaW0oKSwgdG9EaW0pOwogICAgICAgICAgICAgYW5pbS5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0gICAgICAgICAgICBpZiAocG9zdEFuaW1SdW5uYWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYW5pbS5hZGRMaXN0ZW5lcihwb3N0QW5pbVJ1bm5hYmxlKTsKKyAgICAgICAgICAgIGlmIChhbmltTGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFuaW0uYWRkTGlzdGVuZXIoYW5pbUxpc3RlbmVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFuaW0uc3RhcnQoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBvc3RBbmltUnVubmFibGUub25BbmltYXRpb25FbmQobnVsbCk7CisgICAgICAgICAgICBhbmltTGlzdGVuZXIub25BbmltYXRpb25FbmQobnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYzMCwyMSArNDE5LDExIEBACiAgICAgICAgIHNldERpbShnZXREaW1Gcm9tVGFza1Byb2dyZXNzKCkpOwogICAgIH0KIAotICAgIC8qKioqIFZpZXcgZm9jdXMgc3RhdGUgKioqKi8KLQogICAgIC8qKgogICAgICAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGlzIHRhc2suCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZFN0YXRlKGJvb2xlYW4gaXNGb2N1c2VkLCBib29sZWFuIGFuaW1hdGVkLCBib29sZWFuIHJlcXVlc3RWaWV3Rm9jdXMpIHsKLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJzZXRGb2N1c2VkU3RhdGU6ICIgKyBtVGFzay5hY3Rpdml0eUxhYmVsICsgIiBmb2N1c2VkOiAiICsgaXNGb2N1c2VkICsKLSAgICAgICAgICAgICAgICAgICAgIiBhbmltYXRlZDogIiArIGFuaW1hdGVkICsgIiByZXF1ZXN0Vmlld0ZvY3VzOiAiICsgcmVxdWVzdFZpZXdGb2N1cyArCi0gICAgICAgICAgICAgICAgICAgICIgaXNGb2N1c2VkKCk6ICIgKyBpc0ZvY3VzZWQoKSArCi0gICAgICAgICAgICAgICAgICAgICIgaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpOiAiICsgaXNBY2Nlc3NpYmlsaXR5Rm9jdXNlZCgpKTsKLSAgICAgICAgfQotCisgICAgcHVibGljIHZvaWQgc2V0Rm9jdXNlZFN0YXRlKGJvb2xlYW4gaXNGb2N1c2VkLCBib29sZWFuIHJlcXVlc3RWaWV3Rm9jdXMpIHsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7Ci0gICAgICAgIG1IZWFkZXJWaWV3Lm9uVGFza1ZpZXdGb2N1c0NoYW5nZWQoaXNGb2N1c2VkLCBhbmltYXRlZCk7CiAgICAgICAgIGlmIChpc0ZvY3VzZWQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0Vmlld0ZvY3VzICYmICFpc0ZvY3VzZWQoKSkgewogICAgICAgICAgICAgICAgIHJlcXVlc3RGb2N1cygpOwpAQCAtNjU5LDQ1ICs0MzgsMTMxIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioqKiBUYXNrQ2FsbGJhY2tzIEltcGxlbWVudGF0aW9uICoqKiovCisgICAgLyoqCisgICAgICogU2hvd3MgdGhlIGFjdGlvbiBidXR0b24uCisgICAgICogQHBhcmFtIGZhZGVJbiB3aGV0aGVyIG9yIG5vdCB0byBhbmltYXRlIHRoZSBhY3Rpb24gYnV0dG9uIGluLgorICAgICAqIEBwYXJhbSBmYWRlSW5EdXJhdGlvbiB0aGUgZHVyYXRpb24gb2YgdGhlIGFjdGlvbiBidXR0b24gYW5pbWF0aW9uLCBvbmx5IHVzZWQgaWYKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAge0BwYXJhbSBmYWRlSW59IGlzIHRydWUuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2hvd0FjdGlvbkJ1dHRvbihib29sZWFuIGZhZGVJbiwgaW50IGZhZGVJbkR1cmF0aW9uKSB7CisgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKIAotICAgIC8qKiBCaW5kcyB0aGlzIHRhc2sgdmlldyB0byB0aGUgdGFzayAqLwotICAgIHB1YmxpYyB2b2lkIG9uVGFza0JvdW5kKFRhc2sgdCkgewotICAgICAgICBtVGFzayA9IHQ7Ci0gICAgICAgIG1UYXNrLnNldENhbGxiYWNrcyh0aGlzKTsKKyAgICAgICAgaWYgKGZhZGVJbikgeworICAgICAgICAgICAgaWYgKG1BY3Rpb25CdXR0b25WaWV3LmdldEFscGhhKCkgPCAxZikgeworICAgICAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LmFuaW1hdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgLmFscGhhKDFmKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNjYWxlWCgxZikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zY2FsZVkoMWYpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZmFkZUluRHVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKFBob25lU3RhdHVzQmFyLkFMUEhBX0lOKQorICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFNjYWxlWCgxZik7CisgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRTY2FsZVkoMWYpOworICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0QWxwaGEoMWYpOworICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0VHJhbnNsYXRpb25aKG1BY3Rpb25CdXR0b25UcmFuc2xhdGlvblopOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIC8vIEhpZGUgdGhlIGFjdGlvbiBidXR0b24gaWYgbG9jayB0byBhcHAgaXMgZGlzYWJsZWQgZm9yIHRoaXMgdmlldwotICAgICAgICBpbnQgbG9ja0J1dHRvblZpc2liaWxpdHkgPSAoIXQubG9ja1RvVGFza0VuYWJsZWQgfHwgIXQubG9ja1RvVGhpc1Rhc2spID8gR09ORSA6IFZJU0lCTEU7Ci0gICAgICAgIGlmIChtQWN0aW9uQnV0dG9uVmlldy5nZXRWaXNpYmlsaXR5KCkgIT0gbG9ja0J1dHRvblZpc2liaWxpdHkpIHsKLSAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFZpc2liaWxpdHkobG9ja0J1dHRvblZpc2liaWxpdHkpOwotICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOworICAgIC8qKgorICAgICAqIEltbWVkaWF0ZWx5IGhpZGVzIHRoZSBhY3Rpb24gYnV0dG9uLgorICAgICAqCisgICAgICogQHBhcmFtIGZhZGVPdXQgd2hldGhlciBvciBub3QgdG8gYW5pbWF0ZSB0aGUgYWN0aW9uIGJ1dHRvbiBvdXQuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaGlkZUFjdGlvbkJ1dHRvbihib29sZWFuIGZhZGVPdXQsIGludCBmYWRlT3V0RHVyYXRpb24sIGJvb2xlYW4gc2NhbGVEb3duLAorICAgICAgICAgICAgZmluYWwgQW5pbWF0b3IuQW5pbWF0b3JMaXN0ZW5lciBhbmltTGlzdGVuZXIpIHsKKyAgICAgICAgaWYgKGZhZGVPdXQpIHsKKyAgICAgICAgICAgIGlmIChtQWN0aW9uQnV0dG9uVmlldy5nZXRBbHBoYSgpID4gMGYpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2NhbGVEb3duKSB7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRvU2NhbGUgPSAwLjlmOworICAgICAgICAgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5hbmltYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2NhbGVYKHRvU2NhbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNjYWxlWSh0b1NjYWxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuYW5pbWF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZmFkZU91dER1cmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihQaG9uZVN0YXR1c0Jhci5BTFBIQV9PVVQpCisgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEVuZEFjdGlvbihuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5pbUxpc3RlbmVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1MaXN0ZW5lci5vbkFuaW1hdGlvbkVuZChudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMYXllcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldEFscGhhKDBmKTsKKyAgICAgICAgICAgIG1BY3Rpb25CdXR0b25WaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgaWYgKGFuaW1MaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYW5pbUxpc3RlbmVyLm9uQW5pbWF0aW9uRW5kKG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqKiogVGFza1N0YWNrQW5pbWF0aW9uSGVscGVyLkNhbGxiYWNrcyBJbXBsZW1lbnRhdGlvbiAqKioqLworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25QcmVwYXJlTGF1bmNoVGFyZ2V0Rm9yRW50ZXJBbmltYXRpb24oKSB7CisgICAgICAgIC8vIFRoZXNlIHZhbHVlcyB3aWxsIGJlIGFuaW1hdGVkIGluIHdoZW4gb25TdGFydExhdW5jaFRhcmdldEVudGVyQW5pbWF0aW9uKCkgaXMgY2FsbGVkCisgICAgICAgIHNldERpbSgwKTsKKyAgICAgICAgbUFjdGlvbkJ1dHRvblZpZXcuc2V0QWxwaGEoMGYpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRMYXVuY2hUYXJnZXRFbnRlckFuaW1hdGlvbihpbnQgZHVyYXRpb24sIGJvb2xlYW4gc2NyZWVuUGlubmluZ0VuYWJsZWQsCisgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlcikgeworICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlci5pbmNyZW1lbnQoKTsKKyAgICAgICAgYW5pbWF0ZURpbVRvUHJvZ3Jlc3MoZHVyYXRpb24sIHBvc3RBbmltYXRpb25UcmlnZ2VyLmRlY3JlbWVudE9uQW5pbWF0aW9uRW5kKCkpOworCisgICAgICAgIGlmIChzY3JlZW5QaW5uaW5nRW5hYmxlZCkgeworICAgICAgICAgICAgc2hvd0FjdGlvbkJ1dHRvbih0cnVlIC8qIGZhZGVJbiAqLywgZHVyYXRpb24gLyogZmFkZUluRHVyYXRpb24gKi8pOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UYXNrRGF0YUxvYWRlZCgpIHsKLSAgICAgICAgaWYgKG1UaHVtYm5haWxWaWV3ICE9IG51bGwgJiYgbUhlYWRlclZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gQmluZCBlYWNoIG9mIHRoZSB2aWV3cyB0byB0aGUgbmV3IHRhc2sgZGF0YQotICAgICAgICAgICAgbVRodW1ibmFpbFZpZXcucmViaW5kVG9UYXNrKG1UYXNrKTsKLSAgICAgICAgICAgIG1IZWFkZXJWaWV3LnJlYmluZFRvVGFzayhtVGFzayk7Ci0KLSAgICAgICAgICAgIC8vIFJlYmluZCBhbnkgbGlzdGVuZXJzCi0gICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7Ci0gICAgICAgICAgICBzZXRPbkxvbmdDbGlja0xpc3RlbmVyKHRoaXMpOworICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRMYXVuY2hUYXJnZXRMYXVuY2hBbmltYXRpb24oaW50IGR1cmF0aW9uLCBib29sZWFuIHNjcmVlblBpbm5pbmdSZXF1ZXN0ZWQsCisgICAgICAgICAgICBSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciBwb3N0QW5pbWF0aW9uVHJpZ2dlcikgeworICAgICAgICBpZiAobURpbUFscGhhID4gMCkgeworICAgICAgICAgICAgT2JqZWN0QW5pbWF0b3IgYW5pbSA9IE9iamVjdEFuaW1hdG9yLm9mSW50KHRoaXMsIERJTSwgZ2V0RGltKCksIDApOworICAgICAgICAgICAgYW5pbS5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgICAgICBhbmltLnNldEludGVycG9sYXRvcihQaG9uZVN0YXR1c0Jhci5BTFBIQV9PVVQpOworICAgICAgICAgICAgYW5pbS5zdGFydCgpOwogICAgICAgICB9CisKKyAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuaW5jcmVtZW50KCk7CisgICAgICAgIGhpZGVBY3Rpb25CdXR0b24odHJ1ZSAvKiBmYWRlT3V0ICovLCBkdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAhc2NyZWVuUGlubmluZ1JlcXVlc3RlZCAvKiBzY2FsZURvd24gKi8sCisgICAgICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIuZGVjcmVtZW50T25BbmltYXRpb25FbmQoKSk7CisgICAgfQorCisgICAgLyoqKiogVGFza0NhbGxiYWNrcyBJbXBsZW1lbnRhdGlvbiAqKioqLworCisgICAgcHVibGljIHZvaWQgb25UYXNrQm91bmQoVGFzayB0KSB7CisgICAgICAgIG1UYXNrID0gdDsKKyAgICAgICAgbVRhc2suYWRkQ2FsbGJhY2sodGhpcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25UYXNrRGF0YUxvYWRlZChUYXNrIHRhc2spIHsKKyAgICAgICAgLy8gQmluZCBlYWNoIG9mIHRoZSB2aWV3cyB0byB0aGUgbmV3IHRhc2sgZGF0YQorICAgICAgICBtVGh1bWJuYWlsVmlldy5yZWJpbmRUb1Rhc2sobVRhc2spOworICAgICAgICBtSGVhZGVyVmlldy5yZWJpbmRUb1Rhc2sobVRhc2spOwogICAgICAgICBtVGFza0RhdGFMb2FkZWQgPSB0cnVlOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIG9uVGFza0RhdGFVbmxvYWRlZCgpIHsKLSAgICAgICAgaWYgKG1UaHVtYm5haWxWaWV3ICE9IG51bGwgJiYgbUhlYWRlclZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gVW5iaW5kIGVhY2ggb2YgdGhlIHZpZXdzIGZyb20gdGhlIHRhc2sgZGF0YSBhbmQgcmVtb3ZlIHRoZSB0YXNrIGNhbGxiYWNrCi0gICAgICAgICAgICBtVGFzay5zZXRDYWxsYmFja3MobnVsbCk7Ci0gICAgICAgICAgICBtVGh1bWJuYWlsVmlldy51bmJpbmRGcm9tVGFzaygpOwotICAgICAgICAgICAgbUhlYWRlclZpZXcudW5iaW5kRnJvbVRhc2soKTsKLSAgICAgICAgICAgIC8vIFVuYmluZCBhbnkgbGlzdGVuZXJzCi0gICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRPbkNsaWNrTGlzdGVuZXIobnVsbCk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gVW5iaW5kIGVhY2ggb2YgdGhlIHZpZXdzIGZyb20gdGhlIHRhc2sgZGF0YSBhbmQgcmVtb3ZlIHRoZSB0YXNrIGNhbGxiYWNrCisgICAgICAgIG1UYXNrLnJlbW92ZUNhbGxiYWNrKHRoaXMpOworICAgICAgICBtVGh1bWJuYWlsVmlldy51bmJpbmRGcm9tVGFzaygpOworICAgICAgICBtSGVhZGVyVmlldy51bmJpbmRGcm9tVGFzaygpOwogICAgICAgICBtVGFza0RhdGFMb2FkZWQgPSBmYWxzZTsKICAgICB9CiAKQEAgLTcxMCwxMyArNTc1LDE0IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICAgcHVibGljIHZvaWQgb25DbGljayhmaW5hbCBWaWV3IHYpIHsKKyAgICAgICAgYm9vbGVhbiBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkID0gZmFsc2U7CiAgICAgICAgIGlmICh2ID09IG1BY3Rpb25CdXR0b25WaWV3KSB7CiAgICAgICAgICAgICAvLyBSZXNldCB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGFjdGlvbiBidXR0b24gYmVmb3JlIHdlIGFuaW1hdGUgaXQgb3V0CiAgICAgICAgICAgICBtQWN0aW9uQnV0dG9uVmlldy5zZXRUcmFuc2xhdGlvblooMGYpOworICAgICAgICAgICAgc2NyZWVuUGlubmluZ1JlcXVlc3RlZCA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1DYiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQ2Iub25UYXNrVmlld0NsaWNrZWQodGhpcywgbVRhc2ssICh2ID09IG1BY3Rpb25CdXR0b25WaWV3KSk7Ci0gICAgICAgIH0KKyAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudCh0aGlzLCBtVGFzaywgbnVsbCwgSU5WQUxJRF9TVEFDS19JRCwKKyAgICAgICAgICAgICAgICBzY3JlZW5QaW5uaW5nUmVxdWVzdGVkKSk7CiAgICAgfQogCiAgICAgLyoqKiogVmlldy5PbkxvbmdDbGlja0xpc3RlbmVyIEltcGxlbWVudGF0aW9uICoqKiovCkBAIC03MzIsMTcgKzU5OCw2IEBACiAgICAgICAgICAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIGRyYWcgZXZlbnRzCiAgICAgICAgICAgICBzZXRDbGlwVmlld0luU3RhY2soZmFsc2UpOwogCi0gICAgICAgICAgICAvLyBFbmxhcmdlIHRoZSB2aWV3IHNsaWdodGx5Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBmaW5hbFNjYWxlID0gZ2V0U2NhbGVYKCkgKiAxLjA1ZjsKLSAgICAgICAgICAgIGFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2NhbGVYKGZpbmFsU2NhbGUpCi0gICAgICAgICAgICAgICAgICAgIC5zY2FsZVkoZmluYWxTY2FsZSkKLSAgICAgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDE3NSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFVwZGF0ZUxpc3RlbmVyKG51bGwpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRMaXN0ZW5lcihudWxsKQotICAgICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTsKLQogICAgICAgICAgICAgbURvd25Ub3VjaFBvcy54ICs9ICgoMWYgLSBnZXRTY2FsZVgoKSkgKiBnZXRXaWR0aCgpKSAvIDI7CiAgICAgICAgICAgICBtRG93blRvdWNoUG9zLnkgKz0gKCgxZiAtIGdldFNjYWxlWSgpKSAqIGdldEhlaWdodCgpKSAvIDI7CiAKQEAgLTc1Nyw3ICs2MTIsNyBAQAogCiAgICAgcHVibGljIGZpbmFsIHZvaWQgb25CdXNFdmVudChEcmFnRW5kRXZlbnQgZXZlbnQpIHsKICAgICAgICAgaWYgKCEoZXZlbnQuZHJvcFRhcmdldCBpbnN0YW5jZW9mIFRhc2tTdGFjay5Eb2NrU3RhdGUpKSB7Ci0gICAgICAgICAgICBldmVudC5wb3N0QW5pbWF0aW9uVHJpZ2dlci5hZGRMYXN0RGVjcmVtZW50UnVubmFibGUobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgZXZlbnQuYWRkUG9zdEFuaW1hdGlvbkNhbGxiYWNrKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgdGhlIGRyYWcgdmlldyBiYWNrIGZyb20gd2hlcmUgaXQgaXMsIHRvIHRoZSB2aWV3IGxvY2F0aW9uLCB0aGVuIGFmdGVyCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlld0FuaW1hdGlvbi5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdBbmltYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjNhZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdBbmltYXRpb24uamF2YQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzOworCitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uQW5pbWF0b3JTZXQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5MaW5lYXJJbnRlcnBvbGF0b3I7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBUaGUgYW5pbWF0aW9uIHByb3BlcnRpZXMgdG8gYW5pbWF0ZSBhIHtAbGluayBUYXNrVmlld30gdG8gYSBnaXZlbiB7QGxpbmsgVGFza1ZpZXdUcmFuc2Zvcm19LgorICovCitwdWJsaWMgY2xhc3MgVGFza1ZpZXdBbmltYXRpb24geworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUYXNrVmlld0FuaW1hdGlvbiBJTU1FRElBVEUgPSBuZXcgVGFza1ZpZXdBbmltYXRpb24oMCwKKyAgICAgICAgICAgIG5ldyBMaW5lYXJJbnRlcnBvbGF0b3IoKSk7CisKKyAgICBwdWJsaWMgZmluYWwgaW50IHN0YXJ0RGVsYXk7CisgICAgcHVibGljIGZpbmFsIGludCBkdXJhdGlvbjsKKyAgICBwdWJsaWMgZmluYWwgSW50ZXJwb2xhdG9yIGludGVycG9sYXRvcjsKKyAgICBwdWJsaWMgZmluYWwgQW5pbWF0b3IuQW5pbWF0b3JMaXN0ZW5lciBsaXN0ZW5lcjsKKworICAgIHB1YmxpYyBUYXNrVmlld0FuaW1hdGlvbihpbnQgZHVyYXRpb24sIEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IpIHsKKyAgICAgICAgdGhpcygwIC8qIHN0YXJ0RGVsYXkgKi8sIGR1cmF0aW9uLCBpbnRlcnBvbGF0b3IsIG51bGwpOworICAgIH0KKworICAgIHB1YmxpYyBUYXNrVmlld0FuaW1hdGlvbihpbnQgZHVyYXRpb24sIEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IsCisgICAgICAgICAgICBBbmltYXRvci5BbmltYXRvckxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHRoaXMoMCAvKiBzdGFydERlbGF5ICovLCBkdXJhdGlvbiwgaW50ZXJwb2xhdG9yLCBsaXN0ZW5lcik7CisgICAgfQorCisgICAgcHVibGljIFRhc2tWaWV3QW5pbWF0aW9uKGludCBzdGFydERlbGF5LCBpbnQgZHVyYXRpb24sIEludGVycG9sYXRvciBpbnRlcnBvbGF0b3IsCisgICAgICAgICAgICBBbmltYXRvci5BbmltYXRvckxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHRoaXMuc3RhcnREZWxheSA9IHN0YXJ0RGVsYXk7CisgICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjsKKyAgICAgICAgdGhpcy5pbnRlcnBvbGF0b3IgPSBpbnRlcnBvbGF0b3I7CisgICAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBBbmltYXRvclNldH0gdGhhdCB3aWxsIGFuaW1hdGUgdGhlIGdpdmVuIGFuaW1hdG9ycyB3aXRoIHRoZSBjdXJyZW50CisgICAgICogYW5pbWF0aW9uIHByb3BlcnRpZXMuCisgICAgICovCisgICAgcHVibGljIEFuaW1hdG9yU2V0IGNyZWF0ZUFuaW1hdG9yKExpc3Q8QW5pbWF0b3I+IGFuaW1hdG9ycykgeworICAgICAgICBBbmltYXRvclNldCBhbmltID0gbmV3IEFuaW1hdG9yU2V0KCk7CisgICAgICAgIGFuaW0uc2V0U3RhcnREZWxheShzdGFydERlbGF5KTsKKyAgICAgICAgYW5pbS5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIGFuaW0uc2V0SW50ZXJwb2xhdG9yKGludGVycG9sYXRvcik7CisgICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBhbmltLmFkZExpc3RlbmVyKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgICAgICBhbmltLnBsYXlUb2dldGhlcihhbmltYXRvcnMpOworICAgICAgICByZXR1cm4gYW5pbTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBhbmltYXRpb24gaGFzIGFueSBkdXJhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc0ltbWVkaWF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGR1cmF0aW9uIDw9IDA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdIZWFkZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3SGVhZGVyLmphdmEKaW5kZXggNzhhMmM3Zi4uNmE0NzQyNCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdIZWFkZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlld0hlYWRlci5qYXZhCkBAIC0xNiw3MCArMTYsMTMxIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy52aWV3czsKIAotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yOworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3I7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5PdXRsaW5lOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmQ29sb3JGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmWGZlcm1vZGU7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QaXhlbEZvcm1hdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5Db2xvckRyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5HcmFkaWVudERyYXdhYmxlOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuUmlwcGxlRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY0LmdyYXBoaWNzLkNvbG9yVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld091dGxpbmVQcm92aWRlcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CisKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuUmVjZW50czsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aS5SZXNpemVUYXNrRXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuYWN0aXZpdHkuTGF1bmNoVGFza0V2ZW50OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpLlNob3dBcHBsaWNhdGlvbkluZm9FdmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuU3lzdGVtU2VydmljZXNQcm94eTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuVXRpbGl0aWVzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMubW9kZWwuVGFzazsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOworCiAKIC8qIFRoZSB0YXNrIGJhciB2aWV3ICovCiBwdWJsaWMgY2xhc3MgVGFza1ZpZXdIZWFkZXIgZXh0ZW5kcyBGcmFtZUxheW91dAogICAgICAgICBpbXBsZW1lbnRzIFZpZXcuT25DbGlja0xpc3RlbmVyLCBWaWV3Lk9uTG9uZ0NsaWNrTGlzdGVuZXIgewogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgRk9DVVNfVFJBTlNMQVRJT05fWiA9IDRmOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IEhJR0hMSUdIVF9MSUdIVE5FU1NfSU5DUkVNRU5UID0gMC4xMjVmOworCisgICAgLyoqCisgICAgICogQSBjb2xvciBkcmF3YWJsZSB0aGF0IGRyYXdzIGEgc2xpZ2h0IGhpZ2hsaWdodCBhdCB0aGUgdG9wIHRvIGhlbHAgaXQgc3RhbmQgb3V0LgorICAgICAqLworICAgIHByaXZhdGUgY2xhc3MgSGlnaGxpZ2h0Q29sb3JEcmF3YWJsZSBleHRlbmRzIERyYXdhYmxlIHsKKworICAgICAgICBwcml2YXRlIFBhaW50IG1IaWdobGlnaHRQYWludCA9IG5ldyBQYWludCgpOworICAgICAgICBwcml2YXRlIFBhaW50IG1CYWNrZ3JvdW5kUGFpbnQgPSBuZXcgUGFpbnQoKTsKKworICAgICAgICBwcml2YXRlIGZsb2F0W10gbVRtcEhTTCA9IG5ldyBmbG9hdFszXTsKKworICAgICAgICBwdWJsaWMgSGlnaGxpZ2h0Q29sb3JEcmF3YWJsZSgpIHsKKyAgICAgICAgICAgIG1CYWNrZ3JvdW5kUGFpbnQuc2V0Q29sb3IoQ29sb3IuYXJnYigyNTUsIDAsIDAsIDApKTsKKyAgICAgICAgICAgIG1CYWNrZ3JvdW5kUGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICAgICAgbUhpZ2hsaWdodFBhaW50LnNldENvbG9yKENvbG9yLmFyZ2IoMjU1LCAyNTUsIDI1NSwgMjU1KSk7CisgICAgICAgICAgICBtSGlnaGxpZ2h0UGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIHZvaWQgc2V0Q29sb3JBbmREaW0oaW50IGNvbG9yLCBmbG9hdCBkaW1BbHBoYSkgeworICAgICAgICAgICAgbUJhY2tncm91bmRQYWludC5zZXRDb2xvcihjb2xvcik7CisKKyAgICAgICAgICAgIENvbG9yVXRpbHMuY29sb3JUb0hTTChjb2xvciwgbVRtcEhTTCk7CisgICAgICAgICAgICAvLyBUT0RPOiBDb25zaWRlciB1c2luZyB0aGUgc2F0dXJhdGlvbiBvZiB0aGUgY29sb3IgdG8gYWRqdXN0IHRoZSBsaWdodG5lc3MgYXMgd2VsbAorICAgICAgICAgICAgbVRtcEhTTFsyXSA9IE1hdGgubWluKDFmLAorICAgICAgICAgICAgICAgICAgICBtVG1wSFNMWzJdICsgSElHSExJR0hUX0xJR0hUTkVTU19JTkNSRU1FTlQgKiAoMS4wZiAtIGRpbUFscGhhKSk7CisgICAgICAgICAgICBtSGlnaGxpZ2h0UGFpbnQuc2V0Q29sb3IoQ29sb3JVdGlscy5IU0xUb0NvbG9yKG1UbXBIU0wpKTsKKworICAgICAgICAgICAgaW52YWxpZGF0ZVNlbGYoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb2xvckZpbHRlcihATnVsbGFibGUgQ29sb3JGaWx0ZXIgY29sb3JGaWx0ZXIpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRBbHBoYShpbnQgYWxwaGEpIHsKKyAgICAgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBkcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgICAgIC8vIERyYXcgdGhlIGhpZ2hsaWdodCBhdCB0aGUgdG9wIGVkZ2UgKGJ1dCBwdXQgdGhlIGJvdHRvbSBlZGdlIGp1c3Qgb3V0IG9mIHZpZXcpCisgICAgICAgICAgICBjYW52YXMuZHJhd1JvdW5kUmVjdCgwLCAwLCBtVGFza1ZpZXdSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgIDIgKiBNYXRoLm1heChtSGlnaGxpZ2h0SGVpZ2h0LCBtQ29ybmVyUmFkaXVzKSwKKyAgICAgICAgICAgICAgICAgICAgbUNvcm5lclJhZGl1cywgbUNvcm5lclJhZGl1cywgbUhpZ2hsaWdodFBhaW50KTsKKworICAgICAgICAgICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCB3aXRoIHRoZSByb3VuZGVkIGNvcm5lcnMKKyAgICAgICAgICAgIGNhbnZhcy5kcmF3Um91bmRSZWN0KDAsIG1IaWdobGlnaHRIZWlnaHQsIG1UYXNrVmlld1JlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgZ2V0SGVpZ2h0KCkgKyBtQ29ybmVyUmFkaXVzLAorICAgICAgICAgICAgICAgICAgICBtQ29ybmVyUmFkaXVzLCBtQ29ybmVyUmFkaXVzLCBtQmFja2dyb3VuZFBhaW50KTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGdldE9wYWNpdHkoKSB7CisgICAgICAgICAgICByZXR1cm4gUGl4ZWxGb3JtYXQuT1BBUVVFOworICAgICAgICB9CisgICAgfQogCiAgICAgVGFzayBtVGFzazsKIAogICAgIC8vIEhlYWRlciB2aWV3cwogICAgIEltYWdlVmlldyBtTW92ZVRhc2tCdXR0b247CiAgICAgSW1hZ2VWaWV3IG1EaXNtaXNzQnV0dG9uOwotICAgIEltYWdlVmlldyBtQXBwbGljYXRpb25JY29uOwotICAgIFRleHRWaWV3IG1BY3Rpdml0eURlc2NyaXB0aW9uOworICAgIEltYWdlVmlldyBtSWNvblZpZXc7CisgICAgVGV4dFZpZXcgbVRpdGxlVmlldzsKKyAgICBpbnQgbU1vdmVUYXNrVGFyZ2V0U3RhY2tJZCA9IElOVkFMSURfU1RBQ0tfSUQ7CiAKICAgICAvLyBIZWFkZXIgZHJhd2FibGVzCisgICAgUmVjdCBtVGFza1ZpZXdSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBpbnQgbUNvcm5lclJhZGl1czsKICAgICBpbnQgbUhpZ2hsaWdodEhlaWdodDsKKyAgICBmbG9hdCBtRGltQWxwaGE7CiAgICAgRHJhd2FibGUgbUxpZ2h0RGlzbWlzc0RyYXdhYmxlOwogICAgIERyYXdhYmxlIG1EYXJrRGlzbWlzc0RyYXdhYmxlOwotICAgIFJpcHBsZURyYXdhYmxlIG1CYWNrZ3JvdW5kOwotICAgIEdyYWRpZW50RHJhd2FibGUgbUJhY2tncm91bmRDb2xvckRyYXdhYmxlOwotICAgIE9iamVjdEFuaW1hdG9yIG1Gb2N1c0FuaW1hdG9yOworICAgIGludCBtVGFza0JhclZpZXdMaWdodFRleHRDb2xvcjsKKyAgICBpbnQgbVRhc2tCYXJWaWV3RGFya1RleHRDb2xvcjsKICAgICBTdHJpbmcgbURpc21pc3NDb250ZW50RGVzY3JpcHRpb247CiAKLSAgICAvLyBTdGF0aWMgaGlnaGxpZ2h0IHRoYXQgd2UgZHJhdyBhdCB0aGUgdG9wIG9mIGVhY2ggdmlldwotICAgIHN0YXRpYyBQYWludCBzSGlnaGxpZ2h0UGFpbnQ7CisgICAgLy8gSGVhZGVyIGJhY2tncm91bmQKKyAgICBwcml2YXRlIEhpZ2hsaWdodENvbG9yRHJhd2FibGUgbUJhY2tncm91bmQ7CiAKICAgICAvLyBIZWFkZXIgZGltLCB3aGljaCBpcyBvbmx5IHVzZWQgd2hlbiB0YXNrIHZpZXcgaGFyZHdhcmUgbGF5ZXJzIGFyZSBub3QgdXNlZAotICAgIFBhaW50IG1EaW1MYXllclBhaW50ID0gbmV3IFBhaW50KCk7CisgICAgcHJpdmF0ZSBQYWludCBtRGltTGF5ZXJQYWludCA9IG5ldyBQYWludCgpOwogCiAgICAgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOwogICAgIEludGVycG9sYXRvciBtRmFzdE91dExpbmVhckluSW50ZXJwb2xhdG9yOwpAQCAtOTksMTk2ICsxNjAsMTg4IEBACiAgICAgcHVibGljIFRhc2tWaWV3SGVhZGVyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyLCBpbnQgZGVmU3R5bGVSZXMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0ciwgZGVmU3R5bGVSZXMpOwogICAgICAgICBzZXRXaWxsTm90RHJhdyhmYWxzZSk7Ci0gICAgICAgIHNldENsaXBUb091dGxpbmUodHJ1ZSk7Ci0gICAgICAgIHNldE91dGxpbmVQcm92aWRlcihuZXcgVmlld091dGxpbmVQcm92aWRlcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgZ2V0T3V0bGluZShWaWV3IHZpZXcsIE91dGxpbmUgb3V0bGluZSkgewotICAgICAgICAgICAgICAgIG91dGxpbmUuc2V0UmVjdCgwLCAwLCBnZXRNZWFzdXJlZFdpZHRoKCksIGdldE1lYXN1cmVkSGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKIAogICAgICAgICAvLyBMb2FkIHRoZSBkaXNtaXNzIHJlc291cmNlcwotICAgICAgICBtRGltTGF5ZXJQYWludC5zZXRDb2xvcihDb2xvci5hcmdiKDAsIDAsIDAsIDApKTsKKyAgICAgICAgUmVzb3VyY2VzIHJlcyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CiAgICAgICAgIG1MaWdodERpc21pc3NEcmF3YWJsZSA9IGNvbnRleHQuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5yZWNlbnRzX2Rpc21pc3NfbGlnaHQpOwogICAgICAgICBtRGFya0Rpc21pc3NEcmF3YWJsZSA9IGNvbnRleHQuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5yZWNlbnRzX2Rpc21pc3NfZGFyayk7Ci0gICAgICAgIG1EaXNtaXNzQ29udGVudERlc2NyaXB0aW9uID0KLSAgICAgICAgICAgICAgICBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X3JlY2VudHNfaXRlbV93aWxsX2JlX2Rpc21pc3NlZCk7Ci0gICAgICAgIG1Db3JuZXJSYWRpdXMgPSBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCi0gICAgICAgICAgICAgICAgUi5kaW1lbi5yZWNlbnRzX3Rhc2tfdmlld19yb3VuZGVkX2Nvcm5lcnNfcmFkaXVzKTsKLSAgICAgICAgbUhpZ2hsaWdodEhlaWdodCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKLSAgICAgICAgICAgICAgICBSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X2hpZ2hsaWdodCk7CisgICAgICAgIG1EaXNtaXNzQ29udGVudERlc2NyaXB0aW9uID0gY29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9yZWNlbnRzX2l0ZW1fd2lsbF9iZV9kaXNtaXNzZWQpOworICAgICAgICBtQ29ybmVyUmFkaXVzID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X3JvdW5kZWRfY29ybmVyc19yYWRpdXMpOworICAgICAgICBtSGlnaGxpZ2h0SGVpZ2h0ID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLnJlY2VudHNfdGFza192aWV3X2hpZ2hsaWdodCk7CisgICAgICAgIG1UYXNrQmFyVmlld0xpZ2h0VGV4dENvbG9yID0gY29udGV4dC5nZXRDb2xvcihSLmNvbG9yLnJlY2VudHNfdGFza19iYXJfbGlnaHRfdGV4dF9jb2xvcik7CisgICAgICAgIG1UYXNrQmFyVmlld0RhcmtUZXh0Q29sb3IgPSBjb250ZXh0LmdldENvbG9yKFIuY29sb3IucmVjZW50c190YXNrX2Jhcl9kYXJrX3RleHRfY29sb3IpOwogICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY29udGV4dCwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKICAgICAgICAgbUZhc3RPdXRMaW5lYXJJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY29udGV4dCwKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVycG9sYXRvci5mYXN0X291dF9saW5lYXJfaW4pOwogCi0gICAgICAgIC8vIENvbmZpZ3VyZSB0aGUgaGlnaGxpZ2h0IHBhaW50Ci0gICAgICAgIGlmIChzSGlnaGxpZ2h0UGFpbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgc0hpZ2hsaWdodFBhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgICAgICAgICBzSGlnaGxpZ2h0UGFpbnQuc2V0U3R5bGUoUGFpbnQuU3R5bGUuU1RST0tFKTsKLSAgICAgICAgICAgIHNIaWdobGlnaHRQYWludC5zZXRTdHJva2VXaWR0aChtSGlnaGxpZ2h0SGVpZ2h0KTsKLSAgICAgICAgICAgIHNIaWdobGlnaHRQYWludC5zZXRDb2xvcihjb250ZXh0LmdldENvbG9yKFIuY29sb3IucmVjZW50c190YXNrX2Jhcl9oaWdobGlnaHRfY29sb3IpKTsKLSAgICAgICAgICAgIHNIaWdobGlnaHRQYWludC5zZXRYZmVybW9kZShuZXcgUG9ydGVyRHVmZlhmZXJtb2RlKFBvcnRlckR1ZmYuTW9kZS5BREQpKTsKLSAgICAgICAgICAgIHNIaWdobGlnaHRQYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBiYWNrZ3JvdW5kIGFuZCBkaW0KKyAgICAgICAgbUJhY2tncm91bmQgPSBuZXcgSGlnaGxpZ2h0Q29sb3JEcmF3YWJsZSgpOworICAgICAgICBtQmFja2dyb3VuZC5zZXRDb2xvckFuZERpbShDb2xvci5hcmdiKDI1NSwgMCwgMCwgMCksIDBmKTsKKyAgICAgICAgc2V0QmFja2dyb3VuZChtQmFja2dyb3VuZCk7CisgICAgICAgIG1EaW1MYXllclBhaW50LnNldENvbG9yKENvbG9yLmFyZ2IoMjU1LCAwLCAwLCAwKSk7CisgICAgICAgIG1EaW1MYXllclBhaW50LnNldEFudGlBbGlhcyh0cnVlKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkZpbmlzaEluZmxhdGUoKSB7CiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGljb24gYW5kIGRlc2NyaXB0aW9uIHZpZXdzCi0gICAgICAgIG1BcHBsaWNhdGlvbkljb24gPSAoSW1hZ2VWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5hcHBsaWNhdGlvbl9pY29uKTsKLSAgICAgICAgbUFwcGxpY2F0aW9uSWNvbi5zZXRPbkxvbmdDbGlja0xpc3RlbmVyKHRoaXMpOwotICAgICAgICBtQWN0aXZpdHlEZXNjcmlwdGlvbiA9IChUZXh0VmlldykgZmluZFZpZXdCeUlkKFIuaWQuYWN0aXZpdHlfZGVzY3JpcHRpb24pOworICAgICAgICBtSWNvblZpZXcgPSAoSW1hZ2VWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5pY29uKTsKKyAgICAgICAgbUljb25WaWV3LnNldE9uTG9uZ0NsaWNrTGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1UaXRsZVZpZXcgPSAoVGV4dFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKTsKICAgICAgICAgbURpc21pc3NCdXR0b24gPSAoSW1hZ2VWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5kaXNtaXNzX3Rhc2spOwogICAgICAgICBtRGlzbWlzc0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7CiAgICAgICAgIG1Nb3ZlVGFza0J1dHRvbiA9IChJbWFnZVZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLm1vdmVfdGFzayk7CiAKICAgICAgICAgLy8gSGlkZSB0aGUgYmFja2dyb3VuZHMgaWYgdGhleSBhcmUgcmlwcGxlIGRyYXdhYmxlcwotICAgICAgICBpZiAobUFwcGxpY2F0aW9uSWNvbi5nZXRCYWNrZ3JvdW5kKCkgaW5zdGFuY2VvZiBSaXBwbGVEcmF3YWJsZSkgewotICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbi5zZXRCYWNrZ3JvdW5kKG51bGwpOworICAgICAgICBpZiAobUljb25WaWV3LmdldEJhY2tncm91bmQoKSBpbnN0YW5jZW9mIFJpcHBsZURyYXdhYmxlKSB7CisgICAgICAgICAgICBtSWNvblZpZXcuc2V0QmFja2dyb3VuZChudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENhbGxlZCB3aGVuIHRoZSB0YXNrIHZpZXcgZnJhbWUgY2hhbmdlcywgYWxsb3dpbmcgdXMgdG8gbW92ZSB0aGUgY29udGVudHMgb2YgdGhlIGhlYWRlcgorICAgICAqIHRvIG1hdGNoIHRoZSBmcmFtZSBjaGFuZ2VzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG9uVGFza1ZpZXdTaXplQ2hhbmdlZChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKKyAgICAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBib3VuZHMgaGF2ZSBub3QgY2hhbmdlZAorICAgICAgICBpZiAobVRhc2tWaWV3UmVjdC53aWR0aCgpID09IHdpZHRoICYmIG1UYXNrVmlld1JlY3QuaGVpZ2h0KCkgPT0gaGVpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtQmFja2dyb3VuZENvbG9yRHJhd2FibGUgPSAoR3JhZGllbnREcmF3YWJsZSkgZ2V0Q29udGV4dCgpLmdldERyYXdhYmxlKFIuZHJhd2FibGUKLSAgICAgICAgICAgICAgICAucmVjZW50c190YXNrX3ZpZXdfaGVhZGVyX2JnX2NvbG9yKTsKLSAgICAgICAgLy8gQ29weSB0aGUgcmlwcGxlIGRyYXdhYmxlIHNpbmNlIHdlIGFyZSBnb2luZyB0byBiZSBtYW5pcHVsYXRpbmcgaXQKLSAgICAgICAgbUJhY2tncm91bmQgPSAoUmlwcGxlRHJhd2FibGUpCi0gICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpLmdldERyYXdhYmxlKFIuZHJhd2FibGUucmVjZW50c190YXNrX3ZpZXdfaGVhZGVyX2JnKTsKLSAgICAgICAgbUJhY2tncm91bmQgPSAoUmlwcGxlRHJhd2FibGUpIG1CYWNrZ3JvdW5kLm11dGF0ZSgpLmdldENvbnN0YW50U3RhdGUoKS5uZXdEcmF3YWJsZSgpOwotICAgICAgICBtQmFja2dyb3VuZC5zZXRDb2xvcihDb2xvclN0YXRlTGlzdC52YWx1ZU9mKDApKTsKLSAgICAgICAgbUJhY2tncm91bmQuc2V0RHJhd2FibGVCeUxheWVySWQobUJhY2tncm91bmQuZ2V0SWQoMCksIG1CYWNrZ3JvdW5kQ29sb3JEcmF3YWJsZSk7Ci0gICAgICAgIHNldEJhY2tncm91bmQobUJhY2tncm91bmQpOworICAgICAgICBtVGFza1ZpZXdSZWN0LnNldCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYm9vbGVhbiB1cGRhdGVNb3ZlVGFza0J1dHRvbiA9IG1Nb3ZlVGFza0J1dHRvbi5nZXRWaXNpYmlsaXR5KCkgIT0gVmlldy5HT05FOworICAgICAgICBpbnQgYXBwSWNvbldpZHRoID0gbUljb25WaWV3LmdldE1lYXN1cmVkV2lkdGgoKTsKKyAgICAgICAgaW50IGFjdGl2aXR5RGVzY1dpZHRoID0gbVRpdGxlVmlldy5nZXRNZWFzdXJlZFdpZHRoKCk7CisgICAgICAgIGludCBkaXNtaXNzSWNvbldpZHRoID0gbURpc21pc3NCdXR0b24uZ2V0TWVhc3VyZWRXaWR0aCgpOworICAgICAgICBpbnQgbW92ZVRhc2tJY29uV2lkdGggPSBtTW92ZVRhc2tCdXR0b24uZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRQorICAgICAgICAgICAgICAgID8gbU1vdmVUYXNrQnV0dG9uLmdldE1lYXN1cmVkV2lkdGgoKQorICAgICAgICAgICAgICAgIDogMDsKKworICAgICAgICAvLyBQcmlvcml0eS13aXNlLCB3ZSBzaG93IHRoZSBhY3Rpdml0eSBpY29uIGZpcnN0LCB0aGUgZGlzbWlzcyBpY29uIGlmIHRoZXJlIGlzIHJvb20sIHRoZQorICAgICAgICAvLyBtb3ZlLXRhc2sgaWNvbiBpZiB0aGVyZSBpcyByb29tLCBhbmQgdGhlbiBmaW5hbGx5LCB0aGUgYWN0aXZpdHkgbGFiZWwgaWYgdGhlcmUgaXMgcm9vbQorICAgICAgICBpZiAod2lkdGggPCAoYXBwSWNvbldpZHRoICsgZGlzbWlzc0ljb25XaWR0aCkpIHsKKyAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICBpZiAodXBkYXRlTW92ZVRhc2tCdXR0b24pIHsKKyAgICAgICAgICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtRGlzbWlzc0J1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA8IChhcHBJY29uV2lkdGggKyBkaXNtaXNzSWNvbldpZHRoICsgbW92ZVRhc2tJY29uV2lkdGgpKSB7CisgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgaWYgKHVwZGF0ZU1vdmVUYXNrQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbURpc21pc3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICB9IGVsc2UgaWYgKHdpZHRoIDwgKGFwcEljb25XaWR0aCArIGRpc21pc3NJY29uV2lkdGggKyBtb3ZlVGFza0ljb25XaWR0aCArCisgICAgICAgICAgICAgICAgYWN0aXZpdHlEZXNjV2lkdGgpKSB7CisgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgaWYgKHVwZGF0ZU1vdmVUYXNrQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1UaXRsZVZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgaWYgKHVwZGF0ZU1vdmVUYXNrQnV0dG9uKSB7CisgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodXBkYXRlTW92ZVRhc2tCdXR0b24pIHsKKyAgICAgICAgICAgIG1Nb3ZlVGFza0J1dHRvbi5zZXRUcmFuc2xhdGlvblgod2lkdGggLSBnZXRNZWFzdXJlZFdpZHRoKCkpOworICAgICAgICB9CisgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldFRyYW5zbGF0aW9uWCh3aWR0aCAtIGdldE1lYXN1cmVkV2lkdGgoKSk7CisgICAgICAgIGludmFsaWRhdGUoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewotICAgICAgICAvLyBEcmF3IHRoZSBoaWdobGlnaHQgYXQgdGhlIHRvcCBlZGdlIChidXQgcHV0IHRoZSBib3R0b20gZWRnZSBqdXN0IG91dCBvZiB2aWV3KQotICAgICAgICBmbG9hdCBvZmZzZXQgPSAoZmxvYXQpIE1hdGguY2VpbChtSGlnaGxpZ2h0SGVpZ2h0IC8gMmYpOwotICAgICAgICBmbG9hdCByYWRpdXMgPSBtQ29ybmVyUmFkaXVzOwotICAgICAgICBpbnQgY291bnQgPSBjYW52YXMuc2F2ZShDYW52YXMuQ0xJUF9TQVZFX0ZMQUcpOwotICAgICAgICBjYW52YXMuY2xpcFJlY3QoMCwgMCwgZ2V0TWVhc3VyZWRXaWR0aCgpLCBnZXRNZWFzdXJlZEhlaWdodCgpKTsKLSAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QoLW9mZnNldCwgMGYsIChmbG9hdCkgZ2V0TWVhc3VyZWRXaWR0aCgpICsgb2Zmc2V0LAotICAgICAgICAgICAgICAgIGdldE1lYXN1cmVkSGVpZ2h0KCkgKyByYWRpdXMsIHJhZGl1cywgcmFkaXVzLCBzSGlnaGxpZ2h0UGFpbnQpOwotICAgICAgICBjYW52YXMucmVzdG9yZVRvQ291bnQoY291bnQpOworICAgIHByb3RlY3RlZCBib29sZWFuIHZlcmlmeURyYXdhYmxlKERyYXdhYmxlIHdobykgeworICAgICAgICByZXR1cm4gc3VwZXIudmVyaWZ5RHJhd2FibGUod2hvKSB8fCAod2hvID09IG1CYWNrZ3JvdW5kKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBkaXNwYXRjaERyYXcoQ2FudmFzIGNhbnZhcykgeworICAgICAgICBzdXBlci5kaXNwYXRjaERyYXcoY2FudmFzKTsKKworICAgICAgICAvLyBEcmF3IHRoZSBkaW0gbGF5ZXIgd2l0aCB0aGUgcm91bmRlZCBjb3JuZXJzCisgICAgICAgIGNhbnZhcy5kcmF3Um91bmRSZWN0KDAsIDAsIG1UYXNrVmlld1JlY3Qud2lkdGgoKSwgZ2V0SGVpZ2h0KCkgKyBtQ29ybmVyUmFkaXVzLAorICAgICAgICAgICAgICAgIG1Db3JuZXJSYWRpdXMsIG1Db3JuZXJSYWRpdXMsIG1EaW1MYXllclBhaW50KTsKICAgICB9CiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBkaW0gYWxwaGEsIG9ubHkgdXNlZCB3aGVuIHdlIGFyZSBub3QgdXNpbmcgaGFyZHdhcmUgbGF5ZXJzLgogICAgICAqIChzZWUgUmVjZW50c0NvbmZpZ3VyYXRpb24udXNlSGFyZHdhcmVMYXllcnMpCiAgICAgICovCi0gICAgdm9pZCBzZXREaW1BbHBoYShpbnQgYWxwaGEpIHsKLSAgICAgICAgbURpbUxheWVyUGFpbnQuc2V0Q29sb3IoQ29sb3IuYXJnYihhbHBoYSwgMCwgMCwgMCkpOworICAgIHZvaWQgc2V0RGltQWxwaGEoZmxvYXQgZGltQWxwaGEpIHsKKyAgICAgICAgbURpbUFscGhhID0gZGltQWxwaGE7CisgICAgICAgIHVwZGF0ZUJhY2tncm91bmRDb2xvcihkaW1BbHBoYSk7CiAgICAgICAgIGludmFsaWRhdGUoKTsKICAgICB9CiAKLSAgICAvKiogUmV0dXJucyB0aGUgc2Vjb25kYXJ5IGNvbG9yIGZvciBhIHByaW1hcnkgY29sb3IuICovCi0gICAgaW50IGdldFNlY29uZGFyeUNvbG9yKGludCBwcmltYXJ5Q29sb3IsIGJvb2xlYW4gdXNlTGlnaHRPdmVybGF5Q29sb3IpIHsKLSAgICAgICAgaW50IG92ZXJsYXlDb2xvciA9IHVzZUxpZ2h0T3ZlcmxheUNvbG9yID8gQ29sb3IuV0hJVEUgOiBDb2xvci5CTEFDSzsKLSAgICAgICAgcmV0dXJuIFV0aWxpdGllcy5nZXRDb2xvcldpdGhPdmVybGF5KHByaW1hcnlDb2xvciwgb3ZlcmxheUNvbG9yLCAwLjhmKTsKKyAgICAvKioKKyAgICAgKiBVcGRhdGVzIHRoZSBiYWNrZ3JvdW5kIGFuZCBoaWdobGlnaHQgY29sb3JzIGZvciB0aGlzIGhlYWRlci4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQmFja2dyb3VuZENvbG9yKGZsb2F0IGRpbUFscGhhKSB7CisgICAgICAgIGlmIChtVGFzayAhPSBudWxsKSB7CisgICAgICAgICAgICBtQmFja2dyb3VuZC5zZXRDb2xvckFuZERpbShtVGFzay5jb2xvclByaW1hcnksIGRpbUFscGhhKTsKKyAgICAgICAgICAgIG1EaW1MYXllclBhaW50LnNldEFscGhhKChpbnQpIChkaW1BbHBoYSAqIDI1NSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEJpbmRzIHRoZSBiYXIgdmlldyB0byB0aGUgdGFzayAqLwogICAgIHB1YmxpYyB2b2lkIHJlYmluZFRvVGFzayhUYXNrIHQpIHsKKyAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7CiAgICAgICAgIG1UYXNrID0gdDsKIAogICAgICAgICAvLyBJZiBhbiBhY3Rpdml0eSBpY29uIGlzIGRlZmluZWQsIHRoZW4gd2UgdXNlIHRoYXQgYXMgdGhlIHByaW1hcnkgaWNvbiB0byBzaG93IGluIHRoZSBiYXIsCiAgICAgICAgIC8vIG90aGVyd2lzZSwgd2UgZmFsbCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbiBpY29uCi0gICAgICAgIGlmICh0LmFjdGl2aXR5SWNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQXBwbGljYXRpb25JY29uLnNldEltYWdlRHJhd2FibGUodC5hY3Rpdml0eUljb24pOwotICAgICAgICB9IGVsc2UgaWYgKHQuYXBwbGljYXRpb25JY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0SW1hZ2VEcmF3YWJsZSh0LmFwcGxpY2F0aW9uSWNvbik7CisgICAgICAgIHVwZGF0ZUJhY2tncm91bmRDb2xvcihtRGltQWxwaGEpOworICAgICAgICBpZiAodC5pY29uICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1JY29uVmlldy5zZXRJbWFnZURyYXdhYmxlKHQuaWNvbik7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFtQWN0aXZpdHlEZXNjcmlwdGlvbi5nZXRUZXh0KCkudG9TdHJpbmcoKS5lcXVhbHModC5hY3Rpdml0eUxhYmVsKSkgewotICAgICAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0VGV4dCh0LmFjdGl2aXR5TGFiZWwpOworICAgICAgICBpZiAoIW1UaXRsZVZpZXcuZ2V0VGV4dCgpLnRvU3RyaW5nKCkuZXF1YWxzKHQudGl0bGUpKSB7CisgICAgICAgICAgICBtVGl0bGVWaWV3LnNldFRleHQodC50aXRsZSk7CiAgICAgICAgIH0KLSAgICAgICAgbUFjdGl2aXR5RGVzY3JpcHRpb24uc2V0Q29udGVudERlc2NyaXB0aW9uKHQuY29udGVudERlc2NyaXB0aW9uKTsKLQotICAgICAgICAvLyBUcnkgYW5kIGFwcGx5IHRoZSBzeXN0ZW0gdWkgdGludAotICAgICAgICBpbnQgZXhpc3RpbmdCZ0NvbG9yID0gKGdldEJhY2tncm91bmQoKSBpbnN0YW5jZW9mIENvbG9yRHJhd2FibGUpID8KLSAgICAgICAgICAgICAgICAoKENvbG9yRHJhd2FibGUpIGdldEJhY2tncm91bmQoKSkuZ2V0Q29sb3IoKSA6IDA7Ci0gICAgICAgIGlmIChleGlzdGluZ0JnQ29sb3IgIT0gdC5jb2xvclByaW1hcnkpIHsKLSAgICAgICAgICAgIG1CYWNrZ3JvdW5kQ29sb3JEcmF3YWJsZS5zZXRDb2xvcih0LmNvbG9yUHJpbWFyeSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgdGFza0JhclZpZXdMaWdodFRleHRDb2xvciA9IGdldFJlc291cmNlcygpLmdldENvbG9yKAotICAgICAgICAgICAgICAgIFIuY29sb3IucmVjZW50c190YXNrX2Jhcl9saWdodF90ZXh0X2NvbG9yKTsKLSAgICAgICAgaW50IHRhc2tCYXJWaWV3RGFya1RleHRDb2xvciA9IGdldFJlc291cmNlcygpLmdldENvbG9yKAotICAgICAgICAgICAgICAgIFIuY29sb3IucmVjZW50c190YXNrX2Jhcl9kYXJrX3RleHRfY29sb3IpOwotICAgICAgICBtQWN0aXZpdHlEZXNjcmlwdGlvbi5zZXRUZXh0Q29sb3IodC51c2VMaWdodE9uUHJpbWFyeUNvbG9yID8KLSAgICAgICAgICAgICAgICB0YXNrQmFyVmlld0xpZ2h0VGV4dENvbG9yIDogdGFza0JhclZpZXdEYXJrVGV4dENvbG9yKTsKKyAgICAgICAgbVRpdGxlVmlldy5zZXRDb250ZW50RGVzY3JpcHRpb24odC5jb250ZW50RGVzY3JpcHRpb24pOworICAgICAgICBtVGl0bGVWaWV3LnNldFRleHRDb2xvcih0LnVzZUxpZ2h0T25QcmltYXJ5Q29sb3IgPworICAgICAgICAgICAgICAgIG1UYXNrQmFyVmlld0xpZ2h0VGV4dENvbG9yIDogbVRhc2tCYXJWaWV3RGFya1RleHRDb2xvcik7CiAgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldEltYWdlRHJhd2FibGUodC51c2VMaWdodE9uUHJpbWFyeUNvbG9yID8KICAgICAgICAgICAgICAgICBtTGlnaHREaXNtaXNzRHJhd2FibGUgOiBtRGFya0Rpc21pc3NEcmF3YWJsZSk7CiAgICAgICAgIG1EaXNtaXNzQnV0dG9uLnNldENvbnRlbnREZXNjcmlwdGlvbihTdHJpbmcuZm9ybWF0KG1EaXNtaXNzQ29udGVudERlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgIHQuY29udGVudERlc2NyaXB0aW9uKSk7Ci0gICAgICAgIHVwZGF0ZVJlc2l6ZVRhc2tCYXJJY29uKHQpOwotICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOworCisgICAgICAgIC8vIFdoZW4gZnJlZWZvcm0gd29ya3NwYWNlcyBhcmUgZW5hYmxlZCwgdGhlbiB1cGRhdGUgdGhlIG1vdmUtdGFzayBidXR0b24gZGVwZW5kaW5nIG9uIHRoZQorICAgICAgICAvLyBjdXJyZW50IHRhc2sKKyAgICAgICAgaWYgKHNzcC5oYXNGcmVlZm9ybVdvcmtzcGFjZVN1cHBvcnQoKSkgeworICAgICAgICAgICAgaWYgKHQuaXNGcmVlZm9ybVRhc2soKSkgeworICAgICAgICAgICAgICAgIG1Nb3ZlVGFza1RhcmdldFN0YWNrSWQgPSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRDsKKyAgICAgICAgICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0SW1hZ2VSZXNvdXJjZSh0LnVzZUxpZ2h0T25QcmltYXJ5Q29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgID8gUi5kcmF3YWJsZS5yZWNlbnRzX21vdmVfdGFza19mdWxsc2NyZWVuX2xpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUucmVjZW50c19tb3ZlX3Rhc2tfZnVsbHNjcmVlbl9kYXJrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbU1vdmVUYXNrVGFyZ2V0U3RhY2tJZCA9IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKKyAgICAgICAgICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0SW1hZ2VSZXNvdXJjZSh0LnVzZUxpZ2h0T25QcmltYXJ5Q29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgID8gUi5kcmF3YWJsZS5yZWNlbnRzX21vdmVfdGFza19mcmVlZm9ybV9saWdodAorICAgICAgICAgICAgICAgICAgICAgICAgOiBSLmRyYXdhYmxlLnJlY2VudHNfbW92ZV90YXNrX2ZyZWVmb3JtX2RhcmspOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1Nb3ZlVGFza0J1dHRvbi5nZXRWaXNpYmlsaXR5KCkgIT0gVmlldy5WSVNJQkxFKSB7CisgICAgICAgICAgICAgICAgbU1vdmVUYXNrQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Nb3ZlVGFza0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBJbiBhY2Nlc3NpYmlsaXR5LCBhIHNpbmdsZSBjbGljayBvbiB0aGUgZm9jdXNlZCBhcHAgaW5mbyBidXR0b24gd2lsbCBzaG93IGl0Ci0gICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwogICAgICAgICBpZiAoc3NwLmlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgbUFwcGxpY2F0aW9uSWNvbi5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICBtSWNvblZpZXcuc2V0T25DbGlja0xpc3RlbmVyKHRoaXMpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIFVuYmluZHMgdGhlIGJhciB2aWV3IGZyb20gdGhlIHRhc2sgKi8KICAgICB2b2lkIHVuYmluZEZyb21UYXNrKCkgewogICAgICAgICBtVGFzayA9IG51bGw7Ci0gICAgICAgIG1BcHBsaWNhdGlvbkljb24uc2V0SW1hZ2VEcmF3YWJsZShudWxsKTsKLSAgICAgICAgbUFwcGxpY2F0aW9uSWNvbi5zZXRPbkNsaWNrTGlzdGVuZXIobnVsbCk7CisgICAgICAgIG1JY29uVmlldy5zZXRJbWFnZURyYXdhYmxlKG51bGwpOworICAgICAgICBtSWNvblZpZXcuc2V0T25DbGlja0xpc3RlbmVyKG51bGwpOwogICAgICAgICBtTW92ZVRhc2tCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG51bGwpOwotCi0gICAgICAgIC8vIFN0b3AgYW55IGZvY3VzIGFuaW1hdGlvbnMKLSAgICAgICAgVXRpbGl0aWVzLmNhbmNlbEFuaW1hdGlvbldpdGhvdXRDYWxsYmFja3MobUZvY3VzQW5pbWF0b3IpOwotICAgIH0KLQotICAgIC8qKiBVcGRhdGVzIHRoZSByZXNpemUgdGFzayBiYXIgYnV0dG9uLiAqLwotICAgIHZvaWQgdXBkYXRlUmVzaXplVGFza0Jhckljb24oVGFzayB0KSB7Ci0gICAgICAgIFN5c3RlbVNlcnZpY2VzUHJveHkgc3NwID0gUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpOwotICAgICAgICBSZWN0IGRpc3BsYXkgPSBzc3AuZ2V0V2luZG93UmVjdCgpOwotICAgICAgICBSZWN0IHRhc2tSZWN0ID0gc3NwLmdldFRhc2tCb3VuZHModC5rZXkuaWQpOwotICAgICAgICBpbnQgcmVzSWQgPSBSLmRyYXdhYmxlLnN0YXI7Ci0gICAgICAgIGlmIChkaXNwbGF5LmVxdWFscyh0YXNrUmVjdCkgfHwgdGFza1JlY3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX2Z1bGxzY3JlZW47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBib29sZWFuIHRvcCA9IGRpc3BsYXkudG9wID09IHRhc2tSZWN0LnRvcDsKLSAgICAgICAgICAgIGJvb2xlYW4gYm90dG9tID0gZGlzcGxheS5ib3R0b20gPT0gdGFza1JlY3QuYm90dG9tOwotICAgICAgICAgICAgYm9vbGVhbiBsZWZ0ID0gZGlzcGxheS5sZWZ0ID09IHRhc2tSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBib29sZWFuIHJpZ2h0ID0gZGlzcGxheS5yaWdodCA9PSB0YXNrUmVjdC5yaWdodDsKLSAgICAgICAgICAgIGlmICh0b3AgJiYgYm90dG9tICYmIGxlZnQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX2xlZnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHRvcCAmJiBib3R0b20gJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX3JpZ2h0OwotICAgICAgICAgICAgfSBlbHNlIGlmICh0b3AgJiYgbGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIHJlc0lkID0gUi5kcmF3YWJsZS52ZWN0b3JfZHJhd2FibGVfcGxhY2VfdG9wOwotICAgICAgICAgICAgfSBlbHNlIGlmIChib3R0b20gJiYgbGVmdCAmJiByaWdodCkgewotICAgICAgICAgICAgICAgIHJlc0lkID0gUi5kcmF3YWJsZS52ZWN0b3JfZHJhd2FibGVfcGxhY2VfYm90dG9tOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0b3AgJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9yaWdodDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodG9wICYmIGxlZnQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX3RvcF9sZWZ0OwotICAgICAgICAgICAgfSBlbHNlIGlmIChib3R0b20gJiYgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbV9yaWdodDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYm90dG9tICYmIGxlZnQpIHsKLSAgICAgICAgICAgICAgICByZXNJZCA9IFIuZHJhd2FibGUudmVjdG9yX2RyYXdhYmxlX3BsYWNlX2JvdHRvbV9sZWZ0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1Nb3ZlVGFza0J1dHRvbi5zZXRJbWFnZVJlc291cmNlKHJlc0lkKTsKLSAgICB9Ci0KLSAgICAvKiogQW5pbWF0ZXMgdGhpcyB0YXNrIGJhciBkaXNtaXNzIGJ1dHRvbiB3aGVuIGxhdW5jaGluZyBhIHRhc2suICovCi0gICAgdm9pZCBzdGFydExhdW5jaFRhc2tEaXNtaXNzQW5pbWF0aW9uKGZpbmFsIFJ1bm5hYmxlIHBvc3RBbmltYXRpb25SdW5hbmJsZSkgewotICAgICAgICBpZiAobURpc21pc3NCdXR0b24uZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSkgewotICAgICAgICAgICAgaW50IHRhc2tWaWV3RXhpdFRvQXBwRHVyYXRpb24gPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKAotICAgICAgICAgICAgICAgICAgICBSLmludGVnZXIucmVjZW50c190YXNrX2V4aXRfdG9fYXBwX2R1cmF0aW9uKTsKLSAgICAgICAgICAgIG1EaXNtaXNzQnV0dG9uLmFuaW1hdGUoKS5jYW5jZWwoKTsKLSAgICAgICAgICAgIG1EaXNtaXNzQnV0dG9uLmFuaW1hdGUoKQotICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KDApCi0gICAgICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbih0YXNrVmlld0V4aXRUb0FwcER1cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAud2l0aEVuZEFjdGlvbihwb3N0QW5pbWF0aW9uUnVuYW5ibGUpCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIEFuaW1hdGVzIHRoaXMgdGFzayBiYXIgaWYgdGhlIHVzZXIgZG9lcyBub3QgaW50ZXJhY3Qgd2l0aCB0aGUgc3RhY2sgYWZ0ZXIgYSBjZXJ0YWluIHRpbWUuICovCkBAIC0zMjksNDcgKzM4Miw4IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZGlzcGF0Y2hEcmF3KENhbnZhcyBjYW52YXMpIHsKLSAgICAgICAgc3VwZXIuZGlzcGF0Y2hEcmF3KGNhbnZhcyk7Ci0KLSAgICAgICAgLy8gRHJhdyB0aGUgdGh1bWJuYWlsIHdpdGggdGhlIHJvdW5kZWQgY29ybmVycwotICAgICAgICBjYW52YXMuZHJhd1JvdW5kUmVjdCgwLCAwLCBnZXRXaWR0aCgpLCBnZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICBtQ29ybmVyUmFkaXVzLAotICAgICAgICAgICAgICAgIG1Db3JuZXJSYWRpdXMsIG1EaW1MYXllclBhaW50KTsKLSAgICB9Ci0KLSAgICAvKiogTm90aWZpZXMgdGhlIGFzc29jaWF0ZWQgVGFza1ZpZXcgaGFzIGJlZW4gZm9jdXNlZC4gKi8KLSAgICB2b2lkIG9uVGFza1ZpZXdGb2N1c0NoYW5nZWQoYm9vbGVhbiBmb2N1c2VkLCBib29sZWFuIGFuaW1hdGVGb2N1c2VkU3RhdGUpIHsKLSAgICAgICAgYm9vbGVhbiBpc1J1bm5pbmcgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1Gb2N1c0FuaW1hdG9yICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlzUnVubmluZyA9IG1Gb2N1c0FuaW1hdG9yLmlzUnVubmluZygpOwotICAgICAgICB9Ci0gICAgICAgIFV0aWxpdGllcy5jYW5jZWxBbmltYXRpb25XaXRob3V0Q2FsbGJhY2tzKG1Gb2N1c0FuaW1hdG9yKTsKLQotICAgICAgICBpZiAoZm9jdXNlZCkgewotICAgICAgICAgICAgaWYgKGFuaW1hdGVGb2N1c2VkU3RhdGUpIHsKLSAgICAgICAgICAgICAgICAvLyBCdW1wIHVwIHRoZSB0cmFuc2xhdGlvbgotICAgICAgICAgICAgICAgIG1Gb2N1c0FuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdCh0aGlzLCAidHJhbnNsYXRpb25aIiwgRk9DVVNfVFJBTlNMQVRJT05fWik7Ci0gICAgICAgICAgICAgICAgbUZvY3VzQW5pbWF0b3Iuc2V0RHVyYXRpb24oMjAwKTsKLSAgICAgICAgICAgICAgICBtRm9jdXNBbmltYXRvci5zdGFydCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRUcmFuc2xhdGlvblooRk9DVVNfVFJBTlNMQVRJT05fWik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaXNSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgdHJhbnNsYXRpb24KLSAgICAgICAgICAgICAgICBtRm9jdXNBbmltYXRvciA9IE9iamVjdEFuaW1hdG9yLm9mRmxvYXQodGhpcywgInRyYW5zbGF0aW9uWiIsIDBmKTsKLSAgICAgICAgICAgICAgICBtRm9jdXNBbmltYXRvci5zZXREdXJhdGlvbigxNTApOwotICAgICAgICAgICAgICAgIG1Gb2N1c0FuaW1hdG9yLnN0YXJ0KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uWigwZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICBpZiAodiA9PSBtQXBwbGljYXRpb25JY29uKSB7CisgICAgICAgIGlmICh2ID09IG1JY29uVmlldykgewogICAgICAgICAgICAgLy8gSW4gYWNjZXNzaWJpbGl0eSwgYSBzaW5nbGUgY2xpY2sgb24gdGhlIGZvY3VzZWQgYXBwIGluZm8gYnV0dG9uIHdpbGwgc2hvdyBpdAogICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dBcHBsaWNhdGlvbkluZm9FdmVudChtVGFzaykpOwogICAgICAgICB9IGVsc2UgaWYgKHYgPT0gbURpc21pc3NCdXR0b24pIHsKQEAgLTM4MCwxMyArMzk0LDE4IEBACiAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmhpc3RvZ3JhbShnZXRDb250ZXh0KCksICJvdmVydmlld190YXNrX2Rpc21pc3NlZF9zb3VyY2UiLAogICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMuTWV0cmljcy5EaXNtaXNzU291cmNlSGVhZGVyQnV0dG9uKTsKICAgICAgICAgfSBlbHNlIGlmICh2ID09IG1Nb3ZlVGFza0J1dHRvbikgewotICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFJlc2l6ZVRhc2tFdmVudChtVGFzaykpOworICAgICAgICAgICAgVGFza1ZpZXcgdHYgPSBVdGlsaXRpZXMuZmluZFBhcmVudCh0aGlzLCBUYXNrVmlldy5jbGFzcyk7CisgICAgICAgICAgICBSZWN0IGJvdW5kcyA9IG1Nb3ZlVGFza1RhcmdldFN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lECisgICAgICAgICAgICAgICAgICAgID8gbmV3IFJlY3QobVRhc2tWaWV3UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgOiBuZXcgUmVjdCgpOworICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IExhdW5jaFRhc2tFdmVudCh0diwgbVRhc2ssIGJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgbU1vdmVUYXNrVGFyZ2V0U3RhY2tJZCwgZmFsc2UpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrKFZpZXcgdikgewotICAgICAgICBpZiAodiA9PSBtQXBwbGljYXRpb25JY29uKSB7CisgICAgICAgIGlmICh2ID09IG1JY29uVmlldykgewogICAgICAgICAgICAgRXZlbnRCdXMuZ2V0RGVmYXVsdCgpLnNlbmQobmV3IFNob3dBcHBsaWNhdGlvbkluZm9FdmVudChtVGFzaykpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3VGh1bWJuYWlsLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlld1RodW1ibmFpbC5qYXZhCmluZGV4IDdiYjJjN2IuLjM5ZDA2MDQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3VGh1bWJuYWlsLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdUaHVtYm5haWwuamF2YQpAQCAtNDIsMjUgKzQyLDE1IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBUYXNrVmlld1RodW1ibmFpbCBleHRlbmRzIFZpZXcgewogCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBQcm9wZXJ0eTxUYXNrVmlld1RodW1ibmFpbCwgRmxvYXQ+IEJJVE1BUF9TQ0FMRSA9Ci0gICAgICAgICAgICBuZXcgRmxvYXRQcm9wZXJ0eTxUYXNrVmlld1RodW1ibmFpbD4oImJpdG1hcFNjYWxlIikgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFRhc2tWaWV3VGh1bWJuYWlsIG9iamVjdCwgZmxvYXQgc2NhbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldEJpdG1hcFNjYWxlKHNjYWxlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgRmxvYXQgZ2V0KFRhc2tWaWV3VGh1bWJuYWlsIG9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0LmdldEJpdG1hcFNjYWxlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKKyAgICBwcml2YXRlIFRhc2sgbVRhc2s7CiAKICAgICAvLyBEcmF3aW5nCisgICAgUmVjdCBtVGh1bWJuYWlsUmVjdCA9IG5ldyBSZWN0KCk7CisgICAgUmVjdCBtVGFza1ZpZXdSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBpbnQgbUNvcm5lclJhZGl1czsKICAgICBmbG9hdCBtRGltQWxwaGE7CiAgICAgTWF0cml4IG1TY2FsZU1hdHJpeCA9IG5ldyBNYXRyaXgoKTsKICAgICBQYWludCBtRHJhd1BhaW50ID0gbmV3IFBhaW50KCk7Ci0gICAgZmxvYXQgbUJpdG1hcFNjYWxlID0gMWY7CiAgICAgQml0bWFwU2hhZGVyIG1CaXRtYXBTaGFkZXI7CiAgICAgTGlnaHRpbmdDb2xvckZpbHRlciBtTGlnaHRpbmdDb2xvckZpbHRlciA9IG5ldyBMaWdodGluZ0NvbG9yRmlsdGVyKDB4ZmZmZmZmZmYsIDApOwogCkBAIC05OCwxMyArODgsMjggQEAKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBDYWxsZWQgd2hlbiB0aGUgdGFzayB2aWV3IGZyYW1lIGNoYW5nZXMsIGFsbG93aW5nIHVzIHRvIG1vdmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBoZWFkZXIKKyAgICAgKiB0byBtYXRjaCB0aGUgZnJhbWUgY2hhbmdlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvblRhc2tWaWV3U2l6ZUNoYW5nZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiB0aGUgYm91bmRzIGhhdmUgbm90IGNoYW5nZWQKKyAgICAgICAgaWYgKG1UYXNrVmlld1JlY3Qud2lkdGgoKSA9PSB3aWR0aCAmJiBtVGFza1ZpZXdSZWN0LmhlaWdodCgpID09IGhlaWdodCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbVRhc2tWaWV3UmVjdC5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHVwZGF0ZVRodW1ibmFpbFNjYWxlKCk7CisgICAgICAgIGludmFsaWRhdGUoKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkRyYXcoQ2FudmFzIGNhbnZhcykgewogICAgICAgICBpZiAobUludmlzaWJsZSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIERyYXcgdGhlIHRodW1ibmFpbCB3aXRoIHRoZSByb3VuZGVkIGNvcm5lcnMKLSAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QoMCwgMCwgZ2V0V2lkdGgoKSwgZ2V0SGVpZ2h0KCksCisgICAgICAgIGNhbnZhcy5kcmF3Um91bmRSZWN0KDAsIDAsIG1UYXNrVmlld1JlY3Qud2lkdGgoKSwgbVRhc2tWaWV3UmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICBtQ29ybmVyUmFkaXVzLAogICAgICAgICAgICAgICAgIG1Db3JuZXJSYWRpdXMsIG1EcmF3UGFpbnQpOwogICAgIH0KQEAgLTExNSwxMCArMTIwLDE0IEBACiAgICAgICAgICAgICBtQml0bWFwU2hhZGVyID0gbmV3IEJpdG1hcFNoYWRlcihibSwgU2hhZGVyLlRpbGVNb2RlLkNMQU1QLAogICAgICAgICAgICAgICAgICAgICBTaGFkZXIuVGlsZU1vZGUuQ0xBTVApOwogICAgICAgICAgICAgbURyYXdQYWludC5zZXRTaGFkZXIobUJpdG1hcFNoYWRlcik7CisgICAgICAgICAgICBtVGh1bWJuYWlsUmVjdC5zZXQoMCwgMCwgYm0uZ2V0V2lkdGgoKSwgYm0uZ2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgdXBkYXRlVGh1bWJuYWlsU2NhbGUoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1CaXRtYXBTaGFkZXIgPSBudWxsOwogICAgICAgICAgICAgbURyYXdQYWludC5zZXRTaGFkZXIobnVsbCk7CisgICAgICAgICAgICBtVGh1bWJuYWlsUmVjdC5zZXRFbXB0eSgpOwogICAgICAgICB9CisgICAgICAgIGludmFsaWRhdGUoKTsKICAgICB9CiAKICAgICAvKiogVXBkYXRlcyB0aGUgcGFpbnQgdG8gZHJhdyB0aGUgdGh1bWJuYWlsLiAqLwpAQCAtMTQwLDEyICsxNDksMjMgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzY2FsZSBvZiB0aGUgYml0bWFwIHJlbGF0aXZlIHRvIHRoaXMgdmlldy4KKyAgICAgKiBVcGRhdGVzIHRoZSBzY2FsZSBvZiB0aGUgYml0bWFwIHJlbGF0aXZlIHRvIHRoaXMgdmlldy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCaXRtYXBTY2FsZShmbG9hdCBzY2FsZSkgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVRodW1ibmFpbFNjYWxlKCkgewogICAgICAgICBpZiAobUJpdG1hcFNoYWRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtQml0bWFwU2NhbGUgPSBzY2FsZTsKLSAgICAgICAgICAgIG1TY2FsZU1hdHJpeC5zZXRTY2FsZShtQml0bWFwU2NhbGUsIG1CaXRtYXBTY2FsZSk7CisgICAgICAgICAgICBmbG9hdCB0aHVtYm5haWxTY2FsZTsKKyAgICAgICAgICAgIGlmICghbVRhc2suaXNGcmVlZm9ybVRhc2soKSB8fCBtVGFzay5ib3VuZHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdGFjayB0YXNrLCBvciBhIHN0YWNrIHRhc2sgbW92ZWQgaW50byB0aGUgZnJlZWZvcm0gd29ya3NwYWNlLCB0aGVuCisgICAgICAgICAgICAgICAgLy8ganVzdCBzY2FsZSB0aGlzIHRodW1ibmFpbCB0byBmaXQgdGhlIHdpZHRoIG9mIHRoZSB2aWV3CisgICAgICAgICAgICAgICAgdGh1bWJuYWlsU2NhbGUgPSAoZmxvYXQpIG1UYXNrVmlld1JlY3Qud2lkdGgoKSAvIG1UaHVtYm5haWxSZWN0LndpZHRoKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgdGhpcyBpcyBhIGZyZWVmb3JtIHRhc2sgd2l0aCB0YXNrIGJvdW5kcywgdGhlbiBzY2FsZSB0aGUgdGh1bWJuYWlsCisgICAgICAgICAgICAgICAgLy8gdG8gZml0IHRoZSBlbnRpcmUgYml0bWFwIGludG8gdGhlIHRhc2sgYm91bmRzCisgICAgICAgICAgICAgICAgdGh1bWJuYWlsU2NhbGUgPSBNYXRoLm1pbigKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgbVRhc2tWaWV3UmVjdC53aWR0aCgpIC8gbVRodW1ibmFpbFJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgbVRhc2tWaWV3UmVjdC5oZWlnaHQoKSAvIG1UaHVtYm5haWxSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TY2FsZU1hdHJpeC5zZXRTY2FsZSh0aHVtYm5haWxTY2FsZSwgdGh1bWJuYWlsU2NhbGUpOwogICAgICAgICAgICAgbUJpdG1hcFNoYWRlci5zZXRMb2NhbE1hdHJpeChtU2NhbGVNYXRyaXgpOwogICAgICAgICB9CiAgICAgICAgIGlmICghbUludmlzaWJsZSkgewpAQCAtMTUzLDEwICsxNzMsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIGZsb2F0IGdldEJpdG1hcFNjYWxlKCkgewotICAgICAgICByZXR1cm4gbUJpdG1hcFNjYWxlOwotICAgIH0KLQogICAgIC8qKiBVcGRhdGVzIHRoZSBjbGlwIHJlY3QgYmFzZWQgb24gdGhlIGdpdmVuIHRhc2sgYmFyLiAqLwogICAgIHZvaWQgdXBkYXRlQ2xpcFRvVGFza0JhcihWaWV3IHRhc2tCYXIpIHsKICAgICAgICAgbVRhc2tCYXIgPSB0YXNrQmFyOwpAQCAtMTg5LDYgKzIwNSw3IEBACiAKICAgICAvKiogQmluZHMgdGhlIHRodW1ibmFpbCB2aWV3IHRvIHRoZSB0YXNrICovCiAgICAgdm9pZCByZWJpbmRUb1Rhc2soVGFzayB0KSB7CisgICAgICAgIG1UYXNrID0gdDsKICAgICAgICAgaWYgKHQudGh1bWJuYWlsICE9IG51bGwpIHsKICAgICAgICAgICAgIHNldFRodW1ibmFpbCh0LnRodW1ibmFpbCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xOTgsNiArMjE1LDcgQEAKIAogICAgIC8qKiBVbmJpbmRzIHRoZSB0aHVtYm5haWwgdmlldyBmcm9tIHRoZSB0YXNrICovCiAgICAgdm9pZCB1bmJpbmRGcm9tVGFzaygpIHsKKyAgICAgICAgbVRhc2sgPSBudWxsOwogICAgICAgICBzZXRUaHVtYm5haWwobnVsbCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdUcmFuc2Zvcm0uamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1Rhc2tWaWV3VHJhbnNmb3JtLmphdmEKaW5kZXggYzNlMDkwNi4uNTM4YzI0OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVGFza1ZpZXdUcmFuc2Zvcm0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy92aWV3cy9UYXNrVmlld1RyYW5zZm9ybS5qYXZhCkBAIC0xNiw1NCArMTYsOTAgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLnZpZXdzOwogCi1pbXBvcnQgYW5kcm9pZC5hbmltYXRpb24uVmFsdWVBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5Qcm9wZXJ0eVZhbHVlc0hvbGRlcjsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3RGOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3UHJvcGVydHlBbmltYXRvcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkludGVycG9sYXRvcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuSW50UHJvcGVydHk7CitpbXBvcnQgYW5kcm9pZC51dGlsLlByb3BlcnR5OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAotLyogVGhlIHRyYW5zZm9ybSBzdGF0ZSBmb3IgYSB0YXNrIHZpZXcgKi8KKy8qKgorICogVGhlIHZpc3VhbCBwcm9wZXJ0aWVzIGZvciBhIHtAbGluayBUYXNrVmlld30uCisgKi8KIHB1YmxpYyBjbGFzcyBUYXNrVmlld1RyYW5zZm9ybSB7CiAKLSAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgb3V0IG9mIHRoZSB0cmFuc2Zvcm0KLSAgICBwdWJsaWMgaW50IHN0YXJ0RGVsYXkgPSAwOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUHJvcGVydHk8VmlldywgSW50ZWdlcj4gTEVGVCA9CisgICAgICAgICAgICBuZXcgSW50UHJvcGVydHk8Vmlldz4oImxlZnQiKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoVmlldyBvYmplY3QsIGludCB2KSB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXRMZWZ0KHYpOworICAgICAgICAgICAgICAgIH0KIAotICAgIHB1YmxpYyBpbnQgdHJhbnNsYXRpb25YID0gMDsKLSAgICBwdWJsaWMgaW50IHRyYW5zbGF0aW9uWSA9IDA7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIEludGVnZXIgZ2V0KFZpZXcgb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuZ2V0TGVmdCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFByb3BlcnR5PFZpZXcsIEludGVnZXI+IFRPUCA9CisgICAgICAgICAgICBuZXcgSW50UHJvcGVydHk8Vmlldz4oInRvcCIpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZShWaWV3IG9iamVjdCwgaW50IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnNldFRvcCh2KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgSW50ZWdlciBnZXQoVmlldyBvYmplY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5nZXRUb3AoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQcm9wZXJ0eTxWaWV3LCBJbnRlZ2VyPiBSSUdIVCA9CisgICAgICAgICAgICBuZXcgSW50UHJvcGVydHk8Vmlldz4oInJpZ2h0IikgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKFZpZXcgb2JqZWN0LCBpbnQgdikgeworICAgICAgICAgICAgICAgICAgICBvYmplY3Quc2V0UmlnaHQodik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIEludGVnZXIgZ2V0KFZpZXcgb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuZ2V0UmlnaHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBQcm9wZXJ0eTxWaWV3LCBJbnRlZ2VyPiBCT1RUT00gPQorICAgICAgICAgICAgbmV3IEludFByb3BlcnR5PFZpZXc+KCJib3R0b20iKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoVmlldyBvYmplY3QsIGludCB2KSB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXRCb3R0b20odik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIEludGVnZXIgZ2V0KFZpZXcgb2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3QuZ2V0Qm90dG9tKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKwogICAgIHB1YmxpYyBmbG9hdCB0cmFuc2xhdGlvblogPSAwOwogICAgIHB1YmxpYyBmbG9hdCBzY2FsZSA9IDFmOwogICAgIHB1YmxpYyBmbG9hdCBhbHBoYSA9IDFmOwogCi0gICAgLy8gQ2xpcCBhbmQgdGh1bWJuYWlsIHNjYWxlIGFyZSB1bnRyYW5zZm9ybWVkIGxheW91dC1zcGFjZSBwcm9wZXJ0aWVzCi0gICAgLy8gVGhlIGJvdHRvbSBjbGlwIGlzIG9ubHkgdXNlZCBmb3IgZnJlZWZvcm0gd29ya3NwYWNlIHRhc2tzCi0gICAgcHVibGljIGludCBjbGlwQm90dG9tID0gMDsKLSAgICBwdWJsaWMgaW50IGNsaXBSaWdodCA9IDA7Ci0gICAgcHVibGljIGZsb2F0IHRodW1ibmFpbFNjYWxlID0gMWY7Ci0KICAgICBwdWJsaWMgYm9vbGVhbiB2aXNpYmxlID0gZmFsc2U7CiAgICAgZmxvYXQgcCA9IDBmOwogCi0gICAgLy8gVGhpcyBpcyBhIHdpbmRvdy1zcGFjZSByZWN0IHRoYXQgaXMgcHVyZWx5IHVzZWQgZm9yIGNvb3JkaW5hdGluZyB0aGUgYW5pbWF0aW9uIG9mIGFuIGFwcAotICAgIC8vIHdpbmRvdyBpbnRvIFJlY2VudHMuCisgICAgLy8gVGhpcyBpcyBhIHdpbmRvdy1zcGFjZSByZWN0IHVzZWQgZm9yIHBvc2l0aW9uaW5nIHRoZSB0YXNrIGluIHRoZSBzdGFjayBhbmQgZnJlZWZvcm0gd29ya3NwYWNlCiAgICAgcHVibGljIFJlY3RGIHJlY3QgPSBuZXcgUmVjdEYoKTsKIAotICAgIHB1YmxpYyBUYXNrVmlld1RyYW5zZm9ybSgpIHsKLSAgICAgICAgLy8gRG8gbm90aGluZwotICAgIH0KLQogICAgIC8qKgogICAgICAqIFJlc2V0cyB0aGUgY3VycmVudCB0cmFuc2Zvcm0uCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgcmVzZXQoKSB7Ci0gICAgICAgIHN0YXJ0RGVsYXkgPSAwOwotICAgICAgICB0cmFuc2xhdGlvblggPSAwOwotICAgICAgICB0cmFuc2xhdGlvblkgPSAwOwogICAgICAgICB0cmFuc2xhdGlvblogPSAwOwogICAgICAgICBzY2FsZSA9IDFmOwogICAgICAgICBhbHBoYSA9IDFmOwotICAgICAgICBjbGlwQm90dG9tID0gMDsKLSAgICAgICAgY2xpcFJpZ2h0ID0gMDsKLSAgICAgICAgdGh1bWJuYWlsU2NhbGUgPSAxZjsKICAgICAgICAgdmlzaWJsZSA9IGZhbHNlOwogICAgICAgICByZWN0LnNldEVtcHR5KCk7CiAgICAgICAgIHAgPSAwZjsKQEAgLTczLDY4ICsxMDksMzEgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNBbHBoYUNoYW5nZWRGcm9tKGZsb2F0IHYpIHsKICAgICAgICAgcmV0dXJuIChGbG9hdC5jb21wYXJlKGFscGhhLCB2KSAhPSAwKTsKICAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNTY2FsZUNoYW5nZWRGcm9tKGZsb2F0IHYpIHsKICAgICAgICAgcmV0dXJuIChGbG9hdC5jb21wYXJlKHNjYWxlLCB2KSAhPSAwKTsKICAgICB9Ci0gICAgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNsYXRpb25YQ2hhbmdlZEZyb20oZmxvYXQgdikgewotICAgICAgICByZXR1cm4gKEZsb2F0LmNvbXBhcmUodHJhbnNsYXRpb25YLCB2KSAhPSAwKTsKLSAgICB9Ci0gICAgcHVibGljIGJvb2xlYW4gaGFzVHJhbnNsYXRpb25ZQ2hhbmdlZEZyb20oZmxvYXQgdikgewotICAgICAgICByZXR1cm4gKEZsb2F0LmNvbXBhcmUodHJhbnNsYXRpb25ZLCB2KSAhPSAwKTsKLSAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNUcmFuc2xhdGlvblpDaGFuZ2VkRnJvbShmbG9hdCB2KSB7CiAgICAgICAgIHJldHVybiAoRmxvYXQuY29tcGFyZSh0cmFuc2xhdGlvblosIHYpICE9IDApOwogICAgIH0KIAotICAgIC8qKiBBcHBsaWVzIHRoaXMgdHJhbnNmb3JtIHRvIGEgdmlldy4gKi8KLSAgICBwdWJsaWMgdm9pZCBhcHBseVRvVGFza1ZpZXcoVGFza1ZpZXcgdiwgaW50IGR1cmF0aW9uLCBJbnRlcnBvbGF0b3IgaW50ZXJwLCBib29sZWFuIGFsbG93TGF5ZXJzLAotICAgICAgICAgICAgYm9vbGVhbiBhbGxvd1NoYWRvd3MsIFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lciB1cGRhdGVDYWxsYmFjaykgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW55IHByb3BlcnRpZXMgaGF2ZSBjaGFuZ2VkLCBhbmQgdXBkYXRlIHRoZSB0YXNrIHZpZXcKLSAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkgewotICAgICAgICAgICAgVmlld1Byb3BlcnR5QW5pbWF0b3IgYW5pbSA9IHYuYW5pbWF0ZSgpOwotICAgICAgICAgICAgYm9vbGVhbiByZXF1aXJlc0xheWVycyA9IGZhbHNlOworICAgIHB1YmxpYyBib29sZWFuIGhhc1JlY3RDaGFuZ2VkRnJvbShWaWV3IHYpIHsKKyAgICAgICAgcmV0dXJuICgoaW50KSByZWN0LmxlZnQgIT0gdi5nZXRMZWZ0KCkpIHx8ICgoaW50KSByZWN0LnJpZ2h0ICE9IHYuZ2V0UmlnaHQoKSkgfHwKKyAgICAgICAgICAgICAgICAoKGludCkgcmVjdC50b3AgIT0gdi5nZXRUb3AoKSkgfHwgKChpbnQpIHJlY3QuYm90dG9tICE9IHYuZ2V0Qm90dG9tKCkpOworICAgIH0KIAotICAgICAgICAgICAgLy8gQW5pbWF0ZSB0byB0aGUgZmluYWwgc3RhdGUKLSAgICAgICAgICAgIGlmIChoYXNUcmFuc2xhdGlvblhDaGFuZ2VkRnJvbSh2LmdldFRyYW5zbGF0aW9uWCgpKSkgewotICAgICAgICAgICAgICAgIGFuaW0udHJhbnNsYXRpb25YKHRyYW5zbGF0aW9uWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzVHJhbnNsYXRpb25ZQ2hhbmdlZEZyb20odi5nZXRUcmFuc2xhdGlvblkoKSkpIHsKLSAgICAgICAgICAgICAgICBhbmltLnRyYW5zbGF0aW9uWSh0cmFuc2xhdGlvblkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFsbG93U2hhZG93cyAmJiBoYXNUcmFuc2xhdGlvblpDaGFuZ2VkRnJvbSh2LmdldFRyYW5zbGF0aW9uWigpKSkgewotICAgICAgICAgICAgICAgIGFuaW0udHJhbnNsYXRpb25aKHRyYW5zbGF0aW9uWik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzU2NhbGVDaGFuZ2VkRnJvbSh2LmdldFNjYWxlWCgpKSkgewotICAgICAgICAgICAgICAgIGFuaW0uc2NhbGVYKHNjYWxlKQotICAgICAgICAgICAgICAgICAgICAuc2NhbGVZKHNjYWxlKTsKLSAgICAgICAgICAgICAgICByZXF1aXJlc0xheWVycyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzQWxwaGFDaGFuZ2VkRnJvbSh2LmdldEFscGhhKCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVXNlIGxheWVycyBpZiB3ZSBhbmltYXRlIGFscGhhCi0gICAgICAgICAgICAgICAgYW5pbS5hbHBoYShhbHBoYSk7Ci0gICAgICAgICAgICAgICAgcmVxdWlyZXNMYXllcnMgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlcXVpcmVzTGF5ZXJzICYmIGFsbG93TGF5ZXJzKSB7Ci0gICAgICAgICAgICAgICAgYW5pbS53aXRoTGF5ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh1cGRhdGVDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYW5pbS5zZXRVcGRhdGVMaXN0ZW5lcih1cGRhdGVDYWxsYmFjayk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFuaW0uc2V0VXBkYXRlTGlzdGVuZXIobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhbmltLnNldExpc3RlbmVyKG51bGwpOwotICAgICAgICAgICAgYW5pbS5zZXRTdGFydERlbGF5KHN0YXJ0RGVsYXkpCi0gICAgICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihpbnRlcnApCi0gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU2V0IHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMKLSAgICAgICAgICAgIGlmIChoYXNUcmFuc2xhdGlvblhDaGFuZ2VkRnJvbSh2LmdldFRyYW5zbGF0aW9uWCgpKSkgewotICAgICAgICAgICAgICAgIHYuc2V0VHJhbnNsYXRpb25YKHRyYW5zbGF0aW9uWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzVHJhbnNsYXRpb25ZQ2hhbmdlZEZyb20odi5nZXRUcmFuc2xhdGlvblkoKSkpIHsKLSAgICAgICAgICAgICAgICB2LnNldFRyYW5zbGF0aW9uWSh0cmFuc2xhdGlvblkpOwotICAgICAgICAgICAgfQorICAgIC8qKgorICAgICAqIEFwcGxpZXMgdGhpcyB0cmFuc2Zvcm0gdG8gYSB2aWV3LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGFwcGx5VG9UYXNrVmlldyhUYXNrVmlldyB2LCBBcnJheUxpc3Q8QW5pbWF0b3I+IGFuaW1hdG9ycywKKyAgICAgICAgICAgIFRhc2tWaWV3QW5pbWF0aW9uIHRhc2tBbmltYXRpb24sIGJvb2xlYW4gYWxsb3dTaGFkb3dzKSB7CisgICAgICAgIC8vIFJldHVybiBlYXJseSBpZiBub3QgdmlzaWJsZQorICAgICAgICBpZiAoIXZpc2libGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0YXNrQW5pbWF0aW9uLmlzSW1tZWRpYXRlKCkpIHsKICAgICAgICAgICAgIGlmIChhbGxvd1NoYWRvd3MgJiYgaGFzVHJhbnNsYXRpb25aQ2hhbmdlZEZyb20odi5nZXRUcmFuc2xhdGlvblooKSkpIHsKICAgICAgICAgICAgICAgICB2LnNldFRyYW5zbGF0aW9uWih0cmFuc2xhdGlvblopOwogICAgICAgICAgICAgfQpAQCAtMTQ1LDI5ICsxNDQsNDIgQEAKICAgICAgICAgICAgIGlmIChoYXNBbHBoYUNoYW5nZWRGcm9tKHYuZ2V0QWxwaGEoKSkpIHsKICAgICAgICAgICAgICAgICB2LnNldEFscGhhKGFscGhhKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNSZWN0Q2hhbmdlZEZyb20odikpIHsKKyAgICAgICAgICAgICAgICB2LnNldExlZnRUb3BSaWdodEJvdHRvbSgoaW50KSByZWN0LmxlZnQsIChpbnQpIHJlY3QudG9wLCAoaW50KSByZWN0LnJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgcmVjdC5ib3R0b20pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFsbG93U2hhZG93cyAmJiBoYXNUcmFuc2xhdGlvblpDaGFuZ2VkRnJvbSh2LmdldFRyYW5zbGF0aW9uWigpKSkgeworICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5hZGQoT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdCh2LCBWaWV3LlRSQU5TTEFUSU9OX1osIHYuZ2V0VHJhbnNsYXRpb25aKCksCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvblopKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNTY2FsZUNoYW5nZWRGcm9tKHYuZ2V0U2NhbGVYKCkpKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0b3JzLmFkZChPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKHYsCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZkZsb2F0KFZpZXcuU0NBTEVfWCwgdi5nZXRTY2FsZVgoKSwgc2NhbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZGbG9hdChWaWV3LlNDQUxFX1ksIHYuZ2V0U2NhbGVYKCksIHNjYWxlKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhhc0FscGhhQ2hhbmdlZEZyb20odi5nZXRBbHBoYSgpKSkgeworICAgICAgICAgICAgICAgIGFuaW1hdG9ycy5hZGQoT2JqZWN0QW5pbWF0b3Iub2ZGbG9hdCh2LCBWaWV3LkFMUEhBLCB2LmdldEFscGhhKCksIGFscGhhKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFzUmVjdENoYW5nZWRGcm9tKHYpKSB7CisgICAgICAgICAgICAgICAgYW5pbWF0b3JzLmFkZChPYmplY3RBbmltYXRvci5vZlByb3BlcnR5VmFsdWVzSG9sZGVyKHYsCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZkludChMRUZULCB2LmdldExlZnQoKSwgKGludCkgcmVjdC5sZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5VmFsdWVzSG9sZGVyLm9mSW50KFRPUCwgdi5nZXRUb3AoKSwgKGludCkgcmVjdC50b3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlWYWx1ZXNIb2xkZXIub2ZJbnQoUklHSFQsIHYuZ2V0UmlnaHQoKSwgKGludCkgcmVjdC5yaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlc0hvbGRlci5vZkludChCT1RUT00sIHYuZ2V0Qm90dG9tKCksIChpbnQpIHJlY3QuYm90dG9tKSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqIFJlc2V0IHRoZSB0cmFuc2Zvcm0gb24gYSB2aWV3LiAqLwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNldChUYXNrVmlldyB2KSB7Ci0gICAgICAgIC8vIENhbmNlbCBhbnkgcnVubmluZyBhbmltYXRpb25zCi0gICAgICAgIHYuYW5pbWF0ZSgpLmNhbmNlbCgpOwogICAgICAgICB2LnNldFRyYW5zbGF0aW9uWCgwZik7CiAgICAgICAgIHYuc2V0VHJhbnNsYXRpb25ZKDBmKTsKICAgICAgICAgdi5zZXRUcmFuc2xhdGlvblooMGYpOwogICAgICAgICB2LnNldFNjYWxlWCgxZik7CiAgICAgICAgIHYuc2V0U2NhbGVZKDFmKTsKICAgICAgICAgdi5zZXRBbHBoYSgxZik7Ci0gICAgICAgIHYuZ2V0Vmlld0JvdW5kcygpLnNldENsaXBSaWdodCgwLCBmYWxzZSAvKiBmb3JjZVVwZGF0ZSAqLyk7Ci0gICAgICAgIHYuZ2V0Vmlld0JvdW5kcygpLnNldENsaXBCb3R0b20oMCwgZmFsc2UgLyogZm9yY2VVcGRhdGUgKi8pOwotICAgICAgICB2Lm1UaHVtYm5haWxWaWV3LnNldEJpdG1hcFNjYWxlKDFmKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gIlRhc2tWaWV3VHJhbnNmb3JtIGRlbGF5OiAiICsgc3RhcnREZWxheSArCi0gICAgICAgICAgICAgICAgIiB4OiAiICsgdHJhbnNsYXRpb25YICsgIiB5OiAiICsgdHJhbnNsYXRpb25ZICsgIiB6OiAiICsgdHJhbnNsYXRpb25aICsKLSAgICAgICAgICAgICAgICAiIHNjYWxlOiAiICsgc2NhbGUgKyAiIGFscGhhOiAiICsgYWxwaGEgKyAiIHZpc2libGU6ICIgKyB2aXNpYmxlICsgIiByZWN0OiAiICsgcmVjdCArCi0gICAgICAgICAgICAgICAgIiBwOiAiICsgcDsKKyAgICAgICAgdi5nZXRWaWV3Qm91bmRzKCkuc2V0Q2xpcEJvdHRvbSgwKTsKKyAgICAgICAgdi5zZXRMZWZ0VG9wUmlnaHRCb3R0b20oMCwgMCwgMCwgMCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVmlld0FuaW1hdGlvbi5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvdmlld3MvVmlld0FuaW1hdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWQ4MGZkLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL3ZpZXdzL1ZpZXdBbmltYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMudmlld3M7Ci0KLWltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1pc2MuUmVmZXJlbmNlQ291bnRlZFRyaWdnZXI7Ci0KLS8qIENvbW1vbiBjb2RlIHJlbGF0ZWQgdG8gdmlldyBhbmltYXRpb25zICovCi1wdWJsaWMgY2xhc3MgVmlld0FuaW1hdGlvbiB7Ci0KLSAgICAvKiBUaGUgYW5pbWF0aW9uIGNvbnRleHQgZm9yIGEgdGFzayB2aWV3IGFuaW1hdGlvbiBpbnRvIFJlY2VudHMgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRhc2tWaWV3RW50ZXJDb250ZXh0IHsKLSAgICAgICAgLy8gQSB0cmlnZ2VyIHRvIHJ1biBzb21lIGxvZ2ljIHdoZW4gYWxsIHRoZSBhbmltYXRpb25zIGNvbXBsZXRlLiAgVGhpcyB3b3JrcyBhcm91bmQgdGhlIGZhY3QKLSAgICAgICAgLy8gdGhhdCBpdCBpcyBkaWZmaWN1bHQgdG8gY29vcmRpbmF0ZSBWaWV3UHJvcGVydHlBbmltYXRvcnMKLSAgICAgICAgcHVibGljIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyOwotICAgICAgICAvLyBBbiB1cGRhdGUgbGlzdGVuZXIgdG8gbm90aWZ5IGFzIHRoZSBlbnRlciBhbmltYXRpb24gcHJvZ3Jlc3NlcyAodXNlZCBmb3IgdGhlIGhvbWUgdHJhbnNpdGlvbikKLSAgICAgICAgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUxpc3RlbmVyOwotCi0gICAgICAgIC8vIFRoZXNlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSB1cGRhdGVkIGZvciBlYWNoIHRhc2sgdmlldyB3ZSBzdGFydCB0aGUgZW50ZXIgYW5pbWF0aW9uIG9uCi0KLSAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgdGFzayBvY2NsdWRlcyB0aGUgbGF1bmNoIHRhcmdldAotICAgICAgICBib29sZWFuIGN1cnJlbnRUYXNrT2NjbHVkZXNMYXVuY2hUYXJnZXQ7Ci0gICAgICAgIC8vIFRoZSB0YXNrIHJlY3QgZm9yIHRoZSBjdXJyZW50IHN0YWNrCi0gICAgICAgIFJlY3QgY3VycmVudFRhc2tSZWN0OwotICAgICAgICAvLyBUaGUgdHJhbnNmb3JtIG9mIHRoZSBjdXJyZW50IHRhc2sgdmlldwotICAgICAgICBUYXNrVmlld1RyYW5zZm9ybSBjdXJyZW50VGFza1RyYW5zZm9ybTsKLSAgICAgICAgLy8gVGhlIHZpZXcgaW5kZXggb2YgdGhlIGN1cnJlbnQgdGFzayB2aWV3Ci0gICAgICAgIGludCBjdXJyZW50U3RhY2tWaWV3SW5kZXg7Ci0gICAgICAgIC8vIFRoZSB0b3RhbCBudW1iZXIgb2YgdGFzayB2aWV3cwotICAgICAgICBpbnQgY3VycmVudFN0YWNrVmlld0NvdW50OwotCi0gICAgICAgIHB1YmxpYyBUYXNrVmlld0VudGVyQ29udGV4dChSZWZlcmVuY2VDb3VudGVkVHJpZ2dlciB0KSB7Ci0gICAgICAgICAgICBwb3N0QW5pbWF0aW9uVHJpZ2dlciA9IHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBUaGUgYW5pbWF0aW9uIGNvbnRleHQgZm9yIGEgdGFzayB2aWV3IGFuaW1hdGlvbiBvdXQgb2YgUmVjZW50cyAqLwotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGFza1ZpZXdFeGl0Q29udGV4dCB7Ci0gICAgICAgIC8vIEEgdHJpZ2dlciB0byBydW4gc29tZSBsb2dpYyB3aGVuIGFsbCB0aGUgYW5pbWF0aW9ucyBjb21wbGV0ZS4gIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBmYWN0Ci0gICAgICAgIC8vIHRoYXQgaXQgaXMgZGlmZmljdWx0IHRvIGNvb3JkaW5hdGUgVmlld1Byb3BlcnR5QW5pbWF0b3JzCi0gICAgICAgIFJlZmVyZW5jZUNvdW50ZWRUcmlnZ2VyIHBvc3RBbmltYXRpb25UcmlnZ2VyOwotCi0gICAgICAgIC8vIFRoZSB0cmFuc2xhdGlvblkgdG8gYXBwbHkgdG8gYSBUYXNrVmlldyB0byBtb3ZlIGl0IG9mZiB0aGUgYm90dG9tIG9mIHRoZSB0YXNrIHN0YWNrCi0gICAgICAgIGludCBvZmZzY3JlZW5UcmFuc2xhdGlvblk7Ci0KLSAgICAgICAgcHVibGljIFRhc2tWaWV3RXhpdENvbnRleHQoUmVmZXJlbmNlQ291bnRlZFRyaWdnZXIgdCkgewotICAgICAgICAgICAgcG9zdEFuaW1hdGlvblRyaWdnZXIgPSB0OwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCmluZGV4IDZmZjdhM2UuLjE4OWU2NTEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlci5qYXZhCkBAIC0xNyw3ICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YWNrZGl2aWRlcjsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiAKQEAgLTQ5LDcgKzUwLDcgQEAKICAgICAgICAgcHV0Q29tcG9uZW50KERpdmlkZXIuY2xhc3MsIHRoaXMpOwogICAgICAgICBtRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgPSBuZXcgRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoKTsKICAgICAgICAgU3lzdGVtU2VydmljZXNQcm94eSBzc3AgPSBSZWNlbnRzLmdldFN5c3RlbVNlcnZpY2VzKCk7Ci0gICAgICAgIHNzcC5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKG1Eb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcik7CisgICAgICAgIHNzcC5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIobURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTk0LDEwICs5NSwxNSBAQAogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBjbGFzcyBEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBleHRlbmRzIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5TdHViIHsKKyAgICBjbGFzcyBEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBleHRlbmRzIElEb2NrZWRTdGFja0xpc3RlbmVyLlN0dWIgeworCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG9uRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgICAgICB1cGRhdGVWaXNpYmlsaXR5KHZpc2libGUpOwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGJvb2xlYW4gZXhpc3RzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlckhhbmRsZVZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlckhhbmRsZVZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWY1NmYzCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVySGFuZGxlVmlldy5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXI7CisKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvckxpc3RlbmVyQWRhcHRlcjsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5BbmltYXRvclNldDsKK2ltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvcjsKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Qcm9wZXJ0eTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvblV0aWxzOworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uSW50ZXJwb2xhdG9yOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOworCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKKworLyoqCisgKiBWaWV3IGZvciB0aGUgaGFuZGxlIGluIHRoZSBkb2NrZWQgc3RhY2sgZGl2aWRlci4KKyAqLworcHVibGljIGNsYXNzIERpdmlkZXJIYW5kbGVWaWV3IGV4dGVuZHMgSW1hZ2VCdXR0b24geworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+IFdJRFRIX1BST1BFUlRZCisgICAgICAgICAgICA9IG5ldyBQcm9wZXJ0eTxEaXZpZGVySGFuZGxlVmlldywgSW50ZWdlcj4oSW50ZWdlci5jbGFzcywgIndpZHRoIikgeworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSW50ZWdlciBnZXQoRGl2aWRlckhhbmRsZVZpZXcgb2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gb2JqZWN0Lm1DdXJyZW50V2lkdGg7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KERpdmlkZXJIYW5kbGVWaWV3IG9iamVjdCwgSW50ZWdlciB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0Lm1DdXJyZW50V2lkdGggPSB2YWx1ZTsKKyAgICAgICAgICAgIG9iamVjdC5pbnZhbGlkYXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+IEhFSUdIVF9QUk9QRVJUWQorICAgICAgICAgICAgPSBuZXcgUHJvcGVydHk8RGl2aWRlckhhbmRsZVZpZXcsIEludGVnZXI+KEludGVnZXIuY2xhc3MsICJoZWlnaHQiKSB7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBJbnRlZ2VyIGdldChEaXZpZGVySGFuZGxlVmlldyBvYmplY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QubUN1cnJlbnRIZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2V0KERpdmlkZXJIYW5kbGVWaWV3IG9iamVjdCwgSW50ZWdlciB2YWx1ZSkgeworICAgICAgICAgICAgb2JqZWN0Lm1DdXJyZW50SGVpZ2h0ID0gdmFsdWU7CisgICAgICAgICAgICBvYmplY3QuaW52YWxpZGF0ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgUGFpbnQgbVBhaW50ID0gbmV3IFBhaW50KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVdpZHRoOworICAgIHByaXZhdGUgZmluYWwgaW50IG1IZWlnaHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUNpcmNsZURpYW1ldGVyOworICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByaXZhdGUgaW50IG1DdXJyZW50V2lkdGg7CisgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRIZWlnaHQ7CisgICAgcHJpdmF0ZSBBbmltYXRvclNldCBtQW5pbWF0b3I7CisKKyAgICBwdWJsaWMgRGl2aWRlckhhbmRsZVZpZXcoQ29udGV4dCBjb250ZXh0LCBATnVsbGFibGUgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKKyAgICAgICAgbVBhaW50LnNldENvbG9yKGdldFJlc291cmNlcygpLmdldENvbG9yKFIuY29sb3IuZG9ja2VkX2RpdmlkZXJfaGFuZGxlLCBudWxsKSk7CisgICAgICAgIG1QYWludC5zZXRBbnRpQWxpYXModHJ1ZSk7CisgICAgICAgIG1XaWR0aCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmRvY2tlZF9kaXZpZGVyX2hhbmRsZV93aWR0aCk7CisgICAgICAgIG1IZWlnaHQgPSBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5kb2NrZWRfZGl2aWRlcl9oYW5kbGVfaGVpZ2h0KTsKKyAgICAgICAgbUN1cnJlbnRXaWR0aCA9IG1XaWR0aDsKKyAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtSGVpZ2h0OworICAgICAgICBtQ2lyY2xlRGlhbWV0ZXIgPSAobVdpZHRoICsgbUhlaWdodCkgLyAzOworICAgICAgICBtRmFzdE91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoZ2V0Q29udGV4dCgpLAorICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5pbnRlcnBvbGF0b3IuZmFzdF9vdXRfc2xvd19pbik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VG91Y2hpbmcoYm9vbGVhbiB0b3VjaGluZywgYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIGlmIChtQW5pbWF0b3IgIT0gbnVsbCkgeworICAgICAgICAgICAgbUFuaW1hdG9yLmNhbmNlbCgpOworICAgICAgICAgICAgbUFuaW1hdG9yID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFuaW1hdGUpIHsKKyAgICAgICAgICAgIGlmICh0b3VjaGluZykgeworICAgICAgICAgICAgICAgIG1DdXJyZW50V2lkdGggPSBtQ2lyY2xlRGlhbWV0ZXI7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtQ2lyY2xlRGlhbWV0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1DdXJyZW50V2lkdGggPSBtV2lkdGg7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRIZWlnaHQgPSBtSGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW52YWxpZGF0ZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYW5pbWF0ZVRvVGFyZ2V0KHRvdWNoaW5nID8gbUNpcmNsZURpYW1ldGVyIDogbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICB0b3VjaGluZyA/IG1DaXJjbGVEaWFtZXRlciA6IG1IZWlnaHQsIHRvdWNoaW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhbmltYXRlVG9UYXJnZXQoaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBib29sZWFuIHRvdWNoaW5nKSB7CisgICAgICAgIE9iamVjdEFuaW1hdG9yIHdpZHRoQW5pbWF0b3IgPSBPYmplY3RBbmltYXRvci5vZkludCh0aGlzLCBXSURUSF9QUk9QRVJUWSwKKyAgICAgICAgICAgICAgICBtQ3VycmVudFdpZHRoLCB0YXJnZXRXaWR0aCk7CisgICAgICAgIE9iamVjdEFuaW1hdG9yIGhlaWdodEFuaW1hdG9yID0gT2JqZWN0QW5pbWF0b3Iub2ZJbnQodGhpcywgSEVJR0hUX1BST1BFUlRZLAorICAgICAgICAgICAgICAgIG1DdXJyZW50SGVpZ2h0LCB0YXJnZXRIZWlnaHQpOworICAgICAgICBtQW5pbWF0b3IgPSBuZXcgQW5pbWF0b3JTZXQoKTsKKyAgICAgICAgbUFuaW1hdG9yLnBsYXlUb2dldGhlcih3aWR0aEFuaW1hdG9yLCBoZWlnaHRBbmltYXRvcik7CisgICAgICAgIG1BbmltYXRvci5zZXREdXJhdGlvbih0b3VjaGluZworICAgICAgICAgICAgICAgID8gRGl2aWRlclZpZXcuVE9VQ0hfQU5JTUFUSU9OX0RVUkFUSU9OCisgICAgICAgICAgICAgICAgOiBEaXZpZGVyVmlldy5UT1VDSF9SRUxFQVNFX0FOSU1BVElPTl9EVVJBVElPTik7CisgICAgICAgIG1BbmltYXRvci5zZXRJbnRlcnBvbGF0b3IodG91Y2hpbmcKKyAgICAgICAgICAgICAgICA/IERpdmlkZXJWaWV3LlRPVUNIX1JFU1BPTlNFX0lOVEVSUE9MQVRPUgorICAgICAgICAgICAgICAgIDogbUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpOworICAgICAgICBtQW5pbWF0b3IuYWRkTGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZChBbmltYXRvciBhbmltYXRpb24pIHsKKyAgICAgICAgICAgICAgICBtQW5pbWF0b3IgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbUFuaW1hdG9yLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgb25EcmF3KENhbnZhcyBjYW52YXMpIHsKKyAgICAgICAgaW50IGxlZnQgPSBnZXRXaWR0aCgpIC8gMiAtIG1DdXJyZW50V2lkdGggLyAyOworICAgICAgICBpbnQgdG9wID0gZ2V0SGVpZ2h0KCkgLyAyIC0gbUN1cnJlbnRIZWlnaHQgLyAyOworICAgICAgICBpbnQgcmFkaXVzID0gTWF0aC5taW4obUN1cnJlbnRXaWR0aCwgbUN1cnJlbnRIZWlnaHQpIC8gMjsKKyAgICAgICAgY2FudmFzLmRyYXdSb3VuZFJlY3QobGVmdCwgdG9wLCBsZWZ0ICsgbUN1cnJlbnRXaWR0aCwgdG9wICsgbUN1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgcmFkaXVzLCByYWRpdXMsIG1QYWludCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyU25hcEFsZ29yaXRobS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyU25hcEFsZ29yaXRobS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWU5MGNjLi4wMDAwMDAwCi0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlclNuYXBBbGdvcml0aG0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXI7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlJbmZvOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkZsaW5nQW5pbWF0aW9uVXRpbHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9MQU5EU0NBUEU7Ci0KLS8qKgotICogQ2FsY3VsYXRlcyB0aGUgc25hcCB0YXJnZXRzIGFuZCB0aGUgc25hcCBwb3NpdGlvbiBnaXZlbiBhIHBvc2l0aW9uIGFuZCBhIHZlbG9jaXR5LiBBbGwgcG9zaXRpb25zCi0gKiBoZXJlIGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcyB0aGUgbGVmdC90b3AgZWRnZSBvZiB0aGUgZGl2aWRlciByZWN0YW5nbGUuCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXZpZGVyU25hcEFsZ29yaXRobSB7Ci0KLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBGbGluZ0FuaW1hdGlvblV0aWxzIG1GbGluZ0FuaW1hdGlvblV0aWxzOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1EaXZpZGVyU2l6ZTsKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxTbmFwVGFyZ2V0PiBtVGFyZ2V0czsKLQotICAgIC8qKiBUaGUgZmlyc3QgdGFyZ2V0IHdoaWNoIGlzIHN0aWxsIHNwbGl0dGluZyB0aGUgc2NyZWVuICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTbmFwVGFyZ2V0IG1GaXJzdFNwbGl0VGFyZ2V0OwotCi0gICAgLyoqIFRoZSBsYXN0IHRhcmdldCB3aGljaCBpcyBzdGlsbCBzcGxpdHRpbmcgdGhlIHNjcmVlbiAqLwotICAgIHByaXZhdGUgZmluYWwgU25hcFRhcmdldCBtTGFzdFNwbGl0VGFyZ2V0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTbmFwVGFyZ2V0IG1EaXNtaXNzU3RhcnRUYXJnZXQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTbmFwVGFyZ2V0IG1EaXNtaXNzRW5kVGFyZ2V0OwotCi0gICAgcHVibGljIERpdmlkZXJTbmFwQWxnb3JpdGhtKENvbnRleHQgY3R4LCBGbGluZ0FuaW1hdGlvblV0aWxzIGZsaW5nQW5pbWF0aW9uVXRpbHMsCi0gICAgICAgICAgICBpbnQgZGl2aWRlclNpemUsIGJvb2xlYW4gaXNIb3Jpem9udGFsRGl2aXNpb24pIHsKLSAgICAgICAgbUNvbnRleHQgPSBjdHg7Ci0gICAgICAgIG1GbGluZ0FuaW1hdGlvblV0aWxzID0gZmxpbmdBbmltYXRpb25VdGlsczsKLSAgICAgICAgbURpdmlkZXJTaXplID0gZGl2aWRlclNpemU7Ci0gICAgICAgIG1UYXJnZXRzID0gY2FsY3VsYXRlVGFyZ2V0cyhpc0hvcml6b250YWxEaXZpc2lvbik7Ci0gICAgICAgIG1GaXJzdFNwbGl0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KDEpOwotICAgICAgICBtTGFzdFNwbGl0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KG1UYXJnZXRzLnNpemUoKSAtIDIpOwotICAgICAgICBtRGlzbWlzc1N0YXJ0VGFyZ2V0ID0gbVRhcmdldHMuZ2V0KDApOwotICAgICAgICBtRGlzbWlzc0VuZFRhcmdldCA9IG1UYXJnZXRzLmdldChtVGFyZ2V0cy5zaXplKCkgLSAxKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU25hcFRhcmdldCBjYWxjdWxhdGVTbmFwVGFyZ2V0KGludCBwb3NpdGlvbiwgZmxvYXQgdmVsb2NpdHkpIHsKLSAgICAgICAgaWYgKE1hdGguYWJzKHZlbG9jaXR5KSA8IG1GbGluZ0FuaW1hdGlvblV0aWxzLmdldE1pblZlbG9jaXR5UHhQZXJTZWNvbmQoKSkgewotICAgICAgICAgICAgcmV0dXJuIHNuYXAocG9zaXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwb3NpdGlvbiA8IG1GaXJzdFNwbGl0VGFyZ2V0LnBvc2l0aW9uICYmIHZlbG9jaXR5IDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIG1EaXNtaXNzU3RhcnRUYXJnZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBvc2l0aW9uID4gbUxhc3RTcGxpdFRhcmdldC5wb3NpdGlvbiAmJiB2ZWxvY2l0eSA+IDApIHsKLSAgICAgICAgICAgIHJldHVybiBtRGlzbWlzc0VuZFRhcmdldDsKLSAgICAgICAgfQotICAgICAgICBpZiAodmVsb2NpdHkgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpcnN0U3BsaXRUYXJnZXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbUxhc3RTcGxpdFRhcmdldDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgU25hcFRhcmdldCBzbmFwKGludCBwb3NpdGlvbikgewotICAgICAgICBpbnQgbWluSW5kZXggPSAtMTsKLSAgICAgICAgaW50IG1pbkRpc3RhbmNlID0gSW50ZWdlci5NQVhfVkFMVUU7Ci0gICAgICAgIGludCBzaXplID0gbVRhcmdldHMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgaW50IGRpc3RhbmNlID0gTWF0aC5hYnMocG9zaXRpb24gLSBtVGFyZ2V0cy5nZXQoaSkucG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKLSAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGk7Ci0gICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbVRhcmdldHMuZ2V0KG1pbkluZGV4KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFycmF5TGlzdDxTbmFwVGFyZ2V0PiBjYWxjdWxhdGVUYXJnZXRzKGJvb2xlYW4gaXNIb3Jpem9udGFsRGl2aXNpb24pIHsKLSAgICAgICAgQXJyYXlMaXN0PFNuYXBUYXJnZXQ+IHRhcmdldHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgRGlzcGxheU1ldHJpY3MgaW5mbyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpc3BsYXlNZXRyaWNzKCk7Ci0gICAgICAgIGludCBkaXZpZGVyTWF4ID0gaXNIb3Jpem9udGFsRGl2aXNpb24KLSAgICAgICAgICAgICAgICA/IGluZm8uaGVpZ2h0UGl4ZWxzCi0gICAgICAgICAgICAgICAgOiBpbmZvLndpZHRoUGl4ZWxzOwotCi0gICAgICAgIC8vIFRPRE86IEJldHRlciBjYWxjdWxhdGlvbgotICAgICAgICB0YXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgtbURpdmlkZXJTaXplLCBTbmFwVGFyZ2V0LkZMQUdfRElTTUlTU19TVEFSVCkpOwotICAgICAgICB0YXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgoaW50KSAoMC4zOGYgKiBkaXZpZGVyTWF4KSAtIG1EaXZpZGVyU2l6ZSAvIDIsCi0gICAgICAgICAgICAgICAgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKLSAgICAgICAgdGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoZGl2aWRlck1heCAvIDIgLSBtRGl2aWRlclNpemUgLyAyLCBTbmFwVGFyZ2V0LkZMQUdfTk9ORSkpOwotICAgICAgICB0YXJnZXRzLmFkZChuZXcgU25hcFRhcmdldCgoaW50KSAoMC42MmYgKiBkaXZpZGVyTWF4KSAtIG1EaXZpZGVyU2l6ZSAvIDIsCi0gICAgICAgICAgICAgICAgU25hcFRhcmdldC5GTEFHX05PTkUpKTsKLSAgICAgICAgdGFyZ2V0cy5hZGQobmV3IFNuYXBUYXJnZXQoZGl2aWRlck1heCwgU25hcFRhcmdldC5GTEFHX0RJU01JU1NfRU5EKSk7Ci0gICAgICAgIHJldHVybiB0YXJnZXRzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcHJlc2VudHMgYSBzbmFwIHRhcmdldCBmb3IgdGhlIGRpdmlkZXIuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBTbmFwVGFyZ2V0IHsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19OT05FID0gMDsKLQotICAgICAgICAvKiogSWYgdGhlIGRpdmlkZXIgcmVhY2hlcyB0aGlzIHZhbHVlLCB0aGUgbGVmdC90b3AgdGFzayBzaG91bGQgYmUgZGlzbWlzc2VkLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RJU01JU1NfU1RBUlQgPSAxOwotCi0gICAgICAgIC8qKiBJZiB0aGUgZGl2aWRlciByZWFjaGVzIHRoaXMgdmFsdWUsIHRoZSByaWdodC9ib3R0b20gdGFzayBzaG91bGQgYmUgZGlzbWlzc2VkICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfRElTTUlTU19FTkQgPSAyOwotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgcG9zaXRpb247Ci0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZmxhZzsKLQotICAgICAgICBwdWJsaWMgU25hcFRhcmdldChpbnQgcG9zaXRpb24sIGludCBmbGFnKSB7Ci0gICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgICAgICB0aGlzLmZsYWcgPSBmbGFnOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyVmlldy5qYXZhCmluZGV4IDkzMjY0ZmYuLjgyNGQxMGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJWaWV3LmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIGltcG9ydCBhbmRyb2lkLmFuaW1hdGlvbi5WYWx1ZUFuaW1hdG9yOwogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTnVsbGFibGU7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKQEAgLTMwLDExICszMSwxNCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LlBvaW50ZXJJY29uOwogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25Ub3VjaExpc3RlbmVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld1RyZWVPYnNlcnZlci5JbnRlcm5hbEluc2V0c0luZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdUcmVlT2JzZXJ2ZXIuT25Db21wdXRlSW50ZXJuYWxJbnNldHNMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93SW5zZXRzOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CkBAIC00Miw4ICs0NiwxMCBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LkRpdmlkZXJTbmFwQWxnb3JpdGhtOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnBvbGljeS5Eb2NrZWREaXZpZGVyVXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXIuRGl2aWRlclNuYXBBbGdvcml0aG0uU25hcFRhcmdldDsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuRGl2aWRlclNuYXBBbGdvcml0aG0uU25hcFRhcmdldDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuRmxpbmdBbmltYXRpb25VdGlsczsKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24uU1RZTEVfSE9SSVpPTlRBTF9ET1VCTEVfQVJST1c7CkBAIC01NSwxNSArNjEsMjkgQEAKIHB1YmxpYyBjbGFzcyBEaXZpZGVyVmlldyBleHRlbmRzIEZyYW1lTGF5b3V0IGltcGxlbWVudHMgT25Ub3VjaExpc3RlbmVyLAogICAgICAgICBPbkNvbXB1dGVJbnRlcm5hbEluc2V0c0xpc3RlbmVyIHsKIAorICAgIHN0YXRpYyBmaW5hbCBsb25nIFRPVUNIX0FOSU1BVElPTl9EVVJBVElPTiA9IDE1MDsKKyAgICBzdGF0aWMgZmluYWwgbG9uZyBUT1VDSF9SRUxFQVNFX0FOSU1BVElPTl9EVVJBVElPTiA9IDIwMDsKKyAgICBzdGF0aWMgZmluYWwgSW50ZXJwb2xhdG9yIFRPVUNIX1JFU1BPTlNFX0lOVEVSUE9MQVRPUiA9CisgICAgICAgICAgICBuZXcgUGF0aEludGVycG9sYXRvcigwLjNmLCAwZiwgMC4xZiwgMWYpOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEaXZpZGVyVmlldyI7CiAKLSAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1IYW5kbGU7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRBU0tfUE9TSVRJT05fU0FNRSA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGZsb2F0IERJTV9TVEFSVF9GUkFDVElPTiA9IDAuNWY7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgRElNX0RBTVBfRkFDVE9SID0gMS43ZjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFBhdGhJbnRlcnBvbGF0b3IgU0xPV0RPV05fSU5URVJQT0xBVE9SID0KKyAgICAgICAgICAgIG5ldyBQYXRoSW50ZXJwb2xhdG9yKDAuNWYsIDFmLCAwLjVmLCAxZik7CisKKyAgICBwcml2YXRlIERpdmlkZXJIYW5kbGVWaWV3IG1IYW5kbGU7CiAgICAgcHJpdmF0ZSBWaWV3IG1CYWNrZ3JvdW5kOwogICAgIHByaXZhdGUgaW50IG1TdGFydFg7CiAgICAgcHJpdmF0ZSBpbnQgbVN0YXJ0WTsKICAgICBwcml2YXRlIGludCBtU3RhcnRQb3NpdGlvbjsKICAgICBwcml2YXRlIGludCBtRG9ja1NpZGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnRbXSBtVGVtcEludDIgPSBuZXcgaW50WzJdOworICAgIHByaXZhdGUgYm9vbGVhbiBtTW92aW5nOworICAgIHByaXZhdGUgaW50IG1Ub3VjaFNsb3A7CiAKICAgICBwcml2YXRlIGludCBtRGl2aWRlckluc2V0czsKICAgICBwcml2YXRlIGludCBtRGlzcGxheVdpZHRoOwpAQCAtNzIsMTUgKzkyLDIwIEBACiAgICAgcHJpdmF0ZSBpbnQgbURpdmlkZXJTaXplOwogICAgIHByaXZhdGUgaW50IG1Ub3VjaEVsZXZhdGlvbjsKIAotICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1Eb2NrZWRSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbURvY2tlZFRhc2tSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbU90aGVyVGFza1JlY3QgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtT3RoZXJSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbURvY2tlZEluc2V0UmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1PdGhlckluc2V0UmVjdCA9IG5ldyBSZWN0KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1MYXN0UmVzaXplUmVjdCA9IG5ldyBSZWN0KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBXaW5kb3dNYW5hZ2VyUHJveHkgbVdpbmRvd01hbmFnZXJQcm94eSA9IFdpbmRvd01hbmFnZXJQcm94eS5nZXRJbnN0YW5jZSgpOwogICAgIHByaXZhdGUgSW50ZXJwb2xhdG9yIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yOwotICAgIHByaXZhdGUgZmluYWwgSW50ZXJwb2xhdG9yIG1Ub3VjaFJlc3BvbnNlSW50ZXJwb2xhdG9yID0KLSAgICAgICAgICAgIG5ldyBQYXRoSW50ZXJwb2xhdG9yKDAuM2YsIDBmLCAwLjFmLCAxZik7CiAgICAgcHJpdmF0ZSBEaXZpZGVyV2luZG93TWFuYWdlciBtV2luZG93TWFuYWdlcjsKICAgICBwcml2YXRlIFZlbG9jaXR5VHJhY2tlciBtVmVsb2NpdHlUcmFja2VyOwogICAgIHByaXZhdGUgRmxpbmdBbmltYXRpb25VdGlscyBtRmxpbmdBbmltYXRpb25VdGlsczsKKyAgICBwcml2YXRlIERpdmlkZXJTbmFwQWxnb3JpdGhtIG1TbmFwQWxnb3JpdGhtOworICAgIHByaXZhdGUgZmluYWwgUmVjdCBtU3RhYmxlSW5zZXRzID0gbmV3IFJlY3QoKTsKIAogICAgIHB1YmxpYyBEaXZpZGVyVmlldyhDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCk7CkBAIC0xMDIsNyArMTI3LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkZpbmlzaEluZmxhdGUoKSB7CiAgICAgICAgIHN1cGVyLm9uRmluaXNoSW5mbGF0ZSgpOwotICAgICAgICBtSGFuZGxlID0gKEltYWdlQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5kb2NrZWRfZGl2aWRlcl9oYW5kbGUpOworICAgICAgICBtSGFuZGxlID0gKERpdmlkZXJIYW5kbGVWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5kb2NrZWRfZGl2aWRlcl9oYW5kbGUpOwogICAgICAgICBtQmFja2dyb3VuZCA9IGZpbmRWaWV3QnlJZChSLmlkLmRvY2tlZF9kaXZpZGVyX2JhY2tncm91bmQpOwogICAgICAgICBtSGFuZGxlLnNldE9uVG91Y2hMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgbURpdmlkZXJXaW5kb3dXaWR0aCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKQEAgLTExNCwxNSArMTM5LDIzIEBACiAgICAgICAgICAgICAgICAgUi5kaW1lbi5kb2NrZWRfc3RhY2tfZGl2aWRlcl9saWZ0X2VsZXZhdGlvbik7CiAgICAgICAgIG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihnZXRDb250ZXh0KCksCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5SLmludGVycG9sYXRvci5mYXN0X291dF9zbG93X2luKTsKKyAgICAgICAgbVRvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChtQ29udGV4dCkuZ2V0U2NhbGVkVG91Y2hTbG9wKCk7CiAgICAgICAgIG1GbGluZ0FuaW1hdGlvblV0aWxzID0gbmV3IEZsaW5nQW5pbWF0aW9uVXRpbHMoZ2V0Q29udGV4dCgpLCAwLjNmKTsKICAgICAgICAgdXBkYXRlRGlzcGxheUluZm8oKTsKICAgICAgICAgYm9vbGVhbiBsYW5kc2NhcGUgPSBnZXRSZXNvdXJjZXMoKS5nZXRDb25maWd1cmF0aW9uKCkub3JpZW50YXRpb24KICAgICAgICAgICAgICAgICA9PSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX0xBTkRTQ0FQRTsKLSAgICAgICAgbUhhbmRsZS5zZXRQb2ludGVyU2hhcGUoCi0gICAgICAgICAgICAgICAgbGFuZHNjYXBlID8gU1RZTEVfSE9SSVpPTlRBTF9ET1VCTEVfQVJST1cgOiBTVFlMRV9WRVJUSUNBTF9ET1VCTEVfQVJST1cpOworICAgICAgICBtSGFuZGxlLnNldFBvaW50ZXJJY29uKFBvaW50ZXJJY29uLmdldFN5c3RlbUljb24oZ2V0Q29udGV4dCgpLAorICAgICAgICAgICAgICAgIGxhbmRzY2FwZSA/IFNUWUxFX0hPUklaT05UQUxfRE9VQkxFX0FSUk9XIDogU1RZTEVfVkVSVElDQUxfRE9VQkxFX0FSUk9XKSk7CiAgICAgICAgIGdldFZpZXdUcmVlT2JzZXJ2ZXIoKS5hZGRPbkNvbXB1dGVJbnRlcm5hbEluc2V0c0xpc3RlbmVyKHRoaXMpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBXaW5kb3dJbnNldHMgb25BcHBseVdpbmRvd0luc2V0cyhXaW5kb3dJbnNldHMgaW5zZXRzKSB7CisgICAgICAgIG1TdGFibGVJbnNldHMuc2V0KGluc2V0cy5nZXRTdGFibGVJbnNldExlZnQoKSwgaW5zZXRzLmdldFN0YWJsZUluc2V0VG9wKCksCisgICAgICAgICAgICAgICAgaW5zZXRzLmdldFN0YWJsZUluc2V0UmlnaHQoKSwgaW5zZXRzLmdldFN0YWJsZUluc2V0Qm90dG9tKCkpOworICAgICAgICByZXR1cm4gc3VwZXIub25BcHBseVdpbmRvd0luc2V0cyhpbnNldHMpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldFdpbmRvd01hbmFnZXIoRGl2aWRlcldpbmRvd01hbmFnZXIgd2luZG93TWFuYWdlcikgewogICAgICAgICBtV2luZG93TWFuYWdlciA9IHdpbmRvd01hbmFnZXI7CiAgICAgfQpAQCAtMTMxLDggKzE2NCwxMiBAQAogICAgICAgICByZXR1cm4gbVdpbmRvd01hbmFnZXJQcm94eTsKICAgICB9CiAKLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydERyYWdnaW5nKCkgeworICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0RHJhZ2dpbmcoYm9vbGVhbiBhbmltYXRlKSB7CisgICAgICAgIG1IYW5kbGUuc2V0VG91Y2hpbmcodHJ1ZSwgYW5pbWF0ZSk7CiAgICAgICAgIG1Eb2NrU2lkZSA9IG1XaW5kb3dNYW5hZ2VyUHJveHkuZ2V0RG9ja1NpZGUoKTsKKyAgICAgICAgbVNuYXBBbGdvcml0aG0gPSBuZXcgRGl2aWRlclNuYXBBbGdvcml0aG0oZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpLAorICAgICAgICAgICAgICAgIG1GbGluZ0FuaW1hdGlvblV0aWxzLmdldE1pblZlbG9jaXR5UHhQZXJTZWNvbmQoKSwgbURpc3BsYXlXaWR0aCwKKyAgICAgICAgICAgICAgICBtRGlzcGxheUhlaWdodCwgbURpdmlkZXJTaXplLCBpc0hvcml6b250YWxEaXZpc2lvbigpLCBtU3RhYmxlSW5zZXRzKTsKICAgICAgICAgaWYgKG1Eb2NrU2lkZSAhPSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9JTlZBTElEKSB7CiAgICAgICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnNldFJlc2l6aW5nKHRydWUpOwogICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2V0U2xpcHBlcnkoZmFsc2UpOwpAQCAtMTQ0LDExICsxODEsMTYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdG9wRHJhZ2dpbmcoaW50IHBvc2l0aW9uLCBmbG9hdCB2ZWxvY2l0eSkgeworICAgICAgICBtSGFuZGxlLnNldFRvdWNoaW5nKGZhbHNlLCB0cnVlIC8qIGFuaW1hdGUgKi8pOwogICAgICAgICBmbGluZyhwb3NpdGlvbiwgdmVsb2NpdHkpOwogICAgICAgICBtV2luZG93TWFuYWdlci5zZXRTbGlwcGVyeSh0cnVlKTsKICAgICAgICAgcmVsZWFzZUJhY2tncm91bmQoKTsKICAgICB9CiAKKyAgICBwdWJsaWMgRGl2aWRlclNuYXBBbGdvcml0aG0gZ2V0U25hcEFsZ29yaXRobSgpIHsKKyAgICAgICAgcmV0dXJuIG1TbmFwQWxnb3JpdGhtOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2goVmlldyB2LCBNb3Rpb25FdmVudCBldmVudCkgewogICAgICAgICBjb252ZXJ0VG9TY3JlZW5Db29yZGluYXRlcyhldmVudCk7CkBAIC0xNjAsMTkgKzIwMiwzMSBAQAogICAgICAgICAgICAgICAgIG1TdGFydFggPSAoaW50KSBldmVudC5nZXRYKCk7CiAgICAgICAgICAgICAgICAgbVN0YXJ0WSA9IChpbnQpIGV2ZW50LmdldFkoKTsKICAgICAgICAgICAgICAgICBnZXRMb2NhdGlvbk9uU2NyZWVuKG1UZW1wSW50Mik7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBzdGFydERyYWdnaW5nKCk7CisgICAgICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBzdGFydERyYWdnaW5nKHRydWUgLyogYW5pbWF0ZSAqLyk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbERpdmlzaW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0UG9zaXRpb24gPSBtVGVtcEludDJbMV0gKyBtRGl2aWRlckluc2V0czsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtU3RhcnRQb3NpdGlvbiA9IG1UZW1wSW50MlswXSArIG1EaXZpZGVySW5zZXRzOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtTW92aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX01PVkU6CiAgICAgICAgICAgICAgICAgbVZlbG9jaXR5VHJhY2tlci5hZGRNb3ZlbWVudChldmVudCk7CiAgICAgICAgICAgICAgICAgaW50IHggPSAoaW50KSBldmVudC5nZXRYKCk7CiAgICAgICAgICAgICAgICAgaW50IHkgPSAoaW50KSBldmVudC5nZXRZKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1Eb2NrU2lkZSAhPSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9JTlZBTElEKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YWNrKGNhbGN1bGF0ZVBvc2l0aW9uKHgsIHkpKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIGV4Y2VlZGVkVG91Y2hTbG9wID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9yaXpvbnRhbERpdmlzaW9uKCkgJiYgTWF0aC5hYnMoeSAtIG1TdGFydFkpID4gbVRvdWNoU2xvcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWlzSG9yaXpvbnRhbERpdmlzaW9uKCkgJiYgTWF0aC5hYnMoeCAtIG1TdGFydFgpID4gbVRvdWNoU2xvcCk7CisgICAgICAgICAgICAgICAgaWYgKCFtTW92aW5nICYmIGV4Y2VlZGVkVG91Y2hTbG9wKSB7CisgICAgICAgICAgICAgICAgICAgIG1TdGFydFggPSB4OworICAgICAgICAgICAgICAgICAgICBtU3RhcnRZID0geTsKKyAgICAgICAgICAgICAgICAgICAgbU1vdmluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtTW92aW5nICYmIG1Eb2NrU2lkZSAhPSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9JTlZBTElEKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwb3NpdGlvbiA9IGNhbGN1bGF0ZVBvc2l0aW9uKHgsIHkpOworICAgICAgICAgICAgICAgICAgICBTbmFwVGFyZ2V0IHNuYXBUYXJnZXQgPSBtU25hcEFsZ29yaXRobS5jYWxjdWxhdGVTbmFwVGFyZ2V0KHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLyogdmVsb2NpdHkgKi8pOworICAgICAgICAgICAgICAgICAgICByZXNpemVTdGFjayhjYWxjdWxhdGVQb3NpdGlvbih4LCB5KSwgc25hcFRhcmdldC5wb3NpdGlvbiwgc25hcFRhcmdldCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fVVA6CkBAIC0xODYsNiArMjQwLDcgQEAKICAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSBjYWxjdWxhdGVQb3NpdGlvbih4LCB5KTsKICAgICAgICAgICAgICAgICBzdG9wRHJhZ2dpbmcocG9zaXRpb24sIGlzSG9yaXpvbnRhbERpdmlzaW9uKCkgPyBtVmVsb2NpdHlUcmFja2VyLmdldFlWZWxvY2l0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IG1WZWxvY2l0eVRyYWNrZXIuZ2V0WFZlbG9jaXR5KCkpOworICAgICAgICAgICAgICAgIG1Nb3ZpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5NiwxNCArMjUxLDE2IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGZsaW5nKGludCBwb3NpdGlvbiwgZmxvYXQgdmVsb2NpdHkpIHsKLSAgICAgICAgZmluYWwgU25hcFRhcmdldCBzbmFwVGFyZ2V0ID0gbmV3IERpdmlkZXJTbmFwQWxnb3JpdGhtKGdldENvbnRleHQoKSwgbUZsaW5nQW5pbWF0aW9uVXRpbHMsCi0gICAgICAgICAgICAgICAgbURpdmlkZXJTaXplLCBpc0hvcml6b250YWxEaXZpc2lvbigpKS5jYWxjdWxhdGVTbmFwVGFyZ2V0KHBvc2l0aW9uLCB2ZWxvY2l0eSk7CisgICAgICAgIGZpbmFsIFNuYXBUYXJnZXQgc25hcFRhcmdldCA9IG1TbmFwQWxnb3JpdGhtLmNhbGN1bGF0ZVNuYXBUYXJnZXQocG9zaXRpb24sIHZlbG9jaXR5KTsKIAogICAgICAgICBWYWx1ZUFuaW1hdG9yIGFuaW0gPSBWYWx1ZUFuaW1hdG9yLm9mSW50KHBvc2l0aW9uLCBzbmFwVGFyZ2V0LnBvc2l0aW9uKTsKICAgICAgICAgYW5pbS5hZGRVcGRhdGVMaXN0ZW5lcihuZXcgQW5pbWF0b3JVcGRhdGVMaXN0ZW5lcigpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25VcGRhdGUoVmFsdWVBbmltYXRvciBhbmltYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXNpemVTdGFjaygoSW50ZWdlcikgYW5pbWF0aW9uLmdldEFuaW1hdGVkVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgcmVzaXplU3RhY2soKEludGVnZXIpIGFuaW1hdGlvbi5nZXRBbmltYXRlZFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb24uZ2V0QW5pbWF0ZWRGcmFjdGlvbigpID09IDFmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gVEFTS19QT1NJVElPTl9TQU1FCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc25hcFRhcmdldC5wb3NpdGlvbiwgc25hcFRhcmdldCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgICAgICBhbmltLmFkZExpc3RlbmVyKG5ldyBBbmltYXRvckxpc3RlbmVyQWRhcHRlcigpIHsKQEAgLTIzNSwzOCArMjkyLDQzIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtV2luZG93TWFuYWdlclByb3h5Lm1heGltaXplRG9ja2VkU3RhY2soKTsKICAgICAgICAgfQorICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnNldFJlc2l6ZURpbUxheWVyKGZhbHNlLCAtMSwgMGYpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBsaWZ0QmFja2dyb3VuZCgpIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbERpdmlzaW9uKCkpIHsKLSAgICAgICAgICAgIG1CYWNrZ3JvdW5kLmFuaW1hdGUoKS5zY2FsZVkoMS41Zik7CisgICAgICAgICAgICBtQmFja2dyb3VuZC5hbmltYXRlKCkuc2NhbGVZKDEuNGYpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbUJhY2tncm91bmQuYW5pbWF0ZSgpLnNjYWxlWCgxLjVmKTsKKyAgICAgICAgICAgIG1CYWNrZ3JvdW5kLmFuaW1hdGUoKS5zY2FsZVgoMS40Zik7CiAgICAgICAgIH0KICAgICAgICAgbUJhY2tncm91bmQuYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihtVG91Y2hSZXNwb25zZUludGVycG9sYXRvcikKLSAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oMTUwKQotICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvbloobVRvdWNoRWxldmF0aW9uKTsKKyAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKFRPVUNIX1JFU1BPTlNFX0lOVEVSUE9MQVRPUikKKyAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oVE9VQ0hfQU5JTUFUSU9OX0RVUkFUSU9OKQorICAgICAgICAgICAgICAgIC50cmFuc2xhdGlvbloobVRvdWNoRWxldmF0aW9uKQorICAgICAgICAgICAgICAgIC5zdGFydCgpOwogCiAgICAgICAgIC8vIExpZnQgaGFuZGxlIGFzIHdlbGwgc28gaXQgZG9lc24ndCBnZXQgYmVoaW5kIHRoZSBiYWNrZ3JvdW5kLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0CiAgICAgICAgIC8vIGNhc3Qgc2hhZG93LgogICAgICAgICBtSGFuZGxlLmFuaW1hdGUoKQotICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobVRvdWNoUmVzcG9uc2VJbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDE1MCkKLSAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25aKG1Ub3VjaEVsZXZhdGlvbik7CisgICAgICAgICAgICAgICAgLnNldEludGVycG9sYXRvcihUT1VDSF9SRVNQT05TRV9JTlRFUlBPTEFUT1IpCisgICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKFRPVUNIX0FOSU1BVElPTl9EVVJBVElPTikKKyAgICAgICAgICAgICAgICAudHJhbnNsYXRpb25aKG1Ub3VjaEVsZXZhdGlvbikKKyAgICAgICAgICAgICAgICAuc3RhcnQoKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVsZWFzZUJhY2tncm91bmQoKSB7CiAgICAgICAgIG1CYWNrZ3JvdW5kLmFuaW1hdGUoKQogICAgICAgICAgICAgICAgIC5zZXRJbnRlcnBvbGF0b3IobUZhc3RPdXRTbG93SW5JbnRlcnBvbGF0b3IpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKDIwMCkKKyAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oVE9VQ0hfUkVMRUFTRV9BTklNQVRJT05fRFVSQVRJT04pCiAgICAgICAgICAgICAgICAgLnRyYW5zbGF0aW9uWigwKQogICAgICAgICAgICAgICAgIC5zY2FsZVgoMWYpCi0gICAgICAgICAgICAgICAgLnNjYWxlWSgxZik7CisgICAgICAgICAgICAgICAgLnNjYWxlWSgxZikKKyAgICAgICAgICAgICAgICAuc3RhcnQoKTsKICAgICAgICAgbUhhbmRsZS5hbmltYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0SW50ZXJwb2xhdG9yKG1GYXN0T3V0U2xvd0luSW50ZXJwb2xhdG9yKQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbigyMDApCi0gICAgICAgICAgICAgICAgLnRyYW5zbGF0aW9uWigwKTsKKyAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oVE9VQ0hfUkVMRUFTRV9BTklNQVRJT05fRFVSQVRJT04pCisgICAgICAgICAgICAgICAgLnRyYW5zbGF0aW9uWigwKQorICAgICAgICAgICAgICAgIC5zdGFydCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMzAxLDQ3ICszNjMsMTg5IEBACiAgICAgICAgIHJldHVybiBtU3RhcnRQb3NpdGlvbiArIHRvdWNoWSAtIG1TdGFydFk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24oaW50IHBvc2l0aW9uLCBpbnQgZG9ja1NpZGUsIFJlY3Qgb3V0UmVjdCkgewotICAgICAgICBvdXRSZWN0LnNldCgwLCAwLCBtRGlzcGxheVdpZHRoLCBtRGlzcGxheUhlaWdodCk7CisgICAgcHJpdmF0ZSBpbnQgaW52ZXJ0RG9ja1NpZGUoaW50IGRvY2tTaWRlKSB7CiAgICAgICAgIHN3aXRjaCAoZG9ja1NpZGUpIHsKICAgICAgICAgICAgIGNhc2UgV2luZG93TWFuYWdlci5ET0NLRURfTEVGVDoKLSAgICAgICAgICAgICAgICBvdXRSZWN0LnJpZ2h0ID0gcG9zaXRpb247Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdpbmRvd01hbmFnZXIuRE9DS0VEX1JJR0hUOwogICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1A6Ci0gICAgICAgICAgICAgICAgb3V0UmVjdC5ib3R0b20gPSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93TWFuYWdlci5ET0NLRURfQk9UVE9NOwogICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9SSUdIVDoKLSAgICAgICAgICAgICAgICBvdXRSZWN0LmxlZnQgPSBwb3NpdGlvbiArIG1EaXZpZGVyV2luZG93V2lkdGggLSAyICogbURpdmlkZXJJbnNldHM7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ7CiAgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTToKLSAgICAgICAgICAgICAgICBvdXRSZWN0LnRvcCA9IHBvc2l0aW9uICsgbURpdmlkZXJXaW5kb3dXaWR0aCAtIDIgKiBtRGl2aWRlckluc2V0czsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0UmVjdC5sZWZ0ID4gb3V0UmVjdC5yaWdodCkgewotICAgICAgICAgICAgb3V0UmVjdC5sZWZ0ID0gb3V0UmVjdC5yaWdodDsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0UmVjdC50b3AgPiBvdXRSZWN0LmJvdHRvbSkgewotICAgICAgICAgICAgb3V0UmVjdC50b3AgPSBvdXRSZWN0LmJvdHRvbTsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0UmVjdC5yaWdodCA8IG91dFJlY3QubGVmdCkgewotICAgICAgICAgICAgb3V0UmVjdC5yaWdodCA9IG91dFJlY3QubGVmdDsKLSAgICAgICAgfQotICAgICAgICBpZiAob3V0UmVjdC5ib3R0b20gPCBvdXRSZWN0LnRvcCkgewotICAgICAgICAgICAgb3V0UmVjdC5ib3R0b20gPSBvdXRSZWN0LnRvcDsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93TWFuYWdlci5ET0NLRURfVE9QOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gV2luZG93TWFuYWdlci5ET0NLRURfSU5WQUxJRDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVN0YWNrKGludCBwb3NpdGlvbikgewotICAgICAgICBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihwb3NpdGlvbiwgbURvY2tTaWRlLCBtVG1wUmVjdCk7Ci0gICAgICAgIGlmIChtVG1wUmVjdC5lcXVhbHMobUxhc3RSZXNpemVSZWN0KSkgeworICAgIHByaXZhdGUgdm9pZCBhbGlnblRvcExlZnQoUmVjdCBjb250YWluaW5nUmVjdCwgUmVjdCByZWN0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHJlY3Quc2V0KGNvbnRhaW5pbmdSZWN0LmxlZnQsIGNvbnRhaW5pbmdSZWN0LnRvcCwKKyAgICAgICAgICAgICAgICBjb250YWluaW5nUmVjdC5sZWZ0ICsgd2lkdGgsIGNvbnRhaW5pbmdSZWN0LnRvcCArIGhlaWdodCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFsaWduQm90dG9tUmlnaHQoUmVjdCBjb250YWluaW5nUmVjdCwgUmVjdCByZWN0KSB7CisgICAgICAgIGludCB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICAgICAgaW50IGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgICAgIHJlY3Quc2V0KGNvbnRhaW5pbmdSZWN0LnJpZ2h0IC0gd2lkdGgsIGNvbnRhaW5pbmdSZWN0LmJvdHRvbSAtIGhlaWdodCwKKyAgICAgICAgICAgICAgICBjb250YWluaW5nUmVjdC5yaWdodCwgY29udGFpbmluZ1JlY3QuYm90dG9tKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihpbnQgcG9zaXRpb24sIGludCBkb2NrU2lkZSwgUmVjdCBvdXRSZWN0KSB7CisgICAgICAgIERvY2tlZERpdmlkZXJVdGlscy5jYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbihwb3NpdGlvbiwgZG9ja1NpZGUsIG91dFJlY3QsIG1EaXNwbGF5V2lkdGgsCisgICAgICAgICAgICAgICAgbURpc3BsYXlIZWlnaHQsIG1EaXZpZGVyU2l6ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcmVzaXplU3RhY2soaW50IHBvc2l0aW9uLCBpbnQgdGFza1Bvc2l0aW9uLCBTbmFwVGFyZ2V0IHRhc2tTbmFwVGFyZ2V0KSB7CisgICAgICAgIGNhbGN1bGF0ZUJvdW5kc0ZvclBvc2l0aW9uKHBvc2l0aW9uLCBtRG9ja1NpZGUsIG1Eb2NrZWRSZWN0KTsKKworICAgICAgICBpZiAobURvY2tlZFJlY3QuZXF1YWxzKG1MYXN0UmVzaXplUmVjdCkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE1ha2Ugc3VyZSBzaGFkb3dzIGFyZSB1cGRhdGVkCiAgICAgICAgIG1CYWNrZ3JvdW5kLmludmFsaWRhdGUoKTsKIAotICAgICAgICBtTGFzdFJlc2l6ZVJlY3Quc2V0KG1UbXBSZWN0KTsKLSAgICAgICAgbVdpbmRvd01hbmFnZXJQcm94eS5yZXNpemVEb2NrZWRTdGFjayhtVG1wUmVjdCk7CisgICAgICAgIG1MYXN0UmVzaXplUmVjdC5zZXQobURvY2tlZFJlY3QpOworICAgICAgICBpZiAodGFza1Bvc2l0aW9uICE9IFRBU0tfUE9TSVRJT05fU0FNRSkgeworICAgICAgICAgICAgY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24ocG9zaXRpb24sIGludmVydERvY2tTaWRlKG1Eb2NrU2lkZSksIG1PdGhlclJlY3QpOworICAgICAgICAgICAgaW50IGRvY2tTaWRlSW52ZXJ0ZWQgPSBpbnZlcnREb2NrU2lkZShtRG9ja1NpZGUpOworICAgICAgICAgICAgaW50IHRhc2tQb3NpdGlvbkRvY2tlZCA9CisgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0RGlzbWlzc2luZ1Rhc2tQb3NpdGlvbih0YXNrUG9zaXRpb24sIG1Eb2NrU2lkZSwgdGFza1NuYXBUYXJnZXQpOworICAgICAgICAgICAgaW50IHRhc2tQb3NpdGlvbk90aGVyID0KKyAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3REaXNtaXNzaW5nVGFza1Bvc2l0aW9uKHRhc2tQb3NpdGlvbiwgZG9ja1NpZGVJbnZlcnRlZCwgdGFza1NuYXBUYXJnZXQpOworICAgICAgICAgICAgY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24odGFza1Bvc2l0aW9uRG9ja2VkLCBtRG9ja1NpZGUsIG1Eb2NrZWRUYXNrUmVjdCk7CisgICAgICAgICAgICBjYWxjdWxhdGVCb3VuZHNGb3JQb3NpdGlvbih0YXNrUG9zaXRpb25PdGhlciwgZG9ja1NpZGVJbnZlcnRlZCwgbU90aGVyVGFza1JlY3QpOworICAgICAgICAgICAgYWxpZ25Ub3BMZWZ0KG1Eb2NrZWRSZWN0LCBtRG9ja2VkVGFza1JlY3QpOworICAgICAgICAgICAgYWxpZ25Ub3BMZWZ0KG1PdGhlclJlY3QsIG1PdGhlclRhc2tSZWN0KTsKKyAgICAgICAgICAgIG1Eb2NrZWRJbnNldFJlY3Quc2V0KG1Eb2NrZWRUYXNrUmVjdCk7CisgICAgICAgICAgICBtT3RoZXJJbnNldFJlY3Quc2V0KG1PdGhlclRhc2tSZWN0KTsKKyAgICAgICAgICAgIGlmIChkb2NrU2lkZVRvcExlZnQobURvY2tTaWRlKSkgeworICAgICAgICAgICAgICAgIGFsaWduVG9wTGVmdChtRG9ja2VkUmVjdCwgbURvY2tlZEluc2V0UmVjdCk7CisgICAgICAgICAgICAgICAgYWxpZ25Cb3R0b21SaWdodChtT3RoZXJSZWN0LCBtT3RoZXJJbnNldFJlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbGlnbkJvdHRvbVJpZ2h0KG1Eb2NrZWRSZWN0LCBtRG9ja2VkSW5zZXRSZWN0KTsKKyAgICAgICAgICAgICAgICBhbGlnblRvcExlZnQobU90aGVyUmVjdCwgbU90aGVySW5zZXRSZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFwcGx5RGlzbWlzc2luZ1BhcmFsbGF4KG1Eb2NrZWRUYXNrUmVjdCwgbURvY2tTaWRlLCB0YXNrU25hcFRhcmdldCwgcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgIHRhc2tQb3NpdGlvbkRvY2tlZCk7CisgICAgICAgICAgICBhcHBseURpc21pc3NpbmdQYXJhbGxheChtT3RoZXJUYXNrUmVjdCwgZG9ja1NpZGVJbnZlcnRlZCwgdGFza1NuYXBUYXJnZXQsIHBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICB0YXNrUG9zaXRpb25PdGhlcik7CisgICAgICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnJlc2l6ZURvY2tlZFN0YWNrKG1Eb2NrZWRSZWN0LCBtRG9ja2VkVGFza1JlY3QsIG1Eb2NrZWRJbnNldFJlY3QsCisgICAgICAgICAgICAgICAgICAgIG1PdGhlclRhc2tSZWN0LCBtT3RoZXJJbnNldFJlY3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXJQcm94eS5yZXNpemVEb2NrZWRTdGFjayhtRG9ja2VkUmVjdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSBtU25hcEFsZ29yaXRobS5jYWxjdWxhdGVEaXNtaXNzaW5nRnJhY3Rpb24ocG9zaXRpb24pOworICAgICAgICBmcmFjdGlvbiA9IE1hdGgubWF4KDAsCisgICAgICAgICAgICAgICAgTWF0aC5taW4oKGZyYWN0aW9uIC8gRElNX1NUQVJUX0ZSQUNUSU9OIC0gMWYpIC8gRElNX0RBTVBfRkFDVE9SLCAxZikpOworICAgICAgICBtV2luZG93TWFuYWdlclByb3h5LnNldFJlc2l6ZURpbUxheWVyKGZyYWN0aW9uICE9IDBmLAorICAgICAgICAgICAgICAgIGdldFN0YWNrSWRGb3JEaXNtaXNzVGFyZ2V0KG1TbmFwQWxnb3JpdGhtLmdldENsb3Nlc3REaXNtaXNzVGFyZ2V0KHBvc2l0aW9uKSksCisgICAgICAgICAgICAgICAgZnJhY3Rpb24pOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdoZW4gdGhlIHNuYXAgdGFyZ2V0IGlzIGRpc21pc3Npbmcgb25lIHNpZGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBkaXNtaXNzaW5nIHNpZGUgZG9lc24ndCBnZXQKKyAgICAgKiAwIHNpemUuCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgcmVzdHJpY3REaXNtaXNzaW5nVGFza1Bvc2l0aW9uKGludCB0YXNrUG9zaXRpb24sIGludCBkb2NrU2lkZSwKKyAgICAgICAgICAgIFNuYXBUYXJnZXQgc25hcFRhcmdldCkgeworICAgICAgICBpZiAoc25hcFRhcmdldC5mbGFnID09IFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX1NUQVJUICYmIGRvY2tTaWRlVG9wTGVmdChkb2NrU2lkZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBtU25hcEFsZ29yaXRobS5nZXRGaXJzdFNwbGl0VGFyZ2V0KCkucG9zaXRpb247CisgICAgICAgIH0gZWxzZSBpZiAoc25hcFRhcmdldC5mbGFnID09IFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX0VORAorICAgICAgICAgICAgICAgICYmIGRvY2tTaWRlQm90dG9tUmlnaHQoZG9ja1NpZGUpKSB7CisgICAgICAgICAgICByZXR1cm4gbVNuYXBBbGdvcml0aG0uZ2V0TGFzdFNwbGl0VGFyZ2V0KCkucG9zaXRpb247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGFza1Bvc2l0aW9uOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwbGllcyBhIHBhcmFsbGF4IHRvIHRoZSB0YXNrIHdoZW4gZGlzbWlzc2luZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgYXBwbHlEaXNtaXNzaW5nUGFyYWxsYXgoUmVjdCB0YXNrUmVjdCwgaW50IGRvY2tTaWRlLCBTbmFwVGFyZ2V0IHNuYXBUYXJnZXQsCisgICAgICAgICAgICBpbnQgcG9zaXRpb24sIGludCB0YXNrUG9zaXRpb24pIHsKKyAgICAgICAgZmxvYXQgZnJhY3Rpb24gPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLAorICAgICAgICAgICAgICAgIG1TbmFwQWxnb3JpdGhtLmNhbGN1bGF0ZURpc21pc3NpbmdGcmFjdGlvbihwb3NpdGlvbikpKTsKKyAgICAgICAgU25hcFRhcmdldCBkaXNtaXNzVGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgU25hcFRhcmdldCBzcGxpdFRhcmdldCA9IG51bGw7CisgICAgICAgIGlmICgoc25hcFRhcmdldC5mbGFnID09IFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX1NUQVJUCisgICAgICAgICAgICAgICAgfHwgc25hcFRhcmdldCA9PSBtU25hcEFsZ29yaXRobS5nZXRGaXJzdFNwbGl0VGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgJiYgZG9ja1NpZGVUb3BMZWZ0KGRvY2tTaWRlKSkgeworICAgICAgICAgICAgZGlzbWlzc1RhcmdldCA9IG1TbmFwQWxnb3JpdGhtLmdldERpc21pc3NTdGFydFRhcmdldCgpOworICAgICAgICAgICAgc3BsaXRUYXJnZXQgPSBtU25hcEFsZ29yaXRobS5nZXRGaXJzdFNwbGl0VGFyZ2V0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoKHNuYXBUYXJnZXQuZmxhZyA9PSBTbmFwVGFyZ2V0LkZMQUdfRElTTUlTU19FTkQKKyAgICAgICAgICAgICAgICB8fCBzbmFwVGFyZ2V0ID09IG1TbmFwQWxnb3JpdGhtLmdldExhc3RTcGxpdFRhcmdldCgpKQorICAgICAgICAgICAgICAgICYmIGRvY2tTaWRlQm90dG9tUmlnaHQoZG9ja1NpZGUpKSB7CisgICAgICAgICAgICBkaXNtaXNzVGFyZ2V0ID0gbVNuYXBBbGdvcml0aG0uZ2V0RGlzbWlzc0VuZFRhcmdldCgpOworICAgICAgICAgICAgc3BsaXRUYXJnZXQgPSBtU25hcEFsZ29yaXRobS5nZXRMYXN0U3BsaXRUYXJnZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGlzbWlzc1RhcmdldCAhPSBudWxsICYmIGZyYWN0aW9uID4gMGYKKyAgICAgICAgICAgICAgICAmJiBpc0Rpc21pc3Npbmcoc3BsaXRUYXJnZXQsIHBvc2l0aW9uLCBkb2NrU2lkZSkpIHsKKyAgICAgICAgICAgIGZyYWN0aW9uID0gY2FsY3VsYXRlUGFyYWxsYXhEaXNtaXNzaW5nRnJhY3Rpb24oZnJhY3Rpb24pOworICAgICAgICAgICAgaW50IG9mZnNldFBvc2l0aW9uID0gKGludCkgKHRhc2tQb3NpdGlvbiArCisgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uICogKGRpc21pc3NUYXJnZXQucG9zaXRpb24gLSBzcGxpdFRhcmdldC5wb3NpdGlvbikpOworICAgICAgICAgICAgaW50IHdpZHRoID0gdGFza1JlY3Qud2lkdGgoKTsKKyAgICAgICAgICAgIGludCBoZWlnaHQgPSB0YXNrUmVjdC5oZWlnaHQoKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZG9ja1NpZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ6CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LmxlZnQgPSBvZmZzZXRQb3NpdGlvbiAtIHdpZHRoOworICAgICAgICAgICAgICAgICAgICB0YXNrUmVjdC5yaWdodCA9IG9mZnNldFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdpbmRvd01hbmFnZXIuRE9DS0VEX1JJR0hUOgorICAgICAgICAgICAgICAgICAgICB0YXNrUmVjdC5sZWZ0ID0gb2Zmc2V0UG9zaXRpb24gKyBtRGl2aWRlclNpemU7CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LnJpZ2h0ID0gb2Zmc2V0UG9zaXRpb24gKyB3aWR0aCArIG1EaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1A6CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LnRvcCA9IG9mZnNldFBvc2l0aW9uIC0gaGVpZ2h0OworICAgICAgICAgICAgICAgICAgICB0YXNrUmVjdC5ib3R0b20gPSBvZmZzZXRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9CT1RUT006CisgICAgICAgICAgICAgICAgICAgIHRhc2tSZWN0LnRvcCA9IG9mZnNldFBvc2l0aW9uICsgbURpdmlkZXJTaXplOworICAgICAgICAgICAgICAgICAgICB0YXNrUmVjdC5ib3R0b20gPSBvZmZzZXRQb3NpdGlvbiArIGhlaWdodCArIG1EaXZpZGVyU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIGZvciBhIHNwZWNpZmllZCB7QGNvZGUgZnJhY3Rpb259LCB0aGlzIHJldHVybnMgYW4gYWRqdXN0ZWQgdmFsdWUgdGhhdCBzaW11bGF0ZXMgYQorICAgICAqICAgICAgICAgc2xvd2luZyBkb3duIHBhcmFsbGF4IGVmZmVjdAorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVBhcmFsbGF4RGlzbWlzc2luZ0ZyYWN0aW9uKGZsb2F0IGZyYWN0aW9uKSB7CisgICAgICAgIHJldHVybiBTTE9XRE9XTl9JTlRFUlBPTEFUT1IuZ2V0SW50ZXJwb2xhdGlvbihmcmFjdGlvbikgLyAzLjVmOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEaXNtaXNzaW5nKFNuYXBUYXJnZXQgc25hcFRhcmdldCwgaW50IHBvc2l0aW9uLCBpbnQgZG9ja1NpZGUpIHsKKyAgICAgICAgaWYgKGRvY2tTaWRlID09IFdpbmRvd01hbmFnZXIuRE9DS0VEX1RPUCB8fCBkb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9MRUZUKSB7CisgICAgICAgICAgICByZXR1cm4gcG9zaXRpb24gPCBzbmFwVGFyZ2V0LnBvc2l0aW9uOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uID4gc25hcFRhcmdldC5wb3NpdGlvbjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgaW50IGdldFN0YWNrSWRGb3JEaXNtaXNzVGFyZ2V0KFNuYXBUYXJnZXQgZGlzbWlzc1RhcmdldCkgeworICAgICAgICBpZiAoZGlzbWlzc1RhcmdldC5mbGFnID09IFNuYXBUYXJnZXQuRkxBR19ESVNNSVNTX1NUQVJUICYmCisgICAgICAgICAgICAgICAgKG1Eb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9MRUZUIHx8IG1Eb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1ApKSB7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tJZC5GVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbmQgb25seSBpZiB7QGNvZGUgZG9ja1NpZGV9IGlzIHRvcCBvciBsZWZ0CisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkb2NrU2lkZVRvcExlZnQoaW50IGRvY2tTaWRlKSB7CisgICAgICAgIHJldHVybiBkb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9UT1AgfHwgZG9ja1NpZGUgPT0gV2luZG93TWFuYWdlci5ET0NLRURfTEVGVDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYge0Bjb2RlIGRvY2tTaWRlfSBpcyBib3R0b20gb3IgcmlnaHQKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRvY2tTaWRlQm90dG9tUmlnaHQoaW50IGRvY2tTaWRlKSB7CisgICAgICAgIHJldHVybiBkb2NrU2lkZSA9PSBXaW5kb3dNYW5hZ2VyLkRPQ0tFRF9CT1RUT00gfHwgZG9ja1NpZGUgPT0gV2luZG93TWFuYWdlci5ET0NLRURfUklHSFQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJXaW5kb3dNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL0RpdmlkZXJXaW5kb3dNYW5hZ2VyLmphdmEKaW5kZXggMjI1MTg3NC4uMTYxZjg3MyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9EaXZpZGVyV2luZG93TWFuYWdlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvRGl2aWRlcldpbmRvd01hbmFnZXIuamF2YQpAQCAtNTAsNiArNTAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfCBGTEFHX1dBVENIX09VVFNJREVfVE9VQ0ggfCBGTEFHX1NQTElUX1RPVUNIIHwgRkxBR19TTElQUEVSWSwKICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdC5UUkFOU0xVQ0VOVCk7CiAgICAgICAgIG1McC5zZXRUaXRsZShXSU5ET1dfVElUTEUpOworICAgICAgICB2aWV3LnNldFN5c3RlbVVpVmlzaWJpbGl0eShWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9GVUxMU0NSRUVOCisgICAgICAgICAgICAgICAgfCBWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9ISURFX05BVklHQVRJT04KKyAgICAgICAgICAgICAgICB8IFZpZXcuU1lTVEVNX1VJX0ZMQUdfTEFZT1VUX1NUQUJMRSk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmFkZFZpZXcodmlldywgbUxwKTsKICAgICAgICAgbVZpZXcgPSB2aWV3OwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvV2luZG93TWFuYWdlclByb3h5LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhY2tkaXZpZGVyL1dpbmRvd01hbmFnZXJQcm94eS5qYXZhCmluZGV4IDU4ZGU1ZDUuLjI3OTFkZmMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGFja2RpdmlkZXIvV2luZG93TWFuYWdlclByb3h5LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YWNrZGl2aWRlci9XaW5kb3dNYW5hZ2VyUHJveHkuamF2YQpAQCAtNDAsMTggKzQwLDQxIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgV2luZG93TWFuYWdlclByb3h5IHNJbnN0YW5jZSA9IG5ldyBXaW5kb3dNYW5hZ2VyUHJveHkoKTsKIAogICAgIEBHdWFyZGVkQnkoIm1SZXNpemVSZWN0IikKLSAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVJlc2l6ZVJlY3QgPSBuZXcgUmVjdCgpOwotICAgIHByaXZhdGUgZmluYWwgUmVjdCBtVG1wUmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1Eb2NrZWRSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBEb2NrZWRUYXNrUmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UZW1wRG9ja2VkSW5zZXRSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBPdGhlclRhc2tSZWN0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBPdGhlckluc2V0UmVjdCA9IG5ldyBSZWN0KCk7CisKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3QxID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3QyID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3QzID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3Q0ID0gbmV3IFJlY3QoKTsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFJlY3Q1ID0gbmV3IFJlY3QoKTsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtRGltTGF5ZXJWaXNpYmxlOworICAgIHByaXZhdGUgaW50IG1EaW1MYXllclRhcmdldFN0YWNrOworICAgIHByaXZhdGUgZmxvYXQgbURpbUxheWVyQWxwaGE7CisKICAgICBwcml2YXRlIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBtRXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKIAogICAgIHByaXZhdGUgZmluYWwgUnVubmFibGUgbVJlc2l6ZVJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtUmVzaXplUmVjdCkgewotICAgICAgICAgICAgICAgIG1UbXBSZWN0LnNldChtUmVzaXplUmVjdCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Eb2NrZWRSZWN0KSB7CisgICAgICAgICAgICAgICAgbVRtcFJlY3QxLnNldChtRG9ja2VkUmVjdCk7CisgICAgICAgICAgICAgICAgbVRtcFJlY3QyLnNldChtVGVtcERvY2tlZFRhc2tSZWN0KTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdDMuc2V0KG1UZW1wRG9ja2VkSW5zZXRSZWN0KTsKKyAgICAgICAgICAgICAgICBtVG1wUmVjdDQuc2V0KG1UZW1wT3RoZXJUYXNrUmVjdCk7CisgICAgICAgICAgICAgICAgbVRtcFJlY3Q1LnNldChtVGVtcE90aGVySW5zZXRSZWN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5yZXNpemVTdGFjayhET0NLRURfU1RBQ0tfSUQsIG1UbXBSZWN0LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpCisgICAgICAgICAgICAgICAgICAgICAgICAucmVzaXplRG9ja2VkU3RhY2sobVRtcFJlY3QxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wUmVjdDIuaXNFbXB0eSgpID8gbnVsbCA6IG1UbXBSZWN0MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRtcFJlY3QzLmlzRW1wdHkoKSA/IG51bGwgOiBtVG1wUmVjdDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UbXBSZWN0NC5pc0VtcHR5KCkgPyBudWxsIDogbVRtcFJlY3Q0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVG1wUmVjdDUuaXNFbXB0eSgpID8gbnVsbCA6IG1UbXBSZWN0NSk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkZhaWxlZCB0byByZXNpemUgc3RhY2s6ICIgKyBlKTsKICAgICAgICAgICAgIH0KQEAgLTYyLDcgKzg1LDcgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5yZW1vdmVTdGFjayhET0NLRURfU1RBQ0tfSUQpOworICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkubW92ZVRhc2tzVG9GdWxsc2NyZWVuU3RhY2soRE9DS0VEX1NUQUNLX0lEKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiRmFpbGVkIHRvIHJlbW92ZSBzdGFjazogIiArIGUpOwogICAgICAgICAgICAgfQpAQCAtODAsNiArMTAzLDE4IEBACiAgICAgICAgIH0KICAgICB9OwogCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtRGltTGF5ZXJSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgV2luZG93TWFuYWdlckdsb2JhbC5nZXRXaW5kb3dNYW5hZ2VyU2VydmljZSgpLnNldFJlc2l6ZURpbUxheWVyKG1EaW1MYXllclZpc2libGUsCisgICAgICAgICAgICAgICAgICAgICAgICBtRGltTGF5ZXJUYXJnZXRTdGFjaywgbURpbUxheWVyQWxwaGEpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJGYWlsZWQgdG8gcmVzaXplIHN0YWNrOiAiICsgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCiAgICAgcHJpdmF0ZSBXaW5kb3dNYW5hZ2VyUHJveHkoKSB7CiAgICAgfQogCkBAIC04Nyw5ICsxMjIsMzAgQEAKICAgICAgICAgcmV0dXJuIHNJbnN0YW5jZTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZXNpemVEb2NrZWRTdGFjayhSZWN0IHJlY3QpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtUmVzaXplUmVjdCkgewotICAgICAgICAgICAgbVJlc2l6ZVJlY3Quc2V0KHJlY3QpOworICAgIHB1YmxpYyB2b2lkIHJlc2l6ZURvY2tlZFN0YWNrKFJlY3QgZG9ja2VkLCBSZWN0IHRlbXBEb2NrZWRUYXNrUmVjdCwgUmVjdCB0ZW1wRG9ja2VkSW5zZXRSZWN0LAorICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrUmVjdCwgUmVjdCB0ZW1wT3RoZXJJbnNldFJlY3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtRG9ja2VkUmVjdCkgeworICAgICAgICAgICAgbURvY2tlZFJlY3Quc2V0KGRvY2tlZCk7CisgICAgICAgICAgICBpZiAodGVtcERvY2tlZFRhc2tSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZFRhc2tSZWN0LnNldCh0ZW1wRG9ja2VkVGFza1JlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZFRhc2tSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGVtcERvY2tlZEluc2V0UmVjdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVRlbXBEb2NrZWRJbnNldFJlY3Quc2V0KHRlbXBEb2NrZWRJbnNldFJlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcERvY2tlZEluc2V0UmVjdC5zZXRFbXB0eSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRlbXBPdGhlclRhc2tSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVyVGFza1JlY3Quc2V0KHRlbXBPdGhlclRhc2tSZWN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbVRlbXBPdGhlclRhc2tSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGVtcE90aGVySW5zZXRSZWN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVySW5zZXRSZWN0LnNldCh0ZW1wT3RoZXJJbnNldFJlY3QpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtVGVtcE90aGVySW5zZXRSZWN0LnNldEVtcHR5KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbUV4ZWN1dG9yLmV4ZWN1dGUobVJlc2l6ZVJ1bm5hYmxlKTsKICAgICB9CkBAIC0xMjMsNCArMTc5LDExIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIERPQ0tFRF9JTlZBTElEOwogICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFJlc2l6ZURpbUxheWVyKGJvb2xlYW4gdmlzaWJsZSwgaW50IHRhcmdldFN0YWNrSWQsIGZsb2F0IGFscGhhKSB7CisgICAgICAgIG1EaW1MYXllclZpc2libGUgPSB2aXNpYmxlOworICAgICAgICBtRGltTGF5ZXJUYXJnZXRTdGFjayA9IHRhcmdldFN0YWNrSWQ7CisgICAgICAgIG1EaW1MYXllckFscGhhID0gYWxwaGE7CisgICAgICAgIG1FeGVjdXRvci5leGVjdXRlKG1EaW1MYXllclJ1bm5hYmxlKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0Jhc2VTdGF0dXNCYXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQmFzZVN0YXR1c0Jhci5qYXZhCmluZGV4IDg3OTYyNGUuLjZlZmI3NzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQmFzZVN0YXR1c0Jhci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQmFzZVN0YXR1c0Jhci5qYXZhCkBAIC0zNSw3ICszNSw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKQEAgLTc4LDE3ICs3NywxMyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsOwogaW1wb3J0IGFuZHJvaWQudmlldy5hY2Nlc3NpYmlsaXR5LkFjY2Vzc2liaWxpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRGF0ZVRpbWVWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5SZW1vdGVWaWV3czsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmxvZ2dpbmcuTWV0cmljc0xvZ2dlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuSVN0YXR1c0JhclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLlN0YXR1c0Jhckljb247Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLlN0YXR1c0Jhckljb25MaXN0OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuTm90aWZpY2F0aW9uQ29sb3JVdGlsOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5Mb2NrUGF0dGVyblV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmtleWd1YXJkLktleWd1YXJkVXBkYXRlTW9uaXRvcjsKQEAgLTEwNywxMSArMTAyLDEzIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5QcmV2aWV3SW5mbGF0ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5SZW1vdGVJbnB1dFZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnN0YWNrLk5vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5zdGFjay5TdGFja1N0YXRlQW5pbWF0b3I7CiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX01BWDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQua2V5Z3VhcmQuS2V5Z3VhcmRIb3N0Vmlldy5PbkRpc21pc3NBY3Rpb247CiAKIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCYXNlU3RhdHVzQmFyIGV4dGVuZHMgU3lzdGVtVUkgaW1wbGVtZW50cwpAQCAtMTIyLDEzICsxMTksMTAgQEAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIE1VTFRJVVNFUl9ERUJVRyA9IGZhbHNlOwogCi0gICAgLy8gU1RPUFNISVAgZGlzYWJsZSBvbmNlIHdlIHJlc29sdmUgYi8xODEwMjE5OQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gTk9USUZJQ0FUSU9OX0NMSUNLX0RFQlVHID0gdHJ1ZTsKLQogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVfUkVNT1RFX0lOUFVUID0KICAgICAgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiZGVidWcuZW5hYmxlX3JlbW90ZV9pbnB1dCIsIHRydWUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBFTkFCTEVfQ0hJTERfTk9USUZJQ0FUSU9OUyA9IEJ1aWxkLklTX0RFQlVHR0FCTEUKLSAgICAgICAgICAgICAgICAgICAgJiYgU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJkZWJ1Zy5jaGlsZF9ub3RpZnMiLCBmYWxzZSk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9DSElMRF9OT1RJRklDQVRJT05TCisgICAgICAgICAgICA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiZGVidWcuY2hpbGRfbm90aWZzIiwgdHJ1ZSk7CiAKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNU0dfU0hPV19SRUNFTlRfQVBQUyA9IDEwMTk7CiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0hJREVfUkVDRU5UX0FQUFMgPSAxMDIwOwpAQCAtMTM3LDE1ICsxMzEsMTQgQEAKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNU0dfQ0FOQ0VMX1BSRUxPQURfUkVDRU5UX0FQUFMgPSAxMDIzOwogICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1TR19TSE9XX05FWFRfQUZGSUxJQVRFRF9UQVNLID0gMTAyNDsKICAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNU0dfU0hPV19QUkVWX0FGRklMSUFURURfVEFTSyA9IDEwMjU7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NIT1dfS0VZQk9BUkRfU0hPUlRDVVRTX01FTlUgPSAxMDI2OworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgaW50IE1TR19UT0dHTEVfS0VZQk9BUkRfU0hPUlRDVVRTX01FTlUgPSAxMDI2OwogCiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9IRUFEU19VUCA9IHRydWU7Ci0gICAgLy8gc2NvcmVzIGFib3ZlIHRoaXMgdGhyZXNob2xkIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gaGVhZHMgdXAgbW9kZS4KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBJTlRFUlJVUFRJT05fVEhSRVNIT0xEID0gMTA7CiAgICAgcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VUVElOR19IRUFEU19VUF9USUNLRVIgPSAidGlja2VyX2dldHNfaGVhZHNfdXAiOwogCi0gICAgLy8gU2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBQaG9uZVdpbmRvd01hbmFnZXIKKyAgICAvLyBTaG91bGQgbWF0Y2ggdGhlIHZhbHVlcyBpbiBQaG9uZVdpbmRvd01hbmFnZXIKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fRElBTE9HX1JFQVNPTl9SRUNFTlRfQVBQUyA9ICJyZWNlbnRhcHBzIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fRElBTE9HX1JFQVNPTl9IT01FX0tFWSA9ICJob21la2V5IjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCQU5ORVJfQUNUSU9OX0NBTkNFTCA9CiAgICAgICAgICAgICAiY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLmJhbm5lcl9hY3Rpb25fY2FuY2VsIjsKQEAgLTE2Miw2ICsxNTUsOCBAQAogCiAgICAgcHJvdGVjdGVkIE5vdGlmaWNhdGlvbkdyb3VwTWFuYWdlciBtR3JvdXBNYW5hZ2VyID0gbmV3IE5vdGlmaWNhdGlvbkdyb3VwTWFuYWdlcigpOwogCisgICAgcHJvdGVjdGVkIFJlbW90ZUlucHV0Q29udHJvbGxlciBtUmVtb3RlSW5wdXRDb250cm9sbGVyOworCiAgICAgLy8gZm9yIGhlYWRzIHVwIG5vdGlmaWNhdGlvbnMKICAgICBwcm90ZWN0ZWQgSGVhZHNVcE1hbmFnZXIgbUhlYWRzVXBNYW5hZ2VyOwogCkBAIC0xOTMsMTQgKzE4OCwxMCBAQAogICAgIHByb3RlY3RlZCBJRHJlYW1NYW5hZ2VyIG1EcmVhbU1hbmFnZXI7CiAgICAgUG93ZXJNYW5hZ2VyIG1Qb3dlck1hbmFnZXI7CiAgICAgcHJvdGVjdGVkIFN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIgbVN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXI7Ci0gICAgcHJvdGVjdGVkIGludCBtUm93TWluSGVpZ2h0TGVnYWN5OwotICAgIHByb3RlY3RlZCBpbnQgbVJvd01pbkhlaWdodDsKLSAgICBwcm90ZWN0ZWQgaW50IG1Sb3dNYXhIZWlnaHQ7CiAKICAgICAvLyBwdWJsaWMgbW9kZSwgcHJpdmF0ZSBub3RpZmljYXRpb25zLCBldGMKICAgICBwcml2YXRlIGJvb2xlYW4gbUxvY2tzY3JlZW5QdWJsaWNNb2RlID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VCb29sZWFuQXJyYXkgbVVzZXJzQWxsb3dpbmdQcml2YXRlTm90aWZpY2F0aW9ucyA9IG5ldyBTcGFyc2VCb29sZWFuQXJyYXkoKTsKLSAgICBwcml2YXRlIE5vdGlmaWNhdGlvbkNvbG9yVXRpbCBtTm90aWZpY2F0aW9uQ29sb3JVdGlsOwogCiAgICAgcHJpdmF0ZSBVc2VyTWFuYWdlciBtVXNlck1hbmFnZXI7CiAKQEAgLTIzMCw2ICsyMjEsOCBAQAogCiAgICAgcHJpdmF0ZSBUaW1lSW50ZXJwb2xhdG9yIG1MaW5lYXJPdXRTbG93SW4sIG1GYXN0T3V0TGluZWFySW47CiAKKyAgICBwcml2YXRlIEtleWJvYXJkU2hvcnRjdXRzIG1LZXlib2FyZFNob3J0Y3V0czsKKwogICAgIC8qKgogICAgICAqIFRoZSB7QGxpbmsgU3RhdHVzQmFyU3RhdGV9IG9mIHRoZSBzdGF0dXMgYmFyLgogICAgICAqLwpAQCAtMzUwLDkgKzM0Myw2IEBACiAgICAgICAgICAgICAgICAgVmlld0dyb3VwIGFjdGlvbkdyb3VwID0gKFZpZXdHcm91cCkgcGFyZW50OwogICAgICAgICAgICAgICAgIGluZGV4ID0gYWN0aW9uR3JvdXAuaW5kZXhPZkNoaWxkKHZpZXcpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKE5PVElGSUNBVElPTl9DTElDS19ERUJVRykgewotICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIkNsaWNrZWQgb24gYnV0dG9uICIgKyBpbmRleCArICIgZm9yICIgKyBrZXkpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBtQmFyU2VydmljZS5vbk5vdGlmaWNhdGlvbkFjdGlvbkNsaWNrKGtleSwgaW5kZXgpOwogICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKQEAgLTYxMCw4ICs2MDAsNiBAQAogICAgICAgICBtRGV2aWNlUG9saWN5TWFuYWdlciA9IChEZXZpY2VQb2xpY3lNYW5hZ2VyKW1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCiAgICAgICAgICAgICAgICAgQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOwogCi0gICAgICAgIG1Ob3RpZmljYXRpb25Db2xvclV0aWwgPSBOb3RpZmljYXRpb25Db2xvclV0aWwuZ2V0SW5zdGFuY2UobUNvbnRleHQpOwotCiAgICAgICAgIG1Ob3RpZmljYXRpb25EYXRhID0gbmV3IE5vdGlmaWNhdGlvbkRhdGEodGhpcyk7CiAKICAgICAgICAgbUFjY2Vzc2liaWxpdHlNYW5hZ2VyID0gKEFjY2Vzc2liaWxpdHlNYW5hZ2VyKQpAQCAtNjU2LDEzICs2NDQsMTQgQEAKICAgICAgICAgICAgICAgICBhbmRyb2lkLlIuaW50ZXJwb2xhdG9yLmZhc3Rfb3V0X2xpbmVhcl9pbik7CiAKICAgICAgICAgLy8gQ29ubmVjdCBpbiB0byB0aGUgc3RhdHVzIGJhciBtYW5hZ2VyIHNlcnZpY2UKLSAgICAgICAgU3RhdHVzQmFySWNvbkxpc3QgaWNvbkxpc3QgPSBuZXcgU3RhdHVzQmFySWNvbkxpc3QoKTsKLSAgICAgICAgbUNvbW1hbmRRdWV1ZSA9IG5ldyBDb21tYW5kUXVldWUodGhpcywgaWNvbkxpc3QpOworICAgICAgICBtQ29tbWFuZFF1ZXVlID0gbmV3IENvbW1hbmRRdWV1ZSh0aGlzKTsKIAogICAgICAgICBpbnRbXSBzd2l0Y2hlcyA9IG5ldyBpbnRbOF07CiAgICAgICAgIEFycmF5TGlzdDxJQmluZGVyPiBiaW5kZXJzID0gbmV3IEFycmF5TGlzdDxJQmluZGVyPigpOworICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBpY29uU2xvdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgQXJyYXlMaXN0PFN0YXR1c0Jhckljb24+IGljb25zID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBtQmFyU2VydmljZS5yZWdpc3RlclN0YXR1c0JhcihtQ29tbWFuZFF1ZXVlLCBpY29uTGlzdCwgc3dpdGNoZXMsIGJpbmRlcnMpOworICAgICAgICAgICAgbUJhclNlcnZpY2UucmVnaXN0ZXJTdGF0dXNCYXIobUNvbW1hbmRRdWV1ZSwgaWNvblNsb3RzLCBpY29ucywgc3dpdGNoZXMsIGJpbmRlcnMpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBzeXN0ZW0gcHJvY2VzcyBpc24ndCB0aGVyZSB3ZSdyZSBkb29tZWQgYW55d2F5LgogICAgICAgICB9CkBAIC02NzcsMTQgKzY2NiwxMCBAQAogICAgICAgICBzZXRJbWVXaW5kb3dTdGF0dXMoYmluZGVycy5nZXQoMCksIHN3aXRjaGVzWzNdLCBzd2l0Y2hlc1s0XSwgc3dpdGNoZXNbNV0gIT0gMCk7CiAKICAgICAgICAgLy8gU2V0IHVwIHRoZSBpbml0aWFsIGljb24gc3RhdGUKLSAgICAgICAgaW50IE4gPSBpY29uTGlzdC5zaXplKCk7CisgICAgICAgIGludCBOID0gaWNvblNsb3RzLnNpemUoKTsKICAgICAgICAgaW50IHZpZXdJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIFN0YXR1c0Jhckljb24gaWNvbiA9IGljb25MaXN0LmdldEljb24oaSk7Ci0gICAgICAgICAgICBpZiAoaWNvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgYWRkSWNvbihpY29uTGlzdC5nZXRTbG90KGkpLCBpLCB2aWV3SW5kZXgsIGljb24pOwotICAgICAgICAgICAgICAgIHZpZXdJbmRleCsrOwotICAgICAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIHNldEljb24oaWNvblNsb3RzLmdldChpKSwgaWNvbnMuZ2V0KGkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCBub3RpZmljYXRpb24gc3RhdGUuCkBAIC03MDAsNyArNjg1LDcgQEAKICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsIFN0cmluZy5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICJpbml0OiBpY29ucz0lZCBkaXNhYmxlZD0weCUwOHggbGlnaHRzPTB4JTA4eCBtZW51PTB4JTA4eCBpbWVCdXR0b249MHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICBpY29uTGlzdC5zaXplKCksCisgICAgICAgICAgICAgICAgICAgaWNvbnMuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzWzBdLAogICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzWzFdLAogICAgICAgICAgICAgICAgICAgIHN3aXRjaGVzWzJdLApAQCAtOTAyLDE0ICs4ODcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubWVkaWFfYWN0aW9ucykgIT0gbnVsbDsKICAgICB9CiAKLSAgICAvLyBUaGUgZ2VhciBidXR0b24gaW4gdGhlIGd1dHMgdGhhdCBsaW5rcyB0byB0aGUgYXBwJ3Mgb3duIG5vdGlmaWNhdGlvbiBzZXR0aW5ncwotICAgIHByaXZhdGUgdm9pZCBzdGFydEFwcE93bk5vdGlmaWNhdGlvblNldHRpbmdzQWN0aXZpdHkoSW50ZW50IGludGVudCwKLSAgICAgICAgICAgIGZpbmFsIGludCBub3RpZmljYXRpb25JZCwgZmluYWwgU3RyaW5nIG5vdGlmaWNhdGlvblRhZywgZmluYWwgaW50IGFwcFVpZCkgewotICAgICAgICBpbnRlbnQucHV0RXh0cmEoIm5vdGlmaWNhdGlvbl9pZCIsIG5vdGlmaWNhdGlvbklkKTsKLSAgICAgICAgaW50ZW50LnB1dEV4dHJhKCJub3RpZmljYXRpb25fdGFnIiwgbm90aWZpY2F0aW9uVGFnKTsKLSAgICAgICAgc3RhcnROb3RpZmljYXRpb25HdXRzSW50ZW50KGludGVudCwgYXBwVWlkKTsKLSAgICB9Ci0KICAgICAvLyBUaGUgKGkpIGJ1dHRvbiBpbiB0aGUgZ3V0cyB0aGF0IGxpbmtzIHRvIHRoZSBzeXN0ZW0gbm90aWZpY2F0aW9uIHNldHRpbmdzIGZvciB0aGF0IGFwcAogICAgIHByaXZhdGUgdm9pZCBzdGFydEFwcE5vdGlmaWNhdGlvblNldHRpbmdzQWN0aXZpdHkoU3RyaW5nIHBhY2thZ2VOYW1lLCBmaW5hbCBpbnQgYXBwVWlkKSB7CiAgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFNldHRpbmdzLkFDVElPTl9BUFBfTk9USUZJQ0FUSU9OX1NFVFRJTkdTKTsKQEAgLTk1MCw3ICs5MjcsNyBAQAogICAgICAgICBmaW5hbCBTdGF0dXNCYXJOb3RpZmljYXRpb24gc2JuID0gcm93LmdldFN0YXR1c0Jhck5vdGlmaWNhdGlvbigpOwogICAgICAgICBQYWNrYWdlTWFuYWdlciBwbVVzZXIgPSBnZXRQYWNrYWdlTWFuYWdlckZvclVzZXIobUNvbnRleHQsIHNibi5nZXRVc2VyKCkuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgcm93LnNldFRhZyhzYm4uZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgIGZpbmFsIFZpZXcgZ3V0cyA9IHJvdy5nZXRHdXRzKCk7CisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbkd1dHMgZ3V0cyA9IHJvdy5nZXRHdXRzKCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBwa2cgPSBzYm4uZ2V0UGFja2FnZU5hbWUoKTsKICAgICAgICAgU3RyaW5nIGFwcG5hbWUgPSBwa2c7CiAgICAgICAgIERyYXdhYmxlIHBrZ2ljb24gPSBudWxsOwpAQCAtOTY4LDEyICs5NDUsMTEgQEAKICAgICAgICAgICAgIC8vIGFwcCBpcyBnb25lLCBqdXN0IHNob3cgcGFja2FnZSBuYW1lIGFuZCBnZW5lcmljIGljb24KICAgICAgICAgICAgIHBrZ2ljb24gPSBwbVVzZXIuZ2V0RGVmYXVsdEFjdGl2aXR5SWNvbigpOwogICAgICAgICB9CisKICAgICAgICAgKChJbWFnZVZpZXcpIHJvdy5maW5kVmlld0J5SWQoYW5kcm9pZC5SLmlkLmljb24pKS5zZXRJbWFnZURyYXdhYmxlKHBrZ2ljb24pOwotICAgICAgICAoKERhdGVUaW1lVmlldykgcm93LmZpbmRWaWV3QnlJZChSLmlkLnRpbWVzdGFtcCkpLnNldFRpbWUoc2JuLmdldFBvc3RUaW1lKCkpOwogICAgICAgICAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQucGtnbmFtZSkpLnNldFRleHQoYXBwbmFtZSk7Ci0gICAgICAgIGZpbmFsIFZpZXcgc2V0dGluZ3NCdXR0b24gPSBndXRzLmZpbmRWaWV3QnlJZChSLmlkLm5vdGlmaWNhdGlvbl9pbnNwZWN0X2l0ZW0pOwotICAgICAgICBmaW5hbCBWaWV3IGFwcFNldHRpbmdzQnV0dG9uCi0gICAgICAgICAgICAgICAgPSBndXRzLmZpbmRWaWV3QnlJZChSLmlkLm5vdGlmaWNhdGlvbl9pbnNwZWN0X2FwcF9wcm92aWRlZF9zZXR0aW5ncyk7CisKKyAgICAgICAgZmluYWwgVmlldyBzZXR0aW5nc0J1dHRvbiA9IGd1dHMuZmluZFZpZXdCeUlkKFIuaWQubW9yZV9zZXR0aW5ncyk7CiAgICAgICAgIGlmIChhcHBVaWQgPj0gMCkgewogICAgICAgICAgICAgZmluYWwgaW50IGFwcFVpZEYgPSBhcHBVaWQ7CiAgICAgICAgICAgICBzZXR0aW5nc0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewpAQCAtOTgyLDQ2ICs5NTgsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgc3RhcnRBcHBOb3RpZmljYXRpb25TZXR0aW5nc0FjdGl2aXR5KHBrZywgYXBwVWlkRik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIEludGVudCBhcHBTZXR0aW5nc1F1ZXJ5SW50ZW50Ci0gICAgICAgICAgICAgICAgICAgID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX01BSU4pCi0gICAgICAgICAgICAgICAgICAgIC5hZGRDYXRlZ29yeShOb3RpZmljYXRpb24uSU5URU5UX0NBVEVHT1JZX05PVElGSUNBVElPTl9QUkVGRVJFTkNFUykKLSAgICAgICAgICAgICAgICAgICAgLnNldFBhY2thZ2UocGtnKTsKLSAgICAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IGluZm9zID0gcG1Vc2VyLnF1ZXJ5SW50ZW50QWN0aXZpdGllcyhhcHBTZXR0aW5nc1F1ZXJ5SW50ZW50LCAwKTsKLSAgICAgICAgICAgIGlmIChpbmZvcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIGFwcFNldHRpbmdzQnV0dG9uLnNldENvbnRlbnREZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcuc3RhdHVzX2Jhcl9ub3RpZmljYXRpb25fYXBwX3NldHRpbmdzX3RpdGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICApKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBJbnRlbnQgYXBwU2V0dGluZ3NMYXVuY2hJbnRlbnQgPSBuZXcgSW50ZW50KGFwcFNldHRpbmdzUXVlcnlJbnRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q2xhc3NOYW1lKHBrZywgaW5mb3MuZ2V0KDApLmFjdGl2aXR5SW5mby5uYW1lKTsKLSAgICAgICAgICAgICAgICBhcHBTZXR0aW5nc0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIE1ldHJpY3NMb2dnZXIuQUNUSU9OX0FQUF9OT1RFX1NFVFRJTkdTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QXBwT3duTm90aWZpY2F0aW9uU2V0dGluZ3NBY3Rpdml0eShhcHBTZXR0aW5nc0xhdW5jaEludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2JuLmdldElkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNibi5nZXRUYWcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwVWlkRik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXBwU2V0dGluZ3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2V0dGluZ3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgYXBwU2V0dGluZ3NCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwogICAgICAgICB9CiAKKyAgICAgICAgcm93LmZpbmRWaWV3QnlJZChSLmlkLmRvbmUpLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2KSB7CisgICAgICAgICAgICAgICAgZ3V0cy5zYXZlSW1wb3J0YW5jZShzYm4pOworICAgICAgICAgICAgICAgIGRpc21pc3NQb3B1cHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgZ3V0cy5iaW5kSW1wb3J0YW5jZShzYm4sIHJvdywgbU5vdGlmaWNhdGlvbkRhdGEuZ2V0SW1wb3J0YW5jZShzYm4uZ2V0S2V5KCkpKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgU3dpcGVIZWxwZXIuTG9uZ1ByZXNzTGlzdGVuZXIgZ2V0Tm90aWZpY2F0aW9uTG9uZ0NsaWNrZXIoKSB7CiAgICAgICAgIHJldHVybiBuZXcgU3dpcGVIZWxwZXIuTG9uZ1ByZXNzTGlzdGVuZXIoKSB7CiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ1ByZXNzKFZpZXcgdiwgaW50IHgsIGludCB5KSB7Ci0gICAgICAgICAgICAgICAgZGlzbWlzc1BvcHVwcygpOwotCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkxvbmdQcmVzcyhWaWV3IHYsIGZpbmFsIGludCB4LCBmaW5hbCBpbnQgeSkgewogICAgICAgICAgICAgICAgIGlmICghKHYgaW5zdGFuY2VvZiBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93KSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTA0Miw0MCArOTk3LDU3IEBACiAKICAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IHNob3dpbmc/CiAgICAgICAgICAgICAgICAgaWYgKGd1dHMuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSkgewotICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJUcnlpbmcgdG8gc2hvdyBub3RpZmljYXRpb24gZ3V0cywgYnV0IGFscmVhZHkgdmlzaWJsZSIpOworICAgICAgICAgICAgICAgICAgICBkaXNtaXNzUG9wdXBzKHgsIHkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgTWV0cmljc0xvZ2dlci5hY3Rpb24obUNvbnRleHQsIE1ldHJpY3NMb2dnZXIuQUNUSU9OX05PVEVfQ09OVFJPTFMpOwotICAgICAgICAgICAgICAgIGd1dHMuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOwotICAgICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgoZ3V0cy5nZXRXaWR0aCgpIC0geCwgeCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgZG91YmxlIHZlcnQgPSBNYXRoLm1heChndXRzLmdldEFjdHVhbEhlaWdodCgpIC0geSwgeSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgciA9IChmbG9hdCkgTWF0aC5oeXBvdChob3J6LCB2ZXJ0KTsKLSAgICAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhCi0gICAgICAgICAgICAgICAgICAgICAgICA9IFZpZXdBbmltYXRpb25VdGlscy5jcmVhdGVDaXJjdWxhclJldmVhbChndXRzLCB4LCB5LCAwLCByKTsKLSAgICAgICAgICAgICAgICBhLnNldER1cmF0aW9uKDQwMCk7Ci0gICAgICAgICAgICAgICAgYS5zZXRJbnRlcnBvbGF0b3IobUxpbmVhck91dFNsb3dJbik7Ci0gICAgICAgICAgICAgICAgYS5zdGFydCgpOwogCi0gICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkd1dHNFeHBvc2VkID0gZ3V0czsKLQorICAgICAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGl0J3MgbGF5b3V0ZWQgYnV0IG5vdCB2aXNpYmxlIHVudGlsIGFjdHVhbGx5IGxhaWQgb3V0CisgICAgICAgICAgICAgICAgZ3V0cy5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAvLyBQb3N0IHRvIGVuc3VyZSB0aGUgdGhlIGd1dHMgYXJlIHByb3Blcmx5IGxheWVkIG91dC4KKyAgICAgICAgICAgICAgICBndXRzLnBvc3QobmV3IFJ1bm5hYmxlKCkgeworICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNtaXNzUG9wdXBzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBndXRzLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgoZ3V0cy5nZXRXaWR0aCgpIC0geCwgeCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBkb3VibGUgdmVydCA9IE1hdGgubWF4KGd1dHMuZ2V0SGVpZ2h0KCkgLSB5LCB5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGZsb2F0IHIgPSAoZmxvYXQpIE1hdGguaHlwb3QoaG9yeiwgdmVydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gVmlld0FuaW1hdGlvblV0aWxzLmNyZWF0ZUNpcmN1bGFyUmV2ZWFsKGd1dHMsIHgsIHksIDAsIHIpOworICAgICAgICAgICAgICAgICAgICAgICAgYS5zZXREdXJhdGlvbihTdGFja1N0YXRlQW5pbWF0b3IuQU5JTUFUSU9OX0RVUkFUSU9OX1NUQU5EQVJEKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0SW50ZXJwb2xhdG9yKG1MaW5lYXJPdXRTbG93SW4pOworICAgICAgICAgICAgICAgICAgICAgICAgYS5zdGFydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3V0cy5zZXRFeHBvc2VkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbVN0YWNrU2Nyb2xsZXIub25IZWlnaHRDaGFuZ2VkKG51bGwsIHRydWUgLyogbmVlZHNBbmltYXRpb24gKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkd1dHNFeHBvc2VkID0gZ3V0czsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRpc21pc3NQb3B1cHMoKSB7CisgICAgICAgIGRpc21pc3NQb3B1cHMoLTEsIC0xKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGlzbWlzc1BvcHVwcyhpbnQgeCwgaW50IHkpIHsKICAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25HdXRzRXhwb3NlZCAhPSBudWxsKSB7CiAgICAgICAgICAgICBmaW5hbCBOb3RpZmljYXRpb25HdXRzIHYgPSBtTm90aWZpY2F0aW9uR3V0c0V4cG9zZWQ7CiAgICAgICAgICAgICBtTm90aWZpY2F0aW9uR3V0c0V4cG9zZWQgPSBudWxsOwogCiAgICAgICAgICAgICBpZiAodi5nZXRXaW5kb3dUb2tlbigpID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgZmluYWwgaW50IHggPSAodi5nZXRMZWZ0KCkgKyB2LmdldFJpZ2h0KCkpIC8gMjsKLSAgICAgICAgICAgIGZpbmFsIGludCB5ID0gKHYuZ2V0VG9wKCkgKyB2LmdldEFjdHVhbEhlaWdodCgpIC8gMik7CisgICAgICAgICAgICBpZiAoeCA9PSAtMSB8fCB5ID09IC0xKSB7CisgICAgICAgICAgICAgICAgeCA9ICh2LmdldExlZnQoKSArIHYuZ2V0UmlnaHQoKSkgLyAyOworICAgICAgICAgICAgICAgIHkgPSAodi5nZXRUb3AoKSArIHYuZ2V0SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGRvdWJsZSBob3J6ID0gTWF0aC5tYXgodi5nZXRXaWR0aCgpIC0geCwgeCk7CisgICAgICAgICAgICBmaW5hbCBkb3VibGUgdmVydCA9IE1hdGgubWF4KHYuZ2V0SGVpZ2h0KCkgLSB5LCB5KTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHIgPSAoZmxvYXQpIE1hdGguaHlwb3QoaG9yeiwgdmVydCk7CiAgICAgICAgICAgICBmaW5hbCBBbmltYXRvciBhID0gVmlld0FuaW1hdGlvblV0aWxzLmNyZWF0ZUNpcmN1bGFyUmV2ZWFsKHYsCi0gICAgICAgICAgICAgICAgICAgIHgsIHksIHgsIDApOwotICAgICAgICAgICAgYS5zZXREdXJhdGlvbigyMDApOworICAgICAgICAgICAgICAgICAgICB4LCB5LCByLCAwKTsKKyAgICAgICAgICAgIGEuc2V0RHVyYXRpb24oU3RhY2tTdGF0ZUFuaW1hdG9yLkFOSU1BVElPTl9EVVJBVElPTl9TVEFOREFSRCk7CiAgICAgICAgICAgICBhLnNldEludGVycG9sYXRvcihtRmFzdE91dExpbmVhckluKTsKICAgICAgICAgICAgIGEuYWRkTGlzdGVuZXIobmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtMTA4NSw2ICsxMDU3LDggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGEuc3RhcnQoKTsKKyAgICAgICAgICAgIHYuc2V0RXhwb3NlZChmYWxzZSk7CisgICAgICAgICAgICBtU3RhY2tTY3JvbGxlci5vbkhlaWdodENoYW5nZWQobnVsbCwgdHJ1ZSAvKiBuZWVkc0FuaW1hdGlvbiAqLyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExMjMsOCArMTA5Nyw4IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2hvd0tleWJvYXJkU2hvcnRjdXRzTWVudSgpIHsKLSAgICAgICAgaW50IG1zZyA9IE1TR19TSE9XX0tFWUJPQVJEX1NIT1JUQ1VUU19NRU5VOworICAgIHB1YmxpYyB2b2lkIHRvZ2dsZUtleWJvYXJkU2hvcnRjdXRzTWVudSgpIHsKKyAgICAgICAgaW50IG1zZyA9IE1TR19UT0dHTEVfS0VZQk9BUkRfU0hPUlRDVVRTX01FTlU7CiAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKG1zZyk7CiAgICAgICAgIG1IYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UobXNnKTsKICAgICB9CkBAIC0xMTQ3LDcgKzExMjEsNyBAQAogICAgICAgICAgcmV0dXJuIG5ldyBIKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgc2VuZENsb3NlU3lzdGVtV2luZG93cyhDb250ZXh0IGNvbnRleHQsIFN0cmluZyByZWFzb24pIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZW5kQ2xvc2VTeXN0ZW1XaW5kb3dzKFN0cmluZyByZWFzb24pIHsKICAgICAgICAgaWYgKEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5pc1N5c3RlbVJlYWR5KCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5jbG9zZVN5c3RlbURpYWxvZ3MocmVhc29uKTsKQEAgLTExODIsNyArMTE1Niw3IEBACiAKICAgICBwcm90ZWN0ZWQgdm9pZCBzaG93UmVjZW50cyhib29sZWFuIHRyaWdnZXJlZEZyb21BbHRUYWIpIHsKICAgICAgICAgaWYgKG1SZWNlbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNlbmRDbG9zZVN5c3RlbVdpbmRvd3MobUNvbnRleHQsIFNZU1RFTV9ESUFMT0dfUkVBU09OX1JFQ0VOVF9BUFBTKTsKKyAgICAgICAgICAgIHNlbmRDbG9zZVN5c3RlbVdpbmRvd3MoU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgbVJlY2VudHMuc2hvd1JlY2VudHModHJpZ2dlcmVkRnJvbUFsdFRhYiwgZ2V0U3RhdHVzQmFyVmlldygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTExOTUsNyArMTE2OSw2IEBACiAKICAgICBwcm90ZWN0ZWQgdm9pZCB0b2dnbGVSZWNlbnRzKCkgewogICAgICAgICBpZiAobVJlY2VudHMgIT0gbnVsbCkgewotICAgICAgICAgICAgc2VuZENsb3NlU3lzdGVtV2luZG93cyhtQ29udGV4dCwgU1lTVEVNX0RJQUxPR19SRUFTT05fUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgbVJlY2VudHMudG9nZ2xlUmVjZW50cyhtRGlzcGxheSwgbUxheW91dERpcmVjdGlvbiwgZ2V0U3RhdHVzQmFyVmlldygpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEyMDYsOCArMTE3OSw4IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzaG93S2V5Ym9hcmRTaG9ydGN1dHMoKSB7Ci0gICAgICAgIFRvYXN0Lm1ha2VUZXh0KG1Db250ZXh0LCAiU2hvdyBrZXlib2FyZCBzaG9ydGN1dHMgc2NyZWVuIiwgVG9hc3QuTEVOR1RIX0xPTkcpLnNob3coKTsKKyAgICBwcm90ZWN0ZWQgdm9pZCB0b2dnbGVLZXlib2FyZFNob3J0Y3V0cygpIHsKKyAgICAgICAgZ2V0S2V5Ym9hcmRTaG9ydGN1dHMoKS50b2dnbGVLZXlib2FyZFNob3J0Y3V0cyhtQ29udGV4dCk7CiAgICAgfQogCiAgICAgcHJvdGVjdGVkIHZvaWQgY2FuY2VsUHJlbG9hZGluZ1JlY2VudHMoKSB7CkBAIC0xMjkyLDE0ICsxMjY1LDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2FsbGVkIHdoZW4gdGhlIHBhbmVsIHdhcyBsYXlvdXRlZCBleHBhbmRlZCBmb3IgdGhlIGZpcnN0IHRpbWUgYWZ0ZXIgYmVpbmcgY29sbGFwc2VkLgorICAgICAqIENhbGxlZCB3aGVuIHRoZSBzaXplIG9mIHRoZSBub3RpZmljYXRpb24gcGFuZWwgY2hhbmdlcwogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxFeHBhbmRlZEFuZExheW91dGVkKCkgeworICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxIZWlnaHRDaGFuZ2VkKCkgewogICAgICAgICBpZiAobVN0YXRlID09IFN0YXR1c0JhclN0YXRlLktFWUdVQVJEKSB7CiAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3LCB3ZQogICAgICAgICAgICAgLy8gbmVlZCB0byB1cGRhdGUgdGhlbS4KICAgICAgICAgICAgIHVwZGF0ZVJvd1N0YXRlcygpOwotICAgICAgICAgICAgbVN0YWNrU2Nyb2xsZXIub25IZWlnaHRDaGFuZ2VkKG51bGwsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTMzMSw4ICsxMzAzLDggQEAKICAgICAgICAgICAgICBjYXNlIE1TR19TSE9XX1BSRVZfQUZGSUxJQVRFRF9UQVNLOgogICAgICAgICAgICAgICAgICAgc2hvd1JlY2VudHNQcmV2aW91c0FmZmlsaWF0ZWRUYXNrKCk7CiAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICBjYXNlIE1TR19TSE9XX0tFWUJPQVJEX1NIT1JUQ1VUU19NRU5VOgotICAgICAgICAgICAgICAgICAgc2hvd0tleWJvYXJkU2hvcnRjdXRzKCk7CisgICAgICAgICAgICAgY2FzZSBNU0dfVE9HR0xFX0tFWUJPQVJEX1NIT1JUQ1VUU19NRU5VOgorICAgICAgICAgICAgICAgICAgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHMoKTsKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMzg3LDYgKzEzNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIGZhbHNlKTsKICAgICAgICAgICAgIHJvdy5zZXRFeHBhbnNpb25Mb2dnZXIodGhpcywgZW50cnkubm90aWZpY2F0aW9uLmdldEtleSgpKTsKICAgICAgICAgICAgIHJvdy5zZXRHcm91cE1hbmFnZXIobUdyb3VwTWFuYWdlcik7CisgICAgICAgICAgICByb3cuc2V0UmVtb3RlSW5wdXRDb250cm9sbGVyKG1SZW1vdGVJbnB1dENvbnRyb2xsZXIpOwogICAgICAgICAgICAgcm93LnNldE9uRXhwYW5kQ2xpY2tMaXN0ZW5lcih0aGlzKTsKICAgICAgICAgfQogCkBAIC0xNDEyLDYgKzEzODUsNyBAQAogICAgICAgICBWaWV3IGNvbnRlbnRWaWV3TG9jYWwgPSBudWxsOwogICAgICAgICBWaWV3IGJpZ0NvbnRlbnRWaWV3TG9jYWwgPSBudWxsOwogICAgICAgICBWaWV3IGhlYWRzVXBDb250ZW50Vmlld0xvY2FsID0gbnVsbDsKKyAgICAgICAgVmlldyBwdWJsaWNWaWV3TG9jYWwgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgY29udGVudFZpZXdMb2NhbCA9IGNvbnRlbnRWaWV3LmFwcGx5KAogICAgICAgICAgICAgICAgICAgICBzYm4uZ2V0UGFja2FnZUNvbnRleHQobUNvbnRleHQpLApAQCAtMTQyOSw2ICsxNDAzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgbU9uQ2xpY2tIYW5kbGVyKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdWJsaWNDb250ZW50VmlldyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcHVibGljVmlld0xvY2FsID0gcHVibGljQ29udGVudFZpZXcuYXBwbHkoCisgICAgICAgICAgICAgICAgICAgICAgICBzYm4uZ2V0UGFja2FnZUNvbnRleHQobUNvbnRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudENvbnRhaW5lclB1YmxpYywgbU9uQ2xpY2tIYW5kbGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaWRlbnQgPSBzYm4uZ2V0UGFja2FnZU5hbWUoKSArICIvMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhzYm4uZ2V0SWQoKSk7CkBAIC0xNDQ4LDI1ICsxNDI3LDkgQEAKICAgICAgICAgICAgIGhlYWRzVXBDb250ZW50Vmlld0xvY2FsLnNldElzUm9vdE5hbWVzcGFjZSh0cnVlKTsKICAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXIuc2V0SGVhZHNVcENoaWxkKGhlYWRzVXBDb250ZW50Vmlld0xvY2FsKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyB0aGUgcHVibGljIHZlcnNpb24KLSAgICAgICAgVmlldyBwdWJsaWNWaWV3TG9jYWwgPSBudWxsOwotICAgICAgICBpZiAocHVibGljQ29udGVudFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBwdWJsaWNWaWV3TG9jYWwgPSBwdWJsaWNDb250ZW50Vmlldy5hcHBseSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNibi5nZXRQYWNrYWdlQ29udGV4dChtQ29udGV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyUHVibGljLCBtT25DbGlja0hhbmRsZXIpOwotCi0gICAgICAgICAgICAgICAgaWYgKHB1YmxpY1ZpZXdMb2NhbCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpY1ZpZXdMb2NhbC5zZXRJc1Jvb3ROYW1lc3BhY2UodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRDb250YWluZXJQdWJsaWMuc2V0Q29udHJhY3RlZENoaWxkKHB1YmxpY1ZpZXdMb2NhbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpZGVudCA9IHNibi5nZXRQYWNrYWdlTmFtZSgpICsgIi8weCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHNibi5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJjb3VsZG4ndCBpbmZsYXRlIHB1YmxpYyB2aWV3IGZvciBub3RpZmljYXRpb24gIiArIGlkZW50LCBlKTsKLSAgICAgICAgICAgICAgICBwdWJsaWNWaWV3TG9jYWwgPSBudWxsOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAocHVibGljVmlld0xvY2FsICE9IG51bGwpIHsKKyAgICAgICAgICAgIHB1YmxpY1ZpZXdMb2NhbC5zZXRJc1Jvb3ROYW1lc3BhY2UodHJ1ZSk7CisgICAgICAgICAgICBjb250ZW50Q29udGFpbmVyUHVibGljLnNldENvbnRyYWN0ZWRDaGlsZChwdWJsaWNWaWV3TG9jYWwpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRXh0cmFjdCB0YXJnZXQgU0RLIHZlcnNpb24uCkBAIC0xNDc2LDY1ICsxNDM5LDcgQEAKICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgbG9va2luZyB1cCBBcHBsaWNhdGlvbkluZm8gZm9yICIgKyBzYm4uZ2V0UGFja2FnZU5hbWUoKSwgZXgpOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHB1YmxpY1ZpZXdMb2NhbCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBBZGQgYSBiYXNpYyBub3RpZmljYXRpb24gdGVtcGxhdGUKLSAgICAgICAgICAgIHB1YmxpY1ZpZXdMb2NhbCA9IExheW91dEluZmxhdGVyLmZyb20obUNvbnRleHQpLmluZmxhdGUoCi0gICAgICAgICAgICAgICAgICAgIFIubGF5b3V0Lm5vdGlmaWNhdGlvbl9wdWJsaWNfZGVmYXVsdCwKLSAgICAgICAgICAgICAgICAgICAgY29udGVudENvbnRhaW5lclB1YmxpYywgZmFsc2UpOwotICAgICAgICAgICAgcHVibGljVmlld0xvY2FsLnNldElzUm9vdE5hbWVzcGFjZSh0cnVlKTsKLQotICAgICAgICAgICAgZmluYWwgVGV4dFZpZXcgdGl0bGUgPSAoVGV4dFZpZXcpIHB1YmxpY1ZpZXdMb2NhbC5maW5kVmlld0J5SWQoUi5pZC50aXRsZSk7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHRpdGxlLnNldFRleHQocG1Vc2VyLmdldEFwcGxpY2F0aW9uTGFiZWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBwbVVzZXIuZ2V0QXBwbGljYXRpb25JbmZvKGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXRQYWNrYWdlTmFtZSgpLCAwKSkpOwotICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB0aXRsZS5zZXRUZXh0KGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXRQYWNrYWdlTmFtZSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgSW1hZ2VWaWV3IGljb24gPSAoSW1hZ2VWaWV3KSBwdWJsaWNWaWV3TG9jYWwuZmluZFZpZXdCeUlkKFIuaWQuaWNvbik7Ci0gICAgICAgICAgICBmaW5hbCBJbWFnZVZpZXcgcHJvZmlsZUJhZGdlID0gKEltYWdlVmlldykgcHVibGljVmlld0xvY2FsLmZpbmRWaWV3QnlJZCgKLSAgICAgICAgICAgICAgICAgICAgUi5pZC5wcm9maWxlX2JhZGdlX2xpbmUzKTsKLQotICAgICAgICAgICAgZmluYWwgU3RhdHVzQmFySWNvbiBpYyA9IG5ldyBTdGF0dXNCYXJJY29uKAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0VXNlcigpLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0UGFja2FnZU5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgZW50cnkubm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLmdldFNtYWxsSWNvbigpLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuaWNvbkxldmVsLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkubnVtYmVyLAotICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkudGlja2VyVGV4dCk7Ci0KLSAgICAgICAgICAgIERyYXdhYmxlIGljb25EcmF3YWJsZSA9IFN0YXR1c0Jhckljb25WaWV3LmdldEljb24obUNvbnRleHQsIGljKTsKLSAgICAgICAgICAgIGljb24uc2V0SW1hZ2VEcmF3YWJsZShpY29uRHJhd2FibGUpOwotCi0gICAgICAgICAgICBpZiAocHJvZmlsZUJhZGdlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBEcmF3YWJsZSBwcm9maWxlRHJhd2FibGUgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFVzZXJCYWRnZUZvckRlbnNpdHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5ub3RpZmljYXRpb24uZ2V0VXNlcigpLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvZmlsZURyYXdhYmxlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZUJhZGdlLnNldEltYWdlRHJhd2FibGUocHJvZmlsZURyYXdhYmxlKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvZmlsZUJhZGdlLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBwcm9maWxlQmFkZ2Uuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgVmlldyBwcml2YXRlVGltZSA9IGNvbnRlbnRWaWV3TG9jYWwuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQudGltZSk7Ci0gICAgICAgICAgICBmaW5hbCBEYXRlVGltZVZpZXcgdGltZSA9IChEYXRlVGltZVZpZXcpIHB1YmxpY1ZpZXdMb2NhbC5maW5kVmlld0J5SWQoUi5pZC50aW1lKTsKLSAgICAgICAgICAgIGlmIChwcml2YXRlVGltZSAhPSBudWxsICYmIHByaXZhdGVUaW1lLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpIHsKLSAgICAgICAgICAgICAgICB0aW1lLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICB0aW1lLnNldFRpbWUoZW50cnkubm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLndoZW4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBUZXh0VmlldyB0ZXh0ID0gKFRleHRWaWV3KSBwdWJsaWNWaWV3TG9jYWwuZmluZFZpZXdCeUlkKFIuaWQudGV4dCk7Ci0gICAgICAgICAgICBpZiAodGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGV4dC5zZXRUZXh0KFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9oaWRkZW5fdGV4dCk7Ci0gICAgICAgICAgICAgICAgdGV4dC5zZXRUZXh0QXBwZWFyYW5jZShtQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFIuc3R5bGUuVGV4dEFwcGVhcmFuY2VfTWF0ZXJpYWxfTm90aWZpY2F0aW9uX1BhcmVudGhldGljYWwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb250ZW50Q29udGFpbmVyUHVibGljLnNldENvbnRyYWN0ZWRDaGlsZChwdWJsaWNWaWV3TG9jYWwpOwotICAgICAgICAgICAgZW50cnkuYXV0b1JlZGFjdGVkID0gdHJ1ZTsKLSAgICAgICAgfQorICAgICAgICBlbnRyeS5hdXRvUmVkYWN0ZWQgPSBlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkucHVibGljVmVyc2lvbiA9PSBudWxsOwogCiAgICAgICAgIGlmIChNVUxUSVVTRVJfREVCVUcpIHsKICAgICAgICAgICAgIFRleHRWaWV3IGRlYnVnID0gKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQuZGVidWdfaW5mbyk7CkBAIC0xNTU3LDcgKzE0NjIsNiBAQAogICAgICAgICB9CiAgICAgICAgIHJvdy5zZXRVc2VyTG9ja2VkKHVzZXJMb2NrZWQpOwogICAgICAgICByb3cub25Ob3RpZmljYXRpb25VcGRhdGVkKGVudHJ5KTsKLSAgICAgICAgYXBwbHlSZW1vdGVJbnB1dChlbnRyeSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTU4MCw4ICsxNDg0LDE0IEBACiAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aW9uczsgaSsrKSB7CiAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLkFjdGlvbiBhY3Rpb24gPSBhY3Rpb25zLmdldChpKTsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFJlbW90ZUlucHV0W10gcmVtb3RlSW5wdXRzID0gYWN0aW9uLmdldFJlbW90ZUlucHV0cygpOwotICAgICAgICAgICAgICAgIGZvciAoUmVtb3RlSW5wdXQgcmkgOiBhY3Rpb24uZ2V0UmVtb3RlSW5wdXRzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVtb3RlSW5wdXRzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoUmVtb3RlSW5wdXQgcmkgOiByZW1vdGVJbnB1dHMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJpLmdldEFsbG93RnJlZUZvcm1JbnB1dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB2aWFibGVBY3Rpb24gPSBhY3Rpb247CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE2MDAsNjAgKzE1MTAsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBhcHBseVJlbW90ZUlucHV0KGZpbmFsIEVudHJ5IGVudHJ5KSB7Ci0gICAgICAgIGlmICghRU5BQkxFX1JFTU9URV9JTlBVVCkgcmV0dXJuOwotCi0gICAgICAgIFJlbW90ZUlucHV0IHJlbW90ZUlucHV0ID0gbnVsbDsKLQotICAgICAgICBOb3RpZmljYXRpb24uQWN0aW9uW10gYWN0aW9ucyA9IGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5hY3Rpb25zOwotICAgICAgICBpZiAoYWN0aW9ucyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKE5vdGlmaWNhdGlvbi5BY3Rpb24gYSA6IGFjdGlvbnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoYS5nZXRSZW1vdGVJbnB1dHMoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoUmVtb3RlSW5wdXQgcmkgOiBhLmdldFJlbW90ZUlucHV0cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmkuZ2V0QWxsb3dGcmVlRm9ybUlucHV0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVJbnB1dCA9IHJpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgIHByb3RlY3RlZCBLZXlib2FyZFNob3J0Y3V0cyBnZXRLZXlib2FyZFNob3J0Y3V0cygpIHsKKyAgICAgICAgaWYgKG1LZXlib2FyZFNob3J0Y3V0cyA9PSBudWxsKSB7CisgICAgICAgICAgICBtS2V5Ym9hcmRTaG9ydGN1dHMgPSBuZXcgS2V5Ym9hcmRTaG9ydGN1dHMoKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFNlZSBpZiB3ZSBoYXZlIHNvbWV3aGVyZSB0byBwdXQgdGhhdCByZW1vdGUgaW5wdXQKLSAgICAgICAgaWYgKHJlbW90ZUlucHV0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIFZpZXcgYmlnQ29udGVudFZpZXcgPSBlbnRyeS5nZXRFeHBhbmRlZENvbnRlbnRWaWV3KCk7Ci0gICAgICAgICAgICBpZiAoYmlnQ29udGVudFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGluZmxhdGVSZW1vdGVJbnB1dChiaWdDb250ZW50VmlldywgZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVmlldyBoZWFkc1VwQ29udGVudFZpZXcgPSBlbnRyeS5nZXRIZWFkc1VwQ29udGVudFZpZXcoKTsKLSAgICAgICAgICAgIGlmIChoZWFkc1VwQ29udGVudFZpZXcgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGluZmxhdGVSZW1vdGVJbnB1dChoZWFkc1VwQ29udGVudFZpZXcsIGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBSZW1vdGVJbnB1dFZpZXcgaW5mbGF0ZVJlbW90ZUlucHV0KFZpZXcgdmlldywgRW50cnkgZW50cnkpIHsKLSAgICAgICAgVmlldyBhY3Rpb25Db250YWluZXJDYW5kaWRhdGUgPSB2aWV3LmZpbmRWaWV3QnlJZCgKLSAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmFjdGlvbnNfY29udGFpbmVyKTsKLSAgICAgICAgaWYgKGFjdGlvbkNvbnRhaW5lckNhbmRpZGF0ZSBpbnN0YW5jZW9mIEZyYW1lTGF5b3V0KSB7Ci0gICAgICAgICAgICBWaWV3R3JvdXAgYWN0aW9uQ29udGFpbmVyID0gKEZyYW1lTGF5b3V0KSBhY3Rpb25Db250YWluZXJDYW5kaWRhdGU7Ci0gICAgICAgICAgICBSZW1vdGVJbnB1dFZpZXcgcml2ID0gaW5mbGF0ZVJlbW90ZUlucHV0VmlldyhhY3Rpb25Db250YWluZXIsIGVudHJ5KTsKLSAgICAgICAgICAgIGlmIChyaXYgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJpdi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICBhY3Rpb25Db250YWluZXIuYWRkVmlldyhyaXYsIG5ldyBGcmFtZUxheW91dC5MYXlvdXRQYXJhbXMoCi0gICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5UKQotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgcml2LnNldEJhY2tncm91bmRDb2xvcihlbnRyeS5ub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuY29sb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiByaXY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFJlbW90ZUlucHV0VmlldyBpbmZsYXRlUmVtb3RlSW5wdXRWaWV3KFZpZXdHcm91cCByb290LCBFbnRyeSBlbnRyeSkgewotICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgcmV0dXJuIG1LZXlib2FyZFNob3J0Y3V0czsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydFBlbmRpbmdJbnRlbnREaXNtaXNzaW5nS2V5Z3VhcmQoZmluYWwgUGVuZGluZ0ludGVudCBpbnRlbnQpIHsKQEAgLTE3MzgsOSArMTYwMCw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIGlmIChOT1RJRklDQVRJT05fQ0xJQ0tfREVCVUcpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJDbGlja2VkIG9uIGNvbnRlbnQgb2YgIiArIG5vdGlmaWNhdGlvbktleSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGtleWd1YXJkU2hvd2luZyA9IG1TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyLmlzU2hvd2luZygpOwogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBhZnRlcktleWd1YXJkR29uZSA9IGludGVudC5pc0FjdGl2aXR5KCkKICAgICAgICAgICAgICAgICAgICAgJiYgUHJldmlld0luZmxhdGVyLndvdWxkTGF1bmNoUmVzb2x2ZXJBY3Rpdml0eShtQ29udGV4dCwgaW50ZW50LmdldEludGVudCgpLApAQCAtMjA4NywxMSArMTk0NiwxMSBAQAogICAgICAgICBtTm90aWZpY2F0aW9uRGF0YS51cGRhdGVSYW5raW5nKHJhbmtpbmcpOwogCiAgICAgICAgIGJvb2xlYW4gYXBwbHlJblBsYWNlID0gZW50cnkuY2FjaGVDb250ZW50Vmlld3MobUNvbnRleHQsIG5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKSk7Ci0gICAgICAgIGJvb2xlYW4gc2hvdWxkSW50ZXJydXB0ID0gc2hvdWxkSW50ZXJydXB0KGVudHJ5LCBub3RpZmljYXRpb24pOworICAgICAgICBib29sZWFuIHNob3VsZFBlZWsgPSBzaG91bGRQZWVrKGVudHJ5LCBub3RpZmljYXRpb24pOwogICAgICAgICBib29sZWFuIGFsZXJ0QWdhaW4gPSBhbGVydEFnYWluKGVudHJ5LCBuKTsKICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJhcHBseUluUGxhY2U9IiArIGFwcGx5SW5QbGFjZQotICAgICAgICAgICAgICAgICAgICArICIgc2hvdWxkSW50ZXJydXB0PSIgKyBzaG91bGRJbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgICAgKyAiIHNob3VsZFBlZWs9IiArIHNob3VsZFBlZWsKICAgICAgICAgICAgICAgICAgICAgKyAiIGFsZXJ0QWdhaW49IiArIGFsZXJ0QWdhaW4pOwogICAgICAgICB9CiAKQEAgLTIxMjIsNyArMTk4MSw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQgZmFpbGVkIHRvIGFwcGx5IGNsZWFubHkuCi0gICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGRuJ3QgcmVhcHBseSB2aWV3cyBmb3IgcGFja2FnZSAiICsgbi5jb250ZW50Vmlldy5nZXRQYWNrYWdlKCksIGUpOworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkbid0IHJlYXBwbHkgdmlld3MgZm9yIHBhY2thZ2UgIiArCisgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0UGFja2FnZU5hbWUoKSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF1cGRhdGVTdWNjZXNzZnVsKSB7CkBAIC0yMTM4LDcgKzE5OTgsNyBAQAogICAgICAgICAgICAgZW50cnkuaWNvbi5zZXQoaWMpOwogICAgICAgICAgICAgaW5mbGF0ZVZpZXdzKGVudHJ5LCBtU3RhY2tTY3JvbGxlcik7CiAgICAgICAgIH0KLSAgICAgICAgdXBkYXRlSGVhZHNVcChrZXksIGVudHJ5LCBzaG91bGRJbnRlcnJ1cHQsIGFsZXJ0QWdhaW4pOworICAgICAgICB1cGRhdGVIZWFkc1VwKGtleSwgZW50cnksIHNob3VsZFBlZWssIGFsZXJ0QWdhaW4pOwogICAgICAgICB1cGRhdGVOb3RpZmljYXRpb25zKCk7CiAKICAgICAgICAgLy8gVXBkYXRlIHRoZSB2ZXRvIGJ1dHRvbiBhY2NvcmRpbmdseSAoYW5kIGFzIGEgcmVzdWx0LCB3aGV0aGVyIHRoaXMgcm93IGlzCkBAIC0yMTU0LDcgKzIwMTQsNyBAQAogICAgICAgICBzZXRBcmVUaGVyZU5vdGlmaWNhdGlvbnMoKTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB1cGRhdGVIZWFkc1VwKFN0cmluZyBrZXksIEVudHJ5IGVudHJ5LCBib29sZWFuIHNob3VsZEludGVycnVwdCwKKyAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCB1cGRhdGVIZWFkc1VwKFN0cmluZyBrZXksIEVudHJ5IGVudHJ5LCBib29sZWFuIHNob3VsZFBlZWssCiAgICAgICAgICAgICBib29sZWFuIGFsZXJ0QWdhaW4pOwogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU5vdGlmaWNhdGlvblZpZXdzKEVudHJ5IGVudHJ5LCBTdGF0dXNCYXJOb3RpZmljYXRpb24gc2JuKSB7CkBAIC0yMTg0LDggKzIwNDQsNiBAQAogCiAgICAgICAgIGVudHJ5LnJvdy5vbk5vdGlmaWNhdGlvblVwZGF0ZWQoZW50cnkpOwogICAgICAgICBlbnRyeS5yb3cucmVzZXRIZWlnaHQoKTsKLQotICAgICAgICBhcHBseVJlbW90ZUlucHV0KGVudHJ5KTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlIZWFkc1VwU2NyZWVuT2ZmKCkgewpAQCAtMjE5Nyw0OSArMjA1NSw1NCBAQAogICAgICAgICAgICAgICAgIHx8IChuZXdOb3RpZmljYXRpb24uZmxhZ3MgJiBOb3RpZmljYXRpb24uRkxBR19PTkxZX0FMRVJUX09OQ0UpID09IDA7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkSW50ZXJydXB0KEVudHJ5IGVudHJ5KSB7Ci0gICAgICAgIHJldHVybiBzaG91bGRJbnRlcnJ1cHQoZW50cnksIGVudHJ5Lm5vdGlmaWNhdGlvbik7CisgICAgcHJvdGVjdGVkIGJvb2xlYW4gc2hvdWxkUGVlayhFbnRyeSBlbnRyeSkgeworICAgICAgICByZXR1cm4gc2hvdWxkUGVlayhlbnRyeSwgZW50cnkubm90aWZpY2F0aW9uKTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRJbnRlcnJ1cHQoRW50cnkgZW50cnksIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4pIHsKKyAgICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRQZWVrKEVudHJ5IGVudHJ5LCBTdGF0dXNCYXJOb3RpZmljYXRpb24gc2JuKSB7CiAgICAgICAgIGlmIChtTm90aWZpY2F0aW9uRGF0YS5zaG91bGRGaWx0ZXJPdXQoc2JuKSkgewotICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2tpcHBpbmcgSFVOIGNoZWNrIGZvciAiICsgc2JuLmdldEtleSgpICsgIiBzaW5jZSBpdCdzIGZpbHRlcmVkIG91dC4iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTm8gcGVla2luZzogZmlsdGVyZWQgbm90aWZpY2F0aW9uOiAiICsgc2JuLmdldEtleSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpc1Nub296ZWRQYWNrYWdlKHNibikpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTm8gcGVla2luZzogc25vb3plZCBwYWNrYWdlOiAiICsgc2JuLmdldEtleSgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSBzYm4uZ2V0Tm90aWZpY2F0aW9uKCk7Ci0gICAgICAgIC8vIHNvbWUgcHJlZGljYXRlcyB0byBtYWtlIHRoZSBib29sZWFuIGxvZ2ljIGxlZ2libGUKLSAgICAgICAgYm9vbGVhbiBpc05vaXN5ID0gKG5vdGlmaWNhdGlvbi5kZWZhdWx0cyAmIE5vdGlmaWNhdGlvbi5ERUZBVUxUX1NPVU5EKSAhPSAwCi0gICAgICAgICAgICAgICAgfHwgKG5vdGlmaWNhdGlvbi5kZWZhdWx0cyAmIE5vdGlmaWNhdGlvbi5ERUZBVUxUX1ZJQlJBVEUpICE9IDAKLSAgICAgICAgICAgICAgICB8fCBub3RpZmljYXRpb24uc291bmQgIT0gbnVsbAotICAgICAgICAgICAgICAgIHx8IG5vdGlmaWNhdGlvbi52aWJyYXRlICE9IG51bGw7Ci0gICAgICAgIGJvb2xlYW4gaXNIaWdoUHJpb3JpdHkgPSBzYm4uZ2V0U2NvcmUoKSA+PSBJTlRFUlJVUFRJT05fVEhSRVNIT0xEOwotICAgICAgICBib29sZWFuIGlzRnVsbHNjcmVlbiA9IG5vdGlmaWNhdGlvbi5mdWxsU2NyZWVuSW50ZW50ICE9IG51bGw7Ci0gICAgICAgIGJvb2xlYW4gaGFzVGlja2VyID0gbUhlYWRzVXBUaWNrZXIgJiYgIVRleHRVdGlscy5pc0VtcHR5KG5vdGlmaWNhdGlvbi50aWNrZXJUZXh0KTsKLSAgICAgICAgYm9vbGVhbiBhY2Nlc3NpYmlsaXR5Rm9yY2VzTGF1bmNoID0gaXNGdWxsc2NyZWVuCi0gICAgICAgICAgICAgICAgJiYgbUFjY2Vzc2liaWxpdHlNYW5hZ2VyLmlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBqdXN0TGF1bmNoZWRGdWxsU2NyZWVuSW50ZW50ID0gZW50cnkuaGFzSnVzdExhdW5jaGVkRnVsbFNjcmVlbkludGVudCgpOwotICAgICAgICBib29sZWFuIGludGVycnVwdCA9IChpc0Z1bGxzY3JlZW4gfHwgKGlzSGlnaFByaW9yaXR5ICYmIChpc05vaXN5IHx8IGhhc1RpY2tlcikpKQotICAgICAgICAgICAgICAgICYmICFhY2Nlc3NpYmlsaXR5Rm9yY2VzTGF1bmNoCi0gICAgICAgICAgICAgICAgJiYgIWp1c3RMYXVuY2hlZEZ1bGxTY3JlZW5JbnRlbnQKLSAgICAgICAgICAgICAgICAmJiBtUG93ZXJNYW5hZ2VyLmlzU2NyZWVuT24oKQorICAgICAgICBpZiAoZW50cnkuaGFzSnVzdExhdW5jaGVkRnVsbFNjcmVlbkludGVudCgpKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk5vIHBlZWtpbmc6IHJlY2VudCBmdWxsc2NyZWVuOiAiICsgc2JuLmdldEtleSgpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYm4uZ2V0Tm90aWZpY2F0aW9uKCkuZnVsbFNjcmVlbkludGVudCAhPSBudWxsCisgICAgICAgICAgICAgICAgJiYgbUFjY2Vzc2liaWxpdHlNYW5hZ2VyLmlzVG91Y2hFeHBsb3JhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJObyBwZWVraW5nOiBhY2Nlc3NpYmxlIGZ1bGxzY3JlZW46ICIgKyBzYm4uZ2V0S2V5KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKworICAgICAgICBpZiAobU5vdGlmaWNhdGlvbkRhdGEuc2hvdWxkU3VwcHJlc3NQZWVrKHNibi5nZXRLZXkoKSkpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiTm8gcGVla2luZzogc3VwcHJlc3NlZCBieSBETkQ6ICIgKyBzYm4uZ2V0S2V5KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25EYXRhLmdldEltcG9ydGFuY2Uoc2JuLmdldEtleSgpKSA8IElNUE9SVEFOQ0VfTUFYKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk5vIHBlZWtpbmc6IHVuaW1wb3J0YW50IG5vdGlmaWNhdGlvbjogIiArIHNibi5nZXRLZXkoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGluVXNlID0gbVBvd2VyTWFuYWdlci5pc1NjcmVlbk9uKCkKICAgICAgICAgICAgICAgICAmJiAoIW1TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyLmlzU2hvd2luZygpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtU3RhdHVzQmFyS2V5Z3VhcmRWaWV3TWFuYWdlci5pc09jY2x1ZGVkKCkpCi0gICAgICAgICAgICAgICAgJiYgIW1TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyLmlzSW5wdXRSZXN0cmljdGVkKCkKLSAgICAgICAgICAgICAgICAmJiAhbU5vdGlmaWNhdGlvbkRhdGEuc2hvdWxkU3VwcHJlc3NQZWVrKHNibi5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgJiYgIW1TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyLmlzSW5wdXRSZXN0cmljdGVkKCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnRlcnJ1cHQgPSBpbnRlcnJ1cHQgJiYgIW1EcmVhbU1hbmFnZXIuaXNEcmVhbWluZygpOworICAgICAgICAgICAgaW5Vc2UgPSBpblVzZSAmJiAhbURyZWFtTWFuYWdlci5pc0RyZWFtaW5nKCk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBMb2cuZChUQUcsICJmYWlsZWQgdG8gcXVlcnkgZHJlYW0gbWFuYWdlciIsIGUpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAiaW50ZXJydXB0OiAiICsgaW50ZXJydXB0KTsKLSAgICAgICAgcmV0dXJuIGludGVycnVwdDsKKyAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJwZWVrIGlmIGRldmljZSBpbiB1c2U6ICIgKyBpblVzZSk7CisgICAgICAgIHJldHVybiBpblVzZTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBpc1Nub296ZWRQYWNrYWdlKFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4pOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Db21tYW5kUXVldWUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvQ29tbWFuZFF1ZXVlLmphdmEKaW5kZXggMTBkNGE5Ni4uY2MyNjIyMyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Db21tYW5kUXVldWUuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0NvbW1hbmRRdWV1ZS5qYXZhCkBAIC0yMSwxMCArMjEsOCBAQAogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlBhaXI7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuSVN0YXR1c0JhcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuU3RhdHVzQmFySWNvbjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuU3RhdHVzQmFySWNvbkxpc3Q7CiAKIC8qKgogICogVGhpcyBjbGFzcyB0YWtlcyB0aGUgZnVuY3Rpb25zIGZyb20gSVN0YXR1c0JhciB0aGF0IGNvbWUgaW4gb24KQEAgLTY1LDcgKzYzLDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0FTU0lTVF9ESVNDTE9TVVJFICAgICAgICAgID0gMjIgPDwgTVNHX1NISUZUOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfU1RBUlRfQVNTSVNUICAgICAgICAgICAgICAgPSAyMyA8PCBNU0dfU0hJRlQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19DQU1FUkFfTEFVTkNIX0dFU1RVUkUgICAgICA9IDI0IDw8IE1TR19TSElGVDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NIT1dfS0VZQk9BUkRfU0hPUlRDVVRTICAgID0gMjUgPDwgTVNHX1NISUZUOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfVE9HR0xFX0tFWUJPQVJEX1NIT1JUQ1VUUyAgPSAyNSA8PCBNU0dfU0hJRlQ7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0VYQ0xVREVfTk9ORSA9IDA7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19FWENMVURFX1NFQVJDSF9QQU5FTCA9IDEgPDwgMDsKQEAgLTc2LDcgKzc0LDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSE9XX0lNRV9TV0lUQ0hFUl9LRVkgPSAic2hvd0ltZVN3aXRjaGVyS2V5IjsKIAotICAgIHByaXZhdGUgU3RhdHVzQmFySWNvbkxpc3QgbUxpc3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CiAgICAgcHJpdmF0ZSBDYWxsYmFja3MgbUNhbGxiYWNrczsKICAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSCgpOwogCkBAIC04NCwxNCArODIsMTIgQEAKICAgICAgKiBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgYmFjayBvbiB0aGUgbWFpbiB0aHJlYWQuCiAgICAgICovCiAgICAgcHVibGljIGludGVyZmFjZSBDYWxsYmFja3MgewotICAgICAgICBwdWJsaWMgdm9pZCBhZGRJY29uKFN0cmluZyBzbG90LCBpbnQgaW5kZXgsIGludCB2aWV3SW5kZXgsIFN0YXR1c0Jhckljb24gaWNvbik7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUljb24oU3RyaW5nIHNsb3QsIGludCBpbmRleCwgaW50IHZpZXdJbmRleCwKLSAgICAgICAgICAgICAgICBTdGF0dXNCYXJJY29uIG9sZCwgU3RhdHVzQmFySWNvbiBpY29uKTsKLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4KTsKKyAgICAgICAgcHVibGljIHZvaWQgc2V0SWNvbihTdHJpbmcgc2xvdCwgU3RhdHVzQmFySWNvbiBpY29uKTsKKyAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCk7CiAgICAgICAgIHB1YmxpYyB2b2lkIGRpc2FibGUoaW50IHN0YXRlMSwgaW50IHN0YXRlMiwgYm9vbGVhbiBhbmltYXRlKTsKICAgICAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZE5vdGlmaWNhdGlvbnNQYW5lbCgpOwogICAgICAgICBwdWJsaWMgdm9pZCBhbmltYXRlQ29sbGFwc2VQYW5lbHMoaW50IGZsYWdzKTsKLSAgICAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoKTsKKyAgICAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoU3RyaW5nIG9iaik7CiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFN5c3RlbVVpVmlzaWJpbGl0eShpbnQgdmlzLCBpbnQgbWFzayk7CiAgICAgICAgIHB1YmxpYyB2b2lkIHRvcEFwcFdpbmRvd0NoYW5nZWQoYm9vbGVhbiB2aXNpYmxlKTsKICAgICAgICAgcHVibGljIHZvaWQgc2V0SW1lV2luZG93U3RhdHVzKElCaW5kZXIgdG9rZW4sIGludCB2aXMsIGludCBiYWNrRGlzcG9zaXRpb24sCkBAIC0xMDAsNyArOTYsNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBoaWRlUmVjZW50QXBwcyhib29sZWFuIHRyaWdnZXJlZEZyb21BbHRUYWIsIGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUhvbWVLZXkpOwogICAgICAgICBwdWJsaWMgdm9pZCB0b2dnbGVSZWNlbnRBcHBzKCk7CiAgICAgICAgIHB1YmxpYyB2b2lkIHByZWxvYWRSZWNlbnRBcHBzKCk7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNob3dLZXlib2FyZFNob3J0Y3V0c01lbnUoKTsKKyAgICAgICAgcHVibGljIHZvaWQgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHNNZW51KCk7CiAgICAgICAgIHB1YmxpYyB2b2lkIGNhbmNlbFByZWxvYWRSZWNlbnRBcHBzKCk7CiAgICAgICAgIHB1YmxpYyB2b2lkIHNldFdpbmRvd1N0YXRlKGludCB3aW5kb3csIGludCBzdGF0ZSk7CiAgICAgICAgIHB1YmxpYyB2b2lkIGJ1enpCZWVwQmxpbmtlZCgpOwpAQCAtMTE1LDU3ICsxMTEsNTUgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFMYXVuY2hHZXN0dXJlRGV0ZWN0ZWQoaW50IHNvdXJjZSk7CiAgICAgfQogCi0gICAgcHVibGljIENvbW1hbmRRdWV1ZShDYWxsYmFja3MgY2FsbGJhY2tzLCBTdGF0dXNCYXJJY29uTGlzdCBsaXN0KSB7CisgICAgcHVibGljIENvbW1hbmRRdWV1ZShDYWxsYmFja3MgY2FsbGJhY2tzKSB7CiAgICAgICAgIG1DYWxsYmFja3MgPSBjYWxsYmFja3M7Ci0gICAgICAgIG1MaXN0ID0gbGlzdDsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRJY29uKGludCBpbmRleCwgU3RhdHVzQmFySWNvbiBpY29uKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKLSAgICAgICAgICAgIGludCB3aGF0ID0gTVNHX0lDT04gfCBpbmRleDsKLSAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKHdoYXQpOwotICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZSh3aGF0LCBPUF9TRVRfSUNPTiwgMCwgaWNvbi5jbG9uZSgpKS5zZW5kVG9UYXJnZXQoKTsKKyAgICBwdWJsaWMgdm9pZCBzZXRJY29uKFN0cmluZyBzbG90LCBTdGF0dXNCYXJJY29uIGljb24pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgLy8gZG9uJ3QgY29hbGVzY2UgdGhlc2UKKyAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0lDT04sIE9QX1NFVF9JQ09OLCAwLAorICAgICAgICAgICAgICAgICAgICBuZXcgUGFpcjxTdHJpbmcsIFN0YXR1c0Jhckljb24+KHNsb3QsIGljb24pKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUljb24oaW50IGluZGV4KSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKLSAgICAgICAgICAgIGludCB3aGF0ID0gTVNHX0lDT04gfCBpbmRleDsKLSAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKHdoYXQpOwotICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZSh3aGF0LCBPUF9SRU1PVkVfSUNPTiwgMCwgbnVsbCkuc2VuZFRvVGFyZ2V0KCk7CisgICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAvLyBkb24ndCBjb2FsZXNjZSB0aGVzZQorICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfSUNPTiwgT1BfUkVNT1ZFX0lDT04sIDAsIHNsb3QpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGlzYWJsZShpbnQgc3RhdGUxLCBpbnQgc3RhdGUyKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoTVNHX0RJU0FCTEUpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfRElTQUJMRSwgc3RhdGUxLCBzdGF0ZTIsIG51bGwpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZE5vdGlmaWNhdGlvbnNQYW5lbCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfRVhQQU5EX05PVElGSUNBVElPTlMpOwogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfRVhQQU5EX05PVElGSUNBVElPTlMpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUNvbGxhcHNlUGFuZWxzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19DT0xMQVBTRV9QQU5FTFMpOwogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfQ09MTEFQU0VfUEFORUxTKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoU3RyaW5nIHN1YlBhbmVsKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19FWFBBTkRfU0VUVElOR1MpOwotICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfRVhQQU5EX1NFVFRJTkdTKTsKKyAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0VYUEFORF9TRVRUSU5HUywgc3ViUGFuZWwpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0U3lzdGVtVWlWaXNpYmlsaXR5KGludCB2aXMsIGludCBtYXNrKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgLy8gRG9uJ3QgY29hbGVzY2UgdGhlc2UsIHNpbmNlIGl0IG1pZ2h0IGhhdmUgb25lIHRpbWUgZmxhZ3Mgc2V0IHN1Y2ggYXMKICAgICAgICAgICAgIC8vIFNUQVRVU19CQVJfVU5ISURFIHdoaWNoIG1pZ2h0IGdldCBsb3N0LgogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfU0VUX1NZU1RFTVVJX1ZJU0lCSUxJVFksIHZpcywgbWFzaywgbnVsbCkuc2VuZFRvVGFyZ2V0KCk7CkBAIC0xNzMsNyArMTY3LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0b3BBcHBXaW5kb3dDaGFuZ2VkKGJvb2xlYW4gbWVudVZpc2libGUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfVE9QX0FQUF9XSU5ET1dfQ0hBTkdFRCk7CiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19UT1BfQVBQX1dJTkRPV19DSEFOR0VELCBtZW51VmlzaWJsZSA/IDEgOiAwLCAwLAogICAgICAgICAgICAgICAgICAgICBudWxsKS5zZW5kVG9UYXJnZXQoKTsKQEAgLTE4Miw3ICsxNzYsNyBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0SW1lV2luZG93U3RhdHVzKElCaW5kZXIgdG9rZW4sIGludCB2aXMsIGludCBiYWNrRGlzcG9zaXRpb24sCiAgICAgICAgICAgICBib29sZWFuIHNob3dJbWVTd2l0Y2hlcikgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19TSE9XX0lNRV9CVVRUT04pOwogICAgICAgICAgICAgTWVzc2FnZSBtID0gbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfU0hPV19JTUVfQlVUVE9OLCB2aXMsIGJhY2tEaXNwb3NpdGlvbiwgdG9rZW4pOwogICAgICAgICAgICAgbS5nZXREYXRhKCkucHV0Qm9vbGVhbihTSE9XX0lNRV9TV0lUQ0hFUl9LRVksIHNob3dJbWVTd2l0Y2hlcik7CkBAIC0xOTEsNyArMTg1LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzaG93UmVjZW50QXBwcyhib29sZWFuIHRyaWdnZXJlZEZyb21BbHRUYWIpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfU0hPV19SRUNFTlRfQVBQUyk7CiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19TSE9XX1JFQ0VOVF9BUFBTLAogICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWRGcm9tQWx0VGFiID8gMSA6IDAsIDAsIG51bGwpLnNlbmRUb1RhcmdldCgpOwpAQCAtMTk5LDcgKzE5Myw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGlkZVJlY2VudEFwcHMoYm9vbGVhbiB0cmlnZ2VyZWRGcm9tQWx0VGFiLCBib29sZWFuIHRyaWdnZXJlZEZyb21Ib21lS2V5KSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoTVNHX0hJREVfUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfSElERV9SRUNFTlRfQVBQUywKICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkRnJvbUFsdFRhYiA/IDEgOiAwLCB0cmlnZ2VyZWRGcm9tSG9tZUtleSA/IDEgOiAwLApAQCAtMjA4LDgzICsyMDIsODMgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0b2dnbGVSZWNlbnRBcHBzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19UT0dHTEVfUkVDRU5UX0FQUFMpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfVE9HR0xFX1JFQ0VOVF9BUFBTLCAwLCAwLCBudWxsKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHByZWxvYWRSZWNlbnRBcHBzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19QUkVMT0FEX1JFQ0VOVF9BUFBTKTsKICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX1BSRUxPQURfUkVDRU5UX0FQUFMsIDAsIDAsIG51bGwpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgY2FuY2VsUHJlbG9hZFJlY2VudEFwcHMoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoTVNHX0NBTkNFTF9QUkVMT0FEX1JFQ0VOVF9BUFBTKTsKICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0NBTkNFTF9QUkVMT0FEX1JFQ0VOVF9BUFBTLCAwLCAwLCBudWxsKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dLZXlib2FyZFNob3J0Y3V0c01lbnUoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKLSAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19TSE9XX0tFWUJPQVJEX1NIT1JUQ1VUUyk7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19TSE9XX0tFWUJPQVJEX1NIT1JUQ1VUUykuc2VuZFRvVGFyZ2V0KCk7CisgICAgcHVibGljIHZvaWQgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHNNZW51KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfVE9HR0xFX0tFWUJPQVJEX1NIT1JUQ1VUUyk7CisgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19UT0dHTEVfS0VZQk9BUkRfU0hPUlRDVVRTKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFdpbmRvd1N0YXRlKGludCB3aW5kb3csIGludCBzdGF0ZSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIC8vIGRvbid0IGNvYWxlc2NlIHRoZXNlCiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19TRVRfV0lORE9XX1NUQVRFLCB3aW5kb3csIHN0YXRlLCBudWxsKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGJ1enpCZWVwQmxpbmtlZCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfQlVaWl9CRUVQX0JMSU5LRUQpOwogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfQlVaWl9CRUVQX0JMSU5LRUQpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgbm90aWZpY2F0aW9uTGlnaHRPZmYoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfTk9USUZJQ0FUSU9OX0xJR0hUX09GRik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBub3RpZmljYXRpb25MaWdodFB1bHNlKGludCBhcmdiLCBpbnQgb25NaWxsaXMsIGludCBvZmZNaWxsaXMpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19OT1RJRklDQVRJT05fTElHSFRfUFVMU0UsIG9uTWlsbGlzLCBvZmZNaWxsaXMsIGFyZ2IpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNob3dTY3JlZW5QaW5uaW5nUmVxdWVzdCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE1TR19TSE9XX1NDUkVFTl9QSU5fUkVRVUVTVCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhcHBUcmFuc2l0aW9uUGVuZGluZygpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfQVBQX1RSQU5TSVRJT05fUEVORElORyk7CiAgICAgICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKE1TR19BUFBfVFJBTlNJVElPTl9QRU5ESU5HKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFwcFRyYW5zaXRpb25DYW5jZWxsZWQoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoTVNHX0FQUF9UUkFOU0lUSU9OX1BFTkRJTkcpOwogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShNU0dfQVBQX1RSQU5TSVRJT05fUEVORElORyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBhcHBUcmFuc2l0aW9uU3RhcnRpbmcobG9uZyBzdGFydFRpbWUsIGxvbmcgZHVyYXRpb24pIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtTGlzdCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhNU0dfQVBQX1RSQU5TSVRJT05fU1RBUlRJTkcpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfQVBQX1RSQU5TSVRJT05fU1RBUlRJTkcsIFBhaXIuY3JlYXRlKHN0YXJ0VGltZSwgZHVyYXRpb24pKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CkBAIC0yOTIsMTQgKzI4NiwxNCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNob3dBc3Npc3REaXNjbG9zdXJlKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19BU1NJU1RfRElTQ0xPU1VSRSk7CiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19BU1NJU1RfRElTQ0xPU1VSRSkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydEFzc2lzdChCdW5kbGUgYXJncykgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1MaXN0KSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1TR19TVEFSVF9BU1NJU1QpOwogICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfU1RBUlRfQVNTSVNULCBhcmdzKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMzA3LDcgKzMwMSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUxhdW5jaEdlc3R1cmVEZXRlY3RlZChpbnQgc291cmNlKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobUxpc3QpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoTVNHX0NBTUVSQV9MQVVOQ0hfR0VTVFVSRSk7CiAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19DQU1FUkFfTEFVTkNIX0dFU1RVUkUsIHNvdXJjZSwgMCkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTMxOCwyNyArMzEyLDE0IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgd2hhdCA9IG1zZy53aGF0ICYgTVNHX01BU0s7CiAgICAgICAgICAgICBzd2l0Y2ggKHdoYXQpIHsKICAgICAgICAgICAgICAgICBjYXNlIE1TR19JQ09OOiB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IG1zZy53aGF0ICYgSU5ERVhfTUFTSzsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHZpZXdJbmRleCA9IG1MaXN0LmdldFZpZXdJbmRleChpbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLmFyZzEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgT1BfU0VUX0lDT046IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNCYXJJY29uIGljb24gPSAoU3RhdHVzQmFySWNvbiltc2cub2JqOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c0Jhckljb24gb2xkID0gbUxpc3QuZ2V0SWNvbihpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9sZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0LnNldEljb24oaW5kZXgsIGljb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmFkZEljb24obUxpc3QuZ2V0U2xvdChpbmRleCksIGluZGV4LCB2aWV3SW5kZXgsIGljb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0LnNldEljb24oaW5kZXgsIGljb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnVwZGF0ZUljb24obUxpc3QuZ2V0U2xvdChpbmRleCksIGluZGV4LCB2aWV3SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkLCBpY29uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFpcjxTdHJpbmcsIFN0YXR1c0Jhckljb24+IHAgPSAoUGFpcjxTdHJpbmcsIFN0YXR1c0Jhckljb24+KSBtc2cub2JqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DYWxsYmFja3Muc2V0SWNvbihwLmZpcnN0LCBwLnNlY29uZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIE9QX1JFTU9WRV9JQ09OOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtTGlzdC5nZXRJY29uKGluZGV4KSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaXN0LnJlbW92ZUljb24oaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnJlbW92ZUljb24obUxpc3QuZ2V0U2xvdChpbmRleCksIGluZGV4LCB2aWV3SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnJlbW92ZUljb24oKFN0cmluZykgbXNnLm9iaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTMsNyArMzM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5hbmltYXRlQ29sbGFwc2VQYW5lbHMoMCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX0VYUEFORF9TRVRUSU5HUzoKLSAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5hbmltYXRlRXhwYW5kU2V0dGluZ3NQYW5lbCgpOworICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKChTdHJpbmcpIG1zZy5vYmopOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVRfU1lTVEVNVUlfVklTSUJJTElUWToKICAgICAgICAgICAgICAgICAgICAgbUNhbGxiYWNrcy5zZXRTeXN0ZW1VaVZpc2liaWxpdHkobXNnLmFyZzEsIG1zZy5hcmcyKTsKQEAgLTM4MCw4ICszNjEsOCBAQAogICAgICAgICAgICAgICAgIGNhc2UgTVNHX0NBTkNFTF9QUkVMT0FEX1JFQ0VOVF9BUFBTOgogICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLmNhbmNlbFByZWxvYWRSZWNlbnRBcHBzKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NIT1dfS0VZQk9BUkRfU0hPUlRDVVRTOgotICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnNob3dLZXlib2FyZFNob3J0Y3V0c01lbnUoKTsKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19UT0dHTEVfS0VZQk9BUkRfU0hPUlRDVVRTOgorICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnRvZ2dsZUtleWJvYXJkU2hvcnRjdXRzTWVudSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE1TR19TRVRfV0lORE9XX1NUQVRFOgogICAgICAgICAgICAgICAgICAgICBtQ2FsbGJhY2tzLnNldFdpbmRvd1N0YXRlKG1zZy5hcmcxLCBtc2cuYXJnMik7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdy5qYXZhCmluZGV4IDVjNzljN2QuLjgzODUzYTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdy5qYXZhCkBAIC0yNSwxMiArMjUsMTAgQEAKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uU3RhdHVzQmFyTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5Ob3RpZmljYXRpb25IZWFkZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3U3R1YjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5MaW5lYXJJbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuQ2hyb25vbWV0ZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzOwpAQCAtNDksMTEgKzQ3LDExIEBACiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9ESVZJREVSX0FMUEhBID0gMHgyOTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JFRF9ESVZJREVSX0FMUEhBID0gMHg3QjsKLSAgICBwcml2YXRlIGZpbmFsIExpbmVhckludGVycG9sYXRvciBtTGluZWFySW50ZXJwb2xhdG9yID0gbmV3IExpbmVhckludGVycG9sYXRvcigpOwogICAgIHByaXZhdGUgZmluYWwgaW50IG1Ob3RpZmljYXRpb25NaW5IZWlnaHRMZWdhY3k7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1heEhlYWRzVXBIZWlnaHRMZWdhY3k7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1heEhlYWRzVXBIZWlnaHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU5vdGlmaWNhdGlvbk1pbkhlaWdodDsKICAgICBwcml2YXRlIGZpbmFsIGludCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0OwotICAgIHByaXZhdGUgaW50IG1Sb3dNaW5IZWlnaHQ7CiAKICAgICAvKiogRG9lcyB0aGlzIHJvdyBjb250YWluIGxheW91dHMgdGhhdCBjYW4gYWRhcHQgdG8gcm93IGV4cGFuc2lvbiAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBtRXhwYW5kYWJsZTsKQEAgLTk1LDYgKzkzLDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzSGVhZHNVcDsKICAgICBwcml2YXRlIGJvb2xlYW4gbUxhc3RDaHJvbm9tZXRlclJ1bm5pbmcgPSB0cnVlOwogICAgIHByaXZhdGUgTm90aWZpY2F0aW9uSGVhZGVyVmlldyBtTm90aWZpY2F0aW9uSGVhZGVyOworICAgIHByaXZhdGUgTm90aWZpY2F0aW9uVmlld1dyYXBwZXIgbU5vdGlmaWNhdGlvbkhlYWRlcldyYXBwZXI7CiAgICAgcHJpdmF0ZSBWaWV3U3R1YiBtQ2hpbGRyZW5Db250YWluZXJTdHViOwogICAgIHByaXZhdGUgTm90aWZpY2F0aW9uR3JvdXBNYW5hZ2VyIG1Hcm91cE1hbmFnZXI7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1DaGlsZHJlbkV4cGFuZGVkOwpAQCAtMTE0LDcgKzExMyw3IEBACiAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUV4cGFuZENsaWNrTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHYpIHsKLSAgICAgICAgICAgIGlmIChtR3JvdXBNYW5hZ2VyLmlzU3VtbWFyeU9mR3JvdXAobVN0YXR1c0Jhck5vdGlmaWNhdGlvbikpIHsKKyAgICAgICAgICAgIGlmICghbVNob3dpbmdQdWJsaWMgJiYgbUdyb3VwTWFuYWdlci5pc1N1bW1hcnlPZkdyb3VwKG1TdGF0dXNCYXJOb3RpZmljYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgbUdyb3VwTWFuYWdlci50b2dnbGVHcm91cEV4cGFuc2lvbihtU3RhdHVzQmFyTm90aWZpY2F0aW9uKTsKICAgICAgICAgICAgICAgICBtT25FeHBhbmRDbGlja0xpc3RlbmVyLm9uRXhwYW5kQ2xpY2tlZChFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93LnRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBtR3JvdXBNYW5hZ2VyLmlzR3JvdXBFeHBhbmRlZChtU3RhdHVzQmFyTm90aWZpY2F0aW9uKSk7CkBAIC0xOTYsOCArMTk1LDggQEAKICAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblVwZGF0ZWQoTm90aWZpY2F0aW9uRGF0YS5FbnRyeSBlbnRyeSkgewogICAgICAgICBtRW50cnkgPSBlbnRyeTsKICAgICAgICAgbVN0YXR1c0Jhck5vdGlmaWNhdGlvbiA9IGVudHJ5Lm5vdGlmaWNhdGlvbjsKLSAgICAgICAgbVByaXZhdGVMYXlvdXQub25Ob3RpZmljYXRpb25VcGRhdGVkKGVudHJ5Lm5vdGlmaWNhdGlvbik7Ci0gICAgICAgIG1QdWJsaWNMYXlvdXQub25Ob3RpZmljYXRpb25VcGRhdGVkKGVudHJ5Lm5vdGlmaWNhdGlvbik7CisgICAgICAgIG1Qcml2YXRlTGF5b3V0Lm9uTm90aWZpY2F0aW9uVXBkYXRlZChlbnRyeSk7CisgICAgICAgIG1QdWJsaWNMYXlvdXQub25Ob3RpZmljYXRpb25VcGRhdGVkKGVudHJ5KTsKICAgICAgICAgdXBkYXRlVmV0b0J1dHRvbigpOwogICAgICAgICBpZiAobUlzU3VtbWFyeVdpdGhDaGlsZHJlbikgewogICAgICAgICAgICAgcmVjcmVhdGVOb3RpZmljYXRpb25IZWFkZXIoKTsKQEAgLTIwOSw2ICsyMDgsOCBAQAogICAgICAgICAgICAgbU5vdGlmaWNhdGlvblBhcmVudC51cGRhdGVDaGlsZHJlbkhlYWRlckFwcGVhcmFuY2UoKTsKICAgICAgICAgfQogICAgICAgICBvbkNoaWxkcmVuQ291bnRDaGFuZ2VkKCk7CisgICAgICAgIC8vIFRoZSBwdWJsaWMgbGF5b3V0cyBleHBhbmQgYnV0dG9uIGlzIGFsd2F5cyB2aXNpYmxlCisgICAgICAgIG1QdWJsaWNMYXlvdXQudXBkYXRlRXhwYW5kQnV0dG9ucyh0cnVlKTsKICAgICAgICAgdXBkYXRlTGltaXRzKCk7CiAgICAgfQogCkBAIC0yMTgsMTAgKzIxOSwxNCBAQAogICAgICAgICBib29sZWFuIGJlZm9yZU4gPSBtRW50cnkudGFyZ2V0U2RrIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5OOwogICAgICAgICBpbnQgbWluSGVpZ2h0ID0gY3VzdG9tVmlldyAmJiBiZWZvcmVOICYmICFtSXNTdW1tYXJ5V2l0aENoaWxkcmVuID8KICAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uTWluSGVpZ2h0TGVnYWN5IDogbU5vdGlmaWNhdGlvbk1pbkhlaWdodDsKLSAgICAgICAgbVJvd01pbkhlaWdodCA9IG1pbkhlaWdodDsKKyAgICAgICAgYm9vbGVhbiBoZWFkc1VwQ3VzdG9tID0gZ2V0UHJpdmF0ZUxheW91dCgpLmdldEhlYWRzVXBDaGlsZCgpICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICBnZXRQcml2YXRlTGF5b3V0KCkuZ2V0SGVhZHNVcENoaWxkKCkuZ2V0SWQoKQorICAgICAgICAgICAgICAgICE9IGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuc3RhdHVzX2Jhcl9sYXRlc3RfZXZlbnRfY29udGVudDsKKyAgICAgICAgaW50IGhlYWRzVXBoZWlnaHQgPSBoZWFkc1VwQ3VzdG9tICYmIGJlZm9yZU4gPyBtTWF4SGVhZHNVcEhlaWdodExlZ2FjeQorICAgICAgICAgICAgICAgIDogbU1heEhlYWRzVXBIZWlnaHQ7CiAgICAgICAgIG1NYXhWaWV3SGVpZ2h0ID0gbU5vdGlmaWNhdGlvbk1heEhlaWdodDsKLSAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0U21hbGxIZWlnaHQobVJvd01pbkhlaWdodCk7Ci0gICAgICAgIG1QdWJsaWNMYXlvdXQuc2V0U21hbGxIZWlnaHQobVJvd01pbkhlaWdodCk7CisgICAgICAgIG1Qcml2YXRlTGF5b3V0LnNldEhlaWdodHMobWluSGVpZ2h0LCBoZWFkc1VwaGVpZ2h0LCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0KTsKKyAgICAgICAgbVB1YmxpY0xheW91dC5zZXRIZWlnaHRzKG1pbkhlaWdodCwgaGVhZHNVcGhlaWdodCwgbU5vdGlmaWNhdGlvbk1heEhlaWdodCk7CiAgICAgfQogCiAgICAgcHVibGljIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBnZXRTdGF0dXNCYXJOb3RpZmljYXRpb24oKSB7CkBAIC0yNDYsNiArMjUxLDEwIEBACiAgICAgICAgIG1Qcml2YXRlTGF5b3V0LnNldEdyb3VwTWFuYWdlcihncm91cE1hbmFnZXIpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHNldFJlbW90ZUlucHV0Q29udHJvbGxlcihSZW1vdGVJbnB1dENvbnRyb2xsZXIgcikgeworICAgICAgICBtUHJpdmF0ZUxheW91dC5zZXRSZW1vdGVJbnB1dENvbnRyb2xsZXIocik7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgYWRkQ2hpbGROb3RpZmljYXRpb24oRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdyByb3cpIHsKICAgICAgICAgYWRkQ2hpbGROb3RpZmljYXRpb24ocm93LCAtMSk7CiAgICAgfQpAQCAtMzg1LDYgKzM5NCw5IEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRIZWFkc1VwSGVpZ2h0KCkgeworICAgICAgICBpZiAobUlzU3VtbWFyeVdpdGhDaGlsZHJlbikgeworICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbkNvbnRhaW5lci5nZXRJbnRyaW5zaWNIZWlnaHQoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbUhlYWRzVXBIZWlnaHQ7CiAgICAgfQogCkBAIC00NjIsNiArNDc0LDEwIEBACiAgICAgICAgICAgICAgICAgUi5kaW1lbi5ub3RpZmljYXRpb25fbWluX2hlaWdodCk7CiAgICAgICAgIG1Ob3RpZmljYXRpb25NYXhIZWlnaHQgPSAgZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAogICAgICAgICAgICAgICAgIFIuZGltZW4ubm90aWZpY2F0aW9uX21heF9oZWlnaHQpOworICAgICAgICBtTWF4SGVhZHNVcEhlaWdodExlZ2FjeSA9ICBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgUi5kaW1lbi5ub3RpZmljYXRpb25fbWF4X2hlYWRzX3VwX2hlaWdodF9sZWdhY3kpOworICAgICAgICBtTWF4SGVhZHNVcEhlaWdodCA9ICBnZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgUi5kaW1lbi5ub3RpZmljYXRpb25fbWF4X2hlYWRzX3VwX2hlaWdodCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC00NzAsNyArNDg2LDYgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKICAgICAgICAgc3VwZXIucmVzZXQoKTsKLSAgICAgICAgbVJvd01pbkhlaWdodCA9IDA7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRXhwYW5kZWQgPSBpc0V4cGFuZGVkKCk7CiAgICAgICAgIG1NYXhWaWV3SGVpZ2h0ID0gMDsKICAgICAgICAgbUV4cGFuZGFibGUgPSBmYWxzZTsKQEAgLTQ5OSwxMSArNTE0LDYgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBmaWx0ZXJNb3Rpb25FdmVudChNb3Rpb25FdmVudCBldmVudCkgewotICAgICAgICByZXR1cm4gbUlzSGVhZHNVcCB8fCBzdXBlci5maWx0ZXJNb3Rpb25FdmVudChldmVudCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25GaW5pc2hJbmZsYXRlKCkgewogICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKICAgICAgICAgbVB1YmxpY0xheW91dCA9IChOb3RpZmljYXRpb25Db250ZW50VmlldykgZmluZFZpZXdCeUlkKFIuaWQuZXhwYW5kZWRQdWJsaWMpOwpAQCAtNTM5LDEyICs1NDksMTUgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlQ2hpbGRyZW5WaXNpYmlsaXR5KCkgeworICAgICAgICBtUHJpdmF0ZUxheW91dC5zZXRWaXNpYmlsaXR5KCFtU2hvd2luZ1B1YmxpYyAmJiAhbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CiAgICAgICAgIGlmIChtQ2hpbGRyZW5Db250YWluZXIgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1DaGlsZHJlbkNvbnRhaW5lci5zZXRWaXNpYmlsaXR5KG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPyBWSVNJQkxFIDogSU5WSVNJQkxFKTsKLSAgICAgICAgbU5vdGlmaWNhdGlvbkhlYWRlci5zZXRWaXNpYmlsaXR5KG1Jc1N1bW1hcnlXaXRoQ2hpbGRyZW4gPyBWSVNJQkxFIDogSU5WSVNJQkxFKTsKLSAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0VmlzaWJpbGl0eSghbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUgOiBJTlZJU0lCTEUpOworICAgICAgICBtQ2hpbGRyZW5Db250YWluZXIuc2V0VmlzaWJpbGl0eSghbVNob3dpbmdQdWJsaWMgJiYgbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CisgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXIuc2V0VmlzaWJpbGl0eSghbVNob3dpbmdQdWJsaWMgJiYgbUlzU3VtbWFyeVdpdGhDaGlsZHJlbiA/IFZJU0lCTEUKKyAgICAgICAgICAgICAgICA6IElOVklTSUJMRSk7CiAgICAgICAgIC8vIFRoZSBsaW1pdHMgbWlnaHQgaGF2ZSBjaGFuZ2VkIGlmIHRoZSB2aWV3IHN1ZGRlbmx5IGJlY2FtZSBhIGdyb3VwIG9yIHZpY2UgdmVyc2EKICAgICAgICAgdXBkYXRlTGltaXRzKCk7CiAgICAgfQpAQCAtNTcwLDYgKzU4MywxMCBAQAogICAgICAgICBpZiAoc2hvd2luZyAhPSBudWxsKSB7CiAgICAgICAgICAgICBzaG93aW5nLnNldERhcmsoZGFyaywgZmFkZSwgZGVsYXkpOwogICAgICAgICB9CisgICAgICAgIGlmIChtSXNTdW1tYXJ5V2l0aENoaWxkcmVuKSB7CisgICAgICAgICAgICBtQ2hpbGRyZW5Db250YWluZXIuc2V0RGFyayhkYXJrLCBmYWRlLCBkZWxheSk7CisgICAgICAgICAgICBtTm90aWZpY2F0aW9uSGVhZGVyV3JhcHBlci5zZXREYXJrKGRhcmssIGZhZGUsIGRlbGF5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzRXhwYW5kYWJsZSgpIHsKQEAgLTY2OSw2ICs2ODYsOSBAQAogICAgICAgICAgICAgbU9uS2V5Z3VhcmQgPSBvbktleWd1YXJkOwogICAgICAgICAgICAgbG9nRXhwYW5zaW9uRXZlbnQoZmFsc2UsIHdhc0V4cGFuZGVkKTsKICAgICAgICAgICAgIGlmICh3YXNFeHBhbmRlZCAhPSBpc0V4cGFuZGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobUlzU3VtbWFyeVdpdGhDaGlsZHJlbikgeworICAgICAgICAgICAgICAgICAgICBtQ2hpbGRyZW5Db250YWluZXIudXBkYXRlR3JvdXBPdmVyZmxvdygpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBub3RpZnlIZWlnaHRDaGFuZ2VkKGZhbHNlICAvKiBuZWVkc0FuaW1hdGlvbiAqLyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY4OSw3ICs3MDksNyBAQAogICAgICAgICBpZiAoZXhwYW5kICYmIG1FeHBhbmRhYmxlKSB7CiAgICAgICAgICAgICBzZXRBY3R1YWxIZWlnaHQobU1heEV4cGFuZEhlaWdodCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZXRBY3R1YWxIZWlnaHQobVJvd01pbkhlaWdodCk7CisgICAgICAgICAgICBzZXRBY3R1YWxIZWlnaHQoZ2V0TWluSGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02OTksMjAgKzcxOSwyNCBAQAogICAgICAgICAgICAgcmV0dXJuIGdldEFjdHVhbEhlaWdodCgpOwogICAgICAgICB9CiAgICAgICAgIGJvb2xlYW4gaW5FeHBhbnNpb25TdGF0ZSA9IGlzRXhwYW5kZWQoKTsKLSAgICAgICAgaWYgKG1TZW5zaXRpdmUgJiYgbUhpZGVTZW5zaXRpdmVGb3JJbnRyaW5zaWNIZWlnaHQpIHsKLSAgICAgICAgICAgIHJldHVybiBtUm93TWluSGVpZ2h0OworICAgICAgICBpZiAobUd1dHMgIT0gbnVsbCAmJiBtR3V0cy5hcmVHdXRzRXhwb3NlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gbUd1dHMuZ2V0SGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoKGlzQ2hpbGRJbkdyb3VwKCkgJiYgIWlzR3JvdXBFeHBhbmRlZCgpKSkgeworICAgICAgICAgICAgcmV0dXJuIG1Qcml2YXRlTGF5b3V0LmdldE1pbkhlaWdodCgpOworICAgICAgICB9IGVsc2UgaWYgKG1TZW5zaXRpdmUgJiYgbUhpZGVTZW5zaXRpdmVGb3JJbnRyaW5zaWNIZWlnaHQpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRNaW5IZWlnaHQoKTsKICAgICAgICAgfSBlbHNlIGlmIChtSXNTdW1tYXJ5V2l0aENoaWxkcmVuICYmICFtT25LZXlndWFyZCkgewogICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbkNvbnRhaW5lci5nZXRJbnRyaW5zaWNIZWlnaHQoKTsKICAgICAgICAgfSBlbHNlIGlmIChtSXNIZWFkc1VwKSB7CiAgICAgICAgICAgICBpZiAoaW5FeHBhbnNpb25TdGF0ZSkgewotICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChtTWF4RXhwYW5kSGVpZ2h0LCBtSGVhZHNVcEhlaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGdldE1heEV4cGFuZEhlaWdodCgpLCBtSGVhZHNVcEhlaWdodCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChtUm93TWluSGVpZ2h0LCBtSGVhZHNVcEhlaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KGdldE1pbkhlaWdodCgpLCBtSGVhZHNVcEhlaWdodCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIWluRXhwYW5zaW9uU3RhdGUgfHwgKGlzQ2hpbGRJbkdyb3VwKCkgJiYgIWlzR3JvdXBFeHBhbmRlZCgpKSkgewotICAgICAgICAgICAgcmV0dXJuIGdldE1pbkhlaWdodCgpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UgaWYgKGluRXhwYW5zaW9uU3RhdGUpIHsKICAgICAgICAgICAgIHJldHVybiBnZXRNYXhFeHBhbmRIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRNaW5IZWlnaHQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODE5LDggKzg0Myw3IEBACiAgICAgICAgICAgICBtUHVibGljTGF5b3V0LnNldEFscGhhKDFmKTsKICAgICAgICAgICAgIG1Qcml2YXRlTGF5b3V0LnNldEFscGhhKDFmKTsKICAgICAgICAgICAgIG1QdWJsaWNMYXlvdXQuc2V0VmlzaWJpbGl0eShtU2hvd2luZ1B1YmxpYyA/IFZpZXcuVklTSUJMRSA6IFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgIG1Qcml2YXRlTGF5b3V0LnNldFZpc2liaWxpdHkoIW1TaG93aW5nUHVibGljICYmICFtSXNTdW1tYXJ5V2l0aENoaWxkcmVuID8gVmlldy5WSVNJQkxFCi0gICAgICAgICAgICAgICAgICAgIDogVmlldy5JTlZJU0lCTEUpOworICAgICAgICAgICAgdXBkYXRlQ2hpbGRyZW5WaXNpYmlsaXR5KCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhbmltYXRlU2hvd2luZ1B1YmxpYyhkZWxheSwgZHVyYXRpb24pOwogICAgICAgICB9CkBAIC04MzEsMjcgKzg1NCwzNSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhbmltYXRlU2hvd2luZ1B1YmxpYyhsb25nIGRlbGF5LCBsb25nIGR1cmF0aW9uKSB7Ci0gICAgICAgIGZpbmFsIFZpZXcgc291cmNlID0gbVNob3dpbmdQdWJsaWMgPyBtUHJpdmF0ZUxheW91dCA6IG1QdWJsaWNMYXlvdXQ7Ci0gICAgICAgIFZpZXcgdGFyZ2V0ID0gbVNob3dpbmdQdWJsaWMgPyBtUHVibGljTGF5b3V0IDogbVByaXZhdGVMYXlvdXQ7Ci0gICAgICAgIHNvdXJjZS5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgIHRhcmdldC5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7Ci0gICAgICAgIHRhcmdldC5zZXRBbHBoYSgwZik7Ci0gICAgICAgIHNvdXJjZS5hbmltYXRlKCkuY2FuY2VsKCk7Ci0gICAgICAgIHRhcmdldC5hbmltYXRlKCkuY2FuY2VsKCk7Ci0gICAgICAgIHNvdXJjZS5hbmltYXRlKCkKLSAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCi0gICAgICAgICAgICAgICAgLnNldFN0YXJ0RGVsYXkoZGVsYXkpCi0gICAgICAgICAgICAgICAgLnNldER1cmF0aW9uKGR1cmF0aW9uKQotICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB0YXJnZXQuYW5pbWF0ZSgpCi0gICAgICAgICAgICAgICAgLmFscGhhKDFmKQotICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KGRlbGF5KQotICAgICAgICAgICAgICAgIC5zZXREdXJhdGlvbihkdXJhdGlvbik7CisgICAgICAgIFZpZXdbXSBwcml2YXRlVmlld3MgPSBtSXNTdW1tYXJ5V2l0aENoaWxkcmVuID8KKyAgICAgICAgICAgICAgICBuZXcgVmlld1tdIHttQ2hpbGRyZW5Db250YWluZXIsIG1Ob3RpZmljYXRpb25IZWFkZXJ9CisgICAgICAgICAgICAgICAgOiBuZXcgVmlld1tdIHttUHJpdmF0ZUxheW91dH07CisgICAgICAgIFZpZXdbXSBwdWJsaWNWaWV3cyA9IG5ldyBWaWV3W10ge21QdWJsaWNMYXlvdXR9OworICAgICAgICBWaWV3W10gaGlkZGVuQ2hpbGRyZW4gPSBtU2hvd2luZ1B1YmxpYyA/IHByaXZhdGVWaWV3cyA6IHB1YmxpY1ZpZXdzOworICAgICAgICBWaWV3W10gc2hvd25DaGlsZHJlbiA9IG1TaG93aW5nUHVibGljID8gcHVibGljVmlld3MgOiBwcml2YXRlVmlld3M7CisgICAgICAgIGZvciAoZmluYWwgVmlldyBoaWRkZW5WaWV3IDogaGlkZGVuQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGhpZGRlblZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgaGlkZGVuVmlldy5hbmltYXRlKCkuY2FuY2VsKCk7CisgICAgICAgICAgICBoaWRkZW5WaWV3LmFuaW1hdGUoKQorICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMGYpCisgICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KGRlbGF5KQorICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZHVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGRlblZpZXcuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGZvciAoVmlldyBzaG93VmlldyA6IHNob3duQ2hpbGRyZW4pIHsKKyAgICAgICAgICAgIHNob3dWaWV3LnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKKyAgICAgICAgICAgIHNob3dWaWV3LnNldEFscGhhKDBmKTsKKyAgICAgICAgICAgIHNob3dWaWV3LmFuaW1hdGUoKS5jYW5jZWwoKTsKKyAgICAgICAgICAgIHNob3dWaWV3LmFuaW1hdGUoKQorICAgICAgICAgICAgICAgICAgICAuYWxwaGEoMWYpCisgICAgICAgICAgICAgICAgICAgIC5zZXRTdGFydERlbGF5KGRlbGF5KQorICAgICAgICAgICAgICAgICAgICAuc2V0RHVyYXRpb24oZHVyYXRpb24pOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVZldG9CdXR0b24oKSB7CkBAIC05MzAsNiArOTYxLDkgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0TWluSGVpZ2h0KCkgeworICAgICAgICBpZiAobUlzU3VtbWFyeVdpdGhDaGlsZHJlbiAmJiAhaXNHcm91cEV4cGFuZGVkKCkgJiYgIW1TaG93aW5nUHVibGljKSB7CisgICAgICAgICAgICByZXR1cm4gbUNoaWxkcmVuQ29udGFpbmVyLmdldE1pbkhlaWdodCgpOworICAgICAgICB9CiAgICAgICAgIE5vdGlmaWNhdGlvbkNvbnRlbnRWaWV3IHNob3dpbmdMYXlvdXQgPSBnZXRTaG93aW5nTGF5b3V0KCk7CiAgICAgICAgIHJldHVybiBzaG93aW5nTGF5b3V0LmdldE1pbkhlaWdodCgpOwogICAgIH0KQEAgLTkzNywxNyArOTcxLDEyIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRNaW5FeHBhbmRIZWlnaHQoKSB7CiAgICAgICAgIGlmIChtSXNTdW1tYXJ5V2l0aENoaWxkcmVuICYmICFtT25LZXlndWFyZCkgewotICAgICAgICAgICAgcmV0dXJuIG1DaGlsZHJlbkNvbnRhaW5lci5nZXRNaW5IZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtQ2hpbGRyZW5Db250YWluZXIuZ2V0TWluRXhwYW5kSGVpZ2h0KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGdldE1pbkhlaWdodCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29sZWFuIHNob3VsZExpbWl0Vmlld0hlaWdodCgpIHsKLSAgICAgICAgcmV0dXJuICFtSXNTdW1tYXJ5V2l0aENoaWxkcmVuOwotICAgIH0KLQotICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldENsaXBUb3BBbW91bnQoaW50IGNsaXBUb3BBbW91bnQpIHsKICAgICAgICAgc3VwZXIuc2V0Q2xpcFRvcEFtb3VudChjbGlwVG9wQW1vdW50KTsKICAgICAgICAgbVByaXZhdGVMYXlvdXQuc2V0Q2xpcFRvcEFtb3VudChjbGlwVG9wQW1vdW50KTsKQEAgLTk2Nyw5ICs5OTYsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5leHBhbmRfYnV0dG9uKTsKICAgICAgICAgICAgIGV4cGFuZEJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZJU0lCTEUpOwogICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkhlYWRlci5zZXRPbkNsaWNrTGlzdGVuZXIobUV4cGFuZENsaWNrTGlzdGVuZXIpOwotICAgICAgICAgICAgYWRkVmlldyhtTm90aWZpY2F0aW9uSGVhZGVyKTsKKyAgICAgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXJXcmFwcGVyID0gTm90aWZpY2F0aW9uVmlld1dyYXBwZXIud3JhcChnZXRDb250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXIpOworICAgICAgICAgICAgYWRkVmlldyhtTm90aWZpY2F0aW9uSGVhZGVyLCBpbmRleE9mQ2hpbGQobUNoaWxkcmVuQ29udGFpbmVyKSArIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaGVhZGVyLnJlYXBwbHkoZ2V0Q29udGV4dCgpLCBtTm90aWZpY2F0aW9uSGVhZGVyKTsKKyAgICAgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXJXcmFwcGVyLm5vdGlmeUNvbnRlbnRVcGRhdGVkKCk7CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlSGVhZGVyRXhwYW5kQnV0dG9uKCk7CiAgICAgICAgIHVwZGF0ZUNoaWxkcmVuSGVhZGVyQXBwZWFyYW5jZSgpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9FeHBhbmRhYmxlVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9FeHBhbmRhYmxlVmlldy5qYXZhCmluZGV4IDUxNjAyZTcuLmQ2ODU1YTUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvRXhwYW5kYWJsZVZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0V4cGFuZGFibGVWaWV3LmphdmEKQEAgLTE3LDEyICsxNywxMyBAQAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXI7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBhaW50OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OworCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuc3RhY2suTm90aWZpY2F0aW9uU3RhY2tTY3JvbGxMYXlvdXQ7CiAKQEAgLTUzLDEzICs1NCwxMSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICAgICAgYm9vbGVhbiBsaW1pdFZpZXdIZWlnaHQgPSBzaG91bGRMaW1pdFZpZXdIZWlnaHQoKTsKLSAgICAgICAgaW50IG93bk1heEhlaWdodCA9IGxpbWl0Vmlld0hlaWdodCA/IG1NYXhWaWV3SGVpZ2h0IDogSW50ZWdlci5NQVhfVkFMVUU7CisgICAgICAgIGZpbmFsIGludCBnaXZlblNpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKKyAgICAgICAgaW50IG93bk1heEhlaWdodCA9IEludGVnZXIuTUFYX1ZBTFVFOwogICAgICAgICBpbnQgaGVpZ2h0TW9kZSA9IE1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgICBib29sZWFuIGhhc0ZpeGVkSGVpZ2h0ID0gaGVpZ2h0TW9kZSA9PSBNZWFzdXJlU3BlYy5FWEFDVExZOwotICAgICAgICBpZiAoaGFzRml4ZWRIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBoZWlnaHQgc2V0IGluIG91ciBsYXlvdXQsIHNvIHdlIHdhbnQgdG8gYmUgYXQgbW9zdCBhcyBiaWcgYXMgZ2l2ZW4KLSAgICAgICAgICAgIG93bk1heEhlaWdodCA9IE1hdGgubWluKE1lYXN1cmVTcGVjLmdldFNpemUoaGVpZ2h0TWVhc3VyZVNwZWMpLCBvd25NYXhIZWlnaHQpOworICAgICAgICBpZiAoaGVpZ2h0TW9kZSAhPSBNZWFzdXJlU3BlYy5VTlNQRUNJRklFRCAmJiBnaXZlblNpemUgIT0gMCkgeworICAgICAgICAgICAgb3duTWF4SGVpZ2h0ID0gTWF0aC5taW4oZ2l2ZW5TaXplLCBvd25NYXhIZWlnaHQpOwogICAgICAgICB9CiAgICAgICAgIGludCBuZXdIZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG93bk1heEhlaWdodCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7CiAgICAgICAgIGludCBtYXhDaGlsZEhlaWdodCA9IDA7CkBAIC03NCw3ICs3Myw3IEBACiAgICAgICAgICAgICBpZiAobGF5b3V0UGFyYW1zLmhlaWdodCAhPSBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkgewogICAgICAgICAgICAgICAgIGlmIChsYXlvdXRQYXJhbXMuaGVpZ2h0ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gQW4gYWN0dWFsIGhlaWdodCBpcyBzZXQKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRIZWlnaHRTcGVjID0gbGF5b3V0UGFyYW1zLmhlaWdodCA+IG93bk1heEhlaWdodCAmJiBsaW1pdFZpZXdIZWlnaHQKKyAgICAgICAgICAgICAgICAgICAgY2hpbGRIZWlnaHRTcGVjID0gbGF5b3V0UGFyYW1zLmhlaWdodCA+IG93bk1heEhlaWdodAogICAgICAgICAgICAgICAgICAgICAgICAgPyBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMob3duTWF4SGVpZ2h0LCBNZWFzdXJlU3BlYy5FWEFDVExZKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMobGF5b3V0UGFyYW1zLmhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtODcsNyArODYsOCBAQAogICAgICAgICAgICAgICAgIG1NYXRjaFBhcmVudFZpZXdzLmFkZChjaGlsZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaW50IG93bkhlaWdodCA9IGhhc0ZpeGVkSGVpZ2h0ID8gb3duTWF4SGVpZ2h0IDogTWF0aC5taW4ob3duTWF4SGVpZ2h0LCBtYXhDaGlsZEhlaWdodCk7CisgICAgICAgIGludCBvd25IZWlnaHQgPSBoZWlnaHRNb2RlID09IE1lYXN1cmVTcGVjLkVYQUNUTFkKKyAgICAgICAgICAgICAgICA/IGdpdmVuU2l6ZSA6IE1hdGgubWluKG93bk1heEhlaWdodCwgbWF4Q2hpbGRIZWlnaHQpOwogICAgICAgICBuZXdIZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG93bkhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CiAgICAgICAgIGZvciAoVmlldyBjaGlsZCA6IG1NYXRjaFBhcmVudFZpZXdzKSB7CiAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlKGdldENoaWxkTWVhc3VyZVNwZWMoCkBAIC05OSwxMCArOTksNiBAQAogICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbih3aWR0aCwgb3duSGVpZ2h0KTsKICAgICB9CiAKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBzaG91bGRMaW1pdFZpZXdIZWlnaHQoKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewogICAgICAgICBzdXBlci5vbkxheW91dChjaGFuZ2VkLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwpAQCAtMTI5LDI2ICsxMjUsMTEgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaEdlbmVyaWNNb3Rpb25FdmVudChNb3Rpb25FdmVudCBldikgewotICAgICAgICBpZiAoZmlsdGVyTW90aW9uRXZlbnQoZXYpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIuZGlzcGF0Y2hHZW5lcmljTW90aW9uRXZlbnQoZXYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNwYXRjaFRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgaWYgKGZpbHRlck1vdGlvbkV2ZW50KGV2KSkgewotICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmRpc3BhdGNoVG91Y2hFdmVudChldik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGZpbHRlck1vdGlvbkV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIHJldHVybiBldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTgotICAgICAgICAgICAgICAgICYmIGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpICE9IE1vdGlvbkV2ZW50LkFDVElPTl9IT1ZFUl9FTlRFUgotICAgICAgICAgICAgICAgICYmIGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpICE9IE1vdGlvbkV2ZW50LkFDVElPTl9IT1ZFUl9NT1ZFCi0gICAgICAgICAgICAgICAgfHwgZXZlbnQuZ2V0WSgpID4gbUNsaXBUb3BBbW91bnQgJiYgZXZlbnQuZ2V0WSgpIDwgbUFjdHVhbEhlaWdodDsKKyAgICBwdWJsaWMgYm9vbGVhbiBwb2ludEluVmlldyhmbG9hdCBsb2NhbFgsIGZsb2F0IGxvY2FsWSwgZmxvYXQgc2xvcCkgeworICAgICAgICBmbG9hdCB0b3AgPSBtQ2xpcFRvcEFtb3VudDsKKyAgICAgICAgZmxvYXQgYm90dG9tID0gbUFjdHVhbEhlaWdodDsKKyAgICAgICAgcmV0dXJuIGxvY2FsWCA+PSAtc2xvcCAmJiBsb2NhbFkgPj0gdG9wIC0gc2xvcCAmJiBsb2NhbFggPCAoKG1SaWdodCAtIG1MZWZ0KSArIHNsb3ApICYmCisgICAgICAgICAgICAgICAgbG9jYWxZIDwgKGJvdHRvbSArIHNsb3ApOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzg0LDYgKzM2NSwxOSBAQAogICAgICAgICBtTWluQ2xpcFRvcEFtb3VudCA9IG1pbkNsaXBUb3BBbW91bnQ7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0TGF5ZXJUeXBlKGludCBsYXllclR5cGUsIFBhaW50IHBhaW50KSB7CisgICAgICAgIGlmIChoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpKSB7CisgICAgICAgICAgICBzdXBlci5zZXRMYXllclR5cGUobGF5ZXJUeXBlLCBwYWludCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNPdmVybGFwcGluZ1JlbmRlcmluZygpIHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlIGl0IHdpbGwgYmUgY2xpcHBlZAorICAgICAgICByZXR1cm4gc3VwZXIuaGFzT3ZlcmxhcHBpbmdSZW5kZXJpbmcoKSAmJiBnZXRBY3R1YWxIZWlnaHQoKSA8PSBnZXRIZWlnaHQoKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBBIGxpc3RlbmVyIG5vdGlmeWluZyB3aGVuIHtAbGluayAjZ2V0QWN0dWFsSGVpZ2h0fSBjaGFuZ2VzLgogICAgICAqLwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9LZXlib2FyZFNob3J0Y3V0cy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9LZXlib2FyZFNob3J0Y3V0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNmZiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL0tleWJvYXJkU2hvcnRjdXRzLmphdmEKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7CitpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQ29sb3JEcmF3YWJsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleWJvYXJkU2hvcnRjdXRHcm91cDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Ym9hcmRTaG9ydGN1dEluZm87CitpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuS2V5Ym9hcmRTaG9ydGN1dHNSZWNlaXZlcjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5SZWNlbnRzOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkNvbnRleHQuTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0U7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3IuVFJBTlNQQVJFTlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5HcmF2aXR5LlRPUDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1lTVEVNX0RJQUxPRzsKKworLyoqCisgKiBDb250YWlucyBmdW5jdGlvbmFsaXR5IGZvciBoYW5kbGluZyBrZXlib2FyZCBzaG9ydGN1dHMuCisgKi8KK3B1YmxpYyBjbGFzcyBLZXlib2FyZFNob3J0Y3V0cyB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJLZXlib2FyZFNob3J0Y3V0cyI7CisKKyAgICBwcml2YXRlIERpYWxvZyBtS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2c7CisKKyAgICBwdWJsaWMgS2V5Ym9hcmRTaG9ydGN1dHMoKSB7fQorCisgICAgcHVibGljIHZvaWQgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHMoZmluYWwgQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIGlmIChtS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2cgPT0gbnVsbCkgeworICAgICAgICAgICAgUmVjZW50cy5nZXRTeXN0ZW1TZXJ2aWNlcygpLnJlcXVlc3RLZXlib2FyZFNob3J0Y3V0cyhjb250ZXh0LAorICAgICAgICAgICAgICAgIG5ldyBLZXlib2FyZFNob3J0Y3V0c1JlY2VpdmVyKCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25LZXlib2FyZFNob3J0Y3V0c1JlY2VpdmVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8S2V5Ym9hcmRTaG9ydGN1dEdyb3VwPiByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEtleWJvYXJkU2hvcnRjdXRHcm91cCBzeXN0ZW1Hcm91cCA9IG5ldyBLZXlib2FyZFNob3J0Y3V0R3JvdXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcua2V5Ym9hcmRfc2hvcnRjdXRfZ3JvdXBfc3lzdGVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1Hcm91cC5hZGRJdGVtKG5ldyBLZXlib2FyZFNob3J0Y3V0SW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5rZXlib2FyZF9zaG9ydGN1dF9ncm91cF9zeXN0ZW1faG9tZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1x1MjM4NicsIEtleUV2ZW50Lk1FVEFfTUVUQV9PTikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtR3JvdXAuYWRkSXRlbShuZXcgS2V5Ym9hcmRTaG9ydGN1dEluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcua2V5Ym9hcmRfc2hvcnRjdXRfZ3JvdXBfc3lzdGVtX2JhY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdTAwN0YnLCBLZXlFdmVudC5NRVRBX01FVEFfT04pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbUdyb3VwLmFkZEl0ZW0obmV3IEtleWJvYXJkU2hvcnRjdXRJbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmtleWJvYXJkX3Nob3J0Y3V0X2dyb3VwX3N5c3RlbV9yZWNlbnRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHUwMDA5JywgS2V5RXZlbnQuTUVUQV9BTFRfT04pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoc3lzdGVtR3JvdXApOworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiS2V5Ym9hcmQgc2hvcnRjdXRzIHJlY2VpdmVkOiAiICsgU3RyaW5nLnZhbHVlT2YocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG93S2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2coY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpc21pc3NLZXlib2FyZFNob3J0Y3V0c0RpYWxvZygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNob3dLZXlib2FyZFNob3J0Y3V0c0RpYWxvZyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGRpYWxvZy4KKyAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBkaWFsb2dCdWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoY29udGV4dCk7CisgICAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyID0gKExheW91dEluZmxhdGVyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgICAgICAgICAgTEFZT1VUX0lORkxBVEVSX1NFUlZJQ0UpOworICAgICAgICBmaW5hbCBWaWV3IGtleWJvYXJkU2hvcnRjdXRzVmlldyA9IGluZmxhdGVyLmluZmxhdGUoCisgICAgICAgICAgICAgICAgUi5sYXlvdXQua2V5Ym9hcmRfc2hvcnRjdXRzX3ZpZXcsIG51bGwpOworCisgICAgICAgIHBvcHVsYXRlS2V5Ym9hcmRTaG9ydGN1dHMoa2V5Ym9hcmRTaG9ydGN1dHNWaWV3LmZpbmRWaWV3QnlJZCgKKyAgICAgICAgICAgICAgICBSLmlkLmtleWJvYXJkX3Nob3J0Y3V0c193cmFwcGVyKSk7CisgICAgICAgIGRpYWxvZ0J1aWxkZXIuc2V0VmlldyhrZXlib2FyZFNob3J0Y3V0c1ZpZXcpOworICAgICAgICBtS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2cgPSBkaWFsb2dCdWlsZGVyLmNyZWF0ZSgpOworICAgICAgICBtS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2cuc2V0Q2FuY2VsZWRPblRvdWNoT3V0c2lkZSh0cnVlKTsKKworICAgICAgICAvLyBTZXR1cCB3aW5kb3cuCisgICAgICAgIFdpbmRvdyBrZXlib2FyZFNob3J0Y3V0c1dpbmRvdyA9IG1LZXlib2FyZFNob3J0Y3V0c0RpYWxvZy5nZXRXaW5kb3coKTsKKyAgICAgICAga2V5Ym9hcmRTaG9ydGN1dHNXaW5kb3cuc2V0VHlwZShUWVBFX1NZU1RFTV9ESUFMT0cpOworICAgICAgICBrZXlib2FyZFNob3J0Y3V0c1dpbmRvdy5zZXRCYWNrZ3JvdW5kRHJhd2FibGUoCisgICAgICAgICAgICAgICAgbmV3IENvbG9yRHJhd2FibGUoVFJBTlNQQVJFTlQpKTsKKyAgICAgICAga2V5Ym9hcmRTaG9ydGN1dHNXaW5kb3cuc2V0R3Jhdml0eShUT1ApOworICAgICAgICBrZXlib2FyZFNob3J0Y3V0c1ZpZXcucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgbUtleWJvYXJkU2hvcnRjdXRzRGlhbG9nLnNob3coKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGlzbWlzc0tleWJvYXJkU2hvcnRjdXRzRGlhbG9nKCkgeworICAgICAgICBpZiAobUtleWJvYXJkU2hvcnRjdXRzRGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1LZXlib2FyZFNob3J0Y3V0c0RpYWxvZy5kaXNtaXNzKCk7CisgICAgICAgICAgICBtS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2cgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGtleWJvYXJkIHNob3J0Y3V0cyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHBvcHVsYXRlZC4KKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gcG9wdWxhdGVLZXlib2FyZFNob3J0Y3V0cyhWaWV3IGtleWJvYXJkU2hvcnRjdXRzTGF5b3V0KSB7CisgICAgICAgIC8vIFRPRE86IFBvcHVsYXRlIHNob3J0Y3V0cy4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25Db250ZW50Vmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25Db250ZW50Vmlldy5qYXZhCmluZGV4IGRhMDFkNTQuLjAyYTM5ZTcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uQ29udGVudFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkNvbnRlbnRWaWV3LmphdmEKQEAgLTE2LDEyICsxNiwxNSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2JhcjsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5SZW1vdGVJbnB1dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLk91dGxpbmU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5QYWludDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmY7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmWGZlcm1vZGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5TdGF0dXNCYXJOb3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTm90aWZpY2F0aW9uSGVhZGVyVmlldzsKQEAgLTM3LDYgKzQwLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIubm90aWZpY2F0aW9uLkh5YnJpZE5vdGlmaWNhdGlvblZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLm5vdGlmaWNhdGlvbi5IeWJyaWROb3RpZmljYXRpb25WaWV3TWFuYWdlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuTm90aWZpY2F0aW9uR3JvdXBNYW5hZ2VyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuUmVtb3RlSW5wdXRWaWV3OwogCiAvKioKICAqIEEgZnJhbWUgbGF5b3V0IGNvbnRhaW5pbmcgdGhlIGFjdHVhbCBwYXlsb2FkIG9mIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyB0aGUgY29udHJhY3RlZCwKQEAgLTUyLDEwICs1NiwxMSBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSVNJQkxFX1RZUEVfU0lOR0xFTElORSA9IDM7CiAKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUNsaXBCb3VuZHMgPSBuZXcgUmVjdCgpOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1IZWFkc1VwSGVpZ2h0OwogICAgIHByaXZhdGUgZmluYWwgaW50IG1Sb3VuZFJlY3RSYWRpdXM7CiAgICAgcHJpdmF0ZSBmaW5hbCBJbnRlcnBvbGF0b3IgbUxpbmVhckludGVycG9sYXRvciA9IG5ldyBMaW5lYXJJbnRlcnBvbGF0b3IoKTsKICAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gbVJvdW5kUmVjdENsaXBwaW5nRW5hYmxlZDsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtTWluQ29udHJhY3RlZEhlaWdodDsKKwogCiAgICAgcHJpdmF0ZSBWaWV3IG1Db250cmFjdGVkQ2hpbGQ7CiAgICAgcHJpdmF0ZSBWaWV3IG1FeHBhbmRlZENoaWxkOwpAQCAtNzcsOCArODIsMTEgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbVNob3dpbmdMZWdhY3lCYWNrZ3JvdW5kOwogICAgIHByaXZhdGUgYm9vbGVhbiBtSXNDaGlsZEluR3JvdXA7CiAgICAgcHJpdmF0ZSBpbnQgbVNtYWxsSGVpZ2h0OworICAgIHByaXZhdGUgaW50IG1IZWFkc1VwSGVpZ2h0OworICAgIHByaXZhdGUgaW50IG1Ob3RpZmljYXRpb25NYXhIZWlnaHQ7CiAgICAgcHJpdmF0ZSBTdGF0dXNCYXJOb3RpZmljYXRpb24gbVN0YXR1c0Jhck5vdGlmaWNhdGlvbjsKICAgICBwcml2YXRlIE5vdGlmaWNhdGlvbkdyb3VwTWFuYWdlciBtR3JvdXBNYW5hZ2VyOworICAgIHByaXZhdGUgUmVtb3RlSW5wdXRDb250cm9sbGVyIG1SZW1vdGVJbnB1dENvbnRyb2xsZXI7CiAKICAgICBwcml2YXRlIGZpbmFsIFZpZXdUcmVlT2JzZXJ2ZXIuT25QcmVEcmF3TGlzdGVuZXIgbUVuYWJsZUFuaW1hdGlvblByZWRyYXdMaXN0ZW5lcgogICAgICAgICAgICAgPSBuZXcgVmlld1RyZWVPYnNlcnZlci5PblByZURyYXdMaXN0ZW5lcigpIHsKQEAgLTk4LDIyICsxMDYsMjcgQEAKICAgICAgICAgfQogICAgIH07CiAgICAgcHJpdmF0ZSBPbkNsaWNrTGlzdGVuZXIgbUV4cGFuZENsaWNrTGlzdGVuZXI7CisgICAgcHJpdmF0ZSBib29sZWFuIG1CZWZvcmVOOworICAgIHByaXZhdGUgYm9vbGVhbiBtRXhwYW5kYWJsZTsKIAogICAgIHB1YmxpYyBOb3RpZmljYXRpb25Db250ZW50VmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewogICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CiAgICAgICAgIG1IeWJyaWRWaWV3TWFuYWdlciA9IG5ldyBIeWJyaWROb3RpZmljYXRpb25WaWV3TWFuYWdlcihnZXRDb250ZXh0KCksIHRoaXMpOwogICAgICAgICBtRmFkZVBhaW50LnNldFhmZXJtb2RlKG5ldyBQb3J0ZXJEdWZmWGZlcm1vZGUoUG9ydGVyRHVmZi5Nb2RlLkFERCkpOwotICAgICAgICBtSGVhZHNVcEhlaWdodCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLm5vdGlmaWNhdGlvbl9taWRfaGVpZ2h0KTsKICAgICAgICAgbVJvdW5kUmVjdFJhZGl1cyA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICBSLmRpbWVuLm5vdGlmaWNhdGlvbl9tYXRlcmlhbF9yb3VuZGVkX3JlY3RfcmFkaXVzKTsKICAgICAgICAgbVJvdW5kUmVjdENsaXBwaW5nRW5hYmxlZCA9IGdldFJlc291cmNlcygpLmdldEJvb2xlYW4oCiAgICAgICAgICAgICAgICAgUi5ib29sLmNvbmZpZ19ub3RpZmljYXRpb25zX3JvdW5kX3JlY3RfY2xpcHBpbmcpOworICAgICAgICBtTWluQ29udHJhY3RlZEhlaWdodCA9IGdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBSLmRpbWVuLm1pbl9ub3RpZmljYXRpb25fbGF5b3V0X2hlaWdodCk7CiAgICAgICAgIHJlc2V0KHRydWUpOwogICAgICAgICBzZXRPdXRsaW5lUHJvdmlkZXIobU91dGxpbmVQcm92aWRlcik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0U21hbGxIZWlnaHQoaW50IHNtYWxsSGVpZ2h0KSB7CisgICAgcHVibGljIHZvaWQgc2V0SGVpZ2h0cyhpbnQgc21hbGxIZWlnaHQsIGludCBoZWFkc1VwTWF4SGVpZ2h0LCBpbnQgbWF4SGVpZ2h0KSB7CiAgICAgICAgIG1TbWFsbEhlaWdodCA9IHNtYWxsSGVpZ2h0OworICAgICAgICBtSGVhZHNVcEhlaWdodCA9IGhlYWRzVXBNYXhIZWlnaHQ7CisgICAgICAgIG1Ob3RpZmljYXRpb25NYXhIZWlnaHQgPSBtYXhIZWlnaHQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xMjcsMTMgKzE0MCwyMyBAQAogICAgICAgICB9CiAgICAgICAgIGludCBtYXhDaGlsZEhlaWdodCA9IDA7CiAgICAgICAgIGlmIChtQ29udHJhY3RlZENoaWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludCBzaXplID0gTWF0aC5taW4obWF4U2l6ZSwgbVNtYWxsSGVpZ2h0KTsKLSAgICAgICAgICAgIG1Db250cmFjdGVkQ2hpbGQubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLAotICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoc2l6ZSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSkpOwotICAgICAgICAgICAgbWF4Q2hpbGRIZWlnaHQgPSBNYXRoLm1heChtYXhDaGlsZEhlaWdodCwgbUNvbnRyYWN0ZWRDaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpKTsKKyAgICAgICAgICAgIGludCBoZWlnaHRTcGVjOworICAgICAgICAgICAgaWYgKHNob3VsZENvbnRyYWN0ZWRCZUZpeGVkU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaW50IHNpemUgPSBNYXRoLm1pbihtYXhTaXplLCBtU21hbGxIZWlnaHQpOworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoc2l6ZSwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMobWF4U2l6ZSwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29udHJhY3RlZENoaWxkLm1lYXN1cmUod2lkdGhNZWFzdXJlU3BlYywgaGVpZ2h0U3BlYyk7CisgICAgICAgICAgICBpbnQgbWVhc3VyZWRIZWlnaHQgPSBtQ29udHJhY3RlZENoaWxkLmdldE1lYXN1cmVkSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAobWVhc3VyZWRIZWlnaHQgPCBtTWluQ29udHJhY3RlZEhlaWdodCkgeworICAgICAgICAgICAgICAgIGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMobU1pbkNvbnRyYWN0ZWRIZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOworICAgICAgICAgICAgICAgIG1Db250cmFjdGVkQ2hpbGQubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBoZWlnaHRTcGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1heENoaWxkSGVpZ2h0ID0gTWF0aC5tYXgobWF4Q2hpbGRIZWlnaHQsIG1lYXN1cmVkSGVpZ2h0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobUV4cGFuZGVkQ2hpbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgaW50IHNpemUgPSBtYXhTaXplOworICAgICAgICAgICAgaW50IHNpemUgPSBNYXRoLm1pbihtYXhTaXplLCBtTm90aWZpY2F0aW9uTWF4SGVpZ2h0KTsKICAgICAgICAgICAgIFZpZXdHcm91cC5MYXlvdXRQYXJhbXMgbGF5b3V0UGFyYW1zID0gbUV4cGFuZGVkQ2hpbGQuZ2V0TGF5b3V0UGFyYW1zKCk7CiAgICAgICAgICAgICBpZiAobGF5b3V0UGFyYW1zLmhlaWdodCA+PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gQW4gYWN0dWFsIGhlaWdodCBpcyBzZXQKQEAgLTE1MCw3ICsxNzMsNyBAQAogICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcyBsYXlvdXRQYXJhbXMgPSBtSGVhZHNVcENoaWxkLmdldExheW91dFBhcmFtcygpOwogICAgICAgICAgICAgaWYgKGxheW91dFBhcmFtcy5oZWlnaHQgPj0gMCkgewogICAgICAgICAgICAgICAgIC8vIEFuIGFjdHVhbCBoZWlnaHQgaXMgc2V0Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IE1hdGgubWluKG1heFNpemUsIGxheW91dFBhcmFtcy5oZWlnaHQpOworICAgICAgICAgICAgICAgIHNpemUgPSBNYXRoLm1pbihzaXplLCBsYXlvdXRQYXJhbXMuaGVpZ2h0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1IZWFkc1VwQ2hpbGQubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLAogICAgICAgICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoc2l6ZSwgTWVhc3VyZVNwZWMuQVRfTU9TVCkpOwpAQCAtMTY2LDYgKzE4OSwxMCBAQAogICAgICAgICBzZXRNZWFzdXJlZERpbWVuc2lvbih3aWR0aCwgb3duSGVpZ2h0KTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkQ29udHJhY3RlZEJlRml4ZWRTaXplKCkgeworICAgICAgICByZXR1cm4gbUJlZm9yZU4gJiYgbUNvbnRyYWN0ZWRXcmFwcGVyIGluc3RhbmNlb2YgTm90aWZpY2F0aW9uQ3VzdG9tVmlld1dyYXBwZXI7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgb25MYXlvdXQoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7CiAgICAgICAgIHN1cGVyLm9uTGF5b3V0KGNoYW5nZWQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CkBAIC0yODMsMTkgKzMxMCwxOSBAQAogICAgIH0KIAogICAgIHB1YmxpYyBpbnQgZ2V0TWF4SGVpZ2h0KCkgewotICAgICAgICBpZiAobUlzSGVhZHNVcCAmJiBtSGVhZHNVcENoaWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtSGVhZHNVcENoaWxkLmdldEhlaWdodCgpOwotICAgICAgICB9IGVsc2UgaWYgKG1FeHBhbmRlZENoaWxkICE9IG51bGwpIHsKKyAgICAgICAgaWYgKG1FeHBhbmRlZENoaWxkICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBtRXhwYW5kZWRDaGlsZC5nZXRIZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChtSXNIZWFkc1VwICYmIG1IZWFkc1VwQ2hpbGQgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG1IZWFkc1VwQ2hpbGQuZ2V0SGVpZ2h0KCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1TbWFsbEhlaWdodDsKKyAgICAgICAgcmV0dXJuIG1Db250cmFjdGVkQ2hpbGQuZ2V0SGVpZ2h0KCk7CiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNaW5IZWlnaHQoKSB7CiAgICAgICAgIGlmIChtSXNDaGlsZEluR3JvdXAgJiYgIWlzR3JvdXBFeHBhbmRlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gbVNpbmdsZUxpbmVWaWV3LmdldEhlaWdodCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIG1TbWFsbEhlaWdodDsKKyAgICAgICAgICAgIHJldHVybiBtQ29udHJhY3RlZENoaWxkLmdldEhlaWdodCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzEsNiArNDU4LDkgQEAKICAgICAgICAgaWYgKCFub0V4cGFuZGVkQ2hpbGQgJiYgbUNvbnRlbnRIZWlnaHQgPT0gbUV4cGFuZGVkQ2hpbGQuZ2V0SGVpZ2h0KCkpIHsKICAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfRVhQQU5ERUQ7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG1Jc0NoaWxkSW5Hcm91cCAmJiAhaXNHcm91cEV4cGFuZGVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfU0lOR0xFTElORTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChtSXNIZWFkc1VwICYmIG1IZWFkc1VwQ2hpbGQgIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKG1Db250ZW50SGVpZ2h0IDw9IG1IZWFkc1VwQ2hpbGQuZ2V0SGVpZ2h0KCkgfHwgbm9FeHBhbmRlZENoaWxkKSB7CkBAIC00MzksOSArNDY5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJMRV9UWVBFX0VYUEFOREVEOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1Jc0NoaWxkSW5Hcm91cCAmJiAhaXNHcm91cEV4cGFuZGVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gVklTSUJMRV9UWVBFX1NJTkdMRUxJTkU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1Db250ZW50SGVpZ2h0IDw9IG1TbWFsbEhlaWdodCB8fCBub0V4cGFuZGVkQ2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChtQ29udGVudEhlaWdodCA8PSBtQ29udHJhY3RlZENoaWxkLmdldEhlaWdodCgpIHx8IG5vRXhwYW5kZWRDaGlsZCkgewogICAgICAgICAgICAgICAgIHJldHVybiBWSVNJQkxFX1RZUEVfQ09OVFJBQ1RFRDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFZJU0lCTEVfVFlQRV9FWFBBTkRFRDsKQEAgLTQ1NywxMSArNDg1LDE1IEBACiAgICAgICAgIGlmIChtRGFyayA9PSBkYXJrIHx8IG1Db250cmFjdGVkQ2hpbGQgPT0gbnVsbCkgcmV0dXJuOwogICAgICAgICBtRGFyayA9IGRhcms7CiAgICAgICAgIG1Db250cmFjdGVkV3JhcHBlci5zZXREYXJrKGRhcmsgJiYgIW1TaG93aW5nTGVnYWN5QmFja2dyb3VuZCwgZmFkZSwgZGVsYXkpOworICAgICAgICBpZiAobVNpbmdsZUxpbmVWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1TaW5nbGVMaW5lVmlldy5zZXREYXJrKGRhcmssIGZhZGUsIGRlbGF5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldEhlYWRzVXAoYm9vbGVhbiBoZWFkc1VwKSB7CiAgICAgICAgIG1Jc0hlYWRzVXAgPSBoZWFkc1VwOwogICAgICAgICBzZWxlY3RMYXlvdXQoZmFsc2UgLyogYW5pbWF0ZSAqLywgdHJ1ZSAvKiBmb3JjZSAqLyk7CisgICAgICAgIHVwZGF0ZUV4cGFuZEJ1dHRvbnMobUV4cGFuZGFibGUpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNDgxLDkgKzUxMywxMSBAQAogICAgICAgICB1cGRhdGVTaW5nbGVMaW5lVmlldygpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIG9uTm90aWZpY2F0aW9uVXBkYXRlZChTdGF0dXNCYXJOb3RpZmljYXRpb24gc3RhdHVzQmFyTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgIG1TdGF0dXNCYXJOb3RpZmljYXRpb24gPSBzdGF0dXNCYXJOb3RpZmljYXRpb247CisgICAgcHVibGljIHZvaWQgb25Ob3RpZmljYXRpb25VcGRhdGVkKE5vdGlmaWNhdGlvbkRhdGEuRW50cnkgZW50cnkpIHsKKyAgICAgICAgbVN0YXR1c0Jhck5vdGlmaWNhdGlvbiA9IGVudHJ5Lm5vdGlmaWNhdGlvbjsKKyAgICAgICAgbUJlZm9yZU4gPSBlbnRyeS50YXJnZXRTZGsgPCBCdWlsZC5WRVJTSU9OX0NPREVTLk47CiAgICAgICAgIHVwZGF0ZVNpbmdsZUxpbmVWaWV3KCk7CisgICAgICAgIGFwcGx5UmVtb3RlSW5wdXQoZW50cnkpOwogICAgICAgICBzZWxlY3RMYXlvdXQoZmFsc2UgLyogYW5pbWF0ZSAqLywgdHJ1ZSAvKiBmb3JjZSAqLyk7CiAgICAgICAgIGlmIChtQ29udHJhY3RlZENoaWxkICE9IG51bGwpIHsKICAgICAgICAgICAgIG1Db250cmFjdGVkV3JhcHBlci5ub3RpZnlDb250ZW50VXBkYXRlZCgpOwpAQCAtNTA1LDE1ICs1MzksODcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCBhcHBseVJlbW90ZUlucHV0KGZpbmFsIE5vdGlmaWNhdGlvbkRhdGEuRW50cnkgZW50cnkpIHsKKyAgICAgICAgaWYgKG1SZW1vdGVJbnB1dENvbnRyb2xsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBoYXNSZW1vdGVJbnB1dCA9IGZhbHNlOworCisgICAgICAgIE5vdGlmaWNhdGlvbi5BY3Rpb25bXSBhY3Rpb25zID0gZW50cnkubm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLmFjdGlvbnM7CisgICAgICAgIGlmIChhY3Rpb25zICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZvciAoTm90aWZpY2F0aW9uLkFjdGlvbiBhIDogYWN0aW9ucykgeworICAgICAgICAgICAgICAgIGlmIChhLmdldFJlbW90ZUlucHV0cygpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChSZW1vdGVJbnB1dCByaSA6IGEuZ2V0UmVtb3RlSW5wdXRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaS5nZXRBbGxvd0ZyZWVGb3JtSW5wdXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlbW90ZUlucHV0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFZpZXcgYmlnQ29udGVudFZpZXcgPSBtRXhwYW5kZWRDaGlsZDsKKyAgICAgICAgaWYgKGJpZ0NvbnRlbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFwcGx5UmVtb3RlSW5wdXQoYmlnQ29udGVudFZpZXcsIGVudHJ5LCBoYXNSZW1vdGVJbnB1dCk7CisgICAgICAgIH0KKyAgICAgICAgVmlldyBoZWFkc1VwQ29udGVudFZpZXcgPSBtSGVhZHNVcENoaWxkOworICAgICAgICBpZiAoaGVhZHNVcENvbnRlbnRWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGFwcGx5UmVtb3RlSW5wdXQoaGVhZHNVcENvbnRlbnRWaWV3LCBlbnRyeSwgaGFzUmVtb3RlSW5wdXQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFwcGx5UmVtb3RlSW5wdXQoVmlldyB2aWV3LCBOb3RpZmljYXRpb25EYXRhLkVudHJ5IGVudHJ5LCBib29sZWFuIGhhc1JlbW90ZUlucHV0KSB7CisgICAgICAgIFZpZXcgYWN0aW9uQ29udGFpbmVyQ2FuZGlkYXRlID0gdmlldy5maW5kVmlld0J5SWQoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5hY3Rpb25zX2NvbnRhaW5lcik7CisgICAgICAgIGlmIChhY3Rpb25Db250YWluZXJDYW5kaWRhdGUgaW5zdGFuY2VvZiBGcmFtZUxheW91dCkgeworICAgICAgICAgICAgUmVtb3RlSW5wdXRWaWV3IGV4aXN0aW5nID0gKFJlbW90ZUlucHV0VmlldykKKyAgICAgICAgICAgICAgICAgICAgdmlldy5maW5kVmlld1dpdGhUYWcoUmVtb3RlSW5wdXRWaWV3LlZJRVdfVEFHKTsKKworICAgICAgICAgICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBleGlzdGluZy5vbk5vdGlmaWNhdGlvblVwZGF0ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCAmJiBoYXNSZW1vdGVJbnB1dCkgeworICAgICAgICAgICAgICAgIFZpZXdHcm91cCBhY3Rpb25Db250YWluZXIgPSAoRnJhbWVMYXlvdXQpIGFjdGlvbkNvbnRhaW5lckNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICBSZW1vdGVJbnB1dFZpZXcgcml2ID0gUmVtb3RlSW5wdXRWaWV3LmluZmxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgYWN0aW9uQ29udGFpbmVyLCBlbnRyeSwgbVJlbW90ZUlucHV0Q29udHJvbGxlcik7CisKKyAgICAgICAgICAgICAgICByaXYuc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7CisgICAgICAgICAgICAgICAgYWN0aW9uQ29udGFpbmVyLmFkZFZpZXcocml2LCBuZXcgTGF5b3V0UGFyYW1zKAorICAgICAgICAgICAgICAgICAgICAgICAgVmlld0dyb3VwLkxheW91dFBhcmFtcy5NQVRDSF9QQVJFTlQsCisgICAgICAgICAgICAgICAgICAgICAgICBWaWV3R3JvdXAuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGludCBjb2xvciA9IGVudHJ5Lm5vdGlmaWNhdGlvbi5nZXROb3RpZmljYXRpb24oKS5jb2xvcjsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3IgPT0gTm90aWZpY2F0aW9uLkNPTE9SX0RFRkFVTFQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBtQ29udGV4dC5nZXRDb2xvcihSLmNvbG9yLmRlZmF1bHRfcmVtb3RlX2lucHV0X2JhY2tncm91bmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByaXYuc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwTWFuYWdlcihOb3RpZmljYXRpb25Hcm91cE1hbmFnZXIgZ3JvdXBNYW5hZ2VyKSB7CiAgICAgICAgIG1Hcm91cE1hbmFnZXIgPSBncm91cE1hbmFnZXI7CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgc2V0UmVtb3RlSW5wdXRDb250cm9sbGVyKFJlbW90ZUlucHV0Q29udHJvbGxlciByKSB7CisgICAgICAgIG1SZW1vdGVJbnB1dENvbnRyb2xsZXIgPSByOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldEV4cGFuZENsaWNrTGlzdGVuZXIoT25DbGlja0xpc3RlbmVyIGV4cGFuZENsaWNrTGlzdGVuZXIpIHsKICAgICAgICAgbUV4cGFuZENsaWNrTGlzdGVuZXIgPSBleHBhbmRDbGlja0xpc3RlbmVyOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUV4cGFuZEJ1dHRvbnMoYm9vbGVhbiBleHBhbmRhYmxlKSB7CisgICAgICAgIG1FeHBhbmRhYmxlID0gZXhwYW5kYWJsZTsKKyAgICAgICAgLy8gaWYgdGhlIGV4cGFuZGVkIGNoaWxkIGhhcyB0aGUgc2FtZSBoZWlnaHQgYXMgdGhlIGNvbGxhcHNlZCBvbmUgd2UgaGlkZSBpdC4KKyAgICAgICAgaWYgKG1FeHBhbmRlZENoaWxkICE9IG51bGwgJiYgbUV4cGFuZGVkQ2hpbGQuZ2V0SGVpZ2h0KCkgIT0gMCAmJgorICAgICAgICAgICAgICAgICgobUlzSGVhZHNVcCAmJiBtRXhwYW5kZWRDaGlsZC5nZXRIZWlnaHQoKSA9PSBtSGVhZHNVcENoaWxkLmdldEhlaWdodCgpKSB8fAorICAgICAgICAgICAgICAgICghbUlzSGVhZHNVcCAmJiBtRXhwYW5kZWRDaGlsZC5nZXRIZWlnaHQoKSA9PSBtQ29udHJhY3RlZENoaWxkLmdldEhlaWdodCgpKSkpIHsKKyAgICAgICAgICAgIGV4cGFuZGFibGUgPSBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBpZiAobUV4cGFuZGVkQ2hpbGQgIT0gbnVsbCkgewogICAgICAgICAgICAgbUV4cGFuZGVkV3JhcHBlci51cGRhdGVFeHBhbmRhYmlsaXR5KGV4cGFuZGFibGUsIG1FeHBhbmRDbGlja0xpc3RlbmVyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25EYXRhLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkRhdGEuamF2YQppbmRleCA4OWVkYWUzLi4zY2MxYWI5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkRhdGEuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkRhdGEuamF2YQpAQCAtMTE1LDE3ICsxMTUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWROb3RpZmljYXRpb25CdWlsZGVyLm1ha2VCaWdDb250ZW50VmlldygpOwogICAgICAgICAgICAgICAgIGZpbmFsIFJlbW90ZVZpZXdzIG5ld0hlYWRzVXBDb250ZW50VmlldyA9CiAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkTm90aWZpY2F0aW9uQnVpbGRlci5tYWtlSGVhZHNVcENvbnRlbnRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uIHVwZGF0ZWRQdWJsaWNOb3RpZmljYXRpb24gPSB1cGRhdGVkTm90aWZpY2F0aW9uLnB1YmxpY1ZlcnNpb247Ci0gICAgICAgICAgICAgICAgZmluYWwgUmVtb3RlVmlld3MgbmV3UHViQ29udGVudFZpZXcgPSAodXBkYXRlZFB1YmxpY05vdGlmaWNhdGlvbiAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBOb3RpZmljYXRpb24uQnVpbGRlci5yZWNvdmVyQnVpbGRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LCB1cGRhdGVkUHVibGljTm90aWZpY2F0aW9uKS5tYWtlQ29udGVudFZpZXcoKQotICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsOworICAgICAgICAgICAgICAgIGZpbmFsIFJlbW90ZVZpZXdzIG5ld1B1YmxpY05vdGlmaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgPSB1cGRhdGVkTm90aWZpY2F0aW9uQnVpbGRlci5tYWtlUHVibGljQ29udGVudFZpZXcoKTsKIAogICAgICAgICAgICAgICAgIGFwcGx5SW5QbGFjZSA9IGNvbXBhcmVSZW1vdGVWaWV3cyhjYWNoZWRDb250ZW50VmlldywgbmV3Q29udGVudFZpZXcpCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb21wYXJlUmVtb3RlVmlld3MoY2FjaGVkQmlnQ29udGVudFZpZXcsIG5ld0JpZ0NvbnRlbnRWaWV3KQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29tcGFyZVJlbW90ZVZpZXdzKGNhY2hlZEhlYWRzVXBDb250ZW50VmlldywgbmV3SGVhZHNVcENvbnRlbnRWaWV3KQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29tcGFyZVJlbW90ZVZpZXdzKGNhY2hlZFB1YmxpY0NvbnRlbnRWaWV3LCBuZXdQdWJDb250ZW50Vmlldyk7Ci0gICAgICAgICAgICAgICAgY2FjaGVkUHVibGljQ29udGVudFZpZXcgPSBuZXdQdWJDb250ZW50VmlldzsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbXBhcmVSZW1vdGVWaWV3cyhjYWNoZWRQdWJsaWNDb250ZW50VmlldywgbmV3UHVibGljTm90aWZpY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBjYWNoZWRQdWJsaWNDb250ZW50VmlldyA9IG5ld1B1YmxpY05vdGlmaWNhdGlvbjsKICAgICAgICAgICAgICAgICBjYWNoZWRIZWFkc1VwQ29udGVudFZpZXcgPSBuZXdIZWFkc1VwQ29udGVudFZpZXc7CiAgICAgICAgICAgICAgICAgY2FjaGVkQmlnQ29udGVudFZpZXcgPSBuZXdCaWdDb250ZW50VmlldzsKICAgICAgICAgICAgICAgICBjYWNoZWRDb250ZW50VmlldyA9IG5ld0NvbnRlbnRWaWV3OwpAQCAtMTM2LDE0ICsxMzMsOCBAQAogICAgICAgICAgICAgICAgIGNhY2hlZENvbnRlbnRWaWV3ID0gYnVpbGRlci5tYWtlQ29udGVudFZpZXcoKTsKICAgICAgICAgICAgICAgICBjYWNoZWRCaWdDb250ZW50VmlldyA9IGJ1aWxkZXIubWFrZUJpZ0NvbnRlbnRWaWV3KCk7CiAgICAgICAgICAgICAgICAgY2FjaGVkSGVhZHNVcENvbnRlbnRWaWV3ID0gYnVpbGRlci5tYWtlSGVhZHNVcENvbnRlbnRWaWV3KCk7CisgICAgICAgICAgICAgICAgY2FjaGVkUHVibGljQ29udGVudFZpZXcgPSBidWlsZGVyLm1ha2VQdWJsaWNDb250ZW50VmlldygpOwogCi0gICAgICAgICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uIHB1YmxpY05vdGlmaWNhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkucHVibGljVmVyc2lvbjsKLSAgICAgICAgICAgICAgICBpZiAocHVibGljTm90aWZpY2F0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uLkJ1aWxkZXIgcHVibGljQnVpbGRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTm90aWZpY2F0aW9uLkJ1aWxkZXIucmVjb3ZlckJ1aWxkZXIoY3R4LCBwdWJsaWNOb3RpZmljYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBjYWNoZWRQdWJsaWNDb250ZW50VmlldyA9IHB1YmxpY0J1aWxkZXIubWFrZUNvbnRlbnRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFwcGx5SW5QbGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFwcGx5SW5QbGFjZTsKQEAgLTE4OCwyMiArMTc5LDMzIEBACiAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShFbnRyeSBhLCBFbnRyeSBiKSB7CiAgICAgICAgICAgICBmaW5hbCBTdGF0dXNCYXJOb3RpZmljYXRpb24gbmEgPSBhLm5vdGlmaWNhdGlvbjsKICAgICAgICAgICAgIGZpbmFsIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBuYiA9IGIubm90aWZpY2F0aW9uOwotICAgICAgICAgICAgZmluYWwgaW50IGFQcmlvcml0eSA9IG5hLmdldE5vdGlmaWNhdGlvbigpLnByaW9yaXR5OwotICAgICAgICAgICAgZmluYWwgaW50IGJQcmlvcml0eSA9IG5iLmdldE5vdGlmaWNhdGlvbigpLnByaW9yaXR5OworICAgICAgICAgICAgaW50IGFJbXBvcnRhbmNlID0gUmFua2luZy5JTVBPUlRBTkNFX0RFRkFVTFQ7CisgICAgICAgICAgICBpbnQgYkltcG9ydGFuY2UgPSBSYW5raW5nLklNUE9SVEFOQ0VfREVGQVVMVDsKKyAgICAgICAgICAgIGludCBhUmFuayA9IDA7CisgICAgICAgICAgICBpbnQgYlJhbmsgPSAwOworCisgICAgICAgICAgICBpZiAobVJhbmtpbmdNYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFJhbmtpbmdNYXAgYXMgcmVjZWl2ZWQgZnJvbSBOb01hbgorICAgICAgICAgICAgICAgIG1SYW5raW5nTWFwLmdldFJhbmtpbmcoYS5rZXksIG1SYW5raW5nQSk7CisgICAgICAgICAgICAgICAgbVJhbmtpbmdNYXAuZ2V0UmFua2luZyhiLmtleSwgbVJhbmtpbmdCKTsKKyAgICAgICAgICAgICAgICBhSW1wb3J0YW5jZSA9IG1SYW5raW5nQS5nZXRJbXBvcnRhbmNlKCk7CisgICAgICAgICAgICAgICAgYkltcG9ydGFuY2UgPSBtUmFua2luZ0IuZ2V0SW1wb3J0YW5jZSgpOworICAgICAgICAgICAgICAgIGFSYW5rID0gbVJhbmtpbmdBLmdldFJhbmsoKTsKKyAgICAgICAgICAgICAgICBiUmFuayA9IG1SYW5raW5nQi5nZXRSYW5rKCk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0cmluZyBtZWRpYU5vdGlmaWNhdGlvbiA9IG1FbnZpcm9ubWVudC5nZXRDdXJyZW50TWVkaWFOb3RpZmljYXRpb25LZXkoKTsKIAogICAgICAgICAgICAgLy8gUFJJT1JJVFlfTUlOIG1lZGlhIHN0cmVhbXMgYXJlIGFsbG93ZWQgdG8gZHJpZnQgdG8gdGhlIGJvdHRvbQogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBhTWVkaWEgPSBhLmtleS5lcXVhbHMobWVkaWFOb3RpZmljYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICYmIGFQcmlvcml0eSA+IE5vdGlmaWNhdGlvbi5QUklPUklUWV9NSU47CisgICAgICAgICAgICAgICAgICAgICYmIGFJbXBvcnRhbmNlID4gUmFua2luZy5JTVBPUlRBTkNFX0xPVzsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gYk1lZGlhID0gYi5rZXkuZXF1YWxzKG1lZGlhTm90aWZpY2F0aW9uKQotICAgICAgICAgICAgICAgICAgICAmJiBiUHJpb3JpdHkgPiBOb3RpZmljYXRpb24uUFJJT1JJVFlfTUlOOworICAgICAgICAgICAgICAgICAgICAmJiBiSW1wb3J0YW5jZSA+IFJhbmtpbmcuSU1QT1JUQU5DRV9MT1c7CiAKLSAgICAgICAgICAgIGJvb2xlYW4gYVN5c3RlbU1heCA9IGFQcmlvcml0eSA+PSBOb3RpZmljYXRpb24uUFJJT1JJVFlfTUFYICYmCisgICAgICAgICAgICBib29sZWFuIGFTeXN0ZW1NYXggPSBhSW1wb3J0YW5jZSA+PSBSYW5raW5nLklNUE9SVEFOQ0VfTUFYICYmCiAgICAgICAgICAgICAgICAgICAgIGlzU3lzdGVtTm90aWZpY2F0aW9uKG5hKTsKLSAgICAgICAgICAgIGJvb2xlYW4gYlN5c3RlbU1heCA9IGJQcmlvcml0eSA+PSBOb3RpZmljYXRpb24uUFJJT1JJVFlfTUFYICYmCisgICAgICAgICAgICBib29sZWFuIGJTeXN0ZW1NYXggPSBiSW1wb3J0YW5jZSA+PSBSYW5raW5nLklNUE9SVEFOQ0VfTUFYICYmCiAgICAgICAgICAgICAgICAgICAgIGlzU3lzdGVtTm90aWZpY2F0aW9uKG5iKTsKLSAgICAgICAgICAgIGludCBkID0gbmIuZ2V0U2NvcmUoKSAtIG5hLmdldFNjb3JlKCk7CiAKICAgICAgICAgICAgIGJvb2xlYW4gaXNIZWFkc1VwID0gYS5yb3cuaXNIZWFkc1VwKCk7CiAgICAgICAgICAgICBpZiAoaXNIZWFkc1VwICE9IGIucm93LmlzSGVhZHNVcCgpKSB7CkBAIC0yMTcsMTMgKzIxOSw4IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKGFTeXN0ZW1NYXggIT0gYlN5c3RlbU1heCkgewogICAgICAgICAgICAgICAgIC8vIFVwc29ydCBQUklPUklUWV9NQVggc3lzdGVtIG5vdGlmaWNhdGlvbnMKICAgICAgICAgICAgICAgICByZXR1cm4gYVN5c3RlbU1heCA/IC0xIDogMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobVJhbmtpbmdNYXAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFJhbmtpbmdNYXAgYXMgcmVjZWl2ZWQgZnJvbSBOb01hbgotICAgICAgICAgICAgICAgIG1SYW5raW5nTWFwLmdldFJhbmtpbmcoYS5rZXksIG1SYW5raW5nQSk7Ci0gICAgICAgICAgICAgICAgbVJhbmtpbmdNYXAuZ2V0UmFua2luZyhiLmtleSwgbVJhbmtpbmdCKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbVJhbmtpbmdBLmdldFJhbmsoKSAtIG1SYW5raW5nQi5nZXRSYW5rKCk7Ci0gICAgICAgICAgICB9IGlmIChkICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYVJhbmsgIT0gYlJhbmspIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYVJhbmsgLSBiUmFuazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIChuYi5nZXROb3RpZmljYXRpb24oKS53aGVuIC0gbmEuZ2V0Tm90aWZpY2F0aW9uKCkud2hlbik7CiAgICAgICAgICAgICB9CkBAIC0yODMsNyArMjgwLDcgQEAKICAgICAgICAgICAgIG1SYW5raW5nTWFwLmdldFJhbmtpbmcoa2V5LCBtVG1wUmFua2luZyk7CiAgICAgICAgICAgICByZXR1cm4gbVRtcFJhbmtpbmcuZ2V0VmlzaWJpbGl0eU92ZXJyaWRlKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLlZJU0lCSUxJVFlfTk9fT1ZFUlJJREU7CisgICAgICAgIHJldHVybiBSYW5raW5nLlZJU0lCSUxJVFlfTk9fT1ZFUlJJREU7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gc2hvdWxkU3VwcHJlc3NQZWVrKFN0cmluZyBrZXkpIHsKQEAgLTI5NSw2ICsyOTIsMjMgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIHB1YmxpYyBib29sZWFuIHNob3VsZFN1cHByZXNzU2NyZWVuT24oU3RyaW5nIGtleSkgeworICAgICAgICBpZiAobVJhbmtpbmdNYXAgIT0gbnVsbCkgeworICAgICAgICAgICAgbVJhbmtpbmdNYXAuZ2V0UmFua2luZyhrZXksIG1UbXBSYW5raW5nKTsKKyAgICAgICAgICAgIHJldHVybiAobVRtcFJhbmtpbmcuZ2V0U3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMoKQorICAgICAgICAgICAgICAgICAgICAmIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5TVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04pICE9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0SW1wb3J0YW5jZShTdHJpbmcga2V5KSB7CisgICAgICAgIGlmIChtUmFua2luZ01hcCAhPSBudWxsKSB7CisgICAgICAgICAgICBtUmFua2luZ01hcC5nZXRSYW5raW5nKGtleSwgbVRtcFJhbmtpbmcpOworICAgICAgICAgICAgcmV0dXJuIG1UbXBSYW5raW5nLmdldEltcG9ydGFuY2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUmFua2luZy5JTVBPUlRBTkNFX1VOU1BFQ0lGSUVEOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVSYW5raW5nQW5kU29ydChSYW5raW5nTWFwIHJhbmtpbmcpIHsKICAgICAgICAgaWYgKHJhbmtpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgbVJhbmtpbmdNYXAgPSByYW5raW5nOwpAQCAtMzkwLDEyICs0MDQsMTMgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZHVtcEVudHJ5KFByaW50V3JpdGVyIHB3LCBTdHJpbmcgaW5kZW50LCBpbnQgaSwgRW50cnkgZSkgeworICAgICAgICBtUmFua2luZ01hcC5nZXRSYW5raW5nKGUua2V5LCBtVG1wUmFua2luZyk7CiAgICAgICAgIHB3LnByaW50KGluZGVudCk7CiAgICAgICAgIHB3LnByaW50bG4oIiAgWyIgKyBpICsgIl0ga2V5PSIgKyBlLmtleSArICIgaWNvbj0iICsgZS5pY29uKTsKICAgICAgICAgU3RhdHVzQmFyTm90aWZpY2F0aW9uIG4gPSBlLm5vdGlmaWNhdGlvbjsKICAgICAgICAgcHcucHJpbnQoaW5kZW50KTsKLSAgICAgICAgcHcucHJpbnRsbigiICAgICAgcGtnPSIgKyBuLmdldFBhY2thZ2VOYW1lKCkgKyAiIGlkPSIgKyBuLmdldElkKCkgKyAiIHNjb3JlPSIgKwotICAgICAgICAgICAgICAgIG4uZ2V0U2NvcmUoKSk7CisgICAgICAgIHB3LnByaW50bG4oIiAgICAgIHBrZz0iICsgbi5nZXRQYWNrYWdlTmFtZSgpICsgIiBpZD0iICsgbi5nZXRJZCgpICsgIiBpbXBvcnRhbmNlPSIgKworICAgICAgICAgICAgICAgIG1UbXBSYW5raW5nLmdldEltcG9ydGFuY2UoKSk7CiAgICAgICAgIHB3LnByaW50KGluZGVudCk7CiAgICAgICAgIHB3LnByaW50bG4oIiAgICAgIG5vdGlmaWNhdGlvbj0iICsgbi5nZXROb3RpZmljYXRpb24oKSk7CiAgICAgICAgIHB3LnByaW50KGluZGVudCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvbkd1dHMuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhCmluZGV4IDQ2ZTBiZjguLjIwYTZlN2MgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uR3V0cy5qYXZhCkBAIC0xNiwyMSArMTYsNDAgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXI7CiAKK2ltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uSWRSZXM7CitpbXBvcnQgYW5kcm9pZC5hcHAuSU5vdGlmaWNhdGlvbk1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ2FudmFzOwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TZXJ2aWNlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLlN0YXR1c0Jhck5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5SYWRpb0J1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5SYWRpb0dyb3VwOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNlZWtCYXI7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7CisKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogCiAvKioKICAqIFRoZSBndXRzIG9mIGEgbm90aWZpY2F0aW9uIHJldmVhbGVkIHdoZW4gcGVyZm9ybWluZyBhIGxvbmcgcHJlc3MuCiAgKi8KLXB1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25HdXRzIGV4dGVuZHMgRnJhbWVMYXlvdXQgeworcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkd1dHMgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgewogCiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtQmFja2dyb3VuZDsKICAgICBwcml2YXRlIGludCBtQ2xpcFRvcEFtb3VudDsKICAgICBwcml2YXRlIGludCBtQWN0dWFsSGVpZ2h0OworICAgIHByaXZhdGUgYm9vbGVhbiBtRXhwb3NlZDsKKyAgICBwcml2YXRlIFJhZGlvQnV0dG9uIG1BcHBseVRvVG9waWM7CisgICAgcHJpdmF0ZSBTZWVrQmFyIG1TZWVrQmFyOworICAgIHByaXZhdGUgTm90aWZpY2F0aW9uLlRvcGljIG1Ub3BpYzsKKyAgICBwcml2YXRlIElOb3RpZmljYXRpb25NYW5hZ2VyIG1JTm90aWZpY2F0aW9uTWFuYWdlcjsKIAogICAgIHB1YmxpYyBOb3RpZmljYXRpb25HdXRzKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKQEAgLTgxLDYgKzEwMCwxMDIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgYmluZEltcG9ydGFuY2UoZmluYWwgU3RhdHVzQmFyTm90aWZpY2F0aW9uIHNibiwgZmluYWwgRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdyByb3csCisgICAgICAgICAgICBmaW5hbCBpbnQgaW1wb3J0YW5jZSkgeworICAgICAgICBtSU5vdGlmaWNhdGlvbk1hbmFnZXIgPSBJTm90aWZpY2F0aW9uTWFuYWdlci5TdHViLmFzSW50ZXJmYWNlKAorICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmdldFNlcnZpY2UoQ29udGV4dC5OT1RJRklDQVRJT05fU0VSVklDRSkpOworICAgICAgICBtVG9waWMgPSBzYm4uZ2V0Tm90aWZpY2F0aW9uKCkuZ2V0VG9waWMoKSA9PSBudWxsCisgICAgICAgICAgICAgICAgPyBuZXcgTm90aWZpY2F0aW9uLlRvcGljKE5vdGlmaWNhdGlvbi5UT1BJQ19ERUZBVUxULCBtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuZGVmYXVsdF9ub3RpZmljYXRpb25fdG9waWNfbGFiZWwpKQorICAgICAgICAgICAgICAgIDogc2JuLmdldE5vdGlmaWNhdGlvbigpLmdldFRvcGljKCk7CisgICAgICAgIGJvb2xlYW4gZG9lc0FwcFVzZVRvcGljcyA9IGZhbHNlOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZG9lc0FwcFVzZVRvcGljcyA9CisgICAgICAgICAgICAgICAgICAgIG1JTm90aWZpY2F0aW9uTWFuYWdlci5kb2VzQXBwVXNlVG9waWNzKHNibi5nZXRQYWNrYWdlTmFtZSgpLCBzYm4uZ2V0VWlkKCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkge30KKyAgICAgICAgZmluYWwgYm9vbGVhbiBhcHBVc2VzVG9waWNzID0gZG9lc0FwcFVzZVRvcGljczsKKworICAgICAgICBtQXBwbHlUb1RvcGljID0gKFJhZGlvQnV0dG9uKSByb3cuZmluZFZpZXdCeUlkKFIuaWQuYXBwbHlfdG9fdG9waWMpOworICAgICAgICBpZiAoYXBwVXNlc1RvcGljcykgeworICAgICAgICAgICAgbUFwcGx5VG9Ub3BpYy5zZXRDaGVja2VkKHRydWUpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIFZpZXcgYXBwbHlUb0FwcCA9IHJvdy5maW5kVmlld0J5SWQoUi5pZC5hcHBseV90b19hcHApOworICAgICAgICBmaW5hbCBUZXh0VmlldyB0b3BpY1N1bW1hcnkgPSAoKFRleHRWaWV3KSByb3cuZmluZFZpZXdCeUlkKFIuaWQuc3VtbWFyeSkpOworICAgICAgICBmaW5hbCBUZXh0VmlldyB0b3BpY1RpdGxlID0gKChUZXh0Vmlldykgcm93LmZpbmRWaWV3QnlJZChSLmlkLnRpdGxlKSk7CisgICAgICAgIG1TZWVrQmFyID0gKFNlZWtCYXIpIHJvdy5maW5kVmlld0J5SWQoUi5pZC5zZWVrYmFyKTsKKyAgICAgICAgbVNlZWtCYXIuc2V0TWF4KDQpOworICAgICAgICBtU2Vla0Jhci5zZXRPblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcihuZXcgU2Vla0Jhci5PblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25Qcm9ncmVzc0NoYW5nZWQoU2Vla0JhciBzZWVrQmFyLCBpbnQgcHJvZ3Jlc3MsIGJvb2xlYW4gZnJvbVVzZXIpIHsKKyAgICAgICAgICAgICAgICB1cGRhdGVUaXRsZUFuZFN1bW1hcnkocHJvZ3Jlc3MpOworICAgICAgICAgICAgICAgIGlmIChmcm9tVXNlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXBwVXNlc1RvcGljcykgeworICAgICAgICAgICAgICAgICAgICAgICAgbUFwcGx5VG9Ub3BpYy5zZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtQXBwbHlUb1RvcGljLnNldFRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5hcHBseV90b190b3BpYywgbVRvcGljLmdldExhYmVsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGx5VG9BcHAuc2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0JhcikgeworICAgICAgICAgICAgICAgIC8vIG5vLW9wCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdG9wVHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtCYXIpIHsKKyAgICAgICAgICAgICAgICAvLyBuby1vcAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVGl0bGVBbmRTdW1tYXJ5KGludCBwcm9ncmVzcykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvZ3Jlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX05PTkU6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1N1bW1hcnkuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2Jsb2NrZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljVGl0bGUuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYmxvY2tlZF9pbXBvcnRhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX0xPVzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljU3VtbWFyeS5zZXRUZXh0KG1Db250ZXh0LmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcubm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbG93KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1RpdGxlLnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmxvd19pbXBvcnRhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX0RFRkFVTFQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1N1bW1hcnkuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2RlZmF1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljVGl0bGUuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuZGVmYXVsdF9pbXBvcnRhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX0hJR0g6CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1N1bW1hcnkuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9pbXBvcnRhbmNlX2hpZ2gpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljVGl0bGUuc2V0VGV4dChtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuaGlnaF9pbXBvcnRhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX01BWDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljU3VtbWFyeS5zZXRUZXh0KG1Db250ZXh0LmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5zdHJpbmcubm90aWZpY2F0aW9uX2ltcG9ydGFuY2VfbWF4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0b3BpY1RpdGxlLnNldFRleHQobUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLm1heF9pbXBvcnRhbmNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtU2Vla0Jhci5zZXRQcm9ncmVzcyhpbXBvcnRhbmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHNhdmVJbXBvcnRhbmNlKGZpbmFsIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4pIHsKKyAgICAgICAgaW50IHByb2dyZXNzID0gbVNlZWtCYXIuZ2V0UHJvZ3Jlc3MoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChtQXBwbHlUb1RvcGljLmlzQ2hlY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgbUlOb3RpZmljYXRpb25NYW5hZ2VyLnNldFRvcGljSW1wb3J0YW5jZShzYm4uZ2V0UGFja2FnZU5hbWUoKSwgc2JuLmdldFVpZCgpLCBtVG9waWMsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1JTm90aWZpY2F0aW9uTWFuYWdlci5zZXRBcHBJbXBvcnRhbmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgc2JuLmdldFBhY2thZ2VOYW1lKCksIHNibi5nZXRVaWQoKSwgcHJvZ3Jlc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gOigKKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldEFjdHVhbEhlaWdodChpbnQgYWN0dWFsSGVpZ2h0KSB7CiAgICAgICAgIG1BY3R1YWxIZWlnaHQgPSBhY3R1YWxIZWlnaHQ7CiAgICAgICAgIGludmFsaWRhdGUoKTsKQEAgLTEwMSw0ICsyMTYsMTIgQEAKICAgICAgICAgLy8gUHJldmVudHMgdGhpcyB2aWV3IGZyb20gY3JlYXRpbmcgYSBsYXllciB3aGVuIGFscGhhIGlzIGFuaW1hdGluZy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEV4cG9zZWQoYm9vbGVhbiBleHBvc2VkKSB7CisgICAgICAgIG1FeHBvc2VkID0gZXhwb3NlZDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBhcmVHdXRzRXhwb3NlZCgpIHsKKyAgICAgICAgcmV0dXJuIG1FeHBvc2VkOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uSGVhZGVyVmlld1dyYXBwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uSGVhZGVyVmlld1dyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFkMmUwCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25IZWFkZXJWaWV3V3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2JhcjsKKworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyOworaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yRmlsdGVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JNYXRyaXg7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeENvbG9yRmlsdGVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvcnRlckR1ZmZDb2xvckZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOworaW1wb3J0IGFuZHJvaWQudmlldy5Ob3RpZmljYXRpb25IZWFkZXJWaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7CitpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OworCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5WaWV3SW52ZXJ0SGVscGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5Ob3RpZmljYXRpb25QYW5lbFZpZXc7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIFdyYXBzIGEgbm90aWZpY2F0aW9uIGhlYWRlciB2aWV3LgorICovCitwdWJsaWMgY2xhc3MgTm90aWZpY2F0aW9uSGVhZGVyVmlld1dyYXBwZXIgZXh0ZW5kcyBOb3RpZmljYXRpb25WaWV3V3JhcHBlciB7CisKKyAgICBwcml2YXRlIGZpbmFsIENvbG9yTWF0cml4IG1HcmF5c2NhbGVDb2xvck1hdHJpeCA9IG5ldyBDb2xvck1hdHJpeCgpOworICAgIHByaXZhdGUgZmluYWwgUG9ydGVyRHVmZkNvbG9yRmlsdGVyIG1JY29uQ29sb3JGaWx0ZXIgPSBuZXcgUG9ydGVyRHVmZkNvbG9yRmlsdGVyKAorICAgICAgICAgICAgMCwgUG9ydGVyRHVmZi5Nb2RlLlNSQ19BVE9QKTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtSWNvbkRhcmtBbHBoYTsKKyAgICBwcml2YXRlIGZpbmFsIGludCBtSWNvbkRhcmtDb2xvciA9IDB4ZmZmZmZmZmY7CisgICAgcHJvdGVjdGVkIGZpbmFsIEludGVycG9sYXRvciBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByb3RlY3RlZCBmaW5hbCBWaWV3SW52ZXJ0SGVscGVyIG1JbnZlcnRIZWxwZXI7CisKKyAgICBwcm90ZWN0ZWQgaW50IG1Db2xvcjsKKyAgICBwcml2YXRlIEltYWdlVmlldyBtSWNvbjsKKworICAgIHByaXZhdGUgSW1hZ2VWaWV3IG1FeHBhbmRCdXR0b247CisgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25IZWFkZXJWaWV3IG1Ob3RpZmljYXRpb25IZWFkZXI7CisKKyAgICBwcm90ZWN0ZWQgTm90aWZpY2F0aW9uSGVhZGVyVmlld1dyYXBwZXIoQ29udGV4dCBjdHgsIFZpZXcgdmlldykgeworICAgICAgICBzdXBlcih2aWV3KTsKKyAgICAgICAgbUljb25EYXJrQWxwaGEgPSBjdHguZ2V0UmVzb3VyY2VzKCkuZ2V0SW50ZWdlcihSLmludGVnZXIuZG96ZV9zbWFsbF9pY29uX2FscGhhKTsKKyAgICAgICAgbUxpbmVhck91dFNsb3dJbkludGVycG9sYXRvciA9IEFuaW1hdGlvblV0aWxzLmxvYWRJbnRlcnBvbGF0b3IoY3R4LAorICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5pbnRlcnBvbGF0b3IubGluZWFyX291dF9zbG93X2luKTsKKyAgICAgICAgbUludmVydEhlbHBlciA9IG5ldyBWaWV3SW52ZXJ0SGVscGVyKGN0eCwgTm90aWZpY2F0aW9uUGFuZWxWaWV3LkRPWkVfQU5JTUFUSU9OX0RVUkFUSU9OKTsKKyAgICAgICAgcmVzb2x2ZUhlYWRlclZpZXdzKCk7CisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgcmVzb2x2ZUhlYWRlclZpZXdzKCkgeworICAgICAgICBtSWNvbiA9IChJbWFnZVZpZXcpIG1WaWV3LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmljb24pOworICAgICAgICBtRXhwYW5kQnV0dG9uID0gKEltYWdlVmlldykgbVZpZXcuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZXhwYW5kX2J1dHRvbik7CisgICAgICAgIG1Db2xvciA9IHJlc29sdmVDb2xvcihtRXhwYW5kQnV0dG9uKTsKKyAgICAgICAgbU5vdGlmaWNhdGlvbkhlYWRlciA9IChOb3RpZmljYXRpb25IZWFkZXJWaWV3KSBtVmlldy5maW5kVmlld0J5SWQoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5ub3RpZmljYXRpb25faGVhZGVyKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTm90aWZpY2F0aW9uSGVhZGVyLmdldENoaWxkQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBWaWV3IGNoaWxkID0gbU5vdGlmaWNhdGlvbkhlYWRlci5nZXRDaGlsZEF0KGkpOworICAgICAgICAgICAgaWYgKGNoaWxkICE9IG1JY29uKSB7CisgICAgICAgICAgICAgICAgbUludmVydEhlbHBlci5hZGRUYXJnZXQoY2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgcmVzb2x2ZUNvbG9yKEltYWdlVmlldyBpY29uKSB7CisgICAgICAgIGlmIChpY29uICE9IG51bGwgJiYgaWNvbi5nZXREcmF3YWJsZSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIENvbG9yRmlsdGVyIGZpbHRlciA9IGljb24uZ2V0RHJhd2FibGUoKS5nZXRDb2xvckZpbHRlcigpOworICAgICAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFBvcnRlckR1ZmZDb2xvckZpbHRlcikgeworICAgICAgICAgICAgICAgIHJldHVybiAoKFBvcnRlckR1ZmZDb2xvckZpbHRlcikgZmlsdGVyKS5nZXRDb2xvcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNvbnRlbnRVcGRhdGVkKCkgeworICAgICAgICBtSW52ZXJ0SGVscGVyLmNsZWFyVGFyZ2V0cygpOworICAgICAgICAvLyBSZWluc3BlY3QgdGhlIG5vdGlmaWNhdGlvbi4KKyAgICAgICAgcmVzb2x2ZUhlYWRlclZpZXdzKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RGFyayhib29sZWFuIGRhcmssIGJvb2xlYW4gZmFkZSwgbG9uZyBkZWxheSkgeworICAgICAgICBpZiAoZmFkZSkgeworICAgICAgICAgICAgbUludmVydEhlbHBlci5mYWRlKGRhcmssIGRlbGF5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1JbnZlcnRIZWxwZXIudXBkYXRlKGRhcmspOworICAgICAgICB9CisgICAgICAgIGlmIChtSWNvbiAhPSBudWxsKSB7CisgICAgICAgICAgICBib29sZWFuIGhhZENvbG9yRmlsdGVyID0gbU5vdGlmaWNhdGlvbkhlYWRlci5nZXRPcmlnaW5hbEljb25Db2xvcigpCisgICAgICAgICAgICAgICAgICAgICE9IE5vdGlmaWNhdGlvbkhlYWRlclZpZXcuTk9fQ09MT1I7CisgICAgICAgICAgICBpZiAoZmFkZSkgeworICAgICAgICAgICAgICAgIGlmIChoYWRDb2xvckZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICBmYWRlSWNvbkNvbG9yRmlsdGVyKG1JY29uLCBkYXJrLCBkZWxheSk7CisgICAgICAgICAgICAgICAgICAgIGZhZGVJY29uQWxwaGEobUljb24sIGRhcmssIGRlbGF5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYWRlR3JheXNjYWxlKG1JY29uLCBkYXJrLCBkZWxheSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaGFkQ29sb3JGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSWNvbkNvbG9yRmlsdGVyKG1JY29uLCBkYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlSWNvbkFscGhhKG1JY29uLCBkYXJrKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1cGRhdGVHcmF5c2NhbGUobUljb24sIGRhcmspOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHN0YXJ0SW50ZW5zaXR5QW5pbWF0aW9uKFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lciB1cGRhdGVMaXN0ZW5lciwKKyAgICAgICAgICAgIGJvb2xlYW4gZGFyaywgbG9uZyBkZWxheSwgQW5pbWF0b3IuQW5pbWF0b3JMaXN0ZW5lciBsaXN0ZW5lcikgeworICAgICAgICBmbG9hdCBzdGFydEludGVuc2l0eSA9IGRhcmsgPyAwZiA6IDFmOworICAgICAgICBmbG9hdCBlbmRJbnRlbnNpdHkgPSBkYXJrID8gMWYgOiAwZjsKKyAgICAgICAgVmFsdWVBbmltYXRvciBhbmltYXRvciA9IFZhbHVlQW5pbWF0b3Iub2ZGbG9hdChzdGFydEludGVuc2l0eSwgZW5kSW50ZW5zaXR5KTsKKyAgICAgICAgYW5pbWF0b3IuYWRkVXBkYXRlTGlzdGVuZXIodXBkYXRlTGlzdGVuZXIpOworICAgICAgICBhbmltYXRvci5zZXREdXJhdGlvbihOb3RpZmljYXRpb25QYW5lbFZpZXcuRE9aRV9BTklNQVRJT05fRFVSQVRJT04pOworICAgICAgICBhbmltYXRvci5zZXRJbnRlcnBvbGF0b3IobUxpbmVhck91dFNsb3dJbkludGVycG9sYXRvcik7CisgICAgICAgIGFuaW1hdG9yLnNldFN0YXJ0RGVsYXkoZGVsYXkpOworICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgYW5pbWF0b3IuYWRkTGlzdGVuZXIobGlzdGVuZXIpOworICAgICAgICB9CisgICAgICAgIGFuaW1hdG9yLnN0YXJ0KCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGZhZGVJY29uQ29sb3JGaWx0ZXIoZmluYWwgSW1hZ2VWaWV3IHRhcmdldCwgYm9vbGVhbiBkYXJrLCBsb25nIGRlbGF5KSB7CisgICAgICAgIHN0YXJ0SW50ZW5zaXR5QW5pbWF0aW9uKG5ldyBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlSWNvbkNvbG9yRmlsdGVyKHRhcmdldCwgKEZsb2F0KSBhbmltYXRpb24uZ2V0QW5pbWF0ZWRWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgZGFyaywgZGVsYXksIG51bGwgLyogbGlzdGVuZXIgKi8pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBmYWRlSWNvbkFscGhhKGZpbmFsIEltYWdlVmlldyB0YXJnZXQsIGJvb2xlYW4gZGFyaywgbG9uZyBkZWxheSkgeworICAgICAgICBzdGFydEludGVuc2l0eUFuaW1hdGlvbihuZXcgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvblVwZGF0ZShWYWx1ZUFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgICAgIGZsb2F0IHQgPSAoZmxvYXQpIGFuaW1hdGlvbi5nZXRBbmltYXRlZFZhbHVlKCk7CisgICAgICAgICAgICAgICAgdGFyZ2V0LnNldEltYWdlQWxwaGEoKGludCkgKDI1NSAqICgxZiAtIHQpICsgbUljb25EYXJrQWxwaGEgKiB0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sIGRhcmssIGRlbGF5LCBudWxsIC8qIGxpc3RlbmVyICovKTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCBmYWRlR3JheXNjYWxlKGZpbmFsIEltYWdlVmlldyB0YXJnZXQsIGZpbmFsIGJvb2xlYW4gZGFyaywgbG9uZyBkZWxheSkgeworICAgICAgICBzdGFydEludGVuc2l0eUFuaW1hdGlvbihuZXcgVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvblVwZGF0ZShWYWx1ZUFuaW1hdG9yIGFuaW1hdGlvbikgeworICAgICAgICAgICAgICAgIHVwZGF0ZUdyYXlzY2FsZU1hdHJpeCgoZmxvYXQpIGFuaW1hdGlvbi5nZXRBbmltYXRlZFZhbHVlKCkpOworICAgICAgICAgICAgICAgIHRhcmdldC5zZXRDb2xvckZpbHRlcihuZXcgQ29sb3JNYXRyaXhDb2xvckZpbHRlcihtR3JheXNjYWxlQ29sb3JNYXRyaXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwgZGFyaywgZGVsYXksIG5ldyBBbmltYXRvckxpc3RlbmVyQWRhcHRlcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25FbmQoQW5pbWF0b3IgYW5pbWF0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKCFkYXJrKSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRDb2xvckZpbHRlcihudWxsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVJY29uQ29sb3JGaWx0ZXIoSW1hZ2VWaWV3IHRhcmdldCwgYm9vbGVhbiBkYXJrKSB7CisgICAgICAgIHVwZGF0ZUljb25Db2xvckZpbHRlcih0YXJnZXQsIGRhcmsgPyAxZiA6IDBmKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlSWNvbkNvbG9yRmlsdGVyKEltYWdlVmlldyB0YXJnZXQsIGZsb2F0IGludGVuc2l0eSkgeworICAgICAgICBpbnQgY29sb3IgPSBpbnRlcnBvbGF0ZUNvbG9yKG1Db2xvciwgbUljb25EYXJrQ29sb3IsIGludGVuc2l0eSk7CisgICAgICAgIG1JY29uQ29sb3JGaWx0ZXIuc2V0Q29sb3IoY29sb3IpOworICAgICAgICBEcmF3YWJsZSBpY29uRHJhd2FibGUgPSB0YXJnZXQuZ2V0RHJhd2FibGUoKTsKKworICAgICAgICAvLyBBbHNvLCB0aGUgbm90aWZpY2F0aW9uIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBkdXJpbmcgdGhlIGFuaW1hdGlvbiwgc28gYmFja2dyb3VuZAorICAgICAgICAvLyBtaWdodCBiZSBudWxsIGhlcmUuCisgICAgICAgIGlmIChpY29uRHJhd2FibGUgIT0gbnVsbCkgeworICAgICAgICAgICAgaWNvbkRyYXdhYmxlLm11dGF0ZSgpLnNldENvbG9yRmlsdGVyKG1JY29uQ29sb3JGaWx0ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUljb25BbHBoYShJbWFnZVZpZXcgdGFyZ2V0LCBib29sZWFuIGRhcmspIHsKKyAgICAgICAgdGFyZ2V0LnNldEltYWdlQWxwaGEoZGFyayA/IG1JY29uRGFya0FscGhhIDogMjU1KTsKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVHcmF5c2NhbGUoSW1hZ2VWaWV3IHRhcmdldCwgYm9vbGVhbiBkYXJrKSB7CisgICAgICAgIGlmIChkYXJrKSB7CisgICAgICAgICAgICB1cGRhdGVHcmF5c2NhbGVNYXRyaXgoMWYpOworICAgICAgICAgICAgdGFyZ2V0LnNldENvbG9yRmlsdGVyKG5ldyBDb2xvck1hdHJpeENvbG9yRmlsdGVyKG1HcmF5c2NhbGVDb2xvck1hdHJpeCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGFyZ2V0LnNldENvbG9yRmlsdGVyKG51bGwpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgdXBkYXRlRXhwYW5kYWJpbGl0eShib29sZWFuIGV4cGFuZGFibGUsIFZpZXcuT25DbGlja0xpc3RlbmVyIG9uQ2xpY2tMaXN0ZW5lcikgeworICAgICAgICBtRXhwYW5kQnV0dG9uLnNldFZpc2liaWxpdHkoZXhwYW5kYWJsZSA/IFZpZXcuVklTSUJMRSA6IFZpZXcuR09ORSk7CisgICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXIuc2V0T25DbGlja0xpc3RlbmVyKGV4cGFuZGFibGUgPyBvbkNsaWNrTGlzdGVuZXIgOiBudWxsKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlR3JheXNjYWxlTWF0cml4KGZsb2F0IGludGVuc2l0eSkgeworICAgICAgICBtR3JheXNjYWxlQ29sb3JNYXRyaXguc2V0U2F0dXJhdGlvbigxIC0gaW50ZW5zaXR5KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBpbnQgaW50ZXJwb2xhdGVDb2xvcihpbnQgc291cmNlLCBpbnQgdGFyZ2V0LCBmbG9hdCB0KSB7CisgICAgICAgIGludCBhU291cmNlID0gQ29sb3IuYWxwaGEoc291cmNlKTsKKyAgICAgICAgaW50IHJTb3VyY2UgPSBDb2xvci5yZWQoc291cmNlKTsKKyAgICAgICAgaW50IGdTb3VyY2UgPSBDb2xvci5ncmVlbihzb3VyY2UpOworICAgICAgICBpbnQgYlNvdXJjZSA9IENvbG9yLmJsdWUoc291cmNlKTsKKyAgICAgICAgaW50IGFUYXJnZXQgPSBDb2xvci5hbHBoYSh0YXJnZXQpOworICAgICAgICBpbnQgclRhcmdldCA9IENvbG9yLnJlZCh0YXJnZXQpOworICAgICAgICBpbnQgZ1RhcmdldCA9IENvbG9yLmdyZWVuKHRhcmdldCk7CisgICAgICAgIGludCBiVGFyZ2V0ID0gQ29sb3IuYmx1ZSh0YXJnZXQpOworICAgICAgICByZXR1cm4gQ29sb3IuYXJnYigKKyAgICAgICAgICAgICAgICAoaW50KSAoYVNvdXJjZSAqICgxZiAtIHQpICsgYVRhcmdldCAqIHQpLAorICAgICAgICAgICAgICAgIChpbnQpIChyU291cmNlICogKDFmIC0gdCkgKyByVGFyZ2V0ICogdCksCisgICAgICAgICAgICAgICAgKGludCkgKGdTb3VyY2UgKiAoMWYgLSB0KSArIGdUYXJnZXQgKiB0KSwKKyAgICAgICAgICAgICAgICAoaW50KSAoYlNvdXJjZSAqICgxZiAtIHQpICsgYlRhcmdldCAqIHQpKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTm90aWZpY2F0aW9uSGVhZGVyVmlldyBnZXROb3RpZmljYXRpb25IZWFkZXIoKSB7CisgICAgICAgIHJldHVybiBtTm90aWZpY2F0aW9uSGVhZGVyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uVGVtcGxhdGVWaWV3V3JhcHBlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25UZW1wbGF0ZVZpZXdXcmFwcGVyLmphdmEKaW5kZXggZmIwYTQxOS4uNzdlOGM1NSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25UZW1wbGF0ZVZpZXdXcmFwcGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25UZW1wbGF0ZVZpZXdXcmFwcGVyLmphdmEKQEAgLTE2LDc0ICsxNiwzMSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2JhcjsKIAotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yOwotaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLkFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyOwogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQ29sb3JGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvck1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yTWF0cml4Q29sb3JGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb3J0ZXJEdWZmOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9ydGVyRHVmZkNvbG9yRmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkRyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5Ob3RpZmljYXRpb25IZWFkZXJWaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Q29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uVXRpbHM7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5JbnRlcnBvbGF0b3I7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VWaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlByb2dyZXNzQmFyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5WaWV3SW52ZXJ0SGVscGVyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5Ob3RpZmljYXRpb25QYW5lbFZpZXc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCiAvKioKICAqIFdyYXBzIGEgbm90aWZpY2F0aW9uIHZpZXcgaW5mbGF0ZWQgZnJvbSBhIHRlbXBsYXRlLgogICovCi1wdWJsaWMgY2xhc3MgTm90aWZpY2F0aW9uVGVtcGxhdGVWaWV3V3JhcHBlciBleHRlbmRzIE5vdGlmaWNhdGlvblZpZXdXcmFwcGVyIHsKK3B1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25UZW1wbGF0ZVZpZXdXcmFwcGVyIGV4dGVuZHMgTm90aWZpY2F0aW9uSGVhZGVyVmlld1dyYXBwZXIgewogCi0gICAgcHJpdmF0ZSBmaW5hbCBDb2xvck1hdHJpeCBtR3JheXNjYWxlQ29sb3JNYXRyaXggPSBuZXcgQ29sb3JNYXRyaXgoKTsKLSAgICBwcml2YXRlIGZpbmFsIFBvcnRlckR1ZmZDb2xvckZpbHRlciBtSWNvbkNvbG9yRmlsdGVyID0gbmV3IFBvcnRlckR1ZmZDb2xvckZpbHRlcigKLSAgICAgICAgICAgIDAsIFBvcnRlckR1ZmYuTW9kZS5TUkNfQVRPUCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUljb25EYXJrQWxwaGE7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbUljb25EYXJrQ29sb3IgPSAweGZmZmZmZmZmOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1EYXJrUHJvZ3Jlc3NUaW50ID0gMHhmZmZmZmZmZjsKLSAgICBwcml2YXRlIGZpbmFsIEludGVycG9sYXRvciBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBtRGFya1Byb2dyZXNzVGludCA9IDB4ZmZmZmZmZmY7CiAKLSAgICBwcml2YXRlIGludCBtQ29sb3I7Ci0gICAgcHJpdmF0ZSBWaWV3SW52ZXJ0SGVscGVyIG1JbnZlcnRIZWxwZXI7Ci0gICAgcHJpdmF0ZSBJbWFnZVZpZXcgbUljb247CiAgICAgcHJvdGVjdGVkIEltYWdlVmlldyBtUGljdHVyZTsKLQotICAgIHByaXZhdGUgSW1hZ2VWaWV3IG1FeHBhbmRCdXR0b247Ci0gICAgcHJpdmF0ZSBOb3RpZmljYXRpb25IZWFkZXJWaWV3IG1Ob3RpZmljYXRpb25IZWFkZXI7CiAgICAgcHJpdmF0ZSBQcm9ncmVzc0JhciBtUHJvZ3Jlc3NCYXI7CiAKICAgICBwcm90ZWN0ZWQgTm90aWZpY2F0aW9uVGVtcGxhdGVWaWV3V3JhcHBlcihDb250ZXh0IGN0eCwgVmlldyB2aWV3KSB7Ci0gICAgICAgIHN1cGVyKHZpZXcpOwotICAgICAgICBtSWNvbkRhcmtBbHBoYSA9IGN0eC5nZXRSZXNvdXJjZXMoKS5nZXRJbnRlZ2VyKFIuaW50ZWdlci5kb3plX3NtYWxsX2ljb25fYWxwaGEpOwotICAgICAgICBtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yID0gQW5pbWF0aW9uVXRpbHMubG9hZEludGVycG9sYXRvcihjdHgsCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5SLmludGVycG9sYXRvci5saW5lYXJfb3V0X3Nsb3dfaW4pOwotCi0gICAgICAgIHJlc29sdmVWaWV3cygpOworICAgICAgICBzdXBlcihjdHgsIHZpZXcpOworICAgICAgICByZXNvbHZlVGVtcGxhdGVWaWV3cygpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCByZXNvbHZlVmlld3MoKSB7CisgICAgcHJpdmF0ZSB2b2lkIHJlc29sdmVUZW1wbGF0ZVZpZXdzKCkgewogICAgICAgICBWaWV3IG1haW5Db2x1bW4gPSBtVmlldy5maW5kVmlld0J5SWQoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pZC5ub3RpZmljYXRpb25fbWFpbl9jb2x1bW4pOwotICAgICAgICBtSWNvbiA9IChJbWFnZVZpZXcpIG1WaWV3LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLmljb24pOwogICAgICAgICBtUGljdHVyZSA9IChJbWFnZVZpZXcpIG1WaWV3LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnJpZ2h0X2ljb24pOwotICAgICAgICBtRXhwYW5kQnV0dG9uID0gKEltYWdlVmlldykgbVZpZXcuZmluZFZpZXdCeUlkKGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQuZXhwYW5kX2J1dHRvbik7Ci0gICAgICAgIG1Db2xvciA9IHJlc29sdmVDb2xvcihtRXhwYW5kQnV0dG9uKTsKICAgICAgICAgZmluYWwgVmlldyBwcm9ncmVzcyA9IG1WaWV3LmZpbmRWaWV3QnlJZChjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnByb2dyZXNzKTsKICAgICAgICAgaWYgKHByb2dyZXNzIGluc3RhbmNlb2YgUHJvZ3Jlc3NCYXIpIHsKICAgICAgICAgICAgIG1Qcm9ncmVzc0JhciA9IChQcm9ncmVzc0JhcikgcHJvZ3Jlc3M7CkBAIC05MSwzMCArNDgsOSBAQAogICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBhIHZpZXdzdHViCiAgICAgICAgICAgICBtUHJvZ3Jlc3NCYXIgPSBudWxsOwogICAgICAgICB9Ci0gICAgICAgIG1Ob3RpZmljYXRpb25IZWFkZXIgPSAoTm90aWZpY2F0aW9uSGVhZGVyVmlldykgbVZpZXcuZmluZFZpZXdCeUlkKAotICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaWQubm90aWZpY2F0aW9uX2hlYWRlcik7Ci0gICAgICAgIEFycmF5TGlzdDxWaWV3PiB2aWV3c1RvSW52ZXJ0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgIGlmIChtYWluQ29sdW1uICE9IG51bGwpIHsKLSAgICAgICAgICAgIHZpZXdzVG9JbnZlcnQuYWRkKG1haW5Db2x1bW4pOworICAgICAgICAgICAgbUludmVydEhlbHBlci5hZGRUYXJnZXQobWFpbkNvbHVtbik7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTm90aWZpY2F0aW9uSGVhZGVyLmdldENoaWxkQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgICBWaWV3IGNoaWxkID0gbU5vdGlmaWNhdGlvbkhlYWRlci5nZXRDaGlsZEF0KGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkICE9IG1JY29uKSB7Ci0gICAgICAgICAgICAgICAgdmlld3NUb0ludmVydC5hZGQoY2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1JbnZlcnRIZWxwZXIgPSBuZXcgVmlld0ludmVydEhlbHBlcih2aWV3c1RvSW52ZXJ0LAotICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblBhbmVsVmlldy5ET1pFX0FOSU1BVElPTl9EVVJBVElPTik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgcmVzb2x2ZUNvbG9yKEltYWdlVmlldyBpY29uKSB7Ci0gICAgICAgIGlmIChpY29uICE9IG51bGwgJiYgaWNvbi5nZXREcmF3YWJsZSgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIENvbG9yRmlsdGVyIGZpbHRlciA9IGljb24uZ2V0RHJhd2FibGUoKS5nZXRDb2xvckZpbHRlcigpOwotICAgICAgICAgICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIFBvcnRlckR1ZmZDb2xvckZpbHRlcikgewotICAgICAgICAgICAgICAgIHJldHVybiAoKFBvcnRlckR1ZmZDb2xvckZpbHRlcikgZmlsdGVyKS5nZXRDb2xvcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTIyLDM3ICs1OCwxMiBAQAogICAgICAgICBzdXBlci5ub3RpZnlDb250ZW50VXBkYXRlZCgpOwogCiAgICAgICAgIC8vIFJlaW5zcGVjdCB0aGUgbm90aWZpY2F0aW9uLgotICAgICAgICByZXNvbHZlVmlld3MoKTsKKyAgICAgICAgcmVzb2x2ZVRlbXBsYXRlVmlld3MoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXREYXJrKGJvb2xlYW4gZGFyaywgYm9vbGVhbiBmYWRlLCBsb25nIGRlbGF5KSB7Ci0gICAgICAgIGlmIChtSW52ZXJ0SGVscGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChmYWRlKSB7Ci0gICAgICAgICAgICAgICAgbUludmVydEhlbHBlci5mYWRlKGRhcmssIGRlbGF5KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbUludmVydEhlbHBlci51cGRhdGUoZGFyayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1JY29uICE9IG51bGwpIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaGFkQ29sb3JGaWx0ZXIgPSBtTm90aWZpY2F0aW9uSGVhZGVyLmdldE9yaWdpbmFsSWNvbkNvbG9yKCkKLSAgICAgICAgICAgICAgICAgICAgIT0gTm90aWZpY2F0aW9uSGVhZGVyVmlldy5OT19DT0xPUjsKLSAgICAgICAgICAgIGlmIChmYWRlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhhZENvbG9yRmlsdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhZGVJY29uQ29sb3JGaWx0ZXIobUljb24sIGRhcmssIGRlbGF5KTsKLSAgICAgICAgICAgICAgICAgICAgZmFkZUljb25BbHBoYShtSWNvbiwgZGFyaywgZGVsYXkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZhZGVHcmF5c2NhbGUobUljb24sIGRhcmssIGRlbGF5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChoYWRDb2xvckZpbHRlcikgewotICAgICAgICAgICAgICAgICAgICB1cGRhdGVJY29uQ29sb3JGaWx0ZXIobUljb24sIGRhcmspOwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVJY29uQWxwaGEobUljb24sIGRhcmspOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUdyYXlzY2FsZShtSWNvbiwgZGFyayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHN1cGVyLnNldERhcmsoZGFyaywgZmFkZSwgZGVsYXkpOwogICAgICAgICBzZXRQaWN0dXJlR3JheXNjYWxlKGRhcmssIGZhZGUsIGRlbGF5KTsKICAgICAgICAgc2V0UHJvZ3Jlc3NCYXJEYXJrKGRhcmssIGZhZGUsIGRlbGF5KTsKICAgICB9CkBAIC0xOTcsOTYgKzEwOCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc3RhcnRJbnRlbnNpdHlBbmltYXRpb24oVmFsdWVBbmltYXRvci5BbmltYXRvclVwZGF0ZUxpc3RlbmVyIHVwZGF0ZUxpc3RlbmVyLAotICAgICAgICAgICAgYm9vbGVhbiBkYXJrLCBsb25nIGRlbGF5LCBBbmltYXRvci5BbmltYXRvckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICAgIGZsb2F0IHN0YXJ0SW50ZW5zaXR5ID0gZGFyayA/IDBmIDogMWY7Ci0gICAgICAgIGZsb2F0IGVuZEludGVuc2l0eSA9IGRhcmsgPyAxZiA6IDBmOwotICAgICAgICBWYWx1ZUFuaW1hdG9yIGFuaW1hdG9yID0gVmFsdWVBbmltYXRvci5vZkZsb2F0KHN0YXJ0SW50ZW5zaXR5LCBlbmRJbnRlbnNpdHkpOwotICAgICAgICBhbmltYXRvci5hZGRVcGRhdGVMaXN0ZW5lcih1cGRhdGVMaXN0ZW5lcik7Ci0gICAgICAgIGFuaW1hdG9yLnNldER1cmF0aW9uKE5vdGlmaWNhdGlvblBhbmVsVmlldy5ET1pFX0FOSU1BVElPTl9EVVJBVElPTik7Ci0gICAgICAgIGFuaW1hdG9yLnNldEludGVycG9sYXRvcihtTGluZWFyT3V0U2xvd0luSW50ZXJwb2xhdG9yKTsKLSAgICAgICAgYW5pbWF0b3Iuc2V0U3RhcnREZWxheShkZWxheSk7Ci0gICAgICAgIGlmIChsaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBhbmltYXRvci5hZGRMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgICAgIH0KLSAgICAgICAgYW5pbWF0b3Iuc3RhcnQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZmFkZUljb25Db2xvckZpbHRlcihmaW5hbCBJbWFnZVZpZXcgdGFyZ2V0LCBib29sZWFuIGRhcmssIGxvbmcgZGVsYXkpIHsKLSAgICAgICAgc3RhcnRJbnRlbnNpdHlBbmltYXRpb24obmV3IFZhbHVlQW5pbWF0b3IuQW5pbWF0b3JVcGRhdGVMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25BbmltYXRpb25VcGRhdGUoVmFsdWVBbmltYXRvciBhbmltYXRpb24pIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVJY29uQ29sb3JGaWx0ZXIodGFyZ2V0LCAoRmxvYXQpIGFuaW1hdGlvbi5nZXRBbmltYXRlZFZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9LCBkYXJrLCBkZWxheSwgbnVsbCAvKiBsaXN0ZW5lciAqLyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGZhZGVJY29uQWxwaGEoZmluYWwgSW1hZ2VWaWV3IHRhcmdldCwgYm9vbGVhbiBkYXJrLCBsb25nIGRlbGF5KSB7Ci0gICAgICAgIHN0YXJ0SW50ZW5zaXR5QW5pbWF0aW9uKG5ldyBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgdCA9IChmbG9hdCkgYW5pbWF0aW9uLmdldEFuaW1hdGVkVmFsdWUoKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQuc2V0SW1hZ2VBbHBoYSgoaW50KSAoMjU1ICogKDFmIC0gdCkgKyBtSWNvbkRhcmtBbHBoYSAqIHQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgZGFyaywgZGVsYXksIG51bGwgLyogbGlzdGVuZXIgKi8pOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGZhZGVHcmF5c2NhbGUoZmluYWwgSW1hZ2VWaWV3IHRhcmdldCwgZmluYWwgYm9vbGVhbiBkYXJrLCBsb25nIGRlbGF5KSB7Ci0gICAgICAgIHN0YXJ0SW50ZW5zaXR5QW5pbWF0aW9uKG5ldyBWYWx1ZUFuaW1hdG9yLkFuaW1hdG9yVXBkYXRlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQW5pbWF0aW9uVXBkYXRlKFZhbHVlQW5pbWF0b3IgYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlR3JheXNjYWxlTWF0cml4KChmbG9hdCkgYW5pbWF0aW9uLmdldEFuaW1hdGVkVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LnNldENvbG9yRmlsdGVyKG5ldyBDb2xvck1hdHJpeENvbG9yRmlsdGVyKG1HcmF5c2NhbGVDb2xvck1hdHJpeCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9LCBkYXJrLCBkZWxheSwgbmV3IEFuaW1hdG9yTGlzdGVuZXJBZGFwdGVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkFuaW1hdGlvbkVuZChBbmltYXRvciBhbmltYXRpb24pIHsKLSAgICAgICAgICAgICAgICBpZiAoIWRhcmspIHsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldENvbG9yRmlsdGVyKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUljb25Db2xvckZpbHRlcihJbWFnZVZpZXcgdGFyZ2V0LCBib29sZWFuIGRhcmspIHsKLSAgICAgICAgdXBkYXRlSWNvbkNvbG9yRmlsdGVyKHRhcmdldCwgZGFyayA/IDFmIDogMGYpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVJY29uQ29sb3JGaWx0ZXIoSW1hZ2VWaWV3IHRhcmdldCwgZmxvYXQgaW50ZW5zaXR5KSB7Ci0gICAgICAgIGludCBjb2xvciA9IGludGVycG9sYXRlQ29sb3IobUNvbG9yLCBtSWNvbkRhcmtDb2xvciwgaW50ZW5zaXR5KTsKLSAgICAgICAgbUljb25Db2xvckZpbHRlci5zZXRDb2xvcihjb2xvcik7Ci0gICAgICAgIERyYXdhYmxlIGljb25EcmF3YWJsZSA9IHRhcmdldC5nZXREcmF3YWJsZSgpOwotCi0gICAgICAgIC8vIEFsc28sIHRoZSBub3RpZmljYXRpb24gbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGR1cmluZyB0aGUgYW5pbWF0aW9uLCBzbyBiYWNrZ3JvdW5kCi0gICAgICAgIC8vIG1pZ2h0IGJlIG51bGwgaGVyZS4KLSAgICAgICAgaWYgKGljb25EcmF3YWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpY29uRHJhd2FibGUubXV0YXRlKCkuc2V0Q29sb3JGaWx0ZXIobUljb25Db2xvckZpbHRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlSWNvbkFscGhhKEltYWdlVmlldyB0YXJnZXQsIGJvb2xlYW4gZGFyaykgewotICAgICAgICB0YXJnZXQuc2V0SW1hZ2VBbHBoYShkYXJrID8gbUljb25EYXJrQWxwaGEgOiAyNTUpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUdyYXlzY2FsZShJbWFnZVZpZXcgdGFyZ2V0LCBib29sZWFuIGRhcmspIHsKLSAgICAgICAgaWYgKGRhcmspIHsKLSAgICAgICAgICAgIHVwZGF0ZUdyYXlzY2FsZU1hdHJpeCgxZik7Ci0gICAgICAgICAgICB0YXJnZXQuc2V0Q29sb3JGaWx0ZXIobmV3IENvbG9yTWF0cml4Q29sb3JGaWx0ZXIobUdyYXlzY2FsZUNvbG9yTWF0cml4KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0YXJnZXQuc2V0Q29sb3JGaWx0ZXIobnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVFeHBhbmRhYmlsaXR5KGJvb2xlYW4gZXhwYW5kYWJsZSwgVmlldy5PbkNsaWNrTGlzdGVuZXIgb25DbGlja0xpc3RlbmVyKSB7Ci0gICAgICAgIG1FeHBhbmRCdXR0b24uc2V0VmlzaWJpbGl0eShleHBhbmRhYmxlID8gVmlldy5WSVNJQkxFIDogVmlldy5HT05FKTsKLSAgICAgICAgbU5vdGlmaWNhdGlvbkhlYWRlci5zZXRPbkNsaWNrTGlzdGVuZXIoZXhwYW5kYWJsZSA/IG9uQ2xpY2tMaXN0ZW5lciA6IG51bGwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVHcmF5c2NhbGVNYXRyaXgoZmxvYXQgaW50ZW5zaXR5KSB7Ci0gICAgICAgIG1HcmF5c2NhbGVDb2xvck1hdHJpeC5zZXRTYXR1cmF0aW9uKDEgLSBpbnRlbnNpdHkpOwotICAgIH0KLQogICAgIHByaXZhdGUgc3RhdGljIGludCBpbnRlcnBvbGF0ZUNvbG9yKGludCBzb3VyY2UsIGludCB0YXJnZXQsIGZsb2F0IHQpIHsKICAgICAgICAgaW50IGFTb3VyY2UgPSBDb2xvci5hbHBoYShzb3VyY2UpOwogICAgICAgICBpbnQgclNvdXJjZSA9IENvbG9yLnJlZChzb3VyY2UpOwpAQCAtMzAyLDkgKzEyMyw0IEBACiAgICAgICAgICAgICAgICAgKGludCkgKGdTb3VyY2UgKiAoMWYgLSB0KSArIGdUYXJnZXQgKiB0KSwKICAgICAgICAgICAgICAgICAoaW50KSAoYlNvdXJjZSAqICgxZiAtIHQpICsgYlRhcmdldCAqIHQpKTsKICAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTm90aWZpY2F0aW9uSGVhZGVyVmlldyBnZXROb3RpZmljYXRpb25IZWFkZXIoKSB7Ci0gICAgICAgIHJldHVybiBtTm90aWZpY2F0aW9uSGVhZGVyOwotICAgIH0KIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uVmlld1dyYXBwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvTm90aWZpY2F0aW9uVmlld1dyYXBwZXIuamF2YQppbmRleCAxMTlkNTdiLi42MTQ5OWRlIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL05vdGlmaWNhdGlvblZpZXdXcmFwcGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9Ob3RpZmljYXRpb25WaWV3V3JhcHBlci5qYXZhCkBAIC0yNiwxNiArMjYsMTMgQEAKICAqLwogcHVibGljIGFic3RyYWN0IGNsYXNzIE5vdGlmaWNhdGlvblZpZXdXcmFwcGVyIHsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQklHX01FRElBX05BUlJPVyA9ICJiaWdNZWRpYU5hcnJvdyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19NRURJQSA9ICJtZWRpYSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19CSUdfUElDVFVSRSA9ICJiaWdQaWN0dXJlIjsKLQogICAgIHByb3RlY3RlZCBmaW5hbCBWaWV3IG1WaWV3OwotICAgIHByaXZhdGUgYm9vbGVhbiBtU3ViVGV4dFZpc2libGUgPSB0cnVlOwogCiAgICAgcHVibGljIHN0YXRpYyBOb3RpZmljYXRpb25WaWV3V3JhcHBlciB3cmFwKENvbnRleHQgY3R4LCBWaWV3IHYpIHsKICAgICAgICAgaWYgKHYuZ2V0SWQoKSA9PSBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmlkLnN0YXR1c19iYXJfbGF0ZXN0X2V2ZW50X2NvbnRlbnQpIHsKICAgICAgICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uVGVtcGxhdGVWaWV3V3JhcHBlcihjdHgsIHYpOworICAgICAgICB9IGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBOb3RpZmljYXRpb25IZWFkZXJWaWV3KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbkhlYWRlclZpZXdXcmFwcGVyKGN0eCwgdik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbkN1c3RvbVZpZXdXcmFwcGVyKHYpOwogICAgICAgICB9CkBAIC01Nyw5ICs1NCw3IEBACiAgICAgLyoqCiAgICAgICogTm90aWZpZXMgdGhpcyB3cmFwcGVyIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIHZpZXcgbWlnaHQgaGF2ZSBjaGFuZ2VkLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG5vdGlmeUNvbnRlbnRVcGRhdGVkKCkgewotICAgICAgICBzZXRTdWJUZXh0VmlzaWJsZShtU3ViVGV4dFZpc2libGUpOwotICAgIH0KKyAgICBwdWJsaWMgdm9pZCBub3RpZnlDb250ZW50VXBkYXRlZCgpIHt9OwogCiAgICAgLyoqCiAgICAgICogQHJldHVybiB0cnVlIGlmIHRoaXMgdGVtcGxhdGUgbWlnaHQgbmVlZCB0byBiZSBjbGlwcGVkIHdpdGggYSByb3VuZCByZWN0IHRvIG1ha2UgaXQgbG9vawpAQCAtNzAsMTQgKzY1LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBDaGFuZ2UgdGhlIHN1YlRleHRWaXNpYmlsaXR5Ci0gICAgICogQHBhcmFtIHZpc2libGUgU2hvdWxkIHRoZSBzdWJ0ZXh0IGJlIHZpc2libGUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJUZXh0VmlzaWJsZShib29sZWFuIHZpc2libGUpIHsKLSAgICAgICAgbVN1YlRleHRWaXNpYmxlID0gdmlzaWJsZTsKLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBVcGRhdGUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGV4cGFuZCBidXR0b24uCiAgICAgICoKICAgICAgKiBAcGFyYW0gZXhwYW5kYWJsZSBzaG91bGQgdGhpcyB2aWV3IGJlIGV4cGFuZGFibGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvUmVtb3RlSW5wdXRDb250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL1JlbW90ZUlucHV0Q29udHJvbGxlci5qYXZhCmluZGV4IGYyNDNiMDAuLmQ3ZTQ3YzIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvUmVtb3RlSW5wdXRDb250cm9sbGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9SZW1vdGVJbnB1dENvbnRyb2xsZXIuamF2YQpAQCAtMzAsMTEgKzMwLDExIEBACiBwdWJsaWMgY2xhc3MgUmVtb3RlSW5wdXRDb250cm9sbGVyIHsKIAogICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFdlYWtSZWZlcmVuY2U8Tm90aWZpY2F0aW9uRGF0YS5FbnRyeT4+IG1SZW1vdGVJbnB1dHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBwcml2YXRlIGZpbmFsIFN0YXR1c0JhcldpbmRvd01hbmFnZXIgbVN0YXR1c0JhcldpbmRvd01hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8Q2FsbGJhY2s+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlMaXN0PD4oMyk7CiAgICAgcHJpdmF0ZSBmaW5hbCBIZWFkc1VwTWFuYWdlciBtSGVhZHNVcE1hbmFnZXI7CiAKICAgICBwdWJsaWMgUmVtb3RlSW5wdXRDb250cm9sbGVyKFN0YXR1c0JhcldpbmRvd01hbmFnZXIgc2J3bSwgSGVhZHNVcE1hbmFnZXIgaGVhZHNVcE1hbmFnZXIpIHsKLSAgICAgICAgbVN0YXR1c0JhcldpbmRvd01hbmFnZXIgPSBzYndtOworICAgICAgICBhZGRDYWxsYmFjayhzYndtKTsKICAgICAgICAgbUhlYWRzVXBNYW5hZ2VyID0gaGVhZHNVcE1hbmFnZXI7CiAgICAgfQogCkBAIC01OSw4ICs1OSwxMiBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhcHBseShOb3RpZmljYXRpb25EYXRhLkVudHJ5IGVudHJ5KSB7Ci0gICAgICAgIG1TdGF0dXNCYXJXaW5kb3dNYW5hZ2VyLnNldFJlbW90ZUlucHV0QWN0aXZlKGlzUmVtb3RlSW5wdXRBY3RpdmUoKSk7CiAgICAgICAgIG1IZWFkc1VwTWFuYWdlci5zZXRSZW1vdGVJbnB1dEFjdGl2ZShlbnRyeSwgaXNSZW1vdGVJbnB1dEFjdGl2ZShlbnRyeSkpOworICAgICAgICBib29sZWFuIHJlbW90ZUlucHV0QWN0aXZlID0gaXNSZW1vdGVJbnB1dEFjdGl2ZSgpOworICAgICAgICBpbnQgTiA9IG1DYWxsYmFja3Muc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgbUNhbGxiYWNrcy5nZXQoaSkub25SZW1vdGVJbnB1dEFjdGl2ZShyZW1vdGVJbnB1dEFjdGl2ZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKQEAgLTk5LDQgKzEwMywxMiBAQAogICAgIH0KIAogCisgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHsKKyAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwoY2FsbGJhY2spOworICAgICAgICBtQ2FsbGJhY2tzLmFkZChjYWxsYmFjayk7CisgICAgfQorCisgICAgcHVibGljIGludGVyZmFjZSBDYWxsYmFjayB7CisgICAgICAgIHZvaWQgb25SZW1vdGVJbnB1dEFjdGl2ZShib29sZWFuIGFjdGl2ZSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9TdGF0dXNCYXJJY29uVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9TdGF0dXNCYXJJY29uVmlldy5qYXZhCmluZGV4IGRiMjQxNWEuLmRlN2E4ZGIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvU3RhdHVzQmFySWNvblZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL1N0YXR1c0Jhckljb25WaWV3LmphdmEKQEAgLTMwLDggKzMwLDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3RGVidWc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUV2ZW50OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5TdGF0dXNCYXJJY29uOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiAKQEAgLTc2LDcgKzc0LDcgQEAKICAgICAgICAgICAgIHNldFNjYWxlWShzY2FsZSk7CiAgICAgICAgIH0KIAotICAgICAgICBzZXRTY2FsZVR5cGUoSW1hZ2VWaWV3LlNjYWxlVHlwZS5DRU5URVIpOworICAgICAgICBzZXRTY2FsZVR5cGUoU2NhbGVUeXBlLkNFTlRFUik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0Tm90aWZpY2F0aW9uKE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24pIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvY2FyL0Nhck5hdmlnYXRpb25CYXJWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL2Nhci9DYXJOYXZpZ2F0aW9uQmFyVmlldy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDY0YjA0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9jYXIvQ2FyTmF2aWdhdGlvbkJhclZpZXcuamF2YQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLmNhcjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5UeXBlZEFycmF5OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CitpbXBvcnQgYW5kcm9pZC5SLmNvbG9yOworaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXcuU2NhbGVUeXBlOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkxpbmVhckxheW91dDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLkFjdGl2aXR5U3RhcnRlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuTmF2aWdhdGlvbkJhclZpZXc7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLk5hdmlnYXRpb25CYXJHZXN0dXJlSGVscGVyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5wb2xpY3kuS2V5QnV0dG9uVmlldzsKKworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKKworLyoqCisgKiBBIGN1c3RvbSBuYXZpZ2F0aW9uIGJhciBmb3IgdGhlIGF1dG9tb3RpdmUgdXNlIGNhc2UuCisgKiA8cD4KKyAqIFRoZSBuYXZpZ2F0aW9uIGJhciBpbiB0aGUgYXV0b21vdGl2ZSB1c2UgY2FzZSBpcyBtb3JlIGxpa2UgYSBsaXN0IG9mIHNob3J0Y3V0cywgd2hpY2ggd2UKKyAqIGV4cGVjdCB0byBiZSBjdXN0b21pemFibGUgYnkgdGhlIGNhciBPRU1zLiBUaGlzIGltcGxlbWVudGF0aW9uIHBvcHVsYXRlcyB0aGUgbmF2X2J1dHRvbnMgbGF5b3V0CisgKiBmcm9tIHJlc291cmNlcyByYXRoZXIgdGhhbiB0aGUgbGF5b3V0IGZpbGUgc28gY3VzdG9taXphdGlvbiB3b3VsZCB0aGVuIG1lYW4gdXBkYXRpbmcKKyAqIGFycmF5c19jYXIueG1sIGFwcHJvcHJpYXRlbHkgaW4gYW4gb3ZlcmxheS4KKyAqLworY2xhc3MgQ2FyTmF2aWdhdGlvbkJhclZpZXcgZXh0ZW5kcyBOYXZpZ2F0aW9uQmFyVmlldyB7CisgICAgcHJpdmF0ZSBBY3Rpdml0eVN0YXJ0ZXIgbUFjdGl2aXR5U3RhcnRlcjsKKworICAgIHB1YmxpYyBDYXJOYXZpZ2F0aW9uQmFyVmlldyhDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgeworICAgICAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25GaW5pc2hJbmZsYXRlKCkgeworICAgICAgICAvLyBSZWFkIHVwIGFycmF5c19jYXIueG1sIGFuZCBwb3B1bGF0ZSB0aGUgbmF2aWdhdGlvbiBiYXIgaGVyZS4KKyAgICAgICAgQ29udGV4dCBjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgICAgICBSZXNvdXJjZXMgciA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKTsKKyAgICAgICAgVHlwZWRBcnJheSBpY29ucyA9IHIub2J0YWluVHlwZWRBcnJheShSLmFycmF5LmNhcl9zaG9ydGN1dF9pY29ucyk7CisgICAgICAgIFR5cGVkQXJyYXkgaW50ZW50cyA9IHIub2J0YWluVHlwZWRBcnJheShSLmFycmF5LmNhcl9zaG9ydGN1dF9pbnRlbnRfdXJpcyk7CisgICAgICAgIFR5cGVkQXJyYXkgbG9uZ3ByZXNzSW50ZW50cyA9CisgICAgICAgICAgICAgICAgci5vYnRhaW5UeXBlZEFycmF5KFIuYXJyYXkuY2FyX3Nob3J0Y3V0X2xvbmdwcmVzc19pbnRlbnRfdXJpcyk7CisKKyAgICAgICAgaWYgKGljb25zLmxlbmd0aCgpICE9IGludGVudHMubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXJfc2hvcnRjdXRfaWNvbnMgYW5kIGNhcl9zaG9ydGN1dF9pbnRlbnRzIGRvIG5vdCBtYXRjaCIpOworICAgICAgICB9CisKKyAgICAgICAgTGluZWFyTGF5b3V0IG5hdkJ1dHRvbnMgPSAoTGluZWFyTGF5b3V0KSBmaW5kVmlld0J5SWQoUi5pZC5uYXZfYnV0dG9ucyk7CisgICAgICAgIExpbmVhckxheW91dCBsaWdodHNPdXQgPSAoTGluZWFyTGF5b3V0KSBmaW5kVmlld0J5SWQoUi5pZC5saWdodHNfb3V0KTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGljb25zLmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIERyYXdhYmxlIGljb24gPSBpY29ucy5nZXREcmF3YWJsZShpKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gSW50ZW50LnBhcnNlVXJpKGludGVudHMuZ2V0U3RyaW5nKGkpLCBJbnRlbnQuVVJJX0lOVEVOVF9TQ0hFTUUpOworICAgICAgICAgICAgICAgIEludGVudCBsb25ncHJlc3MgPSBudWxsOworICAgICAgICAgICAgICAgIFN0cmluZyBsb25ncHJlc3NVcmkgPSBsb25ncHJlc3NJbnRlbnRzLmdldFN0cmluZyhpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWxvbmdwcmVzc1VyaS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ3ByZXNzID0gSW50ZW50LnBhcnNlVXJpKGxvbmdwcmVzc1VyaSwgSW50ZW50LlVSSV9JTlRFTlRfU0NIRU1FKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBuYXZfYnV0dG9ucyBhbmQgbGlnaHRzX291dCBzaG91bGQgbWF0Y2ggZXhhY3RseS4KKyAgICAgICAgICAgICAgICBuYXZCdXR0b25zLmFkZFZpZXcobWFrZUJ1dHRvbihjb250ZXh0LCBpY29uLCBpbnRlbnQsIGxvbmdwcmVzcykpOworICAgICAgICAgICAgICAgIGxpZ2h0c091dC5hZGRWaWV3KG1ha2VCdXR0b24oY29udGV4dCwgaWNvbiwgaW50ZW50LCBsb25ncHJlc3MpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1hbGZvcm1lZCBpbnRlbnQgdXJpIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIEltYWdlQnV0dG9uIG1ha2VCdXR0b24oQ29udGV4dCBjb250ZXh0LCBEcmF3YWJsZSBpY29uLAorICAgICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCwgZmluYWwgSW50ZW50IGxvbmdwcmVzcykgeworICAgICAgICBJbWFnZUJ1dHRvbiBidXR0b24gPSBuZXcgSW1hZ2VCdXR0b24oY29udGV4dCk7CisKKyAgICAgICAgYnV0dG9uLnNldEltYWdlRHJhd2FibGUoaWNvbik7CisgICAgICAgIGJ1dHRvbi5zZXRTY2FsZVR5cGUoU2NhbGVUeXBlLkNFTlRFUik7CisgICAgICAgIGJ1dHRvbi5zZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IudHJhbnNwYXJlbnQpOworICAgICAgICBMaW5lYXJMYXlvdXQuTGF5b3V0UGFyYW1zIGxwID0KKyAgICAgICAgICAgICAgICBuZXcgTGluZWFyTGF5b3V0LkxheW91dFBhcmFtcygwLCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCAxKTsKKyAgICAgICAgYnV0dG9uLnNldExheW91dFBhcmFtcyhscCk7CisKKyAgICAgICAgYnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgT25DbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgIGlmIChtQWN0aXZpdHlTdGFydGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5KGludGVudCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICAvLyBMb25nIGNsaWNrIGhhbmRsZXJzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgaWYgKGxvbmdwcmVzcyAhPSBudWxsKSB7CisgICAgICAgICAgICBidXR0b24uc2V0TG9uZ0NsaWNrYWJsZSh0cnVlKTsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRPbkxvbmdDbGlja0xpc3RlbmVyKG5ldyBPbkxvbmdDbGlja0xpc3RlbmVyKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgICAgICAgICBpZiAobUFjdGl2aXR5U3RhcnRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHkobG9uZ3ByZXNzLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1dHRvbi5zZXRMb25nQ2xpY2thYmxlKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBidXR0b247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QWN0aXZpdHlTdGFydGVyKEFjdGl2aXR5U3RhcnRlciBhY3Rpdml0eVN0YXJ0ZXIpIHsKKyAgICAgICAgbUFjdGl2aXR5U3RhcnRlciA9IGFjdGl2aXR5U3RhcnRlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXREaXNhYmxlZEZsYWdzKGludCBkaXNhYmxlZEZsYWdzLCBib29sZWFuIGZvcmNlKSB7CisgICAgICAgIC8vIFRPRE86IFBvcHVsYXRlLgorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlb3JpZW50KCkgeworICAgICAgICAvLyBXZSBleHBlY3QgdGhlIGNhciBoZWFkIHVuaXQgdG8gYWx3YXlzIGhhdmUgYSBmaXhlZCByb3RhdGlvbiBzbyB3ZSBpZ25vcmUgdGhpcy4gVGhlIHN1cGVyCisgICAgICAgIC8vIGNsYXNzIGltcGxlbnRhdGlvbiBleHBlY3RzIG1Sb3RhdGVkVmlld3MgdG8gYmUgcG9wdWxhdGVkLCBzbyBpZiB5b3UgY2FsbCBpbnRvIGl0LCB0aGVyZQorICAgICAgICAvLyBpcyBhIHBvc3NpYmlsaXR5IG9mIGEgTnVsbFBvaW50ZXJFeGNlcHRpb24uCisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFZpZXcgZ2V0Q3VycmVudFZpZXcoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldE5hdmlnYXRpb25JY29uSGludHMoaW50IGhpbnRzLCBib29sZWFuIGZvcmNlKSB7CisgICAgICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHNldCB0aGUgbmF2aWdhdGlvbiBpY29uIGhpbnRzIGZvciBhIHZlaGljbGUKKyAgICAgICAgLy8gQ2FsbGluZyBzZXROYXZpZ2F0aW9uSWNvbkhpbnRzIGluIHRoZSBiYXNlIGNsYXNzIHdpbGwgcmVzdWx0IGluIGEgTlBFIGFzIHRoZSBjYXIKKyAgICAgICAgLy8gbmF2aWdhdGlvbiBiYXIgZG9lcyBub3QgaGF2ZSBhIGJhY2sgYnV0dG9uLgorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvY2FyL0NhclN0YXR1c0Jhci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9jYXIvQ2FyU3RhdHVzQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2MzFmOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvY2FyL0NhclN0YXR1c0Jhci5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5jYXI7CisKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBpeGVsRm9ybWF0OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXAuTGF5b3V0UGFyYW1zOworaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOworCitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUGhvbmVTdGF0dXNCYXI7CisKKy8qKgorICogQSBzdGF0dXMgYmFyIChhbmQgbmF2aWdhdGlvbiBiYXIpIHRhaWxvcmVkIGZvciB0aGUgYXV0b21vdGl2ZSB1c2UgY2FzZS4KKyAqLworcHVibGljIGNsYXNzIENhclN0YXR1c0JhciBleHRlbmRzIFBob25lU3RhdHVzQmFyIHsKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBhZGROYXZpZ2F0aW9uQmFyKCkgeworICAgICAgICBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcyBscCA9IG5ldyBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcygKKyAgICAgICAgICAgICAgICBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULCBMYXlvdXRQYXJhbXMuTUFUQ0hfUEFSRU5ULAorICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfTkFWSUdBVElPTl9CQVIsCisgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfVE9VQ0hBQkxFX1dIRU5fV0FLSU5HCisgICAgICAgICAgICAgICAgICAgIHwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19OT1RfRk9DVVNBQkxFCisgICAgICAgICAgICAgICAgICAgIHwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19OT1RfVE9VQ0hfTU9EQUwKKyAgICAgICAgICAgICAgICAgICAgfCBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1dBVENIX09VVFNJREVfVE9VQ0gKKyAgICAgICAgICAgICAgICAgICAgfCBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1NQTElUX1RPVUNICisgICAgICAgICAgICAgICAgICAgIHwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19IQVJEV0FSRV9BQ0NFTEVSQVRFRCwKKyAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdC5UUkFOU0xVQ0VOVCk7CisgICAgICAgIGxwLnNldFRpdGxlKCJDYXJOYXZpZ2F0aW9uQmFyIik7CisgICAgICAgIGxwLndpbmRvd0FuaW1hdGlvbnMgPSAwOworICAgICAgICBtV2luZG93TWFuYWdlci5hZGRWaWV3KG1OYXZpZ2F0aW9uQmFyVmlldywgbHApOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGNyZWF0ZU5hdmlnYXRpb25CYXJWaWV3KENvbnRleHQgY29udGV4dCkgeworICAgICAgICBpZiAobU5hdmlnYXRpb25CYXJWaWV3ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIENhck5hdmlnYXRpb25CYXJWaWV3IGNhck5hdkJhciA9CisgICAgICAgICAgICAgICAgKENhck5hdmlnYXRpb25CYXJWaWV3KSBWaWV3LmluZmxhdGUoY29udGV4dCwgUi5sYXlvdXQuY2FyX25hdmlnYXRpb25fYmFyLCBudWxsKTsKKyAgICAgICAgY2FyTmF2QmFyLnNldEFjdGl2aXR5U3RhcnRlcih0aGlzKTsKKyAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3ID0gY2FyTmF2QmFyOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHJlcG9zaXRpb25OYXZpZ2F0aW9uQmFyKCkgeworICAgICAgICAvLyBUaGUgbmF2aWdhdGlvbiBiYXIgZm9yIGEgdmVoaWNsZSB3aWxsIG5vdCBuZWVkIHRvIGJlIHJlcG9zaXRpb25lZCwgYXMgaXQgaXMgYWx3YXlzCisgICAgICAgIC8vIHNldCBhdCB0aGUgYm90dG9tLgorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvbm90aWZpY2F0aW9uL0h5YnJpZE5vdGlmaWNhdGlvblZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvbm90aWZpY2F0aW9uL0h5YnJpZE5vdGlmaWNhdGlvblZpZXcuamF2YQppbmRleCBmYWZlYTk4Li41ZmI2ZmVjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL25vdGlmaWNhdGlvbi9IeWJyaWROb3RpZmljYXRpb25WaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9ub3RpZmljYXRpb24vSHlicmlkTm90aWZpY2F0aW9uVmlldy5qYXZhCkBAIC0yMyw2ICsyMyw4IEBACiAKIGltcG9ydCBjb20uYW5kcm9pZC5rZXlndWFyZC5BbHBoYU9wdGltaXplZExpbmVhckxheW91dDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlZpZXdJbnZlcnRIZWxwZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLk5vdGlmaWNhdGlvblBhbmVsVmlldzsKIAogLyoqCiAgKiBBIGh5YnJpZCB2aWV3IHdoaWNoIG1heSBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IG9uZSBvcmUgbW9yZSBub3RpZmljYXRpb25zLgpAQCAtMzEsNiArMzMsNyBAQAogCiAgICAgcHJvdGVjdGVkIFRleHRWaWV3IG1UaXRsZVZpZXc7CiAgICAgcHJvdGVjdGVkIFRleHRWaWV3IG1UZXh0VmlldzsKKyAgICBwcml2YXRlIFZpZXdJbnZlcnRIZWxwZXIgbUludmVydEhlbHBlcjsKIAogICAgIHB1YmxpYyBIeWJyaWROb3RpZmljYXRpb25WaWV3KENvbnRleHQgY29udGV4dCkgewogICAgICAgICB0aGlzKGNvbnRleHQsIG51bGwpOwpAQCAtNTQsNiArNTcsNyBAQAogICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKICAgICAgICAgbVRpdGxlVmlldyA9IChUZXh0VmlldykgZmluZFZpZXdCeUlkKFIuaWQubm90aWZpY2F0aW9uX3RpdGxlKTsKICAgICAgICAgbVRleHRWaWV3ID0gKFRleHRWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5ub3RpZmljYXRpb25fdGV4dCk7CisgICAgICAgIG1JbnZlcnRIZWxwZXIgPSBuZXcgVmlld0ludmVydEhlbHBlcih0aGlzLCBOb3RpZmljYXRpb25QYW5lbFZpZXcuRE9aRV9BTklNQVRJT05fRFVSQVRJT04pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGJpbmQoQ2hhclNlcXVlbmNlIHRpdGxlKSB7CkBAIC02NSw0ICs2OSw4IEBACiAgICAgICAgIG1UZXh0Vmlldy5zZXRUZXh0KHRleHQpOwogICAgICAgICByZXF1ZXN0TGF5b3V0KCk7CiAgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RGFyayhib29sZWFuIGRhcmssIGJvb2xlYW4gZmFkZSwgbG9uZyBkZWxheSkgeworICAgICAgICBtSW52ZXJ0SGVscGVyLnNldEludmVydGVkKGRhcmssIGZhZGUsIGRlbGF5KTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0tleWd1YXJkU3RhdHVzQmFyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9LZXlndWFyZFN0YXR1c0JhclZpZXcuamF2YQppbmRleCBiOTNmYzc2Li5mNDFlNDdiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL0tleWd1YXJkU3RhdHVzQmFyVmlldy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvS2V5Z3VhcmRTdGF0dXNCYXJWaWV3LmphdmEKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUG93ZXJTYXZlQ2hhbmdlZCgpIHsKKyAgICBwdWJsaWMgdm9pZCBvblBvd2VyU2F2ZUNoYW5nZWQoYm9vbGVhbiBpc1Bvd2VyU2F2ZSkgewogICAgICAgICAvLyBjb3VsZCBub3QgY2FyZSBsZXNzCiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJBcHBzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJBcHBzLmphdmEKaW5kZXggNThjOTcyMi4uZDBjMTRmMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyQXBwcy5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckFwcHMuamF2YQpAQCAtNzQ2LDcgKzc0Niw3IEBACiAgICAgICAgIC8vIExhdW5jaCBvciBicmluZyB0aGUgYWN0aXZpdHkgdG8gZnJvbnQuCiAgICAgICAgIGZpbmFsIElBY3Rpdml0eU1hbmFnZXIgaUFtID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlBbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza1BlcnNpc3RlbnRJZCwgSU5WQUxJRF9TVEFDS19JRCwgbnVsbCAvKiBvcHRpb25zICovKTsKKyAgICAgICAgICAgIGlBbS5zdGFydEFjdGl2aXR5RnJvbVJlY2VudHModGFza1BlcnNpc3RlbnRJZCwgbnVsbCAvKiBvcHRpb25zICovKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFNsb2cuZShUQUcsICJFeGNlcHRpb24gd2hlbiBhY3RpdmF0aW5nIGEgcmVjZW50IHRhc2siLCBlKTsKICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKQEAgLTExMDQsNiArMTEwNCwxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlQaW5uZWQoKSB7CisgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckdlc3R1cmVIZWxwZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhckdlc3R1cmVIZWxwZXIuamF2YQppbmRleCBhMjYxNmZlLi5lNWI0ZjRkIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJHZXN0dXJlSGVscGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyR2VzdHVyZUhlbHBlci5qYXZhCkBAIC0yNSw5ICsyNSwxMSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WZWxvY2l0eVRyYWNrZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdDb25maWd1cmF0aW9uOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUmVjZW50c0NvbXBvbmVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGFja2RpdmlkZXIuRGl2aWRlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuRGl2aWRlclNuYXBBbGdvcml0aG0uU25hcFRhcmdldDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lci5UdW5lclNlcnZpY2U7CiAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuKjsKQEAgLTU4LDcgKzYwLDYgQEAKIAogICAgIHByaXZhdGUgZmluYWwgR2VzdHVyZURldGVjdG9yIG1UYXNrU3dpdGNoZXJEZXRlY3RvcjsKICAgICBwcml2YXRlIGZpbmFsIGludCBtU2Nyb2xsVG91Y2hTbG9wOwotICAgIHByaXZhdGUgZmluYWwgaW50IG1Ub3VjaFNsb3A7CiAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1pbkZsaW5nVmVsb2NpdHk7CiAgICAgcHJpdmF0ZSBpbnQgbVRvdWNoRG93blg7CiAgICAgcHJpdmF0ZSBpbnQgbVRvdWNoRG93blk7CkBAIC03Myw3ICs3NCw2IEBACiAgICAgICAgIFZpZXdDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24gPSBWaWV3Q29uZmlndXJhdGlvbi5nZXQoY29udGV4dCk7CiAgICAgICAgIFJlc291cmNlcyByID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKICAgICAgICAgbVNjcm9sbFRvdWNoU2xvcCA9IHIuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubmF2aWdhdGlvbl9iYXJfbWluX3N3aXBlX2Rpc3RhbmNlKTsKLSAgICAgICAgbVRvdWNoU2xvcCA9IFZpZXdDb25maWd1cmF0aW9uLmdldChjb250ZXh0KS5nZXRTY2FsZWRUb3VjaFNsb3AoKTsKICAgICAgICAgbU1pbkZsaW5nVmVsb2NpdHkgPSBjb25maWd1cmF0aW9uLmdldFNjYWxlZE1pbmltdW1GbGluZ1ZlbG9jaXR5KCk7CiAgICAgICAgIG1UYXNrU3dpdGNoZXJEZXRlY3RvciA9IG5ldyBHZXN0dXJlRGV0ZWN0b3IoY29udGV4dCwgdGhpcyk7CiAgICAgICAgIFR1bmVyU2VydmljZS5nZXQoY29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBLRVlfRE9DS19XSU5ET1dfR0VTVFVSRSk7CkBAIC0xNjUsMTYgKzE2NSwxOSBAQAogICAgICAgICBpbnQgeSA9IChpbnQpIGV2ZW50LmdldFkoKTsKICAgICAgICAgaW50IHhEaWZmID0gTWF0aC5hYnMoeCAtIG1Ub3VjaERvd25YKTsKICAgICAgICAgaW50IHlEaWZmID0gTWF0aC5hYnMoeSAtIG1Ub3VjaERvd25ZKTsKKyAgICAgICAgaWYgKG1EaXZpZGVyID09IG51bGwgfHwgbVJlY2VudHNDb21wb25lbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIGlmICghbURvY2tXaW5kb3dUb3VjaFNsb3BFeGNlZWRlZCkgewogICAgICAgICAgICAgYm9vbGVhbiB0b3VjaFNsb3BFeGNlZWRlZCA9ICFtSXNWZXJ0aWNhbAotICAgICAgICAgICAgICAgICAgICA/IHlEaWZmID4gbVRvdWNoU2xvcCAmJiB5RGlmZiA+IHhEaWZmCi0gICAgICAgICAgICAgICAgICAgIDogeERpZmYgPiBtVG91Y2hTbG9wICYmIHhEaWZmID4geURpZmY7CisgICAgICAgICAgICAgICAgICAgID8geURpZmYgPiBtU2Nyb2xsVG91Y2hTbG9wICYmIHlEaWZmID4geERpZmYKKyAgICAgICAgICAgICAgICAgICAgOiB4RGlmZiA+IG1TY3JvbGxUb3VjaFNsb3AgJiYgeERpZmYgPiB5RGlmZjsKICAgICAgICAgICAgIGlmICh0b3VjaFNsb3BFeGNlZWRlZCAmJiBtRGl2aWRlci5nZXRWaWV3KCkuZ2V0V2luZG93TWFuYWdlclByb3h5KCkuZ2V0RG9ja1NpZGUoKQogICAgICAgICAgICAgICAgICAgICA9PSBET0NLRURfSU5WQUxJRCkgewotICAgICAgICAgICAgICAgIG1EcmFnTW9kZSA9IGNhbGN1bGF0ZURyYWdNb2RlKCk7CiAgICAgICAgICAgICAgICAgUmVjdCBpbml0aWFsQm91bmRzID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpbnQgZHJhZ01vZGUgPSBjYWxjdWxhdGVEcmFnTW9kZSgpOwogICAgICAgICAgICAgICAgIGludCBjcmVhdGVNb2RlID0gQWN0aXZpdHlNYW5hZ2VyLkRPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVDsKLSAgICAgICAgICAgICAgICBpZiAobURyYWdNb2RlID09IERSQUdfTU9ERV9ESVZJREVSKSB7CisgICAgICAgICAgICAgICAgaWYgKGRyYWdNb2RlID09IERSQUdfTU9ERV9ESVZJREVSKSB7CiAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxCb3VuZHMgPSBuZXcgUmVjdCgpOwogICAgICAgICAgICAgICAgICAgICBtRGl2aWRlci5nZXRWaWV3KCkuY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24obUlzVmVydGljYWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKGludCkgZXZlbnQuZ2V0UmF3WCgpCkBAIC0xODMsMjIgKzE4NiwzMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBET0NLRURfVE9QCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IERPQ0tFRF9MRUZULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxCb3VuZHMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobURyYWdNb2RlID09IERSQUdfTU9ERV9SRUNFTlRTICYmIG1Ub3VjaERvd25YCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcmFnTW9kZSA9PSBEUkFHX01PREVfUkVDRU5UUyAmJiBtVG91Y2hEb3duWAogICAgICAgICAgICAgICAgICAgICAgICAgPCBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaXNwbGF5TWV0cmljcygpLndpZHRoUGl4ZWxzIC8gMikgewogICAgICAgICAgICAgICAgICAgICBjcmVhdGVNb2RlID0gQWN0aXZpdHlNYW5hZ2VyLkRPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9CT1RUT01fT1JfUklHSFQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1SZWNlbnRzQ29tcG9uZW50LmRvY2tUb3BUYXNrKG1EcmFnTW9kZSA9PSBEUkFHX01PREVfUkVDRU5UUywgY3JlYXRlTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxCb3VuZHMpOwotICAgICAgICAgICAgICAgIGlmIChtRHJhZ01vZGUgPT0gRFJBR19NT0RFX0RJVklERVIpIHsKLSAgICAgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnN0YXJ0RHJhZ2dpbmcoKTsKKyAgICAgICAgICAgICAgICBib29sZWFuIGRvY2tlZCA9IG1SZWNlbnRzQ29tcG9uZW50LmRvY2tUb3BUYXNrKGRyYWdNb2RlID09IERSQUdfTU9ERV9SRUNFTlRTLAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlTW9kZSwgaW5pdGlhbEJvdW5kcyk7CisgICAgICAgICAgICAgICAgaWYgKGRvY2tlZCkgeworICAgICAgICAgICAgICAgICAgICBtRHJhZ01vZGUgPSBkcmFnTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1EcmFnTW9kZSA9PSBEUkFHX01PREVfRElWSURFUikgeworICAgICAgICAgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnN0YXJ0RHJhZ2dpbmcoZmFsc2UgLyogYW5pbWF0ZSAqLyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbURvY2tXaW5kb3dUb3VjaFNsb3BFeGNlZWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuYWN0aW9uKG1Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ldHJpY3NMb2dnZXIuQUNUSU9OX1dJTkRPV19ET0NLX1NXSVBFKTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbURvY2tXaW5kb3dUb3VjaFNsb3BFeGNlZWRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobURyYWdNb2RlID09IERSQUdfTU9ERV9ESVZJREVSKSB7Ci0gICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnJlc2l6ZVN0YWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgIW1Jc1ZlcnRpY2FsID8gKGludCkgZXZlbnQuZ2V0UmF3WSgpIDogKGludCkgZXZlbnQuZ2V0UmF3WCgpKTsKKyAgICAgICAgICAgICAgICBpbnQgcG9zaXRpb24gPSAhbUlzVmVydGljYWwgPyAoaW50KSBldmVudC5nZXRSYXdZKCkgOiAoaW50KSBldmVudC5nZXRSYXdYKCk7CisgICAgICAgICAgICAgICAgU25hcFRhcmdldCBzbmFwVGFyZ2V0ID0gbURpdmlkZXIuZ2V0VmlldygpLmdldFNuYXBBbGdvcml0aG0oKQorICAgICAgICAgICAgICAgICAgICAgICAgLmNhbGN1bGF0ZVNuYXBUYXJnZXQocG9zaXRpb24sIDBmIC8qIHZlbG9jaXR5ICovKTsKKyAgICAgICAgICAgICAgICBtRGl2aWRlci5nZXRWaWV3KCkucmVzaXplU3RhY2socG9zaXRpb24sIHNuYXBUYXJnZXQucG9zaXRpb24sIHNuYXBUYXJnZXQpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtRHJhZ01vZGUgPT0gRFJBR19NT0RFX1JFQ0VOVFMpIHsKICAgICAgICAgICAgICAgICBtUmVjZW50c0NvbXBvbmVudC5vbkRyYWdnaW5nSW5SZWNlbnRzKGV2ZW50LmdldFJhd1koKSk7CiAgICAgICAgICAgICB9CkBAIC0yMDksNyArMjIwLDcgQEAKICAgICBwcml2YXRlIHZvaWQgaGFuZGxlRHJhZ0FjdGlvblVwRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKICAgICAgICAgbVZlbG9jaXR5VHJhY2tlci5hZGRNb3ZlbWVudChldmVudCk7CiAgICAgICAgIG1WZWxvY2l0eVRyYWNrZXIuY29tcHV0ZUN1cnJlbnRWZWxvY2l0eSgxMDAwKTsKLSAgICAgICAgaWYgKG1Eb2NrV2luZG93VG91Y2hTbG9wRXhjZWVkZWQpIHsKKyAgICAgICAgaWYgKG1Eb2NrV2luZG93VG91Y2hTbG9wRXhjZWVkZWQgJiYgbURpdmlkZXIgIT0gbnVsbCAmJiBtUmVjZW50c0NvbXBvbmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAobURyYWdNb2RlID09IERSQUdfTU9ERV9ESVZJREVSKSB7CiAgICAgICAgICAgICAgICAgbURpdmlkZXIuZ2V0VmlldygpLnN0b3BEcmFnZ2luZyhtSXNWZXJ0aWNhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChpbnQpIGV2ZW50LmdldFJhd1goKQpAQCAtMjQ5LDcgKzI2MCw3IEBACiAgICAgICAgIGZsb2F0IGFic1ZlbFkgPSBNYXRoLmFicyh2ZWxvY2l0eVkpOwogICAgICAgICBib29sZWFuIGlzVmFsaWRGbGluZyA9IGFic1ZlbFggPiBtTWluRmxpbmdWZWxvY2l0eSAmJgogICAgICAgICAgICAgICAgIG1Jc1ZlcnRpY2FsID8gKGFic1ZlbFkgPiBhYnNWZWxYKSA6IChhYnNWZWxYID4gYWJzVmVsWSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkRmxpbmcpIHsKKyAgICAgICAgaWYgKGlzVmFsaWRGbGluZyAmJiBtUmVjZW50c0NvbXBvbmVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICBib29sZWFuIHNob3dOZXh0OwogICAgICAgICAgICAgaWYgKCFtSXNSVEwpIHsKICAgICAgICAgICAgICAgICBzaG93TmV4dCA9IG1Jc1ZlcnRpY2FsID8gKHZlbG9jaXR5WSA8IDApIDogKHZlbG9jaXR5WCA8IDApOwpAQCAtMjcwLDcgKzI4MSw3IEBACiAgICAgcHVibGljIHZvaWQgb25UdW5pbmdDaGFuZ2VkKFN0cmluZyBrZXksIFN0cmluZyBuZXdWYWx1ZSkgewogICAgICAgICBzd2l0Y2ggKGtleSkgewogICAgICAgICAgICAgY2FzZSBLRVlfRE9DS19XSU5ET1dfR0VTVFVSRToKLSAgICAgICAgICAgICAgICBtRG9ja1dpbmRvd0VuYWJsZWQgPSAobmV3VmFsdWUgIT0gbnVsbCkgJiYKKyAgICAgICAgICAgICAgICBtRG9ja1dpbmRvd0VuYWJsZWQgPSAobmV3VmFsdWUgPT0gbnVsbCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIChJbnRlZ2VyLnBhcnNlSW50KG5ld1ZhbHVlKSAhPSAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9OYXZpZ2F0aW9uQmFyVmlldy5qYXZhCmluZGV4IGNkZGIxZmMuLjU1YzdjYjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTmF2aWdhdGlvbkJhclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05hdmlnYXRpb25CYXJWaWV3LmphdmEKQEAgLTM2LDExICszNiwxMyBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CitpbXBvcnQgYW5kcm9pZC52aWV3LklEb2NrZWRTdGFja0xpc3RlbmVyLlN0dWI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5GcmFtZUxheW91dDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CkBAIC02Nyw3ICs2OSw2IEBACiAgICAgVmlldyBtQ3VycmVudFZpZXcgPSBudWxsOwogICAgIFZpZXdbXSBtUm90YXRlZFZpZXdzID0gbmV3IFZpZXdbNF07CiAKLSAgICBpbnQgbUJhclNpemU7CiAgICAgYm9vbGVhbiBtVmVydGljYWw7CiAgICAgYm9vbGVhbiBtU2NyZWVuT247CiAKQEAgLTc2LDYgKzc3LDkgQEAKICAgICBpbnQgbU5hdmlnYXRpb25JY29uSGludHMgPSAwOwogCiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtQmFja0ljb24sIG1CYWNrTGFuZEljb24sIG1CYWNrQWx0SWNvbiwgbUJhY2tBbHRMYW5kSWNvbjsKKyAgICBwcml2YXRlIERyYXdhYmxlIG1CYWNrQ2FyTW9kZUljb24sIG1CYWNrTGFuZENhck1vZGVJY29uOworICAgIHByaXZhdGUgRHJhd2FibGUgbUJhY2tBbHRDYXJNb2RlSWNvbiwgbUJhY2tBbHRMYW5kQ2FyTW9kZUljb247CisgICAgcHJpdmF0ZSBEcmF3YWJsZSBtSG9tZURlZmF1bHRJY29uLCBtSG9tZUNhck1vZGVJY29uOwogICAgIHByaXZhdGUgRHJhd2FibGUgbVJlY2VudEljb247CiAgICAgcHJpdmF0ZSBEcmF3YWJsZSBtUmVjZW50TGFuZEljb247CiAKQEAgLTk0LDYgKzk4LDcgQEAKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzTGF5b3V0UnRsOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTGF5b3V0VHJhbnNpdGlvbnNFbmFibGVkID0gdHJ1ZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbVdha2VBbmRVbmxvY2tpbmc7CisgICAgcHJpdmF0ZSBib29sZWFuIG1DYXJNb2RlID0gZmFsc2U7CiAKICAgICBwcml2YXRlIGNsYXNzIE5hdlRyYW5zaXRpb25MaXN0ZW5lciBpbXBsZW1lbnRzIFRyYW5zaXRpb25MaXN0ZW5lciB7CiAgICAgICAgIHByaXZhdGUgYm9vbGVhbiBtQmFja1RyYW5zaXRpb25pbmc7CkBAIC0xNTUsOCArMTYwLDggQEAKICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGhvdyA9ICIiICsgbS5vYmo7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB3ID0gZ2V0V2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGggPSBnZXRIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHZ3ID0gbUN1cnJlbnRWaWV3LmdldFdpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB2aCA9IG1DdXJyZW50Vmlldy5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHZ3ID0gZ2V0Q3VycmVudFZpZXcoKS5nZXRXaWR0aCgpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdmggPSBnZXRDdXJyZW50VmlldygpLmdldEhlaWdodCgpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChoICE9IHZoIHx8IHcgIT0gdncpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgU3RyaW5nLmZvcm1hdCgKQEAgLTE3NCwxNiArMTc5LDE1IEBACiAgICAgcHVibGljIE5hdmlnYXRpb25CYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKIAotICAgICAgICBtRGlzcGxheSA9ICgoV2luZG93TWFuYWdlciljb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCisgICAgICAgIG1EaXNwbGF5ID0gKChXaW5kb3dNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCiAgICAgICAgICAgICAgICAgQ29udGV4dC5XSU5ET1dfU0VSVklDRSkpLmdldERlZmF1bHREaXNwbGF5KCk7CiAKICAgICAgICAgZmluYWwgUmVzb3VyY2VzIHJlcyA9IGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgbUJhclNpemUgPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubmF2aWdhdGlvbl9iYXJfc2l6ZSk7CiAgICAgICAgIG1WZXJ0aWNhbCA9IGZhbHNlOwogICAgICAgICBtU2hvd01lbnUgPSBmYWxzZTsKICAgICAgICAgbUdlc3R1cmVIZWxwZXIgPSBuZXcgTmF2aWdhdGlvbkJhckdlc3R1cmVIZWxwZXIoY29udGV4dCk7CiAKLSAgICAgICAgZ2V0SWNvbnMocmVzKTsKKyAgICAgICAgZ2V0SWNvbnMoY29udGV4dCk7CiAKICAgICAgICAgbUJhclRyYW5zaXRpb25zID0gbmV3IE5hdmlnYXRpb25CYXJUcmFuc2l0aW9ucyh0aGlzKTsKICAgICB9CkBAIC0yMjcsNDIgKzIzMSw1NCBAQAogICAgICAgICByZXR1cm4gbUN1cnJlbnRWaWV3OwogICAgIH0KIAotICAgIHB1YmxpYyBWaWV3IGdldFJlY2VudHNCdXR0b24oKSB7Ci0gICAgICAgIHJldHVybiBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKFIuaWQucmVjZW50X2FwcHMpOworICAgIHB1YmxpYyBLZXlCdXR0b25WaWV3IGdldFJlY2VudHNCdXR0b24oKSB7CisgICAgICAgIHJldHVybiAoS2V5QnV0dG9uVmlldykgZ2V0Q3VycmVudFZpZXcoKS5maW5kVmlld0J5SWQoUi5pZC5yZWNlbnRfYXBwcyk7CiAgICAgfQogCiAgICAgcHVibGljIFZpZXcgZ2V0TWVudUJ1dHRvbigpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5tZW51KTsKKyAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWaWV3KCkuZmluZFZpZXdCeUlkKFIuaWQubWVudSk7CiAgICAgfQogCiAgICAgcHVibGljIFZpZXcgZ2V0QmFja0J1dHRvbigpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5iYWNrKTsKKyAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWaWV3KCkuZmluZFZpZXdCeUlkKFIuaWQuYmFjayk7CiAgICAgfQogCiAgICAgcHVibGljIEtleUJ1dHRvblZpZXcgZ2V0SG9tZUJ1dHRvbigpIHsKLSAgICAgICAgcmV0dXJuIChLZXlCdXR0b25WaWV3KSBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaG9tZSk7CisgICAgICAgIHJldHVybiAoS2V5QnV0dG9uVmlldykgZ2V0Q3VycmVudFZpZXcoKS5maW5kVmlld0J5SWQoUi5pZC5ob21lKTsKICAgICB9CiAKICAgICBwdWJsaWMgVmlldyBnZXRJbWVTd2l0Y2hCdXR0b24oKSB7Ci0gICAgICAgIHJldHVybiBtQ3VycmVudFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaW1lX3N3aXRjaGVyKTsKKyAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWaWV3KCkuZmluZFZpZXdCeUlkKFIuaWQuaW1lX3N3aXRjaGVyKTsKICAgICB9CiAKICAgICBwdWJsaWMgVmlldyBnZXRBcHBTaGVsZigpIHsKLSAgICAgICAgcmV0dXJuIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5hcHBfc2hlbGYpOworICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZpZXcoKS5maW5kVmlld0J5SWQoUi5pZC5hcHBfc2hlbGYpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBnZXRJY29ucyhSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1CYWNrSWNvbiA9IHJlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3N5c2Jhcl9iYWNrKTsKKyAgICBwcml2YXRlIHZvaWQgZ2V0Q2FyTW9kZUljb25zKENvbnRleHQgY3R4KSB7CisgICAgICAgIG1CYWNrQ2FyTW9kZUljb24gPSBjdHguZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfYmFja19jYXJtb2RlKTsKKyAgICAgICAgbUJhY2tMYW5kQ2FyTW9kZUljb24gPSBtQmFja0Nhck1vZGVJY29uOworICAgICAgICBtQmFja0FsdENhck1vZGVJY29uID0gY3R4LmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfc3lzYmFyX2JhY2tfaW1lX2Nhcm1vZGUpOworICAgICAgICBtQmFja0FsdExhbmRDYXJNb2RlSWNvbiA9IG1CYWNrQWx0Q2FyTW9kZUljb247CisgICAgICAgIG1Ib21lQ2FyTW9kZUljb24gPSBjdHguZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfaG9tZV9jYXJtb2RlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZ2V0SWNvbnMoQ29udGV4dCBjdHgpIHsKKyAgICAgICAgbUJhY2tJY29uID0gY3R4LmdldERyYXdhYmxlKFIuZHJhd2FibGUuaWNfc3lzYmFyX2JhY2spOwogICAgICAgICBtQmFja0xhbmRJY29uID0gbUJhY2tJY29uOwotICAgICAgICBtQmFja0FsdEljb24gPSByZXMuZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfYmFja19pbWUpOworICAgICAgICBtQmFja0FsdEljb24gPSBjdHguZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfYmFja19pbWUpOwogICAgICAgICBtQmFja0FsdExhbmRJY29uID0gbUJhY2tBbHRJY29uOwotICAgICAgICBtUmVjZW50SWNvbiA9IHJlcy5nZXREcmF3YWJsZShSLmRyYXdhYmxlLmljX3N5c2Jhcl9yZWNlbnQpOworCisgICAgICAgIG1Ib21lRGVmYXVsdEljb24gPSBjdHguZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfaG9tZSk7CisKKyAgICAgICAgbVJlY2VudEljb24gPSBjdHguZ2V0RHJhd2FibGUoUi5kcmF3YWJsZS5pY19zeXNiYXJfcmVjZW50KTsKICAgICAgICAgbVJlY2VudExhbmRJY29uID0gbVJlY2VudEljb247CisgICAgICAgIGdldENhck1vZGVJY29ucyhjdHgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNldExheW91dERpcmVjdGlvbihpbnQgbGF5b3V0RGlyZWN0aW9uKSB7Ci0gICAgICAgIGdldEljb25zKGdldENvbnRleHQoKS5nZXRSZXNvdXJjZXMoKSk7CisgICAgICAgIGdldEljb25zKGdldENvbnRleHQoKSk7CiAKICAgICAgICAgc3VwZXIuc2V0TGF5b3V0RGlyZWN0aW9uKGxheW91dERpcmVjdGlvbik7CiAgICAgfQpAQCAtMjc2LDYgKzI5MiwxOCBAQAogICAgICAgICBzZXROYXZpZ2F0aW9uSWNvbkhpbnRzKGhpbnRzLCBmYWxzZSk7CiAgICAgfQogCisgICAgcHJpdmF0ZSBEcmF3YWJsZSBnZXRCYWNrSWNvbldpdGhBbHQoYm9vbGVhbiBjYXJNb2RlLCBib29sZWFuIGxhbmRzY2FwZSkgeworICAgICAgICByZXR1cm4gbGFuZHNjYXBlCisgICAgICAgICAgICAgICAgPyBjYXJNb2RlID8gbUJhY2tBbHRMYW5kQ2FyTW9kZUljb24gOiBtQmFja0FsdExhbmRJY29uCisgICAgICAgICAgICAgICAgOiBjYXJNb2RlID8gbUJhY2tBbHRDYXJNb2RlSWNvbiA6IG1CYWNrQWx0SWNvbjsKKyAgICB9CisKKyAgICBwcml2YXRlIERyYXdhYmxlIGdldEJhY2tJY29uKGJvb2xlYW4gY2FyTW9kZSwgYm9vbGVhbiBsYW5kc2NhcGUpIHsKKyAgICAgICAgcmV0dXJuIGxhbmRzY2FwZQorICAgICAgICAgICAgICAgID8gY2FyTW9kZSA/IG1CYWNrTGFuZENhck1vZGVJY29uIDogbUJhY2tMYW5kSWNvbgorICAgICAgICAgICAgICAgIDogY2FyTW9kZSA/IG1CYWNrQ2FyTW9kZUljb24gOiBtQmFja0ljb247CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc2V0TmF2aWdhdGlvbkljb25IaW50cyhpbnQgaGludHMsIGJvb2xlYW4gZm9yY2UpIHsKICAgICAgICAgaWYgKCFmb3JjZSAmJiBoaW50cyA9PSBtTmF2aWdhdGlvbkljb25IaW50cykgcmV0dXJuOwogICAgICAgICBmaW5hbCBib29sZWFuIGJhY2tBbHQgPSAoaGludHMgJiBTdGF0dXNCYXJNYW5hZ2VyLk5BVklHQVRJT05fSElOVF9CQUNLX0FMVCkgIT0gMDsKQEAgLTI5MCwxMSArMzE4LDIzIEBACiAKICAgICAgICAgbU5hdmlnYXRpb25JY29uSGludHMgPSBoaW50czsKIAotICAgICAgICAoKEltYWdlVmlldylnZXRCYWNrQnV0dG9uKCkpLnNldEltYWdlRHJhd2FibGUoYmFja0FsdAotICAgICAgICAgICAgICAgID8gKG1WZXJ0aWNhbCA/IG1CYWNrQWx0TGFuZEljb24gOiBtQmFja0FsdEljb24pCi0gICAgICAgICAgICAgICAgOiAobVZlcnRpY2FsID8gbUJhY2tMYW5kSWNvbiA6IG1CYWNrSWNvbikpOworICAgICAgICAvLyBXZSBoYXZlIHRvIHJlcGxhY2Ugb3IgcmVzdG9yZSB0aGUgYmFjayBhbmQgaG9tZSBidXR0b24gaWNvbnMgd2hlbiBleGl0aW5nIG9yIGVudGVyaW5nCisgICAgICAgIC8vIGNhcm1vZGUsIHJlc3BlY3RpdmVseS4gUmVjZW50cyBhcmUgbm90IGF2YWlsYWJsZSBpbiBDYXJNb2RlIGluIG5hdiBiYXIgc28gY2hhbmdlCisgICAgICAgIC8vIHRvIHJlY2VudCBpY29uIGlzIG5vdCByZXF1aXJlZC4KKyAgICAgICAgRHJhd2FibGUgYmFja0ljb24gPSAoYmFja0FsdCkKKyAgICAgICAgICAgICAgICA/IGdldEJhY2tJY29uV2l0aEFsdChtQ2FyTW9kZSwgbVZlcnRpY2FsKQorICAgICAgICAgICAgICAgIDogZ2V0QmFja0ljb24obUNhck1vZGUsIG1WZXJ0aWNhbCk7CiAKLSAgICAgICAgKChJbWFnZVZpZXcpZ2V0UmVjZW50c0J1dHRvbigpKS5zZXRJbWFnZURyYXdhYmxlKG1WZXJ0aWNhbCA/IG1SZWNlbnRMYW5kSWNvbiA6IG1SZWNlbnRJY29uKTsKKyAgICAgICAgKChJbWFnZVZpZXcpIGdldEJhY2tCdXR0b24oKSkuc2V0SW1hZ2VEcmF3YWJsZShiYWNrSWNvbik7CisKKyAgICAgICAgKChJbWFnZVZpZXcpIGdldFJlY2VudHNCdXR0b24oKSkuc2V0SW1hZ2VEcmF3YWJsZSgKKyAgICAgICAgICAgICAgICBtVmVydGljYWwgPyBtUmVjZW50TGFuZEljb24gOiBtUmVjZW50SWNvbik7CisKKyAgICAgICAgaWYgKG1DYXJNb2RlKSB7CisgICAgICAgICAgICAoKEltYWdlVmlldykgZ2V0SG9tZUJ1dHRvbigpKS5zZXRJbWFnZURyYXdhYmxlKG1Ib21lQ2FyTW9kZUljb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKChJbWFnZVZpZXcpIGdldEhvbWVCdXR0b24oKSkuc2V0SW1hZ2VEcmF3YWJsZShtSG9tZURlZmF1bHRJY29uKTsKKyAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2hvd0ltZUJ1dHRvbiA9ICgoaGludHMgJiBTdGF0dXNCYXJNYW5hZ2VyLk5BVklHQVRJT05fSElOVF9JTUVfU0hPV04pICE9IDApOwogICAgICAgICBnZXRJbWVTd2l0Y2hCdXR0b24oKS5zZXRWaXNpYmlsaXR5KHNob3dJbWVCdXR0b24gPyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklTSUJMRSk7CkBAIC0zMjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgIHNldFNsaXBwZXJ5KGRpc2FibGVIb21lICYmIGRpc2FibGVSZWNlbnQgJiYgZGlzYWJsZUJhY2sgJiYgZGlzYWJsZVNlYXJjaCk7CiAgICAgICAgIH0KIAotICAgICAgICBWaWV3R3JvdXAgbmF2QnV0dG9ucyA9IChWaWV3R3JvdXApIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5uYXZfYnV0dG9ucyk7CisgICAgICAgIFZpZXdHcm91cCBuYXZCdXR0b25zID0gKFZpZXdHcm91cCkgZ2V0Q3VycmVudFZpZXcoKS5maW5kVmlld0J5SWQoUi5pZC5uYXZfYnV0dG9ucyk7CiAgICAgICAgIGlmIChuYXZCdXR0b25zICE9IG51bGwpIHsKICAgICAgICAgICAgIExheW91dFRyYW5zaXRpb24gbHQgPSBuYXZCdXR0b25zLmdldExheW91dFRyYW5zaXRpb24oKTsKICAgICAgICAgICAgIGlmIChsdCAhPSBudWxsKSB7CkBAIC0zNzcsNyArNDE3LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMYXlvdXRUcmFuc2l0aW9uc0VuYWJsZWQoKSB7CiAgICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9ICFtV2FrZUFuZFVubG9ja2luZyAmJiBtTGF5b3V0VHJhbnNpdGlvbnNFbmFibGVkOwotICAgICAgICBWaWV3R3JvdXAgbmF2QnV0dG9ucyA9IChWaWV3R3JvdXApIG1DdXJyZW50Vmlldy5maW5kVmlld0J5SWQoUi5pZC5uYXZfYnV0dG9ucyk7CisgICAgICAgIFZpZXdHcm91cCBuYXZCdXR0b25zID0gKFZpZXdHcm91cCkgZ2V0Q3VycmVudFZpZXcoKS5maW5kVmlld0J5SWQoUi5pZC5uYXZfYnV0dG9ucyk7CiAgICAgICAgIExheW91dFRyYW5zaXRpb24gbHQgPSBuYXZCdXR0b25zLmdldExheW91dFRyYW5zaXRpb24oKTsKICAgICAgICAgaWYgKGx0ICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChlbmFibGVkKSB7CkBAIC00NTUsNiArNDk1LDMyIEBACiAgICAgICAgIGdldEltZVN3aXRjaEJ1dHRvbigpLnNldE9uQ2xpY2tMaXN0ZW5lcihtSW1lU3dpdGNoZXJDbGlja0xpc3RlbmVyKTsKIAogICAgICAgICB1cGRhdGVSVExPcmRlcigpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyR2xvYmFsLmdldFdpbmRvd01hbmFnZXJTZXJ2aWNlKCkucmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKG5ldyBTdHViKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25Eb2NrZWRTdGFja0V4aXN0c0NoYW5nZWQoZmluYWwgYm9vbGVhbiBleGlzdHMpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY2VudHNJY29uKGV4aXN0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHJlZ2lzdGVyaW5nIGRvY2tlZCBzdGFjayBleGlzdHMgbGlzdGVuZXIiLCBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB1cGRhdGVSZWNlbnRzSWNvbihib29sZWFuIGRvY2tlZFN0YWNrRXhpc3RzKSB7CisgICAgICAgIGdldFJlY2VudHNCdXR0b24oKS5zZXRJbWFnZVJlc291cmNlKGRvY2tlZFN0YWNrRXhpc3RzCisgICAgICAgICAgICAgICAgPyBSLmRyYXdhYmxlLmljX3N5c2Jhcl9kb2NrZWQKKyAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuaWNfc3lzYmFyX3JlY2VudCk7CiAgICAgfQogCiAgICAgcHVibGljIGJvb2xlYW4gaXNWZXJ0aWNhbCgpIHsKQEAgLTUxOCw4ICs1ODQsMzMgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CiAgICAgICAgIHN1cGVyLm9uQ29uZmlndXJhdGlvbkNoYW5nZWQobmV3Q29uZmlnKTsKKyAgICAgICAgYm9vbGVhbiB1aUNhck1vZGVDaGFuZ2VkID0gdXBkYXRlQ2FyTW9kZShuZXdDb25maWcpOwogICAgICAgICB1cGRhdGVSVExPcmRlcigpOwogICAgICAgICB1cGRhdGVUYXNrU3dpdGNoSGVscGVyKCk7CisgICAgICAgIGlmICh1aUNhck1vZGVDaGFuZ2VkKSB7CisgICAgICAgICAgICAvLyB1aU1vZGUgY2hhbmdlZCBlaXRoZXIgZnJvbSBjYXJtb2RlIG9yIHRvIGNhcm1vZGUuCisgICAgICAgICAgICAvLyByZXBsYWNlIHRoZSBuYXYgYmFyIGJ1dHRvbiBpY29ucyBiYXNlZCBvbiB3aGljaCBtb2RlCisgICAgICAgICAgICAvLyB3ZSBhcmUgc3dpdGNoaW5nIHRvLgorICAgICAgICAgICAgc2V0TmF2aWdhdGlvbkljb25IaW50cyhtTmF2aWdhdGlvbkljb25IaW50cywgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJZiB0aGUgY29uZmlndXJhdGlvbiBjaGFuZ2VkLCB1cGRhdGUgdGhlIGNhcm1vZGUgYW5kIHJldHVybiB0aGF0IGl0IHdhcyB1cGRhdGVkLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiB1cGRhdGVDYXJNb2RlKENvbmZpZ3VyYXRpb24gbmV3Q29uZmlnKSB7CisgICAgICAgIGJvb2xlYW4gdWlDYXJNb2RlQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICBpZiAobmV3Q29uZmlnICE9IG51bGwpIHsKKyAgICAgICAgICAgIGludCB1aU1vZGUgPSBuZXdDb25maWcudWlNb2RlICYgQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfTUFTSzsKKyAgICAgICAgICAgIGlmIChtQ2FyTW9kZSAmJiB1aU1vZGUgIT0gQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfQ0FSKSB7CisgICAgICAgICAgICAgICAgbUNhck1vZGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB1aUNhck1vZGVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodWlNb2RlID09IENvbmZpZ3VyYXRpb24uVUlfTU9ERV9UWVBFX0NBUikgeworICAgICAgICAgICAgICAgIG1DYXJNb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aUNhck1vZGVDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdWlDYXJNb2RlQ2hhbmdlZDsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTm90aWZpY2F0aW9uUGFuZWxWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL05vdGlmaWNhdGlvblBhbmVsVmlldy5qYXZhCmluZGV4IDZhMmIzMmQuLmJhMjA2NzkgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvTm90aWZpY2F0aW9uUGFuZWxWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9Ob3RpZmljYXRpb25QYW5lbFZpZXcuamF2YQpAQCAtMzUyLDggKzM1Miw2IEBACiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlU3RhY2tIZWlnaHQoZ2V0RXhwYW5kZWRIZWlnaHQoKSk7CiAgICAgICAgIHVwZGF0ZUhlYWRlcigpOwotICAgICAgICBtTm90aWZpY2F0aW9uU3RhY2tTY3JvbGxlci51cGRhdGVJc1NtYWxsU2NyZWVuKAotICAgICAgICAgICAgICAgIG1IZWFkZXIuZ2V0Q29sbGFwc2VkSGVpZ2h0KCkgKyBtUXNQZWVrSGVpZ2h0KTsKIAogICAgICAgICAvLyBJZiB3ZSBhcmUgcnVubmluZyBhIHNpemUgY2hhbmdlIGFuaW1hdGlvbiwgdGhlIGFuaW1hdGlvbiB0YWtlcyBjYXJlIG9mIHRoZSBoZWlnaHQgb2YKICAgICAgICAgLy8gdGhlIGNvbnRhaW5lci4gSG93ZXZlciwgaWYgd2UgYXJlIG5vdCBhbmltYXRpbmcsIHdlIGFsd2F5cyBuZWVkIHRvIG1ha2UgdGhlIFFTIGNvbnRhaW5lcgpAQCAtMTMyMCw3ICsxMzE4LDYgQEAKICAgICAgICAgbUhlYWRlci5zZXRFeHBhbnNpb24oZ2V0SGVhZGVyRXhwYW5zaW9uRnJhY3Rpb24oKSk7CiAgICAgICAgIHNldFFzVHJhbnNsYXRpb24oaGVpZ2h0KTsKICAgICAgICAgcmVxdWVzdFNjcm9sbGVyVG9wUGFkZGluZ1VwZGF0ZShmYWxzZSAvKiBhbmltYXRlICovKTsKLSAgICAgICAgdXBkYXRlTm90aWZpY2F0aW9uU2NyaW0oaGVpZ2h0KTsKICAgICAgICAgaWYgKG1LZXlndWFyZFNob3dpbmcpIHsKICAgICAgICAgICAgIHVwZGF0ZUhlYWRlcktleWd1YXJkKCk7CiAgICAgICAgIH0KQEAgLTEzNTcsMTIgKzEzNTQsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZU5vdGlmaWNhdGlvblNjcmltKGZsb2F0IGhlaWdodCkgewotICAgICAgICBpbnQgc3RhcnREaXN0YW5jZSA9IG1Rc01pbkV4cGFuc2lvbkhlaWdodCArIG1Ob3RpZmljYXRpb25TY3JpbVdhaXREaXN0YW5jZTsKLSAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSAoaGVpZ2h0IC0gc3RhcnREaXN0YW5jZSkgLyAobVFzTWF4RXhwYW5zaW9uSGVpZ2h0IC0gc3RhcnREaXN0YW5jZSk7Ci0gICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoMC4wZiwgTWF0aC5taW4ocHJvZ3Jlc3MsIDEuMGYpKTsKLSAgICB9Ci0KICAgICBwcml2YXRlIGZsb2F0IGdldEhlYWRlckV4cGFuc2lvbkZyYWN0aW9uKCkgewogICAgICAgICBpZiAoIW1LZXlndWFyZFNob3dpbmcpIHsKICAgICAgICAgICAgIHJldHVybiBnZXRRc0V4cGFuc2lvbkZyYWN0aW9uKCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1BhbmVsQmFyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1BhbmVsQmFyLmphdmEKaW5kZXggZTFhNDAwZC4uZjJjNTdlNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QYW5lbEJhci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGFuZWxCYXIuamF2YQpAQCAtMjMsOCArMjMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwogCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQogcHVibGljIGFic3RyYWN0IGNsYXNzIFBhbmVsQmFyIGV4dGVuZHMgRnJhbWVMYXlvdXQgewogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9IFBhbmVsQmFyLmNsYXNzLmdldFNpbXBsZU5hbWUoKTsKQEAgLTM5LDE0ICszNywxMCBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX09QRU5JTkcgPSAxOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVRFX09QRU4gPSAyOwogCi0gICAgUGFuZWxIb2xkZXIgbVBhbmVsSG9sZGVyOwotICAgIEFycmF5TGlzdDxQYW5lbFZpZXc+IG1QYW5lbHMgPSBuZXcgQXJyYXlMaXN0PFBhbmVsVmlldz4oKTsKLSAgICBQYW5lbFZpZXcgbVRvdWNoaW5nUGFuZWw7CisgICAgUGFuZWxWaWV3IG1QYW5lbDsKICAgICBwcml2YXRlIGludCBtU3RhdGUgPSBTVEFURV9DTE9TRUQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1UcmFja2luZzsKIAotICAgIGZsb2F0IG1QYW5lbEV4cGFuZGVkRnJhY3Rpb25TdW07Ci0KICAgICBwdWJsaWMgdm9pZCBnbyhpbnQgc3RhdGUpIHsKICAgICAgICAgaWYgKERFQlVHKSBMT0coImdvIHN0YXRlOiAlZCAtPiAlZCIsIG1TdGF0ZSwgc3RhdGUpOwogICAgICAgICBtU3RhdGUgPSBzdGF0ZTsKQEAgLTYxLDU1ICs1NSwyOCBAQAogICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRQYW5lbChQYW5lbFZpZXcgcHYpIHsKLSAgICAgICAgbVBhbmVscy5hZGQocHYpOworICAgIHB1YmxpYyB2b2lkIHNldFBhbmVsKFBhbmVsVmlldyBwdikgeworICAgICAgICBtUGFuZWwgPSBwdjsKICAgICAgICAgcHYuc2V0QmFyKHRoaXMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldFBhbmVsSG9sZGVyKFBhbmVsSG9sZGVyIHBoKSB7Ci0gICAgICAgIGlmIChwaCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJzZXRQYW5lbEhvbGRlcjogbnVsbCBQYW5lbEhvbGRlciIsIG5ldyBUaHJvd2FibGUoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcGguc2V0QmFyKHRoaXMpOwotICAgICAgICBtUGFuZWxIb2xkZXIgPSBwaDsKLSAgICAgICAgZmluYWwgaW50IE4gPSBwaC5nZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFZpZXcgdiA9IHBoLmdldENoaWxkQXQoaSk7Ci0gICAgICAgICAgICBpZiAodiAhPSBudWxsICYmIHYgaW5zdGFuY2VvZiBQYW5lbFZpZXcpIHsKLSAgICAgICAgICAgICAgICBhZGRQYW5lbCgoUGFuZWxWaWV3KSB2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIHNldEJvdW5jZXJTaG93aW5nKGJvb2xlYW4gc2hvd2luZykgewogICAgICAgICBpbnQgaW1wb3J0YW50ID0gc2hvd2luZyA/IElNUE9SVEFOVF9GT1JfQUNDRVNTSUJJTElUWV9OT19ISURFX0RFU0NFTkRBTlRTCiAgICAgICAgICAgICAgICAgOiBJTVBPUlRBTlRfRk9SX0FDQ0VTU0lCSUxJVFlfQVVUTzsKIAogICAgICAgICBzZXRJbXBvcnRhbnRGb3JBY2Nlc3NpYmlsaXR5KGltcG9ydGFudCk7CiAKLSAgICAgICAgaWYgKG1QYW5lbEhvbGRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUGFuZWxIb2xkZXIuc2V0SW1wb3J0YW50Rm9yQWNjZXNzaWJpbGl0eShpbXBvcnRhbnQpOwotICAgICAgICB9CisgICAgICAgIGlmIChtUGFuZWwgIT0gbnVsbCkgbVBhbmVsLnNldEltcG9ydGFudEZvckFjY2Vzc2liaWxpdHkoaW1wb3J0YW50KTsKICAgICB9CiAKLSAgICBwdWJsaWMgZmxvYXQgZ2V0QmFySGVpZ2h0KCkgewotICAgICAgICByZXR1cm4gZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUGFuZWxWaWV3IHNlbGVjdFBhbmVsRm9yVG91Y2goTW90aW9uRXZlbnQgdG91Y2gpIHsKLSAgICAgICAgZmluYWwgaW50IE4gPSBtUGFuZWxzLnNpemUoKTsKLSAgICAgICAgcmV0dXJuIG1QYW5lbHMuZ2V0KChpbnQpKE4gKiB0b3VjaC5nZXRYKCkgLyBnZXRNZWFzdXJlZFdpZHRoKCkpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwYW5lbHNFbmFibGVkKCkgeworICAgIHB1YmxpYyBib29sZWFuIHBhbmVsRW5hYmxlZCgpIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2ZW50KSB7CiAgICAgICAgIC8vIEFsbG93IHN1YmNsYXNzZXMgdG8gaW1wbGVtZW50IGVuYWJsZS9kaXNhYmxlIHNlbWFudGljcwotICAgICAgICBpZiAoIXBhbmVsc0VuYWJsZWQoKSkgeworICAgICAgICBpZiAoIXBhbmVsRW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKICAgICAgICAgICAgICAgICBMb2cudihUQUcsIFN0cmluZy5mb3JtYXQoIm9uVG91Y2g6IGFsbCBwYW5lbHMgZGlzYWJsZWQsIGlnbm9yaW5nIHRvdWNoIGF0ICglZCwlZCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgZXZlbnQuZ2V0WCgpLCAoaW50KSBldmVudC5nZXRZKCkpKTsKQEAgLTExNywxNCArODQsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hpY2ggcGFuZWwgbmVlZHMgdG8gYmUgdGFsa2VkIHRvIGhlcmUKICAgICAgICAgaWYgKGV2ZW50LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOKSB7Ci0gICAgICAgICAgICBmaW5hbCBQYW5lbFZpZXcgcGFuZWwgPSBzZWxlY3RQYW5lbEZvclRvdWNoKGV2ZW50KTsKKyAgICAgICAgICAgIGZpbmFsIFBhbmVsVmlldyBwYW5lbCA9IG1QYW5lbDsKICAgICAgICAgICAgIGlmIChwYW5lbCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgLy8gcGFuZWwgaXMgbm90IHRoZXJlLCBzbyB3ZSdsbCBlYXQgdGhlIGdlc3R1cmUKICAgICAgICAgICAgICAgICBMb2cudihUQUcsIFN0cmluZy5mb3JtYXQoIm9uVG91Y2g6IG5vIHBhbmVsIGZvciB0b3VjaCBhdCAoJWQsJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGV2ZW50LmdldFgoKSwgKGludCkgZXZlbnQuZ2V0WSgpKSk7Ci0gICAgICAgICAgICAgICAgbVRvdWNoaW5nUGFuZWwgPSBudWxsOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gcGFuZWwuaXNFbmFibGVkKCk7CkBAIC0xMzUsOTAgKzEwMCw2NSBAQAogICAgICAgICAgICAgICAgIExvZy52KFRBRywgU3RyaW5nLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgICAgICJvblRvdWNoOiBwYW5lbCAoJXMpIGlzIGRpc2FibGVkLCBpZ25vcmluZyB0b3VjaCBhdCAoJWQsJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLCAoaW50KSBldmVudC5nZXRYKCksIChpbnQpIGV2ZW50LmdldFkoKSkpOwotICAgICAgICAgICAgICAgIG1Ub3VjaGluZ1BhbmVsID0gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXJ0T3BlbmluZ1BhbmVsKHBhbmVsKTsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBib29sZWFuIHJlc3VsdCA9IG1Ub3VjaGluZ1BhbmVsICE9IG51bGwKLSAgICAgICAgICAgICAgICA/IG1Ub3VjaGluZ1BhbmVsLm9uVG91Y2hFdmVudChldmVudCkKLSAgICAgICAgICAgICAgICA6IHRydWU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLy8gY2FsbGVkIGZyb20gUGFuZWxWaWV3IHdoZW4gc2VsZi1leHBhbmRpbmcsIHRvbwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0T3BlbmluZ1BhbmVsKFBhbmVsVmlldyBwYW5lbCkgewotICAgICAgICBpZiAoREVCVUcpIExPRygic3RhcnRPcGVuaW5nUGFuZWw6ICIgKyBwYW5lbCk7Ci0gICAgICAgIG1Ub3VjaGluZ1BhbmVsID0gcGFuZWw7Ci0gICAgICAgIG1QYW5lbEhvbGRlci5zZXRTZWxlY3RlZFBhbmVsKG1Ub3VjaGluZ1BhbmVsKTsKLSAgICAgICAgZm9yIChQYW5lbFZpZXcgcHYgOiBtUGFuZWxzKSB7Ci0gICAgICAgICAgICBpZiAocHYgIT0gcGFuZWwpIHsKLSAgICAgICAgICAgICAgICBwdi5jb2xsYXBzZShmYWxzZSAvKiBkZWxheWVkICovLCAxLjBmIC8qIHNwZWVkVXBGYWN0b3IgKi8pOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIHJldHVybiBtUGFuZWwgPT0gbnVsbCB8fCBtUGFuZWwub25Ub3VjaEV2ZW50KGV2ZW50KTsKICAgICB9CiAKICAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBwYW5lbFNjcmltTWluRnJhY3Rpb25DaGFuZ2VkKGZsb2F0IG1pbkZyYWN0aW9uKTsKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSBwYW5lbCB0aGUgcGFuZWwgd2hpY2ggY2hhbmdlZCBpdHMgZXhwYW5zaW9uIHN0YXRlCiAgICAgICogQHBhcmFtIGZyYWMgdGhlIGZyYWN0aW9uIGZyb20gdGhlIGV4cGFuc2lvbiBpbiBbMCwgMV0KICAgICAgKiBAcGFyYW0gZXhwYW5kZWQgd2hldGhlciB0aGUgcGFuZWwgaXMgY3VycmVudGx5IGV4cGFuZGVkOyB0aGlzIGlzIGluZGVwZW5kZW50IGZyb20gdGhlCiAgICAgICogICAgICAgICAgICAgICAgIGZyYWN0aW9uIGFzIHRoZSBwYW5lbCBhbHNvIG1pZ2h0IGJlIGV4cGFuZGVkIGlmIHRoZSBmcmFjdGlvbiBpcyAwCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgcGFuZWxFeHBhbnNpb25DaGFuZ2VkKFBhbmVsVmlldyBwYW5lbCwgZmxvYXQgZnJhYywgYm9vbGVhbiBleHBhbmRlZCkgeworICAgIHB1YmxpYyB2b2lkIHBhbmVsRXhwYW5zaW9uQ2hhbmdlZChmbG9hdCBmcmFjLCBib29sZWFuIGV4cGFuZGVkKSB7CiAgICAgICAgIGJvb2xlYW4gZnVsbHlDbG9zZWQgPSB0cnVlOwotICAgICAgICBQYW5lbFZpZXcgZnVsbHlPcGVuZWRQYW5lbCA9IG51bGw7Ci0gICAgICAgIGlmIChTUEVXKSBMT0coInBhbmVsRXhwYW5zaW9uQ2hhbmdlZDogc3RhcnQgc3RhdGU9JWQgcGFuZWw9JXMiLCBtU3RhdGUsIHBhbmVsLmdldE5hbWUoKSk7Ci0gICAgICAgIG1QYW5lbEV4cGFuZGVkRnJhY3Rpb25TdW0gPSAwZjsKLSAgICAgICAgZm9yIChQYW5lbFZpZXcgcHYgOiBtUGFuZWxzKSB7Ci0gICAgICAgICAgICBwdi5zZXRWaXNpYmlsaXR5KGV4cGFuZGVkID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOwotICAgICAgICAgICAgLy8gYWRqdXN0IGFueSBvdGhlciBwYW5lbHMgdGhhdCBtYXkgYmUgcGFydGlhbGx5IHZpc2libGUKLSAgICAgICAgICAgIGlmIChleHBhbmRlZCkgewotICAgICAgICAgICAgICAgIGlmIChtU3RhdGUgPT0gU1RBVEVfQ0xPU0VEKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvKFNUQVRFX09QRU5JTkcpOwotICAgICAgICAgICAgICAgICAgICBvblBhbmVsUGVla2VkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZ1bGx5Q2xvc2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmluYWwgZmxvYXQgdGhpc0ZyYWMgPSBwdi5nZXRFeHBhbmRlZEZyYWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgbVBhbmVsRXhwYW5kZWRGcmFjdGlvblN1bSArPSB0aGlzRnJhYzsKLSAgICAgICAgICAgICAgICBpZiAoU1BFVykgTE9HKCJwYW5lbEV4cGFuc2lvbkNoYW5nZWQ6ICAtPiAlczogZj0lLjFmIiwgcHYuZ2V0TmFtZSgpLCB0aGlzRnJhYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhbmVsID09IHB2KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzRnJhYyA9PSAxZikgZnVsbHlPcGVuZWRQYW5lbCA9IHBhbmVsOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgYm9vbGVhbiBmdWxseU9wZW5lZCA9IGZhbHNlOworICAgICAgICBpZiAoU1BFVykgTE9HKCJwYW5lbEV4cGFuc2lvbkNoYW5nZWQ6IHN0YXJ0IHN0YXRlPSVkIiwgbVN0YXRlKTsKKyAgICAgICAgUGFuZWxWaWV3IHB2ID0gbVBhbmVsOworICAgICAgICBwdi5zZXRWaXNpYmlsaXR5KGV4cGFuZGVkID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOworICAgICAgICAvLyBhZGp1c3QgYW55IG90aGVyIHBhbmVscyB0aGF0IG1heSBiZSBwYXJ0aWFsbHkgdmlzaWJsZQorICAgICAgICBpZiAoZXhwYW5kZWQpIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUgPT0gU1RBVEVfQ0xPU0VEKSB7CisgICAgICAgICAgICAgICAgZ28oU1RBVEVfT1BFTklORyk7CisgICAgICAgICAgICAgICAgb25QYW5lbFBlZWtlZCgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZnVsbHlDbG9zZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IHRoaXNGcmFjID0gcHYuZ2V0RXhwYW5kZWRGcmFjdGlvbigpOworICAgICAgICAgICAgaWYgKFNQRVcpIExPRygicGFuZWxFeHBhbnNpb25DaGFuZ2VkOiAgLT4gJXM6IGY9JS4xZiIsIHB2LmdldE5hbWUoKSwgdGhpc0ZyYWMpOworICAgICAgICAgICAgZnVsbHlPcGVuZWQgPSB0aGlzRnJhYyA+PSAxZjsKICAgICAgICAgfQotICAgICAgICBtUGFuZWxFeHBhbmRlZEZyYWN0aW9uU3VtIC89IG1QYW5lbHMuc2l6ZSgpOwotICAgICAgICBpZiAoZnVsbHlPcGVuZWRQYW5lbCAhPSBudWxsICYmICFtVHJhY2tpbmcpIHsKKyAgICAgICAgaWYgKGZ1bGx5T3BlbmVkICYmICFtVHJhY2tpbmcpIHsKICAgICAgICAgICAgIGdvKFNUQVRFX09QRU4pOwotICAgICAgICAgICAgb25QYW5lbEZ1bGx5T3BlbmVkKGZ1bGx5T3BlbmVkUGFuZWwpOworICAgICAgICAgICAgb25QYW5lbEZ1bGx5T3BlbmVkKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZnVsbHlDbG9zZWQgJiYgIW1UcmFja2luZyAmJiBtU3RhdGUgIT0gU1RBVEVfQ0xPU0VEKSB7CiAgICAgICAgICAgICBnbyhTVEFURV9DTE9TRUQpOwotICAgICAgICAgICAgb25BbGxQYW5lbHNDb2xsYXBzZWQoKTsKKyAgICAgICAgICAgIG9uUGFuZWxDb2xsYXBzZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTUEVXKSBMT0coInBhbmVsRXhwYW5zaW9uQ2hhbmdlZDogZW5kIHN0YXRlPSVkIFslcyVzIF0iLCBtU3RhdGUsCi0gICAgICAgICAgICAgICAgKGZ1bGx5T3BlbmVkUGFuZWwhPW51bGwpPyIgZnVsbHlPcGVuZWQiOiIiLCBmdWxseUNsb3NlZD8iIGZ1bGx5Q2xvc2VkIjoiIik7CisgICAgICAgICAgICAgICAgZnVsbHlPcGVuZWQ/IiBmdWxseU9wZW5lZCI6IiIsIGZ1bGx5Q2xvc2VkPyIgZnVsbHlDbG9zZWQiOiIiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBjb2xsYXBzZUFsbFBhbmVscyhib29sZWFuIGFuaW1hdGUsIGJvb2xlYW4gZGVsYXllZCwgZmxvYXQgc3BlZWRVcEZhY3RvcikgeworICAgIHB1YmxpYyB2b2lkIGNvbGxhcHNlUGFuZWwoYm9vbGVhbiBhbmltYXRlLCBib29sZWFuIGRlbGF5ZWQsIGZsb2F0IHNwZWVkVXBGYWN0b3IpIHsKICAgICAgICAgYm9vbGVhbiB3YWl0aW5nID0gZmFsc2U7Ci0gICAgICAgIGZvciAoUGFuZWxWaWV3IHB2IDogbVBhbmVscykgewotICAgICAgICAgICAgaWYgKGFuaW1hdGUgJiYgIXB2LmlzRnVsbHlDb2xsYXBzZWQoKSkgewotICAgICAgICAgICAgICAgIHB2LmNvbGxhcHNlKGRlbGF5ZWQsIHNwZWVkVXBGYWN0b3IpOwotICAgICAgICAgICAgICAgIHdhaXRpbmcgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwdi5yZXNldFZpZXdzKCk7Ci0gICAgICAgICAgICAgICAgcHYuc2V0RXhwYW5kZWRGcmFjdGlvbigwKTsgLy8ganVzdCBpbiBjYXNlCi0gICAgICAgICAgICAgICAgcHYuY2FuY2VsUGVlaygpOwotICAgICAgICAgICAgfQorICAgICAgICBQYW5lbFZpZXcgcHYgPSBtUGFuZWw7CisgICAgICAgIGlmIChhbmltYXRlICYmICFwdi5pc0Z1bGx5Q29sbGFwc2VkKCkpIHsKKyAgICAgICAgICAgIHB2LmNvbGxhcHNlKGRlbGF5ZWQsIHNwZWVkVXBGYWN0b3IpOworICAgICAgICAgICAgd2FpdGluZyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdi5yZXNldFZpZXdzKCk7CisgICAgICAgICAgICBwdi5zZXRFeHBhbmRlZEZyYWN0aW9uKDApOyAvLyBqdXN0IGluIGNhc2UKKyAgICAgICAgICAgIHB2LmNhbmNlbFBlZWsoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoREVCVUcpIExPRygiY29sbGFwc2VBbGxQYW5lbHM6IGFuaW1hdGU9JXMgd2FpdGluZz0lcyIsIGFuaW1hdGUsIHdhaXRpbmcpOworICAgICAgICBpZiAoREVCVUcpIExPRygiY29sbGFwc2VQYW5lbDogYW5pbWF0ZT0lcyB3YWl0aW5nPSVzIiwgYW5pbWF0ZSwgd2FpdGluZyk7CiAgICAgICAgIGlmICghd2FpdGluZyAmJiBtU3RhdGUgIT0gU1RBVEVfQ0xPU0VEKSB7CiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgbm90aGluZyBhbmltYXRlZCwgc28gd2UgcmVwbGljYXRlIHRoZSB0ZXJtaW5hdGlvbgogICAgICAgICAgICAgLy8gY29uZGl0aW9ucyBvZiBwYW5lbEV4cGFuc2lvbkNoYW5nZWQgaGVyZQogICAgICAgICAgICAgZ28oU1RBVEVfQ0xPU0VEKTsKLSAgICAgICAgICAgIG9uQWxsUGFuZWxzQ29sbGFwc2VkKCk7CisgICAgICAgICAgICBvblBhbmVsQ29sbGFwc2VkKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIyNiwxOSArMTY2LDE5IEBACiAgICAgICAgIGlmIChERUJVRykgTE9HKCJvblBhbmVsUGVla2VkIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgb25BbGxQYW5lbHNDb2xsYXBzZWQoKSB7Ci0gICAgICAgIGlmIChERUJVRykgTE9HKCJvbkFsbFBhbmVsc0NvbGxhcHNlZCIpOworICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxDb2xsYXBzZWQoKSB7CisgICAgICAgIGlmIChERUJVRykgTE9HKCJvblBhbmVsQ29sbGFwc2VkIik7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgb25QYW5lbEZ1bGx5T3BlbmVkKFBhbmVsVmlldyBvcGVuUGFuZWwpIHsKKyAgICBwdWJsaWMgdm9pZCBvblBhbmVsRnVsbHlPcGVuZWQoKSB7CiAgICAgICAgIGlmIChERUJVRykgTE9HKCJvblBhbmVsRnVsbHlPcGVuZWQiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBvblRyYWNraW5nU3RhcnRlZChQYW5lbFZpZXcgcGFuZWwpIHsKKyAgICBwdWJsaWMgdm9pZCBvblRyYWNraW5nU3RhcnRlZCgpIHsKICAgICAgICAgbVRyYWNraW5nID0gdHJ1ZTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBvblRyYWNraW5nU3RvcHBlZChQYW5lbFZpZXcgcGFuZWwsIGJvb2xlYW4gZXhwYW5kKSB7CisgICAgcHVibGljIHZvaWQgb25UcmFja2luZ1N0b3BwZWQoYm9vbGVhbiBleHBhbmQpIHsKICAgICAgICAgbVRyYWNraW5nID0gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1BhbmVsSG9sZGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1BhbmVsSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZjM0ZDUuLjAwMDAwMDAKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QYW5lbEhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkZyYW1lTGF5b3V0OwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuRXZlbnRMb2dUYWdzOwotCi1wdWJsaWMgY2xhc3MgUGFuZWxIb2xkZXIgZXh0ZW5kcyBGcmFtZUxheW91dCB7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0dFU1RVUkVTID0gdHJ1ZTsKLQotICAgIHByaXZhdGUgaW50IG1TZWxlY3RlZFBhbmVsSW5kZXggPSAtMTsKLSAgICBwcml2YXRlIFBhbmVsQmFyIG1CYXI7Ci0KLSAgICBwdWJsaWMgUGFuZWxIb2xkZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICAgICAgICBzZXRDaGlsZHJlbkRyYXdpbmdPcmRlckVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25GaW5pc2hJbmZsYXRlKCkgewotICAgICAgICBzdXBlci5vbkZpbmlzaEluZmxhdGUoKTsKLSAgICAgICAgc2V0Q2hpbGRyZW5EcmF3aW5nT3JkZXJFbmFibGVkKHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0UGFuZWxJbmRleChQYW5lbFZpZXcgcHYpIHsKLSAgICAgICAgZmluYWwgaW50IE4gPSBnZXRDaGlsZENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFBhbmVsVmlldyB2ID0gKFBhbmVsVmlldykgZ2V0Q2hpbGRBdChpKTsKLSAgICAgICAgICAgIGlmIChwdiA9PSB2KSByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2VsZWN0ZWRQYW5lbChQYW5lbFZpZXcgcHYpIHsKLSAgICAgICAgbVNlbGVjdGVkUGFuZWxJbmRleCA9IGdldFBhbmVsSW5kZXgocHYpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBpbnQgZ2V0Q2hpbGREcmF3aW5nT3JkZXIoaW50IGNoaWxkQ291bnQsIGludCBpKSB7Ci0gICAgICAgIGlmIChtU2VsZWN0ZWRQYW5lbEluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpID09IGNoaWxkQ291bnQgLSAxKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1TZWxlY3RlZFBhbmVsSW5kZXg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPj0gbVNlbGVjdGVkUGFuZWxJbmRleCkgewotICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgaWYgKERFQlVHX0dFU1RVUkVTKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkgIT0gTW90aW9uRXZlbnQuQUNUSU9OX01PVkUpIHsKLSAgICAgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5TWVNVSV9QQU5FTEhPTERFUl9UT1VDSCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpLCAoaW50KSBldmVudC5nZXRYKCksIChpbnQpIGV2ZW50LmdldFkoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJhcihQYW5lbEJhciBwYW5lbEJhcikgewotICAgICAgICBtQmFyID0gcGFuZWxCYXI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QYW5lbFZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGFuZWxWaWV3LmphdmEKaW5kZXggMjFkODAzZC4uYWEwMWJmMiAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QYW5lbFZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1BhbmVsVmlldy5qYXZhCkBAIC01OCw3ICs1OCw2IEBACiAKICAgICBwcml2YXRlIGZsb2F0IG1QZWVrSGVpZ2h0OwogICAgIHByaXZhdGUgZmxvYXQgbUhpbnREaXN0YW5jZTsKLSAgICBwcml2YXRlIGludCBtRWRnZVRhcEFyZWFXaWR0aDsKICAgICBwcml2YXRlIGZsb2F0IG1Jbml0aWFsT2Zmc2V0T25Ub3VjaDsKICAgICBwcml2YXRlIGJvb2xlYW4gbUNvbGxhcHNlZEFuZEhlYWRzVXBPbkRvd247CiAgICAgcHJpdmF0ZSBmbG9hdCBtRXhwYW5kZWRGcmFjdGlvbiA9IDA7CkBAIC04Miw2ICs4MSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1Nb3Rpb25BYm9ydGVkOwogICAgIHByaXZhdGUgYm9vbGVhbiBtVXB3YXJkc1doZW5UcmVzaG9sZFJlYWNoZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1BbmltYXRpbmdPbkRvd247CisgICAgcHJpdmF0ZSBpbnQgbUxheW91dEhlaWdodCA9IDA7CiAKICAgICBwcml2YXRlIFZhbHVlQW5pbWF0b3IgbUhlaWdodEFuaW1hdG9yOwogICAgIHByaXZhdGUgT2JqZWN0QW5pbWF0b3IgbVBlZWtBbmltYXRvcjsKQEAgLTIwMSw3ICsyMDEsNiBAQAogICAgICAgICBmaW5hbCBWaWV3Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gVmlld0NvbmZpZ3VyYXRpb24uZ2V0KGdldENvbnRleHQoKSk7CiAgICAgICAgIG1Ub3VjaFNsb3AgPSBjb25maWd1cmF0aW9uLmdldFNjYWxlZFRvdWNoU2xvcCgpOwogICAgICAgICBtSGludERpc3RhbmNlID0gcmVzLmdldERpbWVuc2lvbihSLmRpbWVuLmhpbnRfbW92ZV9kaXN0YW5jZSk7Ci0gICAgICAgIG1FZGdlVGFwQXJlYVdpZHRoID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLmVkZ2VfdGFwX2FyZWFfd2lkdGgpOwogICAgICAgICBtVW5sb2NrRmFsc2luZ1RocmVzaG9sZCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi51bmxvY2tfZmFsc2luZ190aHJlc2hvbGQpOwogICAgIH0KIApAQCAtNDMzLDcgKzQzMiw3IEBACiAKICAgICBwcm90ZWN0ZWQgdm9pZCBvblRyYWNraW5nU3RvcHBlZChib29sZWFuIGV4cGFuZCkgewogICAgICAgICBtVHJhY2tpbmcgPSBmYWxzZTsKLSAgICAgICAgbUJhci5vblRyYWNraW5nU3RvcHBlZChQYW5lbFZpZXcudGhpcywgZXhwYW5kKTsKKyAgICAgICAgbUJhci5vblRyYWNraW5nU3RvcHBlZChleHBhbmQpOwogICAgICAgICBub3RpZnlCYXJQYW5lbEV4cGFuc2lvbkNoYW5nZWQoKTsKICAgICB9CiAKQEAgLTQ0MSw3ICs0NDAsNyBAQAogICAgICAgICBlbmRDbG9zaW5nKCk7CiAgICAgICAgIG1UcmFja2luZyA9IHRydWU7CiAgICAgICAgIG1Db2xsYXBzZUFmdGVyUGVlayA9IGZhbHNlOwotICAgICAgICBtQmFyLm9uVHJhY2tpbmdTdGFydGVkKFBhbmVsVmlldy50aGlzKTsKKyAgICAgICAgbUJhci5vblRyYWNraW5nU3RhcnRlZCgpOwogICAgICAgICBub3RpZnlFeHBhbmRpbmdTdGFydGVkKCk7CiAgICAgICAgIG5vdGlmeUJhclBhbmVsRXhwYW5zaW9uQ2hhbmdlZCgpOwogICAgIH0KQEAgLTcxNiw2ICs3MTUsMTAgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dCAoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7CiAgICAgICAgIHN1cGVyLm9uTGF5b3V0KGNoYW5nZWQsIGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSk7CisgICAgICAgIGlmIChtTGF5b3V0SGVpZ2h0ICE9IGdldEhlaWdodCgpKSB7CisgICAgICAgICAgICBtTGF5b3V0SGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBtU3RhdHVzQmFyLm9uUGFuZWxIZWlnaHRDaGFuZ2VkKCk7CisgICAgICAgIH0KICAgICAgICAgcmVxdWVzdFBhbmVsSGVpZ2h0VXBkYXRlKCk7CiAgICAgICAgIG1IYXNMYXlvdXRlZFNpbmNlRG93biA9IHRydWU7CiAgICAgICAgIGlmIChtVXBkYXRlRmxpbmdPbkxheW91dCkgewpAQCAtODg5LDkgKzg5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN0YXR1c0Jhci5nZXRTdGF0dXNCYXJXaW5kb3coKS5nZXRIZWlnaHQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSBtU3RhdHVzQmFyLmdldFN0YXR1c0JhckhlaWdodCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Vmlld1RyZWVPYnNlcnZlcigpLnJlbW92ZU9uR2xvYmFsTGF5b3V0TGlzdGVuZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXR1c0Jhci5vblBhbmVsRXhwYW5kZWRBbmRMYXlvdXRlZCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1CYXIuc3RhcnRPcGVuaW5nUGFuZWwoUGFuZWxWaWV3LnRoaXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlFeHBhbmRpbmdTdGFydGVkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsaW5nKDAsIHRydWUgLyogZXhwYW5kICovKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTAyMyw3ICsxMDI0LDcgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBub3RpZnlCYXJQYW5lbEV4cGFuc2lvbkNoYW5nZWQoKSB7Ci0gICAgICAgIG1CYXIucGFuZWxFeHBhbnNpb25DaGFuZ2VkKHRoaXMsIG1FeHBhbmRlZEZyYWN0aW9uLCBtRXhwYW5kZWRGcmFjdGlvbiA+IDBmIHx8IG1QZWVrUGVuZGluZworICAgICAgICBtQmFyLnBhbmVsRXhwYW5zaW9uQ2hhbmdlZChtRXhwYW5kZWRGcmFjdGlvbiwgbUV4cGFuZGVkRnJhY3Rpb24gPiAwZiB8fCBtUGVla1BlbmRpbmcKICAgICAgICAgICAgICAgICB8fCBtUGVla0FuaW1hdG9yICE9IG51bGwgfHwgbUluc3RhbnRFeHBhbmRpbmcgfHwgaXNQYW5lbFZpc2libGVCZWNhdXNlT2ZIZWFkc1VwKCkKICAgICAgICAgICAgICAgICB8fCBtVHJhY2tpbmcgfHwgbUhlaWdodEFuaW1hdG9yICE9IG51bGwpOwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXIuamF2YQppbmRleCAxODFlNmFhLi41MGU4OGQzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0Jhci5qYXZhCkBAIC04MSw5ICs4MSw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuVGhyZWFkZWRSZW5kZXJlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmVsb2NpdHlUcmFja2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cC5MYXlvdXRQYXJhbXM7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdTdHViOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwpAQCAtOTUsNyArOTMsNiBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5hbmltYXRpb24uUGF0aEludGVycG9sYXRvcjsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLk5vdGlmaWNhdGlvblZpc2liaWxpdHk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLlN0YXR1c0Jhckljb247CkBAIC0xNTIsNyArMTQ5LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Lk5ldHdvcmtDb250cm9sbGVySW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5Lk5leHRBbGFybUNvbnRyb2xsZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5QcmV2aWV3SW5mbGF0ZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5SZW1vdGVJbnB1dFZpZXc7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Sb3RhdGlvbkxvY2tDb250cm9sbGVySW1wbDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LlNlY3VyaXR5Q29udHJvbGxlckltcGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5Vc2VySW5mb0NvbnRyb2xsZXI7CkBAIC0zMTEsOCArMzA3LDYgQEAKIAogICAgIFN0YXR1c0Jhckljb25Db250cm9sbGVyIG1JY29uQ29udHJvbGxlcjsKIAotICAgIHByaXZhdGUgUmVtb3RlSW5wdXRDb250cm9sbGVyIG1SZW1vdGVJbnB1dENvbnRyb2xsZXI7Ci0KICAgICAvLyBleHBhbmRlZCBub3RpZmljYXRpb25zCiAgICAgTm90aWZpY2F0aW9uUGFuZWxWaWV3IG1Ob3RpZmljYXRpb25QYW5lbDsgLy8gdGhlIHNsaWRpbmcvcmVzaXppbmcgcGFuZWwgd2l0aGluIHRoZSBub3RpZmljYXRpb24gd2luZG93CiAgICAgVmlldyBtRXhwYW5kZWRDb250ZW50czsKQEAgLTM0Nyw3ICszNDEsNiBAQAogCiAgICAgLy8gVHJhY2tpbmcgZmluZ2VyIGZvciBvcGVuaW5nL2Nsb3NpbmcuCiAgICAgYm9vbGVhbiBtVHJhY2tpbmc7Ci0gICAgVmVsb2NpdHlUcmFja2VyIG1WZWxvY2l0eVRyYWNrZXI7CiAKICAgICBpbnRbXSBtQWJzUG9zID0gbmV3IGludFsyXTsKICAgICBBcnJheUxpc3Q8UnVubmFibGU+IG1Qb3N0Q29sbGFwc2VSdW5uYWJsZXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKQEAgLTYzOSw4ICs2MzIsOCBAQAogICAgICAgICBhZGROYXZpZ2F0aW9uQmFyKCk7CiAKICAgICAgICAgLy8gTGFzdGx5LCBjYWxsIHRvIHRoZSBpY29uIHBvbGljeSB0byBpbnN0YWxsL3VwZGF0ZSBhbGwgdGhlIGljb25zLgotICAgICAgICBtSWNvblBvbGljeSA9IG5ldyBQaG9uZVN0YXR1c0JhclBvbGljeShtQ29udGV4dCwgbUNhc3RDb250cm9sbGVyLCBtSG90c3BvdENvbnRyb2xsZXIsCi0gICAgICAgICAgICAgICAgbVVzZXJJbmZvQ29udHJvbGxlciwgbUJsdWV0b290aENvbnRyb2xsZXIpOworICAgICAgICBtSWNvblBvbGljeSA9IG5ldyBQaG9uZVN0YXR1c0JhclBvbGljeShtQ29udGV4dCwgbUljb25Db250cm9sbGVyLCBtQ2FzdENvbnRyb2xsZXIsCisgICAgICAgICAgICAgICAgbUhvdHNwb3RDb250cm9sbGVyLCBtVXNlckluZm9Db250cm9sbGVyLCBtQmx1ZXRvb3RoQ29udHJvbGxlcik7CiAgICAgICAgIG1JY29uUG9saWN5LnNldEN1cnJlbnRVc2VyU2V0dXAobVVzZXJTZXR1cCk7CiAgICAgICAgIG1TZXR0aW5nc09ic2VydmVyLm9uQ2hhbmdlKGZhbHNlKTsgLy8gc2V0IHVwCiAKQEAgLTY5NywxNiArNjkwLDE0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgICAgIG1TdGF0dXNCYXJWaWV3ID0gKFBob25lU3RhdHVzQmFyVmlldykgbVN0YXR1c0JhcldpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5zdGF0dXNfYmFyKTsKLSAgICAgICAgbVN0YXR1c0JhclZpZXcuc2V0QmFyKHRoaXMpOwotCi0gICAgICAgIFBhbmVsSG9sZGVyIGhvbGRlciA9IChQYW5lbEhvbGRlcikgbVN0YXR1c0JhcldpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5wYW5lbF9ob2xkZXIpOwotICAgICAgICBtU3RhdHVzQmFyVmlldy5zZXRQYW5lbEhvbGRlcihob2xkZXIpOwotCiAgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbCA9IChOb3RpZmljYXRpb25QYW5lbFZpZXcpIG1TdGF0dXNCYXJXaW5kb3cuZmluZFZpZXdCeUlkKAogICAgICAgICAgICAgICAgIFIuaWQubm90aWZpY2F0aW9uX3BhbmVsKTsKICAgICAgICAgbU5vdGlmaWNhdGlvblBhbmVsLnNldFN0YXR1c0Jhcih0aGlzKTsKIAorICAgICAgICBtU3RhdHVzQmFyVmlldyA9IChQaG9uZVN0YXR1c0JhclZpZXcpIG1TdGF0dXNCYXJXaW5kb3cuZmluZFZpZXdCeUlkKFIuaWQuc3RhdHVzX2Jhcik7CisgICAgICAgIG1TdGF0dXNCYXJWaWV3LnNldEJhcih0aGlzKTsKKyAgICAgICAgbVN0YXR1c0JhclZpZXcuc2V0UGFuZWwobU5vdGlmaWNhdGlvblBhbmVsKTsKKwogICAgICAgICBpZiAoIUFjdGl2aXR5TWFuYWdlci5pc0hpZ2hFbmRHZngoKSkgewogICAgICAgICAgICAgbVN0YXR1c0JhcldpbmRvdy5zZXRCYWNrZ3JvdW5kKG51bGwpOwogICAgICAgICAgICAgbU5vdGlmaWNhdGlvblBhbmVsLnNldEJhY2tncm91bmQobmV3IEZhc3RDb2xvckRyYXdhYmxlKGNvbnRleHQuZ2V0Q29sb3IoCkBAIC03MzAsMzIgKzcyMSw3IEBACiAgICAgICAgICAgICBib29sZWFuIHNob3dOYXYgPSBtV2luZG93TWFuYWdlclNlcnZpY2UuaGFzTmF2aWdhdGlvbkJhcigpOwogICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJoYXNOYXZpZ2F0aW9uQmFyPSIgKyBzaG93TmF2KTsKICAgICAgICAgICAgIGlmIChzaG93TmF2KSB7Ci0gICAgICAgICAgICAgICAgLy8gT3B0aW9uYWxseSBzaG93IGFwcCBzaG9ydGN1dHMgaW4gdGhlIG5hdiBiYXIgInNoZWxmIiBhcmVhLgotICAgICAgICAgICAgICAgIGlmIChzaG91bGRTaG93QXBwU2hlbGYoKSkgewotICAgICAgICAgICAgICAgICAgICBtTmF2aWdhdGlvbkJhclZpZXcgPSAoTmF2aWdhdGlvbkJhclZpZXcpIFZpZXcuaW5mbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBSLmxheW91dC5uYXZpZ2F0aW9uX2Jhcl93aXRoX2FwcHMsIG51bGwpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyVmlldyA9IChOYXZpZ2F0aW9uQmFyVmlldykgVmlldy5pbmZsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIFIubGF5b3V0Lm5hdmlnYXRpb25fYmFyLCBudWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3LnNldERpc2FibGVkRmxhZ3MobURpc2FibGVkMSk7Ci0gICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3LnNldENvbXBvbmVudHMobVJlY2VudHMsIGdldENvbXBvbmVudChEaXZpZGVyLmNsYXNzKSk7Ci0gICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3LnNldE9uVmVydGljYWxDaGFuZ2VkTGlzdGVuZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgTmF2aWdhdGlvbkJhclZpZXcuT25WZXJ0aWNhbENoYW5nZWRMaXN0ZW5lcigpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVmVydGljYWxDaGFuZ2VkKGJvb2xlYW4gaXNWZXJ0aWNhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Bc3Npc3RNYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQXNzaXN0TWFuYWdlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uUGFuZWwuc2V0UXNTY3JpbUVuYWJsZWQoIWlzVmVydGljYWwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3LnNldE9uVG91Y2hMaXN0ZW5lcihuZXcgVmlldy5PblRvdWNoTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoKFZpZXcgdiwgTW90aW9uRXZlbnQgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVXNlckF1dG9oaWRlKHYsIGV2ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfX0pOworICAgICAgICAgICAgICAgIGNyZWF0ZU5hdmlnYXRpb25CYXJWaWV3KGNvbnRleHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIC8vIG5vIHdpbmRvdyBtYW5hZ2VyPyBnb29kIGx1Y2sgd2l0aCB0aGF0CkBAIC04NDQsMTAgKzgxMCwxMCBAQAogICAgICAgICBtQmF0dGVyeUNvbnRyb2xsZXIgPSBuZXcgQmF0dGVyeUNvbnRyb2xsZXIobUNvbnRleHQpOwogICAgICAgICBtQmF0dGVyeUNvbnRyb2xsZXIuYWRkU3RhdGVDaGFuZ2VkQ2FsbGJhY2sobmV3IEJhdHRlcnlTdGF0ZUNoYW5nZUNhbGxiYWNrKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBvd2VyU2F2ZUNoYW5nZWQoKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblBvd2VyU2F2ZUNoYW5nZWQoYm9vbGVhbiBpc1Bvd2VyU2F2ZSkgewogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3QobUNoZWNrQmFyTW9kZXMpOwogICAgICAgICAgICAgICAgIGlmIChtRG96ZVNlcnZpY2VIb3N0ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgbURvemVTZXJ2aWNlSG9zdC5maXJlUG93ZXJTYXZlQ2hhbmdlZChtQmF0dGVyeUNvbnRyb2xsZXIuaXNQb3dlclNhdmUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1Eb3plU2VydmljZUhvc3QuZmlyZVBvd2VyU2F2ZUNoYW5nZWQoaXNQb3dlclNhdmUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtOTIxLDcgKzg4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1OZXR3b3JrQ29udHJvbGxlciwgbVplbk1vZGVDb250cm9sbGVyLCBtSG90c3BvdENvbnRyb2xsZXIsCiAgICAgICAgICAgICAgICAgICAgIG1DYXN0Q29udHJvbGxlciwgbUZsYXNobGlnaHRDb250cm9sbGVyLAogICAgICAgICAgICAgICAgICAgICBtVXNlclN3aXRjaGVyQ29udHJvbGxlciwgbVVzZXJJbmZvQ29udHJvbGxlciwgbUtleWd1YXJkTW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgbVNlY3VyaXR5Q29udHJvbGxlciwgbUJhdHRlcnlDb250cm9sbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlY3VyaXR5Q29udHJvbGxlciwgbUJhdHRlcnlDb250cm9sbGVyLCBtSWNvbkNvbnRyb2xsZXIpOwogICAgICAgICAgICAgbVFTUGFuZWwuc2V0SG9zdChxc2gpOwogICAgICAgICAgICAgbVFTUGFuZWwuc2V0VGlsZXMocXNoLmdldFRpbGVzKCkpOwogICAgICAgICAgICAgbUJyaWdodG5lc3NNaXJyb3JDb250cm9sbGVyID0gbmV3IEJyaWdodG5lc3NNaXJyb3JDb250cm9sbGVyKG1TdGF0dXNCYXJXaW5kb3cpOwpAQCAtOTgxLDYgKzk0NywzNSBAQAogICAgICAgICByZXR1cm4gbVN0YXR1c0JhclZpZXc7CiAgICAgfQogCisgICAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlTmF2aWdhdGlvbkJhclZpZXcoQ29udGV4dCBjb250ZXh0KSB7CisgICAgLy8gT3B0aW9uYWxseSBzaG93IGFwcCBzaG9ydGN1dHMgaW4gdGhlIG5hdiBiYXIgInNoZWxmIiBhcmVhLgorICAgICAgICBpZiAoc2hvdWxkU2hvd0FwcFNoZWxmKCkpIHsKKyAgICAgICAgICAgIG1OYXZpZ2F0aW9uQmFyVmlldyA9IChOYXZpZ2F0aW9uQmFyVmlldykgVmlldy5pbmZsYXRlKAorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBSLmxheW91dC5uYXZpZ2F0aW9uX2Jhcl93aXRoX2FwcHMsIG51bGwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3ID0gKE5hdmlnYXRpb25CYXJWaWV3KSBWaWV3LmluZmxhdGUoCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIFIubGF5b3V0Lm5hdmlnYXRpb25fYmFyLCBudWxsKTsKKyAgICAgICAgfQorICAgICAgICBtTmF2aWdhdGlvbkJhclZpZXcuc2V0RGlzYWJsZWRGbGFncyhtRGlzYWJsZWQxKTsKKyAgICAgICAgbU5hdmlnYXRpb25CYXJWaWV3LnNldENvbXBvbmVudHMobVJlY2VudHMsIGdldENvbXBvbmVudChEaXZpZGVyLmNsYXNzKSk7CisgICAgICAgIG1OYXZpZ2F0aW9uQmFyVmlldy5zZXRPblZlcnRpY2FsQ2hhbmdlZExpc3RlbmVyKAorICAgICAgICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uQmFyVmlldy5PblZlcnRpY2FsQ2hhbmdlZExpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblZlcnRpY2FsQ2hhbmdlZChib29sZWFuIGlzVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAobUFzc2lzdE1hbmFnZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBtQXNzaXN0TWFuYWdlci5vbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbC5zZXRRc1NjcmltRW5hYmxlZCghaXNWZXJ0aWNhbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtTmF2aWdhdGlvbkJhclZpZXcuc2V0T25Ub3VjaExpc3RlbmVyKG5ldyBWaWV3Lk9uVG91Y2hMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaChWaWV3IHYsIE1vdGlvbkV2ZW50IGV2ZW50KSB7CisgICAgICAgICAgICAgICAgY2hlY2tVc2VyQXV0b2hpZGUodiwgZXZlbnQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH19KTsKKyAgICB9CisKICAgICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBhcHAgc2hlbGYgc2hvdWxkIGJlIHNob3duIGluIHRoZSBuYXYgYmFyLiAqLwogICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRTaG93QXBwU2hlbGYoKSB7CiAgICAgICAgIC8vIEFsbG93IGFkYiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBzaGVsZiBiZWhhdmlvcjoKQEAgLTEwODgsNiArMTA4Myw3IEBACiAgICAgICAgIG1LZXlndWFyZEluZGljYXRpb25Db250cm9sbGVyLnNldFN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIoCiAgICAgICAgICAgICAgICAgbVN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIpOwogICAgICAgICBtRmluZ2VycHJpbnRVbmxvY2tDb250cm9sbGVyLnNldFN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIobVN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIpOworICAgICAgICBtUmVtb3RlSW5wdXRDb250cm9sbGVyLmFkZENhbGxiYWNrKG1TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyKTsKICAgICAgICAgbUtleWd1YXJkVmlld01lZGlhdG9yQ2FsbGJhY2sgPSBrZXlndWFyZFZpZXdNZWRpYXRvci5nZXRWaWV3TWVkaWF0b3JDYWxsYmFjaygpOwogICAgIH0KIApAQCAtMTEwMCwxMSArMTA5Niw2IEBACiAgICAgICAgIHJldHVybiBtU3RhdHVzQmFyV2luZG93OwogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBSZW1vdGVJbnB1dFZpZXcgaW5mbGF0ZVJlbW90ZUlucHV0VmlldyhWaWV3R3JvdXAgcm9vdCwgRW50cnkgZW50cnkpIHsKLSAgICAgICAgcmV0dXJuIFJlbW90ZUlucHV0Vmlldy5pbmZsYXRlKG1Db250ZXh0LCByb290LCBlbnRyeSwgbVJlbW90ZUlucHV0Q29udHJvbGxlcik7Ci0gICAgfQotCiAgICAgcHVibGljIGludCBnZXRTdGF0dXNCYXJIZWlnaHQoKSB7CiAgICAgICAgIGlmIChtTmF0dXJhbEJhckhlaWdodCA8IDApIHsKICAgICAgICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKQEAgLTExMzMsMTAgKzExMjQsMTQgQEAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIG9uTG9uZ0NsaWNrKFZpZXcgdikgewogICAgICAgICAgICAgaWYgKG1SZWNlbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtUmVjZW50cy5kb2NrVG9wVGFzayhmYWxzZSAvKiBkcmFnZ2luZ0luUmVjZW50cyAqLywKKyAgICAgICAgICAgICAgICBib29sZWFuIGRvY2tlZCA9IG1SZWNlbnRzLmRvY2tUb3BUYXNrKGZhbHNlIC8qIGRyYWdnaW5nSW5SZWNlbnRzICovLAogICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLkRPQ0tFRF9TVEFDS19DUkVBVEVfTU9ERV9UT1BfT1JfTEVGVCwKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogaW5pdGlhbEJvdW5kcyAqLyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGRvY2tlZCkgeworICAgICAgICAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmFjdGlvbihtQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLkFDVElPTl9XSU5ET1dfRE9DS19MT05HUFJFU1MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTExOTYsNyArMTE5MSw3IEBACiAgICAgfQogCiAgICAgLy8gRm9yIHNtYWxsLXNjcmVlbiBkZXZpY2VzIChyZWFkOiBwaG9uZXMpIHRoYXQgbGFjayBoYXJkd2FyZSBuYXZpZ2F0aW9uIGJ1dHRvbnMKLSAgICBwcml2YXRlIHZvaWQgYWRkTmF2aWdhdGlvbkJhcigpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCBhZGROYXZpZ2F0aW9uQmFyKCkgewogICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgImFkZE5hdmlnYXRpb25CYXI6IGFib3V0IHRvIGFkZCAiICsgbU5hdmlnYXRpb25CYXJWaWV3KTsKICAgICAgICAgaWYgKG1OYXZpZ2F0aW9uQmFyVmlldyA9PSBudWxsKSByZXR1cm47CiAKQEAgLTEyMDUsNyArMTIwMCw3IEBACiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmFkZFZpZXcobU5hdmlnYXRpb25CYXJWaWV3LCBnZXROYXZpZ2F0aW9uQmFyTGF5b3V0UGFyYW1zKCkpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCByZXBvc2l0aW9uTmF2aWdhdGlvbkJhcigpIHsKKyAgICBwcm90ZWN0ZWQgdm9pZCByZXBvc2l0aW9uTmF2aWdhdGlvbkJhcigpIHsKICAgICAgICAgaWYgKG1OYXZpZ2F0aW9uQmFyVmlldyA9PSBudWxsIHx8ICFtTmF2aWdhdGlvbkJhclZpZXcuaXNBdHRhY2hlZFRvV2luZG93KCkpIHJldHVybjsKIAogICAgICAgICBwcmVwYXJlTmF2aWdhdGlvbkJhclZpZXcoKTsKQEAgLTEyMzksMTcgKzEyMzQsMTQgQEAKICAgICAgICAgcmV0dXJuIGxwOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIGFkZEljb24oU3RyaW5nIHNsb3QsIGludCBpbmRleCwgaW50IHZpZXdJbmRleCwgU3RhdHVzQmFySWNvbiBpY29uKSB7Ci0gICAgICAgIG1JY29uQ29udHJvbGxlci5hZGRTeXN0ZW1JY29uKHNsb3QsIGluZGV4LCB2aWV3SW5kZXgsIGljb24pOworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEljb24oU3RyaW5nIHNsb3QsIFN0YXR1c0Jhckljb24gaWNvbikgeworICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvbihzbG90LCBpY29uKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVJY29uKFN0cmluZyBzbG90LCBpbnQgaW5kZXgsIGludCB2aWV3SW5kZXgsCi0gICAgICAgICAgICBTdGF0dXNCYXJJY29uIG9sZCwgU3RhdHVzQmFySWNvbiBpY29uKSB7Ci0gICAgICAgIG1JY29uQ29udHJvbGxlci51cGRhdGVTeXN0ZW1JY29uKHNsb3QsIGluZGV4LCB2aWV3SW5kZXgsIG9sZCwgaWNvbik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4KSB7Ci0gICAgICAgIG1JY29uQ29udHJvbGxlci5yZW1vdmVTeXN0ZW1JY29uKHNsb3QsIGluZGV4LCB2aWV3SW5kZXgpOworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlbW92ZUljb24oU3RyaW5nIHNsb3QpIHsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnJlbW92ZUljb24oc2xvdCk7CiAgICAgfQogCiAgICAgcHVibGljIFVzZXJIYW5kbGUgZ2V0Q3VycmVudFVzZXJIYW5kbGUoKSB7CkBAIC0xMjY2LDcgKzEyNTgsNyBAQAogICAgICAgICBpZiAoc2hhZGVFbnRyeSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYm9vbGVhbiBpc0hlYWRzVXBlZCA9IG1Vc2VIZWFkc1VwICYmIHNob3VsZEludGVycnVwdChzaGFkZUVudHJ5KTsKKyAgICAgICAgYm9vbGVhbiBpc0hlYWRzVXBlZCA9IG1Vc2VIZWFkc1VwICYmIHNob3VsZFBlZWsoc2hhZGVFbnRyeSk7CiAgICAgICAgIGlmIChpc0hlYWRzVXBlZCkgewogICAgICAgICAgICAgbUhlYWRzVXBNYW5hZ2VyLnNob3dOb3RpZmljYXRpb24oc2hhZGVFbnRyeSk7CiAgICAgICAgICAgICAvLyBNYXJrIGFzIHNlZW4gaW1tZWRpYXRlbHkKQEAgLTEyNzQsMTkgKzEyNjYsMjYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmICghaXNIZWFkc1VwZWQgJiYgbm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLmZ1bGxTY3JlZW5JbnRlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gU3RvcCBzY3JlZW5zYXZlciBpZiB0aGUgbm90aWZpY2F0aW9uIGhhcyBhIGZ1bGwtc2NyZWVuIGludGVudC4KLSAgICAgICAgICAgIC8vIChsaWtlIGFuIGluY29taW5nIHBob25lIGNhbGwpCi0gICAgICAgICAgICBhd2FrZW5EcmVhbXMoKTsKKyAgICAgICAgICAgIGlmIChtTm90aWZpY2F0aW9uRGF0YS5zaG91bGRTdXBwcmVzc1NjcmVlbk9uKG5vdGlmaWNhdGlvbi5nZXRLZXkoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTm8gRnVsbHNjcmVlbiBpbnRlbnQ6IHN1cHByZXNzZWQgYnkgRE5EOiAiICsgbm90aWZpY2F0aW9uLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIFN0b3Agc2NyZWVuc2F2ZXIgaWYgdGhlIG5vdGlmaWNhdGlvbiBoYXMgYSBmdWxsLXNjcmVlbiBpbnRlbnQuCisgICAgICAgICAgICAgICAgLy8gKGxpa2UgYW4gaW5jb21pbmcgcGhvbmUgY2FsbCkKKyAgICAgICAgICAgICAgICBhd2FrZW5EcmVhbXMoKTsKIAotICAgICAgICAgICAgLy8gbm90IGltbWVyc2l2ZSAmIGEgZnVsbC1zY3JlZW4gYWxlcnQgc2hvdWxkIGJlIHNob3duCi0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgIk5vdGlmaWNhdGlvbiBoYXMgZnVsbFNjcmVlbkludGVudDsgc2VuZGluZyBmdWxsU2NyZWVuSW50ZW50Iik7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLlNZU1VJX0ZVTExTQ1JFRU5fTk9USUZJQ0FUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmdldEtleSgpKTsKLSAgICAgICAgICAgICAgICBub3RpZmljYXRpb24uZ2V0Tm90aWZpY2F0aW9uKCkuZnVsbFNjcmVlbkludGVudC5zZW5kKCk7Ci0gICAgICAgICAgICAgICAgc2hhZGVFbnRyeS5ub3RpZnlGdWxsU2NyZWVuSW50ZW50TGF1bmNoZWQoKTsKLSAgICAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KG1Db250ZXh0LCAibm90ZV9mdWxsc2NyZWVuIiwgMSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChQZW5kaW5nSW50ZW50LkNhbmNlbGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAvLyBub3QgaW1tZXJzaXZlICYgYSBmdWxsLXNjcmVlbiBhbGVydCBzaG91bGQgYmUgc2hvd24KKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpCisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgIk5vdGlmaWNhdGlvbiBoYXMgZnVsbFNjcmVlbkludGVudDsgc2VuZGluZyBmdWxsU2NyZWVuSW50ZW50Iik7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuU1lTVUlfRlVMTFNDUkVFTl9OT1RJRklDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmdldE5vdGlmaWNhdGlvbigpLmZ1bGxTY3JlZW5JbnRlbnQuc2VuZCgpOworICAgICAgICAgICAgICAgICAgICBzaGFkZUVudHJ5Lm5vdGlmeUZ1bGxTY3JlZW5JbnRlbnRMYXVuY2hlZCgpOworICAgICAgICAgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KG1Db250ZXh0LCAibm90ZV9mdWxsc2NyZWVuIiwgMSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGVuZGluZ0ludGVudC5DYW5jZWxlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGFkZE5vdGlmaWNhdGlvblZpZXdzKHNoYWRlRW50cnksIHJhbmtpbmcpOwpAQCAtMjExMSwxNyArMjExMCwxNyBAQAogCiAgICAgfQogCi0gICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlSGVhZHNVcChTdHJpbmcga2V5LCBFbnRyeSBlbnRyeSwgYm9vbGVhbiBzaG91bGRJbnRlcnJ1cHQsCisgICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlSGVhZHNVcChTdHJpbmcga2V5LCBFbnRyeSBlbnRyeSwgYm9vbGVhbiBzaG91bGRQZWVrLAogICAgICAgICAgICAgYm9vbGVhbiBhbGVydEFnYWluKSB7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzSGVhZHNVcCA9IGlzSGVhZHNVcChrZXkpOwogICAgICAgICBpZiAod2FzSGVhZHNVcCkgewotICAgICAgICAgICAgaWYgKCFzaG91bGRJbnRlcnJ1cHQpIHsKKyAgICAgICAgICAgIGlmICghc2hvdWxkUGVlaykgewogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSBpbnRlcnJ1cHRpbmcgYW55bW9yZSwgbGV0cyByZW1vdmUgaXQKICAgICAgICAgICAgICAgICBtSGVhZHNVcE1hbmFnZXIucmVtb3ZlTm90aWZpY2F0aW9uKGtleSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1IZWFkc1VwTWFuYWdlci51cGRhdGVOb3RpZmljYXRpb24oZW50cnksIGFsZXJ0QWdhaW4pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHNob3VsZEludGVycnVwdCAmJiBhbGVydEFnYWluKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc2hvdWxkUGVlayAmJiBhbGVydEFnYWluKSB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vdGlmaWNhdGlvbiB3YXMgdXBkYXRlZCB0byBiZSBhIGhlYWRzLXVwLCBzaG93IGl0IQogICAgICAgICAgICAgbUhlYWRzVXBNYW5hZ2VyLnNob3dOb3RpZmljYXRpb24oZW50cnkpOwogICAgICAgICB9CkBAIC0yMTYwLDcgKzIxNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBhbmltYXRlRXhwYW5kTm90aWZpY2F0aW9uc1BhbmVsKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX09QRU5fU0VUVElOR1NfUEFORUw6Ci0gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKChTdHJpbmcpIG0ub2JqKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfQ0xPU0VfUEFORUxTOgogICAgICAgICAgICAgICAgICAgICBhbmltYXRlQ29sbGFwc2VQYW5lbHMoKTsKQEAgLTIyNzQsNyArMjI3Myw3IEBACiAgICAgICAgICAgICBtU3RhdHVzQmFyV2luZG93TWFuYWdlci5zZXRTdGF0dXNCYXJGb2N1c2FibGUoZmFsc2UpOwogCiAgICAgICAgICAgICBtU3RhdHVzQmFyV2luZG93LmNhbmNlbEV4cGFuZEhlbHBlcigpOwotICAgICAgICAgICAgbVN0YXR1c0JhclZpZXcuY29sbGFwc2VBbGxQYW5lbHModHJ1ZSAvKiBhbmltYXRlICovLCBkZWxheWVkLCBzcGVlZFVwRmFjdG9yKTsKKyAgICAgICAgICAgIG1TdGF0dXNCYXJWaWV3LmNvbGxhcHNlUGFuZWwodHJ1ZSAvKiBhbmltYXRlICovLCBkZWxheWVkLCBzcGVlZFVwRmFjdG9yKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMwMyw3ICsyMzAyLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBhbmltYXRlRXhwYW5kU2V0dGluZ3NQYW5lbCgpIHsKKyAgICBwdWJsaWMgdm9pZCBhbmltYXRlRXhwYW5kU2V0dGluZ3NQYW5lbChTdHJpbmcgc3ViUGFuZWwpIHsKICAgICAgICAgaWYgKFNQRVcpIExvZy5kKFRBRywgImFuaW1hdGVFeHBhbmQ6IG1FeHBhbmRlZFZpc2libGU9IiArIG1FeHBhbmRlZFZpc2libGUpOwogICAgICAgICBpZiAoIXBhbmVsc0VuYWJsZWQoKSkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMxMiw2ICsyMzExLDEwIEBACiAgICAgICAgIC8vIFNldHRpbmdzIGFyZSBub3QgYXZhaWxhYmxlIGluIHNldHVwCiAgICAgICAgIGlmICghbVVzZXJTZXR1cCkgcmV0dXJuOwogCisKKyAgICAgICAgaWYgKHN1YlBhbmVsICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1RU1BhbmVsLm9wZW5EZXRhaWxzKHN1YlBhbmVsKTsKKyAgICAgICAgfQogICAgICAgICBtTm90aWZpY2F0aW9uUGFuZWwuZXhwYW5kV2l0aFFzKCk7CiAKICAgICAgICAgaWYgKGZhbHNlKSBwb3N0U3RhcnRUcmFjaW5nKCk7CkBAIC0yMzE5LDcgKzIzMjIsNyBAQAogCiAgICAgcHVibGljIHZvaWQgYW5pbWF0ZUNvbGxhcHNlUXVpY2tTZXR0aW5ncygpIHsKICAgICAgICAgaWYgKG1TdGF0ZSA9PSBTdGF0dXNCYXJTdGF0ZS5TSEFERSkgewotICAgICAgICAgICAgbVN0YXR1c0JhclZpZXcuY29sbGFwc2VBbGxQYW5lbHModHJ1ZSwgZmFsc2UgLyogZGVsYXllZCAqLywgMS4wZiAvKiBzcGVlZFVwRmFjdG9yICovKTsKKyAgICAgICAgICAgIG1TdGF0dXNCYXJWaWV3LmNvbGxhcHNlUGFuZWwodHJ1ZSwgZmFsc2UgLyogZGVsYXllZCAqLywgMS4wZiAvKiBzcGVlZFVwRmFjdG9yICovKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMzMiw3ICsyMzM1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIEVuc3VyZSB0aGUgcGFuZWwgaXMgZnVsbHkgY29sbGFwc2VkIChqdXN0IGluIGNhc2U7IGJ1ZyA2NzY1ODQyLCA3MjYwODY4KQotICAgICAgICBtU3RhdHVzQmFyVmlldy5jb2xsYXBzZUFsbFBhbmVscygvKmFuaW1hdGU9Ki8gZmFsc2UsIGZhbHNlIC8qIGRlbGF5ZWQqLywKKyAgICAgICAgbVN0YXR1c0JhclZpZXcuY29sbGFwc2VQYW5lbCgvKmFuaW1hdGU9Ki8gZmFsc2UsIGZhbHNlIC8qIGRlbGF5ZWQqLywKICAgICAgICAgICAgICAgICAxLjBmIC8qIHNwZWVkVXBGYWN0b3IgKi8pOwogCiAgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbC5jbG9zZVFzKCk7CkBAIC0yNDI0LDcgKzI0MjcsNyBAQAogICAgICAgICAgICAgbVN0YXR1c0JhcldpbmRvd1N0YXRlID0gc3RhdGU7CiAgICAgICAgICAgICBpZiAoREVCVUdfV0lORE9XX1NUQVRFKSBMb2cuZChUQUcsICJTdGF0dXMgYmFyICIgKyB3aW5kb3dTdGF0ZVRvU3RyaW5nKHN0YXRlKSk7CiAgICAgICAgICAgICBpZiAoIXNob3dpbmcgJiYgbVN0YXRlID09IFN0YXR1c0JhclN0YXRlLlNIQURFKSB7Ci0gICAgICAgICAgICAgICAgbVN0YXR1c0JhclZpZXcuY29sbGFwc2VBbGxQYW5lbHMoZmFsc2UgLyogYW5pbWF0ZSAqLywgZmFsc2UgLyogZGVsYXllZCAqLywKKyAgICAgICAgICAgICAgICBtU3RhdHVzQmFyVmlldy5jb2xsYXBzZVBhbmVsKGZhbHNlIC8qIGFuaW1hdGUgKi8sIGZhbHNlIC8qIGRlbGF5ZWQgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmIC8qIHNwZWVkVXBGYWN0b3IgKi8pOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yOTgxLDYgKzI5ODQsNyBAQAogICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJvblJlY2VpdmU6ICIgKyBpbnRlbnQpOwogICAgICAgICAgICAgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChJbnRlbnQuQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTLmVxdWFscyhhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgZ2V0S2V5Ym9hcmRTaG9ydGN1dHMoKS5kaXNtaXNzS2V5Ym9hcmRTaG9ydGN1dHNEaWFsb2coKTsKICAgICAgICAgICAgICAgICBpZiAoaXNDdXJyZW50UHJvZmlsZShnZXRTZW5kaW5nVXNlcklkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyA9IENvbW1hbmRRdWV1ZS5GTEFHX0VYQ0xVREVfTk9ORTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlYXNvbiA9IGludGVudC5nZXRTdHJpbmdFeHRyYSgicmVhc29uIik7CkBAIC00MTIxLDMyICs0MTI1LDYgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIFJlY2VudHMKLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHNob3dSZWNlbnRzKGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUFsdFRhYikgewotICAgICAgICAvLyBTZXQgdGhlIHJlY2VudHMgdmlzaWJpbGl0eSBmbGFnCi0gICAgICAgIG1TeXN0ZW1VaVZpc2liaWxpdHkgfD0gVmlldy5SRUNFTlRfQVBQU19WSVNJQkxFOwotICAgICAgICBub3RpZnlVaVZpc2liaWxpdHlDaGFuZ2VkKG1TeXN0ZW1VaVZpc2liaWxpdHkpOwotICAgICAgICBzdXBlci5zaG93UmVjZW50cyh0cmlnZ2VyZWRGcm9tQWx0VGFiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBoaWRlUmVjZW50cyhib29sZWFuIHRyaWdnZXJlZEZyb21BbHRUYWIsIGJvb2xlYW4gdHJpZ2dlcmVkRnJvbUhvbWVLZXkpIHsKLSAgICAgICAgLy8gVW5zZXQgdGhlIHJlY2VudHMgdmlzaWJpbGl0eSBmbGFnCi0gICAgICAgIG1TeXN0ZW1VaVZpc2liaWxpdHkgJj0gflZpZXcuUkVDRU5UX0FQUFNfVklTSUJMRTsKLSAgICAgICAgbm90aWZ5VWlWaXNpYmlsaXR5Q2hhbmdlZChtU3lzdGVtVWlWaXNpYmlsaXR5KTsKLSAgICAgICAgc3VwZXIuaGlkZVJlY2VudHModHJpZ2dlcmVkRnJvbUFsdFRhYiwgdHJpZ2dlcmVkRnJvbUhvbWVLZXkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRvZ2dsZVJlY2VudHMoKSB7Ci0gICAgICAgIC8vIFRvZ2dsZSB0aGUgcmVjZW50cyB2aXNpYmlsaXR5IGZsYWcKLSAgICAgICAgbVN5c3RlbVVpVmlzaWJpbGl0eSBePSBWaWV3LlJFQ0VOVF9BUFBTX1ZJU0lCTEU7Ci0gICAgICAgIG5vdGlmeVVpVmlzaWJpbGl0eUNoYW5nZWQobVN5c3RlbVVpVmlzaWJpbGl0eSk7Ci0gICAgICAgIHN1cGVyLnRvZ2dsZVJlY2VudHMoKTsKLSAgICB9Ci0KICAgICBwdWJsaWMgdm9pZCB1cGRhdGVSZWNlbnRzVmlzaWJpbGl0eShib29sZWFuIHZpc2libGUpIHsKICAgICAgICAgLy8gVXBkYXRlIHRoZSByZWNlbnRzIHZpc2liaWxpdHkgZmxhZwogICAgICAgICBpZiAodmlzaWJsZSkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclBvbGljeS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclBvbGljeS5qYXZhCmluZGV4IGI4OWNkMjIuLjU5ZDgzMWMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXJQb2xpY3kuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyUG9saWN5LmphdmEKQEAgLTIwLDcgKzIwLDYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsYXJtTWFuYWdlci5BbGFybUNsb2NrSW5mbzsKLWltcG9ydCBhbmRyb2lkLmFwcC5TdGF0dXNCYXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlN5bmNocm9ub3VzVXNlclN3aXRjaE9ic2VydmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTM1LDcgKzM0LDYgQEAKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbDsKIGltcG9ydCBhbmRyb2lkLnRlbGVjb20uVGVsZWNvbU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5JY2NDYXJkQ29uc3RhbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVwaG9ueS5UZWxlcGhvbnlJbnRlbnRzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CkBAIC02NiwxMyArNjQsMTMgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0xPVF9NQU5BR0VEX1BST0ZJTEUgPSAibWFuYWdlZF9wcm9maWxlIjsKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKLSAgICBwcml2YXRlIGZpbmFsIFN0YXR1c0Jhck1hbmFnZXIgbVNlcnZpY2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKICAgICBwcml2YXRlIGZpbmFsIENhc3RDb250cm9sbGVyIG1DYXN0OwogICAgIHByaXZhdGUgZmluYWwgSG90c3BvdENvbnRyb2xsZXIgbUhvdHNwb3Q7CiAgICAgcHJpdmF0ZSBmaW5hbCBBbGFybU1hbmFnZXIgbUFsYXJtTWFuYWdlcjsKICAgICBwcml2YXRlIGZpbmFsIFVzZXJJbmZvQ29udHJvbGxlciBtVXNlckluZm9Db250cm9sbGVyOwogICAgIHByaXZhdGUgZmluYWwgVXNlck1hbmFnZXIgbVVzZXJNYW5hZ2VyOworICAgIHByaXZhdGUgZmluYWwgU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIgbUljb25Db250cm9sbGVyOwogCiAgICAgLy8gQXNzdW1lIGl0J3MgYWxsIGdvb2QgdW5sZXNzIHdlIGhlYXIgb3RoZXJ3aXNlLiAgV2UgZG9uJ3QgYWx3YXlzIHNlZW0KICAgICAvLyB0byBnZXQgYnJvYWRjYXN0cyB0aGF0IGl0ICppcyogdGhlcmUuCkBAIC05NywxOCArOTUsMTQgQEAKICAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoYWN0aW9uLmVxdWFscyhBbGFybU1hbmFnZXIuQUNUSU9OX05FWFRfQUxBUk1fQ0xPQ0tfQ0hBTkdFRCkpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVBbGFybSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhBdWRpb01hbmFnZXIuUklOR0VSX01PREVfQ0hBTkdFRF9BQ1RJT04pIHx8CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoQXVkaW9NYW5hZ2VyLlJJTkdFUl9NT0RFX0NIQU5HRURfQUNUSU9OKSB8fAogICAgICAgICAgICAgICAgICAgICBhY3Rpb24uZXF1YWxzKEF1ZGlvTWFuYWdlci5JTlRFUk5BTF9SSU5HRVJfTU9ERV9DSEFOR0VEX0FDVElPTikpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVWb2x1bWVaZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoVGVsZXBob255SW50ZW50cy5BQ1RJT05fU0lNX1NUQVRFX0NIQU5HRUQpKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoVGVsZXBob255SW50ZW50cy5BQ1RJT05fU0lNX1NUQVRFX0NIQU5HRUQpKSB7CiAgICAgICAgICAgICAgICAgdXBkYXRlU2ltU3RhdGUoaW50ZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGFjdGlvbi5lcXVhbHMoVGVsZWNvbU1hbmFnZXIuQUNUSU9OX0NVUlJFTlRfVFRZX01PREVfQ0hBTkdFRCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhUZWxlY29tTWFuYWdlci5BQ1RJT05fQ1VSUkVOVF9UVFlfTU9ERV9DSEFOR0VEKSkgewogICAgICAgICAgICAgICAgIHVwZGF0ZVRUWShpbnRlbnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX01BTkFHRURfUFJPRklMRV9BVkFJTEFCSUxJVFlfQ0hBTkdFRCkpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLmVxdWFscyhJbnRlbnQuQUNUSU9OX01BTkFHRURfUFJPRklMRV9BVkFJTEFCSUxJVFlfQ0hBTkdFRCkpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVRdWlldFN0YXRlKCk7CiAgICAgICAgICAgICAgICAgdXBkYXRlTWFuYWdlZFByb2ZpbGUoKTsKICAgICAgICAgICAgIH0KQEAgLTExOSwxOCArMTEzLDE5IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgInVwZGF0ZUNhc3Q6IGhpZGluZyBpY29uIE5PVyIpOwotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9DQVNULCBmYWxzZSk7CisgICAgICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9DQVNULCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgcHVibGljIFBob25lU3RhdHVzQmFyUG9saWN5KENvbnRleHQgY29udGV4dCwgQ2FzdENvbnRyb2xsZXIgY2FzdCwgSG90c3BvdENvbnRyb2xsZXIgaG90c3BvdCwKLSAgICAgICAgICAgIFVzZXJJbmZvQ29udHJvbGxlciB1c2VySW5mb0NvbnRyb2xsZXIsIEJsdWV0b290aENvbnRyb2xsZXIgYmx1ZXRvb3RoKSB7CisgICAgcHVibGljIFBob25lU3RhdHVzQmFyUG9saWN5KENvbnRleHQgY29udGV4dCwgU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIgaWNvbkNvbnRyb2xsZXIsCisgICAgICAgICAgICBDYXN0Q29udHJvbGxlciBjYXN0LCBIb3RzcG90Q29udHJvbGxlciBob3RzcG90LCBVc2VySW5mb0NvbnRyb2xsZXIgdXNlckluZm9Db250cm9sbGVyLAorICAgICAgICAgICAgQmx1ZXRvb3RoQ29udHJvbGxlciBibHVldG9vdGgpIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtSWNvbkNvbnRyb2xsZXIgPSBpY29uQ29udHJvbGxlcjsKICAgICAgICAgbUNhc3QgPSBjYXN0OwogICAgICAgICBtSG90c3BvdCA9IGhvdHNwb3Q7CiAgICAgICAgIG1CbHVldG9vdGggPSBibHVldG9vdGg7CiAgICAgICAgIG1CbHVldG9vdGguYWRkU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyk7Ci0gICAgICAgIG1TZXJ2aWNlID0gKFN0YXR1c0Jhck1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlNUQVRVU19CQVJfU0VSVklDRSk7CiAgICAgICAgIG1BbGFybU1hbmFnZXIgPSAoQWxhcm1NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BTEFSTV9TRVJWSUNFKTsKICAgICAgICAgbVVzZXJJbmZvQ29udHJvbGxlciA9IHVzZXJJbmZvQ29udHJvbGxlcjsKICAgICAgICAgbVVzZXJNYW5hZ2VyID0gKFVzZXJNYW5hZ2VyKSBtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuVVNFUl9TRVJWSUNFKTsKQEAgLTE1Myw0MCArMTQ4LDQwIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBUVFkgc3RhdHVzCi0gICAgICAgIG1TZXJ2aWNlLnNldEljb24oU0xPVF9UVFksICBSLmRyYXdhYmxlLnN0YXRfc3lzX3R0eV9tb2RlLCAwLCBudWxsKTsKLSAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9UVFksIGZhbHNlKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9UVFksICBSLmRyYXdhYmxlLnN0YXRfc3lzX3R0eV9tb2RlLCBudWxsKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb25WaXNpYmlsaXR5KFNMT1RfVFRZLCBmYWxzZSk7CiAKICAgICAgICAgLy8gYmx1ZXRvb3RoIHN0YXR1cwogICAgICAgICB1cGRhdGVCbHVldG9vdGgoKTsKIAogICAgICAgICAvLyBBbGFybSBjbG9jawotICAgICAgICBtU2VydmljZS5zZXRJY29uKFNMT1RfQUxBUk1fQ0xPQ0ssIFIuZHJhd2FibGUuc3RhdF9zeXNfYWxhcm0sIDAsIG51bGwpOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0FMQVJNX0NMT0NLLCBmYWxzZSk7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uKFNMT1RfQUxBUk1fQ0xPQ0ssIFIuZHJhd2FibGUuc3RhdF9zeXNfYWxhcm0sIG51bGwpOworICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9BTEFSTV9DTE9DSywgZmFsc2UpOwogCiAgICAgICAgIC8vIHplbgotICAgICAgICBtU2VydmljZS5zZXRJY29uKFNMT1RfWkVOLCBSLmRyYXdhYmxlLnN0YXRfc3lzX3plbl9pbXBvcnRhbnQsIDAsIG51bGwpOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1pFTiwgZmFsc2UpOworICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvbihTTE9UX1pFTiwgUi5kcmF3YWJsZS5zdGF0X3N5c196ZW5faW1wb3J0YW50LCBudWxsKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb25WaXNpYmlsaXR5KFNMT1RfWkVOLCBmYWxzZSk7CiAKICAgICAgICAgLy8gdm9sdW1lCi0gICAgICAgIG1TZXJ2aWNlLnNldEljb24oU0xPVF9WT0xVTUUsIFIuZHJhd2FibGUuc3RhdF9zeXNfcmluZ2VyX3ZpYnJhdGUsIDAsIG51bGwpOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1ZPTFVNRSwgZmFsc2UpOworICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvbihTTE9UX1ZPTFVNRSwgUi5kcmF3YWJsZS5zdGF0X3N5c19yaW5nZXJfdmlicmF0ZSwgbnVsbCk7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1ZPTFVNRSwgZmFsc2UpOwogICAgICAgICB1cGRhdGVWb2x1bWVaZW4oKTsKIAogICAgICAgICAvLyBjYXN0Ci0gICAgICAgIG1TZXJ2aWNlLnNldEljb24oU0xPVF9DQVNULCBSLmRyYXdhYmxlLnN0YXRfc3lzX2Nhc3QsIDAsIG51bGwpOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0NBU1QsIGZhbHNlKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9DQVNULCBSLmRyYXdhYmxlLnN0YXRfc3lzX2Nhc3QsIG51bGwpOworICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9DQVNULCBmYWxzZSk7CiAgICAgICAgIG1DYXN0LmFkZENhbGxiYWNrKG1DYXN0Q2FsbGJhY2spOwogCiAgICAgICAgIC8vIGhvdHNwb3QKLSAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX0hPVFNQT1QsIFIuZHJhd2FibGUuc3RhdF9zeXNfaG90c3BvdCwgMCwKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9IT1RTUE9ULCBSLmRyYXdhYmxlLnN0YXRfc3lzX2hvdHNwb3QsCiAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfc3RhdHVzX2Jhcl9ob3RzcG90KSk7Ci0gICAgICAgIG1TZXJ2aWNlLnNldEljb25WaXNpYmlsaXR5KFNMT1RfSE9UU1BPVCwgbUhvdHNwb3QuaXNIb3RzcG90RW5hYmxlZCgpKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb25WaXNpYmlsaXR5KFNMT1RfSE9UU1BPVCwgbUhvdHNwb3QuaXNIb3RzcG90RW5hYmxlZCgpKTsKICAgICAgICAgbUhvdHNwb3QuYWRkQ2FsbGJhY2sobUhvdHNwb3RDYWxsYmFjayk7CiAKICAgICAgICAgLy8gbWFuYWdlZCBwcm9maWxlCi0gICAgICAgIG1TZXJ2aWNlLnNldEljb24oU0xPVF9NQU5BR0VEX1BST0ZJTEUsIFIuZHJhd2FibGUuc3RhdF9zeXNfbWFuYWdlZF9wcm9maWxlX3N0YXR1cywgMCwKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9NQU5BR0VEX1BST0ZJTEUsIFIuZHJhd2FibGUuc3RhdF9zeXNfbWFuYWdlZF9wcm9maWxlX3N0YXR1cywKICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV9tYW5hZ2VkX3Byb2ZpbGUpKTsKLSAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9NQU5BR0VEX1BST0ZJTEUsIG1NYW5hZ2VkUHJvZmlsZUljb25WaXNpYmxlKTsKKyAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb25WaXNpYmlsaXR5KFNMT1RfTUFOQUdFRF9QUk9GSUxFLCBtTWFuYWdlZFByb2ZpbGVJY29uVmlzaWJsZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc2V0WmVuTW9kZShpbnQgemVuKSB7CkBAIC0xOTgsMzIgKzE5MywyNyBAQAogICAgICAgICBmaW5hbCBBbGFybUNsb2NrSW5mbyBhbGFybSA9IG1BbGFybU1hbmFnZXIuZ2V0TmV4dEFsYXJtQ2xvY2soVXNlckhhbmRsZS5VU0VSX0NVUlJFTlQpOwogICAgICAgICBmaW5hbCBib29sZWFuIGhhc0FsYXJtID0gYWxhcm0gIT0gbnVsbCAmJiBhbGFybS5nZXRUcmlnZ2VyVGltZSgpID4gMDsKICAgICAgICAgZmluYWwgYm9vbGVhbiB6ZW5Ob25lID0gbVplbiA9PSBHbG9iYWwuWkVOX01PREVfTk9fSU5URVJSVVBUSU9OUzsKLSAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX0FMQVJNX0NMT0NLLCB6ZW5Ob25lID8gUi5kcmF3YWJsZS5zdGF0X3N5c19hbGFybV9kaW0KLSAgICAgICAgICAgICAgICA6IFIuZHJhd2FibGUuc3RhdF9zeXNfYWxhcm0sIDAsIG51bGwpOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0FMQVJNX0NMT0NLLCBtQ3VycmVudFVzZXJTZXR1cCAmJiBoYXNBbGFybSk7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uKFNMT1RfQUxBUk1fQ0xPQ0ssIHplbk5vbmUgPyBSLmRyYXdhYmxlLnN0YXRfc3lzX2FsYXJtX2RpbQorICAgICAgICAgICAgICAgIDogUi5kcmF3YWJsZS5zdGF0X3N5c19hbGFybSwgbnVsbCk7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0FMQVJNX0NMT0NLLCBtQ3VycmVudFVzZXJTZXR1cCAmJiBoYXNBbGFybSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHVwZGF0ZVNpbVN0YXRlKEludGVudCBpbnRlbnQpIHsKICAgICAgICAgU3RyaW5nIHN0YXRlRXh0cmEgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfS0VZX0lDQ19TVEFURSk7CiAgICAgICAgIGlmIChJY2NDYXJkQ29uc3RhbnRzLklOVEVOVF9WQUxVRV9JQ0NfQUJTRU5ULmVxdWFscyhzdGF0ZUV4dHJhKSkgewogICAgICAgICAgICAgbVNpbVN0YXRlID0gSWNjQ2FyZENvbnN0YW50cy5TdGF0ZS5BQlNFTlQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfSUNDX0NBUkRfSU9fRVJST1IuZXF1YWxzKHN0YXRlRXh0cmEpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfSUNDX0NBUkRfSU9fRVJST1IuZXF1YWxzKHN0YXRlRXh0cmEpKSB7CiAgICAgICAgICAgICBtU2ltU3RhdGUgPSBJY2NDYXJkQ29uc3RhbnRzLlN0YXRlLkNBUkRfSU9fRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfSUNDX1JFQURZLmVxdWFscyhzdGF0ZUV4dHJhKSkgeworICAgICAgICB9IGVsc2UgaWYgKEljY0NhcmRDb25zdGFudHMuSU5URU5UX1ZBTFVFX0lDQ19SRUFEWS5lcXVhbHMoc3RhdGVFeHRyYSkpIHsKICAgICAgICAgICAgIG1TaW1TdGF0ZSA9IEljY0NhcmRDb25zdGFudHMuU3RhdGUuUkVBRFk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfSUNDX0xPQ0tFRC5lcXVhbHMoc3RhdGVFeHRyYSkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChJY2NDYXJkQ29uc3RhbnRzLklOVEVOVF9WQUxVRV9JQ0NfTE9DS0VELmVxdWFscyhzdGF0ZUV4dHJhKSkgewogICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxvY2tlZFJlYXNvbiA9CiAgICAgICAgICAgICAgICAgICAgIGludGVudC5nZXRTdHJpbmdFeHRyYShJY2NDYXJkQ29uc3RhbnRzLklOVEVOVF9LRVlfTE9DS0VEX1JFQVNPTik7CiAgICAgICAgICAgICBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfTE9DS0VEX09OX1BJTi5lcXVhbHMobG9ja2VkUmVhc29uKSkgewogICAgICAgICAgICAgICAgIG1TaW1TdGF0ZSA9IEljY0NhcmRDb25zdGFudHMuU3RhdGUuUElOX1JFUVVJUkVEOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoSWNjQ2FyZENvbnN0YW50cy5JTlRFTlRfVkFMVUVfTE9DS0VEX09OX1BVSy5lcXVhbHMobG9ja2VkUmVhc29uKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChJY2NDYXJkQ29uc3RhbnRzLklOVEVOVF9WQUxVRV9MT0NLRURfT05fUFVLLmVxdWFscyhsb2NrZWRSZWFzb24pKSB7CiAgICAgICAgICAgICAgICAgbVNpbVN0YXRlID0gSWNjQ2FyZENvbnN0YW50cy5TdGF0ZS5QVUtfUkVRVUlSRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbVNpbVN0YXRlID0gSWNjQ2FyZENvbnN0YW50cy5TdGF0ZS5ORVRXT1JLX0xPQ0tFRDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTI3MCwxOCArMjYwLDE4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoemVuVmlzaWJsZSkgewotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX1pFTiwgemVuSWNvbklkLCAwLCB6ZW5EZXNjcmlwdGlvbik7CisgICAgICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvbihTTE9UX1pFTiwgemVuSWNvbklkLCB6ZW5EZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHplblZpc2libGUgIT0gbVplblZpc2libGUpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEljb25WaXNpYmlsaXR5KFNMT1RfWkVOLCB6ZW5WaXNpYmxlKTsKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1pFTiwgemVuVmlzaWJsZSk7CiAgICAgICAgICAgICBtWmVuVmlzaWJsZSA9IHplblZpc2libGU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodm9sdW1lVmlzaWJsZSkgewotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX1ZPTFVNRSwgdm9sdW1lSWNvbklkLCAwLCB2b2x1bWVEZXNjcmlwdGlvbik7CisgICAgICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvbihTTE9UX1ZPTFVNRSwgdm9sdW1lSWNvbklkLCB2b2x1bWVEZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZvbHVtZVZpc2libGUgIT0gbVZvbHVtZVZpc2libGUpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEljb25WaXNpYmlsaXR5KFNMT1RfVk9MVU1FLCB2b2x1bWVWaXNpYmxlKTsKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1ZPTFVNRSwgdm9sdW1lVmlzaWJsZSk7CiAgICAgICAgICAgICBtVm9sdW1lVmlzaWJsZSA9IHZvbHVtZVZpc2libGU7CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRlQWxhcm0oKTsKQEAgLTMxMCw4ICszMDAsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX0JMVUVUT09USCwgaWNvbklkLCAwLCBjb250ZW50RGVzY3JpcHRpb24pOwotICAgICAgICBtU2VydmljZS5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0JMVUVUT09USCwgYmx1ZXRvb3RoRW5hYmxlZCk7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uKFNMT1RfQkxVRVRPT1RILCBpY29uSWQsIGNvbnRlbnREZXNjcmlwdGlvbik7CisgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0JMVUVUT09USCwgYmx1ZXRvb3RoRW5hYmxlZCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHVwZGF0ZVRUWShJbnRlbnQgaW50ZW50KSB7CkBAIC0zMjQsMTMgKzMxNCwxMyBAQAogICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgICAgLy8gVFRZIGlzIG9uCiAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy52KFRBRywgInVwZGF0ZVRUWTogc2V0IFRUWSBvbiIpOwotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvbihTTE9UX1RUWSwgUi5kcmF3YWJsZS5zdGF0X3N5c190dHlfbW9kZSwgMCwKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uKFNMT1RfVFRZLCBSLmRyYXdhYmxlLnN0YXRfc3lzX3R0eV9tb2RlLAogICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV90dHlfZW5hYmxlZCkpOwotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9UVFksIHRydWUpOworICAgICAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb25WaXNpYmlsaXR5KFNMT1RfVFRZLCB0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRUWSBpcyBvZmYKICAgICAgICAgICAgIGlmIChERUJVRykgTG9nLnYoVEFHLCAidXBkYXRlVFRZOiBzZXQgVFRZIG9mZiIpOwotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9UVFksIGZhbHNlKTsKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX1RUWSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDYsOSArMzM2LDkgQEAKICAgICAgICAgaWYgKERFQlVHKSBMb2cudihUQUcsICJ1cGRhdGVDYXN0OiBpc0Nhc3Rpbmc6ICIgKyBpc0Nhc3RpbmcpOwogICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVJlbW92ZUNhc3RJY29uUnVubmFibGUpOwogICAgICAgICBpZiAoaXNDYXN0aW5nKSB7Ci0gICAgICAgICAgICBtU2VydmljZS5zZXRJY29uKFNMT1RfQ0FTVCwgUi5kcmF3YWJsZS5zdGF0X3N5c19jYXN0LCAwLAorICAgICAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9DQVNULCBSLmRyYXdhYmxlLnN0YXRfc3lzX2Nhc3QsCiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X2Nhc3RpbmcpKTsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEljb25WaXNpYmlsaXR5KFNMT1RfQ0FTVCwgdHJ1ZSk7CisgICAgICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9DQVNULCB0cnVlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIGRvbid0IHR1cm4gb2ZmIHRoZSBzY3JlZW4tcmVjb3JkIGljb24gZm9yIGEgZmV3IHNlY29uZHMsIGp1c3QgdG8gbWFrZSBzdXJlIHRoZSB1c2VyCiAgICAgICAgICAgICAvLyBoYXMgc2VlbiBpdApAQCAtMzkyLDE3ICszODIsMTkgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBzaG93SWNvbjsKICAgICAgICAgaWYgKG1NYW5hZ2VkUHJvZmlsZUZvY3VzZWQgJiYgIW1LZXlndWFyZFZpc2libGUpIHsKICAgICAgICAgICAgIHNob3dJY29uID0gdHJ1ZTsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEljb24oU0xPVF9NQU5BR0VEX1BST0ZJTEUsIFIuZHJhd2FibGUuc3RhdF9zeXNfbWFuYWdlZF9wcm9maWxlX3N0YXR1cywgMCwKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uKFNMT1RfTUFOQUdFRF9QUk9GSUxFLAorICAgICAgICAgICAgICAgICAgICBSLmRyYXdhYmxlLnN0YXRfc3lzX21hbmFnZWRfcHJvZmlsZV9zdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X21hbmFnZWRfcHJvZmlsZSkpOwogICAgICAgICB9IGVsc2UgaWYgKG1NYW5hZ2VkUHJvZmlsZUluUXVpZXRNb2RlKSB7CiAgICAgICAgICAgICBzaG93SWNvbiA9IHRydWU7Ci0gICAgICAgICAgICBtU2VydmljZS5zZXRJY29uKFNMT1RfTUFOQUdFRF9QUk9GSUxFLCBSLmRyYXdhYmxlLnN0YXRfc3lzX21hbmFnZWRfcHJvZmlsZV9zdGF0dXNfb2ZmLCAwLAorICAgICAgICAgICAgbUljb25Db250cm9sbGVyLnNldEljb24oU0xPVF9NQU5BR0VEX1BST0ZJTEUsCisgICAgICAgICAgICAgICAgICAgIFIuZHJhd2FibGUuc3RhdF9zeXNfbWFuYWdlZF9wcm9maWxlX3N0YXR1c19vZmYsCiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5hY2Nlc3NpYmlsaXR5X21hbmFnZWRfcHJvZmlsZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2hvd0ljb24gPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAobU1hbmFnZWRQcm9maWxlSWNvblZpc2libGUgIT0gc2hvd0ljb24pIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEljb25WaXNpYmlsaXR5KFNMT1RfTUFOQUdFRF9QUk9GSUxFLCBzaG93SWNvbik7CisgICAgICAgICAgICBtSWNvbkNvbnRyb2xsZXIuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9NQU5BR0VEX1BST0ZJTEUsIHNob3dJY29uKTsKICAgICAgICAgICAgIG1NYW5hZ2VkUHJvZmlsZUljb25WaXNpYmxlID0gc2hvd0ljb247CiAgICAgICAgIH0KICAgICB9CkBAIC00MzEsNyArNDIzLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIEhvdHNwb3RDb250cm9sbGVyLkNhbGxiYWNrIG1Ib3RzcG90Q2FsbGJhY2sgPSBuZXcgSG90c3BvdENvbnRyb2xsZXIuQ2FsbGJhY2soKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkhvdHNwb3RDaGFuZ2VkKGJvb2xlYW4gZW5hYmxlZCkgewotICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SWNvblZpc2liaWxpdHkoU0xPVF9IT1RTUE9ULCBlbmFibGVkKTsKKyAgICAgICAgICAgIG1JY29uQ29udHJvbGxlci5zZXRJY29uVmlzaWJpbGl0eShTTE9UX0hPVFNQT1QsIGVuYWJsZWQpOwogICAgICAgICB9CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclZpZXcuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUGhvbmVTdGF0dXNCYXJWaWV3LmphdmEKaW5kZXggYzA4ODdjYS4uODEzYTE2NyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9QaG9uZVN0YXR1c0JhclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1Bob25lU3RhdHVzQmFyVmlldy5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKQEAgLTI2LDcgKzI1LDYgQEAKIAogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkRlamFua1V0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkV2ZW50TG9nVGFnczsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogCiBwdWJsaWMgY2xhc3MgUGhvbmVTdGF0dXNCYXJWaWV3IGV4dGVuZHMgUGFuZWxCYXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUGhvbmVTdGF0dXNCYXJWaWV3IjsKQEAgLTM1LDggKzMzLDcgQEAKIAogICAgIFBob25lU3RhdHVzQmFyIG1CYXI7CiAKLSAgICBQYW5lbFZpZXcgbUxhc3RGdWxseU9wZW5lZFBhbmVsID0gbnVsbDsKLSAgICBQYW5lbFZpZXcgbU5vdGlmaWNhdGlvblBhbmVsOworICAgIGJvb2xlYW4gbUlzRnVsbHlPcGVuZWRQYW5lbCA9IGZhbHNlOwogICAgIHByaXZhdGUgZmluYWwgUGhvbmVTdGF0dXNCYXJUcmFuc2l0aW9ucyBtQmFyVHJhbnNpdGlvbnM7CiAgICAgcHJpdmF0ZSBTY3JpbUNvbnRyb2xsZXIgbVNjcmltQ29udHJvbGxlcjsKICAgICBwcml2YXRlIGZsb2F0IG1NaW5GcmFjdGlvbjsKQEAgLTUxLDcgKzQ4LDYgQEAKICAgICBwdWJsaWMgUGhvbmVTdGF0dXNCYXJWaWV3KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CiAgICAgICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKIAotICAgICAgICBSZXNvdXJjZXMgcmVzID0gZ2V0Q29udGV4dCgpLmdldFJlc291cmNlcygpOwogICAgICAgICBtQmFyVHJhbnNpdGlvbnMgPSBuZXcgUGhvbmVTdGF0dXNCYXJUcmFuc2l0aW9ucyh0aGlzKTsKICAgICB9CiAKQEAgLTczLDE1ICs2OSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkUGFuZWwoUGFuZWxWaWV3IHB2KSB7Ci0gICAgICAgIHN1cGVyLmFkZFBhbmVsKHB2KTsKLSAgICAgICAgaWYgKHB2LmdldElkKCkgPT0gUi5pZC5ub3RpZmljYXRpb25fcGFuZWwpIHsKLSAgICAgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbCA9IHB2OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gcGFuZWxzRW5hYmxlZCgpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBwYW5lbEVuYWJsZWQoKSB7CiAgICAgICAgIHJldHVybiBtQmFyLnBhbmVsc0VuYWJsZWQoKTsKICAgICB9CiAKQEAgLTEwMSwyNSArODksMTcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgUGFuZWxWaWV3IHNlbGVjdFBhbmVsRm9yVG91Y2goTW90aW9uRXZlbnQgdG91Y2gpIHsKLSAgICAgICAgLy8gTm8gZG91YmxlIHN3aXBpbmcuIElmIGVpdGhlciBwYW5lbCBpcyBvcGVuLCBub3RoaW5nIGVsc2UgY2FuIGJlIHB1bGxlZCBkb3duLgotICAgICAgICByZXR1cm4gbU5vdGlmaWNhdGlvblBhbmVsLmdldEV4cGFuZGVkSGVpZ2h0KCkgPiAwCi0gICAgICAgICAgICAgICAgPyBudWxsCi0gICAgICAgICAgICAgICAgOiBtTm90aWZpY2F0aW9uUGFuZWw7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25QYW5lbFBlZWtlZCgpIHsKICAgICAgICAgc3VwZXIub25QYW5lbFBlZWtlZCgpOwogICAgICAgICBtQmFyLm1ha2VFeHBhbmRlZFZpc2libGUoZmFsc2UpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQWxsUGFuZWxzQ29sbGFwc2VkKCkgewotICAgICAgICBzdXBlci5vbkFsbFBhbmVsc0NvbGxhcHNlZCgpOworICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxDb2xsYXBzZWQoKSB7CisgICAgICAgIHN1cGVyLm9uUGFuZWxDb2xsYXBzZWQoKTsKICAgICAgICAgLy8gQ2xvc2UgdGhlIHN0YXR1cyBiYXIgaW4gdGhlIG5leHQgZnJhbWUgc28gd2UgY2FuIHNob3cgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uLgogICAgICAgICBEZWphbmtVdGlscy5wb3N0QWZ0ZXJUcmF2ZXJzYWwobUhpZGVFeHBhbmRlZFJ1bm5hYmxlKTsKLSAgICAgICAgbUxhc3RGdWxseU9wZW5lZFBhbmVsID0gbnVsbDsKKyAgICAgICAgbUlzRnVsbHlPcGVuZWRQYW5lbCA9IGZhbHNlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVBlbmRpbmdIaWRlRXhwYW5kZWRSdW5uYWJsZXMoKSB7CkBAIC0xMjcsMTIgKzEwNywxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxGdWxseU9wZW5lZChQYW5lbFZpZXcgb3BlblBhbmVsKSB7Ci0gICAgICAgIHN1cGVyLm9uUGFuZWxGdWxseU9wZW5lZChvcGVuUGFuZWwpOwotICAgICAgICBpZiAob3BlblBhbmVsICE9IG1MYXN0RnVsbHlPcGVuZWRQYW5lbCkgewotICAgICAgICAgICAgb3BlblBhbmVsLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfV0lORE9XX1NUQVRFX0NIQU5HRUQpOworICAgIHB1YmxpYyB2b2lkIG9uUGFuZWxGdWxseU9wZW5lZCgpIHsKKyAgICAgICAgc3VwZXIub25QYW5lbEZ1bGx5T3BlbmVkKCk7CisgICAgICAgIGlmICghbUlzRnVsbHlPcGVuZWRQYW5lbCkgeworICAgICAgICAgICAgbVBhbmVsLnNlbmRBY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50LlRZUEVfV0lORE9XX1NUQVRFX0NIQU5HRUQpOwogICAgICAgICB9Ci0gICAgICAgIG1MYXN0RnVsbHlPcGVuZWRQYW5lbCA9IG9wZW5QYW5lbDsKKyAgICAgICAgbUlzRnVsbHlPcGVuZWRQYW5lbCA9IHRydWU7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNTEsOCArMTMxLDggQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRyYWNraW5nU3RhcnRlZChQYW5lbFZpZXcgcGFuZWwpIHsKLSAgICAgICAgc3VwZXIub25UcmFja2luZ1N0YXJ0ZWQocGFuZWwpOworICAgIHB1YmxpYyB2b2lkIG9uVHJhY2tpbmdTdGFydGVkKCkgeworICAgICAgICBzdXBlci5vblRyYWNraW5nU3RhcnRlZCgpOwogICAgICAgICBtQmFyLm9uVHJhY2tpbmdTdGFydGVkKCk7CiAgICAgICAgIG1TY3JpbUNvbnRyb2xsZXIub25UcmFja2luZ1N0YXJ0ZWQoKTsKICAgICB9CkBAIC0xNjQsOCArMTQ0LDggQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRyYWNraW5nU3RvcHBlZChQYW5lbFZpZXcgcGFuZWwsIGJvb2xlYW4gZXhwYW5kKSB7Ci0gICAgICAgIHN1cGVyLm9uVHJhY2tpbmdTdG9wcGVkKHBhbmVsLCBleHBhbmQpOworICAgIHB1YmxpYyB2b2lkIG9uVHJhY2tpbmdTdG9wcGVkKGJvb2xlYW4gZXhwYW5kKSB7CisgICAgICAgIHN1cGVyLm9uVHJhY2tpbmdTdG9wcGVkKGV4cGFuZCk7CiAgICAgICAgIG1CYXIub25UcmFja2luZ1N0b3BwZWQoZXhwYW5kKTsKICAgICB9CiAKQEAgLTE4OSw4ICsxNjksOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHBhbmVsRXhwYW5zaW9uQ2hhbmdlZChQYW5lbFZpZXcgcGFuZWwsIGZsb2F0IGZyYWMsIGJvb2xlYW4gZXhwYW5kZWQpIHsKLSAgICAgICAgc3VwZXIucGFuZWxFeHBhbnNpb25DaGFuZ2VkKHBhbmVsLCBmcmFjLCBleHBhbmRlZCk7CisgICAgcHVibGljIHZvaWQgcGFuZWxFeHBhbnNpb25DaGFuZ2VkKGZsb2F0IGZyYWMsIGJvb2xlYW4gZXhwYW5kZWQpIHsKKyAgICAgICAgc3VwZXIucGFuZWxFeHBhbnNpb25DaGFuZ2VkKGZyYWMsIGV4cGFuZGVkKTsKICAgICAgICAgbVBhbmVsRnJhY3Rpb24gPSBmcmFjOwogICAgICAgICB1cGRhdGVTY3JpbUZyYWN0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RU1RpbGVIb3N0LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1FTVGlsZUhvc3QuamF2YQppbmRleCA3ZjI3YmE3Li4yOWFkNWQxYyAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RU1RpbGVIb3N0LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RU1RpbGVIb3N0LmphdmEKQEAgLTE4LDMwICsxOCwyNiBAQAogCiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKIGltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci1pbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKLWltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNTZXJ2aWNlOwotaW1wb3J0IGFuZHJvaWQuc2VydmljZS5xdWlja3NldHRpbmdzLlRpbGU7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLkN1c3RvbVRpbGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWwuVGlsZVNlcnZpY2VzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkFpcnBsYW5lTW9kZVRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQmF0dGVyeVRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQmx1ZXRvb3RoVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5DYXN0VGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5DZWxsdWxhclRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuQ29sb3JJbnZlcnNpb25UaWxlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLnRpbGVzLkN1c3RvbVRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMudGlsZXMuRG5kVGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5GbGFzaGxpZ2h0VGlsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5xcy50aWxlcy5Ib3RzcG90VGlsZTsKQEAgLTY0LDYgKzYwLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LlVzZXJJbmZvQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LlVzZXJTd2l0Y2hlckNvbnRyb2xsZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBvbGljeS5aZW5Nb2RlQ29udHJvbGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lci5Db2xvck1hdHJpeFRpbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkudHVuZXIuVHVuZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyLlR1bmVyU2VydmljZS5UdW5hYmxlOwogCkBAIC03NSw3ICs3Miw3IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogLyoqIFBsYXRmb3JtIGltcGxlbWVudGF0aW9uIG9mIHRoZSBxdWljayBzZXR0aW5ncyB0aWxlIGhvc3QgKiovCi1wdWJsaWMgZmluYWwgY2xhc3MgUVNUaWxlSG9zdCBleHRlbmRzIElRU1NlcnZpY2UuU3R1YiBpbXBsZW1lbnRzIFFTVGlsZS5Ib3N0LCBUdW5hYmxlIHsKK3B1YmxpYyBmaW5hbCBjbGFzcyBRU1RpbGVIb3N0IGltcGxlbWVudHMgUVNUaWxlLkhvc3QsIFR1bmFibGUgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUVNUaWxlSG9zdCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IExvZy5pc0xvZ2dhYmxlKFRBRywgTG9nLkRFQlVHKTsKIApAQCAtOTksMTYgKzk2LDIwIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBLZXlndWFyZE1vbml0b3IgbUtleWd1YXJkOwogICAgIHByaXZhdGUgZmluYWwgU2VjdXJpdHlDb250cm9sbGVyIG1TZWN1cml0eTsKICAgICBwcml2YXRlIGZpbmFsIEJhdHRlcnlDb250cm9sbGVyIG1CYXR0ZXJ5OworICAgIHByaXZhdGUgZmluYWwgU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIgbUljb25Db250cm9sbGVyOworICAgIHByaXZhdGUgZmluYWwgVGlsZVNlcnZpY2VzIG1TZXJ2aWNlczsKIAogICAgIHByaXZhdGUgZmluYWwgTGlzdDxDYWxsYmFjaz4gbUNhbGxiYWNrcyA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgIHByaXZhdGUgVmlldyBtSGVhZGVyOwogCiAgICAgcHVibGljIFFTVGlsZUhvc3QoQ29udGV4dCBjb250ZXh0LCBQaG9uZVN0YXR1c0JhciBzdGF0dXNCYXIsCi0gICAgICAgICAgICBCbHVldG9vdGhDb250cm9sbGVyIGJsdWV0b290aCwgTG9jYXRpb25Db250cm9sbGVyIGxvY2F0aW9uLAotICAgICAgICAgICAgUm90YXRpb25Mb2NrQ29udHJvbGxlciByb3RhdGlvbiwgTmV0d29ya0NvbnRyb2xsZXIgbmV0d29yaywKLSAgICAgICAgICAgIFplbk1vZGVDb250cm9sbGVyIHplbiwgSG90c3BvdENvbnRyb2xsZXIgaG90c3BvdCwKLSAgICAgICAgICAgIENhc3RDb250cm9sbGVyIGNhc3QsIEZsYXNobGlnaHRDb250cm9sbGVyIGZsYXNobGlnaHQsCi0gICAgICAgICAgICBVc2VyU3dpdGNoZXJDb250cm9sbGVyIHVzZXJTd2l0Y2hlciwgVXNlckluZm9Db250cm9sbGVyIHVzZXJJbmZvLCBLZXlndWFyZE1vbml0b3Iga2V5Z3VhcmQsCi0gICAgICAgICAgICBTZWN1cml0eUNvbnRyb2xsZXIgc2VjdXJpdHksIEJhdHRlcnlDb250cm9sbGVyIGJhdHRlcnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBCbHVldG9vdGhDb250cm9sbGVyIGJsdWV0b290aCwgTG9jYXRpb25Db250cm9sbGVyIGxvY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgIFJvdGF0aW9uTG9ja0NvbnRyb2xsZXIgcm90YXRpb24sIE5ldHdvcmtDb250cm9sbGVyIG5ldHdvcmssCisgICAgICAgICAgICAgICAgICAgICAgWmVuTW9kZUNvbnRyb2xsZXIgemVuLCBIb3RzcG90Q29udHJvbGxlciBob3RzcG90LAorICAgICAgICAgICAgICAgICAgICAgIENhc3RDb250cm9sbGVyIGNhc3QsIEZsYXNobGlnaHRDb250cm9sbGVyIGZsYXNobGlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgVXNlclN3aXRjaGVyQ29udHJvbGxlciB1c2VyU3dpdGNoZXIsIFVzZXJJbmZvQ29udHJvbGxlciB1c2VySW5mbywKKyAgICAgICAgICAgICAgICAgICAgICBLZXlndWFyZE1vbml0b3Iga2V5Z3VhcmQsIFNlY3VyaXR5Q29udHJvbGxlciBzZWN1cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICBCYXR0ZXJ5Q29udHJvbGxlciBiYXR0ZXJ5LCBTdGF0dXNCYXJJY29uQ29udHJvbGxlciBpY29uQ29udHJvbGxlcikgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1TdGF0dXNCYXIgPSBzdGF0dXNCYXI7CiAgICAgICAgIG1CbHVldG9vdGggPSBibHVldG9vdGg7CkBAIC0xMjQsMTUgKzEyNSwyMiBAQAogICAgICAgICBtS2V5Z3VhcmQgPSBrZXlndWFyZDsKICAgICAgICAgbVNlY3VyaXR5ID0gc2VjdXJpdHk7CiAgICAgICAgIG1CYXR0ZXJ5ID0gYmF0dGVyeTsKKyAgICAgICAgbUljb25Db250cm9sbGVyID0gaWNvbkNvbnRyb2xsZXI7CiAKICAgICAgICAgZmluYWwgSGFuZGxlclRocmVhZCBodCA9IG5ldyBIYW5kbGVyVGhyZWFkKFFTVGlsZUhvc3QuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpLAogICAgICAgICAgICAgICAgIFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX0JBQ0tHUk9VTkQpOwogICAgICAgICBodC5zdGFydCgpOwogICAgICAgICBtTG9vcGVyID0gaHQuZ2V0TG9vcGVyKCk7CiAKKyAgICAgICAgbVNlcnZpY2VzID0gbmV3IFRpbGVTZXJ2aWNlcyh0aGlzLCBtTG9vcGVyKTsKKwogICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KG1Db250ZXh0KS5hZGRUdW5hYmxlKHRoaXMsIFRJTEVTX1NFVFRJTkcpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHNldEhlYWRlclZpZXcoVmlldyB2aWV3KSB7CisgICAgICAgIG1IZWFkZXIgPSB2aWV3OworICAgIH0KKwogICAgIHB1YmxpYyBQaG9uZVN0YXR1c0JhciBnZXRQaG9uZVN0YXR1c0JhcigpIHsKICAgICAgICAgcmV0dXJuIG1TdGF0dXNCYXI7CiAgICAgfQpAQCAtMTcxLDYgKzE3OSwxMSBAQAogICAgICAgICAvLyBhbHJlYWR5IGxvZ2dlZAogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIGFuaW1hdGVFeHBhbmRRUygpIHsKKyAgICAgICAgLy8gVE9ETzogQmV0dGVyIHBhdGggdG8gYW5pbWF0ZWQgcGFuZWwgZXhwYW5zaW9uLgorICAgICAgICBtSGVhZGVyLnBlcmZvcm1DbGljaygpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNvbGxhcHNlUGFuZWxzKCkgewogICAgICAgICBtU3RhdHVzQmFyLnBvc3RBbmltYXRlQ29sbGFwc2VQYW5lbHMoKTsKQEAgLTI1NSw2ICsyNjgsMTQgQEAKICAgICAgICAgcmV0dXJuIG1TZWN1cml0eTsKICAgICB9CiAKKyAgICBwdWJsaWMgVGlsZVNlcnZpY2VzIGdldFRpbGVTZXJ2aWNlcygpIHsKKyAgICAgICAgcmV0dXJuIG1TZXJ2aWNlczsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIgZ2V0SWNvbkNvbnRyb2xsZXIoKSB7CisgICAgICAgIHJldHVybiBtSWNvbkNvbnRyb2xsZXI7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25UdW5pbmdDaGFuZ2VkKFN0cmluZyBrZXksIFN0cmluZyBuZXdWYWx1ZSkgewogICAgICAgICBpZiAoIVRJTEVTX1NFVFRJTkcuZXF1YWxzKGtleSkpIHsKQEAgLTMwNSw1MCArMzI2LDYgQEAKICAgICAgICAgICAgICAgICBUZXh0VXRpbHMuam9pbigiLCIsIHNwZWNzKSwgQWN0aXZpdHlNYW5hZ2VyLmdldEN1cnJlbnRVc2VyKCkpOwogICAgIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVFzVGlsZShUaWxlIHRpbGUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICB2ZXJpZnlDYWxsZXIodGlsZS5nZXRDb21wb25lbnROYW1lKCkuZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQodGlsZS5nZXRDb21wb25lbnROYW1lKCkpOwotICAgICAgICBpZiAoY3VzdG9tVGlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjdXN0b21UaWxlLnVwZGF0ZVN0YXRlKHRpbGUpOwotICAgICAgICAgICAgY3VzdG9tVGlsZS5yZWZyZXNoU3RhdGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2hvd0RpYWxvZyhUaWxlIHRpbGUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICB2ZXJpZnlDYWxsZXIodGlsZS5nZXRDb21wb25lbnROYW1lKCkuZ2V0UGFja2FnZU5hbWUoKSk7Ci0gICAgICAgIEN1c3RvbVRpbGUgY3VzdG9tVGlsZSA9IGdldFRpbGVGb3JDb21wb25lbnQodGlsZS5nZXRDb21wb25lbnROYW1lKCkpOwotICAgICAgICBpZiAoY3VzdG9tVGlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjdXN0b21UaWxlLm9uRGlhbG9nU2hvd24oKTsKLSAgICAgICAgICAgIGNvbGxhcHNlUGFuZWxzKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmVyaWZ5Q2FsbGVyKFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVc2VySGFuZGxlKCkuZ2V0SWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgIGlmIChCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpICE9IHVpZCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ29tcG9uZW50IG91dHNpZGUgY2FsbGVyJ3MgdWlkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIEN1c3RvbVRpbGUgZ2V0VGlsZUZvckNvbXBvbmVudChDb21wb25lbnROYW1lIGNvbXBvbmVudCkgewotICAgICAgICAvLyBUT0RPOiBCdWlsZCBtYXAgZm9yIGVhc2llciBsb29rdXAuCi0gICAgICAgIGZvciAoUVNUaWxlPD8+IHFzVGlsZSA6IG1UaWxlcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHFzVGlsZSBpbnN0YW5jZW9mIEN1c3RvbVRpbGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoKChDdXN0b21UaWxlKSBxc1RpbGUpLmdldENvbXBvbmVudCgpLmVxdWFscyhjb21wb25lbnQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoQ3VzdG9tVGlsZSkgcXNUaWxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KICAgICBwdWJsaWMgUVNUaWxlPD8+IGNyZWF0ZVRpbGUoU3RyaW5nIHRpbGVTcGVjKSB7CiAgICAgICAgIGlmICh0aWxlU3BlYy5lcXVhbHMoIndpZmkiKSkgcmV0dXJuIFdpZmlUaWxlLmlzU3VwcG9ydGVkKHRoaXMpCiAgICAgICAgICAgICAgICAgPyBuZXcgV2lmaVRpbGUodGhpcykgOiBudWxsOwpAQCAtMzY4LDEwICszNDUsMTUgQEAKICAgICAgICAgZWxzZSBpZiAodGlsZVNwZWMuZXF1YWxzKCJob3RzcG90IikpIHJldHVybiBuZXcgSG90c3BvdFRpbGUodGhpcyk7CiAgICAgICAgIGVsc2UgaWYgKHRpbGVTcGVjLmVxdWFscygidXNlciIpKSByZXR1cm4gbmV3IFVzZXJUaWxlKHRoaXMpOwogICAgICAgICBlbHNlIGlmICh0aWxlU3BlYy5lcXVhbHMoImJhdHRlcnkiKSkgcmV0dXJuIG5ldyBCYXR0ZXJ5VGlsZSh0aGlzKTsKKyAgICAgICAgZWxzZSBpZiAodGlsZVNwZWMuZXF1YWxzKENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfU1BFQykpCisgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yTWF0cml4VGlsZSh0aGlzKTsKICAgICAgICAgLy8gSW50ZW50IHRpbGVzLgogICAgICAgICBlbHNlIGlmICh0aWxlU3BlYy5zdGFydHNXaXRoKEludGVudFRpbGUuUFJFRklYKSkgcmV0dXJuIEludGVudFRpbGUuY3JlYXRlKHRoaXMsdGlsZVNwZWMpOwogICAgICAgICBlbHNlIGlmICh0aWxlU3BlYy5zdGFydHNXaXRoKEN1c3RvbVRpbGUuUFJFRklYKSkgcmV0dXJuIEN1c3RvbVRpbGUuY3JlYXRlKHRoaXMsdGlsZVNwZWMpOwotICAgICAgICBlbHNlIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkJhZCB0aWxlIHNwZWM6ICIgKyB0aWxlU3BlYyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTG9nLncoVEFHLCAiQmFkIHRpbGUgc3BlYzogIiArIHRpbGVTcGVjKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gbG9hZFRpbGVTcGVjcyhDb250ZXh0IGNvbnRleHQsIFN0cmluZyB0aWxlTGlzdCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1N0YXR1c0JhckhlYWRlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9RdWlja1N0YXR1c0JhckhlYWRlci5qYXZhCmluZGV4IGM0OTMwYTkuLjViNDRmMGEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvUXVpY2tTdGF0dXNCYXJIZWFkZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1F1aWNrU3RhdHVzQmFySGVhZGVyLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkFuaW1hdGFibGU7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5SaXBwbGVEcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZVZpZXc7CkBAIC02MiwxMSArNjEsMTUgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtRGV0YWlsVHJhbnNpdGlvbmluZzsKICAgICBwcml2YXRlIFZpZXdHcm91cCBtRXhwYW5kZWRHcm91cDsKKyAgICBwcml2YXRlIFZpZXdHcm91cCBtRGF0ZVRpbWVHcm91cDsKKyAgICBwcml2YXRlIFZpZXcgbUVtZXJnZW5jeU9ubHk7CiAgICAgcHJpdmF0ZSBUZXh0VmlldyBtUXNEZXRhaWxIZWFkZXJUaXRsZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbUxpc3RlbmluZzsKICAgICBwcml2YXRlIEFsYXJtTWFuYWdlci5BbGFybUNsb2NrSW5mbyBtTmV4dEFsYXJtOwogCiAgICAgcHJpdmF0ZSBRdWlja1FTUGFuZWwgbUhlYWRlclFzUGFuZWw7CisgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93RW1lcmdlbmN5Q2FsbHNPbmx5OworICAgIHByaXZhdGUgZmxvYXQgbURhdGVUaW1lVHJhbnNsYXRpb247CiAKICAgICBwdWJsaWMgUXVpY2tTdGF0dXNCYXJIZWFkZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKICAgICAgICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwpAQCAtNzYsNiArNzksMTAgQEAKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkZpbmlzaEluZmxhdGUoKSB7CiAgICAgICAgIHN1cGVyLm9uRmluaXNoSW5mbGF0ZSgpOwogCisgICAgICAgIG1FbWVyZ2VuY3lPbmx5ID0gZmluZFZpZXdCeUlkKFIuaWQuaGVhZGVyX2VtZXJnZW5jeV9jYWxsc19vbmx5KTsKKyAgICAgICAgbURhdGVUaW1lVHJhbnNsYXRpb24gPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb24oCisgICAgICAgICAgICAgICAgUi5kaW1lbi5xc19kYXRlX2FuaW1fdHJhbnNsYXRpb24pOworICAgICAgICBtRGF0ZVRpbWVHcm91cCA9IChWaWV3R3JvdXApIGZpbmRWaWV3QnlJZChSLmlkLmRhdGVfdGltZV9ncm91cCk7CiAgICAgICAgIG1FeHBhbmRlZEdyb3VwID0gKFZpZXdHcm91cCkgZmluZFZpZXdCeUlkKFIuaWQuZXhwYW5kZWRfZ3JvdXApOwogCiAgICAgICAgIG1IZWFkZXJRc1BhbmVsID0gKFF1aWNrUVNQYW5lbCkgZmluZFZpZXdCeUlkKFIuaWQucXVpY2tfcXNfcGFuZWwpOwpAQCAtMTI3LDcgKzEzNCw2IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25OZXh0QWxhcm1DaGFuZ2VkKEFsYXJtTWFuYWdlci5BbGFybUNsb2NrSW5mbyBuZXh0QWxhcm0pIHsKICAgICAgICAgbU5leHRBbGFybSA9IG5leHRBbGFybTsKLSAgICAgICAgTG9nLmQoVEFHLCAiR290IGFsYXJtIHVwZGF0ZSAiICsgKG5leHRBbGFybSAhPSBudWxsKSk7CiAgICAgICAgIGlmIChuZXh0QWxhcm0gIT0gbnVsbCkgewogICAgICAgICAgICAgbUFsYXJtU3RhdHVzLnNldFRleHQoS2V5Z3VhcmRTdGF0dXNWaWV3LmZvcm1hdE5leHRBbGFybShnZXRDb250ZXh0KCksIG5leHRBbGFybSkpOwogICAgICAgICB9CkBAIC0xNDEsNiArMTQ3LDkgQEAKICAgICAgICAgbUV4cGFuZGVkR3JvdXAuc2V0VmlzaWJpbGl0eShoZWFkZXJFeHBhbnNpb25GcmFjdGlvbiA+IDAgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklTSUJMRSk7CiAgICAgICAgIG1IZWFkZXJRc1BhbmVsLnNldEFscGhhKDEgLSBoZWFkZXJFeHBhbnNpb25GcmFjdGlvbik7CiAgICAgICAgIG1IZWFkZXJRc1BhbmVsLnNldFZpc2liaWxpdHkoaGVhZGVyRXhwYW5zaW9uRnJhY3Rpb24gPCAxID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOworCisgICAgICAgIG1EYXRlVGltZUdyb3VwLnNldFRyYW5zbGF0aW9uWShoZWFkZXJFeHBhbnNpb25GcmFjdGlvbiAqIG1EYXRlVGltZVRyYW5zbGF0aW9uKTsKKyAgICAgICAgbUVtZXJnZW5jeU9ubHkuc2V0QWxwaGEoaGVhZGVyRXhwYW5zaW9uRnJhY3Rpb24pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldExpc3RlbmluZyhib29sZWFuIGxpc3RlbmluZykgewpAQCAtMTYwLDE2ICsxNjksMTYgQEAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlVmlzaWJpbGl0aWVzKCkgewogICAgICAgICBtQWxhcm1TdGF0dXMuc2V0VmlzaWJpbGl0eShtQWxhcm1TaG93aW5nID8gVmlldy5WSVNJQkxFIDogVmlldy5HT05FKTsKICAgICAgICAgbVFzRGV0YWlsSGVhZGVyLnNldFZpc2liaWxpdHkobUV4cGFuZGVkICYmIG1TaG93aW5nRGV0YWlsID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOworICAgICAgICBtRW1lcmdlbmN5T25seS5zZXRWaXNpYmlsaXR5KG1FeHBhbmRlZCAmJiBtU2hvd0VtZXJnZW5jeUNhbGxzT25seQorICAgICAgICAgICAgICAgID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOwogICAgICAgICBtU2V0dGluZ3NDb250YWluZXIuZmluZFZpZXdCeUlkKFIuaWQudHVuZXJfaWNvbikuc2V0VmlzaWJpbGl0eSgKICAgICAgICAgICAgICAgICBUdW5lclNlcnZpY2UuaXNUdW5lckVuYWJsZWQobUNvbnRleHQpID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEUpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMaXN0ZW5lcnMoKSB7CiAgICAgICAgIGlmIChtTGlzdGVuaW5nKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJMaXN0ZW5pbmcgZm9yIEFsYXJtcyIpOwogICAgICAgICAgICAgbU5leHRBbGFybUNvbnRyb2xsZXIuYWRkU3RhdGVDaGFuZ2VkQ2FsbGJhY2sodGhpcyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJOb3QgbGlzdGVuaW5nIGZvciBBbGFybXMiKTsKICAgICAgICAgICAgIG1OZXh0QWxhcm1Db250cm9sbGVyLnJlbW92ZVN0YXRlQ2hhbmdlZENhbGxiYWNrKHRoaXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTg4LDIzICsxOTcsMTYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHNldHVwSG9zdChRU1RpbGVIb3N0IGhvc3QpIHsKLSAgICAgICAgZmluYWwgUVNUaWxlSG9zdCBteUhvc3QgPSBuZXcgUVNUaWxlSG9zdChob3N0LmdldENvbnRleHQoKSwgaG9zdC5nZXRQaG9uZVN0YXR1c0JhcigpLAotICAgICAgICAgICAgICAgIGhvc3QuZ2V0Qmx1ZXRvb3RoQ29udHJvbGxlcigpLCBob3N0LmdldExvY2F0aW9uQ29udHJvbGxlcigpLAotICAgICAgICAgICAgICAgIGhvc3QuZ2V0Um90YXRpb25Mb2NrQ29udHJvbGxlcigpLCBob3N0LmdldE5ldHdvcmtDb250cm9sbGVyKCksCi0gICAgICAgICAgICAgICAgaG9zdC5nZXRaZW5Nb2RlQ29udHJvbGxlcigpLCBob3N0LmdldEhvdHNwb3RDb250cm9sbGVyKCksCi0gICAgICAgICAgICAgICAgaG9zdC5nZXRDYXN0Q29udHJvbGxlcigpLCBob3N0LmdldEZsYXNobGlnaHRDb250cm9sbGVyKCksCi0gICAgICAgICAgICAgICAgaG9zdC5nZXRVc2VyU3dpdGNoZXJDb250cm9sbGVyKCksIGhvc3QuZ2V0VXNlckluZm9Db250cm9sbGVyKCksCi0gICAgICAgICAgICAgICAgaG9zdC5nZXRLZXlndWFyZE1vbml0b3IoKSwgaG9zdC5nZXRTZWN1cml0eUNvbnRyb2xsZXIoKSwKLSAgICAgICAgICAgICAgICBob3N0LmdldEJhdHRlcnlDb250cm9sbGVyKCkpOworICAgIHB1YmxpYyB2b2lkIHNldHVwSG9zdChmaW5hbCBRU1RpbGVIb3N0IGhvc3QpIHsKKyAgICAgICAgaG9zdC5zZXRIZWFkZXJWaWV3KHRoaXMpOwogICAgICAgICBtSGVhZGVyUXNQYW5lbC5zZXRRU1BhbmVsQW5kSGVhZGVyKG1Rc1BhbmVsLCB0aGlzKTsKLSAgICAgICAgbUhlYWRlclFzUGFuZWwuc2V0SG9zdChteUhvc3QpOworICAgICAgICBtSGVhZGVyUXNQYW5lbC5zZXRIb3N0KGhvc3QpOwogICAgICAgICBtSGVhZGVyUXNQYW5lbC5zZXRNYXhUaWxlcyg1KTsKLSAgICAgICAgbUhlYWRlclFzUGFuZWwuc2V0VGlsZXMobXlIb3N0LmdldFRpbGVzKCkpOwotICAgICAgICBteUhvc3QuYWRkQ2FsbGJhY2sobmV3IFFTVGlsZS5Ib3N0LkNhbGxiYWNrKCkgeworICAgICAgICBtSGVhZGVyUXNQYW5lbC5zZXRUaWxlcyhob3N0LmdldFRpbGVzKCkpOworICAgICAgICBob3N0LmFkZENhbGxiYWNrKG5ldyBRU1RpbGUuSG9zdC5DYWxsYmFjaygpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25UaWxlc0NoYW5nZWQoKSB7Ci0gICAgICAgICAgICAgICAgbUhlYWRlclFzUGFuZWwuc2V0VGlsZXMobXlIb3N0LmdldFRpbGVzKCkpOworICAgICAgICAgICAgICAgIG1IZWFkZXJRc1BhbmVsLnNldFRpbGVzKGhvc3QuZ2V0VGlsZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTI1Niw4ICsyNTgsMTQgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRFbWVyZ2VuY3lDYWxsc09ubHkoYm9vbGVhbiBlbWVyZ2VuY3lPbmx5KSB7Ci0gICAgICAgIC8vIERvbid0IGNhcmUuCisgICAgcHVibGljIHZvaWQgc2V0RW1lcmdlbmN5Q2FsbHNPbmx5KGJvb2xlYW4gc2hvdykgeworICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBzaG93ICE9IG1TaG93RW1lcmdlbmN5Q2FsbHNPbmx5OworICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAgICAgbVNob3dFbWVyZ2VuY3lDYWxsc09ubHkgPSBzaG93OworICAgICAgICAgICAgaWYgKG1FeHBhbmRlZCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZUV2ZXJ5dGhpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgZmluYWwgUVNQYW5lbC5DYWxsYmFjayBtUXNQYW5lbENhbGxiYWNrID0gbmV3IFFTUGFuZWwuQ2FsbGJhY2soKSB7CkBAIC0zMTQsNiArMzIyLDcgQEAKIAogICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU2hvd2luZ0RldGFpbChmaW5hbCBRU1RpbGUuRGV0YWlsQWRhcHRlciBkZXRhaWwpIHsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gc2hvd2luZ0RldGFpbCA9IGRldGFpbCAhPSBudWxsOworICAgICAgICAgICAgdHJhbnNpdGlvbihtRGF0ZVRpbWVHcm91cCwgIXNob3dpbmdEZXRhaWwpOwogICAgICAgICAgICAgdHJhbnNpdGlvbihtRXhwYW5kZWRHcm91cCwgIXNob3dpbmdEZXRhaWwpOwogICAgICAgICAgICAgaWYgKG1BbGFybVNob3dpbmcpIHsKICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKG1BbGFybVN0YXR1cywgIXNob3dpbmdEZXRhaWwpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJIZWFkZXJWaWV3LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhckhlYWRlclZpZXcuamF2YQppbmRleCAzZDIxZjQ0Li5kMmYxY2E5IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhckhlYWRlclZpZXcuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhckhlYWRlclZpZXcuamF2YQpAQCAtNDE5LDcgKzQxOSw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Qb3dlclNhdmVDaGFuZ2VkKCkgeworICAgIHB1YmxpYyB2b2lkIG9uUG93ZXJTYXZlQ2hhbmdlZChib29sZWFuIGlzUG93ZXJTYXZlKSB7CiAgICAgICAgIC8vIGNvdWxkIG5vdCBjYXJlIGxlc3MKICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFySWNvbkNvbnRyb2xsZXIuamF2YQppbmRleCBkNWI5ODBlLi41ZTk4ZWMxIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0Jhckljb25Db250cm9sbGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJJY29uQ29udHJvbGxlci5qYXZhCkBAIC0yMSw5ICsyMSwxMSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Db2xvcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkljb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwpAQCAtMzMsNyArMzUsNiBAQAogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlVmlldzsKIGltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuU3RhdHVzQmFySWNvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLk5vdGlmaWNhdGlvbkNvbG9yVXRpbDsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5CYXR0ZXJ5TWV0ZXJWaWV3OwpAQCAtNTQsNyArNTUsNyBAQAogICogbGltaXRlZCB0bzogbm90aWZpY2F0aW9uIGljb25zLCBzaWduYWwgY2x1c3RlciwgYWRkaXRpb25hbCBzdGF0dXMgaWNvbnMsIGFuZCBjbG9jayBpbiB0aGUgc3RhdHVzCiAgKiBiYXIuCiAgKi8KLXB1YmxpYyBjbGFzcyBTdGF0dXNCYXJJY29uQ29udHJvbGxlciBpbXBsZW1lbnRzIFR1bmFibGUgeworcHVibGljIGNsYXNzIFN0YXR1c0Jhckljb25Db250cm9sbGVyIGV4dGVuZHMgU3RhdHVzQmFySWNvbkxpc3QgaW1wbGVtZW50cyBUdW5hYmxlIHsKIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBERUZBVUxUX1RJTlRfQU5JTUFUSU9OX0RVUkFUSU9OID0gMTIwOwogCkBAIC0xNDYsMjMgKzE0NywyNyBAQAogICAgICAgICB9CiAgICAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIGljb25zLgogICAgICAgICBmb3IgKGludCBpID0gdmlld3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgIHJlbW92ZVN5c3RlbUljb24odmlld3MuZ2V0KGkpLmdldFNsb3QoKSwgaSwgaSk7CisgICAgICAgICAgICByZW1vdmVJY29uKHZpZXdzLmdldChpKS5nZXRTbG90KCkpOwogICAgICAgICB9CiAgICAgICAgIC8vIEFkZCB0aGVtIGFsbCBiYWNrCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmlld3Muc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGFkZFN5c3RlbUljb24odmlld3MuZ2V0KGkpLmdldFNsb3QoKSwgaSwgaSwgdmlld3MuZ2V0KGkpLmdldFN0YXR1c0Jhckljb24oKSk7CisgICAgICAgICAgICBzZXRJY29uKHZpZXdzLmdldChpKS5nZXRTbG90KCksIHZpZXdzLmdldChpKS5nZXRTdGF0dXNCYXJJY29uKCkpOwogICAgICAgICB9Ci0gICAgfTsKKyAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB1cGRhdGVSZXNvdXJjZXMoKSB7CiAgICAgICAgIG1JY29uU2l6ZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLnN0YXR1c19iYXJfaWNvbl9zaXplKTsKICAgICAgICAgbUljb25IUGFkZGluZyA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKICAgICAgICAgICAgICAgICBSLmRpbWVuLnN0YXR1c19iYXJfaWNvbl9wYWRkaW5nKTsKKyAgICAgICAgZGVmaW5lU2xvdHMobUNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nQXJyYXkoCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5hcnJheS5jb25maWdfc3RhdHVzQmFySWNvbnMpKTsKICAgICAgICAgRm9udFNpemVVdGlscy51cGRhdGVGb250U2l6ZShtQ2xvY2ssIFIuZGltZW4uc3RhdHVzX2Jhcl9jbG9ja19zaXplKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBhZGRTeXN0ZW1JY29uKFN0cmluZyBzbG90LCBpbnQgaW5kZXgsIGludCB2aWV3SW5kZXgsIFN0YXR1c0Jhckljb24gaWNvbikgeworICAgIHByaXZhdGUgdm9pZCBhZGRTeXN0ZW1JY29uKGludCBpbmRleCwgU3RhdHVzQmFySWNvbiBpY29uKSB7CisgICAgICAgIFN0cmluZyBzbG90ID0gZ2V0U2xvdChpbmRleCk7CisgICAgICAgIGludCB2aWV3SW5kZXggPSBnZXRWaWV3SW5kZXgoaW5kZXgpOwogICAgICAgICBib29sZWFuIGJsb2NrZWQgPSBtSWNvbkJsYWNrbGlzdC5jb250YWlucyhzbG90KTsKICAgICAgICAgU3RhdHVzQmFySWNvblZpZXcgdmlldyA9IG5ldyBTdGF0dXNCYXJJY29uVmlldyhtQ29udGV4dCwgc2xvdCwgbnVsbCwgYmxvY2tlZCk7CiAgICAgICAgIHZpZXcuc2V0KGljb24pOwpAQCAtMTc1LDggKzE4MCw3NyBAQAogICAgICAgICBhcHBseUljb25UaW50KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdXBkYXRlU3lzdGVtSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4LAotICAgICAgICAgICAgU3RhdHVzQmFySWNvbiBvbGQsIFN0YXR1c0Jhckljb24gaWNvbikgeworICAgIHB1YmxpYyB2b2lkIHNldEljb24oU3RyaW5nIHNsb3QsIGludCByZXNvdXJjZUlkLCBDaGFyU2VxdWVuY2UgY29udGVudERlc2NyaXB0aW9uKSB7CisgICAgICAgIGludCBpbmRleCA9IGdldFNsb3RJbmRleChzbG90KTsKKyAgICAgICAgU3RhdHVzQmFySWNvbiBpY29uID0gZ2V0SWNvbihpbmRleCk7CisgICAgICAgIGlmIChpY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIGljb24gPSBuZXcgU3RhdHVzQmFySWNvbihVc2VySGFuZGxlLlNZU1RFTSwgbUNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgSWNvbi5jcmVhdGVXaXRoUmVzb3VyY2UobUNvbnRleHQsIHJlc291cmNlSWQpLCAwLCAwLCBjb250ZW50RGVzY3JpcHRpb24pOworICAgICAgICAgICAgc2V0SWNvbihzbG90LCBpY29uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGljb24uaWNvbiA9IEljb24uY3JlYXRlV2l0aFJlc291cmNlKG1Db250ZXh0LCByZXNvdXJjZUlkKTsKKyAgICAgICAgICAgIGljb24uY29udGVudERlc2NyaXB0aW9uID0gY29udGVudERlc2NyaXB0aW9uOworICAgICAgICAgICAgaGFuZGxlU2V0KGluZGV4LCBpY29uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldEV4dGVybmFsSWNvbihTdHJpbmcgc2xvdCkgeworICAgICAgICBpbnQgdmlld0luZGV4ID0gZ2V0Vmlld0luZGV4KGdldFNsb3RJbmRleChzbG90KSk7CisgICAgICAgIEltYWdlVmlldyBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBtU3RhdHVzSWNvbnMuZ2V0Q2hpbGRBdCh2aWV3SW5kZXgpOworICAgICAgICBpbWFnZVZpZXcuc2V0U2NhbGVUeXBlKEltYWdlVmlldy5TY2FsZVR5cGUuRklUX0NFTlRFUik7CisgICAgICAgIGltYWdlVmlldy5zZXRBZGp1c3RWaWV3Qm91bmRzKHRydWUpOworICAgICAgICBpbWFnZVZpZXcgPSAoSW1hZ2VWaWV3KSBtU3RhdHVzSWNvbnNLZXlndWFyZC5nZXRDaGlsZEF0KHZpZXdJbmRleCk7CisgICAgICAgIGltYWdlVmlldy5zZXRTY2FsZVR5cGUoSW1hZ2VWaWV3LlNjYWxlVHlwZS5GSVRfQ0VOVEVSKTsKKyAgICAgICAgaW1hZ2VWaWV3LnNldEFkanVzdFZpZXdCb3VuZHModHJ1ZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SWNvbihTdHJpbmcgc2xvdCwgU3RhdHVzQmFySWNvbiBpY29uKSB7CisgICAgICAgIHNldEljb24oZ2V0U2xvdEluZGV4KHNsb3QpLCBpY29uKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVJY29uKFN0cmluZyBzbG90KSB7CisgICAgICAgIGludCBpbmRleCA9IGdldFNsb3RJbmRleChzbG90KTsKKyAgICAgICAgcmVtb3ZlSWNvbihpbmRleCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SWNvblZpc2liaWxpdHkoU3RyaW5nIHNsb3QsIGJvb2xlYW4gdmlzaWJpbGl0eSkgeworICAgICAgICBpbnQgaW5kZXggPSBnZXRTbG90SW5kZXgoc2xvdCk7CisgICAgICAgIFN0YXR1c0Jhckljb24gaWNvbiA9IGdldEljb24oaW5kZXgpOworICAgICAgICBpZiAoaWNvbiA9PSBudWxsIHx8IGljb24udmlzaWJsZSA9PSB2aXNpYmlsaXR5KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWNvbi52aXNpYmxlID0gdmlzaWJpbGl0eTsKKyAgICAgICAgaGFuZGxlU2V0KGluZGV4LCBpY29uKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVJY29uKGludCBpbmRleCkgeworICAgICAgICBpZiAoZ2V0SWNvbihpbmRleCkgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN1cGVyLnJlbW92ZUljb24oaW5kZXgpOworICAgICAgICBpbnQgdmlld0luZGV4ID0gZ2V0Vmlld0luZGV4KGluZGV4KTsKKyAgICAgICAgbVN0YXR1c0ljb25zLnJlbW92ZVZpZXdBdCh2aWV3SW5kZXgpOworICAgICAgICBtU3RhdHVzSWNvbnNLZXlndWFyZC5yZW1vdmVWaWV3QXQodmlld0luZGV4KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRJY29uKGludCBpbmRleCwgU3RhdHVzQmFySWNvbiBpY29uKSB7CisgICAgICAgIGlmIChpY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIHJlbW92ZUljb24oaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gaXNOZXcgPSBnZXRJY29uKGluZGV4KSA9PSBudWxsOworICAgICAgICBzdXBlci5zZXRJY29uKGluZGV4LCBpY29uKTsKKyAgICAgICAgaWYgKGlzTmV3KSB7CisgICAgICAgICAgICBhZGRTeXN0ZW1JY29uKGluZGV4LCBpY29uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhhbmRsZVNldChpbmRleCwgaWNvbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlU2V0KGludCBpbmRleCwgU3RhdHVzQmFySWNvbiBpY29uKSB7CisgICAgICAgIGludCB2aWV3SW5kZXggPSBnZXRWaWV3SW5kZXgoaW5kZXgpOwogICAgICAgICBTdGF0dXNCYXJJY29uVmlldyB2aWV3ID0gKFN0YXR1c0Jhckljb25WaWV3KSBtU3RhdHVzSWNvbnMuZ2V0Q2hpbGRBdCh2aWV3SW5kZXgpOwogICAgICAgICB2aWV3LnNldChpY29uKTsKICAgICAgICAgdmlldyA9IChTdGF0dXNCYXJJY29uVmlldykgbVN0YXR1c0ljb25zS2V5Z3VhcmQuZ2V0Q2hpbGRBdCh2aWV3SW5kZXgpOwpAQCAtMTg0LDExICsyNTgsNiBAQAogICAgICAgICBhcHBseUljb25UaW50KCk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlU3lzdGVtSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4KSB7Ci0gICAgICAgIG1TdGF0dXNJY29ucy5yZW1vdmVWaWV3QXQodmlld0luZGV4KTsKLSAgICAgICAgbVN0YXR1c0ljb25zS2V5Z3VhcmQucmVtb3ZlVmlld0F0KHZpZXdJbmRleCk7Ci0gICAgfQotCiAgICAgcHVibGljIHZvaWQgdXBkYXRlTm90aWZpY2F0aW9uSWNvbnMoTm90aWZpY2F0aW9uRGF0YSBub3RpZmljYXRpb25EYXRhKSB7CiAgICAgICAgIGZpbmFsIExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMgcGFyYW1zID0gbmV3IExpbmVhckxheW91dC5MYXlvdXRQYXJhbXMoCiAgICAgICAgICAgICAgICAgbUljb25TaXplICsgMiptSWNvbkhQYWRkaW5nLCBtUGhvbmVTdGF0dXNCYXIuZ2V0U3RhdHVzQmFySGVpZ2h0KCkpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJJY29uTGlzdC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJJY29uTGlzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDZiNzYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0Jhckljb25MaXN0LmphdmEKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLlN0YXR1c0Jhckljb247CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKK3B1YmxpYyBjbGFzcyBTdGF0dXNCYXJJY29uTGlzdCB7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtU2xvdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBwcml2YXRlIEFycmF5TGlzdDxTdGF0dXNCYXJJY29uPiBtSWNvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgIHB1YmxpYyB2b2lkIGRlZmluZVNsb3RzKFN0cmluZ1tdIHNsb3RzKSB7CisgICAgICAgIGZpbmFsIGludCBOID0gc2xvdHMubGVuZ3RoOworICAgICAgICBmb3IgKGludCBpPTA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgICAgIG1TbG90cy5hZGQoc2xvdHNbaV0pOworICAgICAgICAgICAgbUljb25zLmFkZChudWxsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0U2xvdEluZGV4KFN0cmluZyBzbG90KSB7CisgICAgICAgIGZpbmFsIGludCBOID0gbVNsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgaWYgKHNsb3QuZXF1YWxzKG1TbG90cy5nZXQoaSkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gQXV0byBpbnNlcnQgbmV3IGl0ZW1zIGF0IHRoZSBiZWdpbm5pbmcuCisgICAgICAgIG1TbG90cy5hZGQoMCwgc2xvdCk7CisgICAgICAgIG1JY29ucy5hZGQoMCwgbnVsbCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIG1TbG90cy5zaXplKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0SWNvbihpbnQgaW5kZXgsIFN0YXR1c0Jhckljb24gaWNvbikgeworICAgICAgICBtSWNvbnMuc2V0KGluZGV4LCBpY29uKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVJY29uKGludCBpbmRleCkgeworICAgICAgICBtSWNvbnMuc2V0KGluZGV4LCBudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNsb3QoaW50IGluZGV4KSB7CisgICAgICAgIHJldHVybiBtU2xvdHMuZ2V0KGluZGV4KTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RhdHVzQmFySWNvbiBnZXRJY29uKGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gbUljb25zLmdldChpbmRleCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRWaWV3SW5kZXgoaW50IGluZGV4KSB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworICAgICAgICAgICAgaWYgKG1JY29ucy5nZXQoaSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGR1bXAoUHJpbnRXcml0ZXIgcHcpIHsKKyAgICAgICAgZmluYWwgaW50IE4gPSBtU2xvdHMuc2l6ZSgpOworICAgICAgICBwdy5wcmludGxuKCJJY29uIGxpc3Q6Iik7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKKyAgICAgICAgICAgIHB3LnByaW50ZigiICAlMmQ6ICglcykgJXNcbiIsIGksIG1TbG90cy5nZXQoaSksIG1JY29ucy5nZXQoaSkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJLZXlndWFyZFZpZXdNYW5hZ2VyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIuamF2YQppbmRleCAwNWY2ZTU3Li5mMTRmMGQ0IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3Bob25lL1N0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIuamF2YQpAQCAtMzEsNiArMzEsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmtleWd1YXJkLktleWd1YXJkVXBkYXRlTW9uaXRvcjsKIGltcG9ydCBjb20uYW5kcm9pZC5rZXlndWFyZC5WaWV3TWVkaWF0b3JDYWxsYmFjazsKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIuQ29tbWFuZFF1ZXVlOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5SZW1vdGVJbnB1dENvbnRyb2xsZXI7CiAKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQua2V5Z3VhcmQuS2V5Z3VhcmRIb3N0Vmlldy5PbkRpc21pc3NBY3Rpb247CiAKQEAgLTQwLDcgKzQxLDcgQEAKICAqIHdoaWNoIGlzIGluIHR1cm4sIHJlcG9ydGVkIHRvIHRoaXMgY2xhc3MgYnkgdGhlIGN1cnJlbnQKICAqIHtAbGluayBjb20uYW5kcm9pZC5rZXlndWFyZC5LZXlndWFyZFZpZXdCYXNlfS4KICAqLwotcHVibGljIGNsYXNzIFN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIgeworcHVibGljIGNsYXNzIFN0YXR1c0JhcktleWd1YXJkVmlld01hbmFnZXIgaW1wbGVtZW50cyBSZW1vdGVJbnB1dENvbnRyb2xsZXIuQ2FsbGJhY2sgewogCiAgICAgLy8gV2hlbiBoaWRpbmcgdGhlIEtleWd1YXJkIHdpdGggdGltaW5nIHN1cHBsaWVkIGZyb20gV2luZG93TWFuYWdlciwgYmV0dGVyIGJlIGVhcmx5IHRoYW4gbGF0ZS4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEhJREVfVElNSU5HX0NPUlJFQ1RJT05fTVMgPSAtMyAqIDE2OwpAQCAtNjksMTIgKzcwLDE1IEBACiAgICAgcHJpdmF0ZSBLZXlndWFyZEJvdW5jZXIgbUJvdW5jZXI7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1TaG93aW5nOwogICAgIHByaXZhdGUgYm9vbGVhbiBtT2NjbHVkZWQ7CisgICAgcHJpdmF0ZSBib29sZWFuIG1SZW1vdGVJbnB1dEFjdGl2ZTsKIAogICAgIHByaXZhdGUgYm9vbGVhbiBtRmlyc3RVcGRhdGUgPSB0cnVlOwogICAgIHByaXZhdGUgYm9vbGVhbiBtTGFzdFNob3dpbmc7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0T2NjbHVkZWQ7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0Qm91bmNlclNob3dpbmc7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0Qm91bmNlckRpc21pc3NpYmxlOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGFzdFJlbW90ZUlucHV0QWN0aXZlOworCiAgICAgcHJpdmF0ZSBPbkRpc21pc3NBY3Rpb24gbUFmdGVyS2V5Z3VhcmRHb25lQWN0aW9uOwogICAgIHByaXZhdGUgYm9vbGVhbiBtRGV2aWNlV2lsbFdha2VVcDsKICAgICBwcml2YXRlIGJvb2xlYW4gbURlZmVyU2NyaW1GYWRlT3V0OwpAQCAtMTk5LDYgKzIwMywxMiBAQAogICAgICAgICBtUGhvbmVTdGF0dXNCYXIub25TY3JlZW5UdXJuZWRPbigpOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUmVtb3RlSW5wdXRBY3RpdmUoYm9vbGVhbiBhY3RpdmUpIHsKKyAgICAgICAgbVJlbW90ZUlucHV0QWN0aXZlID0gYWN0aXZlOworICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBvblNjcmVlblR1cm5lZE9mZigpIHsKICAgICAgICAgbVNjcmVlblR1cm5lZE9uID0gZmFsc2U7CiAgICAgfQpAQCAtNDI5LDE4ICs0MzksMjEgQEAKICAgICAgICAgYm9vbGVhbiBvY2NsdWRlZCA9IG1PY2NsdWRlZDsKICAgICAgICAgYm9vbGVhbiBib3VuY2VyU2hvd2luZyA9IG1Cb3VuY2VyLmlzU2hvd2luZygpOwogICAgICAgICBib29sZWFuIGJvdW5jZXJEaXNtaXNzaWJsZSA9ICFtQm91bmNlci5pc0Z1bGxzY3JlZW5Cb3VuY2VyKCk7CisgICAgICAgIGJvb2xlYW4gcmVtb3RlSW5wdXRBY3RpdmUgPSBtUmVtb3RlSW5wdXRBY3RpdmU7CiAKLSAgICAgICAgaWYgKChib3VuY2VyRGlzbWlzc2libGUgfHwgIXNob3dpbmcpICE9IChtTGFzdEJvdW5jZXJEaXNtaXNzaWJsZSB8fCAhbUxhc3RTaG93aW5nKQorICAgICAgICBpZiAoKGJvdW5jZXJEaXNtaXNzaWJsZSB8fCAhc2hvd2luZyB8fCByZW1vdGVJbnB1dEFjdGl2ZSkgIT0KKyAgICAgICAgICAgICAgICAobUxhc3RCb3VuY2VyRGlzbWlzc2libGUgfHwgIW1MYXN0U2hvd2luZyB8fCBtTGFzdFJlbW90ZUlucHV0QWN0aXZlKQogICAgICAgICAgICAgICAgIHx8IG1GaXJzdFVwZGF0ZSkgewotICAgICAgICAgICAgaWYgKGJvdW5jZXJEaXNtaXNzaWJsZSB8fCAhc2hvd2luZykgeworICAgICAgICAgICAgaWYgKGJvdW5jZXJEaXNtaXNzaWJsZSB8fCAhc2hvd2luZyB8fCByZW1vdGVJbnB1dEFjdGl2ZSkgewogICAgICAgICAgICAgICAgIG1Db250YWluZXIuc2V0U3lzdGVtVWlWaXNpYmlsaXR5KHZpcyAmIH5WaWV3LlNUQVRVU19CQVJfRElTQUJMRV9CQUNLKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbUNvbnRhaW5lci5zZXRTeXN0ZW1VaVZpc2liaWxpdHkodmlzIHwgVmlldy5TVEFUVVNfQkFSX0RJU0FCTEVfQkFDSyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBib29sZWFuIG5hdkJhclZpc2libGUgPSAoIShzaG93aW5nICYmICFvY2NsdWRlZCkgfHwgYm91bmNlclNob3dpbmcpOwotICAgICAgICBib29sZWFuIGxhc3ROYXZCYXJWaXNpYmxlID0gKCEobUxhc3RTaG93aW5nICYmICFtTGFzdE9jY2x1ZGVkKSB8fCBtTGFzdEJvdW5jZXJTaG93aW5nKTsKKyAgICAgICAgYm9vbGVhbiBuYXZCYXJWaXNpYmxlID0gKCEoc2hvd2luZyAmJiAhb2NjbHVkZWQpIHx8IGJvdW5jZXJTaG93aW5nIHx8IHJlbW90ZUlucHV0QWN0aXZlKTsKKyAgICAgICAgYm9vbGVhbiBsYXN0TmF2QmFyVmlzaWJsZSA9ICghKG1MYXN0U2hvd2luZyAmJiAhbUxhc3RPY2NsdWRlZCkgfHwgbUxhc3RCb3VuY2VyU2hvd2luZworICAgICAgICAgICAgICAgIHx8IG1MYXN0UmVtb3RlSW5wdXRBY3RpdmUpOwogICAgICAgICBpZiAobmF2QmFyVmlzaWJsZSAhPSBsYXN0TmF2QmFyVmlzaWJsZSB8fCBtRmlyc3RVcGRhdGUpIHsKICAgICAgICAgICAgIGlmIChtUGhvbmVTdGF0dXNCYXIuZ2V0TmF2aWdhdGlvbkJhclZpZXcoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5hdkJhclZpc2libGUpIHsKQEAgLTQ3Nyw2ICs0OTAsNyBAQAogICAgICAgICBtTGFzdE9jY2x1ZGVkID0gb2NjbHVkZWQ7CiAgICAgICAgIG1MYXN0Qm91bmNlclNob3dpbmcgPSBib3VuY2VyU2hvd2luZzsKICAgICAgICAgbUxhc3RCb3VuY2VyRGlzbWlzc2libGUgPSBib3VuY2VyRGlzbWlzc2libGU7CisgICAgICAgIG1MYXN0UmVtb3RlSW5wdXRBY3RpdmUgPSByZW1vdGVJbnB1dEFjdGl2ZTsKIAogICAgICAgICBtUGhvbmVTdGF0dXNCYXIub25LZXlndWFyZFZpZXdNYW5hZ2VyU3RhdGVzVXBkYXRlZCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcGhvbmUvU3RhdHVzQmFyV2luZG93TWFuYWdlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJXaW5kb3dNYW5hZ2VyLmphdmEKaW5kZXggYWJlNTFhYy4uMzgyZGUxOSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJXaW5kb3dNYW5hZ2VyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9waG9uZS9TdGF0dXNCYXJXaW5kb3dNYW5hZ2VyLmphdmEKQEAgLTMwLDYgKzMwLDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5rZXlndWFyZC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLmtleWd1YXJkLktleWd1YXJkVmlld01lZGlhdG9yOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5CYXNlU3RhdHVzQmFyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5SZW1vdGVJbnB1dENvbnRyb2xsZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLlN0YXR1c0JhclN0YXRlOwogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKQEAgLTM5LDcgKzQwLDcgQEAKIC8qKgogICogRW5jYXBzdWxhdGVzIGFsbCBsb2dpYyBmb3IgdGhlIHN0YXR1cyBiYXIgd2luZG93IHN0YXRlIG1hbmFnZW1lbnQuCiAgKi8KLXB1YmxpYyBjbGFzcyBTdGF0dXNCYXJXaW5kb3dNYW5hZ2VyIHsKK3B1YmxpYyBjbGFzcyBTdGF0dXNCYXJXaW5kb3dNYW5hZ2VyIGltcGxlbWVudHMgUmVtb3RlSW5wdXRDb250cm9sbGVyLkNhbGxiYWNrIHsKIAogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKICAgICBwcml2YXRlIGZpbmFsIFdpbmRvd01hbmFnZXIgbVdpbmRvd01hbmFnZXI7CkBAIC0xMzMsNiArMTM0LDEyIEBACiAgICAgICAgICAgICBtTHBDaGFuZ2VkLmZsYWdzIHw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfTk9UX0ZPQ1VTQUJMRTsKICAgICAgICAgICAgIG1McENoYW5nZWQuZmxhZ3MgJj0gfldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTTsKICAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0ZS5yZW1vdGVJbnB1dEFjdGl2ZSkgeworICAgICAgICAgICAgbUxwQ2hhbmdlZC5zb2Z0SW5wdXRNb2RlID0gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9BREpVU1RfUEFOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbUxwQ2hhbmdlZC5zb2Z0SW5wdXRNb2RlID0gV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9BREpVU1RfUkVTSVpFOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFwcGx5SGVpZ2h0KFN0YXRlIHN0YXRlKSB7CkBAIC0yOTIsNyArMjk5LDggQEAKICAgICAgICAgYXBwbHkobUN1cnJlbnRTdGF0ZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgc2V0UmVtb3RlSW5wdXRBY3RpdmUoYm9vbGVhbiByZW1vdGVJbnB1dEFjdGl2ZSkgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uUmVtb3RlSW5wdXRBY3RpdmUoYm9vbGVhbiByZW1vdGVJbnB1dEFjdGl2ZSkgewogICAgICAgICBtQ3VycmVudFN0YXRlLnJlbW90ZUlucHV0QWN0aXZlID0gcmVtb3RlSW5wdXRBY3RpdmU7CiAgICAgICAgIGFwcGx5KG1DdXJyZW50U3RhdGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0JhdHRlcnlDb250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9CYXR0ZXJ5Q29udHJvbGxlci5qYXZhCmluZGV4IDUwNzFkZjAuLmJiM2UxMTYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0JhdHRlcnlDb250cm9sbGVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvQmF0dGVyeUNvbnRyb2xsZXIuamF2YQpAQCAtNzAsOSArNzAsMTQgQEAKICAgICAgICAgcHcucHJpbnQoIiAgbVBvd2VyU2F2ZT0iKTsgcHcucHJpbnRsbihtUG93ZXJTYXZlKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRQb3dlclNhdmVNb2RlKGJvb2xlYW4gcG93ZXJTYXZlKSB7CisgICAgICAgIG1Qb3dlck1hbmFnZXIuc2V0UG93ZXJTYXZlTW9kZShwb3dlclNhdmUpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGFkZFN0YXRlQ2hhbmdlZENhbGxiYWNrKEJhdHRlcnlTdGF0ZUNoYW5nZUNhbGxiYWNrIGNiKSB7CiAgICAgICAgIG1DaGFuZ2VDYWxsYmFja3MuYWRkKGNiKTsKICAgICAgICAgY2Iub25CYXR0ZXJ5TGV2ZWxDaGFuZ2VkKG1MZXZlbCwgbVBsdWdnZWRJbiwgbUNoYXJnaW5nKTsKKyAgICAgICAgY2Iub25Qb3dlclNhdmVDaGFuZ2VkKG1Qb3dlclNhdmUpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlbW92ZVN0YXRlQ2hhbmdlZENhbGxiYWNrKEJhdHRlcnlTdGF0ZUNoYW5nZUNhbGxiYWNrIGNiKSB7CkBAIC0xNTgsMTIgKzE2MywxMiBAQAogICAgIHByaXZhdGUgdm9pZCBmaXJlUG93ZXJTYXZlQ2hhbmdlZCgpIHsKICAgICAgICAgZmluYWwgaW50IE4gPSBtQ2hhbmdlQ2FsbGJhY2tzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgICAgIG1DaGFuZ2VDYWxsYmFja3MuZ2V0KGkpLm9uUG93ZXJTYXZlQ2hhbmdlZCgpOworICAgICAgICAgICAgbUNoYW5nZUNhbGxiYWNrcy5nZXQoaSkub25Qb3dlclNhdmVDaGFuZ2VkKG1Qb3dlclNhdmUpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIGludGVyZmFjZSBCYXR0ZXJ5U3RhdGVDaGFuZ2VDYWxsYmFjayB7CiAgICAgICAgIHZvaWQgb25CYXR0ZXJ5TGV2ZWxDaGFuZ2VkKGludCBsZXZlbCwgYm9vbGVhbiBwbHVnZ2VkSW4sIGJvb2xlYW4gY2hhcmdpbmcpOwotICAgICAgICB2b2lkIG9uUG93ZXJTYXZlQ2hhbmdlZCgpOworICAgICAgICB2b2lkIG9uUG93ZXJTYXZlQ2hhbmdlZChib29sZWFuIGlzUG93ZXJTYXZlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9CcmlnaHRuZXNzTWlycm9yQ29udHJvbGxlci5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvQnJpZ2h0bmVzc01pcnJvckNvbnRyb2xsZXIuamF2YQppbmRleCAwMzQwOTg0Ni4uNGFlMDMyMSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvQnJpZ2h0bmVzc01pcnJvckNvbnRyb2xsZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9CcmlnaHRuZXNzTWlycm9yQ29udHJvbGxlci5qYXZhCkBAIC0zNSwyNSArMzUsMjUgQEAKIAogICAgIHByaXZhdGUgZmluYWwgU2NyaW1WaWV3IG1TY3JpbUJlaGluZDsKICAgICBwcml2YXRlIGZpbmFsIFZpZXcgbUJyaWdodG5lc3NNaXJyb3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBWaWV3IG1QYW5lbEhvbGRlcjsKKyAgICBwcml2YXRlIGZpbmFsIFZpZXcgbU5vdGlmaWNhdGlvblBhbmVsOwogICAgIHByaXZhdGUgZmluYWwgaW50W10gbUludDJDYWNoZSA9IG5ldyBpbnRbMl07CiAKICAgICBwdWJsaWMgQnJpZ2h0bmVzc01pcnJvckNvbnRyb2xsZXIoU3RhdHVzQmFyV2luZG93VmlldyBzdGF0dXNCYXJXaW5kb3cpIHsKICAgICAgICAgbVNjcmltQmVoaW5kID0gKFNjcmltVmlldykgc3RhdHVzQmFyV2luZG93LmZpbmRWaWV3QnlJZChSLmlkLnNjcmltX2JlaGluZCk7CiAgICAgICAgIG1CcmlnaHRuZXNzTWlycm9yID0gc3RhdHVzQmFyV2luZG93LmZpbmRWaWV3QnlJZChSLmlkLmJyaWdodG5lc3NfbWlycm9yKTsKLSAgICAgICAgbVBhbmVsSG9sZGVyID0gc3RhdHVzQmFyV2luZG93LmZpbmRWaWV3QnlJZChSLmlkLnBhbmVsX2hvbGRlcik7CisgICAgICAgIG1Ob3RpZmljYXRpb25QYW5lbCA9IHN0YXR1c0JhcldpbmRvdy5maW5kVmlld0J5SWQoUi5pZC5ub3RpZmljYXRpb25fcGFuZWwpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNob3dNaXJyb3IoKSB7CiAgICAgICAgIG1CcmlnaHRuZXNzTWlycm9yLnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKTsKICAgICAgICAgbVNjcmltQmVoaW5kLmFuaW1hdGVWaWV3QWxwaGEoMC4wZiwgVFJBTlNJVElPTl9EVVJBVElPTl9PVVQsIFBob25lU3RhdHVzQmFyLkFMUEhBX09VVCk7Ci0gICAgICAgIG91dEFuaW1hdGlvbihtUGFuZWxIb2xkZXIuYW5pbWF0ZSgpKQorICAgICAgICBvdXRBbmltYXRpb24obU5vdGlmaWNhdGlvblBhbmVsLmFuaW1hdGUoKSkKICAgICAgICAgICAgICAgICAud2l0aExheWVyKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaGlkZU1pcnJvcigpIHsKICAgICAgICAgbVNjcmltQmVoaW5kLmFuaW1hdGVWaWV3QWxwaGEoMS4wZiwgVFJBTlNJVElPTl9EVVJBVElPTl9JTiwgUGhvbmVTdGF0dXNCYXIuQUxQSEFfSU4pOwotICAgICAgICBpbkFuaW1hdGlvbihtUGFuZWxIb2xkZXIuYW5pbWF0ZSgpKQorICAgICAgICBpbkFuaW1hdGlvbihtTm90aWZpY2F0aW9uUGFuZWwuYW5pbWF0ZSgpKQogICAgICAgICAgICAgICAgIC53aXRoTGF5ZXIoKQogICAgICAgICAgICAgICAgIC53aXRoRW5kQWN0aW9uKG5ldyBSdW5uYWJsZSgpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE1hbmFnZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L0hlYWRzVXBNYW5hZ2VyLmphdmEKaW5kZXggNWNmZDE3NC4uYjM4YzNmZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvSGVhZHNVcE1hbmFnZXIuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9IZWFkc1VwTWFuYWdlci5qYXZhCkBAIC0zNzgsMjMgKzM3OCwyMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChtSGFzUGlubmVkTm90aWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBpbnQgbWluWCA9IEludGVnZXIuTUFYX1ZBTFVFOworICAgICAgICAgICAgaW50IG1pblggPSAwOwogICAgICAgICAgICAgaW50IG1heFggPSAwOwotICAgICAgICAgICAgaW50IG1pblkgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKICAgICAgICAgICAgIGludCBtYXhZID0gMDsKICAgICAgICAgICAgIGZvciAoSGVhZHNVcEVudHJ5IGVudHJ5IDogbVNvcnRlZEVudHJpZXMpIHsKICAgICAgICAgICAgICAgICBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93IHJvdyA9IGVudHJ5LmVudHJ5LnJvdzsKICAgICAgICAgICAgICAgICBpZiAocm93LmlzUGlubmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcm93LmdldExvY2F0aW9uT25TY3JlZW4obVRtcFR3b0FycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIG1UbXBUd29BcnJheVswXSk7Ci0gICAgICAgICAgICAgICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIG1UbXBUd29BcnJheVswXSArIHJvdy5nZXRXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJvdy5nZXRIZWFkc1VwSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBtaW5YID0gbVRtcFR3b0FycmF5WzBdOworICAgICAgICAgICAgICAgICAgICBtYXhYID0gbVRtcFR3b0FycmF5WzBdICsgcm93LmdldFdpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIG1heFkgPSByb3cuZ2V0SGVhZHNVcEhlaWdodCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGluZm8uc2V0VG91Y2hhYmxlSW5zZXRzKFZpZXdUcmVlT2JzZXJ2ZXIuSW50ZXJuYWxJbnNldHNJbmZvLlRPVUNIQUJMRV9JTlNFVFNfUkVHSU9OKTsKLSAgICAgICAgICAgIGluZm8udG91Y2hhYmxlUmVnaW9uLnNldChtaW5YLCBtaW5ZLCBtYXhYLCBtYXhZICsgbU5vdGlmaWNhdGlvbnNUb3BQYWRkaW5nKTsKKyAgICAgICAgICAgIGluZm8udG91Y2hhYmxlUmVnaW9uLnNldChtaW5YLCAwLCBtYXhYLCBtYXhZICsgbU5vdGlmaWNhdGlvbnNUb3BQYWRkaW5nKTsKICAgICAgICAgfSBlbHNlIGlmIChtSGVhZHNVcEdvaW5nQXdheSB8fCBtV2FpdGluZ09uQ29sbGFwc2VXaGVuR29pbmdBd2F5KSB7CiAgICAgICAgICAgICBpbmZvLnNldFRvdWNoYWJsZUluc2V0cyhWaWV3VHJlZU9ic2VydmVyLkludGVybmFsSW5zZXRzSW5mby5UT1VDSEFCTEVfSU5TRVRTX1JFR0lPTik7CiAgICAgICAgICAgICBpbmZvLnRvdWNoYWJsZVJlZ2lvbi5zZXQoMCwgMCwgbVN0YXR1c0JhcldpbmRvd1ZpZXcuZ2V0V2lkdGgoKSwgbVN0YXR1c0JhckhlaWdodCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Nb2JpbGVTaWduYWxDb250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Nb2JpbGVTaWduYWxDb250cm9sbGVyLmphdmEKaW5kZXggYjY1YmY0My4uYWQ4ZTNiZCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTW9iaWxlU2lnbmFsQ29udHJvbGxlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L01vYmlsZVNpZ25hbENvbnRyb2xsZXIuamF2YQpAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICArICIgZGF0YVN0YXRlPSIgKyBzdGF0ZS5nZXREYXRhUmVnU3RhdGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtU2VydmljZVN0YXRlID0gc3RhdGU7CisgICAgICAgICAgICBtRGF0YU5ldFR5cGUgPSBzdGF0ZS5nZXREYXRhTmV0d29ya1R5cGUoKTsKICAgICAgICAgICAgIHVwZGF0ZVRlbGVwaG9ueSgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L1JlbW90ZUlucHV0Vmlldy5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvUmVtb3RlSW5wdXRWaWV3LmphdmEKaW5kZXggMjJjMGNiOS4uNjFhOTg1MSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvUmVtb3RlSW5wdXRWaWV3LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvUmVtb3RlSW5wdXRWaWV3LmphdmEKQEAgLTI2LDggKzI2LDExIEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuUmVtb3RlSW5wdXQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnRleHQuRWRpdGFibGU7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7CkBAIC00OSw3ICs1Miw3IEBACiAvKioKICAqIEhvc3QgZm9yIHRoZSByZW1vdGUgaW5wdXQuCiAgKi8KLXB1YmxpYyBjbGFzcyBSZW1vdGVJbnB1dFZpZXcgZXh0ZW5kcyBMaW5lYXJMYXlvdXQgaW1wbGVtZW50cyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciB7CitwdWJsaWMgY2xhc3MgUmVtb3RlSW5wdXRWaWV3IGV4dGVuZHMgTGluZWFyTGF5b3V0IGltcGxlbWVudHMgVmlldy5PbkNsaWNrTGlzdGVuZXIsIFRleHRXYXRjaGVyIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUmVtb3RlSW5wdXQiOwogCkBAIC0xMDEsNiArMTA0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIG1FZGl0VGV4dC5zZXRPbkNsaWNrTGlzdGVuZXIodGhpcyk7CisgICAgICAgIG1FZGl0VGV4dC5hZGRUZXh0Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwogICAgICAgICBtRWRpdFRleHQuc2V0SW5uZXJGb2N1c2FibGUoZmFsc2UpOwogICAgICAgICBtRWRpdFRleHQubURlZm9jdXNMaXN0ZW5lciA9IHRoaXM7CiAgICAgfQpAQCAtMTE1LDYgKzExOSw4IEBACiAgICAgICAgIG1FZGl0VGV4dC5zZXRFbmFibGVkKGZhbHNlKTsKICAgICAgICAgbVNlbmRCdXR0b24uc2V0VmlzaWJpbGl0eShJTlZJU0lCTEUpOwogICAgICAgICBtUHJvZ3Jlc3NCYXIuc2V0VmlzaWJpbGl0eShWSVNJQkxFKTsKKyAgICAgICAgbUNvbnRyb2xsZXIucmVtb3ZlUmVtb3RlSW5wdXQobUVudHJ5KTsKKyAgICAgICAgbUVkaXRUZXh0Lm1TaG93SW1lT25JbnB1dENvbm5lY3Rpb24gPSBmYWxzZTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbVBlbmRpbmdJbnRlbnQuc2VuZChtQ29udGV4dCwgMCwgZmlsbEluSW50ZW50KTsKQEAgLTE2OSwxMiArMTc1LDQ2IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZm9jdXMoKSB7Ci0gICAgICAgIG1FZGl0VGV4dC5zZXRJbm5lckZvY3VzYWJsZSh0cnVlKTsKICAgICAgICAgbUNvbnRyb2xsZXIuYWRkUmVtb3RlSW5wdXQobUVudHJ5KTsKKyAgICAgICAgbUVkaXRUZXh0LnNldElubmVyRm9jdXNhYmxlKHRydWUpOwogICAgICAgICBtRWRpdFRleHQubVNob3dJbWVPbklucHV0Q29ubmVjdGlvbiA9IHRydWU7CiAgICAgICAgIG1FZGl0VGV4dC5zZXRUZXh0KG1FbnRyeS5yZW1vdGVJbnB1dFRleHQpOwogICAgICAgICBtRWRpdFRleHQuc2V0U2VsZWN0aW9uKG1FZGl0VGV4dC5nZXRUZXh0KCkubGVuZ3RoKCkpOwogICAgICAgICBtRWRpdFRleHQucmVxdWVzdEZvY3VzKCk7CisgICAgICAgIHVwZGF0ZVNlbmRCdXR0b24oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBvbk5vdGlmaWNhdGlvblVwZGF0ZSgpIHsKKyAgICAgICAgYm9vbGVhbiBzZW5kaW5nID0gbVByb2dyZXNzQmFyLmdldFZpc2liaWxpdHkoKSA9PSBWSVNJQkxFOworCisgICAgICAgIGlmIChzZW5kaW5nKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgY2FtZSBpbiBhZnRlciB3ZSBzZW50IHRoZSByZXBseSwgdGltZSB0byByZXNldC4KKyAgICAgICAgICAgIHJlc2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcmVzZXQoKSB7CisgICAgICAgIG1FZGl0VGV4dC5nZXRUZXh0KCkuY2xlYXIoKTsKKyAgICAgICAgbUVkaXRUZXh0LnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIG1TZW5kQnV0dG9uLnNldFZpc2liaWxpdHkoVklTSUJMRSk7CisgICAgICAgIG1Qcm9ncmVzc0Jhci5zZXRWaXNpYmlsaXR5KElOVklTSUJMRSk7CisgICAgICAgIHVwZGF0ZVNlbmRCdXR0b24oKTsKKyAgICAgICAgb25EZWZvY3VzKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlbmRCdXR0b24oKSB7CisgICAgICAgIG1TZW5kQnV0dG9uLnNldEVuYWJsZWQobUVkaXRUZXh0LmdldFRleHQoKS5sZW5ndGgoKSAhPSAwKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBiZWZvcmVUZXh0Q2hhbmdlZChDaGFyU2VxdWVuY2UgcywgaW50IHN0YXJ0LCBpbnQgY291bnQsIGludCBhZnRlcikge30KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGJlZm9yZSwgaW50IGNvdW50KSB7fQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYWZ0ZXJUZXh0Q2hhbmdlZChFZGl0YWJsZSBzKSB7CisgICAgICAgIHVwZGF0ZVNlbmRCdXR0b24oKTsKICAgICB9CiAKICAgICAvKioKQEAgLTIxOCw2ICsyNTgsMjAgQEAKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiByZXF1ZXN0UmVjdGFuZ2xlT25TY3JlZW4oUmVjdCByKSB7CisgICAgICAgICAgICByLnRvcCA9IG1TY3JvbGxZOworICAgICAgICAgICAgci5ib3R0b20gPSBtU2Nyb2xsWSArIChtQm90dG9tIC0gbVRvcCk7CisgICAgICAgICAgICByZXR1cm4gc3VwZXIucmVxdWVzdFJlY3RhbmdsZU9uU2NyZWVuKHIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGdldEZvY3VzZWRSZWN0KFJlY3QgcikgeworICAgICAgICAgICAgc3VwZXIuZ2V0Rm9jdXNlZFJlY3Qocik7CisgICAgICAgICAgICByLnRvcCA9IG1TY3JvbGxZOworICAgICAgICAgICAgci5ib3R0b20gPSBtU2Nyb2xsWSArIChtQm90dG9tIC0gbVRvcCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIGJvb2xlYW4gb25LZXlQcmVJbWUoaW50IGtleUNvZGUsIEtleUV2ZW50IGV2ZW50KSB7CiAgICAgICAgICAgICBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0JBQ0sgJiYgZXZlbnQuZ2V0QWN0aW9uKCkgPT0gS2V5RXZlbnQuQUNUSU9OX1VQKSB7CiAgICAgICAgICAgICAgICAgZGVmb2N1c0lmTmVlZGVkKCk7CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Vc2VyU3dpdGNoZXJDb250cm9sbGVyLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9Vc2VyU3dpdGNoZXJDb250cm9sbGVyLmphdmEKaW5kZXggYjAxMDc2MS4uZjNhMzU1NCAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvVXNlclN3aXRjaGVyQ29udHJvbGxlci5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L1VzZXJTd2l0Y2hlckNvbnRyb2xsZXIuamF2YQpAQCAtNjQzLDggKzY0Myw4IEBACiAgICAgICAgIHByaXZhdGUgZmluYWwgSW50ZW50IFVTRVJfU0VUVElOR1NfSU5URU5UID0gbmV3IEludGVudCgiYW5kcm9pZC5zZXR0aW5ncy5VU0VSX1NFVFRJTkdTIik7CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0VGl0bGUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfdXNlcl90aXRsZTsKKyAgICAgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRUaXRsZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucXVpY2tfc2V0dGluZ3NfdXNlcl90aXRsZSk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIuamF2YQppbmRleCA5MDE1YTBlLi5iYWNjZDJjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL05vdGlmaWNhdGlvbkNoaWxkcmVuQ29udGFpbmVyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9Ob3RpZmljYXRpb25DaGlsZHJlbkNvbnRhaW5lci5qYXZhCkBAIC0yMyw5ICsyMywxMSBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlZpZXdJbnZlcnRIZWxwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLkV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3c7CiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLm5vdGlmaWNhdGlvbi5IeWJyaWROb3RpZmljYXRpb25WaWV3OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5ub3RpZmljYXRpb24uSHlicmlkTm90aWZpY2F0aW9uVmlld01hbmFnZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLk5vdGlmaWNhdGlvblBhbmVsVmlldzsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC00OSwxMCArNTEsMTIgQEAKICAgICBwcml2YXRlIGZpbmFsIGludCBtTm90aWZpY2F0b25Ub3BQYWRkaW5nOwogICAgIHByaXZhdGUgZmluYWwgSHlicmlkTm90aWZpY2F0aW9uVmlld01hbmFnZXIgbUh5YnJpZFZpZXdNYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgZmxvYXQgbUNvbGxhcHNlZEJvdHRvbXBhZGRpbmc7CisgICAgcHJpdmF0ZSBWaWV3SW52ZXJ0SGVscGVyIG1PdmVyZmxvd0ludmVydEhlbHBlcjsKICAgICBwcml2YXRlIGJvb2xlYW4gbUNoaWxkcmVuRXhwYW5kZWQ7CiAgICAgcHJpdmF0ZSBFeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93IG1Ob3RpZmljYXRpb25QYXJlbnQ7CiAgICAgcHJpdmF0ZSBIeWJyaWROb3RpZmljYXRpb25WaWV3IG1Hcm91cE92ZXJmbG93Q29udGFpbmVyOwogICAgIHByaXZhdGUgVmlld1N0YXRlIG1Hcm91cE92ZXJGbG93U3RhdGU7CisgICAgcHJpdmF0ZSBpbnQgbVJlYWxIZWlnaHQ7CiAKICAgICBwdWJsaWMgTm90aWZpY2F0aW9uQ2hpbGRyZW5Db250YWluZXIoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRoaXMoY29udGV4dCwgbnVsbCk7CkBAIC04Nyw3ICs5MSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsLCBpbnQgdCwgaW50IHIsIGludCBiKSB7Ci0gICAgICAgIGludCBjaGlsZENvdW50ID0gbUNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgaW50IGNoaWxkQ291bnQgPSBNYXRoLm1pbihtQ2hpbGRyZW4uc2l6ZSgpLCBOVU1CRVJfT0ZfQ0hJTERSRU5fV0hFTl9DSElMRFJFTl9FWFBBTkRFRCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICBWaWV3IGNoaWxkID0gbUNoaWxkcmVuLmdldChpKTsKICAgICAgICAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5HT05FKSB7CkBAIC0xMDgsMTQgKzExMiwxNCBAQAogICAgICAgICBpbnQgaGVpZ2h0TW9kZSA9IE1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0TWVhc3VyZVNwZWMpOwogICAgICAgICBib29sZWFuIGhhc0ZpeGVkSGVpZ2h0ID0gaGVpZ2h0TW9kZSA9PSBNZWFzdXJlU3BlYy5FWEFDVExZOwogICAgICAgICBib29sZWFuIGlzSGVpZ2h0TGltaXRlZCA9IGhlaWdodE1vZGUgPT0gTWVhc3VyZVNwZWMuQVRfTU9TVDsKKyAgICAgICAgaW50IHNpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKICAgICAgICAgaWYgKGhhc0ZpeGVkSGVpZ2h0IHx8IGlzSGVpZ2h0TGltaXRlZCkgewotICAgICAgICAgICAgaW50IHNpemUgPSBNZWFzdXJlU3BlYy5nZXRTaXplKGhlaWdodE1lYXN1cmVTcGVjKTsKICAgICAgICAgICAgIG93bk1heEhlaWdodCA9IE1hdGgubWluKG93bk1heEhlaWdodCwgc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgaW50IG5ld0hlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMob3duTWF4SGVpZ2h0LCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKICAgICAgICAgaW50IGRpdmlkZXJIZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKG1EaXZpZGVySGVpZ2h0LCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKICAgICAgICAgaW50IGhlaWdodCA9IG1Ob3RpZmljYXRpb25IZWFkZXJIZWlnaHQgKyBtTm90aWZpY2F0b25Ub3BQYWRkaW5nOwotICAgICAgICBpbnQgY2hpbGRDb3VudCA9IG1DaGlsZHJlbi5zaXplKCk7CisgICAgICAgIGludCBjaGlsZENvdW50ID0gTWF0aC5taW4obUNoaWxkcmVuLnNpemUoKSwgTlVNQkVSX09GX0NISUxEUkVOX1dIRU5fQ0hJTERSRU5fRVhQQU5ERUQpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7IGkrKykgewogICAgICAgICAgICAgVmlldyBjaGlsZCA9IG1DaGlsZHJlbi5nZXQoaSk7CiAgICAgICAgICAgICBjaGlsZC5tZWFzdXJlKHdpZHRoTWVhc3VyZVNwZWMsIG5ld0hlaWdodFNwZWMpOwpAQCAtMTMwLDkgKzEzNCwxOSBAQAogICAgICAgICBpZiAobUdyb3VwT3ZlcmZsb3dDb250YWluZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgbUdyb3VwT3ZlcmZsb3dDb250YWluZXIubWVhc3VyZSh3aWR0aE1lYXN1cmVTcGVjLCBuZXdIZWlnaHRTcGVjKTsKICAgICAgICAgfQorICAgICAgICBtUmVhbEhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgaWYgKGhlaWdodE1vZGUgIT0gTWVhc3VyZVNwZWMuVU5TUEVDSUZJRUQpIHsKKyAgICAgICAgICAgIGhlaWdodCA9IE1hdGgubWluKGhlaWdodCwgc2l6ZSk7CisgICAgICAgIH0KICAgICAgICAgc2V0TWVhc3VyZWREaW1lbnNpb24od2lkdGgsIGhlaWdodCk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gcG9pbnRJblZpZXcoZmxvYXQgbG9jYWxYLCBmbG9hdCBsb2NhbFksIGZsb2F0IHNsb3ApIHsKKyAgICAgICAgcmV0dXJuIGxvY2FsWCA+PSAtc2xvcCAmJiBsb2NhbFkgPj0gLXNsb3AgJiYgbG9jYWxYIDwgKChtUmlnaHQgLSBtTGVmdCkgKyBzbG9wKSAmJgorICAgICAgICAgICAgICAgIGxvY2FsWSA8IChtUmVhbEhlaWdodCArIHNsb3ApOworICAgIH0KKwogICAgIC8qKgogICAgICAqIEFkZCBhIGNoaWxkIG5vdGlmaWNhdGlvbiB0byB0aGlzIHZpZXcuCiAgICAgICoKQEAgLTE3MiwxMiArMTg2LDE3IEBACiAgICAgICAgIGlmIChoYXNPdmVyZmxvdykgewogICAgICAgICAgICAgbUdyb3VwT3ZlcmZsb3dDb250YWluZXIgPSBtSHlicmlkVmlld01hbmFnZXIuYmluZEZyb21Ob3RpZmljYXRpb25Hcm91cCgKICAgICAgICAgICAgICAgICAgICAgbUdyb3VwT3ZlcmZsb3dDb250YWluZXIsIG1DaGlsZHJlbiwgbGFzdFZpc2libGVJbmRleCArIDEpOworICAgICAgICAgICAgaWYgKG1PdmVyZmxvd0ludmVydEhlbHBlciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbU92ZXJmbG93SW52ZXJ0SGVscGVyPSBuZXcgVmlld0ludmVydEhlbHBlcihtR3JvdXBPdmVyZmxvd0NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblBhbmVsVmlldy5ET1pFX0FOSU1BVElPTl9EVVJBVElPTik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobUdyb3VwT3ZlckZsb3dTdGF0ZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgbUdyb3VwT3ZlckZsb3dTdGF0ZSA9IG5ldyBWaWV3U3RhdGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChtR3JvdXBPdmVyZmxvd0NvbnRhaW5lciAhPSBudWxsKSB7CiAgICAgICAgICAgICByZW1vdmVWaWV3KG1Hcm91cE92ZXJmbG93Q29udGFpbmVyKTsKICAgICAgICAgICAgIG1Hcm91cE92ZXJmbG93Q29udGFpbmVyID0gbnVsbDsKKyAgICAgICAgICAgIG1PdmVyZmxvd0ludmVydEhlbHBlciA9IG51bGw7CiAgICAgICAgICAgICBtR3JvdXBPdmVyRmxvd1N0YXRlID0gbnVsbDsKICAgICAgICAgfQogICAgIH0KQEAgLTMyNCw3ICszNDMsNyBAQAogICAgICAgICBpZiAoIWxpa2VDb2xsYXBzZWQgJiYgKG1DaGlsZHJlbkV4cGFuZGVkIHx8IG1Ob3RpZmljYXRpb25QYXJlbnQuaXNVc2VyTG9ja2VkKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVNQkVSX09GX0NISUxEUkVOX1dIRU5fQ0hJTERSRU5fRVhQQU5ERUQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25QYXJlbnQuaXNFeHBhbmRlZCgpKSB7CisgICAgICAgIGlmIChtTm90aWZpY2F0aW9uUGFyZW50LmlzRXhwYW5kZWQoKSB8fCBtTm90aWZpY2F0aW9uUGFyZW50LmlzSGVhZHNVcCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVNQkVSX09GX0NISUxEUkVOX1dIRU5fU1lTVEVNX0VYUEFOREVEOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOVU1CRVJfT0ZfQ0hJTERSRU5fV0hFTl9DT0xMQVBTRUQ7CkBAIC0zODcsMTYgKzQwNiwxNyBAQAogICAgICAgICAgICAgYm9vbGVhbiB3aXRoRGVsYXlzLCBsb25nIGJhc2VEZWxheSwgbG9uZyBkdXJhdGlvbikgewogICAgICAgICBpbnQgY2hpbGRDb3VudCA9IG1DaGlsZHJlbi5zaXplKCk7CiAgICAgICAgIFZpZXdTdGF0ZSB0bXBTdGF0ZSA9IG5ldyBWaWV3U3RhdGUoKTsKLSAgICAgICAgaW50IG5vdEdvbmVJbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRDb3VudDsgaSsrKSB7CisgICAgICAgIGludCBkZWxheUluZGV4ID0gMDsKKyAgICAgICAgaW50IG1heEFsbG93Q2hpbGRDb3VudCA9IGdldE1heEFsbG93ZWRWaXNpYmxlQ2hpbGRyZW4odHJ1ZSAvKiBsaWtlQ29sbGFwc2VkICovKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgRXhwYW5kYWJsZU5vdGlmaWNhdGlvblJvdyBjaGlsZCA9IG1DaGlsZHJlbi5nZXQoaSk7CiAgICAgICAgICAgICBTdGFja1ZpZXdTdGF0ZSB2aWV3U3RhdGUgPSBzdGF0ZS5nZXRWaWV3U3RhdGVGb3JWaWV3KGNoaWxkKTsKICAgICAgICAgICAgIGludCBkaWZmZXJlbmNlID0gTWF0aC5taW4oU3RhY2tTdGF0ZUFuaW1hdG9yLkRFTEFZX0VGRkVDVF9NQVhfSU5ERVhfRElGRkVSRU5DRV9DSElMRFJFTiwKLSAgICAgICAgICAgICAgICAgICAgbm90R29uZUluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGRlbGF5SW5kZXgpOwogICAgICAgICAgICAgbG9uZyBkZWxheSA9IHdpdGhEZWxheXMKICAgICAgICAgICAgICAgICAgICAgPyBkaWZmZXJlbmNlICogU3RhY2tTdGF0ZUFuaW1hdG9yLkFOSU1BVElPTl9ERUxBWV9QRVJfRUxFTUVOVF9FWFBBTkRfQ0hJTERSRU4KICAgICAgICAgICAgICAgICAgICAgOiAwOwotICAgICAgICAgICAgZGVsYXkgKz0gYmFzZURlbGF5OworICAgICAgICAgICAgZGVsYXkgPSAobG9uZykgKGRlbGF5ICogKG1DaGlsZHJlbkV4cGFuZGVkID8gMS4wZiA6IDAuNWYpICsgYmFzZURlbGF5KTsKICAgICAgICAgICAgIHN0YXRlQW5pbWF0b3Iuc3RhcnRTdGFja0FuaW1hdGlvbnMoY2hpbGQsIHZpZXdTdGF0ZSwgc3RhdGUsIC0xLCBkZWxheSk7CiAKICAgICAgICAgICAgIC8vIGxheW91dCB0aGUgZGl2aWRlcgpAQCAtNDA1LDExICs0MjUsMTMgQEAKICAgICAgICAgICAgIHRtcFN0YXRlLnlUcmFuc2xhdGlvbiA9IHZpZXdTdGF0ZS55VHJhbnNsYXRpb24gLSBtRGl2aWRlckhlaWdodDsKICAgICAgICAgICAgIHRtcFN0YXRlLmFscGhhID0gbUNoaWxkcmVuRXhwYW5kZWQgJiYgdmlld1N0YXRlLmFscGhhICE9IDAgPyAwLjVmIDogMDsKICAgICAgICAgICAgIHN0YXRlQW5pbWF0b3Iuc3RhcnRWaWV3QW5pbWF0aW9ucyhkaXZpZGVyLCB0bXBTdGF0ZSwgZGVsYXksIGR1cmF0aW9uKTsKLQotICAgICAgICAgICAgbm90R29uZUluZGV4Kys7CisgICAgICAgICAgICBpZiAoaSA8IG1heEFsbG93Q2hpbGRDb3VudCkgeworICAgICAgICAgICAgICAgIGRlbGF5SW5kZXgrKzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobUdyb3VwT3ZlcmZsb3dDb250YWluZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgc3RhdGVBbmltYXRvci5zdGFydFZpZXdBbmltYXRpb25zKG1Hcm91cE92ZXJmbG93Q29udGFpbmVyLCBtR3JvdXBPdmVyRmxvd1N0YXRlLCAtMSwgMCk7CisgICAgICAgICAgICBzdGF0ZUFuaW1hdG9yLnN0YXJ0Vmlld0FuaW1hdGlvbnMobUdyb3VwT3ZlcmZsb3dDb250YWluZXIsIG1Hcm91cE92ZXJGbG93U3RhdGUsCisgICAgICAgICAgICAgICAgICAgIGJhc2VEZWxheSwgZHVyYXRpb24pOwogICAgICAgICB9CiAgICAgfQogCkBAIC00NDEsNiArNDYzLDE2IEBACiAgICAgfQogCiAgICAgcHVibGljIGludCBnZXRNaW5IZWlnaHQoKSB7CisgICAgICAgIHJldHVybiBnZXRJbnRyaW5zaWNIZWlnaHQoTlVNQkVSX09GX0NISUxEUkVOX1dIRU5fQ09MTEFQU0VEKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldE1pbkV4cGFuZEhlaWdodCgpIHsKICAgICAgICAgcmV0dXJuIGdldEludHJpbnNpY0hlaWdodChnZXRNYXhBbGxvd2VkVmlzaWJsZUNoaWxkcmVuKHRydWUgLyogZm9yY2VDb2xsYXBzZWQgKi8pKTsKICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREYXJrKGJvb2xlYW4gZGFyaywgYm9vbGVhbiBmYWRlLCBsb25nIGRlbGF5KSB7CisgICAgICAgIGlmIChtR3JvdXBPdmVyZmxvd0NvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICBtT3ZlcmZsb3dJbnZlcnRIZWxwZXIuc2V0SW52ZXJ0ZWQoZGFyaywgZmFkZSwgZGVsYXkpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9Ob3RpZmljYXRpb25TdGFja1Njcm9sbExheW91dC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9Ob3RpZmljYXRpb25TdGFja1Njcm9sbExheW91dC5qYXZhCmluZGV4IGFlNmI3MjkuLjBlZDE1MjcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svTm90aWZpY2F0aW9uU3RhY2tTY3JvbGxMYXlvdXQuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL05vdGlmaWNhdGlvblN0YWNrU2Nyb2xsTGF5b3V0LmphdmEKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgIC8qKgogICAgICAqIFRoZSBhbGdvcml0aG0gd2hpY2ggY2FsY3VsYXRlcyB0aGUgcHJvcGVydGllcyBmb3Igb3VyIGNoaWxkcmVuCiAgICAgICovCi0gICAgcHJpdmF0ZSBTdGFja1Njcm9sbEFsZ29yaXRobSBtU3RhY2tTY3JvbGxBbGdvcml0aG07CisgICAgcHJpdmF0ZSBmaW5hbCBTdGFja1Njcm9sbEFsZ29yaXRobSBtU3RhY2tTY3JvbGxBbGdvcml0aG07CiAKICAgICAvKioKICAgICAgKiBUaGUgY3VycmVudCBTdGF0ZSB0aGlzIExheW91dCBpcyBpbgpAQCAtMjU4LDYgKzI1OCw3IEBACiAKICAgICAgICAgbVN3aXBlSGVscGVyID0gbmV3IFN3aXBlSGVscGVyKFN3aXBlSGVscGVyLlgsIHRoaXMsIGdldENvbnRleHQoKSk7CiAgICAgICAgIG1Td2lwZUhlbHBlci5zZXRMb25nUHJlc3NMaXN0ZW5lcihtTG9uZ1ByZXNzTGlzdGVuZXIpOworICAgICAgICBtU3RhY2tTY3JvbGxBbGdvcml0aG0gPSBuZXcgU3RhY2tTY3JvbGxBbGdvcml0aG0oY29udGV4dCk7CiAgICAgICAgIGluaXRWaWV3KGNvbnRleHQpOwogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIHNldFdpbGxOb3REcmF3KGZhbHNlKTsKQEAgLTMwMyw4ICszMDQsNyBAQAogICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fbWluX2hlaWdodCk7CiAgICAgICAgIG1Cb3R0b21TdGFja1BlZWtTaXplID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQogICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ib3R0b21fc3RhY2tfcGVla19hbW91bnQpOwotICAgICAgICBtU3RhY2tTY3JvbGxBbGdvcml0aG0gPSBuZXcgU3RhY2tTY3JvbGxBbGdvcml0aG0oY29udGV4dCk7Ci0gICAgICAgIG1TdGFja1Njcm9sbEFsZ29yaXRobS5zZXREaW1tZWQobUFtYmllbnRTdGF0ZS5pc0RpbW1lZCgpKTsKKyAgICAgICAgbVN0YWNrU2Nyb2xsQWxnb3JpdGhtLmluaXRWaWV3KGNvbnRleHQpOwogICAgICAgICBtUGFkZGluZ0JldHdlZW5FbGVtZW50c0RpbW1lZCA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKICAgICAgICAgICAgICAgICAuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubm90aWZpY2F0aW9uX3BhZGRpbmdfZGltbWVkKTsKICAgICAgICAgbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHNOb3JtYWwgPSBjb250ZXh0LmdldFJlc291cmNlcygpCkBAIC0xMzM4LDcgKzEzMzgsNyBAQAogICAgIC8qKgogICAgICAqIEByZXR1cm4gdGhlIGZpcnN0IGNoaWxkIHdoaWNoIGhhcyB2aXNpYmlsaXR5IHVuZXF1YWwgdG8gR09ORQogICAgICAqLwotICAgIHByaXZhdGUgRXhwYW5kYWJsZVZpZXcgZ2V0Rmlyc3RDaGlsZE5vdEdvbmUoKSB7CisgICAgcHVibGljIEV4cGFuZGFibGVWaWV3IGdldEZpcnN0Q2hpbGROb3RHb25lKCkgewogICAgICAgICBpbnQgY2hpbGRDb3VudCA9IGdldENoaWxkQ291bnQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZENvdW50OyBpKyspIHsKICAgICAgICAgICAgIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwpAQCAtMjc1MCwxNCArMjc1MCw2IEBACiAgICAgICAgIHJldHVybiBtYXggKyBnZXRTdGFja1RyYW5zbGF0aW9uKCk7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHFzTWluSGVpZ2h0IFRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGUgcXVpY2sgc2V0dGluZ3MgaW5jbHVkaW5nIHBhZGRpbmcKLSAgICAgKiAgICAgICAgICAgICAgICAgICAgU2VlIHtAbGluayBTdGFja1Njcm9sbEFsZ29yaXRobSN1cGRhdGVJc1NtYWxsU2NyZWVufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVJc1NtYWxsU2NyZWVuKGludCBxc01pbkhlaWdodCkgewotICAgICAgICBtU3RhY2tTY3JvbGxBbGdvcml0aG0udXBkYXRlSXNTbWFsbFNjcmVlbihtTWF4TGF5b3V0SGVpZ2h0IC0gcXNNaW5IZWlnaHQpOwotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIHNldFBob25lU3RhdHVzQmFyKFBob25lU3RhdHVzQmFyIHBob25lU3RhdHVzQmFyKSB7CiAgICAgICAgIHRoaXMubVBob25lU3RhdHVzQmFyID0gcGhvbmVTdGF0dXNCYXI7CiAgICAgfQpAQCAtMjg0NCw3ICsyODM2LDYgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRIZWFkc1VwTWFuYWdlcihIZWFkc1VwTWFuYWdlciBoZWFkc1VwTWFuYWdlcikgewogICAgICAgICBtSGVhZHNVcE1hbmFnZXIgPSBoZWFkc1VwTWFuYWdlcjsKICAgICAgICAgbUFtYmllbnRTdGF0ZS5zZXRIZWFkc1VwTWFuYWdlcihoZWFkc1VwTWFuYWdlcik7Ci0gICAgICAgIG1TdGFja1Njcm9sbEFsZ29yaXRobS5zZXRIZWFkc1VwTWFuYWdlcihoZWFkc1VwTWFuYWdlcik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZ2VuZXJhdGVIZWFkc1VwQW5pbWF0aW9uKEV4cGFuZGFibGVOb3RpZmljYXRpb25Sb3cgcm93LCBib29sZWFuIGlzSGVhZHNVcCkgewpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9TdGFja1Njcm9sbEFsZ29yaXRobS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9zdGFjay9TdGFja1Njcm9sbEFsZ29yaXRobS5qYXZhCmluZGV4IDk1M2YyODcuLjU0OTY5NjMgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvc3RhY2svU3RhY2tTY3JvbGxBbGdvcml0aG0uamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3N0YWNrL1N0YWNrU2Nyb2xsQWxnb3JpdGhtLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5FeHBhbmRhYmxlTm90aWZpY2F0aW9uUm93OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5FeHBhbmRhYmxlVmlldzsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucG9saWN5LkhlYWRzVXBNYW5hZ2VyOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTY4LDE5ICs2NywyMiBAQAogICAgIHByaXZhdGUgaW50IG1Cb3R0b21TdGFja1Nsb3dEb3duTGVuZ3RoOwogICAgIHByaXZhdGUgaW50IG1Ub3BTdGFja1Nsb3dEb3duTGVuZ3RoOwogICAgIHByaXZhdGUgaW50IG1Db2xsYXBzZVNlY29uZENhcmRQYWRkaW5nOwotICAgIHByaXZhdGUgYm9vbGVhbiBtSXNTbWFsbFNjcmVlbjsKLSAgICBwcml2YXRlIGludCBtTWF4Tm90aWZpY2F0aW9uSGVpZ2h0OwogICAgIHByaXZhdGUgYm9vbGVhbiBtU2NhbGVEaW1tZWQ7Ci0gICAgcHJpdmF0ZSBIZWFkc1VwTWFuYWdlciBtSGVhZHNVcE1hbmFnZXI7CisgICAgcHJpdmF0ZSBFeHBhbmRhYmxlVmlldyBtRmlyc3RDaGlsZDsKICAgICBwcml2YXRlIGludCBtRmlyc3RDaGlsZE1pbkhlaWdodDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbURpbW1lZDsKIAogICAgIHB1YmxpYyBTdGFja1Njcm9sbEFsZ29yaXRobShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgaW5pdENvbnN0YW50cyhjb250ZXh0KTsKLSAgICAgICAgdXBkYXRlUGFkZGluZyhmYWxzZSk7CisgICAgICAgIGluaXRWaWV3KGNvbnRleHQpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVQYWRkaW5nKGJvb2xlYW4gZGltbWVkKSB7Ci0gICAgICAgIG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzID0gZGltbWVkICYmIG1TY2FsZURpbW1lZAorICAgIHB1YmxpYyB2b2lkIGluaXRWaWV3KENvbnRleHQgY29udGV4dCkgeworICAgICAgICBpbml0Q29uc3RhbnRzKGNvbnRleHQpOworICAgICAgICB1cGRhdGVQYWRkaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVBhZGRpbmcoKSB7CisgICAgICAgIG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzID0gbURpbW1lZCAmJiBtU2NhbGVEaW1tZWQKICAgICAgICAgICAgICAgICA/IG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzRGltbWVkCiAgICAgICAgICAgICAgICAgOiBtUGFkZGluZ0JldHdlZW5FbGVtZW50c05vcm1hbDsKICAgICAgICAgbVRvcFN0YWNrVG90YWxTaXplID0gbVRvcFN0YWNrU2xvd0Rvd25MZW5ndGggKyBtUGFkZGluZ0JldHdlZW5FbGVtZW50cwpAQCAtMTEwLDggKzExMiw2IEBACiAgICAgICAgICAgICAgICAgLmdldERpbWVuc2lvblBpeGVsU2l6ZShSLmRpbWVuLm5vdGlmaWNhdGlvbnNfdG9wX3BhZGRpbmcpOwogICAgICAgICBtQ29sbGFwc2VkU2l6ZSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKICAgICAgICAgICAgICAgICAuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKFIuZGltZW4ubm90aWZpY2F0aW9uX21pbl9oZWlnaHQpOwotICAgICAgICBtTWF4Tm90aWZpY2F0aW9uSGVpZ2h0ID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQotICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi5ub3RpZmljYXRpb25fbWF4X2hlaWdodCk7CiAgICAgICAgIG1Ub3BTdGFja1BlZWtTaXplID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKQogICAgICAgICAgICAgICAgIC5nZXREaW1lbnNpb25QaXhlbFNpemUoUi5kaW1lbi50b3Bfc3RhY2tfcGVla19hbW91bnQpOwogICAgICAgICBtQm90dG9tU3RhY2tQZWVrU2l6ZSA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkKQEAgLTE0OSw2ICsxNDksNyBAQAogICAgICAgICBhbGdvcml0aG1TdGF0ZS5zY3JvbGxlZFBpeGVsc1RvcCA9IDA7CiAgICAgICAgIGFsZ29yaXRobVN0YXRlLml0ZW1zSW5Cb3R0b21TdGFjayA9IDAuMGY7CiAgICAgICAgIGFsZ29yaXRobVN0YXRlLnBhcnRpYWxJbkJvdHRvbSA9IDAuMGY7CisgICAgICAgIG1GaXJzdENoaWxkTWluSGVpZ2h0ID0gbUZpcnN0Q2hpbGQgPT0gbnVsbCA/IDAgOiBtRmlyc3RDaGlsZC5nZXRNaW5IZWlnaHQoKTsKICAgICAgICAgZmxvYXQgYm90dG9tT3ZlclNjcm9sbCA9IGFtYmllbnRTdGF0ZS5nZXRPdmVyU2Nyb2xsQW1vdW50KGZhbHNlIC8qIG9uVG9wICovKTsKIAogICAgICAgICBpbnQgc2Nyb2xsWSA9IGFtYmllbnRTdGF0ZS5nZXRTY3JvbGxZKCk7CkBAIC00MjIsNiArNDIzLDcgQEAKICAgICAgICAgICAgIFN0YWNrVmlld1N0YXRlIGNoaWxkVmlld1N0YXRlID0gcmVzdWx0U3RhdGUuZ2V0Vmlld1N0YXRlRm9yVmlldyhjaGlsZCk7CiAgICAgICAgICAgICBjaGlsZFZpZXdTdGF0ZS5sb2NhdGlvbiA9IFN0YWNrVmlld1N0YXRlLkxPQ0FUSU9OX1VOS05PV047CiAgICAgICAgICAgICBpbnQgY2hpbGRIZWlnaHQgPSBnZXRNYXhBbGxvd2VkQ2hpbGRIZWlnaHQoY2hpbGQsIGFtYmllbnRTdGF0ZSk7CisgICAgICAgICAgICBpbnQgbWluSGVpZ2h0ID0gY2hpbGQuZ2V0TWluSGVpZ2h0KCk7CiAgICAgICAgICAgICBmbG9hdCB5UG9zaXRpb25JblNjcm9sbFZpZXdBZnRlckVsZW1lbnQgPSB5UG9zaXRpb25JblNjcm9sbFZpZXcKICAgICAgICAgICAgICAgICAgICAgKyBjaGlsZEhlaWdodAogICAgICAgICAgICAgICAgICAgICArIG1QYWRkaW5nQmV0d2VlbkVsZW1lbnRzOwpAQCAtNDUwLDE3ICs0NTIsMTcgQEAKIAogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGFyZSBvdmVybGFwcGluZyB3aXRoIHRoZSBib3R0b20gc3RhY2sKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRWaWV3U3RhdGUueVRyYW5zbGF0aW9uICsgY2hpbGRIZWlnaHQgKyBtUGFkZGluZ0JldHdlZW5FbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgPj0gYm90dG9tU3RhY2tTdGFydCAmJiAhbUlzRXhwYW5zaW9uQ2hhbmdpbmcgJiYgaSAhPSAwICYmIG1Jc1NtYWxsU2NyZWVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICA+PSBib3R0b21TdGFja1N0YXJ0ICYmICFtSXNFeHBhbnNpb25DaGFuZ2luZyAmJiBpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLy8gd2UganVzdCBjb2xsYXBzZSB0aGlzIGVsZW1lbnQgc2xpZ2h0bHkKICAgICAgICAgICAgICAgICAgICAgaW50IG5ld1NpemUgPSAoaW50KSBNYXRoLm1heChib3R0b21TdGFja1N0YXJ0IC0gbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHMgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVmlld1N0YXRlLnlUcmFuc2xhdGlvbiwgY2hpbGQuZ2V0TWluSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkVmlld1N0YXRlLnlUcmFuc2xhdGlvbiwgbWluSGVpZ2h0KTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRWaWV3U3RhdGUuaGVpZ2h0ID0gbmV3U2l6ZTsKICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVGb3JDaGlsZFRyYW5zaXRpb25pbmdJbkJvdHRvbShhbGdvcml0aG1TdGF0ZSwgYm90dG9tU3RhY2tTdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCwgY2hpbGRWaWV3U3RhdGUueVRyYW5zbGF0aW9uLCBjaGlsZFZpZXdTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEhlaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNsYW1wUG9zaXRpb25Ub0JvdHRvbVN0YWNrU3RhcnQoY2hpbGRWaWV3U3RhdGUsIGNoaWxkVmlld1N0YXRlLmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFtYmllbnRTdGF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQsIGFtYmllbnRTdGF0ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG5leHRZUG9zaXRpb24gPj0gYm90dG9tU3RhY2tTdGFydCkgewogICAgICAgICAgICAgICAgIC8vIENhc2UgMjoKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgaW4gdGhlIGJvdHRvbSBzdGFjay4KQEAgLTQ2OCw3ICs0NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHJlZ3VsYXIgc2Nyb2xsIHZpZXcgd2UgYXJlIGZ1bGx5IHRyYW5zbGF0ZWQgb3V0IG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBib3R0b20gb2YgdGhlIHNjcmVlbiBzbyB3ZSBhcmUgZnVsbHkgaW4gdGhlIGJvdHRvbSBzdGFjawogICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZUZvckNoaWxkRnVsbHlJbkJvdHRvbVN0YWNrKGFsZ29yaXRobVN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVN0YWNrU3RhcnQsIGNoaWxkVmlld1N0YXRlLCBjaGlsZEhlaWdodCwgYW1iaWVudFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21TdGFja1N0YXJ0LCBjaGlsZFZpZXdTdGF0ZSwgbWluSGVpZ2h0LCBhbWJpZW50U3RhdGUpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgcmVndWxhciBzY3JvbGwgdmlldyB3ZSBhcmUgY3VycmVudGx5IHRyYW5zbGF0aW5nIG91dCBvZiAvCiAgICAgICAgICAgICAgICAgICAgIC8vIGludG8gdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuCkBAIC01NDMsNyArNTQ1LDcgQEAKICAgICAgICAgICAgIGlmIChyb3cuaXNQaW5uZWQoKSkgewogICAgICAgICAgICAgICAgIGNoaWxkU3RhdGUueVRyYW5zbGF0aW9uID0gTWF0aC5tYXgoY2hpbGRTdGF0ZS55VHJhbnNsYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBtTm90aWZpY2F0aW9uc1RvcFBhZGRpbmcpOwotICAgICAgICAgICAgICAgIGNoaWxkU3RhdGUuaGVpZ2h0ID0gcm93LmdldEhlYWRzVXBIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBjaGlsZFN0YXRlLmhlaWdodCA9IE1hdGgubWF4KHJvdy5nZXRIZWFkc1VwSGVpZ2h0KCksIGNoaWxkU3RhdGUuaGVpZ2h0KTsKICAgICAgICAgICAgICAgICBpZiAoIWlzVG9wRW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgYSBoZWFkc1VwIGRvZXNuJ3QgdmVydGljYWxseSBleHRlbmQgZnVydGhlciB0aGFuIHRoZSBoZWFkcy11cCBhdAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdG9wIG1vc3Qgei1wb3NpdGlvbgpAQCAtNTYwLDEyICs1NjIsMTMgQEAKICAgICAgKiBDbGFtcCB0aGUgeVRyYW5zbGF0aW9uIGJvdGggdXAgYW5kIGRvd24gdG8gdmFsaWQgcG9zaXRpb25zLgogICAgICAqCiAgICAgICogQHBhcmFtIGNoaWxkVmlld1N0YXRlIHRoZSB2aWV3IHN0YXRlIG9mIHRoZSBjaGlsZAotICAgICAqIEBwYXJhbSBjaGlsZEhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoaXMgY2hpbGQKKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IHRoZSBtaW5pbXVtIGhlaWdodCBvZiB0aGlzIGNoaWxkCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNsYW1wWVRyYW5zbGF0aW9uKFN0YWNrVmlld1N0YXRlIGNoaWxkVmlld1N0YXRlLCBpbnQgY2hpbGRIZWlnaHQsCisgICAgcHJpdmF0ZSB2b2lkIGNsYW1wWVRyYW5zbGF0aW9uKFN0YWNrVmlld1N0YXRlIGNoaWxkVmlld1N0YXRlLCBpbnQgbWluSGVpZ2h0LAogICAgICAgICAgICAgQW1iaWVudFN0YXRlIGFtYmllbnRTdGF0ZSkgewotICAgICAgICBjbGFtcFBvc2l0aW9uVG9Cb3R0b21TdGFja1N0YXJ0KGNoaWxkVmlld1N0YXRlLCBjaGlsZEhlaWdodCwgYW1iaWVudFN0YXRlKTsKLSAgICAgICAgY2xhbXBQb3NpdGlvblRvVG9wU3RhY2tFbmQoY2hpbGRWaWV3U3RhdGUsIGNoaWxkSGVpZ2h0KTsKKyAgICAgICAgY2xhbXBQb3NpdGlvblRvQm90dG9tU3RhY2tTdGFydChjaGlsZFZpZXdTdGF0ZSwgY2hpbGRWaWV3U3RhdGUuaGVpZ2h0LCBtaW5IZWlnaHQsCisgICAgICAgICAgICAgICAgYW1iaWVudFN0YXRlKTsKKyAgICAgICAgY2xhbXBQb3NpdGlvblRvVG9wU3RhY2tFbmQoY2hpbGRWaWV3U3RhdGUsIGNoaWxkVmlld1N0YXRlLmhlaWdodCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01NzQsMTIgKzU3NywyMiBAQAogICAgICAqCiAgICAgICogQHBhcmFtIGNoaWxkVmlld1N0YXRlIHRoZSB2aWV3IHN0YXRlIG9mIHRoZSBjaGlsZAogICAgICAqIEBwYXJhbSBjaGlsZEhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoaXMgY2hpbGQKKyAgICAgKiBAcGFyYW0gbWluSGVpZ2h0IHRoZSBtaW51bXVtIEhlaWdodCBvZiB0aGUgVmlldwogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBjbGFtcFBvc2l0aW9uVG9Cb3R0b21TdGFja1N0YXJ0KFN0YWNrVmlld1N0YXRlIGNoaWxkVmlld1N0YXRlLAotICAgICAgICAgICAgaW50IGNoaWxkSGVpZ2h0LCBBbWJpZW50U3RhdGUgYW1iaWVudFN0YXRlKSB7Ci0gICAgICAgIGNoaWxkVmlld1N0YXRlLnlUcmFuc2xhdGlvbiA9IE1hdGgubWluKGNoaWxkVmlld1N0YXRlLnlUcmFuc2xhdGlvbiwKLSAgICAgICAgICAgICAgICBhbWJpZW50U3RhdGUuZ2V0SW5uZXJIZWlnaHQoKSAtIG1Cb3R0b21TdGFja1BlZWtTaXplIC0gbUNvbGxhcHNlU2Vjb25kQ2FyZFBhZGRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgIC0gY2hpbGRIZWlnaHQpOworICAgICAgICAgICAgaW50IGNoaWxkSGVpZ2h0LCBpbnQgbWluSGVpZ2h0LCBBbWJpZW50U3RhdGUgYW1iaWVudFN0YXRlKSB7CisKKyAgICAgICAgaW50IGJvdHRvbVN0YWNrU3RhcnQgPSBhbWJpZW50U3RhdGUuZ2V0SW5uZXJIZWlnaHQoKQorICAgICAgICAgICAgICAgIC0gbUJvdHRvbVN0YWNrUGVla1NpemUgLSBtQ29sbGFwc2VTZWNvbmRDYXJkUGFkZGluZzsKKyAgICAgICAgaW50IGNoaWxkU3RhcnQgPSBib3R0b21TdGFja1N0YXJ0IC0gY2hpbGRIZWlnaHQ7CisgICAgICAgIGlmIChjaGlsZFN0YXJ0IDwgY2hpbGRWaWV3U3RhdGUueVRyYW5zbGF0aW9uKSB7CisgICAgICAgICAgICBmbG9hdCBuZXdIZWlnaHQgPSBib3R0b21TdGFja1N0YXJ0IC0gY2hpbGRWaWV3U3RhdGUueVRyYW5zbGF0aW9uOworICAgICAgICAgICAgaWYgKG5ld0hlaWdodCA8IG1pbkhlaWdodCkgeworICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IG1pbkhlaWdodDsKKyAgICAgICAgICAgICAgICBjaGlsZFZpZXdTdGF0ZS55VHJhbnNsYXRpb24gPSBib3R0b21TdGFja1N0YXJ0IC0gbWluSGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hpbGRWaWV3U3RhdGUuaGVpZ2h0ID0gKGludCkgbmV3SGVpZ2h0OworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC02MjQsNyArNjM3LDcgQEAKICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbUJvdHRvbVN0YWNrSW5kZW50YXRpb25GdW5jdG9yLmdldFZhbHVlKGFsZ29yaXRobVN0YXRlLnBhcnRpYWxJbkJvdHRvbSk7CiAgICAgICAgIGFsZ29yaXRobVN0YXRlLml0ZW1zSW5Cb3R0b21TdGFjayArPSBhbGdvcml0aG1TdGF0ZS5wYXJ0aWFsSW5Cb3R0b207CiAgICAgICAgIGludCBuZXdIZWlnaHQgPSBjaGlsZEhlaWdodDsKLSAgICAgICAgaWYgKGNoaWxkSGVpZ2h0ID4gY2hpbGQuZ2V0TWluSGVpZ2h0KCkgJiYgbUlzU21hbGxTY3JlZW4pIHsKKyAgICAgICAgaWYgKGNoaWxkSGVpZ2h0ID4gY2hpbGQuZ2V0TWluSGVpZ2h0KCkpIHsKICAgICAgICAgICAgIG5ld0hlaWdodCA9IChpbnQpIE1hdGgubWF4KE1hdGgubWluKHRyYW5zaXRpb25pbmdQb3NpdGlvblN0YXJ0ICsgb2Zmc2V0IC0KICAgICAgICAgICAgICAgICAgICAgbVBhZGRpbmdCZXR3ZWVuRWxlbWVudHMgLSBjdXJyZW50WVBvc2l0aW9uLCBjaGlsZEhlaWdodCksCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLmdldE1pbkhlaWdodCgpKTsKQEAgLTY0MCw3ICs2NTMsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN0YXRlRm9yQ2hpbGRGdWxseUluQm90dG9tU3RhY2soU3RhY2tTY3JvbGxBbGdvcml0aG1TdGF0ZSBhbGdvcml0aG1TdGF0ZSwKICAgICAgICAgICAgIGZsb2F0IHRyYW5zaXRpb25pbmdQb3NpdGlvblN0YXJ0LCBTdGFja1ZpZXdTdGF0ZSBjaGlsZFZpZXdTdGF0ZSwKLSAgICAgICAgICAgIGludCBjaGlsZEhlaWdodCwgQW1iaWVudFN0YXRlIGFtYmllbnRTdGF0ZSkgeworICAgICAgICAgICAgaW50IG1pbkhlaWdodCwgQW1iaWVudFN0YXRlIGFtYmllbnRTdGF0ZSkgewogICAgICAgICBmbG9hdCBjdXJyZW50WVBvc2l0aW9uOwogICAgICAgICBhbGdvcml0aG1TdGF0ZS5pdGVtc0luQm90dG9tU3RhY2sgKz0gMS4wZjsKICAgICAgICAgaWYgKGFsZ29yaXRobVN0YXRlLml0ZW1zSW5Cb3R0b21TdGFjayA8IE1BWF9JVEVNU19JTl9CT1RUT01fU1RBQ0spIHsKQEAgLTY2MCw4ICs2NzMsOSBAQAogICAgICAgICAgICAgY2hpbGRWaWV3U3RhdGUubG9jYXRpb24gPSBTdGFja1ZpZXdTdGF0ZS5MT0NBVElPTl9CT1RUT01fU1RBQ0tfSElEREVOOwogICAgICAgICAgICAgY3VycmVudFlQb3NpdGlvbiA9IGFtYmllbnRTdGF0ZS5nZXRJbm5lckhlaWdodCgpOwogICAgICAgICB9Ci0gICAgICAgIGNoaWxkVmlld1N0YXRlLnlUcmFuc2xhdGlvbiA9IGN1cnJlbnRZUG9zaXRpb24gLSBjaGlsZEhlaWdodDsKLSAgICAgICAgY2xhbXBQb3NpdGlvblRvVG9wU3RhY2tFbmQoY2hpbGRWaWV3U3RhdGUsIGNoaWxkSGVpZ2h0KTsKKyAgICAgICAgY2hpbGRWaWV3U3RhdGUuaGVpZ2h0ID0gbWluSGVpZ2h0OworICAgICAgICBjaGlsZFZpZXdTdGF0ZS55VHJhbnNsYXRpb24gPSBjdXJyZW50WVBvc2l0aW9uIC0gbWluSGVpZ2h0OworICAgICAgICBjbGFtcFBvc2l0aW9uVG9Ub3BTdGFja0VuZChjaGlsZFZpZXdTdGF0ZSwgbWluSGVpZ2h0KTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgdXBkYXRlU3RhdGVGb3JUb3BTdGFja0NoaWxkKFN0YWNrU2Nyb2xsQWxnb3JpdGhtU3RhdGUgYWxnb3JpdGhtU3RhdGUsCkBAIC04MzUsMTkgKzg0OSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKioKLSAgICAgKiBVcGRhdGUgd2hldGhlciB0aGUgZGV2aWNlIGlzIHZlcnkgc21hbGwsIGkuZS4gTm90aWZpY2F0aW9ucyBjYW4gYmUgaW4gYm90aCB0aGUgdG9wIGFuZCB0aGUKLSAgICAgKiBib3R0b20gc3RhY2sgYXQgdGhlIHNhbWUgdGltZQotICAgICAqCi0gICAgICogQHBhcmFtIHBhbmVsSGVpZ2h0IFRoZSBub3JtYWwgaGVpZ2h0IG9mIHRoZSBwYW5lbCB3aGVuIGl0J3Mgb3BlbgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUlzU21hbGxTY3JlZW4oaW50IHBhbmVsSGVpZ2h0KSB7Ci0gICAgICAgIG1Jc1NtYWxsU2NyZWVuID0gcGFuZWxIZWlnaHQgPAotICAgICAgICAgICAgICAgIG1Db2xsYXBzZWRTaXplICAvKiB0b3Agc3RhY2sgKi8KLSAgICAgICAgICAgICAgICArIG1Cb3R0b21TdGFja1Nsb3dEb3duTGVuZ3RoICsgbUJvdHRvbVN0YWNrUGVla1NpemUgLyogYm90dG9tIHN0YWNrICovCi0gICAgICAgICAgICAgICAgKyBtTWF4Tm90aWZpY2F0aW9uSGVpZ2h0OyAvKiBtYXggbm90aWZpY2F0aW9uIGhlaWdodCAqLwotICAgIH0KLQogICAgIHB1YmxpYyB2b2lkIG9uRXhwYW5zaW9uU3RhcnRlZChTdGFja1Njcm9sbFN0YXRlIGN1cnJlbnRTdGF0ZSkgewogICAgICAgICBtSXNFeHBhbnNpb25DaGFuZ2luZyA9IHRydWU7CiAgICAgICAgIG1FeHBhbmRlZE9uU3RhcnQgPSBtSXNFeHBhbmRlZDsKQEAgLTkzMywxMCArOTM0LDcgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBub3RpZnlDaGlsZHJlbkNoYW5nZWQoZmluYWwgTm90aWZpY2F0aW9uU3RhY2tTY3JvbGxMYXlvdXQgaG9zdFZpZXcpIHsKLSAgICAgICAgaW50IGZpcnN0SXRlbU1pbkhlaWdodCA9IGhvc3RWaWV3LmdldEZpcnN0SXRlbU1pbkhlaWdodCgpOwotICAgICAgICBpZiAoZmlyc3RJdGVtTWluSGVpZ2h0ICE9IG1GaXJzdENoaWxkTWluSGVpZ2h0KSB7Ci0gICAgICAgICAgICBtRmlyc3RDaGlsZE1pbkhlaWdodCA9IGZpcnN0SXRlbU1pbkhlaWdodDsKLSAgICAgICAgfQorICAgICAgICBtRmlyc3RDaGlsZCA9IGhvc3RWaWV3LmdldEZpcnN0Q2hpbGROb3RHb25lKCk7CiAgICAgICAgIGlmIChtSXNFeHBhbnNpb25DaGFuZ2luZykgewogICAgICAgICAgICAgaG9zdFZpZXcucG9zdChuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC05NDgsNyArOTQ2LDggQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXREaW1tZWQoYm9vbGVhbiBkaW1tZWQpIHsKLSAgICAgICAgdXBkYXRlUGFkZGluZyhkaW1tZWQpOworICAgICAgICBtRGltbWVkID0gZGltbWVkOworICAgICAgICB1cGRhdGVQYWRkaW5nKCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgb25SZXNldChFeHBhbmRhYmxlVmlldyB2aWV3KSB7CkBAIC05NTcsMTAgKzk1Niw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRIZWFkc1VwTWFuYWdlcihIZWFkc1VwTWFuYWdlciBoZWFkc1VwTWFuYWdlcikgewotICAgICAgICBtSGVhZHNVcE1hbmFnZXIgPSBoZWFkc1VwTWFuYWdlcjsKLSAgICB9Ci0KICAgICBjbGFzcyBTdGFja1Njcm9sbEFsZ29yaXRobVN0YXRlIHsKIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvdHYvVHZTdGF0dXNCYXIuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvdHYvVHZTdGF0dXNCYXIuamF2YQppbmRleCAzOWEyOTg2Li4wNDA2YWUzIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3R2L1R2U3RhdHVzQmFyLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci90di9UdlN0YXR1c0Jhci5qYXZhCkBAIC0zMywxNiArMzMsMTEgQEAKIHB1YmxpYyBjbGFzcyBUdlN0YXR1c0JhciBleHRlbmRzIEJhc2VTdGF0dXNCYXIgewogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYWRkSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4LCBTdGF0dXNCYXJJY29uIGljb24pIHsKKyAgICBwdWJsaWMgdm9pZCBzZXRJY29uKFN0cmluZyBzbG90LCBTdGF0dXNCYXJJY29uIGljb24pIHsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB1cGRhdGVJY29uKFN0cmluZyBzbG90LCBpbnQgaW5kZXgsIGludCB2aWV3SW5kZXgsIFN0YXR1c0Jhckljb24gb2xkLAotICAgICAgICAgICAgU3RhdHVzQmFySWNvbiBpY29uKSB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCwgaW50IGluZGV4LCBpbnQgdmlld0luZGV4KSB7CisgICAgcHVibGljIHZvaWQgcmVtb3ZlSWNvbihTdHJpbmcgc2xvdCkgewogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTM1LDcgKzEzMCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoKSB7CisgICAgcHVibGljIHZvaWQgYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoU3RyaW5nIHN1YlBhbmVsKSB7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNzUsNyArMTcwLDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVIZWFkc1VwKFN0cmluZyBrZXksIE5vdGlmaWNhdGlvbkRhdGEuRW50cnkgZW50cnksIGJvb2xlYW4gc2hvdWxkSW50ZXJydXB0LAorICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZUhlYWRzVXAoU3RyaW5nIGtleSwgTm90aWZpY2F0aW9uRGF0YS5FbnRyeSBlbnRyeSwgYm9vbGVhbiBzaG91bGRQZWVrLAogICAgICAgICAgICAgYm9vbGVhbiBhbGVydEFnYWluKSB7CiAgICAgfQogCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvQ29sb3JNYXRyaXhGcmFnbWVudC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4RnJhZ21lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQxYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4RnJhZ21lbnQuamF2YQpAQCAtMCwwICsxLDM1NSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lcjsKKworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKK2ltcG9ydCBhbmRyb2lkLmFwcC5EaWFsb2c7CitpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nRnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZS5QcmVmZXJlbmNlRnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnYxNC5wcmVmZXJlbmNlLlN3aXRjaFByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuRHJvcERvd25QcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZVZpZXdIb2xkZXI7CitpbXBvcnQgYW5kcm9pZC50ZXh0LkVkaXRhYmxlOworaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRXYXRjaGVyOworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OworaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7CitpbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOworaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc3RhdHVzYmFyLnBob25lLlFTVGlsZUhvc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKKworcHVibGljIGNsYXNzIENvbG9yTWF0cml4RnJhZ21lbnQgZXh0ZW5kcyBQcmVmZXJlbmNlRnJhZ21lbnQgaW1wbGVtZW50cyBUdW5lclNlcnZpY2UuVHVuYWJsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNvbG9yTWF0cml4RnJhZ21lbnQiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ1VTVE9NX0lOREVYID0gMjsKKworICAgIC8vIE5pZ2h0IG1vZGUgfj0gMzQwMCBLCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXRbXSBOSUdIVF9WQUxVRVMgPSBuZXcgZmxvYXRbXSB7CisgICAgICAgIDEsIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAgMCwgLjc1NGYsIDAsICAgICAwLAorICAgICAgICAwLCAwLCAgICAgLjUxNmYsIDAsCisgICAgICAgIDAsIDAsICAgICAwLCAgICAgMSwKKyAgICB9OworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXRbXSBJREVOVElUWV9NQVRSSVggPSBuZXcgZmxvYXRbXXsKKyAgICAgICAgICAgIDEsIDAsIDAsIDAsCisgICAgICAgICAgICAwLCAxLCAwLCAwLAorICAgICAgICAgICAgMCwgMCwgMSwgMCwKKyAgICAgICAgICAgIDAsIDAsIDAsIDEsCisgICAgfTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIFJFU0VUX0RFTEFZID0gMTAwMDA7CisKKyAgICBwcml2YXRlIGJvb2xlYW4gbUN1c3RvbUVuYWJsZWQ7CisgICAgcHJpdmF0ZSBEcm9wRG93blByZWZlcmVuY2UgbVNlbGVjdFByZWZlcmVuY2U7CisgICAgcHJpdmF0ZSBTdHJpbmcgbUN1cnJlbnRWYWx1ZTsKKyAgICBwcml2YXRlIFN0cmluZyBtQ3VzdG9tVmFsdWVzOworICAgIHByaXZhdGUgU3dpdGNoUHJlZmVyZW5jZSBtRW5hYmxlQ3VzdG9tUHJlZmVyZW5jZTsKKyAgICBwcml2YXRlIE1hdHJpeFByZWZlcmVuY2UgbUN1c3RvbVByZWZlcmVuY2U7CisgICAgcHJpdmF0ZSBTd2l0Y2hQcmVmZXJlbmNlIG1TaG93UXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbVRpbGVzOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DcmVhdGUoQE51bGxhYmxlIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKKyAgICAgICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKKworICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgICAgIFR1bmVyU2VydmljZS5nZXQoY29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX0NVU1RPTV9FTkFCTEVELAorICAgICAgICAgICAgICAgIENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfQ1VTVE9NX1ZBTFVFUywgUVNUaWxlSG9zdC5USUxFU19TRVRUSU5HLAorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVByZWZlcmVuY2VzKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUsIFN0cmluZyByb290S2V5KSB7CisgICAgICAgIGZpbmFsIENvbnRleHQgY29udGV4dCA9IGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuZ2V0Q29udGV4dCgpOworICAgICAgICBzZXRQcmVmZXJlbmNlU2NyZWVuKGdldFByZWZlcmVuY2VNYW5hZ2VyKCkuY3JlYXRlUHJlZmVyZW5jZVNjcmVlbihjb250ZXh0KSk7CisKKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2UgPSBuZXcgRHJvcERvd25QcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRUaXRsZShSLnN0cmluZy5jb2xvcl90cmFuc2Zvcm0pOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRTdW1tYXJ5KCIlcyIpOworICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihuZXcgUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlQ2hhbmdlKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gSW50ZWdlci5wYXJzZUludCgoU3RyaW5nKSBuZXdWYWx1ZSk7CisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZyhjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT0xPUl9NQVRSSVgsIGdldFZhbHVlcygpW2luZGV4XSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBnZXRQcmVmZXJlbmNlU2NyZWVuKCkuYWRkUHJlZmVyZW5jZShtU2VsZWN0UHJlZmVyZW5jZSk7CisKKyAgICAgICAgbVNob3dRcyA9IG5ldyBTd2l0Y2hQcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBtU2hvd1FzLnNldFRpdGxlKFIuc3RyaW5nLmNvbG9yX21hdHJpeF9zaG93X3FzKTsKKyAgICAgICAgbVNob3dRcy5zZXRPblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcihuZXcgUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlQ2hhbmdlKFByZWZlcmVuY2UgcHJlZmVyZW5jZSwgT2JqZWN0IG5ld1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBzaG93VGlsZSA9IChCb29sZWFuKSBuZXdWYWx1ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VGlsZXM7CisgICAgICAgICAgICAgICAgaWYgKHNob3dUaWxlKSB7CisgICAgICAgICAgICAgICAgICAgIG5ld1RpbGVzID0gbVRpbGVzICE9IG51bGwgPyBtVGlsZXMgKyAiLCIgKyBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJkZWZhdWx0LCIgKyBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3VGlsZXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UaWxlcy5yZXBsYWNlKG1UaWxlcy5jb250YWlucyhDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX1NQRUMrICIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfU1BFQyArICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiwiICsgQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9TUEVDLCAiIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmcoY29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgUVNUaWxlSG9zdC5USUxFU19TRVRUSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGlsZXMpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgZ2V0UHJlZmVyZW5jZVNjcmVlbigpLmFkZFByZWZlcmVuY2UobVNob3dRcyk7CisKKyAgICAgICAgbUVuYWJsZUN1c3RvbVByZWZlcmVuY2UgPSBuZXcgU3dpdGNoUHJlZmVyZW5jZShjb250ZXh0KTsKKyAgICAgICAgbUVuYWJsZUN1c3RvbVByZWZlcmVuY2Uuc2V0VGl0bGUoUi5zdHJpbmcuY29sb3JfZW5hYmxlX2N1c3RvbSk7CisgICAgICAgIG1FbmFibGVDdXN0b21QcmVmZXJlbmNlLnNldE9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKAorICAgICAgICAgICAgICAgIG5ldyBQcmVmZXJlbmNlLk9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDaGFuZ2UoUHJlZmVyZW5jZSBwcmVmZXJlbmNlLCBPYmplY3QgbmV3VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBib29sZWFuIGVuYWJsZWQgPSAoQm9vbGVhbikgbmV3VmFsdWU7CisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dEludChjb250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRCwgZW5hYmxlZCA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGdldFByZWZlcmVuY2VTY3JlZW4oKS5hZGRQcmVmZXJlbmNlKG1FbmFibGVDdXN0b21QcmVmZXJlbmNlKTsKKworICAgICAgICBtQ3VzdG9tUHJlZmVyZW5jZSA9IG5ldyBNYXRyaXhQcmVmZXJlbmNlKGNvbnRleHQpOworICAgICAgICBnZXRQcmVmZXJlbmNlU2NyZWVuKCkuYWRkUHJlZmVyZW5jZShtQ3VzdG9tUHJlZmVyZW5jZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25EZXN0cm95KCkgeworICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTsKKyAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChnZXRDb250ZXh0KCkpLnJlbW92ZVR1bmFibGUodGhpcyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25UdW5pbmdDaGFuZ2VkKFN0cmluZyBrZXksIFN0cmluZyBuZXdWYWx1ZSkgeworICAgICAgICBpZiAoQ29sb3JNYXRyaXhUaWxlLkNPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRC5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbUVuYWJsZWQgPSBuZXdWYWx1ZSAhPSBudWxsICYmIEludGVnZXIucGFyc2VJbnQobmV3VmFsdWUpICE9IDA7CisgICAgICAgICAgICBtRW5hYmxlQ3VzdG9tUHJlZmVyZW5jZS5zZXRDaGVja2VkKG1DdXN0b21FbmFibGVkKTsKKyAgICAgICAgICAgIG1DdXN0b21QcmVmZXJlbmNlLnNldEVuYWJsZWQobUN1c3RvbUVuYWJsZWQpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0T3B0aW9ucygpOworICAgICAgICB9IGVsc2UgaWYgKENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfQ1VTVE9NX1ZBTFVFUy5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbVZhbHVlcyA9IG5ld1ZhbHVlOworICAgICAgICAgICAgbUN1c3RvbVByZWZlcmVuY2Uuc2V0VmFsdWVzKG1DdXN0b21WYWx1ZXMpOworICAgICAgICAgICAgdXBkYXRlU2VsZWN0T3B0aW9ucygpOworICAgICAgICB9IGVsc2UgaWYgKFFTVGlsZUhvc3QuVElMRVNfU0VUVElORy5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbVRpbGVzID0gbmV3VmFsdWU7CisgICAgICAgICAgICBib29sZWFuIGhhc1RpbGUgPSBuZXdWYWx1ZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIG5ld1ZhbHVlLmNvbnRhaW5zKENvbG9yTWF0cml4VGlsZS5DT0xPUl9NQVRSSVhfU1BFQyk7CisgICAgICAgICAgICBtU2hvd1FzLnNldENoZWNrZWQoaGFzVGlsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ3VycmVudFZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgICAgICB1cGRhdGVTZWxlY3RPcHRpb25zKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2VsZWN0T3B0aW9ucygpIHsKKyAgICAgICAgZmluYWwgaW50IE4gPSBDVVNUT01fSU5ERVggKyAobUN1c3RvbUVuYWJsZWQgPyAxIDogMCk7CisgICAgICAgIFN0cmluZ1tdIHZhbHVlcyA9IG5ldyBTdHJpbmdbTl07CisgICAgICAgIENoYXJTZXF1ZW5jZVtdIHRvdGFsTmFtZXMgPSBnZXRDb2xvclRpdGxlcyhnZXRDb250ZXh0KCkpOworICAgICAgICBDaGFyU2VxdWVuY2VbXSBuYW1lcyA9IG5ldyBDaGFyU2VxdWVuY2VbTl07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICB2YWx1ZXNbaV0gPSBTdHJpbmcudmFsdWVPZihpKTsKKyAgICAgICAgICAgIG5hbWVzW2ldID0gdG90YWxOYW1lc1tpXTsKKyAgICAgICAgfQorICAgICAgICBtU2VsZWN0UHJlZmVyZW5jZS5zZXRFbnRyaWVzKG5hbWVzKTsKKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0RW50cnlWYWx1ZXModmFsdWVzKTsKKyAgICAgICAgU3RyaW5nW10gZW50cmllcyA9IGdldFZhbHVlcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWxzKGVudHJpZXNbaV0sIG1DdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0VmFsdWVJbmRleChpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbVNlbGVjdFByZWZlcmVuY2Uuc2V0U3VtbWFyeShSLnN0cmluZy5jb2xvcl9tYXRyaXhfdW5rbm93bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2YXRlIFN0cmluZ1tdIGdldFZhbHVlcygpIHsKKyAgICAgICAgU3RyaW5nW10gcmV0ID0gZ2V0Q29sb3JUcmFuc2Zvcm1zKCk7CisgICAgICAgIC8vIEZpbGwgaW4gY3VzdG9tIGJhc2VkIG9uIHR1bmVyIHNldHRpbmdzLgorICAgICAgICByZXRbQ1VTVE9NX0lOREVYXSA9IG1DdXN0b21WYWx1ZXM7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0UmV2ZXJ0VGltZXIoKSB7CisgICAgICAgIGdldFZpZXcoKS5wb3N0RGVsYXllZChtUmVzZXRDb2xvck1hdHJpeCwgUkVTRVRfREVMQVkpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBvbkFwcGx5KCkgeworICAgICAgICBTZXR0aW5ncy5TZWN1cmUucHV0U3RyaW5nKGdldENvbnRleHQoKS5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBDb2xvck1hdHJpeFRpbGUuQ09MT1JfTUFUUklYX0NVU1RPTV9WQUxVRVMsIG1DdXJyZW50VmFsdWUpOworICAgICAgICBnZXRWaWV3KCkucmVtb3ZlQ2FsbGJhY2tzKG1SZXNldENvbG9yTWF0cml4KTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb25SZXZlcnQoKSB7CisgICAgICAgIGdldFZpZXcoKS5yZW1vdmVDYWxsYmFja3MobVJlc2V0Q29sb3JNYXRyaXgpOworICAgICAgICBtUmVzZXRDb2xvck1hdHJpeC5ydW4oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFN0cmluZ1tdIGdldENvbG9yVHJhbnNmb3JtcygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7CisgICAgICAgICAgICAgICAgbnVsbCwKKyAgICAgICAgICAgICAgICB0b1N0cmluZyhOSUdIVF9WQUxVRVMpLAorICAgICAgICAgICAgICAgIG51bGwsIC8vIEJsYW5rIHNwb3QgZm9yIGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgICAgICAgICBudWxsLCAvLyBVbmtub3duCisgICAgICAgIH07CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBDaGFyU2VxdWVuY2VbXSBnZXRDb2xvclRpdGxlcyhDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDaGFyU2VxdWVuY2VbXSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X25vbmUpLAorICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbG9yX21hdHJpeF9uaWdodCksCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X2N1c3RvbSksCisgICAgICAgICAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcuY29sb3JfbWF0cml4X3Vua25vd24pLAorICAgICAgICB9OworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0b1N0cmluZyhmbG9hdFtdIHZhbHVlcykgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtUmVzZXRDb2xvck1hdHJpeCA9IG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICgoRGlhbG9nRnJhZ21lbnQpIGdldEZyYWdtZW50TWFuYWdlcigpLmZpbmRGcmFnbWVudEJ5VGFnKCJSZXZlcnRXYXJuaW5nIikpLmRpc21pc3MoKTsKKyAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmcoZ2V0Q29udGV4dCgpLmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTE9SX01BVFJJWCwgbnVsbCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgcHJpdmF0ZSBjbGFzcyBNYXRyaXhQcmVmZXJlbmNlIGV4dGVuZHMgUHJlZmVyZW5jZSBpbXBsZW1lbnRzIFZpZXcuT25DbGlja0xpc3RlbmVyIHsKKyAgICAgICAgcHJpdmF0ZSBmbG9hdFtdIG1WYWx1ZXM7CisKKyAgICAgICAgcHVibGljIE1hdHJpeFByZWZlcmVuY2UoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgICAgICBzdXBlcihjb250ZXh0KTsKKyAgICAgICAgICAgIHNldExheW91dFJlc291cmNlKFIubGF5b3V0LnByZWZlcmVuY2VfbWF0cml4KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlcyhTdHJpbmcgY3VzdG9tVmFsdWVzKSB7CisgICAgICAgICAgICBpZiAoY3VzdG9tVmFsdWVzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtVmFsdWVzID0gSURFTlRJVFlfTUFUUklYOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdbXSBzdHJWYWx1ZXMgPSBjdXN0b21WYWx1ZXMuc3BsaXQoIiwiKTsKKyAgICAgICAgICAgICAgICBtVmFsdWVzID0gbmV3IGZsb2F0W3N0clZhbHVlcy5sZW5ndGhdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBtVmFsdWVzW2ldID0gRmxvYXQucGFyc2VGbG9hdChzdHJWYWx1ZXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vdGlmeUNoYW5nZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkJpbmRWaWV3SG9sZGVyKFByZWZlcmVuY2VWaWV3SG9sZGVyIGhvbGRlcikgeworICAgICAgICAgICAgc3VwZXIub25CaW5kVmlld0hvbGRlcihob2xkZXIpOworICAgICAgICAgICAgVmlld0dyb3VwIHZnID0gKFZpZXdHcm91cCkgaG9sZGVyLml0ZW1WaWV3LmZpbmRWaWV3QnlJZChSLmlkLmVkaXRfZ3JvdXApOworICAgICAgICAgICAgaWYgKG1WYWx1ZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjaGlsZEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBpbmRleCA9IGk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCEodmcuZ2V0Q2hpbGRBdChjaGlsZEluZGV4KSBpbnN0YW5jZW9mIEVkaXRUZXh0KSkgeworICAgICAgICAgICAgICAgICAgICBjaGlsZEluZGV4Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbmFsIEVkaXRUZXh0IGVkaXRUZXh0ID0gKEVkaXRUZXh0KSB2Zy5nZXRDaGlsZEF0KGNoaWxkSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgZWRpdFRleHQuc2V0VGV4dChTdHJpbmcudmFsdWVPZihtVmFsdWVzW2ldKSk7CisgICAgICAgICAgICAgICAgZWRpdFRleHQuYWRkVGV4dENoYW5nZWRMaXN0ZW5lcihuZXcgVGV4dFdhdGNoZXIoKSB7CisgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhZnRlclRleHRDaGFuZ2VkKEVkaXRhYmxlIHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShzLnRvU3RyaW5nKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmFsdWVzW2luZGV4XSA9IEZsb2F0LnBhcnNlRmxvYXQocy50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZhbHVlc1tpbmRleF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGJlZm9yZSwgaW50IGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYmVmb3JlVGV4dENoYW5nZWQoQ2hhclNlcXVlbmNlIHMsIGludCBzdGFydCwgaW50IGNvdW50LCBpbnQgYWZ0ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKChCdXR0b24pIGhvbGRlci5pdGVtVmlldy5maW5kVmlld0J5SWQoUi5pZC5hcHBseSkpLnNldE9uQ2xpY2tMaXN0ZW5lcih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdikgeworICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZyhnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0RJU1BMQVlfQ09MT1JfTUFUUklYLAorICAgICAgICAgICAgICAgICAgICBDb2xvck1hdHJpeEZyYWdtZW50LnRvU3RyaW5nKG1WYWx1ZXMpKTsKKyAgICAgICAgICAgIFJldmVydFdhcm5pbmcuc2hvdyhDb2xvck1hdHJpeEZyYWdtZW50LnRoaXMpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJldmVydFdhcm5pbmcgZXh0ZW5kcyBEaWFsb2dGcmFnbWVudAorICAgICAgICAgICAgaW1wbGVtZW50cyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIHsKKworICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2hvdyhDb2xvck1hdHJpeEZyYWdtZW50IGZyYWdtZW50KSB7CisgICAgICAgICAgICBSZXZlcnRXYXJuaW5nIHdhcm5pbmcgPSBuZXcgUmV2ZXJ0V2FybmluZygpOworICAgICAgICAgICAgd2FybmluZy5zZXRUYXJnZXRGcmFnbWVudChmcmFnbWVudCwgMCk7CisgICAgICAgICAgICB3YXJuaW5nLnNob3coZnJhZ21lbnQuZ2V0RnJhZ21lbnRNYW5hZ2VyKCksICJSZXZlcnRXYXJuaW5nIik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIERpYWxvZyBvbkNyZWF0ZURpYWxvZyhCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CisgICAgICAgICAgICBBbGVydERpYWxvZyBhbGVydERpYWxvZyA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKGdldENvbnRleHQoKSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFRpdGxlKFIuc3RyaW5nLmNvbG9yX3JldmVydF90aXRsZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldE1lc3NhZ2UoUi5zdHJpbmcuY29sb3JfcmV2ZXJ0X21lc3NhZ2UpCisgICAgICAgICAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbihSLnN0cmluZy5vaywgdGhpcykKKyAgICAgICAgICAgICAgICAgICAgLmNyZWF0ZSgpOworICAgICAgICAgICAgYWxlcnREaWFsb2cuc2V0Q2FuY2VsZWRPblRvdWNoT3V0c2lkZSh0cnVlKTsKKyAgICAgICAgICAgIHJldHVybiBhbGVydERpYWxvZzsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbmNlbChEaWFsb2dJbnRlcmZhY2UgZGlhbG9nKSB7CisgICAgICAgICAgICBzdXBlci5vbkNhbmNlbChkaWFsb2cpOworICAgICAgICAgICAgKChDb2xvck1hdHJpeEZyYWdtZW50KSBnZXRUYXJnZXRGcmFnbWVudCgpKS5vblJldmVydCgpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7CisgICAgICAgICAgICAoKENvbG9yTWF0cml4RnJhZ21lbnQpIGdldFRhcmdldEZyYWdtZW50KCkpLm9uQXBwbHkoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9Db2xvck1hdHJpeFRpbGUuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9Db2xvck1hdHJpeFRpbGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmQyMzUyCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0NvbG9yTWF0cml4VGlsZS5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKioKKyAqIENvcHlyaWdodCAoYykgMjAxNSwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOworaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNUaWxlOworaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOworCitwdWJsaWMgY2xhc3MgQ29sb3JNYXRyaXhUaWxlIGV4dGVuZHMgUVNUaWxlPFFTVGlsZS5TdGF0ZT4gaW1wbGVtZW50cyBUdW5lclNlcnZpY2UuVHVuYWJsZSB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT0xPUl9NQVRSSVhfQ1VTVE9NX0VOQUJMRUQgPSAidHVuZXJfY29sb3JfY3VzdG9tX2VuYWJsZWQiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTE9SX01BVFJJWF9DVVNUT01fVkFMVUVTID0gInR1bmVyX2NvbG9yX2N1c3RvbV92YWx1ZXMiOworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09MT1JfTUFUUklYX1NQRUMgPSAiY29sb3JzIjsKKworICAgIHByaXZhdGUgaW50IG1JbmRleDsKKyAgICBwcml2YXRlIFN0cmluZyBtQ3VycmVudFZhbHVlOworCisgICAgcHJpdmF0ZSBib29sZWFuIG1DdXN0b21FbmFibGVkOworICAgIHByaXZhdGUgU3RyaW5nW10gbVZhbHVlczsKKyAgICBwcml2YXRlIENoYXJTZXF1ZW5jZVtdIG1WYWx1ZVRpdGxlczsKKworICAgIHB1YmxpYyBDb2xvck1hdHJpeFRpbGUoSG9zdCBob3N0KSB7CisgICAgICAgIHN1cGVyKGhvc3QpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldExpc3RlbmluZyhib29sZWFuIGxpc3RlbmluZykgeworICAgICAgICBpZiAobGlzdGVuaW5nKSB7CisgICAgICAgICAgICBtVmFsdWVzID0gQ29sb3JNYXRyaXhGcmFnbWVudC5nZXRDb2xvclRyYW5zZm9ybXMoKTsKKyAgICAgICAgICAgIG1WYWx1ZVRpdGxlcyA9IENvbG9yTWF0cml4RnJhZ21lbnQuZ2V0Q29sb3JUaXRsZXMobUNvbnRleHQpOworICAgICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChtQ29udGV4dCkuYWRkVHVuYWJsZSh0aGlzLCBDT0xPUl9NQVRSSVhfQ1VTVE9NX0VOQUJMRUQsCisgICAgICAgICAgICAgICAgICAgIENPTE9SX01BVFJJWF9DVVNUT01fVkFMVUVTLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0NPTE9SX01BVFJJWCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KG1Db250ZXh0KS5yZW1vdmVUdW5hYmxlKHRoaXMpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFN0YXRlIG5ld1RpbGVTdGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZUNsaWNrKCkgeworICAgICAgICBtSW5kZXgrKzsKKyAgICAgICAgaWYgKCFtQ3VzdG9tRW5hYmxlZCAmJiAobUluZGV4ID09IENvbG9yTWF0cml4RnJhZ21lbnQuQ1VTVE9NX0lOREVYKSkgeworICAgICAgICAgICAgbUluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1JbmRleCA9PSBtVmFsdWVzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAgICAgIG1JbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZ0ZvclVzZXIobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkFDQ0VTU0lCSUxJVFlfRElTUExBWV9DT0xPUl9NQVRSSVgsIG1WYWx1ZXNbbUluZGV4XSwKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSk7CisgICAgICAgIHJlZnJlc2hTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uVHVuaW5nQ2hhbmdlZChTdHJpbmcga2V5LCBTdHJpbmcgbmV3VmFsdWUpIHsKKyAgICAgICAgaWYgKENPTE9SX01BVFJJWF9DVVNUT01fRU5BQkxFRC5lcXVhbHMoa2V5KSkgeworICAgICAgICAgICAgbUN1c3RvbUVuYWJsZWQgPSBuZXdWYWx1ZSAhPSBudWxsICYmIEludGVnZXIucGFyc2VJbnQobmV3VmFsdWUpICE9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoQ09MT1JfTUFUUklYX0NVU1RPTV9WQUxVRVMuZXF1YWxzKGtleSkpIHsKKyAgICAgICAgICAgIG1WYWx1ZXNbQ29sb3JNYXRyaXhGcmFnbWVudC5DVVNUT01fSU5ERVhdID0gbmV3VmFsdWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtQ3VycmVudFZhbHVlID0gbmV3VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgLy8gTGFzdCB2YWx1ZSBpcyB1bmtub3duLCBkZWZhdWx0IHRvIHRoYXQuCisgICAgICAgIG1JbmRleCA9IG1WYWx1ZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVmFsdWVzLmxlbmd0aCAtIDE7IGkrKykgeworICAgICAgICAgICAgaWYgKE9iamVjdHMuZXF1YWwobUN1cnJlbnRWYWx1ZSwgbVZhbHVlc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBtSW5kZXggPSBpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlZnJlc2hTdGF0ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIGhhbmRsZVVwZGF0ZVN0YXRlKFN0YXRlIHN0YXRlLCBPYmplY3QgYXJnKSB7CisgICAgICAgIHN0YXRlLmljb24gPSBSZXNvdXJjZUljb24uZ2V0KFIuZHJhd2FibGUuaWNfY29sb3JpemUpOworICAgICAgICBzdGF0ZS5sYWJlbCA9IG1WYWx1ZVRpdGxlc1ttSW5kZXhdOworICAgICAgICBzdGF0ZS5jb250ZW50RGVzY3JpcHRpb24gPSBtVmFsdWVUaXRsZXNbbUluZGV4XTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldE1ldHJpY3NDYXRlZ29yeSgpIHsKKyAgICAgICAgcmV0dXJuIE1ldHJpY3NMb2dnZXIuUVNfQ09MT1JfTUFUUklYOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9EZW1vTW9kZUZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvRGVtb01vZGVGcmFnbWVudC5qYXZhCmluZGV4IGEyYjA2MmMuLmYxZGUyMzQgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9EZW1vTW9kZUZyYWdtZW50LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL0RlbW9Nb2RlRnJhZ21lbnQuamF2YQpAQCAtMjIsMTIgKzIyLDEyIEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlLk9uUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VTY3JlZW47Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlN3aXRjaFByZWZlcmVuY2U7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50OworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZS5Td2l0Y2hQcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcucHJlZmVyZW5jZS5QcmVmZXJlbmNlU2NyZWVuOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmxvZ2dpbmcuTWV0cmljc0xvZ2dlcjsKQEAgLTU2LDkgKzU2LDcgQEAKICAgICBwcml2YXRlIFN3aXRjaFByZWZlcmVuY2UgbU9uU3dpdGNoOwogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCisgICAgcHVibGljIHZvaWQgb25DcmVhdGVQcmVmZXJlbmNlcyhCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlLCBTdHJpbmcgcm9vdEtleSkgewogICAgICAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRDb250ZXh0KCk7CiAgICAgICAgIG1FbmFibGVkU3dpdGNoID0gbmV3IFN3aXRjaFByZWZlcmVuY2UoY29udGV4dCk7CiAgICAgICAgIG1FbmFibGVkU3dpdGNoLnNldFRpdGxlKFIuc3RyaW5nLmVuYWJsZV9kZW1vX21vZGUpOwpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1N0YXR1c0JhclN3aXRjaC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1N0YXR1c0JhclN3aXRjaC5qYXZhCmluZGV4IGRjYjBkOGQuLjkyMGVjNzUgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9TdGF0dXNCYXJTd2l0Y2guamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvU3RhdHVzQmFyU3dpdGNoLmphdmEKQEAgLTE4LDggKzE4LDggQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuU3dpdGNoUHJlZmVyZW5jZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52MTQucHJlZmVyZW5jZS5Td2l0Y2hQcmVmZXJlbmNlOwogaW1wb3J0IGFuZHJvaWQudGV4dC5UZXh0VXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIApAQCAtMzgsMTUgKzM4LDE1IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvQWN0aXZpdHkoKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb0FjdGl2aXR5KCk7CisgICAgcHVibGljIHZvaWQgb25BdHRhY2hlZCgpIHsKKyAgICAgICAgc3VwZXIub25BdHRhY2hlZCgpOwogICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KGdldENvbnRleHQoKSkuYWRkVHVuYWJsZSh0aGlzLCBTdGF0dXNCYXJJY29uQ29udHJvbGxlci5JQ09OX0JMQUNLTElTVCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EZXRhY2hlZEZyb21BY3Rpdml0eSgpIHsKKyAgICBwdWJsaWMgdm9pZCBvbkRldGFjaGVkKCkgewogICAgICAgICBUdW5lclNlcnZpY2UuZ2V0KGdldENvbnRleHQoKSkucmVtb3ZlVHVuYWJsZSh0aGlzKTsKLSAgICAgICAgc3VwZXIub25EZXRhY2hlZEZyb21BY3Rpdml0eSgpOworICAgICAgICBzdXBlci5vbkRldGFjaGVkKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJBY3Rpdml0eS5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyQWN0aXZpdHkuamF2YQppbmRleCBjODRmNjE4Li40MTczZWNjIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJBY3Rpdml0eS5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lckFjdGl2aXR5LmphdmEKQEAgLTE1LDE2ICsxNSw2NCBAQAogICovCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnR1bmVyOwogCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7CitpbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21lbnQ7CitpbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21lbnRUcmFuc2FjdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50OworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2U7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZVNjcmVlbjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogCi1wdWJsaWMgY2xhc3MgVHVuZXJBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXR0aW5nc2xpYi5kcmF3ZXIuU2V0dGluZ3NEcmF3ZXJBY3Rpdml0eTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5SOworCitwdWJsaWMgY2xhc3MgVHVuZXJBY3Rpdml0eSBleHRlbmRzIFNldHRpbmdzRHJhd2VyQWN0aXZpdHkgaW1wbGVtZW50cworICAgICAgICBQcmVmZXJlbmNlRnJhZ21lbnQuT25QcmVmZXJlbmNlU3RhcnRGcmFnbWVudENhbGxiYWNrLAorICAgICAgICBQcmVmZXJlbmNlRnJhZ21lbnQuT25QcmVmZXJlbmNlU3RhcnRTY3JlZW5DYWxsYmFjayB7CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CiAKLSAgICAgICAgZ2V0RnJhZ21lbnRNYW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpLnJlcGxhY2UoYW5kcm9pZC5SLmlkLmNvbnRlbnQsIG5ldyBUdW5lckZyYWdtZW50KCkpCisgICAgICAgIGdldEZyYWdtZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24oKS5yZXBsYWNlKFIuaWQuY29udGVudF9mcmFtZSwgbmV3IFR1bmVyRnJhZ21lbnQoKSkKICAgICAgICAgICAgICAgICAuY29tbWl0KCk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gb25QcmVmZXJlbmNlU3RhcnRGcmFnbWVudChQcmVmZXJlbmNlRnJhZ21lbnQgY2FsbGVyLCBQcmVmZXJlbmNlIHByZWYpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzPD8+IGNscyA9IENsYXNzLmZvck5hbWUocHJlZi5nZXRGcmFnbWVudCgpKTsKKyAgICAgICAgICAgIEZyYWdtZW50IGZyYWdtZW50ID0gKEZyYWdtZW50KSBjbHMubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIEZyYWdtZW50VHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24gPSBnZXRGcmFnbWVudE1hbmFnZXIoKS5iZWdpblRyYW5zYWN0aW9uKCk7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5yZXBsYWNlKFIuaWQuY29udGVudF9mcmFtZSwgZnJhZ21lbnQpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uYWRkVG9CYWNrU3RhY2soIlByZWZlcmVuY2VGcmFnbWVudCIpOworICAgICAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB8IEluc3RhbnRpYXRpb25FeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIExvZy5kKCJUdW5lckFjdGl2aXR5IiwgIlByb2JsZW0gbGF1bmNoaW5nIGZyYWdtZW50IiwgZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VTdGFydFNjcmVlbihQcmVmZXJlbmNlRnJhZ21lbnQgY2FsbGVyLCBQcmVmZXJlbmNlU2NyZWVuIHByZWYpIHsKKyAgICAgICAgRnJhZ21lbnRUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbiA9IGdldEZyYWdtZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24oKTsKKyAgICAgICAgU3ViU2V0dGluZ3NGcmFnbWVudCBmcmFnbWVudCA9IG5ldyBTdWJTZXR0aW5nc0ZyYWdtZW50KCk7CisgICAgICAgIGZpbmFsIEJ1bmRsZSBiID0gbmV3IEJ1bmRsZSgxKTsKKyAgICAgICAgYi5wdXRTdHJpbmcoUHJlZmVyZW5jZUZyYWdtZW50LkFSR19QUkVGRVJFTkNFX1JPT1QsIHByZWYuZ2V0S2V5KCkpOworICAgICAgICBmcmFnbWVudC5zZXRBcmd1bWVudHMoYik7CisgICAgICAgIGZyYWdtZW50LnNldFRhcmdldEZyYWdtZW50KGNhbGxlciwgMCk7CisgICAgICAgIHRyYW5zYWN0aW9uLnJlcGxhY2UoUi5pZC5jb250ZW50X2ZyYW1lLCBmcmFnbWVudCk7CisgICAgICAgIHRyYW5zYWN0aW9uLmFkZFRvQmFja1N0YWNrKCJQcmVmZXJlbmNlRnJhZ21lbnQiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU3ViU2V0dGluZ3NGcmFnbWVudCBleHRlbmRzIFByZWZlcmVuY2VGcmFnbWVudCB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVByZWZlcmVuY2VzKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUsIFN0cmluZyByb290S2V5KSB7CisgICAgICAgICAgICBzZXRQcmVmZXJlbmNlU2NyZWVuKChQcmVmZXJlbmNlU2NyZWVuKSAoKFByZWZlcmVuY2VGcmFnbWVudCkgZ2V0VGFyZ2V0RnJhZ21lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgLmdldFByZWZlcmVuY2VTY3JlZW4oKS5maW5kUHJlZmVyZW5jZShyb290S2V5KSk7CisgICAgICAgIH0KKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lckZyYWdtZW50LmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJGcmFnbWVudC5qYXZhCmluZGV4IGI2MjBiNTBiLi5hM2ZlNmJiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJGcmFnbWVudC5qYXZhCisrKyBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lckZyYWdtZW50LmphdmEKQEAgLTI0LDIwICsyNCwxOSBAQAogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UuT25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2UuT25QcmVmZXJlbmNlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5Td2l0Y2hQcmVmZXJlbmNlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TeXN0ZW07CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnYxNC5wcmVmZXJlbmNlLlByZWZlcmVuY2VGcmFnbWVudDsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2UuU3dpdGNoUHJlZmVyZW5jZTsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjcucHJlZmVyZW5jZS5QcmVmZXJlbmNlOworaW1wb3J0IGFuZHJvaWQuc3VwcG9ydC52Ny5wcmVmZXJlbmNlLlByZWZlcmVuY2UuT25QcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2UuUHJlZmVyZW5jZS5PblByZWZlcmVuY2VDbGlja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwogaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SW5mbGF0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOworCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwubG9nZ2luZy5NZXRyaWNzTG9nZ2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuUVNQYW5lbDsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS50dW5lci5UdW5lclNlcnZpY2UuVHVuYWJsZTsKIAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zeXN0ZW11aS5CYXR0ZXJ5TWV0ZXJEcmF3YWJsZS5TSE9XX1BFUkNFTlRfU0VUVElORzsKIApAQCAtNDUsOCArNDQsNiBAQAogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUdW5lckZyYWdtZW50IjsKIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfUVNfVFVORVIgPSAicXNfdHVuZXIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfREVNT19NT0RFID0gImRlbW9fbW9kZSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9CQVRURVJZX1BDVCA9ICJiYXR0ZXJ5X3BjdCI7CiAKICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTRVRUSU5HX1NFRU5fVFVORVJfV0FSTklORyA9ICJzZWVuX3R1bmVyX3dhcm5pbmciOwpAQCAtNTksMjMgKzU2LDE4IEBACiAKICAgICBwcml2YXRlIFN3aXRjaFByZWZlcmVuY2UgbUJhdHRlcnlQY3Q7CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7CiAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7CiAKLSAgICAgICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwudHVuZXJfcHJlZnMpOwogICAgICAgICBnZXRBY3Rpdml0eSgpLmdldEFjdGlvbkJhcigpLnNldERpc3BsYXlIb21lQXNVcEVuYWJsZWQodHJ1ZSk7CiAgICAgICAgIHNldEhhc09wdGlvbnNNZW51KHRydWUpOworICAgIH0KIAotICAgICAgICBmaW5kUHJlZmVyZW5jZShLRVlfREVNT19NT0RFKS5zZXRPblByZWZlcmVuY2VDbGlja0xpc3RlbmVyKG5ldyBPblByZWZlcmVuY2VDbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblByZWZlcmVuY2VDbGljayhQcmVmZXJlbmNlIHByZWZlcmVuY2UpIHsKLSAgICAgICAgICAgICAgICBGcmFnbWVudFRyYW5zYWN0aW9uIGZ0ID0gZ2V0RnJhZ21lbnRNYW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpOwotICAgICAgICAgICAgICAgIGZ0LnJlcGxhY2UoYW5kcm9pZC5SLmlkLmNvbnRlbnQsIG5ldyBEZW1vTW9kZUZyYWdtZW50KCksICJEZW1vTW9kZSIpOwotICAgICAgICAgICAgICAgIGZ0LmFkZFRvQmFja1N0YWNrKG51bGwpOwotICAgICAgICAgICAgICAgIGZ0LmNvbW1pdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVByZWZlcmVuY2VzKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUsIFN0cmluZyByb290S2V5KSB7CisgICAgICAgIGFkZFByZWZlcmVuY2VzRnJvbVJlc291cmNlKFIueG1sLnR1bmVyX3ByZWZzKTsKKwogICAgICAgICBtQmF0dGVyeVBjdCA9IChTd2l0Y2hQcmVmZXJlbmNlKSBmaW5kUHJlZmVyZW5jZShLRVlfQkFUVEVSWV9QQ1QpOwogICAgICAgICBpZiAoU2V0dGluZ3MuU2VjdXJlLmdldEludChnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCksIFNFVFRJTkdfU0VFTl9UVU5FUl9XQVJOSU5HLAogICAgICAgICAgICAgICAgIDApID09IDApIHsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lclNlcnZpY2UuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lclNlcnZpY2UuamF2YQppbmRleCAxZTNiMGYxLi40N2E0NjY3IDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdHVuZXIvVHVuZXJTZXJ2aWNlLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyU2VydmljZS5qYXZhCkBAIC0zMiw3ICszMiw3IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotCitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkJhdHRlcnlNZXRlckRyYXdhYmxlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLkRlbW9Nb2RlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLlI7CkBAIC00MSw5ICs0MSw4IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuc2V0dGluZ3MuQ3VycmVudFVzZXJUcmFja2VyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnN5c3RlbXVpLnN0YXR1c2Jhci5waG9uZS5TeXN0ZW1VSURpYWxvZzsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKIAogCiBwdWJsaWMgY2xhc3MgVHVuZXJTZXJ2aWNlIGV4dGVuZHMgU3lzdGVtVUkgewpAQCAtNTQsNyArNTMsNyBAQAogICAgIC8vIE1hcCBvZiBVcmlzIHdlIGxpc3RlbiBvbiB0byB0aGVpciBzZXR0aW5ncyBrZXlzLgogICAgIHByaXZhdGUgZmluYWwgQXJyYXlNYXA8VXJpLCBTdHJpbmc+IG1MaXN0ZW5pbmdVcmlzID0gbmV3IEFycmF5TWFwPD4oKTsKICAgICAvLyBNYXAgb2Ygc2V0dGluZ3Mga2V5cyB0byB0aGUgbGlzdGVuZXIuCi0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgTGlzdDxUdW5hYmxlPj4gbVR1bmFibGVMb29rdXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBIYXNoTWFwPFN0cmluZywgU2V0PFR1bmFibGU+PiBtVHVuYWJsZUxvb2t1cCA9IG5ldyBIYXNoTWFwPD4oKTsKIAogICAgIHByaXZhdGUgQ29udGVudFJlc29sdmVyIG1Db250ZW50UmVzb2x2ZXI7CiAgICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRVc2VyOwpAQCAtODUsNyArODQsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFR1bmFibGUoVHVuYWJsZSB0dW5hYmxlLCBTdHJpbmcga2V5KSB7CiAgICAgICAgIGlmICghbVR1bmFibGVMb29rdXAuY29udGFpbnNLZXkoa2V5KSkgewotICAgICAgICAgICAgbVR1bmFibGVMb29rdXAucHV0KGtleSwgbmV3IEFycmF5TGlzdDxUdW5hYmxlPigpKTsKKyAgICAgICAgICAgIG1UdW5hYmxlTG9va3VwLnB1dChrZXksIG5ldyBBcnJheVNldDxUdW5hYmxlPigpKTsKICAgICAgICAgfQogICAgICAgICBtVHVuYWJsZUxvb2t1cC5nZXQoa2V5KS5hZGQodHVuYWJsZSk7CiAgICAgICAgIFVyaSB1cmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKGtleSk7CkBAIC05OSw3ICs5OCw3IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVtb3ZlVHVuYWJsZShUdW5hYmxlIHR1bmFibGUpIHsKLSAgICAgICAgZm9yIChMaXN0PFR1bmFibGU+IGxpc3QgOiBtVHVuYWJsZUxvb2t1cC52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFNldDxUdW5hYmxlPiBsaXN0IDogbVR1bmFibGVMb29rdXAudmFsdWVzKCkpIHsKICAgICAgICAgICAgIGxpc3QucmVtb3ZlKHR1bmFibGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2LDcgKzExNSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCByZWxvYWRTZXR0aW5nKFVyaSB1cmkpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IG1MaXN0ZW5pbmdVcmlzLmdldCh1cmkpOwotICAgICAgICBMaXN0PFR1bmFibGU+IHR1bmFibGVzID0gbVR1bmFibGVMb29rdXAuZ2V0KGtleSk7CisgICAgICAgIFNldDxUdW5hYmxlPiB0dW5hYmxlcyA9IG1UdW5hYmxlTG9va3VwLmdldChrZXkpOwogICAgICAgICBpZiAodHVuYWJsZXMgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTMsOCArMTUyLDExIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVHVuZXJTZXJ2aWNlIHNJbnN0YW5jZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgVHVuZXJTZXJ2aWNlIGdldChDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgU3lzdGVtVUlBcHBsaWNhdGlvbiBzeXNVaSA9IChTeXN0ZW1VSUFwcGxpY2F0aW9uKSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotICAgICAgICBUdW5lclNlcnZpY2Ugc2VydmljZSA9IHN5c1VpLmdldENvbXBvbmVudChUdW5lclNlcnZpY2UuY2xhc3MpOworICAgICAgICBUdW5lclNlcnZpY2Ugc2VydmljZSA9IG51bGw7CisgICAgICAgIGlmIChjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpIGluc3RhbmNlb2YgU3lzdGVtVUlBcHBsaWNhdGlvbikgeworICAgICAgICAgICAgU3lzdGVtVUlBcHBsaWNhdGlvbiBzeXNVaSA9IChTeXN0ZW1VSUFwcGxpY2F0aW9uKSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICAgICAgc2VydmljZSA9IHN5c1VpLmdldENvbXBvbmVudChUdW5lclNlcnZpY2UuY2xhc3MpOworICAgICAgICB9CiAgICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIENhbid0IGdldCBpdCBhcyBhIGNvbXBvbmVudCwgbXVzdCBpbiB0aGUgdHVuZXIsIGxldHMganVzdCBjcmVhdGUgb25lIGZvciBub3cuCiAgICAgICAgICAgICByZXR1cm4gZ2V0U3RhdGljU2VydmljZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS90dW5lci9UdW5lclN3aXRjaC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyU3dpdGNoLmphdmEKaW5kZXggNTQwNzhiMC4uN2FkNzUyZSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyU3dpdGNoLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3R1bmVyL1R1bmVyU3dpdGNoLmphdmEKQEAgLTIsOCArMiw4IEBACiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlN3aXRjaFByZWZlcmVuY2U7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKK2ltcG9ydCBhbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2UuU3dpdGNoUHJlZmVyZW5jZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuUjsKQEAgLTIxLDE1ICsyMSwxNSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQXR0YWNoZWRUb0FjdGl2aXR5KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9BY3Rpdml0eSgpOworICAgIHB1YmxpYyB2b2lkIG9uQXR0YWNoZWQoKSB7CisgICAgICAgIHN1cGVyLm9uQXR0YWNoZWQoKTsKICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChnZXRDb250ZXh0KCkpLmFkZFR1bmFibGUodGhpcywgZ2V0S2V5KCkpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tQWN0aXZpdHkoKSB7CisgICAgcHVibGljIHZvaWQgb25EZXRhY2hlZCgpIHsKICAgICAgICAgVHVuZXJTZXJ2aWNlLmdldChnZXRDb250ZXh0KCkpLnJlbW92ZVR1bmFibGUodGhpcyk7Ci0gICAgICAgIHN1cGVyLm9uRGV0YWNoZWRGcm9tQWN0aXZpdHkoKTsKKyAgICAgICAgc3VwZXIub25EZXRhY2hlZCgpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9Wb2x1bWVEaWFsb2cuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvVm9sdW1lRGlhbG9nLmphdmEKaW5kZXggZGExOWIwNi4uMDkwMTAxNSAxMDA2NDQKLS0tIGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9Wb2x1bWVEaWFsb2cuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdm9sdW1lL1ZvbHVtZURpYWxvZy5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuRGlhbG9nOwogaW1wb3J0IGFuZHJvaWQuYXBwLktleWd1YXJkTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db2xvclN0YXRlTGlzdDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNvbG9yOwpAQCAtMTI4LDYgKzEyOSw3IEBACiAgICAgcHJpdmF0ZSBib29sZWFuIG1QZW5kaW5nUmVjaGVja0FsbDsKICAgICBwcml2YXRlIGxvbmcgbUNvbGxhcHNlVGltZTsKICAgICBwcml2YXRlIGJvb2xlYW4gbUhvdmVyaW5nID0gZmFsc2U7CisgICAgcHJpdmF0ZSBpbnQgbUxhc3RBY3RpdmVTdHJlYW07CiAKICAgICBwdWJsaWMgVm9sdW1lRGlhbG9nKENvbnRleHQgY29udGV4dCwgaW50IHdpbmRvd1R5cGUsIFZvbHVtZURpYWxvZ0NvbnRyb2xsZXIgY29udHJvbGxlciwKICAgICAgICAgICAgIFplbk1vZGVDb250cm9sbGVyIHplbk1vZGVDb250cm9sbGVyLCBDYWxsYmFjayBjYWxsYmFjaykgewpAQCAtMjgzLDEwICsyODUsMTQgQEAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIHZvaWQgb25MYXlvdXRDaGFuZ2UoVmlldyB2LCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tLAogICAgICAgICAgICAgICAgICAgICBpbnQgb2xkTGVmdCwgaW50IG9sZFRvcCwgaW50IG9sZFJpZ2h0LCBpbnQgb2xkQm90dG9tKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBtb3ZlZCA9IG9sZExlZnQgIT0gbGVmdCB8fCBvbGRUb3AgIT0gdG9wOworICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbW92ZWQgPSBtTGFzdEFjdGl2ZVN0cmVhbSAhPSBtQWN0aXZlU3RyZWFtIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBvbGRMZWZ0ICE9IGxlZnQgfHwgb2xkVG9wICE9IHRvcDsKICAgICAgICAgICAgICAgICBpZiAoRC5CVUcpIExvZy5kKFRBRywgIm9uTGF5b3V0Q2hhbmdlIG1vdmVkPSIgKyBtb3ZlZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG9sZD0iICsgbmV3IFJlY3Qob2xkTGVmdCwgb2xkVG9wLCBvbGRSaWdodCwgb2xkQm90dG9tKS50b1Nob3J0U3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBuZXc9IiArIG5ldyBSZWN0KGxlZnQsdG9wLHJpZ2h0LGJvdHRvbSkudG9TaG9ydFN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwiICsgbUxhc3RBY3RpdmVTdHJlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBuZXc9IiArIG5ldyBSZWN0KGxlZnQsdG9wLHJpZ2h0LGJvdHRvbSkudG9TaG9ydFN0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIiArIG1BY3RpdmVTdHJlYW0pOworICAgICAgICAgICAgICAgIG1MYXN0QWN0aXZlU3RyZWFtID0gbUFjdGl2ZVN0cmVhbTsKICAgICAgICAgICAgICAgICBpZiAobW92ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtRGlhbG9nQ29udGVudFZpZXcuZ2V0Q2hpbGRDb3VudCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFZpZXcgYyA9IG1EaWFsb2dDb250ZW50Vmlldy5nZXRDaGlsZEF0KGkpOwpAQCAtNTU0LDcgKzU2MCwxMyBAQAogICAgICAgICAgICAgICAgIDogUi5kcmF3YWJsZS5pY192b2x1bWVfZXhwYW5kX2FuaW1hdGlvbjsKICAgICAgICAgaWYgKHJlcyA9PSBtRXhwYW5kQnV0dG9uUmVzKSByZXR1cm47CiAgICAgICAgIG1FeHBhbmRCdXR0b25SZXMgPSByZXM7Ci0gICAgICAgIG1FeHBhbmRCdXR0b24uc2V0SW1hZ2VSZXNvdXJjZShyZXMpOworICAgICAgICBpZiAoaGFzVG91Y2hGZWF0dXJlKCkpIHsKKyAgICAgICAgICAgIG1FeHBhbmRCdXR0b24uc2V0SW1hZ2VSZXNvdXJjZShyZXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gdG91Y2ggZmVhdHVyZSwgc2hvdyB0aGUgdm9sdW1lIHJpbmdlciBpbnN0ZWFkCisgICAgICAgICAgICBtRXhwYW5kQnV0dG9uLnNldEltYWdlUmVzb3VyY2UoUi5kcmF3YWJsZS5pY192b2x1bWVfcmluZ2VyKTsKKyAgICAgICAgICAgIG1FeHBhbmRCdXR0b24uc2V0QmFja2dyb3VuZFJlc291cmNlKDApOyAgLy8gcmVtb3ZlIGdyYXkgYmFja2dyb3VuZCBlbXBoYXNpcworICAgICAgICB9CiAgICAgICAgIG1FeHBhbmRCdXR0b24uc2V0Q29udGVudERlc2NyaXB0aW9uKG1Db250ZXh0LmdldFN0cmluZyhtRXhwYW5kZWQgPwogICAgICAgICAgICAgICAgIFIuc3RyaW5nLmFjY2Vzc2liaWxpdHlfdm9sdW1lX2NvbGxhcHNlIDogUi5zdHJpbmcuYWNjZXNzaWJpbGl0eV92b2x1bWVfZXhwYW5kKSk7CiAgICAgfQpAQCAtNjQzLDcgKzY1NSw3IEBACiAgICAgICAgIGlmIChELkJVRykgTG9nLmQoVEFHLCAidXBkYXRlRm9vdGVySCIpOwogICAgICAgICBmaW5hbCBib29sZWFuIHdhc1Zpc2libGUgPSBtWmVuRm9vdGVyLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEU7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlzaWJsZSA9IG1TdGF0ZS56ZW5Nb2RlICE9IEdsb2JhbC5aRU5fTU9ERV9PRkYKLSAgICAgICAgICAgICAgICAmJiBtQXVkaW9NYW5hZ2VyLmlzU3RyZWFtQWZmZWN0ZWRCeVJpbmdlck1vZGUobUFjdGl2ZVN0cmVhbSk7CisgICAgICAgICAgICAgICAgJiYgKG1BdWRpb01hbmFnZXIuaXNTdHJlYW1BZmZlY3RlZEJ5UmluZ2VyTW9kZShtQWN0aXZlU3RyZWFtKSB8fCBtRXhwYW5kZWQpOwogICAgICAgICBpZiAod2FzVmlzaWJsZSAhPSB2aXNpYmxlICYmICF2aXNpYmxlKSB7CiAgICAgICAgICAgICBwcmVwYXJlRm9yQ29sbGFwc2UoKTsKICAgICAgICAgfQpAQCAtODMyLDYgKzg0NCwxMSBAQAogICAgICAgICByZXNjaGVkdWxlVGltZW91dEgoKTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzVG91Y2hGZWF0dXJlKCkgeworICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIHJldHVybiBwbS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfVE9VQ0hTQ1JFRU4pOworICAgIH0KKwogICAgIHByaXZhdGUgZmluYWwgVm9sdW1lRGlhbG9nQ29udHJvbGxlci5DYWxsYmFja3MgbUNvbnRyb2xsZXJDYWxsYmFja0gKICAgICAgICAgICAgID0gbmV3IFZvbHVtZURpYWxvZ0NvbnRyb2xsZXIuQ2FsbGJhY2tzKCkgewogICAgICAgICBAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvWmVuTW9kZVBhbmVsLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvdm9sdW1lL1plbk1vZGVQYW5lbC5qYXZhCmluZGV4IGNkNDdhYzEuLjM4ZDhkZTAgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS92b2x1bWUvWmVuTW9kZVBhbmVsLmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3ZvbHVtZS9aZW5Nb2RlUGFuZWwuamF2YQpAQCAtNTEwLDcgKzUxMCw3IEBACiAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIHdlZWtSYW5nZSA9IG5ldyBHcmVnb3JpYW5DYWxlbmRhcigpOwogICAgICAgICBmaW5hbCBsb25nIG5vdyA9IHdlZWtSYW5nZS5nZXRUaW1lSW5NaWxsaXMoKTsKICAgICAgICAgc2V0VG9NaWRuaWdodCh3ZWVrUmFuZ2UpOwotICAgICAgICB3ZWVrUmFuZ2Uucm9sbChDYWxlbmRhci5EQVRFLCA2KTsKKyAgICAgICAgd2Vla1JhbmdlLmFkZChDYWxlbmRhci5EQVRFLCA2KTsKICAgICAgICAgZmluYWwgbG9uZyBuZXh0QWxhcm1NcyA9IG1Db250cm9sbGVyLmdldE5leHRBbGFybSgpOwogICAgICAgICBpZiAobmV4dEFsYXJtTXMgPiAwKSB7CiAgICAgICAgICAgICBHcmVnb3JpYW5DYWxlbmRhciBuZXh0QWxhcm0gPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL0FuZHJvaWQubWsgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IDljZjY0ZDMuLmI3YTQxZTIgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvQW5kcm9pZC5tawpAQCAtMjEsNyArMjEsOCBAQAogTE9DQUxfUFJPVE9DX0ZMQUdTIDo9IC1JJChMT0NBTF9QQVRIKS8uLgogTE9DQUxfUFJPVE9fSkFWQV9PVVRQVVRfUEFSQU1TIDo9IG9wdGlvbmFsX2ZpZWxkX3N0eWxlPWFjY2Vzc29ycwogCi1MT0NBTF9BQVBUX0ZMQUdTIDo9IC0tYXV0by1hZGQtb3ZlcmxheSAtLWV4dHJhLXBhY2thZ2VzIGNvbS5hbmRyb2lkLnN5c3RlbXVpOmNvbS5hbmRyb2lkLmtleWd1YXJkCitMT0NBTF9BQVBUX0ZMQUdTIDo9IC0tYXV0by1hZGQtb3ZlcmxheSBcCisgICAgLS1leHRyYS1wYWNrYWdlcyBjb20uYW5kcm9pZC5zeXN0ZW11aTpjb20uYW5kcm9pZC5rZXlndWFyZDphbmRyb2lkLnN1cHBvcnQudjE0LnByZWZlcmVuY2U6YW5kcm9pZC5zdXBwb3J0LnY3LnByZWZlcmVuY2U6YW5kcm9pZC5zdXBwb3J0LnY3LmFwcGNvbXBhdDphbmRyb2lkLnN1cHBvcnQudjcucmVjeWNsZXJ2aWV3CiAKIExPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykgXAogICAgICQoY2FsbCBhbGwtSWFpZGwtZmlsZXMtdW5kZXIsIHNyYykgXApAQCAtMzAsNiArMzEsMTAgQEAKICAgICBzcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvRXZlbnRMb2dUYWdzLmxvZ3RhZ3MKIAogTE9DQUxfUkVTT1VSQ0VfRElSIDo9ICQoTE9DQUxfUEFUSCkvcmVzIFwKKyAgICBmcmFtZXdvcmtzL3N1cHBvcnQvdjcvcHJlZmVyZW5jZS9yZXMgXAorICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92MTQvcHJlZmVyZW5jZS9yZXMgXAorICAgIGZyYW1ld29ya3Mvc3VwcG9ydC92Ny9hcHBjb21wYXQvcmVzIFwKKyAgICBmcmFtZXdvcmtzL3N1cHBvcnQvdjcvcmVjeWNsZXJ2aWV3L3JlcyBcCiAgICAgZnJhbWV3b3Jrcy9iYXNlL3BhY2thZ2VzL1N5c3RlbVVJL3JlcyBcCiAgICAgZnJhbWV3b3Jrcy9iYXNlL3BhY2thZ2VzL0tleWd1YXJkL3JlcwogCkBAIC00MCw3ICs0NSwxMCBAQAogTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IFwKICAgICBtb2NraXRvLXRhcmdldCBcCiAgICAgS2V5Z3VhcmQgXAotICAgIGFuZHJvaWQtc3VwcG9ydC12Ny1yZWN5Y2xlcnZpZXcKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjctcmVjeWNsZXJ2aWV3IFwKKyAgICBhbmRyb2lkLXN1cHBvcnQtdjctcHJlZmVyZW5jZSBcCisgICAgYW5kcm9pZC1zdXBwb3J0LXY3LWFwcGNvbXBhdCBcCisgICAgYW5kcm9pZC1zdXBwb3J0LXYxNC1wcmVmZXJlbmNlCiAKICMgc2lnbiB0aGlzIHdpdGggcGxhdGZvcm0gY2VydCwgc28gdGhpcyB0ZXN0IGlzIGFsbG93ZWQgdG8gaW5qZWN0IGtleSBldmVudHMgaW50bwogIyBVSSBpdCBkb2Vzbid0IG93bi4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYWxsb3cgc2NyZWVuc2hvdHMgdG8gYmUgdGFrZW4KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCmluZGV4IGMyMWFmMjQuLjI4MjU2MDEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbApAQCAtMTksMTAgKzE5LDE2IEBACiAKICAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLklOSkVDVF9FVkVOVFMiIC8+CiAgICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX1BIT05FX1NUQVRFIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTIiAvPgorICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uTUFOQUdFX1VTRVJTIiAvPgogCiAgICAgPGFwcGxpY2F0aW9uPgogICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KICAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iY29tLmFuZHJvaWQuc3lzdGVtdWkuc2NyZWVuc2hvdC5TY3JlZW5zaG90U3R1YkFjdGl2aXR5IiAvPgorCisgICAgICAgIDxzZXJ2aWNlCisgICAgICAgICAgICBhbmRyb2lkOm5hbWU9ImNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsLlRpbGVMaWZlY3ljbGVNYW5hZ2VyVGVzdHMkRmFrZVRpbGVTZXJ2aWNlIgorICAgICAgICAgICAgYW5kcm9pZDpwcm9jZXNzPSI6a2lsbGFibGUiIC8+CiAgICAgPC9hcHBsaWNhdGlvbj4KIAogICAgIDxpbnN0cnVtZW50YXRpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9xcy9leHRlcm5hbC9UaWxlTGlmZWN5Y2xlTWFuYWdlclRlc3RzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZUxpZmVjeWNsZU1hbmFnZXJUZXN0cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NmM2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZUxpZmVjeWNsZU1hbmFnZXJUZXN0cy5qYXZhCkBAIC0wLDAgKzEsMzIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc3lzdGVtdWkucXMuZXh0ZXJuYWw7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5TZXJ2aWNlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnF1aWNrc2V0dGluZ3MuSVFTU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5JUVNUaWxlU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlOworaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CisKK3B1YmxpYyBjbGFzcyBUaWxlTGlmZWN5Y2xlTWFuYWdlclRlc3RzIGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUSUxFX1VQREFURV9CUk9BRENBU1QgPSAiY29tLmFuZHJvaWQuc3lzdGVtdWkudGVzdHMuVElMRV9VUERBVEUiOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NBTExCQUNLID0gImNhbGxiYWNrIjsKKworICAgIHByaXZhdGUgSGFuZGxlclRocmVhZCBtVGhyZWFkOworICAgIHByaXZhdGUgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIG1TdGF0ZU1hbmFnZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUJyb2FkY2FzdExvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBBcnJheVNldDxTdHJpbmc+IG1DYWxsYmFja3MgPSBuZXcgQXJyYXlTZXQ8PigpOworICAgIHByaXZhdGUgYm9vbGVhbiBtQm91bmQ7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgICAgICBtVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoIlRlc3RUaHJlYWQiKTsKKyAgICAgICAgbVRocmVhZC5zdGFydCgpOworICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKG1UaHJlYWQuZ2V0TG9vcGVyKCkpOworICAgICAgICBtU3RhdGVNYW5hZ2VyID0gbmV3IFRpbGVMaWZlY3ljbGVNYW5hZ2VyKG1IYW5kbGVyLCBnZXRDb250ZXh0KCksCisgICAgICAgICAgICAgICAgbmV3IEludGVudChtQ29udGV4dCwgRmFrZVRpbGVTZXJ2aWNlLmNsYXNzKSwgbmV3IFVzZXJIYW5kbGUoVXNlckhhbmRsZS5teVVzZXJJZCgpKSk7CisgICAgICAgIG1DYWxsYmFja3MuY2xlYXIoKTsKKyAgICAgICAgZ2V0Q29udGV4dCgpLnJlZ2lzdGVyUmVjZWl2ZXIobVJlY2VpdmVyLCBuZXcgSW50ZW50RmlsdGVyKFRJTEVfVVBEQVRFX0JST0FEQ0FTVCkpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHN1cGVyLnRlYXJEb3duKCk7CisgICAgICAgIGlmIChtQm91bmQpIHsKKyAgICAgICAgICAgIHVuYmluZFNlcnZpY2UoKTsKKyAgICAgICAgfQorICAgICAgICBtVGhyZWFkLnF1aXQoKTsKKyAgICAgICAgZ2V0Q29udGV4dCgpLnVucmVnaXN0ZXJSZWNlaXZlcihtUmVjZWl2ZXIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTeW5jKCkgeworICAgICAgICBzeW5jV2l0aEhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZCgpIHsKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RVbmJpbmQoKSB7CisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgdW5iaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uRGVzdHJveSIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RUaWxlU2VydmljZUNhbGxiYWNrcygpIHsKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworCisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25UaWxlQWRkZWQoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblRpbGVBZGRlZCIpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RhcnRMaXN0ZW5pbmcoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblN0YXJ0TGlzdGVuaW5nIik7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25DbGljayhudWxsKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNsaWNrIik7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdG9wTGlzdGVuaW5nKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25TdG9wTGlzdGVuaW5nIik7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25UaWxlUmVtb3ZlZCgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uVGlsZVJlbW92ZWQiKTsKKworICAgICAgICB1bmJpbmRTZXJ2aWNlKCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdEFkZGVkQmVmb3JlQmluZCgpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVBZGRlZCgpOworCisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblRpbGVBZGRlZCIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RMaXN0ZW5pbmdCZWZvcmVCaW5kKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworCisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvblRpbGVBZGRlZCIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xpY2tCZWZvcmVCaW5kKCkgeworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uVGlsZUFkZGVkKCk7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uQ2xpY2sobnVsbCk7CisKKyAgICAgICAgYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uVGlsZUFkZGVkIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25TdGFydExpc3RlbmluZyIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ2xpY2siKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TGlzdGVuaW5nTm90TGlzdGVuaW5nQmVmb3JlQmluZCgpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVBZGRlZCgpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RhcnRMaXN0ZW5pbmcoKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblN0b3BMaXN0ZW5pbmcoKTsKKworICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisgICAgICAgIHVuYmluZFNlcnZpY2UoKTsKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkRlc3Ryb3kiKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UobUNhbGxiYWNrcy5jb250YWlucygib25TdGFydExpc3RlbmluZyIpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Tm9DbGlja09mTm90TGlzdGVuaW5nQW55bW9yZSgpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVBZGRlZCgpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RhcnRMaXN0ZW5pbmcoKTsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vbkNsaWNrKG51bGwpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RvcExpc3RlbmluZygpOworCisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICAgICAgdW5iaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uRGVzdHJveSIpOworICAgICAgICBhc3NlcnRGYWxzZShtQ2FsbGJhY2tzLmNvbnRhaW5zKCJvbkNsaWNrIikpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RDb21wb25lbnRFbmFibGluZygpIHsKKyAgICAgICAgbVN0YXRlTWFuYWdlci5vblRpbGVBZGRlZCgpOworICAgICAgICBtU3RhdGVNYW5hZ2VyLm9uU3RhcnRMaXN0ZW5pbmcoKTsKKworICAgICAgICBQYWNrYWdlTWFuYWdlciBwbSA9IGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpOworICAgICAgICBwbS5zZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhuZXcgQ29tcG9uZW50TmFtZShnZXRDb250ZXh0KCksIEZha2VUaWxlU2VydmljZS5jbGFzcyksCisgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRUQsIFBhY2thZ2VNYW5hZ2VyLkRPTlRfS0lMTF9BUFApOworCisgICAgICAgIGJpbmRTZXJ2aWNlKCk7CisgICAgICAgIGFzc2VydFRydWUobVN0YXRlTWFuYWdlci5tUmVjZWl2ZXJSZWdpc3RlcmVkKTsKKworICAgICAgICBwbS5zZXRDb21wb25lbnRFbmFibGVkU2V0dGluZyhuZXcgQ29tcG9uZW50TmFtZShnZXRDb250ZXh0KCksIEZha2VUaWxlU2VydmljZS5jbGFzcyksCisgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRU5BQkxFRCwgUGFja2FnZU1hbmFnZXIuRE9OVF9LSUxMX0FQUCk7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25DcmVhdGUiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0S2lsbFByb2Nlc3MoKSB7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIub25TdGFydExpc3RlbmluZygpOworICAgICAgICBiaW5kU2VydmljZSgpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uQ3JlYXRlIik7CisgICAgICAgIHdhaXRGb3JDYWxsYmFjaygib25TdGFydExpc3RlbmluZyIpOworCisgICAgICAgIGdldENvbnRleHQoKS5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoRmFrZVRpbGVTZXJ2aWNlLkFDVElPTl9LSUxMKSk7CisKKyAgICAgICAgd2FpdEZvckNhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB3YWl0Rm9yQ2FsbGJhY2soIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYmluZFNlcnZpY2UoKSB7CisgICAgICAgIG1Cb3VuZCA9IHRydWU7CisgICAgICAgIG1TdGF0ZU1hbmFnZXIuc2V0QmluZFNlcnZpY2UodHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVuYmluZFNlcnZpY2UoKSB7CisgICAgICAgIG1Cb3VuZCA9IGZhbHNlOworICAgICAgICBtU3RhdGVNYW5hZ2VyLnNldEJpbmRTZXJ2aWNlKGZhbHNlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgd2FpdEZvckNhbGxiYWNrKFN0cmluZyBjYWxsYmFjaykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChtQ2FsbGJhY2tzLmNvbnRhaW5zKGNhbGxiYWNrKSkgeworICAgICAgICAgICAgICAgIG1DYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Ccm9hZGNhc3RMb2NrKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbUJyb2FkY2FzdExvY2sud2FpdCg1MDApOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1DYWxsYmFja3MuY29udGFpbnMoY2FsbGJhY2spKSB7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFjayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZmFpbCgiRGlkbid0IHJlY2VpdmUgY2FsbGJhY2s6ICIgKyBjYWxsYmFjayk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN5bmNXaXRoSGFuZGxlcigpIHsKKyAgICAgICAgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgICAgIHN5bmNocm9uaXplZCAobG9jaykgeworICAgICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKGxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2subm90aWZ5KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbG9jay53YWl0KDUwMDApOworICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBCcm9hZGNhc3RSZWNlaXZlciBtUmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICBtQ2FsbGJhY2tzLmFkZChpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfQ0FMTEJBQ0spKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUJyb2FkY2FzdExvY2spIHsKKyAgICAgICAgICAgICAgICBtQnJvYWRjYXN0TG9jay5ub3RpZnkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZha2VUaWxlU2VydmljZSBleHRlbmRzIFNlcnZpY2UgeworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBQ1RJT05fS0lMTCA9ICJjb20uYW5kcm9pZC5zeXN0ZW11aS50ZXN0LktJTEwiOworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgSUJpbmRlciBvbkJpbmQoSW50ZW50IGludGVudCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBJUVNUaWxlU2VydmljZS5TdHViKCkgeworCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0UVNTZXJ2aWNlKElRU1NlcnZpY2Ugc2VydmljZSkgeworCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0UVNUaWxlKFRpbGUgdGlsZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25UaWxlQWRkZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvblRpbGVBZGRlZCIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVGlsZVJlbW92ZWQoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvblRpbGVSZW1vdmVkIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdGFydExpc3RlbmluZygpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uU3RhcnRMaXN0ZW5pbmciKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3BMaXN0ZW5pbmcoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvblN0b3BMaXN0ZW5pbmciKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKElCaW5kZXIgaUJpbmRlcikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRDYWxsYmFjaygib25DbGljayIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uVW5sb2NrQ29tcGxldGUoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvblVubG9ja0NvbXBsZXRlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZSgpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uQ3JlYXRlKCk7CisgICAgICAgICAgICByZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlciwgbmV3IEludGVudEZpbHRlcihBQ1RJT05fS0lMTCkpOworICAgICAgICAgICAgc2VuZENhbGxiYWNrKCJvbkNyZWF0ZSIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uRGVzdHJveSgpIHsKKyAgICAgICAgICAgIHN1cGVyLm9uRGVzdHJveSgpOworICAgICAgICAgICAgdW5yZWdpc3RlclJlY2VpdmVyKG1SZWNlaXZlcik7CisgICAgICAgICAgICBzZW5kQ2FsbGJhY2soIm9uRGVzdHJveSIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSB2b2lkIHNlbmRDYWxsYmFjayhTdHJpbmcgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIExvZy5kKCJUaWxlTGlmZWN5Y2xlTWFuYWdlciIsICJSZWxheWluZzogIiArIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIHNlbmRCcm9hZGNhc3QobmV3IEludGVudChUSUxFX1VQREFURV9CUk9BRENBU1QpCisgICAgICAgICAgICAgICAgICAgIC5wdXRFeHRyYShFWFRSQV9DQUxMQkFDSywgY2FsbGJhY2spKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgZmluYWwgQnJvYWRjYXN0UmVjZWl2ZXIgbVJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgeworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKEFDVElPTl9LSUxMLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFByb2Nlc3Mua2lsbFByb2Nlc3MoUHJvY2Vzcy5teVBpZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VNYW5hZ2VyVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTg2YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2UucXVpY2tzZXR0aW5ncy5UaWxlU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5TeXN1aVRlc3RDYXNlOworaW1wb3J0IG9yZy5tb2NraXRvLkFyZ3VtZW50Q2FwdG9yOworaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG87CisKK3B1YmxpYyBjbGFzcyBUaWxlU2VydmljZU1hbmFnZXJUZXN0cyBleHRlbmRzIFN5c3VpVGVzdENhc2UgeworCisgICAgcHJpdmF0ZSBUaWxlU2VydmljZXMgbVRpbGVTZXJ2aWNlczsKKyAgICBwcml2YXRlIFRpbGVMaWZlY3ljbGVNYW5hZ2VyIG1UaWxlTGlmZWN5Y2xlOworICAgIHByaXZhdGUgSGFuZGxlclRocmVhZCBtVGhyZWFkOworICAgIHByaXZhdGUgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIFRpbGVTZXJ2aWNlTWFuYWdlciBtVGlsZVNlcnZpY2VNYW5hZ2VyOworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgbVRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKCJUZXN0VGhyZWFkIik7CisgICAgICAgIG1UaHJlYWQuc3RhcnQoKTsKKyAgICAgICAgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcihtVGhyZWFkLmdldExvb3BlcigpKTsKKyAgICAgICAgbVRpbGVTZXJ2aWNlcyA9IE1vY2tpdG8ubW9jayhUaWxlU2VydmljZXMuY2xhc3MpOworICAgICAgICBNb2NraXRvLndoZW4obVRpbGVTZXJ2aWNlcy5nZXRDb250ZXh0KCkpLnRoZW5SZXR1cm4obUNvbnRleHQpOworICAgICAgICBtVGlsZUxpZmVjeWNsZSA9IE1vY2tpdG8ubW9jayhUaWxlTGlmZWN5Y2xlTWFuYWdlci5jbGFzcyk7CisgICAgICAgIENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSA9IG5ldyBDb21wb25lbnROYW1lKG1Db250ZXh0LAorICAgICAgICAgICAgICAgIFRpbGVTZXJ2aWNlTWFuYWdlclRlc3RzLmNsYXNzKTsKKyAgICAgICAgTW9ja2l0by53aGVuKG1UaWxlTGlmZWN5Y2xlLmdldENvbXBvbmVudCgpKS50aGVuUmV0dXJuKGNvbXBvbmVudE5hbWUpOworICAgICAgICBtQ29udGV4dC5nZXRTaGFyZWRQcmVmZXJlbmNlcyhUaWxlU2VydmljZU1hbmFnZXIuUFJFRlNfRklMRSwgMCkuZWRpdCgpCisgICAgICAgICAgICAgICAgLnB1dEludChjb21wb25lbnROYW1lLmZsYXR0ZW5Ub1N0cmluZygpLCBUaWxlU2VydmljZS5USUxFX01PREVfUEFTU0lWRSkuY29tbWl0KCk7CisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIgPSBuZXcgVGlsZVNlcnZpY2VNYW5hZ2VyKG1UaWxlU2VydmljZXMsIG1IYW5kbGVyLCBtVGlsZUxpZmVjeWNsZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICAgICAgbVRocmVhZC5xdWl0KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNldEJpbmRSZXF1ZXN0ZWQoKSB7CisgICAgICAgIC8vIFJlcXVlc3QgYmluZGluZy4KKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldExhc3RVcGRhdGUoMCk7CisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIuY2FsY3VsYXRlQmluZFByaW9yaXR5KDUpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZVNlcnZpY2VzLCBNb2NraXRvLnRpbWVzKDIpKS5yZWNhbGN1bGF0ZUJpbmRBbGxvd2FuY2UoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIG1UaWxlU2VydmljZU1hbmFnZXIuZ2V0QmluZFByaW9yaXR5KCkpOworCisgICAgICAgIC8vIFZlcmlmeSBzYW1lIHN0YXRlIGRvZXNuJ3QgdHJpZ2dlciByZWNhbGN1bGF0aW5nIGZvciBubyByZWFzb24uCisgICAgICAgIG1UaWxlU2VydmljZU1hbmFnZXIuc2V0QmluZFJlcXVlc3RlZCh0cnVlKTsKKyAgICAgICAgTW9ja2l0by52ZXJpZnkobVRpbGVTZXJ2aWNlcywgTW9ja2l0by50aW1lcygyKSkucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKGZhbHNlKTsKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5jYWxjdWxhdGVCaW5kUHJpb3JpdHkoNSk7CisgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1UaWxlU2VydmljZXMsIE1vY2tpdG8udGltZXMoMykpLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoSW50ZWdlci5NSU5fVkFMVUUsIG1UaWxlU2VydmljZU1hbmFnZXIuZ2V0QmluZFByaW9yaXR5KCkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RQZW5kaW5nQ2xpY2tQcmlvcml0eSgpIHsKKyAgICAgICAgTW9ja2l0by53aGVuKG1UaWxlTGlmZWN5Y2xlLmhhc1BlbmRpbmdDbGljaygpKS50aGVuUmV0dXJuKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgwKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIuTUFYX1ZBTFVFLCBtVGlsZVNlcnZpY2VNYW5hZ2VyLmdldEJpbmRQcmlvcml0eSgpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZCgpIHsKKyAgICAgICAgLy8gVHJpZ2dlciBiaW5kaW5nIHJlcXVlc3RlZCBhbmQgYWxsb3dlZC4KKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kUmVxdWVzdGVkKHRydWUpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRBbGxvd2VkKHRydWUpOworCisgICAgICAgIEFyZ3VtZW50Q2FwdG9yPEJvb2xlYW4+IGNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKEJvb2xlYW4uY2xhc3MpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZUxpZmVjeWNsZSwgTW9ja2l0by50aW1lcygxKSkuc2V0QmluZFNlcnZpY2UoY2FwdG9yLmNhcHR1cmUoKSk7CisgICAgICAgIGFzc2VydFRydWUoKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLnNldEJpbmRSZXF1ZXN0ZWQoZmFsc2UpOworICAgICAgICBtVGlsZVNlcnZpY2VNYW5hZ2VyLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgwKTsKKyAgICAgICAgLy8gUHJpb3JpdHkgc2hvdWxkbid0IGRpc2FwcGVhciBhZnRlciB0aGUgcmVxdWVzdCBnb2VzIGF3YXkgaWYgd2UganVzdCBib3VuZCwgaW5zdGVhZAorICAgICAgICAvLyBpdCBzdGlja3MgYXJvdW5kIHRvIGF2b2lkIHRocmFzaGluZyBhIGJ1bmNoIG9mIHByb2Nlc3Nlcy4KKyAgICAgICAgYXNzZXJ0RXF1YWxzKEludGVnZXIuTUFYX1ZBTFVFIC0gMSwgbVRpbGVTZXJ2aWNlTWFuYWdlci5nZXRCaW5kUHJpb3JpdHkoKSk7CisKKyAgICAgICAgbVRpbGVTZXJ2aWNlTWFuYWdlci5zZXRCaW5kQWxsb3dlZChmYWxzZSk7CisgICAgICAgIGNhcHRvciA9IEFyZ3VtZW50Q2FwdG9yLmZvckNsYXNzKEJvb2xlYW4uY2xhc3MpOworICAgICAgICBNb2NraXRvLnZlcmlmeShtVGlsZUxpZmVjeWNsZSwgTW9ja2l0by50aW1lcygyKSkuc2V0QmluZFNlcnZpY2UoY2FwdG9yLmNhcHR1cmUoKSk7CisgICAgICAgIGFzc2VydEZhbHNlKChib29sZWFuKSBjYXB0b3IuZ2V0VmFsdWUoKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlc1Rlc3RzLmphdmEgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcXMvZXh0ZXJuYWwvVGlsZVNlcnZpY2VzVGVzdHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNhMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3FzL2V4dGVybmFsL1RpbGVTZXJ2aWNlc1Rlc3RzLmphdmEKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnFzLmV4dGVybmFsOworCitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CitpbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkuU3lzdWlUZXN0Q2FzZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5zdGF0dXNiYXIucGhvbmUuUVNUaWxlSG9zdDsKK2ltcG9ydCBvcmcubW9ja2l0by5Bcmd1bWVudENhcHRvcjsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworcHVibGljIGNsYXNzIFRpbGVTZXJ2aWNlc1Rlc3RzIGV4dGVuZHMgU3lzdWlUZXN0Q2FzZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IE5VTV9GQUtFUyA9IFRpbGVTZXJ2aWNlcy5ERUZBVUxUX01BWF9CT1VORCAqIDI7CisKKyAgICBwcml2YXRlIFRpbGVTZXJ2aWNlcyBtVGlsZVNlcnZpY2U7CisgICAgcHJpdmF0ZSBBcnJheUxpc3Q8VGlsZVNlcnZpY2VNYW5hZ2VyPiBtTWFuYWdlcnM7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzdXBlci5zZXRVcCgpOworICAgICAgICBtTWFuYWdlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICAgICAgUVNUaWxlSG9zdCBob3N0ID0gbmV3IFFTVGlsZUhvc3QobUNvbnRleHQsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIG1UaWxlU2VydmljZSA9IG5ldyBUZXN0VGlsZVNlcnZpY2VzKGhvc3QsIExvb3Blci5teUxvb3BlcigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCkgeworICAgICAgICAvLyBBZGQgc29tZSBmYWtlIHRpbGVzLgorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9GQUtFUzsgaSsrKSB7CisgICAgICAgICAgICBtVGlsZVNlcnZpY2UuZ2V0VGlsZVdyYXBwZXIoTW9ja2l0by5tb2NrKEN1c3RvbVRpbGUuY2xhc3MpKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnRFcXVhbHMoTlVNX0ZBS0VTLCBtTWFuYWdlcnMuc2l6ZSgpKTsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9GQUtFUzsgaSsrKSB7CisgICAgICAgICAgICBNb2NraXRvLndoZW4obU1hbmFnZXJzLmdldChpKS5nZXRCaW5kUHJpb3JpdHkoKSkudGhlblJldHVybihpKTsKKyAgICAgICAgfQorICAgICAgICBtVGlsZVNlcnZpY2UucmVjYWxjdWxhdGVCaW5kQWxsb3dhbmNlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0ZBS0VTOyBpKyspIHsKKyAgICAgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1NYW5hZ2Vycy5nZXQoaSksIE1vY2tpdG8udGltZXMoMSkpLmNhbGN1bGF0ZUJpbmRQcmlvcml0eSgKKyAgICAgICAgICAgICAgICAgICAgTW9ja2l0by5hbnlMb25nKCkpOworICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDEpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiICsgaSArICJ0aCBzZXJ2aWNlIiwgaSA+PSAoTlVNX0ZBS0VTIC0gVGlsZVNlcnZpY2VzLkRFRkFVTFRfTUFYX0JPVU5EKSwKKyAgICAgICAgICAgICAgICAgICAgKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTZXRNZW1vcnlQcmVzc3VyZSgpIHsKKyAgICAgICAgdGVzdFJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworICAgICAgICBtVGlsZVNlcnZpY2Uuc2V0TWVtb3J5UHJlc3N1cmUodHJ1ZSk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fRkFLRVM7IGkrKykgeworICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDIpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiICsgaSArICJ0aCBzZXJ2aWNlIiwgaSA+PSAoTlVNX0ZBS0VTIC0gVGlsZVNlcnZpY2VzLlJFRFVDRURfTUFYX0JPVU5EKSwKKyAgICAgICAgICAgICAgICAgICAgKGJvb2xlYW4pIGNhcHRvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RDYWxjRmV3KCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFRpbGVTZXJ2aWNlcy5ERUZBVUxUX01BWF9CT1VORCAtIDE7IGkrKykgeworICAgICAgICAgICAgbVRpbGVTZXJ2aWNlLmdldFRpbGVXcmFwcGVyKE1vY2tpdG8ubW9jayhDdXN0b21UaWxlLmNsYXNzKSk7CisgICAgICAgIH0KKyAgICAgICAgbVRpbGVTZXJ2aWNlLnJlY2FsY3VsYXRlQmluZEFsbG93YW5jZSgpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVGlsZVNlcnZpY2VzLkRFRkFVTFRfTUFYX0JPVU5EIC0gMTsgaSsrKSB7CisgICAgICAgICAgICAvLyBTaG91bGRuJ3QgZ2V0IGJpbmQgcHJpb2lyaXRpZXMgY2FsY3VsYXRlZCB3aGVuIHRoZXJlIGFyZSBsZXNzIHRoYW4gdGhlIG1heCBzZXJ2aWNlcy4KKyAgICAgICAgICAgIE1vY2tpdG8udmVyaWZ5KG1NYW5hZ2Vycy5nZXQoaSksIE1vY2tpdG8ubmV2ZXIoKSkuY2FsY3VsYXRlQmluZFByaW9yaXR5KAorICAgICAgICAgICAgICAgICAgICBNb2NraXRvLmFueUxvbmcoKSk7CisKKyAgICAgICAgICAgIC8vIEFsbCBzaG91bGQgYmUgYm91bmQgc2luY2UgdGhlcmUgYXJlIGxlc3MgdGhhbiB0aGUgbWF4IHNlcnZpY2VzLgorICAgICAgICAgICAgQXJndW1lbnRDYXB0b3I8Qm9vbGVhbj4gY2FwdG9yID0gQXJndW1lbnRDYXB0b3IuZm9yQ2xhc3MoQm9vbGVhbi5jbGFzcyk7CisgICAgICAgICAgICBNb2NraXRvLnZlcmlmeShtTWFuYWdlcnMuZ2V0KGkpLCBNb2NraXRvLnRpbWVzKDEpKS5zZXRCaW5kQWxsb3dlZChjYXB0b3IuY2FwdHVyZSgpKTsKKworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShjYXB0b3IuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFRlc3RUaWxlU2VydmljZXMgZXh0ZW5kcyBUaWxlU2VydmljZXMgeworICAgICAgICBwdWJsaWMgVGVzdFRpbGVTZXJ2aWNlcyhRU1RpbGVIb3N0IGhvc3QsIExvb3BlciBsb29wZXIpIHsKKyAgICAgICAgICAgIHN1cGVyKGhvc3QsIGxvb3Blcik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFRpbGVTZXJ2aWNlTWFuYWdlciBvbkNyZWF0ZVRpbGVTZXJ2aWNlKENvbXBvbmVudE5hbWUgY29tcG9uZW50KSB7CisgICAgICAgICAgICBUaWxlU2VydmljZU1hbmFnZXIgbWFuYWdlciA9IE1vY2tpdG8ubW9jayhUaWxlU2VydmljZU1hbmFnZXIuY2xhc3MpOworICAgICAgICAgICAgbU1hbmFnZXJzLmFkZChtYW5hZ2VyKTsKKyAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTmV0d29ya0NvbnRyb2xsZXJCYXNlVGVzdC5qYXZhIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTmV0d29ya0NvbnRyb2xsZXJCYXNlVGVzdC5qYXZhCmluZGV4IDEzZmM0N2QuLmI2NGZiZWEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L05ldHdvcmtDb250cm9sbGVyQmFzZVRlc3QuamF2YQorKysgYi9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9OZXR3b3JrQ29udHJvbGxlckJhc2VUZXN0LmphdmEKQEAgLTYwLDggKzYwLDggQEAKICAgICBwcm90ZWN0ZWQgTmV0d29ya0NvbnRyb2xsZXJJbXBsIG1OZXR3b3JrQ29udHJvbGxlcjsKICAgICBwcm90ZWN0ZWQgTW9iaWxlU2lnbmFsQ29udHJvbGxlciBtTW9iaWxlU2lnbmFsQ29udHJvbGxlcjsKICAgICBwcm90ZWN0ZWQgUGhvbmVTdGF0ZUxpc3RlbmVyIG1QaG9uZVN0YXRlTGlzdGVuZXI7Ci0gICAgcHJpdmF0ZSBTaWduYWxTdHJlbmd0aCBtU2lnbmFsU3RyZW5ndGg7Ci0gICAgcHJpdmF0ZSBTZXJ2aWNlU3RhdGUgbVNlcnZpY2VTdGF0ZTsKKyAgICBwcm90ZWN0ZWQgU2lnbmFsU3RyZW5ndGggbVNpZ25hbFN0cmVuZ3RoOworICAgIHByb3RlY3RlZCBTZXJ2aWNlU3RhdGUgbVNlcnZpY2VTdGF0ZTsKICAgICBwcm90ZWN0ZWQgQ29ubmVjdGl2aXR5TWFuYWdlciBtTW9ja0NtOwogICAgIHByb3RlY3RlZCBXaWZpTWFuYWdlciBtTW9ja1dtOwogICAgIHByb3RlY3RlZCBTdWJzY3JpcHRpb25NYW5hZ2VyIG1Nb2NrU207CkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICAgICAgbVBob25lU3RhdGVMaXN0ZW5lci5vblNpZ25hbFN0cmVuZ3Roc0NoYW5nZWQobVNpZ25hbFN0cmVuZ3RoKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlU2VydmljZVN0YXRlKCkgeworICAgIHByb3RlY3RlZCB2b2lkIHVwZGF0ZVNlcnZpY2VTdGF0ZSgpIHsKICAgICAgICAgTG9nLmQoVEFHLCAiU2VuZGluZyBTZXJ2aWNlIFN0YXRlOiAiICsgbVNlcnZpY2VTdGF0ZSk7CiAgICAgICAgIG1QaG9uZVN0YXRlTGlzdGVuZXIub25TZXJ2aWNlU3RhdGVDaGFuZ2VkKG1TZXJ2aWNlU3RhdGUpOwogICAgIH0KQEAgLTI0Niw2ICsyNDYsNyBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHVwZGF0ZURhdGFDb25uZWN0aW9uU3RhdGUoaW50IGRhdGFTdGF0ZSwgaW50IGRhdGFOZXRUeXBlKSB7CisgICAgICAgIHdoZW4obVNlcnZpY2VTdGF0ZS5nZXREYXRhTmV0d29ya1R5cGUoKSkudGhlblJldHVybihkYXRhTmV0VHlwZSk7CiAgICAgICAgIG1QaG9uZVN0YXRlTGlzdGVuZXIub25EYXRhQ29ubmVjdGlvblN0YXRlQ2hhbmdlZChkYXRhU3RhdGUsIGRhdGFOZXRUeXBlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L05ldHdvcmtDb250cm9sbGVyRGF0YVRlc3QuamF2YSBiL3BhY2thZ2VzL1N5c3RlbVVJL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9zdGF0dXNiYXIvcG9saWN5L05ldHdvcmtDb250cm9sbGVyRGF0YVRlc3QuamF2YQppbmRleCA1ODdlMmI1Li5lNGY4NThiIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvc3RhdHVzYmFyL3BvbGljeS9OZXR3b3JrQ29udHJvbGxlckRhdGFUZXN0LmphdmEKKysrIGIvcGFja2FnZXMvU3lzdGVtVUkvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3N0YXR1c2Jhci9wb2xpY3kvTmV0d29ya0NvbnRyb2xsZXJEYXRhVGVzdC5qYXZhCkBAIC0xMTUsNiArMTE1LDIxIEBACiAgICAgICAgICAgICAgICAgVGVsZXBob255SWNvbnMuUVNfREFUQV80Ryk7CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgdGVzdERhdGFDaGFuZ2VXaXRob3V0Q29ubmVjdGlvblN0YXRlKCkgeworICAgICAgICBzZXR1cERlZmF1bHRTaWduYWwoKTsKKyAgICAgICAgdXBkYXRlRGF0YUNvbm5lY3Rpb25TdGF0ZShUZWxlcGhvbnlNYW5hZ2VyLkRBVEFfQ09OTkVDVEVELAorICAgICAgICAgICAgICAgIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0xURSk7CisKKyAgICAgICAgdmVyaWZ5RGF0YUluZGljYXRvcnMoVGVsZXBob255SWNvbnMuREFUQV9MVEVbMV1bMCAvKiBObyBkaXJlY3Rpb24gKi9dLAorICAgICAgICAgICAgICAgIFRlbGVwaG9ueUljb25zLlFTX0RBVEFfTFRFKTsKKworICAgICAgICBNb2NraXRvLndoZW4obVNlcnZpY2VTdGF0ZS5nZXREYXRhTmV0d29ya1R5cGUoKSkKKyAgICAgICAgICAgICAgICAudGhlblJldHVybihUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9IU1BBKTsKKyAgICAgICAgdXBkYXRlU2VydmljZVN0YXRlKCk7CisgICAgICAgIHZlcmlmeURhdGFJbmRpY2F0b3JzKFRlbGVwaG9ueUljb25zLkRBVEFfSFsxXVswIC8qIE5vIGRpcmVjdGlvbiAqL10sCisgICAgICAgICAgICAgICAgVGVsZXBob255SWNvbnMuUVNfREFUQV9IKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGF0YUFjdGl2aXR5KCkgewogICAgICAgICBzZXR1cERlZmF1bHRTaWduYWwoKTsKIApkaWZmIC0tZ2l0IGEvcGFja2FnZXMvVnBuRGlhbG9ncy9yZXMvdmFsdWVzLWIrc3IrTGF0bi9zdHJpbmdzLnhtbCBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczY2QwMwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzL1ZwbkRpYWxvZ3MvcmVzL3ZhbHVlcy1iK3NyK0xhdG4vc3RyaW5ncy54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKKyAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIC0tPgorCis8cmVzb3VyY2VzIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICB4bWxuczp4bGlmZj0idXJuOm9hc2lzOm5hbWVzOnRjOnhsaWZmOmRvY3VtZW50OjEuMiI+CisgICAgPHN0cmluZyBuYW1lPSJwcm9tcHQiIG1zZ2lkPSIzMTgzODM2OTI0MjI2NDA3ODI4Ij4iWmFodGV2IHphIHBvdmV6aXZhbmplIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0id2FybmluZyIgbXNnaWQ9IjgwOTY1ODYwNDU0ODQxMjAzMyI+Ijx4bGlmZjpnIGlkPSJBUFAiPiVzPC94bGlmZjpnPiDFvmVsaSBkYSBwb2Rlc2kgVlBOIHZlenUga29qYSBvbW9ndcSHYXZhIHByYcSHZW5qZSBzYW9icmHEh2FqYSBuYSBtcmXFvmkuIFByaWh2YXRpdGUgc2FtbyBha28gdmVydWpldGUgaXp2b3J1LiAmbHQ7YnIgLyZndDsgJmx0O2JyIC8mZ3Q7ICZsdDtpbWcgc3JjPXZwbl9pY29uIC8mZ3Q7IHNlIHByaWthenVqZSB1IHZyaHUgZWtyYW5hIGthZGEgamUgVlBOIGFrdGl2YW4uIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0ibGVnYWN5X3RpdGxlIiBtc2dpZD0iMTkyOTM2MjUwMDY2NTgwOTY0Ij4iVlBOIGplIHBvdmV6YW4iPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJjb25maWd1cmUiIG1zZ2lkPSI0OTA1NTE4Mzc1NTc0NzkxMzc1Ij4iS29uZmlndXJpxaFpIjwvc3RyaW5nPgorICAgIDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdCIgbXNnaWQ9Ijk3MTQxMjMzODMwNDIwMDA1NiI+IlByZWtpbmkgdmV6dSI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9InNlc3Npb24iIG1zZ2lkPSI2NDcwNjI4NTQ5NDczNjQxMDMwIj4iU2VzaWphOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImR1cmF0aW9uIiBtc2dpZD0iMzU4NDc4MjQ1OTkyODcxOTQzNSI+IlRyYWphbmplOiI8L3N0cmluZz4KKyAgICA8c3RyaW5nIG5hbWU9ImRhdGFfdHJhbnNtaXR0ZWQiIG1zZ2lkPSI3OTg4MTY3NjcyOTgyMTk5MDYxIj4iUG9zbGF0bzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3JlY2VpdmVkIiBtc2dpZD0iNDA2Mjc3NjkyOTM3NjA2NzgyMCI+IlByaW1samVubzoiPC9zdHJpbmc+CisgICAgPHN0cmluZyBuYW1lPSJkYXRhX3ZhbHVlX2Zvcm1hdCIgbXNnaWQ9IjIxOTI0NjY1NTc4MjY4OTc1ODAiPiI8eGxpZmY6ZyBpZD0iTlVNQkVSXzAiPiUxJHM8L3hsaWZmOmc+IGJhanQob3YpYSAvIDx4bGlmZjpnIGlkPSJOVU1CRVJfMSI+JTIkczwveGxpZmY6Zz4gcGFrZXRhIjwvc3RyaW5nPgorPC9yZXNvdXJjZXM+CmRpZmYgLS1naXQgYS9wYWNrYWdlcy9XYWxscGFwZXJDcm9wcGVyL3Jlcy92YWx1ZXMvc3R5bGVzLnhtbCBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCmluZGV4IGU0MzhjODQuLjBmOWUyNDcgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCisrKyBiL3BhY2thZ2VzL1dhbGxwYXBlckNyb3BwZXIvcmVzL3ZhbHVlcy9zdHlsZXMueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAtLT4KIAogPHJlc291cmNlcz4KLSAgICA8c3R5bGUgbmFtZT0iVGhlbWUuV2FsbHBhcGVyQ3JvcHBlciIgcGFyZW50PSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5NYXRlcmlhbC5EYXlOaWdodCI+CisgICAgPHN0eWxlIG5hbWU9IlRoZW1lLldhbGxwYXBlckNyb3BwZXIiIHBhcmVudD0iQCphbmRyb2lkOnN0eWxlL1RoZW1lLk1hdGVyaWFsLkRheU5pZ2h0Ij4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDphY3Rpb25CYXJTdHlsZSI+QHN0eWxlL1dhbGxwYXBlckNyb3BwZXJBY3Rpb25CYXI8L2l0ZW0+CiAgICAgICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93RnVsbHNjcmVlbiI+dHJ1ZTwvaXRlbT4KICAgICAgICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXJPdmVybGF5Ij50cnVlPC9pdGVtPgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlHZXN0dXJlRGV0ZWN0b3IuamF2YSBiL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5R2VzdHVyZURldGVjdG9yLmphdmEKaW5kZXggMjgxMjFiNC4uZTMxMDgwMTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5R2VzdHVyZURldGVjdG9yLmphdmEKKysrIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlHZXN0dXJlRGV0ZWN0b3IuamF2YQpAQCAtNjQsNiArNjQsMTQgQEAKICAgICAvLyBJbmRpY2F0ZXMgdGhhdCBtb3Rpb24gZXZlbnRzIGFyZSBiZWluZyBjb2xsZWN0ZWQgdG8gbWF0Y2ggYSBnZXN0dXJlLgogICAgIHByaXZhdGUgYm9vbGVhbiBtUmVjb2duaXppbmdHZXN0dXJlOwogCisgICAgLy8gSW5kaWNhdGVzIHRoYXQgbW90aW9uIGV2ZW50cyBmcm9tIHRoZSBzZWNvbmQgcG9pbnRlciBhcmUgYmVpbmcgY2hlY2tlZAorICAgIC8vIGZvciBhIGRvdWJsZSB0YXAuCisgICAgcHJpdmF0ZSBib29sZWFuIG1TZWNvbmRGaW5nZXJEb3VibGVUYXA7CisKKyAgICAvLyBUcmFja3MgdGhlIG1vc3QgcmVjZW50IHRpbWUgd2hlcmUgQUNUSU9OX1BPSU5URVJfRE9XTiB3YXMgc2VudCBmb3IgdGhlCisgICAgLy8gc2Vjb25kIHBvaW50ZXIuCisgICAgcHJpdmF0ZSBsb25nIG1TZWNvbmRQb2ludGVyRG93blRpbWU7CisKICAgICAvLyBQb2xpY3kgZmxhZ3Mgb2YgdGhlIHByZXZpb3VzIGV2ZW50LgogICAgIHByaXZhdGUgaW50IG1Qb2xpY3lGbGFnczsKIApAQCAtMTAyLDYgKzExMCw3IEBACiAgICAgICAgIHN3aXRjaCAoZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkpIHsKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0RPV046CiAgICAgICAgICAgICAgICAgbURvdWJsZVRhcERldGVjdGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgbVNlY29uZEZpbmdlckRvdWJsZVRhcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIG1SZWNvZ25pemluZ0dlc3R1cmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIG1QcmV2aW91c1ggPSB4OwogICAgICAgICAgICAgICAgIG1QcmV2aW91c1kgPSB5OwpAQCAtMTMzLDYgKzE0Miw0MyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0RPV046CisgICAgICAgICAgICAgICAgLy8gT25jZSBhIHNlY29uZCBmaW5nZXIgaXMgdXNlZCwgd2UncmUgZGVmaW5pdGVseSBub3QKKyAgICAgICAgICAgICAgICAvLyByZWNvZ25pemluZyBhIGdlc3R1cmUuCisgICAgICAgICAgICAgICAgY2FuY2VsR2VzdHVyZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmdldFBvaW50ZXJDb3VudCgpID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIHNlY29uZCBmaW5nZXIsIGF0dGVtcHQgdG8gcmVjb2duaXplIGRvdWJsZQorICAgICAgICAgICAgICAgICAgICAvLyB0YXBzIG9uIGl0LgorICAgICAgICAgICAgICAgICAgICBtU2Vjb25kRmluZ2VyRG91YmxlVGFwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbVNlY29uZFBvaW50ZXJEb3duVGltZSA9IGV2ZW50LmdldEV2ZW50VGltZSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGZpbmdlcnMgZG93biwgc3RvcCB3YXRjaGluZworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYSBkb3VibGUgdGFwLgorICAgICAgICAgICAgICAgICAgICBtU2Vjb25kRmluZ2VyRG91YmxlVGFwID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQOgorICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGRldGVjdGluZyB0YXBzIG9uIHRoZSBzZWNvbmQgZmluZ2VyLCBzZWUgaWYgd2UKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgZmluaXNoIHRoZSBkb3VibGUgdGFwLgorICAgICAgICAgICAgICAgIGlmIChtU2Vjb25kRmluZ2VyRG91YmxlVGFwICYmIG1heWJlRmluaXNoRG91YmxlVGFwKGV2ZW50LCBwb2xpY3lGbGFncykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UncmUgZGV0ZWN0aW5nIHRhcHMgb24gdGhlIHNlY29uZCBmaW5nZXIsIG1hcCBldmVudHMgZnJvbSB0aGUKKyAgICAgICAgLy8gZmluZ2VyIHRvIHRoZSBmaXJzdCBmaW5nZXIuCisgICAgICAgIGlmIChtU2Vjb25kRmluZ2VyRG91YmxlVGFwKSB7CisgICAgICAgICAgICBNb3Rpb25FdmVudCBuZXdFdmVudCA9IG1hcFNlY29uZFBvaW50ZXJUb0ZpcnN0UG9pbnRlcihldmVudCk7CisgICAgICAgICAgICBpZiAobmV3RXZlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4gaGFuZGxlZCA9IG1HZXN0dXJlRGV0ZWN0b3Iub25Ub3VjaEV2ZW50KG5ld0V2ZW50KTsKKyAgICAgICAgICAgIG5ld0V2ZW50LnJlY3ljbGUoKTsKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGVkOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtUmVjb2duaXppbmdHZXN0dXJlKSB7CkBAIC0xNDYsNiArMTkyLDcgQEAKICAgICBwdWJsaWMgdm9pZCBjbGVhcigpIHsKICAgICAgICAgbUZpcnN0VGFwRGV0ZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgbURvdWJsZVRhcERldGVjdGVkID0gZmFsc2U7CisgICAgICAgIG1TZWNvbmRGaW5nZXJEb3VibGVUYXAgPSBmYWxzZTsKICAgICAgICAgY2FuY2VsR2VzdHVyZSgpOwogICAgICAgICBtU3Ryb2tlQnVmZmVyLmNsZWFyKCk7CiAgICAgfQpAQCAtMjI5LDQgKzI3NiwyOCBAQAogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisKKyAgICBwcml2YXRlIE1vdGlvbkV2ZW50IG1hcFNlY29uZFBvaW50ZXJUb0ZpcnN0UG9pbnRlcihNb3Rpb25FdmVudCBldmVudCkgeworICAgICAgICAvLyBPbmx5IG1hcCBiYXNpYyBldmVudHMgd2hlbiB0d28gZmluZ2VycyBhcmUgZG93bi4KKyAgICAgICAgaWYgKGV2ZW50LmdldFBvaW50ZXJDb3VudCgpICE9IDIgfHwKKyAgICAgICAgICAgICAgICAoZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkgIT0gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfRE9XTiAmJgorICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9VUCAmJgorICAgICAgICAgICAgICAgICBldmVudC5nZXRBY3Rpb25NYXNrZWQoKSAhPSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRSkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaW50IGFjdGlvbiA9IGV2ZW50LmdldEFjdGlvbk1hc2tlZCgpOworCisgICAgICAgIGlmIChhY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfRE9XTikgeworICAgICAgICAgICAgYWN0aW9uID0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV047CisgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQKSB7CisgICAgICAgICAgICBhY3Rpb24gPSBNb3Rpb25FdmVudC5BQ1RJT05fVVA7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYXAgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlY29uZCBwb2ludGVyIHRvIHRoZSBmaXJzdC4KKyAgICAgICAgcmV0dXJuIE1vdGlvbkV2ZW50Lm9idGFpbihtU2Vjb25kUG9pbnRlckRvd25UaW1lLCBldmVudC5nZXRFdmVudFRpbWUoKSwgYWN0aW9uLAorICAgICAgICAgICAgICAgIGV2ZW50LmdldFgoMSksIGV2ZW50LmdldFkoMSksIGV2ZW50LmdldFByZXNzdXJlKDEpLCBldmVudC5nZXRTaXplKDEpLAorICAgICAgICAgICAgICAgIGV2ZW50LmdldE1ldGFTdGF0ZSgpLCBldmVudC5nZXRYUHJlY2lzaW9uKCksIGV2ZW50LmdldFlQcmVjaXNpb24oKSwKKyAgICAgICAgICAgICAgICBldmVudC5nZXREZXZpY2VJZCgpLCBldmVudC5nZXRFZGdlRmxhZ3MoKSk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbnB1dEZpbHRlci5qYXZhIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlJbnB1dEZpbHRlci5qYXZhCmluZGV4IDVmNmNiZjkuLjIzMmMwODAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW5wdXRGaWx0ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUlucHV0RmlsdGVyLmphdmEKQEAgLTY5LDYgKzY5LDEzIEBACiAgICAgICovCiAgICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZFQVRVUkVfQVVUT0NMSUNLID0gMHgwMDAwMDAwODsKIAorICAgIC8qKgorICAgICAqIEZsYWcgZm9yIGVuYWJsaW5nIG1vdGlvbiBldmVudCBpbmplY3RzaW9uCisgICAgICoKKyAgICAgKiBAc2VlICNzZXRVc2VyQW5kRW5hYmxlZEZlYXR1cmVzKGludCwgaW50KQorICAgICAqLworICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GRUFUVVJFX0lOSkVDVF9NT1RJT05fRVZFTlRTID0gMHgwMDAwMDAxMDsKKwogICAgIHByaXZhdGUgZmluYWwgUnVubmFibGUgbVByb2Nlc3NCYXRjaGVkRXZlbnRzUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7CiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CkBAIC0xMDQsNiArMTExLDggQEAKIAogICAgIHByaXZhdGUgTWFnbmlmaWNhdGlvbkdlc3R1cmVIYW5kbGVyIG1NYWduaWZpY2F0aW9uR2VzdHVyZUhhbmRsZXI7CiAKKyAgICBwcml2YXRlIE1vdGlvbkV2ZW50SW5qZWN0b3IgbU1vdGlvbkV2ZW50SW5qZWN0b3I7CisKICAgICBwcml2YXRlIEF1dG9jbGlja0NvbnRyb2xsZXIgbUF1dG9jbGlja0NvbnRyb2xsZXI7CiAKICAgICBwcml2YXRlIEtleWJvYXJkSW50ZXJjZXB0b3IgbUtleWJvYXJkSW50ZXJjZXB0b3I7CkBAIC0xOTEsNiArMjAwLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwdWJsaWMgTW90aW9uRXZlbnRJbmplY3RvciBnZXRNb3Rpb25FdmVudEluamVjdG9yKCkgeworICAgICAgICByZXR1cm4gbU1vdGlvbkV2ZW50SW5qZWN0b3I7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0cyBjdXJyZW50IGV2ZW50IHN0cmVhbSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggYW4gaW5wdXQgZXZlbnQuCiAgICAgICogQHJldHVybiBUaGUgZXZlbnQgc3RyZWFtIHN0YXRlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBldmVudC4gTnVsbCBpZiB0aGUgZXZlbnQgc2hvdWxkCkBAIC0zNTEsNiArMzY0LDEyIEBACiAgICAgcHJpdmF0ZSB2b2lkIGVuYWJsZUZlYXR1cmVzKCkgewogICAgICAgICByZXNldFN0cmVhbVN0YXRlKCk7CiAKKyAgICAgICAgaWYgKChtRW5hYmxlZEZlYXR1cmVzICYgRkxBR19GRUFUVVJFX0lOSkVDVF9NT1RJT05fRVZFTlRTKSAhPSAwKSB7CisgICAgICAgICAgICBtTW90aW9uRXZlbnRJbmplY3RvciA9IG5ldyBNb3Rpb25FdmVudEluamVjdG9yKG1Db250ZXh0LmdldE1haW5Mb29wZXIoKSk7CisgICAgICAgICAgICBhZGRGaXJzdEV2ZW50SGFuZGxlcihtTW90aW9uRXZlbnRJbmplY3Rvcik7CisgICAgICAgICAgICBtQW1zLnNldE1vdGlvbkV2ZW50SW5qZWN0b3IobU1vdGlvbkV2ZW50SW5qZWN0b3IpOworICAgICAgICB9CisKICAgICAgICAgaWYgKChtRW5hYmxlZEZlYXR1cmVzICYgRkxBR19GRUFUVVJFX0FVVE9DTElDSykgIT0gMCkgewogICAgICAgICAgICAgbUF1dG9jbGlja0NvbnRyb2xsZXIgPSBuZXcgQXV0b2NsaWNrQ29udHJvbGxlcihtQ29udGV4dCwgbVVzZXJJZCk7CiAgICAgICAgICAgICBhZGRGaXJzdEV2ZW50SGFuZGxlcihtQXV0b2NsaWNrQ29udHJvbGxlcik7CkBAIC0zODgsNiArNDA3LDExIEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRpc2FibGVGZWF0dXJlcygpIHsKKyAgICAgICAgaWYgKG1Nb3Rpb25FdmVudEluamVjdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1BbXMuc2V0TW90aW9uRXZlbnRJbmplY3RvcihudWxsKTsKKyAgICAgICAgICAgIG1Nb3Rpb25FdmVudEluamVjdG9yLm9uRGVzdHJveSgpOworICAgICAgICAgICAgbU1vdGlvbkV2ZW50SW5qZWN0b3IgPSBudWxsOworICAgICAgICB9CiAgICAgICAgIGlmIChtQXV0b2NsaWNrQ29udHJvbGxlciAhPSBudWxsKSB7CiAgICAgICAgICAgICBtQXV0b2NsaWNrQ29udHJvbGxlci5vbkRlc3Ryb3koKTsKICAgICAgICAgICAgIG1BdXRvY2xpY2tDb250cm9sbGVyID0gbnVsbDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA4Y2YyNWIzLi4zOWQ1OTUyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hY2Nlc3NpYmlsaXR5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKQEAgLTcyLDYgKzczLDcgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuS2V5Q2hhcmFjdGVyTWFwOwogaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuTWFnbmlmaWNhdGlvblNwZWM7CitpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dJbmZvOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VySW50ZXJuYWw7CkBAIC0xODYsNiArMTg4LDggQEAKIAogICAgIHByaXZhdGUgS2V5RXZlbnREaXNwYXRjaGVyIG1LZXlFdmVudERpc3BhdGNoZXI7CiAKKyAgICBwcml2YXRlIE1vdGlvbkV2ZW50SW5qZWN0b3IgbU1vdGlvbkV2ZW50SW5qZWN0b3I7CisKICAgICBwcml2YXRlIGZpbmFsIFNldDxDb21wb25lbnROYW1lPiBtVGVtcENvbXBvbmVudE5hbWVTZXQgPSBuZXcgSGFzaFNldDw+KCk7CiAKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8QWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvPiBtVGVtcEFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mb0xpc3QgPQpAQCAtNzc5LDYgKzc4MywxOCBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENhbGxlZCBieSBBY2Nlc3NpYmlsaXR5SW5wdXRGaWx0ZXIgd2hlbiBpdCBjcmVhdGVzIG9yIGRlc3Ryb3lzIHRoZSBtb3Rpb25FdmVudEluamVjdG9yLgorICAgICAqIE5vdCB1c2luZyBhIGdldHRlciBiZWNhdXNlIHRoZSBBY2Nlc3NpYmlsaXR5SW5wdXRGaWx0ZXIgaXNuJ3QgdGhyZWFkLXNhZmUKKyAgICAgKgorICAgICAqIEBwYXJhbSBtb3Rpb25FdmVudEluamVjdG9yIFRoZSBuZXcgdmFsdWUgb2YgdGhlIG1vdGlvbkV2ZW50SW5qZWN0b3IuIE1heSBiZSBudWxsLgorICAgICAqLworICAgIHZvaWQgc2V0TW90aW9uRXZlbnRJbmplY3RvcihNb3Rpb25FdmVudEluamVjdG9yIG1vdGlvbkV2ZW50SW5qZWN0b3IpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgbU1vdGlvbkV2ZW50SW5qZWN0b3IgPSBtb3Rpb25FdmVudEluamVjdG9yOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCiAgICAgICogR2V0cyBhIHBvaW50IHdpdGhpbiB0aGUgYWNjZXNzaWJpbGl0eSBmb2N1c2VkIG5vZGUgd2hlcmUgd2UgY2FuIHNlbmQgZG93bgogICAgICAqIGFuZCB1cCBldmVudHMgdG8gcGVyZm9ybSBhIGNsaWNrLgogICAgICAqCkBAIC0xMjczLDYgKzEyODksOSBAQAogICAgICAgICAgICAgaWYgKHVzZXJTdGF0ZS5tSXNBdXRvY2xpY2tFbmFibGVkKSB7CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gQWNjZXNzaWJpbGl0eUlucHV0RmlsdGVyLkZMQUdfRkVBVFVSRV9BVVRPQ0xJQ0s7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodXNlclN0YXRlLm1Jc1BlcmZvcm1HZXN0dXJlc0VuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBBY2Nlc3NpYmlsaXR5SW5wdXRGaWx0ZXIuRkxBR19GRUFUVVJFX0lOSkVDVF9NT1RJT05fRVZFTlRTOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApIHsKICAgICAgICAgICAgICAgICBpZiAoIW1IYXNJbnB1dEZpbHRlcikgewogICAgICAgICAgICAgICAgICAgICBtSGFzSW5wdXRGaWx0ZXIgPSB0cnVlOwpAQCAtMTM2Myw2ICsxMzgyLDcgQEAKICAgICAgICAgdXBkYXRlQWNjZXNzaWJpbGl0eUZvY3VzQmVoYXZpb3JMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgdXBkYXRlRmlsdGVyS2V5RXZlbnRzTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHVwZGF0ZVRvdWNoRXhwbG9yYXRpb25Mb2NrZWQodXNlclN0YXRlKTsKKyAgICAgICAgdXBkYXRlUGVyZm9ybUdlc3R1cmVzTG9ja2VkKHVzZXJTdGF0ZSk7CiAgICAgICAgIHVwZGF0ZUVuaGFuY2VkV2ViQWNjZXNzaWJpbGl0eUxvY2tlZCh1c2VyU3RhdGUpOwogICAgICAgICB1cGRhdGVEaXNwbGF5Q29sb3JBZGp1c3RtZW50U2V0dGluZ3NMb2NrZWQodXNlclN0YXRlKTsKICAgICAgICAgdXBkYXRlTWFnbmlmaWNhdGlvbkxvY2tlZCh1c2VyU3RhdGUpOwpAQCAtMTQ1MSw2ICsxNDcxLDE5IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlUGVyZm9ybUdlc3R1cmVzTG9ja2VkKFVzZXJTdGF0ZSB1c2VyU3RhdGUpIHsKKyAgICAgICAgZmluYWwgaW50IHNlcnZpY2VDb3VudCA9IHVzZXJTdGF0ZS5tQm91bmRTZXJ2aWNlcy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VydmljZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IHVzZXJTdGF0ZS5tQm91bmRTZXJ2aWNlcy5nZXQoaSk7CisgICAgICAgICAgICBpZiAoKHNlcnZpY2UubUFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mby5nZXRDYXBhYmlsaXRpZXMoKQorICAgICAgICAgICAgICAgICAgICAmIEFjY2Vzc2liaWxpdHlTZXJ2aWNlSW5mby5DQVBBQklMSVRZX0NBTl9QRVJGT1JNX0dFU1RVUkVTKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdXNlclN0YXRlLm1Jc1BlcmZvcm1HZXN0dXJlc0VuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB1c2VyU3RhdGUubUlzUGVyZm9ybUdlc3R1cmVzRW5hYmxlZCA9IGZhbHNlOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVGaWx0ZXJLZXlFdmVudHNMb2NrZWQoVXNlclN0YXRlIHVzZXJTdGF0ZSkgewogICAgICAgICBmaW5hbCBpbnQgc2VydmljZUNvdW50ID0gdXNlclN0YXRlLm1Cb3VuZFNlcnZpY2VzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2aWNlQ291bnQ7IGkrKykgewpAQCAtMjU2NCw2ICsyNTk3LDIzIEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc2VuZE1vdGlvbkV2ZW50cyhpbnQgc2VxdWVuY2UsIFBhcmNlbGVkTGlzdFNsaWNlIGV2ZW50cykgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgICAgIGlmIChtU2VjdXJpdHlQb2xpY3kuY2FuUGVyZm9ybUdlc3R1cmVzKHRoaXMpICYmIChtTW90aW9uRXZlbnRJbmplY3RvciAhPSBudWxsKSkgeworICAgICAgICAgICAgICAgICAgICBtTW90aW9uRXZlbnRJbmplY3Rvci5pbmplY3RFdmVudHMoKExpc3Q8TW90aW9uRXZlbnQ+KSBldmVudHMuZ2V0TGlzdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlSW50ZXJmYWNlLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlSW50ZXJmYWNlLm9uUGVyZm9ybUdlc3R1cmVSZXN1bHQoc2VxdWVuY2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3Igc2VuZGluZyBtb3Rpb24gZXZlbnQgaW5qZWN0aW9uIGZhaWx1cmUgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBtU2VydmljZUludGVyZmFjZSwgcmUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBib29sZWFuIHBlcmZvcm1BY2Nlc3NpYmlsaXR5QWN0aW9uKGludCBhY2Nlc3NpYmlsaXR5V2luZG93SWQsCiAgICAgICAgICAgICAgICAgbG9uZyBhY2Nlc3NpYmlsaXR5Tm9kZUlkLCBpbnQgYWN0aW9uLCBCdW5kbGUgYXJndW1lbnRzLCBpbnQgaW50ZXJhY3Rpb25JZCwKICAgICAgICAgICAgICAgICBJQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ29ubmVjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBsb25nIGludGVycm9nYXRpbmdUaWQpCkBAIC0zNzM0LDYgKzM3ODQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgJiBBY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uQ0FQQUJJTElUWV9DQU5fQ09OVFJPTF9NQUdOSUZJQ0FUSU9OKSAhPSAwOwogICAgICAgICB9CiAKKyAgICAgICAgcHVibGljIGJvb2xlYW4gY2FuUGVyZm9ybUdlc3R1cmVzKFNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIChzZXJ2aWNlLm1BY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uZ2V0Q2FwYWJpbGl0aWVzKCkKKyAgICAgICAgICAgICAgICAgICAgJiBBY2Nlc3NpYmlsaXR5U2VydmljZUluZm8uQ0FQQUJJTElUWV9DQU5fUEVSRk9STV9HRVNUVVJFUykgIT0gMDsKKyAgICAgICAgfQorCiAgICAgICAgIHByaXZhdGUgaW50IHJlc29sdmVQcm9maWxlUGFyZW50TG9ja2VkKGludCB1c2VySWQpIHsKICAgICAgICAgICAgIGlmICh1c2VySWQgIT0gbUN1cnJlbnRVc2VySWQpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CkBAIC0zODc4LDYgKzM5MzMsNyBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSXNFbmhhbmNlZFdlYkFjY2Vzc2liaWxpdHlFbmFibGVkOwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtSXNEaXNwbGF5TWFnbmlmaWNhdGlvbkVuYWJsZWQ7CiAgICAgICAgIHB1YmxpYyBib29sZWFuIG1Jc0F1dG9jbGlja0VuYWJsZWQ7CisgICAgICAgIHB1YmxpYyBib29sZWFuIG1Jc1BlcmZvcm1HZXN0dXJlc0VuYWJsZWQ7CiAgICAgICAgIHB1YmxpYyBib29sZWFuIG1Jc0ZpbHRlcktleUV2ZW50c0VuYWJsZWQ7CiAgICAgICAgIHB1YmxpYyBib29sZWFuIG1IYXNEaXNwbGF5Q29sb3JBZGp1c3RtZW50OwogICAgICAgICBwdWJsaWMgYm9vbGVhbiBtQWNjZXNzaWJpbGl0eUZvY3VzT25seUluQWN0aXZlV2luZG93OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYWNjZXNzaWJpbGl0eS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2Nlc3NpYmlsaXR5L01vdGlvbkV2ZW50SW5qZWN0b3IuamF2YSBiL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9Nb3Rpb25FdmVudEluamVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAwZjBlMQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2FjY2Vzc2liaWxpdHkvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjZXNzaWJpbGl0eS9Nb3Rpb25FdmVudEluamVjdG9yLmphdmEKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hY2Nlc3NpYmlsaXR5OworCitpbXBvcnQgYW5kcm9pZC5hY2Nlc3NpYmlsaXR5c2VydmljZS5JQWNjZXNzaWJpbGl0eVNlcnZpY2VDbGllbnQ7CitpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOworaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOworaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CitpbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OworaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlclBvbGljeTsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuU29tZUFyZ3M7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXJTZXJ2aWNlLlNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBJbmplY3RzIE1vdGlvbkV2ZW50cyB0byBwZXJtaXQge0Bjb2RlIEFjY2Vzc2liaWxpdHlTZXJ2aWNlfXMgdG8gdG91Y2ggdGhlIHNjcmVlbiBvbiBiZWhhbGYgb2YKKyAqIHVzZXJzLgorICoKKyAqIEFsbCBtZXRob2RzIGV4Y2VwdCB7QGNvZGUgaW5qZWN0RXZlbnRzfSBtdXN0IGJlIGNhbGxlZCBvbmx5IGZyb20gdGhlIG1haW4gdGhyZWFkLgorICovCitwdWJsaWMgY2xhc3MgTW90aW9uRXZlbnRJbmplY3RvciBpbXBsZW1lbnRzIEV2ZW50U3RyZWFtVHJhbnNmb3JtYXRpb24geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfVEFHID0gIk1vdGlvbkV2ZW50SW5qZWN0b3IiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFTkRfTU9USU9OX0VWRU5UID0gMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9JTkpFQ1RfRVZFTlRTID0gMjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1BPSU5URVJTID0gMTE7IC8vIE5vbi1iaW5kaW5nIG1heGltdW0KKworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PEJvb2xlYW4+IG1PcGVuR2VzdHVyZXNJblByb2dyZXNzID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKKworICAgIC8vIFRoZXNlIHR3byBhcnJheXMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGgKKyAgICBwcml2YXRlIE1vdGlvbkV2ZW50LlBvaW50ZXJQcm9wZXJ0aWVzW10gbVBvaW50ZXJQcm9wZXJ0aWVzID0KKyAgICAgICAgICAgIG5ldyBNb3Rpb25FdmVudC5Qb2ludGVyUHJvcGVydGllc1tNQVhfUE9JTlRFUlNdOworICAgIHByaXZhdGUgTW90aW9uRXZlbnQuUG9pbnRlckNvb3Jkc1tdIG1Qb2ludGVyQ29vcmRzID0KKyAgICAgICAgICAgIG5ldyBNb3Rpb25FdmVudC5Qb2ludGVyQ29vcmRzW01BWF9QT0lOVEVSU107CisgICAgcHJpdmF0ZSBFdmVudFN0cmVhbVRyYW5zZm9ybWF0aW9uIG1OZXh0OworICAgIHByaXZhdGUgSUFjY2Vzc2liaWxpdHlTZXJ2aWNlQ2xpZW50IG1TZXJ2aWNlSW50ZXJmYWNlRm9yQ3VycmVudEdlc3R1cmU7CisgICAgcHJpdmF0ZSBpbnQgbVNlcXVlbmNlRm9yQ3VycmVudEdlc3R1cmU7CisgICAgcHJpdmF0ZSBpbnQgbVNvdXJjZU9mSW5qZWN0ZWRHZXN0dXJlID0gSW5wdXREZXZpY2UuU09VUkNFX1VOS05PV047CisgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0Rlc3Ryb3llZCA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGxvb3BlciBBIGxvb3BlciBvbiB0aGUgbWFpbiB0aHJlYWQgdG8gdXNlIGZvciBkaXNwYXRjaGluZyBuZXcgZXZlbnRzCisgICAgICovCisgICAgcHVibGljIE1vdGlvbkV2ZW50SW5qZWN0b3IoTG9vcGVyIGxvb3BlcikgeworICAgICAgICBtSGFuZGxlciA9IG5ldyBIYW5kbGVyKGxvb3BlciwgbmV3IENhbGxiYWNrKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNjaGVkdWxlIGEgc2VyaWVzIG9mIGV2ZW50cyBmb3IgaW5qZWN0aW9uLiBUaGVzZSBldmVudHMgbXVzdCBjb21wcmlzZSBhIGNvbXBsZXRlLCB2YWxpZAorICAgICAqIHNlcXVlbmNlLiBBbGwgZ2VzdHVyZXMgY3VycmVudGx5IGluIHByb2dyZXNzIHdpbGwgYmUgY2FuY2VsbGVkLCBhbmQgYWxsIHtAY29kZSBkb3duVGltZX0KKyAgICAgKiBhbmQge0Bjb2RlIGV2ZW50VGltZX0gZmllbGRzIHdpbGwgYmUgb2Zmc2V0IGJ5IHRoZSBjdXJyZW50IHRpbWUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZXZlbnRzIFRoZSBldmVudHMgdG8gaW5qZWN0LiBNdXN0IGFsbCBiZSBmcm9tIHRoZSBzYW1lIHNvdXJjZS4KKyAgICAgKiBAcGFyYW0gc2VydmljZUludGVyZmFjZSBUaGUgaW50ZXJmYWNlIHRvIGNhbGwgYmFjayB3aXRoIGEgcmVzdWx0IHdoZW4gdGhlIGdlc3R1cmUgaXMKKyAgICAgKiBlaXRoZXIgY29tcGxldGUgb3IgY2FuY2VsbGVkLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGluamVjdEV2ZW50cyhMaXN0PE1vdGlvbkV2ZW50PiBldmVudHMsCisgICAgICAgICAgICBJQWNjZXNzaWJpbGl0eVNlcnZpY2VDbGllbnQgc2VydmljZUludGVyZmFjZSwgaW50IHNlcXVlbmNlKSB7CisgICAgICAgIFNvbWVBcmdzIGFyZ3MgPSBTb21lQXJncy5vYnRhaW4oKTsKKyAgICAgICAgYXJncy5hcmcxID0gZXZlbnRzOworICAgICAgICBhcmdzLmFyZzIgPSBzZXJ2aWNlSW50ZXJmYWNlOworICAgICAgICBhcmdzLmFyZ2kxID0gc2VxdWVuY2U7CisgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTUVTU0FHRV9JTkpFQ1RfRVZFTlRTLCBhcmdzKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25Nb3Rpb25FdmVudChNb3Rpb25FdmVudCBldmVudCwgTW90aW9uRXZlbnQgcmF3RXZlbnQsIGludCBwb2xpY3lGbGFncykgeworICAgICAgICBjYW5jZWxBbnlQZW5kaW5nSW5qZWN0ZWRFdmVudHMoKTsKKyAgICAgICAgc2VuZE1vdGlvbkV2ZW50VG9OZXh0KGV2ZW50LCByYXdFdmVudCwgcG9saWN5RmxhZ3MpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uS2V5RXZlbnQoS2V5RXZlbnQgZXZlbnQsIGludCBwb2xpY3lGbGFncykgeworICAgICAgICBpZiAobU5leHQgIT0gbnVsbCkgeworICAgICAgICAgICAgbU5leHQub25LZXlFdmVudChldmVudCwgcG9saWN5RmxhZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25BY2Nlc3NpYmlsaXR5RXZlbnQoQWNjZXNzaWJpbGl0eUV2ZW50IGV2ZW50KSB7CisgICAgICAgIGlmIChtTmV4dCAhPSBudWxsKSB7CisgICAgICAgICAgICBtTmV4dC5vbkFjY2Vzc2liaWxpdHlFdmVudChldmVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXROZXh0KEV2ZW50U3RyZWFtVHJhbnNmb3JtYXRpb24gbmV4dCkgeworICAgICAgICBtTmV4dCA9IG5leHQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgY2xlYXJFdmVudHMoaW50IGlucHV0U291cmNlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlc2V0IHN0YXRlIGZvciBtb3Rpb24gZXZlbnRzIHBhc3NpbmcgdGhyb3VnaCBzbyB3ZSB3b24ndCBzZW5kIGEgY2FuY2VsIGV2ZW50IGZvcgorICAgICAgICAgKiB0aGVtLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCFtSGFuZGxlci5oYXNNZXNzYWdlcyhNRVNTQUdFX1NFTkRfTU9USU9OX0VWRU5UKSkgeworICAgICAgICAgICAgbU9wZW5HZXN0dXJlc0luUHJvZ3Jlc3MucHV0KGlucHV0U291cmNlLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvbkRlc3Ryb3koKSB7CisgICAgICAgIGNhbmNlbEFueVBlbmRpbmdJbmplY3RlZEV2ZW50cygpOworICAgICAgICBtSXNEZXN0cm95ZWQgPSB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBpbmplY3RFdmVudHNNYWluVGhyZWFkKExpc3Q8TW90aW9uRXZlbnQ+IGV2ZW50cywKKyAgICAgICAgICAgIElBY2Nlc3NpYmlsaXR5U2VydmljZUNsaWVudCBzZXJ2aWNlSW50ZXJmYWNlLCBpbnQgc2VxdWVuY2UpIHsKKyAgICAgICAgaWYgKG1Jc0Rlc3Ryb3llZCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlLm9uUGVyZm9ybUdlc3R1cmVSZXN1bHQoc2VxdWVuY2UsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3Igc2VuZGluZyBzdGF0dXMgd2l0aCBtSXNEZXN0cm95ZWQgdG8gIiArIHNlcnZpY2VJbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICByZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FuY2VsQW55UGVuZGluZ0luamVjdGVkRXZlbnRzKCk7CisgICAgICAgIG1Tb3VyY2VPZkluamVjdGVkR2VzdHVyZSA9IGV2ZW50cy5nZXQoMCkuZ2V0U291cmNlKCk7CisgICAgICAgIGNhbmNlbEFueUdlc3R1cmVJblByb2dyZXNzKG1Tb3VyY2VPZkluamVjdGVkR2VzdHVyZSk7CisgICAgICAgIG1TZXJ2aWNlSW50ZXJmYWNlRm9yQ3VycmVudEdlc3R1cmUgPSBzZXJ2aWNlSW50ZXJmYWNlOworICAgICAgICBtU2VxdWVuY2VGb3JDdXJyZW50R2VzdHVyZSA9IHNlcXVlbmNlOworICAgICAgICBpZiAobU5leHQgPT0gbnVsbCkgeworICAgICAgICAgICAgbm90aWZ5U2VydmljZShmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsb25nIHN0YXJ0VGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV2ZW50cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgTW90aW9uRXZlbnQgZXZlbnQgPSBldmVudHMuZ2V0KGkpOworICAgICAgICAgICAgaW50IG51bVBvaW50ZXJzID0gZXZlbnQuZ2V0UG9pbnRlckNvdW50KCk7CisgICAgICAgICAgICBpZiAobnVtUG9pbnRlcnMgPiBtUG9pbnRlckNvb3Jkcy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBtUG9pbnRlckNvb3JkcyA9IG5ldyBNb3Rpb25FdmVudC5Qb2ludGVyQ29vcmRzW251bVBvaW50ZXJzXTsKKyAgICAgICAgICAgICAgICBtUG9pbnRlclByb3BlcnRpZXMgPSBuZXcgTW90aW9uRXZlbnQuUG9pbnRlclByb3BlcnRpZXNbbnVtUG9pbnRlcnNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBudW1Qb2ludGVyczsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Qb2ludGVyQ29vcmRzW2pdID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJDb29yZHNbal0gPSBuZXcgTW90aW9uRXZlbnQuUG9pbnRlckNvb3JkcygpOworICAgICAgICAgICAgICAgICAgICBtUG9pbnRlclByb3BlcnRpZXNbal0gPSBuZXcgTW90aW9uRXZlbnQuUG9pbnRlclByb3BlcnRpZXMoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXZlbnQuZ2V0UG9pbnRlckNvb3JkcyhqLCBtUG9pbnRlckNvb3Jkc1tqXSk7CisgICAgICAgICAgICAgICAgZXZlbnQuZ2V0UG9pbnRlclByb3BlcnRpZXMoaiwgbVBvaW50ZXJQcm9wZXJ0aWVzW2pdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIE1vdGlvbkV2ZW50IGRvZXNuJ3QgaGF2ZSBhIHNldEV2ZW50VGltZSgpIG1ldGhvZCAoaXQgY2FycmllcyBhcm91bmQgaGlzdG9yeSBkYXRhLAorICAgICAgICAgICAgICogd2hpY2ggY291bGQgYmVjb21lIGluY29uc2lzdGVudCksIHNvIHdlIG5lZWQgdG8gb2J0YWluIGEgbmV3IG9uZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgTW90aW9uRXZlbnQgb2Zmc2V0RXZlbnQgPSBNb3Rpb25FdmVudC5vYnRhaW4oc3RhcnRUaW1lICsgZXZlbnQuZ2V0RG93blRpbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lICsgZXZlbnQuZ2V0RXZlbnRUaW1lKCksIGV2ZW50LmdldEFjdGlvbigpLCBudW1Qb2ludGVycywKKyAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJQcm9wZXJ0aWVzLCBtUG9pbnRlckNvb3JkcywgZXZlbnQuZ2V0TWV0YVN0YXRlKCksCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEJ1dHRvblN0YXRlKCksIGV2ZW50LmdldFhQcmVjaXNpb24oKSwgZXZlbnQuZ2V0WVByZWNpc2lvbigpLAorICAgICAgICAgICAgICAgICAgICBldmVudC5nZXREZXZpY2VJZCgpLCBldmVudC5nZXRFZGdlRmxhZ3MoKSwgZXZlbnQuZ2V0U291cmNlKCksCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEZsYWdzKCkpOworICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbUhhbmRsZXIub2J0YWluTWVzc2FnZShNRVNTQUdFX1NFTkRfTU9USU9OX0VWRU5ULCBvZmZzZXRFdmVudCk7CisgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZURlbGF5ZWQobWVzc2FnZSwgZXZlbnQuZ2V0RXZlbnRUaW1lKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmRNb3Rpb25FdmVudFRvTmV4dChNb3Rpb25FdmVudCBldmVudCwgTW90aW9uRXZlbnQgcmF3RXZlbnQsCisgICAgICAgICAgICBpbnQgcG9saWN5RmxhZ3MpIHsKKyAgICAgICAgaWYgKG1OZXh0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1OZXh0Lm9uTW90aW9uRXZlbnQoZXZlbnQsIHJhd0V2ZW50LCBwb2xpY3lGbGFncyk7CisgICAgICAgICAgICBpZiAoZXZlbnQuZ2V0QWN0aW9uTWFza2VkKCkgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKKyAgICAgICAgICAgICAgICBtT3Blbkdlc3R1cmVzSW5Qcm9ncmVzcy5wdXQoZXZlbnQuZ2V0U291cmNlKCksIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChldmVudC5nZXRBY3Rpb25NYXNrZWQoKSA9PSBNb3Rpb25FdmVudC5BQ1RJT05fVVApCisgICAgICAgICAgICAgICAgICAgIHx8IChldmVudC5nZXRBY3Rpb25NYXNrZWQoKSA9PSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMKSkgeworICAgICAgICAgICAgICAgIG1PcGVuR2VzdHVyZXNJblByb2dyZXNzLnB1dChldmVudC5nZXRTb3VyY2UoKSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNhbmNlbEFueUdlc3R1cmVJblByb2dyZXNzKGludCBzb3VyY2UpIHsKKyAgICAgICAgaWYgKChtTmV4dCAhPSBudWxsKSAmJiBtT3Blbkdlc3R1cmVzSW5Qcm9ncmVzcy5nZXQoc291cmNlLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CisgICAgICAgICAgICBNb3Rpb25FdmVudCBjYW5jZWxFdmVudCA9CisgICAgICAgICAgICAgICAgICAgIE1vdGlvbkV2ZW50Lm9idGFpbihub3csIG5vdywgTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTCwgMC4wZiwgMC4wZiwgMCk7CisgICAgICAgICAgICBzZW5kTW90aW9uRXZlbnRUb05leHQoY2FuY2VsRXZlbnQsIGNhbmNlbEV2ZW50LAorICAgICAgICAgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyUG9saWN5LkZMQUdfUEFTU19UT19VU0VSKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjYW5jZWxBbnlQZW5kaW5nSW5qZWN0ZWRFdmVudHMoKSB7CisgICAgICAgIGlmIChtSGFuZGxlci5oYXNNZXNzYWdlcyhNRVNTQUdFX1NFTkRfTU9USU9OX0VWRU5UKSkgeworICAgICAgICAgICAgY2FuY2VsQW55R2VzdHVyZUluUHJvZ3Jlc3MobVNvdXJjZU9mSW5qZWN0ZWRHZXN0dXJlKTsKKyAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE1FU1NBR0VfU0VORF9NT1RJT05fRVZFTlQpOworICAgICAgICAgICAgbm90aWZ5U2VydmljZShmYWxzZSk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBub3RpZnlTZXJ2aWNlKGJvb2xlYW4gc3VjY2VzcykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVNlcnZpY2VJbnRlcmZhY2VGb3JDdXJyZW50R2VzdHVyZS5vblBlcmZvcm1HZXN0dXJlUmVzdWx0KAorICAgICAgICAgICAgICAgICAgICBtU2VxdWVuY2VGb3JDdXJyZW50R2VzdHVyZSwgc3VjY2Vzcyk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgU2xvZy5lKExPR19UQUcsICJFcnJvciBzZW5kaW5nIG1vdGlvbiBldmVudCBpbmplY3Rpb24gc3RhdHVzIHRvICIKKyAgICAgICAgICAgICAgICAgICAgKyBtU2VydmljZUludGVyZmFjZUZvckN1cnJlbnRHZXN0dXJlLCByZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIENhbGxiYWNrIGltcGxlbWVudHMgSGFuZGxlci5DYWxsYmFjayB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYW5kbGVNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSkgeworICAgICAgICAgICAgaWYgKG1lc3NhZ2Uud2hhdCA9PSBNRVNTQUdFX0lOSkVDVF9FVkVOVFMpIHsKKyAgICAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gKFNvbWVBcmdzKSBtZXNzYWdlLm9iajsKKyAgICAgICAgICAgICAgICBpbmplY3RFdmVudHNNYWluVGhyZWFkKChMaXN0PE1vdGlvbkV2ZW50PikgYXJncy5hcmcxLAorICAgICAgICAgICAgICAgICAgICAgICAgKElBY2Nlc3NpYmlsaXR5U2VydmljZUNsaWVudCkgYXJncy5hcmcyLCBhcmdzLmFyZ2kxKTsKKyAgICAgICAgICAgICAgICBhcmdzLnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZXNzYWdlLndoYXQgIT0gTUVTU0FHRV9TRU5EX01PVElPTl9FVkVOVCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gbWVzc2FnZTogIiArIG1lc3NhZ2Uud2hhdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBNb3Rpb25FdmVudCBtb3Rpb25FdmVudCA9IChNb3Rpb25FdmVudCkgbWVzc2FnZS5vYmo7CisgICAgICAgICAgICBzZW5kTW90aW9uRXZlbnRUb05leHQobW90aW9uRXZlbnQsIG1vdGlvbkV2ZW50LAorICAgICAgICAgICAgICAgICAgICBXaW5kb3dNYW5hZ2VyUG9saWN5LkZMQUdfUEFTU19UT19VU0VSKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIHF1ZXVlIGlzIG5vdyBlbXB0eSwgdGhlbiB0aGlzIGdlc3R1cmUgaXMgY29tcGxldGUKKyAgICAgICAgICAgIGlmICghbUhhbmRsZXIuaGFzTWVzc2FnZXMoTUVTU0FHRV9TRU5EX01PVElPTl9FVkVOVCkpIHsKKyAgICAgICAgICAgICAgICBub3RpZnlTZXJ2aWNlKHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hcHB3aWRnZXQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEgYi9zZXJ2aWNlcy9hcHB3aWRnZXQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXBwd2lkZ2V0L0FwcFdpZGdldFNlcnZpY2VJbXBsLmphdmEKaW5kZXggMjVmZWYxOC4uZGI5MDFhYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXBwd2lkZ2V0L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FwcHdpZGdldC9BcHBXaWRnZXRTZXJ2aWNlSW1wbC5qYXZhCisrKyBiL3NlcnZpY2VzL2FwcHdpZGdldC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hcHB3aWRnZXQvQXBwV2lkZ2V0U2VydmljZUltcGwuamF2YQpAQCAtMzcsNiArMzcsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOwpAQCAtNDQsNyArNDUsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5YbWxSZXNvdXJjZVBhcnNlcjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwpAQCAtNzIsNiArNzYsNyBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlJlbW90ZVZpZXdzOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHB3aWRnZXQuSUFwcFdpZGdldEhvc3Q7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwd2lkZ2V0LklBcHBXaWRnZXRTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkJhY2tncm91bmRUaHJlYWQ7CkBAIC0xMzQsOCArMTM5LDEwIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfVkVSU0lPTiA9IDE7CiAKICAgICBwcml2YXRlIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIG1Ccm9hZGNhc3RSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOworICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IGludGVudC5nZXRJbnRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIFVzZXJIYW5kbGUuVVNFUl9OVUxMKTsKIAogICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIlJlY2VpdmVkIGJyb2FkY2FzdDogIiArIGFjdGlvbik7CkBAIC0xNDMsMTUgKzE1MCwxNiBAQAogCiAgICAgICAgICAgICBpZiAoSW50ZW50LkFDVElPTl9DT05GSUdVUkFUSU9OX0NIQU5HRUQuZXF1YWxzKGFjdGlvbikpIHsKICAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKEludGVudC5BQ1RJT05fVVNFUl9TVEFSVEVELmVxdWFscyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgb25Vc2VyU3RhcnRlZChpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLAotICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX05VTEwpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50ZW50LkFDVElPTl9VU0VSX1VOTE9DS0VELmVxdWFscyhhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgb25Vc2VyVW5sb2NrZWQodXNlcklkKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50ZW50LkFDVElPTl9VU0VSX1NUT1BQRUQuZXF1YWxzKGFjdGlvbikpIHsKLSAgICAgICAgICAgICAgICBvblVzZXJTdG9wcGVkKGludGVudC5nZXRJbnRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsCi0gICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfTlVMTCkpOworICAgICAgICAgICAgICAgIG9uVXNlclN0b3BwZWQodXNlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50ZW50LkFDVElPTl9VU0VSX1NXSVRDSEVELmVxdWFscyhhY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgcmVmcmVzaFByb2ZpbGVXaWRnZXRzTWFza2VkU3RhdGUodXNlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50ZW50LkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfQVZBSUxBQklMSVRZX0NIQU5HRUQuZXF1YWxzKGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICByZWZyZXNoV2lkZ2V0TWFza2VkU3RhdGUodXNlcklkKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgb25QYWNrYWdlQnJvYWRjYXN0UmVjZWl2ZWQoaW50ZW50LCBpbnRlbnQuZ2V0SW50RXh0cmEoCi0gICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIFVzZXJIYW5kbGUuVVNFUl9OVUxMKSk7CisgICAgICAgICAgICAgICAgb25QYWNrYWdlQnJvYWRjYXN0UmVjZWl2ZWQoaW50ZW50LCB1c2VySWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfTsKQEAgLTIwOCw2ICsyMTYsNyBAQAogICAgICAgICBtQ2FsbGJhY2tIYW5kbGVyID0gbmV3IENhbGxiYWNrSGFuZGxlcihtQ29udGV4dC5nZXRNYWluTG9vcGVyKCkpOwogICAgICAgICBtQmFja3VwUmVzdG9yZUNvbnRyb2xsZXIgPSBuZXcgQmFja3VwUmVzdG9yZUNvbnRyb2xsZXIoKTsKICAgICAgICAgbVNlY3VyaXR5UG9saWN5ID0gbmV3IFNlY3VyaXR5UG9saWN5KCk7CisKICAgICAgICAgY29tcHV0ZU1heGltdW1XaWRnZXRCaXRtYXBNZW1vcnkoKTsKICAgICAgICAgcmVnaXN0ZXJCcm9hZGNhc3RSZWNlaXZlcigpOwogICAgICAgICByZWdpc3Rlck9uQ3Jvc3NQcm9maWxlUHJvdmlkZXJzQ2hhbmdlZExpc3RlbmVyKCk7CkBAIC0yNDksMTAgKzI1OCwxNiBAQAogICAgICAgICAgICAgICAgIHNkRmlsdGVyLCBudWxsLCBudWxsKTsKIAogICAgICAgICBJbnRlbnRGaWx0ZXIgdXNlckZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKLSAgICAgICAgdXNlckZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9VU0VSX1NUQVJURUQpOworICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfVU5MT0NLRUQpOwogICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihJbnRlbnQuQUNUSU9OX1VTRVJfU1RPUFBFRCk7CisgICAgICAgIHVzZXJGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fVVNFUl9TV0lUQ0hFRCk7CiAgICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXJBc1VzZXIobUJyb2FkY2FzdFJlY2VpdmVyLCBVc2VySGFuZGxlLkFMTCwKICAgICAgICAgICAgICAgICB1c2VyRmlsdGVyLCBudWxsLCBudWxsKTsKKworICAgICAgICBJbnRlbnRGaWx0ZXIgb2ZmTW9kZUZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKKyAgICAgICAgb2ZmTW9kZUZpbHRlci5hZGRBY3Rpb24oSW50ZW50LkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfQVZBSUxBQklMSVRZX0NIQU5HRUQpOworICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyQXNVc2VyKG1Ccm9hZGNhc3RSZWNlaXZlciwgVXNlckhhbmRsZS5BTEwsCisgICAgICAgICAgICAgICAgb2ZmTW9kZUZpbHRlciwgbnVsbCwgbnVsbCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyT25Dcm9zc1Byb2ZpbGVQcm92aWRlcnNDaGFuZ2VkTGlzdGVuZXIoKSB7CkBAIC0zMjAsNiArMzM1LDggQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgb25QYWNrYWdlQnJvYWRjYXN0UmVjZWl2ZWQoSW50ZW50IGludGVudCwgaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZCh1c2VySWQpKSByZXR1cm47CisKICAgICAgICAgZmluYWwgU3RyaW5nIGFjdGlvbiA9IGludGVudC5nZXRBY3Rpb24oKTsKICAgICAgICAgYm9vbGVhbiBhZGRlZCA9IGZhbHNlOwogICAgICAgICBib29sZWFuIGNoYW5nZWQgPSBmYWxzZTsKQEAgLTM5NSw2ICs0MTIsNTkgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJlZnJlc2ggdGhlIG1hc2tlZCBzdGF0ZSBmb3IgYWxsIHByb2ZpbGVzIHVuZGVyIHRoZSBnaXZlbiB1c2VyLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCByZWZyZXNoUHJvZmlsZVdpZGdldHNNYXNrZWRTdGF0ZShpbnQgdXNlcklkKSB7CisgICAgICAgIGlmICghbVVzZXJNYW5hZ2VyLmlzVXNlclVubG9ja2VkKHVzZXJJZCkpIHJldHVybjsKKyAgICAgICAgTGlzdDxVc2VySW5mbz4gcHJvZmlsZXMgPSBtVXNlck1hbmFnZXIuZ2V0RW5hYmxlZFByb2ZpbGVzKHVzZXJJZCk7CisgICAgICAgIGlmIChwcm9maWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2ZpbGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgVXNlckluZm8gdXNlciAgPSBwcm9maWxlcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgcmVmcmVzaFdpZGdldE1hc2tlZFN0YXRlKHVzZXIuaWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFzay91bm1hc2sgd2lkZ2V0cyBpbiB0aGUgZ2l2ZW4gcHJvZmlsZSwgZGVwZW5kaW5nIG9uIHRoZSBxdWlldCBzdGF0ZSBvZiB0aGUgcHJvZmlsZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVmcmVzaFdpZGdldE1hc2tlZFN0YXRlKGludCBwcm9maWxlSWQpIHsKKyAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQocHJvZmlsZUlkKSkgcmV0dXJuOworICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBVc2VySW5mbyB1c2VyICA9IG1Vc2VyTWFuYWdlci5nZXRVc2VySW5mbyhwcm9maWxlSWQpOworICAgICAgICAgICAgaWYgKCF1c2VyLmlzTWFuYWdlZFByb2ZpbGUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4gc2hvdWxkTWFzayA9IHVzZXIuaXNRdWlldE1vZGVFbmFibGVkKCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgaWNvblNpemUgPSAoaW50KSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKS5nZXREaW1lbnNpb24oCisgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuUi5kaW1lbi5hcHBfaWNvbl9zaXplKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1Qcm92aWRlcnMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIFByb3ZpZGVyIHByb3ZpZGVyID0gbVByb3ZpZGVycy5nZXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm92aWRlclVzZXJJZCA9IHByb3ZpZGVyLmdldFVzZXJJZCgpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJvdmlkZXJVc2VySWQgPT0gcHJvZmlsZUlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgd2lkZ2V0Q291bnQgPSBwcm92aWRlci53aWRnZXRzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgd2lkZ2V0Q291bnQ7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGdldCB3aWRnZXQgPSBwcm92aWRlci53aWRnZXRzLmdldChqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkTWFzaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQucmVwbGFjZVdpdGhNYXNrZWRWaWV3c0xvY2tlZChtQ29udGV4dCwgaWNvblNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldC5jbGVhck1hc2tlZFZpZXdzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlTm90aWZ5VXBkYXRlQXBwV2lkZ2V0TG9ja2VkKHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldC5nZXRFZmZlY3RpdmVWaWV3c0xvY2tlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCByZXNvbHZlSG9zdFVpZExvY2tlZChTdHJpbmcgcGtnLCBpbnQgdWlkKSB7CiAgICAgICAgIGZpbmFsIGludCBOID0gbUhvc3RzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKQEAgLTQxMCw2ICs0ODAsMTEgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgZW5zdXJlR3JvdXBTdGF0ZUxvYWRlZExvY2tlZChpbnQgdXNlcklkKSB7CisgICAgICAgIGlmICghbVVzZXJNYW5hZ2VyLmlzVXNlclVubG9ja2VkKHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJVc2VyICIgKyB1c2VySWQgKyAiIG11c3QgYmUgdW5sb2NrZWQgZm9yIHdpZGdldHMgdG8gYmUgYXZhaWxhYmxlIik7CisgICAgICAgIH0KKwogICAgICAgICBmaW5hbCBpbnRbXSBwcm9maWxlSWRzID0gbVNlY3VyaXR5UG9saWN5LmdldEVuYWJsZWRHcm91cFByb2ZpbGVJZHModXNlcklkKTsKIAogICAgICAgICAvLyBDYXJlZnVsIGxhZCwgd2UgbWF5IGhhdmUgYWxyZWFkeSBsb2FkZWQgdGhlIHN0YXRlIGZvciBzb21lCkBAIC01MTYsNyArNTkxLDcgQEAKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgV2lkZ2V0IHdpZGdldCA9IGluc3RhbmNlcy5nZXQoaSk7CiAgICAgICAgICAgICAgICAgdXBkYXRlZElkc1tpXSA9IHdpZGdldC5hcHBXaWRnZXRJZDsKLSAgICAgICAgICAgICAgICB1cGRhdGVkVmlld3MuYWRkKGNsb25lSWZMb2NhbEJpbmRlcih3aWRnZXQudmlld3MpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVkVmlld3MuYWRkKGNsb25lSWZMb2NhbEJpbmRlcih3aWRnZXQuZ2V0RWZmZWN0aXZlVmlld3NMb2NrZWQoKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdXBkYXRlZElkczsKQEAgLTExMjgsNyArMTIwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIGNhbGxpbmdQYWNrYWdlKTsKIAogICAgICAgICAgICAgaWYgKHdpZGdldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lSWZMb2NhbEJpbmRlcih3aWRnZXQudmlld3MpOworICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZUlmTG9jYWxCaW5kZXIod2lkZ2V0LmdldEVmZmVjdGl2ZVZpZXdzTG9ja2VkKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTE1NTQsOCArMTYyOSw3IEBACiAgICAgICAgICAgICAgICAgLy8gRm9yIGEgZnVsbCB1cGRhdGUgd2UgcmVwbGFjZSB0aGUgUmVtb3RlVmlld3MgY29tcGxldGVseS4KICAgICAgICAgICAgICAgICB3aWRnZXQudmlld3MgPSB2aWV3czsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2NoZWR1bGVOb3RpZnlVcGRhdGVBcHBXaWRnZXRMb2NrZWQod2lkZ2V0LCB2aWV3cyk7CisgICAgICAgICAgICBzY2hlZHVsZU5vdGlmeVVwZGF0ZUFwcFdpZGdldExvY2tlZCh3aWRnZXQsIHdpZGdldC5nZXRFZmZlY3RpdmVWaWV3c0xvY2tlZCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjEzMSw5ICsyMjA1LDExIEBACiAgICAgICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzb3VyY2VzOwogICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UmVzb3VyY2VzRm9yQXBwbGljYXRpb25Bc1VzZXIoYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldFVzZXJJZChwcm92aWRlcklkLnVpZCkpOworICAgICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQocHJvdmlkZXJJZC51aWQpOworICAgICAgICAgICAgICAgIGZpbmFsIEFwcGxpY2F0aW9uSW5mbyBhcHAgPSBwbS5nZXRBcHBsaWNhdGlvbkluZm9Bc1VzZXIoYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCB1c2VySWQpOworICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IHBtLmdldFJlc291cmNlc0ZvckFwcGxpY2F0aW9uKGFwcCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5KTsKICAgICAgICAgICAgIH0KQEAgLTIyMzQsNiArMjMxMCwxMCBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgaW50IGZsYWdzID0gUGFja2FnZU1hbmFnZXIuR0VUX01FVEFfREFUQTsKIAorICAgICAgICAgICAgLy8gV2UgcmVhbGx5IG5lZWQgcGFja2FnZXMgdG8gYmUgYXJvdW5kIGFuZCBwYXJzZWQgdG8ga25vdyBpZiB0aGV5CisgICAgICAgICAgICAvLyBwcm92aWRlIHdpZGdldHMsIGFuZCB3ZSBvbmx5IGxvYWQgd2lkZ2V0cyBhZnRlciB1c2VyIGlzIHVubG9ja2VkLgorICAgICAgICAgICAgZmxhZ3MgfD0gUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HOworCiAgICAgICAgICAgICAvLyBXaWRnZXRzIHJlZmVyZW5jaW5nIHNoYXJlZCBsaWJyYXJpZXMgbmVlZCB0byBoYXZlIHRoZWlyCiAgICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbG9hZGVkLgogICAgICAgICAgICAgZmxhZ3MgfD0gUGFja2FnZU1hbmFnZXIuR0VUX1NIQVJFRF9MSUJSQVJZX0ZJTEVTOwpAQCAtMjI0OCw3ICsyMzI4LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBvblVzZXJTdGFydGVkKGludCB1c2VySWQpIHsKKyAgICBwcml2YXRlIHZvaWQgb25Vc2VyVW5sb2NrZWQoaW50IHVzZXJJZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICBlbnN1cmVHcm91cFN0YXRlTG9hZGVkTG9ja2VkKHVzZXJJZCk7CiAKQEAgLTM1MzYsNiArMzYxNiw3IEBACiAgICAgICAgIGludCByZXN0b3JlZElkOyAgLy8gdHJhY2tpbmcgJiByZW1hcHBpbmcgYW55IHJlc3RvcmVkIHN0YXRlCiAgICAgICAgIFByb3ZpZGVyIHByb3ZpZGVyOwogICAgICAgICBSZW1vdGVWaWV3cyB2aWV3czsKKyAgICAgICAgUmVtb3RlVmlld3MgbWFza2VkVmlld3M7CiAgICAgICAgIEJ1bmRsZSBvcHRpb25zOwogICAgICAgICBIb3N0IGhvc3Q7CiAKQEAgLTM1NDMsNiArMzYyNCwzNCBAQAogICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgcmV0dXJuICJBcHBXaWRnZXRJZHsiICsgYXBwV2lkZ2V0SWQgKyAnOicgKyBob3N0ICsgJzonICsgcHJvdmlkZXIgKyAnfSc7CiAgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZXBsYWNlV2l0aE1hc2tlZFZpZXdzTG9ja2VkKENvbnRleHQgY29udGV4dCwgaW50IGljb25TaXplKSB7CisgICAgICAgICAgICBpZiAobWFza2VkVmlld3MgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hc2tlZFZpZXdzID0gbmV3IFJlbW90ZVZpZXdzKGNvbnRleHQuZ2V0UGFja2FnZU5hbWUoKSwgUi5sYXlvdXQud29ya193aWRnZXRfbWFza192aWV3KTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgRHJhd2FibGUgaWNvbiA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRBcHBsaWNhdGlvbkljb24oCisgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5pbmZvLnByb3ZpZGVyLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IGljb25TaXplOworICAgICAgICAgICAgICAgIGZpbmFsIGludCBoZWlnaHQgPSBpY29uU2l6ZTsKKyAgICAgICAgICAgICAgICBCaXRtYXAgaWNvbkJpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAod2lkdGgsIGhlaWdodCwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOworICAgICAgICAgICAgICAgIENhbnZhcyBjYW52YXMgPSBuZXcgQ2FudmFzKGljb25CaXRtYXApOworICAgICAgICAgICAgICAgIGljb24uc2V0Qm91bmRzKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIGljb24uZHJhdyhjYW52YXMpOworICAgICAgICAgICAgICAgIG1hc2tlZFZpZXdzLnNldEltYWdlVmlld0JpdG1hcChSLmlkLndvcmtfd2lkZ2V0X2FwcF9pY29uLCBpY29uQml0bWFwKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkZhaWwgdG8gZ2V0IGFwcGxpY2F0aW9uIGljb24iLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGNsZWFyTWFza2VkVmlld3NMb2NrZWQoKSB7CisgICAgICAgICAgICBtYXNrZWRWaWV3cyA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgUmVtb3RlVmlld3MgZ2V0RWZmZWN0aXZlVmlld3NMb2NrZWQoKSB7CisgICAgICAgICAgICByZXR1cm4gbWFza2VkVmlld3MgIT0gbnVsbCA/IG1hc2tlZFZpZXdzIDogdmlld3M7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQWxhcm1NYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BbGFybU1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggOTYwZmI0Yi4uNWY1N2E3NiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BbGFybU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BbGFybU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTEyMzMsMTQgKzEyMzMsNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gZGlyZWN0LWNhbGxiYWNrIGFsYXJtcyBtdXN0IGJlIHdha2V1cCBhbGFybXMgKG90aGVyd2lzZSB0aGV5IHNob3VsZCBqdXN0IGJlCi0gICAgICAgICAgICAvLyBwb3N0aW5nIHdvcmsgdG8gYSBIYW5kbGVyKQotICAgICAgICAgICAgaWYgKGRpcmVjdFJlY2VpdmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBSVENfV0FLRVVQICYmIHR5cGUgIT0gRUxBUFNFRF9SRUFMVElNRV9XQUtFVVApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiT25seSB3YWtldXAgYWxhcm1zIGNhbiB1c2UgQWxhcm1SZWNlaXZlcnMiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmICh3b3JrU291cmNlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZW5mb3JjZVBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uVVBEQVRFX0RFVklDRV9TVEFUUywKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQXBwT3BzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BcHBPcHNTZXJ2aWNlLmphdmEKaW5kZXggZWRlOTJmYi4uZTZlNjliMSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BcHBPcHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9BcHBPcHNTZXJ2aWNlLmphdmEKQEAgLTI2NSw4ICsyNjUsOCBAQAogICAgICAgICAgICAgICAgICAgICBPcHMgb3BzID0gaXQubmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBpbnQgY3VyVWlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJVaWQgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEV0YyhvcHMucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUywKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1clVpZCA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKG9wcy5wYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuZ2V0VXNlcklkKG9wcy51aWRTdGF0ZS51aWQpKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjkxLDcgKzY5MSw3IEBACiAgICAgICAgIGlmIChyZXFQYWNrYWdlTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlcVVpZCA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVxUGFja2FnZU5hbWUsIHJlcVVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXFQYWNrYWdlTmFtZSwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIHJlcVVzZXJJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIC8qIGlnbm9yZSAtIGxvY2FsIGNhbGwgKi8KICAgICAgICAgICAgIH0KQEAgLTc4OCw2ICs3ODgsOSBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc3RhcnRXYXRjaGluZ01vZGUoaW50IG9wLCBTdHJpbmcgcGFja2FnZU5hbWUsIElBcHBPcHNDYWxsYmFjayBjYWxsYmFjaykgeworICAgICAgICBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgb3AgPSAob3AgIT0gQXBwT3BzTWFuYWdlci5PUF9OT05FKSA/IEFwcE9wc01hbmFnZXIub3BUb1N3aXRjaChvcCkgOiBvcDsKICAgICAgICAgICAgIENhbGxiYWNrIGNiID0gbU1vZGVXYXRjaGVycy5nZXQoY2FsbGJhY2suYXNCaW5kZXIoKSk7CkBAIC04MTYsNiArODE5LDkgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN0b3BXYXRjaGluZ01vZGUoSUFwcE9wc0NhbGxiYWNrIGNhbGxiYWNrKSB7CisgICAgICAgIGlmIChjYWxsYmFjayA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBDYWxsYmFjayBjYiA9IG1Nb2RlV2F0Y2hlcnMucmVtb3ZlKGNhbGxiYWNrLmFzQmluZGVyKCkpOwogICAgICAgICAgICAgaWYgKGNiICE9IG51bGwpIHsKQEAgLTExNjEsNyArMTE2Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGludCBwa2dVaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gQWN0aXZpdHlUaHJlYWQuZ2V0UGFja2FnZU1hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXBwbGljYXRpb25JbmZvKHBhY2thZ2VOYW1lLCAwLCBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEFwcGxpY2F0aW9uSW5mbyhwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnVWlkID0gYXBwSW5mby51aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcml2aWxlZ2VkID0gKGFwcEluZm8ucHJpdmF0ZUZsYWdzCkBAIC0xMTcwLDYgKzExNzgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgibWVkaWEiLmVxdWFscyhwYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnVWlkID0gUHJvY2Vzcy5NRURJQV9VSUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJpdmlsZWdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImF1ZGlvc2VydmVyIi5lcXVhbHMocGFja2FnZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ1VpZCA9IFByb2Nlc3MuQVVESU9TRVJWRVJfVUlEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1ByaXZpbGVnZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0xNjM4LDcgKzE2NDksOCBAQAogICAgICAgICAgICAgaWYgKCJyb290Ii5lcXVhbHMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgcGFja2FnZVVpZCA9IDA7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhY2thZ2VVaWQgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICBwYWNrYWdlVWlkID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywgdXNlcklkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwYWNrYWdlVWlkIDwgMCkgewogICAgICAgICAgICAgICAgIGVyci5wcmludGxuKCJFcnJvcjogTm8gVUlEIGZvciAiICsgcGFja2FnZU5hbWUgKyAiIGluIHVzZXIgIiArIHVzZXJJZCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Fzc2V0QXRsYXNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0Fzc2V0QXRsYXNTZXJ2aWNlLmphdmEKaW5kZXggNDU2OWRhZS4uYjVlYTY0MSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Bc3NldEF0bGFzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQXNzZXRBdGxhc1NlcnZpY2UuamF2YQpAQCAtMTc2LDcgKzE3Niw4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHF1ZXJ5VmVyc2lvbk5hbWUoQ29udGV4dCBjb250ZXh0KSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBjb250ZXh0LmdldFBhY2thZ2VOYW1lKCk7Ci0gICAgICAgICAgICBQYWNrYWdlSW5mbyBpbmZvID0gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VJbmZvKHBhY2thZ2VOYW1lLCAwKTsKKyAgICAgICAgICAgIFBhY2thZ2VJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORyk7CiAgICAgICAgICAgICByZXR1cm4gaW5mby52ZXJzaW9uTmFtZTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIExvZy53KExPR19UQUcsICJDb3VsZCBub3QgZ2V0IHBhY2thZ2UgaW5mbyIsIGUpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CbHVldG9vdGhNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9CbHVldG9vdGhNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGYzMjljZmYuLmMxYTA4MmIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQmx1ZXRvb3RoTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0JsdWV0b290aE1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTI2OCw4ICsyNjgsOCBAQAogCiAgICAgICAgIGludCBzeXNVaVVpZCA9IC0xOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgc3lzVWlVaWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQoImNvbS5hbmRyb2lkLnN5c3RlbXVpIiwKLSAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgICAgICBzeXNVaVVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcigiY29tLmFuZHJvaWQuc3lzdGVtdWkiLAorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CiAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBTb21lIHBsYXRmb3Jtcywgc3VjaCBhcyB3ZWFyYWJsZXMgZG8gbm90IGhhdmUgYSBzeXN0ZW0gdWkuCiAgICAgICAgICAgICBMb2cudyhUQUcsICJVbmFibGUgdG8gcmVzb2x2ZSBTeXN0ZW1VSSdzIFVJRC4iLCBlKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKaW5kZXggYzcxMmE1Ni4uMzdhNmMwMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Db25uZWN0aXZpdHlTZXJ2aWNlLmphdmEKQEAgLTM0LDYgKzM0LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5OdWxsYWJsZTsKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuQnJvYWRjYXN0T3B0aW9uczsKIGltcG9ydCBhbmRyb2lkLmFwcC5Ob3RpZmljYXRpb247CiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwpAQCAtNzIsNiArNzMsNyBAQAogaW1wb3J0IGFuZHJvaWQubmV0LlVpZFJhbmdlOwogaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRmlsZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKQEAgLTI1MywxMSArMjU1LDYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfQVBQTFlfR0xPQkFMX0hUVFBfUFJPWFkgPSA5OwogCiAgICAgLyoqCi0gICAgICogdXNlZCBpbnRlcm5hbGx5IHRvIHNlbmQgYSBzdGlja3kgYnJvYWRjYXN0IGRlbGF5ZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVWRU5UX1NFTkRfU1RJQ0tZX0JST0FEQ0FTVF9JTlRFTlQgPSAxMTsKLQotICAgIC8qKgogICAgICAqIFBBQyBtYW5hZ2VyIGhhcyByZWNlaXZlZCBuZXcgcG9ydC4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRVZFTlRfUFJPWFlfSEFTX0NIQU5HRUQgPSAxNjsKQEAgLTE1MjksNiArMTUyNiw3IEBACiAgICAgICAgICAgICAgICAgbG9nKCJzZW5kU3RpY2t5QnJvYWRjYXN0OiBhY3Rpb249IiArIGludGVudC5nZXRBY3Rpb24oKSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEJ1bmRsZSBvcHRpb25zID0gbnVsbDsKICAgICAgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIGlmIChDb25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04uZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBOZXR3b3JrSW5mbyBuaSA9IGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoCkBAIC0xNTM2LDYgKzE1MzQsMTAgQEAKICAgICAgICAgICAgICAgICBpZiAobmkuZ2V0VHlwZSgpID09IENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEVfU1VQTCkgewogICAgICAgICAgICAgICAgICAgICBpbnRlbnQuc2V0QWN0aW9uKENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FDVElPTl9TVVBMKTsKICAgICAgICAgICAgICAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX1JFR0lTVEVSRURfT05MWSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQnJvYWRjYXN0T3B0aW9ucyBvcHRzID0gQnJvYWRjYXN0T3B0aW9ucy5tYWtlQmFzaWMoKTsKKyAgICAgICAgICAgICAgICAgICAgb3B0cy5zZXRNYXhNYW5pZmVzdFJlY2VpdmVyQXBpTGV2ZWwoQnVpbGQuVkVSU0lPTl9DT0RFUy5NKTsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdHMudG9CdW5kbGUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZmluYWwgSUJhdHRlcnlTdGF0cyBicyA9IEJhdHRlcnlTdGF0c1NlcnZpY2UuZ2V0U2VydmljZSgpOwogICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0xNTQ2LDcgKzE1NDgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbUNvbnRleHQuc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5zZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5BTEwsIG9wdGlvbnMpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICB9CkBAIC0yNTA4LDExICsyNTEwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVwcmVjYXRlZEdsb2JhbEh0dHBQcm94eSgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBFVkVOVF9TRU5EX1NUSUNLWV9CUk9BRENBU1RfSU5URU5UOiB7Ci0gICAgICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSAoSW50ZW50KW1zZy5vYmo7Ci0gICAgICAgICAgICAgICAgICAgIHNlbmRTdGlja3lCcm9hZGNhc3QoaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgRVZFTlRfUFJPWFlfSEFTX0NIQU5HRUQ6IHsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQXBwbHlEZWZhdWx0UHJveHkoKFByb3h5SW5mbyltc2cub2JqKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00ODUxLDYgKzQ4NDgsMTEgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldENhcHRpdmVQb3J0YWxTZXJ2ZXJVcmwoKSB7CisgICAgICAgIHJldHVybiBOZXR3b3JrTW9uaXRvci5nZXRDYXB0aXZlUG9ydGFsU2VydmVyVXJsKG1Db250ZXh0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzdGFydE5hdHRLZWVwYWxpdmUoTmV0d29yayBuZXR3b3JrLCBpbnQgaW50ZXJ2YWxTZWNvbmRzLCBNZXNzZW5nZXIgbWVzc2VuZ2VyLAogICAgICAgICAgICAgSUJpbmRlciBiaW5kZXIsIFN0cmluZyBzcmNBZGRyLCBpbnQgc3JjUG9ydCwgU3RyaW5nIGRzdEFkZHIpIHsKICAgICAgICAgZW5mb3JjZUtlZXBhbGl2ZVBlcm1pc3Npb24oKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRGV2aWNlSWRsZUNvbnRyb2xsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvRGV2aWNlSWRsZUNvbnRyb2xsZXIuamF2YQppbmRleCBmNWVkODNlLi5iZDk1ODkyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0RldmljZUlkbGVDb250cm9sbGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9EZXZpY2VJZGxlQ29udHJvbGxlci5qYXZhCkBAIC0xMDUyLDEyICsxMDUyLDExIEBACiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8YWxsb3dQb3dlckV4Y2VwdElkbGUuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnID0gYWxsb3dQb3dlckV4Y2VwdElkbGUudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gYWkgPSBwbS5nZXRBcHBsaWNhdGlvbkluZm8ocGtnLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChhaS5mbGFncyZBcHBsaWNhdGlvbkluZm8uRkxBR19TWVNURU0pICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBpZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQoYWkudWlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Qb3dlclNhdmVXaGl0ZWxpc3RBcHBzRXhjZXB0SWRsZS5wdXQoYWkucGFja2FnZU5hbWUsIGFwcGlkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Qb3dlclNhdmVXaGl0ZWxpc3RTeXN0ZW1BcHBJZHNFeGNlcHRJZGxlLnB1dChhcHBpZCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25JbmZvIGFpID0gcG0uZ2V0QXBwbGljYXRpb25JbmZvKHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSk7CisgICAgICAgICAgICAgICAgICAgIGludCBhcHBpZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQoYWkudWlkKTsKKyAgICAgICAgICAgICAgICAgICAgbVBvd2VyU2F2ZVdoaXRlbGlzdEFwcHNFeGNlcHRJZGxlLnB1dChhaS5wYWNrYWdlTmFtZSwgYXBwaWQpOworICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0U3lzdGVtQXBwSWRzRXhjZXB0SWRsZS5wdXQoYXBwaWQsIHRydWUpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTA2NSwxNiArMTA2NCwxNSBAQAogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGFsbG93UG93ZXIuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnID0gYWxsb3dQb3dlci52YWx1ZUF0KGkpOwogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhaSA9IHBtLmdldEFwcGxpY2F0aW9uSW5mbyhwa2csIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoKGFpLmZsYWdzJkFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFwcGlkID0gVXNlckhhbmRsZS5nZXRBcHBJZChhaS51aWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXBwcyBhcmUgb24gYm90aCB0aGUgd2hpdGVsaXN0LWV4Y2VwdC1pZGxlIGFzIHdlbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBmdWxsIHdoaXRlbGlzdCwgc28gdGhleSBhcHBseSBpbiBhbGwgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0QXBwc0V4Y2VwdElkbGUucHV0KGFpLnBhY2thZ2VOYW1lLCBhcHBpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0U3lzdGVtQXBwSWRzRXhjZXB0SWRsZS5wdXQoYXBwaWQsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVBvd2VyU2F2ZVdoaXRlbGlzdEFwcHMucHV0KGFpLnBhY2thZ2VOYW1lLCBhcHBpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0U3lzdGVtQXBwSWRzLnB1dChhcHBpZCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25JbmZvIGFpID0gcG0uZ2V0QXBwbGljYXRpb25JbmZvKHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSk7CisgICAgICAgICAgICAgICAgICAgIGludCBhcHBpZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQoYWkudWlkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXBwcyBhcmUgb24gYm90aCB0aGUgd2hpdGVsaXN0LWV4Y2VwdC1pZGxlIGFzIHdlbGwKKyAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIGZ1bGwgd2hpdGVsaXN0LCBzbyB0aGV5IGFwcGx5IGluIGFsbCBjYXNlcy4KKyAgICAgICAgICAgICAgICAgICAgbVBvd2VyU2F2ZVdoaXRlbGlzdEFwcHNFeGNlcHRJZGxlLnB1dChhaS5wYWNrYWdlTmFtZSwgYXBwaWQpOworICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0U3lzdGVtQXBwSWRzRXhjZXB0SWRsZS5wdXQoYXBwaWQsIHRydWUpOworICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0QXBwcy5wdXQoYWkucGFja2FnZU5hbWUsIGFwcGlkKTsKKyAgICAgICAgICAgICAgICAgICAgbVBvd2VyU2F2ZVdoaXRlbGlzdFN5c3RlbUFwcElkcy5wdXQoYXBwaWQsIHRydWUpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE4Miw5ICsxMTgwLDcgQEAKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhaSA9IGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEFwcGxpY2F0aW9uSW5mbyhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKTsKICAgICAgICAgICAgICAgICBpZiAobVBvd2VyU2F2ZVdoaXRlbGlzdFVzZXJBcHBzLnB1dChuYW1lLCBVc2VySGFuZGxlLmdldEFwcElkKGFpLnVpZCkpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcmVwb3J0UG93ZXJTYXZlV2hpdGVsaXN0Q2hhbmdlZExvY2tlZCgpOwogICAgICAgICAgICAgICAgICAgICB1cGRhdGVXaGl0ZWxpc3RBcHBJZHNMb2NrZWQoKTsKQEAgLTEzMjYsNyArMTMyMiw3IEBACiAgICAgdm9pZCBhZGRQb3dlclNhdmVUZW1wV2hpdGVsaXN0QXBwSW50ZXJuYWwoaW50IGNhbGxpbmdVaWQsIFN0cmluZyBwYWNrYWdlTmFtZSwKICAgICAgICAgICAgIGxvbmcgZHVyYXRpb24sIGludCB1c2VySWQsIGJvb2xlYW4gc3luYywgU3RyaW5nIHJlYXNvbikgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgaW50IHVpZCA9IGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICBpbnQgdWlkID0gZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcihwYWNrYWdlTmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgIGludCBhcHBJZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQodWlkKTsKICAgICAgICAgICAgIGFkZFBvd2VyU2F2ZVRlbXBXaGl0ZWxpc3RBcHBEaXJlY3RJbnRlcm5hbChjYWxsaW5nVWlkLCBhcHBJZCwgZHVyYXRpb24sIHN5bmMsIHJlYXNvbik7CiAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC0yMDEwLDkgKzIwMDYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhaSA9IHBtLmdldEFwcGxpY2F0aW9uSW5mbyhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfVU5USUxfVVNFRF9DT01QT05FTlRTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUG93ZXJTYXZlV2hpdGVsaXN0VXNlckFwcHMucHV0KGFpLnBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRBcHBJZChhaS51aWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0dyYXBoaWNzU3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0dyYXBoaWNzU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggM2ZkZWYxZC4uMDQ0YmIwNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9HcmFwaGljc1N0YXRzU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvR3JhcGhpY3NTdGF0c1NlcnZpY2UuamF2YQpAQCAtMTYsOSArMTYsOCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlcjsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVtb3J5RmlsZTsKQEAgLTY2LDYgKzY1LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSElTVE9SWV9TSVpFID0gMjA7CiAKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CisgICAgcHJpdmF0ZSBmaW5hbCBBcHBPcHNNYW5hZ2VyIG1BcHBPcHM7CiAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8QWN0aXZlQnVmZmVyPiBtQWN0aXZlID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgcHJpdmF0ZSBIaXN0b3JpY2FsRGF0YVtdIG1IaXN0b3JpY2FsTG9nID0gbmV3IEhpc3RvcmljYWxEYXRhW0hJU1RPUllfU0laRV07CkBAIC03NCwxNSArNzQsNyBAQAogCiAgICAgcHVibGljIEdyYXBoaWNzU3RhdHNTZXJ2aWNlKENvbnRleHQgY29udGV4dCkgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzVmFsaWQoaW50IHVpZCwgU3RyaW5nIHBhY2thZ2VOYW1lKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQYWNrYWdlSW5mbyBpbmZvID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlSW5mbyhwYWNrYWdlTmFtZSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gaW5mby5hcHBsaWNhdGlvbkluZm8udWlkID09IHVpZDsKLSAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1BcHBPcHMgPSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQXBwT3BzTWFuYWdlci5jbGFzcyk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC05Myw5ICs4NSw3IEBACiAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yIHBmZCA9IG51bGw7CiAgICAgICAgIGxvbmcgY2FsbGluZ0lkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoIWlzVmFsaWQodWlkLCBwYWNrYWdlTmFtZSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVtb3RlRXhjZXB0aW9uKCJJbnZhbGlkIHBhY2thZ2UgbmFtZSIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgbUFwcE9wcy5jaGVja1BhY2thZ2UodWlkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICAgICAgcGZkID0gcmVxdWVzdEJ1ZmZlckZvclByb2Nlc3NMb2NrZWQodG9rZW4sIHVpZCwgcGlkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0lucHV0TWV0aG9kTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDQ1YzFlZDIuLjE1YjU1MDIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvSW5wdXRNZXRob2RNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0xNjYsNiArMTY2LDcgQEAKICAgICBzdGF0aWMgZmluYWwgaW50IE1TR19TRVRfQUNUSVZFID0gMzAyMDsKICAgICBzdGF0aWMgZmluYWwgaW50IE1TR19TRVRfSU5URVJBQ1RJVkUgPSAzMDMwOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NFVF9VU0VSX0FDVElPTl9OT1RJRklDQVRJT05fU0VRVUVOQ0VfTlVNQkVSID0gMzA0MDsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1TR19TV0lUQ0hfSU1FID0gMzA1MDsKIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0hBUkRfS0VZQk9BUkRfU1dJVENIX0NIQU5HRUQgPSA0MDAwOwogCkBAIC0yMzgyLDEwICsyMzgzLDYgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKG1NZXRob2RNYXApIHsKLSAgICAgICAgICAgIGlmIChtQ3VyQ2xpZW50ID09IG51bGwgfHwgY2xpZW50ID09IG51bGwKLSAgICAgICAgICAgICAgICB8fCBtQ3VyQ2xpZW50LmNsaWVudC5hc0JpbmRlcigpICE9IGNsaWVudC5hc0JpbmRlcigpKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIklnbm9yaW5nIHNob3dJbnB1dE1ldGhvZEFuZFN1YnR5cGVFbmFibGVyRnJvbUNsaWVudCBvZjogIiArIGNsaWVudCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBleGVjdXRlT3JTZW5kTWVzc2FnZShtQ3VyTWV0aG9kLCBtQ2FsbGVyLm9idGFpbk1lc3NhZ2VPKAogICAgICAgICAgICAgICAgICAgICBNU0dfU0hPV19JTV9TVUJUWVBFX0VOQUJMRVIsIGlucHV0TWV0aG9kSWQpKTsKICAgICAgICAgfQpAQCAtMjcxNSw5ICsyNzEyLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAgICAgY2FzZSBNU0dfU0hPV19JTV9TVUJUWVBFX0VOQUJMRVI6Ci0gICAgICAgICAgICAgICAgYXJncyA9IChTb21lQXJncyltc2cub2JqOwotICAgICAgICAgICAgICAgIHNob3dJbnB1dE1ldGhvZEFuZFN1YnR5cGVFbmFibGVyKChTdHJpbmcpYXJncy5hcmcxKTsKLSAgICAgICAgICAgICAgICBhcmdzLnJlY3ljbGUoKTsKKyAgICAgICAgICAgICAgICBzaG93SW5wdXRNZXRob2RBbmRTdWJ0eXBlRW5hYmxlcigoU3RyaW5nKW1zZy5vYmopOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICBjYXNlIE1TR19TSE9XX0lNX0NPTkZJRzoKQEAgLTI4NTEsNiArMjg0Niw5IEBACiAgICAgICAgICAgICBjYXNlIE1TR19TRVRfSU5URVJBQ1RJVkU6CiAgICAgICAgICAgICAgICAgaGFuZGxlU2V0SW50ZXJhY3RpdmUobXNnLmFyZzEgIT0gMCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIE1TR19TV0lUQ0hfSU1FOgorICAgICAgICAgICAgICAgIGhhbmRsZVN3aXRjaElucHV0TWV0aG9kKG1zZy5hcmcxICE9IDApOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgY2FzZSBNU0dfU0VUX1VTRVJfQUNUSU9OX05PVElGSUNBVElPTl9TRVFVRU5DRV9OVU1CRVI6IHsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc2VxdWVuY2VOdW1iZXIgPSBtc2cuYXJnMTsKICAgICAgICAgICAgICAgICBmaW5hbCBDbGllbnRTdGF0ZSBjbGllbnRTdGF0ZSA9IChDbGllbnRTdGF0ZSltc2cub2JqOwpAQCAtMjg4Nyw2ICsyODg1LDE4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3dpdGNoSW5wdXRNZXRob2QoZmluYWwgYm9vbGVhbiBmb3J3YXJkRGlyZWN0aW9uKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgeworICAgICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBmb3J3YXJkRGlyZWN0aW9uLgorICAgICAgICAgICAgZmluYWwgSW1lU3VidHlwZUxpc3RJdGVtIG5leHRTdWJ0eXBlID0gbVN3aXRjaGluZ0NvbnRyb2xsZXIuZ2V0TmV4dElucHV0TWV0aG9kTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgbU1ldGhvZE1hcC5nZXQobUN1ck1ldGhvZElkKSwgbUN1cnJlbnRTdWJ0eXBlKTsKKyAgICAgICAgICAgIGlmIChuZXh0U3VidHlwZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0SW5wdXRNZXRob2RMb2NrZWQobmV4dFN1YnR5cGUubUltaS5nZXRJZCgpLCBuZXh0U3VidHlwZS5tU3VidHlwZUlkKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgYm9vbGVhbiBjaG9vc2VOZXdEZWZhdWx0SU1FTG9ja2VkKCkgewogICAgICAgICBmaW5hbCBJbnB1dE1ldGhvZEluZm8gaW1pID0gSW5wdXRNZXRob2RVdGlscy5nZXRNb3N0QXBwbGljYWJsZURlZmF1bHRJTUUoCiAgICAgICAgICAgICAgICAgbVNldHRpbmdzLmdldEVuYWJsZWRJbnB1dE1ldGhvZExpc3RMb2NrZWQoKSk7CkBAIC0yOTg5LDcgKzI5OTksMTEgQEAKICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShpbnB1dE1ldGhvZElkKSkgewogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKFNldHRpbmdzLkVYVFJBX0lOUFVUX01FVEhPRF9JRCwgaW5wdXRNZXRob2RJZCk7CiAgICAgICAgIH0KLSAgICAgICAgbUNvbnRleHQuc3RhcnRBY3Rpdml0eUFzVXNlcihpbnRlbnQsIG51bGwsIFVzZXJIYW5kbGUuQ1VSUkVOVCk7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQ7CisgICAgICAgIHN5bmNocm9uaXplZCAobU1ldGhvZE1hcCkgeworICAgICAgICAgICAgdXNlcklkID0gbVNldHRpbmdzLmdldEN1cnJlbnRVc2VySWQoKTsKKyAgICAgICAgfQorICAgICAgICBtQ29udGV4dC5zdGFydEFjdGl2aXR5QXNVc2VyKGludGVudCwgbnVsbCwgVXNlckhhbmRsZS5vZih1c2VySWQpKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2hvd0NvbmZpZ3VyZUlucHV0TWV0aG9kcygpIHsKQEAgLTMwMjcsNyArMzA0MSw3IEBACiAKICAgICAgICAgICAgIGZpbmFsIExpc3Q8SW1lU3VidHlwZUxpc3RJdGVtPiBpbUxpc3QgPQogICAgICAgICAgICAgICAgICAgICBtU3dpdGNoaW5nQ29udHJvbGxlci5nZXRTb3J0ZWRJbnB1dE1ldGhvZEFuZFN1YnR5cGVMaXN0TG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogc2hvd1N1YnR5cGVzICovLCBzaG93QXV4U3VidHlwZXMsIGlzU2NyZWVuTG9ja2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QXV4U3VidHlwZXMsIGlzU2NyZWVuTG9ja2VkKTsKIAogICAgICAgICAgICAgaWYgKGxhc3RJbnB1dE1ldGhvZFN1YnR5cGVJZCA9PSBOT1RfQV9TVUJUWVBFX0lEKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgSW5wdXRNZXRob2RTdWJ0eXBlIGN1cnJlbnRTdWJ0eXBlID0gZ2V0Q3VycmVudElucHV0TWV0aG9kU3VidHlwZUxvY2tlZCgpOwpAQCAtMzUzNiw2ICszNTUwLDcgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfTEFCRUwgPSAibGFiZWwiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JQ09OID0gImljb24iOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTUVfU1VCVFlQRV9MT0NBTEUgPSAiaW1lU3VidHlwZUxvY2FsZSI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lNRV9TVUJUWVBFX0xBTkdVQUdFX1RBRyA9ICJsYW5ndWFnZVRhZyI7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lNRV9TVUJUWVBFX01PREUgPSAiaW1lU3VidHlwZU1vZGUiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVRUUl9JTUVfU1VCVFlQRV9FWFRSQV9WQUxVRSA9ICJpbWVTdWJ0eXBlRXh0cmFWYWx1ZSI7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0lTX0FVWElMSUFSWSA9ICJpc0F1eGlsaWFyeSI7CkBAIC0zNjI5LDYgKzM2NDQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRSX0lDT04sIFN0cmluZy52YWx1ZU9mKHN1YnR5cGUuZ2V0SWNvblJlc0lkKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUUl9MQUJFTCwgU3RyaW5nLnZhbHVlT2Yoc3VidHlwZS5nZXROYW1lUmVzSWQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRSX0lNRV9TVUJUWVBFX0xPQ0FMRSwgc3VidHlwZS5nZXRMb2NhbGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVFJfSU1FX1NVQlRZUEVfTEFOR1VBR0VfVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmdldExhbmd1YWdlVGFnKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRSX0lNRV9TVUJUWVBFX01PREUsIHN1YnR5cGUuZ2V0TW9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUUl9JTUVfU1VCVFlQRV9FWFRSQV9WQUxVRSwgc3VidHlwZS5nZXRFeHRyYVZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCBBVFRSX0lTX0FVWElMSUFSWSwKQEAgLTM2OTAsNiArMzcwNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX0xBQkVMKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaW1lU3VidHlwZUxvY2FsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX0lNRV9TVUJUWVBFX0xPQ0FMRSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbGFuZ3VhZ2VUYWcgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9JTUVfU1VCVFlQRV9MQU5HVUFHRV9UQUcpOwogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGltZVN1YnR5cGVNb2RlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfSU1FX1NVQlRZUEVfTU9ERSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaW1lU3VidHlwZUV4dHJhVmFsdWUgPQpAQCAtMzcwMCw2ICszNzE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN1YnR5cGVOYW1lUmVzSWQobGFiZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdWJ0eXBlSWNvblJlc0lkKGljb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdWJ0eXBlTG9jYWxlKGltZVN1YnR5cGVMb2NhbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRMYW5ndWFnZVRhZyhsYW5ndWFnZVRhZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN1YnR5cGVNb2RlKGltZVN1YnR5cGVNb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U3VidHlwZUV4dHJhVmFsdWUoaW1lU3VidHlwZUV4dHJhVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRJc0F1eGlsaWFyeShpc0F1eGlsaWFyeSkKQEAgLTM3MjgsNiArMzc0OCwxMyBAQAogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UobUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfU0VUX0lOVEVSQUNUSVZFLAogICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSA/IDEgOiAwLCAwKSk7CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgc3dpdGNoSW5wdXRNZXRob2QoYm9vbGVhbiBmb3J3YXJkRGlyZWN0aW9uKSB7CisgICAgICAgICAgICAvLyBEbyBldmVyeXRoaW5nIGluIGhhbmRsZXIgc28gYXMgbm90IHRvIGJsb2NrIHRoZSBjYWxsZXIuCisgICAgICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZShtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19TV0lUQ0hfSU1FLAorICAgICAgICAgICAgICAgICAgICBmb3J3YXJkRGlyZWN0aW9uID8gMSA6IDAsIDApKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1NlcnZpY2UuamF2YQppbmRleCAwMzNhNGI4Li4zNzdkNTJmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1NlcnZpY2UuamF2YQpAQCAtMzU2LDYgKzM1NiwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKExvY2tQYXR0ZXJuVXRpbHMuTEVHQUNZX0xPQ0tfUEFUVEVSTl9FTkFCTEVELmVxdWFscyhrZXkpKSB7CisgICAgICAgICAgICBrZXkgPSBTZXR0aW5ncy5TZWN1cmUuTE9DS19QQVRURVJOX0VOQUJMRUQ7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gbVN0b3JhZ2UucmVhZEtleVZhbHVlKGtleSwgZGVmYXVsdFZhbHVlLCB1c2VySWQpOwogICAgIH0KIApAQCAtNjkxLDcgKzY5NSw3IEBACiAgICAgICAgICAgICB1bmxvY2tVc2VyKHVzZXJJZCwgdG9rZW4pOwogCiAgICAgICAgICAgICBVc2VySW5mbyBpbmZvID0gVXNlck1hbmFnZXIuZ2V0KG1Db250ZXh0KS5nZXRVc2VySW5mbyh1c2VySWQpOwotICAgICAgICAgICAgaWYgKExvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVdvcmtDaGFsbGVuZ2VFbmFibGVkKCkgJiYgaW5mby5pc01hbmFnZWRQcm9maWxlKCkpIHsKKyAgICAgICAgICAgIGlmIChtTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQodXNlcklkKSkgewogICAgICAgICAgICAgICAgIFRydXN0TWFuYWdlciB0cnVzdE1hbmFnZXIgPQogICAgICAgICAgICAgICAgICAgICAgICAgKFRydXN0TWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlRSVVNUX1NFUlZJQ0UpOwogICAgICAgICAgICAgICAgIHRydXN0TWFuYWdlci5zZXREZXZpY2VMb2NrZWRGb3JVc2VyKHVzZXJJZCwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Mb2NrU2V0dGluZ3NTdG9yYWdlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1N0b3JhZ2UuamF2YQppbmRleCAxMzdmYTI3Li44MTZjNzkxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1N0b3JhZ2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL0xvY2tTZXR0aW5nc1N0b3JhZ2UuamF2YQpAQCAtNzEsNiArNzEsNyBAQAogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1GaWxlV3JpdGVMb2NrID0gbmV3IE9iamVjdCgpOwogCiAgICAgcHJpdmF0ZSBpbnQgbVN0b3JlZENyZWRlbnRpYWxUeXBlOworICAgIHByaXZhdGUgTG9ja1BhdHRlcm5VdGlscyBtTG9ja1BhdHRlcm5VdGlsczsKIAogICAgIGNsYXNzIENyZWRlbnRpYWxIYXNoIHsKICAgICAgICAgc3RhdGljIGZpbmFsIGludCBUWVBFX05PTkUgPSAtMTsKQEAgLTEwMCw2ICsxMDEsNyBAQAogICAgIHB1YmxpYyBMb2NrU2V0dGluZ3NTdG9yYWdlKENvbnRleHQgY29udGV4dCwgQ2FsbGJhY2sgY2FsbGJhY2spIHsKICAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OwogICAgICAgICBtT3BlbkhlbHBlciA9IG5ldyBEYXRhYmFzZUhlbHBlcihjb250ZXh0LCBjYWxsYmFjayk7CisgICAgICAgIG1Mb2NrUGF0dGVyblV0aWxzID0gbmV3IExvY2tQYXR0ZXJuVXRpbHMoY29udGV4dCk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgd3JpdGVLZXlWYWx1ZShTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUsIGludCB1c2VySWQpIHsKQEAgLTM4OCw3ICszOTAsNyBAQAogCiAgICAgcHJpdmF0ZSBpbnQgZ2V0VXNlclBhcmVudE9yU2VsZklkKGludCB1c2VySWQpIHsKICAgICAgICAgLy8gRGV2aWNlIHN1cHBvcnRzIHBlciB1c2VyIGVuY3J5cHRpb24sIHNvIGxvY2sgaXMgYXBwbGllZCB0byB0aGUgZ2l2ZW4gdXNlci4KLSAgICAgICAgaWYgKExvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVdvcmtDaGFsbGVuZ2VFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1Mb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlRW5hYmxlZCh1c2VySWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gdXNlcklkOwogICAgICAgICB9CiAgICAgICAgIC8vIERldmljZSB1c2VzIEJsb2NrIEJhc2VkIEVuY3J5cHRpb24sIGFuZCB0aGUgcGFyZW50IHVzZXIncyBsb2NrIGlzIHVzZWQgZm9yIHRoZSB3aG9sZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Nb3VudFNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvTW91bnRTZXJ2aWNlLmphdmEKaW5kZXggMTg0Zjg5MC4uNGExODZhNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9Nb3VudFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL01vdW50U2VydmljZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMud3JpdGVJbnRBdHRyaWJ1dGU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHMud3JpdGVMb25nQXR0cmlidXRlOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzLndyaXRlU3RyaW5nQXR0cmlidXRlOworCiBpbXBvcnQgc3RhdGljIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UOwogaW1wb3J0IHN0YXRpYyBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyLlNUQVJUX1RBRzsKIApAQCAtODksOSArOTAsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5UaW1lVXRpbHM7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKIAotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLWltcG9ydCBsaWJjb3JlLnV0aWwuRW1wdHlBcnJheTsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSU1lZGlhQ29udGFpbmVyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5Tb21lQXJnczsKQEAgLTEwNiw2ICsxMDQsOSBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5OYXRpdmVEYWVtb25Db25uZWN0b3IuU2Vuc2l0aXZlQXJnOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QYWNrYWdlTWFuYWdlclNlcnZpY2U7CiAKK2ltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CitpbXBvcnQgbGliY29yZS51dGlsLkVtcHR5QXJyYXk7CisKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sU2VyaWFsaXplcjsKQEAgLTgwNyw4ICs4MDgsOCBAQAogICAgICAgICAgICAgICAgIC8vIFN5c3RlbSB1c2VyIGRvZXMgbm90IGhhdmUgbWVkaWEgcHJvdmlkZXIsIHNvIHNraXAuCiAgICAgICAgICAgICAgICAgaWYgKHVzZXIuaXNTeXN0ZW1Pbmx5KCkpIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgZmluYWwgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1QbXMucmVzb2x2ZUNvbnRlbnRQcm92aWRlcihNZWRpYVN0b3JlLkFVVEhPUklUWSwgMCwgdXNlci5pZCk7CisgICAgICAgICAgICAgICAgZmluYWwgUHJvdmlkZXJJbmZvIHByb3ZpZGVyID0gbVBtcy5yZXNvbHZlQ29udGVudFByb3ZpZGVyKE1lZGlhU3RvcmUuQVVUSE9SSVRZLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwgdXNlci5pZCk7CiAgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgSUFjdGl2aXR5TWFuYWdlciBhbSA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0yMzU0LDcgKzIzNTUsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgaW50IHBhY2thZ2VVaWQgPSBtUG1zLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKGNhbGxlclVpZCkpOworICAgICAgICBmaW5hbCBpbnQgcGFja2FnZVVpZCA9IG1QbXMuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKGNhbGxlclVpZCkpOwogCiAgICAgICAgIGlmIChERUJVR19PQkIpIHsKICAgICAgICAgICAgIFNsb2cuZChUQUcsICJwYWNrYWdlTmFtZSA9ICIgKyBwYWNrYWdlTmFtZSArICIsIHBhY2thZ2VVaWQgPSAiICsKQEAgLTI4MTIsOSArMjgxNCwzMyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBQYXJjZWxGaWxlRGVzY3JpcHRvciBtb3VudEFwcEZ1c2UoU3RyaW5nIG5hbWUpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPOiBJbnZva2Ugdm9sZCB0byBtb3VudCBhcHAgZnVzZS4KLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgcHVibGljIFBhcmNlbEZpbGVEZXNjcmlwdG9yIG1vdW50QXBwRnVzZShmaW5hbCBTdHJpbmcgbmFtZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKKyAgICAgICAgICAgIGZpbmFsIE5hdGl2ZURhZW1vbkV2ZW50IGV2ZW50ID0KKyAgICAgICAgICAgICAgICAgICAgbUNvbm5lY3Rvci5leGVjdXRlKCJhcHBmdXNlIiwgIm1vdW50IiwgdWlkLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChldmVudC5nZXRGaWxlRGVzY3JpcHRvcnMoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbW90ZUV4Y2VwdGlvbigiQXBwRnVzZSBGRCBmcm9tIHZvbGQgaXMgbnVsbC4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBQYXJjZWxGaWxlRGVzY3JpcHRvci5mcm9tRmQoCisgICAgICAgICAgICAgICAgICAgIGV2ZW50LmdldEZpbGVEZXNjcmlwdG9ycygpWzBdLAorICAgICAgICAgICAgICAgICAgICBtSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFBhcmNlbEZpbGVEZXNjcmlwdG9yLk9uQ2xvc2VMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbG9zZShJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgTmF0aXZlRGFlbW9uRXZlbnQgZXZlbnQgPSBtQ29ubmVjdG9yLmV4ZWN1dGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGZ1c2UiLCAidW5tb3VudCIsIHVpZCwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTmF0aXZlRGFlbW9uQ29ubmVjdG9yRXhjZXB0aW9uIHVubW91bnRFeGNlcHRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIHVubW91bnQgYXBwZnVzZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGNhdGNoIChOYXRpdmVEYWVtb25Db25uZWN0b3JFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgZS5yZXRocm93QXNQYXJjZWxhYmxlRXhjZXB0aW9uKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSZW1vdGVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0zNTkyLDEyICszNjE4LDE4IEBACiAgICAgICAgIH0KIAogICAgICAgICBwdy5wcmludGxuKCk7Ci0gICAgICAgIHB3LnByaW50bG4oIm1Db25uZWN0aW9uOiIpOworICAgICAgICBwdy5wcmludGxuKCJtQ29ubmVjdG9yOiIpOwogICAgICAgICBwdy5pbmNyZWFzZUluZGVudCgpOwogICAgICAgICBtQ29ubmVjdG9yLmR1bXAoZmQsIHB3LCBhcmdzKTsKICAgICAgICAgcHcuZGVjcmVhc2VJbmRlbnQoKTsKIAogICAgICAgICBwdy5wcmludGxuKCk7CisgICAgICAgIHB3LnByaW50bG4oIm1DcnlwdENvbm5lY3RvcjoiKTsKKyAgICAgICAgcHcuaW5jcmVhc2VJbmRlbnQoKTsKKyAgICAgICAgbUNyeXB0Q29ubmVjdG9yLmR1bXAoZmQsIHB3LCBhcmdzKTsKKyAgICAgICAgcHcuZGVjcmVhc2VJbmRlbnQoKTsKKworICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgIHB3LnByaW50KCJMYXN0IG1haW50ZW5hbmNlOiAiKTsKICAgICAgICAgcHcucHJpbnRsbihUaW1lVXRpbHMuZm9ybWF0Rm9yTG9nZ2luZyhtTGFzdE1haW50ZW5hbmNlKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9QZXJzaXN0ZW50RGF0YUJsb2NrU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9QZXJzaXN0ZW50RGF0YUJsb2NrU2VydmljZS5qYXZhCmluZGV4IGU4YjkwZDguLmEyOTFjYzcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvUGVyc2lzdGVudERhdGFCbG9ja1NlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1BlcnNpc3RlbnREYXRhQmxvY2tTZXJ2aWNlLmphdmEKQEAgLTk0LDcgKzk0LDggQEAKICAgICAgICAgUGFja2FnZU1hbmFnZXIgcG0gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICBpbnQgYWxsb3dlZFVpZCA9IC0xOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgYWxsb3dlZFVpZCA9IHBtLmdldFBhY2thZ2VVaWQoYWxsb3dlZFBhY2thZ2UsIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgYWxsb3dlZFVpZCA9IHBtLmdldFBhY2thZ2VVaWRBc1VzZXIoYWxsb3dlZFBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1NZU1RFTV9PTkxZLCB1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIG5vdCBleHBlY3RlZAogICAgICAgICAgICAgU2xvZy5lKFRBRywgIm5vdCBhYmxlIHRvIGZpbmQgcGFja2FnZSAiICsgYWxsb3dlZFBhY2thZ2UsIGUpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1Db25maWcuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU3lzdGVtQ29uZmlnLmphdmEKaW5kZXggODYxODNhZi4uNGRjNDZhYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1Db25maWcuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL1N5c3RlbUNvbmZpZy5qYXZhCkBAIC00OCw2ICs0OCwxMyBAQAogCiAgICAgc3RhdGljIFN5c3RlbUNvbmZpZyBzSW5zdGFuY2U7CiAKKyAgICAvLyBwZXJtaXNzaW9uIGZsYWcsIGRldGVybWluZXMgd2hpY2ggdHlwZXMgb2YgY29uZmlndXJhdGlvbiBhcmUgYWxsb3dlZCB0byBiZSByZWFkCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMTE9XX0ZFQVRVUkVTID0gMHgwMTsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxMT1dfTElCUyA9IDB4MDI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFMTE9XX1BFUk1JU1NJT05TID0gMHgwNDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQUxMT1dfQVBQX0NPTkZJR1MgPSAweDA4OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTExPV19BTEwgPSB+MDsKKwogICAgIC8vIEdyb3VwLWlkcyB0aGF0IGFyZSBnaXZlbiB0byBhbGwgcGFja2FnZXMgYXMgcmVhZCBmcm9tIGV0Yy9wZXJtaXNzaW9ucy8qLnhtbC4KICAgICBpbnRbXSBtR2xvYmFsR2lkczsKIApAQCAtMTYxLDIxICsxNjgsMjcgQEAKICAgICBTeXN0ZW1Db25maWcoKSB7CiAgICAgICAgIC8vIFJlYWQgY29uZmlndXJhdGlvbiBmcm9tIHN5c3RlbQogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldFJvb3REaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgZmFsc2UpOworICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldFJvb3REaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgQUxMT1dfQUxMKTsKICAgICAgICAgLy8gUmVhZCBjb25maWd1cmF0aW9uIGZyb20gdGhlIG9sZCBwZXJtaXNzaW9ucyBkaXIKICAgICAgICAgcmVhZFBlcm1pc3Npb25zKEVudmlyb25tZW50LmJ1aWxkUGF0aCgKLSAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRSb290RGlyZWN0b3J5KCksICJldGMiLCAicGVybWlzc2lvbnMiKSwgZmFsc2UpOwotICAgICAgICAvLyBPbmx5IHJlYWQgZmVhdHVyZXMgZnJvbSBPRU0gY29uZmlnCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0Um9vdERpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIEFMTE9XX0FMTCk7CisgICAgICAgIC8vIEFsbG93IE9ETSB0byBjdXN0b21pemUgc3lzdGVtIGNvbmZpZ3MgYXJvdW5kIGxpYnMsIGZlYXR1cmVzIGFuZCBhcHBzCisgICAgICAgIGludCBvZG1QZXJtaXNzaW9uRmxhZyA9IEFMTE9XX0xJQlMgfCBBTExPV19GRUFUVVJFUyB8IEFMTE9XX0FQUF9DT05GSUdTOwogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9lbURpcmVjdG9yeSgpLCAiZXRjIiwgInN5c2NvbmZpZyIpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRPZG1EaXJlY3RvcnkoKSwgImV0YyIsICJzeXNjb25maWciKSwgb2RtUGVybWlzc2lvbkZsYWcpOwogICAgICAgICByZWFkUGVybWlzc2lvbnMoRW52aXJvbm1lbnQuYnVpbGRQYXRoKAotICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9lbURpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIHRydWUpOworICAgICAgICAgICAgICAgIEVudmlyb25tZW50LmdldE9kbURpcmVjdG9yeSgpLCAiZXRjIiwgInBlcm1pc3Npb25zIiksIG9kbVBlcm1pc3Npb25GbGFnKTsKKyAgICAgICAgLy8gT25seSBhbGxvdyBPRU0gdG8gY3VzdG9taXplIGZlYXR1cmVzCisgICAgICAgIHJlYWRQZXJtaXNzaW9ucyhFbnZpcm9ubWVudC5idWlsZFBhdGgoCisgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQuZ2V0T2VtRGlyZWN0b3J5KCksICJldGMiLCAic3lzY29uZmlnIiksIEFMTE9XX0ZFQVRVUkVTKTsKKyAgICAgICAgcmVhZFBlcm1pc3Npb25zKEVudmlyb25tZW50LmJ1aWxkUGF0aCgKKyAgICAgICAgICAgICAgICBFbnZpcm9ubWVudC5nZXRPZW1EaXJlY3RvcnkoKSwgImV0YyIsICJwZXJtaXNzaW9ucyIpLCBBTExPV19GRUFUVVJFUyk7CiAgICAgfQogCi0gICAgdm9pZCByZWFkUGVybWlzc2lvbnMoRmlsZSBsaWJyYXJ5RGlyLCBib29sZWFuIG9ubHlGZWF0dXJlcykgeworICAgIHZvaWQgcmVhZFBlcm1pc3Npb25zKEZpbGUgbGlicmFyeURpciwgaW50IHBlcm1pc3Npb25GbGFnKSB7CiAgICAgICAgIC8vIFJlYWQgcGVybWlzc2lvbnMgZnJvbSBnaXZlbiBkaXJlY3RvcnkuCiAgICAgICAgIGlmICghbGlicmFyeURpci5leGlzdHMoKSB8fCAhbGlicmFyeURpci5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25GbGFnID09IEFMTE9XX0FMTCkgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJObyBkaXJlY3RvcnkgIiArIGxpYnJhcnlEaXIgKyAiLCBza2lwcGluZyIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDE2ICsyMTYsMTYgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChmLCBvbmx5RmVhdHVyZXMpOworICAgICAgICAgICAgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChmLCBwZXJtaXNzaW9uRmxhZyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSZWFkIHBsYXRmb3JtIHBlcm1pc3Npb25zIGxhc3Qgc28gaXQgd2lsbCB0YWtlIHByZWNlZGVuY2UKICAgICAgICAgaWYgKHBsYXRmb3JtRmlsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZWFkUGVybWlzc2lvbnNGcm9tWG1sKHBsYXRmb3JtRmlsZSwgb25seUZlYXR1cmVzKTsKKyAgICAgICAgICAgIHJlYWRQZXJtaXNzaW9uc0Zyb21YbWwocGxhdGZvcm1GaWxlLCBwZXJtaXNzaW9uRmxhZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcmVhZFBlcm1pc3Npb25zRnJvbVhtbChGaWxlIHBlcm1GaWxlLCBib29sZWFuIG9ubHlGZWF0dXJlcykgeworICAgIHByaXZhdGUgdm9pZCByZWFkUGVybWlzc2lvbnNGcm9tWG1sKEZpbGUgcGVybUZpbGUsIGludCBwZXJtaXNzaW9uRmxhZykgewogICAgICAgICBGaWxlUmVhZGVyIHBlcm1SZWFkZXIgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcGVybVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKHBlcm1GaWxlKTsKQEAgLTI0Miw2ICsyNTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIjogZm91bmQgIiArIHBhcnNlci5nZXROYW1lKCkgKyAiLCBleHBlY3RlZCAncGVybWlzc2lvbnMnIG9yICdjb25maWcnIik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dBbGwgPSBwZXJtaXNzaW9uRmxhZyA9PSBBTExPV19BTEw7CisgICAgICAgICAgICBib29sZWFuIGFsbG93TGlicyA9IChwZXJtaXNzaW9uRmxhZyAmIEFMTE9XX0xJQlMpICE9IDA7CisgICAgICAgICAgICBib29sZWFuIGFsbG93RmVhdHVyZXMgPSAocGVybWlzc2lvbkZsYWcgJiBBTExPV19GRUFUVVJFUykgIT0gMDsKKyAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dQZXJtaXNzaW9ucyA9IChwZXJtaXNzaW9uRmxhZyAmIEFMTE9XX1BFUk1JU1NJT05TKSAhPSAwOworICAgICAgICAgICAgYm9vbGVhbiBhbGxvd0FwcENvbmZpZ3MgPSAocGVybWlzc2lvbkZsYWcgJiBBTExPV19BUFBfQ09ORklHUykgIT0gMDsKICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgICAgWG1sVXRpbHMubmV4dEVsZW1lbnQocGFyc2VyKTsKICAgICAgICAgICAgICAgICBpZiAocGFyc2VyLmdldEV2ZW50VHlwZSgpID09IFhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UKSB7CkBAIC0yNDksNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcnNlci5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCJncm91cCIuZXF1YWxzKG5hbWUpICYmICFvbmx5RmVhdHVyZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoImdyb3VwIi5lcXVhbHMobmFtZSkgJiYgYWxsb3dBbGwpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGdpZFN0ciA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZ2lkIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChnaWRTdHIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdpZCA9IGFuZHJvaWQub3MuUHJvY2Vzcy5nZXRHaWRGb3JOYW1lKGdpZFN0cik7CkBAIC0yNjEsNyArMjc5LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJwZXJtaXNzaW9uIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiBhbGxvd1Blcm1pc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwZXJtID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8cGVybWlzc2lvbj4gd2l0aG91dCBuYW1lIGluICIgKyBwZXJtRmlsZSArICIgYXQgIgpAQCAtMjcyLDcgKzI5MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHBlcm0gPSBwZXJtLmludGVybigpOwogICAgICAgICAgICAgICAgICAgICByZWFkUGVybWlzc2lvbihwYXJzZXIsIHBlcm0pOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXNzaWduLXBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiAhb25seUZlYXR1cmVzKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXNzaWduLXBlcm1pc3Npb24iLmVxdWFscyhuYW1lKSAmJiBhbGxvd1Blcm1pc3Npb25zKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwZXJtID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8YXNzaWduLXBlcm1pc3Npb24+IHdpdGhvdXQgbmFtZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTMwNCw3ICszMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBwZXJtcy5hZGQocGVybSk7CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJsaWJyYXJ5Ii5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImxpYnJhcnkiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0xpYnMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsZmlsZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmlsZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobG5hbWUgPT0gbnVsbCkgewpAQCAtMzIwLDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZmVhdHVyZSIuZXF1YWxzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZmVhdHVyZSIuZXF1YWxzKG5hbWUpICYmIGFsbG93RmVhdHVyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CiAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dlZDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb3dSYW0pIHsKQEAgLTM0MSw3ICszNTksNyBAQAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInVuYXZhaWxhYmxlLWZlYXR1cmUiLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoInVuYXZhaWxhYmxlLWZlYXR1cmUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0ZlYXR1cmVzKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBmbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZm5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjx1bmF2YWlsYWJsZS1mZWF0dXJlPiB3aXRob3V0IG5hbWUgaW4gIiArIHBlcm1GaWxlICsgIiBhdCAiCkBAIC0zNTIsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJhbGxvdy1pbi1wb3dlci1zYXZlLWV4Y2VwdC1pZGxlIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFsbG93LWluLXBvd2VyLXNhdmUtZXhjZXB0LWlkbGUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FsbCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGFja2FnZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGtnbmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiPGFsbG93LWluLXBvd2VyLXNhdmUtZXhjZXB0LWlkbGU+IHdpdGhvdXQgcGFja2FnZSBpbiAiCkBAIC0zNjMsNyArMzgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJhbGxvdy1pbi1wb3dlci1zYXZlIi5lcXVhbHMobmFtZSkgJiYgIW9ubHlGZWF0dXJlcykgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFsbG93LWluLXBvd2VyLXNhdmUiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FsbCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGtnbmFtZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGFja2FnZSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGtnbmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiPGFsbG93LWluLXBvd2VyLXNhdmU+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTM3NCw3ICszOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImZpeGVkLWltZS1hcHAiLmVxdWFscyhuYW1lKSAmJiAhb25seUZlYXR1cmVzKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiZml4ZWQtaW1lLWFwcCIuZXF1YWxzKG5hbWUpICYmIGFsbG93QWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwa2duYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwYWNrYWdlIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwa2duYW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8Zml4ZWQtaW1lLWFwcD4gd2l0aG91dCBwYWNrYWdlIGluICIgKyBwZXJtRmlsZSArICIgYXQgIgpAQCAtMzg1LDcgKzQwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgiYXBwLWxpbmsiLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImFwcC1saW5rIi5lcXVhbHMobmFtZSkgJiYgYWxsb3dBcHBDb25maWdzKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwa2duYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwYWNrYWdlIik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwa2duYW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICI8YXBwLWxpbms+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUgKyAiIGF0ICIKQEAgLTM5NCw3ICs0MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbUxpbmtlZEFwcHMuYWRkKHBrZ25hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgic3lzdGVtLXVzZXItd2hpdGVsaXN0ZWQtYXBwIi5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJzeXN0ZW0tdXNlci13aGl0ZWxpc3RlZC1hcHAiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FwcENvbmZpZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ25hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBrZ25hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjxzeXN0ZW0tdXNlci13aGl0ZWxpc3RlZC1hcHA+IHdpdGhvdXQgcGFja2FnZSBpbiAiICsgcGVybUZpbGUKQEAgLTQwMyw3ICs0MjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbVN5c3RlbVVzZXJXaGl0ZWxpc3RlZEFwcHMuYWRkKHBrZ25hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgic3lzdGVtLXVzZXItYmxhY2tsaXN0ZWQtYXBwIi5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJzeXN0ZW0tdXNlci1ibGFja2xpc3RlZC1hcHAiLmVxdWFscyhuYW1lKSAmJiBhbGxvd0FwcENvbmZpZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBrZ25hbWUgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInBhY2thZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBrZ25hbWUgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIjxzeXN0ZW0tdXNlci1ibGFja2xpc3RlZC1hcHAgd2l0aG91dCBwYWNrYWdlIGluICIgKyBwZXJtRmlsZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2NvdW50cy9BY2NvdW50TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYWNjb3VudHMvQWNjb3VudE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggNTAyZDYxYS4uZjM0NWQ3ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hY2NvdW50cy9BY2NvdW50TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FjY291bnRzL0FjY291bnRNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zNyw3ICszNyw5IEBACiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbk1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VBZG1pbkluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50VmFsdWVzOwpAQCAtODIsNiArODQsNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXJyYXlVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkluZGVudGluZ1ByaW50V3JpdGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5GZ1RocmVhZDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuTG9jYWxTZXJ2aWNlczsKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5MaXN0czsKIGltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5TZXRzOwogCkBAIC04MzAsNyArODMzLDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkKSB8fCAhY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnQudHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkLCBjYWxsaW5nVWlkKSB8fAorICAgICAgICAgICAgICAgICFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudC50eXBlLCBjYWxsaW5nVWlkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTEyNTksNyArMTI2Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGFjY291bnQudHlwZSk7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCwgY2FsbGluZ1VpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGNhbm5vdCBtb2RpZnkgYWNjb3VudHMiKTsKQEAgLTEyNjcsNyArMTI3MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudC50eXBlKSkgeworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50LnR5cGUsIGNhbGxpbmdVaWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBjYW5ub3QgbW9kaWZ5IGFjY291bnRzIG9mIHRoaXMgdHlwZSAocG9saWN5KS4iKTsKQEAgLTEzMjEsOSArMTMyNSw2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKICAgICAgICAgfQogICAgICAgICBVc2VyQWNjb3VudHMgYWNjb3VudHMgPSBnZXRVc2VyQWNjb3VudHNGb3JDYWxsZXIoKTsKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkKSB8fCAhY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnQudHlwZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQogICAgICAgICBsb2dSZWNvcmQoYWNjb3VudHMsIERlYnVnRGJIZWxwZXIuQUNUSU9OX0NBTExFRF9BQ0NPVU5UX1JFTU9WRSwgVEFCTEVfQUNDT1VOVFMpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewpAQCAtMjE0Niw4ICsyMTQ3LDkgQEAKICAgICAgICAgaWYgKGFjY291bnRUeXBlID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFjY291bnRUeXBlIGlzIG51bGwiKTsKIAogICAgICAgICAvLyBJcyB1c2VyIGRpc2FsbG93ZWQgZnJvbSBtb2RpZnlpbmcgYWNjb3VudHM/Ci0gICAgICAgIGludCB1c2VySWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCk7Ci0gICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCkpIHsKKyAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpOworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQsIHVpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGlzIG5vdCBhbGxvd2VkIHRvIGFkZCBhbiBhY2NvdW50ISIpOwpAQCAtMjE1Niw3ICsyMTU4LDcgQEAKICAgICAgICAgICAgIHNob3dDYW50QWRkQWNjb3VudChBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwgdXNlcklkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUsIHVpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX01BTkFHRU1FTlRfRElTQUJMRURfRk9SX0FDQ09VTlRfVFlQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGNhbm5vdCBtb2RpZnkgYWNjb3VudHMgb2YgdGhpcyB0eXBlIChwb2xpY3kpLiIpOwpAQCAtMjE2OCw3ICsyMTcwLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBwaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOwotICAgICAgICBmaW5hbCBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgZmluYWwgQnVuZGxlIG9wdGlvbnMgPSAob3B0aW9uc0luID09IG51bGwpID8gbmV3IEJ1bmRsZSgpIDogb3B0aW9uc0luOwogICAgICAgICBvcHRpb25zLnB1dEludChBY2NvdW50TWFuYWdlci5LRVlfQ0FMTEVSX1VJRCwgdWlkKTsKICAgICAgICAgb3B0aW9ucy5wdXRJbnQoQWNjb3VudE1hbmFnZXIuS0VZX0NBTExFUl9QSUQsIHBpZCk7CkBAIC0yMjMwLDcgKzIyMzEsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLy8gSXMgdXNlciBkaXNhbGxvd2VkIGZyb20gbW9kaWZ5aW5nIGFjY291bnRzPwotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCwgY2FsbGluZ1VpZCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2Uub25FcnJvcihBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIGlzIG5vdCBhbGxvd2VkIHRvIGFkZCBhbiBhY2NvdW50ISIpOwpAQCAtMjIzOSw3ICsyMjQwLDcgQEAKICAgICAgICAgICAgIHNob3dDYW50QWRkQWNjb3VudChBY2NvdW50TWFuYWdlci5FUlJPUl9DT0RFX1VTRVJfUkVTVFJJQ1RFRCwgdXNlcklkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSkpIHsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUsIGNhbGxpbmdVaWQpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHJlc3BvbnNlLm9uRXJyb3IoQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9NQU5BR0VNRU5UX0RJU0FCTEVEX0ZPUl9BQ0NPVU5UX1RZUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlciBjYW5ub3QgbW9kaWZ5IGFjY291bnRzIG9mIHRoaXMgdHlwZSAocG9saWN5KS4iKTsKQEAgLTIzMTAsOCArMjMxMSwxNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiYWNjb3VudFR5cGUgaXMgbnVsbCIpOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHVzZXJJZCA9IEJpbmRlci5nZXRDYWxsaW5nVXNlckhhbmRsZSgpLmdldElkZW50aWZpZXIoKTsKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkKSkgeworICAgICAgICBmaW5hbCBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKKyAgICAgICAgLy8gT25seSBhbGxvdyBzeXN0ZW0gdG8gc3RhcnQgc2Vzc2lvbgorICAgICAgICBpZiAoIWlzU3lzdGVtVWlkKHVpZCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAidWlkICVzIGNhbm5vdCBzdGF0IGFkZCBhY2NvdW50IHNlc3Npb24uIiwKKyAgICAgICAgICAgICAgICAgICAgdWlkKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCk7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzKHVzZXJJZCwgdWlkKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXNwb25zZS5vbkVycm9yKEFjY291bnRNYW5hZ2VyLkVSUk9SX0NPREVfVVNFUl9SRVNUUklDVEVELAogICAgICAgICAgICAgICAgICAgICAgICAgIlVzZXIgaXMgbm90IGFsbG93ZWQgdG8gYWRkIGFuIGFjY291bnQhIik7CkBAIC0yMzIwLDcgKzIzMzAsNyBAQAogICAgICAgICAgICAgc2hvd0NhbnRBZGRBY2NvdW50KEFjY291bnRNYW5hZ2VyLkVSUk9SX0NPREVfVVNFUl9SRVNUUklDVEVELCB1c2VySWQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnRUeXBlKSkgeworICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50c0ZvclR5cGUodXNlcklkLCBhY2NvdW50VHlwZSwgdWlkKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICByZXNwb25zZS5vbkVycm9yKEFjY291bnRNYW5hZ2VyLkVSUk9SX0NPREVfTUFOQUdFTUVOVF9ESVNBQkxFRF9GT1JfQUNDT1VOVF9UWVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgIlVzZXIgY2Fubm90IG1vZGlmeSBhY2NvdW50cyBvZiB0aGlzIHR5cGUgKHBvbGljeSkuIik7CkBAIC0yMzMyLDcgKzIzNDIsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgaW50IHBpZCA9IEJpbmRlci5nZXRDYWxsaW5nUGlkKCk7Ci0gICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBmaW5hbCBCdW5kbGUgb3B0aW9ucyA9IChvcHRpb25zSW4gPT0gbnVsbCkgPyBuZXcgQnVuZGxlKCkgOiBvcHRpb25zSW47CiAgICAgICAgIG9wdGlvbnMucHV0SW50KEFjY291bnRNYW5hZ2VyLktFWV9DQUxMRVJfVUlELCB1aWQpOwogICAgICAgICBvcHRpb25zLnB1dEludChBY2NvdW50TWFuYWdlci5LRVlfQ0FMTEVSX1BJRCwgcGlkKTsKQEAgLTI0NDksNyArMjQ1OCw3IEBACiAgICAgICAgICAgICBpZiAoc2Vzc2lvbkJ1bmRsZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGFjY291bnRUeXBlID0gc2Vzc2lvbkJ1bmRsZS5nZXRTdHJpbmcoQWNjb3VudE1hbmFnZXIuS0VZX0FDQ09VTlRfVFlQRSk7CiAgICAgICAgICAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGFjY291bnRUeXBlKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1BY2NvdW50VHlwZS5lcXVhbHNJZ25vcmVDYXNlKG1BY2NvdW50VHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtQWNjb3VudFR5cGUuZXF1YWxzSWdub3JlQ2FzZShhY2NvdW50VHlwZSkpIHsKICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQWNjb3VudCB0eXBlIGluIHNlc3Npb24gYnVuZGxlIGRvZXNuJ3QgbWF0Y2ggcmVxdWVzdC4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gQWRkIGFjY291bnRUeXBlIGluZm8gdG8gc2Vzc2lvbiBidW5kbGUuIFRoaXMgd2lsbApAQCAtMjQ5Nyw4ICsyNTA2LDE3IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJzZXNzaW9uQnVuZGxlIGlzIGVtcHR5Iik7CiAgICAgICAgIH0KIAotICAgICAgICBpbnQgdXNlcklkID0gQmluZGVyLmdldENhbGxpbmdVc2VySGFuZGxlKCkuZ2V0SWRlbnRpZmllcigpOwotICAgICAgICBpZiAoIWNhblVzZXJNb2RpZnlBY2NvdW50cyh1c2VySWQpKSB7CisgICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAvLyBPbmx5IGFsbG93IHN5c3RlbSB0byBmaW5pc2ggc2Vzc2lvbgorICAgICAgICBpZiAoIWlzU3lzdGVtVWlkKHVpZCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmcuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAidWlkICVzIGNhbm5vdCBmaW5pc2ggc2Vzc2lvbi4iLAorICAgICAgICAgICAgICAgICAgICB1aWQpOworICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKG1zZyk7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKTsKKyAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHModXNlcklkLCB1aWQpKSB7CiAgICAgICAgICAgICBzZW5kRXJyb3JSZXNwb25zZShyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgQWNjb3VudE1hbmFnZXIuRVJST1JfQ09ERV9VU0VSX1JFU1RSSUNURUQsCiAgICAgICAgICAgICAgICAgICAgICJVc2VyIGlzIG5vdCBhbGxvd2VkIHRvIGFkZCBhbiBhY2NvdW50ISIpOwpAQCAtMjUwNyw3ICsyNTI1LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCBwaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOwotICAgICAgICBmaW5hbCBpbnQgdWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgZmluYWwgQnVuZGxlIGRlY3J5cHRlZEJ1bmRsZTsKICAgICAgICAgZmluYWwgU3RyaW5nIGFjY291bnRUeXBlOwogICAgICAgICAvLyBGaXJzdCBkZWNyeXB0IHNlc3Npb24gYnVuZGxlIHRvIGdldCBhY2NvdW50IHR5cGUgZm9yIGNoZWNraW5nIHBlcm1pc3Npb24uCkBAIC0yNTU0LDcgKzI1NzEsNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKHVzZXJJZCwgYWNjb3VudFR5cGUpKSB7CisgICAgICAgIGlmICghY2FuVXNlck1vZGlmeUFjY291bnRzRm9yVHlwZSh1c2VySWQsIGFjY291bnRUeXBlLCB1aWQpKSB7CiAgICAgICAgICAgICBzZW5kRXJyb3JSZXNwb25zZSgKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgIEFjY291bnRNYW5hZ2VyLkVSUk9SX0NPREVfTUFOQUdFTUVOVF9ESVNBQkxFRF9GT1JfQUNDT1VOVF9UWVBFLApAQCAtMjcxNiw2ICsyNzMzLDE2IEBACiAgICAgICAgIGlmIChhY2NvdW50ID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFjY291bnQgaXMgbnVsbCIpOwogICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgIC8vIE9ubHkgYWxsb3cgc3lzdGVtIHRvIHN0YXJ0IHNlc3Npb24KKyAgICAgICAgaWYgKCFpc1N5c3RlbVVpZCh1aWQpKSB7CisgICAgICAgICAgICBTdHJpbmcgbXNnID0gU3RyaW5nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgInVpZCAlcyBjYW5ub3Qgc3RhcnQgdXBkYXRlIGNyZWRlbnRpYWxzIHNlc3Npb24uIiwKKyAgICAgICAgICAgICAgICAgICAgdWlkKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOworICAgICAgICB9CisKICAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOwogICAgICAgICBsb25nIGlkZW50aXR5VG9rZW4gPSBjbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewpAQCAtMzE3Myw3ICszMjAwLDggQEAKICAgICAgICAgaW50IHBhY2thZ2VVaWQgPSAtMTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBhY2thZ2VVaWQgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZCgKLSAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLAorICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiByZSkgewogICAgICAgICAgICAgU2xvZy5lKFRBRywgIkNvdWxkbid0IGRldGVybWluZSB0aGUgcGFja2FnZVVpZCBmb3IgIiArIHBhY2thZ2VOYW1lICsgcmUpOwogICAgICAgICAgICAgcmV0dXJuIG5ldyBBY2NvdW50WzBdOwpAQCAtNDMxOSw3ICs0MzQ3LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FuVXNlck1vZGlmeUFjY291bnRzKGludCB1c2VySWQpIHsKKyAgICBwcml2YXRlIGJvb2xlYW4gY2FuVXNlck1vZGlmeUFjY291bnRzKGludCB1c2VySWQsIGludCBjYWxsaW5nVWlkKSB7CisgICAgICAgIC8vIHRoZSBtYW5hZ2luZyBhcHAgY2FuIGFsd2F5cyBtb2RpZnkgYWNjb3VudHMKKyAgICAgICAgaWYgKGlzUHJvZmlsZU93bmVyKGNhbGxpbmdVaWQpKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICBpZiAoZ2V0VXNlck1hbmFnZXIoKS5nZXRVc2VyUmVzdHJpY3Rpb25zKG5ldyBVc2VySGFuZGxlKHVzZXJJZCkpCiAgICAgICAgICAgICAgICAgLmdldEJvb2xlYW4oVXNlck1hbmFnZXIuRElTQUxMT1dfTU9ESUZZX0FDQ09VTlRTKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDMyNyw3ICs0MzU5LDExIEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKGludCB1c2VySWQsIFN0cmluZyBhY2NvdW50VHlwZSkgeworICAgIHByaXZhdGUgYm9vbGVhbiBjYW5Vc2VyTW9kaWZ5QWNjb3VudHNGb3JUeXBlKGludCB1c2VySWQsIFN0cmluZyBhY2NvdW50VHlwZSwgaW50IGNhbGxpbmdVaWQpIHsKKyAgICAgICAgLy8gdGhlIG1hbmFnaW5nIGFwcCBjYW4gYWx3YXlzIG1vZGlmeSBhY2NvdW50cworICAgICAgICBpZiAoaXNQcm9maWxlT3duZXIoY2FsbGluZ1VpZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIERldmljZVBvbGljeU1hbmFnZXIgZHBtID0gKERldmljZVBvbGljeU1hbmFnZXIpIG1Db250ZXh0CiAgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5ERVZJQ0VfUE9MSUNZX1NFUlZJQ0UpOwogICAgICAgICBTdHJpbmdbXSB0eXBlc0FycmF5ID0gZHBtLmdldEFjY291bnRUeXBlc1dpdGhNYW5hZ2VtZW50RGlzYWJsZWRBc1VzZXIodXNlcklkKTsKQEAgLTQzNDIsNiArNDM3OCwxMyBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNQcm9maWxlT3duZXIoaW50IHVpZCkgeworICAgICAgICBmaW5hbCBEZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWwgZHBtaSA9CisgICAgICAgICAgICAgICAgTG9jYWxTZXJ2aWNlcy5nZXRTZXJ2aWNlKERldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgIHJldHVybiAoZHBtaSAhPSBudWxsKQorICAgICAgICAgICAgICAgICYmIGRwbWkuaXNBY3RpdmVBZG1pbldpdGhQb2xpY3kodWlkLCBEZXZpY2VBZG1pbkluZm8uVVNFU19QT0xJQ1lfUFJPRklMRV9PV05FUik7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgdXBkYXRlQXBwUGVybWlzc2lvbihBY2NvdW50IGFjY291bnQsIFN0cmluZyBhdXRoVG9rZW5UeXBlLCBpbnQgdWlkLCBib29sZWFuIHZhbHVlKQogICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2ZVNlcnZpY2VzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2ZVNlcnZpY2VzLmphdmEKaW5kZXggNDM0ODkxMy4uN2JhNjMzOCAxMDA3NTUKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3RpdmVTZXJ2aWNlcy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZlU2VydmljZXMuamF2YQpAQCAtNjEsNiArNjEsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CkBAIC0zMjYsNyArMzI3LDcgQEAKIAogICAgICAgICBTZXJ2aWNlTG9va3VwUmVzdWx0IHJlcyA9CiAgICAgICAgICAgICByZXRyaWV2ZVNlcnZpY2VMb2NrZWQoc2VydmljZSwgcmVzb2x2ZWRUeXBlLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgdXNlcklkLCB0cnVlLCBjYWxsZXJGZyk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsIHVzZXJJZCwgdHJ1ZSwgY2FsbGVyRmcsIGZhbHNlKTsKICAgICAgICAgaWYgKHJlcyA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQpAQCAtNTQ5LDcgKzU1MCw3IEBACiAKICAgICAgICAgLy8gSWYgdGhpcyBzZXJ2aWNlIGlzIGFjdGl2ZSwgbWFrZSBzdXJlIGl0IGlzIHN0b3BwZWQuCiAgICAgICAgIFNlcnZpY2VMb29rdXBSZXN1bHQgciA9IHJldHJpZXZlU2VydmljZUxvY2tlZChzZXJ2aWNlLCByZXNvbHZlZFR5cGUsIG51bGwsCi0gICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChyLnJlY29yZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKQEAgLTU5OCw3ICs1OTksNyBAQAogICAgIElCaW5kZXIgcGVla1NlcnZpY2VMb2NrZWQoSW50ZW50IHNlcnZpY2UsIFN0cmluZyByZXNvbHZlZFR5cGUsIFN0cmluZyBjYWxsaW5nUGFja2FnZSkgewogICAgICAgICBTZXJ2aWNlTG9va3VwUmVzdWx0IHIgPSByZXRyaWV2ZVNlcnZpY2VMb2NrZWQoc2VydmljZSwgcmVzb2x2ZWRUeXBlLCBjYWxsaW5nUGFja2FnZSwKICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAotICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpLCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKIAogICAgICAgICBJQmluZGVyIHJldCA9IG51bGw7CiAgICAgICAgIGlmIChyICE9IG51bGwpIHsKQEAgLTgzMSwxMCArODMyLDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBib29sZWFuIGNhbGxlckZnID0gY2FsbGVyQXBwLnNldFNjaGVkR3JvdXAgIT0gUHJvY2Vzcy5USFJFQURfR1JPVVBfQkdfTk9OSU5URVJBQ1RJVkU7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNCaW5kRXh0ZXJuYWwgPSAoZmxhZ3MgJiBDb250ZXh0LkJJTkRfRVhURVJOQUxfU0VSVklDRSkgIT0gMDsKIAogICAgICAgICBTZXJ2aWNlTG9va3VwUmVzdWx0IHJlcyA9Ci0gICAgICAgICAgICByZXRyaWV2ZVNlcnZpY2VMb2NrZWQoc2VydmljZSwgcmVzb2x2ZWRUeXBlLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdQaWQoKSwgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCB0cnVlLCBjYWxsZXJGZyk7CisgICAgICAgICAgICByZXRyaWV2ZVNlcnZpY2VMb2NrZWQoc2VydmljZSwgcmVzb2x2ZWRUeXBlLCBjYWxsaW5nUGFja2FnZSwgQmluZGVyLmdldENhbGxpbmdQaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCB0cnVlLCBjYWxsZXJGZywgaXNCaW5kRXh0ZXJuYWwpOwogICAgICAgICBpZiAocmVzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMTkyLDcgKzExOTQsNyBAQAogCiAgICAgcHJpdmF0ZSBTZXJ2aWNlTG9va3VwUmVzdWx0IHJldHJpZXZlU2VydmljZUxvY2tlZChJbnRlbnQgc2VydmljZSwKICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgaW50IGNhbGxpbmdQaWQsIGludCBjYWxsaW5nVWlkLCBpbnQgdXNlcklkLAotICAgICAgICAgICAgYm9vbGVhbiBjcmVhdGVJZk5lZWRlZCwgYm9vbGVhbiBjYWxsaW5nRnJvbUZnKSB7CisgICAgICAgICAgICBib29sZWFuIGNyZWF0ZUlmTmVlZGVkLCBib29sZWFuIGNhbGxpbmdGcm9tRmcsIGJvb2xlYW4gaXNCaW5kRXh0ZXJuYWwpIHsKICAgICAgICAgU2VydmljZVJlY29yZCByID0gbnVsbDsKICAgICAgICAgaWYgKERFQlVHX1NFUlZJQ0UpIFNsb2cudihUQUdfU0VSVklDRSwgInJldHJpZXZlU2VydmljZUxvY2tlZDogIiArIHNlcnZpY2UKICAgICAgICAgICAgICAgICArICIgdHlwZT0iICsgcmVzb2x2ZWRUeXBlICsgIiBjYWxsaW5nVWlkPSIgKyBjYWxsaW5nVWlkKTsKQEAgLTEyMDUsMTYgKzEyMDcsMjMgQEAKICAgICAgICAgaWYgKGNvbXAgIT0gbnVsbCkgewogICAgICAgICAgICAgciA9IHNtYXAubVNlcnZpY2VzQnlOYW1lLmdldChjb21wKTsKICAgICAgICAgfQotICAgICAgICBpZiAociA9PSBudWxsKSB7CisgICAgICAgIGlmIChyID09IG51bGwgJiYgIWlzQmluZEV4dGVybmFsKSB7CiAgICAgICAgICAgICBJbnRlbnQuRmlsdGVyQ29tcGFyaXNvbiBmaWx0ZXIgPSBuZXcgSW50ZW50LkZpbHRlckNvbXBhcmlzb24oc2VydmljZSk7CiAgICAgICAgICAgICByID0gc21hcC5tU2VydmljZXNCeUludGVudC5nZXQoZmlsdGVyKTsKICAgICAgICAgfQorICAgICAgICBpZiAociAhPSBudWxsICYmIChyLnNlcnZpY2VJbmZvLmZsYWdzICYgU2VydmljZUluZm8uRkxBR19FWFRFUk5BTF9TRVJWSUNFKSAhPSAwCisgICAgICAgICAgICAgICAgJiYgIWNhbGxpbmdQYWNrYWdlLmVxdWFscyhyLnBhY2thZ2VOYW1lKSkgeworICAgICAgICAgICAgLy8gSWYgYW4gZXh0ZXJuYWwgc2VydmljZSBpcyBydW5uaW5nIHdpdGhpbiBpdHMgb3duIHBhY2thZ2UsIG90aGVyIHBhY2thZ2VzCisgICAgICAgICAgICAvLyBzaG91bGQgbm90IGJpbmQgdG8gdGhhdCBpbnN0YW5jZS4KKyAgICAgICAgICAgIHIgPSBudWxsOworICAgICAgICB9CiAgICAgICAgIGlmIChyID09IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgUmVzb2x2ZUluZm8gckluZm8gPQotICAgICAgICAgICAgICAgICAgICBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkucmVzb2x2ZVNlcnZpY2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UsIHJlc29sdmVkVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5TVE9DS19QTV9GTEFHUywgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBjb21lIGJhY2sgYW5kIHJlbW92ZSB0aGlzIGFzc3VtcHRpb24gdG8gdHJpYWdlIGFsbCBzZXJ2aWNlcworICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIHJJbmZvID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLnJlc29sdmVTZXJ2aWNlKHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUsIEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuU1RPQ0tfUE1fRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQpOwogICAgICAgICAgICAgICAgIFNlcnZpY2VJbmZvIHNJbmZvID0KICAgICAgICAgICAgICAgICAgICAgckluZm8gIT0gbnVsbCA/IHJJbmZvLnNlcnZpY2VJbmZvIDogbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoc0luZm8gPT0gbnVsbCkgewpAQCAtMTIyNCw2ICsxMjMzLDM3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgbmFtZSA9IG5ldyBDb21wb25lbnROYW1lKAogICAgICAgICAgICAgICAgICAgICAgICAgc0luZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lLCBzSW5mby5uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoKHNJbmZvLmZsYWdzICYgU2VydmljZUluZm8uRkxBR19FWFRFUk5BTF9TRVJWSUNFKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0JpbmRFeHRlcm5hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzSW5mby5leHBvcnRlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQklORF9FWFRFUk5BTF9TRVJWSUNFIGZhaWxlZCwgIiArIG5hbWUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpcyBub3QgZXhwb3J0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc0luZm8uZmxhZ3MgJiBTZXJ2aWNlSW5mby5GTEFHX0lTT0xBVEVEX1BST0NFU1MpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkJJTkRfRVhURVJOQUxfU0VSVklDRSBmYWlsZWQsICIgKyBuYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgbm90IGFuIGlzb2xhdGVkUHJvY2VzcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gUnVuIHRoZSBzZXJ2aWNlIHVuZGVyIHRoZSBjYWxsaW5nIHBhY2thZ2UncyBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhSW5mbyA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRBcHBsaWNhdGlvbkluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdQYWNrYWdlLCBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLlNUT0NLX1BNX0ZMQUdTLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkJJTkRfRVhURVJOQUxfU0VSVklDRSBmYWlsZWQsICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZXNvbHZlIGNsaWVudCBwYWNrYWdlICIgKyBjYWxsaW5nUGFja2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzSW5mbyA9IG5ldyBTZXJ2aWNlSW5mbyhzSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzSW5mby5hcHBsaWNhdGlvbkluZm8gPSBuZXcgQXBwbGljYXRpb25JbmZvKHNJbmZvLmFwcGxpY2F0aW9uSW5mbyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzSW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUgPSBhSW5mby5wYWNrYWdlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQgPSBhSW5mby51aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmV3IENvbXBvbmVudE5hbWUoYUluZm8ucGFja2FnZU5hbWUsIG5hbWUuZ2V0Q2xhc3NOYW1lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5zZXRDb21wb25lbnQobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkJJTkRfRVhURVJOQUxfU0VSVklDRSByZXF1aXJlZCBmb3IgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0JpbmRFeHRlcm5hbCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkJJTkRfRVhURVJOQUxfU0VSVklDRSBmYWlsZWQsICIgKyBuYW1lICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlzIG5vdCBhbiBleHRlcm5hbFNlcnZpY2UiKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1BbS5pc1NpbmdsZXRvbihzSW5mby5wcm9jZXNzTmFtZSwgc0luZm8uYXBwbGljYXRpb25JbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNJbmZvLm5hbWUsIHNJbmZvLmZsYWdzKQpAQCAtMTI0NCw3ICsxMjg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0luZm8uYXBwbGljYXRpb25JbmZvLnVpZCwgc0luZm8ucGFja2FnZU5hbWUsIGNhbGxpbmdQaWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93ZWQgIT0gQWN0aXZpdHlNYW5hZ2VyLkFQUF9TVEFSVF9NT0RFX05PUk1BTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJCYWNrZ3JvdW5kIGV4ZWN1dGlvbiBub3QgYWxsb3dlZDogc2VydmljZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIuaW50ZW50ICsgIiB0byAiICsgbmFtZS5mbGF0dGVuVG9TaG9ydFN0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNlcnZpY2UgKyAiIHRvICIgKyBuYW1lLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tIHBpZD0iICsgY2FsbGluZ1BpZCArICIgdWlkPSIgKyBjYWxsaW5nVWlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgcGtnPSIgKyBjYWxsaW5nUGFja2FnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5TWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGU0YTZmM2MuLjA5M2EzM2QgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0zNSw2ICszNSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuUHJvY2Vzc0NwdVRyYWNrZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuVHJhbnNmZXJQaXBlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLlp5Z290ZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JbnN0YWxsZXJDb25uZWN0aW9uLkluc3RhbGxlckV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0UHJpbnRXcml0ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0WG1sU2VyaWFsaXplcjsKQEAgLTUzLDYgKzU0LDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuZmlyZXdhbGwuSW50ZW50RmlyZXdhbGw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBtLkluc3RhbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuc3RhdHVzYmFyLlN0YXR1c0Jhck1hbmFnZXJJbnRlcm5hbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudnIuVnJNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFRyYW5zaXRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlOwogCkBAIC0yNDMsNiArMjQ1LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uU1RBUlRfVEFTS1NfRlJPTV9SRUNFTlRTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfUFJFU0VSVkVfV0lORE9XOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CkBAIC0yNTIsOSArMjU1LDE2IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLklOVkFMSURfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLlBJTk5FRF9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfRlJFRUZPUk1fV0lORE9XX01BTkFHRU1FTlQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5GRUFUVVJFX1BJQ1RVUkVfSU5fUElDVFVSRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkdFVF9QUk9WSURFUlM7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkc7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbC5BTFdBWVNfRklOSVNIX0FDVElWSVRJRVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLkRFQlVHX0FQUDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwuREVWRUxPUE1FTlRfRU5BQkxFX0ZSRUVGT1JNX1dJTkRPV1NfU1VQUE9SVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwuREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLkRFVkVMT1BNRU5UX0ZPUkNFX1JUTDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwuV0FJVF9GT1JfREVCVUdHRVI7CkBAIC0zMjIsNiArMzMyLDcgQEAKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfVklTSUJMRV9CRUhJTkQ7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfQU07CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV0lUSF9DTEFTU19OQU1FOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQWN0aXZpdHlDb250YWluZXIuRk9SQ0VfTkVXX1RBU0tfRkxBR1M7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5GT1JDRV9GT0NVUzsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLk9OX1RPUDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLlBSRVNFUlZFX1dJTkRPV1M7CkBAIC00OTAsNiArNTAxLDExIEBACiAKICAgICAvLyBVc2VkIHRvIGluZGljYXRlIHRoYXQgYSB0YXNrIGlzIHJlbW92ZWQgaXQgc2hvdWxkIGFsc28gYmUgcmVtb3ZlZCBmcm9tIHJlY2VudHMuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBSRU1PVkVfRlJPTV9SRUNFTlRTID0gdHJ1ZTsKKyAgICAvLyBVc2VkIHRvIGluZGljYXRlIHRoYXQgYW4gYXBwIHRyYW5zaXRpb24gc2hvdWxkIGJlIGFuaW1hdGVkLgorICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIEFOSU1BVEUgPSB0cnVlOworCisgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRha2UgZnVsbCBzY3JlZW4gc2NyZWVuc2hvdHMKKyAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBUQUtFX0ZVTExTQ1JFRU5fU0NSRUVOU0hPVFMgPSB0cnVlOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGludCBuYXRpdmVNaWdyYXRlVG9Cb29zdCgpOwogICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBpbnQgbmF0aXZlTWlncmF0ZUZyb21Cb29zdCgpOwpAQCAtNTAyLDcgKzUxOCw5IEBACiAgICAgcHJpdmF0ZSBJbnN0YWxsZXIgbUluc3RhbGxlcjsKIAogICAgIC8qKiBSdW4gYWxsIEFjdGl2aXR5U3RhY2tzIHRocm91Z2ggdGhpcyAqLwotICAgIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIG1TdGFja1N1cGVydmlzb3I7CisgICAgZmluYWwgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IgbVN0YWNrU3VwZXJ2aXNvcjsKKworICAgIGZpbmFsIEFjdGl2aXR5U3RhcnRlciBtQWN0aXZpdHlTdGFydGVyOwogCiAgICAgLyoqIFRhc2sgc3RhY2sgY2hhbmdlIGxpc3RlbmVycy4gKi8KICAgICBwcml2YXRlIFJlbW90ZUNhbGxiYWNrTGlzdDxJVGFza1N0YWNrTGlzdGVuZXI+IG1UYXNrU3RhY2tMaXN0ZW5lcnMgPQpAQCAtMTI3NCw3ICsxMjkyLDggQEAKICAgICBib29sZWFuIG1BbHdheXNGaW5pc2hBY3Rpdml0aWVzID0gZmFsc2U7CiAgICAgYm9vbGVhbiBtRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzOwogICAgIGJvb2xlYW4gbVN1cHBvcnRzRnJlZWZvcm1XaW5kb3dNYW5hZ2VtZW50OwotICAgIGJvb2xlYW4gbVRha2VGdWxsc2NyZWVuU2NyZWVuc2hvdHM7CisgICAgYm9vbGVhbiBtU3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlOworICAgIFJlY3QgbURlZmF1bHRQaW5uZWRTdGFja0JvdW5kczsKICAgICBJQWN0aXZpdHlDb250cm9sbGVyIG1Db250cm9sbGVyID0gbnVsbDsKICAgICBTdHJpbmcgbVByb2ZpbGVBcHAgPSBudWxsOwogICAgIFByb2Nlc3NSZWNvcmQgbVByb2ZpbGVQcm9jID0gbnVsbDsKQEAgLTEyOTAsNyArMTMwOSw3IEBACiAgICAgaW50IG1NZW1XYXRjaER1bXBVaWQ7CiAgICAgU3RyaW5nIG1UcmFja0FsbG9jYXRpb25BcHAgPSBudWxsOwogCi0gICAgZmluYWwgbG9uZ1tdIG1UbXBMb25nID0gbmV3IGxvbmdbMV07CisgICAgZmluYWwgbG9uZ1tdIG1UbXBMb25nID0gbmV3IGxvbmdbMl07CiAKICAgICBzdGF0aWMgZmluYWwgY2xhc3MgUHJvY2Vzc0NoYW5nZUl0ZW0gewogICAgICAgICBzdGF0aWMgZmluYWwgaW50IENIQU5HRV9BQ1RJVklUSUVTID0gMTw8MDsKQEAgLTE0MzIsNiArMTQ1MSw5IEBACiAgICAgc3RhdGljIGZpbmFsIGludCBDT05URU5UX1BST1ZJREVSX1BVQkxJU0hfVElNRU9VVF9NU0cgPSA1OTsKICAgICBzdGF0aWMgZmluYWwgaW50IElETEVfVUlEU19NU0cgPSA2MDsKICAgICBzdGF0aWMgZmluYWwgaW50IFNZU1RFTV9VU0VSX1VOTE9DS19NU0cgPSA2MTsKKyAgICBzdGF0aWMgZmluYWwgaW50IExPR19TVEFDS19TVEFURSA9IDYyOworICAgIHN0YXRpYyBmaW5hbCBpbnQgVlJfTU9ERV9DSEFOR0VfTVNHID0gNjM7CisgICAgc3RhdGljIGZpbmFsIGludCBOT1RJRllfQUNUSVZJVFlfUElOTkVEX0xJU1RFTkVSU19NU0cgPSA2NDsKIAogICAgIHN0YXRpYyBmaW5hbCBpbnQgRklSU1RfQUNUSVZJVFlfU1RBQ0tfTVNHID0gMTAwOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgRklSU1RfQlJPQURDQVNUX1FVRVVFX01TRyA9IDIwMDsKQEAgLTE3NzgsNyArMTgwMCw3IEBACiAgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET19QRU5ESU5HX0FDVElWSVRZX0xBVU5DSEVTX01TRzogewogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS50aGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZG9QZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbUFjdGl2aXR5U3RhcnRlci5kb1BlbmRpbmdBY3Rpdml0eUxhdW5jaGVzTG9ja2VkKHRydWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEtJTExfQVBQTElDQVRJT05fTVNHOiB7CkBAIC0xOTM1LDcgKzE5NTcsMTAgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgU1lTVEVNX1VTRVJfVU5MT0NLX01TRzogewotICAgICAgICAgICAgICAgIG1TeXN0ZW1TZXJ2aWNlTWFuYWdlci51bmxvY2tVc2VyKG1zZy5hcmcxKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gbXNnLmFyZzE7CisgICAgICAgICAgICAgICAgbVN5c3RlbVNlcnZpY2VNYW5hZ2VyLnVubG9ja1VzZXIodXNlcklkKTsKKyAgICAgICAgICAgICAgICBtUmVjZW50VGFza3MuY2xlYW51cExvY2tlZCh1c2VySWQpOworICAgICAgICAgICAgICAgIGluc3RhbGxFbmNyeXB0aW9uVW5hd2FyZVByb3ZpZGVycyh1c2VySWQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBTWVNURU1fVVNFUl9DVVJSRU5UX01TRzogewpAQCAtMTk4NSw5ICsyMDEwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTk9USUZZX1RBU0tfU1RBQ0tfQ0hBTkdFX0xJU1RFTkVSU19NU0c6IHsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEFjdGl2aXR5TWFuYWdlclNlcnZpY2UudGhpcykgewotICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IG1UYXNrU3RhY2tMaXN0ZW5lcnMuYmVnaW5Ccm9hZGNhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtVGFza1N0YWNrTGlzdGVuZXJzLmJlZ2luQnJvYWRjYXN0KCkgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgb25lLXdheSBjYWxsYmFjayB0byB0aGUgbGlzdGVuZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGFza1N0YWNrTGlzdGVuZXJzLmdldEJyb2FkY2FzdEl0ZW0oaSkub25UYXNrU3RhY2tDaGFuZ2VkKCk7CkBAIC0xOTk5LDYgKzIwMjIsMjAgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIE5PVElGWV9BQ1RJVklUWV9QSU5ORURfTElTVEVORVJTX01TRzogeworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoQWN0aXZpdHlNYW5hZ2VyU2VydmljZS50aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBtVGFza1N0YWNrTGlzdGVuZXJzLmJlZ2luQnJvYWRjYXN0KCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIGEgb25lLXdheSBjYWxsYmFjayB0byB0aGUgbGlzdGVuZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVGFza1N0YWNrTGlzdGVuZXJzLmdldEJyb2FkY2FzdEl0ZW0oaSkub25BY3Rpdml0eVBpbm5lZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZWQgYnkgdGhlIFJlbW90ZUNhbGxiYWNrTGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1UYXNrU3RhY2tMaXN0ZW5lcnMuZmluaXNoQnJvYWRjYXN0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBOT1RJRllfQ0xFQVJURVhUX05FVFdPUktfTVNHOiB7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVpZCA9IG1zZy5hcmcxOwogICAgICAgICAgICAgICAgIGZpbmFsIGJ5dGVbXSBmaXJzdFBhY2tldCA9IChieXRlW10pIG1zZy5vYmo7CkBAIC0yMTQxLDYgKzIxNzgsMTUgQEAKICAgICAgICAgICAgIGNhc2UgSURMRV9VSURTX01TRzogewogICAgICAgICAgICAgICAgIGlkbGVVaWRzKCk7CiAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMT0dfU1RBQ0tfU1RBVEU6IHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKEFjdGl2aXR5TWFuYWdlclNlcnZpY2UudGhpcykgeworICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmxvZ1N0YWNrU3RhdGUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgY2FzZSBWUl9NT0RFX0NIQU5HRV9NU0c6IHsKKyAgICAgICAgICAgICAgICBWck1hbmFnZXJJbnRlcm5hbCB2clNlcnZpY2UgPSBMb2NhbFNlcnZpY2VzLmdldFNlcnZpY2UoVnJNYW5hZ2VySW50ZXJuYWwuY2xhc3MpOworICAgICAgICAgICAgICAgIHZyU2VydmljZS5zZXRWck1vZGUobXNnLmFyZzEgIT0gMCk7CisgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfTsKQEAgLTIxOTYsNyArMjI0Miw3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW50IG51bSA9IDA7Ci0gICAgICAgICAgICAgICAgbG9uZ1tdIHRtcCA9IG5ldyBsb25nWzFdOworICAgICAgICAgICAgICAgIGxvbmdbXSB0bXAgPSBuZXcgbG9uZ1syXTsKICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgcHJvYzsKICAgICAgICAgICAgICAgICAgICAgaW50IHByb2NTdGF0ZTsKQEAgLTIyMjgsNyArMjI3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzcyAhPSAwICYmIHByb2MudGhyZWFkICE9IG51bGwgJiYgcHJvYy5zZXRQcm9jU3RhdGUgPT0gcHJvY1N0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwcm9jLnBpZCA9PSBwaWQgJiYgcHJvYy5sYXN0UHNzVGltZSA9PSBsYXN0UHNzVGltZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0rKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkUHNzU2FtcGxlTG9ja2VkKHByb2MsIHByb2NTdGF0ZSwgcHNzLCB0bXBbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFBzc1NhbXBsZUxvY2tlZChwcm9jLCBwcm9jU3RhdGUsIHBzcywgdG1wWzBdLCB0bXBbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIyNTMsNyArMjI5OSw3IEBACiAgICAgICAgICAgICBTZXJ2aWNlTWFuYWdlci5hZGRTZXJ2aWNlKCJwcm9jZXNzaW5mbyIsIG5ldyBQcm9jZXNzSW5mb1NlcnZpY2UodGhpcykpOwogCiAgICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gaW5mbyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0QXBwbGljYXRpb25JbmZvKAotICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZCIsIFNUT0NLX1BNX0ZMQUdTKTsKKyAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQiLCBTVE9DS19QTV9GTEFHUyB8IE1BVENIX1NZU1RFTV9PTkxZKTsKICAgICAgICAgICAgIG1TeXN0ZW1UaHJlYWQuaW5zdGFsbFN5c3RlbUFwcGxpY2F0aW9uSW5mbyhpbmZvLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwogCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTIyNzcsNiArMjMyMyw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0V2luZG93TWFuYWdlcihXaW5kb3dNYW5hZ2VyU2VydmljZSB3bSkgewogICAgICAgICBtV2luZG93TWFuYWdlciA9IHdtOwogICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNldFdpbmRvd01hbmFnZXIod20pOworICAgICAgICBtQWN0aXZpdHlTdGFydGVyLnNldFdpbmRvd01hbmFnZXIod20pOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFVzYWdlU3RhdHNNYW5hZ2VyKFVzYWdlU3RhdHNNYW5hZ2VySW50ZXJuYWwgdXNhZ2VTdGF0c01hbmFnZXIpIHsKQEAgLTI0NjQsNiArMjUxMSw3IEBACiAgICAgICAgIG1JbnRlbnRGaXJld2FsbCA9IG5ldyBJbnRlbnRGaXJld2FsbChuZXcgSW50ZW50RmlyZXdhbGxJbnRlcmZhY2UoKSwgbUhhbmRsZXIpOwogICAgICAgICBtUmVjZW50VGFza3MgPSBuZXcgUmVjZW50VGFza3ModGhpcyk7CiAgICAgICAgIG1TdGFja1N1cGVydmlzb3IgPSBuZXcgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IodGhpcywgbVJlY2VudFRhc2tzKTsKKyAgICAgICAgbUFjdGl2aXR5U3RhcnRlciA9IG5ldyBBY3Rpdml0eVN0YXJ0ZXIodGhpcywgbVN0YWNrU3VwZXJ2aXNvcik7CiAgICAgICAgIG1UYXNrUGVyc2lzdGVyID0gbmV3IFRhc2tQZXJzaXN0ZXIoc3lzdGVtRGlyLCBtU3RhY2tTdXBlcnZpc29yLCBtUmVjZW50VGFza3MpOwogCiAgICAgICAgIG1Qcm9jZXNzQ3B1VGhyZWFkID0gbmV3IFRocmVhZCgiQ3B1VHJhY2tlciIpIHsKQEAgLTI3MTksOSArMjc2NywxNCBAQAogICAgICAgICByZXR1cm4gbUFwcEJpbmRBcmdzOwogICAgIH0KIAotICAgIGZpbmFsIHZvaWQgc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsIFN0cmluZyByZWFzb24pIHsKKyAgICBib29sZWFuIHNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCByLCBTdHJpbmcgcmVhc29uKSB7CiAgICAgICAgIGlmIChyID09IG51bGwgfHwgbUZvY3VzZWRBY3Rpdml0eSA9PSByKSB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXIuaXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTKSBTbG9nLmQoVEFHX0ZPQ1VTLCAic2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkOiB1bmZvY3VzYWJsZSByPSIgKyByKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChERUJVR19GT0NVUykgU2xvZy5kKFRBR19GT0NVUywgInNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZDogcj0iICsgcik7CkBAIC0yNzU5LDEwICsyODEyLDExIEBACiAgICAgICAgICAgICAgICAgZmluaXNoVm9pY2VUYXNrKGxhc3QudGFzay52b2ljZVNlc3Npb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChtU3RhY2tTdXBlcnZpc29yLnNldEZvY3VzZWRTdGFjayhyLCByZWFzb24gKyAiIHNldEZvY3VzZWRBY3Rpdml0eSIpKSB7CisgICAgICAgIGlmIChtU3RhY2tTdXBlcnZpc29yLm1vdmVBY3Rpdml0eVN0YWNrVG9Gcm9udChyLCByZWFzb24gKyAiIHNldEZvY3VzZWRBY3Rpdml0eSIpKSB7CiAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXRGb2N1c2VkQXBwKHIuYXBwVG9rZW4sIHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGFwcGx5VXBkYXRlTG9ja1N0YXRlTG9ja2VkKHIpOworICAgICAgICBhcHBseVVwZGF0ZVZyTW9kZUxvY2tlZChyKTsKICAgICAgICAgaWYgKG1Gb2N1c2VkQWN0aXZpdHkudXNlcklkICE9IG1MYXN0Rm9jdXNlZFVzZXJJZCkgewogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoRk9SRUdST1VORF9QUk9GSUxFX0NIQU5HRURfTVNHKTsKICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCkBAIC0yNzc0LDIzICsyODI4LDM1IEBACiAgICAgICAgICAgICAgICAgbUZvY3VzZWRBY3Rpdml0eSA9PSBudWxsID8gLTEgOiBtRm9jdXNlZEFjdGl2aXR5LnVzZXJJZCwKICAgICAgICAgICAgICAgICBtRm9jdXNlZEFjdGl2aXR5ID09IG51bGwgPyAiTlVMTCIgOiBtRm9jdXNlZEFjdGl2aXR5LnNob3J0Q29tcG9uZW50TmFtZSwKICAgICAgICAgICAgICAgICByZWFzb24pOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBmaW5hbCB2b2lkIGNsZWFyRm9jdXNlZEFjdGl2aXR5KEFjdGl2aXR5UmVjb3JkIHIpIHsKLSAgICAgICAgaWYgKG1Gb2N1c2VkQWN0aXZpdHkgPT0gcikgewotICAgICAgICAgICAgQWN0aXZpdHlTdGFjayBzdGFjayA9IG1TdGFja1N1cGVydmlzb3IuZ2V0Rm9jdXNlZFN0YWNrKCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHN0YWNrLnRvcEFjdGl2aXR5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIHRvcC51c2VySWQgIT0gbUxhc3RGb2N1c2VkVXNlcklkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKEZPUkVHUk9VTkRfUFJPRklMRV9DSEFOR0VEX01TRyk7Ci0gICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoRk9SRUdST1VORF9QUk9GSUxFX0NIQU5HRURfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLnVzZXJJZCwgMCkpOwotICAgICAgICAgICAgICAgICAgICBtTGFzdEZvY3VzZWRVc2VySWQgPSB0b3AudXNlcklkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Gb2N1c2VkQWN0aXZpdHkgPSBudWxsOwotICAgICAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlQW1Gb2N1c2VkQWN0aXZpdHkoLTEsICJOVUxMIiwgImNsZWFyRm9jdXNlZEFjdGl2aXR5Iik7CisgICAgZmluYWwgdm9pZCByZXNldEZvY3VzZWRBY3Rpdml0eUlmTmVlZGVkTG9ja2VkKEFjdGl2aXR5UmVjb3JkIGdvaW5nQXdheSkgeworICAgICAgICBpZiAobUZvY3VzZWRBY3Rpdml0eSAhPSBnb2luZ0F3YXkpIHsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgZm9jdXNlZFN0YWNrID0gbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKKyAgICAgICAgaWYgKGZvY3VzZWRTdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3AgPSBmb2N1c2VkU3RhY2sudG9wQWN0aXZpdHkoKTsKKyAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AudXNlcklkICE9IG1MYXN0Rm9jdXNlZFVzZXJJZCkgeworICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKEZPUkVHUk9VTkRfUFJPRklMRV9DSEFOR0VEX01TRyk7CisgICAgICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKEZPUkVHUk9VTkRfUFJPRklMRV9DSEFOR0VEX01TRywgdG9wLnVzZXJJZCwgMCkpOworICAgICAgICAgICAgICAgIG1MYXN0Rm9jdXNlZFVzZXJJZCA9IHRvcC51c2VySWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBUcnkgdG8gbW92ZSBmb2N1cyB0byBhbm90aGVyIGFjdGl2aXR5IGlmIHBvc3NpYmxlLgorICAgICAgICBpZiAoc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKAorICAgICAgICAgICAgICAgIGZvY3VzZWRTdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKSwgInJlc2V0Rm9jdXNlZEFjdGl2aXR5SWZOZWVkZWQiKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERFQlVHX0ZPQ1VTKSBTbG9nLmQoVEFHX0ZPQ1VTLCAicmVzZXRGb2N1c2VkQWN0aXZpdHlJZk5lZWRlZDogU2V0dGluZyBmb2N1cyB0byBOVUxMICIKKyAgICAgICAgICAgICAgICArICJwcmV2IG1Gb2N1c2VkQWN0aXZpdHk9IiArIG1Gb2N1c2VkQWN0aXZpdHkgKyAiIGdvaW5nQXdheT0iICsgZ29pbmdBd2F5KTsKKyAgICAgICAgbUZvY3VzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZUFtRm9jdXNlZEFjdGl2aXR5KC0xLCAiTlVMTCIsICJyZXNldEZvY3VzZWRBY3Rpdml0eUlmTmVlZGVkIik7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0yODAyLDcgKzI4NjgsNyBAQAogICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHIgPSBzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICBpZiAociAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCAic2V0Rm9jdXNlZFN0YWNrIik7Ci0gICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZChzdGFjaywgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4MTYsMTAgKzI4ODIsOSBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnRoaXMpIHsKICAgICAgICAgICAgICAgICBUYXNrUmVjb3JkIHRhc2sgPSBtU3RhY2tTdXBlcnZpc29yLmFueVRhc2tGb3JJZExvY2tlZCh0YXNrSWQpOwogICAgICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IHRhc2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCAic2V0Rm9jdXNlZFRhc2siKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCh0YXNrLnN0YWNrLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IHRhc2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgInNldEZvY3VzZWRUYXNrIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4MzEsNyArMjg5Niw4IEBACiAgICAgLyoqIFNldHMgdGhlIHRhc2sgc3RhY2sgbGlzdGVuZXIgdGhhdCBnZXRzIGNhbGxiYWNrcyB3aGVuIGEgdGFzayBzdGFjayBjaGFuZ2VzLiAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyVGFza1N0YWNrTGlzdGVuZXIoSVRhc2tTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgc3luY2hyb25pemVkIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnRoaXMpIHsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJyZWdpc3RlclRhc2tTdGFja0xpc3RlbmVyKCkiKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1UYXNrU3RhY2tMaXN0ZW5lcnMucmVnaXN0ZXIobGlzdGVuZXIpOwogICAgICAgICAgICAgfQpAQCAtMjg1OSw2ICsyOTI1LDExIEBACiAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShJTU1FUlNJVkVfTU9ERV9MT0NLX01TRywgKG5leHRTdGF0ZSkgPyAxIDogMCwgMCwgcikpOwogICAgIH0KIAorICAgIGZpbmFsIHZvaWQgYXBwbHlVcGRhdGVWck1vZGVMb2NrZWQoQWN0aXZpdHlSZWNvcmQgcikgeworICAgICAgICBtSGFuZGxlci5zZW5kTWVzc2FnZSgKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFZSX01PREVfQ0hBTkdFX01TRywgKHIuaXNWckFjdGl2aXR5KSA/IDEgOiAwLCAwKSk7CisgICAgfQorCiAgICAgZmluYWwgdm9pZCBzaG93QXNrQ29tcGF0TW9kZURpYWxvZ0xvY2tlZChBY3Rpdml0eVJlY29yZCByKSB7CiAgICAgICAgIE1lc3NhZ2UgbXNnID0gTWVzc2FnZS5vYnRhaW4oKTsKICAgICAgICAgbXNnLndoYXQgPSBTSE9XX0NPTVBBVF9NT0RFX0RJQUxPR19VSV9NU0c7CkBAIC0zMzgwLDcgKzM0NTEsOCBAQAogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrVGltZShzdGFydFRpbWUsICJzdGFydFByb2Nlc3M6IGdldHRpbmcgZ2lkcyBmcm9tIHBhY2thZ2UgbWFuYWdlciIpOwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBJUGFja2FnZU1hbmFnZXIgcG0gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBlcm1HaWRzID0gcG0uZ2V0UGFja2FnZUdpZHMoYXBwLmluZm8ucGFja2FnZU5hbWUsIGFwcC51c2VySWQpOworICAgICAgICAgICAgICAgICAgICBwZXJtR2lkcyA9IHBtLmdldFBhY2thZ2VHaWRzKGFwcC5pbmZvLnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgYXBwLnVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgIE1vdW50U2VydmljZUludGVybmFsIG1vdW50U2VydmljZUludGVybmFsID0gTG9jYWxTZXJ2aWNlcy5nZXRTZXJ2aWNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdW50U2VydmljZUludGVybmFsLmNsYXNzKTsKICAgICAgICAgICAgICAgICAgICAgbW91bnRFeHRlcm5hbCA9IG1vdW50U2VydmljZUludGVybmFsLmdldEV4dGVybmFsU3RvcmFnZU1vdW50TW9kZSh1aWQsCkBAIC0zNDg0LDI3ICszNTU2LDI5IEBACiAgICAgICAgICAgICAgICAgV2F0Y2hkb2cuZ2V0SW5zdGFuY2UoKS5wcm9jZXNzU3RhcnRlZChhcHAucHJvY2Vzc05hbWUsIHN0YXJ0UmVzdWx0LnBpZCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNoZWNrVGltZShzdGFydFRpbWUsICJzdGFydFByb2Nlc3M6IGJ1aWxkaW5nIGxvZyBtZXNzYWdlIik7Ci0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZiA9IG1TdHJpbmdCdWlsZGVyOwotICAgICAgICAgICAgYnVmLnNldExlbmd0aCgwKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlN0YXJ0IHByb2MgIik7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKHN0YXJ0UmVzdWx0LnBpZCk7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKCc6Jyk7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKGFwcC5wcm9jZXNzTmFtZSk7Ci0gICAgICAgICAgICBidWYuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICBVc2VySGFuZGxlLmZvcm1hdFVpZChidWYsIHVpZCk7Ci0gICAgICAgICAgICBpZiAoIWlzQWN0aXZpdHlQcm9jZXNzKSB7Ci0gICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiIFsiKTsKLSAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGVudHJ5UG9pbnQpOwotICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIl0iKTsKKyAgICAgICAgICAgIGlmIChERUJVR19QUk9DRVNTRVMpIHsKKyAgICAgICAgICAgICAgICBjaGVja1RpbWUoc3RhcnRUaW1lLCAic3RhcnRQcm9jZXNzOiBidWlsZGluZyBsb2cgbWVzc2FnZSIpOworICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmID0gbVN0cmluZ0J1aWxkZXI7CisgICAgICAgICAgICAgICAgYnVmLnNldExlbmd0aCgwKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJTdGFydCBwcm9jICIpOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoc3RhcnRSZXN1bHQucGlkKTsKKyAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChhcHAucHJvY2Vzc05hbWUpOworICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmZvcm1hdFVpZChidWYsIHVpZCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2aXR5UHJvY2VzcykgeworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIgWyIpOworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGVudHJ5UG9pbnQpOworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCJdIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIiBmb3IgIik7CisgICAgICAgICAgICAgICAgYnVmLmFwcGVuZChob3N0aW5nVHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGhvc3RpbmdOYW1lU3RyICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgiICIpOworICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGhvc3RpbmdOYW1lU3RyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgYnVmLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmLmFwcGVuZCgiIGZvciAiKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoaG9zdGluZ1R5cGUpOwotICAgICAgICAgICAgaWYgKGhvc3RpbmdOYW1lU3RyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBidWYuYXBwZW5kKCIgIik7Ci0gICAgICAgICAgICAgICAgYnVmLmFwcGVuZChob3N0aW5nTmFtZVN0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTbG9nLmkoVEFHLCBidWYudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBhcHAuc2V0UGlkKHN0YXJ0UmVzdWx0LnBpZCk7CiAgICAgICAgICAgICBhcHAudXNpbmdXcmFwcGVyID0gc3RhcnRSZXN1bHQudXNpbmdXcmFwcGVyOwogICAgICAgICAgICAgYXBwLnJlbW92ZWQgPSBmYWxzZTsKQEAgLTM1NTgsNiArMzYzMiw3IEBACiAgICAgSW50ZW50IGdldEhvbWVJbnRlbnQoKSB7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KG1Ub3BBY3Rpb24sIG1Ub3BEYXRhICE9IG51bGwgPyBVcmkucGFyc2UobVRvcERhdGEpIDogbnVsbCk7CiAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobVRvcENvbXBvbmVudCk7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19ERUJVR19UUklBR0VEX01JU1NJTkcpOwogICAgICAgICBpZiAobUZhY3RvcnlUZXN0ICE9IEZhY3RvcnlUZXN0LkZBQ1RPUllfVEVTVF9MT1dfTEVWRUwpIHsKICAgICAgICAgICAgIGludGVudC5hZGRDYXRlZ29yeShJbnRlbnQuQ0FURUdPUllfSE9NRSk7CiAgICAgICAgIH0KQEAgLTM1NzMsMTEgKzM2NDgsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIEludGVudCBpbnRlbnQgPSBnZXRIb21lSW50ZW50KCk7Ci0gICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9Ci0gICAgICAgICAgICByZXNvbHZlQWN0aXZpdHlJbmZvKGludGVudCwgU1RPQ0tfUE1fRkxBR1MsIHVzZXJJZCk7CisgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IHJlc29sdmVBY3Rpdml0eUluZm8oaW50ZW50LCBTVE9DS19QTV9GTEFHUywgdXNlcklkKTsKICAgICAgICAgaWYgKGFJbmZvICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmV3IENvbXBvbmVudE5hbWUoCi0gICAgICAgICAgICAgICAgICAgIGFJbmZvLmFwcGxpY2F0aW9uSW5mby5wYWNrYWdlTmFtZSwgYUluZm8ubmFtZSkpOworICAgICAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChuZXcgQ29tcG9uZW50TmFtZShhSW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUsIGFJbmZvLm5hbWUpKTsKICAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMgaWYgdGhlIGhvbWUgYXBwIGlzIGN1cnJlbnRseSBiZWluZwogICAgICAgICAgICAgLy8gaW5zdHJ1bWVudGVkLgogICAgICAgICAgICAgYUluZm8gPSBuZXcgQWN0aXZpdHlJbmZvKGFJbmZvKTsKQEAgLTM1ODYsNyArMzY1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQsIHRydWUpOwogICAgICAgICAgICAgaWYgKGFwcCA9PSBudWxsIHx8IGFwcC5pbnN0cnVtZW50YXRpb25DbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaW50ZW50LnNldEZsYWdzKGludGVudC5nZXRGbGFncygpIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spOwotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRIb21lQWN0aXZpdHkoaW50ZW50LCBhSW5mbywgcmVhc29uKTsKKyAgICAgICAgICAgICAgICBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0SG9tZUFjdGl2aXR5TG9ja2VkKGludGVudCwgYUluZm8sIHJlYXNvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMzYzNiwyMSArMzcwOSwxMSBAQAogICAgICAgICAgICAgbUNoZWNrZWRGb3JTZXR1cCA9IHRydWU7CiAKICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBzaG91bGQgYmUgc2hvd2luZyB0aGUgcGxhdGZvcm0gdXBkYXRlIHNldHVwIFVJLgotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9VUEdSQURFX1NFVFVQKTsKLSAgICAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IHJpcyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOwotCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGlyZCBwYXJ0eSBhcHBzIHRvIHJlcGxhY2UgdGhpcy4KLSAgICAgICAgICAgIFJlc29sdmVJbmZvIHJpID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgcmlzICE9IG51bGwgJiYgaTxyaXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoKHJpcy5nZXQoaSkuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncwotICAgICAgICAgICAgICAgICAgICAgICAgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19TWVNURU0pICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmkgPSByaXMuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyaSAhPSBudWxsKSB7CisgICAgICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1VQR1JBREVfU0VUVVApOworICAgICAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmlzID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5xdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LAorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOworICAgICAgICAgICAgaWYgKCFyaXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gcmkgPSByaXMuZ2V0KDApOwogICAgICAgICAgICAgICAgIFN0cmluZyB2ZXJzID0gcmkuYWN0aXZpdHlJbmZvLm1ldGFEYXRhICE9IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgID8gcmkuYWN0aXZpdHlJbmZvLm1ldGFEYXRhLmdldFN0cmluZyhJbnRlbnQuTUVUQURBVEFfU0VUVVBfVkVSU0lPTikKICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKQEAgLTM2NjQsOSArMzcyNyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSyk7CiAgICAgICAgICAgICAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmV3IENvbXBvbmVudE5hbWUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmkuYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lLCByaS5hY3Rpdml0eUluZm8ubmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlMb2NrZWQobnVsbCwgaW50ZW50LCBudWxsLCByaS5hY3Rpdml0eUluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgMCwgMCwgMCwgbnVsbCwgMCwgMCwgMCwgbnVsbCwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwpOworICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlMb2NrZWQobnVsbCwgaW50ZW50LCBudWxsIC8qZXBoZW1lcmFsSW50ZW50Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgcmkuYWN0aXZpdHlJbmZvLCBudWxsIC8qckluZm8qLywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAwLCAwLCAwLCBudWxsLCBmYWxzZSwgZmFsc2UsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzk5MSw2ICs0MDU0LDI1IEBACiAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOwogICAgIH0KIAorICAgIGZpbmFsIGludCBzdGFydEFjdGl2aXR5KEludGVudCBpbnRlbnQsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkFjdGl2aXR5Q29udGFpbmVyIGNvbnRhaW5lcikgeworICAgICAgICBlbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoIkFjdGl2aXR5Q29udGFpbmVyLnN0YXJ0QWN0aXZpdHkiKTsKKyAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoQmluZGVyLmdldENhbGxpbmdQaWQoKSwKKyAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCBtU3RhY2tTdXBlcnZpc29yLm1DdXJyZW50VXNlciwgZmFsc2UsCisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5BTExPV19GVUxMX09OTFksICJBY3Rpdml0eUNvbnRhaW5lciIsIG51bGwpOworCisgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gaW50ZW50LmdldFR5cGUoKTsKKyAgICAgICAgZmluYWwgVXJpIGRhdGEgPSBpbnRlbnQuZ2V0RGF0YSgpOworICAgICAgICBpZiAobWltZVR5cGUgPT0gbnVsbCAmJiBkYXRhICE9IG51bGwgJiYgImNvbnRlbnQiLmVxdWFscyhkYXRhLmdldFNjaGVtZSgpKSkgeworICAgICAgICAgICAgbWltZVR5cGUgPSBnZXRQcm92aWRlck1pbWVUeXBlKGRhdGEsIHVzZXJJZCk7CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyLmNoZWNrRW1iZWRkZWRBbGxvd2VkSW5uZXIodXNlcklkLCBpbnRlbnQsIG1pbWVUeXBlKTsKKworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoRk9SQ0VfTkVXX1RBU0tfRkxBR1MpOworICAgICAgICByZXR1cm4gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCAtMSwgbnVsbCwgaW50ZW50LCBtaW1lVHlwZSwgbnVsbCwgbnVsbCwgbnVsbCwKKyAgICAgICAgICAgICAgICBudWxsLCAwLCAwLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBmYWxzZSwgdXNlcklkLCBjb250YWluZXIsIG51bGwpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUFzVXNlcihJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsCiAgICAgICAgICAgICBJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLCBJQmluZGVyIHJlc3VsdFRvLCBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsCkBAIC0zOTk5LDcgKzQwODEsNyBAQAogICAgICAgICB1c2VySWQgPSBtVXNlckNvbnRyb2xsZXIuaGFuZGxlSW5jb21pbmdVc2VyKEJpbmRlci5nZXRDYWxsaW5nUGlkKCksIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksCiAgICAgICAgICAgICAgICAgdXNlcklkLCBmYWxzZSwgQUxMT1dfRlVMTF9PTkxZLCAic3RhcnRBY3Rpdml0eSIsIG51bGwpOwogICAgICAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gdXNlciBhcHAgc3RhY2tzIGhlcmUuCi0gICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCisgICAgICAgIHJldHVybiBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBwcm9maWxlckluZm8sIG51bGwsIG51bGwsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICB9CkBAIC00MDYyLDcgKzQxNDQsNyBAQAogCiAgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludCByZXQgPSBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KG51bGwsIHRhcmdldFVpZCwgdGFyZ2V0UGFja2FnZSwgaW50ZW50LAorICAgICAgICAgICAgaW50IHJldCA9IG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0eU1heVdhaXQobnVsbCwgdGFyZ2V0VWlkLCB0YXJnZXRQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSwgbnVsbCwgbnVsbCwgcmVzdWx0VG8sIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIHN0YXJ0RmxhZ3MsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIGJPcHRpb25zLCBpZ25vcmVUYXJnZXRTZWN1cml0eSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgICAgIHJldHVybiByZXQ7CkBAIC00MDkxLDcgKzQxNzMsNyBAQAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHlBbmRXYWl0IiwgbnVsbCk7CiAgICAgICAgIFdhaXRSZXN1bHQgcmVzID0gbmV3IFdhaXRSZXN1bHQoKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsIHJlc29sdmVkVHlwZSwKKyAgICAgICAgbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChjYWxsZXIsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LCByZXNvbHZlZFR5cGUsCiAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgcmVzdWx0VG8sIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIHN0YXJ0RmxhZ3MsIHByb2ZpbGVySW5mbywgcmVzLCBudWxsLAogICAgICAgICAgICAgICAgIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgcmV0dXJuIHJlczsKQEAgLTQxMDUsNyArNDE4Nyw3IEBACiAgICAgICAgIHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoQmluZGVyLmdldENhbGxpbmdQaWQoKSwgQmluZGVyLmdldENhbGxpbmdVaWQoKSwKICAgICAgICAgICAgICAgICB1c2VySWQsIGZhbHNlLCBBTExPV19GVUxMX09OTFksICJzdGFydEFjdGl2aXR5V2l0aENvbmZpZyIsIG51bGwpOwogICAgICAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gdXNlciBhcHAgc3RhY2tzIGhlcmUuCi0gICAgICAgIGludCByZXQgPSBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCisgICAgICAgIGludCByZXQgPSBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdHlNYXlXYWl0KGNhbGxlciwgLTEsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBjb25maWcsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICAgICAgcmV0dXJuIHJldDsKQEAgLTQxNjMsNyArNDI0NSw3IEBACiAgICAgICAgIHVzZXJJZCA9IG1Vc2VyQ29udHJvbGxlci5oYW5kbGVJbmNvbWluZ1VzZXIoY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgdXNlcklkLCBmYWxzZSwKICAgICAgICAgICAgICAgICBBTExPV19GVUxMX09OTFksICJzdGFydFZvaWNlQWN0aXZpdHkiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAorICAgICAgICByZXR1cm4gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAogICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSwgc2Vzc2lvbiwgaW50ZXJhY3RvciwgbnVsbCwgbnVsbCwgMCwgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvLCBudWxsLAogICAgICAgICAgICAgICAgIG51bGwsIGJPcHRpb25zLCBmYWxzZSwgdXNlcklkLCBudWxsLCBudWxsKTsKICAgICB9CkBAIC00Mjc0LDEwICs0MzU2LDExIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZpbmFsIGxvbmcgb3JpZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7Ci0gICAgICAgICAgICBpbnQgcmVzID0gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXR5TG9ja2VkKHIuYXBwLnRocmVhZCwgaW50ZW50LAotICAgICAgICAgICAgICAgICAgICByLnJlc29sdmVkVHlwZSwgYUluZm8sIG51bGwsIG51bGwsIHJlc3VsdFRvICE9IG51bGwgPyByZXN1bHRUby5hcHBUb2tlbiA6IG51bGwsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIC0xLCByLmxhdW5jaGVkRnJvbVVpZCwgci5sYXVuY2hlZEZyb21QYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAtMSwgci5sYXVuY2hlZEZyb21VaWQsIDAsIG9wdGlvbnMsIGZhbHNlLCBmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICBpbnQgcmVzID0gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TG9ja2VkKHIuYXBwLnRocmVhZCwgaW50ZW50LAorICAgICAgICAgICAgICAgICAgICBudWxsIC8qZXBoZW1lcmFsSW50ZW50Ki8sIHIucmVzb2x2ZWRUeXBlLCBhSW5mbywgbnVsbCAvKnJJbmZvKi8sIG51bGwsCisgICAgICAgICAgICAgICAgICAgIG51bGwsIHJlc3VsdFRvICE9IG51bGwgPyByZXN1bHRUby5hcHBUb2tlbiA6IG51bGwsIHJlc3VsdFdobywgcmVxdWVzdENvZGUsIC0xLAorICAgICAgICAgICAgICAgICAgICByLmxhdW5jaGVkRnJvbVVpZCwgci5sYXVuY2hlZEZyb21QYWNrYWdlLCAtMSwgci5sYXVuY2hlZEZyb21VaWQsIDAsIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSwgbnVsbCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOwogCiAgICAgICAgICAgICByLmZpbmlzaGluZyA9IHdhc0ZpbmlzaGluZzsKQEAgLTQyODksNyArNDM3Miw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGZpbmFsIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHMoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgeworICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzKGludCB0YXNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgewogICAgICAgICBpZiAoY2hlY2tDYWxsaW5nUGVybWlzc2lvbihTVEFSVF9UQVNLU19GUk9NX1JFQ0VOVFMpICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgewogICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzIGNhbGxlZCB3aXRob3V0ICIgKwogICAgICAgICAgICAgICAgICAgICBTVEFSVF9UQVNLU19GUk9NX1JFQ0VOVFM7CkBAIC00Mjk4LDI0ICs0MzgxLDI4IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcih0YXNrSWQsIGxhdW5jaFN0YWNrSWQsIGJPcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcih0YXNrSWQsIGJPcHRpb25zKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzSW5uZXIoaW50IHRhc2tJZCwgaW50IGxhdW5jaFN0YWNrSWQsIEJ1bmRsZSBiT3B0aW9ucykgeworICAgIGZpbmFsIGludCBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcihpbnQgdGFza0lkLCBCdW5kbGUgYk9wdGlvbnMpIHsKICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrOwogICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZDsKICAgICAgICAgZmluYWwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlOwogICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50OwogICAgICAgICBmaW5hbCBpbnQgdXNlcklkOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5T3B0aW9ucyBhY3Rpdml0eU9wdGlvbnMgPSAoYk9wdGlvbnMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgPyBuZXcgQWN0aXZpdHlPcHRpb25zKGJPcHRpb25zKSA6IG51bGw7CisgICAgICAgICAgICBmaW5hbCBpbnQgbGF1bmNoU3RhY2tJZCA9IChhY3Rpdml0eU9wdGlvbnMgIT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgPyBhY3Rpdml0eU9wdGlvbnMuZ2V0TGF1bmNoU3RhY2tJZCgpIDogSU5WQUxJRF9TVEFDS19JRDsKKwogICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInN0YXJ0QWN0aXZpdHlGcm9tUmVjZW50c0lubmVyOiBUYXNrICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgdGFza0lkICsgIiBjYW4ndCBiZSBsYXVuY2ggaW4gdGhlIGhvbWUgc3RhY2suIik7CiAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHRhc2sgPSBtU3RhY2tTdXBlcnZpc29yLmFueVRhc2tGb3JJZExvY2tlZCh0YXNrSWQsIFJFU1RPUkVfRlJPTV9SRUNFTlRTLCBsYXVuY2hTdGFja0lkKTsKICAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKApAQCAtNDMyMywxOSArNDQxMCwyMSBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobGF1bmNoU3RhY2tJZCAhPSBJTlZBTElEX1NUQUNLX0lEKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEICYmIGJPcHRpb25zICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIGFjdGl2aXR5T3B0aW9ucyA9IG5ldyBBY3Rpdml0eU9wdGlvbnMoYk9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXREb2NrZWRTdGFja0NyZWF0ZVN0YXRlKGFjdGl2aXR5T3B0aW9ucy5nZXREb2NrQ3JlYXRlTW9kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogaW5pdGlhbEJvdW5kcyAqLyk7CisgICAgICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEICYmIGFjdGl2aXR5T3B0aW9ucyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldERvY2tlZFN0YWNrQ3JlYXRlU3RhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHlPcHRpb25zLmdldERvY2tDcmVhdGVNb2RlKCksIG51bGwgLyogaW5pdGlhbEJvdW5kcyAqLyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICh0YXNrLnN0YWNrLm1TdGFja0lkICE9IGxhdW5jaFN0YWNrSWQpIHsKICAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5tb3ZlVGFza1RvU3RhY2tMb2NrZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0lkLCBsYXVuY2hTdGFja0lkLCBPTl9UT1AsIEZPUkNFX0ZPQ1VTLCAic3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qIGFuaW1hdGUgKi8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFOSU1BVEUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhc2suZ2V0Um9vdEFjdGl2aXR5KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgbXVzdCBjb25maXJtIGNyZWRlbnRpYWxzIChlLmcuIHdoZW4gZmlyc3QgbGF1bmNoaW5nIGEgd29yayBhcHAgYW5kIHRoZQorICAgICAgICAgICAgLy8gV29yayBDaGFsbGVuZ2UgaXMgcHJlc2VudCkgbGV0IHN0YXJ0QWN0aXZpdHlJblBhY2thZ2UgaGFuZGxlIHRoZSBpbnRlcmNlcHRpbmcuCisgICAgICAgICAgICBpZiAoIW1Vc2VyQ29udHJvbGxlci5zaG91bGRDb25maXJtQ3JlZGVudGlhbHModGFzay51c2VySWQpCisgICAgICAgICAgICAgICAgICAgICYmIHRhc2suZ2V0Um9vdEFjdGl2aXR5KCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9Gcm9udExvY2tlZCh0YXNrLnRhc2tJZCwgMCwgYk9wdGlvbnMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVDsKICAgICAgICAgICAgIH0KQEAgLTQzNTgsNyArNDQ0Nyw3IEBACiAgICAgICAgICAgICAgICAgdXNlcklkLCBmYWxzZSwgQUxMT1dfRlVMTF9PTkxZLCAic3RhcnRBY3Rpdml0eUluUGFja2FnZSIsIG51bGwpOwogCiAgICAgICAgIC8vIFRPRE86IFN3aXRjaCB0byB1c2VyIGFwcCBzdGFja3MgaGVyZS4KLSAgICAgICAgaW50IHJldCA9IG1TdGFja1N1cGVydmlzb3Iuc3RhcnRBY3Rpdml0eU1heVdhaXQobnVsbCwgdWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAorICAgICAgICBpbnQgcmV0ID0gbUFjdGl2aXR5U3RhcnRlci5zdGFydEFjdGl2aXR5TWF5V2FpdChudWxsLCB1aWQsIGNhbGxpbmdQYWNrYWdlLCBpbnRlbnQsCiAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCByZXN1bHRUbywgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgc3RhcnRGbGFncywKICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBiT3B0aW9ucywgZmFsc2UsIHVzZXJJZCwgY29udGFpbmVyLCBpblRhc2spOwogICAgICAgICByZXR1cm4gcmV0OwpAQCAtNDM3Miw3ICs0NDYxLDcgQEAKICAgICAgICAgdXNlcklkID0gbVVzZXJDb250cm9sbGVyLmhhbmRsZUluY29taW5nVXNlcihCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHkiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBpbnQgcmV0ID0gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXRpZXMoY2FsbGVyLCAtMSwgY2FsbGluZ1BhY2thZ2UsIGludGVudHMsCisgICAgICAgIGludCByZXQgPSBtQWN0aXZpdHlTdGFydGVyLnN0YXJ0QWN0aXZpdGllcyhjYWxsZXIsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50cywKICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGVzLCByZXN1bHRUbywgYk9wdGlvbnMsIHVzZXJJZCk7CiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQpAQCAtNDM4NCw3ICs0NDczLDcgQEAKICAgICAgICAgdXNlcklkID0gbVVzZXJDb250cm9sbGVyLmhhbmRsZUluY29taW5nVXNlcihCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpLCBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLAogICAgICAgICAgICAgICAgIHVzZXJJZCwgZmFsc2UsIEFMTE9XX0ZVTExfT05MWSwgInN0YXJ0QWN0aXZpdHlJblBhY2thZ2UiLCBudWxsKTsKICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICBpbnQgcmV0ID0gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXRpZXMobnVsbCwgdWlkLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50cywgcmVzb2x2ZWRUeXBlcywKKyAgICAgICAgaW50IHJldCA9IG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0aWVzKG51bGwsIHVpZCwgY2FsbGluZ1BhY2thZ2UsIGludGVudHMsIHJlc29sdmVkVHlwZXMsCiAgICAgICAgICAgICAgICAgcmVzdWx0VG8sIGJPcHRpb25zLCB1c2VySWQpOwogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KQEAgLTQ0MjAsNyArNDUwOSw3IEBACiAgICAgICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICByLmZyb3plbkJlZm9yZURlc3Ryb3kgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmICghdXBkYXRlQ29uZmlndXJhdGlvbkxvY2tlZChjb25maWcsIHIsIGZhbHNlKSkgewotICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CkBAIC00NzU4LDEyICs0ODQ3LDExIEBACiAgICAgICAgICAgICBmaW5pc2hJbnN0cnVtZW50YXRpb25Mb2NrZWQoYXBwLCBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIGluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZXN0YXJ0aW5nICYmIGhhc1Zpc2libGVBY3Rpdml0aWVzICYmICFtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gcmVzdW1lLCBhbmQgd2UgYXJlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAvLyByZXN0YXJ0aW5nIHRoaXMgcHJvY2VzcywgYnV0IHRoZXJlIGlzIGEgdmlzaWJsZSBhY3Rpdml0eSB0aGF0Ci0gICAgICAgICAgICAvLyBpcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MuLi4gIHRoZW4gbWFrZSBzdXJlIGFsbCB2aXNpYmxlCi0gICAgICAgICAgICAvLyBhY3Rpdml0aWVzIGFyZSBydW5uaW5nLCB0YWtpbmcgY2FyZSBvZiByZXN0YXJ0aW5nIHRoaXMKLSAgICAgICAgICAgIC8vIHByb2Nlc3MuCisgICAgICAgIGlmICghcmVzdGFydGluZyAmJiBoYXNWaXNpYmxlQWN0aXZpdGllcworICAgICAgICAgICAgICAgICYmICFtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHJlc3VtZSwgYW5kIHdlIGFyZSBub3QgYWxyZWFkeSByZXN0YXJ0aW5nIHRoaXMgcHJvY2VzcywgYnV0CisgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHZpc2libGUgYWN0aXZpdHkgdGhhdCBpcyBob3N0ZWQgYnkgdGhlIHByb2Nlc3MuLi4gIHRoZW4gbWFrZSBzdXJlIGFsbAorICAgICAgICAgICAgLy8gdmlzaWJsZSBhY3Rpdml0aWVzIGFyZSBydW5uaW5nLCB0YWtpbmcgY2FyZSBvZiByZXN0YXJ0aW5nIHRoaXMgcHJvY2Vzcy4KICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI5Myw3ICs1MzgxLDcgQEAKICAgICAgICAgICAgIGludCBwa2dVaWQgPSAtMTsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgcGtnVWlkID0gcG0uZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgcGtnVWlkID0gcG0uZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKHBrZ1VpZCA9PSAtMSkgewpAQCAtNTM3OCw3ICs1NDY2LDggQEAKICAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CiAgICAgICAgICAgICAgICAgaW50IGFwcElkID0gLTE7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgYXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKHBtLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgdXNlcklkKSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGFwcElkID09IC0xKSB7CkBAIC01Mzg2LDcgKzU0NzUsNyBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGtpbGxQYWNrYWdlUHJvY2Vzc2VzTG9ja2VkKHBhY2thZ2VOYW1lLCBhcHBJZCwgdXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0xpc3QuU0VSVklDRV9BREosIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgImtpbGwgYmFja2dyb3VuZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0xpc3QuU0VSVklDRV9BREosIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgImtpbGwgYmFja2dyb3VuZCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoY2FsbGluZ0lkKTsKQEAgLTU0NjQsNyArNTU1Myw4IEBACiAgICAgICAgICAgICAgICAgZm9yIChpbnQgdXNlciA6IHVzZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBwa2dVaWQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBrZ1VpZCA9IHBtLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIHVzZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgcGtnVWlkID0gcG0uZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAocGtnVWlkID09IC0xKSB7CkBAIC01Njg3LDcgKzU3NzcsNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGtpbGxQYWNrYWdlUHJvY2Vzc2VzTG9ja2VkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGFwcElkLAogICAgICAgICAgICAgaW50IHVzZXJJZCwgaW50IG1pbk9vbUFkaiwgYm9vbGVhbiBjYWxsZXJXaWxsUmVzdGFydCwgYm9vbGVhbiBhbGxvd1Jlc3RhcnQsCi0gICAgICAgICAgICBib29sZWFuIGRvaXQsIGJvb2xlYW4gZXZlblBlcnNpc3RlbnQsIFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgICAgIGJvb2xlYW4gZG9pdCwgYm9vbGVhbiBldmVuUGVyc2lzdGVudCwgYm9vbGVhbiBraWxsUGFja2FnZUFwcCwgU3RyaW5nIHJlYXNvbikgewogICAgICAgICBBcnJheUxpc3Q8UHJvY2Vzc1JlY29yZD4gcHJvY3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAogICAgICAgICAvLyBSZW1vdmUgYWxsIHByb2Nlc3NlcyB0aGlzIHBhY2thZ2UgbWF5IGhhdmUgdG91Y2hlZDogYWxsIHdpdGggdGhlCkBAIC01NzM2LDcgKzU4MjYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9BTEwgJiYgYXBwLnVzZXJJZCAhPSB1c2VySWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXBwLnBrZ0xpc3QuY29udGFpbnNLZXkocGFja2FnZU5hbWUpICYmICFpc0RlcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKCFraWxsUGFja2FnZUFwcCB8fCAhYXBwLnBrZ0xpc3QuY29udGFpbnNLZXkocGFja2FnZU5hbWUpKSAmJiAhaXNEZXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNTgyMCw3ICs1OTEwLDcgQEAKICAgICAgICAgLy8gQ2xlYW4tdXAgZGlzYWJsZWQgYWN0aXZpdGllcy4KICAgICAgICAgaWYgKG1TdGFja1N1cGVydmlzb3IuZmluaXNoRGlzYWJsZWRQYWNrYWdlQWN0aXZpdGllc0xvY2tlZCgKICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgZGlzYWJsZWRDbGFzc2VzLCB0cnVlLCBmYWxzZSwgdXNlcklkKSAmJiBtQm9vdGVkKSB7Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc2NoZWR1bGVJZGxlTG9ja2VkKCk7CiAgICAgICAgIH0KIApAQCAtNTg1OCw4ICs1OTQ4LDggQEAKIAogICAgICAgICBpZiAoYXBwSWQgPCAwICYmIHBhY2thZ2VOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKAotICAgICAgICAgICAgICAgICAgICAgICAgQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIDApKTsKKyAgICAgICAgICAgICAgICBhcHBJZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQoQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCB1c2VySWQpKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5MDIsNyArNTk5Miw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBib29sZWFuIGRpZFNvbWV0aGluZyA9IGtpbGxQYWNrYWdlUHJvY2Vzc2VzTG9ja2VkKHBhY2thZ2VOYW1lLCBhcHBJZCwgdXNlcklkLAotICAgICAgICAgICAgICAgIFByb2Nlc3NMaXN0LklOVkFMSURfQURKLCBjYWxsZXJXaWxsUmVzdGFydCwgdHJ1ZSwgZG9pdCwgZXZlblBlcnNpc3RlbnQsCisgICAgICAgICAgICAgICAgUHJvY2Vzc0xpc3QuSU5WQUxJRF9BREosIGNhbGxlcldpbGxSZXN0YXJ0LCB0cnVlLCBkb2l0LCBldmVuUGVyc2lzdGVudCwgdHJ1ZSwKICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSA9PSBudWxsID8gKCJzdG9wIHVzZXIgIiArIHVzZXJJZCkgOiAoInN0b3AgIiArIHBhY2thZ2VOYW1lKSk7CiAKICAgICAgICAgaWYgKG1TdGFja1N1cGVydmlzb3IuZmluaXNoRGlzYWJsZWRQYWNrYWdlQWN0aXZpdGllc0xvY2tlZCgKQEAgLTYwMDgsNyArNjA5OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1Cb290ZWQpIHsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5zY2hlZHVsZUlkbGVMb2NrZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjUwMSw4ICs2NTkxLDEwIEBACiAgICAgICAgICAgICBQcm9jZXNzLmVzdGFibGlzaFp5Z290ZUNvbm5lY3Rpb25Gb3JBYmkoYWJpKTsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpbnN0cnVjdGlvblNldCA9IFZNUnVudGltZS5nZXRJbnN0cnVjdGlvblNldChhYmkpOwogICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWRJc2FzLmNvbnRhaW5zKGluc3RydWN0aW9uU2V0KSkgewotICAgICAgICAgICAgICAgIGlmIChtSW5zdGFsbGVyLm1hcmtCb290Q29tcGxldGUoVk1SdW50aW1lLmdldEluc3RydWN0aW9uU2V0KGFiaSkpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlVuYWJsZSB0byBtYXJrIGJvb3QgY29tcGxldGUgZm9yIGFiaTogIiArIGFiaSk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgbUluc3RhbGxlci5tYXJrQm9vdENvbXBsZXRlKFZNUnVudGltZS5nZXRJbnN0cnVjdGlvblNldChhYmkpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiVW5hYmxlIHRvIG1hcmsgYm9vdCBjb21wbGV0ZSBmb3IgYWJpOiAiICsgYWJpLCBlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29tcGxldGVkSXNhcy5hZGQoaW5zdHJ1Y3Rpb25TZXQpOwogICAgICAgICAgICAgfQpAQCAtNjY4Myw2ICs2Nzc1LDE1IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGZpbmFsIHZvaWQgYWN0aXZpdHlSZWxhdW5jaGVkKElCaW5kZXIgdG9rZW4pIHsKKyAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmFjdGl2aXR5UmVsYXVuY2hlZExvY2tlZCh0b2tlbik7CisgICAgICAgIH0KKyAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXBvcnRTaXplQ29uZmlndXJhdGlvbnMoSUJpbmRlciB0b2tlbiwgaW50W10gaG9yaXpvbnRhbFNpemVDb25maWd1cmF0aW9uLAogICAgICAgICAgICAgaW50W10gdmVydGljYWxTaXplQ29uZmlndXJhdGlvbnMsIGludFtdIHNtYWxsZXN0U2l6ZUNvbmZpZ3VyYXRpb25zKSB7CiAgICAgICAgIGlmIChERUJVR19DT05GSUdVUkFUSU9OKSBTbG9nLnYoVEFHLCAiUmVwb3J0IGNvbmZpZ3VyYXRpb246ICIgKyB0b2tlbiArICIgIgpAQCAtNjgzMCw4ICs2OTMxLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxpbmdVaWQgIT0gMCAmJiBjYWxsaW5nVWlkICE9IFByb2Nlc3MuU1lTVEVNX1VJRCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgdWlkID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKGNhbGxpbmdVaWQpKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVpZCA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgVXNlckhhbmRsZS5nZXRVc2VySWQoY2FsbGluZ1VpZCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIVVzZXJIYW5kbGUuaXNTYW1lQXBwKGNhbGxpbmdVaWQsIHVpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IGdldEludGVudFNlbmRlcigpIGZyb20gcGlkPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEJpbmRlci5nZXRDYWxsaW5nUGlkKCkKQEAgLTY5MjYsOCArNzAyNyw4IEBACiAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CiAgICAgICAgICAgICBQZW5kaW5nSW50ZW50UmVjb3JkIHJlYyA9IChQZW5kaW5nSW50ZW50UmVjb3JkKXNlbmRlcjsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaW50IHVpZCA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBhY2thZ2VVaWQocmVjLmtleS5wYWNrYWdlTmFtZSwgVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOworICAgICAgICAgICAgICAgIGZpbmFsIGludCB1aWQgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChyZWMua2V5LnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFVc2VySGFuZGxlLmlzU2FtZUFwcCh1aWQsIEJpbmRlci5nZXRDYWxsaW5nVWlkKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IGNhbmNlbEludGVudFNlbmRlcigpIGZyb20gcGlkPSIKICAgICAgICAgICAgICAgICAgICAgICAgICsgQmluZGVyLmdldENhbGxpbmdQaWQoKQpAQCAtNzE1NiwyNCArNzI1Nyw2OCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaW5NdWx0aVdpbmRvd01vZGUoSUJpbmRlciB0b2tlbikgewotICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgewotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmlzSW5TdGFja0xvY2tlZCh0b2tlbik7Ci0gICAgICAgICAgICBpZiAociA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gQWN0aXZpdHlSZWNvcmQuaXNJblN0YWNrTG9ja2VkKHRva2VuKTsKKyAgICAgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQW4gYWN0aXZpdHkgaXMgY29uc2lkZXIgdG8gYmUgaW4gbXVsdGktd2luZG93IG1vZGUgaWYgaXRzIHRhc2sgaXNuJ3QgZnVsbHNjcmVlbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gIXIudGFzay5tRnVsbHNjcmVlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFuIGFjdGl2aXR5IGlzIGNvbnNpZGVyIHRvIGJlIGluIG11bHRpLXdpbmRvdyBtb2RlIGlmIGl0cyB0YXNrIGlzbid0IGZ1bGxzY3JlZW4uCi0gICAgICAgICAgICByZXR1cm4gIXIudGFzay5tRnVsbHNjcmVlbjsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBpblBpY3R1cmVJblBpY3R1cmVNb2RlKElCaW5kZXIgdG9rZW4pIHsKLSAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBBY3Rpdml0eVJlY29yZC5nZXRTdGFja0xvY2tlZCh0b2tlbik7Ci0gICAgICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IEFjdGl2aXR5UmVjb3JkLmdldFN0YWNrTG9ja2VkKHRva2VuKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBzdGFjay5tU3RhY2tJZCA9PSBQSU5ORURfU1RBQ0tfSUQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhY2subVN0YWNrSWQgPT0gUElOTkVEX1NUQUNLX0lEOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGVudGVyUGljdHVyZUluUGljdHVyZU1vZGUoSUJpbmRlciB0b2tlbikgeworICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1TdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkRldmljZSBkb2Vzbid0IHN1cHBvcnQgcGljdHVyZS1pbi1waWN0dXJlIG1vZGUuIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmZvclRva2VuTG9ja2VkKHRva2VuKTsKKworICAgICAgICAgICAgICAgIGlmIChyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZW50ZXJQaWN0dXJlSW5QaWN0dXJlTW9kZTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIkNhbid0IGZpbmQgYWN0aXZpdHkgZm9yIHRva2VuPSIgKyB0b2tlbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFyLnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImVudGVyUGljdHVyZUluUGljdHVyZU1vZGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJQaWN0dXJlLUluLVBpY3R1cmUgbm90IHN1cHBvcnRlZCBmb3Igcj0iICsgcik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBkZWZhdWx0IGxhdW5jaCBib3VuZHMgZm9yIHBpbm5lZCBzdGFjayBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldC4KKyAgICAgICAgICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IChtU3RhY2tTdXBlcnZpc29yLmdldFN0YWNrKFBJTk5FRF9TVEFDS19JRCkgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gbURlZmF1bHRQaW5uZWRTdGFja0JvdW5kcyA6IG51bGw7CisKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVBY3Rpdml0eVRvU3RhY2tMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICByLCBQSU5ORURfU1RBQ0tfSUQsICJlbnRlclBpY3R1cmVJblBpY3R1cmVNb2RlIiwgYm91bmRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc2MzAsNyArNzc3NSw4IEBACiAgICAgICAgIGludCB0YXJnZXRVaWQgPSBsYXN0VGFyZ2V0VWlkOwogICAgICAgICBpZiAodGFyZ2V0VWlkIDwgMCAmJiB0YXJnZXRQa2cgIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKHRhcmdldFBrZywgVXNlckhhbmRsZS5nZXRVc2VySWQoY2FsbGluZ1VpZCkpOworICAgICAgICAgICAgICAgIHRhcmdldFVpZCA9IHBtLmdldFBhY2thZ2VVaWQodGFyZ2V0UGtnLCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldFVzZXJJZChjYWxsaW5nVWlkKSk7CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVpZCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1VSSV9QRVJNSVNTSU9OKSBTbG9nLnYoVEFHX1VSSV9QRVJNSVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBncmFudCBVUkkgcGVybWlzc2lvbiBubyB1aWQgZm9yOiAiICsgdGFyZ2V0UGtnKTsKQEAgLTc3NjgsNyArNzkxNCw3IEBACiAgICAgICAgIGludCB0YXJnZXRVaWQ7CiAgICAgICAgIGZpbmFsIElQYWNrYWdlTWFuYWdlciBwbSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRhcmdldFVpZCA9IHBtLmdldFBhY2thZ2VVaWQodGFyZ2V0UGtnLCB0YXJnZXRVc2VySWQpOworICAgICAgICAgICAgdGFyZ2V0VWlkID0gcG0uZ2V0UGFja2FnZVVpZCh0YXJnZXRQa2csIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgdGFyZ2V0VXNlcklkKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTc4MjksNyArNzk3NSw4IEBACiAgICAgICAgICAgICB0YXJnZXRVaWQgPSBuZWVkZWQudGFyZ2V0VWlkOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKHRhcmdldFBrZywgdGFyZ2V0VXNlcklkKTsKKyAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKHRhcmdldFBrZywgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VXNlcklkKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQpAQCAtODEzMyw2ICs4MjgwLDE4IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSUJpbmRlciBnZXRVcmlQZXJtaXNzaW9uT3duZXJGb3JBY3Rpdml0eShJQmluZGVyIGFjdGl2aXR5VG9rZW4pIHsKKyAgICAgICAgZW5mb3JjZU5vdElzb2xhdGVkQ2FsbGVyKCJnZXRVcmlQZXJtaXNzaW9uT3duZXJGb3JBY3Rpdml0eSIpOworICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmlzSW5TdGFja0xvY2tlZChhY3Rpdml0eVRva2VuKTsKKyAgICAgICAgICAgIGlmIChyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJBY3Rpdml0eSBkb2VzIG5vdCBleGlzdDsgdG9rZW49IgorICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3Rpdml0eVRva2VuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByLmdldFVyaVBlcm1pc3Npb25zTG9ja2VkKCkuZ2V0RXh0ZXJuYWxUb2tlbkxvY2tlZCgpOworICAgICAgICB9CisgICAgfQogICAgIC8qKgogICAgICAqIEBwYXJhbSB1cmkgVGhpcyB1cmkgbXVzdCBOT1QgY29udGFpbiBhbiBlbWJlZGRlZCB1c2VySWQuCiAgICAgICogQHBhcmFtIHNvdXJjZVVzZXJJZCBUaGUgdXNlcklkIGluIHdoaWNoIHRoZSB1cmkgaXMgdG8gYmUgcmVzb2x2ZWQuCkBAIC04Mjg0LDggKzg0NDMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpICE9IG51bGwgJiYgc291cmNlUGtnLmVxdWFscyhwaS5wYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGFyZ2V0VWlkID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWlkID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBhY2thZ2VVaWQodGFyZ2V0UGtnLCB0YXJnZXRVc2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRVaWQgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQa2csIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLCB0YXJnZXRVc2VySWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVaWQgIT0gLTEpIHsKQEAgLTg0NDEsNyArODYwMCw4IEBACiAgICAgICAgIGZpbmFsIGludCBjYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKICAgICAgICAgZmluYWwgSVBhY2thZ2VNYW5hZ2VyIHBtID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgZmluYWwgaW50IHBhY2thZ2VVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKHBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLmdldFVzZXJJZChjYWxsaW5nVWlkKSk7CisgICAgICAgICAgICBmaW5hbCBpbnQgcGFja2FnZVVpZCA9IHBtLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKKyAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRVc2VySWQoY2FsbGluZ1VpZCkpOwogICAgICAgICAgICAgaWYgKHBhY2thZ2VVaWQgIT0gY2FsbGluZ1VpZCkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICJQYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgZG9lcyBub3QgYmVsb25nIHRvIGNhbGxpbmcgVUlEICIgKyBjYWxsaW5nVWlkKTsKQEAgLTg0ODEsNiArODY0MSwzNSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBQYXJjZWxlZExpc3RTbGljZTxhbmRyb2lkLmNvbnRlbnQuVXJpUGVybWlzc2lvbj4gZ2V0R3JhbnRlZFVyaVBlcm1pc3Npb25zKAorICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uR0VUX0FQUF9HUkFOVEVEX1VSSV9QRVJNSVNTSU9OUywKKyAgICAgICAgICAgICAgICAiZ2V0R3JhbnRlZFVyaVBlcm1pc3Npb25zIik7CisKKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PGFuZHJvaWQuY29udGVudC5VcmlQZXJtaXNzaW9uPiByZXN1bHQgPSBMaXN0cy5uZXdBcnJheUxpc3QoKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IG1HcmFudGVkVXJpUGVybWlzc2lvbnMuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBBcnJheU1hcDxHcmFudFVyaSwgVXJpUGVybWlzc2lvbj4gcGVybXMgPSBtR3JhbnRlZFVyaVBlcm1pc3Npb25zLnZhbHVlQXQoaSk7CisgICAgICAgICAgICAgICAgZm9yIChVcmlQZXJtaXNzaW9uIHBlcm0gOiBwZXJtcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFja2FnZU5hbWUuZXF1YWxzKHBlcm0udGFyZ2V0UGtnKSAmJiBwZXJtLnRhcmdldFVzZXJJZCA9PSB1c2VySWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtLnBlcnNpc3RlZE1vZGVGbGFncyAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBlcm0uYnVpbGRQZXJzaXN0ZWRQdWJsaWNBcGlPYmplY3QoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5ldyBQYXJjZWxlZExpc3RTbGljZTxhbmRyb2lkLmNvbnRlbnQuVXJpUGVybWlzc2lvbj4ocmVzdWx0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBjbGVhckdyYW50ZWRVcmlQZXJtaXNzaW9ucyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5DTEVBUl9BUFBfR1JBTlRFRF9VUklfUEVSTUlTU0lPTlMsCisgICAgICAgICAgICAgICAgImNsZWFyR3JhbnRlZFVyaVBlcm1pc3Npb25zIik7CisgICAgICAgIHJlbW92ZVVyaVBlcm1pc3Npb25zRm9yUGFja2FnZUxvY2tlZChwYWNrYWdlTmFtZSwgdXNlcklkLCB0cnVlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzaG93V2FpdGluZ0ZvckRlYnVnZ2VyKElBcHBsaWNhdGlvblRocmVhZCB3aG8sIGJvb2xlYW4gd2FpdGluZykgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgYXBwID0KQEAgLTg3MDgsNiArODg5NywyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lOR09SRV9ET0NLRURfU1RBQ0tfVEFTS1MpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5zdGFjayAhPSBudWxsICYmIHRyLnN0YWNrLmlzRG9ja2VkU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19SRUNFTlRTKSBTbG9nLmQoVEFHX1JFQ0VOVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcsIGRvY2tlZCBzdGFjayB0YXNrOiAiICsgdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuUkVDRU5UX0lOR09SRV9QSU5ORURfU1RBQ0tfVEFTS1MpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5zdGFjayAhPSBudWxsICYmIHRyLnN0YWNrLmlzUGlubmVkU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19SRUNFTlRTKSBTbG9nLmQoVEFHX1JFQ0VOVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcsIHBpbm5lZCBzdGFjayB0YXNrOiAiICsgdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh0ci5hdXRvUmVtb3ZlUmVjZW50cyAmJiB0ci5nZXRUb3BBY3Rpdml0eSgpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGluY2x1ZGUgYXV0byByZW1vdmUgdGFza3MgdGhhdCBhcmUgZmluaXNoZWQgb3IgZmluaXNoaW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1JFQ0VOVFMpIFNsb2cuZChUQUdfUkVDRU5UUywKQEAgLTg4NzEsMTUgKzkwNzQsMTQgQEAKICAgICAgICAgICAgICAgICB0YXNrLm1SZXNpemVhYmxlID0gcmVzaXplYWJsZTsKICAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zZXRUYXNrUmVzaXplYWJsZSh0YXNrSWQsIHJlc2l6ZWFibGUpOwogICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlc2l6ZVRhc2soaW50IHRhc2tJZCwgUmVjdCBib3VuZHMsIGludCByZXNpemVNb2RlKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAicmVzaXplVGFzaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAicmVzaXplVGFzaygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtODkyOSw4ICs5MTMxLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBSZWN0IGdldFRhc2tCb3VuZHMoaW50IHRhc2tJZCkgewotICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsCi0gICAgICAgICAgICAgICAgImdldFRhc2tCb3VuZHMoKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgImdldFRhc2tCb3VuZHMoKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIFJlY3QgcmVjdCA9IG5ldyBSZWN0KCk7CiAgICAgICAgIHRyeSB7CkBAIC05MjMyLDggKzk0MzMsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBJQWN0aXZpdHlDb250YWluZXIgY3JlYXRlVmlydHVhbEFjdGl2aXR5Q29udGFpbmVyKElCaW5kZXIgcGFyZW50QWN0aXZpdHlUb2tlbiwKICAgICAgICAgICAgIElBY3Rpdml0eUNvbnRhaW5lckNhbGxiYWNrIGNhbGxiYWNrKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJjcmVhdGVBY3Rpdml0eUNvbnRhaW5lcigpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiY3JlYXRlQWN0aXZpdHlDb250YWluZXIoKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGlmIChwYXJlbnRBY3Rpdml0eVRva2VuID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwYXJlbnQgdG9rZW4gbXVzdCBub3QgYmUgbnVsbCIpOwpAQCAtOTI1MSw4ICs5NDUxLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGRlbGV0ZUFjdGl2aXR5Q29udGFpbmVyKElBY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewotICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsCi0gICAgICAgICAgICAgICAgImRlbGV0ZUFjdGl2aXR5Q29udGFpbmVyKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJkZWxldGVBY3Rpdml0eUNvbnRhaW5lcigpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5kZWxldGVBY3Rpdml0eUNvbnRhaW5lcihjb250YWluZXIpOwogICAgICAgICB9CkBAIC05MjYwLDggKzk0NTksNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIElBY3Rpdml0eUNvbnRhaW5lciBjcmVhdGVTdGFja09uRGlzcGxheShpbnQgZGlzcGxheUlkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJjcmVhdGVTdGFja09uRGlzcGxheSgpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiY3JlYXRlU3RhY2tPbkRpc3BsYXkoKSIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBzdGFja0lkID0gbVN0YWNrU3VwZXJ2aXNvci5nZXROZXh0U3RhY2tJZCgpOwogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9CkBAIC05Mjk2LDIzICs5NDk0LDIzIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbW92ZUFjdGl2aXR5VG9TdGFjayhJQmluZGVyIHRva2VuLCBpbnQgc3RhY2tJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChzdGFja0lkID09IEhPTUVfU1RBQ0tfSUQpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJtb3ZlQWN0aXZpdHlUb1N0YWNrOiBBdHRlbXB0IHRvIG1vdmUgdG9rZW4gIiArIHRva2VuICsgIiB0byBob21lIHN0YWNrIik7Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgdm9pZCBleGl0RnJlZWZvcm1Nb2RlKElCaW5kZXIgdG9rZW4pIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmZvclRva2VuTG9ja2VkKHRva2VuKTsKICAgICAgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmVBY3Rpdml0eVRvU3RhY2s6IE5vIGFjdGl2aXR5IHJlY29yZCBtYXRjaGluZyB0b2tlbj0iICsgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGl0RnJlZWZvcm1Nb2RlOiBObyBhY3Rpdml0eSByZWNvcmQgbWF0Y2hpbmcgdG9rZW49IiArIHRva2VuKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX1NUQUNLLCAibW92ZUFjdGl2aXR5VG9TdGFjazogbW92aW5nIHI9IiArIHIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0byBzdGFja0lkPSIgKyBzdGFja0lkKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja0xvY2tlZChyLnRhc2sudGFza0lkLCBzdGFja0lkLCBPTl9UT1AsICFGT1JDRV9GT0NVUywKLSAgICAgICAgICAgICAgICAgICAgICAgICJtb3ZlQWN0aXZpdHlUb1N0YWNrIiwgdHJ1ZSAvKiBhbmltYXRlICovKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gci5nZXRTdGFja0xvY2tlZCh0b2tlbik7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwgfHwgc3RhY2subVN0YWNrSWQgIT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXRGcmVlZm9ybU1vZGU6IFlvdSBjYW4gb25seSBnbyBmdWxsc2NyZWVuIGZyb20gZnJlZWZvcm0uIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5kKFRBR19TVEFDSywgImV4aXRGcmVlZm9ybU1vZGU6ICIgKyByKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja0xvY2tlZChyLnRhc2sudGFza0lkLCBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9OX1RPUCwgIUZPUkNFX0ZPQ1VTLCAiZXhpdEZyZWVmb3JtTW9kZSIsIEFOSU1BVEUpOwogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICB9CkBAIC05MzIxLDggKzk1MTksNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbW92ZVRhc2tUb1N0YWNrKGludCB0YXNrSWQsIGludCBzdGFja0lkLCBib29sZWFuIHRvVG9wKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRhc2tUb1N0YWNrKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJtb3ZlVGFza1RvU3RhY2soKSIpOwogICAgICAgICBpZiAoc3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAibW92ZVRhc2tUb1N0YWNrOiBBdHRlbXB0IHRvIG1vdmUgdGFzayAiICsgdGFza0lkICsgIiB0byBob21lIHN0YWNrIik7CkBAIC05MzMzLDcgKzk1MzAsNyBAQAogICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5kKFRBR19TVEFDSywgIm1vdmVUYXNrVG9TdGFjazogbW92aW5nIHRhc2s9IiArIHRhc2tJZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRvIHN0YWNrSWQ9IiArIHN0YWNrSWQgKyAiIHRvVG9wPSIgKyB0b1RvcCk7CiAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5tb3ZlVGFza1RvU3RhY2tMb2NrZWQodGFza0lkLCBzdGFja0lkLCB0b1RvcCwgIUZPUkNFX0ZPQ1VTLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1vdmVUYXNrVG9TdGFjayIsIHRydWUgLyogYW5pbWF0ZSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICAibW92ZVRhc2tUb1N0YWNrIiwgQU5JTUFURSk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgICAgIH0KQEAgLTkzNTcsOCArOTU1NCw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbW92ZVRhc2tUb0RvY2tlZFN0YWNrKGludCB0YXNrSWQsIGludCBjcmVhdGVNb2RlLCBib29sZWFuIHRvVG9wLCBib29sZWFuIGFuaW1hdGUsCiAgICAgICAgICAgICBSZWN0IGluaXRpYWxCb3VuZHMpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJtb3ZlVGFza1RvRG9ja2VkU3RhY2soKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgIm1vdmVUYXNrVG9Eb2NrZWRTdGFjaygpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKQEAgLTkzODQsOSArOTU4MCwxMyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBib29sZWFuIG1vdmVUb3BBY3Rpdml0eVRvUGlubmVkU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjaygpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgaWYgKCFtU3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjazoiCisgICAgICAgICAgICAgICAgICAgICAgICArICJEZXZpY2UgZG9lc24ndCBzdXBwb3J0IHBpY3R1cmUtaW4tcGNpdHVyZSBtb2RlIik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1TdGFja1N1cGVydmlzb3IubW92ZVRvcFN0YWNrQWN0aXZpdHlUb1Bpbm5lZFN0YWNrTG9ja2VkKHN0YWNrSWQsIGJvdW5kcyk7CkBAIC05Mzk4LDEzICs5NTk4LDMxIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXNpemVTdGFjayhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMsIGJvb2xlYW4gYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJyZXNpemVTdGFjaygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAicmVzaXplU3RhY2soKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc2l6ZVN0YWNrTG9ja2VkKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCwgYm91bmRzLCAhUFJFU0VSVkVfV0lORE9XUywgYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCwgYm91bmRzLCBudWxsIC8qIHRlbXBUYXNrQm91bmRzICovLCBudWxsIC8qIHRlbXBUYXNrSW5zZXRCb3VuZHMgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAhUFJFU0VSVkVfV0lORE9XUywgYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcmVzaXplRG9ja2VkU3RhY2soUmVjdCBkb2NrZWRCb3VuZHMsIFJlY3QgdGVtcERvY2tlZFRhc2tCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBEb2NrZWRUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBPdGhlclRhc2tCb3VuZHMsIFJlY3QgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzKSB7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKKyAgICAgICAgICAgICAgICAicmVzaXplRG9ja2VkU3RhY2soKSIpOworICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKGRvY2tlZEJvdW5kcywgdGVtcERvY2tlZFRhc2tCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzLCB0ZW1wT3RoZXJUYXNrQm91bmRzLCB0ZW1wT3RoZXJUYXNrSW5zZXRCb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICBQUkVTRVJWRV9XSU5ET1dTKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKQEAgLTk0MTMsOCArOTYzMSw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBwb3NpdGlvblRhc2tJblN0YWNrKGludCB0YXNrSWQsIGludCBzdGFja0lkLCBpbnQgcG9zaXRpb24pIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJwb3NpdGlvblRhc2tJblN0YWNrKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJwb3NpdGlvblRhc2tJblN0YWNrKCkiKTsKICAgICAgICAgaWYgKHN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uVGFza0luU3RhY2s6IEF0dGVtcHQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiB0YXNrICIKQEAgLTk0MzUsOCArOTY1Miw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgTGlzdDxTdGFja0luZm8+IGdldEFsbFN0YWNrSW5mb3MoKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAiZ2V0QWxsU3RhY2tJbmZvcygpIik7CisgICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihNQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLCAiZ2V0QWxsU3RhY2tJbmZvcygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtOTQ0OSw4ICs5NjY1LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdGFja0luZm8gZ2V0U3RhY2tJbmZvKGludCBzdGFja0lkKSB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAiZ2V0U3RhY2tJbmZvKCkiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJnZXRTdGFja0luZm8oKSIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTk0NjMsOCArOTY3OCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBpc0luSG9tZVN0YWNrKGludCB0YXNrSWQpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJnZXRTdGFja0luZm8oKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgImdldFN0YWNrSW5mbygpIik7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtOTU3OCw4ICs5NzkyLDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN0YXJ0TG9ja1Rhc2tNb2RlT25DdXJyZW50KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAic3RhcnRMb2NrVGFza01vZGVPbkN1cnJlbnQiKTsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJzdGFydExvY2tUYXNrTW9kZU9uQ3VycmVudCIpOwogICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTk2MzEsOCArOTg0NCw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzdG9wTG9ja1Rhc2tNb2RlT25DdXJyZW50KCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FDVElWSVRZX1NUQUNLUywKLSAgICAgICAgICAgICAgICAic3RvcExvY2tUYXNrTW9kZU9uQ3VycmVudCIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgInN0b3BMb2NrVGFza01vZGVPbkN1cnJlbnQiKTsKICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3RvcExvY2tUYXNrTW9kZSgpOwpAQCAtOTY3MSw5ICs5ODgzLDEwIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFByb3ZpZGVySW5mbz4gZ2VuZXJhdGVBcHBsaWNhdGlvblByb3ZpZGVyc0xvY2tlZChQcm9jZXNzUmVjb3JkIGFwcCkgewogICAgICAgICBMaXN0PFByb3ZpZGVySW5mbz4gcHJvdmlkZXJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPFByb3ZpZGVySW5mbz4gc2xpY2UgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuCi0gICAgICAgICAgICAgICAgcXVlcnlDb250ZW50UHJvdmlkZXJzKGFwcC5wcm9jZXNzTmFtZSwgYXBwLnVpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNUT0NLX1BNX0ZMQUdTIHwgUGFja2FnZU1hbmFnZXIuR0VUX1VSSV9QRVJNSVNTSU9OX1BBVFRFUk5TKTsKKyAgICAgICAgICAgIFBhcmNlbGVkTGlzdFNsaWNlPFByb3ZpZGVySW5mbz4gc2xpY2UgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkKKyAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5Q29udGVudFByb3ZpZGVycyhhcHAucHJvY2Vzc05hbWUsIGFwcC51aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RPQ0tfUE1fRkxBR1MgfCBQYWNrYWdlTWFuYWdlci5HRVRfVVJJX1BFUk1JU1NJT05fUEFUVEVSTlMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HKTsKICAgICAgICAgICAgIHByb3ZpZGVycyA9IHNsaWNlICE9IG51bGwgPyBzbGljZS5nZXRMaXN0KCkgOiBudWxsOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgfQpAQCAtMTA2MTgsNiArMTA4MzEsNDkgQEAKICAgICB9CiAKICAgICAvKioKKyAgICAgKiBXaGVuIGEgdXNlciBpcyB1bmxvY2tlZCwgd2UgbmVlZCB0byBpbnN0YWxsIGVuY3J5cHRpb24tdW5hd2FyZSBwcm92aWRlcnMKKyAgICAgKiBiZWxvbmdpbmcgdG8gYW55IHJ1bm5pbmcgYXBwcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgaW5zdGFsbEVuY3J5cHRpb25VbmF3YXJlUHJvdmlkZXJzKGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFTdG9yYWdlTWFuYWdlci5pc0ZpbGVCYXNlZEVuY3J5cHRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgICAgIC8vIFRPRE86IGV2ZW50dWFsbHkgcGl2b3QgdGhpcyBiYWNrIHRvIGxvb2sgYXQgY3VycmVudCB1c2VyIHN0YXRlLAorICAgICAgICAgICAgLy8gc2ltaWxhciB0byB0aGUgY29tbWVudCBpbiBVc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZCgpLCBidXQgZm9yCisgICAgICAgICAgICAvLyBub3csIGlmIHdlIHN0YXJ0ZWQgYXBwcyB3aGVuICJ1bmxvY2tlZCIgdGhlbiB1bmF3YXJlIHByb3ZpZGVycworICAgICAgICAgICAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gc3B1biB1cC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgZmluYWwgaW50IE5QID0gbVByb2Nlc3NOYW1lcy5nZXRNYXAoKS5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpcCA9IDA7IGlwIDwgTlA7IGlwKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTcGFyc2VBcnJheTxQcm9jZXNzUmVjb3JkPiBhcHBzID0gbVByb2Nlc3NOYW1lcy5nZXRNYXAoKS52YWx1ZUF0KGlwKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTkEgPSBhcHBzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpYSA9IDA7IGlhIDwgTkE7IGlhKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgUHJvY2Vzc1JlY29yZCBhcHAgPSBhcHBzLnZhbHVlQXQoaWEpOworICAgICAgICAgICAgICAgICAgICBpZiAoYXBwLnVzZXJJZCAhPSB1c2VySWQgfHwgYXBwLnRocmVhZCA9PSBudWxsKSBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgTkcgPSBhcHAucGtnTGlzdC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGlnID0gMDsgaWcgPCBORzsgaWcrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGtnTmFtZSA9IGFwcC5wa2dMaXN0LmtleUF0KGlnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlSW5mbyBwa2dJbmZvID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UGFja2FnZUluZm8ocGtnTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX1BST1ZJREVSUyB8IE1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGtnSW5mbyAhPSBudWxsICYmICFBcnJheVV0aWxzLmlzRW1wdHkocGtnSW5mby5wcm92aWRlcnMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUHJvdmlkZXJJbmZvIHByb3ZJbmZvIDogcGtnSW5mby5wcm92aWRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy52KFRBRywgIkluc3RhbGxpbmcgIiArIHByb3ZJbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC50aHJlYWQuc2NoZWR1bGVJbnN0YWxsUHJvdmlkZXIocHJvdkluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGlnbm9yZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgogICAgICAqIEFsbG93cyBhcHBzIHRvIHJldHJpZXZlIHRoZSBNSU1FIHR5cGUgb2YgYSBVUkkuCiAgICAgICogSWYgYW4gYXBwIGlzIGluIHRoZSBzYW1lIHVzZXIgYXMgdGhlIENvbnRlbnRQcm92aWRlciwgb3IgaWYgaXQgaXMgYWxsb3dlZCB0byBpbnRlcmFjdCBhY3Jvc3MKICAgICAgKiB1c2VycywgdGhlbiBpdCBkb2VzIG5vdCBuZWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBDb250ZW50UHJvdmlkZXIuCkBAIC0xMDg5OCwxMSArMTExNTQsMTggQEAKIAogICAgIC8qKiBOb3RpZmllcyBhbGwgbGlzdGVuZXJzIHdoZW4gdGhlIHRhc2sgc3RhY2sgaGFzIGNoYW5nZWQuICovCiAgICAgdm9pZCBub3RpZnlUYXNrU3RhY2tDaGFuZ2VkTG9ja2VkKCkgeworICAgICAgICBtSGFuZGxlci5zZW5kRW1wdHlNZXNzYWdlKExPR19TVEFDS19TVEFURSk7CiAgICAgICAgIG1IYW5kbGVyLnJlbW92ZU1lc3NhZ2VzKE5PVElGWV9UQVNLX1NUQUNLX0NIQU5HRV9MSVNURU5FUlNfTVNHKTsKICAgICAgICAgTWVzc2FnZSBubXNnID0gbUhhbmRsZXIub2J0YWluTWVzc2FnZShOT1RJRllfVEFTS19TVEFDS19DSEFOR0VfTElTVEVORVJTX01TRyk7CiAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlRGVsYXllZChubXNnLCBOT1RJRllfVEFTS19TVEFDS19DSEFOR0VfTElTVEVORVJTX0RFTEFZKTsKICAgICB9CiAKKyAgICAvKiogTm90aWZpZXMgYWxsIGxpc3RlbmVycyB3aGVuIGFuIEFjdGl2aXR5IGlzIHBpbm5lZC4gKi8KKyAgICB2b2lkIG5vdGlmeUFjdGl2aXR5UGlubmVkTG9ja2VkKCkgeworICAgICAgICBtSGFuZGxlci5yZW1vdmVNZXNzYWdlcyhOT1RJRllfQUNUSVZJVFlfUElOTkVEX0xJU1RFTkVSU19NU0cpOworICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE5PVElGWV9BQ1RJVklUWV9QSU5ORURfTElTVEVORVJTX01TRykuc2VuZFRvVGFyZ2V0KCk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbm90aWZ5Q2xlYXJ0ZXh0TmV0d29yayhpbnQgdWlkLCBieXRlW10gZmlyc3RQYWNrZXQpIHsKICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShOT1RJRllfQ0xFQVJURVhUX05FVFdPUktfTVNHLCB1aWQsIDAsIGZpcnN0UGFja2V0KS5zZW5kVG9UYXJnZXQoKTsKQEAgLTExMTg5LDggKzExNDUyLDIzIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZXF1ZXN0QnVnUmVwb3J0KGJvb2xlYW4gcHJvZ3Jlc3MpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIHNlcnZpY2UgPSBwcm9ncmVzcyA/ICJidWdyZXBvcnRwbHVzIiA6ICJidWdyZXBvcnQiOworICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RCdWdSZXBvcnQoaW50IGJ1Z3JlcG9ydFR5cGUpIHsKKyAgICAgICAgU3RyaW5nIHNlcnZpY2UgPSBudWxsOworICAgICAgICBzd2l0Y2ggKGJ1Z3JlcG9ydFR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlNYW5hZ2VyLkJVR1JFUE9SVF9PUFRJT05fRlVMTDoKKyAgICAgICAgICAgICAgICBzZXJ2aWNlID0gImJ1Z3JlcG9ydCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFjdGl2aXR5TWFuYWdlci5CVUdSRVBPUlRfT1BUSU9OX0lOVEVSQUNUSVZFOgorICAgICAgICAgICAgICAgIHNlcnZpY2UgPSAiYnVncmVwb3J0cGx1cyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFjdGl2aXR5TWFuYWdlci5CVUdSRVBPUlRfT1BUSU9OX1JFTU9URToKKyAgICAgICAgICAgICAgICBzZXJ2aWNlID0gImJ1Z3JlcG9ydHJlbW90ZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNlcnZpY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUHJvdmlkZWQgYnVncmVwb3J0IHR5cGUgaXMgbm90IGNvcnJlY3QsIHZhbHVlOiAiCisgICAgICAgICAgICAgICAgICAgICsgYnVncmVwb3J0VHlwZSk7CisgICAgICAgIH0KICAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5EVU1QLCAicmVxdWVzdEJ1Z1JlcG9ydCIpOwogICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgiY3RsLnN0YXJ0Iiwgc2VydmljZSk7CiAgICAgfQpAQCAtMTE2NDYsNiArMTE5MjQsMjYgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFZyTW9kZShJQmluZGVyIHRva2VuLCBib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKCFtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9WUl9NT0RFKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJWUiBtb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UhIik7CisgICAgICAgIH0KKworICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IEFjdGl2aXR5UmVjb3JkLmlzSW5TdGFja0xvY2tlZCh0b2tlbik7CisgICAgICAgICAgICBpZiAociA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgci5pc1ZyQWN0aXZpdHkgPSBlbmFibGVkOworCisgICAgICAgICAgICAvLyBVcGRhdGUgYXNzb2NpYXRlZCBzdGF0ZSBpZiB0aGlzIGFjdGl2aXR5IGlzIGN1cnJlbnRseSBmb2N1c2VkCisgICAgICAgICAgICBpZiAociA9PSBtRm9jdXNlZEFjdGl2aXR5KSB7CisgICAgICAgICAgICAgICAgYXBwbHlVcGRhdGVWck1vZGVMb2NrZWQocik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgYm9vbGVhbiBpc1RvcEFjdGl2aXR5SW1tZXJzaXZlKCkgewogICAgICAgICBlbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoInN0YXJ0QWN0aXZpdHkiKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CkBAIC0xMTc2OCwxMyArMTIwNjYsMTEgQEAKIAogICAgICAgICBib29sZWFuIGtpbGxlZCA9IGZhbHNlOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QaWRzU2VsZkxvY2tlZCkgewotICAgICAgICAgICAgaW50W10gdHlwZXMgPSBuZXcgaW50W3BpZHMubGVuZ3RoXTsKICAgICAgICAgICAgIGludCB3b3JzdFR5cGUgPSAwOwogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHBpZHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBQcm9jZXNzUmVjb3JkIHByb2MgPSBtUGlkc1NlbGZMb2NrZWQuZ2V0KHBpZHNbaV0pOwogICAgICAgICAgICAgICAgIGlmIChwcm9jICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBwcm9jLnNldEFkajsKLSAgICAgICAgICAgICAgICAgICAgdHlwZXNbaV0gPSB0eXBlOwogICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA+IHdvcnN0VHlwZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgd29yc3RUeXBlID0gdHlwZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE4MTcsNyArMTIxMTMsNyBAQAogICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBraWxsUGFja2FnZVByb2Nlc3Nlc0xvY2tlZChudWxsLCBhcHBJZCwgdXNlcklkLAotICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0xpc3QuUEVSU0lTVEVOVF9QUk9DX0FESiwgZmFsc2UsIHRydWUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzTGlzdC5QRVJTSVNURU5UX1BST0NfQURKLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiAhPSBudWxsID8gcmVhc29uIDogImtpbGwgdWlkIik7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5KTsKQEAgLTExOTc0LDYgKzEyMjcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQocHJvYy5wcm9jZXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIgaW4gaWRsZSBtYWludDogcHNzPSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChwcm9jLmxhc3RQc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiLCBzd2FwUHNzPSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChwcm9jLmxhc3RTd2FwUHNzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiwgaW5pdGlhbFBzcz0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQocHJvYy5pbml0aWFsSWRsZVBzcyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCIsIHBlcmlvZD0iKTsKQEAgLTEyMDAxLDIwICsxMjI5OSwxOSBAQAogICAgIHByaXZhdGUgdm9pZCByZXRyaWV2ZVNldHRpbmdzKCkgewogICAgICAgICBmaW5hbCBDb250ZW50UmVzb2x2ZXIgcmVzb2x2ZXIgPSBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKTsKICAgICAgICAgZmluYWwgYm9vbGVhbiBmcmVlZm9ybVdpbmRvd01hbmFnZW1lbnQgPQotICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShGRUFUVVJFX0ZSRUVGT1JNX1dJTkRPV19NQU5BR0VNRU5UKTsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoRkVBVFVSRV9GUkVFRk9STV9XSU5ET1dfTUFOQUdFTUVOVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IFNldHRpbmdzLkdsb2JhbC5nZXRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLCBERVZFTE9QTUVOVF9FTkFCTEVfRlJFRUZPUk1fV0lORE9XU19TVVBQT1JULCAwKSAhPSAwOworICAgICAgICBmaW5hbCBib29sZWFuIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSA9CisgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKEZFQVRVUkVfUElDVFVSRV9JTl9QSUNUVVJFKTsKIAogICAgICAgICBmaW5hbCBTdHJpbmcgZGVidWdBcHAgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKHJlc29sdmVyLCBERUJVR19BUFApOwotICAgICAgICBmaW5hbCBTdHJpbmcgZnNTY3JlZW5zaG90cyA9IFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmcocmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgIm92ZXJ2aWV3X2Z1bGxzY3JlZW5fdGh1bWJuYWlscyIpOwogICAgICAgICBmaW5hbCBib29sZWFuIHdhaXRGb3JEZWJ1Z2dlciA9IFNldHRpbmdzLkdsb2JhbC5nZXRJbnQocmVzb2x2ZXIsIFdBSVRfRk9SX0RFQlVHR0VSLCAwKSAhPSAwOwogICAgICAgICBmaW5hbCBib29sZWFuIGFsd2F5c0ZpbmlzaEFjdGl2aXRpZXMgPQogICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5nZXRJbnQocmVzb2x2ZXIsIEFMV0FZU19GSU5JU0hfQUNUSVZJVElFUywgMCkgIT0gMDsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB0YWtlRnVsbHNjcmVlblNjcmVlbnNob3RzID0gZnNTY3JlZW5zaG90cyAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgSW50ZWdlci5wYXJzZUludChmc1NjcmVlbnNob3RzKSAhPSAwOwogICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlUnRsID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChyZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUlRMLCAwKSAhPSAwOwotICAgICAgICBmaW5hbCBpbnQgZGVmYXVsdEZvcmNlUmVzaXphYmxlID0gQnVpbGQuSVNfREVCVUdHQUJMRSA/IDEgOiAwOwogICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlUmVzaXphYmxlID0gU2V0dGluZ3MuR2xvYmFsLmdldEludCgKLSAgICAgICAgICAgICAgICByZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMsIGRlZmF1bHRGb3JjZVJlc2l6YWJsZSkgIT0gMDsKKyAgICAgICAgICAgICAgICByZXNvbHZlciwgREVWRUxPUE1FTlRfRk9SQ0VfUkVTSVpBQkxFX0FDVElWSVRJRVMsIDApICE9IDA7CiAgICAgICAgIC8vIFRyYW5zZmVyIGFueSBnbG9iYWwgc2V0dGluZyBmb3IgZm9yY2luZyBSVEwgbGF5b3V0LCBpbnRvIGEgU3lzdGVtIFByb3BlcnR5CiAgICAgICAgIFN5c3RlbVByb3BlcnRpZXMuc2V0KERFVkVMT1BNRU5UX0ZPUkNFX1JUTCwgZm9yY2VSdGwgPyAiMSI6IjAiKTsKIApAQCAtMTIwMzEsMjEgKzEyMzI4LDM0IEBACiAgICAgICAgICAgICBtQWx3YXlzRmluaXNoQWN0aXZpdGllcyA9IGFsd2F5c0ZpbmlzaEFjdGl2aXRpZXM7CiAgICAgICAgICAgICBtRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzID0gZm9yY2VSZXNpemFibGU7CiAgICAgICAgICAgICBtU3VwcG9ydHNGcmVlZm9ybVdpbmRvd01hbmFnZW1lbnQgPSBmcmVlZm9ybVdpbmRvd01hbmFnZW1lbnQgfHwgZm9yY2VSZXNpemFibGU7Ci0gICAgICAgICAgICBtVGFrZUZ1bGxzY3JlZW5TY3JlZW5zaG90cyA9IHRha2VGdWxsc2NyZWVuU2NyZWVuc2hvdHM7CisgICAgICAgICAgICBtU3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlID0gc3VwcG9ydHNQaWN0dXJlSW5QaWN0dXJlIHx8IGZvcmNlUmVzaXphYmxlOwogICAgICAgICAgICAgLy8gVGhpcyBoYXBwZW5zIGJlZm9yZSBhbnkgYWN0aXZpdGllcyBhcmUgc3RhcnRlZCwgc28gd2UgY2FuCiAgICAgICAgICAgICAvLyBjaGFuZ2UgbUNvbmZpZ3VyYXRpb24gaW4tcGxhY2UuCiAgICAgICAgICAgICB1cGRhdGVDb25maWd1cmF0aW9uTG9ja2VkKGNvbmZpZ3VyYXRpb24sIG51bGwsIHRydWUpOwogICAgICAgICAgICAgaWYgKERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKICAgICAgICAgICAgICAgICAgICAgIkluaXRpYWwgY29uZmlnOiAiICsgbUNvbmZpZ3VyYXRpb24pOwotICAgICAgICB9Ci0gICAgfQogCi0gICAgLyoqIExvYWRzIHJlc291cmNlcyBhZnRlciB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGhhcyBiZWVuIHNldC4gKi8KLSAgICBwcml2YXRlIHZvaWQgbG9hZFJlc291cmNlc09uU3lzdGVtUmVhZHkoKSB7Ci0gICAgICAgIGZpbmFsIFJlc291cmNlcyByZXMgPSBtQ29udGV4dC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgbUhhc1JlY2VudHMgPSByZXMuZ2V0Qm9vbGVhbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmJvb2wuY29uZmlnX2hhc1JlY2VudHMpOwotICAgICAgICBtVGh1bWJuYWlsV2lkdGggPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4udGh1bWJuYWlsX3dpZHRoKTsKLSAgICAgICAgbVRodW1ibmFpbEhlaWdodCA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi50aHVtYm5haWxfaGVpZ2h0KTsKKyAgICAgICAgICAgIC8vIExvYWQgcmVzb3VyY2VzIG9ubHkgYWZ0ZXIgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBzZXQuCisgICAgICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gbUNvbnRleHQuZ2V0UmVzb3VyY2VzKCk7CisgICAgICAgICAgICBtSGFzUmVjZW50cyA9IHJlcy5nZXRCb29sZWFuKGNvbS5hbmRyb2lkLmludGVybmFsLlIuYm9vbC5jb25maWdfaGFzUmVjZW50cyk7CisgICAgICAgICAgICBtVGh1bWJuYWlsV2lkdGggPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLnRodW1ibmFpbF93aWR0aCk7CisgICAgICAgICAgICBtVGh1bWJuYWlsSGVpZ2h0ID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi50aHVtYm5haWxfaGVpZ2h0KTsKKyAgICAgICAgICAgIG1EZWZhdWx0UGlubmVkU3RhY2tCb3VuZHMgPSBSZWN0LnVuZmxhdHRlbkZyb21TdHJpbmcocmVzLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29uZmlnX2RlZmF1bHRQaWN0dXJlSW5QaWN0dXJlQm91bmRzKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYXBwc05vdFJlcG9ydGluZ0NyYXNoZXMgPSByZXMuZ2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jb25maWdfYXBwc05vdFJlcG9ydGluZ0NyYXNoZXMpOworICAgICAgICAgICAgaWYgKGFwcHNOb3RSZXBvcnRpbmdDcmFzaGVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBzcGxpdCA9IGFwcHNOb3RSZXBvcnRpbmdDcmFzaGVzLnNwbGl0KCIsIik7CisgICAgICAgICAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbUFwcHNOb3RSZXBvcnRpbmdDcmFzaGVzID0gbmV3IEFycmF5U2V0PD4oKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGxpdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgbUFwcHNOb3RSZXBvcnRpbmdDcmFzaGVzLmFkZChzcGxpdFtpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SXNTeXN0ZW1SZWFkeSgpIHsKQEAgLTEyMTk1LDE5ICsxMjUwNSwxMyBAQAogICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiByaXMgPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmlzID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLnF1ZXJ5SW50ZW50UmVjZWl2ZXJzKAotICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIG51bGwsIDAsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIG51bGwsIE1BVENIX1NZU1RFTV9PTkxZLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQogICAgICAgICBpZiAocmlzID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKGludCBpPXJpcy5zaXplKCktMTsgaT49MDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoKHJpcy5nZXQoaSkuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncwotICAgICAgICAgICAgICAgICAgICAmQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmlzLnJlbW92ZShpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfQk9PVF9VUEdSQURFKTsKKyAgICAgICAgaW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX1JFQ0VJVkVSX0JPT1RfVVBHUkFERSB8IEludGVudC5GTEFHX0RFQlVHX1RSSUFHRURfTUlTU0lORyk7CiAKICAgICAgICAgQXJyYXlMaXN0PENvbXBvbmVudE5hbWU+IGxhc3REb25lUmVjZWl2ZXJzID0gcmVhZExhc3REb25lUHJlQm9vdFJlY2VpdmVycygpOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8cmlzLnNpemUoKTsgaSsrKSB7CkBAIC0xMjM2MSw3ICsxMjY2NSw2IEBACiAgICAgICAgIH0KIAogICAgICAgICByZXRyaWV2ZVNldHRpbmdzKCk7Ci0gICAgICAgIGxvYWRSZXNvdXJjZXNPblN5c3RlbVJlYWR5KCk7CiAgICAgICAgIGZpbmFsIGludCBjdXJyZW50VXNlcklkOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGN1cnJlbnRVc2VySWQgPSBtVXNlckNvbnRyb2xsZXIuZ2V0Q3VycmVudFVzZXJJZExvY2tlZCgpOwpAQCAtMTI0NTYsNyArMTI3NTksNyBAQAogICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIG1Vc2VyQ29udHJvbGxlci5zZW5kVXNlclN3aXRjaEJyb2FkY2FzdHNMb2NrZWQoLTEsIGN1cnJlbnRVc2VySWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI1NjcsMTAgKzEyODcwLDEwIEBACiAgICAgICAgICAgICAgICAgLy8gYW5ub3kgdGhlIHVzZXIgcmVwZWF0ZWRseS4gIFVubGVzcyBpdCBpcyBwZXJzaXN0ZW50LCBzaW5jZSB0aG9zZQogICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NlcyBydW4gY3JpdGljYWwgY29kZS4KICAgICAgICAgICAgICAgICByZW1vdmVQcm9jZXNzTG9ja2VkKGFwcCwgZmFsc2UsIGZhbHNlLCAiY3Jhc2giKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmZpbmlzaFRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZChhcHAsIHJlYXNvbik7CiAgICAgICAgIH0KQEAgLTEzNzI4LDcgKzE0MDMxLDcgQEAKICAgICAgICAgaWYgKGR1bXBQYWNrYWdlICE9IG51bGwpIHsKICAgICAgICAgICAgIElQYWNrYWdlTWFuYWdlciBwbSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgZHVtcFVpZCA9IHBtLmdldFBhY2thZ2VVaWQoZHVtcFBhY2thZ2UsIDApOworICAgICAgICAgICAgICAgIGR1bXBVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKGR1bXBQYWNrYWdlLCBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywgMCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDY2NCw3ICsxNDk2Nyw4IEBACiAgICAgICAgICAgICBpbnQgZHVtcFVpZCA9IC0yOwogICAgICAgICAgICAgaWYgKGR1bXBQYWNrYWdlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBkdW1wVWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKGR1bXBQYWNrYWdlLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcFVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcihkdW1wUGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywgMCk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgZHVtcFVpZCA9IC0xOwogICAgICAgICAgICAgICAgIH0KQEAgLTE0ODc1LDYgKzE1MTc5LDcgQEAKICAgICAgICAgICAgICAgICBwdy5wcmludCgic3RhdGU6IGN1cj0iKTsgcHcucHJpbnQoUHJvY2Vzc0xpc3QubWFrZVByb2NTdGF0ZVN0cmluZyhyLmN1clByb2NTdGF0ZSkpOwogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgc2V0PSIpOyBwdy5wcmludChQcm9jZXNzTGlzdC5tYWtlUHJvY1N0YXRlU3RyaW5nKHIuc2V0UHJvY1N0YXRlKSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBsYXN0UHNzPSIpOyBEZWJ1Z1V0aWxzLnByaW50U2l6ZVZhbHVlKHB3LCByLmxhc3RQc3MqMTAyNCk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBsYXN0U3dhcFBzcz0iKTsgRGVidWdVdGlscy5wcmludFNpemVWYWx1ZShwdywgci5sYXN0U3dhcFBzcyoxMDI0KTsKICAgICAgICAgICAgICAgICBwdy5wcmludCgiIGxhc3RDYWNoZWRQc3M9Iik7IERlYnVnVXRpbHMucHJpbnRTaXplVmFsdWUocHcsIHIubGFzdENhY2hlZFBzcyoxMDI0KTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsKQEAgLTE1MDI4LDMyICsxNTMzMywzNSBAQAogICAgICAgICBmaW5hbCBTdHJpbmcgbGFiZWw7CiAgICAgICAgIGZpbmFsIFN0cmluZyBzaG9ydExhYmVsOwogICAgICAgICBmaW5hbCBsb25nIHBzczsKKyAgICAgICAgZmluYWwgbG9uZyBzd2FwUHNzOwogICAgICAgICBmaW5hbCBpbnQgaWQ7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gaGFzQWN0aXZpdGllczsKICAgICAgICAgQXJyYXlMaXN0PE1lbUl0ZW0+IHN1Yml0ZW1zOwogCi0gICAgICAgIHB1YmxpYyBNZW1JdGVtKFN0cmluZyBfbGFiZWwsIFN0cmluZyBfc2hvcnRMYWJlbCwgbG9uZyBfcHNzLCBpbnQgX2lkLAorICAgICAgICBwdWJsaWMgTWVtSXRlbShTdHJpbmcgX2xhYmVsLCBTdHJpbmcgX3Nob3J0TGFiZWwsIGxvbmcgX3BzcywgbG9uZyBfc3dhcFBzcywgaW50IF9pZCwKICAgICAgICAgICAgICAgICBib29sZWFuIF9oYXNBY3Rpdml0aWVzKSB7CiAgICAgICAgICAgICBpc1Byb2MgPSB0cnVlOwogICAgICAgICAgICAgbGFiZWwgPSBfbGFiZWw7CiAgICAgICAgICAgICBzaG9ydExhYmVsID0gX3Nob3J0TGFiZWw7CiAgICAgICAgICAgICBwc3MgPSBfcHNzOworICAgICAgICAgICAgc3dhcFBzcyA9IF9zd2FwUHNzOwogICAgICAgICAgICAgaWQgPSBfaWQ7CiAgICAgICAgICAgICBoYXNBY3Rpdml0aWVzID0gX2hhc0FjdGl2aXRpZXM7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgTWVtSXRlbShTdHJpbmcgX2xhYmVsLCBTdHJpbmcgX3Nob3J0TGFiZWwsIGxvbmcgX3BzcywgaW50IF9pZCkgeworICAgICAgICBwdWJsaWMgTWVtSXRlbShTdHJpbmcgX2xhYmVsLCBTdHJpbmcgX3Nob3J0TGFiZWwsIGxvbmcgX3BzcywgbG9uZyBfc3dhcFBzcywgaW50IF9pZCkgewogICAgICAgICAgICAgaXNQcm9jID0gZmFsc2U7CiAgICAgICAgICAgICBsYWJlbCA9IF9sYWJlbDsKICAgICAgICAgICAgIHNob3J0TGFiZWwgPSBfc2hvcnRMYWJlbDsKICAgICAgICAgICAgIHBzcyA9IF9wc3M7CisgICAgICAgICAgICBzd2FwUHNzID0gX3N3YXBQc3M7CiAgICAgICAgICAgICBpZCA9IF9pZDsKICAgICAgICAgICAgIGhhc0FjdGl2aXRpZXMgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0YXRpYyBmaW5hbCB2b2lkIGR1bXBNZW1JdGVtcyhQcmludFdyaXRlciBwdywgU3RyaW5nIHByZWZpeCwgU3RyaW5nIHRhZywKLSAgICAgICAgICAgIEFycmF5TGlzdDxNZW1JdGVtPiBpdGVtcywgYm9vbGVhbiBzb3J0LCBib29sZWFuIGlzQ29tcGFjdCkgeworICAgICAgICAgICAgQXJyYXlMaXN0PE1lbUl0ZW0+IGl0ZW1zLCBib29sZWFuIHNvcnQsIGJvb2xlYW4gaXNDb21wYWN0LCBib29sZWFuIGR1bXBTd2FwUHNzKSB7CiAgICAgICAgIGlmIChzb3J0ICYmICFpc0NvbXBhY3QpIHsKICAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoaXRlbXMsIG5ldyBDb21wYXJhdG9yPE1lbUl0ZW0+KCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtMTUwNzEsMTggKzE1Mzc5LDI0IEBACiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxpdGVtcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgTWVtSXRlbSBtaSA9IGl0ZW1zLmdldChpKTsKICAgICAgICAgICAgIGlmICghaXNDb21wYWN0KSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnRmKCIlcyVzOiAlc1xuIiwgcHJlZml4LCBzdHJpbmdpZnlLQlNpemUobWkucHNzKSwgbWkubGFiZWwpOworICAgICAgICAgICAgICAgIGlmIChkdW1wU3dhcFBzcykgeworICAgICAgICAgICAgICAgICAgICBwdy5wcmludGYoIiVzJXM6ICUtNjBzICglcyBpbiBzd2FwKVxuIiwgcHJlZml4LCBzdHJpbmdpZnlLQlNpemUobWkucHNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaS5sYWJlbCwgc3RyaW5naWZ5S0JTaXplKG1pLnN3YXBQc3MpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwdy5wcmludGYoIiVzJXM6ICVzXG4iLCBwcmVmaXgsIHN0cmluZ2lmeUtCU2l6ZShtaS5wc3MpLCBtaS5sYWJlbCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChtaS5pc1Byb2MpIHsKICAgICAgICAgICAgICAgICBwdy5wcmludCgicHJvYywiKTsgcHcucHJpbnQodGFnKTsgcHcucHJpbnQoIiwiKTsgcHcucHJpbnQobWkuc2hvcnRMYWJlbCk7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoIiwiKTsgcHcucHJpbnQobWkuaWQpOyBwdy5wcmludCgiLCIpOyBwdy5wcmludChtaS5wc3MpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIik7IHB3LnByaW50KG1pLmlkKTsgcHcucHJpbnQoIiwiKTsgcHcucHJpbnQobWkucHNzKTsgcHcucHJpbnQoIiwiKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludChkdW1wU3dhcFBzcyA/IG1pLnN3YXBQc3MgOiAiTi9BIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbihtaS5oYXNBY3Rpdml0aWVzID8gIixhIiA6ICIsZSIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwdy5wcmludCh0YWcpOyBwdy5wcmludCgiLCIpOyBwdy5wcmludChtaS5zaG9ydExhYmVsKTsgcHcucHJpbnQoIiwiKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludGxuKG1pLnBzcyk7CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbihtaS5wc3MpOyBwdy5wcmludChkdW1wU3dhcFBzcyA/IG1pLnN3YXBQc3MgOiAiTi9BIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobWkuc3ViaXRlbXMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGR1bXBNZW1JdGVtcyhwdywgcHJlZml4ICsgIiAgICAgICAgICAgIiwgbWkuc2hvcnRMYWJlbCwgbWkuc3ViaXRlbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBpc0NvbXBhY3QpOworICAgICAgICAgICAgICAgIGR1bXBNZW1JdGVtcyhwdywgcHJlZml4ICsgIiAgICAiLCBtaS5zaG9ydExhYmVsLCBtaS5zdWJpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGlzQ29tcGFjdCwgZHVtcFN3YXBQc3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTUyMTEsNiArMTU1MjUsOCBAQAogICAgICAgICBib29sZWFuIGlzQ29tcGFjdCA9IGZhbHNlOwogICAgICAgICBib29sZWFuIGxvY2FsT25seSA9IGZhbHNlOwogICAgICAgICBib29sZWFuIHBhY2thZ2VzID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gaXNDaGVja2luUmVxdWVzdCA9IGZhbHNlOworICAgICAgICBib29sZWFuIGR1bXBTd2FwUHNzID0gZmFsc2U7CiAKICAgICAgICAgaW50IG9wdGkgPSAwOwogICAgICAgICB3aGlsZSAob3B0aSA8IGFyZ3MubGVuZ3RoKSB7CkBAIC0xNTIyMyw2ICsxNTUzOSw3IEBACiAgICAgICAgICAgICAgICAgZHVtcERldGFpbHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGR1bXBGdWxsRGV0YWlscyA9IHRydWU7CiAgICAgICAgICAgICAgICAgZHVtcERhbHZpayA9IHRydWU7CisgICAgICAgICAgICAgICAgZHVtcFN3YXBQc3MgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmICgiLWQiLmVxdWFscyhvcHQpKSB7CiAgICAgICAgICAgICAgICAgZHVtcERhbHZpayA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCItYyIuZXF1YWxzKG9wdCkpIHsKQEAgLTE1MjMwLDIyICsxNTU0NywyOSBAQAogICAgICAgICAgICAgfSBlbHNlIGlmICgiLXMiLmVxdWFscyhvcHQpKSB7CiAgICAgICAgICAgICAgICAgZHVtcERldGFpbHMgPSB0cnVlOwogICAgICAgICAgICAgICAgIGR1bXBTdW1tYXJ5T25seSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCItUyIuZXF1YWxzKG9wdCkpIHsKKyAgICAgICAgICAgICAgICBkdW1wU3dhcFBzcyA9IHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCItLW9vbSIuZXF1YWxzKG9wdCkpIHsKICAgICAgICAgICAgICAgICBvb21Pbmx5ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIi0tbG9jYWwiLmVxdWFscyhvcHQpKSB7CiAgICAgICAgICAgICAgICAgbG9jYWxPbmx5ID0gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIi0tcGFja2FnZSIuZXF1YWxzKG9wdCkpIHsKICAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCItLWNoZWNraW4iLmVxdWFscyhvcHQpKSB7CisgICAgICAgICAgICAgICAgaXNDaGVja2luUmVxdWVzdCA9IHRydWU7CisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIi1oIi5lcXVhbHMob3B0KSkgewogICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIm1lbWluZm8gZHVtcCBvcHRpb25zOiBbLWFdIFstZF0gWy1jXSBbLXNdIFstLW9vbV0gW3Byb2Nlc3NdIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICAtYTogaW5jbHVkZSBhbGwgYXZhaWxhYmxlIGluZm9ybWF0aW9uIGZvciBlYWNoIHByb2Nlc3MuIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICAtZDogaW5jbHVkZSBkYWx2aWsgZGV0YWlscy4iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIC1jOiBkdW1wIGluIGEgY29tcGFjdCBtYWNoaW5lLXBhcnNlYWJsZSByZXByZXNlbnRhdGlvbi4iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIC1zOiBkdW1wIG9ubHkgc3VtbWFyeSBvZiBhcHBsaWNhdGlvbiBtZW1vcnkgdXNhZ2UuIik7CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICAtUzogZHVtcCBhbHNvIFN3YXBQc3MuIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICAtLW9vbTogb25seSBzaG93IHByb2Nlc3NlcyBvcmdhbml6ZWQgYnkgb29tIGFkai4iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIC0tbG9jYWw6IG9ubHkgY29sbGVjdCBkZXRhaWxzIGxvY2FsbHksIGRvbid0IGNhbGwgcHJvY2Vzcy4iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIC0tcGFja2FnZTogaW50ZXJwcmV0IHByb2Nlc3MgYXJnIGFzIHBhY2thZ2UsIGR1bXBpbmcgYWxsIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiICAgICAgICAgICAgIHByb2Nlc3NlcyB0aGF0IGhhdmUgbG9hZGVkIHRoYXQgcGFja2FnZS4iKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIgIC0tY2hlY2tpbjogZHVtcCBkYXRhIGZvciBhIGNoZWNraW4iKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJJZiBbcHJvY2Vzc10gaXMgc3BlY2lmaWVkIGl0IGNhbiBiZSB0aGUgbmFtZSBvciAiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJwaWQgb2YgYSBzcGVjaWZpYyBwcm9jZXNzIHRvIGR1bXAuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTUyNTQsNyArMTU1NzgsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgYm9vbGVhbiBpc0NoZWNraW5SZXF1ZXN0ID0gc2NhbkFyZ3MoYXJncywgIi0tY2hlY2tpbiIpOwogICAgICAgICBsb25nIHVwdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwogICAgICAgICBsb25nIHJlYWx0aW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CiAgICAgICAgIGZpbmFsIGxvbmdbXSB0bXBMb25nID0gbmV3IGxvbmdbMV07CkBAIC0xNTMyNiwxOCArMTU2NDksMjggQEAKICAgICAgICAgQXJyYXlMaXN0PE1lbUl0ZW0+IHByb2NNZW1zID0gbmV3IEFycmF5TGlzdDxNZW1JdGVtPigpOwogICAgICAgICBmaW5hbCBTcGFyc2VBcnJheTxNZW1JdGVtPiBwcm9jTWVtc01hcCA9IG5ldyBTcGFyc2VBcnJheTxNZW1JdGVtPigpOwogICAgICAgICBsb25nIG5hdGl2ZVBzcyA9IDA7CisgICAgICAgIGxvbmcgbmF0aXZlU3dhcFBzcyA9IDA7CiAgICAgICAgIGxvbmcgZGFsdmlrUHNzID0gMDsKKyAgICAgICAgbG9uZyBkYWx2aWtTd2FwUHNzID0gMDsKICAgICAgICAgbG9uZ1tdIGRhbHZpa1N1Yml0ZW1Qc3MgPSBkdW1wRGFsdmlrID8gbmV3IGxvbmdbRGVidWcuTWVtb3J5SW5mby5OVU1fRFZLX1NUQVRTXSA6CiAgICAgICAgICAgICAgICAgRW1wdHlBcnJheS5MT05HOworICAgICAgICBsb25nW10gZGFsdmlrU3ViaXRlbVN3YXBQc3MgPSBkdW1wRGFsdmlrID8gbmV3IGxvbmdbRGVidWcuTWVtb3J5SW5mby5OVU1fRFZLX1NUQVRTXSA6CisgICAgICAgICAgICAgICAgRW1wdHlBcnJheS5MT05HOwogICAgICAgICBsb25nIG90aGVyUHNzID0gMDsKKyAgICAgICAgbG9uZyBvdGhlclN3YXBQc3MgPSAwOwogICAgICAgICBsb25nW10gbWlzY1BzcyA9IG5ldyBsb25nW0RlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTXTsKKyAgICAgICAgbG9uZ1tdIG1pc2NTd2FwUHNzID0gbmV3IGxvbmdbRGVidWcuTWVtb3J5SW5mby5OVU1fT1RIRVJfU1RBVFNdOwogCiAgICAgICAgIGxvbmcgb29tUHNzW10gPSBuZXcgbG9uZ1tEVU1QX01FTV9PT01fTEFCRUwubGVuZ3RoXTsKKyAgICAgICAgbG9uZyBvb21Td2FwUHNzW10gPSBuZXcgbG9uZ1tEVU1QX01FTV9PT01fTEFCRUwubGVuZ3RoXTsKICAgICAgICAgQXJyYXlMaXN0PE1lbUl0ZW0+W10gb29tUHJvY3MgPSAoQXJyYXlMaXN0PE1lbUl0ZW0+W10pCiAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdFtEVU1QX01FTV9PT01fTEFCRUwubGVuZ3RoXTsKIAogICAgICAgICBsb25nIHRvdGFsUHNzID0gMDsKKyAgICAgICAgbG9uZyB0b3RhbFN3YXBQc3MgPSAwOwogICAgICAgICBsb25nIGNhY2hlZFBzcyA9IDA7CisgICAgICAgIGxvbmcgY2FjaGVkU3dhcFBzcyA9IDA7CisgICAgICAgIGJvb2xlYW4gaGFzU3dhcFBzcyA9IGZhbHNlOwogCiAgICAgICAgIERlYnVnLk1lbW9yeUluZm8gbWkgPSBudWxsOwogICAgICAgICBmb3IgKGludCBpID0gcHJvY3Muc2l6ZSgpIC0gMSA7IGkgPj0gMCA7IGktLSkgewpAQCAtMTUzNjEsNiArMTU2OTQsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZHVtcERldGFpbHMgfHwgKCFicmllZiAmJiAhb29tT25seSkpIHsKICAgICAgICAgICAgICAgICAgICAgRGVidWcuZ2V0TWVtb3J5SW5mbyhwaWQsIG1pKTsKKyAgICAgICAgICAgICAgICAgICAgaGFzU3dhcFBzcyA9IG1pLmhhc1N3YXBwZWRPdXRQc3M7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbWkuZGFsdmlrUHNzID0gKGludClEZWJ1Zy5nZXRQc3MocGlkLCB0bXBMb25nLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgbWkuZGFsdmlrUHJpdmF0ZURpcnR5ID0gKGludCl0bXBMb25nWzBdOwpAQCAtMTUzODgsNiArMTU3MjIsNyBAQAogCiAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBteVRvdGFsUHNzID0gbWkuZ2V0VG90YWxQc3MoKTsKICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIG15VG90YWxVc3MgPSBtaS5nZXRUb3RhbFVzcygpOworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgbXlUb3RhbFN3YXBQc3MgPSBtaS5nZXRUb3RhbFN3YXBwZWRPdXRQc3MoKTsKIAogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgICAgICAgICBpZiAoci50aHJlYWQgIT0gbnVsbCAmJiBvb21BZGogPT0gci5nZXRTZXRBZGpXaXRoU2VydmljZXMoKSkgewpAQCAtMTUzOTgsMzIgKzE1NzMzLDQzIEBACiAKICAgICAgICAgICAgICAgICBpZiAoIWlzQ2hlY2tpblJlcXVlc3QgJiYgbWkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0b3RhbFBzcyArPSBteVRvdGFsUHNzOworICAgICAgICAgICAgICAgICAgICB0b3RhbFN3YXBQc3MgKz0gbXlUb3RhbFN3YXBQc3M7CiAgICAgICAgICAgICAgICAgICAgIE1lbUl0ZW0gcHNzSXRlbSA9IG5ldyBNZW1JdGVtKHIucHJvY2Vzc05hbWUgKyAiIChwaWQgIiArIHBpZCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhc0FjdGl2aXRpZXMgPyAiIC8gYWN0aXZpdGllcykiIDogIikiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnByb2Nlc3NOYW1lLCBteVRvdGFsUHNzLCBwaWQsIGhhc0FjdGl2aXRpZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYXNBY3Rpdml0aWVzID8gIiAvIGFjdGl2aXRpZXMpIiA6ICIpIiksIHIucHJvY2Vzc05hbWUsIG15VG90YWxQc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUb3RhbFN3YXBQc3MsIHBpZCwgaGFzQWN0aXZpdGllcyk7CiAgICAgICAgICAgICAgICAgICAgIHByb2NNZW1zLmFkZChwc3NJdGVtKTsKICAgICAgICAgICAgICAgICAgICAgcHJvY01lbXNNYXAucHV0KHBpZCwgcHNzSXRlbSk7CiAKICAgICAgICAgICAgICAgICAgICAgbmF0aXZlUHNzICs9IG1pLm5hdGl2ZVBzczsKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlU3dhcFBzcyArPSBtaS5uYXRpdmVTd2FwcGVkT3V0UHNzOwogICAgICAgICAgICAgICAgICAgICBkYWx2aWtQc3MgKz0gbWkuZGFsdmlrUHNzOworICAgICAgICAgICAgICAgICAgICBkYWx2aWtTd2FwUHNzICs9IG1pLmRhbHZpa1N3YXBwZWRPdXRQc3M7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxkYWx2aWtTdWJpdGVtUHNzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkYWx2aWtTdWJpdGVtUHNzW2pdICs9IG1pLmdldE90aGVyUHNzKERlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTICsgaik7CisgICAgICAgICAgICAgICAgICAgICAgICBkYWx2aWtTdWJpdGVtU3dhcFBzc1tqXSArPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaS5nZXRPdGhlclN3YXBwZWRPdXRQc3MoRGVidWcuTWVtb3J5SW5mby5OVU1fT1RIRVJfU1RBVFMgKyBqKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBvdGhlclBzcyArPSBtaS5vdGhlclBzczsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJTd2FwUHNzICs9IG1pLm90aGVyU3dhcHBlZE91dFBzczsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPERlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbWVtID0gbWkuZ2V0T3RoZXJQc3Moaik7CiAgICAgICAgICAgICAgICAgICAgICAgICBtaXNjUHNzW2pdICs9IG1lbTsKICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyUHNzIC09IG1lbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbSA9IG1pLmdldE90aGVyU3dhcHBlZE91dFBzcyhqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc2NTd2FwUHNzW2pdICs9IG1lbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyU3dhcFBzcyAtPSBtZW07CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAob29tQWRqID49IFByb2Nlc3NMaXN0LkNBQ0hFRF9BUFBfTUlOX0FESikgewogICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkUHNzICs9IG15VG90YWxQc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTd2FwUHNzICs9IG15VG90YWxTd2FwUHNzOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgb29tSW5kZXg9MDsgb29tSW5kZXg8b29tUHNzLmxlbmd0aDsgb29tSW5kZXgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9vbUFkaiA8PSBEVU1QX01FTV9PT01fQURKW29vbUluZGV4XQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvb21JbmRleCA9PSAob29tUHNzLmxlbmd0aC0xKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9vbVBzc1tvb21JbmRleF0gKz0gbXlUb3RhbFBzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb21Td2FwUHNzW29vbUluZGV4XSArPSBteVRvdGFsU3dhcFBzczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob29tUHJvY3Nbb29tSW5kZXhdID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb29tUHJvY3Nbb29tSW5kZXhdID0gbmV3IEFycmF5TGlzdDxNZW1JdGVtPigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE1NDU4LDI2ICsxNTgwNCwzNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIG15VG90YWxQc3MgPSBtaS5nZXRUb3RhbFBzcygpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBteVRvdGFsU3dhcFBzcyA9IG1pLmdldFRvdGFsU3dhcHBlZE91dFBzcygpOwogICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxQc3MgKz0gbXlUb3RhbFBzczsKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVByb2NUb3RhbFBzcyArPSBteVRvdGFsUHNzOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBNZW1JdGVtIHBzc0l0ZW0gPSBuZXcgTWVtSXRlbShzdC5uYW1lICsgIiAocGlkICIgKyBzdC5waWQgKyAiKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Lm5hbWUsIG15VG90YWxQc3MsIHN0LnBpZCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC5uYW1lLCBteVRvdGFsUHNzLCBtaS5nZXRTdW1tYXJ5VG90YWxTd2FwUHNzKCksIHN0LnBpZCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY01lbXMuYWRkKHBzc0l0ZW0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVQc3MgKz0gbWkubmF0aXZlUHNzOworICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlU3dhcFBzcyArPSBtaS5uYXRpdmVTd2FwcGVkT3V0UHNzOwogICAgICAgICAgICAgICAgICAgICAgICAgZGFsdmlrUHNzICs9IG1pLmRhbHZpa1BzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhbHZpa1N3YXBQc3MgKz0gbWkuZGFsdmlrU3dhcHBlZE91dFBzczsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxkYWx2aWtTdWJpdGVtUHNzLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFsdmlrU3ViaXRlbVBzc1tqXSArPSBtaS5nZXRPdGhlclBzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTICsgaik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFsdmlrU3ViaXRlbVBzc1tqXSArPSBtaS5nZXRPdGhlclBzcyhEZWJ1Zy5NZW1vcnlJbmZvLk5VTV9PVEhFUl9TVEFUUyArIGopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbHZpa1N1Yml0ZW1Td2FwUHNzW2pdICs9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaS5nZXRPdGhlclN3YXBwZWRPdXRQc3MoRGVidWcuTWVtb3J5SW5mby5OVU1fT1RIRVJfU1RBVFMgKyBqKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyUHNzICs9IG1pLm90aGVyUHNzOworICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJTd2FwUHNzICs9IG1pLm90aGVyU3dhcHBlZE91dFBzczsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGo9MDsgajxEZWJ1Zy5NZW1vcnlJbmZvLk5VTV9PVEhFUl9TVEFUUzsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBtZW0gPSBtaS5nZXRPdGhlclBzcyhqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNjUHNzW2pdICs9IG1lbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlclBzcyAtPSBtZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtID0gbWkuZ2V0T3RoZXJTd2FwcGVkT3V0UHNzKGopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc2NTd2FwUHNzW2pdICs9IG1lbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlclN3YXBQc3MgLT0gbWVtOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgb29tUHNzWzBdICs9IG15VG90YWxQc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBvb21Td2FwUHNzWzBdICs9IG15VG90YWxTd2FwUHNzOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9vbVByb2NzWzBdID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvb21Qcm9jc1swXSA9IG5ldyBBcnJheUxpc3Q8TWVtSXRlbT4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE1NDg4LDIxICsxNTg0MywyMyBAQAogCiAgICAgICAgICAgICBBcnJheUxpc3Q8TWVtSXRlbT4gY2F0TWVtcyA9IG5ldyBBcnJheUxpc3Q8TWVtSXRlbT4oKTsKIAotICAgICAgICAgICAgY2F0TWVtcy5hZGQobmV3IE1lbUl0ZW0oIk5hdGl2ZSIsICJOYXRpdmUiLCBuYXRpdmVQc3MsIC0xKSk7Ci0gICAgICAgICAgICBmaW5hbCBNZW1JdGVtIGRhbHZpa0l0ZW0gPSBuZXcgTWVtSXRlbSgiRGFsdmlrIiwgIkRhbHZpayIsIGRhbHZpa1BzcywgLTIpOworICAgICAgICAgICAgY2F0TWVtcy5hZGQobmV3IE1lbUl0ZW0oIk5hdGl2ZSIsICJOYXRpdmUiLCBuYXRpdmVQc3MsIG5hdGl2ZVN3YXBQc3MsIC0xKSk7CisgICAgICAgICAgICBmaW5hbCBNZW1JdGVtIGRhbHZpa0l0ZW0gPQorICAgICAgICAgICAgICAgICAgICBuZXcgTWVtSXRlbSgiRGFsdmlrIiwgIkRhbHZpayIsIGRhbHZpa1BzcywgZGFsdmlrU3dhcFBzcywgLTIpOwogICAgICAgICAgICAgaWYgKGRhbHZpa1N1Yml0ZW1Qc3MubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgIGRhbHZpa0l0ZW0uc3ViaXRlbXMgPSBuZXcgQXJyYXlMaXN0PE1lbUl0ZW0+KCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPGRhbHZpa1N1Yml0ZW1Qc3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG5hbWUgPSBEZWJ1Zy5NZW1vcnlJbmZvLmdldE90aGVyTGFiZWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcuTWVtb3J5SW5mby5OVU1fT1RIRVJfU1RBVFMgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgZGFsdmlrSXRlbS5zdWJpdGVtcy5hZGQobmV3IE1lbUl0ZW0obmFtZSwgbmFtZSwgZGFsdmlrU3ViaXRlbVBzc1tqXSwgaikpOworICAgICAgICAgICAgICAgICAgICBkYWx2aWtJdGVtLnN1Yml0ZW1zLmFkZChuZXcgTWVtSXRlbShuYW1lLCBuYW1lLCBkYWx2aWtTdWJpdGVtUHNzW2pdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFsdmlrU3ViaXRlbVN3YXBQc3Nbal0sIGopKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXRNZW1zLmFkZChkYWx2aWtJdGVtKTsKLSAgICAgICAgICAgIGNhdE1lbXMuYWRkKG5ldyBNZW1JdGVtKCJVbmtub3duIiwgIlVua25vd24iLCBvdGhlclBzcywgLTMpKTsKKyAgICAgICAgICAgIGNhdE1lbXMuYWRkKG5ldyBNZW1JdGVtKCJVbmtub3duIiwgIlVua25vd24iLCBvdGhlclBzcywgb3RoZXJTd2FwUHNzLCAtMykpOwogICAgICAgICAgICAgZm9yIChpbnQgaj0wOyBqPERlYnVnLk1lbW9yeUluZm8uTlVNX09USEVSX1NUQVRTOyBqKyspIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSBEZWJ1Zy5NZW1vcnlJbmZvLmdldE90aGVyTGFiZWwoaik7Ci0gICAgICAgICAgICAgICAgY2F0TWVtcy5hZGQobmV3IE1lbUl0ZW0obGFiZWwsIGxhYmVsLCBtaXNjUHNzW2pdLCBqKSk7CisgICAgICAgICAgICAgICAgY2F0TWVtcy5hZGQobmV3IE1lbUl0ZW0obGFiZWwsIGxhYmVsLCBtaXNjUHNzW2pdLCBtaXNjU3dhcFBzc1tqXSwgaikpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBcnJheUxpc3Q8TWVtSXRlbT4gb29tTWVtcyA9IG5ldyBBcnJheUxpc3Q8TWVtSXRlbT4oKTsKQEAgLTE1NTEwLDMwICsxNTg2NywzMSBAQAogICAgICAgICAgICAgICAgIGlmIChvb21Qc3Nbal0gIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwgPSBpc0NvbXBhY3QgPyBEVU1QX01FTV9PT01fQ09NUEFDVF9MQUJFTFtqXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogRFVNUF9NRU1fT09NX0xBQkVMW2pdOwotICAgICAgICAgICAgICAgICAgICBNZW1JdGVtIGl0ZW0gPSBuZXcgTWVtSXRlbShsYWJlbCwgbGFiZWwsIG9vbVBzc1tqXSwKKyAgICAgICAgICAgICAgICAgICAgTWVtSXRlbSBpdGVtID0gbmV3IE1lbUl0ZW0obGFiZWwsIGxhYmVsLCBvb21Qc3Nbal0sIG9vbVN3YXBQc3Nbal0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFVNUF9NRU1fT09NX0FESltqXSk7CiAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3ViaXRlbXMgPSBvb21Qcm9jc1tqXTsKICAgICAgICAgICAgICAgICAgICAgb29tTWVtcy5hZGQoaXRlbSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBkdW1wU3dhcFBzcyA9IGR1bXBTd2FwUHNzICYmIGhhc1N3YXBQc3MgJiYgdG90YWxTd2FwUHNzICE9IDA7CiAgICAgICAgICAgICBpZiAoIWJyaWVmICYmICFvb21Pbmx5ICYmICFpc0NvbXBhY3QpIHsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiVG90YWwgUFNTIGJ5IHByb2Nlc3M6Iik7Ci0gICAgICAgICAgICAgICAgZHVtcE1lbUl0ZW1zKHB3LCAiICAiLCAicHJvYyIsIHByb2NNZW1zLCB0cnVlLCBpc0NvbXBhY3QpOworICAgICAgICAgICAgICAgIGR1bXBNZW1JdGVtcyhwdywgIiAgIiwgInByb2MiLCBwcm9jTWVtcywgdHJ1ZSwgaXNDb21wYWN0LCBkdW1wU3dhcFBzcyk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFpc0NvbXBhY3QpIHsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJUb3RhbCBQU1MgYnkgT09NIGFkanVzdG1lbnQ6Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkdW1wTWVtSXRlbXMocHcsICIgICIsICJvb20iLCBvb21NZW1zLCBmYWxzZSwgaXNDb21wYWN0KTsKKyAgICAgICAgICAgIGR1bXBNZW1JdGVtcyhwdywgIiAgIiwgIm9vbSIsIG9vbU1lbXMsIGZhbHNlLCBpc0NvbXBhY3QsIGR1bXBTd2FwUHNzKTsKICAgICAgICAgICAgIGlmICghYnJpZWYgJiYgIW9vbU9ubHkpIHsKICAgICAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSBjYXRlZ29yeVB3ICE9IG51bGwgPyBjYXRlZ29yeVB3IDogcHc7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0NvbXBhY3QpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIlRvdGFsIFBTUyBieSBjYXRlZ29yeToiKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZHVtcE1lbUl0ZW1zKG91dCwgIiAgIiwgImNhdCIsIGNhdE1lbXMsIHRydWUsIGlzQ29tcGFjdCk7CisgICAgICAgICAgICAgICAgZHVtcE1lbUl0ZW1zKG91dCwgIiAgIiwgImNhdCIsIGNhdE1lbXMsIHRydWUsIGlzQ29tcGFjdCwgZHVtcFN3YXBQc3MpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFpc0NvbXBhY3QpIHsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CkBAIC0xNTU5MSwxOCArMTU5NDksMTcgQEAKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbih0b3RhbFBzcyAtIGNhY2hlZFBzcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9uZyBsb3N0UkFNID0gbWVtSW5mby5nZXRUb3RhbFNpemVLYigpCisgICAgICAgICAgICAgICAgICAgIC0gdG90YWxQc3MgLSBtZW1JbmZvLmdldEZyZWVTaXplS2IoKSAtIG1lbUluZm8uZ2V0Q2FjaGVkU2l6ZUtiKCkKKyAgICAgICAgICAgICAgICAgICAgLSBtZW1JbmZvLmdldEtlcm5lbFVzZWRTaXplS2IoKSAtIG1lbUluZm8uZ2V0WnJhbVRvdGFsU2l6ZUtiKCk7CiAgICAgICAgICAgICBpZiAoIWlzQ29tcGFjdCkgewogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgVXNlZCBSQU06ICIpOyBwdy5wcmludChzdHJpbmdpZnlLQlNpemUodG90YWxQc3MgLSBjYWNoZWRQc3MKICAgICAgICAgICAgICAgICAgICAgICAgICsgbWVtSW5mby5nZXRLZXJuZWxVc2VkU2l6ZUtiKCkpKTsgcHcucHJpbnQoIiAoIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoc3RyaW5naWZ5S0JTaXplKHRvdGFsUHNzIC0gY2FjaGVkUHNzKSk7IHB3LnByaW50KCIgdXNlZCBwc3MgKyAiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChzdHJpbmdpZnlLQlNpemUobWVtSW5mby5nZXRLZXJuZWxVc2VkU2l6ZUtiKCkpKTsgcHcucHJpbnQoIiBrZXJuZWwpXG4iKTsKLSAgICAgICAgICAgICAgICBwdy5wcmludCgiIExvc3QgUkFNOiAiKTsgcHcucHJpbnRsbihzdHJpbmdpZnlLQlNpemUobWVtSW5mby5nZXRUb3RhbFNpemVLYigpCi0gICAgICAgICAgICAgICAgICAgICAgICAtIHRvdGFsUHNzIC0gbWVtSW5mby5nZXRGcmVlU2l6ZUtiKCkgLSBtZW1JbmZvLmdldENhY2hlZFNpemVLYigpCi0gICAgICAgICAgICAgICAgICAgICAgICAtIG1lbUluZm8uZ2V0S2VybmVsVXNlZFNpemVLYigpKSk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBMb3N0IFJBTTogIik7IHB3LnByaW50bG4oc3RyaW5naWZ5S0JTaXplKGxvc3RSQU0pKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoImxvc3RyYW0sIik7IHB3LnByaW50bG4obWVtSW5mby5nZXRUb3RhbFNpemVLYigpCi0gICAgICAgICAgICAgICAgICAgICAgICAtIHRvdGFsUHNzIC0gbWVtSW5mby5nZXRGcmVlU2l6ZUtiKCkgLSBtZW1JbmZvLmdldENhY2hlZFNpemVLYigpCi0gICAgICAgICAgICAgICAgICAgICAgICAtIG1lbUluZm8uZ2V0S2VybmVsVXNlZFNpemVLYigpKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgibG9zdHJhbSwiKTsgcHcucHJpbnRsbihsb3N0UkFNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghYnJpZWYpIHsKICAgICAgICAgICAgICAgICBpZiAobWVtSW5mby5nZXRacmFtVG90YWxTaXplS2IoKSAhPSAwKSB7CkBAIC0xNTkwMCw3ICsxNjI1Nyw3IEBACiAgICAgICAgIG1lbUluZm9CdWlsZGVyLmFwcGVuZCgiICBMb3N0IFJBTTogIik7CiAgICAgICAgIG1lbUluZm9CdWlsZGVyLmFwcGVuZChzdHJpbmdpZnlLQlNpemUobWVtSW5mby5nZXRUb3RhbFNpemVLYigpCiAgICAgICAgICAgICAgICAgLSB0b3RhbFBzcyAtIG1lbUluZm8uZ2V0RnJlZVNpemVLYigpIC0gbWVtSW5mby5nZXRDYWNoZWRTaXplS2IoKQotICAgICAgICAgICAgICAgIC0gbWVtSW5mby5nZXRLZXJuZWxVc2VkU2l6ZUtiKCkpKTsKKyAgICAgICAgICAgICAgICAtIG1lbUluZm8uZ2V0S2VybmVsVXNlZFNpemVLYigpIC0gbWVtSW5mby5nZXRacmFtVG90YWxTaXplS2IoKSkpOwogICAgICAgICBtZW1JbmZvQnVpbGRlci5hcHBlbmQoIlxuIik7CiAgICAgICAgIFNsb2cuaShUQUcsICJMb3cgb24gbWVtb3J5OiIpOwogICAgICAgICBTbG9nLmkoVEFHLCBzaG9ydE5hdGl2ZUJ1aWxkZXIudG9TdHJpbmcoKSk7CkBAIC0xNjg2Miw2ICsxNzIxOSw5IEBACiAKICAgICBwcml2YXRlIExpc3Q8UmVzb2x2ZUluZm8+IGNvbGxlY3RSZWNlaXZlckNvbXBvbmVudHMoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwKICAgICAgICAgICAgIGludCBjYWxsaW5nVWlkLCBpbnRbXSB1c2VycykgeworICAgICAgICAvLyBUT0RPOiBjb21lIGJhY2sgYW5kIHJlbW92ZSB0aGlzIGFzc3VtcHRpb24gdG8gdHJpYWdlIGFsbCBicm9hZGNhc3RzCisgICAgICAgIGludCBwbUZsYWdzID0gU1RPQ0tfUE1fRkxBR1MgfCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkc7CisKICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gcmVjZWl2ZXJzID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEhhc2hTZXQ8Q29tcG9uZW50TmFtZT4gc2luZ2xlVXNlclJlY2VpdmVycyA9IG51bGw7CkBAIC0xNjg3NCw3ICsxNzIzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBuZXdSZWNlaXZlcnMgPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5xdWVyeUludGVudFJlY2VpdmVycyhpbnRlbnQsIHJlc29sdmVkVHlwZSwgU1RPQ0tfUE1fRkxBR1MsIHVzZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgLnF1ZXJ5SW50ZW50UmVjZWl2ZXJzKGludGVudCwgcmVzb2x2ZWRUeXBlLCBwbUZsYWdzLCB1c2VyKTsKICAgICAgICAgICAgICAgICBpZiAodXNlciAhPSBVc2VySGFuZGxlLlVTRVJfU1lTVEVNICYmIG5ld1JlY2VpdmVycyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgbm90IHRoZSBzeXN0ZW0gdXNlciwgd2UgbmVlZCB0byBjaGVjayBmb3IKICAgICAgICAgICAgICAgICAgICAgLy8gYW55IHJlY2VpdmVycyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJlZCBvdXQuCkBAIC0xNjk5OCw2ICsxNzM1OCw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICAvLyBWZXJpZnkgdGhhdCBwcm90ZWN0ZWQgYnJvYWRjYXN0cyBhcmUgb25seSBiZWluZyBzZW50IGJ5IHN5c3RlbSBjb2RlLAorICAgICAgICAvLyBhbmQgdGhhdCBzeXN0ZW0gY29kZSBpcyBvbmx5IHNlbmRpbmcgcHJvdGVjdGVkIGJyb2FkY2FzdHMuCiAgICAgICAgIGZpbmFsIFN0cmluZyBhY3Rpb24gPSBpbnRlbnQuZ2V0QWN0aW9uKCk7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNQcm90ZWN0ZWRCcm9hZGNhc3Q7CiAgICAgICAgIHRyeSB7CkBAIC0xNzAwNywzNSArMTczNjksNDcgQEAKICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuQlJPQURDQVNUX1NVQ0NFU1M7CiAgICAgICAgIH0KIAotICAgICAgICAvKgotICAgICAgICAgKiBQcmV2ZW50IG5vbi1zeXN0ZW0gY29kZSAoZGVmaW5lZCBoZXJlIHRvIGJlIG5vbi1wZXJzaXN0ZW50Ci0gICAgICAgICAqIHByb2Nlc3NlcykgZnJvbSBzZW5kaW5nIHByb3RlY3RlZCBicm9hZGNhc3RzLgotICAgICAgICAgKi8KLSAgICAgICAgaW50IGNhbGxpbmdBcHBJZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQoY2FsbGluZ1VpZCk7Ci0gICAgICAgIGlmIChjYWxsaW5nQXBwSWQgPT0gUHJvY2Vzcy5TWVNURU1fVUlEIHx8IGNhbGxpbmdBcHBJZCA9PSBQcm9jZXNzLlBIT05FX1VJRAotICAgICAgICAgICAgfHwgY2FsbGluZ0FwcElkID09IFByb2Nlc3MuU0hFTExfVUlEIHx8IGNhbGxpbmdBcHBJZCA9PSBQcm9jZXNzLkJMVUVUT09USF9VSUQKLSAgICAgICAgICAgIHx8IGNhbGxpbmdBcHBJZCA9PSBQcm9jZXNzLk5GQ19VSUQgfHwgY2FsbGluZ1VpZCA9PSAwKSB7Ci0gICAgICAgICAgICAvLyBBbHdheXMgb2theS4KKyAgICAgICAgZmluYWwgYm9vbGVhbiBpc0NhbGxlclN5c3RlbTsKKyAgICAgICAgc3dpdGNoIChVc2VySGFuZGxlLmdldEFwcElkKGNhbGxpbmdVaWQpKSB7CisgICAgICAgICAgICBjYXNlIFByb2Nlc3MuUk9PVF9VSUQ6CisgICAgICAgICAgICBjYXNlIFByb2Nlc3MuU1lTVEVNX1VJRDoKKyAgICAgICAgICAgIGNhc2UgUHJvY2Vzcy5QSE9ORV9VSUQ6CisgICAgICAgICAgICBjYXNlIFByb2Nlc3MuU0hFTExfVUlEOgorICAgICAgICAgICAgY2FzZSBQcm9jZXNzLkJMVUVUT09USF9VSUQ6CisgICAgICAgICAgICBjYXNlIFByb2Nlc3MuTkZDX1VJRDoKKyAgICAgICAgICAgICAgICBpc0NhbGxlclN5c3RlbSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlzQ2FsbGVyU3lzdGVtID0gKGNhbGxlckFwcCAhPSBudWxsKSAmJiBjYWxsZXJBcHAucGVyc2lzdGVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBZZWxsIGlmIHRoZSBzeXN0ZW0gaXMgdHJ5aW5nIHRvIHNlbmQgYSBub24tcHJvdGVjdGVkIGJyb2FkY2FzdC4KLSAgICAgICAgICAgIC8vIFRoZSB2YXN0IG1ham9yaXR5IG9mIGJyb2FkY2FzdHMgc2VudCBmcm9tIHN5c3RlbSBjYWxsZXJzIHNob3VsZAotICAgICAgICAgICAgLy8gYmUgcHJvdGVjdGVkIHRvIGF2b2lkIHNlY3VyaXR5IGhvbGVzLCBzbyBleGNlcHRpb25zIGhlcmUgc2hvdWxkCi0gICAgICAgICAgICAvLyBiZSBpbmNyZWRpYmx5IHJhcmUuCi0gICAgICAgICAgICBpZiAoIWlzUHJvdGVjdGVkQnJvYWRjYXN0Ci0gICAgICAgICAgICAgICAgICAgICYmICFJbnRlbnQuQUNUSU9OX0NMT1NFX1NZU1RFTV9ESUFMT0dTLmVxdWFscyhhY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETzogZXZlbnR1YWxseSBzd2l0Y2ggb3ZlciB0byBoYXJkIHRocm93CisgICAgICAgIGlmIChpc0NhbGxlclN5c3RlbSkgeworICAgICAgICAgICAgaWYgKGlzUHJvdGVjdGVkQnJvYWRjYXN0CisgICAgICAgICAgICAgICAgICAgIHx8IEludGVudC5BQ1RJT05fQ0xPU0VfU1lTVEVNX0RJQUxPR1MuZXF1YWxzKGFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgfHwgSW50ZW50LkFDVElPTl9NRURJQV9TQ0FOTkVSX1NDQU5fRklMRS5lcXVhbHMoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICB8fCBBcHBXaWRnZXRNYW5hZ2VyLkFDVElPTl9BUFBXSURHRVRfQ09ORklHVVJFLmVxdWFscyhhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHx8IEFwcFdpZGdldE1hbmFnZXIuQUNUSU9OX0FQUFdJREdFVF9VUERBVEUuZXF1YWxzKGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAvLyBCcm9hZGNhc3QgaXMgZWl0aGVyIHByb3RlY3RlZCwgb3IgaXQncyBhIHB1YmxpYyBhY3Rpb24gdGhhdAorICAgICAgICAgICAgICAgIC8vIHdlJ3ZlIHJlbGF4ZWQsIHNvIGl0J3MgZmluZSBmb3Igc3lzdGVtIGludGVybmFscyB0byBzZW5kLgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdmFzdCBtYWpvcml0eSBvZiBicm9hZGNhc3RzIHNlbnQgZnJvbSBzeXN0ZW0gaW50ZXJuYWxzCisgICAgICAgICAgICAgICAgLy8gc2hvdWxkIGJlIHByb3RlY3RlZCB0byBhdm9pZCBzZWN1cml0eSBob2xlcywgc28geWVsbCBsb3VkbHkKKyAgICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgd2UgZXhhbWluZSB0aGVzZSBjYXNlcy4KICAgICAgICAgICAgICAgICBMb2cud3RmKFRBRywgIlNlbmRpbmcgbm9uLXByb3RlY3RlZCBicm9hZGNhc3QgIiArIGFjdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gc3lzdGVtIiwgbmV3IFRocm93YWJsZSgpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICB9IGVsc2UgaWYgKGNhbGxlckFwcCA9PSBudWxsIHx8ICFjYWxsZXJBcHAucGVyc2lzdGVudCkgeworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzUHJvdGVjdGVkQnJvYWRjYXN0KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogbm90IGFsbG93ZWQgdG8gc2VuZCBicm9hZGNhc3QgIgogICAgICAgICAgICAgICAgICAgICAgICAgKyBhY3Rpb24gKyAiIGZyb20gcGlkPSIKICAgICAgICAgICAgICAgICAgICAgICAgICsgY2FsbGluZ1BpZCArICIsIHVpZD0iICsgY2FsbGluZ1VpZDsKICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCBtc2cpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChBcHBXaWRnZXRNYW5hZ2VyLkFDVElPTl9BUFBXSURHRVRfQ09ORklHVVJFLmVxdWFscyhhY3Rpb24pKSB7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQXBwV2lkZ2V0TWFuYWdlci5BQ1RJT05fQVBQV0lER0VUX0NPTkZJR1VSRS5lcXVhbHMoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICB8fCBBcHBXaWRnZXRNYW5hZ2VyLkFDVElPTl9BUFBXSURHRVRfVVBEQVRFLmVxdWFscyhhY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBjb21wYXRpYmlsaXR5OiB3ZSBkb24ndCB3YW50IGFwcHMgdG8gc2VuZCB0aGlzLAogICAgICAgICAgICAgICAgIC8vIGJ1dCBoaXN0b3JpY2FsbHkgaXQgaGFzIG5vdCBiZWVuIHByb3RlY3RlZCBhbmQgYXBwcyBtYXkgYmUgdXNpbmcgaXQKICAgICAgICAgICAgICAgICAvLyB0byBwb2tlIHRoZWlyIG93biBhcHAgd2lkZ2V0LiAgU28sIGluc3RlYWQgb2YgbWFraW5nIGl0IHByb3RlY3RlZCwKQEAgLTE3NjE2LDYgKzE3OTkwLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGZpbmQgaW5zdHJ1bWVudGF0aW9uIHRhcmdldCBwYWNrYWdlOiAiICsgaWkudGFyZ2V0UGFja2FnZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFhaS5oYXNDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICByZXBvcnRTdGFydEluc3RydW1lbnRhdGlvbkZhaWx1cmUod2F0Y2hlciwgY2xhc3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIkluc3RydW1lbnRhdGlvbiB0YXJnZXQgaGFzIG5vIGNvZGU6ICIgKyBpaS50YXJnZXRQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGludCBtYXRjaCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuY2hlY2tTaWduYXR1cmVzKAogICAgICAgICAgICAgICAgICAgICBpaS50YXJnZXRQYWNrYWdlLCBpaS5wYWNrYWdlTmFtZSk7CkBAIC0xNzc2OSwyOCArMTgxNDgsMjYgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHN1cHByZXNzUmVzaXplQ29uZmlnQ2hhbmdlcyhib29sZWFuIHN1cHByZXNzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJzdXBwcmVzc1Jlc2l6ZUNvbmZpZ0NoYW5nZXMoKSIpOworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oTUFOQUdFX0FDVElWSVRZX1NUQUNLUywgInN1cHByZXNzUmVzaXplQ29uZmlnQ2hhbmdlcygpIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgbVN1cHByZXNzUmVzaXplQ29uZmlnQ2hhbmdlcyA9IHN1cHByZXNzOwogICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlU3RhY2soaW50IHN0YWNrSWQpIHsKLSAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQUNUSVZJVFlfU1RBQ0tTLAotICAgICAgICAgICAgICAgICJkZXRhaFN0YWNrKCkiKTsKLSAgICAgICAgaWYgKHN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUmVtb3ZpbmcgaG9tZSBzdGFjayBpcyBub3QgYWxsb3dlZC4iKTsKKyAgICBwdWJsaWMgdm9pZCBtb3ZlVGFza3NUb0Z1bGxzY3JlZW5TdGFjayhpbnQgZnJvbVN0YWNrSWQpIHsKKyAgICAgICAgZW5mb3JjZUNhbGxpbmdQZXJtaXNzaW9uKE1BTkFHRV9BQ1RJVklUWV9TVEFDS1MsICJtb3ZlVGFza3NUb0Z1bGxzY3JlZW5TdGFjaygpIik7CisgICAgICAgIGlmIChmcm9tU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJZb3UgY2FuJ3QgbW92ZSB0YXNrcyBmcm9tIHRoZSBob21lIHN0YWNrLiIpOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKLSAgICAgICAgICAgIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBtU3RhY2tTdXBlcnZpc29yLmdldFN0YWNrKHN0YWNrSWQpOworICAgICAgICAgICAgZmluYWwgbG9uZyBvcmlnSWQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBtU3RhY2tTdXBlcnZpc29yLmdldFN0YWNrKGZyb21TdGFja0lkKTsKICAgICAgICAgICAgIGlmIChzdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQXJyYXlMaXN0PFRhc2tSZWNvcmQ+IHRhc2tzID0gc3RhY2suZ2V0QWxsVGFza3MoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8VGFza1JlY29yZD4gdGFza3MgPSBzdGFjay5nZXRBbGxUYXNrcygpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSB0YXNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVUYXNrQnlJZExvY2tlZCh0YXNrcy5nZXQoaSkudGFza0lkLCBmYWxzZSAvKiBraWxsUHJvY2VzcyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhUkVNT1ZFX0ZST01fUkVDRU5UUyk7CisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucG9zaXRpb25UYXNrSW5TdGFja0xvY2tlZCh0YXNrcy5nZXQoaSkudGFza0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lELCAwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOwpAQCAtMTc4OTgsMTAgKzE4Mjc1LDE4IEBACiAgICAgICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuQ09ORklHVVJBVElPTl9DSEFOR0VELCBjaGFuZ2VzKTsKIAogICAgICAgICAgICAgICAgIGlmICghaW5pdExvY2FsZSAmJiAhdmFsdWVzLmdldExvY2FsZXMoKS5pc0VtcHR5KCkgJiYgdmFsdWVzLnVzZXJTZXRMb2NhbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzID0gUmVzb3VyY2VzLmdldFN5c3RlbSgpLmdldEFzc2V0cygpLmdldExvY2FsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgTG9jYWxlIGxvY2FsZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5nZXRMb2NhbGVzKCkuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHRvIGF2b2lkIHRoZSBKTkkgY2FsbCB3aGVuIHRoZSByZXN1bHQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldEZpcnN0TWF0Y2goKSBkb2VzIG5vdCBkZXBlbmQgb24gdGhlIHN1cHBvcnRlZCBsb2NhbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gdmFsdWVzLmdldExvY2FsZXMoKS5nZXRQcmltYXJ5KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVN1cHBvcnRlZFN5c3RlbUxvY2FsZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0ZWRTeXN0ZW1Mb2NhbGVzID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlcy5nZXRTeXN0ZW0oKS5nZXRBc3NldHMoKS5nZXRMb2NhbGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSB2YWx1ZXMuZ2V0TG9jYWxlcygpLmdldEZpcnN0TWF0Y2gobVN1cHBvcnRlZFN5c3RlbUxvY2FsZXMpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIExvY2FsZSBsb2NhbGUgPSB2YWx1ZXMuZ2V0TG9jYWxlcygpLmdldEZpcnN0TWF0Y2gobVN1cHBvcnRlZFN5c3RlbUxvY2FsZXMpOwogICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Qcm9wZXJ0aWVzLnNldCgicGVyc2lzdC5zeXMubG9jYWxlIiwgbG9jYWxlLnRvTGFuZ3VhZ2VUYWcoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU0VORF9MT0NBTEVfVE9fTU9VTlRfREFFTU9OX01TRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGUpKTsKQEAgLTE4MDEyLDkgKzE4Mzk3LDEyIEBACiAgICAgICogZGlhbG9nIC8gZ2xvYmFsIGFjdGlvbnMgYWxzbyBtaWdodCB3YW50IGRpZmZlcmVudCBiZWhhdmlvcnMuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBzaG91bGRTaG93RGlhbG9ncyhDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICByZXR1cm4gIShjb25maWcua2V5Ym9hcmQgPT0gQ29uZmlndXJhdGlvbi5LRVlCT0FSRF9OT0tFWVMKLSAgICAgICAgICAgICAgICAmJiBjb25maWcudG91Y2hzY3JlZW4gPT0gQ29uZmlndXJhdGlvbi5UT1VDSFNDUkVFTl9OT1RPVUNICi0gICAgICAgICAgICAgICAgJiYgY29uZmlnLm5hdmlnYXRpb24gPT0gQ29uZmlndXJhdGlvbi5OQVZJR0FUSU9OX05PTkFWKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBpbnB1dE1ldGhvZEV4aXN0cyA9ICEoY29uZmlnLmtleWJvYXJkID09IENvbmZpZ3VyYXRpb24uS0VZQk9BUkRfTk9LRVlTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbmZpZy50b3VjaHNjcmVlbiA9PSBDb25maWd1cmF0aW9uLlRPVUNIU0NSRUVOX05PVE9VQ0gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29uZmlnLm5hdmlnYXRpb24gPT0gQ29uZmlndXJhdGlvbi5OQVZJR0FUSU9OX05PTkFWKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiB1aUlzTm90Q2FyVHlwZSA9ICEoKGNvbmZpZy51aU1vZGUgJiBDb25maWd1cmF0aW9uLlVJX01PREVfVFlQRV9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfQ0FSKTsKKyAgICAgICAgcmV0dXJuIGlucHV0TWV0aG9kRXhpc3RzICYmIHVpSXNOb3RDYXJUeXBlOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMTg4MjYsOCArMTkyMTQsMTAgQEAKICAgICAvKioKICAgICAgKiBSZWNvcmQgbmV3IFBTUyBzYW1wbGUgZm9yIGEgcHJvY2Vzcy4KICAgICAgKi8KLSAgICB2b2lkIHJlY29yZFBzc1NhbXBsZUxvY2tlZChQcm9jZXNzUmVjb3JkIHByb2MsIGludCBwcm9jU3RhdGUsIGxvbmcgcHNzLCBsb25nIHVzcywgbG9uZyBub3cpIHsKLSAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlQW1Qc3MocHJvYy5waWQsIHByb2MudWlkLCBwcm9jLnByb2Nlc3NOYW1lLCBwc3MgKiAxMDI0LCB1c3MgKiAxMDI0KTsKKyAgICB2b2lkIHJlY29yZFBzc1NhbXBsZUxvY2tlZChQcm9jZXNzUmVjb3JkIHByb2MsIGludCBwcm9jU3RhdGUsIGxvbmcgcHNzLCBsb25nIHVzcywgbG9uZyBzd2FwUHNzLAorICAgICAgICAgICAgbG9uZyBub3cpIHsKKyAgICAgICAgRXZlbnRMb2dUYWdzLndyaXRlQW1Qc3MocHJvYy5waWQsIHByb2MudWlkLCBwcm9jLnByb2Nlc3NOYW1lLCBwc3MgKiAxMDI0LCB1c3MgKiAxMDI0LAorICAgICAgICAgICAgICAgIHN3YXBQc3MgKiAxMDI0KTsKICAgICAgICAgcHJvYy5sYXN0UHNzVGltZSA9IG5vdzsKICAgICAgICAgcHJvYy5iYXNlUHJvY2Vzc1RyYWNrZXIuYWRkUHNzKHBzcywgdXNzLCB0cnVlLCBwcm9jLnBrZ0xpc3QpOwogICAgICAgICBpZiAoREVCVUdfUFNTKSBTbG9nLmQoVEFHX1BTUywKQEAgLTE4ODM3LDggKzE5MjI3LDEwIEBACiAgICAgICAgICAgICBwcm9jLmluaXRpYWxJZGxlUHNzID0gcHNzOwogICAgICAgICB9CiAgICAgICAgIHByb2MubGFzdFBzcyA9IHBzczsKKyAgICAgICAgcHJvYy5sYXN0U3dhcFBzcyA9IHN3YXBQc3M7CiAgICAgICAgIGlmIChwcm9jU3RhdGUgPj0gQWN0aXZpdHlNYW5hZ2VyLlBST0NFU1NfU1RBVEVfSE9NRSkgewogICAgICAgICAgICAgcHJvYy5sYXN0Q2FjaGVkUHNzID0gcHNzOworICAgICAgICAgICAgcHJvYy5sYXN0Q2FjaGVkU3dhcFBzcyA9IHN3YXBQc3M7CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBTcGFyc2VBcnJheTxQYWlyPExvbmcsIFN0cmluZz4+IHdhdGNoVWlkcwpAQCAtMTkyNzQsNyArMTk2NjYsNyBAQAogICAgICAgICAgICAgICAgIC8vIHN0YXRlcywgd2hpY2ggd2VsbCB0ZW5kIHRvIGdpdmUgbm9pc3kgZGF0YS4KICAgICAgICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgICAgbG9uZyBwc3MgPSBEZWJ1Zy5nZXRQc3MoYXBwLnBpZCwgbVRtcExvbmcsIG51bGwpOwotICAgICAgICAgICAgICAgIHJlY29yZFBzc1NhbXBsZUxvY2tlZChhcHAsIGFwcC5jdXJQcm9jU3RhdGUsIHBzcywgbVRtcExvbmdbMF0sIG5vdyk7CisgICAgICAgICAgICAgICAgcmVjb3JkUHNzU2FtcGxlTG9ja2VkKGFwcCwgYXBwLmN1clByb2NTdGF0ZSwgcHNzLCBtVG1wTG9uZ1swXSwgbVRtcExvbmdbMV0sIG5vdyk7CiAgICAgICAgICAgICAgICAgbVBlbmRpbmdQc3NQcm9jZXNzZXMucmVtb3ZlKGFwcCk7CiAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIlJlY29yZGVkIHBzcyBmb3IgIiArIGFwcCArICIgc3RhdGUgIiArIGFwcC5zZXRQcm9jU3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiB0byAiICsgYXBwLmN1clByb2NTdGF0ZSArICI6ICIKQEAgLTE5NzQ4LDcgKzIwMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtRW1wdHkrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtRW1wdHkgPiBlbXB0eVByb2Nlc3NMaW1pdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAua2lsbCgiZW1wdHkgIyIgKyBudW1FbXB0eSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5raWxsKCJlbXB0eSAjIiArIG51bUVtcHR5LCBERUJVR19QUk9DRVNTRVMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjA0MzcsOCArMjA4MjksOCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNVc2VyUnVubmluZyhpbnQgdXNlcklkLCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgaWYgKGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oSU5URVJBQ1RfQUNST1NTX1VTRVJTKQotICAgICAgICAgICAgICAgICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgeworICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpICYmIGNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oCisgICAgICAgICAgICAgICAgSU5URVJBQ1RfQUNST1NTX1VTRVJTKSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKICAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IGlzVXNlclJ1bm5pbmcoKSBmcm9tIHBpZD0iCiAgICAgICAgICAgICAgICAgICAgICsgQmluZGVyLmdldENhbGxpbmdQaWQoKQogICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgQmluZGVyLmdldENhbGxpbmdVaWQoKQpAQCAtMjA3MjUsNyArMjExMTcsNyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBtb3ZlVG9Gcm9udCgpIHsKICAgICAgICAgICAgIGNoZWNrQ2FsbGVyKCk7CiAgICAgICAgICAgICAvLyBXaWxsIGJyaW5nIHRhc2sgdG8gZnJvbnQgaWYgaXQgYWxyZWFkeSBoYXMgYSByb290IGFjdGl2aXR5LgotICAgICAgICAgICAgc3RhcnRBY3Rpdml0eUZyb21SZWNlbnRzSW5uZXIobVRhc2tJZCwgSU5WQUxJRF9TVEFDS19JRCwgbnVsbCk7CisgICAgICAgICAgICBzdGFydEFjdGl2aXR5RnJvbVJlY2VudHNJbm5lcihtVGFza0lkLCBudWxsKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtMjA3NDYsNyArMjExMzgsNyBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCYWQgYXBwIHRocmVhZCAiICsgYXBwVGhyZWFkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5zdGFydEFjdGl2aXR5TWF5V2FpdChhcHBUaHJlYWQsIC0xLCBjYWxsaW5nUGFja2FnZSwgaW50ZW50LAorICAgICAgICAgICAgcmV0dXJuIG1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0eU1heVdhaXQoYXBwVGhyZWFkLCAtMSwgY2FsbGluZ1BhY2thZ2UsIGludGVudCwKICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAwLCAwLCBudWxsLCBudWxsLAogICAgICAgICAgICAgICAgICAgICBudWxsLCBiT3B0aW9ucywgZmFsc2UsIGNhbGxpbmdVc2VyLCBudWxsLCB0cik7CiAgICAgICAgIH0KQEAgLTIwNzc1LDQgKzIxMTY3LDM1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBLaWxsIHByb2Nlc3NlcyBmb3IgdGhlIHVzZXIgd2l0aCBpZCB1c2VySWQgYW5kIHRoYXQgZGVwZW5kIG9uIHRoZSBwYWNrYWdlIG5hbWVkIHBhY2thZ2VOYW1lCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQga2lsbFBhY2thZ2VEZXBlbmRlbnRzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgeworICAgICAgICBlbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLktJTExfVUlELCAia2lsbFBhY2thZ2VEZXBlbmRlbnRzKCkiKTsKKyAgICAgICAgaWYgKHBhY2thZ2VOYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiQ2Fubm90IGtpbGwgdGhlIGRlcGVuZGVudHMgb2YgYSBwYWNrYWdlIHdpdGhvdXQgaXRzIG5hbWUuIik7CisgICAgICAgIH0KKworICAgICAgICBsb25nIGNhbGxpbmdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICBJUGFja2FnZU1hbmFnZXIgcG0gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCk7CisgICAgICAgIGludCBwa2dVaWQgPSAtMTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBrZ1VpZCA9IHBtLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgdXNlcklkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICBpZiAocGtnVWlkID09IC0xKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qga2lsbCBkZXBlbmRlbnRzIG9mIG5vbi1leGlzdGluZyBwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisgICAgICAgICAgICAgICAga2lsbFBhY2thZ2VQcm9jZXNzZXNMb2NrZWQocGFja2FnZU5hbWUsIFVzZXJIYW5kbGUuZ2V0QXBwSWQocGtnVWlkKSwgdXNlcklkLAorICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc0xpc3QuRk9SRUdST1VORF9BUFBfQURKLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgImRlcDogIiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGNhbGxpbmdJZCk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5TWV0cmljc0xvZ2dlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1ldHJpY3NMb2dnZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTAxZGRlCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eU1ldHJpY3NMb2dnZXIuamF2YQpAQCAtMCwwICsxLDc1IEBACitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkhPTUVfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLlBJTk5FRF9TVEFDS19JRDsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CisKKy8qKgorICogSGFuZGxlcyBsb2dnaW5nIGludG8gVHJvbi4KKyAqLworY2xhc3MgQWN0aXZpdHlNZXRyaWNzTG9nZ2VyIHsKKyAgICAvLyBXaW5kb3cgbW9kZXMgd2UgYXJlIGludGVyZXN0ZWQgaW4gbG9nZ2luZy4gSWYgd2UgZXZlciBpbnRyb2R1Y2UgYSBuZXcgdHlwZSwgd2UgbmVlZCB0byBhZGQKKyAgICAvLyBhIHZhbHVlIGhlcmUgYW5kIGluY3JlYXNlIHRoZSB7QGxpbmsgI1RST05fV0lORE9XX1NUQVRFX1ZBUlpfU1RSSU5HU30gYXJyYXkuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJTkRPV19TVEFURV9TVEFOREFSRCA9IDA7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJTkRPV19TVEFURV9TSURFX0JZX1NJREUgPSAxOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSU5ET1dfU1RBVEVfRlJFRUZPUk0gPSAyOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSU5ET1dfU1RBVEVfSU5WQUxJRCA9IC0xOworCisgICAgLy8gUHJlYWxsb2NhdGVkIHN0cmluZ3Mgd2UgYXJlIHNlbmRpbmcgdG8gdHJvbiwgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBvbmUgZXZlcnkKKyAgICAvLyB0aW1lIHdlIGxvZy4KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBUUk9OX1dJTkRPV19TVEFURV9WQVJaX1NUUklOR1MgPSB7CisgICAgICAgICAgICAid2luZG93X3RpbWVfMCIsICJ3aW5kb3dfdGltZV8xIiwgIndpbmRvd190aW1lXzIifTsKKworICAgIHByaXZhdGUgaW50IG1XaW5kb3dTdGF0ZSA9IFdJTkRPV19TVEFURV9TVEFOREFSRDsKKyAgICBwcml2YXRlIGxvbmcgbUxhc3RMb2dUaW1lU2VjczsKKyAgICBwcml2YXRlIGZpbmFsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIG1TdXBlcnZpc29yOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKKworICAgIEFjdGl2aXR5TWV0cmljc0xvZ2dlcihBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvciBzdXBlcnZpc29yLCBDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgbUxhc3RMb2dUaW1lU2VjcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC8gMTAwMDsKKyAgICAgICAgbVN1cGVydmlzb3IgPSBzdXBlcnZpc29yOworICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CisgICAgfQorCisgICAgdm9pZCBsb2dXaW5kb3dTdGF0ZSgpIHsKKyAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAvIDEwMDA7CisgICAgICAgIGlmIChtV2luZG93U3RhdGUgIT0gV0lORE9XX1NUQVRFX0lOVkFMSUQpIHsKKyAgICAgICAgICAgIC8vIFdlIGxvZyBldmVuIGlmIHRoZSB3aW5kb3cgc3RhdGUgaGFzbid0IGNoYW5nZWQsIGJlY2F1c2UgdGhlIHVzZXIgbWlnaHQgcmVtYWluIGluCisgICAgICAgICAgICAvLyBob21lL2Z1bGxzY3JlZW4gbW92ZSBmb3JldmVyIGFuZCB3ZSB3b3VsZCBsaWtlIHRvIHRyYWNrIHRoaXMga2luZCBvZiBiZWhhdmlvcgorICAgICAgICAgICAgLy8gdG9vLgorICAgICAgICAgICAgTWV0cmljc0xvZ2dlci5jb3VudChtQ29udGV4dCwgVFJPTl9XSU5ET1dfU1RBVEVfVkFSWl9TVFJJTkdTW21XaW5kb3dTdGF0ZV0sCisgICAgICAgICAgICAgICAgICAgIChpbnQpIChub3cgLSBtTGFzdExvZ1RpbWVTZWNzKSk7CisgICAgICAgIH0KKyAgICAgICAgbUxhc3RMb2dUaW1lU2VjcyA9IG5vdzsKKworICAgICAgICBBY3Rpdml0eVN0YWNrIHN0YWNrID0gbVN1cGVydmlzb3IuZ2V0U3RhY2soRE9DS0VEX1NUQUNLX0lEKTsKKyAgICAgICAgaWYgKHN0YWNrICE9IG51bGwgJiYgc3RhY2suaXNTdGFja1Zpc2libGVMb2NrZWQoKSkgeworICAgICAgICAgICAgbVdpbmRvd1N0YXRlID0gV0lORE9XX1NUQVRFX1NJREVfQllfU0lERTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtV2luZG93U3RhdGUgPSBXSU5ET1dfU1RBVEVfSU5WQUxJRDsKKyAgICAgICAgc3RhY2sgPSBtU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKKyAgICAgICAgaWYgKHN0YWNrLm1TdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkgeworICAgICAgICAgICAgc3RhY2sgPSBtU3VwZXJ2aXNvci5maW5kU3RhY2tCZWhpbmQoc3RhY2spOworICAgICAgICB9CisgICAgICAgIGlmIChzdGFjay5tU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lECisgICAgICAgICAgICAgICAgfHwgc3RhY2subVN0YWNrSWQgPT0gRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIG1XaW5kb3dTdGF0ZSA9IFdJTkRPV19TVEFURV9TVEFOREFSRDsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFjay5tU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRvY2tlZCBzdGFjayBzaG91bGRuJ3QgYmUgdGhlIGZvY3VzZWQgc3RhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgKyAiYmVjYXVzZSBpdCByZXBvcnRlZCBub3QgYmVpbmcgdmlzaWJsZS4iKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdGFjay5tU3RhY2tJZCA9PSBGUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIG1XaW5kb3dTdGF0ZSA9IFdJTkRPV19TVEFURV9GUkVFRk9STTsKKyAgICAgICAgfSBlbHNlIGlmIChTdGFja0lkLmlzU3RhdGljU3RhY2soc3RhY2subVN0YWNrSWQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbmtub3duIHN0YWNrPSIgKyBzdGFjayk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEKaW5kZXggZDIxNWZjNi4uZWIwOTQ1YmYgMTAwNzU1Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5UmVjb3JkLmphdmEKQEAgLTE2LDIyICsxNiwyNSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKIAotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuKjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX0FMV0FZU19GT0NVU0FCTEU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRkxBR19SRVNJWkVBQkxFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkZMQUdfU1VQUE9SVFNfUElDVFVSRV9JTl9QSUNUVVJFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQ09ORklHVVJBVElPTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NBVkVEX1NUQVRFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1dJVENIOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVEhVTUJOQUlMUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfU1RBVEVTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9TV0lUQ0g7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1RIVU1CTkFJTFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfQU07CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV0lUSF9DTEFTU19OQU1FOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5JTlZBTElEX1RBU0tfSUQ7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuVGFza0Rlc2NyaXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QZXJzaXN0YWJsZUJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLlRyYWNlOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLlJlc29sdmVyQWN0aXZpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5SZWZlcnJlckludGVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlhtbFV0aWxzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5BdHRyaWJ1dGVDYWNoZTsKLWltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5BY3Rpdml0eUNvbnRhaW5lcjsKLQogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKK2ltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuYXBwLlJlc3VsdEluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKQEAgLTQ1LDkgKzQ4LDExIEBACiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlBlcnNpc3RhYmxlQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOworaW1wb3J0IGFuZHJvaWQub3MuVHJhY2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwpAQCAtNTcsOSArNjIsMTIgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuSUFwcGxpY2F0aW9uVG9rZW47CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiAKLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwotaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sU2VyaWFsaXplcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuUmVzb2x2ZXJBY3Rpdml0eTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlJlZmVycmVySW50ZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuWG1sVXRpbHM7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLkF0dHJpYnV0ZUNhY2hlOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGU7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkFjdGl2aXR5Q29udGFpbmVyOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CkBAIC02OSw2ICs3NywxMCBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogCitpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKK2ltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOworaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFNlcmlhbGl6ZXI7CisKIC8qKgogICogQW4gZW50cnkgaW4gdGhlIGhpc3Rvcnkgc3RhY2ssIHJlcHJlc2VudGluZyBhbiBhY3Rpdml0eS4KICAqLwpAQCAtMTU5LDcgKzE3MSw5IEBACiAgICAgYm9vbGVhbiBzdG9wcGVkOyAgICAgICAgLy8gaXMgYWN0aXZpdHkgcGF1c2UgZmluaXNoZWQ/CiAgICAgYm9vbGVhbiBkZWxheWVkUmVzdW1lOyAgLy8gbm90IHlldCByZXN1bWVkIGJlY2F1c2Ugb2Ygc3RvcHBlZCBhcHAgc3dpdGNoZXM/CiAgICAgYm9vbGVhbiBmaW5pc2hpbmc7ICAgICAgLy8gYWN0aXZpdHkgaW4gcGVuZGluZyBmaW5pc2ggbGlzdD8KLSAgICBib29sZWFuIGNvbmZpZ0Rlc3Ryb3k7ICAvLyBuZWVkIHRvIGRlc3Ryb3kgZHVlIHRvIGNvbmZpZyBjaGFuZ2U/CisgICAgYm9vbGVhbiBkZWZlclJlbGF1bmNoVW50aWxQYXVzZWQ7ICAgLy8gcmVsYXVuY2ggb2YgYWN0aXZpdHkgaXMgYmVpbmcgZGVmZXJyZWQgdW50aWwgcGF1c2UgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQKKyAgICBib29sZWFuIHByZXNlcnZlV2luZG93T25EZWZlcnJlZFJlbGF1bmNoOyAvLyBhY3Rpdml0eSB3aW5kb3dzIGFyZSBwcmVzZXJ2ZWQgb24gZGVmZXJyZWQgcmVsYXVuY2gKICAgICBpbnQgY29uZmlnQ2hhbmdlRmxhZ3M7ICAvLyB3aGljaCBjb25maWcgdmFsdWVzIGhhdmUgY2hhbmdlZAogICAgIGJvb2xlYW4ga2V5c1BhdXNlZDsgICAgIC8vIGhhcyBrZXkgZGlzcGF0Y2hpbmcgYmVlbiBwYXVzZWQgZm9yIGl0PwogICAgIGludCBsYXVuY2hNb2RlOyAgICAgICAgIC8vIHRoZSBsYXVuY2ggbW9kZSBhY3Rpdml0eSBhdHRyaWJ1dGUuCkBAIC0xNzIsOCArMTg2LDkgQEAKICAgICBib29sZWFuIGltbWVyc2l2ZTsgICAgICAvLyBpbW1lcnNpdmUgbW9kZSAoZG9uJ3QgaW50ZXJydXB0IGlmIHBvc3NpYmxlKQogICAgIGJvb2xlYW4gZm9yY2VOZXdDb25maWc7IC8vIGZvcmNlIHJlLWNyZWF0ZSB3aXRoIG5ldyBjb25maWcgbmV4dCB0aW1lCiAgICAgaW50IGxhdW5jaENvdW50OyAgICAgICAgLy8gY291bnQgb2YgbGF1bmNoZXMgc2luY2UgbGFzdCBzdGF0ZQotICAgIGxvbmcgbGFzdExhdW5jaFRpbWU7ICAgIC8vIHRpbWUgb2YgbGFzdCBsYXVjaCBvZiB0aGlzIGFjdGl2aXR5Ci0gICAgQXJyYXlMaXN0PEFjdGl2aXR5Q29udGFpbmVyPiBtQ2hpbGRDb250YWluZXJzID0gbmV3IEFycmF5TGlzdDxBY3Rpdml0eUNvbnRhaW5lcj4oKTsKKyAgICBsb25nIGxhc3RMYXVuY2hUaW1lOyAgICAvLyB0aW1lIG9mIGxhc3QgbGF1bmNoIG9mIHRoaXMgYWN0aXZpdHkKKyAgICBib29sZWFuIGlzVnJBY3Rpdml0eTsgICAvLyBpcyB0aGUgYWN0aXZpdHkgcnVubmluZyBpbiBWUiBtb2RlPworICAgIEFycmF5TGlzdDxBY3Rpdml0eUNvbnRhaW5lcj4gbUNoaWxkQ29udGFpbmVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgU3RyaW5nIHN0cmluZ05hbWU7ICAgICAgLy8gZm9yIGNhY2hpbmcgb2YgdG9TdHJpbmcoKS4KIApAQCAtMzA5LDYgKzMyNCw3IEBACiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBmb3JjZU5ld0NvbmZpZz0iKTsgcHcucHJpbnRsbihmb3JjZU5ld0NvbmZpZyk7CiAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJtQWN0aXZpdHlUeXBlPSIpOwogICAgICAgICAgICAgICAgIHB3LnByaW50bG4oYWN0aXZpdHlUeXBlVG9TdHJpbmcobUFjdGl2aXR5VHlwZSkpOworICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgidnJNb2RlPSIpOyBwdy5wcmludGxuKGlzVnJBY3Rpdml0eSk7CiAgICAgICAgIGlmIChkaXNwbGF5U3RhcnRUaW1lICE9IDAgfHwgc3RhcnRUaW1lICE9IDApIHsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJkaXNwbGF5U3RhcnRUaW1lPSIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGlzcGxheVN0YXJ0VGltZSA9PSAwKSBwdy5wcmludCgiMCIpOwpAQCAtMzI3LDggKzM0Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2UgVGltZVV0aWxzLmZvcm1hdER1cmF0aW9uKGxhc3RWaXNpYmxlVGltZSwgbm93LCBwdyk7CiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY29uZmlnRGVzdHJveSB8fCBjb25maWdDaGFuZ2VGbGFncyAhPSAwKSB7Ci0gICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiY29uZmlnRGVzdHJveT0iKTsgcHcucHJpbnQoY29uZmlnRGVzdHJveSk7CisgICAgICAgIGlmIChkZWZlclJlbGF1bmNoVW50aWxQYXVzZWQgfHwgY29uZmlnQ2hhbmdlRmxhZ3MgIT0gMCkgeworICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoImRlZmVyUmVsYXVuY2hVbnRpbFBhdXNlZD0iKTsgcHcucHJpbnQoZGVmZXJSZWxhdW5jaFVudGlsUGF1c2VkKTsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBjb25maWdDaGFuZ2VGbGFncz0iKTsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbihJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvbmZpZ0NoYW5nZUZsYWdzKSk7CiAgICAgICAgIH0KQEAgLTM5OCw2ICs0MTQsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2xlYW4gaXNGcmVlZm9ybSgpIHsKKyAgICAgICAgcmV0dXJuIHRhc2sgIT0gbnVsbCAmJiB0YXNrLnN0YWNrICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiB0YXNrLnN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKKyAgICB9CisKICAgICBzdGF0aWMgY2xhc3MgVG9rZW4gZXh0ZW5kcyBJQXBwbGljYXRpb25Ub2tlbi5TdHViIHsKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBXZWFrUmVmZXJlbmNlPEFjdGl2aXR5UmVjb3JkPiB3ZWFrQWN0aXZpdHk7CiAgICAgICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBtU2VydmljZTsKQEAgLTUzMiw3ICs1NTMsNyBAQAogICAgICAgICBzdG9wcGVkID0gZmFsc2U7CiAgICAgICAgIGRlbGF5ZWRSZXN1bWUgPSBmYWxzZTsKICAgICAgICAgZmluaXNoaW5nID0gZmFsc2U7Ci0gICAgICAgIGNvbmZpZ0Rlc3Ryb3kgPSBmYWxzZTsKKyAgICAgICAgZGVmZXJSZWxhdW5jaFVudGlsUGF1c2VkID0gZmFsc2U7CiAgICAgICAgIGtleXNQYXVzZWQgPSBmYWxzZTsKICAgICAgICAgaW5IaXN0b3J5ID0gZmFsc2U7CiAgICAgICAgIHZpc2libGUgPSBmYWxzZTsKQEAgLTYzNyw2ICs2NTgsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbW1lcnNpdmUgPSAoYUluZm8uZmxhZ3MgJiBBY3Rpdml0eUluZm8uRkxBR19JTU1FUlNJVkUpICE9IDA7CisgICAgICAgICAgICBpc1ZyQWN0aXZpdHkgPSAoYUluZm8uZmxhZ3MgJiBBY3Rpdml0eUluZm8uRkxBR19FTkFCTEVfVlJfTU9ERSkgIT0gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlYWxBY3Rpdml0eSA9IG51bGw7CiAgICAgICAgICAgICB0YXNrQWZmaW5pdHkgPSBudWxsOwpAQCAtNjQ4LDYgKzY3MCw3IEBACiAgICAgICAgICAgICBub0Rpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgICAgIG1BY3Rpdml0eVR5cGUgPSBBUFBMSUNBVElPTl9BQ1RJVklUWV9UWVBFOwogICAgICAgICAgICAgaW1tZXJzaXZlID0gZmFsc2U7CisgICAgICAgICAgICBpc1ZyQWN0aXZpdHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNzIyLDYgKzc0NSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKGludGVudC5nZXRGbGFncygpICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpID09IDApOwogICAgIH0KIAorICAgIGJvb2xlYW4gaXNGb2N1c2FibGUoKSB7CisgICAgICAgIHJldHVybiBTdGFja0lkLmNhblJlY2VpdmVLZXlzKHRhc2suc3RhY2subVN0YWNrSWQpIHx8IGlzQWx3YXlzRm9jdXNhYmxlKCk7CisgICAgfQorCisgICAgYm9vbGVhbiBpc1Jlc2l6ZWFibGUoKSB7CisgICAgICAgIHJldHVybiAoaW5mby5mbGFncyAmIEZMQUdfUkVTSVpFQUJMRSkgIT0gMDsKKyAgICB9CisKKyAgICBib29sZWFuIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpIHsKKyAgICAgICAgcmV0dXJuIChpbmZvLmZsYWdzICYgRkxBR19TVVBQT1JUU19QSUNUVVJFX0lOX1BJQ1RVUkUpICE9IDA7CisgICAgfQorCisgICAgYm9vbGVhbiBpc0Fsd2F5c0ZvY3VzYWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIChpbmZvLmZsYWdzICYgRkxBR19BTFdBWVNfRk9DVVNBQkxFKSAhPSAwOworICAgIH0KKwogICAgIHZvaWQgbWFrZUZpbmlzaGluZ0xvY2tlZCgpIHsKICAgICAgICAgaWYgKCFmaW5pc2hpbmcpIHsKICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayAhPSBudWxsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2suamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCmluZGV4IGIwNTJkMTcuLmMxMTI4NDMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFjay5qYXZhCkBAIC0yMSwxMyArMjEsMTkgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkhPTUVfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLlBJTk5FRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5DT05GSUdfT1JJRU5UQVRJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9MQVlPVVQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9TSVpFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkNPTkZJR19TTUFMTEVTVF9TQ1JFRU5fU0laRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX1NIT1dfRk9SX0FMTF9VU0VSUzsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb24uU0NSRUVOTEFZT1VUX1VOREVGSU5FRDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLio7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkxPQ0tfU0NSRUVOX1NIT1dOOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlSZWNvcmQuSE9NRV9BQ1RJVklUWV9UWVBFOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlSZWNvcmQuQVBQTElDQVRJT05fQUNUSVZJVFlfVFlQRTsKIAoraW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuRmluZFRhc2tSZXN1bHQ7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5NT1ZJTkc7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5QUkVTRVJWRV9XSU5ET1dTOwogCkBAIC01MTgsNiArNTI0LDE0IEBACiAgICAgICAgIHJldHVybiBtU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEOwogICAgIH0KIAorICAgIGZpbmFsIGJvb2xlYW4gaXNEb2NrZWRTdGFjaygpIHsKKyAgICAgICAgcmV0dXJuIG1TdGFja0lkID09IERPQ0tFRF9TVEFDS19JRDsKKyAgICB9CisKKyAgICBmaW5hbCBib29sZWFuIGlzUGlubmVkU3RhY2soKSB7CisgICAgICAgIHJldHVybiBtU3RhY2tJZCA9PSBQSU5ORURfU1RBQ0tfSUQ7CisgICAgfQorCiAgICAgZmluYWwgYm9vbGVhbiBpc09uSG9tZURpc3BsYXkoKSB7CiAgICAgICAgIHJldHVybiBpc0F0dGFjaGVkKCkgJiYKICAgICAgICAgICAgICAgICBtQWN0aXZpdHlDb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tRGlzcGxheUlkID09IERpc3BsYXkuREVGQVVMVF9ESVNQTEFZOwpAQCAtNTUxLDcgKzU2NSw3IEBACiAKICAgICAgICAgLy8gVE9ETyhtdWx0aS1kaXNwbGF5KTogTmVlZHMgdG8gYWxzbyB3b3JrIGlmIGZvY3VzIGlzIG1vdmluZyB0byB0aGUgbm9uLWhvbWUgZGlzcGxheS4KICAgICAgICAgaWYgKGlzT25Ib21lRGlzcGxheSgpKSB7Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnNldEZvY3VzU3RhY2socmVhc29uLCB0aGlzKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc2V0Rm9jdXNTdGFja1VuY2hlY2tlZChyZWFzb24sIHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGlmICh0YXNrICE9IG51bGwpIHsKICAgICAgICAgICAgIGluc2VydFRhc2tBdFRvcCh0YXNrLCBudWxsKTsKQEAgLTU2MywxNSArNTc3LDI1IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBib29sZWFuIGlzRm9jdXNhYmxlKCkgeworICAgICAgICBpZiAoU3RhY2tJZC5jYW5SZWNlaXZlS2V5cyhtU3RhY2tJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vIFRoZSBzdGFjayBpc24ndCBmb2N1c2FibGUuIFNlZSBpZiBpdHMgdG9wIGFjdGl2aXR5IGlzIGZvY3VzYWJsZSB0byBmb3JjZSBmb2N1cyBvbiB0aGUKKyAgICAgICAgLy8gc3RhY2suCisgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSB0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuIHIgIT0gbnVsbCAmJiByLmlzRm9jdXNhYmxlKCk7CisgICAgfQorCiAgICAgZmluYWwgYm9vbGVhbiBpc0F0dGFjaGVkKCkgewogICAgICAgICByZXR1cm4gbVN0YWNrcyAhPSBudWxsOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHRvcCBhY3Rpdml0eSBpbiBhbnkgZXhpc3RpbmcgdGFzayBtYXRjaGluZyB0aGUgZ2l2ZW4KLSAgICAgKiBJbnRlbnQuICBSZXR1cm5zIG51bGwgaWYgbm8gc3VjaCB0YXNrIGlzIGZvdW5kLgorICAgICAqIFJldHVybnMgdGhlIHRvcCBhY3Rpdml0eSBpbiBhbnkgZXhpc3RpbmcgdGFzayBtYXRjaGluZyB0aGUgZ2l2ZW4gSW50ZW50IGluIHRoZSBpbnB1dCByZXN1bHQuCisgICAgICogUmV0dXJucyBudWxsIGlmIG5vIHN1Y2ggdGFzayBpcyBmb3VuZC4KICAgICAgKi8KLSAgICBBY3Rpdml0eVJlY29yZCBmaW5kVGFza0xvY2tlZChBY3Rpdml0eVJlY29yZCB0YXJnZXQpIHsKKyAgICB2b2lkIGZpbmRUYXNrTG9ja2VkKEFjdGl2aXR5UmVjb3JkIHRhcmdldCwgRmluZFRhc2tSZXN1bHQgcmVzdWx0KSB7CiAgICAgICAgIEludGVudCBpbnRlbnQgPSB0YXJnZXQuaW50ZW50OwogICAgICAgICBBY3Rpdml0eUluZm8gaW5mbyA9IHRhcmdldC5pbmZvOwogICAgICAgICBDb21wb25lbnROYW1lIGNscyA9IGludGVudC5nZXRDb21wb25lbnQoKTsKQEAgLTYyNiwxMCArNjUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICsgdGFza0ludGVudC5nZXRDb21wb25lbnQoKS5mbGF0dGVuVG9TaG9ydFN0cmluZygpCiAgICAgICAgICAgICAgICAgICAgICsgIi9hZmY9IiArIHIudGFzay5yb290QWZmaW5pdHkgKyAiIHRvIG5ldyBjbHM9IgogICAgICAgICAgICAgICAgICAgICArIGludGVudC5nZXRDb21wb25lbnQoKS5mbGF0dGVuVG9TaG9ydFN0cmluZygpICsgIi9hZmY9IiArIGluZm8udGFza0FmZmluaXR5KTsKLSAgICAgICAgICAgIGlmICghaXNEb2N1bWVudCAmJiAhdGFza0lzRG9jdW1lbnQgJiYgdGFzay5yb290QWZmaW5pdHkgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKCFpc0RvY3VtZW50ICYmICF0YXNrSXNEb2N1bWVudAorICAgICAgICAgICAgICAgICAgICAmJiByZXN1bHQuciA9PSBudWxsICYmIHRhc2suY2FuTWF0Y2hSb290QWZmaW5pdHkoKSkgewogICAgICAgICAgICAgICAgIGlmICh0YXNrLnJvb3RBZmZpbml0eS5lcXVhbHModGFyZ2V0LnRhc2tBZmZpbml0eSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiRm91bmQgbWF0Y2hpbmcgYWZmaW5pdHkhIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cuZChUQUdfVEFTS1MsICJGb3VuZCBtYXRjaGluZyBhZmZpbml0eSBjYW5kaWRhdGUhIik7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIGZvciBtdWx0aXBsZSB0YXNrcyB0byBoYXZlIHRoZSBzYW1lIHJvb3QgYWZmaW5pdHkgZXNwZWNpYWxseQorICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGV5IGFyZSBpbiBzZXBhcmF0ZSBzdGFja3MuIFdlIHNhdmUgb2ZmIHRoaXMgY2FuZGlkYXRlLCBidXQga2VlcCBsb29raW5nCisgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGJldHRlciBjYW5kaWRhdGUuCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yID0gcjsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1hdGNoZWRCeVJvb3RBZmZpbml0eSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICh0YXNrSW50ZW50ICE9IG51bGwgJiYgdGFza0ludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICAgIHRhc2tJbnRlbnQuZ2V0Q29tcG9uZW50KCkuY29tcGFyZVRvKGNscykgPT0gMCAmJgpAQCAtNjM4LDcgKzY2Nyw5IEBACiAgICAgICAgICAgICAgICAgLy9kdW1wKCk7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZvciBJbnRlbnQgIiArIGludGVudCArICIgYnJpbmdpbmcgdG8gdG9wOiAiICsgci5pbnRlbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgIHJlc3VsdC5yID0gcjsKKyAgICAgICAgICAgICAgICByZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGFmZmluaXR5SW50ZW50ICE9IG51bGwgJiYgYWZmaW5pdHlJbnRlbnQuZ2V0Q29tcG9uZW50KCkgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICAgICBhZmZpbml0eUludGVudC5nZXRDb21wb25lbnQoKS5jb21wYXJlVG8oY2xzKSA9PSAwICYmCiAgICAgICAgICAgICAgICAgICAgIE9iamVjdHMuZXF1YWxzKGRvY3VtZW50RGF0YSwgdGFza0RvY3VtZW50RGF0YSkpIHsKQEAgLTY0NiwxMSArNjc3LDExIEBACiAgICAgICAgICAgICAgICAgLy9kdW1wKCk7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZvciBJbnRlbnQgIiArIGludGVudCArICIgYnJpbmdpbmcgdG8gdG9wOiAiICsgci5pbnRlbnQpOwotICAgICAgICAgICAgICAgIHJldHVybiByOworICAgICAgICAgICAgICAgIHJlc3VsdC5yID0gcjsKKyAgICAgICAgICAgICAgICByZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiTm90IGEgbWF0Y2g6ICIgKyB0YXNrKTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIC8qKgpAQCAtNzMzLDcgKzc2NCw3IEBACiAgICAgICAgICAgICAgICAgIkxhdW5jaCBjb21wbGV0ZWQ7IHJlbW92aW5nIGljaWNsZSBvZiAiICsgci5pY2ljbGUpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBhZGRSZWNlbnRBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCByKSB7CisgICAgdm9pZCBhZGRSZWNlbnRBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCByKSB7CiAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1SZWNlbnRUYXNrcy5hZGRMb2NrZWQoci50YXNrKTsKICAgICAgICAgICAgIHIudGFzay50b3VjaEFjdGl2ZVRpbWUoKTsKQEAgLTgxMiwxMCArODQzLDkgQEAKIAogICAgICAgICBpZiAoaGFzVmlzaWJsZUJlaGluZEFjdGl2aXR5KCkpIHsKICAgICAgICAgICAgIC8vIFN0b3AgdmlzaWJsZSBiZWhpbmQgYWN0aXZpdHkgYmVmb3JlIGdvaW5nIHRvIHNsZWVwLgotICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IG1BY3Rpdml0eUNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5Lm1WaXNpYmxlQmVoaW5kQWN0aXZpdHk7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCk7CiAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1TdG9wcGluZ0FjdGl2aXRpZXMuYWRkKHIpOwotICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsCi0gICAgICAgICAgICAgICAgICAgICJTbGVlcCBzdGlsbCB3YWl0aW5nIHRvIHN0b3AgdmlzaWJsZSBiZWhpbmQgIiArIHIpOworICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsICJTbGVlcCBzdGlsbCB3YWl0aW5nIHRvIHN0b3AgdmlzaWJsZSBiZWhpbmQgIiArIHIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtODYxLDcgKzg5MSw3IEBACiAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZmxhZyBpcyBzZXQsIHdlIGN1cnJlbnRseSB0YWtlIHRoZSBmdWxsc2NyZWVuIHNjcmVlbnNob3Qgb2YgdGhlIGFjdGl2aXR5CiAgICAgICAgICAgICAvLyBidXQgc2NhbGVkIHRvIGhhbGYgdGhlIHNpemUuICBUaGlzIGdpdmVzIHVzIGEgImdvb2QtZW5vdWdoIiBmdWxsc2NyZWVuIHRodW1ibmFpbCB0bwogICAgICAgICAgICAgLy8gdXNlIHdpdGhpbiBTeXN0ZW1VSSB3aGlsZSBrZWVwaW5nIG1lbW9yeSB1c2FnZSBsb3cuCi0gICAgICAgICAgICBpZiAobVNlcnZpY2UubVRha2VGdWxsc2NyZWVuU2NyZWVuc2hvdHMpIHsKKyAgICAgICAgICAgIGlmIChBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLlRBS0VfRlVMTFNDUkVFTl9TQ1JFRU5TSE9UUykgewogICAgICAgICAgICAgICAgIHcgPSBoID0gLTE7CiAgICAgICAgICAgICAgICAgc2NhbGUgPSAwLjVmOwogICAgICAgICAgICAgfQpAQCAtOTAyLDcgKzkzMiw3IEBACiAgICAgICAgIGlmIChwcmV2ID09IG51bGwpIHsKICAgICAgICAgICAgIGlmICghcmVzdW1pbmcpIHsKICAgICAgICAgICAgICAgICBTbG9nLnd0ZihUQUcsICJUcnlpbmcgdG8gcGF1c2Ugd2hlbiBub3RoaW5nIGlzIHJlc3VtZWQiKTsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTk5Myw3ICsxMDIzLDcgQEAKICAgICAgICAgICAgIC8vIHBhdXNlLCBzbyBqdXN0IHRyZWF0IGl0IGFzIGJlaW5nIHBhdXNlZCBub3cuCiAgICAgICAgICAgICBpZiAoREVCVUdfUEFVU0UpIFNsb2cudihUQUdfUEFVU0UsICJBY3Rpdml0eSBub3QgcnVubmluZywgcmVzdW1pbmcgbmV4dC4iKTsKICAgICAgICAgICAgIGlmICghcmVzdW1pbmcpIHsKLSAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmdldEZvY3VzZWRTdGFjaygpLnJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKG51bGwpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA1MiwxNSArMTA4MiwxNSBAQAogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoU1RPUF9USU1FT1VUX01TRywgcik7CiAgICAgICAgICAgICByLnN0b3BwZWQgPSB0cnVlOwogICAgICAgICAgICAgci5zdGF0ZSA9IEFjdGl2aXR5U3RhdGUuU1RPUFBFRDsKLSAgICAgICAgICAgIGlmIChtQWN0aXZpdHlDb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tVmlzaWJsZUJlaGluZEFjdGl2aXR5ID09IHIpIHsKKyAgICAgICAgICAgIGlmIChnZXRWaXNpYmxlQmVoaW5kQWN0aXZpdHkoKSA9PSByKSB7CiAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXF1ZXN0VmlzaWJsZUJlaGluZExvY2tlZChyLCBmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoci5maW5pc2hpbmcpIHsKICAgICAgICAgICAgICAgICByLmNsZWFyT3B0aW9uc0xvY2tlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoci5jb25maWdEZXN0cm95KSB7CisgICAgICAgICAgICAgICAgaWYgKHIuZGVmZXJSZWxhdW5jaFVudGlsUGF1c2VkKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlc3Ryb3lBY3Rpdml0eUxvY2tlZChyLCB0cnVlLCAic3RvcC1jb25maWciKTsKLSAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnVwZGF0ZVByZXZpb3VzUHJvY2Vzc0xvY2tlZChyKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDg0LDE0ICsxMTE0LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19TV0lUQ0ggfHwgREVCVUdfUEFVU0UpIFNsb2cudihUQUdfUEFVU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBsZXRlIHBhdXNlLCBubyBsb25nZXIgd2FpdGluZzogIiArIHByZXYpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJldi5jb25maWdEZXN0cm95KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBpcyBiZWluZyBwYXVzZWQgYmVjYXVzZSB0aGUgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyBpcyBjaGFuZ2luZywgd2hpY2ggbWVhbnMgaXQgaXMgYWN0dWFsbHkgc3RvcHBpbmcuLi4KLSAgICAgICAgICAgICAgICAgICAgLy8gVG8ganVnZ2xlIHRoZSBmYWN0IHRoYXQgd2UgYXJlIGFsc28gc3RhcnRpbmcgYSBuZXcKLSAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGFuY2UgcmlnaHQgbm93LCB3ZSBuZWVkIHRvIGZpcnN0IGNvbXBsZXRlbHkgc3RvcAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBpbnN0YW5jZSBiZWZvcmUgc3RhcnRpbmcgdGhlIG5ldyBvbmUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19QQVVTRSkgU2xvZy52KFRBR19QQVVTRSwgIkRlc3Ryb3lpbmcgYWZ0ZXIgcGF1c2U6ICIgKyBwcmV2KTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdHJveUFjdGl2aXR5TG9ja2VkKHByZXYsIHRydWUsICJwYXVzZS1jb25maWciKTsKKyAgICAgICAgICAgICAgICBpZiAocHJldi5kZWZlclJlbGF1bmNoVW50aWxQYXVzZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGxldGUgdGhlIGRlZmVycmVkIHJlbGF1bmNoIHRoYXQgd2FzIHdhaXRpbmcgZm9yIHBhdXNlIHRvIGNvbXBsZXRlLgorICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfUEFVU0UpIFNsb2cudihUQUdfUEFVU0UsICJSZS1sYXVuY2hpbmcgYWZ0ZXIgcGF1c2U6ICIgKyBwcmV2KTsKKyAgICAgICAgICAgICAgICAgICAgcmVsYXVuY2hBY3Rpdml0eUxvY2tlZChwcmV2LCBwcmV2LmNvbmZpZ0NoYW5nZUZsYWdzLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LnByZXNlcnZlV2luZG93T25EZWZlcnJlZFJlbGF1bmNoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdhc1N0b3BwaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBhbHNvIHN0b3BwaW5nLCB0aGUgc3RvcCByZXF1ZXN0IG11c3QgaGF2ZSBnb25lIHNvb24gYWZ0ZXIgdGhlIHBhdXNlLgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBjbG9iYmVyIGl0LCBiZWNhdXNlIHRoZSBzdG9wIGNvbmZpcm1hdGlvbiB3aWxsIG5vdCBiZSBoYW5kbGVkLgpAQCAtMTExNiwxNyArMTE0MywxNiBAQAogICAgICAgICBpZiAocmVzdW1lTmV4dCkgewogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayB0b3BTdGFjayA9IG1TdGFja1N1cGVydmlzb3IuZ2V0Rm9jdXNlZFN0YWNrKCk7CiAgICAgICAgICAgICBpZiAoIW1TZXJ2aWNlLmlzU2xlZXBpbmdPclNodXR0aW5nRG93bigpKSB7Ci0gICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHRvcFN0YWNrLCBwcmV2LCBudWxsKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKHRvcFN0YWNrLCBwcmV2LCBudWxsKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5jaGVja1JlYWR5Rm9yU2xlZXBMb2NrZWQoKTsKICAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSB0b3BTdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICBpZiAodG9wID09IG51bGwgfHwgKHByZXYgIT0gbnVsbCAmJiB0b3AgIT0gcHJldikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZpdGllcyBhdmFpbGFibGUgdG8gcnVuLAotICAgICAgICAgICAgICAgICAgICAvLyBkbyByZXN1bWUgYW55d2F5IHRvIHN0YXJ0IHNvbWV0aGluZy4gIEFsc28gaWYgdGhlIHRvcAotICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eSBvbiB0aGUgc3RhY2sgaXMgbm90IHRoZSBqdXN0IHBhdXNlZCBhY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVzdW1lIGl0IHRvIGVuc3VyZSB3ZSBjb21wbGV0ZQotICAgICAgICAgICAgICAgICAgICAvLyBhbiBpbi1mbGlnaHQgYXBwIHN3aXRjaC4KLSAgICAgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHRvcFN0YWNrLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZpdGllcyBhdmFpbGFibGUgdG8gcnVuLCBkbyByZXN1bWUgYW55d2F5IHRvIHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZy4gQWxzbyBpZiB0aGUgdG9wIGFjdGl2aXR5IG9uIHRoZSBzdGFjayBpcyBub3QgdGhlIGp1c3QgcGF1c2VkCisgICAgICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5LCB3ZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCByZXN1bWUgaXQgdG8gZW5zdXJlIHdlIGNvbXBsZXRlIGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGluLWZsaWdodCBhcHAgc3dpdGNoLgorICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjEzLDkgKzEyMzksOSBAQAogCiAgICAgICAgIG5leHQucmV0dXJuaW5nT3B0aW9ucyA9IG51bGw7CiAKLSAgICAgICAgaWYgKG1BY3Rpdml0eUNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5Lm1WaXNpYmxlQmVoaW5kQWN0aXZpdHkgPT0gbmV4dCkgeworICAgICAgICBpZiAoZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCkgPT0gbmV4dCkgewogICAgICAgICAgICAgLy8gV2hlbiByZXN1bWluZyBhbiBhY3Rpdml0eSwgcmVxdWlyZSBpdCB0byBjYWxsIHJlcXVlc3RWaXNpYmxlQmVoaW5kKCkgYWdhaW4uCi0gICAgICAgICAgICBtQWN0aXZpdHlDb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5zZXRWaXNpYmxlQmVoaW5kQWN0aXZpdHkobnVsbCk7CisgICAgICAgICAgICBzZXRWaXNpYmxlQmVoaW5kQWN0aXZpdHkobnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyODEsNyArMTMwNyw3IEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBnZXROZXh0VmlzaWJsZVN0YWNrTG9ja2VkKCkgeworICAgIEFjdGl2aXR5U3RhY2sgZ2V0TmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKCkgewogICAgICAgICBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4gc3RhY2tzID0gbVN0YWNrczsKICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgcGFyZW50ID0gbUFjdGl2aXR5Q29udGFpbmVyLm1QYXJlbnRBY3Rpdml0eTsKICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CkBAIC0xMjkwLDcgKzEzMTYsNyBAQAogICAgICAgICBpZiAoc3RhY2tzICE9IG51bGwpIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFja3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrIHN0YWNrID0gc3RhY2tzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2sgIT0gdGhpcyAmJiBzdGFjay5pc1N0YWNrVmlzaWJsZUxvY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrICE9IHRoaXMgJiYgc3RhY2suaXNGb2N1c2FibGUoKSAmJiBzdGFjay5pc1N0YWNrVmlzaWJsZUxvY2tlZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFjazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMzMzLDcgKzEzNTksNyBAQAogICAgIH0KIAogICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YWNrIGlzIGNvbnNpZGVyZWQgdmlzaWJsZS4gKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNTdGFja1Zpc2libGVMb2NrZWQoKSB7CisgICAgYm9vbGVhbiBpc1N0YWNrVmlzaWJsZUxvY2tlZCgpIHsKICAgICAgICAgaWYgKCFpc0F0dGFjaGVkKCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTM1OCw2ICsxMzg0LDEzIEBACiAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgZm9jdXNlZFN0YWNrID0gbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKICAgICAgICAgZmluYWwgaW50IGZvY3VzZWRTdGFja0lkID0gZm9jdXNlZFN0YWNrLm1TdGFja0lkOwogCisgICAgICAgIGlmIChtU3RhY2tJZCA9PSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRAorICAgICAgICAgICAgICAgICYmIGhhc1Zpc2libGVCZWhpbmRBY3Rpdml0eSgpICYmIGZvY3VzZWRTdGFja0lkID09IEhPTUVfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmdWxsc2NyZWVuIHN0YWNrIHNob3VsZCBiZSB2aXNpYmxlIGlmIGl0IGhhcyBhIHZpc2libGUgYmVoaW5kIGFjdGl2aXR5IGJlaGluZAorICAgICAgICAgICAgLy8gdGhlIGhvbWUgc3RhY2sgdGhhdCB3aWxsIGJlIHRyYW5zbHVjZW50LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwogICAgICAgICBpZiAobVN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7CiAgICAgICAgICAgICAvLyBEb2NrZWQgc3RhY2sgaXMgYWx3YXlzIHZpc2libGUsIGV4Y2VwdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaG9tZSBhY3Rpdml0eQogICAgICAgICAgICAgLy8gaXMgdGhlIHRvcCBydW5uaW5nIGFjdGl2aXR5IGluIHRoZSBmb2N1c2VkIGhvbWUgc3RhY2suCkBAIC0xNDU2LDcgKzE0ODksNyBAQAogICAgICAgICBib29sZWFuIGFib3ZlVG9wID0gdG9wICE9IG51bGw7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gc3RhY2tJbnZpc2libGUgPSAhaXNTdGFja1Zpc2libGVMb2NrZWQoKTsKICAgICAgICAgYm9vbGVhbiBiZWhpbmRGdWxsc2NyZWVuQWN0aXZpdHkgPSBzdGFja0ludmlzaWJsZTsKLSAgICAgICAgYm9vbGVhbiBub1N0YWNrQWN0aXZpdHlSZXN1bWVkID0gKGlzSW5TdGFja0xvY2tlZChzdGFydGluZykgPT0gbnVsbCk7CisgICAgICAgIGJvb2xlYW4gcmVzdW1lTmV4dEFjdGl2aXR5ID0gaXNGb2N1c2FibGUoKSAmJiAoaXNJblN0YWNrTG9ja2VkKHN0YXJ0aW5nKSA9PSBudWxsKTsKIAogICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tIaXN0b3J5LnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7CiAgICAgICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSBtVGFza0hpc3RvcnkuZ2V0KHRhc2tOZHgpOwpAQCAtMTQ4NywxOCArMTUyMCwxOCBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChyLmFwcCA9PSBudWxsIHx8IHIuYXBwLnRocmVhZCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFrZVZpc2libGVBbmRSZXN0YXJ0SWZOZWVkZWQoc3RhcnRpbmcsIGNvbmZpZ0NoYW5nZXMsIGlzVG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub1N0YWNrQWN0aXZpdHlSZXN1bWVkLCByKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVOZXh0QWN0aXZpdHksIHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5TmR4ID49IGFjdGl2aXRpZXMuc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlY29yZCBtYXkgYmUgcmVtb3ZlZCBpZiBpdHMgcHJvY2VzcyBuZWVkcyB0byByZXN0YXJ0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpdml0eU5keCA9IGFjdGl2aXRpZXMuc2l6ZSgpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub1N0YWNrQWN0aXZpdHlSZXN1bWVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZU5leHRBY3Rpdml0eSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyLnZpc2libGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgYWN0aXZpdHkgaXMgYWxyZWFkeSB2aXNpYmxlLCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVBbHJlYWR5VmlzaWJsZShyKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vU3RhY2tBY3Rpdml0eVJlc3VtZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVOZXh0QWN0aXZpdHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VWaXNpYmxlKHN0YXJ0aW5nLCByKTsKQEAgLTE1MzksNyArMTU3Miw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIG1ha2VWaXNpYmxlQW5kUmVzdGFydElmTmVlZGVkKEFjdGl2aXR5UmVjb3JkIHN0YXJ0aW5nLCBpbnQgY29uZmlnQ2hhbmdlcywKLSAgICAgICAgICAgIGJvb2xlYW4gaXNUb3AsIGJvb2xlYW4gbm9TdGFja0FjdGl2aXR5UmVzdW1lZCwgQWN0aXZpdHlSZWNvcmQgcikgeworICAgICAgICAgICAgYm9vbGVhbiBpc1RvcCwgYm9vbGVhbiBhbmRSZXN1bWUsIEFjdGl2aXR5UmVjb3JkIHIpIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGFwcCBpcyBydW5uaW5nIGlmIGl0J3MgdGhlIHRvcCwgb3IgaXQgaXMganVzdCBtYWRlIHZpc2libGUgZnJvbQogICAgICAgICAvLyBpbnZpc2libGUuIElmIHRoZSBhcHAgaXMgYWxyZWFkeSB2aXNpYmxlLCBpdCBtdXN0IGhhdmUgZGllZCB3aGlsZSBpdCB3YXMgdmlzaWJsZS4gSW4gdGhpcwogICAgICAgICAvLyBjYXNlLCB3ZSdsbCBzaG93IHRoZSBkZWFkIHdpbmRvdyBidXQgd2lsbCBub3QgcmVzdGFydCB0aGUgYXBwLiBPdGhlcndpc2Ugd2UgY291bGQgZW5kIHVwCkBAIC0xNTU2LDcgKzE1ODksNyBAQAogICAgICAgICAgICAgICAgIHNldFZpc2libGUociwgdHJ1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAociAhPSBzdGFydGluZykgewotICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc3RhcnRTcGVjaWZpY0FjdGl2aXR5TG9ja2VkKHIsIG5vU3RhY2tBY3Rpdml0eVJlc3VtZWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnN0YXJ0U3BlY2lmaWNBY3Rpdml0eUxvY2tlZChyLCBhbmRSZXN1bWUsIGZhbHNlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc1MCwxNSArMTc4MywxNyBAQAogICAgICAqCiAgICAgICogQHBhcmFtIHByZXYgVGhlIHByZXZpb3VzbHkgcmVzdW1lZCBhY3Rpdml0eSwgZm9yIHdoZW4gaW4gdGhlIHByb2Nlc3MKICAgICAgKiBvZiBwYXVzaW5nOyBjYW4gYmUgbnVsbCB0byBjYWxsIGZyb20gZWxzZXdoZXJlLgorICAgICAqIEBwYXJhbSBvcHRpb25zIEFjdGl2aXR5IG9wdGlvbnMuCiAgICAgICoKICAgICAgKiBAcmV0dXJuIFJldHVybnMgdHJ1ZSBpZiBzb21ldGhpbmcgaXMgYmVpbmcgcmVzdW1lZCwgb3IgZmFsc2UgaWYKICAgICAgKiBub3RoaW5nIGhhcHBlbmVkLgorICAgICAqCisgICAgICogTk9URTogSXQgaXMgbm90IHNhZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseSBhcyBpdCBjYW4gY2F1c2UgYW4gYWN0aXZpdHkgaW4gYQorICAgICAqICAgICAgIG5vbi1mb2N1c2VkIHN0YWNrIHRvIGJlIHJlc3VtZWQuCisgICAgICogICAgICAgVXNlIHtAbGluayBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvciNyZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZH0gdG8gcmVzdW1lIHRoZQorICAgICAqICAgICAgIHJpZ2h0IGFjdGl2aXR5IGZvciB0aGUgY3VycmVudCBzeXN0ZW0gc3RhdGUuCiAgICAgICovCi0gICAgZmluYWwgYm9vbGVhbiByZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCBwcmV2KSB7Ci0gICAgICAgIHJldHVybiByZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChwcmV2LCBudWxsKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHByZXYsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CisgICAgYm9vbGVhbiByZXN1bWVUb3BBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChBY3Rpdml0eVJlY29yZCBwcmV2LCBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucykgewogICAgICAgICBpZiAobVN0YWNrU3VwZXJ2aXNvci5pblJlc3VtZVRvcEFjdGl2aXR5KSB7CiAgICAgICAgICAgICAvLyBEb24ndCBldmVuIHN0YXJ0IHJlY3Vyc2luZy4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE4MDksMTQgKzE4NDQsMTMgQEAKICAgICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZpdGllcyEKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyByZWFzb24gPSAibm9Nb3JlQWN0aXZpdGllcyI7Ci0gICAgICAgICAgICBpZiAoIW1GdWxsc2NyZWVuKSB7CisgICAgICAgICAgICBpZiAoIW1GdWxsc2NyZWVuICYmIGFkanVzdEZvY3VzVG9OZXh0Rm9jdXNhYmxlU3RhY2tMb2NrZWQocmVhc29uKSkgewogICAgICAgICAgICAgICAgIC8vIFRyeSB0byBtb3ZlIGZvY3VzIHRvIHRoZSBuZXh0IHZpc2libGUgc3RhY2sgd2l0aCBhIHJ1bm5pbmcgYWN0aXZpdHkgaWYgdGhpcwogICAgICAgICAgICAgICAgIC8vIHN0YWNrIGlzIG5vdCBjb3ZlcmluZyB0aGUgZW50aXJlIHNjcmVlbi4KLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gZ2V0TmV4dFZpc2libGVTdGFja0xvY2tlZCgpOwotICAgICAgICAgICAgICAgIGlmIChhZGp1c3RGb2N1c1RvTmV4dFZpc2libGVTdGFja0xvY2tlZChzdGFjaywgcmVhc29uKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHN0YWNrLCBwcmV2LCBudWxsKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmdldEZvY3VzZWRTdGFjaygpLCBwcmV2LCBudWxsKTsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gTGV0J3MganVzdCBzdGFydCB1cCB0aGUgTGF1bmNoZXIuLi4KICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKICAgICAgICAgICAgIGlmIChERUJVR19TVEFURVMpIFNsb2cuZChUQUdfU1RBVEVTLApAQCAtMjI4MSwxMSArMjMxNSwxMiBAQAogICAgICAgICAgICAgQWN0aXZpdHlTdGFjayBsYXN0U3RhY2sgPSBtU3RhY2tTdXBlcnZpc29yLmdldExhc3RTdGFjaygpOwogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBmcm9tSG9tZSA9IGxhc3RTdGFjay5pc0hvbWVTdGFjaygpOwogICAgICAgICAgICAgaWYgKCFpc0hvbWVTdGFjaygpICYmIChmcm9tSG9tZSB8fCB0b3BUYXNrKCkgIT0gdGFzaykpIHsKLSAgICAgICAgICAgICAgICB0YXNrLnNldFRhc2tUb1JldHVyblRvKGZyb21Ib21lCi0gICAgICAgICAgICAgICAgICAgICAgICA/IGxhc3RTdGFjay50b3BUYXNrKCkgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEhPTUVfQUNUSVZJVFlfVFlQRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhc3RTdGFjay50b3BUYXNrKCkudGFza1R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgIDogQVBQTElDQVRJT05fQUNUSVZJVFlfVFlQRSk7CisgICAgICAgICAgICAgICAgaW50IHJldHVyblRvVHlwZSA9IEFQUExJQ0FUSU9OX0FDVElWSVRZX1RZUEU7CisgICAgICAgICAgICAgICAgaWYgKGZyb21Ib21lICYmIFN0YWNrSWQuYWxsb3dUb3BUYXNrVG9SZXR1cm5Ib21lKG1TdGFja0lkKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm5Ub1R5cGUgPSBsYXN0U3RhY2sudG9wVGFzaygpID09IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEhPTUVfQUNUSVZJVFlfVFlQRSA6IGxhc3RTdGFjay50b3BUYXNrKCkudGFza1R5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRhc2suc2V0VGFza1RvUmV0dXJuVG8ocmV0dXJuVG9UeXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHRhc2suc2V0VGFza1RvUmV0dXJuVG8oQVBQTElDQVRJT05fQUNUSVZJVFlfVFlQRSk7CkBAIC0yMzEyLDggKzIzNDcsOCBAQAogICAgICAgICB1cGRhdGVUYXNrTW92ZW1lbnQodGFzaywgdHJ1ZSk7CiAgICAgfQogCi0gICAgZmluYWwgdm9pZCBzdGFydEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsIGJvb2xlYW4gbmV3VGFzaywKLSAgICAgICAgICAgIGJvb2xlYW4gZG9SZXN1bWUsIGJvb2xlYW4ga2VlcEN1clRyYW5zaXRpb24sIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CisgICAgZmluYWwgdm9pZCBzdGFydEFjdGl2aXR5TG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsIGJvb2xlYW4gbmV3VGFzaywgYm9vbGVhbiBrZWVwQ3VyVHJhbnNpdGlvbiwKKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zKSB7CiAgICAgICAgIFRhc2tSZWNvcmQgclRhc2sgPSByLnRhc2s7CiAgICAgICAgIGZpbmFsIGludCB0YXNrSWQgPSByVGFzay50YXNrSWQ7CiAgICAgICAgIC8vIG1MYXVuY2hUYXNrQmVoaW5kIHRhc2tzIGdldCBwbGFjZWQgYXQgdGhlIGJhY2sgb2YgdGhlIHRhc2sgc3RhY2suCkBAIC0yNDU5LDEyICsyNDk0LDYgQEAKICAgICAgICAgaWYgKFZBTElEQVRFX1RPS0VOUykgewogICAgICAgICAgICAgdmFsaWRhdGVBcHBUb2tlbnNMb2NrZWQoKTsKICAgICAgICAgfQotCi0gICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHRoaXMsIHIsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRkUmVjZW50QWN0aXZpdHlMb2NrZWQocik7Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBmaW5hbCB2b2lkIHZhbGlkYXRlQXBwVG9rZW5zTG9ja2VkKCkgewpAQCAtMjg1NCw3ICsyODgzLDcgQEAKICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgbmV4dCA9IHRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICBmaW5hbCBTdHJpbmcgbXlSZWFzb24gPSByZWFzb24gKyAiIGFkanVzdEZvY3VzIjsKICAgICAgICAgaWYgKG5leHQgIT0gcikgewotICAgICAgICAgICAgaWYgKG5leHQgIT0gbnVsbCAmJiBTdGFja0lkLmtlZXBGb2N1c0luU3RhY2tJZlBvc3NpYmxlKG1TdGFja0lkKSkgeworICAgICAgICAgICAgaWYgKG5leHQgIT0gbnVsbCAmJiBTdGFja0lkLmtlZXBGb2N1c0luU3RhY2tJZlBvc3NpYmxlKG1TdGFja0lkKSAmJiBpc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRm9yIGZyZWVmb3JtLCBkb2NrZWQsIGFuZCBwaW5uZWQgc3RhY2tzIHdlIGFsd2F5cyBrZWVwIHRoZSBmb2N1cyB3aXRoaW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gc3RhY2sgYXMgbG9uZyBhcyB0aGVyZSBpcyBhIHJ1bm5pbmcgYWN0aXZpdHkgaW4gdGhlIHN0YWNrIHRoYXQgd2UgY2FuIGFkanVzdAogICAgICAgICAgICAgICAgIC8vIGZvY3VzIHRvLgpAQCAtMjg2Niw4ICsyODk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vbi1mdWxsc2NyZWVuIHN0YWNrLCB3ZSB3YW50IHRvIG1vdmUgdGhlIGZvY3VzIHRvIHRoZSBuZXh0IHZpc2libGUKICAgICAgICAgICAgICAgICAgICAgLy8gc3RhY2sgdG8gcHJldmVudCB0aGUgaG9tZSBzY3JlZW4gZnJvbSBtb3ZpbmcgdG8gdGhlIHRvcCBhbmQgb2JzY3VyaW5nCiAgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHZpc2libGUgc3RhY2tzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1GdWxsc2NyZWVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYWRqdXN0Rm9jdXNUb05leHRWaXNpYmxlU3RhY2tMb2NrZWQobnVsbCwgbXlSZWFzb24pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbUZ1bGxzY3JlZW4gJiYgYWRqdXN0Rm9jdXNUb05leHRGb2N1c2FibGVTdGFja0xvY2tlZChteVJlYXNvbikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBob21lIHN0YWNrIHRvIHRoZSB0b3AgaWYgdGhpcyBzdGFjayBpcyBmdWxsc2NyZWVuIG9yIHRoZXJlIGlzIG5vCkBAIC0yODgxLDI0ICsyOTA5LDE2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3AgPSBtU3RhY2tTdXBlcnZpc29yLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwotICAgICAgICBpZiAodG9wICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZCh0b3AsIG15UmVhc29uKTsKLSAgICAgICAgfQorICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQobVN0YWNrU3VwZXJ2aXNvci50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKSwgbXlSZWFzb24pOwogICAgIH0KIAotICAgIHByaXZhdGUgYm9vbGVhbiBhZGp1c3RGb2N1c1RvTmV4dFZpc2libGVTdGFja0xvY2tlZChBY3Rpdml0eVN0YWNrIGluU3RhY2ssIFN0cmluZyByZWFzb24pIHsKLSAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IChpblN0YWNrICE9IG51bGwpID8gaW5TdGFjayA6IGdldE5leHRWaXNpYmxlU3RhY2tMb2NrZWQoKTsKLSAgICAgICAgZmluYWwgU3RyaW5nIG15UmVhc29uID0gcmVhc29uICsgIiBhZGp1c3RGb2N1c1RvTmV4dFZpc2libGVTdGFjayI7CisgICAgcHJpdmF0ZSBib29sZWFuIGFkanVzdEZvY3VzVG9OZXh0Rm9jdXNhYmxlU3RhY2tMb2NrZWQoU3RyaW5nIHJlYXNvbikgeworICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gZ2V0TmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKCk7CisgICAgICAgIGZpbmFsIFN0cmluZyBteVJlYXNvbiA9IHJlYXNvbiArICIgYWRqdXN0Rm9jdXNUb05leHRGb2N1c2FibGVTdGFjayI7CiAgICAgICAgIGlmIChzdGFjayA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgdG9wID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7Ci0gICAgICAgIGlmICh0b3AgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZCh0b3AsIG15UmVhc29uKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQoc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCksIG15UmVhc29uKTsKICAgICB9CiAKICAgICBmaW5hbCB2b2lkIHN0b3BBY3Rpdml0eUxvY2tlZChBY3Rpdml0eVJlY29yZCByKSB7CkBAIC0yOTUwLDcgKzI5NzAsNyBAQAogICAgICAgICAgICAgICAgIHIuc3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBR19TVEFURVMsICJTdG9wIGZhaWxlZDsgbW92aW5nIHRvIFNUT1BQRUQ6ICIgKyByKTsKICAgICAgICAgICAgICAgICByLnN0YXRlID0gQWN0aXZpdHlTdGF0ZS5TVE9QUEVEOwotICAgICAgICAgICAgICAgIGlmIChyLmNvbmZpZ0Rlc3Ryb3kpIHsKKyAgICAgICAgICAgICAgICBpZiAoci5kZWZlclJlbGF1bmNoVW50aWxQYXVzZWQpIHsKICAgICAgICAgICAgICAgICAgICAgZGVzdHJveUFjdGl2aXR5TG9ja2VkKHIsIHRydWUsICJzdG9wLWV4Y2VwdCIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMyMDgsNyArMzIyOCw3IEBACiAgICAgICAgICAgICByLm1ha2VGaW5pc2hpbmdMb2NrZWQoKTsKICAgICAgICAgICAgIGJvb2xlYW4gYWN0aXZpdHlSZW1vdmVkID0gZGVzdHJveUFjdGl2aXR5TG9ja2VkKHIsIHRydWUsICJmaW5pc2gtaW1tIik7CiAgICAgICAgICAgICBpZiAoYWN0aXZpdHlSZW1vdmVkKSB7Ci0gICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKERFQlVHX0NPTlRBSU5FUlMpIFNsb2cuZChUQUdfQ09OVEFJTkVSUywKICAgICAgICAgICAgICAgICAgICAgImRlc3Ryb3lBY3Rpdml0eUxvY2tlZDogZmluaXNoQ3VycmVudEFjdGl2aXR5TG9ja2VkIHI9IiArIHIgKwpAQCAtMzIyMSw3ICszMjQxLDcgQEAKICAgICAgICAgaWYgKERFQlVHX0FMTCkgU2xvZy52KFRBRywgIkVucXVldWVpbmcgcGVuZGluZyBmaW5pc2g6ICIgKyByKTsKICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5tRmluaXNoaW5nQWN0aXZpdGllcy5hZGQocik7CiAgICAgICAgIHIucmVzdW1lS2V5RGlzcGF0Y2hpbmdMb2NrZWQoKTsKLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKS5yZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChudWxsKTsKKyAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICByZXR1cm4gcjsKICAgICB9CiAKQEAgLTMzNDYsMTAgKzMzNjYsMTEgQEAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gYUluZm8gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0QWN0aXZpdHlJbmZvKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RJbnRlbnQuZ2V0Q29tcG9uZW50KCksIDAsIHNyZWMudXNlcklkKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJlcyA9IG1TdGFja1N1cGVydmlzb3Iuc3RhcnRBY3Rpdml0eUxvY2tlZChzcmVjLmFwcC50aHJlYWQsIGRlc3RJbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgYUluZm8sIG51bGwsIG51bGwsIHBhcmVudC5hcHBUb2tlbiwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAtMSwgcGFyZW50LmxhdW5jaGVkRnJvbVVpZCwgcGFyZW50LmxhdW5jaGVkRnJvbVBhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHBhcmVudC5sYXVuY2hlZEZyb21VaWQsIDAsIG51bGwsIGZhbHNlLCB0cnVlLCBudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlcyA9IG1TZXJ2aWNlLm1BY3Rpdml0eVN0YXJ0ZXIuc3RhcnRBY3Rpdml0eUxvY2tlZChzcmVjLmFwcC50aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEludGVudCwgbnVsbCAvKmVwaGVtZXJhbEludGVudCovLCBudWxsLCBhSW5mbywgbnVsbCAvKnJJbmZvKi8sIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgcGFyZW50LmFwcFRva2VuLCBudWxsLCAwLCAtMSwgcGFyZW50LmxhdW5jaGVkRnJvbVVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQubGF1bmNoZWRGcm9tUGFja2FnZSwgLTEsIHBhcmVudC5sYXVuY2hlZEZyb21VaWQsIDAsIG51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHRydWUsIG51bGwsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcmVudEluVGFzayA9IHJlcyA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUzsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcmVudEluVGFzayA9IGZhbHNlOwpAQCAtMzM3OCw5ICszMzk5LDkgQEAKICAgICAgICAgaWYgKG1QYXVzaW5nQWN0aXZpdHkgPT0gcikgewogICAgICAgICAgICAgbVBhdXNpbmdBY3Rpdml0eSA9IG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgbVNlcnZpY2UuY2xlYXJGb2N1c2VkQWN0aXZpdHkocik7CisgICAgICAgIG1TZXJ2aWNlLnJlc2V0Rm9jdXNlZEFjdGl2aXR5SWZOZWVkZWRMb2NrZWQocik7CiAKLSAgICAgICAgci5jb25maWdEZXN0cm95ID0gZmFsc2U7CisgICAgICAgIHIuZGVmZXJSZWxhdW5jaFVudGlsUGF1c2VkID0gZmFsc2U7CiAgICAgICAgIHIuZnJvemVuQmVmb3JlRGVzdHJveSA9IGZhbHNlOwogCiAgICAgICAgIGlmIChzZXRTdGF0ZSkgewpAQCAtMzUwOSw3ICszNTMwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoYWN0aXZpdHlSZW1vdmVkKSB7Ci0gICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY4Myw3ICszNzA0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQWN0aXZpdHlGcm9tSGlzdG9yeUxvY2tlZChyLCByZWFzb24pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKICAgICAgICAgfQpAQCAtMzcyMSw3ICszNzQyLDcgQEAKICAgICAgICAgICAgIHNldFZpc2libGVCZWhpbmRBY3Rpdml0eShudWxsKTsKICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3Iuc2NoZWR1bGVJZGxlVGltZW91dExvY2tlZChudWxsKTsKICAgICAgICAgfQotICAgICAgICBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgIH0KIAogICAgIGJvb2xlYW4gaGFzVmlzaWJsZUJlaGluZEFjdGl2aXR5KCkgewpAQCAtMzkzNiw3ICszOTU3LDcgQEAKICAgICAgICAgICAgIHVwZGF0ZVRyYW5zaXRMb2NrZWQoQXBwVHJhbnNpdGlvbi5UUkFOU0lUX1RBU0tfVE9fRlJPTlQsIG9wdGlvbnMpOwogICAgICAgICB9CiAKLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuQU1fVEFTS19UT19GUk9OVCwgdHIudXNlcklkLCB0ci50YXNrSWQpOwogCiAgICAgICAgIGlmIChWQUxJREFURV9UT0tFTlMpIHsKQEAgLTM5OTAsNiArNDAxMSwyMCBAQAogCiAgICAgICAgIGlmIChERUJVR19UUkFOU0lUSU9OKSBTbG9nLnYoVEFHX1RSQU5TSVRJT04sICJQcmVwYXJlIHRvIGJhY2sgdHJhbnNpdGlvbjogdGFzaz0iICsgdGFza0lkKTsKIAorICAgICAgICBpZiAobVN0YWNrSWQgPT0gSE9NRV9TVEFDS19JRCAmJiB0b3BUYXNrKCkuaXNIb21lVGFzaygpKSB7CisgICAgICAgICAgICAvLyBGb3IgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIG1vdmluZyB0aGUgaG9tZSB0YXNrIGJhY2sgYW5kIHRoZXJlIGlzIGFuIGFjdGl2aXR5IHZpc2libGUKKyAgICAgICAgICAgIC8vIGJlaGluZCBpdCBvbiB0aGUgZnVsbHNjcmVlbiBzdGFjaywgd2Ugd2FudCB0byBtb3ZlIHRoZSBmb2N1cyB0byB0aGUgdmlzaWJsZSBiZWhpbmQKKyAgICAgICAgICAgIC8vIGFjdGl2aXR5IHRvIG1haW50YWluIG9yZGVyIHdpdGggd2hhdCB0aGUgdXNlciBpcyBzZWVpbmcuCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIGZ1bGxzY3JlZW5TdGFjayA9CisgICAgICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IuZ2V0U3RhY2soRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQpOworICAgICAgICAgICAgaWYgKGZ1bGxzY3JlZW5TdGFjayAhPSBudWxsICYmIGZ1bGxzY3JlZW5TdGFjay5oYXNWaXNpYmxlQmVoaW5kQWN0aXZpdHkoKSkgeworICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHZpc2libGVCZWhpbmQgPSBmdWxsc2NyZWVuU3RhY2suZ2V0VmlzaWJsZUJlaGluZEFjdGl2aXR5KCk7CisgICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0Rm9jdXNlZEFjdGl2aXR5TG9ja2VkKHZpc2libGVCZWhpbmQsICJtb3ZlVGFza1RvQmFjayIpOworICAgICAgICAgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIGJvb2xlYW4gcHJldklzSG9tZSA9IGZhbHNlOwogCiAgICAgICAgIC8vIElmIHRydWUsIHdlIHNob3VsZCByZXN1bWUgdGhlIGhvbWUgYWN0aXZpdHkgbmV4dCBpZiB0aGUgdGFzayB3ZSBhcmUgbW92aW5nIHRvIHRoZQpAQCAtNDA0MCw3ICs0MDc1LDcgQEAKICAgICAgICAgICAgIHJldHVybiBtU3RhY2tTdXBlcnZpc29yLnJlc3VtZUhvbWVTdGFja1Rhc2sodGFza1RvUmV0dXJuVG8sIG51bGwsICJtb3ZlVGFza1RvQmFjayIpOwogICAgICAgICB9CiAKLSAgICAgICAgbVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgIG1TdGFja1N1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC00MTM4LDM4ICs0MTczLDMzIEBACiAgICAgICAgICAgICByLmNvbmZpZ0NoYW5nZUZsYWdzIHw9IGNoYW5nZXM7CiAgICAgICAgICAgICByLnN0YXJ0RnJlZXppbmdTY3JlZW5Mb2NrZWQoci5hcHAsIGdsb2JhbENoYW5nZXMpOwogICAgICAgICAgICAgci5mb3JjZU5ld0NvbmZpZyA9IGZhbHNlOworICAgICAgICAgICAgcHJlc2VydmVXaW5kb3cgJj0gaXNSZXNpemVPbmx5Q2hhbmdlKGNoYW5nZXMpOwogICAgICAgICAgICAgaWYgKHIuYXBwID09IG51bGwgfHwgci5hcHAudGhyZWFkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1dJVENIIHx8IERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25maWcgaXMgZGVzdHJveWluZyBub24tcnVubmluZyAiICsgcik7CiAgICAgICAgICAgICAgICAgZGVzdHJveUFjdGl2aXR5TG9ja2VkKHIsIHRydWUsICJjb25maWciKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5zdGF0ZSA9PSBBY3Rpdml0eVN0YXRlLlBBVVNJTkcpIHsKLSAgICAgICAgICAgICAgICAvLyBBIGxpdHRsZSBhbm5veWluZzogd2UgYXJlIHdhaXRpbmcgZm9yIHRoaXMgYWN0aXZpdHkgdG8KLSAgICAgICAgICAgICAgICAvLyBmaW5pc2ggcGF1c2luZy4gIExldCdzIG5vdCBkbyBhbnl0aGluZyBub3csIGJ1dCBqdXN0Ci0gICAgICAgICAgICAgICAgLy8gZmxhZyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlc3RhcnRlZCB3aGVuIGRvbmUgcGF1c2luZy4KKyAgICAgICAgICAgICAgICAvLyBBIGxpdHRsZSBhbm5veWluZzogd2UgYXJlIHdhaXRpbmcgZm9yIHRoaXMgYWN0aXZpdHkgdG8gZmluaXNoIHBhdXNpbmcuIExldCdzIG5vdAorICAgICAgICAgICAgICAgIC8vIGRvIGFueXRoaW5nIG5vdywgYnV0IGp1c3QgZmxhZyB0aGF0IGl0IG5lZWRzIHRvIGJlIHJlc3RhcnRlZCB3aGVuIGRvbmUgcGF1c2luZy4KICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1dJVENIIHx8IERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25maWcgaXMgc2tpcHBpbmcgYWxyZWFkeSBwYXVzaW5nICIgKyByKTsKLSAgICAgICAgICAgICAgICByLmNvbmZpZ0Rlc3Ryb3kgPSB0cnVlOworICAgICAgICAgICAgICAgIHIuZGVmZXJSZWxhdW5jaFVudGlsUGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByLnByZXNlcnZlV2luZG93T25EZWZlcnJlZFJlbGF1bmNoID0gcHJlc2VydmVXaW5kb3c7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHIuc3RhdGUgPT0gQWN0aXZpdHlTdGF0ZS5SRVNVTUVEKSB7Ci0gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIG9wdGltaXplIHRoaXMgY2FzZTogdGhlIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdpbmcKLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSB0b3AsIHJlc3VtZWQgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBkb2luZyB0aGUgbm9ybWFsIGhhbmRzaGFraW5nLCBqdXN0IHNheQorICAgICAgICAgICAgICAgIC8vIFRyeSB0byBvcHRpbWl6ZSB0aGlzIGNhc2U6IHRoZSBjb25maWd1cmF0aW9uIGlzIGNoYW5naW5nIGFuZCB3ZSBuZWVkIHRvIHJlc3RhcnQKKyAgICAgICAgICAgICAgICAvLyB0aGUgdG9wLCByZXN1bWVkIGFjdGl2aXR5LiBJbnN0ZWFkIG9mIGRvaW5nIHRoZSBub3JtYWwgaGFuZHNoYWtpbmcsIGp1c3Qgc2F5CiAgICAgICAgICAgICAgICAgLy8gInJlc3RhcnQhIi4KICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1dJVENIIHx8IERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb25maWcgaXMgcmVsYXVuY2hpbmcgcmVzdW1lZCAiICsgcik7Ci0gICAgICAgICAgICAgICAgcmVsYXVuY2hBY3Rpdml0eUxvY2tlZChyLCByLmNvbmZpZ0NoYW5nZUZsYWdzLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVXaW5kb3cgJiYgaXNSZXNpemVPbmx5Q2hhbmdlKGNoYW5nZXMpKTsKLSAgICAgICAgICAgICAgICByLmNvbmZpZ0NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICByZWxhdW5jaEFjdGl2aXR5TG9ja2VkKHIsIHIuY29uZmlnQ2hhbmdlRmxhZ3MsIHRydWUsIHByZXNlcnZlV2luZG93KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1NXSVRDSCB8fCBERUJVR19DT05GSUdVUkFUSU9OKSBTbG9nLnYoVEFHX0NPTkZJR1VSQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uZmlnIGlzIHJlbGF1bmNoaW5nIG5vbi1yZXN1bWVkICIgKyByKTsKLSAgICAgICAgICAgICAgICByZWxhdW5jaEFjdGl2aXR5TG9ja2VkKHIsIHIuY29uZmlnQ2hhbmdlRmxhZ3MsIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVXaW5kb3cgJiYgaXNSZXNpemVPbmx5Q2hhbmdlKGNoYW5nZXMpKTsKLSAgICAgICAgICAgICAgICByLmNvbmZpZ0NoYW5nZUZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICByZWxhdW5jaEFjdGl2aXR5TG9ja2VkKHIsIHIuY29uZmlnQ2hhbmdlRmxhZ3MsIGZhbHNlLCBwcmVzZXJ2ZVdpbmRvdyk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEFsbCBkb25lLi4uICB0ZWxsIHRoZSBjYWxsZXIgd2Ugd2VyZW4ndCBhYmxlIHRvIGtlZXAgdGhpcwotICAgICAgICAgICAgLy8gYWN0aXZpdHkgYXJvdW5kLgorICAgICAgICAgICAgLy8gQWxsIGRvbmUuLi4gIHRlbGwgdGhlIGNhbGxlciB3ZSB3ZXJlbid0IGFibGUgdG8ga2VlcCB0aGlzIGFjdGl2aXR5IGFyb3VuZC4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC00MTkyLDIwICs0MjIyLDIwIEBACiAgICAgICAgIGludCB0YXNrQ2hhbmdlcyA9IG9sZFRhc2tPdmVycmlkZS5kaWZmKHRhc2tDb25maWcpOwogICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHVzZSBzaXplIGNoYW5nZXMgaWYgdGhleSBkb24ndCBjcm9zcyBib3VuZGFyaWVzIHRoYXQgYXJlIGltcG9ydGFudCB0bwogICAgICAgICAvLyB0aGUgYXBwLgotICAgICAgICBpZiAoKHRhc2tDaGFuZ2VzICYgQWN0aXZpdHlJbmZvLkNPTkZJR19TQ1JFRU5fU0laRSkgIT0gMCkgeworICAgICAgICBpZiAoKHRhc2tDaGFuZ2VzICYgQ09ORklHX1NDUkVFTl9TSVpFKSAhPSAwKSB7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNyb3NzZXMgPSByZWNvcmQuY3Jvc3Nlc0hvcml6b250YWxTaXplVGhyZXNob2xkKAogICAgICAgICAgICAgICAgICAgICBvbGRUYXNrT3ZlcnJpZGUuc2NyZWVuV2lkdGhEcCwgdGFza0NvbmZpZy5zY3JlZW5XaWR0aERwKQogICAgICAgICAgICAgICAgICAgICB8fCByZWNvcmQuY3Jvc3Nlc1ZlcnRpY2FsU2l6ZVRocmVzaG9sZCgKICAgICAgICAgICAgICAgICAgICAgb2xkVGFza092ZXJyaWRlLnNjcmVlbkhlaWdodERwLCB0YXNrQ29uZmlnLnNjcmVlbkhlaWdodERwKTsKICAgICAgICAgICAgIGlmICghY3Jvc3NlcykgewotICAgICAgICAgICAgICAgIHRhc2tDaGFuZ2VzICY9IH5BY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9TSVpFOworICAgICAgICAgICAgICAgIHRhc2tDaGFuZ2VzICY9IH5DT05GSUdfU0NSRUVOX1NJWkU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCh0YXNrQ2hhbmdlcyAmIEFjdGl2aXR5SW5mby5DT05GSUdfU01BTExFU1RfU0NSRUVOX1NJWkUpICE9IDApIHsKKyAgICAgICAgaWYgKCh0YXNrQ2hhbmdlcyAmIENPTkZJR19TTUFMTEVTVF9TQ1JFRU5fU0laRSkgIT0gMCkgewogICAgICAgICAgICAgZmluYWwgaW50IG9sZFNtYWxsZXN0ID0gb2xkVGFza092ZXJyaWRlLnNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKICAgICAgICAgICAgIGZpbmFsIGludCBuZXdTbWFsbGVzdCA9IHRhc2tDb25maWcuc21hbGxlc3RTY3JlZW5XaWR0aERwOwogICAgICAgICAgICAgaWYgKCFyZWNvcmQuY3Jvc3Nlc1NtYWxsZXN0U2l6ZVRocmVzaG9sZChvbGRTbWFsbGVzdCwgbmV3U21hbGxlc3QpKSB7Ci0gICAgICAgICAgICAgICAgdGFza0NoYW5nZXMgJj0gfkFjdGl2aXR5SW5mby5DT05GSUdfU01BTExFU1RfU0NSRUVOX1NJWkU7CisgICAgICAgICAgICAgICAgdGFza0NoYW5nZXMgJj0gfkNPTkZJR19TTUFMTEVTVF9TQ1JFRU5fU0laRTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2F0Y2hDb25maWdDaGFuZ2VzRnJvbVVuc2V0KHRhc2tDb25maWcsIG9sZFRhc2tPdmVycmlkZSwgdGFza0NoYW5nZXMpOwpAQCAtNDIxNyw3ICs0MjQ3LDcgQEAKICAgICAgICAgICAgIC8vIHtAbGluayBDb25maWd1cmF0aW9uI2RpZmZ9IGRvZXNuJ3QgY2F0Y2ggY2hhbmdlcyBmcm9tIHVuc2V0IHZhbHVlcy4KICAgICAgICAgICAgIC8vIENoZWNrIGZvciBjaGFuZ2VzIHdlIGNhcmUgYWJvdXQuCiAgICAgICAgICAgICBpZiAob2xkVGFza092ZXJyaWRlLm9yaWVudGF0aW9uICE9IHRhc2tDb25maWcub3JpZW50YXRpb24pIHsKLSAgICAgICAgICAgICAgICB0YXNrQ2hhbmdlcyB8PSBBY3Rpdml0eUluZm8uQ09ORklHX09SSUVOVEFUSU9OOworICAgICAgICAgICAgICAgIHRhc2tDaGFuZ2VzIHw9IENPTkZJR19PUklFTlRBVElPTjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZXhwbGljaXRseSB0cmFjayBzaXR1YXRpb25zIHdoZXJlIHRoZSBzaXplIGNvbmZpZ3VyYXRpb24gZ29lcyBmcm9tCiAgICAgICAgICAgICAvLyB1bmRlZmluZWQgdG8gZGVmaW5lZC4gV2UgZG9uJ3QgY2FyZSBhYm91dCBjcm9zc2luZyB0aGUgdGhyZXNob2xkIGluIHRoYXQgY2FzZSwKQEAgLTQyMjcsMzQgKzQyNTcsNDEgQEAKICAgICAgICAgICAgIGZpbmFsIGludCB1bmRlZmluZWRIZWlnaHQgPSBDb25maWd1cmF0aW9uLlNDUkVFTl9IRUlHSFRfRFBfVU5ERUZJTkVEOwogICAgICAgICAgICAgaWYgKChvbGRIZWlnaHQgPT0gdW5kZWZpbmVkSGVpZ2h0ICYmIG5ld0hlaWdodCAhPSB1bmRlZmluZWRIZWlnaHQpCiAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRIZWlnaHQgIT0gdW5kZWZpbmVkSGVpZ2h0ICYmIG5ld0hlaWdodCA9PSB1bmRlZmluZWRIZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgdGFza0NoYW5nZXMgfD0gQWN0aXZpdHlJbmZvLkNPTkZJR19TQ1JFRU5fU0laRTsKKyAgICAgICAgICAgICAgICB0YXNrQ2hhbmdlcyB8PSBDT05GSUdfU0NSRUVOX1NJWkU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBpbnQgb2xkV2lkdGggPSBvbGRUYXNrT3ZlcnJpZGUuc2NyZWVuV2lkdGhEcDsKICAgICAgICAgICAgIGZpbmFsIGludCBuZXdXaWR0aCA9IHRhc2tDb25maWcuc2NyZWVuV2lkdGhEcDsKICAgICAgICAgICAgIGZpbmFsIGludCB1bmRlZmluZWRXaWR0aCA9IENvbmZpZ3VyYXRpb24uU0NSRUVOX1dJRFRIX0RQX1VOREVGSU5FRDsKICAgICAgICAgICAgIGlmICgob2xkV2lkdGggPT0gdW5kZWZpbmVkV2lkdGggJiYgbmV3V2lkdGggIT0gdW5kZWZpbmVkV2lkdGgpCiAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRXaWR0aCAhPSB1bmRlZmluZWRXaWR0aCAmJiBuZXdXaWR0aCA9PSB1bmRlZmluZWRXaWR0aCkpIHsKLSAgICAgICAgICAgICAgICB0YXNrQ2hhbmdlcyB8PSBBY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9TSVpFOworICAgICAgICAgICAgICAgIHRhc2tDaGFuZ2VzIHw9IENPTkZJR19TQ1JFRU5fU0laRTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIGludCBvbGRTbWFsbGVzdCA9IG9sZFRhc2tPdmVycmlkZS5zbWFsbGVzdFNjcmVlbldpZHRoRHA7CiAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3U21hbGxlc3QgPSB0YXNrQ29uZmlnLnNtYWxsZXN0U2NyZWVuV2lkdGhEcDsKICAgICAgICAgICAgIGZpbmFsIGludCB1bmRlZmluZWRTbWFsbGVzdCA9IENvbmZpZ3VyYXRpb24uU01BTExFU1RfU0NSRUVOX1dJRFRIX0RQX1VOREVGSU5FRDsKICAgICAgICAgICAgIGlmICgob2xkU21hbGxlc3QgPT0gdW5kZWZpbmVkU21hbGxlc3QgJiYgbmV3U21hbGxlc3QgIT0gdW5kZWZpbmVkU21hbGxlc3QpCiAgICAgICAgICAgICAgICAgICAgIHx8IChvbGRTbWFsbGVzdCAhPSB1bmRlZmluZWRTbWFsbGVzdCAmJiBuZXdTbWFsbGVzdCA9PSB1bmRlZmluZWRTbWFsbGVzdCkpIHsKLSAgICAgICAgICAgICAgICB0YXNrQ2hhbmdlcyB8PSBBY3Rpdml0eUluZm8uQ09ORklHX1NNQUxMRVNUX1NDUkVFTl9TSVpFOworICAgICAgICAgICAgICAgIHRhc2tDaGFuZ2VzIHw9IENPTkZJR19TTUFMTEVTVF9TQ1JFRU5fU0laRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIGludCBvbGRMYXlvdXQgPSBvbGRUYXNrT3ZlcnJpZGUuc2NyZWVuTGF5b3V0OworICAgICAgICAgICAgZmluYWwgaW50IG5ld0xheW91dCA9IHRhc2tDb25maWcuc2NyZWVuTGF5b3V0OworICAgICAgICAgICAgaWYgKChvbGRMYXlvdXQgPT0gU0NSRUVOTEFZT1VUX1VOREVGSU5FRCAmJiBuZXdMYXlvdXQgIT0gU0NSRUVOTEFZT1VUX1VOREVGSU5FRCkKKyAgICAgICAgICAgICAgICB8fCAob2xkTGF5b3V0ICE9IFNDUkVFTkxBWU9VVF9VTkRFRklORUQgJiYgbmV3TGF5b3V0ID09IFNDUkVFTkxBWU9VVF9VTkRFRklORUQpKSB7CisgICAgICAgICAgICAgICAgdGFza0NoYW5nZXMgfD0gQ09ORklHX1NDUkVFTl9MQVlPVVQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRhc2tDaGFuZ2VzOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSZXNpemVPbmx5Q2hhbmdlKGludCBjaGFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIChjaGFuZ2UgJiB+KEFjdGl2aXR5SW5mby5DT05GSUdfU0NSRUVOX1NJWkUKLSAgICAgICAgICAgICAgICB8IEFjdGl2aXR5SW5mby5DT05GSUdfU01BTExFU1RfU0NSRUVOX1NJWkUgfCBBY3Rpdml0eUluZm8uQ09ORklHX09SSUVOVEFUSU9OKSkgPT0gMDsKKyAgICAgICAgcmV0dXJuIChjaGFuZ2UgJiB+KENPTkZJR19TQ1JFRU5fU0laRSB8IENPTkZJR19TTUFMTEVTVF9TQ1JFRU5fU0laRSB8IENPTkZJR19PUklFTlRBVElPTgorICAgICAgICAgICAgICAgIHwgQ09ORklHX1NDUkVFTl9MQVlPVVQpKSA9PSAwOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWxhdW5jaEFjdGl2aXR5TG9ja2VkKAogICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciwgaW50IGNoYW5nZXMsIGJvb2xlYW4gYW5kUmVzdW1lLCBib29sZWFuIHByZXNlcnZlV2luZG93KSB7CiAgICAgICAgIGlmIChtU2VydmljZS5tU3VwcHJlc3NSZXNpemVDb25maWdDaGFuZ2VzICYmIHByZXNlcnZlV2luZG93KSB7CisgICAgICAgICAgICByLmNvbmZpZ0NoYW5nZUZsYWdzID0gMDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC00MjgyLDYgKzQzMTksNyBAQAogICAgICAgICAgICAgci5hcHAudGhyZWFkLnNjaGVkdWxlUmVsYXVuY2hBY3Rpdml0eShyLmFwcFRva2VuLCByZXN1bHRzLCBuZXdJbnRlbnRzLCBjaGFuZ2VzLAogICAgICAgICAgICAgICAgICAgICAhYW5kUmVzdW1lLCBuZXcgQ29uZmlndXJhdGlvbihtU2VydmljZS5tQ29uZmlndXJhdGlvbiksCiAgICAgICAgICAgICAgICAgICAgIG5ldyBDb25maWd1cmF0aW9uKHIudGFzay5tT3ZlcnJpZGVDb25maWcpLCBwcmVzZXJ2ZVdpbmRvdyk7CisgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLmFjdGl2aXR5UmVsYXVuY2hpbmdMb2NrZWQocik7CiAgICAgICAgICAgICAvLyBOb3RlOiBkb24ndCBuZWVkIHRvIGNhbGwgcGF1c2VJZlNsZWVwaW5nTG9ja2VkKCkgaGVyZSwgYmVjYXVzZQogICAgICAgICAgICAgLy8gdGhlIGNhbGxlciB3aWxsIG9ubHkgcGFzcyBpbiAnYW5kUmVzdW1lJyBpZiB0aGlzIGFjdGl2aXR5IGlzCiAgICAgICAgICAgICAvLyBjdXJyZW50bHkgcmVzdW1lZCwgd2hpY2ggaW1wbGllcyB3ZSBhcmVuJ3Qgc2xlZXBpbmcuCkBAIC00Mjk3LDYgKzQzMzUsOCBAQAogICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoUEFVU0VfVElNRU9VVF9NU0csIHIpOwogICAgICAgICAgICAgci5zdGF0ZSA9IEFjdGl2aXR5U3RhdGUuUEFVU0VEOwogICAgICAgICB9CisKKyAgICAgICAgci5jb25maWdDaGFuZ2VGbGFncyA9IDA7CiAgICAgfQogCiAgICAgYm9vbGVhbiB3aWxsQWN0aXZpdHlCZVZpc2libGVMb2NrZWQoSUJpbmRlciB0b2tlbikgewpAQCAtNDU2Miw3ICs0NjAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgYS5mb3JjZU5ld0NvbmZpZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydGluZyAhPSBudWxsICYmIGEgPT0gc3RhcnRpbmcgJiYgYS52aXNpYmxlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhLnN0YXJ0RnJlZXppbmdTY3JlZW5Mb2NrZWQoc3RhcnRpbmcuYXBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9MQVlPVVQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfU0NSRUVOX0xBWU9VVCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NjMwLDcgKzQ2NzAsNyBAQAogICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIHRvIGFkanVzdCBmb2N1c2VkIHN0YWNrIGlmIHRoaXMgc3RhY2sgaXMgaW4gZm9jdXMuCiAgICAgICAgICAgICBpZiAoaXNPbkhvbWVEaXNwbGF5KCkgJiYgbVN0YWNrU3VwZXJ2aXNvci5pc0ZvY3VzZWRTdGFjayh0aGlzKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBteVJlYXNvbiA9IHJlYXNvbiArICIgbGVmdFRhc2tIaXN0b3J5RW1wdHkiOwotICAgICAgICAgICAgICAgIGlmIChtRnVsbHNjcmVlbiB8fCAhYWRqdXN0Rm9jdXNUb05leHRWaXNpYmxlU3RhY2tMb2NrZWQobnVsbCwgbXlSZWFzb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKG1GdWxsc2NyZWVuIHx8ICFhZGp1c3RGb2N1c1RvTmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKG15UmVhc29uKSkgewogICAgICAgICAgICAgICAgICAgICBtU3RhY2tTdXBlcnZpc29yLm1vdmVIb21lU3RhY2tUb0Zyb250KG15UmVhc29uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NzAzLDEwICs0NzQzLDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBwb3N0QWRkVGFzayhUYXNrUmVjb3JkIHRhc2ssIEFjdGl2aXR5U3RhY2sgcHJldlN0YWNrKSB7CiAgICAgICAgIGlmIChwcmV2U3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHByZXZTdGFjayAhPSB0aGlzCi0gICAgICAgICAgICAgICAgICAgICYmIChwcmV2U3RhY2subVN0YWNrSWQgPT0gUElOTkVEX1NUQUNLX0lEIHx8IG1TdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkpIHsKLSAgICAgICAgICAgICAgICB0YXNrLnJlcG9ydFBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0YXNrLnJlcG9ydFBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlSWZOZWVkZWQocHJldlN0YWNrKTsKICAgICAgICAgfSBlbHNlIGlmICh0YXNrLnZvaWNlU2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHRhc2sudm9pY2VTZXNzaW9uLnRhc2tTdGFydGVkKHRhc2suaW50ZW50LCB0YXNrLnRhc2tJZCk7CkBAIC00NzE2LDM2ICs0NzUzLDMxIEBACiAgICAgfQogCiAgICAgdm9pZCBhZGRDb25maWdPdmVycmlkZShBY3Rpdml0eVJlY29yZCByLCBUYXNrUmVjb3JkIHRhc2spIHsKLSAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSB0YXNrLmdldExhdW5jaEJvdW5kcygpOwotICAgICAgICB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbihib3VuZHMpOworICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IHRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uRnJvbUxhdW5jaEJvdW5kcygpOwogICAgICAgICBtV2luZG93TWFuYWdlci5hZGRBcHBUb2tlbih0YXNrLm1BY3Rpdml0aWVzLmluZGV4T2YociksIHIuYXBwVG9rZW4sCiAgICAgICAgICAgICAgICAgci50YXNrLnRhc2tJZCwgbVN0YWNrSWQsIHIuaW5mby5zY3JlZW5PcmllbnRhdGlvbiwgci5mdWxsc2NyZWVuLAotICAgICAgICAgICAgICAgIChyLmluZm8uZmxhZ3MgJiBBY3Rpdml0eUluZm8uRkxBR19TSE9XX0ZPUl9BTExfVVNFUlMpICE9IDAsIHIudXNlcklkLAotICAgICAgICAgICAgICAgIHIuaW5mby5jb25maWdDaGFuZ2VzLCB0YXNrLnZvaWNlU2Vzc2lvbiAhPSBudWxsLCByLm1MYXVuY2hUYXNrQmVoaW5kLAotICAgICAgICAgICAgICAgIGJvdW5kcywgdGFzay5tT3ZlcnJpZGVDb25maWcsICFyLmlzSG9tZUFjdGl2aXR5KCkpOworICAgICAgICAgICAgICAgIChyLmluZm8uZmxhZ3MgJiBGTEFHX1NIT1dfRk9SX0FMTF9VU0VSUykgIT0gMCwgci51c2VySWQsIHIuaW5mby5jb25maWdDaGFuZ2VzLAorICAgICAgICAgICAgICAgIHRhc2sudm9pY2VTZXNzaW9uICE9IG51bGwsIHIubUxhdW5jaFRhc2tCZWhpbmQsIGJvdW5kcywgdGFzay5tT3ZlcnJpZGVDb25maWcsCisgICAgICAgICAgICAgICAgIXIuaXNIb21lQWN0aXZpdHkoKSwgci5pc0Fsd2F5c0ZvY3VzYWJsZSgpKTsKICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2V0VGFza1Jlc2l6ZWFibGUodGFzay50YXNrSWQsIHRhc2subVJlc2l6ZWFibGUpOwogICAgICAgICByLnRhc2tDb25maWdPdmVycmlkZSA9IHRhc2subU92ZXJyaWRlQ29uZmlnOwogICAgIH0KIAotICAgIHZvaWQgc2V0Rm9jdXNBbmRSZXN1bWVTdGF0ZUlmTmVlZGVkKAotICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciwgYm9vbGVhbiBzZXRGb2N1cywgYm9vbGVhbiBzZXRSZXN1bWUsIFN0cmluZyByZWFzb24pIHsKLSAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGhhZCBmb2N1cyBiZWZvcmUgbW92ZSBmb2N1cyB0byB0aGlzIHN0YWNrLgotICAgICAgICBpZiAoc2V0Rm9jdXMpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBhY3Rpdml0eSBvd25zIHRoZSBsYXN0IHJlc3VtZWQgYWN0aXZpdHksIHRyYW5zZmVyIHRoYXQgdG9nZXRoZXIsCi0gICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHJlc3VtZSB0aGUgc2FtZSBhY3Rpdml0eSBhZ2FpbiBpbiB0aGUgbmV3IHN0YWNrLgotICAgICAgICAgICAgLy8gQXBwcyBtYXkgZGVwZW5kIG9uIG9uUmVzdW1lKCkvb25QYXVzZSgpIGJlaW5nIGNhbGxlZCBpbiBwYWlycy4KLSAgICAgICAgICAgIGlmIChzZXRSZXN1bWUpIHsKLSAgICAgICAgICAgICAgICBtUmVzdW1lZEFjdGl2aXR5ID0gcjsKLSAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBzdGFjayBpbiB3aGljaCB3ZSBhcmUgcGxhY2luZyB0aGUgYWN0aXZpdHkgdG8gdGhlIGZyb250LiBXZSBkb24ndCB1c2UKLSAgICAgICAgICAgICAgICAvLyBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZCwgYmVjYXVzZSBpZiB0aGUgYWN0aXZpdHkgaXMKLSAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGZvY3VzZWQsIHRoZSBjYWxsIHdpbGwgc2hvcnQtY2lyY3VpdCBhbmQgZG8gbm90aGluZy4KLSAgICAgICAgICAgICAgICBtb3ZlVG9Gcm9udChyZWFzb24pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG5vdCBvbmx5IG1vdmUgdGhlIHN0YWNrIHRvIHRoZSBmcm9udCwgYnV0IGFsc28gaGF2ZSB0aGUgYWN0aXZpdHkKLSAgICAgICAgICAgICAgICAvLyBmb2N1c2VkLiBUaGlzIHdpbGwgYWNoaWV2ZSBib3RoIGdvYWxzLgotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCByZWFzb24pOwotICAgICAgICAgICAgfQorICAgIHZvaWQgbW92ZVRvRnJvbnRBbmRSZXN1bWVTdGF0ZUlmTmVlZGVkKAorICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciwgYm9vbGVhbiBtb3ZlVG9Gcm9udCwgYm9vbGVhbiBzZXRSZXN1bWUsIFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgaWYgKCFtb3ZlVG9Gcm9udCkgeworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IG93bnMgdGhlIGxhc3QgcmVzdW1lZCBhY3Rpdml0eSwgdHJhbnNmZXIgdGhhdCB0b2dldGhlciwKKyAgICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCByZXN1bWUgdGhlIHNhbWUgYWN0aXZpdHkgYWdhaW4gaW4gdGhlIG5ldyBzdGFjay4KKyAgICAgICAgLy8gQXBwcyBtYXkgZGVwZW5kIG9uIG9uUmVzdW1lKCkvb25QYXVzZSgpIGJlaW5nIGNhbGxlZCBpbiBwYWlycy4KKyAgICAgICAgaWYgKHNldFJlc3VtZSkgeworICAgICAgICAgICAgbVJlc3VtZWRBY3Rpdml0eSA9IHI7CisgICAgICAgIH0KKyAgICAgICAgLy8gTW92ZSB0aGUgc3RhY2sgaW4gd2hpY2ggd2UgYXJlIHBsYWNpbmcgdGhlIGFjdGl2aXR5IHRvIHRoZSBmcm9udC4gVGhlIGNhbGwgd2lsbCBhbHNvCisgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgYWN0aXZpdHkgZm9jdXMgaXMgc2V0LgorICAgICAgICBtb3ZlVG9Gcm9udChyZWFzb24pOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDc2OSwxNSArNDgwMSwxNyBAQAogICAgICAgICByLnNldFRhc2sodGFzaywgbnVsbCk7CiAgICAgICAgIHRhc2suYWRkQWN0aXZpdHlUb1RvcChyKTsKICAgICAgICAgc2V0QXBwVGFzayhyLCB0YXNrKTsKLSAgICAgICAgdGFzay5yZXBvcnRQaWN0dXJlSW5QaWN0dXJlTW9kZUNoYW5nZSgpOwotICAgICAgICBzZXRGb2N1c0FuZFJlc3VtZVN0YXRlSWZOZWVkZWQociwgd2FzRm9jdXNlZCwgd2FzUmVzdW1lZCwgIm1vdmVBY3Rpdml0eVRvU3RhY2siKTsKKyAgICAgICAgdGFzay5yZXBvcnRQaWN0dXJlSW5QaWN0dXJlTW9kZUNoYW5nZUlmTmVlZGVkKHByZXZTdGFjayk7CisgICAgICAgIG1vdmVUb0Zyb250QW5kUmVzdW1lU3RhdGVJZk5lZWRlZChyLCB3YXNGb2N1c2VkLCB3YXNSZXN1bWVkLCAibW92ZUFjdGl2aXR5VG9TdGFjayIpOworICAgICAgICBpZiAod2FzUmVzdW1lZCkgeworICAgICAgICAgICAgcHJldlN0YWNrLm1SZXN1bWVkQWN0aXZpdHkgPSBudWxsOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHNldEFwcFRhc2soQWN0aXZpdHlSZWNvcmQgciwgVGFza1JlY29yZCB0YXNrKSB7Ci0gICAgICAgIGZpbmFsIFJlY3QgYm91bmRzID0gdGFzay5nZXRMYXVuY2hCb3VuZHMoKTsKLSAgICAgICAgdGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24oYm91bmRzKTsKKyAgICAgICAgZmluYWwgUmVjdCBib3VuZHMgPSB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbkZyb21MYXVuY2hCb3VuZHMoKTsKICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2V0QXBwVGFzaygKLSAgICAgICAgICAgICAgICByLmFwcFRva2VuLCB0YXNrLnRhc2tJZCwgbVN0YWNrSWQsIHRhc2suZ2V0TGF1bmNoQm91bmRzKCksIHRhc2subU92ZXJyaWRlQ29uZmlnKTsKKyAgICAgICAgICAgICAgICByLmFwcFRva2VuLCB0YXNrLnRhc2tJZCwgbVN0YWNrSWQsIGJvdW5kcywgdGFzay5tT3ZlcnJpZGVDb25maWcpOwogICAgICAgICBtV2luZG93TWFuYWdlci5zZXRUYXNrUmVzaXplYWJsZSh0YXNrLnRhc2tJZCwgdGFzay5tUmVzaXplYWJsZSk7CiAgICAgICAgIHIudGFza0NvbmZpZ092ZXJyaWRlID0gdGFzay5tT3ZlcnJpZGVDb25maWc7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5qYXZhCmluZGV4IGY0YmExOWYuLjAyMmI2MGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhY2tTdXBlcnZpc29yLmphdmEKQEAgLTE2LDQwICsxNiwxMCBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hbTsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uU1RBUlRfQU5ZX0FDVElWSVRZOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuKjsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GSVJTVF9EWU5BTUlDX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GSVJTVF9TVEFUSUNfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkhPTUVfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLklOVkFMSURfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkxBU1RfU1RBVElDX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5QSU5ORURfU1RBQ0tfSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfQ0xFQVJfVE9QOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUU7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRkxBR19TSE9XX0ZPUl9BTExfVVNFUlM7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuVHJhY2UuVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfU0hPV19GT1JfQUxMX1VTRVJTOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuKjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlclNlcnZpY2UuRklSU1RfU1VQRVJWSVNPUl9TVEFDS19NU0c7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5IT01FX0FDVElWSVRZX1RZUEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5SRUNFTlRTX0FDVElWSVRZX1RZUEU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5BUFBMSUNBVElPTl9BQ1RJVklUWV9UWVBFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLio7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX0RPTlRfTE9DSzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfTEFVTkNIQUJMRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfTEFVTkNIQUJMRV9QUklWOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9QSU5OQUJMRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfV0hJVEVMSVNURUQ7Ci0KIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUnVubmluZ1Rhc2tJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0luZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlPcHRpb25zOwpAQCAtNTgsMTIgKzI4LDggQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlDb250YWluZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5Q29udGFpbmVyQ2FsbGJhY2s7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5JQXBwbGljYXRpb25UaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuS2V5Z3VhcmRNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUHJvZmlsZXJJbmZvOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5SdW5uaW5nVGFza0luZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlci5XYWl0UmVzdWx0OworaW1wb3J0IGFuZHJvaWQuYXBwLlByb2ZpbGVySW5mbzsKIGltcG9ydCBhbmRyb2lkLmFwcC5SZXN1bHRJbmZvOwogaW1wb3J0IGFuZHJvaWQuYXBwLlN0YXR1c0Jhck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uSURldmljZVBvbGljeU1hbmFnZXI7CkBAIC03MSwxMiArMzcsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUludGVudFNlbmRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRTZW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlJlc29sdmVJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Vc2VySW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247CkBAIC04NywxMCArNTEsNyBAQAogaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5WaXJ0dWFsRGlzcGxheTsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LklucHV0TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmlucHV0LklucHV0TWFuYWdlckludGVybmFsOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7CiBpbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTEwNyw3ICs2OCw2IEBACiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Xb3JrU291cmNlOwotaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLk1lZGlhU3RvcmU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlNldHRpbmdOb3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTExNywxOSArNzcsMTQgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuRXZlbnRMb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwotCiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXRFdmVudDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKIAotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHk7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklWb2ljZUludGVyYWN0b3I7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5SZWZlcnJlckludGVudDsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5UcmFuc2ZlclBpcGU7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5zdGF0dXNiYXIuSVN0YXR1c0JhclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5Mb2NrUGF0dGVyblV0aWxzOwpAQCAtMTQ1LDIzICsxMDAsODMgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5TVEFSVF9BTllfQUNUSVZJVFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5MT0NLX1RBU0tfTU9ERV9MT0NLRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5MT0NLX1RBU0tfTU9ERV9OT05FOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuTE9DS19UQVNLX01PREVfUElOTkVEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfRk9SQ0VEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuUkVTSVpFX01PREVfU1lTVEVNOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZJUlNUX0RZTkFNSUNfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZJUlNUX1NUQVRJQ19TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSE9NRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuTEFTVF9TVEFUSUNfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLlBJTk5FRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0s7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX1NIT1dfRk9SX0FMTF9VU0VSUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5UcmFjZS5UUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FMTDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTlRBSU5FUlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19JRExFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfTE9DS1NDUkVFTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0xPQ0tUQVNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUEFVU0U7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19SRUNFTlRTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUkVMRUFTRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQUNLOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1RBVEVTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1dJVENIOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVEFTS1M7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19WSVNJQkxFX0JFSElORDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfQ09OVEFJTkVSUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfSURMRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfTE9DS1RBU0s7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1BBVVNFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9SRUNFTlRTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9SRUxFQVNFOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9TVEFDSzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfU1RBVEVTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9TV0lUQ0g7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1RBU0tTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuUE9TVEZJWF9WSVNJQkxFX0JFSElORDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlRBR19BTTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XSVRIX0NMQVNTX05BTUU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkZJUlNUX1NVUEVSVklTT1JfU1RBQ0tfTVNHOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlSZWNvcmQuQVBQTElDQVRJT05fQUNUSVZJVFlfVFlQRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5UmVjb3JkLkhPTUVfQUNUSVZJVFlfVFlQRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5UmVjb3JkLlJFQ0VOVFNfQUNUSVZJVFlfVFlQRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5ERVNUUk9ZRUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuREVTVFJPWUlORzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5JTklUSUFMSVpJTkc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuUEFVU0VEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLlBBVVNJTkc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuUkVTVU1FRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2suQWN0aXZpdHlTdGF0ZS5TVE9QUEVEOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFjay5BY3Rpdml0eVN0YXRlLlNUT1BQSU5HOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uVGFza1JlY29yZC5MT0NLX1RBU0tfQVVUSF9ET05UX0xPQ0s7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX0xBVU5DSEFCTEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX0xBVU5DSEFCTEVfUFJJVjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLlRhc2tSZWNvcmQuTE9DS19UQVNLX0FVVEhfUElOTkFCTEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5UYXNrUmVjb3JkLkxPQ0tfVEFTS19BVVRIX1dISVRFTElTVEVEOworCiBwdWJsaWMgZmluYWwgY2xhc3MgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IgaW1wbGVtZW50cyBEaXNwbGF5TGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUQUdfV0lUSF9DTEFTU19OQU1FID8gIkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIiA6IFRBR19BTTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0NPTkZJR1VSQVRJT04gPSBUQUcgKyBQT1NURklYX0NPTkZJR1VSQVRJT047CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19DT05UQUlORVJTID0gVEFHICsgUE9TVEZJWF9DT05UQUlORVJTOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRk9DVVMgPSBUQUcgKyBQT1NURklYX0ZPQ1VTOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfSURMRSA9IFRBRyArIFBPU1RGSVhfSURMRTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0xPQ0tUQVNLID0gVEFHICsgUE9TVEZJWF9MT0NLVEFTSzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BBVVNFID0gVEFHICsgUE9TVEZJWF9QQVVTRTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1JFQ0VOVFMgPSBUQUcgKyBQT1NURklYX1JFQ0VOVFM7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19SRUxFQVNFID0gVEFHICsgUE9TVEZJWF9SRUxFQVNFOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfUkVTVUxUUyA9IFRBRyArIFBPU1RGSVhfUkVTVUxUUzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1NUQUNLID0gVEFHICsgUE9TVEZJWF9TVEFDSzsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1NUQVRFUyA9IFRBRyArIFBPU1RGSVhfU1RBVEVTOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU1dJVENIID0gVEFHICsgUE9TVEZJWF9TV0lUQ0g7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19UQVNLUyA9IFRBRyArIFBPU1RGSVhfVEFTS1M7CisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfVEFTS1MgPSBUQUcgKyBQT1NURklYX1RBU0tTOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfVklTSUJMRV9CRUhJTkQgPSBUQUcgKyBQT1NURklYX1ZJU0lCTEVfQkVISU5EOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfVVNFUl9MRUFWSU5HID0gVEFHICsgUE9TVEZJWF9VU0VSX0xFQVZJTkc7CiAKICAgICAvKiogSG93IGxvbmcgd2Ugd2FpdCB1bnRpbCBnaXZpbmcgdXAgb24gdGhlIGxhc3QgYWN0aXZpdHkgdGVsbGluZyB1cyBpdCBpcyBpZGxlLiAqLwogICAgIHN0YXRpYyBmaW5hbCBpbnQgSURMRV9USU1FT1VUID0gMTAgKiAxMDAwOwpAQCAtMTkzLDcgKzIwOCw3IEBACiAKICAgICAvLyBVc2VkIHRvIGluZGljYXRlIGlmIGFuIG9iamVjdCAoZS5nLiBzdGFjaykgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIGdldAogICAgIC8vIHNob3VsZCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIENSRUFURV9JRl9ORUVERUQgPSB0cnVlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIENSRUFURV9JRl9ORUVERUQgPSB0cnVlOwogCiAgICAgLy8gVXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdpbmRvd3Mgb2YgYWN0aXZpdGllcyBzaG91bGQgYmUgcHJlc2VydmVkIGR1cmluZyB0aGUgcmVzaXplLgogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSRVNFUlZFX1dJTkRPV1MgPSB0cnVlOwpAQCAtMjY2LDE0ICsyODEsMTQgQEAKICAgICBwcml2YXRlIGludCBtQ3VyVGFza0lkID0gMDsKIAogICAgIC8qKiBUaGUgY3VycmVudCB1c2VyICovCi0gICAgcHJpdmF0ZSBpbnQgbUN1cnJlbnRVc2VyOworICAgIGludCBtQ3VycmVudFVzZXI7CiAKICAgICAvKiogVGhlIHN0YWNrIGNvbnRhaW5pbmcgdGhlIGxhdW5jaGVyIGFwcC4gQXNzdW1lZCB0byBhbHdheXMgYmUgYXR0YWNoZWQgdG8KICAgICAgKiBEaXNwbGF5LkRFRkFVTFRfRElTUExBWS4gKi8KLSAgICBwcml2YXRlIEFjdGl2aXR5U3RhY2sgbUhvbWVTdGFjazsKKyAgICBBY3Rpdml0eVN0YWNrIG1Ib21lU3RhY2s7CiAKICAgICAvKiogVGhlIHN0YWNrIGN1cnJlbnRseSByZWNlaXZpbmcgaW5wdXQgb3IgbGF1bmNoaW5nIHRoZSBuZXh0IGFjdGl2aXR5LiAqLwotICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBtRm9jdXNlZFN0YWNrOworICAgIEFjdGl2aXR5U3RhY2sgbUZvY3VzZWRTdGFjazsKIAogICAgIC8qKiBJZiB0aGlzIGlzIHRoZSBzYW1lIGFzIG1Gb2N1c2VkU3RhY2sgdGhlbiB0aGUgYWN0aXZpdHkgb24gdGhlIHRvcCBvZiB0aGUgZm9jdXNlZCBzdGFjayBoYXMKICAgICAgKiBiZWVuIHJlc3VtZWQuIElmIHN0YWNrcyBhcmUgY2hhbmdpbmcgcG9zaXRpb24gdGhpcyB3aWxsIGhvbGQgdGhlIG9sZCBzdGFjayB1bnRpbCB0aGUgbmV3CkBAIC0zNTUsOSArMzcwLDcgQEAKICAgICAgKi8KICAgICBwcml2YXRlIExvY2tUYXNrTm90aWZ5IG1Mb2NrVGFza05vdGlmeTsKIAotICAgIGZpbmFsIEFycmF5TGlzdDxQZW5kaW5nQWN0aXZpdHlMYXVuY2g+IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gICAgLyoqIFVzZWQgdG8ga2VlcCByZXN1bWVUb3BBY3Rpdml0eUxvY2tlZCgpIGZyb20gYmVpbmcgZW50ZXJlZCByZWN1cnNpdmVseSAqLworICAgIC8qKiBVc2VkIHRvIGtlZXAgcmVzdW1lVG9wQWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQoKSBmcm9tIGJlaW5nIGVudGVyZWQgcmVjdXJzaXZlbHkgKi8KICAgICBib29sZWFuIGluUmVzdW1lVG9wQWN0aXZpdHk7CiAKICAgICAvLyB0ZW1wLiByZWN0cyB1c2VkIGR1cmluZyByZXNpemUgY2FsY3VsYXRpb24gc28gd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IGVhY2ggdGltZS4KQEAgLTM2Niw2ICszNzksNyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxDb25maWd1cmF0aW9uPiBtVG1wQ29uZmlncyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CiAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxSZWN0PiBtVG1wQm91bmRzID0gbmV3IFNwYXJzZUFycmF5PD4oKTsKKyAgICBwcml2YXRlIGZpbmFsIFNwYXJzZUFycmF5PFJlY3Q+IG1UbXBJbnNldEJvdW5kcyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CiAKICAgICAvLyBUaGUgZGVmYXVsdCBtaW5pbWFsIHNpemUgdGhhdCB3aWxsIGJlIHVzZWQgaWYgdGhlIGFjdGl2aXR5IGRvZXNuJ3Qgc3BlY2lmeSBpdHMgbWluaW1hbCBzaXplLgogICAgIC8vIEl0IHdpbGwgYmUgY2FsY3VsYXRlZCB3aGVuIHRoZSBkZWZhdWx0IGRpc3BsYXkgZ2V0cyBhZGRlZC4KQEAgLTM3NCw2ICszODgsMTYgQEAKICAgICAvLyBXaGV0aGVyIHRhc2tzIGhhdmUgbW92ZWQgYW5kIHdlIG5lZWQgdG8gcmFuayB0aGUgdGFza3MgYmVmb3JlIG5leHQgT09NIHNjb3JpbmcKICAgICBwcml2YXRlIGJvb2xlYW4gbVRhc2tMYXllcnNDaGFuZ2VkID0gdHJ1ZTsKIAorICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlNZXRyaWNzTG9nZ2VyIG1BY3Rpdml0eU1ldHJpY3NMb2dnZXI7CisKKyAgICBwcml2YXRlIGZpbmFsIFJlc2l6ZURvY2tlZFN0YWNrVGltZW91dCBtUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0OworCisgICAgc3RhdGljIGNsYXNzIEZpbmRUYXNrUmVzdWx0IHsKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgcjsKKyAgICAgICAgYm9vbGVhbiBtYXRjaGVkQnlSb290QWZmaW5pdHk7CisgICAgfQorICAgIHByaXZhdGUgZmluYWwgRmluZFRhc2tSZXN1bHQgbVRtcEZpbmRUYXNrUmVzdWx0ID0gbmV3IEZpbmRUYXNrUmVzdWx0KCk7CisKICAgICAvKioKICAgICAgKiBEZXNjcmlwdGlvbiBvZiBhIHJlcXVlc3QgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIHdoaWNoIGhhcyBiZWVuIGhlbGQKICAgICAgKiBkdWUgdG8gYXBwIHN3aXRjaGVzIGJlaW5nIGRpc2FibGVkLgpAQCAtNDEwLDYgKzQzNCw4IEBACiAgICAgICAgIG1TZXJ2aWNlID0gc2VydmljZTsKICAgICAgICAgbVJlY2VudFRhc2tzID0gcmVjZW50VGFza3M7CiAgICAgICAgIG1IYW5kbGVyID0gbmV3IEFjdGl2aXR5U3RhY2tTdXBlcnZpc29ySGFuZGxlcihtU2VydmljZS5tSGFuZGxlci5nZXRMb29wZXIoKSk7CisgICAgICAgIG1BY3Rpdml0eU1ldHJpY3NMb2dnZXIgPSBuZXcgQWN0aXZpdHlNZXRyaWNzTG9nZ2VyKHRoaXMsIG1TZXJ2aWNlLm1Db250ZXh0KTsKKyAgICAgICAgbVJlc2l6ZURvY2tlZFN0YWNrVGltZW91dCA9IG5ldyBSZXNpemVEb2NrZWRTdGFja1RpbWVvdXQoc2VydmljZSwgdGhpcywgbUhhbmRsZXIpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDcwLDggKzQ5Niw4IEBACiAgICAgICAgICAgICAgICAgY2FsY3VsYXRlRGVmYXVsdE1pbmltYWxTaXplT2ZSZXNpemVhYmxlVGFza3MoYWN0aXZpdHlEaXNwbGF5KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY3JlYXRlU3RhY2tPbkRpc3BsYXkoSE9NRV9TVEFDS19JRCwgRGlzcGxheS5ERUZBVUxUX0RJU1BMQVksIHRydWUpOwotICAgICAgICAgICAgbUhvbWVTdGFjayA9IG1Gb2N1c2VkU3RhY2sgPSBtTGFzdEZvY3VzZWRTdGFjayA9IGdldFN0YWNrKEhPTUVfU1RBQ0tfSUQpOworICAgICAgICAgICAgbUhvbWVTdGFjayA9IG1Gb2N1c2VkU3RhY2sgPSBtTGFzdEZvY3VzZWRTdGFjayA9CisgICAgICAgICAgICAgICAgICAgIGdldFN0YWNrKEhPTUVfU1RBQ0tfSUQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7CiAKICAgICAgICAgICAgIG1JbnB1dE1hbmFnZXJJbnRlcm5hbCA9IExvY2FsU2VydmljZXMuZ2V0U2VydmljZShJbnB1dE1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CiAgICAgICAgIH0KQEAgLTUxNSwxNiArNTQxLDMwIEBACiAgICAgICAgIHJldHVybiBzdGFjayA9PSBtSG9tZVN0YWNrLm1TdGFja3MuZ2V0KChtSG9tZVN0YWNrLm1TdGFja3Muc2l6ZSgpIC0gMSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Rm9jdXNTdGFjayhTdHJpbmcgcmVhc29uLCBBY3Rpdml0eVN0YWNrIGZvY3VzZWRTdGFjaykgewotICAgICAgICBtTGFzdEZvY3VzZWRTdGFjayA9IG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgIG1Gb2N1c2VkU3RhY2sgPSBmb2N1c2VkU3RhY2s7CisgICAgLyoqIE5PVEU6IFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHtAbGluayBBY3Rpdml0eVN0YWNrI21vdmVUb0Zyb250fSAqLworICAgIHZvaWQgc2V0Rm9jdXNTdGFja1VuY2hlY2tlZChTdHJpbmcgcmVhc29uLCBBY3Rpdml0eVN0YWNrIGZvY3VzQ2FuZGlkYXRlKSB7CisgICAgICAgIGlmICghZm9jdXNDYW5kaWRhdGUuaXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgLy8gVGhlIGZvY3VzIGNhbmRpZGF0ZSBpc24ndCBmb2N1c2FibGUuIE1vdmUgZm9jdXMgdG8gdGhlIHRvcCBzdGFjayB0aGF0IGlzIGZvY3VzYWJsZS4KKyAgICAgICAgICAgIGZvY3VzQ2FuZGlkYXRlID0gZm9jdXNDYW5kaWRhdGUuZ2V0TmV4dEZvY3VzYWJsZVN0YWNrTG9ja2VkKCk7CisgICAgICAgIH0KIAotICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbUZvY3VzZWRTdGFjaygKLSAgICAgICAgICAgICAgICBtQ3VycmVudFVzZXIsIG1Gb2N1c2VkU3RhY2sgPT0gbnVsbCA/IC0xIDogbUZvY3VzZWRTdGFjay5nZXRTdGFja0lkKCksCi0gICAgICAgICAgICAgICAgbUxhc3RGb2N1c2VkU3RhY2sgPT0gbnVsbCA/IC0xIDogbUxhc3RGb2N1c2VkU3RhY2suZ2V0U3RhY2tJZCgpLCByZWFzb24pOworICAgICAgICBpZiAoZm9jdXNDYW5kaWRhdGUgIT0gbUZvY3VzZWRTdGFjaykgeworICAgICAgICAgICAgbUxhc3RGb2N1c2VkU3RhY2sgPSBtRm9jdXNlZFN0YWNrOworICAgICAgICAgICAgbUZvY3VzZWRTdGFjayA9IGZvY3VzQ2FuZGlkYXRlOworCisgICAgICAgICAgICBFdmVudExvZ1RhZ3Mud3JpdGVBbUZvY3VzZWRTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRVc2VyLCBtRm9jdXNlZFN0YWNrID09IG51bGwgPyAtMSA6IG1Gb2N1c2VkU3RhY2suZ2V0U3RhY2tJZCgpLAorICAgICAgICAgICAgICAgICAgICBtTGFzdEZvY3VzZWRTdGFjayA9PSBudWxsID8gLTEgOiBtTGFzdEZvY3VzZWRTdGFjay5nZXRTdGFja0lkKCksIHJlYXNvbik7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gdG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgIGlmIChtU2VydmljZS5tRm9jdXNlZEFjdGl2aXR5ICE9IHIpIHsKKyAgICAgICAgICAgIC8vIFRoZSBmb2N1cyBhY3Rpdml0eSBzaG91bGQgYWx3YXlzIGJlIHRoZSB0b3AgYWN0aXZpdHkgaW4gdGhlIGZvY3VzZWQgc3RhY2suCisgICAgICAgICAgICAvLyBUaGVyZSB3aWxsIGJlIGNoYW9zIGFuZCBhbmFyY2h5IGlmIGl0IGlzbid0Li4uCisgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgcmVhc29uICsgIiBzZXRGb2N1c1N0YWNrIik7CisgICAgICAgIH0KIAogICAgICAgICBpZiAobVNlcnZpY2UubUJvb3RpbmcgfHwgIW1TZXJ2aWNlLm1Cb290ZWQpIHsKLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIgPSB0b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgIGlmIChyICE9IG51bGwgJiYgci5pZGxlKSB7CiAgICAgICAgICAgICAgICAgY2hlY2tGaW5pc2hCb290aW5nTG9ja2VkKCk7CiAgICAgICAgICAgICB9CkBAIC01NjksMTIgKzYwOSwxNCBAQAogCiAgICAgICAgIG1Ib21lU3RhY2subW92ZUhvbWVTdGFja1Rhc2tUb1RvcChob21lU3RhY2tUYXNrVHlwZSk7CiAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHIgPSBnZXRIb21lQWN0aXZpdHkoKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIG15UmVhc29uID0gcmVhc29uICsgIiByZXN1bWVIb21lU3RhY2tUYXNrIjsKKwogICAgICAgICAvLyBPbmx5IHJlc3VtZSBob21lIGFjdGl2aXR5IGlmIGlzbid0IGZpbmlzaGluZy4KICAgICAgICAgaWYgKHIgIT0gbnVsbCAmJiAhci5maW5pc2hpbmcpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLnNldEZvY3VzZWRBY3Rpdml0eUxvY2tlZChyLCByZWFzb24pOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQobUhvbWVTdGFjaywgcHJldiwgbnVsbCk7CisgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgbXlSZWFzb24pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKG1Ib21lU3RhY2ssIHByZXYsIG51bGwpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtU2VydmljZS5zdGFydEhvbWVBY3Rpdml0eUxvY2tlZChtQ3VycmVudFVzZXIsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBtU2VydmljZS5zdGFydEhvbWVBY3Rpdml0eUxvY2tlZChtQ3VycmVudFVzZXIsIG15UmVhc29uKTsKICAgICB9CiAKICAgICBUYXNrUmVjb3JkIGFueVRhc2tGb3JJZExvY2tlZChpbnQgaWQpIHsKQEAgLTg3MSw3ICs5MTMsNyBAQAogICAgICAgICBmaW5hbCBBcnJheUxpc3Q8QWN0aXZpdHlTdGFjaz4gc3RhY2tzID0gbUhvbWVTdGFjay5tU3RhY2tzOwogICAgICAgICBmb3IgKGludCBzdGFja05keCA9IHN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7CiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gc3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2sgIT0gZm9jdXNlZFN0YWNrICYmIGlzRnJvbnRTdGFjayhzdGFjaykpIHsKKyAgICAgICAgICAgIGlmIChzdGFjayAhPSBmb2N1c2VkU3RhY2sgJiYgaXNGcm9udFN0YWNrKHN0YWNrKSAmJiBzdGFjay5pc0ZvY3VzYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgciA9IHN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgICAgIGlmIChyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7CkBAIC05MjEsMjEgKzk2Myw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBBY3Rpdml0eUluZm8gcmVzb2x2ZUFjdGl2aXR5KEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsIGludCBzdGFydEZsYWdzLAotICAgICAgICAgICAgUHJvZmlsZXJJbmZvIHByb2ZpbGVySW5mbywgaW50IHVzZXJJZCkgewotICAgICAgICAvLyBDb2xsZWN0IGluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgb2YgdGhlIEludGVudC4KLSAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgUmVzb2x2ZUluZm8gckluZm8gPQotICAgICAgICAgICAgICAgIEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5yZXNvbHZlSW50ZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50LCByZXNvbHZlZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUZBVUxUX09OTFkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5TVE9DS19QTV9GTEFHUywgdXNlcklkKTsKLSAgICAgICAgICAgIGFJbmZvID0gckluZm8gIT0gbnVsbCA/IHJJbmZvLmFjdGl2aXR5SW5mbyA6IG51bGw7Ci0gICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhSW5mbyA9IG51bGw7Ci0gICAgICAgIH0KLQorICAgIEFjdGl2aXR5SW5mbyByZXNvbHZlQWN0aXZpdHkoSW50ZW50IGludGVudCwgUmVzb2x2ZUluZm8gckluZm8sIGludCBzdGFydEZsYWdzLAorICAgICAgICAgICAgUHJvZmlsZXJJbmZvIHByb2ZpbGVySW5mbykgeworICAgICAgICBmaW5hbCBBY3Rpdml0eUluZm8gYUluZm8gPSBySW5mbyAhPSBudWxsID8gckluZm8uYWN0aXZpdHlJbmZvIDogbnVsbDsKICAgICAgICAgaWYgKGFJbmZvICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBmb3VuZCB0YXJnZXQgYmFjayBpbnRvIHRoZSBpbnRlbnQsIGJlY2F1c2Ugbm93IHRoYXQKICAgICAgICAgICAgIC8vIHdlIGhhdmUgaXQgd2UgbmV2ZXIgd2FudCB0byBkbyB0aGlzIGFnYWluLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQpAQCAtOTYyLDI3MiArOTkyLDIwIEBACiAgICAgICAgIHJldHVybiBhSW5mbzsKICAgICB9CiAKLSAgICB2b2lkIHN0YXJ0SG9tZUFjdGl2aXR5KEludGVudCBpbnRlbnQsIEFjdGl2aXR5SW5mbyBhSW5mbywgU3RyaW5nIHJlYXNvbikgewotICAgICAgICBtb3ZlSG9tZVN0YWNrVGFza1RvVG9wKEhPTUVfQUNUSVZJVFlfVFlQRSwgcmVhc29uKTsKLSAgICAgICAgc3RhcnRBY3Rpdml0eUxvY2tlZChudWxsIC8qIGNhbGxlciAqLywgaW50ZW50LCBudWxsIC8qIHJlc29sdmVkVHlwZSAqLywgYUluZm8sCi0gICAgICAgICAgICAgICAgbnVsbCAvKiB2b2ljZVNlc3Npb24gKi8sIG51bGwgLyogdm9pY2VJbnRlcmFjdG9yICovLCBudWxsIC8qIHJlc3VsdFRvICovLAotICAgICAgICAgICAgICAgIG51bGwgLyogcmVzdWx0V2hvICovLCAwIC8qIHJlcXVlc3RDb2RlICovLCAwIC8qIGNhbGxpbmdQaWQgKi8sIDAgLyogY2FsbGluZ1VpZCAqLywKLSAgICAgICAgICAgICAgICBudWxsIC8qIGNhbGxpbmdQYWNrYWdlICovLCAwIC8qIHJlYWxDYWxsaW5nUGlkICovLCAwIC8qIHJlYWxDYWxsaW5nVWlkICovLAotICAgICAgICAgICAgICAgIDAgLyogc3RhcnRGbGFncyAqLywgbnVsbCAvKiBvcHRpb25zICovLCBmYWxzZSAvKiBpZ25vcmVUYXJnZXRTZWN1cml0eSAqLywKLSAgICAgICAgICAgICAgICBmYWxzZSAvKiBjb21wb25lbnRTcGVjaWZpZWQgKi8sCi0gICAgICAgICAgICAgICAgbnVsbCAvKiBvdXRBY3Rpdml0eSAqLywgbnVsbCAvKiBjb250YWluZXIgKi8sICBudWxsIC8qIGluVGFzayAqLyk7Ci0gICAgICAgIGlmIChpblJlc3VtZVRvcEFjdGl2aXR5KSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gcmVzdW1lIHNlY3Rpb24gYWxyZWFkeSwgaG9tZSBhY3Rpdml0eSB3aWxsIGJlIGluaXRpYWxpemVkLCBidXQgbm90Ci0gICAgICAgICAgICAvLyByZXN1bWVkICh0byBhdm9pZCByZWN1cnNpdmUgcmVzdW1lKSBhbmQgd2lsbCBzdGF5IHRoYXQgd2F5IHVudGlsIHNvbWV0aGluZyBwb2tlcyBpdAotICAgICAgICAgICAgLy8gYWdhaW4uIFdlIG5lZWQgdG8gc2NoZWR1bGUgYW5vdGhlciByZXN1bWUuCi0gICAgICAgICAgICBzY2hlZHVsZVJlc3VtZVRvcEFjdGl2aXRpZXMoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpbmFsIGludCBzdGFydEFjdGl2aXR5TWF5V2FpdChJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBpbnQgY2FsbGluZ1VpZCwKLSAgICAgICAgICAgIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwKLSAgICAgICAgICAgIElWb2ljZUludGVyYWN0aW9uU2Vzc2lvbiB2b2ljZVNlc3Npb24sIElWb2ljZUludGVyYWN0b3Igdm9pY2VJbnRlcmFjdG9yLAotICAgICAgICAgICAgSUJpbmRlciByZXN1bHRUbywgU3RyaW5nIHJlc3VsdFdobywgaW50IHJlcXVlc3RDb2RlLCBpbnQgc3RhcnRGbGFncywKLSAgICAgICAgICAgIFByb2ZpbGVySW5mbyBwcm9maWxlckluZm8sIFdhaXRSZXN1bHQgb3V0UmVzdWx0LCBDb25maWd1cmF0aW9uIGNvbmZpZywKLSAgICAgICAgICAgIEJ1bmRsZSBiT3B0aW9ucywgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgaW50IHVzZXJJZCwKLSAgICAgICAgICAgIElBY3Rpdml0eUNvbnRhaW5lciBpQ29udGFpbmVyLCBUYXNrUmVjb3JkIGluVGFzaykgewotICAgICAgICAvLyBSZWZ1c2UgcG9zc2libGUgbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKLSAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIGludGVudC5oYXNGaWxlRGVzY3JpcHRvcnMoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gSW50ZW50Iik7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbGVhbiBjb21wb25lbnRTcGVjaWZpZWQgPSBpbnRlbnQuZ2V0Q29tcG9uZW50KCkgIT0gbnVsbDsKLQotICAgICAgICAvLyBEb24ndCBtb2RpZnkgdGhlIGNsaWVudCdzIG9iamVjdCEKLSAgICAgICAgaW50ZW50ID0gbmV3IEludGVudChpbnRlbnQpOwotCi0gICAgICAgIC8vIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBvZiB0aGUgSW50ZW50LgotICAgICAgICBBY3Rpdml0eUluZm8gYUluZm8gPQotICAgICAgICAgICAgICAgIHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZSwgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvLCB1c2VySWQpOwotCi0gICAgICAgIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zID0gQWN0aXZpdHlPcHRpb25zLmZyb21CdW5kbGUoYk9wdGlvbnMpOwotICAgICAgICBBY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIgPSAoQWN0aXZpdHlDb250YWluZXIpaUNvbnRhaW5lcjsKLSAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsICYmIGNvbnRhaW5lci5tUGFyZW50QWN0aXZpdHkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubVBhcmVudEFjdGl2aXR5LnN0YXRlICE9IFJFU1VNRUQpIHsKLSAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3RhcnQgYSBjaGlsZCBhY3Rpdml0eSBpZiB0aGUgcGFyZW50IGlzIG5vdCByZXN1bWVkLgotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfQ0FOQ0VMRUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcmVhbENhbGxpbmdQaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOwotICAgICAgICAgICAgZmluYWwgaW50IHJlYWxDYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgICAgIGludCBjYWxsaW5nUGlkOwotICAgICAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgewotICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSAtMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGVyID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gY2FsbGluZ1VpZCA9IC0xOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrOwotICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBudWxsIHx8IGNvbnRhaW5lci5tU3RhY2suaXNPbkhvbWVEaXNwbGF5KCkpIHsKLSAgICAgICAgICAgICAgICBzdGFjayA9IG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YWNrID0gY29udGFpbmVyLm1TdGFjazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlID0gY29uZmlnICE9IG51bGwgJiYgbVNlcnZpY2UubUNvbmZpZ3VyYXRpb24uZGlmZihjb25maWcpICE9IDA7Ci0gICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBR19DT05GSUdVUkFUSU9OLAotICAgICAgICAgICAgICAgICAgICAiU3RhcnRpbmcgYWN0aXZpdHkgd2hlbiBjb25maWcgd2lsbCBjaGFuZ2UgPSAiICsgc3RhY2subUNvbmZpZ1dpbGxDaGFuZ2UpOwotCi0gICAgICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwotCi0gICAgICAgICAgICBpZiAoYUluZm8gIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAoYUluZm8uYXBwbGljYXRpb25JbmZvLnByaXZhdGVGbGFncwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX0NBTlRfU0FWRV9TVEFURSkgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgbWF5IGJlIGEgaGVhdnktd2VpZ2h0IHByb2Nlc3MhICBDaGVjayB0byBzZWUgaWYgd2UgYWxyZWFkeQotICAgICAgICAgICAgICAgIC8vIGhhdmUgYW5vdGhlciwgZGlmZmVyZW50IGhlYXZ5LXdlaWdodCBwcm9jZXNzIHJ1bm5pbmcuCi0gICAgICAgICAgICAgICAgaWYgKGFJbmZvLnByb2Nlc3NOYW1lLmVxdWFscyhhSW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtU2VydmljZS5tSGVhdnlXZWlnaHRQcm9jZXNzICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVNlcnZpY2UubUhlYXZ5V2VpZ2h0UHJvY2Vzcy5pbmZvLnVpZCAhPSBhSW5mby5hcHBsaWNhdGlvbkluZm8udWlkIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIW1TZXJ2aWNlLm1IZWF2eVdlaWdodFByb2Nlc3MucHJvY2Vzc05hbWUuZXF1YWxzKGFJbmZvLnByb2Nlc3NOYW1lKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBDYWxsaW5nVWlkID0gY2FsbGluZ1VpZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgY2FsbGVyQXBwID0gbVNlcnZpY2UuZ2V0UmVjb3JkRm9yQXBwTG9ja2VkKGNhbGxlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlckFwcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQgPSBjYWxsZXJBcHAuaW5mby51aWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBmaW5kIGFwcCBmb3IgY2FsbGVyICIgKyBjYWxsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIChwaWQ9IiArIGNhbGxpbmdQaWQgKyAiKSB3aGVuIHN0YXJ0aW5nOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfUEVSTUlTU0lPTl9ERU5JRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBJSW50ZW50U2VuZGVyIHRhcmdldCA9IG1TZXJ2aWNlLmdldEludGVudFNlbmRlckxvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFksICJhbmRyb2lkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ2FsbGluZ1VpZCwgdXNlcklkLCBudWxsLCBudWxsLCAwLCBuZXcgSW50ZW50W10geyBpbnRlbnQgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgcmVzb2x2ZWRUeXBlIH0sIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEludGVudCBuZXdJbnRlbnQgPSBuZXcgSW50ZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdENvZGUgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyByZXF1ZXN0aW5nIGEgcmVzdWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0hBU19SRVNVTFQsIHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfSU5URU5ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1TZXJ2aWNlLm1IZWF2eVdlaWdodFByb2Nlc3MuYWN0aXZpdGllcy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgaGlzdCA9IG1TZXJ2aWNlLm1IZWF2eVdlaWdodFByb2Nlc3MuYWN0aXZpdGllcy5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfQ1VSX0FQUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3QucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0NVUl9UQVNLLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdC50YXNrLnRhc2tJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LktFWV9ORVdfQVBQLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSW5mby5wYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0RmxhZ3MoaW50ZW50LmdldEZsYWdzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnNldENsYXNzTmFtZSgiYW5kcm9pZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gbmV3SW50ZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U3BlY2lmaWVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZUluZm8gckluZm8gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkucmVzb2x2ZUludGVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVGQVVMVF9PTkxZCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLlNUT0NLX1BNX0ZMQUdTLCB1c2VySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvID0gckluZm8gIT0gbnVsbCA/IHJJbmZvLmFjdGl2aXR5SW5mbyA6IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBtU2VydmljZS5nZXRBY3Rpdml0eUluZm9Gb3JVc2VyKGFJbmZvLCB1c2VySWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhSW5mbyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCByZXMgPSBzdGFydEFjdGl2aXR5TG9ja2VkKGNhbGxlciwgaW50ZW50LCByZXNvbHZlZFR5cGUsIGFJbmZvLAotICAgICAgICAgICAgICAgICAgICB2b2ljZVNlc3Npb24sIHZvaWNlSW50ZXJhY3RvciwgcmVzdWx0VG8sIHJlc3VsdFdobywKLSAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvZGUsIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICByZWFsQ2FsbGluZ1BpZCwgcmVhbENhbGxpbmdVaWQsIHN0YXJ0RmxhZ3MsIG9wdGlvbnMsIGlnbm9yZVRhcmdldFNlY3VyaXR5LAotICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTcGVjaWZpZWQsIG51bGwsIGNvbnRhaW5lciwgaW5UYXNrKTsKLQotICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKLQotICAgICAgICAgICAgaWYgKHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBhbHNvIHdhbnRzIHRvIHN3aXRjaCB0byBhIG5ldyBjb25maWd1cmF0aW9uLAotICAgICAgICAgICAgICAgIC8vIGRvIHNvIG5vdy4gIFRoaXMgYWxsb3dzIGEgY2xlYW4gc3dpdGNoLCBhcyB3ZSBhcmUgd2FpdGluZwotICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgY3VycmVudCBhY3Rpdml0eSB0byBwYXVzZSAoc28gd2Ugd2lsbCBub3QgZGVzdHJveQotICAgICAgICAgICAgICAgIC8vIGl0KSwgYW5kIGhhdmUgbm90IHlldCBzdGFydGVkIHRoZSBuZXh0IGFjdGl2aXR5LgotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmVuZm9yY2VDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQ0hBTkdFX0NPTkZJR1VSQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlQ29uZmlndXJhdGlvbigpIik7Ci0gICAgICAgICAgICAgICAgc3RhY2subUNvbmZpZ1dpbGxDaGFuZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBR19DT05GSUdVUkFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0aW5nIHRvIG5ldyBjb25maWd1cmF0aW9uIGFmdGVyIHN0YXJ0aW5nIGFjdGl2aXR5LiIpOwotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLnVwZGF0ZUNvbmZpZ3VyYXRpb25Mb2NrZWQoY29uZmlnLCBudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvdXRSZXN1bHQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG91dFJlc3VsdC5yZXN1bHQgPSByZXM7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgICAgICBtV2FpdGluZ0FjdGl2aXR5TGF1bmNoZWQuYWRkKG91dFJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2Uud2FpdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghb3V0UmVzdWx0LnRpbWVvdXQgJiYgb3V0UmVzdWx0LndobyA9PSBudWxsKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVCkgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyLm5vd1Zpc2libGUgJiYgci5zdGF0ZSA9PSBSRVNVTUVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGltZW91dCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LndobyA9IG5ldyBDb21wb25lbnROYW1lKHIuaW5mby5wYWNrYWdlTmFtZSwgci5pbmZvLm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRvdGFsVGltZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGhpc1RpbWUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRoaXNUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtV2FpdGluZ0FjdGl2aXR5VmlzaWJsZS5hZGQob3V0UmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS53YWl0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFvdXRSZXN1bHQudGltZW91dCAmJiBvdXRSZXN1bHQud2hvID09IG51bGwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdGllcyhJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBpbnQgY2FsbGluZ1VpZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAotICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgU3RyaW5nW10gcmVzb2x2ZWRUeXBlcywgSUJpbmRlciByZXN1bHRUbywKLSAgICAgICAgICAgIEJ1bmRsZSBiT3B0aW9ucywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoaW50ZW50cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludGVudHMgaXMgbnVsbCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXNvbHZlZFR5cGVzID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigicmVzb2x2ZWRUeXBlcyBpcyBudWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGludGVudHMubGVuZ3RoICE9IHJlc29sdmVkVHlwZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnRlbnRzIGFyZSBsZW5ndGggZGlmZmVyZW50IHRoYW4gcmVzb2x2ZWRUeXBlcyIpOwotICAgICAgICB9Ci0KLQotICAgICAgICBpbnQgY2FsbGluZ1BpZDsKLSAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgewotICAgICAgICAgICAgY2FsbGluZ1BpZCA9IC0xOwotICAgICAgICB9IGVsc2UgaWYgKGNhbGxlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKLSAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxpbmdVaWQgPSAtMTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgIFJlc29sdmVJbmZvIHJlc29sdmVJbnRlbnQoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IHVzZXJJZCkgewogICAgICAgICB0cnkgewotICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgewotICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkW10gb3V0QWN0aXZpdHkgPSBuZXcgQWN0aXZpdHlSZWNvcmRbMV07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGludGVudHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGludGVudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBSZWZ1c2UgcG9zc2libGUgbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKLSAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIGludGVudC5oYXNGaWxlRGVzY3JpcHRvcnMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gSW50ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBvbmVudFNwZWNpZmllZCA9IGludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG1vZGlmeSB0aGUgY2xpZW50J3Mgb2JqZWN0IQotICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KGludGVudCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIHRoZSBJbnRlbnQuCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZXNbaV0sIDAsIG51bGwsIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5ldywgY2hlY2sgaWYgdGhpcyBpcyBjb3JyZWN0Ci0gICAgICAgICAgICAgICAgICAgIGFJbmZvID0gbVNlcnZpY2UuZ2V0QWN0aXZpdHlJbmZvRm9yVXNlcihhSW5mbywgdXNlcklkKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYUluZm8gIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhSW5mby5hcHBsaWNhdGlvbkluZm8ucHJpdmF0ZUZsYWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfQ0FOVF9TQVZFX1NUQVRFKSAgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZMQUdfQ0FOVF9TQVZFX1NUQVRFIG5vdCBzdXBwb3J0ZWQgaGVyZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMgPSBBY3Rpdml0eU9wdGlvbnMuZnJvbUJ1bmRsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09IGludGVudHMubGVuZ3RoIC0gMSA/IGJPcHRpb25zIDogbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXMgPSBzdGFydEFjdGl2aXR5TG9ja2VkKGNhbGxlciwgaW50ZW50LCByZXNvbHZlZFR5cGVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvLCBudWxsLCBudWxsLCByZXN1bHRUbywgbnVsbCwgLTEsIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1BhY2thZ2UsIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgb3B0aW9ucywgZmFsc2UsIGNvbXBvbmVudFNwZWNpZmllZCwgb3V0QWN0aXZpdHksIG51bGwsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRvID0gb3V0QWN0aXZpdHlbMF0gIT0gbnVsbCA/IG91dEFjdGl2aXR5WzBdLmFwcFRva2VuIDogbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOworICAgICAgICAgICAgcmV0dXJuIEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5yZXNvbHZlSW50ZW50KGludGVudCwgcmVzb2x2ZWRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFRkFVTFRfT05MWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5TVE9DS19QTV9GTEFHUywgdXNlcklkKTsKKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CiAKLSAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTOworICAgIEFjdGl2aXR5SW5mbyByZXNvbHZlQWN0aXZpdHkoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IHN0YXJ0RmxhZ3MsCisgICAgICAgICAgICBQcm9maWxlckluZm8gcHJvZmlsZXJJbmZvLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGZpbmFsIFJlc29sdmVJbmZvIHJJbmZvID0gcmVzb2x2ZUludGVudChpbnRlbnQsIHJlc29sdmVkVHlwZSwgdXNlcklkKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJJbmZvLCBzdGFydEZsYWdzLCBwcm9maWxlckluZm8pOwogICAgIH0KIAogICAgIGZpbmFsIGJvb2xlYW4gcmVhbFN0YXJ0QWN0aXZpdHlMb2NrZWQoQWN0aXZpdHlSZWNvcmQgciwKQEAgLTEzOTAsMTQgKzExNjgsMTIgQEAKICAgICAgICAgICAgIC8vIGEgcmVzdW1lLgogICAgICAgICAgICAgc3RhY2subWluaW1hbFJlc3VtZUFjdGl2aXR5TG9ja2VkKHIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhpcyBhY3Rpdml0eSBpcyBub3Qgc3RhcnRpbmcgaW4gdGhlIHJlc3VtZWQgc3RhdGUuLi4gd2hpY2gKLSAgICAgICAgICAgIC8vIHNob3VsZCBsb29rIGxpa2Ugd2UgYXNrZWQgaXQgdG8gcGF1c2Urc3RvcCAoYnV0IHJlbWFpbiB2aXNpYmxlKSwKLSAgICAgICAgICAgIC8vIGFuZCBpdCBoYXMgZG9uZSBzbyBhbmQgcmVwb3J0ZWQgYmFjayB0aGUgY3VycmVudCBpY2ljbGUgYW5kCi0gICAgICAgICAgICAvLyBvdGhlciBzdGF0ZS4KKyAgICAgICAgICAgIC8vIFRoaXMgYWN0aXZpdHkgaXMgbm90IHN0YXJ0aW5nIGluIHRoZSByZXN1bWVkIHN0YXRlLi4uIHdoaWNoIHNob3VsZCBsb29rIGxpa2Ugd2UgYXNrZWQKKyAgICAgICAgICAgIC8vIGl0IHRvIHBhdXNlK3N0b3AgKGJ1dCByZW1haW4gdmlzaWJsZSksIGFuZCBpdCBoYXMgZG9uZSBzbyBhbmQgcmVwb3J0ZWQgYmFjayB0aGUKKyAgICAgICAgICAgIC8vIGN1cnJlbnQgaWNpY2xlIGFuZCBvdGhlciBzdGF0ZS4KICAgICAgICAgICAgIGlmIChERUJVR19TVEFURVMpIFNsb2cudihUQUdfU1RBVEVTLAotICAgICAgICAgICAgICAgICAgICAiTW92aW5nIHRvIFNUT1BQRUQ6ICIgKyByICsgIiAoc3RhcnRpbmcgaW4gc3RvcHBlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgIHIuc3RhdGUgPSBTVE9QUEVEOwotICAgICAgICAgICAgci5zdG9wcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIk1vdmluZyB0byBQQVVTRUQ6ICIgKyByICsgIiAoc3RhcnRpbmcgaW4gcGF1c2VkIHN0YXRlKSIpOworICAgICAgICAgICAgci5zdGF0ZSA9IFBBVVNFRDsKICAgICAgICAgfQogCiAgICAgICAgIC8vIExhdW5jaCB0aGUgbmV3IHZlcnNpb24gc2V0dXAgc2NyZWVuIGlmIG5lZWRlZC4gIFdlIGRvIHRoaXMgLWFmdGVyLQpAQCAtMTQ0OSwzNTkgKzEyMjUsNjcgQEAKICAgICAgICAgICAgICAgICAiYWN0aXZpdHkiLCByLmludGVudC5nZXRDb21wb25lbnQoKSwgZmFsc2UsIGZhbHNlLCB0cnVlKTsKICAgICB9CiAKLSAgICBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eUxvY2tlZChJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLAotICAgICAgICAgICAgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgQWN0aXZpdHlJbmZvIGFJbmZvLAotICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IsCi0gICAgICAgICAgICBJQmluZGVyIHJlc3VsdFRvLCBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsCi0gICAgICAgICAgICBpbnQgY2FsbGluZ1BpZCwgaW50IGNhbGxpbmdVaWQsIFN0cmluZyBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgIGludCByZWFsQ2FsbGluZ1BpZCwgaW50IHJlYWxDYWxsaW5nVWlkLCBpbnQgc3RhcnRGbGFncywgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMsCi0gICAgICAgICAgICBib29sZWFuIGlnbm9yZVRhcmdldFNlY3VyaXR5LCBib29sZWFuIGNvbXBvbmVudFNwZWNpZmllZCwgQWN0aXZpdHlSZWNvcmRbXSBvdXRBY3Rpdml0eSwKLSAgICAgICAgICAgIEFjdGl2aXR5Q29udGFpbmVyIGNvbnRhaW5lciwgVGFza1JlY29yZCBpblRhc2spIHsKLSAgICAgICAgaW50IGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTOwotCi0gICAgICAgIFByb2Nlc3NSZWNvcmQgY2FsbGVyQXBwID0gbnVsbDsKLSAgICAgICAgaWYgKGNhbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBjYWxsZXJBcHAgPSBtU2VydmljZS5nZXRSZWNvcmRGb3JBcHBMb2NrZWQoY2FsbGVyKTsKLSAgICAgICAgICAgIGlmIChjYWxsZXJBcHAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSBjYWxsZXJBcHAucGlkOwotICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBjYWxsZXJBcHAuaW5mby51aWQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJVbmFibGUgdG8gZmluZCBhcHAgZm9yIGNhbGxlciAiICsgY2FsbGVyCi0gICAgICAgICAgICAgICAgICAgICAgKyAiIChwaWQ9IiArIGNhbGxpbmdQaWQgKyAiKSB3aGVuIHN0YXJ0aW5nOiAiCi0gICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOwotICAgICAgICAgICAgfQorICAgIGJvb2xlYW4gY2hlY2tTdGFydEFueUFjdGl2aXR5UGVybWlzc2lvbihJbnRlbnQgaW50ZW50LCBBY3Rpdml0eUluZm8gYUluZm8sCisgICAgICAgICAgICBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsIGludCBjYWxsaW5nUGlkLCBpbnQgY2FsbGluZ1VpZCwKKyAgICAgICAgICAgIFN0cmluZyBjYWxsaW5nUGFja2FnZSwgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgUHJvY2Vzc1JlY29yZCBjYWxsZXJBcHAsCisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByZXN1bHRSZWNvcmQsIEFjdGl2aXR5U3RhY2sgcmVzdWx0U3RhY2spIHsKKyAgICAgICAgZmluYWwgaW50IHN0YXJ0QW55UGVybSA9IG1TZXJ2aWNlLmNoZWNrUGVybWlzc2lvbihTVEFSVF9BTllfQUNUSVZJVFksIGNhbGxpbmdQaWQsCisgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCk7CisgICAgICAgIGlmIChzdGFydEFueVBlcm0gPT0gIFBFUk1JU1NJT05fR1JBTlRFRCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gYUluZm8gIT0gbnVsbCA/IFVzZXJIYW5kbGUuZ2V0VXNlcklkKGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQpIDogMDsKLQotICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBTbG9nLmkoVEFHLCAiU1RBUlQgdSIgKyB1c2VySWQgKyAiIHsiICsgaW50ZW50LnRvU2hvcnRTdHJpbmcodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi0gICAgICAgICAgICAgICAgICAgICsgIn0gZnJvbSB1aWQgIiArIGNhbGxpbmdVaWQKLSAgICAgICAgICAgICAgICAgICAgKyAiIG9uIGRpc3BsYXkgIiArIChjb250YWluZXIgPT0gbnVsbCA/IChtRm9jdXNlZFN0YWNrID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZIDogbUZvY3VzZWRTdGFjay5tRGlzcGxheUlkKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tRGlzcGxheUlkKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQWN0aXZpdHlSZWNvcmQgc291cmNlUmVjb3JkID0gbnVsbDsKLSAgICAgICAgQWN0aXZpdHlSZWNvcmQgcmVzdWx0UmVjb3JkID0gbnVsbDsKLSAgICAgICAgaWYgKHJlc3VsdFRvICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNvdXJjZVJlY29yZCA9IGlzSW5BbnlTdGFja0xvY2tlZChyZXN1bHRUbyk7Ci0gICAgICAgICAgICBpZiAoREVCVUdfUkVTVUxUUykgU2xvZy52KFRBR19SRVNVTFRTLAotICAgICAgICAgICAgICAgICAgICAiV2lsbCBzZW5kIHJlc3VsdCB0byAiICsgcmVzdWx0VG8gKyAiICIgKyBzb3VyY2VSZWNvcmQpOwotICAgICAgICAgICAgaWYgKHNvdXJjZVJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RDb2RlID49IDAgJiYgIXNvdXJjZVJlY29yZC5maW5pc2hpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gc291cmNlUmVjb3JkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCBsYXVuY2hGbGFncyA9IGludGVudC5nZXRGbGFncygpOwotCi0gICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9GT1JXQVJEX1JFU1VMVCkgIT0gMCAmJiBzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gVHJhbnNmZXIgdGhlIHJlc3VsdCB0YXJnZXQgZnJvbSB0aGUgc291cmNlIGFjdGl2aXR5IHRvIHRoZSBuZXcKLSAgICAgICAgICAgIC8vIG9uZSBiZWluZyBzdGFydGVkLCBpbmNsdWRpbmcgYW55IGZhaWx1cmVzLgotICAgICAgICAgICAgaWYgKHJlcXVlc3RDb2RlID49IDApIHsKLSAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9GT1JXQVJEX0FORF9SRVFVRVNUX0NPTkZMSUNUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gc291cmNlUmVjb3JkLnJlc3VsdFRvOwotICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsICYmICFyZXN1bHRSZWNvcmQuaXNJblN0YWNrTG9ja2VkKCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0V2hvID0gc291cmNlUmVjb3JkLnJlc3VsdFdobzsKLSAgICAgICAgICAgIHJlcXVlc3RDb2RlID0gc291cmNlUmVjb3JkLnJlcXVlc3RDb2RlOwotICAgICAgICAgICAgc291cmNlUmVjb3JkLnJlc3VsdFRvID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZC5yZW1vdmVSZXN1bHRzTG9ja2VkKHNvdXJjZVJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc291cmNlUmVjb3JkLmxhdW5jaGVkRnJvbVVpZCA9PSBjYWxsaW5nVWlkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIG5ldyBhY3Rpdml0eSBpcyBiZWluZyBsYXVuY2hlZCBmcm9tIHRoZSBzYW1lIHVpZCBhcyB0aGUgcHJldmlvdXMKLSAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eSBpbiB0aGUgZmxvdywgYW5kIGFza2luZyB0byBmb3J3YXJkIGl0cyByZXN1bHQgYmFjayB0byB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmV2aW91cy4gIEluIHRoaXMgY2FzZSB0aGUgYWN0aXZpdHkgaXMgc2VydmluZyBhcyBhIHRyYW1wb2xpbmUgYmV0d2VlbgotICAgICAgICAgICAgICAgIC8vIHRoZSB0d28sIHNvIHdlIGFsc28gd2FudCB0byB1cGRhdGUgaXRzIGxhdW5jaGVkRnJvbVBhY2thZ2UgdG8gYmUgdGhlCi0gICAgICAgICAgICAgICAgLy8gc2FtZSBhcyB0aGUgcHJldmlvdXMgYWN0aXZpdHkuICBOb3RlIHRoYXQgdGhpcyBpcyBzYWZlLCBzaW5jZSB3ZSBrbm93Ci0gICAgICAgICAgICAgICAgLy8gdGhlc2UgdHdvIHBhY2thZ2VzIGNvbWUgZnJvbSB0aGUgc2FtZSB1aWQ7IHRoZSBjYWxsZXIgY291bGQganVzdCBhcwotICAgICAgICAgICAgICAgIC8vIHdlbGwgaGF2ZSBzdXBwbGllZCB0aGF0IHNhbWUgcGFja2FnZSBuYW1lIGl0c2VsZi4gIFRoaXMgc3BlY2lmaWFsbHkKLSAgICAgICAgICAgICAgICAvLyBkZWFscyB3aXRoIHRoZSBjYXNlIG9mIGFuIGludGVudCBwaWNrZXIvY2hvb3NlciBiZWluZyBsYXVuY2hlZCBpbiB0aGUgYXBwCi0gICAgICAgICAgICAgICAgLy8gZmxvdyB0byByZWRpcmVjdCB0byBhbiBhY3Rpdml0eSBwaWNrZWQgYnkgdGhlIHVzZXIsIHdoZXJlIHdlIHdhbnQgdGhlIGZpbmFsCi0gICAgICAgICAgICAgICAgLy8gYWN0aXZpdHkgdG8gY29uc2lkZXIgaXQgdG8gaGF2ZSBiZWVuIGxhdW5jaGVkIGJ5IHRoZSBwcmV2aW91cyBhcHAgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgY2FsbGluZ1BhY2thZ2UgPSBzb3VyY2VSZWNvcmQubGF1bmNoZWRGcm9tUGFja2FnZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgaW50ZW50LmdldENvbXBvbmVudCgpID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgYSBjbGFzcyB0aGF0IGNhbiBoYW5kbGUgdGhlIGdpdmVuIEludGVudC4KLSAgICAgICAgICAgIC8vIFRoYXQncyB0aGUgZW5kIG9mIHRoYXQhCi0gICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfSU5URU5UX05PVF9SRVNPTFZFRDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgYUluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gV2UgY291bGRuJ3QgZmluZCB0aGUgc3BlY2lmaWMgY2xhc3Mgc3BlY2lmaWVkIGluIHRoZSBJbnRlbnQuCi0gICAgICAgICAgICAvLyBBbHNvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCi0gICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfQ0xBU1NfTk9UX0ZPVU5EOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUyAmJiBzb3VyY2VSZWNvcmQgIT0gbnVsbAotICAgICAgICAgICAgICAgICYmIHNvdXJjZVJlY29yZC50YXNrLnZvaWNlU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGFzIHBhcnQgb2YgYSB2b2ljZSBzZXNzaW9uLCB3ZSBuZWVkCi0gICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCBpdCBpcyBzYWZlIHRvIGRvIHNvLiAgSWYgdGhlIHVwY29taW5nIGFjdGl2aXR5IHdpbGwgYWxzbwotICAgICAgICAgICAgLy8gYmUgcGFydCBvZiB0aGUgdm9pY2Ugc2Vzc2lvbiwgd2UgY2FuIG9ubHkgbGF1bmNoIGl0IGlmIGl0IGhhcyBleHBsaWNpdGx5Ci0gICAgICAgICAgICAvLyBzYWlkIGl0IHN1cHBvcnRzIHRoZSBWT0lDRSBjYXRlZ29yeSwgb3IgaXQgaXMgYSBwYXJ0IG9mIHRoZSBjYWxsaW5nIGFwcC4KLSAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMAotICAgICAgICAgICAgICAgICAgICAmJiBzb3VyY2VSZWNvcmQuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkICE9IGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX1ZPSUNFKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuYWN0aXZpdHlTdXBwb3J0c0ludGVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0Q29tcG9uZW50KCksIGludGVudCwgcmVzb2x2ZWRUeXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaW4gY3VycmVudCB2b2ljZSB0YXNrIGRvZXMgbm90IHN1cHBvcnQgdm9pY2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWx1cmUgY2hlY2tpbmcgdm9pY2UgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9OT1RfVk9JQ0VfQ09NUEFUSUJMRTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIHZvaWNlU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgY2FsbGVyIGlzIHN0YXJ0aW5nIGEgbmV3IHZvaWNlIHNlc3Npb24sIGp1c3QgbWFrZSBzdXJlIHRoZSB0YXJnZXQKLSAgICAgICAgICAgIC8vIGlzIGFjdHVhbGx5IGFsbG93aW5nIGl0IHRvIHJ1biB0aGlzIHdheS4KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuYWN0aXZpdHlTdXBwb3J0c0ludGVudChpbnRlbnQuZ2V0Q29tcG9uZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIHJlc29sdmVkVHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWN0aXZpdHkgYmVpbmcgc3RhcnRlZCBpbiBuZXcgdm9pY2UgdGFzayBkb2VzIG5vdCBzdXBwb3J0OiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQpOwotICAgICAgICAgICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfTk9UX1ZPSUNFX0NPTVBBVElCTEU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbHVyZSBjaGVja2luZyB2b2ljZSBjYXBhYmlsaXRpZXMiLCBlKTsKLSAgICAgICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfTk9UX1ZPSUNFX0NPTVBBVElCTEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHJlc3VsdFN0YWNrID0gcmVzdWx0UmVjb3JkID09IG51bGwgPyBudWxsIDogcmVzdWx0UmVjb3JkLnRhc2suc3RhY2s7Ci0KLSAgICAgICAgaWYgKGVyciAhPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUykgeworICAgICAgICBmaW5hbCBpbnQgY29tcG9uZW50UmVzdHJpY3Rpb24gPSBnZXRDb21wb25lbnRSZXN0cmljdGlvbkZvckNhbGxpbmdQYWNrYWdlKAorICAgICAgICAgICAgICAgIGFJbmZvLCBjYWxsaW5nUGFja2FnZSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgaWdub3JlVGFyZ2V0U2VjdXJpdHkpOworICAgICAgICBmaW5hbCBpbnQgYWN0aW9uUmVzdHJpY3Rpb24gPSBnZXRBY3Rpb25SZXN0cmljdGlvbkZvckNhbGxpbmdQYWNrYWdlKAorICAgICAgICAgICAgICAgIGludGVudC5nZXRBY3Rpb24oKSwgY2FsbGluZ1BhY2thZ2UsIGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQpOworICAgICAgICBpZiAoY29tcG9uZW50UmVzdHJpY3Rpb24gPT0gQUNUSVZJVFlfUkVTVFJJQ1RJT05fUEVSTUlTU0lPTgorICAgICAgICAgICAgICAgIHx8IGFjdGlvblJlc3RyaWN0aW9uID09IEFDVElWSVRZX1JFU1RSSUNUSU9OX1BFUk1JU1NJT04pIHsKICAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJlc3VsdFN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLAotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gYWJvcnQgPSBmYWxzZTsKLQotICAgICAgICBmaW5hbCBpbnQgc3RhcnRBbnlQZXJtID0gbVNlcnZpY2UuY2hlY2tQZXJtaXNzaW9uKAotICAgICAgICAgICAgICAgIFNUQVJUX0FOWV9BQ1RJVklUWSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCk7Ci0KLSAgICAgICAgaWYgKHN0YXJ0QW55UGVybSAhPSBQRVJNSVNTSU9OX0dSQU5URUQpIHsKLSAgICAgICAgICAgIGZpbmFsIGludCBjb21wb25lbnRSZXN0cmljdGlvbiA9IGdldENvbXBvbmVudFJlc3RyaWN0aW9uRm9yQ2FsbGluZ1BhY2thZ2UoCi0gICAgICAgICAgICAgICAgICAgIGFJbmZvLCBjYWxsaW5nUGFja2FnZSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgaWdub3JlVGFyZ2V0U2VjdXJpdHkpOwotICAgICAgICAgICAgZmluYWwgaW50IGFjdGlvblJlc3RyaWN0aW9uID0gZ2V0QWN0aW9uUmVzdHJpY3Rpb25Gb3JDYWxsaW5nUGFja2FnZSgKLSAgICAgICAgICAgICAgICAgICAgaW50ZW50LmdldEFjdGlvbigpLCBjYWxsaW5nUGFja2FnZSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCk7Ci0KLSAgICAgICAgICAgIGlmIChjb21wb25lbnRSZXN0cmljdGlvbiA9PSBBQ1RJVklUWV9SRVNUUklDVElPTl9QRVJNSVNTSU9OCi0gICAgICAgICAgICAgICAgICAgIHx8IGFjdGlvblJlc3RyaWN0aW9uID09IEFDVElWSVRZX1JFU1RSSUNUSU9OX1BFUk1JU1NJT04pIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0UmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0U3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnOwotICAgICAgICAgICAgICAgIGlmIChhY3Rpb25SZXN0cmljdGlvbiA9PSBBQ1RJVklUWV9SRVNUUklDVElPTl9QRVJNSVNTSU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRpbmcgIiArIGludGVudC50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gIiArIGNhbGxlckFwcCArICIgKHBpZD0iICsgY2FsbGluZ1BpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBjYWxsaW5nVWlkICsgIikiICsgIiB3aXRoIHJldm9rZWQgcGVybWlzc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBBQ1RJT05fVE9fUlVOVElNRV9QRVJNSVNTSU9OLmdldChpbnRlbnQuZ2V0QWN0aW9uKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFJbmZvLmV4cG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRpbmcgIiArIGludGVudC50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gIiArIGNhbGxlckFwcCArICIgKHBpZD0iICsgY2FsbGluZ1BpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBjYWxsaW5nVWlkICsgIikiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG5vdCBleHBvcnRlZCBmcm9tIHVpZCAiICsgYUluZm8uYXBwbGljYXRpb25JbmZvLnVpZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IHN0YXJ0aW5nICIgKyBpbnRlbnQudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBjYWxsZXJBcHAgKyAiIChwaWQ9IiArIGNhbGxpbmdQaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgY2FsbGluZ1VpZCArICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZXF1aXJlcyAiICsgYUluZm8ucGVybWlzc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgbXNnKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGFjdGlvblJlc3RyaWN0aW9uID09IEFDVElWSVRZX1JFU1RSSUNUSU9OX0FQUE9QKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiQXBwb3AgRGVuaWFsOiBzdGFydGluZyAiICsgaW50ZW50LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBjYWxsZXJBcHAgKyAiIChwaWQ9IiArIGNhbGxpbmdQaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBjYWxsaW5nVWlkICsgIikiCi0gICAgICAgICAgICAgICAgICAgICAgICArICIgcmVxdWlyZXMgIiArIEFwcE9wc01hbmFnZXIucGVybWlzc2lvblRvT3AoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVElPTl9UT19SVU5USU1FX1BFUk1JU1NJT04uZ2V0KGludGVudC5nZXRBY3Rpb24oKSkpOwotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsIG1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGFib3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50UmVzdHJpY3Rpb24gPT0gQUNUSVZJVFlfUkVTVFJJQ1RJT05fQVBQT1ApIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJBcHBvcCBEZW5pYWw6IHN0YXJ0aW5nICIgKyBpbnRlbnQudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gIiArIGNhbGxlckFwcCArICIgKHBpZD0iICsgY2FsbGluZ1BpZAotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1aWQ9IiArIGNhbGxpbmdVaWQgKyAiKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZXF1aXJlcyBhcHBvcCAiICsgQXBwT3BzTWFuYWdlci5wZXJtaXNzaW9uVG9PcChhSW5mby5wZXJtaXNzaW9uKTsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCBtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBhYm9ydCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhYm9ydCB8PSAhbVNlcnZpY2UubUludGVudEZpcmV3YWxsLmNoZWNrU3RhcnRBY3Rpdml0eShpbnRlbnQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgY2FsbGluZ1BpZCwgcmVzb2x2ZWRUeXBlLCBhSW5mby5hcHBsaWNhdGlvbkluZm8pOwotCi0gICAgICAgIGlmIChtU2VydmljZS5tQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBJbnRlbnQgd2UgZ2l2ZSB0byB0aGUgd2F0Y2hlciBoYXMgdGhlIGV4dHJhIGRhdGEKLSAgICAgICAgICAgICAgICAvLyBzdHJpcHBlZCBvZmYsIHNpbmNlIGl0IGNhbiBjb250YWluIHByaXZhdGUgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgSW50ZW50IHdhdGNoSW50ZW50ID0gaW50ZW50LmNsb25lRmlsdGVyKCk7Ci0gICAgICAgICAgICAgICAgYWJvcnQgfD0gIW1TZXJ2aWNlLm1Db250cm9sbGVyLmFjdGl2aXR5U3RhcnRpbmcod2F0Y2hJbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBhSW5mby5hcHBsaWNhdGlvbkluZm8ucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBtU2VydmljZS5tQ29udHJvbGxlciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBVc2VySW5mbyB1c2VyID0gZ2V0VXNlckluZm8odXNlcklkKTsKLSAgICAgICAgS2V5Z3VhcmRNYW5hZ2VyIGttID0gKEtleWd1YXJkTWFuYWdlcikgbVNlcnZpY2UubUNvbnRleHQKLSAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LktFWUdVQVJEX1NFUlZJQ0UpOwotICAgICAgICBpZiAodXNlci5pc01hbmFnZWRQcm9maWxlKCkKLSAgICAgICAgICAgICAgICAmJiBMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpCi0gICAgICAgICAgICAgICAgJiYga20uaXNEZXZpY2VMb2NrZWQodXNlcklkKSkgewotICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBudWxsLCBudWxsLCAwLCBuZXcgSW50ZW50W117IGludGVudCB9LAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117IHJlc29sdmVkVHlwZSB9LAotICAgICAgICAgICAgICAgICAgICBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQgfCBQZW5kaW5nSW50ZW50LkZMQUdfT05FX1NIT1QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19JTU1VVEFCTEUsIG51bGwpOwotICAgICAgICAgICAgaW50IGZsYWdzID0gaW50ZW50LmdldEZsYWdzKCk7Ci0gICAgICAgICAgICBpbnRlbnQgPSBrbS5jcmVhdGVDb25maXJtRGV2aWNlQ3JlZGVudGlhbEludGVudChudWxsLCBudWxsKTsKLSAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSwotICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfUEFDS0FHRV9OQU1FLCBhSW5mby5wYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0lOVEVOVCwgbmV3IEludGVudFNlbmRlcih0YXJnZXQpKTsKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9JRCwgdXNlcklkKTsKLSAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhmbGFncyk7Ci0KLSAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICBjYWxsaW5nVWlkID0gcmVhbENhbGxpbmdVaWQ7Ci0gICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7Ci0KLSAgICAgICAgICAgIFVzZXJJbmZvIHBhcmVudCA9IFVzZXJNYW5hZ2VyLmdldChtU2VydmljZS5tQ29udGV4dCkuZ2V0UHJvZmlsZVBhcmVudCh1c2VySWQpOwotICAgICAgICAgICAgYUluZm8gPSByZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBudWxsLCBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUZBVUxUX09OTFkKLSAgICAgICAgICAgICAgICAgICAgfCBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLlNUT0NLX1BNX0ZMQUdTLCBudWxsLCBwYXJlbnQuaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFib3J0KSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0UmVjb3JkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRTdGFjay5zZW5kQWN0aXZpdHlSZXN1bHRMb2NrZWQoLTEsIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5LlJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBXZSBwcmV0ZW5kIHRvIHRoZSBjYWxsZXIgdGhhdCBpdCB3YXMgcmVhbGx5IHN0YXJ0ZWQsIGJ1dAotICAgICAgICAgICAgLy8gdGhleSB3aWxsIGp1c3QgZ2V0IGEgY2FuY2VsIHJlc3VsdC4KLSAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHBlcm1pc3Npb25zIG5lZWQgYSByZXZpZXcgYmVmb3JlIGFueSBvZiB0aGUgYXBwIGNvbXBvbmVudHMgY2FuIHJ1biwgd2UKLSAgICAgICAgLy8gbGF1bmNoIHRoZSByZXZpZXcgYWN0aXZpdHkgYW5kIHBhc3MgYSBwZW5kaW5nIGludGVudCB0byBzdGFydCB0aGUgYWN0aXZpdHkKLSAgICAgICAgLy8gd2UgYXJlIHRvIGxhdW5jaGluZyBub3cgYWZ0ZXIgdGhlIHJldmlldyBpcyBjb21wbGV0ZWQuCi0gICAgICAgIGlmIChCdWlsZC5QRVJNSVNTSU9OU19SRVZJRVdfUkVRVUlSRUQgJiYgYUluZm8gIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKG1TZXJ2aWNlLmdldFBhY2thZ2VNYW5hZ2VySW50ZXJuYWxMb2NrZWQoKS5pc1Blcm1pc3Npb25zUmV2aWV3UmVxdWlyZWQoCi0gICAgICAgICAgICAgICAgICAgIGFJbmZvLnBhY2thZ2VOYW1lLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuSU5URU5UX1NFTkRFUl9BQ1RJVklUWSwgY2FsbGluZ1BhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXtpbnRlbnR9LAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tde3Jlc29sdmVkVHlwZX0sIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICBJbnRlbnQgbmV3SW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1JFVklFV19QRVJNSVNTSU9OUyk7Ci0gICAgICAgICAgICAgICAgbmV3SW50ZW50LmFkZEZsYWdzKEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKLSAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1BBQ0tBR0VfTkFNRSwgYUluZm8ucGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfSU5URU5ULCBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1JFU1VMVF9ORUVERUQsIHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0RmxhZ3MoaW50ZW50LmdldEZsYWdzKCkpOwotICAgICAgICAgICAgICAgIGludGVudCA9IG5ld0ludGVudDsKLQotICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOwotICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSByZWFsQ2FsbGluZ1BpZDsKLQotICAgICAgICAgICAgICAgIGFJbmZvID0gcmVzb2x2ZUFjdGl2aXR5KGludGVudCwgbnVsbCwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVGQVVMVF9PTkxZCi0gICAgICAgICAgICAgICAgICAgICAgICB8IEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuU1RPQ0tfUE1fRkxBR1MsIG51bGwsIHVzZXJJZCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfUEVSTUlTU0lPTlNfUkVWSUVXKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJTVEFSVCB1IiArIHVzZXJJZCArICIgeyIgKyBpbnRlbnQudG9TaG9ydFN0cmluZyh0cnVlLCB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlKSArICJ9IGZyb20gdWlkICIgKyBjYWxsaW5nVWlkICsgIiBvbiBkaXNwbGF5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb250YWluZXIgPT0gbnVsbCA/IChtRm9jdXNlZFN0YWNrID09IG51bGwgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZIDogbUZvY3VzZWRTdGFjay5tRGlzcGxheUlkKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tRGlzcGxheUlkKSkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2c7CisgICAgICAgICAgICBpZiAoYWN0aW9uUmVzdHJpY3Rpb24gPT0gQUNUSVZJVFlfUkVTVFJJQ1RJT05fUEVSTUlTU0lPTikgeworICAgICAgICAgICAgICAgIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRpbmcgIiArIGludGVudC50b1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICArICIgZnJvbSAiICsgY2FsbGVyQXBwICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgY2FsbGluZ1VpZCArICIpIiArICIgd2l0aCByZXZva2VkIHBlcm1pc3Npb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBBQ1RJT05fVE9fUlVOVElNRV9QRVJNSVNTSU9OLmdldChpbnRlbnQuZ2V0QWN0aW9uKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICghYUluZm8uZXhwb3J0ZWQpIHsKKyAgICAgICAgICAgICAgICBtc2cgPSAiUGVybWlzc2lvbiBEZW5pYWw6IHN0YXJ0aW5nICIgKyBpbnRlbnQudG9TdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZyb20gIiArIGNhbGxlckFwcCArICIgKHBpZD0iICsgY2FsbGluZ1BpZAorICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB1aWQ9IiArIGNhbGxpbmdVaWQgKyAiKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBub3QgZXhwb3J0ZWQgZnJvbSB1aWQgIiArIGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1zZyA9ICJQZXJtaXNzaW9uIERlbmlhbDogc3RhcnRpbmcgIiArIGludGVudC50b1N0cmluZygpCisgICAgICAgICAgICAgICAgICAgICAgICArICIgZnJvbSAiICsgY2FsbGVyQXBwICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHVpZD0iICsgY2FsbGluZ1VpZCArICIpIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJlcXVpcmVzICIgKyBhSW5mby5wZXJtaXNzaW9uOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgU2xvZy53KFRBRywgbXNnKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbihtc2cpOwogICAgICAgICB9CiAKLSAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IG5ldyBBY3Rpdml0eVJlY29yZChtU2VydmljZSwgY2FsbGVyQXBwLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwKLSAgICAgICAgICAgICAgICBpbnRlbnQsIHJlc29sdmVkVHlwZSwgYUluZm8sIG1TZXJ2aWNlLm1Db25maWd1cmF0aW9uLCByZXN1bHRSZWNvcmQsIHJlc3VsdFdobywKLSAgICAgICAgICAgICAgICByZXF1ZXN0Q29kZSwgY29tcG9uZW50U3BlY2lmaWVkLCB2b2ljZVNlc3Npb24gIT0gbnVsbCwgdGhpcywgY29udGFpbmVyLCBvcHRpb25zKTsKLSAgICAgICAgaWYgKG91dEFjdGl2aXR5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG91dEFjdGl2aXR5WzBdID0gcjsKKyAgICAgICAgaWYgKGFjdGlvblJlc3RyaWN0aW9uID09IEFDVElWSVRZX1JFU1RSSUNUSU9OX0FQUE9QKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9ICJBcHBvcCBEZW5pYWw6IHN0YXJ0aW5nICIgKyBpbnRlbnQudG9TdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICArICIgZnJvbSAiICsgY2FsbGVyQXBwICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkCisgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBjYWxsaW5nVWlkICsgIikiCisgICAgICAgICAgICAgICAgICAgICsgIiByZXF1aXJlcyAiICsgQXBwT3BzTWFuYWdlci5wZXJtaXNzaW9uVG9PcCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT05fVE9fUlVOVElNRV9QRVJNSVNTSU9OLmdldChpbnRlbnQuZ2V0QWN0aW9uKCkpKTsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsIG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFJlc3RyaWN0aW9uID09IEFDVElWSVRZX1JFU1RSSUNUSU9OX0FQUE9QKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZSA9ICJBcHBvcCBEZW5pYWw6IHN0YXJ0aW5nICIgKyBpbnRlbnQudG9TdHJpbmcoKQorICAgICAgICAgICAgICAgICAgICArICIgZnJvbSAiICsgY2FsbGVyQXBwICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkCisgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBjYWxsaW5nVWlkICsgIikiCisgICAgICAgICAgICAgICAgICAgICsgIiByZXF1aXJlcyBhcHBvcCAiICsgQXBwT3BzTWFuYWdlci5wZXJtaXNzaW9uVG9PcChhSW5mby5wZXJtaXNzaW9uKTsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsIG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHIuYXBwVGltZVRyYWNrZXIgPT0gbnVsbCAmJiBzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBkaWRuJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCB0aW1lIHRyYWNrZXIsIHdlIHdhbnQgdG8gY29udGludWUKLSAgICAgICAgICAgIC8vIHRyYWNraW5nIHVuZGVyIGFueSBpdCBoYXMuCi0gICAgICAgICAgICByLmFwcFRpbWVUcmFja2VyID0gc291cmNlUmVjb3JkLmFwcFRpbWVUcmFja2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IG1Gb2N1c2VkU3RhY2s7Ci0gICAgICAgIGlmICh2b2ljZVNlc3Npb24gPT0gbnVsbCAmJiAoc3RhY2subVJlc3VtZWRBY3Rpdml0eSA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgc3RhY2subVJlc3VtZWRBY3Rpdml0eS5pbmZvLmFwcGxpY2F0aW9uSW5mby51aWQgIT0gY2FsbGluZ1VpZCkpIHsKLSAgICAgICAgICAgIGlmICghbVNlcnZpY2UuY2hlY2tBcHBTd2l0Y2hBbGxvd2VkTG9ja2VkKGNhbGxpbmdQaWQsIGNhbGxpbmdVaWQsCi0gICAgICAgICAgICAgICAgICAgIHJlYWxDYWxsaW5nUGlkLCByZWFsQ2FsbGluZ1VpZCwgIkFjdGl2aXR5IHN0YXJ0IikpIHsKLSAgICAgICAgICAgICAgICBQZW5kaW5nQWN0aXZpdHlMYXVuY2ggcGFsID0gIG5ldyBQZW5kaW5nQWN0aXZpdHlMYXVuY2gociwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY29yZCwgc3RhcnRGbGFncywgc3RhY2ssIGNhbGxlckFwcCk7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmFkZChwYWwpOwotICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NXSVRDSEVTX0NBTkNFTEVEOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1TZXJ2aWNlLm1EaWRBcHBTd2l0Y2gpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCBhbGxvd2VkIHN3aXRjaCBzaW5jZSB3ZSBzdG9wcGVkIHN3aXRjaGVzLAotICAgICAgICAgICAgLy8gc28gbm93IGp1c3QgZ2VuZXJhbGx5IGFsbG93IHN3aXRjaGVzLiAgVXNlIGNhc2U6IHVzZXIgcHJlc3NlcwotICAgICAgICAgICAgLy8gaG9tZSAoc3dpdGNoZXMgZGlzYWJsZWQsIHN3aXRjaCB0byBob21lLCBtRGlkQXBwU3dpdGNoIG5vdyB0cnVlKTsKLSAgICAgICAgICAgIC8vIHVzZXIgdGFwcyBhIGhvbWUgaWNvbiAoY29taW5nIGZyb20gaG9tZSBzbyBhbGxvd2VkLCB3ZSBoaXQgaGVyZQotICAgICAgICAgICAgLy8gYW5kIG5vdyBhbGxvdyBhbnlvbmUgdG8gc3dpdGNoIGFnYWluKS4KLSAgICAgICAgICAgIG1TZXJ2aWNlLm1BcHBTd2l0Y2hlc0FsbG93ZWRUaW1lID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm1EaWRBcHBTd2l0Y2ggPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZG9QZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChmYWxzZSk7Ci0KLSAgICAgICAgZXJyID0gc3RhcnRBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChyLCBzb3VyY2VSZWNvcmQsIHZvaWNlU2Vzc2lvbiwgdm9pY2VJbnRlcmFjdG9yLAotICAgICAgICAgICAgICAgIHN0YXJ0RmxhZ3MsIHRydWUsIG9wdGlvbnMsIGluVGFzayk7Ci0KLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgIC8vIElmIHNvbWVvbmUgYXNrZWQgdG8gaGF2ZSB0aGUga2V5Z3VhcmQgZGlzbWlzc2VkIG9uIHRoZSBuZXh0Ci0gICAgICAgICAgICAvLyBhY3Rpdml0eSBzdGFydCwgYnV0IHdlIGFyZSBub3QgYWN0dWFsbHkgZG9pbmcgYW4gYWN0aXZpdHkKLSAgICAgICAgICAgIC8vIHN3aXRjaC4uLiAganVzdCBkaXNtaXNzIHRoZSBrZXlndWFyZCBub3csIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgIC8vIHByb2JhYmx5IHdhbnQgdG8gc2VlIHdoYXRldmVyIGlzIGJlaGluZCBpdC4KLSAgICAgICAgICAgIG5vdGlmeUFjdGl2aXR5RHJhd25Gb3JLZXlndWFyZCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHByaXZhdGUgVXNlckluZm8gZ2V0VXNlckluZm8oaW50IHVzZXJJZCkgeworICAgIFVzZXJJbmZvIGdldFVzZXJJbmZvKGludCB1c2VySWQpIHsKICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIFVzZXJNYW5hZ2VyLmdldChtU2VydmljZS5tQ29udGV4dCkuZ2V0VXNlckluZm8odXNlcklkKTsKQEAgLTE4NzksNzkxICsxMzYzLDIwIEBACiAgICAgICAgIHJldHVybiBBQ1RJVklUWV9SRVNUUklDVElPTl9OT05FOwogICAgIH0KIAotICAgIEFjdGl2aXR5U3RhY2sgY29tcHV0ZVN0YWNrRm9jdXMoQWN0aXZpdHlSZWNvcmQgciwgYm9vbGVhbiBuZXdUYXNrLCBSZWN0IGJvdW5kcykgewotICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSByLnRhc2s7Ci0KLSAgICAgICAgaWYgKCEoci5pc0FwcGxpY2F0aW9uQWN0aXZpdHkoKSB8fCAodGFzayAhPSBudWxsICYmIHRhc2suaXNBcHBsaWNhdGlvblRhc2soKSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUhvbWVTdGFjazsKLSAgICAgICAgfQotCi0gICAgICAgIEFjdGl2aXR5U3RhY2sgc3RhY2s7Ci0KLSAgICAgICAgaWYgKHRhc2sgIT0gbnVsbCAmJiB0YXNrLnN0YWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIHN0YWNrID0gdGFzay5zdGFjazsKLSAgICAgICAgICAgIGlmIChzdGFjay5pc09uSG9tZURpc3BsYXkoKSkgewotICAgICAgICAgICAgICAgIGlmIChtRm9jdXNlZFN0YWNrICE9IHN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IFNldHRpbmcgIiArICJmb2N1c2VkIHN0YWNrIHRvIHI9IiArIHIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdGFzaz0iICsgdGFzayk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBGb2N1c2VkIHN0YWNrIGFscmVhZHk9IiArIG1Gb2N1c2VkU3RhY2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzdGFjazsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIEFjdGl2aXR5Q29udGFpbmVyIGNvbnRhaW5lciA9IHIubUluaXRpYWxBY3Rpdml0eUNvbnRhaW5lcjsKLSAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZmlyc3QgdGltZSBwdXQgaXQgb24gdGhlIGRlc2lyZWQgc3RhY2ssIGFmdGVyIHRoaXMgcHV0IG9uIHRhc2sgc3RhY2suCi0gICAgICAgICAgICByLm1Jbml0aWFsQWN0aXZpdHlDb250YWluZXIgPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5tU3RhY2s7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGUgZnVsbHNjcmVlbiBzdGFjayBjYW4gY29udGFpbiBhbnkgdGFzayByZWdhcmRsZXNzIG9mIGlmIHRoZSB0YXNrIGlzIHJlc2l6ZWFibGUKLSAgICAgICAgLy8gb3Igbm90LiBTbywgd2UgbGV0IHRoZSB0YXNrIGdvIGluIHRoZSBmdWxsc2NyZWVuIHRhc2sgaWYgaXQgaXMgdGhlIGZvY3VzIHN0YWNrLgotICAgICAgICAvLyBJZiB0aGUgZnJlZWZvcm0gc3RhY2sgaGFzIGZvY3VzLCBhbmQgdGhlIGFjdGl2aXR5IHRvIGJlIGxhdW5jaGVkIGlzIHJlc2l6ZWFibGUsCi0gICAgICAgIC8vIHdlIGNhbiBhbHNvIHB1dCBpdCBpbiB0aGUgZm9jdXNlZCBzdGFjay4KLSAgICAgICAgZmluYWwgYm9vbGVhbiBjYW5Vc2VGb2N1c2VkU3RhY2sgPQotICAgICAgICAgICAgICAgIG1Gb2N1c2VkU3RhY2subVN0YWNrSWQgPT0gRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQKLSAgICAgICAgICAgICAgICB8fCBtRm9jdXNlZFN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCAmJiByLmluZm8ucmVzaXplYWJsZTsKLSAgICAgICAgaWYgKGNhblVzZUZvY3VzZWRTdGFjawotICAgICAgICAgICAgICAgICYmICghbmV3VGFzayB8fCBtRm9jdXNlZFN0YWNrLm1BY3Rpdml0eUNvbnRhaW5lci5pc0VsaWdpYmxlRm9yTmV3VGFza3MoKSkpIHsKLSAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKLSAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVTdGFja0ZvY3VzOiBIYXZlIGEgZm9jdXNlZCBzdGFjaz0iICsgbUZvY3VzZWRTdGFjayk7Ci0gICAgICAgICAgICByZXR1cm4gbUZvY3VzZWRTdGFjazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGZpcnN0IHRyeSB0byBwdXQgdGhlIHRhc2sgaW4gdGhlIGZpcnN0IGR5bmFtaWMgc3RhY2suCi0gICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBob21lRGlzcGxheVN0YWNrcyA9IG1Ib21lU3RhY2subVN0YWNrczsKLSAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBob21lRGlzcGxheVN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7Ci0gICAgICAgICAgICBzdGFjayA9IGhvbWVEaXNwbGF5U3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICBpZiAoIVN0YWNrSWQuaXNTdGF0aWNTdGFjayhzdGFjay5tU3RhY2tJZCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfRk9DVVMgfHwgREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfRk9DVVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IFNldHRpbmcgZm9jdXNlZCBzdGFjaz0iICsgc3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGFjazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1aXRhYmxlIGR5bmFtaWMgc3RhY2sgdGhlbiB3ZSBmaWd1cmUgb3V0IHdoaWNoIHN0YXRpYyBzdGFjayB0byB1c2UuCi0gICAgICAgIGZpbmFsIGludCBzdGFja0lkID0gdGFzayAhPSBudWxsID8gdGFzay5nZXRMYXVuY2hTdGFja0lkKCkgOgotICAgICAgICAgICAgICAgICAgICBib3VuZHMgIT0gbnVsbCA/IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQ7Ci0gICAgICAgIHN0YWNrID0gZ2V0U3RhY2soc3RhY2tJZCwgQ1JFQVRFX0lGX05FRURFRCwgT05fVE9QKTsKLSAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLCAiY29tcHV0ZVN0YWNrRm9jdXM6IE5ldyBzdGFjayByPSIKLSAgICAgICAgICAgICAgICArIHIgKyAiIHN0YWNrSWQ9IiArIHN0YWNrLm1TdGFja0lkKTsKLSAgICAgICAgcmV0dXJuIHN0YWNrOwotICAgIH0KLQotICAgIGJvb2xlYW4gc2V0Rm9jdXNlZFN0YWNrKEFjdGl2aXR5UmVjb3JkIHIsIFN0cmluZyByZWFzb24pIHsKKyAgICBib29sZWFuIG1vdmVBY3Rpdml0eVN0YWNrVG9Gcm9udChBY3Rpdml0eVJlY29yZCByLCBTdHJpbmcgcmVhc29uKSB7CiAgICAgICAgIGlmIChyID09IG51bGwpIHsKICAgICAgICAgICAgIC8vIE5vdCBzdXJlIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gZG8sIGJ1dCBpdCBpcyBub3QgZ29pbmcgdG8gd29yay4uLgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IHIudGFzazsKICAgICAgICAgaWYgKHRhc2sgPT0gbnVsbCB8fCB0YXNrLnN0YWNrID09IG51bGwpIHsKLSAgICAgICAgICAgIFNsb2cudyhUQUcsICJDYW4ndCBzZXQgZm9jdXMgc3RhY2sgZm9yIHI9IiArIHIgKyAiIHRhc2s9IiArIHRhc2spOworICAgICAgICAgICAgU2xvZy53KFRBRywgIkNhbid0IG1vdmUgc3RhY2sgdG8gZnJvbnQgZm9yIHI9IiArIHIgKyAiIHRhc2s9IiArIHRhc2spOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHRhc2suc3RhY2subW92ZVRvRnJvbnQocmVhc29uLCB0YXNrKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQoZmluYWwgQWN0aXZpdHlSZWNvcmQgciwgQWN0aXZpdHlSZWNvcmQgc291cmNlUmVjb3JkLAotICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IsIGludCBzdGFydEZsYWdzLAotICAgICAgICAgICAgYm9vbGVhbiBkb1Jlc3VtZSwgQWN0aXZpdHlPcHRpb25zIG9wdGlvbnMsIFRhc2tSZWNvcmQgaW5UYXNrKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSByLmludGVudDsKLSAgICAgICAgZmluYWwgaW50IGNhbGxpbmdVaWQgPSByLmxhdW5jaGVkRnJvbVVpZDsKLQotICAgICAgICBib29sZWFuIG92ZXJyaWRlQm91bmRzID0gZmFsc2U7Ci0gICAgICAgIFJlY3QgbmV3Qm91bmRzID0gbnVsbDsKLSAgICAgICAgaWYgKG9wdGlvbnMgIT0gbnVsbCAmJiAoci5pbmZvLnJlc2l6ZWFibGUgfHwgKGluVGFzayAhPSBudWxsICYmIGluVGFzay5tUmVzaXplYWJsZSkpKSB7Ci0gICAgICAgICAgICBpZiAoY2FuVXNlQWN0aXZpdHlPcHRpb25zTGF1bmNoQm91bmRzKG9wdGlvbnMpKSB7Ci0gICAgICAgICAgICAgICAgb3ZlcnJpZGVCb3VuZHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG5ld0JvdW5kcyA9IG9wdGlvbnMuZ2V0TGF1bmNoQm91bmRzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbiBzb21lIGZsb3dzIGluIHRvIHRoaXMgZnVuY3Rpb24sIHdlIHJldHJpZXZlIHRoZSB0YXNrIHJlY29yZCBhbmQgaG9sZCBvbiB0byBpdAotICAgICAgICAvLyB3aXRob3V0IGEgbG9jayBiZWZvcmUgY2FsbGluZyBiYWNrIGluIHRvIGhlcmUuLi4gIHNvIHRoZSB0YXNrIGF0IHRoaXMgcG9pbnQgbWF5Ci0gICAgICAgIC8vIG5vdCBhY3R1YWxseSBiZSBpbiByZWNlbnRzLiAgQ2hlY2sgZm9yIHRoYXQsIGFuZCBpZiBpdCBpc24ndCBpbiByZWNlbnRzIGp1c3QKLSAgICAgICAgLy8gY29uc2lkZXIgaXQgaW52YWxpZC4KLSAgICAgICAgaWYgKGluVGFzayAhPSBudWxsICYmICFpblRhc2suaW5SZWNlbnRzKSB7Ci0gICAgICAgICAgICBTbG9nLncoVEFHLCAiU3RhcnRpbmcgYWN0aXZpdHkgaW4gdGFzayBub3QgaW4gcmVjZW50czogIiArIGluVGFzayk7Ci0gICAgICAgICAgICBpblRhc2sgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiBsYXVuY2hTaW5nbGVUb3AgPSByLmxhdW5jaE1vZGUgPT0gQWN0aXZpdHlJbmZvLkxBVU5DSF9TSU5HTEVfVE9QOwotICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFNpbmdsZUluc3RhbmNlID0gci5sYXVuY2hNb2RlID09IEFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX0lOU1RBTkNFOwotICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFNpbmdsZVRhc2sgPSByLmxhdW5jaE1vZGUgPT0gQWN0aXZpdHlJbmZvLkxBVU5DSF9TSU5HTEVfVEFTSzsKLQotICAgICAgICBpbnQgbGF1bmNoRmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKLSAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCkgIT0gMCAmJgotICAgICAgICAgICAgICAgIChsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrKSkgewotICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEludGVudCBhbmQgdGhlIEFjdGl2aXR5IG1hbmlmZXN0LCBtYW5pZmVzdCB3aW5zLgotICAgICAgICAgICAgU2xvZy5pKFRBRywgIklnbm9yaW5nIEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5ULCBsYXVuY2hNb2RlIGlzICIgKwotICAgICAgICAgICAgICAgICAgICAiXCJzaW5nbGVJbnN0YW5jZVwiIG9yIFwic2luZ2xlVGFza1wiIik7Ci0gICAgICAgICAgICBsYXVuY2hGbGFncyAmPQotICAgICAgICAgICAgICAgICAgICB+KEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCB8IEludGVudC5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0spOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoIChyLmluZm8uZG9jdW1lbnRMYXVuY2hNb2RlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX05PTkU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9JTlRPX0VYSVNUSU5HOgotICAgICAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9BTFdBWVM6Ci0gICAgICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX05FVkVSOgotICAgICAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyAmPSB+SW50ZW50LkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBib29sZWFuIGxhdW5jaFRhc2tCZWhpbmQgPSByLm1MYXVuY2hUYXNrQmVoaW5kCi0gICAgICAgICAgICAgICAgJiYgIWxhdW5jaFNpbmdsZVRhc2sgJiYgIWxhdW5jaFNpbmdsZUluc3RhbmNlCi0gICAgICAgICAgICAgICAgJiYgKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwOwotCi0gICAgICAgIGlmIChyLnJlc3VsdFRvICE9IG51bGwgJiYgKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDAKLSAgICAgICAgICAgICAgICAmJiByLnJlc3VsdFRvLnRhc2suc3RhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiB0aGlzIGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGludG8gYSBuZXcKLSAgICAgICAgICAgIC8vIHRhc2suLi4gIHlldCB0aGUgY2FsbGVyIGhhcyByZXF1ZXN0ZWQgYSByZXN1bHQgYmFjay4gIFdlbGwsIHRoYXQKLSAgICAgICAgICAgIC8vIGlzIHByZXR0eSBtZXNzZWQgdXAsIHNvIGluc3RlYWQgaW1tZWRpYXRlbHkgc2VuZCBiYWNrIGEgY2FuY2VsCi0gICAgICAgICAgICAvLyBhbmQgbGV0IHRoZSBuZXcgdGFzayBjb250aW51ZSBsYXVuY2hlZCBhcyBub3JtYWwgd2l0aG91dCBhCi0gICAgICAgICAgICAvLyBkZXBlbmRlbmN5IG9uIGl0cyBvcmlnaW5hdG9yLgotICAgICAgICAgICAgU2xvZy53KFRBRywgIkFjdGl2aXR5IGlzIGxhdW5jaGluZyBhcyBhIG5ldyB0YXNrLCBzbyBjYW5jZWxsaW5nIGFjdGl2aXR5IHJlc3VsdC4iKTsKLSAgICAgICAgICAgIHIucmVzdWx0VG8udGFzay5zdGFjay5zZW5kQWN0aXZpdHlSZXN1bHRMb2NrZWQoLTEsCi0gICAgICAgICAgICAgICAgICAgIHIucmVzdWx0VG8sIHIucmVzdWx0V2hvLCByLnJlcXVlc3RDb2RlLAotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eS5SRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOwotICAgICAgICAgICAgci5yZXN1bHRUbyA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwICYmIHIucmVzdWx0VG8gPT0gbnVsbCkgewotICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gbGF1bmNoIGluIHRvIGEgbmV3IHRhc2ssIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlCi0gICAgICAgIC8vIHdlIGZ1cnRoZXIgd2FudCB0byBkbyBtdWx0aXBsZSB0YXNrLgotICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKLSAgICAgICAgICAgIGlmIChsYXVuY2hUYXNrQmVoaW5kCi0gICAgICAgICAgICAgICAgICAgIHx8IHIuaW5mby5kb2N1bWVudExhdW5jaE1vZGUgPT0gQWN0aXZpdHlJbmZvLkRPQ1VNRU5UX0xBVU5DSF9BTFdBWVMpIHsKLSAgICAgICAgICAgICAgICBsYXVuY2hGbGFncyB8PSBJbnRlbnQuRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UnbGwgaW52b2tlIG9uVXNlckxlYXZpbmcgYmVmb3JlIG9uUGF1c2Ugb25seSBpZiB0aGUgbGF1bmNoaW5nCi0gICAgICAgIC8vIGFjdGl2aXR5IGRpZCBub3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoaXMgaXMgYW4gYXV0b21hdGVkIGxhdW5jaC4KLSAgICAgICAgbVVzZXJMZWF2aW5nID0gKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT04pID09IDA7Ci0gICAgICAgIGlmIChERUJVR19VU0VSX0xFQVZJTkcpIFNsb2cudihUQUdfVVNFUl9MRUFWSU5HLAotICAgICAgICAgICAgICAgICJzdGFydEFjdGl2aXR5KCkgPT4gbVVzZXJMZWF2aW5nPSIgKyBtVXNlckxlYXZpbmcpOwotCi0gICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIGFza2VkIG5vdCB0byByZXN1bWUgYXQgdGhpcyBwb2ludCwgd2UgbWFrZSBub3RlCi0gICAgICAgIC8vIG9mIHRoaXMgaW4gdGhlIHJlY29yZCBzbyB0aGF0IHdlIGNhbiBza2lwIGl0IHdoZW4gdHJ5aW5nIHRvIGZpbmQKLSAgICAgICAgLy8gdGhlIHRvcCBydW5uaW5nIGFjdGl2aXR5LgotICAgICAgICBpZiAoIWRvUmVzdW1lIHx8ICFva1RvU2hvd0xvY2tlZChyKSkgewotICAgICAgICAgICAgci5kZWxheWVkUmVzdW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIGRvUmVzdW1lID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBBY3Rpdml0eVJlY29yZCBub3RUb3AgPQotICAgICAgICAgICAgICAgIChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX1BSRVZJT1VTX0lTX1RPUCkgIT0gMCA/IHIgOiBudWxsOwotCi0gICAgICAgIC8vIElmIHRoZSBvbmx5SWZOZWVkZWQgZmxhZyBpcyBzZXQsIHRoZW4gd2UgY2FuIGRvIHRoaXMgaWYgdGhlIGFjdGl2aXR5Ci0gICAgICAgIC8vIGJlaW5nIGxhdW5jaGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgbWFraW5nIHRoZSBjYWxsLi4uICBvciwgYXMKLSAgICAgICAgLy8gYSBzcGVjaWFsIGNhc2UsIGlmIHdlIGRvIG5vdCBrbm93IHRoZSBjYWxsZXIgdGhlbiB3ZSBjb3VudCB0aGUKLSAgICAgICAgLy8gY3VycmVudCB0b3AgYWN0aXZpdHkgYXMgdGhlIGNhbGxlci4KLSAgICAgICAgaWYgKChzdGFydEZsYWdzJkFjdGl2aXR5TWFuYWdlci5TVEFSVF9GTEFHX09OTFlfSUZfTkVFREVEKSAhPSAwKSB7Ci0gICAgICAgICAgICBBY3Rpdml0eVJlY29yZCBjaGVja2VkQ2FsbGVyID0gc291cmNlUmVjb3JkOwotICAgICAgICAgICAgaWYgKGNoZWNrZWRDYWxsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNoZWNrZWRDYWxsZXIgPSBtRm9jdXNlZFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobm90VG9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghY2hlY2tlZENhbGxlci5yZWFsQWN0aXZpdHkuZXF1YWxzKHIucmVhbEFjdGl2aXR5KSkgewotICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyBub3QgdGhlIHNhbWUgYXMgbGF1bmNoZXIsIHNvIGFsd2F5cyBuZWVkZWQuCi0gICAgICAgICAgICAgICAgc3RhcnRGbGFncyAmPSB+QWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGFkZGluZ1RvVGFzayA9IGZhbHNlOwotICAgICAgICBUYXNrUmVjb3JkIHJldXNlVGFzayA9IG51bGw7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBub3QgY29taW5nIGZyb20gYW5vdGhlciBhY3Rpdml0eSwgYnV0IGhhcyBnaXZlbiB1cyBhbgotICAgICAgICAvLyBleHBsaWNpdCB0YXNrIGludG8gd2hpY2ggdGhleSB3b3VsZCBsaWtlIHVzIHRvIGxhdW5jaCB0aGUgbmV3IGFjdGl2aXR5LAotICAgICAgICAvLyB0aGVuIGxldCdzIHNlZSBhYm91dCBkb2luZyB0aGF0LgotICAgICAgICBpZiAoc291cmNlUmVjb3JkID09IG51bGwgJiYgaW5UYXNrICE9IG51bGwgJiYgaW5UYXNrLnN0YWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZpbmFsIEludGVudCBiYXNlSW50ZW50ID0gaW5UYXNrLmdldEJhc2VJbnRlbnQoKTsKLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHJvb3QgPSBpblRhc2suZ2V0Um9vdEFjdGl2aXR5KCk7Ci0gICAgICAgICAgICBpZiAoYmFzZUludGVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxhdW5jaGluZyBpbnRvIHRhc2sgd2l0aG91dCBiYXNlIGludGVudDogIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBpblRhc2spOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiB0aGlzIHRhc2sgaXMgZW1wdHksIHRoZW4gd2UgYXJlIGFkZGluZyB0aGUgZmlyc3QgYWN0aXZpdHkgLS0gaXQKLSAgICAgICAgICAgIC8vIGRldGVybWluZXMgdGhlIHJvb3QsIGFuZCBtdXN0IGJlIGxhdW5jaGluZyBhcyBhIE5FV19UQVNLLgotICAgICAgICAgICAgaWYgKGxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IGxhdW5jaFNpbmdsZVRhc2spIHsKLSAgICAgICAgICAgICAgICBpZiAoIWJhc2VJbnRlbnQuZ2V0Q29tcG9uZW50KCkuZXF1YWxzKHIuaW50ZW50LmdldENvbXBvbmVudCgpKSkgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRyeWluZyB0byBsYXVuY2ggc2luZ2xlSW5zdGFuY2UvVGFzayAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByICsgIiBpbnRvIGRpZmZlcmVudCB0YXNrICIgKyBpblRhc2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocm9vdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2FsbGVyIHdpdGggaW5UYXNrICIgKyBpblRhc2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaGFzIHJvb3QgIiArIHJvb3QgKyAiIGJ1dCB0YXJnZXQgaXMgc2luZ2xlSW5zdGFuY2UvVGFzayIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgdGFzayBpcyBlbXB0eSwgdGhlbiBhZG9wdCB0aGUgaW50ZXJlc3RpbmcgaW50ZW50IGxhdW5jaCBmbGFncyBpbiB0byB0aGUKLSAgICAgICAgICAgIC8vIGFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQuCi0gICAgICAgICAgICBpZiAocm9vdCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzT2ZJbnRlcmVzdCA9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0sgfCBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVUQUlOX0lOX1JFQ0VOVFM7Ci0gICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgPSAobGF1bmNoRmxhZ3MmfmZsYWdzT2ZJbnRlcmVzdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgKGJhc2VJbnRlbnQuZ2V0RmxhZ3MoKSZmbGFnc09mSW50ZXJlc3QpOwotICAgICAgICAgICAgICAgIGludGVudC5zZXRGbGFncyhsYXVuY2hGbGFncyk7Ci0gICAgICAgICAgICAgICAgaW5UYXNrLnNldEludGVudChyKTsKLSAgICAgICAgICAgICAgICBhZGRpbmdUb1Rhc2sgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBJZiB0aGUgdGFzayBpcyBub3QgZW1wdHkgYW5kIHRoZSBjYWxsZXIgaXMgYXNraW5nIHRvIHN0YXJ0IGl0IGFzIHRoZSByb290Ci0gICAgICAgICAgICAvLyBvZiBhIG5ldyB0YXNrLCB0aGVuIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gc3RhcnQgdGhpcyBvbiB0aGUgdGFzay4gIFdlCi0gICAgICAgICAgICAvLyB3aWxsIGJyaW5nIHRoZSB0YXNrIHRvIHRoZSBmcm9udCwgYW5kIHBvc3NpYmx5IGdpdmUgaXQgYSBuZXcgaW50ZW50LgotICAgICAgICAgICAgfSBlbHNlIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCkgewotICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IGZhbHNlOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldXNlVGFzayA9IGluVGFzazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluVGFzayA9IG51bGw7Ci0gICAgICAgICAgICAvLyBMYXVuY2ggUmVzb2x2ZXJBY3Rpdml0eSBpbiB0aGUgc291cmNlIHRhc2ssIHNvIHRoYXQgaXQgc3RheXMgaW4gdGhlIHRhc2sKLSAgICAgICAgICAgIC8vIGJvdW5kcyB3aGVuIGluIGZyZWVmb3JtIHdvcmtzcGFjZS4KLSAgICAgICAgICAgIC8vIEFsc28gcHV0IG5vRGlzcGxheSBhY3Rpdml0aWVzIGluIHRoZSBzb3VyY2UgdGFzay4gVGhlc2UgYnkgaXRzZWxmIGNhbgotICAgICAgICAgICAgLy8gYmUgcGxhY2VkIGluIGFueSB0YXNrL3N0YWNrLCBob3dldmVyIGl0IGNvdWxkIGxhdW5jaCBvdGhlciBhY3Rpdml0aWVzCi0gICAgICAgICAgICAvLyBsaWtlIFJlc29sdmVyQWN0aXZpdHksIGFuZCB3ZSB3YW50IHRob3NlIHRvIHN0YXkgaW4gdGhlIG9yaWdpbmFsIHRhc2suCi0gICAgICAgICAgICBpZiAoci5pc1Jlc29sdmVyQWN0aXZpdHkoKSB8fCByLm5vRGlzcGxheSkgewotICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5UYXNrID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChzb3VyY2VSZWNvcmQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgYWN0aXZpdHkgaXMgbm90IGJlaW5nIHN0YXJ0ZWQgZnJvbSBhbm90aGVyLi4uICBpbiB0aGlzCi0gICAgICAgICAgICAgICAgLy8gY2FzZSB3ZSAtYWx3YXlzLSBzdGFydCBhIG5ldyB0YXNrLgotICAgICAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMCAmJiBpblRhc2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAic3RhcnRBY3Rpdml0eSBjYWxsZWQgZnJvbSBub24tQWN0aXZpdHkgY29udGV4dDsgZm9yY2luZyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgZm9yOiAiICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VSZWNvcmQubGF1bmNoTW9kZSA9PSBBY3Rpdml0eUluZm8uTEFVTkNIX1NJTkdMRV9JTlNUQU5DRSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBhY3Rpdml0eSB3aG8gaXMgc3RhcnRpbmcgdXMgaXMgcnVubmluZyBhcyBhIHNpbmdsZQotICAgICAgICAgICAgICAgIC8vIGluc3RhbmNlLi4uICB0aGlzIG5ldyBhY3Rpdml0eSBpdCBpcyBzdGFydGluZyBtdXN0IGdvIG9uIGl0cwotICAgICAgICAgICAgICAgIC8vIG93biB0YXNrLgotICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLOwotICAgICAgICAgICAgfSBlbHNlIGlmIChsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaXMgYSBzaW5nbGUgaW5zdGFuY2UuLi4gIGl0IGFsd2F5cwotICAgICAgICAgICAgICAgIC8vIGdldHMgbGF1bmNoZWQgaW50byBpdHMgb3duIHRhc2suCi0gICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBBY3Rpdml0eUluZm8gbmV3VGFza0luZm8gPSBudWxsOwotICAgICAgICBJbnRlbnQgbmV3VGFza0ludGVudCA9IG51bGw7Ci0gICAgICAgIEFjdGl2aXR5U3RhY2sgc291cmNlU3RhY2s7Ci0gICAgICAgIGlmIChzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgaWYgKHNvdXJjZVJlY29yZC5maW5pc2hpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBJZiB0aGUgc291cmNlIGlzIGZpbmlzaGluZywgd2UgY2FuJ3QgZnVydGhlciBjb3VudCBpdCBhcyBvdXIgc291cmNlLiAgVGhpcwotICAgICAgICAgICAgICAgIC8vIGlzIGJlY2F1c2UgdGhlIHRhc2sgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIG1heSBub3cgYmUgZW1wdHkgYW5kIG9uIGl0cyB3YXkgb3V0LAotICAgICAgICAgICAgICAgIC8vIHNvIHdlIGRvbid0IHdhbnQgdG8gYmxpbmRseSB0aHJvdyBpdCBpbiB0byB0aGF0IHRhc2suICBJbnN0ZWFkIHdlIHdpbGwgdGFrZQotICAgICAgICAgICAgICAgIC8vIHRoZSBORVdfVEFTSyBmbG93IGFuZCB0cnkgdG8gZmluZCBhIHRhc2sgZm9yIGl0LiBCdXQgc2F2ZSB0aGUgdGFzayBpbmZvcm1hdGlvbgotICAgICAgICAgICAgICAgIC8vIHNvIGl0IGNhbiBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgdGhlIG5ldyB0YXNrLgotICAgICAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAic3RhcnRBY3Rpdml0eSBjYWxsZWQgZnJvbSBmaW5pc2hpbmcgIiArIHNvdXJjZVJlY29yZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIjsgZm9yY2luZyAiICsgIkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLIGZvcjogIiArIGludGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLOwotICAgICAgICAgICAgICAgICAgICBuZXdUYXNrSW5mbyA9IHNvdXJjZVJlY29yZC5pbmZvOwotICAgICAgICAgICAgICAgICAgICBuZXdUYXNrSW50ZW50ID0gc291cmNlUmVjb3JkLnRhc2suaW50ZW50OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBudWxsOwotICAgICAgICAgICAgICAgIHNvdXJjZVN0YWNrID0gbnVsbDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc291cmNlU3RhY2sgPSBzb3VyY2VSZWNvcmQudGFzay5zdGFjazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNvdXJjZVN0YWNrID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbW92ZWRIb21lID0gZmFsc2U7Ci0gICAgICAgIEFjdGl2aXR5U3RhY2sgdGFyZ2V0U3RhY2s7Ci0KLSAgICAgICAgaW50ZW50LnNldEZsYWdzKGxhdW5jaEZsYWdzKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBub0FuaW1hdGlvbiA9IChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX05PX0FOSU1BVElPTikgIT0gMDsKLQotICAgICAgICAvLyBXZSBtYXkgd2FudCB0byB0cnkgdG8gcGxhY2UgdGhlIG5ldyBhY3Rpdml0eSBpbiB0byBhbiBleGlzdGluZyB0YXNrLiAgV2UgYWx3YXlzCi0gICAgICAgIC8vIGRvIHRoaXMgaWYgdGhlIHRhcmdldCBhY3Rpdml0eSBpcyBzaW5nbGVUYXNrIG9yIHNpbmdsZUluc3RhbmNlOyB3ZSB3aWxsIGFsc28gZG8KLSAgICAgICAgLy8gdGhpcyBpZiBORVdfVEFTSyBoYXMgYmVlbiByZXF1ZXN0ZWQsIGFuZCB0aGVyZSBpcyBub3QgYW4gYWRkaXRpb25hbCBxdWFsaWZpZXIgdGVsbGluZwotICAgICAgICAvLyB1cyB0byBzdGlsbCBwbGFjZSBpdCBpbiBhIG5ldyB0YXNrOiBtdWx0aSB0YXNrLCBhbHdheXMgZG9jIG1vZGUsIG9yIGJlaW5nIGFza2VkIHRvCi0gICAgICAgIC8vIGxhdW5jaCB0aGlzIGFzIGEgbmV3IHRhc2sgYmVoaW5kIHRoZSBjdXJyZW50IG9uZS4KLSAgICAgICAgaWYgKCgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCAmJgotICAgICAgICAgICAgICAgIChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0spID09IDApCi0gICAgICAgICAgICAgICAgfHwgbGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbGF1bmNoU2luZ2xlVGFzaykgewotICAgICAgICAgICAgLy8gSWYgYnJpbmcgdG8gZnJvbnQgaXMgcmVxdWVzdGVkLCBhbmQgbm8gcmVzdWx0IGlzIHJlcXVlc3RlZCBhbmQgd2UgaGF2ZSBub3QKLSAgICAgICAgICAgIC8vIGJlZW4gZ2l2ZW4gYW4gZXhwbGljaXQgdGFzayB0byBsYXVuY2ggaW4gdG8sIGFuZAotICAgICAgICAgICAgLy8gd2UgY2FuIGZpbmQgYSB0YXNrIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGlzIHNhbWUKLSAgICAgICAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpbnN0ZWFkIG9mIGxhdW5jaGluZyBicmluZyB0aGF0IG9uZSB0byB0aGUgZnJvbnQuCi0gICAgICAgICAgICBpZiAoaW5UYXNrID09IG51bGwgJiYgci5yZXN1bHRUbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgdGFzayB0byBicmluZyB0byB0aGUgZnJvbnQuICBJZiB0aGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gYSBTSU5HTEVfSU5TVEFOQ0UgYWN0aXZpdHksIHRoZXJlIGNhbiBiZSBvbmUgYW5kIG9ubHkgb25lCi0gICAgICAgICAgICAgICAgLy8gaW5zdGFuY2Ugb2YgaXQgaW4gdGhlIGhpc3RvcnksIGFuZCBpdCBpcyBhbHdheXMgaW4gaXRzIG93bgotICAgICAgICAgICAgICAgIC8vIHVuaXF1ZSB0YXNrLCBzbyB3ZSBkbyBhIHNwZWNpYWwgc2VhcmNoLgotICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGludGVudEFjdGl2aXR5ID0gIWxhdW5jaFNpbmdsZUluc3RhbmNlID8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmRUYXNrTG9ja2VkKHIpIDogZmluZEFjdGl2aXR5TG9ja2VkKGludGVudCwgci5pbmZvKTsKLSAgICAgICAgICAgICAgICBpZiAoaW50ZW50QWN0aXZpdHkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBmbGFncyBORVdfVEFTSyBhbmQgQ0xFQVJfVEFTSyBhcmUgc2V0LCB0aGVuIHRoZSB0YXNrIGdldHMgcmV1c2VkCi0gICAgICAgICAgICAgICAgICAgIC8vIGJ1dCBzdGlsbCBuZWVkcyB0byBiZSBhIGxvY2sgdGFzayBtb2RlIHZpb2xhdGlvbiBzaW5jZSB0aGUgdGFzayBnZXRzCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyZWQgb3V0IGFuZCB0aGUgZGV2aWNlIHdvdWxkIG90aGVyd2lzZSBsZWF2ZSB0aGUgbG9ja2VkIHRhc2suCi0gICAgICAgICAgICAgICAgICAgIGlmIChpc0xvY2tUYXNrTW9kZVZpb2xhdGlvbihpbnRlbnRBY3Rpdml0eS50YXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXVuY2hGbGFncyAmIChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfQ0xFQVJfVEFTSykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9ja1Rhc2tUb2FzdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgInN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQ6IEF0dGVtcHQgdG8gdmlvbGF0ZSBMb2NrIFRhc2sgTW9kZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyLnRhc2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgci50YXNrID0gaW50ZW50QWN0aXZpdHkudGFzazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50QWN0aXZpdHkudGFzay5pbnRlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB0YXNrIHdhcyBzdGFydGVkIGJlY2F1c2Ugb2YgbW92ZW1lbnQgb2YKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhY3Rpdml0eSBiYXNlZCBvbiBhZmZpbml0eS4uLiAgbm93IHRoYXQgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBhY3R1YWxseSBsYXVuY2hpbmcgaXQsIHdlIGNhbiBhc3NpZ24gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlIGludGVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrID0gaW50ZW50QWN0aXZpdHkudGFzay5zdGFjazsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgdGFzayBpcyBub3QgaW4gdGhlIGZyb250LCB0aGVuIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gYnJpbmcgaXQgdG8gdGhlIGZyb250Li4uICBleGNlcHQuLi4gIHdlbGwsIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgLy8gU0lOR0xFX1RBU0tfTEFVTkNIIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyLiAgV2UnZCBsaWtlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaWYgYSBuZXcgaW5zdGFuY2Ugd2FzCi0gICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIHN0YXJ0ZWQsIHdoaWNoIG1lYW5zIG5vdCBicmluZ2luZyBpdCB0byB0aGUgZnJvbnQKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGNhbGxlciBpcyBub3QgaXRzZWxmIGluIHRoZSBmcm9udC4KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBmb2N1c1N0YWNrID0gZ2V0Rm9jdXNlZFN0YWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGN1clRvcCA9IChmb2N1c1N0YWNrID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsIDogZm9jdXNTdGFjay50b3BSdW5uaW5nTm9uRGVsYXllZEFjdGl2aXR5TG9ja2VkKG5vdFRvcCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbW92ZWRUb0Zyb250ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJUb3AgIT0gbnVsbCAmJiAoY3VyVG9wLnRhc2sgIT0gaW50ZW50QWN0aXZpdHkudGFzayB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1clRvcC50YXNrICE9IGZvY3VzU3RhY2sudG9wVGFzaygpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgci5pbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfQlJPVUdIVF9UT19GUk9OVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlUmVjb3JkID09IG51bGwgfHwgKHNvdXJjZVN0YWNrLnRvcEFjdGl2aXR5KCkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGFjay50b3BBY3Rpdml0eSgpLnRhc2sgPT0gc291cmNlUmVjb3JkLnRhc2spKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgcmVhbGx5IGRvIHdhbnQgdG8gcHVzaCB0aGlzIG9uZSBpbnRvIHRoZSB1c2VyJ3MgZmFjZSwgcmlnaHQgbm93LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXVuY2hUYXNrQmVoaW5kICYmIHNvdXJjZVJlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnNldFRhc2tUb0FmZmlsaWF0ZVdpdGgoc291cmNlUmVjb3JkLnRhc2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlZEhvbWUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFN0YWNrLm1vdmVUYXNrVG9Gcm9udExvY2tlZChpbnRlbnRBY3Rpdml0eS50YXNrLCBub0FuaW1hdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMsIHIuYXBwVGltZVRyYWNrZXIsICJicmluZ2luZ0ZvdW5kVGFza1RvRnJvbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlZFRvRnJvbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1RBU0tfT05fSE9NRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYWxsZXIgd2FudHMgdG8gYXBwZWFyIG9uIGhvbWUgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0VGFza1RvUmV0dXJuVG8oSE9NRV9BQ1RJVklUWV9UWVBFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3ZlZFRvRnJvbnQgJiYgZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywgIkJyaW5nIHRvIGZyb250IHRhcmdldDogIiArIHRhcmdldFN0YWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBpbnRlbnRBY3Rpdml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgiaW50ZW50QWN0aXZpdHlGb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBoYXMgcmVxdWVzdGVkIHRoYXQgdGhlIHRhcmdldCB0YXNrIGJlCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlc2V0LCB0aGVuIGRvIHNvLgotICAgICAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzJkludGVudC5GTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eSA9IHRhcmdldFN0YWNrLnJlc2V0VGFza0lmTmVlZGVkTG9ja2VkKGludGVudEFjdGl2aXR5LCByKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MgJiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhIG5ldyBhY3Rpdml0eSwgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY2xpZW50IHNhaWQgbm90IHRvIGRvIGFueXRoaW5nIGlmIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHRoZSBjYXNlLCBzbyB0aGlzIGlzIGl0ISAgQW5kIGZvciBwYXJhbm9pYSwgbWFrZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3VyZSB3ZSBoYXZlIGNvcnJlY3RseSByZXN1bWVkIHRoZSB0b3AgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHRhcmdldFN0YWNrLCBudWxsLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBub3RpZnkgS2V5Z3VhcmQgYXMgd2VsbCBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcgYW4gYXBwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vdmVkVG9Gcm9udCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlBY3Rpdml0eURyYXduRm9yS2V5Z3VhcmQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJTdGFja0xvY2tlZChyLnVzZXJJZCwgdGFyZ2V0U3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9SRVRVUk5fSU5URU5UX1RPX0NBTExFUjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBoYXMgcmVxdWVzdGVkIHRvIGNvbXBsZXRlbHkgcmVwbGFjZSBhbnkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4aXN0aW5nIHRhc2sgd2l0aCBpdHMgbmV3IGFjdGl2aXR5LiAgV2VsbCB0aGF0IHNob3VsZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90IGJlIHRvbyBoYXJkLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICByZXVzZVRhc2sgPSBpbnRlbnRBY3Rpdml0eS50YXNrOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV1c2VUYXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlVGFzay5zZXRJbnRlbnQocik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9DTEVBUl9UT1ApICE9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIHNpdHVhdGlvbiB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgYWN0aXZpdGllcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgdGFzayB1cCB0byB0aGUgb25lIGJlaW5nIHN0YXJ0ZWQuICBJbiBtb3N0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXNlcyB0aGlzIG1lYW5zIHdlIGFyZSByZXNldHRpbmcgdGhlIHRhc2sgdG8gaXRzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0aWFsIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgdG9wID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkudGFzay5wZXJmb3JtQ2xlYXJUYXNrTG9ja2VkKHIsIGxhdW5jaEZsYWdzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3AuZnJvbnRPZlRhc2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZpdHkgYWxpYXNlcyBtYXkgbWVhbiB3ZSB1c2UgZGlmZmVyZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVudHMgZm9yIHRoZSB0b3AgYWN0aXZpdHksIHNvIG1ha2Ugc3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdGFzayBub3cgaGFzIHRoZSBpZGVudGl0eSBvZiB0aGUgbmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLnRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCB0b3AudGFzayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQoY2FsbGluZ1VpZCwgci5pbnRlbnQsIHIubGF1bmNoZWRGcm9tUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgc3BlY2lhbCBjYXNlOiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBhY3Rpdml0eSBiZWNhdXNlIGl0IGlzIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBydW5uaW5nLCBhbmQgdGhlIGNhbGxlciBoYXMgYXNrZWQgdG8gY2xlYXIgdGhlIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXNrIHRvIGhhdmUgdGhpcyBhY3Rpdml0eSBhdCB0aGUgdG9wLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHByZXRlbmQgbGlrZSB0aGlzIGFjdGl2aXR5IGlzIGJlaW5nIHN0YXJ0ZWQgYnkgdGhlIHRvcCBvZiBpdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXNrLCBzbyBpdCBpcyBwdXQgaW4gdGhlIHJpZ2h0IHBsYWNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY29yZCA9IGludGVudEFjdGl2aXR5OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhc2tSZWNvcmQgdGFzayA9IHNvdXJjZVJlY29yZC50YXNrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBzdGFjayBnb3QgY2xlYXJlZCB3aGVuIHdlIGFsbCBhY3Rpdml0aWVzIHdlcmUgcmVtb3ZlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhYm92ZS4gR28gYWhlYWQgYW5kIHJlc2V0IGl0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjayA9IGNvbXB1dGVTdGFja0ZvY3VzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVJlY29yZCwgZmFsc2UgLyogbmV3VGFzayAqLywgbnVsbCAvKiBib3VuZHMgKi8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5hZGRUYXNrKHRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWxhdW5jaFRhc2tCZWhpbmQgLyogdG9Ub3AgKi8sICJzdGFydEFjdGl2aXR5VW5jaGVja2VkIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoci5yZWFsQWN0aXZpdHkuZXF1YWxzKGludGVudEFjdGl2aXR5LnRhc2sucmVhbEFjdGl2aXR5KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHRoZSB0b3AgYWN0aXZpdHkgb24gdGhlIHRhc2sgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIGFzIHRoZSBvbmUgYmVpbmcgbGF1bmNoZWQsIHNvIHdlIHRha2UgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgYSByZXF1ZXN0IHRvIGJyaW5nIHRoZSB0YXNrIHRvIHRoZSBmb3JlZ3JvdW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHRvcCBhY3Rpdml0eSBpbiB0aGUgdGFzayBpcyB0aGUgcm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0aXZpdHksIGRlbGl2ZXIgdGhpcyBuZXcgaW50ZW50IHRvIGl0IGlmIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXNpcmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgobGF1bmNoRmxhZ3MmSW50ZW50LkZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMCB8fCBsYXVuY2hTaW5nbGVUb3ApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGludGVudEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMoci5yZWFsQWN0aXZpdHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5ULCByLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkudGFzayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudEFjdGl2aXR5LmZyb250T2ZUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKGNhbGxpbmdVaWQsIHIuaW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5sYXVuY2hlZEZyb21QYWNrYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXIuaW50ZW50LmZpbHRlckVxdWFscyhpbnRlbnRBY3Rpdml0eS50YXNrLmludGVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGxhdW5jaGluZyB0aGUgcm9vdCBhY3Rpdml0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB0YXNrLCBidXQgd2l0aCBhIGRpZmZlcmVudCBpbnRlbnQuICBXZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBzdGFydCBhIG5ldyBpbnN0YW5jZSBvbiB0b3AuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaW5nVG9UYXNrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBpbnRlbnRBY3Rpdml0eTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobGF1bmNoRmxhZ3MmSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERUQpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBhbiBhY3Rpdml0eSBpcyBiZWluZyBsYXVuY2hlZCBpbiB0byBhbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgdGFzaywgd2l0aG91dCByZXNldHRpbmcgdGhhdCB0YXNrLiAgVGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgdHlwaWNhbGx5IHRoZSBzaXR1YXRpb24gb2YgbGF1bmNoaW5nIGFuIGFjdGl2aXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGEgbm90aWZpY2F0aW9uIG9yIHNob3J0Y3V0LiAgV2Ugd2FudCB0byBwbGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIG5ldyBhY3Rpdml0eSBvbiB0b3Agb2YgdGhlIGN1cnJlbnQgdGFzay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGluZ1RvVGFzayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBpbnRlbnRBY3Rpdml0eTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaW50ZW50QWN0aXZpdHkudGFzay5yb290V2FzUmVzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgbGF1bmNoaW5nIGluIHRvIGFuIGV4aXN0aW5nIHRhc2sKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkIGZyb20gaXRzIGZyb250IGRvb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY3VycmVudCB0YXNrIGhhcyBiZWVuIGJyb3VnaHQgdG8gdGhlIGZyb250LgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlYWxseSwgd2UnZCBwcm9iYWJseSBsaWtlIHRvIHBsYWNlIHRoaXMgbmV3IHRhc2sKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0IHRoZSBib3R0b20gb2YgaXRzIHN0YWNrLCBidXQgdGhhdCdzIGEgbGl0dGxlIGhhcmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uIG9mIHRoZSBjb2RlIHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3Igbm93IHdlJ2xsIGp1c3QgZHJvcCBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWRkaW5nVG9UYXNrICYmIHJldXNlVGFzayA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZG8gYW55dGhpbmcuLi4gIGJ1dCBpdCB3YXMgbmVlZGVkIChhLmsuYS4sIGNsaWVudAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdXNlIHRoYXQgaW50ZW50ISkgIEFuZCBmb3IgcGFyYW5vaWEsIG1ha2UKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQobnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb3ZlZFRvRnJvbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIG5vdGlmeSBLZXlndWFyZCBhcyB3ZWxsIGlmIHdlIGFyZSBub3QgcnVubmluZyBhbiBhcHAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbiBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVVc2VyU3RhY2tMb2NrZWQoci51c2VySWQsIHRhcmdldFN0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vU3RyaW5nIHVyaSA9IHIuaW50ZW50LnRvVVJJKCk7Ci0gICAgICAgIC8vSW50ZW50IGludGVudDIgPSBuZXcgSW50ZW50KHVyaSk7Ci0gICAgICAgIC8vU2xvZy5pKFRBRywgIkdpdmVuIGludGVudDogIiArIHIuaW50ZW50KTsKLSAgICAgICAgLy9TbG9nLmkoVEFHLCAiVVJJIGlzOiAiICsgdXJpKTsKLSAgICAgICAgLy9TbG9nLmkoVEFHLCAiVG8gaW50ZW50OiAiICsgaW50ZW50Mik7Ci0KLSAgICAgICAgaWYgKHIucGFja2FnZU5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2aXR5IGJlaW5nIGxhdW5jaGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgY3VycmVudGx5Ci0gICAgICAgICAgICAvLyBhdCB0aGUgdG9wLCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgc2hvdWxkIG9ubHkgYmUgbGF1bmNoZWQKLSAgICAgICAgICAgIC8vIG9uY2UuCi0gICAgICAgICAgICBBY3Rpdml0eVN0YWNrIHRvcFN0YWNrID0gbUZvY3VzZWRTdGFjazsKLSAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHRvcFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobm90VG9wKTsKLSAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiByLnJlc3VsdFRvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAodG9wLnJlYWxBY3Rpdml0eS5lcXVhbHMoci5yZWFsQWN0aXZpdHkpICYmIHRvcC51c2VySWQgPT0gci51c2VySWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvcC5hcHAgIT0gbnVsbCAmJiB0b3AuYXBwLnRocmVhZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGxhdW5jaFNpbmdsZVRvcCB8fCBsYXVuY2hTaW5nbGVUYXNrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5ULCB0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AudGFzayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bWVkIHRoZSB0b3AgYWN0aXZpdHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wU3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhcnRGbGFncyZBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3IGFjdGl2aXR5LCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNsaWVudCBzYWlkIG5vdCB0byBkbyBhbnl0aGluZyBpZiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIHRoZSBjYXNlLCBzbyB0aGlzIGlzIGl0IQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChjYWxsaW5nVWlkLCByLmludGVudCwgci5sYXVuY2hlZEZyb21QYWNrYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0RFTElWRVJFRF9UT19UT1A7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChyLnJlc3VsdFRvICE9IG51bGwgJiYgci5yZXN1bHRUby50YXNrLnN0YWNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByLnJlc3VsdFRvLnRhc2suc3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKC0xLCByLnJlc3VsdFRvLCByLnJlc3VsdFdobywKLSAgICAgICAgICAgICAgICAgICAgICAgIHIucmVxdWVzdENvZGUsIEFjdGl2aXR5LlJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0NMQVNTX05PVF9GT1VORDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gbmV3VGFzayA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGtlZXBDdXJUcmFuc2l0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgVGFza1JlY29yZCB0YXNrVG9BZmZpbGlhdGUgPSBsYXVuY2hUYXNrQmVoaW5kICYmIHNvdXJjZVJlY29yZCAhPSBudWxsID8KLSAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQudGFzayA6IG51bGw7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHRoaXMgYmUgY29uc2lkZXJlZCBhIG5ldyB0YXNrPwotICAgICAgICBpZiAoci5yZXN1bHRUbyA9PSBudWxsICYmIGluVGFzayA9PSBudWxsICYmICFhZGRpbmdUb1Rhc2sKLSAgICAgICAgICAgICAgICAmJiAobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCkgewotICAgICAgICAgICAgbmV3VGFzayA9IHRydWU7Ci0gICAgICAgICAgICB0YXJnZXRTdGFjayA9IGNvbXB1dGVTdGFja0ZvY3VzKHIsIG5ld1Rhc2ssIG5ld0JvdW5kcyk7Ci0gICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgic3RhcnRpbmdOZXdUYXNrIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyZXVzZVRhc2sgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHIuc2V0VGFzayh0YXJnZXRTdGFjay5jcmVhdGVUYXNrUmVjb3JkKGdldE5leHRUYXNrSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2tJbmZvICE9IG51bGwgPyBuZXdUYXNrSW5mbyA6IHIuaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Rhc2tJbnRlbnQgIT0gbnVsbCA/IG5ld1Rhc2tJbnRlbnQgOiBpbnRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2ljZVNlc3Npb24sIHZvaWNlSW50ZXJhY3RvciwgIWxhdW5jaFRhc2tCZWhpbmQgLyogdG9Ub3AgKi8pLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFza1RvQWZmaWxpYXRlKTsKLSAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVCb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgci50YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbihuZXdCb3VuZHMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cudihUQUdfVEFTS1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAiU3RhcnRpbmcgbmV3IGFjdGl2aXR5ICIgKyByICsgIiBpbiBuZXcgdGFzayAiICsgci50YXNrKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgci5zZXRUYXNrKHJldXNlVGFzaywgdGFza1RvQWZmaWxpYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc0xvY2tUYXNrTW9kZVZpb2xhdGlvbihyLnRhc2spKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gcj0iICsgcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFtb3ZlZEhvbWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYKLSAgICAgICAgICAgICAgICAgICAgICAgIChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKQotICAgICAgICAgICAgICAgICAgICAgICAgPT0gKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1RBU0tfT05fSE9NRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2FsbGVyIHdhbnRzIHRvIGFwcGVhciBvbiBob21lIGFjdGl2aXR5LCBzbyBiZWZvcmUgc3RhcnRpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlaXIgb3duIGFjdGl2aXR5IHdlIHdpbGwgYnJpbmcgaG9tZSB0byB0aGUgZnJvbnQuCi0gICAgICAgICAgICAgICAgICAgIHIudGFzay5zZXRUYXNrVG9SZXR1cm5UbyhIT01FX0FDVElWSVRZX1RZUEUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VSZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCBzb3VyY2VUYXNrID0gc291cmNlUmVjb3JkLnRhc2s7Ci0gICAgICAgICAgICBpZiAoaXNMb2NrVGFza01vZGVWaW9sYXRpb24oc291cmNlVGFzaykpIHsKLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQXR0ZW1wdGVkIExvY2sgVGFzayBNb2RlIHZpb2xhdGlvbiByPSIgKyByKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9MT0NLX1RBU0tfTU9ERV9WSU9MQVRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0YXJnZXRTdGFjayA9IHNvdXJjZVRhc2suc3RhY2s7Ci0gICAgICAgICAgICBpZiAoZG9SZXN1bWUpIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgic291cmNlU3RhY2tUb0Zyb250Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRvcFRhc2sgPSB0YXJnZXRTdGFjay50b3BUYXNrKCk7Ci0gICAgICAgICAgICBpZiAodG9wVGFzayAhPSBzb3VyY2VUYXNrKSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subW92ZVRhc2tUb0Zyb250TG9ja2VkKHNvdXJjZVRhc2ssIG5vQW5pbWF0aW9uLCBvcHRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgci5hcHBUaW1lVHJhY2tlciwgInNvdXJjZVRhc2tUb0Zyb250Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWFkZGluZ1RvVGFzayAmJiAobGF1bmNoRmxhZ3MmSW50ZW50LkZMQUdfQUNUSVZJVFlfQ0xFQVJfVE9QKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgYWRkaW5nIHRoZSBhY3Rpdml0eSB0byBhbiBleGlzdGluZwotICAgICAgICAgICAgICAgIC8vIHRhc2ssIGJ1dCB0aGUgY2FsbGVyIGhhcyBhc2tlZCB0byBjbGVhciB0aGF0IHRhc2sgaWYgdGhlCi0gICAgICAgICAgICAgICAgLy8gYWN0aXZpdHkgaXMgYWxyZWFkeSBydW5uaW5nLgotICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHNvdXJjZVRhc2sucGVyZm9ybUNsZWFyVGFza0xvY2tlZChyLCBsYXVuY2hGbGFncyk7Ci0gICAgICAgICAgICAgICAga2VlcEN1clRyYW5zaXRpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIHIsIHRvcC50YXNrKTsKLSAgICAgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQoY2FsbGluZ1VpZCwgci5pbnRlbnQsIHIubGF1bmNoZWRGcm9tUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZvciBwYXJhbm9pYSwgbWFrZSBzdXJlIHdlIGhhdmUgY29ycmVjdGx5Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlc3VtZWQgdGhlIHRvcCBhY3Rpdml0eS4KLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0RFTElWRVJFRF9UT19UT1A7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmICghYWRkaW5nVG9UYXNrICYmCi0gICAgICAgICAgICAgICAgICAgIChsYXVuY2hGbGFncyZJbnRlbnQuRkxBR19BQ1RJVklUWV9SRU9SREVSX1RPX0ZST05UKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgbGF1bmNoaW5nIGFuIGFjdGl2aXR5IGluIG91ciBvd24gdGFzawotICAgICAgICAgICAgICAgIC8vIHRoYXQgbWF5IGFscmVhZHkgYmUgcnVubmluZyBzb21ld2hlcmUgaW4gdGhlIGhpc3RvcnksIGFuZAotICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gc2h1ZmZsZSBpdCB0byB0aGUgZnJvbnQgb2YgdGhlIHN0YWNrIGlmIHNvLgotICAgICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHNvdXJjZVRhc2suZmluZEFjdGl2aXR5SW5IaXN0b3J5TG9ja2VkKHIpOwotICAgICAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSB0b3AudGFzazsKLSAgICAgICAgICAgICAgICAgICAgdGFzay5tb3ZlQWN0aXZpdHlUb0Zyb250TG9ja2VkKHRvcCk7Ci0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShFdmVudExvZ1RhZ3MuQU1fTkVXX0lOVEVOVCwgciwgdGFzayk7Ci0gICAgICAgICAgICAgICAgICAgIHRvcC51cGRhdGVPcHRpb25zTG9ja2VkKG9wdGlvbnMpOwotICAgICAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChjYWxsaW5nVWlkLCByLmludGVudCwgci5sYXVuY2hlZEZyb21QYWNrYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb1Jlc3VtZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9ERUxJVkVSRURfVE9fVE9QOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFuIGV4aXN0aW5nIGFjdGl2aXR5IGlzIHN0YXJ0aW5nIHRoaXMgbmV3IGFjdGl2aXR5LCBzbyB3ZSB3YW50Ci0gICAgICAgICAgICAvLyB0byBrZWVwIHRoZSBuZXcgb25lIGluIHRoZSBzYW1lIHRhc2sgYXMgdGhlIG9uZSB0aGF0IGlzIHN0YXJ0aW5nCi0gICAgICAgICAgICAvLyBpdC4KLSAgICAgICAgICAgIHIuc2V0VGFzayhzb3VyY2VUYXNrLCBudWxsKTsKLSAgICAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgcgotICAgICAgICAgICAgICAgICAgICArICIgaW4gZXhpc3RpbmcgdGFzayAiICsgci50YXNrICsgIiBmcm9tIHNvdXJjZSAiICsgc291cmNlUmVjb3JkKTsKLQotICAgICAgICB9IGVsc2UgaWYgKGluVGFzayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBUaGUgY2FsbGVyIGlzIGFza2luZyB0aGF0IHRoZSBuZXcgYWN0aXZpdHkgYmUgc3RhcnRlZCBpbiBhbiBleHBsaWNpdAotICAgICAgICAgICAgLy8gdGFzayBpdCBoYXMgcHJvdmlkZWQgdG8gdXMuCi0gICAgICAgICAgICBpZiAoaXNMb2NrVGFza01vZGVWaW9sYXRpb24oaW5UYXNrKSkgewotICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJBdHRlbXB0ZWQgTG9jayBUYXNrIE1vZGUgdmlvbGF0aW9uIHI9IiArIHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvdmVycmlkZUJvdW5kcykgewotICAgICAgICAgICAgICAgIGluVGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24obmV3Qm91bmRzKTsKLSAgICAgICAgICAgICAgICBpbnQgc3RhY2tJZCA9IGluVGFzay5nZXRMYXVuY2hTdGFja0lkKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrSWQgIT0gaW5UYXNrLnN0YWNrLm1TdGFja0lkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja1VuY2hlY2tlZExvY2tlZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblRhc2ssIHN0YWNrSWQsIE9OX1RPUCwgIUZPUkNFX0ZPQ1VTLCAiaW5UYXNrVG9Gcm9udCIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRhcmdldFN0YWNrID0gaW5UYXNrLnN0YWNrOwotICAgICAgICAgICAgdGFyZ2V0U3RhY2subW92ZVRhc2tUb0Zyb250TG9ja2VkKGluVGFzaywgbm9BbmltYXRpb24sIG9wdGlvbnMsIHIuYXBwVGltZVRyYWNrZXIsCi0gICAgICAgICAgICAgICAgICAgICJpblRhc2tUb0Zyb250Iik7Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGFjdHVhbGx5IGxhdW5jaCB0aGUgbmV3IGFjdGl2aXR5IGluIHRvIHRoZSB0YXNrLAotICAgICAgICAgICAgLy8gb3IganVzdCByZXVzZSB0aGUgY3VycmVudCBhY3Rpdml0eSBvbiB0b3AuCi0gICAgICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSBpblRhc2suZ2V0VG9wQWN0aXZpdHkoKTsKLSAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AucmVhbEFjdGl2aXR5LmVxdWFscyhyLnJlYWxBY3Rpdml0eSkgJiYgdG9wLnVzZXJJZCA9PSByLnVzZXJJZCkgewotICAgICAgICAgICAgICAgIGlmICgobGF1bmNoRmxhZ3MgJiBJbnRlbnQuRkxBR19BQ1RJVklUWV9TSU5HTEVfVE9QKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBsYXVuY2hTaW5nbGVUb3AgfHwgbGF1bmNoU2luZ2xlVGFzaykgewotICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX05FV19JTlRFTlQsIHRvcCwgdG9wLnRhc2spOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MmQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNsaWVudCBzYWlkIG5vdCB0byBkbyBhbnl0aGluZyBpZiB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyB0aGUgY2FzZSwgc28gdGhpcyBpcyBpdCEKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0lOVEVOVF9UT19DQUxMRVI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQoY2FsbGluZ1VpZCwgci5pbnRlbnQsIHIubGF1bmNoZWRGcm9tUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYWRkaW5nVG9UYXNrKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBoYXZlIHRoaXMgYWN0aXZpdHkgYWRkZWQgdG8gdGhlIHRhc2ssIHNvIGp1c3QKLSAgICAgICAgICAgICAgICAvLyBzdG9wIGhlcmUgYnV0IHN0aWxsIHRlbGwgdGhlIGNhbGxlciB0aGF0IHdlIGNvbnN1bWVkIHRoZSBpbnRlbnQuCi0gICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfVEFTS19UT19GUk9OVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgci5zZXRUYXNrKGluVGFzaywgbnVsbCk7Ci0gICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cudihUQUdfVEFTS1MsICJTdGFydGluZyBuZXcgYWN0aXZpdHkgIiArIHIKLSAgICAgICAgICAgICAgICAgICAgKyAiIGluIGV4cGxpY2l0IHRhc2sgIiArIHIudGFzayk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgbm90IGJlaW5nIHN0YXJ0ZWQgZnJvbSBhbiBleGlzdGluZyBhY3Rpdml0eSwgYW5kIG5vdCBwYXJ0Ci0gICAgICAgICAgICAvLyBvZiBhIG5ldyB0YXNrLi4uICBqdXN0IHB1dCBpdCBpbiB0aGUgdG9wIHRhc2ssIHRob3VnaCB0aGVzZSBkYXlzCi0gICAgICAgICAgICAvLyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbi4KLSAgICAgICAgICAgIHRhcmdldFN0YWNrID0gY29tcHV0ZVN0YWNrRm9jdXMociwgbmV3VGFzaywgbnVsbCAvKiBib3VuZHMgKi8pOwotICAgICAgICAgICAgaWYgKGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoImFkZGluZ1RvVG9wVGFzayIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgcHJldiA9IHRhcmdldFN0YWNrLnRvcEFjdGl2aXR5KCk7Ci0gICAgICAgICAgICByLnNldFRhc2socHJldiAhPSBudWxsID8gcHJldi50YXNrIDogdGFyZ2V0U3RhY2suY3JlYXRlVGFza1JlY29yZChnZXROZXh0VGFza0lkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5pbmZvLCBpbnRlbnQsIG51bGwsIG51bGwsIHRydWUpLCBudWxsKTsKLSAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLm1vdmVUYXNrVG9Ub3Aoci50YXNrLnRhc2tJZCk7Ci0gICAgICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cudihUQUdfVEFTS1MsICJTdGFydGluZyBuZXcgYWN0aXZpdHkgIiArIHIKLSAgICAgICAgICAgICAgICAgICAgKyAiIGluIG5ldyBndWVzc2VkICIgKyByLnRhc2spOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNlcnZpY2UuZ3JhbnRVcmlQZXJtaXNzaW9uRnJvbUludGVudExvY2tlZChjYWxsaW5nVWlkLCByLnBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgIGludGVudCwgci5nZXRVcmlQZXJtaXNzaW9uc0xvY2tlZCgpLCByLnVzZXJJZCk7Ci0KLSAgICAgICAgaWYgKHNvdXJjZVJlY29yZCAhPSBudWxsICYmIHNvdXJjZVJlY29yZC5pc1JlY2VudHNBY3Rpdml0eSgpKSB7Ci0gICAgICAgICAgICByLnRhc2suc2V0VGFza1RvUmV0dXJuVG8oUkVDRU5UU19BQ1RJVklUWV9UWVBFKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobmV3VGFzaykgewotICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuQU1fQ1JFQVRFX1RBU0ssIHIudXNlcklkLCByLnRhc2sudGFza0lkKTsKLSAgICAgICAgfQotICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoRXZlbnRMb2dUYWdzLkFNX0NSRUFURV9BQ1RJVklUWSwgciwgci50YXNrKTsKLSAgICAgICAgdGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7Ci0gICAgICAgIHRhcmdldFN0YWNrLnN0YXJ0QWN0aXZpdHlMb2NrZWQociwgbmV3VGFzaywgZG9SZXN1bWUsIGtlZXBDdXJUcmFuc2l0aW9uLCBvcHRpb25zKTsKLSAgICAgICAgaWYgKCFsYXVuY2hUYXNrQmVoaW5kICYmIGRvUmVzdW1lKSB7Ci0gICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQociwgInN0YXJ0ZWRBY3Rpdml0eSIpOwotICAgICAgICB9Ci0gICAgICAgIHVwZGF0ZVVzZXJTdGFja0xvY2tlZChyLnVzZXJJZCwgdGFyZ2V0U3RhY2spOwotCi0gICAgICAgIGlmICghci50YXNrLm1SZXNpemVhYmxlICYmIGlzU3RhY2tEb2NrZWRJbkVmZmVjdCh0YXJnZXRTdGFjay5tU3RhY2tJZCkpIHsKLSAgICAgICAgICAgIHNob3dOb25SZXNpemVhYmxlRG9ja1RvYXN0KHIudGFzay50YXNrSWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgZG9QZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChib29sZWFuIGRvUmVzdW1lKSB7Ci0gICAgICAgIHdoaWxlICghbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgUGVuZGluZ0FjdGl2aXR5TGF1bmNoIHBhbCA9IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5yZW1vdmUoMCk7Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc3RhcnRBY3Rpdml0eVVuY2hlY2tlZExvY2tlZChwYWwuciwgcGFsLnNvdXJjZVJlY29yZCwgbnVsbCwgbnVsbCwgcGFsLnN0YXJ0RmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb1Jlc3VtZSAmJiBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuaXNFbXB0eSgpLCBudWxsLCBudWxsKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkV4Y2VwdGlvbiBkdXJpbmcgcGVuZGluZyBhY3Rpdml0eSBsYXVuY2ggcGFsPSIgKyBwYWwsIGUpOwotICAgICAgICAgICAgICAgIHBhbC5zZW5kRXJyb3JSZXN1bHQoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmVQZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChBY3Rpdml0eVN0YWNrIHN0YWNrKSB7Ci0gICAgICAgIGZvciAoaW50IHBhbE5keCA9IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5zaXplKCkgLSAxOyBwYWxOZHggPj0gMDsgLS1wYWxOZHgpIHsKLSAgICAgICAgICAgIFBlbmRpbmdBY3Rpdml0eUxhdW5jaCBwYWwgPSBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuZ2V0KHBhbE5keCk7Ci0gICAgICAgICAgICBpZiAocGFsLnN0YWNrID09IHN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLnJlbW92ZShwYWxOZHgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBzZXRMYXVuY2hTb3VyY2UoaW50IHVpZCkgewogICAgICAgICBtTGF1bmNoaW5nQWN0aXZpdHkuc2V0V29ya1NvdXJjZShuZXcgV29ya1NvdXJjZSh1aWQpKTsKICAgICB9CkBAIC0yODEzLDcgKzE1MjYsNyBAQAogICAgICAgICAvL21XaW5kb3dNYW5hZ2VyLmR1bXAoKTsKIAogICAgICAgICBpZiAoYWN0aXZpdHlSZW1vdmVkKSB7Ci0gICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHI7CkBAIC0yOTA2LDM1ICsxNjE5LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKSB7Ci0gICAgICAgIHJldHVybiByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKG51bGwsIG51bGwsIG51bGwpOworICAgIGJvb2xlYW4gcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKSB7CisgICAgICAgIHJldHVybiByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZChudWxsLCBudWxsLCBudWxsKTsKICAgICB9CiAKLSAgICBib29sZWFuIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoCisgICAgYm9vbGVhbiByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgKICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2sgdGFyZ2V0U3RhY2ssIEFjdGl2aXR5UmVjb3JkIHRhcmdldCwgQWN0aXZpdHlPcHRpb25zIHRhcmdldE9wdGlvbnMpIHsKLSAgICAgICAgaWYgKHRhcmdldFN0YWNrID09IG51bGwpIHsKLSAgICAgICAgICAgIHRhcmdldFN0YWNrID0gbUZvY3VzZWRTdGFjazsKKyAgICAgICAgaWYgKHRhcmdldFN0YWNrICE9IG51bGwgJiYgaXNGb2N1c2VkU3RhY2sodGFyZ2V0U3RhY2spKSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQodGFyZ2V0LCB0YXJnZXRPcHRpb25zKTsKICAgICAgICAgfQotICAgICAgICAvLyBEbyB0YXJnZXRTdGFjayBmaXJzdC4KLSAgICAgICAgYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzRm9jdXNlZFN0YWNrKHRhcmdldFN0YWNrKSkgewotICAgICAgICAgICAgcmVzdWx0ID0gdGFyZ2V0U3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQodGFyZ2V0LCB0YXJnZXRPcHRpb25zKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGRpc3BsYXlOZHggPSBtQWN0aXZpdHlEaXNwbGF5cy5zaXplKCkgLSAxOyBkaXNwbGF5TmR4ID49IDA7IC0tZGlzcGxheU5keCkgewotICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IHN0YWNrcyA9IG1BY3Rpdml0eURpc3BsYXlzLnZhbHVlQXQoZGlzcGxheU5keCkubVN0YWNrczsKLSAgICAgICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gc3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gc3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWNrID09IHRhcmdldFN0YWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgc3RhcnRlZCBhYm92ZS4KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc0ZvY3VzZWRTdGFjayhzdGFjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzdW1lVG9wQWN0aXZpdHlMb2NrZWQobnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1Gb2N1c2VkU3RhY2sucmVzdW1lVG9wQWN0aXZpdHlVbmNoZWNrZWRMb2NrZWQobnVsbCwgbnVsbCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaFRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZChQcm9jZXNzUmVjb3JkIGFwcCwgU3RyaW5nIHJlYXNvbikgewpAQCAtMjk3NiwxMCArMTY3MSwxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRhc2subVJlc2l6ZWFibGUgJiYgb3B0aW9ucyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoY2FuVXNlQWN0aXZpdHlPcHRpb25zTGF1bmNoQm91bmRzKG9wdGlvbnMpKSB7Ci0gICAgICAgICAgICAgICAgUmVjdCBib3VuZHMgPSBvcHRpb25zLmdldExhdW5jaEJvdW5kcygpOworICAgICAgICAgICAgaW50IHN0YWNrSWQgPSBvcHRpb25zLmdldExhdW5jaFN0YWNrSWQoKTsKKyAgICAgICAgICAgIGlmIChjYW5Vc2VBY3Rpdml0eU9wdGlvbnNMYXVuY2hCb3VuZHMob3B0aW9ucywgc3RhY2tJZCkpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBSZWN0IGJvdW5kcyA9IFRhc2tSZWNvcmQudmFsaWRhdGVCb3VuZHMob3B0aW9ucy5nZXRMYXVuY2hCb3VuZHMoKSk7CiAgICAgICAgICAgICAgICAgdGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24oYm91bmRzKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IHRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpOworICAgICAgICAgICAgICAgIGlmIChzdGFja0lkID09IElOVkFMSURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2tJZCA9IHRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc3RhY2tJZCAhPSB0YXNrLnN0YWNrLm1TdGFja0lkKSB7CiAgICAgICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja1VuY2hlY2tlZExvY2tlZCh0YXNrLCBzdGFja0lkLCBPTl9UT1AsICFGT1JDRV9GT0NVUywgcmVhc29uKTsKICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZVRhc2tUb1N0YWNrVW5jaGVja2VkTG9ja2VkKCkgc2hvdWxkIGFscmVhZHkgcGxhY2VkIHRoZSB0YXNrIG9uIHRvcCwKQEAgLTMwMDEsMTAgKzE2OTksMTQgQEAKICAgICAgICAgICAgICAgICAiZmluZFRhc2tUb01vdmVUb0Zyb250OiBtb3ZlZCB0byBmcm9udCBvZiBzdGFjaz0iICsgdGFzay5zdGFjayk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGNhblVzZUFjdGl2aXR5T3B0aW9uc0xhdW5jaEJvdW5kcyhBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucykgeworICAgIGJvb2xlYW4gY2FuVXNlQWN0aXZpdHlPcHRpb25zTGF1bmNoQm91bmRzKEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zLCBpbnQgbGF1bmNoU3RhY2tJZCkgewogICAgICAgICAvLyBXZSB1c2UgdGhlIGxhdW5jaCBib3VuZHMgaW4gdGhlIGFjdGl2aXR5IG9wdGlvbnMgaXMgdGhlIGRldmljZSBzdXBwb3J0cyBmcmVlZm9ybQotICAgICAgICAvLyB3aW5kb3cgbWFuYWdlbWVudC4KLSAgICAgICAgcmV0dXJuIG9wdGlvbnMuaGFzTGF1bmNoQm91bmRzKCkgJiYgbVNlcnZpY2UubVN1cHBvcnRzRnJlZWZvcm1XaW5kb3dNYW5hZ2VtZW50OworICAgICAgICAvLyB3aW5kb3cgbWFuYWdlbWVudCBvciBpcyBsYXVuY2hpbmcgaW50byB0aGUgcGlubmVkIHN0YWNrLgorICAgICAgICBpZiAoIW9wdGlvbnMuaGFzTGF1bmNoQm91bmRzKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKG1TZXJ2aWNlLm1TdXBwb3J0c1BpY3R1cmVJblBpY3R1cmUgJiYgbGF1bmNoU3RhY2tJZCA9PSBQSU5ORURfU1RBQ0tfSUQpCisgICAgICAgICAgICAgICAgfHwgbVNlcnZpY2UubVN1cHBvcnRzRnJlZWZvcm1XaW5kb3dNYW5hZ2VtZW50OwogICAgIH0KIAogICAgIEFjdGl2aXR5U3RhY2sgZ2V0U3RhY2soaW50IHN0YWNrSWQpIHsKQEAgLTMxMDEsMTYgKzE4MDMsMjAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgcmVzaXplU3RhY2tMb2NrZWQoaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzLCBib29sZWFuIHByZXNlcnZlV2luZG93cywKLSAgICAgICAgICAgIGJvb2xlYW4gYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpIHsKKyAgICB2b2lkIHJlc2l6ZVN0YWNrTG9ja2VkKGludCBzdGFja0lkLCBSZWN0IGJvdW5kcywgUmVjdCB0ZW1wVGFza0JvdW5kcywgUmVjdCB0ZW1wVGFza0luc2V0Qm91bmRzLAorICAgICAgICAgICAgYm9vbGVhbiBwcmVzZXJ2ZVdpbmRvd3MsIGJvb2xlYW4gYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUpIHsKKyAgICAgICAgaWYgKHN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7CisgICAgICAgICAgICByZXNpemVEb2NrZWRTdGFja0xvY2tlZChib3VuZHMsIHRlbXBUYXNrQm91bmRzLCB0ZW1wVGFza0luc2V0Qm91bmRzLCBudWxsLCBudWxsLAorICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZVdpbmRvd3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBnZXRTdGFjayhzdGFja0lkKTsKICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKICAgICAgICAgICAgIFNsb2cudyhUQUcsICJyZXNpemVTdGFjazogc3RhY2tJZCAiICsgc3RhY2tJZCArICIgbm90IGZvdW5kLiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZQotICAgICAgICAgICAgICAgICYmIHN0YWNrSWQgIT0gRE9DS0VEX1NUQUNLX0lEICYmIGdldFN0YWNrKERPQ0tFRF9TVEFDS19JRCkgIT0gbnVsbCkgeworICAgICAgICBpZiAoIWFsbG93UmVzaXplSW5Eb2NrZWRNb2RlICYmIGdldFN0YWNrKERPQ0tFRF9TVEFDS19JRCkgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gSWYgdGhlIGRvY2tlZCBzdGFjayBleGlzdCB3ZSBkb24ndCBhbGxvdyByZXNpemVzIG9mIHN0YWNrcyBub3QgY2F1c2VkIGJ5IHRoZSBkb2NrZWQKICAgICAgICAgICAgIC8vIHN0YWNrIHNpemUgY2hhbmdpbmcgc28gdGhpbmdzIGRvbid0IGdldCBvdXQgb2Ygc3luYy4KICAgICAgICAgICAgIHJldHVybjsKQEAgLTMxMTksOTIgKzE4MjUsMTQ0IEBACiAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIsICJhbS5yZXNpemVTdGFja18iICsgc3RhY2tJZCk7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLmRlZmVyU3VyZmFjZUxheW91dCgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IHN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpOwotCi0gICAgICAgICAgICBtVG1wQm91bmRzLmNsZWFyKCk7Ci0gICAgICAgICAgICBtVG1wQ29uZmlncy5jbGVhcigpOwotICAgICAgICAgICAgQXJyYXlMaXN0PFRhc2tSZWNvcmQ+IHRhc2tzID0gc3RhY2suZ2V0QWxsVGFza3MoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSB0YXNrcy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIFRhc2tSZWNvcmQgdGFzayA9IHRhc2tzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAodGFzay5tUmVzaXplYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subVN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZnJlZWZvcm0gc3RhY2sgd2UgZG9uJ3QgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB0YXNrcyB0byBtYXRjaCB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc3RhY2ssIGJ1dCB3ZSBkbyB0cnkgdG8gbWFrZSBzdXJlIHRoZSB0YXNrcyBhcmUgc3RpbGwgY29udGFpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBib3VuZHMgb2YgdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJlY3QyLnNldCh0YXNrLm1Cb3VuZHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZml0V2l0aGluQm91bmRzKHRlbXBSZWN0MiwgYm91bmRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKHRlbXBSZWN0Mik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbihib3VuZHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbVRtcENvbmZpZ3MucHV0KHRhc2sudGFza0lkLCB0YXNrLm1PdmVycmlkZUNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgbVRtcEJvdW5kcy5wdXQodGFzay50YXNrSWQsIHRhc2subUJvdW5kcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFjay5tRnVsbHNjcmVlbiA9IG1XaW5kb3dNYW5hZ2VyLnJlc2l6ZVN0YWNrKHN0YWNrSWQsIGJvdW5kcywgbVRtcENvbmZpZ3MsIG1UbXBCb3VuZHMpOwotICAgICAgICAgICAgaWYgKHN0YWNrLm1TdGFja0lkID09IERPQ0tFRF9TVEFDS19JRCkgewotICAgICAgICAgICAgICAgIC8vIERvY2sgc3RhY2sgZnVubmVzcy4uLllheSEKLSAgICAgICAgICAgICAgICBpZiAoc3RhY2subUZ1bGxzY3JlZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGRvY2sgc3RhY2sgd2VudCBmdWxsc2NyZWVuIHdoaWNoIGlzIGtpbmRhIGxpa2UgZGlzbWlzc2luZyBpdC4KLSAgICAgICAgICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIG1ha2UgYWxsIG90aGVyIHN0YXRpYyBzdGFja3MgZnVsbHNjcmVlbiBhbmQgbW92ZSBhbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gZG9ja2VkIHN0YWNrIHRhc2tzIHRvIHRoZSBmdWxsc2NyZWVuIHN0YWNrLgotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gRklSU1RfU1RBVElDX1NUQUNLX0lEOyBpIDw9IExBU1RfU1RBVElDX1NUQUNLX0lEOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdGFja0lkLmlzUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2soaSkgJiYgZ2V0U3RhY2soaSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YWNrTG9ja2VkKGksIG51bGwsIHByZXNlcnZlV2luZG93cywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSB0YXNrcy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRhc2tUb1N0YWNrTG9ja2VkKHRhc2tzLmdldChpKS50YXNrSWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lELCBPTl9UT1AsIEZPUkNFX0ZPQ1VTLCAicmVzaXplU3RhY2siLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBhbmltYXRlICovKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0YWNrIHNob3VsZG4ndCBjb250YWluIGFueW1vcmUgYWN0aXZpdGllcywgc28gbm90aGluZyB0byByZXN1bWUuCi0gICAgICAgICAgICAgICAgICAgIHIgPSBudWxsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIERvY2tlZCBzdGFja3Mgb2NjdXB5IGEgZGVkaWNhdGVkIHJlZ2lvbiBvbiBzY3JlZW4gc28gdGhlIHNpemUgb2YgYWxsIG90aGVyCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0YXRpYyBzdGFja3MgbmVlZCB0byBiZSBhZGp1c3RlZCBzbyB0aGV5IGRvbid0IG92ZXJsYXAgd2l0aCB0aGUgZG9ja2VkIHN0YWNrLgotICAgICAgICAgICAgICAgICAgICAvLyBXZSBnZXQgdGhlIGJvdW5kcyB0byB1c2UgZnJvbSB3aW5kb3cgbWFuYWdlciB3aGljaCBoYXMgYmVlbiBhZGp1c3RlZCBmb3IgYW55Ci0gICAgICAgICAgICAgICAgICAgIC8vIHNjcmVlbiBjb250cm9scyBhbmQgaXMgYWxzbyB0aGUgc2FtZSBmb3IgYWxsIHN0YWNrcy4KLSAgICAgICAgICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuZ2V0U3RhY2tEb2NrZWRNb2RlQm91bmRzKEhPTUVfU1RBQ0tfSUQsIHRlbXBSZWN0KTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gRklSU1RfU1RBVElDX1NUQUNLX0lEOyBpIDw9IExBU1RfU1RBVElDX1NUQUNLX0lEOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdGFja0lkLmlzUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2soaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrIG90aGVyU3RhY2sgPSBnZXRTdGFjayhpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJTdGFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YWNrTG9ja2VkKGksIHRlbXBSZWN0LCBQUkVTRVJWRV9XSU5ET1dTLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIHJlc2l6aW5nIHRoZSBzdGFjaywgYWxsIG90aGVyIG9wZXJhdGlvbnMgc2hvdWxkIHN0cml2ZSB0byBwcmVzZXJ2ZQotICAgICAgICAgICAgICAgIC8vIHdpbmRvd3MuCi0gICAgICAgICAgICAgICAgcHJlc2VydmVXaW5kb3dzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YWNrLnNldEJvdW5kcyhib3VuZHMpOwotCi0gICAgICAgICAgICBpZiAociAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1cGRhdGVkID0gc3RhY2suZW5zdXJlQWN0aXZpdHlDb25maWd1cmF0aW9uTG9ja2VkKHIsIDAsIHByZXNlcnZlV2luZG93cyk7Ci0gICAgICAgICAgICAgICAgLy8gQW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGF0IHRoaXMgcG9pbnQgdGhhdCBhbGwgb3RoZXIgYWN0aXZpdGllcwotICAgICAgICAgICAgICAgIC8vIGFyZSBtYWRlIHZpc2libGUgd2l0aCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLgotICAgICAgICAgICAgICAgIGVuc3VyZUFjdGl2aXRpZXNWaXNpYmxlTG9ja2VkKHIsIDAsIHByZXNlcnZlV2luZG93cyk7Ci0gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoc3RhY2ssIG51bGwsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc2l6ZVN0YWNrVW5jaGVja2VkTG9ja2VkKHN0YWNrLCBib3VuZHMsIHRlbXBUYXNrQm91bmRzLCB0ZW1wVGFza0luc2V0Qm91bmRzKTsKKyAgICAgICAgICAgIGVuc3VyZUNvbmZpZ3VyYXRpb25BbmRSZXN1bWUoc3RhY2ssIHN0YWNrLnRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpLCBwcmVzZXJ2ZVdpbmRvd3MpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuY29udGludWVTdXJmYWNlTGF5b3V0KCk7CiAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHJlc2l6ZVRhc2tMb2NrZWQoVGFza1JlY29yZCB0YXNrLCBSZWN0IGJvdW5kcywgaW50IHJlc2l6ZU1vZGUsIGJvb2xlYW4gcHJlc2VydmVXaW5kb3cpIHsKKyAgICBwcml2YXRlIHZvaWQgcmVzaXplU3RhY2tVbmNoZWNrZWRMb2NrZWQoQWN0aXZpdHlTdGFjayBzdGFjaywgUmVjdCBib3VuZHMsIFJlY3QgdGVtcFRhc2tCb3VuZHMsCisgICAgICAgICAgICBSZWN0IHRlbXBUYXNrSW5zZXRCb3VuZHMpIHsKKyAgICAgICAgaWYgKGJvdW5kcyAhPSBudWxsICYmIG1XaW5kb3dNYW5hZ2VyLmlzRnVsbHNjcmVlbkJvdW5kcyhzdGFjay5tU3RhY2tJZCwgYm91bmRzKSkgeworICAgICAgICAgICAgLy8gVGhlIGJvdW5kcyBwYXNzZWQgaW4gY29ycmVzcG9uZHMgdG8gdGhlIGZ1bGxzY3JlZW4gYm91bmRzIHdoaWNoIHdlIG5vcm1hbGx5CisgICAgICAgICAgICAvLyByZXByZXNlbnQgd2l0aCBudWxsLiBHbyBhaGVhZCBhbmQgc2V0IGl0IHRvIG51bGwgc28gdGhhdCBhbGwgdGFza3MgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgLy8gY2FuIGhhdmUgdGhlIHJpZ2h0IGZ1bGxzY3JlZW4gc3RhdGUuCisgICAgICAgICAgICBib3VuZHMgPSBudWxsOworICAgICAgICB9CisgICAgICAgIGJvdW5kcyA9IFRhc2tSZWNvcmQudmFsaWRhdGVCb3VuZHMoYm91bmRzKTsKKworICAgICAgICBtVG1wQm91bmRzLmNsZWFyKCk7CisgICAgICAgIG1UbXBDb25maWdzLmNsZWFyKCk7CisgICAgICAgIG1UbXBJbnNldEJvdW5kcy5jbGVhcigpOworICAgICAgICBBcnJheUxpc3Q8VGFza1JlY29yZD4gdGFza3MgPSBzdGFjay5nZXRBbGxUYXNrcygpOworICAgICAgICBmb3IgKGludCBpID0gdGFza3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIFRhc2tSZWNvcmQgdGFzayA9IHRhc2tzLmdldChpKTsKKyAgICAgICAgICAgIGlmICh0YXNrLm1SZXNpemVhYmxlKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZnJlZWZvcm0gc3RhY2sgd2UgZG9uJ3QgYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB0YXNrcyB0byBtYXRjaCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzdGFjaywgYnV0IHdlIGRvIHRyeSB0byBtYWtlIHN1cmUgdGhlIHRhc2tzIGFyZSBzdGlsbCBjb250YWluZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgYm91bmRzIG9mIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICAgICAgdGVtcFJlY3QyLnNldCh0YXNrLm1Cb3VuZHMpOworICAgICAgICAgICAgICAgICAgICBmaXRXaXRoaW5Cb3VuZHModGVtcFJlY3QyLCBib3VuZHMpOworICAgICAgICAgICAgICAgICAgICB0YXNrLnVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbih0ZW1wUmVjdDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBUYXNrQm91bmRzICE9IG51bGwgPyB0ZW1wVGFza0JvdW5kcyA6IGJvdW5kcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtVG1wQ29uZmlncy5wdXQodGFzay50YXNrSWQsIHRhc2subU92ZXJyaWRlQ29uZmlnKTsKKyAgICAgICAgICAgIG1UbXBCb3VuZHMucHV0KHRhc2sudGFza0lkLCB0YXNrLm1Cb3VuZHMpOworICAgICAgICAgICAgaWYgKHRlbXBUYXNrSW5zZXRCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1UbXBJbnNldEJvdW5kcy5wdXQodGFzay50YXNrSWQsIHRlbXBUYXNrSW5zZXRCb3VuZHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgbWlnaHQgdHJpZ2dlciBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLiBTYXZlIHRoZSBjdXJyZW50IHRhc2sgYm91bmRzIGZvciBmcmVlemluZy4KKyAgICAgICAgbVdpbmRvd01hbmFnZXIucHJlcGFyZUZyZWV6aW5nVGFza0JvdW5kcyhzdGFjay5tU3RhY2tJZCk7CisgICAgICAgIHN0YWNrLm1GdWxsc2NyZWVuID0gbVdpbmRvd01hbmFnZXIucmVzaXplU3RhY2soc3RhY2subVN0YWNrSWQsIGJvdW5kcywgbVRtcENvbmZpZ3MsCisgICAgICAgICAgICAgICAgbVRtcEJvdW5kcywgbVRtcEluc2V0Qm91bmRzKTsKKyAgICAgICAgc3RhY2suc2V0Qm91bmRzKGJvdW5kcyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuc3VyZUNvbmZpZ3VyYXRpb25BbmRSZXN1bWUoQWN0aXZpdHlTdGFjayBzdGFjaywgQWN0aXZpdHlSZWNvcmQgciwKKyAgICAgICAgICAgIGJvb2xlYW4gcHJlc2VydmVXaW5kb3dzKSB7CisgICAgICAgIGlmIChyID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBib29sZWFuIHVwZGF0ZWQgPSBzdGFjay5lbnN1cmVBY3Rpdml0eUNvbmZpZ3VyYXRpb25Mb2NrZWQociwgMCwKKyAgICAgICAgICAgICAgICBwcmVzZXJ2ZVdpbmRvd3MpOworICAgICAgICAvLyBBbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgYXQgdGhpcyBwb2ludCB0aGF0IGFsbCBvdGhlciBhY3Rpdml0aWVzCisgICAgICAgIC8vIGFyZSBtYWRlIHZpc2libGUgd2l0aCB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uLgorICAgICAgICBlbnN1cmVBY3Rpdml0aWVzVmlzaWJsZUxvY2tlZChyLCAwLCBwcmVzZXJ2ZVdpbmRvd3MpOworICAgICAgICBpZiAoIXVwZGF0ZWQpIHsKKyAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKFJlY3QgZG9ja2VkQm91bmRzLCBSZWN0IHRlbXBEb2NrZWRUYXNrQm91bmRzLAorICAgICAgICAgICAgUmVjdCB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzLAorICAgICAgICAgICAgUmVjdCB0ZW1wT3RoZXJUYXNrQm91bmRzLCBSZWN0IHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcywgYm9vbGVhbiBwcmVzZXJ2ZVdpbmRvd3MpIHsKKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldFN0YWNrKERPQ0tFRF9TVEFDS19JRCk7CisgICAgICAgIGlmIChzdGFjayA9PSBudWxsKSB7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAicmVzaXplRG9ja2VkU3RhY2tMb2NrZWQ6IGRvY2tlZCBzdGFjayBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVFJBQ0VfVEFHX0FDVElWSVRZX01BTkFHRVIsICJhbS5yZXNpemVEb2NrZWRTdGFjayIpOworICAgICAgICBtV2luZG93TWFuYWdlci5kZWZlclN1cmZhY2VMYXlvdXQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHIgPSBzdGFjay50b3BSdW5uaW5nQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIHJlc2l6ZVN0YWNrVW5jaGVja2VkTG9ja2VkKHN0YWNrLCBkb2NrZWRCb3VuZHMsIHRlbXBEb2NrZWRUYXNrQm91bmRzLAorICAgICAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0luc2V0Qm91bmRzKTsKKworICAgICAgICAgICAgaWYgKHN0YWNrLm1GdWxsc2NyZWVuKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGRvY2sgc3RhY2sgd2VudCBmdWxsc2NyZWVuIHdoaWNoIGlzIGtpbmRhIGxpa2UgZGlzbWlzc2luZyBpdC4KKyAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgbWFrZSBhbGwgb3RoZXIgc3RhdGljIHN0YWNrcyBmdWxsc2NyZWVuIGFuZCBtb3ZlIGFsbAorICAgICAgICAgICAgICAgIC8vIGRvY2tlZCBzdGFjayB0YXNrcyB0byB0aGUgZnVsbHNjcmVlbiBzdGFjay4KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gRklSU1RfU1RBVElDX1NUQUNLX0lEOyBpIDw9IExBU1RfU1RBVElDX1NUQUNLX0lEOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFN0YWNrSWQuaXNSZXNpemVhYmxlQnlEb2NrZWRTdGFjayhpKSAmJiBnZXRTdGFjayhpKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChpLCBudWxsLCBudWxsLCBudWxsLCBwcmVzZXJ2ZVdpbmRvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgLyogYWxsb3dSZXNpemVJbkRvY2tlZE1vZGUgKi8pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFRhc2tSZWNvcmQ+IHRhc2tzID0gc3RhY2suZ2V0QWxsVGFza3MoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSB0YXNrcy5zaXplKCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja0xvY2tlZCh0YXNrcy5nZXQoaSkudGFza0lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lELCBPTl9UT1AsIEZPUkNFX0ZPQ1VTLCAicmVzaXplU3RhY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGFuaW1hdGUgKi8pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIHN0YWNrIHNob3VsZG4ndCBjb250YWluIGFueW1vcmUgYWN0aXZpdGllcywgc28gbm90aGluZyB0byByZXN1bWUuCisgICAgICAgICAgICAgICAgciA9IG51bGw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIERvY2tlZCBzdGFja3Mgb2NjdXB5IGEgZGVkaWNhdGVkIHJlZ2lvbiBvbiBzY3JlZW4gc28gdGhlIHNpemUgb2YgYWxsIG90aGVyCisgICAgICAgICAgICAgICAgLy8gc3RhdGljIHN0YWNrcyBuZWVkIHRvIGJlIGFkanVzdGVkIHNvIHRoZXkgZG9uJ3Qgb3ZlcmxhcCB3aXRoIHRoZSBkb2NrZWQgc3RhY2suCisgICAgICAgICAgICAgICAgLy8gV2UgZ2V0IHRoZSBib3VuZHMgdG8gdXNlIGZyb20gd2luZG93IG1hbmFnZXIgd2hpY2ggaGFzIGJlZW4gYWRqdXN0ZWQgZm9yIGFueQorICAgICAgICAgICAgICAgIC8vIHNjcmVlbiBjb250cm9scyBhbmQgaXMgYWxzbyB0aGUgc2FtZSBmb3IgYWxsIHN0YWNrcy4KKyAgICAgICAgICAgICAgICBtV2luZG93TWFuYWdlci5nZXRTdGFja0RvY2tlZE1vZGVCb3VuZHMoSE9NRV9TVEFDS19JRCwgdGVtcFJlY3QpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBGSVJTVF9TVEFUSUNfU1RBQ0tfSUQ7IGkgPD0gTEFTVF9TVEFUSUNfU1RBQ0tfSUQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoU3RhY2tJZC5pc1Jlc2l6ZWFibGVCeURvY2tlZFN0YWNrKGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrIG90aGVyU3RhY2sgPSBnZXRTdGFjayhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlclN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChpLCB0ZW1wUmVjdCwgdGVtcE90aGVyVGFza0JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBPdGhlclRhc2tJbnNldEJvdW5kcywgcHJlc2VydmVXaW5kb3dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSAvKiBhbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSAqLyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnN1cmVDb25maWd1cmF0aW9uQW5kUmVzdW1lKHN0YWNrLCByLCBwcmVzZXJ2ZVdpbmRvd3MpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuY29udGludWVTdXJmYWNlTGF5b3V0KCk7CisgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUik7CisgICAgICAgIH0KKworICAgICAgICBtUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0Lm5vdGlmeVJlc2l6aW5nKGRvY2tlZEJvdW5kcywKKyAgICAgICAgICAgICAgICB0ZW1wRG9ja2VkVGFza0JvdW5kcyAhPSBudWxsCisgICAgICAgICAgICAgICAgfHwgdGVtcERvY2tlZFRhc2tJbnNldEJvdW5kcyAhPSBudWxsCisgICAgICAgICAgICAgICAgfHwgdGVtcE90aGVyVGFza0JvdW5kcyAhPSBudWxsCisgICAgICAgICAgICAgICAgfHwgdGVtcE90aGVyVGFza0luc2V0Qm91bmRzICE9IG51bGwpOworICAgIH0KKworICAgIGJvb2xlYW4gcmVzaXplVGFza0xvY2tlZChUYXNrUmVjb3JkIHRhc2ssIFJlY3QgYm91bmRzLCBpbnQgcmVzaXplTW9kZSwgYm9vbGVhbiBwcmVzZXJ2ZVdpbmRvdykgewogICAgICAgICBpZiAoIXRhc2subVJlc2l6ZWFibGUpIHsKICAgICAgICAgICAgIFNsb2cudyhUQUcsICJyZXNpemVUYXNrOiB0YXNrICIgKyB0YXNrICsgIiBub3QgcmVzaXplYWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgYWRqdXN0Rm9yTWluaW1hbFRhc2tEaW1lbnNpb25zKHRhc2ssIGJvdW5kcyk7CkBAIC0zMjE0LDggKzE5NzIsOSBAQAogICAgICAgICBmaW5hbCBib29sZWFuIGZvcmNlZCA9IChyZXNpemVNb2RlICYgUkVTSVpFX01PREVfRk9SQ0VEKSAhPSAwOwogICAgICAgICBpZiAodGFzay5tQm91bmRzICE9IG51bGwgJiYgdGFzay5tQm91bmRzLmVxdWFscyhib3VuZHMpICYmICFmb3JjZWQpIHsKICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS4uLgotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgYm91bmRzID0gVGFza1JlY29yZC52YWxpZGF0ZUJvdW5kcyhib3VuZHMpOwogCiAgICAgICAgIGlmICghbVdpbmRvd01hbmFnZXIuaXNWYWxpZFRhc2tJZCh0YXNrLnRhc2tJZCkpIHsKICAgICAgICAgICAgIC8vIFRhc2sgZG9lc24ndCBleGlzdCBpbiB3aW5kb3cgbWFuYWdlciB5ZXQgKGUuZy4gd2FzIHJlc3RvcmVkIGZyb20gcmVjZW50cykuCkBAIC0zMjI2LDcgKzE5ODUsNyBAQAogICAgICAgICAgICAgICAgIC8vIHJlLXJlc3RvcmUgdGhlIHRhc2sgc28gaXQgY2FuIGhhdmUgdGhlIHByb3BlciBzdGFjayBhc3NvY2lhdGlvbi4KICAgICAgICAgICAgICAgICByZXN0b3JlUmVjZW50VGFza0xvY2tlZCh0YXNrLCBGUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEbyBub3QgbW92ZSB0aGUgdGFzayB0byBhbm90aGVyIHN0YWNrIGhlcmUuCkBAIC0zMjQ4LDEzICsyMDA3LDE0IEBACiAgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGFjdGl2aXRpZXMgbXVzdCBiZSBtYWRlIHZpc2libGUgd2l0aCB0aGVpciBjb3JyZWN0IGNvbmZpZ3VyYXRpb24uCiAgICAgICAgICAgICAgICAgZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQociwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwogICAgICAgICAgICAgICAgIGlmICgha2VwdCkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKHN0YWNrLCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbVdpbmRvd01hbmFnZXIucmVzaXplVGFzayh0YXNrLnRhc2tJZCwgYm91bmRzLCB0YXNrLm1PdmVycmlkZUNvbmZpZywga2VwdCwgZm9yY2VkKTsKIAogICAgICAgICBUcmFjZS50cmFjZUVuZChUUkFDRV9UQUdfQUNUSVZJVFlfTUFOQUdFUik7CisgICAgICAgIHJldHVybiBrZXB0OwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBhZGp1c3RGb3JNaW5pbWFsVGFza0RpbWVuc2lvbnMoVGFza1JlY29yZCB0YXNrLCBSZWN0IGJvdW5kcykgewpAQCAtMzM3MCw4ICsyMTMwLDE0IEBACiAgICAgQWN0aXZpdHlTdGFjayBtb3ZlVGFza1RvU3RhY2tVbmNoZWNrZWRMb2NrZWQoCiAgICAgICAgICAgICBUYXNrUmVjb3JkIHRhc2ssIGludCBzdGFja0lkLCBib29sZWFuIHRvVG9wLCBib29sZWFuIGZvcmNlRm9jdXMsIFN0cmluZyByZWFzb24pIHsKICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgciA9IHRhc2suZ2V0VG9wQWN0aXZpdHkoKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiB3YXNGb2N1c2VkID0gaXNGb2N1c2VkU3RhY2sodGFzay5zdGFjaykgJiYgKHRvcFJ1bm5pbmdBY3Rpdml0eUxvY2tlZCgpID09IHIpOwotICAgICAgICBmaW5hbCBib29sZWFuIHdhc1Jlc3VtZWQgPSB3YXNGb2N1c2VkICYmICh0YXNrLnN0YWNrLm1SZXN1bWVkQWN0aXZpdHkgPT0gcik7CisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgcHJldlN0YWNrID0gdGFzay5zdGFjazsKKyAgICAgICAgZmluYWwgYm9vbGVhbiB3YXNGb2N1c2VkID0gaXNGb2N1c2VkU3RhY2socHJldlN0YWNrKSAmJiAodG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCkgPT0gcik7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzUmVzdW1lZCA9IHdhc0ZvY3VzZWQgJiYgKHByZXZTdGFjay5tUmVzdW1lZEFjdGl2aXR5ID09IHIpOworICAgICAgICAvLyBJbiBzb21lIGNhc2VzIHRoZSBmb2N1c2VkIHN0YWNrIGlzbid0IHRoZSBmcm9udCBzdGFjay4gRS5nLiBwaW5uZWQgc3RhY2suCisgICAgICAgIC8vIFdoZW5ldmVyIHdlIGFyZSBtb3ZpbmcgdGhlIHRvcCBhY3Rpdml0eSBmcm9tIHRoZSBmcm9udCBzdGFjayB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0byBtb3ZlCisgICAgICAgIC8vIHRoZSBzdGFjayB0byB0aGUgZnJvbnQuCisgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FzRnJvbnQgPSBpc0Zyb250U3RhY2socHJldlN0YWNrKQorICAgICAgICAgICAgICAgICYmIChwcmV2U3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCkgPT0gcik7CiAKICAgICAgICAgZmluYWwgYm9vbGVhbiByZXNpemVhYmxlID0gdGFzay5tUmVzaXplYWJsZTsKICAgICAgICAgLy8gVGVtcG9yYXJpbHkgZGlzYWJsZSByZXNpemVhYmxpbGl0eSBvZiB0YXNrIHdlIGFyZSBtb3ZpbmcuIFdlIGRvbid0IHdhbnQgaXQgdG8gYmUgcmVzaXplZApAQCAtMzM4NCw5ICsyMTUwLDkgQEAKICAgICAgICAgc3RhY2suYWRkVGFzayh0YXNrLCB0b1RvcCwgcmVhc29uKTsKIAogICAgICAgICAvLyBJZiB0aGUgdGFzayBoYWQgZm9jdXMgYmVmb3JlIChvciB3ZSdyZSByZXF1ZXN0ZWQgdG8gbW92ZSBmb2N1cyksCi0gICAgICAgIC8vIG1vdmUgZm9jdXMgdG8gdGhlIG5ldyBzdGFjay4KLSAgICAgICAgc3RhY2suc2V0Rm9jdXNBbmRSZXN1bWVTdGF0ZUlmTmVlZGVkKAotICAgICAgICAgICAgICAgIHIsIGZvcmNlRm9jdXMgfHwgd2FzRm9jdXNlZCwgd2FzUmVzdW1lZCwgcmVhc29uKTsKKyAgICAgICAgLy8gbW92ZSBmb2N1cyB0byB0aGUgbmV3IHN0YWNrIGJ5IG1vdmluZyB0aGUgc3RhY2sgdG8gdGhlIGZyb250LgorICAgICAgICBzdGFjay5tb3ZlVG9Gcm9udEFuZFJlc3VtZVN0YXRlSWZOZWVkZWQoCisgICAgICAgICAgICAgICAgciwgZm9yY2VGb2N1cyB8fCB3YXNGb2N1c2VkIHx8IHdhc0Zyb250LCB3YXNSZXN1bWVkLCByZWFzb24pOwogCiAgICAgICAgIHJldHVybiBzdGFjazsKICAgICB9CkBAIC0zNDA2LDEzICsyMTcyLDE3IEBACiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3BBY3Rpdml0eSA9IHRhc2suZ2V0VG9wQWN0aXZpdHkoKTsKLSAgICAgICAgaWYgKFN0YWNrSWQucHJlc2VydmVXaW5kb3dPblRhc2tNb3ZlKHN0YWNrSWQpICYmIHRvcEFjdGl2aXR5ICE9IG51bGwpIHsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBtaWdodFJlcGxhY2VXaW5kb3cgPQorICAgICAgICAgICAgICAgIFN0YWNrSWQucHJlc2VydmVXaW5kb3dPblRhc2tNb3ZlKHN0YWNrSWQpICYmIHRvcEFjdGl2aXR5ICE9IG51bGw7CisgICAgICAgIGlmIChtaWdodFJlcGxhY2VXaW5kb3cpIHsKICAgICAgICAgICAgIC8vIFdlIGFyZSBhYm91dCB0byByZWxhdW5jaCB0aGUgYWN0aXZpdHkgYmVjYXVzZSBpdHMgY29uZmlndXJhdGlvbiBjaGFuZ2VkIGR1ZSB0bwogICAgICAgICAgICAgLy8gYmVpbmcgbWF4aW1pemVkLCBpLmUuIHNpemUgY2hhbmdlLiBUaGUgYWN0aXZpdHkgd2lsbCBmaXJzdCByZW1vdmUgdGhlIG9sZCB3aW5kb3cKICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGFkZCBhIG5ldyBvbmUuIFRoaXMgY2FsbCB3aWxsIHRlbGwgd2luZG93IG1hbmFnZXIgYWJvdXQgdGhpcywgc28gaXQgY2FuCiAgICAgICAgICAgICAvLyBwcmVzZXJ2ZSB0aGUgb2xkIHdpbmRvdyB1bnRpbCB0aGUgbmV3IG9uZSBpcyBkcmF3bi4gVGhpcyBwcmV2ZW50cyBoYXZpbmcgYSBnYXAKICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlIHJlbW92YWwgYW5kIGFkZGl0aW9uLCBpbiB3aGljaCBubyB3aW5kb3cgaXMgdmlzaWJsZS4gV2UgYWxzbyB3YW50IHRoZQogICAgICAgICAgICAgLy8gZW50cmFuY2Ugb2YgdGhlIG5ldyB3aW5kb3cgdG8gYmUgcHJvcGVybHkgYW5pbWF0ZWQuCisgICAgICAgICAgICAvLyBOb3RlIGhlcmUgd2UgYWx3YXlzIHNldCB0aGUgcmVwbGFjaW5nIHdpbmRvdyBmaXJzdCwgYXMgdGhlIGZsYWdzIG1pZ2h0IGJlIG5lZWRlZAorICAgICAgICAgICAgLy8gZHVyaW5nIHRoZSByZWxhdW5jaC4gSWYgd2UgZW5kIHVwIG5vdCBkb2luZyBhbnkgcmVsYXVuY2gsIHdlIGNsZWFyIHRoZSBmbGFncyBsYXRlci4KICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldFJlcGxhY2luZ1dpbmRvdyh0b3BBY3Rpdml0eS5hcHBUb2tlbiwgYW5pbWF0ZSk7CiAgICAgICAgIH0KICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IG1vdmVUYXNrVG9TdGFja1VuY2hlY2tlZExvY2tlZCgKQEAgLTM0MjIsMjEgKzIxOTIsMjkgQEAKICAgICAgICAgICAgIHN0YWNrLm1Ob0FuaW1BY3Rpdml0aWVzLmFkZCh0b3BBY3Rpdml0eSk7CiAgICAgICAgIH0KIAorICAgICAgICBib29sZWFuIGtlcHQgPSB0cnVlOwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHRhc2sgaGFzIHRoZSBhcHByb3ByaWF0ZSBib3VuZHMvc2l6ZSBmb3IgdGhlIHN0YWNrIGl0IGlzIGluLgogICAgICAgICBpZiAoc3RhY2tJZCA9PSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCAmJiB0YXNrLm1Cb3VuZHMgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzaXplVGFza0xvY2tlZCh0YXNrLCBzdGFjay5tQm91bmRzLCBSRVNJWkVfTU9ERV9TWVNURU0sICFQUkVTRVJWRV9XSU5ET1dTKTsKKyAgICAgICAgICAgIGtlcHQgPSByZXNpemVUYXNrTG9ja2VkKHRhc2ssIHN0YWNrLm1Cb3VuZHMsIFJFU0laRV9NT0RFX1NZU1RFTSwgIVBSRVNFUlZFX1dJTkRPV1MpOwogICAgICAgICB9IGVsc2UgaWYgKHN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lECiAgICAgICAgICAgICAgICAgJiYgdGFzay5tQm91bmRzID09IG51bGwgJiYgdGFzay5tTGFzdE5vbkZ1bGxzY3JlZW5Cb3VuZHMgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVzaXplVGFza0xvY2tlZCh0YXNrLCB0YXNrLm1MYXN0Tm9uRnVsbHNjcmVlbkJvdW5kcywKKyAgICAgICAgICAgIGtlcHQgPSByZXNpemVUYXNrTG9ja2VkKHRhc2ssIHRhc2subUxhc3ROb25GdWxsc2NyZWVuQm91bmRzLAogICAgICAgICAgICAgICAgICAgICBSRVNJWkVfTU9ERV9TWVNURU0sICFQUkVTRVJWRV9XSU5ET1dTKTsKICAgICAgICAgfSBlbHNlIGlmIChzdGFja0lkID09IERPQ0tFRF9TVEFDS19JRCB8fCBzdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkgewotICAgICAgICAgICAgcmVzaXplVGFza0xvY2tlZCh0YXNrLCBzdGFjay5tQm91bmRzLCBSRVNJWkVfTU9ERV9TWVNURU0sICFQUkVTRVJWRV9XSU5ET1dTKTsKKyAgICAgICAgICAgIGtlcHQgPSByZXNpemVUYXNrTG9ja2VkKHRhc2ssIHN0YWNrLm1Cb3VuZHMsIFJFU0laRV9NT0RFX1NZU1RFTSwgIVBSRVNFUlZFX1dJTkRPV1MpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1pZ2h0UmVwbGFjZVdpbmRvdykgeworICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGFjdHVhbCBkbyBhIHJlbGF1bmNoIChpbmRpY2F0ZWQgYnkga2VwdD09dHJ1ZSBtZWFuaW5nIHdlIGtlcHQgdGhlIG9sZAorICAgICAgICAgICAgLy8gd2luZG93KSwgd2UgbmVlZCB0byBjbGVhciB0aGUgcmVwbGFjZSB3aW5kb3cgc2V0dGluZ3MuIE90aGVyd2lzZSwgd2Ugc2NoZWR1bGUgYQorICAgICAgICAgICAgLy8gdGltZW91dCB0byByZW1vdmUgdGhlIG9sZCB3aW5kb3cgaWYgdGhlIHJlcGxhY2luZyB3aW5kb3cgaXMgbm90IGNvbWluZyBpbiB0aW1lLgorICAgICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2NoZWR1bGVDbGVhclJlcGxhY2luZ1dpbmRvd0lmTmVlZGVkKHRvcEFjdGl2aXR5LmFwcFRva2VuLCAha2VwdCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGUgdGFzayBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiBydW5uaW5nIGFuZCBpdHMgdmlzaWJpbGl0eSBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgd2l0aAogICAgICAgICAvLyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc3RhY2sgLyB3aW5kb3dzLgogICAgICAgICBlbnN1cmVBY3Rpdml0aWVzVmlzaWJsZUxvY2tlZChudWxsLCAwLCAhUFJFU0VSVkVfV0lORE9XUyk7Ci0gICAgICAgIHJlc3VtZVRvcEFjdGl2aXRpZXNMb2NrZWQoKTsKKyAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKIAogICAgICAgICBpZiAoIXRhc2subVJlc2l6ZWFibGUgJiYgaXNTdGFja0RvY2tlZEluRWZmZWN0KHN0YWNrSWQpKSB7CiAgICAgICAgICAgICBzaG93Tm9uUmVzaXplYWJsZURvY2tUb2FzdCh0YXNrSWQpOwpAQCAtMzQ1NywzMSArMjIzNSw0MiBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyLmluZm8uc3VwcG9ydHNQaXApIHsKKyAgICAgICAgaWYgKCFtU2VydmljZS5tRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzICYmICFyLnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpKSB7CiAgICAgICAgICAgICBTbG9nLncoVEFHLAogICAgICAgICAgICAgICAgICAgICAibW92ZVRvcFN0YWNrQWN0aXZpdHlUb1Bpbm5lZFN0YWNrTG9ja2VkOiBQaWN0dXJlLUluLVBpY3R1cmUgbm90IHN1cHBvcnRlZCBmb3IgIgotICAgICAgICAgICAgICAgICAgICArICIgcj0iICsgcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHI9IiArIHIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKKyAgICAgICAgbW92ZUFjdGl2aXR5VG9TdGFja0xvY2tlZChyLCBQSU5ORURfU1RBQ0tfSUQsICJtb3ZlVG9wQWN0aXZpdHlUb1Bpbm5lZFN0YWNrIiwgYm91bmRzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBtb3ZlQWN0aXZpdHlUb1N0YWNrTG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIsIGludCBzdGFja0lkLCBTdHJpbmcgcmVhc29uLCBSZWN0IGJvdW5kcykgewogICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSByLnRhc2s7CiAgICAgICAgIGlmICh0YXNrLm1BY3Rpdml0aWVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBvbmx5IG9uZSBhY3Rpdml0eSBpbiB0aGUgdGFzay4gU28sIHdlIGNhbiBqdXN0IG1vdmUgdGhlIHRhc2sgb3ZlciB0byB0aGUKLSAgICAgICAgICAgIC8vIHBpbm5lZCBzdGFjayB3aXRob3V0IHJlLXBhcmVudGluZyB0aGUgYWN0aXZpdHkgaW4gYSBkaWZmZXJlbnQgdGFzay4KLSAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja0xvY2tlZCh0YXNrLnRhc2tJZCwgUElOTkVEX1NUQUNLX0lELCBPTl9UT1AsIEZPUkNFX0ZPQ1VTLAotICAgICAgICAgICAgICAgICAgICAibW92ZVRvcEFjdGl2aXR5VG9QaW5uZWRTdGFjayIsIHRydWUgLyogYW5pbWF0ZSAqLyk7CisgICAgICAgICAgICAvLyBzdGFjayB3aXRob3V0IHJlLXBhcmVudGluZyB0aGUgYWN0aXZpdHkgaW4gYSBkaWZmZXJlbnQgdGFzay4KKyAgICAgICAgICAgIG1vdmVUYXNrVG9TdGFja0xvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgdGFzay50YXNrSWQsIHN0YWNrSWQsIE9OX1RPUCwgRk9SQ0VfRk9DVVMsIHJlYXNvbiwgdHJ1ZSAvKiBhbmltYXRlICovKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgcGlubmVkU3RhY2sgPSBnZXRTdGFjayhQSU5ORURfU1RBQ0tfSUQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7Ci0gICAgICAgICAgICBwaW5uZWRTdGFjay5tb3ZlQWN0aXZpdHlUb1N0YWNrKHIpOworICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldFN0YWNrKHN0YWNrSWQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7CisgICAgICAgICAgICBzdGFjay5tb3ZlQWN0aXZpdHlUb1N0YWNrKHIpOwogICAgICAgICB9CiAKLSAgICAgICAgcmVzaXplU3RhY2tMb2NrZWQoUElOTkVEX1NUQUNLX0lELCBib3VuZHMsICFQUkVTRVJWRV9XSU5ET1dTLCB0cnVlKTsKKyAgICAgICAgaWYgKGJvdW5kcyAhPSBudWxsKSB7CisgICAgICAgICAgICByZXNpemVTdGFja0xvY2tlZChzdGFja0lkLCBib3VuZHMsIG51bGwgLyogdGVtcFRhc2tCb3VuZHMgKi8sCisgICAgICAgICAgICAgICAgICAgIG51bGwgLyogdGVtcFRhc2tJbnNldEJvdW5kcyAqLywgIVBSRVNFUlZFX1dJTkRPV1MsIHRydWUpOworICAgICAgICB9CiAKICAgICAgICAgLy8gVGhlIHRhc2sgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gcnVubmluZyBhbmQgaXRzIHZpc2liaWxpdHkgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkIHdpdGgKICAgICAgICAgLy8gdGhlIHZpc2liaWxpdHkgb2YgdGhlIHN0YWNrIC8gd2luZG93cy4KICAgICAgICAgZW5zdXJlQWN0aXZpdGllc1Zpc2libGVMb2NrZWQobnVsbCwgMCwgIVBSRVNFUlZFX1dJTkRPV1MpOwotICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworCisgICAgICAgIGlmIChzdGFja0lkID09IFBJTk5FRF9TVEFDS19JRCkgeworICAgICAgICAgICAgbVNlcnZpY2Uubm90aWZ5QWN0aXZpdHlQaW5uZWRMb2NrZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFja0xvY2tlZChpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uKSB7CkBAIC0zNTAwLDEwICsyMjg5LDEyIEBACiAgICAgICAgIC8vIFRoZSB0YXNrIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHJ1bm5pbmcgYW5kIGl0cyB2aXNpYmlsaXR5IG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCB3aXRoCiAgICAgICAgIC8vIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzdGFjayAvIHdpbmRvd3MuCiAgICAgICAgIHN0YWNrLmVuc3VyZUFjdGl2aXRpZXNWaXNpYmxlTG9ja2VkKG51bGwsIDAsICFQUkVTRVJWRV9XSU5ET1dTKTsKLSAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgIH0KIAogICAgIEFjdGl2aXR5UmVjb3JkIGZpbmRUYXNrTG9ja2VkKEFjdGl2aXR5UmVjb3JkIHIpIHsKKyAgICAgICAgbVRtcEZpbmRUYXNrUmVzdWx0LnIgPSBudWxsOworICAgICAgICBtVG1wRmluZFRhc2tSZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5ID0gZmFsc2U7CiAgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy5kKFRBR19UQVNLUywgIkxvb2tpbmcgZm9yIHRhc2sgb2YgIiArIHIpOwogICAgICAgICBmb3IgKGludCBkaXNwbGF5TmR4ID0gbUFjdGl2aXR5RGlzcGxheXMuc2l6ZSgpIC0gMTsgZGlzcGxheU5keCA+PSAwOyAtLWRpc3BsYXlOZHgpIHsKICAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBzdGFja3MgPSBtQWN0aXZpdHlEaXNwbGF5cy52YWx1ZUF0KGRpc3BsYXlOZHgpLm1TdGFja3M7CkBAIC0zNTE4LDE0ICsyMzA5LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNraXBwaW5nIHN0YWNrOiAobmV3IHRhc2sgbm90IGFsbG93ZWQpICIgKyBzdGFjayk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCBhciA9IHN0YWNrLmZpbmRUYXNrTG9ja2VkKHIpOwotICAgICAgICAgICAgICAgIGlmIChhciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcjsKKyAgICAgICAgICAgICAgICBzdGFjay5maW5kVGFza0xvY2tlZChyLCBtVG1wRmluZFRhc2tSZXN1bHQpOworICAgICAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgdGFzayBpbiBtdWx0aXBsZSBzdGFja3Mgd2l0aCB0aGUgc2FtZSByb290IGFmZmluaXR5LgorICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtYXRjaCB3ZSBmb3VuZCB3YXMgYmFzZWQgb24gcm9vdCBhZmZpbml0eSB3ZSBrZWVwIG9uIGxvb2tpbmcgdG8gc2VlIGlmCisgICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBiZXR0ZXIgbWF0Y2ggaW4gYW5vdGhlciBzdGFjay4gV2UgZXZlbnR1YWxseSByZXR1cm4gdGhlIG1hdGNoIGJhc2VkCisgICAgICAgICAgICAgICAgLy8gb24gcm9vdCBhZmZpbml0eSBpZiB3ZSBkb24ndCBmaW5kIGEgYmV0dGVyIG1hdGNoLgorICAgICAgICAgICAgICAgIGlmIChtVG1wRmluZFRhc2tSZXN1bHQuciAhPSBudWxsICYmICFtVG1wRmluZFRhc2tSZXN1bHQubWF0Y2hlZEJ5Um9vdEFmZmluaXR5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtVG1wRmluZFRhc2tSZXN1bHQucjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiTm8gdGFzayBmb3VuZCIpOwotICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgaWYgKERFQlVHX1RBU0tTICYmIG1UbXBGaW5kVGFza1Jlc3VsdC5yID09IG51bGwpIFNsb2cuZChUQUdfVEFTS1MsICJObyB0YXNrIGZvdW5kIik7CisgICAgICAgIHJldHVybiBtVG1wRmluZFRhc2tSZXN1bHQucjsKICAgICB9CiAKICAgICBBY3Rpdml0eVJlY29yZCBmaW5kQWN0aXZpdHlMb2NrZWQoSW50ZW50IGludGVudCwgQWN0aXZpdHlJbmZvIGluZm8pIHsKQEAgLTM2MDQsNyArMjM5OSw3IEBACiAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBzdGFjayA9IHN0YWNrcy5nZXQoc3RhY2tOZHgpOwogICAgICAgICAgICAgICAgIHN0YWNrLmF3YWtlRnJvbVNsZWVwaW5nTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzRm9jdXNlZFN0YWNrKHN0YWNrKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zOTI5LDcgKzI3MjQsNyBAQAogICAgICAgICBmb3IgKGludCBhY3Rpdml0eU5keCA9IG1TdG9wcGluZ0FjdGl2aXRpZXMuc2l6ZSgpIC0gMTsgYWN0aXZpdHlOZHggPj0gMDsgLS1hY3Rpdml0eU5keCkgewogICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgcyA9IG1TdG9wcGluZ0FjdGl2aXRpZXMuZ2V0KGFjdGl2aXR5TmR4KTsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gd2FpdGluZ1Zpc2libGUgPSBtV2FpdGluZ1Zpc2libGVBY3Rpdml0aWVzLmNvbnRhaW5zKHMpOwotICAgICAgICAgICAgaWYgKERFQlVHX0FMTCkgU2xvZy52KFRBRywgIlN0b3BwaW5nICIgKyBzICsgIjogbm93VmlzaWJsZT0iICsgbm93VmlzaWJsZQorICAgICAgICAgICAgaWYgKERFQlVHX1NUQVRFUykgU2xvZy52KFRBRywgIlN0b3BwaW5nICIgKyBzICsgIjogbm93VmlzaWJsZT0iICsgbm93VmlzaWJsZQogICAgICAgICAgICAgICAgICAgICArICIgd2FpdGluZ1Zpc2libGU9IiArIHdhaXRpbmdWaXNpYmxlICsgIiBmaW5pc2hpbmc9IiArIHMuZmluaXNoaW5nKTsKICAgICAgICAgICAgIGlmICh3YWl0aW5nVmlzaWJsZSAmJiBub3dWaXNpYmxlKSB7CiAgICAgICAgICAgICAgICAgbVdhaXRpbmdWaXNpYmxlQWN0aXZpdGllcy5yZW1vdmUocyk7CkBAIC0zOTM5LDEyICsyNzM0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHNvIGdldCByaWQgb2YgaXQuICBPdGhlcndpc2UsIHdlIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gbm9ybWFsIGZsb3cgYW5kIGhpZGUgaXQgb25jZSB3ZSBkZXRlcm1pbmUgdGhhdCBpdCBpcwogICAgICAgICAgICAgICAgICAgICAvLyBoaWRkZW4gYnkgdGhlIGFjdGl2aXRpZXMgaW4gZnJvbnQgb2YgaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19BTEwpIFNsb2cudihUQUcsICJCZWZvcmUgc3RvcHBpbmcsIGNhbiBoaWRlOiAiICsgcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFURVMpIFNsb2cudihUQUcsICJCZWZvcmUgc3RvcHBpbmcsIGNhbiBoaWRlOiAiICsgcyk7CiAgICAgICAgICAgICAgICAgICAgIG1XaW5kb3dNYW5hZ2VyLnNldEFwcFZpc2liaWxpdHkocy5hcHBUb2tlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgoIXdhaXRpbmdWaXNpYmxlIHx8IG1TZXJ2aWNlLmlzU2xlZXBpbmdPclNodXR0aW5nRG93bigpKSAmJiByZW1vdmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfQUxMKSBTbG9nLnYoVEFHLCAiUmVhZHkgdG8gc3RvcDogIiArIHMpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19TVEFURVMpIFNsb2cudihUQUcsICJSZWFkeSB0byBzdG9wOiAiICsgcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0b3BzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgc3RvcHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgICAgICAgICB9CkBAIC00MzczLDcgKzMxNjgsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNob3dOb25SZXNpemVhYmxlRG9ja1RvYXN0KGludCB0YXNrSWQpIHsKKyAgICB2b2lkIHNob3dOb25SZXNpemVhYmxlRG9ja1RvYXN0KGludCB0YXNrSWQpIHsKICAgICAgICAgbVdpbmRvd01hbmFnZXIuc2NoZWR1bGVTaG93Tm9uUmVzaXplYWJsZURvY2tUb2FzdCh0YXNrSWQpOwogICAgIH0KIApAQCAtNDM5OSw3ICszMTk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0xPQ0tUQVNLKSBTbG9nLncoVEFHX0xPQ0tUQVNLLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRMb2NrVGFza01vZGVMb2NrZWQ6IFRhc2tzIHJlbWFpbmluZywgY2FuJ3QgdW5sb2NrIik7CiAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFRhc2sucGVyZm9ybUNsZWFyVGFza0xvY2tlZCgpOwotICAgICAgICAgICAgICAgICAgICByZXN1bWVUb3BBY3Rpdml0aWVzTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NDQwLDcgKzMyMzUsNyBAQAogCiAgICAgICAgIGlmIChhbmRSZXN1bWUpIHsKICAgICAgICAgICAgIGZpbmRUYXNrVG9Nb3ZlVG9Gcm9udExvY2tlZCh0YXNrLCAwLCBudWxsLCByZWFzb24pOwotICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDUwOCw3ICszMzAzLDcgQEAKICAgICAgICAgICAgIGRpZFNvbWV0aGluZyA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRpZFNvbWV0aGluZykgewotICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDUxNiw2ICszMzExLDE4IEBACiAgICAgICAgIHJldHVybiBtTG9ja1Rhc2tNb2RlU3RhdGU7CiAgICAgfQogCisgICAgdm9pZCBhY3Rpdml0eVJlbGF1bmNoZWRMb2NrZWQoSUJpbmRlciB0b2tlbikgeworICAgICAgICBtV2luZG93TWFuYWdlci5ub3RpZnlBcHBSZWxhdW5jaGluZ0ZpbmlzaGVkKHRva2VuKTsKKyAgICB9CisKKyAgICB2b2lkIGFjdGl2aXR5UmVsYXVuY2hpbmdMb2NrZWQoQWN0aXZpdHlSZWNvcmQgcikgeworICAgICAgICBtV2luZG93TWFuYWdlci5ub3RpZnlBcHBSZWxhdW5jaGluZyhyLmFwcFRva2VuKTsKKyAgICB9CisKKyAgICB2b2lkIGxvZ1N0YWNrU3RhdGUoKSB7CisgICAgICAgIG1BY3Rpdml0eU1ldHJpY3NMb2dnZXIubG9nV2luZG93U3RhdGUoKTsKKyAgICB9CisKICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29ySGFuZGxlciBleHRlbmRzIEhhbmRsZXIgewogCiAgICAgICAgIHB1YmxpYyBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvckhhbmRsZXIoTG9vcGVyIGxvb3BlcikgewpAQCAtNDU1MSw3ICszMzU4LDcgQEAKICAgICAgICAgICAgICAgICB9IGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUkVTVU1FX1RPUF9BQ1RJVklUWV9NU0c6IHsKICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTTEVFUF9USU1FT1VUX01TRzogewpAQCAtNDY5NSw4ICszNTAyLDggQEAKICAgICB9CiAKICAgICBjbGFzcyBBY3Rpdml0eUNvbnRhaW5lciBleHRlbmRzIGFuZHJvaWQuYXBwLklBY3Rpdml0eUNvbnRhaW5lci5TdHViIHsKLSAgICAgICAgZmluYWwgc3RhdGljIGludCBGT1JDRV9ORVdfVEFTS19GTEFHUyA9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLIHwKLSAgICAgICAgICAgICAgICBJbnRlbnQuRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fQU5JTUFUSU9OOworICAgICAgICBmaW5hbCBzdGF0aWMgaW50IEZPUkNFX05FV19UQVNLX0ZMQUdTID0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8CisgICAgICAgICAgICAgICAgRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLIHwgSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fQU5JTUFUSU9OOwogICAgICAgICBmaW5hbCBpbnQgbVN0YWNrSWQ7CiAgICAgICAgIElBY3Rpdml0eUNvbnRhaW5lckNhbGxiYWNrIG1DYWxsYmFjayA9IG51bGw7CiAgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgbVN0YWNrOwpAQCAtNDc4Niw3ICszNTkzLDcgQEAKICAgICAgICAgICAgICAgICBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIG1TdGFjay5maW5pc2hBbGxBY3Rpdml0aWVzTG9ja2VkKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQobVN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UubUFjdGl2aXR5U3RhcnRlci5yZW1vdmVQZW5kaW5nQWN0aXZpdHlMYXVuY2hlc0xvY2tlZChtU3RhY2spOwogICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNDgwNSwyMiArMzYxMiw3IEBACiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgc3RhcnRBY3Rpdml0eShJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgICAgICBtU2VydmljZS5lbmZvcmNlTm90SXNvbGF0ZWRDYWxsZXIoIkFjdGl2aXR5Q29udGFpbmVyLnN0YXJ0QWN0aXZpdHkiKTsKLSAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBtU2VydmljZS5tVXNlckNvbnRyb2xsZXIuaGFuZGxlSW5jb21pbmdVc2VyKEJpbmRlci5nZXRDYWxsaW5nUGlkKCksCi0gICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIG1DdXJyZW50VXNlciwgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlclNlcnZpY2UuQUxMT1dfRlVMTF9PTkxZLCAiQWN0aXZpdHlDb250YWluZXIiLCBudWxsKTsKLQotICAgICAgICAgICAgLy8gVE9ETzogU3dpdGNoIHRvIHVzZXIgYXBwIHN0YWNrcyBoZXJlLgotICAgICAgICAgICAgU3RyaW5nIG1pbWVUeXBlID0gaW50ZW50LmdldFR5cGUoKTsKLSAgICAgICAgICAgIGZpbmFsIFVyaSBkYXRhID0gaW50ZW50LmdldERhdGEoKTsKLSAgICAgICAgICAgIGlmIChtaW1lVHlwZSA9PSBudWxsICYmIGRhdGEgIT0gbnVsbCAmJiAiY29udGVudCIuZXF1YWxzKGRhdGEuZ2V0U2NoZW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgbWltZVR5cGUgPSBtU2VydmljZS5nZXRQcm92aWRlck1pbWVUeXBlKGRhdGEsIHVzZXJJZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGVja0VtYmVkZGVkQWxsb3dlZElubmVyKHVzZXJJZCwgaW50ZW50LCBtaW1lVHlwZSk7Ci0KLSAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhGT1JDRV9ORVdfVEFTS19GTEFHUyk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhcnRBY3Rpdml0eU1heVdhaXQobnVsbCwgLTEsIG51bGwsIGludGVudCwgbWltZVR5cGUsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgIDAsIDAsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGZhbHNlLCB1c2VySWQsIHRoaXMsIG51bGwpOworICAgICAgICAgICAgcmV0dXJuIG1TZXJ2aWNlLnN0YXJ0QWN0aXZpdHkoaW50ZW50LCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQpAQCAtNDg0NCw3ICszNjM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgRk9SQ0VfTkVXX1RBU0tfRkxBR1MsIEZPUkNFX05FV19UQVNLX0ZMQUdTLCBudWxsLCB0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgdm9pZCBjaGVja0VtYmVkZGVkQWxsb3dlZElubmVyKGludCB1c2VySWQsIEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUpIHsKKyAgICAgICAgdm9pZCBjaGVja0VtYmVkZGVkQWxsb3dlZElubmVyKGludCB1c2VySWQsIEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUpIHsKICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IHJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZSwgMCwgbnVsbCwgdXNlcklkKTsKICAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsICYmIChhSW5mby5mbGFncyAmIEFjdGl2aXR5SW5mby5GTEFHX0FMTE9XX0VNQkVEREVEKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKApAQCAtNDk0Nyw3ICszNzM5LDcgQEAKIAogICAgICAgICAgICAgbVN1cmZhY2UgPSBzdXJmYWNlOwogICAgICAgICAgICAgaWYgKHN1cmZhY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1TdGFjay5yZXN1bWVUb3BBY3Rpdml0eUxvY2tlZChudWxsKTsKKyAgICAgICAgICAgICAgICByZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtQ29udGFpbmVyU3RhdGUgPSBDT05UQUlORVJfU1RBVEVfTk9fU1VSRkFDRTsKICAgICAgICAgICAgICAgICAoKFZpcnR1YWxBY3Rpdml0eURpc3BsYXkpIG1BY3Rpdml0eURpc3BsYXkpLnNldFN1cmZhY2UobnVsbCk7CkBAIC01MDAxLDcgKzM3OTMsNyBAQAogCiAgICAgICAgIC8qKiBBbGwgb2YgdGhlIHN0YWNrcyBvbiB0aGlzIGRpc3BsYXkuIE9yZGVyIG1hdHRlcnMsIHRvcG1vc3Qgc3RhY2sgaXMgaW4gZnJvbnQgb2YgYWxsIG90aGVyCiAgICAgICAgICAqIHN0YWNrcywgYm90dG9tbW9zdCBiZWhpbmQuIEFjY2Vzc2VkIGRpcmVjdGx5IGJ5IEFjdGl2aXR5TWFuYWdlciBwYWNrYWdlIGNsYXNzZXMgKi8KLSAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IG1TdGFja3MgPSBuZXcgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+KCk7CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBtU3RhY2tzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAKICAgICAgICAgQWN0aXZpdHlSZWNvcmQgbVZpc2libGVCZWhpbmRBY3Rpdml0eTsKIApAQCAtNTEzMCw0ICszOTIyLDE5IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBY3Rpdml0eVN0YWNrIGZpbmRTdGFja0JlaGluZChBY3Rpdml0eVN0YWNrIHN0YWNrKSB7CisgICAgICAgIC8vIFRPRE8obXVsdGktZGlzcGxheSk6IFdlIGFyZSBvbmx5IGxvb2tpbmcgZm9yIHN0YWNrcyBvbiB0aGUgZGVmYXVsdCBkaXNwbGF5LgorICAgICAgICBmaW5hbCBBY3Rpdml0eURpc3BsYXkgZGlzcGxheSA9IG1BY3Rpdml0eURpc3BsYXlzLmdldChEaXNwbGF5LkRFRkFVTFRfRElTUExBWSk7CisgICAgICAgIGlmIChkaXNwbGF5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZpbmFsIEFycmF5TGlzdDxBY3Rpdml0eVN0YWNrPiBzdGFja3MgPSBkaXNwbGF5Lm1TdGFja3M7CisgICAgICAgIGZvciAoaW50IGkgPSBzdGFja3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmIChzdGFja3MuZ2V0KGkpID09IHN0YWNrICYmIGkgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrcy5nZXQoaSAtIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZhaWxlZCB0byBmaW5kIGEgc3RhY2sgYmVoaW5kIHN0YWNrPSIgKyBzdGFjaworICAgICAgICAgICAgICAgICsgIiBpbj0iICsgc3RhY2tzKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0FjdGl2aXR5U3RhcnRlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YXJ0ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE4OTUwCi0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9BY3Rpdml0eVN0YXJ0ZXIuamF2YQpAQCAtMCwwICsxLDE3NjAgQEAKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOworCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5LlJFU1VMVF9DQU5DRUxFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9DTEFTU19OT1RfRk9VTkQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9ERUxJVkVSRURfVE9fVE9QOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1JFVFVSTl9JTlRFTlRfVE9fQ0FMTEVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1M7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TVEFSVF9UQVNLX1RPX0ZST05UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5IT01FX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5JTlZBTElEX1NUQUNLX0lEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5QSU5ORURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudC5GTEFHX0lNTVVUQUJMRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dC5LRVlHVUFSRF9TRVJWSUNFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkVYVFJBX0lOVEVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5FWFRSQV9QQUNLQUdFX05BTUU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRVhUUkFfVEFTS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX0NMRUFSX1RBU0s7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9DTEVBUl9UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9FWENMVURFX0ZST01fUkVDRU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX0xBVU5DSF9UT19TSURFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fQU5JTUFUSU9OOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9QUkVWSU9VU19JU19UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9SRU9SREVSX1RPX0ZST05UOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuSW50ZW50LkZMQUdfQUNUSVZJVFlfUkVTRVRfVEFTS19JRl9ORUVERUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5GTEFHX0FDVElWSVRZX1NJTkdMRV9UT1A7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX0FMV0FZUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX0lOU1RBTkNFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLkxBVU5DSF9TSU5HTEVfVEFTSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MQVVOQ0hfU0lOR0xFX1RPUDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0NPTkZJR1VSQVRJT047CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19GT0NVUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1BFUk1JU1NJT05TX1JFVklFVzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1JFQ0VOVFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19SRVNVTFRTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1RBQ0s7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19UQVNLUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1VTRVJfTEVBVklORzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfQ09ORklHVVJBVElPTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlBPU1RGSVhfRk9DVVM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1JFU1VMVFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJEZWJ1Z0NvbmZpZy5QT1NURklYX1VTRVJfTEVBVklORzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlRBR19BTTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XSVRIX0NMQVNTX05BTUU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eU1hbmFnZXJTZXJ2aWNlLkFOSU1BVEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5IT01FX0FDVElWSVRZX1RZUEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVJlY29yZC5SRUNFTlRTX0FDVElWSVRZX1RZUEU7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrLkFjdGl2aXR5U3RhdGUuUkVTVU1FRDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkNSRUFURV9JRl9ORUVERUQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5hbS5BY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5GT1JDRV9GT0NVUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLk9OX1RPUDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLlRBR19UQVNLUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkV2ZW50TG9nVGFncy5BTV9ORVdfSU5URU5UOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5T3B0aW9uczsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOworaW1wb3J0IGFuZHJvaWQuYXBwLklBY3Rpdml0eUNvbnRhaW5lcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5JQWN0aXZpdHlNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLklBcHBsaWNhdGlvblRocmVhZDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5LZXlndWFyZE1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKK2ltcG9ydCBhbmRyb2lkLmFwcC5Qcm9maWxlckluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LklJbnRlbnRTZW5kZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VyTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uudm9pY2UuSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uOworaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5IZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHk7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklWb2ljZUludGVyYWN0b3I7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLlBlbmRpbmdBY3Rpdml0eUxhdW5jaDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworCisvKioKKyAqIENvbnRyb2xsZXIgZm9yIGludGVycHJldGluZyBob3cgYW5kIHRoZW4gbGF1bmNoaW5nIGFjdGl2aXRpZXMuCisgKgorICogVGhpcyBjbGFzcyBjb2xsZWN0cyBhbGwgdGhlIGxvZ2ljIGZvciBkZXRlcm1pbmluZyBob3cgYW4gaW50ZW50IGFuZCBmbGFncyBzaG91bGQgYmUgdHVybmVkIGludG8KKyAqIGFuIGFjdGl2aXR5IGFuZCBhc3NvY2lhdGVkIHRhc2sgYW5kIHN0YWNrLgorICovCitjbGFzcyBBY3Rpdml0eVN0YXJ0ZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUQUdfV0lUSF9DTEFTU19OQU1FID8gIkFjdGl2aXR5U3RhcnRlciIgOiBUQUdfQU07CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19SRVNVTFRTID0gVEFHICsgUE9TVEZJWF9SRVNVTFRTOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRk9DVVMgPSBUQUcgKyBQT1NURklYX0ZPQ1VTOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ09ORklHVVJBVElPTiA9IFRBRyArIFBPU1RGSVhfQ09ORklHVVJBVElPTjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1VTRVJfTEVBVklORyA9IFRBRyArIFBPU1RGSVhfVVNFUl9MRUFWSU5HOworCisgICAgcHJpdmF0ZSBmaW5hbCBBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlIG1TZXJ2aWNlOworICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IgbVN1cGVydmlzb3I7CisgICAgcHJpdmF0ZSBXaW5kb3dNYW5hZ2VyU2VydmljZSBtV2luZG93TWFuYWdlcjsKKworICAgIGZpbmFsIEFycmF5TGlzdDxQZW5kaW5nQWN0aXZpdHlMYXVuY2g+IG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgLy8gU2hhcmUgc3RhdGUgdmFyaWFibGUgYW1vbmcgbWV0aG9kcyB3aGVuIHN0YXJ0aW5nIGFuIGFjdGl2aXR5LgorICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbVN0YXJ0QWN0aXZpdHk7CisgICAgcHJpdmF0ZSBJbnRlbnQgbUludGVudDsKKyAgICBwcml2YXRlIGludCBtQ2FsbGluZ1VpZDsKKyAgICBwcml2YXRlIEFjdGl2aXR5T3B0aW9ucyBtT3B0aW9uczsKKworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoU2luZ2xlVG9wOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoU2luZ2xlSW5zdGFuY2U7CisgICAgcHJpdmF0ZSBib29sZWFuIG1MYXVuY2hTaW5nbGVUYXNrOworICAgIHByaXZhdGUgYm9vbGVhbiBtTGF1bmNoVGFza0JlaGluZDsKKyAgICBwcml2YXRlIGludCBtTGF1bmNoRmxhZ3M7CisKKyAgICBwcml2YXRlIFJlY3QgbUxhdW5jaEJvdW5kczsKKworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbU5vdFRvcDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbURvUmVzdW1lOworICAgIHByaXZhdGUgaW50IG1TdGFydEZsYWdzOworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgbVNvdXJjZVJlY29yZDsKKworICAgIHByaXZhdGUgVGFza1JlY29yZCBtSW5UYXNrOworICAgIHByaXZhdGUgYm9vbGVhbiBtQWRkaW5nVG9UYXNrOworICAgIHByaXZhdGUgVGFza1JlY29yZCBtUmV1c2VUYXNrOworCisgICAgcHJpdmF0ZSBBY3Rpdml0eUluZm8gbU5ld1Rhc2tJbmZvOworICAgIHByaXZhdGUgSW50ZW50IG1OZXdUYXNrSW50ZW50OworICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBtU291cmNlU3RhY2s7CisgICAgcHJpdmF0ZSBBY3Rpdml0eVN0YWNrIG1UYXJnZXRTdGFjazsKKyAgICAvLyBUT0RPOiBJcyB0aGUgbU1vdmVIb21lIGZsYWcgcmVhbGx5IG5lZWRlZD8KKyAgICBwcml2YXRlIGJvb2xlYW4gbU1vdmVkSG9tZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gbU1vdmVkVG9Gcm9udDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbU5vQW5pbWF0aW9uOworICAgIHByaXZhdGUgYm9vbGVhbiBtS2VlcEN1clRyYW5zaXRpb247CisKKyAgICBwcml2YXRlIElWb2ljZUludGVyYWN0aW9uU2Vzc2lvbiBtVm9pY2VTZXNzaW9uOworICAgIHByaXZhdGUgSVZvaWNlSW50ZXJhY3RvciBtVm9pY2VJbnRlcmFjdG9yOworCisgICAgcHJpdmF0ZSB2b2lkIHJlc2V0KCkgeworICAgICAgICBtU3RhcnRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgIG1JbnRlbnQgPSBudWxsOworICAgICAgICBtQ2FsbGluZ1VpZCA9IC0xOworICAgICAgICBtT3B0aW9ucyA9IG51bGw7CisKKyAgICAgICAgbUxhdW5jaFNpbmdsZVRvcCA9IGZhbHNlOworICAgICAgICBtTGF1bmNoU2luZ2xlSW5zdGFuY2UgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaFNpbmdsZVRhc2sgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaFRhc2tCZWhpbmQgPSBmYWxzZTsKKyAgICAgICAgbUxhdW5jaEZsYWdzID0gMDsKKworICAgICAgICBtTGF1bmNoQm91bmRzID0gbnVsbDsKKworICAgICAgICBtTm90VG9wID0gbnVsbDsKKyAgICAgICAgbURvUmVzdW1lID0gZmFsc2U7CisgICAgICAgIG1TdGFydEZsYWdzID0gMDsKKyAgICAgICAgbVNvdXJjZVJlY29yZCA9IG51bGw7CisKKyAgICAgICAgbUluVGFzayA9IG51bGw7CisgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSBmYWxzZTsKKyAgICAgICAgbVJldXNlVGFzayA9IG51bGw7CisKKyAgICAgICAgbU5ld1Rhc2tJbmZvID0gbnVsbDsKKyAgICAgICAgbU5ld1Rhc2tJbnRlbnQgPSBudWxsOworICAgICAgICBtU291cmNlU3RhY2sgPSBudWxsOworCisgICAgICAgIG1UYXJnZXRTdGFjayA9IG51bGw7CisgICAgICAgIG1Nb3ZlZEhvbWUgPSBmYWxzZTsKKyAgICAgICAgbU1vdmVkVG9Gcm9udCA9IGZhbHNlOworICAgICAgICBtTm9BbmltYXRpb24gPSBmYWxzZTsKKyAgICAgICAgbUtlZXBDdXJUcmFuc2l0aW9uID0gZmFsc2U7CisKKyAgICAgICAgbVZvaWNlU2Vzc2lvbiA9IG51bGw7CisgICAgICAgIG1Wb2ljZUludGVyYWN0b3IgPSBudWxsOworICAgIH0KKworICAgIEFjdGl2aXR5U3RhcnRlcihBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlIHNlcnZpY2UsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIHN1cGVydmlzb3IpIHsKKyAgICAgICAgbVNlcnZpY2UgPSBzZXJ2aWNlOworICAgICAgICBtU3VwZXJ2aXNvciA9IHN1cGVydmlzb3I7CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlMb2NrZWQoSUFwcGxpY2F0aW9uVGhyZWFkIGNhbGxlciwgSW50ZW50IGludGVudCwgSW50ZW50IGVwaGVtZXJhbEludGVudCwKKyAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIEFjdGl2aXR5SW5mbyBhSW5mbywgUmVzb2x2ZUluZm8gckluZm8sCisgICAgICAgICAgICBJVm9pY2VJbnRlcmFjdGlvblNlc3Npb24gdm9pY2VTZXNzaW9uLCBJVm9pY2VJbnRlcmFjdG9yIHZvaWNlSW50ZXJhY3RvciwKKyAgICAgICAgICAgIElCaW5kZXIgcmVzdWx0VG8sIFN0cmluZyByZXN1bHRXaG8sIGludCByZXF1ZXN0Q29kZSwgaW50IGNhbGxpbmdQaWQsIGludCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBpbnQgcmVhbENhbGxpbmdQaWQsIGludCByZWFsQ2FsbGluZ1VpZCwgaW50IHN0YXJ0RmxhZ3MsCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgYm9vbGVhbiBpZ25vcmVUYXJnZXRTZWN1cml0eSwgYm9vbGVhbiBjb21wb25lbnRTcGVjaWZpZWQsCisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZFtdIG91dEFjdGl2aXR5LCBBY3Rpdml0eVN0YWNrU3VwZXJ2aXNvci5BY3Rpdml0eUNvbnRhaW5lciBjb250YWluZXIsCisgICAgICAgICAgICBUYXNrUmVjb3JkIGluVGFzaykgeworICAgICAgICBpbnQgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1M7CisKKyAgICAgICAgUHJvY2Vzc1JlY29yZCBjYWxsZXJBcHAgPSBudWxsOworICAgICAgICBpZiAoY2FsbGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGNhbGxlckFwcCA9IG1TZXJ2aWNlLmdldFJlY29yZEZvckFwcExvY2tlZChjYWxsZXIpOworICAgICAgICAgICAgaWYgKGNhbGxlckFwcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxlckFwcC5waWQ7CisgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IGNhbGxlckFwcC5pbmZvLnVpZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBmaW5kIGFwcCBmb3IgY2FsbGVyICIgKyBjYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiAocGlkPSIgKyBjYWxsaW5nUGlkICsgIikgd2hlbiBzdGFydGluZzogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBpbnRlbnQudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IGFJbmZvICE9IG51bGwgPyBVc2VySGFuZGxlLmdldFVzZXJJZChhSW5mby5hcHBsaWNhdGlvbkluZm8udWlkKSA6IDA7CisKKyAgICAgICAgaWYgKGVyciA9PSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfU1VDQ0VTUykgeworICAgICAgICAgICAgU2xvZy5pKFRBRywgIlNUQVJUIHUiICsgdXNlcklkICsgIiB7IiArIGludGVudC50b1Nob3J0U3RyaW5nKHRydWUsIHRydWUsIHRydWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICArICJ9IGZyb20gdWlkICIgKyBjYWxsaW5nVWlkCisgICAgICAgICAgICAgICAgICAgICsgIiBvbiBkaXNwbGF5ICIgKyAoY29udGFpbmVyID09IG51bGwgPyAobVN1cGVydmlzb3IubUZvY3VzZWRTdGFjayA9PSBudWxsID8KKyAgICAgICAgICAgICAgICAgICAgRGlzcGxheS5ERUZBVUxUX0RJU1BMQVkgOiBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLm1EaXNwbGF5SWQpIDoKKyAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLm1BY3Rpdml0eURpc3BsYXkubURpc3BsYXlJZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEFjdGl2aXR5UmVjb3JkIHNvdXJjZVJlY29yZCA9IG51bGw7CisgICAgICAgIEFjdGl2aXR5UmVjb3JkIHJlc3VsdFJlY29yZCA9IG51bGw7CisgICAgICAgIGlmIChyZXN1bHRUbyAhPSBudWxsKSB7CisgICAgICAgICAgICBzb3VyY2VSZWNvcmQgPSBtU3VwZXJ2aXNvci5pc0luQW55U3RhY2tMb2NrZWQocmVzdWx0VG8pOworICAgICAgICAgICAgaWYgKERFQlVHX1JFU1VMVFMpIFNsb2cudihUQUdfUkVTVUxUUywKKyAgICAgICAgICAgICAgICAgICAgIldpbGwgc2VuZCByZXN1bHQgdG8gIiArIHJlc3VsdFRvICsgIiAiICsgc291cmNlUmVjb3JkKTsKKyAgICAgICAgICAgIGlmIChzb3VyY2VSZWNvcmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29kZSA+PSAwICYmICFzb3VyY2VSZWNvcmQuZmluaXNoaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlY29yZCA9IHNvdXJjZVJlY29yZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgbGF1bmNoRmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKworICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgSW50ZW50LkZMQUdfQUNUSVZJVFlfRk9SV0FSRF9SRVNVTFQpICE9IDAgJiYgc291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFRyYW5zZmVyIHRoZSByZXN1bHQgdGFyZ2V0IGZyb20gdGhlIHNvdXJjZSBhY3Rpdml0eSB0byB0aGUgbmV3CisgICAgICAgICAgICAvLyBvbmUgYmVpbmcgc3RhcnRlZCwgaW5jbHVkaW5nIGFueSBmYWlsdXJlcy4KKyAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29kZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfRk9SV0FSRF9BTkRfUkVRVUVTVF9DT05GTElDVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdFJlY29yZCA9IHNvdXJjZVJlY29yZC5yZXN1bHRUbzsKKyAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCAmJiAhcmVzdWx0UmVjb3JkLmlzSW5TdGFja0xvY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVjb3JkID0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdFdobyA9IHNvdXJjZVJlY29yZC5yZXN1bHRXaG87CisgICAgICAgICAgICByZXF1ZXN0Q29kZSA9IHNvdXJjZVJlY29yZC5yZXF1ZXN0Q29kZTsKKyAgICAgICAgICAgIHNvdXJjZVJlY29yZC5yZXN1bHRUbyA9IG51bGw7CisgICAgICAgICAgICBpZiAocmVzdWx0UmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQucmVtb3ZlUmVzdWx0c0xvY2tlZChzb3VyY2VSZWNvcmQsIHJlc3VsdFdobywgcmVxdWVzdENvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNvdXJjZVJlY29yZC5sYXVuY2hlZEZyb21VaWQgPT0gY2FsbGluZ1VpZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgZnJvbSB0aGUgc2FtZSB1aWQgYXMgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW4gdGhlIGZsb3csIGFuZCBhc2tpbmcgdG8gZm9yd2FyZCBpdHMgcmVzdWx0IGJhY2sgdG8gdGhlCisgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMuICBJbiB0aGlzIGNhc2UgdGhlIGFjdGl2aXR5IGlzIHNlcnZpbmcgYXMgYSB0cmFtcG9saW5lIGJldHdlZW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgdHdvLCBzbyB3ZSBhbHNvIHdhbnQgdG8gdXBkYXRlIGl0cyBsYXVuY2hlZEZyb21QYWNrYWdlIHRvIGJlIHRoZQorICAgICAgICAgICAgICAgIC8vIHNhbWUgYXMgdGhlIHByZXZpb3VzIGFjdGl2aXR5LiAgTm90ZSB0aGF0IHRoaXMgaXMgc2FmZSwgc2luY2Ugd2Uga25vdworICAgICAgICAgICAgICAgIC8vIHRoZXNlIHR3byBwYWNrYWdlcyBjb21lIGZyb20gdGhlIHNhbWUgdWlkOyB0aGUgY2FsbGVyIGNvdWxkIGp1c3QgYXMKKyAgICAgICAgICAgICAgICAvLyB3ZWxsIGhhdmUgc3VwcGxpZWQgdGhhdCBzYW1lIHBhY2thZ2UgbmFtZSBpdHNlbGYuICBUaGlzIHNwZWNpZmlhbGx5CisgICAgICAgICAgICAgICAgLy8gZGVhbHMgd2l0aCB0aGUgY2FzZSBvZiBhbiBpbnRlbnQgcGlja2VyL2Nob29zZXIgYmVpbmcgbGF1bmNoZWQgaW4gdGhlIGFwcAorICAgICAgICAgICAgICAgIC8vIGZsb3cgdG8gcmVkaXJlY3QgdG8gYW4gYWN0aXZpdHkgcGlja2VkIGJ5IHRoZSB1c2VyLCB3aGVyZSB3ZSB3YW50IHRoZSBmaW5hbAorICAgICAgICAgICAgICAgIC8vIGFjdGl2aXR5IHRvIGNvbnNpZGVyIGl0IHRvIGhhdmUgYmVlbiBsYXVuY2hlZCBieSB0aGUgcHJldmlvdXMgYXBwIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgIGNhbGxpbmdQYWNrYWdlID0gc291cmNlUmVjb3JkLmxhdW5jaGVkRnJvbVBhY2thZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIGludGVudC5nZXRDb21wb25lbnQoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAvLyBXZSBjb3VsZG4ndCBmaW5kIGEgY2xhc3MgdGhhdCBjYW4gaGFuZGxlIHRoZSBnaXZlbiBJbnRlbnQuCisgICAgICAgICAgICAvLyBUaGF0J3MgdGhlIGVuZCBvZiB0aGF0IQorICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0lOVEVOVF9OT1RfUkVTT0xWRUQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyID09IEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TVUNDRVNTICYmIGFJbmZvID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxkbid0IGZpbmQgdGhlIHNwZWNpZmljIGNsYXNzIHNwZWNpZmllZCBpbiB0aGUgSW50ZW50LgorICAgICAgICAgICAgLy8gQWxzbyB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX0NMQVNTX05PVF9GT1VORDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgc291cmNlUmVjb3JkICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBzb3VyY2VSZWNvcmQudGFzay52b2ljZVNlc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBhY3Rpdml0eSBpcyBiZWluZyBsYXVuY2hlZCBhcyBwYXJ0IG9mIGEgdm9pY2Ugc2Vzc2lvbiwgd2UgbmVlZAorICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoYXQgaXQgaXMgc2FmZSB0byBkbyBzby4gIElmIHRoZSB1cGNvbWluZyBhY3Rpdml0eSB3aWxsIGFsc28KKyAgICAgICAgICAgIC8vIGJlIHBhcnQgb2YgdGhlIHZvaWNlIHNlc3Npb24sIHdlIGNhbiBvbmx5IGxhdW5jaCBpdCBpZiBpdCBoYXMgZXhwbGljaXRseQorICAgICAgICAgICAgLy8gc2FpZCBpdCBzdXBwb3J0cyB0aGUgVk9JQ0UgY2F0ZWdvcnksIG9yIGl0IGlzIGEgcGFydCBvZiB0aGUgY2FsbGluZyBhcHAuCisgICAgICAgICAgICBpZiAoKGxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMAorICAgICAgICAgICAgICAgICAgICAmJiBzb3VyY2VSZWNvcmQuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkICE9IGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX1ZPSUNFKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCkuYWN0aXZpdHlTdXBwb3J0c0ludGVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQuZ2V0Q29tcG9uZW50KCksIGludGVudCwgcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaW4gY3VycmVudCB2b2ljZSB0YXNrIGRvZXMgbm90IHN1cHBvcnQgdm9pY2U6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfTk9UX1ZPSUNFX0NPTVBBVElCTEU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbHVyZSBjaGVja2luZyB2b2ljZSBjYXBhYmlsaXRpZXMiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnIgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MgJiYgdm9pY2VTZXNzaW9uICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaXMgc3RhcnRpbmcgYSBuZXcgdm9pY2Ugc2Vzc2lvbiwganVzdCBtYWtlIHN1cmUgdGhlIHRhcmdldAorICAgICAgICAgICAgLy8gaXMgYWN0dWFsbHkgYWxsb3dpbmcgaXQgdG8gcnVuIHRoaXMgd2F5LgorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBpZiAoIUFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5hY3Rpdml0eVN1cHBvcnRzSW50ZW50KGludGVudC5nZXRDb21wb25lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCwgcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpdml0eSBiZWluZyBzdGFydGVkIGluIG5ldyB2b2ljZSB0YXNrIGRvZXMgbm90IHN1cHBvcnQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWx1cmUgY2hlY2tpbmcgdm9pY2UgY2FwYWJpbGl0aWVzIiwgZSk7CisgICAgICAgICAgICAgICAgZXJyID0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX05PVF9WT0lDRV9DT01QQVRJQkxFOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayByZXN1bHRTdGFjayA9IHJlc3VsdFJlY29yZCA9PSBudWxsID8gbnVsbCA6IHJlc3VsdFJlY29yZC50YXNrLnN0YWNrOworCisgICAgICAgIGlmIChlcnIgIT0gU1RBUlRfU1VDQ0VTUykgeworICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc3VsdFJlY29yZCwgcmVzdWx0V2hvLCByZXF1ZXN0Q29kZSwgUkVTVUxUX0NBTkNFTEVELCBudWxsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChvcHRpb25zKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIGFib3J0ID0gIW1TdXBlcnZpc29yLmNoZWNrU3RhcnRBbnlBY3Rpdml0eVBlcm1pc3Npb24oaW50ZW50LCBhSW5mbywgcmVzdWx0V2hvLAorICAgICAgICAgICAgICAgIHJlcXVlc3RDb2RlLCBjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgaWdub3JlVGFyZ2V0U2VjdXJpdHksIGNhbGxlckFwcCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWNvcmQsIHJlc3VsdFN0YWNrKTsKKyAgICAgICAgYWJvcnQgfD0gIW1TZXJ2aWNlLm1JbnRlbnRGaXJld2FsbC5jaGVja1N0YXJ0QWN0aXZpdHkoaW50ZW50LCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQsIHJlc29sdmVkVHlwZSwgYUluZm8uYXBwbGljYXRpb25JbmZvKTsKKworICAgICAgICBpZiAobVNlcnZpY2UubUNvbnRyb2xsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgSW50ZW50IHdlIGdpdmUgdG8gdGhlIHdhdGNoZXIgaGFzIHRoZSBleHRyYSBkYXRhCisgICAgICAgICAgICAgICAgLy8gc3RyaXBwZWQgb2ZmLCBzaW5jZSBpdCBjYW4gY29udGFpbiBwcml2YXRlIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIEludGVudCB3YXRjaEludGVudCA9IGludGVudC5jbG9uZUZpbHRlcigpOworICAgICAgICAgICAgICAgIGFib3J0IHw9ICFtU2VydmljZS5tQ29udHJvbGxlci5hY3Rpdml0eVN0YXJ0aW5nKHdhdGNoSW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbVNlcnZpY2UubUNvbnRyb2xsZXIgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVyY2VwdGluZ0ludGVudCA9IGludGVyY2VwdFdpdGhDb25maXJtQ3JlZGVudGlhbHNJZk5lZWRlZChpbnRlbnQsCisgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlLCBhSW5mbywgY2FsbGluZ1BhY2thZ2UsIHVzZXJJZCk7CisgICAgICAgIGlmIChpbnRlcmNlcHRpbmdJbnRlbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgaW50ZW50ID0gaW50ZXJjZXB0aW5nSW50ZW50OworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IHJlYWxDYWxsaW5nUGlkOworICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOworICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbnRlcmNlcHRpbmcgYW5kIHRoZXJlIHdhcyBhIHRhc2ssIGNvbnZlcnQgaXQgaW50byBhbiBleHRyYSBmb3IgdGhlCisgICAgICAgICAgICAvLyBDb25maXJtQ3JlZGVudGlhbHMgaW50ZW50IGFuZCB1bmFzc2lnbiBpdCwgYXMgb3RoZXJ3aXNlIHRoZSB0YXNrIHdpbGwgbW92ZSB0bworICAgICAgICAgICAgLy8gZnJvbnQgZXZlbiBpZiBDb25maXJtQ3JlZGVudGlhbHMgaXMgY2FuY2VsbGVkLgorICAgICAgICAgICAgaWYgKGluVGFzayAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEVYVFJBX1RBU0tfSUQsIGluVGFzay50YXNrSWQpOworICAgICAgICAgICAgICAgIGluVGFzayA9IG51bGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbmFsIFVzZXJJbmZvIHBhcmVudCA9IFVzZXJNYW5hZ2VyLmdldChtU2VydmljZS5tQ29udGV4dCkuZ2V0UHJvZmlsZVBhcmVudCh1c2VySWQpOworICAgICAgICAgICAgckluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlSW50ZW50KGludGVudCwgcmVzb2x2ZWRUeXBlLCBwYXJlbnQuaWQpOworICAgICAgICAgICAgYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgbnVsbCAvKnByb2ZpbGVySW5mbyovKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhYm9ydCkgeworICAgICAgICAgICAgaWYgKHJlc3VsdFJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0U3RhY2suc2VuZEFjdGl2aXR5UmVzdWx0TG9ja2VkKC0xLCByZXN1bHRSZWNvcmQsIHJlc3VsdFdobywgcmVxdWVzdENvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNVTFRfQ0FOQ0VMRUQsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV2UgcHJldGVuZCB0byB0aGUgY2FsbGVyIHRoYXQgaXQgd2FzIHJlYWxseSBzdGFydGVkLCBidXQKKyAgICAgICAgICAgIC8vIHRoZXkgd2lsbCBqdXN0IGdldCBhIGNhbmNlbCByZXN1bHQuCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHBlcm1pc3Npb25zIG5lZWQgYSByZXZpZXcgYmVmb3JlIGFueSBvZiB0aGUgYXBwIGNvbXBvbmVudHMgY2FuIHJ1biwgd2UKKyAgICAgICAgLy8gbGF1bmNoIHRoZSByZXZpZXcgYWN0aXZpdHkgYW5kIHBhc3MgYSBwZW5kaW5nIGludGVudCB0byBzdGFydCB0aGUgYWN0aXZpdHkKKyAgICAgICAgLy8gd2UgYXJlIHRvIGxhdW5jaGluZyBub3cgYWZ0ZXIgdGhlIHJldmlldyBpcyBjb21wbGV0ZWQuCisgICAgICAgIGlmIChCdWlsZC5QRVJNSVNTSU9OU19SRVZJRVdfUkVRVUlSRUQgJiYgYUluZm8gIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKG1TZXJ2aWNlLmdldFBhY2thZ2VNYW5hZ2VySW50ZXJuYWxMb2NrZWQoKS5pc1Blcm1pc3Npb25zUmV2aWV3UmVxdWlyZWQoCisgICAgICAgICAgICAgICAgICAgIGFJbmZvLnBhY2thZ2VOYW1lLCB1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuSU5URU5UX1NFTkRFUl9BQ1RJVklUWSwgY2FsbGluZ1BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXtpbnRlbnR9LAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tde3Jlc29sdmVkVHlwZX0sIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7CisKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBJbnRlbnQgbmV3SW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1JFVklFV19QRVJNSVNTSU9OUyk7CisgICAgICAgICAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKGZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKKyAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1BBQ0tBR0VfTkFNRSwgYUluZm8ucGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfSU5URU5ULCBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHRSZWNvcmQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1JFU1VMVF9ORUVERUQsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXdJbnRlbnQ7CisKKyAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSByZWFsQ2FsbGluZ1VpZDsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7CisKKyAgICAgICAgICAgICAgICBySW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVJbnRlbnQoaW50ZW50LCByZXNvbHZlZFR5cGUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLypwcm9maWxlckluZm8qLyk7CisKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfUEVSTUlTU0lPTlNfUkVWSUVXKSB7CisgICAgICAgICAgICAgICAgICAgIFNsb2cuaShUQUcsICJTVEFSVCB1IiArIHVzZXJJZCArICIgeyIgKyBpbnRlbnQudG9TaG9ydFN0cmluZyh0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIGZhbHNlKSArICJ9IGZyb20gdWlkICIgKyBjYWxsaW5nVWlkICsgIiBvbiBkaXNwbGF5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIChjb250YWluZXIgPT0gbnVsbCA/IChtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrID09IG51bGwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkuREVGQVVMVF9ESVNQTEFZIDogbVN1cGVydmlzb3IubUZvY3VzZWRTdGFjay5tRGlzcGxheUlkKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRhaW5lci5tQWN0aXZpdHlEaXNwbGF5ID09IG51bGwgPyBEaXNwbGF5LkRFRkFVTFRfRElTUExBWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubUFjdGl2aXR5RGlzcGxheS5tRGlzcGxheUlkKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXBoZW1lcmFsIGFwcCwgYWJvcnQgdGhlIHByb2Nlc3Mgb2YgbGF1bmNoaW5nIHRoZSByZXNvbHZlZCBpbnRlbnQuCisgICAgICAgIC8vIEluc3RlYWQsIGxhdW5jaCB0aGUgZXBoZW1lcmFsIGluc3RhbGxlci4gT25jZSB0aGUgaW5zdGFsbGVyIGlzIGZpbmlzaGVkLCBpdAorICAgICAgICAvLyBzdGFydHMgZWl0aGVyIHRoZSBpbnRlbnQgd2UgcmVzb2x2ZWQgaGVyZSBbb24gaW5zdGFsbCBlcnJvcl0gb3IgdGhlIGVwaGVtZXJhbAorICAgICAgICAvLyBhcHAgW29uIGluc3RhbGwgc3VjY2Vzc10uCisgICAgICAgIGlmIChySW5mbyAhPSBudWxsICYmIHJJbmZvLmVwaGVtZXJhbFJlc29sdmVJbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHBlbmRpbmcgaW50ZW50IHRvIHN0YXJ0IHRoZSBpbnRlbnQgcmVzb2x2ZWQgaGVyZS4KKyAgICAgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgZmFpbHVyZVRhcmdldCA9IG1TZXJ2aWNlLmdldEludGVudFNlbmRlckxvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLklOVEVOVF9TRU5ERVJfQUNUSVZJVFksIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIG51bGwsIG51bGwsIDAsIG5ldyBJbnRlbnRbXXsgaW50ZW50IH0sCisgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXXsgcmVzb2x2ZWRUeXBlIH0sCisgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuRkxBR19DQU5DRUxfQ1VSUkVOVCB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGVuZGluZ0ludGVudC5GTEFHX0lNTVVUQUJMRSwgbnVsbCk7CisKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIHBlbmRpbmcgaW50ZW50IHRvIHN0YXJ0IHRoZSBlcGhlbWVyYWwgYXBwbGljYXRpb247IGZvcmNlIGl0IHRvIGJlCisgICAgICAgICAgICAvLyBkaXJlY3RlZCB0byB0aGUgZXBoZW1lcmFsIHBhY2thZ2UuCisgICAgICAgICAgICBlcGhlbWVyYWxJbnRlbnQuc2V0UGFja2FnZShySW5mby5lcGhlbWVyYWxSZXNvbHZlSW5mby5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgZXBoZW1lcmFsVGFyZ2V0ID0gbVNlcnZpY2UuZ2V0SW50ZW50U2VuZGVyTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuSU5URU5UX1NFTkRFUl9BQ1RJVklUWSwgY2FsbGluZ1BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdeyBlcGhlbWVyYWxJbnRlbnQgfSwKKyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdeyByZXNvbHZlZFR5cGUgfSwKKyAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5GTEFHX0NBTkNFTF9DVVJSRU5UIHwgUGVuZGluZ0ludGVudC5GTEFHX09ORV9TSE9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQZW5kaW5nSW50ZW50LkZMQUdfSU1NVVRBQkxFLCBudWxsKTsKKworICAgICAgICAgICAgaW50IGZsYWdzID0gaW50ZW50LmdldEZsYWdzKCk7CisgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICAgICAgICBpbnRlbnQuc2V0RmxhZ3MoZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSworICAgICAgICAgICAgICAgICAgICB8IEludGVudC5GTEFHX0FDVElWSVRZX0VYQ0xVREVfRlJPTV9SRUNFTlRTKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfUEFDS0FHRV9OQU1FLAorICAgICAgICAgICAgICAgICAgICBySW5mby5lcGhlbWVyYWxSZXNvbHZlSW5mby5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfRVBIRU1FUkFMX0ZBSUxVUkUsIG5ldyBJbnRlbnRTZW5kZXIoZmFpbHVyZVRhcmdldCkpOworICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9FUEhFTUVSQUxfU1VDQ0VTUywgbmV3IEludGVudFNlbmRlcihlcGhlbWVyYWxUYXJnZXQpKTsKKworICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDsKKyAgICAgICAgICAgIGNhbGxpbmdVaWQgPSByZWFsQ2FsbGluZ1VpZDsKKyAgICAgICAgICAgIGNhbGxpbmdQaWQgPSByZWFsQ2FsbGluZ1BpZDsKKworICAgICAgICAgICAgckluZm8gPSBySW5mby5lcGhlbWVyYWxJbnN0YWxsZXI7CisgICAgICAgICAgICBhSW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJJbmZvLCBzdGFydEZsYWdzLCBudWxsIC8qcHJvZmlsZXJJbmZvKi8pOworICAgICAgICB9CisKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgciA9IG5ldyBBY3Rpdml0eVJlY29yZChtU2VydmljZSwgY2FsbGVyQXBwLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwKKyAgICAgICAgICAgICAgICBpbnRlbnQsIHJlc29sdmVkVHlwZSwgYUluZm8sIG1TZXJ2aWNlLm1Db25maWd1cmF0aW9uLCByZXN1bHRSZWNvcmQsIHJlc3VsdFdobywKKyAgICAgICAgICAgICAgICByZXF1ZXN0Q29kZSwgY29tcG9uZW50U3BlY2lmaWVkLCB2b2ljZVNlc3Npb24gIT0gbnVsbCwgbVN1cGVydmlzb3IsIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBvcHRpb25zKTsKKyAgICAgICAgaWYgKG91dEFjdGl2aXR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIG91dEFjdGl2aXR5WzBdID0gcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyLmFwcFRpbWVUcmFja2VyID09IG51bGwgJiYgc291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgZGlkbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgdGltZSB0cmFja2VyLCB3ZSB3YW50IHRvIGNvbnRpbnVlCisgICAgICAgICAgICAvLyB0cmFja2luZyB1bmRlciBhbnkgaXQgaGFzLgorICAgICAgICAgICAgci5hcHBUaW1lVHJhY2tlciA9IHNvdXJjZVJlY29yZC5hcHBUaW1lVHJhY2tlcjsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2sgc3RhY2sgPSBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrOworICAgICAgICBpZiAodm9pY2VTZXNzaW9uID09IG51bGwgJiYgKHN0YWNrLm1SZXN1bWVkQWN0aXZpdHkgPT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IHN0YWNrLm1SZXN1bWVkQWN0aXZpdHkuaW5mby5hcHBsaWNhdGlvbkluZm8udWlkICE9IGNhbGxpbmdVaWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXJ2aWNlLmNoZWNrQXBwU3dpdGNoQWxsb3dlZExvY2tlZChjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgICAgICAgICByZWFsQ2FsbGluZ1BpZCwgcmVhbENhbGxpbmdVaWQsICJBY3Rpdml0eSBzdGFydCIpKSB7CisgICAgICAgICAgICAgICAgUGVuZGluZ0FjdGl2aXR5TGF1bmNoIHBhbCA9ICBuZXcgUGVuZGluZ0FjdGl2aXR5TGF1bmNoKHIsCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VSZWNvcmQsIHN0YXJ0RmxhZ3MsIHN0YWNrLCBjYWxsZXJBcHApOworICAgICAgICAgICAgICAgIG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5hZGQocGFsKTsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQob3B0aW9ucyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFjdGl2aXR5TWFuYWdlci5TVEFSVF9TV0lUQ0hFU19DQU5DRUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU2VydmljZS5tRGlkQXBwU3dpdGNoKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzZWNvbmQgYWxsb3dlZCBzd2l0Y2ggc2luY2Ugd2Ugc3RvcHBlZCBzd2l0Y2hlcywKKyAgICAgICAgICAgIC8vIHNvIG5vdyBqdXN0IGdlbmVyYWxseSBhbGxvdyBzd2l0Y2hlcy4gIFVzZSBjYXNlOiB1c2VyIHByZXNzZXMKKyAgICAgICAgICAgIC8vIGhvbWUgKHN3aXRjaGVzIGRpc2FibGVkLCBzd2l0Y2ggdG8gaG9tZSwgbURpZEFwcFN3aXRjaCBub3cgdHJ1ZSk7CisgICAgICAgICAgICAvLyB1c2VyIHRhcHMgYSBob21lIGljb24gKGNvbWluZyBmcm9tIGhvbWUgc28gYWxsb3dlZCwgd2UgaGl0IGhlcmUKKyAgICAgICAgICAgIC8vIGFuZCBub3cgYWxsb3cgYW55b25lIHRvIHN3aXRjaCBhZ2FpbikuCisgICAgICAgICAgICBtU2VydmljZS5tQXBwU3dpdGNoZXNBbGxvd2VkVGltZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU2VydmljZS5tRGlkQXBwU3dpdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRvUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQoZmFsc2UpOworCisgICAgICAgIGVyciA9IHN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQoCisgICAgICAgICAgICAgICAgciwgc291cmNlUmVjb3JkLCB2b2ljZVNlc3Npb24sIHZvaWNlSW50ZXJhY3Rvciwgc3RhcnRGbGFncywgdHJ1ZSwgb3B0aW9ucywgaW5UYXNrKTsKKworICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgLy8gSWYgc29tZW9uZSBhc2tlZCB0byBoYXZlIHRoZSBrZXlndWFyZCBkaXNtaXNzZWQgb24gdGhlIG5leHQKKyAgICAgICAgICAgIC8vIGFjdGl2aXR5IHN0YXJ0LCBidXQgd2UgYXJlIG5vdCBhY3R1YWxseSBkb2luZyBhbiBhY3Rpdml0eQorICAgICAgICAgICAgLy8gc3dpdGNoLi4uICBqdXN0IGRpc21pc3MgdGhlIGtleWd1YXJkIG5vdywgYmVjYXVzZSB3ZQorICAgICAgICAgICAgLy8gcHJvYmFibHkgd2FudCB0byBzZWUgd2hhdGV2ZXIgaXMgYmVoaW5kIGl0LgorICAgICAgICAgICAgbVN1cGVydmlzb3Iubm90aWZ5QWN0aXZpdHlEcmF3bkZvcktleWd1YXJkKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsYXVuY2hSZWNlbnRzQXBwSWZOZWVkZWQoc3RhY2spOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGFuIGludGVudCB0byBpbnRlcmNlcHQgdGhlIGN1cnJlbnQgYWN0aXZpdHkgc3RhcnQgd2l0aCBDb25maXJtIENyZWRlbnRpYWxzIGlmIG5lZWRlZC4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGludGVyY2VwdGluZyBpbnRlbnQgaWYgbmVlZGVkLgorICAgICAqLworICAgIHByaXZhdGUgSW50ZW50IGludGVyY2VwdFdpdGhDb25maXJtQ3JlZGVudGlhbHNJZk5lZWRlZChJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLAorICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGFJbmZvLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFtU2VydmljZS5tVXNlckNvbnRyb2xsZXIuc2hvdWxkQ29uZmlybUNyZWRlbnRpYWxzKHVzZXJJZCkpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZpbmFsIElJbnRlbnRTZW5kZXIgdGFyZ2V0ID0gbVNlcnZpY2UuZ2V0SW50ZW50U2VuZGVyTG9ja2VkKAorICAgICAgICAgICAgICAgIElOVEVOVF9TRU5ERVJfQUNUSVZJVFksIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgICAgIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdeyBpbnRlbnQgfSwKKyAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117IHJlc29sdmVkVHlwZSB9LAorICAgICAgICAgICAgICAgIEZMQUdfQ0FOQ0VMX0NVUlJFTlQgfCBGTEFHX09ORV9TSE9UIHwgRkxBR19JTU1VVEFCTEUsIG51bGwpOworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBpbnRlbnQuZ2V0RmxhZ3MoKTsKKyAgICAgICAgZmluYWwgS2V5Z3VhcmRNYW5hZ2VyIGttID0gKEtleWd1YXJkTWFuYWdlcikgbVNlcnZpY2UubUNvbnRleHQKKyAgICAgICAgICAgICAgICAuZ2V0U3lzdGVtU2VydmljZShLRVlHVUFSRF9TRVJWSUNFKTsKKyAgICAgICAgZmluYWwgSW50ZW50IG5ld0ludGVudCA9IGttLmNyZWF0ZUNvbmZpcm1EZXZpY2VDcmVkZW50aWFsSW50ZW50KG51bGwsIG51bGwsIHVzZXJJZCk7CisgICAgICAgIGlmIChuZXdJbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgbmV3SW50ZW50LnNldEZsYWdzKGZsYWdzIHwgRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfRVhDTFVERV9GUk9NX1JFQ0VOVFMpOworICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoRVhUUkFfUEFDS0FHRV9OQU1FLCBhSW5mby5wYWNrYWdlTmFtZSk7CisgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShFWFRSQV9JTlRFTlQsIG5ldyBJbnRlbnRTZW5kZXIodGFyZ2V0KSk7CisgICAgICAgIHJldHVybiBuZXdJbnRlbnQ7CisgICAgfQorCisgICAgdm9pZCBzdGFydEhvbWVBY3Rpdml0eUxvY2tlZChJbnRlbnQgaW50ZW50LCBBY3Rpdml0eUluZm8gYUluZm8sIFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgbVN1cGVydmlzb3IubW92ZUhvbWVTdGFja1Rhc2tUb1RvcChIT01FX0FDVElWSVRZX1RZUEUsIHJlYXNvbik7CisgICAgICAgIHN0YXJ0QWN0aXZpdHlMb2NrZWQobnVsbCAvKmNhbGxlciovLCBpbnRlbnQsIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywKKyAgICAgICAgICAgICAgICBudWxsIC8qcmVzb2x2ZWRUeXBlKi8sIGFJbmZvLCBudWxsIC8qckluZm8qLywgbnVsbCAvKnZvaWNlU2Vzc2lvbiovLAorICAgICAgICAgICAgICAgIG51bGwgLyp2b2ljZUludGVyYWN0b3IqLywgbnVsbCAvKnJlc3VsdFRvKi8sIG51bGwgLypyZXN1bHRXaG8qLywKKyAgICAgICAgICAgICAgICAwIC8qcmVxdWVzdENvZGUqLywgMCAvKmNhbGxpbmdQaWQqLywgMCAvKmNhbGxpbmdVaWQqLywgbnVsbCAvKmNhbGxpbmdQYWNrYWdlKi8sCisgICAgICAgICAgICAgICAgMCAvKnJlYWxDYWxsaW5nUGlkKi8sIDAgLypyZWFsQ2FsbGluZ1VpZCovLCAwIC8qc3RhcnRGbGFncyovLCBudWxsIC8qb3B0aW9ucyovLAorICAgICAgICAgICAgICAgIGZhbHNlIC8qaWdub3JlVGFyZ2V0U2VjdXJpdHkqLywgZmFsc2UgLypjb21wb25lbnRTcGVjaWZpZWQqLywgIG51bGwgLypvdXRBY3Rpdml0eSovLAorICAgICAgICAgICAgICAgIG51bGwgLypjb250YWluZXIqLywgbnVsbCAvKmluVGFzayovKTsKKyAgICAgICAgaWYgKG1TdXBlcnZpc29yLmluUmVzdW1lVG9wQWN0aXZpdHkpIHsKKyAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiByZXN1bWUgc2VjdGlvbiBhbHJlYWR5LCBob21lIGFjdGl2aXR5IHdpbGwgYmUgaW5pdGlhbGl6ZWQsIGJ1dCBub3QKKyAgICAgICAgICAgIC8vIHJlc3VtZWQgKHRvIGF2b2lkIHJlY3Vyc2l2ZSByZXN1bWUpIGFuZCB3aWxsIHN0YXkgdGhhdCB3YXkgdW50aWwgc29tZXRoaW5nIHBva2VzIGl0CisgICAgICAgICAgICAvLyBhZ2Fpbi4gV2UgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHJlc3VtZS4KKyAgICAgICAgICAgIG1TdXBlcnZpc29yLnNjaGVkdWxlUmVzdW1lVG9wQWN0aXZpdGllcygpOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdHlNYXlXYWl0KElBcHBsaWNhdGlvblRocmVhZCBjYWxsZXIsIGludCBjYWxsaW5nVWlkLAorICAgICAgICAgICAgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLCBJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLAorICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IsCisgICAgICAgICAgICBJQmluZGVyIHJlc3VsdFRvLCBTdHJpbmcgcmVzdWx0V2hvLCBpbnQgcmVxdWVzdENvZGUsIGludCBzdGFydEZsYWdzLAorICAgICAgICAgICAgUHJvZmlsZXJJbmZvIHByb2ZpbGVySW5mbywgSUFjdGl2aXR5TWFuYWdlci5XYWl0UmVzdWx0IG91dFJlc3VsdCwgQ29uZmlndXJhdGlvbiBjb25maWcsCisgICAgICAgICAgICBCdW5kbGUgYk9wdGlvbnMsIGJvb2xlYW4gaWdub3JlVGFyZ2V0U2VjdXJpdHksIGludCB1c2VySWQsCisgICAgICAgICAgICBJQWN0aXZpdHlDb250YWluZXIgaUNvbnRhaW5lciwgVGFza1JlY29yZCBpblRhc2spIHsKKyAgICAgICAgLy8gUmVmdXNlIHBvc3NpYmxlIGxlYWtlZCBmaWxlIGRlc2NyaXB0b3JzCisgICAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCAmJiBpbnRlbnQuaGFzRmlsZURlc2NyaXB0b3JzKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkZpbGUgZGVzY3JpcHRvcnMgcGFzc2VkIGluIEludGVudCIpOworICAgICAgICB9CisgICAgICAgIGJvb2xlYW4gY29tcG9uZW50U3BlY2lmaWVkID0gaW50ZW50LmdldENvbXBvbmVudCgpICE9IG51bGw7CisKKyAgICAgICAgLy8gU2F2ZSBhIGNvcHkgaW4gY2FzZSBlcGhlbWVyYWwgbmVlZHMgaXQKKyAgICAgICAgZmluYWwgSW50ZW50IGVwaGVtZXJhbEludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKKyAgICAgICAgLy8gRG9uJ3QgbW9kaWZ5IHRoZSBjbGllbnQncyBvYmplY3QhCisgICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoaW50ZW50KTsKKworICAgICAgICBSZXNvbHZlSW5mbyBySW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVJbnRlbnQoaW50ZW50LCByZXNvbHZlZFR5cGUsIHVzZXJJZCk7CisgICAgICAgIC8vIENvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBvZiB0aGUgSW50ZW50LgorICAgICAgICBBY3Rpdml0eUluZm8gYUluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlQWN0aXZpdHkoaW50ZW50LCBySW5mbywgc3RhcnRGbGFncywgcHJvZmlsZXJJbmZvKTsKKworICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucyA9IEFjdGl2aXR5T3B0aW9ucy5mcm9tQnVuZGxlKGJPcHRpb25zKTsKKyAgICAgICAgQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQWN0aXZpdHlDb250YWluZXIgY29udGFpbmVyID0KKyAgICAgICAgICAgICAgICAoQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuQWN0aXZpdHlDb250YWluZXIpaUNvbnRhaW5lcjsKKyAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsICYmIGNvbnRhaW5lci5tUGFyZW50QWN0aXZpdHkgIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICBjb250YWluZXIubVBhcmVudEFjdGl2aXR5LnN0YXRlICE9IFJFU1VNRUQpIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3RhcnQgYSBjaGlsZCBhY3Rpdml0eSBpZiB0aGUgcGFyZW50IGlzIG5vdCByZXN1bWVkLgorICAgICAgICAgICAgICAgIHJldHVybiBBY3Rpdml0eU1hbmFnZXIuU1RBUlRfQ0FOQ0VMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBpbnQgcmVhbENhbGxpbmdQaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1BpZCgpOworICAgICAgICAgICAgZmluYWwgaW50IHJlYWxDYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKKyAgICAgICAgICAgIGludCBjYWxsaW5nUGlkOworICAgICAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgeworICAgICAgICAgICAgICAgIGNhbGxpbmdQaWQgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gcmVhbENhbGxpbmdQaWQ7CisgICAgICAgICAgICAgICAgY2FsbGluZ1VpZCA9IHJlYWxDYWxsaW5nVWlkOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjYWxsaW5nUGlkID0gY2FsbGluZ1VpZCA9IC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrOworICAgICAgICAgICAgaWYgKGNvbnRhaW5lciA9PSBudWxsIHx8IGNvbnRhaW5lci5tU3RhY2suaXNPbkhvbWVEaXNwbGF5KCkpIHsKKyAgICAgICAgICAgICAgICBzdGFjayA9IG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2s7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YWNrID0gY29udGFpbmVyLm1TdGFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlID0gY29uZmlnICE9IG51bGwgJiYgbVNlcnZpY2UubUNvbmZpZ3VyYXRpb24uZGlmZihjb25maWcpICE9IDA7CisgICAgICAgICAgICBpZiAoREVCVUdfQ09ORklHVVJBVElPTikgU2xvZy52KFRBR19DT05GSUdVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAiU3RhcnRpbmcgYWN0aXZpdHkgd2hlbiBjb25maWcgd2lsbCBjaGFuZ2UgPSAiICsgc3RhY2subUNvbmZpZ1dpbGxDaGFuZ2UpOworCisgICAgICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworCisgICAgICAgICAgICBpZiAoYUluZm8gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICAoYUluZm8uYXBwbGljYXRpb25JbmZvLnByaXZhdGVGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19DQU5UX1NBVkVfU1RBVEUpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBiZSBhIGhlYXZ5LXdlaWdodCBwcm9jZXNzISAgQ2hlY2sgdG8gc2VlIGlmIHdlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGFub3RoZXIsIGRpZmZlcmVudCBoZWF2eS13ZWlnaHQgcHJvY2VzcyBydW5uaW5nLgorICAgICAgICAgICAgICAgIGlmIChhSW5mby5wcm9jZXNzTmFtZS5lcXVhbHMoYUluZm8uYXBwbGljYXRpb25JbmZvLnBhY2thZ2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBQcm9jZXNzUmVjb3JkIGhlYXZ5ID0gbVNlcnZpY2UubUhlYXZ5V2VpZ2h0UHJvY2VzczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXZ5ICE9IG51bGwgJiYgKGhlYXZ5LmluZm8udWlkICE9IGFJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAhaGVhdnkucHJvY2Vzc05hbWUuZXF1YWxzKGFJbmZvLnByb2Nlc3NOYW1lKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcHBDYWxsaW5nVWlkID0gY2FsbGluZ1VpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgY2FsbGVyQXBwID0gbVNlcnZpY2UuZ2V0UmVjb3JkRm9yQXBwTG9ja2VkKGNhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlckFwcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQgPSBjYWxsZXJBcHAuaW5mby51aWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBmaW5kIGFwcCBmb3IgY2FsbGVyICIgKyBjYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgKHBpZD0iICsgY2FsbGluZ1BpZCArICIpIHdoZW4gc3RhcnRpbmc6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGludGVudC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG9wdGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1BFUk1JU1NJT05fREVOSUVEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgSUludGVudFNlbmRlciB0YXJnZXQgPSBtU2VydmljZS5nZXRJbnRlbnRTZW5kZXJMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlci5JTlRFTlRfU0VOREVSX0FDVElWSVRZLCAiYW5kcm9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcENhbGxpbmdVaWQsIHVzZXJJZCwgbnVsbCwgbnVsbCwgMCwgbmV3IEludGVudFtdIHsgaW50ZW50IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdbXSB7IHJlc29sdmVkVHlwZSB9LCBQZW5kaW5nSW50ZW50LkZMQUdfQ0FOQ0VMX0NVUlJFTlQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBlbmRpbmdJbnRlbnQuRkxBR19PTkVfU0hPVCwgbnVsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEludGVudCBuZXdJbnRlbnQgPSBuZXcgSW50ZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdENvZGUgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyByZXF1ZXN0aW5nIGEgcmVzdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX0hBU19SRVNVTFQsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfSU5URU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50U2VuZGVyKHRhcmdldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYXZ5LmFjdGl2aXRpZXMuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIGhpc3QgPSBoZWF2eS5hY3Rpdml0aWVzLmdldCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQucHV0RXh0cmEoSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LktFWV9DVVJfQVBQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdC5wYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW50ZW50LnB1dEV4dHJhKEhlYXZ5V2VpZ2h0U3dpdGNoZXJBY3Rpdml0eS5LRVlfQ1VSX1RBU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0LnRhc2sudGFza0lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5wdXRFeHRyYShIZWF2eVdlaWdodFN3aXRjaGVyQWN0aXZpdHkuS0VZX05FV19BUFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFJbmZvLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ludGVudC5zZXRGbGFncyhpbnRlbnQuZ2V0RmxhZ3MoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnRlbnQuc2V0Q2xhc3NOYW1lKCJhbmRyb2lkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGVhdnlXZWlnaHRTd2l0Y2hlckFjdGl2aXR5LmNsYXNzLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXdJbnRlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGUgPSBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGluZ1BpZCA9IEJpbmRlci5nZXRDYWxsaW5nUGlkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRTcGVjaWZpZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgckluZm8gPSBtU3VwZXJ2aXNvci5yZXNvbHZlSW50ZW50KGludGVudCwgbnVsbCAvKnJlc29sdmVkVHlwZSovLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBySW5mbyAhPSBudWxsID8gckluZm8uYWN0aXZpdHlJbmZvIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBtU2VydmljZS5nZXRBY3Rpdml0eUluZm9Gb3JVc2VyKGFJbmZvLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgcmVzID0gc3RhcnRBY3Rpdml0eUxvY2tlZChjYWxsZXIsIGludGVudCwgZXBoZW1lcmFsSW50ZW50LCByZXNvbHZlZFR5cGUsCisgICAgICAgICAgICAgICAgICAgIGFJbmZvLCBySW5mbywgdm9pY2VTZXNzaW9uLCB2b2ljZUludGVyYWN0b3IsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFRvLCByZXN1bHRXaG8sIHJlcXVlc3RDb2RlLCBjYWxsaW5nUGlkLAorICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgcmVhbENhbGxpbmdQaWQsIHJlYWxDYWxsaW5nVWlkLCBzdGFydEZsYWdzLAorICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBpZ25vcmVUYXJnZXRTZWN1cml0eSwgY29tcG9uZW50U3BlY2lmaWVkLCBudWxsLCBjb250YWluZXIsIGluVGFzayk7CisKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CisKKyAgICAgICAgICAgIGlmIChzdGFjay5tQ29uZmlnV2lsbENoYW5nZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgYWxzbyB3YW50cyB0byBzd2l0Y2ggdG8gYSBuZXcgY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAvLyBkbyBzbyBub3cuICBUaGlzIGFsbG93cyBhIGNsZWFuIHN3aXRjaCwgYXMgd2UgYXJlIHdhaXRpbmcKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGN1cnJlbnQgYWN0aXZpdHkgdG8gcGF1c2UgKHNvIHdlIHdpbGwgbm90IGRlc3Ryb3kKKyAgICAgICAgICAgICAgICAvLyBpdCksIGFuZCBoYXZlIG5vdCB5ZXQgc3RhcnRlZCB0aGUgbmV4dCBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICBtU2VydmljZS5lbmZvcmNlQ2FsbGluZ1Blcm1pc3Npb24oYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkNIQU5HRV9DT05GSUdVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZUNvbmZpZ3VyYXRpb24oKSIpOworICAgICAgICAgICAgICAgIHN0YWNrLm1Db25maWdXaWxsQ2hhbmdlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0NPTkZJR1VSQVRJT04pIFNsb2cudihUQUdfQ09ORklHVVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVcGRhdGluZyB0byBuZXcgY29uZmlndXJhdGlvbiBhZnRlciBzdGFydGluZyBhY3Rpdml0eS4iKTsKKyAgICAgICAgICAgICAgICBtU2VydmljZS51cGRhdGVDb25maWd1cmF0aW9uTG9ja2VkKGNvbmZpZywgbnVsbCwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAob3V0UmVzdWx0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBvdXRSZXN1bHQucmVzdWx0ID0gcmVzOworICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gQWN0aXZpdHlNYW5hZ2VyLlNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgbVN1cGVydmlzb3IubVdhaXRpbmdBY3Rpdml0eUxhdW5jaGVkLmFkZChvdXRSZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLndhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIW91dFJlc3VsdC50aW1lb3V0ICYmIG91dFJlc3VsdC53aG8gPT0gbnVsbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gU1RBUlRfVEFTS19UT19GUk9OVCkgeworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCByID0gc3RhY2sudG9wUnVubmluZ0FjdGl2aXR5TG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyLm5vd1Zpc2libGUgJiYgci5zdGF0ZSA9PSBSRVNVTUVEKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGltZW91dCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LndobyA9IG5ldyBDb21wb25lbnROYW1lKHIuaW5mby5wYWNrYWdlTmFtZSwgci5pbmZvLm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRvdGFsVGltZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRSZXN1bHQudGhpc1RpbWUgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0UmVzdWx0LnRoaXNUaW1lID0gU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5tV2FpdGluZ0FjdGl2aXR5VmlzaWJsZS5hZGQob3V0UmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS53YWl0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFvdXRSZXN1bHQudGltZW91dCAmJiBvdXRSZXN1bHQud2hvID09IG51bGwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgfQorCisgICAgZmluYWwgaW50IHN0YXJ0QWN0aXZpdGllcyhJQXBwbGljYXRpb25UaHJlYWQgY2FsbGVyLCBpbnQgY2FsbGluZ1VpZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlLAorICAgICAgICAgICAgSW50ZW50W10gaW50ZW50cywgU3RyaW5nW10gcmVzb2x2ZWRUeXBlcywgSUJpbmRlciByZXN1bHRUbywKKyAgICAgICAgICAgIEJ1bmRsZSBiT3B0aW9ucywgaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoaW50ZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludGVudHMgaXMgbnVsbCIpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNvbHZlZFR5cGVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigicmVzb2x2ZWRUeXBlcyBpcyBudWxsIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVudHMubGVuZ3RoICE9IHJlc29sdmVkVHlwZXMubGVuZ3RoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnRlbnRzIGFyZSBsZW5ndGggZGlmZmVyZW50IHRoYW4gcmVzb2x2ZWRUeXBlcyIpOworICAgICAgICB9CisKKworICAgICAgICBpbnQgY2FsbGluZ1BpZDsKKyAgICAgICAgaWYgKGNhbGxpbmdVaWQgPj0gMCkgeworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IC0xOworICAgICAgICB9IGVsc2UgaWYgKGNhbGxlciA9PSBudWxsKSB7CisgICAgICAgICAgICBjYWxsaW5nUGlkID0gQmluZGVyLmdldENhbGxpbmdQaWQoKTsKKyAgICAgICAgICAgIGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2FsbGluZ1BpZCA9IGNhbGxpbmdVaWQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkW10gb3V0QWN0aXZpdHkgPSBuZXcgQWN0aXZpdHlSZWNvcmRbMV07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGludGVudHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IGludGVudHNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBSZWZ1c2UgcG9zc2libGUgbGVha2VkIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudCAhPSBudWxsICYmIGludGVudC5oYXNGaWxlRGVzY3JpcHRvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBkZXNjcmlwdG9ycyBwYXNzZWQgaW4gSW50ZW50Iik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbXBvbmVudFNwZWNpZmllZCA9IGludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsOworCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG1vZGlmeSB0aGUgY2xpZW50J3Mgb2JqZWN0IQorICAgICAgICAgICAgICAgICAgICBpbnRlbnQgPSBuZXcgSW50ZW50KGludGVudCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIHRoZSBJbnRlbnQuCisgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBhSW5mbyA9IG1TdXBlcnZpc29yLnJlc29sdmVBY3Rpdml0eShpbnRlbnQsIHJlc29sdmVkVHlwZXNbaV0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmV3LCBjaGVjayBpZiB0aGlzIGlzIGNvcnJlY3QKKyAgICAgICAgICAgICAgICAgICAgYUluZm8gPSBtU2VydmljZS5nZXRBY3Rpdml0eUluZm9Gb3JVc2VyKGFJbmZvLCB1c2VySWQpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChhSW5mbyAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFJbmZvLmFwcGxpY2F0aW9uSW5mby5wcml2YXRlRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19DQU5UX1NBVkVfU1RBVEUpICAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRkxBR19DQU5UX1NBVkVfU1RBVEUgbm90IHN1cHBvcnRlZCBoZXJlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucyA9IEFjdGl2aXR5T3B0aW9ucy5mcm9tQnVuZGxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPT0gaW50ZW50cy5sZW5ndGggLSAxID8gYk9wdGlvbnMgOiBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJlcyA9IHN0YXJ0QWN0aXZpdHlMb2NrZWQoY2FsbGVyLCBpbnRlbnQsIG51bGwgLyplcGhlbWVyYWxJbnRlbnQqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFR5cGVzW2ldLCBhSW5mbywgbnVsbCAvKnJJbmZvKi8sIG51bGwsIG51bGwsIHJlc3VsdFRvLCBudWxsLCAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsaW5nUGlkLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSwgY2FsbGluZ1BpZCwgY2FsbGluZ1VpZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLCBmYWxzZSwgY29tcG9uZW50U3BlY2lmaWVkLCBvdXRBY3Rpdml0eSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0VG8gPSBvdXRBY3Rpdml0eVswXSAhPSBudWxsID8gb3V0QWN0aXZpdHlbMF0uYXBwVG9rZW4gOiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KG9yaWdJZCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzdGFydEFjdGl2aXR5VW5jaGVja2VkKGZpbmFsIEFjdGl2aXR5UmVjb3JkIHIsIEFjdGl2aXR5UmVjb3JkIHNvdXJjZVJlY29yZCwKKyAgICAgICAgICAgIElWb2ljZUludGVyYWN0aW9uU2Vzc2lvbiB2b2ljZVNlc3Npb24sIElWb2ljZUludGVyYWN0b3Igdm9pY2VJbnRlcmFjdG9yLAorICAgICAgICAgICAgaW50IHN0YXJ0RmxhZ3MsIGJvb2xlYW4gZG9SZXN1bWUsIEFjdGl2aXR5T3B0aW9ucyBvcHRpb25zLCBUYXNrUmVjb3JkIGluVGFzaykgeworCisgICAgICAgIHNldEluaXRpYWxTdGF0ZShyLCBvcHRpb25zLCBpblRhc2ssIGRvUmVzdW1lLCBzdGFydEZsYWdzLCBzb3VyY2VSZWNvcmQsIHZvaWNlU2Vzc2lvbiwKKyAgICAgICAgICAgICAgICB2b2ljZUludGVyYWN0b3IpOworCisgICAgICAgIGNvbXB1dGVMYXVuY2hpbmdUYXNrRmxhZ3MoKTsKKworICAgICAgICBjb21wdXRlU291cmNlU3RhY2soKTsKKworICAgICAgICBtSW50ZW50LnNldEZsYWdzKG1MYXVuY2hGbGFncyk7CisKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkgPSBnZXRSZXVzYWJsZUludGVudEFjdGl2aXR5KCk7CisKKyAgICAgICAgaWYgKGludGVudEFjdGl2aXR5ICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZsYWdzIE5FV19UQVNLIGFuZCBDTEVBUl9UQVNLIGFyZSBzZXQsIHRoZW4gdGhlIHRhc2sgZ2V0cyByZXVzZWQgYnV0CisgICAgICAgICAgICAvLyBzdGlsbCBuZWVkcyB0byBiZSBhIGxvY2sgdGFzayBtb2RlIHZpb2xhdGlvbiBzaW5jZSB0aGUgdGFzayBnZXRzIGNsZWFyZWQgb3V0IGFuZAorICAgICAgICAgICAgLy8gdGhlIGRldmljZSB3b3VsZCBvdGhlcndpc2UgbGVhdmUgdGhlIGxvY2tlZCB0YXNrLgorICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLmlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKGludGVudEFjdGl2aXR5LnRhc2ssCisgICAgICAgICAgICAgICAgICAgIChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfQ0xFQVJfVEFTSykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKSkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLnNob3dMb2NrVGFza1RvYXN0KCk7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgInN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQ6IEF0dGVtcHQgdG8gdmlvbGF0ZSBMb2NrIFRhc2sgTW9kZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVN0YXJ0QWN0aXZpdHkudGFzayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkudGFzayA9IGludGVudEFjdGl2aXR5LnRhc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW50ZW50QWN0aXZpdHkudGFzay5pbnRlbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgdGFzayB3YXMgc3RhcnRlZCBiZWNhdXNlIG9mIG1vdmVtZW50IG9mIHRoZSBhY3Rpdml0eSBiYXNlZCBvbiBhZmZpbml0eS4uLgorICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGFyZSBhY3R1YWxseSBsYXVuY2hpbmcgaXQsIHdlIGNhbiBhc3NpZ24gdGhlIGJhc2UgaW50ZW50LgorICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHBhdGggbGVhZHMgdG8gZGVsaXZlcmluZyBhIG5ldyBpbnRlbnQsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHNjaGVkdWxlIGl0CisgICAgICAgICAgICAvLyBhcyB0aGUgZmlyc3Qgb3BlcmF0aW9uLCBpbiBjYXNlIHRoZSBhY3Rpdml0eSB3aWxsIGJlIHJlc3VtZWQgYXMgYSByZXN1bHQgb2YgbGF0ZXIKKyAgICAgICAgICAgIC8vIG9wZXJhdGlvbnMuCisgICAgICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfQ0xFQVJfVE9QKSAhPSAwCisgICAgICAgICAgICAgICAgICAgIHx8IG1MYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBtTGF1bmNoU2luZ2xlVGFzaykgeworICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCBhY3Rpdml0aWVzIGZyb20gdGhlIHRhc2sgdXAgdG8gdGhlIG9uZQorICAgICAgICAgICAgICAgIC8vIGJlaW5nIHN0YXJ0ZWQuIEluIG1vc3QgY2FzZXMgdGhpcyBtZWFucyB3ZSBhcmUgcmVzZXR0aW5nIHRoZSB0YXNrIHRvIGl0cyBpbml0aWFsCisgICAgICAgICAgICAgICAgLy8gc3RhdGUuCisgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlSZWNvcmQgdG9wID0gaW50ZW50QWN0aXZpdHkudGFzay5wZXJmb3JtQ2xlYXJUYXNrTG9ja2VkKAorICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHksIG1MYXVuY2hGbGFncyk7CisgICAgICAgICAgICAgICAgaWYgKHRvcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0b3AuZnJvbnRPZlRhc2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2aXR5IGFsaWFzZXMgbWF5IG1lYW4gd2UgdXNlIGRpZmZlcmVudCBpbnRlbnRzIGZvciB0aGUgdG9wIGFjdGl2aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gbWFrZSBzdXJlIHRoZSB0YXNrIG5vdyBoYXMgdGhlIGlkZW50aXR5IG9mIHRoZSBuZXcgaW50ZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgdG9wLnRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoQU1fTkVXX0lOVEVOVCwgbVN0YXJ0QWN0aXZpdHksIHRvcC50YXNrKTsKKyAgICAgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5sYXVuY2hlZEZyb21QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludGVudEFjdGl2aXR5ID0gc2V0VGFyZ2V0U3RhY2tBbmRNb3ZlVG9Gcm9udElmTmVlZGVkKGludGVudEFjdGl2aXR5KTsKKworICAgICAgICAgICAgaWYgKChtU3RhcnRGbGFncyAmIFNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHN0YXJ0IGEgbmV3IGFjdGl2aXR5LCBhbmQgdGhlIGNsaWVudCBzYWlkIG5vdCB0byBkbyBhbnl0aGluZworICAgICAgICAgICAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHNvIHRoaXMgaXMgaXQhICBBbmQgZm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZQorICAgICAgICAgICAgICAgIC8vIGNvcnJlY3RseSByZXN1bWVkIHRoZSB0b3AgYWN0aXZpdHkuCisgICAgICAgICAgICAgICAgcmVzdW1lVGFyZ2V0U3RhY2tJZk5lZWRlZCgpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fSU5URU5UX1RPX0NBTExFUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0VGFza0Zyb21JbnRlbnRBY3Rpdml0eShpbnRlbnRBY3Rpdml0eSk7CisKKyAgICAgICAgICAgIGlmICghbUFkZGluZ1RvVGFzayAmJiBtUmV1c2VUYXNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkaWRuJ3QgZG8gYW55dGhpbmcuLi4gIGJ1dCBpdCB3YXMgbmVlZGVkIChhLmsuYS4sIGNsaWVudCBkb24ndCB1c2UgdGhhdAorICAgICAgICAgICAgICAgIC8vIGludGVudCEpICBBbmQgZm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgorICAgICAgICAgICAgICAgIHJlc3VtZVRhcmdldFN0YWNrSWZOZWVkZWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfVEFTS19UT19GUk9OVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtU3RhcnRBY3Rpdml0eS5wYWNrYWdlTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAobVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gIT0gbnVsbCAmJiBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUby50YXNrLnN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUby50YXNrLnN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUbywgbVN0YXJ0QWN0aXZpdHkucmVzdWx0V2hvLAorICAgICAgICAgICAgICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkucmVxdWVzdENvZGUsIFJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgcmV0dXJuIFNUQVJUX0NMQVNTX05PVF9GT1VORDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBhY3Rpdml0eSBiZWluZyBsYXVuY2hlZCBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGN1cnJlbnRseSBhdCB0aGUgdG9wLCB0aGVuCisgICAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgaWYgaXQgc2hvdWxkIG9ubHkgYmUgbGF1bmNoZWQgb25jZS4KKyAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayB0b3BTdGFjayA9IG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2s7CisgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHRvcCA9IHRvcFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobU5vdFRvcCk7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gZG9udFN0YXJ0ID0gdG9wICE9IG51bGwgJiYgbVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gPT0gbnVsbAorICAgICAgICAgICAgICAgICYmIHRvcC5yZWFsQWN0aXZpdHkuZXF1YWxzKG1TdGFydEFjdGl2aXR5LnJlYWxBY3Rpdml0eSkKKyAgICAgICAgICAgICAgICAmJiB0b3AudXNlcklkID09IG1TdGFydEFjdGl2aXR5LnVzZXJJZAorICAgICAgICAgICAgICAgICYmIHRvcC5hcHAgIT0gbnVsbCAmJiB0b3AuYXBwLnRocmVhZCAhPSBudWxsCisgICAgICAgICAgICAgICAgJiYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX1NJTkdMRV9UT1ApICE9IDAKKyAgICAgICAgICAgICAgICB8fCBtTGF1bmNoU2luZ2xlVG9wIHx8IG1MYXVuY2hTaW5nbGVUYXNrKTsKKyAgICAgICAgaWYgKGRvbnRTdGFydCkgeworICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEFNX05FV19JTlRFTlQsIHRvcCwgdG9wLnRhc2spOworICAgICAgICAgICAgLy8gRm9yIHBhcmFub2lhLCBtYWtlIHN1cmUgd2UgaGF2ZSBjb3JyZWN0bHkgcmVzdW1lZCB0aGUgdG9wIGFjdGl2aXR5LgorICAgICAgICAgICAgdG9wU3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICAgICAgbVN1cGVydmlzb3IucmVzdW1lRm9jdXNlZFN0YWNrVG9wQWN0aXZpdHlMb2NrZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChtT3B0aW9ucyk7CisgICAgICAgICAgICBpZiAoKG1TdGFydEZsYWdzICYgU1RBUlRfRkxBR19PTkxZX0lGX05FRURFRCkgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZCB0aGUgY2xpZW50IHNhaWQgbm90IHRvIGRvCisgICAgICAgICAgICAgICAgLy8gYW55dGhpbmcgaWYgdGhhdCBpcyB0aGUgY2FzZSwgc28gdGhpcyBpcyBpdCEKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0lOVEVOVF9UT19DQUxMRVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgbUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwgbVN0YXJ0QWN0aXZpdHkubGF1bmNoZWRGcm9tUGFja2FnZSk7CisgICAgICAgICAgICByZXR1cm4gU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gbmV3VGFzayA9IGZhbHNlOworICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2tUb0FmZmlsaWF0ZSA9IChtTGF1bmNoVGFza0JlaGluZCAmJiBtU291cmNlUmVjb3JkICE9IG51bGwpCisgICAgICAgICAgICAgICAgPyBtU291cmNlUmVjb3JkLnRhc2sgOiBudWxsOworCisgICAgICAgIC8vIFNob3VsZCB0aGlzIGJlIGNvbnNpZGVyZWQgYSBuZXcgdGFzaz8KKyAgICAgICAgaWYgKG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvID09IG51bGwgJiYgbUluVGFzayA9PSBudWxsICYmICFtQWRkaW5nVG9UYXNrCisgICAgICAgICAgICAgICAgJiYgKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKKyAgICAgICAgICAgIG5ld1Rhc2sgPSB0cnVlOworICAgICAgICAgICAgc2V0VGFza0Zyb21SZXVzZU9yQ3JlYXRlTmV3VGFzayh0YXNrVG9BZmZpbGlhdGUpOworCisgICAgICAgICAgICBpZiAobVN1cGVydmlzb3IuaXNMb2NrVGFza01vZGVWaW9sYXRpb24obVN0YXJ0QWN0aXZpdHkudGFzaykpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQXR0ZW1wdGVkIExvY2sgVGFzayBNb2RlIHZpb2xhdGlvbiBtU3RhcnRBY3Rpdml0eT0iICsgbVN0YXJ0QWN0aXZpdHkpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fTE9DS19UQVNLX01PREVfVklPTEFUSU9OOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtTW92ZWRIb21lCisgICAgICAgICAgICAgICAgICAgICYmIChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkKKyAgICAgICAgICAgICAgICAgICAgPT0gKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX1RBU0tfT05fSE9NRSkpIHsKKyAgICAgICAgICAgICAgICAvLyBDYWxsZXIgd2FudHMgdG8gYXBwZWFyIG9uIGhvbWUgYWN0aXZpdHksIHNvIGJlZm9yZSBzdGFydGluZworICAgICAgICAgICAgICAgIC8vIHRoZWlyIG93biBhY3Rpdml0eSB3ZSB3aWxsIGJyaW5nIGhvbWUgdG8gdGhlIGZyb250LgorICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnRhc2suc2V0VGFza1RvUmV0dXJuVG8oSE9NRV9BQ1RJVklUWV9UWVBFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtU291cmNlUmVjb3JkICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChtU3VwZXJ2aXNvci5pc0xvY2tUYXNrTW9kZVZpb2xhdGlvbihtU291cmNlUmVjb3JkLnRhc2spKSB7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gbVN0YXJ0QWN0aXZpdHk9IiArIG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHNldFRhc2tGcm9tU291cmNlUmVjb3JkKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1JblRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBpcyBhc2tpbmcgdGhhdCB0aGUgbmV3IGFjdGl2aXR5IGJlIHN0YXJ0ZWQgaW4gYW4gZXhwbGljaXQKKyAgICAgICAgICAgIC8vIHRhc2sgaXQgaGFzIHByb3ZpZGVkIHRvIHVzLgorICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLmlzTG9ja1Rhc2tNb2RlVmlvbGF0aW9uKG1JblRhc2spKSB7CisgICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkF0dGVtcHRlZCBMb2NrIFRhc2sgTW9kZSB2aW9sYXRpb24gbVN0YXJ0QWN0aXZpdHk9IiArIG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfUkVUVVJOX0xPQ0tfVEFTS19NT0RFX1ZJT0xBVElPTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50IHJlc3VsdCA9IHNldFRhc2tGcm9tSW5UYXNrKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IFNUQVJUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhpcyBub3QgYmVpbmcgc3RhcnRlZCBmcm9tIGFuIGV4aXN0aW5nIGFjdGl2aXR5LCBhbmQgbm90IHBhcnQgb2YgYSBuZXcgdGFzay4uLgorICAgICAgICAgICAgLy8ganVzdCBwdXQgaXQgaW4gdGhlIHRvcCB0YXNrLCB0aG91Z2ggdGhlc2UgZGF5cyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbi4KKyAgICAgICAgICAgIHNldFRhc2tUb0N1cnJlbnRUb3BPckNyZWF0ZU5ld1Rhc2soKTsKKyAgICAgICAgfQorCisgICAgICAgIG1TZXJ2aWNlLmdyYW50VXJpUGVybWlzc2lvbkZyb21JbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgIG1JbnRlbnQsIG1TdGFydEFjdGl2aXR5LmdldFVyaVBlcm1pc3Npb25zTG9ja2VkKCksIG1TdGFydEFjdGl2aXR5LnVzZXJJZCk7CisKKyAgICAgICAgaWYgKG1Tb3VyY2VSZWNvcmQgIT0gbnVsbCAmJiBtU291cmNlUmVjb3JkLmlzUmVjZW50c0FjdGl2aXR5KCkpIHsKKyAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnRhc2suc2V0VGFza1RvUmV0dXJuVG8oUkVDRU5UU19BQ1RJVklUWV9UWVBFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmV3VGFzaykgeworICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudCgKKyAgICAgICAgICAgICAgICAgICAgRXZlbnRMb2dUYWdzLkFNX0NSRUFURV9UQVNLLCBtU3RhcnRBY3Rpdml0eS51c2VySWQsIG1TdGFydEFjdGl2aXR5LnRhc2sudGFza0lkKTsKKyAgICAgICAgfQorICAgICAgICBBY3Rpdml0eVN0YWNrLmxvZ1N0YXJ0QWN0aXZpdHkoCisgICAgICAgICAgICAgICAgRXZlbnRMb2dUYWdzLkFNX0NSRUFURV9BQ1RJVklUWSwgbVN0YXJ0QWN0aXZpdHksIG1TdGFydEFjdGl2aXR5LnRhc2spOworICAgICAgICBtVGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgIG1UYXJnZXRTdGFjay5zdGFydEFjdGl2aXR5TG9ja2VkKG1TdGFydEFjdGl2aXR5LCBuZXdUYXNrLCBtS2VlcEN1clRyYW5zaXRpb24sIG1PcHRpb25zKTsKKyAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgaWYgKCFtTGF1bmNoVGFza0JlaGluZCkgeworICAgICAgICAgICAgICAgIC8vIFRPRE8oYi8yNjM4MTc1MCk6IFJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXIgdmVyaWZpY2F0aW9uIHRoYXQgYWxsIHRoZSBkZWNpc2lvbgorICAgICAgICAgICAgICAgIC8vIHBvaW50cyBhYm92ZSBtb3ZlZCB0YXJnZXRTdGFjayB0byB0aGUgZnJvbnQgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXMKKyAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICBtU2VydmljZS5zZXRGb2N1c2VkQWN0aXZpdHlMb2NrZWQobVN0YXJ0QWN0aXZpdHksICJzdGFydGVkQWN0aXZpdHkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TdXBlcnZpc29yLnJlc3VtZUZvY3VzZWRTdGFja1RvcEFjdGl2aXR5TG9ja2VkKG1UYXJnZXRTdGFjaywgbVN0YXJ0QWN0aXZpdHksCisgICAgICAgICAgICAgICAgICAgIG1PcHRpb25zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjay5hZGRSZWNlbnRBY3Rpdml0eUxvY2tlZChtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgIH0KKyAgICAgICAgbVN1cGVydmlzb3IudXBkYXRlVXNlclN0YWNrTG9ja2VkKG1TdGFydEFjdGl2aXR5LnVzZXJJZCwgbVRhcmdldFN0YWNrKTsKKworICAgICAgICBpZiAoIW1TdGFydEFjdGl2aXR5LnRhc2subVJlc2l6ZWFibGUKKyAgICAgICAgICAgICAgICAmJiBtU3VwZXJ2aXNvci5pc1N0YWNrRG9ja2VkSW5FZmZlY3QobVRhcmdldFN0YWNrLm1TdGFja0lkKSkgeworICAgICAgICAgICAgbVN1cGVydmlzb3Iuc2hvd05vblJlc2l6ZWFibGVEb2NrVG9hc3QobVN0YXJ0QWN0aXZpdHkudGFzay50YXNrSWQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFNUQVJUX1NVQ0NFU1M7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGxhdW5jaFJlY2VudHNBcHBJZk5lZWRlZChBY3Rpdml0eVN0YWNrIHRvcFN0YWNrKSB7CisgICAgICAgIGlmICh0b3BTdGFjay5tU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEICYmIG1UYXJnZXRTdGFjay5tU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIC8vIFdlIGxhdW5jaCBhbiBhY3Rpdml0eSB3aGlsZSBiZWluZyBpbiBob21lIHN0YWNrLCB3aGljaCBtZWFucyBlaXRoZXIgbGF1bmNoZXIgb3IKKyAgICAgICAgICAgIC8vIHJlY2VudHMgaW50byBkb2NrZWQgc3RhY2suIFdlIGRvbid0IHdhbnQgdGhlIGxhdW5jaGVkIGFjdGl2aXR5IHRvIGJlIGFsb25lIGluIGEKKyAgICAgICAgICAgIC8vIGRvY2tlZCBzdGFjaywgc28gd2Ugd2FudCB0byBpbW1lZGlhdGVseSBsYXVuY2ggcmVjZW50cyB0b28uCisgICAgICAgICAgICBpZiAoREVCVUdfUkVDRU5UUykgU2xvZy5kKFRBRywgIlNjaGVkdWxpbmcgcmVjZW50cyBsYXVuY2guIik7CisgICAgICAgICAgICBtV2luZG93TWFuYWdlci5zaG93UmVjZW50QXBwcygpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldEluaXRpYWxTdGF0ZShBY3Rpdml0eVJlY29yZCByLCBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgVGFza1JlY29yZCBpblRhc2ssCisgICAgICAgICAgICBib29sZWFuIGRvUmVzdW1lLCBpbnQgc3RhcnRGbGFncywgQWN0aXZpdHlSZWNvcmQgc291cmNlUmVjb3JkLAorICAgICAgICAgICAgSVZvaWNlSW50ZXJhY3Rpb25TZXNzaW9uIHZvaWNlU2Vzc2lvbiwgSVZvaWNlSW50ZXJhY3RvciB2b2ljZUludGVyYWN0b3IpIHsKKyAgICAgICAgcmVzZXQoKTsKKworICAgICAgICBtU3RhcnRBY3Rpdml0eSA9IHI7CisgICAgICAgIG1JbnRlbnQgPSByLmludGVudDsKKyAgICAgICAgbU9wdGlvbnMgPSBvcHRpb25zOworICAgICAgICBtQ2FsbGluZ1VpZCA9IHIubGF1bmNoZWRGcm9tVWlkOworICAgICAgICBtU291cmNlUmVjb3JkID0gc291cmNlUmVjb3JkOworICAgICAgICBtVm9pY2VTZXNzaW9uID0gdm9pY2VTZXNzaW9uOworICAgICAgICBtVm9pY2VJbnRlcmFjdG9yID0gdm9pY2VJbnRlcmFjdG9yOworCisgICAgICAgIG1MYXVuY2hCb3VuZHMgPSBnZXRPdmVycmlkZUJvdW5kcyhyLCBvcHRpb25zLCBpblRhc2spOworCisgICAgICAgIG1MYXVuY2hTaW5nbGVUb3AgPSByLmxhdW5jaE1vZGUgPT0gTEFVTkNIX1NJTkdMRV9UT1A7CisgICAgICAgIG1MYXVuY2hTaW5nbGVJbnN0YW5jZSA9IHIubGF1bmNoTW9kZSA9PSBMQVVOQ0hfU0lOR0xFX0lOU1RBTkNFOworICAgICAgICBtTGF1bmNoU2luZ2xlVGFzayA9IHIubGF1bmNoTW9kZSA9PSBMQVVOQ0hfU0lOR0xFX1RBU0s7CisgICAgICAgIG1MYXVuY2hGbGFncyA9IGFkanVzdExhdW5jaEZsYWdzVG9Eb2N1bWVudE1vZGUoCisgICAgICAgICAgICAgICAgciwgbUxhdW5jaFNpbmdsZUluc3RhbmNlLCBtTGF1bmNoU2luZ2xlVGFzaywgbUludGVudC5nZXRGbGFncygpKTsKKyAgICAgICAgbUxhdW5jaFRhc2tCZWhpbmQgPSByLm1MYXVuY2hUYXNrQmVoaW5kCisgICAgICAgICAgICAgICAgJiYgIW1MYXVuY2hTaW5nbGVUYXNrICYmICFtTGF1bmNoU2luZ2xlSW5zdGFuY2UKKyAgICAgICAgICAgICAgICAmJiAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQpICE9IDA7CisKKyAgICAgICAgc2VuZE5ld1Rhc2tSZXN1bHRSZXF1ZXN0SWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UKSAhPSAwICYmIHIucmVzdWx0VG8gPT0gbnVsbCkgeworICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gbGF1bmNoIGluIHRvIGEgbmV3IHRhc2ssIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlCisgICAgICAgIC8vIHdlIGZ1cnRoZXIgd2FudCB0byBkbyBtdWx0aXBsZSB0YXNrLgorICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTkVXX1RBU0spICE9IDApIHsKKyAgICAgICAgICAgIGlmIChtTGF1bmNoVGFza0JlaGluZAorICAgICAgICAgICAgICAgICAgICB8fCByLmluZm8uZG9jdW1lbnRMYXVuY2hNb2RlID09IERPQ1VNRU5UX0xBVU5DSF9BTFdBWVMpIHsKKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gV2UnbGwgaW52b2tlIG9uVXNlckxlYXZpbmcgYmVmb3JlIG9uUGF1c2Ugb25seSBpZiB0aGUgbGF1bmNoaW5nCisgICAgICAgIC8vIGFjdGl2aXR5IGRpZCBub3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoaXMgaXMgYW4gYXV0b21hdGVkIGxhdW5jaC4KKyAgICAgICAgbVN1cGVydmlzb3IubVVzZXJMZWF2aW5nID0gKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTk9fVVNFUl9BQ1RJT04pID09IDA7CisgICAgICAgIGlmIChERUJVR19VU0VSX0xFQVZJTkcpIFNsb2cudihUQUdfVVNFUl9MRUFWSU5HLAorICAgICAgICAgICAgICAgICJzdGFydEFjdGl2aXR5KCkgPT4gbVVzZXJMZWF2aW5nPSIgKyBtU3VwZXJ2aXNvci5tVXNlckxlYXZpbmcpOworCisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIGFza2VkIG5vdCB0byByZXN1bWUgYXQgdGhpcyBwb2ludCwgd2UgbWFrZSBub3RlCisgICAgICAgIC8vIG9mIHRoaXMgaW4gdGhlIHJlY29yZCBzbyB0aGF0IHdlIGNhbiBza2lwIGl0IHdoZW4gdHJ5aW5nIHRvIGZpbmQKKyAgICAgICAgLy8gdGhlIHRvcCBydW5uaW5nIGFjdGl2aXR5LgorICAgICAgICBtRG9SZXN1bWUgPSBkb1Jlc3VtZTsKKyAgICAgICAgaWYgKCFkb1Jlc3VtZSB8fCAhbVN1cGVydmlzb3Iub2tUb1Nob3dMb2NrZWQocikpIHsKKyAgICAgICAgICAgIHIuZGVsYXllZFJlc3VtZSA9IHRydWU7CisgICAgICAgICAgICBtRG9SZXN1bWUgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1Ob3RUb3AgPSAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9QUkVWSU9VU19JU19UT1ApICE9IDAgPyByIDogbnVsbDsKKworICAgICAgICBtSW5UYXNrID0gaW5UYXNrOworICAgICAgICAvLyBJbiBzb21lIGZsb3dzIGluIHRvIHRoaXMgZnVuY3Rpb24sIHdlIHJldHJpZXZlIHRoZSB0YXNrIHJlY29yZCBhbmQgaG9sZCBvbiB0byBpdAorICAgICAgICAvLyB3aXRob3V0IGEgbG9jayBiZWZvcmUgY2FsbGluZyBiYWNrIGluIHRvIGhlcmUuLi4gIHNvIHRoZSB0YXNrIGF0IHRoaXMgcG9pbnQgbWF5CisgICAgICAgIC8vIG5vdCBhY3R1YWxseSBiZSBpbiByZWNlbnRzLiAgQ2hlY2sgZm9yIHRoYXQsIGFuZCBpZiBpdCBpc24ndCBpbiByZWNlbnRzIGp1c3QKKyAgICAgICAgLy8gY29uc2lkZXIgaXQgaW52YWxpZC4KKyAgICAgICAgaWYgKGluVGFzayAhPSBudWxsICYmICFpblRhc2suaW5SZWNlbnRzKSB7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAiU3RhcnRpbmcgYWN0aXZpdHkgaW4gdGFzayBub3QgaW4gcmVjZW50czogIiArIGluVGFzayk7CisgICAgICAgICAgICBtSW5UYXNrID0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIG1TdGFydEZsYWdzID0gc3RhcnRGbGFnczsKKyAgICAgICAgLy8gSWYgdGhlIG9ubHlJZk5lZWRlZCBmbGFnIGlzIHNldCwgdGhlbiB3ZSBjYW4gZG8gdGhpcyBpZiB0aGUgYWN0aXZpdHkgYmVpbmcgbGF1bmNoZWQKKyAgICAgICAgLy8gaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBtYWtpbmcgdGhlIGNhbGwuLi4gIG9yLCBhcyBhIHNwZWNpYWwgY2FzZSwgaWYgd2UgZG8gbm90IGtub3cKKyAgICAgICAgLy8gdGhlIGNhbGxlciB0aGVuIHdlIGNvdW50IHRoZSBjdXJyZW50IHRvcCBhY3Rpdml0eSBhcyB0aGUgY2FsbGVyLgorICAgICAgICBpZiAoKHN0YXJ0RmxhZ3MgJiBTVEFSVF9GTEFHX09OTFlfSUZfTkVFREVEKSAhPSAwKSB7CisgICAgICAgICAgICBBY3Rpdml0eVJlY29yZCBjaGVja2VkQ2FsbGVyID0gc291cmNlUmVjb3JkOworICAgICAgICAgICAgaWYgKGNoZWNrZWRDYWxsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNoZWNrZWRDYWxsZXIgPSBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBtTm90VG9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY2hlY2tlZENhbGxlci5yZWFsQWN0aXZpdHkuZXF1YWxzKHIucmVhbEFjdGl2aXR5KSkgeworICAgICAgICAgICAgICAgIC8vIENhbGxlciBpcyBub3QgdGhlIHNhbWUgYXMgbGF1bmNoZXIsIHNvIGFsd2F5cyBuZWVkZWQuCisgICAgICAgICAgICAgICAgbVN0YXJ0RmxhZ3MgJj0gflNUQVJUX0ZMQUdfT05MWV9JRl9ORUVERUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtTm9BbmltYXRpb24gPSAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9OT19BTklNQVRJT04pICE9IDA7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNlbmROZXdUYXNrUmVzdWx0UmVxdWVzdElmTmVlZGVkKCkgeworICAgICAgICBpZiAobVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gIT0gbnVsbCAmJiAobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMAorICAgICAgICAgICAgICAgICYmIG1TdGFydEFjdGl2aXR5LnJlc3VsdFRvLnRhc2suc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gRm9yIHdoYXRldmVyIHJlYXNvbiB0aGlzIGFjdGl2aXR5IGlzIGJlaW5nIGxhdW5jaGVkIGludG8gYSBuZXcgdGFzay4uLgorICAgICAgICAgICAgLy8geWV0IHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCBhIHJlc3VsdCBiYWNrLiAgV2VsbCwgdGhhdCBpcyBwcmV0dHkgbWVzc2VkIHVwLAorICAgICAgICAgICAgLy8gc28gaW5zdGVhZCBpbW1lZGlhdGVseSBzZW5kIGJhY2sgYSBjYW5jZWwgYW5kIGxldCB0aGUgbmV3IHRhc2sgY29udGludWUgbGF1bmNoZWQKKyAgICAgICAgICAgIC8vIGFzIG5vcm1hbCB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBpdHMgb3JpZ2luYXRvci4KKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJBY3Rpdml0eSBpcyBsYXVuY2hpbmcgYXMgYSBuZXcgdGFzaywgc28gY2FuY2VsbGluZyBhY3Rpdml0eSByZXN1bHQuIik7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUby50YXNrLnN0YWNrLnNlbmRBY3Rpdml0eVJlc3VsdExvY2tlZCgtMSwgbVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8sCisgICAgICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnJlc3VsdFdobywgbVN0YXJ0QWN0aXZpdHkucmVxdWVzdENvZGUsIFJFU1VMVF9DQU5DRUxFRCwgbnVsbCk7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5yZXN1bHRUbyA9IG51bGw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZUxhdW5jaGluZ1Rhc2tGbGFncygpIHsKKyAgICAgICAgLy8gSWYgdGhlIGNhbGxlciBpcyBub3QgY29taW5nIGZyb20gYW5vdGhlciBhY3Rpdml0eSwgYnV0IGhhcyBnaXZlbiB1cyBhbiBleHBsaWNpdCB0YXNrIGludG8KKyAgICAgICAgLy8gd2hpY2ggdGhleSB3b3VsZCBsaWtlIHVzIHRvIGxhdW5jaCB0aGUgbmV3IGFjdGl2aXR5LCB0aGVuIGxldCdzIHNlZSBhYm91dCBkb2luZyB0aGF0LgorICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsICYmIG1JblRhc2sgIT0gbnVsbCAmJiBtSW5UYXNrLnN0YWNrICE9IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIEludGVudCBiYXNlSW50ZW50ID0gbUluVGFzay5nZXRCYXNlSW50ZW50KCk7CisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByb290ID0gbUluVGFzay5nZXRSb290QWN0aXZpdHkoKTsKKyAgICAgICAgICAgIGlmIChiYXNlSW50ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkxhdW5jaGluZyBpbnRvIHRhc2sgd2l0aG91dCBiYXNlIGludGVudDogIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBtSW5UYXNrKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSWYgdGhpcyB0YXNrIGlzIGVtcHR5LCB0aGVuIHdlIGFyZSBhZGRpbmcgdGhlIGZpcnN0IGFjdGl2aXR5IC0tIGl0CisgICAgICAgICAgICAvLyBkZXRlcm1pbmVzIHRoZSByb290LCBhbmQgbXVzdCBiZSBsYXVuY2hpbmcgYXMgYSBORVdfVEFTSy4KKyAgICAgICAgICAgIGlmIChtTGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbUxhdW5jaFNpbmdsZVRhc2spIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJhc2VJbnRlbnQuZ2V0Q29tcG9uZW50KCkuZXF1YWxzKG1TdGFydEFjdGl2aXR5LmludGVudC5nZXRDb21wb25lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlPcHRpb25zLmFib3J0KG1PcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHJ5aW5nIHRvIGxhdW5jaCBzaW5nbGVJbnN0YW5jZS9UYXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1TdGFydEFjdGl2aXR5ICsgIiBpbnRvIGRpZmZlcmVudCB0YXNrICIgKyBtSW5UYXNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJvb3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYWxsZXIgd2l0aCBtSW5UYXNrICIgKyBtSW5UYXNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGhhcyByb290ICIgKyByb290ICsgIiBidXQgdGFyZ2V0IGlzIHNpbmdsZUluc3RhbmNlL1Rhc2siKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHRhc2sgaXMgZW1wdHksIHRoZW4gYWRvcHQgdGhlIGludGVyZXN0aW5nIGludGVudCBsYXVuY2ggZmxhZ3MgaW4gdG8gdGhlCisgICAgICAgICAgICAvLyBhY3Rpdml0eSBiZWluZyBzdGFydGVkLgorICAgICAgICAgICAgaWYgKHJvb3QgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFnc09mSW50ZXJlc3QgPSBGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9NVUxUSVBMRV9UQVNLCisgICAgICAgICAgICAgICAgICAgICAgICB8IEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UIHwgRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUzsKKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgPSAobUxhdW5jaEZsYWdzICYgfmZsYWdzT2ZJbnRlcmVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgKGJhc2VJbnRlbnQuZ2V0RmxhZ3MoKSAmIGZsYWdzT2ZJbnRlcmVzdCk7CisgICAgICAgICAgICAgICAgbUludGVudC5zZXRGbGFncyhtTGF1bmNoRmxhZ3MpOworICAgICAgICAgICAgICAgIG1JblRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgICAgICAgICBtQWRkaW5nVG9UYXNrID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIC8vIElmIHRoZSB0YXNrIGlzIG5vdCBlbXB0eSBhbmQgdGhlIGNhbGxlciBpcyBhc2tpbmcgdG8gc3RhcnQgaXQgYXMgdGhlIHJvb3Qgb2YKKyAgICAgICAgICAgICAgICAvLyBhIG5ldyB0YXNrLCB0aGVuIHdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gc3RhcnQgdGhpcyBvbiB0aGUgdGFzay4gV2Ugd2lsbAorICAgICAgICAgICAgICAgIC8vIGJyaW5nIHRoZSB0YXNrIHRvIHRoZSBmcm9udCwgYW5kIHBvc3NpYmx5IGdpdmUgaXQgYSBuZXcgaW50ZW50LgorICAgICAgICAgICAgfSBlbHNlIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCkgeworICAgICAgICAgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSBmYWxzZTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtQWRkaW5nVG9UYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJldXNlVGFzayA9IG1JblRhc2s7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtSW5UYXNrID0gbnVsbDsKKyAgICAgICAgICAgIC8vIExhdW5jaCBSZXNvbHZlckFjdGl2aXR5IGluIHRoZSBzb3VyY2UgdGFzaywgc28gdGhhdCBpdCBzdGF5cyBpbiB0aGUgdGFzayBib3VuZHMKKyAgICAgICAgICAgIC8vIHdoZW4gaW4gZnJlZWZvcm0gd29ya3NwYWNlLgorICAgICAgICAgICAgLy8gQWxzbyBwdXQgbm9EaXNwbGF5IGFjdGl2aXRpZXMgaW4gdGhlIHNvdXJjZSB0YXNrLiBUaGVzZSBieSBpdHNlbGYgY2FuIGJlIHBsYWNlZAorICAgICAgICAgICAgLy8gaW4gYW55IHRhc2svc3RhY2ssIGhvd2V2ZXIgaXQgY291bGQgbGF1bmNoIG90aGVyIGFjdGl2aXRpZXMgbGlrZSBSZXNvbHZlckFjdGl2aXR5LAorICAgICAgICAgICAgLy8gYW5kIHdlIHdhbnQgdGhvc2UgdG8gc3RheSBpbiB0aGUgb3JpZ2luYWwgdGFzay4KKyAgICAgICAgICAgIGlmICgobVN0YXJ0QWN0aXZpdHkuaXNSZXNvbHZlckFjdGl2aXR5KCkgfHwgbVN0YXJ0QWN0aXZpdHkubm9EaXNwbGF5KSAmJiBtU291cmNlUmVjb3JkICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgJiYgbVNvdXJjZVJlY29yZC5pc0ZyZWVmb3JtKCkpICB7CisgICAgICAgICAgICAgICAgbUFkZGluZ1RvVGFzayA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobUluVGFzayA9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBhY3Rpdml0eSBpcyBub3QgYmVpbmcgc3RhcnRlZCBmcm9tIGFub3RoZXIuLi4gIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlIHdlIC1hbHdheXMtIHN0YXJ0IGEgbmV3IHRhc2suCisgICAgICAgICAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX05FV19UQVNLKSA9PSAwICYmIG1JblRhc2sgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAic3RhcnRBY3Rpdml0eSBjYWxsZWQgZnJvbSBub24tQWN0aXZpdHkgY29udGV4dDsgZm9yY2luZyAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgZm9yOiAiICsgbUludGVudCk7CisgICAgICAgICAgICAgICAgICAgIG1MYXVuY2hGbGFncyB8PSBGTEFHX0FDVElWSVRZX05FV19UQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobVNvdXJjZVJlY29yZC5sYXVuY2hNb2RlID09IExBVU5DSF9TSU5HTEVfSU5TVEFOQ0UpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgYWN0aXZpdHkgd2hvIGlzIHN0YXJ0aW5nIHVzIGlzIHJ1bm5pbmcgYXMgYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAvLyBpbnN0YW5jZS4uLiAgdGhpcyBuZXcgYWN0aXZpdHkgaXQgaXMgc3RhcnRpbmcgbXVzdCBnbyBvbiBpdHMKKyAgICAgICAgICAgICAgICAvLyBvd24gdGFzay4KKyAgICAgICAgICAgICAgICBtTGF1bmNoRmxhZ3MgfD0gRkxBR19BQ1RJVklUWV9ORVdfVEFTSzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobUxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IG1MYXVuY2hTaW5nbGVUYXNrKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGFjdGl2aXR5IGJlaW5nIHN0YXJ0ZWQgaXMgYSBzaW5nbGUgaW5zdGFuY2UuLi4gIGl0IGFsd2F5cworICAgICAgICAgICAgICAgIC8vIGdldHMgbGF1bmNoZWQgaW50byBpdHMgb3duIHRhc2suCisgICAgICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVNvdXJjZVN0YWNrKCkgeworICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsKSB7CisgICAgICAgICAgICBtU291cmNlU3RhY2sgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghbVNvdXJjZVJlY29yZC5maW5pc2hpbmcpIHsKKyAgICAgICAgICAgIG1Tb3VyY2VTdGFjayA9IG1Tb3VyY2VSZWNvcmQudGFzay5zdGFjazsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgZmluaXNoaW5nLCB3ZSBjYW4ndCBmdXJ0aGVyIGNvdW50IGl0IGFzIG91ciBzb3VyY2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUKKyAgICAgICAgLy8gdGFzayBpdCBpcyBhc3NvY2lhdGVkIHdpdGggbWF5IG5vdyBiZSBlbXB0eSBhbmQgb24gaXRzIHdheSBvdXQsIHNvIHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgLy8gYmxpbmRseSB0aHJvdyBpdCBpbiB0byB0aGF0IHRhc2suICBJbnN0ZWFkIHdlIHdpbGwgdGFrZSB0aGUgTkVXX1RBU0sgZmxvdyBhbmQgdHJ5IHRvIGZpbmQKKyAgICAgICAgLy8gYSB0YXNrIGZvciBpdC4gQnV0IHNhdmUgdGhlIHRhc2sgaW5mb3JtYXRpb24gc28gaXQgY2FuIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUgbmV3IHRhc2suCisgICAgICAgIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgPT0gMCkgeworICAgICAgICAgICAgU2xvZy53KFRBRywgInN0YXJ0QWN0aXZpdHkgY2FsbGVkIGZyb20gZmluaXNoaW5nICIgKyBtU291cmNlUmVjb3JkCisgICAgICAgICAgICAgICAgICAgICsgIjsgZm9yY2luZyAiICsgIkludGVudC5GTEFHX0FDVElWSVRZX05FV19UQVNLIGZvcjogIiArIG1JbnRlbnQpOworICAgICAgICAgICAgbUxhdW5jaEZsYWdzIHw9IEZMQUdfQUNUSVZJVFlfTkVXX1RBU0s7CisgICAgICAgICAgICBtTmV3VGFza0luZm8gPSBtU291cmNlUmVjb3JkLmluZm87CisgICAgICAgICAgICBtTmV3VGFza0ludGVudCA9IG1Tb3VyY2VSZWNvcmQudGFzay5pbnRlbnQ7CisgICAgICAgIH0KKyAgICAgICAgbVNvdXJjZVJlY29yZCA9IG51bGw7CisgICAgICAgIG1Tb3VyY2VTdGFjayA9IG51bGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogRGVjaWRlIHdoZXRoZXIgdGhlIG5ldyBhY3Rpdml0eSBzaG91bGQgYmUgaW5zZXJ0ZWQgaW50byBhbiBleGlzdGluZyB0YXNrLiBSZXR1cm5zIG51bGwKKyAgICAgKiBpZiBub3Qgb3IgYW4gQWN0aXZpdHlSZWNvcmQgd2l0aCB0aGUgdGFzayBpbnRvIHdoaWNoIHRoZSBuZXcgYWN0aXZpdHkgc2hvdWxkIGJlIGFkZGVkLgorICAgICAqLworICAgIHByaXZhdGUgQWN0aXZpdHlSZWNvcmQgZ2V0UmV1c2FibGVJbnRlbnRBY3Rpdml0eSgpIHsKKyAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8gdHJ5IHRvIHBsYWNlIHRoZSBuZXcgYWN0aXZpdHkgaW4gdG8gYW4gZXhpc3RpbmcgdGFzay4gIFdlIGFsd2F5cworICAgICAgICAvLyBkbyB0aGlzIGlmIHRoZSB0YXJnZXQgYWN0aXZpdHkgaXMgc2luZ2xlVGFzayBvciBzaW5nbGVJbnN0YW5jZTsgd2Ugd2lsbCBhbHNvIGRvCisgICAgICAgIC8vIHRoaXMgaWYgTkVXX1RBU0sgaGFzIGJlZW4gcmVxdWVzdGVkLCBhbmQgdGhlcmUgaXMgbm90IGFuIGFkZGl0aW9uYWwgcXVhbGlmaWVyIHRlbGxpbmcKKyAgICAgICAgLy8gdXMgdG8gc3RpbGwgcGxhY2UgaXQgaW4gYSBuZXcgdGFzazogbXVsdGkgdGFzaywgYWx3YXlzIGRvYyBtb2RlLCBvciBiZWluZyBhc2tlZCB0bworICAgICAgICAvLyBsYXVuY2ggdGhpcyBhcyBhIG5ldyB0YXNrIGJlaGluZCB0aGUgY3VycmVudCBvbmUuCisgICAgICAgIGJvb2xlYW4gcHV0SW50b0V4aXN0aW5nVGFzayA9ICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9ORVdfVEFTSykgIT0gMCAmJgorICAgICAgICAgICAgICAgIChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0spID09IDApCisgICAgICAgICAgICAgICAgfHwgbUxhdW5jaFNpbmdsZUluc3RhbmNlIHx8IG1MYXVuY2hTaW5nbGVUYXNrOworICAgICAgICAvLyBJZiBicmluZyB0byBmcm9udCBpcyByZXF1ZXN0ZWQsIGFuZCBubyByZXN1bHQgaXMgcmVxdWVzdGVkIGFuZCB3ZSBoYXZlIG5vdCBiZWVuIGdpdmVuCisgICAgICAgIC8vIGFuIGV4cGxpY2l0IHRhc2sgdG8gbGF1bmNoIGluIHRvLCBhbmQgd2UgY2FuIGZpbmQgYSB0YXNrIHRoYXQgd2FzIHN0YXJ0ZWQgd2l0aCB0aGlzCisgICAgICAgIC8vIHNhbWUgY29tcG9uZW50LCB0aGVuIGluc3RlYWQgb2YgbGF1bmNoaW5nIGJyaW5nIHRoYXQgb25lIHRvIHRoZSBmcm9udC4KKyAgICAgICAgcHV0SW50b0V4aXN0aW5nVGFzayAmPSBtSW5UYXNrID09IG51bGwgJiYgbVN0YXJ0QWN0aXZpdHkucmVzdWx0VG8gPT0gbnVsbDsKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkgPSBudWxsOworICAgICAgICBpZiAocHV0SW50b0V4aXN0aW5nVGFzaykgeworICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEgdGFzayB0byBicmluZyB0byB0aGUgZnJvbnQuICBJZiB0aGlzIGlzIGEgU0lOR0xFX0lOU1RBTkNFCisgICAgICAgICAgICAvLyBhY3Rpdml0eSwgdGhlcmUgY2FuIGJlIG9uZSBhbmQgb25seSBvbmUgaW5zdGFuY2Ugb2YgaXQgaW4gdGhlIGhpc3RvcnksIGFuZCBpdCBpcworICAgICAgICAgICAgLy8gYWx3YXlzIGluIGl0cyBvd24gdW5pcXVlIHRhc2ssIHNvIHdlIGRvIGEgc3BlY2lhbCBzZWFyY2guCisgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eSA9IG1MYXVuY2hTaW5nbGVJbnN0YW5jZSA/IG1TdXBlcnZpc29yLmZpbmRBY3Rpdml0eUxvY2tlZChtSW50ZW50LCBtU3RhcnRBY3Rpdml0eS5pbmZvKQorICAgICAgICAgICAgICAgICAgICA6IG1TdXBlcnZpc29yLmZpbmRUYXNrTG9ja2VkKG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZW50QWN0aXZpdHk7CisgICAgfQorCisgICAgcHJpdmF0ZSBBY3Rpdml0eVJlY29yZCBzZXRUYXJnZXRTdGFja0FuZE1vdmVUb0Zyb250SWZOZWVkZWQoQWN0aXZpdHlSZWNvcmQgaW50ZW50QWN0aXZpdHkpIHsKKyAgICAgICAgbVRhcmdldFN0YWNrID0gaW50ZW50QWN0aXZpdHkudGFzay5zdGFjazsKKyAgICAgICAgbVRhcmdldFN0YWNrLm1MYXN0UGF1c2VkQWN0aXZpdHkgPSBudWxsOworICAgICAgICAvLyBJZiB0aGUgdGFyZ2V0IHRhc2sgaXMgbm90IGluIHRoZSBmcm9udCwgdGhlbiB3ZSBuZWVkIHRvIGJyaW5nIGl0IHRvIHRoZSBmcm9udC4uLgorICAgICAgICAvLyBleGNlcHQuLi4gIHdlbGwsIHdpdGggU0lOR0xFX1RBU0tfTEFVTkNIIGl0J3Mgbm90IGVudGlyZWx5IGNsZWFyLiBXZSdkIGxpa2UgdG8gaGF2ZQorICAgICAgICAvLyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpZiBhIG5ldyBpbnN0YW5jZSB3YXMgYmVpbmcgc3RhcnRlZCwgd2hpY2ggbWVhbnMgbm90IGJyaW5naW5nIGl0CisgICAgICAgIC8vIHRvIHRoZSBmcm9udCBpZiB0aGUgY2FsbGVyIGlzIG5vdCBpdHNlbGYgaW4gdGhlIGZyb250LgorICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIGZvY3VzU3RhY2sgPSBtU3VwZXJ2aXNvci5nZXRGb2N1c2VkU3RhY2soKTsKKyAgICAgICAgQWN0aXZpdHlSZWNvcmQgY3VyVG9wID0gKGZvY3VzU3RhY2sgPT0gbnVsbCkKKyAgICAgICAgICAgICAgICA/IG51bGwgOiBmb2N1c1N0YWNrLnRvcFJ1bm5pbmdOb25EZWxheWVkQWN0aXZpdHlMb2NrZWQobU5vdFRvcCk7CisKKyAgICAgICAgaWYgKGN1clRvcCAhPSBudWxsICYmIChjdXJUb3AudGFzayAhPSBpbnRlbnRBY3Rpdml0eS50YXNrIHx8CisgICAgICAgICAgICAgICAgY3VyVG9wLnRhc2sgIT0gZm9jdXNTdGFjay50b3BUYXNrKCkpKSB7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5pbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfQUNUSVZJVFlfQlJPVUdIVF9UT19GUk9OVCk7CisgICAgICAgICAgICBpZiAobVNvdXJjZVJlY29yZCA9PSBudWxsIHx8IChtU291cmNlU3RhY2sudG9wQWN0aXZpdHkoKSAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIG1Tb3VyY2VTdGFjay50b3BBY3Rpdml0eSgpLnRhc2sgPT0gbVNvdXJjZVJlY29yZC50YXNrKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIHJlYWxseSBkbyB3YW50IHRvIHB1c2ggdGhpcyBvbmUgaW50byB0aGUgdXNlcidzIGZhY2UsIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgICAgICBpZiAobUxhdW5jaFRhc2tCZWhpbmQgJiYgbVNvdXJjZVJlY29yZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnNldFRhc2tUb0FmZmlsaWF0ZVdpdGgobVNvdXJjZVJlY29yZC50YXNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbU1vdmVkSG9tZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlTdGFjayBsYXVuY2hTdGFjayA9CisgICAgICAgICAgICAgICAgICAgICAgICBnZXRMYXVuY2hTdGFjayhtU3RhcnRBY3Rpdml0eSwgbUxhdW5jaEZsYWdzLCBtU3RhcnRBY3Rpdml0eS50YXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtT3B0aW9ucywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGxhdW5jaFN0YWNrID09IG51bGwgfHwgbGF1bmNoU3RhY2sgPT0gbVRhcmdldFN0YWNrKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBtb3ZlIHRvIHRoZSBmcm9udCwgaWYgd2UgYXJlbid0IGdvaW5nIHRvIGxhdW5jaCBvbiBhCisgICAgICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBzdGFjay4gSWYgd2UgbGF1bmNoIG9uIGEgZGlmZmVyZW50IHN0YWNrLCB3ZSB3aWxsIHB1dCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGFzayBvbiB0b3AgdGhlcmUuCisgICAgICAgICAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVGFza1RvRnJvbnRMb2NrZWQoaW50ZW50QWN0aXZpdHkudGFzaywgbU5vQW5pbWF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PcHRpb25zLCBtU3RhcnRBY3Rpdml0eS5hcHBUaW1lVHJhY2tlciwgImJyaW5naW5nRm91bmRUYXNrVG9Gcm9udCIpOworICAgICAgICAgICAgICAgICAgICBtTW92ZWRUb0Zyb250ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiAoRkxBR19BQ1RJVklUWV9ORVdfVEFTSyB8IEZMQUdfQUNUSVZJVFlfVEFTS19PTl9IT01FKSkKKyAgICAgICAgICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9UQVNLX09OX0hPTUUpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhbGxlciB3YW50cyB0byBhcHBlYXIgb24gaG9tZSBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICAgICAgaW50ZW50QWN0aXZpdHkudGFzay5zZXRUYXNrVG9SZXR1cm5UbyhIT01FX0FDVElWSVRZX1RZUEUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtT3B0aW9ucyA9IG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtTW92ZWRUb0Zyb250ICYmIG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLmQoVEFHX1RBU0tTLCAiQnJpbmcgdG8gZnJvbnQgdGFyZ2V0OiAiICsgbVRhcmdldFN0YWNrCisgICAgICAgICAgICAgICAgICAgICsgIiBmcm9tICIgKyBpbnRlbnRBY3Rpdml0eSk7CisgICAgICAgICAgICBtVGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoImludGVudEFjdGl2aXR5Rm91bmQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBjYWxsZXIgaGFzIHJlcXVlc3RlZCB0aGF0IHRoZSB0YXJnZXQgdGFzayBiZSByZXNldCwgdGhlbiBkbyBzby4KKyAgICAgICAgaWYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbVRhcmdldFN0YWNrLnJlc2V0VGFza0lmTmVlZGVkTG9ja2VkKGludGVudEFjdGl2aXR5LCBtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludGVudEFjdGl2aXR5OworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRUYXNrRnJvbUludGVudEFjdGl2aXR5KEFjdGl2aXR5UmVjb3JkIGludGVudEFjdGl2aXR5KSB7CisgICAgICAgIGlmICgobUxhdW5jaEZsYWdzICYgKEZMQUdfQUNUSVZJVFlfTkVXX1RBU0sgfCBGTEFHX0FDVElWSVRZX0NMRUFSX1RBU0spKQorICAgICAgICAgICAgICAgID09IChGTEFHX0FDVElWSVRZX05FV19UQVNLIHwgRkxBR19BQ1RJVklUWV9DTEVBUl9UQVNLKSkgeworICAgICAgICAgICAgLy8gVGhlIGNhbGxlciBoYXMgcmVxdWVzdGVkIHRvIGNvbXBsZXRlbHkgcmVwbGFjZSBhbnkgZXhpc3RpbmcgdGFzayB3aXRoIGl0cyBuZXcKKyAgICAgICAgICAgIC8vIGFjdGl2aXR5LiBXZWxsIHRoYXQgc2hvdWxkIG5vdCBiZSB0b28gaGFyZC4uLgorICAgICAgICAgICAgbVJldXNlVGFzayA9IGludGVudEFjdGl2aXR5LnRhc2s7CisgICAgICAgICAgICBtUmV1c2VUYXNrLnBlcmZvcm1DbGVhclRhc2tMb2NrZWQoKTsKKyAgICAgICAgICAgIG1SZXVzZVRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgfSBlbHNlIGlmICgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9DTEVBUl9UT1ApICE9IDAKKyAgICAgICAgICAgICAgICB8fCBtTGF1bmNoU2luZ2xlSW5zdGFuY2UgfHwgbUxhdW5jaFNpbmdsZVRhc2spIHsKKyAgICAgICAgICAgIEFjdGl2aXR5UmVjb3JkIHRvcCA9IGludGVudEFjdGl2aXR5LnRhc2sucGVyZm9ybUNsZWFyVGFza0xvY2tlZChtU3RhcnRBY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgICAgbUxhdW5jaEZsYWdzKTsKKyAgICAgICAgICAgIGlmICh0b3AgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIEEgc3BlY2lhbCBjYXNlOiB3ZSBuZWVkIHRvIHN0YXJ0IHRoZSBhY3Rpdml0eSBiZWNhdXNlIGl0IGlzIG5vdCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICAvLyBydW5uaW5nLCBhbmQgdGhlIGNhbGxlciBoYXMgYXNrZWQgdG8gY2xlYXIgdGhlIGN1cnJlbnQgdGFzayB0byBoYXZlIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBhY3Rpdml0eSBhdCB0aGUgdG9wLgorICAgICAgICAgICAgICAgIG1BZGRpbmdUb1Rhc2sgPSB0cnVlOworICAgICAgICAgICAgICAgIC8vIE5vdyBwcmV0ZW5kIGxpa2UgdGhpcyBhY3Rpdml0eSBpcyBiZWluZyBzdGFydGVkIGJ5IHRoZSB0b3Agb2YgaXRzIHRhc2ssIHNvIGl0CisgICAgICAgICAgICAgICAgLy8gaXMgcHV0IGluIHRoZSByaWdodCBwbGFjZS4KKyAgICAgICAgICAgICAgICBtU291cmNlUmVjb3JkID0gaW50ZW50QWN0aXZpdHk7CisgICAgICAgICAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gbVNvdXJjZVJlY29yZC50YXNrOworICAgICAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwgJiYgdGFzay5zdGFjayA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRhcmdldCBzdGFjayBnb3QgY2xlYXJlZCB3aGVuIHdlIGFsbCBhY3Rpdml0aWVzIHdlcmUgcmVtb3ZlZCBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIHJlc2V0IGl0LgorICAgICAgICAgICAgICAgICAgICBtVGFyZ2V0U3RhY2sgPSBjb21wdXRlU3RhY2tGb2N1cyhtU291cmNlUmVjb3JkLCBmYWxzZSAvKiBuZXdUYXNrICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgLyogYm91bmRzICovLCBtTGF1bmNoRmxhZ3MsIG1PcHRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgbVRhcmdldFN0YWNrLmFkZFRhc2sodGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbUxhdW5jaFRhc2tCZWhpbmQgLyogdG9Ub3AgKi8sICJzdGFydEFjdGl2aXR5VW5jaGVja2VkIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1TdGFydEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMoaW50ZW50QWN0aXZpdHkudGFzay5yZWFsQWN0aXZpdHkpKSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIHRvcCBhY3Rpdml0eSBvbiB0aGUgdGFzayBpcyB0aGUgc2FtZSBhcyB0aGUgb25lIGJlaW5nIGxhdW5jaGVkLAorICAgICAgICAgICAgLy8gc28gd2UgdGFrZSB0aGF0IGFzIGEgcmVxdWVzdCB0byBicmluZyB0aGUgdGFzayB0byB0aGUgZm9yZWdyb3VuZC4gSWYgdGhlIHRvcAorICAgICAgICAgICAgLy8gYWN0aXZpdHkgaW4gdGhlIHRhc2sgaXMgdGhlIHJvb3QgYWN0aXZpdHksIGRlbGl2ZXIgdGhpcyBuZXcgaW50ZW50IHRvIGl0IGlmIGl0CisgICAgICAgICAgICAvLyBkZXNpcmVzLgorICAgICAgICAgICAgaWYgKCgobUxhdW5jaEZsYWdzICYgRkxBR19BQ1RJVklUWV9TSU5HTEVfVE9QKSAhPSAwIHx8IG1MYXVuY2hTaW5nbGVUb3ApCisgICAgICAgICAgICAgICAgICAgICYmIGludGVudEFjdGl2aXR5LnJlYWxBY3Rpdml0eS5lcXVhbHMobVN0YXJ0QWN0aXZpdHkucmVhbEFjdGl2aXR5KSkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShBTV9ORVdfSU5URU5ULCBtU3RhcnRBY3Rpdml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2spOworICAgICAgICAgICAgICAgIGlmIChpbnRlbnRBY3Rpdml0eS5mcm9udE9mVGFzaykgeworICAgICAgICAgICAgICAgICAgICBpbnRlbnRBY3Rpdml0eS50YXNrLnNldEludGVudChtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludGVudEFjdGl2aXR5LmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LmxhdW5jaGVkRnJvbVBhY2thZ2UpOworICAgICAgICAgICAgfSBlbHNlIGlmICghbVN0YXJ0QWN0aXZpdHkuaW50ZW50LmZpbHRlckVxdWFscyhpbnRlbnRBY3Rpdml0eS50YXNrLmludGVudCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgYXJlIGxhdW5jaGluZyB0aGUgcm9vdCBhY3Rpdml0eSBvZiB0aGUgdGFzaywgYnV0IHdpdGggYQorICAgICAgICAgICAgICAgIC8vIGRpZmZlcmVudCBpbnRlbnQuIFdlIHNob3VsZCBzdGFydCBhIG5ldyBpbnN0YW5jZSBvbiB0b3AuCisgICAgICAgICAgICAgICAgbUFkZGluZ1RvVGFzayA9IHRydWU7CisgICAgICAgICAgICAgICAgbVNvdXJjZVJlY29yZCA9IGludGVudEFjdGl2aXR5OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX1JFU0VUX1RBU0tfSUZfTkVFREVEKSA9PSAwKSB7CisgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgYW4gYWN0aXZpdHkgaXMgYmVpbmcgbGF1bmNoZWQgaW4gdG8gYW4gZXhpc3RpbmcgdGFzaywgd2l0aG91dAorICAgICAgICAgICAgLy8gcmVzZXR0aW5nIHRoYXQgdGFzay4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIHNpdHVhdGlvbiBvZiBsYXVuY2hpbmcgYW4gYWN0aXZpdHkKKyAgICAgICAgICAgIC8vIGZyb20gYSBub3RpZmljYXRpb24gb3Igc2hvcnRjdXQuIFdlIHdhbnQgdG8gcGxhY2UgdGhlIG5ldyBhY3Rpdml0eSBvbiB0b3Agb2YgdGhlCisgICAgICAgICAgICAvLyBjdXJyZW50IHRhc2suCisgICAgICAgICAgICBtQWRkaW5nVG9UYXNrID0gdHJ1ZTsKKyAgICAgICAgICAgIG1Tb3VyY2VSZWNvcmQgPSBpbnRlbnRBY3Rpdml0eTsKKyAgICAgICAgfSBlbHNlIGlmICghaW50ZW50QWN0aXZpdHkudGFzay5yb290V2FzUmVzZXQpIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBhcmUgbGF1bmNoaW5nIGludG8gYW4gZXhpc3RpbmcgdGFzayB0aGF0IGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZAorICAgICAgICAgICAgLy8gZnJvbSBpdHMgZnJvbnQgZG9vci4gVGhlIGN1cnJlbnQgdGFzayBoYXMgYmVlbiBicm91Z2h0IHRvIHRoZSBmcm9udC4gSWRlYWxseSwKKyAgICAgICAgICAgIC8vIHdlJ2QgcHJvYmFibHkgbGlrZSB0byBwbGFjZSB0aGlzIG5ldyB0YXNrIGF0IHRoZSBib3R0b20gb2YgaXRzIHN0YWNrLCBidXQgdGhhdCdzCisgICAgICAgICAgICAvLyBhIGxpdHRsZSBoYXJkIHRvIGRvIHdpdGggdGhlIGN1cnJlbnQgb3JnYW5pemF0aW9uIG9mIHRoZSBjb2RlIHNvIGZvciBub3cgd2UnbGwKKyAgICAgICAgICAgIC8vIGp1c3QgZHJvcCBpdC4KKyAgICAgICAgICAgIGludGVudEFjdGl2aXR5LnRhc2suc2V0SW50ZW50KG1TdGFydEFjdGl2aXR5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZXN1bWVUYXJnZXRTdGFja0lmTmVlZGVkKCkgeworICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICBtU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZChtVGFyZ2V0U3RhY2ssIG51bGwsIG1PcHRpb25zKTsKKyAgICAgICAgICAgIGlmICghbU1vdmVkVG9Gcm9udCkgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBub3RpZnkgS2V5Z3VhcmQgYXMgd2VsbCBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcgYW4gYXBwIHRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAvLyBsYXRlci4KKyAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5ub3RpZnlBY3Rpdml0eURyYXduRm9yS2V5Z3VhcmQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFjdGl2aXR5T3B0aW9ucy5hYm9ydChtT3B0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgbVN1cGVydmlzb3IudXBkYXRlVXNlclN0YWNrTG9ja2VkKG1TdGFydEFjdGl2aXR5LnVzZXJJZCwgbVRhcmdldFN0YWNrKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0VGFza0Zyb21SZXVzZU9yQ3JlYXRlTmV3VGFzayhUYXNrUmVjb3JkIHRhc2tUb0FmZmlsaWF0ZSkgeworICAgICAgICBtVGFyZ2V0U3RhY2sgPSBjb21wdXRlU3RhY2tGb2N1cyhtU3RhcnRBY3Rpdml0eSwgdHJ1ZSwgbUxhdW5jaEJvdW5kcywgbUxhdW5jaEZsYWdzLAorICAgICAgICAgICAgICAgIG1PcHRpb25zKTsKKyAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgbVRhcmdldFN0YWNrLm1vdmVUb0Zyb250KCJzdGFydGluZ05ld1Rhc2siKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUmV1c2VUYXNrID09IG51bGwpIHsKKyAgICAgICAgICAgIGZpbmFsIFRhc2tSZWNvcmQgdGFzayA9IG1UYXJnZXRTdGFjay5jcmVhdGVUYXNrUmVjb3JkKG1TdXBlcnZpc29yLmdldE5leHRUYXNrSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgbU5ld1Rhc2tJbmZvICE9IG51bGwgPyBtTmV3VGFza0luZm8gOiBtU3RhcnRBY3Rpdml0eS5pbmZvLAorICAgICAgICAgICAgICAgICAgICBtTmV3VGFza0ludGVudCAhPSBudWxsID8gbU5ld1Rhc2tJbnRlbnQgOiBtSW50ZW50LAorICAgICAgICAgICAgICAgICAgICBtVm9pY2VTZXNzaW9uLCBtVm9pY2VJbnRlcmFjdG9yLCAhbUxhdW5jaFRhc2tCZWhpbmQgLyogdG9Ub3AgKi8pOworICAgICAgICAgICAgbVN0YXJ0QWN0aXZpdHkuc2V0VGFzayh0YXNrLCB0YXNrVG9BZmZpbGlhdGUpOworICAgICAgICAgICAgaWYgKG1MYXVuY2hCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5LnRhc2sudXBkYXRlT3ZlcnJpZGVDb25maWd1cmF0aW9uKG1MYXVuY2hCb3VuZHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLnYoVEFHX1RBU0tTLAorICAgICAgICAgICAgICAgICAgICAiU3RhcnRpbmcgbmV3IGFjdGl2aXR5ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdGFydEFjdGl2aXR5ICsgIiBpbiBuZXcgdGFzayAiICsgbVN0YXJ0QWN0aXZpdHkudGFzayk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5zZXRUYXNrKG1SZXVzZVRhc2ssIHRhc2tUb0FmZmlsaWF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzZXRUYXNrRnJvbVNvdXJjZVJlY29yZCgpIHsKKyAgICAgICAgZmluYWwgVGFza1JlY29yZCBzb3VyY2VUYXNrID0gbVNvdXJjZVJlY29yZC50YXNrOworICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWxsb3cgY2hhbmdpbmcgc3RhY2sgaWYgdGhlIHRhcmdldCB0YXNrIGlzIG5vdCB0aGUgdG9wIG9uZSwKKyAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIG1vdmUgdGhlIGxhdW5jaGluZyB0YXNrIHRvIHRoZSBvdGhlciBzaWRlLCByYXRoZXIgdGhhbiBzaG93CisgICAgICAgIC8vIHR3byBzaWRlIGJ5IHNpZGUuCisgICAgICAgIGZpbmFsIGJvb2xlYW4gbGF1bmNoVG9TaWRlQWxsb3dlZCA9IHNvdXJjZVRhc2suc3RhY2sudG9wVGFzaygpICE9IHNvdXJjZVRhc2s7CisgICAgICAgIG1UYXJnZXRTdGFjayA9IGdldExhdW5jaFN0YWNrKG1TdGFydEFjdGl2aXR5LCBtTGF1bmNoRmxhZ3MsIG1TdGFydEFjdGl2aXR5LnRhc2ssIG1PcHRpb25zLCBsYXVuY2hUb1NpZGVBbGxvd2VkKTsKKworICAgICAgICBpZiAobVRhcmdldFN0YWNrID09IG51bGwpIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjayA9IHNvdXJjZVRhc2suc3RhY2s7CisgICAgICAgIH0gZWxzZSBpZiAobVRhcmdldFN0YWNrICE9IHNvdXJjZVRhc2suc3RhY2spIHsKKyAgICAgICAgICAgIG1TdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja0xvY2tlZChzb3VyY2VUYXNrLnRhc2tJZCwgbVRhcmdldFN0YWNrLm1TdGFja0lkLAorICAgICAgICAgICAgICAgICAgICBPTl9UT1AsIEZPUkNFX0ZPQ1VTLCAibGF1bmNoVG9TaWRlIiwgIUFOSU1BVEUpOworICAgICAgICB9CisgICAgICAgIGlmIChtRG9SZXN1bWUpIHsKKyAgICAgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVG9Gcm9udCgic291cmNlU3RhY2tUb0Zyb250Iik7CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgVGFza1JlY29yZCB0b3BUYXNrID0gbVRhcmdldFN0YWNrLnRvcFRhc2soKTsKKyAgICAgICAgaWYgKHRvcFRhc2sgIT0gc291cmNlVGFzaykgeworICAgICAgICAgICAgbVRhcmdldFN0YWNrLm1vdmVUYXNrVG9Gcm9udExvY2tlZChzb3VyY2VUYXNrLCBtTm9BbmltYXRpb24sIG1PcHRpb25zLAorICAgICAgICAgICAgICAgICAgICBtU3RhcnRBY3Rpdml0eS5hcHBUaW1lVHJhY2tlciwgInNvdXJjZVRhc2tUb0Zyb250Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtQWRkaW5nVG9UYXNrICYmIChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX0NMRUFSX1RPUCkgIT0gMCkgeworICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSBhcmUgYWRkaW5nIHRoZSBhY3Rpdml0eSB0byBhbiBleGlzdGluZyB0YXNrLCBidXQgdGhlIGNhbGxlciBoYXMKKyAgICAgICAgICAgIC8vIGFza2VkIHRvIGNsZWFyIHRoYXQgdGFzayBpZiB0aGUgYWN0aXZpdHkgaXMgYWxyZWFkeSBydW5uaW5nLgorICAgICAgICAgICAgQWN0aXZpdHlSZWNvcmQgdG9wID0gc291cmNlVGFzay5wZXJmb3JtQ2xlYXJUYXNrTG9ja2VkKG1TdGFydEFjdGl2aXR5LCBtTGF1bmNoRmxhZ3MpOworICAgICAgICAgICAgbUtlZXBDdXJUcmFuc2l0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmICh0b3AgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5U3RhY2subG9nU3RhcnRBY3Rpdml0eShBTV9ORVdfSU5URU5ULCBtU3RhcnRBY3Rpdml0eSwgdG9wLnRhc2spOworICAgICAgICAgICAgICAgIHRvcC5kZWxpdmVyTmV3SW50ZW50TG9ja2VkKG1DYWxsaW5nVWlkLCBtU3RhcnRBY3Rpdml0eS5pbnRlbnQsIG1TdGFydEFjdGl2aXR5LmxhdW5jaGVkRnJvbVBhY2thZ2UpOworICAgICAgICAgICAgICAgIC8vIEZvciBwYXJhbm9pYSwgbWFrZSBzdXJlIHdlIGhhdmUgY29ycmVjdGx5IHJlc3VtZWQgdGhlIHRvcCBhY3Rpdml0eS4KKyAgICAgICAgICAgICAgICBtVGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9ERUxJVkVSRURfVE9fVE9QOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCFtQWRkaW5nVG9UYXNrICYmIChtTGF1bmNoRmxhZ3MgJiBGTEFHX0FDVElWSVRZX1JFT1JERVJfVE9fRlJPTlQpICE9IDApIHsKKyAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgYXJlIGxhdW5jaGluZyBhbiBhY3Rpdml0eSBpbiBvdXIgb3duIHRhc2sgdGhhdCBtYXkgYWxyZWFkeSBiZQorICAgICAgICAgICAgLy8gcnVubmluZyBzb21ld2hlcmUgaW4gdGhlIGhpc3RvcnksIGFuZCB3ZSB3YW50IHRvIHNodWZmbGUgaXQgdG8gdGhlIGZyb250IG9mIHRoZQorICAgICAgICAgICAgLy8gc3RhY2sgaWYgc28uCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCB0b3AgPSBzb3VyY2VUYXNrLmZpbmRBY3Rpdml0eUluSGlzdG9yeUxvY2tlZChtU3RhcnRBY3Rpdml0eSk7CisgICAgICAgICAgICBpZiAodG9wICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBUYXNrUmVjb3JkIHRhc2sgPSB0b3AudGFzazsKKyAgICAgICAgICAgICAgICB0YXNrLm1vdmVBY3Rpdml0eVRvRnJvbnRMb2NrZWQodG9wKTsKKyAgICAgICAgICAgICAgICB0b3AudXBkYXRlT3B0aW9uc0xvY2tlZChtT3B0aW9ucyk7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEFNX05FV19JTlRFTlQsIG1TdGFydEFjdGl2aXR5LCB0YXNrKTsKKyAgICAgICAgICAgICAgICB0b3AuZGVsaXZlck5ld0ludGVudExvY2tlZChtQ2FsbGluZ1VpZCwgbVN0YXJ0QWN0aXZpdHkuaW50ZW50LCBtU3RhcnRBY3Rpdml0eS5sYXVuY2hlZEZyb21QYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBtVGFyZ2V0U3RhY2subUxhc3RQYXVzZWRBY3Rpdml0eSA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKG1Eb1Jlc3VtZSkgeworICAgICAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gU1RBUlRfREVMSVZFUkVEX1RPX1RPUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFuIGV4aXN0aW5nIGFjdGl2aXR5IGlzIHN0YXJ0aW5nIHRoaXMgbmV3IGFjdGl2aXR5LCBzbyB3ZSB3YW50IHRvIGtlZXAgdGhlIG5ldyBvbmUgaW4KKyAgICAgICAgLy8gdGhlIHNhbWUgdGFzayBhcyB0aGUgb25lIHRoYXQgaXMgc3RhcnRpbmcgaXQuCisgICAgICAgIG1TdGFydEFjdGl2aXR5LnNldFRhc2soc291cmNlVGFzaywgbnVsbCk7CisgICAgICAgIGlmIChERUJVR19UQVNLUykgU2xvZy52KFRBR19UQVNLUywgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgbVN0YXJ0QWN0aXZpdHkKKyAgICAgICAgICAgICAgICArICIgaW4gZXhpc3RpbmcgdGFzayAiICsgbVN0YXJ0QWN0aXZpdHkudGFzayArICIgZnJvbSBzb3VyY2UgIiArIG1Tb3VyY2VSZWNvcmQpOworICAgICAgICByZXR1cm4gU1RBUlRfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBwcml2YXRlIGludCBzZXRUYXNrRnJvbUluVGFzaygpIHsKKyAgICAgICAgaWYgKG1MYXVuY2hCb3VuZHMgIT0gbnVsbCkgeworICAgICAgICAgICAgbUluVGFzay51cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24obUxhdW5jaEJvdW5kcyk7CisgICAgICAgICAgICBpbnQgc3RhY2tJZCA9IG1JblRhc2suZ2V0TGF1bmNoU3RhY2tJZCgpOworICAgICAgICAgICAgaWYgKHN0YWNrSWQgIT0gbUluVGFzay5zdGFjay5tU3RhY2tJZCkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLm1vdmVUYXNrVG9TdGFja1VuY2hlY2tlZExvY2tlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JblRhc2ssIHN0YWNrSWQsIE9OX1RPUCwgIUZPUkNFX0ZPQ1VTLCAiaW5UYXNrVG9Gcm9udCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1UYXJnZXRTdGFjayA9IG1JblRhc2suc3RhY2s7CisgICAgICAgIG1UYXJnZXRTdGFjay5tb3ZlVGFza1RvRnJvbnRMb2NrZWQoCisgICAgICAgICAgICAgICAgbUluVGFzaywgbU5vQW5pbWF0aW9uLCBtT3B0aW9ucywgbVN0YXJ0QWN0aXZpdHkuYXBwVGltZVRyYWNrZXIsICJpblRhc2tUb0Zyb250Iik7CisKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgYWN0dWFsbHkgbGF1bmNoIHRoZSBuZXcgYWN0aXZpdHkgaW4gdG8gdGhlIHRhc2ssCisgICAgICAgIC8vIG9yIGp1c3QgcmV1c2UgdGhlIGN1cnJlbnQgYWN0aXZpdHkgb24gdG9wLgorICAgICAgICBBY3Rpdml0eVJlY29yZCB0b3AgPSBtSW5UYXNrLmdldFRvcEFjdGl2aXR5KCk7CisgICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiB0b3AucmVhbEFjdGl2aXR5LmVxdWFscyhtU3RhcnRBY3Rpdml0eS5yZWFsQWN0aXZpdHkpICYmIHRvcC51c2VySWQgPT0gbVN0YXJ0QWN0aXZpdHkudXNlcklkKSB7CisgICAgICAgICAgICBpZiAoKG1MYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfU0lOR0xFX1RPUCkgIT0gMAorICAgICAgICAgICAgICAgICAgICB8fCBtTGF1bmNoU2luZ2xlVG9wIHx8IG1MYXVuY2hTaW5nbGVUYXNrKSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlTdGFjay5sb2dTdGFydEFjdGl2aXR5KEFNX05FV19JTlRFTlQsIHRvcCwgdG9wLnRhc2spOworICAgICAgICAgICAgICAgIGlmICgobVN0YXJ0RmxhZ3MgJiBTVEFSVF9GTEFHX09OTFlfSUZfTkVFREVEKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYSBuZXcgYWN0aXZpdHksIGFuZCB0aGUgY2xpZW50IHNhaWQgbm90IHRvIGRvCisgICAgICAgICAgICAgICAgICAgIC8vIGFueXRoaW5nIGlmIHRoYXQgaXMgdGhlIGNhc2UsIHNvIHRoaXMgaXMgaXQhCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVEFSVF9SRVRVUk5fSU5URU5UX1RPX0NBTExFUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdG9wLmRlbGl2ZXJOZXdJbnRlbnRMb2NrZWQobUNhbGxpbmdVaWQsIG1TdGFydEFjdGl2aXR5LmludGVudCwgbVN0YXJ0QWN0aXZpdHkubGF1bmNoZWRGcm9tUGFja2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNUQVJUX0RFTElWRVJFRF9UT19UT1A7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1BZGRpbmdUb1Rhc2spIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gaGF2ZSB0aGlzIGFjdGl2aXR5IGFkZGVkIHRvIHRoZSB0YXNrLCBzbyBqdXN0CisgICAgICAgICAgICAvLyBzdG9wIGhlcmUgYnV0IHN0aWxsIHRlbGwgdGhlIGNhbGxlciB0aGF0IHdlIGNvbnN1bWVkIHRoZSBpbnRlbnQuCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMuYWJvcnQobU9wdGlvbnMpOworICAgICAgICAgICAgcmV0dXJuIFNUQVJUX1RBU0tfVE9fRlJPTlQ7CisgICAgICAgIH0KKworICAgICAgICBtU3RhcnRBY3Rpdml0eS5zZXRUYXNrKG1JblRhc2ssIG51bGwpOworICAgICAgICBpZiAoREVCVUdfVEFTS1MpIFNsb2cudihUQUdfVEFTS1MsCisgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIG5ldyBhY3Rpdml0eSAiICsgbVN0YXJ0QWN0aXZpdHkgKyAiIGluIGV4cGxpY2l0IHRhc2sgIiArIG1TdGFydEFjdGl2aXR5LnRhc2spOworCisgICAgICAgIHJldHVybiBTVEFSVF9TVUNDRVNTOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRUYXNrVG9DdXJyZW50VG9wT3JDcmVhdGVOZXdUYXNrKCkgeworICAgICAgICBtVGFyZ2V0U3RhY2sgPSBjb21wdXRlU3RhY2tGb2N1cyhtU3RhcnRBY3Rpdml0eSwgZmFsc2UsIG51bGwgLyogYm91bmRzICovLCBtTGF1bmNoRmxhZ3MsCisgICAgICAgICAgICAgICAgbU9wdGlvbnMpOworICAgICAgICBpZiAobURvUmVzdW1lKSB7CisgICAgICAgICAgICBtVGFyZ2V0U3RhY2subW92ZVRvRnJvbnQoImFkZGluZ1RvVG9wVGFzayIpOworICAgICAgICB9CisgICAgICAgIGZpbmFsIEFjdGl2aXR5UmVjb3JkIHByZXYgPSBtVGFyZ2V0U3RhY2sudG9wQWN0aXZpdHkoKTsKKyAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gcHJldiAhPSBudWxsID8gcHJldi50YXNrCisgICAgICAgICAgICAgICAgOiBtVGFyZ2V0U3RhY2suY3JlYXRlVGFza1JlY29yZCgKKyAgICAgICAgICAgICAgICBtU3VwZXJ2aXNvci5nZXROZXh0VGFza0lkKCksIG1TdGFydEFjdGl2aXR5LmluZm8sIG1JbnRlbnQsIG51bGwsIG51bGwsIHRydWUpOworICAgICAgICBtU3RhcnRBY3Rpdml0eS5zZXRUYXNrKHRhc2ssIG51bGwpOworICAgICAgICBtV2luZG93TWFuYWdlci5tb3ZlVGFza1RvVG9wKG1TdGFydEFjdGl2aXR5LnRhc2sudGFza0lkKTsKKyAgICAgICAgaWYgKERFQlVHX1RBU0tTKSBTbG9nLnYoVEFHX1RBU0tTLAorICAgICAgICAgICAgICAgICJTdGFydGluZyBuZXcgYWN0aXZpdHkgIiArIG1TdGFydEFjdGl2aXR5ICsgIiBpbiBuZXcgZ3Vlc3NlZCAiICsgbVN0YXJ0QWN0aXZpdHkudGFzayk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgYWRqdXN0TGF1bmNoRmxhZ3NUb0RvY3VtZW50TW9kZShBY3Rpdml0eVJlY29yZCByLCBib29sZWFuIGxhdW5jaFNpbmdsZUluc3RhbmNlLAorICAgICAgICAgICAgYm9vbGVhbiBsYXVuY2hTaW5nbGVUYXNrLCBpbnQgbGF1bmNoRmxhZ3MpIHsKKyAgICAgICAgaWYgKChsYXVuY2hGbGFncyAmIEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCkgIT0gMCAmJgorICAgICAgICAgICAgICAgIChsYXVuY2hTaW5nbGVJbnN0YW5jZSB8fCBsYXVuY2hTaW5nbGVUYXNrKSkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIEludGVudCBhbmQgdGhlIEFjdGl2aXR5IG1hbmlmZXN0LCBtYW5pZmVzdCB3aW5zLgorICAgICAgICAgICAgU2xvZy5pKFRBRywgIklnbm9yaW5nIEZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5ULCBsYXVuY2hNb2RlIGlzICIgKworICAgICAgICAgICAgICAgICAgICAiXCJzaW5nbGVJbnN0YW5jZVwiIG9yIFwic2luZ2xlVGFza1wiIik7CisgICAgICAgICAgICBsYXVuY2hGbGFncyAmPQorICAgICAgICAgICAgICAgICAgICB+KEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVCB8IEZMQUdfQUNUSVZJVFlfTVVMVElQTEVfVEFTSyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKHIuaW5mby5kb2N1bWVudExhdW5jaE1vZGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjdGl2aXR5SW5mby5ET0NVTUVOVF9MQVVOQ0hfTk9ORToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX0lOVE9fRVhJU1RJTkc6CisgICAgICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzIHw9IEludGVudC5GTEFHX0FDVElWSVRZX05FV19ET0NVTUVOVDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBY3Rpdml0eUluZm8uRE9DVU1FTlRfTEFVTkNIX0FMV0FZUzoKKyAgICAgICAgICAgICAgICAgICAgbGF1bmNoRmxhZ3MgfD0gSW50ZW50LkZMQUdfQUNUSVZJVFlfTkVXX0RPQ1VNRU5UOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFjdGl2aXR5SW5mby5ET0NVTUVOVF9MQVVOQ0hfTkVWRVI6CisgICAgICAgICAgICAgICAgICAgIGxhdW5jaEZsYWdzICY9IH5GTEFHX0FDVElWSVRZX01VTFRJUExFX1RBU0s7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBsYXVuY2hGbGFnczsKKyAgICB9CisKKyAgICBmaW5hbCB2b2lkIGRvUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQoYm9vbGVhbiBkb1Jlc3VtZSkgeworICAgICAgICB3aGlsZSAoIW1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFBlbmRpbmdBY3Rpdml0eUxhdW5jaCBwYWwgPSBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMucmVtb3ZlKDApOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHN0YXJ0QWN0aXZpdHlVbmNoZWNrZWQocGFsLnIsIHBhbC5zb3VyY2VSZWNvcmQsIG51bGwsIG51bGwsIHBhbC5zdGFydEZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgZG9SZXN1bWUgJiYgbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmlzRW1wdHkoKSwgbnVsbCwgbnVsbCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJFeGNlcHRpb24gZHVyaW5nIHBlbmRpbmcgYWN0aXZpdHkgbGF1bmNoIHBhbD0iICsgcGFsLCBlKTsKKyAgICAgICAgICAgICAgICBwYWwuc2VuZEVycm9yUmVzdWx0KGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgQWN0aXZpdHlTdGFjayBjb21wdXRlU3RhY2tGb2N1cyhBY3Rpdml0eVJlY29yZCByLCBib29sZWFuIG5ld1Rhc2ssIFJlY3QgYm91bmRzLAorICAgICAgICAgICAgaW50IGxhdW5jaEZsYWdzLCBBY3Rpdml0eU9wdGlvbnMgYU9wdGlvbnMpIHsKKyAgICAgICAgZmluYWwgVGFza1JlY29yZCB0YXNrID0gci50YXNrOworICAgICAgICBpZiAoIShyLmlzQXBwbGljYXRpb25BY3Rpdml0eSgpIHx8ICh0YXNrICE9IG51bGwgJiYgdGFzay5pc0FwcGxpY2F0aW9uVGFzaygpKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBtU3VwZXJ2aXNvci5tSG9tZVN0YWNrOworICAgICAgICB9CisKKyAgICAgICAgQWN0aXZpdHlTdGFjayBzdGFjayA9IGdldExhdW5jaFN0YWNrKHIsIGxhdW5jaEZsYWdzLCB0YXNrLCBhT3B0aW9ucywgdHJ1ZSk7CisgICAgICAgIGlmIChzdGFjayAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGFzayAhPSBudWxsICYmIHRhc2suc3RhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgc3RhY2sgPSB0YXNrLnN0YWNrOworICAgICAgICAgICAgaWYgKHN0YWNrLmlzT25Ib21lRGlzcGxheSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2sgIT0gc3RhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wdXRlU3RhY2tGb2N1czogU2V0dGluZyAiICsgImZvY3VzZWQgc3RhY2sgdG8gcj0iICsgcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHRhc2s9IiArIHRhc2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IEZvY3VzZWQgc3RhY2sgYWxyZWFkeT0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGFjazsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yLkFjdGl2aXR5Q29udGFpbmVyIGNvbnRhaW5lciA9IHIubUluaXRpYWxBY3Rpdml0eUNvbnRhaW5lcjsKKyAgICAgICAgaWYgKGNvbnRhaW5lciAhPSBudWxsKSB7CisgICAgICAgICAgICAvLyBUaGUgZmlyc3QgdGltZSBwdXQgaXQgb24gdGhlIGRlc2lyZWQgc3RhY2ssIGFmdGVyIHRoaXMgcHV0IG9uIHRhc2sgc3RhY2suCisgICAgICAgICAgICByLm1Jbml0aWFsQWN0aXZpdHlDb250YWluZXIgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5tU3RhY2s7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgZnVsbHNjcmVlbiBzdGFjayBjYW4gY29udGFpbiBhbnkgdGFzayByZWdhcmRsZXNzIG9mIGlmIHRoZSB0YXNrIGlzIHJlc2l6ZWFibGUKKyAgICAgICAgLy8gb3Igbm90LiBTbywgd2UgbGV0IHRoZSB0YXNrIGdvIGluIHRoZSBmdWxsc2NyZWVuIHRhc2sgaWYgaXQgaXMgdGhlIGZvY3VzIHN0YWNrLgorICAgICAgICAvLyBJZiB0aGUgZnJlZWZvcm0gb3IgZG9ja2VkIHN0YWNrIGhhcyBmb2N1cywgYW5kIHRoZSBhY3Rpdml0eSB0byBiZSBsYXVuY2hlZCBpcyByZXNpemVhYmxlLAorICAgICAgICAvLyB3ZSBjYW4gYWxzbyBwdXQgaXQgaW4gdGhlIGZvY3VzZWQgc3RhY2suCisgICAgICAgIGZpbmFsIGludCBmb2N1c2VkU3RhY2tJZCA9IG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2subVN0YWNrSWQ7CisgICAgICAgIGZpbmFsIGJvb2xlYW4gY2FuVXNlRm9jdXNlZFN0YWNrID0KKyAgICAgICAgICAgICAgICBmb2N1c2VkU3RhY2tJZCA9PSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZm9jdXNlZFN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lECisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZm9jdXNlZFN0YWNrSWQgPT0gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEICYmIHIuaXNSZXNpemVhYmxlKCkpOworICAgICAgICBpZiAoY2FuVXNlRm9jdXNlZFN0YWNrICYmICghbmV3VGFzaworICAgICAgICAgICAgICAgIHx8IG1TdXBlcnZpc29yLm1Gb2N1c2VkU3RhY2subUFjdGl2aXR5Q29udGFpbmVyLmlzRWxpZ2libGVGb3JOZXdUYXNrcygpKSkgeworICAgICAgICAgICAgaWYgKERFQlVHX0ZPQ1VTIHx8IERFQlVHX1NUQUNLKSBTbG9nLmQoVEFHX0ZPQ1VTLAorICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IEhhdmUgYSBmb2N1c2VkIHN0YWNrPSIgKyBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrKTsKKyAgICAgICAgICAgIHJldHVybiBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgZmlyc3QgdHJ5IHRvIHB1dCB0aGUgdGFzayBpbiB0aGUgZmlyc3QgZHluYW1pYyBzdGFjay4KKyAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFjdGl2aXR5U3RhY2s+IGhvbWVEaXNwbGF5U3RhY2tzID0gbVN1cGVydmlzb3IubUhvbWVTdGFjay5tU3RhY2tzOworICAgICAgICBmb3IgKGludCBzdGFja05keCA9IGhvbWVEaXNwbGF5U3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKKyAgICAgICAgICAgIHN0YWNrID0gaG9tZURpc3BsYXlTdGFja3MuZ2V0KHN0YWNrTmR4KTsKKyAgICAgICAgICAgIGlmICghQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuaXNTdGF0aWNTdGFjayhzdGFjay5tU3RhY2tJZCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfRk9DVVMgfHwgREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfRk9DVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAiY29tcHV0ZVN0YWNrRm9jdXM6IFNldHRpbmcgZm9jdXNlZCBzdGFjaz0iICsgc3RhY2spOworICAgICAgICAgICAgICAgIHJldHVybiBzdGFjazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1aXRhYmxlIGR5bmFtaWMgc3RhY2sgdGhlbiB3ZSBmaWd1cmUgb3V0IHdoaWNoIHN0YXRpYyBzdGFjayB0byB1c2UuCisgICAgICAgIGZpbmFsIGludCBzdGFja0lkID0gdGFzayAhPSBudWxsID8gdGFzay5nZXRMYXVuY2hTdGFja0lkKCkgOgorICAgICAgICAgICAgICAgIGJvdW5kcyAhPSBudWxsID8gRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOworICAgICAgICBzdGFjayA9IG1TdXBlcnZpc29yLmdldFN0YWNrKHN0YWNrSWQsIENSRUFURV9JRl9ORUVERUQsIE9OX1RPUCk7CisgICAgICAgIGlmIChERUJVR19GT0NVUyB8fCBERUJVR19TVEFDSykgU2xvZy5kKFRBR19GT0NVUywgImNvbXB1dGVTdGFja0ZvY3VzOiBOZXcgc3RhY2sgcj0iCisgICAgICAgICAgICAgICAgKyByICsgIiBzdGFja0lkPSIgKyBzdGFjay5tU3RhY2tJZCk7CisgICAgICAgIHJldHVybiBzdGFjazsKKyAgICB9CisKKyAgICBwcml2YXRlIEFjdGl2aXR5U3RhY2sgZ2V0TGF1bmNoU3RhY2soQWN0aXZpdHlSZWNvcmQgciwgaW50IGxhdW5jaEZsYWdzLCBUYXNrUmVjb3JkIHRhc2ssCisgICAgICAgICAgICBBY3Rpdml0eU9wdGlvbnMgYU9wdGlvbnMsIGJvb2xlYW4gbGF1bmNoVG9TaWRlQWxsb3dlZCkgeworICAgICAgICBmaW5hbCBpbnQgbGF1bmNoU3RhY2tJZCA9CisgICAgICAgICAgICAgICAgKGFPcHRpb25zICE9IG51bGwpID8gYU9wdGlvbnMuZ2V0TGF1bmNoU3RhY2tJZCgpIDogSU5WQUxJRF9TVEFDS19JRDsKKworICAgICAgICBpZiAoaXNWYWxpZExhdW5jaFN0YWNrSWQobGF1bmNoU3RhY2tJZCwgcikpIHsKKyAgICAgICAgICAgIHJldHVybiBtU3VwZXJ2aXNvci5nZXRTdGFjayhsYXVuY2hTdGFja0lkLCBDUkVBVEVfSUZfTkVFREVELCBPTl9UT1ApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsYXVuY2hUb1NpZGVBbGxvd2VkIHx8IChsYXVuY2hGbGFncyAmIEZMQUdfQUNUSVZJVFlfTEFVTkNIX1RPX1NJREUpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHBhcmVudCBhY3Rpdml0eSBkb2Vzbid0IHdhbnQgdG8gbGF1bmNoIHRoZSBhY3Rpdml0eSBvbiB0b3Agb2YgaXRzZWxmLCBidXQKKyAgICAgICAgLy8gaW5zdGVhZCB0cmllcyB0byBwdXQgaXQgb250byBvdGhlciBzaWRlIGluIHNpZGUtYnktc2lkZSBtb2RlLgorICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHBhcmVudFN0YWNrID0gdGFzayAhPSBudWxsID8gdGFzay5zdGFjaworICAgICAgICAgICAgICAgIDogci5tSW5pdGlhbEFjdGl2aXR5Q29udGFpbmVyICE9IG51bGwgPyByLm1Jbml0aWFsQWN0aXZpdHlDb250YWluZXIubVN0YWNrCisgICAgICAgICAgICAgICAgOiBtU3VwZXJ2aXNvci5tRm9jdXNlZFN0YWNrOworICAgICAgICBpZiAocGFyZW50U3RhY2sgIT0gbnVsbCAmJiBwYXJlbnRTdGFjay5tU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIC8vIElmIHBhcmVudCB3YXMgaW4gZG9ja2VkIHN0YWNrLCB0aGUgbmF0dXJhbCBwbGFjZSB0byBsYXVuY2ggYW5vdGhlciBhY3Rpdml0eQorICAgICAgICAgICAgLy8gd2lsbCBiZSBmdWxsc2NyZWVuLCBzbyBpdCBjYW4gYXBwZWFyIGFsb25nc2lkZSB0aGUgZG9ja2VkIHdpbmRvdy4KKyAgICAgICAgICAgIHJldHVybiBtU3VwZXJ2aXNvci5nZXRTdGFjayhGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCwgQ1JFQVRFX0lGX05FRURFRCwgT05fVE9QKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGluIHRoZSBkb2NrZWQgc3RhY2ssIHdlIGNoZWNrIGlmIHRoZXJlIGlzIGRvY2tlZCB3aW5kb3cKKyAgICAgICAgICAgIC8vIGFuZCBpZiB5ZXMsIHdlIHdpbGwgbGF1bmNoIGludG8gdGhhdCBzdGFjay4gSWYgbm90LCB3ZSBqdXN0IHB1dCB0aGUgbmV3CisgICAgICAgICAgICAvLyBhY3Rpdml0eSBpbnRvIHBhcmVudCdzIHN0YWNrLCBiZWNhdXNlIHdlIGNhbid0IGZpbmQgYSBiZXR0ZXIgcGxhY2UuCisgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVN0YWNrIHN0YWNrID0gbVN1cGVydmlzb3IuZ2V0U3RhY2soRE9DS0VEX1NUQUNLX0lEKTsKKyAgICAgICAgICAgIGlmIChzdGFjayAhPSBudWxsICYmICFzdGFjay5pc1N0YWNrVmlzaWJsZUxvY2tlZCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBkb2NrZWQgc3RhY2ssIGJ1dCBpdCBpc24ndCB2aXNpYmxlLCBzbyB3ZSBjYW4ndCBsYXVuY2ggaW50byB0aGF0LgorICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZExhdW5jaFN0YWNrSWQoaW50IHN0YWNrSWQsIEFjdGl2aXR5UmVjb3JkIHIpIHsKKyAgICAgICAgaWYgKHN0YWNrSWQgPT0gSU5WQUxJRF9TVEFDS19JRCB8fCBzdGFja0lkID09IEhPTUVfU1RBQ0tfSUQKKyAgICAgICAgICAgICAgICB8fCAhU3RhY2tJZC5pc1N0YXRpY1N0YWNrKHN0YWNrSWQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIHJlc2l6ZWFibGUgPSByLmlzUmVzaXplYWJsZSgpIHx8IG1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXM7CisKKyAgICAgICAgaWYgKHN0YWNrSWQgIT0gRlVMTFNDUkVFTl9XT1JLU1BBQ0VfU1RBQ0tfSUQgJiYgIXJlc2l6ZWFibGUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCAmJiAhbVNlcnZpY2UubVN1cHBvcnRzRnJlZWZvcm1XaW5kb3dNYW5hZ2VtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBib29sZWFuIHN1cHBvcnRzUGlwID0gbVNlcnZpY2UubVN1cHBvcnRzUGljdHVyZUluUGljdHVyZQorICAgICAgICAgICAgICAgICYmIChyLnN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpIHx8IG1TZXJ2aWNlLm1Gb3JjZVJlc2l6YWJsZUFjdGl2aXRpZXMpOworICAgICAgICBpZiAoc3RhY2tJZCA9PSBQSU5ORURfU1RBQ0tfSUQgJiYgIXN1cHBvcnRzUGlwKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVjdCBnZXRPdmVycmlkZUJvdW5kcyhBY3Rpdml0eVJlY29yZCByLCBBY3Rpdml0eU9wdGlvbnMgb3B0aW9ucywgVGFza1JlY29yZCBpblRhc2spIHsKKyAgICAgICAgUmVjdCBuZXdCb3VuZHMgPSBudWxsOworICAgICAgICBpZiAob3B0aW9ucyAhPSBudWxsICYmIChyLmlzUmVzaXplYWJsZSgpIHx8IChpblRhc2sgIT0gbnVsbCAmJiBpblRhc2subVJlc2l6ZWFibGUpKSkgeworICAgICAgICAgICAgaWYgKG1TdXBlcnZpc29yLmNhblVzZUFjdGl2aXR5T3B0aW9uc0xhdW5jaEJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywgb3B0aW9ucy5nZXRMYXVuY2hTdGFja0lkKCkpKSB7CisgICAgICAgICAgICAgICAgbmV3Qm91bmRzID0gVGFza1JlY29yZC52YWxpZGF0ZUJvdW5kcyhvcHRpb25zLmdldExhdW5jaEJvdW5kcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3Qm91bmRzOworICAgIH0KKworICAgIHZvaWQgc2V0V2luZG93TWFuYWdlcihXaW5kb3dNYW5hZ2VyU2VydmljZSB3bSkgeworICAgICAgICBtV2luZG93TWFuYWdlciA9IHdtOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXNMb2NrZWQoQWN0aXZpdHlTdGFjayBzdGFjaykgeworICAgICAgICBmb3IgKGludCBwYWxOZHggPSBtUGVuZGluZ0FjdGl2aXR5TGF1bmNoZXMuc2l6ZSgpIC0gMTsgcGFsTmR4ID49IDA7IC0tcGFsTmR4KSB7CisgICAgICAgICAgICBQZW5kaW5nQWN0aXZpdHlMYXVuY2ggcGFsID0gbVBlbmRpbmdBY3Rpdml0eUxhdW5jaGVzLmdldChwYWxOZHgpOworICAgICAgICAgICAgaWYgKHBhbC5zdGFjayA9PSBzdGFjaykgeworICAgICAgICAgICAgICAgIG1QZW5kaW5nQWN0aXZpdHlMYXVuY2hlcy5yZW1vdmUocGFsTmR4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQmF0dGVyeVN0YXRzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9CYXR0ZXJ5U3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggZjY0YjgwMy4uODI4NjJlOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9CYXR0ZXJ5U3RhdHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9CYXR0ZXJ5U3RhdHNTZXJ2aWNlLmphdmEKQEAgLTExMTQsNyArMTExNCw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTm90IGFuIG9wdGlvbiwgbGFzdCBhcmd1bWVudCBtdXN0IGJlIGEgcGFja2FnZSBuYW1lLgogICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVxVWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkKGFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcVVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcihhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIlVua25vd24gcGFja2FnZTogIiArIGFyZyk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0Jyb2FkY2FzdFF1ZXVlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0Jyb2FkY2FzdFF1ZXVlLmphdmEKaW5kZXggMzllMjVlZS4uNjIyYWExNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RRdWV1ZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQnJvYWRjYXN0UXVldWUuamF2YQpAQCAtNDY4LDcgKzQ2OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGRlbGl2ZXJUb1JlZ2lzdGVyZWRSZWNlaXZlckxvY2tlZChCcm9hZGNhc3RSZWNvcmQgciwKLSAgICAgICAgICAgIEJyb2FkY2FzdEZpbHRlciBmaWx0ZXIsIGJvb2xlYW4gb3JkZXJlZCkgeworICAgICAgICAgICAgQnJvYWRjYXN0RmlsdGVyIGZpbHRlciwgYm9vbGVhbiBvcmRlcmVkLCBpbnQgaW5kZXgpIHsKICAgICAgICAgYm9vbGVhbiBza2lwID0gZmFsc2U7CiAgICAgICAgIGlmIChmaWx0ZXIucmVxdWlyZWRQZXJtaXNzaW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIGludCBwZXJtID0gbVNlcnZpY2UuY2hlY2tDb21wb25lbnRQZXJtaXNzaW9uKGZpbHRlci5yZXF1aXJlZFBlcm1pc3Npb24sCkBAIC01NzYsNjQgKzU3Niw3MCBAQAogCiAgICAgICAgIGlmICghbVNlcnZpY2UubUludGVudEZpcmV3YWxsLmNoZWNrQnJvYWRjYXN0KHIuaW50ZW50LCByLmNhbGxpbmdVaWQsCiAgICAgICAgICAgICAgICAgci5jYWxsaW5nUGlkLCByLnJlc29sdmVkVHlwZSwgZmlsdGVyLnJlY2VpdmVyTGlzdC51aWQpKSB7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBza2lwID0gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcCA9PSBudWxsIHx8IGZpbHRlci5yZWNlaXZlckxpc3QuYXBwLmNyYXNoaW5nKSB7CisgICAgICAgIGlmICghc2tpcCAmJiAoZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAgPT0gbnVsbCB8fCBmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcC5jcmFzaGluZykpIHsKICAgICAgICAgICAgIFNsb2cudyhUQUcsICJTa2lwcGluZyBkZWxpdmVyIFsiICsgbVF1ZXVlTmFtZSArICJdICIgKyByCiAgICAgICAgICAgICAgICAgICAgICsgIiB0byAiICsgZmlsdGVyLnJlY2VpdmVyTGlzdCArICI6IHByb2Nlc3MgY3Jhc2hpbmciKTsKICAgICAgICAgICAgIHNraXAgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFza2lwKSB7Ci0gICAgICAgICAgICAvLyBJZiBwZXJtaXNzaW9ucyBuZWVkIGEgcmV2aWV3IGJlZm9yZSBhbnkgb2YgdGhlIGFwcCBjb21wb25lbnRzIGNhbiBydW4sIHdlIGRyb3AKLSAgICAgICAgICAgIC8vIHRoZSBicm9hZGNhc3QgYW5kIGlmIHRoZSBjYWxsaW5nIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZCBhbmQgdGhlIGJyb2FkY2FzdCBpcwotICAgICAgICAgICAgLy8gZXhwbGljaXQgd2UgbGF1bmNoIHRoZSByZXZpZXcgVUkgcGFzc2luZyBpdCBhIHBlbmRpbmcgaW50ZW50IHRvIHNlbmQgdGhlIHNraXBwZWQKLSAgICAgICAgICAgIC8vIGJyb2FkY2FzdC4KLSAgICAgICAgICAgIGlmIChCdWlsZC5QRVJNSVNTSU9OU19SRVZJRVdfUkVRVUlSRUQpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RTdGFydFRhcmdldFBlcm1pc3Npb25zUmV2aWV3SWZOZWVkZWRMb2NrZWQociwgZmlsdGVyLnBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm93bmluZ1VzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHNraXApIHsKKyAgICAgICAgICAgIHIuZGVsaXZlcnlbaW5kZXhdID0gQnJvYWRjYXN0UmVjb3JkLkRFTElWRVJZX1NLSVBQRUQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYmVpbmcgc2VudCBhcyBhbiBvcmRlcmVkIGJyb2FkY2FzdCwgdGhlbiB3ZQotICAgICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0byB0b3VjaCB0aGUgZmllbGRzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudAotICAgICAgICAgICAgLy8gc3RhdGUgb2Ygb3JkZXJlZCBicm9hZGNhc3RzLgotICAgICAgICAgICAgaWYgKG9yZGVyZWQpIHsKLSAgICAgICAgICAgICAgICByLnJlY2VpdmVyID0gZmlsdGVyLnJlY2VpdmVyTGlzdC5yZWNlaXZlci5hc0JpbmRlcigpOwotICAgICAgICAgICAgICAgIHIuY3VyRmlsdGVyID0gZmlsdGVyOwotICAgICAgICAgICAgICAgIGZpbHRlci5yZWNlaXZlckxpc3QuY3VyQnJvYWRjYXN0ID0gcjsKLSAgICAgICAgICAgICAgICByLnN0YXRlID0gQnJvYWRjYXN0UmVjb3JkLkNBTExfSU5fUkVDRUlWRTsKLSAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBCdW1wIGhvc3RpbmcgYXBwbGljYXRpb24gdG8gbm8gbG9uZ2VyIGJlIGluIGJhY2tncm91bmQKLSAgICAgICAgICAgICAgICAgICAgLy8gc2NoZWR1bGluZyBjbGFzcy4gIE5vdGUgdGhhdCB3ZSBjYW4ndCBkbyB0aGF0IGlmIHRoZXJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGlzbid0IGFuIGFwcC4uLiAgYnV0IHdlIGNhbiBvbmx5IGJlIGluIHRoYXQgY2FzZSBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzIHRoYXQgZGlyZWN0bHkgY2FsbCB0aGUgSUFjdGl2aXR5TWFuYWdlciBBUEksIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZSBhbHJlYWR5IGNvcmUgc3lzdGVtIHN0dWZmIHNvIGRvbid0IG1hdHRlciBmb3IgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgci5jdXJBcHAgPSBmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcDsKLSAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAuY3VyUmVjZWl2ZXIgPSByOwotICAgICAgICAgICAgICAgICAgICBtU2VydmljZS51cGRhdGVPb21BZGpMb2NrZWQoci5jdXJBcHApOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgcGVybWlzc2lvbnMgbmVlZCBhIHJldmlldyBiZWZvcmUgYW55IG9mIHRoZSBhcHAgY29tcG9uZW50cyBjYW4gcnVuLCB3ZSBkcm9wCisgICAgICAgIC8vIHRoZSBicm9hZGNhc3QgYW5kIGlmIHRoZSBjYWxsaW5nIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZCBhbmQgdGhlIGJyb2FkY2FzdCBpcworICAgICAgICAvLyBleHBsaWNpdCB3ZSBsYXVuY2ggdGhlIHJldmlldyBVSSBwYXNzaW5nIGl0IGEgcGVuZGluZyBpbnRlbnQgdG8gc2VuZCB0aGUgc2tpcHBlZAorICAgICAgICAvLyBicm9hZGNhc3QuCisgICAgICAgIGlmIChCdWlsZC5QRVJNSVNTSU9OU19SRVZJRVdfUkVRVUlSRUQpIHsKKyAgICAgICAgICAgIGlmICghcmVxdWVzdFN0YXJ0VGFyZ2V0UGVybWlzc2lvbnNSZXZpZXdJZk5lZWRlZExvY2tlZChyLCBmaWx0ZXIucGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vd25pbmdVc2VySWQpKSB7CisgICAgICAgICAgICAgICAgci5kZWxpdmVyeVtpbmRleF0gPSBCcm9hZGNhc3RSZWNvcmQuREVMSVZFUllfU0tJUFBFRDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChERUJVR19CUk9BRENBU1RfTElHSFQpIFNsb2cuaShUQUdfQlJPQURDQVNULAotICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGl2ZXJpbmcgdG8gIiArIGZpbHRlciArICIgOiAiICsgcik7Ci0gICAgICAgICAgICAgICAgcGVyZm9ybVJlY2VpdmVMb2NrZWQoZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAsIGZpbHRlci5yZWNlaXZlckxpc3QucmVjZWl2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KHIuaW50ZW50KSwgci5yZXN1bHRDb2RlLCByLnJlc3VsdERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICByLnJlc3VsdEV4dHJhcywgci5vcmRlcmVkLCByLmluaXRpYWxTdGlja3ksIHIudXNlcklkKTsKLSAgICAgICAgICAgICAgICBpZiAob3JkZXJlZCkgewotICAgICAgICAgICAgICAgICAgICByLnN0YXRlID0gQnJvYWRjYXN0UmVjb3JkLkNBTExfRE9ORV9SRUNFSVZFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWx1cmUgc2VuZGluZyBicm9hZGNhc3QgIiArIHIuaW50ZW50LCBlKTsKLSAgICAgICAgICAgICAgICBpZiAob3JkZXJlZCkgewotICAgICAgICAgICAgICAgICAgICByLnJlY2VpdmVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgci5jdXJGaWx0ZXIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmVjZWl2ZXJMaXN0LmN1ckJyb2FkY2FzdCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcC5jdXJSZWNlaXZlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHIuZGVsaXZlcnlbaW5kZXhdID0gQnJvYWRjYXN0UmVjb3JkLkRFTElWRVJZX0RFTElWRVJFRDsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBiZWluZyBzZW50IGFzIGFuIG9yZGVyZWQgYnJvYWRjYXN0LCB0aGVuIHdlCisgICAgICAgIC8vIGRvbid0IHdhbnQgdG8gdG91Y2ggdGhlIGZpZWxkcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gc3RhdGUgb2Ygb3JkZXJlZCBicm9hZGNhc3RzLgorICAgICAgICBpZiAob3JkZXJlZCkgeworICAgICAgICAgICAgci5yZWNlaXZlciA9IGZpbHRlci5yZWNlaXZlckxpc3QucmVjZWl2ZXIuYXNCaW5kZXIoKTsKKyAgICAgICAgICAgIHIuY3VyRmlsdGVyID0gZmlsdGVyOworICAgICAgICAgICAgZmlsdGVyLnJlY2VpdmVyTGlzdC5jdXJCcm9hZGNhc3QgPSByOworICAgICAgICAgICAgci5zdGF0ZSA9IEJyb2FkY2FzdFJlY29yZC5DQUxMX0lOX1JFQ0VJVkU7CisgICAgICAgICAgICBpZiAoZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIEJ1bXAgaG9zdGluZyBhcHBsaWNhdGlvbiB0byBubyBsb25nZXIgYmUgaW4gYmFja2dyb3VuZAorICAgICAgICAgICAgICAgIC8vIHNjaGVkdWxpbmcgY2xhc3MuICBOb3RlIHRoYXQgd2UgY2FuJ3QgZG8gdGhhdCBpZiB0aGVyZQorICAgICAgICAgICAgICAgIC8vIGlzbid0IGFuIGFwcC4uLiAgYnV0IHdlIGNhbiBvbmx5IGJlIGluIHRoYXQgY2FzZSBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGluZ3MgdGhhdCBkaXJlY3RseSBjYWxsIHRoZSBJQWN0aXZpdHlNYW5hZ2VyIEFQSSwgd2hpY2gKKyAgICAgICAgICAgICAgICAvLyBhcmUgYWxyZWFkeSBjb3JlIHN5c3RlbSBzdHVmZiBzbyBkb24ndCBtYXR0ZXIgZm9yIHRoaXMuCisgICAgICAgICAgICAgICAgci5jdXJBcHAgPSBmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcDsKKyAgICAgICAgICAgICAgICBmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcC5jdXJSZWNlaXZlciA9IHI7CisgICAgICAgICAgICAgICAgbVNlcnZpY2UudXBkYXRlT29tQWRqTG9ja2VkKHIuY3VyQXBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKERFQlVHX0JST0FEQ0FTVF9MSUdIVCkgU2xvZy5pKFRBR19CUk9BRENBU1QsCisgICAgICAgICAgICAgICAgICAgICJEZWxpdmVyaW5nIHRvICIgKyBmaWx0ZXIgKyAiIDogIiArIHIpOworICAgICAgICAgICAgcGVyZm9ybVJlY2VpdmVMb2NrZWQoZmlsdGVyLnJlY2VpdmVyTGlzdC5hcHAsIGZpbHRlci5yZWNlaXZlckxpc3QucmVjZWl2ZXIsCisgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoci5pbnRlbnQpLCByLnJlc3VsdENvZGUsIHIucmVzdWx0RGF0YSwKKyAgICAgICAgICAgICAgICAgICAgci5yZXN1bHRFeHRyYXMsIHIub3JkZXJlZCwgci5pbml0aWFsU3RpY2t5LCByLnVzZXJJZCk7CisgICAgICAgICAgICBpZiAob3JkZXJlZCkgeworICAgICAgICAgICAgICAgIHIuc3RhdGUgPSBCcm9hZGNhc3RSZWNvcmQuQ0FMTF9ET05FX1JFQ0VJVkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbHVyZSBzZW5kaW5nIGJyb2FkY2FzdCAiICsgci5pbnRlbnQsIGUpOworICAgICAgICAgICAgaWYgKG9yZGVyZWQpIHsKKyAgICAgICAgICAgICAgICByLnJlY2VpdmVyID0gbnVsbDsKKyAgICAgICAgICAgICAgICByLmN1ckZpbHRlciA9IG51bGw7CisgICAgICAgICAgICAgICAgZmlsdGVyLnJlY2VpdmVyTGlzdC5jdXJCcm9hZGNhc3QgPSBudWxsOworICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIucmVjZWl2ZXJMaXN0LmFwcCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlci5yZWNlaXZlckxpc3QuYXBwLmN1clJlY2VpdmVyID0gbnVsbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0MCw3ICs3NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfQlJPQURDQVNUKSAgU2xvZy52KFRBR19CUk9BRENBU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlbGl2ZXJpbmcgbm9uLW9yZGVyZWQgb24gWyIgKyBtUXVldWVOYW1lICsgIl0gdG8gcmVnaXN0ZXJlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0YXJnZXQgKyAiOiAiICsgcik7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJUb1JlZ2lzdGVyZWRSZWNlaXZlckxvY2tlZChyLCAoQnJvYWRjYXN0RmlsdGVyKXRhcmdldCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBkZWxpdmVyVG9SZWdpc3RlcmVkUmVjZWl2ZXJMb2NrZWQociwgKEJyb2FkY2FzdEZpbHRlcil0YXJnZXQsIGZhbHNlLCBpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWRkQnJvYWRjYXN0VG9IaXN0b3J5TG9ja2VkKHIpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19CUk9BRENBU1RfTElHSFQpIFNsb2cudihUQUdfQlJPQURDQVNULCAiRG9uZSB3aXRoIHBhcmFsbGVsIGJyb2FkY2FzdCBbIgpAQCAtODk3LDcgKzkwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiRGVsaXZlcmluZyBvcmRlcmVkIFsiCiAgICAgICAgICAgICAgICAgICAgICAgICArIG1RdWV1ZU5hbWUgKyAiXSB0byByZWdpc3RlcmVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgZmlsdGVyICsgIjogIiArIHIpOwotICAgICAgICAgICAgICAgIGRlbGl2ZXJUb1JlZ2lzdGVyZWRSZWNlaXZlckxvY2tlZChyLCBmaWx0ZXIsIHIub3JkZXJlZCk7CisgICAgICAgICAgICAgICAgZGVsaXZlclRvUmVnaXN0ZXJlZFJlY2VpdmVyTG9ja2VkKHIsIGZpbHRlciwgci5vcmRlcmVkLCByZWNJZHgpOwogICAgICAgICAgICAgICAgIGlmIChyLnJlY2VpdmVyID09IG51bGwgfHwgIXIub3JkZXJlZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgaGFzIGFscmVhZHkgZmluaXNoZWQsIHNvIHNjaGVkdWxlIHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MgdGhlIG5leHQgb25lLgpAQCAtOTI1LDEwICs5MzEsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgaW5mby5hY3Rpdml0eUluZm8ubmFtZSk7CiAKICAgICAgICAgICAgIGJvb2xlYW4gc2tpcCA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGJyT3B0aW9ucyAhPSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIChpbmZvLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8udGFyZ2V0U2RrVmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgYnJPcHRpb25zLmdldE1pbk1hbmlmZXN0UmVjZWl2ZXJBcGlMZXZlbCgpIHx8CisgICAgICAgICAgICAgICAgICAgIGluZm8uYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby50YXJnZXRTZGtWZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiBick9wdGlvbnMuZ2V0TWF4TWFuaWZlc3RSZWNlaXZlckFwaUxldmVsKCkpKSB7CisgICAgICAgICAgICAgICAgc2tpcCA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcGVybSA9IG1TZXJ2aWNlLmNoZWNrQ29tcG9uZW50UGVybWlzc2lvbihpbmZvLmFjdGl2aXR5SW5mby5wZXJtaXNzaW9uLAogICAgICAgICAgICAgICAgICAgICByLmNhbGxpbmdQaWQsIHIuY2FsbGluZ1VpZCwgaW5mby5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnVpZCwKICAgICAgICAgICAgICAgICAgICAgaW5mby5hY3Rpdml0eUluZm8uZXhwb3J0ZWQpOwotICAgICAgICAgICAgaWYgKHBlcm0gIT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7CisgICAgICAgICAgICBpZiAoIXNraXAgJiYgcGVybSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWN0aXZpdHlJbmZvLmV4cG9ydGVkKSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJQZXJtaXNzaW9uIERlbmlhbDogYnJvYWRjYXN0aW5nICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIuaW50ZW50LnRvU3RyaW5nKCkKQEAgLTk0NSw3ICs5NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBkdWUgdG8gcmVjZWl2ZXIgIiArIGNvbXBvbmVudC5mbGF0dGVuVG9TaG9ydFN0cmluZygpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGluZm8uYWN0aXZpdHlJbmZvLnBlcm1pc3Npb24gIT0gbnVsbCkgeworICAgICAgICAgICAgfSBlbHNlIGlmICghc2tpcCAmJiBpbmZvLmFjdGl2aXR5SW5mby5wZXJtaXNzaW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgb3BDb2RlID0gQXBwT3BzTWFuYWdlci5wZXJtaXNzaW9uVG9PcENvZGUoaW5mby5hY3Rpdml0eUluZm8ucGVybWlzc2lvbik7CiAgICAgICAgICAgICAgICAgaWYgKG9wQ29kZSAhPSBBcHBPcHNNYW5hZ2VyLk9QX05PTkUKICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1TZXJ2aWNlLm1BcHBPcHNTZXJ2aWNlLm5vdGVPcGVyYXRpb24ob3BDb2RlLCByLmNhbGxpbmdVaWQsCkBAIC0xMDc1LDkgKzEwODgsMTggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc2FmZSB0byBkbyBldmVuIGlmIHdlIGFyZSBza2lwcGluZyB0aGUgYnJvYWRjYXN0LCBhbmQgd2UgbmVlZAorICAgICAgICAgICAgLy8gdGhpcyBpbmZvcm1hdGlvbiBub3cgdG8gZXZhbHVhdGUgd2hldGhlciBpdCBpcyBnb2luZyB0byBiZSBhbGxvd2VkIHRvIHJ1bi4KKyAgICAgICAgICAgIGZpbmFsIGludCByZWNlaXZlclVpZCA9IGluZm8uYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQ7CisgICAgICAgICAgICAvLyBJZiBpdCdzIGEgc2luZ2xldG9uLCBpdCBuZWVkcyB0byBiZSB0aGUgc2FtZSBhcHAgb3IgYSBzcGVjaWFsIGFwcAorICAgICAgICAgICAgaWYgKHIuY2FsbGluZ1VpZCAhPSBQcm9jZXNzLlNZU1RFTV9VSUQgJiYgaXNTaW5nbGV0b24KKyAgICAgICAgICAgICAgICAgICAgJiYgbVNlcnZpY2UuaXNWYWxpZFNpbmdsZXRvbkNhbGwoci5jYWxsaW5nVWlkLCByZWNlaXZlclVpZCkpIHsKKyAgICAgICAgICAgICAgICBpbmZvLmFjdGl2aXR5SW5mbyA9IG1TZXJ2aWNlLmdldEFjdGl2aXR5SW5mb0ZvclVzZXIoaW5mby5hY3Rpdml0eUluZm8sIDApOworICAgICAgICAgICAgfQogICAgICAgICAgICAgU3RyaW5nIHRhcmdldFByb2Nlc3MgPSBpbmZvLmFjdGl2aXR5SW5mby5wcm9jZXNzTmFtZTsKICAgICAgICAgICAgIFByb2Nlc3NSZWNvcmQgYXBwID0gbVNlcnZpY2UuZ2V0UHJvY2Vzc1JlY29yZExvY2tlZCh0YXJnZXRQcm9jZXNzLAogICAgICAgICAgICAgICAgICAgICBpbmZvLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8udWlkLCBmYWxzZSk7CisKICAgICAgICAgICAgIGlmICghc2tpcCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBhbGxvd2VkID0gbVNlcnZpY2UuY2hlY2tBbGxvd0JhY2tncm91bmRMb2NrZWQoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8udWlkLCBpbmZvLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZSwgLTEpOwpAQCAtMTEwOSw2ICsxMTMxLDcgQEAKICAgICAgICAgICAgICAgICBpZiAoREVCVUdfQlJPQURDQVNUKSAgU2xvZy52KFRBR19CUk9BRENBU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBpbmcgZGVsaXZlcnkgb2Ygb3JkZXJlZCBbIiArIG1RdWV1ZU5hbWUgKyAiXSAiCiAgICAgICAgICAgICAgICAgICAgICAgICArIHIgKyAiIGZvciB3aGF0ZXZlciByZWFzb24iKTsKKyAgICAgICAgICAgICAgICByLmRlbGl2ZXJ5W3JlY0lkeF0gPSBCcm9hZGNhc3RSZWNvcmQuREVMSVZFUllfU0tJUFBFRDsKICAgICAgICAgICAgICAgICByLnJlY2VpdmVyID0gbnVsbDsKICAgICAgICAgICAgICAgICByLmN1ckZpbHRlciA9IG51bGw7CiAgICAgICAgICAgICAgICAgci5zdGF0ZSA9IEJyb2FkY2FzdFJlY29yZC5JRExFOwpAQCAtMTExNiwxNCArMTEzOSw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICByLmRlbGl2ZXJ5W3JlY0lkeF0gPSBCcm9hZGNhc3RSZWNvcmQuREVMSVZFUllfREVMSVZFUkVEOwogICAgICAgICAgICAgci5zdGF0ZSA9IEJyb2FkY2FzdFJlY29yZC5BUFBfUkVDRUlWRTsKICAgICAgICAgICAgIHIuY3VyQ29tcG9uZW50ID0gY29tcG9uZW50OwotICAgICAgICAgICAgZmluYWwgaW50IHJlY2VpdmVyVWlkID0gaW5mby5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnVpZDsKLSAgICAgICAgICAgIC8vIElmIGl0J3MgYSBzaW5nbGV0b24sIGl0IG5lZWRzIHRvIGJlIHRoZSBzYW1lIGFwcCBvciBhIHNwZWNpYWwgYXBwCi0gICAgICAgICAgICBpZiAoci5jYWxsaW5nVWlkICE9IFByb2Nlc3MuU1lTVEVNX1VJRCAmJiBpc1NpbmdsZXRvbgotICAgICAgICAgICAgICAgICAgICAmJiBtU2VydmljZS5pc1ZhbGlkU2luZ2xldG9uQ2FsbChyLmNhbGxpbmdVaWQsIHJlY2VpdmVyVWlkKSkgewotICAgICAgICAgICAgICAgIGluZm8uYWN0aXZpdHlJbmZvID0gbVNlcnZpY2UuZ2V0QWN0aXZpdHlJbmZvRm9yVXNlcihpbmZvLmFjdGl2aXR5SW5mbywgMCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByLmN1clJlY2VpdmVyID0gaW5mby5hY3Rpdml0eUluZm87CiAgICAgICAgICAgICBpZiAoREVCVUdfTVUgJiYgci5jYWxsaW5nVWlkID4gVXNlckhhbmRsZS5QRVJfVVNFUl9SQU5HRSkgewogICAgICAgICAgICAgICAgIFNsb2cudihUQUdfTVUsICJVcGRhdGVkIGJyb2FkY2FzdCByZWNvcmQgYWN0aXZpdHkgaW5mbyBmb3Igc2Vjb25kYXJ5IHVzZXIsICIKQEAgLTEyOTEsNiArMTMwOSw3IEBACiAgICAgICAgIFN0cmluZyBhbnJNZXNzYWdlID0gbnVsbDsKIAogICAgICAgICBPYmplY3QgY3VyUmVjZWl2ZXIgPSByLnJlY2VpdmVycy5nZXQoci5uZXh0UmVjZWl2ZXItMSk7CisgICAgICAgIHIuZGVsaXZlcnlbci5uZXh0UmVjZWl2ZXItMV0gPSBCcm9hZGNhc3RSZWNvcmQuREVMSVZFUllfVElNRU9VVDsKICAgICAgICAgU2xvZy53KFRBRywgIlJlY2VpdmVyIGR1cmluZyB0aW1lb3V0OiAiICsgY3VyUmVjZWl2ZXIpOwogICAgICAgICBsb2dCcm9hZGNhc3RSZWNlaXZlckRpc2NhcmRMb2NrZWQocik7CiAgICAgICAgIGlmIChjdXJSZWNlaXZlciBpbnN0YW5jZW9mIEJyb2FkY2FzdEZpbHRlcikgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RSZWNvcmQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vQnJvYWRjYXN0UmVjb3JkLmphdmEKaW5kZXggMWEyNjljZi4uZTk5Y2JmOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Ccm9hZGNhc3RSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0Jyb2FkY2FzdFJlY29yZC5qYXZhCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgZmluYWwgaW50IGFwcE9wOyAgICAgICAgLy8gYW4gYXBwIG9wIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnJvYWRjYXN0CiAgICAgZmluYWwgQnJvYWRjYXN0T3B0aW9ucyBvcHRpb25zOyAvLyBCcm9hZGNhc3RPcHRpb25zIHN1cHBsaWVkIGJ5IGNhbGxlcgogICAgIGZpbmFsIExpc3QgcmVjZWl2ZXJzOyAgIC8vIGNvbnRhaW5zIEJyb2FkY2FzdEZpbHRlciBhbmQgUmVzb2x2ZUluZm8KKyAgICBmaW5hbCBpbnRbXSBkZWxpdmVyeTsgICAvLyBkZWxpdmVyeSBzdGF0ZSBvZiBlYWNoIHJlY2VpdmVyCiAgICAgSUludGVudFJlY2VpdmVyIHJlc3VsdFRvOyAvLyB3aG8gcmVjZWl2ZXMgZmluYWwgcmVzdWx0IGlmIG5vbi1udWxsCiAgICAgbG9uZyBlbnF1ZXVlQ2xvY2tUaW1lOyAgLy8gdGhlIGNsb2NrIHRpbWUgdGhlIGJyb2FkY2FzdCB3YXMgZW5xdWV1ZWQKICAgICBsb25nIGRpc3BhdGNoVGltZTsgICAgICAvLyB3aGVuIGRpc3BhdGNoIHN0YXJ0ZWQgb24gdGhpcyBzZXQgb2YgcmVjZWl2ZXJzCkBAIC03OSw2ICs4MCwxMSBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTF9ET05FX1JFQ0VJVkUgPSAzOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgV0FJVElOR19TRVJWSUNFUyA9IDQ7CiAKKyAgICBzdGF0aWMgZmluYWwgaW50IERFTElWRVJZX1BFTkRJTkcgPSAwOworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMSVZFUllfREVMSVZFUkVEID0gMTsKKyAgICBzdGF0aWMgZmluYWwgaW50IERFTElWRVJZX1NLSVBQRUQgPSAyOworICAgIHN0YXRpYyBmaW5hbCBpbnQgREVMSVZFUllfVElNRU9VVCA9IDM7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBzZXQgd2hlbiB3ZSBhcmUgY2FsbGluZyBhIHJlY2VpdmVyIChvbmUgdGhhdAogICAgIC8vIHdhcyBmb3VuZCBpbiBvdXIgbGlzdCBvZiByZWdpc3RlcmVkIHJlY2VpdmVycykuCiAgICAgQnJvYWRjYXN0RmlsdGVyIGN1ckZpbHRlcjsKQEAgLTE4MywxMiArMTg5LDI0IEBACiAgICAgICAgIFByaW50V3JpdGVyUHJpbnRlciBwcmludGVyID0gbmV3IFByaW50V3JpdGVyUHJpbnRlcihwdyk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBPYmplY3QgbyA9IHJlY2VpdmVycy5nZXQoaSk7Ci0gICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgiUmVjZWl2ZXIgIyIpOyBwdy5wcmludChpKTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIjogIik7IHB3LnByaW50bG4obyk7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJyb2FkY2FzdEZpbHRlcikKLSAgICAgICAgICAgICAgICAoKEJyb2FkY2FzdEZpbHRlcilvKS5kdW1wQnJpZWYocHcsIHAyKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBSZXNvbHZlSW5mbykKLSAgICAgICAgICAgICAgICAoKFJlc29sdmVJbmZvKW8pLmR1bXAocHJpbnRlciwgcDIsIDApOworICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGVsaXZlcnlbaV0pIHsKKyAgICAgICAgICAgICAgICBjYXNlIERFTElWRVJZX1BFTkRJTkc6ICAgcHcucHJpbnQoIlBlbmRpbmciKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBERUxJVkVSWV9ERUxJVkVSRUQ6IHB3LnByaW50KCJEZWxpdmVyIik7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgREVMSVZFUllfU0tJUFBFRDogICBwdy5wcmludCgiU2tpcHBlZCIpOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIERFTElWRVJZX1RJTUVPVVQ6ICAgcHcucHJpbnQoIlRpbWVvdXQiKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgIHB3LnByaW50KCI/Pz8/Pz8/Iik7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHcucHJpbnQoIiAjIik7IHB3LnByaW50KGkpOyBwdy5wcmludCgiOiAiKTsKKyAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgQnJvYWRjYXN0RmlsdGVyKSB7CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbihvKTsKKyAgICAgICAgICAgICAgICAoKEJyb2FkY2FzdEZpbHRlcikgbykuZHVtcEJyaWVmKHB3LCBwMik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBSZXNvbHZlSW5mbykgeworICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIihtYW5pZmVzdCkiKTsKKyAgICAgICAgICAgICAgICAoKFJlc29sdmVJbmZvKSBvKS5kdW1wKHByaW50ZXIsIHAyLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbihvKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjExLDYgKzIyOSw3IEBACiAgICAgICAgIGFwcE9wID0gX2FwcE9wOwogICAgICAgICBvcHRpb25zID0gX29wdGlvbnM7CiAgICAgICAgIHJlY2VpdmVycyA9IF9yZWNlaXZlcnM7CisgICAgICAgIGRlbGl2ZXJ5ID0gbmV3IGludFtfcmVjZWl2ZXJzICE9IG51bGwgPyBfcmVjZWl2ZXJzLnNpemUoKSA6IDBdOwogICAgICAgICByZXN1bHRUbyA9IF9yZXN1bHRUbzsKICAgICAgICAgcmVzdWx0Q29kZSA9IF9yZXN1bHRDb2RlOwogICAgICAgICByZXN1bHREYXRhID0gX3Jlc3VsdERhdGE7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0V2ZW50TG9nVGFncy5sb2d0YWdzIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9FdmVudExvZ1RhZ3MubG9ndGFncwppbmRleCAwMzk3NTUzLi5mMmU4ZDA5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL0V2ZW50TG9nVGFncy5sb2d0YWdzCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vRXZlbnRMb2dUYWdzLmxvZ3RhZ3MKQEAgLTEwMCw2ICsxMDAsNiBAQAogMzAwNDUgYW1fcHJlX2Jvb3QgKFVzZXJ8MXw1KSwoUGFja2FnZXwzKQogCiAjIFJlcG9ydCBjb2xsZWN0aW9uIG9mIGdsb2JhbCBtZW1vcnkgc3RhdGUKLTMwMDQ2IGFtX21lbWluZm8gKENhY2hlZEtifDJ8MiksKEZyZWVLYnwyfDIpLChacmFtS2J8MnwyKSwoS2VybmVsS2J8MnwyKSwoTmF0aXZlS2J8MnwyKQorMzAwNDYgYW1fbWVtaW5mbyAoQ2FjaGVkfDJ8MiksKEZyZWV8MnwyKSwoWnJhbXwyfDIpLChLZXJuZWx8MnwyKSwoTmF0aXZlfDJ8MikKICMgUmVwb3J0IGNvbGxlY3Rpb24gb2YgbWVtb3J5IHVzZWQgYnkgYSBwcm9jZXNzCi0zMDA0NyBhbV9wc3MgKFBpZHwxfDUpLChVSUR8MXw1KSwoUHJvY2VzcyBOYW1lfDMpLChQc3NLYnwyfDIpLChVc3NLYnwyfDIpCiszMDA0NyBhbV9wc3MgKFBpZHwxfDUpLChVSUR8MXw1KSwoUHJvY2VzcyBOYW1lfDMpLChQc3N8MnwyKSwoVXNzfDJ8MiksKFN3YXBQc3N8MnwyKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Qcm9jZXNzUmVjb3JkLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NSZWNvcmQuamF2YQppbmRleCA0YmZlMzAwLi5iNGFhNGNmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NSZWNvcmQuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1Byb2Nlc3NSZWNvcmQuamF2YQpAQCAtODIsNyArODIsOSBAQAogICAgIGxvbmcgbGFzdFN0YXRlVGltZTsgICAgICAgICAvLyBMYXN0IHRpbWUgc2V0UHJvY1N0YXRlIGNoYW5nZWQKICAgICBsb25nIGluaXRpYWxJZGxlUHNzOyAgICAgICAgLy8gSW5pdGlhbCBtZW1vcnkgcHNzIG9mIHByb2Nlc3MgZm9yIGlkbGUgbWFpbnRlbmFuY2UuCiAgICAgbG9uZyBsYXN0UHNzOyAgICAgICAgICAgICAgIC8vIExhc3QgY29tcHV0ZWQgbWVtb3J5IHBzcy4KKyAgICBsb25nIGxhc3RTd2FwUHNzOyAgICAgICAgICAgLy8gTGFzdCBjb21wdXRlZCBTd2FwUHNzLgogICAgIGxvbmcgbGFzdENhY2hlZFBzczsgICAgICAgICAvLyBMYXN0IGNvbXB1dGVkIHBzcyB3aGVuIGluIGNhY2hlZCBzdGF0ZS4KKyAgICBsb25nIGxhc3RDYWNoZWRTd2FwUHNzOyAgICAgLy8gTGFzdCBjb21wdXRlZCBTd2FwUHNzIHdoZW4gaW4gY2FjaGVkIHN0YXRlLgogICAgIGludCBtYXhBZGo7ICAgICAgICAgICAgICAgICAvLyBNYXhpbXVtIE9PTSBhZGp1c3RtZW50IGZvciB0aGlzIHByb2Nlc3MKICAgICBpbnQgY3VyUmF3QWRqOyAgICAgICAgICAgICAgLy8gQ3VycmVudCBPT00gdW5saW1pdGVkIGFkanVzdG1lbnQgZm9yIHRoaXMgcHJvY2VzcwogICAgIGludCBzZXRSYXdBZGo7ICAgICAgICAgICAgICAvLyBMYXN0IHNldCBPT00gdW5saW1pdGVkIGFkanVzdG1lbnQgZm9yIHRoaXMgcHJvY2VzcwpAQCAtMjU3LDcgKzI1OSw5IEBACiAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJhZGpTZXE9Iik7IHB3LnByaW50KGFkalNlcSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBscnVTZXE9Iik7IHB3LnByaW50KGxydVNlcSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBsYXN0UHNzPSIpOyBEZWJ1Z1V0aWxzLnByaW50U2l6ZVZhbHVlKHB3LCBsYXN0UHNzKjEwMjQpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIgbGFzdFN3YXBQc3M9Iik7IERlYnVnVXRpbHMucHJpbnRTaXplVmFsdWUocHcsIGxhc3RTd2FwUHNzKjEwMjQpOwogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgbGFzdENhY2hlZFBzcz0iKTsgRGVidWdVdGlscy5wcmludFNpemVWYWx1ZShwdywgbGFzdENhY2hlZFBzcyoxMDI0KTsKKyAgICAgICAgICAgICAgICBwdy5wcmludCgiIGxhc3RDYWNoZWRTd2FwUHNzPSIpOyBEZWJ1Z1V0aWxzLnByaW50U2l6ZVZhbHVlKHB3LCBsYXN0Q2FjaGVkU3dhcFBzcyoxMDI0KTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJjYWNoZWQ9Iik7IHB3LnByaW50KGNhY2hlZCk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBlbXB0eT0iKTsgcHcucHJpbnRsbihlbXB0eSk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1JlY2VudFRhc2tzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1JlY2VudFRhc2tzLmphdmEKaW5kZXggYzYzZWFhYy4uNTJkMjNjZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9SZWNlbnRUYXNrcy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVjZW50VGFza3MuamF2YQpAQCAtMTMwLDkgKzEzMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gYWkgPSB0bXBBdmFpbEFjdENhY2hlLmdldCh0YXNrLnJlYWxBY3Rpdml0eSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhaSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoaXMgZmlyc3QgY3V0LCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhY3Rpdml0aWVzIHRoYXQgYXJlIGZ1bGx5IHJ1bm5hYmxlIGJhc2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBzeXN0ZW0gc3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWkgPSBwbS5nZXRBY3Rpdml0eUluZm8odGFzay5yZWFsQWN0aXZpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUywgdXNlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIHVzZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaWxsIG5ldmVyIGhhcHBlbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1MCw4ICsxNTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcCA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwID0gcG0uZ2V0QXBwbGljYXRpb25JbmZvKHRhc2sucmVhbEFjdGl2aXR5LmdldFBhY2thZ2VOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTLCB1c2VyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywgdXNlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2lsbCBuZXZlciBoYXBwZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9SZXNpemVEb2NrZWRTdGFja1RpbWVvdXQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzOTU4OQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0LmphdmEKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmFtOworCitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKKworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlTdGFja1N1cGVydmlzb3IuUFJFU0VSVkVfV0lORE9XUzsKKworLyoqCisgKiBXaGVuIHJlc2l6aW5nIHRoZSBkb2NrZWQgc3RhY2ssIGEgY2FsbGVyIGNhbiB0ZW1wb3JhcmlseSBzdXBwbHkgdGFzayBib3VuZHMgdGhhdCBhcmUgZGlmZmVyZW50CisgKiBmcm9tIHRoZSBzdGFjayBib3VuZHMuIEluIG9yZGVyIHRvIHJldHVybiB0byBhIHNhbmUgc3RhdGUgaWYgdGhlIGNhbGxlciBjcmFzaGVzIG9yIGhhcyBhIGJ1ZywKKyAqIHRoaXMgY2xhc3MgbWFuYWdlcyB0aGlzIGN5Y2xlLgorICovCitjbGFzcyBSZXNpemVEb2NrZWRTdGFja1RpbWVvdXQgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBUSU1FT1VUX01TID0gMTAgKiAxMDAwOworICAgIHByaXZhdGUgZmluYWwgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBtU2VydmljZTsKKyAgICBwcml2YXRlIGZpbmFsIEFjdGl2aXR5U3RhY2tTdXBlcnZpc29yIG1TdXBlcnZpc29yOworICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtSGFuZGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUN1cnJlbnREb2NrZWRCb3VuZHMgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBtVGltZW91dFJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgc3luY2hyb25pemVkIChtU2VydmljZSkgeworICAgICAgICAgICAgICAgIG1TdXBlcnZpc29yLnJlc2l6ZURvY2tlZFN0YWNrTG9ja2VkKG1DdXJyZW50RG9ja2VkQm91bmRzLCBudWxsLCBudWxsLCBudWxsLCBudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgUFJFU0VSVkVfV0lORE9XUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworCisgICAgUmVzaXplRG9ja2VkU3RhY2tUaW1lb3V0KEFjdGl2aXR5TWFuYWdlclNlcnZpY2Ugc2VydmljZSwgQWN0aXZpdHlTdGFja1N1cGVydmlzb3Igc3VwZXJ2aXNvciwKKyAgICAgICAgICAgIEhhbmRsZXIgaGFuZGxlcikgeworICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CisgICAgICAgIG1TdXBlcnZpc29yID0gc3VwZXJ2aXNvcjsKKyAgICAgICAgbUhhbmRsZXIgPSBoYW5kbGVyOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5UmVzaXppbmcoUmVjdCBkb2NrZWRCb3VuZHMsIGJvb2xlYW4gaGFzVGVtcEJvdW5kcykgeworICAgICAgICBtSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobVRpbWVvdXRSdW5uYWJsZSk7CisgICAgICAgIGlmICghaGFzVGVtcEJvdW5kcykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1DdXJyZW50RG9ja2VkQm91bmRzLnNldChkb2NrZWRCb3VuZHMpOworICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChtVGltZW91dFJ1bm5hYmxlLCBUSU1FT1VUX01TKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVGFza1JlY29yZC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKaW5kZXggNWVlOWVlYS4uZjdlMzBjMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9UYXNrUmVjb3JkLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIuYW07CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRE9DS0VEX1NUQUNLX0lEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5GUkVFRk9STV9XT1JLU1BBQ0VfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZVTExTQ1JFRU5fV09SS1NQQUNFX1NUQUNLX0lEOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5IT01FX1NUQUNLX0lEOwpAQCAtMjMsNiArMjQsNyBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5QSU5ORURfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfRE9DVU1FTlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRkxBR19BQ1RJVklUWV9SRVRBSU5fSU5fUkVDRU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5GTEFHX1JFU0laRUFCTEU7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uTE9DS19UQVNLX0xBVU5DSF9NT0RFX0FMV0FZUzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MT0NLX1RBU0tfTEFVTkNIX01PREVfREVGQVVMVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5MT0NLX1RBU0tfTEFVTkNIX01PREVfSUZfV0hJVEVMSVNURUQ7CkBAIC00NDEsNyArNDQzLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF1dG9SZW1vdmVSZWNlbnRzID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgbVJlc2l6ZWFibGUgPSBpbmZvLnJlc2l6ZWFibGUgfHwgbVNlcnZpY2UubUZvcmNlUmVzaXphYmxlQWN0aXZpdGllczsKKyAgICAgICAgbVJlc2l6ZWFibGUgPSAoaW5mby5mbGFncyAmIEZMQUdfUkVTSVpFQUJMRSkgIT0gMCB8fCBtU2VydmljZS5tRm9yY2VSZXNpemFibGVBY3Rpdml0aWVzOwogICAgICAgICBtTG9ja1Rhc2tNb2RlID0gaW5mby5sb2NrVGFza0xhdW5jaE1vZGU7CiAgICAgICAgIG1Qcml2aWxlZ2VkID0gKGluZm8uYXBwbGljYXRpb25JbmZvLnByaXZhdGVGbGFncyAmIFBSSVZBVEVfRkxBR19QUklWSUxFR0VEKSAhPSAwOwogICAgICAgICBzZXRMb2NrVGFza0F1dGgoKTsKQEAgLTY5Nyw3ICs2OTksNyBAQAogICAgICAgICBpZiAobUFjdGl2aXRpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB0YXNrVHlwZSA9IHIubUFjdGl2aXR5VHlwZTsKICAgICAgICAgICAgIGlmICh0YXNrVHlwZSA9PSBIT01FX0FDVElWSVRZX1RZUEUgJiYgbVNlcnZpY2UubUZvcmNlUmVzaXphYmxlQWN0aXZpdGllcykgewotICAgICAgICAgICAgICAgIG1SZXNpemVhYmxlID0gci5pbmZvLnJlc2l6ZWFibGU7CisgICAgICAgICAgICAgICAgbVJlc2l6ZWFibGUgPSByLmlzUmVzaXplYWJsZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaXNQZXJzaXN0YWJsZSA9IHIuaXNQZXJzaXN0YWJsZSgpOwogICAgICAgICAgICAgbUNhbGxpbmdVaWQgPSByLmxhdW5jaGVkRnJvbVVpZDsKQEAgLTEyOTcsNiArMTI5OSw5IEBACiAgICAgICAgICAgICAgICAgICAgIChtT3ZlcnJpZGVDb25maWcuc2NyZWVuV2lkdGhEcCA8PSBtT3ZlcnJpZGVDb25maWcuc2NyZWVuSGVpZ2h0RHApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1BPUlRSQUlUCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX0xBTkRTQ0FQRTsKKyAgICAgICAgICAgIGZpbmFsIGludCBzbCA9IENvbmZpZ3VyYXRpb24ucmVzZXRTY3JlZW5MYXlvdXQoc2VydmljZUNvbmZpZy5zY3JlZW5MYXlvdXQpOworICAgICAgICAgICAgbU92ZXJyaWRlQ29uZmlnLnNjcmVlbkxheW91dCA9IENvbmZpZ3VyYXRpb24ucmVkdWNlU2NyZWVuTGF5b3V0KAorICAgICAgICAgICAgICAgICAgICBzbCwgbU92ZXJyaWRlQ29uZmlnLnNjcmVlbldpZHRoRHAsIG1PdmVycmlkZUNvbmZpZy5zY3JlZW5IZWlnaHREcCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobUZ1bGxzY3JlZW4gIT0gb2xkRnVsbHNjcmVlbikgewpAQCAtMTMwNiw2ICsxMzExLDIwIEBACiAgICAgICAgIHJldHVybiAhbU92ZXJyaWRlQ29uZmlnLmVxdWFscyhvbGRDb25maWcpID8gbU92ZXJyaWRlQ29uZmlnIDogbnVsbDsKICAgICB9CiAKKyAgICBSZWN0IHVwZGF0ZU92ZXJyaWRlQ29uZmlndXJhdGlvbkZyb21MYXVuY2hCb3VuZHMoKSB7CisgICAgICAgIGZpbmFsIFJlY3QgYm91bmRzID0gdmFsaWRhdGVCb3VuZHMoZ2V0TGF1bmNoQm91bmRzKCkpOworICAgICAgICB1cGRhdGVPdmVycmlkZUNvbmZpZ3VyYXRpb24oYm91bmRzKTsKKyAgICAgICAgcmV0dXJuIGJvdW5kczsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVjdCB2YWxpZGF0ZUJvdW5kcyhSZWN0IGJvdW5kcykgeworICAgICAgICBpZiAoYm91bmRzICE9IG51bGwgJiYgYm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgU2xvZy53dGYoVEFHLCAiUmVjZWl2ZWQgc3RyYW5nZSB0YXNrIGJvdW5kczogIiArIGJvdW5kcywgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBib3VuZHM7CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIHJlcG9ydE11bHRpV2luZG93TW9kZUNoYW5nZSgpIHsKICAgICAgICAgZm9yIChpbnQgaSA9IG1BY3Rpdml0aWVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gbUFjdGl2aXRpZXMuZ2V0KGkpOwpAQCAtMTMyMSw3ICsxMzQwLDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHJlcG9ydFBpY3R1cmVJblBpY3R1cmVNb2RlQ2hhbmdlKCkgeworICAgIHZvaWQgcmVwb3J0UGljdHVyZUluUGljdHVyZU1vZGVDaGFuZ2VJZk5lZWRlZChBY3Rpdml0eVN0YWNrIHByZXZTdGFjaykgeworICAgICAgICBpZiAocHJldlN0YWNrID09IG51bGwgfHwgcHJldlN0YWNrID09IHN0YWNrCisgICAgICAgICAgICAgICAgfHwgKHByZXZTdGFjay5tU3RhY2tJZCAhPSBQSU5ORURfU1RBQ0tfSUQgJiYgc3RhY2subVN0YWNrSWQgIT0gUElOTkVEX1NUQUNLX0lEKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgZm9yIChpbnQgaSA9IG1BY3Rpdml0aWVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eVJlY29yZCByID0gbUFjdGl2aXRpZXMuZ2V0KGkpOwogICAgICAgICAgICAgaWYgKHIuYXBwICE9IG51bGwgJiYgci5hcHAudGhyZWFkICE9IG51bGwpIHsKQEAgLTEzNzcsMjMgKzE0MDEsMzIgQEAKIAogICAgIC8qKiBSZXR1cm5zIHRoZSBib3VuZHMgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBsYXVuY2ggdGhpcyB0YXNrLiAqLwogICAgIFJlY3QgZ2V0TGF1bmNoQm91bmRzKCkgewotICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IHN0YWNrLm1TdGFja0lkOwotCiAgICAgICAgIC8vIElmIHdlJ3JlIG92ZXIgbG9ja3NjcmVlbiwgZm9yZ2V0IGFib3V0IHN0YWNrIGJvdW5kcyBhbmQgdXNlIGZ1bGxzY3JlZW4uCiAgICAgICAgIGlmIChtU2VydmljZS5tTG9ja1NjcmVlblNob3duID09IExPQ0tfU0NSRUVOX1NIT1dOKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdGFjayA9PSBudWxsCi0gICAgICAgICAgICAgICAgfHwgc3RhY2tJZCA9PSBIT01FX1NUQUNLX0lECi0gICAgICAgICAgICAgICAgfHwgc3RhY2tJZCA9PSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRCkgewotICAgICAgICAgICAgcmV0dXJuIChtUmVzaXplYWJsZSAmJiBzdGFjayAhPSBudWxsKSA/IHN0YWNrLm1Cb3VuZHMgOiBudWxsOworICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBmaW5hbCBpbnQgc3RhY2tJZCA9IHN0YWNrLm1TdGFja0lkOworICAgICAgICBpZiAoc3RhY2tJZCA9PSBIT01FX1NUQUNLX0lECisgICAgICAgICAgICAgICAgfHwgc3RhY2tJZCA9PSBGVUxMU0NSRUVOX1dPUktTUEFDRV9TVEFDS19JRAorICAgICAgICAgICAgICAgIHx8IChzdGFja0lkID09IERPQ0tFRF9TVEFDS19JRCAmJiAhbVJlc2l6ZWFibGUpKSB7CisgICAgICAgICAgICByZXR1cm4gbVJlc2l6ZWFibGUgPyBzdGFjay5tQm91bmRzIDogbnVsbDsKICAgICAgICAgfSBlbHNlIGlmICghU3RhY2tJZC5wZXJzaXN0VGFza0JvdW5kcyhzdGFja0lkKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YWNrLm1Cb3VuZHM7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1MYXN0Tm9uRnVsbHNjcmVlbkJvdW5kczsKICAgICB9CiAKKyAgICBib29sZWFuIGNhbk1hdGNoUm9vdEFmZmluaXR5KCkgeworICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyByb290IGFmZmluaXR5IG1hdGNoaW5nIG9uIHRoZSBwaW5uZWQgc3RhY2sgYXMgbm8gb3RoZXIgdGFzayBzaG91bGQKKyAgICAgICAgLy8gYmUgbGF1bmNoaW5nIGluIGl0IGJhc2VkIG9uIGFmZmluaXR5LgorICAgICAgICByZXR1cm4gcm9vdEFmZmluaXR5ICE9IG51bGwgJiYgKHN0YWNrID09IG51bGwgfHwgc3RhY2subVN0YWNrSWQgIT0gUElOTkVEX1NUQUNLX0lEKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXAoUHJpbnRXcml0ZXIgcHcsIFN0cmluZyBwcmVmaXgpIHsKICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoInVzZXJJZD0iKTsgcHcucHJpbnQodXNlcklkKTsKICAgICAgICAgICAgICAgICBwdy5wcmludCgiIGVmZmVjdGl2ZVVpZD0iKTsgVXNlckhhbmRsZS5mb3JtYXRVaWQocHcsIGVmZmVjdGl2ZVVpZCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1VzZXJDb250cm9sbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2FtL1VzZXJDb250cm9sbGVyLmphdmEKaW5kZXggNjJlNzhhNC4uNTY3NTdjYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hbS9Vc2VyQ29udHJvbGxlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYW0vVXNlckNvbnRyb2xsZXIuamF2YQpAQCAtMjIsNiArMjIsNyBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuVVNFUl9PUF9FUlJPUl9SRUxBVEVEX1VTRVJTX0NBTk5PVF9TVE9QOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuVVNFUl9PUF9JU19DVVJSRU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuVVNFUl9PUF9TVUNDRVNTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dC5LRVlHVUFSRF9TRVJWSUNFOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLmFtLkFjdGl2aXR5TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX01VOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuYW0uQWN0aXZpdHlNYW5hZ2VyRGVidWdDb25maWcuVEFHX0FNOwpAQCAtNDMsNiArNDQsNyBAQAogaW1wb3J0IGFuZHJvaWQuYXBwLkRpYWxvZzsKIGltcG9ydCBhbmRyb2lkLmFwcC5JU3RvcFVzZXJDYWxsYmFjazsKIGltcG9ydCBhbmRyb2lkLmFwcC5JVXNlclN3aXRjaE9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQuYXBwLktleWd1YXJkTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSUludGVudFJlY2VpdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CkBAIC03Myw2ICs3NSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLndpZGdldC5Mb2NrUGF0dGVyblV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5Vc2VyTWFuYWdlclNlcnZpY2U7CiAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwpAQCAtMTQwLDYgKzE0Myw4IEBACiAKICAgICBwcml2YXRlIHZvbGF0aWxlIFVzZXJNYW5hZ2VyU2VydmljZSBtVXNlck1hbmFnZXI7CiAKKyAgICBwcml2YXRlIGZpbmFsIExvY2tQYXR0ZXJuVXRpbHMgbUxvY2tQYXR0ZXJuVXRpbHM7CisKICAgICBVc2VyQ29udHJvbGxlcihBY3Rpdml0eU1hbmFnZXJTZXJ2aWNlIHNlcnZpY2UpIHsKICAgICAgICAgbVNlcnZpY2UgPSBzZXJ2aWNlOwogICAgICAgICBtSGFuZGxlciA9IG1TZXJ2aWNlLm1IYW5kbGVyOwpAQCAtMTQ3LDYgKzE1Miw3IEBACiAgICAgICAgIGZpbmFsIFVzZXJTdGF0ZSB1c3MgPSBuZXcgVXNlclN0YXRlKFVzZXJIYW5kbGUuU1lTVEVNKTsKICAgICAgICAgbVN0YXJ0ZWRVc2Vycy5wdXQoVXNlckhhbmRsZS5VU0VSX1NZU1RFTSwgdXNzKTsKICAgICAgICAgbVVzZXJMcnUuYWRkKFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICBtTG9ja1BhdHRlcm5VdGlscyA9IG5ldyBMb2NrUGF0dGVyblV0aWxzKG1TZXJ2aWNlLm1Db250ZXh0KTsKICAgICAgICAgdXBkYXRlU3RhcnRlZFVzZXJBcnJheUxvY2tlZCgpOwogICAgIH0KIApAQCAtMjE1LDcgKzIyMSw4IEBACiAKICAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0xPQ0tFRF9CT09UX0NPTVBMRVRFRCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSX0hBTkRMRSwgdXNlcklkKTsKLSAgICAgICAgICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfTk9fQUJPUlQpOworICAgICAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9OT19BQk9SVAorICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlbnQuRkxBR19SRUNFSVZFUl9JTkNMVURFX0JBQ0tHUk9VTkQpOwogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmJyb2FkY2FzdEludGVudExvY2tlZChudWxsLCBudWxsLCBpbnRlbnQsIG51bGwsIHJlc3VsdFRvLCAwLCBudWxsLCBudWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlJFQ0VJVkVfQk9PVF9DT01QTEVURUQgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFwcE9wc01hbmFnZXIuT1BfTk9ORSwgbnVsbCwgdHJ1ZSwgZmFsc2UsIE1ZX1BJRCwgU1lTVEVNX1VJRCwgdXNlcklkKTsKQEAgLTI0NSw2ICsyNTIsNyBAQAogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnNlbmRNZXNzYWdlKG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU1lTVEVNX1VTRVJfVU5MT0NLX01TRywgdXNlcklkLCAwKSk7CiAKICAgICAgICAgICAgICAgICBmaW5hbCBJbnRlbnQgdW5sb2NrZWRJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fVVNFUl9VTkxPQ0tFRCk7CisgICAgICAgICAgICAgICAgdW5sb2NrZWRJbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLCB1c2VySWQpOwogICAgICAgICAgICAgICAgIHVubG9ja2VkSW50ZW50LmFkZEZsYWdzKAogICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZIHwgSW50ZW50LkZMQUdfUkVDRUlWRVJfRk9SRUdST1VORCk7CiAgICAgICAgICAgICAgICAgbVNlcnZpY2UuYnJvYWRjYXN0SW50ZW50TG9ja2VkKG51bGwsIG51bGwsIHVubG9ja2VkSW50ZW50LCBudWxsLCBudWxsLCAwLCBudWxsLApAQCAtMzAyLDcgKzMxMCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyByZWxhdGVkVXNlcklkKTsKICAgICAgICAgICAgICAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIHN0b3AgdGhlIHJlcXVlc3RlZCB1c2VyIGlmIGl0J3MgYSBmb3JjZSBzdG9wLgogICAgICAgICAgICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLmkoVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGb3JjZSBzdG9wIHVzZXIgIiArIHVzZXJJZCArICIuIFJlbGF0ZWQgdXNlcnMgd2lsbCBub3QgYmUgc3RvcHBlZCIpOwogICAgICAgICAgICAgICAgICAgICBzdG9wU2luZ2xlVXNlckxvY2tlZCh1c2VySWQsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVTRVJfT1BfU1VDQ0VTUzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVTRVJfT1BfRVJST1JfUkVMQVRFRF9VU0VSU19DQU5OT1RfU1RPUDsKICAgICAgICAgICAgIH0KQEAgLTQzMCw2ICs0NDEsMTAgQEAKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICBtU2VydmljZS5tU3RhY2tTdXBlcnZpc29yLnJlbW92ZVVzZXJMb2NrZWQodXNlcklkKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdXNlciBpZiBpdCBpcyBlcGhlbWVyYWwuCisgICAgICAgICAgICBpZiAoZ2V0VXNlckluZm8odXNlcklkKS5pc0VwaGVtZXJhbCgpKSB7CisgICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLnJlbW92ZVVzZXIodXNlcklkKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtNDc2LDkgKzQ5MSw5IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogU3RvcHMgdGhlIGd1ZXN0IHVzZXIgaWYgaXQgaGFzIGdvbmUgdG8gdGhlIGJhY2tncm91bmQuCisgICAgICogU3RvcHMgdGhlIGd1ZXN0IG9yIGVwaGVtZXJhbCB1c2VyIGlmIGl0IGhhcyBnb25lIHRvIHRoZSBiYWNrZ3JvdW5kLgogICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzdG9wR3Vlc3RVc2VySWZCYWNrZ3JvdW5kKCkgeworICAgIHByaXZhdGUgdm9pZCBzdG9wR3Vlc3RPckVwaGVtZXJhbFVzZXJJZkJhY2tncm91bmQoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVNlcnZpY2UpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBudW0gPSBtVXNlckxydS5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CkBAIC00OTAsNyArNTA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFVzZXJJbmZvIHVzZXJJbmZvID0gZ2V0VXNlckluZm8ob2xkVXNlcklkKTsKLSAgICAgICAgICAgICAgICBpZiAodXNlckluZm8uaXNHdWVzdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHVzZXJJbmZvLmlzR3Vlc3QoKSB8fCB1c2VySW5mby5pc0VwaGVtZXJhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB1c2VyIHRvIGJlIHN0b3BwZWQuCiAgICAgICAgICAgICAgICAgICAgIHN0b3BVc2Vyc0xvY2tlZChvbGRVc2VySWQsIHRydWUsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkxNiw3ICs5MzEsNyBAQAogICAgICAgICAgICAgbUhhbmRsZXIuc2VuZE1lc3NhZ2UobUhhbmRsZXIub2J0YWluTWVzc2FnZShSRVBPUlRfVVNFUl9TV0lUQ0hfQ09NUExFVEVfTVNHLAogICAgICAgICAgICAgICAgICAgICBuZXdVc2VySWQsIDApKTsKICAgICAgICAgfQotICAgICAgICBzdG9wR3Vlc3RVc2VySWZCYWNrZ3JvdW5kKCk7CisgICAgICAgIHN0b3BHdWVzdE9yRXBoZW1lcmFsVXNlcklmQmFja2dyb3VuZCgpOwogICAgICAgICBzdG9wQmFja2dyb3VuZFVzZXJzSWZFbmZvcmNlZChvbGRVc2VySWQpOwogICAgIH0KIApAQCAtOTI1LDcgKzk0MCw3IEBACiAgICAgICAgIGlmIChob21lSW5Gcm9udCkgewogICAgICAgICAgICAgbVNlcnZpY2Uuc3RhcnRIb21lQWN0aXZpdHlMb2NrZWQobmV3VXNlcklkLCAibW92ZVVzZXJUb0ZvcmVncm91bmQiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLm1TdGFja1N1cGVydmlzb3IucmVzdW1lVG9wQWN0aXZpdGllc0xvY2tlZCgpOworICAgICAgICAgICAgbVNlcnZpY2UubVN0YWNrU3VwZXJ2aXNvci5yZXN1bWVGb2N1c2VkU3RhY2tUb3BBY3Rpdml0eUxvY2tlZCgpOwogICAgICAgICB9CiAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZUFtU3dpdGNoVXNlcihuZXdVc2VySWQpOwogICAgICAgICBnZXRVc2VyTWFuYWdlcigpLm9uVXNlckZvcmVncm91bmQobmV3VXNlcklkKTsKQEAgLTEyMjAsNyArMTIzNSw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGlzQ3VycmVudFVzZXJMb2NrZWQoaW50IHVzZXJJZCkgewotICAgICAgICByZXR1cm4gbUN1cnJlbnRVc2VySWQgPT0gdXNlcklkIHx8IG1UYXJnZXRVc2VySWQgPT0gdXNlcklkOworICAgICAgICByZXR1cm4gdXNlcklkID09IGdldEN1cnJlbnRPclRhcmdldFVzZXJJZExvY2tlZCgpOwogICAgIH0KIAogICAgIGludCBzZXRUYXJnZXRVc2VySWRMb2NrZWQoaW50IHRhcmdldFVzZXJJZCkgewpAQCAtMTI3Nyw2ICsxMjkyLDE5IEBACiAgICAgICAgIHJldHVybiBtQ3VycmVudFByb2ZpbGVJZHM7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiB1c2VyIHJlcXVpcmVzIGNyZWRlbnRpYWwgZW50cnkgYXQgdGhpcyB0aW1lLiBUaGlzIGlzIHVzZWQgdG8KKyAgICAgKiBpbnRlcmNlcHQgYWN0aXZpdHkgbGF1bmNoZXMgZm9yIHdvcmsgYXBwcyB3aGVuIHRoZSBXb3JrIENoYWxsZW5nZSBpcyBwcmVzZW50LgorICAgICAqLworICAgIGJvb2xlYW4gc2hvdWxkQ29uZmlybUNyZWRlbnRpYWxzKGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFtTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQodXNlcklkKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpbmFsIEtleWd1YXJkTWFuYWdlciBrbSA9IChLZXlndWFyZE1hbmFnZXIpIG1TZXJ2aWNlLm1Db250ZXh0CisgICAgICAgICAgICAgICAgLmdldFN5c3RlbVNlcnZpY2UoS0VZR1VBUkRfU0VSVklDRSk7CisgICAgICAgIHJldHVybiBrbS5pc0RldmljZUxvY2tlZCh1c2VySWQpOworICAgIH0KKwogICAgIHZvaWQgZHVtcChQcmludFdyaXRlciBwdywgYm9vbGVhbiBkdW1wQWxsKSB7CiAgICAgICAgIHB3LnByaW50bG4oIiAgbVN0YXJ0ZWRVc2VyczoiKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU3RhcnRlZFVzZXJzLnNpemUoKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2F1ZGlvL0F1ZGlvU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hdWRpby9BdWRpb1NlcnZpY2UuamF2YQppbmRleCA0ZjJmNDg2Li45MzMxZGQ4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2F1ZGlvL0F1ZGlvU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXVkaW8vQXVkaW9TZXJ2aWNlLmphdmEKQEAgLTU4LDEwICs1OCwxMiBAQAogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1BvcnQ7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JlY29yZENvbmZpZ3VyYXRpb247CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JvdXRlc0luZm87CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5JQXVkaW9Gb2N1c0Rpc3BhdGNoZXI7CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5JQXVkaW9Sb3V0ZXNPYnNlcnZlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLklBdWRpb1NlcnZpY2U7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5JUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLklSaW5ndG9uZVBsYXllcjsKIGltcG9ydCBhbmRyb2lkLm1lZGlhLklWb2x1bWVDb250cm9sbGVyOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFQbGF5ZXI7CkBAIC0xOTcsNyArMTk5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NFVF9ERVZJQ0VfVk9MVU1FID0gMDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BFUlNJU1RfVk9MVU1FID0gMTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1BFUlNJU1RfUklOR0VSX01PREUgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfTUVESUFfU0VSVkVSX0RJRUQgPSA0OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfQVVESU9fU0VSVkVSX0RJRUQgPSA0OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUExBWV9TT1VORF9FRkZFQ1QgPSA1OwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfQlRBMkRQX0RPQ0tfVElNRU9VVCA9IDY7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19MT0FEX1NPVU5EX0VGRkVDVFMgPSA3OwpAQCAtMjIwLDYgKzIyMiw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19VTk1VVEVfU1RSRUFNID0gMjQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19EWU5fUE9MSUNZX01JWF9TVEFURV9VUERBVEUgPSAyNTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0lORElDQVRFX1NZU1RFTV9SRUFEWSA9IDI2OworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNU0dfUEVSU0lTVF9NQVNURVJfTU9OTyA9IDI3OwogICAgIC8vIHN0YXJ0IG9mIG1lc3NhZ2VzIGhhbmRsZWQgdW5kZXIgd2FrZWxvY2sKICAgICAvLyAgIHRoZXNlIG1lc3NhZ2VzIGNhbiBvbmx5IGJlIHF1ZXVlZCwgaS5lLiBzZW50IHdpdGggcXVldWVNc2dVbmRlcldha2VMb2NrKCksCiAgICAgLy8gICBhbmQgbm90IHdpdGggc2VuZE1zZyguLi4sIC4uLiwgU0VORE1TR19RVUVVRSwgLi4uKQpAQCAtMzU4LDcgKzM2MSw3IEBACiAgICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoaW50IGVycm9yKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICBjYXNlIEF1ZGlvU3lzdGVtLkFVRElPX1NUQVRVU19TRVJWRVJfRElFRDoKLSAgICAgICAgICAgICAgICBzZW5kTXNnKG1BdWRpb0hhbmRsZXIsIE1TR19NRURJQV9TRVJWRVJfRElFRCwKKyAgICAgICAgICAgICAgICBzZW5kTXNnKG1BdWRpb0hhbmRsZXIsIE1TR19BVURJT19TRVJWRVJfRElFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIFNFTkRNU0dfTk9PUCwgMCwgMCwgbnVsbCwgMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNzA1LDYgKzcwOCw4IEBACiAgICAgICAgIExvY2FsU2VydmljZXMuYWRkU2VydmljZShBdWRpb01hbmFnZXJJbnRlcm5hbC5jbGFzcywgbmV3IEF1ZGlvU2VydmljZUludGVybmFsKCkpOwogCiAgICAgICAgIG1Vc2VyTWFuYWdlckludGVybmFsLmFkZFVzZXJSZXN0cmljdGlvbnNMaXN0ZW5lcihtVXNlclJlc3RyaWN0aW9uc0xpc3RlbmVyKTsKKworICAgICAgICBtUmVjb3JkTW9uaXRvci5pbml0TW9uaXRvcigpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN5c3RlbVJlYWR5KCkgewpAQCAtNzcyLDE1ICs3NzcsMTUgQEAKICAgICAgICAgICAgICAgICBJTkRJQ0FURV9TWVNURU1fUkVBRFlfUkVUUllfREVMQVlfTVMpOwogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIG9uTWVkaWFTZXJ2ZXJEaWVkKCkgeworICAgIHB1YmxpYyB2b2lkIG9uQXVkaW9TZXJ2ZXJEaWVkKCkgewogICAgICAgICBpZiAoIW1TeXN0ZW1SZWFkeSB8fAogICAgICAgICAgICAgICAgIChBdWRpb1N5c3RlbS5jaGVja0F1ZGlvRmxpbmdlcigpICE9IEF1ZGlvU3lzdGVtLkFVRElPX1NUQVRVU19PSykpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIk1lZGlhIHNlcnZlciBkaWVkLiIpOwotICAgICAgICAgICAgc2VuZE1zZyhtQXVkaW9IYW5kbGVyLCBNU0dfTUVESUFfU0VSVkVSX0RJRUQsIFNFTkRNU0dfTk9PUCwgMCwgMCwKKyAgICAgICAgICAgIExvZy5lKFRBRywgIkF1ZGlvc2VydmVyIGRpZWQuIik7CisgICAgICAgICAgICBzZW5kTXNnKG1BdWRpb0hhbmRsZXIsIE1TR19BVURJT19TRVJWRVJfRElFRCwgU0VORE1TR19OT09QLCAwLCAwLAogICAgICAgICAgICAgICAgICAgICBudWxsLCA1MDApOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIExvZy5lKFRBRywgIk1lZGlhIHNlcnZlciBzdGFydGVkLiIpOworICAgICAgICBMb2cuZShUQUcsICJBdWRpb3NlcnZlciBzdGFydGVkLiIpOwogCiAgICAgICAgIC8vIGluZGljYXRlIHRvIGF1ZGlvIEhBTCB0aGF0IHdlIHN0YXJ0IHRoZSByZWNvbmZpZ3VyYXRpb24gcGhhc2UgYWZ0ZXIgYSBtZWRpYQogICAgICAgICAvLyBzZXJ2ZXIgY3Jhc2gKQEAgLTgyMCw2ICs4MjUsMTIgQEAKICAgICAgICAgICAgIHN0cmVhbVN0YXRlLmFwcGx5QWxsVm9sdW1lcygpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gUmVzdG9yZSBtb25vIG1vZGUKKyAgICAgICAgZmluYWwgYm9vbGVhbiBtYXN0ZXJNb25vID0gU3lzdGVtLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgbUNvbnRlbnRSZXNvbHZlciwgU3lzdGVtLk1BU1RFUl9NT05PLAorICAgICAgICAgICAgICAgIDAgLyogZGVmYXVsdCAqLywgVXNlckhhbmRsZS5VU0VSX0NVUlJFTlQpID09IDE7CisgICAgICAgIEF1ZGlvU3lzdGVtLnNldE1hc3Rlck1vbm8obWFzdGVyTW9ubyk7CisKICAgICAgICAgLy8gUmVzdG9yZSByaW5nZXIgbW9kZQogICAgICAgICBzZXRSaW5nZXJNb2RlSW50KGdldFJpbmdlck1vZGVJbnRlcm5hbCgpLCBmYWxzZSk7CiAKQEAgLTEwNzksNiArMTA5MCwxNCBAQAogICAgICAgICB9CiAgICAgICAgIEF1ZGlvU3lzdGVtLm11dGVNaWNyb3Bob25lKG1pY3JvcGhvbmVNdXRlKTsKIAorICAgICAgICBmaW5hbCBib29sZWFuIG1hc3Rlck1vbm8gPSBTeXN0ZW0uZ2V0SW50Rm9yVXNlcigKKyAgICAgICAgICAgICAgICBjciwgU3lzdGVtLk1BU1RFUl9NT05PLCAwIC8qIGRlZmF1bHQgKi8sIFVzZXJIYW5kbGUuVVNFUl9DVVJSRU5UKSA9PSAxOworICAgICAgICBpZiAoREVCVUdfVk9MKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsIFN0cmluZy5mb3JtYXQoIk1hc3RlciBtb25vICViLCB1c2VyPSVkIiwgbWFzdGVyTW9ubywgY3VycmVudFVzZXIpKTsKKyAgICAgICAgfQorICAgICAgICBBdWRpb1N5c3RlbS5zZXRNYXN0ZXJNb25vKG1hc3Rlck1vbm8pOworICAgICAgICBicm9hZGNhc3RNYXN0ZXJNb25vU3RhdHVzKG1hc3Rlck1vbm8pOworCiAgICAgICAgIC8vIEVhY2ggc3RyZWFtIHdpbGwgcmVhZCBpdHMgb3duIHBlcnNpc3RlZCBzZXR0aW5ncwogCiAgICAgICAgIC8vIEJyb2FkY2FzdCB0aGUgc3RpY2t5IGludGVudHMKQEAgLTE4MzUsNiArMTg1NCw1MiBAQAogICAgICAgICAgICAgICAgIHVzZXJJZCk7CiAgICAgfQogCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIGJvb2xlYW4gaXNNYXN0ZXJNb25vKCkgeworICAgICAgICByZXR1cm4gQXVkaW9TeXN0ZW0uZ2V0TWFzdGVyTW9ubygpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyB2b2lkIHNldE1hc3Rlck1vbm8oYm9vbGVhbiBtb25vLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UsIGludCB1c2VySWQpIHsKKyAgICAgICAgaW50IGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICAvLyBJZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGJ5IHRoZSBzeXN0ZW0gY2hlY2sgZm9yIHVzZXIgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZQorICAgICAgICAvLyBzbyB3ZSBoYW5kbGUgdXNlciByZXN0cmljdGlvbnMgY29ycmVjdGx5LgorICAgICAgICBpZiAoY2FsbGluZ1VpZCA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRCkgeworICAgICAgICAgICAgY2FsbGluZ1VpZCA9IFVzZXJIYW5kbGUuZ2V0VWlkKHVzZXJJZCwgVXNlckhhbmRsZS5nZXRBcHBJZChjYWxsaW5nVWlkKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpICYmCisgICAgICAgICAgICAgICAgbUNvbnRleHQuY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5JTlRFUkFDVF9BQ1JPU1NfVVNFUlNfRlVMTCkKKyAgICAgICAgICAgICAgICAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoREVCVUdfVk9MKSB7CisgICAgICAgICAgICBMb2cuZChUQUcsIFN0cmluZy5mb3JtYXQoIk1hc3RlciBtb25vICViLCB1c2VyPSVkIiwgbW9ubywgdXNlcklkKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2V0Q3VycmVudFVzZXJJZCgpID09IHVzZXJJZCkgeworICAgICAgICAgICAgaWYgKG1vbm8gIT0gQXVkaW9TeXN0ZW0uZ2V0TWFzdGVyTW9ubygpKSB7CisgICAgICAgICAgICAgICAgQXVkaW9TeXN0ZW0uc2V0TWFzdGVyTW9ubyhtb25vKTsKKyAgICAgICAgICAgICAgICAvLyBQb3N0IGEgcGVyc2lzdCBtYXN0ZXIgbW9ubyBtc2cKKyAgICAgICAgICAgICAgICBzZW5kTXNnKG1BdWRpb0hhbmRsZXIsIE1TR19QRVJTSVNUX01BU1RFUl9NT05PLCBTRU5ETVNHX1JFUExBQ0UsIG1vbm8gPyAxCisgICAgICAgICAgICAgICAgICAgICAgICA6IDAgLyogdmFsdWUgKi8sIHVzZXJJZCwgbnVsbCAvKiBvYmogKi8sIDAgLyogZGVsYXkgKi8pOworICAgICAgICAgICAgICAgIC8vIG5vdGlmeSBhcHBzIGFuZCBzZXR0aW5ncworICAgICAgICAgICAgICAgIGJyb2FkY2FzdE1hc3Rlck1vbm9TdGF0dXMobW9ubyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBQb3N0IGEgcGVyc2lzdCBtYXN0ZXIgbW9ubyBtc2cKKyAgICAgICAgICAgIHNlbmRNc2cobUF1ZGlvSGFuZGxlciwgTVNHX1BFUlNJU1RfTUFTVEVSX01PTk8sIFNFTkRNU0dfUkVQTEFDRSwgbW9ubyA/IDEKKyAgICAgICAgICAgICAgICAgICAgOiAwIC8qIHZhbHVlICovLCB1c2VySWQsIG51bGwgLyogb2JqICovLCAwIC8qIGRlbGF5ICovKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBicm9hZGNhc3RNYXN0ZXJNb25vU3RhdHVzKGJvb2xlYW4gbW9ubykgeworICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChBdWRpb01hbmFnZXIuTUFTVEVSX01PTk9fQ0hBTkdFRF9BQ1RJT04pOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoQXVkaW9NYW5hZ2VyLkVYVFJBX01BU1RFUl9NT05PLCBtb25vKTsKKyAgICAgICAgc2VuZEJyb2FkY2FzdFRvQWxsKGludGVudCk7CisgICAgfQorCiAgICAgLyoqIEBzZWUgQXVkaW9NYW5hZ2VyI2dldFN0cmVhbVZvbHVtZShpbnQpICovCiAgICAgcHVibGljIGludCBnZXRTdHJlYW1Wb2x1bWUoaW50IHN0cmVhbVR5cGUpIHsKICAgICAgICAgZW5zdXJlVmFsaWRTdHJlYW1UeXBlKHN0cmVhbVR5cGUpOwpAQCAtNDQwNiw4ICs0NDcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdFJpbmdlck1vZGUoZ2V0UmluZ2VyTW9kZUludGVybmFsKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGNhc2UgTVNHX01FRElBX1NFUlZFUl9ESUVEOgotICAgICAgICAgICAgICAgICAgICBvbk1lZGlhU2VydmVyRGllZCgpOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0FVRElPX1NFUlZFUl9ESUVEOgorICAgICAgICAgICAgICAgICAgICBvbkF1ZGlvU2VydmVyRGllZCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1VOTE9BRF9TT1VORF9FRkZFQ1RTOgpAQCAtNDUzNCw2ICs0NTk5LDEzIEBACiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfRFlOX1BPTElDWV9NSVhfU1RBVEVfVVBEQVRFOgogICAgICAgICAgICAgICAgICAgICBvbkR5blBvbGljeU1peFN0YXRlVXBkYXRlKChTdHJpbmcpIG1zZy5vYmosIG1zZy5hcmcxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1TR19QRVJTSVNUX01BU1RFUl9NT05POgorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TeXN0ZW0ucHV0SW50Rm9yVXNlcihtQ29udGVudFJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlN5c3RlbS5NQVNURVJfTU9OTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuYXJnMSAvKiB2YWx1ZSAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuYXJnMiAvKiB1c2VySGFuZGxlICovKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MDk3LDcgKzYxNjksNyBAQAogICAgIH0KIAogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PQotICAgIC8vIEF1ZGlvIHBvbGljeSBjYWxsYmFjayBmcm9tIEF1ZGlvU3lzdGVtCisgICAgLy8gQXVkaW8gcG9saWN5IGNhbGxiYWNrcyBmcm9tIEF1ZGlvU3lzdGVtIGZvciBkeW5hbWljIHBvbGljaWVzCiAgICAgLy89PT09PT09PT09PT09PT09PT09PT09CiAgICAgcHJpdmF0ZSBmaW5hbCBBdWRpb1N5c3RlbS5EeW5hbWljUG9saWN5Q2FsbGJhY2sgbUR5blBvbGljeUNhbGxiYWNrID0KICAgICAgICAgICAgIG5ldyBBdWRpb1N5c3RlbS5EeW5hbWljUG9saWN5Q2FsbGJhY2soKSB7CkBAIC02MTI2LDcgKzYxOTgsMjMgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CiAKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT0KKyAgICAvLyBBdWRpbyBwb2xpY3kgY2FsbGJhY2tzIGZyb20gQXVkaW9TeXN0ZW0gZm9yIHJlY29yZGluZyBjb25maWd1cmF0aW9uIHVwZGF0ZXMKKyAgICAvLz09PT09PT09PT09PT09PT09PT09PT0KKyAgICBwcml2YXRlIGZpbmFsIFJlY29yZGluZ0FjdGl2aXR5TW9uaXRvciBtUmVjb3JkTW9uaXRvciA9IG5ldyBSZWNvcmRpbmdBY3Rpdml0eU1vbml0b3IoKTsKKworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyUmVjb3JkaW5nQ2FsbGJhY2soSVJlY29yZGluZ0NvbmZpZ0Rpc3BhdGNoZXIgcmNkYikgeworICAgICAgICBtUmVjb3JkTW9uaXRvci5yZWdpc3RlclJlY29yZGluZ0NhbGxiYWNrKHJjZGIpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayhJUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlciByY2RiKSB7CisgICAgICAgIG1SZWNvcmRNb25pdG9yLnVucmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayhyY2RiKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uW10gZ2V0QWN0aXZlUmVjb3JkQ29uZmlndXJhdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBtUmVjb3JkTW9uaXRvci5nZXRBY3RpdmVSZWNvcmRDb25maWd1cmF0aW9ucygpOwogICAgIH0KIAogICAgIC8vPT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9hdWRpby9SZWNvcmRpbmdBY3Rpdml0eU1vbml0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXVkaW8vUmVjb3JkaW5nQWN0aXZpdHlNb25pdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwNmYzZgotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvYXVkaW8vUmVjb3JkaW5nQWN0aXZpdHlNb25pdG9yLmphdmEKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5hdWRpbzsKKworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9TeXN0ZW07CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5JUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLklCaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworCisvKioKKyAqIENsYXNzIHRvIHJlY2VpdmUgYW5kIGRpc3BhdGNoIHVwZGF0ZXMgZnJvbSBBdWRpb1N5c3RlbSBhYm91dCByZWNvcmRpbmcgY29uZmlndXJhdGlvbnMuCisgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBSZWNvcmRpbmdBY3Rpdml0eU1vbml0b3IgaW1wbGVtZW50cyBBdWRpb1N5c3RlbS5BdWRpb1JlY29yZGluZ0NhbGxiYWNrIHsKKworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJBdWRpb1NlcnZpY2UuUmVjb3JkaW5nQWN0aXZpdHlNb25pdG9yIjsKKworICAgIHByaXZhdGUgQXJyYXlMaXN0PFJlY01vbml0b3JDbGllbnQ+IG1DbGllbnRzID0gbmV3IEFycmF5TGlzdDxSZWNNb25pdG9yQ2xpZW50PigpOworCisgICAgcHJpdmF0ZSBIYXNoTWFwPEludGVnZXIsIEF1ZGlvUmVjb3JkQ29uZmlndXJhdGlvbj4gbVJlY29yZENvbmZpZ3MgPQorICAgICAgICAgICAgbmV3IEhhc2hNYXA8SW50ZWdlciwgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uPigpOworCisgICAgUmVjb3JkaW5nQWN0aXZpdHlNb25pdG9yKCkgeworICAgICAgICBSZWNNb25pdG9yQ2xpZW50LnNNb25pdG9yID0gdGhpczsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhbmRyb2lkLm1lZGlhLkF1ZGlvU3lzdGVtLkF1ZGlvUmVjb3JkaW5nQ2FsbGJhY2sKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBvblJlY29yZGluZ0NvbmZpZ3VyYXRpb25DaGFuZ2VkKGludCBldmVudCwgaW50IHNlc3Npb24sIGludCBzb3VyY2UpIHsKKyAgICAgICAgaWYgKHVwZGF0ZVNuYXBzaG90KGV2ZW50LCBzZXNzaW9uLCBzb3VyY2UpKSB7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxSZWNNb25pdG9yQ2xpZW50PiBjbGllbnRJdGVyYXRvciA9IG1DbGllbnRzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQobUNsaWVudHMpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoY2xpZW50SXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJdGVyYXRvci5uZXh0KCkubURpc3BhdGNoZXJDYi5kaXNwYXRjaFJlY29yZGluZ0NvbmZpZ0NoYW5nZSgpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiQ291bGQgbm90IGNhbGwgZGlzcGF0Y2hSZWNvcmRpbmdDb25maWdDaGFuZ2UoKSBvbiBjbGllbnQiLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgaW5pdE1vbml0b3IoKSB7CisgICAgICAgIEF1ZGlvU3lzdGVtLnNldFJlY29yZGluZ0NhbGxiYWNrKHRoaXMpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJSZWNvcmRpbmdDYWxsYmFjayhJUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlciByY2RiKSB7CisgICAgICAgIGlmIChyY2RiID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQobUNsaWVudHMpIHsKKyAgICAgICAgICAgIGZpbmFsIFJlY01vbml0b3JDbGllbnQgcm1jID0gbmV3IFJlY01vbml0b3JDbGllbnQocmNkYik7CisgICAgICAgICAgICBpZiAocm1jLmluaXQoKSkgeworICAgICAgICAgICAgICAgIG1DbGllbnRzLmFkZChybWMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1bnJlZ2lzdGVyUmVjb3JkaW5nQ2FsbGJhY2soSVJlY29yZGluZ0NvbmZpZ0Rpc3BhdGNoZXIgcmNkYikgeworICAgICAgICBpZiAocmNkYiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkKG1DbGllbnRzKSB7CisgICAgICAgICAgICBmaW5hbCBJdGVyYXRvcjxSZWNNb25pdG9yQ2xpZW50PiBjbGllbnRJdGVyYXRvciA9IG1DbGllbnRzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoY2xpZW50SXRlcmF0b3IuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgUmVjTW9uaXRvckNsaWVudCBybWMgPSBjbGllbnRJdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKHJjZGIuZXF1YWxzKHJtYy5tRGlzcGF0Y2hlckNiKSkgeworICAgICAgICAgICAgICAgICAgICBybWMucmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBjbGllbnRJdGVyYXRvci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uW10gZ2V0QWN0aXZlUmVjb3JkQ29uZmlndXJhdGlvbnMoKSB7CisgICAgICAgIHN5bmNocm9uaXplZChtUmVjb3JkQ29uZmlncykgeworICAgICAgICAgICAgcmV0dXJuIG1SZWNvcmRDb25maWdzLnZhbHVlcygpLnRvQXJyYXkobmV3IEF1ZGlvUmVjb3JkQ29uZmlndXJhdGlvblswXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgdGhlIGludGVybmFsICJ2aWV3IiBvZiB0aGUgYWN0aXZlIHJlY29yZGluZyBzZXNzaW9ucworICAgICAqIEBwYXJhbSBldmVudAorICAgICAqIEBwYXJhbSBzZXNzaW9uCisgICAgICogQHBhcmFtIHNvdXJjZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgbGlzdCBvZiBhY3RpdmUgcmVjb3JkaW5nIHNlc3Npb25zIGhhcyBiZWVuIG1vZGlmaWVkLCBmYWxzZSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHJpdmF0ZSBib29sZWFuIHVwZGF0ZVNuYXBzaG90KGludCBldmVudCwgaW50IHNlc3Npb24sIGludCBzb3VyY2UpIHsKKyAgICAgICAgc3luY2hyb25pemVkKG1SZWNvcmRDb25maWdzKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5SRUNPUkRfQ09ORklHX0VWRU5UX1NUT1A6CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZhaWx1cmUgaWYgYW4gdW5rbm93biByZWNvcmRpbmcgc2Vzc2lvbiBzdG9wcGVkCisgICAgICAgICAgICAgICAgcmV0dXJuIChtUmVjb3JkQ29uZmlncy5yZW1vdmUobmV3IEludGVnZXIoc2Vzc2lvbikpICE9IG51bGwpOworICAgICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuUkVDT1JEX0NPTkZJR19FVkVOVF9TVEFSVDoKKyAgICAgICAgICAgICAgICBpZiAobVJlY29yZENvbmZpZ3MuY29udGFpbnNLZXkobmV3IEludGVnZXIoc2Vzc2lvbikpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9mIHNlc3Npb24gdGhhdCdzIGFscmVhZHkgdHJhY2tlZCwgbm90IHdvcnRoIGFuIHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICAvLyBUTyBETyBpbiB0aGUgZnV0dXJlIHdoZW4gdHJhY2tpbmcgcmVjb3JkIGZvcm1hdDogdGhlcmUgbWlnaHQgYmUgYSByZWNvcmQKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgZm9ybWF0IGNoYW5nZSBkdXJpbmcgYSByZWNvcmRpbmcgdGhhdCByZXF1aXJlcyByZXBvcnRpbmcKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1SZWNvcmRDb25maWdzLnB1dChuZXcgSW50ZWdlcihzZXNzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXVkaW9SZWNvcmRDb25maWd1cmF0aW9uKHNlc3Npb24sIHNvdXJjZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIExvZy5lKFRBRywgU3RyaW5nLmZvcm1hdCgiVW5rbm93biBldmVudCAlZCBmb3Igc2Vzc2lvbiAlZCwgc291cmNlICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LCBzZXNzaW9uLCBzb3VyY2UpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbm5lciBjbGFzcyB0byB0cmFjayBjbGllbnRzIHRoYXQgd2FudCB0byBiZSBub3RpZmllZCBvZiByZWNvcmRpbmcgdXBkYXRlcworICAgICAqLworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIFJlY01vbml0b3JDbGllbnQgaW1wbGVtZW50cyBJQmluZGVyLkRlYXRoUmVjaXBpZW50IHsKKworICAgICAgICAvLyBjYW4gYWZmb3JkIHRvIGJlIHN0YXRpYyBiZWNhdXNlIG9ubHkgb25lIFJlY29yZGluZ0FjdGl2aXR5TW9uaXRvciBldmVyIGluc3RhbnRpYXRlZAorICAgICAgICBzdGF0aWMgUmVjb3JkaW5nQWN0aXZpdHlNb25pdG9yIHNNb25pdG9yOworCisgICAgICAgIGZpbmFsIElSZWNvcmRpbmdDb25maWdEaXNwYXRjaGVyIG1EaXNwYXRjaGVyQ2I7CisKKyAgICAgICAgUmVjTW9uaXRvckNsaWVudChJUmVjb3JkaW5nQ29uZmlnRGlzcGF0Y2hlciByY2RiKSB7CisgICAgICAgICAgICBtRGlzcGF0Y2hlckNiID0gcmNkYjsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGJpbmRlckRpZWQoKSB7CisgICAgICAgICAgICBMb2cudyhUQUcsICJjbGllbnQgZGllZCIpOworICAgICAgICAgICAgc01vbml0b3IudW5yZWdpc3RlclJlY29yZGluZ0NhbGxiYWNrKG1EaXNwYXRjaGVyQ2IpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBpbml0KCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtRGlzcGF0Y2hlckNiLmFzQmluZGVyKCkubGlua1RvRGVhdGgodGhpcywgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBsaW5rIHRvIGNsaWVudCBkZWF0aCIsIGUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVsZWFzZSgpIHsKKyAgICAgICAgICAgIG1EaXNwYXRjaGVyQ2IuYXNCaW5kZXIoKS51bmxpbmtUb0RlYXRoKHRoaXMsIDApOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvTmV0d29ya01vbml0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29ubmVjdGl2aXR5L05ldHdvcmtNb25pdG9yLmphdmEKaW5kZXggM2ExMGRiZS4uNDUwNGJkYiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvTmV0d29ya01vbml0b3IuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9OZXR3b3JrTW9uaXRvci5qYXZhCkBAIC0yMjMsNyArMjIzLDYgQEAKICAgICBwcml2YXRlIGZpbmFsIEFsYXJtTWFuYWdlciBtQWxhcm1NYW5hZ2VyOwogICAgIHByaXZhdGUgZmluYWwgTmV0d29ya1JlcXVlc3QgbURlZmF1bHRSZXF1ZXN0OwogCi0gICAgcHJpdmF0ZSBTdHJpbmcgbVNlcnZlcjsKICAgICBwcml2YXRlIGJvb2xlYW4gbUlzQ2FwdGl2ZVBvcnRhbENoZWNrRW5hYmxlZCA9IGZhbHNlOwogCiAgICAgLy8gU2V0IGlmIHRoZSB1c2VyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgIkRvIG5vdCB1c2UgdGhpcyBuZXR3b3JrIiBpbiBjYXB0aXZlIHBvcnRhbCBzaWduLWluIGFwcC4KQEAgLTI2NSwxMCArMjY0LDYgQEAKICAgICAgICAgYWRkU3RhdGUobUxpbmdlcmluZ1N0YXRlLCBtRGVmYXVsdFN0YXRlKTsKICAgICAgICAgc2V0SW5pdGlhbFN0YXRlKG1EZWZhdWx0U3RhdGUpOwogCi0gICAgICAgIG1TZXJ2ZXIgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLkdsb2JhbC5DQVBUSVZFX1BPUlRBTF9TRVJWRVIpOwotICAgICAgICBpZiAobVNlcnZlciA9PSBudWxsKSBtU2VydmVyID0gREVGQVVMVF9TRVJWRVI7Ci0KICAgICAgICAgbUxpbmdlckRlbGF5TXMgPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEludChMSU5HRVJfREVMQVlfUFJPUEVSVFksIERFRkFVTFRfTElOR0VSX0RFTEFZX01TKTsKIAogICAgICAgICBtSXNDYXB0aXZlUG9ydGFsQ2hlY2tFbmFibGVkID0gU2V0dGluZ3MuR2xvYmFsLmdldEludChtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKQEAgLTYyMiw2ICs2MTcsMTMgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENhcHRpdmVQb3J0YWxTZXJ2ZXJVcmwoQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIFN0cmluZyBzZXJ2ZXIgPSBTZXR0aW5ncy5HbG9iYWwuZ2V0U3RyaW5nKGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLkNBUFRJVkVfUE9SVEFMX1NFUlZFUik7CisgICAgICAgIGlmIChzZXJ2ZXIgPT0gbnVsbCkgc2VydmVyID0gREVGQVVMVF9TRVJWRVI7CisgICAgICAgIHJldHVybiAiaHR0cDovLyIgKyBzZXJ2ZXIgKyAiL2dlbmVyYXRlXzIwNCI7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogRG8gYSBVUkwgZmV0Y2ggb24gYSBrbm93biBzZXJ2ZXIgdG8gc2VlIGlmIHdlIGdldCB0aGUgZGF0YSB3ZSBleHBlY3QuCiAgICAgICogUmV0dXJucyBIVFRQIHJlc3BvbnNlIGNvZGUuCkBAIC02MzMsOSArNjM1LDkgQEAKICAgICAgICAgSHR0cFVSTENvbm5lY3Rpb24gdXJsQ29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgIGludCBodHRwUmVzcG9uc2VDb2RlID0gNTk5OwogICAgICAgICB0cnkgewotICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHAiLCBtU2VydmVyLCAiL2dlbmVyYXRlXzIwNCIpOworICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoZ2V0Q2FwdGl2ZVBvcnRhbFNlcnZlclVybChtQ29udGV4dCkpOwogICAgICAgICAgICAgLy8gT24gbmV0d29ya3Mgd2l0aCBhIFBBQyBpbnN0ZWFkIG9mIGZldGNoaW5nIGEgVVJMIHRoYXQgc2hvdWxkIHJlc3VsdCBpbiBhIDIwNAotICAgICAgICAgICAgLy8gcmVwb25zZSwgd2UgaW5zdGVhZCBzaW1wbHkgZmV0Y2ggdGhlIFBBQyBzY3JpcHQuICBUaGlzIGlzIGRvbmUgZm9yIGEgZmV3IHJlYXNvbnM6CisgICAgICAgICAgICAvLyByZXNwb25zZSwgd2UgaW5zdGVhZCBzaW1wbHkgZmV0Y2ggdGhlIFBBQyBzY3JpcHQuICBUaGlzIGlzIGRvbmUgZm9yIGEgZmV3IHJlYXNvbnM6CiAgICAgICAgICAgICAvLyAxLiBBdCBwcmVzZW50IG91ciBQQUMgY29kZSBkb2VzIG5vdCB5ZXQgaGFuZGxlIG11bHRpcGxlIFBBQ3Mgb24gbXVsdGlwbGUgbmV0d29ya3MKICAgICAgICAgICAgIC8vICAgIHVudGlsIHNvbWV0aGluZyBsaWtlIGh0dHBzOi8vYW5kcm9pZC1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS8jL2MvMTE1MTgwLyBsYW5kcy4KICAgICAgICAgICAgIC8vICAgIE5ldHdvcmsub3BlbkNvbm5lY3Rpb24oKSB3aWxsIGlnbm9yZSBuZXR3b3JrLXNwZWNpZmljIFBBQ3MgYW5kIGluc3RlYWQgZmV0Y2gKQEAgLTY0NCw3ICs2NDYsOCBAQAogICAgICAgICAgICAgLy8gMi4gVG8gcHJveHkgdGhlIGdlbmVyYXRlXzIwNCBmZXRjaCB0aHJvdWdoIGEgUEFDIHdvdWxkIHJlcXVpcmUgYSBudW1iZXIgb2YgdGhpbmdzCiAgICAgICAgICAgICAvLyAgICBoYXBwZW4gYmVmb3JlIHRoZSBmZXRjaCBjYW4gY29tbWVuY2UsIG5hbWVseToKICAgICAgICAgICAgIC8vICAgICAgICBhKSB0aGUgUEFDIHNjcmlwdCBiZSBmZXRjaGVkCi0gICAgICAgICAgICAvLyAgICAgICAgYikgYSBQQUMgc2NyaXB0IHJlc29sdmVyIHNlcnZpY2UgYmUgZmlyZWQgdXAgYW5kIHJlc29sdmUgbVNlcnZlcgorICAgICAgICAgICAgLy8gICAgICAgIGIpIGEgUEFDIHNjcmlwdCByZXNvbHZlciBzZXJ2aWNlIGJlIGZpcmVkIHVwIGFuZCByZXNvbHZlIHRoZSBjYXB0aXZlIHBvcnRhbAorICAgICAgICAgICAgLy8gICAgICAgICAgIHNlcnZlci4KICAgICAgICAgICAgIC8vICAgIE5ldHdvcmsgdmFsaWRhdGlvbiBjb3VsZCBiZSBkZWxheWVkIHVudGlsIHRoZXNlIHByZXJlcXVpc2l0aWVzIGFyZSBzYXRpc2lmZWQgb3IKICAgICAgICAgICAgIC8vICAgIGNvdWxkIHNpbXBseSBiZSBsZWZ0IHRvIHJhY2UgdGhlbS4gIE5laXRoZXIgaXMgYW4gb3B0aW1hbCBzb2x1dGlvbi4KICAgICAgICAgICAgIC8vIDMuIFBBQyBzY3JpcHRzIGFyZSBzb21ldGltZXMgdXNlZCB0byBibG9jayBvciByZXN0cmljdCBJbnRlcm5ldCBhY2Nlc3MgYW5kIG1heSBpbgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9jb25uZWN0aXZpdHkvVnBuLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YQppbmRleCAyYmVhMjc4Li41YmQ0Zjk4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Nvbm5lY3Rpdml0eS9WcG4uamF2YQpAQCAtMzA5LDcgKzMwOSw3IEBACiAgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgaW50IHJlc3VsdDsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBtLmdldFBhY2thZ2VVaWQoYXBwLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHBtLmdldFBhY2thZ2VVaWRBc1VzZXIoYXBwLCB1c2VySGFuZGxlKTsKICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2NvbnRlbnQvU3luY01hbmFnZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhCmluZGV4IGEwNjY4MzUuLjc4NjE4Y2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvY29udGVudC9TeW5jTWFuYWdlci5qYXZhCkBAIC0zNDUsMjUgKzM0NSw5IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdXBkYXRlUnVubmluZ0FjY291bnRzKCkgewotICAgICAgICBtUnVubmluZ0FjY291bnRzID0gQWNjb3VudE1hbmFnZXJTZXJ2aWNlLmdldFNpbmdsZXRvbigpLmdldFJ1bm5pbmdBY2NvdW50cygpOwotCi0gICAgICAgIGlmIChtQm9vdENvbXBsZXRlZCkgewotICAgICAgICAgICAgZG9EYXRhYmFzZUNsZWFudXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOwotICAgICAgICBmb3IgKEFjdGl2ZVN5bmNDb250ZXh0IGN1cnJlbnRTeW5jQ29udGV4dCA6IG1BY3RpdmVTeW5jQ29udGV4dHMpIHsKLSAgICAgICAgICAgIGlmICghY29udGFpbnNBY2NvdW50QW5kVXNlcihhY2NvdW50cywKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldC5hY2NvdW50LAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3luY0NvbnRleHQubVN5bmNPcGVyYXRpb24udGFyZ2V0LnVzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJjYW5jZWxpbmcgc3luYyBzaW5jZSB0aGUgYWNjb3VudCBpcyBubyBsb25nZXIgcnVubmluZyIpOwotICAgICAgICAgICAgICAgIHNlbmRTeW5jRmluaXNoZWRPckNhbmNlbGVkTWVzc2FnZShjdXJyZW50U3luY0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBudWxsIC8qIG5vIHJlc3VsdCBzaW5jZSB0aGlzIGlzIGEgY2FuY2VsICovKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyB3ZSBtdXN0IGRvIHRoaXMgc2luY2Ugd2UgZG9uJ3QgYm90aGVyIHNjaGVkdWxpbmcgYWxhcm1zIHdoZW4KLSAgICAgICAgLy8gdGhlIGFjY291bnRzIGFyZSBub3Qgc2V0IHlldAotICAgICAgICBzZW5kQ2hlY2tBbGFybXNNZXNzYWdlKCk7CisgICAgICAgIGlmIChMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5WRVJCT1NFKSkgTG9nLnYoVEFHLCAic2VuZGluZyBNRVNTQUdFX0FDQ09VTlRTX1VQREFURUQiKTsKKyAgICAgICAgLy8gVXBkYXRlIGFjY291bnRzIGluIGhhbmRsZXIgdGhyZWFkLgorICAgICAgICBtU3luY0hhbmRsZXIuc2VuZEVtcHR5TWVzc2FnZShTeW5jSGFuZGxlci5NRVNTQUdFX0FDQ09VTlRTX1VQREFURUQpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBkb0RhdGFiYXNlQ2xlYW51cCgpIHsKQEAgLTIxNzksNiArMjE2Myw3IEBACiAgICAgICAgICAqIG9iajoge0BsaW5rIGNvbS5hbmRyb2lkLnNlcnZlci5jb250ZW50LlN5bmNNYW5hZ2VyLkFjdGl2ZVN5bmNDb250ZXh0fQogICAgICAgICAgKi8KICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfTU9OSVRPUl9TWU5DID0gODsKKyAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfQUNDT1VOVFNfVVBEQVRFRCA9IDk7CiAKICAgICAgICAgcHVibGljIGZpbmFsIFN5bmNOb3RpZmljYXRpb25JbmZvIG1TeW5jTm90aWZpY2F0aW9uSW5mbyA9IG5ldyBTeW5jTm90aWZpY2F0aW9uSW5mbygpOwogICAgICAgICBwcml2YXRlIExvbmcgbUFsYXJtU2NoZWR1bGVUaW1lID0gbnVsbDsKQEAgLTIyOTYsNiArMjI4MSwxMyBAQAogICAgICAgICAgICAgICAgIC8vIHRvIGFsc28gdGFrZSBpbnRvIGFjY291bnQgdGhlIHBlcmlvZGljIHN5bmNzLgogICAgICAgICAgICAgICAgIGVhcmxpZXN0RnV0dXJlUG9sbFRpbWUgPSBzY2hlZHVsZVJlYWR5UGVyaW9kaWNTeW5jcygpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLndoYXQpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTeW5jSGFuZGxlci5NRVNTQUdFX0FDQ09VTlRTX1VQREFURUQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTG9nLmlzTG9nZ2FibGUoVEFHLCBMb2cuVkVSQk9TRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cudihUQUcsICJoYW5kbGVTeW5jSGFuZGxlck1lc3NhZ2U6IE1FU1NBR0VfQUNDT1VOVFNfVVBEQVRFRCIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlUnVubmluZ0FjY291bnRzSCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTeW5jSGFuZGxlci5NRVNTQUdFX0NBTkNFTDoKICAgICAgICAgICAgICAgICAgICAgICAgIFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50IGVuZHBvaW50ID0gKFN5bmNTdG9yYWdlRW5naW5lLkVuZFBvaW50KSBtc2cub2JqOwogICAgICAgICAgICAgICAgICAgICAgICAgQnVuZGxlIGV4dHJhcyA9IG1zZy5wZWVrRGF0YSgpOwpAQCAtMjg3Miw3ICsyODY0LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIG1Mb2NhbERldmljZUlkbGVDb250cm9sbGVyLnNldFN5bmNBY3RpdmUoYWN0aXZlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAorICAgICAgICBwcml2YXRlIHZvaWQgdXBkYXRlUnVubmluZ0FjY291bnRzSCgpIHsKKyAgICAgICAgICAgIG1SdW5uaW5nQWNjb3VudHMgPSBBY2NvdW50TWFuYWdlclNlcnZpY2UuZ2V0U2luZ2xldG9uKCkuZ2V0UnVubmluZ0FjY291bnRzKCk7CisKKyAgICAgICAgICAgIGlmIChtQm9vdENvbXBsZXRlZCkgeworICAgICAgICAgICAgICAgIGRvRGF0YWJhc2VDbGVhbnVwKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFjY291bnRBbmRVc2VyW10gYWNjb3VudHMgPSBtUnVubmluZ0FjY291bnRzOworICAgICAgICAgICAgZm9yIChBY3RpdmVTeW5jQ29udGV4dCBjdXJyZW50U3luY0NvbnRleHQgOiBtQWN0aXZlU3luY0NvbnRleHRzKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250YWluc0FjY291bnRBbmRVc2VyKGFjY291bnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldC5hY2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN5bmNDb250ZXh0Lm1TeW5jT3BlcmF0aW9uLnRhcmdldC51c2VySWQpKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5kKFRBRywgImNhbmNlbGluZyBzeW5jIHNpbmNlIHRoZSBhY2NvdW50IGlzIG5vIGxvbmdlciBydW5uaW5nIik7CisgICAgICAgICAgICAgICAgICAgIHNlbmRTeW5jRmluaXNoZWRPckNhbmNlbGVkTWVzc2FnZShjdXJyZW50U3luY0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAvKiBubyByZXN1bHQgc2luY2UgdGhpcyBpcyBhIGNhbmNlbCAqLyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gd2UgbXVzdCBkbyB0aGlzIHNpbmNlIHdlIGRvbid0IGJvdGhlciBzY2hlZHVsaW5nIGFsYXJtcyB3aGVuCisgICAgICAgICAgICAvLyB0aGUgYWNjb3VudHMgYXJlIG5vdCBzZXQgeWV0CisgICAgICAgICAgICBzZW5kQ2hlY2tBbGFybXNNZXNzYWdlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNTeW5jTm90VXNpbmdOZXR3b3JrSChBY3RpdmVTeW5jQ29udGV4dCBhY3RpdmVTeW5jQ29udGV4dCkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0F1dG9tYXRpY0JyaWdodG5lc3NDb250cm9sbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvQXV0b21hdGljQnJpZ2h0bmVzc0NvbnRyb2xsZXIuamF2YQppbmRleCBlMTViY2E2Li4xOTA4ZjcyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvQXV0b21hdGljQnJpZ2h0bmVzc0NvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvQXV0b21hdGljQnJpZ2h0bmVzc0NvbnRyb2xsZXIuamF2YQpAQCAtNDksMjMgKzQ5LDEyIEBACiAgICAgLy8gSWYgdHJ1ZSwgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBzY3JlZW4gYXV0by1icmlnaHRuZXNzIGFkanVzdG1lbnQgc2V0dGluZy4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFVTRV9TQ1JFRU5fQVVUT19CUklHSFRORVNTX0FESlVTVE1FTlQgPSB0cnVlOwogCi0gICAgLy8gVGhlIG1heGltdW0gcmFuZ2Ugb2YgZ2FtbWEgYWRqdXN0bWVudCBwb3NzaWJsZSB1c2luZyB0aGUgc2NyZWVuCi0gICAgLy8gYXV0by1icmlnaHRuZXNzIGFkanVzdG1lbnQgc2V0dGluZy4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBTQ1JFRU5fQVVUT19CUklHSFRORVNTX0FESlVTVE1FTlRfTUFYX0dBTU1BID0gMy4wZjsKLQotICAgIC8vIFBlcmlvZCBvZiB0aW1lIGluIHdoaWNoIHRvIGNvbnNpZGVyIGxpZ2h0IHNhbXBsZXMgaW4gbWlsbGlzZWNvbmRzLgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBTUJJRU5UX0xJR0hUX0hPUklaT04gPSAxMDAwMDsKLQogICAgIC8vIEh5c3RlcmVzaXMgY29uc3RyYWludHMgZm9yIGJyaWdodGVuaW5nIG9yIGRhcmtlbmluZy4KICAgICAvLyBUaGUgcmVjZW50IGx1eCBtdXN0IGhhdmUgY2hhbmdlZCBieSBhdCBsZWFzdCB0aGlzIGZyYWN0aW9uIHJlbGF0aXZlIHRvIHRoZQogICAgIC8vIGN1cnJlbnQgYW1iaWVudCBsdXggYmVmb3JlIGEgY2hhbmdlIHdpbGwgYmUgY29uc2lkZXJlZC4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBCUklHSFRFTklOR19MSUdIVF9IWVNURVJFU0lTID0gMC4xMGY7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgREFSS0VOSU5HX0xJR0hUX0hZU1RFUkVTSVMgPSAwLjIwZjsKIAotICAgIC8vIFRoZSBpbnRlcmNlcHQgdXNlZCBmb3IgdGhlIHdlaWdodGluZyBjYWxjdWxhdGlvbi4gVGhpcyBpcyB1c2VkIGluIG9yZGVyIHRvIGtlZXAgYWxsIHBvc3NpYmxlCi0gICAgLy8gd2VpZ2h0aW5nIHZhbHVlcyBwb3NpdGl2ZS4KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0VJR0hUSU5HX0lOVEVSQ0VQVCA9IEFNQklFTlRfTElHSFRfSE9SSVpPTjsKLQogICAgIC8vIEhvdyBsb25nIHRoZSBjdXJyZW50IHNlbnNvciByZWFkaW5nIGlzIGFzc3VtZWQgdG8gYmUgdmFsaWQgYmV5b25kIHRoZSBjdXJyZW50IHRpbWUuCiAgICAgLy8gVGhpcyBwcm92aWRlcyBhIGJpdCBvZiBwcmVkaWN0aW9uLCBhcyB3ZWxsIGFzIGVuc3VyZXMgdGhhdCB0aGUgd2VpZ2h0IGZvciB0aGUgbGFzdCBzYW1wbGUgaXMKICAgICAvLyBub24temVybywgd2hpY2ggaW4gdHVybiBlbnN1cmVzIHRoYXQgdGhlIHRvdGFsIHdlaWdodCBpcyBub24temVyby4KQEAgLTEzMiw2ICsxMjEsMTMgQEAKICAgICAvLyBhbmQgb25seSB0aGVuIGRlY2lkZSB3aGV0aGVyIHRvIGNoYW5nZSBicmlnaHRuZXNzLgogICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtUmVzZXRBbWJpZW50THV4QWZ0ZXJXYXJtVXBDb25maWc7CiAKKyAgICAvLyBQZXJpb2Qgb2YgdGltZSBpbiB3aGljaCB0byBjb25zaWRlciBsaWdodCBzYW1wbGVzIGluIG1pbGxpc2Vjb25kcy4KKyAgICBwcml2YXRlIGZpbmFsIGludCBtQW1iaWVudExpZ2h0SG9yaXpvbjsKKworICAgIC8vIFRoZSBpbnRlcmNlcHQgdXNlZCBmb3IgdGhlIHdlaWdodGluZyBjYWxjdWxhdGlvbi4gVGhpcyBpcyB1c2VkIGluIG9yZGVyIHRvIGtlZXAgYWxsIHBvc3NpYmxlCisgICAgLy8gd2VpZ2h0aW5nIHZhbHVlcyBwb3NpdGl2ZS4KKyAgICBwcml2YXRlIGZpbmFsIGludCBtV2VpZ2h0aW5nSW50ZXJjZXB0OworCiAgICAgLy8gQW1vdW50IG9mIHRpbWUgdG8gZGVsYXkgYXV0by1icmlnaHRuZXNzIGFmdGVyIHNjcmVlbiBvbiB3aGlsZSB3YWl0aW5nIGZvcgogICAgIC8vIHRoZSBsaWdodCBzZW5zb3IgdG8gd2FybS11cCBpbiBtaWxsaXNlY29uZHMuCiAgICAgLy8gTWF5IGJlIDAgaWYgbm8gd2FybS11cCBpcyByZXF1aXJlZC4KQEAgLTE3OSw2ICsxNzUsMTAgQEAKICAgICAvLyBUaGUgc2NyZWVuIGF1dG8tYnJpZ2h0bmVzcyBhZGp1c3RtZW50IGZhY3RvciBpbiB0aGUgcmFuZ2UgLTEgKGRpbW1lcikgdG8gMSAoYnJpZ2h0ZXIpCiAgICAgcHJpdmF0ZSBmbG9hdCBtU2NyZWVuQXV0b0JyaWdodG5lc3NBZGp1c3RtZW50ID0gMC4wZjsKIAorICAgIC8vIFRoZSBtYXhpbXVtIHJhbmdlIG9mIGdhbW1hIGFkanVzdG1lbnQgcG9zc2libGUgdXNpbmcgdGhlIHNjcmVlbgorICAgIC8vIGF1dG8tYnJpZ2h0bmVzcyBhZGp1c3RtZW50IHNldHRpbmcuCisgICAgcHJpdmF0ZSBmbG9hdCBtU2NyZWVuQXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWE7CisKICAgICAvLyBUaGUgbGFzdCBzY3JlZW4gYXV0by1icmlnaHRuZXNzIGdhbW1hLiAgKEZvciBwcmludGluZyBpbiBkdW1wKCkgb25seS4pCiAgICAgcHJpdmF0ZSBmbG9hdCBtTGFzdFNjcmVlbkF1dG9CcmlnaHRuZXNzR2FtbWEgPSAxLjBmOwogCkBAIC0xOTcsNyArMTk3LDggQEAKICAgICAgICAgICAgIFNlbnNvck1hbmFnZXIgc2Vuc29yTWFuYWdlciwgU3BsaW5lIGF1dG9CcmlnaHRuZXNzU3BsaW5lLCBpbnQgbGlnaHRTZW5zb3JXYXJtVXBUaW1lLAogICAgICAgICAgICAgaW50IGJyaWdodG5lc3NNaW4sIGludCBicmlnaHRuZXNzTWF4LCBmbG9hdCBkb3plU2NhbGVGYWN0b3IsCiAgICAgICAgICAgICBpbnQgbGlnaHRTZW5zb3JSYXRlLCBsb25nIGJyaWdodGVuaW5nTGlnaHREZWJvdW5jZUNvbmZpZywKLSAgICAgICAgICAgIGxvbmcgZGFya2VuaW5nTGlnaHREZWJvdW5jZUNvbmZpZywgYm9vbGVhbiByZXNldEFtYmllbnRMdXhBZnRlcldhcm1VcENvbmZpZykgeworICAgICAgICAgICAgbG9uZyBkYXJrZW5pbmdMaWdodERlYm91bmNlQ29uZmlnLCBib29sZWFuIHJlc2V0QW1iaWVudEx1eEFmdGVyV2FybVVwQ29uZmlnLAorICAgICAgICAgICAgaW50IGFtYmllbnRMaWdodEhvcml6b24sIGZsb2F0IGF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudE1heEdhbW1hICkgewogICAgICAgICBtQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwogICAgICAgICBtVHdpbGlnaHQgPSBMb2NhbFNlcnZpY2VzLmdldFNlcnZpY2UoVHdpbGlnaHRNYW5hZ2VyLmNsYXNzKTsKICAgICAgICAgbVNlbnNvck1hbmFnZXIgPSBzZW5zb3JNYW5hZ2VyOwpAQCAtMjEwLDkgKzIxMSwxMiBAQAogICAgICAgICBtQnJpZ2h0ZW5pbmdMaWdodERlYm91bmNlQ29uZmlnID0gYnJpZ2h0ZW5pbmdMaWdodERlYm91bmNlQ29uZmlnOwogICAgICAgICBtRGFya2VuaW5nTGlnaHREZWJvdW5jZUNvbmZpZyA9IGRhcmtlbmluZ0xpZ2h0RGVib3VuY2VDb25maWc7CiAgICAgICAgIG1SZXNldEFtYmllbnRMdXhBZnRlcldhcm1VcENvbmZpZyA9IHJlc2V0QW1iaWVudEx1eEFmdGVyV2FybVVwQ29uZmlnOworICAgICAgICBtQW1iaWVudExpZ2h0SG9yaXpvbiA9IGFtYmllbnRMaWdodEhvcml6b247CisgICAgICAgIG1XZWlnaHRpbmdJbnRlcmNlcHQgPSBhbWJpZW50TGlnaHRIb3Jpem9uOworICAgICAgICBtU2NyZWVuQXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEgPSBhdXRvQnJpZ2h0bmVzc0FkanVzdG1lbnRNYXhHYW1tYTsKIAogICAgICAgICBtSGFuZGxlciA9IG5ldyBBdXRvbWF0aWNCcmlnaHRuZXNzSGFuZGxlcihsb29wZXIpOwotICAgICAgICBtQW1iaWVudExpZ2h0UmluZ0J1ZmZlciA9IG5ldyBBbWJpZW50TGlnaHRSaW5nQnVmZmVyKG1MaWdodFNlbnNvclJhdGUpOworICAgICAgICBtQW1iaWVudExpZ2h0UmluZ0J1ZmZlciA9IG5ldyBBbWJpZW50TGlnaHRSaW5nQnVmZmVyKG1MaWdodFNlbnNvclJhdGUsIG1BbWJpZW50TGlnaHRIb3Jpem9uKTsKIAogICAgICAgICBpZiAoIURFQlVHX1BSRVRFTkRfTElHSFRfU0VOU09SX0FCU0VOVCkgewogICAgICAgICAgICAgbUxpZ2h0U2Vuc29yID0gbVNlbnNvck1hbmFnZXIuZ2V0RGVmYXVsdFNlbnNvcihTZW5zb3IuVFlQRV9MSUdIVCk7CkBAIC0yNjYsNiArMjcwLDcgQEAKICAgICAgICAgcHcucHJpbnRsbigiICBtTGlnaHRTZW5zb3JFbmFibGVkPSIgKyBtTGlnaHRTZW5zb3JFbmFibGVkKTsKICAgICAgICAgcHcucHJpbnRsbigiICBtTGlnaHRTZW5zb3JFbmFibGVUaW1lPSIgKyBUaW1lVXRpbHMuZm9ybWF0VXB0aW1lKG1MaWdodFNlbnNvckVuYWJsZVRpbWUpKTsKICAgICAgICAgcHcucHJpbnRsbigiICBtQW1iaWVudEx1eD0iICsgbUFtYmllbnRMdXgpOworICAgICAgICBwdy5wcmludGxuKCIgIG1BbWJpZW50TGlnaHRIb3Jpem9uPSIgKyBtQW1iaWVudExpZ2h0SG9yaXpvbik7CiAgICAgICAgIHB3LnByaW50bG4oIiAgbUJyaWdodGVuaW5nTHV4VGhyZXNob2xkPSIgKyBtQnJpZ2h0ZW5pbmdMdXhUaHJlc2hvbGQpOwogICAgICAgICBwdy5wcmludGxuKCIgIG1EYXJrZW5pbmdMdXhUaHJlc2hvbGQ9IiArIG1EYXJrZW5pbmdMdXhUaHJlc2hvbGQpOwogICAgICAgICBwdy5wcmludGxuKCIgIG1MYXN0T2JzZXJ2ZWRMdXg9IiArIG1MYXN0T2JzZXJ2ZWRMdXgpOwpAQCAtMjc0LDYgKzI3OSw3IEBACiAgICAgICAgIHB3LnByaW50bG4oIiAgbUFtYmllbnRMaWdodFJpbmdCdWZmZXI9IiArIG1BbWJpZW50TGlnaHRSaW5nQnVmZmVyKTsKICAgICAgICAgcHcucHJpbnRsbigiICBtU2NyZWVuQXV0b0JyaWdodG5lc3M9IiArIG1TY3JlZW5BdXRvQnJpZ2h0bmVzcyk7CiAgICAgICAgIHB3LnByaW50bG4oIiAgbVNjcmVlbkF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudD0iICsgbVNjcmVlbkF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudCk7CisgICAgICAgIHB3LnByaW50bG4oIiAgbVNjcmVlbkF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudE1heEdhbW1hPSIgKyBtU2NyZWVuQXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEpOwogICAgICAgICBwdy5wcmludGxuKCIgIG1MYXN0U2NyZWVuQXV0b0JyaWdodG5lc3NHYW1tYT0iICsgbUxhc3RTY3JlZW5BdXRvQnJpZ2h0bmVzc0dhbW1hKTsKICAgICAgICAgcHcucHJpbnRsbigiICBtRG96aW5nPSIgKyBtRG96aW5nKTsKICAgICB9CkBAIC0zMDksNyArMzE1LDcgQEAKIAogICAgIHByaXZhdGUgdm9pZCBhcHBseUxpZ2h0U2Vuc29yTWVhc3VyZW1lbnQobG9uZyB0aW1lLCBmbG9hdCBsdXgpIHsKICAgICAgICAgbVJlY2VudExpZ2h0U2FtcGxlcysrOwotICAgICAgICBtQW1iaWVudExpZ2h0UmluZ0J1ZmZlci5wcnVuZSh0aW1lIC0gQU1CSUVOVF9MSUdIVF9IT1JJWk9OKTsKKyAgICAgICAgbUFtYmllbnRMaWdodFJpbmdCdWZmZXIucHJ1bmUodGltZSAtIG1BbWJpZW50TGlnaHRIb3Jpem9uKTsKICAgICAgICAgbUFtYmllbnRMaWdodFJpbmdCdWZmZXIucHVzaCh0aW1lLCBsdXgpOwogCiAgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgc2FtcGxlIHZhbHVlLgpAQCAtMzYwLDE0ICszNjYsMTQgQEAKICAgICAgICAgcmV0dXJuIHN1bSAvIHRvdGFsV2VpZ2h0OwogICAgIH0KIAotICAgIHByaXZhdGUgc3RhdGljIGZsb2F0IGNhbGN1bGF0ZVdlaWdodChsb25nIHN0YXJ0RGVsdGEsIGxvbmcgZW5kRGVsdGEpIHsKKyAgICBwcml2YXRlIGZsb2F0IGNhbGN1bGF0ZVdlaWdodChsb25nIHN0YXJ0RGVsdGEsIGxvbmcgZW5kRGVsdGEpIHsKICAgICAgICAgcmV0dXJuIHdlaWdodEludGVncmFsKGVuZERlbHRhKSAtIHdlaWdodEludGVncmFsKHN0YXJ0RGVsdGEpOwogICAgIH0KIAotICAgIC8vIEV2YWx1YXRlcyB0aGUgaW50ZWdyYWwgb2YgeSA9IHggKyBXRUlHSFRJTkdfSU5URVJDRVBULiBUaGlzIGlzIGFsd2F5cyBwb3NpdGl2ZSBmb3IgdGhlCisgICAgLy8gRXZhbHVhdGVzIHRoZSBpbnRlZ3JhbCBvZiB5ID0geCArIG1XZWlnaHRpbmdJbnRlcmNlcHQuIFRoaXMgaXMgYWx3YXlzIHBvc2l0aXZlIGZvciB0aGUKICAgICAvLyBob3Jpem9uIHdlJ3JlIGxvb2tpbmcgYXQgYW5kIHByb3ZpZGVzIGEgbm9uLWxpbmVhciB3ZWlnaHRpbmcgZm9yIGxpZ2h0IHNhbXBsZXMuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgd2VpZ2h0SW50ZWdyYWwobG9uZyB4KSB7Ci0gICAgICAgIHJldHVybiB4ICogKHggKiAwLjVmICsgV0VJR0hUSU5HX0lOVEVSQ0VQVCk7CisgICAgcHJpdmF0ZSBmbG9hdCB3ZWlnaHRJbnRlZ3JhbChsb25nIHgpIHsKKyAgICAgICAgcmV0dXJuIHggKiAoeCAqIDAuNWYgKyBtV2VpZ2h0aW5nSW50ZXJjZXB0KTsKICAgICB9CiAKICAgICBwcml2YXRlIGxvbmcgbmV4dEFtYmllbnRMaWdodEJyaWdodGVuaW5nVHJhbnNpdGlvbihsb25nIHRpbWUpIHsKQEAgLTM5Niw3ICs0MDIsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUFtYmllbnRMdXgoKSB7CiAgICAgICAgIGxvbmcgdGltZSA9IFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpOwotICAgICAgICBtQW1iaWVudExpZ2h0UmluZ0J1ZmZlci5wcnVuZSh0aW1lIC0gQU1CSUVOVF9MSUdIVF9IT1JJWk9OKTsKKyAgICAgICAgbUFtYmllbnRMaWdodFJpbmdCdWZmZXIucHJ1bmUodGltZSAtIG1BbWJpZW50TGlnaHRIb3Jpem9uKTsKICAgICAgICAgdXBkYXRlQW1iaWVudEx1eCh0aW1lKTsKICAgICB9CiAKQEAgLTQ3MCw3ICs0NzYsNyBAQAogCiAgICAgICAgIGlmIChVU0VfU0NSRUVOX0FVVE9fQlJJR0hUTkVTU19BREpVU1RNRU5UCiAgICAgICAgICAgICAgICAgJiYgbVNjcmVlbkF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudCAhPSAwLjBmKSB7Ci0gICAgICAgICAgICBmaW5hbCBmbG9hdCBhZGpHYW1tYSA9IE1hdGhVdGlscy5wb3coU0NSRUVOX0FVVE9fQlJJR0hUTkVTU19BREpVU1RNRU5UX01BWF9HQU1NQSwKKyAgICAgICAgICAgIGZpbmFsIGZsb2F0IGFkakdhbW1hID0gTWF0aFV0aWxzLnBvdyhtU2NyZWVuQXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEsCiAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKDEuMGYsIE1hdGgubWF4KC0xLjBmLCAtbVNjcmVlbkF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudCkpKTsKICAgICAgICAgICAgIGdhbW1hICo9IGFkakdhbW1hOwogICAgICAgICAgICAgaWYgKERFQlVHKSB7CkBAIC02NTMsOCArNjU5LDggQEAKICAgICAgICAgcHJpdmF0ZSBpbnQgbUVuZDsKICAgICAgICAgcHJpdmF0ZSBpbnQgbUNvdW50OwogCi0gICAgICAgIHB1YmxpYyBBbWJpZW50TGlnaHRSaW5nQnVmZmVyKGxvbmcgbGlnaHRTZW5zb3JSYXRlKSB7Ci0gICAgICAgICAgICBtQ2FwYWNpdHkgPSAoaW50KSBNYXRoLmNlaWwoQU1CSUVOVF9MSUdIVF9IT1JJWk9OICogQlVGRkVSX1NMQUNLIC8gbGlnaHRTZW5zb3JSYXRlKTsKKyAgICAgICAgcHVibGljIEFtYmllbnRMaWdodFJpbmdCdWZmZXIobG9uZyBsaWdodFNlbnNvclJhdGUsIGludCBhbWJpZW50TGlnaHRIb3Jpem9uKSB7CisgICAgICAgICAgICBtQ2FwYWNpdHkgPSAoaW50KSBNYXRoLmNlaWwoYW1iaWVudExpZ2h0SG9yaXpvbiAqIEJVRkZFUl9TTEFDSyAvIGxpZ2h0U2Vuc29yUmF0ZSk7CiAgICAgICAgICAgICBtUmluZ0x1eCA9IG5ldyBmbG9hdFttQ2FwYWNpdHldOwogICAgICAgICAgICAgbVJpbmdUaW1lID0gbmV3IGxvbmdbbUNhcGFjaXR5XTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0NvbG9yRmFkZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0NvbG9yRmFkZS5qYXZhCmluZGV4IDgzNWJhMTcuLmExNmZjZDIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9Db2xvckZhZGUuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvQ29sb3JGYWRlLmphdmEKQEAgLTU4NywxNiArNTg3LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJVbmFibGUgdG8gY3JlYXRlIHN1cmZhY2UuIiwgZXgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbVN1cmZhY2VDb250cm9sLnNldExheWVyU3RhY2sobURpc3BsYXlMYXllclN0YWNrKTsKKyAgICAgICAgICAgICAgICBtU3VyZmFjZUNvbnRyb2wuc2V0U2l6ZShtRGlzcGxheVdpZHRoLCBtRGlzcGxheUhlaWdodCk7CisgICAgICAgICAgICAgICAgbVN1cmZhY2UgPSBuZXcgU3VyZmFjZSgpOworICAgICAgICAgICAgICAgIG1TdXJmYWNlLmNvcHlGcm9tKG1TdXJmYWNlQ29udHJvbCk7CisKKyAgICAgICAgICAgICAgICBtU3VyZmFjZUxheW91dCA9IG5ldyBOYXR1cmFsU3VyZmFjZUxheW91dChtRGlzcGxheU1hbmFnZXJJbnRlcm5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5SWQsIG1TdXJmYWNlQ29udHJvbCk7CisgICAgICAgICAgICAgICAgbVN1cmZhY2VMYXlvdXQub25EaXNwbGF5VHJhbnNhY3Rpb24oKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVN1cmZhY2VDb250cm9sLnNldExheWVyU3RhY2sobURpc3BsYXlMYXllclN0YWNrKTsKLSAgICAgICAgICAgIG1TdXJmYWNlQ29udHJvbC5zZXRTaXplKG1EaXNwbGF5V2lkdGgsIG1EaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgICAgIG1TdXJmYWNlID0gbmV3IFN1cmZhY2UoKTsKLSAgICAgICAgICAgIG1TdXJmYWNlLmNvcHlGcm9tKG1TdXJmYWNlQ29udHJvbCk7Ci0KLSAgICAgICAgICAgIG1TdXJmYWNlTGF5b3V0ID0gbmV3IE5hdHVyYWxTdXJmYWNlTGF5b3V0KG1EaXNwbGF5TWFuYWdlckludGVybmFsLAotICAgICAgICAgICAgICAgICAgICBtRGlzcGxheUlkLCBtU3VyZmFjZUNvbnRyb2wpOwotICAgICAgICAgICAgbVN1cmZhY2VMYXlvdXQub25EaXNwbGF5VHJhbnNhY3Rpb24oKTsKICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIFN1cmZhY2VDb250cm9sLmNsb3NlVHJhbnNhY3Rpb24oKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0Rpc3BsYXlQb3dlckNvbnRyb2xsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGlzcGxheS9EaXNwbGF5UG93ZXJDb250cm9sbGVyLmphdmEKaW5kZXggN2I0OTUzMC4uYjc0YjBmMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9kaXNwbGF5L0Rpc3BsYXlQb3dlckNvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2Rpc3BsYXkvRGlzcGxheVBvd2VyQ29udHJvbGxlci5qYXZhCkBAIC0zMTEsNiArMzExLDExIEBACiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5pbnRlZ2VyLmNvbmZpZ19hdXRvQnJpZ2h0bmVzc0RhcmtlbmluZ0xpZ2h0RGVib3VuY2UpOwogICAgICAgICBib29sZWFuIGF1dG9CcmlnaHRuZXNzUmVzZXRBbWJpZW50THV4QWZ0ZXJXYXJtVXAgPSByZXNvdXJjZXMuZ2V0Qm9vbGVhbigKICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmJvb2wuY29uZmlnX2F1dG9CcmlnaHRuZXNzUmVzZXRBbWJpZW50THV4QWZ0ZXJXYXJtVXApOworICAgICAgICBpbnQgYW1iaWVudExpZ2h0SG9yaXpvbiA9IHJlc291cmNlcy5nZXRJbnRlZ2VyKAorICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuaW50ZWdlci5jb25maWdfYXV0b0JyaWdodG5lc3NBbWJpZW50TGlnaHRIb3Jpem9uKTsKKyAgICAgICAgZmxvYXQgYXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEgPSByZXNvdXJjZXMuZ2V0RnJhY3Rpb24oCisgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5mcmFjdGlvbi5jb25maWdfYXV0b0JyaWdodG5lc3NBZGp1c3RtZW50TWF4R2FtbWEsCisgICAgICAgICAgICAgICAgMSwgMSk7CiAKICAgICAgICAgaWYgKG1Vc2VTb2Z0d2FyZUF1dG9CcmlnaHRuZXNzQ29uZmlnKSB7CiAgICAgICAgICAgICBpbnRbXSBsdXggPSByZXNvdXJjZXMuZ2V0SW50QXJyYXkoCkBAIC0zNDgsNyArMzUzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0U2Vuc29yV2FybVVwVGltZUNvbmZpZywgc2NyZWVuQnJpZ2h0bmVzc1JhbmdlTWluaW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1TY3JlZW5CcmlnaHRuZXNzUmFuZ2VNYXhpbXVtLCBkb3plU2NhbGVGYWN0b3IsIGxpZ2h0U2Vuc29yUmF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJyaWdodGVuaW5nTGlnaHREZWJvdW5jZSwgZGFya2VuaW5nTGlnaHREZWJvdW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9CcmlnaHRuZXNzUmVzZXRBbWJpZW50THV4QWZ0ZXJXYXJtVXApOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0JyaWdodG5lc3NSZXNldEFtYmllbnRMdXhBZnRlcldhcm1VcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFtYmllbnRMaWdodEhvcml6b24sIGF1dG9CcmlnaHRuZXNzQWRqdXN0bWVudE1heEdhbW1hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02NjcsNiArNjczLDkgQEAKICAgICAgICAgICAgICAgICBzbG93Q2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtQXBwbGllZERpbW1pbmcgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKG1BcHBsaWVkRGltbWluZykgeworICAgICAgICAgICAgc2xvd0NoYW5nZSA9IGZhbHNlOworICAgICAgICAgICAgbUFwcGxpZWREaW1taW5nID0gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiBsb3cgcG93ZXIgbW9kZSBpcyBlbmFibGVkLCBjdXQgdGhlIGJyaWdodG5lc3MgbGV2ZWwgYnkgaGFsZgpAQCAtNjc5LDYgKzY4OCw5IEBACiAgICAgICAgICAgICAgICAgc2xvd0NoYW5nZSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbUFwcGxpZWRMb3dQb3dlciA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobUFwcGxpZWRMb3dQb3dlcikgeworICAgICAgICAgICAgc2xvd0NoYW5nZSA9IGZhbHNlOworICAgICAgICAgICAgbUFwcGxpZWRMb3dQb3dlciA9IGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQW5pbWF0ZSB0aGUgc2NyZWVuIGJyaWdodG5lc3Mgd2hlbiB0aGUgc2NyZWVuIGlzIG9uIG9yIGRvemluZy4KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmluZ2VycHJpbnQvRmluZ2VycHJpbnRTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2ZpbmdlcnByaW50L0ZpbmdlcnByaW50U2VydmljZS5qYXZhCmluZGV4IGUwYTk5NzUuLjdhYzNjNGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmluZ2VycHJpbnQvRmluZ2VycHJpbnRTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9maW5nZXJwcmludC9GaW5nZXJwcmludFNlcnZpY2UuamF2YQpAQCAtMTg5LDcgKzE4OSw3IEBACiAgICAgcHJvdGVjdGVkIHZvaWQgaGFuZGxlRW51bWVyYXRlKGxvbmcgZGV2aWNlSWQsIGludFtdIGZpbmdlcklkcywgaW50W10gZ3JvdXBJZHMpIHsKICAgICAgICAgaWYgKGZpbmdlcklkcy5sZW5ndGggIT0gZ3JvdXBJZHMubGVuZ3RoKSB7CiAgICAgICAgICAgICBTbG9nLncoVEFHLCAiZmluZ2VySWRzIGFuZCBncm91cElkcyBkaWZmZXIgaW4gbGVuZ3RoOiBmW109IgotICAgICAgICAgICAgICAgICAgICArIGZpbmdlcklkcyArICIsIGdbXT0iICsgZ3JvdXBJZHMpOworICAgICAgICAgICAgICAgICAgICArIEFycmF5cy50b1N0cmluZyhmaW5nZXJJZHMpICsgIiwgZ1tdPSIgKyBBcnJheXMudG9TdHJpbmcoZ3JvdXBJZHMpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoREVCVUcpIFNsb2cudyhUQUcsICJFbnVtZXJhdGU6IGZbXT0iICsgZmluZ2VySWRzICsgIiwgZ1tdPSIgKyBncm91cElkcyk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2ZpcmV3YWxsL1NlbmRlclBhY2thZ2VGaWx0ZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvU2VuZGVyUGFja2FnZUZpbHRlci5qYXZhCmluZGV4IGRjM2VkZDkuLjkxYzk2NzEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvU2VuZGVyUGFja2FnZUZpbHRlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZmlyZXdhbGwvU2VuZGVyUGFja2FnZUZpbHRlci5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLlJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiAKQEAgLTQ2LDcgKzQ3LDggQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIFVTRVJfU1lTVEVNIGhlcmUgaXMgbm90IGltcG9ydGFudC4gT25seSBhcHAgaWQgaXMgdXNlZCBhbmQgZ2V0UGFja2FnZVVpZCgpIHdpbGwKICAgICAgICAgICAgIC8vIHJldHVybiBhIHVpZCB3aGV0aGVyIHRoZSBhcHAgaXMgaW5zdGFsbGVkIGZvciBhIHVzZXIgb3Igbm90LgotICAgICAgICAgICAgcGFja2FnZVVpZCA9IHBtLmdldFBhY2thZ2VVaWQobVBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgICAgIHBhY2thZ2VVaWQgPSBwbS5nZXRQYWNrYWdlVWlkKG1QYWNrYWdlTmFtZSwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsCisgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIC8vIGhhbmRsZWQgYmVsb3cKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9oZG1pL0hkbWlDb250cm9sU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9oZG1pL0hkbWlDb250cm9sU2VydmljZS5qYXZhCmluZGV4IDExZmRiOTIuLjQ1OWM0N2YgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvaGRtaS9IZG1pQ29udHJvbFNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2hkbWkvSGRtaUNvbnRyb2xTZXJ2aWNlLmphdmEKQEAgLTUyMyw3ICs1MjMsOSBAQAogICAgICAgICAgICAgICAgIGNhc2UgR2xvYmFsLkhETUlfQ09OVFJPTF9BVVRPX0RFVklDRV9PRkZfRU5BQkxFRDoKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgdHlwZSA6IG1Mb2NhbERldmljZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEhkbWlDZWNMb2NhbERldmljZSBsb2NhbERldmljZSA9IG1DZWNDb250cm9sbGVyLmdldExvY2FsRGV2aWNlKHR5cGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxEZXZpY2Uuc2V0QXV0b0RldmljZU9mZihlbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbERldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxEZXZpY2Uuc2V0QXV0b0RldmljZU9mZihlbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIHByb3BhZ2F0ZSB0byBIQUwuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9pbnB1dC9JbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCBmMmQwMDMxLi5lZTkxYjYzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNzAsNyArNzAsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2V0dGluZ05vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKQEAgLTk3LDkgKzk3LDExIEBACiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CiAKIGltcG9ydCBsaWJjb3JlLmlvLlN0cmVhbXM7CiBpbXBvcnQgbGliY29yZS51dGlsLk9iamVjdHM7CkBAIC0yMTMsNiArMjE1LDggQEAKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVNb25pdG9yKGxvbmcgcHRyKTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRQb2ludGVySWNvblNoYXBlKGxvbmcgcHRyLCBpbnQgaWNvbklkKTsKICAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVSZWxvYWRQb2ludGVySWNvbnMobG9uZyBwdHIpOworICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldEN1c3RvbVBvaW50ZXJJY29uKGxvbmcgcHRyLCBQb2ludGVySWNvbiBpY29uKTsKKyAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRQb2ludGVySWNvbkRldGFjaGVkKGxvbmcgcHRyLCBib29sZWFuIGRldGFjaGVkKTsKIAogICAgIC8vIElucHV0IGV2ZW50IGluamVjdGlvbiBjb25zdGFudHMgZGVmaW5lZCBpbiBJbnB1dERpc3BhdGNoZXIuaC4KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5QVVRfRVZFTlRfSU5KRUNUSU9OX1NVQ0NFRURFRCA9IDA7CkBAIC0zMTksMTIgKzMyMywxMyBAQAogICAgICAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewogICAgICAgICAgICAgICAgIHVwZGF0ZVBvaW50ZXJTcGVlZEZyb21TZXR0aW5ncygpOwogICAgICAgICAgICAgICAgIHVwZGF0ZVNob3dUb3VjaGVzRnJvbVNldHRpbmdzKCk7Ci0gICAgICAgICAgICAgICAgbmF0aXZlUmVsb2FkUG9pbnRlckljb25zKG1QdHIpOworICAgICAgICAgICAgICAgIHVwZGF0ZUFjY2Vzc2liaWxpdHlMYXJnZVBvaW50ZXJGcm9tU2V0dGluZ3MoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSwgbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX1VTRVJfU1dJVENIRUQpLCBudWxsLCBtSGFuZGxlcik7CiAKICAgICAgICAgdXBkYXRlUG9pbnRlclNwZWVkRnJvbVNldHRpbmdzKCk7CiAgICAgICAgIHVwZGF0ZVNob3dUb3VjaGVzRnJvbVNldHRpbmdzKCk7CisgICAgICAgIHVwZGF0ZUFjY2Vzc2liaWxpdHlMYXJnZVBvaW50ZXJGcm9tU2V0dGluZ3MoKTsKICAgICB9CiAKICAgICAvLyBUT0RPKEJUKSBQYXNzIGluIHBhcmFtdGVyIGZvciBibHVldG9vdGggc3lzdGVtCkBAIC03MTcsNDAgKzcyMiwzNSBAQAogICAgICAgICBtVGVtcElucHV0RGV2aWNlc0NoYW5nZWRMaXN0ZW5lcnNUb05vdGlmeS5jbGVhcigpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBtaXNzaW5nIGtleWJvYXJkIGxheW91dHMuCi0gICAgICAgIGlmIChtTm90aWZpY2F0aW9uTWFuYWdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbnVtRnVsbEtleWJvYXJkcyA9IG1UZW1wRnVsbEtleWJvYXJkcy5zaXplKCk7Ci0gICAgICAgICAgICBib29sZWFuIG1pc3NpbmdMYXlvdXRGb3JFeHRlcm5hbEtleWJvYXJkID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sZWFuIG1pc3NpbmdMYXlvdXRGb3JFeHRlcm5hbEtleWJvYXJkQWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gbXVsdGlwbGVNaXNzaW5nTGF5b3V0c0ZvckV4dGVybmFsS2V5Ym9hcmRzQWRkZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIElucHV0RGV2aWNlIGtleWJvYXJkTWlzc2luZ0xheW91dCA9IG51bGw7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1EYXRhU3RvcmUpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUZ1bGxLZXlib2FyZHM7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbnB1dERldmljZSBpbnB1dERldmljZSA9IG1UZW1wRnVsbEtleWJvYXJkcy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsYXlvdXQgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlucHV0RGV2aWNlLmdldElkZW50aWZpZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ0xheW91dEZvckV4dGVybmFsS2V5Ym9hcmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBudW1GdWxsS2V5Ym9hcmRzQWRkZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nTGF5b3V0Rm9yRXh0ZXJuYWxLZXlib2FyZEFkZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Ym9hcmRNaXNzaW5nTGF5b3V0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRNaXNzaW5nTGF5b3V0ID0gaW5wdXREZXZpY2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVNaXNzaW5nTGF5b3V0c0ZvckV4dGVybmFsS2V5Ym9hcmRzQWRkZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgTGlzdDxJbnB1dERldmljZT4ga2V5Ym9hcmRzTWlzc2luZ0xheW91dCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICBmaW5hbCBpbnQgbnVtRnVsbEtleWJvYXJkcyA9IG1UZW1wRnVsbEtleWJvYXJkcy5zaXplKCk7CisgICAgICAgIHN5bmNocm9uaXplZCAobURhdGFTdG9yZSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1GdWxsS2V5Ym9hcmRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBJbnB1dERldmljZSBpbnB1dERldmljZSA9IG1UZW1wRnVsbEtleWJvYXJkcy5nZXQoaSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGxheW91dCA9CisgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRLZXlib2FyZExheW91dEZvcklucHV0RGV2aWNlKGlucHV0RGV2aWNlLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGxheW91dCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGxheW91dCA9IGdldERlZmF1bHRLZXlib2FyZExheW91dChpbnB1dERldmljZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudEtleWJvYXJkTGF5b3V0Rm9ySW5wdXREZXZpY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0RGV2aWNlLmdldElkZW50aWZpZXIoKSwgbGF5b3V0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAga2V5Ym9hcmRzTWlzc2luZ0xheW91dC5hZGQoaW5wdXREZXZpY2UpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtaXNzaW5nTGF5b3V0Rm9yRXh0ZXJuYWxLZXlib2FyZCkgewotICAgICAgICAgICAgICAgIGlmIChtaXNzaW5nTGF5b3V0Rm9yRXh0ZXJuYWxLZXlib2FyZEFkZGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtdWx0aXBsZU1pc3NpbmdMYXlvdXRzRm9yRXh0ZXJuYWxLZXlib2FyZHNBZGRlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHRoYW4gb25lIGtleWJvYXJkIG1pc3NpbmcgYSBsYXlvdXQsIHNvIGRyb3AgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIGF0IHRoZSBnZW5lcmljIGlucHV0IG1ldGhvZHMgcGFnZSBzbyB0aGV5IGNhbiBwaWNrIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmUgdG8gc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgc2hvd01pc3NpbmdLZXlib2FyZExheW91dE5vdGlmaWNhdGlvbihudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3dNaXNzaW5nS2V5Ym9hcmRMYXlvdXROb3RpZmljYXRpb24oa2V5Ym9hcmRNaXNzaW5nTGF5b3V0KTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1Ob3RpZmljYXRpb25NYW5hZ2VyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmICgha2V5Ym9hcmRzTWlzc2luZ0xheW91dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5Ym9hcmRzTWlzc2luZ0xheW91dC5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgbW9yZSB0aGFuIG9uZSBrZXlib2FyZCBtaXNzaW5nIGEgbGF5b3V0LCBzbyBkcm9wIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIGF0IHRoZSBnZW5lcmljIGlucHV0IG1ldGhvZHMgcGFnZSBzbyB0aGV5IGNhbiBwaWNrIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIC8vIG9uZSB0byBzZXQuCisgICAgICAgICAgICAgICAgICAgIHNob3dNaXNzaW5nS2V5Ym9hcmRMYXlvdXROb3RpZmljYXRpb24obnVsbCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2hvd01pc3NpbmdLZXlib2FyZExheW91dE5vdGlmaWNhdGlvbihrZXlib2FyZHNNaXNzaW5nTGF5b3V0LmdldCgwKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChtS2V5Ym9hcmRMYXlvdXROb3RpZmljYXRpb25TaG93bikgewogICAgICAgICAgICAgICAgIGhpZGVNaXNzaW5nS2V5Ym9hcmRMYXlvdXROb3RpZmljYXRpb24oKTsKQEAgLTc1OSw2ICs3NTksNzggQEAKICAgICAgICAgbVRlbXBGdWxsS2V5Ym9hcmRzLmNsZWFyKCk7CiAgICAgfQogCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdEtleWJvYXJkTGF5b3V0KGZpbmFsIElucHV0RGV2aWNlIGQpIHsKKyAgICAgICAgZmluYWwgTG9jYWxlIHN5c3RlbUxvY2FsZSA9IG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldENvbmZpZ3VyYXRpb24oKS5sb2NhbGU7CisgICAgICAgIC8vIElmIG91ciBsb2NhbGUgZG9lc24ndCBoYXZlIGEgbGFuZ3VhZ2UgZm9yIHNvbWUgcmVhc29uLCB0aGVuIHdlIGRvbid0IHJlYWxseSBoYXZlIGEKKyAgICAgICAgLy8gcmVhc29uYWJsZSBkZWZhdWx0LgorICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc3lzdGVtTG9jYWxlLmdldExhbmd1YWdlKCkpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBMaXN0PEtleWJvYXJkTGF5b3V0PiBsYXlvdXRzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIHZpc2l0QWxsS2V5Ym9hcmRMYXlvdXRzKG5ldyBLZXlib2FyZExheW91dFZpc2l0b3IoKSB7CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0S2V5Ym9hcmRMYXlvdXQoUmVzb3VyY2VzIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgaW50IGtleWJvYXJkTGF5b3V0UmVzSWQsIEtleWJvYXJkTGF5b3V0IGxheW91dCkgeworICAgICAgICAgICAgICAgIC8vIE9ubHkgc2VsZWN0IGEgZGVmYXVsdCB3aGVuIHdlIGtub3cgdGhlIGxheW91dCBpcyBhcHByb3ByaWF0ZS4gRm9yIG5vdywgdGhpcworICAgICAgICAgICAgICAgIC8vIG1lYW5zIGl0cyBhIGN1c3RvbSBsYXlvdXQgZm9yIGEgc3BlY2lmaWMga2V5Ym9hcmQuCisgICAgICAgICAgICAgICAgaWYgKGxheW91dC5nZXRWZW5kb3JJZCgpICE9IGQuZ2V0VmVuZG9ySWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbGF5b3V0LmdldFByb2R1Y3RJZCgpICE9IGQuZ2V0UHJvZHVjdElkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKExvY2FsZSBsIDogbGF5b3V0LmdldExvY2FsZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNDb21wYXRpYmxlTG9jYWxlKHN5c3RlbUxvY2FsZSwgbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dHMuYWRkKGxheW91dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKGxheW91dHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpcnN0IHNvcnQgc28gdGhhdCBvbmVzIHdpdGggaGlnaGVyIHByaW9yaXR5IGFyZSBsaXN0ZWQgYXQgdGhlIHRvcAorICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGxheW91dHMpOworICAgICAgICAvLyBOZXh0IHdlIHdhbnQgdG8gdHJ5IHRvIGZpbmQgYW4gZXhhY3QgbWF0Y2ggb2YgbGFuZ3VhZ2UsIGNvdW50cnkgYW5kIHZhcmlhbnQuCisgICAgICAgIGZpbmFsIGludCBOID0gbGF5b3V0cy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICAgICBLZXlib2FyZExheW91dCBsYXlvdXQgPSBsYXlvdXRzLmdldChpKTsKKyAgICAgICAgICAgIGZvciAoTG9jYWxlIGwgOiBsYXlvdXQuZ2V0TG9jYWxlcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGwuZ2V0Q291bnRyeSgpLmVxdWFscyhzeXN0ZW1Mb2NhbGUuZ2V0Q291bnRyeSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbC5nZXRWYXJpYW50KCkuZXF1YWxzKHN5c3RlbUxvY2FsZS5nZXRWYXJpYW50KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsYXlvdXQuZ2V0RGVzY3JpcHRvcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBUaGVuIHRyeSBhbiBleGFjdCBtYXRjaCBvZiBsYW5ndWFnZSBhbmQgY291bnRyeQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgS2V5Ym9hcmRMYXlvdXQgbGF5b3V0ID0gbGF5b3V0cy5nZXQoaSk7CisgICAgICAgICAgICBmb3IgKExvY2FsZSBsIDogbGF5b3V0LmdldExvY2FsZXMoKSkgeworICAgICAgICAgICAgICAgIGlmIChsLmdldENvdW50cnkoKS5lcXVhbHMoc3lzdGVtTG9jYWxlLmdldENvdW50cnkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxheW91dC5nZXREZXNjcmlwdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gR2l2ZSB1cCBhbmQganVzdCB1c2UgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgbGF5b3V0IHdpdGggbWF0Y2hpbmcgbGFuZ3VhZ2UKKyAgICAgICAgcmV0dXJuIGxheW91dHMuZ2V0KDApLmdldERlc2NyaXB0b3IoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQ29tcGF0aWJsZUxvY2FsZShMb2NhbGUgc3lzdGVtTG9jYWxlLCBMb2NhbGUga2V5Ym9hcmRMb2NhbGUpIHsKKyAgICAgICAgLy8gRGlmZmVyZW50IGxhbmd1YWdlcyBhcmUgbmV2ZXIgY29tcGF0aWJsZQorICAgICAgICBpZiAoIXN5c3RlbUxvY2FsZS5nZXRMYW5ndWFnZSgpLmVxdWFscyhrZXlib2FyZExvY2FsZS5nZXRMYW5ndWFnZSgpKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIElmIGJvdGggdGhlIHN5c3RlbSBhbmQgdGhlIGtleWJvYXJkIGxheW91dCBoYXZlIGEgY291bnRyeSBzcGVjaWZpZXIsIHRoZXkgbXVzdCBiZSBlcXVhbC4KKyAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShzeXN0ZW1Mb2NhbGUuZ2V0Q291bnRyeSgpKQorICAgICAgICAgICAgICAgICYmICFUZXh0VXRpbHMuaXNFbXB0eShrZXlib2FyZExvY2FsZS5nZXRDb3VudHJ5KCkpCisgICAgICAgICAgICAgICAgJiYgIXN5c3RlbUxvY2FsZS5nZXRDb3VudHJ5KCkuZXF1YWxzKGtleWJvYXJkTG9jYWxlLmdldENvdW50cnkoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUgLy8gQmluZGVyIGNhbGwgJiBuYXRpdmUgY2FsbGJhY2sKICAgICBwdWJsaWMgVG91Y2hDYWxpYnJhdGlvbiBnZXRUb3VjaENhbGlicmF0aW9uRm9ySW5wdXREZXZpY2UoU3RyaW5nIGlucHV0RGV2aWNlRGVzY3JpcHRvciwKICAgICAgICAgICAgIGludCBzdXJmYWNlUm90YXRpb24pIHsKQEAgLTkwOCw5ICs5ODAsOSBAQAogICAgICAgICBmaW5hbCBIYXNoU2V0PFN0cmluZz4gYXZhaWxhYmxlS2V5Ym9hcmRMYXlvdXRzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogICAgICAgICB2aXNpdEFsbEtleWJvYXJkTGF5b3V0cyhuZXcgS2V5Ym9hcmRMYXlvdXRWaXNpdG9yKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsIFN0cmluZyBkZXNjcmlwdG9yLCBTdHJpbmcgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb2xsZWN0aW9uLCBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgaW50IHByaW9yaXR5KSB7Ci0gICAgICAgICAgICAgICAgYXZhaWxhYmxlS2V5Ym9hcmRMYXlvdXRzLmFkZChkZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0S2V5Ym9hcmRMYXlvdXQoUmVzb3VyY2VzIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgaW50IGtleWJvYXJkTGF5b3V0UmVzSWQsIEtleWJvYXJkTGF5b3V0IGxheW91dCkgeworICAgICAgICAgICAgICAgIGF2YWlsYWJsZUtleWJvYXJkTGF5b3V0cy5hZGQobGF5b3V0LmdldERlc2NyaXB0b3IoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1EYXRhU3RvcmUpIHsKQEAgLTk0MiwxNSArMTAxNCw2NCBAQAogICAgICAgICBmaW5hbCBBcnJheUxpc3Q8S2V5Ym9hcmRMYXlvdXQ+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PEtleWJvYXJkTGF5b3V0PigpOwogICAgICAgICB2aXNpdEFsbEtleWJvYXJkTGF5b3V0cyhuZXcgS2V5Ym9hcmRMYXlvdXRWaXNpdG9yKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsIFN0cmluZyBkZXNjcmlwdG9yLCBTdHJpbmcgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb2xsZWN0aW9uLCBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgaW50IHByaW9yaXR5KSB7Ci0gICAgICAgICAgICAgICAgbGlzdC5hZGQobmV3IEtleWJvYXJkTGF5b3V0KGRlc2NyaXB0b3IsIGxhYmVsLCBjb2xsZWN0aW9uLCBwcmlvcml0eSkpOworICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRLZXlib2FyZExheW91dChSZXNvdXJjZXMgcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgS2V5Ym9hcmRMYXlvdXQgbGF5b3V0KSB7CisgICAgICAgICAgICAgICAgbGlzdC5hZGQobGF5b3V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiBsaXN0LnRvQXJyYXkobmV3IEtleWJvYXJkTGF5b3V0W2xpc3Quc2l6ZSgpXSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCisgICAgcHVibGljIEtleWJvYXJkTGF5b3V0W10gZ2V0S2V5Ym9hcmRMYXlvdXRzRm9ySW5wdXREZXZpY2UoCisgICAgICAgICAgICBmaW5hbCBJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgeworICAgICAgICBmaW5hbCBTdHJpbmdbXSBlbmFibGVkTGF5b3V0RGVzY3JpcHRvcnMgPQorICAgICAgICAgICAgZ2V0RW5hYmxlZEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKGlkZW50aWZpZXIpOworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8S2V5Ym9hcmRMYXlvdXQ+IGVuYWJsZWRMYXlvdXRzID0KKyAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8S2V5Ym9hcmRMYXlvdXQ+KGVuYWJsZWRMYXlvdXREZXNjcmlwdG9ycy5sZW5ndGgpOworICAgICAgICBmaW5hbCBBcnJheUxpc3Q8S2V5Ym9hcmRMYXlvdXQ+IHBvdGVudGlhbExheW91dHMgPSBuZXcgQXJyYXlMaXN0PEtleWJvYXJkTGF5b3V0PigpOworICAgICAgICB2aXNpdEFsbEtleWJvYXJkTGF5b3V0cyhuZXcgS2V5Ym9hcmRMYXlvdXRWaXNpdG9yKCkgeworICAgICAgICAgICAgYm9vbGVhbiBtSGFzU2VlbkRldmljZVNwZWNpZmljTGF5b3V0OworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0S2V5Ym9hcmRMYXlvdXQoUmVzb3VyY2VzIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgaW50IGtleWJvYXJkTGF5b3V0UmVzSWQsIEtleWJvYXJkTGF5b3V0IGxheW91dCkgeworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlmIGl0J3MgZW5hYmxlZC4gSWYgdGhlIGtleWJvYXJkIGxheW91dCBpcyBlbmFibGVkIHRoZW4gd2UgYWx3YXlzCisgICAgICAgICAgICAgICAgLy8gd2FudCB0byByZXR1cm4gaXQgYXMgYSBwb3NzaWJsZSBsYXlvdXQgZm9yIHRoZSBkZXZpY2UuCisgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcyA6IGVuYWJsZWRMYXlvdXREZXNjcmlwdG9ycykgeworICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBudWxsICYmIHMuZXF1YWxzKGxheW91dC5nZXREZXNjcmlwdG9yKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkTGF5b3V0cy5hZGQobGF5b3V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBOZXh0IGZpbmQgYW55IHBvdGVudGlhbCBsYXlvdXRzIHRoYXQgYXJlbid0IHlldCBlbmFibGVkIGZvciB0aGUgZGV2aWNlLiBGb3IKKyAgICAgICAgICAgICAgICAvLyBkZXZpY2VzIHRoYXQgaGF2ZSBzcGVjaWFsIGxheW91dHMgd2UgYXNzdW1lIHRoZXJlJ3MgYSByZWFzb24gdGhhdCB0aGUgZ2VuZXJpYworICAgICAgICAgICAgICAgIC8vIGxheW91dHMgZG9uJ3Qgd29yayBmb3IgdGhlbSBzbyB3ZSBkb24ndCB3YW50IHRvIHJldHVybiB0aGVtIHNpbmNlIGl0J3MgbGlrZWx5CisgICAgICAgICAgICAgICAgLy8gdG8gcmVzdWx0IGluIGEgcG9vciB1c2VyIGV4cGVyaWVuY2UuCisgICAgICAgICAgICAgICAgaWYgKGxheW91dC5nZXRWZW5kb3JJZCgpID09IGlkZW50aWZpZXIuZ2V0VmVuZG9ySWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbGF5b3V0LmdldFByb2R1Y3RJZCgpID09IGlkZW50aWZpZXIuZ2V0UHJvZHVjdElkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtSGFzU2VlbkRldmljZVNwZWNpZmljTGF5b3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSGFzU2VlbkRldmljZVNwZWNpZmljTGF5b3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbExheW91dHMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMYXlvdXRzLmFkZChsYXlvdXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0LmdldFZlbmRvcklkKCkgPT0gLTEgJiYgbGF5b3V0LmdldFByb2R1Y3RJZCgpID09IC0xCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbUhhc1NlZW5EZXZpY2VTcGVjaWZpY0xheW91dCkgeworICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxMYXlvdXRzLmFkZChsYXlvdXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGZpbmFsIGludCBlbmFibGVkTGF5b3V0U2l6ZSA9IGVuYWJsZWRMYXlvdXRzLnNpemUoKTsKKyAgICAgICAgZmluYWwgaW50IHBvdGVudGlhbExheW91dFNpemUgPSBwb3RlbnRpYWxMYXlvdXRzLnNpemUoKTsKKyAgICAgICAgS2V5Ym9hcmRMYXlvdXRbXSBsYXlvdXRzID0gbmV3IEtleWJvYXJkTGF5b3V0W2VuYWJsZWRMYXlvdXRTaXplICsgcG90ZW50aWFsTGF5b3V0U2l6ZV07CisgICAgICAgIGVuYWJsZWRMYXlvdXRzLnRvQXJyYXkobGF5b3V0cyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG90ZW50aWFsTGF5b3V0U2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBsYXlvdXRzW2VuYWJsZWRMYXlvdXRTaXplICsgaV0gPSBwb3RlbnRpYWxMYXlvdXRzLmdldChpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGF5b3V0czsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUgLy8gQmluZGVyIGNhbGwKICAgICBwdWJsaWMgS2V5Ym9hcmRMYXlvdXQgZ2V0S2V5Ym9hcmRMYXlvdXQoU3RyaW5nIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvcikgewogICAgICAgICBpZiAoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciBtdXN0IG5vdCBiZSBudWxsIik7CkBAIC05NTksMTMgKzEwODAsMTMgQEAKICAgICAgICAgZmluYWwgS2V5Ym9hcmRMYXlvdXRbXSByZXN1bHQgPSBuZXcgS2V5Ym9hcmRMYXlvdXRbMV07CiAgICAgICAgIHZpc2l0S2V5Ym9hcmRMYXlvdXQoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yLCBuZXcgS2V5Ym9hcmRMYXlvdXRWaXNpdG9yKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsIFN0cmluZyBkZXNjcmlwdG9yLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGFiZWwsIFN0cmluZyBjb2xsZWN0aW9uLCBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgaW50IHByaW9yaXR5KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gbmV3IEtleWJvYXJkTGF5b3V0KGRlc2NyaXB0b3IsIGxhYmVsLCBjb2xsZWN0aW9uLCBwcmlvcml0eSk7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgIGludCBrZXlib2FyZExheW91dFJlc0lkLCBLZXlib2FyZExheW91dCBsYXlvdXQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBsYXlvdXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgICAgICBpZiAocmVzdWx0WzBdID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBnZXQga2V5Ym9hcmQgbGF5b3V0IHdpdGggZGVzY3JpcHRvciAnIgorICAgICAgICAgICAgU2xvZy53KFRBRywgIkNvdWxkIG5vdCBnZXQga2V5Ym9hcmQgbGF5b3V0IHdpdGggZGVzY3JpcHRvciAnIgogICAgICAgICAgICAgICAgICAgICArIGtleWJvYXJkTGF5b3V0RGVzY3JpcHRvciArICInLiIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHRbMF07CkBAIC05NzUsNyArMTA5Niw3IEBACiAgICAgICAgIGZpbmFsIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW5wdXRNYW5hZ2VyLkFDVElPTl9RVUVSWV9LRVlCT0FSRF9MQVlPVVRTKTsKICAgICAgICAgZm9yIChSZXNvbHZlSW5mbyByZXNvbHZlSW5mbyA6IHBtLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKGludGVudCwKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBKSkgeworICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKSkgewogICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIGFjdGl2aXR5SW5mbyA9IHJlc29sdmVJbmZvLmFjdGl2aXR5SW5mbzsKICAgICAgICAgICAgIGZpbmFsIGludCBwcmlvcml0eSA9IHJlc29sdmVJbmZvLnByaW9yaXR5OwogICAgICAgICAgICAgdmlzaXRLZXlib2FyZExheW91dHNJblBhY2thZ2UocG0sIGFjdGl2aXR5SW5mbywgbnVsbCwgcHJpb3JpdHksIHZpc2l0b3IpOwpAQCAtOTkwLDcgKzExMTEsOCBAQAogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gcmVjZWl2ZXIgPSBwbS5nZXRSZWNlaXZlckluZm8oCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50TmFtZShkLnBhY2thZ2VOYW1lLCBkLnJlY2VpdmVyTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICB2aXNpdEtleWJvYXJkTGF5b3V0c0luUGFja2FnZShwbSwgcmVjZWl2ZXIsIGQua2V5Ym9hcmRMYXlvdXROYW1lLCAwLCB2aXNpdG9yKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgfQpAQCAtMTAwNiw3ICsxMTI4LDcgQEAKIAogICAgICAgICBpbnQgY29uZmlnUmVzSWQgPSBtZXRhRGF0YS5nZXRJbnQoSW5wdXRNYW5hZ2VyLk1FVEFfREFUQV9LRVlCT0FSRF9MQVlPVVRTKTsKICAgICAgICAgaWYgKGNvbmZpZ1Jlc0lkID09IDApIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIk1pc3NpbmcgbWV0YS1kYXRhICciICsgSW5wdXRNYW5hZ2VyLk1FVEFfREFUQV9LRVlCT0FSRF9MQVlPVVRTCisgICAgICAgICAgICBTbG9nLncoVEFHLCAiTWlzc2luZyBtZXRhLWRhdGEgJyIgKyBJbnB1dE1hbmFnZXIuTUVUQV9EQVRBX0tFWUJPQVJEX0xBWU9VVFMKICAgICAgICAgICAgICAgICAgICAgKyAiJyBvbiByZWNlaXZlciAiICsgcmVjZWl2ZXIucGFja2FnZU5hbWUgKyAiLyIgKyByZWNlaXZlci5uYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTA0Myw4ICsxMTY1LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWJvYXJkTGF5b3V0UmVzSWQgPSBhLmdldFJlc291cmNlSWQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5LZXlib2FyZExheW91dF9rZXlib2FyZExheW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsYW5ndWFnZVRhZ3MgPSBhLmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3R5bGVhYmxlLktleWJvYXJkTGF5b3V0X2xvY2FsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlW10gbG9jYWxlcyA9IGdldExvY2FsZXNGcm9tTGFuZ3VhZ2VUYWdzKGxhbmd1YWdlVGFncyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZpZCA9IGEuZ2V0SW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHlsZWFibGUuS2V5Ym9hcmRMYXlvdXRfdmVuZG9ySWQsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGlkID0gYS5nZXRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlYWJsZS5LZXlib2FyZExheW91dF9wcm9kdWN0SWQsIC0xKTsKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbGFiZWwgPT0gbnVsbCB8fCBrZXlib2FyZExheW91dFJlc0lkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLncoVEFHLCAiTWlzc2luZyByZXF1aXJlZCAnbmFtZScsICdsYWJlbCcgb3IgJ2tleWJvYXJkTGF5b3V0JyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJNaXNzaW5nIHJlcXVpcmVkICduYW1lJywgJ2xhYmVsJyBvciAna2V5Ym9hcmRMYXlvdXQnICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJhdHRyaWJ1dGVzIGluIGtleWJvYXJkIGxheW91dCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAicmVzb3VyY2UgZnJvbSByZWNlaXZlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyByZWNlaXZlci5wYWNrYWdlTmFtZSArICIvIiArIHJlY2VpdmVyLm5hbWUpOwpAQCAtMTA1MiwxNSArMTE4MiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRvciA9IEtleWJvYXJkTGF5b3V0RGVzY3JpcHRvci5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIucGFja2FnZU5hbWUsIHJlY2VpdmVyLm5hbWUsIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5Ym9hcmROYW1lID09IG51bGwgfHwgbmFtZS5lcXVhbHMoa2V5Ym9hcmROYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdEtleWJvYXJkTGF5b3V0KHJlc291cmNlcywgZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIGNvbGxlY3Rpb24sIGtleWJvYXJkTGF5b3V0UmVzSWQsIHByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWJvYXJkTGF5b3V0IGxheW91dCA9IG5ldyBLZXlib2FyZExheW91dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciwgbGFiZWwsIGNvbGxlY3Rpb24sIHByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVzLCB2aWQsIHBpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0S2V5Ym9hcmRMYXlvdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcywga2V5Ym9hcmRMYXlvdXRSZXNJZCwgbGF5b3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5yZWN5Y2xlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJTa2lwcGluZyB1bnJlY29nbml6ZWQgZWxlbWVudCAnIiArIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJTa2lwcGluZyB1bnJlY29nbml6ZWQgZWxlbWVudCAnIiArIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyBpbiBrZXlib2FyZCBsYXlvdXQgcmVzb3VyY2UgZnJvbSByZWNlaXZlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcmVjZWl2ZXIucGFja2FnZU5hbWUgKyAiLyIgKyByZWNlaXZlci5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTA2OSwxMSArMTIwMiwyMyBAQAogICAgICAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIExvZy53KFRBRywgIkNvdWxkIG5vdCBwYXJzZSBrZXlib2FyZCBsYXlvdXQgcmVzb3VyY2UgZnJvbSByZWNlaXZlciAiCisgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGQgbm90IHBhcnNlIGtleWJvYXJkIGxheW91dCByZXNvdXJjZSBmcm9tIHJlY2VpdmVyICIKICAgICAgICAgICAgICAgICAgICAgKyByZWNlaXZlci5wYWNrYWdlTmFtZSArICIvIiArIHJlY2VpdmVyLm5hbWUsIGV4KTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgc3RhdGljIExvY2FsZVtdIGdldExvY2FsZXNGcm9tTGFuZ3VhZ2VUYWdzKFN0cmluZyBsYW5ndWFnZVRhZ3MpIHsKKyAgICAgICAgaWYgKFRleHRVdGlscy5pc0VtcHR5KGxhbmd1YWdlVGFncykpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTG9jYWxlWzBdOworICAgICAgICB9CisgICAgICAgIFN0cmluZ1tdIHRhZ3MgPSBsYW5ndWFnZVRhZ3Muc3BsaXQoIlxcfCIpOworICAgICAgICBMb2NhbGVbXSBsb2NhbGVzID0gbmV3IExvY2FsZVt0YWdzLmxlbmd0aF07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgbG9jYWxlc1tpXSA9IExvY2FsZS5mb3JMYW5ndWFnZVRhZyh0YWdzW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbG9jYWxlczsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBCdWlsZHMgYSBsYXlvdXQgZGVzY3JpcHRvciBmb3IgdGhlIHZlbmRvci9wcm9kdWN0LiBUaGlzIHJldHVybnMgdGhlCiAgICAgICogZGVzY3JpcHRvciBmb3IgaWRzIHRoYXQgYXJlbid0IHVzZWZ1bCAoc3VjaCBhcyB0aGUgZGVmYXVsdCAwLCAwKS4KQEAgLTExMzksNyArMTI4NCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEtleWJvYXJkTGF5b3V0c0ZvcklucHV0RGV2aWNlKElucHV0RGV2aWNlSWRlbnRpZmllciBpZGVudGlmaWVyKSB7CisgICAgcHVibGljIFN0cmluZ1tdIGdldEVuYWJsZWRLZXlib2FyZExheW91dHNGb3JJbnB1dERldmljZShJbnB1dERldmljZUlkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBTdHJpbmcga2V5ID0gZ2V0TGF5b3V0RGVzY3JpcHRvcihpZGVudGlmaWVyKTsKICAgICAgICAgc3luY2hyb25pemVkIChtRGF0YVN0b3JlKSB7CiAgICAgICAgICAgICBTdHJpbmdbXSBsYXlvdXRzID0gbURhdGFTdG9yZS5nZXRLZXlib2FyZExheW91dHMoa2V5KTsKQEAgLTEyNzIsNiArMTQxNywxMSBAQAogICAgICAgICBuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24obVB0ciwgYXBwbGljYXRpb24pOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFBvaW50ZXJJY29uRGV0YWNoZWQoYm9vbGVhbiBkZXRhY2hlZCkgeworICAgICAgICBuYXRpdmVTZXRQb2ludGVySWNvbkRldGFjaGVkKG1QdHIsIGRldGFjaGVkKTsKKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBzZXRJbnB1dERpc3BhdGNoTW9kZShib29sZWFuIGVuYWJsZWQsIGJvb2xlYW4gZnJvemVuKSB7CiAgICAgICAgIG5hdGl2ZVNldElucHV0RGlzcGF0Y2hNb2RlKG1QdHIsIGVuYWJsZWQsIGZyb3plbik7CiAgICAgfQpAQCAtMTM2NSwxMyArMTUxNSwyMSBAQAogICAgICAgICAgICAgICAgIH0sIFVzZXJIYW5kbGUuVVNFUl9BTEwpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlMYXJnZVBvaW50ZXJGcm9tU2V0dGluZ3MoKSB7CisgICAgICAgIGZpbmFsIGludCBhY2Nlc3NpYmlsaXR5Q29uZmlnID0gU2V0dGluZ3MuU2VjdXJlLmdldEludEZvclVzZXIoCisgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksIFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0xBUkdFX1BPSU5URVJfSUNPTiwKKyAgICAgICAgICAgICAgICAwLCBVc2VySGFuZGxlLlVTRVJfQ1VSUkVOVCk7CisgICAgICAgIFBvaW50ZXJJY29uLnNVc2VMYXJnZUljb25zID0gKGFjY2Vzc2liaWxpdHlDb25maWcgPT0gMSk7CisgICAgICAgIG5hdGl2ZVJlbG9hZFBvaW50ZXJJY29ucyhtUHRyKTsKKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJBY2Nlc3NpYmlsaXR5TGFyZ2VQb2ludGVyU2V0dGluZ09ic2VydmVyKCkgewogICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKS5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcigKICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKFNldHRpbmdzLlNlY3VyZS5BQ0NFU1NJQklMSVRZX0xBUkdFX1BPSU5URVJfSUNPTiksIHRydWUsCiAgICAgICAgICAgICAgICAgbmV3IENvbnRlbnRPYnNlcnZlcihtSGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVSZWxvYWRQb2ludGVySWNvbnMobVB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBY2Nlc3NpYmlsaXR5TGFyZ2VQb2ludGVyRnJvbVNldHRpbmdzKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9LCBVc2VySGFuZGxlLlVTRVJfQUxMKTsKICAgICB9CkBAIC0xNDUxLDYgKzE2MDksMTIgQEAKICAgICAgICAgbmF0aXZlU2V0UG9pbnRlckljb25TaGFwZShtUHRyLCBpY29uSWQpOwogICAgIH0KIAorICAgIC8vIEJpbmRlciBjYWxsCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0Q3VzdG9tUG9pbnRlckljb24oUG9pbnRlckljb24gaWNvbikgeworICAgICAgICBuYXRpdmVTZXRDdXN0b21Qb2ludGVySWNvbihtUHRyLCBpY29uKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBkdW1wKEZpbGVEZXNjcmlwdG9yIGZkLCBQcmludFdyaXRlciBwdywgU3RyaW5nW10gYXJncykgewogICAgICAgICBpZiAobUNvbnRleHQuY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLkRVTVApCkBAIC0xNjk1LDEwICsxODU5LDEwIEBACiAgICAgICAgIGZpbmFsIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbMl07CiAgICAgICAgIHZpc2l0S2V5Ym9hcmRMYXlvdXQoa2V5Ym9hcmRMYXlvdXREZXNjcmlwdG9yLCBuZXcgS2V5Ym9hcmRMYXlvdXRWaXNpdG9yKCkgewogICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsIFN0cmluZyBkZXNjcmlwdG9yLCBTdHJpbmcgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb2xsZWN0aW9uLCBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgaW50IHByaW9yaXR5KSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgIGludCBrZXlib2FyZExheW91dFJlc0lkLCBLZXlib2FyZExheW91dCBsYXlvdXQpIHsKICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBkZXNjcmlwdG9yOworICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBsYXlvdXQuZ2V0RGVzY3JpcHRvcigpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBTdHJlYW1zLnJlYWRGdWxseShuZXcgSW5wdXRTdHJlYW1SZWFkZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLm9wZW5SYXdSZXNvdXJjZShrZXlib2FyZExheW91dFJlc0lkKSkpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CkBAIC0xNzA3LDcgKzE4NzEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgICAgaWYgKHJlc3VsdFswXSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cudyhUQUcsICJDb3VsZCBub3QgZ2V0IGtleWJvYXJkIGxheW91dCB3aXRoIGRlc2NyaXB0b3IgJyIKKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZCBub3QgZ2V0IGtleWJvYXJkIGxheW91dCB3aXRoIGRlc2NyaXB0b3IgJyIKICAgICAgICAgICAgICAgICAgICAgKyBrZXlib2FyZExheW91dERlc2NyaXB0b3IgKyAiJy4iKTsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CkBAIC0xODYwLDggKzIwMjQsOCBAQAogICAgIH0KIAogICAgIHByaXZhdGUgaW50ZXJmYWNlIEtleWJvYXJkTGF5b3V0VmlzaXRvciB7Ci0gICAgICAgIHZvaWQgdmlzaXRLZXlib2FyZExheW91dChSZXNvdXJjZXMgcmVzb3VyY2VzLCBTdHJpbmcgZGVzY3JpcHRvciwgU3RyaW5nIGxhYmVsLAotICAgICAgICAgICAgICAgIFN0cmluZyBjb2xsZWN0aW9uLCBpbnQga2V5Ym9hcmRMYXlvdXRSZXNJZCwgaW50IHByaW9yaXR5KTsKKyAgICAgICAgdm9pZCB2aXNpdEtleWJvYXJkTGF5b3V0KFJlc291cmNlcyByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgaW50IGtleWJvYXJkTGF5b3V0UmVzSWQsIEtleWJvYXJkTGF5b3V0IGxheW91dCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBJbnB1dERldmljZXNDaGFuZ2VkTGlzdGVuZXJSZWNvcmQgaW1wbGVtZW50cyBEZWF0aFJlY2lwaWVudCB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9Kb2JTY2hlZHVsZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9Kb2JTY2hlZHVsZXJTZXJ2aWNlLmphdmEKaW5kZXggNGQ3ZGY5Yy4uMzUzMGQ4MCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9qb2IvSm9iU2NoZWR1bGVyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL0pvYlNjaGVkdWxlclNlcnZpY2UuamF2YQpAQCAtMTYsMjAgKzE2LDE0IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmpvYjsKIAotaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKIGltcG9ydCBhbmRyb2lkLmFwcC5JVWlkT2JzZXJ2ZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuam9iLklKb2JTY2hlZHVsZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuam9iLkpvYkluZm87CiBpbXBvcnQgYW5kcm9pZC5hcHAuam9iLkpvYlNjaGVkdWxlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5qb2IuSm9iU2VydmljZTsKLWltcG9ydCBhbmRyb2lkLmFwcC5qb2IuSUpvYlNjaGVkdWxlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CkBAIC01Myw2ICs0Nyw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUFycmF5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLklCYXR0ZXJ5U3RhdHM7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5EZXZpY2VJZGxlQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuTG9jYWxTZXJ2aWNlczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLkFwcElkbGVDb250cm9sbGVyOwpAQCAtNjMsNiArNTgsMTUgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLlN0YXRlQ29udHJvbGxlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuam9iLmNvbnRyb2xsZXJzLlRpbWVDb250cm9sbGVyOwogCitpbXBvcnQgbGliY29yZS51dGlsLkVtcHR5QXJyYXk7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogLyoqCiAgKiBSZXNwb25zaWJsZSBmb3IgdGFraW5nIGpvYnMgcmVwcmVzZW50aW5nIHdvcmsgdG8gYmUgcGVyZm9ybWVkIGJ5IGEgY2xpZW50IGFwcCwgYW5kIGRldGVybWluaW5nCiAgKiBiYXNlZCBvbiB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkIHdoZW4gdGhhdCBqb2Igc2hvdWxkIGJlIHJ1biBhZ2FpbnN0IHRoZSBjbGllbnQgYXBwbGljYXRpb24ncwpAQCAtODgsNiArOTIsNyBAQAogICAgIHN0YXRpYyBmaW5hbCBpbnQgTVNHX0pPQl9FWFBJUkVEID0gMDsKICAgICBzdGF0aWMgZmluYWwgaW50IE1TR19DSEVDS19KT0IgPSAxOwogICAgIHN0YXRpYyBmaW5hbCBpbnQgTVNHX1NUT1BfSk9CID0gMjsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1TR19DSEVDS19KT0JfR1JFRURZID0gMzsKIAogICAgIC8vIFBvbGljeSBjb25zdGFudHMKICAgICAvKioKQEAgLTEyNSw3ICsxMzAsNyBAQAogICAgICAqLwogICAgIGZpbmFsIEFycmF5TGlzdDxKb2JTdGF0dXM+IG1QZW5kaW5nSm9icyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCi0gICAgZmluYWwgQXJyYXlMaXN0PEludGVnZXI+IG1TdGFydGVkVXNlcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgICBpbnRbXSBtU3RhcnRlZFVzZXJzID0gRW1wdHlBcnJheS5JTlQ7CiAKICAgICBmaW5hbCBKb2JIYW5kbGVyIG1IYW5kbGVyOwogICAgIGZpbmFsIEpvYlNjaGVkdWxlclN0dWIgbUpvYlNjaGVkdWxlclN0dWI7CkBAIC0xNTYsOCArMTYxLDkgQEAKICAgICBwcml2YXRlIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIG1Ccm9hZGNhc3RSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgICAgIFNsb2cuZChUQUcsICJSZWNlaWV2ZWQ6ICIgKyBpbnRlbnQuZ2V0QWN0aW9uKCkpOwotICAgICAgICAgICAgaWYgKEludGVudC5BQ1RJT05fUEFDS0FHRV9SRU1PVkVELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgYWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOworICAgICAgICAgICAgU2xvZy5kKFRBRywgIlJlY2VpZXZlZDogIiArIGFjdGlvbik7CisgICAgICAgICAgICBpZiAoSW50ZW50LkFDVElPTl9QQUNLQUdFX1JFTU9WRUQuZXF1YWxzKGFjdGlvbikpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIG91dHJpZ2h0IHVuaW5zdGFsbCByYXRoZXIgdGhhbiB0aGUgZmlyc3QgaGFsZiBvZiBhbgogICAgICAgICAgICAgICAgIC8vIGFwcCB1cGRhdGUgc2VxdWVuY2UsIGNhbmNlbCB0aGUgam9icyBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcC4KICAgICAgICAgICAgICAgICBpZiAoIWludGVudC5nZXRCb29sZWFuRXh0cmEoSW50ZW50LkVYVFJBX1JFUExBQ0lORywgZmFsc2UpKSB7CkBAIC0xNjcsMTggKzE3MywyMSBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEpvYnNGb3JVaWQodWlkUmVtb3ZlZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX1VTRVJfUkVNT1ZFRC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX1VTRVJfUkVNT1ZFRC5lcXVhbHMoYWN0aW9uKSkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLCAwKTsKICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIlJlbW92aW5nIGpvYnMgZm9yIHVzZXI6ICIgKyB1c2VySWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjYW5jZWxKb2JzRm9yVXNlcih1c2VySWQpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChQb3dlck1hbmFnZXIuQUNUSU9OX0xJR0hUX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKQotICAgICAgICAgICAgICAgICAgICB8fCBQb3dlck1hbmFnZXIuQUNUSU9OX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgeworICAgICAgICAgICAgfSBlbHNlIGlmIChQb3dlck1hbmFnZXIuQUNUSU9OX0xJR0hUX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRC5lcXVhbHMoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICB8fCBQb3dlck1hbmFnZXIuQUNUSU9OX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRC5lcXVhbHMoYWN0aW9uKSkgewogICAgICAgICAgICAgICAgIHVwZGF0ZUlkbGVNb2RlKG1Qb3dlck1hbmFnZXIgIT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgPyAobVBvd2VyTWFuYWdlci5pc0RldmljZUlkbGVNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbVBvd2VyTWFuYWdlci5pc0xpZ2h0RGV2aWNlSWRsZU1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2UpOworICAgICAgICAgICAgfSBlbHNlIGlmIChJbnRlbnQuQUNUSU9OX0VYVEVSTkFMX0FQUExJQ0FUSU9OU19BVkFJTEFCTEUuZXF1YWxzKGFjdGlvbikpIHsKKyAgICAgICAgICAgICAgICAvLyBLaWNrIG9mZiBwZW5kaW5nIGpvYnMgZm9yIGFueSBhcHBzIHRoYXQgcmUtYXBwZWFyZWQKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKE1TR19DSEVDS19KT0IpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfTsKQEAgLTIwMCwxNCArMjA5LDIwIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblN0YXJ0VXNlcihpbnQgdXNlckhhbmRsZSkgewotICAgICAgICBtU3RhcnRlZFVzZXJzLmFkZCh1c2VySGFuZGxlKTsKKyAgICAgICAgbVN0YXJ0ZWRVc2VycyA9IEFycmF5VXRpbHMuYXBwZW5kSW50KG1TdGFydGVkVXNlcnMsIHVzZXJIYW5kbGUpOworICAgICAgICAvLyBMZXQncyBraWNrIGFueSBvdXRzdGFuZGluZyBqb2JzIGZvciB0aGlzIHVzZXIuCisgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0NIRUNLX0pPQikuc2VuZFRvVGFyZ2V0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25VbmxvY2tVc2VyKGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIC8vIExldCdzIGtpY2sgYW55IG91dHN0YW5kaW5nIGpvYnMgZm9yIHRoaXMgdXNlci4KICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfQ0hFQ0tfSk9CKS5zZW5kVG9UYXJnZXQoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblN0b3BVc2VyKGludCB1c2VySGFuZGxlKSB7Ci0gICAgICAgIG1TdGFydGVkVXNlcnMucmVtb3ZlKEludGVnZXIudmFsdWVPZih1c2VySGFuZGxlKSk7CisgICAgICAgIG1TdGFydGVkVXNlcnMgPSBBcnJheVV0aWxzLnJlbW92ZUludChtU3RhcnRlZFVzZXJzLCB1c2VySGFuZGxlKTsKICAgICB9CiAKICAgICAvKioKQEAgLTM2Miw3ICszNzcsOCBAQAogICAgIH0KIAogICAgIHZvaWQgcmVwb3J0QWN0aXZlKCkgewotICAgICAgICBib29sZWFuIGFjdGl2ZSA9IGZhbHNlOworICAgICAgICAvLyBhY3RpdmUgaXMgdHJ1ZSBpZiBwZW5kaW5nIHF1ZXVlIGNvbnRhaW5zIGpvYnMgT1Igc29tZSBqb2IgaXMgcnVubmluZy4KKyAgICAgICAgYm9vbGVhbiBhY3RpdmUgPSBtUGVuZGluZ0pvYnMuc2l6ZSgpID4gMDsKICAgICAgICAgaWYgKG1QZW5kaW5nSm9icy5zaXplKCkgPD0gMCkgewogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPG1BY3RpdmVTZXJ2aWNlcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgIEpvYlNlcnZpY2VDb250ZXh0IGpzYyA9IG1BY3RpdmVTZXJ2aWNlcy5nZXQoaSk7CkBAIC0zNzIsOSArMzg4LDEwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChtTG9jYWxEZXZpY2VJZGxlQ29udHJvbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAobVJlcG9ydGVkQWN0aXZlICE9IGFjdGl2ZSkgewotICAgICAgICAgICAgICAgIG1SZXBvcnRlZEFjdGl2ZSA9IGFjdGl2ZTsKKworICAgICAgICBpZiAobVJlcG9ydGVkQWN0aXZlICE9IGFjdGl2ZSkgeworICAgICAgICAgICAgbVJlcG9ydGVkQWN0aXZlID0gYWN0aXZlOworICAgICAgICAgICAgaWYgKG1Mb2NhbERldmljZUlkbGVDb250cm9sbGVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtTG9jYWxEZXZpY2VJZGxlQ29udHJvbGxlci5zZXRKb2JzQWN0aXZlKGFjdGl2ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQxMiwxNyArNDI5LDI0IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Cb290UGhhc2UoaW50IHBoYXNlKSB7CiAgICAgICAgIGlmIChQSEFTRV9TWVNURU1fU0VSVklDRVNfUkVBRFkgPT0gcGhhc2UpIHsKLSAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGJyIGZvciBwYWNrYWdlIHJlbW92YWxzIGFuZCB1c2VyIHJlbW92YWxzLgorICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZm9yIHBhY2thZ2UgcmVtb3ZhbHMgYW5kIHVzZXIgcmVtb3ZhbHMuCiAgICAgICAgICAgICBmaW5hbCBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfUkVNT1ZFRCk7CiAgICAgICAgICAgICBmaWx0ZXIuYWRkRGF0YVNjaGVtZSgicGFja2FnZSIpOwogICAgICAgICAgICAgZ2V0Q29udGV4dCgpLnJlZ2lzdGVyUmVjZWl2ZXJBc1VzZXIoCiAgICAgICAgICAgICAgICAgICAgIG1Ccm9hZGNhc3RSZWNlaXZlciwgVXNlckhhbmRsZS5BTEwsIGZpbHRlciwgbnVsbCwgbnVsbCk7CisKICAgICAgICAgICAgIGZpbmFsIEludGVudEZpbHRlciB1c2VyRmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX1VTRVJfUkVNT1ZFRCk7CiAgICAgICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihQb3dlck1hbmFnZXIuQUNUSU9OX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRCk7CiAgICAgICAgICAgICB1c2VyRmlsdGVyLmFkZEFjdGlvbihQb3dlck1hbmFnZXIuQUNUSU9OX0xJR0hUX0RFVklDRV9JRExFX01PREVfQ0hBTkdFRCk7CiAgICAgICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlckFzVXNlcigKICAgICAgICAgICAgICAgICAgICAgbUJyb2FkY2FzdFJlY2VpdmVyLCBVc2VySGFuZGxlLkFMTCwgdXNlckZpbHRlciwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBtUG93ZXJNYW5hZ2VyID0gKFBvd2VyTWFuYWdlcilnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlBPV0VSX1NFUlZJQ0UpOworCisgICAgICAgICAgICBmaW5hbCBJbnRlbnRGaWx0ZXIgc3RvcmFnZUZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoKTsKKyAgICAgICAgICAgIHN0b3JhZ2VGaWx0ZXIuYWRkQWN0aW9uKEludGVudC5BQ1RJT05fRVhURVJOQUxfQVBQTElDQVRJT05TX0FWQUlMQUJMRSk7CisgICAgICAgICAgICBnZXRDb250ZXh0KCkucmVnaXN0ZXJSZWNlaXZlckFzVXNlcigKKyAgICAgICAgICAgICAgICAgICAgbUJyb2FkY2FzdFJlY2VpdmVyLCBVc2VySGFuZGxlLkFMTCwgc3RvcmFnZUZpbHRlciwgbnVsbCwgbnVsbCk7CisKKyAgICAgICAgICAgIG1Qb3dlck1hbmFnZXIgPSBnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShQb3dlck1hbmFnZXIuY2xhc3MpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJlZ2lzdGVyVWlkT2JzZXJ2ZXIobVVpZE9ic2VydmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLlVJRF9PQlNFUlZFUl9JRExFKTsKQEAgLTU4OSw5ICs2MTMsMTAgQEAKICAgICAgICAgaWYgKHBlcmlvZGljVG9SZXNjaGVkdWxlLmhhc0RlYWRsaW5lQ29uc3RyYWludCgpKSB7CiAgICAgICAgICAgICBydW5FYXJseSA9IE1hdGgubWF4KHBlcmlvZGljVG9SZXNjaGVkdWxlLmdldExhdGVzdFJ1blRpbWVFbGFwc2VkKCkgLSBlbGFwc2VkTm93LCAwTCk7CiAgICAgICAgIH0KLSAgICAgICAgbG9uZyBuZXdFYXJsaWVzdFJ1blRpbWVFbGFwc2VkID0gZWxhcHNlZE5vdyArIHJ1bkVhcmx5OworICAgICAgICBsb25nIGZsZXggPSBwZXJpb2RpY1RvUmVzY2hlZHVsZS5nZXRKb2IoKS5nZXRGbGV4TWlsbGlzKCk7CiAgICAgICAgIGxvbmcgcGVyaW9kID0gcGVyaW9kaWNUb1Jlc2NoZWR1bGUuZ2V0Sm9iKCkuZ2V0SW50ZXJ2YWxNaWxsaXMoKTsKLSAgICAgICAgbG9uZyBuZXdMYXRlc3RSdW50aW1lRWxhcHNlZCA9IG5ld0VhcmxpZXN0UnVuVGltZUVsYXBzZWQgKyBwZXJpb2Q7CisgICAgICAgIGxvbmcgbmV3TGF0ZXN0UnVudGltZUVsYXBzZWQgPSBlbGFwc2VkTm93ICsgcnVuRWFybHkgKyBwZXJpb2Q7CisgICAgICAgIGxvbmcgbmV3RWFybGllc3RSdW5UaW1lRWxhcHNlZCA9IG5ld0xhdGVzdFJ1bnRpbWVFbGFwc2VkIC0gZmxleDsKIAogICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgIFNsb2cudihUQUcsICJSZXNjaGVkdWxpbmcgZXhlY3V0ZWQgcGVyaW9kaWMuIE5ldyBleGVjdXRpb24gd2luZG93IFsiICsKQEAgLTYyOCw3ICs2NTMsOCBAQAogICAgICAgICAgICAgSm9iU3RhdHVzIHJlc2NoZWR1bGVkUGVyaW9kaWMgPSBnZXRSZXNjaGVkdWxlSm9iRm9yUGVyaW9kaWMoam9iU3RhdHVzKTsKICAgICAgICAgICAgIHN0YXJ0VHJhY2tpbmdKb2IocmVzY2hlZHVsZWRQZXJpb2RpYyk7CiAgICAgICAgIH0KLSAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShNU0dfQ0hFQ0tfSk9CKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgcmVwb3J0QWN0aXZlKCk7CisgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTVNHX0NIRUNLX0pPQl9HUkVFRFkpLnNlbmRUb1RhcmdldCgpOwogICAgIH0KIAogICAgIC8vIFN0YXRlQ2hhbmdlZExpc3RlbmVyIGltcGxlbWVudGF0aW9ucy4KQEAgLTY3Niw4ICs3MDIsMTggQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfQ0hFQ0tfSk9COgogICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Kb2JzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgbGlzdCBvZiBqb2JzIGFuZCBydW4gc29tZSBvZiB0aGVtIGlmIHdlIGZlZWwgaW5jbGluZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXliZVF1ZXVlUmVhZHlKb2JzRm9yRXhlY3V0aW9uTG9ja2VkSCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1SZXBvcnRlZEFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGpvYnMgYXJlIGN1cnJlbnRseSBiZWluZyBydW4sIHF1ZXVlIGFsbCByZWFkeSBqb2JzIGZvciBleGVjdXRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVSZWFkeUpvYnNGb3JFeGVjdXRpb25Mb2NrZWRIKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBsaXN0IG9mIGpvYnMgYW5kIHJ1biBzb21lIG9mIHRoZW0gaWYgd2UgZmVlbCBpbmNsaW5lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVF1ZXVlUmVhZHlKb2JzRm9yRXhlY3V0aW9uTG9ja2VkSCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTVNHX0NIRUNLX0pPQl9HUkVFRFk6CisgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUpvYnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlUmVhZHlKb2JzRm9yRXhlY3V0aW9uTG9ja2VkSCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTVNHX1NUT1BfSk9COgpAQCAtNzA5LDcgKzc0NSw2IEBACiAgICAgICAgICAgICAgICAgICAgIHN0b3BKb2JPblNlcnZpY2VDb250ZXh0TG9ja2VkKGpvYik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVwb3J0QWN0aXZlKCk7CiAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcXVldWVkSm9icyA9IG1QZW5kaW5nSm9icy5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKHF1ZXVlZEpvYnMgPT0gMCkgewpAQCAtNzMxLDcgKzc2Niw3IEBACiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIHZvaWQgbWF5YmVRdWV1ZVJlYWR5Sm9ic0ZvckV4ZWN1dGlvbkxvY2tlZEgoKSB7CiAgICAgICAgICAgICBpbnQgY2hhcmdpbmdDb3VudCA9IDA7Ci0gICAgICAgICAgICBpbnQgaWRsZUNvdW50ID0gIDA7CisgICAgICAgICAgICBpbnQgaWRsZUNvdW50ID0gMDsKICAgICAgICAgICAgIGludCBiYWNrb2ZmQ291bnQgPSAwOwogICAgICAgICAgICAgaW50IGNvbm5lY3Rpdml0eUNvdW50ID0gMDsKICAgICAgICAgICAgIExpc3Q8Sm9iU3RhdHVzPiBydW5uYWJsZUpvYnMgPSBudWxsOwpAQCAtNzg2LDcgKzgyMSw2IEBACiAgICAgICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJtYXliZVF1ZXVlUmVhZHlKb2JzRm9yRXhlY3V0aW9uTG9ja2VkSDogTm90IHJ1bm5pbmcgYW55dGhpbmcuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVwb3J0QWN0aXZlKCk7CiAgICAgICAgICAgICBpZiAoREVCVUcpIHsKICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiaWRsZT0iICsgaWRsZUNvdW50ICsgIiBjb25uZWN0aXZpdHk9IiArCiAgICAgICAgICAgICAgICAgY29ubmVjdGl2aXR5Q291bnQgKyAiIGNoYXJnaW5nPSIgKyBjaGFyZ2luZ0NvdW50ICsgIiB0b3Q9IiArCkBAIC04MDAsMTggKzgzNCwzMSBAQAogICAgICAgICAgKiAgICAgIC0gSXQncyBub3QgcGVuZGluZy4KICAgICAgICAgICogICAgICAtIEl0J3Mgbm90IGFscmVhZHkgcnVubmluZyBvbiBhIEpTQy4KICAgICAgICAgICogICAgICAtIFRoZSB1c2VyIHRoYXQgcmVxdWVzdGVkIHRoZSBqb2IgaXMgcnVubmluZy4KKyAgICAgICAgICogICAgICAtIFRoZSBjb21wb25lbnQgaXMgZW5hYmxlZCBhbmQgcnVubmFibGUuCiAgICAgICAgICAqLwogICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNSZWFkeVRvQmVFeGVjdXRlZExvY2tlZChKb2JTdGF0dXMgam9iKSB7CiAgICAgICAgICAgICBmaW5hbCBib29sZWFuIGpvYlJlYWR5ID0gam9iLmlzUmVhZHkoKTsKICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gam9iUGVuZGluZyA9IG1QZW5kaW5nSm9icy5jb250YWlucyhqb2IpOwogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBqb2JBY3RpdmUgPSBpc0N1cnJlbnRseUFjdGl2ZUxvY2tlZChqb2IpOwotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiB1c2VyUnVubmluZyA9IG1TdGFydGVkVXNlcnMuY29udGFpbnMoam9iLmdldFVzZXJJZCgpKTsKKworICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IGpvYi5nZXRVc2VySWQoKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdXNlclN0YXJ0ZWQgPSBBcnJheVV0aWxzLmNvbnRhaW5zKG1TdGFydGVkVXNlcnMsIHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGNvbXBvbmVudFByZXNlbnQ7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVudFByZXNlbnQgPSAoQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFNlcnZpY2VJbmZvKAorICAgICAgICAgICAgICAgICAgICAgICAgam9iLmdldFNlcnZpY2VDb21wb25lbnQoKSwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkKSAhPSBudWxsKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgZS5yZXRocm93QXNSdW50aW1lRXhjZXB0aW9uKCk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChERUJVRykgewogICAgICAgICAgICAgICAgIFNsb2cudihUQUcsICJpc1JlYWR5VG9CZUV4ZWN1dGVkTG9ja2VkOiAiICsgam9iLnRvU2hvcnRTdHJpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHJlYWR5PSIgKyBqb2JSZWFkeSArICIgcGVuZGluZz0iICsgam9iUGVuZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFjdGl2ZT0iICsgam9iQWN0aXZlICsgIiB1c2VyUnVubmluZz0iICsgdXNlclJ1bm5pbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFjdGl2ZT0iICsgam9iQWN0aXZlICsgIiB1c2VyU3RhcnRlZD0iICsgdXNlclN0YXJ0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiBjb21wb25lbnRQcmVzZW50PSIgKyBjb21wb25lbnRQcmVzZW50KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1c2VyUnVubmluZyAmJiBqb2JSZWFkeSAmJiAham9iUGVuZGluZyAmJiAham9iQWN0aXZlOworICAgICAgICAgICAgcmV0dXJuIHVzZXJTdGFydGVkICYmIGNvbXBvbmVudFByZXNlbnQgJiYgam9iUmVhZHkgJiYgIWpvYlBlbmRpbmcgJiYgIWpvYkFjdGl2ZTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtODg5LDcgKzkzNiw4IEBACiAgICAgICAgICAgICBmaW5hbCBJUGFja2FnZU1hbmFnZXIgcG0gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIHNlcnZpY2UgPSBqb2IuZ2V0U2VydmljZSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBTZXJ2aWNlSW5mbyBzaSA9IHBtLmdldFNlcnZpY2VJbmZvKHNlcnZpY2UsIDAsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCkpOworICAgICAgICAgICAgICAgIFNlcnZpY2VJbmZvIHNpID0gcG0uZ2V0U2VydmljZUluZm8oc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKSk7CiAgICAgICAgICAgICAgICAgaWYgKHNpID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gc3VjaCBzZXJ2aWNlICIgKyBzZXJ2aWNlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDAyLDE2ICsxMDUwLDEyIEBACiAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHlUb2tlbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9OworICAgIH0KIAogICAgIHZvaWQgZHVtcEludGVybmFsKFByaW50V3JpdGVyIHB3KSB7CiAgICAgICAgIGZpbmFsIGxvbmcgbm93ID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUpvYnMpIHsKLSAgICAgICAgICAgIHB3LnByaW50KCJTdGFydGVkIHVzZXJzOiAiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxtU3RhcnRlZFVzZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoInUiICsgbVN0YXJ0ZWRVc2Vycy5nZXQoaSkgKyAiICIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHcucHJpbnRsbigpOworICAgICAgICAgICAgcHcucHJpbnRsbigiU3RhcnRlZCB1c2VyczogIiArIEFycmF5cy50b1N0cmluZyhtU3RhcnRlZFVzZXJzKSk7CiAgICAgICAgICAgICBwdy5wcmludGxuKCJSZWdpc3RlcmVkIGpvYnM6Iik7CiAgICAgICAgICAgICBpZiAobUpvYnMuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgIEFycmF5U2V0PEpvYlN0YXR1cz4gam9icyA9IG1Kb2JzLmdldEpvYnMoKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL0pvYlN0b3JlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9Kb2JTdG9yZS5qYXZhCmluZGV4IGQ5Zjk0ZDAuLmI4YWE5ZGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL0pvYlN0b3JlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9qb2IvSm9iU3RvcmUuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXJFeGNlcHRpb247CkBAIC0zNDgsOSArMzQ5LDI3IEBACiAgICAgICAgIHByaXZhdGUgdm9pZCB3cml0ZUJ1bmRsZVRvWG1sKFBlcnNpc3RhYmxlQnVuZGxlIGV4dHJhcywgWG1sU2VyaWFsaXplciBvdXQpCiAgICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIHsKICAgICAgICAgICAgIG91dC5zdGFydFRhZyhudWxsLCBYTUxfVEFHX0VYVFJBUyk7Ci0gICAgICAgICAgICBleHRyYXMuc2F2ZVRvWG1sKG91dCk7CisgICAgICAgICAgICBQZXJzaXN0YWJsZUJ1bmRsZSBleHRyYXNDb3B5ID0gZGVlcENvcHlCdW5kbGUoZXh0cmFzLCAxMCk7CisgICAgICAgICAgICBleHRyYXNDb3B5LnNhdmVUb1htbChvdXQpOwogICAgICAgICAgICAgb3V0LmVuZFRhZyhudWxsLCBYTUxfVEFHX0VYVFJBUyk7CiAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFBlcnNpc3RhYmxlQnVuZGxlIGRlZXBDb3B5QnVuZGxlKFBlcnNpc3RhYmxlQnVuZGxlIGJ1bmRsZSwgaW50IG1heERlcHRoKSB7CisgICAgICAgICAgICBpZiAobWF4RGVwdGggPD0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUGVyc2lzdGFibGVCdW5kbGUgY29weSA9IChQZXJzaXN0YWJsZUJ1bmRsZSkgYnVuZGxlLmNsb25lKCk7CisgICAgICAgICAgICBTZXQ8U3RyaW5nPiBrZXlTZXQgPSBidW5kbGUua2V5U2V0KCk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBrZXk6IGtleVNldCkgeworICAgICAgICAgICAgICAgIFBlcnNpc3RhYmxlQnVuZGxlIGIgPSBjb3B5LmdldFBlcnNpc3RhYmxlQnVuZGxlKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBQZXJzaXN0YWJsZUJ1bmRsZSBiQ29weSA9IGRlZXBDb3B5QnVuZGxlKGIsIG1heERlcHRoLTEpOworICAgICAgICAgICAgICAgICAgICBjb3B5LnB1dFBlcnNpc3RhYmxlQnVuZGxlKGtleSwgYkNvcHkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjb3B5OworICAgICAgICB9CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFdyaXRlIG91dCBhIHRhZyB3aXRoIGRhdGEgaWRlbnRpZnlpbmcgdGhpcyBqb2IncyBjb25zdHJhaW50cy4gSWYgdGhlIGNvbnN0cmFpbnQgaXNuJ3QgaGVyZQogICAgICAgICAgKiBpdCBkb2Vzbid0IGFwcGx5LgpAQCAtMzc4LDYgKzM5Nyw3IEBACiAgICAgICAgICAgICBpZiAoam9iU3RhdHVzLmdldEpvYigpLmlzUGVyaW9kaWMoKSkgewogICAgICAgICAgICAgICAgIG91dC5zdGFydFRhZyhudWxsLCBYTUxfVEFHX1BFUklPRElDKTsKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsICJwZXJpb2QiLCBMb25nLnRvU3RyaW5nKGpvYi5nZXRJbnRlcnZhbE1pbGxpcygpKSk7CisgICAgICAgICAgICAgICAgb3V0LmF0dHJpYnV0ZShudWxsLCAiZmxleCIsIExvbmcudG9TdHJpbmcoam9iLmdldEZsZXhNaWxsaXMoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBvdXQuc3RhcnRUYWcobnVsbCwgWE1MX1RBR19PTkVPRkYpOwogICAgICAgICAgICAgfQpAQCAtNTc1LDEzICs1OTUsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbCA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGVyaW9kIik7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgcGVyaW9kTWlsbGlzID0gTG9uZy52YWx1ZU9mKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGpvYkJ1aWxkZXIuc2V0UGVyaW9kaWMocGVyaW9kTWlsbGlzKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gQXMgYSBzYW5pdHkgY2hlY2ssIGNhcCB0aGUgcmVjcmVhdGVkIHJ1biB0aW1lIHRvIGJlIG5vIGxhdGVyIHRoYW4gMiBwZXJpb2RzCisgICAgICAgICAgICAgICAgICAgIHZhbCA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmxleCIpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGZsZXhNaWxsaXMgPSAodmFsICE9IG51bGwpID8gTG9uZy52YWx1ZU9mKHZhbCkgOiBwZXJpb2RNaWxsaXM7CisgICAgICAgICAgICAgICAgICAgIC8vIEFzIGEgc2FuaXR5IGNoZWNrLCBjYXAgdGhlIHJlY3JlYXRlZCBydW4gdGltZSB0byBiZSBubyBsYXRlciB0aGFuIGZsZXgrcGVyaW9kCiAgICAgICAgICAgICAgICAgICAgIC8vIGZyb20gbm93LiBUaGlzIGlzIHRoZSBsYXRlc3QgdGhlIHBlcmlvZGljIGNvdWxkIGJlIHB1c2hlZCBvdXQuIFRoaXMgY291bGQKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFwcGVuIGlmIHRoZSBwZXJpb2RpYyByYW4gZWFybHkgKGF0IHRoZSBzdGFydCBvZiBpdHMgcGVyaW9kKSwgYW5kIHRoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGhhcHBlbiBpZiB0aGUgcGVyaW9kaWMgcmFuIGVhcmx5IChhdCBmbGV4IHRpbWUgYmVmb3JlIHBlcmlvZCksIGFuZCB0aGVuIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBkZXZpY2UgcmVib290ZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkUnVudGltZXMuc2Vjb25kID4gZWxhcHNlZE5vdyArIDIgKiBwZXJpb2RNaWxsaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2xhbXBlZEVhcmx5UnVudGltZUVsYXBzZWQgPSBlbGFwc2VkTm93ICsgcGVyaW9kTWlsbGlzOwotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjbGFtcGVkTGF0ZVJ1bnRpbWVFbGFwc2VkID0gZWxhcHNlZE5vdyArIDIgKiBwZXJpb2RNaWxsaXM7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGFwc2VkUnVudGltZXMuc2Vjb25kID4gZWxhcHNlZE5vdyArIHBlcmlvZE1pbGxpcyArIGZsZXhNaWxsaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgY2xhbXBlZExhdGVSdW50aW1lRWxhcHNlZCA9IGVsYXBzZWROb3cgKyBmbGV4TWlsbGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGVyaW9kTWlsbGlzOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBjbGFtcGVkRWFybHlSdW50aW1lRWxhcHNlZCA9IGNsYW1wZWRMYXRlUnVudGltZUVsYXBzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBmbGV4TWlsbGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiUGVyaW9kaWMgam9iIGZvciB1aWQ9JyVkJyBwZXJzaXN0ZWQgcnVuLXRpbWUgaXMiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdG9vIGJpZyBbJXMsICVzXS4gQ2xhbXBpbmcgdG8gWyVzLCVzXSIsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9jb250cm9sbGVycy9Kb2JTdGF0dXMuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL2NvbnRyb2xsZXJzL0pvYlN0YXR1cy5qYXZhCmluZGV4IGMwMjYxMWYuLjA2MGE5M2UgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL2NvbnRyb2xsZXJzL0pvYlN0YXR1cy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL2NvbnRyb2xsZXJzL0pvYlN0YXR1cy5qYXZhCkBAIC05Niw4ICs5Niw4IEBACiAgICAgICAgIGZpbmFsIGxvbmcgZWxhcHNlZE5vdyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwogCiAgICAgICAgIGlmIChqb2IuaXNQZXJpb2RpYygpKSB7Ci0gICAgICAgICAgICBlYXJsaWVzdFJ1blRpbWVFbGFwc2VkTWlsbGlzID0gZWxhcHNlZE5vdzsKICAgICAgICAgICAgIGxhdGVzdFJ1blRpbWVFbGFwc2VkTWlsbGlzID0gZWxhcHNlZE5vdyArIGpvYi5nZXRJbnRlcnZhbE1pbGxpcygpOworICAgICAgICAgICAgZWFybGllc3RSdW5UaW1lRWxhcHNlZE1pbGxpcyA9IGxhdGVzdFJ1blRpbWVFbGFwc2VkTWlsbGlzIC0gam9iLmdldEZsZXhNaWxsaXMoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVhcmxpZXN0UnVuVGltZUVsYXBzZWRNaWxsaXMgPSBqb2IuaGFzRWFybHlDb25zdHJhaW50KCkgPwogICAgICAgICAgICAgICAgICAgICBlbGFwc2VkTm93ICsgam9iLmdldE1pbkxhdGVuY3lNaWxsaXMoKSA6IE5PX0VBUkxJRVNUX1JVTlRJTUU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9jb250cm9sbGVycy9UaW1lQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9qb2IvY29udHJvbGxlcnMvVGltZUNvbnRyb2xsZXIuamF2YQppbmRleCBiM2Q3Mjg3Li4zM2IwOWUzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2pvYi9jb250cm9sbGVycy9UaW1lQ29udHJvbGxlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvam9iL2NvbnRyb2xsZXJzL1RpbWVDb250cm9sbGVyLmphdmEKQEAgLTE3LDExICsxNyw4IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5qb2IuY29udHJvbGxlcnM7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyLk9uQWxhcm1MaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIApAQCAtNDAsMTUgKzM3LDExIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBUaW1lQ29udHJvbGxlciBleHRlbmRzIFN0YXRlQ29udHJvbGxlciB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJKb2JTY2hlZHVsZXIuVGltZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9KT0JfRVhQSVJFRCA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5jb250ZW50LmpvYnNjaGVkdWxlci5KT0JfREVBRExJTkVfRVhQSVJFRCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFDVElPTl9KT0JfREVMQVlfRVhQSVJFRCA9Ci0gICAgICAgICAgICAiYW5kcm9pZC5jb250ZW50LmpvYnNjaGVkdWxlci5KT0JfREVMQVlfRVhQSVJFRCI7CiAKLSAgICAvKiogU2V0IGFuIGFsYXJtIGZvciB0aGUgbmV4dCBqb2IgZXhwaXJ5LiAqLwotICAgIHByaXZhdGUgZmluYWwgUGVuZGluZ0ludGVudCBtRGVhZGxpbmVFeHBpcmVkQWxhcm1JbnRlbnQ7Ci0gICAgLyoqIFNldCBhbiBhbGFybSBmb3IgdGhlIG5leHQgam9iIGRlbGF5IGV4cGlyeS4gVGhpcyovCi0gICAgcHJpdmF0ZSBmaW5hbCBQZW5kaW5nSW50ZW50IG1OZXh0RGVsYXlFeHBpcmVkQWxhcm1JbnRlbnQ7CisgICAgLyoqIERlYWRsaW5lIGFsYXJtIHRhZyBmb3IgbG9nZ2luZyBwdXJwb3NlcyAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIERFQURMSU5FX1RBRyA9ICJkZWFkbGluZSI7CisgICAgLyoqIERlbGF5IGFsYXJtIHRhZyBmb3IgbG9nZ2luZyBwdXJwb3NlcyAqLworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIERFTEFZX1RBRyA9ICJkZWxheSI7CiAKICAgICBwcml2YXRlIGxvbmcgbU5leHRKb2JFeHBpcmVkRWxhcHNlZE1pbGxpczsKICAgICBwcml2YXRlIGxvbmcgbU5leHREZWxheUV4cGlyZWRFbGFwc2VkTWlsbGlzOwpAQCAtNjgsMTkgKzYxLDkgQEAKIAogICAgIHByaXZhdGUgVGltZUNvbnRyb2xsZXIoU3RhdGVDaGFuZ2VkTGlzdGVuZXIgc3RhdGVDaGFuZ2VkTGlzdGVuZXIsIENvbnRleHQgY29udGV4dCkgewogICAgICAgICBzdXBlcihzdGF0ZUNoYW5nZWRMaXN0ZW5lciwgY29udGV4dCk7Ci0gICAgICAgIG1EZWFkbGluZUV4cGlyZWRBbGFybUludGVudCA9Ci0gICAgICAgICAgICAgICAgUGVuZGluZ0ludGVudC5nZXRCcm9hZGNhc3QobUNvbnRleHQsIDAgLyogaWdub3JlZCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoQUNUSU9OX0pPQl9FWFBJUkVEKSwgMCk7Ci0gICAgICAgIG1OZXh0RGVsYXlFeHBpcmVkQWxhcm1JbnRlbnQgPQotICAgICAgICAgICAgICAgIFBlbmRpbmdJbnRlbnQuZ2V0QnJvYWRjYXN0KG1Db250ZXh0LCAwIC8qIGlnbm9yZWQgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgSW50ZW50KEFDVElPTl9KT0JfREVMQVlfRVhQSVJFRCksIDApOworCiAgICAgICAgIG1OZXh0Sm9iRXhwaXJlZEVsYXBzZWRNaWxsaXMgPSBMb25nLk1BWF9WQUxVRTsKICAgICAgICAgbU5leHREZWxheUV4cGlyZWRFbGFwc2VkTWlsbGlzID0gTG9uZy5NQVhfVkFMVUU7Ci0KLSAgICAgICAgLy8gUmVnaXN0ZXIgQlIgZm9yIHRoZXNlIGludGVudHMuCi0gICAgICAgIEludGVudEZpbHRlciBpbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEFDVElPTl9KT0JfRVhQSVJFRCk7Ci0gICAgICAgIGludGVudEZpbHRlci5hZGRBY3Rpb24oQUNUSU9OX0pPQl9ERUxBWV9FWFBJUkVEKTsKLSAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihtQWxhcm1FeHBpcmVkUmVjZWl2ZXIsIGludGVudEZpbHRlcik7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMjQsNyArMjA3LDcgQEAKICAgICBwcml2YXRlIHZvaWQgc2V0RGVsYXlFeHBpcmVkQWxhcm0obG9uZyBhbGFybVRpbWVFbGFwc2VkTWlsbGlzKSB7CiAgICAgICAgIGFsYXJtVGltZUVsYXBzZWRNaWxsaXMgPSBtYXliZUFkanVzdEFsYXJtVGltZShhbGFybVRpbWVFbGFwc2VkTWlsbGlzKTsKICAgICAgICAgbU5leHREZWxheUV4cGlyZWRFbGFwc2VkTWlsbGlzID0gYWxhcm1UaW1lRWxhcHNlZE1pbGxpczsKLSAgICAgICAgdXBkYXRlQWxhcm1XaXRoUGVuZGluZ0ludGVudChtTmV4dERlbGF5RXhwaXJlZEFsYXJtSW50ZW50LCBtTmV4dERlbGF5RXhwaXJlZEVsYXBzZWRNaWxsaXMpOworICAgICAgICB1cGRhdGVBbGFybVdpdGhMaXN0ZW5lcihERUxBWV9UQUcsIG1OZXh0RGVsYXlFeHBpcmVkTGlzdGVuZXIsIG1OZXh0RGVsYXlFeHBpcmVkRWxhcHNlZE1pbGxpcyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMzUsNyArMjE4LDcgQEAKICAgICBwcml2YXRlIHZvaWQgc2V0RGVhZGxpbmVFeHBpcmVkQWxhcm0obG9uZyBhbGFybVRpbWVFbGFwc2VkTWlsbGlzKSB7CiAgICAgICAgIGFsYXJtVGltZUVsYXBzZWRNaWxsaXMgPSBtYXliZUFkanVzdEFsYXJtVGltZShhbGFybVRpbWVFbGFwc2VkTWlsbGlzKTsKICAgICAgICAgbU5leHRKb2JFeHBpcmVkRWxhcHNlZE1pbGxpcyA9IGFsYXJtVGltZUVsYXBzZWRNaWxsaXM7Ci0gICAgICAgIHVwZGF0ZUFsYXJtV2l0aFBlbmRpbmdJbnRlbnQobURlYWRsaW5lRXhwaXJlZEFsYXJtSW50ZW50LCBtTmV4dEpvYkV4cGlyZWRFbGFwc2VkTWlsbGlzKTsKKyAgICAgICAgdXBkYXRlQWxhcm1XaXRoTGlzdGVuZXIoREVBRExJTkVfVEFHLCBtRGVhZGxpbmVFeHBpcmVkTGlzdGVuZXIsIG1OZXh0Sm9iRXhwaXJlZEVsYXBzZWRNaWxsaXMpOwogICAgIH0KIAogICAgIHByaXZhdGUgbG9uZyBtYXliZUFkanVzdEFsYXJtVGltZShsb25nIHByb3Bvc2VkQWxhcm1UaW1lRWxhcHNlZE1pbGxpcykgewpAQCAtMjQ2LDMxICsyMjksMzkgQEAKICAgICAgICAgcmV0dXJuIHByb3Bvc2VkQWxhcm1UaW1lRWxhcHNlZE1pbGxpczsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlQWxhcm1XaXRoUGVuZGluZ0ludGVudChQZW5kaW5nSW50ZW50IHBpLCBsb25nIGFsYXJtVGltZUVsYXBzZWQpIHsKKyAgICBwcml2YXRlIHZvaWQgdXBkYXRlQWxhcm1XaXRoTGlzdGVuZXIoU3RyaW5nIHRhZywgT25BbGFybUxpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgbG9uZyBhbGFybVRpbWVFbGFwc2VkKSB7CiAgICAgICAgIGVuc3VyZUFsYXJtU2VydmljZSgpOwogICAgICAgICBpZiAoYWxhcm1UaW1lRWxhcHNlZCA9PSBMb25nLk1BWF9WQUxVRSkgewotICAgICAgICAgICAgbUFsYXJtU2VydmljZS5jYW5jZWwocGkpOworICAgICAgICAgICAgbUFsYXJtU2VydmljZS5jYW5jZWwobGlzdGVuZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIlNldHRpbmcgIiArIHBpLmdldEludGVudCgpLmdldEFjdGlvbigpICsgIiBmb3I6ICIgKyBhbGFybVRpbWVFbGFwc2VkKTsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiU2V0dGluZyAiICsgdGFnICsgIiBmb3I6ICIgKyBhbGFybVRpbWVFbGFwc2VkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1BbGFybVNlcnZpY2Uuc2V0KEFsYXJtTWFuYWdlci5FTEFQU0VEX1JFQUxUSU1FLCBhbGFybVRpbWVFbGFwc2VkLCBwaSk7CisgICAgICAgICAgICBtQWxhcm1TZXJ2aWNlLnNldChBbGFybU1hbmFnZXIuRUxBUFNFRF9SRUFMVElNRSwgYWxhcm1UaW1lRWxhcHNlZCwKKyAgICAgICAgICAgICAgICAgICAgdGFnLCBsaXN0ZW5lciwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIGZpbmFsIEJyb2FkY2FzdFJlY2VpdmVyIG1BbGFybUV4cGlyZWRSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKKyAgICAvLyBKb2IvZGVsYXkgZXhwaXJhdGlvbiBhbGFybSBoYW5kbGluZworCisgICAgcHJpdmF0ZSBmaW5hbCBPbkFsYXJtTGlzdGVuZXIgbURlYWRsaW5lRXhwaXJlZExpc3RlbmVyID0gbmV3IE9uQWxhcm1MaXN0ZW5lcigpIHsKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKKyAgICAgICAgcHVibGljIHZvaWQgb25BbGFybSgpIHsKICAgICAgICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJKdXN0IHJlY2VpdmVkIGFsYXJtOiAiICsgaW50ZW50LmdldEFjdGlvbigpKTsKKyAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiRGVhZGxpbmUtZXhwaXJlZCBhbGFybSBmaXJlZCIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gQSBqb2IgaGFzIGp1c3QgZXhwaXJlZCwgc28gd2UgcnVuIHRocm91Z2ggdGhlIGxpc3Qgb2Ygam9icyB0aGF0IHdlIGhhdmUgYW5kCi0gICAgICAgICAgICAvLyBub3RpZnkgb3VyIFN0YXRlQ2hhbmdlZExpc3RlbmVyLgotICAgICAgICAgICAgaWYgKEFDVElPTl9KT0JfRVhQSVJFRC5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgICAgICAgICAgIGNoZWNrRXhwaXJlZERlYWRsaW5lc0FuZFJlc2V0QWxhcm0oKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoQUNUSU9OX0pPQl9ERUxBWV9FWFBJUkVELmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgY2hlY2tFeHBpcmVkRGVsYXlzQW5kUmVzZXRBbGFybSgpOworICAgICAgICAgICAgY2hlY2tFeHBpcmVkRGVhZGxpbmVzQW5kUmVzZXRBbGFybSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHByaXZhdGUgZmluYWwgT25BbGFybUxpc3RlbmVyIG1OZXh0RGVsYXlFeHBpcmVkTGlzdGVuZXIgPSBuZXcgT25BbGFybUxpc3RlbmVyKCkgeworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25BbGFybSgpIHsKKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJEZWxheS1leHBpcmVkIGFsYXJtIGZpcmVkIik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja0V4cGlyZWREZWxheXNBbmRSZXNldEFsYXJtKCk7CiAgICAgICAgIH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2xvY2F0aW9uL0dwc0xvY2F0aW9uUHJvdmlkZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhCmluZGV4IGJjOWY1MjAuLjg4YWIyYzYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbG9jYXRpb24vR3BzTG9jYXRpb25Qcm92aWRlci5qYXZhCkBAIC04OCw2ICs4OCw3IEBACiBpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwpAQCAtMTU5OSw3ICsxNjAwLDcgQEAKICAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsKICAgICAgICAgICAgIGNhc2UgR1BTX1JFUVVFU1RfQUdQU19EQVRBX0NPTk46CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJHUFNfUkVRVUVTVF9BR1BTX0RBVEFfQ09OTiIpOwotICAgICAgICAgICAgICAgIExvZy52KFRBRywgIlJlY2VpdmVkIFNVUEwgSVAgYWRkcltdOiAiICsgaXBhZGRyKTsKKyAgICAgICAgICAgICAgICBMb2cudihUQUcsICJSZWNlaXZlZCBTVVBMIElQIGFkZHJbXTogIiArIEFycmF5cy50b1N0cmluZyhpcGFkZHIpKTsKICAgICAgICAgICAgICAgICBJbmV0QWRkcmVzcyBjb25uZWN0aW9uSXBBZGRyZXNzID0gbnVsbDsKICAgICAgICAgICAgICAgICBpZiAoaXBhZGRyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbWVkaWEvTWVkaWFSZXNvdXJjZU1vbml0b3JTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL21lZGlhL01lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGQ2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL21lZGlhL01lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIubWVkaWE7CisKK2ltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5tZWRpYS5JTWVkaWFSZXNvdXJjZU1vbml0b3I7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzeXN0ZW0gc2VydmljZSB0aGF0IG1vbml0b3JzIG1lZGlhIHJlc291cmNlIHVzYWdlLiAqLworcHVibGljIGNsYXNzIE1lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZSBleHRlbmRzIFN5c3RlbVNlcnZpY2UgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFSZXNvdXJjZU1vbml0b3IiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVklDRV9OQU1FID0gIm1lZGlhX3Jlc291cmNlX21vbml0b3IiOworCisgICAgLyoKKyAgICAgKiAgUmVzb3VyY2UgdHlwZXMuIFNob3VsZCBiZSBpbiBzeW5jIHdpdGg6CisgICAgICogIGZyYW1ld29ya3MvYXYvbWVkaWEvbGlibWVkaWEvTWVkaWFSZXNvdXJjZS5jcHAKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTT1VSQ0VfQVVESU9fQ09ERUMgPSAiYXVkaW8tY29kZWMiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNPVVJDRV9WSURFT19DT0RFQyA9ICJ2aWRlby1jb2RlYyI7CisKKyAgICBwcml2YXRlIGZpbmFsIE1lZGlhUmVzb3VyY2VNb25pdG9ySW1wbCBtTWVkaWFSZXNvdXJjZU1vbml0b3JJbXBsOworCisgICAgcHVibGljIE1lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIG1NZWRpYVJlc291cmNlTW9uaXRvckltcGwgPSBuZXcgTWVkaWFSZXNvdXJjZU1vbml0b3JJbXBsKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKKyAgICAgICAgcHVibGlzaEJpbmRlclNlcnZpY2UoU0VSVklDRV9OQU1FLCBtTWVkaWFSZXNvdXJjZU1vbml0b3JJbXBsKTsKKyAgICB9CisKKyAgICBjbGFzcyBNZWRpYVJlc291cmNlTW9uaXRvckltcGwgZXh0ZW5kcyBJTWVkaWFSZXNvdXJjZU1vbml0b3IuU3R1YiB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBub3RpZnlSZXNvdXJjZUdyYW50ZWQoaW50IHBpZCwgU3RyaW5nIHR5cGUsIFN0cmluZyBzdWJUeXBlLCBsb25nIHZhbHVlKQorICAgICAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIm5vdGlmeVJlc291cmNlR3JhbnRlZChwaWQ9IiArIHBpZCArICIsIHR5cGU9IiArIHR5cGUgKyAiLCBzdWJUeXBlPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgc3ViVHlwZSArICIsIHZhbHVlPSIgKyB2YWx1ZSArICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZyBwa2dOYW1lc1tdID0gZ2V0UGFja2FnZU5hbWVzRnJvbVBpZChwaWQpOworICAgICAgICAgICAgICAgIEludGVnZXIgcmVzb3VyY2VUeXBlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBpZiAoUkVTT1VSQ0VfQVVESU9fQ09ERUMuZXF1YWxzKHN1YlR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVHlwZSA9IEludGVudC5FWFRSQV9NRURJQV9SRVNPVVJDRV9UWVBFX0FVRElPX0NPREVDOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUkVTT1VSQ0VfVklERU9fQ09ERUMuZXF1YWxzKHN1YlR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVHlwZSA9IEludGVudC5FWFRSQV9NRURJQV9SRVNPVVJDRV9UWVBFX1ZJREVPX0NPREVDOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGtnTmFtZXMgIT0gbnVsbCAmJiByZXNvdXJjZVR5cGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX01FRElBX1JFU09VUkNFX0dSQU5URUQpOworICAgICAgICAgICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX1BBQ0tBR0VTLCBwa2dOYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfTUVESUFfUkVTT1VSQ0VfVFlQRSwgcmVzb3VyY2VUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGV4dCgpLnNlbmRCcm9hZGNhc3RBc1VzZXIoaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKEFjdGl2aXR5TWFuYWdlci5nZXRDdXJyZW50VXNlcigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVDRUlWRV9NRURJQV9SRVNPVVJDRV9VU0FHRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIFN0cmluZ1tdIGdldFBhY2thZ2VOYW1lc0Zyb21QaWQoaW50IHBpZCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmb3IgKEFjdGl2aXR5TWFuYWdlci5SdW5uaW5nQXBwUHJvY2Vzc0luZm8gcHJvYyA6CisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLmdldFJ1bm5pbmdBcHBQcm9jZXNzZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHJvYy5waWQgPT0gcGlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvYy5wa2dMaXN0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiQWN0aXZpdHlNYW5hZ2VyLmdldFJ1bm5pbmdBcHBQcm9jZXNzZXMoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9tZWRpYS9NZWRpYVNlc3Npb25TZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL21lZGlhL01lZGlhU2Vzc2lvblNlcnZpY2UuamF2YQppbmRleCBkNWMzMTEzLi43NDVmNDc2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL21lZGlhL01lZGlhU2Vzc2lvblNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL21lZGlhL01lZGlhU2Vzc2lvblNlcnZpY2UuamF2YQpAQCAtNzY3LDcgKzc2Nyw3IEBACiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgbWVkaWEgYnV0dG9uIHJlY2VpdmVyIHRvIGZhbGwgYmFjayBvbgogICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIG5vbi1wbGF5aW5nIHNlc3Npb25zIGZvciBkaXNwYXRjaGluZwotICAgICAgICAgICAgICAgICAgICBVc2VyUmVjb3JkIHVyID0gbVVzZXJSZWNvcmRzLmdldChBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIFVzZXJSZWNvcmQgdXIgPSBtVXNlclJlY29yZHMuZ2V0KG1DdXJyZW50VXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB1c2VOb3RQbGF5aW5nU2Vzc2lvbnMgPSAodXIgPT0gbnVsbCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXIubUxhc3RNZWRpYUJ1dHRvblJlY2VpdmVyID09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdXIubVJlc3RvcmVkTWVkaWFCdXR0b25SZWNlaXZlciA9PSBudWxsKTsKQEAgLTk0OSw4ICs5NDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbUtleUV2ZW50UmVjZWl2ZXIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBMYXVuY2ggdGhlIGxhc3QgUGVuZGluZ0ludGVudCB3ZSBoYWQgd2l0aCBwcmlvcml0eQotICAgICAgICAgICAgICAgIGludCB1c2VySWQgPSBBY3Rpdml0eU1hbmFnZXIuZ2V0Q3VycmVudFVzZXIoKTsKLSAgICAgICAgICAgICAgICBVc2VyUmVjb3JkIHVzZXIgPSBtVXNlclJlY29yZHMuZ2V0KHVzZXJJZCk7CisgICAgICAgICAgICAgICAgVXNlclJlY29yZCB1c2VyID0gbVVzZXJSZWNvcmRzLmdldChtQ3VycmVudFVzZXJJZCk7CiAgICAgICAgICAgICAgICAgaWYgKHVzZXIgIT0gbnVsbCAmJiAodXNlci5tTGFzdE1lZGlhQnV0dG9uUmVjZWl2ZXIgIT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdXNlci5tUmVzdG9yZWRNZWRpYUJ1dHRvblJlY2VpdmVyICE9IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykgewpAQCAtOTY3LDExICs5NjYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyLm1MYXN0TWVkaWFCdXR0b25SZWNlaXZlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5tTGFzdE1lZGlhQnV0dG9uUmVjZWl2ZXIuc2VuZChnZXRDb250ZXh0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkV2FrZUxvY2sgPyBtS2V5RXZlbnRSZWNlaXZlci5tTGFzdFRpbWVvdXRJZCA6IC0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFCdXR0b25JbnRlbnQsIG1LZXlFdmVudFJlY2VpdmVyLCBudWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhQnV0dG9uSW50ZW50LCBtS2V5RXZlbnRSZWNlaXZlciwgbUhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUJ1dHRvbkludGVudC5zZXRDb21wb25lbnQodXNlci5tUmVzdG9yZWRNZWRpYUJ1dHRvblJlY2VpdmVyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuc2VuZEJyb2FkY2FzdEFzVXNlcihtZWRpYUJ1dHRvbkludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKHVzZXJJZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVzZXJIYW5kbGUobUN1cnJlbnRVc2VySWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoQ2FuY2VsZWRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmkoVEFHLCAiRXJyb3Igc2VuZGluZyBrZXkgZXZlbnQgdG8gbWVkaWEgYnV0dG9uIHJlY2VpdmVyICIKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1BvbGljeU1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMmFjMGJhNi4uNDc2NDMwMCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1BvbGljeU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1BvbGljeU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTIxODcsNyArMjE4Nyw4IEBACiAgICAgICAgIC8vIHVwZGF0ZSBydWxlcyBmb3IgYWxsIGluc3RhbGxlZCBhcHBsaWNhdGlvbnMKICAgICAgICAgZmluYWwgTGlzdDxVc2VySW5mbz4gdXNlcnMgPSBtVXNlck1hbmFnZXIuZ2V0VXNlcnMoKTsKICAgICAgICAgZmluYWwgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGFwcHMgPSBwbS5nZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoCi0gICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpOworICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTCisgICAgICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUpOwogCiAgICAgICAgIGZvciAoVXNlckluZm8gdXNlciA6IHVzZXJzKSB7CiAgICAgICAgICAgICBmb3IgKEFwcGxpY2F0aW9uSW5mbyBhcHAgOiBhcHBzKSB7CkBAIC0yMjMzLDkgKzIyMzQsMTEgQEAKICAgICAgICAgZmluYWwgU3RyaW5nW10gcGFja2FnZXMgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VzRm9yVWlkKHVpZCk7CiAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpOwogCi0gICAgICAgIGZvciAoU3RyaW5nIHBhY2thZ2VOYW1lIDogcGFja2FnZXMpIHsKLSAgICAgICAgICAgIGlmICghbVVzYWdlU3RhdHMuaXNBcHBJZGxlKHBhY2thZ2VOYW1lLCB1aWQsIHVzZXJJZCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghQXJyYXlVdGlscy5pc0VtcHR5KHBhY2thZ2VzKSkgeworICAgICAgICAgICAgZm9yIChTdHJpbmcgcGFja2FnZU5hbWUgOiBwYWNrYWdlcykgeworICAgICAgICAgICAgICAgIGlmICghbVVzYWdlU3RhdHMuaXNBcHBJZGxlKHBhY2thZ2VOYW1lLCB1aWQsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIzMzIsNyArMjMzNSw4IEBACiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgdm9pZCBvbkFwcElkbGVTdGF0ZUNoYW5nZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkLCBib29sZWFuIGlkbGUpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtUnVsZXNMb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJ1bGVGb3JBcHBJZGxlTG9ja2VkKHVpZCk7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzQWNjZXNzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNBY2Nlc3MuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JhNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzQWNjZXNzLmphdmEKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLm5ldDsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVBRF9ORVRXT1JLX1VTQUdFX0hJU1RPUlk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LlRyYWZmaWNTdGF0cy5VSURfUkVNT1ZFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQuVHJhZmZpY1N0YXRzLlVJRF9URVRIRVJJTkc7CisKK2ltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OworaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CitpbXBvcnQgYW5kcm9pZC5hcHAuQXBwT3BzTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VBZG1pbkluZm87CitpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKworLyoqIFV0aWxpdHkgbWV0aG9kcyBmb3IgY29udHJvbGxpbmcgYWNjZXNzIHRvIG5ldHdvcmsgc3RhdHMgQVBJcy4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBOZXR3b3JrU3RhdHNBY2Nlc3MgeworICAgIHByaXZhdGUgTmV0d29ya1N0YXRzQWNjZXNzKCkge30KKworICAgIC8qKgorICAgICAqIFJlcHJlc2VudHMgYW4gYWNjZXNzIGxldmVsIGZvciB0aGUgbmV0d29yayB1c2FnZSBoaXN0b3J5IGFuZCBzdGF0aXN0aWNzIEFQSXMuCisgICAgICoKKyAgICAgKiA8cD5BY2Nlc3MgbGV2ZWxzIGFyZSBpbiBpbmNyZWFzaW5nIG9yZGVyOyB0aGF0IGlzLCBpdCBpcyByZWFzb25hYmxlIHRvIGNoZWNrIGFjY2VzcyBieQorICAgICAqIHZlcmlmeWluZyB0aGF0IHRoZSBjYWxsZXIncyBhY2Nlc3MgbGV2ZWwgaXMgYXQgbGVhc3QgdGhlIG1pbmltdW0gcmVxdWlyZWQgbGV2ZWwuCisgICAgICovCisgICAgQEludERlZih7CisgICAgICAgICAgICBMZXZlbC5ERUZBVUxULAorICAgICAgICAgICAgTGV2ZWwuVVNFUiwKKyAgICAgICAgICAgIExldmVsLkRFVklDRSwKKyAgICB9KQorICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBwdWJsaWMgQGludGVyZmFjZSBMZXZlbCB7CisgICAgICAgIC8qKgorICAgICAgICAgKiBEZWZhdWx0LCB1bnByaXZpbGVnZWQgYWNjZXNzIGxldmVsLgorICAgICAgICAgKgorICAgICAgICAgKiA8cD5DYW4gb25seSBhY2Nlc3MgdXNhZ2UgZm9yIG9uZSdzIG93biBVSUQuCisgICAgICAgICAqCisgICAgICAgICAqIDxwPkV2ZXJ5IGFwcCB3aWxsIGhhdmUgYXQgbGVhc3QgdGhpcyBhY2Nlc3MgbGV2ZWwuCisgICAgICAgICAqLworICAgICAgICBpbnQgREVGQVVMVCA9IDA7CisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFjY2VzcyBsZXZlbCBmb3IgYXBwcyB3aGljaCBjYW4gYWNjZXNzIHVzYWdlIGZvciBhbnkgYXBwIHJ1bm5pbmcgaW4gdGhlIHNhbWUgdXNlci4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+R3JhbnRlZCB0bzoKKyAgICAgICAgICogPHVsPgorICAgICAgICAgKiA8bGk+QXBwcyB3aXRoIHRoZSBQQUNLQUdFX1VTQUdFX1NUQVRTIHBlcm1pc3Npb24gZ3JhbnRlZC4gTm90ZSB0aGF0IHRoaXMgaXMgYW4gQXBwT3BzIGJpdAorICAgICAgICAgKiBzbyBpdCBpcyBub3QgbmVjZXNzYXJpbHkgc3VmZmljaWVudCB0byBkZWNsYXJlIHRoaXMgaW4gdGhlIG1hbmlmZXN0LgorICAgICAgICAgKiA8bGk+QXBwcyB3aXRoIHRoZSAoc2lnbmF0dXJlL3ByaXZpbGVnZWQpIFJFQURfTkVUV09SS19VU0FHRV9ISVNUT1JZIHBlcm1pc3Npb24uCisgICAgICAgICAqIDxsaT5Qcm9maWxlIG93bmVycy4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICovCisgICAgICAgIGludCBVU0VSID0gMTsKKworICAgICAgICAvKioKKyAgICAgICAgICogQWNjZXNzIGxldmVsIGZvciBhcHBzIHdoaWNoIGNhbiBhY2Nlc3MgdXNhZ2UgZm9yIGFueSBhcHAgb24gdGhlIGRldmljZSwgaW5jbHVkaW5nIGFwcHMKKyAgICAgICAgICogcnVubmluZyBvbiBvdGhlciB1c2Vycy9wcm9maWxlcy4KKyAgICAgICAgICoKKyAgICAgICAgICogPHA+R3JhbnRlZCB0bzoKKyAgICAgICAgICogPHVsPgorICAgICAgICAgKiA8bGk+RGV2aWNlIG93bmVycy4KKyAgICAgICAgICogPGxpPkNhcnJpZXItcHJpdmlsZWdlZCBhcHBsaWNhdGlvbnMuCisgICAgICAgICAqIDxsaT5UaGUgc3lzdGVtIFVJRC4KKyAgICAgICAgICogPC91bD4KKyAgICAgICAgICovCisgICAgICAgIGludCBERVZJQ0UgPSAyOworICAgIH0KKworICAgIC8qKiBSZXR1cm5zIHRoZSB7QGxpbmsgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsfSBmb3IgdGhlIGdpdmVuIGNhbGxlci4gKi8KKyAgICBwdWJsaWMgc3RhdGljIEBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwgaW50IGNoZWNrQWNjZXNzTGV2ZWwoCisgICAgICAgICAgICBDb250ZXh0IGNvbnRleHQsIGludCBjYWxsaW5nVWlkLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UpIHsKKyAgICAgICAgZmluYWwgRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsIGRwbWkgPSBMb2NhbFNlcnZpY2VzLmdldFNlcnZpY2UoCisgICAgICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsLmNsYXNzKTsKKyAgICAgICAgZmluYWwgVGVsZXBob255TWFuYWdlciB0bSA9IChUZWxlcGhvbnlNYW5hZ2VyKQorICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlRFTEVQSE9OWV9TRVJWSUNFKTsKKyAgICAgICAgYm9vbGVhbiBoYXNDYXJyaWVyUHJpdmlsZWdlcyA9IHRtICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICB0bS5jaGVja0NhcnJpZXJQcml2aWxlZ2VzRm9yUGFja2FnZShjYWxsaW5nUGFja2FnZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIFRlbGVwaG9ueU1hbmFnZXIuQ0FSUklFUl9QUklWSUxFR0VfU1RBVFVTX0hBU19BQ0NFU1M7CisgICAgICAgIGJvb2xlYW4gaXNEZXZpY2VPd25lciA9IGRwbWkgIT0gbnVsbCAmJiBkcG1pLmlzQWN0aXZlQWRtaW5XaXRoUG9saWN5KGNhbGxpbmdVaWQsCisgICAgICAgICAgICAgICAgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX0RFVklDRV9PV05FUik7CisgICAgICAgIGlmIChoYXNDYXJyaWVyUHJpdmlsZWdlcyB8fCBpc0RldmljZU93bmVyCisgICAgICAgICAgICAgICAgfHwgVXNlckhhbmRsZS5nZXRBcHBJZChjYWxsaW5nVWlkKSA9PSBhbmRyb2lkLm9zLlByb2Nlc3MuU1lTVEVNX1VJRCkgeworICAgICAgICAgICAgLy8gQ2Fycmllci1wcml2aWxlZ2VkIGFwcHMgYW5kIGRldmljZSBvd25lcnMsIGFuZCB0aGUgc3lzdGVtIGNhbiBhY2Nlc3MgZGF0YSB1c2FnZSBmb3IKKyAgICAgICAgICAgIC8vIGFsbCBhcHBzIG9uIHRoZSBkZXZpY2UuCisgICAgICAgICAgICByZXR1cm4gTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gaXNQcm9maWxlT3duZXIgPSBkcG1pICE9IG51bGwgJiYgZHBtaS5pc0FjdGl2ZUFkbWluV2l0aFBvbGljeShjYWxsaW5nVWlkLAorICAgICAgICAgICAgICAgIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKKyAgICAgICAgaWYgKGhhc0FwcE9wc1Blcm1pc3Npb24oY29udGV4dCwgY2FsbGluZ1VpZCwgY2FsbGluZ1BhY2thZ2UpIHx8IGlzUHJvZmlsZU93bmVyCisgICAgICAgICAgICAgICAgfHwgY29udGV4dC5jaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uKFJFQURfTkVUV09SS19VU0FHRV9ISVNUT1JZKSA9PQorICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgeworICAgICAgICAgICAgLy8gQXBwcyB3aXRoIHRoZSBBcHBPcHMgcGVybWlzc2lvbiwgcHJvZmlsZSBvd25lcnMsIGFuZCBhcHBzIHdpdGggdGhlIHByaXZpbGVnZWQKKyAgICAgICAgICAgIC8vIHBlcm1pc3Npb24gY2FuIGFjY2VzcyBkYXRhIHVzYWdlIGZvciBhbGwgYXBwcyBpbiB0aGlzIHVzZXIvcHJvZmlsZS4KKyAgICAgICAgICAgIHJldHVybiBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuVVNFUjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEV2ZXJ5b25lIGVsc2UgZ2V0cyBkZWZhdWx0IGFjY2VzcyAob25seSB0byB0aGVpciBvd24gVUlEKS4KKyAgICAgICAgcmV0dXJuIE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERUZBVUxUOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gY2FsbGVyIHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gVUlEIHdoZW4gdGhlIGNhbGxlciBoYXMKKyAgICAgKiB0aGUgZ2l2ZW4ge0BsaW5rIE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbH0uCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQWNjZXNzaWJsZVRvVXNlcihpbnQgdWlkLCBpbnQgY2FsbGVyVWlkLAorICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwpIHsKKyAgICAgICAgc3dpdGNoIChhY2Nlc3NMZXZlbCkgeworICAgICAgICAgICAgY2FzZSBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuREVWSUNFOgorICAgICAgICAgICAgICAgIC8vIERldmljZS1sZXZlbCBhY2Nlc3MgLSBjYW4gYWNjZXNzIHVzYWdlIGZvciBhbnkgdWlkLgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY2FzZSBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuVVNFUjoKKyAgICAgICAgICAgICAgICAvLyBVc2VyLWxldmVsIGFjY2VzcyAtIGNhbiBhY2Nlc3MgdXNhZ2UgZm9yIGFueSBhcHAgcnVubmluZyBpbiB0aGUgc2FtZSB1c2VyLCBhbG9uZworICAgICAgICAgICAgICAgIC8vIHdpdGggc29tZSBzcGVjaWFsIHVpZHMgKHN5c3RlbSwgcmVtb3ZlZCwgb3IgdGV0aGVyaW5nKS4KKyAgICAgICAgICAgICAgICByZXR1cm4gdWlkID09IGFuZHJvaWQub3MuUHJvY2Vzcy5TWVNURU1fVUlEIHx8IHVpZCA9PSBVSURfUkVNT1ZFRAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgdWlkID09IFVJRF9URVRIRVJJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCkgPT0gVXNlckhhbmRsZS5nZXRVc2VySWQoY2FsbGVyVWlkKTsKKyAgICAgICAgICAgIGNhc2UgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFRkFVTFQ6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgYWNjZXNzIGxldmVsIC0gY2FuIG9ubHkgYWNjZXNzIG9uZSdzIG93biB1c2FnZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gdWlkID09IGNhbGxlclVpZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzQXBwT3BzUGVybWlzc2lvbigKKyAgICAgICAgICAgIENvbnRleHQgY29udGV4dCwgaW50IGNhbGxpbmdVaWQsIFN0cmluZyBjYWxsaW5nUGFja2FnZSkgeworICAgICAgICBpZiAoY2FsbGluZ1BhY2thZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgQXBwT3BzTWFuYWdlciBhcHBPcHMgPSAoQXBwT3BzTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAorICAgICAgICAgICAgICAgICAgICBDb250ZXh0LkFQUF9PUFNfU0VSVklDRSk7CisKKyAgICAgICAgICAgIGZpbmFsIGludCBtb2RlID0gYXBwT3BzLmNoZWNrT3AoQXBwT3BzTWFuYWdlci5PUF9HRVRfVVNBR0VfU1RBVFMsCisgICAgICAgICAgICAgICAgICAgIGNhbGxpbmdVaWQsIGNhbGxpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEFwcE9wc01hbmFnZXIuTU9ERV9ERUZBVUxUKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZSBpcyB0byBjaGVjayBpZiBQYWNrYWdlTWFuYWdlciBoYXMgZ2l2ZW4gdGhlIGFwcAorICAgICAgICAgICAgICAgIC8vIHBlcm1pc3Npb24uCisgICAgICAgICAgICAgICAgZmluYWwgaW50IHBlcm1pc3Npb25DaGVjayA9IGNvbnRleHQuY2hlY2tDYWxsaW5nUGVybWlzc2lvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uUEFDS0FHRV9VU0FHRV9TVEFUUyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25DaGVjayA9PSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKG1vZGUgPT0gQXBwT3BzTWFuYWdlci5NT0RFX0FMTE9XRUQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNDb2xsZWN0aW9uLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNDb2xsZWN0aW9uLmphdmEKaW5kZXggMTViNjhjNy4uMTAyNjk1ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzQ29sbGVjdGlvbi5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c0NvbGxlY3Rpb24uamF2YQpAQCAtMjIsMjQgKzIyLDE4IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdvcmtTdGF0cy5UQUdfTk9ORTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQuTmV0d29ya1N0YXRzLlVJRF9BTEw7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LlRyYWZmaWNTdGF0cy5VSURfUkVNT1ZFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQuVHJhZmZpY1N0YXRzLlVJRF9URVRIRVJJTkc7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzLlNFQ09ORF9JTl9NSUxMSVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzLldFRUtfSU5fTUlMTElTOwogCi1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSWRlbnRpdHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1N0YXRzOwogaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtTdGF0c0hpc3Rvcnk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1RlbXBsYXRlOwogaW1wb3J0IGFuZHJvaWQubmV0LlRyYWZmaWNTdGF0czsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BdG9taWNGaWxlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5JbnRBcnJheTsKIAotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLQogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuQXJyYXlVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkZpbGVSb3RhdG9yOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuSW5kZW50aW5nUHJpbnRXcml0ZXI7CkBAIC00Nyw2ICs0MSw4IEBACiBpbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmNvbGxlY3QuTGlzdHM7CiBpbXBvcnQgY29tLmdvb2dsZS5hbmRyb2lkLmNvbGxlY3QuTWFwczsKIAoraW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKKwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkRhdGFJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07CkBAIC0xMzYsMTIgKzEzMiwxMiBAQAogICAgICAgICByZXR1cm4gbVN0YXJ0TWlsbGlzID09IExvbmcuTUFYX1ZBTFVFICYmIG1FbmRNaWxsaXMgPT0gTG9uZy5NSU5fVkFMVUU7CiAgICAgfQogCi0gICAgcHVibGljIGludFtdIGdldFJlbGV2YW50VWlkcygpIHsKKyAgICBwdWJsaWMgaW50W10gZ2V0UmVsZXZhbnRVaWRzKEBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwgaW50IGFjY2Vzc0xldmVsKSB7CiAgICAgICAgIGZpbmFsIGludCBjYWxsZXJVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICBJbnRBcnJheSB1aWRzID0gbmV3IEludEFycmF5KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVN0YXRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBLZXkga2V5ID0gbVN0YXRzLmtleUF0KGkpOwotICAgICAgICAgICAgaWYgKGlzQWNjZXNzaWJsZVRvVXNlcihrZXkudWlkLCBjYWxsZXJVaWQpKSB7CisgICAgICAgICAgICBpZiAoTmV0d29ya1N0YXRzQWNjZXNzLmlzQWNjZXNzaWJsZVRvVXNlcihrZXkudWlkLCBjYWxsZXJVaWQsIGFjY2Vzc0xldmVsKSkgewogICAgICAgICAgICAgICAgIGludCBqID0gdWlkcy5iaW5hcnlTZWFyY2goa2V5LnVpZCk7CiAKICAgICAgICAgICAgICAgICBpZiAoaiA8IDApIHsKQEAgLTE1OCw4ICsxNTQsMTAgQEAKICAgICAgKiB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMuCiAgICAgICovCiAgICAgcHVibGljIE5ldHdvcmtTdGF0c0hpc3RvcnkgZ2V0SGlzdG9yeSgKLSAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgaW50IHVpZCwgaW50IHNldCwgaW50IHRhZywgaW50IGZpZWxkcykgewotICAgICAgICByZXR1cm4gZ2V0SGlzdG9yeSh0ZW1wbGF0ZSwgdWlkLCBzZXQsIHRhZywgZmllbGRzLCBMb25nLk1JTl9WQUxVRSwgTG9uZy5NQVhfVkFMVUUpOworICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBpbnQgdWlkLCBpbnQgc2V0LCBpbnQgdGFnLCBpbnQgZmllbGRzLAorICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwpIHsKKyAgICAgICAgcmV0dXJuIGdldEhpc3RvcnkodGVtcGxhdGUsIHVpZCwgc2V0LCB0YWcsIGZpZWxkcywgTG9uZy5NSU5fVkFMVUUsIExvbmcuTUFYX1ZBTFVFLAorICAgICAgICAgICAgICAgIGFjY2Vzc0xldmVsKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE2Nyw5ICsxNjUsMTAgQEAKICAgICAgKiB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMuCiAgICAgICovCiAgICAgcHVibGljIE5ldHdvcmtTdGF0c0hpc3RvcnkgZ2V0SGlzdG9yeSgKLSAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgaW50IHVpZCwgaW50IHNldCwgaW50IHRhZywgaW50IGZpZWxkcywgbG9uZyBzdGFydCwgbG9uZyBlbmQpIHsKKyAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgaW50IHVpZCwgaW50IHNldCwgaW50IHRhZywgaW50IGZpZWxkcywgbG9uZyBzdGFydCwgbG9uZyBlbmQsCisgICAgICAgICAgICBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBhY2Nlc3NMZXZlbCkgewogICAgICAgICBmaW5hbCBpbnQgY2FsbGVyVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgaWYgKCFpc0FjY2Vzc2libGVUb1VzZXIodWlkLCBjYWxsZXJVaWQpKSB7CisgICAgICAgIGlmICghTmV0d29ya1N0YXRzQWNjZXNzLmlzQWNjZXNzaWJsZVRvVXNlcih1aWQsIGNhbGxlclVpZCwgYWNjZXNzTGV2ZWwpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIk5ldHdvcmsgc3RhdHMgaGlzdG9yeSBvZiB1aWQgIiArIHVpZAogICAgICAgICAgICAgICAgICAgICArICIgaXMgZm9yYmlkZGVuIGZvciBjYWxsZXIgIiArIGNhbGxlclVpZCk7CiAgICAgICAgIH0KQEAgLTE5NSw3ICsxOTQsOCBAQAogICAgICAqIFN1bW1hcml6ZSBhbGwge0BsaW5rIE5ldHdvcmtTdGF0c0hpc3Rvcnl9IGluIHRoaXMgY29sbGVjdGlvbiB3aGljaCBtYXRjaAogICAgICAqIHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVycy4KICAgICAgKi8KLSAgICBwdWJsaWMgTmV0d29ya1N0YXRzIGdldFN1bW1hcnkoTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCkgeworICAgIHB1YmxpYyBOZXR3b3JrU3RhdHMgZ2V0U3VtbWFyeShOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLAorICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwpIHsKICAgICAgICAgZmluYWwgbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKIAogICAgICAgICBmaW5hbCBOZXR3b3JrU3RhdHMgc3RhdHMgPSBuZXcgTmV0d29ya1N0YXRzKGVuZCAtIHN0YXJ0LCAyNCk7CkBAIC0yMDgsNyArMjA4LDggQEAKICAgICAgICAgZmluYWwgaW50IGNhbGxlclVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVN0YXRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBmaW5hbCBLZXkga2V5ID0gbVN0YXRzLmtleUF0KGkpOwotICAgICAgICAgICAgaWYgKHRlbXBsYXRlTWF0Y2hlcyh0ZW1wbGF0ZSwga2V5LmlkZW50KSAmJiBpc0FjY2Vzc2libGVUb1VzZXIoa2V5LnVpZCwgY2FsbGVyVWlkKQorICAgICAgICAgICAgaWYgKHRlbXBsYXRlTWF0Y2hlcyh0ZW1wbGF0ZSwga2V5LmlkZW50KQorICAgICAgICAgICAgICAgICAgICAmJiBOZXR3b3JrU3RhdHNBY2Nlc3MuaXNBY2Nlc3NpYmxlVG9Vc2VyKGtleS51aWQsIGNhbGxlclVpZCwgYWNjZXNzTGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICYmIGtleS5zZXQgPCBOZXR3b3JrU3RhdHMuU0VUX0RFQlVHX1NUQVJUKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgTmV0d29ya1N0YXRzSGlzdG9yeSB2YWx1ZSA9IG1TdGF0cy52YWx1ZUF0KGkpOwogICAgICAgICAgICAgICAgIGhpc3RvcnlFbnRyeSA9IHZhbHVlLmdldFZhbHVlcyhzdGFydCwgZW5kLCBub3csIGhpc3RvcnlFbnRyeSk7CkBAIC01NzAsMTIgKzU3MSw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNjZXNzaWJsZVRvVXNlcihpbnQgdWlkLCBpbnQgY2FsbGVyVWlkKSB7Ci0gICAgICAgIHJldHVybiBVc2VySGFuZGxlLmdldEFwcElkKGNhbGxlclVpZCkgPT0gYW5kcm9pZC5vcy5Qcm9jZXNzLlNZU1RFTV9VSUQgfHwKLSAgICAgICAgICAgICAgICB1aWQgPT0gYW5kcm9pZC5vcy5Qcm9jZXNzLlNZU1RFTV9VSUQgfHwgdWlkID09IFVJRF9SRU1PVkVEIHx8IHVpZCA9PSBVSURfVEVUSEVSSU5HCi0gICAgICAgICAgICAgICAgfHwgVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKSA9PSBVc2VySGFuZGxlLmdldFVzZXJJZChjYWxsZXJVaWQpOwotICAgIH0KLQogICAgIC8qKgogICAgICAqIFRlc3QgaWYgZ2l2ZW4ge0BsaW5rIE5ldHdvcmtUZW1wbGF0ZX0gbWF0Y2hlcyBhbnkge0BsaW5rIE5ldHdvcmtJZGVudGl0eX0KICAgICAgKiBpbiB0aGUgZ2l2ZW4ge0BsaW5rIE5ldHdvcmtJZGVudGl0eVNldH0uCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNSZWNvcmRlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzUmVjb3JkZXIuamF2YQppbmRleCA2NDkwODY1Li5jMDkxOTYwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNSZWNvcmRlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1JlY29yZGVyLmphdmEKQEAgLTExNiw3ICsxMTYsOCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBOZXR3b3JrU3RhdHMuRW50cnkgZ2V0VG90YWxTaW5jZUJvb3RMb2NrZWQoTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlKSB7Ci0gICAgICAgIHJldHVybiBtU2luY2VCb290LmdldFN1bW1hcnkodGVtcGxhdGUsIExvbmcuTUlOX1ZBTFVFLCBMb25nLk1BWF9WQUxVRSkuZ2V0VG90YWwobnVsbCk7CisgICAgICAgIHJldHVybiBtU2luY2VCb290LmdldFN1bW1hcnkodGVtcGxhdGUsIExvbmcuTUlOX1ZBTFVFLCBMb25nLk1BWF9WQUxVRSwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuREVWSUNFKS5nZXRUb3RhbChudWxsKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1NlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c1NlcnZpY2UuamF2YQppbmRleCA4NDQ5MzQ4Li5iMWQ2Zjg5IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzU2VydmljZS5qYXZhCkBAIC02MiwxMyArNjIsOSBAQAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIuTmV0d29ya01hbmFnZW1lbnRTb2NrZXRUYWdnZXIucmVzZXRLZXJuZWxVaWRTdGF0czsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLk5ldHdvcmtNYW5hZ2VtZW50U29ja2V0VGFnZ2VyLnNldEtlcm5lbENvdW50ZXJTZXQ7CiAKLWltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OwogaW1wb3J0IGFuZHJvaWQuYXBwLkFsYXJtTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLklBbGFybU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuUGVuZGluZ0ludGVudDsKLWltcG9ydCBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VBZG1pbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwpAQCAtOTcsOSArOTMsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuSU5ldHdvcmtNYW5hZ2VtZW50U2VydmljZTsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKQEAgLTEyMiw3ICsxMTYsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuRmlsZVJvdGF0b3I7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5JbmRlbnRpbmdQcmludFdyaXRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuRXZlbnRMb2dUYWdzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5jb25uZWN0aXZpdHkuVGV0aGVyaW5nOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtNDg0LDE4ICs0NzcsMjIgQEAKIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgaW50W10gZ2V0UmVsZXZhbnRVaWRzKCkgewotICAgICAgICAgICAgICAgIGVuZm9yY2VQZXJtaXNzaW9uRm9yTWFuYWdlZEFkbWluKG1DYWxsaW5nUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldFVpZENvbXBsZXRlKCkuZ2V0UmVsZXZhbnRVaWRzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFVpZENvbXBsZXRlKCkuZ2V0UmVsZXZhbnRVaWRzKGNoZWNrQWNjZXNzTGV2ZWwobUNhbGxpbmdQYWNrYWdlKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIE5ldHdvcmtTdGF0cyBnZXREZXZpY2VTdW1tYXJ5Rm9yTmV0d29yayhOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGxvbmcgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgIGxvbmcgZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5mb3JjZVBlcm1pc3Npb24obUNhbGxpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBhY2Nlc3NMZXZlbCA9IGNoZWNrQWNjZXNzTGV2ZWwobUNhbGxpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBpZiAoYWNjZXNzTGV2ZWwgPCBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuREVWSUNFKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ2FsbGluZyBwYWNrYWdlICIgKyBtQ2FsbGluZ1BhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgY2Fubm90IGFjY2VzcyBkZXZpY2UtbGV2ZWwgbmV0d29yayBzdGF0cyIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHMgcmVzdWx0ID0gbmV3IE5ldHdvcmtTdGF0cyhlbmQgLSBzdGFydCwgMSk7CiAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5jb21iaW5lQWxsVmFsdWVzKGludGVybmFsR2V0U3VtbWFyeUZvck5ldHdvcmsodGVtcGxhdGUsIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmNvbWJpbmVBbGxWYWx1ZXMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxHZXRTdW1tYXJ5Rm9yTmV0d29yayh0ZW1wbGF0ZSwgc3RhcnQsIGVuZCwgYWNjZXNzTGV2ZWwpKTsKICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTA1LDIzICs1MDIsMjUgQEAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIE5ldHdvcmtTdGF0cyBnZXRTdW1tYXJ5Rm9yTmV0d29yaygKICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCkgewotICAgICAgICAgICAgICAgIGVuZm9yY2VQZXJtaXNzaW9uKG1DYWxsaW5nUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsR2V0U3VtbWFyeUZvck5ldHdvcmsodGVtcGxhdGUsIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgIEBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwgaW50IGFjY2Vzc0xldmVsID0gY2hlY2tBY2Nlc3NMZXZlbChtQ2FsbGluZ1BhY2thZ2UpOworICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEdldFN1bW1hcnlGb3JOZXR3b3JrKHRlbXBsYXRlLCBzdGFydCwgZW5kLCBhY2Nlc3NMZXZlbCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIE5ldHdvcmtTdGF0c0hpc3RvcnkgZ2V0SGlzdG9yeUZvck5ldHdvcmsoTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBpbnQgZmllbGRzKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsR2V0SGlzdG9yeUZvck5ldHdvcmsodGVtcGxhdGUsIGZpZWxkcyk7CisgICAgICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwgPSBjaGVja0FjY2Vzc0xldmVsKG1DYWxsaW5nUGFja2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsR2V0SGlzdG9yeUZvck5ldHdvcmsodGVtcGxhdGUsIGZpZWxkcywgYWNjZXNzTGV2ZWwpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBOZXR3b3JrU3RhdHMgZ2V0U3VtbWFyeUZvckFsbFVpZCgKICAgICAgICAgICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCwgYm9vbGVhbiBpbmNsdWRlVGFncykgewotICAgICAgICAgICAgICAgIGVuZm9yY2VQZXJtaXNzaW9uRm9yTWFuYWdlZEFkbWluKG1DYWxsaW5nUGFja2FnZSk7Ci0gICAgICAgICAgICAgICAgZmluYWwgTmV0d29ya1N0YXRzIHN0YXRzID0gZ2V0VWlkQ29tcGxldGUoKS5nZXRTdW1tYXJ5KHRlbXBsYXRlLCBzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBhY2Nlc3NMZXZlbCA9IGNoZWNrQWNjZXNzTGV2ZWwobUNhbGxpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBOZXR3b3JrU3RhdHMgc3RhdHMgPQorICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VWlkQ29tcGxldGUoKS5nZXRTdW1tYXJ5KHRlbXBsYXRlLCBzdGFydCwgZW5kLCBhY2Nlc3NMZXZlbCk7CiAgICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVUYWdzKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIE5ldHdvcmtTdGF0cyB0YWdTdGF0cyA9IGdldFVpZFRhZ0NvbXBsZXRlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3VtbWFyeSh0ZW1wbGF0ZSwgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN1bW1hcnkodGVtcGxhdGUsIHN0YXJ0LCBlbmQsIGFjY2Vzc0xldmVsKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdHMuY29tYmluZUFsbFZhbHVlcyh0YWdTdGF0cyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBzdGF0czsKQEAgLTUzMCwxMSArNTI5LDEzIEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBOZXR3b3JrU3RhdHNIaXN0b3J5IGdldEhpc3RvcnlGb3JVaWQoCiAgICAgICAgICAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgaW50IHVpZCwgaW50IHNldCwgaW50IHRhZywgaW50IGZpZWxkcykgewotICAgICAgICAgICAgICAgIGVuZm9yY2VQZXJtaXNzaW9uRm9yTWFuYWdlZEFkbWluKG1DYWxsaW5nUGFja2FnZSk7CisgICAgICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwgPSBjaGVja0FjY2Vzc0xldmVsKG1DYWxsaW5nUGFja2FnZSk7CiAgICAgICAgICAgICAgICAgaWYgKHRhZyA9PSBUQUdfTk9ORSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VWlkQ29tcGxldGUoKS5nZXRIaXN0b3J5KHRlbXBsYXRlLCB1aWQsIHNldCwgdGFnLCBmaWVsZHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VWlkQ29tcGxldGUoKS5nZXRIaXN0b3J5KHRlbXBsYXRlLCB1aWQsIHNldCwgdGFnLCBmaWVsZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzTGV2ZWwpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRVaWRUYWdDb21wbGV0ZSgpLmdldEhpc3RvcnkodGVtcGxhdGUsIHVpZCwgc2V0LCB0YWcsIGZpZWxkcyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRVaWRUYWdDb21wbGV0ZSgpLmdldEhpc3RvcnkodGVtcGxhdGUsIHVpZCwgc2V0LCB0YWcsIGZpZWxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NMZXZlbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC01NDIsMTIgKzU0MywxMyBAQAogICAgICAgICAgICAgcHVibGljIE5ldHdvcmtTdGF0c0hpc3RvcnkgZ2V0SGlzdG9yeUludGVydmFsRm9yVWlkKAogICAgICAgICAgICAgICAgICAgICBOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGludCB1aWQsIGludCBzZXQsIGludCB0YWcsIGludCBmaWVsZHMsCiAgICAgICAgICAgICAgICAgICAgIGxvbmcgc3RhcnQsIGxvbmcgZW5kKSB7Ci0gICAgICAgICAgICAgICAgZW5mb3JjZVBlcm1pc3Npb25Gb3JNYW5hZ2VkQWRtaW4obUNhbGxpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBhY2Nlc3NMZXZlbCA9IGNoZWNrQWNjZXNzTGV2ZWwobUNhbGxpbmdQYWNrYWdlKTsKICAgICAgICAgICAgICAgICBpZiAodGFnID09IFRBR19OT05FKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRVaWRDb21wbGV0ZSgpLmdldEhpc3RvcnkodGVtcGxhdGUsIHVpZCwgc2V0LCB0YWcsIGZpZWxkcywgc3RhcnQsIGVuZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRVaWRDb21wbGV0ZSgpLmdldEhpc3RvcnkodGVtcGxhdGUsIHVpZCwgc2V0LCB0YWcsIGZpZWxkcywgc3RhcnQsIGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NMZXZlbCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFVpZFRhZ0NvbXBsZXRlKCkuZ2V0SGlzdG9yeSh0ZW1wbGF0ZSwgdWlkLCBzZXQsIHRhZywgZmllbGRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIGFjY2Vzc0xldmVsKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTU1OSw4MCArNTYxLDQyIEBACiAgICAgICAgIH07CiAgICAgfQogCi0gICAgcHJpdmF0ZSBib29sZWFuIGhhc0FwcE9wc1Blcm1pc3Npb24oU3RyaW5nIGNhbGxpbmdQYWNrYWdlKSB7Ci0gICAgICAgIGZpbmFsIGludCBjYWxsaW5nVWlkID0gQmluZGVyLmdldENhbGxpbmdVaWQoKTsKLSAgICAgICAgYm9vbGVhbiBhcHBPcHNBbGxvdyA9IGZhbHNlOwotICAgICAgICBpZiAoY2FsbGluZ1BhY2thZ2UgIT0gbnVsbCkgewotICAgICAgICAgICAgQXBwT3BzTWFuYWdlciBhcHBPcHMgPSAoQXBwT3BzTWFuYWdlcikgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZSgKLSAgICAgICAgICAgICAgICAgICAgQ29udGV4dC5BUFBfT1BTX1NFUlZJQ0UpOwotCi0gICAgICAgICAgICBmaW5hbCBpbnQgbW9kZSA9IGFwcE9wcy5jaGVja09wKEFwcE9wc01hbmFnZXIuT1BfR0VUX1VTQUdFX1NUQVRTLAotICAgICAgICAgICAgICAgICAgICBjYWxsaW5nVWlkLCBjYWxsaW5nUGFja2FnZSk7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBBcHBPcHNNYW5hZ2VyLk1PREVfREVGQVVMVCkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGhlcmUgaXMgdG8gY2hlY2sgaWYgUGFja2FnZU1hbmFnZXIgaGFzIGdpdmVuIHRoZSBhcHAKLSAgICAgICAgICAgICAgICAvLyBwZXJtaXNzaW9uLgotICAgICAgICAgICAgICAgIGZpbmFsIGludCBwZXJtaXNzaW9uQ2hlY2sgPSBtQ29udGV4dC5jaGVja0NhbGxpbmdQZXJtaXNzaW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFuaWZlc3QucGVybWlzc2lvbi5QQUNLQUdFX1VTQUdFX1NUQVRTKTsKLSAgICAgICAgICAgICAgICBhcHBPcHNBbGxvdyA9IHBlcm1pc3Npb25DaGVjayA9PSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBPcHNBbGxvdyA9IChtb2RlID09IEFwcE9wc01hbmFnZXIuTU9ERV9BTExPV0VEKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYXBwT3BzQWxsb3c7CisgICAgcHJpdmF0ZSBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBjaGVja0FjY2Vzc0xldmVsKFN0cmluZyBjYWxsaW5nUGFja2FnZSkgeworICAgICAgICByZXR1cm4gTmV0d29ya1N0YXRzQWNjZXNzLmNoZWNrQWNjZXNzTGV2ZWwoCisgICAgICAgICAgICAgICAgbUNvbnRleHQsIEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIGNhbGxpbmdQYWNrYWdlKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZW5mb3JjZVBlcm1pc3Npb25Gb3JNYW5hZ2VkQWRtaW4oU3RyaW5nIGNhbGxpbmdQYWNrYWdlKSB7Ci0gICAgICAgIGJvb2xlYW4gaGFzUGVybWlzc2lvbiA9IGhhc0FwcE9wc1Blcm1pc3Npb24oY2FsbGluZ1BhY2thZ2UpOwotICAgICAgICBpZiAoIWhhc1Blcm1pc3Npb24pIHsKLSAgICAgICAgICAgIC8vIFByb2ZpbGUgYW5kIGRldmljZSBvd25lcnMgYXJlIGV4ZW1wdCBmcm9tIHBlcm1pc3Npb24gY2hlY2tpbmcuCi0gICAgICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgICAgICBmaW5hbCBEZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWwgZHBtaSA9IExvY2FsU2VydmljZXMuZ2V0U2VydmljZSgKLSAgICAgICAgICAgICAgICAgICAgRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsLmNsYXNzKTsKLQotICAgICAgICAgICAgLy8gRGV2aWNlIG93bmVycyBhcmUgYWxzbyBwcm9maWxlIG93bmVycyBzbyBpdCBpcyBlbm91Z2ggdG8gY2hlY2sgZm9yIHRoYXQuCi0gICAgICAgICAgICBpZiAoZHBtaSAhPSBudWxsICYmIGRwbWkuaXNBY3RpdmVBZG1pbldpdGhQb2xpY3koY2FsbGluZ1VpZCwKLSAgICAgICAgICAgICAgICAgICAgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX1BST0ZJTEVfT1dORVIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghaGFzUGVybWlzc2lvbikgewotICAgICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKFJFQURfTkVUV09SS19VU0FHRV9ISVNUT1JZLCBUQUcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VQZXJtaXNzaW9uKFN0cmluZyBjYWxsaW5nUGFja2FnZSkgewotICAgICAgICBib29sZWFuIGFwcE9wc0FsbG93ID0gaGFzQXBwT3BzUGVybWlzc2lvbihjYWxsaW5nUGFja2FnZSk7Ci0gICAgICAgIGlmICghYXBwT3BzQWxsb3cpIHsKLSAgICAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihSRUFEX05FVFdPUktfVVNBR0VfSElTVE9SWSwgVEFHKTsKLSAgICAgICAgfQotICAgIH0KLQotCiAgICAgLyoqCiAgICAgICogUmV0dXJuIG5ldHdvcmsgc3VtbWFyeSwgc3BsaWNpbmcgYmV0d2VlbiBERVYgYW5kIFhUIHN0YXRzIHdoZW4KICAgICAgKiBhcHByb3ByaWF0ZS4KICAgICAgKi8KICAgICBwcml2YXRlIE5ldHdvcmtTdGF0cyBpbnRlcm5hbEdldFN1bW1hcnlGb3JOZXR3b3JrKAotICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCkgeworICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHN0YXJ0LCBsb25nIGVuZCwKKyAgICAgICAgICAgIEBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwgaW50IGFjY2Vzc0xldmVsKSB7CiAgICAgICAgIC8vIFdlJ3ZlIGJlZW4gdXNpbmcgcHVyZSBYVCBzdGF0cyBsb25nIGVub3VnaCB0aGF0IHdlIG5vIGxvbmdlciBuZWVkIHRvCiAgICAgICAgIC8vIHNwbGljZSBERVYgYW5kIFhUIHRvZ2V0aGVyLgotICAgICAgICByZXR1cm4gbVh0U3RhdHNDYWNoZWQuZ2V0U3VtbWFyeSh0ZW1wbGF0ZSwgc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybiBtWHRTdGF0c0NhY2hlZC5nZXRTdW1tYXJ5KHRlbXBsYXRlLCBzdGFydCwgZW5kLCBhY2Nlc3NMZXZlbCk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogUmV0dXJuIG5ldHdvcmsgaGlzdG9yeSwgc3BsaWNpbmcgYmV0d2VlbiBERVYgYW5kIFhUIHN0YXRzIHdoZW4KICAgICAgKiBhcHByb3ByaWF0ZS4KICAgICAgKi8KLSAgICBwcml2YXRlIE5ldHdvcmtTdGF0c0hpc3RvcnkgaW50ZXJuYWxHZXRIaXN0b3J5Rm9yTmV0d29yayhOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGludCBmaWVsZHMpIHsKKyAgICBwcml2YXRlIE5ldHdvcmtTdGF0c0hpc3RvcnkgaW50ZXJuYWxHZXRIaXN0b3J5Rm9yTmV0d29yayhOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGludCBmaWVsZHMsCisgICAgICAgICAgICBATmV0d29ya1N0YXRzQWNjZXNzLkxldmVsIGludCBhY2Nlc3NMZXZlbCkgewogICAgICAgICAvLyBXZSd2ZSBiZWVuIHVzaW5nIHB1cmUgWFQgc3RhdHMgbG9uZyBlbm91Z2ggdGhhdCB3ZSBubyBsb25nZXIgbmVlZCB0bwogICAgICAgICAvLyBzcGxpY2UgREVWIGFuZCBYVCB0b2dldGhlci4KLSAgICAgICAgcmV0dXJuIG1YdFN0YXRzQ2FjaGVkLmdldEhpc3RvcnkodGVtcGxhdGUsIFVJRF9BTEwsIFNFVF9BTEwsIFRBR19OT05FLCBmaWVsZHMpOworICAgICAgICByZXR1cm4gbVh0U3RhdHNDYWNoZWQuZ2V0SGlzdG9yeSh0ZW1wbGF0ZSwgVUlEX0FMTCwgU0VUX0FMTCwgVEFHX05PTkUsIGZpZWxkcywgYWNjZXNzTGV2ZWwpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBsb25nIGdldE5ldHdvcmtUb3RhbEJ5dGVzKE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQpIHsKKyAgICAgICAgLy8gU3BlY2lhbCBjYXNlIC0gc2luY2UgdGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHksIGRvbid0IHdvcnJ5IGFib3V0IGEgZnVsbCBhY2Nlc3MgbGV2ZWwKKyAgICAgICAgLy8gY2hlY2sgYW5kIGp1c3QgcmVxdWlyZSB0aGUgc2lnbmF0dXJlL3ByaXZpbGVnZWQgcGVybWlzc2lvbi4KICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKFJFQURfTkVUV09SS19VU0FHRV9ISVNUT1JZLCBUQUcpOwogICAgICAgICBhc3NlcnRCYW5kd2lkdGhDb250cm9sRW5hYmxlZCgpOwotICAgICAgICByZXR1cm4gaW50ZXJuYWxHZXRTdW1tYXJ5Rm9yTmV0d29yayh0ZW1wbGF0ZSwgc3RhcnQsIGVuZCkuZ2V0VG90YWxCeXRlcygpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxHZXRTdW1tYXJ5Rm9yTmV0d29yayh0ZW1wbGF0ZSwgc3RhcnQsIGVuZCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSkKKyAgICAgICAgICAgICAgICAuZ2V0VG90YWxCeXRlcygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vQ29uZGl0aW9uUHJvdmlkZXJzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQppbmRleCAxOTg3MjE0Li5jZTE4ODE4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Db25kaXRpb25Qcm92aWRlcnMuamF2YQpAQCAtMTIxLDYgKzEyMSwxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCBib29sZWFuIGNoZWNrVHlwZShJSW50ZXJmYWNlIHNlcnZpY2UpIHsKKyAgICAgICAgcmV0dXJuIHNlcnZpY2UgaW5zdGFuY2VvZiBJQ29uZGl0aW9uUHJvdmlkZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgb25Cb290UGhhc2VBcHBzQ2FuU3RhcnQoKSB7CiAgICAgICAgIHN1cGVyLm9uQm9vdFBoYXNlQXBwc0NhblN0YXJ0KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVN5c3RlbUNvbmRpdGlvblByb3ZpZGVycy5zaXplKCk7IGkrKykgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9NYW5hZ2VkU2VydmljZXMuamF2YQppbmRleCBjNzU1MWM1MC4uZjM2MGRjMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTWFuYWdlZFNlcnZpY2VzLmphdmEKQEAgLTQyLDYgKzQyLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CkBAIC01Myw2ICs1NCw3IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIApAQCAtODQsNyArODYsNyBAQAogICAgIHByb3RlY3RlZCBmaW5hbCBBcnJheUxpc3Q8TWFuYWdlZFNlcnZpY2VJbmZvPiBtU2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PE1hbmFnZWRTZXJ2aWNlSW5mbz4oKTsKICAgICAvLyB0aGluZ3MgdGhhdCB3aWxsIGJlIHB1dCBpbnRvIG1TZXJ2aWNlcyBhcyBzb29uIGFzIHRoZXkncmUgcmVhZHkKICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxTdHJpbmc+IG1TZXJ2aWNlc0JpbmRpbmcgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAvLyBsaXN0cyB0aGUgY29tcG9uZW50IG5hbWVzIG9mIGFsbCBlbmFibGVkIChhbmQgdGhlcmVmb3JlIGNvbm5lY3RlZCkKKyAgICAvLyBsaXN0cyB0aGUgY29tcG9uZW50IG5hbWVzIG9mIGFsbCBlbmFibGVkIChhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGNvbm5lY3RlZCkKICAgICAvLyBhcHAgc2VydmljZXMgZm9yIGN1cnJlbnQgcHJvZmlsZXMuCiAgICAgcHJpdmF0ZSBBcnJheVNldDxDb21wb25lbnROYW1lPiBtRW5hYmxlZFNlcnZpY2VzRm9yQ3VycmVudFByb2ZpbGVzCiAgICAgICAgICAgICA9IG5ldyBBcnJheVNldDxDb21wb25lbnROYW1lPigpOwpAQCAtOTMsNiArOTUsMTAgQEAKICAgICAvLyBMaXN0IG9mIHBhY2thZ2VzIGluIHJlc3RvcmVkIHNldHRpbmcgYWNyb3NzIGFsbCBtVXNlclByb2ZpbGVzLCBmb3IgcXVpY2sKICAgICAvLyBmaWx0ZXJpbmcgdXBvbiBwYWNrYWdlIHVwZGF0ZXMuCiAgICAgcHJpdmF0ZSBBcnJheVNldDxTdHJpbmc+IG1SZXN0b3JlZFBhY2thZ2VzID0gbmV3IEFycmF5U2V0PD4oKTsKKyAgICAvLyBTdGF0ZSBvZiBjdXJyZW50IHNlcnZpY2UgY2F0ZWdvcmllcworICAgIHByaXZhdGUgQXJyYXlNYXA8U3RyaW5nLCBCb29sZWFuPiBtQ2F0ZWdvcnlFbmFibGVkID0gbmV3IEFycmF5TWFwPD4oKTsKKyAgICAvLyBMaXN0IG9mIGVuYWJsZWQgcGFja2FnZXMgdGhhdCBoYXZlIG5ldmVydGhlbGVzcyBhc2tlZCBub3QgdG8gYmUgcnVuCisgICAgcHJpdmF0ZSBBcnJheVNldDxDb21wb25lbnROYW1lPiBtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMgPSBuZXcgQXJyYXlTZXQ8PigpOwogCiAKICAgICAvLyBLZXB0IHRvIGRlLWR1cGUgdXNlciBjaGFuZ2UgZXZlbnRzIChleHBlcmllbmNlZCBhZnRlciBib290LCB3aGVuIHdlIHJlY2VpdmUgYSBzZXR0aW5ncyBhbmQgYQpAQCAtMTM3LDYgKzE0Myw4IEBACiAKICAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgSUludGVyZmFjZSBhc0ludGVyZmFjZShJQmluZGVyIGJpbmRlcik7CiAKKyAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1R5cGUoSUludGVyZmFjZSBzZXJ2aWNlKTsKKwogICAgIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIG9uU2VydmljZUFkZGVkKE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvKTsKIAogICAgIHByb3RlY3RlZCB2b2lkIG9uU2VydmljZVJlbW92ZWRMb2NrZWQoTWFuYWdlZFNlcnZpY2VJbmZvIHJlbW92ZWQpIHsgfQpAQCAtMTY1LDcgKzE3MywxNCBAQAogICAgICAgICAgICAgaWYgKGZpbHRlciAhPSBudWxsICYmICFmaWx0ZXIubWF0Y2hlcyhpbmZvLmNvbXBvbmVudCkpIGNvbnRpbnVlOwogICAgICAgICAgICAgcHcucHJpbnRsbigiICAgICAgIiArIGluZm8uY29tcG9uZW50CiAgICAgICAgICAgICAgICAgICAgICsgIiAodXNlciAiICsgaW5mby51c2VyaWQgKyAiKTogIiArIGluZm8uc2VydmljZQotICAgICAgICAgICAgICAgICAgICArIChpbmZvLmlzU3lzdGVtPyIgU1lTVEVNIjoiIikpOworICAgICAgICAgICAgICAgICAgICArIChpbmZvLmlzU3lzdGVtPyIgU1lTVEVNIjoiIikKKyAgICAgICAgICAgICAgICAgICAgKyAoaW5mby5pc0d1ZXN0KHRoaXMpPyIgR1VFU1QiOiIiKSk7CisgICAgICAgIH0KKworICAgICAgICBwdy5wcmludGxuKCIgICAgU25vb3plZCAiICsgZ2V0Q2FwdGlvbigpICsgInMgKCIgKworICAgICAgICAgICAgICAgIG1Tbm9vemluZ0ZvckN1cnJlbnRQcm9maWxlcy5zaXplKCkgKyAiKToiKTsKKyAgICAgICAgZm9yIChDb21wb25lbnROYW1lIG5hbWUgOiBtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMpIHsKKyAgICAgICAgICAgIHB3LnByaW50bG4oIiAgICAgICIgKyBuYW1lLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzUsMTQgKzI1MCwyNSBAQAogICAgICAgICByZWJpbmRTZXJ2aWNlcygpOwogICAgIH0KIAotICAgIHB1YmxpYyBNYW5hZ2VkU2VydmljZUluZm8gY2hlY2tTZXJ2aWNlVG9rZW5Mb2NrZWQoSUludGVyZmFjZSBzZXJ2aWNlKSB7Ci0gICAgICAgIGNoZWNrTm90TnVsbChzZXJ2aWNlKTsKKyAgICBwdWJsaWMgTWFuYWdlZFNlcnZpY2VJbmZvIGdldFNlcnZpY2VGcm9tVG9rZW5Mb2NrZWQoSUludGVyZmFjZSBzZXJ2aWNlKSB7CisgICAgICAgIGlmIChzZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CiAgICAgICAgIGZpbmFsIElCaW5kZXIgdG9rZW4gPSBzZXJ2aWNlLmFzQmluZGVyKCk7CiAgICAgICAgIGZpbmFsIGludCBOID0gbVNlcnZpY2VzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbVNlcnZpY2VzLmdldChpKTsKICAgICAgICAgICAgIGlmIChpbmZvLnNlcnZpY2UuYXNCaW5kZXIoKSA9PSB0b2tlbikgcmV0dXJuIGluZm87CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIE1hbmFnZWRTZXJ2aWNlSW5mbyBjaGVja1NlcnZpY2VUb2tlbkxvY2tlZChJSW50ZXJmYWNlIHNlcnZpY2UpIHsKKyAgICAgICAgY2hlY2tOb3ROdWxsKHNlcnZpY2UpOworICAgICAgICBNYW5hZ2VkU2VydmljZUluZm8gaW5mbyA9IGdldFNlcnZpY2VGcm9tVG9rZW5Mb2NrZWQoc2VydmljZSk7CisgICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmZvOworICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiRGlzYWxsb3dlZCBjYWxsIGZyb20gdW5rbm93biAiICsgZ2V0Q2FwdGlvbigpICsgIjogIgogICAgICAgICAgICAgICAgICsgc2VydmljZSk7CiAgICAgfQpAQCAtMjYyLDkgKzI4OCw5MSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogQWRkIGEgc2VydmljZSB0byBvdXIgY2FsbGJhY2tzLiBUaGUgbGlmZWN5Y2xlIG9mIHRoaXMgc2VydmljZSBpcyBtYW5hZ2VkIGV4dGVybmFsbHksCisgICAgICogYnV0IHVubGlrZSBhIHN5c3RlbSBzZXJ2aWNlLCBpdCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgcHJpdmxlZGdlZC4KKyAgICAgKiAqLworICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyR3Vlc3RTZXJ2aWNlKE1hbmFnZWRTZXJ2aWNlSW5mbyBndWVzdCkgeworICAgICAgICBjaGVja05vdE51bGwoZ3Vlc3Quc2VydmljZSk7CisgICAgICAgIGNoZWNrVHlwZShndWVzdC5zZXJ2aWNlKTsKKyAgICAgICAgaWYgKHJlZ2lzdGVyU2VydmljZUltcGwoZ3Vlc3QpICE9IG51bGwpIHsKKyAgICAgICAgICAgIG9uU2VydmljZUFkZGVkKGd1ZXN0KTsKKyAgICAgICAgICAgIG9uU2VydmljZUFkZGVkKGd1ZXN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudFN0YXRlKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgYm9vbGVhbiBwcmV2aW91cyA9ICFtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMuY29udGFpbnMoY29tcG9uZW50KTsKKyAgICAgICAgaWYgKHByZXZpb3VzID09IGVuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgICAgICBtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMucmVtb3ZlKGNvbXBvbmVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMuYWRkKGNvbXBvbmVudCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdGF0ZSBjaGFuZ2VkCisgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgU2xvZy5kKFRBRywgKChlbmFibGVkKSA/ICJFbmFibGluZyAiIDogIkRpc2FibGluZyAiKSArICJjb21wb25lbnQgIiArCisgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5mbGF0dGVuVG9TaG9ydFN0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmFsIGludFtdIHVzZXJJZHMgPSBtVXNlclByb2ZpbGVzLmdldEN1cnJlbnRQcm9maWxlSWRzKCk7CisgICAgICAgIGZvciAoaW50IHVzZXJJZCA6IHVzZXJJZHMpIHsKKyAgICAgICAgICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXJ2aWNlTG9ja2VkKGNvbXBvbmVudCwgdXNlcklkKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5yZWdpc3RlclNlcnZpY2VMb2NrZWQoY29tcG9uZW50LCB1c2VySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q2F0ZWdvcnlTdGF0ZShTdHJpbmcgY2F0ZWdvcnksIGJvb2xlYW4gZW5hYmxlZCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgeworICAgICAgICAgICAgZmluYWwgQm9vbGVhbiBwcmV2aW91cyA9IG1DYXRlZ29yeUVuYWJsZWQucHV0KGNhdGVnb3J5LCBlbmFibGVkKTsKKyAgICAgICAgICAgIGlmICghKHByZXZpb3VzID09IG51bGwgfHwgcHJldmlvdXMgIT0gZW5hYmxlZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN0YXRlIGNoYW5nZWQKKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICgoZW5hYmxlZCkgPyAiRW5hYmxpbmcgIiA6ICJEaXNhYmxpbmcgIikgKyAiY2F0ZWdvcnkgIiArIGNhdGVnb3J5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZmluYWwgaW50W10gdXNlcklkcyA9IG1Vc2VyUHJvZmlsZXMuZ2V0Q3VycmVudFByb2ZpbGVJZHMoKTsKKyAgICAgICAgICAgIGZvciAoaW50IHVzZXJJZCA6IHVzZXJJZHMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTZXQ8Q29tcG9uZW50TmFtZT4gY29tcG9uZW50TmFtZXMgPSBxdWVyeVBhY2thZ2VGb3JTZXJ2aWNlcyhudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkLCBjYXRlZ29yeSk7CisKKyAgICAgICAgICAgICAgICAvLyBEaXNhbGxvdyBzZXJ2aWNlcyBub3QgZW5hYmxlZCBpbiBTZXR0aW5ncworICAgICAgICAgICAgICAgIGZpbmFsIEFycmF5U2V0PENvbXBvbmVudE5hbWU+IHVzZXJDb21wb25lbnRzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRDb21wb25lbnROYW1lc0Zyb21TZXR0aW5nKG1Db25maWcuc2VjdXJlU2V0dGluZ05hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgaWYgKHVzZXJDb21wb25lbnRzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50TmFtZXMuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb21wb25lbnROYW1lcy5yZXRhaW5BbGwodXNlckNvbXBvbmVudHMpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgICAgICBTbG9nLmQoVEFHLCAiQ29tcG9uZW50cyBmb3IgY2F0ZWdvcnkgIiArIGNhdGVnb3J5ICsgIjogIiArIGNvbXBvbmVudE5hbWVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChDb21wb25lbnROYW1lIGMgOiBjb21wb25lbnROYW1lcykgeworICAgICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXJ2aWNlTG9ja2VkKGMsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyU2VydmljZUxvY2tlZChjLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVidWlsZFJlc3RvcmVkUGFja2FnZXMoKSB7CiAgICAgICAgIG1SZXN0b3JlZFBhY2thZ2VzLmNsZWFyKCk7CisgICAgICAgIG1Tbm9vemluZ0ZvckN1cnJlbnRQcm9maWxlcy5jbGVhcigpOwogICAgICAgICBTdHJpbmcgc2V0dGluZ05hbWUgPSByZXN0b3JlZFNldHRpbmdOYW1lKG1Db25maWcpOwogICAgICAgICBpbnRbXSB1c2VySWRzID0gbVVzZXJQcm9maWxlcy5nZXRDdXJyZW50UHJvZmlsZUlkcygpOwogICAgICAgICBmaW5hbCBpbnQgTiA9IHVzZXJJZHMubGVuZ3RoOwpAQCAtMjgzLDkgKzM5MSw5IEBACiAgICAgICAgICAgICBpbnQgdXNlcklkKSB7CiAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBTdHJpbmcgc2V0dGluZ1ZhbHVlID0gU2V0dGluZ3MuU2VjdXJlLmdldFN0cmluZ0ZvclVzZXIoCi0gICAgICAgICAgICAgICAgY3IsCi0gICAgICAgICAgICAgICAgc2V0dGluZ05hbWUsCi0gICAgICAgICAgICAgICAgdXNlcklkKTsKKyAgICAgICAgICAgIGNyLAorICAgICAgICAgICAgc2V0dGluZ05hbWUsCisgICAgICAgICAgICB1c2VySWQpOwogICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoc2V0dGluZ1ZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICBTdHJpbmdbXSByZXN0b3JlZCA9IHNldHRpbmdWYWx1ZS5zcGxpdChFTkFCTEVEX1NFUlZJQ0VTX1NFUEFSQVRPUik7CkBAIC0zMTQsMTAgKzQyMiwxMCBAQAogICAgICAgICAgICAgICAgIFRleHRVdGlscy5qb2luKEVOQUJMRURfU0VSVklDRVNfU0VQQVJBVE9SLCBjb21wb25lbnROYW1lcyk7CiAgICAgICAgIGZpbmFsIENvbnRlbnRSZXNvbHZlciBjciA9IG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpOwogICAgICAgICBTZXR0aW5ncy5TZWN1cmUucHV0U3RyaW5nRm9yVXNlcigKLSAgICAgICAgICAgICAgICBjciwKLSAgICAgICAgICAgICAgICBzZXR0aW5nTmFtZSwKLSAgICAgICAgICAgICAgICB2YWx1ZSwKLSAgICAgICAgICAgICAgICB1c2VySWQpOworICAgICAgICAgICAgY3IsCisgICAgICAgICAgICBzZXR0aW5nTmFtZSwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgdXNlcklkKTsKICAgICB9CiAKICAgICAvKioKQEAgLTMzMywxMiArNDQxLDIwIEBACiAgICAgfQogCiAgICAgcHJvdGVjdGVkIFNldDxDb21wb25lbnROYW1lPiBxdWVyeVBhY2thZ2VGb3JTZXJ2aWNlcyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIHF1ZXJ5UGFja2FnZUZvclNlcnZpY2VzKHBhY2thZ2VOYW1lLCB1c2VySWQsIG51bGwpOworICAgIH0KKworICAgIHByb3RlY3RlZCBTZXQ8Q29tcG9uZW50TmFtZT4gcXVlcnlQYWNrYWdlRm9yU2VydmljZXMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkLAorICAgICAgICAgICAgU3RyaW5nIGNhdGVnb3J5KSB7CiAgICAgICAgIFNldDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWQgPSBuZXcgQXJyYXlTZXQ8PigpOwogICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIEludGVudCBxdWVyeUludGVudCA9IG5ldyBJbnRlbnQobUNvbmZpZy5zZXJ2aWNlSW50ZXJmYWNlKTsKICAgICAgICAgaWYgKCFUZXh0VXRpbHMuaXNFbXB0eShwYWNrYWdlTmFtZSkpIHsKICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LnNldFBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICB9CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBudWxsKSB7CisgICAgICAgICAgICBxdWVyeUludGVudC5hZGRDYXRlZ29yeShjYXRlZ29yeSk7CisgICAgICAgIH0KICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gaW5zdGFsbGVkU2VydmljZXMgPSBwbS5xdWVyeUludGVudFNlcnZpY2VzQXNVc2VyKAogICAgICAgICAgICAgICAgIHF1ZXJ5SW50ZW50LAogICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEsCkBAIC0zNTMsOSArNDY5LDkgQEAKICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnROYW1lKGluZm8ucGFja2FnZU5hbWUsIGluZm8ubmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFtQ29uZmlnLmJpbmRQZXJtaXNzaW9uLmVxdWFscyhpbmZvLnBlcm1pc3Npb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJTa2lwcGluZyAiICsgZ2V0Q2FwdGlvbigpICsgIiBzZXJ2aWNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8ucGFja2FnZU5hbWUgKyAiLyIgKyBpbmZvLm5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArICI6IGl0IGRvZXMgbm90IHJlcXVpcmUgdGhlIHBlcm1pc3Npb24gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbUNvbmZpZy5iaW5kUGVybWlzc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8ucGFja2FnZU5hbWUgKyAiLyIgKyBpbmZvLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIjogaXQgZG9lcyBub3QgcmVxdWlyZSB0aGUgcGVybWlzc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIG1Db25maWcuYmluZFBlcm1pc3Npb24pOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLmFkZChjb21wb25lbnQpOwpAQCAtNDMyLDcgKzU0OCw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7CiAgICAgICAgICAgICAvLyBVbmJpbmQgYXV0b21hdGljYWxseSBib3VuZCBzZXJ2aWNlcywgcmV0YWluIHN5c3RlbSBzZXJ2aWNlcy4KICAgICAgICAgICAgIGZvciAoTWFuYWdlZFNlcnZpY2VJbmZvIHNlcnZpY2UgOiBtU2VydmljZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNlcnZpY2UuaXNTeXN0ZW0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIXNlcnZpY2UuaXNTeXN0ZW0gJiYgIXNlcnZpY2UuaXNHdWVzdCh0aGlzKSkgewogICAgICAgICAgICAgICAgICAgICB0b1JlbW92ZS5hZGQoc2VydmljZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDQ5LDEyICs1NjUsMjMgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8Q29tcG9uZW50TmFtZT4gYWRkID0gbmV3IEFycmF5TGlzdDw+KHVzZXJDb21wb25lbnRzKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBjb21wb25lbnRzIGZyb20gZGlzYWJsZWQgY2F0ZWdvcmllcyBzbyB0aGF0IHRob3NlIHNlcnZpY2VzIGFyZW4ndCBydW4uCisgICAgICAgICAgICAgICAgZm9yIChFbnRyeTxTdHJpbmcsIEJvb2xlYW4+IGUgOiBtQ2F0ZWdvcnlFbmFibGVkLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmdldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNldDxDb21wb25lbnROYW1lPiBjID0gcXVlcnlQYWNrYWdlRm9yU2VydmljZXMobnVsbCwgdXNlcklkc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZC5yZW1vdmVBbGwoYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWRkLnJlbW92ZUFsbChtU25vb3ppbmdGb3JDdXJyZW50UHJvZmlsZXMpOworCiAgICAgICAgICAgICAgICAgdG9BZGQucHV0KHVzZXJJZHNbaV0sIGFkZCk7CiAKICAgICAgICAgICAgICAgICBuZXdFbmFibGVkLmFkZEFsbCh1c2VyQ29tcG9uZW50cyk7CiAKICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHVzZXJDb21wb25lbnRzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgY29tcG9uZW50ID0gdXNlckNvbXBvbmVudHMudmFsdWVBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50TmFtZSBjb21wb25lbnQgPSB1c2VyQ29tcG9uZW50cy52YWx1ZUF0KGopOwogICAgICAgICAgICAgICAgICAgICBuZXdQYWNrYWdlcy5hZGQoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTQ4OCw5MyArNjE1LDk3IEBACiAgICAgICogVmVyc2lvbiBvZiByZWdpc3RlclNlcnZpY2UgdGhhdCB0YWtlcyB0aGUgbmFtZSBvZiBhIHNlcnZpY2UgY29tcG9uZW50IHRvIGJpbmQgdG8uCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyU2VydmljZShmaW5hbCBDb21wb25lbnROYW1lIG5hbWUsIGZpbmFsIGludCB1c2VyaWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTXV0ZXgpIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyU2VydmljZUxvY2tlZChuYW1lLCB1c2VyaWQpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyU2VydmljZUxvY2tlZChmaW5hbCBDb21wb25lbnROYW1lIG5hbWUsIGZpbmFsIGludCB1c2VyaWQpIHsKICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAicmVnaXN0ZXJTZXJ2aWNlOiAiICsgbmFtZSArICIgdT0iICsgdXNlcmlkKTsKIAotICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNlcnZpY2VzQmluZGluZ1RhZyA9IG5hbWUudG9TdHJpbmcoKSArICIvIiArIHVzZXJpZDsKLSAgICAgICAgICAgIGlmIChtU2VydmljZXNCaW5kaW5nLmNvbnRhaW5zKHNlcnZpY2VzQmluZGluZ1RhZykpIHsKLSAgICAgICAgICAgICAgICAvLyBzdG9wIHJlZ2lzdGVyaW5nIHRoaXMgdGhpbmcgYWxyZWFkeSEgd2UncmUgd29ya2luZyBvbiBpdAotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TZXJ2aWNlc0JpbmRpbmcuYWRkKHNlcnZpY2VzQmluZGluZ1RhZyk7CisgICAgICAgIGZpbmFsIFN0cmluZyBzZXJ2aWNlc0JpbmRpbmdUYWcgPSBuYW1lLnRvU3RyaW5nKCkgKyAiLyIgKyB1c2VyaWQ7CisgICAgICAgIGlmIChtU2VydmljZXNCaW5kaW5nLmNvbnRhaW5zKHNlcnZpY2VzQmluZGluZ1RhZykpIHsKKyAgICAgICAgICAgIC8vIHN0b3AgcmVnaXN0ZXJpbmcgdGhpcyB0aGluZyBhbHJlYWR5ISB3ZSdyZSB3b3JraW5nIG9uIGl0CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVNlcnZpY2VzQmluZGluZy5hZGQoc2VydmljZXNCaW5kaW5nVGFnKTsKIAotICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtU2VydmljZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IE4gLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbVNlcnZpY2VzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoaW5mby5jb21wb25lbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvLnVzZXJpZCA9PSB1c2VyaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gY3V0IG9sZCBjb25uZWN0aW9ucwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICIgICAgZGlzY29ubmVjdGluZyBvbGQgIiArIGdldENhcHRpb24oKSArICI6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGluZm8uc2VydmljZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZVNlcnZpY2VMb2NrZWQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmNvbm5lY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZShpbmZvLmNvbm5lY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIGZpbmFsIGludCBOID0gbVNlcnZpY2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IE4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgZmluYWwgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBtU2VydmljZXMuZ2V0KGkpOworICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKGluZm8uY29tcG9uZW50KQorICAgICAgICAgICAgICAgICYmIGluZm8udXNlcmlkID09IHVzZXJpZCkgeworICAgICAgICAgICAgICAgIC8vIGN1dCBvbGQgY29ubmVjdGlvbnMKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICIgICAgZGlzY29ubmVjdGluZyBvbGQgIiArIGdldENhcHRpb24oKSArICI6ICIKKyAgICAgICAgICAgICAgICAgICAgKyBpbmZvLnNlcnZpY2UpOworICAgICAgICAgICAgICAgIHJlbW92ZVNlcnZpY2VMb2NrZWQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uY29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UoaW5mby5jb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQobUNvbmZpZy5zZXJ2aWNlSW50ZXJmYWNlKTsKLSAgICAgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmFtZSk7CisgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KG1Db25maWcuc2VydmljZUludGVyZmFjZSk7CisgICAgICAgIGludGVudC5zZXRDb21wb25lbnQobmFtZSk7CiAKLSAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfQ0xJRU5UX0xBQkVMLCBtQ29uZmlnLmNsaWVudExhYmVsKTsKKyAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9DTElFTlRfTEFCRUwsIG1Db25maWcuY2xpZW50TGFiZWwpOwogCi0gICAgICAgICAgICBmaW5hbCBQZW5kaW5nSW50ZW50IHBlbmRpbmdJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dCwgMCwgbmV3IEludGVudChtQ29uZmlnLnNldHRpbmdzQWN0aW9uKSwgMCk7Ci0gICAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0NMSUVOVF9JTlRFTlQsIHBlbmRpbmdJbnRlbnQpOworICAgICAgICBmaW5hbCBQZW5kaW5nSW50ZW50IHBlbmRpbmdJbnRlbnQgPSBQZW5kaW5nSW50ZW50LmdldEFjdGl2aXR5KAorICAgICAgICAgICAgbUNvbnRleHQsIDAsIG5ldyBJbnRlbnQobUNvbmZpZy5zZXR0aW5nc0FjdGlvbiksIDApOworICAgICAgICBpbnRlbnQucHV0RXh0cmEoSW50ZW50LkVYVFJBX0NMSUVOVF9JTlRFTlQsIHBlbmRpbmdJbnRlbnQpOwogCi0gICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gYXBwSW5mbyA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGFwcEluZm8gPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEFwcGxpY2F0aW9uSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuZ2V0UGFja2FnZU5hbWUoKSwgMCk7Ci0gICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpZiB0aGUgcGFja2FnZSBkb2Vzbid0IGV4aXN0IHdlIHdvbid0IGJlIGFibGUgdG8gYmluZCB0byB0aGUgc2VydmljZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIGludCB0YXJnZXRTZGtWZXJzaW9uID0KLSAgICAgICAgICAgICAgICAgICAgYXBwSW5mbyAhPSBudWxsID8gYXBwSW5mby50YXJnZXRTZGtWZXJzaW9uIDogQnVpbGQuVkVSU0lPTl9DT0RFUy5CQVNFOworICAgICAgICBBcHBsaWNhdGlvbkluZm8gYXBwSW5mbyA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBhcHBJbmZvID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRBcHBsaWNhdGlvbkluZm8oCisgICAgICAgICAgICAgICAgbmFtZS5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKKyAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIElnbm9yZSBpZiB0aGUgcGFja2FnZSBkb2Vzbid0IGV4aXN0IHdlIHdvbid0IGJlIGFibGUgdG8gYmluZCB0byB0aGUgc2VydmljZS4KKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgdGFyZ2V0U2RrVmVyc2lvbiA9CisgICAgICAgICAgICBhcHBJbmZvICE9IG51bGwgPyBhcHBJbmZvLnRhcmdldFNka1ZlcnNpb24gOiBCdWlsZC5WRVJTSU9OX0NPREVTLkJBU0U7CiAKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLnYoVEFHLCAiYmluZGluZzogIiArIGludGVudCk7Ci0gICAgICAgICAgICAgICAgU2VydmljZUNvbm5lY3Rpb24gc2VydmljZUNvbm5lY3Rpb24gPSBuZXcgU2VydmljZUNvbm5lY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgIElJbnRlcmZhY2UgbVNlcnZpY2U7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIFNsb2cudihUQUcsICJiaW5kaW5nOiAiICsgaW50ZW50KTsKKyAgICAgICAgICAgIFNlcnZpY2VDb25uZWN0aW9uIHNlcnZpY2VDb25uZWN0aW9uID0gbmV3IFNlcnZpY2VDb25uZWN0aW9uKCkgeworICAgICAgICAgICAgICAgIElJbnRlcmZhY2UgbVNlcnZpY2U7CiAKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZUNvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUsIElCaW5kZXIgYmluZGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYW5hZ2VkU2VydmljZUluZm8gaW5mbyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlc0JpbmRpbmcucmVtb3ZlKHNlcnZpY2VzQmluZGluZ1RhZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UgPSBhc0ludGVyZmFjZShiaW5kZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3U2VydmljZUluZm8obVNlcnZpY2UsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcmlkLCBmYWxzZSAvKmlzU3lzdGVtKi8sIHRoaXMsIHRhcmdldFNka1ZlcnNpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIubGlua1RvRGVhdGgoaW5mbywgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkID0gbVNlcnZpY2VzLmFkZChpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGRlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblNlcnZpY2VBZGRlZChpbmZvKTsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VDb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBJQmluZGVyIGJpbmRlcikgeworICAgICAgICAgICAgICAgICAgICBib29sZWFuIGFkZGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTXV0ZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlc0JpbmRpbmcucmVtb3ZlKHNlcnZpY2VzQmluZGluZ1RhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlID0gYXNJbnRlcmZhY2UoYmluZGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gbmV3U2VydmljZUluZm8obVNlcnZpY2UsIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJpZCwgZmFsc2UgLyppc1N5c3RlbSovLCB0aGlzLCB0YXJnZXRTZGtWZXJzaW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kZXIubGlua1RvRGVhdGgoaW5mbywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgPSBtU2VydmljZXMuYWRkKGluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGRlYWQKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaXNjb25uZWN0ZWQoQ29tcG9uZW50TmFtZSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCBnZXRDYXB0aW9uKCkgKyAiIGNvbm5lY3Rpb24gbG9zdDogIiArIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWRkZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uU2VydmljZUFkZGVkKGluZm8pOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBpZiAoIW1Db250ZXh0LmJpbmRTZXJ2aWNlQXNVc2VyKGludGVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VDb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFIHwgQ29udGV4dC5CSU5EX0ZPUkVHUk9VTkRfU0VSVklDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBVc2VySGFuZGxlKHVzZXJpZCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlc0JpbmRpbmcucmVtb3ZlKHNlcnZpY2VzQmluZGluZ1RhZyk7Ci0gICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJVbmFibGUgdG8gYmluZCAiICsgZ2V0Q2FwdGlvbigpICsgIiBzZXJ2aWNlOiAiICsgaW50ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlVuYWJsZSB0byBiaW5kICIgKyBnZXRDYXB0aW9uKCkgKyAiIHNlcnZpY2U6ICIgKyBpbnRlbnQsIGV4KTsKKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2VydmljZURpc2Nvbm5lY3RlZChDb21wb25lbnROYW1lIG5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgZ2V0Q2FwdGlvbigpICsgIiBjb25uZWN0aW9uIGxvc3Q6ICIgKyBuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCFtQ29udGV4dC5iaW5kU2VydmljZUFzVXNlcihpbnRlbnQsCisgICAgICAgICAgICAgICAgc2VydmljZUNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgQ29udGV4dC5CSU5EX0FVVE9fQ1JFQVRFIHwgQ29udGV4dC5CSU5EX0ZPUkVHUk9VTkRfU0VSVklDRSwKKyAgICAgICAgICAgICAgICBuZXcgVXNlckhhbmRsZSh1c2VyaWQpKSkgeworICAgICAgICAgICAgICAgIG1TZXJ2aWNlc0JpbmRpbmcucmVtb3ZlKHNlcnZpY2VzQmluZGluZ1RhZyk7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIlVuYWJsZSB0byBiaW5kICIgKyBnZXRDYXB0aW9uKCkgKyAiIHNlcnZpY2U6ICIgKyBpbnRlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIFNsb2cuZShUQUcsICJVbmFibGUgdG8gYmluZCAiICsgZ2V0Q2FwdGlvbigpICsgIiBzZXJ2aWNlOiAiICsgaW50ZW50LCBleCk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU4MywyMCArNzE0LDI0IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVucmVnaXN0ZXJTZXJ2aWNlKENvbXBvbmVudE5hbWUgbmFtZSwgaW50IHVzZXJpZCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1NdXRleCkgewotICAgICAgICAgICAgZmluYWwgaW50IE4gPSBtU2VydmljZXMuc2l6ZSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IE4gLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGZpbmFsIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbVNlcnZpY2VzLmdldChpKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMoaW5mby5jb21wb25lbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBpbmZvLnVzZXJpZCA9PSB1c2VyaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU2VydmljZUxvY2tlZChpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uY29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVuYmluZFNlcnZpY2UoaW5mby5jb25uZWN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBoYXBwZW5lZCB0byB0aGUgc2VydmljZTogd2UgdGhpbmsgd2UgaGF2ZSBhIGNvbm5lY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgaXQncyBib2d1cy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCBnZXRDYXB0aW9uKCkgKyAiICIgKyBuYW1lICsgIiBjb3VsZCBub3QgYmUgdW5ib3VuZDogIiArIGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVucmVnaXN0ZXJTZXJ2aWNlTG9ja2VkKG5hbWUsIHVzZXJpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlclNlcnZpY2VMb2NrZWQoQ29tcG9uZW50TmFtZSBuYW1lLCBpbnQgdXNlcmlkKSB7CisgICAgICAgIGZpbmFsIGludCBOID0gbVNlcnZpY2VzLnNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IE4gLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgZmluYWwgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBtU2VydmljZXMuZ2V0KGkpOworICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKGluZm8uY29tcG9uZW50KQorICAgICAgICAgICAgICAgICYmIGluZm8udXNlcmlkID09IHVzZXJpZCkgeworICAgICAgICAgICAgICAgIHJlbW92ZVNlcnZpY2VMb2NrZWQoaSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8uY29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC51bmJpbmRTZXJ2aWNlKGluZm8uY29ubmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc29tZXRoaW5nIGhhcHBlbmVkIHRvIHRoZSBzZXJ2aWNlOiB3ZSB0aGluayB3ZSBoYXZlIGEgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnV0IGl0J3MgYm9ndXMuCisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCBnZXRDYXB0aW9uKCkgKyAiICIgKyBuYW1lICsgIiBjb3VsZCBub3QgYmUgdW5ib3VuZDogIiArIGV4KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTYzOSwxMSArNzc0LDE1IEBACiAKICAgICBwcml2YXRlIE1hbmFnZWRTZXJ2aWNlSW5mbyByZWdpc3RlclNlcnZpY2VJbXBsKGZpbmFsIElJbnRlcmZhY2Ugc2VydmljZSwKICAgICAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBmaW5hbCBpbnQgdXNlcmlkKSB7CisgICAgICAgIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbmV3U2VydmljZUluZm8oc2VydmljZSwgY29tcG9uZW50LCB1c2VyaWQsCisgICAgICAgICAgICAgICAgdHJ1ZSAvKmlzU3lzdGVtKi8sIG51bGwgLypjb25uZWN0aW9uKi8sIEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApOworICAgICAgICByZXR1cm4gcmVnaXN0ZXJTZXJ2aWNlSW1wbChpbmZvKTsKKyAgICB9CisKKyAgICBwcml2YXRlIE1hbmFnZWRTZXJ2aWNlSW5mbyByZWdpc3RlclNlcnZpY2VJbXBsKE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobU11dGV4KSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvID0gbmV3U2VydmljZUluZm8oc2VydmljZSwgY29tcG9uZW50LCB1c2VyaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVlIC8qaXNTeXN0ZW0qLywgbnVsbCwgQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCk7Ci0gICAgICAgICAgICAgICAgc2VydmljZS5hc0JpbmRlcigpLmxpbmtUb0RlYXRoKGluZm8sIDApOworICAgICAgICAgICAgICAgIGluZm8uc2VydmljZS5hc0JpbmRlcigpLmxpbmtUb0RlYXRoKGluZm8sIDApOwogICAgICAgICAgICAgICAgIG1TZXJ2aWNlcy5hZGQoaW5mbyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZm87CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewpAQCAtNjU4LDcgKzc5Nyw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHVucmVnaXN0ZXJTZXJ2aWNlSW1wbChJSW50ZXJmYWNlIHNlcnZpY2UsIGludCB1c2VyaWQpIHsKICAgICAgICAgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSByZW1vdmVTZXJ2aWNlSW1wbChzZXJ2aWNlLCB1c2VyaWQpOwotICAgICAgICBpZiAoaW5mbyAhPSBudWxsICYmIGluZm8uY29ubmVjdGlvbiAhPSBudWxsKSB7CisgICAgICAgIGlmIChpbmZvICE9IG51bGwgJiYgaW5mby5jb25uZWN0aW9uICE9IG51bGwgJiYgIWluZm8uaXNHdWVzdCh0aGlzKSkgewogICAgICAgICAgICAgbUNvbnRleHQudW5iaW5kU2VydmljZShpbmZvLmNvbm5lY3Rpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtNzEwLDYgKzg0OSwxNCBAQAogICAgICAgICAgICAgdGhpcy50YXJnZXRTZGtWZXJzaW9uID0gdGFyZ2V0U2RrVmVyc2lvbjsKICAgICAgICAgfQogCisgICAgICAgIHB1YmxpYyBib29sZWFuIGlzR3Vlc3QoTWFuYWdlZFNlcnZpY2VzIGhvc3QpIHsKKyAgICAgICAgICAgIHJldHVybiBNYW5hZ2VkU2VydmljZXMudGhpcyAhPSBob3N0OworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIE1hbmFnZWRTZXJ2aWNlcyBnZXRPd25lcigpIHsKKyAgICAgICAgICAgIHJldHVybiBNYW5hZ2VkU2VydmljZXMudGhpczsKKyAgICAgICAgfQorCiAgICAgICAgIEBPdmVycmlkZQogICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCdWlsZGVyKCJNYW5hZ2VkU2VydmljZUluZm9bIikKQEAgLTc1Myw2ICs5MDAsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBjb252ZW5pZW5jZSBtZXRob2QgZm9yIGxvb2tpbmcgaW4gbUVuYWJsZWRTZXJ2aWNlc0ZvckN1cnJlbnRQcm9maWxlcyAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ29tcG9uZW50RW5hYmxlZEZvckN1cnJlbnRQcm9maWxlcyhDb21wb25lbnROYW1lIGNvbXBvbmVudCkgeworICAgICAgICByZXR1cm4gbUVuYWJsZWRTZXJ2aWNlc0ZvckN1cnJlbnRQcm9maWxlcy5jb250YWlucyhjb21wb25lbnQpOworICAgIH0KKwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVXNlclByb2ZpbGVzIHsKICAgICAgICAgLy8gUHJvZmlsZXMgb2YgdGhlIGN1cnJlbnQgdXNlci4KICAgICAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VBcnJheTxVc2VySW5mbz4gbUN1cnJlbnRQcm9maWxlcyA9IG5ldyBTcGFyc2VBcnJheTxVc2VySW5mbz4oKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkNvbXBhcmF0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkNvbXBhcmF0b3IuamF2YQppbmRleCBlYzgxZmQyLi41ZTQ3MDNkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25Db21wYXJhdG9yLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uQ29tcGFyYXRvci5qYXZhCkBAIC0xOCwxMyArMTgsMjAgQEAKIGltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIAogLyoqCi0gKiBTb3J0cyBub3RpZmljYXRpb25zIGluZGl2aWR1YWxseSBpbnRvIGF0dGVudGlvbi1yZWxlbHZhbnQgb3JkZXIuCisgKiBTb3J0cyBub3RpZmljYXRpb25zIGluZGl2aWR1YWxseSBpbnRvIGF0dGVudGlvbi1yZWxldmFudCBvcmRlci4KICAqLwogcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkNvbXBhcmF0b3IKICAgICAgICAgaW1wbGVtZW50cyBDb21wYXJhdG9yPE5vdGlmaWNhdGlvblJlY29yZD4gewogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBjb21wYXJlKE5vdGlmaWNhdGlvblJlY29yZCBsZWZ0LCBOb3RpZmljYXRpb25SZWNvcmQgcmlnaHQpIHsKKyAgICAgICAgZmluYWwgaW50IGxlZnRJbXBvcnRhbmNlID0gbGVmdC5nZXRJbXBvcnRhbmNlKCk7CisgICAgICAgIGZpbmFsIGludCByaWdodEltcG9ydGFuY2UgPSByaWdodC5nZXRJbXBvcnRhbmNlKCk7CisgICAgICAgIGlmIChsZWZ0SW1wb3J0YW5jZSAhPSByaWdodEltcG9ydGFuY2UpIHsKKyAgICAgICAgICAgIC8vIGJ5IHByaW9yaXR5LCBoaWdoIHRvIGxvdworICAgICAgICAgICAgcmV0dXJuIC0xICogSW50ZWdlci5jb21wYXJlKGxlZnRJbXBvcnRhbmNlLCByaWdodEltcG9ydGFuY2UpOworICAgICAgICB9CisKICAgICAgICAgZmluYWwgaW50IGxlZnRQYWNrYWdlUHJpb3JpdHkgPSBsZWZ0LmdldFBhY2thZ2VQcmlvcml0eSgpOwogICAgICAgICBmaW5hbCBpbnQgcmlnaHRQYWNrYWdlUHJpb3JpdHkgPSByaWdodC5nZXRQYWNrYWdlUHJpb3JpdHkoKTsKICAgICAgICAgaWYgKGxlZnRQYWNrYWdlUHJpb3JpdHkgIT0gcmlnaHRQYWNrYWdlUHJpb3JpdHkpIHsKQEAgLTMyLDEzICszOSw2IEBACiAgICAgICAgICAgICByZXR1cm4gLTEgKiBJbnRlZ2VyLmNvbXBhcmUobGVmdFBhY2thZ2VQcmlvcml0eSwgcmlnaHRQYWNrYWdlUHJpb3JpdHkpOwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWwgaW50IGxlZnRTY29yZSA9IGxlZnQuc2JuLmdldFNjb3JlKCk7Ci0gICAgICAgIGZpbmFsIGludCByaWdodFNjb3JlID0gcmlnaHQuc2JuLmdldFNjb3JlKCk7Ci0gICAgICAgIGlmIChsZWZ0U2NvcmUgIT0gcmlnaHRTY29yZSkgewotICAgICAgICAgICAgLy8gYnkgcHJpb3JpdHksIGhpZ2ggdG8gbG93Ci0gICAgICAgICAgICByZXR1cm4gLTEgKiBJbnRlZ2VyLmNvbXBhcmUobGVmdFNjb3JlLCByaWdodFNjb3JlKTsKLSAgICAgICAgfQotCiAgICAgICAgIGZpbmFsIGZsb2F0IGxlZnRQZW9wbGUgPSBsZWZ0LmdldENvbnRhY3RBZmZpbml0eSgpOwogICAgICAgICBmaW5hbCBmbG9hdCByaWdodFBlb3BsZSA9IHJpZ2h0LmdldENvbnRhY3RBZmZpbml0eSgpOwogICAgICAgICBpZiAobGVmdFBlb3BsZSAhPSByaWdodFBlb3BsZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uSW50cnVzaXZlbmVzc0V4dHJhY3Rvci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uSW50cnVzaXZlbmVzc0V4dHJhY3Rvci5qYXZhCmluZGV4IGQ0ZmFkY2YuLmI1N2NjNzUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbkludHJ1c2l2ZW5lc3NFeHRyYWN0b3IuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25JbnRydXNpdmVuZXNzRXh0cmFjdG9yLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIAogaW1wb3J0IGFuZHJvaWQuYXBwLk5vdGlmaWNhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogCkBAIC00NCwxMSArNDUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgTm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbiA9IHJlY29yZC5nZXROb3RpZmljYXRpb24oKTsKLSAgICAgICAgaWYgKChub3RpZmljYXRpb24uZGVmYXVsdHMgJiBOb3RpZmljYXRpb24uREVGQVVMVF9WSUJSQVRFKSAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLnZpYnJhdGUgIT0gbnVsbCB8fAotICAgICAgICAgICAgICAgIChub3RpZmljYXRpb24uZGVmYXVsdHMgJiBOb3RpZmljYXRpb24uREVGQVVMVF9TT1VORCkgIT0gMCB8fAotICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5zb3VuZCAhPSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uLmZ1bGxTY3JlZW5JbnRlbnQgIT0gbnVsbCkgeworICAgICAgICBpZiAocmVjb3JkLmdldEltcG9ydGFuY2UoKSA+IE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfREVGQVVMVCkgewogICAgICAgICAgICAgcmVjb3JkLnNldFJlY2VudGx5SW50cnVzaXZlKHRydWUpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25NYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDMzZjM5YmMuLjAxOGJmMmQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTYsMjggKzE2LDMyIEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLm5vdGlmaWNhdGlvbjsKIAotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5ISU5UX0hPU1RfRElTQUJMRV9FRkZFQ1RTOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX0RFTEVHQVRFX0NMSUNLOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX0RFTEVHQVRFX0NBTkNFTDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9ERUxFR0FURV9DQU5DRUxfQUxMOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX0RFTEVHQVRFX0VSUk9SOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX1BBQ0tBR0VfQ0hBTkdFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9VU0VSX1NUT1BQRUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fUEFDS0FHRV9CQU5ORUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fQVBQX0NBTkNFTDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9BUFBfQ0FOQ0VMX0FMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9ERUxFR0FURV9DQU5DRUw7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fREVMRUdBVEVfQ0FOQ0VMX0FMTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9ERUxFR0FURV9DTElDSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9ERUxFR0FURV9FUlJPUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9HUk9VUF9PUFRJTUlaQVRJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fR1JPVVBfU1VNTUFSWV9DQU5DRUxFRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9MSVNURU5FUl9DQU5DRUw7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fTElTVEVORVJfQ0FOQ0VMX0FMTDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9HUk9VUF9TVU1NQVJZX0NBTkNFTEVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX0dST1VQX09QVElNSVpBVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9QQUNLQUdFX0JBTk5FRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25Bc3Npc3RhbnRTZXJ2aWNlLlJFQVNPTl9QQUNLQUdFX0NIQU5HRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZS5SRUFTT05fVE9QSUNfQkFOTkVEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuUkVBU09OX1VTRVJfU1RPUFBFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuSElOVF9IT1NUX0RJU0FCTEVfRUZGRUNUUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX0hJR0g7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuU1VQUFJFU1NFRF9FRkZFQ1RfU0NSRUVOX09OOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5UUklNX0ZVTEw7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlRSSU1fTElHSFQ7CiBpbXBvcnQgc3RhdGljIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIuRU5EX0RPQ1VNRU5UOwogaW1wb3J0IHN0YXRpYyBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyLkVORF9UQUc7CiBpbXBvcnQgc3RhdGljIG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXIuU1RBUlRfVEFHOwogCitpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFwcEdsb2JhbHM7CkBAIC03Niw3ICs4MCw2IEBACiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5JUmluZ3RvbmVQbGF5ZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CkBAIC05Niw2ICs5OSw3IEBACiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5JQ29uZGl0aW9uUHJvdmlkZXI7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5JTm90aWZpY2F0aW9uTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5JU3RhdHVzQmFyTm90aWZpY2F0aW9uSG9sZGVyOworaW1wb3J0IGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uQXNzaXN0YW50U2VydmljZTsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZTsKIGltcG9ydCBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGU7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5TdGF0dXNCYXJOb3RpZmljYXRpb247CkBAIC0xMTIsNyArMTE2LDYgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5RXZlbnQ7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5SOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5Ob3RpZmljYXRpb25WaXNpYmlsaXR5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuRmFzdFhtbFNlcmlhbGl6ZXI7CkBAIC0xMjUsOSArMTI4LDEwIEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLm5vdGlmaWNhdGlvbi5NYW5hZ2VkU2VydmljZXMuTWFuYWdlZFNlcnZpY2VJbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5ub3RpZmljYXRpb24uTWFuYWdlZFNlcnZpY2VzLlVzZXJQcm9maWxlczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuc3RhdHVzYmFyLlN0YXR1c0Jhck1hbmFnZXJJbnRlcm5hbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudnIuVnJNYW5hZ2VySW50ZXJuYWw7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnZyLlZyU3RhdGVMaXN0ZW5lcjsKIAogaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLQogaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKIGltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwogaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7CkBAIC0xNTQsMjQgKzE1OCwyNyBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CiBpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7CiAKIC8qKiB7QGhpZGV9ICovCiBwdWJsaWMgY2xhc3MgTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UgZXh0ZW5kcyBTeXN0ZW1TZXJ2aWNlIHsKICAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOb3RpZmljYXRpb25TZXJ2aWNlIjsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBEQkcgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9DSElMRF9OT1RJRklDQVRJT05TID0gQnVpbGQuSVNfREVCVUdHQUJMRQotICAgICAgICAgICAgJiYgU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJkZWJ1Zy5jaGlsZF9ub3RpZnMiLCBmYWxzZSk7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIEVOQUJMRV9DSElMRF9OT1RJRklDQVRJT05TCisgICAgICAgICAgICA9IFN5c3RlbVByb3BlcnRpZXMuZ2V0Qm9vbGVhbigiZGVidWcuY2hpbGRfbm90aWZzIiwgdHJ1ZSk7CiAKICAgICBzdGF0aWMgZmluYWwgaW50IE1BWF9QQUNLQUdFX05PVElGSUNBVElPTlMgPSA1MDsKIAogICAgIC8vIG1lc3NhZ2UgY29kZXMKICAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfVElNRU9VVCA9IDI7CiAgICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NBVkVfUE9MSUNZX0ZJTEUgPSAzOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SRUNPTlNJREVSX1JBTktJTkcgPSA0OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SQU5LSU5HX0NPTkZJR19DSEFOR0UgPSA1OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9TRU5EX1JBTktJTkdfVVBEQVRFID0gNjsKLSAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfTElTVEVORVJfSElOVFNfQ0hBTkdFRCA9IDc7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX0xJU1RFTkVSX05PVElGSUNBVElPTl9GSUxURVJfQ0hBTkdFRCA9IDg7CisgICAgc3RhdGljIGZpbmFsIGludCBNRVNTQUdFX1NFTkRfUkFOS0lOR19VUERBVEUgPSA0OworICAgIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9MSVNURU5FUl9ISU5UU19DSEFOR0VEID0gNTsKKyAgICBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfTElTVEVORVJfTk9USUZJQ0FUSU9OX0ZJTFRFUl9DSEFOR0VEID0gNjsKKworICAgIC8vIHJhbmtpbmcgdGhyZWFkIG1lc3NhZ2VzCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FU1NBR0VfUkVDT05TSURFUl9SQU5LSU5HID0gMTAwMDsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVTU0FHRV9SQU5LSU5HX1NPUlQgPSAxMDAxOwogCiAgICAgc3RhdGljIGZpbmFsIGludCBMT05HX0RFTEFZID0gMzUwMDsgLy8gMy41IHNlY29uZHMKICAgICBzdGF0aWMgZmluYWwgaW50IFNIT1JUX0RFTEFZID0gMjAwMDsgLy8gMiBzZWNvbmRzCkBAIC0xODEsMTYgKzE4OCw2IEBACiAgICAgc3RhdGljIGZpbmFsIGludCBWSUJSQVRFX1BBVFRFUk5fTUFYTEVOID0gOCAqIDIgKyAxOyAvLyB1cCB0byBlaWdodCBidW1wcwogCiAgICAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NUUkVBTV9UWVBFID0gQXVkaW9NYW5hZ2VyLlNUUkVBTV9OT1RJRklDQVRJT047Ci0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gU0NPUkVfT05HT0lOR19ISUdIRVIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgSlVOS19TQ09SRSA9IC0xMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTk9USUZJQ0FUSU9OX1BSSU9SSVRZX01VTFRJUExJRVIgPSAxMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IFNDT1JFX0RJU1BMQVlfVEhSRVNIT0xEID0gTm90aWZpY2F0aW9uLlBSSU9SSVRZX01JTiAqIE5PVElGSUNBVElPTl9QUklPUklUWV9NVUxUSVBMSUVSOwotCi0gICAgLy8gTm90aWZpY2F0aW9ucyB3aXRoIHNjb3JlcyBiZWxvdyB0aGlzIHdpbGwgbm90IGludGVycnVwdCB0aGUgdXNlciwgZWl0aGVyIHZpYSBMRUQgb3IKLSAgICAvLyBzb3VuZCBvciB2aWJyYXRpb24KLSAgICBzdGF0aWMgZmluYWwgaW50IFNDT1JFX0lOVEVSUlVQVElPTl9USFJFU0hPTEQgPQotICAgICAgICAgICAgTm90aWZpY2F0aW9uLlBSSU9SSVRZX0xPVyAqIE5PVElGSUNBVElPTl9QUklPUklUWV9NVUxUSVBMSUVSOwogCiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gRU5BQkxFX0JMT0NLRURfTk9USUZJQ0FUSU9OUyA9IHRydWU7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gRU5BQkxFX0JMT0NLRURfVE9BU1RTID0gdHJ1ZTsKQEAgLTIxOSw2ICsyMTYsOCBAQAogICAgIEF1ZGlvTWFuYWdlckludGVybmFsIG1BdWRpb01hbmFnZXJJbnRlcm5hbDsKICAgICBTdGF0dXNCYXJNYW5hZ2VySW50ZXJuYWwgbVN0YXR1c0JhcjsKICAgICBWaWJyYXRvciBtVmlicmF0b3I7CisgICAgcHJpdmF0ZSBWck1hbmFnZXJJbnRlcm5hbCBtVnJNYW5hZ2VySW50ZXJuYWw7CisgICAgcHJpdmF0ZSBmaW5hbCBOb3RpZmljYXRpb25Wckxpc3RlbmVyIG1Wckxpc3RlbmVyID0gbmV3IE5vdGlmaWNhdGlvblZyTGlzdGVuZXIoKTsKIAogICAgIGZpbmFsIElCaW5kZXIgbUZvcmVncm91bmRUb2tlbiA9IG5ldyBCaW5kZXIoKTsKICAgICBwcml2YXRlIFdvcmtlckhhbmRsZXIgbUhhbmRsZXI7CkBAIC0yODksMTEgKzI4OCwxMyBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBVc2VyUHJvZmlsZXMgbVVzZXJQcm9maWxlcyA9IG5ldyBVc2VyUHJvZmlsZXMoKTsKICAgICBwcml2YXRlIE5vdGlmaWNhdGlvbkxpc3RlbmVycyBtTGlzdGVuZXJzOworICAgIHByaXZhdGUgTm90aWZpY2F0aW9uQXNzaXN0YW50IG1Bc3Npc3RhbnQ7CiAgICAgcHJpdmF0ZSBDb25kaXRpb25Qcm92aWRlcnMgbUNvbmRpdGlvblByb3ZpZGVyczsKICAgICBwcml2YXRlIE5vdGlmaWNhdGlvblVzYWdlU3RhdHMgbVVzYWdlU3RhdHM7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTVlfVUlEID0gUHJvY2Vzcy5teVVpZCgpOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNWV9QSUQgPSBQcm9jZXNzLm15UGlkKCk7CisgICAgcHJpdmF0ZSBSYW5raW5nSGFuZGxlciBtUmFua2luZ0hhbmRsZXI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBBcmNoaXZlIHsKICAgICAgICAgZmluYWwgaW50IG1CdWZmZXJTaXplOwpAQCAtNzQxLDExICs3NDIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcGtnTmFtZSA6IHBrZ0xpc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxOb3RpZmljYXRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQWxsTm90aWZpY2F0aW9uc0ludChNWV9VSUQsIE1ZX1BJRCwgcGtnTmFtZSwgMCwgMCwgIXF1ZXJ5UmVzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVVzZXJJZCwgUkVBU09OX1BBQ0tBR0VfQ0hBTkdFRCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VVc2VySWQsIFJFQVNPTl9QQUNLQUdFX0NIQU5HRUQsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1MaXN0ZW5lcnMub25QYWNrYWdlc0NoYW5nZWQocXVlcnlSZXBsYWNlLCBwa2dMaXN0KTsKKyAgICAgICAgICAgICAgICBtQXNzaXN0YW50Lm9uUGFja2FnZXNDaGFuZ2VkKHF1ZXJ5UmVwbGFjZSwgcGtnTGlzdCk7CiAgICAgICAgICAgICAgICAgbUNvbmRpdGlvblByb3ZpZGVycy5vblBhY2thZ2VzQ2hhbmdlZChxdWVyeVJlcGxhY2UsIHBrZ0xpc3QpOwogICAgICAgICAgICAgICAgIG1SYW5raW5nSGVscGVyLm9uUGFja2FnZXNDaGFuZ2VkKHF1ZXJ5UmVwbGFjZSwgcGtnTGlzdCk7CiAgICAgICAgICAgICB9CkBAIC03NzMsNyArNzc1LDcgQEAKICAgICAgICAgICAgICAgICBpbnQgdXNlckhhbmRsZSA9IGludGVudC5nZXRJbnRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIC0xKTsKICAgICAgICAgICAgICAgICBpZiAodXNlckhhbmRsZSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFsbE5vdGlmaWNhdGlvbnNJbnQoTVlfVUlELCBNWV9QSUQsIG51bGwsIDAsIDAsIHRydWUsIHVzZXJIYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBU09OX1VTRVJfU1RPUFBFRCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBU09OX1VTRVJfU1RPUFBFRCwgbnVsbCwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fVVNFUl9QUkVTRU5UKSkgewogICAgICAgICAgICAgICAgIC8vIHR1cm4gb2ZmIExFRCB3aGVuIHVzZXIgcGFzc2VzIHRocm91Z2ggbG9jayBzY3JlZW4KQEAgLTc4Nyw2ICs3ODksNyBAQAogICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggbWFuYWdlZCBzZXJ2aWNlcwogICAgICAgICAgICAgICAgIG1Db25kaXRpb25Qcm92aWRlcnMub25Vc2VyU3dpdGNoZWQodXNlcik7CiAgICAgICAgICAgICAgICAgbUxpc3RlbmVycy5vblVzZXJTd2l0Y2hlZCh1c2VyKTsKKyAgICAgICAgICAgICAgICBtQXNzaXN0YW50Lm9uVXNlclN3aXRjaGVkKHVzZXIpOwogICAgICAgICAgICAgICAgIG1aZW5Nb2RlSGVscGVyLm9uVXNlclN3aXRjaGVkKHVzZXIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24uZXF1YWxzKEludGVudC5BQ1RJT05fVVNFUl9BRERFRCkpIHsKICAgICAgICAgICAgICAgICBtVXNlclByb2ZpbGVzLnVwZGF0ZUNhY2hlKGNvbnRleHQpOwpAQCAtODI5LDYgKzgzMiwxNCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBOb3RpZmljYXRpb25Wckxpc3RlbmVyIGV4dGVuZHMgVnJTdGF0ZUxpc3RlbmVyIHsKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uVnJTdGF0ZUNoYW5nZWQoZmluYWwgYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBtTGlzdGVuZXJzLnNldENhdGVnb3J5U3RhdGUoTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLkNBVEVHT1JZX1ZSX05PVElGSUNBVElPTlMsCisgICAgICAgICAgICAgICAgZW5hYmxlZCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIFNldHRpbmdzT2JzZXJ2ZXIgbVNldHRpbmdzT2JzZXJ2ZXI7CiAgICAgcHJpdmF0ZSBaZW5Nb2RlSGVscGVyIG1aZW5Nb2RlSGVscGVyOwogCkBAIC04NzQsOCArODg1LDkgQEAKICAgICAgICAgICAgIGV4dHJhY3Rvck5hbWVzID0gbmV3IFN0cmluZ1swXTsKICAgICAgICAgfQogICAgICAgICBtVXNhZ2VTdGF0cyA9IG5ldyBOb3RpZmljYXRpb25Vc2FnZVN0YXRzKGdldENvbnRleHQoKSk7CisgICAgICAgIG1SYW5raW5nSGFuZGxlciA9IG5ldyBSYW5raW5nSGFuZGxlcldvcmtlcihtUmFua2luZ1RocmVhZC5nZXRMb29wZXIoKSk7CiAgICAgICAgIG1SYW5raW5nSGVscGVyID0gbmV3IFJhbmtpbmdIZWxwZXIoZ2V0Q29udGV4dCgpLAotICAgICAgICAgICAgICAgIG5ldyBSYW5raW5nV29ya2VySGFuZGxlcihtUmFua2luZ1RocmVhZC5nZXRMb29wZXIoKSksCisgICAgICAgICAgICAgICAgbVJhbmtpbmdIYW5kbGVyLAogICAgICAgICAgICAgICAgIG1Vc2FnZVN0YXRzLAogICAgICAgICAgICAgICAgIGV4dHJhY3Rvck5hbWVzKTsKICAgICAgICAgbUNvbmRpdGlvblByb3ZpZGVycyA9IG5ldyBDb25kaXRpb25Qcm92aWRlcnMoZ2V0Q29udGV4dCgpLCBtSGFuZGxlciwgbVVzZXJQcm9maWxlcyk7CkBAIC04ODksNiArOTAxLDEwIEBACiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHZvaWQgb25aZW5Nb2RlQ2hhbmdlZCgpIHsKICAgICAgICAgICAgICAgICBzZW5kUmVnaXN0ZXJlZE9ubHlCcm9hZGNhc3QoTm90aWZpY2F0aW9uTWFuYWdlci5BQ1RJT05fSU5URVJSVVBUSU9OX0ZJTFRFUl9DSEFOR0VEKTsKKyAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuc2VuZEJyb2FkY2FzdEFzVXNlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbnRlbnQoTm90aWZpY2F0aW9uTWFuYWdlci5BQ1RJT05fSU5URVJSVVBUSU9OX0ZJTFRFUl9DSEFOR0VEX0lOVEVSTkFMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYWRkRmxhZ3MoSW50ZW50LkZMQUdfUkVDRUlWRVJfUkVHSVNURVJFRF9PTkxZX0JFRk9SRV9CT09UKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuQUxMLCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX05PVElGSUNBVElPTlMpOwogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZChtTm90aWZpY2F0aW9uTGlzdCkgewogICAgICAgICAgICAgICAgICAgICB1cGRhdGVJbnRlcnJ1cHRpb25GaWx0ZXJMb2NrZWQoKTsKICAgICAgICAgICAgICAgICB9CkBAIC05MDUsNiArOTIxLDcgQEAKICAgICAgICAgaW1wb3J0T2xkQmxvY2tEYigpOwogCiAgICAgICAgIG1MaXN0ZW5lcnMgPSBuZXcgTm90aWZpY2F0aW9uTGlzdGVuZXJzKCk7CisgICAgICAgIG1Bc3Npc3RhbnQgPSBuZXcgTm90aWZpY2F0aW9uQXNzaXN0YW50KCk7CiAgICAgICAgIG1TdGF0dXNCYXIgPSBnZXRMb2NhbFNlcnZpY2UoU3RhdHVzQmFyTWFuYWdlckludGVybmFsLmNsYXNzKTsKICAgICAgICAgbVN0YXR1c0Jhci5zZXROb3RpZmljYXRpb25EZWxlZ2F0ZShtTm90aWZpY2F0aW9uRGVsZWdhdGUpOwogCkBAIC0xMDEzLDEyICsxMDMwLDE1IEBACiAgICAgICAgICAgICAvLyBHcmFiIG91ciBvcHRpb25hbCBBdWRpb1NlcnZpY2UKICAgICAgICAgICAgIG1BdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5hZ2VyKSBnZXRDb250ZXh0KCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwogICAgICAgICAgICAgbUF1ZGlvTWFuYWdlckludGVybmFsID0gZ2V0TG9jYWxTZXJ2aWNlKEF1ZGlvTWFuYWdlckludGVybmFsLmNsYXNzKTsKKyAgICAgICAgICAgIG1Wck1hbmFnZXJJbnRlcm5hbCA9IGdldExvY2FsU2VydmljZShWck1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgICAgICBtVnJNYW5hZ2VySW50ZXJuYWwucmVnaXN0ZXJMaXN0ZW5lcihtVnJMaXN0ZW5lcik7CiAgICAgICAgICAgICBtWmVuTW9kZUhlbHBlci5vblN5c3RlbVJlYWR5KCk7CiAgICAgICAgIH0gZWxzZSBpZiAocGhhc2UgPT0gU3lzdGVtU2VydmljZS5QSEFTRV9USElSRF9QQVJUWV9BUFBTX0NBTl9TVEFSVCkgewogICAgICAgICAgICAgLy8gVGhpcyBvYnNlcnZlciB3aWxsIGZvcmNlIGFuIHVwZGF0ZSB3aGVuIG9ic2VydmUgaXMgY2FsbGVkLCBjYXVzaW5nIHVzIHRvCiAgICAgICAgICAgICAvLyBiaW5kIHRvIGxpc3RlbmVyIHNlcnZpY2VzLgogICAgICAgICAgICAgbVNldHRpbmdzT2JzZXJ2ZXIub2JzZXJ2ZSgpOwogICAgICAgICAgICAgbUxpc3RlbmVycy5vbkJvb3RQaGFzZUFwcHNDYW5TdGFydCgpOworICAgICAgICAgICAgbUFzc2lzdGFudC5vbkJvb3RQaGFzZUFwcHNDYW5TdGFydCgpOwogICAgICAgICAgICAgbUNvbmRpdGlvblByb3ZpZGVycy5vbkJvb3RQaGFzZUFwcHNDYW5TdGFydCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTAzMiw3ICsxMDUyLDcgQEAKICAgICAgICAgLy8gTm93LCBjYW5jZWwgYW55IG91dHN0YW5kaW5nIG5vdGlmaWNhdGlvbnMgdGhhdCBhcmUgcGFydCBvZiBhIGp1c3QtZGlzYWJsZWQgYXBwCiAgICAgICAgIGlmIChFTkFCTEVfQkxPQ0tFRF9OT1RJRklDQVRJT05TICYmICFlbmFibGVkKSB7CiAgICAgICAgICAgICBjYW5jZWxBbGxOb3RpZmljYXRpb25zSW50KE1ZX1VJRCwgTVlfUElELCBwa2csIDAsIDAsIHRydWUsIFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCksCi0gICAgICAgICAgICAgICAgICAgIFJFQVNPTl9QQUNLQUdFX0JBTk5FRCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIFJFQVNPTl9QQUNLQUdFX0JBTk5FRCwgbnVsbCwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTExOTAsNyArMTIxMCw3IEBACiAgICAgICAgICAgICAvLyBydW5uaW5nIGZvcmVncm91bmQgc2VydmljZXMuCiAgICAgICAgICAgICBjYW5jZWxBbGxOb3RpZmljYXRpb25zSW50KEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIEJpbmRlci5nZXRDYWxsaW5nUGlkKCksCiAgICAgICAgICAgICAgICAgICAgIHBrZywgMCwgTm90aWZpY2F0aW9uLkZMQUdfRk9SRUdST1VORF9TRVJWSUNFLCB0cnVlLCB1c2VySWQsCi0gICAgICAgICAgICAgICAgICAgIFJFQVNPTl9BUFBfQ0FOQ0VMX0FMTCwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgIFJFQVNPTl9BUFBfQ0FOQ0VMX0FMTCwgbnVsbCwgbnVsbCk7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTEyNDYsNyArMTI2NiwxMiBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgc2V0VG9waWNJbXBvcnRhbmNlKFN0cmluZyBwa2csIGludCB1aWQsIE5vdGlmaWNhdGlvbi5Ub3BpYyB0b3BpYywKICAgICAgICAgICAgICAgICBpbnQgaW1wb3J0YW5jZSkgewotICAgICAgICAgICAgY2hlY2tDYWxsZXJJc1N5c3RlbSgpOworICAgICAgICAgICAgZW5mb3JjZVN5c3RlbU9yU3lzdGVtVUkoIkNhbGxlciBub3Qgc3lzdGVtIG9yIHN5c3RlbXVpIik7CisgICAgICAgICAgICBpZiAoTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9OT05FID09IGltcG9ydGFuY2UpIHsKKyAgICAgICAgICAgICAgICBjYW5jZWxBbGxOb3RpZmljYXRpb25zSW50KE1ZX1VJRCwgTVlfUElELCBwa2csIDAsIDAsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldFVzZXJJZCh1aWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgUkVBU09OX1RPUElDX0JBTk5FRCwgdG9waWMsIG51bGwpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbVJhbmtpbmdIZWxwZXIuc2V0VG9waWNJbXBvcnRhbmNlKHBrZywgdWlkLCB0b3BpYywgaW1wb3J0YW5jZSk7CiAgICAgICAgICAgICBzYXZlUG9saWN5RmlsZSgpOwogICAgICAgICB9CkBAIC0xMjU3LDYgKzEyODIsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBtUmFua2luZ0hlbHBlci5nZXRUb3BpY0ltcG9ydGFuY2UocGtnLCB1aWQsIHRvcGljKTsKICAgICAgICAgfQogCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRBcHBJbXBvcnRhbmNlKFN0cmluZyBwa2csIGludCB1aWQsIGludCBpbXBvcnRhbmNlKSB7CisgICAgICAgICAgICBlbmZvcmNlU3lzdGVtT3JTeXN0ZW1VSSgiQ2FsbGVyIG5vdCBzeXN0ZW0gb3Igc3lzdGVtdWkiKTsKKyAgICAgICAgICAgIHNldE5vdGlmaWNhdGlvbnNFbmFibGVkRm9yUGFja2FnZUltcGwocGtnLCB1aWQsCisgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2UgIT0gTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9OT05FKTsKKyAgICAgICAgICAgIG1SYW5raW5nSGVscGVyLnNldEFwcEltcG9ydGFuY2UocGtnLCB1aWQsIGltcG9ydGFuY2UpOworICAgICAgICAgICAgc2F2ZVBvbGljeUZpbGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBkb2VzQXBwVXNlVG9waWNzKFN0cmluZyBwa2csIGludCB1aWQpIHsKKyAgICAgICAgICAgIGVuZm9yY2VTeXN0ZW1PclN5c3RlbVVJKCJDYWxsZXIgbm90IHN5c3RlbSBvciBzeXN0ZW11aSIpOworICAgICAgICAgICAgcmV0dXJuIG1SYW5raW5nSGVscGVyLmRvZXNBcHBVc2VUb3BpY3MocGtnLCB1aWQpOworICAgICAgICB9CisKICAgICAgICAgLyoqCiAgICAgICAgICAqIFN5c3RlbS1vbmx5IEFQSSBmb3IgZ2V0dGluZyBhIGxpc3Qgb2YgY3VycmVudCAoaS5lLiBub3QgY2xlYXJlZCkgbm90aWZpY2F0aW9ucy4KICAgICAgICAgICoKQEAgLTE0MTIsNiArMTQ1MiwzNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhhbmRsZSByZXF1ZXN0IGZyb20gYW4gYXBwcm92ZWQgbGlzdGVuZXIgdG8gcmUtZW5hYmxlIGl0c2VsZi4KKyAgICAgICAgICoKKyAgICAgICAgICogQHBhcmFtIGNvbXBvbmVudCBUaGUgY29tcG9uZW5ldCB0byBiZSByZS1lbmFibGVkLCBjYWxsZXIgbXVzdCBtYXRjaCBwYWNrYWdlLgorICAgICAgICAgKi8KKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RCaW5kTGlzdGVuZXIoQ29tcG9uZW50TmFtZSBjb21wb25lbnQpIHsKKyAgICAgICAgICAgIGNoZWNrQ2FsbGVySXNTeXN0ZW1PclNhbWVBcHAoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICAgICAgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBNYW5hZ2VkU2VydmljZXMgbWFuYWdlciA9IG1Bc3Npc3RhbnQuaXNDb21wb25lbnRFbmFibGVkRm9yQ3VycmVudFByb2ZpbGVzKGNvbXBvbmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gbUFzc2lzdGFudAorICAgICAgICAgICAgICAgICAgICAgICAgOiBtTGlzdGVuZXJzOworICAgICAgICAgICAgICAgIG1hbmFnZXIuc2V0Q29tcG9uZW50U3RhdGUoY29tcG9uZW50LCB0cnVlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RVbmJpbmRMaXN0ZW5lcihJTm90aWZpY2F0aW9uTGlzdGVuZXIgdG9rZW4pIHsKKyAgICAgICAgICAgIGxvbmcgaWRlbnRpdHkgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgLy8gYWxsb3cgYm91bmQgc2VydmljZXMgdG8gZGlzYWJsZSB0aGVtc2VsdmVzCisgICAgICAgICAgICAgICAgZmluYWwgTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8gPSBtTGlzdGVuZXJzLmNoZWNrU2VydmljZVRva2VuTG9ja2VkKHRva2VuKTsKKyAgICAgICAgICAgICAgICBpbmZvLmdldE93bmVyKCkuc2V0Q29tcG9uZW50U3RhdGUoaW5mby5jb21wb25lbnQsIGZhbHNlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIHNldE5vdGlmaWNhdGlvbnNTaG93bkZyb21MaXN0ZW5lcihJTm90aWZpY2F0aW9uTGlzdGVuZXIgdG9rZW4sIFN0cmluZ1tdIGtleXMpIHsKICAgICAgICAgICAgIGxvbmcgaWRlbnRpdHkgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKQEAgLTE4NzUsNiArMTk0NiwyMiBAQAogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50aXR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRJbXBvcnRhbmNlRnJvbUFzc2lzdGFudChJTm90aWZpY2F0aW9uTGlzdGVuZXIgdG9rZW4sIFN0cmluZyBrZXksCisgICAgICAgICAgICAgICAgaW50IGltcG9ydGFuY2UsIENoYXJTZXF1ZW5jZSBleHBsYW5hdGlvbikgeworICAgICAgICAgICAgZmluYWwgbG9uZyBpZGVudGl0eSA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Ob3RpZmljYXRpb25MaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIG1Bc3Npc3RhbnQuY2hlY2tTZXJ2aWNlVG9rZW5Mb2NrZWQodG9rZW4pOworICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25SZWNvcmQgbiA9IG1Ob3RpZmljYXRpb25zQnlLZXkuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgICAgIG4uc2V0SW1wb3J0YW5jZShpbXBvcnRhbmNlLCBleHBsYW5hdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1SYW5raW5nSGFuZGxlci5yZXF1ZXN0U29ydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGRpc2FibGVOb3RpZmljYXRpb25FZmZlY3RzKE5vdGlmaWNhdGlvblJlY29yZCByZWNvcmQpIHsKQEAgLTIwMTYsNiArMjEwMyw4IEBACiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGxpc3RlbmVyLmNvbXBvbmVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHB3LnByaW50bG4oJyknKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJcbiAgTm90aWZpY2F0aW9uIGFzc2lzdGFudDoiKTsKKyAgICAgICAgICAgICAgICBtQXNzaXN0YW50LmR1bXAocHcsIGZpbHRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwdy5wcmludGxuKCJcbiAgUG9saWN5IGFjY2VzczoiKTsKICAgICAgICAgICAgIHB3LnByaW50KCIgICAgbVBvbGljeUFjY2VzczogIik7IHB3LnByaW50bG4obVBvbGljeUFjY2Vzcyk7CkBAIC0yMDU0LDEyICsyMTQzLDEyIEBACiAgICAgICAgIGZvciAoVXNlckluZm8gdXNlciA6IFVzZXJNYW5hZ2VyLmdldChnZXRDb250ZXh0KCkpLmdldFVzZXJzKCkpIHsKICAgICAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSB1c2VyLmdldFVzZXJIYW5kbGUoKS5nZXRJZGVudGlmaWVyKCk7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlTWFuYWdlciBwYWNrYWdlTWFuYWdlciA9IGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpOwotICAgICAgICAgICAgTGlzdDxQYWNrYWdlSW5mbz4gcGFja2FnZXMgPSBwYWNrYWdlTWFuYWdlci5nZXRJbnN0YWxsZWRQYWNrYWdlcygwLCB1c2VySWQpOworICAgICAgICAgICAgTGlzdDxQYWNrYWdlSW5mbz4gcGFja2FnZXMgPSBwYWNrYWdlTWFuYWdlci5nZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcigwLCB1c2VySWQpOwogICAgICAgICAgICAgZmluYWwgaW50IHBhY2thZ2VDb3VudCA9IHBhY2thZ2VzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgcGFja2FnZUNvdW50OyBwKyspIHsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYWNrYWdlcy5nZXQocCkucGFja2FnZU5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PSBudWxsIHx8IGZpbHRlci5tYXRjaGVzKHBhY2thZ2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gcGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVpZCA9IHBhY2thZ2VNYW5hZ2VyLmdldFBhY2thZ2VVaWRBc1VzZXIocGFja2FnZU5hbWUsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tOb3RpZmljYXRpb25PcChwYWNrYWdlTmFtZSwgdWlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWVzLmFkZChwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIxNTgsMzEgKzIyNDcsMTUgQEAKIAogICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobU5vdGlmaWNhdGlvbkxpc3QpIHsKIAotICAgICAgICAgICAgICAgICAgICAvLyA9PT0gU2NvcmluZyA9PT0KLQotICAgICAgICAgICAgICAgICAgICAvLyAwLiBTYW5pdGl6ZSBpbnB1dHMKKyAgICAgICAgICAgICAgICAgICAgLy8gU2FuaXRpemUgaW5wdXRzCiAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5wcmlvcml0eSA9IGNsYW1wKG5vdGlmaWNhdGlvbi5wcmlvcml0eSwgTm90aWZpY2F0aW9uLlBSSU9SSVRZX01JTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uUFJJT1JJVFlfTUFYKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlncmF0ZSBub3RpZmljYXRpb24gZmxhZ3MgdG8gc2NvcmVzCi0gICAgICAgICAgICAgICAgICAgIGlmICgwICE9IChub3RpZmljYXRpb24uZmxhZ3MgJiBOb3RpZmljYXRpb24uRkxBR19ISUdIX1BSSU9SSVRZKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vdGlmaWNhdGlvbi5wcmlvcml0eSA8IE5vdGlmaWNhdGlvbi5QUklPUklUWV9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmljYXRpb24ucHJpb3JpdHkgPSBOb3RpZmljYXRpb24uUFJJT1JJVFlfTUFYOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNDT1JFX09OR09JTkdfSElHSEVSICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAhPSAobm90aWZpY2F0aW9uLmZsYWdzICYgTm90aWZpY2F0aW9uLkZMQUdfT05HT0lOR19FVkVOVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24ucHJpb3JpdHkgPCBOb3RpZmljYXRpb24uUFJJT1JJVFlfSElHSCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbi5wcmlvcml0eSA9IE5vdGlmaWNhdGlvbi5QUklPUklUWV9ISUdIOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gMS4gaW5pdGlhbCBzY29yZTogYnVja2V0cyBvZiAxMCwgYXJvdW5kIHRoZSBhcHAgWy0yMC4uMjBdCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBzY29yZSA9IG5vdGlmaWNhdGlvbi5wcmlvcml0eSAqIE5PVElGSUNBVElPTl9QUklPUklUWV9NVUxUSVBMSUVSOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIDIuIGV4dHJhY3QgcmFua2luZyBzaWduYWxzIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBkYXRhCisgICAgICAgICAgICAgICAgICAgIC8vIHNldHVwIGxvY2FsIGJvb2sta2VlcGluZwogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdGF0dXNCYXJOb3RpZmljYXRpb24gbiA9IG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLCBvcFBrZywgaWQsIHRhZywgY2FsbGluZ1VpZCwgY2FsbGluZ1BpZCwgc2NvcmUsIG5vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2csIG9wUGtnLCBpZCwgdGFnLCBjYWxsaW5nVWlkLCBjYWxsaW5nUGlkLCAwLCBub3RpZmljYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcik7Ci0gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblJlY29yZCByID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChuLCBzY29yZSk7CisgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblJlY29yZCByID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChnZXRDb250ZXh0KCksIG4pOwogICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25SZWNvcmQgb2xkID0gbU5vdGlmaWNhdGlvbnNCeUtleS5nZXQobi5nZXRLZXkoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChvbGQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0YWluIHJhbmtpbmcgaW5mb3JtYXRpb24gZnJvbSBwcmV2aW91cyByZWNvcmQKQEAgLTIyMTcsMjMgKzIyOTAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgbVJhbmtpbmdIZWxwZXIuZXh0cmFjdFNpZ25hbHMocik7CiAgICAgICAgICAgICAgICAgICAgIHNhdmVQb2xpY3lGaWxlKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gMy4gQXBwbHkgbG9jYWwgcnVsZXMKLQotICAgICAgICAgICAgICAgICAgICAvLyBibG9ja2VkIGFwcHMKLSAgICAgICAgICAgICAgICAgICAgaWYgKEVOQUJMRV9CTE9DS0VEX05PVElGSUNBVElPTlMgJiYgIW5vdGVOb3RpZmljYXRpb25PcChwa2csIGNhbGxpbmdVaWQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIGJsb2NrZWQgYXBwcy90b3BpY3MKKyAgICAgICAgICAgICAgICAgICAgaWYgKHIuZ2V0SW1wb3J0YW5jZSgpID09IE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfTk9ORQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFub3RlTm90aWZpY2F0aW9uT3AocGtnLCBjYWxsaW5nVWlkKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N5c3RlbU5vdGlmaWNhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2NvcmUgPSBKVU5LX1NDT1JFOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJTdXBwcmVzc2luZyBub3RpZmljYXRpb24gZnJvbSBwYWNrYWdlICIgKyBwa2cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBieSB1c2VyIHJlcXVlc3QuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzYWdlU3RhdHMucmVnaXN0ZXJCbG9ja2VkKHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChyLnNjb3JlIDwgU0NPUkVfRElTUExBWV9USFJFU0hPTEQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGlmaWNhdGlvbiB3aWxsIGJlIGJsb2NrZWQgYmVjYXVzZSB0aGUgc2NvcmUgaXMgdG9vIGxvdy4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IGluZGV4T2ZOb3RpZmljYXRpb25Mb2NrZWQobi5nZXRLZXkoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1Ob3RpZmljYXRpb25MaXN0LmFkZChyKTsKQEAgLTIzODUsNyArMjQ1Miw3IEBACiAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBub3RpZmljYXRpb24gPSByZWNvcmQuc2JuLmdldE5vdGlmaWNhdGlvbigpOwogCiAgICAgICAgIC8vIFNob3VsZCB0aGlzIG5vdGlmaWNhdGlvbiBtYWtlIG5vaXNlLCB2aWJlLCBvciB1c2UgdGhlIExFRD8KLSAgICAgICAgZmluYWwgYm9vbGVhbiBhYm92ZVRocmVzaG9sZCA9IHJlY29yZC5zY29yZSA+PSBTQ09SRV9JTlRFUlJVUFRJT05fVEhSRVNIT0xEOworICAgICAgICBmaW5hbCBib29sZWFuIGFib3ZlVGhyZXNob2xkID0gcmVjb3JkLmdldEltcG9ydGFuY2UoKSA+PSBJTVBPUlRBTkNFX0hJR0g7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gY2FuSW50ZXJydXB0ID0gYWJvdmVUaHJlc2hvbGQgJiYgIXJlY29yZC5pc0ludGVyY2VwdGVkKCk7CiAgICAgICAgIGlmIChEQkcgfHwgcmVjb3JkLmlzSW50ZXJjZXB0ZWQoKSkKICAgICAgICAgICAgIFNsb2cudihUQUcsCkBAIC0yNTM1LDkgKzI2MDIsMTQgQEAKICAgICAgICAgICAgIHVwZGF0ZUxpZ2h0c0xvY2tlZCgpOwogICAgICAgICB9CiAgICAgICAgIGlmIChidXp6IHx8IGJlZXAgfHwgYmxpbmspIHsKLSAgICAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZU5vdGlmaWNhdGlvbkFsZXJ0KHJlY29yZC5nZXRLZXkoKSwKLSAgICAgICAgICAgICAgICAgICAgYnV6eiA/IDEgOiAwLCBiZWVwID8gMSA6IDAsIGJsaW5rID8gMSA6IDApOwotICAgICAgICAgICAgbUhhbmRsZXIucG9zdChtQnV6ekJlZXBCbGlua2VkKTsKKyAgICAgICAgICAgIGlmICgoKHJlY29yZC5nZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cygpCisgICAgICAgICAgICAgICAgICAgICYgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlNVUFBSRVNTRURfRUZGRUNUX1NDUkVFTl9PTikgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoREJHKSBTbG9nLnYoVEFHLCAiU3VwcHJlc3NlZCBTeXN0ZW1VSSBmcm9tIHRyaWdnZXJpbmcgc2NyZWVuIG9uIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZU5vdGlmaWNhdGlvbkFsZXJ0KHJlY29yZC5nZXRLZXkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1enogPyAxIDogMCwgYmVlcCA/IDEgOiAwLCBibGluayA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5wb3N0KG1CdXp6QmVlcEJsaW5rZWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjg4LDcgKzI3NjAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJhbmtpbmdDb25maWdDaGFuZ2UoKSB7CisgICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVJhbmtpbmdTb3J0KCkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Ob3RpZmljYXRpb25MaXN0KSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IG1Ob3RpZmljYXRpb25MaXN0LnNpemUoKTsKICAgICAgICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IG9yZGVyQmVmb3JlID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KE4pOwpAQCAtMjY5OSw4ICsyNzcxLDggQEAKICAgICAgICAgICAgICAgICB2aXNpYmlsaXRpZXNbaV0gPSByLmdldFBhY2thZ2VWaXNpYmlsaXR5T3ZlcnJpZGUoKTsKICAgICAgICAgICAgICAgICBtUmFua2luZ0hlbHBlci5leHRyYWN0U2lnbmFscyhyKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1SYW5raW5nSGVscGVyLnNvcnQobU5vdGlmaWNhdGlvbkxpc3QpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgICAgICAgICBtUmFua2luZ0hlbHBlci5zb3J0KG1Ob3RpZmljYXRpb25MaXN0KTsKICAgICAgICAgICAgICAgICBmaW5hbCBOb3RpZmljYXRpb25SZWNvcmQgciA9IG1Ob3RpZmljYXRpb25MaXN0LmdldChpKTsKICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyQmVmb3JlLmdldChpKS5lcXVhbHMoci5nZXRLZXkoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHZpc2liaWxpdGllc1tpXSAhPSByLmdldFBhY2thZ2VWaXNpYmlsaXR5T3ZlcnJpZGUoKSkgewpAQCAtMjcxNiw3ICsyNzg4LDggQEAKICAgICAgICAgcmVjb3JkLnNldEludGVyY2VwdGVkKG1aZW5Nb2RlSGVscGVyLnNob3VsZEludGVyY2VwdChyZWNvcmQpKTsKICAgICAgICAgaWYgKHJlY29yZC5pc0ludGVyY2VwdGVkKCkpIHsKICAgICAgICAgICAgIGludCBzdXBwcmVzc2VkID0gKG1aZW5Nb2RlSGVscGVyLnNob3VsZFN1cHByZXNzTGlnaHQoKSA/IFNVUFBSRVNTRURfRUZGRUNUX0xJR0hUUyA6IDApCi0gICAgICAgICAgICAgICAgICAgIHwgKG1aZW5Nb2RlSGVscGVyLnNob3VsZFN1cHByZXNzUGVlaygpID8gU1VQUFJFU1NFRF9FRkZFQ1RfUEVFSyA6IDApOworICAgICAgICAgICAgICAgICAgICB8IChtWmVuTW9kZUhlbHBlci5zaG91bGRTdXBwcmVzc1BlZWsoKSA/IFNVUFBSRVNTRURfRUZGRUNUX1BFRUsgOiAwKQorICAgICAgICAgICAgICAgICAgICB8IChtWmVuTW9kZUhlbHBlci5zaG91bGRTdXBwcmVzc1NjcmVlbk9uKCkgPyBTVVBQUkVTU0VEX0VGRkVDVF9TQ1JFRU5fT04gOiAwKTsKICAgICAgICAgICAgIHJlY29yZC5zZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyhzdXBwcmVzc2VkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3OTAsOSArMjg2Myw5IEBACiAKICAgICB9CiAKLSAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFJhbmtpbmdXb3JrZXJIYW5kbGVyIGV4dGVuZHMgSGFuZGxlcgorICAgIHByaXZhdGUgZmluYWwgY2xhc3MgUmFua2luZ0hhbmRsZXJXb3JrZXIgZXh0ZW5kcyBIYW5kbGVyIGltcGxlbWVudHMgUmFua2luZ0hhbmRsZXIKICAgICB7Ci0gICAgICAgIHB1YmxpYyBSYW5raW5nV29ya2VySGFuZGxlcihMb29wZXIgbG9vcGVyKSB7CisgICAgICAgIHB1YmxpYyBSYW5raW5nSGFuZGxlcldvcmtlcihMb29wZXIgbG9vcGVyKSB7CiAgICAgICAgICAgICBzdXBlcihsb29wZXIpOwogICAgICAgICB9CiAKQEAgLTI4MDIsMTEgKzI4NzUsMjMgQEAKICAgICAgICAgICAgICAgICBjYXNlIE1FU1NBR0VfUkVDT05TSURFUl9SQU5LSU5HOgogICAgICAgICAgICAgICAgICAgICBoYW5kbGVSYW5raW5nUmVjb25zaWRlcmF0aW9uKG1zZyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgTUVTU0FHRV9SQU5LSU5HX0NPTkZJR19DSEFOR0U6Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZVJhbmtpbmdDb25maWdDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBjYXNlIE1FU1NBR0VfUkFOS0lOR19TT1JUOgorICAgICAgICAgICAgICAgICAgICBoYW5kbGVSYW5raW5nU29ydCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RTb3J0KCkgeworICAgICAgICAgICAgcmVtb3ZlTWVzc2FnZXMoTUVTU0FHRV9SQU5LSU5HX1NPUlQpOworICAgICAgICAgICAgc2VuZEVtcHR5TWVzc2FnZShNRVNTQUdFX1JBTktJTkdfU09SVCk7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgdm9pZCByZXF1ZXN0UmVjb25zaWRlcmF0aW9uKFJhbmtpbmdSZWNvbnNpZGVyYXRpb24gcmVjb24pIHsKKyAgICAgICAgICAgIE1lc3NhZ2UgbSA9IE1lc3NhZ2Uub2J0YWluKHRoaXMsCisgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbk1hbmFnZXJTZXJ2aWNlLk1FU1NBR0VfUkVDT05TSURFUl9SQU5LSU5HLCByZWNvbik7CisgICAgICAgICAgICBsb25nIGRlbGF5ID0gcmVjb24uZ2V0RGVsYXkoVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICAgICAgICAgIHNlbmRNZXNzYWdlRGVsYXllZChtLCBkZWxheSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOb3RpZmljYXRpb25zCkBAIC0yOTg5LDExICszMDc0LDExIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ2FuY2VscyBhbGwgbm90aWZpY2F0aW9ucyBmcm9tIGEgZ2l2ZW4gcGFja2FnZSB0aGF0IGhhdmUgYWxsIG9mIHRoZQorICAgICAqIENhbmNlbHMgYWxsIG5vdGlmaWNhdGlvbnMgZnJvbSBhIGdpdmVuIHBhY2thZ2Ugb3IgdG9waWMgdGhhdCBoYXZlIGFsbCBvZiB0aGUKICAgICAgKiB7QGNvZGUgbXVzdEhhdmVGbGFnc30uCiAgICAgICovCiAgICAgYm9vbGVhbiBjYW5jZWxBbGxOb3RpZmljYXRpb25zSW50KGludCBjYWxsaW5nVWlkLCBpbnQgY2FsbGluZ1BpZCwgU3RyaW5nIHBrZywgaW50IG11c3RIYXZlRmxhZ3MsCi0gICAgICAgICAgICBpbnQgbXVzdE5vdEhhdmVGbGFncywgYm9vbGVhbiBkb2l0LCBpbnQgdXNlcklkLCBpbnQgcmVhc29uLAorICAgICAgICAgICAgaW50IG11c3ROb3RIYXZlRmxhZ3MsIGJvb2xlYW4gZG9pdCwgaW50IHVzZXJJZCwgaW50IHJlYXNvbiwgTm90aWZpY2F0aW9uLlRvcGljIHRvcGljLAogICAgICAgICAgICAgTWFuYWdlZFNlcnZpY2VJbmZvIGxpc3RlbmVyKSB7CiAgICAgICAgIFN0cmluZyBsaXN0ZW5lck5hbWUgPSBsaXN0ZW5lciA9PSBudWxsID8gbnVsbCA6IGxpc3RlbmVyLmNvbXBvbmVudC50b1Nob3J0U3RyaW5nKCk7CiAgICAgICAgIEV2ZW50TG9nVGFncy53cml0ZU5vdGlmaWNhdGlvbkNhbmNlbEFsbChjYWxsaW5nVWlkLCBjYWxsaW5nUGlkLApAQCAtMzAyMSw2ICszMTA2LDEwIEBACiAgICAgICAgICAgICAgICAgaWYgKHBrZyAhPSBudWxsICYmICFyLnNibi5nZXRQYWNrYWdlTmFtZSgpLmVxdWFscyhwa2cpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodG9waWMgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRvcGljLmdldElkKCkuZXF1YWxzKHIuZ2V0Tm90aWZpY2F0aW9uKCkuZ2V0VG9waWMoKS5nZXRJZCgpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGNhbmNlbGVkTm90aWZpY2F0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkTm90aWZpY2F0aW9ucyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICAgICAgICAgIH0KQEAgLTMyNDcsNDYgKzMzMzYsNDMgQEAKICAgICAgKiA8cD5DYWxsZXIgbXVzdCBob2xkIGEgbG9jayBvbiBtTm90aWZpY2F0aW9uTGlzdC48L3A+CiAgICAgICovCiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb25SYW5raW5nVXBkYXRlIG1ha2VSYW5raW5nVXBkYXRlTG9ja2VkKE1hbmFnZWRTZXJ2aWNlSW5mbyBpbmZvKSB7Ci0gICAgICAgIGludCBzcGVlZEJ1bXBJbmRleCA9IC0xOwogICAgICAgICBmaW5hbCBpbnQgTiA9IG1Ob3RpZmljYXRpb25MaXN0LnNpemUoKTsKICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4ga2V5cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihOKTsKICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gaW50ZXJjZXB0ZWRLZXlzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KE4pOworICAgICAgICBBcnJheUxpc3Q8SW50ZWdlcj4gaW1wb3J0YW5jZSA9IG5ldyBBcnJheUxpc3Q8PihOKTsKICAgICAgICAgQnVuZGxlIHZpc2liaWxpdHlPdmVycmlkZXMgPSBuZXcgQnVuZGxlKCk7CiAgICAgICAgIEJ1bmRsZSBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyA9IG5ldyBCdW5kbGUoKTsKKyAgICAgICAgQnVuZGxlIGV4cGxhbmF0aW9uID0gbmV3IEJ1bmRsZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgewogICAgICAgICAgICAgTm90aWZpY2F0aW9uUmVjb3JkIHJlY29yZCA9IG1Ob3RpZmljYXRpb25MaXN0LmdldChpKTsKICAgICAgICAgICAgIGlmICghaXNWaXNpYmxlVG9MaXN0ZW5lcihyZWNvcmQuc2JuLCBpbmZvKSkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAga2V5cy5hZGQocmVjb3JkLnNibi5nZXRLZXkoKSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcga2V5ID0gcmVjb3JkLnNibi5nZXRLZXkoKTsKKyAgICAgICAgICAgIGtleXMuYWRkKGtleSk7CisgICAgICAgICAgICBpbXBvcnRhbmNlLmFkZChyZWNvcmQuZ2V0SW1wb3J0YW5jZSgpKTsKKyAgICAgICAgICAgIGlmIChyZWNvcmQuZ2V0SW1wb3J0YW5jZUV4cGxhbmF0aW9uKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uLnB1dENoYXJTZXF1ZW5jZShrZXksIHJlY29yZC5nZXRJbXBvcnRhbmNlRXhwbGFuYXRpb24oKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmVjb3JkLmlzSW50ZXJjZXB0ZWQoKSkgewotICAgICAgICAgICAgICAgIGludGVyY2VwdGVkS2V5cy5hZGQocmVjb3JkLnNibi5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgaW50ZXJjZXB0ZWRLZXlzLmFkZChrZXkpOwogCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0cy5wdXRJbnQoCi0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5zYm4uZ2V0S2V5KCksIHJlY29yZC5nZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cygpKTsKKyAgICAgICAgICAgIHN1cHByZXNzZWRWaXN1YWxFZmZlY3RzLnB1dEludChrZXksIHJlY29yZC5nZXRTdXBwcmVzc2VkVmlzdWFsRWZmZWN0cygpKTsKICAgICAgICAgICAgIGlmIChyZWNvcmQuZ2V0UGFja2FnZVZpc2liaWxpdHlPdmVycmlkZSgpCiAgICAgICAgICAgICAgICAgICAgICE9IE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLlZJU0lCSUxJVFlfTk9fT1ZFUlJJREUpIHsKLSAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T3ZlcnJpZGVzLnB1dEludChyZWNvcmQuc2JuLmdldEtleSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmdldFBhY2thZ2VWaXNpYmlsaXR5T3ZlcnJpZGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBGaW5kIGZpcnN0IG1pbi1wcmlvIG5vdGlmaWNhdGlvbiBmb3Igc3BlZWRidW1wIHBsYWNlbWVudC4KLSAgICAgICAgICAgIGlmIChzcGVlZEJ1bXBJbmRleCA9PSAtMSAmJgotICAgICAgICAgICAgICAgICAgICAvLyBJbnRydXNpdmVuZXNzIHRydW1wcyBwcmlvcml0eSwgaGVuY2UgaWdub3JlIGludHJ1c2l2ZXMuCi0gICAgICAgICAgICAgICAgICAgICFyZWNvcmQuaXNSZWNlbnRseUludHJ1c2l2ZSgpICYmCi0gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwgcGFja2FnZSBwcmlvcml0eSBpcyBlaXRoZXIgUFJJT1JJVFlfREVGQVVMVCBvciBQUklPUklUWV9NQVgsIHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIHNjYW5uaW5nIGZvciBQUklPUklUWV9NSU4gd2l0aGluIHRoZSBwYWNrYWdlIGJ1Y2tldCBQUklPUklUWV9ERUZBVUxUCi0gICAgICAgICAgICAgICAgICAgIC8vIChvciBsb3dlciBhcyBhIHNhZmVndWFyZCkgaXMgc3VmZmljaWVudCB0byBmaW5kIHRoZSBzcGVlZGJ1bXAgaW5kZXguCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGhhdmUgdG8gcmV2aXNpdCB0aGlzIHdoZW4gbW9yZSBwYWNrYWdlIHByaW9yaXR5IGJ1Y2tldHMgYXJlIGludHJvZHVjZWQuCi0gICAgICAgICAgICAgICAgICAgIHJlY29yZC5nZXRQYWNrYWdlUHJpb3JpdHkoKSA8PSBOb3RpZmljYXRpb24uUFJJT1JJVFlfREVGQVVMVCAmJgotICAgICAgICAgICAgICAgICAgICByZWNvcmQuc2JuLmdldE5vdGlmaWNhdGlvbigpLnByaW9yaXR5ID09IE5vdGlmaWNhdGlvbi5QUklPUklUWV9NSU4pIHsKLSAgICAgICAgICAgICAgICBzcGVlZEJ1bXBJbmRleCA9IGtleXMuc2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICB2aXNpYmlsaXR5T3ZlcnJpZGVzLnB1dEludChrZXksIHJlY29yZC5nZXRQYWNrYWdlVmlzaWJpbGl0eU92ZXJyaWRlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFN0cmluZ1tdIGtleXNBciA9IGtleXMudG9BcnJheShuZXcgU3RyaW5nW2tleXMuc2l6ZSgpXSk7CisgICAgICAgIGZpbmFsIGludCBNID0ga2V5cy5zaXplKCk7CisgICAgICAgIFN0cmluZ1tdIGtleXNBciA9IGtleXMudG9BcnJheShuZXcgU3RyaW5nW01dKTsKICAgICAgICAgU3RyaW5nW10gaW50ZXJjZXB0ZWRLZXlzQXIgPSBpbnRlcmNlcHRlZEtleXMudG9BcnJheShuZXcgU3RyaW5nW2ludGVyY2VwdGVkS2V5cy5zaXplKCldKTsKKyAgICAgICAgaW50W10gaW1wb3J0YW5jZUFyID0gbmV3IGludFtNXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNOyBpKyspIHsKKyAgICAgICAgICAgIGltcG9ydGFuY2VBcltpXSA9IGltcG9ydGFuY2UuZ2V0KGkpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uUmFua2luZ1VwZGF0ZShrZXlzQXIsIGludGVyY2VwdGVkS2V5c0FyLCB2aXNpYmlsaXR5T3ZlcnJpZGVzLAotICAgICAgICAgICAgICAgIHNwZWVkQnVtcEluZGV4LCBzdXBwcmVzc2VkVmlzdWFsRWZmZWN0cyk7CisgICAgICAgICAgICAgICAgc3VwcHJlc3NlZFZpc3VhbEVmZmVjdHMsIGltcG9ydGFuY2VBciwgZXhwbGFuYXRpb24pOwogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc1Zpc2libGVUb0xpc3RlbmVyKFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4sIE1hbmFnZWRTZXJ2aWNlSW5mbyBsaXN0ZW5lcikgewpAQCAtMzI5Nyw2ICszMzgzLDQ1IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHB1YmxpYyBjbGFzcyBOb3RpZmljYXRpb25Bc3Npc3RhbnQgZXh0ZW5kcyBNYW5hZ2VkU2VydmljZXMgeworCisgICAgICAgIHB1YmxpYyBOb3RpZmljYXRpb25Bc3Npc3RhbnQoKSB7CisgICAgICAgICAgICBzdXBlcihnZXRDb250ZXh0KCksIG1IYW5kbGVyLCBtTm90aWZpY2F0aW9uTGlzdCwgbVVzZXJQcm9maWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIENvbmZpZyBnZXRDb25maWcoKSB7CisgICAgICAgICAgICBDb25maWcgYyA9IG5ldyBDb25maWcoKTsKKyAgICAgICAgICAgIGMuY2FwdGlvbiA9ICJub3RpZmljYXRpb24gYXNzaXN0YW50IjsKKyAgICAgICAgICAgIGMuc2VydmljZUludGVyZmFjZSA9IE5vdGlmaWNhdGlvbkFzc2lzdGFudFNlcnZpY2UuU0VSVklDRV9JTlRFUkZBQ0U7CisgICAgICAgICAgICBjLnNlY3VyZVNldHRpbmdOYW1lID0gU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfTk9USUZJQ0FUSU9OX0FTU0lTVEFOVDsKKyAgICAgICAgICAgIGMuYmluZFBlcm1pc3Npb24gPSBNYW5pZmVzdC5wZXJtaXNzaW9uLkJJTkRfTk9USUZJQ0FUSU9OX0FTU0lTVEFOVF9TRVJWSUNFOworICAgICAgICAgICAgYy5zZXR0aW5nc0FjdGlvbiA9IFNldHRpbmdzLkFDVElPTl9NQU5BR0VfREVGQVVMVF9BUFBTX1NFVFRJTkdTOworICAgICAgICAgICAgYy5jbGllbnRMYWJlbCA9IFIuc3RyaW5nLm5vdGlmaWNhdGlvbl9hc3Npc3RhbnRfYmluZGluZ19sYWJlbDsKKyAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBJSW50ZXJmYWNlIGFzSW50ZXJmYWNlKElCaW5kZXIgYmluZGVyKSB7CisgICAgICAgICAgICByZXR1cm4gSU5vdGlmaWNhdGlvbkxpc3RlbmVyLlN0dWIuYXNJbnRlcmZhY2UoYmluZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBjaGVja1R5cGUoSUludGVyZmFjZSBzZXJ2aWNlKSB7CisgICAgICAgICAgICByZXR1cm4gc2VydmljZSBpbnN0YW5jZW9mIElOb3RpZmljYXRpb25MaXN0ZW5lcjsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNlcnZpY2VBZGRlZChNYW5hZ2VkU2VydmljZUluZm8gaW5mbykgeworICAgICAgICAgICAgbUxpc3RlbmVycy5yZWdpc3Rlckd1ZXN0U2VydmljZShpbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblNlcnZpY2VSZW1vdmVkTG9ja2VkKE1hbmFnZWRTZXJ2aWNlSW5mbyByZW1vdmVkKSB7CisgICAgICAgICAgICBtTGlzdGVuZXJzLnVucmVnaXN0ZXJTZXJ2aWNlKHJlbW92ZWQuc2VydmljZSwgcmVtb3ZlZC51c2VyaWQpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIGNsYXNzIE5vdGlmaWNhdGlvbkxpc3RlbmVycyBleHRlbmRzIE1hbmFnZWRTZXJ2aWNlcyB7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheVNldDxNYW5hZ2VkU2VydmljZUluZm8+IG1MaWdodFRyaW1MaXN0ZW5lcnMgPSBuZXcgQXJyYXlTZXQ8PigpOwpAQCAtMzMyNCw2ICszNDQ5LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIGJvb2xlYW4gY2hlY2tUeXBlKElJbnRlcmZhY2Ugc2VydmljZSkgeworICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UgaW5zdGFuY2VvZiBJTm90aWZpY2F0aW9uTGlzdGVuZXI7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlQWRkZWQoTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8pIHsKICAgICAgICAgICAgIGZpbmFsIElOb3RpZmljYXRpb25MaXN0ZW5lciBsaXN0ZW5lciA9IChJTm90aWZpY2F0aW9uTGlzdGVuZXIpIGluZm8uc2VydmljZTsKICAgICAgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvblJhbmtpbmdVcGRhdGUgdXBkYXRlOwpAQCAtMzMzOCw2ICszNDY4LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHByb3RlY3RlZCB2b2lkIG9uU2VydmljZVJlbW92ZWRMb2NrZWQoTWFuYWdlZFNlcnZpY2VJbmZvIHJlbW92ZWQpIHsKICAgICAgICAgICAgIGlmIChtTGlzdGVuZXJzRGlzYWJsaW5nRWZmZWN0cy5yZW1vdmUocmVtb3ZlZCkpIHsKQEAgLTMzNTgsNyArMzQ4OSw2IEBACiAKICAgICAgICAgcHVibGljIGludCBnZXRPbk5vdGlmaWNhdGlvblBvc3RlZFRyaW0oTWFuYWdlZFNlcnZpY2VJbmZvIGluZm8pIHsKICAgICAgICAgICAgIHJldHVybiBtTGlnaHRUcmltTGlzdGVuZXJzLmNvbnRhaW5zKGluZm8pID8gVFJJTV9MSUdIVCA6IFRSSU1fRlVMTDsKLQogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC0zNzA1LDcgKzM4MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRva2VuID0gdG9rZW5zW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi50cmltKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbi50cmltKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkodG9rZW4pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9Ob3RpZmljYXRpb25SZWNvcmQuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvblJlY29yZC5qYXZhCmluZGV4IDNiNzM4NGUuLjBiZTJlZGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvblJlY29yZC5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL05vdGlmaWNhdGlvblJlY29yZC5qYXZhCkBAIC0xNSw2ICsxNSwxMSBAQAogICovCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5ub3RpZmljYXRpb247CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX0RFRkFVTFQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuc2VydmljZS5ub3RpZmljYXRpb24uTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9ISUdIOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfTE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfTUFYOworCiBpbXBvcnQgYW5kcm9pZC5hcHAuTm90aWZpY2F0aW9uOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247CkBAIC00OSwxMCArNTQsMTAgQEAKIHB1YmxpYyBmaW5hbCBjbGFzcyBOb3RpZmljYXRpb25SZWNvcmQgewogICAgIGZpbmFsIFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm47CiAgICAgZmluYWwgaW50IG1PcmlnaW5hbEZsYWdzOworICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKIAogICAgIE5vdGlmaWNhdGlvblVzYWdlU3RhdHMuU2luZ2xlTm90aWZpY2F0aW9uU3RhdHMgc3RhdHM7CiAgICAgYm9vbGVhbiBpc0NhbmNlbGVkOwotICAgIGludCBzY29yZTsKICAgICAvKiogV2hldGhlciB0aGUgbm90aWZpY2F0aW9uIHdhcyBzZWVuIGJ5IHRoZSB1c2VyIHZpYSBvbmUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsaXN0ZW5lcnMuICovCiAgICAgYm9vbGVhbiBtSXNTZWVuOwogCkBAIC04NCwxOCArODksNzEgQEAKICAgICBwcml2YXRlIFN0cmluZyBtR2xvYmFsU29ydEtleTsKICAgICBwcml2YXRlIGludCBtUGFja2FnZVZpc2liaWxpdHk7CiAgICAgcHJpdmF0ZSBpbnQgbVRvcGljSW1wb3J0YW5jZSA9IE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLklNUE9SVEFOQ0VfVU5TUEVDSUZJRUQ7CisgICAgcHJpdmF0ZSBpbnQgbUltcG9ydGFuY2UgPSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX1VOU1BFQ0lGSUVEOworICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIG1JbXBvcnRhbmNlRXhwbGFuYXRpb24gPSBudWxsOwogCiAgICAgcHJpdmF0ZSBpbnQgbVN1cHByZXNzZWRWaXN1YWxFZmZlY3RzID0gMDsKKyAgICBwcml2YXRlIFN0cmluZyBtVG9waWNFeHBsYW5hdGlvbjsKKyAgICBwcml2YXRlIFN0cmluZyBtUGVvcGxlRXhwbGFuYXRpb247CiAKICAgICBAVmlzaWJsZUZvclRlc3RpbmcKLSAgICBwdWJsaWMgTm90aWZpY2F0aW9uUmVjb3JkKFN0YXR1c0Jhck5vdGlmaWNhdGlvbiBzYm4sIGludCBzY29yZSkKKyAgICBwdWJsaWMgTm90aWZpY2F0aW9uUmVjb3JkKENvbnRleHQgY29udGV4dCwgU3RhdHVzQmFyTm90aWZpY2F0aW9uIHNibikKICAgICB7CiAgICAgICAgIHRoaXMuc2JuID0gc2JuOwotICAgICAgICB0aGlzLnNjb3JlID0gc2NvcmU7CiAgICAgICAgIG1PcmlnaW5hbEZsYWdzID0gc2JuLmdldE5vdGlmaWNhdGlvbigpLmZsYWdzOwogICAgICAgICBtUmFua2luZ1RpbWVNcyA9IGNhbGN1bGF0ZVJhbmtpbmdUaW1lTXMoMEwpOwogICAgICAgICBtQ3JlYXRpb25UaW1lTXMgPSBzYm4uZ2V0UG9zdFRpbWUoKTsKICAgICAgICAgbVVwZGF0ZVRpbWVNcyA9IG1DcmVhdGlvblRpbWVNczsKKyAgICAgICAgbUNvbnRleHQgPSBjb250ZXh0OworICAgICAgICBtSW1wb3J0YW5jZSA9IGRlZmF1bHRJbXBvcnRhbmNlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgZGVmYXVsdEltcG9ydGFuY2UoKSB7CisgICAgICAgIGZpbmFsIE5vdGlmaWNhdGlvbiBuID0gc2JuLmdldE5vdGlmaWNhdGlvbigpOworICAgICAgICBpbnQgaW1wb3J0YW5jZSA9IElNUE9SVEFOQ0VfREVGQVVMVDsKKworICAgICAgICAvLyBNaWdyYXRlIG5vdGlmaWNhdGlvbiBmbGFncyB0byBzY29yZXMKKyAgICAgICAgaWYgKDAgIT0gKG4uZmxhZ3MgJiBOb3RpZmljYXRpb24uRkxBR19ISUdIX1BSSU9SSVRZKSkgeworICAgICAgICAgICAgbi5wcmlvcml0eSA9IE5vdGlmaWNhdGlvbi5QUklPUklUWV9NQVg7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG4ucHJpb3JpdHkpIHsKKyAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlBSSU9SSVRZX01JTjoKKyAgICAgICAgICAgIGNhc2UgTm90aWZpY2F0aW9uLlBSSU9SSVRZX0xPVzoKKyAgICAgICAgICAgICAgICBpbXBvcnRhbmNlID0gSU1QT1JUQU5DRV9MT1c7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5QUklPUklUWV9ERUZBVUxUOgorICAgICAgICAgICAgICAgIGltcG9ydGFuY2UgPSBJTVBPUlRBTkNFX0RFRkFVTFQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5QUklPUklUWV9ISUdIOgorICAgICAgICAgICAgICAgIGltcG9ydGFuY2UgPSBJTVBPUlRBTkNFX0hJR0g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5vdGlmaWNhdGlvbi5QUklPUklUWV9NQVg6CisgICAgICAgICAgICAgICAgaW1wb3J0YW5jZSA9IElNUE9SVEFOQ0VfTUFYOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9vbGVhbiBpc05vaXN5ID0gKG4uZGVmYXVsdHMgJiBOb3RpZmljYXRpb24uREVGQVVMVF9TT1VORCkgIT0gMAorICAgICAgICAgICAgICAgIHx8IChuLmRlZmF1bHRzICYgTm90aWZpY2F0aW9uLkRFRkFVTFRfVklCUkFURSkgIT0gMAorICAgICAgICAgICAgICAgIHx8IG4uc291bmQgIT0gbnVsbAorICAgICAgICAgICAgICAgIHx8IG4udmlicmF0ZSAhPSBudWxsOworICAgICAgICBpZiAoIWlzTm9pc3kgJiYgaW1wb3J0YW5jZSA+IElNUE9SVEFOQ0VfREVGQVVMVCkgeworICAgICAgICAgICAgaW1wb3J0YW5jZSA9IElNUE9SVEFOQ0VfREVGQVVMVDsKKyAgICAgICAgfQorICAgICAgICAvLyBtYXliZSBvbmx5IGRvIHRoaXMgZm9yIHRhcmdldCBBUEkgPCBOPworICAgICAgICBpZiAoaXNOb2lzeSkgeworICAgICAgICAgICAgaWYgKGltcG9ydGFuY2UgPj0gSU1QT1JUQU5DRV9ISUdIKSB7CisgICAgICAgICAgICAgICAgaW1wb3J0YW5jZSA9IElNUE9SVEFOQ0VfTUFYOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbXBvcnRhbmNlID0gSU1QT1JUQU5DRV9ISUdIOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG4uZnVsbFNjcmVlbkludGVudCAhPSBudWxsKSB7CisgICAgICAgICAgICBpbXBvcnRhbmNlID0gSU1QT1JUQU5DRV9NQVg7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW1wb3J0YW5jZTsKICAgICB9CiAKICAgICAvLyBjb3B5IGFueSBub3RlcyB0aGF0IHRoZSByYW5raW5nIHN5c3RlbSBtYXkgaGF2ZSBtYWRlIGJlZm9yZSB0aGUgdXBkYXRlCkBAIC0xMDksNiArMTY3LDggQEAKICAgICAgICAgbUNyZWF0aW9uVGltZU1zID0gcHJldmlvdXMubUNyZWF0aW9uVGltZU1zOwogICAgICAgICBtVmlzaWJsZVNpbmNlTXMgPSBwcmV2aW91cy5tVmlzaWJsZVNpbmNlTXM7CiAgICAgICAgIG1Ub3BpY0ltcG9ydGFuY2UgPSBwcmV2aW91cy5tVG9waWNJbXBvcnRhbmNlOworICAgICAgICBtSW1wb3J0YW5jZSA9IHByZXZpb3VzLm1JbXBvcnRhbmNlOworICAgICAgICBtSW1wb3J0YW5jZUV4cGxhbmF0aW9uID0gcHJldmlvdXMubUltcG9ydGFuY2VFeHBsYW5hdGlvbjsKICAgICAgICAgLy8gRG9uJ3QgY29weSBtR2xvYmFsU29ydEtleSwgcmVjb21wdXRlIGl0LgogICAgIH0KIApAQCAtMTI5LDcgKzE4OSw3IEBACiAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgdGhpcyk7CiAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAgdWlkPSIgKyBzYm4uZ2V0VWlkKCkgKyAiIHVzZXJJZD0iICsgc2JuLmdldFVzZXJJZCgpKTsKICAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAiICBpY29uPSIgKyBpY29uU3RyKTsKLSAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAiICBwcmk9IiArIG5vdGlmaWNhdGlvbi5wcmlvcml0eSArICIgc2NvcmU9IiArIHNibi5nZXRTY29yZSgpKTsKKyAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAiICBwcmk9IiArIG5vdGlmaWNhdGlvbi5wcmlvcml0eSk7CiAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAga2V5PSIgKyBzYm4uZ2V0S2V5KCkpOwogICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICIgIHNlZW49IiArIG1Jc1NlZW4pOwogICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICIgIGdyb3VwS2V5PSIgKyBnZXRHcm91cEtleSgpKTsKQEAgLTIwMCw2ICsyNjAsOSBAQAogICAgICAgICBwdy5wcmludGxuKHByZWZpeCArICIgIG1QYWNrYWdlVmlzaWJpbGl0eT0iICsgbVBhY2thZ2VWaXNpYmlsaXR5KTsKICAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAiICBtVG9waWNJbXBvcnRhbmNlPSIKICAgICAgICAgICAgICAgICArIE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZS5SYW5raW5nLmltcG9ydGFuY2VUb1N0cmluZyhtVG9waWNJbXBvcnRhbmNlKSk7CisgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAgbUltcG9ydGFuY2U9IgorICAgICAgICAgICAgICAgICsgTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuaW1wb3J0YW5jZVRvU3RyaW5nKG1JbXBvcnRhbmNlKSk7CisgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAgbUltcG9ydGFuY2VFeHBsYW5hdGlvbj0iICsgbUltcG9ydGFuY2VFeHBsYW5hdGlvbik7CiAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAgbUludGVyY2VwdD0iICsgbUludGVyY2VwdCk7CiAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIiAgbUdsb2JhbFNvcnRLZXk9IiArIG1HbG9iYWxTb3J0S2V5KTsKICAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAiICBtUmFua2luZ1RpbWVNcz0iICsgbVJhbmtpbmdUaW1lTXMpOwpAQCAtMjM0LDE1ICsyOTcsMTkgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAiTm90aWZpY2F0aW9uUmVjb3JkKDB4JTA4eDogcGtnPSVzIHVzZXI9JXMgaWQ9JWQgdGFnPSVzIHNjb3JlPSVkIGtleT0lczogJXMpIiwKKyAgICAgICAgICAgICAgICAiTm90aWZpY2F0aW9uUmVjb3JkKDB4JTA4eDogcGtnPSVzIHVzZXI9JXMgaWQ9JWQgdGFnPSVzIGltcG9ydGFuY2U9JWQga2V5PSVzOiAlcykiLAogICAgICAgICAgICAgICAgIFN5c3RlbS5pZGVudGl0eUhhc2hDb2RlKHRoaXMpLAogICAgICAgICAgICAgICAgIHRoaXMuc2JuLmdldFBhY2thZ2VOYW1lKCksIHRoaXMuc2JuLmdldFVzZXIoKSwgdGhpcy5zYm4uZ2V0SWQoKSwKLSAgICAgICAgICAgICAgICB0aGlzLnNibi5nZXRUYWcoKSwgdGhpcy5zYm4uZ2V0U2NvcmUoKSwgdGhpcy5zYm4uZ2V0S2V5KCksCisgICAgICAgICAgICAgICAgdGhpcy5zYm4uZ2V0VGFnKCksIHRoaXMubUltcG9ydGFuY2UsIHRoaXMuc2JuLmdldEtleSgpLAogICAgICAgICAgICAgICAgIHRoaXMuc2JuLmdldE5vdGlmaWNhdGlvbigpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRDb250YWN0QWZmaW5pdHkoZmxvYXQgY29udGFjdEFmZmluaXR5KSB7CiAgICAgICAgIG1Db250YWN0QWZmaW5pdHkgPSBjb250YWN0QWZmaW5pdHk7CisgICAgICAgIGlmIChtSW1wb3J0YW5jZSA8IElNUE9SVEFOQ0VfREVGQVVMVCAmJgorICAgICAgICAgICAgICAgIG1Db250YWN0QWZmaW5pdHkgPiBWYWxpZGF0ZU5vdGlmaWNhdGlvblBlb3BsZS5WQUxJRF9DT05UQUNUKSB7CisgICAgICAgICAgICBzZXRJbXBvcnRhbmNlKElNUE9SVEFOQ0VfREVGQVVMVCwgZ2V0UGVvcGxlRXhwbGFuYXRpb24oKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgZmxvYXQgZ2V0Q29udGFjdEFmZmluaXR5KCkgewpAQCAtMjc0LDggKzM0MSwzMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldFRvcGljSW1wb3J0YW5jZShpbnQgaW1wb3J0YW5jZSkgewotICAgICAgICBpZiAoaW1wb3J0YW5jZSAhPSBOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZy5JTVBPUlRBTkNFX1VOU1BFQ0lGSUVEKSB7Ci0gICAgICAgICAgICBtVG9waWNJbXBvcnRhbmNlID0gaW1wb3J0YW5jZTsKKyAgICAgICAgbVRvcGljSW1wb3J0YW5jZSA9IGltcG9ydGFuY2U7CisgICAgICAgIGFwcGx5VG9waWNJbXBvcnRhbmNlKCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0VG9waWNFeHBsYW5hdGlvbigpIHsKKyAgICAgICAgaWYgKG1Ub3BpY0V4cGxhbmF0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIG1Ub3BpY0V4cGxhbmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3RyaW5nKGNvbS5hbmRyb2lkLmludGVybmFsLlIuc3RyaW5nLmltcG9ydGFuY2VfZnJvbV90b3BpYyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1Ub3BpY0V4cGxhbmF0aW9uOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGdldFBlb3BsZUV4cGxhbmF0aW9uKCkgeworICAgICAgICBpZiAobVBlb3BsZUV4cGxhbmF0aW9uID09IG51bGwpIHsKKyAgICAgICAgICAgIG1QZW9wbGVFeHBsYW5hdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFN0cmluZyhjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5pbXBvcnRhbmNlX2Zyb21fcGVyc29uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbVBlb3BsZUV4cGxhbmF0aW9uOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhcHBseVRvcGljSW1wb3J0YW5jZSgpIHsKKyAgICAgICAgaWYgKG1Ub3BpY0ltcG9ydGFuY2UgIT0gTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9VTlNQRUNJRklFRCkgeworICAgICAgICAgICAgbUltcG9ydGFuY2UgPSBtVG9waWNJbXBvcnRhbmNlOworICAgICAgICAgICAgbUltcG9ydGFuY2VFeHBsYW5hdGlvbiA9IGdldFRvcGljRXhwbGFuYXRpb24oKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjgzLDYgKzM3MiwyMiBAQAogICAgICAgICByZXR1cm4gbVRvcGljSW1wb3J0YW5jZTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCBzZXRJbXBvcnRhbmNlKGludCBpbXBvcnRhbmNlLCBDaGFyU2VxdWVuY2UgZXhwbGFuYXRpb24pIHsKKyAgICAgICAgaWYgKGltcG9ydGFuY2UgIT0gTm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlLlJhbmtpbmcuSU1QT1JUQU5DRV9VTlNQRUNJRklFRCkgeworICAgICAgICAgICAgbUltcG9ydGFuY2UgPSBpbXBvcnRhbmNlOworICAgICAgICAgICAgbUltcG9ydGFuY2VFeHBsYW5hdGlvbiA9IGV4cGxhbmF0aW9uOworICAgICAgICB9CisgICAgICAgIGFwcGx5VG9waWNJbXBvcnRhbmNlKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRJbXBvcnRhbmNlKCkgeworICAgICAgICByZXR1cm4gbUltcG9ydGFuY2U7CisgICAgfQorCisgICAgcHVibGljIENoYXJTZXF1ZW5jZSBnZXRJbXBvcnRhbmNlRXhwbGFuYXRpb24oKSB7CisgICAgICAgIHJldHVybiBtSW1wb3J0YW5jZUV4cGxhbmF0aW9uOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIHNldEludGVyY2VwdGVkKGJvb2xlYW4gaW50ZXJjZXB0KSB7CiAgICAgICAgIG1JbnRlcmNlcHQgPSBpbnRlcmNlcHQ7CiAgICAgICAgIHJldHVybiBtSW50ZXJjZXB0OwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0NvbmZpZy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0NvbmZpZy5qYXZhCmluZGV4IGFjZGQ5MGEuLjliMTBlZjIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdDb25maWcuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nQ29uZmlnLmphdmEKQEAgLTM1LDQgKzM1LDggQEAKICAgICB2b2lkIHNldFRvcGljSW1wb3J0YW5jZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQsIE5vdGlmaWNhdGlvbi5Ub3BpYyB0b3BpYywgaW50IGltcG9ydGFuY2UpOwogCiAgICAgaW50IGdldFRvcGljSW1wb3J0YW5jZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1aWQsIE5vdGlmaWNhdGlvbi5Ub3BpYyB0b3BpYyk7CisKKyAgICB2b2lkIHNldEFwcEltcG9ydGFuY2UoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkLCBpbnQgaW1wb3J0YW5jZSk7CisKKyAgICBib29sZWFuIGRvZXNBcHBVc2VUb3BpY3MoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkKTsKIH0KZGlmZiAtLWdpdCBhL2NvcmUvamF2YS9hbmRyb2lkL3ZpZXcvSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyLmFpZGwgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGFuZGxlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBjb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsCmNvcHkgdG8gc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hhbmRsZXIuamF2YQppbmRleCBhN2Q1Y2RhLi44MGJiNGYwIDEwMDY0NAotLS0gYS9jb3JlL2phdmEvYW5kcm9pZC92aWV3L0lEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lci5haWRsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIYW5kbGVyLmphdmEKQEAgLTEzLDE1ICsxMyw5IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIubm90aWZpY2F0aW9uOwogCi1wYWNrYWdlIGFuZHJvaWQudmlldzsKLQotLyoqCi0gICogTGlzdGVuZXIgZm9yIHNob3dpbmcvaGlkaW5nIG9mIHRoZSBkb2NrIGRpdmlkZXIuIFdpbGwgZmlyZSB3aGVuIGFuIGFwcCBpcyBzaG93biBpbiBzaWRlIGJ5IHNpZGUKLSAgKiBtb2RlIGFuZCBhIGRpdmlkZXIgc2hvdWxkIGJlIHNob3duLgotICAqCi0gICogQGhpZGUKLSAgKi8KLW9uZXdheSBpbnRlcmZhY2UgSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIHsKLSAgICB2b2lkIG9uRG9ja0RpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZChib29sZWFuIHZpc2libGUpOworcHVibGljIGludGVyZmFjZSBSYW5raW5nSGFuZGxlciB7CisgICAgcHVibGljIHZvaWQgcmVxdWVzdFNvcnQoKTsKKyAgICBwdWJsaWMgdm9pZCByZXF1ZXN0UmVjb25zaWRlcmF0aW9uKFJhbmtpbmdSZWNvbnNpZGVyYXRpb24gcmVjb24pOwogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hlbHBlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hlbHBlci5qYXZhCmluZGV4IDVhMzFjNmEuLmNlNGVjZDMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIZWxwZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyLmphdmEKQEAgLTE5LDEwICsxOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5OYW1lTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJIYW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2U7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UuUmFua2luZzsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKQEAgLTQwLDcgKzM3LDYgQEAKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKIAogcHVibGljIGNsYXNzIFJhbmtpbmdIZWxwZXIgaW1wbGVtZW50cyBSYW5raW5nQ29uZmlnIHsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlJhbmtpbmdIZWxwZXIiOwpAQCAtNzMsMTAgKzY5LDEwIEBACiAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheU1hcDxTdHJpbmcsIFJlY29yZD4gbVJlc3RvcmVkV2l0aG91dFVpZHMgPSBuZXcgQXJyYXlNYXA8PigpOyAvLyBwa2cgPT4gUmVjb3JkCiAKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1SYW5raW5nSGFuZGxlcjsKKyAgICBwcml2YXRlIGZpbmFsIFJhbmtpbmdIYW5kbGVyIG1SYW5raW5nSGFuZGxlcjsKIAotICAgIHB1YmxpYyBSYW5raW5nSGVscGVyKENvbnRleHQgY29udGV4dCwgSGFuZGxlciByYW5raW5nSGFuZGxlciwgTm90aWZpY2F0aW9uVXNhZ2VTdGF0cyB1c2FnZVN0YXRzLAotICAgICAgICAgICAgU3RyaW5nW10gZXh0cmFjdG9yTmFtZXMpIHsKKyAgICBwdWJsaWMgUmFua2luZ0hlbHBlcihDb250ZXh0IGNvbnRleHQsIFJhbmtpbmdIYW5kbGVyIHJhbmtpbmdIYW5kbGVyLAorICAgICAgICAgICAgTm90aWZpY2F0aW9uVXNhZ2VTdGF0cyB1c2FnZVN0YXRzLCBTdHJpbmdbXSBleHRyYWN0b3JOYW1lcykgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1SYW5raW5nSGFuZGxlciA9IHJhbmtpbmdIYW5kbGVyOwogCkBAIC0xMTksMTAgKzExNSw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFJhbmtpbmdSZWNvbnNpZGVyYXRpb24gcmVjb24gPSBleHRyYWN0b3IucHJvY2VzcyhyKTsKICAgICAgICAgICAgICAgICBpZiAocmVjb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBNZXNzYWdlIG0gPSBNZXNzYWdlLm9idGFpbihtUmFua2luZ0hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuTUVTU0FHRV9SRUNPTlNJREVSX1JBTktJTkcsIHJlY29uKTsKLSAgICAgICAgICAgICAgICAgICAgbG9uZyBkZWxheSA9IHJlY29uLmdldERlbGF5KFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICAgICAgICAgICAgICAgIG1SYW5raW5nSGFuZGxlci5zZW5kTWVzc2FnZURlbGF5ZWQobSwgZGVsYXkpOworICAgICAgICAgICAgICAgICAgICBtUmFua2luZ0hhbmRsZXIucmVxdWVzdFJlY29uc2lkZXJhdGlvbihyZWNvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiTm90aWZpY2F0aW9uU2lnbmFsRXh0cmFjdG9yIGZhaWxlZC4iLCB0KTsKQEAgLTE1NSw3ICsxNDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvclJlc3RvcmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RPRE86IGh0dHA6Ly9iLzIyMzg4MDEyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHBtLmdldFBhY2thZ2VVaWQobmFtZSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpZCA9IHBtLmdldFBhY2thZ2VVaWRBc1VzZXIobmFtZSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9vcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE3MCw2ICsxNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gZ2V0T3JDcmVhdGVSZWNvcmQobmFtZSwgdWlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHIuaW1wb3J0YW5jZSA9IHNhZmVJbnQocGFyc2VyLCBBVFRfSU1QT1JUQU5DRSwgREVGQVVMVF9JTVBPUlRBTkNFKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlncmF0ZSBwYWNrYWdlIGxldmVsIHNldHRpbmdzIHRvIHRoZSBkZWZhdWx0IHRvcGljLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlnaHQgYmUgb3ZlcndyaXR0ZW4gYnkgcGFyc2VUb3BpY3MuCkBAIC0yNTEsNiArMjQ1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dC5zdGFydFRhZyhudWxsLCBUQUdfUEFDS0FHRSk7CiAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVF9OQU1FLCByLnBrZyk7CisgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVF9JTVBPUlRBTkNFLCBJbnRlZ2VyLnRvU3RyaW5nKHIuaW1wb3J0YW5jZSkpOwogCiAgICAgICAgICAgICBpZiAoIWZvckJhY2t1cCkgewogICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUX1VJRCwgSW50ZWdlci50b1N0cmluZyhyLnVpZCkpOwpAQCAtMjg1LDcgKzI4MCw3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICBtU2lnbmFsRXh0cmFjdG9yc1tpXS5zZXRDb25maWcodGhpcyk7CiAgICAgICAgIH0KLSAgICAgICAgbVJhbmtpbmdIYW5kbGVyLnNlbmRFbXB0eU1lc3NhZ2UoTm90aWZpY2F0aW9uTWFuYWdlclNlcnZpY2UuTUVTU0FHRV9SQU5LSU5HX0NPTkZJR19DSEFOR0UpOworICAgICAgICBtUmFua2luZ0hhbmRsZXIucmVxdWVzdFNvcnQoKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzb3J0KEFycmF5TGlzdDxOb3RpZmljYXRpb25SZWNvcmQ+IG5vdGlmaWNhdGlvbkxpc3QpIHsKQEAgLTQyNiw2ICs0MjEsMzQgQEAKICAgICAgICAgdXBkYXRlQ29uZmlnKCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogU2V0cyB0aGUgZGVmYXVsdCBpbXBvcnRhbmNlIGZvciBhbGwgbmV3IHRvcGljcyB0aGF0IGFwcGVhciBpbiB0aGUgZnV0dXJlLCBhbmQgcmVzZXRzCisgICAgICogdGhlIGltcG9ydGFuY2Ugb2YgYWxsIGN1cnJlbnQgdG9waWNzICh1bmxlc3MgdGhlIGFwcCBpcyBiZWluZyBibG9ja2VkKS4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRBcHBJbXBvcnRhbmNlKFN0cmluZyBwa2dOYW1lLCBpbnQgdWlkLCBpbnQgaW1wb3J0YW5jZSkgeworICAgICAgICBmaW5hbCBSZWNvcmQgciA9IGdldE9yQ3JlYXRlUmVjb3JkKHBrZ05hbWUsIHVpZCk7CisgICAgICAgIHIuaW1wb3J0YW5jZSA9IGltcG9ydGFuY2U7CisgICAgICAgIGlmIChSYW5raW5nLklNUE9SVEFOQ0VfTk9ORSAhPSBpbXBvcnRhbmNlKSB7CisgICAgICAgICAgICBmb3IgKFRvcGljIHQgOiByLnRvcGljcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgIHQuaW1wb3J0YW5jZSA9IGltcG9ydGFuY2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlQ29uZmlnKCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZG9lc0FwcFVzZVRvcGljcyhTdHJpbmcgcGtnTmFtZSwgaW50IHVpZCkgeworICAgICAgICBmaW5hbCBSZWNvcmQgciA9IGdldE9yQ3JlYXRlUmVjb3JkKHBrZ05hbWUsIHVpZCk7CisgICAgICAgIGludCBudW1Ub3BpY3MgPSByLnRvcGljcy5zaXplKCk7CisgICAgICAgIGlmIChudW1Ub3BpY3MgPT0gMAorICAgICAgICAgICAgICAgIHx8IChudW1Ub3BpY3MgPT0gMSAmJiByLnRvcGljcy5jb250YWluc0tleShOb3RpZmljYXRpb24uVE9QSUNfREVGQVVMVCkpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgVG9waWMgZ2V0T3JDcmVhdGVUb3BpYyhSZWNvcmQgciwgTm90aWZpY2F0aW9uLlRvcGljIHRvcGljKSB7CiAgICAgICAgIGlmICh0b3BpYyA9PSBudWxsKSB7CiAgICAgICAgICAgICB0b3BpYyA9IGNyZWF0ZURlZmF1bHRUb3BpYygpOwpAQCAtNDM1LDYgKzQ1OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHQgPSBuZXcgVG9waWModG9waWMpOworICAgICAgICAgICAgdC5pbXBvcnRhbmNlID0gci5pbXBvcnRhbmNlOwogICAgICAgICAgICAgci50b3BpY3MucHV0KHRvcGljLmdldElkKCksIHQpOwogICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgIH0KQEAgLTQ2MSw3ICs0ODUsOSBAQAogICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsKICAgICAgICAgICAgIHB3LnByaW50bG4oInBlci1wYWNrYWdlIGNvbmZpZzoiKTsKICAgICAgICAgfQorICAgICAgICBwdy5wcmludGxuKCJSZWNvcmRzOiIpOwogICAgICAgICBkdW1wUmVjb3JkcyhwdywgcHJlZml4LCBmaWx0ZXIsIG1SZWNvcmRzKTsKKyAgICAgICAgcHcucHJpbnRsbigiUmVzdG9yZWQgd2l0aG91dCB1aWQ6Iik7CiAgICAgICAgIGR1bXBSZWNvcmRzKHB3LCBwcmVmaXgsIGZpbHRlciwgbVJlc3RvcmVkV2l0aG91dFVpZHMpOwogICAgIH0KIApAQCAtNDc3LDYgKzUwMyw4IEBACiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAoIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoci51aWQgPT0gUmVjb3JkLlVOS05PV05fVUlEID8gIlVOS05PV05fVUlEIiA6IEludGVnZXIudG9TdHJpbmcoci51aWQpKTsKICAgICAgICAgICAgICAgICBwdy5wcmludCgnKScpOworICAgICAgICAgICAgICAgIHB3LnByaW50KCIgaW1wb3J0YW5jZT0iKTsKKyAgICAgICAgICAgICAgICBwdy5wcmludChSYW5raW5nLmltcG9ydGFuY2VUb1N0cmluZyhyLmltcG9ydGFuY2UpKTsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgICAgICAgICAgZm9yIChUb3BpYyB0IDogci50b3BpY3MudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsKQEAgLTUxMyw3ICs1NDEsNyBAQAogICAgICAgICAgICAgaWYgKHIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogaHR0cDovL2IvMjIzODgwMTIKLSAgICAgICAgICAgICAgICAgICAgci51aWQgPSBwbS5nZXRQYWNrYWdlVWlkKHIucGtnLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgICAgICAgICAgICAgci51aWQgPSBwbS5nZXRQYWNrYWdlVWlkQXNVc2VyKHIucGtnLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKICAgICAgICAgICAgICAgICAgICAgbVJlc3RvcmVkV2l0aG91dFVpZHMucmVtb3ZlKHBrZyk7CiAgICAgICAgICAgICAgICAgICAgIG1SZWNvcmRzLnB1dChyZWNvcmRLZXkoci5wa2csIHIudWlkKSwgcik7CiAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgPSB0cnVlOwpAQCAtNTMyLDYgKzU2MCw3IEBACiAKICAgICAgICAgU3RyaW5nIHBrZzsKICAgICAgICAgaW50IHVpZCA9IFVOS05PV05fVUlEOworICAgICAgICBpbnQgaW1wb3J0YW5jZSA9IERFRkFVTFRfSU1QT1JUQU5DRTsKICAgICAgICAgTWFwPFN0cmluZywgVG9waWM+IHRvcGljcyA9IG5ldyBBcnJheU1hcDw+KCk7CiAgICB9CiAKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVDb25kaXRpb25zLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9aZW5Nb2RlQ29uZGl0aW9ucy5qYXZhCmluZGV4IGNlZTllYzguLjljZGVjZTUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVDb25kaXRpb25zLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vWmVuTW9kZUNvbmRpdGlvbnMuamF2YQpAQCAtMTA5LDcgKzEwOSw2IEBACiAgICAgICAgIGlmIChERUJVRykgTG9nLmQoVEFHLCAib25Db25kaXRpb25DaGFuZ2VkICIgKyBpZCArICIgIiArIGNvbmRpdGlvbik7CiAgICAgICAgIFplbk1vZGVDb25maWcgY29uZmlnID0gbUhlbHBlci5nZXRDb25maWcoKTsKICAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSByZXR1cm47Ci0gICAgICAgIGNvbmZpZyA9IGNvbmZpZy5jb3B5KCk7CiAgICAgICAgIGJvb2xlYW4gdXBkYXRlZCA9IHVwZGF0ZUNvbmRpdGlvbihpZCwgY29uZGl0aW9uLCBjb25maWcubWFudWFsUnVsZSk7CiAgICAgICAgIGZvciAoWmVuUnVsZSBhdXRvbWF0aWNSdWxlIDogY29uZmlnLmF1dG9tYXRpY1J1bGVzLnZhbHVlcygpKSB7CiAgICAgICAgICAgICB1cGRhdGVkIHw9IHVwZGF0ZUNvbmRpdGlvbihpZCwgY29uZGl0aW9uLCBhdXRvbWF0aWNSdWxlKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVIZWxwZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1plbk1vZGVIZWxwZXIuamF2YQppbmRleCAzYzg5MWRmLi5mNzA0M2E2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9aZW5Nb2RlSGVscGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vWmVuTW9kZUhlbHBlci5qYXZhCkBAIC03Nyw2ICs3Nyw5IEBACiAgICAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiWmVuTW9kZUhlbHBlciI7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBMb2cuaXNMb2dnYWJsZShUQUcsIExvZy5ERUJVRyk7CiAKKyAgICAvLyBUaGUgYW1vdW50IG9mIHRpbWUgcnVsZXMgaW5zdGFuY2VzIGNhbiBleGlzdCB3aXRob3V0IHRoZWlyIG93bmluZyBhcHAgYmVpbmcgaW5zdGFsbGVkLgorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSVUxFX0lOU1RBTkNFX0dSQUNFX1BFUklPRCA9IDEwMDAgKiA2MCAqIDYwICogNzI7CisKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBIIG1IYW5kbGVyOwogICAgIHByaXZhdGUgZmluYWwgU2V0dGluZ3NPYnNlcnZlciBtU2V0dGluZ3NPYnNlcnZlcjsKQEAgLTkzLDYgKzk2LDcgQEAKICAgICBwcml2YXRlIGludCBtVXNlciA9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU07CiAgICAgcHJpdmF0ZSBaZW5Nb2RlQ29uZmlnIG1Db25maWc7CiAgICAgcHJpdmF0ZSBBdWRpb01hbmFnZXJJbnRlcm5hbCBtQXVkaW9NYW5hZ2VyOworICAgIHByaXZhdGUgUGFja2FnZU1hbmFnZXIgbVBtOwogICAgIHByaXZhdGUgYm9vbGVhbiBtRWZmZWN0c1N1cHByZXNzZWQ7CiAKICAgICBwdWJsaWMgWmVuTW9kZUhlbHBlcihDb250ZXh0IGNvbnRleHQsIExvb3BlciBsb29wZXIsIENvbmRpdGlvblByb3ZpZGVycyBjb25kaXRpb25Qcm92aWRlcnMpIHsKQEAgLTE1MSw2ICsxNTUsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyBib29sZWFuIHNob3VsZFN1cHByZXNzU2NyZWVuT24oKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUNvbmZpZykgeworICAgICAgICAgICAgcmV0dXJuICFtQ29uZmlnLmFsbG93U2NyZWVuT247CisgICAgICAgIH0KKyAgICB9CisKICAgICBwdWJsaWMgdm9pZCBhZGRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykgewogICAgICAgICBtQ2FsbGJhY2tzLmFkZChjYWxsYmFjayk7CiAgICAgfQpAQCAtMTcwLDcgKzE4MCw5IEBACiAgICAgICAgIGlmIChtQXVkaW9NYW5hZ2VyICE9IG51bGwpIHsKICAgICAgICAgICAgIG1BdWRpb01hbmFnZXIuc2V0UmluZ2VyTW9kZURlbGVnYXRlKG1SaW5nZXJNb2RlRGVsZWdhdGUpOwogICAgICAgICB9CisgICAgICAgIG1QbSA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCk7CiAgICAgICAgIG1IYW5kbGVyLnBvc3RNZXRyaWNzVGltZXIoKTsKKyAgICAgICAgY2xlYW5VcFplblJ1bGVzKCk7CiAgICAgICAgIGV2YWx1YXRlWmVuTW9kZSgib25TeXN0ZW1SZWFkeSIsIHRydWUpOwogICAgIH0KIApAQCAtMTg0LDcgKzE5NiwxMCBAQAogICAgICAgICAgICAgY29uZmlnID0gbURlZmF1bHRDb25maWcuY29weSgpOwogICAgICAgICAgICAgY29uZmlnLnVzZXIgPSB1c2VyOwogICAgICAgICB9Ci0gICAgICAgIHNldENvbmZpZyhjb25maWcsICJvblVzZXJTd2l0Y2hlZCIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKKyAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcsICJvblVzZXJTd2l0Y2hlZCIpOworICAgICAgICB9CisgICAgICAgIGNsZWFuVXBaZW5SdWxlcygpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIG9uVXNlclJlbW92ZWQoaW50IHVzZXIpIHsKQEAgLTI1MywxNCArMjY4LDE1IEBACiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUnVsZSBhbHJlYWR5IGV4aXN0cyIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbmV3Q29uZmlnID0gbUNvbmZpZy5jb3B5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgWmVuUnVsZSBydWxlID0gbmV3IFplblJ1bGUoKTsKLSAgICAgICAgcG9wdWxhdGVaZW5SdWxlKGF1dG9tYXRpY1plblJ1bGUsIHJ1bGUsIHRydWUpOwotICAgICAgICBuZXdDb25maWcuYXV0b21hdGljUnVsZXMucHV0KHJ1bGUuaWQsIHJ1bGUpOwotICAgICAgICBpZiAoc2V0Q29uZmlnKG5ld0NvbmZpZywgcmVhc29uLCB0cnVlKSkgewotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUF1dG9tYXRpY1plblJ1bGUocnVsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICAgICAgWmVuUnVsZSBydWxlID0gbmV3IFplblJ1bGUoKTsKKyAgICAgICAgICAgIHBvcHVsYXRlWmVuUnVsZShhdXRvbWF0aWNaZW5SdWxlLCBydWxlLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy5wdXQocnVsZS5pZCwgcnVsZSk7CisgICAgICAgICAgICBpZiAoc2V0Q29uZmlnKG5ld0NvbmZpZywgcmVhc29uLCB0cnVlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBdXRvbWF0aWNaZW5SdWxlKHJ1bGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjczLDIxICsyODksMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICsgIiByZWFzb249IiArIHJlYXNvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXdDb25maWcgPSBtQ29uZmlnLmNvcHkoKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBTdHJpbmcgcnVsZUlkID0gYXV0b21hdGljWmVuUnVsZS5nZXRJZCgpOwotICAgICAgICBaZW5Nb2RlQ29uZmlnLlplblJ1bGUgcnVsZTsKLSAgICAgICAgaWYgKHJ1bGVJZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSdWxlIGRvZXNuJ3QgZXhpc3QiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJ1bGUgPSBuZXdDb25maWcuYXV0b21hdGljUnVsZXMuZ2V0KHJ1bGVJZCk7Ci0gICAgICAgICAgICBpZiAocnVsZSA9PSBudWxsIHx8ICFjYW5NYW5hZ2VBdXRvbWF0aWNaZW5SdWxlKHJ1bGUpKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCB1cGRhdGUgcnVsZXMgbm90IG93bmVkIGJ5IHlvdXIgY29uZGl0aW9uIHByb3ZpZGVyIik7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcnVsZUlkID0gYXV0b21hdGljWmVuUnVsZS5nZXRJZCgpOworICAgICAgICAgICAgWmVuTW9kZUNvbmZpZy5aZW5SdWxlIHJ1bGU7CisgICAgICAgICAgICBpZiAocnVsZUlkID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSdWxlIGRvZXNuJ3QgZXhpc3QiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcnVsZSA9IG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy5nZXQocnVsZUlkKTsKKyAgICAgICAgICAgICAgICBpZiAocnVsZSA9PSBudWxsIHx8ICFjYW5NYW5hZ2VBdXRvbWF0aWNaZW5SdWxlKHJ1bGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHVwZGF0ZSBydWxlcyBub3Qgb3duZWQgYnkgeW91ciBjb25kaXRpb24gcHJvdmlkZXIiKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBwb3B1bGF0ZVplblJ1bGUoYXV0b21hdGljWmVuUnVsZSwgcnVsZSwgZmFsc2UpOworICAgICAgICAgICAgbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnB1dChydWxlSWQsIHJ1bGUpOworICAgICAgICAgICAgcmV0dXJuIHNldENvbmZpZyhuZXdDb25maWcsIHJlYXNvbiwgdHJ1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgcG9wdWxhdGVaZW5SdWxlKGF1dG9tYXRpY1plblJ1bGUsIHJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnB1dChydWxlSWQsIHJ1bGUpOwotICAgICAgICByZXR1cm4gc2V0Q29uZmlnKG5ld0NvbmZpZywgcmVhc29uLCB0cnVlKTsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBdXRvbWF0aWNaZW5SdWxlKFN0cmluZyBpZCwgU3RyaW5nIHJlYXNvbikgewpAQCAtMjk1LDE3ICszMTEsMTcgQEAKICAgICAgICAgc3luY2hyb25pemVkIChtQ29uZmlnKSB7CiAgICAgICAgICAgICBpZiAobUNvbmZpZyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBuZXdDb25maWcgPSBtQ29uZmlnLmNvcHkoKTsKKyAgICAgICAgICAgIFplblJ1bGUgcnVsZSA9IG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy5nZXQoaWQpOworICAgICAgICAgICAgaWYgKHJ1bGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKGNhbk1hbmFnZUF1dG9tYXRpY1plblJ1bGUocnVsZSkpIHsKKyAgICAgICAgICAgICAgICBuZXdDb25maWcuYXV0b21hdGljUnVsZXMucmVtb3ZlKGlkKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInJlbW92ZVplblJ1bGUgemVuUnVsZT0iICsgaWQgKyAiIHJlYXNvbj0iICsgcmVhc29uKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBkZWxldGUgcnVsZXMgbm90IG93bmVkIGJ5IHlvdXIgY29uZGl0aW9uIHByb3ZpZGVyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc2V0Q29uZmlnKG5ld0NvbmZpZywgcmVhc29uLCB0cnVlKTsKICAgICAgICAgfQotICAgICAgICBaZW5SdWxlIHJ1bGUgPSBuZXdDb25maWcuYXV0b21hdGljUnVsZXMuZ2V0KGlkKTsKLSAgICAgICAgaWYgKHJ1bGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoY2FuTWFuYWdlQXV0b21hdGljWmVuUnVsZShydWxlKSkgewotICAgICAgICAgICAgbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnJlbW92ZShpZCk7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInJlbW92ZVplblJ1bGUgemVuUnVsZT0iICsgaWQgKyAiIHJlYXNvbj0iICsgcmVhc29uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgZGVsZXRlIHJ1bGVzIG5vdCBvd25lZCBieSB5b3VyIGNvbmRpdGlvbiBwcm92aWRlciIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzZXRDb25maWcobmV3Q29uZmlnLCByZWFzb24sIHRydWUpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIHJlbW92ZUF1dG9tYXRpY1plblJ1bGVzKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHJlYXNvbikgewpAQCAtMzEzLDE1ICszMjksMTUgQEAKICAgICAgICAgc3luY2hyb25pemVkIChtQ29uZmlnKSB7CiAgICAgICAgICAgICBpZiAobUNvbmZpZyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBuZXdDb25maWcgPSBtQ29uZmlnLmNvcHkoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBpID0gbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBaZW5SdWxlIHJ1bGUgPSBuZXdDb25maWcuYXV0b21hdGljUnVsZXMuZ2V0KG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy5rZXlBdChpKSk7Ci0gICAgICAgICAgICBpZiAocnVsZS5jb21wb25lbnQuZ2V0UGFja2FnZU5hbWUoKS5lcXVhbHMocGFja2FnZU5hbWUpCi0gICAgICAgICAgICAgICAgICAgICYmIGNhbk1hbmFnZUF1dG9tYXRpY1plblJ1bGUocnVsZSkpIHsKLSAgICAgICAgICAgICAgICBuZXdDb25maWcuYXV0b21hdGljUnVsZXMucmVtb3ZlQXQoaSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgWmVuUnVsZSBydWxlID0gbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLmdldChuZXdDb25maWcuYXV0b21hdGljUnVsZXMua2V5QXQoaSkpOworICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbXBvbmVudC5nZXRQYWNrYWdlTmFtZSgpLmVxdWFscyhwYWNrYWdlTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIGNhbk1hbmFnZUF1dG9tYXRpY1plblJ1bGUocnVsZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnJlbW92ZUF0KGkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzZXRDb25maWcobmV3Q29uZmlnLCByZWFzb24sIHRydWUpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzZXRDb25maWcobmV3Q29uZmlnLCByZWFzb24sIHRydWUpOwogICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGNhbk1hbmFnZUF1dG9tYXRpY1plblJ1bGUoWmVuUnVsZSBydWxlKSB7CkBAIC0zMzIsOCArMzQ4LDcgQEAKICAgICAgICAgICAgICAgICA9PSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgU3RyaW5nW10gcGFja2FnZXMgPQotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VzRm9yVWlkKEJpbmRlci5nZXRDYWxsaW5nVWlkKCkpOworICAgICAgICAgICAgU3RyaW5nW10gcGFja2FnZXMgPSBtUG0uZ2V0UGFja2FnZXNGb3JVaWQoQmluZGVyLmdldENhbGxpbmdVaWQoKSk7CiAgICAgICAgICAgICBpZiAocGFja2FnZXMgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGZpbmFsIGludCBwYWNrYWdlQ291bnQgPSBwYWNrYWdlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlQ291bnQ7IGkrKykgewpAQCAtMzg0LDIyICszOTksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgKyAiIGNvbmRpdGlvbklkPSIgKyBjb25kaXRpb25JZCArICIgcmVhc29uPSIgKyByZWFzb24KICAgICAgICAgICAgICAgICAgICAgKyAiIHNldFJpbmdlck1vZGU9IiArIHNldFJpbmdlck1vZGUpOwogICAgICAgICAgICAgbmV3Q29uZmlnID0gbUNvbmZpZy5jb3B5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHplbk1vZGUgPT0gR2xvYmFsLlpFTl9NT0RFX09GRikgewotICAgICAgICAgICAgbmV3Q29uZmlnLm1hbnVhbFJ1bGUgPSBudWxsOwotICAgICAgICAgICAgZm9yIChaZW5SdWxlIGF1dG9tYXRpY1J1bGUgOiBuZXdDb25maWcuYXV0b21hdGljUnVsZXMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0b21hdGljUnVsZS5pc0F1dG9tYXRpY0FjdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY1J1bGUuc25vb3ppbmcgPSB0cnVlOworICAgICAgICAgICAgaWYgKHplbk1vZGUgPT0gR2xvYmFsLlpFTl9NT0RFX09GRikgeworICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tYW51YWxSdWxlID0gbnVsbDsKKyAgICAgICAgICAgICAgICBmb3IgKFplblJ1bGUgYXV0b21hdGljUnVsZSA6IG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy52YWx1ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b21hdGljUnVsZS5pc0F1dG9tYXRpY0FjdGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNSdWxlLnNub296aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmluYWwgWmVuUnVsZSBuZXdSdWxlID0gbmV3IFplblJ1bGUoKTsKKyAgICAgICAgICAgICAgICBuZXdSdWxlLmVuYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIG5ld1J1bGUuemVuTW9kZSA9IHplbk1vZGU7CisgICAgICAgICAgICAgICAgbmV3UnVsZS5jb25kaXRpb25JZCA9IGNvbmRpdGlvbklkOworICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tYW51YWxSdWxlID0gbmV3UnVsZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbmFsIFplblJ1bGUgbmV3UnVsZSA9IG5ldyBaZW5SdWxlKCk7Ci0gICAgICAgICAgICBuZXdSdWxlLmVuYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgbmV3UnVsZS56ZW5Nb2RlID0gemVuTW9kZTsKLSAgICAgICAgICAgIG5ld1J1bGUuY29uZGl0aW9uSWQgPSBjb25kaXRpb25JZDsKLSAgICAgICAgICAgIG5ld0NvbmZpZy5tYW51YWxSdWxlID0gbmV3UnVsZTsKKyAgICAgICAgICAgIHNldENvbmZpZyhuZXdDb25maWcsIHJlYXNvbiwgc2V0UmluZ2VyTW9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgc2V0Q29uZmlnKG5ld0NvbmZpZywgcmVhc29uLCBzZXRSaW5nZXJNb2RlKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcHJlZml4KSB7CkBAIC00MjYsMTEgKzQ0MSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIHB3LnByaW50ZigiYWxsb3coY2FsbHM9JXMsY2FsbHNGcm9tPSVzLHJlcGVhdENhbGxlcnM9JXMsbWVzc2FnZXM9JXMsbWVzc2FnZXNGcm9tPSVzLCIKLSAgICAgICAgICAgICAgICArICJldmVudHM9JXMscmVtaW5kZXJzPSVzLGxpZ2h0cz0lcyxwZWVrPSVzKVxuIiwKKyAgICAgICAgICAgICAgICArICJldmVudHM9JXMscmVtaW5kZXJzPSVzLGxpZ2h0cz0lcyxwZWVrPSVzLHNjcmVlbk9uPSVzKVxuIiwKICAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dDYWxscywgWmVuTW9kZUNvbmZpZy5zb3VyY2VUb1N0cmluZyhjb25maWcuYWxsb3dDYWxsc0Zyb20pLAogICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd1JlcGVhdENhbGxlcnMsIGNvbmZpZy5hbGxvd01lc3NhZ2VzLAogICAgICAgICAgICAgICAgIFplbk1vZGVDb25maWcuc291cmNlVG9TdHJpbmcoY29uZmlnLmFsbG93TWVzc2FnZXNGcm9tKSwKLSAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dFdmVudHMsIGNvbmZpZy5hbGxvd1JlbWluZGVycywgY29uZmlnLmFsbG93TGlnaHRzLCBjb25maWcuYWxsb3dQZWVrKTsKKyAgICAgICAgICAgICAgICBjb25maWcuYWxsb3dFdmVudHMsIGNvbmZpZy5hbGxvd1JlbWluZGVycywgY29uZmlnLmFsbG93TGlnaHRzLCBjb25maWcuYWxsb3dQZWVrLAorICAgICAgICAgICAgICAgIGNvbmZpZy5hbGxvd1NjcmVlbk9uKTsKICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIiAgbWFudWFsUnVsZT0iKTsgcHcucHJpbnRsbihjb25maWcubWFudWFsUnVsZSk7CiAgICAgICAgIGlmIChjb25maWcuYXV0b21hdGljUnVsZXMuaXNFbXB0eSgpKSByZXR1cm47CiAgICAgICAgIGZpbmFsIGludCBOID0gY29uZmlnLmF1dG9tYXRpY1J1bGVzLnNpemUoKTsKQEAgLTQ1MCwxNiArNDY2LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29uZmlnLm1hbnVhbFJ1bGUgPSBudWxsOyAgLy8gZG9uJ3QgcmVzdG9yZSB0aGUgbWFudWFsIHJ1bGUKKyAgICAgICAgICAgICAgICBsb25nIHRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF1dG9tYXRpY1J1bGVzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChaZW5SdWxlIGF1dG9tYXRpY1J1bGUgOiBjb25maWcuYXV0b21hdGljUnVsZXMudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IHJlc3RvcmUgdHJhbnNpZW50IHN0YXRlIGZyb20gcmVzdG9yZWQgYXV0b21hdGljIHJ1bGVzCiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNSdWxlLnNub296aW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNSdWxlLmNvbmRpdGlvbiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNSdWxlLmNyZWF0aW9uVGltZSA9IHRpbWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInJlYWRYbWwiKTsKLSAgICAgICAgICAgIHNldENvbmZpZyhjb25maWcsICJyZWFkWG1sIik7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25maWcoY29uZmlnLCAicmVhZFhtbCIpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC00ODQsMTEgKzUwNCwzOSBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0Tm90aWZpY2F0aW9uUG9saWN5KFBvbGljeSBwb2xpY3kpIHsKICAgICAgICAgaWYgKHBvbGljeSA9PSBudWxsIHx8IG1Db25maWcgPT0gbnVsbCkgcmV0dXJuOwotICAgICAgICBmaW5hbCBaZW5Nb2RlQ29uZmlnIG5ld0NvbmZpZyA9IG1Db25maWcuY29weSgpOwotICAgICAgICBuZXdDb25maWcuYXBwbHlOb3RpZmljYXRpb25Qb2xpY3kocG9saWN5KTsKLSAgICAgICAgc2V0Q29uZmlnKG5ld0NvbmZpZywgInNldE5vdGlmaWNhdGlvblBvbGljeSIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKKyAgICAgICAgICAgIGZpbmFsIFplbk1vZGVDb25maWcgbmV3Q29uZmlnID0gbUNvbmZpZy5jb3B5KCk7CisgICAgICAgICAgICBuZXdDb25maWcuYXBwbHlOb3RpZmljYXRpb25Qb2xpY3kocG9saWN5KTsKKyAgICAgICAgICAgIHNldENvbmZpZyhuZXdDb25maWcsICJzZXROb3RpZmljYXRpb25Qb2xpY3kiKTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJlbW92ZXMgb2xkIHJ1bGUgaW5zdGFuY2VzIHdob3NlIG93bmVyIGlzIG5vdCBpbnN0YWxsZWQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNsZWFuVXBaZW5SdWxlcygpIHsKKyAgICAgICAgbG9uZyBjdXJyZW50VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKKyAgICAgICAgICAgIGZpbmFsIFplbk1vZGVDb25maWcgbmV3Q29uZmlnID0gbUNvbmZpZy5jb3B5KCk7CisgICAgICAgICAgICBpZiAobmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICAgICAgICAgIFplblJ1bGUgcnVsZSA9IG5ld0NvbmZpZy5hdXRvbWF0aWNSdWxlcy5nZXQobmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLmtleUF0KGkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJVTEVfSU5TVEFOQ0VfR1JBQ0VfUEVSSU9EIDwgKGN1cnJlbnRUaW1lIC0gcnVsZS5jcmVhdGlvblRpbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QbS5nZXRQYWNrYWdlSW5mbyhydWxlLmNvbXBvbmVudC5nZXRQYWNrYWdlTmFtZSgpLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmF1dG9tYXRpY1J1bGVzLnJlbW92ZUF0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0Q29uZmlnKG5ld0NvbmZpZywgImNsZWFuVXBaZW5SdWxlcyIpOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBhIGNvcHkgb2YgdGhlIHplbiBtb2RlIGNvbmZpZ3VyYXRpb24KKyAgICAgKi8KICAgICBwdWJsaWMgWmVuTW9kZUNvbmZpZyBnZXRDb25maWcoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUNvbmZpZykgewogICAgICAgICAgICAgcmV0dXJuIG1Db25maWcuY29weSgpOwpAQCAtNTE3LDIwICs1NjUsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1Db25kaXRpb25zLmV2YWx1YXRlQ29uZmlnKGNvbmZpZywgZmFsc2UgLypwcm9jZXNzU3Vic2NyaXB0aW9ucyovKTsgIC8vIG1heSBtb2RpZnkgY29uZmlnCi0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Db25maWcpIHsKLSAgICAgICAgICAgICAgICBtQ29uZmlncy5wdXQoY29uZmlnLnVzZXIsIGNvbmZpZyk7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJzZXRDb25maWcgcmVhc29uPSIgKyByZWFzb24sIG5ldyBUaHJvd2FibGUoKSk7Ci0gICAgICAgICAgICAgICAgWmVuTG9nLnRyYWNlQ29uZmlnKHJlYXNvbiwgbUNvbmZpZywgY29uZmlnKTsKLSAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHBvbGljeUNoYW5nZWQgPSAhT2JqZWN0cy5lcXVhbHMoZ2V0Tm90aWZpY2F0aW9uUG9saWN5KG1Db25maWcpLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Tm90aWZpY2F0aW9uUG9saWN5KGNvbmZpZykpOwotICAgICAgICAgICAgICAgIG1Db25maWcgPSBjb25maWc7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5lcXVhbHMobUNvbmZpZykpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hPbkNvbmZpZ0NoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBvbGljeUNoYW5nZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hPblBvbGljeUNoYW5nZWQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uZmlncy5wdXQoY29uZmlnLnVzZXIsIGNvbmZpZyk7CisgICAgICAgICAgICBpZiAoREVCVUcpIExvZy5kKFRBRywgInNldENvbmZpZyByZWFzb249IiArIHJlYXNvbiwgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgICAgIFplbkxvZy50cmFjZUNvbmZpZyhyZWFzb24sIG1Db25maWcsIGNvbmZpZyk7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIHBvbGljeUNoYW5nZWQgPSAhT2JqZWN0cy5lcXVhbHMoZ2V0Tm90aWZpY2F0aW9uUG9saWN5KG1Db25maWcpLAorICAgICAgICAgICAgICAgICAgICBnZXROb3RpZmljYXRpb25Qb2xpY3koY29uZmlnKSk7CisgICAgICAgICAgICBpZiAoIWNvbmZpZy5lcXVhbHMobUNvbmZpZykpIHsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaE9uQ29uZmlnQ2hhbmdlZCgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBvbGljeUNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICBkaXNwYXRjaE9uUG9saWN5Q2hhbmdlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUNvbmZpZyA9IGNvbmZpZzsKICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB2YWwgPSBJbnRlZ2VyLnRvU3RyaW5nKGNvbmZpZy5oYXNoQ29kZSgpKTsKICAgICAgICAgICAgIEdsb2JhbC5wdXRTdHJpbmcobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksIEdsb2JhbC5aRU5fTU9ERV9DT05GSUdfRVRBRywgdmFsKTsKICAgICAgICAgICAgIGlmICghZXZhbHVhdGVaZW5Nb2RlKHJlYXNvbiwgc2V0UmluZ2VyTW9kZSkpIHsKQEAgLTU2NCw2ICs2MTAsNyBAQAogCiAgICAgcHJpdmF0ZSBib29sZWFuIGV2YWx1YXRlWmVuTW9kZShTdHJpbmcgcmVhc29uLCBib29sZWFuIHNldFJpbmdlck1vZGUpIHsKICAgICAgICAgaWYgKERFQlVHKSBMb2cuZChUQUcsICJldmFsdWF0ZVplbk1vZGUiKTsKKyAgICAgICAgZmluYWwgaW50IHplbkJlZm9yZSA9IG1aZW5Nb2RlOwogICAgICAgICBmaW5hbCBpbnQgemVuID0gY29tcHV0ZVplbk1vZGUoKTsKICAgICAgICAgWmVuTG9nLnRyYWNlU2V0WmVuTW9kZSh6ZW4sIHJlYXNvbik7CiAgICAgICAgIG1aZW5Nb2RlID0gemVuOwpAQCAtNTczLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBhcHBseVplblRvUmluZ2VyTW9kZSgpOwogICAgICAgICB9CiAgICAgICAgIGFwcGx5UmVzdHJpY3Rpb25zKCk7Ci0gICAgICAgIGlmICh6ZW4gIT0gbVplbk1vZGUpIHsKKyAgICAgICAgaWYgKHplbiAhPSB6ZW5CZWZvcmUpIHsKICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REaXNwYXRjaE9uWmVuTW9kZUNoYW5nZWQoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk5Myw3ICsxMDQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNU0dfU0VUX0NPTkZJRzoKICAgICAgICAgICAgICAgICAgICAgQ29uZmlnTWVzc2FnZURhdGEgY29uZmlnRGF0YSA9IChDb25maWdNZXNzYWdlRGF0YSltc2cub2JqOwotICAgICAgICAgICAgICAgICAgICBzZXRDb25maWcoY29uZmlnRGF0YS5jb25maWcsIGNvbmZpZ0RhdGEucmVhc29uKTsKKyAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtQ29uZmlnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25maWcoY29uZmlnRGF0YS5jb25maWcsIGNvbmZpZ0RhdGEucmVhc29uKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9vcy9TY2hlZHVsaW5nUG9saWN5U2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9vcy9TY2hlZHVsaW5nUG9saWN5U2VydmljZS5qYXZhCmluZGV4IGMwMTIzYmYuLjgwZmFmNDczIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL29zL1NjaGVkdWxpbmdQb2xpY3lTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9vcy9TY2hlZHVsaW5nUG9saWN5U2VydmljZS5qYXZhCkBAIC00MCwxMiArNDAsMTMgQEAKICAgICBwdWJsaWMgaW50IHJlcXVlc3RQcmlvcml0eShpbnQgcGlkLCBpbnQgdGlkLCBpbnQgcHJpbykgewogICAgICAgICAvL0xvZy5pKFRBRywgInJlcXVlc3RQcmlvcml0eShwaWQ9IiArIHBpZCArICIsIHRpZD0iICsgdGlkICsgIiwgcHJpbz0iICsgcHJpbyArICIpIik7CiAKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgY2FsbGVyIGlzIG1lZGlhc2VydmVyLCBwcmlvcml0eSBpcyBpbiByYW5nZSwgYW5kIHRoYXQgdGhlCi0gICAgICAgIC8vIGNhbGxiYWNrIHRocmVhZCBzcGVjaWZpZWQgYnkgYXBwIGJlbG9uZ3MgdG8gdGhlIGFwcCB0aGF0IGNhbGxlZCBtZWRpYXNlcnZlci4KLSAgICAgICAgLy8gT25jZSB3ZSd2ZSB2ZXJpZmllZCB0aGF0IHRoZSBjYWxsZXIgaXMgbWVkaWFzZXJ2ZXIsIHdlIGNhbiB0cnVzdCB0aGUgcGlkIGJ1dAorICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY2FsbGVyIHVpZCBpcyBwZXJtaXR0ZWQsIHByaW9yaXR5IGlzIGluIHJhbmdlLAorICAgICAgICAvLyBhbmQgdGhhdCB0aGUgY2FsbGJhY2sgdGhyZWFkIHNwZWNpZmllZCBieSBhcHAgYmVsb25ncyB0byB0aGUgYXBwIHRoYXQKKyAgICAgICAgLy8gY2FsbGVkIG1lZGlhc2VydmVyIG9yIGF1ZGlvc2VydmVyLgorICAgICAgICAvLyBPbmNlIHdlJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGNhbGxlciB1aWQgaXMgcGVybWl0dGVkLCB3ZSBjYW4gdHJ1c3QgdGhlIHBpZCBidXQKICAgICAgICAgLy8gd2UgY2FuJ3QgdHJ1c3QgdGhlIHRpZC4gIE5vIG5lZWQgdG8gZXhwbGljaXRseSBjaGVjayBmb3IgcGlkID09IDAgfHwgdGlkID09IDAsCiAgICAgICAgIC8vIHNpbmNlIGlmIG5vdCB0aGUgY2FzZSB0aGVuIHRoZSBnZXRUaHJlYWRHcm91cExlYWRlcigpIHRlc3Qgd2lsbCBhbHNvIGZhaWwuCi0gICAgICAgIGlmIChCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpICE9IFByb2Nlc3MuTUVESUFfVUlEIHx8IHByaW8gPCBQUklPUklUWV9NSU4gfHwKKyAgICAgICAgaWYgKCFpc1Blcm1pdHRlZENhbGxpbmdVaWQoKSB8fCBwcmlvIDwgUFJJT1JJVFlfTUlOIHx8CiAgICAgICAgICAgICAgICAgcHJpbyA+IFBSSU9SSVRZX01BWCB8fCBQcm9jZXNzLmdldFRocmVhZEdyb3VwTGVhZGVyKHRpZCkgIT0gcGlkKSB7CiAgICAgICAgICAgICByZXR1cm4gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9ERU5JRUQ7CiAgICAgICAgIH0KQEAgLTYxLDQgKzYyLDE0IEBACiAgICAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7CiAgICAgfQogCisgICAgcHJpdmF0ZSBib29sZWFuIGlzUGVybWl0dGVkQ2FsbGluZ1VpZCgpIHsKKyAgICAgICAgZmluYWwgaW50IGNhbGxpbmdVaWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICBzd2l0Y2ggKGNhbGxpbmdVaWQpIHsKKyAgICAgICAgY2FzZSBQcm9jZXNzLkFVRElPU0VSVkVSX1VJRDogLy8gZmFzdGNhcHR1cmUsIGZhc3RtaXhlcgorICAgICAgICBjYXNlIFByb2Nlc3MuTUVESUFfVUlEOiAvLyBjYW1lcmEKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0RlZmF1bHRQZXJtaXNzaW9uR3JhbnRQb2xpY3kuamF2YQppbmRleCAwNzNiNGYwMy4uNmMzMzhjMSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9EZWZhdWx0UGVybWlzc2lvbkdyYW50UG9saWN5LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRlZmF1bHRQZXJtR3JhbnRQb2xpY3kiOyAvLyBtdXN0IGJlIDw9IDIzIGNoYXJzCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRkxBR1MgPSBQYWNrYWdlTWFuYWdlci5HRVRfRU5DUllQVElPTl9VTkFXQVJFX0NPTVBPTkVOVFM7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRkxBR1MgPSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX01JTUVfVFlQRSA9ICJhdWRpby9tcGVnIjsKIApAQCAtMjYxLDYgKzI2MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICYmIGRvZXNQYWNrYWdlU3VwcG9ydFJ1bnRpbWVQZXJtaXNzaW9ucyhzZXR1cFBhY2thZ2UpKSB7CiAgICAgICAgICAgICAgICAgZ3JhbnRSdW50aW1lUGVybWlzc2lvbnNMUHcoc2V0dXBQYWNrYWdlLCBQSE9ORV9QRVJNSVNTSU9OUywgdXNlcklkKTsKICAgICAgICAgICAgICAgICBncmFudFJ1bnRpbWVQZXJtaXNzaW9uc0xQdyhzZXR1cFBhY2thZ2UsIENPTlRBQ1RTX1BFUk1JU1NJT05TLCB1c2VySWQpOworICAgICAgICAgICAgICAgIGdyYW50UnVudGltZVBlcm1pc3Npb25zTFB3KHNldHVwUGFja2FnZSwgTE9DQVRJT05fUEVSTUlTU0lPTlMsIHVzZXJJZCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIENhbWVyYQpAQCAtNTk0LDYgKzU5NSwxNCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gUHJpbnQgU3Bvb2xlcgorICAgICAgICAgICAgUGFja2FnZVBhcnNlci5QYWNrYWdlIHByaW50U3Bvb2xlclBhY2thZ2UgPSBnZXRTeXN0ZW1QYWNrYWdlTFByKAorICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQucHJpbnRzcG9vbGVyIik7CisgICAgICAgICAgICBpZiAocHJpbnRTcG9vbGVyUGFja2FnZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIGRvZXNQYWNrYWdlU3VwcG9ydFJ1bnRpbWVQZXJtaXNzaW9ucyhwcmludFNwb29sZXJQYWNrYWdlKSkgeworICAgICAgICAgICAgICAgIGdyYW50UnVudGltZVBlcm1pc3Npb25zTFB3KHByaW50U3Bvb2xlclBhY2thZ2UsIExPQ0FUSU9OX1BFUk1JU1NJT05TLCB0cnVlLCB1c2VySWQpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBtU2VydmljZS5tU2V0dGluZ3Mub25EZWZhdWx0UnVudGltZVBlcm1pc3Npb25zR3JhbnRlZExQcih1c2VySWQpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9FcGhlbWVyYWxSZXNvbHZlckNvbm5lY3Rpb24uamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vRXBoZW1lcmFsUmVzb2x2ZXJDb25uZWN0aW9uLmphdmEKaW5kZXggNjI4YWQwZS4uZmU2ZmIxZiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9FcGhlbWVyYWxSZXNvbHZlckNvbm5lY3Rpb24uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0VwaGVtZXJhbFJlc29sdmVyQ29ubmVjdGlvbi5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkVwaGVtZXJhbFJlc29sdmVJbmZvOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtMzAsNyArMzEsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5UaW1lZFJlbW90ZUNhbGxlcjsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5FcGhlbWVyYWxSZXNvbHZlclNlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkVwaGVtZXJhbFJlc29sdmVJbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JRXBoZW1lcmFsUmVzb2x2ZXI7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9JbnN0YWxsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vSW5zdGFsbGVyLmphdmEKaW5kZXggOTlhMDUxYS4uMTkwZWNhNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9JbnN0YWxsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL0luc3RhbGxlci5qYXZhCkBAIC0yMCwxNCArMjAsMTQgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZVN0YXRzOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXh0LlRleHRVdGlsczsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIAotaW1wb3J0IGRhbHZpay5zeXN0ZW0uVk1SdW50aW1lOwotCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSW5zdGFsbGVyQ29ubmVjdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JbnN0YWxsZXJDb25uZWN0aW9uLkluc3RhbGxlckV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuU3lzdGVtU2VydmljZTsKIAoraW1wb3J0IGRhbHZpay5zeXN0ZW0uVk1SdW50aW1lOworCiBwdWJsaWMgZmluYWwgY2xhc3MgSW5zdGFsbGVyIGV4dGVuZHMgU3lzdGVtU2VydmljZSB7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJJbnN0YWxsZXIiOwogCkBAIC00Niw2ICs0NiwxMSBAQAogICAgIC8qKiBSdW4gdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIEpJVCBjb21waWxlciAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERFWE9QVF9VU0VKSVQgICAgICAgPSAxIDw8IDU7CiAKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0RFX1NUT1JBR0UgPSAxIDw8IDA7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19DRV9TVE9SQUdFID0gMSA8PCAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ0xFQVJfQ0FDSEVfT05MWSA9IDEgPDwgMjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0NMRUFSX0NPREVfQ0FDSEVfT05MWSA9IDEgPDwgMzsKKwogICAgIHByaXZhdGUgZmluYWwgSW5zdGFsbGVyQ29ubmVjdGlvbiBtSW5zdGFsbGVyOwogCiAgICAgcHVibGljIEluc3RhbGxlcihDb250ZXh0IGNvbnRleHQpIHsKQEAgLTY3LDQyMyArNzIsMTM3IEBACiAgICAgICAgIG1JbnN0YWxsZXIud2FpdEZvckNvbm5lY3Rpb24oKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXNjYXBlTnVsbChTdHJpbmcgYXJnKSB7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShhcmcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gIiEiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFyZy5pbmRleE9mKCdcMCcpICE9IC0xIHx8IGFyZy5pbmRleE9mKCcgJykgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGFyZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJnOwotICAgICAgICB9CisgICAgcHVibGljIHZvaWQgY3JlYXRlQXBwRGF0YShTdHJpbmcgdXVpZCwgU3RyaW5nIHBrZ25hbWUsIGludCB1c2VyaWQsIGludCBmbGFncywgaW50IGFwcGlkLAorICAgICAgICAgICAgU3RyaW5nIHNlaW5mbykgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgiY3JlYXRlX2FwcF9kYXRhIiwgdXVpZCwgcGtnbmFtZSwgdXNlcmlkLCBmbGFncywgYXBwaWQsIHNlaW5mbyk7CiAgICAgfQogCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgaW50IGluc3RhbGwoU3RyaW5nIG5hbWUsIGludCB1aWQsIGludCBnaWQsIFN0cmluZyBzZWluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluc3RhbGwobnVsbCwgbmFtZSwgdWlkLCBnaWQsIHNlaW5mbyk7CisgICAgcHVibGljIHZvaWQgcmVzdG9yZWNvbkFwcERhdGEoU3RyaW5nIHV1aWQsIFN0cmluZyBwa2duYW1lLCBpbnQgdXNlcmlkLCBpbnQgZmxhZ3MsIGludCBhcHBpZCwKKyAgICAgICAgICAgIFN0cmluZyBzZWluZm8pIHRocm93cyBJbnN0YWxsZXJFeGNlcHRpb24geworICAgICAgICBtSW5zdGFsbGVyLmV4ZWN1dGUoInJlc3RvcmVjb25fYXBwX2RhdGEiLCB1dWlkLCBwa2duYW1lLCB1c2VyaWQsIGZsYWdzLCBhcHBpZCwKKyAgICAgICAgICAgICAgICBzZWluZm8pOwogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgaW5zdGFsbChTdHJpbmcgdXVpZCwgU3RyaW5nIG5hbWUsIGludCB1aWQsIGludCBnaWQsIFN0cmluZyBzZWluZm8pIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImluc3RhbGwiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXNjYXBlTnVsbCh1dWlkKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh1aWQpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChnaWQpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzZWluZm8gIT0gbnVsbCA/IHNlaW5mbyA6ICIhIik7Ci0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKKyAgICBwdWJsaWMgdm9pZCBjbGVhckFwcERhdGEoU3RyaW5nIHV1aWQsIFN0cmluZyBwa2duYW1lLCBpbnQgdXNlcmlkLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJjbGVhcl9hcHBfZGF0YSIsIHV1aWQsIHBrZ25hbWUsIHVzZXJpZCwgZmxhZ3MpOwogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgZGV4b3B0KFN0cmluZyBhcGtQYXRoLCBpbnQgdWlkLCBTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQsCi0gICAgICAgICAgICBpbnQgZGV4b3B0TmVlZGVkLCBpbnQgZGV4RmxhZ3MpIHsKLSAgICAgICAgaWYgKCFpc1ZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpKSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAiSW52YWxpZCBpbnN0cnVjdGlvbiBzZXQ6ICIgKyBpbnN0cnVjdGlvblNldCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5kZXhvcHQoYXBrUGF0aCwgdWlkLCBpbnN0cnVjdGlvblNldCwgZGV4b3B0TmVlZGVkLCBkZXhGbGFncyk7CisgICAgcHVibGljIHZvaWQgZGVzdHJveUFwcERhdGEoU3RyaW5nIHV1aWQsIFN0cmluZyBwa2duYW1lLCBpbnQgdXNlcmlkLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJkZXN0cm95X2FwcF9kYXRhIiwgdXVpZCwgcGtnbmFtZSwgdXNlcmlkLCBmbGFncyk7CiAgICAgfQogCi0gICAgcHVibGljIGludCBkZXhvcHQoU3RyaW5nIGFwa1BhdGgsIGludCB1aWQsIFN0cmluZyBwa2dOYW1lLCBTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQsCi0gICAgICAgICAgICBpbnQgZGV4b3B0TmVlZGVkLCBATnVsbGFibGUgU3RyaW5nIG91dHB1dFBhdGgsIGludCBkZXhGbGFncykgewotICAgICAgICBpZiAoIWlzVmFsaWRJbnN0cnVjdGlvblNldChpbnN0cnVjdGlvblNldCkpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbnZhbGlkIGluc3RydWN0aW9uIHNldDogIiArIGluc3RydWN0aW9uU2V0KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5kZXhvcHQoYXBrUGF0aCwgdWlkLCBwa2dOYW1lLCBpbnN0cnVjdGlvblNldCwgZGV4b3B0TmVlZGVkLAotICAgICAgICAgICAgICAgIG91dHB1dFBhdGgsIGRleEZsYWdzKTsKKyAgICBwdWJsaWMgdm9pZCBtb3ZlQ29tcGxldGVBcHAoU3RyaW5nIGZyb21fdXVpZCwgU3RyaW5nIHRvX3V1aWQsIFN0cmluZyBwYWNrYWdlX25hbWUsCisgICAgICAgICAgICBTdHJpbmcgZGF0YV9hcHBfbmFtZSwgaW50IGFwcGlkLCBTdHJpbmcgc2VpbmZvKSB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJtb3ZlX2NvbXBsZXRlX2FwcCIsIGZyb21fdXVpZCwgdG9fdXVpZCwgcGFja2FnZV9uYW1lLAorICAgICAgICAgICAgICAgIGRhdGFfYXBwX25hbWUsIGFwcGlkLCBzZWluZm8pOwogICAgIH0KIAotICAgIHB1YmxpYyBpbnQgaWRtYXAoU3RyaW5nIHRhcmdldEFwa1BhdGgsIFN0cmluZyBvdmVybGF5QXBrUGF0aCwgaW50IHVpZCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigiaWRtYXAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodGFyZ2V0QXBrUGF0aCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG92ZXJsYXlBcGtQYXRoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodWlkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgbW92ZWRleChTdHJpbmcgc3JjUGF0aCwgU3RyaW5nIGRzdFBhdGgsIFN0cmluZyBpbnN0cnVjdGlvblNldCkgewotICAgICAgICBpZiAoIWlzVmFsaWRJbnN0cnVjdGlvblNldChpbnN0cnVjdGlvblNldCkpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbnZhbGlkIGluc3RydWN0aW9uIHNldDogIiArIGluc3RydWN0aW9uU2V0KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJtb3ZlZGV4Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNyY1BhdGgpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkc3RQYXRoKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW5zdHJ1Y3Rpb25TZXQpOwotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5leGVjdXRlKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBybWRleChTdHJpbmcgY29kZVBhdGgsIFN0cmluZyBpbnN0cnVjdGlvblNldCkgewotICAgICAgICBpZiAoIWlzVmFsaWRJbnN0cnVjdGlvblNldChpbnN0cnVjdGlvblNldCkpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJJbnZhbGlkIGluc3RydWN0aW9uIHNldDogIiArIGluc3RydWN0aW9uU2V0KTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJybWRleCIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlUGF0aCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGluc3RydWN0aW9uU2V0KTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgcGFja2FnZURpciBvciBpdHMgc3ViZGlyZWN0b3J5Ci0gICAgICovCi0gICAgcHVibGljIGludCBybVBhY2thZ2VEaXIoU3RyaW5nIHBhY2thZ2VEaXIpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoInJtcGFja2FnZWRpciIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChwYWNrYWdlRGlyKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIGludCByZW1vdmUoU3RyaW5nIG5hbWUsIGludCB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIHJlbW92ZShudWxsLCBuYW1lLCB1c2VySWQpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcmVtb3ZlKFN0cmluZyB1dWlkLCBTdHJpbmcgbmFtZSwgaW50IHVzZXJJZCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigicmVtb3ZlIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGVzY2FwZU51bGwodXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChuYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIGludCBmaXhVaWQoU3RyaW5nIG5hbWUsIGludCB1aWQsIGludCBnaWQpIHsKLSAgICAgICAgcmV0dXJuIGZpeFVpZChudWxsLCBuYW1lLCB1aWQsIGdpZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBmaXhVaWQoU3RyaW5nIHV1aWQsIFN0cmluZyBuYW1lLCBpbnQgdWlkLCBpbnQgZ2lkKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJmaXh1aWQiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXNjYXBlTnVsbCh1dWlkKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh1aWQpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChnaWQpOwotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5leGVjdXRlKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgaW50IGRlbGV0ZUNhY2hlRmlsZXMoU3RyaW5nIG5hbWUsIGludCB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIGRlbGV0ZUNhY2hlRmlsZXMobnVsbCwgbmFtZSwgdXNlcklkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGRlbGV0ZUNhY2hlRmlsZXMoU3RyaW5nIHV1aWQsIFN0cmluZyBuYW1lLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJybWNhY2hlIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGVzY2FwZU51bGwodXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChuYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIGludCBkZWxldGVDb2RlQ2FjaGVGaWxlcyhTdHJpbmcgbmFtZSwgaW50IHVzZXJJZCkgewotICAgICAgICByZXR1cm4gZGVsZXRlQ29kZUNhY2hlRmlsZXMobnVsbCwgbmFtZSwgdXNlcklkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGRlbGV0ZUNvZGVDYWNoZUZpbGVzKFN0cmluZyB1dWlkLCBTdHJpbmcgbmFtZSwgaW50IHVzZXJJZCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigicm1jb2RlY2FjaGUiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXNjYXBlTnVsbCh1dWlkKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh1c2VySWQpOwotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5leGVjdXRlKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgaW50IGNyZWF0ZVVzZXJEYXRhKFN0cmluZyBuYW1lLCBpbnQgdWlkLCBpbnQgdXNlcklkLCBTdHJpbmcgc2VpbmZvKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVVc2VyRGF0YShudWxsLCBuYW1lLCB1aWQsIHVzZXJJZCwgc2VpbmZvKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNyZWF0ZVVzZXJEYXRhKFN0cmluZyB1dWlkLCBTdHJpbmcgbmFtZSwgaW50IHVpZCwgaW50IHVzZXJJZCwgU3RyaW5nIHNlaW5mbykgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigibWt1c2VyZGF0YSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChlc2NhcGVOdWxsKHV1aWQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQobmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHVpZCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHVzZXJJZCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHNlaW5mbyAhPSBudWxsID8gc2VpbmZvIDogIiEiKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgY3JlYXRlVXNlckNvbmZpZyhpbnQgdXNlcklkKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJta3VzZXJjb25maWciKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIEBEZXByZWNhdGVkCi0gICAgcHVibGljIGludCByZW1vdmVVc2VyRGF0YURpcnMoaW50IHVzZXJJZCkgewotICAgICAgICByZXR1cm4gcmVtb3ZlVXNlckRhdGFEaXJzKG51bGwsIHVzZXJJZCk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCByZW1vdmVVc2VyRGF0YURpcnMoU3RyaW5nIHV1aWQsIGludCB1c2VySWQpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoInJtdXNlciIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChlc2NhcGVOdWxsKHV1aWQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgY29weUNvbXBsZXRlQXBwKFN0cmluZyBmcm9tVXVpZCwgU3RyaW5nIHRvVXVpZCwgU3RyaW5nIHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgU3RyaW5nIGRhdGFBcHBOYW1lLCBpbnQgYXBwSWQsIFN0cmluZyBzZWluZm8pIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImNwY29tcGxldGVhcHAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXNjYXBlTnVsbChmcm9tVXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChlc2NhcGVOdWxsKHRvVXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChwYWNrYWdlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRhdGFBcHBOYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYXBwSWQpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChzZWluZm8pOwotICAgICAgICByZXR1cm4gbUluc3RhbGxlci5leGVjdXRlKGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgaW50IGNsZWFyVXNlckRhdGEoU3RyaW5nIG5hbWUsIGludCB1c2VySWQpIHsKLSAgICAgICAgcmV0dXJuIGNsZWFyVXNlckRhdGEobnVsbCwgbmFtZSwgdXNlcklkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNsZWFyVXNlckRhdGEoU3RyaW5nIHV1aWQsIFN0cmluZyBuYW1lLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJybXVzZXJkYXRhIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGVzY2FwZU51bGwodXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChuYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXNlcklkKTsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgbWFya0Jvb3RDb21wbGV0ZShTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQpIHsKLSAgICAgICAgaWYgKCFpc1ZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpKSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAiSW52YWxpZCBpbnN0cnVjdGlvbiBzZXQ6ICIgKyBpbnN0cnVjdGlvblNldCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigibWFya2Jvb3Rjb21wbGV0ZSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChpbnN0cnVjdGlvblNldCk7Ci0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBpbnQgZnJlZUNhY2hlKGxvbmcgZnJlZVN0b3JhZ2VTaXplKSB7Ci0gICAgICAgIHJldHVybiBmcmVlQ2FjaGUobnVsbCwgZnJlZVN0b3JhZ2VTaXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGZyZWVDYWNoZShTdHJpbmcgdXVpZCwgbG9uZyBmcmVlU3RvcmFnZVNpemUpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImZyZWVjYWNoZSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChlc2NhcGVOdWxsKHV1aWQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nLnZhbHVlT2YoZnJlZVN0b3JhZ2VTaXplKSk7Ci0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICBARGVwcmVjYXRlZAotICAgIHB1YmxpYyBpbnQgZ2V0U2l6ZUluZm8oU3RyaW5nIHBrZ05hbWUsIGludCBwZXJzb25hLCBTdHJpbmcgYXBrUGF0aCwgU3RyaW5nIGxpYkRpclBhdGgsCi0gICAgICAgICAgICBTdHJpbmcgZndkTG9ja0Fwa1BhdGgsIFN0cmluZyBhc2VjUGF0aCwgU3RyaW5nW10gaW5zdHJ1Y3Rpb25TZXRzLCBQYWNrYWdlU3RhdHMgcFN0YXRzKSB7Ci0gICAgICAgIHJldHVybiBnZXRTaXplSW5mbyhudWxsLCBwa2dOYW1lLCBwZXJzb25hLCBhcGtQYXRoLCBsaWJEaXJQYXRoLCBmd2RMb2NrQXBrUGF0aCwgYXNlY1BhdGgsCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25TZXRzLCBwU3RhdHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0U2l6ZUluZm8oU3RyaW5nIHV1aWQsIFN0cmluZyBwa2dOYW1lLCBpbnQgcGVyc29uYSwgU3RyaW5nIGFwa1BhdGgsCisgICAgcHVibGljIHZvaWQgZ2V0QXBwU2l6ZShTdHJpbmcgdXVpZCwgU3RyaW5nIHBrZ25hbWUsIGludCB1c2VyaWQsIGludCBmbGFncywgU3RyaW5nIGFwa1BhdGgsCiAgICAgICAgICAgICBTdHJpbmcgbGliRGlyUGF0aCwgU3RyaW5nIGZ3ZExvY2tBcGtQYXRoLCBTdHJpbmcgYXNlY1BhdGgsIFN0cmluZ1tdIGluc3RydWN0aW9uU2V0cywKLSAgICAgICAgICAgIFBhY2thZ2VTdGF0cyBwU3RhdHMpIHsKKyAgICAgICAgICAgIFBhY2thZ2VTdGF0cyBwU3RhdHMpIHRocm93cyBJbnN0YWxsZXJFeGNlcHRpb24gewogICAgICAgICBmb3IgKFN0cmluZyBpbnN0cnVjdGlvblNldCA6IGluc3RydWN0aW9uU2V0cykgewotICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIkludmFsaWQgaW5zdHJ1Y3Rpb24gc2V0OiAiICsgaW5zdHJ1Y3Rpb25TZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydFZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpOwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImdldHNpemUiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZXNjYXBlTnVsbCh1dWlkKSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHBrZ05hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChwZXJzb25hKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoYXBrUGF0aCk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7CiAgICAgICAgIC8vIFRPRE86IEV4dGVuZCBnZXRTaXplSW5mbyB0byBsb29rIGF0IHRoZSBmdWxsIHN1YmRpcmVjdG9yeSB0cmVlLAogICAgICAgICAvLyBub3QganVzdCB0aGUgZmlyc3QgbGV2ZWwuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxpYkRpclBhdGggIT0gbnVsbCA/IGxpYkRpclBhdGggOiAiISIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmd2RMb2NrQXBrUGF0aCAhPSBudWxsID8gZndkTG9ja0Fwa1BhdGggOiAiISIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChhc2VjUGF0aCAhPSBudWxsID8gYXNlY1BhdGggOiAiISIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwogICAgICAgICAvLyBUT0RPOiBFeHRlbmQgZ2V0U2l6ZUluZm8gdG8gbG9vayBhdCAqYWxsKiBpbnN0cnV0aW9uIHNldHMsIG5vdAogICAgICAgICAvLyBqdXN0IHRoZSBwcmltYXJ5LgotICAgICAgICBidWlsZGVyLmFwcGVuZChpbnN0cnVjdGlvblNldHNbMF0pOwotCi0gICAgICAgIFN0cmluZyBzID0gbUluc3RhbGxlci50cmFuc2FjdChidWlsZGVyLnRvU3RyaW5nKCkpOwotICAgICAgICBTdHJpbmcgcmVzW10gPSBzLnNwbGl0KCIgIik7CisgICAgICAgIGZpbmFsIFN0cmluZyByYXdSZXMgPSBtSW5zdGFsbGVyLmV4ZWN1dGVGb3JSZXN1bHQoImdldF9hcHBfc2l6ZSIsIHV1aWQsIHBrZ25hbWUsIHVzZXJpZCwKKyAgICAgICAgICAgICAgICBmbGFncywgYXBrUGF0aCwgbGliRGlyUGF0aCwgZndkTG9ja0Fwa1BhdGgsIGFzZWNQYXRoLCBpbnN0cnVjdGlvblNldHNbMF0pOworICAgICAgICBmaW5hbCBTdHJpbmcgcmVzW10gPSByYXdSZXMuc3BsaXQoIiAiKTsKIAogICAgICAgICBpZiAoKHJlcyA9PSBudWxsKSB8fCAocmVzLmxlbmd0aCAhPSA1KSkgewotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdGhyb3cgbmV3IEluc3RhbGxlckV4Y2VwdGlvbigiSW52YWxpZCBzaXplIHJlc3VsdDogIiArIHJhd1Jlcyk7CiAgICAgICAgIH0KICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHBTdGF0cy5jb2RlU2l6ZSA9IExvbmcucGFyc2VMb25nKHJlc1sxXSk7CiAgICAgICAgICAgICBwU3RhdHMuZGF0YVNpemUgPSBMb25nLnBhcnNlTG9uZyhyZXNbMl0pOwogICAgICAgICAgICAgcFN0YXRzLmNhY2hlU2l6ZSA9IExvbmcucGFyc2VMb25nKHJlc1szXSk7CiAgICAgICAgICAgICBwU3RhdHMuZXh0ZXJuYWxDb2RlU2l6ZSA9IExvbmcucGFyc2VMb25nKHJlc1s0XSk7Ci0gICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChyZXNbMF0pOwogICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgdGhyb3cgbmV3IEluc3RhbGxlckV4Y2VwdGlvbigiSW52YWxpZCBzaXplIHJlc3VsdDogIiArIHJhd1Jlcyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgaW50IG1vdmVGaWxlcygpIHsKLSAgICAgICAgcmV0dXJuIG1JbnN0YWxsZXIuZXhlY3V0ZSgibW92ZWZpbGVzIik7CisgICAgcHVibGljIHZvaWQgZGV4b3B0KFN0cmluZyBhcGtQYXRoLCBpbnQgdWlkLCBTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQsIGludCBkZXhvcHROZWVkZWQsCisgICAgICAgICAgICBpbnQgZGV4RmxhZ3MpIHRocm93cyBJbnN0YWxsZXJFeGNlcHRpb24geworICAgICAgICBhc3NlcnRWYWxpZEluc3RydWN0aW9uU2V0KGluc3RydWN0aW9uU2V0KTsKKyAgICAgICAgbUluc3RhbGxlci5kZXhvcHQoYXBrUGF0aCwgdWlkLCBpbnN0cnVjdGlvblNldCwgZGV4b3B0TmVlZGVkLCBkZXhGbGFncyk7CiAgICAgfQogCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgaW50IGxpbmtOYXRpdmVMaWJyYXJ5RGlyZWN0b3J5KFN0cmluZyBkYXRhUGF0aCwgU3RyaW5nIG5hdGl2ZUxpYlBhdGgzMiwgaW50IHVzZXJJZCkgewotICAgICAgICByZXR1cm4gbGlua05hdGl2ZUxpYnJhcnlEaXJlY3RvcnkobnVsbCwgZGF0YVBhdGgsIG5hdGl2ZUxpYlBhdGgzMiwgdXNlcklkKTsKKyAgICBwdWJsaWMgdm9pZCBkZXhvcHQoU3RyaW5nIGFwa1BhdGgsIGludCB1aWQsIFN0cmluZyBwa2dOYW1lLCBTdHJpbmcgaW5zdHJ1Y3Rpb25TZXQsCisgICAgICAgICAgICBpbnQgZGV4b3B0TmVlZGVkLCBATnVsbGFibGUgU3RyaW5nIG91dHB1dFBhdGgsIGludCBkZXhGbGFncykKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICBtSW5zdGFsbGVyLmRleG9wdChhcGtQYXRoLCB1aWQsIHBrZ05hbWUsIGluc3RydWN0aW9uU2V0LCBkZXhvcHROZWVkZWQsCisgICAgICAgICAgICAgICAgb3V0cHV0UGF0aCwgZGV4RmxhZ3MpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGlkbWFwKFN0cmluZyB0YXJnZXRBcGtQYXRoLCBTdHJpbmcgb3ZlcmxheUFwa1BhdGgsIGludCB1aWQpCisgICAgICAgICAgICB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJpZG1hcCIsIHRhcmdldEFwa1BhdGgsIG92ZXJsYXlBcGtQYXRoLCB1aWQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJtZGV4KFN0cmluZyBjb2RlUGF0aCwgU3RyaW5nIGluc3RydWN0aW9uU2V0KSB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgYXNzZXJ0VmFsaWRJbnN0cnVjdGlvblNldChpbnN0cnVjdGlvblNldCk7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgicm1kZXgiLCBjb2RlUGF0aCwgaW5zdHJ1Y3Rpb25TZXQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJtUGFja2FnZURpcihTdHJpbmcgcGFja2FnZURpcikgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgicm1wYWNrYWdlZGlyIiwgcGFja2FnZURpcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY3JlYXRlVXNlckNvbmZpZyhpbnQgdXNlcmlkKSB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJta3VzZXJjb25maWciLCB1c2VyaWQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlbW92ZVVzZXJEYXRhRGlycyhTdHJpbmcgdXVpZCwgaW50IHVzZXJpZCkgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgicm11c2VyIiwgdXVpZCwgdXNlcmlkKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtYXJrQm9vdENvbXBsZXRlKFN0cmluZyBpbnN0cnVjdGlvblNldCkgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydFZhbGlkSW5zdHJ1Y3Rpb25TZXQoaW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICBtSW5zdGFsbGVyLmV4ZWN1dGUoIm1hcmtib290Y29tcGxldGUiLCBpbnN0cnVjdGlvblNldCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZnJlZUNhY2hlKFN0cmluZyB1dWlkLCBsb25nIGZyZWVTdG9yYWdlU2l6ZSkgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgiZnJlZWNhY2hlIiwgdXVpZCwgZnJlZVN0b3JhZ2VTaXplKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBtb3ZlRmlsZXMoKSB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJtb3ZlZmlsZXMiKTsKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBMaW5rcyB0aGUgMzIgYml0IG5hdGl2ZSBsaWJyYXJ5IGRpcmVjdG9yeSBpbiBhbiBhcHBsaWNhdGlvbidzIGRhdGEgZGlyZWN0b3J5IHRvIHRoZQotICAgICAqIHJlYWwgbG9jYXRpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIE5vdGUgdGhhdCBubyBzdWNoIHN5bWxpbmsgaXMgY3JlYXRlZCBmb3IKLSAgICAgKiA2NCBiaXQgc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gLTEgb24gZXJyb3IKKyAgICAgKiBMaW5rcyB0aGUgMzIgYml0IG5hdGl2ZSBsaWJyYXJ5IGRpcmVjdG9yeSBpbiBhbiBhcHBsaWNhdGlvbidzIGRhdGEKKyAgICAgKiBkaXJlY3RvcnkgdG8gdGhlIHJlYWwgbG9jYXRpb24gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIE5vdGUgdGhhdCBubworICAgICAqIHN1Y2ggc3ltbGluayBpcyBjcmVhdGVkIGZvciA2NCBiaXQgc2hhcmVkIGxpYnJhcmllcy4KICAgICAgKi8KLSAgICBwdWJsaWMgaW50IGxpbmtOYXRpdmVMaWJyYXJ5RGlyZWN0b3J5KFN0cmluZyB1dWlkLCBTdHJpbmcgZGF0YVBhdGgsIFN0cmluZyBuYXRpdmVMaWJQYXRoMzIsCi0gICAgICAgICAgICBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGlmIChkYXRhUGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAibGlua05hdGl2ZUxpYnJhcnlEaXJlY3RvcnkgZGF0YVBhdGggaXMgbnVsbCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgaWYgKG5hdGl2ZUxpYlBhdGgzMiA9PSBudWxsKSB7Ci0gICAgICAgICAgICBTbG9nLmUoVEFHLCAibGlua05hdGl2ZUxpYnJhcnlEaXJlY3RvcnkgbmF0aXZlTGliUGF0aCBpcyBudWxsIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigibGlua2xpYiIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChlc2NhcGVOdWxsKHV1aWQpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZGF0YVBhdGgpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChuYXRpdmVMaWJQYXRoMzIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh1c2VySWQpOwotCi0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKKyAgICBwdWJsaWMgdm9pZCBsaW5rTmF0aXZlTGlicmFyeURpcmVjdG9yeShTdHJpbmcgdXVpZCwgU3RyaW5nIGRhdGFQYXRoLCBTdHJpbmcgbmF0aXZlTGliUGF0aDMyLAorICAgICAgICAgICAgaW50IHVzZXJJZCkgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CisgICAgICAgIG1JbnN0YWxsZXIuZXhlY3V0ZSgibGlua2xpYiIsIHV1aWQsIGRhdGFQYXRoLCBuYXRpdmVMaWJQYXRoMzIsIHVzZXJJZCk7CiAgICAgfQogCi0gICAgQERlcHJlY2F0ZWQKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN0b3JlY29uRGF0YShTdHJpbmcgcGtnTmFtZSwgU3RyaW5nIHNlaW5mbywgaW50IHVpZCkgewotICAgICAgICByZXR1cm4gcmVzdG9yZWNvbkRhdGEobnVsbCwgcGtnTmFtZSwgc2VpbmZvLCB1aWQpOworICAgIHB1YmxpYyB2b2lkIGNyZWF0ZU9hdERpcihTdHJpbmcgb2F0RGlyLCBTdHJpbmcgZGV4SW5zdHJ1Y3Rpb25TZXQpCisgICAgICAgICAgICB0aHJvd3MgSW5zdGFsbGVyRXhjZXB0aW9uIHsKKyAgICAgICAgbUluc3RhbGxlci5leGVjdXRlKCJjcmVhdGVvYXRkaXIiLCBvYXREaXIsIGRleEluc3RydWN0aW9uU2V0KTsKICAgICB9CiAKLSAgICBwdWJsaWMgYm9vbGVhbiByZXN0b3JlY29uRGF0YShTdHJpbmcgdXVpZCwgU3RyaW5nIHBrZ05hbWUsIFN0cmluZyBzZWluZm8sIGludCB1aWQpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoInJlc3RvcmVjb25kYXRhIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGVzY2FwZU51bGwodXVpZCkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChwa2dOYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyAnKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoc2VpbmZvICE9IG51bGwgPyBzZWluZm8gOiAiISIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh1aWQpOwotICAgICAgICByZXR1cm4gKG1JbnN0YWxsZXIuZXhlY3V0ZShidWlsZGVyLnRvU3RyaW5nKCkpID09IDApOworICAgIHB1YmxpYyB2b2lkIGxpbmtGaWxlKFN0cmluZyByZWxhdGl2ZVBhdGgsIFN0cmluZyBmcm9tQmFzZSwgU3RyaW5nIHRvQmFzZSkKKyAgICAgICAgICAgIHRocm93cyBJbnN0YWxsZXJFeGNlcHRpb24geworICAgICAgICBtSW5zdGFsbGVyLmV4ZWN1dGUoImxpbmtmaWxlIiwgcmVsYXRpdmVQYXRoLCBmcm9tQmFzZSwgdG9CYXNlKTsKICAgICB9CiAKLSAgICBwdWJsaWMgaW50IGNyZWF0ZU9hdERpcihTdHJpbmcgb2F0RGlyLCBTdHJpbmcgZGV4SW5zdHJ1Y3Rpb25TZXQpIHsKLSAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoImNyZWF0ZW9hdGRpciIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChvYXREaXIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkZXhJbnN0cnVjdGlvblNldCk7Ci0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBpbnQgbGlua0ZpbGUoU3RyaW5nIHJlbGF0aXZlUGF0aCwgU3RyaW5nIGZyb21CYXNlLCBTdHJpbmcgdG9CYXNlKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJsaW5rZmlsZSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChyZWxhdGl2ZVBhdGgpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmcm9tQmFzZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcgJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvQmFzZSk7Ci0gICAgICAgIHJldHVybiBtSW5zdGFsbGVyLmV4ZWN1dGUoYnVpbGRlci50b1N0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWZmLiB7QGNvZGUgaW5zdHJ1Y3Rpb25TZXR9IGlzIGEgdmFsaWQgaW5zdHJ1Y3Rpb24gc2V0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNWYWxpZEluc3RydWN0aW9uU2V0KFN0cmluZyBpbnN0cnVjdGlvblNldCkgewotICAgICAgICBpZiAoaW5zdHJ1Y3Rpb25TZXQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFZhbGlkSW5zdHJ1Y3Rpb25TZXQoU3RyaW5nIGluc3RydWN0aW9uU2V0KQorICAgICAgICAgICAgdGhyb3dzIEluc3RhbGxlckV4Y2VwdGlvbiB7CiAgICAgICAgIGZvciAoU3RyaW5nIGFiaSA6IEJ1aWxkLlNVUFBPUlRFRF9BQklTKSB7Ci0gICAgICAgICAgICBpZiAoaW5zdHJ1Y3Rpb25TZXQuZXF1YWxzKFZNUnVudGltZS5nZXRJbnN0cnVjdGlvblNldChhYmkpKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKFZNUnVudGltZS5nZXRJbnN0cnVjdGlvblNldChhYmkpLmVxdWFscyhpbnN0cnVjdGlvblNldCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRocm93IG5ldyBJbnN0YWxsZXJFeGNlcHRpb24oIkludmFsaWQgaW5zdHJ1Y3Rpb24gc2V0OiAiICsgaW5zdHJ1Y3Rpb25TZXQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vTGF1bmNoZXJBcHBzU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9MYXVuY2hlckFwcHNTZXJ2aWNlLmphdmEKaW5kZXggMDc5NjgxMS4uMTg2MThkNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9MYXVuY2hlckFwcHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9MYXVuY2hlckFwcHNTZXJ2aWNlLmphdmEKQEAgLTI0LDggKzI0LDggQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSUxhdW5jaGVyQXBwczsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSU9uQXBwc0NoYW5nZWRMaXN0ZW5lcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwpAQCAtNDUsNyArNDUsNiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuUGFja2FnZU1vbml0b3I7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiAvKioKQEAgLTIwMCw3ICsxOTksOCBAQAogICAgICAgICAgICAgbWFpbkludGVudC5zZXRQYWNrYWdlKHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gYXBwcyA9IG1QbS5xdWVyeUludGVudEFjdGl2aXRpZXNBc1VzZXIobWFpbkludGVudCwgMCAvKiBmbGFncyAqLywKKyAgICAgICAgICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBhcHBzID0gbVBtLnF1ZXJ5SW50ZW50QWN0aXZpdGllc0FzVXNlcihtYWluSW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAogICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFyY2VsZWRMaXN0U2xpY2U8PihhcHBzKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CkBAIC0yMTgsNyArMjE4LDggQEAKIAogICAgICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBSZXNvbHZlSW5mbyBhcHAgPSBtUG0ucmVzb2x2ZUFjdGl2aXR5QXNVc2VyKGludGVudCwgMCwgdXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIGFwcCA9IG1QbS5yZXNvbHZlQWN0aXZpdHlBc1VzZXIoaW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwpAQCAtMjM2LDcgKzIzNyw4IEBACiAgICAgICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIElQYWNrYWdlTWFuYWdlciBwbSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKTsKLSAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBpbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDAsIHVzZXIuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBpbmZvID0gcG0uZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIHVzZXIuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbyAhPSBudWxsICYmIGluZm8uYXBwbGljYXRpb25JbmZvLmVuYWJsZWQ7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKQEAgLTI1NCw3ICsyNTYsOCBAQAogICAgICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBJUGFja2FnZU1hbmFnZXIgcG0gPSBBcHBHbG9iYWxzLmdldFBhY2thZ2VNYW5hZ2VyKCk7Ci0gICAgICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8gPSBwbS5nZXRBY3Rpdml0eUluZm8oY29tcG9uZW50LCAwLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlJbmZvIGluZm8gPSBwbS5nZXRBY3Rpdml0eUluZm8oY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZm8gIT0gbnVsbDsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwpAQCAtMjc5LDcgKzI4Miw4IEBACiAgICAgICAgICAgICBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIElQYWNrYWdlTWFuYWdlciBwbSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKTsKLSAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gaW5mbyA9IHBtLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnQsIDAsIHVzZXIuZ2V0SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gaW5mbyA9IHBtLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsIHVzZXIuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICBpZiAoIWluZm8uZXhwb3J0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYW5ub3QgbGF1bmNoIG5vbi1leHBvcnRlZCBjb21wb25lbnRzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbXBvbmVudCk7CkBAIC0yODksNyArMjkzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBhcyBjYWxsaW5nIHN0YXJ0QWN0aXZpdHlBc1VzZXIgaWdub3JlcyB0aGUgY2F0ZWdvcnkgYW5kIGp1c3QKICAgICAgICAgICAgICAgICAvLyByZXNvbHZlcyBiYXNlZCBvbiB0aGUgY29tcG9uZW50IGlmIHByZXNlbnQuCiAgICAgICAgICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gYXBwcyA9IG1QbS5xdWVyeUludGVudEFjdGl2aXRpZXNBc1VzZXIobGF1bmNoSW50ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgMCAvKiBmbGFncyAqLywgdXNlci5nZXRJZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLCB1c2VyLmdldElkZW50aWZpZXIoKSk7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHNpemUgPSBhcHBzLnNpemUoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eUluZm8gYWN0aXZpdHlJbmZvID0gYXBwcy5nZXQoaSkuYWN0aXZpdHlJbmZvOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlRGV4T3B0aW1pemVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VEZXhPcHRpbWl6ZXIuamF2YQppbmRleCBkMjlhNjIzLi5iNDVhOTIyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VEZXhPcHRpbWl6ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VEZXhPcHRpbWl6ZXIuamF2YQpAQCAtMjcsNiArMjcsOCBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JbnN0YWxsZXJDb25uZWN0aW9uLkluc3RhbGxlckV4Y2VwdGlvbjsKKwogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC0xNjYsMTIgKzE2OCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHZtU2FmZU1vZGUgPyBERVhPUFRfU0FGRU1PREUgOiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGRlYnVnZ2FibGUgPyBERVhPUFRfREVCVUdHQUJMRSA6IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBERVhPUFRfQk9PVENPTVBMRVRFOwotICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgcmV0ID0gbVBhY2thZ2VNYW5hZ2VyU2VydmljZS5tSW5zdGFsbGVyLmRleG9wdChwYXRoLCBzaGFyZWRHaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLnBhY2thZ2VOYW1lLCBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXQsIGRleG9wdE5lZWRlZCwgb2F0RGlyLCBkZXhGbGFncyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRGV4Mm9hdCBtaWdodCBmYWlsIGR1ZSB0byBjb21waWxlciAvIHZlcmlmaWVyIGVycm9ycy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtUGFja2FnZU1hbmFnZXJTZXJ2aWNlLm1JbnN0YWxsZXIuZGV4b3B0KHBhdGgsIHNoYXJlZEdpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLnBhY2thZ2VOYW1lLCBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXQsIGRleG9wdE5lZWRlZCwgb2F0RGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXhGbGFncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtZWREZXhPcHQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byBkZXhvcHQiLCBlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIxMCw4ICsyMTMsMTMgQEAKICAgICAgICAgRmlsZSBjb2RlUGF0aCA9IG5ldyBGaWxlKHBrZy5jb2RlUGF0aCk7CiAgICAgICAgIGlmIChjb2RlUGF0aC5pc0RpcmVjdG9yeSgpKSB7CiAgICAgICAgICAgICBGaWxlIG9hdERpciA9IGdldE9hdERpcihjb2RlUGF0aCk7Ci0gICAgICAgICAgICBtUGFja2FnZU1hbmFnZXJTZXJ2aWNlLm1JbnN0YWxsZXIuY3JlYXRlT2F0RGlyKG9hdERpci5nZXRBYnNvbHV0ZVBhdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgZGV4SW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtUGFja2FnZU1hbmFnZXJTZXJ2aWNlLm1JbnN0YWxsZXIuY3JlYXRlT2F0RGlyKG9hdERpci5nZXRBYnNvbHV0ZVBhdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRleEluc3RydWN0aW9uU2V0KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byBjcmVhdGUgb2F0IGRpciIsIGUpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG9hdERpci5nZXRBYnNvbHV0ZVBhdGgoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZUluc3RhbGxlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZUluc3RhbGxlclNlcnZpY2UuamF2YQppbmRleCA3ZTRlNDZiLi4yM2E1OGQwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VJbnN0YWxsZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlSW5zdGFsbGVyU2VydmljZS5qYXZhCkBAIC0yNTgsMTEgKzI1OCw3IEBACiAgICAgICAgIGZvciAoRmlsZSBzdGFnZSA6IHVuY2xhaW1lZFN0YWdlcykgewogICAgICAgICAgICAgU2xvZy53KFRBRywgIkRlbGV0aW5nIG9ycGhhbiBzdGFnZSAiICsgc3RhZ2UpOwogICAgICAgICAgICAgc3luY2hyb25pemVkIChtUG0ubUluc3RhbGxMb2NrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YWdlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbVBtLm1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKHN0YWdlLmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzdGFnZS5kZWxldGUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbVBtLnJlbW92ZUNvZGVQYXRoTEkoc3RhZ2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzg2LDggKzM4Miw4IEBACiAgICAgICAgIGZpbmFsIGludCBzZXNzaW9uSWQgPSByZWFkSW50QXR0cmlidXRlKGluLCBBVFRSX1NFU1NJT05fSUQpOwogICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gcmVhZEludEF0dHJpYnV0ZShpbiwgQVRUUl9VU0VSX0lEKTsKICAgICAgICAgZmluYWwgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lID0gcmVhZFN0cmluZ0F0dHJpYnV0ZShpbiwgQVRUUl9JTlNUQUxMRVJfUEFDS0FHRV9OQU1FKTsKLSAgICAgICAgZmluYWwgaW50IGluc3RhbGxlclVpZCA9IHJlYWRJbnRBdHRyaWJ1dGUoaW4sIEFUVFJfSU5TVEFMTEVSX1VJRCwKLSAgICAgICAgICAgICAgICBtUG0uZ2V0UGFja2FnZVVpZChpbnN0YWxsZXJQYWNrYWdlTmFtZSwgdXNlcklkKSk7CisgICAgICAgIGZpbmFsIGludCBpbnN0YWxsZXJVaWQgPSByZWFkSW50QXR0cmlidXRlKGluLCBBVFRSX0lOU1RBTExFUl9VSUQsIG1QbS5nZXRQYWNrYWdlVWlkKAorICAgICAgICAgICAgICAgIGluc3RhbGxlclBhY2thZ2VOYW1lLCBQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUywgdXNlcklkKSk7CiAgICAgICAgIGZpbmFsIGxvbmcgY3JlYXRlZE1pbGxpcyA9IHJlYWRMb25nQXR0cmlidXRlKGluLCBBVFRSX0NSRUFURURfTUlMTElTKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHN0YWdlRGlyUmF3ID0gcmVhZFN0cmluZ0F0dHJpYnV0ZShpbiwgQVRUUl9TRVNTSU9OX1NUQUdFX0RJUik7CiAgICAgICAgIGZpbmFsIEZpbGUgc3RhZ2VEaXIgPSAoc3RhZ2VEaXJSYXcgIT0gbnVsbCkgPyBuZXcgRmlsZShzdGFnZURpclJhdykgOiBudWxsOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlSW5zdGFsbGVyU2Vzc2lvbi5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlSW5zdGFsbGVyU2Vzc2lvbi5qYXZhCmluZGV4IGZhMGFhMzcuLmI4NGZmYTMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZUluc3RhbGxlclNlc3Npb24uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VJbnN0YWxsZXJTZXNzaW9uLmphdmEKQEAgLTY5LDYgKzY5LDcgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5OYXRpdmVMaWJyYXJ5SGVscGVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuUGFja2FnZUhlbHBlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JbnN0YWxsZXJDb25uZWN0aW9uLkluc3RhbGxlckV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLkFycmF5VXRpbHM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5JbmRlbnRpbmdQcmludFdyaXRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CkBAIC00ODIsNyArNDgzLDYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbihJTlNUQUxMX0ZBSUxFRF9DT05UQUlORVJfRVJST1IsCiAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzb2x2ZSBzdGFnZSBsb2NhdGlvbiIsIGUpOwogICAgICAgICB9Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gcXVpY2tJbnN0YWxsID0gKHBhcmFtcy5pbnN0YWxsRmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX1FVSUNLKSAhPSAwOwogCiAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHN0YWdlIGxvb2tzIHNhbmUgd2l0aCByZXNwZWN0IHRvIGV4aXN0aW5nIGFwcGxpY2F0aW9uLgogICAgICAgICAvLyBUaGlzIGN1cnJlbnRseSBvbmx5IGVuc3VyZXMgcGFja2FnZU5hbWUsIHZlcnNpb25Db2RlLCBhbmQgY2VydGlmaWNhdGUKQEAgLTQ5MCwxMCArNDkwLDcgQEAKICAgICAgICAgdmFsaWRhdGVJbnN0YWxsTG9ja2VkKCk7CiAKICAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwobVBhY2thZ2VOYW1lKTsKLSAgICAgICAgLy8gVE9ETzogZml4IGIvMjUxMTg2MjI7IGRvbid0IGJ5cGFzcyBzaWduYXR1cmUgY2hlY2sKLSAgICAgICAgaWYgKCFxdWlja0luc3RhbGwpIHsKLSAgICAgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKG1TaWduYXR1cmVzKTsKLSAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChtU2lnbmF0dXJlcyk7CiAgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKG1SZXNvbHZlZEJhc2VGaWxlKTsKIAogICAgICAgICBpZiAoIW1QZXJtaXNzaW9uc0FjY2VwdGVkKSB7CkBAIC02MDMsNyArNjAwLDYgQEAKICAgICAgKiB7QGxpbmsgUGFja2FnZU1hbmFnZXJTZXJ2aWNlfS4KICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVJbnN0YWxsTG9ja2VkKCkgdGhyb3dzIFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBxdWlja0luc3RhbGwgPSAocGFyYW1zLmluc3RhbGxGbGFncyAmIFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfUVVJQ0spICE9IDA7CiAgICAgICAgIG1QYWNrYWdlTmFtZSA9IG51bGw7CiAgICAgICAgIG1WZXJzaW9uQ29kZSA9IC0xOwogICAgICAgICBtU2lnbmF0dXJlcyA9IG51bGw7CkBAIC02MjcsOSArNjIzLDcgQEAKIAogICAgICAgICAgICAgZmluYWwgQXBrTGl0ZSBhcGs7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIC8vIFRPRE86IGZpeCBiLzI1MTE4NjIyOyBhbHdheXMgdXNlIFBBUlNFX0NPTExFQ1RfQ0VSVElGSUNBVEVTCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IHBhcnNlRmxhZ3MgPSBxdWlja0luc3RhbGwgPyAwIDogUGFja2FnZVBhcnNlci5QQVJTRV9DT0xMRUNUX0NFUlRJRklDQVRFUzsKLSAgICAgICAgICAgICAgICBhcGsgPSBQYWNrYWdlUGFyc2VyLnBhcnNlQXBrTGl0ZShmaWxlLCBwYXJzZUZsYWdzKTsKKyAgICAgICAgICAgICAgICBhcGsgPSBQYWNrYWdlUGFyc2VyLnBhcnNlQXBrTGl0ZShmaWxlLCBQYWNrYWdlUGFyc2VyLlBBUlNFX0NPTExFQ1RfQ0VSVElGSUNBVEVTKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VQYXJzZXJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uLmZyb20oZSk7CiAgICAgICAgICAgICB9CkBAIC03NTAsNyArNzQ0LDYgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgYXNzZXJ0QXBrQ29uc2lzdGVudChTdHJpbmcgdGFnLCBBcGtMaXRlIGFwaykgdGhyb3dzIFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uIHsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBxdWlja0luc3RhbGwgPSAocGFyYW1zLmluc3RhbGxGbGFncyAmIFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfUVVJQ0spICE9IDA7CiAgICAgICAgIGlmICghbVBhY2thZ2VOYW1lLmVxdWFscyhhcGsucGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24oSU5TVEFMTF9GQUlMRURfSU5WQUxJRF9BUEssIHRhZyArICIgcGFja2FnZSAiCiAgICAgICAgICAgICAgICAgICAgICsgYXBrLnBhY2thZ2VOYW1lICsgIiBpbmNvbnNpc3RlbnQgd2l0aCAiICsgbVBhY2thZ2VOYW1lKTsKQEAgLTc2MCw4ICs3NTMsNyBAQAogICAgICAgICAgICAgICAgICAgICArICIgdmVyc2lvbiBjb2RlICIgKyBhcGsudmVyc2lvbkNvZGUgKyAiIGluY29uc2lzdGVudCB3aXRoICIKICAgICAgICAgICAgICAgICAgICAgKyBtVmVyc2lvbkNvZGUpOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE86IGZpeCBiLzI1MTE4NjIyOyBkb24ndCBieXBhc3Mgc2lnbmF0dXJlIGNoZWNrCi0gICAgICAgIGlmICghcXVpY2tJbnN0YWxsICYmICFTaWduYXR1cmUuYXJlRXhhY3RNYXRjaChtU2lnbmF0dXJlcywgYXBrLnNpZ25hdHVyZXMpKSB7CisgICAgICAgIGlmICghU2lnbmF0dXJlLmFyZUV4YWN0TWF0Y2gobVNpZ25hdHVyZXMsIGFway5zaWduYXR1cmVzKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uKElOU1RBTExfRkFJTEVEX0lOVkFMSURfQVBLLAogICAgICAgICAgICAgICAgICAgICB0YWcgKyAiIHNpZ25hdHVyZXMgYXJlIGluY29uc2lzdGVudCIpOwogICAgICAgICB9CkBAIC04NDEsOSArODMzLDE0IEBACiAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiRmlsZTogIiArIHBhdGhTdHIgKyAiIG91dHNpZGUgYmFzZTogIiArIGJhc2VTdHIpOwogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVPYXREaXJzKExpc3Q8U3RyaW5nPiBpbnN0cnVjdGlvblNldHMsIEZpbGUgZnJvbURpcikgeworICAgIHByaXZhdGUgdm9pZCBjcmVhdGVPYXREaXJzKExpc3Q8U3RyaW5nPiBpbnN0cnVjdGlvblNldHMsIEZpbGUgZnJvbURpcikKKyAgICAgICAgICAgIHRocm93cyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbiB7CiAgICAgICAgIGZvciAoU3RyaW5nIGluc3RydWN0aW9uU2V0IDogaW5zdHJ1Y3Rpb25TZXRzKSB7Ci0gICAgICAgICAgICBtUG0ubUluc3RhbGxlci5jcmVhdGVPYXREaXIoZnJvbURpci5nZXRBYnNvbHV0ZVBhdGgoKSwgaW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtUG0ubUluc3RhbGxlci5jcmVhdGVPYXREaXIoZnJvbURpci5nZXRBYnNvbHV0ZVBhdGgoKSwgaW5zdHJ1Y3Rpb25TZXQpOworICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbi5mcm9tKGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC04NTEsMTMgKzg0OCwxMiBAQAogICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgZm9yIChGaWxlIGZyb21GaWxlIDogZnJvbUZpbGVzKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRoKGZyb21GaWxlLCBmcm9tRGlyKTsKLSAgICAgICAgICAgIGZpbmFsIGludCByZXQgPSBtUG0ubUluc3RhbGxlci5saW5rRmlsZShyZWxhdGl2ZVBhdGgsIGZyb21EaXIuZ2V0QWJzb2x1dGVQYXRoKCksCi0gICAgICAgICAgICAgICAgICAgIHRvRGlyLmdldEFic29sdXRlUGF0aCgpKTsKLQotICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgICAvLyBpbnN0YWxsZCB3aWxsIGxvZyBmYWlsdXJlIGRldGFpbHMuCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1QbS5tSW5zdGFsbGVyLmxpbmtGaWxlKHJlbGF0aXZlUGF0aCwgZnJvbURpci5nZXRBYnNvbHV0ZVBhdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJmYWlsZWQgbGlua09yQ3JlYXRlRGlyKCIgKyByZWxhdGl2ZVBhdGggKyAiLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGZyb21EaXIgKyAiLCAiICsgdG9EaXIgKyAiKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgKyBmcm9tRGlyICsgIiwgIiArIHRvRGlyICsgIikiLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC05NTYsNyArOTUyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIGludCB1aWQgPSBtUG0uZ2V0UGFja2FnZVVpZChQYWNrYWdlTWFuYWdlclNlcnZpY2UuREVGQVVMVF9DT05UQUlORVJfUEFDS0FHRSwKLSAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CiAgICAgICAgIGZpbmFsIGludCBnaWQgPSBVc2VySGFuZGxlLmdldFNoYXJlZEFwcEdpZCh1aWQpOwogICAgICAgICBpZiAoIVBhY2thZ2VIZWxwZXIuZml4U2RQZXJtaXNzaW9ucyhjaWQsIGdpZCwgbnVsbCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbihJTlNUQUxMX0ZBSUxFRF9DT05UQUlORVJfRVJST1IsCkBAIC0xMDUwLDcgKzEwNDYsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc3RhZ2VEaXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbVBtLm1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKHN0YWdlRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbVBtLm1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKHN0YWdlRGlyLmdldEFic29sdXRlUGF0aCgpKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBpZ25vcmVkKSB7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHN0YWdlQ2lkICE9IG51bGwpIHsKICAgICAgICAgICAgIFBhY2thZ2VIZWxwZXIuZGVzdHJveVNkRGlyKHN0YWdlQ2lkKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJFeGNlcHRpb24uamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJFeGNlcHRpb24uamF2YQppbmRleCBhNDE2MzZlLi5kMDRlZWRjIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlckV4Y2VwdGlvbi5qYXZhCkBAIC0xNiw4ICsxNiwxMSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5wbTsKIAoraW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZVBhcnNlci5QYWNrYWdlUGFyc2VyRXhjZXB0aW9uOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSW5zdGFsbGVyQ29ubmVjdGlvbi5JbnN0YWxsZXJFeGNlcHRpb247CisKIC8qKiB7QGhpZGV9ICovCiBwdWJsaWMgY2xhc3MgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewogICAgIHB1YmxpYyBmaW5hbCBpbnQgZXJyb3I7CkBAIC0zNiw0ICszOSwxMCBAQAogICAgICAgICAgICAgdGhyb3dzIFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uIHsKICAgICAgICAgdGhyb3cgbmV3IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uKGUuZXJyb3IsIGUuZ2V0TWVzc2FnZSgpLCBlLmdldENhdXNlKCkpOwogICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24gZnJvbShJbnN0YWxsZXJFeGNlcHRpb24gZSkKKyAgICAgICAgICAgIHRocm93cyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93IG5ldyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbihQYWNrYWdlTWFuYWdlci5JTlNUQUxMX0ZBSUxFRF9JTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgICAgICAgICBlLmdldE1lc3NhZ2UoKSwgZS5nZXRDYXVzZSgpKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCAzYThhOTg4Li5mNzc3ZmFmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTU0LDExICs1NCwxNiBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5TVEFMTF9JTlRFUk5BTDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOU1RBTExfUEFSU0VfRkFJTEVEX0lOQ09OU0lTVEVOVF9DRVJUSUZJQ0FURVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5JTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FMV0FZUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQUxXQVlTX0FTSzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQVNLOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19ORVZFUjsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5ERUZJTkVEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BTFdBWVNfQVNLOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfQUxMOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTU9WRV9GQUlMRURfRE9FU05UX0VYSVNUOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTU9WRV9GQUlMRURfSU5URVJOQUxfRVJST1I7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NT1ZFX0ZBSUxFRF9PUEVSQVRJT05fUEVORElORzsKQEAgLTcxLDYgKzc2LDcgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5UcmFjZS5UUkFDRV9UQUdfUEFDS0FHRV9NQU5BR0VSOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy5PX0NSRUFUOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnN5c3RlbS5Pc0NvbnN0YW50cy5PX1JEV1I7CisKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkludGVudEZvcndhcmRlckFjdGl2aXR5LkZPUldBUkRfSU5URU5UX1RPX01BTkFHRURfUFJPRklMRTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwuYXBwLkludGVudEZvcndhcmRlckFjdGl2aXR5LkZPUldBUkRfSU5URU5UX1RPX1BBUkVOVDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuaW50ZXJuYWwuY29udGVudC5OYXRpdmVMaWJyYXJ5SGVscGVyLkxJQjY0X0RJUl9OQU1FOwpAQCAtODcsNiArOTMsOCBAQAogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIucG0uUGVybWlzc2lvbnNTdGF0ZS5QRVJNSVNTSU9OX09QRVJBVElPTl9TVUNDRVNTX0dJRFNfQ0hBTkdFRDsKIAogaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXJOYXRpdmU7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQXBwR2xvYmFsczsKQEAgLTEwNSw3ICsxMTMsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcHNRdWVyeUhlbHBlcjsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQ29tcG9uZW50SW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uRXBoZW1lcmFsQXBwbGljYXRpb25JbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5FcGhlbWVyYWxSZXNvbHZlSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uRXBoZW1lcmFsUmVzb2x2ZUluZm8uRXBoZW1lcmFsUmVzb2x2ZUludGVudEluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkZlYXR1cmVJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JT25QZXJtaXNzaW9uc0NoYW5nZUxpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JUGFja2FnZURhdGFPYnNlcnZlcjsKQEAgLTExOSw3ICsxMzAsNiBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JbnN0cnVtZW50YXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5JbnRlbnRGaWx0ZXJWZXJpZmljYXRpb25JbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5LZXlTZXQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLk1hbmlmZXN0RGlnZXN0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlQ2xlYW5JdGVtOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm9MaXRlOwpAQCAtMTQ4LDEwICsxNTgsMTAgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKIGltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuRGlzcGxheU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuRGVidWc7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm9zLkRlYnVnOwogaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudC5Vc2VyRW52aXJvbm1lbnQ7CiBpbXBvcnQgYW5kcm9pZC5vcy5GaWxlVXRpbHM7CkBAIC0yMDIsMjAgKzIxMiwxNCBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5YbWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXk7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hbm5vdGF0aW9ucy5HdWFyZGVkQnk7Ci1pbXBvcnQgZGFsdmlrLnN5c3RlbS5EZXhGaWxlOwotaW1wb3J0IGRhbHZpay5zeXN0ZW0uVk1SdW50aW1lOwotCi1pbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOwotaW1wb3J0IGxpYmNvcmUudXRpbC5FbXB0eUFycmF5OwotCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuRXBoZW1lcmFsUmVzb2x2ZUluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JTWVkaWFDb250YWluZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5SZXNvbHZlckFjdGl2aXR5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmNvbnRlbnQuTmF0aXZlTGlicmFyeUhlbHBlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlBhY2thZ2VIZWxwZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSVBhcmNlbEZpbGVEZXNjcmlwdG9yRmFjdG9yeTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JbnN0YWxsZXJDb25uZWN0aW9uLkluc3RhbGxlckV4Y2VwdGlvbjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5Tb21lQXJnczsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5aeWdvdGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwpAQCAtMjM1LDYgKzIzOSwxMiBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5TZXR0aW5ncy5WZXJzaW9uSW5mbzsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuc3RvcmFnZS5EZXZpY2VTdG9yYWdlTW9uaXRvckludGVybmFsOwogCitpbXBvcnQgZGFsdmlrLnN5c3RlbS5EZXhGaWxlOworaW1wb3J0IGRhbHZpay5zeXN0ZW0uVk1SdW50aW1lOworCitpbXBvcnQgbGliY29yZS5pby5Jb1V0aWxzOworaW1wb3J0IGxpYmNvcmUudXRpbC5FbXB0eUFycmF5OworCiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFNlcmlhbGl6ZXI7CkBAIC0zMDUsOSArMzE1LDEyIEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19ERVhPUFQgPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FCSV9TRUxFQ1RJT04gPSBmYWxzZTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0VQSEVNRVJBTCA9IGZhbHNlOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVFJJQUdFRF9NSVNTSU5HID0gZmFsc2U7CiAKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBDTEVBUl9SVU5USU1FX1BFUk1JU1NJT05TX09OX1VQR1JBREUgPSBmYWxzZTsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gRElTQUJMRV9FUEhFTUVSQUxfQVBQUyA9IHRydWU7CisKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkFESU9fVUlEID0gUHJvY2Vzcy5QSE9ORV9VSUQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPR19VSUQgPSBQcm9jZXNzLkxPR19VSUQ7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5GQ19VSUQgPSBQcm9jZXNzLk5GQ19VSUQ7CkBAIC00MzYsMTIgKzQ0OSw2IEBACiAgICAgZmluYWwgU3RyaW5nW10gbVNlcGFyYXRlUHJvY2Vzc2VzOwogICAgIGZpbmFsIGJvb2xlYW4gbUlzVXBncmFkZTsKIAotICAgIC8vIFRoaXMgaXMgd2hlcmUgYWxsIGFwcGxpY2F0aW9uIHBlcnNpc3RlbnQgZGF0YSBnb2VzLgotICAgIGZpbmFsIEZpbGUgbUFwcERhdGFEaXI7Ci0KLSAgICAvLyBUaGlzIGlzIHdoZXJlIGFsbCBhcHBsaWNhdGlvbiBwZXJzaXN0ZW50IGRhdGEgZ29lcyBmb3Igc2Vjb25kYXJ5IHVzZXJzLgotICAgIGZpbmFsIEZpbGUgbVVzZXJBcHBEYXRhRGlyOwotCiAgICAgLyoqIFRoZSBsb2NhdGlvbiBmb3IgQVNFQyBjb250YWluZXIgZmlsZXMgb24gaW50ZXJuYWwgc3RvcmFnZS4gKi8KICAgICBmaW5hbCBTdHJpbmcgbUFzZWNJbnRlcm5hbFBhdGg7CiAKQEAgLTU5OSw3ICs2MDYsOSBAQAogCiAgICAgYm9vbGVhbiBtUmVzb2x2ZXJSZXBsYWNlZCA9IGZhbHNlOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBDb21wb25lbnROYW1lIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudDsKKyAgICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBDb21wb25lbnROYW1lIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudDsKKyAgICBwcml2YXRlIGZpbmFsIEBOdWxsYWJsZSBJbnRlbnRGaWx0ZXJWZXJpZmllcjxBY3Rpdml0eUludGVudEluZm8+IG1JbnRlbnRGaWx0ZXJWZXJpZmllcjsKKwogICAgIHByaXZhdGUgaW50IG1JbnRlbnRGaWx0ZXJWZXJpZmljYXRpb25Ub2tlbiA9IDA7CiAKICAgICAvKiogQ29tcG9uZW50IHRoYXQga25vd3Mgd2hldGhlciBvciBub3QgYW4gZXBoZW1lcmFsIGFwcGxpY2F0aW9uIGV4aXN0cyAqLwpAQCAtODEwLDcgKzgxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoREVCVUdfRE9NQUlOX1ZFUklGSUNBVElPTikgewotICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJBZGRpbmcgdmVyaWZpY2F0aW9uIGZpbHRlciBmb3IgIiArIHBhY2thZ2VOYW1lICsgIiA6ICIgKyBmaWx0ZXIpOworICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJBZGRpbmcgdmVyaWZpY2F0aW9uIGZpbHRlciBmb3IgIiArIHBhY2thZ2VOYW1lICsgIjogIiArIGZpbHRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpdnMuYWRkRmlsdGVyKGZpbHRlcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgzNSw4ICs4NDQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmhhc0RhdGFTY2hlbWUoSW50ZW50RmlsdGVyLlNDSEVNRV9IVFRQUykpOwogICAgIH0KIAotICAgIHByaXZhdGUgSW50ZW50RmlsdGVyVmVyaWZpZXIgbUludGVudEZpbHRlclZlcmlmaWVyOwotCiAgICAgLy8gU2V0IG9mIHBlbmRpbmcgYnJvYWRjYXN0cyBmb3IgYWdncmVnYXRpbmcgZW5hYmxlL2Rpc2FibGUgb2YgY29tcG9uZW50cy4KICAgICBzdGF0aWMgY2xhc3MgUGVuZGluZ1BhY2thZ2VCcm9hZGNhc3RzIHsKICAgICAgICAgLy8gZm9yIGVhY2ggdXNlciBpZCwgYSBtYXAgb2YgPHBhY2thZ2UgbmFtZSAtPiBjb21wb25lbnRzIHdpdGhpbiB0aGF0IHBhY2thZ2U+CkBAIC05NTMsNyArOTYwLDcgQEAKIAogICAgIC8vIFJlY29yZGtlZXBpbmcgb2YgcmVzdG9yZS1hZnRlci1pbnN0YWxsIG9wZXJhdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluIGZsaWdodAogICAgIC8vIGJldHdlZW4gdGhlIFBhY2thZ2UgTWFuYWdlciBhbmQgdGhlIEJhY2t1cCBNYW5hZ2VyCi0gICAgY2xhc3MgUG9zdEluc3RhbGxEYXRhIHsKKyAgICBzdGF0aWMgY2xhc3MgUG9zdEluc3RhbGxEYXRhIHsKICAgICAgICAgcHVibGljIEluc3RhbGxBcmdzIGFyZ3M7CiAgICAgICAgIHB1YmxpYyBQYWNrYWdlSW5zdGFsbGVkSW5mbyByZXM7CiAKQEAgLTk3MSw4ICs5NzgsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfREVGQVVMVF9BUFBTID0gImRhIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0lOVEVOVF9GSUxURVJfVkVSSUZJQ0FUSU9OID0gIml2IjsKIAotICAgIGZpbmFsIFN0cmluZyBtUmVxdWlyZWRWZXJpZmllclBhY2thZ2U7Ci0gICAgZmluYWwgU3RyaW5nIG1SZXF1aXJlZEluc3RhbGxlclBhY2thZ2U7CisgICAgZmluYWwgQE51bGxhYmxlIFN0cmluZyBtUmVxdWlyZWRWZXJpZmllclBhY2thZ2U7CisgICAgZmluYWwgQE51bGxhYmxlIFN0cmluZyBtUmVxdWlyZWRJbnN0YWxsZXJQYWNrYWdlOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlVXNhZ2UgbVBhY2thZ2VVc2FnZSA9IG5ldyBQYWNrYWdlVXNhZ2UoKTsKIApAQCAtMTA3MCw3ICsxMDc3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgdGltZUluTWlsbGlzOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lSW5NaWxsaXMgPSBMb25nLnBhcnNlTG9uZyh0aW1lSW5NaWxsaXNTdHJpbmcudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZUluTWlsbGlzID0gTG9uZy5wYXJzZUxvbmcodGltZUluTWlsbGlzU3RyaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgIiArIHRpbWVJbk1pbGxpc1N0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYXMgYSBsb25nLiIsIGUpOwpAQCAtMTg0OSwxMiArMTg1NiwxMiBAQAogICAgICAgICAgICAgYm9vbGVhbiBmYWN0b3J5VGVzdCwgYm9vbGVhbiBvbmx5Q29yZSkgewogICAgICAgICBQYWNrYWdlTWFuYWdlclNlcnZpY2UgbSA9IG5ldyBQYWNrYWdlTWFuYWdlclNlcnZpY2UoY29udGV4dCwgaW5zdGFsbGVyLAogICAgICAgICAgICAgICAgIGZhY3RvcnlUZXN0LCBvbmx5Q29yZSk7Ci0gICAgICAgIG0uZW5hYmxlU3lzdGVtVXNlckFwcHMoKTsKKyAgICAgICAgbS5lbmFibGVTeXN0ZW1Vc2VyUGFja2FnZXMoKTsKICAgICAgICAgU2VydmljZU1hbmFnZXIuYWRkU2VydmljZSgicGFja2FnZSIsIG0pOwogICAgICAgICByZXR1cm4gbTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgZW5hYmxlU3lzdGVtVXNlckFwcHMoKSB7CisgICAgcHJpdmF0ZSB2b2lkIGVuYWJsZVN5c3RlbVVzZXJQYWNrYWdlcygpIHsKICAgICAgICAgaWYgKCFVc2VyTWFuYWdlci5pc1NwbGl0U3lzdGVtVXNlcigpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE4NzEsNDggKzE4NzgsMzIgQEAKICAgICAgICAgICAgICAgICB8IEFwcHNRdWVyeUhlbHBlci5HRVRfSU1FUywgLyogc3lzdGVtQXBwc09ubHkgKi8gdHJ1ZSwgVXNlckhhbmRsZS5TWVNURU0pKTsKICAgICAgICAgQXJyYXlTZXQ8U3RyaW5nPiB3bEFwcHMgPSBTeXN0ZW1Db25maWcuZ2V0SW5zdGFuY2UoKS5nZXRTeXN0ZW1Vc2VyV2hpdGVsaXN0ZWRBcHBzKCk7CiAgICAgICAgIGVuYWJsZUFwcHMuYWRkQWxsKHdsQXBwcyk7CisgICAgICAgIGVuYWJsZUFwcHMuYWRkQWxsKHF1ZXJ5SGVscGVyLnF1ZXJ5QXBwcyhBcHBzUXVlcnlIZWxwZXIuR0VUX1JFUVVJUkVEX0ZPUl9TWVNURU1fVVNFUiwKKyAgICAgICAgICAgICAgICAvKiBzeXN0ZW1BcHBzT25seSAqLyBmYWxzZSwgVXNlckhhbmRsZS5TWVNURU0pKTsKICAgICAgICAgQXJyYXlTZXQ8U3RyaW5nPiBibEFwcHMgPSBTeXN0ZW1Db25maWcuZ2V0SW5zdGFuY2UoKS5nZXRTeXN0ZW1Vc2VyQmxhY2tsaXN0ZWRBcHBzKCk7CiAgICAgICAgIGVuYWJsZUFwcHMucmVtb3ZlQWxsKGJsQXBwcyk7Ci0KLSAgICAgICAgTGlzdDxTdHJpbmc+IHN5c3RlbUFwcHMgPSBxdWVyeUhlbHBlci5xdWVyeUFwcHMoMCwgLyogc3lzdGVtQXBwc09ubHkgKi8gdHJ1ZSwKKyAgICAgICAgTG9nLmkoVEFHLCAiQXBwbGljYXRpb25zIGluc3RhbGxlZCBmb3Igc3lzdGVtIHVzZXI6ICIgKyBlbmFibGVBcHBzKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGFsbEFwcyA9IHF1ZXJ5SGVscGVyLnF1ZXJ5QXBwcygwLCAvKiBzeXN0ZW1BcHBzT25seSAqLyBmYWxzZSwKICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlNZU1RFTSk7Ci0gICAgICAgIGZpbmFsIGludCBzeXN0ZW1BcHBzU2l6ZSA9IHN5c3RlbUFwcHMuc2l6ZSgpOworICAgICAgICBmaW5hbCBpbnQgYWxsQXBwc1NpemUgPSBhbGxBcHMuc2l6ZSgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzeXN0ZW1BcHBzU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBOYW1lID0gc3lzdGVtQXBwcy5nZXQoaSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbEFwcHNTaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgcE5hbWUgPSBhbGxBcHMuZ2V0KGkpOwogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBrZ1NldHRpbmcgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChwTmFtZSk7CiAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCB3ZSBzaG91bGRuJ3QgYmUgZmFpbGluZyBpZiBpdCBkb2VzCiAgICAgICAgICAgICAgICAgaWYgKHBrZ1NldHRpbmcgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBpbnN0YWxsZWQgPSBlbmFibGVBcHBzLmNvbnRhaW5zKHBOYW1lKTsKLSAgICAgICAgICAgICAgICBwa2dTZXR0aW5nLnNldEluc3RhbGxlZChpbnN0YWxsZWQsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICAgICAgICAgIGJvb2xlYW4gaW5zdGFsbCA9IGVuYWJsZUFwcHMuY29udGFpbnMocE5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwa2dTZXR0aW5nLmdldEluc3RhbGxlZChVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSAhPSBpbnN0YWxsKSB7CisgICAgICAgICAgICAgICAgICAgIExvZy5pKFRBRywgKGluc3RhbGwgPyAiSW5zdGFsbGluZyAiIDogIlVuaW5zdGFsbGluZyAiKSArIHBOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGZvciBzeXN0ZW0gdXNlciIpOworICAgICAgICAgICAgICAgICAgICBwa2dTZXR0aW5nLnNldEluc3RhbGxlZChpbnN0YWxsLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGF0aWMgU3RyaW5nW10gc3BsaXRTdHJpbmcoU3RyaW5nIHN0ciwgY2hhciBzZXApIHsKLSAgICAgICAgaW50IGNvdW50ID0gMTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICB3aGlsZSAoKGk9c3RyLmluZGV4T2Yoc2VwLCBpKSkgPj0gMCkgewotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1tdIHJlcyA9IG5ldyBTdHJpbmdbY291bnRdOwotICAgICAgICBpPTA7Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgaW50IGxhc3RJPTA7Ci0gICAgICAgIHdoaWxlICgoaT1zdHIuaW5kZXhPZihzZXAsIGkpKSA+PSAwKSB7Ci0gICAgICAgICAgICByZXNbY291bnRdID0gc3RyLnN1YnN0cmluZyhsYXN0SSwgaSk7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgbGFzdEkgPSBpOwotICAgICAgICB9Ci0gICAgICAgIHJlc1tjb3VudF0gPSBzdHIuc3Vic3RyaW5nKGxhc3RJLCBzdHIubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZ2V0RGVmYXVsdERpc3BsYXlNZXRyaWNzKENvbnRleHQgY29udGV4dCwgRGlzcGxheU1ldHJpY3MgbWV0cmljcykgewogICAgICAgICBEaXNwbGF5TWFuYWdlciBkaXNwbGF5TWFuYWdlciA9IChEaXNwbGF5TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAogICAgICAgICAgICAgICAgIENvbnRleHQuRElTUExBWV9TRVJWSUNFKTsKQEAgLTE5ODcsMTIgKzE5NzgsMTAgQEAKICAgICAgICAgICAgIFdhdGNoZG9nLmdldEluc3RhbmNlKCkuYWRkVGhyZWFkKG1IYW5kbGVyLCBXQVRDSERPR19USU1FT1VUKTsKIAogICAgICAgICAgICAgRmlsZSBkYXRhRGlyID0gRW52aXJvbm1lbnQuZ2V0RGF0YURpcmVjdG9yeSgpOwotICAgICAgICAgICAgbUFwcERhdGFEaXIgPSBuZXcgRmlsZShkYXRhRGlyLCAiZGF0YSIpOwogICAgICAgICAgICAgbUFwcEluc3RhbGxEaXIgPSBuZXcgRmlsZShkYXRhRGlyLCAiYXBwIik7CiAgICAgICAgICAgICBtQXBwTGliMzJJbnN0YWxsRGlyID0gbmV3IEZpbGUoZGF0YURpciwgImFwcC1saWIiKTsKICAgICAgICAgICAgIG1FcGhlbWVyYWxJbnN0YWxsRGlyID0gbmV3IEZpbGUoZGF0YURpciwgImFwcC1lcGhlbWVyYWwiKTsKICAgICAgICAgICAgIG1Bc2VjSW50ZXJuYWxQYXRoID0gbmV3IEZpbGUoZGF0YURpciwgImFwcC1hc2VjIikuZ2V0UGF0aCgpOwotICAgICAgICAgICAgbVVzZXJBcHBEYXRhRGlyID0gbmV3IEZpbGUoZGF0YURpciwgInVzZXIiKTsKICAgICAgICAgICAgIG1Ecm1BcHBQcml2YXRlSW5zdGFsbERpciA9IG5ldyBGaWxlKGRhdGFEaXIsICJhcHAtcHJpdmF0ZSIpOwogCiAgICAgICAgICAgICBzVXNlck1hbmFnZXIgPSBuZXcgVXNlck1hbmFnZXJTZXJ2aWNlKGNvbnRleHQsIHRoaXMsIG1QYWNrYWdlcyk7CkBAIC0yMDc5LDcgKzIwNjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkxpYnJhcnkgbm90IGZvdW5kOiAiICsgbGliKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ2Fubm90IGRleG9wdCAiICsgbGliICsgIjsgaXMgaXQgYW4gQVBLIG9yIEpBUj8gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMTQ4LDcgKzIxMzcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgfCBQYWNrYWdlUGFyc2VyLlBBUlNFX0lTX1NZU1RFTV9ESVIsIHNjYW5GbGFncywgMCk7CiAKICAgICAgICAgICAgIGlmIChERUJVR19VUEdSQURFKSBMb2cudihUQUcsICJSdW5uaW5nIGluc3RhbGxkIHVwZGF0ZSBjb21tYW5kcyIpOwotICAgICAgICAgICAgbUluc3RhbGxlci5tb3ZlRmlsZXMoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUluc3RhbGxlci5tb3ZlRmlsZXMoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgbG9nQ3JpdGljYWxJbmZvKExvZy5XQVJOLCAiVXBkYXRlIGNvbW1hbmRzIGZhaWxlZDogIiArIGUpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBQcnVuZSBhbnkgc3lzdGVtIHBhY2thZ2VzIHRoYXQgbm8gbG9uZ2VyIGV4aXN0LgogICAgICAgICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IHBvc3NpYmx5RGVsZXRlZFVwZGF0ZWRTeXN0ZW1BcHBzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CkBAIC0yMzc3LDE1ICsyMzcwLDIxIEBACiAgICAgICAgICAgICBFdmVudExvZy53cml0ZUV2ZW50KEV2ZW50TG9nVGFncy5CT09UX1BST0dSRVNTX1BNU19SRUFEWSwKICAgICAgICAgICAgICAgICAgICAgU3lzdGVtQ2xvY2sudXB0aW1lTWlsbGlzKCkpOwogCi0gICAgICAgICAgICBtUmVxdWlyZWRWZXJpZmllclBhY2thZ2UgPSBnZXRSZXF1aXJlZFZlcmlmaWVyTFByKCk7Ci0gICAgICAgICAgICBtUmVxdWlyZWRJbnN0YWxsZXJQYWNrYWdlID0gZ2V0UmVxdWlyZWRJbnN0YWxsZXJMUHIoKTsKKyAgICAgICAgICAgIGlmICghbU9ubHlDb3JlKSB7CisgICAgICAgICAgICAgICAgbVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlID0gZ2V0UmVxdWlyZWRCdXROb3RSZWFsbHlSZXF1aXJlZFZlcmlmaWVyTFByKCk7CisgICAgICAgICAgICAgICAgbVJlcXVpcmVkSW5zdGFsbGVyUGFja2FnZSA9IGdldFJlcXVpcmVkSW5zdGFsbGVyTFByKCk7CisgICAgICAgICAgICAgICAgbUludGVudEZpbHRlclZlcmlmaWVyQ29tcG9uZW50ID0gZ2V0SW50ZW50RmlsdGVyVmVyaWZpZXJDb21wb25lbnROYW1lTFByKCk7CisgICAgICAgICAgICAgICAgbUludGVudEZpbHRlclZlcmlmaWVyID0gbmV3IEludGVudFZlcmlmaWVyUHJveHkobUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBtSW50ZW50RmlsdGVyVmVyaWZpZXJDb21wb25lbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtUmVxdWlyZWRWZXJpZmllclBhY2thZ2UgPSBudWxsOworICAgICAgICAgICAgICAgIG1SZXF1aXJlZEluc3RhbGxlclBhY2thZ2UgPSBudWxsOworICAgICAgICAgICAgICAgIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudCA9IG51bGw7CisgICAgICAgICAgICAgICAgbUludGVudEZpbHRlclZlcmlmaWVyID0gbnVsbDsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbUluc3RhbGxlclNlcnZpY2UgPSBuZXcgUGFja2FnZUluc3RhbGxlclNlcnZpY2UoY29udGV4dCwgdGhpcyk7CiAKLSAgICAgICAgICAgIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudCA9IGdldEludGVudEZpbHRlclZlcmlmaWVyQ29tcG9uZW50TmFtZUxQcigpOwotICAgICAgICAgICAgbUludGVudEZpbHRlclZlcmlmaWVyID0gbmV3IEludGVudFZlcmlmaWVyUHJveHkobUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudCk7Ci0KICAgICAgICAgICAgIGZpbmFsIENvbXBvbmVudE5hbWUgZXBoZW1lcmFsUmVzb2x2ZXJDb21wb25lbnQgPSBnZXRFcGhlbWVyYWxSZXNvbHZlckxQcigpOwogICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50TmFtZSBlcGhlbWVyYWxJbnN0YWxsZXJDb21wb25lbnQgPSBnZXRFcGhlbWVyYWxJbnN0YWxsZXJMUHIoKTsKICAgICAgICAgICAgIC8vIGJvdGggdGhlIGluc3RhbGxlciBhbmQgcmVzb2x2ZXIgbXVzdCBiZSBwcmVzZW50IHRvIGVuYWJsZSBlcGhlbWVyYWwKQEAgLTI0NDcsMTEzICsyNDQ2LDYxIEBACiAgICAgICAgIHJldHVybiBtSXNVcGdyYWRlOwogICAgIH0KIAotICAgIHByaXZhdGUgU3RyaW5nIGdldFJlcXVpcmVkVmVyaWZpZXJMUHIoKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCB2ZXJpZmljYXRpb24gPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fUEFDS0FHRV9ORUVEU19WRVJJRklDQVRJT04pOwotICAgICAgICAvLyBXZSBvbmx5IGNhcmUgYWJvdXQgdmVyaWZpZXIgdGhhdCdzIGluc3RhbGxlZCB1bmRlciBzeXN0ZW0gdXNlci4KLSAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVjZWl2ZXJzID0gcXVlcnlJbnRlbnRSZWNlaXZlcnModmVyaWZpY2F0aW9uLCBQQUNLQUdFX01JTUVfVFlQRSwKLSAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUywgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgcHJpdmF0ZSBATnVsbGFibGUgU3RyaW5nIGdldFJlcXVpcmVkQnV0Tm90UmVhbGx5UmVxdWlyZWRWZXJpZmllckxQcigpIHsKKyAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9QQUNLQUdFX05FRURTX1ZFUklGSUNBVElPTik7CiAKLSAgICAgICAgU3RyaW5nIHJlcXVpcmVkVmVyaWZpZXIgPSBudWxsOwotCi0gICAgICAgIGZpbmFsIGludCBOID0gcmVjZWl2ZXJzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspIHsKLSAgICAgICAgICAgIGZpbmFsIFJlc29sdmVJbmZvIGluZm8gPSByZWNlaXZlcnMuZ2V0KGkpOwotCi0gICAgICAgICAgICBpZiAoaW5mby5hY3Rpdml0eUluZm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBpbmZvLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZTsKLQotICAgICAgICAgICAgaWYgKGNoZWNrUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUEFDS0FHRV9WRVJJRklDQVRJT05fQUdFTlQsCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJlcXVpcmVkVmVyaWZpZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBjYW4gYmUgb25seSBvbmUgcmVxdWlyZWQgdmVyaWZpZXIiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVxdWlyZWRWZXJpZmllciA9IHBhY2thZ2VOYW1lOworICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiBtYXRjaGVzID0gcXVlcnlJbnRlbnRSZWNlaXZlcnMoaW50ZW50LCBQQUNLQUdFX01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSB8IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICBpZiAobWF0Y2hlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMuZ2V0KDApLmdldENvbXBvbmVudEluZm8oKS5wYWNrYWdlTmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExvZy5lKFRBRywgIlRoZXJlIHNob3VsZCBwcm9iYWJseSBiZSBleGFjdGx5IG9uZSB2ZXJpZmllcjsgZm91bmQgIiArIG1hdGNoZXMpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVxdWlyZWRWZXJpZmllcjsKICAgICB9CiAKLSAgICBwcml2YXRlIFN0cmluZyBnZXRSZXF1aXJlZEluc3RhbGxlckxQcigpIHsKLSAgICAgICAgSW50ZW50IGluc3RhbGxlckludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9JTlNUQUxMX1BBQ0tBR0UpOwotICAgICAgICBpbnN0YWxsZXJJbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX0RFRkFVTFQpOwotICAgICAgICBpbnN0YWxsZXJJbnRlbnQuc2V0RGF0YUFuZFR5cGUoVXJpLmZyb21GaWxlKG5ldyBGaWxlKCJmb28uYXBrIikpLCBQQUNLQUdFX01JTUVfVFlQRSk7CisgICAgcHJpdmF0ZSBATm9uTnVsbCBTdHJpbmcgZ2V0UmVxdWlyZWRJbnN0YWxsZXJMUHIoKSB7CisgICAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fSU5TVEFMTF9QQUNLQUdFKTsKKyAgICAgICAgaW50ZW50LmFkZENhdGVnb3J5KEludGVudC5DQVRFR09SWV9ERUZBVUxUKTsKKyAgICAgICAgaW50ZW50LnNldERhdGFBbmRUeXBlKFVyaS5mcm9tRmlsZShuZXcgRmlsZSgiZm9vLmFwayIpKSwgUEFDS0FHRV9NSU1FX1RZUEUpOwogCi0gICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IGluc3RhbGxlcnMgPSBxdWVyeUludGVudEFjdGl2aXRpZXMoaW5zdGFsbGVySW50ZW50LAotICAgICAgICAgICAgICAgIFBBQ0tBR0VfTUlNRV9UWVBFLCAwLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKLQotICAgICAgICBTdHJpbmcgcmVxdWlyZWRJbnN0YWxsZXIgPSBudWxsOwotCi0gICAgICAgIGZpbmFsIGludCBOID0gaW5zdGFsbGVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNvbHZlSW5mbyBpbmZvID0gaW5zdGFsbGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBpbmZvLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZTsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8uaXNTeXN0ZW1BcHAoKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmVxdWlyZWRJbnN0YWxsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGVyZSBtdXN0IGJlIG9uZSByZXF1aXJlZCBpbnN0YWxsZXIiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmVxdWlyZWRJbnN0YWxsZXIgPSBwYWNrYWdlTmFtZTsKKyAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gbWF0Y2hlcyA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIFBBQ0tBR0VfTUlNRV9UWVBFLAorICAgICAgICAgICAgICAgIE1BVENIX1NZU1RFTV9PTkxZIHwgTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CisgICAgICAgIGlmIChtYXRjaGVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5nZXQoMCkuZ2V0Q29tcG9uZW50SW5mbygpLnBhY2thZ2VOYW1lOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgaW5zdGFsbGVyOyBmb3VuZCAiICsgbWF0Y2hlcyk7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAocmVxdWlyZWRJbnN0YWxsZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZXJlIG11c3QgYmUgb25lIHJlcXVpcmVkIGluc3RhbGxlciIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlcXVpcmVkSW5zdGFsbGVyOwogICAgIH0KIAotICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBnZXRJbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudE5hbWVMUHIoKSB7Ci0gICAgICAgIGZpbmFsIEludGVudCB2ZXJpZmljYXRpb24gPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fSU5URU5UX0ZJTFRFUl9ORUVEU19WRVJJRklDQVRJT04pOwotICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiByZWNlaXZlcnMgPSBxdWVyeUludGVudFJlY2VpdmVycyh2ZXJpZmljYXRpb24sIFBBQ0tBR0VfTUlNRV9UWVBFLAotICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICBwcml2YXRlIEBOb25OdWxsIENvbXBvbmVudE5hbWUgZ2V0SW50ZW50RmlsdGVyVmVyaWZpZXJDb21wb25lbnROYW1lTFByKCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0lOVEVOVF9GSUxURVJfTkVFRFNfVkVSSUZJQ0FUSU9OKTsKIAotICAgICAgICBDb21wb25lbnROYW1lIHZlcmlmaWVyQ29tcG9uZW50TmFtZSA9IG51bGw7Ci0KLSAgICAgICAgaW50IHByaW9yaXR5ID0gLTEwMDA7Ci0gICAgICAgIGZpbmFsIGludCBOID0gcmVjZWl2ZXJzLnNpemUoKTsKKyAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gbWF0Y2hlcyA9IHF1ZXJ5SW50ZW50UmVjZWl2ZXJzKGludGVudCwgUEFDS0FHRV9NSU1FX1RZUEUsCisgICAgICAgICAgICAgICAgTUFUQ0hfU1lTVEVNX09OTFkgfCBNQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgUmVzb2x2ZUluZm8gYmVzdCA9IG51bGw7CisgICAgICAgIGZpbmFsIGludCBOID0gbWF0Y2hlcy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNvbHZlSW5mbyBpbmZvID0gcmVjZWl2ZXJzLmdldChpKTsKLQotICAgICAgICAgICAgaWYgKGluZm8uYWN0aXZpdHlJbmZvID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHBhY2thZ2VOYW1lID0gaW5mby5hY3Rpdml0eUluZm8ucGFja2FnZU5hbWU7Ci0KLSAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwotICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gY3VyID0gbWF0Y2hlcy5nZXQoaSk7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBjdXIuZ2V0Q29tcG9uZW50SW5mbygpLnBhY2thZ2VOYW1lOwogICAgICAgICAgICAgaWYgKGNoZWNrUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URU5UX0ZJTFRFUl9WRVJJRklDQVRJT05fQUdFTlQsCiAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBJbnRlbnRGaWx0ZXJWZXJpZmllciB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5Ci0gICAgICAgICAgICBpZiAocHJpb3JpdHkgPCBpbmZvLnByaW9yaXR5KSB7Ci0gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSBpbmZvLnByaW9yaXR5OwotICAgICAgICAgICAgICAgIHZlcmlmaWVyQ29tcG9uZW50TmFtZSA9IG5ldyBDb21wb25lbnROYW1lKHBhY2thZ2VOYW1lLCBpbmZvLmFjdGl2aXR5SW5mby5uYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfRE9NQUlOX1ZFUklGSUNBVElPTikgU2xvZy5kKFRBRywgIlNlbGVjdGluZyBJbnRlbnRGaWx0ZXJWZXJpZmllcjogIgotICAgICAgICAgICAgICAgICAgICAgICAgKyB2ZXJpZmllckNvbXBvbmVudE5hbWUgKyAiIHdpdGggcHJpb3JpdHk6ICIgKyBpbmZvLnByaW9yaXR5KTsKKyAgICAgICAgICAgIGlmIChiZXN0ID09IG51bGwgfHwgY3VyLnByaW9yaXR5ID4gYmVzdC5wcmlvcml0eSkgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdmVyaWZpZXJDb21wb25lbnROYW1lOworICAgICAgICBpZiAoYmVzdCAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gYmVzdC5nZXRDb21wb25lbnRJbmZvKCkuZ2V0Q29tcG9uZW50TmFtZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGludGVudCBmaWx0ZXIgdmVyaWZpZXIiKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBnZXRFcGhlbWVyYWxSZXNvbHZlckxQcigpIHsKKyAgICBwcml2YXRlIEBOdWxsYWJsZSBDb21wb25lbnROYW1lIGdldEVwaGVtZXJhbFJlc29sdmVyTFByKCkgewogICAgICAgICBmaW5hbCBTdHJpbmdbXSBwYWNrYWdlQXJyYXkgPQogICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldFJlc291cmNlcygpLmdldFN0cmluZ0FycmF5KFIuYXJyYXkuY29uZmlnX2VwaGVtZXJhbFJlc29sdmVyUGFja2FnZSk7CiAgICAgICAgIGlmIChwYWNrYWdlQXJyYXkubGVuZ3RoID09IDApIHsKQEAgLTI1NjMsOSArMjUxMCw5IEBACiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogCi0gICAgICAgIEludGVudCByZXNvbHZlckludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9SRVNPTFZFX0VQSEVNRVJBTF9QQUNLQUdFKTsKLSAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVzb2x2ZXJzID0gcXVlcnlJbnRlbnRTZXJ2aWNlcyhyZXNvbHZlckludGVudCwKLSAgICAgICAgICAgICAgICBudWxsIC8qcmVzb2x2ZWRUeXBlKi8sIDAgLypmbGFncyovLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKTsKKyAgICAgICAgZmluYWwgSW50ZW50IHJlc29sdmVySW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX1JFU09MVkVfRVBIRU1FUkFMX1BBQ0tBR0UpOworICAgICAgICBmaW5hbCBMaXN0PFJlc29sdmVJbmZvPiByZXNvbHZlcnMgPSBxdWVyeUludGVudFNlcnZpY2VzKHJlc29sdmVySW50ZW50LCBudWxsLAorICAgICAgICAgICAgICAgIE1BVENIX1NZU1RFTV9PTkxZIHwgTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9BTkRfVU5BV0FSRSwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CiAKICAgICAgICAgZmluYWwgaW50IE4gPSByZXNvbHZlcnMuc2l6ZSgpOwogICAgICAgICBpZiAoTiA9PSAwKSB7CkBAIC0yNjA0LDM2ICsyNTUxLDIxIEBACiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAotICAgIHByaXZhdGUgQ29tcG9uZW50TmFtZSBnZXRFcGhlbWVyYWxJbnN0YWxsZXJMUHIoKSB7Ci0gICAgICAgIEludGVudCBpbnN0YWxsZXJJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fSU5TVEFMTF9FUEhFTUVSQUxfUEFDS0FHRSk7Ci0gICAgICAgIGluc3RhbGxlckludGVudC5hZGRDYXRlZ29yeShJbnRlbnQuQ0FURUdPUllfREVGQVVMVCk7Ci0gICAgICAgIGluc3RhbGxlckludGVudC5zZXREYXRhQW5kVHlwZShVcmkuZnJvbUZpbGUobmV3IEZpbGUoImZvby5hcGsiKSksIFBBQ0tBR0VfTUlNRV9UWVBFKTsKLSAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gaW5zdGFsbGVycyA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnN0YWxsZXJJbnRlbnQsCi0gICAgICAgICAgICAgICAgUEFDS0FHRV9NSU1FX1RZUEUsIDAgLypmbGFncyovLCAwIC8qdXNlcklkKi8pOworICAgIHByaXZhdGUgQE51bGxhYmxlIENvbXBvbmVudE5hbWUgZ2V0RXBoZW1lcmFsSW5zdGFsbGVyTFByKCkgeworICAgICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudChJbnRlbnQuQUNUSU9OX0lOU1RBTExfRVBIRU1FUkFMX1BBQ0tBR0UpOworICAgICAgICBpbnRlbnQuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX0RFRkFVTFQpOworICAgICAgICBpbnRlbnQuc2V0RGF0YUFuZFR5cGUoVXJpLmZyb21GaWxlKG5ldyBGaWxlKCJmb28uYXBrIikpLCBQQUNLQUdFX01JTUVfVFlQRSk7CiAKLSAgICAgICAgQ29tcG9uZW50TmFtZSBlcGhlbWVyYWxJbnN0YWxsZXIgPSBudWxsOwotCi0gICAgICAgIGZpbmFsIGludCBOID0gaW5zdGFsbGVycy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBSZXNvbHZlSW5mbyBpbmZvID0gaW5zdGFsbGVycy5nZXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBpbmZvLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZTsKLQotICAgICAgICAgICAgaWYgKCFpbmZvLmFjdGl2aXR5SW5mby5hcHBsaWNhdGlvbkluZm8uaXNTeXN0ZW1BcHAoKSkgewotICAgICAgICAgICAgICAgIGlmIChERUJVR19FUEhFTUVSQUwpIHsKLSAgICAgICAgICAgICAgICAgICAgU2xvZy5kKFRBRywgIkVwaGVtZXJhbCBpbnN0YWxsZXIgaXMgbm90IHN5c3RlbSBhcHA7IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBwa2c6ICIgKyBwYWNrYWdlTmFtZSArICIsIGluZm86IiArIGluZm8pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGVwaGVtZXJhbEluc3RhbGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZXJlIG11c3Qgb25seSBiZSBvbmUgZXBoZW1lcmFsIGluc3RhbGxlciIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlcGhlbWVyYWxJbnN0YWxsZXIgPSBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlTmFtZSwgaW5mby5hY3Rpdml0eUluZm8ubmFtZSk7CisgICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IG1hdGNoZXMgPSBxdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LCBQQUNLQUdFX01JTUVfVFlQRSwKKyAgICAgICAgICAgICAgICBNQVRDSF9TWVNURU1fT05MWSB8IE1BVENIX0VOQ1JZUFRJT05fQVdBUkVfQU5EX1VOQVdBUkUsIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pOworICAgICAgICBpZiAobWF0Y2hlcy5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMuZ2V0KDApLmdldENvbXBvbmVudEluZm8oKS5nZXRDb21wb25lbnROYW1lKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIlRoZXJlIG11c3QgYmUgYXQgbW9zdCBvbmUgZXBoZW1lcmFsIGluc3RhbGxlcjsgZm91bmQgIiArIG1hdGNoZXMpOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVwaGVtZXJhbEluc3RhbGxlcjsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcHJpbWVEb21haW5WZXJpZmljYXRpb25zTFB3KGludCB1c2VySWQpIHsKQEAgLTI2ODAsNyArMjYxMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiJyBkb2VzIG5vdCBoYW5kbGUgd2ViIGxpbmtzIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiVW5rbm93biBwYWNrYWdlICciICsgcGFja2FnZU5hbWUgKyAiJyBpbiBzeXNjb25maWcgPGFwcC1saW5rPiIpOworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJVbmtub3duIHBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIiBpbiBzeXNjb25maWcgPGFwcC1saW5rPiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTI3ODMsMTEgKzI3MTUsNyBAQAogCiAgICAgICAgIHJlbW92ZURhdGFEaXJzTEkocHMudm9sdW1lVXVpZCwgcHMubmFtZSk7CiAgICAgICAgIGlmIChwcy5jb2RlUGF0aCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAocHMuY29kZVBhdGguaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKHBzLmNvZGVQYXRoLmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHMuY29kZVBhdGguZGVsZXRlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZW1vdmVDb2RlUGF0aExJKHBzLmNvZGVQYXRoKTsKICAgICAgICAgfQogICAgICAgICBpZiAocHMucmVzb3VyY2VQYXRoICE9IG51bGwgJiYgIXBzLnJlc291cmNlUGF0aC5lcXVhbHMocHMuY29kZVBhdGgpKSB7CiAgICAgICAgICAgICBpZiAocHMucmVzb3VyY2VQYXRoLmlzRGlyZWN0b3J5KCkpIHsKQEAgLTI4NjgsNiArMjc5Niw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFBhY2thZ2VJbmZvIGdldFBhY2thZ2VJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclBhY2thZ2UoZmxhZ3MsIHVzZXJJZCwgcGFja2FnZU5hbWUpOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIGZhbHNlLCBmYWxzZSwgImdldCBwYWNrYWdlIGluZm8iKTsKICAgICAgICAgLy8gcmVhZGVyCiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CkBAIC0yODc3LDcgKzI4MDYsNyBAQAogICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZVBhY2thZ2VJbmZvKHAsIGZsYWdzLCB1c2VySWQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVQYWNrYWdlSW5mb0Zyb21TZXR0aW5nc0xQdyhwYWNrYWdlTmFtZSwgZmxhZ3MsIHVzZXJJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI5MTEsMjQgKzI4NDAsMjAgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIHJldHVybiBnZXRQYWNrYWdlVWlkRXRjKHBhY2thZ2VOYW1lLCAwLCB1c2VySWQpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZEV0YyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIC0xOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUGFja2FnZShmbGFncywgdXNlcklkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IHBhY2thZ2UgdWlkIik7CiAKICAgICAgICAgLy8gcmVhZGVyCiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlBhY2thZ2UgcCA9IG1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwotICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBwLmlzTWF0Y2goZmxhZ3MpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJIYW5kbGUuZ2V0VWlkKHVzZXJJZCwgcC5hcHBsaWNhdGlvbkluZm8udWlkKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwgJiYgcHMuaXNNYXRjaChmbGFncykpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVzZXJIYW5kbGUuZ2V0VWlkKHVzZXJJZCwgcHMuYXBwSWQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI5MzgsMjkgKzI4NjMsMjIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50W10gZ2V0UGFja2FnZUdpZHMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIHJldHVybiBnZXRQYWNrYWdlR2lkc0V0YyhwYWNrYWdlTmFtZSwgMCwgdXNlcklkKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50W10gZ2V0UGFja2FnZUdpZHNFdGMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKLSAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KKyAgICBwdWJsaWMgaW50W10gZ2V0UGFja2FnZUdpZHMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUGFja2FnZShmbGFncywgdXNlcklkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLAogICAgICAgICAgICAgICAgICJnZXRQYWNrYWdlR2lkcyIpOwogCiAgICAgICAgIC8vIHJlYWRlcgogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5QYWNrYWdlIHAgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIGlmIChwICE9IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChwICE9IG51bGwgJiYgcC5pc01hdGNoKGZsYWdzKSkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gKFBhY2thZ2VTZXR0aW5nKSBwLm1FeHRyYXM7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBzLmdldFBlcm1pc3Npb25zU3RhdGUoKS5jb21wdXRlR2lkcyh1c2VySWQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMCkgeworICAgICAgICAgICAgaWYgKChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgUGFja2FnZVNldHRpbmcgcHMgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAocHMgIT0gbnVsbCAmJiBwcy5pc01hdGNoKGZsYWdzKSkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHMuZ2V0UGVybWlzc2lvbnNTdGF0ZSgpLmNvbXB1dGVHaWRzKHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjk2OSw4ICsyODg3LDcgQEAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCi0gICAgc3RhdGljIFBlcm1pc3Npb25JbmZvIGdlbmVyYXRlUGVybWlzc2lvbkluZm8oCi0gICAgICAgICAgICBCYXNlUGVybWlzc2lvbiBicCwgaW50IGZsYWdzKSB7CisgICAgc3RhdGljIFBlcm1pc3Npb25JbmZvIGdlbmVyYXRlUGVybWlzc2lvbkluZm8oQmFzZVBlcm1pc3Npb24gYnAsIGludCBmbGFncykgewogICAgICAgICBpZiAoYnAucGVybSAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gUGFja2FnZVBhcnNlci5nZW5lcmF0ZVBlcm1pc3Npb25JbmZvKGJwLnBlcm0sIGZsYWdzKTsKICAgICAgICAgfQpAQCAtMzA2Nyw3ICsyOTg0LDcgQEAKICAgICAgICAgaWYgKHBzICE9IG51bGwpIHsKICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBwcy5wa2c7CiAgICAgICAgICAgICBpZiAocGtnID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBPbmx5IGRhdGEgcmVtYWlucywgc28gd2UgYXJlbid0IHdvcnJpZWQgYWJvdXQgY29kZSBwYXRocwpAQCAtMzA4OCw2ICszMDA1LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQXBwbGljYXRpb25JbmZvIGdldEFwcGxpY2F0aW9uSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JBcHBsaWNhdGlvbihmbGFncywgdXNlcklkLCBwYWNrYWdlTmFtZSk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IGFwcGxpY2F0aW9uIGluZm8iKTsKICAgICAgICAgLy8gd3JpdGVyCiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CkBAIC0zMTA1LDcgKzMwMjMsNyBAQAogICAgICAgICAgICAgaWYgKCJhbmRyb2lkIi5lcXVhbHMocGFja2FnZU5hbWUpfHwic3lzdGVtIi5lcXVhbHMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1BbmRyb2lkQXBwbGljYXRpb247CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoKGZsYWdzICYgTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdGVBcHBsaWNhdGlvbkluZm9Gcm9tU2V0dGluZ3NMUHcocGFja2FnZU5hbWUsIGZsYWdzLCB1c2VySWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMTIxLDE2ICszMDM5LDE4IEBACiAgICAgICAgIG1IYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewogICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewogICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyh0aGlzKTsKLSAgICAgICAgICAgICAgICBpbnQgcmV0Q29kZSA9IC0xOworICAgICAgICAgICAgICAgIGJvb2xlYW4gc3VjY2VzcyA9IHRydWU7CiAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtSW5zdGFsbExvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0Q29kZSA9IG1JbnN0YWxsZXIuZnJlZUNhY2hlKHZvbHVtZVV1aWQsIGZyZWVTdG9yYWdlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXRDb2RlIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkNvdWxkbid0IGNsZWFyIGFwcGxpY2F0aW9uIGNhY2hlcyIpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbGxlci5mcmVlQ2FjaGUodm9sdW1lVXVpZCwgZnJlZVN0b3JhZ2VTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCBjbGVhciBhcHBsaWNhdGlvbiBjYWNoZXM6ICIgKyBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAob2JzZXJ2ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub25SZW1vdmVDb21wbGV0ZWQobnVsbCwgKHJldENvZGUgPj0gMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub25SZW1vdmVDb21wbGV0ZWQobnVsbCwgc3VjY2Vzcyk7CiAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiUmVtb3ZlRXhjZXB0aW9uIHdoZW4gaW52b2tpbmcgY2FsbCBiYWNrIik7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMxNDgsMTcgKzMwNjgsMTkgQEAKICAgICAgICAgbUhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CiAgICAgICAgICAgICAgICAgbUhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKHRoaXMpOwotICAgICAgICAgICAgICAgIGludCByZXRDb2RlID0gLTE7CisgICAgICAgICAgICAgICAgYm9vbGVhbiBzdWNjZXNzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1JbnN0YWxsTG9jaykgewotICAgICAgICAgICAgICAgICAgICByZXRDb2RlID0gbUluc3RhbGxlci5mcmVlQ2FjaGUodm9sdW1lVXVpZCwgZnJlZVN0b3JhZ2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldENvZGUgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgY2xlYXIgYXBwbGljYXRpb24gY2FjaGVzIik7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmZyZWVDYWNoZSh2b2x1bWVVdWlkLCBmcmVlU3RvcmFnZVNpemUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkNvdWxkbid0IGNsZWFyIGFwcGxpY2F0aW9uIGNhY2hlczogIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmKHBpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIHZpYSBwZW5kaW5nIGludGVudAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvZGUgPSAocmV0Q29kZSA+PSAwKSA/IDEgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvZGUgPSBzdWNjZXNzID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBwaS5zZW5kSW50ZW50KG51bGwsIGNvZGUsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChTZW5kSW50ZW50RXhjZXB0aW9uIGUxKSB7CkBAIC0zMTcxLDggKzMwOTMsMTAgQEAKIAogICAgIHZvaWQgZnJlZVN0b3JhZ2UoU3RyaW5nIHZvbHVtZVV1aWQsIGxvbmcgZnJlZVN0b3JhZ2VTaXplKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBzeW5jaHJvbml6ZWQgKG1JbnN0YWxsTG9jaykgewotICAgICAgICAgICAgaWYgKG1JbnN0YWxsZXIuZnJlZUNhY2hlKHZvbHVtZVV1aWQsIGZyZWVTdG9yYWdlU2l6ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gZnJlZSBlbm91Z2ggc3BhY2UiKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUluc3RhbGxlci5mcmVlQ2FjaGUodm9sdW1lVXVpZCwgZnJlZVN0b3JhZ2VTaXplKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJGYWlsZWQgdG8gZnJlZSBlbm91Z2ggc3BhY2UiLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMyMDIsMjYgKzMxMjYsMTA3IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQXVnbWVudCB0aGUgZ2l2ZW4gZmxhZ3MgZGVwZW5kaW5nIG9uIGN1cnJlbnQgdXNlciBydW5uaW5nIHN0YXRlLiBUaGlzIGlzCi0gICAgICogcHVycG9zZWZ1bGx5IGRvbmUgYmVmb3JlIGFjcXVpcmluZyB7QGxpbmsgI21QYWNrYWdlc30gbG9jay4KKyAgICAgKiBVcGRhdGUgZ2l2ZW4gZmxhZ3MgYmFzZWQgb24gZW5jcnlwdGlvbiBzdGF0dXMgb2YgY3VycmVudCB1c2VyLgogICAgICAqLwotICAgIHByaXZhdGUgaW50IGF1Z21lbnRGbGFnc0ZvclVzZXIoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGlmICghaXNVc2VyS2V5VW5sb2NrZWQodXNlcklkKSkgewotICAgICAgICAgICAgZmxhZ3MgfD0gUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRV9PTkxZOworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzKGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoKGZsYWdzICYgKFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fVU5BV0FSRQorICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRSkpICE9IDApIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBleHByZXNzZWQgYW4gZXhwbGljaXQgb3BpbmlvbiBhYm91dCB3aGF0IGVuY3J5cHRpb24KKyAgICAgICAgICAgIC8vIGF3YXJlL3VuYXdhcmUgY29tcG9uZW50cyB0aGV5IHdhbnQgdG8gc2VlLCBzbyBmYWxsIHRocm91Z2ggYW5kCisgICAgICAgICAgICAvLyBnaXZlIHRoZW0gd2hhdCB0aGV5IHdhbnQKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBleHByZXNzZWQgbm8gb3Bpbmlvbiwgc28gbWF0Y2ggYmFzZWQgb24gdXNlciBzdGF0ZQorICAgICAgICAgICAgaWYgKGlzVXNlcktleVVubG9ja2VkKHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLy8gU2FmZSBtb2RlIG1lYW5zIHdlIHNob3VsZCBpZ25vcmUgYW55IHRoaXJkLXBhcnR5IGFwcHMKKyAgICAgICAgaWYgKG1TYWZlTW9kZSkgeworICAgICAgICAgICAgZmxhZ3MgfD0gUGFja2FnZU1hbmFnZXIuTUFUQ0hfU1lTVEVNX09OTFk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm4gZmxhZ3M7CiAgICAgfQogCisgICAgLyoqCisgICAgICogVXBkYXRlIGdpdmVuIGZsYWdzIHdoZW4gYmVpbmcgdXNlZCB0byByZXF1ZXN0IHtAbGluayBQYWNrYWdlSW5mb30uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGludCBmbGFncywgaW50IHVzZXJJZCwgT2JqZWN0IGNvb2tpZSkgeworICAgICAgICBib29sZWFuIHRyaWFnZWQgPSB0cnVlOworICAgICAgICBpZiAoKGZsYWdzICYgKFBhY2thZ2VNYW5hZ2VyLkdFVF9BQ1RJVklUSUVTIHwgUGFja2FnZU1hbmFnZXIuR0VUX1JFQ0VJVkVSUworICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX1NFUlZJQ0VTIHwgUGFja2FnZU1hbmFnZXIuR0VUX1BST1ZJREVSUykpICE9IDApIHsKKyAgICAgICAgICAgIC8vIENhbGxlciBpcyBhc2tpbmcgZm9yIGNvbXBvbmVudCBkZXRhaWxzLCBzbyB0aGV5J2QgYmV0dGVyIGJlCisgICAgICAgICAgICAvLyBhc2tpbmcgZm9yIHNwZWNpZmljIGVuY3J5cHRpb24gbWF0Y2hpbmcgYmVoYXZpb3IsIG9yIGJlIHRyaWFnZWQKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiAoUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9VTkFXQVJFCisgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfRU5DUllQVElPTl9BV0FSRQorICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORykpID09IDApIHsKKyAgICAgICAgICAgICAgICB0cmlhZ2VkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKChmbGFncyAmIChQYWNrYWdlTWFuYWdlci5NQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUworICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfU1lTVEVNX09OTFkKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORykpID09IDApIHsKKyAgICAgICAgICAgIHRyaWFnZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoREVCVUdfVFJJQUdFRF9NSVNTSU5HICYmIChCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpID09IFByb2Nlc3MuU1lTVEVNX1VJRCkgJiYgIXRyaWFnZWQpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIkNhbGxlciBoYXNuJ3QgYmVlbiB0cmlhZ2VkIGZvciBtaXNzaW5nIGFwcHM7IHRoZXkgYXNrZWQgYWJvdXQgIiArIGNvb2tpZQorICAgICAgICAgICAgICAgICAgICArICIgd2l0aCBmbGFncyAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZsYWdzKSwgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXBkYXRlRmxhZ3MoZmxhZ3MsIHVzZXJJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIGdpdmVuIGZsYWdzIHdoZW4gYmVpbmcgdXNlZCB0byByZXF1ZXN0IHtAbGluayBBcHBsaWNhdGlvbkluZm99LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzRm9yQXBwbGljYXRpb24oaW50IGZsYWdzLCBpbnQgdXNlcklkLCBPYmplY3QgY29va2llKSB7CisgICAgICAgIHJldHVybiB1cGRhdGVGbGFnc0ZvclBhY2thZ2UoZmxhZ3MsIHVzZXJJZCwgY29va2llKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVcGRhdGUgZ2l2ZW4gZmxhZ3Mgd2hlbiBiZWluZyB1c2VkIHRvIHJlcXVlc3Qge0BsaW5rIENvbXBvbmVudEluZm99LgorICAgICAqLworICAgIHByaXZhdGUgaW50IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGludCBmbGFncywgaW50IHVzZXJJZCwgT2JqZWN0IGNvb2tpZSkgeworICAgICAgICBpZiAoY29va2llIGluc3RhbmNlb2YgSW50ZW50KSB7CisgICAgICAgICAgICBpZiAoKCgoSW50ZW50KSBjb29raWUpLmdldEZsYWdzKCkgJiBJbnRlbnQuRkxBR19ERUJVR19UUklBR0VEX01JU1NJTkcpICE9IDApIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sZWFuIHRyaWFnZWQgPSB0cnVlOworICAgICAgICAvLyBDYWxsZXIgaXMgYXNraW5nIGZvciBjb21wb25lbnQgZGV0YWlscywgc28gdGhleSdkIGJldHRlciBiZQorICAgICAgICAvLyBhc2tpbmcgZm9yIHNwZWNpZmljIGVuY3J5cHRpb24gbWF0Y2hpbmcgYmVoYXZpb3IsIG9yIGJlIHRyaWFnZWQKKyAgICAgICAgaWYgKChmbGFncyAmIChQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkUKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkUKKyAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORykpID09IDApIHsKKyAgICAgICAgICAgIHRyaWFnZWQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoREVCVUdfVFJJQUdFRF9NSVNTSU5HICYmIChCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpID09IFByb2Nlc3MuU1lTVEVNX1VJRCkgJiYgIXRyaWFnZWQpIHsKKyAgICAgICAgICAgIExvZy53KFRBRywgIkNhbGxlciBoYXNuJ3QgYmVlbiB0cmlhZ2VkIGZvciBtaXNzaW5nIGFwcHM7IHRoZXkgYXNrZWQgYWJvdXQgIiArIGNvb2tpZQorICAgICAgICAgICAgICAgICAgICArICIgd2l0aCBmbGFncyAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGZsYWdzKSwgbmV3IFRocm93YWJsZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXBkYXRlRmxhZ3MoZmxhZ3MsIHVzZXJJZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVXBkYXRlIGdpdmVuIGZsYWdzIHdoZW4gYmVpbmcgdXNlZCB0byByZXF1ZXN0IHtAbGluayBSZXNvbHZlSW5mb30uCisgICAgICovCisgICAgcHJpdmF0ZSBpbnQgdXBkYXRlRmxhZ3NGb3JSZXNvbHZlKGludCBmbGFncywgaW50IHVzZXJJZCwgT2JqZWN0IGNvb2tpZSkgeworICAgICAgICByZXR1cm4gdXBkYXRlRmxhZ3NGb3JDb21wb25lbnQoZmxhZ3MsIHVzZXJJZCwgY29va2llKTsKKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQWN0aXZpdHlJbmZvIGdldEFjdGl2aXR5SW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIGNvbXBvbmVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IGFjdGl2aXR5IGluZm8iKTsKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuQWN0aXZpdHkgYSA9IG1BY3Rpdml0aWVzLm1BY3Rpdml0aWVzLmdldChjb21wb25lbnQpOwogCiAgICAgICAgICAgICBpZiAoREVCVUdfUEFDS0FHRV9JTkZPKSBMb2cudihUQUcsICJnZXRBY3Rpdml0eUluZm8gIiArIGNvbXBvbmVudCArICI6ICIgKyBhKTsKLSAgICAgICAgICAgIGlmIChhICE9IG51bGwgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIoYS5pbmZvLCBmbGFncywgdXNlcklkKSkgeworICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kTWF0Y2hMUHIoYS5pbmZvLCBmbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQoY29tcG9uZW50LmdldFBhY2thZ2VOYW1lKCkpOwogICAgICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgICByZXR1cm4gUGFja2FnZVBhcnNlci5nZW5lcmF0ZUFjdGl2aXR5SW5mbyhhLCBmbGFncywgcHMucmVhZFVzZXJTdGF0ZSh1c2VySWQpLApAQCAtMzI2MCwxMyArMzI2NSwxMyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBY3Rpdml0eUluZm8gZ2V0UmVjZWl2ZXJJbmZvKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JDb21wb25lbnQoZmxhZ3MsIHVzZXJJZCwgY29tcG9uZW50KTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsICJnZXQgcmVjZWl2ZXIgaW5mbyIpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewogICAgICAgICAgICAgUGFja2FnZVBhcnNlci5BY3Rpdml0eSBhID0gbVJlY2VpdmVycy5tQWN0aXZpdGllcy5nZXQoY29tcG9uZW50KTsKICAgICAgICAgICAgIGlmIChERUJVR19QQUNLQUdFX0lORk8pIExvZy52KAogICAgICAgICAgICAgICAgIFRBRywgImdldFJlY2VpdmVySW5mbyAiICsgY29tcG9uZW50ICsgIjogIiArIGEpOwotICAgICAgICAgICAgaWYgKGEgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kVmlzaWJsZUxQcihhLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoYSAhPSBudWxsICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihhLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgUGFja2FnZVNldHRpbmcgcHMgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChjb21wb25lbnQuZ2V0UGFja2FnZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlUGFyc2VyLmdlbmVyYXRlQWN0aXZpdHlJbmZvKGEsIGZsYWdzLCBwcy5yZWFkVXNlclN0YXRlKHVzZXJJZCksCkBAIC0zMjc5LDEzICszMjg0LDEzIEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFNlcnZpY2VJbmZvIGdldFNlcnZpY2VJbmZvKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JDb21wb25lbnQoZmxhZ3MsIHVzZXJJZCwgY29tcG9uZW50KTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsICJnZXQgc2VydmljZSBpbmZvIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBQYWNrYWdlUGFyc2VyLlNlcnZpY2UgcyA9IG1TZXJ2aWNlcy5tU2VydmljZXMuZ2V0KGNvbXBvbmVudCk7CiAgICAgICAgICAgICBpZiAoREVCVUdfUEFDS0FHRV9JTkZPKSBMb2cudigKICAgICAgICAgICAgICAgICBUQUcsICJnZXRTZXJ2aWNlSW5mbyAiICsgY29tcG9uZW50ICsgIjogIiArIHMpOwotICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kVmlzaWJsZUxQcihzLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAocyAhPSBudWxsICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihzLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgUGFja2FnZVNldHRpbmcgcHMgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChjb21wb25lbnQuZ2V0UGFja2FnZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlUGFyc2VyLmdlbmVyYXRlU2VydmljZUluZm8ocywgZmxhZ3MsIHBzLnJlYWRVc2VyU3RhdGUodXNlcklkKSwKQEAgLTMyOTgsMTMgKzMzMDMsMTMgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUHJvdmlkZXJJbmZvIGdldFByb3ZpZGVySW5mbyhDb21wb25lbnROYW1lIGNvbXBvbmVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIGNvbXBvbmVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAiZ2V0IHByb3ZpZGVyIGluZm8iKTsKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuUHJvdmlkZXIgcCA9IG1Qcm92aWRlcnMubVByb3ZpZGVycy5nZXQoY29tcG9uZW50KTsKICAgICAgICAgICAgIGlmIChERUJVR19QQUNLQUdFX0lORk8pIExvZy52KAogICAgICAgICAgICAgICAgIFRBRywgImdldFByb3ZpZGVySW5mbyAiICsgY29tcG9uZW50ICsgIjogIiArIHApOwotICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kVmlzaWJsZUxQcihwLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAocCAhPSBudWxsICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihwLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgUGFja2FnZVNldHRpbmcgcHMgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChjb21wb25lbnQuZ2V0UGFja2FnZU5hbWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlUGFyc2VyLmdlbmVyYXRlUHJvdmlkZXJJbmZvKHAsIGZsYWdzLCBwcy5yZWFkVXNlclN0YXRlKHVzZXJJZCksCkBAIC0zMzY4LDE0ICszMzczLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBjaGVja1ZhbGlkQ2FsbGVyKGludCB1aWQsIGludCB1c2VySWQpIHsKLSAgICAgICAgaWYgKFVzZXJIYW5kbGUuZ2V0VXNlcklkKHVpZCkgPT0gdXNlcklkIHx8IHVpZCA9PSBQcm9jZXNzLlNZU1RFTV9VSUQgfHwgdWlkID09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYWxsZXIgdWlkPSIgKyB1aWQKLSAgICAgICAgICAgICAgICArICIgaXMgbm90IHByaXZpbGVnZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB1c2VyPSIgKyB1c2VySWQpOwotICAgIH0KLQogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgY2hlY2tQZXJtaXNzaW9uKFN0cmluZyBwZXJtTmFtZSwgU3RyaW5nIHBrZ05hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHsKQEAgLTM3MzQsOCArMzczMSw4IEBACiAKICAgICAgICAgICAgIGZpbmFsIGludCBmbGFncyA9IHBlcm1pc3Npb25zU3RhdGUuZ2V0UGVybWlzc2lvbkZsYWdzKG5hbWUsIHVzZXJJZCk7CiAgICAgICAgICAgICBpZiAoKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuRkxBR19QRVJNSVNTSU9OX1NZU1RFTV9GSVhFRCkgIT0gMCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ2Fubm90IGdyYW50IHN5c3RlbSBmaXhlZCBwZXJtaXNzaW9uOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiIGZvciBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ2Fubm90IGdyYW50IHN5c3RlbSBmaXhlZCBwZXJtaXNzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSArICIgZm9yIHBhY2thZ2UgIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGJwLmlzRGV2ZWxvcG1lbnQoKSkgewpAQCAtMzg0Myw4ICszODQwLDggQEAKIAogICAgICAgICAgICAgZmluYWwgaW50IGZsYWdzID0gcGVybWlzc2lvbnNTdGF0ZS5nZXRQZXJtaXNzaW9uRmxhZ3MobmFtZSwgdXNlcklkKTsKICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5GTEFHX1BFUk1JU1NJT05fU1lTVEVNX0ZJWEVEKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJDYW5ub3QgcmV2b2tlIHN5c3RlbSBmaXhlZCBwZXJtaXNzaW9uOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiIGZvciBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiQ2Fubm90IHJldm9rZSBzeXN0ZW0gZml4ZWQgcGVybWlzc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIG5hbWUgKyAiIGZvciBwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChicC5pc0RldmVsb3BtZW50KCkpIHsKQEAgLTQwNDgsNyArNDA0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICJjYW5TaG93UmVxdWVzdFBlcm1pc3Npb25SYXRpb25hbGUgZm9yIHVzZXIgIiArIHVzZXJJZCk7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBpbnQgdWlkID0gZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgdXNlcklkKTsKKyAgICAgICAgZmluYWwgaW50IHVpZCA9IGdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgdXNlcklkKTsKICAgICAgICAgaWYgKFVzZXJIYW5kbGUuZ2V0QXBwSWQoZ2V0Q2FsbGluZ1VpZCgpKSAhPSBVc2VySGFuZGxlLmdldEFwcElkKHVpZCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNDEwMiwxMCArNDA5OSwxMiBAQAogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewogICAgICAgICAgICAgaWYgKG1Qcm90ZWN0ZWRCcm9hZGNhc3RzLmNvbnRhaW5zKGFjdGlvbk5hbWUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbk5hbWUgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAmJiBhY3Rpb25OYW1lLnN0YXJ0c1dpdGgoImFuZHJvaWQubmV0Lm5ldG1vbi5saW5nZXJFeHBpcmVkIikpIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyB0ZXJyaWJsZSBoYWNrCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbk5hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGVzZSB0ZXJyaWJsZSBoYWNrcworICAgICAgICAgICAgICAgIGlmIChhY3Rpb25OYW1lLnN0YXJ0c1dpdGgoImFuZHJvaWQubmV0Lm5ldG1vbi5saW5nZXJFeHBpcmVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGFjdGlvbk5hbWUuc3RhcnRzV2l0aCgiY29tLmFuZHJvaWQuc2VydmVyLnNpcC5TaXBXYWtldXBUaW1lciIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00NDI5LDEwICs0NDI4LDI0IEBACiAgICAgcHVibGljIFJlc29sdmVJbmZvIHJlc29sdmVJbnRlbnQoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwKICAgICAgICAgICAgIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwgZmFsc2UsICJyZXNvbHZlIGludGVudCIpOwogICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeSA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIHJlc29sdmVkVHlwZSwgZmxhZ3MsIHVzZXJJZCk7Ci0gICAgICAgIHJldHVybiBjaG9vc2VCZXN0QWN0aXZpdHkoaW50ZW50LCByZXNvbHZlZFR5cGUsIGZsYWdzLCBxdWVyeSwgdXNlcklkKTsKKyAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gYmVzdENob2ljZSA9CisgICAgICAgICAgICAgICAgY2hvb3NlQmVzdEFjdGl2aXR5KGludGVudCwgcmVzb2x2ZWRUeXBlLCBmbGFncywgcXVlcnksIHVzZXJJZCk7CisKKyAgICAgICAgaWYgKGlzRXBoZW1lcmFsQWxsb3dlZChpbnRlbnQsIHF1ZXJ5LCB1c2VySWQpKSB7CisgICAgICAgICAgICBmaW5hbCBFcGhlbWVyYWxSZXNvbHZlSW5mbyBhaSA9CisgICAgICAgICAgICAgICAgICAgIGdldEVwaGVtZXJhbFJlc29sdmVJbmZvKGludGVudCwgcmVzb2x2ZWRUeXBlLCB1c2VySWQpOworICAgICAgICAgICAgaWYgKGFpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfRVBIRU1FUkFMKSB7CisgICAgICAgICAgICAgICAgICAgIFNsb2cudihUQUcsICJSZXR1cm5pbmcgYW4gRXBoZW1lcmFsUmVzb2x2ZUluZm8iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmVzdENob2ljZS5lcGhlbWVyYWxJbnN0YWxsZXIgPSBtRXBoZW1lcmFsSW5zdGFsbGVySW5mbzsKKyAgICAgICAgICAgICAgICBiZXN0Q2hvaWNlLmVwaGVtZXJhbFJlc29sdmVJbmZvID0gYWk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJlc3RDaG9pY2U7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC00NDY3LDEzICs0NDgwLDY0IEBACiAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdXNlcklkKTsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFcGhlbWVyYWxBdmFpbGFibGUoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IHVzZXJJZCkgeworCisgICAgcHJpdmF0ZSBib29sZWFuIGlzRXBoZW1lcmFsQWxsb3dlZCgKKyAgICAgICAgICAgIEludGVudCBpbnRlbnQsIExpc3Q8UmVzb2x2ZUluZm8+IHJlc29sdmVkQWN0aXZpdGVzLCBpbnQgdXNlcklkKSB7CisgICAgICAgIC8vIFNob3J0IGNpcmN1aXQgYW5kIHJldHVybiBlYXJseSBpZiBwb3NzaWJsZS4KKyAgICAgICAgaWYgKERJU0FCTEVfRVBIRU1FUkFMX0FQUFMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VzZXIgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgaWYgKGNhbGxpbmdVc2VyICE9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobUVwaGVtZXJhbFJlc29sdmVyQ29ubmVjdGlvbiA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVudC5nZXRDb21wb25lbnQoKSAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGludGVudC5nZXRQYWNrYWdlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGZpbmFsIGJvb2xlYW4gaXNXZWJVcmkgPSBoYXNXZWJVUkkoaW50ZW50KTsKKyAgICAgICAgaWYgKCFpc1dlYlVyaSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIERlbnkgZXBoZW1lcmFsIGFwcHMgaWYgdGhlIHVzZXIgY2hvc2UgX0FMV0FZUyBvciBfQUxXQVlTX0FTSyBmb3IgaW50ZW50IHJlc29sdXRpb24uCisgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CisgICAgICAgICAgICBmaW5hbCBpbnQgY291bnQgPSByZXNvbHZlZEFjdGl2aXRlcy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKKyAgICAgICAgICAgICAgICBSZXNvbHZlSW5mbyBpbmZvID0gcmVzb2x2ZWRBY3Rpdml0ZXMuZ2V0KG4pOworICAgICAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGluZm8uYWN0aXZpdHlJbmZvLnBhY2thZ2VOYW1lOworICAgICAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgdGhlIHN0YXR1cyBmcm9tIFVzZXIgc2V0dGluZ3MgZmlyc3QKKyAgICAgICAgICAgICAgICAgICAgbG9uZyBwYWNrZWRTdGF0dXMgPSBnZXREb21haW5WZXJpZmljYXRpb25TdGF0dXNMUHIocHMsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSAoaW50KSAocGFja2VkU3RhdHVzID4+IDMyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBJTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FMV0FZUworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXR1cyA9PSBJTlRFTlRfRklMVEVSX0RPTUFJTl9WRVJJRklDQVRJT05fU1RBVFVTX0FMV0FZU19BU0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19FUEhFTUVSQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiREVOWSBlcGhlbWVyYWwgYXBwczsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBwa2c6ICIgKyBwYWNrYWdlTmFtZSArICIsIHN0YXR1czogIiArIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gV2UndmUgZXhoYXVzdGVkIGFsbCB3YXlzIHRvIGRlbnkgZXBoZW1lcmFsIGFwcGxpY2F0aW9uOyBsZXQgdGhlIHN5c3RlbSBsb29rIGZvciB0aGVtLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIEVwaGVtZXJhbFJlc29sdmVJbmZvIGdldEVwaGVtZXJhbFJlc29sdmVJbmZvKEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsCisgICAgICAgICAgICBpbnQgdXNlcklkKSB7CiAgICAgICAgIE1lc3NhZ2VEaWdlc3QgZGlnZXN0ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGRpZ2VzdCA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoRXBoZW1lcmFsUmVzb2x2ZUluZm8uU0hBX0FMR09SSVRITSk7CiAgICAgICAgIH0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBjYW4ndCBjcmVhdGUgYSBkaWdlc3QsIGlnbm9yZSBlcGhlbWVyYWwgYXBwcy4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKICAgICAgICAgZmluYWwgYnl0ZVtdIGhvc3RCeXRlcyA9IGludGVudC5nZXREYXRhKCkuZ2V0SG9zdCgpLmdldEJ5dGVzKCk7CkBAIC00NDg3LDcgKzQ1NTEsNyBAQAogICAgICAgICAgICAgICAgIG1FcGhlbWVyYWxSZXNvbHZlckNvbm5lY3Rpb24uZ2V0RXBoZW1lcmFsUmVzb2x2ZUluZm9MaXN0KHNoYVByZWZpeCk7CiAgICAgICAgIGlmIChlcGhlbWVyYWxSZXNvbHZlSW5mb0xpc3QgPT0gbnVsbCB8fCBlcGhlbWVyYWxSZXNvbHZlSW5mb0xpc3Quc2l6ZSgpID09IDApIHsKICAgICAgICAgICAgIC8vIE5vIGhhc2ggcHJlZml4IG1hdGNoOyB0aGVyZSBhcmUgbm8gZXBoZW1lcmFsIGFwcHMgZm9yIHRoaXMgZG9tYWluLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICAgICAgZm9yIChpbnQgaSA9IGVwaGVtZXJhbFJlc29sdmVJbmZvTGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICAgICAgRXBoZW1lcmFsUmVzb2x2ZUluZm8gZXBoZW1lcmFsQXBwbGljYXRpb24gPSBlcGhlbWVyYWxSZXNvbHZlSW5mb0xpc3QuZ2V0KGkpOwpAQCAtNDUwMiw2MiArNDU2NiwyMiBAQAogICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGRvbWFpbiBtYXRjaDsgcmVzb2x2ZSB0aGUgZmlsdGVycyB0byBzZWUgaWYgYW55dGhpbmcgbWF0Y2hlcy4KICAgICAgICAgICAgIGZpbmFsIEVwaGVtZXJhbEludGVudFJlc29sdmVyIGVwaGVtZXJhbFJlc29sdmVyID0gbmV3IEVwaGVtZXJhbEludGVudFJlc29sdmVyKCk7CiAgICAgICAgICAgICBmb3IgKGludCBqID0gZmlsdGVycy5zaXplKCkgLSAxOyBqID49IDA7IC0taikgewotICAgICAgICAgICAgICAgIGVwaGVtZXJhbFJlc29sdmVyLmFkZEZpbHRlcihmaWx0ZXJzLmdldChqKSk7CisgICAgICAgICAgICAgICAgZmluYWwgRXBoZW1lcmFsUmVzb2x2ZUludGVudEluZm8gaW50ZW50SW5mbyA9CisgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXBoZW1lcmFsUmVzb2x2ZUludGVudEluZm8oZmlsdGVycy5nZXQoaiksIGVwaGVtZXJhbEFwcGxpY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBlcGhlbWVyYWxSZXNvbHZlci5hZGRGaWx0ZXIoaW50ZW50SW5mbyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBlcGhlbWVyYWxSZXNvbHZlTGlzdCA9IGVwaGVtZXJhbFJlc29sdmVyLnF1ZXJ5SW50ZW50KAorICAgICAgICAgICAgTGlzdDxFcGhlbWVyYWxSZXNvbHZlSW5mbz4gbWF0Y2hlZFJlc29sdmVJbmZvTGlzdCA9IGVwaGVtZXJhbFJlc29sdmVyLnF1ZXJ5SW50ZW50KAogICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIHJlc29sdmVkVHlwZSwgZmFsc2UgLypkZWZhdWx0T25seSovLCB1c2VySWQpOwotICAgICAgICAgICAgcmV0dXJuICFlcGhlbWVyYWxSZXNvbHZlTGlzdC5pc0VtcHR5KCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoZWRSZXNvbHZlSW5mb0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRSZXNvbHZlSW5mb0xpc3QuZ2V0KDApOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIEhhc2ggb3IgZmlsdGVyIG1pcy1tYXRjaDsgbm8gZXBoZW1lcmFsIGFwcHMgZm9yIHRoaXMgZG9tYWluLgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIHByaXZhdGUgUmVzb2x2ZUluZm8gY2hvb3NlQmVzdEFjdGl2aXR5KEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsCiAgICAgICAgICAgICBpbnQgZmxhZ3MsIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5LCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gaXNXZWJVcmkgPSBoYXNXZWJVUkkoaW50ZW50KTsKLSAgICAgICAgLy8gQ2hlY2sgd2hldGhlciBvciBub3QgYW4gZXBoZW1lcmFsIGFwcCBleGlzdHMgdG8gaGFuZGxlIHRoZSBVUkkuCi0gICAgICAgIGlmIChpc1dlYlVyaSAmJiBtRXBoZW1lcmFsUmVzb2x2ZXJDb25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIERlbnkgZXBoZW1lcmFsIGFwcHMgaWYgdGhlIHVzZXIgY2hvb3NlIF9BTFdBWVMgb3IgX0FMV0FZU19BU0sgZm9yIGludGVudCByZXNvbHV0aW9uLgotICAgICAgICAgICAgYm9vbGVhbiBoYXNBbHdheXNIYW5kbGVyID0gZmFsc2U7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewotICAgICAgICAgICAgICAgIGZpbmFsIGludCBjb3VudCA9IHF1ZXJ5LnNpemUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBuPTA7IG48Y291bnQ7IG4rKykgewotICAgICAgICAgICAgICAgICAgICBSZXNvbHZlSW5mbyBpbmZvID0gcXVlcnkuZ2V0KG4pOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBpbmZvLmFjdGl2aXR5SW5mby5wYWNrYWdlTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgUGFja2FnZVNldHRpbmcgcHMgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gZ2V0IHRoZSBzdGF0dXMgZnJvbSBVc2VyIHNldHRpbmdzIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb25nIHBhY2tlZFN0YXR1cyA9IGdldERvbWFpblZlcmlmaWNhdGlvblN0YXR1c0xQcihwcywgdXNlcklkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0dXMgPSAoaW50KSAocGFja2VkU3RhdHVzID4+IDMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19BTFdBWVMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgc3RhdHVzID09IElOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQUxXQVlTX0FTSykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0Fsd2F5c0hhbmRsZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIGluc3RhbGxpbmcgYW4gZXBoZW1lcmFsIGFwcCBpZiB0aGVyZSBpc24ndCBhbHJlYWR5IGEgdmVyaWZpZWQgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCB0aGVyZSdzIGFuIGVwaGVtZXJhbCBhcHAgYXZhaWxhYmxlIGZvciB0aGUgVVJJLCBpZ25vcmUgYW55Ci0gICAgICAgICAgICAvLyBSZXNvbHZlSW5mbydzIGFuZCBqdXN0IHJldHVybiB0aGUgZXBoZW1lcmFsIGluc3RhbGxlcgotICAgICAgICAgICAgaWYgKCFoYXNBbHdheXNIYW5kbGVyICYmIGlzRXBoZW1lcmFsQXZhaWxhYmxlKGludGVudCwgcmVzb2x2ZWRUeXBlLCB1c2VySWQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKERFQlVHX0VQSEVNRVJBTCkgewotICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiUmVzb2x2aW5nIHRvIHRoZSBlcGhlbWVyYWwgaW5zdGFsbGVyIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGRpdGNoIHRoZSByZXN1bHQgYW5kIHJldHVybiBhIFJlc29sdmVJbmZvIHRvIGxhdW5jaCB0aGUgZXBoZW1lcmFsIGluc3RhbGxlcgotICAgICAgICAgICAgICAgIFJlc29sdmVJbmZvIHJpID0gbmV3IFJlc29sdmVJbmZvKG1FcGhlbWVyYWxJbnN0YWxsZXJJbmZvKTsKLSAgICAgICAgICAgICAgICByaS5hY3Rpdml0eUluZm8gPSBuZXcgQWN0aXZpdHlJbmZvKHJpLmFjdGl2aXR5SW5mbyk7Ci0gICAgICAgICAgICAgICAgLy8gbWFrZSBhIGRlZXAgY29weSBvZiB0aGUgYXBwbGljYXRpb25JbmZvCi0gICAgICAgICAgICAgICAgcmkuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mbyA9IG5ldyBBcHBsaWNhdGlvbkluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICByaS5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvKTsKLSAgICAgICAgICAgICAgICBpZiAodXNlcklkICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmkuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mby51aWQgPSBVc2VySGFuZGxlLmdldFVpZCh1c2VySWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRBcHBJZChyaS5hY3Rpdml0eUluZm8uYXBwbGljYXRpb25JbmZvLnVpZCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHsKICAgICAgICAgICAgIGZpbmFsIGludCBOID0gcXVlcnkuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKE4gPT0gMSkgewpAQCAtNDU3Myw3ICs0NTk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHIxLmFjdGl2aXR5SW5mby5uYW1lICsgIj0iICsgcjEucHJpb3JpdHkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYWN0aXZpdHkgaGFzIGEgaGlnaGVyIHByaW9yaXR5LCBvciBhIGRpZmZlcmVudAotICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQsIHRoZW4gaXQgaXMgYWx3YXlzIGRlc2lyZWFibGUgdG8gcGljayBpdC4KKyAgICAgICAgICAgICAgICAvLyBkZWZhdWx0LCB0aGVuIGl0IGlzIGFsd2F5cyBkZXNpcmFibGUgdG8gcGljayBpdC4KICAgICAgICAgICAgICAgICBpZiAocjAucHJpb3JpdHkgIT0gcjEucHJpb3JpdHkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHIwLnByZWZlcnJlZE9yZGVyICE9IHIxLnByZWZlcnJlZE9yZGVyCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCByMC5pc0RlZmF1bHQgIT0gcjEuaXNEZWZhdWx0KSB7CkBAIC00NjI1LDcgKzQ2NDksNyBAQAogICAgICAgICAgICAgICAgICAgICBwcGEuZHVtcChuZXcgTG9nUHJpbnRlcihMb2cuVkVSQk9TRSwgVEFHLCBMb2cuTE9HX0lEX1NZU1RFTSksICIgICIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmaW5hbCBBY3Rpdml0eUluZm8gYWkgPSBnZXRBY3Rpdml0eUluZm8ocHBhLm1Db21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBmbGFncyB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9DT01QT05FTlRTLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfCBNQVRDSF9ESVNBQkxFRF9DT01QT05FTlRTLCB1c2VySWQpOwogICAgICAgICAgICAgICAgIGlmIChERUJVR19QUkVGRVJSRUQgfHwgZGVidWcpIHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy52KFRBRywgIkZvdW5kIHBlcnNpc3RlbnQgcHJlZmVycmVkIGFjdGl2aXR5OiIpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWkgIT0gbnVsbCkgewpAQCAtNDY2NSw3ICs0Njg5LDcgQEAKICAgICAgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IHF1ZXJ5LCBpbnQgcHJpb3JpdHksIGJvb2xlYW4gYWx3YXlzLAogICAgICAgICAgICAgYm9vbGVhbiByZW1vdmVNYXRjaGVzLCBib29sZWFuIGRlYnVnLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yUmVzb2x2ZShmbGFncywgdXNlcklkLCBpbnRlbnQpOwogICAgICAgICAvLyB3cml0ZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGlmIChpbnRlbnQuZ2V0U2VsZWN0b3IoKSAhPSBudWxsKSB7CkBAIC00NzM0LDcgKzQ3NTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgQWN0aXZpdHlJbmZvIGFpID0gZ2V0QWN0aXZpdHlJbmZvKHBhLm1QcmVmLm1Db21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMsIHVzZXJJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUywgdXNlcklkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19QUkVGRVJSRUQgfHwgZGVidWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHLCAiRm91bmQgcHJlZmVycmVkIGFjdGl2aXR5OiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhaSAhPSBudWxsKSB7CkBAIC00ODY0LDcgKzQ4ODgsNyBAQAogICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUludGVudEFjdGl2aXRpZXMoSW50ZW50IGludGVudCwKICAgICAgICAgICAgIFN0cmluZyByZXNvbHZlZFR5cGUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JSZXNvbHZlKGZsYWdzLCB1c2VySWQsIGludGVudCk7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgZmFsc2UsIGZhbHNlLCAicXVlcnkgaW50ZW50IGFjdGl2aXRpZXMiKTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CkBAIC01MzQ4LDcgKzUzNzIsNyBAQAogICAgICAgICAgICAgSW50ZW50W10gc3BlY2lmaWNzLCBTdHJpbmdbXSBzcGVjaWZpY1R5cGVzLCBJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCBmYWxzZSwKICAgICAgICAgICAgICAgICBmYWxzZSwgInF1ZXJ5IGludGVudCBhY3Rpdml0eSBvcHRpb25zIik7CiAgICAgICAgIGZpbmFsIFN0cmluZyByZXN1bHRzQWN0aW9uID0gaW50ZW50LmdldEFjdGlvbigpOwpAQCAtNTUyMSw3ICs1NTQ1LDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRSZWNlaXZlcnMoSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLAogICAgICAgICAgICAgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICBmbGFncyA9IGF1Z21lbnRGbGFnc0ZvclVzZXIoZmxhZ3MsIHVzZXJJZCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JSZXNvbHZlKGZsYWdzLCB1c2VySWQsIGludGVudCk7CiAgICAgICAgIENvbXBvbmVudE5hbWUgY29tcCA9IGludGVudC5nZXRDb21wb25lbnQoKTsKICAgICAgICAgaWYgKGNvbXAgPT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGludGVudC5nZXRTZWxlY3RvcigpICE9IG51bGwpIHsKQEAgLTU1NTgsNyArNTU4Miw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFJlc29sdmVJbmZvIHJlc29sdmVTZXJ2aWNlKEludGVudCBpbnRlbnQsIFN0cmluZyByZXNvbHZlZFR5cGUsIGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnkgPSBxdWVyeUludGVudFNlcnZpY2VzKGludGVudCwgcmVzb2x2ZWRUeXBlLCBmbGFncywgdXNlcklkKTsKICAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHsKICAgICAgICAgICAgIGlmIChxdWVyeS5zaXplKCkgPj0gMSkgewpAQCAtNTU3NCw3ICs1NTk4LDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRTZXJ2aWNlcyhJbnRlbnQgaW50ZW50LCBTdHJpbmcgcmVzb2x2ZWRUeXBlLCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaW50ZW50LmdldFNlbGVjdG9yKCkgIT0gbnVsbCkgewpAQCAtNTYxMiw3ICs1NjM2LDcgQEAKICAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlJbnRlbnRDb250ZW50UHJvdmlkZXJzKAogICAgICAgICAgICAgSW50ZW50IGludGVudCwgU3RyaW5nIHJlc29sdmVkVHlwZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvclJlc29sdmUoZmxhZ3MsIHVzZXJJZCwgaW50ZW50KTsKICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wID0gaW50ZW50LmdldENvbXBvbmVudCgpOwogICAgICAgICBpZiAoY29tcCA9PSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoaW50ZW50LmdldFNlbGVjdG9yKCkgIT0gbnVsbCkgewpAQCAtNTY0OCw4ICs1NjcyLDkgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBQYXJjZWxlZExpc3RTbGljZTxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gbGlzdFVuaW5zdGFsbGVkID0gKGZsYWdzICYgUGFja2FnZU1hbmFnZXIuR0VUX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwotCisgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gUGFyY2VsZWRMaXN0U2xpY2UuZW1wdHlMaXN0KCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIG51bGwpOworICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIHRydWUsIGZhbHNlLCAiZ2V0IGluc3RhbGxlZCBwYWNrYWdlcyIpOwogCiAgICAgICAgIC8vIHdyaXRlcgpAQCAtNTcyOCw5ICs1NzUzLDkgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUGFyY2VsZWRMaXN0U2xpY2U8UGFja2FnZUluZm8+IGdldFBhY2thZ2VzSG9sZGluZ1Blcm1pc3Npb25zKAogICAgICAgICAgICAgU3RyaW5nW10gcGVybWlzc2lvbnMsIGludCBmbGFncywgaW50IHVzZXJJZCkgewotICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgIGZsYWdzID0gYXVnbWVudEZsYWdzRm9yVXNlcihmbGFncywgdXNlcklkKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBsaXN0VW5pbnN0YWxsZWQgPSAoZmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5HRVRfVU5JTlNUQUxMRURfUEFDS0FHRVMpICE9IDA7CisgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gUGFyY2VsZWRMaXN0U2xpY2UuZW1wdHlMaXN0KCk7CisgICAgICAgIGZsYWdzID0gdXBkYXRlRmxhZ3NGb3JQYWNrYWdlKGZsYWdzLCB1c2VySWQsIHBlcm1pc3Npb25zKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBsaXN0VW5pbnN0YWxsZWQgPSAoZmxhZ3MgJiBNQVRDSF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMDsKIAogICAgICAgICAvLyB3cml0ZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKQEAgLTU3NTYsOSArNTc4MSw5IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUGFyY2VsZWRMaXN0U2xpY2U8QXBwbGljYXRpb25JbmZvPiBnZXRJbnN0YWxsZWRBcHBsaWNhdGlvbnMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOwotICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUykgIT0gMDsKKyAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBQYXJjZWxlZExpc3RTbGljZS5lbXB0eUxpc3QoKTsKKyAgICAgICAgZmxhZ3MgPSB1cGRhdGVGbGFnc0ZvckFwcGxpY2F0aW9uKGZsYWdzLCB1c2VySWQsIG51bGwpOworICAgICAgICBmaW5hbCBib29sZWFuIGxpc3RVbmluc3RhbGxlZCA9IChmbGFncyAmIE1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTKSAhPSAwOwogCiAgICAgICAgIC8vIHdyaXRlcgogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewpAQCAtNTc5Niw2ICs1ODIxLDEwIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgUGFyY2VsZWRMaXN0U2xpY2U8RXBoZW1lcmFsQXBwbGljYXRpb25JbmZvPiBnZXRFcGhlbWVyYWxBcHBsaWNhdGlvbnMoaW50IHVzZXJJZCkgeworICAgICAgICBpZiAoRElTQUJMRV9FUEhFTUVSQUxfQVBQUykgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKwogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5BQ0NFU1NfRVBIRU1FUkFMX0FQUFMsCiAgICAgICAgICAgICAgICAgImdldEVwaGVtZXJhbEFwcGxpY2F0aW9ucyIpOwogICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsIHRydWUsIGZhbHNlLApAQCAtNTgxNCw2ICs1ODQzLDEwIEBACiAgICAgcHVibGljIGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCB0cnVlLCBmYWxzZSwKICAgICAgICAgICAgICAgICAiaXNFcGhlbWVyYWwiKTsKKyAgICAgICAgaWYgKERJU0FCTEVfRVBIRU1FUkFMX0FQUFMpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghaXNDYWxsZXJTYW1lQXBwKHBhY2thZ2VOYW1lKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC01ODI4LDYgKzU4NjEsMTAgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBieXRlW10gZ2V0RXBoZW1lcmFsQXBwbGljYXRpb25Db29raWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGlmIChESVNBQkxFX0VQSEVNRVJBTF9BUFBTKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgdHJ1ZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgImdldENvb2tpZSIpOwogICAgICAgICBpZiAoIWlzQ2FsbGVyU2FtZUFwcChwYWNrYWdlTmFtZSkpIHsKQEAgLTU4NDEsNiArNTg3OCwxMCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gc2V0RXBoZW1lcmFsQXBwbGljYXRpb25Db29raWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBieXRlW10gY29va2llLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGlmIChESVNBQkxFX0VQSEVNRVJBTF9BUFBTKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgdHJ1ZSwgZmFsc2UsCiAgICAgICAgICAgICAgICAgInNldENvb2tpZSIpOwogICAgICAgICBpZiAoIWlzQ2FsbGVyU2FtZUFwcChwYWNrYWdlTmFtZSkpIHsKQEAgLTU4NTQsNiArNTg5NSwxMCBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIEJpdG1hcCBnZXRFcGhlbWVyYWxBcHBsaWNhdGlvbkljb24oU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgICAgIGlmIChESVNBQkxFX0VQSEVNRVJBTF9BUFBTKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihNYW5pZmVzdC5wZXJtaXNzaW9uLkFDQ0VTU19FUEhFTUVSQUxfQVBQUywKICAgICAgICAgICAgICAgICAiZ2V0RXBoZW1lcmFsQXBwbGljYXRpb25JY29uIik7CiAgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKEJpbmRlci5nZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwgdHJ1ZSwgZmFsc2UsCkBAIC01OTAwLDcgKzU5NDUsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBQcm92aWRlckluZm8gcmVzb2x2ZUNvbnRlbnRQcm92aWRlcihTdHJpbmcgbmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIG5hbWUpOwogICAgICAgICAvLyByZWFkZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUHJvdmlkZXIgcHJvdmlkZXIgPSBtUHJvdmlkZXJzQnlBdXRob3JpdHkuZ2V0KG5hbWUpOwpAQCAtNTkwOCw5ICs1OTUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgPyBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChwcm92aWRlci5vd25lci5wYWNrYWdlTmFtZSkKICAgICAgICAgICAgICAgICAgICAgOiBudWxsOwogICAgICAgICAgICAgcmV0dXJuIHBzICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIocHJvdmlkZXIuaW5mbywgZmxhZ3MsIHVzZXJJZCkKLSAgICAgICAgICAgICAgICAgICAgJiYgKCFtU2FmZU1vZGUgfHwgKHByb3ZpZGVyLmluZm8uYXBwbGljYXRpb25JbmZvLmZsYWdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJkFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgJiYgbVNldHRpbmdzLmlzRW5hYmxlZEFuZE1hdGNoTFByKHByb3ZpZGVyLmluZm8sIGZsYWdzLCB1c2VySWQpCiAgICAgICAgICAgICAgICAgICAgID8gUGFja2FnZVBhcnNlci5nZW5lcmF0ZVByb3ZpZGVySW5mbyhwcm92aWRlciwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMucmVhZFVzZXJTdGF0ZSh1c2VySWQpLCB1c2VySWQpCiAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKQEAgLTU5NTIsNyArNTk5NSw3IEBACiAgICAgICAgIGZpbmFsIGludCB1c2VySWQgPSBwcm9jZXNzTmFtZSAhPSBudWxsID8gVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKQogICAgICAgICAgICAgICAgIDogVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCk7CiAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSByZXR1cm4gbnVsbDsKLSAgICAgICAgZmxhZ3MgPSBhdWdtZW50RmxhZ3NGb3JVc2VyKGZsYWdzLCB1c2VySWQpOworICAgICAgICBmbGFncyA9IHVwZGF0ZUZsYWdzRm9yQ29tcG9uZW50KGZsYWdzLCB1c2VySWQsIHByb2Nlc3NOYW1lKTsKIAogICAgICAgICBBcnJheUxpc3Q8UHJvdmlkZXJJbmZvPiBmaW5hbExpc3QgPSBudWxsOwogICAgICAgICAvLyByZWFkZXIKQEAgLTU5NjUsOSArNjAwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocHJvY2Vzc05hbWUgPT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocC5pbmZvLnByb2Nlc3NOYW1lLmVxdWFscyhwcm9jZXNzTmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBVc2VySGFuZGxlLmlzU2FtZUFwcChwLmluZm8uYXBwbGljYXRpb25JbmZvLnVpZCwgdWlkKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiBtU2V0dGluZ3MuaXNFbmFibGVkQW5kVmlzaWJsZUxQcihwLmluZm8sIGZsYWdzLCB1c2VySWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoIW1TYWZlTW9kZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocC5pbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NZU1RFTSkgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIG1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihwLmluZm8sIGZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbExpc3QgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxMaXN0ID0gbmV3IEFycmF5TGlzdDxQcm92aWRlckluZm8+KDMpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC01OTg5LDggKzYwMzAsNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBJbnN0cnVtZW50YXRpb25JbmZvIGdldEluc3RydW1lbnRhdGlvbkluZm8oQ29tcG9uZW50TmFtZSBuYW1lLAotICAgICAgICAgICAgaW50IGZsYWdzKSB7CisgICAgcHVibGljIEluc3RydW1lbnRhdGlvbkluZm8gZ2V0SW5zdHJ1bWVudGF0aW9uSW5mbyhDb21wb25lbnROYW1lIG5hbWUsIGludCBmbGFncykgewogICAgICAgICAvLyByZWFkZXIKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuSW5zdHJ1bWVudGF0aW9uIGkgPSBtSW5zdHJ1bWVudGF0aW9uLmdldChuYW1lKTsKQEAgLTYwNTMsNyArNjA5Myw5IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWwgaW50IHNoYXJlZEdpZCA9IFVzZXJIYW5kbGUuZ2V0U2hhcmVkQXBwR2lkKHBrZy5hcHBsaWNhdGlvbkluZm8udWlkKTsKICAgICAgICAgLy8gVE9ETzogZ2VuZXJhdGUgaWRtYXAgZm9yIHNwbGl0IEFQS3MKLSAgICAgICAgaWYgKG1JbnN0YWxsZXIuaWRtYXAocGtnLmJhc2VDb2RlUGF0aCwgb3BrZy5iYXNlQ29kZVBhdGgsIHNoYXJlZEdpZCkgIT0gMCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgbUluc3RhbGxlci5pZG1hcChwa2cuYmFzZUNvZGVQYXRoLCBvcGtnLmJhc2VDb2RlUGF0aCwgc2hhcmVkR2lkKTsKKyAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIFNsb2cuZShUQUcsICJGYWlsZWQgdG8gZ2VuZXJhdGUgaWRtYXAgZm9yICIgKyBwa2cuYmFzZUNvZGVQYXRoICsgIiBhbmQgIgogICAgICAgICAgICAgICAgICAgICArIG9wa2cuYmFzZUNvZGVQYXRoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYxMTMsMTEgKzYxNTUsNyBAQAogICAgICAgICAgICAgICAgIGlmICgocGFyc2VGbGFncyAmIFBhY2thZ2VQYXJzZXIuUEFSU0VfSVNfU1lTVEVNKSA9PSAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBlLmVycm9yID09IFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfRkFJTEVEX0lOVkFMSURfQVBLKSB7CiAgICAgICAgICAgICAgICAgICAgIGxvZ0NyaXRpY2FsSW5mbyhMb2cuV0FSTiwgIkRlbGV0aW5nIGludmFsaWQgcGFja2FnZSBhdCAiICsgZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5kZWxldGUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZW1vdmVDb2RlUGF0aExJKGZpbGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjE4NSw3ICs2MjIzLDYgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgcHAuY29sbGVjdENlcnRpZmljYXRlcyhwa2csIHBhcnNlRmxhZ3MpOwotICAgICAgICAgICAgcHAuY29sbGVjdE1hbmlmZXN0RGlnZXN0KHBrZyk7CiAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VQYXJzZXJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24uZnJvbShlKTsKICAgICAgICAgfQpAQCAtNjI3Myw3ICs2MzEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgaWdub3JlZDogdXBkYXRlZCB2ZXJzaW9uICIgKyBwcy52ZXJzaW9uQ29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiBiZXR0ZXIgdGhhbiB0aGlzICIgKyBwa2cubVZlcnNpb25Db2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkUGtnLmNvZGVQYXRoLmVxdWFscyhzY2FuRmlsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiQ29kZSBwYXRoIGZvciBoaWRkZW4gc3lzdGVtIHBrZyA6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiQ29kZSBwYXRoIGZvciBoaWRkZW4gc3lzdGVtIHBrZyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcHMubmFtZSArICIgY2hhbmdpbmcgZnJvbSAiICsgdXBkYXRlZFBrZy5jb2RlUGF0aFN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdG8gIiArIHNjYW5GaWxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQa2cuY29kZVBhdGggPSBzY2FuRmlsZTsKQEAgLTYzOTgsNyArNjQzNSw3IEBACiAgICAgICAgICAgICAgICAgYmFzZVJlc291cmNlUGF0aCA9IHBzLnJlc291cmNlUGF0aFN0cmluZzsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBoYXBwZW4gYXQgYWxsLiBKdXN0IGxvZyBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiUmVzb3VyY2UgcGF0aCBub3Qgc2V0IGZvciBwa2cgOiAiICsgcGtnLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiUmVzb3VyY2UgcGF0aCBub3Qgc2V0IGZvciBwYWNrYWdlICIgKyBwa2cucGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzb3VyY2VQYXRoID0gcGtnLmNvZGVQYXRoOwpAQCAtNjY0Nyw3ICs2Njg0LDcgQEAKICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIHBrZyA9IG1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgaWYgKHBrZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWlzc2luZyBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC02Njg0LDUwICs2NzIxLDY1IEBACiAKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlRGF0YURpcnNMSShTdHJpbmcgdm9sdW1lVXVpZCwgU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkLCBTdHJpbmcgc2VpbmZvKQogICAgICAgICAgICAgdGhyb3dzIFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uIHsKLSAgICAgICAgaW50IHJlcyA9IG1JbnN0YWxsZXIuaW5zdGFsbCh2b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdWlkLCB1aWQsIHNlaW5mbyk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgeworICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICBmaW5hbCBpbnQgYXBwSWQgPSBVc2VySGFuZGxlLmdldEFwcElkKHVpZCk7CisgICAgICAgIGZpbmFsIGludCBmbGFncyA9IEluc3RhbGxlci5GTEFHX0NFX1NUT1JBR0UgfCBJbnN0YWxsZXIuRkxBR19ERV9TVE9SQUdFOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBpbnRbXSB1c2VycyA9IHNVc2VyTWFuYWdlci5nZXRVc2VySWRzKCk7CisgICAgICAgICAgICBmb3IgKGludCB1c2VyIDogdXNlcnMpIHsKKyAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmNyZWF0ZUFwcERhdGEodm9sdW1lVXVpZCwgcGFja2FnZU5hbWUsIHVzZXIsIGZsYWdzLCBhcHBJZCwgc2VpbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbihJTlNUQUxMX0ZBSUxFRF9JTlNVRkZJQ0lFTlRfU1RPUkFHRSwKLSAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbnN0YWxsICIgKyBwYWNrYWdlTmFtZSArICI6ICIgKyByZXMpOworICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHByZXBhcmUgZGF0YSBkaXJlY3RvcnkiLCBlKTsKICAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiByZW1vdmVEYXRhRGlyc0xJKFN0cmluZyB2b2x1bWVVdWlkLCBTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgICAgLy8gVE9ETzogdHJpYWdlIGZsYWdzIGFzIHBhcnQgb2YgMjY0NjY4MjcKKyAgICAgICAgZmluYWwgaW50IGZsYWdzID0gSW5zdGFsbGVyLkZMQUdfQ0VfU1RPUkFHRSB8IEluc3RhbGxlci5GTEFHX0RFX1NUT1JBR0U7CisKKyAgICAgICAgYm9vbGVhbiByZXMgPSB0cnVlOworICAgICAgICBmaW5hbCBpbnRbXSB1c2VycyA9IHNVc2VyTWFuYWdlci5nZXRVc2VySWRzKCk7CisgICAgICAgIGZvciAoaW50IHVzZXIgOiB1c2VycykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmRlc3Ryb3lBcHBEYXRhKHZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLCB1c2VyLCBmbGFncyk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gZGVsZXRlIGRhdGEgZGlyZWN0b3J5IiwgZSk7CisgICAgICAgICAgICAgICAgcmVzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUNvZGVQYXRoTEkoRmlsZSBjb2RlUGF0aCkgeworICAgICAgICBpZiAoY29kZVBhdGguaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLnJtUGFja2FnZURpcihjb2RlUGF0aC5nZXRBYnNvbHV0ZVBhdGgoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gcmVtb3ZlIGNvZGUgcGF0aCIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29kZVBhdGguZGVsZXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZGVsZXRlQ29kZUNhY2hlRGlyc0xJKFN0cmluZyB2b2x1bWVVdWlkLCBTdHJpbmcgcGFja2FnZU5hbWUpIHsKKyAgICAgICAgLy8gVE9ETzogdHJpYWdlIGZsYWdzIGFzIHBhcnQgb2YgMjY0NjY4MjcKKyAgICAgICAgZmluYWwgaW50IGZsYWdzID0gSW5zdGFsbGVyLkZMQUdfQ0VfU1RPUkFHRSB8IEluc3RhbGxlci5GTEFHX0RFX1NUT1JBR0U7CiAKICAgICAgICAgZmluYWwgaW50W10gdXNlcnMgPSBzVXNlck1hbmFnZXIuZ2V0VXNlcklkcygpOwogICAgICAgICBmb3IgKGludCB1c2VyIDogdXNlcnMpIHsKLSAgICAgICAgICAgIGlmICh1c2VyICE9IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSBtSW5zdGFsbGVyLmNyZWF0ZVVzZXJEYXRhKHZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRVaWQodXNlciwgdWlkKSwgdXNlciwgc2VpbmZvKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uKElOU1RBTExfRkFJTEVEX0lOU1VGRklDSUVOVF9TVE9SQUdFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlVXNlckRhdGEgIiArIHBhY2thZ2VOYW1lICsgIjogIiArIHJlcyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmNsZWFyQXBwRGF0YSh2b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHwgSW5zdGFsbGVyLkZMQUdfQ0xFQVJfQ09ERV9DQUNIRV9PTkxZKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byBkZWxldGUgY29kZSBjYWNoZSBkaXJlY3RvcnkiLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgaW50IHJlbW92ZURhdGFEaXJzTEkoU3RyaW5nIHZvbHVtZVV1aWQsIFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICBpbnRbXSB1c2VycyA9IHNVc2VyTWFuYWdlci5nZXRVc2VySWRzKCk7Ci0gICAgICAgIGludCByZXMgPSAwOwotICAgICAgICBmb3IgKGludCB1c2VyIDogdXNlcnMpIHsKLSAgICAgICAgICAgIGludCByZXNJbm5lciA9IG1JbnN0YWxsZXIucmVtb3ZlKHZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLCB1c2VyKTsKLSAgICAgICAgICAgIGlmIChyZXNJbm5lciA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSByZXNJbm5lcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgZGVsZXRlQ29kZUNhY2hlRGlyc0xJKFN0cmluZyB2b2x1bWVVdWlkLCBTdHJpbmcgcGFja2FnZU5hbWUpIHsKLSAgICAgICAgaW50W10gdXNlcnMgPSBzVXNlck1hbmFnZXIuZ2V0VXNlcklkcygpOwotICAgICAgICBpbnQgcmVzID0gMDsKLSAgICAgICAgZm9yIChpbnQgdXNlciA6IHVzZXJzKSB7Ci0gICAgICAgICAgICBpbnQgcmVzSW5uZXIgPSBtSW5zdGFsbGVyLmRlbGV0ZUNvZGVDYWNoZUZpbGVzKHZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLCB1c2VyKTsKLSAgICAgICAgICAgIGlmIChyZXNJbm5lciA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSByZXNJbm5lcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLQogICAgIHByaXZhdGUgdm9pZCBhZGRTaGFyZWRMaWJyYXJ5TFB3KEFycmF5U2V0PFN0cmluZz4gdXNlc0xpYnJhcnlGaWxlcywgU2hhcmVkTGlicmFyeUVudHJ5IGZpbGUsCiAgICAgICAgICAgICBQYWNrYWdlUGFyc2VyLlBhY2thZ2UgY2hhbmdpbmdMaWIpIHsKICAgICAgICAgaWYgKGZpbGUucGF0aCAhPSBudWxsKSB7CkBAIC03MTU3LDcgKzcyMDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5tU2lnbmF0dXJlcykgIT0gUGFja2FnZU1hbmFnZXIuU0lHTkFUVVJFX01BVENIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhY2thZ2VNYW5hZ2VyRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFMTF9QQVJTRV9GQUlMRURfSU5DT05TSVNURU5UX0NFUlRJRklDQVRFUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBtaXNtYXRjaCBmb3Igc2hhcmVkIHVzZXIgOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgbWlzbWF0Y2ggZm9yIHNoYXJlZCB1c2VyOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGtnU2V0dGluZy5zaGFyZWRVc2VyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNzIyNiw2ICs3Mjc4LDggQEAKICAgICAgICAgICAgIGZpbmFsIEZpbGUgZGF0YVBhdGggPSBFbnZpcm9ubWVudC5nZXREYXRhVXNlckNyZWRlbnRpYWxFbmNyeXB0ZWRQYWNrYWdlRGlyZWN0b3J5KAogICAgICAgICAgICAgICAgICAgICBwa2cudm9sdW1lVXVpZCwgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSwgcGtnLnBhY2thZ2VOYW1lKTsKIAorICAgICAgICAgICAgLy8gVE9PRDogc3dpdGNoIHRvIGVuc3VyZSB2YXJpb3VzIGRpcmVjdG9yaWVzCisKICAgICAgICAgICAgIGJvb2xlYW4gdWlkRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChkYXRhUGF0aC5leGlzdHMoKSkgewogICAgICAgICAgICAgICAgIGludCBjdXJyZW50VWlkID0gMDsKQEAgLTcyMzksMjcgKzcyOTMsMTIgQEAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG1pc21hdGNoZWQgb3duZXJzIGZvciB0aGUgZGF0YSBwYXRoLCB3ZSBoYXZlIGEgcHJvYmxlbS4KICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVpZCAhPSBwa2cuYXBwbGljYXRpb25JbmZvLnVpZCkgewogICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlY292ZXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVpZCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZGlyZWN0b3J5IHNvbWVob3cgYmVjYW1lIG93bmVkIGJ5IHJvb3QuICBXb3cuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIHN5c3RlbSB3YXMgc3RvcHBlZCB3aGlsZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5zdGFsbGQgd2FzIGluIHRoZSBtaWRkbGUgb2YgbWVzc2luZyB3aXRoIGl0cyBsaWJzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXJlY3RvcnkuICBBc2sgaW5zdGFsbGQgdG8gZml4IHRoYXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gbUluc3RhbGxlci5maXhVaWQocGtnLnZvbHVtZVV1aWQsIHBrZ05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZy5hcHBsaWNhdGlvbkluZm8udWlkLCBwa2cuYXBwbGljYXRpb25JbmZvLnVpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtc2cgPSAiUGFja2FnZSAiICsgcGtnLnBhY2thZ2VOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgdW5leHBlY3RlZGx5IGNoYW5nZWQgdG8gdWlkIDA7IHJlY292ZXJlZCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgcGtnLmFwcGxpY2F0aW9uSW5mby51aWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0U2V0dGluZ3NQcm9ibGVtKExvZy5XQVJOLCBtc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmVjb3ZlcmVkICYmICgocGFyc2VGbGFncyZQYWNrYWdlUGFyc2VyLlBBUlNFX0lTX1NZU1RFTSkgIT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChzY2FuRmxhZ3MmU0NBTl9CT09USU5HKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKChwYXJzZUZsYWdzICYgUGFja2FnZVBhcnNlci5QQVJTRV9JU19TWVNURU0pICE9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoc2NhbkZsYWdzICYgU0NBTl9CT09USU5HKSAhPSAwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN5c3RlbSBhcHAsIHdlIGNhbiBhdCBsZWFzdCBkZWxldGUgaXRzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGRhdGEgc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwgc3RpbGwgd29yay4KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQgPSByZW1vdmVEYXRhRGlyc0xJKHBrZy52b2x1bWVVdWlkLCBwa2dOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiByZXMgPSByZW1vdmVEYXRhRGlyc0xJKHBrZy52b2x1bWVVdWlkLCBwa2dOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBLaWxsIHRoZSBwcm9jZXNzZXMgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbGQgZGF0YSBnb25lIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAocGFyc2VGbGFncyZQYWNrYWdlUGFyc2VyLlBBUlNFX0lTX1NZU1RFTSkgIT0gMApAQCAtNzI3NCwxMSArNzMxMywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvdmVyZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSGFzU3lzdGVtVWlkRXJyb3JzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVjb3ZlcmVkKSB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhbGxvdyB0aGlzIGluc3RhbGwgdG8gcHJvY2VlZCwgd2Ugd2lsbCBiZSBicm9rZW4uCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBYm9ydCwgYWJvcnQhCiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24oSU5TVEFMTF9GQUlMRURfVUlEX0NIQU5HRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY2FuUGFja2FnZUxJIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBkYXRhIHRvIGJlIG93bmVkIGJ5IFVJRCAiICsgcGtnLmFwcGxpY2F0aW9uSW5mby51aWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgYnV0IGZvdW5kICIgKyBjdXJyZW50VWlkKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY292ZXJlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcGtnLmFwcGxpY2F0aW9uSW5mby5kYXRhRGlyID0gIi9taXNtYXRjaGVkX3VpZC9zZXR0aW5nc18iCkBAIC03MzA4LDggKzczNDgsMTYgQEAKIAogICAgICAgICAgICAgICAgIGlmIChtU2hvdWxkUmVzdG9yZWNvbkRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIlNFTGludXggcmVsYWJlbGluZyBvZiAiICsgcGtnLnBhY2thZ2VOYW1lICsgIiBpc3N1ZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucmVzdG9yZWNvbkRhdGEocGtnLnZvbHVtZVV1aWQsIHBrZy5wYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2cuYXBwbGljYXRpb25JbmZvLnNlaW5mbywgcGtnLmFwcGxpY2F0aW9uSW5mby51aWQpOworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBleHRlbmQgdGhpcyB0byByZXN0b3JlY29uIG92ZXIgYWxsIHVzZXJzCisgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBhcHBJZCA9IFVzZXJIYW5kbGUuZ2V0QXBwSWQocGtnLmFwcGxpY2F0aW9uSW5mby51aWQpOworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBJbnN0YWxsZXIuRkxBR19DRV9TVE9SQUdFIHwgSW5zdGFsbGVyLkZMQUdfREVfU1RPUkFHRTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucmVzdG9yZWNvbkFwcERhdGEocGtnLnZvbHVtZVV1aWQsIHBrZy5wYWNrYWdlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSwgZmxhZ3MsIGFwcElkLCBwa2cuYXBwbGljYXRpb25JbmZvLnNlaW5mbyk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbGVkIHRvIHJlc3RvcmVjb24gIiArIHBrZy5wYWNrYWdlTmFtZSwgZSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChERUJVR19QQUNLQUdFX1NDQU5OSU5HKSB7CkBAIC03MzY1LDkgKzc0MTMsMTUgQEAKICAgICAgICAgICAgIGlmICghVGV4dFV0aWxzLmlzRW1wdHkocGtnLnZvbHVtZVV1aWQpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgdXNlcklkIDogdXNlcklkcykgewogICAgICAgICAgICAgICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIuY3JlYXRlVXNlckRhdGEocGtnLnZvbHVtZVV1aWQsIHBrZy5wYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5nZXRVaWQodXNlcklkLCBwa2cuYXBwbGljYXRpb25JbmZvLnVpZCksIHVzZXJJZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnLmFwcGxpY2F0aW9uSW5mby5zZWluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogdHJpYWdlIGZsYWdzIGFzIHBhcnQgb2YgMjY0NjY4MjcKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCBmbGFncyA9IEluc3RhbGxlci5GTEFHX0NFX1NUT1JBR0UgfCBJbnN0YWxsZXIuRkxBR19ERV9TVE9SQUdFOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IGFwcElkID0gVXNlckhhbmRsZS5nZXRBcHBJZChwa2cuYXBwbGljYXRpb25JbmZvLnVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIuY3JlYXRlQXBwRGF0YShwa2cudm9sdW1lVXVpZCwgcGtnLnBhY2thZ2VOYW1lLCB1c2VySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgYXBwSWQsIHBrZy5hcHBsaWNhdGlvbkluZm8uc2VpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24uZnJvbShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTczODEsMTAgKzc0MzUsMTEgQEAKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmF0aXZlTGliUGF0aCA9IHBrZy5hcHBsaWNhdGlvbkluZm8ubmF0aXZlTGlicmFyeURpcjsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgdXNlcklkIDogdXNlcklkcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1JbnN0YWxsZXIubGlua05hdGl2ZUxpYnJhcnlEaXJlY3RvcnkocGtnLnZvbHVtZVV1aWQsIHBrZy5wYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlTGliUGF0aCwgdXNlcklkKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFja2FnZU1hbmFnZXJFeGNlcHRpb24oSU5TVEFMTF9GQUlMRURfSU5URVJOQUxfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIGxpbmtpbmcgbmF0aXZlIGxpYnJhcnkgZGlyICh1c2VyPSIgKyB1c2VySWQgKyAiKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmxpbmtOYXRpdmVMaWJyYXJ5RGlyZWN0b3J5KHBrZy52b2x1bWVVdWlkLCBwa2cucGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVMaWJQYXRoLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBQYWNrYWdlTWFuYWdlckV4Y2VwdGlvbi5mcm9tKGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKQEAgLTc0MDksNyArNzQ2NCw3IEBACiAgICAgICAgIGlmICgoc2NhbkZsYWdzICYgU0NBTl9OT19ERVgpID09IDAgJiYgKHNjYW5GbGFncyAmIFNDQU5fTkVXX0lOU1RBTEwpICE9IDApIHsKICAgICAgICAgICAgIGlmIChjcHVBYmlPdmVycmlkZSA9PSBudWxsICYmIHBrZ1NldHRpbmcuY3B1QWJpT3ZlcnJpZGVTdHJpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJJZ25vcmluZyBwZXJzaXN0ZWQgQUJJIG92ZXJyaWRlICIgKyBjcHVBYmlPdmVycmlkZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGZvciBwYWNrYWdlOiAiICsgcGtnLnBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHBhY2thZ2UgIiArIHBrZy5wYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtODExNiw5ICs4MTcxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIHBzLnByaW1hcnlDcHVBYmlTdHJpbmcgPSBhZGp1c3RlZEFiaTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBzLnBrZyAhPSBudWxsICYmIHBzLnBrZy5hcHBsaWNhdGlvbkluZm8gIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHMucGtnLmFwcGxpY2F0aW9uSW5mby5wcmltYXJ5Q3B1QWJpID0gYWRqdXN0ZWRBYmk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmkoVEFHLCAiQWRqdXN0aW5nIEFCSSBmb3IgOiAiICsgcHMubmFtZSArICIgdG8gIiArIGFkanVzdGVkQWJpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucm1kZXgocHMuY29kZVBhdGhTdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERleENvZGVJbnN0cnVjdGlvblNldChnZXRQcmVmZXJyZWRJbnN0cnVjdGlvblNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmkoVEFHLCAiQWRqdXN0aW5nIEFCSSBmb3IgIiArIHBzLm5hbWUgKyAiIHRvICIgKyBhZGp1c3RlZEFiaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucm1kZXgocHMuY29kZVBhdGhTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREZXhDb2RlSW5zdHJ1Y3Rpb25TZXQoZ2V0UHJlZmVycmVkSW5zdHJ1Y3Rpb25TZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGlnbm9yZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTgzNTQsNyArODQxMiw3IEBACiAgICAgICAgICAgICAvLyA2NCBiaXQgYXBwcyB3aWxsIHNlZSBhIDY0IGJpdCBwcmltYXJ5IEFCSSwKIAogICAgICAgICAgICAgaWYgKChwa2cuYXBwbGljYXRpb25JbmZvLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfTVVMVElBUkNIKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy5lKFRBRywgIlBhY2thZ2U6ICIgKyBwa2cgKyAiIGhhcyBtdWx0aXBsZSBidW5kbGVkIGxpYnMsIGJ1dCBpcyBub3QgbXVsdGlhcmNoLiIpOworICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJQYWNrYWdlICIgKyBwa2cgKyAiIGhhcyBtdWx0aXBsZSBidW5kbGVkIGxpYnMsIGJ1dCBpcyBub3QgbXVsdGlhcmNoLiIpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoVk1SdW50aW1lLmlzNjRCaXRJbnN0cnVjdGlvblNldChnZXRQcmVmZXJyZWRJbnN0cnVjdGlvblNldCgpKSkgewpAQCAtOTIzMSwxNCArOTI4OSwxMCBAQAogICAgICAgICBwcm90ZWN0ZWQgUmVzb2x2ZUluZm8gbmV3UmVzdWx0KFBhY2thZ2VQYXJzZXIuQWN0aXZpdHlJbnRlbnRJbmZvIGluZm8sCiAgICAgICAgICAgICAgICAgaW50IG1hdGNoLCBpbnQgdXNlcklkKSB7CiAgICAgICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKGluZm8uYWN0aXZpdHkuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CisgICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRNYXRjaExQcihpbmZvLmFjdGl2aXR5LmluZm8sIG1GbGFncywgdXNlcklkKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5BY3Rpdml0eSBhY3Rpdml0eSA9IGluZm8uYWN0aXZpdHk7Ci0gICAgICAgICAgICBpZiAobVNhZmVNb2RlICYmIChhY3Rpdml0eS5pbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncwotICAgICAgICAgICAgICAgICAgICAmQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBQYWNrYWdlU2V0dGluZyBwcyA9IChQYWNrYWdlU2V0dGluZykgYWN0aXZpdHkub3duZXIubUV4dHJhczsKICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC05NDU1LDE0ICs5NTA5LDEwIEBACiAgICAgICAgICAgICAgICAgaW50IG1hdGNoLCBpbnQgdXNlcklkKSB7CiAgICAgICAgICAgICBpZiAoIXNVc2VyTWFuYWdlci5leGlzdHModXNlcklkKSkgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlNlcnZpY2VJbnRlbnRJbmZvIGluZm8gPSAoUGFja2FnZVBhcnNlci5TZXJ2aWNlSW50ZW50SW5mbylmaWx0ZXI7Ci0gICAgICAgICAgICBpZiAoIW1TZXR0aW5ncy5pc0VuYWJsZWRBbmRWaXNpYmxlTFByKGluZm8uc2VydmljZS5pbmZvLCBtRmxhZ3MsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgIGlmICghbVNldHRpbmdzLmlzRW5hYmxlZEFuZE1hdGNoTFByKGluZm8uc2VydmljZS5pbmZvLCBtRmxhZ3MsIHVzZXJJZCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuU2VydmljZSBzZXJ2aWNlID0gaW5mby5zZXJ2aWNlOwotICAgICAgICAgICAgaWYgKG1TYWZlTW9kZSAmJiAoc2VydmljZS5pbmZvLmFwcGxpY2F0aW9uSW5mby5mbGFncwotICAgICAgICAgICAgICAgICAgICAmQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBQYWNrYWdlU2V0dGluZyBwcyA9IChQYWNrYWdlU2V0dGluZykgc2VydmljZS5vd25lci5tRXh0cmFzOwogICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTk2NzgsMTQgKzk3MjgsMTAgQEAKICAgICAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5Qcm92aWRlckludGVudEluZm8gaW5mbyA9IGZpbHRlcjsKLSAgICAgICAgICAgIGlmICghbVNldHRpbmdzLmlzRW5hYmxlZEFuZFZpc2libGVMUHIoaW5mby5wcm92aWRlci5pbmZvLCBtRmxhZ3MsIHVzZXJJZCkpIHsKKyAgICAgICAgICAgIGlmICghbVNldHRpbmdzLmlzRW5hYmxlZEFuZE1hdGNoTFByKGluZm8ucHJvdmlkZXIuaW5mbywgbUZsYWdzLCB1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmaW5hbCBQYWNrYWdlUGFyc2VyLlByb3ZpZGVyIHByb3ZpZGVyID0gaW5mby5wcm92aWRlcjsKLSAgICAgICAgICAgIGlmIChtU2FmZU1vZGUgJiYgKHByb3ZpZGVyLmluZm8uYXBwbGljYXRpb25JbmZvLmZsYWdzCi0gICAgICAgICAgICAgICAgICAgICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBQYWNrYWdlU2V0dGluZyBwcyA9IChQYWNrYWdlU2V0dGluZykgcHJvdmlkZXIub3duZXIubUV4dHJhczsKICAgICAgICAgICAgIGlmIChwcyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC05NzUxLDIzICs5Nzk3LDI0IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRXBoZW1lcmFsSW50ZW50UmVzb2x2ZXIKLSAgICAgICAgICAgIGV4dGVuZHMgSW50ZW50UmVzb2x2ZXI8SW50ZW50RmlsdGVyLCBSZXNvbHZlSW5mbz4geworICAgICAgICAgICAgZXh0ZW5kcyBJbnRlbnRSZXNvbHZlcjxFcGhlbWVyYWxSZXNvbHZlSW50ZW50SW5mbywgRXBoZW1lcmFsUmVzb2x2ZUluZm8+IHsKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBJbnRlbnRGaWx0ZXJbXSBuZXdBcnJheShpbnQgc2l6ZSkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRlbnRGaWx0ZXJbc2l6ZV07CisgICAgICAgIHByb3RlY3RlZCBFcGhlbWVyYWxSZXNvbHZlSW50ZW50SW5mb1tdIG5ld0FycmF5KGludCBzaXplKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IEVwaGVtZXJhbFJlc29sdmVJbnRlbnRJbmZvW3NpemVdOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzUGFja2FnZUZvckZpbHRlcihTdHJpbmcgcGFja2FnZU5hbWUsIEludGVudEZpbHRlciBpbmZvKSB7CisgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGlzUGFja2FnZUZvckZpbHRlcihTdHJpbmcgcGFja2FnZU5hbWUsIEVwaGVtZXJhbFJlc29sdmVJbnRlbnRJbmZvIGluZm8pIHsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHByb3RlY3RlZCBSZXNvbHZlSW5mbyBuZXdSZXN1bHQoSW50ZW50RmlsdGVyIGluZm8sIGludCBtYXRjaCwgaW50IHVzZXJJZCkgewotICAgICAgICAgICAgaWYgKCFzVXNlck1hbmFnZXIuZXhpc3RzKHVzZXJJZCkpIHJldHVybiBudWxsOwotICAgICAgICAgICAgZmluYWwgUmVzb2x2ZUluZm8gcmVzID0gbmV3IFJlc29sdmVJbmZvKCk7Ci0gICAgICAgICAgICByZXMuZmlsdGVyID0gaW5mbzsKLSAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIHByb3RlY3RlZCBFcGhlbWVyYWxSZXNvbHZlSW5mbyBuZXdSZXN1bHQoRXBoZW1lcmFsUmVzb2x2ZUludGVudEluZm8gaW5mbywgaW50IG1hdGNoLAorICAgICAgICAgICAgICAgIGludCB1c2VySWQpIHsKKyAgICAgICAgICAgIGlmICghc1VzZXJNYW5hZ2VyLmV4aXN0cyh1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaW5mby5nZXRFcGhlbWVyYWxSZXNvbHZlSW5mbygpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDAxNiw3ICsxMDA2Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgZmluYWwgVmVyaWZpY2F0aW9uUGFyYW1zIHZlcmlmUGFyYW1zID0gbmV3IFZlcmlmaWNhdGlvblBhcmFtcygKICAgICAgICAgICAgICAgICBudWxsLCBzZXNzaW9uUGFyYW1zLm9yaWdpbmF0aW5nVXJpLCBzZXNzaW9uUGFyYW1zLnJlZmVycmVyVXJpLAotICAgICAgICAgICAgICAgIHNlc3Npb25QYXJhbXMub3JpZ2luYXRpbmdVaWQsIG51bGwpOworICAgICAgICAgICAgICAgIHNlc3Npb25QYXJhbXMub3JpZ2luYXRpbmdVaWQpOwogICAgICAgICB2ZXJpZlBhcmFtcy5zZXRJbnN0YWxsZXJVaWQoaW5zdGFsbGVyVWlkKTsKIAogICAgICAgICBmaW5hbCBPcmlnaW5JbmZvIG9yaWdpbjsKQEAgLTEwMjA1LDYgKzEwMjUyLDM2IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gc2V0UGFja2FnZVN1c3BlbmRlZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gc3VzcGVuZGVkLCBpbnQgdXNlcklkKSB7CisgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX1VTRVJTLCBudWxsKTsKKyAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24oQmluZGVyLmdldENhbGxpbmdVaWQoKSwgdXNlcklkLCB0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICJzZXRQYWNrYWdlU3VzcGVuZGVkIGZvciB1c2VyICIgKyB1c2VySWQpOworCisgICAgICAgIGxvbmcgY2FsbGluZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgeworICAgICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHBrZ1NldHRpbmcgPSBtU2V0dGluZ3MubVBhY2thZ2VzLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHBrZ1NldHRpbmcgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocGtnU2V0dGluZy5nZXRTdXNwZW5kZWQodXNlcklkKSAhPSBzdXNwZW5kZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ1NldHRpbmcuc2V0U3VzcGVuZGVkKHN1c3BlbmRlZCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TZXR0aW5ncy53cml0ZVBhY2thZ2VSZXN0cmljdGlvbnNMUHIodXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86CisgICAgICAgICAgICAgICAgICAgIC8vICogYnJvYWRjYXN0IGEgUEFDS0FHRV8oVU4pU1VTUEVOREVEIGludGVudCBmb3IgbGF1bmNoZXJzIHRvIHBpY2sgdXAKKyAgICAgICAgICAgICAgICAgICAgLy8gKiByZW1vdmUgYXBwIGZyb20gcmVjZW50cyAoa2lsbCBhcHAgaXQgaWYgaXQgaXMgcnVubmluZykKKyAgICAgICAgICAgICAgICAgICAgLy8gKiBlcmFzZSBleGlzdGluZyBub3RpZmljYXRpb25zIGZvciB0aGlzIGFwcAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShjYWxsaW5nSWQpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgdmVyaWZ5UGVuZGluZ0luc3RhbGwoaW50IGlkLCBpbnQgdmVyaWZpY2F0aW9uQ29kZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUEFDS0FHRV9WRVJJRklDQVRJT05fQUdFTlQsCkBAIC0xMDQwMSwxMCArMTA0NzgsNiBAQAogICAgICAgICBpZiAoIURFRkFVTFRfVkVSSUZZX0VOQUJMRSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIC8vIFRPRE86IGZpeCBiLzI1MTE4NjIyOyBkb24ndCBieXBhc3MgdmVyaWZpY2F0aW9uCi0gICAgICAgIGlmIChCdWlsZC5JU19ERUJVR0dBQkxFICYmIChpbnN0YWxsRmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX1FVSUNLKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICAgICAgLy8gRXBoZW1lcmFsIGFwcHMgZG9uJ3QgZ2V0IHRoZSBmdWxsIHZlcmlmaWNhdGlvbiB0cmVhdG1lbnQKICAgICAgICAgaWYgKChpbnN0YWxsRmxhZ3MgJiBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX0VQSEVNRVJBTCkgIT0gMCkgewogICAgICAgICAgICAgaWYgKERFQlVHX0VQSEVNRVJBTCkgewpAQCAtMTA0OTcsNyArMTA1NzAsNyBAQAogICAgICAgICAgICAgQXJyYXlMaXN0PEludGVudEZpbHRlcj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgICAgICBmb3IgKGludCBuPTA7IG48Y291bnQ7IG4rKykgewogICAgICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuQWN0aXZpdHkgYWN0aXZpdHkgPSBwa2cuYWN0aXZpdGllcy5nZXQobik7Ci0gICAgICAgICAgICAgICAgaWYgKGFjdGl2aXR5LmludGVudHMgIT0gbnVsbCB8fCBhY3Rpdml0eS5pbnRlbnRzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoYWN0aXZpdHkuaW50ZW50cyAhPSBudWxsICYmIGFjdGl2aXR5LmludGVudHMuc2l6ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkQWxsKGFjdGl2aXR5LmludGVudHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEwNTczLDcgKzEwNjQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJCYWQgb2JqZWN0ICIgKyBvYmogKyAiIGZvciB1aWQgIiArIHVpZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIlVua25vd24gY2FsbGluZyB1aWQgIiArIHVpZCk7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJVbmtub3duIGNhbGxpbmcgVUlEOiAiICsgdWlkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gVmVyaWZ5OiBjYW4ndCBzZXQgaW5zdGFsbGVyUGFja2FnZU5hbWUgdG8gYSBwYWNrYWdlIHRoYXQgaXMKQEAgLTEwOTE2LDcgKzEwOTg5LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGNsYXNzIE1vdmVJbmZvIHsKKyAgICBzdGF0aWMgY2xhc3MgTW92ZUluZm8gewogICAgICAgICBmaW5hbCBpbnQgbW92ZUlkOwogICAgICAgICBmaW5hbCBTdHJpbmcgZnJvbVV1aWQ7CiAgICAgICAgIGZpbmFsIFN0cmluZyB0b1V1aWQ7CkBAIC0xMDk3MiwxMyArMTEwNDUsNiBAQAogICAgICAgICAgICAgICAgICAgICArICIgZmlsZT0iICsgb3JpZ2luLmZpbGUgKyAiIGNpZD0iICsgb3JpZ2luLmNpZCArICJ9IjsKICAgICAgICAgfQogCi0gICAgICAgIHB1YmxpYyBNYW5pZmVzdERpZ2VzdCBnZXRNYW5pZmVzdERpZ2VzdCgpIHsKLSAgICAgICAgICAgIGlmICh2ZXJpZmljYXRpb25QYXJhbXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHZlcmlmaWNhdGlvblBhcmFtcy5nZXRNYW5pZmVzdERpZ2VzdCgpOwotICAgICAgICB9Ci0KICAgICAgICAgcHJpdmF0ZSBpbnQgaW5zdGFsbExvY2F0aW9uUG9saWN5KFBhY2thZ2VJbmZvTGl0ZSBwa2dMaXRlKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwa2dMaXRlLnBhY2thZ2VOYW1lOwogICAgICAgICAgICAgaW50IGluc3RhbGxMb2NhdGlvbiA9IHBrZ0xpdGUuaW5zdGFsbExvY2F0aW9uOwpAQCAtMTEwOTMsOSArMTExNTksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgZmluYWwgbG9uZyBzaXplQnl0ZXMgPSBtQ29udGFpbmVyU2VydmljZS5jYWxjdWxhdGVJbnN0YWxsZWRTaXplKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbi5yZXNvbHZlZFBhdGgsIGlzRm9yd2FyZExvY2tlZCgpLCBwYWNrYWdlQWJpT3ZlcnJpZGUpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChtSW5zdGFsbGVyLmZyZWVDYWNoZShudWxsLCBzaXplQnl0ZXMgKyBsb3dUaHJlc2hvbGQpID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIuZnJlZUNhY2hlKG51bGwsIHNpemVCeXRlcyArIGxvd1RocmVzaG9sZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwa2dMaXRlID0gbUNvbnRhaW5lclNlcnZpY2UuZ2V0TWluaW1hbFBhY2thZ2VJbmZvKG9yaWdpbi5yZXNvbHZlZFBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxGbGFncywgcGFja2FnZUFiaU92ZXJyaWRlKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gZnJlZSBjYWNoZSIsIGUpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTExMTcxLDcgKzExMjQwLDggQEAKICAgICAgICAgICAgICAgICAgKiBkbywgdGhlbiB3ZSdsbCBkZWZlciB0byB0aGVtIHRvIHZlcmlmeSB0aGUgcGFja2FnZXMuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHJlcXVpcmVkVWlkID0gbVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlID09IG51bGwgPyAtMQotICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRQYWNrYWdlVWlkKG1SZXF1aXJlZFZlcmlmaWVyUGFja2FnZSwgdmVyaWZpZXJVc2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICA6IGdldFBhY2thZ2VVaWQobVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlLCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVyVXNlci5nZXRJZGVudGlmaWVyKCkpOwogICAgICAgICAgICAgICAgIGlmICghb3JpZ2luLmV4aXN0aW5nICYmIHJlcXVpcmVkVWlkICE9IC0xCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpc1ZlcmlmaWNhdGlvbkVuYWJsZWQodmVyaWZpZXJVc2VyLmdldElkZW50aWZpZXIoKSwgaW5zdGFsbEZsYWdzKSkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBJbnRlbnQgdmVyaWZpY2F0aW9uID0gbmV3IEludGVudCgKQEAgLTExMTgxLDkgKzExMjUxLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFX01JTUVfVFlQRSk7CiAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbi5hZGRGbGFncyhJbnRlbnQuRkxBR19HUkFOVF9SRUFEX1VSSV9QRVJNSVNTSU9OKTsKIAorICAgICAgICAgICAgICAgICAgICAvLyBRdWVyeSBhbGwgbGl2ZSB2ZXJpZmllcnMgYmFzZWQgb24gY3VycmVudCB1c2VyIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IHJlY2VpdmVycyA9IHF1ZXJ5SW50ZW50UmVjZWl2ZXJzKHZlcmlmaWNhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQUNLQUdFX01JTUVfVFlQRSwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZpZXJVc2VyLmdldElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFDS0FHRV9NSU1FX1RZUEUsIDAsIHZlcmlmaWVyVXNlci5nZXRJZGVudGlmaWVyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChERUJVR19WRVJJRlkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJGb3VuZCAiICsgcmVjZWl2ZXJzLnNpemUoKSArICIgdmVyaWZpZXJzIGZvciBpbnRlbnQgIgpAQCAtMTEzOTcsNyArMTE0NjcsNiBAQAogICAgICAgICBmaW5hbCBpbnQgaW5zdGFsbEZsYWdzOwogICAgICAgICBmaW5hbCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWU7CiAgICAgICAgIGZpbmFsIFN0cmluZyB2b2x1bWVVdWlkOwotICAgICAgICBmaW5hbCBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdDsKICAgICAgICAgZmluYWwgVXNlckhhbmRsZSB1c2VyOwogICAgICAgICBmaW5hbCBTdHJpbmcgYWJpT3ZlcnJpZGU7CiAgICAgICAgIGZpbmFsIFN0cmluZ1tdIGluc3RhbGxHcmFudFBlcm1pc3Npb25zOwpAQCAtMTE0MTIsNyArMTE0ODEsNyBAQAogCiAgICAgICAgIEluc3RhbGxBcmdzKE9yaWdpbkluZm8gb3JpZ2luLCBNb3ZlSW5mbyBtb3ZlLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlcjIgb2JzZXJ2ZXIsCiAgICAgICAgICAgICAgICAgaW50IGluc3RhbGxGbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLCBTdHJpbmcgdm9sdW1lVXVpZCwKLSAgICAgICAgICAgICAgICBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwgVXNlckhhbmRsZSB1c2VyLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsCisgICAgICAgICAgICAgICAgVXNlckhhbmRsZSB1c2VyLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsCiAgICAgICAgICAgICAgICAgU3RyaW5nIGFiaU92ZXJyaWRlLCBTdHJpbmdbXSBpbnN0YWxsR3JhbnRQZXJtaXNzaW9ucywKICAgICAgICAgICAgICAgICBTdHJpbmcgdHJhY2VNZXRob2QsIGludCB0cmFjZUNvb2tpZSkgewogICAgICAgICAgICAgdGhpcy5vcmlnaW4gPSBvcmlnaW47CkBAIC0xMTQyMSw3ICsxMTQ5MCw2IEBACiAgICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gb2JzZXJ2ZXI7CiAgICAgICAgICAgICB0aGlzLmluc3RhbGxlclBhY2thZ2VOYW1lID0gaW5zdGFsbGVyUGFja2FnZU5hbWU7CiAgICAgICAgICAgICB0aGlzLnZvbHVtZVV1aWQgPSB2b2x1bWVVdWlkOwotICAgICAgICAgICAgdGhpcy5tYW5pZmVzdERpZ2VzdCA9IG1hbmlmZXN0RGlnZXN0OwogICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjsKICAgICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25TZXRzID0gaW5zdHJ1Y3Rpb25TZXRzOwogICAgICAgICAgICAgdGhpcy5hYmlPdmVycmlkZSA9IGFiaU92ZXJyaWRlOwpAQCAtMTE0OTQsMTEgKzExNTYyLDkgQEAKICAgICAgICAgICAgIFN0cmluZ1tdIGRleENvZGVJbnN0cnVjdGlvblNldHMgPSBnZXREZXhDb2RlSW5zdHJ1Y3Rpb25TZXRzKGluc3RydWN0aW9uU2V0cyk7CiAgICAgICAgICAgICBmb3IgKFN0cmluZyBjb2RlUGF0aCA6IGFsbENvZGVQYXRocykgewogICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGRleENvZGVJbnN0cnVjdGlvblNldCA6IGRleENvZGVJbnN0cnVjdGlvblNldHMpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJldENvZGUgPSBtSW5zdGFsbGVyLnJtZGV4KGNvZGVQYXRoLCBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0Q29kZSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgZGV4IGZpbGUgZm9yIHBhY2thZ2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGF0IGxvY2F0aW9uICIgKyBjb2RlUGF0aCArICIsIHJldGNvZGU9IiArIHJldENvZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgY29uc2lkZXIgdGhpcyB0byBiZSBhIGZhaWx1cmUgb2YgdGhlIGNvcmUgcGFja2FnZSBkZWxldGlvbgorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbGxlci5ybWRleChjb2RlUGF0aCwgZGV4Q29kZUluc3RydWN0aW9uU2V0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGlnbm9yZWQpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTExNTIzLDcgKzExNTg5LDcgQEAKICAgICAgICAgLyoqIE5ldyBpbnN0YWxsICovCiAgICAgICAgIEZpbGVJbnN0YWxsQXJncyhJbnN0YWxsUGFyYW1zIHBhcmFtcykgewogICAgICAgICAgICAgc3VwZXIocGFyYW1zLm9yaWdpbiwgcGFyYW1zLm1vdmUsIHBhcmFtcy5vYnNlcnZlciwgcGFyYW1zLmluc3RhbGxGbGFncywKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmluc3RhbGxlclBhY2thZ2VOYW1lLCBwYXJhbXMudm9sdW1lVXVpZCwgcGFyYW1zLmdldE1hbmlmZXN0RGlnZXN0KCksCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSwgcGFyYW1zLnZvbHVtZVV1aWQsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5nZXRVc2VyKCksIG51bGwgLyogaW5zdHJ1Y3Rpb24gc2V0cyAqLywgcGFyYW1zLnBhY2thZ2VBYmlPdmVycmlkZSwKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmdyYW50ZWRSdW50aW1lUGVybWlzc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy50cmFjZU1ldGhvZCwgcGFyYW1zLnRyYWNlQ29va2llKTsKQEAgLTExNTM0LDcgKzExNjAwLDcgQEAKIAogICAgICAgICAvKiogRXhpc3RpbmcgaW5zdGFsbCAqLwogICAgICAgICBGaWxlSW5zdGFsbEFyZ3MoU3RyaW5nIGNvZGVQYXRoLCBTdHJpbmcgcmVzb3VyY2VQYXRoLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMpIHsKLSAgICAgICAgICAgIHN1cGVyKE9yaWdpbkluZm8uZnJvbU5vdGhpbmcoKSwgbnVsbCwgbnVsbCwgMCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgaW5zdHJ1Y3Rpb25TZXRzLAorICAgICAgICAgICAgc3VwZXIoT3JpZ2luSW5mby5mcm9tTm90aGluZygpLCBudWxsLCBudWxsLCAwLCBudWxsLCBudWxsLCBudWxsLCBpbnN0cnVjdGlvblNldHMsCiAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIDApOwogICAgICAgICAgICAgdGhpcy5jb2RlRmlsZSA9IChjb2RlUGF0aCAhPSBudWxsKSA/IG5ldyBGaWxlKGNvZGVQYXRoKSA6IG51bGw7CiAgICAgICAgICAgICB0aGlzLnJlc291cmNlRmlsZSA9IChyZXNvdXJjZVBhdGggIT0gbnVsbCkgPyBuZXcgRmlsZShyZXNvdXJjZVBhdGgpIDogbnVsbDsKQEAgLTExNjg0LDExICsxMTc1MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoY29kZUZpbGUuaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucm1QYWNrYWdlRGlyKGNvZGVGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29kZUZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZW1vdmVDb2RlUGF0aExJKGNvZGVGaWxlKTsKIAogICAgICAgICAgICAgaWYgKHJlc291cmNlRmlsZSAhPSBudWxsICYmICFGaWxlVXRpbHMuY29udGFpbnMoY29kZUZpbGUsIHJlc291cmNlRmlsZSkpIHsKICAgICAgICAgICAgICAgICByZXNvdXJjZUZpbGUuZGVsZXRlKCk7CkBAIC0xMTc2MSw3ICsxMTgyMyw3IEBACiAgICAgICAgIC8qKiBOZXcgaW5zdGFsbCAqLwogICAgICAgICBBc2VjSW5zdGFsbEFyZ3MoSW5zdGFsbFBhcmFtcyBwYXJhbXMpIHsKICAgICAgICAgICAgIHN1cGVyKHBhcmFtcy5vcmlnaW4sIHBhcmFtcy5tb3ZlLCBwYXJhbXMub2JzZXJ2ZXIsIHBhcmFtcy5pbnN0YWxsRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSwgcGFyYW1zLnZvbHVtZVV1aWQsIHBhcmFtcy5nZXRNYW5pZmVzdERpZ2VzdCgpLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy52b2x1bWVVdWlkLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ2V0VXNlcigpLCBudWxsIC8qIGluc3RydWN0aW9uIHNldHMgKi8sIHBhcmFtcy5wYWNrYWdlQWJpT3ZlcnJpZGUsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5ncmFudGVkUnVudGltZVBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudHJhY2VNZXRob2QsIHBhcmFtcy50cmFjZUNvb2tpZSk7CkBAIC0xMTc3MSw3ICsxMTgzMyw3IEBACiAgICAgICAgIEFzZWNJbnN0YWxsQXJncyhTdHJpbmcgZnVsbENvZGVQYXRoLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzRXh0ZXJuYWwsIGJvb2xlYW4gaXNGb3J3YXJkTG9ja2VkKSB7CiAgICAgICAgICAgICBzdXBlcihPcmlnaW5JbmZvLmZyb21Ob3RoaW5nKCksIG51bGwsIG51bGwsIChpc0V4dGVybmFsID8gSU5TVEFMTF9FWFRFUk5BTCA6IDApCi0gICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uU2V0cywgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CiAgICAgICAgICAgICAvLyBIYWNraWx5IHByZXRlbmQgd2UncmUgc3RpbGwgbG9va2luZyBhdCBhIGZ1bGwgY29kZSBwYXRoCiAgICAgICAgICAgICBpZiAoIWZ1bGxDb2RlUGF0aC5lbmRzV2l0aChSRVNfRklMRV9OQU1FKSkgewpAQCAtMTE3ODgsNyArMTE4NTAsNyBAQAogCiAgICAgICAgIEFzZWNJbnN0YWxsQXJncyhTdHJpbmcgY2lkLCBTdHJpbmdbXSBpbnN0cnVjdGlvblNldHMsIGJvb2xlYW4gaXNGb3J3YXJkTG9ja2VkKSB7CiAgICAgICAgICAgICBzdXBlcihPcmlnaW5JbmZvLmZyb21Ob3RoaW5nKCksIG51bGwsIG51bGwsIChpc0FzZWNFeHRlcm5hbChjaWQpID8gSU5TVEFMTF9FWFRFUk5BTCA6IDApCi0gICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsIG51bGwsCisgICAgICAgICAgICAgICAgICAgIHwgKGlzRm9yd2FyZExvY2tlZCA/IElOU1RBTExfRk9SV0FSRF9MT0NLIDogMCksIG51bGwsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uU2V0cywgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CiAgICAgICAgICAgICB0aGlzLmNpZCA9IGNpZDsKICAgICAgICAgICAgIHNldE1vdW50UGF0aChQYWNrYWdlSGVscGVyLmdldFNkRGlyKGNpZCkpOwpAQCAtMTIwMjAsOCArMTIwODIsOCBAQAogICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgaW50IGRvUHJlQ29weSgpIHsKICAgICAgICAgICAgIGlmIChpc0Z3ZExvY2tlZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFQYWNrYWdlSGVscGVyLmZpeFNkUGVybWlzc2lvbnMoY2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGFja2FnZVVpZChERUZBVUxUX0NPTlRBSU5FUl9QQUNLQUdFLCAwKSwgUkVTX0ZJTEVfTkFNRSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVBhY2thZ2VIZWxwZXIuZml4U2RQZXJtaXNzaW9ucyhjaWQsIGdldFBhY2thZ2VVaWQoREVGQVVMVF9DT05UQUlORVJfUEFDS0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BVENIX1NZU1RFTV9PTkxZLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSwgUkVTX0ZJTEVfTkFNRSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfRkFJTEVEX0NPTlRBSU5FUl9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjA1NSw3ICsxMjExNyw3IEBACiAgICAgICAgIC8qKiBOZXcgaW5zdGFsbCAqLwogICAgICAgICBNb3ZlSW5zdGFsbEFyZ3MoSW5zdGFsbFBhcmFtcyBwYXJhbXMpIHsKICAgICAgICAgICAgIHN1cGVyKHBhcmFtcy5vcmlnaW4sIHBhcmFtcy5tb3ZlLCBwYXJhbXMub2JzZXJ2ZXIsIHBhcmFtcy5pbnN0YWxsRmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5pbnN0YWxsZXJQYWNrYWdlTmFtZSwgcGFyYW1zLnZvbHVtZVV1aWQsIHBhcmFtcy5nZXRNYW5pZmVzdERpZ2VzdCgpLAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy52b2x1bWVVdWlkLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZ2V0VXNlcigpLCBudWxsIC8qIGluc3RydWN0aW9uIHNldHMgKi8sIHBhcmFtcy5wYWNrYWdlQWJpT3ZlcnJpZGUsCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5ncmFudGVkUnVudGltZVBlcm1pc3Npb25zLAogICAgICAgICAgICAgICAgICAgICBwYXJhbXMudHJhY2VNZXRob2QsIHBhcmFtcy50cmFjZUNvb2tpZSk7CkBAIC0xMjA2NSw4ICsxMjEyNywxMSBAQAogICAgICAgICAgICAgaWYgKERFQlVHX0lOU1RBTEwpIFNsb2cuZChUQUcsICJNb3ZpbmcgIiArIG1vdmUucGFja2FnZU5hbWUgKyAiIGZyb20gIgogICAgICAgICAgICAgICAgICAgICArIG1vdmUuZnJvbVV1aWQgKyAiIHRvICIgKyBtb3ZlLnRvVXVpZCk7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1JbnN0YWxsZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAobUluc3RhbGxlci5jb3B5Q29tcGxldGVBcHAobW92ZS5mcm9tVXVpZCwgbW92ZS50b1V1aWQsIG1vdmUucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlLmRhdGFBcHBOYW1lLCBtb3ZlLmFwcElkLCBtb3ZlLnNlaW5mbykgIT0gMCkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIubW92ZUNvbXBsZXRlQXBwKG1vdmUuZnJvbVV1aWQsIG1vdmUudG9VdWlkLCBtb3ZlLnBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmUuZGF0YUFwcE5hbWUsIG1vdmUuYXBwSWQsIG1vdmUuc2VpbmZvKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbGVkIHRvIG1vdmUgYXBwIiwgZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYWNrYWdlTWFuYWdlci5JTlNUQUxMX0ZBSUxFRF9JTlRFUk5BTF9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMjEyOSwxMSArMTIxOTQsNyBAQAogICAgICAgICAgICAgc3luY2hyb25pemVkIChtSW5zdGFsbExvY2spIHsKICAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCBib3RoIGFwcCBkYXRhIGFuZCBjb2RlCiAgICAgICAgICAgICAgICAgcmVtb3ZlRGF0YURpcnNMSSh2b2x1bWVVdWlkLCBtb3ZlLnBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZUZpbGUuaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLnJtUGFja2FnZURpcihjb2RlRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY29kZUZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlbW92ZUNvZGVQYXRoTEkoY29kZUZpbGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTEyMjIyLDcgKzEyMjgzLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGNsYXNzIFBhY2thZ2VJbnN0YWxsZWRJbmZvIHsKKyAgICBzdGF0aWMgY2xhc3MgUGFja2FnZUluc3RhbGxlZEluZm8gewogICAgICAgICBTdHJpbmcgbmFtZTsKICAgICAgICAgaW50IHVpZDsKICAgICAgICAgLy8gVGhlIHNldCBvZiB1c2VycyB0aGF0IG9yaWdpbmFsbHkgaGFkIHRoaXMgcGFja2FnZSBpbnN0YWxsZWQuCkBAIC0xMjUzMSw3ICsxMjU5Miw3IEBACiAgICAgICAgICAgICBpZigob2xkUGtnID09IG51bGwpIHx8IChvbGRQa2cuYXBwbGljYXRpb25JbmZvID09IG51bGwpIHx8CiAgICAgICAgICAgICAgICAgICAgIChvbGRQa2dTZXR0aW5nID09IG51bGwpKSB7CiAgICAgICAgICAgICAgICAgcmVzLnNldEVycm9yKElOU1RBTExfRkFJTEVEX1JFUExBQ0VfQ09VTEROVF9ERUxFVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBwYWNrYWdlOiIgKyBwYWNrYWdlTmFtZSArICIgaW5mb3JtYXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIHBhY2thZ2UgIiArIHBhY2thZ2VOYW1lICsgIiBpbmZvcm1hdGlvbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTI3NjcsNyArMTI4MjgsNiBAQAogICAgICAgICBmaW5hbCBib29sZWFuIGZvcndhcmRMb2NrZWQgPSAoKGluc3RhbGxGbGFncyAmIFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfRk9SV0FSRF9MT0NLKSAhPSAwKTsKICAgICAgICAgZmluYWwgYm9vbGVhbiBvbkV4dGVybmFsID0gKCgoaW5zdGFsbEZsYWdzICYgUGFja2FnZU1hbmFnZXIuSU5TVEFMTF9FWFRFUk5BTCkgIT0gMCkKICAgICAgICAgICAgICAgICB8fCAoYXJncy52b2x1bWVVdWlkICE9IG51bGwpKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBxdWlja0luc3RhbGwgPSAoKGluc3RhbGxGbGFncyAmIFBhY2thZ2VNYW5hZ2VyLklOU1RBTExfUVVJQ0spICE9IDApOwogICAgICAgICBmaW5hbCBib29sZWFuIGVwaGVtZXJhbCA9ICgoaW5zdGFsbEZsYWdzICYgUGFja2FnZU1hbmFnZXIuSU5TVEFMTF9FUEhFTUVSQUwpICE9IDApOwogICAgICAgICBib29sZWFuIHJlcGxhY2UgPSBmYWxzZTsKICAgICAgICAgaW50IHNjYW5GbGFncyA9IFNDQU5fTkVXX0lOU1RBTEwgfCBTQ0FOX1VQREFURV9TSUdOQVRVUkU7CkBAIC0xMjc5Myw3ICsxMjg1Myw2IEBACiAgICAgICAgICAgICAgICAgfCBQYWNrYWdlUGFyc2VyLlBBUlNFX0VORk9SQ0VfQ09ERQogICAgICAgICAgICAgICAgIHwgKGZvcndhcmRMb2NrZWQgPyBQYWNrYWdlUGFyc2VyLlBBUlNFX0ZPUldBUkRfTE9DSyA6IDApCiAgICAgICAgICAgICAgICAgfCAob25FeHRlcm5hbCA/IFBhY2thZ2VQYXJzZXIuUEFSU0VfRVhURVJOQUxfU1RPUkFHRSA6IDApCi0gICAgICAgICAgICAgICAgfCAocXVpY2tJbnN0YWxsID8gUGFja2FnZVBhcnNlci5QQVJTRV9TS0lQX1ZFUklGSUNBVElPTiA6IDApCiAgICAgICAgICAgICAgICAgfCAoZXBoZW1lcmFsID8gUGFja2FnZVBhcnNlci5QQVJTRV9JU19FUEhFTUVSQUwgOiAwKTsKICAgICAgICAgUGFja2FnZVBhcnNlciBwcCA9IG5ldyBQYWNrYWdlUGFyc2VyKCk7CiAgICAgICAgIHBwLnNldFNlcGFyYXRlUHJvY2Vzc2VzKG1TZXBhcmF0ZVByb2Nlc3Nlcyk7CkBAIC0xMjgzMSwzNSArMTI4OTAsNiBAQAogICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVFJBQ0VfVEFHX1BBQ0tBR0VfTUFOQUdFUik7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBJZiB0aGUgaW5zdGFsbGVyIHBhc3NlZCBpbiBhIG1hbmlmZXN0IGRpZ2VzdCwgY29tcGFyZSBpdCBub3cuICovCi0gICAgICAgIGlmIChhcmdzLm1hbmlmZXN0RGlnZXN0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIFRyYWNlLnRyYWNlQmVnaW4oVFJBQ0VfVEFHX1BBQ0tBR0VfTUFOQUdFUiwgImNvbGxlY3RNYW5pZmVzdERpZ2VzdCIpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBwcC5jb2xsZWN0TWFuaWZlc3REaWdlc3QocGtnKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VQYXJzZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHJlcy5zZXRFcnJvcigiRmFpbGVkIGNvbGxlY3QgZHVyaW5nIGluc3RhbGxQYWNrYWdlTEkiLCBlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIFRyYWNlLnRyYWNlRW5kKFRSQUNFX1RBR19QQUNLQUdFX01BTkFHRVIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoREVCVUdfSU5TVEFMTCkgewotICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBwYXJzZWRNYW5pZmVzdCA9IHBrZy5tYW5pZmVzdERpZ2VzdCA9PSBudWxsID8gIm51bGwiCi0gICAgICAgICAgICAgICAgICAgICAgICA6IHBrZy5tYW5pZmVzdERpZ2VzdC50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIFNsb2cuZChUQUcsICJDb21wYXJpbmcgbWFuaWZlc3RzOiAiICsgYXJncy5tYW5pZmVzdERpZ2VzdC50b1N0cmluZygpICsgIiB2cy4gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBwYXJzZWRNYW5pZmVzdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghYXJncy5tYW5pZmVzdERpZ2VzdC5lcXVhbHMocGtnLm1hbmlmZXN0RGlnZXN0KSkgewotICAgICAgICAgICAgICAgIHJlcy5zZXRFcnJvcihJTlNUQUxMX0ZBSUxFRF9QQUNLQUdFX0NIQU5HRUQsICJNYW5pZmVzdCBkaWdlc3QgY2hhbmdlZCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChERUJVR19JTlNUQUxMKSB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFyc2VkTWFuaWZlc3QgPSBwa2cubWFuaWZlc3REaWdlc3QgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/ICJudWxsIiA6IHBrZy5tYW5pZmVzdERpZ2VzdC50b1N0cmluZygpOwotICAgICAgICAgICAgU2xvZy5kKFRBRywgIm1hbmlmZXN0RGlnZXN0IHdhcyBub3QgcHJlc2VudCwgYnV0IHBhcnNlciBnb3Q6ICIgKyBwYXJzZWRNYW5pZmVzdCk7Ci0gICAgICAgIH0KLQogICAgICAgICAvLyBHZXQgcmlkIG9mIGFsbCByZWZlcmVuY2VzIHRvIHBhY2thZ2Ugc2NhbiBwYXRoIHZpYSBwYXJzZXIuCiAgICAgICAgIHBwID0gbnVsbDsKICAgICAgICAgU3RyaW5nIG9sZENvZGVQYXRoID0gbnVsbDsKQEAgLTEzMDU0LDYgKzEzMDg0LDcgQEAKIAogICAgICAgICBmaW5hbCBpbnQgdmVyaWZpZXJVaWQgPSBnZXRQYWNrYWdlVWlkKAogICAgICAgICAgICAgICAgIG1JbnRlbnRGaWx0ZXJWZXJpZmllckNvbXBvbmVudC5nZXRQYWNrYWdlTmFtZSgpLAorICAgICAgICAgICAgICAgIE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywKICAgICAgICAgICAgICAgICAodXNlcklkID09IFVzZXJIYW5kbGUuVVNFUl9BTEwpID8gVXNlckhhbmRsZS5VU0VSX1NZU1RFTSA6IHVzZXJJZCk7CiAKICAgICAgICAgbUhhbmRsZXIucmVtb3ZlTWVzc2FnZXMoU1RBUlRfSU5URU5UX0ZJTFRFUl9WRVJJRklDQVRJT05TKTsKQEAgLTEzMTYzLDEwICsxMzE5NCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTXVsdGlBcmNoKFBhY2thZ2VTZXR0aW5nIHBzKSB7Ci0gICAgICAgIHJldHVybiAocHMucGtnRmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19NVUxUSUFSQ0gpICE9IDA7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc011bHRpQXJjaChBcHBsaWNhdGlvbkluZm8gaW5mbykgewogICAgICAgICByZXR1cm4gKGluZm8uZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19NVUxUSUFSQ0gpICE9IDA7CiAgICAgfQpAQCAtMTMxNzksMTAgKzEzMjA2LDYgQEAKICAgICAgICAgcmV0dXJuIChwcy5wa2dGbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX0VYVEVSTkFMX1NUT1JBR0UpICE9IDA7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0V4dGVybmFsKEFwcGxpY2F0aW9uSW5mbyBpbmZvKSB7Ci0gICAgICAgIHJldHVybiAoaW5mby5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX0VYVEVSTkFMX1NUT1JBR0UpICE9IDA7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0VwaGVtZXJhbChQYWNrYWdlUGFyc2VyLlBhY2thZ2UgcGtnKSB7CiAgICAgICAgIHJldHVybiBwa2cuYXBwbGljYXRpb25JbmZvLmlzRXBoZW1lcmFsQXBwKCk7CiAgICAgfQpAQCAtMTM2NTUsNyArMTM2NzgsNyBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbmV3UGtnID0gc2NhblBhY2thZ2VUcmFjZWRMSShkaXNhYmxlZFBzLmNvZGVQYXRoLCBwYXJzZUZsYWdzLCBTQ0FOX05PX1BBVEhTLCAwLCBudWxsKTsKICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byByZXN0b3JlIHN5c3RlbSBwYWNrYWdlOiIgKyBuZXdQcy5uYW1lICsgIjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gcmVzdG9yZSBzeXN0ZW0gcGFja2FnZSAiICsgbmV3UHMubmFtZSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIApAQCAtMTM3NDksNiArMTM3NzIsMjkgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldFJlcXVpcmVkRm9yU3lzdGVtVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGJvb2xlYW4gc3lzdGVtVXNlckFwcCkgeworICAgICAgICBpbnQgY2FsbGluZ1VpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7CisgICAgICAgIGlmIChjYWxsaW5nVWlkICE9IFByb2Nlc3MuU1lTVEVNX1VJRCAmJiBjYWxsaW5nVWlkICE9IFByb2Nlc3MuUk9PVF9VSUQpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgInNldFJlcXVpcmVkRm9yU3lzdGVtVXNlciBjYW4gb25seSBiZSBydW4gYnkgdGhlIHN5c3RlbSBvciByb290Iik7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKKyAgICAgICAgICAgIFBhY2thZ2VTZXR0aW5nIHBzID0gbVNldHRpbmdzLm1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsICJQYWNrYWdlIGRvZXNuJ3QgZXhpc3Q6ICIgKyBwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN5c3RlbVVzZXJBcHApIHsKKyAgICAgICAgICAgICAgICBwcy5wa2dQcml2YXRlRmxhZ3MgfD0gQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBzLnBrZ1ByaXZhdGVGbGFncyAmPSB+QXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtU2V0dGluZ3Mud3JpdGVMUHIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICAvKgogICAgICAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgcGFja2FnZSBkZWxldGlvbiBpbiBnZW5lcmFsCiAgICAgICovCkBAIC0xMzc4Niw2ICsxMzgzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgLy9zdG9wcGVkCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgLy9ub3RMYXVuY2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vaGlkZGVuCisgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgLy9zdXNwZW5kZWQKICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgLy8gYmxvY2tVbmluc3RhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIHBzLnJlYWRVc2VyU3RhdGUodXNlcklkKS5kb21haW5WZXJpZmljYXRpb25TdGF0dXMsIDApOwpAQCAtMTM4MjgsNyArMTM4NzUsMTMgQEAKICAgICAgICAgICAgICAgICBvdXRJbmZvLnJlbW92ZWRBcHBJZCA9IGFwcElkOwogICAgICAgICAgICAgICAgIG91dEluZm8ucmVtb3ZlZFVzZXJzID0gbmV3IGludFtdIHtyZW1vdmVVc2VyfTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1JbnN0YWxsZXIuY2xlYXJVc2VyRGF0YShwcy52b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgcmVtb3ZlVXNlcik7CisgICAgICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICAgICAgZmluYWwgaW50IGluc3RhbGxlckZsYWdzID0gSW5zdGFsbGVyLkZMQUdfQ0VfU1RPUkFHRSB8IEluc3RhbGxlci5GTEFHX0RFX1NUT1JBR0U7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIuZGVzdHJveUFwcERhdGEocHMudm9sdW1lVXVpZCwgcGFja2FnZU5hbWUsIHJlbW92ZVVzZXIsIGluc3RhbGxlckZsYWdzKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byBkZWxldGUgYXBwIGRhdGEiLCBlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlbW92ZUtleXN0b3JlRGF0YUlmTmVlZGVkKHJlbW92ZVVzZXIsIGFwcElkKTsKICAgICAgICAgICAgIHNjaGVkdWxlUGFja2FnZUNsZWFuaW5nKHBhY2thZ2VOYW1lLCByZW1vdmVVc2VyLCBmYWxzZSk7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlcykgewpAQCAtMTM4NDksMTMgKzEzOTAyLDEzIEBACiAKICAgICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKICAgICAgICAgaWYgKGlzU3lzdGVtQXBwKHBzKSkgewotICAgICAgICAgICAgaWYgKERFQlVHX1JFTU9WRSkgU2xvZy5kKFRBRywgIlJlbW92aW5nIHN5c3RlbSBwYWNrYWdlOiIgKyBwcy5uYW1lKTsKKyAgICAgICAgICAgIGlmIChERUJVR19SRU1PVkUpIFNsb2cuZChUQUcsICJSZW1vdmluZyBzeXN0ZW0gcGFja2FnZTogIiArIHBzLm5hbWUpOwogICAgICAgICAgICAgLy8gV2hlbiBhbiB1cGRhdGVkIHN5c3RlbSBhcHBsaWNhdGlvbiBpcyBkZWxldGVkIHdlIGRlbGV0ZSB0aGUgZXhpc3RpbmcgcmVzb3VyY2VzIGFzIHdlbGwgYW5kCiAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gZXhpc3RpbmcgY29kZSBpbiBzeXN0ZW0gcGFydGl0aW9uCiAgICAgICAgICAgICByZXQgPSBkZWxldGVTeXN0ZW1QYWNrYWdlTEkocHMsIGFsbFVzZXJIYW5kbGVzLCBwZXJVc2VySW5zdGFsbGVkLAogICAgICAgICAgICAgICAgICAgICBmbGFncywgb3V0SW5mbywgd3JpdGVTZXR0aW5ncyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfUkVNT1ZFKSBTbG9nLmQoVEFHLCAiUmVtb3Zpbmcgbm9uLXN5c3RlbSBwYWNrYWdlOiIgKyBwcy5uYW1lKTsKKyAgICAgICAgICAgIGlmIChERUJVR19SRU1PVkUpIFNsb2cuZChUQUcsICJSZW1vdmluZyBub24tc3lzdGVtIHBhY2thZ2U6ICIgKyBwcy5uYW1lKTsKICAgICAgICAgICAgIC8vIEtpbGwgYXBwbGljYXRpb24gcHJlLWVtcHRpdmVseSBlc3BlY2lhbGx5IGZvciBhcHBzIG9uIHNkLgogICAgICAgICAgICAga2lsbEFwcGxpY2F0aW9uKHBhY2thZ2VOYW1lLCBwcy5hcHBJZCwgInVuaW5zdGFsbCBwa2ciKTsKICAgICAgICAgICAgIHJldCA9IGRlbGV0ZUluc3RhbGxlZFBhY2thZ2VMSShwcywgZGVsZXRlQ29kZUFuZFJlc291cmNlcywgZmxhZ3MsCkBAIC0xMzg2Niw3ICsxMzkxOSw3IEBACiAgICAgICAgIHJldHVybiByZXQ7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBDbGVhclN0b3JhZ2VDb25uZWN0aW9uIGltcGxlbWVudHMgU2VydmljZUNvbm5lY3Rpb24geworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGNsYXNzIENsZWFyU3RvcmFnZUNvbm5lY3Rpb24gaW1wbGVtZW50cyBTZXJ2aWNlQ29ubmVjdGlvbiB7CiAgICAgICAgIElNZWRpYUNvbnRhaW5lclNlcnZpY2UgbUNvbnRhaW5lclNlcnZpY2U7CiAKICAgICAgICAgQE92ZXJyaWRlCkBAIC0xNDAwMiwxMyArMTQwNTUsMTYgQEAKICAgICAgICAgLy8gQWx3YXlzIGRlbGV0ZSBkYXRhIGRpcmVjdG9yaWVzIGZvciBwYWNrYWdlLCBldmVuIGlmIHdlIGZvdW5kIG5vIG90aGVyCiAgICAgICAgIC8vIHJlY29yZCBvZiBhcHAuIFRoaXMgaGVscHMgdXNlcnMgcmVjb3ZlciBmcm9tIFVJRCBtaXNtYXRjaGVzIHdpdGhvdXQKICAgICAgICAgLy8gcmVzb3J0aW5nIHRvIGEgZnVsbCBkYXRhIHdpcGUuCi0gICAgICAgIGludCByZXRDb2RlID0gbUluc3RhbGxlci5jbGVhclVzZXJEYXRhKHBrZy52b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdXNlcklkKTsKLSAgICAgICAgaWYgKHJldENvZGUgPCAwKSB7Ci0gICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIGNhY2hlIGZpbGVzIGZvciBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBJbnN0YWxsZXIuRkxBR19DRV9TVE9SQUdFIHwgSW5zdGFsbGVyLkZMQUdfREVfU1RPUkFHRTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbnN0YWxsZXIuY2xlYXJBcHBEYXRhKHBrZy52b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdXNlcklkLCBmbGFncyk7CisgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTbG9nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIGNhY2hlIGZpbGVzIGZvciBwYWNrYWdlICIgKyBwYWNrYWdlTmFtZSwgZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBmaW5hbCBpbnQgYXBwSWQgPSBwa2cuYXBwbGljYXRpb25JbmZvLnVpZDsKKyAgICAgICAgZmluYWwgaW50IGFwcElkID0gVXNlckhhbmRsZS5nZXRBcHBJZChwa2cuYXBwbGljYXRpb25JbmZvLnVpZCk7CiAgICAgICAgIHJlbW92ZUtleXN0b3JlRGF0YUlmTmVlZGVkKHVzZXJJZCwgYXBwSWQpOwogCiAgICAgICAgIC8vIENyZWF0ZSBhIG5hdGl2ZSBsaWJyYXJ5IHN5bWxpbmsgb25seSBpZiB3ZSBoYXZlIG5hdGl2ZSBsaWJyYXJpZXMKQEAgLTE0MDE3LDkgKzE0MDczLDExIEBACiAgICAgICAgIGlmIChwa2cuYXBwbGljYXRpb25JbmZvLnByaW1hcnlDcHVBYmkgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICFWTVJ1bnRpbWUuaXM2NEJpdEFiaShwa2cuYXBwbGljYXRpb25JbmZvLnByaW1hcnlDcHVBYmkpKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgbmF0aXZlTGliUGF0aCA9IHBrZy5hcHBsaWNhdGlvbkluZm8ubmF0aXZlTGlicmFyeURpcjsKLSAgICAgICAgICAgIGlmIChtSW5zdGFsbGVyLmxpbmtOYXRpdmVMaWJyYXJ5RGlyZWN0b3J5KHBrZy52b2x1bWVVdWlkLCBwa2cucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUxpYlBhdGgsIHVzZXJJZCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCBsaW5raW5nIG5hdGl2ZSBsaWJyYXJ5IGRpciIpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLmxpbmtOYXRpdmVMaWJyYXJ5RGlyZWN0b3J5KHBrZy52b2x1bWVVdWlkLCBwa2cucGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVMaWJQYXRoLCB1c2VySWQpOworICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiRmFpbGVkIGxpbmtpbmcgbmF0aXZlIGxpYnJhcnkgZGlyIiwgZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNDIzMiwxMCArMTQyOTAsMTQgQEAKICAgICAgICAgICAgIFNsb2cudyhUQUcsICJQYWNrYWdlICIgKyBwYWNrYWdlTmFtZSArICIgaGFzIG5vIGFwcGxpY2F0aW9uSW5mby4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpbnQgcmV0Q29kZSA9IG1JbnN0YWxsZXIuZGVsZXRlQ2FjaGVGaWxlcyhwLnZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLCB1c2VySWQpOwotICAgICAgICBpZiAocmV0Q29kZSA8IDApIHsKLSAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgY2FjaGUgZmlsZXMgZm9yIHBhY2thZ2U6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgKyBwYWNrYWdlTmFtZSArICIgdSIgKyB1c2VySWQpOworICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBJbnN0YWxsZXIuRkxBR19DRV9TVE9SQUdFIHwgSW5zdGFsbGVyLkZMQUdfREVfU1RPUkFHRTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbnN0YWxsZXIuY2xlYXJBcHBEYXRhKHAudm9sdW1lVXVpZCwgcGFja2FnZU5hbWUsIHVzZXJJZCwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfCBJbnN0YWxsZXIuRkxBR19DTEVBUl9DQUNIRV9PTkxZKTsKKyAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIFNsb2cudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgY2FjaGUgZmlsZXMgZm9yIHBhY2thZ2UgIgorICAgICAgICAgICAgICAgICAgICArIHBhY2thZ2VOYW1lICsgIiB1IiArIHVzZXJJZCwgZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDMyOSw5ICsxNDM5MSwxMiBAQAogICAgICAgICAgICAgYXBrUGF0aCA9IHAuYmFzZUNvZGVQYXRoOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJlcyA9IG1JbnN0YWxsZXIuZ2V0U2l6ZUluZm8ocC52b2x1bWVVdWlkLCBwYWNrYWdlTmFtZSwgdXNlckhhbmRsZSwgYXBrUGF0aCwKLSAgICAgICAgICAgICAgICBsaWJEaXJSb290LCBwdWJsaWNTcmNEaXIsIGFzZWNQYXRoLCBkZXhDb2RlSW5zdHJ1Y3Rpb25TZXRzLCBwU3RhdHMpOwotICAgICAgICBpZiAocmVzIDwgMCkgeworICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MgYXMgcGFydCBvZiAyNjQ2NjgyNworICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBJbnN0YWxsZXIuRkxBR19DRV9TVE9SQUdFIHwgSW5zdGFsbGVyLkZMQUdfREVfU1RPUkFHRTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbnN0YWxsZXIuZ2V0QXBwU2l6ZShwLnZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lLCB1c2VySGFuZGxlLCBmbGFncywgYXBrUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgbGliRGlyUm9vdCwgcHVibGljU3JjRGlyLCBhc2VjUGF0aCwgZGV4Q29kZUluc3RydWN0aW9uU2V0cywgcFN0YXRzKTsKKyAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCkBAIC0xNDY3OSw3ICsxNDc0NCw3IEBACiAgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIFNsb2cuaShUQUcsICJBZGRpbmcgcGVyc2lzdGVudCBwcmVmZXJyZWQgYWN0aXZpdHkgIiArIGFjdGl2aXR5ICsgIiBmb3IgdXNlciAiICsgdXNlcklkICsKLSAgICAgICAgICAgICAgICAgICAgIiA6Iik7CisgICAgICAgICAgICAgICAgICAgICI6Iik7CiAgICAgICAgICAgICBmaWx0ZXIuZHVtcChuZXcgTG9nUHJpbnRlcihMb2cuSU5GTywgVEFHKSwgIiAgIik7CiAgICAgICAgICAgICBtU2V0dGluZ3MuZWRpdFBlcnNpc3RlbnRQcmVmZXJyZWRBY3Rpdml0aWVzTFB3KHVzZXJJZCkuYWRkRmlsdGVyKAogICAgICAgICAgICAgICAgICAgICBuZXcgUGVyc2lzdGVudFByZWZlcnJlZEFjdGl2aXR5KGZpbHRlciwgYWN0aXZpdHkpKTsKQEAgLTE1MDg0LDEyICsxNTE0OSwxMCBAQAogICAgICAgICAgICAgcGtnU2V0dGluZyA9IG1TZXR0aW5ncy5tUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2dTZXR0aW5nID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJVbmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBjb21wb25lbnQ6ICIgKyBwYWNrYWdlTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBjbGFzc05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gY29tcG9uZW50OiAiICsgcGFja2FnZU5hbWUgKyAiLyIgKyBjbGFzc05hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gQWxsb3cgcm9vdCBhbmQgdmVyaWZ5IHRoYXQgdXNlcklkIGlzIG5vdCBiZWluZyBzcGVjaWZpZWQgYnkgYSBkaWZmZXJlbnQgdXNlcgogICAgICAgICAgICAgaWYgKCFhbGxvd2VkQnlQZXJtaXNzaW9uICYmICFVc2VySGFuZGxlLmlzU2FtZUFwcCh1aWQsIHBrZ1NldHRpbmcuYXBwSWQpKSB7CkBAIC0xNTExNiw3ICsxNTE3OSw5IEBACiAgICAgICAgICAgICAgICAgLy8gRmlyc3QsIHZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBjbGFzcyBuYW1lLgogICAgICAgICAgICAgICAgIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBwa2dTZXR0aW5nLnBrZzsKICAgICAgICAgICAgICAgICBpZiAocGtnID09IG51bGwgfHwgIXBrZy5oYXNDb21wb25lbnRDbGFzc05hbWUoY2xhc3NOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocGtnLmFwcGxpY2F0aW9uSW5mby50YXJnZXRTZGtWZXJzaW9uID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTikgeworICAgICAgICAgICAgICAgICAgICBpZiAocGtnICE9IG51bGwgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2cuYXBwbGljYXRpb25JbmZvLnRhcmdldFNka1ZlcnNpb24gPj0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTikgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29tcG9uZW50IGNsYXNzICIgKyBjbGFzc05hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGRvZXMgbm90IGV4aXN0IGluICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNTY2OSwxMSArMTU3MzQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgUmVxdWlyZWQ6ICIpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludChtUmVxdWlyZWRWZXJpZmllclBhY2thZ2UpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiICh1aWQ9Iik7Ci0gICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGdldFBhY2thZ2VVaWQobVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGdldFBhY2thZ2VVaWQobVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlLCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCIpIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtUmVxdWlyZWRWZXJpZmllclBhY2thZ2UgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgidnJmeSwiKTsgcHcucHJpbnQobVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiwiKTsgcHcucHJpbnRsbihnZXRQYWNrYWdlVWlkKG1SZXF1aXJlZFZlcmlmaWVyUGFja2FnZSwgMCkpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiLCIpOworICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKGdldFBhY2thZ2VVaWQobVJlcXVpcmVkVmVyaWZpZXJQYWNrYWdlLCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlckhhbmRsZS5VU0VSX1NZU1RFTSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTU2ODgsMTEgKzE1NzU2LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiICBVc2luZzogIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCh2ZXJpZmllclBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgKHVpZD0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KGdldFBhY2thZ2VVaWQodmVyaWZpZXJQYWNrYWdlTmFtZSwgMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoZ2V0UGFja2FnZVVpZCh2ZXJpZmllclBhY2thZ2VOYW1lLCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuVVNFUl9TWVNURU0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIikiKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJpZmllclBhY2thZ2VOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCJpZnYsIik7IHB3LnByaW50KHZlcmlmaWVyUGFja2FnZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiwiKTsgcHcucHJpbnRsbihnZXRQYWNrYWdlVWlkKHZlcmlmaWVyUGFja2FnZU5hbWUsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKGdldFBhY2thZ2VVaWQodmVyaWZpZXJQYWNrYWdlTmFtZSwgTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCk7CkBAIC0xNjU0MCw3ICsxNjYxMSwxMSBAQAogCiAgICAgICAgICAgICBpZiAoZGVzdHJveVVzZXIpIHsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1JbnN0YWxsTG9jaykgewotICAgICAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLnJlbW92ZVVzZXJEYXRhRGlycyh2b2x1bWVVdWlkLCB1c2VySWQpOworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgbUluc3RhbGxlci5yZW1vdmVVc2VyRGF0YURpcnModm9sdW1lVXVpZCwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFsbGVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gY2xlYW4gdXAgdXNlciBkaXJzIiwgZSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2NjA2LDExICsxNjY4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVEYXRhRGlyc0xJKHZvbHVtZVV1aWQsIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtSW5zdGFsbGVyLnJtUGFja2FnZURpcihmaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuZGVsZXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ29kZVBhdGhMSShmaWxlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE2OTQ2LDcgKzE3MDE3LDExIEBACiAgICAgICAgICAgICBmb3IgKFZvbHVtZUluZm8gdm9sIDogc3RvcmFnZS5nZXRXcml0YWJsZVByaXZhdGVWb2x1bWVzKCkpIHsKICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdm9sdW1lVXVpZCA9IHZvbC5nZXRGc1V1aWQoKTsKICAgICAgICAgICAgICAgICBpZiAoREVCVUdfSU5TVEFMTCkgU2xvZy5kKFRBRywgIlJlbW92aW5nIHVzZXIgZGF0YSBvbiB2b2x1bWUgIiArIHZvbHVtZVV1aWQpOwotICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucmVtb3ZlVXNlckRhdGFEaXJzKHZvbHVtZVV1aWQsIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIucmVtb3ZlVXNlckRhdGFEaXJzKHZvbHVtZVV1aWQsIHVzZXJIYW5kbGUpOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gcmVtb3ZlIHVzZXIgZGF0YSIsIGUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICAgICAgcmVtb3ZlVW51c2VkUGFja2FnZXNMSUxQdyh1c2VyTWFuYWdlciwgdXNlckhhbmRsZSk7CkBAIC0xNzAwOSw3ICsxNzA4NCwxMSBAQAogICAgIC8qKiBDYWxsZWQgYnkgVXNlck1hbmFnZXJTZXJ2aWNlICovCiAgICAgdm9pZCBjcmVhdGVOZXdVc2VyKGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUluc3RhbGxMb2NrKSB7Ci0gICAgICAgICAgICBtSW5zdGFsbGVyLmNyZWF0ZVVzZXJDb25maWcodXNlckhhbmRsZSk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIG1JbnN0YWxsZXIuY3JlYXRlVXNlckNvbmZpZyh1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbGxlckV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIkZhaWxlZCB0byBjcmVhdGUgdXNlciBjb25maWciLCBlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TZXR0aW5ncy5jcmVhdGVOZXdVc2VyTEkodGhpcywgbUluc3RhbGxlciwgdXNlckhhbmRsZSk7CiAgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkIChtUGFja2FnZXMpIHsKQEAgLTE3MTI5LDcgKzE3MjA4LDcgQEAKICAgICAgICAgc3luY2hyb25pemVkKG1QYWNrYWdlcykgewogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5QYWNrYWdlIHBrZyA9IG1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgaWYgKHBrZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIktleVNldCByZXF1ZXN0ZWQgZm9yIHVua25vd24gcGFja2FnZToiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgS2V5U2V0TWFuYWdlclNlcnZpY2Uga3NtcyA9IG1TZXR0aW5ncy5tS2V5U2V0TWFuYWdlclNlcnZpY2U7CkBAIC0xNzE0NSw3ICsxNzIyNCw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6IiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChwa2cuYXBwbGljYXRpb25JbmZvLnVpZCAhPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpCkBAIC0xNzE2NSw3ICsxNzI0NCw3IEBACiAgICAgICAgIHN5bmNocm9uaXplZChtUGFja2FnZXMpIHsKICAgICAgICAgICAgIGZpbmFsIFBhY2thZ2VQYXJzZXIuUGFja2FnZSBwa2cgPSBtUGFja2FnZXMuZ2V0KHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6IiArIHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHLCAiS2V5U2V0IHJlcXVlc3RlZCBmb3IgdW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlVua25vd24gcGFja2FnZTogIiArIHBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIElCaW5kZXIga3NoID0ga3MuZ2V0VG9rZW4oKTsKQEAgLTE3MTg1LDcgKzE3MjY0LDcgQEAKICAgICAgICAgc3luY2hyb25pemVkKG1QYWNrYWdlcykgewogICAgICAgICAgICAgZmluYWwgUGFja2FnZVBhcnNlci5QYWNrYWdlIHBrZyA9IG1QYWNrYWdlcy5nZXQocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgaWYgKHBrZyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgU2xvZy53KFRBRywgIktleVNldCByZXF1ZXN0ZWQgZm9yIHVua25vd24gcGFja2FnZToiICsgcGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJLZXlTZXQgcmVxdWVzdGVkIGZvciB1bmtub3duIHBhY2thZ2U6ICIgKyBwYWNrYWdlTmFtZSk7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVW5rbm93biBwYWNrYWdlOiAiICsgcGFja2FnZU5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSUJpbmRlciBrc2ggPSBrcy5nZXRUb2tlbigpOwpAQCAtMTczMjYsNyArMTc0MDUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBPblBlcm1pc3Npb25DaGFuZ2VMaXN0ZW5lcnMgZXh0ZW5kcyBIYW5kbGVyIHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBjbGFzcyBPblBlcm1pc3Npb25DaGFuZ2VMaXN0ZW5lcnMgZXh0ZW5kcyBIYW5kbGVyIHsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1TR19PTl9QRVJNSVNTSU9OU19DSEFOR0VEID0gMTsKIAogICAgICAgICBwcml2YXRlIGZpbmFsIFJlbW90ZUNhbGxiYWNrTGlzdDxJT25QZXJtaXNzaW9uc0NoYW5nZUxpc3RlbmVyPiBtUGVybWlzc2lvbkxpc3RlbmVycyA9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2hlbGxDb21tYW5kLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VNYW5hZ2VyU2hlbGxDb21tYW5kLmphdmEKaW5kZXggYjE4Yzg0Ni4uOTAxNzQ5ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlTWFuYWdlclNoZWxsQ29tbWFuZC5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZU1hbmFnZXJTaGVsbENvbW1hbmQuamF2YQpAQCAtNDYsNyArNDYsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuU2hlbGxDb21tYW5kOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOwotCiBpbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlNpemVkSW5wdXRTdHJlYW07CiAKQEAgLTEwOSw2ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blF1ZXJ5SW50ZW50U2VydmljZXMoKTsKICAgICAgICAgICAgICAgICBjYXNlICJxdWVyeS1yZWNlaXZlcnMiOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUXVlcnlJbnRlbnRSZWNlaXZlcnMoKTsKKyAgICAgICAgICAgICAgICBjYXNlICJzdXNwZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blN1c3BlbmQodHJ1ZSk7CisgICAgICAgICAgICAgICAgY2FzZSAidW5zdXNwZW5kIjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blN1c3BlbmQoZmFsc2UpOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVEZWZhdWx0Q29tbWFuZHMoY21kKTsKICAgICAgICAgICAgIH0KQEAgLTEyMywyOSArMTI2LDc2IEBACiAgICAgICAgIGZpbmFsIEluc3RhbGxQYXJhbXMgcGFyYW1zID0gbWFrZUluc3RhbGxQYXJhbXMoKTsKICAgICAgICAgZmluYWwgaW50IHNlc3Npb25JZCA9IGRvQ3JlYXRlU2Vzc2lvbihwYXJhbXMuc2Vzc2lvblBhcmFtcywKICAgICAgICAgICAgICAgICBwYXJhbXMuaW5zdGFsbGVyUGFja2FnZU5hbWUsIHBhcmFtcy51c2VySWQpOworICAgICAgICBib29sZWFuIGFiYW5kb25TZXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpblBhdGggPSBnZXROZXh0QXJnKCk7CisgICAgICAgICAgICBpZiAoaW5QYXRoID09IG51bGwgJiYgcGFyYW1zLnNlc3Npb25QYXJhbXMuc2l6ZUJ5dGVzID09IDApIHsKKyAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJFcnJvcjogbXVzdCBlaXRoZXIgc3BlY2lmeSBhIHBhY2thZ2Ugc2l6ZSBvciBhbiBBUEsgZmlsZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvV3JpdGVTZXNzaW9uKHNlc3Npb25JZCwgaW5QYXRoLCBwYXJhbXMuc2Vzc2lvblBhcmFtcy5zaXplQnl0ZXMsICJiYXNlLmFwayIsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qbG9nU3VjY2VzcyovKSAhPSBQYWNrYWdlSW5zdGFsbGVyLlNUQVRVU19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZG9Db21taXRTZXNzaW9uKHNlc3Npb25JZCwgZmFsc2UgLypsb2dTdWNjZXNzKi8pICE9IFBhY2thZ2VJbnN0YWxsZXIuU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFiYW5kb25TZXNzaW9uID0gZmFsc2U7CisgICAgICAgICAgICBwdy5wcmludGxuKCJTdWNjZXNzIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChhYmFuZG9uU2Vzc2lvbikgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIGRvQWJhbmRvblNlc3Npb24oc2Vzc2lvbklkLCBmYWxzZSAvKmxvZ1N1Y2Nlc3MqLyk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGlnbm9yZSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBmaW5hbCBTdHJpbmcgaW5QYXRoID0gZ2V0TmV4dEFyZygpOwotICAgICAgICBpZiAoaW5QYXRoID09IG51bGwgJiYgcGFyYW1zLnNlc3Npb25QYXJhbXMuc2l6ZUJ5dGVzID09IDApIHsKLSAgICAgICAgICAgIHB3LnByaW50bG4oIkVycm9yOiBtdXN0IGVpdGhlciBzcGVjaWZ5IGEgcGFja2FnZSBzaXplIG9yIGFuIEFQSyBmaWxlIik7CisgICAgcHJpdmF0ZSBpbnQgcnVuU3VzcGVuZChib29sZWFuIHN1c3BlbmRlZFN0YXRlKSB7CisgICAgICAgIGZpbmFsIFByaW50V3JpdGVyIHB3ID0gZ2V0T3V0UHJpbnRXcml0ZXIoKTsKKyAgICAgICAgaW50IHVzZXJJZCA9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU07CisgICAgICAgIFN0cmluZyBvcHQ7CisgICAgICAgIHdoaWxlICgob3B0ID0gZ2V0TmV4dE9wdGlvbigpKSAhPSBudWxsKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wdCkgeworICAgICAgICAgICAgICAgIGNhc2UgIi0tdXNlciI6CisgICAgICAgICAgICAgICAgICAgIHVzZXJJZCA9IFVzZXJIYW5kbGUucGFyc2VVc2VyQXJnKGdldE5leHRBcmdSZXF1aXJlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiRXJyb3I6IFVua25vd24gb3B0aW9uOiAiICsgb3B0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBnZXROZXh0QXJnKCk7CisgICAgICAgIGlmIChwYWNrYWdlTmFtZSA9PSBudWxsKSB7CisgICAgICAgICAgICBwdy5wcmludGxuKCJFcnJvcjogcGFja2FnZSBuYW1lIG5vdCBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChkb1dyaXRlU2Vzc2lvbihzZXNzaW9uSWQsIGluUGF0aCwgcGFyYW1zLnNlc3Npb25QYXJhbXMuc2l6ZUJ5dGVzLCAiYmFzZS5hcGsiKSAhPSAwKSB7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbnRlcmZhY2Uuc2V0UGFja2FnZVN1c3BlbmRlZEFzVXNlcihwYWNrYWdlTmFtZSwgc3VzcGVuZGVkU3RhdGUsIHVzZXJJZCk7CisgICAgICAgICAgICBBcHBsaWNhdGlvbkluZm8gYXBwSW5mbyA9IG1JbnRlcmZhY2UuZ2V0QXBwbGljYXRpb25JbmZvKAorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgMCwgdXNlcklkKTsKKworICAgICAgICAgICAgcHcucHJpbnRsbigiUGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiIG5ldyBzdXNwZW5kZWQgc3RhdGU6ICIKKyAgICAgICAgICAgICAgICAgICAgKyAoKGFwcEluZm8uZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19TVVNQRU5ERUQpICE9IDApKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgcHcucHJpbnRsbihlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGRvQ29tbWl0U2Vzc2lvbihzZXNzaW9uSWQpICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IHJ1bkluc3RhbGxBYmFuZG9uKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIGludCBzZXNzaW9uSWQgPSBJbnRlZ2VyLnBhcnNlSW50KGdldE5leHRBcmcoKSk7Ci0gICAgICAgIHJldHVybiBkb0FiYW5kb25TZXNzaW9uKHNlc3Npb25JZCk7CisgICAgICAgIHJldHVybiBkb0FiYW5kb25TZXNzaW9uKHNlc3Npb25JZCwgdHJ1ZSAvKmxvZ1N1Y2Nlc3MqLyk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSBpbnQgcnVuSW5zdGFsbENvbW1pdCgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgICAgICBmaW5hbCBpbnQgc2Vzc2lvbklkID0gSW50ZWdlci5wYXJzZUludChnZXROZXh0QXJnKCkpOwotICAgICAgICByZXR1cm4gZG9Db21taXRTZXNzaW9uKHNlc3Npb25JZCk7CisgICAgICAgIHJldHVybiBkb0NvbW1pdFNlc3Npb24oc2Vzc2lvbklkLCB0cnVlIC8qbG9nU3VjY2VzcyovKTsKICAgICB9CiAKICAgICBwcml2YXRlIGludCBydW5JbnN0YWxsQ3JlYXRlKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CkBAIC0xNzQsNyArMjI0LDcgQEAKICAgICAgICAgZmluYWwgaW50IHNlc3Npb25JZCA9IEludGVnZXIucGFyc2VJbnQoZ2V0TmV4dEFyZygpKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHNwbGl0TmFtZSA9IGdldE5leHRBcmcoKTsKICAgICAgICAgZmluYWwgU3RyaW5nIHBhdGggPSBnZXROZXh0QXJnKCk7Ci0gICAgICAgIHJldHVybiBkb1dyaXRlU2Vzc2lvbihzZXNzaW9uSWQsIHBhdGgsIHNpemVCeXRlcywgc3BsaXROYW1lKTsKKyAgICAgICAgcmV0dXJuIGRvV3JpdGVTZXNzaW9uKHNlc3Npb25JZCwgcGF0aCwgc2l6ZUJ5dGVzLCBzcGxpdE5hbWUsIHRydWUgLypsb2dTdWNjZXNzKi8pOwogICAgIH0KIAogICAgIHByaXZhdGUgaW50IHJ1bkxpc3QoKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKQEAgLTUyMCw3ICs1NzAsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZmluYWwgUGFja2FnZUluZm8gaW5mbyA9IG1JbnRlcmZhY2UuZ2V0UGFja2FnZUluZm8ocGFja2FnZU5hbWUsIDAsIHVzZXJJZCk7CiAgICAgICAgICAgICBpZiAoaW5mbyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnRsbigiRmFpbHVyZSAtIG5vdCBpbnN0YWxsZWQgZm9yICIgKyB1c2VySWQpOworICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIkZhaWx1cmUgW25vdCBpbnN0YWxsZWQgZm9yICIgKyB1c2VySWQgKyAiXSIpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBpc1N5c3RlbSA9CkBAIC03ODksOCArODM5LDggQEAKICAgICAgICAgcmV0dXJuIHNlc3Npb25JZDsKICAgICB9CiAKLSAgICBwcml2YXRlIGludCBkb1dyaXRlU2Vzc2lvbihpbnQgc2Vzc2lvbklkLCBTdHJpbmcgaW5QYXRoLCBsb25nIHNpemVCeXRlcywgU3RyaW5nIHNwbGl0TmFtZSkKLSAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgIHByaXZhdGUgaW50IGRvV3JpdGVTZXNzaW9uKGludCBzZXNzaW9uSWQsIFN0cmluZyBpblBhdGgsIGxvbmcgc2l6ZUJ5dGVzLCBTdHJpbmcgc3BsaXROYW1lLAorICAgICAgICAgICAgYm9vbGVhbiBsb2dTdWNjZXNzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgUHJpbnRXcml0ZXIgcHcgPSBnZXRPdXRQcmludFdyaXRlcigpOwogICAgICAgICBpZiAoIi0iLmVxdWFscyhpblBhdGgpKSB7CiAgICAgICAgICAgICBpblBhdGggPSBudWxsOwpAQCAtODMxLDcgKzg4MSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXNzaW9uLmZzeW5jKG91dCk7CiAKLSAgICAgICAgICAgIHB3LnByaW50bG4oIlN1Y2Nlc3M6IHN0cmVhbWVkICIgKyB0b3RhbCArICIgYnl0ZXMiKTsKKyAgICAgICAgICAgIGlmIChsb2dTdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgcHcucHJpbnRsbigiU3VjY2Vzczogc3RyZWFtZWQgIiArIHRvdGFsICsgIiBieXRlcyIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHB3LnByaW50bG4oIkVycm9yOiBmYWlsZWQgdG8gd3JpdGU7ICIgKyBlLmdldE1lc3NhZ2UoKSk7CkBAIC04NDMsNyArODk1LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgaW50IGRvQ29tbWl0U2Vzc2lvbihpbnQgc2Vzc2lvbklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIGludCBkb0NvbW1pdFNlc3Npb24oaW50IHNlc3Npb25JZCwgYm9vbGVhbiBsb2dTdWNjZXNzKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgZmluYWwgUHJpbnRXcml0ZXIgcHcgPSBnZXRPdXRQcmludFdyaXRlcigpOwogICAgICAgICBQYWNrYWdlSW5zdGFsbGVyLlNlc3Npb24gc2Vzc2lvbiA9IG51bGw7CiAgICAgICAgIHRyeSB7CkBAIC04NTcsMTEgKzkwOSwxMiBAQAogICAgICAgICAgICAgZmluYWwgaW50IHN0YXR1cyA9IHJlc3VsdC5nZXRJbnRFeHRyYShQYWNrYWdlSW5zdGFsbGVyLkVYVFJBX1NUQVRVUywKICAgICAgICAgICAgICAgICAgICAgUGFja2FnZUluc3RhbGxlci5TVEFUVVNfRkFJTFVSRSk7CiAgICAgICAgICAgICBpZiAoc3RhdHVzID09IFBhY2thZ2VJbnN0YWxsZXIuU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJTdWNjZXNzIik7CisgICAgICAgICAgICAgICAgaWYgKGxvZ1N1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZXNzIik7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwdy5wcmludGxuKCJGYWlsdXJlIFsiCiAgICAgICAgICAgICAgICAgICAgICAgICArIHJlc3VsdC5nZXRTdHJpbmdFeHRyYShQYWNrYWdlSW5zdGFsbGVyLkVYVFJBX1NUQVRVU19NRVNTQUdFKSArICJdIik7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnRsbigiRmFpbHVyZSBkZXRhaWxzOiAiICsgcmVzdWx0LmdldEV4dHJhcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIH0gZmluYWxseSB7CkBAIC04NjksMTQgKzkyMiwxNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSBpbnQgZG9BYmFuZG9uU2Vzc2lvbihpbnQgc2Vzc2lvbklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIGludCBkb0FiYW5kb25TZXNzaW9uKGludCBzZXNzaW9uSWQsIGJvb2xlYW4gbG9nU3VjY2VzcykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGZpbmFsIFByaW50V3JpdGVyIHB3ID0gZ2V0T3V0UHJpbnRXcml0ZXIoKTsKICAgICAgICAgUGFja2FnZUluc3RhbGxlci5TZXNzaW9uIHNlc3Npb24gPSBudWxsOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc2Vzc2lvbiA9IG5ldyBQYWNrYWdlSW5zdGFsbGVyLlNlc3Npb24oCiAgICAgICAgICAgICAgICAgICAgIG1JbnRlcmZhY2UuZ2V0UGFja2FnZUluc3RhbGxlcigpLm9wZW5TZXNzaW9uKHNlc3Npb25JZCkpOwogICAgICAgICAgICAgc2Vzc2lvbi5hYmFuZG9uKCk7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCJTdWNjZXNzIik7CisgICAgICAgICAgICBpZiAobG9nU3VjY2VzcykgeworICAgICAgICAgICAgICAgIHB3LnByaW50bG4oIlN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgSW9VdGlscy5jbG9zZVF1aWV0bHkoc2Vzc2lvbik7CkBAIC0xMDE3LDcgKzEwNzIsNyBAQAogICAgICAgICBwdy5wcmludGxuKCIgIGxpc3QgZmVhdHVyZXMiKTsKICAgICAgICAgcHcucHJpbnRsbigiICAgIFByaW50cyBhbGwgZmVhdHVyZXMgb2YgdGhlIHN5c3RlbS4iKTsKICAgICAgICAgcHcucHJpbnRsbigiICBsaXN0IGluc3RydW1lbnRhdGlvbiBbLWZdIFtUQVJHRVQtUEFDS0FHRV0iKTsKLSAgICAgICAgcHcucHJpbnRsbigiICAgIFByaW50cyBhbGwgdGVzdCBwYWNrYWdlczsgb3B0aW9uYWxseSBvbmx5IHRob3NlIHRhcmdldHRpbmcgVEFSR0VULVBBQ0tBR0UiKTsKKyAgICAgICAgcHcucHJpbnRsbigiICAgIFByaW50cyBhbGwgdGVzdCBwYWNrYWdlczsgb3B0aW9uYWxseSBvbmx5IHRob3NlIHRhcmdldGluZyBUQVJHRVQtUEFDS0FHRSIpOwogICAgICAgICBwdy5wcmludGxuKCIgICAgT3B0aW9uczoiKTsKICAgICAgICAgcHcucHJpbnRsbigiICAgICAgLWY6IGR1bXAgdGhlIG5hbWUgb2YgdGhlIC5hcGsgZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0IHBhY2thZ2UiKTsKICAgICAgICAgcHcucHJpbnRsbigiICBsaXN0IGxpYnJhcmllcyIpOwpAQCAtMTA1MSw2ICsxMTA2LDEwIEBACiAgICAgICAgIHB3LnByaW50bG4oIiAgICBQcmludHMgYWxsIHNlcnZpY2VzIHRoYXQgY2FuIGhhbmRsZSB0aGUgZ2l2ZW4gSW50ZW50LiIpOwogICAgICAgICBwdy5wcmludGxuKCIgIHF1ZXJ5LXJlY2VpdmVycyBbLS11c2VyIFVTRVJfSURdIElOVEVOVCIpOwogICAgICAgICBwdy5wcmludGxuKCIgICAgUHJpbnRzIGFsbCBicm9hZGNhc3QgcmVjZWl2ZXJzIHRoYXQgY2FuIGhhbmRsZSB0aGUgZ2l2ZW4gSW50ZW50LiIpOworICAgICAgICBwdy5wcmludGxuKCIgIHN1c3BlbmQgWy0tdXNlciBVU0VSX0lEXSBUQVJHRVQtUEFDS0FHRSIpOworICAgICAgICBwdy5wcmludGxuKCIgICAgU3VzcGVuZHMgdGhlIHNwZWNpZmllZCBwYWNrYWdlIChhcyB1c2VyKS4iKTsKKyAgICAgICAgcHcucHJpbnRsbigiICB1bnN1c3BlbmQgWy0tdXNlciBVU0VSX0lEXSBUQVJHRVQtUEFDS0FHRSIpOworICAgICAgICBwdy5wcmludGxuKCIgICAgVW5zdXNwZW5kcyB0aGUgc3BlY2lmaWVkIHBhY2thZ2UgKGFzIHVzZXIpLiIpOwogICAgICAgICBwdy5wcmludGxuKCk7CiAgICAgICAgIEludGVudC5wcmludEludGVudEFyZ3NIZWxwKHB3ICwgIiIpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZVNldHRpbmcuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZVNldHRpbmcuamF2YQppbmRleCBlN2MwZWY3Li5mMTA2YjYyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlU2V0dGluZy5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5wbTsKIAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlUGFyc2VyOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwpAQCAtNzgsNCArNzksMTEgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1NoYXJlZFVzZXIoKSB7CiAgICAgICAgIHJldHVybiBzaGFyZWRVc2VyICE9IG51bGw7CiAgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNNYXRjaChpbnQgZmxhZ3MpIHsKKyAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1NZU1RFTV9PTkxZKSAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gaXNTeXN0ZW0oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9QYWNrYWdlU2V0dGluZ0Jhc2UuamF2YQppbmRleCA3ODMyOGY1Li4xMTE3OTg4IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1BhY2thZ2VTZXR0aW5nQmFzZS5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vUGFja2FnZVNldHRpbmdCYXNlLmphdmEKQEAgLTMzMiw2ICszMzIsMTQgQEAKICAgICAgICAgbW9kaWZ5VXNlclN0YXRlKHVzZXJJZCkuaGlkZGVuID0gaGlkZGVuOwogICAgIH0KIAorICAgIGJvb2xlYW4gZ2V0U3VzcGVuZGVkKGludCB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIHJlYWRVc2VyU3RhdGUodXNlcklkKS5zdXNwZW5kZWQ7CisgICAgfQorCisgICAgdm9pZCBzZXRTdXNwZW5kZWQoYm9vbGVhbiBzdXNwZW5kZWQsIGludCB1c2VySWQpIHsKKyAgICAgICAgbW9kaWZ5VXNlclN0YXRlKHVzZXJJZCkuc3VzcGVuZGVkID0gc3VzcGVuZGVkOworICAgIH0KKwogICAgIGJvb2xlYW4gZ2V0QmxvY2tVbmluc3RhbGwoaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gcmVhZFVzZXJTdGF0ZSh1c2VySWQpLmJsb2NrVW5pbnN0YWxsOwogICAgIH0KQEAgLTM0MSw3ICszNDksNyBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0VXNlclN0YXRlKGludCB1c2VySWQsIGludCBlbmFibGVkLCBib29sZWFuIGluc3RhbGxlZCwgYm9vbGVhbiBzdG9wcGVkLAotICAgICAgICAgICAgYm9vbGVhbiBub3RMYXVuY2hlZCwgYm9vbGVhbiBoaWRkZW4sCisgICAgICAgICAgICBib29sZWFuIG5vdExhdW5jaGVkLCBib29sZWFuIGhpZGRlbiwgYm9vbGVhbiBzdXNwZW5kZWQsCiAgICAgICAgICAgICBTdHJpbmcgbGFzdERpc2FibGVBcHBDYWxsZXIsIEFycmF5U2V0PFN0cmluZz4gZW5hYmxlZENvbXBvbmVudHMsCiAgICAgICAgICAgICBBcnJheVNldDxTdHJpbmc+IGRpc2FibGVkQ29tcG9uZW50cywgYm9vbGVhbiBibG9ja1VuaW5zdGFsbCwgaW50IGRvbWFpblZlcmlmU3RhdGUsCiAgICAgICAgICAgICBpbnQgbGlua0dlbmVyYXRpb24pIHsKQEAgLTM1MSw2ICszNTksNyBAQAogICAgICAgICBzdGF0ZS5zdG9wcGVkID0gc3RvcHBlZDsKICAgICAgICAgc3RhdGUubm90TGF1bmNoZWQgPSBub3RMYXVuY2hlZDsKICAgICAgICAgc3RhdGUuaGlkZGVuID0gaGlkZGVuOworICAgICAgICBzdGF0ZS5zdXNwZW5kZWQgPSBzdXNwZW5kZWQ7CiAgICAgICAgIHN0YXRlLmxhc3REaXNhYmxlQXBwQ2FsbGVyID0gbGFzdERpc2FibGVBcHBDYWxsZXI7CiAgICAgICAgIHN0YXRlLmVuYWJsZWRDb21wb25lbnRzID0gZW5hYmxlZENvbXBvbmVudHM7CiAgICAgICAgIHN0YXRlLmRpc2FibGVkQ29tcG9uZW50cyA9IGRpc2FibGVkQ29tcG9uZW50czsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ0Jhc2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ0Jhc2UuamF2YQppbmRleCA1Y2Y5MmE5Li4yOTIxMDMyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdCYXNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5nQmFzZS5qYXZhCkBAIC00OSw2ICs0OSw3IEBACiAgICAgdm9pZCBzZXRQcml2YXRlRmxhZ3MoaW50IHBrZ1ByaXZhdGVGbGFncykgewogICAgICAgICB0aGlzLnBrZ1ByaXZhdGVGbGFncyA9IHBrZ1ByaXZhdGVGbGFncwogICAgICAgICAgICAgICAgICYgKEFwcGxpY2F0aW9uSW5mby5QUklWQVRFX0ZMQUdfUFJJVklMRUdFRAotICAgICAgICAgICAgICAgICAgICAgICAgfCBBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX0ZPUldBUkRfTE9DSyk7CisgICAgICAgICAgICAgICAgfCBBcHBsaWNhdGlvbkluZm8uUFJJVkFURV9GTEFHX0ZPUldBUkRfTE9DSworICAgICAgICAgICAgICAgIHwgQXBwbGljYXRpb25JbmZvLlBSSVZBVEVfRkxBR19SRVFVSVJFRF9GT1JfU1lTVEVNX1VTRVIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ3MuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vU2V0dGluZ3MuamF2YQppbmRleCAyMmY4ZTk2Li45ZmVmNTE1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1NldHRpbmdzLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9TZXR0aW5ncy5qYXZhCkBAIC0xNiwyMyArMTYsNDIgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIucG07CiAKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlJFQURfRVhURVJOQUxfU1RPUkFHRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLkNPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VOVElMX1VTRUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5DT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VU0VSOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRU5BQkxFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlJFQURfRVhURVJOQUxfU1RPUkFHRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLklOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfQUxXQVlTOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTkRFRklORUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUHJvY2Vzcy5TWVNURU1fVUlEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVGQVVMVF9PTkxZOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfRElTQUJMRURfQ09NUE9ORU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX1VOQVdBUkU7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qcm9jZXNzLlBBQ0tBR0VfSU5GT19HSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUHJvY2Vzcy5TWVNURU1fVUlEOworCiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QYWNrYWdlTWFuYWdlclNlcnZpY2UuREVCVUdfRE9NQUlOX1ZFUklGSUNBVElPTjsKIAogaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5Ob25OdWxsOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db21wb25lbnROYW1lOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkNvbXBvbmVudEluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VDbGVhbkl0ZW07CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlUGFyc2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlVXNlclN0YXRlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QZXJtaXNzaW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNpZ25hdHVyZTsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVyRGV2aWNlSWRlbnRpdHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwogaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CkBAIC00NywxNCArNjYsMjIgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3Muc3RvcmFnZS5TdG9yYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLnN0b3JhZ2UuVm9sdW1lSW5mbzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXRvbWljRmlsZTsKIGltcG9ydCBhbmRyb2lkLnRleHQuVGV4dFV0aWxzOworaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheU1hcDsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0b21pY0ZpbGU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nUHJpbnRlcjsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUJvb2xlYW5BcnJheTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlSW50QXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUxvbmdBcnJheTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuWG1sOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm9zLkJhY2tncm91bmRUaHJlYWQ7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuSW5zdGFsbGVyQ29ubmVjdGlvbi5JbnN0YWxsZXJFeGNlcHRpb247CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5BcnJheVV0aWxzOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuRmFzdFhtbFNlcmlhbGl6ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5JbmRlbnRpbmdQcmludFdyaXRlcjsKQEAgLTY1LDUzICs5MiwzNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QYWNrYWdlTWFuYWdlclNlcnZpY2UuRHVtcFN0YXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5wbS5QZXJtaXNzaW9uc1N0YXRlLlBlcm1pc3Npb25TdGF0ZTsKIAotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKIAogaW1wb3J0IG9yZy54bWxwdWxsLnYxLlhtbFB1bGxQYXJzZXI7CiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxTZXJpYWxpemVyOwogCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQXBwbGljYXRpb25JbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Db21wb25lbnRJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlQ2xlYW5JdGVtOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZVBhcnNlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGVybWlzc2lvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNpZ25hdHVyZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uVXNlckluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VVc2VyU3RhdGU7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlZlcmlmaWVyRGV2aWNlSWRlbnRpdHk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlSW50QXJyYXk7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKLQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwogaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkRhdGU7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci0KLWltcG9ydCBsaWJjb3JlLmlvLklvVXRpbHM7CiAKIC8qKgogICogSG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgZHluYW1pYyBzZXR0aW5ncy4KQEAgLTE5NSw2ICsyMDYsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0JMT0NLRUQgPSAiYmxvY2tlZCI7CiAgICAgLy8gTmV3IG5hbWUgZm9yIHRoZSBhYm92ZSBhdHRyaWJ1dGUuCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSElEREVOID0gImhpZGRlbiI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfU1VTUEVOREVEID0gInN1c3BlbmRlZCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfSU5TVEFMTEVEID0gImluc3QiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0JMT0NLX1VOSU5TVEFMTCA9ICJibG9ja1VuaW5zdGFsbCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRE9NQUlOX1ZFUklGSUNBVE9OX1NUQVRFID0gImRvbWFpblZlcmlmaWNhdGlvblN0YXR1cyI7CkBAIC00MjAsNyArNDMyLDcgQEAKICAgICBib29sZWFuIGRpc2FibGVTeXN0ZW1QYWNrYWdlTFB3KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIHAgPSBtUGFja2FnZXMuZ2V0KG5hbWUpOwogICAgICAgICBpZihwID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFBhY2thZ2VNYW5hZ2VyU2VydmljZS5UQUcsICJQYWNrYWdlOiIrbmFtZSsiIGlzIG5vdCBhbiBpbnN0YWxsZWQgcGFja2FnZSIpOworICAgICAgICAgICAgTG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIlBhY2thZ2UgIiArIG5hbWUgKyAiIGlzIG5vdCBhbiBpbnN0YWxsZWQgcGFja2FnZSIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGZpbmFsIFBhY2thZ2VTZXR0aW5nIGRwID0gbURpc2FibGVkU3lzUGFja2FnZXMuZ2V0KG5hbWUpOwpAQCAtNDQ1LDcgKzQ1Nyw3IEBACiAgICAgUGFja2FnZVNldHRpbmcgZW5hYmxlU3lzdGVtUGFja2FnZUxQdyhTdHJpbmcgbmFtZSkgewogICAgICAgICBQYWNrYWdlU2V0dGluZyBwID0gbURpc2FibGVkU3lzUGFja2FnZXMuZ2V0KG5hbWUpOwogICAgICAgICBpZihwID09IG51bGwpIHsKLSAgICAgICAgICAgIExvZy53KFBhY2thZ2VNYW5hZ2VyU2VydmljZS5UQUcsICJQYWNrYWdlOiIrbmFtZSsiIGlzIG5vdCBkaXNhYmxlZCIpOworICAgICAgICAgICAgTG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIlBhY2thZ2UgIiArIG5hbWUgKyAiIGlzIG5vdCBkaXNhYmxlZCIpOwogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KICAgICAgICAgLy8gUmVzZXQgZmxhZyBpbiBBcHBsaWNhdGlvbkluZm8gb2JqZWN0CkBAIC02NjEsNiArNjczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsIC8vIHN0b3BwZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAvLyBub3RMYXVuY2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vIGhpZGRlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vIHN1c3BlbmRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAvLyBibG9ja1VuaW5zdGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URU5UX0ZJTFRFUl9ET01BSU5fVkVSSUZJQ0FUSU9OX1NUQVRVU19VTkRFRklORUQsIDApOwpAQCAtMTMzMSw3ICsxMzQ0LDcgQEAKICAgICAgICAgICAgIHRocm93cyBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIEludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm8gaXZpID0gbmV3IEludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm8ocGFyc2VyKTsKICAgICAgICAgcGFja2FnZVNldHRpbmcuc2V0SW50ZW50RmlsdGVyVmVyaWZpY2F0aW9uSW5mbyhpdmkpOwotICAgICAgICBMb2cuZChUQUcsICJSZWFkIGRvbWFpbiB2ZXJpZmljYXRpb24gZm9yIHBhY2thZ2U6IiArIGl2aS5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgTG9nLmQoVEFHLCAiUmVhZCBkb21haW4gdmVyaWZpY2F0aW9uIGZvciBwYWNrYWdlOiAiICsgaXZpLmdldFBhY2thZ2VOYW1lKCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCByZWFkUmVzdG9yZWRJbnRlbnRGaWx0ZXJWZXJpZmljYXRpb25zKFhtbFB1bGxQYXJzZXIgcGFyc2VyKQpAQCAtMTQyMyw2ICsxNDM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAvLyBzdG9wcGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAgLy8gbm90TGF1bmNoZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAvLyBoaWRkZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsICAvLyBzdXNwZW5kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIC8vIGJsb2NrVW5pbnN0YWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVOVF9GSUxURVJfRE9NQUlOX1ZFUklGSUNBVElPTl9TVEFUVVNfVU5ERUZJTkVELCAwKTsKQEAgLTE0NjQsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfTkFNRSk7CiAgICAgICAgICAgICAgICAgICAgIHBzID0gbVBhY2thZ2VzLmdldChuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiTm8gcGFja2FnZSBrbm93biBmb3Igc3RvcHBlZCBwYWNrYWdlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLncoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgIk5vIHBhY2thZ2Uga25vd24gZm9yIHN0b3BwZWQgcGFja2FnZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNDg4LDYgKzE1MDIsOSBAQAogICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgaGlkZGVuU3RyID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfSElEREVOKTsKICAgICAgICAgICAgICAgICAgICAgaGlkZGVuID0gaGlkZGVuU3RyID09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGhpZGRlbiA6IEJvb2xlYW4ucGFyc2VCb29sZWFuKGhpZGRlblN0cik7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdXNwZW5kZWRTdHIgPSBwYXJzZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUUl9TVVNQRU5ERUQpOworICAgICAgICAgICAgICAgICAgICBmaW5hbCBib29sZWFuIHN1c3BlbmRlZCA9IHN1c3BlbmRlZFN0ciA9PSBudWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmYWxzZSA6IEJvb2xlYW4ucGFyc2VCb29sZWFuKHN1c3BlbmRlZFN0cik7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyBub3RMYXVuY2hlZFN0ciA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX05PVF9MQVVOQ0hFRCk7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbm90TGF1bmNoZWQgPSBzdG9wcGVkU3RyID09IG51bGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlIDogQm9vbGVhbi5wYXJzZUJvb2xlYW4obm90TGF1bmNoZWRTdHIpOwpAQCAtMTUyOCw4ICsxNTQ1LDggQEAKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHBzLnNldFVzZXJTdGF0ZSh1c2VySWQsIGVuYWJsZWQsIGluc3RhbGxlZCwgc3RvcHBlZCwgbm90TGF1bmNoZWQsIGhpZGRlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkQ2FsbGVyLCBlbmFibGVkQ29tcG9uZW50cywgZGlzYWJsZWRDb21wb25lbnRzLCBibG9ja1VuaW5zdGFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZlN0YXRlLCBsaW5rR2VuZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuZGVkLCBlbmFibGVkQ2FsbGVyLCBlbmFibGVkQ29tcG9uZW50cywgZGlzYWJsZWRDb21wb25lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrVW5pbnN0YWxsLCB2ZXJpZlN0YXRlLCBsaW5rR2VuZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lLmVxdWFscygicHJlZmVycmVkLWFjdGl2aXRpZXMiKSkgewogICAgICAgICAgICAgICAgICAgICByZWFkUHJlZmVycmVkQWN0aXZpdGllc0xQdyhwYXJzZXIsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lLmVxdWFscyhUQUdfUEVSU0lTVEVOVF9QUkVGRVJSRURfQUNUSVZJVElFUykpIHsKQEAgLTE3NjMsNiArMTc4MCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHVzdGF0ZS5zdG9wcGVkIHx8IHVzdGF0ZS5ub3RMYXVuY2hlZCB8fCAhdXN0YXRlLmluc3RhbGxlZAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdXN0YXRlLmVuYWJsZWQgIT0gQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfREVGQVVMVAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdXN0YXRlLmhpZGRlbgorICAgICAgICAgICAgICAgICAgICAgICAgfHwgdXN0YXRlLnN1c3BlbmRlZAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHVzdGF0ZS5lbmFibGVkQ29tcG9uZW50cyAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHVzdGF0ZS5lbmFibGVkQ29tcG9uZW50cy5zaXplKCkgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHVzdGF0ZS5kaXNhYmxlZENvbXBvbmVudHMgIT0gbnVsbApAQCAtMTc4Niw2ICsxODA0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHVzdGF0ZS5oaWRkZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZXIuYXR0cmlidXRlKG51bGwsIEFUVFJfSElEREVOLCAidHJ1ZSIpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh1c3RhdGUuc3VzcGVuZGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX1NVU1BFTkRFRCwgInRydWUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAodXN0YXRlLmJsb2NrVW5pbnN0YWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemVyLmF0dHJpYnV0ZShudWxsLCBBVFRSX0JMT0NLX1VOSU5TVEFMTCwgInRydWUiKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjAyMSw3ICsyMDQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFNsb2cudyhQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gcGFja2FnZSBrbm93biBmb3Igc3RvcHBlZCBwYWNrYWdlOiAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBwYWNrYWdlIGtub3duIGZvciBzdG9wcGVkIHBhY2thZ2UgIiArIG5hbWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFhtbFV0aWxzLnNraXBDdXJyZW50VGFnKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIyMzksMTEgKzIyNjAsMTEgQEAKICAgICAgICAgSm91cm5hbGVkRmlsZSBqb3VybmFsID0gbmV3IEpvdXJuYWxlZEZpbGUobVBhY2thZ2VMaXN0RmlsZW5hbWUsIHRlbXBGaWxlKTsKIAogICAgICAgICBmaW5hbCBGaWxlIHdyaXRlVGFyZ2V0ID0gam91cm5hbC5jaG9vc2VGb3JXcml0ZSgpOwotICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZzdHIgPSBudWxsOwotICAgICAgICBCdWZmZXJlZE91dHB1dFN0cmVhbSBzdHIgPSBudWxsOworICAgICAgICBGaWxlT3V0cHV0U3RyZWFtIGZzdHI7CisgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIHdyaXRlciA9IG51bGw7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBmc3RyID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0od3JpdGVUYXJnZXQpOwotICAgICAgICAgICAgc3RyID0gbmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKGZzdHIpOworICAgICAgICAgICAgd3JpdGVyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZnN0ciwgQ2hhcnNldC5kZWZhdWx0Q2hhcnNldCgpKSk7CiAgICAgICAgICAgICBGaWxlVXRpbHMuc2V0UGVybWlzc2lvbnMoZnN0ci5nZXRGRCgpLCAwNjQwLCBTWVNURU1fVUlELCBQQUNLQUdFX0lORk9fR0lEKTsKIAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CkBAIC0yMjYwLDcgKzIyODEsNyBAQAogICAgICAgICAgICAgICAgIGZpbmFsIGludFtdIGdpZHMgPSBwa2cuZ2V0UGVybWlzc2lvbnNTdGF0ZSgpLmNvbXB1dGVHaWRzKHVzZXJJZHMpOwogCiAgICAgICAgICAgICAgICAgLy8gQXZvaWQgYW55IGFwcGxpY2F0aW9uIHRoYXQgaGFzIGEgc3BhY2UgaW4gaXRzIHBhdGguCi0gICAgICAgICAgICAgICAgaWYgKGRhdGFQYXRoLmluZGV4T2YoIiAiKSA+PSAwKQorICAgICAgICAgICAgICAgIGlmIChkYXRhUGF0aC5pbmRleE9mKCcgJykgPj0gMCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgICAgICAvLyB3ZSBzdG9yZSBvbiBlYWNoIGxpbmUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igbm93OgpAQCAtMjI4Miw3ICsyMzAzLDcgQEAKICAgICAgICAgICAgICAgICBzYi5zZXRMZW5ndGgoMCk7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGFpLnBhY2thZ2VOYW1lKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiAiKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoKGludClhaS51aWQpOworICAgICAgICAgICAgICAgIHNiLmFwcGVuZChhaS51aWQpOwogICAgICAgICAgICAgICAgIHNiLmFwcGVuZChpc0RlYnVnID8gIiAxICIgOiAiIDAgIik7CiAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGRhdGFQYXRoKTsKICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIiAiKTsKQEAgLTIyOTgsMTUgKzIzMTksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJub25lIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICAgICAgICBzdHIud3JpdGUoc2IudG9TdHJpbmcoKS5nZXRCeXRlcygpKTsKKyAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKHNiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0ci5mbHVzaCgpOworICAgICAgICAgICAgd3JpdGVyLmZsdXNoKCk7CiAgICAgICAgICAgICBGaWxlVXRpbHMuc3luYyhmc3RyKTsKLSAgICAgICAgICAgIHN0ci5jbG9zZSgpOworICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCk7CiAgICAgICAgICAgICBqb3VybmFsLmNvbW1pdCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU2xvZy53dGYoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHBhY2thZ2VzLmxpc3QiLCBlKTsKLSAgICAgICAgICAgIElvVXRpbHMuY2xvc2VRdWlldGx5KHN0cik7CisgICAgICAgICAgICBJb1V0aWxzLmNsb3NlUXVpZXRseSh3cml0ZXIpOwogICAgICAgICAgICAgam91cm5hbC5yb2xsYmFjaygpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc4OSw5ICsyODEwLDkgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKFBhY2thZ2VNYW5hZ2VyU2VydmljZS5ERUJVR19QUkVGRVJSRUQpIExvZy5kKFRBRywgIlJlYWRpbmcgZGVmYXVsdCBwcmVmZXJyZWQgIiArIGYpOwotICAgICAgICAgICAgRmlsZUlucHV0U3RyZWFtIHN0ciA9IG51bGw7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBzdHIgPSBudWxsOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzdHIgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOworICAgICAgICAgICAgICAgIHN0ciA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oZikpOwogICAgICAgICAgICAgICAgIFhtbFB1bGxQYXJzZXIgcGFyc2VyID0gWG1sLm5ld1B1bGxQYXJzZXIoKTsKICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0SW5wdXQoc3RyLCBudWxsKTsKIApAQCAtMjg0Miw3ICsyODYzLDcgQEAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHRtcFBhLmNvdW50Q2F0ZWdvcmllcygpOyBpKyspIHsKICAgICAgICAgICAgIFN0cmluZyBjYXQgPSB0bXBQYS5nZXRDYXRlZ29yeShpKTsKICAgICAgICAgICAgIGlmIChjYXQuZXF1YWxzKEludGVudC5DQVRFR09SWV9ERUZBVUxUKSkgewotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFRkFVTFRfT05MWTsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBNQVRDSF9ERUZBVUxUX09OTFk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGludGVudC5hZGRDYXRlZ29yeShjYXQpOwogICAgICAgICAgICAgfQpAQCAtMjk5Miw3ICszMDEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5hZGRDYXRlZ29yeShjYXQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVGQVVMVF9PTkxZKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIE1BVENIX0RFRkFVTFRfT05MWSkgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuYWRkQ2F0ZWdvcnkoSW50ZW50LkNBVEVHT1JZX0RFRkFVTFQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoc2NoZW1lICE9IG51bGwpIHsKQEAgLTM2NDgsNyArMzY2OSw3IEBACiAgICAgICAgICAgICBpbnQgdXNlckhhbmRsZSkgewogICAgICAgICBTdHJpbmdbXSB2b2x1bWVVdWlkczsKICAgICAgICAgU3RyaW5nW10gbmFtZXM7Ci0gICAgICAgIGludFtdIHVpZHM7CisgICAgICAgIGludFtdIGFwcElkczsKICAgICAgICAgU3RyaW5nW10gc2VpbmZvczsKICAgICAgICAgaW50IHBhY2thZ2VzQ291bnQ7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CkBAIC0zNjU2LDcgKzM2NzcsNyBAQAogICAgICAgICAgICAgcGFja2FnZXNDb3VudCA9IHBhY2thZ2VzLnNpemUoKTsKICAgICAgICAgICAgIHZvbHVtZVV1aWRzID0gbmV3IFN0cmluZ1twYWNrYWdlc0NvdW50XTsKICAgICAgICAgICAgIG5hbWVzID0gbmV3IFN0cmluZ1twYWNrYWdlc0NvdW50XTsKLSAgICAgICAgICAgIHVpZHMgPSBuZXcgaW50W3BhY2thZ2VzQ291bnRdOworICAgICAgICAgICAgYXBwSWRzID0gbmV3IGludFtwYWNrYWdlc0NvdW50XTsKICAgICAgICAgICAgIHNlaW5mb3MgPSBuZXcgU3RyaW5nW3BhY2thZ2VzQ291bnRdOwogICAgICAgICAgICAgSXRlcmF0b3I8UGFja2FnZVNldHRpbmc+IHBhY2thZ2VzSXRlcmF0b3IgPSBwYWNrYWdlcy5pdGVyYXRvcigpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlc0NvdW50OyBpKyspIHsKQEAgLTM2NzAsNyArMzY5MSw3IEBACiAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZWQgYXJncyBhbmQgY2FsbCB0aGUgaW5zdGFsbGVyIGFmdGVyIG1QYWNrYWdlcyBsb2NrIGhhcyBiZWVuIHJlbGVhc2VkCiAgICAgICAgICAgICAgICAgdm9sdW1lVXVpZHNbaV0gPSBwcy52b2x1bWVVdWlkOwogICAgICAgICAgICAgICAgIG5hbWVzW2ldID0gcHMubmFtZTsKLSAgICAgICAgICAgICAgICB1aWRzW2ldID0gVXNlckhhbmRsZS5nZXRVaWQodXNlckhhbmRsZSwgcHMuYXBwSWQpOworICAgICAgICAgICAgICAgIGFwcElkc1tpXSA9IHBzLmFwcElkOwogICAgICAgICAgICAgICAgIHNlaW5mb3NbaV0gPSBwcy5wa2cuYXBwbGljYXRpb25JbmZvLnNlaW5mbzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzY3OCw3ICszNjk5LDE0IEBACiAgICAgICAgICAgICBpZiAobmFtZXNbaV0gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5zdGFsbGVyLmNyZWF0ZVVzZXJEYXRhKHZvbHVtZVV1aWRzW2ldLCBuYW1lc1tpXSwgdWlkc1tpXSwgdXNlckhhbmRsZSwgc2VpbmZvc1tpXSk7CisgICAgICAgICAgICAvLyBUT0RPOiB0cmlhZ2UgZmxhZ3MhCisgICAgICAgICAgICBmaW5hbCBpbnQgZmxhZ3MgPSBJbnN0YWxsZXIuRkxBR19DRV9TVE9SQUdFIHwgSW5zdGFsbGVyLkZMQUdfREVfU1RPUkFHRTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaW5zdGFsbGVyLmNyZWF0ZUFwcERhdGEodm9sdW1lVXVpZHNbaV0sIG5hbWVzW2ldLCB1c2VySGFuZGxlLCBmbGFncywgYXBwSWRzW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VpbmZvc1tpXSk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnN0YWxsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cudyhUQUcsICJGYWlsZWQgdG8gcHJlcGFyZSBhcHAgZGF0YSIsIGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzKSB7CiAgICAgICAgICAgICBhcHBseURlZmF1bHRQcmVmZXJyZWRBcHBzTFB3KHNlcnZpY2UsIHVzZXJIYW5kbGUpOwpAQCAtMzc3OCw2MCArMzgwNiwxMiBAQAogICAgICAgICByZXR1cm4gY21wICE9IG51bGwgPyBBcnJheXMudG9TdHJpbmcoY21wLnRvQXJyYXkoKSkgOiAiW10iOwogICAgIH0KIAotICAgIGJvb2xlYW4gaXNFbmFibGVkQW5kVmlzaWJsZUxQcihDb21wb25lbnRJbmZvIGNvbXBvbmVudEluZm8sIGludCBmbGFncywgaW50IHVzZXJJZCkgewotICAgICAgICByZXR1cm4gaXNFbmFibGVkTFByKGNvbXBvbmVudEluZm8sIGZsYWdzLCB1c2VySWQpCi0gICAgICAgICAgICAgICAgJiYgaXNWaXNpYmxlTFByKGNvbXBvbmVudEluZm8sIGZsYWdzKTsKLSAgICB9CisgICAgYm9vbGVhbiBpc0VuYWJsZWRBbmRNYXRjaExQcihDb21wb25lbnRJbmZvIGNvbXBvbmVudEluZm8sIGludCBmbGFncywgaW50IHVzZXJJZCkgeworICAgICAgICBmaW5hbCBQYWNrYWdlU2V0dGluZyBwcyA9IG1QYWNrYWdlcy5nZXQoY29tcG9uZW50SW5mby5wYWNrYWdlTmFtZSk7CisgICAgICAgIGlmIChwcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gaXNFbmFibGVkTFByKENvbXBvbmVudEluZm8gY29tcG9uZW50SW5mbywgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGlmICgoZmxhZ3MmUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIFN0cmluZyBwa2dOYW1lID0gY29tcG9uZW50SW5mby5wYWNrYWdlTmFtZTsKLSAgICAgICAgZmluYWwgUGFja2FnZVNldHRpbmcgcGFja2FnZVNldHRpbmdzID0gbVBhY2thZ2VzLmdldChwa2dOYW1lKTsKLSAgICAgICAgaWYgKFBhY2thZ2VNYW5hZ2VyU2VydmljZS5ERUJVR19TRVRUSU5HUykgewotICAgICAgICAgICAgTG9nLnYoUGFja2FnZU1hbmFnZXJTZXJ2aWNlLlRBRywgImlzRW5hYmxlZExvY2sgLSBwYWNrYWdlTmFtZSA9ICIKLSAgICAgICAgICAgICAgICAgICAgKyBjb21wb25lbnRJbmZvLnBhY2thZ2VOYW1lICsgIiBjb21wb25lbnROYW1lID0gIiArIGNvbXBvbmVudEluZm8ubmFtZSk7Ci0gICAgICAgICAgICBMb2cudihQYWNrYWdlTWFuYWdlclNlcnZpY2UuVEFHLCAiZW5hYmxlZENvbXBvbmVudHM6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBjb21wVG9TdHJpbmcocGFja2FnZVNldHRpbmdzLmdldEVuYWJsZWRDb21wb25lbnRzKHVzZXJJZCkpKTsKLSAgICAgICAgICAgIExvZy52KFBhY2thZ2VNYW5hZ2VyU2VydmljZS5UQUcsICJkaXNhYmxlZENvbXBvbmVudHM6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBjb21wVG9TdHJpbmcocGFja2FnZVNldHRpbmdzLmdldERpc2FibGVkQ29tcG9uZW50cyh1c2VySWQpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhY2thZ2VTZXR0aW5ncyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgUGFja2FnZVVzZXJTdGF0ZSB1c3RhdGUgPSBwYWNrYWdlU2V0dGluZ3MucmVhZFVzZXJTdGF0ZSh1c2VySWQpOwotICAgICAgICBpZiAoKGZsYWdzJlBhY2thZ2VNYW5hZ2VyLkdFVF9ESVNBQkxFRF9VTlRJTF9VU0VEX0NPTVBPTkVOVFMpICE9IDApIHsKLSAgICAgICAgICAgIGlmICh1c3RhdGUuZW5hYmxlZCA9PSBDT01QT05FTlRfRU5BQkxFRF9TVEFURV9ESVNBQkxFRF9VTlRJTF9VU0VEKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHVzdGF0ZS5lbmFibGVkID09IENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgfHwgdXN0YXRlLmVuYWJsZWQgPT0gQ09NUE9ORU5UX0VOQUJMRURfU1RBVEVfRElTQUJMRURfVVNFUgotICAgICAgICAgICAgICAgIHx8IHVzdGF0ZS5lbmFibGVkID09IENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RJU0FCTEVEX1VOVElMX1VTRUQKLSAgICAgICAgICAgICAgICB8fCAocGFja2FnZVNldHRpbmdzLnBrZyAhPSBudWxsICYmICFwYWNrYWdlU2V0dGluZ3MucGtnLmFwcGxpY2F0aW9uSW5mby5lbmFibGVkCi0gICAgICAgICAgICAgICAgICAgICYmIHVzdGF0ZS5lbmFibGVkID09IENPTVBPTkVOVF9FTkFCTEVEX1NUQVRFX0RFRkFVTFQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHVzdGF0ZS5lbmFibGVkQ29tcG9uZW50cyAhPSBudWxsCi0gICAgICAgICAgICAgICAgJiYgdXN0YXRlLmVuYWJsZWRDb21wb25lbnRzLmNvbnRhaW5zKGNvbXBvbmVudEluZm8ubmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1c3RhdGUuZGlzYWJsZWRDb21wb25lbnRzICE9IG51bGwKLSAgICAgICAgICAgICAgICAmJiB1c3RhdGUuZGlzYWJsZWRDb21wb25lbnRzLmNvbnRhaW5zKGNvbXBvbmVudEluZm8ubmFtZSkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY29tcG9uZW50SW5mby5lbmFibGVkOwotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc1Zpc2libGVMUHIoQ29tcG9uZW50SW5mbyBjb21wb25lbnRJbmZvLCBpbnQgZmxhZ3MpIHsKLSAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLkdFVF9FTkNSWVBUSU9OX1VOQVdBUkVfQ09NUE9ORU5UUykgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChmbGFncyAmIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0VOQ1JZUFRJT05fQVdBUkVfT05MWSkgIT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudEluZm8uZW5jcnlwdGlvbkF3YXJlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBmaW5hbCBQYWNrYWdlVXNlclN0YXRlIHVzZXJTdGF0ZSA9IHBzLnJlYWRVc2VyU3RhdGUodXNlcklkKTsKKyAgICAgICAgcmV0dXJuIHVzZXJTdGF0ZS5pc01hdGNoKGNvbXBvbmVudEluZm8sIGZsYWdzKTsKICAgICB9CiAKICAgICBTdHJpbmcgZ2V0SW5zdGFsbGVyUGFja2FnZU5hbWVMUHIoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CkBAIC00MDIyLDYgKzQwMDIsNyBAQAogICAgICAgICAgICAgICAgIHB3LnByaW50KCIsIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQocHMuZ2V0SW5zdGFsbGVkKHVzZXIuaWQpID8gIkkiIDogImkiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChwcy5nZXRIaWRkZW4odXNlci5pZCkgPyAiQiIgOiAiYiIpOworICAgICAgICAgICAgICAgIHB3LnByaW50KHBzLmdldFN1c3BlbmRlZCh1c2VyLmlkKSA/ICJTVSIgOiAic3UiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChwcy5nZXRTdG9wcGVkKHVzZXIuaWQpID8gIlMiIDogInMiKTsKICAgICAgICAgICAgICAgICBwdy5wcmludChwcy5nZXROb3RMYXVuY2hlZCh1c2VyLmlkKSA/ICJsIiA6ICJMIik7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiwiKTsKQEAgLTQyMjEsNiArNDIwMiw4IEBACiAgICAgICAgICAgICBwdy5wcmludChwcy5nZXRJbnN0YWxsZWQodXNlci5pZCkpOwogICAgICAgICAgICAgcHcucHJpbnQoIiBoaWRkZW49Iik7CiAgICAgICAgICAgICBwdy5wcmludChwcy5nZXRIaWRkZW4odXNlci5pZCkpOworICAgICAgICAgICAgcHcucHJpbnQoIiBzdXNwZW5kZWQ9Iik7CisgICAgICAgICAgICBwdy5wcmludChwcy5nZXRTdXNwZW5kZWQodXNlci5pZCkpOwogICAgICAgICAgICAgcHcucHJpbnQoIiBzdG9wcGVkPSIpOwogICAgICAgICAgICAgcHcucHJpbnQocHMuZ2V0U3RvcHBlZCh1c2VyLmlkKSk7CiAgICAgICAgICAgICBwdy5wcmludCgiIG5vdExhdW5jaGVkPSIpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vVXNlck1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMGI1OWMxNi4uY2U2YjM2OSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1VzZXJNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC02OSw2ICs2OSw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuR3VhcmRlZEJ5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLlZpc2libGVGb3JUZXN0aW5nOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQXBwT3BzU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5sb2dnaW5nLk1ldHJpY3NMb2dnZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0WG1sU2VyaWFsaXplcjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC51dGlsLlByZWNvbmRpdGlvbnM7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5YbWxVdGlsczsKQEAgLTE2Niw2ICsxNjcsMTAgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYQVRUUl9TRVJJQUwgPSAidXNlci5zZXJpYWwiOwogCisgICAgLy8gVHJvbiBjb3VudGVycworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUk9OX0dVRVNUX0NSRUFURUQgPSAidXNlcnNfZ3Vlc3RfY3JlYXRlZCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRST05fVVNFUl9DUkVBVEVEID0gInVzZXJzX3VzZXJfY3JlYXRlZCI7CisKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBQYWNrYWdlTWFuYWdlclNlcnZpY2UgbVBtOwogICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IG1QYWNrYWdlc0xvY2s7CkBAIC0yNzEsNiArMjc2LDggQEAKICAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxVc2VyUmVzdHJpY3Rpb25zTGlzdGVuZXI+IG1Vc2VyUmVzdHJpY3Rpb25zTGlzdGVuZXJzID0KICAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8PigpOwogCisgICAgcHJpdmF0ZSBmaW5hbCBMb2NrUGF0dGVyblV0aWxzIG1Mb2NrUGF0dGVyblV0aWxzOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgVXNlck1hbmFnZXJTZXJ2aWNlIHNJbnN0YW5jZTsKIAogICAgIHB1YmxpYyBzdGF0aWMgVXNlck1hbmFnZXJTZXJ2aWNlIGdldEluc3RhbmNlKCkgewpAQCAtMzE1LDYgKzMyMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgbUxvY2FsU2VydmljZSA9IG5ldyBMb2NhbFNlcnZpY2UoKTsKICAgICAgICAgTG9jYWxTZXJ2aWNlcy5hZGRTZXJ2aWNlKFVzZXJNYW5hZ2VySW50ZXJuYWwuY2xhc3MsIG1Mb2NhbFNlcnZpY2UpOworICAgICAgICBtTG9ja1BhdHRlcm5VdGlscyA9IG5ldyBMb2NrUGF0dGVyblV0aWxzKG1Db250ZXh0KTsKICAgICB9CiAKICAgICB2b2lkIHN5c3RlbVJlYWR5KCkgewpAQCAtNDUxLDcgKzQ1OSw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRDcmVkZW50aWFsT3duZXJQcm9maWxlKGludCB1c2VySGFuZGxlKSB7CiAgICAgICAgIGNoZWNrTWFuYWdlVXNlcnNQZXJtaXNzaW9uKCJnZXQgdGhlIGNyZWRlbnRpYWwgb3duZXIiKTsKLSAgICAgICAgaWYgKCFMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7CisgICAgICAgIGlmICghbUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKHVzZXJIYW5kbGUpKSB7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Vc2Vyc0xvY2spIHsKICAgICAgICAgICAgICAgICBVc2VySW5mbyBwcm9maWxlUGFyZW50ID0gZ2V0UHJvZmlsZVBhcmVudExVKHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgICAgIGlmIChwcm9maWxlUGFyZW50ICE9IG51bGwpIHsKQEAgLTUyNiw2ICs1MzQsNyBAQAogICAgICAgICBpZiAocGFyZW50SGFuZGxlICE9IG51bGwpIHsKICAgICAgICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoSW50ZW50LkFDVElPTl9NQU5BR0VEX1BST0ZJTEVfQVZBSUxBQklMSVRZX0NIQU5HRUQpOwogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhKEludGVudC5FWFRSQV9VU0VSLCBwcm9maWxlSGFuZGxlKTsKKyAgICAgICAgICAgIGludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIHByb2ZpbGVIYW5kbGUuZ2V0SWRlbnRpZmllcigpKTsKICAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFkpOwogICAgICAgICAgICAgaW50ZW50LnB1dEV4dHJhcyhleHRyYXMpOwogICAgICAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIHBhcmVudEhhbmRsZSk7CkBAIC0xMTIzLDcgKzExMzIsNyBAQAogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgY2hlY2tNYW5hZ2VVc2Vyc1Blcm1pc3Npb24oU3RyaW5nIG1lc3NhZ2UpIHsKICAgICAgICAgZmluYWwgaW50IHVpZCA9IEJpbmRlci5nZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgIGlmICh1aWQgIT0gUHJvY2Vzcy5TWVNURU1fVUlEICYmIHVpZCAhPSAwCisgICAgICAgIGlmICghVXNlckhhbmRsZS5pc1NhbWVBcHAodWlkLCBQcm9jZXNzLlNZU1RFTV9VSUQpICYmIHVpZCAhPSBQcm9jZXNzLlJPT1RfVUlECiAgICAgICAgICAgICAgICAgJiYgQWN0aXZpdHlNYW5hZ2VyLmNoZWNrQ29tcG9uZW50UGVybWlzc2lvbigKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfVVNFUlMsCiAgICAgICAgICAgICAgICAgICAgICAgICB1aWQsIC0xLCB0cnVlKSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKQEAgLTExMzEsNiArMTE0MCwyMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogRW5mb3JjZXMgdGhhdCBvbmx5IHRoZSBzeXN0ZW0gVUlEIG9yIHJvb3QncyBVSUQgKG9uIGFueSB1c2VyKSBjYW4gbWFrZSBjZXJ0YWluIGNhbGxzIHRvIHRoZQorICAgICAqIFVzZXJNYW5hZ2VyLgorICAgICAqCisgICAgICogQHBhcmFtIG1lc3NhZ2UgdXNlZCBhcyBtZXNzYWdlIGlmIFNlY3VyaXR5RXhjZXB0aW9uIGlzIHRocm93bgorICAgICAqIEB0aHJvd3MgU2VjdXJpdHlFeGNlcHRpb24gaWYgdGhlIGNhbGxlciBpcyBub3Qgc3lzdGVtIG9yIHJvb3QKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrU3lzdGVtT3JSb290KFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGZpbmFsIGludCB1aWQgPSBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpOworICAgICAgICBpZiAoIVVzZXJIYW5kbGUuaXNTYW1lQXBwKHVpZCwgUHJvY2Vzcy5TWVNURU1fVUlEKSAmJiB1aWQgIT0gUHJvY2Vzcy5ST09UX1VJRCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJPbmx5IHN5c3RlbSBtYXk6ICIgKyBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB3cml0ZUJpdG1hcExQKFVzZXJJbmZvIGluZm8sIEJpdG1hcCBiaXRtYXApIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZpbGUgZGlyID0gbmV3IEZpbGUobVVzZXJzRGlyLCBJbnRlZ2VyLnRvU3RyaW5nKGluZm8uaWQpKTsKQEAgLTE4MTUsNiArMTgzOCw3IEBACiAgICAgICAgICAgICBhZGRlZEludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIHVzZXJJZCk7CiAgICAgICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKGFkZGVkSW50ZW50LCBVc2VySGFuZGxlLkFMTCwKICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9VU0VSUyk7CisgICAgICAgICAgICBNZXRyaWNzTG9nZ2VyLmNvdW50KG1Db250ZXh0LCBpc0d1ZXN0ID8gVFJPTl9HVUVTVF9DUkVBVEVEIDogVFJPTl9VU0VSX0NSRUFURUQsIDEpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnQpOwogICAgICAgICB9CkBAIC0yMDU5LDYgKzIwODMsNyBAQAogICAgICAgICBtYW5hZ2VkUHJvZmlsZUludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFkgfAogICAgICAgICAgICAgICAgIEludGVudC5GTEFHX1JFQ0VJVkVSX0ZPUkVHUk9VTkQpOwogICAgICAgICBtYW5hZ2VkUHJvZmlsZUludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUiwgbmV3IFVzZXJIYW5kbGUocmVtb3ZlZFVzZXJJZCkpOworICAgICAgICBtYW5hZ2VkUHJvZmlsZUludGVudC5wdXRFeHRyYShJbnRlbnQuRVhUUkFfVVNFUl9IQU5ETEUsIHJlbW92ZWRVc2VySWQpOwogICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKG1hbmFnZWRQcm9maWxlSW50ZW50LCBuZXcgVXNlckhhbmRsZShwYXJlbnRVc2VySWQpLCBudWxsKTsKICAgICB9CiAKQEAgLTIwNzEsNyArMjA5Niw3IEBACiAgICAgcHVibGljIEJ1bmRsZSBnZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9uc0ZvclVzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIGlmIChVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSAhPSB1c2VySWQKICAgICAgICAgICAgICAgICB8fCAhVXNlckhhbmRsZS5pc1NhbWVBcHAoQmluZGVyLmdldENhbGxpbmdVaWQoKSwgZ2V0VWlkRm9yUGFja2FnZShwYWNrYWdlTmFtZSkpKSB7Ci0gICAgICAgICAgICBjaGVja01hbmFnZVVzZXJzUGVybWlzc2lvbigiZ2V0IGFwcGxpY2F0aW9uIHJlc3RyaWN0aW9ucyBmb3Igb3RoZXIgdXNlcnMvYXBwcyIpOworICAgICAgICAgICAgY2hlY2tTeXN0ZW1PclJvb3QoImdldCBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgZm9yIG90aGVyIHVzZXJzL2FwcHMiKTsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKG1QYWNrYWdlc0xvY2spIHsKICAgICAgICAgICAgIC8vIFJlYWQgdGhlIHJlc3RyaWN0aW9ucyBmcm9tIFhNTApAQCAtMjA4Miw3ICsyMTA3LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhTdHJpbmcgcGFja2FnZU5hbWUsIEJ1bmRsZSByZXN0cmljdGlvbnMsCiAgICAgICAgICAgICBpbnQgdXNlcklkKSB7Ci0gICAgICAgIGNoZWNrTWFuYWdlVXNlcnNQZXJtaXNzaW9uKCJzZXQgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIik7CisgICAgICAgIGNoZWNrU3lzdGVtT3JSb290KCJzZXQgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIik7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVBhY2thZ2VzTG9jaykgewogICAgICAgICAgICAgaWYgKHJlc3RyaWN0aW9ucyA9PSBudWxsIHx8IHJlc3RyaWN0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBjbGVhbkFwcFJlc3RyaWN0aW9uc0ZvclBhY2thZ2UocGFja2FnZU5hbWUsIHVzZXJJZCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1VzZXJSZXN0cmljdGlvbnNVdGlscy5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyUmVzdHJpY3Rpb25zVXRpbHMuamF2YQppbmRleCA4MTY5MDNlLi5mMGVkNzkwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BtL1VzZXJSZXN0cmljdGlvbnNVdGlscy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vVXNlclJlc3RyaWN0aW9uc1V0aWxzLmphdmEKQEAgLTMzLDYgKzMzLDggQEAKIGltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbVByb3BlcnRpZXM7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuU3Vic2NyaXB0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5TdWJzY3JpcHRpb25NYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiAKIGltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyOwpAQCAtNDAsMTAgKzQyLDExIEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogLyoqCi0gKiBVdGlsaXR5IG1ldGhvZHMgZm9yIHVlc3IgcmVzdHJpY3Rpb25zLgorICogVXRpbGl0eSBtZXRob2RzIGZvciB1c2VyIHJlc3RyaWN0aW9ucy4KICAqCiAgKiA8cD5TZWUge0BsaW5rIFVzZXJNYW5hZ2VyU2VydmljZX0gZm9yIHRoZSBtZXRob2Qgc3VmZml4ZXMuCiAgKi8KQEAgLTg4LDcgKzkxLDggQEAKICAgICAgICAgICAgIFVzZXJNYW5hZ2VyLkFMTE9XX1BBUkVOVF9QUk9GSUxFX0FQUF9MSU5LSU5HLAogICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfUkVDT1JEX0FVRElPLAogICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfQ0FNRVJBLAotICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfUlVOX0lOX0JBQ0tHUk9VTkQKKyAgICAgICAgICAgIFVzZXJNYW5hZ2VyLkRJU0FMTE9XX1JVTl9JTl9CQUNLR1JPVU5ELAorICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfREFUQV9ST0FNSU5HCiAgICAgKTsKIAogICAgIC8qKgpAQCAtMTEzLDcgKzExNyw4IEBACiAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19TTVMsCiAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19GVU4sCiAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19TQUZFX0JPT1QsCi0gICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19DUkVBVEVfV0lORE9XUworICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfQ1JFQVRFX1dJTkRPV1MsCisgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19EQVRBX1JPQU1JTkcKICAgICApOwogCiAgICAgLyoqCkBAIC0yMDksMTEgKzIxNCwxMyBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhIHJlc3RyaWN0aW9uIGlzIHNldHRhYmxlIGJ5IHByb2ZpbGUgb3duZXIuCisgICAgICogQHJldHVybiB0cnVlIGlmIGEgcmVzdHJpY3Rpb24gaXMgc2V0dGFibGUgYnkgcHJvZmlsZSBvd25lci4gIE5vdGUgaXQgdGFrZXMgYSB1c2VyIElEIGJlY2F1c2UKKyAgICAgKiBzb21lIHJlc3RyaWN0aW9ucyBjYW4gYmUgY2hhbmdlZCBieSBQTyBvbmx5IHdoZW4gaXQncyBydW5uaW5nIG9uIHRoZSBzeXN0ZW0gdXNlci4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuUHJvZmlsZU93bmVyQ2hhbmdlKFN0cmluZyByZXN0cmljdGlvbikgewotICAgICAgICByZXR1cm4gIShJTU1VVEFCTEVfQllfT1dORVJTLmNvbnRhaW5zKHJlc3RyaWN0aW9uKQotICAgICAgICAgICAgICAgIHx8IERFVklDRV9PV05FUl9PTkxZX1JFU1RSSUNUSU9OUy5jb250YWlucyhyZXN0cmljdGlvbikpOworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjYW5Qcm9maWxlT3duZXJDaGFuZ2UoU3RyaW5nIHJlc3RyaWN0aW9uLCBpbnQgdXNlcklkKSB7CisgICAgICAgIHJldHVybiAhSU1NVVRBQkxFX0JZX09XTkVSUy5jb250YWlucyhyZXN0cmljdGlvbikKKyAgICAgICAgICAgICAgICAmJiAhKHVzZXJJZCAhPSBVc2VySGFuZGxlLlVTRVJfU1lTVEVNCisgICAgICAgICAgICAgICAgICAgICYmIERFVklDRV9PV05FUl9PTkxZX1JFU1RSSUNUSU9OUy5jb250YWlucyhyZXN0cmljdGlvbikpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMzEzLDYgKzMyMCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5XSUZJX05FVFdPUktTX0FWQUlMQUJMRV9OT1RJRklDQVRJT05fT04sIDAsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVc2VyTWFuYWdlci5ESVNBTExPV19EQVRBX1JPQU1JTkc6CisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRElTQUxMT1dfREFUQV9ST0FNSU5HIHVzZXIgcmVzdHJpY3Rpb24gaXMgc2V0LgorCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdWx0aSBzaW0gZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgU3Vic2NyaXB0aW9uTWFuYWdlciBzdWJzY3JpcHRpb25NYW5hZ2VyID0gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0PFN1YnNjcmlwdGlvbkluZm8+IHN1YnNjcmlwdGlvbkluZm9MaXN0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25NYW5hZ2VyLmdldEFjdGl2ZVN1YnNjcmlwdGlvbkluZm9MaXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uSW5mb0xpc3QgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3Vic2NyaXB0aW9uSW5mbyBzdWJJbmZvIDogc3Vic2NyaXB0aW9uSW5mb0xpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwucHV0U3RyaW5nRm9yVXNlcihjciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuR2xvYmFsLkRBVEFfUk9BTUlORworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdWJJbmZvLmdldFN1YnNjcmlwdGlvbklkKCksICIwIiwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBzaW0gZGV2aWNlLgorICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5HbG9iYWwucHV0U3RyaW5nRm9yVXNlcihjciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLkdsb2JhbC5EQVRBX1JPQU1JTkcsICIwIiwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFVzZXJNYW5hZ2VyLkRJU0FMTE9XX1NIQVJFX0xPQ0FUSU9OOgogICAgICAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU2VjdXJlLnB1dEludEZvclVzZXIoY3IsCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9HbG9iYWxBY3Rpb25zLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9HbG9iYWxBY3Rpb25zLmphdmEKaW5kZXggYzg1MjNjOS4uYTBmMjBhYSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvR2xvYmFsQWN0aW9ucy5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L0dsb2JhbEFjdGlvbnMuamF2YQpAQCAtMjc4LDcgKzI3OCw3IEBACiAgICAgICAgICAgICB9IGVsc2UgaWYgKEdMT0JBTF9BQ1RJT05fS0VZX0JVR1JFUE9SVC5lcXVhbHMoYWN0aW9uS2V5KSkgewogICAgICAgICAgICAgICAgIGlmIChTZXR0aW5ncy5HbG9iYWwuZ2V0SW50KG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgU2V0dGluZ3MuR2xvYmFsLkJVR1JFUE9SVF9JTl9QT1dFUl9NRU5VLCAwKSAhPSAwICYmIGlzQ3VycmVudFVzZXJPd25lcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1JdGVtcy5hZGQoZ2V0QnVnUmVwb3J0QWN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBtSXRlbXMuYWRkKG5ldyBCdWdSZXBvcnRBY3Rpb24oKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChHTE9CQUxfQUNUSU9OX0tFWV9TSUxFTlQuZXF1YWxzKGFjdGlvbktleSkpIHsKICAgICAgICAgICAgICAgICBpZiAobVNob3dTaWxlbnRUb2dnbGUpIHsKQEAgLTM2Nyw2MCArMzY3LDY3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIEFjdGlvbiBnZXRCdWdSZXBvcnRBY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU2luZ2xlUHJlc3NBY3Rpb24oY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kcmF3YWJsZS5pY19sb2NrX2J1Z3JlcG9ydCwKLSAgICAgICAgICAgICAgICBSLnN0cmluZy5idWdyZXBvcnRfdGl0bGUpIHsKKyAgICBwcml2YXRlIGNsYXNzIEJ1Z1JlcG9ydEFjdGlvbiBleHRlbmRzIFNpbmdsZVByZXNzQWN0aW9uIGltcGxlbWVudHMgTG9uZ1ByZXNzQWN0aW9uIHsKIAotICAgICAgICAgICAgcHVibGljIHZvaWQgb25QcmVzcygpIHsKLSAgICAgICAgICAgICAgICBBbGVydERpYWxvZy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihtQ29udGV4dCk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRUaXRsZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5idWdyZXBvcnRfdGl0bGUpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0TWVzc2FnZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5idWdyZXBvcnRfbWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXROZWdhdGl2ZUJ1dHRvbihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5jYW5jZWwsIG51bGwpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0UG9zaXRpdmVCdXR0b24oY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcucmVwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWN0dWFsbHkgdHJpZ2dlciB0aGUgYnVncmVwb3J0IGlmIHdlIGFyZSBydW5uaW5nIHN0YWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0cyB2aWEgbW9ua2V5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBY3Rpdml0eU1hbmFnZXIuaXNVc2VyQU1vbmtleSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbGl0dGxlIGRlbGF5IGJlZm9yZSBleGVjdXRpbmcsIHRvIGdpdmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpYWxvZyBhIGNoYW5jZSB0byBnbyBhd2F5IGJlZm9yZSBpdCB0YWtlcyBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNjcmVlbnNob3QuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnBvc3REZWxheWVkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBPdmVycmlkZSBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIFRPRE86IHNlbGVjdCAncHJvZ3Jlc3MnIGZsYWcgYWNjb3JkaW5nIHRvIG1lbnUgY2hvaWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXF1ZXN0QnVnUmVwb3J0KHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nIGRpYWxvZyA9IGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmdldFdpbmRvdygpLnNldFR5cGUoV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9LRVlHVUFSRF9ESUFMT0cpOwotICAgICAgICAgICAgICAgIGRpYWxvZy5zaG93KCk7CisgICAgICAgIHB1YmxpYyBCdWdSZXBvcnRBY3Rpb24oKSB7CisgICAgICAgICAgICBzdXBlcihjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRyYXdhYmxlLmljX2xvY2tfYnVncmVwb3J0LCBSLnN0cmluZy5idWdyZXBvcnRfdGl0bGUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uUHJlc3MoKSB7CisgICAgICAgICAgICAvLyBkb24ndCBhY3R1YWxseSB0cmlnZ2VyIHRoZSBidWdyZXBvcnQgaWYgd2UgYXJlIHJ1bm5pbmcgc3RhYmlsaXR5CisgICAgICAgICAgICAvLyB0ZXN0cyB2aWEgbW9ua2V5CisgICAgICAgICAgICBpZiAoQWN0aXZpdHlNYW5hZ2VyLmlzVXNlckFNb25rZXkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEFkZCBhIGxpdHRsZSBkZWxheSBiZWZvcmUgZXhlY3V0aW5nLCB0byBnaXZlIHRoZQorICAgICAgICAgICAgLy8gZGlhbG9nIGEgY2hhbmNlIHRvIGdvIGF3YXkgYmVmb3JlIGl0IHRha2VzIGEKKyAgICAgICAgICAgIC8vIHNjcmVlbnNob3QuCisgICAgICAgICAgICBtSGFuZGxlci5wb3N0RGVsYXllZChuZXcgUnVubmFibGUoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGFrZSBhbiAiaW50ZXJhY3RpdmUiIGJ1Z3JlcG9ydC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkucmVxdWVzdEJ1Z1JlcG9ydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyLkJVR1JFUE9SVF9PUFRJT05fSU5URVJBQ1RJVkUpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgNTAwKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaG93RHVyaW5nS2V5Z3VhcmQoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIHNob3dCZWZvcmVQcm92aXNpb25pbmcoKSB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkxvbmdQcmVzcygpIHsKKyAgICAgICAgICAgIC8vIGRvbid0IGFjdHVhbGx5IHRyaWdnZXIgdGhlIGJ1Z3JlcG9ydCBpZiB3ZSBhcmUgcnVubmluZyBzdGFiaWxpdHkKKyAgICAgICAgICAgIC8vIHRlc3RzIHZpYSBtb25rZXkKKyAgICAgICAgICAgIGlmIChBY3Rpdml0eU1hbmFnZXIuaXNVc2VyQU1vbmtleSgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0cmluZy5idWdyZXBvcnRfc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQuVkVSU0lPTi5SRUxFQVNFLAotICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGQuSUQpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAvLyBUYWtlIGEgImZ1bGwiIGJ1Z3JlcG9ydC4KKyAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJlcXVlc3RCdWdSZXBvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXIuQlVHUkVQT1JUX09QVElPTl9GVUxMKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaG93RHVyaW5nS2V5Z3VhcmQoKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBzaG93QmVmb3JlUHJvdmlzaW9uaW5nKCkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RhdHVzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1Db250ZXh0LmdldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuYnVncmVwb3J0X3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgQnVpbGQuVkVSU0lPTi5SRUxFQVNFLAorICAgICAgICAgICAgICAgICAgICBCdWlsZC5JRCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIEFjdGlvbiBnZXRTZXR0aW5nc0FjdGlvbigpIHsKQEAgLTc0MiwxMyArNzQ5LDYgQEAKICAgICAgICAgICAgIG1JY29uID0gaWNvbjsKICAgICAgICAgfQogCi0gICAgICAgIHByb3RlY3RlZCBTaW5nbGVQcmVzc0FjdGlvbihpbnQgaWNvblJlc0lkLCBDaGFyU2VxdWVuY2UgbWVzc2FnZSkgewotICAgICAgICAgICAgbUljb25SZXNJZCA9IGljb25SZXNJZDsKLSAgICAgICAgICAgIG1NZXNzYWdlUmVzSWQgPSAwOwotICAgICAgICAgICAgbU1lc3NhZ2UgPSBtZXNzYWdlOwotICAgICAgICAgICAgbUljb24gPSBudWxsOwotICAgICAgICB9Ci0KICAgICAgICAgcHVibGljIGJvb2xlYW4gaXNFbmFibGVkKCkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L1Bob25lV2luZG93TWFuYWdlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEKaW5kZXggYjlhOWQ2ZS4uOWM2MjliZCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvUGhvbmVXaW5kb3dNYW5hZ2VyLmphdmEKQEAgLTE4LDYgKzE4LDggQEAKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uLlVJX01PREVfVFlQRV9DQVI7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbi5VSV9NT0RFX1RZUEVfTUFTSzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLio7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LldpbmRvd01hbmFnZXJGdW5jcy5MSURfQUJTRU5UOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlclBvbGljeS5XaW5kb3dNYW5hZ2VyRnVuY3MuTElEX09QRU47CkBAIC0zMTMsOCArMzE1LDEwIEBACiAgICAgYm9vbGVhbiBtQ2FuSGlkZU5hdmlnYXRpb25CYXIgPSBmYWxzZTsKICAgICBib29sZWFuIG1OYXZpZ2F0aW9uQmFyQ2FuTW92ZSA9IGZhbHNlOyAvLyBjYW4gdGhlIG5hdmlnYXRpb24gYmFyIGV2ZXIgbW92ZSB0byB0aGUgc2lkZT8KICAgICBib29sZWFuIG1OYXZpZ2F0aW9uQmFyT25Cb3R0b20gPSB0cnVlOyAvLyBpcyB0aGUgbmF2aWdhdGlvbiBiYXIgb24gdGhlIGJvdHRvbSAqcmlnaHQgbm93Kj8KLSAgICBpbnRbXSBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uID0gbmV3IGludFs0XTsKLSAgICBpbnRbXSBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb24gPSBuZXcgaW50WzRdOworICAgIGludFtdIG1OYXZpZ2F0aW9uQmFySGVpZ2h0Rm9yUm90YXRpb25EZWZhdWx0ID0gbmV3IGludFs0XTsKKyAgICBpbnRbXSBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25EZWZhdWx0ID0gbmV3IGludFs0XTsKKyAgICBpbnRbXSBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uSW5DYXJNb2RlID0gbmV3IGludFs0XTsKKyAgICBpbnRbXSBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25JbkNhck1vZGUgPSBuZXcgaW50WzRdOwogCiAgICAgLy8gV2hldGhlciB0byBhbGxvdyBkb2NrIGFwcHMgd2l0aCBNRVRBREFUQV9ET0NLX0hPTUUgdG8gdGVtcG9yYXJpbHkgdGFrZSBvdmVyIHRoZSBIb21lIGtleS4KICAgICAvLyBUaGlzIGlzIGZvciBjYXIgZG9jayBhbmQgdGhpcyBpcyB1cGRhdGVkIGZyb20gcmVzb3VyY2UuCkBAIC0xNjc0LDIwICsxNjc4LDM3IEBACiAgICAgICAgICAgICAgICAgcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLnN0YXR1c19iYXJfaGVpZ2h0KTsKIAogICAgICAgICAvLyBIZWlnaHQgb2YgdGhlIG5hdmlnYXRpb24gYmFyIHdoZW4gcHJlc2VudGVkIGhvcml6b250YWxseSBhdCBib3R0b20KLSAgICAgICAgbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvblttUG9ydHJhaXRSb3RhdGlvbl0gPQotICAgICAgICBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uW21VcHNpZGVEb3duUm90YXRpb25dID0KKyAgICAgICAgbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbkRlZmF1bHRbbVBvcnRyYWl0Um90YXRpb25dID0KKyAgICAgICAgbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbkRlZmF1bHRbbVVwc2lkZURvd25Sb3RhdGlvbl0gPQogICAgICAgICAgICAgICAgIHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5uYXZpZ2F0aW9uX2Jhcl9oZWlnaHQpOwotICAgICAgICBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uW21MYW5kc2NhcGVSb3RhdGlvbl0gPQotICAgICAgICBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uW21TZWFzY2FwZVJvdGF0aW9uXSA9IHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgIG1OYXZpZ2F0aW9uQmFySGVpZ2h0Rm9yUm90YXRpb25EZWZhdWx0W21MYW5kc2NhcGVSb3RhdGlvbl0gPQorICAgICAgICBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uRGVmYXVsdFttU2Vhc2NhcGVSb3RhdGlvbl0gPSByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4ubmF2aWdhdGlvbl9iYXJfaGVpZ2h0X2xhbmRzY2FwZSk7CiAKICAgICAgICAgLy8gV2lkdGggb2YgdGhlIG5hdmlnYXRpb24gYmFyIHdoZW4gcHJlc2VudGVkIHZlcnRpY2FsbHkgYWxvbmcgb25lIHNpZGUKLSAgICAgICAgbU5hdmlnYXRpb25CYXJXaWR0aEZvclJvdGF0aW9uW21Qb3J0cmFpdFJvdGF0aW9uXSA9Ci0gICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvblttVXBzaWRlRG93blJvdGF0aW9uXSA9Ci0gICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvblttTGFuZHNjYXBlUm90YXRpb25dID0KLSAgICAgICAgbU5hdmlnYXRpb25CYXJXaWR0aEZvclJvdGF0aW9uW21TZWFzY2FwZVJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvbkRlZmF1bHRbbVBvcnRyYWl0Um90YXRpb25dID0KKyAgICAgICAgbU5hdmlnYXRpb25CYXJXaWR0aEZvclJvdGF0aW9uRGVmYXVsdFttVXBzaWRlRG93blJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvbkRlZmF1bHRbbUxhbmRzY2FwZVJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvbkRlZmF1bHRbbVNlYXNjYXBlUm90YXRpb25dID0KICAgICAgICAgICAgICAgICByZXMuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4ubmF2aWdhdGlvbl9iYXJfd2lkdGgpOwogCisgICAgICAgIC8vIEhlaWdodCBvZiB0aGUgbmF2aWdhdGlvbiBiYXIgd2hlbiBwcmVzZW50ZWQgaG9yaXpvbnRhbGx5IGF0IGJvdHRvbQorICAgICAgICBtTmF2aWdhdGlvbkJhckhlaWdodEZvclJvdGF0aW9uSW5DYXJNb2RlW21Qb3J0cmFpdFJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFySGVpZ2h0Rm9yUm90YXRpb25JbkNhck1vZGVbbVVwc2lkZURvd25Sb3RhdGlvbl0gPQorICAgICAgICAgICAgICAgIHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLm5hdmlnYXRpb25fYmFyX2hlaWdodF9jYXJfbW9kZSk7CisgICAgICAgIG1OYXZpZ2F0aW9uQmFySGVpZ2h0Rm9yUm90YXRpb25JbkNhck1vZGVbbUxhbmRzY2FwZVJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFySGVpZ2h0Rm9yUm90YXRpb25JbkNhck1vZGVbbVNlYXNjYXBlUm90YXRpb25dID0gcmVzLmdldERpbWVuc2lvblBpeGVsU2l6ZSgKKyAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLm5hdmlnYXRpb25fYmFyX2hlaWdodF9sYW5kc2NhcGVfY2FyX21vZGUpOworCisgICAgICAgIC8vIFdpZHRoIG9mIHRoZSBuYXZpZ2F0aW9uIGJhciB3aGVuIHByZXNlbnRlZCB2ZXJ0aWNhbGx5IGFsb25nIG9uZSBzaWRlCisgICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvbkluQ2FyTW9kZVttUG9ydHJhaXRSb3RhdGlvbl0gPQorICAgICAgICBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25JbkNhck1vZGVbbVVwc2lkZURvd25Sb3RhdGlvbl0gPQorICAgICAgICBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25JbkNhck1vZGVbbUxhbmRzY2FwZVJvdGF0aW9uXSA9CisgICAgICAgIG1OYXZpZ2F0aW9uQmFyV2lkdGhGb3JSb3RhdGlvbkluQ2FyTW9kZVttU2Vhc2NhcGVSb3RhdGlvbl0gPQorICAgICAgICAgICAgICAgIHJlcy5nZXREaW1lbnNpb25QaXhlbFNpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmRpbWVuLm5hdmlnYXRpb25fYmFyX3dpZHRoX2Nhcl9tb2RlKTsKKwogICAgICAgICAvLyBTeXN0ZW1VSSAoc3RhdHVzIGJhcikgbGF5b3V0IHBvbGljeQogICAgICAgICBpbnQgc2hvcnRTaXplRHAgPSBzaG9ydFNpemUgKiBEaXNwbGF5TWV0cmljcy5ERU5TSVRZX0RFRkFVTFQgLyBkZW5zaXR5OwogICAgICAgICBpbnQgbG9uZ1NpemVEcCA9IGxvbmdTaXplICogRGlzcGxheU1ldHJpY3MuREVOU0lUWV9ERUZBVUxUIC8gZGVuc2l0eTsKQEAgLTIwNjMsNyArMjA4NCw4IEBACiAgICAgICAgICAgICAgICAgYXR0cnMuc3VidHJlZVN5c3RlbVVpVmlzaWJpbGl0eSB8PSBWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9ISURFX05BVklHQVRJT047CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKGF0dHJzLmZsYWdzICYgRkxBR19EUkFXU19TWVNURU1fQkFSX0JBQ0tHUk9VTkRTKSAhPSAwCi0gICAgICAgICAgICAgICAgICAgIHx8IG1Gb3JjZVdpbmRvd0RyYXdzU3RhdHVzQmFyQmFja2dyb3VuZCkgeworICAgICAgICAgICAgICAgICAgICB8fCAobUZvcmNlV2luZG93RHJhd3NTdGF0dXNCYXJCYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXR0cnMuaGVpZ2h0ID09IE1BVENIX1BBUkVOVCAmJiBhdHRycy53aWR0aCA9PSBNQVRDSF9QQVJFTlQpKSB7CiAgICAgICAgICAgICAgICAgYXR0cnMuc3VidHJlZVN5c3RlbVVpVmlzaWJpbGl0eSB8PSBWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9GVUxMU0NSRUVOOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMjM4LDQyICsyMjYwLDYxIEBACiAgICAgICAgIHJldHVybiB3aW5kb3dUeXBlVG9MYXllckx3KFRZUEVfU1RBVFVTX0JBUik7CiAgICAgfQogCisgICAgcHJpdmF0ZSBpbnQgZ2V0TmF2aWdhdGlvbkJhcldpZHRoKGludCByb3RhdGlvbiwgaW50IHVpTW9kZSkgeworICAgICAgICBpZiAoKHVpTW9kZSAmIFVJX01PREVfVFlQRV9NQVNLKSA9PSBVSV9NT0RFX1RZUEVfQ0FSKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdmlnYXRpb25CYXJXaWR0aEZvclJvdGF0aW9uSW5DYXJNb2RlW3JvdGF0aW9uXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25EZWZhdWx0W3JvdGF0aW9uXTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Tm9uRGVjb3JEaXNwbGF5V2lkdGgoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbikgeworICAgIHB1YmxpYyBpbnQgZ2V0Tm9uRGVjb3JEaXNwbGF5V2lkdGgoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbiwKKyAgICAgICAgICAgIGludCB1aU1vZGUpIHsKICAgICAgICAgaWYgKG1IYXNOYXZpZ2F0aW9uQmFyKSB7CiAgICAgICAgICAgICAvLyBGb3IgYSBiYXNpYyBuYXZpZ2F0aW9uIGJhciwgd2hlbiB3ZSBhcmUgaW4gbGFuZHNjYXBlIG1vZGUgd2UgcGxhY2UKICAgICAgICAgICAgIC8vIHRoZSBuYXZpZ2F0aW9uIGJhciB0byB0aGUgc2lkZS4KICAgICAgICAgICAgIGlmIChtTmF2aWdhdGlvbkJhckNhbk1vdmUgJiYgZnVsbFdpZHRoID4gZnVsbEhlaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmdWxsV2lkdGggLSBtTmF2aWdhdGlvbkJhcldpZHRoRm9yUm90YXRpb25bcm90YXRpb25dOworICAgICAgICAgICAgICAgIHJldHVybiBmdWxsV2lkdGggLSBnZXROYXZpZ2F0aW9uQmFyV2lkdGgocm90YXRpb24sIHVpTW9kZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZ1bGxXaWR0aDsKICAgICB9CiAKKyAgICBwcml2YXRlIGludCBnZXROYXZpZ2F0aW9uQmFySGVpZ2h0KGludCByb3RhdGlvbiwgaW50IHVpTW9kZSkgeworICAgICAgICBpZiAoKHVpTW9kZSAmIFVJX01PREVfVFlQRV9NQVNLKSA9PSBVSV9NT0RFX1RZUEVfQ0FSKSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbkluQ2FyTW9kZVtyb3RhdGlvbl07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbkRlZmF1bHRbcm90YXRpb25dOworICAgICAgICB9CisgICAgfQorCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXROb25EZWNvckRpc3BsYXlIZWlnaHQoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbikgeworICAgIHB1YmxpYyBpbnQgZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24sCisgICAgICAgICAgICBpbnQgdWlNb2RlKSB7CiAgICAgICAgIGlmIChtSGFzTmF2aWdhdGlvbkJhcikgewogICAgICAgICAgICAgLy8gRm9yIGEgYmFzaWMgbmF2aWdhdGlvbiBiYXIsIHdoZW4gd2UgYXJlIGluIHBvcnRyYWl0IG1vZGUgd2UgcGxhY2UKICAgICAgICAgICAgIC8vIHRoZSBuYXZpZ2F0aW9uIGJhciB0byB0aGUgYm90dG9tLgogICAgICAgICAgICAgaWYgKCFtTmF2aWdhdGlvbkJhckNhbk1vdmUgfHwgZnVsbFdpZHRoIDwgZnVsbEhlaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmdWxsSGVpZ2h0IC0gbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbltyb3RhdGlvbl07CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxIZWlnaHQgLSBnZXROYXZpZ2F0aW9uQmFySGVpZ2h0KHJvdGF0aW9uLCB1aU1vZGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmdWxsSGVpZ2h0OwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0Q29uZmlnRGlzcGxheVdpZHRoKGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24pIHsKLSAgICAgICAgcmV0dXJuIGdldE5vbkRlY29yRGlzcGxheVdpZHRoKGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgcm90YXRpb24pOworICAgIHB1YmxpYyBpbnQgZ2V0Q29uZmlnRGlzcGxheVdpZHRoKGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24sIGludCB1aU1vZGUpIHsKKyAgICAgICAgcmV0dXJuIGdldE5vbkRlY29yRGlzcGxheVdpZHRoKGZ1bGxXaWR0aCwgZnVsbEhlaWdodCwgcm90YXRpb24sIHVpTW9kZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRDb25maWdEaXNwbGF5SGVpZ2h0KGludCBmdWxsV2lkdGgsIGludCBmdWxsSGVpZ2h0LCBpbnQgcm90YXRpb24pIHsKKyAgICBwdWJsaWMgaW50IGdldENvbmZpZ0Rpc3BsYXlIZWlnaHQoaW50IGZ1bGxXaWR0aCwgaW50IGZ1bGxIZWlnaHQsIGludCByb3RhdGlvbiwgaW50IHVpTW9kZSkgewogICAgICAgICAvLyBUaGVyZSBpcyBhIHNlcGFyYXRlIHN0YXR1cyBiYXIgYXQgdGhlIHRvcCBvZiB0aGUgZGlzcGxheS4gIFdlIGRvbid0IGNvdW50IHRoYXQgYXMgcGFydAogICAgICAgICAvLyBvZiB0aGUgZml4ZWQgZGVjb3IsIHNpbmNlIGl0IGNhbiBoaWRlOyBob3dldmVyLCBmb3IgcHVycG9zZXMgb2YgY29uZmlndXJhdGlvbnMsCiAgICAgICAgIC8vIHdlIGRvIHdhbnQgdG8gZXhjbHVkZSBpdCBzaW5jZSBhcHBsaWNhdGlvbnMgY2FuJ3QgZ2VuZXJhbGx5IHVzZSB0aGF0IHBhcnQKICAgICAgICAgLy8gb2YgdGhlIHNjcmVlbi4KLSAgICAgICAgcmV0dXJuIGdldE5vbkRlY29yRGlzcGxheUhlaWdodChmdWxsV2lkdGgsIGZ1bGxIZWlnaHQsIHJvdGF0aW9uKSAtIG1TdGF0dXNCYXJIZWlnaHQ7CisgICAgICAgIHJldHVybiBnZXROb25EZWNvckRpc3BsYXlIZWlnaHQoCisgICAgICAgICAgICAgICAgZnVsbFdpZHRoLCBmdWxsSGVpZ2h0LCByb3RhdGlvbiwgdWlNb2RlKSAtIG1TdGF0dXNCYXJIZWlnaHQ7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0yODc4LDcgKzI5MTksNyBAQAogICAgICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9TTEFTSCAmJiBldmVudC5pc01ldGFQcmVzc2VkKCkpIHsKICAgICAgICAgICAgIGlmIChkb3duKSB7CiAgICAgICAgICAgICAgICAgaWYgKHJlcGVhdENvdW50ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvd0tleWJvYXJkU2hvcnRjdXRzTWVudSgpOworICAgICAgICAgICAgICAgICAgICB0b2dnbGVLZXlib2FyZFNob3J0Y3V0c01lbnUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0FTU0lTVCkgewpAQCAtMjk2Miw2ICszMDAzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLkNVUlJFTlRfT1JfU0VMRik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1ZPTFVNRV9VUAorICAgICAgICAgICAgICAgIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTgorICAgICAgICAgICAgICAgIHx8IGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfTVVURSkgeworICAgICAgICAgICAgaWYgKG1Vc2VUdlJvdXRpbmcpIHsKKyAgICAgICAgICAgICAgICAvLyBPbiBUVnMgdm9sdW1lIGtleXMgbmV2ZXIgZ28gdG8gdGhlIGZvcmVncm91bmQgYXBwLgorICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlyZWN0QXVkaW9FdmVudChldmVudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKEtleUV2ZW50LmlzTWV0YUtleShrZXlDb2RlKSkgewogICAgICAgICAgICAgaWYgKGRvd24pIHsKICAgICAgICAgICAgICAgICBtUGVuZGluZ01ldGFBY3Rpb24gPSB0cnVlOwpAQCAtMzA1NiwxMyArMzEwNSwyMiBAQAogICAgICAgICAgICAgaGlkZVJlY2VudEFwcHModHJ1ZSwgZmFsc2UpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSGFuZGxlIGtleWJvYXJkIGxhbmd1YWdlIHN3aXRjaGluZy4KKyAgICAgICAgLy8gSGFuZGxlIGtleWJvYXJkIGxheW91dCBzd2l0Y2hpbmcuCisgICAgICAgIC8vIFRPRE86IERlcHJlY2F0ZSB0aGlzIGJlaGF2aW9yIHdoZW4gd2UgZnVsbHkgbWlncmF0ZSB0byBJTUUgc3VidHlwZS1iYXNlZCBsYXlvdXQgcm90YXRpb24uCisgICAgICAgIGlmIChkb3duICYmIHJlcGVhdENvdW50ID09IDAgJiYga2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX1NQQUNFCisgICAgICAgICAgICAgICAgJiYgKChtZXRhU3RhdGUgJiBLZXlFdmVudC5NRVRBX0NUUkxfTUFTSykgIT0gMCkpIHsKKyAgICAgICAgICAgIGludCBkaXJlY3Rpb24gPSAobWV0YVN0YXRlICYgS2V5RXZlbnQuTUVUQV9TSElGVF9NQVNLKSAhPSAwID8gLTEgOiAxOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXJGdW5jcy5zd2l0Y2hLZXlib2FyZExheW91dChldmVudC5nZXREZXZpY2VJZCgpLCBkaXJlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLy8gSGFuZGxlIGlucHV0IG1ldGhvZCBzd2l0Y2hpbmcuCiAgICAgICAgIGlmIChkb3duICYmIHJlcGVhdENvdW50ID09IDAKICAgICAgICAgICAgICAgICAmJiAoa2V5Q29kZSA9PSBLZXlFdmVudC5LRVlDT0RFX0xBTkdVQUdFX1NXSVRDSAogICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9TUEFDRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWV0YVN0YXRlICYgS2V5RXZlbnQuTUVUQV9DVFJMX01BU0spICE9IDApKSkgewotICAgICAgICAgICAgaW50IGRpcmVjdGlvbiA9IChtZXRhU3RhdGUgJiBLZXlFdmVudC5NRVRBX1NISUZUX01BU0spICE9IDAgPyAtMSA6IDE7Ci0gICAgICAgICAgICBtV2luZG93TWFuYWdlckZ1bmNzLnN3aXRjaEtleWJvYXJkTGF5b3V0KGV2ZW50LmdldERldmljZUlkKCksIGRpcmVjdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChtZXRhU3RhdGUgJiBLZXlFdmVudC5NRVRBX01FVEFfTUFTSykgIT0gMCkpKSB7CisgICAgICAgICAgICBmaW5hbCBib29sZWFuIGZvcndhcmREaXJlY3Rpb24gPSAobWV0YVN0YXRlICYgS2V5RXZlbnQuTUVUQV9TSElGVF9NQVNLKSA9PSAwOworICAgICAgICAgICAgbVdpbmRvd01hbmFnZXJGdW5jcy5zd2l0Y2hJbnB1dE1ldGhvZChmb3J3YXJkRGlyZWN0aW9uKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBpZiAobUxhbmd1YWdlU3dpdGNoS2V5UHJlc3NlZCAmJiAhZG93bgpAQCAtMzMwMSwxMSArMzM1OSwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHNob3dLZXlib2FyZFNob3J0Y3V0c01lbnUoKSB7CisgICAgcHJpdmF0ZSB2b2lkIHRvZ2dsZUtleWJvYXJkU2hvcnRjdXRzTWVudSgpIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIElTdGF0dXNCYXJTZXJ2aWNlIHN0YXR1c2JhciA9IGdldFN0YXR1c0JhclNlcnZpY2UoKTsKICAgICAgICAgICAgIGlmIChzdGF0dXNiYXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN0YXR1c2Jhci5zaG93S2V5Ym9hcmRTaG9ydGN1dHNNZW51KCk7CisgICAgICAgICAgICAgICAgc3RhdHVzYmFyLnRvZ2dsZUtleWJvYXJkU2hvcnRjdXRzTWVudSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgU2xvZy5lKFRBRywgIlJlbW90ZUV4Y2VwdGlvbiB3aGVuIHNob3dpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIG1lbnUiLCBlKTsKQEAgLTMzNzEsNyArMzQyOSw2IEBACiAgICAgICAgICAgICBpZiAoYXdha2VuRnJvbURyZWFtcykgewogICAgICAgICAgICAgICAgIGF3YWtlbkRyZWFtcygpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VuZENsb3NlU3lzdGVtV2luZG93cyhTWVNURU1fRElBTE9HX1JFQVNPTl9IT01FX0tFWSk7CiAgICAgICAgICAgICBoaWRlUmVjZW50QXBwcyhmYWxzZSwgdHJ1ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGp1c3QgbGF1bmNoIEhvbWUKQEAgLTM1NDEsNyArMzU5OCw3IEBACiAgICAgLyoqIHtAaW5oZXJpdERvY30gKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBiZWdpbkxheW91dEx3KGJvb2xlYW4gaXNEZWZhdWx0RGlzcGxheSwgaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzcGxheVJvdGF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzcGxheVJvdGF0aW9uLCBpbnQgdWlNb2RlKSB7CiAgICAgICAgIG1EaXNwbGF5Um90YXRpb24gPSBkaXNwbGF5Um90YXRpb247CiAgICAgICAgIGZpbmFsIGludCBvdmVyc2NhbkxlZnQsIG92ZXJzY2FuVG9wLCBvdmVyc2NhblJpZ2h0LCBvdmVyc2NhbkJvdHRvbTsKICAgICAgICAgaWYgKGlzRGVmYXVsdERpc3BsYXkpIHsKQEAgLTM2NTIsNyArMzcwOSw3IEBACiAgICAgICAgICAgICBuYXZWaXNpYmxlIHw9ICFjYW5IaWRlTmF2aWdhdGlvbkJhcigpOwogCiAgICAgICAgICAgICBib29sZWFuIHVwZGF0ZVN5c1VpVmlzaWJpbGl0eSA9IGxheW91dE5hdmlnYXRpb25CYXIoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Um90YXRpb24sIG92ZXJzY2FuUmlnaHQsIG92ZXJzY2FuQm90dG9tLCBkY2YsIG5hdlZpc2libGUsIG5hdlRyYW5zbHVjZW50LAorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Um90YXRpb24sIHVpTW9kZSwgb3ZlcnNjYW5SaWdodCwgb3ZlcnNjYW5Cb3R0b20sIGRjZiwgbmF2VmlzaWJsZSwgbmF2VHJhbnNsdWNlbnQsCiAgICAgICAgICAgICAgICAgICAgIG5hdkFsbG93ZWRIaWRkZW4pOwogICAgICAgICAgICAgaWYgKERFQlVHX0xBWU9VVCkgU2xvZy5pKFRBRywgU3RyaW5nLmZvcm1hdCgibURvY2sgcmVjdDogKCVkLCVkIC0gJWQsJWQpIiwKICAgICAgICAgICAgICAgICAgICAgbURvY2tMZWZ0LCBtRG9ja1RvcCwgbURvY2tSaWdodCwgbURvY2tCb3R0b20pKTsKQEAgLTM3MzEsNyArMzc4OCw3IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSBib29sZWFuIGxheW91dE5hdmlnYXRpb25CYXIoaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQsIGludCBkaXNwbGF5Um90YXRpb24sCi0gICAgICAgICAgICBpbnQgb3ZlcnNjYW5SaWdodCwgaW50IG92ZXJzY2FuQm90dG9tLCBSZWN0IGRjZiwgYm9vbGVhbiBuYXZWaXNpYmxlLAorICAgICAgICAgICAgaW50IHVpTW9kZSwgaW50IG92ZXJzY2FuUmlnaHQsIGludCBvdmVyc2NhbkJvdHRvbSwgUmVjdCBkY2YsIGJvb2xlYW4gbmF2VmlzaWJsZSwKICAgICAgICAgICAgIGJvb2xlYW4gbmF2VHJhbnNsdWNlbnQsIGJvb2xlYW4gbmF2QWxsb3dlZEhpZGRlbikgewogICAgICAgICBpZiAobU5hdmlnYXRpb25CYXIgIT0gbnVsbCkgewogICAgICAgICAgICAgYm9vbGVhbiB0cmFuc2llbnROYXZCYXJTaG93aW5nID0gbU5hdmlnYXRpb25CYXJDb250cm9sbGVyLmlzVHJhbnNpZW50U2hvd2luZygpOwpAQCAtMzczOSwxMSArMzc5NiwxMSBAQAogICAgICAgICAgICAgLy8gc2l6ZS4gIFdlIG5lZWQgdG8gZG8gdGhpcyBkaXJlY3RseSwgaW5zdGVhZCBvZiByZWx5aW5nIG9uCiAgICAgICAgICAgICAvLyBpdCB0byBidWJibGUgdXAgZnJvbSB0aGUgbmF2IGJhciwgYmVjYXVzZSB0aGlzIG5lZWRzIHRvCiAgICAgICAgICAgICAvLyBjaGFuZ2UgYXRvbWljYWxseSB3aXRoIHNjcmVlbiByb3RhdGlvbnMuCi0gICAgICAgICAgICBtTmF2aWdhdGlvbkJhck9uQm90dG9tID0gKCFtTmF2aWdhdGlvbkJhckNhbk1vdmUgfHwgZGlzcGxheVdpZHRoIDwgZGlzcGxheUhlaWdodCk7CisgICAgICAgICAgICBtTmF2aWdhdGlvbkJhck9uQm90dG9tID0gaXNOYXZpZ2F0aW9uQmFyT25Cb3R0b20oZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKICAgICAgICAgICAgIGlmIChtTmF2aWdhdGlvbkJhck9uQm90dG9tKSB7CiAgICAgICAgICAgICAgICAgLy8gSXQncyBhIHN5c3RlbSBuYXYgYmFyIG9yIGEgcG9ydHJhaXQgc2NyZWVuOyBuYXYgYmFyIGdvZXMgb24gYm90dG9tLgogICAgICAgICAgICAgICAgIGludCB0b3AgPSBkaXNwbGF5SGVpZ2h0IC0gb3ZlcnNjYW5Cb3R0b20KLSAgICAgICAgICAgICAgICAgICAgICAgIC0gbU5hdmlnYXRpb25CYXJIZWlnaHRGb3JSb3RhdGlvbltkaXNwbGF5Um90YXRpb25dOworICAgICAgICAgICAgICAgICAgICAgICAgLSBnZXROYXZpZ2F0aW9uQmFySGVpZ2h0KGRpc3BsYXlSb3RhdGlvbiwgdWlNb2RlKTsKICAgICAgICAgICAgICAgICBtVG1wTmF2aWdhdGlvbkZyYW1lLnNldCgwLCB0b3AsIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCAtIG92ZXJzY2FuQm90dG9tKTsKICAgICAgICAgICAgICAgICBtU3RhYmxlQm90dG9tID0gbVN0YWJsZUZ1bGxzY3JlZW5Cb3R0b20gPSBtVG1wTmF2aWdhdGlvbkZyYW1lLnRvcDsKICAgICAgICAgICAgICAgICBpZiAodHJhbnNpZW50TmF2QmFyU2hvd2luZykgewpAQCAtMzc2OCw3ICszODI1LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gTGFuZHNjYXBlIHNjcmVlbjsgbmF2IGJhciBnb2VzIHRvIHRoZSByaWdodC4KICAgICAgICAgICAgICAgICBpbnQgbGVmdCA9IGRpc3BsYXlXaWR0aCAtIG92ZXJzY2FuUmlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgIC0gbU5hdmlnYXRpb25CYXJXaWR0aEZvclJvdGF0aW9uW2Rpc3BsYXlSb3RhdGlvbl07CisgICAgICAgICAgICAgICAgICAgICAgICAtIGdldE5hdmlnYXRpb25CYXJXaWR0aChkaXNwbGF5Um90YXRpb24sIHVpTW9kZSk7CiAgICAgICAgICAgICAgICAgbVRtcE5hdmlnYXRpb25GcmFtZS5zZXQobGVmdCwgMCwgZGlzcGxheVdpZHRoIC0gb3ZlcnNjYW5SaWdodCwgZGlzcGxheUhlaWdodCk7CiAgICAgICAgICAgICAgICAgbVN0YWJsZVJpZ2h0ID0gbVN0YWJsZUZ1bGxzY3JlZW5SaWdodCA9IG1UbXBOYXZpZ2F0aW9uRnJhbWUubGVmdDsKICAgICAgICAgICAgICAgICBpZiAodHJhbnNpZW50TmF2QmFyU2hvd2luZykgewpAQCAtMzgxMCw2ICszODY3LDEwIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNOYXZpZ2F0aW9uQmFyT25Cb3R0b20oaW50IGRpc3BsYXlXaWR0aCwgaW50IGRpc3BsYXlIZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuICFtTmF2aWdhdGlvbkJhckNhbk1vdmUgfHwgZGlzcGxheVdpZHRoIDwgZGlzcGxheUhlaWdodDsKKyAgICB9CisKICAgICAvKioge0Bpbmhlcml0RG9jfSAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0U3lzdGVtRGVjb3JMYXllckx3KCkgewpAQCAtNDAwMSw3ICs0MDYyLDEzIEBACiAgICAgICAgICAgICBjZi50b3AgPSB2Zi50b3AgPSBtU3RhYmxlVG9wOwogICAgICAgICAgICAgY2YucmlnaHQgPSB2Zi5yaWdodCA9IG1TdGFibGVSaWdodDsKICAgICAgICAgICAgIHZmLmJvdHRvbSA9IG1TdGFibGVCb3R0b207Ci0gICAgICAgICAgICBjZi5ib3R0b20gPSBtQ29udGVudEJvdHRvbTsKKworICAgICAgICAgICAgaWYgKGFkanVzdCA9PSBTT0ZUX0lOUFVUX0FESlVTVF9SRVNJWkUpIHsKKyAgICAgICAgICAgICAgICBjZi5ib3R0b20gPSBtQ29udGVudEJvdHRvbTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2YuYm90dG9tID0gbURvY2tCb3R0b207CisgICAgICAgICAgICAgICAgdmYuYm90dG9tID0gbUNvbnRlbnRCb3R0b207CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAKICAgICAgICAgICAgIC8vIERlZmF1bHQgcG9saWN5IGRlY29yIGZvciB0aGUgZGVmYXVsdCBkaXNwbGF5CkBAIC00MjMzLDYgKzQzMDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHN5c1VpRmwgJiBWaWV3LlNZU1RFTV9VSV9GTEFHX0xBWU9VVF9ISURFX05BVklHQVRJT04pICE9IDAKICAgICAgICAgICAgICAgICAgICAgICAgICYmIChhdHRycy50eXBlID09IFRZUEVfU1RBVFVTX0JBUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJzLnR5cGUgPT0gVFlQRV9UT0FTVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGF0dHJzLnR5cGUgPT0gVFlQRV9ET0NLX0RJVklERVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhdHRycy50eXBlID09IFRZUEVfVk9JQ0VfSU5URVJBQ1RJT05fU1RBUlRJTkcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoYXR0cnMudHlwZSA+PSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GSVJTVF9BUFBMSUNBVElPTl9XSU5ET1cKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhdHRycy50eXBlIDw9IFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkxBU1RfU1VCX1dJTkRPVykpKSB7CkBAIC01MDMwLDEwICs1MDk4LDYgQEAKICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTjoKICAgICAgICAgICAgIGNhc2UgS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfVVA6CiAgICAgICAgICAgICBjYXNlIEtleUV2ZW50LktFWUNPREVfVk9MVU1FX01VVEU6IHsKLSAgICAgICAgICAgICAgICBpZiAobVVzZVR2Um91dGluZykgewotICAgICAgICAgICAgICAgICAgICAvLyBPbiBUVnMgdm9sdW1lIGtleXMgbmV2ZXIgZ28gdG8gdGhlIGZvcmVncm91bmQgYXBwCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCAmPSB+QUNUSU9OX1BBU1NfVE9fVVNFUjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGtleUNvZGUgPT0gS2V5RXZlbnQuS0VZQ09ERV9WT0xVTUVfRE9XTikgewogICAgICAgICAgICAgICAgICAgICBpZiAoZG93bikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlICYmICFtU2NyZWVuc2hvdENob3JkVm9sdW1lRG93bktleVRyaWdnZXJlZApAQCAtNTA5MywxOSArNTE1NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChyZXN1bHQgJiBBQ1RJT05fUEFTU19UT19VU0VSKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobVVzZVR2Um91dGluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoRGlyZWN0QXVkaW9FdmVudChldmVudCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZW4ndCBwYXNzaW5nIHRvIHRoZSB1c2VyIGFuZCBubyBvbmUgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgaXQgc2VuZCBpdCB0byB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlndXJlIG91dC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYVNlc3Npb25MZWdhY3lIZWxwZXIuZ2V0SGVscGVyKG1Db250ZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNlbmRWb2x1bWVLZXlFdmVudChldmVudCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobVVzZVR2Um91dGluZykgeworICAgICAgICAgICAgICAgICAgICAvLyBPbiBUVnMsIGRlZmVyIHNwZWNpYWwga2V5IGhhbmRsaW5ncyB0bworICAgICAgICAgICAgICAgICAgICAvLyB7QGxpbmsgaW50ZXJjZXB0S2V5QmVmb3JlRGlzcGF0Y2hpbmcoKX0uCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBBQ1RJT05fUEFTU19UT19VU0VSOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHJlc3VsdCAmIEFDVElPTl9QQVNTX1RPX1VTRVIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlbid0IHBhc3NpbmcgdG8gdGhlIHVzZXIgYW5kIG5vIG9uZSBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZWQgaXQgc2VuZCBpdCB0byB0aGUgc2Vzc2lvbiBtYW5hZ2VyIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGZpZ3VyZSBvdXQuCisgICAgICAgICAgICAgICAgICAgIE1lZGlhU2Vzc2lvbkxlZ2FjeUhlbHBlci5nZXRIZWxwZXIobUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNlbmRWb2x1bWVLZXlFdmVudChldmVudCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtNTg4MSw2ICs1OTQzLDIyIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBnZXRTdGFibGVJbnNldHNMdyhpbnQgZGlzcGxheVJvdGF0aW9uLCBpbnQgZGlzcGxheVdpZHRoLCBpbnQgZGlzcGxheUhlaWdodCwKKyAgICAgICAgICAgIFJlY3Qgb3V0SW5zZXRzKSB7CisgICAgICAgIG91dEluc2V0cy5zZXRFbXB0eSgpOworICAgICAgICBpZiAobVN0YXR1c0JhciAhPSBudWxsKSB7CisgICAgICAgICAgICBvdXRJbnNldHMudG9wID0gbVN0YXR1c0JhckhlaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAobU5hdmlnYXRpb25CYXIgIT0gbnVsbCkgeworICAgICAgICAgICAgaWYgKGlzTmF2aWdhdGlvbkJhck9uQm90dG9tKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCkpIHsKKyAgICAgICAgICAgICAgICBvdXRJbnNldHMuYm90dG9tID0gZ2V0TmF2aWdhdGlvbkJhckhlaWdodChkaXNwbGF5Um90YXRpb24sIG1VaU1vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXRJbnNldHMucmlnaHQgPSBnZXROYXZpZ2F0aW9uQmFyV2lkdGgoZGlzcGxheVJvdGF0aW9uLCBtVWlNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHZvaWQgc2VuZENsb3NlU3lzdGVtV2luZG93cygpIHsKICAgICAgICAgUGhvbmVXaW5kb3cuc2VuZENsb3NlU3lzdGVtV2luZG93cyhtQ29udGV4dCwgbnVsbCk7CiAgICAgfQpAQCAtNjMzMiw2ICs2NDEwLDcgQEAKICAgICAgICAgICAgIGlmIChtTG9ja1NjcmVlblRpbWVyQWN0aXZlICE9IGVuYWJsZSkgewogICAgICAgICAgICAgICAgIGlmIChlbmFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsTE9HVikgTG9nLnYoVEFHLCAic2V0dGluZyBsb2Nrc2NyZWVuIHRpbWVyIik7CisgICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhtU2NyZWVuTG9ja1RpbWVvdXQpOyAvLyByZW1vdmUgYW55IHBlbmRpbmcgcmVxdWVzdHMKICAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIucG9zdERlbGF5ZWQobVNjcmVlbkxvY2tUaW1lb3V0LCBtTG9ja1NjcmVlblRpbWVvdXQpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbExPR1YpIExvZy52KFRBRywgImNsZWFyaW5nIGxvY2tzY3JlZW4gdGltZXIiKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L1Nob3J0Y3V0TWFuYWdlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKaW5kZXggNzZmNTZiYy4uOTkwODYyNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kvU2hvcnRjdXRNYW5hZ2VyLmphdmEKQEAgLTEyOCwxMyArMTI4LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIEFjdGl2aXR5SW5mbyBpbmZvID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gbmV3IENvbXBvbmVudE5hbWUocGFja2FnZU5hbWUsIGNsYXNzTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0QWN0aXZpdHlJbmZvKGNvbXBvbmVudE5hbWUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHBhY2thZ2VNYW5hZ2VyLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoUGFja2FnZU1hbmFnZXIuTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHBhY2thZ2VzID0gcGFja2FnZU1hbmFnZXIuY2Fub25pY2FsVG9DdXJyZW50UGFja2FnZU5hbWVzKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyBwYWNrYWdlTmFtZSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudE5hbWUgPSBuZXcgQ29tcG9uZW50TmFtZShwYWNrYWdlc1swXSwgY2xhc3NOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IHBhY2thZ2VNYW5hZ2VyLmdldEFjdGl2aXR5SW5mbyhjb21wb25lbnROYW1lLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvID0gcGFja2FnZU1hbmFnZXIuZ2V0QWN0aXZpdHlJbmZvKGNvbXBvbmVudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5NQVRDSF9FTkNSWVBUSU9OX0FXQVJFX0FORF9VTkFXQVJFKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhY2thZ2VNYW5hZ2VyLk5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy53KFRBRywgIlVuYWJsZSB0byBhZGQgYm9va21hcms6ICIgKyBwYWNrYWdlTmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiLyIgKyBjbGFzc05hbWUsIGUpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcG9saWN5L2tleWd1YXJkL0tleWd1YXJkU2VydmljZURlbGVnYXRlLmphdmEKaW5kZXggYzBkZmJjYi4uNTQ5ZDJkYyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb2xpY3kva2V5Z3VhcmQvS2V5Z3VhcmRTZXJ2aWNlRGVsZWdhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3BvbGljeS9rZXlndWFyZC9LZXlndWFyZFNlcnZpY2VEZWxlZ2F0ZS5qYXZhCkBAIC0xMjYsNiArMTI2LDcgQEAKIAogICAgICAgICBmaW5hbCBDb21wb25lbnROYW1lIGtleWd1YXJkQ29tcG9uZW50ID0gQ29tcG9uZW50TmFtZS51bmZsYXR0ZW5Gcm9tU3RyaW5nKAogICAgICAgICAgICAgICAgIHJlc291cmNlcy5nZXRTdHJpbmcoY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5zdHJpbmcuY29uZmlnX2tleWd1YXJkQ29tcG9uZW50KSk7CisgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19ERUJVR19UUklBR0VEX01JU1NJTkcpOwogICAgICAgICBpbnRlbnQuc2V0Q29tcG9uZW50KGtleWd1YXJkQ29tcG9uZW50KTsKIAogICAgICAgICBpZiAoIWNvbnRleHQuYmluZFNlcnZpY2VBc1VzZXIoaW50ZW50LCBtS2V5Z3VhcmRDb25uZWN0aW9uLApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wb3dlci9Qb3dlck1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA2NDk4ZGQ5Li4yOTAwMTljIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3Bvd2VyL1Bvd2VyTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTYsMjEgKzE2LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIucG93ZXI7CiAKLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlNwYXJzZUludEFycmF5OwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQXBwT3BzU2VydmljZTsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUJhdHRlcnlTdGF0czsKLWltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5CYWNrZ3JvdW5kVGhyZWFkOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5FdmVudExvZ1RhZ3M7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlNlcnZpY2VUaHJlYWQ7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmFtLkJhdHRlcnlTdGF0c1NlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmxpZ2h0cy5MaWdodDsKLWltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubGlnaHRzLkxpZ2h0c01hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLldhdGNoZG9nOwotCiBpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKLWltcG9ydCBhbmRyb2lkLmFwcC5BcHBPcHNNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRlbnRSZXNvbHZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKQEAgLTY1LDIyICs1MiwzMiBAQAogaW1wb3J0IGFuZHJvaWQuc2VydmljZS5kcmVhbXMuRHJlYW1NYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkV2ZW50TG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VJbnRBcnJheTsKIGltcG9ydCBhbmRyb2lkLnV0aWwuVGltZVV0aWxzOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5OworaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFwcC5JQXBwT3BzU2VydmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUJhdHRlcnlTdGF0czsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5CYWNrZ3JvdW5kVGhyZWFkOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5FdmVudExvZ1RhZ3M7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlNlcnZpY2VUaHJlYWQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLldhdGNoZG9nOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5hbS5CYXR0ZXJ5U3RhdHNTZXJ2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5saWdodHMuTGlnaHQ7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmxpZ2h0cy5MaWdodHNNYW5hZ2VyOworaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOwogCiBpbXBvcnQgamF2YS5pby5GaWxlRGVzY3JpcHRvcjsKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIAotaW1wb3J0IGxpYmNvcmUudXRpbC5PYmplY3RzOwotCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VySW50ZXJuYWwuUE9XRVJfSElOVF9JTlRFUkFDVElPTjsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5vcy5Qb3dlck1hbmFnZXJJbnRlcm5hbC5XQUtFRlVMTkVTU19BU0xFRVA7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VySW50ZXJuYWwuV0FLRUZVTE5FU1NfQVdBS0U7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VySW50ZXJuYWwuV0FLRUZVTE5FU1NfRFJFQU1JTkc7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VySW50ZXJuYWwuV0FLRUZVTE5FU1NfRE9aSU5HOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm9zLlBvd2VyTWFuYWdlckludGVybmFsLldBS0VGVUxORVNTX0RSRUFNSU5HOwogCiAvKioKICAqIFRoZSBwb3dlciBtYW5hZ2VyIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGNvb3JkaW5hdGluZyBwb3dlciBtYW5hZ2VtZW50CkBAIC03NzEsNiArNzY4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGludGVudCA9IG5ldyBJbnRlbnQoUG93ZXJNYW5hZ2VyLkFDVElPTl9QT1dFUl9TQVZFX01PREVfQ0hBTkdFRCk7CiAgICAgICAgICAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRUdJU1RFUkVEX09OTFkpOwogICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0KGludGVudCk7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlbmQgaW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJlcXVpcmVzIHNpZ25hdHVyZSBwZXJtaXNzaW9uLgorICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5zZW5kQnJvYWRjYXN0QXNVc2VyKG5ldyBJbnRlbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXJNYW5hZ2VyLkFDVElPTl9QT1dFUl9TQVZFX01PREVfQ0hBTkdFRF9JTlRFUk5BTCksIFVzZXJIYW5kbGUuQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0LnBlcm1pc3Npb24uREVWSUNFX1BPV0VSKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggNGM3Zjg4OC4uZTNlMTA5NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoTWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3NlYXJjaC9TZWFyY2hNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0yMywxOSArMjMsMTYgQEAKIGltcG9ydCBhbmRyb2lkLmFwcC5JU2VhcmNoTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5TZWFyY2hNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuYXBwLlNlYXJjaGFibGVJbmZvOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29tcG9uZW50TmFtZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSVBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87CiBpbXBvcnQgYW5kcm9pZC5kYXRhYmFzZS5Db250ZW50T2JzZXJ2ZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLlVzZXJNYW5hZ2VyOwpAQCAtNDMsOSArNDAsMTEgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TcGFyc2VBcnJheTsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLmFubm90YXRpb25zLkd1YXJkZWRCeTsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5jb250ZW50LlBhY2thZ2VNb25pdG9yOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnV0aWwuSW5kZW50aW5nUHJpbnRXcml0ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLkxvY2FsU2VydmljZXM7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnN0YXR1c2Jhci5TdGF0dXNCYXJNYW5hZ2VySW50ZXJuYWw7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGVEZXNjcmlwdG9yOwpAQCAtNTMsMTkgKzUyLDQyIEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIC8qKgotICogVGhlIHNlYXJjaCBtYW5hZ2VyIHNlcnZpY2UgaGFuZGxlcyB0aGUgc2VhcmNoIFVJLCBhbmQgbWFpbnRhaW5zIGEgcmVnaXN0cnkgb2Ygc2VhcmNoYWJsZQotICogYWN0aXZpdGllcy4KKyAqIFRoZSBzZWFyY2ggbWFuYWdlciBzZXJ2aWNlIGhhbmRsZXMgdGhlIHNlYXJjaCBVSSwgYW5kIG1haW50YWlucyBhIHJlZ2lzdHJ5IG9mCisgKiBzZWFyY2hhYmxlIGFjdGl2aXRpZXMuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZWFyY2hNYW5hZ2VyU2VydmljZSBleHRlbmRzIElTZWFyY2hNYW5hZ2VyLlN0dWIgewotCi0gICAgLy8gZ2VuZXJhbCBkZWJ1Z2dpbmcgc3VwcG9ydAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU2VhcmNoTWFuYWdlclNlcnZpY2UiOwogCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBTeXN0ZW1TZXJ2aWNlIHsKKyAgICAgICAgcHJpdmF0ZSBTZWFyY2hNYW5hZ2VyU2VydmljZSBtU2VydmljZTsKKworICAgICAgICBwdWJsaWMgTGlmZWN5Y2xlKENvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKKyAgICAgICAgICAgIG1TZXJ2aWNlID0gbmV3IFNlYXJjaE1hbmFnZXJTZXJ2aWNlKGdldENvbnRleHQoKSk7CisgICAgICAgICAgICBwdWJsaXNoQmluZGVyU2VydmljZShDb250ZXh0LlNFQVJDSF9TRVJWSUNFLCBtU2VydmljZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25VbmxvY2tVc2VyKGludCB1c2VySGFuZGxlKSB7CisgICAgICAgICAgICBtU2VydmljZS5vblVubG9ja1VzZXIodXNlckhhbmRsZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DbGVhbnVwVXNlcihpbnQgdXNlckhhbmRsZSkgeworICAgICAgICAgICAgbVNlcnZpY2Uub25DbGVhbnVwVXNlcih1c2VySGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIENvbnRleHQgdGhhdCB0aGUgc2VydmljZSBpcyBydW5uaW5nIGluLgogICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBtQ29udGV4dDsKIAogICAgIC8vIFRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgbGF6aWx5IGluIGdldFNlYXJjaGFibGVzKCksIGFuZCB0aGVuIG5ldmVyIG1vZGlmaWVkLgotICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8U2VhcmNoYWJsZXM+IG1TZWFyY2hhYmxlcyA9IG5ldyBTcGFyc2VBcnJheTxTZWFyY2hhYmxlcz4oKTsKKyAgICBAR3VhcmRlZEJ5KCJtU2VhcmNoYWJsZXMiKQorICAgIHByaXZhdGUgZmluYWwgU3BhcnNlQXJyYXk8U2VhcmNoYWJsZXM+IG1TZWFyY2hhYmxlcyA9IG5ldyBTcGFyc2VBcnJheTw+KCk7CiAKICAgICAvKioKICAgICAgKiBJbml0aWFsaXplcyB0aGUgU2VhcmNoIE1hbmFnZXIgc2VydmljZSBpbiB0aGUgcHJvdmlkZWQgc3lzdGVtIGNvbnRleHQuCkBAIC03NSw2NSArOTcsNDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgU2VhcmNoTWFuYWdlclNlcnZpY2UoQ29udGV4dCBjb250ZXh0KSAgewogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJT05fQk9PVF9DT01QTEVURUQpOwotICAgICAgICBmaWx0ZXIuc2V0UHJpb3JpdHkoSW50ZW50RmlsdGVyLlNZU1RFTV9ISUdIX1BSSU9SSVRZKTsKLSAgICAgICAgbUNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcihuZXcgQm9vdENvbXBsZXRlZFJlY2VpdmVyKCksIGZpbHRlcik7Ci0gICAgICAgIG1Db250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIobmV3IFVzZXJSZWNlaXZlcigpLAotICAgICAgICAgICAgICAgIG5ldyBJbnRlbnRGaWx0ZXIoSW50ZW50LkFDVElPTl9VU0VSX1JFTU9WRUQpKTsKICAgICAgICAgbmV3IE15UGFja2FnZU1vbml0b3IoKS5yZWdpc3Rlcihjb250ZXh0LCBudWxsLCBVc2VySGFuZGxlLkFMTCwgdHJ1ZSk7CisgICAgICAgIG5ldyBHbG9iYWxTZWFyY2hQcm92aWRlck9ic2VydmVyKGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCkpOwogICAgIH0KIAogICAgIHByaXZhdGUgU2VhcmNoYWJsZXMgZ2V0U2VhcmNoYWJsZXMoaW50IHVzZXJJZCkgewotICAgICAgICBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZXModXNlcklkLCBmYWxzZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTZWFyY2hhYmxlcyBnZXRTZWFyY2hhYmxlcyhpbnQgdXNlcklkLCBib29sZWFuIGZvcmNlVXBkYXRlKSB7CisgICAgICAgIGZpbmFsIGxvbmcgdG9rZW4gPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGJvb2xlYW4gdXNlckV4aXN0cyA9ICgoVXNlck1hbmFnZXIpIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5VU0VSX1NFUlZJQ0UpKQotICAgICAgICAgICAgICAgICAgICAuZ2V0VXNlckluZm8odXNlcklkKSAhPSBudWxsOwotICAgICAgICAgICAgaWYgKCF1c2VyRXhpc3RzKSByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIGZpbmFsIFVzZXJNYW5hZ2VyIHVtID0gbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShVc2VyTWFuYWdlci5jbGFzcyk7CisgICAgICAgICAgICBpZiAodW0uZ2V0VXNlckluZm8odXNlcklkKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVXNlciAiICsgdXNlcklkICsgIiBkb2Vzbid0IGV4aXN0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXVtLmlzVXNlclVubG9ja2VkKHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVc2VyICIgKyB1c2VySWQgKyAiIGlzbid0IHVubG9ja2VkIik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOworICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkodG9rZW4pOwogICAgICAgICB9CiAgICAgICAgIHN5bmNocm9uaXplZCAobVNlYXJjaGFibGVzKSB7CiAgICAgICAgICAgICBTZWFyY2hhYmxlcyBzZWFyY2hhYmxlcyA9IG1TZWFyY2hhYmxlcy5nZXQodXNlcklkKTsKLQogICAgICAgICAgICAgaWYgKHNlYXJjaGFibGVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAvL0xvZy5pKFRBRywgIkJ1aWxkaW5nIGxpc3Qgb2Ygc2VhcmNoYWJsZSBhY3Rpdml0aWVzIGZvciB1c2VySWQ9IiArIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZXMgPSBuZXcgU2VhcmNoYWJsZXMobUNvbnRleHQsIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgc2VhcmNoYWJsZXMuYnVpbGRTZWFyY2hhYmxlTGlzdCgpOworICAgICAgICAgICAgICAgIHNlYXJjaGFibGVzLnVwZGF0ZVNlYXJjaGFibGVMaXN0KCk7CiAgICAgICAgICAgICAgICAgbVNlYXJjaGFibGVzLmFwcGVuZCh1c2VySWQsIHNlYXJjaGFibGVzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VVcGRhdGUpIHsKKyAgICAgICAgICAgICAgICBzZWFyY2hhYmxlcy51cGRhdGVTZWFyY2hhYmxlTGlzdCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHNlYXJjaGFibGVzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIG9uVXNlclJlbW92ZWQoaW50IHVzZXJJZCkgewotICAgICAgICBpZiAodXNlcklkICE9IFVzZXJIYW5kbGUuVVNFUl9OVUxMKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1TZWFyY2hhYmxlcykgewotICAgICAgICAgICAgICAgIG1TZWFyY2hhYmxlcy5yZW1vdmUodXNlcklkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIHByaXZhdGUgdm9pZCBvblVubG9ja1VzZXIoaW50IHVzZXJJZCkgeworICAgICAgICBnZXRTZWFyY2hhYmxlcyh1c2VySWQsIHRydWUpOwogICAgIH0KIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgdGhlIGluaXRpYWwgc2VhcmNoYWJsZXMgbGlzdCBhZnRlciBib290LgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgQm9vdENvbXBsZXRlZFJlY2VpdmVyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgbmV3IFRocmVhZCgpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCk7Ci0gICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LnVucmVnaXN0ZXJSZWNlaXZlcihCb290Q29tcGxldGVkUmVjZWl2ZXIudGhpcyk7Ci0gICAgICAgICAgICAgICAgICAgIGdldFNlYXJjaGFibGVzKDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0uc3RhcnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgVXNlclJlY2VpdmVyIGV4dGVuZHMgQnJvYWRjYXN0UmVjZWl2ZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICAgICAgb25Vc2VyUmVtb3ZlZChpbnRlbnQuZ2V0SW50RXh0cmEoSW50ZW50LkVYVFJBX1VTRVJfSEFORExFLCBVc2VySGFuZGxlLlVTRVJfTlVMTCkpOworICAgIHByaXZhdGUgdm9pZCBvbkNsZWFudXBVc2VyKGludCB1c2VySWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtU2VhcmNoYWJsZXMpIHsKKyAgICAgICAgICAgIG1TZWFyY2hhYmxlcy5yZW1vdmUodXNlcklkKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTU4LDcgKzE2Miw3IEBACiAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGxpc3Qgb2Ygc2VhcmNoYWJsZSBhY3Rpdml0aWVzCiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU2VhcmNoYWJsZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5naW5nVXNlcklkID09IG1TZWFyY2hhYmxlcy5rZXlBdChpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2VhcmNoYWJsZXMobVNlYXJjaGFibGVzLmtleUF0KGkpKS5idWlsZFNlYXJjaGFibGVMaXN0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtU2VhcmNoYWJsZXMudmFsdWVBdChpKS51cGRhdGVTZWFyY2hhYmxlTGlzdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xODcsMTQgKzE5MSwxMyBAQAogICAgICAgICBwdWJsaWMgdm9pZCBvbkNoYW5nZShib29sZWFuIHNlbGZDaGFuZ2UpIHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobVNlYXJjaGFibGVzKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtU2VhcmNoYWJsZXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0U2VhcmNoYWJsZXMobVNlYXJjaGFibGVzLmtleUF0KGkpKS5idWlsZFNlYXJjaGFibGVMaXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1TZWFyY2hhYmxlcy52YWx1ZUF0KGkpLnVwZGF0ZVNlYXJjaGFibGVMaXN0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoU2VhcmNoTWFuYWdlci5JTlRFTlRfR0xPQkFMX1NFQVJDSF9BQ1RJVklUWV9DSEFOR0VEKTsKICAgICAgICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19SRUNFSVZFUl9SRVBMQUNFX1BFTkRJTkcpOwogICAgICAgICAgICAgbUNvbnRleHQuc2VuZEJyb2FkY2FzdEFzVXNlcihpbnRlbnQsIFVzZXJIYW5kbGUuQUxMKTsKICAgICAgICAgfQotCiAgICAgfQogCiAgICAgLy8KQEAgLTIwOCw2ICsyMTEsNyBAQAogICAgICAqIEByZXR1cm4gUmV0dXJucyBhIFNlYXJjaGFibGVJbmZvIHJlY29yZCBkZXNjcmliaW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBzZWFyY2gsCiAgICAgICogb3IgbnVsbCBpZiBubyBzZWFyY2hhYmxlIG1ldGFkYXRhIHdhcyBhdmFpbGFibGUuCiAgICAgICovCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIFNlYXJjaGFibGVJbmZvIGdldFNlYXJjaGFibGVJbmZvKGZpbmFsIENvbXBvbmVudE5hbWUgbGF1bmNoQWN0aXZpdHkpIHsKICAgICAgICAgaWYgKGxhdW5jaEFjdGl2aXR5ID09IG51bGwpIHsKICAgICAgICAgICAgIExvZy5lKFRBRywgImdldFNlYXJjaGFibGVJbmZvKCksIGFjdGl2aXR5ID09IG51bGwiKTsKQEAgLTIxOSwxMCArMjIzLDEyIEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIHNlYXJjaGFibGUgYWN0aXZpdGllcyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBnbG9iYWwgc2VhcmNoLgogICAgICAqLworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBMaXN0PFNlYXJjaGFibGVJbmZvPiBnZXRTZWFyY2hhYmxlc0luR2xvYmFsU2VhcmNoKCkgewogICAgICAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZXMoVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpLmdldFNlYXJjaGFibGVzSW5HbG9iYWxTZWFyY2hMaXN0KCk7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIExpc3Q8UmVzb2x2ZUluZm8+IGdldEdsb2JhbFNlYXJjaEFjdGl2aXRpZXMoKSB7CiAgICAgICAgIHJldHVybiBnZXRTZWFyY2hhYmxlcyhVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSkuZ2V0R2xvYmFsU2VhcmNoQWN0aXZpdGllcygpOwogICAgIH0KQEAgLTIzMCw2ICsyMzYsNyBAQAogICAgIC8qKgogICAgICAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBzZWFyY2ggYWN0aXZpdHkuCiAgICAgICovCisgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIENvbXBvbmVudE5hbWUgZ2V0R2xvYmFsU2VhcmNoQWN0aXZpdHkoKSB7CiAgICAgICAgIHJldHVybiBnZXRTZWFyY2hhYmxlcyhVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKSkuZ2V0R2xvYmFsU2VhcmNoQWN0aXZpdHkoKTsKICAgICB9CkBAIC0yMzcsNiArMjQ0LDcgQEAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSB3ZWIgc2VhcmNoIGFjdGl2aXR5LgogICAgICAqLworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBDb21wb25lbnROYW1lIGdldFdlYlNlYXJjaEFjdGl2aXR5KCkgewogICAgICAgICByZXR1cm4gZ2V0U2VhcmNoYWJsZXMoVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpLmdldFdlYlNlYXJjaEFjdGl2aXR5KCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoYWJsZXMuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaGFibGVzLmphdmEKaW5kZXggMGZmYmI3ZC4uMDA0NmZiYiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoYWJsZXMuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3NlYXJjaC9TZWFyY2hhYmxlcy5qYXZhCkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgKgogICAgICAqIFRPRE86IHNvcnQgdGhlIGxpc3Qgc29tZWhvdz8gIFVJIGNob2ljZS4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBidWlsZFNlYXJjaGFibGVMaXN0KCkgeworICAgIHB1YmxpYyB2b2lkIHVwZGF0ZVNlYXJjaGFibGVMaXN0KCkgewogICAgICAgICAvLyBUaGVzZSB3aWxsIGJlY29tZSB0aGUgbmV3IHZhbHVlcyBhdCB0aGUgZW5kIG9mIHRoZSBtZXRob2QKICAgICAgICAgSGFzaE1hcDxDb21wb25lbnROYW1lLCBTZWFyY2hhYmxlSW5mbz4gbmV3U2VhcmNoYWJsZXNNYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBuZXcgSGFzaE1hcDxDb21wb25lbnROYW1lLCBTZWFyY2hhYmxlSW5mbz4oKTsKQEAgLTIxNSwxMSArMjE1LDEzIEBACiAKICAgICAgICAgbG9uZyBpZGVudCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgc2VhcmNoTGlzdCA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOworICAgICAgICAgICAgc2VhcmNoTGlzdCA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEgfCBQYWNrYWdlTWFuYWdlci5NQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcpOwogCiAgICAgICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiB3ZWJTZWFyY2hJbmZvTGlzdDsKICAgICAgICAgICAgIGZpbmFsIEludGVudCB3ZWJTZWFyY2hJbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fV0VCX1NFQVJDSCk7Ci0gICAgICAgICAgICB3ZWJTZWFyY2hJbmZvTGlzdCA9IHF1ZXJ5SW50ZW50QWN0aXZpdGllcyh3ZWJTZWFyY2hJbnRlbnQsIFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEpOworICAgICAgICAgICAgd2ViU2VhcmNoSW5mb0xpc3QgPSBxdWVyeUludGVudEFjdGl2aXRpZXMod2ViU2VhcmNoSW50ZW50LAorICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HKTsKIAogICAgICAgICAgICAgLy8gYW5hbHl6ZSBlYWNoIG9uZSwgZ2VuZXJhdGUgYSBTZWFyY2hhYmxlcyByZWNvcmQsIGFuZCByZWNvcmQKICAgICAgICAgICAgIGlmIChzZWFyY2hMaXN0ICE9IG51bGwgfHwgd2ViU2VhcmNoSW5mb0xpc3QgIT0gbnVsbCkgewpAQCAtMjgyLDggKzI4NCw4IEBACiAgICAgICAgIC8vIFN0ZXAgMSA6IFF1ZXJ5IHRoZSBwYWNrYWdlIG1hbmFnZXIgZm9yIGEgbGlzdAogICAgICAgICAvLyBvZiBhY3Rpdml0aWVzIHRoYXQgY2FuIGhhbmRsZSB0aGUgR0xPQkFMX1NFQVJDSCBpbnRlbnQuCiAgICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KFNlYXJjaE1hbmFnZXIuSU5URU5UX0FDVElPTl9HTE9CQUxfU0VBUkNIKTsKLSAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gYWN0aXZpdGllcyA9Ci0gICAgICAgICAgICAgICAgICAgIHF1ZXJ5SW50ZW50QWN0aXZpdGllcyhpbnRlbnQsIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFRkFVTFRfT05MWSk7CisgICAgICAgIExpc3Q8UmVzb2x2ZUluZm8+IGFjdGl2aXRpZXMgPSBxdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LAorICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFRkFVTFRfT05MWSB8IFBhY2thZ2VNYW5hZ2VyLk1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORyk7CiAgICAgICAgIGlmIChhY3Rpdml0aWVzICE9IG51bGwgJiYgIWFjdGl2aXRpZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAvLyBTdGVwIDI6IFJhbmsgbWF0Y2hpbmcgYWN0aXZpdGllcyBhY2NvcmRpbmcgdG8gb3VyIGhldXJpc3RpY3MuCiAgICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KGFjdGl2aXRpZXMsIEdMT0JBTF9TRUFSQ0hfUkFOS0VSKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc3RhdHVzYmFyL1N0YXR1c0Jhck1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3N0YXR1c2Jhci9TdGF0dXNCYXJNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDE5YjAzZDUuLjJhMWY0NmUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvc3RhdHVzYmFyL1N0YXR1c0Jhck1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9zdGF0dXNiYXIvU3RhdHVzQmFyTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTcsMjIgKzE3LDIwIEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5zdGF0dXNiYXI7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5TdGF0dXNCYXJNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5TWFwOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLklTdGF0dXNCYXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuc3RhdHVzYmFyLklTdGF0dXNCYXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5Ob3RpZmljYXRpb25WaXNpYmlsaXR5OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5TdGF0dXNCYXJJY29uOwotaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnN0YXR1c2Jhci5TdGF0dXNCYXJJY29uTGlzdDsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuTG9jYWxTZXJ2aWNlczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkRlbGVnYXRlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZTsKQEAgLTU2LDcgKzU0LDcgQEAKICAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwogICAgIHByaXZhdGUgTm90aWZpY2F0aW9uRGVsZWdhdGUgbU5vdGlmaWNhdGlvbkRlbGVnYXRlOwogICAgIHByaXZhdGUgdm9sYXRpbGUgSVN0YXR1c0JhciBtQmFyOwotICAgIHByaXZhdGUgU3RhdHVzQmFySWNvbkxpc3QgbUljb25zID0gbmV3IFN0YXR1c0Jhckljb25MaXN0KCk7CisgICAgcHJpdmF0ZSBBcnJheU1hcDxTdHJpbmcsIFN0YXR1c0Jhckljb24+IG1JY29ucyA9IG5ldyBBcnJheU1hcDw+KCk7CiAKICAgICAvLyBmb3IgZGlzYWJsaW5nIHRoZSBzdGF0dXMgYmFyCiAgICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8RGlzYWJsZVJlY29yZD4gbURpc2FibGVSZWNvcmRzID0gbmV3IEFycmF5TGlzdDxEaXNhYmxlUmVjb3JkPigpOwpAQCAtOTYsOSArOTQsNiBAQAogICAgICAgICBtQ29udGV4dCA9IGNvbnRleHQ7CiAgICAgICAgIG1XaW5kb3dNYW5hZ2VyID0gd2luZG93TWFuYWdlcjsKIAotICAgICAgICBmaW5hbCBSZXNvdXJjZXMgcmVzID0gY29udGV4dC5nZXRSZXNvdXJjZXMoKTsKLSAgICAgICAgbUljb25zLmRlZmluZVNsb3RzKHJlcy5nZXRTdHJpbmdBcnJheShjb20uYW5kcm9pZC5pbnRlcm5hbC5SLmFycmF5LmNvbmZpZ19zdGF0dXNCYXJJY29ucykpOwotCiAgICAgICAgIExvY2FsU2VydmljZXMuYWRkU2VydmljZShTdGF0dXNCYXJNYW5hZ2VySW50ZXJuYWwuY2xhc3MsIG1JbnRlcm5hbFNlcnZpY2UpOwogICAgIH0KIApAQCAtMjE2LDEyICsyMTEsMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBleHBhbmRTZXR0aW5nc1BhbmVsKCkgeworICAgIHB1YmxpYyB2b2lkIGV4cGFuZFNldHRpbmdzUGFuZWwoU3RyaW5nIHN1YlBhbmVsKSB7CiAgICAgICAgIGVuZm9yY2VFeHBhbmRTdGF0dXNCYXIoKTsKIAogICAgICAgICBpZiAobUJhciAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1CYXIuYW5pbWF0ZUV4cGFuZFNldHRpbmdzUGFuZWwoKTsKKyAgICAgICAgICAgICAgICBtQmFyLmFuaW1hdGVFeHBhbmRTZXR0aW5nc1BhbmVsKHN1YlBhbmVsKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDAsMTkgKzI5NSwxNCBAQAogICAgICAgICBlbmZvcmNlU3RhdHVzQmFyKCk7CiAKICAgICAgICAgc3luY2hyb25pemVkIChtSWNvbnMpIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IG1JY29ucy5nZXRTbG90SW5kZXgoc2xvdCk7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJpbnZhbGlkIHN0YXR1cyBiYXIgaWNvbiBzbG90OiAiICsgc2xvdCk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIFN0YXR1c0Jhckljb24gaWNvbiA9IG5ldyBTdGF0dXNCYXJJY29uKGljb25QYWNrYWdlLCBVc2VySGFuZGxlLlNZU1RFTSwgaWNvbklkLAogICAgICAgICAgICAgICAgICAgICBpY29uTGV2ZWwsIDAsIGNvbnRlbnREZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAvL1Nsb2cuZChUQUcsICJzZXRJY29uIHNsb3Q9IiArIHNsb3QgKyAiIGluZGV4PSIgKyBpbmRleCArICIgaWNvbj0iICsgaWNvbik7Ci0gICAgICAgICAgICBtSWNvbnMuc2V0SWNvbihpbmRleCwgaWNvbik7CisgICAgICAgICAgICBtSWNvbnMucHV0KHNsb3QsIGljb24pOwogCiAgICAgICAgICAgICBpZiAobUJhciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgbUJhci5zZXRJY29uKGluZGV4LCBpY29uKTsKKyAgICAgICAgICAgICAgICAgICAgbUJhci5zZXRJY29uKHNsb3QsIGljb24pOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMyMCwyNiArMzEwLDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0SWNvblZpc2liaWxpdHkoU3RyaW5nIHNsb3QsIGJvb2xlYW4gdmlzaWJsZSkgeworICAgIHB1YmxpYyB2b2lkIHNldEljb25WaXNpYmlsaXR5KFN0cmluZyBzbG90LCBib29sZWFuIHZpc2liaWxpdHkpIHsKICAgICAgICAgZW5mb3JjZVN0YXR1c0JhcigpOwogCiAgICAgICAgIHN5bmNocm9uaXplZCAobUljb25zKSB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBtSWNvbnMuZ2V0U2xvdEluZGV4KHNsb3QpOwotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiaW52YWxpZCBzdGF0dXMgYmFyIGljb24gc2xvdDogIiArIHNsb3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdGF0dXNCYXJJY29uIGljb24gPSBtSWNvbnMuZ2V0SWNvbihpbmRleCk7CisgICAgICAgICAgICBTdGF0dXNCYXJJY29uIGljb24gPSBtSWNvbnMuZ2V0KHNsb3QpOwogICAgICAgICAgICAgaWYgKGljb24gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGljb24udmlzaWJsZSAhPSB2aXNpYmxlKSB7Ci0gICAgICAgICAgICAgICAgaWNvbi52aXNpYmxlID0gdmlzaWJsZTsKKyAgICAgICAgICAgIGlmIChpY29uLnZpc2libGUgIT0gdmlzaWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGljb24udmlzaWJsZSA9IHZpc2liaWxpdHk7CiAKICAgICAgICAgICAgICAgICBpZiAobUJhciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtQmFyLnNldEljb24oaW5kZXgsIGljb24pOworICAgICAgICAgICAgICAgICAgICAgICAgbUJhci5zZXRJY29uKHNsb3QsIGljb24pOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTM1MiwxNiArMzM2LDExIEBACiAgICAgICAgIGVuZm9yY2VTdGF0dXNCYXIoKTsKIAogICAgICAgICBzeW5jaHJvbml6ZWQgKG1JY29ucykgewotICAgICAgICAgICAgaW50IGluZGV4ID0gbUljb25zLmdldFNsb3RJbmRleChzbG90KTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oImludmFsaWQgc3RhdHVzIGJhciBpY29uIHNsb3Q6ICIgKyBzbG90KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUljb25zLnJlbW92ZUljb24oaW5kZXgpOworICAgICAgICAgICAgbUljb25zLnJlbW92ZShzbG90KTsKIAogICAgICAgICAgICAgaWYgKG1CYXIgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIG1CYXIucmVtb3ZlSWNvbihpbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1CYXIucmVtb3ZlSWNvbihzbG90KTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01MDMsMTAgKzQ4MiwxMCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNob3dLZXlib2FyZFNob3J0Y3V0c01lbnUoKSB7CisgICAgcHVibGljIHZvaWQgdG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHNNZW51KCkgewogICAgICAgICBpZiAobUJhciAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1CYXIuc2hvd0tleWJvYXJkU2hvcnRjdXRzTWVudSgpOworICAgICAgICAgICAgICAgIG1CYXIudG9nZ2xlS2V5Ym9hcmRTaG9ydGN1dHNNZW51KCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHt9CiAgICAgICAgIH0KICAgICB9CkBAIC01ODMsMTQgKzU2MiwxNyBAQAogICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBzdGF0dXMgYmFyIHNlcnZpY2UuCiAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWdpc3RlclN0YXR1c0JhcihJU3RhdHVzQmFyIGJhciwgU3RhdHVzQmFySWNvbkxpc3QgaWNvbkxpc3QsCi0gICAgICAgICAgICBpbnQgc3dpdGNoZXNbXSwgTGlzdDxJQmluZGVyPiBiaW5kZXJzKSB7CisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJTdGF0dXNCYXIoSVN0YXR1c0JhciBiYXIsIExpc3Q8U3RyaW5nPiBpY29uU2xvdHMsCisgICAgICAgICAgICBMaXN0PFN0YXR1c0Jhckljb24+IGljb25MaXN0LCBpbnQgc3dpdGNoZXNbXSwgTGlzdDxJQmluZGVyPiBiaW5kZXJzKSB7CiAgICAgICAgIGVuZm9yY2VTdGF0dXNCYXJTZXJ2aWNlKCk7CiAKICAgICAgICAgU2xvZy5pKFRBRywgInJlZ2lzdGVyU3RhdHVzQmFyIGJhcj0iICsgYmFyKTsKICAgICAgICAgbUJhciA9IGJhcjsKICAgICAgICAgc3luY2hyb25pemVkIChtSWNvbnMpIHsKLSAgICAgICAgICAgIGljb25MaXN0LmNvcHlGcm9tKG1JY29ucyk7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBzbG90IDogbUljb25zLmtleVNldCgpKSB7CisgICAgICAgICAgICAgICAgaWNvblNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgICAgICAgICBpY29uTGlzdC5hZGQobUljb25zLmdldChzbG90KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgc3dpdGNoZXNbMF0gPSBnYXRoZXJEaXNhYmxlQWN0aW9uc0xvY2tlZChtQ3VycmVudFVzZXJJZCwgMSk7CkBAIC04MTIsMTAgKzc5NCw2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBzeW5jaHJvbml6ZWQgKG1JY29ucykgewotICAgICAgICAgICAgbUljb25zLmR1bXAocHcpOwotICAgICAgICB9Ci0KICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgcHcucHJpbnRsbigiICBtRGlzYWJsZWQxPTB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobURpc2FibGVkMSkpOwogICAgICAgICAgICAgcHcucHJpbnRsbigiICBtRGlzYWJsZWQyPTB4IiArIEludGVnZXIudG9IZXhTdHJpbmcobURpc2FibGVkMikpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90cnVzdC9UcnVzdE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3RydXN0L1RydXN0TWFuYWdlclNlcnZpY2UuamF2YQppbmRleCA0YjZkYjk5Li40MmI4NzIxIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3RydXN0L1RydXN0TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3RydXN0L1RydXN0TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNTMsNyArNTMsNiBAQAogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogaW1wb3J0IGFuZHJvaWQub3MuVXNlck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5zdG9yYWdlLlN0b3JhZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CiBpbXBvcnQgYW5kcm9pZC5zZXJ2aWNlLnRydXN0LlRydXN0QWdlbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5BcnJheVNldDsKQEAgLTI5MSwxNCArMjkwLDkgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXREZXZpY2VMb2NrZWRGb3JVc2VyKGludCB1c2VySWQsIGJvb2xlYW4gbG9ja2VkKSB7Ci0gICAgICAgIGlmIChMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBVc2VySW5mbyBpbmZvID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJJbmZvKHVzZXJJZCk7Ci0gICAgICAgICAgICBpZiAoaW5mby5pc01hbmFnZWRQcm9maWxlKCkpIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1EZXZpY2VMb2NrZWRGb3JVc2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2VMb2NrZWRGb3JVc2VyLnB1dCh1c2VySWQsIGxvY2tlZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMb2cud3RmKFRBRywgIlJlcXVlc3RlZCB0byBjaGFuZ2UgbG9jayBzdGF0ZSBmb3Igbm9uLXByb2ZpbGUgdXNlciAiICsgdXNlcklkKTsKKyAgICAgICAgaWYgKG1Mb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlRW5hYmxlZCh1c2VySWQpKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1EZXZpY2VMb2NrZWRGb3JVc2VyKSB7CisgICAgICAgICAgICAgICAgbURldmljZUxvY2tlZEZvclVzZXIucHV0KHVzZXJJZCwgbG9ja2VkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTY3MCw3ICs2NjQsNyBAQAogICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUxvY2tlZChpbnQgdXNlcklkKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgICAgIHVzZXJJZCA9IEFjdGl2aXR5TWFuYWdlci5oYW5kbGVJbmNvbWluZ1VzZXIoZ2V0Q2FsbGluZ1BpZCgpLCBnZXRDYWxsaW5nVWlkKCksIHVzZXJJZCwKICAgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogYWxsb3dBbGwgKi8sIHRydWUgLyogcmVxdWlyZUZ1bGwgKi8sICJpc0RldmljZUxvY2tlZCIsIG51bGwpOwotICAgICAgICAgICAgaWYgKCFMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBpZiAoIW1Mb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlRW5hYmxlZCh1c2VySWQpKSB7CiAgICAgICAgICAgICAgICAgdXNlcklkID0gcmVzb2x2ZVByb2ZpbGVQYXJlbnQodXNlcklkKTsKICAgICAgICAgICAgIH0KIApAQCAtNjgxLDExICs2NzUsMTMgQEAKICAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VTZWN1cmUoaW50IHVzZXJJZCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CiAgICAgICAgICAgICB1c2VySWQgPSBBY3Rpdml0eU1hbmFnZXIuaGFuZGxlSW5jb21pbmdVc2VyKGdldENhbGxpbmdQaWQoKSwgZ2V0Q2FsbGluZ1VpZCgpLCB1c2VySWQsCiAgICAgICAgICAgICAgICAgICAgIGZhbHNlIC8qIGFsbG93QWxsICovLCB0cnVlIC8qIHJlcXVpcmVGdWxsICovLCAiaXNEZXZpY2VTZWN1cmUiLCBudWxsKTsKLSAgICAgICAgICAgIHVzZXJJZCA9IHJlc29sdmVQcm9maWxlUGFyZW50KHVzZXJJZCk7CiAKICAgICAgICAgICAgIGxvbmcgdG9rZW4gPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb2NrUGF0dGVyblV0aWxzKG1Db250ZXh0KS5pc1NlY3VyZSh1c2VySWQpOworICAgICAgICAgICAgICAgIGlmICghbUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKHVzZXJJZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlcklkID0gcmVzb2x2ZVByb2ZpbGVQYXJlbnQodXNlcklkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIG1Mb2NrUGF0dGVyblV0aWxzLmlzU2VjdXJlKHVzZXJJZCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KHRva2VuKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dEhhbC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90di9UdklucHV0SGFsLmphdmEKaW5kZXggYTAzNTgyNi4uZWJiYjhiMyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90di9UdklucHV0SGFsLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90di9UdklucHV0SGFsLmphdmEKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgIGlmIChtUHRyICE9IDBsKSB7CisgICAgICAgICAgICBpZiAobVB0ciAhPSAwTCkgewogICAgICAgICAgICAgICAgIG5hdGl2ZUNsb3NlKG1QdHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3R2L1R2SW5wdXRIYXJkd2FyZU1hbmFnZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dEhhcmR3YXJlTWFuYWdlci5qYXZhCmluZGV4IDdmNGM0MmIuLjU3ODQyOGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dEhhcmR3YXJlTWFuYWdlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dEhhcmR3YXJlTWFuYWdlci5qYXZhCkBAIC0xNyw2ICsxNyw3IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci50djsKIAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm1lZGlhLnR2LlR2SW5wdXRNYW5hZ2VyLklOUFVUX1NUQVRFX0NPTk5FQ1RFRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS50di5UdklucHV0TWFuYWdlci5JTlBVVF9TVEFURV9DT05ORUNURURfU1RBTkRCWTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5tZWRpYS50di5UdklucHV0TWFuYWdlci5JTlBVVF9TVEFURV9ESVNDT05ORUNURUQ7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7CkBAIC0zOCw2ICszOSw3IEBACiBpbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1BhdGNoOwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Qb3J0OwogaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Qb3J0Q29uZmlnOworaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9TeXN0ZW07CiBpbXBvcnQgYW5kcm9pZC5tZWRpYS50di5JVHZJbnB1dEhhcmR3YXJlOwogaW1wb3J0IGFuZHJvaWQubWVkaWEudHYuSVR2SW5wdXRIYXJkd2FyZUNhbGxiYWNrOwogaW1wb3J0IGFuZHJvaWQubWVkaWEudHYuVHZJbnB1dEhhcmR3YXJlSW5mbzsKQEAgLTEwMiw3ICsxMDQsNiBAQAogICAgIHByaXZhdGUgaW50IG1DdXJyZW50SW5kZXggPSAwOwogICAgIHByaXZhdGUgaW50IG1DdXJyZW50TWF4SW5kZXggPSAwOwogCi0gICAgLy8gVE9ETzogU2hvdWxkIGhhbmRsZSBTVEFOREJZIGNhc2UuCiAgICAgcHJpdmF0ZSBmaW5hbCBTcGFyc2VCb29sZWFuQXJyYXkgbUhkbWlTdGF0ZU1hcCA9IG5ldyBTcGFyc2VCb29sZWFuQXJyYXkoKTsKICAgICBwcml2YXRlIGZpbmFsIExpc3Q8TWVzc2FnZT4gbVBlbmRpbmdIZG1pRGV2aWNlRXZlbnRzID0gbmV3IExpbmtlZExpc3Q8PigpOwogCkBAIC0yMDYsNyArMjA3LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBpbnB1dElkID0gbUhhcmR3YXJlSW5wdXRJZE1hcC5nZXQoZGV2aWNlSWQpOwogICAgICAgICAgICAgaWYgKGlucHV0SWQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTGlzdGVuZXJIYW5kbGVyLlNUQVRFX0NIQU5HRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0Q29ubmVjdGVkVG9TdGF0ZShjb25maWdzLmxlbmd0aCA+IDApLCAwLCBpbnB1dElkKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9idGFpblN0YXRlRnJvbUNvbmZpZ3MoY29uZmlncyksIDAsIGlucHV0SWQpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgSVR2SW5wdXRIYXJkd2FyZUNhbGxiYWNrIGNhbGxiYWNrID0gY29ubmVjdGlvbi5nZXRDYWxsYmFja0xvY2tlZCgpOwogICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHsKQEAgLTI1NiwxMiArMjU3LDEzIEBACiAgICAgICAgICAgICAgICAgfHwgY29ubmVjdGlvbkNhbGxpbmdVaWQgIT0gY2FsbGluZ1VpZCB8fCBjb25uZWN0aW9uUmVzb2x2ZWRVc2VySWQgIT0gcmVzb2x2ZWRVc2VySWQ7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBpbnQgY29udmVydENvbm5lY3RlZFRvU3RhdGUoYm9vbGVhbiBjb25uZWN0ZWQpIHsKLSAgICAgICAgaWYgKGNvbm5lY3RlZCkgewotICAgICAgICAgICAgcmV0dXJuIElOUFVUX1NUQVRFX0NPTk5FQ1RFRDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBJTlBVVF9TVEFURV9ESVNDT05ORUNURUQ7CisgICAgcHJpdmF0ZSBpbnQgb2J0YWluU3RhdGVGcm9tQ29uZmlncyhUdlN0cmVhbUNvbmZpZ1tdIGNvbmZpZ3MpIHsKKyAgICAgICAgZm9yIChUdlN0cmVhbUNvbmZpZyBjb25maWcgOiBjb25maWdzKSB7CisgICAgICAgICAgICBpZiAoKGNvbmZpZy5nZXRGbGFncygpICYgVHZTdHJlYW1Db25maWcuRkxBR19NQVNLX1NJR05BTF9ERVRFQ1RJT04pICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSU5QVVRfU1RBVEVfQ09OTkVDVEVEOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHJldHVybiAoY29uZmlncy5sZW5ndGggPiAwKSA/IElOUFVUX1NUQVRFX0NPTk5FQ1RFRF9TVEFOREJZIDogSU5QVVRfU1RBVEVfRElTQ09OTkVDVEVEOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGFkZEhhcmR3YXJlVHZJbnB1dChpbnQgZGV2aWNlSWQsIFR2SW5wdXRJbmZvIGluZm8pIHsKQEAgLTI4Niw5ICsyODgsMTQgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgU3RyaW5nIGlucHV0SWQgPSBtSGFyZHdhcmVJbnB1dElkTWFwLmdldChoYXJkd2FyZUluZm8uZ2V0RGV2aWNlSWQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlucHV0SWQgIT0gbnVsbCAmJiBpbnB1dElkLmVxdWFscyhpbmZvLmdldElkKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoTGlzdGVuZXJIYW5kbGVyLlNUQVRFX0NIQU5HRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydENvbm5lY3RlZFRvU3RhdGUobUhkbWlTdGF0ZU1hcC52YWx1ZUF0KGkpKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dElkKS5zZW5kVG9UYXJnZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm8gSERNSSBob3RwbHVnIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gZGlzY29ubmVjdGVkLCBhcyBvbGQgZGV2aWNlcyBtYXkKKyAgICAgICAgICAgICAgICAgICAgLy8gbm90IHJlcG9ydCBob3RwbHVnIHN0YXRlIGNvcnJlY3RseS4gVXNpbmcgSU5QVVRfU1RBVEVfQ09OTkVDVEVEX1NUQU5EQlkgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gZGVub3RlIHVua25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZSA9IG1IZG1pU3RhdGVNYXAudmFsdWVBdChpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSU5QVVRfU1RBVEVfQ09OTkVDVEVECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJTlBVVF9TVEFURV9DT05ORUNURURfU1RBTkRCWTsKKyAgICAgICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0ZW5lckhhbmRsZXIuU1RBVEVfQ0hBTkdFRCwgc3RhdGUsIDAsIGlucHV0SWQpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjk2LDcgKzMwMyw3IEBACiAgICAgICAgICAgICBDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBtQ29ubmVjdGlvbnMuZ2V0KGRldmljZUlkKTsKICAgICAgICAgICAgIGlmIChjb25uZWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKExpc3RlbmVySGFuZGxlci5TVEFURV9DSEFOR0VELAotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydENvbm5lY3RlZFRvU3RhdGUoY29ubmVjdGlvbi5nZXRDb25maWdzTG9ja2VkKCkubGVuZ3RoID4gMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBvYnRhaW5TdGF0ZUZyb21Db25maWdzKGNvbm5lY3Rpb24uZ2V0Q29uZmlnc0xvY2tlZCgpKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZ2V0SWQoKSkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY5Nyw3ICs3MDQsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaW50IHNpbmtEZXZpY2UgPSBtQXVkaW9NYW5hZ2VyLmdldERldmljZXNGb3JTdHJlYW0oQXVkaW9NYW5hZ2VyLlNUUkVBTV9NVVNJQyk7CiAgICAgICAgICAgICBmb3IgKEF1ZGlvRGV2aWNlUG9ydCBwb3J0IDogZGV2aWNlUG9ydHMpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHBvcnQudHlwZSgpICYgc2lua0RldmljZSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmICgocG9ydC50eXBlKCkgJiBzaW5rRGV2aWNlKSAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgIChwb3J0LnR5cGUoKSAmIEF1ZGlvU3lzdGVtLkRFVklDRV9CSVRfSU4pID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgc2lua3MuYWRkKHBvcnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTExMTAsOCArMTExOCwxNCBAQAogICAgICAgICAgICAgICAgIGlmIChpbnB1dElkID09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKExpc3RlbmVySGFuZGxlci5TVEFURV9DSEFOR0VELAotICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydENvbm5lY3RlZFRvU3RhdGUoZXZlbnQuaXNDb25uZWN0ZWQoKSksIDAsIGlucHV0SWQpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgICAgIC8vIE5vIEhETUkgaG90cGx1ZyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGRpc2Nvbm5lY3RlZCwgYXMgb2xkIGRldmljZXMgbWF5CisgICAgICAgICAgICAgICAgLy8gbm90IHJlcG9ydCBob3RwbHVnIHN0YXRlIGNvcnJlY3RseS4gVXNpbmcgSU5QVVRfU1RBVEVfQ09OTkVDVEVEX1NUQU5EQlkgdG8KKyAgICAgICAgICAgICAgICAvLyBkZW5vdGUgdW5rbm93biBzdGF0ZS4KKyAgICAgICAgICAgICAgICBpbnQgc3RhdGUgPSBldmVudC5pc0Nvbm5lY3RlZCgpCisgICAgICAgICAgICAgICAgICAgICAgICA/IElOUFVUX1NUQVRFX0NPTk5FQ1RFRAorICAgICAgICAgICAgICAgICAgICAgICAgOiBJTlBVVF9TVEFURV9DT05ORUNURURfU1RBTkRCWTsKKyAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgICAgICAgICAgICAgTGlzdGVuZXJIYW5kbGVyLlNUQVRFX0NIQU5HRUQsIHN0YXRlLCAwLCBpbnB1dElkKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3R2L1R2SW5wdXRNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IGQ4MTRlYmYuLjMxOTNmZjggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdHYvVHZJbnB1dE1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci90di9UdklucHV0TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtNDY1LDcgKzQ2NSw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjb250ZXh0ID0gbUNvbnRleHQuY3JlYXRlUGFja2FnZUNvbnRleHRBc1VzZXIoImFuZHJvaWQiLCAwLCB1c2VyKTsKICAgICAgICAgfSBjYXRjaCAoTmFtZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNsb2cuZShUQUcsICJmYWlsZWQgdG8gY3JlYXRlIHBhY2thZ2UgY29udGVueHQgYXMgdXNlciAiICsgdXNlcik7CisgICAgICAgICAgICBTbG9nLmUoVEFHLCAiZmFpbGVkIHRvIGNyZWF0ZSBwYWNrYWdlIGNvbnRleHQgYXMgdXNlciAiICsgdXNlcik7CiAgICAgICAgICAgICBjb250ZXh0ID0gbUNvbnRleHQ7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlckludGVybmFsLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlckludGVybmFsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkYjM2NAotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJNYW5hZ2VySW50ZXJuYWwuamF2YQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLnZyOworCisvKioKKyAqIFZSIG1vZGUgbG9jYWwgc3lzdGVtIHNlcnZpY2UgaW50ZXJmYWNlLgorICoKKyAqIEBoaWRlIE9ubHkgZm9yIHVzZSB3aXRoaW4gc3lzdGVtIHNlcnZlci4KKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIFZyTWFuYWdlckludGVybmFsIHsKKworICAgIC8qKgorICAgICAqIFJldHVybiBjdXJyZW50IFZSIG1vZGUgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBWUiBtb2RlIGlzIGVuYWJsZWQuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNJblZyTW9kZSgpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjdXJyZW50IFZSIG1vZGUgc3RhdGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZW5hYmxlZCB7QGNvZGUgdHJ1ZX0gdG8gZW5hYmxlIFZSIG1vZGUuCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IHZvaWQgc2V0VnJNb2RlKGJvb2xlYW4gZW5hYmxlZCk7CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBsaXN0ZW5lciBmb3IgVlIgbW9kZSBzdGF0ZSBjaGFuZ2VzLgorICAgICAqIDxwPgorICAgICAqIFRoaXMgbGlzdGVuZXIgd2lsbCBpbW1lZGlhdGVseSBiZSBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCBWUiBtb2RlIHN0YXRlLgorICAgICAqIDwvcD4KKyAgICAgKiBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIGluc3RhbmNlIHRvIGFkZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZWdpc3Rlckxpc3RlbmVyKFZyU3RhdGVMaXN0ZW5lciBsaXN0ZW5lcik7CisKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgdGhlIGxpc3RlbmVyIGZyb20gdGhlIGN1cnJlbnQgc2V0IG9mIGxpc3RlbmVycy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBsaXN0ZW5lciB0aGUgbGlzdGVuZXIgdG8gcmVtb3ZlLgorICAgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHVucmVnaXN0ZXJMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpOworCit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlclNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdnIvVnJNYW5hZ2VyU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNTVlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ZyL1ZyTWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci52cjsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlTZXQ7CitpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuU3lzdGVtU2VydmljZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CisKKy8qKgorICogU2VydmljZSB0cmFja2luZyB3aGV0aGVyIFZSIG1vZGUgaXMgYWN0aXZlLCBhbmQgbm90aWZ5aW5nIGxpc3RlbmluZyBzeXN0ZW0gc2VydmljZXMgb2Ygc3RhdGUKKyAqIGNoYW5nZXMuCisgKgorICoge0BoaWRlfQorICovCitwdWJsaWMgY2xhc3MgVnJNYW5hZ2VyU2VydmljZSBleHRlbmRzIFN5c3RlbVNlcnZpY2UgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZyTWFuYWdlclNlcnZpY2UiOworCisgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CisgICAgcHJpdmF0ZSBib29sZWFuIG1Wck1vZGVFbmFibGVkID0gZmFsc2U7CisgICAgcHJpdmF0ZSBBcnJheVNldDxWclN0YXRlTGlzdGVuZXI+IG1MaXN0ZW5lcnMgPSBuZXcgQXJyYXlTZXQ8PigpOworCisgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBMb2NhbFNlcnZpY2UgZXh0ZW5kcyBWck1hbmFnZXJJbnRlcm5hbCB7CisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0luVnJNb2RlKCkgeworICAgICAgICAgICAgcmV0dXJuIFZyTWFuYWdlclNlcnZpY2UudGhpcy5nZXRWck1vZGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBzZXRWck1vZGUoYm9vbGVhbiBlbmFibGVkKSB7CisgICAgICAgICAgICBWck1hbmFnZXJTZXJ2aWNlLnRoaXMuc2V0VnJNb2RlKGVuYWJsZWQpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyTGlzdGVuZXIoVnJTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgICAgICBWck1hbmFnZXJTZXJ2aWNlLnRoaXMuYWRkTGlzdGVuZXIobGlzdGVuZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHVucmVnaXN0ZXJMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgICAgIFZyTWFuYWdlclNlcnZpY2UudGhpcy5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgVnJNYW5hZ2VyU2VydmljZShDb250ZXh0IGNvbnRleHQpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKKyAgICAgICAgcHVibGlzaExvY2FsU2VydmljZShWck1hbmFnZXJJbnRlcm5hbC5jbGFzcywgbmV3IExvY2FsU2VydmljZSgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXIoVnJTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIG1MaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCByZW1vdmVMaXN0ZW5lcihWclN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgbUxpc3RlbmVycy5yZW1vdmUobGlzdGVuZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNldFZyTW9kZShib29sZWFuIGVuYWJsZWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgaWYgKG1Wck1vZGVFbmFibGVkICE9IGVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBtVnJNb2RlRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgICAgICAgICAgaWYgKERFQlVHKSBTbG9nLmQoVEFHLCAiVlIgbW9kZSAiICsgKChtVnJNb2RlRW5hYmxlZCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisgICAgICAgICAgICAgICAgb25Wck1vZGVDaGFuZ2VkTG9ja2VkKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gZ2V0VnJNb2RlKCkgeworICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICByZXR1cm4gbVZyTW9kZUVuYWJsZWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBOb3RpZnkgc3lzdGVtIHNlcnZpY2VzIG9mIFZSIG1vZGUgY2hhbmdlLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBvblZyTW9kZUNoYW5nZWRMb2NrZWQoKSB7CisgICAgICAgIGZvciAoVnJTdGF0ZUxpc3RlbmVyIGwgOiBtTGlzdGVuZXJzKSB7CisgICAgICAgICAgICBsLm9uVnJTdGF0ZUNoYW5nZWQobVZyTW9kZUVuYWJsZWQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL1Jlc2l6ZVRhc2tFdmVudC5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci92ci9WclN0YXRlTGlzdGVuZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYzJQpjb3B5IGZyb20gcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL1Jlc2l6ZVRhc2tFdmVudC5qYXZhCmNvcHkgdG8gc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci92ci9WclN0YXRlTGlzdGVuZXIuamF2YQppbmRleCBlMGQ4M2ZkLi5iOGFmNGIyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci92ci9WclN0YXRlTGlzdGVuZXIuamF2YQpAQCAtMTMsMjAgKzEzLDE3IEBACiAgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnN5c3RlbXVpLnJlY2VudHMuZXZlbnRzLnVpOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIudnI7CiAKIC8qKgotICogVGhpcyBpcyBzZW50IHdoZW4gYSB7QGxpbmsgVGFza30gaXMgcmVzaXplZC4KKyAqIExpc3RlbmVyIGZvciBzdGF0ZSBjaGFuZ2VzIGluIFZyTWFuYWdlclNlcnZpY2UsCiAgKi8KLXB1YmxpYyBjbGFzcyBSZXNpemVUYXNrRXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgVnJTdGF0ZUxpc3RlbmVyIHsKIAotICAgIHB1YmxpYyBmaW5hbCBUYXNrIHRhc2s7Ci0KLSAgICBwdWJsaWMgUmVzaXplVGFza0V2ZW50KFRhc2sgdGFzaykgewotICAgICAgICB0aGlzLnRhc2sgPSB0YXNrOwotICAgIH0KKyAgLyoqCisgICAqIENhbGxlZCB3aGVuIHRoZSBWUiBtb2RlIHN0YXRlIGNoYW5nZXMuCisgICAqCisgICAqIEBwYXJhbSBlbmFibGVkIHtAY29kZSB0cnVlfSBpZiBWUiBtb2RlIGlzIGVuYWJsZWQuCisgICAqLworICAgIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG9uVnJTdGF0ZUNoYW5nZWQoYm9vbGVhbiBlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2Via2l0L1dlYlZpZXdVcGRhdGVTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dlYmtpdC9XZWJWaWV3VXBkYXRlU2VydmljZS5qYXZhCmluZGV4IDk3NzEzZmMuLmMzYTZmNWQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd2Via2l0L1dlYlZpZXdVcGRhdGVTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93ZWJraXQvV2ViVmlld1VwZGF0ZVNlcnZpY2UuamF2YQpAQCAtMTYsMTggKzE2LDM1IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndlYmtpdDsKIAoraW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlck5hdGl2ZTsKK2ltcG9ydCBhbmRyb2lkLmFwcC5BcHBHbG9iYWxzOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkFwcGxpY2F0aW9uSW5mbzsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CitpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5TaWduYXR1cmU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3M7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TZWN1cmU7CitpbXBvcnQgYW5kcm9pZC51dGlsLkFuZHJvaWRSdW50aW1lRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQud2Via2l0LklXZWJWaWV3VXBkYXRlU2VydmljZTsKK2ltcG9ydCBhbmRyb2lkLndlYmtpdC5XZWJWaWV3UHJvdmlkZXJJbmZvOworaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXdQcm92aWRlclJlc3BvbnNlOwogaW1wb3J0IGFuZHJvaWQud2Via2l0LldlYlZpZXdGYWN0b3J5OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLlN5c3RlbVNlcnZpY2U7CiAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCiAvKioKICAqIFByaXZhdGUgc2VydmljZSB0byB3YWl0IGZvciB0aGUgdXBkYXRhYmxlIFdlYlZpZXcgdG8gYmUgcmVhZHkgZm9yIHVzZS4KICAqIEBoaWRlCkBAIC0zNSwxMiArNTIsMjMgQEAKIHB1YmxpYyBjbGFzcyBXZWJWaWV3VXBkYXRlU2VydmljZSBleHRlbmRzIFN5c3RlbVNlcnZpY2UgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJWaWV3VXBkYXRlU2VydmljZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRU9VVF9NUyA9IDUwMDA7IC8vIFNhbWUgYXMgS0VZX0RJU1BBVENISU5HX1RJTUVPVVQuCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRfVElNRU9VVF9NUyA9IDQ1MDA7IC8vIEtFWV9ESVNQQVRDSElOR19USU1FT1VUIGlzIDUwMDAuCiAKLSAgICBwcml2YXRlIGJvb2xlYW4gbVJlbHJvUmVhZHkzMkJpdCA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtUmVscm9SZWFkeTY0Qml0ID0gZmFsc2U7CisgICAgLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBydW5uaW5nIHJlbHJvIGNyZWF0aW9ucworICAgIHByaXZhdGUgaW50IG1OdW1SZWxyb0NyZWF0aW9uc1N0YXJ0ZWQgPSAwOworICAgIHByaXZhdGUgaW50IG1OdW1SZWxyb0NyZWF0aW9uc0ZpbmlzaGVkID0gMDsKKyAgICAvLyBJbXBsaWVzIHRoYXQgd2UgbmVlZCB0byByZXJ1biByZWxybyBjcmVhdGlvbiBiZWNhdXNlIHdlIGFyZSB1c2luZyBhbiBvdXQtb2YtZGF0ZSBwYWNrYWdlCisgICAgcHJpdmF0ZSBib29sZWFuIG1XZWJWaWV3UGFja2FnZURpcnR5ID0gZmFsc2U7CisgICAgLy8gU2V0IHRvIHRydWUgd2hlbiB0aGUgY3VycmVudCBwcm92aWRlciBpcyBiZWluZyByZXBsYWNlZAorICAgIHByaXZhdGUgYm9vbGVhbiBtQ3VycmVudFByb3ZpZGVyQmVpbmdSZXBsYWNlZCA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBtQW55V2ViVmlld0luc3RhbGxlZCA9IGZhbHNlOwogCi0gICAgcHJpdmF0ZSBTdHJpbmcgb2xkV2ViVmlld1BhY2thZ2VOYW1lID0gbnVsbDsKKyAgICBwcml2YXRlIGludCBOVU1CRVJfT0ZfUkVMUk9TX1VOS05PV04gPSBJbnRlZ2VyLk1BWF9WQUxVRTsKKworICAgIC8vIFRoZSBXZWJWaWV3IHBhY2thZ2UgY3VycmVudGx5IGluIHVzZSAob3IgdGhlIG9uZSB3ZSBhcmUgcHJlcGFyaW5nKS4KKyAgICBwcml2YXRlIFBhY2thZ2VJbmZvIG1DdXJyZW50V2ViVmlld1BhY2thZ2UgPSBudWxsOworICAgIC8vIFRoZSBXZWJWaWV3IHByb3ZpZGVycyB0aGF0IGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlLgorICAgIHByaXZhdGUgV2ViVmlld1Byb3ZpZGVySW5mb1tdIG1DdXJyZW50VmFsaWRXZWJWaWV3UGFja2FnZXMgPSBudWxsOwogCiAgICAgcHJpdmF0ZSBCcm9hZGNhc3RSZWNlaXZlciBtV2ViVmlld1VwZGF0ZWRSZWNlaXZlcjsKIApAQCAtNTMsMjggKzgxLDY5IEBACiAgICAgICAgIG1XZWJWaWV3VXBkYXRlZFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLQotICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGEgcGFja2FnZSBpcyByZXBsYWNlZCB3ZSB3aWxsIHJlY2VpdmUgdHdvIGludGVudHMsIG9uZSByZXByZXNlbnRpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92YWwgb2YgdGhlIG9sZCBwYWNrYWdlIGFuZCBvbmUgcmVwcmVzZW50aW5nIHRoZSBhZGRpdGlvbiBvZiB0aGUgbmV3Ci0gICAgICAgICAgICAgICAgICAgIC8vIHBhY2thZ2UuIFdlIGhlcmUgaWdub3JlIHRoZSBpbnRlbnQgcmVwcmVzZW50aW5nIHRoZSByZW1vdmVkIHBhY2thZ2UgdG8gbWFrZQotICAgICAgICAgICAgICAgICAgICAvLyBzdXJlIHdlIGRvbid0IGNoYW5nZSBXZWJWaWV3IHByb3ZpZGVyIHR3aWNlLgorICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGEgcGFja2FnZSBpcyByZXBsYWNlZCB3ZSB3aWxsIHJlY2VpdmUgdHdvIGludGVudHMsIG9uZSByZXByZXNlbnRpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlbW92YWwgb2YgdGhlIG9sZCBwYWNrYWdlIGFuZCBvbmUgcmVwcmVzZW50aW5nIHRoZSBhZGRpdGlvbiBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gbmV3IHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHdlIHJlY2VpdmUgYW4gaW50ZW50IHRvIHJlbW92ZSB0aGUgb2xkIHZlcnNpb24gb2YgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHBhY2thZ2UgdGhhdCBpcyBiZWluZyByZXBsYWNlZCB3ZSBzZXQgYSBmbGFnIGhlcmUgYW5kIGVhcmx5LW91dCBzbyB0aGF0IHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGNoYW5nZSBwcm92aWRlciB3aGlsZSByZXBsYWNpbmcgdGhlIGN1cnJlbnQgcGFja2FnZSAod2Ugd2lsbCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSBwcm92aWRlciB3aGVuIHRoZSBuZXcgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQpLgogICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50LmdldEFjdGlvbigpLmVxdWFscyhJbnRlbnQuQUNUSU9OX1BBQ0tBR0VfUkVNT1ZFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBpbnRlbnQuZ2V0RXh0cmFzKCkuZ2V0Qm9vbGVhbihJbnRlbnQuRVhUUkFfUkVQTEFDSU5HKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgJiYgaW50ZW50LmdldEV4dHJhcygpLmdldEJvb2xlYW4oSW50ZW50LkVYVFJBX1JFUExBQ0lORykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50V2ViVmlld1BhY2thZ2UgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHdlYlZpZXdQYWNrYWdlID0gInBhY2thZ2U6IiArIG1DdXJyZW50V2ViVmlld1BhY2thZ2UucGFja2FnZU5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdlYlZpZXdQYWNrYWdlLmVxdWFscyhpbnRlbnQuZ2V0RGF0YVN0cmluZygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRQcm92aWRlckJlaW5nUmVwbGFjZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwYWNrYWdlTmFtZSA6IFdlYlZpZXdGYWN0b3J5LmdldFdlYlZpZXdQYWNrYWdlTmFtZXMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHdlYnZpZXdQYWNrYWdlID0gInBhY2thZ2U6IiArIHBhY2thZ2VOYW1lOworICAgICAgICAgICAgICAgICAgICBmb3IgKFdlYlZpZXdQcm92aWRlckluZm8gcHJvdmlkZXIgOiBXZWJWaWV3RmFjdG9yeS5nZXRXZWJWaWV3UGFja2FnZXMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHdlYnZpZXdQYWNrYWdlID0gInBhY2thZ2U6IiArIHByb3ZpZGVyLnBhY2thZ2VOYW1lOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2Vidmlld1BhY2thZ2UuZXF1YWxzKGludGVudC5nZXREYXRhU3RyaW5nKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVzZWRQYWNrYWdlTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZpZXdGYWN0b3J5LmZpbmRQcmVmZXJyZWRXZWJWaWV3UGFja2FnZSgpLnBhY2thZ2VOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpZ2dlciB1cGRhdGUgYWN0aW9ucyBpZiB0aGUgdXBkYXRlZCBwYWNrYWdlIGlzIHRoZSBvbmUgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgdXNlZCwgb3IgdGhlIG9uZSB0aGF0IHdhcyBpbiB1c2UgYmVmb3JlIHRoZSB1cGRhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2thZ2VOYW1lLmVxdWFscyh1c2VkUGFja2FnZU5hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZS5lcXVhbHMob2xkV2ViVmlld1BhY2thZ2VOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbldlYlZpZXdVcGRhdGVJbnN0YWxsZWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkV2ViVmlld1BhY2thZ2VOYW1lID0gdXNlZFBhY2thZ2VOYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gdXBkYXRlV2ViVmlldyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gcmVtb3ZlZE9sZFBhY2thZ2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb2xkUHJvdmlkZXJOYW1lID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBuZXdQYWNrYWdlID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQoV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsaWRXZWJWaWV3UGFja2FnZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhY2thZ2UgPSBmaW5kUHJlZmVycmVkV2ViVmlld1BhY2thZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFdlYlZpZXdQYWNrYWdlICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUHJvdmlkZXJOYW1lID0gbUN1cnJlbnRXZWJWaWV3UGFja2FnZS5wYWNrYWdlTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgdHJpZ2dlciB1cGRhdGUgYWN0aW9ucyBpZiB0aGUgdXBkYXRlZCBwYWNrYWdlIGlzIHRoZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBiZSB1c2VkLCBvciB0aGUgb25lIHRoYXQgd2FzIGluIHVzZSBiZWZvcmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGUsIG9yIGlmIHdlIGhhdmVuJ3Qgc2VlbiBhIHZhbGlkIFdlYlZpZXcgcGFja2FnZSBiZWZvcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVXZWJWaWV3ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlci5wYWNrYWdlTmFtZS5lcXVhbHMobmV3UGFja2FnZS5wYWNrYWdlTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcm92aWRlci5wYWNrYWdlTmFtZS5lcXVhbHMob2xkUHJvdmlkZXJOYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1DdXJyZW50V2ViVmlld1BhY2thZ2UgPT0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHJlbW92ZWQgdGhlIG9sZCBwYWNrYWdlIGlmIHdlIHJlY2VpdmVkIGFuIGludGVudCB0byByZW1vdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHJlcGxhY2UgdGhlIG9sZCBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZE9sZFBhY2thZ2UgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLnBhY2thZ2VOYW1lLmVxdWFscyhvbGRQcm92aWRlck5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZVdlYlZpZXcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbldlYlZpZXdQcm92aWRlckNoYW5nZWQobmV3UGFja2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFdlYlZpZXdGYWN0b3J5Lk1pc3NpbmdXZWJWaWV3UGFja2FnZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiQ291bGQgbm90IGZpbmQgdmFsaWQgV2ViVmlldyBwYWNrYWdlIHRvIGNyZWF0ZSAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbHJvIHdpdGggIiArIGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVwZGF0ZVdlYlZpZXcgJiYgIXJlbW92ZWRPbGRQYWNrYWdlICYmIG9sZFByb3ZpZGVyTmFtZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm92aWRlciBjaGFuZ2UgaXMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgb3IgcmVwbGFjaW5nIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFja2FnZSB0aGF0IHdhcyBub3QgdGhlIHByZXZpb3VzIHByb3ZpZGVyIHRoZW4gd2UgbXVzdCBraWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhY2thZ2VzIGRlcGVuZGVudCBvbiB0aGUgb2xkIHBhY2thZ2Ugb3Vyc2VsdmVzLiBUaGUgZnJhbWV3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkga2lsbHMgZGVwZW5kZW50cyBvZiBwYWNrYWdlcyB0aGF0IGFyZSBiZWluZyByZW1vdmVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5raWxsUGFja2FnZURlcGVuZGVudHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkUHJvdmlkZXJOYW1lLCBnZXRDb250ZXh0KCkuZ2V0VXNlcklkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTkwLDE0ICsxNTksMTkxIEBACiAgICAgICAgIHB1Ymxpc2hCaW5kZXJTZXJ2aWNlKCJ3ZWJ2aWV3dXBkYXRlIiwgbmV3IEJpbmRlclNlcnZpY2UoKSk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIG9uV2ViVmlld1VwZGF0ZUluc3RhbGxlZCgpIHsKLSAgICAgICAgU2xvZy5kKFRBRywgIldlYlZpZXcgUGFja2FnZSB1cGRhdGVkISIpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgbVJlbHJvUmVhZHkzMkJpdCA9IGZhbHNlOwotICAgICAgICAgICAgbVJlbHJvUmVhZHk2NEJpdCA9IGZhbHNlOworICAgIC8qKgorICAgICAqIFBlcmZvcm0gYW55IFdlYlZpZXcgbG9hZGluZyBwcmVwYXJhdGlvbnMgdGhhdCBtdXN0IGhhcHBlbiBhdCBib290IGZyb20gdGhlIHN5c3RlbSBzZXJ2ZXIsCisgICAgICogYWZ0ZXIgdGhlIHBhY2thZ2UgbWFuYWdlciBoYXMgc3RhcnRlZCBvciBhZnRlciBhbiB1cGRhdGUgdG8gdGhlIHdlYnZpZXcgaXMgaW5zdGFsbGVkLgorICAgICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIHN5c3RlbSBzZXJ2ZXIuCisgICAgICogQ3VycmVudGx5LCB0aGlzIG1lYW5zIHNwYXduaW5nIHRoZSBjaGlsZCBwcm9jZXNzZXMgd2hpY2ggd2lsbCBjcmVhdGUgdGhlIHJlbHJvIGZpbGVzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgICAgIHVwZGF0ZVZhbGlkV2ViVmlld1BhY2thZ2VzKCk7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRXZWJWaWV3UGFja2FnZSA9IGZpbmRQcmVmZXJyZWRXZWJWaWV3UGFja2FnZSgpOworICAgICAgICAgICAgICAgIG9uV2ViVmlld1Byb3ZpZGVyQ2hhbmdlZChtQ3VycmVudFdlYlZpZXdQYWNrYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIC8vIExvZyBhbmQgZGlzY2FyZCBlcnJvcnMgYXQgdGhpcyBzdGFnZSBhcyB3ZSBtdXN0IG5vdCBjcmFzaCB0aGUgc3lzdGVtIHNlcnZlci4KKyAgICAgICAgICAgIFNsb2cuZShUQUcsICJlcnJvciBwcmVwYXJpbmcgd2VidmlldyBwcm92aWRlciBmcm9tIHN5c3RlbSBzZXJ2ZXIiLCB0KTsKICAgICAgICAgfQotICAgICAgICBXZWJWaWV3RmFjdG9yeS5vbldlYlZpZXdVcGRhdGVJbnN0YWxsZWQoKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIENoYW5nZSBXZWJWaWV3IHByb3ZpZGVyIGFuZCBwcm92aWRlciBzZXR0aW5nIGFuZCBraWxsIHBhY2thZ2VzIHVzaW5nIHRoZSBvbGQgcHJvdmlkZXIuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGNoYW5nZVByb3ZpZGVyQW5kU2V0dGluZyhTdHJpbmcgbmV3UHJvdmlkZXJOYW1lKSB7CisgICAgICAgIFBhY2thZ2VJbmZvIG9sZFBhY2thZ2UgPSBudWxsOworICAgICAgICBQYWNrYWdlSW5mbyBuZXdQYWNrYWdlID0gbnVsbDsKKyAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKKyAgICAgICAgICAgIG9sZFBhY2thZ2UgPSBtQ3VycmVudFdlYlZpZXdQYWNrYWdlOworICAgICAgICAgICAgdXBkYXRlVXNlclNldHRpbmcobmV3UHJvdmlkZXJOYW1lKTsKKworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBuZXdQYWNrYWdlID0gZmluZFByZWZlcnJlZFdlYlZpZXdQYWNrYWdlKCk7CisgICAgICAgICAgICAgICAgaWYgKG9sZFBhY2thZ2UgIT0gbnVsbCAmJiBuZXdQYWNrYWdlLnBhY2thZ2VOYW1lLmVxdWFscyhvbGRQYWNrYWdlLnBhY2thZ2VOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBwZXJmb3JtIHRoZSB1c2VyIGNoYW5nZSwgcmV2ZXJ0IHRoZSBzZXR0aW5ncyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJTZXR0aW5nKG5ld1BhY2thZ2UucGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBjYXRjaCAoV2ViVmlld0ZhY3RvcnkuTWlzc2luZ1dlYlZpZXdQYWNrYWdlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHLCAiVHJpZWQgdG8gY2hhbmdlIFdlYlZpZXcgcHJvdmlkZXIgYnV0IGZhaWxlZCB0byBmZXRjaCBXZWJWaWV3IHBhY2thZ2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgKyBlKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBwZXJmb3JtIHRoZSB1c2VyIGNoYW5nZSBidXQgZG9uJ3QgaGF2ZSBhbiBpbnN0YWxsZWQgV2ViVmlldyBwYWNrYWdlLAorICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgaGF2ZSBjaGFuZ2VkIHRoZSBzZXR0aW5nIGFuZCBpdCB3aWxsIGJlIHVzZWQgd2hlbiBhIHBhY2thZ2UgaXMgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9uV2ViVmlld1Byb3ZpZGVyQ2hhbmdlZChuZXdQYWNrYWdlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBLaWxsIGFwcHMgdXNpbmcgdGhlIG9sZCBwcm92aWRlcgorICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKG9sZFBhY2thZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkua2lsbFBhY2thZ2VEZXBlbmRlbnRzKAorICAgICAgICAgICAgICAgICAgICAgICAgb2xkUGFja2FnZS5wYWNrYWdlTmFtZSwgZ2V0Q29udGV4dCgpLmdldFVzZXJJZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBjaGFuZ2UgV2ViVmlldyBwcm92aWRlciwgZWl0aGVyIHdoZW4gdGhlIGN1cnJlbnQgcHJvdmlkZXIgaXMgdXBkYXRlZAorICAgICAqIG9yIGEgbmV3IHByb3ZpZGVyIGlzIGNob3NlbiAvIHRha2VzIHByZWNlZGVuY2UuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIG9uV2ViVmlld1Byb3ZpZGVyQ2hhbmdlZChQYWNrYWdlSW5mbyBuZXdQYWNrYWdlKSB7CisgICAgICAgIHN5bmNocm9uaXplZCh0aGlzKSB7CisgICAgICAgICAgICBtQW55V2ViVmlld0luc3RhbGxlZCA9IHRydWU7CisgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGNoYW5nZWQgcHJvdmlkZXIgdGhlbiB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIG9sZCBwcm92aWRlciBpcworICAgICAgICAgICAgLy8gaXJyZWxldmFudCAtIHdlIGNhbiBvbmx5IGhhdmUgY2hvc2VuIGEgbmV3IHByb3ZpZGVyIGlmIGl0cyBwYWNrYWdlIGlzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIG1DdXJyZW50UHJvdmlkZXJCZWluZ1JlcGxhY2VkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAobU51bVJlbHJvQ3JlYXRpb25zU3RhcnRlZCA9PSBtTnVtUmVscm9DcmVhdGlvbnNGaW5pc2hlZCkgeworICAgICAgICAgICAgICAgIG1DdXJyZW50V2ViVmlld1BhY2thZ2UgPSBuZXdQYWNrYWdlOworICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJTZXR0aW5nKG5ld1BhY2thZ2UucGFja2FnZU5hbWUpOworCisgICAgICAgICAgICAgICAgLy8gVGhlIHJlbHJvIGNyZWF0aW9ucyBtaWdodCAnZmluaXNoJyAobm90IHN0YXJ0IGF0IGFsbCkgYmVmb3JlCisgICAgICAgICAgICAgICAgLy8gV2ViVmlld0ZhY3Rvcnkub25XZWJWaWV3UHJvdmlkZXJDaGFuZ2VkIHdoaWNoIG1lYW5zIHdlIG1pZ2h0IG5vdCBrbm93IHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgICAvLyBvZiBzdGFydGVkIGNyZWF0aW9ucyBiZWZvcmUgdGhleSBmaW5pc2guCisgICAgICAgICAgICAgICAgbU51bVJlbHJvQ3JlYXRpb25zU3RhcnRlZCA9IE5VTUJFUl9PRl9SRUxST1NfVU5LTk9XTjsKKyAgICAgICAgICAgICAgICBtTnVtUmVscm9DcmVhdGlvbnNGaW5pc2hlZCA9IDA7CisgICAgICAgICAgICAgICAgbU51bVJlbHJvQ3JlYXRpb25zU3RhcnRlZCA9IFdlYlZpZXdGYWN0b3J5Lm9uV2ViVmlld1Byb3ZpZGVyQ2hhbmdlZChuZXdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVscm8gY3JlYXRpb25zIGZpbmlzaCBiZWZvcmUgd2Uga25vdyB0aGUgbnVtYmVyIG9mIHN0YXJ0ZWQgY3JlYXRpb25zIHdlCisgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIHRvIGRvIGFueSBjbGVhbnVwL25vdGlmeWluZyBoZXJlLgorICAgICAgICAgICAgICAgIGNoZWNrSWZSZWxyb3NEb25lTG9ja2VkKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1XZWJWaWV3UGFja2FnZURpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnRseSB2YWxpZCBXZWJWaWV3IHByb3ZpZGVyIHBhY2thZ2VzLgorICAgICAqIFNob3VsZCBiZSB1c2VkIHdoZW4gYSBwcm92aWRlciBoYXMgYmVlbiBpbnN0YWxsZWQgb3IgcmVtb3ZlZC4KKyAgICAgKiBAaGlkZQorICAgICAqICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVZhbGlkV2ViVmlld1BhY2thZ2VzKCkgeworICAgICAgICBMaXN0PFdlYlZpZXdQcm92aWRlckluZm8+IHdlYlZpZXdQcm92aWRlcnMgID0KKyAgICAgICAgICAgIG5ldyBBcnJheUxpc3Q8V2ViVmlld1Byb3ZpZGVySW5mbz4oQXJyYXlzLmFzTGlzdChXZWJWaWV3RmFjdG9yeS5nZXRXZWJWaWV3UGFja2FnZXMoKSkpOworICAgICAgICBJdGVyYXRvcjxXZWJWaWV3UHJvdmlkZXJJbmZvPiBpdCA9IHdlYlZpZXdQcm92aWRlcnMuaXRlcmF0b3IoKTsKKyAgICAgICAgLy8gcmVtb3ZlIG5vbi12YWxpZCBwYWNrYWdlcworICAgICAgICB3aGlsZShpdC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgIFdlYlZpZXdQcm92aWRlckluZm8gY3VycmVudCA9IGl0Lm5leHQoKTsKKyAgICAgICAgICAgIGlmICghY3VycmVudC5pc1ZhbGlkUHJvdmlkZXIoKSkKKyAgICAgICAgICAgICAgICBpdC5yZW1vdmUoKTsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgeworICAgICAgICAgICAgbUN1cnJlbnRWYWxpZFdlYlZpZXdQYWNrYWdlcyA9CisgICAgICAgICAgICAgICAgd2ViVmlld1Byb3ZpZGVycy50b0FycmF5KG5ldyBXZWJWaWV3UHJvdmlkZXJJbmZvW3dlYlZpZXdQcm92aWRlcnMuc2l6ZSgpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VXNlckNob3NlbldlYlZpZXdQcm92aWRlcigpIHsKKyAgICAgICAgcmV0dXJuIFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmcoQXBwR2xvYmFscy5nZXRJbml0aWFsQXBwbGljYXRpb24oKS5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuV0VCVklFV19QUk9WSURFUik7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVVzZXJTZXR0aW5nKFN0cmluZyBuZXdQcm92aWRlck5hbWUpIHsKKyAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZyhnZXRDb250ZXh0KCkuZ2V0Q29udGVudFJlc29sdmVyKCksCisgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLldFQlZJRVdfUFJPVklERVIsCisgICAgICAgICAgICAgICAgbmV3UHJvdmlkZXJOYW1lID09IG51bGwgPyAiIiA6IG5ld1Byb3ZpZGVyTmFtZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyBlaXRoZXIgdGhlIHBhY2thZ2UgaW5mbyBvZiB0aGUgV2ViVmlldyBwcm92aWRlciBkZXRlcm1pbmVkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorICAgICAqIElmIHRoZSB1c2VyIGhhcyBjaG9zZW4gYSBwcm92aWRlciB0aGVuIHVzZSB0aGF0IGlmIGl0IGlzIHZhbGlkLAorICAgICAqIG90aGVyd2lzZSB1c2UgdGhlIGZpcnN0IHBhY2thZ2UgaW4gdGhlIHdlYnZpZXcgcHJpb3JpdHkgbGlzdCB0aGF0IGlzIHZhbGlkLgorICAgICAqCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBwcml2YXRlIFBhY2thZ2VJbmZvIGZpbmRQcmVmZXJyZWRXZWJWaWV3UGFja2FnZSgpIHsKKyAgICAgICAgV2ViVmlld1Byb3ZpZGVySW5mb1tdIHByb3ZpZGVycyA9IG1DdXJyZW50VmFsaWRXZWJWaWV3UGFja2FnZXM7CisKKyAgICAgICAgU3RyaW5nIHVzZXJDaG9zZW5Qcm92aWRlciA9IGdldFVzZXJDaG9zZW5XZWJWaWV3UHJvdmlkZXIoKTsKKworICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgY2hvc2VuIHByb3ZpZGVyLCB1c2UgdGhhdAorICAgICAgICBmb3IgKFdlYlZpZXdQcm92aWRlckluZm8gcHJvdmlkZXIgOiBwcm92aWRlcnMpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlci5wYWNrYWdlTmFtZS5lcXVhbHModXNlckNob3NlblByb3ZpZGVyKSAmJiBwcm92aWRlci5pc0VuYWJsZWQoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlci5nZXRQYWNrYWdlSW5mbygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gVXNlciBkaWQgbm90IGNob29zZSwgb3IgdGhlIGNob2ljZSBmYWlsZWQ7IHVzZSB0aGUgbW9zdCBzdGFibGUgcHJvdmlkZXIgdGhhdCBpcworICAgICAgICAvLyBlbmFibGVkIGFuZCBhdmFpbGFibGUgYnkgZGVmYXVsdCAobm90IHRocm91Z2ggdXNlciBjaG9pY2UpLgorICAgICAgICBmb3IgKFdlYlZpZXdQcm92aWRlckluZm8gcHJvdmlkZXIgOiBwcm92aWRlcnMpIHsKKyAgICAgICAgICAgIGlmIChwcm92aWRlci5pc0F2YWlsYWJsZUJ5RGVmYXVsdCgpICYmIHByb3ZpZGVyLmlzRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmdldFBhY2thZ2VJbmZvKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDb3VsZCBub3QgZmluZCBhbnkgZW5hYmxlZCBwYWNrYWdlIGVpdGhlciwgdXNlIHRoZSBtb3N0IHN0YWJsZSBwcm92aWRlci4KKyAgICAgICAgZm9yIChXZWJWaWV3UHJvdmlkZXJJbmZvIHByb3ZpZGVyIDogcHJvdmlkZXJzKSB7CisgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXIuZ2V0UGFja2FnZUluZm8oKTsKKyAgICAgICAgfQorCisgICAgICAgIG1BbnlXZWJWaWV3SW5zdGFsbGVkID0gZmFsc2U7CisgICAgICAgIHRocm93IG5ldyBXZWJWaWV3RmFjdG9yeS5NaXNzaW5nV2ViVmlld1BhY2thZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIGEgbG9hZGFibGUgV2ViVmlldyBwYWNrYWdlIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB3aGV0aGVyIFdlYlZpZXcgaXMgcmVhZHkgYW5kIGlzIG5vdCBnb2luZyB0byBnbyB0aHJvdWdoIGl0cyBwcmVwYXJhdGlvbiBwaGFzZSBhZ2FpbgorICAgICAqIGRpcmVjdGx5LgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiB3ZWJWaWV3SXNSZWFkeUxvY2tlZCgpIHsKKyAgICAgICAgcmV0dXJuICFtV2ViVmlld1BhY2thZ2VEaXJ0eQorICAgICAgICAgICAgJiYgKG1OdW1SZWxyb0NyZWF0aW9uc1N0YXJ0ZWQgPT0gbU51bVJlbHJvQ3JlYXRpb25zRmluaXNoZWQpCisgICAgICAgICAgICAmJiAhbUN1cnJlbnRQcm92aWRlckJlaW5nUmVwbGFjZWQKKyAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHBhY2thZ2UgbWlnaHQgYmUgcmVwbGFjZWQgdGhvdWdoIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgYW4gaW50ZW50IGRlY2xhcmluZworICAgICAgICAgICAgLy8gdGhpcyB5ZXQsIHRoZSBmb2xsb3dpbmcgZmxhZyBtYWtlcyBhbnlvbmUgbG9hZGluZyBXZWJWaWV3IHRvIHdhaXQgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgJiYgbUFueVdlYlZpZXdJbnN0YWxsZWQ7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrSWZSZWxyb3NEb25lTG9ja2VkKCkgeworICAgICAgICBpZiAobU51bVJlbHJvQ3JlYXRpb25zU3RhcnRlZCA9PSBtTnVtUmVscm9DcmVhdGlvbnNGaW5pc2hlZCkgeworICAgICAgICAgICAgaWYgKG1XZWJWaWV3UGFja2FnZURpcnR5KSB7CisgICAgICAgICAgICAgICAgbVdlYlZpZXdQYWNrYWdlRGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGNoYW5nZWQgcHJvdmlkZXIgc2luY2Ugd2Ugc3RhcnRlZCB0aGUgcmVscm8gY3JlYXRpb24gd2UgbmVlZCB0bworICAgICAgICAgICAgICAgIC8vIHJlZG8gdGhlIHdob2xlIHByb2Nlc3MgdXNpbmcgdGhlIG5ldyBwYWNrYWdlIGluc3RlYWQuCisgICAgICAgICAgICAgICAgLy8gVGhvdWdoLCBpZiB0aGUgY3VycmVudCBwcm92aWRlciBwYWNrYWdlIGlzIGJlaW5nIHJlcGxhY2VkIHdlIGRvbid0IHdhbnQgdG8gY2hhbmdlCisgICAgICAgICAgICAgICAgLy8gcHJvdmlkZXIgaGVyZSBzaW5jZSB3ZSB3aWxsIHBlcmZvcm0gdGhlIGNoYW5nZSBlaXRoZXIgd2hlbiB0aGUgcGFja2FnZSBpcyBhZGRlZAorICAgICAgICAgICAgICAgIC8vIGFnYWluIG9yIHdoZW4gd2Ugc3dpdGNoIHRvIGFub3RoZXIgcHJvdmlkZXIgKHdoaWNoZXZlciBjb21lcyBmaXJzdCkuCisgICAgICAgICAgICAgICAgaWYgKCFtQ3VycmVudFByb3ZpZGVyQmVpbmdSZXBsYWNlZCkgeworICAgICAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBuZXdQYWNrYWdlID0gZmluZFByZWZlcnJlZFdlYlZpZXdQYWNrYWdlKCk7CisgICAgICAgICAgICAgICAgICAgIG9uV2ViVmlld1Byb3ZpZGVyQ2hhbmdlZChuZXdQYWNrYWdlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIGNsYXNzIEJpbmRlclNlcnZpY2UgZXh0ZW5kcyBJV2ViVmlld1VwZGF0ZVNlcnZpY2UuU3R1YiB7CkBAIC0xMDgsNyArMzU0LDcgQEAKICAgICAgICAgICogY3Jhc2hlZC4KICAgICAgICAgICovCiAgICAgICAgIEBPdmVycmlkZSAvLyBCaW5kZXIgY2FsbAotICAgICAgICBwdWJsaWMgdm9pZCBub3RpZnlSZWxyb0NyZWF0aW9uQ29tcGxldGVkKGJvb2xlYW4gaXM2NEJpdCwgYm9vbGVhbiBzdWNjZXNzKSB7CisgICAgICAgIHB1YmxpYyB2b2lkIG5vdGlmeVJlbHJvQ3JlYXRpb25Db21wbGV0ZWQoKSB7CiAgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY2FsbGVyIGlzIGVpdGhlciB0aGUgc2hhcmVkIHJlbHJvIHByb2Nlc3MgKG5vbWluYWwgY2FzZSkgb3IgdGhlCiAgICAgICAgICAgICAvLyBzeXN0ZW0gc2VydmVyIChvbmx5IGluIHRoZSBjYXNlIHRoZSByZWxybyBwcm9jZXNzIGNyYXNoZXMgYW5kIHdlIGdldCBoZXJlIHZpYSB0aGUKICAgICAgICAgICAgIC8vIGNyYXNoSGFuZGxlcikuCkBAIC0xMTgsMjAgKzM2NCwxNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKFdlYlZpZXdVcGRhdGVTZXJ2aWNlLnRoaXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCkgewotICAgICAgICAgICAgICAgICAgICBtUmVscm9SZWFkeTY0Qml0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtUmVscm9SZWFkeTMyQml0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcy5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAgICBtTnVtUmVscm9DcmVhdGlvbnNGaW5pc2hlZCsrOworICAgICAgICAgICAgICAgIGNoZWNrSWZSZWxyb3NEb25lTG9ja2VkKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvKioKICAgICAgICAgICogV2ViVmlld0ZhY3RvcnkgY2FsbHMgdGhpcyB0byBibG9jayBXZWJWaWV3IGxvYWRpbmcgdW50aWwgdGhlIHJlbHJvIGZpbGUgaXMgY3JlYXRlZC4KKyAgICAgICAgICogUmV0dXJucyB0aGUgV2ViVmlldyBwcm92aWRlciBmb3Igd2hpY2ggd2UgY3JlYXRlIHJlbHJvIGZpbGVzLgogICAgICAgICAgKi8KICAgICAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCi0gICAgICAgIHB1YmxpYyB2b2lkIHdhaXRGb3JSZWxyb0NyZWF0aW9uQ29tcGxldGVkKGJvb2xlYW4gaXM2NEJpdCkgeworICAgICAgICBwdWJsaWMgV2ViVmlld1Byb3ZpZGVyUmVzcG9uc2Ugd2FpdEZvckFuZEdldFByb3ZpZGVyKCkgewogICAgICAgICAgICAgLy8gVGhlIFdlYlZpZXdVcGRhdGVTZXJ2aWNlIGRlcGVuZHMgb24gdGhlIHByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIgY2FsbCwgd2hpY2gKICAgICAgICAgICAgIC8vIGhhcHBlbnMgbGF0ZXIgKGR1cmluZyB0aGUgUEhBU0VfQUNUSVZJVFlfTUFOQUdFUl9SRUFEWSkgaW4gU3lzdGVtU2VydmVyLmphdmEuIElmCiAgICAgICAgICAgICAvLyBhbm90aGVyIHNlcnZpY2UgdGhlcmUgdHJpZXMgdG8gYnJpbmcgdXAgYSBXZWJWaWV3IGluIHRoZSBiZXR3ZWVuLCB0aGUgd2FpdCBiZWxvdwpAQCAtMTQwLDIxICszODMsNzQgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgY3JlYXRlIGEgV2ViVmlldyBmcm9tIHRoZSBTeXN0ZW1TZXJ2ZXIiKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgUGFja2FnZUluZm8gd2ViVmlld1BhY2thZ2UgPSBudWxsOwogICAgICAgICAgICAgZmluYWwgbG9uZyBOU19QRVJfTVMgPSAxMDAwMDAwOwogICAgICAgICAgICAgZmluYWwgbG9uZyB0aW1lb3V0VGltZU1zID0gU3lzdGVtLm5hbm9UaW1lKCkgLyBOU19QRVJfTVMgKyBXQUlUX1RJTUVPVVRfTVM7Ci0gICAgICAgICAgICBib29sZWFuIHJlbHJvUmVhZHkgPSAoaXM2NEJpdCA/IG1SZWxyb1JlYWR5NjRCaXQgOiBtUmVscm9SZWFkeTMyQml0KTsKKyAgICAgICAgICAgIGJvb2xlYW4gd2ViVmlld1JlYWR5ID0gZmFsc2U7CisgICAgICAgICAgICBpbnQgd2ViVmlld1N0YXR1cyA9IFdlYlZpZXdGYWN0b3J5LkxJQkxPQURfU1VDQ0VTUzsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcykgewotICAgICAgICAgICAgICAgIHdoaWxlICghcmVscm9SZWFkeSkgeworICAgICAgICAgICAgICAgIHdlYlZpZXdSZWFkeSA9IFdlYlZpZXdVcGRhdGVTZXJ2aWNlLnRoaXMud2ViVmlld0lzUmVhZHlMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIXdlYlZpZXdSZWFkeSkgewogICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIHRpbWVOb3dNcyA9IFN5c3RlbS5uYW5vVGltZSgpIC8gTlNfUEVSX01TOwogICAgICAgICAgICAgICAgICAgICBpZiAodGltZU5vd01zID49IHRpbWVvdXRUaW1lTXMpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcy53YWl0KHRpbWVvdXRUaW1lTXMgLSB0aW1lTm93TXMpOwogICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7fQotICAgICAgICAgICAgICAgICAgICByZWxyb1JlYWR5ID0gKGlzNjRCaXQgPyBtUmVscm9SZWFkeTY0Qml0IDogbVJlbHJvUmVhZHkzMkJpdCk7CisgICAgICAgICAgICAgICAgICAgIHdlYlZpZXdSZWFkeSA9IFdlYlZpZXdVcGRhdGVTZXJ2aWNlLnRoaXMud2ViVmlld0lzUmVhZHlMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHJldHVybiB0aGUgcHJvdmlkZXIgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUgdGhlIHJlbHJvIGZpbGUKKyAgICAgICAgICAgICAgICB3ZWJWaWV3UGFja2FnZSA9IFdlYlZpZXdVcGRhdGVTZXJ2aWNlLnRoaXMubUN1cnJlbnRXZWJWaWV3UGFja2FnZTsKKyAgICAgICAgICAgICAgICBpZiAod2ViVmlld1JlYWR5KSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtQ3VycmVudFByb3ZpZGVyQmVpbmdSZXBsYWNlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBjaGVjayB0aGlzIGZsYWcgYmVmb3JlIHRoZSBvbmUgcmVwcmVzZW50aW5nIFdlYlZpZXcKKyAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgaW5zdGFsbGVkLCBvdGhlcndpc2Ugd2UgbWlnaHQgdGhpbmsgdGhlcmUgaXMgbm8gV2ViVmlldyB0aG91Z2ggdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgb25lIGlzIGp1c3QgYmVpbmcgcmVwbGFjZWQuCisgICAgICAgICAgICAgICAgICAgIHdlYlZpZXdTdGF0dXMgPSBXZWJWaWV3RmFjdG9yeS5MSUJMT0FEX1dFQlZJRVdfQkVJTkdfUkVQTEFDRUQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbUFueVdlYlZpZXdJbnN0YWxsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgd2ViVmlld1N0YXR1cyA9IFdlYlZpZXdGYWN0b3J5LkxJQkxPQURfRkFJTEVEX0xJU1RJTkdfV0VCVklFV19QQUNLQUdFUzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgdGhlIGN1cnJlbnQgcmVscm8gY3JlYXRpb24gIGlzbid0IGRvbmUgeWV0LCBvciB0aGUgbmV3IHJlbHJvIGNyZWF0aW9pbgorICAgICAgICAgICAgICAgICAgICAvLyBoYXNuJ3Qga2lja2VkIG9mZiB5ZXQgKHRoZSBsYXN0IHJlbHJvIGNyZWF0aW9uIHVzZWQgYW4gb3V0LW9mLWRhdGUgV2ViVmlldykuCisgICAgICAgICAgICAgICAgICAgIHdlYlZpZXdTdGF0dXMgPSBXZWJWaWV3RmFjdG9yeS5MSUJMT0FEX0ZBSUxFRF9XQUlUSU5HX0ZPUl9SRUxSTzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXJlbHJvUmVhZHkpIFNsb2cudyhUQUcsICJjcmVhdGluZyByZWxybyBmaWxlIHRpbWVkIG91dCIpOworICAgICAgICAgICAgaWYgKCF3ZWJWaWV3UmVhZHkpIFNsb2cudyhUQUcsICJjcmVhdGluZyByZWxybyBmaWxlIHRpbWVkIG91dCIpOworICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJWaWV3UHJvdmlkZXJSZXNwb25zZSh3ZWJWaWV3UGFja2FnZSwgd2ViVmlld1N0YXR1cyk7CisgICAgICAgIH0KKworICAgICAgICAvKioKKyAgICAgICAgICogVGhpcyBpcyBjYWxsZWQgZnJvbSBEZXZlbG9wZXJTZXR0aW5ncyB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgV2ViVmlldyBwcm92aWRlci4KKyAgICAgICAgICovCisgICAgICAgIEBPdmVycmlkZSAvLyBCaW5kZXIgY2FsbAorICAgICAgICBwdWJsaWMgdm9pZCBjaGFuZ2VQcm92aWRlckFuZFNldHRpbmcoU3RyaW5nIG5ld1Byb3ZpZGVyKSB7CisgICAgICAgICAgICBpZiAoZ2V0Q29udGV4dCgpLmNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oCisgICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uV1JJVEVfU0VDVVJFX1NFVFRJTkdTKQorICAgICAgICAgICAgICAgICAgICAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnID0gIlBlcm1pc3Npb24gRGVuaWFsOiBjaGFuZ2VQcm92aWRlckFuZFNldHRpbmcoKSBmcm9tIHBpZD0iCisgICAgICAgICAgICAgICAgICAgICAgICArIEJpbmRlci5nZXRDYWxsaW5nUGlkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdWlkPSIgKyBCaW5kZXIuZ2V0Q2FsbGluZ1VpZCgpCisgICAgICAgICAgICAgICAgICAgICAgICArICIgcmVxdWlyZXMgIiArIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5XUklURV9TRUNVUkVfU0VUVElOR1M7CisgICAgICAgICAgICAgICAgU2xvZy53KFRBRywgbXNnKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24obXNnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcy5jaGFuZ2VQcm92aWRlckFuZFNldHRpbmcobmV3UHJvdmlkZXIpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCisgICAgICAgIHB1YmxpYyBXZWJWaWV3UHJvdmlkZXJJbmZvW10gZ2V0VmFsaWRXZWJWaWV3UGFja2FnZXMoKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQoV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcykgeworICAgICAgICAgICAgICAgIHJldHVybiBtQ3VycmVudFZhbGlkV2ViVmlld1BhY2thZ2VzOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlIC8vIEJpbmRlciBjYWxsCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q3VycmVudFdlYlZpZXdQYWNrYWdlTmFtZSgpIHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZChXZWJWaWV3VXBkYXRlU2VydmljZS50aGlzKSB7CisgICAgICAgICAgICAgICAgaWYgKFdlYlZpZXdVcGRhdGVTZXJ2aWNlLnRoaXMubUN1cnJlbnRXZWJWaWV3UGFja2FnZSA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViVmlld1VwZGF0ZVNlcnZpY2UudGhpcy5tQ3VycmVudFdlYlZpZXdQYWNrYWdlLnBhY2thZ2VOYW1lOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0FwcFdpbmRvd0FuaW1hdG9yLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0FwcFdpbmRvd0FuaW1hdG9yLmphdmEKaW5kZXggYWI0N2YwNy4uODI5Mjk5NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9BcHBXaW5kb3dBbmltYXRvci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vQXBwV2luZG93QW5pbWF0b3IuamF2YQpAQCAtMjIzLDcgKzIyMyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoREVCVUdfTEFZRVJTKSBTbG9nLnYoVEFHLCAiVXBkYXRpbmcgbGF5ZXIgIiArIHcgKyAiOiAiICsgd2luQW5pbWF0b3IubUFuaW1MYXllcik7CiAgICAgICAgICAgICBpZiAodyA9PSBtU2VydmljZS5tSW5wdXRNZXRob2RUYXJnZXQgJiYgIW1TZXJ2aWNlLm1JbnB1dE1ldGhvZFRhcmdldFdhaXRpbmdBbmltKSB7Ci0gICAgICAgICAgICAgICAgbVNlcnZpY2Uuc2V0SW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KGFkaik7CisgICAgICAgICAgICAgICAgbVNlcnZpY2UubUxheWVyc0NvbnRyb2xsZXIuc2V0SW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KGFkaik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB3YWxscGFwZXJDb250cm9sbGVyLnNldEFuaW1MYXllckFkanVzdG1lbnQodywgYWRqKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9BcHBXaW5kb3dUb2tlbi5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9BcHBXaW5kb3dUb2tlbi5qYXZhCmluZGV4IGZkNWM3MDQuLjc1MWY4NzEgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vQXBwV2luZG93VG9rZW4uamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0FwcFdpbmRvd1Rva2VuLmphdmEKQEAgLTE2LDE5ICsxNiwyMyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkc7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQU5JTTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BUFBfVFJBTlNJVElPTlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQUREX1JFTU9WRTsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19WSVNJQklMSVRZOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1dJTkRPV19NT1ZFTUVOVDsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV0lUSF9DTEFTU19OQU1FOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XTTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlLldJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VUX0RVUkFUSU9OOwogCiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmlucHV0LklucHV0QXBwbGljYXRpb25IYW5kbGU7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlLkg7CiAKIGltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uTm9uTnVsbDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKIGltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7CiBpbXBvcnQgYW5kcm9pZC5vcy5SZW1vdGVFeGNlcHRpb247CiBpbXBvcnQgYW5kcm9pZC51dGlsLlNsb2c7CkBAIC0zNyw2ICs0MSw3IEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7CiAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5BcnJheURlcXVlOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiAKIGNsYXNzIEFwcFRva2VuTGlzdCBleHRlbmRzIEFycmF5TGlzdDxBcHBXaW5kb3dUb2tlbj4gewpAQCAtMTIyLDIwICsxMjcsOSBAQAogICAgIC8vIFRydWUgaWYgdGhlIHdpbmRvd3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4gc2hvdWxkIGJlIGNyb3BwZWQgdG8gdGhlaXIgc3RhY2sgYm91bmRzLgogICAgIGJvb2xlYW4gbUNyb3BXaW5kb3dzVG9TdGFjazsKIAotICAgIC8vIFRoaXMgYXBwbGljYXRpb24gd2lsbCBoYXZlIGl0cyB3aW5kb3cgcmVwbGFjZWQgZHVlIHRvIHJlbGF1bmNoLiBUaGlzIGFsbG93cyB3aW5kb3cgbWFuYWdlcgotICAgIC8vIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzaW1wbGUgcmVtb3ZhbCBvZiBhIHdpbmRvdyBhbmQgcmVwbGFjZW1lbnQuIEluIHRoZSBsYXR0ZXIgY2FzZSBpdAotICAgIC8vIHdpbGwgcHJlc2VydmUgdGhlIG9sZCB3aW5kb3cgdW50aWwgdGhlIG5ldyBvbmUgaXMgZHJhd24uCi0gICAgYm9vbGVhbiBtV2lsbFJlcGxhY2VXaW5kb3c7Ci0gICAgLy8gSWYgdHJ1ZSwgdGhlIHJlcGxhY2VkIHdpbmRvdyB3YXMgYWxyZWFkeSByZXF1ZXN0ZWQgdG8gYmUgcmVtb3ZlZC4KLSAgICBib29sZWFuIG1SZXBsYWNpbmdSZW1vdmVSZXF1ZXN0ZWQ7Ci0gICAgLy8gV2hldGhlciB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIHdpbmRvdyBzaG91bGQgdHJpZ2dlciBhcHAgdHJhbnNpdGlvbiBhbmltYXRpb24uCi0gICAgYm9vbGVhbiBtQW5pbWF0ZVJlcGxhY2luZ1dpbmRvdzsKLSAgICAvLyBJZiBub3QgbnVsbCwgdGhlIHdpbmRvdyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBvbGQgb25lLiBUaGlzIGlzIGJlaW5nIHNldCB3aGVuCi0gICAgLy8gdGhlIHdpbmRvdyBpcyBhZGRlZCBhbmQgdW5zZXQgd2hlbiB0aGlzIHdpbmRvdyByZXBvcnRzIGl0cyBmaXJzdCBkcmF3LgotICAgIFdpbmRvd1N0YXRlIG1SZXBsYWNpbmdXaW5kb3c7Ci0gICAgLy8gV2hldGhlciB0aGUgbmV3IHdpbmRvdyBoYXMgcmVwbGFjZWQgdGhlIG9sZCBvbmUsIHNvIHRoZSBvbGQgb25lIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQKLSAgICAvLyBibGlua2luZy4KLSAgICBib29sZWFuIG1IYXNSZXBsYWNlZFdpbmRvdzsKKyAgICBib29sZWFuIG1BbHdheXNGb2N1c2FibGU7CisKKyAgICBBcnJheURlcXVlPFJlY3Q+IG1Gcm96ZW5Cb3VuZHMgPSBuZXcgQXJyYXlEZXF1ZTw+KCk7CiAKICAgICBBcHBXaW5kb3dUb2tlbihXaW5kb3dNYW5hZ2VyU2VydmljZSBfc2VydmljZSwgSUFwcGxpY2F0aW9uVG9rZW4gX3Rva2VuLAogICAgICAgICAgICAgYm9vbGVhbiBfdm9pY2VJbnRlcmFjdGlvbikgewpAQCAtMjcwLDggKzI2NCw4IEBACiAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgfQogCi0gICAgYm9vbGVhbiBzdGFja0NhblJlY2VpdmVLZXlzKCkgewotICAgICAgICByZXR1cm4gKHdpbmRvd3Muc2l6ZSgpID4gMCkgPyB3aW5kb3dzLmdldCh3aW5kb3dzLnNpemUoKSAtIDEpLnN0YWNrQ2FuUmVjZWl2ZUtleXMoKSA6IGZhbHNlOworICAgIGJvb2xlYW4gd2luZG93c0FyZUZvY3VzYWJsZSgpIHsKKyAgICAgICAgcmV0dXJuIFN0YWNrSWQuY2FuUmVjZWl2ZUtleXMobVRhc2subVN0YWNrLm1TdGFja0lkKSB8fCBtQWx3YXlzRm9jdXNhYmxlOwogICAgIH0KIAogICAgIGJvb2xlYW4gaXNWaXNpYmxlKCkgewpAQCAtMzkyLDYgKzM4Niw5OSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBzZXRSZXBsYWNpbmdXaW5kb3dzKGJvb2xlYW4gYW5pbWF0ZSkgeworICAgICAgICBpZiAoREVCVUdfQUREX1JFTU9WRSkgU2xvZy5kKFRBR19XTSwgIk1hcmtpbmcgYXBwIHRva2VuICIgKyBhcHBXaW5kb3dUb2tlbgorICAgICAgICAgICAgICAgICsgIiB3aXRoIHJlcGxhY2luZyB3aW5kb3dzLiIpOworCisgICAgICAgIGZvciAoaW50IGkgPSBhbGxBcHBXaW5kb3dzLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSB3ID0gYWxsQXBwV2luZG93cy5nZXQoaSk7CisgICAgICAgICAgICB3LnNldFJlcGxhY2luZyhhbmltYXRlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYW5pbWF0ZSkgeworICAgICAgICAgICAgLy8gU2V0LXVwIGR1bW15IGFuaW1hdGlvbiBzbyB3ZSBjYW4gc3RhcnQgdHJlYXRpbmcgd2luZG93cyBhc3NvY2lhdGVkIHdpdGggdGhpcworICAgICAgICAgICAgLy8gdG9rZW4gbGlrZSB0aGV5IGFyZSBpbiB0cmFuc2l0aW9uIGJlZm9yZSB0aGUgbmV3IGFwcCB3aW5kb3cgaXMgcmVhZHkgZm9yIHVzIHRvCisgICAgICAgICAgICAvLyBydW4gdGhlIHJlYWwgdHJhbnNpdGlvbiBhbmltYXRpb24uCisgICAgICAgICAgICBpZiAoREVCVUdfQVBQX1RSQU5TSVRJT05TKSBTbG9nLnYoVEFHX1dNLAorICAgICAgICAgICAgICAgICAgICAic2V0UmVwbGFjaW5nV2luZG93KCkgU2V0dGluZyBkdW1teSBhbmltYXRpb24gb246ICIgKyB0aGlzKTsKKyAgICAgICAgICAgIG1BcHBBbmltYXRvci5zZXREdW1teUFuaW1hdGlvbigpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXNldFJlcGxhY2luZ1dpbmRvd3MoKSB7CisgICAgICAgIGlmIChERUJVR19BRERfUkVNT1ZFKSBTbG9nLmQoVEFHX1dNLCAiUmVzZXR0aW5nIGFwcCB0b2tlbiAiICsgYXBwV2luZG93VG9rZW4KKyAgICAgICAgICAgICAgICArICIgb2YgcmVwbGFjaW5nIHdpbmRvdyBtYXJrcy4iKTsKKworICAgICAgICBmb3IgKGludCBpID0gYWxsQXBwV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgdyA9IGFsbEFwcFdpbmRvd3MuZ2V0KGkpOworICAgICAgICAgICAgdy5yZXNldFJlcGxhY2luZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBhZGRXaW5kb3coV2luZG93U3RhdGUgdykgeworICAgICAgICBmb3IgKGludCBpID0gYWxsQXBwV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgV2luZG93U3RhdGUgY2FuZGlkYXRlID0gYWxsQXBwV2luZG93cy5nZXQoaSk7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm1XaWxsUmVwbGFjZVdpbmRvdyAmJiBjYW5kaWRhdGUubVJlcGxhY2luZ1dpbmRvdyA9PSBudWxsICYmCisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5nZXRXaW5kb3dUYWcoKS5lcXVhbHMody5nZXRXaW5kb3dUYWcoKS50b1N0cmluZygpKSkgeworICAgICAgICAgICAgICAgIGNhbmRpZGF0ZS5tUmVwbGFjaW5nV2luZG93ID0gdzsKKworICAgICAgICAgICAgICAgIC8vIGlmIHdlIGdvdCBhIHJlcGxhY2VtZW50IHdpbmRvdywgcmVzZXQgdGhlIHRpbWVvdXQgdG8gZ2l2ZSBkcmF3aW5nIG1vcmUgdGltZQorICAgICAgICAgICAgICAgIHNlcnZpY2UubUgucmVtb3ZlTWVzc2FnZXMoSC5XSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVCk7CisgICAgICAgICAgICAgICAgc2VydmljZS5tSC5zZW5kTWVzc2FnZURlbGF5ZWQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLm1ILm9idGFpbk1lc3NhZ2UoSC5XSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVCwgdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0lORE9XX1JFUExBQ0VNRU5UX1RJTUVPVVRfRFVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFsbEFwcFdpbmRvd3MuYWRkKHcpOworICAgIH0KKworICAgIGJvb2xlYW4gd2FpdGluZ0ZvclJlcGxhY2VtZW50KCkgeworICAgICAgICBmb3IgKGludCBpID0gYWxsQXBwV2luZG93cy5zaXplKCkgLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBXaW5kb3dTdGF0ZSBjYW5kaWRhdGUgPSBhbGxBcHBXaW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubVdpbGxSZXBsYWNlV2luZG93KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgY2xlYXJUaW1lZG91dFJlcGxhY2VzTG9ja2VkKCkgeworICAgICAgICBmb3IgKGludCBpID0gYWxsQXBwV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7CisgICAgICAgICAgICAgLy8gcmVtb3ZlV2luZG93TG9ja2VkIGF0IGJvdHRvbSBvZiBsb29wIG1heSByZW1vdmUgbXVsdGlwbGUgZW50cmllcyBmcm9tCisgICAgICAgICAgICAgLy8gYWxsQXBwV2luZG93cyBpZiB0aGUgd2luZG93IHRvIGJlIHJlbW92ZWQgaGFzIGNoaWxkIHdpbmRvd3MuIEl0IGFsc28gbWF5CisgICAgICAgICAgICAgLy8gbm90IHJlbW92ZSBhbnkgd2luZG93cyBmcm9tIGFsbEFwcFdpbmRvd3MgYXQgYWxsIGlmIHdpbiBpcyBleGl0aW5nIGFuZAorICAgICAgICAgICAgIC8vIGN1cnJlbnRseSBhbmltYXRpbmcgYXdheS4gVGhpcyBlbnN1cmVzIHRoYXQgd2luTmR4IGlzIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZworICAgICAgICAgICAgIC8vIGFuZCBuZXZlciBiZXlvbmQgYWxsQXBwV2luZG93cyBib3VuZHMuCisgICAgICAgICAgICAgaSA9IE1hdGgubWluKGkgLSAxLCBhbGxBcHBXaW5kb3dzLnNpemUoKSAtIDEpKSB7CisgICAgICAgICAgICBXaW5kb3dTdGF0ZSBjYW5kaWRhdGUgPSBhbGxBcHBXaW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgIGlmIChjYW5kaWRhdGUubVdpbGxSZXBsYWNlV2luZG93ID09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYW5kaWRhdGUubVdpbGxSZXBsYWNlV2luZG93ID0gZmFsc2U7CisgICAgICAgICAgICAvLyBTaW5jZSB0aGUgd2luZG93IGFscmVhZHkgdGltZWQgb3V0LCByZW1vdmUgaXQgaW1tZWRpYXRlbHkgbm93LgorICAgICAgICAgICAgLy8gVXNlIHJlbW92ZVdpbmRvd0lubmVyTG9ja2VkKCkgaW5zdGVhZCBvZiByZW1vdmVXaW5kb3dMb2NrZWQoKSwgYXMgdGhlIGxhdHRlcgorICAgICAgICAgICAgLy8gZGVsYXlzIHJlbW92YWwgb24gY2VydGFpbiBjb25kaXRpb25zLCB3aGljaCB3aWxsIGxlYXZlIHRoZSBzdGFsZSB3aW5kb3cgaW4gdGhlCisgICAgICAgICAgICAvLyBzdGFjayBhbmQgbWFya2VkIG1XaWxsUmVwbGFjZVdpbmRvdz1mYWxzZSwgc28gdGhlIHdpbmRvdyB3aWxsIG5ldmVyIGJlIHJlbW92ZWQuCisgICAgICAgICAgICBzZXJ2aWNlLnJlbW92ZVdpbmRvd0lubmVyTG9ja2VkKGNhbmRpZGF0ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGcmVlemVzIHRoZSB0YXNrIGJvdW5kcy4gVGhlIHNpemUgb2YgdGhpcyB0YXNrIHJlcG9ydGVkIHRoZSBhcHAgd2lsbCBiZSBmaXhlZCB0byB0aGUgYm91bmRzCisgICAgICogZnJlZXplZCBieSB7QGxpbmsgVGFzayNwcmVwYXJlRnJlZXppbmdCb3VuZHN9IHVudGlsIHtAbGluayAjdW5mcmVlemVCb3VuZHN9IGdldHMgY2FsbGVkLCBldmVuCisgICAgICogaWYgdGhleSBjaGFuZ2UgaW4gdGhlIG1lYW50aW1lLiBJZiB0aGUgYm91bmRzIGFyZSBhbHJlYWR5IGZyb3plbiwgdGhlIGJvdW5kcyB3aWxsIGJlIGZyb3plbgorICAgICAqIHdpdGggYSBxdWV1ZS4KKyAgICAgKi8KKyAgICB2b2lkIGZyZWV6ZUJvdW5kcygpIHsKKyAgICAgICAgbUZyb3plbkJvdW5kcy5vZmZlcihuZXcgUmVjdChtVGFzay5tUHJlcGFyZWRGcm96ZW5Cb3VuZHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBVbmZyZWV6ZXMgdGhlIHByZXZpb3VzbHkgZnJvemVuIGJvdW5kcy4gU2VlIHtAbGluayAjZnJlZXplQm91bmRzfS4KKyAgICAgKi8KKyAgICB2b2lkIHVuZnJlZXplQm91bmRzKCkgeworICAgICAgICBtRnJvemVuQm91bmRzLnJlbW92ZSgpOworICAgIH0KKwogICAgIEBPdmVycmlkZQogICAgIHZvaWQgZHVtcChQcmludFdyaXRlciBwdywgU3RyaW5nIHByZWZpeCkgewogICAgICAgICBzdXBlci5kdW1wKHB3LCBwcmVmaXgpOwpAQCAtNDM4LDYgKzUyNSw5IEBACiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgc3RhcnRpbmdEaXNwbGF5ZWQ9Iik7IHB3LnByaW50KHN0YXJ0aW5nRGlzcGxheWVkKTsKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiBzdGFydGluZ01vdmVkIik7IHB3LnByaW50bG4oc3RhcnRpbmdNb3ZlZCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFtRnJvemVuQm91bmRzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgcHcucHJpbnQocHJlZml4KTsgcHcucHJpbnQoIm1Gcm96ZW5Cb3VuZHM9Iik7IHB3LnByaW50KG1Gcm96ZW5Cb3VuZHMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Rpc3BsYXlDb250ZW50LmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Rpc3BsYXlDb250ZW50LmphdmEKaW5kZXggOWI2NDQ4MS4uMGM0MjllNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EaXNwbGF5Q29udGVudC5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRGlzcGxheUNvbnRlbnQuamF2YQpAQCAtMTEwLDYgKzExMCw4IEBACiAKICAgICBmaW5hbCBEaW1MYXllckNvbnRyb2xsZXIgbURpbUxheWVyQ29udHJvbGxlcjsKIAorICAgIGZpbmFsIEFycmF5TGlzdDxXaW5kb3dTdGF0ZT4gbVRhcEV4Y2x1ZGVkV2luZG93cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCiAgICAgLyoqCiAgICAgICogQHBhcmFtIGRpc3BsYXkgTWF5IG5vdCBiZSBudWxsLgogICAgICAqIEBwYXJhbSBzZXJ2aWNlIFlvdSBrbm93LgpAQCAtMjIwLDYgKzIyMiwxMCBAQAogICAgICAgICBvdXQuc2V0KGxlZnQsIHRvcCwgbGVmdCArIHdpZHRoLCB0b3AgKyBoZWlnaHQpOwogICAgIH0KIAorICAgIHZvaWQgZ2V0Q29udGVudFJlY3QoUmVjdCBvdXQpIHsKKyAgICAgICAgb3V0LnNldChtQ29udGVudFJlY3QpOworICAgIH0KKwogICAgIC8qKiBSZWZlciB0byB7QGxpbmsgV2luZG93TWFuYWdlclNlcnZpY2UjYXR0YWNoU3RhY2soaW50LCBpbnQsIGJvb2xlYW4pfSAqLwogICAgIHZvaWQgYXR0YWNoU3RhY2soVGFza1N0YWNrIHN0YWNrLCBib29sZWFuIG9uVG9wKSB7CiAgICAgICAgIGlmIChzdGFjay5tU3RhY2tJZCA9PSBIT01FX1NUQUNLX0lEKSB7CkBAIC0zOTEsNyArMzk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBtVG91Y2hFeGNsdWRlUmVnaW9uLm9wKG1UbXBSZWN0LCBSZWdpb24uT3AuRElGRkVSRU5DRSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0YXNrLmlzRG9ja2VkSW5FZmZlY3QoKSAmJiAhdGFzay5pc1Jlc2l6ZWFibGUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0YXNrLmlzVHdvRmluZ2VyU2Nyb2xsTW9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmdldEJvdW5kcyhtVG1wUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIG1Ob25SZXNpemVhYmxlUmVnaW9uLm9wKG1UbXBSZWN0LCBSZWdpb24uT3AuVU5JT04pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQxMiw2ICs0MTgsMTEgQEAKICAgICAgICAgICAgIGlucHV0TWV0aG9kLmdldFRvdWNoYWJsZVJlZ2lvbihtVG1wUmVnaW9uKTsKICAgICAgICAgICAgIG1Ub3VjaEV4Y2x1ZGVSZWdpb24ub3AobVRtcFJlZ2lvbiwgUmVnaW9uLk9wLlVOSU9OKTsKICAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gbVRhcEV4Y2x1ZGVkV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgV2luZG93U3RhdGUgd2luID0gbVRhcEV4Y2x1ZGVkV2luZG93cy5nZXQoaSk7CisgICAgICAgICAgICB3aW4uZ2V0VG91Y2hhYmxlUmVnaW9uKG1UbXBSZWdpb24pOworICAgICAgICAgICAgbVRvdWNoRXhjbHVkZVJlZ2lvbi5vcChtVG1wUmVnaW9uLCBSZWdpb24uT3AuVU5JT04pOworICAgICAgICB9CiAgICAgICAgIGlmIChtVGFwRGV0ZWN0b3IgIT0gbnVsbCkgewogICAgICAgICAgICAgbVRhcERldGVjdG9yLnNldFRvdWNoRXhjbHVkZVJlZ2lvbihtVG91Y2hFeGNsdWRlUmVnaW9uLCBtTm9uUmVzaXplYWJsZVJlZ2lvbik7CiAgICAgICAgIH0KQEAgLTU2MywzOCArNTc0LDE5IEBACiAgICAgICAgICAgICBwdy5wcmludCgieCIpOyBwdy5wcmludGxuKG1EaXNwbGF5SW5mby5sYXJnZXN0Tm9taW5hbEFwcEhlaWdodCk7CiAgICAgICAgICAgICBwdy5wcmludChzdWJQcmVmaXgpOyBwdy5wcmludCgiZGVmZXJyZWQ9Iik7IHB3LnByaW50KG1EZWZlcnJlZFJlbW92YWwpOwogICAgICAgICAgICAgICAgIHB3LnByaW50KCIgbGF5b3V0TmVlZGVkPSIpOyBwdy5wcmludGxuKGxheW91dE5lZWRlZCk7Ci0gICAgICAgIGZvciAoaW50IHN0YWNrTmR4ID0gbVN0YWNrcy5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyAtLXN0YWNrTmR4KSB7Ci0gICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tzLmdldChzdGFja05keCk7Ci0gICAgICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibVN0YWNrc1siICsgc3RhY2tOZHggKyAiXSIpOyBwdy5wcmludGxuKHN0YWNrLm1TdGFja0lkKTsKLSAgICAgICAgICAgIHN0YWNrLmR1bXAocHJlZml4ICsgIiAgIiwgcHcpOwotICAgICAgICB9CisKICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICBwdy5wcmludGxuKCIgIEFwcGxpY2F0aW9uIHRva2VucyBpbiB0b3AgZG93biBaIG9yZGVyOiIpOwotICAgICAgICBpbnQgbmR4ID0gMDsKICAgICAgICAgZm9yIChpbnQgc3RhY2tOZHggPSBtU3RhY2tzLnNpemUoKSAtIDE7IHN0YWNrTmR4ID49IDA7IC0tc3RhY2tOZHgpIHsKICAgICAgICAgICAgIGZpbmFsIFRhc2tTdGFjayBzdGFjayA9IG1TdGFja3MuZ2V0KHN0YWNrTmR4KTsKLSAgICAgICAgICAgIHB3LnByaW50KCIgIG1TdGFja0lkPSIpOyBwdy5wcmludGxuKHN0YWNrLm1TdGFja0lkKTsKLSAgICAgICAgICAgIEFycmF5TGlzdDxUYXNrPiB0YXNrcyA9IHN0YWNrLmdldFRhc2tzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gdGFza3Muc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSB0YXNrcy5nZXQodGFza05keCk7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgICBtVGFza0lkPSIpOyBwdy5wcmludGxuKHRhc2subVRhc2tJZCk7Ci0gICAgICAgICAgICAgICAgQXBwVG9rZW5MaXN0IHRva2VucyA9IHRhc2subUFwcFRva2VuczsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB0b2tlbk5keCA9IHRva2Vucy5zaXplKCkgLSAxOyB0b2tlbk5keCA+PSAwOyAtLXRva2VuTmR4LCArK25keCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBBcHBXaW5kb3dUb2tlbiB3dG9rZW4gPSB0b2tlbnMuZ2V0KHRva2VuTmR4KTsKLSAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgICBBY3Rpdml0eSAjIik7IHB3LnByaW50KHRva2VuTmR4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgnICcpOyBwdy5wcmludCh3dG9rZW4pOyBwdy5wcmludGxuKCI6Iik7Ci0gICAgICAgICAgICAgICAgICAgIHd0b2tlbi5kdW1wKHB3LCAiICAgICAgIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhY2suZHVtcChwcmVmaXggKyAiICAiLCBwdyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG5keCA9PSAwKSB7Ci0gICAgICAgICAgICBwdy5wcmludGxuKCIgICAgTm9uZSIpOwotICAgICAgICB9CisKICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICBpZiAoIW1FeGl0aW5nVG9rZW5zLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICAgICAgcHcucHJpbnRsbigiICBFeGl0aW5nIHRva2VuczoiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGk9bUV4aXRpbmdUb2tlbnMuc2l6ZSgpLTE7IGk+PTA7IGktLSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1FeGl0aW5nVG9rZW5zLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICAgV2luZG93VG9rZW4gdG9rZW4gPSBtRXhpdGluZ1Rva2Vucy5nZXQoaSk7CiAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgRXhpdGluZyAjIik7IHB3LnByaW50KGkpOwogICAgICAgICAgICAgICAgIHB3LnByaW50KCcgJyk7IHB3LnByaW50KHRva2VuKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKaW5kZXggOGYzZDNlMy4uNzI5NTMxOCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9Eb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyLmphdmEKQEAgLTE4LDExICsxOCwxNyBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LkRpc3BsYXlJbmZvOworaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja2VkU3RhY2tMaXN0ZW5lcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUNvbnRyb2w7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uRGltTGF5ZXIuRGltTGF5ZXJVc2VyOwogCiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuSU5WQUxJRF9TVEFDS19JRDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0JPVFRPTTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0xFRlQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkRPQ0tFRF9SSUdIVDsKQEAgLTMzLDcgKzM5LDcgQEAKIC8qKgogICogS2VlcHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRvY2tlZCBzdGFjayBkaXZpZGVyLgogICovCi1wdWJsaWMgY2xhc3MgRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlciB7CitwdWJsaWMgY2xhc3MgRG9ja2VkU3RhY2tEaXZpZGVyQ29udHJvbGxlciBpbXBsZW1lbnRzIERpbUxheWVyVXNlciB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gVEFHX1dJVEhfQ0xBU1NfTkFNRSA/ICJEb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyIiA6IFRBR19XTTsKIApAQCAtNDQsOSArNTAsMTAgQEAKICAgICBwcml2YXRlIFdpbmRvd1N0YXRlIG1XaW5kb3c7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBSZWN0ID0gbmV3IFJlY3QoKTsKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbUxhc3RSZWN0ID0gbmV3IFJlY3QoKTsKLSAgICBwcml2YXRlIElEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lciBtTGlzdGVuZXI7CiAgICAgcHJpdmF0ZSBib29sZWFuIG1MYXN0VmlzaWJpbGl0eSA9IGZhbHNlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtRm9yY2VWaXNpYmlsaXR5UmVldmFsdWF0aW9uOworICAgIHByaXZhdGUgZmluYWwgUmVtb3RlQ2FsbGJhY2tMaXN0PElEb2NrZWRTdGFja0xpc3RlbmVyPiBtRG9ja2VkU3RhY2tMaXN0ZW5lcnMKKyAgICAgICAgICAgID0gbmV3IFJlbW90ZUNhbGxiYWNrTGlzdDw+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBEaW1MYXllciBtRGltTGF5ZXI7CiAKICAgICBEb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyKENvbnRleHQgY29udGV4dCwgRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQpIHsKICAgICAgICAgbURpc3BsYXlDb250ZW50ID0gZGlzcGxheUNvbnRlbnQ7CkBAIC01NCw2ICs2MSw3IEBACiAgICAgICAgICAgICAgICAgY29tLmFuZHJvaWQuaW50ZXJuYWwuUi5kaW1lbi5kb2NrZWRfc3RhY2tfZGl2aWRlcl90aGlja25lc3MpOwogICAgICAgICBtRGl2aWRlckluc2V0cyA9IGNvbnRleHQuZ2V0UmVzb3VyY2VzKCkuZ2V0RGltZW5zaW9uUGl4ZWxTaXplKAogICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuZGltZW4uZG9ja2VkX3N0YWNrX2RpdmlkZXJfaW5zZXRzKTsKKyAgICAgICAgbURpbUxheWVyID0gbmV3IERpbUxheWVyKGRpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLCB0aGlzLCBkaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SWQoKSk7CiAgICAgfQogCiAgICAgYm9vbGVhbiBpc1Jlc2l6aW5nKCkgewpAQCAtODMsMTUgKzkxLDE2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbUxhc3RWaXNpYmlsaXR5ID0gdmlzaWJsZTsKLSAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIG1MaXN0ZW5lci5vbkRvY2tEaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQodmlzaWJsZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFNsb2cuZShUQUcsICJ2aXNpYmlsaXR5IGNhbGwgZmFpbGVkOiAiICsgZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgIG5vdGlmeURvY2tlZERpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZCh2aXNpYmxlKTsKKyAgICAgICAgaWYgKCF2aXNpYmxlKSB7CisgICAgICAgICAgICBzZXRSZXNpemVEaW1MYXllcihmYWxzZSwgSU5WQUxJRF9TVEFDS19JRCwgMGYpOwogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbGVhbiB3YXNWaXNpYmxlKCkgeworICAgICAgICByZXR1cm4gbUxhc3RWaXNpYmlsaXR5OworICAgIH0KKwogICAgIHZvaWQgcG9zaXRpb25Eb2NrZWRTdGFja2VkRGl2aWRlcihSZWN0IGZyYW1lKSB7CiAgICAgICAgIFRhc2tTdGFjayBzdGFjayA9IG1EaXNwbGF5Q29udGVudC5nZXREb2NrZWRTdGFja0xvY2tlZCgpOwogICAgICAgICBpZiAoc3RhY2sgPT0gbnVsbCkgewpAQCAtMTI3LDExICsxMzYsNzYgQEAKICAgICAgICAgbUxhc3RSZWN0LnNldChmcmFtZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcihJRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgICAgaWYgKG1MaXN0ZW5lciAhPSBudWxsICYmIGxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRvY2sgZGl2aWRlciB2aXNpYmlsaXR5IGxpc3RlbmVyIGFscmVhZHkgc2V0ISIpOworICAgIHZvaWQgbm90aWZ5RG9ja2VkRGl2aWRlclZpc2liaWxpdHlDaGFuZ2VkKGJvb2xlYW4gdmlzaWJsZSkgeworICAgICAgICBmaW5hbCBpbnQgc2l6ZSA9IG1Eb2NrZWRTdGFja0xpc3RlbmVycy5iZWdpbkJyb2FkY2FzdCgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgZmluYWwgSURvY2tlZFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIgPSBtRG9ja2VkU3RhY2tMaXN0ZW5lcnMuZ2V0QnJvYWRjYXN0SXRlbShpKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIub25EaXZpZGVyVmlzaWJpbGl0eUNoYW5nZWQodmlzaWJsZSk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIFNsb2cuZShUQUdfV00sICJFcnJvciBkZWxpdmVyaW5nIGRpdmlkZXIgdmlzaWJpbGl0eSBjaGFuZ2VkIGV2ZW50LiIsIGUpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG1MaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgICAgICByZWV2YWx1YXRlVmlzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgbURvY2tlZFN0YWNrTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOworICAgIH0KKworICAgIHZvaWQgbm90aWZ5RG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGJvb2xlYW4gZXhpc3RzKSB7CisgICAgICAgIGZpbmFsIGludCBzaXplID0gbURvY2tlZFN0YWNrTGlzdGVuZXJzLmJlZ2luQnJvYWRjYXN0KCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICBmaW5hbCBJRG9ja2VkU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG1Eb2NrZWRTdGFja0xpc3RlbmVycy5nZXRCcm9hZGNhc3RJdGVtKGkpOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5vbkRvY2tlZFN0YWNrRXhpc3RzQ2hhbmdlZChleGlzdHMpOworICAgICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmUoVEFHX1dNLCAiRXJyb3IgZGVsaXZlcmluZyBkb2NrZWQgc3RhY2sgZXhpc3RzIGNoYW5nZWQgZXZlbnQuIiwgZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbURvY2tlZFN0YWNrTGlzdGVuZXJzLmZpbmlzaEJyb2FkY2FzdCgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgICAgIG1Eb2NrZWRTdGFja0xpc3RlbmVycy5yZWdpc3RlcihsaXN0ZW5lcik7CisgICAgICAgIG5vdGlmeURvY2tlZERpdmlkZXJWaXNpYmlsaXR5Q2hhbmdlZCh3YXNWaXNpYmxlKCkpOworICAgICAgICBub3RpZnlEb2NrZWRTdGFja0V4aXN0c0NoYW5nZWQoCisgICAgICAgICAgICAgICAgbURpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLm1TdGFja0lkVG9TdGFjay5nZXQoRE9DS0VEX1NUQUNLX0lEKSAhPSBudWxsKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFJlc2l6ZURpbUxheWVyKGJvb2xlYW4gdmlzaWJsZSwgaW50IHRhcmdldFN0YWNrSWQsIGZsb2F0IGFscGhhKSB7CisgICAgICAgIFN1cmZhY2VDb250cm9sLm9wZW5UcmFuc2FjdGlvbigpOworICAgICAgICBUYXNrU3RhY2sgc3RhY2sgPSBtRGlzcGxheUNvbnRlbnQubVNlcnZpY2UubVN0YWNrSWRUb1N0YWNrLmdldCh0YXJnZXRTdGFja0lkKTsKKyAgICAgICAgYm9vbGVhbiB2aXNpYmxlQW5kVmFsaWQgPSB2aXNpYmxlICYmIHN0YWNrICE9IG51bGw7CisgICAgICAgIGlmICh2aXNpYmxlQW5kVmFsaWQpIHsKKyAgICAgICAgICAgIHN0YWNrLmdldERpbUJvdW5kcyhtVG1wUmVjdCk7CisgICAgICAgICAgICBpZiAobVRtcFJlY3QuaGVpZ2h0KCkgPiAwICYmIG1UbXBSZWN0LndpZHRoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgbURpbUxheWVyLnNldEJvdW5kcyhtVG1wUmVjdCk7CisgICAgICAgICAgICAgICAgbURpbUxheWVyLnNob3cobURpc3BsYXlDb250ZW50Lm1TZXJ2aWNlLm1MYXllcnNDb250cm9sbGVyLmdldFJlc2l6ZURpbUxheWVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYSwgMCAvKiBkdXJhdGlvbiAqLyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZpc2libGVBbmRWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdmlzaWJsZUFuZFZhbGlkKSB7CisgICAgICAgICAgICBtRGltTGF5ZXIuaGlkZSgpOworICAgICAgICB9CisgICAgICAgIFN1cmZhY2VDb250cm9sLmNsb3NlVHJhbnNhY3Rpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0Z1bGxzY3JlZW4oKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgRGlzcGxheUluZm8gZ2V0RGlzcGxheUluZm8oKSB7CisgICAgICAgIHJldHVybiBtRGlzcGxheUNvbnRlbnQuZ2V0RGlzcGxheUluZm8oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBnZXREaW1Cb3VuZHMoUmVjdCBvdXRCb3VuZHMpIHsKKyAgICAgICAgLy8gVGhpcyBkaW0gbGF5ZXIgdXNlciBkb2Vzbid0IG5lZWQgdGhpcy4KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU2hvcnRTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiBUQUc7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EcmFnU3RhdGUuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRHJhZ1N0YXRlLmphdmEKaW5kZXggZGE4OTQ4MTguLjdiMGE4ZDcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRHJhZ1N0YXRlLmphdmEKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9EcmFnU3RhdGUuamF2YQpAQCAtMzUsNyArMzUsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EcmFnRXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkRyb3BQZXJtaXNzaW9uSG9sZGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JbnB1dENoYW5uZWw7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VDb250cm9sOwogaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwpAQCAtNTQsNiArNTMsOCBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZS5EcmFnSW5wdXRFdmVudFJlY2VpdmVyOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyU2VydmljZS5IOwogCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JRHJvcFBlcm1pc3Npb25zOworCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogLyoqCkBAIC00MjgsNyArNDI5LDcgQEAKICAgICAvLyBUZWxsIHRoZSBkcm9wIHRhcmdldCBhYm91dCB0aGUgZGF0YS4gIFJldHVybnMgJ3RydWUnIGlmIHdlIGNhbiBpbW1lZGlhdGVseQogICAgIC8vIGRpc3BhdGNoIHRoZSBnbG9iYWwgZHJhZy1lbmRlZCBtZXNzYWdlLCAnZmFsc2UnIGlmIHdlIG5lZWQgdG8gd2FpdCBmb3IgYQogICAgIC8vIHJlc3VsdCBmcm9tIHRoZSByZWNpcGllbnQuCi0gICAgYm9vbGVhbiBub3RpZnlEcm9wTHcoV2luZG93U3RhdGUgdG91Y2hlZFdpbiwgRHJvcFBlcm1pc3Npb25Ib2xkZXIgZHJvcFBlcm1pc3Npb25Ib2xkZXIsCisgICAgYm9vbGVhbiBub3RpZnlEcm9wTHcoV2luZG93U3RhdGUgdG91Y2hlZFdpbiwgSURyb3BQZXJtaXNzaW9ucyBkcm9wUGVybWlzc2lvbnMsCiAgICAgICAgICAgICBmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAgICAgIGlmIChtQW5pbWF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ0OSw3ICs0NTAsNyBAQAogICAgICAgICBmaW5hbCBpbnQgbXlQaWQgPSBQcm9jZXNzLm15UGlkKCk7CiAgICAgICAgIGZpbmFsIElCaW5kZXIgdG9rZW4gPSB0b3VjaGVkV2luLm1DbGllbnQuYXNCaW5kZXIoKTsKICAgICAgICAgRHJhZ0V2ZW50IGV2dCA9IG9idGFpbkRyYWdFdmVudCh0b3VjaGVkV2luLCBEcmFnRXZlbnQuQUNUSU9OX0RST1AsIHgsIHksCi0gICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbURhdGEsIGRyb3BQZXJtaXNzaW9uSG9sZGVyLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbURhdGEsIGRyb3BQZXJtaXNzaW9ucywgZmFsc2UpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgdG91Y2hlZFdpbi5tQ2xpZW50LmRpc3BhdGNoRHJhZ0V2ZW50KGV2dCk7CiAKQEAgLTUxNiw3ICs1MTcsNyBAQAogICAgIHByaXZhdGUgc3RhdGljIERyYWdFdmVudCBvYnRhaW5EcmFnRXZlbnQoV2luZG93U3RhdGUgd2luLCBpbnQgYWN0aW9uLAogICAgICAgICAgICAgZmxvYXQgeCwgZmxvYXQgeSwgT2JqZWN0IGxvY2FsU3RhdGUsCiAgICAgICAgICAgICBDbGlwRGVzY3JpcHRpb24gZGVzY3JpcHRpb24sIENsaXBEYXRhIGRhdGEsCi0gICAgICAgICAgICBEcm9wUGVybWlzc2lvbkhvbGRlciBkcm9wUGVybWlzc2lvbkhvbGRlciwKKyAgICAgICAgICAgIElEcm9wUGVybWlzc2lvbnMgZHJvcFBlcm1pc3Npb25zLAogICAgICAgICAgICAgYm9vbGVhbiByZXN1bHQpIHsKICAgICAgICAgZmxvYXQgd2luWCA9IHggLSB3aW4ubUZyYW1lLmxlZnQ7CiAgICAgICAgIGZsb2F0IHdpblkgPSB5IC0gd2luLm1GcmFtZS50b3A7CkBAIC01MjUsNyArNTI2LDcgQEAKICAgICAgICAgICAgIHdpblkgKj0gd2luLm1HbG9iYWxTY2FsZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gRHJhZ0V2ZW50Lm9idGFpbihhY3Rpb24sIHdpblgsIHdpblksIGxvY2FsU3RhdGUsIGRlc2NyaXB0aW9uLCBkYXRhLAotICAgICAgICAgICAgICAgIGRyb3BQZXJtaXNzaW9uSG9sZGVyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGRyb3BQZXJtaXNzaW9ucywgcmVzdWx0KTsKICAgICB9CiAKICAgICBib29sZWFuIHN0ZXBBbmltYXRpb25Mb2NrZWQobG9uZyBjdXJyZW50VGltZU1zKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Ryb3BQZXJtaXNzaW9uc0hhbmRsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vRHJvcFBlcm1pc3Npb25zSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2ZhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL0Ryb3BQZXJtaXNzaW9uc0hhbmRsZXIuamF2YQpAQCAtMCwwICsxLDk4IEBACisvKgorKiogQ29weXJpZ2h0IDIwMTUsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyoqCisqKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKioKKyoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyoqCisqKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisqKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisqKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndtOworCitpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOworaW1wb3J0IGFuZHJvaWQuY29udGVudC5DbGlwRGF0YTsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOworCitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JRHJvcFBlcm1pc3Npb25zOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKKworY2xhc3MgRHJvcFBlcm1pc3Npb25zSGFuZGxlciBleHRlbmRzIElEcm9wUGVybWlzc2lvbnMuU3R1YiB7CisKKyAgICBwcml2YXRlIGZpbmFsIGludCBtU291cmNlVWlkOworICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1UYXJnZXRQYWNrYWdlOworICAgIHByaXZhdGUgZmluYWwgaW50IG1Nb2RlOworICAgIHByaXZhdGUgZmluYWwgaW50IG1Tb3VyY2VVc2VySWQ7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVRhcmdldFVzZXJJZDsKKworICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFVyaT4gbVVyaXMgPSBuZXcgQXJyYXlMaXN0PFVyaT4oKTsKKworICAgIHByaXZhdGUgSUJpbmRlciBtQWN0aXZpdHlUb2tlbiA9IG51bGw7CisKKyAgICBEcm9wUGVybWlzc2lvbnNIYW5kbGVyKENsaXBEYXRhIGNsaXBEYXRhLCBpbnQgc291cmNlVWlkLCBTdHJpbmcgdGFyZ2V0UGFja2FnZSwgaW50IG1vZGUsCisgICAgICAgICAgICBpbnQgc291cmNlVXNlcklkLCBpbnQgdGFyZ2V0VXNlcklkKSB7CisgICAgICAgIG1Tb3VyY2VVaWQgPSBzb3VyY2VVaWQ7CisgICAgICAgIG1UYXJnZXRQYWNrYWdlID0gdGFyZ2V0UGFja2FnZTsKKyAgICAgICAgbU1vZGUgPSBtb2RlOworICAgICAgICBtU291cmNlVXNlcklkID0gc291cmNlVXNlcklkOworICAgICAgICBtVGFyZ2V0VXNlcklkID0gdGFyZ2V0VXNlcklkOworCisgICAgICAgIGNsaXBEYXRhLmNvbGxlY3RVcmlzKG1VcmlzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB0YWtlKElCaW5kZXIgYWN0aXZpdHlUb2tlbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgIGlmIChtQWN0aXZpdHlUb2tlbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbUFjdGl2aXR5VG9rZW4gPSBhY3Rpdml0eVRva2VuOworCisgICAgICAgIC8vIFdpbGwgdGhyb3cgaWYgQWN0aXZpdHkgaXMgbm90IGZvdW5kLgorICAgICAgICBJQmluZGVyIHBlcm1pc3Npb25Pd25lciA9IEFjdGl2aXR5TWFuYWdlck5hdGl2ZS5nZXREZWZhdWx0KCkuCisgICAgICAgICAgICAgICAgZ2V0VXJpUGVybWlzc2lvbk93bmVyRm9yQWN0aXZpdHkobUFjdGl2aXR5VG9rZW4pOworCisgICAgICAgIGxvbmcgb3JpZ0lkID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1VcmlzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS5ncmFudFVyaVBlcm1pc3Npb25Gcm9tT3duZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uT3duZXIsIG1Tb3VyY2VVaWQsIG1UYXJnZXRQYWNrYWdlLCBtVXJpcy5nZXQoaSksIG1Nb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbVNvdXJjZVVzZXJJZCwgbVRhcmdldFVzZXJJZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShvcmlnSWQpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHRocm93cyBSZW1vdGVFeGNlcHRpb24geworICAgICAgICBpZiAobUFjdGl2aXR5VG9rZW4gPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSUJpbmRlciBwZXJtaXNzaW9uT3duZXIgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcGVybWlzc2lvbk93bmVyID0gQWN0aXZpdHlNYW5hZ2VyTmF0aXZlLmdldERlZmF1bHQoKS4KKyAgICAgICAgICAgICAgICAgICAgZ2V0VXJpUGVybWlzc2lvbk93bmVyRm9yQWN0aXZpdHkobUFjdGl2aXR5VG9rZW4pOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gQWN0aXZpdHkgaXMgZGVzdHJveWVkLCBwZXJtaXNzaW9ucyBhbHJlYWR5IHJldm9rZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBtQWN0aXZpdHlUb2tlbiA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1VcmlzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBBY3Rpdml0eU1hbmFnZXJOYXRpdmUuZ2V0RGVmYXVsdCgpLnJldm9rZVVyaVBlcm1pc3Npb25Gcm9tT3duZXIoCisgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25Pd25lciwgbVVyaXMuZ2V0KGkpLCBtTW9kZSwgbVNvdXJjZVVzZXJJZCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2suamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCmluZGV4IDcyYTgzNDMuLjgzMmEyOTggMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFzay5qYXZhCkBAIC02MSw2ICs2MSwxMyBAQAogCiAgICAgLy8gQ29udGVudCBsaW1pdHMgcmVsYXRpdmUgdG8gdGhlIERpc3BsYXlDb250ZW50IHRoaXMgc2l0cyBpbi4KICAgICBwcml2YXRlIFJlY3QgbUJvdW5kcyA9IG5ldyBSZWN0KCk7CisgICAgZmluYWwgUmVjdCBtUHJlcGFyZWRGcm96ZW5Cb3VuZHMgPSBuZXcgUmVjdCgpOworCisgICAgcHJpdmF0ZSBSZWN0IG1QcmVTY3JvbGxCb3VuZHMgPSBuZXcgUmVjdCgpOworICAgIHByaXZhdGUgYm9vbGVhbiBtU2Nyb2xsVmFsaWQ7CisKKyAgICAvLyBCb3VuZHMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4KKyAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRlbXBJbnNldEJvdW5kcyA9IG5ldyBSZWN0KCk7CiAKICAgICAvLyBEZXZpY2Ugcm90YXRpb24gYXMgb2YgdGhlIGxhc3QgdGltZSB7QGxpbmsgI21Cb3VuZHN9IHdhcyBzZXQuCiAgICAgaW50IG1Sb3RhdGlvbjsKQEAgLTEyMywxMiArMTMwLDI1IEBACiAgICAgICAgIGludCB5T2Zmc2V0ID0gMDsKICAgICAgICAgaWYgKGRvY2tTaWRlICE9IERPQ0tFRF9JTlZBTElEKSB7CiAgICAgICAgICAgICBtU3RhY2suZ2V0Qm91bmRzKG1UbXBSZWN0KTsKLSAgICAgICAgICAgIGRpc3BsYXlDb250ZW50LmdldExvZ2ljYWxEaXNwbGF5UmVjdChtVG1wUmVjdDIpOwogCiAgICAgICAgICAgICBpZiAoZG9ja1NpZGUgPT0gRE9DS0VEX0xFRlQgfHwgZG9ja1NpZGUgPT0gRE9DS0VEX1JJR0hUKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHRvYXN0IHdhcyBvcmlnaW5hbGx5IHBsYWNlZCBhdCB0aGUgYm90dG9tIGFuZCBjZW50ZXJlZC4gVG8gcGxhY2UgaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGUgYm90dG9tLWNlbnRlciBvZiB0aGUgc3RhY2ssIHdlIG9mZnNldCBpdCBob3Jpem9udGFsbHkgYnkgdGhlIGRpZmYKKyAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZSBjZW50ZXIgb2YgdGhlIHN0YWNrIGJvdW5kcyB2cy4gdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLgorICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50LmdldExvZ2ljYWxEaXNwbGF5UmVjdChtVG1wUmVjdDIpOwogICAgICAgICAgICAgICAgIHhPZmZzZXQgPSBtVG1wUmVjdC5jZW50ZXJYKCkgLSBtVG1wUmVjdDIuY2VudGVyWCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChkb2NrU2lkZSA9PSBET0NLRURfVE9QKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHRvYXN0IHdhcyBvcmlnaW5hbGx5IHBsYWNlZCBhdCB0aGUgYm90dG9tIGFuZCBjZW50ZXJlZC4gVG8gcGxhY2UgaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGUgYm90dG9tIGNlbnRlciBvZiB0aGUgdG9wIHN0YWNrLCB3ZSBvZmZzZXQgaXQgdmVydGljYWxseSBieSB0aGUgZGlmZgorICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgYm91bmRzIHZzLiB0aGUgYm90dG9tIG9mIHRoZSBjb250ZW50IHJlY3QuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBOb3RlIGhlcmUgd2UgdXNlIHRoZSBjb250ZW50IHJlY3QgaW5zdGVhZCBvZiB0aGUgZGlzcGxheSByZWN0LCBhcyB3ZSB3YW50CisgICAgICAgICAgICAgICAgLy8gdGhlIHRvYXN0J3MgZGlzdGFuY2UgdG8gdGhlIGRvY2sgZGl2aWRlciAod2hlbiBpdCdzIHBsYWNlZCBhdCB0aGUgdG9wIGhhbGYpCisgICAgICAgICAgICAgICAgLy8gdG8gYmUgdGhlIHNhbWUgYXMgaXQncyBkaXN0YW5jZSB0byB0aGUgdG9wIG9mIHRoZSBuYXZpZ2F0aW9uIGJhciAod2hlbiBpdCdzCisgICAgICAgICAgICAgICAgLy8gcGxhY2VkIGF0IHRoZSBib3R0b20pLgorCiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgYWRqdXN0IGZvciBET0NLRURfQk9UVE9NIGNhc2Ugc2luY2UgaXQncyBhbHJlYWR5IGF0IHRoZSBib3R0b20uCisgICAgICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQuZ2V0Q29udGVudFJlY3QobVRtcFJlY3QyKTsKICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gbVRtcFJlY3QyLmJvdHRvbSAtIG1UbXBSZWN0LmJvdHRvbTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1TZXJ2aWNlLm1ILm9idGFpbk1lc3NhZ2UoCkBAIC0xNTMsOCArMTczLDE3IEBACiAgICAgICAgIG1EZWZlclJlbW92YWwgPSBmYWxzZTsKICAgICB9CiAKKyAgICBwcml2YXRlIGJvb2xlYW4gaGFzQXBwVG9rZW5zQWxpdmUoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSBtQXBwVG9rZW5zLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoIW1BcHBUb2tlbnMuZ2V0KGkpLmFwcERpZWQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgdm9pZCByZW1vdmVMb2NrZWQoKSB7Ci0gICAgICAgIGlmICghbUFwcFRva2Vucy5pc0VtcHR5KCkgJiYgbVN0YWNrLmlzQW5pbWF0aW5nKCkpIHsKKyAgICAgICAgaWYgKGhhc0FwcFRva2Vuc0FsaXZlKCkgJiYgbVN0YWNrLmlzQW5pbWF0aW5nKCkpIHsKICAgICAgICAgICAgIGlmIChERUJVR19TVEFDSykgU2xvZy5pKFRBR19XTSwgInJlbW92ZVRhc2s6IGRlZmVycmluZyByZW1vdmluZyB0YXNrSWQ9IiArIG1UYXNrSWQpOwogICAgICAgICAgICAgbURlZmVyUmVtb3ZhbCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xOTcsOCArMjI2LDcgQEAKICAgICBib29sZWFuIHJlbW92ZUFwcFRva2VuKEFwcFdpbmRvd1Rva2VuIHd0b2tlbikgewogICAgICAgICBib29sZWFuIHJlbW92ZWQgPSBtQXBwVG9rZW5zLnJlbW92ZSh3dG9rZW4pOwogICAgICAgICBpZiAobUFwcFRva2Vucy5zaXplKCkgPT0gMCkgewotICAgICAgICAgICAgRXZlbnRMb2cud3JpdGVFdmVudChFdmVudExvZ1RhZ3MuV01fVEFTS19SRU1PVkVELCBtVGFza0lkLAotICAgICAgICAgICAgICAgICAgICAicmVtb3ZlQXBwVG9rZW46IGxhc3QgdG9rZW4iKTsKKyAgICAgICAgICAgIEV2ZW50TG9nLndyaXRlRXZlbnQoRXZlbnRMb2dUYWdzLldNX1RBU0tfUkVNT1ZFRCwgbVRhc2tJZCwgInJlbW92ZUFwcFRva2VuOiBsYXN0IHRva2VuIik7CiAgICAgICAgICAgICBpZiAobURlZmVyUmVtb3ZhbCkgewogICAgICAgICAgICAgICAgIHJlbW92ZUxvY2tlZCgpOwogICAgICAgICAgICAgfQpAQCAtMjQ2LDE5ICsyNzQsMjMgQEAKICAgICAgICAgICAgIC8vIENhbid0IHNldCB0byBmdWxsc2NyZWVuIGlmIHdlIGRvbid0IGhhdmUgYSBkaXNwbGF5IHRvIGdldCBib3VuZHMgZnJvbS4uLgogICAgICAgICAgICAgcmV0dXJuIEJPVU5EU19DSEFOR0VfTk9ORTsKICAgICAgICAgfQotICAgICAgICBpZiAobUJvdW5kcy5lcXVhbHMoYm91bmRzKSAmJiBvbGRGdWxsc2NyZWVuID09IG1GdWxsc2NyZWVuICYmIG1Sb3RhdGlvbiA9PSByb3RhdGlvbikgeworICAgICAgICBpZiAobVByZVNjcm9sbEJvdW5kcy5lcXVhbHMoYm91bmRzKSAmJiBvbGRGdWxsc2NyZWVuID09IG1GdWxsc2NyZWVuICYmIG1Sb3RhdGlvbiA9PSByb3RhdGlvbikgewogICAgICAgICAgICAgcmV0dXJuIEJPVU5EU19DSEFOR0VfTk9ORTsKICAgICAgICAgfQogCiAgICAgICAgIGludCBib3VuZHNDaGFuZ2UgPSBCT1VORFNfQ0hBTkdFX05PTkU7Ci0gICAgICAgIGlmIChtQm91bmRzLmxlZnQgIT0gYm91bmRzLmxlZnQgfHwgbUJvdW5kcy50b3AgIT0gYm91bmRzLnRvcCkgeworICAgICAgICBpZiAobVByZVNjcm9sbEJvdW5kcy5sZWZ0ICE9IGJvdW5kcy5sZWZ0IHx8IG1QcmVTY3JvbGxCb3VuZHMudG9wICE9IGJvdW5kcy50b3ApIHsKICAgICAgICAgICAgIGJvdW5kc0NoYW5nZSB8PSBCT1VORFNfQ0hBTkdFX1BPU0lUSU9OOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtQm91bmRzLndpZHRoKCkgIT0gYm91bmRzLndpZHRoKCkgfHwgbUJvdW5kcy5oZWlnaHQoKSAhPSBib3VuZHMuaGVpZ2h0KCkpIHsKKyAgICAgICAgaWYgKG1QcmVTY3JvbGxCb3VuZHMud2lkdGgoKSAhPSBib3VuZHMud2lkdGgoKSB8fCBtUHJlU2Nyb2xsQm91bmRzLmhlaWdodCgpICE9IGJvdW5kcy5oZWlnaHQoKSkgewogICAgICAgICAgICAgYm91bmRzQ2hhbmdlIHw9IEJPVU5EU19DSEFOR0VfU0laRTsKICAgICAgICAgfQogCi0gICAgICAgIG1Cb3VuZHMuc2V0KGJvdW5kcyk7CisKKyAgICAgICAgbVByZVNjcm9sbEJvdW5kcy5zZXQoYm91bmRzKTsKKworICAgICAgICByZXNldFNjcm9sbExvY2tlZCgpOworCiAgICAgICAgIG1Sb3RhdGlvbiA9IHJvdGF0aW9uOwogICAgICAgICBpZiAoZGlzcGxheUNvbnRlbnQgIT0gbnVsbCkgewogICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQubURpbUxheWVyQ29udHJvbGxlci51cGRhdGVEaW1MYXllcih0aGlzKTsKQEAgLTI2Nyw2ICsyOTksMjYgQEAKICAgICAgICAgcmV0dXJuIGJvdW5kc0NoYW5nZTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSBib3VuZHMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4gU2VlCisgICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXIjcmVzaXplRG9ja2VkU3RhY2t9IHdoeSB0aGlzIGlzIG5lZWRlZC4KKyAgICAgKi8KKyAgICB2b2lkIHNldFRlbXBJbnNldEJvdW5kcyhSZWN0IHRlbXBJbnNldEJvdW5kcykgeworICAgICAgICBpZiAodGVtcEluc2V0Qm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgICAgIG1UZW1wSW5zZXRCb3VuZHMuc2V0KHRlbXBJbnNldEJvdW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtVGVtcEluc2V0Qm91bmRzLnNldEVtcHR5KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBib3VuZHMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4gU2VlCisgICAgICoge0BsaW5rIGFuZHJvaWQuYXBwLklBY3Rpdml0eU1hbmFnZXIjcmVzaXplRG9ja2VkU3RhY2t9IHdoeSB0aGlzIGlzIG5lZWRlZC4KKyAgICAgKi8KKyAgICB2b2lkIGdldFRlbXBJbnNldEJvdW5kcyhSZWN0IG91dCkgeworICAgICAgICBvdXQuc2V0KG1UZW1wSW5zZXRCb3VuZHMpOworICAgIH0KKwogICAgIHZvaWQgc2V0UmVzaXplYWJsZShib29sZWFuIHJlc2l6ZWFibGUpIHsKICAgICAgICAgbVJlc2l6ZWFibGUgPSByZXNpemVhYmxlOwogICAgIH0KQEAgLTI4NSwxMCArMzM3LDQ2IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKChib3VuZHNDaGFuZ2VkICYgQk9VTkRTX0NIQU5HRV9TSVpFKSA9PSBCT1VORFNfQ0hBTkdFX1NJWkUpIHsKICAgICAgICAgICAgIHJlc2l6ZVdpbmRvd3MoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1vdmVXaW5kb3dzKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUHJlcGFyZXMgdGhlIHRhc2sgYm91bmRzIHRvIGJlIGZyb3plbiB3aXRoIHRoZSBjdXJyZW50IHNpemUuIFNlZQorICAgICAqIHtAbGluayBBcHBXaW5kb3dUb2tlbiNmcmVlemVCb3VuZHN9LgorICAgICAqLworICAgIHZvaWQgcHJlcGFyZUZyZWV6aW5nQm91bmRzKCkgeworICAgICAgICBtUHJlcGFyZWRGcm96ZW5Cb3VuZHMuc2V0KG1Cb3VuZHMpOworICAgIH0KKworICAgIHZvaWQgcmVzZXRTY3JvbGxMb2NrZWQoKSB7CisgICAgICAgIGlmIChtU2Nyb2xsVmFsaWQpIHsKKyAgICAgICAgICAgIG1TY3JvbGxWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgYXBwbHlTY3JvbGxUb0FsbFdpbmRvd3MoMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgbUJvdW5kcy5zZXQobVByZVNjcm9sbEJvdW5kcyk7CisgICAgfQorCisgICAgdm9pZCBhcHBseVNjcm9sbFRvQWxsV2luZG93cyhmaW5hbCBpbnQgeE9mZnNldCwgZmluYWwgaW50IHlPZmZzZXQpIHsKKyAgICAgICAgZm9yIChpbnQgYWN0aXZpdHlOZHggPSBtQXBwVG9rZW5zLnNpemUoKSAtIDE7IGFjdGl2aXR5TmR4ID49IDA7IC0tYWN0aXZpdHlOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxXaW5kb3dTdGF0ZT4gd2luZG93cyA9IG1BcHBUb2tlbnMuZ2V0KGFjdGl2aXR5TmR4KS5hbGxBcHBXaW5kb3dzOworICAgICAgICAgICAgZm9yIChpbnQgd2luTmR4ID0gd2luZG93cy5zaXplKCkgLSAxOyB3aW5OZHggPj0gMDsgLS13aW5OZHgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSB3aW4gPSB3aW5kb3dzLmdldCh3aW5OZHgpOworICAgICAgICAgICAgICAgIHdpbi5tWE9mZnNldCA9IHhPZmZzZXQ7CisgICAgICAgICAgICAgICAgd2luLm1ZT2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgYXBwbHlTY3JvbGxUb1dpbmRvd0lmTmVlZGVkKGZpbmFsIFdpbmRvd1N0YXRlIHdpbikgeworICAgICAgICBpZiAobVNjcm9sbFZhbGlkKSB7CisgICAgICAgICAgICB3aW4ubVhPZmZzZXQgPSBtQm91bmRzLmxlZnQ7CisgICAgICAgICAgICB3aW4ubVlPZmZzZXQgPSBtQm91bmRzLnRvcDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2xlYW4gc2Nyb2xsTG9ja2VkKFJlY3QgYm91bmRzKSB7CiAgICAgICAgIC8vIHNoaWZ0IHRoZSB0YXNrIGJvdW5kIGlmIGl0IGRvZXNuJ3QgZnVsbHkgY292ZXIgdGhlIHN0YWNrIGFyZWEKICAgICAgICAgbVN0YWNrLmdldERpbUJvdW5kcyhtVG1wUmVjdCk7CkBAIC0zMTAsMjEgKzM5OCwxNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGJvdW5kcy5lcXVhbHMobUJvdW5kcykpIHsKKyAgICAgICAgLy8gV2UgY2FuIHN0b3AgaGVyZSBpZiB3ZSdyZSBhbHJlYWR5IHNjcm9sbGluZyBhbmQgdGhlIHNjcm9sbGVkIGJvdW5kcyBub3QgY2hhbmdlZC4KKyAgICAgICAgaWYgKG1TY3JvbGxWYWxpZCAmJiBib3VuZHMuZXF1YWxzKG1Cb3VuZHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKwogICAgICAgICAvLyBOb3JtYWwgc2V0Qm91bmRzKCkgZG9lcyBub3QgYWxsb3cgbm9uLW51bGwgYm91bmRzIGZvciBmdWxsc2NyZWVuIGFwcHMuCiAgICAgICAgIC8vIFdlIG9ubHkgY2hhbmdlIGJvdW5kcyBmb3IgdGhlIHNjcm9sbGluZyBjYXNlIHdpdGhvdXQgY2hhbmdlIGl0IHNpemUsCiAgICAgICAgIC8vIG9uIHJlc2l6aW5nIHBhdGggd2Ugc2hvdWxkIHN0aWxsIHdhbnQgdGhlIHZhbGlkYXRpb24uCiAgICAgICAgIG1Cb3VuZHMuc2V0KGJvdW5kcyk7Ci0gICAgICAgIGZvciAoaW50IGFjdGl2aXR5TmR4ID0gbUFwcFRva2Vucy5zaXplKCkgLSAxOyBhY3Rpdml0eU5keCA+PSAwOyAtLWFjdGl2aXR5TmR4KSB7Ci0gICAgICAgICAgICBmaW5hbCBBcnJheUxpc3Q8V2luZG93U3RhdGU+IHdpbmRvd3MgPSBtQXBwVG9rZW5zLmdldChhY3Rpdml0eU5keCkuYWxsQXBwV2luZG93czsKLSAgICAgICAgICAgIGZvciAoaW50IHdpbk5keCA9IHdpbmRvd3Muc2l6ZSgpIC0gMTsgd2luTmR4ID49IDA7IC0td2luTmR4KSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgd2luID0gd2luZG93cy5nZXQod2luTmR4KTsKLSAgICAgICAgICAgICAgICB3aW4ubVhPZmZzZXQgPSBib3VuZHMubGVmdDsKLSAgICAgICAgICAgICAgICB3aW4ubVlPZmZzZXQgPSBib3VuZHMudG9wOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIG1TY3JvbGxWYWxpZCA9IHRydWU7CisgICAgICAgIGFwcGx5U2Nyb2xsVG9BbGxXaW5kb3dzKGJvdW5kcy5sZWZ0LCBib3VuZHMudG9wKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zNTUsNyArNDM5LDYgQEAKICAgICAgICAgbVN0YWNrLmdldERpc3BsYXlDb250ZW50KCkuZ2V0TG9naWNhbERpc3BsYXlSZWN0KG91dCk7CiAgICAgfQogCi0KICAgICAvKioKICAgICAgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdmlzaWJsZSBhcmVhIG9mIHRoaXMgdGFzay4gSWYgdGhlIHRhc2sgaGFzIG9ubHkgb25lIGFwcCwKICAgICAgKiB0aGUgcmVzdWx0IHdpbGwgYmUgdmlzaWJsZSBmcmFtZSBvZiB0aGF0IGFwcC4gSWYgdGhlIHRhc2sgaGFzIG1vcmUgdGhhbiBvbmUgYXBwcywKQEAgLTQ0Miw3ICs1MjUsNyBAQAogCiAgICAgICAgIC8vIERldmljZSByb3RhdGlvbiBjaGFuZ2VkLiBXZSBkb24ndCB3YW50IHRoZSB0YXNrIHRvIG1vdmUgYXJvdW5kIG9uIHRoZSBzY3JlZW4gd2hlbgogICAgICAgICAvLyB0aGlzIGhhcHBlbnMsIHNvIHVwZGF0ZSB0aGUgdGFzayBib3VuZHMgc28gaXQgc3RheXMgaW4gdGhlIHNhbWUgcGxhY2UuCi0gICAgICAgIG1UbXBSZWN0Mi5zZXQobUJvdW5kcyk7CisgICAgICAgIG1UbXBSZWN0Mi5zZXQobVByZVNjcm9sbEJvdW5kcyk7CiAgICAgICAgIGRpc3BsYXlDb250ZW50LnJvdGF0ZUJvdW5kcyhtUm90YXRpb24sIG5ld1JvdGF0aW9uLCBtVG1wUmVjdDIpOwogICAgICAgICBpZiAoc2V0Qm91bmRzKG1UbXBSZWN0MiwgbU92ZXJyaWRlQ29uZmlnKSAhPSBCT1VORFNfQ0hBTkdFX05PTkUpIHsKICAgICAgICAgICAgIC8vIFBvc3QgbWVzc2FnZSB0byBpbmZvcm0gYWN0aXZpdHkgbWFuYWdlciBvZiB0aGUgYm91bmRzIGNoYW5nZSBzaW11bGF0aW5nCkBAIC00NTEsNyArNTM0LDcgQEAKICAgICAgICAgICAgIC8vIGFyZSByZXNpemVhYmxlIGluZGVwZW5kZW50bHkgb2YgdGhlaXIgc3RhY2sgcmVzaXppbmcuCiAgICAgICAgICAgICBpZiAobVN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRCkgewogICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm1ILnNlbmRNZXNzYWdlKG1TZXJ2aWNlLm1ILm9idGFpbk1lc3NhZ2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVNJWkVfVEFTSywgbVRhc2tJZCwgUkVTSVpFX01PREVfU1lTVEVNX1NDUkVFTl9ST1RBVElPTiwgbUJvdW5kcykpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVTSVpFX1RBU0ssIG1UYXNrSWQsIFJFU0laRV9NT0RFX1NZU1RFTV9TQ1JFRU5fUk9UQVRJT04sIG1QcmVTY3JvbGxCb3VuZHMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ2MywxMyArNTQ2LDI0IEBACiAgICAgICAgICAgICBmb3IgKGludCB3aW5OZHggPSB3aW5kb3dzLnNpemUoKSAtIDE7IHdpbk5keCA+PSAwOyAtLXdpbk5keCkgewogICAgICAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHdpbiA9IHdpbmRvd3MuZ2V0KHdpbk5keCk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXNpemluZ1dpbmRvd3MuY29udGFpbnMod2luKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfUkVTSVpFKSBTbG9nLmQoVEFHX1dNLCAic2V0Qm91bmRzOiBSZXNpemluZyAiICsgd2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHX1JFU0laRSkgU2xvZy5kKFRBR19XTSwgInJlc2l6ZVdpbmRvd3M6IFJlc2l6aW5nICIgKyB3aW4pOwogICAgICAgICAgICAgICAgICAgICByZXNpemluZ1dpbmRvd3MuYWRkKHdpbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCisgICAgdm9pZCBtb3ZlV2luZG93cygpIHsKKyAgICAgICAgZm9yIChpbnQgYWN0aXZpdHlOZHggPSBtQXBwVG9rZW5zLnNpemUoKSAtIDE7IGFjdGl2aXR5TmR4ID49IDA7IC0tYWN0aXZpdHlOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIEFycmF5TGlzdDxXaW5kb3dTdGF0ZT4gd2luZG93cyA9IG1BcHBUb2tlbnMuZ2V0KGFjdGl2aXR5TmR4KS5hbGxBcHBXaW5kb3dzOworICAgICAgICAgICAgZm9yIChpbnQgd2luTmR4ID0gd2luZG93cy5zaXplKCkgLSAxOyB3aW5OZHggPj0gMDsgLS13aW5OZHgpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSB3aW4gPSB3aW5kb3dzLmdldCh3aW5OZHgpOworICAgICAgICAgICAgICAgIGlmIChERUJVR19SRVNJWkUpIFNsb2cuZChUQUdfV00sICJtb3ZlV2luZG93czogTW92aW5nICIgKyB3aW4pOworICAgICAgICAgICAgICAgIHdpbi5tTW92ZWRCeVJlc2l6ZSA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICAvKioKICAgICAgKiBDYW5jZWxzIGFueSBydW5uaW5nIGFwcCB0cmFuc2l0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHRhc2suCiAgICAgICovCkBAIC01MDYsOCArNjAwLDkgQEAKICAgICB9CiAKICAgICBib29sZWFuIGlzUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2soKSB7Ci0gICAgICAgIHJldHVybiBtU3RhY2sgIT0gbnVsbCAmJiBnZXREaXNwbGF5Q29udGVudCgpLmdldERvY2tlZFN0YWNrTG9ja2VkKCkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgIFN0YWNrSWQuaXNUYXNrUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2sobVN0YWNrLm1TdGFja0lkKTsKKyAgICAgICAgZmluYWwgRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQgPSBnZXREaXNwbGF5Q29udGVudCgpOworICAgICAgICByZXR1cm4gZGlzcGxheUNvbnRlbnQgIT0gbnVsbCAmJiBkaXNwbGF5Q29udGVudC5nZXREb2NrZWRTdGFja0xvY2tlZCgpICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiBtU3RhY2sgIT0gbnVsbCAmJiBTdGFja0lkLmlzVGFza1Jlc2l6ZWFibGVCeURvY2tlZFN0YWNrKG1TdGFjay5tU3RhY2tJZCk7CiAgICAgfQogCiAgICAgLyoqCkBAIC01MTgsNiArNjEzLDEwIEBACiAgICAgICAgIHJldHVybiBpbkRvY2tlZFdvcmtzcGFjZSgpIHx8IGlzUmVzaXplYWJsZUJ5RG9ja2VkU3RhY2soKTsKICAgICB9CiAKKyAgICBib29sZWFuIGlzVHdvRmluZ2VyU2Nyb2xsTW9kZSgpIHsKKyAgICAgICAgcmV0dXJuIGlzRG9ja2VkSW5FZmZlY3QoKSAmJiAhaXNSZXNpemVhYmxlKCk7CisgICAgfQorCiAgICAgV2luZG93U3RhdGUgZ2V0VG9wVmlzaWJsZUFwcE1haW5XaW5kb3coKSB7CiAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHRva2VuID0gZ2V0VG9wVmlzaWJsZUFwcFRva2VuKCk7CiAgICAgICAgIHJldHVybiB0b2tlbiAhPSBudWxsID8gdG9rZW4uZmluZE1haW5XaW5kb3coKSA6IG51bGw7CkBAIC01NjAsMTEgKzY1OSwyMyBAQAogICAgICAgICByZXR1cm4gIlRhc2s9IiArIG1UYXNrSWQ7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgcHJpbnRUbyhTdHJpbmcgcHJlZml4LCBQcmludFdyaXRlciBwdykgewotICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgidGFza0lkPSIpOyBwdy5wcmludGxuKG1UYXNrSWQpOwotICAgICAgICAgICAgcHcucHJpbnQocHJlZml4ICsgcHJlZml4KTsgcHcucHJpbnQoIm1GdWxsc2NyZWVuPSIpOyBwdy5wcmludGxuKG1GdWxsc2NyZWVuKTsKLSAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCArIHByZWZpeCk7IHB3LnByaW50KCJtQm91bmRzPSIpOyBwdy5wcmludGxuKG1Cb3VuZHMudG9TaG9ydFN0cmluZygpKTsKLSAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCArIHByZWZpeCk7IHB3LnByaW50KCJtZHI9Iik7IHB3LnByaW50bG4obURlZmVyUmVtb3ZhbCk7Ci0gICAgICAgICAgICBwdy5wcmludChwcmVmaXggKyBwcmVmaXgpOyBwdy5wcmludCgiYXBwVG9rZW5zPSIpOyBwdy5wcmludGxuKG1BcHBUb2tlbnMpOworICAgIHB1YmxpYyB2b2lkIGR1bXAoU3RyaW5nIHByZWZpeCwgUHJpbnRXcml0ZXIgcHcpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIGRvdWJsZVByZWZpeCA9IHByZWZpeCArICIgICI7CisKKyAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAidGFza0lkPSIgKyBtVGFza0lkKTsKKyAgICAgICAgcHcucHJpbnRsbihkb3VibGVQcmVmaXggKyAibUZ1bGxzY3JlZW49IiArIG1GdWxsc2NyZWVuKTsKKyAgICAgICAgcHcucHJpbnRsbihkb3VibGVQcmVmaXggKyAibUJvdW5kcz0iICsgbUJvdW5kcy50b1Nob3J0U3RyaW5nKCkpOworICAgICAgICBwdy5wcmludGxuKGRvdWJsZVByZWZpeCArICJtZHI9IiArIG1EZWZlclJlbW92YWwpOworICAgICAgICBwdy5wcmludGxuKGRvdWJsZVByZWZpeCArICJhcHBUb2tlbnM9IiArIG1BcHBUb2tlbnMpOworICAgICAgICBwdy5wcmludGxuKGRvdWJsZVByZWZpeCArICJtVGVtcEluc2V0Qm91bmRzPSIgKyBtVGVtcEluc2V0Qm91bmRzLnRvU2hvcnRTdHJpbmcoKSk7CisKKyAgICAgICAgZmluYWwgU3RyaW5nIHRyaXBsZVByZWZpeCA9IGRvdWJsZVByZWZpeCArICIgICI7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IG1BcHBUb2tlbnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHd0b2tlbiA9IG1BcHBUb2tlbnMuZ2V0KGkpOworICAgICAgICAgICAgcHcucHJpbnRsbih0cmlwbGVQcmVmaXggKyAiQWN0aXZpdHkgIyIgKyBpICsgIiAiICsgd3Rva2VuKTsKKyAgICAgICAgICAgIHd0b2tlbi5kdW1wKHB3LCB0cmlwbGVQcmVmaXgpOworICAgICAgICB9CisKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tTdGFjay5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrU3RhY2suamF2YQppbmRleCA0OWQ5ZWZlLi5mNDE0MGYwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tTdGFjay5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1N0YWNrLmphdmEKQEAgLTI2LDYgKzI2LDkgQEAKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7CiAKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5wb2xpY3kuRGl2aWRlclNuYXBBbGdvcml0aG07CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LkRpdmlkZXJTbmFwQWxnb3JpdGhtLlNuYXBUYXJnZXQ7CitpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwucG9saWN5LkRvY2tlZERpdmlkZXJVdGlsczsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuRXZlbnRMb2dUYWdzOwogCiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKQEAgLTg1LDYgKzg4LDcgQEAKIAogICAgIC8qKiBEZXRhY2ggdGhpcyBzdGFjayBmcm9tIGl0cyBkaXNwbGF5IHdoZW4gYW5pbWF0aW9uIGNvbXBsZXRlcy4gKi8KICAgICBib29sZWFuIG1EZWZlckRldGFjaDsKKyAgICBwcml2YXRlIGJvb2xlYW4gbVVwZGF0ZUJvdW5kc0FmdGVyUm90YXRpb24gPSBmYWxzZTsKIAogICAgIFRhc2tTdGFjayhXaW5kb3dNYW5hZ2VyU2VydmljZSBzZXJ2aWNlLCBpbnQgc3RhY2tJZCkgewogICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CkBAIC0xMTQsNyArMTE4LDggQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN0YWNrIGJvdW5kcyB3YXMgY2hhbmdlZC4KICAgICAgKiAqLwogICAgIGJvb2xlYW4gc2V0Qm91bmRzKAotICAgICAgICAgICAgUmVjdCBzdGFja0JvdW5kcywgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcykgeworICAgICAgICAgICAgUmVjdCBzdGFja0JvdW5kcywgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcywKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PFJlY3Q+IHRhc2tUZW1wSW5zZXRCb3VuZHMpIHsKICAgICAgICAgaWYgKCFzZXRCb3VuZHMoc3RhY2tCb3VuZHMpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEyNSwxNyArMTMwLDIwIEBACiAgICAgICAgICAgICBDb25maWd1cmF0aW9uIGNvbmZpZyA9IGNvbmZpZ3MuZ2V0KHRhc2subVRhc2tJZCk7CiAgICAgICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBSZWN0IGJvdW5kcyA9IHRhc2tCb3VuZHMuZ2V0KHRhc2subVRhc2tJZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0YXNrLmlzUmVzaXplYWJsZSgpICYmIHRhc2suaXNEb2NrZWRJbkVmZmVjdCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRhc2suaXNUd29GaW5nZXJTY3JvbGxNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vbi1yZXNpemVhYmxlIHRhc2sgdGhhdCdzIGRvY2tlZCAob3Igc2lkZS1ieS1zaWRlIHRvIHRoZSBkb2NrZWQKICAgICAgICAgICAgICAgICAgICAgLy8gc3RhY2spLiBJdCBtaWdodCBoYXZlIGJlZW4gc2Nyb2xsZWQgcHJldmlvdXNseSwgYW5kIGFmdGVyIHRoZSBzdGFjayByZXNpemluZywKICAgICAgICAgICAgICAgICAgICAgLy8gaXQgbWlnaHQgbm8gbG9uZ2VyIGZ1bGx5IGNvdmVyIHRoZSBzdGFjayBhcmVhLgogICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBvbGQgYm91bmRzIGFuZCByZS1hcHBseSB0aGUgc2Nyb2xsLiBUaGlzIGFkanVzdHMgdGhlIGJvdW5kcyB0bwogICAgICAgICAgICAgICAgICAgICAvLyBmaXQgdGhlIG5ldyBzdGFjayBib3VuZHMuCi0gICAgICAgICAgICAgICAgICAgIHRhc2suZ2V0Qm91bmRzKG1UbXBSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgdGFzay5zZXRCb3VuZHMoYm91bmRzLCBjb25maWcpOworICAgICAgICAgICAgICAgICAgICB0YXNrLmdldEJvdW5kcyhtVG1wUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIHRhc2suc2Nyb2xsTG9ja2VkKG1UbXBSZWN0KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB0YXNrLnNldEJvdW5kcyhib3VuZHMsIGNvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgIHRhc2suc2V0VGVtcEluc2V0Qm91bmRzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2tUZW1wSW5zZXRCb3VuZHMgIT0gbnVsbCA/IHRhc2tUZW1wSW5zZXRCb3VuZHMuZ2V0KHRhc2subVRhc2tJZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBTbG9nLnd0ZihUQUdfV00sICJObyBjb25maWcgZm9yIHRhc2s6ICIgKyB0YXNrICsgIiwgaXMgdGhlcmUgYSBtaXNtYXRjaCB3aXRoIEFNPyIpOwpAQCAtMTQ0LDYgKzE1MiwyMSBAQAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICB2b2lkIHByZXBhcmVGcmVlemluZ1Rhc2tCb3VuZHMoKSB7CisgICAgICAgIGZvciAoaW50IHRhc2tOZHggPSBtVGFza3Muc2l6ZSgpIC0gMTsgdGFza05keCA+PSAwOyAtLXRhc2tOZHgpIHsKKyAgICAgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IG1UYXNrcy5nZXQodGFza05keCk7CisgICAgICAgICAgICB0YXNrLnByZXBhcmVGcmVlemluZ0JvdW5kcygpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbGVhbiBpc0Z1bGxzY3JlZW5Cb3VuZHMoUmVjdCBib3VuZHMpIHsKKyAgICAgICAgaWYgKG1EaXNwbGF5Q29udGVudCA9PSBudWxsIHx8IGJvdW5kcyA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtRGlzcGxheUNvbnRlbnQuZ2V0TG9naWNhbERpc3BsYXlSZWN0KG1UbXBSZWN0KTsKKyAgICAgICAgcmV0dXJuIG1UbXBSZWN0LmVxdWFscyhib3VuZHMpOworICAgIH0KKwogICAgIHByaXZhdGUgYm9vbGVhbiBzZXRCb3VuZHMoUmVjdCBib3VuZHMpIHsKICAgICAgICAgYm9vbGVhbiBvbGRGdWxsc2NyZWVuID0gbUZ1bGxzY3JlZW47CiAgICAgICAgIGludCByb3RhdGlvbiA9IFN1cmZhY2UuUk9UQVRJT05fMDsKQEAgLTIxNiw2ICsyMzksNyBAQAogICAgIH0KIAogICAgIHZvaWQgdXBkYXRlRGlzcGxheUluZm8oUmVjdCBib3VuZHMpIHsKKyAgICAgICAgbVVwZGF0ZUJvdW5kc0FmdGVyUm90YXRpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKG1EaXNwbGF5Q29udGVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tzLnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgLS10YXNrTmR4KSB7CiAgICAgICAgICAgICAgICAgbVRhc2tzLmdldCh0YXNrTmR4KS51cGRhdGVEaXNwbGF5SW5mbyhtRGlzcGxheUNvbnRlbnQpOwpAQCAtMjI1LDIwICsyNDksNzIgQEAKICAgICAgICAgICAgIH0gZWxzZSBpZiAobUZ1bGxzY3JlZW4pIHsKICAgICAgICAgICAgICAgICBzZXRCb3VuZHMobnVsbCk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1VcGRhdGVCb3VuZHNBZnRlclJvdGF0aW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtVG1wUmVjdDIuc2V0KG1Cb3VuZHMpOwotICAgICAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudC5yb3RhdGVCb3VuZHMoCi0gICAgICAgICAgICAgICAgICAgICAgICBtUm90YXRpb24sIG1EaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SW5mbygpLnJvdGF0aW9uLCBtVG1wUmVjdDIpOwotICAgICAgICAgICAgICAgIGlmIChzZXRCb3VuZHMobVRtcFJlY3QyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBQb3N0IG1lc3NhZ2UgdG8gaW5mb3JtIGFjdGl2aXR5IG1hbmFnZXIgb2YgdGhlIGJvdW5kcyBjaGFuZ2Ugc2ltdWxhdGluZwotICAgICAgICAgICAgICAgICAgICAvLyBhIG9uZS13YXkgY2FsbC4gV2UgZG8gdGhpcyB0byBwcmV2ZW50IGEgZGVhZGxvY2sgYmV0d2VlbiB3aW5kb3cgbWFuYWdlcgotICAgICAgICAgICAgICAgICAgICAvLyBsb2NrIGFuZCBhY3Rpdml0eSBtYW5hZ2VyIGxvY2sgYmVlbiBoZWxkLgotICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5tSC5zZW5kTWVzc2FnZShtU2VydmljZS5tSC5vYnRhaW5NZXNzYWdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU0laRV9TVEFDSywgbVN0YWNrSWQsIDAgLyphbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSovLCBtQm91bmRzKSk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1JvdGF0aW9uID0gbURpc3BsYXlDb250ZW50LmdldERpc3BsYXlJbmZvKCkucm90YXRpb247CisgICAgICAgICAgICAgICAgaWYgKG1Sb3RhdGlvbiA9PSBuZXdSb3RhdGlvbikgeworICAgICAgICAgICAgICAgICAgICBzZXRCb3VuZHMobVRtcFJlY3QyKTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcm90YXRpb24gY2hhbmdlcywgd2UnbGwgaGFuZGxlIGl0IGluIHVwZGF0ZUJvdW5kc0FmdGVyUm90YXRpb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKgorICAgICAqIFVwZGF0ZXMgdGhlIGJvdW5kcyBhZnRlciByb3RhdGluZyB0aGUgc2NyZWVuLiBXZSBjYW4ndCBoYW5kbGUgaXQgaW4KKyAgICAgKiB7QGxpbmsgI3VwZGF0ZURpc3BsYXlJbmZvfSBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgdGhlIGNvbmZpZ3VyYXRpb24gbWlnaHQgbm90IGJlIGZ1bGx5IHVwZGF0ZWQKKyAgICAgKiB5ZXQuCisgICAgICovCisgICAgdm9pZCB1cGRhdGVCb3VuZHNBZnRlclJvdGF0aW9uKCkgeworICAgICAgICBpZiAoIW1VcGRhdGVCb3VuZHNBZnRlclJvdGF0aW9uKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbVVwZGF0ZUJvdW5kc0FmdGVyUm90YXRpb24gPSBmYWxzZTsKKyAgICAgICAgZmluYWwgaW50IG5ld1JvdGF0aW9uID0gZ2V0RGlzcGxheUluZm8oKS5yb3RhdGlvbjsKKyAgICAgICAgbURpc3BsYXlDb250ZW50LnJvdGF0ZUJvdW5kcyhtUm90YXRpb24sIG5ld1JvdGF0aW9uLCBtVG1wUmVjdDIpOworICAgICAgICBpZiAobVN0YWNrSWQgPT0gRE9DS0VEX1NUQUNLX0lEKSB7CisgICAgICAgICAgICBzbmFwRG9ja2VkU3RhY2tBZnRlclJvdGF0aW9uKG1UbXBSZWN0Mik7CisgICAgICAgIH0KKworICAgICAgICAvLyBQb3N0IG1lc3NhZ2UgdG8gaW5mb3JtIGFjdGl2aXR5IG1hbmFnZXIgb2YgdGhlIGJvdW5kcyBjaGFuZ2Ugc2ltdWxhdGluZworICAgICAgICAvLyBhIG9uZS13YXkgY2FsbC4gV2UgZG8gdGhpcyB0byBwcmV2ZW50IGEgZGVhZGxvY2sgYmV0d2VlbiB3aW5kb3cgbWFuYWdlcgorICAgICAgICAvLyBsb2NrIGFuZCBhY3Rpdml0eSBtYW5hZ2VyIGxvY2sgYmVlbiBoZWxkLgorICAgICAgICBtU2VydmljZS5tSC5zZW5kTWVzc2FnZShtU2VydmljZS5tSC5vYnRhaW5NZXNzYWdlKAorICAgICAgICAgICAgICAgIFJFU0laRV9TVEFDSywgbVN0YWNrSWQsIDAgLyphbGxvd1Jlc2l6ZUluRG9ja2VkTW9kZSovLCBtVG1wUmVjdDIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTbmFwcyB0aGUgYm91bmRzIGFmdGVyIHJvdGF0aW9uIHRvIHRoZSBjbG9zZXN0IHNuYXAgdGFyZ2V0IGZvciB0aGUgZG9ja2VkIHN0YWNrLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBzbmFwRG9ja2VkU3RhY2tBZnRlclJvdGF0aW9uKFJlY3Qgb3V0Qm91bmRzKSB7CisKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgICBmaW5hbCBEaXNwbGF5SW5mbyBkaXNwbGF5SW5mbyA9IG1EaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SW5mbygpOworICAgICAgICBmaW5hbCBpbnQgZGl2aWRlclNpemUgPSBtU2VydmljZS5nZXREZWZhdWx0RGlzcGxheUNvbnRlbnRMb2NrZWQoKQorICAgICAgICAgICAgICAgIC5nZXREb2NrZWREaXZpZGVyQ29udHJvbGxlcigpLmdldENvbnRlbnRXaWR0aCgpOworICAgICAgICBmaW5hbCBpbnQgZG9ja1NpZGUgPSBnZXREb2NrU2lkZShvdXRCb3VuZHMpOworICAgICAgICBmaW5hbCBpbnQgZGl2aWRlclBvc2l0aW9uID0gRG9ja2VkRGl2aWRlclV0aWxzLmNhbGN1bGF0ZVBvc2l0aW9uRm9yQm91bmRzKG91dEJvdW5kcywKKyAgICAgICAgICAgICAgICBkb2NrU2lkZSwgZGl2aWRlclNpemUpOworICAgICAgICBmaW5hbCBpbnQgZGlzcGxheVdpZHRoID0gbURpc3BsYXlDb250ZW50LmdldERpc3BsYXlJbmZvKCkubG9naWNhbFdpZHRoOworICAgICAgICBmaW5hbCBpbnQgZGlzcGxheUhlaWdodCA9IG1EaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SW5mbygpLmxvZ2ljYWxIZWlnaHQ7CisKKyAgICAgICAgLy8gU25hcCB0aGUgcG9zaXRpb24gdG8gYSB0YXJnZXQuCisgICAgICAgIGZpbmFsIGludCByb3RhdGlvbiA9IGRpc3BsYXlJbmZvLnJvdGF0aW9uOworICAgICAgICBmaW5hbCBpbnQgb3JpZW50YXRpb24gPSBtU2VydmljZS5tQ3VyQ29uZmlndXJhdGlvbi5vcmllbnRhdGlvbjsKKyAgICAgICAgbVNlcnZpY2UubVBvbGljeS5nZXRTdGFibGVJbnNldHNMdyhyb3RhdGlvbiwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0LCBvdXRCb3VuZHMpOworICAgICAgICBmaW5hbCBEaXZpZGVyU25hcEFsZ29yaXRobSBhbGdvcml0aG0gPSBuZXcgRGl2aWRlclNuYXBBbGdvcml0aG0oCisgICAgICAgICAgICAgICAgbVNlcnZpY2UubUNvbnRleHQuZ2V0UmVzb3VyY2VzKCksCisgICAgICAgICAgICAgICAgMCAvKiBtaW5GbGluZ1ZlbG9jaXR5UHhQZXJTZWNvbmQgKi8sIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCwKKyAgICAgICAgICAgICAgICBkaXZpZGVyU2l6ZSwgb3JpZW50YXRpb24gPT0gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9QT1JUUkFJVCwgb3V0Qm91bmRzKTsKKyAgICAgICAgZmluYWwgU25hcFRhcmdldCB0YXJnZXQgPSBhbGdvcml0aG0uY2FsY3VsYXRlTm9uRGlzbWlzc2luZ1NuYXBUYXJnZXQoZGl2aWRlclBvc2l0aW9uKTsKKworICAgICAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgYm91bmRzIGJhc2VkIG9uIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGFyZ2V0LgorICAgICAgICBEb2NrZWREaXZpZGVyVXRpbHMuY2FsY3VsYXRlQm91bmRzRm9yUG9zaXRpb24odGFyZ2V0LnBvc2l0aW9uLCBkb2NrU2lkZSwKKyAgICAgICAgICAgICAgICBvdXRCb3VuZHMsIGRpc3BsYXlJbmZvLmxvZ2ljYWxXaWR0aCwgZGlzcGxheUluZm8ubG9naWNhbEhlaWdodCwKKyAgICAgICAgICAgICAgICBkaXZpZGVyU2l6ZSk7CisgICAgfQorCiAgICAgYm9vbGVhbiBpc0FuaW1hdGluZygpIHsKICAgICAgICAgZm9yIChpbnQgdGFza05keCA9IG1UYXNrcy5zaXplKCkgLSAxOyB0YXNrTmR4ID49IDA7IC0tdGFza05keCkgewogICAgICAgICAgICAgZmluYWwgQXJyYXlMaXN0PEFwcFdpbmRvd1Rva2VuPiBhY3Rpdml0aWVzID0gbVRhc2tzLmdldCh0YXNrTmR4KS5tQXBwVG9rZW5zOwpAQCAtMjg5LDYgKzM2NSwxMCBAQAogICAgICAgICAgICAgICAgICJwb3NpdGlvblRhc2s6IHRhc2s9IiArIHRhc2sgKyAiIHBvc2l0aW9uPSIgKyBwb3NpdGlvbik7CiAgICAgICAgIG1UYXNrcy5hZGQocG9zaXRpb24sIHRhc2spOwogCisgICAgICAgIC8vIElmIHdlIGFyZSBtb3ZpbmcgdGhlIHRhc2sgYWNyb3NzIHN0YWNrcywgdGhlIHNjcm9sbCBpcyBubyBsb25nZXIgdmFsaWQuCisgICAgICAgIGlmICh0YXNrLm1TdGFjayAhPSB0aGlzKSB7CisgICAgICAgICAgICB0YXNrLnJlc2V0U2Nyb2xsTG9ja2VkKCk7CisgICAgICAgIH0KICAgICAgICAgdGFzay5tU3RhY2sgPSB0aGlzOwogICAgICAgICB0YXNrLnVwZGF0ZURpc3BsYXlJbmZvKG1EaXNwbGF5Q29udGVudCk7CiAgICAgICAgIGJvb2xlYW4gdG9Ub3AgPSBwb3NpdGlvbiA9PSBtVGFza3Muc2l6ZSgpIC0gMTsKQEAgLTYwMCwxNiArNjgwLDE1IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZHVtcChTdHJpbmcgcHJlZml4LCBQcmludFdyaXRlciBwdykgewotICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibVN0YWNrSWQ9Iik7IHB3LnByaW50bG4obVN0YWNrSWQpOwotICAgICAgICBwdy5wcmludChwcmVmaXgpOyBwdy5wcmludCgibURlZmVyRGV0YWNoPSIpOyBwdy5wcmludGxuKG1EZWZlckRldGFjaCk7Ci0gICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJtRnVsbHNjcmVlbj0iKTsgcHcucHJpbnRsbihtRnVsbHNjcmVlbik7Ci0gICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJtQm91bmRzPSIpOyBwdy5wcmludGxuKG1Cb3VuZHMudG9TaG9ydFN0cmluZygpKTsKLSAgICAgICAgZm9yIChpbnQgdGFza05keCA9IDA7IHRhc2tOZHggPCBtVGFza3Muc2l6ZSgpOyArK3Rhc2tOZHgpIHsKLSAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7Ci0gICAgICAgICAgICBtVGFza3MuZ2V0KHRhc2tOZHgpLnByaW50VG8ocHJlZml4ICsgIiAiLCBwdyk7CisgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIm1TdGFja0lkPSIgKyBtU3RhY2tJZCk7CisgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIm1EZWZlckRldGFjaD0iICsgbURlZmVyRGV0YWNoKTsKKyAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAibUZ1bGxzY3JlZW49IiArIG1GdWxsc2NyZWVuKTsKKyAgICAgICAgcHcucHJpbnRsbihwcmVmaXggKyAibUJvdW5kcz0iICsgbUJvdW5kcy50b1Nob3J0U3RyaW5nKCkpOworICAgICAgICBmb3IgKGludCB0YXNrTmR4ID0gbVRhc2tzLnNpemUoKSAtIDE7IHRhc2tOZHggPj0gMDsgdGFza05keC0tKSB7CisgICAgICAgICAgICBtVGFza3MuZ2V0KHRhc2tOZHgpLmR1bXAocHJlZml4ICsgIiAgIiwgcHcpOwogICAgICAgICB9CiAgICAgICAgIGlmIChtQW5pbWF0aW9uQmFja2dyb3VuZFN1cmZhY2UuaXNEaW1taW5nKCkpIHsKLSAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50bG4oIm1XaW5kb3dBbmltYXRpb25CYWNrZ3JvdW5kU3VyZmFjZToiKTsKKyAgICAgICAgICAgIHB3LnByaW50bG4ocHJlZml4ICsgIm1XaW5kb3dBbmltYXRpb25CYWNrZ3JvdW5kU3VyZmFjZToiKTsKICAgICAgICAgICAgIG1BbmltYXRpb25CYWNrZ3JvdW5kU3VyZmFjZS5wcmludFRvKHByZWZpeCArICIgICIsIHB3KTsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1FeGl0aW5nQXBwVG9rZW5zLmlzRW1wdHkoKSkgewpAQCAtNjY0LDYgKzc0MywxMCBAQAogICAgICAqIGluZm9ybWF0aW9uIHdoaWNoIHNpZGUgb2YgdGhlIHNjcmVlbiB3YXMgdGhlIGRvY2sgYW5jaG9yZWQuCiAgICAgICovCiAgICAgaW50IGdldERvY2tTaWRlKCkgeworICAgICAgICByZXR1cm4gZ2V0RG9ja1NpZGUobUJvdW5kcyk7CisgICAgfQorCisgICAgaW50IGdldERvY2tTaWRlKFJlY3QgYm91bmRzKSB7CiAgICAgICAgIGlmIChtU3RhY2tJZCAhPSBET0NLRURfU1RBQ0tfSUQgJiYgIVN0YWNrSWQuaXNSZXNpemVhYmxlQnlEb2NrZWRTdGFjayhtU3RhY2tJZCkpIHsKICAgICAgICAgICAgIHJldHVybiBET0NLRURfSU5WQUxJRDsKICAgICAgICAgfQpAQCAtNjc0LDE0ICs3NTcsMTQgQEAKICAgICAgICAgZmluYWwgaW50IG9yaWVudGF0aW9uID0gbVNlcnZpY2UubUN1ckNvbmZpZ3VyYXRpb24ub3JpZW50YXRpb247CiAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1BPUlRSQUlUKSB7CiAgICAgICAgICAgICAvLyBQb3J0cmFpdCBtb2RlLCBkb2NrZWQgZWl0aGVyIGF0IHRoZSB0b3Agb3IgdGhlIGJvdHRvbS4KLSAgICAgICAgICAgIGlmIChtQm91bmRzLnRvcCAtIG1UbXBSZWN0LnRvcCA8IG1UbXBSZWN0LmJvdHRvbSAtIG1Cb3VuZHMuYm90dG9tKSB7CisgICAgICAgICAgICBpZiAoYm91bmRzLnRvcCAtIG1UbXBSZWN0LnRvcCA8IG1UbXBSZWN0LmJvdHRvbSAtIGJvdW5kcy5ib3R0b20pIHsKICAgICAgICAgICAgICAgICByZXR1cm4gRE9DS0VEX1RPUDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIERPQ0tFRF9CT1RUT007CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob3JpZW50YXRpb24gPT0gQ29uZmlndXJhdGlvbi5PUklFTlRBVElPTl9MQU5EU0NBUEUpIHsKICAgICAgICAgICAgIC8vIExhbmRzY2FwZSBtb2RlLCBkb2NrZWQgZWl0aGVyIG9uIHRoZSBsZWZ0IG9yIG9uIHRoZSByaWdodC4KLSAgICAgICAgICAgIGlmIChtQm91bmRzLmxlZnQgLSBtVG1wUmVjdC5sZWZ0IDwgbVRtcFJlY3QucmlnaHQgLSBtQm91bmRzLnJpZ2h0KSB7CisgICAgICAgICAgICBpZiAoYm91bmRzLmxlZnQgLSBtVG1wUmVjdC5sZWZ0IDwgbVRtcFJlY3QucmlnaHQgLSBib3VuZHMucmlnaHQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gRE9DS0VEX0xFRlQ7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldHVybiBET0NLRURfUklHSFQ7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tUYXBQb2ludGVyRXZlbnRMaXN0ZW5lci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9UYXNrVGFwUG9pbnRlckV2ZW50TGlzdGVuZXIuamF2YQppbmRleCBhZjEwOWQ0Li4zZGM1MTJmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1Rhc2tUYXBQb2ludGVyRXZlbnRMaXN0ZW5lci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vVGFza1RhcFBvaW50ZXJFdmVudExpc3RlbmVyLmphdmEKQEAgLTIwLDYgKzIwLDcgQEAKIGltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlZ2lvbjsKIGltcG9ydCBhbmRyb2lkLnZpZXcuRGlzcGxheUluZm87CiBpbXBvcnQgYW5kcm9pZC52aWV3Lkdlc3R1cmVEZXRlY3RvcjsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuSW5wdXREZXZpY2U7CiBpbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwogaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyUG9saWN5LlBvaW50ZXJFdmVudExpc3RlbmVyOwogCkBAIC0zMywxMyArMzQsNyBAQAogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuUG9pbnRlckljb24uU1RZTEVfVE9QX1JJR0hUX0RJQUdPTkFMX0RPVUJMRV9BUlJPVzsKIAogcHVibGljIGNsYXNzIFRhc2tUYXBQb2ludGVyRXZlbnRMaXN0ZW5lciBpbXBsZW1lbnRzIFBvaW50ZXJFdmVudExpc3RlbmVyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEFQX1RJTUVPVVRfTVNFQyA9IDMwMDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBUQVBfTU9USU9OX1NMT1BfSU5DSEVTID0gMC4xMjVmOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgbU1vdGlvblNsb3A7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtRG93blg7Ci0gICAgcHJpdmF0ZSBmbG9hdCBtRG93blk7Ci0gICAgcHJpdmF0ZSBpbnQgbVBvaW50ZXJJZDsKICAgICBmaW5hbCBwcml2YXRlIFJlZ2lvbiBtVG91Y2hFeGNsdWRlUmVnaW9uID0gbmV3IFJlZ2lvbigpOwogICAgIHByaXZhdGUgZmluYWwgV2luZG93TWFuYWdlclNlcnZpY2UgbVNlcnZpY2U7CiAgICAgcHJpdmF0ZSBmaW5hbCBEaXNwbGF5Q29udGVudCBtRGlzcGxheUNvbnRlbnQ7CkBAIC01NCw4ICs0OSw2IEBACiAgICAgICAgICAgICBEaXNwbGF5Q29udGVudCBkaXNwbGF5Q29udGVudCkgewogICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CiAgICAgICAgIG1EaXNwbGF5Q29udGVudCA9IGRpc3BsYXlDb250ZW50OwotICAgICAgICBEaXNwbGF5SW5mbyBpbmZvID0gZGlzcGxheUNvbnRlbnQuZ2V0RGlzcGxheUluZm8oKTsKLSAgICAgICAgbU1vdGlvblNsb3AgPSAoaW50KShpbmZvLmxvZ2ljYWxEZW5zaXR5RHBpICogVEFQX01PVElPTl9TTE9QX0lOQ0hFUyk7CiAgICAgfQogCiAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgb2JqZWN0LCBub3RlIHRoaXMgbXVzdCBiZSBkb25lIG91dHNpZGUgV2luZG93TWFuYWdlclNlcnZpY2UKQEAgLTczLDMxICs2NiwxOSBAQAogICAgICAgICBmaW5hbCBpbnQgYWN0aW9uID0gbW90aW9uRXZlbnQuZ2V0QWN0aW9uKCk7CiAgICAgICAgIHN3aXRjaCAoYWN0aW9uICYgTW90aW9uRXZlbnQuQUNUSU9OX01BU0spIHsKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0RPV046IHsKLSAgICAgICAgICAgICAgICBtUG9pbnRlcklkID0gbW90aW9uRXZlbnQuZ2V0UG9pbnRlcklkKDApOwotICAgICAgICAgICAgICAgIG1Eb3duWCA9IG1vdGlvbkV2ZW50LmdldFgoKTsKLSAgICAgICAgICAgICAgICBtRG93blkgPSBtb3Rpb25FdmVudC5nZXRZKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHggPSAoaW50KSBtb3Rpb25FdmVudC5nZXRYKCk7CisgICAgICAgICAgICAgICAgZmluYWwgaW50IHkgPSAoaW50KSBtb3Rpb25FdmVudC5nZXRZKCk7CiAKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeCA9IChpbnQpIG1Eb3duWDsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgeSA9IChpbnQpIG1Eb3duWTsKICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtVG91Y2hFeGNsdWRlUmVnaW9uLmNvbnRhaW5zKHgsIHkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5tSC5vYnRhaW5NZXNzYWdlKEguVEFQX0RPV05fT1VUU0lERV9UQVNLLCB4LCB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGlzcGxheUNvbnRlbnQpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbVNlcnZpY2UubUgub2J0YWluTWVzc2FnZShILlRBUF9PVVRTSURFX1RBU0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIG1EaXNwbGF5Q29udGVudCkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX01PVkU6IHsKLSAgICAgICAgICAgICAgICBpZiAobVBvaW50ZXJJZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IG1vdGlvbkV2ZW50LmZpbmRQb2ludGVySW5kZXgobVBvaW50ZXJJZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgobW90aW9uRXZlbnQuZ2V0RXZlbnRUaW1lKCkgLSBtb3Rpb25FdmVudC5nZXREb3duVGltZSgpKSA+IFRBUF9USU1FT1VUX01TRUMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBpbmRleCA8IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBNYXRoLmFicyhtb3Rpb25FdmVudC5nZXRYKGluZGV4KSAtIG1Eb3duWCkgPiBtTW90aW9uU2xvcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE1hdGguYWJzKG1vdGlvbkV2ZW50LmdldFkoaW5kZXgpIC0gbURvd25ZKSA+IG1Nb3Rpb25TbG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtUG9pbnRlcklkID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG1vdGlvbkV2ZW50LmdldFBvaW50ZXJDb3VudCgpICE9IDIpIHsKICAgICAgICAgICAgICAgICAgICAgc3RvcFR3b0ZpbmdlclNjcm9sbCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTEwOCw3ICs4OSw4IEBACiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHggPSAoaW50KSBtb3Rpb25FdmVudC5nZXRYKCk7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IHkgPSAoaW50KSBtb3Rpb25FdmVudC5nZXRZKCk7CiAgICAgICAgICAgICAgICAgZmluYWwgVGFzayB0YXNrID0gbURpc3BsYXlDb250ZW50LmZpbmRUYXNrRm9yQ29udHJvbFBvaW50KHgsIHkpOwotICAgICAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBJbnB1dERldmljZSBpbnB1dERldmljZSA9IG1vdGlvbkV2ZW50LmdldERldmljZSgpOworICAgICAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwgfHwgaW5wdXREZXZpY2UgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBtUG9pbnRlckljb25TaGFwZSA9IFNUWUxFX05PVF9TUEVDSUZJRUQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTEzMCw3ICsxMTIsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChtUG9pbnRlckljb25TaGFwZSAhPSBpY29uU2hhcGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1Qb2ludGVySWNvblNoYXBlID0gaWNvblNoYXBlOwotICAgICAgICAgICAgICAgICAgICAgICAgbW90aW9uRXZlbnQuZ2V0RGV2aWNlKCkuc2V0UG9pbnRlclNoYXBlKGljb25TaGFwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dERldmljZS5zZXRQb2ludGVyU2hhcGUoaWNvblNoYXBlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1Qb2ludGVySWNvblNoYXBlID0gU1RZTEVfTk9UX1NQRUNJRklFRDsKQEAgLTEzOSwyOSArMTIxLDE0IEBACiAKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0hPVkVSX0VYSVQ6CiAgICAgICAgICAgICAgICAgbVBvaW50ZXJJY29uU2hhcGUgPSBTVFlMRV9OT1RfU1BFQ0lGSUVEOwotICAgICAgICAgICAgICAgIG1vdGlvbkV2ZW50LmdldERldmljZSgpLnNldFBvaW50ZXJTaGFwZShTVFlMRV9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBJbnB1dERldmljZSBpbnB1dERldmljZSA9IG1vdGlvbkV2ZW50LmdldERldmljZSgpOworICAgICAgICAgICAgICAgIGlmIChpbnB1dERldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlucHV0RGV2aWNlLnNldFBvaW50ZXJTaGFwZShTVFlMRV9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOgogICAgICAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9VUDogewotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IChhY3Rpb24gJiBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9JTkRFWF9NQVNLKQotICAgICAgICAgICAgICAgICAgICAgICAgPj4gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgaW5kZXggb2YgdGhlIHBvaW50ZXIgdGhhdCBsZWZ0IHRoZSB0b3VjaCBzZW5zb3IKLSAgICAgICAgICAgICAgICBpZiAobVBvaW50ZXJJZCA9PSBtb3Rpb25FdmVudC5nZXRQb2ludGVySWQoaW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpbmFsIGludCB4ID0gKGludCltb3Rpb25FdmVudC5nZXRYKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHkgPSAoaW50KW1vdGlvbkV2ZW50LmdldFkoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtb3Rpb25FdmVudC5nZXRFdmVudFRpbWUoKSAtIG1vdGlvbkV2ZW50LmdldERvd25UaW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgVEFQX1RJTUVPVVRfTVNFQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBNYXRoLmFicyh4IC0gbURvd25YKSA8IG1Nb3Rpb25TbG9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIE1hdGguYWJzKHkgLSBtRG93blkpIDwgbU1vdGlvblNsb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1Ub3VjaEV4Y2x1ZGVSZWdpb24uY29udGFpbnMoeCwgeSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5tSC5vYnRhaW5NZXNzYWdlKEguVEFQX09VVFNJREVfVEFTSywgeCwgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EaXNwbGF5Q29udGVudCkuc2VuZFRvVGFyZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbVBvaW50ZXJJZCA9IC0xOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdG9wVHdvRmluZ2VyU2Nyb2xsKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dhbGxwYXBlckNvbnRyb2xsZXIuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2FsbHBhcGVyQ29udHJvbGxlci5qYXZhCmluZGV4IDNkYjlhZTAuLjJlNDI0ZDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2FsbHBhcGVyQ29udHJvbGxlci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2FsbHBhcGVyQ29udHJvbGxlci5qYXZhCkBAIC01MDYsNyArNTA2LDcgQEAKICAgICAgICAgICAgICAgICBpbkZyZWVmb3JtU3BhY2UgPSBzdGFjayAhPSBudWxsICYmIHN0YWNrLm1TdGFja0lkID09IEZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmVwbGFjaW5nID0gcmVwbGFjaW5nIHx8ICh3Lm1BcHBUb2tlbiAhPSBudWxsICYmIHcubUFwcFRva2VuLm1XaWxsUmVwbGFjZVdpbmRvdyk7CisgICAgICAgICAgICByZXBsYWNpbmcgPSByZXBsYWNpbmcgfHwgdy5tV2lsbFJlcGxhY2VXaW5kb3c7CiAKICAgICAgICAgICAgIC8vIElmIHRoZSBhcHAgaXMgZXhlY3V0aW5nIGFuIGFuaW1hdGlvbiBiZWNhdXNlIHRoZSBrZXlndWFyZCBpcyBnb2luZyBhd2F5LAogICAgICAgICAgICAgLy8ga2VlcCB0aGUgd2FsbHBhcGVyIGR1cmluZyB0aGUgYW5pbWF0aW9uIHNvIGl0IGRvZXNuJ3QgZmxpY2tlciBvdXQuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0FuaW1hdG9yLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0FuaW1hdG9yLmphdmEKaW5kZXggYTY1MjNhNC4uNjJkNGYzNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dBbmltYXRvci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93QW5pbWF0b3IuamF2YQpAQCAtNzgyLDcgKzc4Miw3IEBACiAgICAgICAgIFN1cmZhY2VDb250cm9sLm9wZW5UcmFuc2FjdGlvbigpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IG1TZXJ2aWNlLm1EaXNwbGF5Q29udGVudHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBEaXNwbGF5Q29udGVudCBkaXNwbGF5ID0gbVNlcnZpY2UubURpc3BsYXlDb250ZW50cy5nZXQoaSk7CisgICAgICAgICAgICAgICAgRGlzcGxheUNvbnRlbnQgZGlzcGxheSA9IG1TZXJ2aWNlLm1EaXNwbGF5Q29udGVudHMudmFsdWVBdChpKTsKICAgICAgICAgICAgICAgICBmaW5hbCBXaW5kb3dMaXN0IHdpbmRvd3MgPSBtU2VydmljZS5nZXRXaW5kb3dMaXN0TG9ja2VkKGRpc3BsYXkuZ2V0RGlzcGxheUlkKCkpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSB3aW5kb3dzLnNpemUoKSAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MuZ2V0KGopLm1heWJlUmVtb3ZlUmVwbGFjZWRXaW5kb3coKTsKQEAgLTkxOCwxMCArOTE4LDYgQEAKICAgICB9CiAKICAgICB2b2lkIHJlcXVlc3RSZW1vdmFsT2ZSZXBsYWNlZFdpbmRvd3MoV2luZG93U3RhdGUgd2luKSB7Ci0gICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHRva2VuID0gd2luLm1BcHBUb2tlbjsKLSAgICAgICAgaWYgKHRva2VuICE9IG51bGwgJiYgdG9rZW4ubVdpbGxSZXBsYWNlV2luZG93ICYmIHRva2VuLm1SZXBsYWNpbmdXaW5kb3cgPT0gd2luKSB7Ci0gICAgICAgICAgICB0b2tlbi5tSGFzUmVwbGFjZWRXaW5kb3cgPSB0cnVlOwotICAgICAgICB9CiAgICAgICAgIG1SZW1vdmVSZXBsYWNlZFdpbmRvd3MgPSB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dMYXllcnNDb250cm9sbGVyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd0xheWVyc0NvbnRyb2xsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2YyNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dMYXllcnNDb250cm9sbGVyLmphdmEKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci53bTsKKworaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkOworaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOworaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OworCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9ET0NLX0RJVklERVI7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfTEFZRVJTOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlRBR19XTTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJTZXJ2aWNlLldJTkRPV19MQVlFUl9NVUxUSVBMSUVSOworCisvKioKKyAqIENvbnRyb2xsZXIgZm9yIGFzc2lnbmluZyBsYXllcnMgdG8gd2luZG93cyBvbiB0aGUgZGlzcGxheS4KKyAqCisgKiBUaGlzIGNsYXNzIGVuY2Fwc3VsYXRlcyBnZW5lcmFsIGFsZ29yaXRobSBmb3IgYXNzaWduaW5nIGxheWVycyBhbmQgc3BlY2lhbCBydWxlcyB0aGF0IHdlIG5lZWQgdG8KKyAqIGFwcGx5IG9uIHRvcC4gVGhlIGdlbmVyYWwgYWxnb3JpdGhtIGdvZXMgdGhyb3VnaCB3aW5kb3dzIGZyb20gYm90dG9tIHRvIHRoZSB0b3AgYW5kIHRoZSBoaWdoZXIKKyAqIHRoZSB3aW5kb3cgaXMsIHRoZSBoaWdoZXIgbGF5ZXIgaXMgYXNzaWduZWQuIFRoZSBmaW5hbCBsYXllciBpcyBlcXVhbCB0byBiYXNlIGxheWVyICsKKyAqIGFkanVzdG1lbnQgZnJvbSB0aGUgb3JkZXIuIFRoaXMgbWVhbnMgdGhhdCB0aGUgd2luZG93IGxpc3QgaXMgYXNzdW1lZCB0byBiZSBvcmRlcmVkIHJvdWdobHkgYnkKKyAqIHRoZSBiYXNlIGxheWVyICh0aGVyZSBhcmUgZXhjZXB0aW9ucywgZS5nLiBkdWUgdG8ga2V5Z3VhcmQgYW5kIHdhbGxwYXBlciBhbmQgdGhleSBuZWVkIHRvIGJlCisgKiBoYW5kbGVkIHdpdGggY2FyZSwgYmVjYXVzZSB0aGV5IGJyZWFrIHRoZSBhbGdvcml0aG0pLgorICoKKyAqIE9uIHRvcCBvZiB0aGUgZ2VuZXJhbCBhbGdvcml0aG0gd2UgYWRkIHNwZWNpYWwgcnVsZXMsIHRoYXQgZ292ZXJuIHN1Y2ggYW1hemluZyB0aGluZ3MgYXM6CisgKiA8bGk+SU1FICh3aGljaCBoYXMgaGlnaGVyIGJhc2UgbGF5ZXIsIGJ1dCB3aWxsIGJlIHBvc2l0aW9uZWQgYWJvdmUgYXBwbGljYXRpb24gd2luZG93cyk8L2xpPgorICogPGxpPmRvY2tlZC9waW5uZWQgd2luZG93cyAodGhhdCBuZWVkIHRvIGJlIGxpZnRlZCBhYm92ZSBvdGhlciBhcHBsaWNhdGlvbiB3aW5kb3dzLCBpbmNsdWRpbmcKKyAqIGFuaW1hdGlvbnMpCisgKiA8bGk+ZG9jayBkaXZpZGVyICh3aGljaCBuZWVkcyB0byBsaXZlIGFib3ZlIGFwcGxpY2F0aW9ucywgYnV0IGJlbG93IElNRSk8L2xpPgorICogPGxpPnJlcGxhY2VkIHdpbmRvd3MsIHdoaWNoIG5lZWQgdG8gbGl2ZSBhYm92ZSB0aGVpciBub3JtYWwgbGV2ZWwsIGJlY2F1c2UgdGhleSBhbnRpY2lwYXRlCisgKiBhbiBhbmltYXRpb248L2xpPi4KKyAqLworcHVibGljIGNsYXNzIFdpbmRvd0xheWVyc0NvbnRyb2xsZXIgeworICAgIHByaXZhdGUgZmluYWwgV2luZG93TWFuYWdlclNlcnZpY2UgbVNlcnZpY2U7CisKKyAgICBwcml2YXRlIGludCBtSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50OworCisgICAgcHVibGljIFdpbmRvd0xheWVyc0NvbnRyb2xsZXIoV2luZG93TWFuYWdlclNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICBtU2VydmljZSA9IHNlcnZpY2U7CisgICAgfQorCisgICAgcHJpdmF0ZSBpbnQgbUhpZ2hlc3RBcHBsaWNhdGlvbkxheWVyID0gMDsKKyAgICBwcml2YXRlIFdpbmRvd1N0YXRlIG1QaW5uZWRXaW5kb3cgPSBudWxsOworICAgIHByaXZhdGUgV2luZG93U3RhdGUgbURvY2tlZFdpbmRvdyA9IG51bGw7CisgICAgcHJpdmF0ZSBXaW5kb3dTdGF0ZSBtRG9ja0RpdmlkZXIgPSBudWxsOworICAgIHByaXZhdGUgV2luZG93U3RhdGUgbVJlcGxhY2luZ1dpbmRvdyA9IG51bGw7CisKKyAgICBmaW5hbCB2b2lkIGFzc2lnbkxheWVyc0xvY2tlZChXaW5kb3dMaXN0IHdpbmRvd3MpIHsKKyAgICAgICAgaWYgKERFQlVHX0xBWUVSUykgU2xvZy52KFRBR19XTSwgIkFzc2lnbmluZyBsYXllcnMgYmFzZWQgb24gd2luZG93cz0iICsgd2luZG93cywKKyAgICAgICAgICAgICAgICBuZXcgUnVudGltZUV4Y2VwdGlvbigiaGVyZSIpLmZpbGxJblN0YWNrVHJhY2UoKSk7CisKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgaW50IGN1ckJhc2VMYXllciA9IDA7CisgICAgICAgIGludCBjdXJMYXllciA9IDA7CisgICAgICAgIGJvb2xlYW4gYW55TGF5ZXJDaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoaW50IGkgPSAwLCB3aW5kb3dDb3VudCA9IHdpbmRvd3Muc2l6ZSgpOyBpIDwgd2luZG93Q291bnQ7IGkrKykgeworICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgdyA9IHdpbmRvd3MuZ2V0KGkpOworICAgICAgICAgICAgYm9vbGVhbiBsYXllckNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaW50IG9sZExheWVyID0gdy5tTGF5ZXI7CisgICAgICAgICAgICBpZiAody5tQmFzZUxheWVyID09IGN1ckJhc2VMYXllciB8fCB3Lm1Jc0ltV2luZG93IHx8IChpID4gMCAmJiB3Lm1Jc1dhbGxwYXBlcikpIHsKKyAgICAgICAgICAgICAgICBjdXJMYXllciArPSBXSU5ET1dfTEFZRVJfTVVMVElQTElFUjsKKyAgICAgICAgICAgICAgICB3Lm1MYXllciA9IGN1ckxheWVyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjdXJCYXNlTGF5ZXIgPSBjdXJMYXllciA9IHcubUJhc2VMYXllcjsKKyAgICAgICAgICAgICAgICB3Lm1MYXllciA9IGN1ckxheWVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHcubUxheWVyICE9IG9sZExheWVyKSB7CisgICAgICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbnlMYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZUFuaW1hdG9yIHdpbkFuaW1hdG9yID0gdy5tV2luQW5pbWF0b3I7CisgICAgICAgICAgICBvbGRMYXllciA9IHdpbkFuaW1hdG9yLm1BbmltTGF5ZXI7CisgICAgICAgICAgICB3aW5BbmltYXRvci5tQW5pbUxheWVyID0gdy5tTGF5ZXIgKyB3LmdldEFuaW1MYXllckFkanVzdG1lbnQoKSArCisgICAgICAgICAgICAgICAgICAgIGdldFNwZWNpYWxXaW5kb3dBbmltTGF5ZXJBZGp1c3RtZW50KHcpOworICAgICAgICAgICAgaWYgKHdpbkFuaW1hdG9yLm1BbmltTGF5ZXIgIT0gb2xkTGF5ZXIpIHsKKyAgICAgICAgICAgICAgICBsYXllckNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGFueUxheWVyQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh3Lm1BcHBUb2tlbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbUhpZ2hlc3RBcHBsaWNhdGlvbkxheWVyID0gTWF0aC5tYXgobUhpZ2hlc3RBcHBsaWNhdGlvbkxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgd2luQW5pbWF0b3IubUFuaW1MYXllcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb2xsZWN0U3BlY2lhbFdpbmRvd3Modyk7CisKKyAgICAgICAgICAgIGlmIChsYXllckNoYW5nZWQpIHsKKyAgICAgICAgICAgICAgICB3LnNjaGVkdWxlQW5pbWF0aW9uSWZEaW1taW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhZGp1c3RTcGVjaWFsV2luZG93cygpOworCisgICAgICAgIC8vVE9ETyAobXVsdGlkaXNwbGF5KTogTWFnbmlmaWNhdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgdGhlIGRlZmF1bHQgZGlzcGxheS4KKyAgICAgICAgaWYgKG1TZXJ2aWNlLm1BY2Nlc3NpYmlsaXR5Q29udHJvbGxlciAhPSBudWxsICYmIGFueUxheWVyQ2hhbmdlZAorICAgICAgICAgICAgICAgICYmIHdpbmRvd3MuZ2V0KHdpbmRvd3Muc2l6ZSgpIC0gMSkuZ2V0RGlzcGxheUlkKCkgPT0gRGlzcGxheS5ERUZBVUxUX0RJU1BMQVkpIHsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm1BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5vbldpbmRvd0xheWVyc0NoYW5nZWRMb2NrZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChERUJVR19MQVlFUlMpIGxvZ0RlYnVnTGF5ZXJzKHdpbmRvd3MpOworICAgIH0KKworICAgIHZvaWQgc2V0SW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KGludCBhZGopIHsKKyAgICAgICAgaWYgKERFQlVHX0xBWUVSUykgU2xvZy52KFRBR19XTSwgIlNldHRpbmcgaW0gbGF5ZXIgYWRqIHRvICIgKyBhZGopOworICAgICAgICBtSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50ID0gYWRqOworICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSBpbXcgPSBtU2VydmljZS5tSW5wdXRNZXRob2RXaW5kb3c7CisgICAgICAgIGlmIChpbXcgIT0gbnVsbCkgeworICAgICAgICAgICAgaW13Lm1XaW5BbmltYXRvci5tQW5pbUxheWVyID0gaW13Lm1MYXllciArIGFkajsKKyAgICAgICAgICAgIGlmIChERUJVR19MQVlFUlMpIFNsb2cudihUQUdfV00sICJJTSB3aW4gIiArIGltdworICAgICAgICAgICAgICAgICAgICArICIgYW5pbSBsYXllcjogIiArIGltdy5tV2luQW5pbWF0b3IubUFuaW1MYXllcik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gaW13Lm1DaGlsZFdpbmRvd3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSBjaGlsZFdpbmRvdyA9IGltdy5tQ2hpbGRXaW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgICAgICBjaGlsZFdpbmRvdy5tV2luQW5pbWF0b3IubUFuaW1MYXllciA9IGNoaWxkV2luZG93Lm1MYXllciArIGFkajsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZRVJTKSBTbG9nLnYoVEFHX1dNLCAiSU0gd2luICIgKyBjaGlsZFdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFuaW0gbGF5ZXI6ICIgKyBjaGlsZFdpbmRvdy5tV2luQW5pbWF0b3IubUFuaW1MYXllcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IG1TZXJ2aWNlLm1JbnB1dE1ldGhvZERpYWxvZ3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIGRpYWxvZyA9IG1TZXJ2aWNlLm1JbnB1dE1ldGhvZERpYWxvZ3MuZ2V0KGkpOworICAgICAgICAgICAgZGlhbG9nLm1XaW5BbmltYXRvci5tQW5pbUxheWVyID0gZGlhbG9nLm1MYXllciArIGFkajsKKyAgICAgICAgICAgIGlmIChERUJVR19MQVlFUlMpIFNsb2cudihUQUdfV00sICJJTSB3aW4gIiArIGltdworICAgICAgICAgICAgICAgICAgICArICIgYW5pbSBsYXllcjogIiArIGRpYWxvZy5tV2luQW5pbWF0b3IubUFuaW1MYXllcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgZ2V0U3BlY2lhbFdpbmRvd0FuaW1MYXllckFkanVzdG1lbnQoV2luZG93U3RhdGUgd2luKSB7CisgICAgICAgIGlmICh3aW4ubUlzSW1XaW5kb3cpIHsKKyAgICAgICAgICAgIHJldHVybiBtSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50OworICAgICAgICB9IGVsc2UgaWYgKHdpbi5tSXNXYWxscGFwZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBtU2VydmljZS5tV2FsbHBhcGVyQ29udHJvbGxlckxvY2tlZC5nZXRBbmltTGF5ZXJBZGp1c3RtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHJldHVybiBUaGUgbGF5ZXIgdXNlZCBmb3IgZGltbWluZyB0aGUgYXBwcyB3aGVuIGRpc21pc3NpbmcgZG9ja2VkL2Z1bGxzY3JlZW4gc3RhY2suIEp1c3QKKyAgICAgKiAgICAgICAgIGFib3ZlIGFsbCBhcHBsaWNhdGlvbiBzdXJmYWNlcy4KKyAgICAgKi8KKyAgICBpbnQgZ2V0UmVzaXplRGltTGF5ZXIoKSB7CisgICAgICAgIHJldHVybiBtRG9ja0RpdmlkZXIubUxheWVyIC0gMTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgbG9nRGVidWdMYXllcnMoV2luZG93TGlzdCB3aW5kb3dzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwLCBuID0gd2luZG93cy5zaXplKCk7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHcgPSB3aW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlQW5pbWF0b3Igd2luQW5pbWF0b3IgPSB3Lm1XaW5BbmltYXRvcjsKKyAgICAgICAgICAgIFNsb2cudihUQUdfV00sICJBc3NpZ24gbGF5ZXIgIiArIHcgKyAiOiAiICsgIm1CYXNlPSIgKyB3Lm1CYXNlTGF5ZXIKKyAgICAgICAgICAgICAgICAgICAgKyAiIG1MYXllcj0iICsgdy5tTGF5ZXIgKyAody5tQXBwVG9rZW4gPT0gbnVsbAorICAgICAgICAgICAgICAgICAgICA/ICIiIDogIiBtQXBwTGF5ZXI9IiArIHcubUFwcFRva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50KQorICAgICAgICAgICAgICAgICAgICArICIgPW1BbmltTGF5ZXI9IiArIHdpbkFuaW1hdG9yLm1BbmltTGF5ZXIpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNsZWFyKCkgeworICAgICAgICBtSGlnaGVzdEFwcGxpY2F0aW9uTGF5ZXIgPSAwOworICAgICAgICBtUGlubmVkV2luZG93ID0gbnVsbDsKKyAgICAgICAgbURvY2tlZFdpbmRvdyA9IG51bGw7CisgICAgICAgIG1Eb2NrRGl2aWRlciA9IG51bGw7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNvbGxlY3RTcGVjaWFsV2luZG93cyhXaW5kb3dTdGF0ZSB3KSB7CisgICAgICAgIGlmICh3Lm1BdHRycy50eXBlID09IFRZUEVfRE9DS19ESVZJREVSKSB7CisgICAgICAgICAgICBtRG9ja0RpdmlkZXIgPSB3OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmluYWwgVGFza1N0YWNrIHN0YWNrID0gdy5nZXRTdGFjaygpOworICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RhY2subVN0YWNrSWQgPT0gU3RhY2tJZC5QSU5ORURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgICAgICBtUGlubmVkV2luZG93ID0gdzsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2subVN0YWNrSWQgPT0gU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgICAgICBtRG9ja2VkV2luZG93ID0gdzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBhZGp1c3RTcGVjaWFsV2luZG93cygpIHsKKyAgICAgICAgaW50IGxheWVyID0gbUhpZ2hlc3RBcHBsaWNhdGlvbkxheWVyICsgMTsKKyAgICAgICAgLy8gRm9yIHBpbm5lZCBhbmQgZG9ja2VkIHN0YWNrIHdpbmRvdywgd2Ugd2FudCB0byBtYWtlIHRoZW0gYWJvdmUgb3RoZXIgd2luZG93cworICAgICAgICAvLyBhbHNvIHdoZW4gdGhlc2Ugd2luZG93cyBhcmUgYW5pbWF0aW5nLgorICAgICAgICBsYXllciA9IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChtRG9ja2VkV2luZG93LCBsYXllcik7CisKKyAgICAgICAgLy8gTGVhdmUgc29tZSBzcGFjZSBoZXJlIHNvIHRoZSBkaW0gbGF5ZXIgd2hpbGUgZGlzbWlzc2luZyBkb2NrZWQvZnVsbHNjcmVlbiBzdGFjayBoYXMgc3BhY2UKKyAgICAgICAgLy8gYmVsb3cgdGhlIGRpdmlkZXIgYnV0IGFib3ZlIHRoZSBhcHAgd2luZG93cy4gSXQgbmVlZHMgdG8gYmUgYmVsb3cgdGhlIGRpdmlkZXIgaW4gYmVjYXVzZQorICAgICAgICAvLyB0aGUgZGl2aWRlciBzb21ldGltZXMgb3ZlcmxhcHMgdGhlIGFwcCB3aW5kb3dzLgorICAgICAgICBsYXllcisrOworICAgICAgICBsYXllciA9IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChtRG9ja0RpdmlkZXIsIGxheWVyKTsKKyAgICAgICAgLy8gV2Uga25vdyB0aGF0IHdlIHdpbGwgYmUgYW5pbWF0aW5nIGEgcmVsYXVuY2hpbmcgd2luZG93IGluIHRoZSBuZWFyIGZ1dHVyZSwKKyAgICAgICAgLy8gd2hpY2ggd2lsbCByZWNlaXZlIGEgei1vcmRlciBpbmNyZWFzZS4gV2Ugd2FudCB0aGUgcmVwbGFjZWQgd2luZG93IHRvCisgICAgICAgIC8vIGltbWVkaWF0ZWx5IHJlY2VpdmUgdGhlIHNhbWUgdHJlYXRtZW50LCBlLmcuIHRvIGJlIGFib3ZlIHRoZSBkb2NrIGRpdmlkZXIuCisgICAgICAgIGxheWVyID0gYXNzaWduQW5kSW5jcmVhc2VMYXllcklmTmVlZGVkKG1SZXBsYWNpbmdXaW5kb3csIGxheWVyKTsKKyAgICAgICAgbGF5ZXIgPSBhc3NpZ25BbmRJbmNyZWFzZUxheWVySWZOZWVkZWQobVBpbm5lZFdpbmRvdywgbGF5ZXIpOworICAgIH0KKworICAgIHByaXZhdGUgaW50IGFzc2lnbkFuZEluY3JlYXNlTGF5ZXJJZk5lZWRlZChXaW5kb3dTdGF0ZSB3aW4sIGludCBsYXllcikgeworICAgICAgICBpZiAod2luICE9IG51bGwpIHsKKyAgICAgICAgICAgIHdpbi5tTGF5ZXIgPSBsYXllcjsKKyAgICAgICAgICAgIHdpbi5tV2luQW5pbWF0b3IubUFuaW1MYXllciA9IGxheWVyOworICAgICAgICAgICAgbGF5ZXIrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbGF5ZXI7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgcykgeworICAgICAgICBpZiAobUlucHV0TWV0aG9kQW5pbUxheWVyQWRqdXN0bWVudCAhPSAwIHx8CisgICAgICAgICAgICAgICAgbVNlcnZpY2UubVdhbGxwYXBlckNvbnRyb2xsZXJMb2NrZWQuZ2V0QW5pbUxheWVyQWRqdXN0bWVudCgpICE9IDApIHsKKyAgICAgICAgICAgIHB3LnByaW50KCIgIG1JbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQ9Iik7CisgICAgICAgICAgICBwdy5wcmludChtSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KTsKKyAgICAgICAgICAgIHB3LnByaW50KCIgIG1XYWxscGFwZXJBbmltTGF5ZXJBZGp1c3RtZW50PSIpOworICAgICAgICAgICAgcHcucHJpbnRsbihtU2VydmljZS5tV2FsbHBhcGVyQ29udHJvbGxlckxvY2tlZC5nZXRBbmltTGF5ZXJBZGp1c3RtZW50KCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLmphdmEKaW5kZXggYTQ5YmIzMS4uNGMzYTQyMiAxMDA2NDQKLS0tIGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5qYXZhCkBAIC0zNSw4ICszNSw4IEBACiAKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19SRVNJWkUgPSBmYWxzZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FERF9SRU1PVkUgPSBmYWxzZTsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19GT0NVUyA9IGZhbHNlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FERF9SRU1PVkUgPSB0cnVlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0ZPQ1VTID0gdHJ1ZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19GT0NVU19MSUdIVCA9IERFQlVHX0ZPQ1VTIHx8IGZhbHNlOwogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FOSU0gPSBmYWxzZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19LRVlHVUFSRCA9IGZhbHNlOwpAQCAtNTAsOCArNTAsOCBAQAogICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX09SSUVOVEFUSU9OID0gZmFsc2U7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQVBQX09SSUVOVEFUSU9OID0gZmFsc2U7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfQ09ORklHVVJBVElPTiA9IGZhbHNlOwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FQUF9UUkFOU0lUSU9OUyA9IGZhbHNlOwotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1NUQVJUSU5HX1dJTkRPVyA9IGZhbHNlOworICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX0FQUF9UUkFOU0lUSU9OUyA9IHRydWU7CisgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfU1RBUlRJTkdfV0lORE9XID0gdHJ1ZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19XQUxMUEFQRVIgPSBmYWxzZTsKICAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19XQUxMUEFQRVJfTElHSFQgPSBmYWxzZSB8fCBERUJVR19XQUxMUEFQRVI7CiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfRFJBRyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDBjNjA2ZmUuLjdkMTQyZWMgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93TWFuYWdlclNlcnZpY2UuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd01hbmFnZXJTZXJ2aWNlLmphdmEKQEAgLTE2LDc3ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLndtOwogCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5ET0NLRURfU1RBQ0tfQ1JFQVRFX01PREVfVE9QX09SX0xFRlQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkRPQ0tFRF9TVEFDS19JRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyLlN0YWNrSWQuRlJFRUZPUk1fV09SS1NQQUNFX1NUQUNLX0lEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5TdGF0dXNCYXJNYW5hZ2VyLkRJU0FCTEVfTUFTSzsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5TQ1JFRU5fT1JJRU5UQVRJT05fQkVISU5EOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uQWN0aXZpdHlJbmZvLlNDUkVFTl9PUklFTlRBVElPTl9VTlNQRUNJRklFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuRE9DS0VEX0lOVkFMSUQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GSVJTVF9BUFBMSUNBVElPTl9XSU5ET1c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GSVJTVF9TVUJfV0lORE9XOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19BTFRfRk9DVVNBQkxFX0lNOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19OT1RfRk9DVVNBQkxFOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19TRUNVUkU7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5GTEFHX1NIT1dfV0FMTFBBUEVSOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuSU5QVVRfRkVBVFVSRV9OT19JTlBVVF9DSEFOTkVMOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuTEFTVF9BUFBMSUNBVElPTl9XSU5ET1c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5MQVNUX1NVQl9XSU5ET1c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5QUklWQVRFX0ZMQUdfQ09NUEFUSUJMRV9XSU5ET1c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FDQ0VTU0lCSUxJVFlfT1ZFUkxBWTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT047Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OX1NUQVJUSU5HOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9CQVNFX0FQUExJQ0FUSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9CT09UX1BST0dSRVNTOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9ET0NLX0RJVklERVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0RSRUFNOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9JTlBVVF9NRVRIT0Q7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0lOUFVUX01FVEhPRF9ESUFMT0c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1BSSVZBVEVfUFJFU0VOVEFUSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9RU19ESUFMT0c7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1NUQVRVU19CQVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1ZPSUNFX0lOVEVSQUNUSU9OOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9XQUxMUEFQRVI7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyR2xvYmFsLlJFTEFZT1VUX0RFRkVSX1NVUkZBQ0VfREVTVFJPWTsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWwuUkVMQVlPVVRfUkVTX1NVUkZBQ0VfQ0hBTkdFRDsKLWltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3kuRklOSVNIX0xBWU9VVF9SRURPX1dBTExQQVBFUjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFdpbmRvd0FuaW1hdG9yLlBST0xPTkdfQU5JTUFUSU9OX0FUX0VORDsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLkFwcFdpbmRvd0FuaW1hdG9yLlBST0xPTkdfQU5JTUFUSU9OX0FUX1NUQVJUOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FERF9SRU1PVkU7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQU5JTTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BUFBfT1JJRU5UQVRJT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQVBQX1RSQU5TSVRJT05TOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0JPT1Q7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQ09ORklHVVJBVElPTjsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19ESVNQTEFZOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0RSQUc7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRk9DVVM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRk9DVVNfTElHSFQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfSU5QVVRfTUVUSE9EOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0tFWUdVQVJEOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0xBWUVSUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19MQVlPVVQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfT1JJRU5UQVRJT047Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfUkVTSVpFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NDUkVFTlNIT1Q7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU0NSRUVOX09OOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQUNLOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NUQVJUSU5HX1dJTkRPVzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVVJGQUNFX1RSQUNFOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1RBU0tfUE9TSVRJT05JTkc7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVE9LRU5fTU9WRU1FTlQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfVklTSUJJTElUWTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19XQUxMUEFQRVJfTElHSFQ7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfV0lORE9XX01PVkVNRU5UOwotaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1dJTkRPV19UUkFDRTsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ISURFX1NUQUNLX0NSQVdMUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX0xJR0hUX1RSQU5TQUNUSU9OUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5TSE9XX1NVUkZBQ0VfQUxMT0M7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19UUkFOU0FDVElPTlM7Ci1pbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19WRVJCT1NFX1RSQU5TQUNUSU9OUzsKLWltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV007Ci0KIGltcG9ydCBhbmRyb2lkLk1hbmlmZXN0OwogaW1wb3J0IGFuZHJvaWQuYW5pbWF0aW9uLlZhbHVlQW5pbWF0b3I7CiBpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk5vbk51bGw7CkBAIC0xMjgsNiArNTcsNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuUG93ZXJNYW5hZ2VySW50ZXJuYWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOworaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlQ2FsbGJhY2tMaXN0OwogaW1wb3J0IGFuZHJvaWQub3MuUmVtb3RlRXhjZXB0aW9uOwogaW1wb3J0IGFuZHJvaWQub3MuU2VydmljZU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOwpAQCAtMTUyLDExICs4MiwxMCBAQAogaW1wb3J0IGFuZHJvaWQudmlldy5DaG9yZW9ncmFwaGVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5OwogaW1wb3J0IGFuZHJvaWQudmlldy5EaXNwbGF5SW5mbzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuRHJvcFBlcm1pc3Npb25Ib2xkZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LkdyYXZpdHk7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklBcHBUcmFuc2l0aW9uQW5pbWF0aW9uU3BlY3NGdXR1cmU7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklBcHBsaWNhdGlvblRva2VuOwotaW1wb3J0IGFuZHJvaWQudmlldy5JRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXI7CitpbXBvcnQgYW5kcm9pZC52aWV3LklEb2NrZWRTdGFja0xpc3RlbmVyOwogaW1wb3J0IGFuZHJvaWQudmlldy5JSW5wdXRGaWx0ZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LklPbktleWd1YXJkRXhpdFJlc3VsdDsKIGltcG9ydCBhbmRyb2lkLnZpZXcuSVJvdGF0aW9uV2F0Y2hlcjsKQEAgLTE4NSwxMCArMTE0LDEyIEBACiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3k7CiBpbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJQb2xpY3kuUG9pbnRlckV2ZW50TGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb247CitpbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLklucHV0TWV0aG9kTWFuYWdlckludGVybmFsOwogaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwogCiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwuUjsKIGltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5hcHAuSUFzc2lzdFNjcmVlbnNob3RSZWNlaXZlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5pbnRlcm5hbC5vcy5JUmVzdWx0UmVjZWl2ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudXRpbC5GYXN0UHJpbnRXcml0ZXI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwudmlldy5JSW5wdXRDb250ZXh0OwogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnZpZXcuSUlucHV0TWV0aG9kQ2xpZW50OwpAQCAtMjI1LDkgKzE1Niw4MyBAQAogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuRE9DS0VEX1NUQUNLX0NSRUFURV9NT0RFX1RPUF9PUl9MRUZUOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXIuU3RhY2tJZC5ET0NLRURfU1RBQ0tfSUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLkFjdGl2aXR5TWFuYWdlci5TdGFja0lkLkZSRUVGT1JNX1dPUktTUEFDRV9TVEFDS19JRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hcHAuU3RhdHVzQmFyTWFuYWdlci5ESVNBQkxFX01BU0s7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5BY3Rpdml0eUluZm8uU0NSRUVOX09SSUVOVEFUSU9OX0JFSElORDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LnBtLkFjdGl2aXR5SW5mby5TQ1JFRU5fT1JJRU5UQVRJT05fVU5TUEVDSUZJRUQ7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkRPQ0tFRF9JTlZBTElEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRklSU1RfQVBQTElDQVRJT05fV0lORE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRklSU1RfU1VCX1dJTkRPVzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfQUxUX0ZPQ1VTQUJMRV9JTTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfTk9UX0ZPQ1VTQUJMRTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfU0VDVVJFOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRkxBR19TSE9XX1dBTExQQVBFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLklOUFVUX0ZFQVRVUkVfTk9fSU5QVVRfQ0hBTk5FTDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkxBU1RfQVBQTElDQVRJT05fV0lORE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuTEFTVF9TVUJfV0lORE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuUFJJVkFURV9GTEFHX0NPTVBBVElCTEVfV0lORE9XOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9BQ0NFU1NJQklMSVRZX09WRVJMQVk7CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX0FQUExJQ0FUSU9OOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9BUFBMSUNBVElPTl9TVEFSVElORzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQkFTRV9BUFBMSUNBVElPTjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQk9PVF9QUk9HUkVTUzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfRE9DS19ESVZJREVSOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9EUkVBTTsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfSU5QVVRfTUVUSE9EOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9JTlBVVF9NRVRIT0RfRElBTE9HOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuVFlQRV9OQVZJR0FUSU9OX0JBUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfUFJJVkFURV9QUkVTRU5UQVRJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1FTX0RJQUxPRzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfU1RBVFVTX0JBUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfVk9JQ0VfSU5URVJBQ1RJT047CitpbXBvcnQgc3RhdGljIGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcy5UWVBFX1dBTExQQVBFUjsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXJHbG9iYWwuUkVMQVlPVVRfREVGRVJfU1VSRkFDRV9ERVNUUk9ZOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlckdsb2JhbC5SRUxBWU9VVF9SRVNfU1VSRkFDRV9DSEFOR0VEOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlclBvbGljeS5GSU5JU0hfTEFZT1VUX1JFRE9fV0FMTFBBUEVSOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uQXBwV2luZG93QW5pbWF0b3IuUFJPTE9OR19BTklNQVRJT05fQVRfRU5EOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uQXBwV2luZG93QW5pbWF0b3IuUFJPTE9OR19BTklNQVRJT05fQVRfU1RBUlQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUc7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQUREX1JFTU9WRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BTklNOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0FQUF9PUklFTlRBVElPTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19BUFBfVFJBTlNJVElPTlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfQk9PVDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19DT05GSUdVUkFUSU9OOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX0RJU1BMQVk7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfRFJBRzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19GT0NVUzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19GT0NVU19MSUdIVDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19JTlBVVF9NRVRIT0Q7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfS0VZR1VBUkQ7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfTEFZT1VUOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX09SSUVOVEFUSU9OOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1JFU0laRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TQ1JFRU5TSE9UOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1NDUkVFTl9PTjsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVEFDSzsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19TVEFSVElOR19XSU5ET1c7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfU1VSRkFDRV9UUkFDRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19UQVNLX1BPU0lUSU9OSU5HOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1RPS0VOX01PVkVNRU5UOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1ZJU0lCSUxJVFk7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuREVCVUdfV0FMTFBBUEVSX0xJR0hUOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLkRFQlVHX1dJTkRPV19NT1ZFTUVOVDsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5ERUJVR19XSU5ET1dfVFJBQ0U7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuSElERV9TVEFDS19DUkFXTFM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19MSUdIVF9UUkFOU0FDVElPTlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuU0hPV19TVVJGQUNFX0FMTE9DOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlNIT1dfVFJBTlNBQ1RJT05TOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlckRlYnVnQ29uZmlnLlNIT1dfVkVSQk9TRV9UUkFOU0FDVElPTlM7CitpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dJVEhfQ0xBU1NfTkFNRTsKK2ltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd01hbmFnZXJEZWJ1Z0NvbmZpZy5UQUdfV007CisKIC8qKiB7QGhpZGV9ICovCiBwdWJsaWMgY2xhc3MgV2luZG93TWFuYWdlclNlcnZpY2UgZXh0ZW5kcyBJV2luZG93TWFuYWdlci5TdHViCiAgICAgICAgIGltcGxlbWVudHMgV2F0Y2hkb2cuTW9uaXRvciwgV2luZG93TWFuYWdlclBvbGljeS5XaW5kb3dNYW5hZ2VyRnVuY3MgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSBUQUdfV0lUSF9DTEFTU19OQU1FID8gIldpbmRvd01hbmFnZXJTZXJ2aWNlIiA6IFRBR19XTTsKKwogICAgIHN0YXRpYyBmaW5hbCBpbnQgTEFZT1VUX1JFUEVBVF9USFJFU0hPTEQgPSA0OwogCiAgICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gUFJPRklMRV9PUklFTlRBVElPTiA9IGZhbHNlOwpAQCAtMjY3LDYgKzI3Miw5IEBACiAgICAgLyoqIEFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIGRlbGF5IGJlZm9yZSBkZWNsYXJpbmcgYSB3aW5kb3cgZnJlZXplIHRpbWVvdXQuICovCiAgICAgc3RhdGljIGZpbmFsIGludCBXSU5ET1dfRlJFRVpFX1RJTUVPVVRfRFVSQVRJT04gPSAyMDAwOwogCisgICAgLyoqIEFtb3VudCBvZiB0aW1lIChpbiBtaWxsaXNlY29uZHMpIHRvIGRlbGF5IGJlZm9yZSBkZWNsYXJpbmcgYSB3aW5kb3cgcmVwbGFjZW1lbnQgdGltZW91dC4gKi8KKyAgICBzdGF0aWMgZmluYWwgaW50IFdJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VUX0RVUkFUSU9OID0gMjAwMDsKKwogICAgIC8qKiBBbW91bnQgb2YgdGltZSB0byBhbGxvdyBhIGxhc3QgQU5SIG1lc3NhZ2UgdG8gZXhpc3QgYmVmb3JlIGZyZWVpbmcgdGhlIG1lbW9yeS4gKi8KICAgICBzdGF0aWMgZmluYWwgaW50IExBU1RfQU5SX0xJRkVUSU1FX0RVUkFUSU9OX01TRUNTID0gMiAqIDYwICogNjAgKiAxMDAwOyAvLyBUd28gaG91cnMKICAgICAvKioKQEAgLTQ1Nyw3ICs0NjUsNiBAQAogICAgIEVtdWxhdG9yRGlzcGxheU92ZXJsYXkgbUVtdWxhdG9yRGlzcGxheU92ZXJsYXk7CiAKICAgICBmaW5hbCBmbG9hdFtdIG1UbXBGbG9hdHMgPSBuZXcgZmxvYXRbOV07Ci0gICAgZmluYWwgUmVjdCBtVG1wQ29udGVudFJlY3QgPSBuZXcgUmVjdCgpOwogCiAgICAgYm9vbGVhbiBtRGlzcGxheVJlYWR5OwogICAgIGJvb2xlYW4gbVNhZmVNb2RlOwpAQCAtNTYzLDcgKzU3MCw2IEBACiAKICAgICAvKiogSWYgdHJ1ZSBob2xkIG9mZiBvbiBtb2RpZnlpbmcgdGhlIGFuaW1hdGlvbiBsYXllciBvZiBtSW5wdXRNZXRob2RUYXJnZXQgKi8KICAgICBib29sZWFuIG1JbnB1dE1ldGhvZFRhcmdldFdhaXRpbmdBbmltOwotICAgIGludCBtSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50OwogCiAgICAgV2luZG93U3RhdGUgbUlucHV0TWV0aG9kV2luZG93ID0gbnVsbDsKICAgICBmaW5hbCBBcnJheUxpc3Q8V2luZG93U3RhdGU+IG1JbnB1dE1ldGhvZERpYWxvZ3MgPSBuZXcgQXJyYXlMaXN0PD4oKTsKQEAgLTU3MywzMSArNTc5LDIzIEBACiAgICAgZmluYWwgQXJyYXlMaXN0PFdpbmRvd1N0YXRlPiBtVG1wV2luZG93cyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgYm9vbGVhbiBtSGFyZEtleWJvYXJkQXZhaWxhYmxlOwotICAgIGJvb2xlYW4gbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkOwogICAgIFdpbmRvd01hbmFnZXJJbnRlcm5hbC5PbkhhcmRLZXlib2FyZFN0YXR1c0NoYW5nZUxpc3RlbmVyIG1IYXJkS2V5Ym9hcmRTdGF0dXNDaGFuZ2VMaXN0ZW5lcjsKICAgICBTZXR0aW5nc09ic2VydmVyIG1TZXR0aW5nc09ic2VydmVyOwogCiAgICAgcHJpdmF0ZSBmaW5hbCBjbGFzcyBTZXR0aW5nc09ic2VydmVyIGV4dGVuZHMgQ29udGVudE9ic2VydmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBVcmkgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkVXJpID0KLSAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKFNldHRpbmdzLlNlY3VyZS5TSE9XX0lNRV9XSVRIX0hBUkRfS0VZQk9BUkQpOwotCiAgICAgICAgIHByaXZhdGUgZmluYWwgVXJpIG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaSA9CiAgICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLmdldFVyaUZvcihTZXR0aW5ncy5TZWN1cmUuQUNDRVNTSUJJTElUWV9ESVNQTEFZX0lOVkVSU0lPTl9FTkFCTEVEKTsKIAogICAgICAgICBwdWJsaWMgU2V0dGluZ3NPYnNlcnZlcigpIHsKICAgICAgICAgICAgIHN1cGVyKG5ldyBIYW5kbGVyKCkpOwogICAgICAgICAgICAgQ29udGVudFJlc29sdmVyIHJlc29sdmVyID0gbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCk7Ci0gICAgICAgICAgICByZXNvbHZlci5yZWdpc3RlckNvbnRlbnRPYnNlcnZlcihtU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmRVcmksIGZhbHNlLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfQUxMKTsKICAgICAgICAgICAgIHJlc29sdmVyLnJlZ2lzdGVyQ29udGVudE9ic2VydmVyKG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaSwgZmFsc2UsIHRoaXMsCiAgICAgICAgICAgICAgICAgICAgIFVzZXJIYW5kbGUuVVNFUl9BTEwpOwogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2hhbmdlKGJvb2xlYW4gc2VsZkNoYW5nZSwgVXJpIHVyaSkgewotICAgICAgICAgICAgaWYgKG1TaG93SW1lV2l0aEhhcmRLZXlib2FyZFVyaS5lcXVhbHModXJpKSkgewotICAgICAgICAgICAgICAgIHVwZGF0ZVNob3dJbWVXaXRoSGFyZEtleWJvYXJkKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaS5lcXVhbHModXJpKSkgeworICAgICAgICAgICAgaWYgKG1EaXNwbGF5SW52ZXJzaW9uRW5hYmxlZFVyaS5lcXVhbHModXJpKSkgewogICAgICAgICAgICAgICAgIHVwZGF0ZUNpcmN1bGFyRGlzcGxheU1hc2tJZk5lZWRlZCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02MDUsNiArNjAzLDggQEAKIAogICAgIFdhbGxwYXBlckNvbnRyb2xsZXIgbVdhbGxwYXBlckNvbnRyb2xsZXJMb2NrZWQ7CiAKKyAgICBmaW5hbCBXaW5kb3dMYXllcnNDb250cm9sbGVyIG1MYXllcnNDb250cm9sbGVyOworCiAgICAgYm9vbGVhbiBtQW5pbWF0ZVdhbGxwYXBlcldpdGhUYXJnZXQ7CiAKICAgICBBcHBXaW5kb3dUb2tlbiBtRm9jdXNlZEFwcCA9IG51bGw7CkBAIC03NTQsMTMgKzc1NCwxMiBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBjb21wbGV0ZURyb3BMdyhmbG9hdCB4LCBmbG9hdCB5KSB7CiAgICAgICAgIFdpbmRvd1N0YXRlIGRyb3BUYXJnZXRXaW4gPSBtRHJhZ1N0YXRlLmdldERyb3BUYXJnZXRXaW5Mdyh4LCB5KTsKIAotICAgICAgICBEcm9wUGVybWlzc2lvbkhvbGRlciBkcm9wUGVybWlzc2lvbkhvbGRlciA9IG51bGw7CisgICAgICAgIERyb3BQZXJtaXNzaW9uc0hhbmRsZXIgZHJvcFBlcm1pc3Npb25zID0gbnVsbDsKICAgICAgICAgaWYgKGRyb3BUYXJnZXRXaW4gIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgIChtRHJhZ1N0YXRlLm1GbGFncyAmIFZpZXcuRFJBR19GTEFHX0dMT0JBTCkgIT0gMCAmJgogICAgICAgICAgICAgICAgIChtRHJhZ1N0YXRlLm1GbGFncyAmIERSQUdfRkxBR1NfVVJJX0FDQ0VTUykgIT0gMCkgewotICAgICAgICAgICAgZHJvcFBlcm1pc3Npb25Ib2xkZXIgPSBuZXcgRHJvcFBlcm1pc3Npb25Ib2xkZXIoCisgICAgICAgICAgICBkcm9wUGVybWlzc2lvbnMgPSBuZXcgRHJvcFBlcm1pc3Npb25zSGFuZGxlcigKICAgICAgICAgICAgICAgICAgICAgbURyYWdTdGF0ZS5tRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgbUFjdGl2aXR5TWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgbURyYWdTdGF0ZS5tVWlkLAogICAgICAgICAgICAgICAgICAgICBkcm9wVGFyZ2V0V2luLmdldE93bmluZ1BhY2thZ2UoKSwKICAgICAgICAgICAgICAgICAgICAgbURyYWdTdGF0ZS5tRmxhZ3MgJiBEUkFHX0ZMQUdTX1VSSV9QRVJNSVNTSU9OUywKQEAgLTc2OCw3ICs3NjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBVc2VySGFuZGxlLmdldFVzZXJJZChkcm9wVGFyZ2V0V2luLmdldE93bmluZ1VpZCgpKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbURyYWdTdGF0ZS5ub3RpZnlEcm9wTHcoZHJvcFRhcmdldFdpbiwgZHJvcFBlcm1pc3Npb25Ib2xkZXIsIHgsIHkpOworICAgICAgICByZXR1cm4gbURyYWdTdGF0ZS5ub3RpZnlEcm9wTHcoZHJvcFRhcmdldFdpbiwgZHJvcFBlcm1pc3Npb25zLCB4LCB5KTsKICAgICB9CiAKICAgICAvKioKQEAgLTg3OCw2ICs4NzcsNyBAQAogCiAgICAgICAgIG1XYWxscGFwZXJDb250cm9sbGVyTG9ja2VkID0gbmV3IFdhbGxwYXBlckNvbnRyb2xsZXIodGhpcyk7CiAgICAgICAgIG1XaW5kb3dQbGFjZXJMb2NrZWQgPSBuZXcgV2luZG93U3VyZmFjZVBsYWNlcih0aGlzKTsKKyAgICAgICAgbUxheWVyc0NvbnRyb2xsZXIgPSBuZXcgV2luZG93TGF5ZXJzQ29udHJvbGxlcih0aGlzKTsKIAogICAgICAgICBMb2NhbFNlcnZpY2VzLmFkZFNlcnZpY2UoV2luZG93TWFuYWdlclBvbGljeS5jbGFzcywgbVBvbGljeSk7CiAKQEAgLTkzOSw3ICs5MzksNiBAQAogICAgICAgICBtQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKG1Ccm9hZGNhc3RSZWNlaXZlciwgZmlsdGVyKTsKIAogICAgICAgICBtU2V0dGluZ3NPYnNlcnZlciA9IG5ldyBTZXR0aW5nc09ic2VydmVyKCk7Ci0gICAgICAgIHVwZGF0ZVNob3dJbWVXaXRoSGFyZEtleWJvYXJkKCk7CiAKICAgICAgICAgbUhvbGRpbmdTY3JlZW5XYWtlTG9jayA9IG1Qb3dlck1hbmFnZXIubmV3V2FrZUxvY2soCiAgICAgICAgICAgICAgICAgUG93ZXJNYW5hZ2VyLlNDUkVFTl9CUklHSFRfV0FLRV9MT0NLIHwgUG93ZXJNYW5hZ2VyLk9OX0FGVEVSX1JFTEVBU0UsIFRBR19XTSk7CkBAIC0xMzQ5LDEwICsxMzQ4LDcgQEAKICAgICAgICAgZmluYWwgQXBwV2luZG93VG9rZW4gYXBwVG9rZW4gPSB3aW4ubUFwcFRva2VuOwogICAgICAgICBpZiAoYXBwVG9rZW4gIT0gbnVsbCkgewogICAgICAgICAgICAgaWYgKGFkZFRvVG9rZW4pIHsKLSAgICAgICAgICAgICAgICBhcHBUb2tlbi5hbGxBcHBXaW5kb3dzLmFkZCh3aW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFwcFRva2VuLm1XaWxsUmVwbGFjZVdpbmRvdykgewotICAgICAgICAgICAgICAgIGFwcFRva2VuLm1SZXBsYWNpbmdXaW5kb3cgPSB3aW47CisgICAgICAgICAgICAgICAgYXBwVG9rZW4uYWRkV2luZG93KHdpbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTEwLDkgKzE1MDYsMTAgQEAKICAgICAgICAgICAgICAgICBtSW5wdXRNZXRob2RUYXJnZXQgPSB3OwogICAgICAgICAgICAgICAgIG1JbnB1dE1ldGhvZFRhcmdldFdhaXRpbmdBbmltID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKHcubUFwcFRva2VuICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KHcubUFwcFRva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbUxheWVyc0NvbnRyb2xsZXIuc2V0SW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcubUFwcFRva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZXRJbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQoMCk7CisgICAgICAgICAgICAgICAgICAgIG1MYXllcnNDb250cm9sbGVyLnNldElucHV0TWV0aG9kQW5pbUxheWVyQWRqdXN0bWVudCgwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaSsxOwpAQCAtMTUyMSw3ICsxNTE4LDcgQEAKICAgICAgICAgICAgIGlmIChERUJVR19JTlBVVF9NRVRIT0QpIFNsb2cudyhUQUdfV00sICJNb3ZpbmcgSU0gdGFyZ2V0IGZyb20gIiArIGN1clRhcmdldCArICIgdG8gbnVsbC4iCiAgICAgICAgICAgICAgICAgICAgICsgKEhJREVfU1RBQ0tfQ1JBV0xTID8gIiIgOiAiIENhbGxlcnM9IiArIERlYnVnLmdldENhbGxlcnMoNCkpKTsKICAgICAgICAgICAgIG1JbnB1dE1ldGhvZFRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICBzZXRJbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQoMCk7CisgICAgICAgICAgICBtTGF5ZXJzQ29udHJvbGxlci5zZXRJbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQoMCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTE1NDMsMzMgKzE1NDAsNiBAQAogICAgICAgICBtb3ZlSW5wdXRNZXRob2REaWFsb2dzTG9ja2VkKHBvcyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRJbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQoaW50IGFkaikgewotICAgICAgICBpZiAoREVCVUdfTEFZRVJTKSBTbG9nLnYoVEFHX1dNLCAiU2V0dGluZyBpbSBsYXllciBhZGogdG8gIiArIGFkaik7Ci0gICAgICAgIG1JbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQgPSBhZGo7Ci0gICAgICAgIFdpbmRvd1N0YXRlIGltdyA9IG1JbnB1dE1ldGhvZFdpbmRvdzsKLSAgICAgICAgaWYgKGltdyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbXcubVdpbkFuaW1hdG9yLm1BbmltTGF5ZXIgPSBpbXcubUxheWVyICsgYWRqOwotICAgICAgICAgICAgaWYgKERFQlVHX0xBWUVSUykgU2xvZy52KFRBR19XTSwgIklNIHdpbiAiICsgaW13Ci0gICAgICAgICAgICAgICAgICAgICsgIiBhbmltIGxheWVyOiAiICsgaW13Lm1XaW5BbmltYXRvci5tQW5pbUxheWVyKTsKLSAgICAgICAgICAgIGludCB3aSA9IGltdy5tQ2hpbGRXaW5kb3dzLnNpemUoKTsKLSAgICAgICAgICAgIHdoaWxlICh3aSA+IDApIHsKLSAgICAgICAgICAgICAgICB3aS0tOwotICAgICAgICAgICAgICAgIFdpbmRvd1N0YXRlIGN3ID0gaW13Lm1DaGlsZFdpbmRvd3MuZ2V0KHdpKTsKLSAgICAgICAgICAgICAgICBjdy5tV2luQW5pbWF0b3IubUFuaW1MYXllciA9IGN3Lm1MYXllciArIGFkajsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZRVJTKSBTbG9nLnYoVEFHX1dNLCAiSU0gd2luICIgKyBjdwotICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGFuaW0gbGF5ZXI6ICIgKyBjdy5tV2luQW5pbWF0b3IubUFuaW1MYXllcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGRpID0gbUlucHV0TWV0aG9kRGlhbG9ncy5zaXplKCk7Ci0gICAgICAgIHdoaWxlIChkaSA+IDApIHsKLSAgICAgICAgICAgIGRpIC0tOwotICAgICAgICAgICAgaW13ID0gbUlucHV0TWV0aG9kRGlhbG9ncy5nZXQoZGkpOwotICAgICAgICAgICAgaW13Lm1XaW5BbmltYXRvci5tQW5pbUxheWVyID0gaW13Lm1MYXllciArIGFkajsKLSAgICAgICAgICAgIGlmIChERUJVR19MQVlFUlMpIFNsb2cudihUQUdfV00sICJJTSB3aW4gIiArIGltdwotICAgICAgICAgICAgICAgICAgICArICIgYW5pbSBsYXllcjogIiArIGltdy5tV2luQW5pbWF0b3IubUFuaW1MYXllcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBwcml2YXRlIGludCB0bXBSZW1vdmVXaW5kb3dMb2NrZWQoaW50IGludGVyZXN0aW5nUG9zLCBXaW5kb3dTdGF0ZSB3aW4pIHsKICAgICAgICAgV2luZG93TGlzdCB3aW5kb3dzID0gd2luLmdldFdpbmRvd0xpc3QoKTsKICAgICAgICAgaW50IHdwb3MgPSB3aW5kb3dzLmluZGV4T2Yod2luKTsKQEAgLTE3NjgsNyArMTczOCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmVlZEFzc2lnbkxheWVycykgewotICAgICAgICAgICAgYXNzaWduTGF5ZXJzTG9ja2VkKHdpbmRvd3MpOworICAgICAgICAgICAgbUxheWVyc0NvbnRyb2xsZXIuYXNzaWduTGF5ZXJzTG9ja2VkKHdpbmRvd3MpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xOTY2LDYgKzE5MzYsMTAgQEAKIAogICAgICAgICAgICAgcmVzID0gV2luZG93TWFuYWdlckdsb2JhbC5BRERfT0tBWTsKIAorICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9TVEFUVVNfQkFSIHx8IHR5cGUgPT0gVFlQRV9OQVZJR0FUSU9OX0JBUikgeworICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50Lm1UYXBFeGNsdWRlZFdpbmRvd3MuYWRkKHdpbik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogCiAgICAgICAgICAgICBpZiAoYWRkVG9rZW4pIHsKQEAgLTIwMTcsNiArMTk5MSwxMCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gSWYgdGhlIHdpbmRvdyBpcyBiZWluZyBhZGRlZCB0byBhIHRhc2sgdGhhdCdzIGRvY2tlZCBidXQgbm9uLXJlc2l6ZWFibGUsCisgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGlzIG5ldyB3aW5kb3cncyBzY3JvbGwgcG9zaXRpb24gd2hlbiBpdCdzIGFkZGVkLgorICAgICAgICAgICAgd2luLmFwcGx5U2Nyb2xsSWZOZWVkZWQoKTsKKwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gVFlQRV9ET0NLX0RJVklERVIpIHsKICAgICAgICAgICAgICAgICBnZXREZWZhdWx0RGlzcGxheUNvbnRlbnRMb2NrZWQoKS5nZXREb2NrZWREaXZpZGVyQ29udHJvbGxlcigpLnNldFdpbmRvdyh3aW4pOwogICAgICAgICAgICAgfQpAQCAtMjA1Niw3ICsyMDM0LDcgQEAKICAgICAgICAgICAgICAgICBtb3ZlSW5wdXRNZXRob2RXaW5kb3dzSWZOZWVkZWRMb2NrZWQoZmFsc2UpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBhc3NpZ25MYXllcnNMb2NrZWQoZGlzcGxheUNvbnRlbnQuZ2V0V2luZG93TGlzdCgpKTsKKyAgICAgICAgICAgIG1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZChkaXNwbGF5Q29udGVudC5nZXRXaW5kb3dMaXN0KCkpOwogICAgICAgICAgICAgLy8gRG9uJ3QgZG8gbGF5b3V0IGhlcmUsIHRoZSB3aW5kb3cgbXVzdCBjYWxsCiAgICAgICAgICAgICAvLyByZWxheW91dCB0byBiZSBkaXNwbGF5ZWQsIHNvIHdlJ2xsIGRvIGl0IHRoZXJlLgogCkBAIC0yMDgzLDE0ICsyMDYxLDE1IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHByZXBhcmVXaW5kb3dSZXBsYWNlbWVudFRyYW5zaXRpb24oQXBwV2luZG93VG9rZW4gYXRva2VuKSB7Ci0gICAgICAgIGlmIChhdG9rZW4gPT0gbnVsbCB8fCAhYXRva2VuLm1XaWxsUmVwbGFjZVdpbmRvdyB8fCAhYXRva2VuLm1BbmltYXRlUmVwbGFjaW5nV2luZG93KSB7CisgICAgICAgIGlmIChhdG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGF0b2tlbi5hbGxEcmF3biA9IGZhbHNlOwogICAgICAgICBXaW5kb3dTdGF0ZSByZXBsYWNlZFdpbmRvdyA9IG51bGw7CiAgICAgICAgIGZvciAoaW50IGkgPSBhdG9rZW4ud2luZG93cy5zaXplKCkgLSAxOyBpID49IDAgJiYgcmVwbGFjZWRXaW5kb3cgPT0gbnVsbDsgaS0tKSB7CiAgICAgICAgICAgICBXaW5kb3dTdGF0ZSBjYW5kaWRhdGUgPSBhdG9rZW4ud2luZG93cy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm1FeGl0aW5nKSB7CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLm1FeGl0aW5nICYmIGNhbmRpZGF0ZS5tV2lsbFJlcGxhY2VXaW5kb3cKKyAgICAgICAgICAgICAgICAgICAgJiYgY2FuZGlkYXRlLm1BbmltYXRlUmVwbGFjaW5nV2luZG93KSB7CiAgICAgICAgICAgICAgICAgcmVwbGFjZWRXaW5kb3cgPSBjYW5kaWRhdGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIxOTAsNyArMjE2OSw3IEBACiAgICAgICAgICAgICAgICAgKyAiIGFwcC1hbmltYXRpb249IgogICAgICAgICAgICAgICAgICsgKHdpbi5tQXBwVG9rZW4gIT0gbnVsbCA/IHdpbi5tQXBwVG9rZW4ubUFwcEFuaW1hdG9yLmFuaW1hdGlvbiA6IG51bGwpCiAgICAgICAgICAgICAgICAgKyAiIG1XaWxsUmVwbGFjZVdpbmRvdz0iCi0gICAgICAgICAgICAgICAgKyAod2luLm1BcHBUb2tlbiAhPSBudWxsID8gd2luLm1BcHBUb2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cgOiBmYWxzZSkKKyAgICAgICAgICAgICAgICArIHdpbi5tV2lsbFJlcGxhY2VXaW5kb3cKICAgICAgICAgICAgICAgICArICIgaW5QZW5kaW5nVHJhbnNhY3Rpb249IgogICAgICAgICAgICAgICAgICsgKHdpbi5tQXBwVG9rZW4gIT0gbnVsbCA/IHdpbi5tQXBwVG9rZW4uaW5QZW5kaW5nVHJhbnNhY3Rpb24gOiBmYWxzZSkKICAgICAgICAgICAgICAgICArICIgbURpc3BsYXlGcm96ZW49IiArIG1EaXNwbGF5RnJvemVuKTsKQEAgLTIyMDIsMTMgKzIxODEsMTMgQEAKICAgICAgICAgLy8gYW5pbWF0aW9uIHdvdWxkbid0IGJlIHNlZW4uCiAgICAgICAgIGlmICh3aW4ubUhhc1N1cmZhY2UgJiYgb2tUb0Rpc3BsYXkoKSkgewogICAgICAgICAgICAgZmluYWwgQXBwV2luZG93VG9rZW4gYXBwVG9rZW4gPSB3aW4ubUFwcFRva2VuOwotICAgICAgICAgICAgaWYgKGFwcFRva2VuICE9IG51bGwgJiYgYXBwVG9rZW4ubVdpbGxSZXBsYWNlV2luZG93KSB7CisgICAgICAgICAgICBpZiAod2luLm1XaWxsUmVwbGFjZVdpbmRvdykgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgd2luZG93IGlzIGdvaW5nIHRvIGJlIHJlcGxhY2VkLiBXZSBuZWVkIHRvIGtlZXAgaXQgYXJvdW5kIHVudGlsIHRoZSBuZXcgb25lCiAgICAgICAgICAgICAgICAgLy8gZ2V0cyBhZGRlZCwgdGhlbiB3ZSB3aWxsIGdldCByaWQgb2YgdGhpcyBvbmUuCiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0FERF9SRU1PVkUpIFNsb2cudihUQUdfV00sICJQcmVzZXJ2aW5nICIgKyB3aW4gKyAiIHVudGlsIHRoZSBuZXcgb25lIGlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICsgImFkZGVkIik7CiAgICAgICAgICAgICAgICAgd2luLm1FeGl0aW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBhcHBUb2tlbi5tUmVwbGFjaW5nUmVtb3ZlUmVxdWVzdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB3aW4ubVJlcGxhY2luZ1JlbW92ZVJlcXVlc3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkob3JpZ0lkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0yMjU1LDkgKzIyMzQsOCBAQAogICAgICAgICAgICAgLy8gdHJpZ2dlciBpdHMgcmVtb3ZhbC4KICAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gbGFzdFdpblN0YXJ0aW5nTm90QW5pbWF0aW5nID0gc3RhcnRpbmdXaW5kb3cgJiYgYXBwVG9rZW4hPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICYmIGFwcFRva2VuLmFsbEFwcFdpbmRvd3Muc2l6ZSgpID09IDEgJiYgIWlzQW5pbWF0aW5nOwotICAgICAgICAgICAgaWYgKCFsYXN0V2luU3RhcnRpbmdOb3RBbmltYXRpbmcgJiYgKHdpbi5tRXhpdGluZyB8fCBpc0FuaW1hdGluZykpIHsKKyAgICAgICAgICAgIGlmICghbGFzdFdpblN0YXJ0aW5nTm90QW5pbWF0aW5nICYmIHdpbi5tRXhpdGluZykgewogICAgICAgICAgICAgICAgIC8vIFRoZSBleGl0IGFuaW1hdGlvbiBpcyBydW5uaW5nLi4uIHdhaXQgZm9yIGl0IQotICAgICAgICAgICAgICAgIHdpbi5tRXhpdGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgd2luLm1SZW1vdmVPbkV4aXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHdpbi5zZXREaXNwbGF5TGF5b3V0TmVlZGVkKCk7CiAgICAgICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBmb2N1c0NoYW5nZWQgPSB1cGRhdGVGb2N1c2VkV2luZG93TG9ja2VkKApAQCAtMjMwOSw2ICsyMjg3LDExIEBACiAgICAgICAgICAgICBTbG9nLncoVEFHX1dNLCAiUmVtb3Zpbmcgd2luZG93ICIgKyB3aW4sIGUpOwogICAgICAgICB9CiAKKyAgICAgICAgZmluYWwgaW50IHR5cGUgPSB3aW4ubUF0dHJzLnR5cGU7CisgICAgICAgIGlmICh0eXBlID09IFRZUEVfU1RBVFVTX0JBUiB8fCB0eXBlID09IFRZUEVfTkFWSUdBVElPTl9CQVIpIHsKKyAgICAgICAgICAgIGZpbmFsIERpc3BsYXlDb250ZW50IGRpc3BsYXljb250ZW50ID0gd2luLmdldERpc3BsYXlDb250ZW50KCk7CisgICAgICAgICAgICBkaXNwbGF5Y29udGVudC5tVGFwRXhjbHVkZWRXaW5kb3dzLnJlbW92ZSh3aW4pOworICAgICAgICB9CiAgICAgICAgIG1Qb2xpY3kucmVtb3ZlV2luZG93THcod2luKTsKICAgICAgICAgd2luLnJlbW92ZUxvY2tlZCgpOwogCkBAIC0yMzY0LDcgKzIzNDcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHdpbi5tQXR0cnMudHlwZSA9PSBUWVBFX1dBTExQQVBFUikgeworICAgICAgICBpZiAodHlwZSA9PSBUWVBFX1dBTExQQVBFUikgewogICAgICAgICAgICAgbVdhbGxwYXBlckNvbnRyb2xsZXJMb2NrZWQuY2xlYXJMYXN0V2FsbHBhcGVyVGltZW91dFRpbWUoKTsKICAgICAgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLnBlbmRpbmdMYXlvdXRDaGFuZ2VzIHw9CiAgICAgICAgICAgICAgICAgICAgIFdpbmRvd01hbmFnZXJQb2xpY3kuRklOSVNIX0xBWU9VVF9SRURPX1dBTExQQVBFUjsKQEAgLTIzNzcsNyArMjM2MCw3IEBACiAgICAgICAgIGlmICh3aW5kb3dzICE9IG51bGwpIHsKICAgICAgICAgICAgIHdpbmRvd3MucmVtb3ZlKHdpbik7CiAgICAgICAgICAgICBpZiAoIW1XaW5kb3dQbGFjZXJMb2NrZWQuaXNJbkxheW91dCgpKSB7Ci0gICAgICAgICAgICAgICAgYXNzaWduTGF5ZXJzTG9ja2VkKHdpbmRvd3MpOworICAgICAgICAgICAgICAgIG1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZCh3aW5kb3dzKTsKICAgICAgICAgICAgICAgICB3aW4uc2V0RGlzcGxheUxheW91dE5lZWRlZCgpOwogICAgICAgICAgICAgICAgIG1XaW5kb3dQbGFjZXJMb2NrZWQucGVyZm9ybVN1cmZhY2VQbGFjZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAod2luLm1BcHBUb2tlbiAhPSBudWxsKSB7CkBAIC0yNDQzLDEzICsyNDI2LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIHNldEluc2V0c1dpbmRvdyhTZXNzaW9uIHNlc3Npb24sIElXaW5kb3cgY2xpZW50LAotICAgICAgICAgICAgaW50IHRvdWNoYWJsZUluc2V0cywgUmVjdCBjb250ZW50SW5zZXRzLAorICAgIHZvaWQgc2V0SW5zZXRzV2luZG93KFNlc3Npb24gc2Vzc2lvbiwgSVdpbmRvdyBjbGllbnQsIGludCB0b3VjaGFibGVJbnNldHMsIFJlY3QgY29udGVudEluc2V0cywKICAgICAgICAgICAgIFJlY3QgdmlzaWJsZUluc2V0cywgUmVnaW9uIHRvdWNoYWJsZVJlZ2lvbikgewogICAgICAgICBsb25nIG9yaWdJZCA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICAgICAgV2luZG93U3RhdGUgdyA9IHdpbmRvd0ZvckNsaWVudExvY2tlZChzZXNzaW9uLCBjbGllbnQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoREVCVUdfTEFZT1VUKSBTbG9nLmQoVEFHLCAic2V0SW5zZXRzV2luZG93ICIgKyB3CisgICAgICAgICAgICAgICAgICAgICAgICArICIsIGNvbnRlbnRJbnNldHM9IiArIHcubUdpdmVuQ29udGVudEluc2V0cyArICIgLT4gIiArIGNvbnRlbnRJbnNldHMKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIiwgdmlzaWJsZUluc2V0cz0iICsgdy5tR2l2ZW5WaXNpYmxlSW5zZXRzICsgIiAtPiAiICsgdmlzaWJsZUluc2V0cworICAgICAgICAgICAgICAgICAgICAgICAgKyAiLCB0b3VjaGFibGVSZWdpb249IiArIHcubUdpdmVuVG91Y2hhYmxlUmVnaW9uICsgIiAtPiAiICsgdG91Y2hhYmxlUmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICArICIsIHRvdWNoYWJsZUluc2V0cyAiICsgdy5tVG91Y2hhYmxlSW5zZXRzICsgIiAtPiAiICsgdG91Y2hhYmxlSW5zZXRzKTsKICAgICAgICAgICAgICAgICBpZiAodyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHcubUdpdmVuSW5zZXRzUGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB3Lm1HaXZlbkNvbnRlbnRJbnNldHMuc2V0KGNvbnRlbnRJbnNldHMpOwpAQCAtMjczMiw3ICsyNzE5LDcgQEAKICAgICAgICAgICAgICAgICAvLyBpdHMgbGF5ZXIgcmVjb21wdXRlZC4gIEhvd2V2ZXIsIGlmIHRoZSBJTUUgd2FzIGhpZGRlbgogICAgICAgICAgICAgICAgIC8vIGFuZCBpc24ndCBhY3R1YWxseSBtb3ZlZCBpbiB0aGUgbGlzdCwgaXRzIGxheWVyIG1heSBiZQogICAgICAgICAgICAgICAgIC8vIG91dCBvZiBkYXRhIHNvIHdlIG1ha2Ugc3VyZSB0byByZWNvbXB1dGUgaXQuCi0gICAgICAgICAgICAgICAgYXNzaWduTGF5ZXJzTG9ja2VkKHdpbi5nZXRXaW5kb3dMaXN0KCkpOworICAgICAgICAgICAgICAgIG1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZCh3aW4uZ2V0V2luZG93TGlzdCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHdhbGxwYXBlck1heU1vdmUpIHsKQEAgLTI5OTUsNyArMjk4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICsgIiBmcmFtZT0iICsgZnJhbWUgKyAiIGluc2V0cz0iICsgaW5zZXRzICsgIiBzdXJmYWNlSW5zZXRzPSIgKyBzdXJmYWNlSW5zZXRzKTsKICAgICAgICAgICAgIEFuaW1hdGlvbiBhID0gbUFwcFRyYW5zaXRpb24ubG9hZEFuaW1hdGlvbihscCwgdHJhbnNpdCwgZW50ZXIsCiAgICAgICAgICAgICAgICAgICAgIG1DdXJDb25maWd1cmF0aW9uLm9yaWVudGF0aW9uLCBmcmFtZSwgaW5zZXRzLCBzdXJmYWNlSW5zZXRzLCBpc1ZvaWNlSW50ZXJhY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgIGZyZWVmb3JtLCBhdG9rZW4ubVRhc2subVRhc2tJZCk7CisgICAgICAgICAgICAgICAgICAgICFmdWxsc2NyZWVuLCBhdG9rZW4ubVRhc2subVRhc2tJZCk7CiAgICAgICAgICAgICBpZiAoYSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKERFQlVHX0FOSU0pIHsKICAgICAgICAgICAgICAgICAgICAgUnVudGltZUV4Y2VwdGlvbiBlID0gbnVsbDsKQEAgLTMyMjAsNyArMzIwNyw4IEBACiAgICAgcHVibGljIHZvaWQgYWRkQXBwVG9rZW4oaW50IGFkZFBvcywgSUFwcGxpY2F0aW9uVG9rZW4gdG9rZW4sIGludCB0YXNrSWQsIGludCBzdGFja0lkLAogICAgICAgICAgICAgaW50IHJlcXVlc3RlZE9yaWVudGF0aW9uLCBib29sZWFuIGZ1bGxzY3JlZW4sIGJvb2xlYW4gc2hvd0ZvckFsbFVzZXJzLCBpbnQgdXNlcklkLAogICAgICAgICAgICAgaW50IGNvbmZpZ0NoYW5nZXMsIGJvb2xlYW4gdm9pY2VJbnRlcmFjdGlvbiwgYm9vbGVhbiBsYXVuY2hUYXNrQmVoaW5kLAotICAgICAgICAgICAgUmVjdCB0YXNrQm91bmRzLCBDb25maWd1cmF0aW9uIGNvbmZpZywgYm9vbGVhbiBjcm9wV2luZG93c1RvU3RhY2spIHsKKyAgICAgICAgICAgIFJlY3QgdGFza0JvdW5kcywgQ29uZmlndXJhdGlvbiBjb25maWcsIGJvb2xlYW4gY3JvcFdpbmRvd3NUb1N0YWNrLAorICAgICAgICAgICAgYm9vbGVhbiBhbHdheXNGb2N1c2FibGUpIHsKICAgICAgICAgaWYgKCFjaGVja0NhbGxpbmdQZXJtaXNzaW9uKGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5NQU5BR0VfQVBQX1RPS0VOUywKICAgICAgICAgICAgICAgICAiYWRkQXBwVG9rZW4oKSIpKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIlJlcXVpcmVzIE1BTkFHRV9BUFBfVE9LRU5TIHBlcm1pc3Npb24iKTsKQEAgLTMyNTUsNiArMzI0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIChBY3Rpdml0eUluZm8uQ09ORklHX1NDUkVFTl9TSVpFIHwgQWN0aXZpdHlJbmZvLkNPTkZJR19PUklFTlRBVElPTikpICE9IDA7CiAgICAgICAgICAgICBhdG9rZW4ubUxhdW5jaFRhc2tCZWhpbmQgPSBsYXVuY2hUYXNrQmVoaW5kOwogICAgICAgICAgICAgYXRva2VuLm1Dcm9wV2luZG93c1RvU3RhY2sgPSBjcm9wV2luZG93c1RvU3RhY2s7CisgICAgICAgICAgICBhdG9rZW4ubUFsd2F5c0ZvY3VzYWJsZSA9IGFsd2F5c0ZvY3VzYWJsZTsKICAgICAgICAgICAgIGlmIChERUJVR19UT0tFTl9NT1ZFTUVOVCB8fCBERUJVR19BRERfUkVNT1ZFKSBTbG9nLnYoVEFHX1dNLCAiYWRkQXBwVG9rZW46ICIgKyBhdG9rZW4KICAgICAgICAgICAgICAgICAgICAgKyAiIHRvIHN0YWNrPSIgKyBzdGFja0lkICsgIiB0YXNrPSIgKyB0YXNrSWQgKyAiIGF0ICIgKyBhZGRQb3MpOwogCkBAIC0zNDg0LDYgKzM0NzMsNyBAQAogICAgICAgICAgICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBwcmV2aW91cyBjb25maWd1cmF0aW9uLgogICAgICAgICAgICAgbVRlbXBDb25maWd1cmF0aW9uLnNldFRvRGVmYXVsdHMoKTsKICAgICAgICAgICAgIG1UZW1wQ29uZmlndXJhdGlvbi5mb250U2NhbGUgPSBjdXJyZW50Q29uZmlnLmZvbnRTY2FsZTsKKyAgICAgICAgICAgIG1UZW1wQ29uZmlndXJhdGlvbi51aU1vZGUgPSBjdXJyZW50Q29uZmlnLnVpTW9kZTsKICAgICAgICAgICAgIGNvbXB1dGVTY3JlZW5Db25maWd1cmF0aW9uTG9ja2VkKG1UZW1wQ29uZmlndXJhdGlvbik7CiAgICAgICAgICAgICBpZiAoY3VycmVudENvbmZpZy5kaWZmKG1UZW1wQ29uZmlndXJhdGlvbikgIT0gMCkgewogICAgICAgICAgICAgICAgIG1XYWl0aW5nRm9yQ29uZmlnID0gdHJ1ZTsKQEAgLTM1MzgsNiArMzUyOCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXROZXdDb25maWd1cmF0aW9uKENvbmZpZ3VyYXRpb24gY29uZmlnKSB7CiAgICAgICAgIGlmICghY2hlY2tDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FQUF9UT0tFTlMsCiAgICAgICAgICAgICAgICAgInNldE5ld0NvbmZpZ3VyYXRpb24oKSIpKSB7CkBAIC0zNTUxLDEwICszNTQyLDIwIEBACiAgICAgICAgICAgICAgICAgbVdhaXRpbmdGb3JDb25maWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBtTGFzdEZpbmlzaGVkRnJlZXplU291cmNlID0gIm5ldy1jb25maWciOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uQ2hhbmdlZCkgeworICAgICAgICAgICAgICAgIHVwZGF0ZVRhc2tTdGFja0JvdW5kc0FmdGVyUm90YXRpb24oKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1XaW5kb3dQbGFjZXJMb2NrZWQucGVyZm9ybVN1cmZhY2VQbGFjZW1lbnQoKTsKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUYXNrU3RhY2tCb3VuZHNBZnRlclJvdGF0aW9uKCkgeworICAgICAgICBmb3IgKGludCBzdGFja05keCA9IG1TdGFja0lkVG9TdGFjay5zaXplKCkgLSAxOyBzdGFja05keCA+PSAwOyBzdGFja05keC0tKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2sudmFsdWVBdChzdGFja05keCk7CisgICAgICAgICAgICBzdGFjay51cGRhdGVCb3VuZHNBZnRlclJvdGF0aW9uKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXRBcHBPcmllbnRhdGlvbihJQXBwbGljYXRpb25Ub2tlbiB0b2tlbiwgaW50IHJlcXVlc3RlZE9yaWVudGF0aW9uKSB7CiAgICAgICAgIGlmICghY2hlY2tDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX0FQUF9UT0tFTlMsCkBAIC0zODk0LDcgKzM4OTUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIFdpbmRvd1N0YXRlIHN0YXJ0aW5nV2luZG93ID0gdHRva2VuLnN0YXJ0aW5nV2luZG93OwotICAgICAgICBpZiAoc3RhcnRpbmdXaW5kb3cgIT0gbnVsbCkgeworICAgICAgICBpZiAoc3RhcnRpbmdXaW5kb3cgIT0gbnVsbCAmJiB0dG9rZW4uc3RhcnRpbmdWaWV3ICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIHN0YXJ0aW5nIGljb24gaGFzIGFscmVhZHkgYmVlbiBkaXNwbGF5ZWQsIHNvIHN0YXJ0CiAgICAgICAgICAgICAvLyBsZXR0aW5nIHdpbmRvd3MgZ2V0IHNob3duIGltbWVkaWF0ZWx5IHdpdGhvdXQgYW55IG1vcmUgdHJhbnNpdGlvbnMuCiAgICAgICAgICAgICBtU2tpcEFwcFRyYW5zaXRpb25BbmltYXRpb24gPSB0cnVlOwpAQCAtNDA0Miw3ICs0MDQzLDcgQEAKICAgICAgICAgLy8gdHJhbnNpdGlvbiBhbmltYXRpb24KICAgICAgICAgLy8gKiBvciB0aGlzIGlzIGFuIG9wZW5pbmcgYXBwIGFuZCB3aW5kb3dzIGFyZSBiZWluZyByZXBsYWNlZC4KICAgICAgICAgaWYgKHd0b2tlbi5oaWRkZW4gPT0gdmlzaWJsZSB8fCAod3Rva2VuLmhpZGRlbiAmJiB3dG9rZW4ubUlzRXhpdGluZykgfHwKLSAgICAgICAgICAgICAgICAodmlzaWJsZSAmJiB3dG9rZW4ubVdpbGxSZXBsYWNlV2luZG93KSkgeworICAgICAgICAgICAgICAgICh2aXNpYmxlICYmIHd0b2tlbi53YWl0aW5nRm9yUmVwbGFjZW1lbnQoKSkpIHsKICAgICAgICAgICAgIGJvb2xlYW4gY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKERFQlVHX0FQUF9UUkFOU0lUSU9OUykgU2xvZy52KAogICAgICAgICAgICAgICAgIFRBR19XTSwgIkNoYW5naW5nIGFwcCAiICsgd3Rva2VuICsgIiBoaWRkZW49IiArIHd0b2tlbi5oaWRkZW4KQEAgLTQ1NzUsNyArNDU3Niw3IEBACiAKICAgICAgICAgaWYgKCF1cGRhdGVGb2N1c2VkV2luZG93TG9ja2VkKFVQREFURV9GT0NVU19XSUxMX1BMQUNFX1NVUkZBQ0VTLAogICAgICAgICAgICAgICAgIGZhbHNlIC8qdXBkYXRlSW5wdXRXaW5kb3dzKi8pKSB7Ci0gICAgICAgICAgICBhc3NpZ25MYXllcnNMb2NrZWQoZGlzcGxheUNvbnRlbnQuZ2V0V2luZG93TGlzdCgpKTsKKyAgICAgICAgICAgIG1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZChkaXNwbGF5Q29udGVudC5nZXRXaW5kb3dMaXN0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgbUlucHV0TW9uaXRvci5zZXRVcGRhdGVJbnB1dFdpbmRvd3NOZWVkZWRMdygpOwpAQCAtNDY2OCw2ICs0NjY5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUdfU1RBQ0spIFNsb2cuZChUQUdfV00sICJhdHRhY2hTdGFjazogc3RhY2tJZD0iICsgc3RhY2tJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayA9IG5ldyBUYXNrU3RhY2sodGhpcywgc3RhY2tJZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtU3RhY2tJZFRvU3RhY2sucHV0KHN0YWNrSWQsIHN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja0lkID09IERPQ0tFRF9TVEFDS19JRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm5vdGlmeURvY2tlZFN0YWNrRXhpc3RzQ2hhbmdlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdGFjay5hdHRhY2hEaXNwbGF5Q29udGVudChkaXNwbGF5Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50LmF0dGFjaFN0YWNrKHN0YWNrLCBvblRvcCk7CkBAIC00NjkzLDYgKzQ2OTgsMTAgQEAKICAgICB2b2lkIGRldGFjaFN0YWNrTG9ja2VkKERpc3BsYXlDb250ZW50IGRpc3BsYXlDb250ZW50LCBUYXNrU3RhY2sgc3RhY2spIHsKICAgICAgICAgZGlzcGxheUNvbnRlbnQuZGV0YWNoU3RhY2soc3RhY2spOwogICAgICAgICBzdGFjay5kZXRhY2hEaXNwbGF5KCk7CisgICAgICAgIGlmIChzdGFjay5tU3RhY2tJZCA9PSBET0NLRURfU1RBQ0tfSUQpIHsKKyAgICAgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZAorICAgICAgICAgICAgICAgICAgICAubm90aWZ5RG9ja2VkU3RhY2tFeGlzdHNDaGFuZ2VkKGZhbHNlKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIGRldGFjaFN0YWNrKGludCBzdGFja0lkKSB7CkBAIC00ODE5LDYgKzQ4MjgsMTcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IGJvdW5kcyBjb3JyZXNwb25kcyB0byB0aGUgZnVsbHNjcmVlbiBib3VuZHMgdGhlIHN0YWNrIGlzIG9uLiAqLworICAgIHB1YmxpYyBib29sZWFuIGlzRnVsbHNjcmVlbkJvdW5kcyhpbnQgc3RhY2tJZCwgUmVjdCBib3VuZHMpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOworICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwgfHwgYm91bmRzID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdGFjay5pc0Z1bGxzY3JlZW5Cb3VuZHMoYm91bmRzKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8qKgogICAgICAqIFJlLXNpemVzIGEgc3RhY2sgYW5kIGl0cyBjb250YWluaW5nIHRhc2tzLgogICAgICAqIEBwYXJhbSBzdGFja0lkIElkIG9mIHN0YWNrIHRvIHJlc2l6ZS4KQEAgLTQ4MjgsMTQgKzQ4NDgsMTYgQEAKICAgICAgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHN0YWNrIGlzIG5vdyBmdWxsc2NyZWVuLgogICAgICAqICovCiAgICAgcHVibGljIGJvb2xlYW4gcmVzaXplU3RhY2soaW50IHN0YWNrSWQsIFJlY3QgYm91bmRzLAotICAgICAgICAgICAgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcykgeworICAgICAgICAgICAgU3BhcnNlQXJyYXk8Q29uZmlndXJhdGlvbj4gY29uZmlncywgU3BhcnNlQXJyYXk8UmVjdD4gdGFza0JvdW5kcywKKyAgICAgICAgICAgIFNwYXJzZUFycmF5PFJlY3Q+IHRhc2tUZW1wSW5zZXRCb3VuZHMpIHsKICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CiAgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOwogICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJyZXNpemVTdGFjazogc3RhY2tJZCAiICsgc3RhY2tJZAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIG5vdCBmb3VuZC4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGFjay5zZXRCb3VuZHMoYm91bmRzLCBjb25maWdzLCB0YXNrQm91bmRzKSAmJiBzdGFjay5pc1Zpc2libGVMb2NrZWQoKSkgeworICAgICAgICAgICAgaWYgKHN0YWNrLnNldEJvdW5kcyhib3VuZHMsIGNvbmZpZ3MsIHRhc2tCb3VuZHMsIHRhc2tUZW1wSW5zZXRCb3VuZHMpCisgICAgICAgICAgICAgICAgICAgICYmIHN0YWNrLmlzVmlzaWJsZUxvY2tlZCgpKSB7CiAgICAgICAgICAgICAgICAgc3RhY2sucmVzaXplV2luZG93cygpOwogICAgICAgICAgICAgICAgIHN0YWNrLmdldERpc3BsYXlDb250ZW50KCkubGF5b3V0TmVlZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBtV2luZG93UGxhY2VyTG9ja2VkLnBlcmZvcm1TdXJmYWNlUGxhY2VtZW50KCk7CkBAIC00ODQ0LDYgKzQ4NjYsMTcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHByZXBhcmVGcmVlemluZ1Rhc2tCb3VuZHMoaW50IHN0YWNrSWQpIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBtU3RhY2tJZFRvU3RhY2suZ2V0KHN0YWNrSWQpOworICAgICAgICAgICAgaWYgKHN0YWNrID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJwcmVwYXJlRnJlZXppbmdUYXNrQm91bmRzOiBzdGFja0lkICIgKyBzdGFja0lkCisgICAgICAgICAgICAgICAgICAgICAgICArICIgbm90IGZvdW5kLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhY2sucHJlcGFyZUZyZWV6aW5nVGFza0JvdW5kcygpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgcG9zaXRpb25UYXNrSW5TdGFjayhpbnQgdGFza0lkLCBpbnQgc3RhY2tJZCwgaW50IHBvc2l0aW9uLCBSZWN0IGJvdW5kcywKICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gY29uZmlnKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewpAQCAtNTI4Nyw2ICs1MzIwLDE2IEBACiAKICAgICAvLyBDYWxsZWQgYnkgd2luZG93IG1hbmFnZXIgcG9saWN5LiAgTm90IGV4cG9zZWQgZXh0ZXJuYWxseS4KICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzd2l0Y2hJbnB1dE1ldGhvZChib29sZWFuIGZvcndhcmREaXJlY3Rpb24pIHsKKyAgICAgICAgZmluYWwgSW5wdXRNZXRob2RNYW5hZ2VySW50ZXJuYWwgaW5wdXRNZXRob2RNYW5hZ2VySW50ZXJuYWwgPQorICAgICAgICAgICAgICAgIExvY2FsU2VydmljZXMuZ2V0U2VydmljZShJbnB1dE1ldGhvZE1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgIGlmIChpbnB1dE1ldGhvZE1hbmFnZXJJbnRlcm5hbCAhPSBudWxsKSB7CisgICAgICAgICAgICBpbnB1dE1ldGhvZE1hbmFnZXJJbnRlcm5hbC5zd2l0Y2hJbnB1dE1ldGhvZChmb3J3YXJkRGlyZWN0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENhbGxlZCBieSB3aW5kb3cgbWFuYWdlciBwb2xpY3kuICBOb3QgZXhwb3NlZCBleHRlcm5hbGx5LgorICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHNodXRkb3duKGJvb2xlYW4gY29uZmlybSkgewogICAgICAgICBTaHV0ZG93blRocmVhZC5zaHV0ZG93bihtQ29udGV4dCwgUG93ZXJNYW5hZ2VyLlNIVVRET1dOX1VTRVJfUkVRVUVTVEVELCBjb25maXJtKTsKICAgICB9CkBAIC02MjU5LDcgKzYzMDIsNyBAQAogICAgICAgICAvLyB0aGUgdG9wIG9mIHRoZSBtZXRob2QsIHRoZSBjYWxsZXIgaXMgb2JsaWdhdGVkIHRvIGNhbGwgY29tcHV0ZU5ld0NvbmZpZ3VyYXRpb25Mb2NrZWQoKS4KICAgICAgICAgLy8gQnkgdXBkYXRpbmcgdGhlIERpc3BsYXkgaW5mbyBoZXJlIGl0IHdpbGwgYmUgYXZhaWxhYmxlIHRvCiAgICAgICAgIC8vIGNvbXB1dGVTY3JlZW5Db25maWd1cmF0aW9uTG9ja2VkIGxhdGVyLgotICAgICAgICB1cGRhdGVEaXNwbGF5QW5kT3JpZW50YXRpb25Mb2NrZWQoKTsKKyAgICAgICAgdXBkYXRlRGlzcGxheUFuZE9yaWVudGF0aW9uTG9ja2VkKG1DdXJDb25maWd1cmF0aW9uLnVpTW9kZSk7CiAKICAgICAgICAgZmluYWwgRGlzcGxheUluZm8gZGlzcGxheUluZm8gPSBkaXNwbGF5Q29udGVudC5nZXREaXNwbGF5SW5mbygpOwogICAgICAgICBpZiAoIWluVHJhbnNhY3Rpb24pIHsKQEAgLTY4MjYsMTYgKzY4NjksMTcgQEAKICAgICAgICAgcmV0dXJuIGNvbmZpZzsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoRGlzcGxheUluZm8gZGlzcGxheUluZm8sIGludCByb3RhdGlvbiwgaW50IGR3LCBpbnQgZGgpIHsKKyAgICBwcml2YXRlIHZvaWQgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoRGlzcGxheUluZm8gZGlzcGxheUluZm8sIGludCByb3RhdGlvbiwgaW50IHVpTW9kZSwKKyAgICAgICAgICAgIGludCBkdywgaW50IGRoKSB7CiAgICAgICAgIC8vIFRPRE86IE11bHRpZGlzcGxheTogZm9yIG5vdyBvbmx5IHVzZSB3aXRoIGRlZmF1bHQgZGlzcGxheS4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoID0gbVBvbGljeS5nZXRDb25maWdEaXNwbGF5V2lkdGgoZHcsIGRoLCByb3RhdGlvbik7CisgICAgICAgIGZpbmFsIGludCB3aWR0aCA9IG1Qb2xpY3kuZ2V0Q29uZmlnRGlzcGxheVdpZHRoKGR3LCBkaCwgcm90YXRpb24sIHVpTW9kZSk7CiAgICAgICAgIGlmICh3aWR0aCA8IGRpc3BsYXlJbmZvLnNtYWxsZXN0Tm9taW5hbEFwcFdpZHRoKSB7CiAgICAgICAgICAgICBkaXNwbGF5SW5mby5zbWFsbGVzdE5vbWluYWxBcHBXaWR0aCA9IHdpZHRoOwogICAgICAgICB9CiAgICAgICAgIGlmICh3aWR0aCA+IGRpc3BsYXlJbmZvLmxhcmdlc3ROb21pbmFsQXBwV2lkdGgpIHsKICAgICAgICAgICAgIGRpc3BsYXlJbmZvLmxhcmdlc3ROb21pbmFsQXBwV2lkdGggPSB3aWR0aDsKICAgICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gbVBvbGljeS5nZXRDb25maWdEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgcm90YXRpb24pOworICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gbVBvbGljeS5nZXRDb25maWdEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgcm90YXRpb24sIHVpTW9kZSk7CiAgICAgICAgIGlmIChoZWlnaHQgPCBkaXNwbGF5SW5mby5zbWFsbGVzdE5vbWluYWxBcHBIZWlnaHQpIHsKICAgICAgICAgICAgIGRpc3BsYXlJbmZvLnNtYWxsZXN0Tm9taW5hbEFwcEhlaWdodCA9IGhlaWdodDsKICAgICAgICAgfQpAQCAtNjg0NSwxMSArNjg4OSwxMSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgaW50IHJlZHVjZUNvbmZpZ0xheW91dChpbnQgY3VyTGF5b3V0LCBpbnQgcm90YXRpb24sIGZsb2F0IGRlbnNpdHksCi0gICAgICAgICAgICBpbnQgZHcsIGludCBkaCkgeworICAgICAgICAgICAgaW50IGR3LCBpbnQgZGgsIGludCB1aU1vZGUpIHsKICAgICAgICAgLy8gVE9ETzogTXVsdGlkaXNwbGF5OiBmb3Igbm93IG9ubHkgdXNlIHdpdGggZGVmYXVsdCBkaXNwbGF5LgogICAgICAgICAvLyBHZXQgdGhlIGFwcCBzY3JlZW4gc2l6ZSBhdCB0aGlzIHJvdGF0aW9uLgotICAgICAgICBpbnQgdyA9IG1Qb2xpY3kuZ2V0Tm9uRGVjb3JEaXNwbGF5V2lkdGgoZHcsIGRoLCByb3RhdGlvbik7Ci0gICAgICAgIGludCBoID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlIZWlnaHQoZHcsIGRoLCByb3RhdGlvbik7CisgICAgICAgIGludCB3ID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlXaWR0aChkdywgZGgsIHJvdGF0aW9uLCB1aU1vZGUpOworICAgICAgICBpbnQgaCA9IG1Qb2xpY3kuZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgcm90YXRpb24sIHVpTW9kZSk7CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc2NyZWVuIGxheW91dCBzaXplIGNsYXNzIGZvciB0aGlzIHJvdGF0aW9uLgogICAgICAgICBpbnQgbG9uZ1NpemUgPSB3OwpAQCAtNjg2NSw3ICs2OTA5LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgY29tcHV0ZVNpemVSYW5nZXNBbmRTY3JlZW5MYXlvdXQoRGlzcGxheUluZm8gZGlzcGxheUluZm8sIGJvb2xlYW4gcm90YXRlZCwKLSAgICAgICAgICAgICAgICAgIGludCBkdywgaW50IGRoLCBmbG9hdCBkZW5zaXR5LCBDb25maWd1cmF0aW9uIG91dENvbmZpZykgeworICAgICAgICAgICAgICAgICAgaW50IHVpTW9kZSwgaW50IGR3LCBpbnQgZGgsIGZsb2F0IGRlbnNpdHksIENvbmZpZ3VyYXRpb24gb3V0Q29uZmlnKSB7CiAgICAgICAgIC8vIFRPRE86IE11bHRpZGlzcGxheTogZm9yIG5vdyBvbmx5IHVzZSB3aXRoIGRlZmF1bHQgZGlzcGxheS4KIAogICAgICAgICAvLyBXZSBuZWVkIHRvIGRldGVybWluZSB0aGUgc21hbGxlc3Qgd2lkdGggdGhhdCB3aWxsIG9jY3VyIHVuZGVyIG5vcm1hbApAQCAtNjg4NCwyNCArNjkyOCwyNCBAQAogICAgICAgICBkaXNwbGF5SW5mby5zbWFsbGVzdE5vbWluYWxBcHBIZWlnaHQgPSAxPDwzMDsKICAgICAgICAgZGlzcGxheUluZm8ubGFyZ2VzdE5vbWluYWxBcHBXaWR0aCA9IDA7CiAgICAgICAgIGRpc3BsYXlJbmZvLmxhcmdlc3ROb21pbmFsQXBwSGVpZ2h0ID0gMDsKLSAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fMCwgdW5yb3REdywgdW5yb3REaCk7Ci0gICAgICAgIGFkanVzdERpc3BsYXlTaXplUmFuZ2VzKGRpc3BsYXlJbmZvLCBTdXJmYWNlLlJPVEFUSU9OXzkwLCB1bnJvdERoLCB1bnJvdER3KTsKLSAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fMTgwLCB1bnJvdER3LCB1bnJvdERoKTsKLSAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fMjcwLCB1bnJvdERoLCB1bnJvdER3KTsKKyAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fMCwgdWlNb2RlLCB1bnJvdER3LCB1bnJvdERoKTsKKyAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fOTAsIHVpTW9kZSwgdW5yb3REaCwgdW5yb3REdyk7CisgICAgICAgIGFkanVzdERpc3BsYXlTaXplUmFuZ2VzKGRpc3BsYXlJbmZvLCBTdXJmYWNlLlJPVEFUSU9OXzE4MCwgdWlNb2RlLCB1bnJvdER3LCB1bnJvdERoKTsKKyAgICAgICAgYWRqdXN0RGlzcGxheVNpemVSYW5nZXMoZGlzcGxheUluZm8sIFN1cmZhY2UuUk9UQVRJT05fMjcwLCB1aU1vZGUsIHVucm90RGgsIHVucm90RHcpOwogICAgICAgICBpbnQgc2wgPSBDb25maWd1cmF0aW9uLnJlc2V0U2NyZWVuTGF5b3V0KG91dENvbmZpZy5zY3JlZW5MYXlvdXQpOwotICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl8wLCBkZW5zaXR5LCB1bnJvdER3LCB1bnJvdERoKTsKLSAgICAgICAgc2wgPSByZWR1Y2VDb25maWdMYXlvdXQoc2wsIFN1cmZhY2UuUk9UQVRJT05fOTAsIGRlbnNpdHksIHVucm90RGgsIHVucm90RHcpOwotICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl8xODAsIGRlbnNpdHksIHVucm90RHcsIHVucm90RGgpOwotICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl8yNzAsIGRlbnNpdHksIHVucm90RGgsIHVucm90RHcpOworICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl8wLCBkZW5zaXR5LCB1bnJvdER3LCB1bnJvdERoLCB1aU1vZGUpOworICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl85MCwgZGVuc2l0eSwgdW5yb3REaCwgdW5yb3REdywgdWlNb2RlKTsKKyAgICAgICAgc2wgPSByZWR1Y2VDb25maWdMYXlvdXQoc2wsIFN1cmZhY2UuUk9UQVRJT05fMTgwLCBkZW5zaXR5LCB1bnJvdER3LCB1bnJvdERoLCB1aU1vZGUpOworICAgICAgICBzbCA9IHJlZHVjZUNvbmZpZ0xheW91dChzbCwgU3VyZmFjZS5ST1RBVElPTl8yNzAsIGRlbnNpdHksIHVucm90RGgsIHVucm90RHcsIHVpTW9kZSk7CiAgICAgICAgIG91dENvbmZpZy5zbWFsbGVzdFNjcmVlbldpZHRoRHAgPSAoaW50KShkaXNwbGF5SW5mby5zbWFsbGVzdE5vbWluYWxBcHBXaWR0aCAvIGRlbnNpdHkpOwogICAgICAgICBvdXRDb25maWcuc2NyZWVuTGF5b3V0ID0gc2w7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBpbnQgcmVkdWNlQ29tcGF0Q29uZmlnV2lkdGhTaXplKGludCBjdXJTaXplLCBpbnQgcm90YXRpb24sIERpc3BsYXlNZXRyaWNzIGRtLAotICAgICAgICAgICAgaW50IGR3LCBpbnQgZGgpIHsKKyAgICBwcml2YXRlIGludCByZWR1Y2VDb21wYXRDb25maWdXaWR0aFNpemUoaW50IGN1clNpemUsIGludCByb3RhdGlvbiwgaW50IHVpTW9kZSwKKyAgICAgICAgICAgIERpc3BsYXlNZXRyaWNzIGRtLCBpbnQgZHcsIGludCBkaCkgewogICAgICAgICAvLyBUT0RPOiBNdWx0aWRpc3BsYXk6IGZvciBub3cgb25seSB1c2Ugd2l0aCBkZWZhdWx0IGRpc3BsYXkuCi0gICAgICAgIGRtLm5vbmNvbXBhdFdpZHRoUGl4ZWxzID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlXaWR0aChkdywgZGgsIHJvdGF0aW9uKTsKLSAgICAgICAgZG0ubm9uY29tcGF0SGVpZ2h0UGl4ZWxzID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlIZWlnaHQoZHcsIGRoLCByb3RhdGlvbik7CisgICAgICAgIGRtLm5vbmNvbXBhdFdpZHRoUGl4ZWxzID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlXaWR0aChkdywgZGgsIHJvdGF0aW9uLCB1aU1vZGUpOworICAgICAgICBkbS5ub25jb21wYXRIZWlnaHRQaXhlbHMgPSBtUG9saWN5LmdldE5vbkRlY29yRGlzcGxheUhlaWdodChkdywgZGgsIHJvdGF0aW9uLCB1aU1vZGUpOwogICAgICAgICBmbG9hdCBzY2FsZSA9IENvbXBhdGliaWxpdHlJbmZvLmNvbXB1dGVDb21wYXRpYmxlU2NhbGluZyhkbSwgbnVsbCk7CiAgICAgICAgIGludCBzaXplID0gKGludCkoKChkbS5ub25jb21wYXRXaWR0aFBpeGVscyAvIHNjYWxlKSAvIGRtLmRlbnNpdHkpICsgLjVmKTsKICAgICAgICAgaWYgKGN1clNpemUgPT0gMCB8fCBzaXplIDwgY3VyU2l6ZSkgewpAQCAtNjkxMCw3ICs2OTU0LDcgQEAKICAgICAgICAgcmV0dXJuIGN1clNpemU7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBpbnQgY29tcHV0ZUNvbXBhdFNtYWxsZXN0V2lkdGgoYm9vbGVhbiByb3RhdGVkLCBEaXNwbGF5TWV0cmljcyBkbSwgaW50IGR3LCBpbnQgZGgpIHsKKyAgICBwcml2YXRlIGludCBjb21wdXRlQ29tcGF0U21hbGxlc3RXaWR0aChib29sZWFuIHJvdGF0ZWQsIGludCB1aU1vZGUsIERpc3BsYXlNZXRyaWNzIGRtLCBpbnQgZHcsIGludCBkaCkgewogICAgICAgICAvLyBUT0RPOiBNdWx0aWRpc3BsYXk6IGZvciBub3cgb25seSB1c2Ugd2l0aCBkZWZhdWx0IGRpc3BsYXkuCiAgICAgICAgIG1UbXBEaXNwbGF5TWV0cmljcy5zZXRUbyhkbSk7CiAgICAgICAgIGZpbmFsIERpc3BsYXlNZXRyaWNzIHRtcERtID0gbVRtcERpc3BsYXlNZXRyaWNzOwpAQCAtNjkyMiwxNSArNjk2NiwxNSBAQAogICAgICAgICAgICAgdW5yb3REdyA9IGR3OwogICAgICAgICAgICAgdW5yb3REaCA9IGRoOwogICAgICAgICB9Ci0gICAgICAgIGludCBzdyA9IHJlZHVjZUNvbXBhdENvbmZpZ1dpZHRoU2l6ZSgwLCBTdXJmYWNlLlJPVEFUSU9OXzAsIHRtcERtLCB1bnJvdER3LCB1bnJvdERoKTsKLSAgICAgICAgc3cgPSByZWR1Y2VDb21wYXRDb25maWdXaWR0aFNpemUoc3csIFN1cmZhY2UuUk9UQVRJT05fOTAsIHRtcERtLCB1bnJvdERoLCB1bnJvdER3KTsKLSAgICAgICAgc3cgPSByZWR1Y2VDb21wYXRDb25maWdXaWR0aFNpemUoc3csIFN1cmZhY2UuUk9UQVRJT05fMTgwLCB0bXBEbSwgdW5yb3REdywgdW5yb3REaCk7Ci0gICAgICAgIHN3ID0gcmVkdWNlQ29tcGF0Q29uZmlnV2lkdGhTaXplKHN3LCBTdXJmYWNlLlJPVEFUSU9OXzI3MCwgdG1wRG0sIHVucm90RGgsIHVucm90RHcpOworICAgICAgICBpbnQgc3cgPSByZWR1Y2VDb21wYXRDb25maWdXaWR0aFNpemUoMCwgU3VyZmFjZS5ST1RBVElPTl8wLCB1aU1vZGUsIHRtcERtLCB1bnJvdER3LCB1bnJvdERoKTsKKyAgICAgICAgc3cgPSByZWR1Y2VDb21wYXRDb25maWdXaWR0aFNpemUoc3csIFN1cmZhY2UuUk9UQVRJT05fOTAsIHVpTW9kZSwgdG1wRG0sIHVucm90RGgsIHVucm90RHcpOworICAgICAgICBzdyA9IHJlZHVjZUNvbXBhdENvbmZpZ1dpZHRoU2l6ZShzdywgU3VyZmFjZS5ST1RBVElPTl8xODAsIHVpTW9kZSwgdG1wRG0sIHVucm90RHcsIHVucm90RGgpOworICAgICAgICBzdyA9IHJlZHVjZUNvbXBhdENvbmZpZ1dpZHRoU2l6ZShzdywgU3VyZmFjZS5ST1RBVElPTl8yNzAsIHVpTW9kZSwgdG1wRG0sIHVucm90RGgsIHVucm90RHcpOwogICAgICAgICByZXR1cm4gc3c7CiAgICAgfQogCiAgICAgLyoqIERvIG5vdCBjYWxsIGlmIG1EaXNwbGF5UmVhZHkgPT0gZmFsc2UgKi8KLSAgICBEaXNwbGF5SW5mbyB1cGRhdGVEaXNwbGF5QW5kT3JpZW50YXRpb25Mb2NrZWQoKSB7CisgICAgRGlzcGxheUluZm8gdXBkYXRlRGlzcGxheUFuZE9yaWVudGF0aW9uTG9ja2VkKGludCB1aU1vZGUpIHsKICAgICAgICAgLy8gVE9ETyhtdWx0aWRpc3BsYXkpOiBGb3Igbm93LCBhcHBseSBDb25maWd1cmF0aW9uIHRvIG1haW4gc2NyZWVuIG9ubHkuCiAgICAgICAgIGZpbmFsIERpc3BsYXlDb250ZW50IGRpc3BsYXlDb250ZW50ID0gZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCk7CiAKQEAgLTY5NjEsOCArNzAwNSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgYXBwbGljYXRpb24gZGlzcGxheSBtZXRyaWNzLgotICAgICAgICBmaW5hbCBpbnQgYXBwV2lkdGggPSBtUG9saWN5LmdldE5vbkRlY29yRGlzcGxheVdpZHRoKGR3LCBkaCwgbVJvdGF0aW9uKTsKLSAgICAgICAgZmluYWwgaW50IGFwcEhlaWdodCA9IG1Qb2xpY3kuZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgbVJvdGF0aW9uKTsKKyAgICAgICAgZmluYWwgaW50IGFwcFdpZHRoID0gbVBvbGljeS5nZXROb25EZWNvckRpc3BsYXlXaWR0aChkdywgZGgsIG1Sb3RhdGlvbiwgdWlNb2RlKTsKKyAgICAgICAgZmluYWwgaW50IGFwcEhlaWdodCA9IG1Qb2xpY3kuZ2V0Tm9uRGVjb3JEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgbVJvdGF0aW9uLCB1aU1vZGUpOwogICAgICAgICBmaW5hbCBEaXNwbGF5SW5mbyBkaXNwbGF5SW5mbyA9IGRpc3BsYXlDb250ZW50LmdldERpc3BsYXlJbmZvKCk7CiAgICAgICAgIGRpc3BsYXlJbmZvLnJvdGF0aW9uID0gbVJvdGF0aW9uOwogICAgICAgICBkaXNwbGF5SW5mby5sb2dpY2FsV2lkdGggPSBkdzsKQEAgLTY5OTQsMjAgKzcwMzgsMjQgQEAKIAogICAgIC8qKiBEbyBub3QgY2FsbCBpZiBtRGlzcGxheVJlYWR5ID09IGZhbHNlICovCiAgICAgdm9pZCBjb21wdXRlU2NyZWVuQ29uZmlndXJhdGlvbkxvY2tlZChDb25maWd1cmF0aW9uIGNvbmZpZykgewotICAgICAgICBmaW5hbCBEaXNwbGF5SW5mbyBkaXNwbGF5SW5mbyA9IHVwZGF0ZURpc3BsYXlBbmRPcmllbnRhdGlvbkxvY2tlZCgpOworICAgICAgICBmaW5hbCBEaXNwbGF5SW5mbyBkaXNwbGF5SW5mbyA9IHVwZGF0ZURpc3BsYXlBbmRPcmllbnRhdGlvbkxvY2tlZCgKKyAgICAgICAgICAgICAgICBjb25maWcudWlNb2RlKTsKIAogICAgICAgICBmaW5hbCBpbnQgZHcgPSBkaXNwbGF5SW5mby5sb2dpY2FsV2lkdGg7CiAgICAgICAgIGZpbmFsIGludCBkaCA9IGRpc3BsYXlJbmZvLmxvZ2ljYWxIZWlnaHQ7CiAgICAgICAgIGNvbmZpZy5vcmllbnRhdGlvbiA9IChkdyA8PSBkaCkgPyBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX1BPUlRSQUlUIDoKICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLk9SSUVOVEFUSU9OX0xBTkRTQ0FQRTsKICAgICAgICAgY29uZmlnLnNjcmVlbldpZHRoRHAgPQotICAgICAgICAgICAgICAgIChpbnQpKG1Qb2xpY3kuZ2V0Q29uZmlnRGlzcGxheVdpZHRoKGR3LCBkaCwgbVJvdGF0aW9uKSAvIG1EaXNwbGF5TWV0cmljcy5kZW5zaXR5KTsKKyAgICAgICAgICAgICAgICAoaW50KShtUG9saWN5LmdldENvbmZpZ0Rpc3BsYXlXaWR0aChkdywgZGgsIG1Sb3RhdGlvbiwgY29uZmlnLnVpTW9kZSkgLworICAgICAgICAgICAgICAgICAgICAgICAgbURpc3BsYXlNZXRyaWNzLmRlbnNpdHkpOwogICAgICAgICBjb25maWcuc2NyZWVuSGVpZ2h0RHAgPQotICAgICAgICAgICAgICAgIChpbnQpKG1Qb2xpY3kuZ2V0Q29uZmlnRGlzcGxheUhlaWdodChkdywgZGgsIG1Sb3RhdGlvbikgLyBtRGlzcGxheU1ldHJpY3MuZGVuc2l0eSk7CisgICAgICAgICAgICAgICAgKGludCkobVBvbGljeS5nZXRDb25maWdEaXNwbGF5SGVpZ2h0KGR3LCBkaCwgbVJvdGF0aW9uLCBjb25maWcudWlNb2RlKSAvCisgICAgICAgICAgICAgICAgICAgICAgICBtRGlzcGxheU1ldHJpY3MuZGVuc2l0eSk7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gcm90YXRlZCA9IChtUm90YXRpb24gPT0gU3VyZmFjZS5ST1RBVElPTl85MAogICAgICAgICAgICAgICAgIHx8IG1Sb3RhdGlvbiA9PSBTdXJmYWNlLlJPVEFUSU9OXzI3MCk7Ci0gICAgICAgIGNvbXB1dGVTaXplUmFuZ2VzQW5kU2NyZWVuTGF5b3V0KGRpc3BsYXlJbmZvLCByb3RhdGVkLCBkdywgZGgsIG1EaXNwbGF5TWV0cmljcy5kZW5zaXR5LAotICAgICAgICAgICAgICAgIGNvbmZpZyk7CisKKyAgICAgICAgY29tcHV0ZVNpemVSYW5nZXNBbmRTY3JlZW5MYXlvdXQoZGlzcGxheUluZm8sIHJvdGF0ZWQsIGNvbmZpZy51aU1vZGUsIGR3LCBkaCwKKyAgICAgICAgICAgICAgICBtRGlzcGxheU1ldHJpY3MuZGVuc2l0eSwgY29uZmlnKTsKIAogICAgICAgICBjb25maWcuc2NyZWVuTGF5b3V0ID0gKGNvbmZpZy5zY3JlZW5MYXlvdXQgJiB+Q29uZmlndXJhdGlvbi5TQ1JFRU5MQVlPVVRfUk9VTkRfTUFTSykKICAgICAgICAgICAgICAgICB8ICgoZGlzcGxheUluZm8uZmxhZ3MgJiBEaXNwbGF5LkZMQUdfUk9VTkQpICE9IDAKQEAgLTcwMTYsNyArNzA2NCw3IEBACiAKICAgICAgICAgY29uZmlnLmNvbXBhdFNjcmVlbldpZHRoRHAgPSAoaW50KShjb25maWcuc2NyZWVuV2lkdGhEcCAvIG1Db21wYXRpYmxlU2NyZWVuU2NhbGUpOwogICAgICAgICBjb25maWcuY29tcGF0U2NyZWVuSGVpZ2h0RHAgPSAoaW50KShjb25maWcuc2NyZWVuSGVpZ2h0RHAgLyBtQ29tcGF0aWJsZVNjcmVlblNjYWxlKTsKLSAgICAgICAgY29uZmlnLmNvbXBhdFNtYWxsZXN0U2NyZWVuV2lkdGhEcCA9IGNvbXB1dGVDb21wYXRTbWFsbGVzdFdpZHRoKHJvdGF0ZWQsCisgICAgICAgIGNvbmZpZy5jb21wYXRTbWFsbGVzdFNjcmVlbldpZHRoRHAgPSBjb21wdXRlQ29tcGF0U21hbGxlc3RXaWR0aChyb3RhdGVkLCBjb25maWcudWlNb2RlLAogICAgICAgICAgICAgICAgIG1EaXNwbGF5TWV0cmljcywgZHcsIGRoKTsKICAgICAgICAgY29uZmlnLmRlbnNpdHlEcGkgPSBkaXNwbGF5SW5mby5sb2dpY2FsRGVuc2l0eURwaTsKIApAQCAtNzA3NSw5ICs3MTIzLDYgQEAKICAgICAgICAgICAgIG1ILnJlbW92ZU1lc3NhZ2VzKEguUkVQT1JUX0hBUkRfS0VZQk9BUkRfU1RBVFVTX0NIQU5HRSk7CiAgICAgICAgICAgICBtSC5zZW5kRW1wdHlNZXNzYWdlKEguUkVQT1JUX0hBUkRfS0VZQk9BUkRfU1RBVFVTX0NIQU5HRSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1TaG93SW1lV2l0aEhhcmRLZXlib2FyZCkgewotICAgICAgICAgICAgY29uZmlnLmtleWJvYXJkID0gQ29uZmlndXJhdGlvbi5LRVlCT0FSRF9OT0tFWVM7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBMZXQgdGhlIHBvbGljeSB1cGRhdGUgaGlkZGVuIHN0YXRlcy4KICAgICAgICAgY29uZmlnLmtleWJvYXJkSGlkZGVuID0gQ29uZmlndXJhdGlvbi5LRVlCT0FSREhJRERFTl9OTzsKQEAgLTcwODYsMTggKzcxMzEsNiBAQAogICAgICAgICBtUG9saWN5LmFkanVzdENvbmZpZ3VyYXRpb25Mdyhjb25maWcsIGtleWJvYXJkUHJlc2VuY2UsIG5hdmlnYXRpb25QcmVzZW5jZSk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgdXBkYXRlU2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmQoKSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewotICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBzaG93SW1lV2l0aEhhcmRLZXlib2FyZCA9IFNldHRpbmdzLlNlY3VyZS5nZXRJbnRGb3JVc2VyKAotICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwgU2V0dGluZ3MuU2VjdXJlLlNIT1dfSU1FX1dJVEhfSEFSRF9LRVlCT0FSRCwgMCwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRVc2VySWQpID09IDE7Ci0gICAgICAgICAgICBpZiAobVNob3dJbWVXaXRoSGFyZEtleWJvYXJkICE9IHNob3dJbWVXaXRoSGFyZEtleWJvYXJkKSB7Ci0gICAgICAgICAgICAgICAgbVNob3dJbWVXaXRoSGFyZEtleWJvYXJkID0gc2hvd0ltZVdpdGhIYXJkS2V5Ym9hcmQ7Ci0gICAgICAgICAgICAgICAgbUguc2VuZEVtcHR5TWVzc2FnZShILlNFTkRfTkVXX0NPTkZJR1VSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBub3RpZnlIYXJkS2V5Ym9hcmRTdGF0dXNDaGFuZ2UoKSB7CiAgICAgICAgIGZpbmFsIGJvb2xlYW4gYXZhaWxhYmxlOwogICAgICAgICBmaW5hbCBXaW5kb3dNYW5hZ2VySW50ZXJuYWwuT25IYXJkS2V5Ym9hcmRTdGF0dXNDaGFuZ2VMaXN0ZW5lciBsaXN0ZW5lcjsKQEAgLTcxNDYsMTggKzcxNzksMjUgQEAKICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgc3RhcnRSZXNpemluZ1Rhc2soRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQsIGludCBzdGFydFgsIGludCBzdGFydFkpIHsKLSAgICAgICAgVGFzayB0YXNrID0gbnVsbDsKKyAgICBwcml2YXRlIHZvaWQgaGFuZGxlVGFwT3V0c2lkZVRhc2soRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQsIGludCB4LCBpbnQgeSkgeworICAgICAgICBpbnQgdGFza0lkID0gLTE7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewotICAgICAgICAgICAgdGFzayA9IGRpc3BsYXlDb250ZW50LmZpbmRUYXNrRm9yQ29udHJvbFBvaW50KHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGlmICh0YXNrID09IG51bGwgfHwgIXN0YXJ0UG9zaXRpb25pbmdMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgIHRhc2suZ2V0VG9wVmlzaWJsZUFwcE1haW5XaW5kb3coKSwgdHJ1ZSAvKnJlc2l6ZSovLCBzdGFydFgsIHN0YXJ0WSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSBkaXNwbGF5Q29udGVudC5maW5kVGFza0ZvckNvbnRyb2xQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UG9zaXRpb25pbmdMb2NrZWQoCisgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLmdldFRvcFZpc2libGVBcHBNYWluV2luZG93KCksIHRydWUgLypyZXNpemUqLywgeCwgeSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YXNrSWQgPSB0YXNrLm1UYXNrSWQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRhc2tJZCA9IGRpc3BsYXlDb250ZW50LnRhc2tJZEZyb21Qb2ludCh4LCB5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0cnkgewotICAgICAgICAgICAgbUFjdGl2aXR5TWFuYWdlci5zZXRGb2N1c2VkVGFzayh0YXNrLm1UYXNrSWQpOwotICAgICAgICB9IGNhdGNoKFJlbW90ZUV4Y2VwdGlvbiBlKSB7fQorICAgICAgICBpZiAodGFza0lkID49IDApIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgbUFjdGl2aXR5TWFuYWdlci5zZXRGb2N1c2VkVGFzayh0YXNrSWQpOworICAgICAgICAgICAgfSBjYXRjaChSZW1vdGVFeGNlcHRpb24gZSkge30KKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBzdGFydFBvc2l0aW9uaW5nTG9ja2VkKApAQCAtNzQ3MiwxNiArNzUxMiwxNyBAQAogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVNFVF9BTlJfTUVTU0FHRSA9IDM4OwogICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQUxMUEFQRVJfRFJBV19QRU5ESU5HX1RJTUVPVVQgPSAzOTsKIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUQVBfRE9XTl9PVVRTSURFX1RBU0sgPSA0MDsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklOSVNIX1RBU0tfUE9TSVRJT05JTkcgPSA0MTsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklOSVNIX1RBU0tfUE9TSVRJT05JTkcgPSA0MDsKIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVUERBVEVfRE9DS0VEX1NUQUNLX0RJVklERVIgPSA0MjsKKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVVBEQVRFX0RPQ0tFRF9TVEFDS19ESVZJREVSID0gNDE7CiAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVTSVpFX1NUQUNLID0gNDM7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU0laRV9UQVNLID0gNDQ7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU0laRV9TVEFDSyA9IDQyOworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVNJWkVfVEFTSyA9IDQzOwogCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRXT19GSU5HRVJfU0NST0xMX1NUQVJUID0gNDU7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNIT1dfTk9OX1JFU0laRUFCTEVfRE9DS19UT0FTVCA9IDQ2OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBUV09fRklOR0VSX1NDUk9MTF9TVEFSVCA9IDQ0OworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSE9XX05PTl9SRVNJWkVBQkxFX0RPQ0tfVE9BU1QgPSA0NTsKKworICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVCA9IDQ2OwogCiAgICAgICAgIC8qKgogICAgICAgICAgKiBVc2VkIHRvIGRlbm90ZSB0aGF0IGFuIGludGVnZXIgZmllbGQgaW4gYSBtZXNzYWdlIHdpbGwgbm90IGJlIHVzZWQuCkBAIC03OTM1LDI3ICs3OTc2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlIFRBUF9PVVRTSURFX1RBU0s6IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRhc2tJZDsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNrSWQgPSAoKERpc3BsYXlDb250ZW50KW1zZy5vYmopLnRhc2tJZEZyb21Qb2ludChtc2cuYXJnMSwgbXNnLmFyZzIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0YXNrSWQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQWN0aXZpdHlNYW5hZ2VyLnNldEZvY3VzZWRUYXNrKHRhc2tJZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAgICAgY2FzZSBUV09fRklOR0VSX1NDUk9MTF9TVEFSVDogewogICAgICAgICAgICAgICAgICAgICBzdGFydFNjcm9sbGluZ1Rhc2soKERpc3BsYXlDb250ZW50KW1zZy5vYmosIG1zZy5hcmcxLCBtc2cuYXJnMik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSBUQVBfRE9XTl9PVVRTSURFX1RBU0s6IHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRSZXNpemluZ1Rhc2soKERpc3BsYXlDb250ZW50KW1zZy5vYmosIG1zZy5hcmcxLCBtc2cuYXJnMik7CisgICAgICAgICAgICAgICAgY2FzZSBUQVBfT1VUU0lERV9UQVNLOiB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRhcE91dHNpZGVUYXNrKChEaXNwbGF5Q29udGVudCltc2cub2JqLCBtc2cuYXJnMSwgbXNnLmFyZzIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtODA2NSw2ICs4MDkyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHRvYXN0LnNob3coKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBXSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVDogeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBBcHBXaW5kb3dUb2tlbiB0b2tlbiA9IChBcHBXaW5kb3dUb2tlbikgbXNnLm9iajsKKyAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi5jbGVhclRpbWVkb3V0UmVwbGFjZXNMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChERUJVR19XSU5ET1dfVFJBQ0UpIHsKICAgICAgICAgICAgICAgICBTbG9nLnYoVEFHX1dNLCAiaGFuZGxlTWVzc2FnZTogZXhpdCIpOwpAQCAtODQyNiw2ICs4NDYwLDcgQEAKICAgICAgICAgYm9vbGVhbiBjb25maWdDaGFuZ2VkID0gdXBkYXRlT3JpZW50YXRpb25Gcm9tQXBwVG9rZW5zTG9ja2VkKGZhbHNlKTsKICAgICAgICAgbVRlbXBDb25maWd1cmF0aW9uLnNldFRvRGVmYXVsdHMoKTsKICAgICAgICAgbVRlbXBDb25maWd1cmF0aW9uLmZvbnRTY2FsZSA9IG1DdXJDb25maWd1cmF0aW9uLmZvbnRTY2FsZTsKKyAgICAgICAgbVRlbXBDb25maWd1cmF0aW9uLnVpTW9kZSA9IG1DdXJDb25maWd1cmF0aW9uLnVpTW9kZTsKICAgICAgICAgY29tcHV0ZVNjcmVlbkNvbmZpZ3VyYXRpb25Mb2NrZWQobVRlbXBDb25maWd1cmF0aW9uKTsKICAgICAgICAgY29uZmlnQ2hhbmdlZCB8PSBtQ3VyQ29uZmlndXJhdGlvbi5kaWZmKG1UZW1wQ29uZmlndXJhdGlvbikgIT0gMDsKIApAQCAtODU4Nyw3ICs4NjIyLDcgQEAKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtVG9rZW5zID0gdG9rZW5zLnNpemUoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCB0b2tlbk5keCA9IDA7IHRva2VuTmR4IDwgbnVtVG9rZW5zOyArK3Rva2VuTmR4KSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbmFsIEFwcFdpbmRvd1Rva2VuIHd0b2tlbiA9IHRva2Vucy5nZXQodG9rZW5OZHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAod3Rva2VuLm1Jc0V4aXRpbmcgJiYgIXd0b2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHd0b2tlbi5tSXNFeGl0aW5nICYmICF3dG9rZW4ud2FpdGluZ0ZvclJlcGxhY2VtZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGkgPSByZUFkZEFwcFdpbmRvd3NMb2NrZWQoZGlzcGxheUNvbnRlbnQsIGksIHd0b2tlbik7CkBAIC04NjIxLDEwMiArODY1Niw2IEBACiAgICAgICAgIEFycmF5cy5maWxsKG1SZWJ1aWxkVG1wLCBudWxsKTsKICAgICB9CiAKLSAgICBmaW5hbCB2b2lkIGFzc2lnbkxheWVyc0xvY2tlZChXaW5kb3dMaXN0IHdpbmRvd3MpIHsKLSAgICAgICAgaW50IE4gPSB3aW5kb3dzLnNpemUoKTsKLSAgICAgICAgaW50IGN1ckJhc2VMYXllciA9IDA7Ci0gICAgICAgIGludCBjdXJMYXllciA9IDA7Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIGlmIChERUJVR19MQVlFUlMpIFNsb2cudihUQUdfV00sICJBc3NpZ25pbmcgbGF5ZXJzIGJhc2VkIG9uIHdpbmRvd3M9IiArIHdpbmRvd3MsCi0gICAgICAgICAgICAgICAgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImhlcmUiKS5maWxsSW5TdGFja1RyYWNlKCkpOwotCi0gICAgICAgIGJvb2xlYW4gYW55TGF5ZXJDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChpPTA7IGk8TjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZSB3ID0gd2luZG93cy5nZXQoaSk7Ci0gICAgICAgICAgICBmaW5hbCBXaW5kb3dTdGF0ZUFuaW1hdG9yIHdpbkFuaW1hdG9yID0gdy5tV2luQW5pbWF0b3I7Ci0gICAgICAgICAgICBib29sZWFuIGxheWVyQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgaW50IG9sZExheWVyID0gdy5tTGF5ZXI7Ci0gICAgICAgICAgICBpZiAody5tQmFzZUxheWVyID09IGN1ckJhc2VMYXllciB8fCB3Lm1Jc0ltV2luZG93IHx8IChpID4gMCAmJiB3Lm1Jc1dhbGxwYXBlcikpIHsKLSAgICAgICAgICAgICAgICBjdXJMYXllciArPSBXSU5ET1dfTEFZRVJfTVVMVElQTElFUjsKLSAgICAgICAgICAgICAgICB3Lm1MYXllciA9IGN1ckxheWVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjdXJCYXNlTGF5ZXIgPSBjdXJMYXllciA9IHcubUJhc2VMYXllcjsKLSAgICAgICAgICAgICAgICB3Lm1MYXllciA9IGN1ckxheWVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcubUxheWVyICE9IG9sZExheWVyKSB7Ci0gICAgICAgICAgICAgICAgbGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBhbnlMYXllckNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWwgQXBwV2luZG93VG9rZW4gd3Rva2VuID0gdy5tQXBwVG9rZW47Ci0gICAgICAgICAgICBvbGRMYXllciA9IHdpbkFuaW1hdG9yLm1BbmltTGF5ZXI7Ci0gICAgICAgICAgICBpZiAody5tVGFyZ2V0QXBwVG9rZW4gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHdpbkFuaW1hdG9yLm1BbmltTGF5ZXIgPQotICAgICAgICAgICAgICAgICAgICAgICAgdy5tTGF5ZXIgKyB3Lm1UYXJnZXRBcHBUb2tlbi5tQXBwQW5pbWF0b3IuYW5pbUxheWVyQWRqdXN0bWVudDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAod3Rva2VuICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB3aW5BbmltYXRvci5tQW5pbUxheWVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHcubUxheWVyICsgd3Rva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50OwotICAgICAgICAgICAgICAgIGZvcmNlSGlnaGVyTGF5ZXJJZk5lZWRlZCh3LCB3aW5BbmltYXRvciwgd3Rva2VuKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2luQW5pbWF0b3IubUFuaW1MYXllciA9IHcubUxheWVyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcubUlzSW1XaW5kb3cpIHsKLSAgICAgICAgICAgICAgICB3aW5BbmltYXRvci5tQW5pbUxheWVyICs9IG1JbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQ7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHcubUlzV2FsbHBhcGVyKSB7Ci0gICAgICAgICAgICAgICAgd2luQW5pbWF0b3IubUFuaW1MYXllciArPSBtV2FsbHBhcGVyQ29udHJvbGxlckxvY2tlZC5nZXRBbmltTGF5ZXJBZGp1c3RtZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2luQW5pbWF0b3IubUFuaW1MYXllciAhPSBvbGRMYXllcikgewotICAgICAgICAgICAgICAgIGxheWVyQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYW55TGF5ZXJDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsIERpbUxheWVyLkRpbUxheWVyVXNlciBkaW1MYXllclVzZXIgPSB3LmdldERpbUxheWVyVXNlcigpOwotICAgICAgICAgICAgZmluYWwgRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQgPSB3LmdldERpc3BsYXlDb250ZW50KCk7Ci0gICAgICAgICAgICBpZiAobGF5ZXJDaGFuZ2VkICYmIGRpbUxheWVyVXNlciAhPSBudWxsICYmIGRpc3BsYXlDb250ZW50ICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQubURpbUxheWVyQ29udHJvbGxlci5pc0RpbW1pbmcoZGltTGF5ZXJVc2VyLCB3aW5BbmltYXRvcikpIHsKLSAgICAgICAgICAgICAgICAvLyBGb3JjZSBhbiBhbmltYXRpb24gcGFzcyBqdXN0IHRvIHVwZGF0ZSB0aGUgbURpbUxheWVyIGxheWVyLgotICAgICAgICAgICAgICAgIHNjaGVkdWxlQW5pbWF0aW9uTG9ja2VkKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUdfTEFZRVJTKSBTbG9nLnYoVEFHX1dNLCAiQXNzaWduIGxheWVyICIgKyB3ICsgIjogIgotICAgICAgICAgICAgICAgICAgICArICJtQmFzZT0iICsgdy5tQmFzZUxheWVyCi0gICAgICAgICAgICAgICAgICAgICsgIiBtTGF5ZXI9IiArIHcubUxheWVyCi0gICAgICAgICAgICAgICAgICAgICsgKHd0b2tlbiA9PSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiA6ICIgbUFwcExheWVyPSIgKyB3dG9rZW4ubUFwcEFuaW1hdG9yLmFuaW1MYXllckFkanVzdG1lbnQpCi0gICAgICAgICAgICAgICAgICAgICsgIiA9bUFuaW1MYXllcj0iICsgd2luQW5pbWF0b3IubUFuaW1MYXllcik7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgIC8vICAgICJBc3NpZ25lZCBsYXllciAiICsgY3VyTGF5ZXIgKyAiIHRvICIgKyB3Lm1DbGllbnQuYXNCaW5kZXIoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvL1RPRE8gKG11bHRpZGlzcGxheSk6IE1hZ25pZmljYXRpb24gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHRoZSBkZWZhdWx0IGRpc3BsYXkuCi0gICAgICAgIGlmIChtQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIgIT0gbnVsbCAmJiBhbnlMYXllckNoYW5nZWQKLSAgICAgICAgICAgICAgICAmJiB3aW5kb3dzLmdldCh3aW5kb3dzLnNpemUoKSAtIDEpLmdldERpc3BsYXlJZCgpID09IERpc3BsYXkuREVGQVVMVF9ESVNQTEFZKSB7Ci0gICAgICAgICAgICBtQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIub25XaW5kb3dMYXllcnNDaGFuZ2VkTG9ja2VkKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZm9yY2VIaWdoZXJMYXllcklmTmVlZGVkKFdpbmRvd1N0YXRlIHcsIFdpbmRvd1N0YXRlQW5pbWF0b3Igd2luQW5pbWF0b3IsCi0gICAgICAgICAgICBBcHBXaW5kb3dUb2tlbiB3dG9rZW4pIHsKLSAgICAgICAgYm9vbGVhbiBmb3JjZSA9IGZhbHNlOwotICAgICAgICBpZiAod3Rva2VuLm1XaWxsUmVwbGFjZVdpbmRvdyAmJiB3dG9rZW4ubVJlcGxhY2luZ1dpbmRvdyAhPSB3Ci0gICAgICAgICAgICAgICAgJiYgd3Rva2VuLm1BbmltYXRlUmVwbGFjaW5nV2luZG93KSB7Ci0gICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgd2Ugd2lsbCBiZSBhbmltYXRpbmcgYSByZWxhdW5jaGluZyB3aW5kb3cgaW4gdGhlIG5lYXIgZnV0dXJlLAotICAgICAgICAgICAgLy8gd2hpY2ggd2lsbCByZWNlaXZlIGEgei1vcmRlciBpbmNyZWFzZS4gV2Ugd2FudCB0aGUgcmVwbGFjZWQgd2luZG93IHRvCi0gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSByZWNlaXZlIHRoZSBzYW1lIHRyZWF0bWVudCwgZS5nLiB0byBiZSBhYm92ZSB0aGUgZG9jayBkaXZpZGVyLgotICAgICAgICAgICAgZm9yY2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZm9yY2UpIHsKLSAgICAgICAgICAgIGZpbmFsIFRhc2tTdGFjayBzdGFjayA9IHcuZ2V0U3RhY2soKTsKLSAgICAgICAgICAgIGlmIChzdGFjayAhPSBudWxsICYmIChTdGFja0lkLnNob3VsZEluY3JlYXNlQXBwbGljYXRpb25XaW5kb3dMYXllcihzdGFjay5tU3RhY2tJZCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHBpbm5lZCBhbmQgZG9ja2VkIHN0YWNrIHdpbmRvdywgd2Ugd2FudCB0byBtYWtlIHRoZW0gYWJvdmUgb3RoZXIgd2luZG93cwotICAgICAgICAgICAgICAgIC8vIGFsc28gd2hlbiB0aGVzZSB3aW5kb3dzIGFyZSBhbmltYXRpbmcuCi0gICAgICAgICAgICAgICAgZm9yY2UgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmb3JjZSkgewotICAgICAgICAgICAgdy5tTGF5ZXIgKz0gVFlQRV9MQVlFUl9PRkZTRVQ7Ci0gICAgICAgICAgICB3aW5BbmltYXRvci5tQW5pbUxheWVyICs9IFRZUEVfTEFZRVJfT0ZGU0VUOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgdm9pZCBtYWtlV2luZG93RnJlZXppbmdTY3JlZW5JZk5lZWRlZExvY2tlZChXaW5kb3dTdGF0ZSB3KSB7CiAgICAgICAgIC8vIElmIHRoZSBzY3JlZW4gaXMgY3VycmVudGx5IGZyb3plbiBvciBvZmYsIHRoZW4ga2VlcAogICAgICAgICAvLyBpdCBmcm96ZW4vb2ZmIHVudGlsIHRoaXMgd2luZG93IGRyYXdzIGF0IGl0cyBuZXcKQEAgLTkwODcsNyArOTAyNiw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFVQREFURV9GT0NVU19XSUxMX1BMQUNFX1NVUkZBQ0VTKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIENsaWVudCB3aWxsIGRvIHRoZSBsYXlvdXQsIGJ1dCB3ZSBuZWVkIHRvIGFzc2lnbiBsYXllcnMKICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIGhhbmRsZU5ld1dpbmRvd0xvY2tlZCgpIGJlbG93LgotICAgICAgICAgICAgICAgICAgICBhc3NpZ25MYXllcnNMb2NrZWQoZGlzcGxheUNvbnRlbnQuZ2V0V2luZG93TGlzdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbUxheWVyc0NvbnRyb2xsZXIuYXNzaWduTGF5ZXJzTG9ja2VkKGRpc3BsYXlDb250ZW50LmdldFdpbmRvd0xpc3QoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC05MTYxLDggKzkxMDAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHd0b2tlbiA9PSB0b2tlbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1Gb2N1c2VkQXBwID09IHRva2VuICYmIHRva2VuLnN0YWNrQ2FuUmVjZWl2ZUtleXMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdob29wcywgd2UgYXJlIGJlbG93IHRoZSBmb2N1c2VkIGFwcCB3aG9zZSBzdGFjayBjYW4gcmVjZWl2ZSBrZXlzLi4uCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUZvY3VzZWRBcHAgPT0gdG9rZW4gJiYgdG9rZW4ud2luZG93c0FyZUZvY3VzYWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hvb3BzLCB3ZSBhcmUgYmVsb3cgdGhlIGZvY3VzZWQgYXBwIHdob3NlIHdpbmRvd3MgYXJlIGZvY3VzYWJsZS4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGZvY3VzIGZvciB5b3UhISEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxMT0dWIHx8IERFQlVHX0ZPQ1VTX0xJR0hUKSBTbG9nLnYoVEFHX1dNLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmRGb2N1c2VkV2luZG93OiBSZWFjaGVkIGZvY3VzZWQgYXBwPSIgKyBtRm9jdXNlZEFwcCk7CkBAIC05NTQ3LDYgKzk0ODYsMzIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIG5vdGlmeUFwcFJlbGF1bmNoaW5nKElCaW5kZXIgdG9rZW4pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtV2luZG93TWFwKSB7CisgICAgICAgICAgICBBcHBXaW5kb3dUb2tlbiBhcHBXaW5kb3cgPSBmaW5kQXBwV2luZG93VG9rZW4odG9rZW4pOworICAgICAgICAgICAgaWYgKGNhbkZyZWV6ZUJvdW5kcyhhcHBXaW5kb3cpKSB7CisgICAgICAgICAgICAgICAgYXBwV2luZG93LmZyZWV6ZUJvdW5kcygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgbm90aWZ5QXBwUmVsYXVuY2hpbmdGaW5pc2hlZChJQmluZGVyIHRva2VuKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgQXBwV2luZG93VG9rZW4gYXBwV2luZG93ID0gZmluZEFwcFdpbmRvd1Rva2VuKHRva2VuKTsKKyAgICAgICAgICAgIGlmIChjYW5GcmVlemVCb3VuZHMoYXBwV2luZG93KSkgeworICAgICAgICAgICAgICAgIGFwcFdpbmRvdy51bmZyZWV6ZUJvdW5kcygpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBib29sZWFuIGNhbkZyZWV6ZUJvdW5kcyhBcHBXaW5kb3dUb2tlbiBhcHBXaW5kb3cpIHsKKworICAgICAgICAvLyBGb3IgZnJlZWZvcm0gd2luZG93cywgd2UgY2FuJ3QgZnJlZXplIHRoZSBib3VuZHMgYXQgdGhlIG1vbWVudCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZQorICAgICAgICAvLyB0aGUgcmVzaXppbmcgdW5yZXNwb25zaXZlLgorICAgICAgICByZXR1cm4gYXBwV2luZG93ICE9IG51bGwgJiYgYXBwV2luZG93Lm1UYXNrICE9IG51bGwKKyAgICAgICAgICAgICAgICAmJiAhYXBwV2luZG93Lm1UYXNrLmluRnJlZWZvcm1Xb3Jrc3BhY2UoKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBQb2xpY3lMb2NrZWQoUHJpbnRXcml0ZXIgcHcsIFN0cmluZ1tdIGFyZ3MsIGJvb2xlYW4gZHVtcEFsbCkgewogICAgICAgICBwdy5wcmludGxuKCJXSU5ET1cgTUFOQUdFUiBQT0xJQ1kgU1RBVEUgKGR1bXBzeXMgd2luZG93IHBvbGljeSkiKTsKICAgICAgICAgbVBvbGljeS5kdW1wKCIgICAgIiwgcHcsIGFyZ3MpOwpAQCAtOTc3NSwxMyArOTc0MCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtV2luZG93UGxhY2VyTG9ja2VkLmR1bXAocHcsICIgICIpOwogICAgICAgICAgICAgbVdhbGxwYXBlckNvbnRyb2xsZXJMb2NrZWQuZHVtcChwdywgIiAgIik7Ci0gICAgICAgICAgICBpZiAobUlucHV0TWV0aG9kQW5pbUxheWVyQWRqdXN0bWVudCAhPSAwIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1XYWxscGFwZXJDb250cm9sbGVyTG9ja2VkLmdldEFuaW1MYXllckFkanVzdG1lbnQoKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgbUlucHV0TWV0aG9kQW5pbUxheWVyQWRqdXN0bWVudD0iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KG1JbnB1dE1ldGhvZEFuaW1MYXllckFkanVzdG1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIiAgbVdhbGxwYXBlckFuaW1MYXllckFkanVzdG1lbnQ9Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKG1XYWxscGFwZXJDb250cm9sbGVyTG9ja2VkLmdldEFuaW1MYXllckFkanVzdG1lbnQoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtTGF5ZXJzQ29udHJvbGxlci5kdW1wKHB3LCAiICAiKTsKICAgICAgICAgICAgIHB3LnByaW50KCIgIG1TeXN0ZW1Cb290ZWQ9Iik7IHB3LnByaW50KG1TeXN0ZW1Cb290ZWQpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIG1EaXNwbGF5RW5hYmxlZD0iKTsgcHcucHJpbnRsbihtRGlzcGxheUVuYWJsZWQpOwogICAgICAgICAgICAgaWYgKG5lZWRzTGF5b3V0KCkpIHsKQEAgLTk4MTgsMTcgKzk3NzcsMjIgQEAKICAgICBib29sZWFuIGR1bXBXaW5kb3dzKFByaW50V3JpdGVyIHB3LCBTdHJpbmcgbmFtZSwgU3RyaW5nW10gYXJncywKICAgICAgICAgICAgIGludCBvcHRpLCBib29sZWFuIGR1bXBBbGwpIHsKICAgICAgICAgV2luZG93TGlzdCB3aW5kb3dzID0gbmV3IFdpbmRvd0xpc3QoKTsKLSAgICAgICAgaWYgKCJ2aXNpYmxlIi5lcXVhbHMobmFtZSkgfHwgInZpc2libGUtYXBwcyIuZXF1YWxzKG5hbWUpKSB7Ci0gICAgICAgICAgICBmaW5hbCBib29sZWFuIGFwcHNPbmx5ID0gInZpc2libGUtYXBwcyIuZXF1YWxzKG5hbWUpOworICAgICAgICBpZiAoImFwcHMiLmVxdWFscyhuYW1lKSB8fCAidmlzaWJsZSIuZXF1YWxzKG5hbWUpIHx8ICJ2aXNpYmxlLWFwcHMiLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgZmluYWwgYm9vbGVhbiBhcHBzT25seSA9IG5hbWUuY29udGFpbnMoImFwcHMiKTsKKyAgICAgICAgICAgIGZpbmFsIGJvb2xlYW4gdmlzaWJsZU9ubHkgPSBuYW1lLmNvbnRhaW5zKCJ2aXNpYmxlIik7CiAgICAgICAgICAgICBzeW5jaHJvbml6ZWQobVdpbmRvd01hcCkgeworICAgICAgICAgICAgICAgIGlmIChhcHBzT25seSkgeworICAgICAgICAgICAgICAgICAgICBkdW1wRGlzcGxheUNvbnRlbnRzTG9ja2VkKHB3LCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbnVtRGlzcGxheXMgPSBtRGlzcGxheUNvbnRlbnRzLnNpemUoKTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBkaXNwbGF5TmR4ID0gMDsgZGlzcGxheU5keCA8IG51bURpc3BsYXlzOyArK2Rpc3BsYXlOZHgpIHsKICAgICAgICAgICAgICAgICAgICAgZmluYWwgV2luZG93TGlzdCB3aW5kb3dMaXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGlzcGxheUNvbnRlbnRzLnZhbHVlQXQoZGlzcGxheU5keCkuZ2V0V2luZG93TGlzdCgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB3aW5OZHggPSB3aW5kb3dMaXN0LnNpemUoKSAtIDE7IHdpbk5keCA+PSAwOyAtLXdpbk5keCkgewogICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgdyA9IHdpbmRvd0xpc3QuZ2V0KHdpbk5keCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAody5tV2luQW5pbWF0b3IuZ2V0U2hvd24oKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIWFwcHNPbmx5IHx8IChhcHBzT25seSAmJiB3Lm1BcHBUb2tlbiAhPSBudWxsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIXZpc2libGVPbmx5IHx8IHcubVdpbkFuaW1hdG9yLmdldFNob3duKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICghYXBwc09ubHkgfHwgdy5tQXBwVG9rZW4gIT0gbnVsbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzLmFkZCh3KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTAyMTMsMjUgKzEwMTc3LDQzIEBACiAgICAgICogQHBhcmFtIHRva2VuIEFwcGxpY2F0aW9uIHRva2VuIGZvciB3aGljaCB0aGUgYWN0aXZpdHkgd2lsbCBiZSByZWxhdW5jaGVkLgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldFJlcGxhY2luZ1dpbmRvdyhJQmluZGVyIHRva2VuLCBib29sZWFuIGFuaW1hdGUpIHsKKyAgICAgICAgQXBwV2luZG93VG9rZW4gYXBwV2luZG93VG9rZW4gPSBudWxsOwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1XaW5kb3dNYXApIHsKLSAgICAgICAgICAgIEFwcFdpbmRvd1Rva2VuIGFwcFdpbmRvd1Rva2VuID0gZmluZEFwcFdpbmRvd1Rva2VuKHRva2VuKTsKKyAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuID0gZmluZEFwcFdpbmRvd1Rva2VuKHRva2VuKTsKICAgICAgICAgICAgIGlmIChhcHBXaW5kb3dUb2tlbiA9PSBudWxsIHx8ICFhcHBXaW5kb3dUb2tlbi5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAgIFNsb2cudyhUQUdfV00sICJBdHRlbXB0ZWQgdG8gc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiICsgdG9rZW4pOworICAgICAgICAgICAgICAgIFNsb2cudyhUQUdfV00sICJBdHRlbXB0ZWQgdG8gc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoREVCVUdfQUREX1JFTU9WRSkgU2xvZy5kKFRBR19XTSwgIk1hcmtpbmcgYXBwIHRva2VuICIgKyBhcHBXaW5kb3dUb2tlbgotICAgICAgICAgICAgICAgICAgICArICIgYXMgcmVwbGFjaW5nIHdpbmRvdy4iKTsKLSAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLm1XaWxsUmVwbGFjZVdpbmRvdyA9IHRydWU7Ci0gICAgICAgICAgICBhcHBXaW5kb3dUb2tlbi5tSGFzUmVwbGFjZWRXaW5kb3cgPSBmYWxzZTsKLSAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLm1BbmltYXRlUmVwbGFjaW5nV2luZG93ID0gYW5pbWF0ZTsKKyAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLnNldFJlcGxhY2luZ1dpbmRvd3MoYW5pbWF0ZSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChhbmltYXRlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU2V0LXVwIGR1bW15IGFuaW1hdGlvbiBzbyB3ZSBjYW4gc3RhcnQgdHJlYXRpbmcgd2luZG93cyBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgICAgICAgICAgICAgIC8vIHRva2VuIGxpa2UgdGhleSBhcmUgaW4gdHJhbnNpdGlvbiBiZWZvcmUgdGhlIG5ldyBhcHAgd2luZG93IGlzIHJlYWR5IGZvciB1cyB0bwotICAgICAgICAgICAgICAgIC8vIHJ1biB0aGUgcmVhbCB0cmFuc2l0aW9uIGFuaW1hdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoREVCVUdfQVBQX1RSQU5TSVRJT05TKSBTbG9nLnYoVEFHX1dNLAotICAgICAgICAgICAgICAgICAgICAgICAgInNldFJlcGxhY2luZ1dpbmRvdygpIFNldHRpbmcgZHVtbXkgYW5pbWF0aW9uIG9uOiAiICsgYXBwV2luZG93VG9rZW4pOwotICAgICAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLm1BcHBBbmltYXRvci5zZXREdW1teUFuaW1hdGlvbigpOworICAgIC8qKgorICAgICAqIElmIHdlJ3JlIHJlcGxhY2luZyB0aGUgd2luZG93LCBzY2hlZHVsZSBhIHRpbWVyIHRvIGNsZWFyIHRoZSByZXBsYWNlZCB3aW5kb3cKKyAgICAgKiBhZnRlciBhIHRpbWVvdXQsIGluIGNhc2UgdGhlIHJlcGxhY2luZyB3aW5kb3cgaXMgbm90IGNvbWluZy4KKyAgICAgKgorICAgICAqIElmIHdlJ3JlIG5vdCByZXBsYWNpbmcgdGhlIHdpbmRvdywgY2xlYXIgdGhlIHJlcGxhY2Ugd2luZG93IHNldHRpbmdzIG9mIHRoZSBhcHAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gdG9rZW4gQXBwbGljYXRpb24gdG9rZW4gZm9yIHRoZSBhY3Rpdml0eSB3aG9zZSB3aW5kb3cgbWlnaHQgYmUgcmVwbGFjZWQuCisgICAgICogQHBhcmFtIHJlcGxhY2luZyBXaGV0aGVyIHRoZSB3aW5kb3cgaXMgYmVpbmcgcmVwbGFjZWQgb3Igbm90LgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNjaGVkdWxlQ2xlYXJSZXBsYWNpbmdXaW5kb3dJZk5lZWRlZChJQmluZGVyIHRva2VuLCBib29sZWFuIHJlcGxhY2luZykgeworICAgICAgICBBcHBXaW5kb3dUb2tlbiBhcHBXaW5kb3dUb2tlbiA9IG51bGw7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgYXBwV2luZG93VG9rZW4gPSBmaW5kQXBwV2luZG93VG9rZW4odG9rZW4pOworICAgICAgICAgICAgaWYgKGFwcFdpbmRvd1Rva2VuID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTbG9nLncoVEFHX1dNLCAiQXR0ZW1wdGVkIHRvIHJlc2V0IHJlcGxhY2luZyB3aW5kb3cgb24gbm9uLWV4aXN0aW5nIGFwcCB0b2tlbiAiCisgICAgICAgICAgICAgICAgICAgICAgICArIHRva2VuKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVwbGFjaW5nKSB7CisgICAgICAgICAgICAgICAgbUgucmVtb3ZlTWVzc2FnZXMoSC5XSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVCk7CisgICAgICAgICAgICAgICAgbUguc2VuZE1lc3NhZ2VEZWxheWVkKAorICAgICAgICAgICAgICAgICAgICAgICAgbUgub2J0YWluTWVzc2FnZShILldJTkRPV19SRVBMQUNFTUVOVF9USU1FT1VULCBhcHBXaW5kb3dUb2tlbiksCisgICAgICAgICAgICAgICAgICAgICAgICBXSU5ET1dfUkVQTEFDRU1FTlRfVElNRU9VVF9EVVJBVElPTik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFwcFdpbmRvd1Rva2VuLnJlc2V0UmVwbGFjaW5nV2luZG93cygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTAyNTIsNiArMTAyMzQsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFJlc2l6ZURpbUxheWVyKGJvb2xlYW4gdmlzaWJsZSwgaW50IHRhcmdldFN0YWNrSWQsIGZsb2F0IGFscGhhKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgeworICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkuZ2V0RG9ja2VkRGl2aWRlckNvbnRyb2xsZXIoKS5zZXRSZXNpemVEaW1MYXllcigKKyAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSwgdGFyZ2V0U3RhY2tJZCwgYWxwaGEpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgc2V0VGFza1Jlc2l6ZWFibGUoaW50IHRhc2tJZCwgYm9vbGVhbiByZXNpemVhYmxlKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobVdpbmRvd01hcCkgewogICAgICAgICAgICAgVGFzayB0YXNrID0gbVRhc2tJZFRvVGFzay5nZXQodGFza0lkKTsKQEAgLTEwMjcwLDI1ICsxMDI2MCwyMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB7CiAgICAgICAgIGlmICghY2hlY2tDYWxsaW5nUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVHSVNURVJfV0lORE9XX01BTkFHRVJfTElTVEVORVJTLAotICAgICAgICAgICAgICAgICJyZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKCkiKSkgeworICAgICAgICAgICAgICAgICJyZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoKSIpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gVE9ETyhtdWx0aS1kaXNwbGF5KTogVGhlIGxpc3RlbmVyIGlzIHJlZ2lzdGVyZWQgb24gdGhlIGRlZmF1bHQgZGlzcGxheSBvbmx5LgotICAgICAgICBmaW5hbCBEb2NrZWRTdGFja0RpdmlkZXJDb250cm9sbGVyIGNvbnRyb2xsZXIgPQotICAgICAgICAgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLmdldERvY2tlZERpdmlkZXJDb250cm9sbGVyKCk7Ci0gICAgICAgIGNvbnRyb2xsZXIucmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcihsaXN0ZW5lcik7CisgICAgICAgIGdldERlZmF1bHREaXNwbGF5Q29udGVudExvY2tlZCgpLm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZC5yZWdpc3RlckRvY2tlZFN0YWNrTGlzdGVuZXIoCisgICAgICAgICAgICAgICAgbGlzdGVuZXIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RBcHBLZXlib2FyZFNob3J0Y3V0cyhJUmVzdWx0UmVjZWl2ZXIgcmVjZWl2ZXIpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGxpc3RlbmVyLmFzQmluZGVyKCkubGlua1RvRGVhdGgobmV3IElCaW5kZXIuRGVhdGhSZWNpcGllbnQoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgYmluZGVyRGllZCgpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0RGVmYXVsdERpc3BsYXlDb250ZW50TG9ja2VkKCkuZ2V0RG9ja2VkRGl2aWRlckNvbnRyb2xsZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWdpc3RlckRvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyKG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgZ2V0Rm9jdXNlZFdpbmRvdygpLm1DbGllbnQucmVxdWVzdEFwcEtleWJvYXJkU2hvcnRjdXRzKHJlY2VpdmVyKTsKICAgICAgICAgfSBjYXRjaCAoUmVtb3RlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGNvbnRyb2xsZXIucmVnaXN0ZXJEb2NrRGl2aWRlclZpc2liaWxpdHlMaXN0ZW5lcihudWxsKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdGF0ZS5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdGF0ZS5qYXZhCmluZGV4IDBmYzcxNDIuLmFmYmFmMDAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N0YXRlLmphdmEKQEAgLTc0LDcgKzc0LDkgQEAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkxBU1RfU1VCX1dJTkRPVzsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLk1BVENIX1BBUkVOVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19DT01QQVRJQkxFX1dJTkRPVzsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19MQVlPVVRfQ0hJTERfV0lORE9XX0lOX1BBUkVOVF9GUkFNRTsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19LRVlHVUFSRDsKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlBSSVZBVEVfRkxBR19XSUxMX05PVF9SRVBMQUNFX09OX1JFTEFVTkNIOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9BREpVU1RfUkVTSVpFOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuU09GVF9JTlBVVF9NQVNLX0FESlVTVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkc7CkBAIC0zMDcsNiArMzA5LDEyIEBACiAgICAgLy8gcG9zc2libGUgdG8gZHJhdy4KICAgICBmaW5hbCBSZWN0IG1PdXRzZXRGcmFtZSA9IG5ldyBSZWN0KCk7CiAKKyAgICAvKioKKyAgICAgKiBVc3VhbGx5IGVtcHR5LiBTZXQgdG8gdGhlIHRhc2sncyB0ZW1wSW5zZXRGcmFtZS4gU2VlCisgICAgICp7QGxpbmsgYW5kcm9pZC5hcHAuSUFjdGl2aXR5TWFuYWdlciNyZXNpemVEb2NrZWRTdGFja30uCisgICAgICovCisgICAgZmluYWwgUmVjdCBtSW5zZXRGcmFtZSA9IG5ldyBSZWN0KCk7CisKICAgICBib29sZWFuIG1Db250ZW50Q2hhbmdlZDsKIAogICAgIC8vIElmIGEgd2luZG93IHNob3dpbmcgYSB3YWxscGFwZXI6IHRoZSByZXF1ZXN0ZWQgb2Zmc2V0IGZvciB0aGUKQEAgLTQwMyw2ICs0MTEsMjAgQEAKICAgICAvLyB1c2VkIHRvIHN0YXJ0IGFuIGVudGVyaW5nIGFuaW1hdGlvbiBlYXJsaWVyLgogICAgIHB1YmxpYyBib29sZWFuIG1TdXJmYWNlU2F2ZWQgPSBmYWxzZTsKIAorICAgIC8vIFRoaXMgd2luZG93IHdpbGwgYmUgcmVwbGFjZWQgZHVlIHRvIHJlbGF1bmNoLiBUaGlzIGFsbG93cyB3aW5kb3cgbWFuYWdlcgorICAgIC8vIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzaW1wbGUgcmVtb3ZhbCBvZiBhIHdpbmRvdyBhbmQgcmVwbGFjZW1lbnQuIEluIHRoZSBsYXR0ZXIgY2FzZSBpdAorICAgIC8vIHdpbGwgcHJlc2VydmUgdGhlIG9sZCB3aW5kb3cgdW50aWwgdGhlIG5ldyBvbmUgaXMgZHJhd24uCisgICAgYm9vbGVhbiBtV2lsbFJlcGxhY2VXaW5kb3cgPSBmYWxzZTsKKyAgICAvLyBJZiB0cnVlLCB0aGUgcmVwbGFjZWQgd2luZG93IHdhcyBhbHJlYWR5IHJlcXVlc3RlZCB0byBiZSByZW1vdmVkLgorICAgIGJvb2xlYW4gbVJlcGxhY2luZ1JlbW92ZVJlcXVlc3RlZCA9IGZhbHNlOworICAgIC8vIFdoZXRoZXIgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSB3aW5kb3cgc2hvdWxkIHRyaWdnZXIgYXBwIHRyYW5zaXRpb24gYW5pbWF0aW9uLgorICAgIGJvb2xlYW4gbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBmYWxzZTsKKyAgICAvLyBJZiBub3QgbnVsbCwgdGhlIHdpbmRvdyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBvbGQgb25lLiBUaGlzIGlzIGJlaW5nIHNldCB3aGVuCisgICAgLy8gdGhlIHdpbmRvdyBpcyBhZGRlZCBhbmQgdW5zZXQgd2hlbiB0aGlzIHdpbmRvdyByZXBvcnRzIGl0cyBmaXJzdCBkcmF3LgorICAgIFdpbmRvd1N0YXRlIG1SZXBsYWNpbmdXaW5kb3cgPSBudWxsOworCisgICAgLy8gV2hldGhlciB0aGlzIHdpbmRvdyBpcyBiZWluZyBtb3ZlZCB2aWEgdGhlIHJlc2l6ZSBBUEkKKyAgICBib29sZWFuIG1Nb3ZlZEJ5UmVzaXplOwogICAgIC8qKgogICAgICAqIFdha2UgbG9jayBmb3IgZHJhd2luZy4KICAgICAgKiBFdmVuIHRob3VnaCBpdCdzIHNsaWdodGx5IG1vcmUgZXhwZW5zaXZlIHRvIGRvIHNvLCB3ZSB3aWxsIHVzZSBhIHNlcGFyYXRlIHdha2UgbG9jawpAQCAtNTIxLDcgKzU0Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBXaW5kb3dTdGF0ZSBhcHBXaW4gPSB0aGlzOwotICAgICAgICB3aGlsZSAoYXBwV2luLm1BdHRhY2hlZFdpbmRvdyAhPSBudWxsKSB7CisgICAgICAgIHdoaWxlIChhcHBXaW4uaXNDaGlsZFdpbmRvdygpKSB7CiAgICAgICAgICAgICBhcHBXaW4gPSBhcHBXaW4ubUF0dGFjaGVkV2luZG93OwogICAgICAgICB9CiAgICAgICAgIFdpbmRvd1Rva2VuIGFwcFRva2VuID0gYXBwV2luLm1Ub2tlbjsKQEAgLTU4MCw4ICs2MDIsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGNvbXB1dGVGcmFtZUx3KFJlY3QgcGYsIFJlY3QgZGYsIFJlY3Qgb2YsIFJlY3QgY2YsIFJlY3QgdmYsIFJlY3QgZGNmLCBSZWN0IHNmLAogICAgICAgICAgICAgUmVjdCBvc2YpIHsKLSAgICAgICAgaWYgKG1BcHBUb2tlbiAhPSBudWxsICYmIG1BcHBUb2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cKLSAgICAgICAgICAgICAgICAmJiAobUV4aXRpbmcgfHwgIW1BcHBUb2tlbi5tUmVwbGFjaW5nUmVtb3ZlUmVxdWVzdGVkKSkgeworICAgICAgICBpZiAobVdpbGxSZXBsYWNlV2luZG93ICYmIChtRXhpdGluZyB8fCAhbVJlcGxhY2luZ1JlbW92ZVJlcXVlc3RlZCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgd2luZG93IGlzIGJlaW5nIHJlcGxhY2VkIGFuZCBlaXRoZXIgYWxyZWFkeSBnb3QgaW5mb3JtYXRpb24gdGhhdCBpdCdzIGJlaW5nCiAgICAgICAgICAgICAvLyByZW1vdmVkIG9yIHdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBzb21lIGluZm9ybWF0aW9uLiBCZWNhdXNlIG9mIHRoaXMgd2UgZG9uJ3QKICAgICAgICAgICAgIC8vIHdhbnQgdG8gYXBwbHkgYW55IG1vcmUgY2hhbmdlcyB0byBpdCwgc28gaXQgcmVtYWlucyBpbiB0aGlzIHN0YXRlIHVudGlsIG5ldyB3aW5kb3cKQEAgLTU5MSwxMCArNjEyLDI2IEBACiAgICAgICAgIG1IYXZlRnJhbWUgPSB0cnVlOwogCiAgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IGdldFRhc2soKTsKLSAgICAgICAgZmluYWwgYm9vbGVhbiBub25GdWxsc2NyZWVuVGFzayA9IHRhc2sgIT0gbnVsbCAmJiAhdGFzay5pc0Z1bGxzY3JlZW4oKTsKKyAgICAgICAgZmluYWwgYm9vbGVhbiBmdWxsc2NyZWVuVGFzayA9IHRhc2sgPT0gbnVsbCB8fCB0YXNrLmlzRnVsbHNjcmVlbigpOwogICAgICAgICBmaW5hbCBib29sZWFuIGZyZWVmb3JtV29ya3NwYWNlID0gdGFzayAhPSBudWxsICYmIHRhc2suaW5GcmVlZm9ybVdvcmtzcGFjZSgpOwotICAgICAgICBpZiAobm9uRnVsbHNjcmVlblRhc2spIHsKKworICAgICAgICBpZiAoZnVsbHNjcmVlblRhc2sgfHwgKGlzQ2hpbGRXaW5kb3coKQorICAgICAgICAgICAgICAgICYmIChtQXR0cnMucHJpdmF0ZUZsYWdzICYgUFJJVkFURV9GTEFHX0xBWU9VVF9DSElMRF9XSU5ET1dfSU5fUEFSRU5UX0ZSQU1FKSAhPSAwKSkgeworICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSBwYXJlbnQgZnJhbWUgYXMgdGhlIGNvbnRhaW5pbmcgZnJhbWUgZm9yIGZ1bGxzY3JlZW4gYW5kIGNoaWxkIHdpbmRvd3MKKyAgICAgICAgICAgIG1Db250YWluaW5nRnJhbWUuc2V0KHBmKTsKKyAgICAgICAgICAgIG1EaXNwbGF5RnJhbWUuc2V0KGRmKTsKKyAgICAgICAgICAgIG1JbnNldEZyYW1lLnNldEVtcHR5KCk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0YXNrLmdldEJvdW5kcyhtQ29udGFpbmluZ0ZyYW1lKTsKKyAgICAgICAgICAgIHRhc2suZ2V0VGVtcEluc2V0Qm91bmRzKG1JbnNldEZyYW1lKTsKKyAgICAgICAgICAgIGlmIChtQXBwVG9rZW4gIT0gbnVsbCAmJiAhbUFwcFRva2VuLm1Gcm96ZW5Cb3VuZHMuaXNFbXB0eSgpKSB7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm91bmRzIGFyZSBmcm96ZW4sIHdlIHN0aWxsIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSB3aW5kb3cgZnJlZWx5IGFuZCBvbmx5CisgICAgICAgICAgICAgICAgLy8gZnJlZXplIHRoZSBzaXplLgorICAgICAgICAgICAgICAgIFJlY3QgZnJvemVuID0gbUFwcFRva2VuLm1Gcm96ZW5Cb3VuZHMucGVlaygpOworICAgICAgICAgICAgICAgIG1Db250YWluaW5nRnJhbWUucmlnaHQgPSBtQ29udGFpbmluZ0ZyYW1lLmxlZnQgKyBmcm96ZW4ud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBtQ29udGFpbmluZ0ZyYW1lLmJvdHRvbSA9IG1Db250YWluaW5nRnJhbWUudG9wICsgZnJvemVuLmhlaWdodCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZmluYWwgV2luZG93U3RhdGUgaW1lV2luID0gbVNlcnZpY2UubUlucHV0TWV0aG9kV2luZG93OwogICAgICAgICAgICAgaWYgKGltZVdpbiAhPSBudWxsICYmIGltZVdpbi5pc1Zpc2libGVOb3coKSAmJiBtU2VydmljZS5tSW5wdXRNZXRob2RUYXJnZXQgPT0gdGhpcwogICAgICAgICAgICAgICAgICAgICAmJiBtQ29udGFpbmluZ0ZyYW1lLmJvdHRvbSA+IGNmLmJvdHRvbSkgewpAQCAtNjExLDkgKzY0OCw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbURpc3BsYXlGcmFtZS5zZXQobUNvbnRhaW5pbmdGcmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtQ29udGFpbmluZ0ZyYW1lLnNldChwZik7Ci0gICAgICAgICAgICBtRGlzcGxheUZyYW1lLnNldChkZik7CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBpbnQgcHcgPSBtQ29udGFpbmluZ0ZyYW1lLndpZHRoKCk7CkBAIC02NTYsNiArNjkwLDEyIEBACiAgICAgICAgICAgICBtT3V0c2V0cy5zZXQoMCwgMCwgMCwgMCk7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBEZW5vdGVzIHRoZSBhY3R1YWwgZnJhbWUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluc2V0cy4gV2hlbiByZXNpemluZyBpbiBkb2NrZWQgbW9kZSwKKyAgICAgICAgLy8gd2UnZCBsaWtlIHRvIGZyZWV6ZSB0aGUgbGF5b3V0LCBzbyB3ZSBhbHNvIG5lZWQgdG8gZnJlZXplIHRoZSBpbnNldHMgdGVtcG9yYXJpbHkuIEJ5IHRoZQorICAgICAgICAvLyBub3Rpb24gb2YgYSB0YXNrIGhhdmluZyBhIGRpZmZlcmVudCBpbnNldCBmcmFtZSwgd2UgY2FuIGFjaGlldmUgdGhhdCB3aGlsZSBzdGlsbCBtb3ZpbmcKKyAgICAgICAgLy8gdGhlIHRhc2sgYXJvdW5kLgorICAgICAgICBmaW5hbCBSZWN0IGZyYW1lID0gIW1JbnNldEZyYW1lLmlzRW1wdHkoKSA/IG1JbnNldEZyYW1lIDogbUZyYW1lOworCiAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGVudCBhbmQgdmlzaWJsZSBmcmFtZXMgYXJlIGluc2lkZSBvZiB0aGUKICAgICAgICAgLy8gZmluYWwgd2luZG93IGZyYW1lLgogICAgICAgICBpZiAoZnJlZWZvcm1Xb3Jrc3BhY2UgJiYgIW1GcmFtZS5pc0VtcHR5KCkpIHsKQEAgLTY5MSw0MiArNzMxLDY5IEBACiAgICAgICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5zZXQobUZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1Db250ZW50RnJhbWUuc2V0KE1hdGgubWF4KG1Db250ZW50RnJhbWUubGVmdCwgbUZyYW1lLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtQ29udGVudEZyYW1lLnRvcCwgbUZyYW1lLnRvcCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1Db250ZW50RnJhbWUucmlnaHQsIG1GcmFtZS5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1Db250ZW50RnJhbWUuYm90dG9tLCBtRnJhbWUuYm90dG9tKSk7CisgICAgICAgICAgICBtQ29udGVudEZyYW1lLnNldChNYXRoLm1heChtQ29udGVudEZyYW1lLmxlZnQsIGZyYW1lLmxlZnQpLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtQ29udGVudEZyYW1lLnRvcCwgZnJhbWUudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obUNvbnRlbnRGcmFtZS5yaWdodCwgZnJhbWUucmlnaHQpLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtQ29udGVudEZyYW1lLmJvdHRvbSwgZnJhbWUuYm90dG9tKSk7CiAKLSAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUuc2V0KE1hdGgubWF4KG1WaXNpYmxlRnJhbWUubGVmdCwgbUZyYW1lLmxlZnQpLAotICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtVmlzaWJsZUZyYW1lLnRvcCwgbUZyYW1lLnRvcCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1WaXNpYmxlRnJhbWUucmlnaHQsIG1GcmFtZS5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1WaXNpYmxlRnJhbWUuYm90dG9tLCBtRnJhbWUuYm90dG9tKSk7CisgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLnNldChNYXRoLm1heChtVmlzaWJsZUZyYW1lLmxlZnQsIGZyYW1lLmxlZnQpLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtVmlzaWJsZUZyYW1lLnRvcCwgZnJhbWUudG9wKSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVZpc2libGVGcmFtZS5yaWdodCwgZnJhbWUucmlnaHQpLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtVmlzaWJsZUZyYW1lLmJvdHRvbSwgZnJhbWUuYm90dG9tKSk7CiAKLSAgICAgICAgICAgIG1TdGFibGVGcmFtZS5zZXQoTWF0aC5tYXgobVN0YWJsZUZyYW1lLmxlZnQsIG1GcmFtZS5sZWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgobVN0YWJsZUZyYW1lLnRvcCwgbUZyYW1lLnRvcCksCi0gICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1TdGFibGVGcmFtZS5yaWdodCwgbUZyYW1lLnJpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4obVN0YWJsZUZyYW1lLmJvdHRvbSwgbUZyYW1lLmJvdHRvbSkpOworICAgICAgICAgICAgbVN0YWJsZUZyYW1lLnNldChNYXRoLm1heChtU3RhYmxlRnJhbWUubGVmdCwgZnJhbWUubGVmdCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KG1TdGFibGVGcmFtZS50b3AsIGZyYW1lLnRvcCksCisgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKG1TdGFibGVGcmFtZS5yaWdodCwgZnJhbWUucmlnaHQpLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbihtU3RhYmxlRnJhbWUuYm90dG9tLCBmcmFtZS5ib3R0b20pKTsKICAgICAgICAgfQogCi0gICAgICAgIG1PdmVyc2Nhbkluc2V0cy5zZXQoTWF0aC5tYXgobU92ZXJzY2FuRnJhbWUubGVmdCAtIG1GcmFtZS5sZWZ0LCAwKSwKLSAgICAgICAgICAgICAgICBNYXRoLm1heChtT3ZlcnNjYW5GcmFtZS50b3AgLSBtRnJhbWUudG9wLCAwKSwKLSAgICAgICAgICAgICAgICBNYXRoLm1heChtRnJhbWUucmlnaHQgLSBtT3ZlcnNjYW5GcmFtZS5yaWdodCwgMCksCi0gICAgICAgICAgICAgICAgTWF0aC5tYXgobUZyYW1lLmJvdHRvbSAtIG1PdmVyc2NhbkZyYW1lLmJvdHRvbSwgMCkpOworICAgICAgICBtT3ZlcnNjYW5JbnNldHMuc2V0KE1hdGgubWF4KG1PdmVyc2NhbkZyYW1lLmxlZnQgLSBmcmFtZS5sZWZ0LCAwKSwKKyAgICAgICAgICAgICAgICBNYXRoLm1heChtT3ZlcnNjYW5GcmFtZS50b3AgLSBmcmFtZS50b3AsIDApLAorICAgICAgICAgICAgICAgIE1hdGgubWF4KGZyYW1lLnJpZ2h0IC0gbU92ZXJzY2FuRnJhbWUucmlnaHQsIDApLAorICAgICAgICAgICAgICAgIE1hdGgubWF4KGZyYW1lLmJvdHRvbSAtIG1PdmVyc2NhbkZyYW1lLmJvdHRvbSwgMCkpOwogCi0gICAgICAgIG1Db250ZW50SW5zZXRzLnNldChtQ29udGVudEZyYW1lLmxlZnQgLSBtRnJhbWUubGVmdCwKLSAgICAgICAgICAgICAgICBtQ29udGVudEZyYW1lLnRvcCAtIG1GcmFtZS50b3AsCi0gICAgICAgICAgICAgICAgbUZyYW1lLnJpZ2h0IC0gbUNvbnRlbnRGcmFtZS5yaWdodCwKLSAgICAgICAgICAgICAgICBtRnJhbWUuYm90dG9tIC0gbUNvbnRlbnRGcmFtZS5ib3R0b20pOworICAgICAgICBtQ29udGVudEluc2V0cy5zZXQobUNvbnRlbnRGcmFtZS5sZWZ0IC0gZnJhbWUubGVmdCwKKyAgICAgICAgICAgICAgICBtQ29udGVudEZyYW1lLnRvcCAtIGZyYW1lLnRvcCwKKyAgICAgICAgICAgICAgICBmcmFtZS5yaWdodCAtIG1Db250ZW50RnJhbWUucmlnaHQsCisgICAgICAgICAgICAgICAgZnJhbWUuYm90dG9tIC0gbUNvbnRlbnRGcmFtZS5ib3R0b20pOwogCi0gICAgICAgIG1WaXNpYmxlSW5zZXRzLnNldChtVmlzaWJsZUZyYW1lLmxlZnQgLSBtRnJhbWUubGVmdCwKLSAgICAgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLnRvcCAtIG1GcmFtZS50b3AsCi0gICAgICAgICAgICAgICAgbUZyYW1lLnJpZ2h0IC0gbVZpc2libGVGcmFtZS5yaWdodCwKLSAgICAgICAgICAgICAgICBtRnJhbWUuYm90dG9tIC0gbVZpc2libGVGcmFtZS5ib3R0b20pOworICAgICAgICBtVmlzaWJsZUluc2V0cy5zZXQobVZpc2libGVGcmFtZS5sZWZ0IC0gZnJhbWUubGVmdCwKKyAgICAgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLnRvcCAtIGZyYW1lLnRvcCwKKyAgICAgICAgICAgICAgICBmcmFtZS5yaWdodCAtIG1WaXNpYmxlRnJhbWUucmlnaHQsCisgICAgICAgICAgICAgICAgZnJhbWUuYm90dG9tIC0gbVZpc2libGVGcmFtZS5ib3R0b20pOwogCi0gICAgICAgIG1TdGFibGVJbnNldHMuc2V0KE1hdGgubWF4KG1TdGFibGVGcmFtZS5sZWZ0IC0gbUZyYW1lLmxlZnQsIDApLAotICAgICAgICAgICAgICAgIE1hdGgubWF4KG1TdGFibGVGcmFtZS50b3AgLSBtRnJhbWUudG9wLCAwKSwKLSAgICAgICAgICAgICAgICBNYXRoLm1heChtRnJhbWUucmlnaHQgLSBtU3RhYmxlRnJhbWUucmlnaHQsIDApLAotICAgICAgICAgICAgICAgIE1hdGgubWF4KG1GcmFtZS5ib3R0b20gLSBtU3RhYmxlRnJhbWUuYm90dG9tLCAwKSk7CisgICAgICAgIGlmIChtQXR0cnMudHlwZSA9PSBUWVBFX0RPQ0tfRElWSURFUikgewogCisgICAgICAgICAgICAvLyBGb3IgdGhlIGRvY2tlZCBkaXZpZGVyLCB3ZSBjYWxjdWxhdGUgdGhlIHN0YWJsZSBpbnNldHMgbGlrZSBhIGZ1bGwtc2NyZWVuIHdpbmRvdworICAgICAgICAgICAgLy8gc28gaXQgY2FuIHVzZSBpdCB0byBjYWxjdWxhdGUgdGhlIHNuYXAgcG9zaXRpb25zLgorICAgICAgICAgICAgbVN0YWJsZUluc2V0cy5zZXQoTWF0aC5tYXgobVN0YWJsZUZyYW1lLmxlZnQgLSBtRGlzcGxheUZyYW1lLmxlZnQsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtU3RhYmxlRnJhbWUudG9wIC0gbURpc3BsYXlGcmFtZS50b3AsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtRGlzcGxheUZyYW1lLnJpZ2h0IC0gbVN0YWJsZUZyYW1lLnJpZ2h0LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgobURpc3BsYXlGcmFtZS5ib3R0b20gLSBtU3RhYmxlRnJhbWUuYm90dG9tLCAwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtU3RhYmxlSW5zZXRzLnNldChNYXRoLm1heChtU3RhYmxlRnJhbWUubGVmdCAtIGZyYW1lLmxlZnQsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChtU3RhYmxlRnJhbWUudG9wIC0gZnJhbWUudG9wLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoZnJhbWUucmlnaHQgLSBtU3RhYmxlRnJhbWUucmlnaHQsIDApLAorICAgICAgICAgICAgICAgICAgICBNYXRoLm1heChmcmFtZS5ib3R0b20gLSBtU3RhYmxlRnJhbWUuYm90dG9tLCAwKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1JbnNldEZyYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5zZXQobUZyYW1lKTsKKyAgICAgICAgICAgIG1Db250ZW50RnJhbWUudG9wICs9IG1Db250ZW50SW5zZXRzLnRvcDsKKyAgICAgICAgICAgIG1Db250ZW50RnJhbWUuYm90dG9tICs9IG1Db250ZW50SW5zZXRzLmJvdHRvbTsKKyAgICAgICAgICAgIG1Db250ZW50RnJhbWUubGVmdCArPSBtQ29udGVudEluc2V0cy5sZWZ0OworICAgICAgICAgICAgbUNvbnRlbnRGcmFtZS5yaWdodCArPSBtQ29udGVudEluc2V0cy5yaWdodDsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUuc2V0KG1GcmFtZSk7CisgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLnRvcCArPSBtVmlzaWJsZUluc2V0cy50b3A7CisgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLmJvdHRvbSArPSBtVmlzaWJsZUluc2V0cy5ib3R0b207CisgICAgICAgICAgICBtVmlzaWJsZUZyYW1lLmxlZnQgKz0gbVZpc2libGVJbnNldHMubGVmdDsKKyAgICAgICAgICAgIG1WaXNpYmxlRnJhbWUucmlnaHQgKz0gbVZpc2libGVJbnNldHMucmlnaHQ7CisgICAgICAgICAgICBtU3RhYmxlRnJhbWUuc2V0KG1GcmFtZSk7CisgICAgICAgICAgICBtU3RhYmxlRnJhbWUudG9wICs9IG1TdGFibGVJbnNldHMudG9wOworICAgICAgICAgICAgbVN0YWJsZUZyYW1lLmJvdHRvbSArPSBtU3RhYmxlSW5zZXRzLmJvdHRvbTsKKyAgICAgICAgICAgIG1TdGFibGVGcmFtZS5sZWZ0ICs9IG1TdGFibGVJbnNldHMubGVmdDsKKyAgICAgICAgICAgIG1TdGFibGVGcmFtZS5yaWdodCArPSBtU3RhYmxlSW5zZXRzLnJpZ2h0OworICAgICAgICB9CiAgICAgICAgIG1Db21wYXRGcmFtZS5zZXQobUZyYW1lKTsKICAgICAgICAgaWYgKG1FbmZvcmNlU2l6ZUNvbXBhdCkgewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzaXplIGNvbXBhdGliaWxpdHkgc2NhbGUgYmVpbmcgYXBwbGllZCB0byB0aGUKQEAgLTg1NCw3ICs5MjEsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0QmFzZVR5cGUoKSB7CiAgICAgICAgIFdpbmRvd1N0YXRlIHdpbiA9IHRoaXM7Ci0gICAgICAgIHdoaWxlICh3aW4ubUF0dGFjaGVkV2luZG93ICE9IG51bGwpIHsKKyAgICAgICAgd2hpbGUgKHdpbi5pc0NoaWxkV2luZG93KCkpIHsKICAgICAgICAgICAgIHdpbiA9IHdpbi5tQXR0YWNoZWRXaW5kb3c7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHdpbi5tQXR0cnMudHlwZTsKQEAgLTExOTIsOSArMTI1OSw5IEBACiAgICAgICogc2Vuc2UgdG8gY2FsbCBmcm9tIHBlcmZvcm1MYXlvdXRBbmRQbGFjZVN1cmZhY2VzTG9ja2VkSW5uZXIoKS4pCiAgICAgICovCiAgICAgYm9vbGVhbiBoYXNNb3ZlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1IYXNTdXJmYWNlICYmIG1Db250ZW50Q2hhbmdlZCAmJiAhbUV4aXRpbmcgJiYgIW1XaW5BbmltYXRvci5tTGFzdEhpZGRlbgotICAgICAgICAgICAgICAgICYmIG1TZXJ2aWNlLm9rVG9EaXNwbGF5KCkgJiYgKG1GcmFtZS50b3AgIT0gbUxhc3RGcmFtZS50b3AKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1GcmFtZS5sZWZ0ICE9IG1MYXN0RnJhbWUubGVmdCkKKyAgICAgICAgcmV0dXJuIG1IYXNTdXJmYWNlICYmIChtQ29udGVudENoYW5nZWQgfHwgbU1vdmVkQnlSZXNpemUpCisgICAgICAgICAgICAgICAgJiYgIW1FeGl0aW5nICYmICFtV2luQW5pbWF0b3IubUxhc3RIaWRkZW4gJiYgbVNlcnZpY2Uub2tUb0Rpc3BsYXkoKQorICAgICAgICAgICAgICAgICYmIChtRnJhbWUudG9wICE9IG1MYXN0RnJhbWUudG9wIHx8IG1GcmFtZS5sZWZ0ICE9IG1MYXN0RnJhbWUubGVmdCkKICAgICAgICAgICAgICAgICAmJiAobUF0dGFjaGVkV2luZG93ID09IG51bGwgfHwgIW1BdHRhY2hlZFdpbmRvdy5oYXNNb3ZlZCgpKTsKICAgICB9CiAKQEAgLTEyMzUsNyArMTMwMiw3IEBACiAgICAgdm9pZCByZW1vdmVMb2NrZWQoKSB7CiAgICAgICAgIGRpc3Bvc2VJbnB1dENoYW5uZWwoKTsKIAotICAgICAgICBpZiAobUF0dGFjaGVkV2luZG93ICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGlzQ2hpbGRXaW5kb3coKSkgewogICAgICAgICAgICAgaWYgKERFQlVHX0FERF9SRU1PVkUpIFNsb2cudihUQUcsICJSZW1vdmluZyAiICsgdGhpcyArICIgZnJvbSAiICsgbUF0dGFjaGVkV2luZG93KTsKICAgICAgICAgICAgIG1BdHRhY2hlZFdpbmRvdy5tQ2hpbGRXaW5kb3dzLnJlbW92ZSh0aGlzKTsKICAgICAgICAgfQpAQCAtMTI2MSw2ICsxMzI4LDI5IEBACiAgICAgICAgIG1IYXNTdXJmYWNlID0gaGFzU3VyZmFjZTsKICAgICB9CiAKKyAgICBpbnQgZ2V0QW5pbUxheWVyQWRqdXN0bWVudCgpIHsKKyAgICAgICAgaWYgKG1UYXJnZXRBcHBUb2tlbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbVRhcmdldEFwcFRva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50OworICAgICAgICB9IGVsc2UgaWYgKG1BcHBUb2tlbiAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbUFwcFRva2VuLm1BcHBBbmltYXRvci5hbmltTGF5ZXJBZGp1c3RtZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gTm90aGluZyBpcyBhbmltYXRpbmcsIHNvIHRoZXJlIGlzIG5vIGFuaW1hdGlvbiBhZGp1c3RtZW50LgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uSWZEaW1taW5nKCkgeworICAgICAgICBpZiAobURpc3BsYXlDb250ZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBEaW1MYXllci5EaW1MYXllclVzZXIgZGltTGF5ZXJVc2VyID0gZ2V0RGltTGF5ZXJVc2VyKCk7CisgICAgICAgIGlmIChkaW1MYXllclVzZXIgIT0gbnVsbCAmJiBtRGlzcGxheUNvbnRlbnQubURpbUxheWVyQ29udHJvbGxlci5pc0RpbW1pbmcoCisgICAgICAgICAgICAgICAgZGltTGF5ZXJVc2VyLCBtV2luQW5pbWF0b3IpKSB7CisgICAgICAgICAgICAvLyBGb3JjZSBhbiBhbmltYXRpb24gcGFzcyBqdXN0IHRvIHVwZGF0ZSB0aGUgbURpbUxheWVyIGxheWVyLgorICAgICAgICAgICAgbVNlcnZpY2Uuc2NoZWR1bGVBbmltYXRpb25Mb2NrZWQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRGVhZFdpbmRvd0V2ZW50UmVjZWl2ZXIgZXh0ZW5kcyBJbnB1dEV2ZW50UmVjZWl2ZXIgewogICAgICAgICBEZWFkV2luZG93RXZlbnRSZWNlaXZlcihJbnB1dENoYW5uZWwgaW5wdXRDaGFubmVsKSB7CiAgICAgICAgICAgICBzdXBlcihpbnB1dENoYW5uZWwsIG1TZXJ2aWNlLm1ILmdldExvb3BlcigpKTsKQEAgLTEzNDMsMTcgKzE0MzMsMTcgQEAKICAgICB9CiAKICAgICB2b2lkIG1heWJlUmVtb3ZlUmVwbGFjZWRXaW5kb3coKSB7Ci0gICAgICAgIEFwcFdpbmRvd1Rva2VuIHRva2VuID0gbUFwcFRva2VuOwotICAgICAgICBpZiAodG9rZW4gIT0gbnVsbCAmJiB0b2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cgJiYgdG9rZW4ubVJlcGxhY2luZ1dpbmRvdyA9PSB0aGlzCi0gICAgICAgICAgICAgICAgJiYgdG9rZW4ubUhhc1JlcGxhY2VkV2luZG93KSB7Ci0gICAgICAgICAgICBpZiAoREVCVUdfQUREX1JFTU9WRSkgU2xvZy5kKFRBRywgIlJlbW92aW5nIHJlcGxhY2luZyB3aW5kb3c6ICIgKyB0aGlzKTsKLSAgICAgICAgICAgIHRva2VuLm1XaWxsUmVwbGFjZVdpbmRvdyA9IGZhbHNlOwotICAgICAgICAgICAgdG9rZW4ubUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBmYWxzZTsKLSAgICAgICAgICAgIHRva2VuLm1SZXBsYWNpbmdSZW1vdmVSZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRva2VuLm1SZXBsYWNpbmdXaW5kb3cgPSBudWxsOwotICAgICAgICAgICAgdG9rZW4ubUhhc1JlcGxhY2VkV2luZG93ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gdG9rZW4uYWxsQXBwV2luZG93cy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHdpbiA9IHRva2VuLmFsbEFwcFdpbmRvd3MuZ2V0KGkpOworICAgICAgICBpZiAobUFwcFRva2VuID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gbUFwcFRva2VuLmFsbEFwcFdpbmRvd3Muc2l6ZSgpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGZpbmFsIFdpbmRvd1N0YXRlIHdpbiA9IG1BcHBUb2tlbi5hbGxBcHBXaW5kb3dzLmdldChpKTsKKyAgICAgICAgICAgIGlmIChERUJVR19BRERfUkVNT1ZFKSBTbG9nLmQoVEFHLCAiUmVtb3ZpbmcgcmVwbGFjZWQgd2luZG93OiAiICsgd2luKTsKKyAgICAgICAgICAgIGlmICh3aW4ubVdpbGxSZXBsYWNlV2luZG93ICYmIHdpbi5tUmVwbGFjaW5nV2luZG93ID09IHRoaXMpIHsKKyAgICAgICAgICAgICAgICB3aW4ubVdpbGxSZXBsYWNlV2luZG93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgd2luLm1BbmltYXRlUmVwbGFjaW5nV2luZG93ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgd2luLm1SZXBsYWNpbmdSZW1vdmVSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB3aW4ubVJlcGxhY2luZ1dpbmRvdyA9IG51bGw7CiAgICAgICAgICAgICAgICAgaWYgKHdpbi5tRXhpdGluZykgewogICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5yZW1vdmVXaW5kb3dJbm5lckxvY2tlZCh3aW4pOwogICAgICAgICAgICAgICAgIH0KQEAgLTEzNjgsMTUgKzE0NTgsMjIgQEAKICAgICB9CiAKICAgICBib29sZWFuIGluRG9ja2VkV29ya3NwYWNlKCkgewotICAgICAgICBUYXNrIHRhc2sgPSBnZXRUYXNrKCk7CisgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IGdldFRhc2soKTsKICAgICAgICAgcmV0dXJuIHRhc2sgIT0gbnVsbCAmJiB0YXNrLmluRG9ja2VkV29ya3NwYWNlKCk7CiAgICAgfQogCiAgICAgYm9vbGVhbiBpc0RvY2tlZEluRWZmZWN0KCkgewotICAgICAgICBUYXNrIHRhc2sgPSBnZXRUYXNrKCk7CisgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IGdldFRhc2soKTsKICAgICAgICAgcmV0dXJuIHRhc2sgIT0gbnVsbCAmJiB0YXNrLmlzRG9ja2VkSW5FZmZlY3QoKTsKICAgICB9CiAKKyAgICB2b2lkIGFwcGx5U2Nyb2xsSWZOZWVkZWQoKSB7CisgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IGdldFRhc2soKTsKKyAgICAgICAgaWYgKHRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgdGFzay5hcHBseVNjcm9sbFRvV2luZG93SWZOZWVkZWQodGhpcyk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpbnQgZ2V0VG91Y2hhYmxlUmVnaW9uKFJlZ2lvbiByZWdpb24sIGludCBmbGFncykgewogICAgICAgICBmaW5hbCBib29sZWFuIG1vZGFsID0gKGZsYWdzICYgKEZMQUdfTk9UX1RPVUNIX01PREFMIHwgRkxBR19OT1RfRk9DVVNBQkxFKSkgPT0gMDsKICAgICAgICAgaWYgKG1vZGFsICYmIG1BcHBUb2tlbiAhPSBudWxsKSB7CkBAIC0xNTE3LDEyICsxNjE0LDcgQEAKICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZU9yQWRkaW5nKCkKICAgICAgICAgICAgICAgICAmJiAobVZpZXdWaXNpYmlsaXR5ID09IFZpZXcuVklTSUJMRSkKICAgICAgICAgICAgICAgICAmJiAoKG1BdHRycy5mbGFncyAmIFdpbmRvd01hbmFnZXIuTGF5b3V0UGFyYW1zLkZMQUdfTk9UX0ZPQ1VTQUJMRSkgPT0gMCkKLSAgICAgICAgICAgICAgICAmJiBzdGFja0NhblJlY2VpdmVLZXlzKCk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBzdGFja0NhblJlY2VpdmVLZXlzKCkgewotICAgICAgICBmaW5hbCBUYXNrU3RhY2sgc3RhY2sgPSBnZXRTdGFjaygpOwotICAgICAgICByZXR1cm4gc3RhY2sgIT0gbnVsbCAmJiBTdGFja0lkLmNhblJlY2VpdmVLZXlzKHN0YWNrLm1TdGFja0lkKTsKKyAgICAgICAgICAgICAgICAmJiAobUFwcFRva2VuID09IG51bGwgfHwgbUFwcFRva2VuLndpbmRvd3NBcmVGb2N1c2FibGUoKSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC0xNjgyLDcgKzE3NzQsNyBAQAogICAgICAgICAgICAgLy8gZmlyc3QgZnJhbWUgdmVyeSBmYXN0LiBTYXZpbmcgc3VyZmFjZXMgYXJlIG1vc3RseSBhIHdhc3RlIG9mIG1lbW9yeS4KICAgICAgICAgICAgIC8vIERvbid0IHNhdmUgaWYgdGhlIHdpbmRvdyBpcyBub3QgdGhlIHRvcG1vc3Qgd2luZG93LgogICAgICAgICAgICAgbVN1cmZhY2VTYXZlZCA9IGZhbHNlOwotICAgICAgICB9IGVsc2UgaWYgKG1BdHRhY2hlZFdpbmRvdyAhPSBudWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNDaGlsZFdpbmRvdygpKSB7CiAgICAgICAgICAgICBtU3VyZmFjZVNhdmVkID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtU3VyZmFjZVNhdmVkID0gbUFwcFRva2VuLnNob3VsZFNhdmVTdXJmYWNlKCk7CkBAIC0xNzMzLDcgKzE4MjUsNyBAQAogICAgIGJvb2xlYW4gaXNIaWRkZW5Gcm9tVXNlckxvY2tlZCgpIHsKICAgICAgICAgLy8gQXR0YWNoZWQgd2luZG93cyBhcmUgZXZhbHVhdGVkIGJhc2VkIG9uIHRoZSB3aW5kb3cgdGhhdCB0aGV5IGFyZSBhdHRhY2hlZCB0by4KICAgICAgICAgV2luZG93U3RhdGUgd2luID0gdGhpczsKLSAgICAgICAgd2hpbGUgKHdpbi5tQXR0YWNoZWRXaW5kb3cgIT0gbnVsbCkgeworICAgICAgICB3aGlsZSAod2luLmlzQ2hpbGRXaW5kb3coKSkgewogICAgICAgICAgICAgd2luID0gd2luLm1BdHRhY2hlZFdpbmRvdzsKICAgICAgICAgfQogICAgICAgICBpZiAod2luLm1BdHRycy50eXBlIDwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMuRklSU1RfU1lTVEVNX1dJTkRPVwpAQCAtMTkxNCw4ICsyMDA2LDggQEAKICAgICAgICAgLy8gaXNEcmFnUmVzaXppbmcoKSBvciBpc0RyYWdSZXNpemVDaGFuZ2VkKCkgaXMgdHJ1ZS4KICAgICAgICAgYm9vbGVhbiByZXNpemluZyA9IGlzRHJhZ1Jlc2l6aW5nKCkgfHwgaXNEcmFnUmVzaXplQ2hhbmdlZCgpOwogICAgICAgICBmaW5hbCBSZWN0IGJhY2tEcm9wRnJhbWUgPSAoaW5GcmVlZm9ybVdvcmtzcGFjZSgpIHx8ICFyZXNpemluZykgPyBmcmFtZSA6IG1UbXBSZWN0OwotICAgICAgICBtQ2xpZW50LnJlc2l6ZWQoZnJhbWUsIG92ZXJzY2FuSW5zZXRzLCBjb250ZW50SW5zZXRzLCB2aXNpYmxlSW5zZXRzLCBzdGFibGVJbnNldHMsCi0gICAgICAgICAgICAgICAgb3V0c2V0cywgcmVwb3J0RHJhdywgbmV3Q29uZmlnLCBiYWNrRHJvcEZyYW1lKTsKKyAgICAgICAgbUNsaWVudC5yZXNpemVkKGZyYW1lLCBvdmVyc2Nhbkluc2V0cywgY29udGVudEluc2V0cywgdmlzaWJsZUluc2V0cywgc3RhYmxlSW5zZXRzLCBvdXRzZXRzLAorICAgICAgICAgICAgICAgIHJlcG9ydERyYXcsIG5ld0NvbmZpZywgYmFja0Ryb3BGcmFtZSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJGb2N1c09ic2VydmVyKElXaW5kb3dGb2N1c09ic2VydmVyIG9ic2VydmVyKSB7CkBAIC0xOTYyLDcgKzIwNTQsMTMgQEAKICAgICAgICAgaWYgKHRhc2suaXNEcmFnUmVzaXppbmcoKSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1EaXNwbGF5Q29udGVudC5tRGl2aWRlckNvbnRyb2xsZXJMb2NrZWQuaXNSZXNpemluZygpICYmCisKKyAgICAgICAgLy8gSWYgdGhlIGJvdW5kcyBhcmUgY3VycmVudGx5IGZyb3plbiwgaXQgbWVhbnMgdGhhdCB0aGUgbGF5b3V0IHNpemUgdGhhdCB0aGUgYXBwIHNlZXMKKyAgICAgICAgLy8gYW5kIHRoZSBib3VuZHMgd2UgY2xpcCB0aGlzIHdpbmRvdyB0byBtaWdodCBiZSBkaWZmZXJlbnQuIEluIG9yZGVyIHRvIGF2b2lkIGhvbGVzLCB3ZQorICAgICAgICAvLyBzaW11bGF0ZSB0aGF0IHdlIGFyZSBzdGlsbCByZXNpemluZyBzbyB0aGUgYXBwIGZpbGxzIHRoZSBob2xlIHdpdGggdGhlIHJlc2l6aW5nCisgICAgICAgIC8vIGJhY2tncm91bmQuCisgICAgICAgIHJldHVybiAobURpc3BsYXlDb250ZW50Lm1EaXZpZGVyQ29udHJvbGxlckxvY2tlZC5pc1Jlc2l6aW5nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1BcHBUb2tlbiAhPSBudWxsICYmICFtQXBwVG9rZW4ubUZyb3plbkJvdW5kcy5pc0VtcHR5KCkpICYmCiAgICAgICAgICAgICAgICAgIXRhc2suaW5GcmVlZm9ybVdvcmtzcGFjZSgpICYmICF0YXNrLmlzRnVsbHNjcmVlbigpOwogICAgIH0KIApAQCAtMTk5Nyw3ICsyMDk1LDcgQEAKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJMYXN0UmVxdWVzdGVkIHc9Iik7IHB3LnByaW50KG1MYXN0UmVxdWVzdGVkV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBwdy5wcmludCgiIGg9Iik7IHB3LnByaW50bG4obUxhc3RSZXF1ZXN0ZWRIZWlnaHQpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtQXR0YWNoZWRXaW5kb3cgIT0gbnVsbCB8fCBtTGF5b3V0QXR0YWNoZWQpIHsKKyAgICAgICAgaWYgKGlzQ2hpbGRXaW5kb3coKSB8fCBtTGF5b3V0QXR0YWNoZWQpIHsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJtQXR0YWNoZWRXaW5kb3c9Iik7IHB3LnByaW50KG1BdHRhY2hlZFdpbmRvdyk7CiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50KCIgbUxheW91dEF0dGFjaGVkPSIpOyBwdy5wcmludGxuKG1MYXlvdXRBdHRhY2hlZCk7CiAgICAgICAgIH0KQEAgLTIxNjEsNyArMjI1OSw3IEBACiAgICAgICAgICAgICArICIgIiArIGdldFdpbmRvd1RhZygpOwogICAgIH0KIAotICAgIHByaXZhdGUgQ2hhclNlcXVlbmNlIGdldFdpbmRvd1RhZygpIHsKKyAgICBDaGFyU2VxdWVuY2UgZ2V0V2luZG93VGFnKCkgewogICAgICAgICBDaGFyU2VxdWVuY2UgdGFnID0gbUF0dHJzLmdldFRpdGxlKCk7CiAgICAgICAgIGlmICh0YWcgPT0gbnVsbCB8fCB0YWcubGVuZ3RoKCkgPD0gMCkgewogICAgICAgICAgICAgdGFnID0gbUF0dHJzLnBhY2thZ2VOYW1lOwpAQCAtMjE4NCwxMCArMjI4MiwxMiBAQAogCiAgICAgdm9pZCB0cmFuc2Zvcm1Gcm9tU2NyZWVuVG9TdXJmYWNlU3BhY2UoUmVjdCByZWN0KSB7CiAgICAgICAgICBpZiAobUhTY2FsZSA+PSAwKSB7Ci0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgKGludCkoKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpIC8gbUhTY2FsZSk7CisgICAgICAgICAgICByZWN0LmxlZnQgPSAoaW50KSAocmVjdC5sZWZ0IC8gbUhTY2FsZSk7CisgICAgICAgICAgICByZWN0LnJpZ2h0ID0gKGludCkgKHJlY3QucmlnaHQgLyBtSFNjYWxlKTsKICAgICAgICAgfQogICAgICAgICBpZiAobVZTY2FsZSA+PSAwKSB7Ci0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgKGludCkoKHJlY3QuYm90dG9tIC0gcmVjdC50b3ApIC8gbVZTY2FsZSk7CisgICAgICAgICAgICByZWN0LnRvcCA9IChpbnQpIChyZWN0LnRvcCAvIG1WU2NhbGUpOworICAgICAgICAgICAgcmVjdC5ib3R0b20gPSAoaW50KSAocmVjdC5ib3R0b20gLyBtVlNjYWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjI0MSw3ICsyMzQxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChub25GdWxsc2NyZWVuVGFzaykgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdpbmRvdyBmaXRzIGluIGNvbnRhaW5pbmcgZnJhbWUgc2luY2UgaXQgaXMgaW4gYSBub24tZnVsbHNjcmVlbiBzdGFjayBhcworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdpbmRvdyBmaXRzIGluIGNvbnRhaW5pbmcgZnJhbWUgc2luY2UgaXQgaXMgaW4gYSBub24tZnVsbHNjcmVlbiB0YXNrIGFzCiAgICAgICAgICAgICAvLyByZXF1aXJlZCBieSB7QGxpbmsgR3Jhdml0eSNhcHBseX0gY2FsbC4KICAgICAgICAgICAgIHcgPSBNYXRoLm1pbih3LCBwdyk7CiAgICAgICAgICAgICBoID0gTWF0aC5taW4oaCwgcGgpOwpAQCAtMjI1NSw0ICsyMzU1LDI3IEBACiAgICAgICAgIC8vIE5vdyBtYWtlIHN1cmUgdGhlIHdpbmRvdyBmaXRzIGluIHRoZSBvdmVyYWxsIGRpc3BsYXkgZnJhbWUuCiAgICAgICAgIEdyYXZpdHkuYXBwbHlEaXNwbGF5KG1BdHRycy5ncmF2aXR5LCBtRGlzcGxheUZyYW1lLCBtRnJhbWUpOwogICAgIH0KKworICAgIGJvb2xlYW4gaXNDaGlsZFdpbmRvdygpIHsKKyAgICAgICAgcmV0dXJuIG1BdHRhY2hlZFdpbmRvdyAhPSBudWxsOworICAgIH0KKworICAgIHZvaWQgc2V0UmVwbGFjaW5nKGJvb2xlYW4gYW5pbWF0ZSkgeworICAgICAgICBpZiAoKG1BdHRycy5wcml2YXRlRmxhZ3MgJiBQUklWQVRFX0ZMQUdfV0lMTF9OT1RfUkVQTEFDRV9PTl9SRUxBVU5DSCkgIT0gMAorICAgICAgICAgICAgICAgIHx8IG1BdHRycy50eXBlID09IFRZUEVfQVBQTElDQVRJT05fU1RBUlRJTkcpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHNldCByZXBsYWNpbmcgb24gc3RhcnRpbmcgd2luZG93cyBzaW5jZSB0aGV5IGFyZSBhZGRlZCBieSB3aW5kb3cgbWFuYWdlciBhbmQKKyAgICAgICAgICAgIC8vIG5vdCB0aGUgY2xpZW50IHNvIHdvbid0IGJlIHJlcGxhY2VkIGJ5IHRoZSBjbGllbnQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtV2lsbFJlcGxhY2VXaW5kb3cgPSB0cnVlOworICAgICAgICBtUmVwbGFjaW5nV2luZG93ID0gbnVsbDsKKyAgICAgICAgbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBhbmltYXRlOworICAgIH0KKworICAgIHZvaWQgcmVzZXRSZXBsYWNpbmcoKSB7CisgICAgICAgIG1XaWxsUmVwbGFjZVdpbmRvdyA9IGZhbHNlOworICAgICAgICBtUmVwbGFjaW5nV2luZG93ID0gbnVsbDsKKyAgICAgICAgbUFuaW1hdGVSZXBsYWNpbmdXaW5kb3cgPSBmYWxzZTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N0YXRlQW5pbWF0b3IuamF2YSBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCmluZGV4IDdjZDY3ZDAuLmEzYTU5YzAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCisrKyBiL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3RhdGVBbmltYXRvci5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dNYW5hZ2VyRGVidWdDb25maWcuVEFHX1dNOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UuVFlQRV9MQVlFUl9NVUxUSVBMSUVSOwogaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2UubG9jYWxMT0dWOworaW1wb3J0IHN0YXRpYyBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93U3RhdGUuRFJBR19SRVNJWkVfTU9ERV9ET0NLRURfRElWSURFUjsKIGltcG9ydCBzdGF0aWMgY29tLmFuZHJvaWQuc2VydmVyLndtLldpbmRvd1N0YXRlLkRSQUdfUkVTSVpFX01PREVfRlJFRUZPUk07CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dTdXJmYWNlUGxhY2VyLlNFVF9PUklFTlRBVElPTl9DSEFOR0VfQ09NUExFVEU7CiBpbXBvcnQgc3RhdGljIGNvbS5hbmRyb2lkLnNlcnZlci53bS5XaW5kb3dTdXJmYWNlUGxhY2VyLlNFVF9UVVJOX09OX1NDUkVFTjsKQEAgLTM4NCwxMiArMzg1LDggQEAKICAgICAgICAgaWYgKG1BbmltYXRvci5tV2luZG93RGV0YWNoZWRXYWxscGFwZXIgPT0gbVdpbikgewogICAgICAgICAgICAgbUFuaW1hdG9yLm1XaW5kb3dEZXRhY2hlZFdhbGxwYXBlciA9IG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgbUFuaW1MYXllciA9IG1XaW4ubUxheWVyOwotICAgICAgICBpZiAobVdpbi5tSXNJbVdpbmRvdykgewotICAgICAgICAgICAgbUFuaW1MYXllciArPSBtU2VydmljZS5tSW5wdXRNZXRob2RBbmltTGF5ZXJBZGp1c3RtZW50OwotICAgICAgICB9IGVsc2UgaWYgKG1Jc1dhbGxwYXBlcikgewotICAgICAgICAgICAgbUFuaW1MYXllciArPSBtV2FsbHBhcGVyQ29udHJvbGxlckxvY2tlZC5nZXRBbmltTGF5ZXJBZGp1c3RtZW50KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbUFuaW1MYXllciA9IG1XaW4ubUxheWVyCisgICAgICAgICAgICAgICAgKyBtU2VydmljZS5tTGF5ZXJzQ29udHJvbGxlci5nZXRTcGVjaWFsV2luZG93QW5pbUxheWVyQWRqdXN0bWVudChtV2luKTsKICAgICAgICAgaWYgKERFQlVHX0xBWUVSUykgU2xvZy52KFRBRywgIlN0ZXBwaW5nIHdpbiAiICsgdGhpcyArICIgYW5pbSBsYXllcjogIiArIG1BbmltTGF5ZXIpOwogICAgICAgICBtSGFzVHJhbnNmb3JtYXRpb24gPSBmYWxzZTsKICAgICAgICAgbUhhc0xvY2FsVHJhbnNmb3JtYXRpb24gPSBmYWxzZTsKQEAgLTcwOSwxMiArNzA2LDEyIEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBTb21ldGhpbmcgaXMgd3JvbmcgYW5kIFN1cmZhY2VGbGluZ2VyIHdpbGwgbm90IGxpa2UgdGhpcywgdHJ5IHRvIHJldmVydCB0byBzYW5lIHZhbHVlcy4KKyAgICAgICAgLy8gVGhpcyBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCB0aGVyZSBpcyBhbiBlcnJvciBpbiB0aGUgc3lzdGVtLiBUaGUgc2l6ZXMgbWlnaHQgYmUKKyAgICAgICAgLy8gaW5jb3JyZWN0LCBiZWNhdXNlIGl0IGlzIGJlZm9yZSB0aGUgZmlyc3QgbGF5b3V0IG9yIGRyYXcuCiAgICAgICAgIGlmIChtVG1wU2l6ZS53aWR0aCgpIDwgMSkgewotICAgICAgICAgICAgU2xvZy53KFRBRywgIldpZHRoIG9mICIgKyB3ICsgIiBpcyBub3QgcG9zaXRpdmUgIiArIG1UbXBTaXplLndpZHRoKCkpOwogICAgICAgICAgICAgbVRtcFNpemUucmlnaHQgPSBtVG1wU2l6ZS5sZWZ0ICsgMTsKICAgICAgICAgfQogICAgICAgICBpZiAobVRtcFNpemUuaGVpZ2h0KCkgPCAxKSB7Ci0gICAgICAgICAgICBTbG9nLncoVEFHLCAiSGVpZ2h0IG9mICIgKyB3ICsgIiBpcyBub3QgcG9zaXRpdmUgIiArIG1UbXBTaXplLmhlaWdodCgpKTsKICAgICAgICAgICAgIG1UbXBTaXplLmJvdHRvbSA9IG1UbXBTaXplLnRvcCArIDE7CiAgICAgICAgIH0KIApAQCAtMTA2Nyw3ICsxMDY0LDE2IEBACiAgICAgICAgIGZpbmFsIGludCB0b3AgPSB3Lm1ZT2Zmc2V0ICsgdy5tRnJhbWUudG9wOwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGRlY29yIHJlY3QgdG8gdGhlIGVudGlyZSBmcmFtZS4KLSAgICAgICAgbVN5c3RlbURlY29yUmVjdC5zZXQoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmICh3LmlzRHJhZ1Jlc2l6aW5nKCkgJiYgdy5nZXRSZXNpemVNb2RlKCkgPT0gRFJBR19SRVNJWkVfTU9ERV9ET0NLRURfRElWSURFUikgeworCisgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcmVzaXppbmcgd2l0aCB0aGUgZGl2aWRlciwgdGhlIHRhc2sgYm91bmRzIG1pZ2h0IGJlIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICAgICAgIC8vIHN0YWNrIGJvdW5kcy4gVGhlIHN5c3RlbSBkZWNvciBpcyB1c2VkIHRvIGNsaXAgdG8gdGhlIHRhc2sgYm91bmRzLCB3aGljaCB3ZSBkb24ndAorICAgICAgICAgICAgLy8gd2FudCBpbiB0aGlzIGNhc2UgaW4gb3JkZXIgdG8gYXZvaWQgaG9sZXMuCisgICAgICAgICAgICBmaW5hbCBEaXNwbGF5SW5mbyBkaXNwbGF5SW5mbyA9IHcuZ2V0RGlzcGxheUNvbnRlbnQoKS5nZXREaXNwbGF5SW5mbygpOworICAgICAgICAgICAgbVN5c3RlbURlY29yUmVjdC5zZXQoMCwgMCwgZGlzcGxheUluZm8ubG9naWNhbFdpZHRoLCBkaXNwbGF5SW5mby5sb2dpY2FsSGVpZ2h0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1TeXN0ZW1EZWNvclJlY3Quc2V0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgYSBmcmVlZm9ybSB3aW5kb3cgaXMgYW5pbWF0aW5nIGZyb20gYSBwb3NpdGlvbiB3aGVyZSBpdCB3b3VsZCBiZSBjdXRvZmYsIGl0IHdvdWxkIGJlCiAgICAgICAgIC8vIGN1dG9mZiBkdXJpbmcgdGhlIGFuaW1hdGlvbi4gV2UgZG9uJ3Qgd2FudCB0aGF0LCBzbyBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24KQEAgLTExMzUsMTcgKzExNDEsMTkgQEAKICAgICAgICAgZmluYWwgYm9vbGVhbiBpc0ZyZWVmb3JtUmVzaXppbmcgPQogICAgICAgICAgICAgICAgIHcuaXNEcmFnUmVzaXppbmcoKSAmJiB3LmdldFJlc2l6ZU1vZGUoKSA9PSBEUkFHX1JFU0laRV9NT0RFX0ZSRUVGT1JNOwogICAgICAgICBmaW5hbCBSZWN0IGNsaXBSZWN0ID0gbVRtcENsaXBSZWN0OwotICAgICAgICBpZiAoaXNGcmVlZm9ybVJlc2l6aW5nKSB7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlJ3JlIGRvaW5nIGEgZHJhZy1yZXNpemluZywgdGhlIHN1cmZhY2UgaXMgc2V0IHVwIHRvIGNvdmVyIGZ1bGwgc2NyZWVuLgotICAgICAgICAgICAgLy8gU2V0IHRoZSBjbGlwIHJlY3QgdG8gYmUgdGhlIHNhbWUgc2l6ZSBzbyB0aGF0IHdlIGRvbid0IGdldCBhbnkgc2NhbGluZy4KLSAgICAgICAgICAgIGNsaXBSZWN0LnNldCgwLCAwLCBkaXNwbGF5SW5mby5sb2dpY2FsV2lkdGgsIGRpc3BsYXlJbmZvLmxvZ2ljYWxIZWlnaHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgdXNlIHRoZSBjbGlwIHJlY3QgYXMgcHJvdmlkZWQgYnkgdGhlIHRyYW5mb3JtYXRpb24gZm9yIG5vbi1mdWxsc2NyZWVuIHdpbmRvd3MgdG8KLSAgICAgICAgICAgIC8vIGF2b2lkIHByZW1hdHVyZSBjbGlwcGluZyB3aXRoIHRoZSBzeXN0ZW0gZGVjb3IgcmVjdC4KLSAgICAgICAgICAgIGNsaXBSZWN0LnNldCgobUhhc0NsaXBSZWN0ICYmICFmdWxsc2NyZWVuKSA/IG1DbGlwUmVjdCA6IG1TeXN0ZW1EZWNvclJlY3QpOwotICAgICAgICAgICAgaWYgKERFQlVHX1dJTkRPV19DUk9QKSBTbG9nLmQoVEFHLCAiSW5pdGlhbCBjbGlwIHJlY3Q6ICIgKyBjbGlwUmVjdCArICIsIG1IYXNDbGlwUmVjdD0iCi0gICAgICAgICAgICAgICAgICAgICsgbUhhc0NsaXBSZWN0ICsgIiwgZnVsbHNjcmVlbj0iICsgZnVsbHNjcmVlbik7CisKKyAgICAgICAgLy8gV2UgdXNlIHRoZSBjbGlwIHJlY3QgYXMgcHJvdmlkZWQgYnkgdGhlIHRyYW5mb3JtYXRpb24gZm9yIG5vbi1mdWxsc2NyZWVuIHdpbmRvd3MgdG8KKyAgICAgICAgLy8gYXZvaWQgcHJlbWF0dXJlIGNsaXBwaW5nIHdpdGggdGhlIHN5c3RlbSBkZWNvciByZWN0LgorICAgICAgICBjbGlwUmVjdC5zZXQoKG1IYXNDbGlwUmVjdCAmJiAhZnVsbHNjcmVlbikgPyBtQ2xpcFJlY3QgOiBtU3lzdGVtRGVjb3JSZWN0KTsKKyAgICAgICAgaWYgKERFQlVHX1dJTkRPV19DUk9QKSBTbG9nLmQoVEFHLCAiSW5pdGlhbCBjbGlwIHJlY3Q6ICIgKyBjbGlwUmVjdCArICIsIG1IYXNDbGlwUmVjdD0iCisgICAgICAgICAgICAgICAgKyBtSGFzQ2xpcFJlY3QgKyAiLCBmdWxsc2NyZWVuPSIgKyBmdWxsc2NyZWVuKTsKKworICAgICAgICBpZiAoaXNGcmVlZm9ybVJlc2l6aW5nICYmICF3LmlzQ2hpbGRXaW5kb3coKSkgeworICAgICAgICAgICAgLy8gRm9yIGZyZWVmb3JtIHJlc2l6aW5nIG5vbiBjaGlsZCB3aW5kb3dzLCB3ZSBhcmUgdXNpbmcgdGhlIGJpZyBzdXJmYWNlIHBvc2l0aW9uZWQKKyAgICAgICAgICAgIC8vIGF0IDAsMC4gVGh1cyB3ZSBtdXN0IGV4cHJlc3MgdGhlIGNyb3AgaW4gdGhhdCBjb29yZGluYXRlIHNwYWNlLgorICAgICAgICAgICAgY2xpcFJlY3Qub2Zmc2V0KHcubVNob3duUG9zaXRpb24ueCwgdy5tU2hvd25Qb3NpdGlvbi55KTsKICAgICAgICAgfQorCiAgICAgICAgIC8vIEV4cGFuZCB0aGUgY2xpcCByZWN0IGZvciBzdXJmYWNlIGluc2V0cy4KICAgICAgICAgZmluYWwgV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXMgYXR0cnMgPSB3Lm1BdHRyczsKICAgICAgICAgY2xpcFJlY3QubGVmdCAtPSBhdHRycy5zdXJmYWNlSW5zZXRzLmxlZnQ7CkBAIC0xMTg0LDExICsxMTkyLDE0IEBACiAgICAgICAgIC8vIFdlIGRvbid0IGFwcGx5IHRoZSBzdGFjayBib3VuZHMgY3JvcCBpZjoKICAgICAgICAgLy8gMS4gVGhlIHdpbmRvdyBpcyBjdXJyZW50bHkgYW5pbWF0aW5nIGRvY2tlZCBtb2RlIG9yIGluIGZyZWVmb3JtIG1vZGUsIG90aGVyd2lzZSB0aGUKICAgICAgICAgLy8gYW5pbWF0aW5nIHdpbmRvdyB3aWxsIGJlIHN1ZGRlbmx5IChkb2NrZWQpIG9yIGZvciB3aG9sZSBhbmltYXRpb24gKGZyZWVmb3JtKSBjdXQgb2ZmLgorICAgICAgICAvLyAoTm90ZSB0aGF0IHdlIHN0aWxsIG5lZWQgdG8gYXBwbHkgdGhlIGNyb3AgaWYgdGhlIHRhc2sgYmVpbmcgZG9ja2VkIGlzIG5vbi1yZXNpemVhYmxlLAorICAgICAgICAvLyBpbiB3aGljaCBjYXNlIHRoZSB0YXNrIGlzIHJ1bm5pbmcgaW4gZnVsbHNjcmVlbiBzaXplIGJ1dCBjcm9wcGVkIHRvIHN0YWNrIGJvdW5kcy4pCiAgICAgICAgIC8vIDIuIFRoZSB3aW5kb3cgdGhhdCBpcyBiZWluZyByZXBsYWNlZCBkdXJpbmcgYW5pbWF0aW9uLCBiZWNhdXNlIGl0IHdhcyBsaXZpbmcgaW4gYQogICAgICAgICAvLyBkaWZmZXJlbnQgc3RhY2suIElmIHdlIHN1ZGRlbmx5IGNyb3AgaXQgdG8gdGhlIG5ldyBzdGFjayBib3VuZHMsIGl0IG1pZ2h0IGdldCBjdXQgb2ZmLgogICAgICAgICAvLyBXZSBkb24ndCB3YW50IGl0IHRvIGhhcHBlbiwgc28gd2UgbGV0IGl0IGlnbm9yZSB0aGUgc3RhY2sgYm91bmRzIHVudGlsIGl0IGdldHMgcmVtb3ZlZC4KICAgICAgICAgLy8gVGhlIHdpbmRvdyB0aGF0IHdpbGwgcmVwbGFjZSBpdCB3aWxsIGFiaWRlIHRoZW0uCi0gICAgICAgIGlmIChpc0FuaW1hdGluZygpICYmIChhcHBUb2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cgfHwgdy5pbkRvY2tlZFdvcmtzcGFjZSgpCisgICAgICAgIGlmIChpc0FuaW1hdGluZygpICYmICh3Lm1XaWxsUmVwbGFjZVdpbmRvdworICAgICAgICAgICAgICAgIHx8ICh3LmluRG9ja2VkV29ya3NwYWNlKCkgJiYgdGFzay5pc1Jlc2l6ZWFibGUoKSkKICAgICAgICAgICAgICAgICB8fCB3LmluRnJlZWZvcm1Xb3Jrc3BhY2UoKSkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTM0NCw2ICsxMzU1LDExIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgdy5tVG9rZW4uaGFzVmlzaWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgIGZpbmFsIFRhc2sgdGFzayA9IHcuZ2V0VGFzaygpOworICAgICAgICAgICAgaWYgKHRhc2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRhc2suc2NoZWR1bGVTaG93Tm9uUmVzaXplYWJsZURvY2tUb2FzdElmTmVlZGVkKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE1MDIsMTAgKzE1MTgsNiBAQAogICAgICAgICAgICAgICAgIG1XaW4ubUFwcFRva2VuLnVwZGF0ZVJlcG9ydGVkVmlzaWJpbGl0eUxvY2tlZCgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmaW5hbCBUYXNrIHRhc2sgPSBtV2luLmdldFRhc2soKTsKLSAgICAgICAgICAgIGlmICh0YXNrICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICB0YXNrLnNjaGVkdWxlU2hvd05vblJlc2l6ZWFibGVEb2NrVG9hc3RJZk5lZWRlZCgpOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdXJmYWNlQ29udHJvbGxlci5qYXZhIGIvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdXJmYWNlQ29udHJvbGxlci5qYXZhCmluZGV4IGJkMjkxMmQuLjk2NzVkMmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NvcmUvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvd20vV2luZG93U3VyZmFjZUNvbnRyb2xsZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VDb250cm9sbGVyLmphdmEKQEAgLTEzMSwxMyArMTMxLDkgQEAKICAgICB9CiAKICAgICB2b2lkIGRlc3Ryb3lJblRyYW5zYWN0aW9uKCkgewotICAgICAgICBpZiAoU0hPV19UUkFOU0FDVElPTlMgfHwgU0hPV19TVVJGQUNFX0FMTE9DKSB7Ci0gICAgICAgICAgICBSdW50aW1lRXhjZXB0aW9uIGUgPSBudWxsOwotICAgICAgICAgICAgaWYgKCFISURFX1NUQUNLX0NSQVdMUykgewotICAgICAgICAgICAgICAgIGUgPSBuZXcgUnVudGltZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIGUuZmlsbEluU3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIC8vICAgICAgICBpZiAoU0hPV19UUkFOU0FDVElPTlMgfHwgU0hPV19TVVJGQUNFX0FMTE9DKSB7CisgICAgICAgIFNsb2cuaShUQUcsICJEZXN0cm95aW5nIHN1cmZhY2UgIiArIHRoaXMgKyAiIGNhbGxlZCBieSAiICsgRGVidWcuZ2V0Q2FsbGVycygzKSk7CisgICAgICAgIC8vICAgICAgICB9CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBtU3VyZmFjZUNvbnRyb2wuZGVzdHJveSgpOwogICAgICAgICAgICAgbVN1cmZhY2VTaG93biA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY29yZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci93bS9XaW5kb3dTdXJmYWNlUGxhY2VyLmphdmEgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQppbmRleCA1MGJkZjI1Li5mNzdlNWE2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQorKysgYi9zZXJ2aWNlcy9jb3JlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3dtL1dpbmRvd1N1cmZhY2VQbGFjZXIuamF2YQpAQCAtOTYsNiArOTYsNyBAQAogICAgIHByaXZhdGUgbG9uZyBtVXNlckFjdGl2aXR5VGltZW91dCA9IC0xOwogICAgIHByaXZhdGUgYm9vbGVhbiBtVXBkYXRlUm90YXRpb24gPSBmYWxzZTsKICAgICBwcml2YXRlIGZpbmFsIFJlY3QgbVRtcFN0YXJ0UmVjdCA9IG5ldyBSZWN0KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBSZWN0IG1UbXBDb250ZW50UmVjdCA9IG5ldyBSZWN0KCk7CiAKICAgICAvLyBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBkaXNwbGF5IGNvbnRhaW5zIGNvbnRlbnQgdG8gc2hvdyB0aGUgdXNlci4KICAgICAvLyBXaGVuIGZhbHNlLCB0aGUgZGlzcGxheSBtYW5hZ2VyIG1heSBjaG9vc2UgdG8gbWlycm9yIG9yIGJsYW5rIHRoZSBkaXNwbGF5LgpAQCAtNTIzLDcgKzUyNCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoRGlzcGxheUNvbnRlbnQgZGlzcGxheUNvbnRlbnQgOiBkaXNwbGF5TGlzdCkgewotICAgICAgICAgICAgICAgIG1TZXJ2aWNlLmFzc2lnbkxheWVyc0xvY2tlZChkaXNwbGF5Q29udGVudC5nZXRXaW5kb3dMaXN0KCkpOworICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZChkaXNwbGF5Q29udGVudC5nZXRXaW5kb3dMaXN0KCkpOwogICAgICAgICAgICAgICAgIGRpc3BsYXlDb250ZW50LmxheW91dE5lZWRlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5OCw3ICs1OTksNyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKChkaXNwbGF5Q29udGVudC5wZW5kaW5nTGF5b3V0Q2hhbmdlcyAmIEZJTklTSF9MQVlPVVRfUkVET19XQUxMUEFQRVIpICE9IDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIG1XYWxscGFwZXJDb250cm9sbGVyTG9ja2VkLmFkanVzdFdhbGxwYXBlcldpbmRvd3MoKSkgewotICAgICAgICAgICAgICAgICAgICBtU2VydmljZS5hc3NpZ25MYXllcnNMb2NrZWQod2luZG93cyk7CisgICAgICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZCh3aW5kb3dzKTsKICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUNvbnRlbnQubGF5b3V0TmVlZGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTcwOCw2ICs3MDksNyBAQAogCiAgICAgICAgICAgICAgICAgLy9TbG9nLmkoVEFHX1dNLCAiV2luZG93ICIgKyB0aGlzICsgIiBjbGVhcmluZyBtQ29udGVudENoYW5nZWQgLSBkb25lIHBsYWNpbmciKTsKICAgICAgICAgICAgICAgICB3Lm1Db250ZW50Q2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIHcubU1vdmVkQnlSZXNpemUgPSBmYWxzZTsKIAogICAgICAgICAgICAgICAgIC8vIE1vdmVkIGZyb20gdXBkYXRlV2luZG93c0FuZFdhbGxwYXBlckxvY2tlZCgpLgogICAgICAgICAgICAgICAgIGlmICh3Lm1IYXNTdXJmYWNlKSB7CkBAIC03MzcsMTMgKzczOSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiBVcGRhdGVzIHRoZSBzaG93biBmcmFtZSBiZWZvcmUgd2Ugc2V0IHVwIHRoZSBzdXJmYWNlLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICAqIHRoZSByZXNpemluZyBjb3VsZCBjaGFuZ2UgdGhlIHRvcC1sZWZ0IHBvc2l0aW9uIChpbiBhZGRpdGlvbiB0byBzaXplKSBvZiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogd2luZG93LiBzZXRTdXJmYWNlQm91bmRhcmllc0xvY2tlZCB1c2VzIG1TaG93blBvc2l0aW9uIHRvIHBvc2l0aW9uIHRoZQotICAgICAgICAgICAgICAgICAgICAgICogc3VyZmFjZS4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHdpbkFuaW1hdG9yLmNvbXB1dGVTaG93bkZyYW1lTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghd2luQW5pbWF0b3IuaXNBbmltYXRpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlcyB0aGUgc2hvd24gZnJhbWUgYmVmb3JlIHdlIHNldCB1cCB0aGUgc3VyZmFjZS4gVGhpcyBpcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHJlc2l6aW5nIGNvdWxkIGNoYW5nZSB0aGUgdG9wLWxlZnQgcG9zaXRpb24gKGluIGFkZGl0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaXplKSBvZiB0aGUgd2luZG93LiBzZXRTdXJmYWNlQm91bmRhcmllc0xvY2tlZCB1c2VzIG1TaG93blBvc2l0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiB0aGUgc3VyZmFjZS4gV2Ugb25seSBhcHBseSBpdCB0byB3aW5kb3dzIHRoYXQgYXJlbid0IGFuaW1hdGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2UgZGVwZW5kIG9uIHRoZSBhbmltYXRpb24gdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHNob3duIGZyYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgbmV4dCBhbmltYXRpb24gc3RlcC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbkFuaW1hdG9yLmNvbXB1dGVTaG93bkZyYW1lTG9ja2VkKCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgd2luQW5pbWF0b3Iuc2V0U3VyZmFjZUJvdW5kYXJpZXNMb2NrZWQocmVjb3ZlcmluZ01lbW9yeSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC04NTUsMTUgKzg1OSwxNiBAQAogICAgICAgICAgICAgICAgICAgICArIGRpc3BsYXlDb250ZW50LmxheW91dE5lZWRlZCArICIgZHc9IiArIGR3ICsgIiBkaD0iICsgZGgpOwogICAgICAgICB9CiAKLSAgICAgICAgbVNlcnZpY2UubVBvbGljeS5iZWdpbkxheW91dEx3KGlzRGVmYXVsdERpc3BsYXksIGR3LCBkaCwgbVNlcnZpY2UubVJvdGF0aW9uKTsKKyAgICAgICAgbVNlcnZpY2UubVBvbGljeS5iZWdpbkxheW91dEx3KGlzRGVmYXVsdERpc3BsYXksIGR3LCBkaCwgbVNlcnZpY2UubVJvdGF0aW9uLAorICAgICAgICAgICAgICAgIG1TZXJ2aWNlLm1DdXJDb25maWd1cmF0aW9uLnVpTW9kZSk7CiAgICAgICAgIGlmIChpc0RlZmF1bHREaXNwbGF5KSB7CiAgICAgICAgICAgICAvLyBOb3QgbmVlZGVkIG9uIG5vbi1kZWZhdWx0IGRpc3BsYXlzLgogICAgICAgICAgICAgbVNlcnZpY2UubVN5c3RlbURlY29yTGF5ZXIgPSBtU2VydmljZS5tUG9saWN5LmdldFN5c3RlbURlY29yTGF5ZXJMdygpOwogICAgICAgICAgICAgbVNlcnZpY2UubVNjcmVlblJlY3Quc2V0KDAsIDAsIGR3LCBkaCk7CiAgICAgICAgIH0KIAotICAgICAgICBtU2VydmljZS5tUG9saWN5LmdldENvbnRlbnRSZWN0THcobVNlcnZpY2UubVRtcENvbnRlbnRSZWN0KTsKLSAgICAgICAgZGlzcGxheUNvbnRlbnQucmVzaXplKG1TZXJ2aWNlLm1UbXBDb250ZW50UmVjdCk7CisgICAgICAgIG1TZXJ2aWNlLm1Qb2xpY3kuZ2V0Q29udGVudFJlY3RMdyhtVG1wQ29udGVudFJlY3QpOworICAgICAgICBkaXNwbGF5Q29udGVudC5yZXNpemUobVRtcENvbnRlbnRSZWN0KTsKIAogICAgICAgICBpbnQgc2VxID0gbVNlcnZpY2UubUxheW91dFNlcSsxOwogICAgICAgICBpZiAoc2VxIDwgMCkgc2VxID0gMDsKQEAgLTExMzMsNyArMTEzOCw3IEBACiAgICAgICAgIC8vIFRPRE8obXVsdGlkaXNwbGF5KTogSU1FcyBhcmUgb25seSBzdXBwb3J0ZWQgb24gdGhlIGRlZmF1bHQgZGlzcGxheS4KICAgICAgICAgaWYgKHdpbmRvd3MgPT0gbVNlcnZpY2UuZ2V0RGVmYXVsdFdpbmRvd0xpc3RMb2NrZWQoKQogICAgICAgICAgICAgICAgICYmICFtU2VydmljZS5tb3ZlSW5wdXRNZXRob2RXaW5kb3dzSWZOZWVkZWRMb2NrZWQodHJ1ZSkpIHsKLSAgICAgICAgICAgIG1TZXJ2aWNlLmFzc2lnbkxheWVyc0xvY2tlZCh3aW5kb3dzKTsKKyAgICAgICAgICAgIG1TZXJ2aWNlLm1MYXllcnNDb250cm9sbGVyLmFzc2lnbkxheWVyc0xvY2tlZCh3aW5kb3dzKTsKICAgICAgICAgfQogICAgICAgICBtU2VydmljZS51cGRhdGVGb2N1c2VkV2luZG93TG9ja2VkKFVQREFURV9GT0NVU19QTEFDSU5HX1NVUkZBQ0VTLAogICAgICAgICAgICAgICAgIHRydWUgLyp1cGRhdGVJbnB1dFdpbmRvd3MqLyk7CkBAIC0xMTkyLDcgKzExOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAvLyBpZiBhcHAgd2luZG93IGlzIHJlbW92ZWQsIG9yIHdpbmRvdyByZWxheW91dCB0byBpbnZpc2libGUuIFdlIGRvbid0IHdhbnQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgaXQgb3V0IGZvciB3aW5kb3dzIHRoYXQgZ2V0IHJlcGxhY2VkLCBiZWNhdXNlIHRoZSBhbmltYXRpb24gZGVwZW5kcyBvbgogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZmxhZyB0byByZW1vdmUgdGhlIHJlcGxhY2VkIHdpbmRvdy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpbi5tQXBwVG9rZW4gPT0gbnVsbCB8fCAhd2luLm1BcHBUb2tlbi5tV2lsbFJlcGxhY2VXaW5kb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3aW4ubVdpbGxSZXBsYWNlV2luZG93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aW4ubUV4aXRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAod2luLm1XaW5BbmltYXRvci5tQW5pbUxheWVyID4gbGF5ZXIpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcCBiL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl9pbnB1dF9JbnB1dE1hbmFnZXJTZXJ2aWNlLmNwcAppbmRleCA5YzlhNWRhLi5hNTIzN2NhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2puaS9jb21fYW5kcm9pZF9zZXJ2ZXJfaW5wdXRfSW5wdXRNYW5hZ2VyU2VydmljZS5jcHAKKysrIGIvc2VydmljZXMvY29yZS9qbmkvY29tX2FuZHJvaWRfc2VydmVyX2lucHV0X0lucHV0TWFuYWdlclNlcnZpY2UuY3BwCkBAIC0yMDYsNiArMjA2LDggQEAKICAgICB2b2lkIHJlbG9hZENhbGlicmF0aW9uKCk7CiAgICAgdm9pZCBzZXRQb2ludGVySWNvblNoYXBlKGludDMyX3QgaWNvbklkKTsKICAgICB2b2lkIHJlbG9hZFBvaW50ZXJJY29ucygpOworICAgIHZvaWQgc2V0Q3VzdG9tUG9pbnRlckljb24oY29uc3QgU3ByaXRlSWNvbiYgaWNvbik7CisgICAgdm9pZCBzZXRQb2ludGVySWNvbkRldGFjaGVkKGJvb2wgZGV0YWNoZWQpOwogCiAgICAgLyogLS0tIElucHV0UmVhZGVyUG9saWN5SW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIC0tLSAqLwogCkBAIC0yNDgsNiArMjUwLDcgQEAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEFkZGl0aW9uYWxNb3VzZVJlc291cmNlcyhzdGQ6Om1hcDxpbnQzMl90LCBTcHJpdGVJY29uPiogb3V0UmVzb3VyY2VzLAogICAgICAgICAgICAgc3RkOjptYXA8aW50MzJfdCwgUG9pbnRlckFuaW1hdGlvbj4qIG91dEFuaW1hdGlvblJlc291cmNlcyk7CiAgICAgdmlydHVhbCBpbnQzMl90IGdldERlZmF1bHRQb2ludGVySWNvbklkKCk7CisgICAgdmlydHVhbCBpbnQzMl90IGdldEN1c3RvbVBvaW50ZXJJY29uSWQoKTsKIAogcHJpdmF0ZToKICAgICBzcDxJbnB1dE1hbmFnZXI+IG1JbnB1dE1hbmFnZXI7CkBAIC03MDksNiArNzEyLDE0IEBACiAgICAgbUlucHV0TWFuYWdlci0+Z2V0RGlzcGF0Y2hlcigpLT5zZXRGb2N1c2VkQXBwbGljYXRpb24oYXBwbGljYXRpb25IYW5kbGUpOwogfQogCit2b2lkIE5hdGl2ZUlucHV0TWFuYWdlcjo6c2V0UG9pbnRlckljb25EZXRhY2hlZChib29sIGRldGFjaGVkKSB7CisgICAgQXV0b011dGV4IF9sKG1Mb2NrKTsKKyAgICBzcDxQb2ludGVyQ29udHJvbGxlcj4gY29udHJvbGxlciA9IG1Mb2NrZWQucG9pbnRlckNvbnRyb2xsZXIucHJvbW90ZSgpOworICAgIGlmIChjb250cm9sbGVyICE9IE5VTEwpIHsKKyAgICAgICAgY29udHJvbGxlci0+ZGV0YWNoUG9pbnRlckljb24oZGV0YWNoZWQpOworICAgIH0KK30KKwogdm9pZCBOYXRpdmVJbnB1dE1hbmFnZXI6OnNldElucHV0RGlzcGF0Y2hNb2RlKGJvb2wgZW5hYmxlZCwgYm9vbCBmcm96ZW4pIHsKICAgICBtSW5wdXRNYW5hZ2VyLT5nZXREaXNwYXRjaGVyKCktPnNldElucHV0RGlzcGF0Y2hNb2RlKGVuYWJsZWQsIGZyb3plbik7CiB9CkBAIC03OTAsNiArODAxLDE0IEBACiAgICAgfQogfQogCit2b2lkIE5hdGl2ZUlucHV0TWFuYWdlcjo6c2V0Q3VzdG9tUG9pbnRlckljb24oY29uc3QgU3ByaXRlSWNvbiYgaWNvbikgeworICAgIEF1dG9NdXRleCBfbChtTG9jayk7CisgICAgc3A8UG9pbnRlckNvbnRyb2xsZXI+IGNvbnRyb2xsZXIgPSBtTG9ja2VkLnBvaW50ZXJDb250cm9sbGVyLnByb21vdGUoKTsKKyAgICBpZiAoY29udHJvbGxlciAhPSBOVUxMKSB7CisgICAgICAgIGNvbnRyb2xsZXItPnNldEN1c3RvbVBvaW50ZXJJY29uKGljb24pOworICAgIH0KK30KKwogVG91Y2hBZmZpbmVUcmFuc2Zvcm1hdGlvbiBOYXRpdmVJbnB1dE1hbmFnZXI6OmdldFRvdWNoQWZmaW5lVHJhbnNmb3JtYXRpb24oCiAgICAgICAgIEpOSUVudiAqZW52LCBqZmxvYXRBcnJheSBtYXRyaXhBcnIpIHsKICAgICBTY29wZWRGbG9hdEFycmF5Uk8gbWF0cml4KGVudiwgbWF0cml4QXJyKTsKQEAgLTEwOTAsNiArMTEwOSwxMCBAQAogICAgIHJldHVybiBQT0lOVEVSX0lDT05fU1RZTEVfQVJST1c7CiB9CiAKK2ludDMyX3QgTmF0aXZlSW5wdXRNYW5hZ2VyOjpnZXRDdXN0b21Qb2ludGVySWNvbklkKCkgeworICAgIHJldHVybiBQT0lOVEVSX0lDT05fU1RZTEVfQ1VTVE9NOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyBqbG9uZyBuYXRpdmVJbml0KEpOSUVudiogZW52LCBqY2xhc3MgLyogY2xhenogKi8sCkBAIC0xMzAzLDYgKzEzMjYsMTIgQEAKICAgICBpbS0+c2V0Rm9jdXNlZEFwcGxpY2F0aW9uKGVudiwgYXBwbGljYXRpb25IYW5kbGVPYmopOwogfQogCitzdGF0aWMgdm9pZCBuYXRpdmVTZXRQb2ludGVySWNvbkRldGFjaGVkKEpOSUVudiogZW52LCBqY2xhc3MgLyogY2xhenogKi8sIGpsb25nIHB0ciwKKyAgICAgICAgamJvb2xlYW4gZGV0YWNoZWQpIHsKKyAgICBOYXRpdmVJbnB1dE1hbmFnZXIqIGltID0gcmVpbnRlcnByZXRfY2FzdDxOYXRpdmVJbnB1dE1hbmFnZXIqPihwdHIpOworICAgIGltLT5zZXRQb2ludGVySWNvbkRldGFjaGVkKGRldGFjaGVkKTsKK30KKwogc3RhdGljIHZvaWQgbmF0aXZlU2V0SW5wdXREaXNwYXRjaE1vZGUoSk5JRW52KiAvKiBlbnYgKi8sCiAgICAgICAgIGpjbGFzcyAvKiBjbGF6eiAqLywgamxvbmcgcHRyLCBqYm9vbGVhbiBlbmFibGVkLCBqYm9vbGVhbiBmcm96ZW4pIHsKICAgICBOYXRpdmVJbnB1dE1hbmFnZXIqIGltID0gcmVpbnRlcnByZXRfY2FzdDxOYXRpdmVJbnB1dE1hbmFnZXIqPihwdHIpOwpAQCAtMTQzNyw2ICsxNDY2LDIwIEBACiAgICAgaW0tPnJlbG9hZFBvaW50ZXJJY29ucygpOwogfQogCitzdGF0aWMgdm9pZCBuYXRpdmVTZXRDdXN0b21Qb2ludGVySWNvbihKTklFbnYqIGVudiwgamNsYXNzIC8qIGNsYXp6ICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgcHRyLCBqb2JqZWN0IGljb25PYmopIHsKKyAgICBOYXRpdmVJbnB1dE1hbmFnZXIqIGltID0gcmVpbnRlcnByZXRfY2FzdDxOYXRpdmVJbnB1dE1hbmFnZXIqPihwdHIpOworCisgICAgUG9pbnRlckljb24gcG9pbnRlckljb247CisgICAgYW5kcm9pZF92aWV3X1BvaW50ZXJJY29uX2dldExvYWRlZEljb24oZW52LCBpY29uT2JqLCAmcG9pbnRlckljb24pOworCisgICAgU3ByaXRlSWNvbiBzcHJpdGVJY29uOworICAgIHBvaW50ZXJJY29uLmJpdG1hcC5jb3B5VG8oJnNwcml0ZUljb24uYml0bWFwLCBrTjMyX1NrQ29sb3JUeXBlKTsKKyAgICBzcHJpdGVJY29uLmhvdFNwb3RYID0gcG9pbnRlckljb24uaG90U3BvdFg7CisgICAgc3ByaXRlSWNvbi5ob3RTcG90WSA9IHBvaW50ZXJJY29uLmhvdFNwb3RZOworICAgIGltLT5zZXRDdXN0b21Qb2ludGVySWNvbihzcHJpdGVJY29uKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgY29uc3QgSk5JTmF0aXZlTWV0aG9kIGdJbnB1dE1hbmFnZXJNZXRob2RzW10gPSB7CkBAIC0xNDY5LDYgKzE1MTIsOCBAQAogICAgICAgICAgICAgKHZvaWQqKSBuYXRpdmVTZXRJbnB1dFdpbmRvd3MgfSwKICAgICB7ICJuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24iLCAiKEpMY29tL2FuZHJvaWQvc2VydmVyL2lucHV0L0lucHV0QXBwbGljYXRpb25IYW5kbGU7KVYiLAogICAgICAgICAgICAgKHZvaWQqKSBuYXRpdmVTZXRGb2N1c2VkQXBwbGljYXRpb24gfSwKKyAgICB7ICJuYXRpdmVTZXRQb2ludGVySWNvbkRldGFjaGVkIiwgIihKWilWIiwKKyAgICAgICAgICAgICh2b2lkKikgbmF0aXZlU2V0UG9pbnRlckljb25EZXRhY2hlZCB9LAogICAgIHsgIm5hdGl2ZVNldElucHV0RGlzcGF0Y2hNb2RlIiwgIihKWlopViIsCiAgICAgICAgICAgICAodm9pZCopIG5hdGl2ZVNldElucHV0RGlzcGF0Y2hNb2RlIH0sCiAgICAgeyAibmF0aXZlU2V0U3lzdGVtVWlWaXNpYmlsaXR5IiwgIihKSSlWIiwKQEAgLTE0OTksNiArMTU0NCw4IEBACiAgICAgICAgICAgICAodm9pZCopIG5hdGl2ZVNldFBvaW50ZXJJY29uU2hhcGUgfSwKICAgICB7ICJuYXRpdmVSZWxvYWRQb2ludGVySWNvbnMiLCAiKEopViIsCiAgICAgICAgICAgICAodm9pZCopIG5hdGl2ZVJlbG9hZFBvaW50ZXJJY29ucyB9LAorICAgIHsgIm5hdGl2ZVNldEN1c3RvbVBvaW50ZXJJY29uIiwgIihKTGFuZHJvaWQvdmlldy9Qb2ludGVySWNvbjspViIsCisgICAgICAgICAgICAodm9pZCopIG5hdGl2ZVNldEN1c3RvbVBvaW50ZXJJY29uIH0sCiB9OwogCiAjZGVmaW5lIEZJTkRfQ0xBU1ModmFyLCBjbGFzc05hbWUpIFwKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl90dl9UdklucHV0SGFsLmNwcCBiL3NlcnZpY2VzL2NvcmUvam5pL2NvbV9hbmRyb2lkX3NlcnZlcl90dl9UdklucHV0SGFsLmNwcAppbmRleCAwMWFjZGVmLi42YzY0MGJhIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jb3JlL2puaS9jb21fYW5kcm9pZF9zZXJ2ZXJfdHZfVHZJbnB1dEhhbC5jcHAKKysrIGIvc2VydmljZXMvY29yZS9qbmkvY29tX2FuZHJvaWRfc2VydmVyX3R2X1R2SW5wdXRIYWwuY3BwCkBAIC01NCw2ICs1NCw3IEBACiAgICAgam1ldGhvZElEIG1heFdpZHRoOwogICAgIGptZXRob2RJRCBtYXhIZWlnaHQ7CiAgICAgam1ldGhvZElEIGdlbmVyYXRpb247CisgICAgam1ldGhvZElEIGZsYWdzOwogICAgIGptZXRob2RJRCBidWlsZDsKIH0gZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mbzsKIApAQCAtMjM5LDcgKzI0MCw3IEBACiAKICAgICBpbnQgYWRkT3JVcGRhdGVTdHJlYW0oaW50IGRldmljZUlkLCBpbnQgc3RyZWFtSWQsIGNvbnN0IHNwPFN1cmZhY2U+JiBzdXJmYWNlKTsKICAgICBpbnQgcmVtb3ZlU3RyZWFtKGludCBkZXZpY2VJZCwgaW50IHN0cmVhbUlkKTsKLSAgICBjb25zdCB0dl9zdHJlYW1fY29uZmlnX3QqIGdldFN0cmVhbUNvbmZpZ3MoaW50IGRldmljZUlkLCBpbnQqIG51bUNvbmZpZ3MpOworICAgIGNvbnN0IHR2X3N0cmVhbV9jb25maWdfZXh0X3QqIGdldFN0cmVhbUNvbmZpZ3MoaW50IGRldmljZUlkLCBpbnQqIG51bUNvbmZpZ3MpOwogCiAgICAgdm9pZCBvbkRldmljZUF2YWlsYWJsZShjb25zdCB0dl9pbnB1dF9kZXZpY2VfaW5mb190JiBpbmZvKTsKICAgICB2b2lkIG9uRGV2aWNlVW5hdmFpbGFibGUoaW50IGRldmljZUlkKTsKQEAgLTI4OCwxMCArMjg5LDE1IEBACiAgICAgc3A8TG9vcGVyPiBtTG9vcGVyOwogCiAgICAgS2V5ZWRWZWN0b3I8aW50LCBLZXllZFZlY3RvcjxpbnQsIENvbm5lY3Rpb24+ID4gbUNvbm5lY3Rpb25zOworCisgICAgdHZfc3RyZWFtX2NvbmZpZ19leHRfdCogbUNvbmZpZ0J1ZmZlcjsKKyAgICBpbnQgbUNvbmZpZ0J1ZmZlclNpemU7CiB9OwogCiBKVHZJbnB1dEhhbDo6SlR2SW5wdXRIYWwoSk5JRW52KiBlbnYsIGpvYmplY3QgdGhpeiwgdHZfaW5wdXRfZGV2aWNlX3QqIGRldmljZSwKLSAgICAgICAgY29uc3Qgc3A8TG9vcGVyPiYgbG9vcGVyKSB7CisgICAgICAgIGNvbnN0IHNwPExvb3Blcj4mIGxvb3BlcikKKyAgICA6IG1Db25maWdCdWZmZXIoTlVMTCksCisgICAgICBtQ29uZmlnQnVmZmVyU2l6ZSgwKSB7CiAgICAgbVRoaXogPSBlbnYtPk5ld1dlYWtHbG9iYWxSZWYodGhpeik7CiAgICAgbURldmljZSA9IGRldmljZTsKICAgICBtQ2FsbGJhY2subm90aWZ5ID0gJkpUdklucHV0SGFsOjpub3RpZnk7CkBAIC0zMDYsNiArMzEyLDEwIEBACiAgICAgSk5JRW52KiBlbnYgPSBBbmRyb2lkUnVudGltZTo6Z2V0Sk5JRW52KCk7CiAgICAgZW52LT5EZWxldGVXZWFrR2xvYmFsUmVmKG1UaGl6KTsKICAgICBtVGhpeiA9IE5VTEw7CisKKyAgICBpZiAobUNvbmZpZ0J1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZVtdIG1Db25maWdCdWZmZXI7CisgICAgfQogfQogCiBKVHZJbnB1dEhhbCogSlR2SW5wdXRIYWw6OmNyZWF0ZUluc3RhbmNlKEpOSUVudiogZW52LCBqb2JqZWN0IHRoaXosIGNvbnN0IHNwPExvb3Blcj4mIGxvb3BlcikgewpAQCAtMzU0LDE1ICszNjQsMTQgQEAKICAgICBpZiAoY29ubmVjdGlvbi5tU291cmNlSGFuZGxlID09IE5VTEwgJiYgY29ubmVjdGlvbi5tVGhyZWFkID09IE5VTEwpIHsKICAgICAgICAgLy8gTmVlZCB0byBjb25maWd1cmUgc3RyZWFtCiAgICAgICAgIGludCBudW1Db25maWdzID0gMDsKLSAgICAgICAgY29uc3QgdHZfc3RyZWFtX2NvbmZpZ190KiBjb25maWdzID0gTlVMTDsKLSAgICAgICAgaWYgKG1EZXZpY2UtPmdldF9zdHJlYW1fY29uZmlndXJhdGlvbnMoCi0gICAgICAgICAgICAgICAgbURldmljZSwgZGV2aWNlSWQsICZudW1Db25maWdzLCAmY29uZmlncykgIT0gMCkgeworICAgICAgICBjb25zdCB0dl9zdHJlYW1fY29uZmlnX2V4dF90KiBjb25maWdzID0gZ2V0U3RyZWFtQ29uZmlncyhkZXZpY2VJZCwgJm51bUNvbmZpZ3MpOworICAgICAgICBpZiAoY29uZmlncyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBBTE9HRSgiQ291bGRuJ3QgZ2V0IHN0cmVhbSBjb25maWdzIik7CiAgICAgICAgICAgICByZXR1cm4gVU5LTk9XTl9FUlJPUjsKICAgICAgICAgfQogICAgICAgICBpbnQgY29uZmlnSW5kZXggPSAtMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db25maWdzOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChjb25maWdzW2ldLnN0cmVhbV9pZCA9PSBzdHJlYW1JZCkgeworICAgICAgICAgICAgaWYgKGNvbmZpZ3NbaV0uY29uZmlnLnN0cmVhbV9pZCA9PSBzdHJlYW1JZCkgewogICAgICAgICAgICAgICAgIGNvbmZpZ0luZGV4ID0gaTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM3MSwxMyArMzgwLDEzIEBACiAgICAgICAgICAgICBBTE9HRSgiQ2Fubm90IGZpbmQgYSBjb25maWcgd2l0aCBnaXZlbiBzdHJlYW0gSUQ6ICVkIiwgc3RyZWFtSWQpOwogICAgICAgICAgICAgcmV0dXJuIEJBRF9WQUxVRTsKICAgICAgICAgfQotICAgICAgICBjb25uZWN0aW9uLm1TdHJlYW1UeXBlID0gY29uZmlnc1tjb25maWdJbmRleF0udHlwZTsKKyAgICAgICAgY29ubmVjdGlvbi5tU3RyZWFtVHlwZSA9IGNvbmZpZ3NbY29uZmlnSW5kZXhdLmNvbmZpZy50eXBlOwogCiAgICAgICAgIHR2X3N0cmVhbV90IHN0cmVhbTsKLSAgICAgICAgc3RyZWFtLnN0cmVhbV9pZCA9IGNvbmZpZ3NbY29uZmlnSW5kZXhdLnN0cmVhbV9pZDsKKyAgICAgICAgc3RyZWFtLnN0cmVhbV9pZCA9IGNvbmZpZ3NbY29uZmlnSW5kZXhdLmNvbmZpZy5zdHJlYW1faWQ7CiAgICAgICAgIGlmIChjb25uZWN0aW9uLm1TdHJlYW1UeXBlID09IFRWX1NUUkVBTV9UWVBFX0JVRkZFUl9QUk9EVUNFUikgewotICAgICAgICAgICAgc3RyZWFtLmJ1ZmZlcl9wcm9kdWNlci53aWR0aCA9IGNvbmZpZ3NbY29uZmlnSW5kZXhdLm1heF92aWRlb193aWR0aDsKLSAgICAgICAgICAgIHN0cmVhbS5idWZmZXJfcHJvZHVjZXIuaGVpZ2h0ID0gY29uZmlnc1tjb25maWdJbmRleF0ubWF4X3ZpZGVvX2hlaWdodDsKKyAgICAgICAgICAgIHN0cmVhbS5idWZmZXJfcHJvZHVjZXIud2lkdGggPSBjb25maWdzW2NvbmZpZ0luZGV4XS5jb25maWcubWF4X3ZpZGVvX3dpZHRoOworICAgICAgICAgICAgc3RyZWFtLmJ1ZmZlcl9wcm9kdWNlci5oZWlnaHQgPSBjb25maWdzW2NvbmZpZ0luZGV4XS5jb25maWcubWF4X3ZpZGVvX2hlaWdodDsKICAgICAgICAgfQogICAgICAgICBpZiAobURldmljZS0+b3Blbl9zdHJlYW0obURldmljZSwgZGV2aWNlSWQsICZzdHJlYW0pICE9IDApIHsKICAgICAgICAgICAgIEFMT0dFKCJDb3VsZG4ndCBhZGQgc3RyZWFtIik7CkBAIC00MzEsMTIgKzQ0MCwzMyBAQAogICAgIHJldHVybiBOT19FUlJPUjsKIH0KIAotY29uc3QgdHZfc3RyZWFtX2NvbmZpZ190KiBKVHZJbnB1dEhhbDo6Z2V0U3RyZWFtQ29uZmlncyhpbnQgZGV2aWNlSWQsIGludCogbnVtQ29uZmlncykgewotICAgIGNvbnN0IHR2X3N0cmVhbV9jb25maWdfdCogY29uZmlncyA9IE5VTEw7Ci0gICAgaWYgKG1EZXZpY2UtPmdldF9zdHJlYW1fY29uZmlndXJhdGlvbnMoCi0gICAgICAgICAgICBtRGV2aWNlLCBkZXZpY2VJZCwgbnVtQ29uZmlncywgJmNvbmZpZ3MpICE9IDApIHsKLSAgICAgICAgQUxPR0UoIkNvdWxkbid0IGdldCBzdHJlYW0gY29uZmlncyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKK2NvbnN0IHR2X3N0cmVhbV9jb25maWdfZXh0X3QqIEpUdklucHV0SGFsOjpnZXRTdHJlYW1Db25maWdzKGludCBkZXZpY2VJZCwgaW50KiBudW1Db25maWdzKSB7CisgICAgY29uc3QgdHZfc3RyZWFtX2NvbmZpZ19leHRfdCogY29uZmlncyA9IE5VTEw7CisgICAgaWYgKG1EZXZpY2UtPmNvbW1vbi52ZXJzaW9uID49IFRWX0lOUFVUX0RFVklDRV9BUElfVkVSU0lPTl8wXzIpIHsKKyAgICAgICAgaWYgKG1EZXZpY2UtPmdldF9zdHJlYW1fY29uZmlndXJhdGlvbnNfZXh0KAorICAgICAgICAgICAgICAgIG1EZXZpY2UsIGRldmljZUlkLCBudW1Db25maWdzLCAmY29uZmlncykgIT0gMCkgeworICAgICAgICAgICAgQUxPR0UoIkNvdWxkbid0IGdldCBzdHJlYW0gY29uZmlncyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCB0dl9zdHJlYW1fY29uZmlnX3QqIG9sZENvbmZpZ3M7CisgICAgICAgIGlmIChtRGV2aWNlLT5nZXRfc3RyZWFtX2NvbmZpZ3VyYXRpb25zKAorICAgICAgICAgICAgICAgIG1EZXZpY2UsIGRldmljZUlkLCBudW1Db25maWdzLCAmb2xkQ29uZmlncykgIT0gMCkgeworICAgICAgICAgICAgQUxPR0UoIkNvdWxkbid0IGdldCBzdHJlYW0gY29uZmlncyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1Db25maWdCdWZmZXJTaXplIDwgKm51bUNvbmZpZ3MpIHsKKyAgICAgICAgICAgIG1Db25maWdCdWZmZXJTaXplID0gKCpudW1Db25maWdzIC8gMTYgKyAxKSAqIDE2OworICAgICAgICAgICAgaWYgKG1Db25maWdCdWZmZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIG1Db25maWdCdWZmZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtQ29uZmlnQnVmZmVyID0gbmV3IHR2X3N0cmVhbV9jb25maWdfZXh0X3RbbUNvbmZpZ0J1ZmZlclNpemVdOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKm51bUNvbmZpZ3M7ICsraSkgeworICAgICAgICAgICAgbUNvbmZpZ0J1ZmZlcltpXS5jb25maWcgPSBvbGRDb25maWdzW2ldOworICAgICAgICAgICAgbUNvbmZpZ0J1ZmZlcltpXS5mbGFncyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgY29uZmlncyA9IG1Db25maWdCdWZmZXI7CiAgICAgfQogICAgIHJldHVybiBjb25maWdzOwogfQpAQCAtNjI5LDcgKzY1OSw3IEBACiAgICAgICAgIGpsb25nIHB0ciwgamludCBkZXZpY2VJZCwgamludCBnZW5lcmF0aW9uKSB7CiAgICAgSlR2SW5wdXRIYWwqIHR2SW5wdXRIYWwgPSAoSlR2SW5wdXRIYWwqKXB0cjsKICAgICBpbnQgbnVtQ29uZmlncyA9IDA7Ci0gICAgY29uc3QgdHZfc3RyZWFtX2NvbmZpZ190KiBjb25maWdzID0gdHZJbnB1dEhhbC0+Z2V0U3RyZWFtQ29uZmlncyhkZXZpY2VJZCwgJm51bUNvbmZpZ3MpOworICAgIGNvbnN0IHR2X3N0cmVhbV9jb25maWdfZXh0X3QqIGNvbmZpZ3MgPSB0dklucHV0SGFsLT5nZXRTdHJlYW1Db25maWdzKGRldmljZUlkLCAmbnVtQ29uZmlncyk7CiAKICAgICBqb2JqZWN0QXJyYXkgcmVzdWx0ID0gZW52LT5OZXdPYmplY3RBcnJheShudW1Db25maWdzLCBnVHZTdHJlYW1Db25maWdDbGFzc0luZm8uY2xhenosIE5VTEwpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ29uZmlnczsgKytpKSB7CkBAIC02MzcsMTUgKzY2NywyMCBAQAogICAgICAgICAgICAgICAgIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8uY2xhenosCiAgICAgICAgICAgICAgICAgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5jb25zdHJ1Y3Rvcik7CiAgICAgICAgIGVudi0+Q2FsbE9iamVjdE1ldGhvZCgKLSAgICAgICAgICAgICAgICBidWlsZGVyLCBnVHZTdHJlYW1Db25maWdCdWlsZGVyQ2xhc3NJbmZvLnN0cmVhbUlkLCBjb25maWdzW2ldLnN0cmVhbV9pZCk7CisgICAgICAgICAgICAgICAgYnVpbGRlciwgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5zdHJlYW1JZCwgY29uZmlnc1tpXS5jb25maWcuc3RyZWFtX2lkKTsKICAgICAgICAgZW52LT5DYWxsT2JqZWN0TWV0aG9kKAotICAgICAgICAgICAgICAgIGJ1aWxkZXIsIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8udHlwZSwgY29uZmlnc1tpXS50eXBlKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLCBnVHZTdHJlYW1Db25maWdCdWlsZGVyQ2xhc3NJbmZvLnR5cGUsIGNvbmZpZ3NbaV0uY29uZmlnLnR5cGUpOwogICAgICAgICBlbnYtPkNhbGxPYmplY3RNZXRob2QoCi0gICAgICAgICAgICAgICAgYnVpbGRlciwgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5tYXhXaWR0aCwgY29uZmlnc1tpXS5tYXhfdmlkZW9fd2lkdGgpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIsIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8ubWF4V2lkdGgsCisgICAgICAgICAgICAgICAgY29uZmlnc1tpXS5jb25maWcubWF4X3ZpZGVvX3dpZHRoKTsKICAgICAgICAgZW52LT5DYWxsT2JqZWN0TWV0aG9kKAotICAgICAgICAgICAgICAgIGJ1aWxkZXIsIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8ubWF4SGVpZ2h0LCBjb25maWdzW2ldLm1heF92aWRlb19oZWlnaHQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIsIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8ubWF4SGVpZ2h0LAorICAgICAgICAgICAgICAgIGNvbmZpZ3NbaV0uY29uZmlnLm1heF92aWRlb19oZWlnaHQpOwogICAgICAgICBlbnYtPkNhbGxPYmplY3RNZXRob2QoCiAgICAgICAgICAgICAgICAgYnVpbGRlciwgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5nZW5lcmF0aW9uLCBnZW5lcmF0aW9uKTsKKyAgICAgICAgZW52LT5DYWxsT2JqZWN0TWV0aG9kKAorICAgICAgICAgICAgICAgIGJ1aWxkZXIsIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8uZmxhZ3MsCisgICAgICAgICAgICAgICAgY29uZmlnc1tpXS5mbGFncyk7CiAKICAgICAgICAgam9iamVjdCBjb25maWcgPSBlbnYtPkNhbGxPYmplY3RNZXRob2QoYnVpbGRlciwgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5idWlsZCk7CiAKQEAgLTczNyw2ICs3NzIsMTAgQEAKICAgICAgICAgICAgIGdUdlN0cmVhbUNvbmZpZ0J1aWxkZXJDbGFzc0luZm8uY2xhenosCiAgICAgICAgICAgICAiZ2VuZXJhdGlvbiIsICIoSSlMYW5kcm9pZC9tZWRpYS90di9UdlN0cmVhbUNvbmZpZyRCdWlsZGVyOyIpOwogICAgIEdFVF9NRVRIT0RfSUQoCisgICAgICAgICAgICBnVHZTdHJlYW1Db25maWdCdWlsZGVyQ2xhc3NJbmZvLmZsYWdzLAorICAgICAgICAgICAgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5jbGF6eiwKKyAgICAgICAgICAgICJmbGFncyIsICIoSSlMYW5kcm9pZC9tZWRpYS90di9UdlN0cmVhbUNvbmZpZyRCdWlsZGVyOyIpOworICAgIEdFVF9NRVRIT0RfSUQoCiAgICAgICAgICAgICBnVHZTdHJlYW1Db25maWdCdWlsZGVyQ2xhc3NJbmZvLmJ1aWxkLAogICAgICAgICAgICAgZ1R2U3RyZWFtQ29uZmlnQnVpbGRlckNsYXNzSW5mby5jbGF6eiwKICAgICAgICAgICAgICJidWlsZCIsICIoKUxhbmRyb2lkL21lZGlhL3R2L1R2U3RyZWFtQ29uZmlnOyIpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhIGIvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCmluZGV4IDVjZjhhYzBlLi5jNGQ1YzUwIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9kZXZpY2Vwb2xpY3kvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvZGV2aWNlcG9saWN5L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyU2VydmljZS5qYXZhCkBAIC0xNiw4ICsxNiw2IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLmRldmljZXBvbGljeTsKIAotaW1wb3J0IGNvbS5nb29nbGUuYW5kcm9pZC5jb2xsZWN0LlNldHM7Ci0KIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9DQV9DRVJUSUZJQ0FURVM7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXIuUEFTU1dPUkRfUVVBTElUWV9DT01QTEVYOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFwcC5hZG1pbi5EZXZpY2VQb2xpY3lNYW5hZ2VyLldJUEVfRVhURVJOQUxfU1RPUkFHRTsKQEAgLTI4LDYgKzI2LDggQEAKIGltcG9ydCBzdGF0aWMgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlci5FTkRfVEFHOwogaW1wb3J0IHN0YXRpYyBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyLlRFWFQ7CiAKK2ltcG9ydCBjb20uZ29vZ2xlLmFuZHJvaWQuY29sbGVjdC5TZXRzOworCiBpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uOwogaW1wb3J0IGFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuYWNjb3VudHMuQWNjb3VudE1hbmFnZXI7CkBAIC0xMDksOCArMTA5LDYgQEAKIGltcG9ydCBhbmRyb2lkLnV0aWwuQXJyYXlNYXA7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlByaW50V3JpdGVyUHJpbnRlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUHJpbnRlcjsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU3BhcnNlQXJyYXk7CiBpbXBvcnQgYW5kcm9pZC51dGlsLlhtbDsKQEAgLTEzMSw2ICsxMjksNyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5TeXN0ZW1TZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5kZXZpY2Vwb2xpY3kuRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2UuQWN0aXZlQWRtaW4uVHJ1c3RBZ2VudEluZm87CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBtLlVzZXJNYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIucG0uVXNlclJlc3RyaWN0aW9uc1V0aWxzOwogCiBpbXBvcnQgb3JnLnhtbHB1bGwudjEuWG1sUHVsbFBhcnNlcjsKQEAgLTE5NSw2ICsxOTQsOCBAQAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX1BFUk1JU1NJT05fUE9MSUNZID0gInBlcm1pc3Npb24tcG9saWN5IjsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0RFTEVHQVRFRF9DRVJUX0lOU1RBTExFUiA9ICJkZWxlZ2F0ZWQtY2VydC1pbnN0YWxsZXIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVFRSX0FQUExJQ0FUSU9OX1JFU1RSSUNUSU9OU19NQU5BR0VSCisgICAgICAgICAgICA9ICJhcHBsaWNhdGlvbi1yZXN0cmljdGlvbnMtbWFuYWdlciI7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVFVTX0JBUl9ESVNBQkxFX01BU0sgPQogICAgICAgICAgICAgU3RhdHVzQmFyTWFuYWdlci5ESVNBQkxFX0VYUEFORCB8CkBAIC0yNTMsNiArMjU0LDcgQEAKICAgICBmaW5hbCBJUGFja2FnZU1hbmFnZXIgbUlQYWNrYWdlTWFuYWdlcjsKICAgICBmaW5hbCBVc2VyTWFuYWdlciBtVXNlck1hbmFnZXI7CiAgICAgZmluYWwgVXNlck1hbmFnZXJJbnRlcm5hbCBtVXNlck1hbmFnZXJJbnRlcm5hbDsKKyAgICBwcml2YXRlIGZpbmFsIExvY2tQYXR0ZXJuVXRpbHMgbUxvY2tQYXR0ZXJuVXRpbHM7CiAKICAgICBmaW5hbCBMb2NhbFNlcnZpY2UgbUxvY2FsU2VydmljZTsKIApAQCAtMzI0LDYgKzMyNiw4IEBACiAKICAgICAgICAgYm9vbGVhbiBkb05vdEFza0NyZWRlbnRpYWxzT25Cb290ID0gZmFsc2U7CiAKKyAgICAgICAgU3RyaW5nIG1BcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZTsKKwogICAgICAgICBwdWJsaWMgRGV2aWNlUG9saWN5RGF0YShpbnQgdXNlckhhbmRsZSkgewogICAgICAgICAgICAgbVVzZXJIYW5kbGUgPSB1c2VySGFuZGxlOwogICAgICAgICB9CkBAIC0zODUsNiArMzg5LDcgQEAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19ESVNBQkxFX0tFWUdVQVJEX0ZFQVRVUkVTID0gImRpc2FibGUta2V5Z3VhcmQtZmVhdHVyZXMiOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0RJU0FCTEVfQ0FNRVJBID0gImRpc2FibGUtY2FtZXJhIjsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19ESVNBQkxFX0NBTExFUl9JRCA9ICJkaXNhYmxlLWNhbGxlci1pZCI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRElTQUJMRV9DT05UQUNUU19TRUFSQ0ggPSAiZGlzYWJsZS1jb250YWN0cy1zZWFyY2giOwogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0RJU0FCTEVfQkxVRVRPT1RIX0NPTlRBQ1RfU0hBUklORwogICAgICAgICAgICAgICAgID0gImRpc2FibGUtYnQtY29udGFjdHMtc2hhcmluZyI7CiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRElTQUJMRV9TQ1JFRU5fQ0FQVFVSRSA9ICJkaXNhYmxlLXNjcmVlbi1jYXB0dXJlIjsKQEAgLTQyMiw2ICs0MjcsOSBAQAogICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BBQ0tBR0VfTElTVF9JVEVNICA9ICJpdGVtIjsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19LRUVQX1VOSU5TVEFMTEVEX1BBQ0tBR0VTICA9ICJrZWVwLXVuaW5zdGFsbGVkLXBhY2thZ2VzIjsKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19VU0VSX1JFU1RSSUNUSU9OUyA9ICJ1c2VyLXJlc3RyaWN0aW9ucyI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfU0hPUlRfU1VQUE9SVF9NRVNTQUdFID0gInNob3J0LXN1cHBvcnQtbWVzc2FnZSI7CisgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfTE9OR19TVVBQT1JUX01FU1NBR0UgPSAibG9uZy1zdXBwb3J0LW1lc3NhZ2UiOworICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX1BBUkVOVF9BRE1JTiA9ICJwYXJlbnQtYWRtaW4iOwogCiAgICAgICAgIGZpbmFsIERldmljZUFkbWluSW5mbyBpbmZvOwogCkBAIC00NzAsMTAgKzQ3OCwxNCBAQAogICAgICAgICBib29sZWFuIGVuY3J5cHRpb25SZXF1ZXN0ZWQgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBkaXNhYmxlQ2FtZXJhID0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gZGlzYWJsZUNhbGxlcklkID0gZmFsc2U7CisgICAgICAgIGJvb2xlYW4gZGlzYWJsZUNvbnRhY3RzU2VhcmNoID0gZmFsc2U7CiAgICAgICAgIGJvb2xlYW4gZGlzYWJsZUJsdWV0b290aENvbnRhY3RTaGFyaW5nID0gdHJ1ZTsKICAgICAgICAgYm9vbGVhbiBkaXNhYmxlU2NyZWVuQ2FwdHVyZSA9IGZhbHNlOyAvLyBDYW4gb25seSBiZSBzZXQgYnkgYSBkZXZpY2UvcHJvZmlsZSBvd25lci4KICAgICAgICAgYm9vbGVhbiByZXF1aXJlQXV0b1RpbWUgPSBmYWxzZTsgLy8gQ2FuIG9ubHkgYmUgc2V0IGJ5IGEgZGV2aWNlIG93bmVyLgogCisgICAgICAgIEFjdGl2ZUFkbWluIHBhcmVudEFkbWluOworICAgICAgICBmaW5hbCBib29sZWFuIGlzUGFyZW50OworCiAgICAgICAgIHN0YXRpYyBjbGFzcyBUcnVzdEFnZW50SW5mbyB7CiAgICAgICAgICAgICBwdWJsaWMgUGVyc2lzdGFibGVCdW5kbGUgb3B0aW9uczsKICAgICAgICAgICAgIFRydXN0QWdlbnRJbmZvKFBlcnNpc3RhYmxlQnVuZGxlIGJ1bmRsZSkgewpAQCAtNTA3LDggKzUxOSwyMCBAQAogCiAgICAgICAgIEJ1bmRsZSB1c2VyUmVzdHJpY3Rpb25zOwogCi0gICAgICAgIEFjdGl2ZUFkbWluKERldmljZUFkbWluSW5mbyBfaW5mbykgeworICAgICAgICAvLyBTdXBwb3J0IHRleHQgcHJvdmlkZWQgYnkgdGhlIGFkbWluIHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIuCisgICAgICAgIFN0cmluZyBzaG9ydFN1cHBvcnRNZXNzYWdlID0gbnVsbDsKKyAgICAgICAgU3RyaW5nIGxvbmdTdXBwb3J0TWVzc2FnZSA9IG51bGw7CisKKyAgICAgICAgQWN0aXZlQWRtaW4oRGV2aWNlQWRtaW5JbmZvIF9pbmZvLCBib29sZWFuIHBhcmVudCkgewogICAgICAgICAgICAgaW5mbyA9IF9pbmZvOworICAgICAgICAgICAgaXNQYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIH0KKworICAgICAgICBBY3RpdmVBZG1pbiBnZXRQYXJlbnRBY3RpdmVBZG1pbigpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnRBZG1pbiA9PSBudWxsICYmICFpc1BhcmVudCkgeworICAgICAgICAgICAgICAgIHBhcmVudEFkbWluID0gbmV3IEFjdGl2ZUFkbWluKGluZm8sIC8qIHBhcmVudCAqLyB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwYXJlbnRBZG1pbjsKICAgICAgICAgfQogCiAgICAgICAgIGludCBnZXRVaWQoKSB7IHJldHVybiBpbmZvLmdldEFjdGl2aXR5SW5mbygpLmFwcGxpY2F0aW9uSW5mby51aWQ7IH0KQEAgLTYxNyw2ICs2NDEsMTEgQEAKICAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVFJfVkFMVUUsIEJvb2xlYW4udG9TdHJpbmcoZGlzYWJsZUNhbGxlcklkKSk7CiAgICAgICAgICAgICAgICAgb3V0LmVuZFRhZyhudWxsLCBUQUdfRElTQUJMRV9DQUxMRVJfSUQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRpc2FibGVDb250YWN0c1NlYXJjaCkgeworICAgICAgICAgICAgICAgIG91dC5zdGFydFRhZyhudWxsLCBUQUdfRElTQUJMRV9DT05UQUNUU19TRUFSQ0gpOworICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUUl9WQUxVRSwgQm9vbGVhbi50b1N0cmluZyhkaXNhYmxlQ29udGFjdHNTZWFyY2gpKTsKKyAgICAgICAgICAgICAgICBvdXQuZW5kVGFnKG51bGwsIFRBR19ESVNBQkxFX0NPTlRBQ1RTX1NFQVJDSCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGlzYWJsZUJsdWV0b290aENvbnRhY3RTaGFyaW5nKSB7CiAgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsIFRBR19ESVNBQkxFX0JMVUVUT09USF9DT05UQUNUX1NIQVJJTkcpOwogICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUUl9WQUxVRSwKQEAgLTY4Niw2ICs3MTUsMjEgQEAKICAgICAgICAgICAgICAgICBVc2VyUmVzdHJpY3Rpb25zVXRpbHMud3JpdGVSZXN0cmljdGlvbnMoCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHVzZXJSZXN0cmljdGlvbnMsIFRBR19VU0VSX1JFU1RSSUNUSU9OUyk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KHNob3J0U3VwcG9ydE1lc3NhZ2UpKSB7CisgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsIFRBR19TSE9SVF9TVVBQT1JUX01FU1NBR0UpOworICAgICAgICAgICAgICAgIG91dC50ZXh0KHNob3J0U3VwcG9ydE1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG91dC5lbmRUYWcobnVsbCwgVEFHX1NIT1JUX1NVUFBPUlRfTUVTU0FHRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5pc0VtcHR5KGxvbmdTdXBwb3J0TWVzc2FnZSkpIHsKKyAgICAgICAgICAgICAgICBvdXQuc3RhcnRUYWcobnVsbCwgVEFHX0xPTkdfU1VQUE9SVF9NRVNTQUdFKTsKKyAgICAgICAgICAgICAgICBvdXQudGV4dChsb25nU3VwcG9ydE1lc3NhZ2UpOworICAgICAgICAgICAgICAgIG91dC5lbmRUYWcobnVsbCwgVEFHX0xPTkdfU1VQUE9SVF9NRVNTQUdFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYXJlbnRBZG1pbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgb3V0LnN0YXJ0VGFnKG51bGwsIFRBR19QQVJFTlRfQURNSU4pOworICAgICAgICAgICAgICAgIHBhcmVudEFkbWluLndyaXRlVG9YbWwob3V0KTsKKyAgICAgICAgICAgICAgICBvdXQuZW5kVGFnKG51bGwsIFRBR19QQVJFTlRfQURNSU4pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB3cml0ZVBhY2thZ2VMaXN0VG9YbWwoWG1sU2VyaWFsaXplciBvdXQsIFN0cmluZyBvdXRlclRhZywKQEAgLTc3Myw2ICs4MTcsOSBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEFHX0RJU0FCTEVfQ0FMTEVSX0lELmVxdWFscyh0YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVDYWxsZXJJZCA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBBVFRSX1ZBTFVFKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUQUdfRElTQUJMRV9DT05UQUNUU19TRUFSQ0guZXF1YWxzKHRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbnRhY3RzU2VhcmNoID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfVkFMVUUpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRBR19ESVNBQkxFX0JMVUVUT09USF9DT05UQUNUX1NIQVJJTkcuZXF1YWxzKHRhZykpIHsKICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJsdWV0b290aENvbnRhY3RTaGFyaW5nID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4ocGFyc2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIEFUVFJfVkFMVUUpKTsKQEAgLTc5OSw2ICs4NDYsMjMgQEAKICAgICAgICAgICAgICAgICAgICAga2VlcFVuaW5zdGFsbGVkUGFja2FnZXMgPSByZWFkUGFja2FnZUxpc3QocGFyc2VyLCB0YWcpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEFHX1VTRVJfUkVTVFJJQ1RJT05TLmVxdWFscyh0YWcpKSB7CiAgICAgICAgICAgICAgICAgICAgIFVzZXJSZXN0cmljdGlvbnNVdGlscy5yZWFkUmVzdHJpY3Rpb25zKHBhcnNlciwgZW5zdXJlVXNlclJlc3RyaWN0aW9ucygpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFRBR19TSE9SVF9TVVBQT1JUX01FU1NBR0UuZXF1YWxzKHRhZykpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHBhcnNlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFhtbFB1bGxQYXJzZXIuVEVYVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRTdXBwb3J0TWVzc2FnZSA9IHBhcnNlci5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiTWlzc2luZyB0ZXh0IHdoZW4gbG9hZGluZyBzaG9ydCBzdXBwb3J0IG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoVEFHX0xPTkdfU1VQUE9SVF9NRVNTQUdFLmVxdWFscyh0YWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBwYXJzZXIubmV4dCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBYbWxQdWxsUGFyc2VyLlRFWFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdTdXBwb3J0TWVzc2FnZSA9IHBhcnNlci5nZXRUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBMb2cudyhMT0dfVEFHLCAiTWlzc2luZyB0ZXh0IHdoZW4gbG9hZGluZyBsb25nIHN1cHBvcnQgbWVzc2FnZSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChUQUdfUEFSRU5UX0FETUlOLmVxdWFscyh0YWcpKSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudEFkbWluID0gbmV3IEFjdGl2ZUFkbWluKGluZm8sIC8qIHBhcmVudCAqLyB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50QWRtaW4ucmVhZEZyb21YbWwocGFyc2VyKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBTbG9nLncoTE9HX1RBRywgIlVua25vd24gYWRtaW4gdGFnOiAiICsgdGFnKTsKICAgICAgICAgICAgICAgICAgICAgWG1sVXRpbHMuc2tpcEN1cnJlbnRUYWcocGFyc2VyKTsKQEAgLTk4MSw2ICsxMDQ1LDggQEAKICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnRsbihkaXNhYmxlQ2FtZXJhKTsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJkaXNhYmxlQ2FsbGVySWQ9Iik7CiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oZGlzYWJsZUNhbGxlcklkKTsKKyAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJkaXNhYmxlQ29udGFjdHNTZWFyY2g9Iik7CisgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oZGlzYWJsZUNvbnRhY3RzU2VhcmNoKTsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJkaXNhYmxlQmx1ZXRvb3RoQ29udGFjdFNoYXJpbmc9Iik7CiAgICAgICAgICAgICAgICAgICAgIHB3LnByaW50bG4oZGlzYWJsZUJsdWV0b290aENvbnRhY3RTaGFyaW5nKTsKICAgICAgICAgICAgIHB3LnByaW50KHByZWZpeCk7IHB3LnByaW50KCJkaXNhYmxlU2NyZWVuQ2FwdHVyZT0iKTsKQEAgLTEwMzcsMTkgKzExMDMsMTUgQEAKICAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQocG9saWN5Lm1Vc2VySGFuZGxlKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHBvbGljeS5tRGVsZWdhdGVkQ2VydEluc3RhbGxlclBhY2thZ2UgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAocGFja2FnZU5hbWUgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICB8fCBwYWNrYWdlTmFtZS5lcXVhbHMocG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSkpKSB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZGVsZWdhdGVkIGNlcnQgaW5zdGFsbGVyIHBhY2thZ2UgaXMgcmVtb3ZlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1JUGFja2FnZU1hbmFnZXIuZ2V0UGFja2FnZUluZm8oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSwgMCwgdXNlckhhbmRsZSkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQocG9saWN5Lm1Vc2VySGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW4KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDaGVjayBpZiBkZWxlZ2F0ZWQgY2VydCBpbnN0YWxsZXIgb3IgYXBwIHJlc3RyaWN0aW9ucyBtYW5hZ2luZyBwYWNrYWdlcyBhcmUgcmVtb3ZlZC4KKyAgICAgICAgICAgIGlmIChpc1JlbW92ZWRQYWNrYWdlKHBhY2thZ2VOYW1lLCBwb2xpY3kubURlbGVnYXRlZENlcnRJbnN0YWxsZXJQYWNrYWdlLCB1c2VySGFuZGxlKSkgeworICAgICAgICAgICAgICAgIHBvbGljeS5tRGVsZWdhdGVkQ2VydEluc3RhbGxlclBhY2thZ2UgPSBudWxsOworICAgICAgICAgICAgICAgIHNhdmVTZXR0aW5nc0xvY2tlZChwb2xpY3kubVVzZXJIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzUmVtb3ZlZFBhY2thZ2UoCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlLCB1c2VySGFuZGxlKSkgeworICAgICAgICAgICAgICAgIHBvbGljeS5tQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UgPSBudWxsOworICAgICAgICAgICAgICAgIHNhdmVTZXR0aW5nc0xvY2tlZChwb2xpY3kubVVzZXJIYW5kbGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChyZW1vdmVkKSB7CkBAIC0xMDU4LDYgKzExMjAsMTggQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIHByaXZhdGUgYm9vbGVhbiBpc1JlbW92ZWRQYWNrYWdlKFN0cmluZyBjaGFuZ2VkUGFja2FnZSwgU3RyaW5nIHRhcmdldFBhY2thZ2UsIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0UGFja2FnZSAhPSBudWxsCisgICAgICAgICAgICAgICAgICAgICYmIChjaGFuZ2VkUGFja2FnZSA9PSBudWxsIHx8IGNoYW5nZWRQYWNrYWdlLmVxdWFscyh0YXJnZXRQYWNrYWdlKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgbUlQYWNrYWdlTWFuYWdlci5nZXRQYWNrYWdlSW5mbyh0YXJnZXRQYWNrYWdlLCAwLCB1c2VySGFuZGxlKSA9PSBudWxsOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gU2hvdWxkbid0IGhhcHBlbgorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFVuaXQgdGVzdCB3aWxsIHN1YmNsYXNzIGl0IHRvIGluamVjdCBtb2Nrcy4KICAgICAgKi8KQEAgLTExNjQsNiArMTIzOCwxMCBAQAogICAgICAgICAgICAgbUNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShQb3dlck1hbmFnZXIuY2xhc3MpLmdvVG9TbGVlcCh0aW1lLCByZWFzb24sIGZsYWdzKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgcG93ZXJNYW5hZ2VyUmVib290KFN0cmluZyByZWFzb24pIHsKKyAgICAgICAgICAgIG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoUG93ZXJNYW5hZ2VyLmNsYXNzKS5yZWJvb3QocmVhc29uKTsKKyAgICAgICAgfQorCiAgICAgICAgIGJvb2xlYW4gc3lzdGVtUHJvcGVydGllc0dldEJvb2xlYW4oU3RyaW5nIGtleSwgYm9vbGVhbiBkZWYpIHsKICAgICAgICAgICAgIHJldHVybiBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oa2V5LCBkZWYpOwogICAgICAgICB9CkBAIC0xMjUyLDYgKzEzMzAsNyBAQAogICAgICAgICBtSVBhY2thZ2VNYW5hZ2VyID0gUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwoaW5qZWN0b3IuZ2V0SVBhY2thZ2VNYW5hZ2VyKCkpOwogCiAgICAgICAgIG1Mb2NhbFNlcnZpY2UgPSBuZXcgTG9jYWxTZXJ2aWNlKCk7CisgICAgICAgIG1Mb2NrUGF0dGVyblV0aWxzID0gbmV3IExvY2tQYXR0ZXJuVXRpbHMobUNvbnRleHQpOwogCiAgICAgICAgIG1IYXNGZWF0dXJlID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQogICAgICAgICAgICAgICAgIC5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfREVWSUNFX0FETUlOKTsKQEAgLTE1ODUsNiArMTY2NCwyMyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLyoqCisgICAgICogRmluZCB0aGUgYWRtaW4gZm9yIHRoZSBjb21wb25lbnQgYW5kIHVzZXJJZCBiaXQgb2YgdGhlIHVpZCwgdGhlbiBjaGVjaworICAgICAqIHRoZSBhZG1pbidzIHVpZCBtYXRjaGVzIHRoZSB1aWQuCisgICAgICovCisgICAgcHJpdmF0ZSBBY3RpdmVBZG1pbiBnZXRBY3RpdmVBZG1pbkZvclVpZExvY2tlZChDb21wb25lbnROYW1lIHdobywgaW50IHVpZCkgeworICAgICAgICBmaW5hbCBpbnQgdXNlcklkID0gVXNlckhhbmRsZS5nZXRVc2VySWQodWlkKTsKKyAgICAgICAgZmluYWwgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3kgPSBnZXRVc2VyRGF0YSh1c2VySWQpOworICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IHBvbGljeS5tQWRtaW5NYXAuZ2V0KHdobyk7CisgICAgICAgIGlmIChhZG1pbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIk5vIGFjdGl2ZSBhZG1pbiAiICsgd2hvKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWRtaW4uZ2V0VWlkKCkgIT0gdWlkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkFkbWluICIgKyB3aG8gKyAiIGlzIG5vdCBvd25lZCBieSB1aWQgIiArIHVpZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFkbWluOworICAgIH0KKwogICAgIHByaXZhdGUgQWN0aXZlQWRtaW4gZ2V0QWN0aXZlQWRtaW5XaXRoUG9saWN5Rm9yVWlkTG9ja2VkKENvbXBvbmVudE5hbWUgd2hvLCBpbnQgcmVxUG9saWN5LAogICAgICAgICAgICAgaW50IHVpZCkgewogICAgICAgICAvLyBUcnkgdG8gZmluZCBhbiBhZG1pbiB3aGljaCBjYW4gdXNlIHJlcVBvbGljeQpAQCAtMTU5Niw4ICsxNjkyLDcgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIk5vIGFjdGl2ZSBhZG1pbiAiICsgd2hvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChhZG1pbi5nZXRVaWQoKSAhPSB1aWQpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkFkbWluICIgKyB3aG8gKyAiIGlzIG5vdCBvd25lZCBieSB1aWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkFkbWluICIgKyB3aG8gKyAiIGlzIG5vdCBvd25lZCBieSB1aWQgIiArIHVpZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNBY3RpdmVBZG1pbldpdGhQb2xpY3lGb3JVc2VyTG9ja2VkKGFkbWluLCByZXFQb2xpY3ksIHVzZXJJZCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gYWRtaW47CkBAIC0xNzI3LDEwICsxODIyLDEwIEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBJbnRlbnQgcmVzb2x2ZUludGVudCA9IG5ldyBJbnRlbnQoKTsKICAgICAgICAgcmVzb2x2ZUludGVudC5zZXRDb21wb25lbnQoYWRtaW5OYW1lKTsKLSAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gaW5mb3MgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKAorICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBpbmZvcyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkucXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoCiAgICAgICAgICAgICAgICAgcmVzb2x2ZUludGVudCwKICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUywKICAgICAgICAgICAgICAgICB1c2VySGFuZGxlKTsKQEAgLTE3NTIsMTEgKzE4NDcsNyBAQAogCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1cm4gbmV3IERldmljZUFkbWluSW5mbyhtQ29udGV4dCwgcmkpOwotICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNsb2cudyhMT0dfVEFHLCAiQmFkIGRldmljZSBhZG1pbiByZXF1ZXN0ZWQgZm9yIHVzZXI9IiArIHVzZXJIYW5kbGUgKyAiOiAiICsgYWRtaW5OYW1lLAotICAgICAgICAgICAgICAgICAgICBlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIH0gY2F0Y2ggKFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICBTbG9nLncoTE9HX1RBRywgIkJhZCBkZXZpY2UgYWRtaW4gcmVxdWVzdGVkIGZvciB1c2VyPSIgKyB1c2VySGFuZGxlICsgIjogIiArIGFkbWluTmFtZSwKICAgICAgICAgICAgICAgICAgICAgZSk7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKQEAgLTE4MDEsNiArMTg5MiwxMCBAQAogICAgICAgICAgICAgICAgIG91dC5hdHRyaWJ1dGUobnVsbCwgQVRUUl9ERUxFR0FURURfQ0VSVF9JTlNUQUxMRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubURlbGVnYXRlZENlcnRJbnN0YWxsZXJQYWNrYWdlKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBvdXQuYXR0cmlidXRlKG51bGwsIEFUVFJfQVBQTElDQVRJT05fUkVTVFJJQ1RJT05TX01BTkFHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwb2xpY3kubUFkbWluTGlzdC5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8TjsgaSsrKSB7CkBAIC0xOTI2LDYgKzIwMjEsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSA9IHBhcnNlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLAogICAgICAgICAgICAgICAgICAgICBBVFRSX0RFTEVHQVRFRF9DRVJUX0lOU1RBTExFUik7CisgICAgICAgICAgICBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlID0gcGFyc2VyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsCisgICAgICAgICAgICAgICAgICAgIEFUVFJfQVBQTElDQVRJT05fUkVTVFJJQ1RJT05TX01BTkFHRVIpOwogCiAgICAgICAgICAgICB0eXBlID0gcGFyc2VyLm5leHQoKTsKICAgICAgICAgICAgIGludCBvdXRlckRlcHRoID0gcGFyc2VyLmdldERlcHRoKCk7CkBAIC0xOTUyLDcgKzIwNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1c2VySGFuZGxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYWkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFwID0gbmV3IEFjdGl2ZUFkbWluKGRhaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0aXZlQWRtaW4gYXAgPSBuZXcgQWN0aXZlQWRtaW4oZGFpLCAvKiBwYXJlbnQgKi8gZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwLnJlYWRGcm9tWG1sKHBhcnNlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1BZG1pbk1hcC5wdXQoYXAuaW5mby5nZXRDb21wb25lbnQoKSwgYXApOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTk5NCwxOCArMjA5MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICBYbWxVdGlscy5za2lwQ3VycmVudFRhZyhwYXJzZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoTnVsbFBvaW50ZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KExPR19UQUcsICJmYWlsZWQgcGFyc2luZyAiICsgZmlsZSArICIgIiArIGUpOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KExPR19UQUcsICJmYWlsZWQgcGFyc2luZyAiICsgZmlsZSArICIgIiArIGUpOwotICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIFNsb2cudyhMT0dfVEFHLCAiZmFpbGVkIHBhcnNpbmcgIiArIGZpbGUgKyAiICIgKyBlKTsKICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIERvbid0IGJlIG5vaXN5LCB0aGlzIGlzIG5vcm1hbCBpZiB3ZSBoYXZlbid0IGRlZmluZWQgYW55IHBvbGljaWVzLgotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTbG9nLncoTE9HX1RBRywgImZhaWxlZCBwYXJzaW5nICIgKyBmaWxlICsgIiAiICsgZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU2xvZy53KExPR19UQUcsICJmYWlsZWQgcGFyc2luZyAiICsgZmlsZSArICIgIiArIGUpOworICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiB8IE51bWJlckZvcm1hdEV4Y2VwdGlvbiB8IFhtbFB1bGxQYXJzZXJFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHwgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBTbG9nLncoTE9HX1RBRywgImZhaWxlZCBwYXJzaW5nICIgKyBmaWxlLCBlKTsKICAgICAgICAgfQogICAgICAgICB0cnkgewogICAgICAgICAgICAgaWYgKHN0cmVhbSAhPSBudWxsKSB7CkBAIC0yMzM1LDcgKzI0MjUsNyBAQAogICAgICAgICAgICAgQnVuZGxlIG9uRW5hYmxlRGF0YSkgewogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9ERVZJQ0VfQURNSU5TLCBudWxsKTsKLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAKICAgICAgICAgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3kgPSBnZXRVc2VyRGF0YSh1c2VySGFuZGxlKTsKICAgICAgICAgRGV2aWNlQWRtaW5JbmZvIGluZm8gPSBmaW5kQWRtaW4oYWRtaW5SZWNlaXZlciwgdXNlckhhbmRsZSwKQEAgLTIzNTAsNyArMjQ0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRBY3RpdmVBZG1pblVuY2hlY2tlZExvY2tlZChhZG1pblJlY2VpdmVyLCB1c2VySGFuZGxlKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkFkbWluIGlzIGFscmVhZHkgYWRkZWQiKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQWN0aXZlQWRtaW4gbmV3QWRtaW4gPSBuZXcgQWN0aXZlQWRtaW4oaW5mbyk7CisgICAgICAgICAgICAgICAgQWN0aXZlQWRtaW4gbmV3QWRtaW4gPSBuZXcgQWN0aXZlQWRtaW4oaW5mbywgLyogcGFyZW50ICovIGZhbHNlKTsKICAgICAgICAgICAgICAgICBwb2xpY3kubUFkbWluTWFwLnB1dChhZG1pblJlY2VpdmVyLCBuZXdBZG1pbik7CiAgICAgICAgICAgICAgICAgaW50IHJlcGxhY2VJbmRleCA9IC0xOwogICAgICAgICAgICAgICAgIGZpbmFsIGludCBOID0gcG9saWN5Lm1BZG1pbkxpc3Quc2l6ZSgpOwpAQCAtMjM4MSw3ICsyNDcxLDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIHJldHVybiBnZXRBY3RpdmVBZG1pblVuY2hlY2tlZExvY2tlZChhZG1pblJlY2VpdmVyLCB1c2VySGFuZGxlKSAhPSBudWxsOwogICAgICAgICB9CkBAIC0yMzkyLDcgKzI0ODIsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3lEYXRhID0gZ2V0VXNlckRhdGEodXNlckhhbmRsZSk7CiAgICAgICAgICAgICByZXR1cm4gcG9saWN5RGF0YS5tUmVtb3ZpbmdBZG1pbnMuY29udGFpbnMoYWRtaW5SZWNlaXZlcik7CkBAIC0yNDA0LDcgKzI0OTQsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgQWN0aXZlQWRtaW4gYWRtaW5pc3RyYXRvciA9IGdldEFjdGl2ZUFkbWluVW5jaGVja2VkTG9ja2VkKGFkbWluUmVjZWl2ZXIsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgaWYgKGFkbWluaXN0cmF0b3IgPT0gbnVsbCkgewpAQCAtMjQyMSw3ICsyNTExLDcgQEAKICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNUOwogICAgICAgICB9CiAKLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3kgPSBnZXRVc2VyRGF0YSh1c2VySGFuZGxlKTsKICAgICAgICAgICAgIGZpbmFsIGludCBOID0gcG9saWN5Lm1BZG1pbkxpc3Quc2l6ZSgpOwpAQCAtMjQ0MSw3ICsyNTMxLDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGEodXNlckhhbmRsZSk7CiAgICAgICAgICAgICBmaW5hbCBpbnQgTiA9IHBvbGljeS5tQWRtaW5MaXN0LnNpemUoKTsKQEAgLTI0NTksNyArMjU0OSw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluVW5jaGVja2VkTG9ja2VkKGFkbWluUmVjZWl2ZXIsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgaWYgKGFkbWluID09IG51bGwpIHsKQEAgLTI0ODUsOCArMjU3NSwyMCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBib29sZWFuIGlzQWRtaW5BcGlMZXZlbE1PckJlbG93KEBOb25OdWxsIENvbXBvbmVudE5hbWUgd2hvLCBpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBEZXZpY2VBZG1pbkluZm8gYWRtaW5JbmZvID0gZmluZEFkbWluKHdobywgdXNlckhhbmRsZSwgZmFsc2UpOworICAgICAgICByZXR1cm4gYWRtaW5JbmZvLmdldEFjdGl2aXR5SW5mbygpLmFwcGxpY2F0aW9uSW5mby50YXJnZXRTZGtWZXJzaW9uCisgICAgICAgICAgICAgICAgPD0gQnVpbGQuVkVSU0lPTl9DT0RFUy5NOworICAgIH0KKwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFBhc3N3b3JkUXVhbGl0eShDb21wb25lbnROYW1lIHdobywgaW50IHF1YWxpdHkpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUFsbG93ZWQoaW50IHVzZXJIYW5kbGUpIHsKKyAgICAgICAgQ29tcG9uZW50TmFtZSBwcm9maWxlT3duZXIgPSBnZXRQcm9maWxlT3duZXIodXNlckhhbmRsZSk7CisgICAgICAgIHJldHVybiAhaXNBZG1pbkFwaUxldmVsTU9yQmVsb3cocHJvZmlsZU93bmVyLCB1c2VySGFuZGxlKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXNzd29yZFF1YWxpdHkoQ29tcG9uZW50TmFtZSB3aG8sIGludCBxdWFsaXR5LCBib29sZWFuIHBhcmVudCkgewogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI0OTcsNiArMjU5OSw5IEBACiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgQWN0aXZlQWRtaW4gYXAgPSBnZXRBY3RpdmVBZG1pbkZvckNhbGxlckxvY2tlZCh3aG8sCiAgICAgICAgICAgICAgICAgICAgIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9MSU1JVF9QQVNTV09SRCk7CisgICAgICAgICAgICBpZiAocGFyZW50KSB7CisgICAgICAgICAgICAgICAgYXAgPSBhcC5nZXRQYXJlbnRBY3RpdmVBZG1pbigpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFwLnBhc3N3b3JkUXVhbGl0eSAhPSBxdWFsaXR5KSB7CiAgICAgICAgICAgICAgICAgYXAucGFzc3dvcmRRdWFsaXR5ID0gcXVhbGl0eTsKICAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQodXNlckhhbmRsZSk7CkBAIC0yNTA1LDMwICsyNjEwLDUzIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRQYXNzd29yZFF1YWxpdHkoQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlKSB7CisgICAgcHVibGljIGludCBnZXRQYXNzd29yZFF1YWxpdHkoQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlLCBib29sZWFuIHBhcmVudCkgewogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVEOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGludCBtb2RlID0gRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVEOwogCiAgICAgICAgICAgICBpZiAod2hvICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluVW5jaGVja2VkTG9ja2VkKHdobywgdXNlckhhbmRsZSk7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBhZG1pbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGFkbWluID0gYWRtaW4uZ2V0UGFyZW50QWN0aXZlQWRtaW4oKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkbWluICE9IG51bGwgPyBhZG1pbi5wYXNzd29yZFF1YWxpdHkgOiBtb2RlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBSZXR1cm4gc3RyaWN0ZXN0IHBvbGljeSBmb3IgdGhpcyB1c2VyIGFuZCBwcm9maWxlcyB0aGF0IGFyZSB2aXNpYmxlIGZyb20gdGhpcyB1c2VyLgotICAgICAgICAgICAgTGlzdDxVc2VySW5mbz4gcHJvZmlsZXMgPSBtVXNlck1hbmFnZXIuZ2V0UHJvZmlsZXModXNlckhhbmRsZSk7Ci0gICAgICAgICAgICBmb3IgKFVzZXJJbmZvIHVzZXJJbmZvIDogcHJvZmlsZXMpIHsKLSAgICAgICAgICAgICAgICBEZXZpY2VQb2xpY3lEYXRhIHBvbGljeSA9IGdldFVzZXJEYXRhVW5jaGVja2VkKHVzZXJJbmZvLmlkKTsKKyAgICAgICAgICAgIGlmIChtTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQodXNlckhhbmRsZSkgJiYgIXBhcmVudCkgeworICAgICAgICAgICAgICAgIC8vIElmIGEgV29yayBDaGFsbGVuZ2UgaXMgaW4gdXNlLCBvbmx5IHJldHVybiBpdHMgcmVzdHJpY3Rpb25zLgorICAgICAgICAgICAgICAgIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGFVbmNoZWNrZWQodXNlckhhbmRsZSk7CiAgICAgICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwb2xpY3kubUFkbWluTGlzdC5zaXplKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPE47IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gcG9saWN5Lm1BZG1pbkxpc3QuZ2V0KGkpOwogICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA8IGFkbWluLnBhc3N3b3JkUXVhbGl0eSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGFkbWluLnBhc3N3b3JkUXVhbGl0eTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHN0cmljdGVzdCBwb2xpY3kgZm9yIHRoaXMgdXNlciBhbmQgcHJvZmlsZXMgdGhhdCBhcmUgdmlzaWJsZSBmcm9tIHRoaXMKKyAgICAgICAgICAgICAgICAvLyB1c2VyIHRoYXQgZG8gbm90IHVzZSBhIHNlcGFyYXRlIHdvcmsgY2hhbGxlbmdlLgorICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoZW4gdGhlcmUgYXJlIHNlcGFyYXRlIHBhcmVudCByZXN0cmljdGlvbnMgdGhlIHByb2ZpbGUgc2hvdWxkIGp1c3QKKyAgICAgICAgICAgICAgICAvLyBvYmV5IGl0cyBvd24uCisgICAgICAgICAgICAgICAgTGlzdDxVc2VySW5mbz4gcHJvZmlsZXMgPSBtVXNlck1hbmFnZXIuZ2V0UHJvZmlsZXModXNlckhhbmRsZSk7CisgICAgICAgICAgICAgICAgZm9yIChVc2VySW5mbyB1c2VySW5mbyA6IHByb2ZpbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWdncmVnYXRlIGRhdGEgZm9yIHRoZSBwYXJlbnQgcHJvZmlsZSBwbHVzIHRoZSBub24td29yayBjaGFsbGVuZ2UKKyAgICAgICAgICAgICAgICAgICAgLy8gZW5hYmxlZCBwcm9maWxlcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEodXNlckluZm8uaXNNYW5hZ2VkUHJvZmlsZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKHVzZXJJbmZvLmlkKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGFVbmNoZWNrZWQodXNlckluZm8uaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IE4gPSBwb2xpY3kubUFkbWluTGlzdC5zaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gcG9saWN5Lm1BZG1pbkxpc3QuZ2V0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlIDwgYWRtaW4ucGFzc3dvcmRRdWFsaXR5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBhZG1pbi5wYXNzd29yZFF1YWxpdHk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIG1vZGU7CiAgICAgICAgIH0KQEAgLTI1NTYsNyArMjY4NCw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwogCkBAIC0yNjAzLDcgKzI3MzEsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gMDsKIApAQCAtMjY2Myw3ICsyNzkxLDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIDBMOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGxvbmcgdGltZW91dCA9IDBMOwogCkBAIC0yNzkwLDcgKzI5MTgsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gMEw7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgcmV0dXJuIGdldFBhc3N3b3JkRXhwaXJhdGlvbkxvY2tlZCh3aG8sIHVzZXJIYW5kbGUpOwogICAgICAgICB9CkBAIC0yODE4LDcgKzI5NDYsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gMDsKIApAQCAtMjg2Miw3ICsyOTkwLDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgaW50IGxlbmd0aCA9IDA7CiAKQEAgLTI5MDksNyArMzAzNyw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwogCkBAIC0yOTU5LDcgKzMwODcsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gMDsKIApAQCAtMzAwOSw3ICszMTM3LDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewogICAgICAgICAgICAgaW50IGxlbmd0aCA9IDA7CiAKQEAgLTMwNTksNyArMzE4Nyw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwogCkBAIC0zMDg4LDExICszMjE2LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNBY3RpdmVQYXNzd29yZFN1ZmZpY2llbnQoaW50IHVzZXJIYW5kbGUpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0FjdGl2ZVBhc3N3b3JkU3VmZmljaWVudChpbnQgdXNlckhhbmRsZSwgYm9vbGVhbiBwYXJlbnQpIHsKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBpbnQgaWQgPSBnZXRDcmVkZW50aWFsT3duZXIodXNlckhhbmRsZSk7CkBAIC0zMTAwLDggKzMyMjgsMTQgQEAKIAogICAgICAgICAgICAgLy8gVGhpcyBBUEkgY2FuIG9ubHkgYmUgY2FsbGVkIGJ5IGFuIGFjdGl2ZSBkZXZpY2UgYWRtaW4sCiAgICAgICAgICAgICAvLyBzbyB0cnkgdG8gcmV0cmlldmUgaXQgdG8gY2hlY2sgdGhhdCB0aGUgY2FsbGVyIGlzIG9uZS4KLSAgICAgICAgICAgIGdldEFjdGl2ZUFkbWluRm9yQ2FsbGVyTG9ja2VkKG51bGwsIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9MSU1JVF9QQVNTV09SRCk7Ci0gICAgICAgICAgICBpZiAocG9saWN5Lm1BY3RpdmVQYXNzd29yZFF1YWxpdHkgPCBnZXRQYXNzd29yZFF1YWxpdHkobnVsbCwgdXNlckhhbmRsZSkKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0KKyAgICAgICAgICAgICAgICAgICAgZ2V0QWN0aXZlQWRtaW5Gb3JDYWxsZXJMb2NrZWQobnVsbCwgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX0xJTUlUX1BBU1NXT1JEKTsKKyAgICAgICAgICAgIENvbXBvbmVudE5hbWUgYWRtaW5Db21wb25lbnROYW1lID0gYWRtaW4uaW5mby5nZXRDb21wb25lbnQoKTsKKyAgICAgICAgICAgIC8vIFRPRE86IEluY2x1ZGUgdGhlIEFkbWluIHNkayBsZXZlbCBjaGVjayBpbiBMb2NrUGF0dGVyblV0aWxzIGNoZWNrLgorICAgICAgICAgICAgQ29tcG9uZW50TmFtZSB3aG8gPSAhaXNBZG1pbkFwaUxldmVsTU9yQmVsb3coYWRtaW5Db21wb25lbnROYW1lLCB1c2VySGFuZGxlKQorICAgICAgICAgICAgICAgICAgICAmJiBtTG9ja1BhdHRlcm5VdGlscy5pc1NlcGFyYXRlUHJvZmlsZUNoYWxsZW5nZUVuYWJsZWQodXNlckhhbmRsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgID8gYWRtaW5Db21wb25lbnROYW1lIDogbnVsbDsKKyAgICAgICAgICAgIGlmIChwb2xpY3kubUFjdGl2ZVBhc3N3b3JkUXVhbGl0eSA8IGdldFBhc3N3b3JkUXVhbGl0eSh3aG8sIHVzZXJIYW5kbGUsIHBhcmVudCkKICAgICAgICAgICAgICAgICAgICAgfHwgcG9saWN5Lm1BY3RpdmVQYXNzd29yZExlbmd0aCA8IGdldFBhc3N3b3JkTWluaW11bUxlbmd0aChudWxsLCB1c2VySGFuZGxlKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTMxNTgsNyArMzI5Miw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gKHdobyAhPSBudWxsKSA/IGdldEFjdGl2ZUFkbWluVW5jaGVja2VkTG9ja2VkKHdobywgdXNlckhhbmRsZSkKICAgICAgICAgICAgICAgICAgICAgOiBnZXRBZG1pbldpdGhNaW5pbXVtRmFpbGVkUGFzc3dvcmRzRm9yV2lwZUxvY2tlZCh1c2VySGFuZGxlKTsKQEAgLTMxNzEsNyArMzMwNSw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiBVc2VySGFuZGxlLlVTRVJfTlVMTDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFkbWluV2l0aE1pbmltdW1GYWlsZWRQYXNzd29yZHNGb3JXaXBlTG9ja2VkKHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgcmV0dXJuIGFkbWluICE9IG51bGwgPyBhZG1pbi5nZXRVc2VySGFuZGxlKCkuZ2V0SWRlbnRpZmllcigpIDogVXNlckhhbmRsZS5VU0VSX05VTEw7CkBAIC0zMjY2LDcgKzM0MDAsNyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgcXVhbGl0eSA9IGdldFBhc3N3b3JkUXVhbGl0eShudWxsLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIHF1YWxpdHkgPSBnZXRQYXNzd29yZFF1YWxpdHkobnVsbCwgdXNlckhhbmRsZSwgZmFsc2UpOwogICAgICAgICAgICAgaWYgKHF1YWxpdHkgIT0gRGV2aWNlUG9saWN5TWFuYWdlci5QQVNTV09SRF9RVUFMSVRZX1VOU1BFQ0lGSUVEKSB7CiAgICAgICAgICAgICAgICAgaW50IHJlYWxRdWFsaXR5ID0gTG9ja1BhdHRlcm5VdGlscy5jb21wdXRlUGFzc3dvcmRRdWFsaXR5KHBhc3N3b3JkKTsKICAgICAgICAgICAgICAgICBpZiAocmVhbFF1YWxpdHkgPCBxdWFsaXR5CkBAIC0zNDcwLDcgKzM2MDQsNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBsb25nIHRpbWUgPSAwOwogCkBAIC0zNTYzLDcgKzM2OTcsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGludCB1aWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQoCisgICAgICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZEFzVXNlcigKICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tRGVsZWdhdGVkQ2VydEluc3RhbGxlclBhY2thZ2UsIHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgICAgIHJldHVybiB1aWQgPT0gY2FsbGluZ1VpZDsKICAgICAgICAgICAgIH0gY2F0Y2ggKE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC0zNjk0LDcgKzM4MjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGNob29zZVByaXZhdGVLZXlBbGlhcyhmaW5hbCBpbnQgdWlkLCBmaW5hbCBVcmkgdXJpLCBmaW5hbCBTdHJpbmcgYWxpYXMsCiAgICAgICAgICAgICBmaW5hbCBJQmluZGVyIHJlc3BvbnNlKSB7CiAgICAgICAgIC8vIENhbGxlciBVSUQgbmVlZHMgdG8gYmUgdHJ1c3RlZCwgc28gd2UgcmVzdHJpY3QgdGhpcyBtZXRob2QgdG8gU1lTVEVNX1VJRCBjYWxsZXJzLgotICAgICAgICBpZiAoVXNlckhhbmRsZS5nZXRBcHBJZChtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpKSAhPSBQcm9jZXNzLlNZU1RFTV9VSUQpIHsKKyAgICAgICAgaWYgKCFVc2VySGFuZGxlLmlzU2FtZUFwcChtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpLCBQcm9jZXNzLlNZU1RFTV9VSUQpKSB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzc5Miw3ICszOTI2LDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBmaW5hbCBpbnQgdXNlckhhbmRsZSA9IG1JbmplY3Rvci51c2VySGFuZGxlR2V0Q2FsbGluZ1VzZXJJZCgpOwotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICAvLyBUaGlzIEFQSSBjYW4gb25seSBiZSBjYWxsZWQgYnkgYW4gYWN0aXZlIGRldmljZSBhZG1pbiwKICAgICAgICAgICAgIC8vIHNvIHRyeSB0byByZXRyaWV2ZSBpdCB0byBjaGVjayB0aGF0IHRoZSBjYWxsZXIgaXMgb25lLgpAQCAtMzg3MSw3ICs0MDA1LDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLkJJTkRfREVWSUNFX0FETUlOLCBudWxsKTsKIApAQCAtMzkwMCw5ICs0MDM0LDkgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICAvLyBNYW5hZ2VkIFByb2ZpbGUgcGFzc3dvcmQgY2FuIG9ubHkgYmUgY2hhbmdlZCB3aGVuIHBlciB1c2VyIGVuY3J5cHRpb24gaXMgcHJlc2VudC4KLSAgICAgICAgaWYgKCFMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7CisgICAgICAgIGlmICghbUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKHVzZXJIYW5kbGUpKSB7CiAgICAgICAgICAgICBlbmZvcmNlTm90TWFuYWdlZFByb2ZpbGUodXNlckhhbmRsZSwgInNldCB0aGUgYWN0aXZlIHBhc3N3b3JkIik7CiAgICAgICAgIH0KIApAQCAtMzkyOSw3ICs0MDYzLDcgQEAKICAgICAgICAgICAgICAgICBzZXRFeHBpcmF0aW9uQWxhcm1DaGVja0xvY2tlZChtQ29udGV4dCwgcG9saWN5KTsKIAogICAgICAgICAgICAgICAgIC8vIFNlbmQgYSBicm9hZGNhc3QgdG8gZWFjaCBwcm9maWxlIHVzaW5nIHRoaXMgcGFzc3dvcmQgYXMgaXRzIHByaW1hcnkgdW5sb2NrLgotICAgICAgICAgICAgICAgIGlmIChMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1Mb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVQcm9maWxlQ2hhbGxlbmdlRW5hYmxlZCh1c2VySGFuZGxlKSkgewogICAgICAgICAgICAgICAgICAgICBzZW5kQWRtaW5Db21tYW5kTG9ja2VkKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZUFkbWluUmVjZWl2ZXIuQUNUSU9OX1BBU1NXT1JEX0NIQU5HRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX0xJTUlUX1BBU1NXT1JELCB1c2VySGFuZGxlKTsKQEAgLTM5NjksNyArNDEwMyw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZXBvcnRGYWlsZWRQYXNzd29yZEF0dGVtcHQoaW50IHVzZXJIYW5kbGUpIHsKLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIGVuZm9yY2VOb3RNYW5hZ2VkUHJvZmlsZSh1c2VySGFuZGxlLCAicmVwb3J0IGZhaWxlZCBwYXNzd29yZCBhdHRlbXB0Iik7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQklORF9ERVZJQ0VfQURNSU4sIG51bGwpOwpAQCAtNDAxMSw3ICs0MTQ1LDcgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIHJlcG9ydFN1Y2Nlc3NmdWxQYXNzd29yZEF0dGVtcHQoaW50IHVzZXJIYW5kbGUpIHsKLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbigKICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uQklORF9ERVZJQ0VfQURNSU4sIG51bGwpOwogCkBAIC00MDk1LDcgKzQyMjksNyBAQAogICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKICAgICAgICAgICAgIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGEoVXNlckhhbmRsZS5VU0VSX1NZU1RFTSk7CiAgICAgICAgICAgICAvLyBTY2FuIHRocm91Z2ggYWN0aXZlIGFkbWlucyBhbmQgZmluZCBpZiBhbnlvbmUgaGFzIGFscmVhZHkKQEAgLTQyMzIsNyArNDM2Niw3IEBACiAgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbih1c2VySGFuZGxlKTsKKyAgICAgICAgZW5mb3JjZUZ1bGxDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySGFuZGxlKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICAvLyBDaGVjayBmb3IgcGVybWlzc2lvbnMgaWYgYSBwYXJ0aWN1bGFyIGNhbGxlciBpcyBzcGVjaWZpZWQKICAgICAgICAgICAgIGlmICh3aG8gIT0gbnVsbCkgewpAQCAtNDI2Miw3ICs0Mzk2LDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgLy8gT2sgdG8gcmV0dXJuIGN1cnJlbnQgc3RhdHVzLgogICAgICAgICB9Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICByZXR1cm4gZ2V0RW5jcnlwdGlvblN0YXR1cygpOwogICAgIH0KIApAQCAtNDUxMCw3ICs0NjQ0LDcgQEAKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAgICAgICAgIGxvbmcgaWRlbnQgPSBtSW5qZWN0b3IuYmluZGVyQ2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewpAQCAtNDUyMSwxMCArNDY1NSw5IEBACiAKICAgICAgICAgICAgICAgICBVc2VySW5mbyB1c2VyID0gbVVzZXJNYW5hZ2VyLmdldFVzZXJJbmZvKHVzZXJIYW5kbGUpOwogICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8VXNlckluZm8+IHByb2ZpbGVzOwotICAgICAgICAgICAgICAgIGlmICh1c2VyLmlzTWFuYWdlZFByb2ZpbGUoKSB8fCBMb2NrUGF0dGVyblV0aWxzLmlzU2VwYXJhdGVXb3JrQ2hhbGxlbmdlRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBiZWluZyBhc2tlZCBhYm91dCBhIG1hbmFnZWQgcHJvZmlsZSBvciB0aGUgbWFpbiB1c2VyIHByb2ZpbGUgaGFzIGEKLSAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGUgbG9jayBmcm9tIHRoZSB3b3JrIHByb2ZpbGUsIGp1c3QgcmV0dXJuIGtleWd1YXJkIGZlYXR1cmVzIGRpc2FibGVkCi0gICAgICAgICAgICAgICAgICAgIC8vIGJ5IGFkbWlucyBpbiB0aGUgcHJvZmlsZS4KKyAgICAgICAgICAgICAgICBpZiAodXNlci5pc01hbmFnZWRQcm9maWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGJlaW5nIGFza2VkIGFib3V0IGEgbWFuYWdlZCBwcm9maWxlLCBqdXN0IHJldHVybiBrZXlndWFyZCBmZWF0dXJlcworICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlZCBieSBhZG1pbnMgaW4gdGhlIHByb2ZpbGUuCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVzID0gQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCh1c2VyKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHRob3NlIHNldCBieSBhZG1pbnMgaW4gdGhlIHVzZXIKQEAgLTQ1NDMsOSArNDY3NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBiZWluZyBhc2tlZCBleHBsaWN0bHkgYWJvdXQgdGhpcyB1c2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGFsbCBkaXNhYmxlZCBmZWF0dXJlcyBldmVuIGlmIGl0cyBhIG1hbmFnZWQgcHJvZmlsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB8PSBhZG1pbi5kaXNhYmxlZEtleWd1YXJkRmVhdHVyZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbUxvY2tQYXR0ZXJuVXRpbHMuaXNTZXBhcmF0ZVByb2ZpbGVDaGFsbGVuZ2VFbmFibGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySW5mby5pZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYSBtYW5hZ2VkIHByb2ZpbGUgaXMgb25seSBhbGxvd2VkIHRvIGRpc2FibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGZlYXR1cmVzIG9uIHRoZSBwYXJlbnQgdXNlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGZlYXR1cmVzIG9uIHRoZSBwYXJlbnQgdXNlciwgYW5kIHdlIG9ubHkgYWdncmVnYXRlIHRoZW0gaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBkb2Vzbid0IGhhdmUgaXRzIG93biBjaGFsbGVuZ2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggfD0gKGFkbWluLmRpc2FibGVkS2V5Z3VhcmRGZWF0dXJlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBQUk9GSUxFX0tFWUdVQVJEX0ZFQVRVUkVTX0FGRkVDVF9PV05FUik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC00NzIzLDcgKzQ4NTgsNyBAQAogICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChwYWNrYWdlTmFtZSwgInBhY2thZ2VOYW1lIGlzIG51bGwiKTsKICAgICAgICAgZmluYWwgaW50IGNhbGxpbmdVaWQgPSBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgaW50IHVpZCA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuZ2V0UGFja2FnZVVpZChwYWNrYWdlTmFtZSwgMCk7CisgICAgICAgICAgICBpbnQgdWlkID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlVWlkQXNVc2VyKHBhY2thZ2VOYW1lLCAwKTsKICAgICAgICAgICAgIGlmICh1aWQgIT0gY2FsbGluZ1VpZCkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiSW52YWxpZCBwYWNrYWdlTmFtZSIpOwogICAgICAgICAgICAgfQpAQCAtNDgyOCw2ICs0OTYzLDcgQEAKICAgICAgICAgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3kgPSBnZXRVc2VyRGF0YSh1c2VySWQpOwogICAgICAgICBwb2xpY3kubVBlcm1pc3Npb25Qb2xpY3kgPSBEZXZpY2VQb2xpY3lNYW5hZ2VyLlBFUk1JU1NJT05fUE9MSUNZX1BST01QVDsKICAgICAgICAgcG9saWN5Lm1EZWxlZ2F0ZWRDZXJ0SW5zdGFsbGVyUGFja2FnZSA9IG51bGw7CisgICAgICAgIHBvbGljeS5tQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UgPSBudWxsOwogICAgICAgICBwb2xpY3kubVN0YXR1c0JhckRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgIHNhdmVTZXR0aW5nc0xvY2tlZCh1c2VySWQpOwogCkBAIC01MDA0LDcgKzUxNDAsNyBAQAogICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9QUk9GSUxFX0FORF9ERVZJQ0VfT1dORVJTLCBudWxsKTsKICAgICAgICAgaWYgKGhhc1VzZXJTZXR1cENvbXBsZXRlZCh1c2VySGFuZGxlKQotICAgICAgICAgICAgICAgICYmIFVzZXJIYW5kbGUuZ2V0QXBwSWQoY2FsbGluZ1VpZCkgIT0gUHJvY2Vzcy5TWVNURU1fVUlEKSB7CisgICAgICAgICAgICAgICAgJiYgIVVzZXJIYW5kbGUuaXNTYW1lQXBwKGNhbGxpbmdVaWQsIFByb2Nlc3MuU1lTVEVNX1VJRCkpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBzZXQgdGhlIHByb2ZpbGUgb3duZXIgb24gYSB1c2VyIHdoaWNoIGlzICIKICAgICAgICAgICAgICAgICAgICAgKyAiYWxyZWFkeSBzZXQtdXAiKTsKICAgICAgICAgfQpAQCAtNTA2NCwyMSArNTIwMCwzNCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VNYW5hZ2VVc2VycygpIHsKICAgICAgICAgZmluYWwgaW50IGNhbGxpbmdVaWQgPSBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpOwotICAgICAgICBpZiAoIShVc2VySGFuZGxlLmlzU2FtZUFwcChjYWxsaW5nVWlkLCBQcm9jZXNzLlNZU1RFTV9VSUQpIHx8IGNhbGxpbmdVaWQgPT0gMCkpIHsKKyAgICAgICAgaWYgKCEoVXNlckhhbmRsZS5pc1NhbWVBcHAoY2FsbGluZ1VpZCwgUHJvY2Vzcy5TWVNURU1fVUlEKQorICAgICAgICAgICAgICAgIHx8IGNhbGxpbmdVaWQgPT0gUHJvY2Vzcy5ST09UX1VJRCkpIHsKICAgICAgICAgICAgIG1Db250ZXh0LmVuZm9yY2VDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX1VTRVJTLCBudWxsKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlQ3Jvc3NVc2VyUGVybWlzc2lvbihpbnQgdXNlckhhbmRsZSkgeworICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIGVuZm9yY2VTeXN0ZW1Vc2VyT3JQZXJtaXNzaW9uKHVzZXJIYW5kbGUsCisgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLklOVEVSQUNUX0FDUk9TU19VU0VSU19GVUxMKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgZW5mb3JjZUNyb3NzVXNlcnNQZXJtaXNzaW9uKGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIGVuZm9yY2VTeXN0ZW1Vc2VyT3JQZXJtaXNzaW9uKHVzZXJIYW5kbGUsCisgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLklOVEVSQUNUX0FDUk9TU19VU0VSUyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGVuZm9yY2VTeXN0ZW1Vc2VyT3JQZXJtaXNzaW9uKGludCB1c2VySGFuZGxlLCBTdHJpbmcgcGVybWlzc2lvbikgewogICAgICAgICBpZiAodXNlckhhbmRsZSA8IDApIHsKICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgdXNlcklkICIgKyB1c2VySGFuZGxlKTsKICAgICAgICAgfQogICAgICAgICBmaW5hbCBpbnQgY2FsbGluZ1VpZCA9IG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCk7Ci0gICAgICAgIGlmICh1c2VySGFuZGxlID09IFVzZXJIYW5kbGUuZ2V0VXNlcklkKGNhbGxpbmdVaWQpKSByZXR1cm47Ci0gICAgICAgIGlmICghKFVzZXJIYW5kbGUuaXNTYW1lQXBwKGNhbGxpbmdVaWQsIFByb2Nlc3MuU1lTVEVNX1VJRCkgfHwgY2FsbGluZ1VpZCA9PSAwKSkgewotICAgICAgICAgICAgbUNvbnRleHQuZW5mb3JjZUNhbGxpbmdPclNlbGZQZXJtaXNzaW9uKAotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEwsICJNdXN0IGJlIHN5c3RlbSBvciBoYXZlIgotICAgICAgICAgICAgICAgICAgICArICIgSU5URVJBQ1RfQUNST1NTX1VTRVJTX0ZVTEwgcGVybWlzc2lvbiIpOworICAgICAgICBpZiAodXNlckhhbmRsZSA9PSBVc2VySGFuZGxlLmdldFVzZXJJZChjYWxsaW5nVWlkKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghKFVzZXJIYW5kbGUuaXNTYW1lQXBwKGNhbGxpbmdVaWQsIFByb2Nlc3MuU1lTVEVNX1VJRCkKKyAgICAgICAgICAgICAgICB8fCBjYWxsaW5nVWlkID09IFByb2Nlc3MuUk9PVF9VSUQpKSB7CisgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24ocGVybWlzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgIk11c3QgYmUgc3lzdGVtIG9yIGhhdmUgIiArIHBlcm1pc3Npb24gKyAiIHBlcm1pc3Npb24iKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTE5OCwxOCArNTM0Nyw2OCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKENvbXBvbmVudE5hbWUgd2hvLCBTdHJpbmcgcGFja2FnZU5hbWUsIEJ1bmRsZSBzZXR0aW5ncykgewotICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKLSAgICAgICAgZmluYWwgVXNlckhhbmRsZSB1c2VySGFuZGxlID0gbmV3IFVzZXJIYW5kbGUoVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOworICAgIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKENvbXBvbmVudE5hbWUgYWRtaW4sIFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICBmaW5hbCBpbnQgdXNlckhhbmRsZSA9IG1JbmplY3Rvci51c2VySGFuZGxlR2V0Q2FsbGluZ1VzZXJJZCgpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGdldEFjdGl2ZUFkbWluRm9yQ2FsbGVyTG9ja2VkKHdobywgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX1BST0ZJTEVfT1dORVIpOworICAgICAgICAgICAgZ2V0QWN0aXZlQWRtaW5Gb3JDYWxsZXJMb2NrZWQoYWRtaW4sIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKKyAgICAgICAgICAgIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGEodXNlckhhbmRsZSk7CisgICAgICAgICAgICBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlID0gcGFja2FnZU5hbWU7CisgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQodXNlckhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGxvbmcgaWQgPSBtSW5qZWN0b3IuYmluZGVyQ2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLnNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKHBhY2thZ2VOYW1lLCBzZXR0aW5ncywgdXNlckhhbmRsZSk7Ci0gICAgICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgICAgIG1JbmplY3Rvci5iaW5kZXJSZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKENvbXBvbmVudE5hbWUgYWRtaW4pIHsKKyAgICAgICAgZmluYWwgaW50IHVzZXJIYW5kbGUgPSBtSW5qZWN0b3IudXNlckhhbmRsZUdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBnZXRBY3RpdmVBZG1pbkZvckNhbGxlckxvY2tlZChhZG1pbiwgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX1BST0ZJTEVfT1dORVIpOworICAgICAgICAgICAgRGV2aWNlUG9saWN5RGF0YSBwb2xpY3kgPSBnZXRVc2VyRGF0YSh1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybiBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNDYWxsZXJBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSgpIHsKKyAgICAgICAgZmluYWwgaW50IGNhbGxpbmdVaWQgPSBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpOworICAgICAgICBmaW5hbCBpbnQgdXNlckhhbmRsZSA9IFVzZXJIYW5kbGUuZ2V0VXNlcklkKGNhbGxpbmdVaWQpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGZpbmFsIERldmljZVBvbGljeURhdGEgcG9saWN5ID0gZ2V0VXNlckRhdGEodXNlckhhbmRsZSk7CisgICAgICAgICAgICBpZiAocG9saWN5Lm1BcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGludCB1aWQgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWRBc1VzZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3kubUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdWlkID09IGNhbGxpbmdVaWQ7CisgICAgICAgICAgICB9IGNhdGNoIChOYW1lTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBlbmZvcmNlQ2FuTWFuYWdlQXBwbGljYXRpb25SZXN0cmljdGlvbnMoQ29tcG9uZW50TmFtZSB3aG8pIHsKKyAgICAgICAgaWYgKHdobyAhPSBudWxsKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBnZXRBY3RpdmVBZG1pbkZvckNhbGxlckxvY2tlZCh3aG8sIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsZXJBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSgpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICJObyBhZG1pbiBjb21wb25lbnQgZ2l2ZW4sIGFuZCBjYWxsZXIgY2Fubm90IG1hbmFnZSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMgIgorICAgICAgICAgICAgICAgICAgICArICJmb3Igb3RoZXIgYXBwcy4iKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKENvbXBvbmVudE5hbWUgd2hvLCBTdHJpbmcgcGFja2FnZU5hbWUsIEJ1bmRsZSBzZXR0aW5ncykgeworICAgICAgICBlbmZvcmNlQ2FuTWFuYWdlQXBwbGljYXRpb25SZXN0cmljdGlvbnMod2hvKTsKKworICAgICAgICBmaW5hbCBVc2VySGFuZGxlIHVzZXJIYW5kbGUgPSBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VzZXJIYW5kbGUoKTsKKyAgICAgICAgZmluYWwgbG9uZyBpZCA9IG1JbmplY3Rvci5iaW5kZXJDbGVhckNhbGxpbmdJZGVudGl0eSgpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbVVzZXJNYW5hZ2VyLnNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKHBhY2thZ2VOYW1lLCBzZXR0aW5ncywgdXNlckhhbmRsZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBtSW5qZWN0b3IuYmluZGVyUmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyMzgsNyArNTQzNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbChhZ2VudCwgImFnZW50IG51bGwiKTsKLSAgICAgICAgZW5mb3JjZUNyb3NzVXNlclBlcm1pc3Npb24odXNlckhhbmRsZSk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlckhhbmRsZSk7CiAKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgY29tcG9uZW50TmFtZSA9IGFnZW50LmZsYXR0ZW5Ub1N0cmluZygpOwpAQCAtNTMwNSw3ICs1NTA0LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQ29tcG9uZW50TmFtZSBnZXRSZXN0cmljdGlvbnNQcm92aWRlcihpbnQgdXNlckhhbmRsZSkgewogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGlmIChtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpICE9IFByb2Nlc3MuU1lTVEVNX1VJRCkgeworICAgICAgICAgICAgaWYgKCFVc2VySGFuZGxlLmlzU2FtZUFwcChtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpLCBQcm9jZXNzLlNZU1RFTV9VSUQpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJPbmx5IHRoZSBzeXN0ZW0gY2FuIHF1ZXJ5IHRoZSBwZXJtaXNzaW9uIHByb3ZpZGVyIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBEZXZpY2VQb2xpY3lEYXRhIHVzZXJEYXRhID0gZ2V0VXNlckRhdGEodXNlckhhbmRsZSk7CkBAIC01Nzc1LDIxICs1OTc0LDYyIEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgQnVuZGxlIGdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKENvbXBvbmVudE5hbWUgd2hvLCBTdHJpbmcgcGFja2FnZU5hbWUpIHsKLSAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwod2hvLCAiQ29tcG9uZW50TmFtZSBpcyBudWxsIik7Ci0gICAgICAgIGZpbmFsIFVzZXJIYW5kbGUgdXNlckhhbmRsZSA9IG5ldyBVc2VySGFuZGxlKFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpKTsKKyAgICAgICAgZW5mb3JjZUNhbk1hbmFnZUFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKHdobyk7CiAKKyAgICAgICAgZmluYWwgVXNlckhhbmRsZSB1c2VySGFuZGxlID0gbUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVc2VySGFuZGxlKCk7CisgICAgICAgIGZpbmFsIGxvbmcgaWQgPSBtSW5qZWN0b3IuYmluZGVyQ2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgQnVuZGxlIGJ1bmRsZSA9IG1Vc2VyTWFuYWdlci5nZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhwYWNrYWdlTmFtZSwgdXNlckhhbmRsZSk7CisgICAgICAgICAgIC8vIGlmIG5vIHJlc3RyaWN0aW9ucyB3ZXJlIHNhdmVkLCBtVXNlck1hbmFnZXIuZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMKKyAgICAgICAgICAgLy8gcmV0dXJucyBudWxsLCBidXQgRFBNIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IEJ1bmRsZSBhcyBwZXIgSmF2YURvYworICAgICAgICAgICByZXR1cm4gYnVuZGxlICE9IG51bGwgPyBidW5kbGUgOiBCdW5kbGUuRU1QVFk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBtSW5qZWN0b3IuYmluZGVyUmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRQYWNrYWdlU3VzcGVuZGVkKENvbXBvbmVudE5hbWUgd2hvLCBTdHJpbmcgcGFja2FnZU5hbWUsCisgICAgICAgICAgICBib29sZWFuIHN1c3BlbmRlZCkgeworICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgaW50IGNhbGxpbmdVc2VySWQgPSBVc2VySGFuZGxlLmdldENhbGxpbmdVc2VySWQoKTsKICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CiAgICAgICAgICAgICBnZXRBY3RpdmVBZG1pbkZvckNhbGxlckxvY2tlZCh3aG8sIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKIAogICAgICAgICAgICAgbG9uZyBpZCA9IG1JbmplY3Rvci5iaW5kZXJDbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gbVVzZXJNYW5hZ2VyLmdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKHBhY2thZ2VOYW1lLCB1c2VySGFuZGxlKTsKLSAgICAgICAgICAgICAgICAvLyBpZiBubyByZXN0cmljdGlvbnMgd2VyZSBzYXZlZCwgbVVzZXJNYW5hZ2VyLmdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zCi0gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudWxsLCBidXQgRFBNIG1ldGhvZCBzaG91bGQgcmV0dXJuIGFuIGVtcHR5IEJ1bmRsZSBhcyBwZXIgSmF2YURvYwotICAgICAgICAgICAgICAgIHJldHVybiBidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZSA6IEJ1bmRsZS5FTVBUWTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbUlQYWNrYWdlTWFuYWdlci5zZXRQYWNrYWdlU3VzcGVuZGVkQXNVc2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIHN1c3BlbmRlZCwgY2FsbGluZ1VzZXJJZCk7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICAvLyBTaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRmFpbGVkIHRhbGtpbmcgdG8gdGhlIHBhY2thZ2UgbWFuYWdlciIsIHJlKTsKICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlclJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZ2V0UGFja2FnZVN1c3BlbmRlZChDb21wb25lbnROYW1lIHdobywgU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBpbnQgY2FsbGluZ1VzZXJJZCA9IFVzZXJIYW5kbGUuZ2V0Q2FsbGluZ1VzZXJJZCgpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIGdldEFjdGl2ZUFkbWluRm9yQ2FsbGVyTG9ja2VkKHdobywgRGV2aWNlQWRtaW5JbmZvLlVTRVNfUE9MSUNZX1BST0ZJTEVfT1dORVIpOworCisgICAgICAgICAgICBsb25nIGlkID0gbUluamVjdG9yLmJpbmRlckNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uSW5mbyBhcHBJbmZvID0gbUlQYWNrYWdlTWFuYWdlci5nZXRBcHBsaWNhdGlvbkluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTmFtZSwgMCwgY2FsbGluZ1VzZXJJZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFwcEluZm8gIT0gbnVsbCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGFwcEluZm8uZmxhZ3MgJiBBcHBsaWNhdGlvbkluZm8uRkxBR19TVVNQRU5ERUQpICE9IDA7CisgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgICAgICAvLyBTaG91bGRuJ3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRmFpbGVkIHRhbGtpbmcgdG8gdGhlIHBhY2thZ2UgbWFuYWdlciIsIHJlKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlclJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC01ODA3LDcgKzYwNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIkRldmljZSBvd25lciBjYW5ub3Qgc2V0IHVzZXIgcmVzdHJpY3Rpb24gIiArIGtleSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHJvZmlsZSBvd25lcgotICAgICAgICAgICAgICAgIGlmICghVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZShrZXkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFVc2VyUmVzdHJpY3Rpb25zVXRpbHMuY2FuUHJvZmlsZU93bmVyQ2hhbmdlKGtleSwgdXNlckhhbmRsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJQcm9maWxlIG93bmVyIGNhbm5vdCBzZXQgdXNlciByZXN0cmljdGlvbiAiICsga2V5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01ODYwLDcgKzYxMDAsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBCdW5kbGUgZ2V0VXNlclJlc3RyaWN0aW9ucyhDb21wb25lbnROYW1lIHdobywgaW50IHVzZXJIYW5kbGUpIHsKICAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwod2hvLCAiQ29tcG9uZW50TmFtZSBpcyBudWxsIik7Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOworICAgICAgICBlbmZvcmNlRnVsbENyb3NzVXNlcnNQZXJtaXNzaW9uKHVzZXJIYW5kbGUpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFjdGl2ZUFkbWluID0gZ2V0QWN0aXZlQWRtaW5VbmNoZWNrZWRMb2NrZWQod2hvLCB1c2VySGFuZGxlKTsKICAgICAgICAgICAgIGlmIChhY3RpdmVBZG1pbiA9PSBudWxsKSB7CkBAIC01ODY4LDcgKzYxMDgsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGFjdGl2ZUFkbWluLmdldFVpZCgpICE9IG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkpIHsKICAgICAgICAgICAgICAgICBtQ29udGV4dC5lbmZvcmNlQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uTUFOQUdFX1BST0ZJTEVfQU5EX0RFVklDRV9PV05FUlMsIG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLk1BTkFHRV9QUk9GSUxFX0FORF9ERVZJQ0VfT1dORVJTLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbGxpbmcgdWlkICIgKyBtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpICsgIiBuZWl0aGVyIG93bnMgdGhlIGFkbWluIgorICAgICAgICAgICAgICAgICAgICAgICAgKyAiICIgKyB3aG8gKyAiIG5vciBoYXMgTUFOQUdFX1BST0ZJTEVfQU5EX0RFVklDRV9PV05FUlMgcGVybWlzc2lvbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFjdGl2ZUFkbWluLnVzZXJSZXN0cmljdGlvbnM7CiAgICAgICAgIH0KQEAgLTYwNTAsNyArNjI5Miw3IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QWNjb3VudFR5cGVzV2l0aE1hbmFnZW1lbnREaXNhYmxlZEFzVXNlcihpbnQgdXNlcklkKSB7Ci0gICAgICAgIGVuZm9yY2VDcm9zc1VzZXJQZXJtaXNzaW9uKHVzZXJJZCk7CisgICAgICAgIGVuZm9yY2VGdWxsQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlcklkKTsKICAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgewogICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgIH0KQEAgLTYxMjIsNyArNjM2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKTsKICAgICAgICAgICAgIGlmIChhZG1pbi5kaXNhYmxlQ2FsbGVySWQgIT0gZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICBhZG1pbi5kaXNhYmxlQ2FsbGVySWQgPSBkaXNhYmxlZDsKLSAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQoVXNlckhhbmRsZS5nZXRDYWxsaW5nVXNlcklkKCkpOworICAgICAgICAgICAgICAgIHNhdmVTZXR0aW5nc0xvY2tlZChtSW5qZWN0b3IudXNlckhhbmRsZUdldENhbGxpbmdVc2VySWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MTQyLDggKzYzODQsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ2FsbGVySWREaXNhYmxlZEZvclVzZXIoaW50IHVzZXJJZCkgewotICAgICAgICAvLyBUT0RPOiBTaG91bGQgdGhlcmUgYmUgYSBjaGVjayB0byBtYWtlIHN1cmUgdGhpcyByZWxhdGlvbnNoaXAgaXMgd2l0aGluIGEgcHJvZmlsZSBncm91cD8KLSAgICAgICAgLy9lbmZvcmNlU3lzdGVtUHJvY2VzcygiZ2V0Q3Jvc3NQcm9maWxlQ2FsbGVySWREaXNhYmxlZCBjYW4gb25seSBiZSBjYWxsZWQgYnkgc3lzdGVtIik7CisgICAgICAgIGVuZm9yY2VDcm9zc1VzZXJzUGVybWlzc2lvbih1c2VySWQpOwogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKICAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0UHJvZmlsZU93bmVyQWRtaW5Mb2NrZWQodXNlcklkKTsKICAgICAgICAgICAgIHJldHVybiAoYWRtaW4gIT0gbnVsbCkgPyBhZG1pbi5kaXNhYmxlQ2FsbGVySWQgOiBmYWxzZTsKQEAgLTYxNTEsNiArNjM5Miw0NCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoQ29tcG9uZW50TmFtZSB3aG8sIGJvb2xlYW4gZGlzYWJsZWQpIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5Gb3JDYWxsZXJMb2NrZWQod2hvLAorICAgICAgICAgICAgICAgICAgICBEZXZpY2VBZG1pbkluZm8uVVNFU19QT0xJQ1lfUFJPRklMRV9PV05FUik7CisgICAgICAgICAgICBpZiAoYWRtaW4uZGlzYWJsZUNvbnRhY3RzU2VhcmNoICE9IGRpc2FibGVkKSB7CisgICAgICAgICAgICAgICAgYWRtaW4uZGlzYWJsZUNvbnRhY3RzU2VhcmNoID0gZGlzYWJsZWQ7CisgICAgICAgICAgICAgICAgc2F2ZVNldHRpbmdzTG9ja2VkKG1JbmplY3Rvci51c2VySGFuZGxlR2V0Q2FsbGluZ1VzZXJJZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGdldENyb3NzUHJvZmlsZUNvbnRhY3RzU2VhcmNoRGlzYWJsZWQoQ29tcG9uZW50TmFtZSB3aG8pIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5Gb3JDYWxsZXJMb2NrZWQod2hvLAorICAgICAgICAgICAgICAgICAgICBEZXZpY2VBZG1pbkluZm8uVVNFU19QT0xJQ1lfUFJPRklMRV9PV05FUik7CisgICAgICAgICAgICByZXR1cm4gYWRtaW4uZGlzYWJsZUNvbnRhY3RzU2VhcmNoOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gZ2V0Q3Jvc3NQcm9maWxlQ29udGFjdHNTZWFyY2hEaXNhYmxlZEZvclVzZXIoaW50IHVzZXJJZCkgeworICAgICAgICBlbmZvcmNlQ3Jvc3NVc2Vyc1Blcm1pc3Npb24odXNlcklkKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldFByb2ZpbGVPd25lckFkbWluTG9ja2VkKHVzZXJJZCk7CisgICAgICAgICAgICByZXR1cm4gKGFkbWluICE9IG51bGwpID8gYWRtaW4uZGlzYWJsZUNvbnRhY3RzU2VhcmNoIDogZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzdGFydE1hbmFnZWRRdWlja0NvbnRhY3QoU3RyaW5nIGFjdHVhbExvb2t1cEtleSwgbG9uZyBhY3R1YWxDb250YWN0SWQsCiAgICAgICAgICAgICBsb25nIGFjdHVhbERpcmVjdG9yeUlkLCBJbnRlbnQgb3JpZ2luYWxJbnRlbnQpIHsKICAgICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IFF1aWNrQ29udGFjdC5yZWJ1aWxkTWFuYWdlZFF1aWNrQ29udGFjdHNJbnRlbnQoCkBAIC02MzE2LDcgKzY1OTUsNyBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbm90aWZ5TG9ja1Rhc2tNb2RlQ2hhbmdlZChib29sZWFuIGlzRW5hYmxlZCwgU3RyaW5nIHBrZywgaW50IHVzZXJIYW5kbGUpIHsKLSAgICAgICAgaWYgKG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkgIT0gUHJvY2Vzcy5TWVNURU1fVUlEKSB7CisgICAgICAgIGlmICghVXNlckhhbmRsZS5pc1NhbWVBcHAobUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSwgUHJvY2Vzcy5TWVNURU1fVUlEKSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXhjZXB0aW9uKCJub3RpZnlMb2NrVGFza01vZGVDaGFuZ2VkIGNhbiBvbmx5IGJlIGNhbGxlZCBieSBzeXN0ZW0iKTsKICAgICAgICAgfQogICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKQEAgLTY5ODQsNCArNzI2MywxMTQgQEAKICAgICAgICAgcmV0dXJuIFVzZXJNYW5hZ2VyLmlzU3BsaXRTeXN0ZW1Vc2VyKCkgJiYgY2FsbGluZ1VzZXJJZCA9PSBVc2VySGFuZGxlLlVTRVJfU1lTVEVNOwogICAgIH0KIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJlYm9vdChDb21wb25lbnROYW1lIGFkbWluKSB7CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKGFkbWluKTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIGNhbGxlciBoYXMgRE8uCisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgZ2V0QWN0aXZlQWRtaW5Gb3JDYWxsZXJMb2NrZWQoYWRtaW4sIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9ERVZJQ0VfT1dORVIpOworICAgICAgICB9CisgICAgICAgIGxvbmcgaWRlbnQgPSBtSW5qZWN0b3IuYmluZGVyQ2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIG1JbmplY3Rvci5wb3dlck1hbmFnZXJSZWJvb3QoUG93ZXJNYW5hZ2VyLlJFQk9PVF9SRVFVRVNURURfQllfREVWSUNFX09XTkVSKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIG1JbmplY3Rvci5iaW5kZXJSZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFNob3J0U3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8sIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgZmluYWwgaW50IHVzZXJIYW5kbGUgPSBtSW5qZWN0b3IudXNlckhhbmRsZUdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluRm9yVWlkTG9ja2VkKHdobywKKyAgICAgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSk7CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMoYWRtaW4uc2hvcnRTdXBwb3J0TWVzc2FnZSwgbWVzc2FnZSkpIHsKKyAgICAgICAgICAgICAgICBhZG1pbi5zaG9ydFN1cHBvcnRNZXNzYWdlID0gbWVzc2FnZTsKKyAgICAgICAgICAgICAgICBzYXZlU2V0dGluZ3NMb2NrZWQodXNlckhhbmRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0U3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8pIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwod2hvLCAiQ29tcG9uZW50TmFtZSBpcyBudWxsIik7CisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgQWN0aXZlQWRtaW4gYWRtaW4gPSBnZXRBY3RpdmVBZG1pbkZvclVpZExvY2tlZCh3aG8sCisgICAgICAgICAgICAgICAgICAgIG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkpOworICAgICAgICAgICAgcmV0dXJuIGFkbWluLnNob3J0U3VwcG9ydE1lc3NhZ2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRMb25nU3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8sIFN0cmluZyBtZXNzYWdlKSB7CisgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgZmluYWwgaW50IHVzZXJIYW5kbGUgPSBtSW5qZWN0b3IudXNlckhhbmRsZUdldENhbGxpbmdVc2VySWQoKTsKKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluRm9yVWlkTG9ja2VkKHdobywKKyAgICAgICAgICAgICAgICAgICAgbUluamVjdG9yLmJpbmRlckdldENhbGxpbmdVaWQoKSk7CisgICAgICAgICAgICBpZiAoIVRleHRVdGlscy5lcXVhbHMoYWRtaW4ubG9uZ1N1cHBvcnRNZXNzYWdlLCBtZXNzYWdlKSkgeworICAgICAgICAgICAgICAgIGFkbWluLmxvbmdTdXBwb3J0TWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgICAgICAgICAgICAgc2F2ZVNldHRpbmdzTG9ja2VkKHVzZXJIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2UoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8pIHsKKyAgICAgICAgaWYgKCFtSGFzRmVhdHVyZSkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgUHJlY29uZGl0aW9ucy5jaGVja05vdE51bGwod2hvLCAiQ29tcG9uZW50TmFtZSBpcyBudWxsIik7CisgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgQWN0aXZlQWRtaW4gYWRtaW4gPSBnZXRBY3RpdmVBZG1pbkZvclVpZExvY2tlZCh3aG8sCisgICAgICAgICAgICAgICAgICAgIG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCkpOworICAgICAgICAgICAgcmV0dXJuIGFkbWluLmxvbmdTdXBwb3J0TWVzc2FnZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoQE5vbk51bGwgQ29tcG9uZW50TmFtZSB3aG8sIGludCB1c2VySGFuZGxlKSB7CisgICAgICAgIGlmICghbUhhc0ZlYXR1cmUpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIFByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsKHdobywgIkNvbXBvbmVudE5hbWUgaXMgbnVsbCIpOworICAgICAgICBpZiAoIVVzZXJIYW5kbGUuaXNTYW1lQXBwKG1JbmplY3Rvci5iaW5kZXJHZXRDYWxsaW5nVWlkKCksIFByb2Nlc3MuU1lTVEVNX1VJRCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZWN1cml0eUV4Y2VwdGlvbigiT25seSB0aGUgc3lzdGVtIGNhbiBxdWVyeSBzdXBwb3J0IG1lc3NhZ2UgZm9yIHVzZXIiKTsKKyAgICAgICAgfQorICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgIEFjdGl2ZUFkbWluIGFkbWluID0gZ2V0QWN0aXZlQWRtaW5VbmNoZWNrZWRMb2NrZWQod2hvLCB1c2VySGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChhZG1pbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkbWluLnNob3J0U3VwcG9ydE1lc3NhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRMb25nU3VwcG9ydE1lc3NhZ2VGb3JVc2VyKEBOb25OdWxsIENvbXBvbmVudE5hbWUgd2hvLCBpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBpZiAoIW1IYXNGZWF0dXJlKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBQcmVjb25kaXRpb25zLmNoZWNrTm90TnVsbCh3aG8sICJDb21wb25lbnROYW1lIGlzIG51bGwiKTsKKyAgICAgICAgaWYgKCFVc2VySGFuZGxlLmlzU2FtZUFwcChtSW5qZWN0b3IuYmluZGVyR2V0Q2FsbGluZ1VpZCgpLCBQcm9jZXNzLlNZU1RFTV9VSUQpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFeGNlcHRpb24oIk9ubHkgdGhlIHN5c3RlbSBjYW4gcXVlcnkgc3VwcG9ydCBtZXNzYWdlIGZvciB1c2VyIik7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICBBY3RpdmVBZG1pbiBhZG1pbiA9IGdldEFjdGl2ZUFkbWluVW5jaGVja2VkTG9ja2VkKHdobywgdXNlckhhbmRsZSk7CisgICAgICAgICAgICBpZiAoYWRtaW4gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiBhZG1pbi5sb25nU3VwcG9ydE1lc3NhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvU3lzdGVtU2VydmVyLmphdmEgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQppbmRleCAyZjMzZDdjLi43OTc4NmQzIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQorKysgYi9zZXJ2aWNlcy9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9TeXN0ZW1TZXJ2ZXIuamF2YQpAQCAtNDUsNyArNDUsNiBAQAogaW1wb3J0IGFuZHJvaWQudXRpbC5FdmVudExvZzsKIGltcG9ydCBhbmRyb2lkLnV0aWwuU2xvZzsKIGltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLndlYmtpdC5XZWJWaWV3RmFjdG9yeTsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLlI7CiBpbXBvcnQgY29tLmFuZHJvaWQuaW50ZXJuYWwub3MuQmluZGVySW50ZXJuYWw7CkBAIC02OCw2ICs2Nyw3IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLmxpZ2h0cy5MaWdodHNTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5tZWRpYS5NZWRpYVJvdXRlclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLm1lZGlhLk1lZGlhU2Vzc2lvblNlcnZpY2U7CitpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLm1lZGlhLk1lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubWVkaWEucHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb25NYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0Lk5ldHdvcmtQb2xpY3lNYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0Lk5ldHdvcmtTdGF0c1NlcnZpY2U7CkBAIC04MSw3ICs4MSw2IEBACiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBvd2VyLlBvd2VyTWFuYWdlclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnBvd2VyLlNodXRkb3duVGhyZWFkOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5yZXN0cmljdGlvbnMuUmVzdHJpY3Rpb25zTWFuYWdlclNlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnNlYXJjaC5TZWFyY2hNYW5hZ2VyU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuc3RhdHVzYmFyLlN0YXR1c0Jhck1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5zdG9yYWdlLkRldmljZVN0b3JhZ2VNb25pdG9yU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudGVsZWNvbS5UZWxlY29tTG9hZGVyU2VydmljZTsKQEAgLTg5LDE0ICs4OCwxMyBAQAogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci50di5UdklucHV0TWFuYWdlclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnR3aWxpZ2h0LlR3aWxpZ2h0U2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIudXNhZ2UuVXNhZ2VTdGF0c1NlcnZpY2U7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLnVzYi5Vc2JTZXJ2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci52ci5Wck1hbmFnZXJTZXJ2aWNlOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci53YWxscGFwZXIuV2FsbHBhcGVyTWFuYWdlclNlcnZpY2U7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLndlYmtpdC5XZWJWaWV3VXBkYXRlU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIud20uV2luZG93TWFuYWdlclNlcnZpY2U7CiAKIGltcG9ydCBkYWx2aWsuc3lzdGVtLlZNUnVudGltZTsKIAotaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwogaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKIGltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOwpAQCAtMTM5LDggKzEzNywxOSBAQAogICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNlcnZlci5qb2IuSm9iU2NoZWR1bGVyU2VydmljZSI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PVU5UX1NFUlZJQ0VfQ0xBU1MgPQogICAgICAgICAgICAgImNvbS5hbmRyb2lkLnNlcnZlci5Nb3VudFNlcnZpY2UkTGlmZWN5Y2xlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VBUkNIX01BTkFHRVJfU0VSVklDRV9DTEFTUyA9CisgICAgICAgICAgICAiY29tLmFuZHJvaWQuc2VydmVyLnNlYXJjaC5TZWFyY2hNYW5hZ2VyU2VydmljZSRMaWZlY3ljbGUiOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBFUlNJU1RFTlRfREFUQV9CTE9DS19QUk9QID0gInJvLmZycC5wc3QiOwogCisgICAgLyoqCisgICAgICogRGVmYXVsdCB0aGVtZSB1c2VkIGJ5IHRoZSBzeXN0ZW0gY29udGV4dC4gVGhpcyBpcyB1c2VkIHRvIHN0eWxlCisgICAgICogc3lzdGVtLXByb3ZpZGVkIGRpYWxvZ3MsIHN1Y2ggYXMgdGhlIFBvd2VyIE9mZiBkaWFsb2csIGFuZCBvdGhlcgorICAgICAqIHZpc3VhbCBjb250ZW50LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NZU1RFTV9USEVNRSA9CisgICAgICAgICAgICBjb20uYW5kcm9pZC5pbnRlcm5hbC5SLnN0eWxlLlRoZW1lX01hdGVyaWFsX0RheU5pZ2h0X0RhcmtBY3Rpb25CYXI7CisKICAgICBwcml2YXRlIGZpbmFsIGludCBtRmFjdG9yeVRlc3RNb2RlOwogICAgIHByaXZhdGUgVGltZXIgbVByb2ZpbGVyU25hcHNob3RUaW1lcjsKIApAQCAtMTUwLDYgKzE1OSw3IEBACiAgICAgLy8gVE9ETzogcmVtb3ZlIGFsbCBvZiB0aGVzZSByZWZlcmVuY2VzIGJ5IGltcHJvdmluZyBkZXBlbmRlbmN5IHJlc29sdXRpb24gYW5kIGJvb3QgcGhhc2VzCiAgICAgcHJpdmF0ZSBQb3dlck1hbmFnZXJTZXJ2aWNlIG1Qb3dlck1hbmFnZXJTZXJ2aWNlOwogICAgIHByaXZhdGUgQWN0aXZpdHlNYW5hZ2VyU2VydmljZSBtQWN0aXZpdHlNYW5hZ2VyU2VydmljZTsKKyAgICBwcml2YXRlIFdlYlZpZXdVcGRhdGVTZXJ2aWNlIG1XZWJWaWV3VXBkYXRlU2VydmljZTsKICAgICBwcml2YXRlIERpc3BsYXlNYW5hZ2VyU2VydmljZSBtRGlzcGxheU1hbmFnZXJTZXJ2aWNlOwogICAgIHByaXZhdGUgUGFja2FnZU1hbmFnZXJTZXJ2aWNlIG1QYWNrYWdlTWFuYWdlclNlcnZpY2U7CiAgICAgcHJpdmF0ZSBQYWNrYWdlTWFuYWdlciBtUGFja2FnZU1hbmFnZXI7CkBAIC0zMTksNyArMzI5LDcgQEAKICAgICBwcml2YXRlIHZvaWQgY3JlYXRlU3lzdGVtQ29udGV4dCgpIHsKICAgICAgICAgQWN0aXZpdHlUaHJlYWQgYWN0aXZpdHlUaHJlYWQgPSBBY3Rpdml0eVRocmVhZC5zeXN0ZW1NYWluKCk7CiAgICAgICAgIG1TeXN0ZW1Db250ZXh0ID0gYWN0aXZpdHlUaHJlYWQuZ2V0U3lzdGVtQ29udGV4dCgpOwotICAgICAgICBtU3lzdGVtQ29udGV4dC5zZXRUaGVtZShhbmRyb2lkLlIuc3R5bGUuVGhlbWVfTWF0ZXJpYWxfRGF5TmlnaHRfRGFya0FjdGlvbkJhcik7CisgICAgICAgIG1TeXN0ZW1Db250ZXh0LnNldFRoZW1lKERFRkFVTFRfU1lTVEVNX1RIRU1FKTsKICAgICB9CiAKICAgICAvKioKQEAgLTQwOSw3ICs0MTksNyBAQAogICAgICAgICAgICAgICAgIExvY2FsU2VydmljZXMuZ2V0U2VydmljZShVc2FnZVN0YXRzTWFuYWdlckludGVybmFsLmNsYXNzKSk7CiAKICAgICAgICAgLy8gVHJhY2tzIHdoZXRoZXIgdGhlIHVwZGF0YWJsZSBXZWJWaWV3IGlzIGluIGEgcmVhZHkgc3RhdGUgYW5kIHdhdGNoZXMgZm9yIHVwZGF0ZSBpbnN0YWxscy4KLSAgICAgICAgbVN5c3RlbVNlcnZpY2VNYW5hZ2VyLnN0YXJ0U2VydmljZShXZWJWaWV3VXBkYXRlU2VydmljZS5jbGFzcyk7CisgICAgICAgIG1XZWJWaWV3VXBkYXRlU2VydmljZSA9IG1TeXN0ZW1TZXJ2aWNlTWFuYWdlci5zdGFydFNlcnZpY2UoV2ViVmlld1VwZGF0ZVNlcnZpY2UuY2xhc3MpOwogICAgIH0KIAogICAgIC8qKgpAQCAtNDM4LDYgKzQ0OCw3IEBACiAgICAgICAgIENvbnN1bWVySXJTZXJ2aWNlIGNvbnN1bWVySXIgPSBudWxsOwogICAgICAgICBNbXNTZXJ2aWNlQnJva2VyIG1tc1NlcnZpY2UgPSBudWxsOwogICAgICAgICBFbnRyb3B5TWl4ZXIgZW50cm9weU1peGVyID0gbnVsbDsKKyAgICAgICAgVnJNYW5hZ2VyU2VydmljZSB2ck1hbmFnZXJTZXJ2aWNlID0gbnVsbDsKIAogICAgICAgICBib29sZWFuIGRpc2FibGVTdG9yYWdlID0gU3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKCJjb25maWcuZGlzYWJsZV9zdG9yYWdlIiwgZmFsc2UpOwogICAgICAgICBib29sZWFuIGRpc2FibGVCbHVldG9vdGggPSBTeXN0ZW1Qcm9wZXJ0aWVzLmdldEJvb2xlYW4oImNvbmZpZy5kaXNhYmxlX2JsdWV0b290aCIsIGZhbHNlKTsKQEAgLTUyMyw2ICs1MzQsMTAgQEAKICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmFkZFNlcnZpY2UoQ29udGV4dC5JTlBVVF9TRVJWSUNFLCBpbnB1dE1hbmFnZXIpOwogICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1NZU1RFTV9TRVJWRVIpOwogCisgICAgICAgICAgICB0cmFjZUJlZ2luQW5kU2xvZygiU3RhcnRWck1hbmFnZXJTZXJ2aWNlIik7CisgICAgICAgICAgICBtU3lzdGVtU2VydmljZU1hbmFnZXIuc3RhcnRTZXJ2aWNlKFZyTWFuYWdlclNlcnZpY2UuY2xhc3MpOworICAgICAgICAgICAgVHJhY2UudHJhY2VFbmQoVHJhY2UuVFJBQ0VfVEFHX1NZU1RFTV9TRVJWRVIpOworCiAgICAgICAgICAgICBtQWN0aXZpdHlNYW5hZ2VyU2VydmljZS5zZXRXaW5kb3dNYW5hZ2VyKHdtKTsKIAogICAgICAgICAgICAgaW5wdXRNYW5hZ2VyLnNldFdpbmRvd01hbmFnZXJDYWxsYmFja3Mod20uZ2V0SW5wdXRNb25pdG9yKCkpOwpAQCAtODMxLDggKzg0Niw3IEBACiAgICAgICAgICAgICBpZiAoIWRpc2FibGVOb25Db3JlU2VydmljZXMpIHsKICAgICAgICAgICAgICAgICB0cmFjZUJlZ2luQW5kU2xvZygiU3RhcnRTZWFyY2hNYW5hZ2VyU2VydmljZSIpOwogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VNYW5hZ2VyLmFkZFNlcnZpY2UoQ29udGV4dC5TRUFSQ0hfU0VSVklDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VhcmNoTWFuYWdlclNlcnZpY2UoY29udGV4dCkpOworICAgICAgICAgICAgICAgICAgICBtU3lzdGVtU2VydmljZU1hbmFnZXIuc3RhcnRTZXJ2aWNlKFNFQVJDSF9NQU5BR0VSX1NFUlZJQ0VfQ0xBU1MpOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFd0Zigic3RhcnRpbmcgU2VhcmNoIFNlcnZpY2UiLCBlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDEyLDYgKzEwMjYsMTAgQEAKICAgICAgICAgICAgICAgICBtU3lzdGVtU2VydmljZU1hbmFnZXIuc3RhcnRTZXJ2aWNlKFR2SW5wdXRNYW5hZ2VyU2VydmljZS5jbGFzcyk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChtUGFja2FnZU1hbmFnZXIuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1BJQ1RVUkVfSU5fUElDVFVSRSkpIHsKKyAgICAgICAgICAgICAgICBtU3lzdGVtU2VydmljZU1hbmFnZXIuc3RhcnRTZXJ2aWNlKE1lZGlhUmVzb3VyY2VNb25pdG9yU2VydmljZS5jbGFzcyk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICghZGlzYWJsZU5vbkNvcmVTZXJ2aWNlcykgewogICAgICAgICAgICAgICAgIHRyYWNlQmVnaW5BbmRTbG9nKCJTdGFydE1lZGlhUm91dGVyU2VydmljZSIpOwogICAgICAgICAgICAgICAgIHRyeSB7CkBAIC0xMTgwLDcgKzExOTgsNyBAQAogCiAgICAgICAgICAgICAgICAgU2xvZy5pKFRBRywgIldlYlZpZXdGYWN0b3J5IHByZXBhcmF0aW9uIik7CiAgICAgICAgICAgICAgICAgVHJhY2UudHJhY2VCZWdpbihUcmFjZS5UUkFDRV9UQUdfU1lTVEVNX1NFUlZFUiwgIldlYlZpZXdGYWN0b3J5UHJlcGFyYXRpb24iKTsKLSAgICAgICAgICAgICAgICBXZWJWaWV3RmFjdG9yeS5wcmVwYXJlV2ViVmlld0luU3lzdGVtU2VydmVyKCk7CisgICAgICAgICAgICAgICAgbVdlYlZpZXdVcGRhdGVTZXJ2aWNlLnByZXBhcmVXZWJWaWV3SW5TeXN0ZW1TZXJ2ZXIoKTsKICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUVuZChUcmFjZS5UUkFDRV9UQUdfU1lTVEVNX1NFUlZFUik7CiAKICAgICAgICAgICAgICAgICBUcmFjZS50cmFjZUJlZ2luKFRyYWNlLlRSQUNFX1RBR19TWVNURU1fU0VSVkVSLCAiU3RhcnRTeXN0ZW1VSSIpOwpAQCAtMTMwOSw2ICsxMzI3LDcgQEAKICAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKICAgICAgICAgaW50ZW50LnNldENvbXBvbmVudChuZXcgQ29tcG9uZW50TmFtZSgiY29tLmFuZHJvaWQuc3lzdGVtdWkiLAogICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuc3lzdGVtdWkuU3lzdGVtVUlTZXJ2aWNlIikpOworICAgICAgICBpbnRlbnQuYWRkRmxhZ3MoSW50ZW50LkZMQUdfREVCVUdfVFJJQUdFRF9NSVNTSU5HKTsKICAgICAgICAgLy9TbG9nLmQoVEFHLCAiU3RhcnRpbmcgc2VydmljZTogIiArIGludGVudCk7CiAgICAgICAgIGNvbnRleHQuc3RhcnRTZXJ2aWNlQXNVc2VyKGludGVudCwgVXNlckhhbmRsZS5TWVNURU0pOwogICAgIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL25ldC9qYXZhL2FuZHJvaWQvbmV0L2RoY3AvRGhjcENsaWVudC5qYXZhIGIvc2VydmljZXMvbmV0L2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQ2xpZW50LmphdmEKaW5kZXggODEyZDliNi4uMjMyOWI0MiAxMDA2NDQKLS0tIGEvc2VydmljZXMvbmV0L2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQ2xpZW50LmphdmEKKysrIGIvc2VydmljZXMvbmV0L2phdmEvYW5kcm9pZC9uZXQvZGhjcC9EaGNwQ2xpZW50LmphdmEKQEAgLTM4OSw3ICszODksNiBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBzY2hlZHVsZVJlbmV3KCkgewotICAgICAgICBtUmVuZXdBbGFybS5jYW5jZWwoKTsKICAgICAgICAgaWYgKG1EaGNwTGVhc2VFeHBpcnkgIT0gMCkgewogICAgICAgICAgICAgbG9uZyBub3cgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKICAgICAgICAgICAgIGxvbmcgYWxhcm1UaW1lID0gKG5vdyArIG1EaGNwTGVhc2VFeHBpcnkpIC8gMjsKQEAgLTgyMiw2ICs4MjEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PVF9IQU5ETEVEOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGV4aXQoKSB7CisgICAgICAgICAgICBtUmVuZXdBbGFybS5jYW5jZWwoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGNsYXNzIERoY3BSZW5ld2luZ1N0YXRlIGV4dGVuZHMgUGFja2V0UmV0cmFuc21pdHRpbmdTdGF0ZSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9QcmludE1hbmFnZXJTZXJ2aWNlLmphdmEKaW5kZXggMGE4YzAxNC4uNWFiYjZlNyAxMDA2NDQKLS0tIGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUHJpbnRNYW5hZ2VyU2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1ByaW50TWFuYWdlclNlcnZpY2UuamF2YQpAQCAtMTYsNiArMTYsOSBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5wcmludDsKIAoraW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuR0VUX1NFUlZJQ0VTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HOworCiBpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdDsKIGltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHlNYW5hZ2VyTmF0aXZlOwpAQCAtMjQsOSArMjcsOSBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5SZXNvbHZlSW5mbzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uU2VydmljZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlVzZXJJbmZvOwogaW1wb3J0IGFuZHJvaWQuZGF0YWJhc2UuQ29udGVudE9ic2VydmVyOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CkBAIC01NSwxNCArNTgsMTIgQEAKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwogCiAvKioKICAqIFN5c3RlbVNlcnZpY2Ugd3JhcHBlciBmb3IgdGhlIFByaW50TWFuYWdlciBpbXBsZW1lbnRhdGlvbi4gUHVibGlzaGVzCiAgKiBDb250ZXh0LlBSSU5UX1NFUlZJQ0UuCiAgKiBQcmludE1hbmFnZXIgaW1wbGVtZW50YXRpb24gaXMgY29udGFpbmVkIHdpdGhpbi4KICAqLwotCiBwdWJsaWMgZmluYWwgY2xhc3MgUHJpbnRNYW5hZ2VyU2VydmljZSBleHRlbmRzIFN5c3RlbVNlcnZpY2UgewogICAgIHByaXZhdGUgZmluYWwgUHJpbnRNYW5hZ2VySW1wbCBtUHJpbnRNYW5hZ2VySW1wbDsKIApAQCAtNzcsOCArNzgsOCBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU3RhcnRVc2VyKGludCB1c2VySGFuZGxlKSB7Ci0gICAgICAgIG1QcmludE1hbmFnZXJJbXBsLmhhbmRsZVVzZXJTdGFydGVkKHVzZXJIYW5kbGUpOworICAgIHB1YmxpYyB2b2lkIG9uVW5sb2NrVXNlcihpbnQgdXNlckhhbmRsZSkgeworICAgICAgICBtUHJpbnRNYW5hZ2VySW1wbC5oYW5kbGVVc2VyVW5sb2NrZWQodXNlckhhbmRsZSk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC04NywxMSArODgsNiBAQAogICAgIH0KIAogICAgIGNsYXNzIFByaW50TWFuYWdlckltcGwgZXh0ZW5kcyBJUHJpbnRNYW5hZ2VyLlN0dWIgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIENPTVBPTkVOVF9OQU1FX1NFUEFSQVRPUiA9ICc6JzsKLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUFJJTlRfU0VSVklDRV9DT01QT05FTlRfTkFNRSA9Ci0gICAgICAgICAgICAgICAgIkVYVFJBX1BSSU5UX1NFUlZJQ0VfQ09NUE9ORU5UX05BTUUiOwotCiAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCQUNLR1JPVU5EX1VTRVJfSUQgPSAtMTA7CiAKICAgICAgICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbUxvY2sgPSBuZXcgT2JqZWN0KCk7CkBAIC0xNzcsNiArMTczLDI1IEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oUHJpbnRlcklkIHByaW50ZXJJZCwgaW50IHVzZXJJZCkgeworICAgICAgICAgICAgZmluYWwgaW50IHJlc29sdmVkVXNlcklkID0gcmVzb2x2ZUNhbGxpbmdVc2VyRW5mb3JjaW5nUGVybWlzc2lvbnModXNlcklkKTsKKyAgICAgICAgICAgIGZpbmFsIFVzZXJTdGF0ZSB1c2VyU3RhdGU7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CisgICAgICAgICAgICAgICAgLy8gT25seSB0aGUgY3VycmVudCBncm91cCBtZW1iZXJzIGNhbiBnZXQgdGhlIHByaW50ZXIgaWNvbnMuCisgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVDYWxsaW5nUHJvZmlsZVBhcmVudExvY2tlZChyZXNvbHZlZFVzZXJJZCkgIT0gZ2V0Q3VycmVudFVzZXJJZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChyZXNvbHZlZFVzZXJJZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiB1c2VyU3RhdGUuZ2V0Q3VzdG9tUHJpbnRlckljb24ocHJpbnRlcklkKTsKKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgQmluZGVyLnJlc3RvcmVDYWxsaW5nSWRlbnRpdHkoaWRlbnRpdHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgIHB1YmxpYyB2b2lkIGNhbmNlbFByaW50Sm9iKFByaW50Sm9iSWQgcHJpbnRKb2JJZCwgaW50IGFwcElkLCBpbnQgdXNlcklkKSB7CiAgICAgICAgICAgICBmaW5hbCBpbnQgcmVzb2x2ZWRVc2VySWQgPSByZXNvbHZlQ2FsbGluZ1VzZXJFbmZvcmNpbmdQZXJtaXNzaW9ucyh1c2VySWQpOwogICAgICAgICAgICAgZmluYWwgaW50IHJlc29sdmVkQXBwSWQ7CkBAIC00NjcsMjAgKzQ4MiwxNyBAQAogCiAgICAgICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckNvbnRlbnRPYnNlcnZlcnMoKSB7CiAgICAgICAgICAgICBmaW5hbCBVcmkgZW5hYmxlZFByaW50U2VydmljZXNVcmkgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0VXJpRm9yKAotICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUyk7CisgICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5ESVNBQkxFRF9QUklOVF9TRVJWSUNFUyk7CiAgICAgICAgICAgICBDb250ZW50T2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgQ29udGVudE9ic2VydmVyKEJhY2tncm91bmRUaHJlYWQuZ2V0SGFuZGxlcigpKSB7CiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DaGFuZ2UoYm9vbGVhbiBzZWxmQ2hhbmdlLCBVcmkgdXJpLCBpbnQgdXNlcklkKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkUHJpbnRTZXJ2aWNlc1VyaS5lcXVhbHModXJpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VySWQgIT0gVXNlckhhbmRsZS5VU0VSX0FMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gZ2V0T3JDcmVhdGVVc2VyU3RhdGVMb2NrZWQodXNlcklkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclN0YXRlLnVwZGF0ZUlmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IHVzZXJDb3VudCA9IG1Vc2VyU3RhdGVzLnNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VyQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlclN0YXRlIHVzZXJTdGF0ZSA9IG1Vc2VyU3RhdGVzLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdGUudXBkYXRlSWZOZWVkZWRMb2NrZWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlckNvdW50ID0gbVVzZXJTdGF0ZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlckNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJJZCA9PSBVc2VySGFuZGxlLlVTRVJfQUxMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgdXNlcklkID09IG1Vc2VyU3RhdGVzLmtleUF0KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlclN0YXRlcy52YWx1ZUF0KGkpLnVwZGF0ZUlmTmVlZGVkTG9ja2VkKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC00OTQsMTkgKzUwNiwyMyBAQAogCiAgICAgICAgIHByaXZhdGUgdm9pZCByZWdpc3RlckJyb2FkY2FzdFJlY2VpdmVycygpIHsKICAgICAgICAgICAgIFBhY2thZ2VNb25pdG9yIG1vbml0b3IgPSBuZXcgUGFja2FnZU1vbml0b3IoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25QYWNrYWdlTW9kaWZpZWQoU3RyaW5nIHBhY2thZ2VOYW1lKSB7CisgICAgICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVNlcnZpY2VzKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBIGJhY2tncm91bmQgdXNlci9wcm9maWxlJ3MgcHJpbnQgam9icyBhcmUgcnVubmluZyBidXQgdGhlcmUgaXMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vIFVJIHNob3duLiBIZW5jZSwgaWYgdGhlIHBhY2thZ2VzIG9mIHN1Y2ggYSB1c2VyIGNoYW5nZSB3ZSBuZWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgaXQgYXMgdGhlIGNoYW5nZSBtYXkgYWZmZWN0IG9uZ29pbmcgcHJpbnQgam9icy4KICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VydmljZXNDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gZ2V0T3JDcmVhdGVVc2VyU3RhdGVMb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcjxDb21wb25lbnROYW1lPiBpdGVyYXRvciA9IHVzZXJTdGF0ZS5nZXRFbmFibGVkU2VydmljZXMoKS5pdGVyYXRvcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSA9IGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2FnZU5hbWUuZXF1YWxzKGNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKSkpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxQcmludFNlcnZpY2VJbmZvPiBpbnN0YWxsZWRTZXJ2aWNlcyA9IHVzZXJTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW5zdGFsbGVkUHJpbnRTZXJ2aWNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgZmluYWwgaW50IG51bUluc3RhbGxlZFNlcnZpY2VzID0gaW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JbnN0YWxsZWRTZXJ2aWNlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbGxlZFNlcnZpY2VzLmdldChpKS5nZXRSZXNvbHZlSW5mbygpLnNlcnZpY2VJbmZvLnBhY2thZ2VOYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKHBhY2thZ2VOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlc0NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZXNDaGFuZ2VkKSB7CkBAIC01MTYsNDQgKzUzMiwzOSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZU1vZGlmaWVkKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKSkgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVTZXJ2aWNlcyhwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGdldE9yQ3JlYXRlVXNlclN0YXRlTG9ja2VkKGdldENoYW5naW5nVXNlcklkKCkpLnBydW5lUHJpbnRTZXJ2aWNlcygpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZVJlbW92ZWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdWlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja2dyb3VuZCB1c2VyL3Byb2ZpbGUncyBwcmludCBqb2JzIGFyZSBydW5uaW5nIGJ1dCB0aGVyZSBpcwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm8gVUkgc2hvd24uIEhlbmNlLCBpZiB0aGUgcGFja2FnZXMgb2Ygc3VjaCBhIHVzZXIgY2hhbmdlIHdlIG5lZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGhhbmRsZSBpdCBhcyB0aGUgY2hhbmdlIG1heSBhZmZlY3Qgb25nb2luZyBwcmludCBqb2JzLgotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXJ2aWNlc1JlbW92ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJTdGF0ZSB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yPENvbXBvbmVudE5hbWU+IGl0ZXJhdG9yID0gdXNlclN0YXRlLmdldEVuYWJsZWRTZXJ2aWNlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gaXRlcmF0b3IubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNrYWdlTmFtZS5lcXVhbHMoY29tcG9uZW50TmFtZS5nZXRQYWNrYWdlTmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdGUucmVtb3ZlQXBwcm92ZWRQcmludFNlcnZpY2UoY29tcG9uZW50TmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlc1JlbW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlc1JlbW92ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0Q29tcG9uZW50TmFtZXNUb1NldHRpbmdMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJTdGF0ZS5nZXRFbmFibGVkU2VydmljZXMoKSwgZ2V0Q2hhbmdpbmdVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclN0YXRlLnVwZGF0ZUlmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSkpIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU2VydmljZXMocGFja2FnZU5hbWUpOworICAgICAgICAgICAgICAgICAgICBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKS5wcnVuZVByaW50U2VydmljZXMoKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBvbkhhbmRsZUZvcmNlU3RvcChJbnRlbnQgaW50ZW50LCBTdHJpbmdbXSBzdG9wcGVkUGFja2FnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdWlkLCBib29sZWFuIGRvaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtVXNlck1hbmFnZXIuaXNVc2VyVW5sb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBiYWNrZ3JvdW5kIHVzZXIvcHJvZmlsZSdzIHByaW50IGpvYnMgYXJlIHJ1bm5pbmcgYnV0IHRoZXJlIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBVSSBzaG93bi4gSGVuY2UsIGlmIHRoZSBwYWNrYWdlcyBvZiBzdWNoIGEgdXNlciBjaGFuZ2Ugd2UgbmVlZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gaGFuZGxlIGl0IGFzIHRoZSBjaGFuZ2UgbWF5IGFmZmVjdCBvbmdvaW5nIHByaW50IGpvYnMuCiAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gZ2V0T3JDcmVhdGVVc2VyU3RhdGVMb2NrZWQoZ2V0Q2hhbmdpbmdVc2VySWQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHN0b3BwZWRTb21lUGFja2FnZXMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yPENvbXBvbmVudE5hbWU+IGl0ZXJhdG9yID0gdXNlclN0YXRlLmdldEVuYWJsZWRTZXJ2aWNlcygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVyYXRvcigpOworCisgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFByaW50U2VydmljZUluZm8+IGVuYWJsZWRTZXJ2aWNlcyA9IHVzZXJTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RW5hYmxlZFByaW50U2VydmljZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmFibGVkU2VydmljZXMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3I8UHJpbnRTZXJ2aWNlSW5mbz4gaXRlcmF0b3IgPSBlbmFibGVkU2VydmljZXMuaXRlcmF0b3IoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdGVyYXRvci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIGNvbXBvbmVudE5hbWUgPSBpdGVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lID0gaXRlcmF0b3IubmV4dCgpLmdldENvbXBvbmVudE5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29tcG9uZW50UGFja2FnZSA9IGNvbXBvbmVudE5hbWUuZ2V0UGFja2FnZU5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBzdG9wcGVkUGFja2FnZSA6IHN0b3BwZWRQYWNrYWdlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50UGFja2FnZS5lcXVhbHMoc3RvcHBlZFBhY2thZ2UpKSB7CkBAIC01NzQsNiArNTg1LDggQEAKIAogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uUGFja2FnZUFkZGVkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVpZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKSkgcmV0dXJuOworCiAgICAgICAgICAgICAgICAgICAgIC8vIEEgYmFja2dyb3VuZCB1c2VyL3Byb2ZpbGUncyBwcmludCBqb2JzIGFyZSBydW5uaW5nIGJ1dCB0aGVyZSBpcwogICAgICAgICAgICAgICAgICAgICAvLyBubyBVSSBzaG93bi4gSGVuY2UsIGlmIHRoZSBwYWNrYWdlcyBvZiBzdWNoIGEgdXNlciBjaGFuZ2Ugd2UgbmVlZAogICAgICAgICAgICAgICAgICAgICAvLyB0byBoYW5kbGUgaXQgYXMgdGhlIGNoYW5nZSBtYXkgYWZmZWN0IG9uZ29pbmcgcHJpbnQgam9icy4KQEAgLTU4MSw1MSArNTk0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGludGVudC5zZXRQYWNrYWdlKHBhY2thZ2VOYW1lKTsKIAogICAgICAgICAgICAgICAgICAgICBMaXN0PFJlc29sdmVJbmZvPiBpbnN0YWxsZWRTZXJ2aWNlcyA9IG1Db250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAucXVlcnlJbnRlbnRTZXJ2aWNlc0FzVXNlcihpbnRlbnQsIFBhY2thZ2VNYW5hZ2VyLkdFVF9TRVJWSUNFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAucXVlcnlJbnRlbnRTZXJ2aWNlc0FzVXNlcihpbnRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfU0VSVklDRVMgfCBNQVRDSF9ERUJVR19UUklBR0VEX01JU1NJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFsbGVkU2VydmljZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGFsbCBhZGRlZCBzZXJ2aWNlcyBieSBkZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbGxlZFNlcnZpY2VzICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJTdGF0ZSB1c2VyU3RhdGUgPSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChnZXRDaGFuZ2luZ1VzZXJJZCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU2V0PENvbXBvbmVudE5hbWU+IGVuYWJsZWRTZXJ2aWNlcyA9IHVzZXJTdGF0ZS5nZXRFbmFibGVkU2VydmljZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2VydmljZXNBZGRlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBpbnQgaW5zdGFsbGVkU2VydmljZUNvdW50ID0gaW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YWxsZWRTZXJ2aWNlQ291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJbmZvIHNlcnZpY2VJbmZvID0gaW5zdGFsbGVkU2VydmljZXMuZ2V0KGkpLnNlcnZpY2VJbmZvOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudE5hbWUgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudE5hbWUoc2VydmljZUluZm8ucGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlSW5mby5uYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRTZXJ2aWNlcy5hZGQoY29tcG9uZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlc0FkZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2VzQWRkZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzaXN0Q29tcG9uZW50TmFtZXNUb1NldHRpbmdMb2NrZWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUywgZW5hYmxlZFNlcnZpY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhbmdpbmdVc2VySWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclN0YXRlLnVwZGF0ZUlmTmVlZGVkTG9ja2VkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyU3RhdGUudXBkYXRlSWZOZWVkZWRMb2NrZWQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByaXZhdGUgdm9pZCBwZXJzaXN0Q29tcG9uZW50TmFtZXNUb1NldHRpbmdMb2NrZWQoU3RyaW5nIHNldHRpbmdOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgU2V0PENvbXBvbmVudE5hbWU+IGNvbXBvbmVudE5hbWVzLCBpbnQgdXNlcklkKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lIDogY29tcG9uZW50TmFtZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKENPTVBPTkVOVF9OQU1FX1NFUEFSQVRPUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjb21wb25lbnROYW1lLmZsYXR0ZW5Ub1Nob3J0U3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmdGb3JVc2VyKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdOYW1lLCBidWlsZGVyLnRvU3RyaW5nKCksIHVzZXJJZCk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgLy8gcGFja2FnZSBjaGFuZ2VzCkBAIC02MzQsNiArNjExLDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBwcml2YXRlIFVzZXJTdGF0ZSBnZXRPckNyZWF0ZVVzZXJTdGF0ZUxvY2tlZChpbnQgdXNlcklkKSB7CisgICAgICAgICAgICBpZiAoIW1Vc2VyTWFuYWdlci5pc1VzZXJVbmxvY2tlZCh1c2VySWQpKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyICIgKyB1c2VySWQgKyAiIG11c3QgYmUgdW5sb2NrZWQgZm9yIHByaW50aW5nIHRvIGJlIGF2YWlsYWJsZSIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBVc2VyU3RhdGUgdXNlclN0YXRlID0gbVVzZXJTdGF0ZXMuZ2V0KHVzZXJJZCk7CiAgICAgICAgICAgICBpZiAodXNlclN0YXRlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICB1c2VyU3RhdGUgPSBuZXcgVXNlclN0YXRlKG1Db250ZXh0LCB1c2VySWQsIG1Mb2NrKTsKQEAgLTY0Miw3ICs2MjQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHVzZXJTdGF0ZTsKICAgICAgICAgfQogCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVVc2VyU3RhcnRlZChmaW5hbCBpbnQgdXNlcklkKSB7CisgICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVVc2VyVW5sb2NrZWQoZmluYWwgaW50IHVzZXJJZCkgewogICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgdG91Y2ggdGhlIHJlbW90ZSBwcmludCBzcG9vbGVyIHdoaWNoCiAgICAgICAgICAgICAvLyBtdXN0IGJlIGNhbGxlZCBvZmYgdGhlIG1haW4gdGhyZWFkLCBzbyBwb3N0IHRoZSB3b3JrLgogICAgICAgICAgICAgQmFja2dyb3VuZFRocmVhZC5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNlcnZpY2UuamF2YSBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCmluZGV4IDc3YTQ3ZjguLjBhZjE1MjUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCisrKyBiL3NlcnZpY2VzL3ByaW50L2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3ByaW50L1JlbW90ZVByaW50U2VydmljZS5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2VydmljZUNvbm5lY3Rpb247CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhcmNlbGVkTGlzdFNsaWNlOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5JQmluZGVyOwpAQCAtOTgsNiArOTksMTUgQEAKICAgICAgICAgcHVibGljIHZvaWQgb25QcmludGVyc0FkZGVkKExpc3Q8UHJpbnRlckluZm8+IHByaW50ZXJzKTsKICAgICAgICAgcHVibGljIHZvaWQgb25QcmludGVyc1JlbW92ZWQoTGlzdDxQcmludGVySWQ+IHByaW50ZXJJZHMpOwogICAgICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaWVkKFJlbW90ZVByaW50U2VydmljZSBzZXJ2aWNlKTsKKworICAgICAgICAvKioKKyAgICAgICAgICogSGFuZGxlIHRoYXQgYSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyIHdhcyBsb2FkZWQuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgICAgICogQHBhcmFtIGljb24gdGhlIGljb24gdGhhdCB3YXMgbG9hZGVkCisgICAgICAgICAqIEBzZWUgYW5kcm9pZC5wcmludC5QcmludGVySW5mby5CdWlsZGVyI3NldEhhc0N1c3RvbVByaW50ZXJJY29uKCkKKyAgICAgICAgICovCisgICAgICAgIHB1YmxpYyB2b2lkIG9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoUHJpbnRlcklkIHByaW50ZXJJZCwgSWNvbiBpY29uKTsKICAgICB9CiAKICAgICBwdWJsaWMgUmVtb3RlUHJpbnRTZXJ2aWNlKENvbnRleHQgY29udGV4dCwgQ29tcG9uZW50TmFtZSBjb21wb25lbnROYW1lLCBpbnQgdXNlcklkLApAQCAtNDA0LDYgKzQxNCwyMiBAQAogICAgICAgICAgICAgICAgIHByaW50ZXJJZCkuc2VuZFRvVGFyZ2V0KCk7CiAgICAgfQogCisgICAgLyoqCisgICAgICogUmVxdWVzdCB0aGUgY3VzdG9tIHByaW50ZXIgaWNvbiBmb3IgYSBwcmludGVyLgorICAgICAqCisgICAgICogQHBhcmFtIHByaW50ZXJJZCB0aGUgaWQgb2YgdGhlIHByaW50ZXIgdGhlIGljb24gc2hvdWxkIGJlIGxvYWRlZCBmb3IKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIHZvaWQgcmVxdWVzdEN1c3RvbVByaW50ZXJJY29uKFByaW50ZXJJZCBwcmludGVySWQpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChpc0JvdW5kKCkpIHsKKyAgICAgICAgICAgICAgICBtUHJpbnRTZXJ2aWNlLnJlcXVlc3RDdXN0b21QcmludGVySWNvbihwcmludGVySWQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKKyAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgcmVxdWVzdGluZyBpY29uIGZvciAiICsgcHJpbnRlcklkLCByZSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBwcml2YXRlIHZvaWQgaGFuZGxlU3RhcnRQcmludGVyU3RhdGVUcmFja2luZyhmaW5hbCBQcmludGVySWQgcHJpbnRlcklkKSB7CiAgICAgICAgIHRocm93SWZEZXN0cm95ZWQoKTsKICAgICAgICAgLy8gVGFrZSBhIG5vdGUgd2UgYXJlIHRyYWNraW5nIHRoZSBwcmludGVyLgpAQCAtODQyLDUgKzg2OCwxOSBAQAogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcHJpbnRlciBpZDogIiArIHByaW50ZXJJZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChQcmludGVySWQgcHJpbnRlcklkLCBJY29uIGljb24pCisgICAgICAgICAgICAgICAgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSA9IG1XZWFrU2VydmljZS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChzZXJ2aWNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGlkZW50aXR5ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgc2VydmljZS5tQ2FsbGJhY2tzLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQocHJpbnRlcklkLCBpY29uKTsKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudGl0eSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvUmVtb3RlUHJpbnRTcG9vbGVyLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQppbmRleCBjNTA2YjZmLi5kMTc5Yjk1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQorKysgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9SZW1vdGVQcmludFNwb29sZXIuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LlNlcnZpY2VDb25uZWN0aW9uOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJpbmRlcjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwogaW1wb3J0IGFuZHJvaWQub3MuSUJpbmRlcjsKQEAgLTM1LDE3ICszNiwxOSBAQAogaW1wb3J0IGFuZHJvaWQucHJpbnQuSVByaW50U3Bvb2xlckNsaWVudDsKIGltcG9ydCBhbmRyb2lkLnByaW50LlByaW50Sm9iSWQ7CiBpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludEpvYkluZm87CitpbXBvcnQgYW5kcm9pZC5wcmludC5QcmludGVySWQ7CitpbXBvcnQgYW5kcm9pZC5wcmludHNlcnZpY2UuUHJpbnRTZXJ2aWNlOwogaW1wb3J0IGFuZHJvaWQudXRpbC5TbG9nOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UaW1lZFJlbW90ZUNhbGxlcjsKIAoraW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKKwogaW1wb3J0IGphdmEuaW8uRmlsZURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKIAotaW1wb3J0IGxpYmNvcmUuaW8uSW9VdGlsczsKLQogLyoqCiAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIHJlbW90ZSBwcmludCBzcG9vbGVyIGFzIGEgbG9jYWwgb2JqZWN0IHRvIHRoZQogICogUHJpbnRNYW5hZ2VyU2VydmljZS4gSXQgaXMgcmVzcG9uc2libGUgdG8gY29ubmVjdGluZyB0byB0aGUgcmVtb3RlCkBAIC03Miw2ICs3NSwxNSBAQAogCiAgICAgcHJpdmF0ZSBmaW5hbCBTZXRQcmludEpvYlRhZ0NhbGxlciBtU2V0UHJpbnRKb2JUYWdDYWxsZXIgPSBuZXcgU2V0UHJpbnRKb2JUYWdDYWxsZXIoKTsKIAorICAgIHByaXZhdGUgZmluYWwgT25DdXN0b21QcmludGVySWNvbkxvYWRlZENhbGxlciBtQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRDYWxsZXIgPQorICAgICAgICAgICAgbmV3IE9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWRDYWxsZXIoKTsKKworICAgIHByaXZhdGUgZmluYWwgQ2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlQ2FsbGVyIG1DbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGUgPQorICAgICAgICAgICAgbmV3IENsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZUNhbGxlcigpOworCisgICAgcHJpdmF0ZSBmaW5hbCBHZXRDdXN0b21QcmludGVySWNvbkNhbGxlciBtR2V0Q3VzdG9tUHJpbnRlckljb25DYWxsZXIgPQorICAgICAgICAgICAgbmV3IEdldEN1c3RvbVByaW50ZXJJY29uQ2FsbGVyKCk7CisKICAgICBwcml2YXRlIGZpbmFsIFNlcnZpY2VDb25uZWN0aW9uIG1TZXJ2aWNlQ29ubmVjdGlvbiA9IG5ldyBNeVNlcnZpY2VDb25uZWN0aW9uKCk7CiAKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CkBAIC0yODcsNiArMjk5LDk2IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBIYW5kbGUgdGhhdCBhIGN1c3RvbSBpY29uIGZvciBhIHByaW50ZXIgd2FzIGxvYWRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgKiBAcGFyYW0gaWNvbiB0aGUgaWNvbiB0aGF0IHdhcyBsb2FkZWQKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIGZpbmFsIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkLAorICAgICAgICAgICAgQE51bGxhYmxlIEljb24gaWNvbikgeworICAgICAgICB0aHJvd0lmQ2FsbGVkT25NYWluVGhyZWFkKCk7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKKyAgICAgICAgICAgIG1DYW5VbmJpbmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbUN1c3RvbVByaW50ZXJJY29uTG9hZGVkQ2FsbGVyLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQoZ2V0UmVtb3RlSW5zdGFuY2VMYXp5KCksCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXJJZCwgaWNvbik7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbnxUaW1lb3V0RXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICBTbG9nLmUoTE9HX1RBRywgIkVycm9yIGxvYWRpbmcgbmV3IGN1c3RvbSBwcmludGVyIGljb24uIiwgcmUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgaWYgKERFQlVHKSB7CisgICAgICAgICAgICAgICAgU2xvZy5pKExPR19UQUcsCisgICAgICAgICAgICAgICAgICAgICAgICAiW3VzZXI6ICIgKyBtVXNlckhhbmRsZS5nZXRJZGVudGlmaWVyKCkgKyAiXSBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICBtQ2FuVW5iaW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtTG9jay5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlci4gSWYgdGhlIGljb24gaXMgbm90IGNhY2hlZCwgdGhlIGljb24gaXMKKyAgICAgKiByZXF1ZXN0ZWQgYXN5bmNocm9ub3VzbHkuIE9uY2UgaXQgaXMgYXZhaWxhYmxlIHRoZSBwcmludGVyIGlzIHVwZGF0ZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJpbnRlcklkIHRoZSBpZCBvZiB0aGUgcHJpbnRlciB0aGUgaWNvbiBzaG91bGQgYmUgbG9hZGVkIGZvcgorICAgICAqIEByZXR1cm4gdGhlIGN1c3RvbSBpY29uIHRvIGJlIHVzZWQgZm9yIHRoZSBwcmludGVyIG9yIG51bGwgaWYgdGhlIGljb24gaXMKKyAgICAgKiAgICAgICAgIG5vdCB5ZXQgYXZhaWxhYmxlCisgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBATnVsbGFibGUgSWNvbiBnZXRDdXN0b21QcmludGVySWNvbihATm9uTnVsbCBQcmludGVySWQgcHJpbnRlcklkKSB7CisgICAgICAgIHRocm93SWZDYWxsZWRPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgdGhyb3dJZkRlc3Ryb3llZExvY2tlZCgpOworICAgICAgICAgICAgbUNhblVuYmluZCA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gbUdldEN1c3RvbVByaW50ZXJJY29uQ2FsbGVyLmdldEN1c3RvbVByaW50ZXJJY29uKGdldFJlbW90ZUluc3RhbmNlTGF6eSgpLAorICAgICAgICAgICAgICAgICAgICBwcmludGVySWQpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb258VGltZW91dEV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgU2xvZy5lKExPR19UQUcsICJFcnJvciBnZXR0aW5nIGN1c3RvbSBwcmludGVyIGljb24uIiwgcmUpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBTbG9nLmkoTE9HX1RBRywKKyAgICAgICAgICAgICAgICAgICAgICAgICJbdXNlcjogIiArIG1Vc2VySGFuZGxlLmdldElkZW50aWZpZXIoKSArICJdIGdldEN1c3RvbVByaW50ZXJJY29uKCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICBtQ2FuVW5iaW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtTG9jay5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENsZWFyIHRoZSBjdXN0b20gcHJpbnRlciBpY29uIGNhY2hlCisgICAgICovCisgICAgcHVibGljIHZvaWQgY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKCkgeworICAgICAgICB0aHJvd0lmQ2FsbGVkT25NYWluVGhyZWFkKCk7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKKyAgICAgICAgICAgIG1DYW5VbmJpbmQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgbUNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZS5jbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGUoZ2V0UmVtb3RlSW5zdGFuY2VMYXp5KCkpOworICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb258VGltZW91dEV4Y2VwdGlvbiByZSkgeworICAgICAgICAgICAgU2xvZy5lKExPR19UQUcsICJFcnJvciBjbGVhcmluZyBjdXN0b20gcHJpbnRlciBpY29uIGNhY2hlLiIsIHJlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChERUJVRykgeworICAgICAgICAgICAgICAgIFNsb2cuaShMT0dfVEFHLAorICAgICAgICAgICAgICAgICAgICAgICAgIlt1c2VyOiAiICsgbVVzZXJIYW5kbGUuZ2V0SWRlbnRpZmllcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIl0gY2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlKCkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgICAgICBtQ2FuVW5iaW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtTG9jay5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHNldFByaW50Sm9iVGFnKFByaW50Sm9iSWQgcHJpbnRKb2JJZCwgU3RyaW5nIHRhZykgewogICAgICAgICB0aHJvd0lmQ2FsbGVkT25NYWluVGhyZWFkKCk7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKQEAgLTMzOCwyNiArNDQwLDI0IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogQ29ubmVjdCB0byB0aGUgcHJpbnQgc3Bvb2xlciBzZXJ2aWNlIGFuZCByZW1vdmUgYW4gYXBwcm92ZWQgcHJpbnQgc2VydmljZS4KKyAgICAgKiBSZW1vdmUgYWxsIGFwcHJvdmVkIHtAbGluayBQcmludFNlcnZpY2UgcHJpbnQgc2VydmljZXN9IHRoYXQgYXJlIG5vdCBpbiB0aGUgZ2l2ZW4gc2V0LgogICAgICAqCi0gICAgICogQHBhcmFtIHNlcnZpY2VUb1JlbW92ZSBUaGUge0BsaW5rIENvbXBvbmVudE5hbWV9IG9mIHRoZSBzZXJ2aWNlIHRvIGJlIHJlbW92ZWQuCisgICAgICogQHBhcmFtIHNlcnZpY2VzVG9LZWVwIFRoZSB7QGxpbmsgQ29tcG9uZW50TmFtZSBuYW1lcyB9IG9mIHRoZSBzZXJ2aWNlcyB0byBrZWVwCiAgICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgcmVtb3ZlQXBwcm92ZWRQcmludFNlcnZpY2UoQ29tcG9uZW50TmFtZSBzZXJ2aWNlVG9SZW1vdmUpIHsKKyAgICBwdWJsaWMgZmluYWwgdm9pZCBwcnVuZUFwcHJvdmVkUHJpbnRTZXJ2aWNlcyhMaXN0PENvbXBvbmVudE5hbWU+IHNlcnZpY2VzVG9LZWVwKSB7CiAgICAgICAgIHRocm93SWZDYWxsZWRPbk1haW5UaHJlYWQoKTsKICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgdGhyb3dJZkRlc3Ryb3llZExvY2tlZCgpOwogICAgICAgICAgICAgbUNhblVuYmluZCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBnZXRSZW1vdGVJbnN0YW5jZUxhenkoKS5yZW1vdmVBcHByb3ZlZFByaW50U2VydmljZShzZXJ2aWNlVG9SZW1vdmUpOwotICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKLSAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgcmVtb3ZpbmcgYXBwcm92ZWQgcHJpbnQgc2VydmljZS4iLCByZSk7Ci0gICAgICAgIH0gY2F0Y2ggKFRpbWVvdXRFeGNlcHRpb24gdGUpIHsKLSAgICAgICAgICAgIFNsb2cuZShMT0dfVEFHLCAiRXJyb3IgcmVtb3ZpbmcgYXBwcm92ZWQgcHJpbnQgc2VydmljZS4iLCB0ZSk7CisgICAgICAgICAgICBnZXRSZW1vdGVJbnN0YW5jZUxhenkoKS5wcnVuZUFwcHJvdmVkUHJpbnRTZXJ2aWNlcyhzZXJ2aWNlc1RvS2VlcCk7CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbnxUaW1lb3V0RXhjZXB0aW9uIHJlKSB7CisgICAgICAgICAgICBTbG9nLmUoTE9HX1RBRywgIkVycm9yIHBydW5pbmcgYXBwcm92ZWQgcHJpbnQgc2VydmljZXMuIiwgcmUpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgaWYgKERFQlVHKSB7CiAgICAgICAgICAgICAgICAgU2xvZy5pKExPR19UQUcsICJbdXNlcjogIiArIG1Vc2VySGFuZGxlLmdldElkZW50aWZpZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgKyAiXSByZW1vdmluZyBhcHByb3ZlZCBwcmludCBzZXJ2aWNlKCkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICsgIl0gcHJ1bmVBcHByb3ZlZFByaW50U2VydmljZXMoKSIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgewogICAgICAgICAgICAgICAgIG1DYW5VbmJpbmQgPSB0cnVlOwpAQCAtNjMyLDYgKzczMiw2OSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgT25DdXN0b21QcmludGVySWNvbkxvYWRlZENhbGxlciBleHRlbmRzIFRpbWVkUmVtb3RlQ2FsbGVyPFZvaWQ+IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIG1DYWxsYmFjazsKKworICAgICAgICBwdWJsaWMgT25DdXN0b21QcmludGVySWNvbkxvYWRlZENhbGxlcigpIHsKKyAgICAgICAgICAgIHN1cGVyKFRpbWVkUmVtb3RlQ2FsbGVyLkRFRkFVTFRfQ0FMTF9USU1FT1VUX01JTExJUyk7CisgICAgICAgICAgICBtQ2FsbGJhY2sgPSBuZXcgQmFzZVByaW50U3Bvb2xlclNlcnZpY2VDYWxsYmFja3MoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkNhY2hlZChpbnQgc2VxdWVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgb25SZW1vdGVNZXRob2RSZXN1bHQobnVsbCwgc2VxdWVuY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgVm9pZCBvbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKElQcmludFNwb29sZXIgdGFyZ2V0LCBQcmludGVySWQgcHJpbnRlcklkLAorICAgICAgICAgICAgICAgIEljb24gaWNvbikgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiwgVGltZW91dEV4Y2VwdGlvbiB7CisgICAgICAgICAgICBmaW5hbCBpbnQgc2VxdWVuY2UgPSBvbkJlZm9yZVJlbW90ZUNhbGwoKTsKKyAgICAgICAgICAgIHRhcmdldC5vbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkKHByaW50ZXJJZCwgaWNvbiwgbUNhbGxiYWNrLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0UmVzdWx0VGltZWQoc2VxdWVuY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgQ2xlYXJDdXN0b21QcmludGVySWNvbkNhY2hlQ2FsbGVyIGV4dGVuZHMgVGltZWRSZW1vdGVDYWxsZXI8Vm9pZD4geworICAgICAgICBwcml2YXRlIGZpbmFsIElQcmludFNwb29sZXJDYWxsYmFja3MgbUNhbGxiYWNrOworCisgICAgICAgIHB1YmxpYyBDbGVhckN1c3RvbVByaW50ZXJJY29uQ2FjaGVDYWxsZXIoKSB7CisgICAgICAgICAgICBzdXBlcihUaW1lZFJlbW90ZUNhbGxlci5ERUZBVUxUX0NBTExfVElNRU9VVF9NSUxMSVMpOworICAgICAgICAgICAgbUNhbGxiYWNrID0gbmV3IEJhc2VQcmludFNwb29sZXJTZXJ2aWNlQ2FsbGJhY2tzKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGN1c3RvbVByaW50ZXJJY29uQ2FjaGVDbGVhcmVkKGludCBzZXF1ZW5jZSkgeworICAgICAgICAgICAgICAgICAgICBvblJlbW90ZU1ldGhvZFJlc3VsdChudWxsLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBWb2lkIGNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZShJUHJpbnRTcG9vbGVyIHRhcmdldCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBzZXF1ZW5jZSA9IG9uQmVmb3JlUmVtb3RlQ2FsbCgpOworICAgICAgICAgICAgdGFyZ2V0LmNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZShtQ2FsbGJhY2ssIHNlcXVlbmNlKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRSZXN1bHRUaW1lZChzZXF1ZW5jZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBHZXRDdXN0b21QcmludGVySWNvbkNhbGxlciBleHRlbmRzIFRpbWVkUmVtb3RlQ2FsbGVyPEljb24+IHsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBJUHJpbnRTcG9vbGVyQ2FsbGJhY2tzIG1DYWxsYmFjazsKKworICAgICAgICBwdWJsaWMgR2V0Q3VzdG9tUHJpbnRlckljb25DYWxsZXIoKSB7CisgICAgICAgICAgICBzdXBlcihUaW1lZFJlbW90ZUNhbGxlci5ERUZBVUxUX0NBTExfVElNRU9VVF9NSUxMSVMpOworICAgICAgICAgICAgbUNhbGxiYWNrID0gbmV3IEJhc2VQcmludFNwb29sZXJTZXJ2aWNlQ2FsbGJhY2tzKCkgeworICAgICAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uR2V0Q3VzdG9tUHJpbnRlckljb25SZXN1bHQoSWNvbiBpY29uLCBpbnQgc2VxdWVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgb25SZW1vdGVNZXRob2RSZXN1bHQoaWNvbiwgc2VxdWVuY2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSWNvbiBnZXRDdXN0b21QcmludGVySWNvbihJUHJpbnRTcG9vbGVyIHRhcmdldCwgUHJpbnRlcklkIHByaW50ZXJJZCkKKyAgICAgICAgICAgICAgICB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uLCBUaW1lb3V0RXhjZXB0aW9uIHsKKyAgICAgICAgICAgIGZpbmFsIGludCBzZXF1ZW5jZSA9IG9uQmVmb3JlUmVtb3RlQ2FsbCgpOworICAgICAgICAgICAgdGFyZ2V0LmdldEN1c3RvbVByaW50ZXJJY29uKHByaW50ZXJJZCwgbUNhbGxiYWNrLCBzZXF1ZW5jZSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0UmVzdWx0VGltZWQoc2VxdWVuY2UpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHJpdmF0ZSBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQmFzZVByaW50U3Bvb2xlclNlcnZpY2VDYWxsYmFja3MKICAgICAgICAgICAgIGV4dGVuZHMgSVByaW50U3Bvb2xlckNhbGxiYWNrcy5TdHViIHsKICAgICAgICAgQE92ZXJyaWRlCkBAIC02NTgsNiArODIxLDIxIEBACiAgICAgICAgIHB1YmxpYyB2b2lkIG9uU2V0UHJpbnRKb2JUYWdSZXN1bHQoYm9vbGVhbiBzdWNjZXNzLCBpbnQgc2VxdWVuY2UpIHsKICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KICAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkN1c3RvbVByaW50ZXJJY29uQ2FjaGVkKGludCBzZXF1ZW5jZSkgeworICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIG9uR2V0Q3VzdG9tUHJpbnRlckljb25SZXN1bHQoQE51bGxhYmxlIEljb24gaWNvbiwgaW50IHNlcXVlbmNlKSB7CisgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgY3VzdG9tUHJpbnRlckljb25DYWNoZUNsZWFyZWQoaW50IHNlcXVlbmNlKSB7CisgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovCisgICAgICAgIH0KICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBQcmludFNwb29sZXJDbGllbnQgZXh0ZW5kcyBJUHJpbnRTcG9vbGVyQ2xpZW50LlN0dWIgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvcHJpbnQvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvcHJpbnQvVXNlclN0YXRlLmphdmEgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQppbmRleCA2YTUwYTZlLi43OGVkYzRkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQorKysgYi9zZXJ2aWNlcy9wcmludC9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci9wcmludC9Vc2VyU3RhdGUuamF2YQpAQCAtMTYsMTYgKzE2LDE5IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQuc2VydmVyLnByaW50OwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlci5HRVRfTUVUQV9EQVRBOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuR0VUX1NFUlZJQ0VTOworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXIuTUFUQ0hfREVCVUdfVFJJQUdFRF9NSVNTSU5HOworCitpbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLk51bGxhYmxlOwogaW1wb3J0IGFuZHJvaWQuYXBwLlBlbmRpbmdJbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbXBvbmVudE5hbWU7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50U2VuZGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYXJjZWxlZExpc3RTbGljZTsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUmVzb2x2ZUluZm87Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlNlcnZpY2VJbmZvOworaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbjsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7CiBpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CkBAIC05Nyw3ICsxMDAsNyBAQAogICAgIHByaXZhdGUgZmluYWwgTGlzdDxQcmludFNlcnZpY2VJbmZvPiBtSW5zdGFsbGVkU2VydmljZXMgPQogICAgICAgICAgICAgbmV3IEFycmF5TGlzdDxQcmludFNlcnZpY2VJbmZvPigpOwogCi0gICAgcHJpdmF0ZSBmaW5hbCBTZXQ8Q29tcG9uZW50TmFtZT4gbUVuYWJsZWRTZXJ2aWNlcyA9CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8Q29tcG9uZW50TmFtZT4gbURpc2FibGVkU2VydmljZXMgPQogICAgICAgICAgICAgbmV3IEFycmF5U2V0PENvbXBvbmVudE5hbWU+KCk7CiAKICAgICBwcml2YXRlIGZpbmFsIFByaW50Sm9iRm9yQXBwQ2FjaGUgbVByaW50Sm9iRm9yQXBwQ2FjaGUgPQpAQCAtMTI1LDggKzEyOCwxNSBAQAogICAgICAgICBtTG9jayA9IGxvY2s7CiAgICAgICAgIG1TcG9vbGVyID0gbmV3IFJlbW90ZVByaW50U3Bvb2xlcihjb250ZXh0LCB1c2VySWQsIHRoaXMpOwogICAgICAgICBtSGFuZGxlciA9IG5ldyBVc2VyU3RhdGVIYW5kbGVyKGNvbnRleHQuZ2V0TWFpbkxvb3BlcigpKTsKKwogICAgICAgICBzeW5jaHJvbml6ZWQgKG1Mb2NrKSB7Ci0gICAgICAgICAgICBlbmFibGVTeXN0ZW1QcmludFNlcnZpY2VzTG9ja2VkKCk7CisgICAgICAgICAgICByZWFkSW5zdGFsbGVkUHJpbnRTZXJ2aWNlc0xvY2tlZCgpOworICAgICAgICAgICAgdXBncmFkZVBlcnNpc3RlbnRTdGF0ZUlmTmVlZGVkKCk7CisgICAgICAgICAgICByZWFkRGlzYWJsZWRQcmludFNlcnZpY2VzTG9ja2VkKCk7CisKKyAgICAgICAgICAgIC8vIFNvbWUgcHJpbnQgc2VydmljZXMgbWlnaHQgaGF2ZSBnb3R0ZW4gaW5zdGFsbGVkIGJlZm9yZSB0aGUgVXNlciBTdGF0ZSBjYW1lIHVwCisgICAgICAgICAgICBwcnVuZVByaW50U2VydmljZXMoKTsKKwogICAgICAgICAgICAgb25Db25maWd1cmF0aW9uQ2hhbmdlZExvY2tlZCgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjcxLDYgKzI4MSwyOCBAQAogICAgICAgICByZXR1cm4gcHJpbnRKb2I7CiAgICAgfQogCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjdXN0b20gaWNvbiBmb3IgYSBwcmludGVyLiBJZiB0aGUgaWNvbiBpcyBub3QgY2FjaGVkLCB0aGUgaWNvbiBpcworICAgICAqIHJlcXVlc3RlZCBhc3luY2hyb25vdXNseS4gT25jZSBpdCBpcyBhdmFpbGFibGUgdGhlIHByaW50ZXIgaXMgdXBkYXRlZC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIHNob3VsZCBiZSBsb2FkZWQgZm9yCisgICAgICogQHJldHVybiB0aGUgY3VzdG9tIGljb24gdG8gYmUgdXNlZCBmb3IgdGhlIHByaW50ZXIgb3IgbnVsbCBpZiB0aGUgaWNvbiBpcworICAgICAqICAgICAgICAgbm90IHlldCBhdmFpbGFibGUKKyAgICAgKiBAc2VlIGFuZHJvaWQucHJpbnQuUHJpbnRlckluZm8uQnVpbGRlciNzZXRIYXNDdXN0b21QcmludGVySWNvbigpCisgICAgICovCisgICAgcHVibGljIEljb24gZ2V0Q3VzdG9tUHJpbnRlckljb24oUHJpbnRlcklkIHByaW50ZXJJZCkgeworICAgICAgICBJY29uIGljb24gPSBtU3Bvb2xlci5nZXRDdXN0b21QcmludGVySWNvbihwcmludGVySWQpOworCisgICAgICAgIGlmIChpY29uID09IG51bGwpIHsKKyAgICAgICAgICAgIFJlbW90ZVByaW50U2VydmljZSBzZXJ2aWNlID0gbUFjdGl2ZVNlcnZpY2VzLmdldChwcmludGVySWQuZ2V0U2VydmljZU5hbWUoKSk7CisgICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgc2VydmljZS5yZXF1ZXN0Q3VzdG9tUHJpbnRlckljb24ocHJpbnRlcklkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpY29uOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIGNhbmNlbFByaW50Sm9iKFByaW50Sm9iSWQgcHJpbnRKb2JJZCwgaW50IGFwcElkKSB7CiAgICAgICAgIFByaW50Sm9iSW5mbyBwcmludEpvYkluZm8gPSBtU3Bvb2xlci5nZXRQcmludEpvYkluZm8ocHJpbnRKb2JJZCwgYXBwSWQpOwogICAgICAgICBpZiAocHJpbnRKb2JJbmZvID09IG51bGwpIHsKQEAgLTI5NywxNSArMzI5LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qKgotICAgICAqIFJlbW92ZSBhbiBhcHByb3ZlZCBwcmludCBzZXJ2aWNlLgotICAgICAqCi0gICAgICogQHBhcmFtIHNlcnZpY2VUb1JlbW92ZSBUaGUge0BsaW5rIENvbXBvbmVudE5hbWV9IG9mIHRoZSBzZXJ2aWNlIHRvIGJlIHJlbW92ZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlQXBwcm92ZWRQcmludFNlcnZpY2UoQ29tcG9uZW50TmFtZSBzZXJ2aWNlVG9SZW1vdmUpIHsKLSAgICAgICAgbVNwb29sZXIucmVtb3ZlQXBwcm92ZWRQcmludFNlcnZpY2Uoc2VydmljZVRvUmVtb3ZlKTsKLSAgICB9Ci0KICAgICBwdWJsaWMgdm9pZCByZXN0YXJ0UHJpbnRKb2IoUHJpbnRKb2JJZCBwcmludEpvYklkLCBpbnQgYXBwSWQpIHsKICAgICAgICAgUHJpbnRKb2JJbmZvIHByaW50Sm9iSW5mbyA9IGdldFByaW50Sm9iSW5mbyhwcmludEpvYklkLCBhcHBJZCk7CiAgICAgICAgIGlmIChwcmludEpvYkluZm8gPT0gbnVsbCB8fCBwcmludEpvYkluZm8uZ2V0U3RhdGUoKSAhPSBQcmludEpvYkluZm8uU1RBVEVfRkFJTEVEKSB7CkBAIC0zMTQsNyArMzM3LDcgQEAKICAgICAgICAgbVNwb29sZXIuc2V0UHJpbnRKb2JTdGF0ZShwcmludEpvYklkLCBQcmludEpvYkluZm8uU1RBVEVfUVVFVUVELCBudWxsKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTGlzdDxQcmludFNlcnZpY2VJbmZvPiBnZXRFbmFibGVkUHJpbnRTZXJ2aWNlcygpIHsKKyAgICBwdWJsaWMgQE51bGxhYmxlIExpc3Q8UHJpbnRTZXJ2aWNlSW5mbz4gZ2V0RW5hYmxlZFByaW50U2VydmljZXMoKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIExpc3Q8UHJpbnRTZXJ2aWNlSW5mbz4gZW5hYmxlZFNlcnZpY2VzID0gbnVsbDsKICAgICAgICAgICAgIGZpbmFsIGludCBpbnN0YWxsZWRTZXJ2aWNlQ291bnQgPSBtSW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpOwpAQCAtMzQ1LDYgKzM2OCw4IEBACiAgICAgICAgICAgICB0aHJvd0lmRGVzdHJveWVkTG9ja2VkKCk7CiAKICAgICAgICAgICAgIGlmIChtUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG1TcG9vbGVyLmNsZWFyQ3VzdG9tUHJpbnRlckljb25DYWNoZSgpOworCiAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZG8gbm90IGhhdmUgYSBzZXNzaW9uLCB0ZWxsIGFsbCBzZXJ2aWNlIHRvIGNyZWF0ZSBvbmUuCiAgICAgICAgICAgICAgICAgbVByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uID0gbmV3IFByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uTWVkaWF0b3IobUNvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC01MzMsNiArNTU4LDIwIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZChQcmludGVySWQgcHJpbnRlcklkLCBJY29uIGljb24pIHsKKyAgICAgICAgc3luY2hyb25pemVkIChtTG9jaykgeworICAgICAgICAgICAgdGhyb3dJZkRlc3Ryb3llZExvY2tlZCgpOworCisgICAgICAgICAgICAvLyBObyBzZXNzaW9uIC0gbm90aGluZyB0byBkby4KKyAgICAgICAgICAgIGlmIChtUHJpbnRlckRpc2NvdmVyeVNlc3Npb24gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1TcG9vbGVyLm9uQ3VzdG9tUHJpbnRlckljb25Mb2FkZWQocHJpbnRlcklkLCBpY29uKTsKKyAgICAgICAgICAgIG1QcmludGVyRGlzY292ZXJ5U2Vzc2lvbi5vbkN1c3RvbVByaW50ZXJJY29uTG9hZGVkTG9ja2VkKHByaW50ZXJJZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBvblNlcnZpY2VEaWVkKFJlbW90ZVByaW50U2VydmljZSBzZXJ2aWNlKSB7CiAgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKICAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKQEAgLTU1OCwxMyArNTk3LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBTZXQ8Q29tcG9uZW50TmFtZT4gZ2V0RW5hYmxlZFNlcnZpY2VzKCkgewotICAgICAgICBzeW5jaHJvbml6ZWQobUxvY2spIHsKLSAgICAgICAgICAgIHRocm93SWZEZXN0cm95ZWRMb2NrZWQoKTsKLSAgICAgICAgICAgIHJldHVybiBtRW5hYmxlZFNlcnZpY2VzOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcHVibGljIHZvaWQgZGVzdHJveUxvY2tlZCgpIHsKICAgICAgICAgdGhyb3dJZkRlc3Ryb3llZExvY2tlZCgpOwogICAgICAgICBtU3Bvb2xlci5kZXN0cm95KCk7CkBAIC01NzMsNyArNjA1LDcgQEAKICAgICAgICAgfQogICAgICAgICBtQWN0aXZlU2VydmljZXMuY2xlYXIoKTsKICAgICAgICAgbUluc3RhbGxlZFNlcnZpY2VzLmNsZWFyKCk7Ci0gICAgICAgIG1FbmFibGVkU2VydmljZXMuY2xlYXIoKTsKKyAgICAgICAgbURpc2FibGVkU2VydmljZXMuY2xlYXIoKTsKICAgICAgICAgaWYgKG1QcmludGVyRGlzY292ZXJ5U2Vzc2lvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICBtUHJpbnRlckRpc2NvdmVyeVNlc3Npb24uZGVzdHJveUxvY2tlZCgpOwogICAgICAgICAgICAgbVByaW50ZXJEaXNjb3ZlcnlTZXNzaW9uID0gbnVsbDsKQEAgLTYwNywxMiArNjM5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChpbnN0YWxsZWRTZXJ2aWNlLmdldEFkdmFuY2VkT3B0aW9uc0FjdGl2aXR5TmFtZSgpKS5wcmludGxuKCk7CiAgICAgICAgIH0KIAotICAgICAgICBwdy5hcHBlbmQocHJlZml4KS5hcHBlbmQodGFiKS5hcHBlbmQoImVuYWJsZWQgc2VydmljZXM6IikucHJpbnRsbigpOwotICAgICAgICBmb3IgKENvbXBvbmVudE5hbWUgZW5hYmxlZFNlcnZpY2UgOiBtRW5hYmxlZFNlcnZpY2VzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZW5hYmxlZFNlcnZpY2VQcmVmaXggPSBwcmVmaXggKyB0YWIgKyB0YWI7Ci0gICAgICAgICAgICBwdy5hcHBlbmQoZW5hYmxlZFNlcnZpY2VQcmVmaXgpLmFwcGVuZCgic2VydmljZToiKS5wcmludGxuKCk7Ci0gICAgICAgICAgICBwdy5hcHBlbmQoZW5hYmxlZFNlcnZpY2VQcmVmaXgpLmFwcGVuZCh0YWIpLmFwcGVuZCgiY29tcG9uZW50TmFtZT0iKQotICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKGVuYWJsZWRTZXJ2aWNlLmZsYXR0ZW5Ub1N0cmluZygpKTsKKyAgICAgICAgcHcuYXBwZW5kKHByZWZpeCkuYXBwZW5kKHRhYikuYXBwZW5kKCJkaXNhYmxlZCBzZXJ2aWNlczoiKS5wcmludGxuKCk7CisgICAgICAgIGZvciAoQ29tcG9uZW50TmFtZSBkaXNhYmxlZFNlcnZpY2UgOiBtRGlzYWJsZWRTZXJ2aWNlcykgeworICAgICAgICAgICAgU3RyaW5nIGRpc2FibGVkU2VydmljZVByZWZpeCA9IHByZWZpeCArIHRhYiArIHRhYjsKKyAgICAgICAgICAgIHB3LmFwcGVuZChkaXNhYmxlZFNlcnZpY2VQcmVmaXgpLmFwcGVuZCgic2VydmljZToiKS5wcmludGxuKCk7CisgICAgICAgICAgICBwdy5hcHBlbmQoZGlzYWJsZWRTZXJ2aWNlUHJlZml4KS5hcHBlbmQodGFiKS5hcHBlbmQoImNvbXBvbmVudE5hbWU9IikKKyAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChkaXNhYmxlZFNlcnZpY2UuZmxhdHRlblRvU3RyaW5nKCkpOwogICAgICAgICAgICAgcHcucHJpbnRsbigpOwogICAgICAgICB9CiAKQEAgLTY0MCw3ICs2NzIsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiByZWFkQ29uZmlndXJhdGlvbkxvY2tlZCgpIHsKICAgICAgICAgYm9vbGVhbiBzb21ldGhpbmdDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIHNvbWV0aGluZ0NoYW5nZWQgfD0gcmVhZEluc3RhbGxlZFByaW50U2VydmljZXNMb2NrZWQoKTsKLSAgICAgICAgc29tZXRoaW5nQ2hhbmdlZCB8PSByZWFkRW5hYmxlZFByaW50U2VydmljZXNMb2NrZWQoKTsKKyAgICAgICAgc29tZXRoaW5nQ2hhbmdlZCB8PSByZWFkRGlzYWJsZWRQcmludFNlcnZpY2VzTG9ja2VkKCk7CiAgICAgICAgIHJldHVybiBzb21ldGhpbmdDaGFuZ2VkOwogICAgIH0KIApAQCAtNjQ4LDggKzY4MCw4IEBACiAgICAgICAgIFNldDxQcmludFNlcnZpY2VJbmZvPiB0ZW1wUHJpbnRTZXJ2aWNlcyA9IG5ldyBIYXNoU2V0PFByaW50U2VydmljZUluZm8+KCk7CiAKICAgICAgICAgTGlzdDxSZXNvbHZlSW5mbz4gaW5zdGFsbGVkU2VydmljZXMgPSBtQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgLnF1ZXJ5SW50ZW50U2VydmljZXNBc1VzZXIobVF1ZXJ5SW50ZW50LCBQYWNrYWdlTWFuYWdlci5HRVRfU0VSVklDRVMKLSAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX01FVEFfREFUQSwgbVVzZXJJZCk7CisgICAgICAgICAgICAgICAgLnF1ZXJ5SW50ZW50U2VydmljZXNBc1VzZXIobVF1ZXJ5SW50ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgR0VUX1NFUlZJQ0VTIHwgR0VUX01FVEFfREFUQSB8IE1BVENIX0RFQlVHX1RSSUFHRURfTUlTU0lORywgbVVzZXJJZCk7CiAKICAgICAgICAgZmluYWwgaW50IGluc3RhbGxlZENvdW50ID0gaW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpOwogICAgICAgICBmb3IgKGludCBpID0gMCwgY291bnQgPSBpbnN0YWxsZWRDb3VudDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTcwMywxMyArNzM1LDUwIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVhZEVuYWJsZWRQcmludFNlcnZpY2VzTG9ja2VkKCkgewotICAgICAgICBTZXQ8Q29tcG9uZW50TmFtZT4gdGVtcEVuYWJsZWRTZXJ2aWNlTmFtZVNldCA9IG5ldyBIYXNoU2V0PENvbXBvbmVudE5hbWU+KCk7Ci0gICAgICAgIHJlYWRQcmludFNlcnZpY2VzRnJvbVNldHRpbmdMb2NrZWQoU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfUFJJTlRfU0VSVklDRVMsCi0gICAgICAgICAgICAgICAgdGVtcEVuYWJsZWRTZXJ2aWNlTmFtZVNldCk7Ci0gICAgICAgIGlmICghdGVtcEVuYWJsZWRTZXJ2aWNlTmFtZVNldC5lcXVhbHMobUVuYWJsZWRTZXJ2aWNlcykpIHsKLSAgICAgICAgICAgIG1FbmFibGVkU2VydmljZXMuY2xlYXIoKTsKLSAgICAgICAgICAgIG1FbmFibGVkU2VydmljZXMuYWRkQWxsKHRlbXBFbmFibGVkU2VydmljZU5hbWVTZXQpOworICAgIC8qKgorICAgICAqIFVwZGF0ZSBwZXJzaXN0ZW50IHN0YXRlIGZyb20gYSBwcmV2aW91cyB2ZXJzaW9uIG9mIEFuZHJvaWQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHVwZ3JhZGVQZXJzaXN0ZW50U3RhdGVJZk5lZWRlZCgpIHsKKyAgICAgICAgU3RyaW5nIGVuYWJsZWRTZXR0aW5nVmFsdWUgPSBTZXR0aW5ncy5TZWN1cmUuZ2V0U3RyaW5nRm9yVXNlcihtQ29udGV4dC5nZXRDb250ZW50UmVzb2x2ZXIoKSwKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUywgbVVzZXJJZCk7CisKKyAgICAgICAgLy8gUHJlIE4gd2Ugc3RvcmUgdGhlIGVuYWJsZWQgc2VydmljZXMsIGluIE4gYW5kIGxhdGVyIHdlIHN0b3JlIHRoZSBkaXNhYmxlZCBzZXJ2aWNlcy4KKyAgICAgICAgLy8gSGVuY2UgaWYgZW5hYmxlZFNldHRpbmdWYWx1ZSBpcyBzdGlsbCBzZXQsIHdlIG5lZWQgdG8gdXBncmFkZS4KKyAgICAgICAgaWYgKGVuYWJsZWRTZXR0aW5nVmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgICAgU2V0PENvbXBvbmVudE5hbWU+IGVuYWJsZWRTZXJ2aWNlTmFtZVNldCA9IG5ldyBIYXNoU2V0PENvbXBvbmVudE5hbWU+KCk7CisgICAgICAgICAgICByZWFkUHJpbnRTZXJ2aWNlc0Zyb21TZXR0aW5nTG9ja2VkKFNldHRpbmdzLlNlY3VyZS5FTkFCTEVEX1BSSU5UX1NFUlZJQ0VTLAorICAgICAgICAgICAgICAgICAgICBlbmFibGVkU2VydmljZU5hbWVTZXQpOworCisgICAgICAgICAgICBBcnJheVNldDxDb21wb25lbnROYW1lPiBkaXNhYmxlZFNlcnZpY2VzID0gbmV3IEFycmF5U2V0PD4oKTsKKyAgICAgICAgICAgIGZpbmFsIGludCBudW1JbnN0YWxsZWRTZXJ2aWNlcyA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUluc3RhbGxlZFNlcnZpY2VzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBDb21wb25lbnROYW1lIHNlcnZpY2VOYW1lID0gbUluc3RhbGxlZFNlcnZpY2VzLmdldChpKS5nZXRDb21wb25lbnROYW1lKCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbmFibGVkU2VydmljZU5hbWVTZXQuY29udGFpbnMoc2VydmljZU5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkU2VydmljZXMuYWRkKHNlcnZpY2VOYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdyaXRlRGlzYWJsZWRQcmludFNlcnZpY2VzTG9ja2VkKGRpc2FibGVkU2VydmljZXMpOworCisgICAgICAgICAgICAvLyBXZSB3b24ndCBuZWVkZWQgRU5BQkxFRF9QUklOVF9TRVJWSUNFUyBhbnltb3JlLCBzZXQgdG8gbnVsbCB0byBwcmV2ZW50IHVwZ3JhZGUgdG8gcnVuCisgICAgICAgICAgICAvLyBhZ2Fpbi4KKyAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmdGb3JVc2VyKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAorICAgICAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUywgbnVsbCwgbVVzZXJJZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZWFkIHRoZSBzZXQgb2YgZGlzYWJsZWQgcHJpbnQgc2VydmljZXMgZnJvbSB0aGUgc2VjdXJlIHNldHRpbmdzLgorICAgICAqCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzdGF0ZSBjaGFuZ2VkLgorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiByZWFkRGlzYWJsZWRQcmludFNlcnZpY2VzTG9ja2VkKCkgeworICAgICAgICBTZXQ8Q29tcG9uZW50TmFtZT4gdGVtcERpc2FibGVkU2VydmljZU5hbWVTZXQgPSBuZXcgSGFzaFNldDxDb21wb25lbnROYW1lPigpOworICAgICAgICByZWFkUHJpbnRTZXJ2aWNlc0Zyb21TZXR0aW5nTG9ja2VkKFNldHRpbmdzLlNlY3VyZS5ESVNBQkxFRF9QUklOVF9TRVJWSUNFUywKKyAgICAgICAgICAgICAgICB0ZW1wRGlzYWJsZWRTZXJ2aWNlTmFtZVNldCk7CisgICAgICAgIGlmICghdGVtcERpc2FibGVkU2VydmljZU5hbWVTZXQuZXF1YWxzKG1EaXNhYmxlZFNlcnZpY2VzKSkgeworICAgICAgICAgICAgbURpc2FibGVkU2VydmljZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIG1EaXNhYmxlZFNlcnZpY2VzLmFkZEFsbCh0ZW1wRGlzYWJsZWRTZXJ2aWNlTmFtZVNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03MzUsNzAgKzgwNCwyOCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIGVuYWJsZVN5c3RlbVByaW50U2VydmljZXNMb2NrZWQoKSB7Ci0gICAgICAgIC8vIExvYWQgZW5hYmxlZCBhbmQgaW5zdGFsbGVkIHNlcnZpY2VzLgotICAgICAgICByZWFkRW5hYmxlZFByaW50U2VydmljZXNMb2NrZWQoKTsKLSAgICAgICAgcmVhZEluc3RhbGxlZFByaW50U2VydmljZXNMb2NrZWQoKTsKLQotICAgICAgICAvLyBMb2FkIHRoZSBzeXN0ZW0gc2VydmljZXMgb25jZSBlbmFibGVkIG9uIGZpcnN0IGJvb3QuCi0gICAgICAgIFNldDxDb21wb25lbnROYW1lPiBlbmFibGVkT25GaXJzdEJvb3QgPSBuZXcgSGFzaFNldDxDb21wb25lbnROYW1lPigpOwotICAgICAgICByZWFkUHJpbnRTZXJ2aWNlc0Zyb21TZXR0aW5nTG9ja2VkKAotICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5FTkFCTEVEX09OX0ZJUlNUX0JPT1RfU1lTVEVNX1BSSU5UX1NFUlZJQ0VTLAotICAgICAgICAgICAgICAgIGVuYWJsZWRPbkZpcnN0Qm9vdCk7Ci0KKyAgICAvKioKKyAgICAgKiBQZXJzaXN0IHRoZSBkaXNhYmxlZCBwcmludCBzZXJ2aWNlcyB0byB0aGUgc2VjdXJlIHNldHRpbmdzLgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3cml0ZURpc2FibGVkUHJpbnRTZXJ2aWNlc0xvY2tlZChTZXQ8Q29tcG9uZW50TmFtZT4gZGlzYWJsZWRTZXJ2aWNlcykgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCi0gICAgICAgIGZpbmFsIGludCBzZXJ2aWNlQ291bnQgPSBtSW5zdGFsbGVkU2VydmljZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZpY2VDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICBTZXJ2aWNlSW5mbyBzZXJ2aWNlSW5mbyA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5nZXQoaSkuZ2V0UmVzb2x2ZUluZm8oKS5zZXJ2aWNlSW5mbzsKLSAgICAgICAgICAgIC8vIEVuYWJsZSBzeXN0ZW0gcHJpbnQgc2VydmljZXMgaWYgd2UgbmV2ZXIgZGlkIHRoYXQgYW5kIGFyZSBub3QgZW5hYmxlZC4KLSAgICAgICAgICAgIGlmICgoc2VydmljZUluZm8uYXBwbGljYXRpb25JbmZvLmZsYWdzICYgQXBwbGljYXRpb25JbmZvLkZMQUdfU1lTVEVNKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBzZXJ2aWNlTmFtZSA9IG5ldyBDb21wb25lbnROYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUluZm8ucGFja2FnZU5hbWUsIHNlcnZpY2VJbmZvLm5hbWUpOwotICAgICAgICAgICAgICAgIGlmICghbUVuYWJsZWRTZXJ2aWNlcy5jb250YWlucyhzZXJ2aWNlTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYmICFlbmFibGVkT25GaXJzdEJvb3QuY29udGFpbnMoc2VydmljZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIjoiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzZXJ2aWNlTmFtZS5mbGF0dGVuVG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBmb3IgKENvbXBvbmVudE5hbWUgY29tcG9uZW50TmFtZSA6IGRpc2FibGVkU2VydmljZXMpIHsKKyAgICAgICAgICAgIGlmIChidWlsZGVyLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKENPTVBPTkVOVF9OQU1FX1NFUEFSQVRPUik7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3RoaW5nIHRvIGJlIGVuYWJsZWQgLSBkb25lLgotICAgICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSA8PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgc2VydmljZXNUb0VuYWJsZSA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgICAgICAvLyBVcGRhdGUgdGhlIGVuYWJsZWQgc2VydmljZXMgc2V0dGluZy4KLSAgICAgICAgU3RyaW5nIGVuYWJsZWRTZXJ2aWNlcyA9IFNldHRpbmdzLlNlY3VyZS5nZXRTdHJpbmdGb3JVc2VyKAotICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLCBTZXR0aW5ncy5TZWN1cmUuRU5BQkxFRF9QUklOVF9TRVJWSUNFUywgbVVzZXJJZCk7Ci0gICAgICAgIGlmIChUZXh0VXRpbHMuaXNFbXB0eShlbmFibGVkU2VydmljZXMpKSB7Ci0gICAgICAgICAgICBlbmFibGVkU2VydmljZXMgPSBzZXJ2aWNlc1RvRW5hYmxlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZW5hYmxlZFNlcnZpY2VzID0gZW5hYmxlZFNlcnZpY2VzICsgIjoiICsgc2VydmljZXNUb0VuYWJsZTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNvbXBvbmVudE5hbWUuZmxhdHRlblRvU2hvcnRTdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLnB1dFN0cmluZ0ZvclVzZXIobUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfUFJJTlRfU0VSVklDRVMsIGVuYWJsZWRTZXJ2aWNlcywgbVVzZXJJZCk7Ci0KLSAgICAgICAgLy8gVXBkYXRlIHRoZSBlbmFibGVkIG9uIGZpcnN0IGJvb3Qgc2VydmljZXMgc2V0dGluZy4KLSAgICAgICAgU3RyaW5nIGVuYWJsZWRPbkZpcnN0Qm9vdFNlcnZpY2VzID0gU2V0dGluZ3MuU2VjdXJlLmdldFN0cmluZ0ZvclVzZXIoCi0gICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0Q29udGVudFJlc29sdmVyKCksCi0gICAgICAgICAgICAgICAgU2V0dGluZ3MuU2VjdXJlLkVOQUJMRURfT05fRklSU1RfQk9PVF9TWVNURU1fUFJJTlRfU0VSVklDRVMsIG1Vc2VySWQpOwotICAgICAgICBpZiAoVGV4dFV0aWxzLmlzRW1wdHkoZW5hYmxlZE9uRmlyc3RCb290U2VydmljZXMpKSB7Ci0gICAgICAgICAgICBlbmFibGVkT25GaXJzdEJvb3RTZXJ2aWNlcyA9IHNlcnZpY2VzVG9FbmFibGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbmFibGVkT25GaXJzdEJvb3RTZXJ2aWNlcyA9IGVuYWJsZWRPbkZpcnN0Qm9vdFNlcnZpY2VzICsgIjoiICsgZW5hYmxlZFNlcnZpY2VzOwotICAgICAgICB9Ci0gICAgICAgIFNldHRpbmdzLlNlY3VyZS5wdXRTdHJpbmdGb3JVc2VyKG1Db250ZXh0LmdldENvbnRlbnRSZXNvbHZlcigpLAotICAgICAgICAgICAgICAgIFNldHRpbmdzLlNlY3VyZS5FTkFCTEVEX09OX0ZJUlNUX0JPT1RfU1lTVEVNX1BSSU5UX1NFUlZJQ0VTLAotICAgICAgICAgICAgICAgIGVuYWJsZWRPbkZpcnN0Qm9vdFNlcnZpY2VzLCBtVXNlcklkKTsKKyAgICAgICAgICAgICAgICBTZXR0aW5ncy5TZWN1cmUuRElTQUJMRURfUFJJTlRfU0VSVklDRVMsIGJ1aWxkZXIudG9TdHJpbmcoKSwgbVVzZXJJZCk7CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIG9uQ29uZmlndXJhdGlvbkNoYW5nZWRMb2NrZWQoKSB7Ci0gICAgICAgIFNldDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWRDb21wb25lbnRzID0gbmV3IEFycmF5U2V0PENvbXBvbmVudE5hbWU+KCk7CisgICAgLyoqCisgICAgICogR2V0IHRoZSB7QGxpbmsgQ29tcG9uZW50TmFtZSBuYW1lc30gb2YgdGhlIGluc3RhbGxlZCBwcmludCBzZXJ2aWNlcworICAgICAqCisgICAgICogQHJldHVybiBUaGUgbmFtZXMgb2YgdGhlIGluc3RhbGxlZCBwcmludCBzZXJ2aWNlcworICAgICAqLworICAgIHByaXZhdGUgQXJyYXlMaXN0PENvbXBvbmVudE5hbWU+IGdldEluc3RhbGxlZENvbXBvbmVudHMoKSB7CisgICAgICAgIEFycmF5TGlzdDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWRDb21wb25lbnRzID0gbmV3IEFycmF5TGlzdDxDb21wb25lbnROYW1lPigpOwogCiAgICAgICAgIGZpbmFsIGludCBpbnN0YWxsZWRDb3VudCA9IG1JbnN0YWxsZWRTZXJ2aWNlcy5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFsbGVkQ291bnQ7IGkrKykgewpAQCAtODA3LDggKzgzNCwzNyBAQAogICAgICAgICAgICAgICAgICAgICByZXNvbHZlSW5mby5zZXJ2aWNlSW5mby5uYW1lKTsKIAogICAgICAgICAgICAgaW5zdGFsbGVkQ29tcG9uZW50cy5hZGQoc2VydmljZU5hbWUpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtRW5hYmxlZFNlcnZpY2VzLmNvbnRhaW5zKHNlcnZpY2VOYW1lKSkgeworICAgICAgICByZXR1cm4gaW5zdGFsbGVkQ29tcG9uZW50czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcnVuZSBwZXJzaXN0ZW50IHN0YXRlIGlmIGEgcHJpbnQgc2VydmljZSB3YXMgdW5pbnN0YWxsZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBwcnVuZVByaW50U2VydmljZXMoKSB7CisgICAgICAgIHN5bmNocm9uaXplZCAobUxvY2spIHsKKyAgICAgICAgICAgIEFycmF5TGlzdDxDb21wb25lbnROYW1lPiBpbnN0YWxsZWRDb21wb25lbnRzID0gZ2V0SW5zdGFsbGVkQ29tcG9uZW50cygpOworCisgICAgICAgICAgICAvLyBSZW1vdmUgdW5uZWNlc3NhcnkgZW50cmllcyBmcm9tIHBlcnNpc3RlbnQgc3RhdGUgImRpc2FibGVkIHNlcnZpY2VzIgorICAgICAgICAgICAgYm9vbGVhbiBkaXNhYmxlZFNlcnZpY2VzVW5pbnN0YWxsZWQgPSBtRGlzYWJsZWRTZXJ2aWNlcy5yZXRhaW5BbGwoaW5zdGFsbGVkQ29tcG9uZW50cyk7CisgICAgICAgICAgICBpZiAoZGlzYWJsZWRTZXJ2aWNlc1VuaW5zdGFsbGVkKSB7CisgICAgICAgICAgICAgICAgd3JpdGVEaXNhYmxlZFByaW50U2VydmljZXNMb2NrZWQobURpc2FibGVkU2VydmljZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZW1vdmUgdW5uZWNlc3NhcnkgZW50cmllcyBmcm9tIHBlcnNpc3RlbnQgc3RhdGUgImFwcHJvdmVkIHNlcnZpY2VzIgorICAgICAgICAgICAgbVNwb29sZXIucHJ1bmVBcHByb3ZlZFByaW50U2VydmljZXMoaW5zdGFsbGVkQ29tcG9uZW50cyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgb25Db25maWd1cmF0aW9uQ2hhbmdlZExvY2tlZCgpIHsKKyAgICAgICAgQXJyYXlMaXN0PENvbXBvbmVudE5hbWU+IGluc3RhbGxlZENvbXBvbmVudHMgPSBnZXRJbnN0YWxsZWRDb21wb25lbnRzKCk7CisKKyAgICAgICAgZmluYWwgaW50IGluc3RhbGxlZENvdW50ID0gaW5zdGFsbGVkQ29tcG9uZW50cy5zaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFsbGVkQ291bnQ7IGkrKykgeworICAgICAgICAgICAgQ29tcG9uZW50TmFtZSBzZXJ2aWNlTmFtZSA9IGluc3RhbGxlZENvbXBvbmVudHMuZ2V0KGkpOworCisgICAgICAgICAgICBpZiAoIW1EaXNhYmxlZFNlcnZpY2VzLmNvbnRhaW5zKHNlcnZpY2VOYW1lKSkgewogICAgICAgICAgICAgICAgIGlmICghbUFjdGl2ZVNlcnZpY2VzLmNvbnRhaW5zS2V5KHNlcnZpY2VOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSA9IG5ldyBSZW1vdGVQcmludFNlcnZpY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUNvbnRleHQsIHNlcnZpY2VOYW1lLCBtVXNlcklkLCBtU3Bvb2xlciwgdGhpcyk7CkBAIC05NzMsMTYgKzEwMjksMTYgQEAKIAogICAgICAgICBwcml2YXRlIGZpbmFsIExpc3Q8UHJpbnRlcklkPiBtU3RhdGVUcmFja2VkUHJpbnRlcnMgPSBuZXcgQXJyYXlMaXN0PFByaW50ZXJJZD4oKTsKIAotICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CisgICAgICAgIHByaXZhdGUgZmluYWwgSGFuZGxlciBtU2Vzc2lvbkhhbmRsZXI7CiAKICAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1Jc0Rlc3Ryb3llZDsKIAogICAgICAgICBwdWJsaWMgUHJpbnRlckRpc2NvdmVyeVNlc3Npb25NZWRpYXRvcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgICAgIG1IYW5kbGVyID0gbmV3IFNlc3Npb25IYW5kbGVyKGNvbnRleHQuZ2V0TWFpbkxvb3BlcigpKTsKKyAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlciA9IG5ldyBTZXNzaW9uSGFuZGxlcihjb250ZXh0LmdldE1haW5Mb29wZXIoKSk7CiAgICAgICAgICAgICAvLyBLaWNrIG9mZiB0aGUgc2Vzc2lvbiBjcmVhdGlvbi4KICAgICAgICAgICAgIExpc3Q8UmVtb3RlUHJpbnRTZXJ2aWNlPiBzZXJ2aWNlcyA9IG5ldyBBcnJheUxpc3Q8UmVtb3RlUHJpbnRTZXJ2aWNlPigKICAgICAgICAgICAgICAgICAgICAgbUFjdGl2ZVNlcnZpY2VzLnZhbHVlcygpKTsKLSAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKKyAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgIC5NU0dfRElTUEFUQ0hfQ1JFQVRFX1BSSU5URVJfRElTQ09WRVJZX1NFU1NJT04sIHNlcnZpY2VzKQogICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgIH0KQEAgLTk5Nyw3ICsxMDUzLDcgQEAKICAgICAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gU29tZUFyZ3Mub2J0YWluKCk7CiAgICAgICAgICAgICAgICAgYXJncy5hcmcxID0gb2JzZXJ2ZXI7CiAgICAgICAgICAgICAgICAgYXJncy5hcmcyID0gcHJpbnRlcnM7Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlci5NU0dfUFJJTlRFUlNfQURERUQsCisgICAgICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIuTVNHX1BSSU5URVJTX0FEREVELAogICAgICAgICAgICAgICAgICAgICAgICAgYXJncykuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNDAsNyArMTA5Niw3IEBACiAgICAgICAgICAgICBTb21lQXJncyBhcmdzID0gU29tZUFyZ3Mub2J0YWluKCk7CiAgICAgICAgICAgICBhcmdzLmFyZzEgPSBzZXJ2aWNlczsKICAgICAgICAgICAgIGFyZ3MuYXJnMiA9IHByaW9yaXR5TGlzdDsKLSAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKKyAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgIC5NU0dfRElTUEFUQ0hfU1RBUlRfUFJJTlRFUl9ESVNDT1ZFUlksIGFyZ3MpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMTA2MCw3ICsxMTE2LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIExpc3Q8UmVtb3RlUHJpbnRTZXJ2aWNlPiBzZXJ2aWNlcyA9IG5ldyBBcnJheUxpc3Q8UmVtb3RlUHJpbnRTZXJ2aWNlPigKICAgICAgICAgICAgICAgICAgICAgbUFjdGl2ZVNlcnZpY2VzLnZhbHVlcygpKTsKLSAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIKKyAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgIC5NU0dfRElTUEFUQ0hfU1RPUF9QUklOVEVSX0RJU0NPVkVSWSwgc2VydmljZXMpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMTA5NCw3ICsxMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgU29tZUFyZ3MgYXJncyA9IFNvbWVBcmdzLm9idGFpbigpOwogICAgICAgICAgICAgICAgICAgICBhcmdzLmFyZzEgPSBzZXJ2aWNlOwogICAgICAgICAgICAgICAgICAgICBhcmdzLmFyZzIgPSB1cGRhdGVMaXN0OwotICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLk1TR19WQUxJREFURV9QUklOVEVSUywgYXJncykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTEyNiw3ICsxMTgyLDcgQEAKICAgICAgICAgICAgIFNvbWVBcmdzIGFyZ3MgPSBTb21lQXJncy5vYnRhaW4oKTsKICAgICAgICAgICAgIGFyZ3MuYXJnMSA9IHNlcnZpY2U7CiAgICAgICAgICAgICBhcmdzLmFyZzIgPSBwcmludGVySWQ7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX1NUQVJUX1BSSU5URVJfU1RBVEVfVFJBQ0tJTkcsIGFyZ3MpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMTE1Myw3ICsxMjA5LDcgQEAKICAgICAgICAgICAgIFNvbWVBcmdzIGFyZ3MgPSBTb21lQXJncy5vYnRhaW4oKTsKICAgICAgICAgICAgIGFyZ3MuYXJnMSA9IHNlcnZpY2U7CiAgICAgICAgICAgICBhcmdzLmFyZzIgPSBwcmludGVySWQ7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX1NUT1BfUFJJTlRFUl9TVEFURV9UUkFDS0lORywgYXJncykKICAgICAgICAgICAgICAgICAgICAgLnNlbmRUb1RhcmdldCgpOwogICAgICAgICB9CkBAIC0xMTgzLDcgKzEyMzksNyBAQAogICAgICAgICAgICAgLy8gVGVsbCB0aGUgc2VydmljZXMgd2UgYXJlIGRvbmUuCiAgICAgICAgICAgICBMaXN0PFJlbW90ZVByaW50U2VydmljZT4gc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PFJlbW90ZVByaW50U2VydmljZT4oCiAgICAgICAgICAgICAgICAgICAgIG1BY3RpdmVTZXJ2aWNlcy52YWx1ZXMoKSk7Ci0gICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAuTVNHX0RJU1BBVENIX0RFU1RST1lfUFJJTlRFUl9ESVNDT1ZFUllfU0VTU0lPTiwgc2VydmljZXMpCiAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgfQpAQCAtMTIwOSw3ICsxMjY1LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYWRkZWRQcmludGVycyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZShTZXNzaW9uSGFuZGxlci5NU0dfRElTUEFUQ0hfUFJJTlRFUlNfQURERUQsCisgICAgICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoU2Vzc2lvbkhhbmRsZXIuTVNHX0RJU1BBVENIX1BSSU5URVJTX0FEREVELAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRQcmludGVycykuc2VuZFRvVGFyZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyMzQsNyArMTI5MCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHJlbW92ZWRQcmludGVySWRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyLk1TR19ESVNQQVRDSF9QUklOVEVSU19SRU1PVkVELAorICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyLk1TR19ESVNQQVRDSF9QUklOVEVSU19SRU1PVkVELAogICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFByaW50ZXJJZHMpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMjUwLDYgKzEzMDYsMzcgQEAKICAgICAgICAgICAgIHNlcnZpY2UuZGVzdHJveSgpOwogICAgICAgICB9CiAKKyAgICAgICAgLyoqCisgICAgICAgICAqIEhhbmRsZSB0aGF0IGEgY3VzdG9tIGljb24gZm9yIGEgcHJpbnRlciB3YXMgbG9hZGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIGluY3JlbWVudHMgdGhlIGljb24gZ2VuZXJhdGlvbiBhbmQgYWRkcyB0aGUgcHJpbnRlciBhZ2FpbiB3aGljaCB0cmlnZ2VycyBhbiB1cGRhdGUKKyAgICAgICAgICogaW4gYWxsIHVzZXJzIG9mIHRoZSBjdXJyZW50bHkga25vd24gcHJpbnRlcnMuCisgICAgICAgICAqCisgICAgICAgICAqIEBwYXJhbSBwcmludGVySWQgdGhlIGlkIG9mIHRoZSBwcmludGVyIHRoZSBpY29uIGJlbG9uZ3MgdG8KKyAgICAgICAgICogQHNlZSBhbmRyb2lkLnByaW50LlByaW50ZXJJbmZvLkJ1aWxkZXIjc2V0SGFzQ3VzdG9tUHJpbnRlckljb24oKQorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHZvaWQgb25DdXN0b21QcmludGVySWNvbkxvYWRlZExvY2tlZChQcmludGVySWQgcHJpbnRlcklkKSB7CisgICAgICAgICAgICBpZiAoREVCVUcpIHsKKyAgICAgICAgICAgICAgICBMb2cuaShMT0dfVEFHLCAib25DdXN0b21QcmludGVySWNvbkxvYWRlZExvY2tlZCgpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobUlzRGVzdHJveWVkKSB7CisgICAgICAgICAgICAgICAgTG9nLncoTE9HX1RBRywgIk5vdCB1cGRhdGluZyBwcmludGVyIC0gc2Vzc2lvbiBkZXN0cm95ZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFByaW50ZXJJbmZvIHByaW50ZXIgPSBtUHJpbnRlcnMuZ2V0KHByaW50ZXJJZCk7CisgICAgICAgICAgICBpZiAocHJpbnRlciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgUHJpbnRlckluZm8gbmV3UHJpbnRlciA9IChuZXcgUHJpbnRlckluZm8uQnVpbGRlcihwcmludGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5pbmNDdXN0b21QcmludGVySWNvbkdlbigpLmJ1aWxkKCk7CisgICAgICAgICAgICAgICAgbVByaW50ZXJzLnB1dChwcmludGVySWQsIG5ld1ByaW50ZXIpOworCisgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFByaW50ZXJJbmZvPiBhZGRlZFByaW50ZXJzID0gbmV3IEFycmF5TGlzdDw+KDEpOworICAgICAgICAgICAgICAgIGFkZGVkUHJpbnRlcnMuYWRkKG5ld1ByaW50ZXIpOworICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyLk1TR19ESVNQQVRDSF9QUklOVEVSU19BRERFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkUHJpbnRlcnMpLnNlbmRUb1RhcmdldCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgcHVibGljIHZvaWQgb25TZXJ2aWNlRGllZExvY2tlZChSZW1vdGVQcmludFNlcnZpY2Ugc2VydmljZSkgewogICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSByZXBvcnRlZCBieSB0aGF0IHNlcnZpY2UuCiAgICAgICAgICAgICByZW1vdmVQcmludGVyc0ZvclNlcnZpY2VMb2NrZWQoc2VydmljZS5nZXRDb21wb25lbnROYW1lKCkpOwpAQCAtMTI2MSwxMiArMTM0OCwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHNlcnZpY2UgdG8gY3JlYXRlIGEgc2Vzc2lvbi4KLSAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCisgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgICAgU2Vzc2lvbkhhbmRsZXIuTVNHX0NSRUFURV9QUklOVEVSX0RJU0NPVkVSWV9TRVNTSU9OLAogICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIC8vIFN0YXJ0IHByaW50ZXIgZGlzY292ZXJ5IGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgIGlmICghbVN0YXJ0ZWRQcmludGVyRGlzY292ZXJ5VG9rZW5zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIG1IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCisgICAgICAgICAgICAgICAgbVNlc3Npb25IYW5kbGVyLm9idGFpbk1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgICAgICAgICBTZXNzaW9uSGFuZGxlci5NU0dfU1RBUlRfUFJJTlRFUl9ESVNDT1ZFUlksCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlKS5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgIH0KQEAgLTEyNzgsNyArMTM2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIFNvbWVBcmdzIGFyZ3MgPSBTb21lQXJncy5vYnRhaW4oKTsKICAgICAgICAgICAgICAgICAgICAgYXJncy5hcmcxID0gc2VydmljZTsKICAgICAgICAgICAgICAgICAgICAgYXJncy5hcmcyID0gcHJpbnRlcklkOwotICAgICAgICAgICAgICAgICAgICBtSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCisgICAgICAgICAgICAgICAgICAgIG1TZXNzaW9uSGFuZGxlci5vYnRhaW5NZXNzYWdlKFNlc3Npb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLk1TR19TVEFSVF9QUklOVEVSX1NUQVRFX1RSQUNLSU5HLCBhcmdzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZW5kVG9UYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMzQ4LDcgKzE0MzUsNyBAQAogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVtb3ZlZFByaW50ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIG1QcmludGVycy5yZW1vdmUocmVtb3ZlZFByaW50ZXJJZHMuZ2V0KGkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbUhhbmRsZXIub2J0YWluTWVzc2FnZSgKKyAgICAgICAgICAgICAgICBtU2Vzc2lvbkhhbmRsZXIub2J0YWluTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgICAgICAgIFNlc3Npb25IYW5kbGVyLk1TR19ESVNQQVRDSF9QUklOVEVSU19SRU1PVkVELAogICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZFByaW50ZXJJZHMpLnNlbmRUb1RhcmdldCgpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL0Jyb2FkY2FzdEludGVyY2VwdGluZ0NvbnRleHQuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9Ccm9hZGNhc3RJbnRlcmNlcHRpbmdDb250ZXh0LmphdmEKaW5kZXggNzU3ZjFjNi4uMTM2NTdhYiAxMDA2NDQKLS0tIGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL0Jyb2FkY2FzdEludGVyY2VwdGluZ0NvbnRleHQuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvQnJvYWRjYXN0SW50ZXJjZXB0aW5nQ29udGV4dC5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHRXcmFwcGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOwogCkBAIC0xNjUsNiArMTY2LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgIHNlbmRCcm9hZGNhc3QoaW50ZW50KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCByZW1vdmVTdGlja3lCcm9hZGNhc3QoSW50ZW50IGludGVudCkgewogICAgICAgICAvLyBpZ25vcmVkCiAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL0Nvbm5lY3Rpdml0eVNlcnZpY2VUZXN0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZVRlc3QuamF2YQppbmRleCAyN2RlYjcyLi4yN2Q1MjA3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZVRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvQ29ubmVjdGl2aXR5U2VydmljZVRlc3QuamF2YQpAQCAtNTksNiArNTksNyBAQAogaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZVF1ZXVlLklkbGVIYW5kbGVyOwogaW1wb3J0IGFuZHJvaWQudGVzdC5BbmRyb2lkVGVzdENhc2U7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKK2ltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZ1ByaW50ZXI7CiAKQEAgLTE1MDQsNCArMTUwNSwxMCBAQAogICAgICAgICBrYTMuc3RvcCgpOwogICAgICAgICBjYWxsYmFjazMuZXhwZWN0U3RvcHBlZCgpOwogICAgIH0KKworICAgIEBTbWFsbFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2FwdGl2ZVBvcnRhbFNlcnZlclVybCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgdXJsID0gbUNtLmdldENhcHRpdmVQb3J0YWxTZXJ2ZXJVcmwoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vY29ubmVjdGl2aXR5Y2hlY2suZ3N0YXRpYy5jb20vZ2VuZXJhdGVfMjA0IiwgdXJsKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvTmV0d29ya1N0YXRzU2VydmljZVRlc3QuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9OZXR3b3JrU3RhdHNTZXJ2aWNlVGVzdC5qYXZhCmluZGV4IGMxMmY5NzguLjIwNGJjMmUgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9OZXR3b3JrU3RhdHNTZXJ2aWNlVGVzdC5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9OZXR3b3JrU3RhdHNTZXJ2aWNlVGVzdC5qYXZhCkBAIC0xOCw3ICsxOCw2IEBACiAKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5jb250ZW50LkludGVudC5BQ1RJT05fVUlEX1JFTU9WRUQ7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQuY29udGVudC5JbnRlbnQuRVhUUkFfVUlEOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT047CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEU7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9XSUZJOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lNQVg7CkBAIC00OSw2ICs0OCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5lYXN5bW9jay5FYXN5TW9jay5pc0E7CiAKIGltcG9ydCBhbmRyb2lkLmFwcC5BbGFybU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuSUFsYXJtTGlzdGVuZXI7CiBpbXBvcnQgYW5kcm9pZC5hcHAuSUFsYXJtTWFuYWdlcjsKIGltcG9ydCBhbmRyb2lkLmFwcC5QZW5kaW5nSW50ZW50OwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CkBAIC03MCw2ICs3MCw3IEBACiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlN1cHByZXNzOwogaW1wb3J0IGFuZHJvaWQudXRpbC5UcnVzdGVkVGltZTsKIAoraW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLm5ldC5WcG5JbmZvOwogaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5uZXQuTmV0d29ya1N0YXRzU2VydmljZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0Lk5ldHdvcmtTdGF0c1NlcnZpY2UuTmV0d29ya1N0YXRzU2V0dGluZ3M7CiBpbXBvcnQgY29tLmFuZHJvaWQuc2VydmVyLm5ldC5OZXR3b3JrU3RhdHNTZXJ2aWNlLk5ldHdvcmtTdGF0c1NldHRpbmdzLkNvbmZpZzsKQEAgLTgzLDYgKzg0LDkgQEAKIAogLyoqCiAgKiBUZXN0cyBmb3Ige0BsaW5rIE5ldHdvcmtTdGF0c1NlcnZpY2V9LgorICoKKyAqIFRPRE86IFRoaXMgdGVzdCBpcyByZWFsbHkgYnJpdHRsZSwgbGFyZ2VseSBkdWUgdG8gb3Zlcmx5LXN0cmljdCB1c2Ugb2YgRWFzeW1vY2suCisgKiBSZXdyaXRlIHcvIE1vY2tpdG8uCiAgKi8KIEBMYXJnZVRlc3QKIHB1YmxpYyBjbGFzcyBOZXR3b3JrU3RhdHNTZXJ2aWNlVGVzdCBleHRlbmRzIEFuZHJvaWRUZXN0Q2FzZSB7CkBAIC0xNDMsNyArMTQ3LDYgQEAKIAogICAgICAgICBleHBlY3RDdXJyZW50VGltZSgpOwogICAgICAgICBleHBlY3REZWZhdWx0U2V0dGluZ3MoKTsKLSAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdFN5c3RlbVJlYWR5KCk7CiAKQEAgLTE5MCw5ICsxOTMsMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogCiAgICAgICAgIC8vIHZlcmlmeSBzZXJ2aWNlIGhhcyBlbXB0eSBoaXN0b3J5IGZvciB3aWZpCiAgICAgICAgIGFzc2VydE5ldHdvcmtUb3RhbChzVGVtcGxhdGVXaWZpLCAwTCwgMEwsIDBMLCAwTCwgMCk7CkBAIC0yNDQsOSArMjQ4LDEwIEBACiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnkoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNVaWREZXRhaWwoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNQb2xsKCk7CisgICAgICAgIGV4cGVjdEJhbmR3aWR0aENvbnRyb2xDaGVjaygpOwogCiAgICAgICAgIHJlcGxheSgpOwotICAgICAgICBtU2VydmljZUNvbnRleHQuc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KENPTk5FQ1RJVklUWV9BQ1RJT04pKTsKKyAgICAgICAgbVNlcnZpY2UuZm9yY2VVcGRhdGVJZmFjZXMoKTsKIAogICAgICAgICAvLyB2ZXJpZnkgc2VydmljZSBoYXMgZW1wdHkgaGlzdG9yeSBmb3Igd2lmaQogICAgICAgICBhc3NlcnROZXR3b3JrVG90YWwoc1RlbXBsYXRlV2lmaSwgMEwsIDBMLCAwTCwgMEwsIDApOwpAQCAtMjk1LDcgKzMwMCw2IEBACiAgICAgICAgIC8vIGJvb3QgdGhyb3VnaCBzZXJ2aWNlUmVhZHkoKSBhZ2FpbgogICAgICAgICBleHBlY3RDdXJyZW50VGltZSgpOwogICAgICAgICBleHBlY3REZWZhdWx0U2V0dGluZ3MoKTsKLSAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdFN5c3RlbVJlYWR5KCk7CiAKQEAgLTMzNSw5ICszMzksMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogICAgICAgICB2ZXJpZnlBbmRSZXNldCgpOwogCiAgICAgICAgIC8vIG1vZGlmeSBzb21lIG51bWJlciBvbiB3aWZpLCBhbmQgdHJpZ2dlciBwb2xsIGV2ZW50CkBAIC0zODcsOSArMzkyLDEwIEBACiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnkoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNVaWREZXRhaWwoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNQb2xsKCk7CisgICAgICAgIGV4cGVjdEJhbmR3aWR0aENvbnRyb2xDaGVjaygpOwogCiAgICAgICAgIHJlcGxheSgpOwotICAgICAgICBtU2VydmljZUNvbnRleHQuc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KENPTk5FQ1RJVklUWV9BQ1RJT04pKTsKKyAgICAgICAgbVNlcnZpY2UuZm9yY2VVcGRhdGVJZmFjZXMoKTsKICAgICAgICAgdmVyaWZ5QW5kUmVzZXQoKTsKIAogICAgICAgICAvLyBjcmVhdGUgc29tZSB0cmFmZmljIG9uIGZpcnN0IG5ldHdvcmsKQEAgLTQyOSw5ICs0MzUsMTAgQEAKICAgICAgICAgICAgICAgICAuYWRkVmFsdWVzKFRFU1RfSUZBQ0UsIFVJRF9SRUQsIFNFVF9ERUZBVUxULCAweEYwMEQsIDUxMkwsIDRMLCA1MTJMLCA0TCwgMEwpCiAgICAgICAgICAgICAgICAgLmFkZFZhbHVlcyhURVNUX0lGQUNFLCBVSURfQkxVRSwgU0VUX0RFRkFVTFQsIFRBR19OT05FLCA1MTJMLCA0TCwgMEwsIDBMLCAwTCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNQb2xsKCk7CisgICAgICAgIGV4cGVjdEJhbmR3aWR0aENvbnRyb2xDaGVjaygpOwogCiAgICAgICAgIHJlcGxheSgpOwotICAgICAgICBtU2VydmljZUNvbnRleHQuc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KENPTk5FQ1RJVklUWV9BQ1RJT04pKTsKKyAgICAgICAgbVNlcnZpY2UuZm9yY2VVcGRhdGVJZmFjZXMoKTsKICAgICAgICAgbVNlcnZpY2VDb250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChBQ1RJT05fTkVUV09SS19TVEFUU19QT0xMKSk7CiAgICAgICAgIHZlcmlmeUFuZFJlc2V0KCk7CiAKQEAgLTQ3NSw5ICs0ODIsMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogICAgICAgICB2ZXJpZnlBbmRSZXNldCgpOwogCiAgICAgICAgIC8vIGNyZWF0ZSBzb21lIHRyYWZmaWMKQEAgLTU0NCw5ICs1NTIsMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogICAgICAgICB2ZXJpZnlBbmRSZXNldCgpOwogCiAgICAgICAgIC8vIGNyZWF0ZSBzb21lIHRyYWZmaWMKQEAgLTU3OCw5ICs1ODcsMTAgQEAKICAgICAgICAgICAgICAgICAuYWRkVmFsdWVzKFRFU1RfSUZBQ0UsIFVJRF9SRUQsIFNFVF9ERUZBVUxULCBUQUdfTk9ORSwgMTAyNEwsIDhMLCAxMDI0TCwgOEwsIDBMKQogICAgICAgICAgICAgICAgIC5hZGRWYWx1ZXMoVEVTVF9JRkFDRSwgVUlEX1JFRCwgU0VUX0RFRkFVTFQsIDB4RjAwRCwgNTEyTCwgNEwsIDUxMkwsIDRMLCAwTCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNQb2xsKCk7CisgICAgICAgIGV4cGVjdEJhbmR3aWR0aENvbnRyb2xDaGVjaygpOwogCiAgICAgICAgIHJlcGxheSgpOwotICAgICAgICBtU2VydmljZUNvbnRleHQuc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KENPTk5FQ1RJVklUWV9BQ1RJT04pKTsKKyAgICAgICAgbVNlcnZpY2UuZm9yY2VVcGRhdGVJZmFjZXMoKTsKICAgICAgICAgbVNlcnZpY2VDb250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChBQ1RJT05fTkVUV09SS19TVEFUU19QT0xMKSk7CiAgICAgICAgIHZlcmlmeUFuZFJlc2V0KCk7CiAKQEAgLTYxNSw5ICs2MjUsMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogICAgICAgICB2ZXJpZnlBbmRSZXNldCgpOwogCiAgICAgICAgIC8vIGNyZWF0ZSBzb21lIHRyYWZmaWMgZm9yIHR3byBhcHBzCkBAIC02ODEsOSArNjkyLDEwIEBACiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnkoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNVaWREZXRhaWwoYnVpbGRFbXB0eVN0YXRzKCkpOwogICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNQb2xsKCk7CisgICAgICAgIGV4cGVjdEJhbmR3aWR0aENvbnRyb2xDaGVjaygpOwogCiAgICAgICAgIHJlcGxheSgpOwotICAgICAgICBtU2VydmljZUNvbnRleHQuc2VuZEJyb2FkY2FzdChuZXcgSW50ZW50KENPTk5FQ1RJVklUWV9BQ1RJT04pKTsKKyAgICAgICAgbVNlcnZpY2UuZm9yY2VVcGRhdGVJZmFjZXMoKTsKICAgICAgICAgdmVyaWZ5QW5kUmVzZXQoKTsKIAogICAgICAgICAvLyBjcmVhdGUgc29tZSBpbml0aWFsIHRyYWZmaWMKQEAgLTc0Niw5ICs3NTgsMTAgQEAKICAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAKICAgICAgICAgcmVwbGF5KCk7Ci0gICAgICAgIG1TZXJ2aWNlQ29udGV4dC5zZW5kQnJvYWRjYXN0KG5ldyBJbnRlbnQoQ09OTkVDVElWSVRZX0FDVElPTikpOworICAgICAgICBtU2VydmljZS5mb3JjZVVwZGF0ZUlmYWNlcygpOwogICAgICAgICB2ZXJpZnlBbmRSZXNldCgpOwogCiAgICAgICAgIC8vIGNyZWF0ZSBzb21lIHRldGhlcmluZyB0cmFmZmljCkBAIC03NzgsNjUgKzc5MSw2IEBACiAKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVwb3J0WHRPdmVyRGV2KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIGJyaW5nIG1vYmlsZSBuZXR3b3JrIG9ubGluZQotICAgICAgICBleHBlY3RDdXJyZW50VGltZSgpOwotICAgICAgICBleHBlY3REZWZhdWx0U2V0dGluZ3MoKTsKLSAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRlKGJ1aWxkTW9iaWxlM2dTdGF0ZShJTVNJXzEpKTsKLSAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeShidWlsZEVtcHR5U3RhdHMoKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKLQotICAgICAgICByZXBsYXkoKTsKLSAgICAgICAgbVNlcnZpY2VDb250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChDT05ORUNUSVZJVFlfQUNUSU9OKSk7Ci0gICAgICAgIHZlcmlmeUFuZFJlc2V0KCk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIHNvbWUgdHJhZmZpYywgYnV0IG9ubHkgZm9yIERFViwgYW5kIGFjcm9zcyAxLjUgYnVja2V0cwotICAgICAgICBpbmNyZW1lbnRDdXJyZW50VGltZSg5MCAqIE1JTlVURV9JTl9NSUxMSVMpOwotICAgICAgICBleHBlY3RDdXJyZW50VGltZSgpOwotICAgICAgICBleHBlY3REZWZhdWx0U2V0dGluZ3MoKTsKLSAgICAgICAgZXhwZWN0TmV0d29ya1N0YXRzU3VtbWFyeURldihuZXcgTmV0d29ya1N0YXRzKGdldEVsYXBzZWRSZWFsdGltZSgpLCAxKQotICAgICAgICAgICAgICAgIC5hZGRJZmFjZVZhbHVlcyhURVNUX0lGQUNFLCA2MDAwTCwgNjBMLCAzMDAwTCwgMzBMKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnlYdChidWlsZEVtcHR5U3RhdHMoKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKLQotICAgICAgICByZXBsYXkoKTsKLSAgICAgICAgbVNlcnZpY2VDb250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChBQ1RJT05fTkVUV09SS19TVEFUU19QT0xMKSk7Ci0KLSAgICAgICAgLy8gdmVyaWZ5IHNlcnZpY2UgcmVjb3JkZWQgaGlzdG9yeToKLSAgICAgICAgLy8gNDAwMChkZXYpICsgMjAwMChkZXYpCi0gICAgICAgIGFzc2VydE5ldHdvcmtUb3RhbChzVGVtcGxhdGVJbXNpMSwgNjAwMEwsIDYwTCwgMzAwMEwsIDMwTCwgMCk7Ci0gICAgICAgIHZlcmlmeUFuZFJlc2V0KCk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIHRyYWZmaWMgb24gYm90aCBERVYgYW5kIFhULCBhY3Jvc3MgdHdvIGJ1Y2tldHMKLSAgICAgICAgaW5jcmVtZW50Q3VycmVudFRpbWUoMiAqIEhPVVJfSU5fTUlMTElTKTsKLSAgICAgICAgZXhwZWN0Q3VycmVudFRpbWUoKTsKLSAgICAgICAgZXhwZWN0RGVmYXVsdFNldHRpbmdzKCk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnlEZXYobmV3IE5ldHdvcmtTdGF0cyhnZXRFbGFwc2VkUmVhbHRpbWUoKSwgMSkKLSAgICAgICAgICAgICAgICAuYWRkSWZhY2VWYWx1ZXMoVEVTVF9JRkFDRSwgNjAwNEwsIDY0TCwgMzAwNEwsIDM0TCkpOwotICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNTdW1tYXJ5WHQobmV3IE5ldHdvcmtTdGF0cyhnZXRFbGFwc2VkUmVhbHRpbWUoKSwgMSkKLSAgICAgICAgICAgICAgICAuYWRkSWZhY2VWYWx1ZXMoVEVTVF9JRkFDRSwgMTAyNDBMLCAwTCwgMEwsIDBMKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1VpZERldGFpbChidWlsZEVtcHR5U3RhdHMoKSk7Ci0gICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1BvbGwoKTsKLQotICAgICAgICByZXBsYXkoKTsKLSAgICAgICAgbVNlcnZpY2VDb250ZXh0LnNlbmRCcm9hZGNhc3QobmV3IEludGVudChBQ1RJT05fTkVUV09SS19TVEFUU19QT0xMKSk7Ci0KLSAgICAgICAgLy8gdmVyaWZ5IHRoYXQgd2Ugc3dpdGNoaW5nIHJlcG9ydGluZyBhdCB0aGUgZmlyc3QgYXRvbWljIFhUIGJ1Y2tldCwKLSAgICAgICAgLy8gd2hpY2ggc2hvdWxkIGdpdmUgdXM6Ci0gICAgICAgIC8vIDQwMDAoZGV2KSArIDIwMDAoZGV2KSArIDEoZGV2KSArIDUxMjAoeHQpICsgMjU2MCh4dCkKLSAgICAgICAgYXNzZXJ0TmV0d29ya1RvdGFsKHNUZW1wbGF0ZUltc2kxLCAxMzY4MUwsIDYxTCwgMzAwMUwsIDMxTCwgMCk7Ci0KLSAgICAgICAgLy8gYWxzbyB0ZXN0IHB1cmUtREVWIGFuZCBwdXJlLVhUIHJhbmdlcwotICAgICAgICBhc3NlcnROZXR3b3JrVG90YWwoc1RlbXBsYXRlSW1zaTEsIHN0YXJ0VGltZU1pbGxpcygpLAotICAgICAgICAgICAgICAgIHN0YXJ0VGltZU1pbGxpcygpICsgMiAqIEhPVVJfSU5fTUlMTElTLCA2MDAxTCwgNjFMLCAzMDAxTCwgMzFMLCAwKTsKLSAgICAgICAgYXNzZXJ0TmV0d29ya1RvdGFsKHNUZW1wbGF0ZUltc2kxLCBzdGFydFRpbWVNaWxsaXMoKSArIDIgKiBIT1VSX0lOX01JTExJUywKLSAgICAgICAgICAgICAgICBzdGFydFRpbWVNaWxsaXMoKSArIDQgKiBIT1VSX0lOX01JTExJUywgNzY4MEwsIDBMLCAwTCwgMEwsIDApOwotCi0gICAgICAgIHZlcmlmeUFuZFJlc2V0KCk7Ci0gICAgfQotCiAgICAgcHJpdmF0ZSB2b2lkIGFzc2VydE5ldHdvcmtUb3RhbChOZXR3b3JrVGVtcGxhdGUgdGVtcGxhdGUsIGxvbmcgcnhCeXRlcywgbG9uZyByeFBhY2tldHMsCiAgICAgICAgICAgICBsb25nIHR4Qnl0ZXMsIGxvbmcgdHhQYWNrZXRzLCBpbnQgb3BlcmF0aW9ucykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGFzc2VydE5ldHdvcmtUb3RhbCh0ZW1wbGF0ZSwgTG9uZy5NSU5fVkFMVUUsIExvbmcuTUFYX1ZBTFVFLCByeEJ5dGVzLCByeFBhY2tldHMsIHR4Qnl0ZXMsCkBAIC04NzYsMTkgKzgzMCwyMSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBleHBlY3RTeXN0ZW1SZWFkeSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtQWxhcm1NYW5hZ2VyLnJlbW92ZShpc0EoUGVuZGluZ0ludGVudC5jbGFzcyksIG51bGwpOworICAgICAgICBtQWxhcm1NYW5hZ2VyLnJlbW92ZShpc0EoUGVuZGluZ0ludGVudC5jbGFzcyksIEVhc3lNb2NrLjxJQWxhcm1MaXN0ZW5lcj5pc051bGwoKSk7CiAgICAgICAgIGV4cGVjdExhc3RDYWxsKCkuYW55VGltZXMoKTsKIAotICAgICAgICBtQWxhcm1NYW5hZ2VyLnNldChnZXRDb250ZXh0KCkuZ2V0UGFja2FnZU5hbWUoKSwKKyAgICAgICAgbUFsYXJtTWFuYWdlci5zZXQoZXEoZ2V0Q29udGV4dCgpLmdldFBhY2thZ2VOYW1lKCkpLAogICAgICAgICAgICAgICAgIGVxKEFsYXJtTWFuYWdlci5FTEFQU0VEX1JFQUxUSU1FKSwgYW55TG9uZygpLCBhbnlMb25nKCksIGFueUxvbmcoKSwKLSAgICAgICAgICAgICAgICBhbnlJbnQoKSwgaXNBKFBlbmRpbmdJbnRlbnQuY2xhc3MpLCBudWxsLCBudWxsLCBpc0EoV29ya1NvdXJjZS5jbGFzcyksCi0gICAgICAgICAgICAgICAgaXNBKEFsYXJtTWFuYWdlci5BbGFybUNsb2NrSW5mby5jbGFzcykpOwotICAgICAgICBleHBlY3RMYXN0Q2FsbCgpLmF0TGVhc3RPbmNlKCk7CisgICAgICAgICAgICAgICAgYW55SW50KCksIGlzQShQZW5kaW5nSW50ZW50LmNsYXNzKSwgRWFzeU1vY2suPElBbGFybUxpc3RlbmVyPmlzTnVsbCgpLAorICAgICAgICAgICAgICAgIEVhc3lNb2NrLjxTdHJpbmc+aXNOdWxsKCksIEVhc3lNb2NrLjxXb3JrU291cmNlPmlzTnVsbCgpLAorICAgICAgICAgICAgICAgIEVhc3lNb2NrLjxBbGFybU1hbmFnZXIuQWxhcm1DbG9ja0luZm8+aXNOdWxsKCkpOworICAgICAgICBleHBlY3RMYXN0Q2FsbCgpLmFueVRpbWVzKCk7CiAKICAgICAgICAgbU5ldE1hbmFnZXIuc2V0R2xvYmFsQWxlcnQoYW55TG9uZygpKTsKICAgICAgICAgZXhwZWN0TGFzdENhbGwoKS5hdExlYXN0T25jZSgpOwogCi0gICAgICAgIGV4cGVjdChtTmV0TWFuYWdlci5pc0JhbmR3aWR0aENvbnRyb2xFbmFibGVkKCkpLmFuZFJldHVybih0cnVlKS5hdExlYXN0T25jZSgpOworICAgICAgICBleHBlY3ROZXR3b3JrU3RhdHNTdW1tYXJ5KGJ1aWxkRW1wdHlTdGF0cygpKTsKKyAgICAgICAgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGV4cGVjdE5ldHdvcmtTdGF0ZShOZXR3b3JrU3RhdGUuLi4gc3RhdGUpIHRocm93cyBFeGNlcHRpb24gewpAQCAtODk5LDYgKzg1NSw4IEBACiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnkoTmV0d29ya1N0YXRzIHN1bW1hcnkpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBleHBlY3QobUNvbm5NYW5hZ2VyLmdldEFsbFZwbkluZm8oKSkuYW5kUmV0dXJuKG5ldyBWcG5JbmZvWzBdKS5hdExlYXN0T25jZSgpOworCiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnlEZXYoc3VtbWFyeSk7CiAgICAgICAgIGV4cGVjdE5ldHdvcmtTdGF0c1N1bW1hcnlYdChzdW1tYXJ5KTsKICAgICB9CkBAIC05NjEsNiArOTE5LDEwIEBACiAgICAgICAgIGV4cGVjdExhc3RDYWxsKCkuYW55VGltZXMoKTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgZXhwZWN0QmFuZHdpZHRoQ29udHJvbENoZWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGV4cGVjdChtTmV0TWFuYWdlci5pc0JhbmR3aWR0aENvbnRyb2xFbmFibGVkKCkpLmFuZFJldHVybih0cnVlKS5hdExlYXN0T25jZSgpOworICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCBhc3NlcnRTdGF0c0ZpbGVzRXhpc3QoYm9vbGVhbiBleGlzdCkgewogICAgICAgICBmaW5hbCBGaWxlIGJhc2VQYXRoID0gbmV3IEZpbGUobVN0YXRzRGlyLCAibmV0c3RhdHMiKTsKICAgICAgICAgaWYgKGV4aXN0KSB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJTZXJ2aWNlVGVzdGFibGUuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2VUZXN0YWJsZS5qYXZhCmluZGV4IDQzNWI2MDIuLjkwZTRhY2YgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2VUZXN0YWJsZS5qYXZhCisrKyBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclNlcnZpY2VUZXN0YWJsZS5qYXZhCkBAIC0yMDgsNiArMjA4LDExIEBACiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgdm9pZCBwb3dlck1hbmFnZXJSZWJvb3QoU3RyaW5nIHJlYXNvbikgeworICAgICAgICAgICAgY29udGV4dC5wb3dlck1hbmFnZXIucmVib290KHJlYXNvbik7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgYm9vbGVhbiBzeXN0ZW1Qcm9wZXJ0aWVzR2V0Qm9vbGVhbihTdHJpbmcga2V5LCBib29sZWFuIGRlZikgewogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuc3lzdGVtUHJvcGVydGllcy5nZXRCb29sZWFuKGtleSwgZGVmKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyVGVzdC5qYXZhIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EZXZpY2VQb2xpY3lNYW5hZ2VyVGVzdC5qYXZhCmluZGV4IDU2NWVmNGIuLjY3MjA1OGIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRGV2aWNlUG9saWN5TWFuYWdlclRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RldmljZVBvbGljeU1hbmFnZXJUZXN0LmphdmEKQEAgLTc1OCw3ICs3NTgsNyBAQAogICAgICAgICB3aGVuKG1Db250ZXh0LnVzZXJNYW5hZ2VyLmdldFVzZXJSZXN0cmljdGlvbnMoKSkudGhlblJldHVybihuZXcgQnVuZGxlKCkpOwogCiAgICAgICAgIC8vIE5vdyBjYWxsIGNsZWFyLgotICAgICAgICBkb1JldHVybihEcG1Nb2NrQ29udGV4dC5DQUxMRVJfU1lTVEVNX1VTRVJfVUlEKS53aGVuKG1Db250ZXh0LnBhY2thZ2VNYW5hZ2VyKS5nZXRQYWNrYWdlVWlkKAorICAgICAgICBkb1JldHVybihEcG1Nb2NrQ29udGV4dC5DQUxMRVJfU1lTVEVNX1VTRVJfVUlEKS53aGVuKG1Db250ZXh0LnBhY2thZ2VNYW5hZ2VyKS5nZXRQYWNrYWdlVWlkQXNVc2VyKAogICAgICAgICAgICAgICAgIGVxKGFkbWluMS5nZXRQYWNrYWdlTmFtZSgpKSwKICAgICAgICAgICAgICAgICBhbnlJbnQoKSk7CiAgICAgICAgIGRwbS5jbGVhckRldmljZU93bmVyQXBwKGFkbWluMS5nZXRQYWNrYWdlTmFtZSgpKTsKQEAgLTc5Nyw3ICs3OTcsNyBAQAogICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQ7CiAKICAgICAgICAgLy8gTm93IGNhbGwgY2xlYXIuCi0gICAgICAgIGRvUmV0dXJuKERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWQoCisgICAgICAgIGRvUmV0dXJuKERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWRBc1VzZXIoCiAgICAgICAgICAgICAgICAgZXEoYWRtaW4xLmdldFBhY2thZ2VOYW1lKCkpLAogICAgICAgICAgICAgICAgIGFueUludCgpKTsKICAgICAgICAgdHJ5IHsKQEAgLTk0NCw2ICs5NDQsODggQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIGRwbS5nZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhhZG1pbjEsICJwa2cyIikuc2l6ZSgpKTsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ0FwcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzZXRBc1Byb2ZpbGVPd25lcihhZG1pbjEpOworCisgICAgICAgIGZpbmFsIFN0cmluZyBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyUGFja2FnZSA9ICJjb20uZ29vZ2xlLmFwcC5yZXN0cmljdGlvbnMubWFuYWdlciI7CisgICAgICAgIGZpbmFsIGludCBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyQXBwSWQgPSAyMDk4NzsKKyAgICAgICAgZmluYWwgaW50IGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQgPSBVc2VySGFuZGxlLmdldFVpZCgKKyAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUsIGFwcFJlc3RyaWN0aW9uc01hbmFnZXJBcHBJZCk7CisgICAgICAgIGRvUmV0dXJuKGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQpLndoZW4obUNvbnRleHQucGFja2FnZU1hbmFnZXIpLmdldFBhY2thZ2VVaWRBc1VzZXIoCisgICAgICAgICAgICAgICAgZXEoYXBwUmVzdHJpY3Rpb25zTWFuYWdlclBhY2thZ2UpLAorICAgICAgICAgICAgICAgIGVxKERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQ7CisKKyAgICAgICAgLy8gYXBwUmVzdHJpY3Rpb25zTWFuYWdlciBwYWNrYWdlIHNob3VsZG4ndCBiZSBhYmxlIHRvIG1hbmFnZSByZXN0cmljdGlvbnMgYXMgdGhlIFBPIGhhc24ndAorICAgICAgICAvLyBkZWxlZ2F0ZWQgdGhhdCBwZXJtaXNzaW9uIHlldC4KKyAgICAgICAgYXNzZXJ0RmFsc2UoZHBtLmlzQ2FsbGVyQXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoKSk7CisgICAgICAgIEJ1bmRsZSByZXN0ID0gbmV3IEJ1bmRsZSgpOworICAgICAgICByZXN0LnB1dFN0cmluZygiS0VZX1NUUklORyIsICJGb28xIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkcG0uc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMobnVsbCwgInBrZzEiLCByZXN0KTsKKyAgICAgICAgICAgIGZhaWwoIkRpZG4ndCB0aHJvdyBleHBlY3RlZCBTZWN1cml0eUV4Y2VwdGlvbiIpOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBleHBlY3RlZCkgeworICAgICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0Q29udGFpbnNSZWdleCgKKyAgICAgICAgICAgICAgICAgICAgImNhbGxlciBjYW5ub3QgbWFuYWdlIGFwcGxpY2F0aW9uIHJlc3RyaWN0aW9ucyIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRwbS5nZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhudWxsLCAicGtnMSIpOworICAgICAgICAgICAgZmFpbCgiRGlkbid0IHRocm93IGV4cGVjdGVkIFNlY3VyaXR5RXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KAorICAgICAgICAgICAgICAgICAgICAiY2FsbGVyIGNhbm5vdCBtYW5hZ2UgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIiwgZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIHZpYSB0aGUgcHJvZmlsZSBvd25lciB0aGF0IG5vIHJlc3RyaWN0aW9ucyB3ZXJlIHNldC4KKyAgICAgICAgbUNvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVUlEOworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZHBtLmdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKGFkbWluMSwgInBrZzEiKS5zaXplKCkpOworCisgICAgICAgIC8vIExldCBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyUGFja2FnZSBtYW5hZ2UgYXBwIHJlc3RyaWN0aW9ucworICAgICAgICBkcG0uc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYWRtaW4xLCBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyUGFja2FnZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhhcHBSZXN0cmljdGlvbnNNYW5hZ2VyUGFja2FnZSwKKyAgICAgICAgICAgICAgICBkcG0uZ2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnNNYW5hZ2luZ1BhY2thZ2UoYWRtaW4xKSk7CisKKyAgICAgICAgLy8gTm93IHRoYXQgcGFja2FnZSBzaG91bGQgYmUgYWJsZSB0byBzZXQgYW5kIHJldHJpZXZlIGFwcCByZXN0cmljdGlvbnMuCisgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gYXBwUmVzdHJpY3Rpb25zTWFuYWdlclVpZDsKKyAgICAgICAgYXNzZXJ0VHJ1ZShkcG0uaXNDYWxsZXJBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSgpKTsKKyAgICAgICAgZHBtLnNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKG51bGwsICJwa2cxIiwgcmVzdCk7CisgICAgICAgIEJ1bmRsZSByZXR1cm5lZCA9IGRwbS5nZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhudWxsLCAicGtnMSIpOworICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcmV0dXJuZWQuc2l6ZSgpLCAxKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJGb28xIiwgcmV0dXJuZWQuZ2V0KCJLRVlfU1RSSU5HIikpOworCisgICAgICAgIC8vIFRoZSBzYW1lIGFwcCBydW5uaW5nIG9uIGEgc2VwYXJhdGUgdXNlciBzaG91bGRuJ3QgYmUgYWJsZSB0byBtYW5hZ2UgYXBwIHJlc3RyaWN0aW9ucy4KKyAgICAgICAgbUNvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBVc2VySGFuZGxlLmdldFVpZCgKKyAgICAgICAgICAgICAgICBVc2VySGFuZGxlLlVTRVJfU1lTVEVNLCBhcHBSZXN0cmljdGlvbnNNYW5hZ2VyQXBwSWQpOworICAgICAgICBhc3NlcnRGYWxzZShkcG0uaXNDYWxsZXJBcHBsaWNhdGlvblJlc3RyaWN0aW9uc01hbmFnaW5nUGFja2FnZSgpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRwbS5zZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhudWxsLCAicGtnMSIsIHJlc3QpOworICAgICAgICAgICAgZmFpbCgiRGlkbid0IHRocm93IGV4cGVjdGVkIFNlY3VyaXR5RXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KAorICAgICAgICAgICAgICAgICAgICAiY2FsbGVyIGNhbm5vdCBtYW5hZ2UgYXBwbGljYXRpb24gcmVzdHJpY3Rpb25zIiwgZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBEUE0gaXMgc3RpbGwgYWJsZSB0byBtYW5hZ2UgYXBwIHJlc3RyaWN0aW9ucywgZXZlbiBpZiBpdCBhbGxvd2VkIGFub3RoZXIgYXBwIHRvIGRvIGl0CisgICAgICAgIC8vIHRvby4KKyAgICAgICAgbUNvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVUlEOworICAgICAgICBhc3NlcnRFcXVhbHMocmV0dXJuZWQsIGRwbS5nZXRBcHBsaWNhdGlvblJlc3RyaWN0aW9ucyhhZG1pbjEsICJwa2cxIikpOworICAgICAgICBkcG0uc2V0QXBwbGljYXRpb25SZXN0cmljdGlvbnMoYWRtaW4xLCAicGtnMSIsIG51bGwpOworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgZHBtLmdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKGFkbWluMSwgInBrZzEiKS5zaXplKCkpOworCisgICAgICAgIC8vIFJlbW92aW5nIHRoZSBhYmlsaXR5IGZvciB0aGUgcGFja2FnZSB0byBtYW5hZ2UgYXBwIHJlc3RyaWN0aW9ucy4KKyAgICAgICAgZHBtLnNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKGFkbWluMSwgbnVsbCk7CisgICAgICAgIGFzc2VydE51bGwoZHBtLmdldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKGFkbWluMSkpOworICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IGFwcFJlc3RyaWN0aW9uc01hbmFnZXJVaWQ7CisgICAgICAgIGFzc2VydEZhbHNlKGRwbS5pc0NhbGxlckFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zTWFuYWdpbmdQYWNrYWdlKCkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZHBtLnNldEFwcGxpY2F0aW9uUmVzdHJpY3Rpb25zKG51bGwsICJwa2cxIiwgbnVsbCk7CisgICAgICAgICAgICBmYWlsKCJEaWRuJ3QgdGhyb3cgZXhwZWN0ZWQgU2VjdXJpdHlFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIE1vcmVBc3NlcnRzLmFzc2VydENvbnRhaW5zUmVnZXgoCisgICAgICAgICAgICAgICAgICAgICJjYWxsZXIgY2Fubm90IG1hbmFnZSBhcHBsaWNhdGlvbiByZXN0cmljdGlvbnMiLCBleHBlY3RlZC5nZXRNZXNzYWdlKCkpOworICAgICAgICB9CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgdGVzdFNldFVzZXJSZXN0cmljdGlvbl9hc0RvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIG1Db250ZXh0LmNhbGxlclBlcm1pc3Npb25zLmFkZChwZXJtaXNzaW9uLk1BTkFHRV9ERVZJQ0VfQURNSU5TKTsKICAgICAgICAgbUNvbnRleHQuY2FsbGVyUGVybWlzc2lvbnMuYWRkKHBlcm1pc3Npb24uTUFOQUdFX1VTRVJTKTsKQEAgLTEyNjcsNCArMTM0OSwxMzEgQEAKICAgICAgICAgd2hlbihtQ29udGV4dC53aWZpTWFuYWdlci5nZXRDb25uZWN0aW9uSW5mbygpKS50aGVuUmV0dXJuKHdpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIxMToyMjozMzo0NDo1NTo2NiIsIGRwbS5nZXRXaWZpTWFjQWRkcmVzcygpKTsKICAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVib290Q2FuT25seUJlQ2FsbGVkQnlEZXZpY2VPd25lcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBtQ29udGV4dC5jYWxsZXJQZXJtaXNzaW9ucy5hZGQocGVybWlzc2lvbi5NQU5BR0VfREVWSUNFX0FETUlOUyk7CisgICAgICAgIG1Db250ZXh0LmNhbGxlclBlcm1pc3Npb25zLmFkZChwZXJtaXNzaW9uLk1BTkFHRV9QUk9GSUxFX0FORF9ERVZJQ0VfT1dORVJTKTsKKworICAgICAgICAvLyBJbiB0aGlzIHRlc3QsIGNoYW5nZSB0aGUgY2FsbGVyIHVzZXIgdG8gInN5c3RlbSIuCisgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1NZU1RFTV9VU0VSX1VJRDsKKworICAgICAgICAvLyBNYWtlIHN1cmUgYWRtaW4xIGlzIGluc3RhbGxlZCBvbiBzeXN0ZW0gdXNlci4KKyAgICAgICAgc2V0VXBQYWNrYWdlTWFuYWdlckZvckFkbWluKGFkbWluMSwgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1NZU1RFTV9VU0VSX1VJRCk7CisKKyAgICAgICAgLy8gU2V0IGFkbWluMSBhcyBEQS4KKyAgICAgICAgZHBtLnNldEFjdGl2ZUFkbWluKGFkbWluMSwgZmFsc2UpOworICAgICAgICBhc3NlcnRUcnVlKGRwbS5pc0FkbWluQWN0aXZlKGFkbWluMSkpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZHBtLnJlYm9vdChhZG1pbjEpOworICAgICAgICAgICAgZmFpbCgiREEgY2FsbHMgRFBNLnJlYm9vdCgpLCBkaWQgbm90IHRocm93IGV4cGVjdGVkIFNlY3VyaXR5RXhjZXB0aW9uIik7CisgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KCJkb2VzIG5vdCBvd24gdGhlIGRldmljZSIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTZXQgYWRtaW4xIGFzIFBPLgorICAgICAgICBhc3NlcnRUcnVlKGRwbS5zZXRQcm9maWxlT3duZXIoYWRtaW4xLCBudWxsLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBkcG0ucmVib290KGFkbWluMSk7CisgICAgICAgICAgICBmYWlsKCJQTyBjYWxscyBEUE0ucmVib290KCksIGRpZCBub3QgdGhyb3cgZXhwZWN0ZWQgU2VjdXJpdHlFeGNlcHRpb24iKTsKKyAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIE1vcmVBc3NlcnRzLmFzc2VydENvbnRhaW5zUmVnZXgoImRvZXMgbm90IG93biB0aGUgZGV2aWNlIiwgZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBQTyBhbmQgYWRkIERPLgorICAgICAgICBkcG0uY2xlYXJQcm9maWxlT3duZXIoYWRtaW4xKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShkcG0uc2V0RGV2aWNlT3duZXIoYWRtaW4xLCBudWxsLCBVc2VySGFuZGxlLlVTRVJfU1lTVEVNKSk7CisKKyAgICAgICAgZHBtLnJlYm9vdChhZG1pbjEpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTZXRHZXRTdXBwb3J0VGV4dCgpIHsKKyAgICAgICAgbUNvbnRleHQuY2FsbGVyUGVybWlzc2lvbnMuYWRkKHBlcm1pc3Npb24uTUFOQUdFX0RFVklDRV9BRE1JTlMpOworICAgICAgICBkcG0uc2V0QWN0aXZlQWRtaW4oYWRtaW4xLCB0cnVlKTsKKyAgICAgICAgZHBtLnNldEFjdGl2ZUFkbWluKGFkbWluMiwgdHJ1ZSk7CisgICAgICAgIG1Db250ZXh0LmNhbGxlclBlcm1pc3Npb25zLnJlbW92ZShwZXJtaXNzaW9uLk1BTkFHRV9ERVZJQ0VfQURNSU5TKTsKKworICAgICAgICAvLyBOdWxsIGRlZmF1bHQgc3VwcG9ydCBtZXNzYWdlcy4KKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluMSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuU1lTVEVNX1VJRDsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMSwKKyAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2VGb3JVc2VyKGFkbWluMSwKKyAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKSk7CisgICAgICAgICAgICBtTW9ja0NvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVUlEOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBzeXN0ZW0gY2FuIGNhbGwgdGhlIHBlciB1c2VyIHZlcnNpb25zLgorICAgICAgICB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjEsCisgICAgICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpOworICAgICAgICAgICAgICAgIGZhaWwoIk9ubHkgc3lzdGVtIHNob3VsZCBiZSBhYmxlIHRvIGNhbGwgZ2V0WFhYRm9yVXNlciB2ZXJzaW9ucyIpOworICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KCJtZXNzYWdlIGZvciB1c2VyIiwgZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICAgICAgRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VTRVJfSEFORExFKTsKKyAgICAgICAgICAgICAgICBmYWlsKCJPbmx5IHN5c3RlbSBzaG91bGQgYmUgYWJsZSB0byBjYWxsIGdldFhYWEZvclVzZXIgdmVyc2lvbnMiKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0Q29udGFpbnNSZWdleCgibWVzc2FnZSBmb3IgdXNlciIsIGV4cGVjdGVkLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDYW4ndCBzZXQgbWVzc2FnZSBmb3IgYWRtaW4gaW4gYW5vdGhlciB1aWQuCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRCArIDE7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGRwbS5zZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluMSwgIlNvbWUgdGV4dCIpOworICAgICAgICAgICAgICAgIGZhaWwoIkFkbWlucyBzaG91bGQgb25seSBiZSBhYmxlIHRvIGNoYW5nZSB0aGVpciBvd24gc3VwcG9ydCB0ZXh0LiIpOworICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBNb3JlQXNzZXJ0cy5hc3NlcnRDb250YWluc1JlZ2V4KCJpcyBub3Qgb3duZWQgYnkgdWlkIiwgZXhwZWN0ZWQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1Db250ZXh0LmJpbmRlci5jYWxsaW5nVWlkID0gRHBtTW9ja0NvbnRleHQuQ0FMTEVSX1VJRDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldC9HZXQgc2hvcnQgcmV0dXJucyB3aGF0IGl0IHNldHMgYW5kIG90aGVyIGFkbWlucyB0ZXh0IGlzbid0IGNoYW5nZWQuCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBzdXBwb3J0VGV4dCA9ICJTb21lIHRleHQgdG8gdGVzdCB3aXRoLiI7CisgICAgICAgICAgICBkcG0uc2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEsIHN1cHBvcnRUZXh0KTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhzdXBwb3J0VGV4dCwgZHBtLmdldFNob3J0U3VwcG9ydE1lc3NhZ2UoYWRtaW4xKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRMb25nU3VwcG9ydE1lc3NhZ2UoYWRtaW4xKSk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluMikpOworCisgICAgICAgICAgICBtQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LlNZU1RFTV9VSUQ7CisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoc3VwcG9ydFRleHQsIGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjEsCisgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4yLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIG1Nb2NrQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQ7CisKKyAgICAgICAgICAgIGRwbS5zZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluMSwgbnVsbCk7CisgICAgICAgICAgICBhc3NlcnROdWxsKGRwbS5nZXRTaG9ydFN1cHBvcnRNZXNzYWdlKGFkbWluMSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2V0L0dldCBsb25nIHJldHVybnMgd2hhdCBpdCBzZXRzIGFuZCBvdGhlciBhZG1pbnMgdGV4dCBpc24ndCBjaGFuZ2VkLgorICAgICAgICB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgc3VwcG9ydFRleHQgPSAiU29tZSB0ZXh0IHRvIHRlc3Qgd2l0aC5cbldpdGggbW9yZSB0ZXh0LiI7CisgICAgICAgICAgICBkcG0uc2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluMSwgc3VwcG9ydFRleHQpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHN1cHBvcnRUZXh0LCBkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlKGFkbWluMSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbjIpKTsKKworICAgICAgICAgICAgbUNvbnRleHQuYmluZGVyLmNhbGxpbmdVaWQgPSBEcG1Nb2NrQ29udGV4dC5TWVNURU1fVUlEOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHN1cHBvcnRUZXh0LCBkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjEsCisgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0TG9uZ1N1cHBvcnRNZXNzYWdlRm9yVXNlcihhZG1pbjIsCisgICAgICAgICAgICAgICAgICAgIERwbU1vY2tDb250ZXh0LkNBTExFUl9VU0VSX0hBTkRMRSkpOworICAgICAgICAgICAgYXNzZXJ0TnVsbChkcG0uZ2V0U2hvcnRTdXBwb3J0TWVzc2FnZUZvclVzZXIoYWRtaW4xLAorICAgICAgICAgICAgICAgICAgICBEcG1Nb2NrQ29udGV4dC5DQUxMRVJfVVNFUl9IQU5ETEUpKTsKKyAgICAgICAgICAgIG1Nb2NrQ29udGV4dC5iaW5kZXIuY2FsbGluZ1VpZCA9IERwbU1vY2tDb250ZXh0LkNBTExFUl9VSUQ7CisKKyAgICAgICAgICAgIGRwbS5zZXRMb25nU3VwcG9ydE1lc3NhZ2UoYWRtaW4xLCBudWxsKTsKKyAgICAgICAgICAgIGFzc2VydE51bGwoZHBtLmdldExvbmdTdXBwb3J0TWVzc2FnZShhZG1pbjEpKTsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtTW9ja0NvbnRleHQuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtTW9ja0NvbnRleHQuamF2YQppbmRleCA2NmQ3MDFkLi41NjY2N2U1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbU1vY2tDb250ZXh0LmphdmEKKysrIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EcG1Nb2NrQ29udGV4dC5qYXZhCkBAIC0xMzQsNiArMTM0LDkgQEAKIAogICAgICAgICBwdWJsaWMgdm9pZCBnb1RvU2xlZXAobG9uZyB0aW1lLCBpbnQgcmVhc29uLCBpbnQgZmxhZ3MpIHsKICAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIHJlYm9vdChTdHJpbmcgcmVhc29uKSB7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN5c3RlbVByb3BlcnRpZXNGb3JNb2NrIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtVGVzdEJhc2UuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9kZXZpY2Vwb2xpY3kvRHBtVGVzdEJhc2UuamF2YQppbmRleCA1YjMzZTRkLi5jNTU3YWI3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvZGV2aWNlcG9saWN5L0RwbVRlc3RCYXNlLmphdmEKKysrIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL2RldmljZXBvbGljeS9EcG1UZXN0QmFzZS5qYXZhCkBAIC0xMTcsNyArMTE3LDcgQEAKICAgICAgICAgLy8gV2UgbmVlZCB0byByZXdyaXRlIHRoZSBVSUQgaW4gdGhlIGFjdGl2aXR5IGluZm8uCiAgICAgICAgIHJlYWxSZXNvbHZlSW5mby5nZXQoMCkuYWN0aXZpdHlJbmZvLmFwcGxpY2F0aW9uSW5mbyA9IGFpOwogCi0gICAgICAgIGRvUmV0dXJuKHJlYWxSZXNvbHZlSW5mbykud2hlbihtTW9ja0NvbnRleHQucGFja2FnZU1hbmFnZXIpLnF1ZXJ5QnJvYWRjYXN0UmVjZWl2ZXJzKAorICAgICAgICBkb1JldHVybihyZWFsUmVzb2x2ZUluZm8pLndoZW4obU1vY2tDb250ZXh0LnBhY2thZ2VNYW5hZ2VyKS5xdWVyeUJyb2FkY2FzdFJlY2VpdmVyc0FzVXNlcigKICAgICAgICAgICAgICAgICBNb2NrVXRpbHMuY2hlY2tJbnRlbnRDb21wb25lbnQoYWRtaW4pLAogICAgICAgICAgICAgICAgIGVxKFBhY2thZ2VNYW5hZ2VyLkdFVF9NRVRBX0RBVEEKICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGFja2FnZU1hbmFnZXIuR0VUX0RJU0FCTEVEX1VOVElMX1VTRURfQ09NUE9ORU5UUyksCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c0FjY2Vzc1Rlc3QuamF2YSBiL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzQWNjZXNzVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOGY5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c0FjY2Vzc1Rlc3QuamF2YQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0OworCitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ud2hlbjsKKworaW1wb3J0IGFuZHJvaWQuTWFuaWZlc3Q7CitpbXBvcnQgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uOworaW1wb3J0IGFuZHJvaWQuYXBwLkFwcE9wc01hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC5hcHAuYWRtaW4uRGV2aWNlQWRtaW5JbmZvOworaW1wb3J0IGFuZHJvaWQuYXBwLmFkbWluLkRldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKK2ltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7CitpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnNlcnZlci5Mb2NhbFNlcnZpY2VzOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsKK2ltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7CisKK3B1YmxpYyBjbGFzcyBOZXR3b3JrU3RhdHNBY2Nlc3NUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BLRyA9ICJjb20uZXhhbXBsZS50ZXN0IjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVTVF9VSUQgPSAxMjM0NTsKKworICAgIEBNb2NrIHByaXZhdGUgQ29udGV4dCBtQ29udGV4dDsKKyAgICBATW9jayBwcml2YXRlIERldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbCBtRHBtaTsKKyAgICBATW9jayBwcml2YXRlIFRlbGVwaG9ueU1hbmFnZXIgbVRtOworICAgIEBNb2NrIHByaXZhdGUgQXBwT3BzTWFuYWdlciBtQXBwT3BzOworCisgICAgLy8gSG9sZCB0aGUgcmVhbCBzZXJ2aWNlIHNvIHdlIGNhbiByZXN0b3JlIGl0IHdoZW4gdGVhcmluZyBkb3duIHRoZSB0ZXN0LgorICAgIHByaXZhdGUgRGV2aWNlUG9saWN5TWFuYWdlckludGVybmFsIG1TeXN0ZW1EcG1pOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3VwZXIuc2V0VXAoKTsKKyAgICAgICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nrcyh0aGlzKTsKKworICAgICAgICBtU3lzdGVtRHBtaSA9IExvY2FsU2VydmljZXMuZ2V0U2VydmljZShEZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWwuY2xhc3MpOworICAgICAgICBMb2NhbFNlcnZpY2VzLnJlbW92ZVNlcnZpY2VGb3JUZXN0KERldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgIExvY2FsU2VydmljZXMuYWRkU2VydmljZShEZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWwuY2xhc3MsIG1EcG1pKTsKKworICAgICAgICB3aGVuKG1Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5URUxFUEhPTllfU0VSVklDRSkpLnRoZW5SZXR1cm4obVRtKTsKKyAgICAgICAgd2hlbihtQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVBQX09QU19TRVJWSUNFKSkudGhlblJldHVybihtQXBwT3BzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBMb2NhbFNlcnZpY2VzLnJlbW92ZVNlcnZpY2VGb3JUZXN0KERldmljZVBvbGljeU1hbmFnZXJJbnRlcm5hbC5jbGFzcyk7CisgICAgICAgIExvY2FsU2VydmljZXMuYWRkU2VydmljZShEZXZpY2VQb2xpY3lNYW5hZ2VySW50ZXJuYWwuY2xhc3MsIG1TeXN0ZW1EcG1pKTsKKyAgICAgICAgc3VwZXIudGVhckRvd24oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tBY2Nlc3NMZXZlbF9oYXNDYXJyaWVyUHJpdmlsZWdlcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzZXRIYXNDYXJyaWVyUHJpdmlsZWdlcyh0cnVlKTsKKyAgICAgICAgc2V0SXNEZXZpY2VPd25lcihmYWxzZSk7CisgICAgICAgIHNldElzUHJvZmlsZU93bmVyKGZhbHNlKTsKKyAgICAgICAgc2V0SGFzQXBwT3BzUGVybWlzc2lvbihBcHBPcHNNYW5hZ2VyLk1PREVfREVGQVVMVCwgZmFsc2UpOworICAgICAgICBzZXRIYXNSZWFkSGlzdG9yeVBlcm1pc3Npb24oZmFsc2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuY2hlY2tBY2Nlc3NMZXZlbChtQ29udGV4dCwgVEVTVF9VSUQsIFRFU1RfUEtHKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQWNjZXNzTGV2ZWxfaXNEZXZpY2VPd25lcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzZXRIYXNDYXJyaWVyUHJpdmlsZWdlcyhmYWxzZSk7CisgICAgICAgIHNldElzRGV2aWNlT3duZXIodHJ1ZSk7CisgICAgICAgIHNldElzUHJvZmlsZU93bmVyKGZhbHNlKTsKKyAgICAgICAgc2V0SGFzQXBwT3BzUGVybWlzc2lvbihBcHBPcHNNYW5hZ2VyLk1PREVfREVGQVVMVCwgZmFsc2UpOworICAgICAgICBzZXRIYXNSZWFkSGlzdG9yeVBlcm1pc3Npb24oZmFsc2UpOworICAgICAgICBhc3NlcnRFcXVhbHMoTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuY2hlY2tBY2Nlc3NMZXZlbChtQ29udGV4dCwgVEVTVF9VSUQsIFRFU1RfUEtHKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQWNjZXNzTGV2ZWxfaXNQcm9maWxlT3duZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc2V0SGFzQ2FycmllclByaXZpbGVnZXMoZmFsc2UpOworICAgICAgICBzZXRJc0RldmljZU93bmVyKGZhbHNlKTsKKyAgICAgICAgc2V0SXNQcm9maWxlT3duZXIodHJ1ZSk7CisgICAgICAgIHNldEhhc0FwcE9wc1Blcm1pc3Npb24oQXBwT3BzTWFuYWdlci5NT0RFX0RFRkFVTFQsIGZhbHNlKTsKKyAgICAgICAgc2V0SGFzUmVhZEhpc3RvcnlQZXJtaXNzaW9uKGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5VU0VSLAorICAgICAgICAgICAgICAgIE5ldHdvcmtTdGF0c0FjY2Vzcy5jaGVja0FjY2Vzc0xldmVsKG1Db250ZXh0LCBURVNUX1VJRCwgVEVTVF9QS0cpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tBY2Nlc3NMZXZlbF9oYXNBcHBPcHNCaXRBbGxvd2VkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHNldEhhc0NhcnJpZXJQcml2aWxlZ2VzKGZhbHNlKTsKKyAgICAgICAgc2V0SXNEZXZpY2VPd25lcihmYWxzZSk7CisgICAgICAgIHNldElzUHJvZmlsZU93bmVyKHRydWUpOworICAgICAgICBzZXRIYXNBcHBPcHNQZXJtaXNzaW9uKEFwcE9wc01hbmFnZXIuTU9ERV9BTExPV0VELCBmYWxzZSk7CisgICAgICAgIHNldEhhc1JlYWRIaXN0b3J5UGVybWlzc2lvbihmYWxzZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuVVNFUiwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuY2hlY2tBY2Nlc3NMZXZlbChtQ29udGV4dCwgVEVTVF9VSUQsIFRFU1RfUEtHKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQWNjZXNzTGV2ZWxfaGFzQXBwT3BzQml0RGVmYXVsdF9ncmFudGVkUGVybWlzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzZXRIYXNDYXJyaWVyUHJpdmlsZWdlcyhmYWxzZSk7CisgICAgICAgIHNldElzRGV2aWNlT3duZXIoZmFsc2UpOworICAgICAgICBzZXRJc1Byb2ZpbGVPd25lcih0cnVlKTsKKyAgICAgICAgc2V0SGFzQXBwT3BzUGVybWlzc2lvbihBcHBPcHNNYW5hZ2VyLk1PREVfREVGQVVMVCwgdHJ1ZSk7CisgICAgICAgIHNldEhhc1JlYWRIaXN0b3J5UGVybWlzc2lvbihmYWxzZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuVVNFUiwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuY2hlY2tBY2Nlc3NMZXZlbChtQ29udGV4dCwgVEVTVF9VSUQsIFRFU1RfUEtHKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrQWNjZXNzTGV2ZWxfaGFzUmVhZEhpc3RvcnlQZXJtaXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHNldEhhc0NhcnJpZXJQcml2aWxlZ2VzKGZhbHNlKTsKKyAgICAgICAgc2V0SXNEZXZpY2VPd25lcihmYWxzZSk7CisgICAgICAgIHNldElzUHJvZmlsZU93bmVyKHRydWUpOworICAgICAgICBzZXRIYXNBcHBPcHNQZXJtaXNzaW9uKEFwcE9wc01hbmFnZXIuTU9ERV9ERUZBVUxULCBmYWxzZSk7CisgICAgICAgIHNldEhhc1JlYWRIaXN0b3J5UGVybWlzc2lvbih0cnVlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5VU0VSLAorICAgICAgICAgICAgICAgIE5ldHdvcmtTdGF0c0FjY2Vzcy5jaGVja0FjY2Vzc0xldmVsKG1Db250ZXh0LCBURVNUX1VJRCwgVEVTVF9QS0cpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tBY2Nlc3NMZXZlbF9kZW5pZWRBcHBPcHNCaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc2V0SGFzQ2FycmllclByaXZpbGVnZXMoZmFsc2UpOworICAgICAgICBzZXRJc0RldmljZU93bmVyKGZhbHNlKTsKKyAgICAgICAgc2V0SXNQcm9maWxlT3duZXIoZmFsc2UpOworICAgICAgICBzZXRIYXNBcHBPcHNQZXJtaXNzaW9uKEFwcE9wc01hbmFnZXIuTU9ERV9FUlJPUkVELCB0cnVlKTsKKyAgICAgICAgc2V0SGFzUmVhZEhpc3RvcnlQZXJtaXNzaW9uKGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERUZBVUxULAorICAgICAgICAgICAgICAgIE5ldHdvcmtTdGF0c0FjY2Vzcy5jaGVja0FjY2Vzc0xldmVsKG1Db250ZXh0LCBURVNUX1VJRCwgVEVTVF9QS0cpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tBY2Nlc3NMZXZlbF9kZW5pZWRBcHBPcHNCaXRfZGVuaWVkUGVybWlzc2lvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBzZXRIYXNDYXJyaWVyUHJpdmlsZWdlcyhmYWxzZSk7CisgICAgICAgIHNldElzRGV2aWNlT3duZXIoZmFsc2UpOworICAgICAgICBzZXRJc1Byb2ZpbGVPd25lcihmYWxzZSk7CisgICAgICAgIHNldEhhc0FwcE9wc1Blcm1pc3Npb24oQXBwT3BzTWFuYWdlci5NT0RFX0RFRkFVTFQsIGZhbHNlKTsKKyAgICAgICAgc2V0SGFzUmVhZEhpc3RvcnlQZXJtaXNzaW9uKGZhbHNlKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERUZBVUxULAorICAgICAgICAgICAgICAgIE5ldHdvcmtTdGF0c0FjY2Vzcy5jaGVja0FjY2Vzc0xldmVsKG1Db250ZXh0LCBURVNUX1VJRCwgVEVTVF9QS0cpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0SGFzQ2FycmllclByaXZpbGVnZXMoYm9vbGVhbiBoYXNQcml2aWxlZ2VzKSB7CisgICAgICAgIHdoZW4obVRtLmNoZWNrQ2FycmllclByaXZpbGVnZXNGb3JQYWNrYWdlKFRFU1RfUEtHKSkudGhlblJldHVybigKKyAgICAgICAgICAgICAgICBoYXNQcml2aWxlZ2VzID8gVGVsZXBob255TWFuYWdlci5DQVJSSUVSX1BSSVZJTEVHRV9TVEFUVVNfSEFTX0FDQ0VTUworICAgICAgICAgICAgICAgICAgICAgICAgOiBUZWxlcGhvbnlNYW5hZ2VyLkNBUlJJRVJfUFJJVklMRUdFX1NUQVRVU19OT19BQ0NFU1MpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBzZXRJc0RldmljZU93bmVyKGJvb2xlYW4gaXNPd25lcikgeworICAgICAgICB3aGVuKG1EcG1pLmlzQWN0aXZlQWRtaW5XaXRoUG9saWN5KFRFU1RfVUlELCBEZXZpY2VBZG1pbkluZm8uVVNFU19QT0xJQ1lfREVWSUNFX09XTkVSKSkKKyAgICAgICAgICAgICAgICAudGhlblJldHVybihpc093bmVyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0SXNQcm9maWxlT3duZXIoYm9vbGVhbiBpc093bmVyKSB7CisgICAgICAgIHdoZW4obURwbWkuaXNBY3RpdmVBZG1pbldpdGhQb2xpY3koVEVTVF9VSUQsIERldmljZUFkbWluSW5mby5VU0VTX1BPTElDWV9QUk9GSUxFX09XTkVSKSkKKyAgICAgICAgICAgICAgICAudGhlblJldHVybihpc093bmVyKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0SGFzQXBwT3BzUGVybWlzc2lvbihpbnQgYXBwT3BzTW9kZSwgYm9vbGVhbiBoYXNQZXJtaXNzaW9uKSB7CisgICAgICAgIHdoZW4obUFwcE9wcy5jaGVja09wKEFwcE9wc01hbmFnZXIuT1BfR0VUX1VTQUdFX1NUQVRTLCBURVNUX1VJRCwgVEVTVF9QS0cpKQorICAgICAgICAgICAgICAgIC50aGVuUmV0dXJuKGFwcE9wc01vZGUpOworICAgICAgICB3aGVuKG1Db250ZXh0LmNoZWNrQ2FsbGluZ1Blcm1pc3Npb24oTWFuaWZlc3QucGVybWlzc2lvbi5QQUNLQUdFX1VTQUdFX1NUQVRTKSkudGhlblJldHVybigKKyAgICAgICAgICAgICAgICBoYXNQZXJtaXNzaW9uID8gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVECisgICAgICAgICAgICAgICAgICAgICAgICA6IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fREVOSUVEKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgc2V0SGFzUmVhZEhpc3RvcnlQZXJtaXNzaW9uKGJvb2xlYW4gaGFzUGVybWlzc2lvbikgeworICAgICAgICB3aGVuKG1Db250ZXh0LmNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24ocGVybWlzc2lvbi5SRUFEX05FVFdPUktfVVNBR0VfSElTVE9SWSkpCisgICAgICAgICAgICAgICAgLnRoZW5SZXR1cm4oaGFzUGVybWlzc2lvbiA/IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRAorICAgICAgICAgICAgICAgICAgICAgICAgOiBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0RFTklFRCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNDb2xsZWN0aW9uVGVzdC5qYXZhIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25ldC9OZXR3b3JrU3RhdHNDb2xsZWN0aW9uVGVzdC5qYXZhCmluZGV4IDFhNmMyODkuLjYwMjY2NDQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9uZXQvTmV0d29ya1N0YXRzQ29sbGVjdGlvblRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvbmV0L05ldHdvcmtTdGF0c0NvbGxlY3Rpb25UZXN0LmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC5zZXJ2ZXIubmV0OwogCitpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEU7CiBpbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdvcmtTdGF0cy5TRVRfREVGQVVMVDsKIGltcG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQuTmV0d29ya1N0YXRzLlRBR19OT05FOwogaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5OZXR3b3JrU3RhdHMuVUlEX0FMTDsKQEAgLTI0LDkgKzI1LDE0IEBACiBpbXBvcnQgc3RhdGljIGFuZHJvaWQudGV4dC5mb3JtYXQuRGF0ZVV0aWxzLk1JTlVURV9JTl9NSUxMSVM7CiAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKK2ltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSWRlbnRpdHk7CiBpbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1N0YXRzOwogaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtUZW1wbGF0ZTsKK2ltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7CitpbXBvcnQgYW5kcm9pZC5vcy5Vc2VySGFuZGxlOworaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LkFuZHJvaWRUZXN0Q2FzZTsKK2ltcG9ydCBhbmRyb2lkLnRlc3QuTW9yZUFzc2VydHM7CiBpbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7CiAKIGltcG9ydCBjb20uYW5kcm9pZC5mcmFtZXdvcmtzLnNlcnZpY2VzdGVzdHMuUjsKQEAgLTY4LDcgKzc0LDcgQEAKIAogICAgICAgICAvLyB2ZXJpZnkgdGhhdCBoaXN0b3J5IHJlYWQgY29ycmVjdGx5CiAgICAgICAgIGFzc2VydFN1bW1hcnlUb3RhbChjb2xsZWN0aW9uLCBidWlsZFRlbXBsYXRlTW9iaWxlQWxsKFRFU1RfSU1TSSksCi0gICAgICAgICAgICAgICAgNjM2MDE2NzcwTCwgNzA5MzA2TCwgODgwMzg3NjhMLCA1MTg4MzZMKTsKKyAgICAgICAgICAgICAgICA2MzYwMTY3NzBMLCA3MDkzMDZMLCA4ODAzODc2OEwsIDUxODgzNkwsIE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERVZJQ0UpOwogCiAgICAgICAgIC8vIG5vdyBleHBvcnQgaW50byBhIHVuaWZpZWQgZm9ybWF0CiAgICAgICAgIGZpbmFsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBib3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CkBAIC03NywxMiArODMsMTIgQEAKICAgICAgICAgLy8gY2xlYXIgc3RydWN0dXJlIGNvbXBsZXRlbHkKICAgICAgICAgY29sbGVjdGlvbi5yZXNldCgpOwogICAgICAgICBhc3NlcnRTdW1tYXJ5VG90YWwoY29sbGVjdGlvbiwgYnVpbGRUZW1wbGF0ZU1vYmlsZUFsbChURVNUX0lNU0kpLAotICAgICAgICAgICAgICAgIDBMLCAwTCwgMEwsIDBMKTsKKyAgICAgICAgICAgICAgICAwTCwgMEwsIDBMLCAwTCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSk7CiAKICAgICAgICAgLy8gYW5kIHJlYWQgYmFjayBpbnRvIHN0cnVjdHVyZSwgdmVyaWZ5aW5nIHRoYXQgdG90YWxzIGFyZSBzYW1lCiAgICAgICAgIGNvbGxlY3Rpb24ucmVhZChuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm9zLnRvQnl0ZUFycmF5KCkpKTsKICAgICAgICAgYXNzZXJ0U3VtbWFyeVRvdGFsKGNvbGxlY3Rpb24sIGJ1aWxkVGVtcGxhdGVNb2JpbGVBbGwoVEVTVF9JTVNJKSwKLSAgICAgICAgICAgICAgICA2MzYwMTY3NzBMLCA3MDkzMDZMLCA4ODAzODc2OEwsIDUxODgzNkwpOworICAgICAgICAgICAgICAgIDYzNjAxNjc3MEwsIDcwOTMwNkwsIDg4MDM4NzY4TCwgNTE4ODM2TCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFJlYWRMZWdhY3lVaWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTk0LDcgKzEwMCw3IEBACiAKICAgICAgICAgLy8gdmVyaWZ5IHRoYXQgaGlzdG9yeSByZWFkIGNvcnJlY3RseQogICAgICAgICBhc3NlcnRTdW1tYXJ5VG90YWwoY29sbGVjdGlvbiwgYnVpbGRUZW1wbGF0ZU1vYmlsZUFsbChURVNUX0lNU0kpLAotICAgICAgICAgICAgICAgIDYzNzA3NjE1MkwsIDcxMTQxM0wsIDg4MzQzNzE3TCwgNTIxMDIyTCk7CisgICAgICAgICAgICAgICAgNjM3MDc2MTUyTCwgNzExNDEzTCwgODgzNDM3MTdMLCA1MjEwMjJMLCBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuREVWSUNFKTsKIAogICAgICAgICAvLyBub3cgZXhwb3J0IGludG8gYSB1bmlmaWVkIGZvcm1hdAogICAgICAgICBmaW5hbCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwpAQCAtMTAzLDEyICsxMDksMTIgQEAKICAgICAgICAgLy8gY2xlYXIgc3RydWN0dXJlIGNvbXBsZXRlbHkKICAgICAgICAgY29sbGVjdGlvbi5yZXNldCgpOwogICAgICAgICBhc3NlcnRTdW1tYXJ5VG90YWwoY29sbGVjdGlvbiwgYnVpbGRUZW1wbGF0ZU1vYmlsZUFsbChURVNUX0lNU0kpLAotICAgICAgICAgICAgICAgIDBMLCAwTCwgMEwsIDBMKTsKKyAgICAgICAgICAgICAgICAwTCwgMEwsIDBMLCAwTCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSk7CiAKICAgICAgICAgLy8gYW5kIHJlYWQgYmFjayBpbnRvIHN0cnVjdHVyZSwgdmVyaWZ5aW5nIHRoYXQgdG90YWxzIGFyZSBzYW1lCiAgICAgICAgIGNvbGxlY3Rpb24ucmVhZChuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYm9zLnRvQnl0ZUFycmF5KCkpKTsKICAgICAgICAgYXNzZXJ0U3VtbWFyeVRvdGFsKGNvbGxlY3Rpb24sIGJ1aWxkVGVtcGxhdGVNb2JpbGVBbGwoVEVTVF9JTVNJKSwKLSAgICAgICAgICAgICAgICA2MzcwNzYxNTJMLCA3MTE0MTNMLCA4ODM0MzcxN0wsIDUyMTAyMkwpOworICAgICAgICAgICAgICAgIDYzNzA3NjE1MkwsIDcxMTQxM0wsIDg4MzQzNzE3TCwgNTIxMDIyTCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdFJlYWRMZWdhY3lVaWRUYWdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CkBAIC0xNTEsNiArMTU3LDY2IEBACiAgICAgICAgIGFzc2VydEVxdWFscygyICogSE9VUl9JTl9NSUxMSVMsIGNvbGxlY3Rpb24uZ2V0RW5kTWlsbGlzKCkpOwogICAgIH0KIAorICAgIHB1YmxpYyB2b2lkIHRlc3RBY2Nlc3NMZXZlbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgTmV0d29ya1N0YXRzQ29sbGVjdGlvbiBjb2xsZWN0aW9uID0gbmV3IE5ldHdvcmtTdGF0c0NvbGxlY3Rpb24oSE9VUl9JTl9NSUxMSVMpOworICAgICAgICBmaW5hbCBOZXR3b3JrU3RhdHMuRW50cnkgZW50cnkgPSBuZXcgTmV0d29ya1N0YXRzLkVudHJ5KCk7CisgICAgICAgIGZpbmFsIE5ldHdvcmtJZGVudGl0eVNldCBpZGVudFNldCA9IG5ldyBOZXR3b3JrSWRlbnRpdHlTZXQoKTsKKyAgICAgICAgaWRlbnRTZXQuYWRkKG5ldyBOZXR3b3JrSWRlbnRpdHkoVFlQRV9NT0JJTEUsIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1VOS05PV04sCisgICAgICAgICAgICAgICAgVEVTVF9JTVNJLCBudWxsLCBmYWxzZSkpOworCisgICAgICAgIGludCBteVVpZCA9IFByb2Nlc3MubXlVaWQoKTsKKyAgICAgICAgaW50IG90aGVyVWlkSW5TYW1lVXNlciA9IFByb2Nlc3MubXlVaWQoKSArIDE7CisgICAgICAgIGludCB1aWRJbkRpZmZlcmVudFVzZXIgPSBQcm9jZXNzLm15VWlkKCkgKyBVc2VySGFuZGxlLlBFUl9VU0VSX1JBTkdFOworCisgICAgICAgIC8vIFJlY29yZCBvbmUgZW50cnkgZm9yIHRoZSBjdXJyZW50IFVJRC4KKyAgICAgICAgZW50cnkucnhCeXRlcyA9IDMyOworICAgICAgICBjb2xsZWN0aW9uLnJlY29yZERhdGEoaWRlbnRTZXQsIG15VWlkLCBTRVRfREVGQVVMVCwgVEFHX05PTkUsIDAsIDYwICogTUlOVVRFX0lOX01JTExJUywKKyAgICAgICAgICAgICAgICBlbnRyeSk7CisKKyAgICAgICAgLy8gUmVjb3JkIG9uZSBlbnRyeSBmb3IgYW5vdGhlciBVSUQgaW4gdGhpcyB1c2VyLgorICAgICAgICBlbnRyeS5yeEJ5dGVzID0gNjQ7CisgICAgICAgIGNvbGxlY3Rpb24ucmVjb3JkRGF0YShpZGVudFNldCwgb3RoZXJVaWRJblNhbWVVc2VyLCBTRVRfREVGQVVMVCwgVEFHX05PTkUsIDAsCisgICAgICAgICAgICAgICAgNjAgKiBNSU5VVEVfSU5fTUlMTElTLCBlbnRyeSk7CisKKyAgICAgICAgLy8gUmVjb3JkIG9uZSBlbnRyeSBmb3IgdGhlIHN5c3RlbSBVSUQuCisgICAgICAgIGVudHJ5LnJ4Qnl0ZXMgPSAxMjg7CisgICAgICAgIGNvbGxlY3Rpb24ucmVjb3JkRGF0YShpZGVudFNldCwgUHJvY2Vzcy5TWVNURU1fVUlELCBTRVRfREVGQVVMVCwgVEFHX05PTkUsIDAsCisgICAgICAgICAgICAgICAgNjAgKiBNSU5VVEVfSU5fTUlMTElTLCBlbnRyeSk7CisKKyAgICAgICAgLy8gUmVjb3JkIG9uZSBlbnRyeSBmb3IgYSBVSUQgaW4gYSBkaWZmZXJlbnQgdXNlci4KKyAgICAgICAgZW50cnkucnhCeXRlcyA9IDI1NjsKKyAgICAgICAgY29sbGVjdGlvbi5yZWNvcmREYXRhKGlkZW50U2V0LCB1aWRJbkRpZmZlcmVudFVzZXIsIFNFVF9ERUZBVUxULCBUQUdfTk9ORSwgMCwKKyAgICAgICAgICAgICAgICA2MCAqIE1JTlVURV9JTl9NSUxMSVMsIGVudHJ5KTsKKworICAgICAgICAvLyBWZXJpZnkgdGhlIHNldCBvZiByZWxldmFudCBVSURzIGZvciBlYWNoIGFjY2VzcyBsZXZlbC4KKyAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKG5ldyBpbnRbXSB7IG15VWlkIH0sCisgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5nZXRSZWxldmFudFVpZHMoTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFRkFVTFQpKTsKKyAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKG5ldyBpbnRbXSB7IFByb2Nlc3MuU1lTVEVNX1VJRCwgbXlVaWQsIG90aGVyVWlkSW5TYW1lVXNlciB9LAorICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZ2V0UmVsZXZhbnRVaWRzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5VU0VSKSk7CisgICAgICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscygKKyAgICAgICAgICAgICAgICBuZXcgaW50W10geyBQcm9jZXNzLlNZU1RFTV9VSUQsIG15VWlkLCBvdGhlclVpZEluU2FtZVVzZXIsIHVpZEluRGlmZmVyZW50VXNlciB9LAorICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZ2V0UmVsZXZhbnRVaWRzKE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERVZJQ0UpKTsKKworICAgICAgICAvLyBWZXJpZnkgc2VjdXJpdHkgY2hlY2sgaW4gZ2V0SGlzdG9yeS4KKyAgICAgICAgYXNzZXJ0Tm90TnVsbChjb2xsZWN0aW9uLmdldEhpc3RvcnkoYnVpbGRUZW1wbGF0ZU1vYmlsZUFsbChURVNUX0lNU0kpLCBteVVpZCwgU0VUX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgVEFHX05PTkUsIDAsIE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERUZBVUxUKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjb2xsZWN0aW9uLmdldEhpc3RvcnkoYnVpbGRUZW1wbGF0ZU1vYmlsZUFsbChURVNUX0lNU0kpLCBvdGhlclVpZEluU2FtZVVzZXIsCisgICAgICAgICAgICAgICAgICAgIFNFVF9ERUZBVUxULCBUQUdfTk9ORSwgMCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFRkFVTFQpOworICAgICAgICAgICAgZmFpbCgiU2hvdWxkIGhhdmUgdGhyb3duIFNlY3VyaXR5RXhjZXB0aW9uIGZvciBhY2Nlc3NpbmcgZGlmZmVyZW50IFVJRCIpOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBleHBlY3RlZAorICAgICAgICB9CisKKyAgICAgICAgLy8gVmVyaWZ5IGFwcHJvcHJpYXRlIGFnZ3JlZ2F0aW9uIGluIGdldFN1bW1hcnkuCisgICAgICAgIGFzc2VydFN1bW1hcnlUb3RhbChjb2xsZWN0aW9uLCBidWlsZFRlbXBsYXRlTW9iaWxlQWxsKFRFU1RfSU1TSSksIDMyLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgIE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbC5ERUZBVUxUKTsKKyAgICAgICAgYXNzZXJ0U3VtbWFyeVRvdGFsKGNvbGxlY3Rpb24sIGJ1aWxkVGVtcGxhdGVNb2JpbGVBbGwoVEVTVF9JTVNJKSwgMzIgKyA2NCArIDEyOCwgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICBOZXR3b3JrU3RhdHNBY2Nlc3MuTGV2ZWwuVVNFUik7CisgICAgICAgIGFzc2VydFN1bW1hcnlUb3RhbChjb2xsZWN0aW9uLCBidWlsZFRlbXBsYXRlTW9iaWxlQWxsKFRFU1RfSU1TSSksIDMyICsgNjQgKyAxMjggKyAyNTYsIDAsIDAsCisgICAgICAgICAgICAgICAgMCwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSk7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQ29weSBhIHtAbGluayBSZXNvdXJjZXMjb3BlblJhd1Jlc291cmNlKGludCl9IGludG8ge0BsaW5rIEZpbGV9IGZvcgogICAgICAqIHRlc3RpbmcgcHVycG9zZXMuCkBAIC0xNzAsMTYgKzIzNiwxOSBAQAogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0U3VtbWFyeVRvdGFsKE5ldHdvcmtTdGF0c0NvbGxlY3Rpb24gY29sbGVjdGlvbiwKLSAgICAgICAgICAgIE5ldHdvcmtUZW1wbGF0ZSB0ZW1wbGF0ZSwgbG9uZyByeEJ5dGVzLCBsb25nIHJ4UGFja2V0cywgbG9uZyB0eEJ5dGVzLCBsb25nIHR4UGFja2V0cykgeworICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHJ4Qnl0ZXMsIGxvbmcgcnhQYWNrZXRzLCBsb25nIHR4Qnl0ZXMsIGxvbmcgdHhQYWNrZXRzLAorICAgICAgICAgICAgQE5ldHdvcmtTdGF0c0FjY2Vzcy5MZXZlbCBpbnQgYWNjZXNzTGV2ZWwpIHsKICAgICAgICAgZmluYWwgTmV0d29ya1N0YXRzLkVudHJ5IGVudHJ5ID0gY29sbGVjdGlvbi5nZXRTdW1tYXJ5KAotICAgICAgICAgICAgICAgIHRlbXBsYXRlLCBMb25nLk1JTl9WQUxVRSwgTG9uZy5NQVhfVkFMVUUpLmdldFRvdGFsKG51bGwpOworICAgICAgICAgICAgICAgIHRlbXBsYXRlLCBMb25nLk1JTl9WQUxVRSwgTG9uZy5NQVhfVkFMVUUsIGFjY2Vzc0xldmVsKQorICAgICAgICAgICAgICAgIC5nZXRUb3RhbChudWxsKTsKICAgICAgICAgYXNzZXJ0RW50cnkoZW50cnksIHJ4Qnl0ZXMsIHJ4UGFja2V0cywgdHhCeXRlcywgdHhQYWNrZXRzKTsKICAgICB9CiAKICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFN1bW1hcnlUb3RhbEluY2x1ZGluZ1RhZ3MoTmV0d29ya1N0YXRzQ29sbGVjdGlvbiBjb2xsZWN0aW9uLAogICAgICAgICAgICAgTmV0d29ya1RlbXBsYXRlIHRlbXBsYXRlLCBsb25nIHJ4Qnl0ZXMsIGxvbmcgcnhQYWNrZXRzLCBsb25nIHR4Qnl0ZXMsIGxvbmcgdHhQYWNrZXRzKSB7CiAgICAgICAgIGZpbmFsIE5ldHdvcmtTdGF0cy5FbnRyeSBlbnRyeSA9IGNvbGxlY3Rpb24uZ2V0U3VtbWFyeSgKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZSwgTG9uZy5NSU5fVkFMVUUsIExvbmcuTUFYX1ZBTFVFKS5nZXRUb3RhbEluY2x1ZGluZ1RhZ3MobnVsbCk7CisgICAgICAgICAgICAgICAgdGVtcGxhdGUsIExvbmcuTUlOX1ZBTFVFLCBMb25nLk1BWF9WQUxVRSwgTmV0d29ya1N0YXRzQWNjZXNzLkxldmVsLkRFVklDRSkKKyAgICAgICAgICAgICAgICAuZ2V0VG90YWxJbmNsdWRpbmdUYWdzKG51bGwpOwogICAgICAgICBhc3NlcnRFbnRyeShlbnRyeSwgcnhCeXRlcywgcnhQYWNrZXRzLCB0eEJ5dGVzLCB0eFBhY2tldHMpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyVGVzdC5qYXZhIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL25vdGlmaWNhdGlvbi9SYW5raW5nSGVscGVyVGVzdC5qYXZhCmluZGV4IGQwMDY1Y2QuLjI2NDA4ODkgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9ub3RpZmljYXRpb24vUmFua2luZ0hlbHBlclRlc3QuamF2YQorKysgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvbm90aWZpY2F0aW9uL1JhbmtpbmdIZWxwZXJUZXN0LmphdmEKQEAgLTM1LDcgKzM1LDcgQEAKIAogcHVibGljIGNsYXNzIFJhbmtpbmdIZWxwZXJUZXN0IGV4dGVuZHMgQW5kcm9pZFRlc3RDYXNlIHsKICAgICBATW9jayBOb3RpZmljYXRpb25Vc2FnZVN0YXRzIG1Vc2FnZVN0YXRzOwotICAgIEBNb2NrIEhhbmRsZXIgaGFuZGxlcjsKKyAgICBATW9jayBSYW5raW5nSGFuZGxlciBoYW5kbGVyOwogCiAgICAgcHJpdmF0ZSBOb3RpZmljYXRpb24gbU5vdGlHcm91cEdTb3J0QTsKICAgICBwcml2YXRlIE5vdGlmaWNhdGlvbiBtTm90aUdyb3VwR1NvcnRCOwpAQCAtNjQsOCArNjQsOCBAQAogICAgICAgICAgICAgICAgIC5zZXRXaGVuKDEyMDUpCiAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoIkEiLCAiYSIpKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICBtUmVjb3JkR3JvdXBHU29ydEEgPSBuZXcgTm90aWZpY2F0aW9uUmVjb3JkKG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCi0gICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpR3JvdXBHU29ydEEsIHVzZXIpLCAwKTsKKyAgICAgICAgbVJlY29yZEdyb3VwR1NvcnRBID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChnZXRDb250ZXh0KCksIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCisgICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpR3JvdXBHU29ydEEsIHVzZXIpKTsKIAogICAgICAgICBtTm90aUdyb3VwR1NvcnRCID0gbmV3IE5vdGlmaWNhdGlvbi5CdWlsZGVyKGdldENvbnRleHQoKSkKICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRpdGxlKCJCIikKQEAgLTc0LDI0ICs3NCwyNCBAQAogICAgICAgICAgICAgICAgIC5zZXRXaGVuKDEyMDApCiAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoIkEiLCAiYSIpKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICBtUmVjb3JkR3JvdXBHU29ydEIgPSBuZXcgTm90aWZpY2F0aW9uUmVjb3JkKG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCi0gICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpR3JvdXBHU29ydEIsIHVzZXIpLCAwKTsKKyAgICAgICAgbVJlY29yZEdyb3VwR1NvcnRCID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChnZXRDb250ZXh0KCksIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCisgICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpR3JvdXBHU29ydEIsIHVzZXIpKTsKIAogICAgICAgICBtTm90aU5vR3JvdXAgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoZ2V0Q29udGV4dCgpKQogICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUoIkMiKQogICAgICAgICAgICAgICAgIC5zZXRXaGVuKDEyMDEpCiAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoIkMiLCAiYyIpKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICBtUmVjb3JkTm9Hcm91cCA9IG5ldyBOb3RpZmljYXRpb25SZWNvcmQobmV3IFN0YXR1c0Jhck5vdGlmaWNhdGlvbigKLSAgICAgICAgICAgICAgICAicGFja2FnZSIsICJwYWNrYWdlIiwgMSwgbnVsbCwgMCwgMCwgMCwgbU5vdGlOb0dyb3VwLCB1c2VyKSwgMCk7CisgICAgICAgIG1SZWNvcmROb0dyb3VwID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChnZXRDb250ZXh0KCksIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCisgICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpTm9Hcm91cCwgdXNlcikpOwogCiAgICAgICAgIG1Ob3RpTm9Hcm91cDIgPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoZ2V0Q29udGV4dCgpKQogICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUoIkQiKQogICAgICAgICAgICAgICAgIC5zZXRXaGVuKDEyMDIpCiAgICAgICAgICAgICAgICAgLnNldFRvcGljKG5ldyBOb3RpZmljYXRpb24uVG9waWMoIkQiLCAiZCIpKQogICAgICAgICAgICAgICAgIC5idWlsZCgpOwotICAgICAgICBtUmVjb3JkTm9Hcm91cDIgPSBuZXcgTm90aWZpY2F0aW9uUmVjb3JkKG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCi0gICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpTm9Hcm91cDIsIHVzZXIpLCAwKTsKKyAgICAgICAgbVJlY29yZE5vR3JvdXAyID0gbmV3IE5vdGlmaWNhdGlvblJlY29yZChnZXRDb250ZXh0KCksIG5ldyBTdGF0dXNCYXJOb3RpZmljYXRpb24oCisgICAgICAgICAgICAgICAgInBhY2thZ2UiLCAicGFja2FnZSIsIDEsIG51bGwsIDAsIDAsIDAsIG1Ob3RpTm9Hcm91cDIsIHVzZXIpKTsKIAogICAgICAgICBtTm90aU5vR3JvdXBTb3J0QSA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihnZXRDb250ZXh0KCkpCiAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUaXRsZSgiRSIpCkBAIC05OSw4ICs5OSw4IEBACiAgICAgICAgICAgICAgICAgLnNldFNvcnRLZXkoIkEiKQogICAgICAgICAgICAgICAgIC5zZXRUb3BpYyhuZXcgTm90aWZpY2F0aW9uLlRvcGljKCJFIiwgImUiKSkKICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKLSAgICAgICAgbVJlY29yZE5vR3JvdXBTb3J0QSA9IG5ldyBOb3RpZmljYXRpb25SZWNvcmQobmV3IFN0YXR1c0Jhck5vdGlmaWNhdGlvbigKLSAgICAgICAgICAgICAgICAicGFja2FnZSIsICJwYWNrYWdlIiwgMSwgbnVsbCwgMCwgMCwgMCwgbU5vdGlOb0dyb3VwU29ydEEsIHVzZXIpLCAwKTsKKyAgICAgICAgbVJlY29yZE5vR3JvdXBTb3J0QSA9IG5ldyBOb3RpZmljYXRpb25SZWNvcmQoZ2V0Q29udGV4dCgpLCBuZXcgU3RhdHVzQmFyTm90aWZpY2F0aW9uKAorICAgICAgICAgICAgICAgICJwYWNrYWdlIiwgInBhY2thZ2UiLCAxLCBudWxsLCAwLCAwLCAwLCBtTm90aU5vR3JvdXBTb3J0QSwgdXNlcikpOwogICAgIH0KIAogICAgIEBTbWFsbFRlc3QKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyUmVzdHJpY3Rpb25zVXRpbHNUZXN0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvcG0vVXNlclJlc3RyaWN0aW9uc1V0aWxzVGVzdC5qYXZhCmluZGV4IDU1NDJhNGYuLjViZGY2ZjcgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9wbS9Vc2VyUmVzdHJpY3Rpb25zVXRpbHNUZXN0LmphdmEKKysrIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL3BtL1VzZXJSZXN0cmljdGlvbnNVdGlsc1Rlc3QuamF2YQpAQCAtMTYsNiArMTYsNyBAQAogCiBwYWNrYWdlIGNvbS5hbmRyb2lkLnNlcnZlci5wbTsKIAoraW1wb3J0IGFuZHJvaWQub3MuVXNlckhhbmRsZTsKIGltcG9ydCBjb20uYW5kcm9pZC5zZXJ2ZXIuZGV2aWNlcG9saWN5LkRwbVRlc3RVdGlsczsKIAogaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwpAQCAtODcsMTAgKzg4LDI1IEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgdGVzdENhblByb2ZpbGVPd25lckNoYW5nZSgpIHsKLSAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZShVc2VyTWFuYWdlci5ESVNBTExPV19SRUNPUkRfQVVESU8pKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZShVc2VyTWFuYWdlci5ESVNBTExPV19XQUxMUEFQRVIpKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZShVc2VyTWFuYWdlci5ESVNBTExPV19BRERfVVNFUikpOwotICAgICAgICBhc3NlcnRUcnVlKFVzZXJSZXN0cmljdGlvbnNVdGlscy5jYW5Qcm9maWxlT3duZXJDaGFuZ2UoVXNlck1hbmFnZXIuRElTQUxMT1dfQURKVVNUX1ZPTFVNRSkpOworICAgICAgICBpbnQgdXNlciA9IFVzZXJIYW5kbGUuVVNFUl9TWVNURU07CisgICAgICAgIGFzc2VydEZhbHNlKFVzZXJSZXN0cmljdGlvbnNVdGlscy5jYW5Qcm9maWxlT3duZXJDaGFuZ2UoCisgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfUkVDT1JEX0FVRElPLCB1c2VyKSk7CisgICAgICAgIGFzc2VydEZhbHNlKFVzZXJSZXN0cmljdGlvbnNVdGlscy5jYW5Qcm9maWxlT3duZXJDaGFuZ2UoCisgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfV0FMTFBBUEVSLCB1c2VyKSk7CisgICAgICAgIGFzc2VydFRydWUoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZSgKKyAgICAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19BRERfVVNFUiwgdXNlcikpOworICAgICAgICBhc3NlcnRUcnVlKFVzZXJSZXN0cmljdGlvbnNVdGlscy5jYW5Qcm9maWxlT3duZXJDaGFuZ2UoCisgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfQURKVVNUX1ZPTFVNRSwgdXNlcikpOworCisgICAgICAgIHVzZXIgPSAxMDsKKyAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZSgKKyAgICAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19SRUNPUkRfQVVESU8sIHVzZXIpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZSgKKyAgICAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19XQUxMUEFQRVIsIHVzZXIpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2UoVXNlclJlc3RyaWN0aW9uc1V0aWxzLmNhblByb2ZpbGVPd25lckNoYW5nZSgKKyAgICAgICAgICAgICAgICBVc2VyTWFuYWdlci5ESVNBTExPV19BRERfVVNFUiwgdXNlcikpOworICAgICAgICBhc3NlcnRUcnVlKFVzZXJSZXN0cmljdGlvbnNVdGlscy5jYW5Qcm9maWxlT3duZXJDaGFuZ2UoCisgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIuRElTQUxMT1dfQURKVVNUX1ZPTFVNRSwgdXNlcikpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHRlc3RTb3J0VG9HbG9iYWxBbmRMb2NhbCgpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoYWJsZXNUZXN0LmphdmEgYi9zZXJ2aWNlcy90ZXN0cy9zZXJ2aWNlc3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9zZXJ2ZXIvc2VhcmNoL1NlYXJjaGFibGVzVGVzdC5qYXZhCmluZGV4IDc5YjkxMzUuLjBmOWJmMmYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3Rlc3RzL3NlcnZpY2VzdGVzdHMvc3JjL2NvbS9hbmRyb2lkL3NlcnZlci9zZWFyY2gvU2VhcmNoYWJsZXNUZXN0LmphdmEKKysrIGIvc2VydmljZXMvdGVzdHMvc2VydmljZXN0ZXN0cy9zcmMvY29tL2FuZHJvaWQvc2VydmVyL3NlYXJjaC9TZWFyY2hhYmxlc1Rlc3QuamF2YQpAQCAtNzIsNyArNzIsNyBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3ROb25TZWFyY2hhYmxlKCkgewogICAgICAgICAvLyB0ZXN0IGJhc2ljIGFycmF5ICYgaGFzaG1hcAogICAgICAgICBTZWFyY2hhYmxlcyBzZWFyY2hhYmxlcyA9IG5ldyBTZWFyY2hhYmxlcyhtQ29udGV4dCwgMCk7Ci0gICAgICAgIHNlYXJjaGFibGVzLmJ1aWxkU2VhcmNoYWJsZUxpc3QoKTsKKyAgICAgICAgc2VhcmNoYWJsZXMudXBkYXRlU2VhcmNoYWJsZUxpc3QoKTsKIAogICAgICAgICAvLyBjb25maXJtIHRoYXQgd2UgcmV0dXJuIG51bGwgZm9yIG5vbi1zZWFyY2h5IGFjdGl2aXRpZXMKICAgICAgICAgQ29tcG9uZW50TmFtZSBub25BY3Rpdml0eSA9IG5ldyBDb21wb25lbnROYW1lKApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgICAgIC8vIGJ1aWxkIGl0ZW0gbGlzdCB3aXRoIHJlYWwtd29ybGQgc291cmNlIGRhdGEKICAgICAgICAgbW9ja1BNLnNldFNlYXJjaGFibGVzTW9kZShNeU1vY2tQYWNrYWdlTWFuYWdlci5TRUFSQ0hBQkxFU19QQVNTVEhST1VHSCk7CiAgICAgICAgIFNlYXJjaGFibGVzIHNlYXJjaGFibGVzID0gbmV3IFNlYXJjaGFibGVzKG1vY2tDb250ZXh0LCAwKTsKLSAgICAgICAgc2VhcmNoYWJsZXMuYnVpbGRTZWFyY2hhYmxlTGlzdCgpOworICAgICAgICBzZWFyY2hhYmxlcy51cGRhdGVTZWFyY2hhYmxlTGlzdCgpOwogICAgICAgICAvLyB0ZXN0cyB3aXRoICJyZWFsIiBzZWFyY2hhYmxlcyAoZGVwcmVjYXRlLCB0aGlzIHNob3VsZCBiZSBhIHVuaXQgdGVzdCkKICAgICAgICAgQXJyYXlMaXN0PFNlYXJjaGFibGVJbmZvPiBzZWFyY2hhYmxlc0xpc3QgPSBzZWFyY2hhYmxlcy5nZXRTZWFyY2hhYmxlc0xpc3QoKTsKICAgICAgICAgaW50IGNvdW50ID0gc2VhcmNoYWJsZXNMaXN0LnNpemUoKTsKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAgICAgICAgIG1vY2tQTS5zZXRTZWFyY2hhYmxlc01vZGUoTXlNb2NrUGFja2FnZU1hbmFnZXIuU0VBUkNIQUJMRVNfTU9DS19aRVJPKTsKICAgICAgICAgU2VhcmNoYWJsZXMgc2VhcmNoYWJsZXMgPSBuZXcgU2VhcmNoYWJsZXMobW9ja0NvbnRleHQsIDApOwotICAgICAgICBzZWFyY2hhYmxlcy5idWlsZFNlYXJjaGFibGVMaXN0KCk7CisgICAgICAgIHNlYXJjaGFibGVzLnVwZGF0ZVNlYXJjaGFibGVMaXN0KCk7CiAgICAgICAgIEFycmF5TGlzdDxTZWFyY2hhYmxlSW5mbz4gc2VhcmNoYWJsZXNMaXN0ID0gc2VhcmNoYWJsZXMuZ2V0U2VhcmNoYWJsZXNMaXN0KCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoc2VhcmNoYWJsZXNMaXN0KTsKICAgICAgICAgTW9yZUFzc2VydHMuYXNzZXJ0RW1wdHkoc2VhcmNoYWJsZXNMaXN0KTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzYWdlU3RhdHNTZXJ2aWNlLmphdmEgYi9zZXJ2aWNlcy91c2FnZS9qYXZhL2NvbS9hbmRyb2lkL3NlcnZlci91c2FnZS9Vc2FnZVN0YXRzU2VydmljZS5qYXZhCmluZGV4IDJiMDkxOWIuLjNmOWQxNGQgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzYWdlU3RhdHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNhZ2VTdGF0c1NlcnZpY2UuamF2YQpAQCAtMzc0LDcgKzM3NCw3IEBACiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlcklkcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgZmluYWwgaW50IHVzZXJJZCA9IHVzZXJJZHNbaV07CiAgICAgICAgICAgICBMaXN0PFBhY2thZ2VJbmZvPiBwYWNrYWdlcyA9Ci0gICAgICAgICAgICAgICAgICAgIGdldENvbnRleHQoKS5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEluc3RhbGxlZFBhY2thZ2VzKAorICAgICAgICAgICAgICAgICAgICBnZXRDb250ZXh0KCkuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlTWFuYWdlci5HRVRfRElTQUJMRURfQ09NUE9ORU5UUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBhY2thZ2VNYW5hZ2VyLkdFVF9VTklOU1RBTExFRF9QQUNLQUdFUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySWQpOwpAQCAtNDE4LDcgKzQxOCw4IEBACiAKICAgICBwcml2YXRlIHZvaWQgbm90aWZ5QmF0dGVyeVN0YXRzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCwgYm9vbGVhbiBpZGxlKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnQgdWlkID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsIHVzZXJJZCk7CisgICAgICAgICAgICBmaW5hbCBpbnQgdWlkID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VVaWQocGFja2FnZU5hbWUsCisgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLCB1c2VySWQpOwogICAgICAgICAgICAgaWYgKGlkbGUpIHsKICAgICAgICAgICAgICAgICBtQmF0dGVyeVN0YXRzLm5vdGVFdmVudChCYXR0ZXJ5U3RhdHMuSGlzdG9yeUl0ZW0uRVZFTlRfUEFDS0FHRV9JTkFDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCB1aWQpOwpAQCAtNTQ3LDcgKzU0OCw4IEBACiAgICAgICAgICAgICBmaW5hbCBpbnQgdXNlckNvdW50ID0gbVVzZXJTdGF0ZS5zaXplKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZXJDb3VudDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmluYWwgVXNlclVzYWdlU3RhdHNTZXJ2aWNlIHNlcnZpY2UgPSBtVXNlclN0YXRlLnZhbHVlQXQoaSk7Ci0gICAgICAgICAgICAgICAgc2VydmljZS5vblRpbWVDaGFuZ2VkKGV4cGVjdGVkU3lzdGVtVGltZSwgYWN0dWFsU3lzdGVtVGltZSwgcmVzZXRCZWdpbklkbGVUaW1lKTsKKyAgICAgICAgICAgICAgICBzZXJ2aWNlLm9uVGltZUNoYW5nZWQoZXhwZWN0ZWRTeXN0ZW1UaW1lLCBhY3R1YWxTeXN0ZW1UaW1lLCBtU2NyZWVuT25UaW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRCZWdpbklkbGVUaW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1SZWFsVGltZVNuYXBzaG90ID0gYWN0dWFsUmVhbHRpbWU7CiAgICAgICAgICAgICBtU3lzdGVtVGltZVNuYXBzaG90ID0gYWN0dWFsU3lzdGVtVGltZTsKQEAgLTYxNCw5ICs2MTYsOCBAQAogICAgICAgICAgICAgLy8gdGhlIHN5bmMgYWRhcHRlciBpcyBhIHN5c3RlbSBwYWNrYWdlLgogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBwaSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKS5nZXRQYWNrYWdlSW5mbygKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCAwLCB1c2VySWQpOwotICAgICAgICAgICAgICAgIGlmIChwaSA9PSBudWxsIHx8IHBpLmFwcGxpY2F0aW9uSW5mbyA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAhcGkuYXBwbGljYXRpb25JbmZvLmlzU3lzdGVtQXBwKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VOYW1lLCBQYWNrYWdlTWFuYWdlci5NQVRDSF9TWVNURU1fT05MWSwgdXNlcklkKTsKKyAgICAgICAgICAgICAgICBpZiAocGkgPT0gbnVsbCB8fCBwaS5hcHBsaWNhdGlvbkluZm8gPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFwYWNrYWdlTmFtZS5lcXVhbHMocHJvdmlkZXJQa2dOYW1lKSkgewpAQCAtODYzLDggKzg2NCw4IEBACiAKICAgICAgICAgTGlzdDxBcHBsaWNhdGlvbkluZm8+IGFwcHM7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBQYXJjZWxlZExpc3RTbGljZTxBcHBsaWNhdGlvbkluZm8+IHNsaWNlCi0gICAgICAgICAgICAgICAgICAgID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldEluc3RhbGxlZEFwcGxpY2F0aW9ucygwLCB1c2VySWQpOworICAgICAgICAgICAgUGFyY2VsZWRMaXN0U2xpY2U8QXBwbGljYXRpb25JbmZvPiBzbGljZSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgICAgICAuZ2V0SW5zdGFsbGVkQXBwbGljYXRpb25zKFBhY2thZ2VNYW5hZ2VyLk1BVENIX1VOSU5TVEFMTEVEX1BBQ0tBR0VTLCB1c2VySWQpOwogICAgICAgICAgICAgaWYgKHNsaWNlID09IG51bGwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGludFswXTsKICAgICAgICAgICAgIH0KQEAgLTEyNjYsOCArMTI2Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgICJObyBwZXJtaXNzaW9uIHRvIGNoYW5nZSBhcHAgaWRsZSBzdGF0ZSIpOwogICAgICAgICAgICAgZmluYWwgbG9uZyB0b2tlbiA9IEJpbmRlci5jbGVhckNhbGxpbmdJZGVudGl0eSgpOwogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBQYWNrYWdlSW5mbyBwaSA9IEFwcEdsb2JhbHMuZ2V0UGFja2FnZU1hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldFBhY2thZ2VJbmZvKHBhY2thZ2VOYW1lLCAwLCB1c2VySWQpOworICAgICAgICAgICAgICAgIFBhY2thZ2VJbmZvIHBpID0gQXBwR2xvYmFscy5nZXRQYWNrYWdlTWFuYWdlcigpLmdldFBhY2thZ2VJbmZvKHBhY2thZ2VOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZU1hbmFnZXIuTUFUQ0hfVU5JTlNUQUxMRURfUEFDS0FHRVMsIHVzZXJJZCk7CiAgICAgICAgICAgICAgICAgaWYgKHBpID09IG51bGwpIHJldHVybjsKICAgICAgICAgICAgICAgICBVc2FnZVN0YXRzU2VydmljZS50aGlzLnNldEFwcElkbGUocGFja2FnZU5hbWUsIGlkbGUsIHVzZXJJZCk7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gcmUpIHsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL3VzYWdlL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYWdlL1VzZXJVc2FnZVN0YXRzU2VydmljZS5qYXZhIGIvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNlclVzYWdlU3RhdHNTZXJ2aWNlLmphdmEKaW5kZXggNTE4OGU1Zi4uMjgyMDRiMSAxMDA2NDQKLS0tIGEvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNlclVzYWdlU3RhdHNTZXJ2aWNlLmphdmEKKysrIGIvc2VydmljZXMvdXNhZ2UvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNhZ2UvVXNlclVzYWdlU3RhdHNTZXJ2aWNlLmphdmEKQEAgLTU5LDYgKzU5LDcgQEAKICAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgbUNvbnRleHQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBVc2FnZVN0YXRzRGF0YWJhc2UgbURhdGFiYXNlOwogICAgIHByaXZhdGUgZmluYWwgSW50ZXJ2YWxTdGF0c1tdIG1DdXJyZW50U3RhdHM7CisgICAgcHJpdmF0ZSBJbnRlcnZhbFN0YXRzIG1BcHBJZGxlUm9sbGluZ1dpbmRvdzsKICAgICBwcml2YXRlIGJvb2xlYW4gbVN0YXRzQ2hhbmdlZCA9IGZhbHNlOwogICAgIHByaXZhdGUgZmluYWwgVW5peENhbGVuZGFyIG1EYWlseUV4cGlyeURhdGU7CiAgICAgcHJpdmF0ZSBmaW5hbCBTdGF0c1VwZGF0ZWRMaXN0ZW5lciBtTGlzdGVuZXI7CkBAIC0xMzMsNiArMTM0LDggQEAKICAgICAgICAgICAgIHN0YXQudXBkYXRlQ29uZmlndXJhdGlvblN0YXRzKG51bGwsIHN0YXQubGFzdFRpbWVTYXZlZCk7CiAgICAgICAgIH0KIAorICAgICAgICByZWZyZXNoQXBwSWRsZVJvbGxpbmdXaW5kb3coY3VycmVudFRpbWVNaWxsaXMsIGRldmljZVVzYWdlVGltZSk7CisKICAgICAgICAgaWYgKG1EYXRhYmFzZS5pc05ld1VwZGF0ZSgpKSB7CiAgICAgICAgICAgICBpbml0aWFsaXplRGVmYXVsdHNGb3JBcHBzKGN1cnJlbnRUaW1lTWlsbGlzLCBkZXZpY2VVc2FnZVRpbWUsCiAgICAgICAgICAgICAgICAgICAgIG1EYXRhYmFzZS5pc0ZpcnN0VXBkYXRlKCkpOwpAQCAtMTQ4LDcgKzE1MSw3IEBACiAgICAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVEZWZhdWx0c0ZvckFwcHMobG9uZyBjdXJyZW50VGltZU1pbGxpcywgbG9uZyBkZXZpY2VVc2FnZVRpbWUsCiAgICAgICAgICAgICBib29sZWFuIGZpcnN0VXBkYXRlKSB7CiAgICAgICAgIFBhY2thZ2VNYW5hZ2VyIHBtID0gbUNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKTsKLSAgICAgICAgTGlzdDxQYWNrYWdlSW5mbz4gcGFja2FnZXMgPSBwbS5nZXRJbnN0YWxsZWRQYWNrYWdlcygwLCBtVXNlcklkKTsKKyAgICAgICAgTGlzdDxQYWNrYWdlSW5mbz4gcGFja2FnZXMgPSBwbS5nZXRJbnN0YWxsZWRQYWNrYWdlc0FzVXNlcigwLCBtVXNlcklkKTsKICAgICAgICAgZmluYWwgaW50IHBhY2thZ2VDb3VudCA9IHBhY2thZ2VzLnNpemUoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWNrYWdlQ291bnQ7IGkrKykgewogICAgICAgICAgICAgZmluYWwgUGFja2FnZUluZm8gcGkgPSBwYWNrYWdlcy5nZXQoaSk7CkBAIC0xNTgsMTggKzE2MSwyNCBAQAogICAgICAgICAgICAgICAgIGZvciAoSW50ZXJ2YWxTdGF0cyBzdGF0cyA6IG1DdXJyZW50U3RhdHMpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlKHBhY2thZ2VOYW1lLCBjdXJyZW50VGltZU1pbGxpcywgRXZlbnQuU1lTVEVNX0lOVEVSQUNUSU9OKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlQmVnaW5JZGxlVGltZShwYWNrYWdlTmFtZSwgZGV2aWNlVXNhZ2VUaW1lKTsKLSAgICAgICAgICAgICAgICAgICAgbVN0YXRzQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbUFwcElkbGVSb2xsaW5nV2luZG93LnVwZGF0ZShwYWNrYWdlTmFtZSwgY3VycmVudFRpbWVNaWxsaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBFdmVudC5TWVNURU1fSU5URVJBQ1RJT04pOworICAgICAgICAgICAgICAgIG1BcHBJZGxlUm9sbGluZ1dpbmRvdy51cGRhdGVCZWdpbklkbGVUaW1lKHBhY2thZ2VOYW1lLCBkZXZpY2VVc2FnZVRpbWUpOworICAgICAgICAgICAgICAgIG1TdGF0c0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIFBlcnNpc3QgdGhlIG5ldyBPVEEtcmVsYXRlZCBhY2Nlc3Mgc3RhdHMuCiAgICAgICAgIHBlcnNpc3RBY3RpdmVTdGF0cygpOwogICAgIH0KIAotICAgIHZvaWQgb25UaW1lQ2hhbmdlZChsb25nIG9sZFRpbWUsIGxvbmcgbmV3VGltZSwgYm9vbGVhbiByZXNldEJlZ2luSWRsZVRpbWUpIHsKKyAgICB2b2lkIG9uVGltZUNoYW5nZWQobG9uZyBvbGRUaW1lLCBsb25nIG5ld1RpbWUsIGxvbmcgZGV2aWNlVXNhZ2VUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHJlc2V0QmVnaW5JZGxlVGltZSkgewogICAgICAgICBwZXJzaXN0QWN0aXZlU3RhdHMoKTsKICAgICAgICAgbURhdGFiYXNlLm9uVGltZUNoYW5nZWQobmV3VGltZSAtIG9sZFRpbWUpOwogICAgICAgICBsb2FkQWN0aXZlU3RhdHMobmV3VGltZSwgcmVzZXRCZWdpbklkbGVUaW1lKTsKKyAgICAgICAgcmVmcmVzaEFwcElkbGVSb2xsaW5nV2luZG93KG5ld1RpbWUsIGRldmljZVVzYWdlVGltZSk7CiAgICAgfQogCiAgICAgdm9pZCByZXBvcnRFdmVudChVc2FnZUV2ZW50cy5FdmVudCBldmVudCwgbG9uZyBkZXZpY2VVc2FnZVRpbWUpIHsKQEAgLTE4MSw3ICsxOTAsNyBAQAogCiAgICAgICAgIGlmIChldmVudC5tVGltZVN0YW1wID49IG1EYWlseUV4cGlyeURhdGUuZ2V0VGltZUluTWlsbGlzKCkpIHsKICAgICAgICAgICAgIC8vIE5lZWQgdG8gcm9sbG92ZXIKLSAgICAgICAgICAgIHJvbGxvdmVyU3RhdHMoZXZlbnQubVRpbWVTdGFtcCk7CisgICAgICAgICAgICByb2xsb3ZlclN0YXRzKGV2ZW50Lm1UaW1lU3RhbXAsIGRldmljZVVzYWdlVGltZSk7CiAgICAgICAgIH0KIAogICAgICAgICBmaW5hbCBJbnRlcnZhbFN0YXRzIGN1cnJlbnREYWlseVN0YXRzID0gbUN1cnJlbnRTdGF0c1tVc2FnZVN0YXRzTWFuYWdlci5JTlRFUlZBTF9EQUlMWV07CkBAIC0yMTEsNiArMjIwLDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoZXZlbnQubUV2ZW50VHlwZSAhPSBFdmVudC5DT05GSUdVUkFUSU9OX0NIQU5HRSkgeworICAgICAgICAgICAgbUFwcElkbGVSb2xsaW5nV2luZG93LnVwZGF0ZShldmVudC5tUGFja2FnZSwgZXZlbnQubVRpbWVTdGFtcCwgZXZlbnQubUV2ZW50VHlwZSk7CisgICAgICAgICAgICBtQXBwSWRsZVJvbGxpbmdXaW5kb3cudXBkYXRlQmVnaW5JZGxlVGltZShldmVudC5tUGFja2FnZSwgZGV2aWNlVXNhZ2VUaW1lKTsKKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeVN0YXRzQ2hhbmdlZCgpOwogICAgIH0KIApAQCAtMjIyLDYgKzIzNiw3IEBACiAgICAgICAgIGZvciAoSW50ZXJ2YWxTdGF0cyBzdGF0cyA6IG1DdXJyZW50U3RhdHMpIHsKICAgICAgICAgICAgIHN0YXRzLnVwZGF0ZUJlZ2luSWRsZVRpbWUocGFja2FnZU5hbWUsIGJlZ2luSWRsZVRpbWUpOwogICAgICAgICB9CisgICAgICAgIG1BcHBJZGxlUm9sbGluZ1dpbmRvdy51cGRhdGVCZWdpbklkbGVUaW1lKHBhY2thZ2VOYW1lLCBiZWdpbklkbGVUaW1lKTsKICAgICAgICAgbm90aWZ5U3RhdHNDaGFuZ2VkKCk7CiAgICAgfQogCkBAIC0yMjksNiArMjQ0LDcgQEAKICAgICAgICAgZm9yIChJbnRlcnZhbFN0YXRzIHN0YXRzIDogbUN1cnJlbnRTdGF0cykgewogICAgICAgICAgICAgc3RhdHMudXBkYXRlU3lzdGVtTGFzdFVzZWRUaW1lKHBhY2thZ2VOYW1lLCBsYXN0VXNlZFRpbWUpOwogICAgICAgICB9CisgICAgICAgIG1BcHBJZGxlUm9sbGluZ1dpbmRvdy51cGRhdGVTeXN0ZW1MYXN0VXNlZFRpbWUocGFja2FnZU5hbWUsIGxhc3RVc2VkVGltZSk7CiAgICAgICAgIG5vdGlmeVN0YXRzQ2hhbmdlZCgpOwogICAgIH0KIApAQCAtMzg3LDkgKzQwMyw4IEBACiAgICAgfQogCiAgICAgbG9uZyBnZXRCZWdpbklkbGVUaW1lKFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICBmaW5hbCBJbnRlcnZhbFN0YXRzIHllYXJseSA9IG1DdXJyZW50U3RhdHNbVXNhZ2VTdGF0c01hbmFnZXIuSU5URVJWQUxfWUVBUkxZXTsKICAgICAgICAgVXNhZ2VTdGF0cyBwYWNrYWdlVXNhZ2U7Ci0gICAgICAgIGlmICgocGFja2FnZVVzYWdlID0geWVhcmx5LnBhY2thZ2VTdGF0cy5nZXQocGFja2FnZU5hbWUpKSA9PSBudWxsKSB7CisgICAgICAgIGlmICgocGFja2FnZVVzYWdlID0gbUFwcElkbGVSb2xsaW5nV2luZG93LnBhY2thZ2VTdGF0cy5nZXQocGFja2FnZU5hbWUpKSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gcGFja2FnZVVzYWdlLmdldEJlZ2luSWRsZVRpbWUoKTsKQEAgLTM5Nyw5ICs0MTIsOCBAQAogICAgIH0KIAogICAgIGxvbmcgZ2V0U3lzdGVtTGFzdFVzZWRUaW1lKFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICBmaW5hbCBJbnRlcnZhbFN0YXRzIHllYXJseSA9IG1DdXJyZW50U3RhdHNbVXNhZ2VTdGF0c01hbmFnZXIuSU5URVJWQUxfWUVBUkxZXTsKICAgICAgICAgVXNhZ2VTdGF0cyBwYWNrYWdlVXNhZ2U7Ci0gICAgICAgIGlmICgocGFja2FnZVVzYWdlID0geWVhcmx5LnBhY2thZ2VTdGF0cy5nZXQocGFja2FnZU5hbWUpKSA9PSBudWxsKSB7CisgICAgICAgIGlmICgocGFja2FnZVVzYWdlID0gbUFwcElkbGVSb2xsaW5nV2luZG93LnBhY2thZ2VTdGF0cy5nZXQocGFja2FnZU5hbWUpKSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gcGFja2FnZVVzYWdlLmdldExhc3RUaW1lU3lzdGVtVXNlZCgpOwpAQCAtNDIwLDcgKzQzNCw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcm9sbG92ZXJTdGF0cyhmaW5hbCBsb25nIGN1cnJlbnRUaW1lTWlsbGlzKSB7CisgICAgcHJpdmF0ZSB2b2lkIHJvbGxvdmVyU3RhdHMoZmluYWwgbG9uZyBjdXJyZW50VGltZU1pbGxpcywgZmluYWwgbG9uZyBkZXZpY2VVc2FnZVRpbWUpIHsKICAgICAgICAgZmluYWwgbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKICAgICAgICAgU2xvZy5pKFRBRywgbUxvZ1ByZWZpeCArICJSb2xsaW5nIG92ZXIgdXNhZ2Ugc3RhdHMiKTsKIApAQCAtNDYxLDYgKzQ3NSw4IEBACiAgICAgICAgIH0KICAgICAgICAgcGVyc2lzdEFjdGl2ZVN0YXRzKCk7CiAKKyAgICAgICAgcmVmcmVzaEFwcElkbGVSb2xsaW5nV2luZG93KGN1cnJlbnRUaW1lTWlsbGlzLCBkZXZpY2VVc2FnZVRpbWUpOworCiAgICAgICAgIGZpbmFsIGxvbmcgdG90YWxUaW1lID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBzdGFydFRpbWU7CiAgICAgICAgIFNsb2cuaShUQUcsIG1Mb2dQcmVmaXggKyAiUm9sbGluZyBvdmVyIHVzYWdlIHN0YXRzIGNvbXBsZXRlLiBUb29rICIgKyB0b3RhbFRpbWUKICAgICAgICAgICAgICAgICArICIgbWlsbGlzZWNvbmRzIik7CkBAIC01MDMsNiArNTE5LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBtU3RhdHNDaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIHVwZGF0ZVJvbGxvdmVyRGVhZGxpbmUoKTsKICAgICB9CkBAIC01MTYsNiArNTMzLDY5IEBACiAgICAgICAgICAgICAgICAgbURhaWx5RXhwaXJ5RGF0ZS5nZXRUaW1lSW5NaWxsaXMoKSArICIpIik7CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBtZXJnZVBhY2thZ2VTdGF0cyhJbnRlcnZhbFN0YXRzIGRzdCwgSW50ZXJ2YWxTdGF0cyBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBsb25nIGRldmljZVVzYWdlVGltZSkgeworICAgICAgICBkc3QuZW5kVGltZSA9IE1hdGgubWF4KGRzdC5lbmRUaW1lLCBzcmMuZW5kVGltZSk7CisKKyAgICAgICAgZmluYWwgaW50IHNyY1BhY2thZ2VDb3VudCA9IHNyYy5wYWNrYWdlU3RhdHMuc2l6ZSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY1BhY2thZ2VDb3VudDsgaSsrKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWUgPSBzcmMucGFja2FnZVN0YXRzLmtleUF0KGkpOworICAgICAgICAgICAgZmluYWwgVXNhZ2VTdGF0cyBzcmNTdGF0cyA9IHNyYy5wYWNrYWdlU3RhdHMudmFsdWVBdChpKTsKKyAgICAgICAgICAgIFVzYWdlU3RhdHMgZHN0U3RhdHMgPSBkc3QucGFja2FnZVN0YXRzLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBpZiAoZHN0U3RhdHMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGRzdFN0YXRzID0gbmV3IFVzYWdlU3RhdHMoc3JjU3RhdHMpOworICAgICAgICAgICAgICAgIGRzdC5wYWNrYWdlU3RhdHMucHV0KHBhY2thZ2VOYW1lLCBkc3RTdGF0cyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRzdFN0YXRzLmFkZChzcmMucGFja2FnZVN0YXRzLnZhbHVlQXQoaSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBBcHAgaWRsZSB0aW1lcyBjYW4gbm90IGJlZ2luIGluIHRoZSBmdXR1cmUuIFRoaXMgaGFwcGVucyBpZiB3ZSBoYWQgYSB0aW1lIGNoYW5nZS4KKyAgICAgICAgICAgIGlmIChkc3RTdGF0cy5tQmVnaW5JZGxlVGltZSA+IGRldmljZVVzYWdlVGltZSkgeworICAgICAgICAgICAgICAgIGRzdFN0YXRzLm1CZWdpbklkbGVUaW1lID0gZGV2aWNlVXNhZ2VUaW1lOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwIGlkbGUgb3BlcmF0ZXMgb24gYSByb2xsaW5nIHdpbmRvdyBvZiB0aW1lLiBXaGVuIHdlIHJvbGwgb3ZlciB0aW1lLCB3ZSBlbmQgdXAgd2l0aCBhCisgICAgICogcGVyaW9kIG9mIHRpbWUgd2hlcmUgaW4tbWVtb3J5IHN0YXRzIGFyZSBlbXB0eSBhbmQgd2UgZG9uJ3QgaGl0IHRoZSBkaXNrIGZvciBvbGRlciBzdGF0cworICAgICAqIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBTdWRkZW5seSBhbGwgYXBwcyB3aWxsIGJlY29tZSBpZGxlLgorICAgICAqCisgICAgICogSW5zdGVhZCwgYXQgdGltZXMgd2UgZG8gYSBkZWVwIHF1ZXJ5IHRvIGZpbmQgYWxsIHRoZSBhcHBzIHRoYXQgaGF2ZSBydW4gaW4gdGhlIHBhc3QgZmV3CisgICAgICogZGF5cyBhbmQga2VlcCB0aGUgY2FjaGVkIGRhdGEgdXAgdG8gZGF0ZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjdXJyZW50VGltZU1pbGxpcworICAgICAqLworICAgIHZvaWQgcmVmcmVzaEFwcElkbGVSb2xsaW5nV2luZG93KGZpbmFsIGxvbmcgY3VycmVudFRpbWVNaWxsaXMsIGZpbmFsIGxvbmcgZGV2aWNlVXNhZ2VUaW1lKSB7CisgICAgICAgIC8vIFN0YXJ0IHRoZSByb2xsaW5nIHdpbmRvdyBmb3IgQXBwSWRsZSByZXF1ZXN0cy4KKyAgICAgICAgTGlzdDxJbnRlcnZhbFN0YXRzPiBzdGF0cyA9IG1EYXRhYmFzZS5xdWVyeVVzYWdlU3RhdHMoVXNhZ2VTdGF0c01hbmFnZXIuSU5URVJWQUxfREFJTFksCisgICAgICAgICAgICAgICAgY3VycmVudFRpbWVNaWxsaXMgLSAoMTAwMCAqIDYwICogNjAgKiAyNCAqIDIpLCBjdXJyZW50VGltZU1pbGxpcywKKyAgICAgICAgICAgICAgICBuZXcgU3RhdENvbWJpbmVyPEludGVydmFsU3RhdHM+KCkgeworICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgY29tYmluZShJbnRlcnZhbFN0YXRzIHN0YXRzLCBib29sZWFuIG11dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxJbnRlcnZhbFN0YXRzPiBhY2N1bXVsYXRlZFJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJ2YWxTdGF0cyBhY2N1bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY2N1bXVsYXRlZFJlc3VsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2N1bSA9IG5ldyBJbnRlcnZhbFN0YXRzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW0uYmVnaW5UaW1lID0gc3RhdHMuYmVnaW5UaW1lOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0LmFkZChhY2N1bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VtID0gYWNjdW11bGF0ZWRSZXN1bHQuZ2V0KDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZVBhY2thZ2VTdGF0cyhhY2N1bSwgc3RhdHMsIGRldmljZVVzYWdlVGltZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBpZiAoc3RhdHMgPT0gbnVsbCB8fCBzdGF0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1BcHBJZGxlUm9sbGluZ1dpbmRvdyA9IG5ldyBJbnRlcnZhbFN0YXRzKCk7CisgICAgICAgICAgICBtZXJnZVBhY2thZ2VTdGF0cyhtQXBwSWRsZVJvbGxpbmdXaW5kb3csCisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50U3RhdHNbVXNhZ2VTdGF0c01hbmFnZXIuSU5URVJWQUxfWUVBUkxZXSwgZGV2aWNlVXNhZ2VUaW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1BcHBJZGxlUm9sbGluZ1dpbmRvdyA9IHN0YXRzLmdldCgwKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vCiAgICAgLy8gLS0gRFVNUCByZWxhdGVkIG1ldGhvZHMgLS0KICAgICAvLwpAQCAtNTM4LDYgKzYxOCw5IEBACiAgICAgICAgICAgICBwdy5wcmludGxuKCIgc3RhdHMiKTsKICAgICAgICAgICAgIHByaW50SW50ZXJ2YWxTdGF0cyhwdywgbUN1cnJlbnRTdGF0c1tpbnRlcnZhbF0sIHNjcmVlbk9uVGltZSwgdHJ1ZSk7CiAgICAgICAgIH0KKworICAgICAgICBwdy5wcmludGxuKCJBcHBJZGxlUm9sbGluZ1dpbmRvdyBjYWNoZSIpOworICAgICAgICBwcmludEludGVydmFsU3RhdHMocHcsIG1BcHBJZGxlUm9sbGluZ1dpbmRvdywgc2NyZWVuT25UaW1lLCB0cnVlKTsKICAgICB9CiAKICAgICBwcml2YXRlIFN0cmluZyBmb3JtYXREYXRlVGltZShsb25nIGRhdGVUaW1lLCBib29sZWFuIHByZXR0eSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvdXNiL2phdmEvY29tL2FuZHJvaWQvc2VydmVyL3VzYi9Vc2JEZXZpY2VNYW5hZ2VyLmphdmEgYi9zZXJ2aWNlcy91c2IvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNiL1VzYkRldmljZU1hbmFnZXIuamF2YQppbmRleCBjNzM0ZmFiLi4zNWEwNDY0IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy91c2IvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNiL1VzYkRldmljZU1hbmFnZXIuamF2YQorKysgYi9zZXJ2aWNlcy91c2IvamF2YS9jb20vYW5kcm9pZC9zZXJ2ZXIvdXNiL1VzYkRldmljZU1hbmFnZXIuamF2YQpAQCAtODU4LDcgKzg1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE9uZ29pbmcodHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VGlja2VyKHRpdGxlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREZWZhdWx0cygwKSAgLy8gcGxlYXNlIGJlIHF1aWV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByaW9yaXR5KE5vdGlmaWNhdGlvbi5QUklPUklUWV9MT1cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFByaW9yaXR5KE5vdGlmaWNhdGlvbi5QUklPUklUWV9ERUZBVUxUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb2xvcihtQ29udGV4dC5nZXRDb2xvcigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbS5hbmRyb2lkLmludGVybmFsLlIuY29sb3Iuc3lzdGVtX25vdGlmaWNhdGlvbl9hY2NlbnRfY29sb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUodGl0bGUpCmRpZmYgLS1naXQgYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9DYWxsLmphdmEgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9DYWxsLmphdmEKaW5kZXggOGExYTU1My4uYWE5NWUxZCAxMDA2NDQKLS0tIGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vQ2FsbC5qYXZhCisrKyBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0NhbGwuamF2YQpAQCAtMjQyLDggKzI0MiwxMyBAQAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfSElHSF9ERUZfQVVESU8gPSAweDAwMDAwMDEwOwogCisgICAgICAgIC8qKgorICAgICAgICAgKiBXaGV0aGVyIHRoZSBjYWxsIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgd29yayBwcm9maWxlLgorICAgICAgICAgKi8KKyAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUFJPUEVSVFlfV09SS19DQUxMID0gMHgwMDAwMDAyMDsKKwogICAgICAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAvLyBOZXh0IFBST1BFUlRZIHZhbHVlOiAweDAwMDAwMDIwCisgICAgICAgIC8vIE5leHQgUFJPUEVSVFkgdmFsdWU6IDB4MDAwMDAwNDAKICAgICAgICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAgICAgICBwcml2YXRlIGZpbmFsIFVyaSBtSGFuZGxlOwpAQCAtMjY5LDcgKzI3NCw3IEBACiAgICAgICAgICAqIEByZXR1cm4gV2hldGhlciB0aGUgc3BlY2lmaWVkIGNhcGFiaWxpdHkgaXMgc3VwcG9ydGVkLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhbihpbnQgY2FwYWJpbGl0aWVzLCBpbnQgY2FwYWJpbGl0eSkgewotICAgICAgICAgICAgcmV0dXJuIChjYXBhYmlsaXRpZXMgJiBjYXBhYmlsaXR5KSAhPSAwOworICAgICAgICAgICAgcmV0dXJuIChjYXBhYmlsaXRpZXMgJiBjYXBhYmlsaXR5KSA9PSBjYXBhYmlsaXR5OwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC0zNTEsNyArMzU2LDcgQEAKICAgICAgICAgICogQHJldHVybiBXaGV0aGVyIHRoZSBzcGVjaWZpZWQgcHJvcGVydHkgaXMgc3VwcG9ydGVkLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1Byb3BlcnR5KGludCBwcm9wZXJ0aWVzLCBpbnQgcHJvcGVydHkpIHsKLSAgICAgICAgICAgIHJldHVybiAocHJvcGVydGllcyAmIHByb3BlcnR5KSAhPSAwOworICAgICAgICAgICAgcmV0dXJuIChwcm9wZXJ0aWVzICYgcHJvcGVydHkpID09IHByb3BlcnR5OwogICAgICAgICB9CiAKICAgICAgICAgLyoqCkBAIC02ODQsNyArNjg5LDcgQEAKICAgICBwcml2YXRlIGludCBtU3RhdGU7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gbUNhbm5lZFRleHRSZXNwb25zZXMgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIG1SZW1haW5pbmdQb3N0RGlhbFNlcXVlbmNlOwotICAgIHByaXZhdGUgSW5DYWxsU2VydmljZS5WaWRlb0NhbGwgbVZpZGVvQ2FsbDsKKyAgICBwcml2YXRlIFZpZGVvQ2FsbEltcGwgbVZpZGVvQ2FsbEltcGw7CiAgICAgcHJpdmF0ZSBEZXRhaWxzIG1EZXRhaWxzOwogCiAgICAgLyoqCkBAIC04OTcsNyArOTAyLDcgQEAKICAgICAgKiBAcmV0dXJuIEFuIHtAY29kZSBDYWxsLlZpZGVvQ2FsbH0uCiAgICAgICovCiAgICAgcHVibGljIEluQ2FsbFNlcnZpY2UuVmlkZW9DYWxsIGdldFZpZGVvQ2FsbCgpIHsKLSAgICAgICAgcmV0dXJuIG1WaWRlb0NhbGw7CisgICAgICAgIHJldHVybiBtVmlkZW9DYWxsSW1wbDsKICAgICB9CiAKICAgICAvKioKQEAgLTEwMjgsMTAgKzEwMzMsMTQgQEAKICAgICAgICAgICAgIGNhbm5lZFRleHRSZXNwb25zZXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQogCisgICAgICAgIFZpZGVvQ2FsbEltcGwgbmV3VmlkZW9DYWxsSW1wbCA9IHBhcmNlbGFibGVDYWxsLmdldFZpZGVvQ2FsbEltcGwoKTsKICAgICAgICAgYm9vbGVhbiB2aWRlb0NhbGxDaGFuZ2VkID0gcGFyY2VsYWJsZUNhbGwuaXNWaWRlb0NhbGxQcm92aWRlckNoYW5nZWQoKSAmJgotICAgICAgICAgICAgICAgICFPYmplY3RzLmVxdWFscyhtVmlkZW9DYWxsLCBwYXJjZWxhYmxlQ2FsbC5nZXRWaWRlb0NhbGwodGhpcykpOworICAgICAgICAgICAgICAgICFPYmplY3RzLmVxdWFscyhtVmlkZW9DYWxsSW1wbCwgbmV3VmlkZW9DYWxsSW1wbCk7CiAgICAgICAgIGlmICh2aWRlb0NhbGxDaGFuZ2VkKSB7Ci0gICAgICAgICAgICBtVmlkZW9DYWxsID0gcGFyY2VsYWJsZUNhbGwuZ2V0VmlkZW9DYWxsKHRoaXMpOworICAgICAgICAgICAgbVZpZGVvQ2FsbEltcGwgPSBuZXdWaWRlb0NhbGxJbXBsOworICAgICAgICB9CisgICAgICAgIGlmIChtVmlkZW9DYWxsSW1wbCAhPSBudWxsKSB7CisgICAgICAgICAgICBtVmlkZW9DYWxsSW1wbC5zZXRWaWRlb1N0YXRlKGdldERldGFpbHMoKS5nZXRWaWRlb1N0YXRlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IHN0YXRlID0gcGFyY2VsYWJsZUNhbGwuZ2V0U3RhdGUoKTsKQEAgLTEwODEsNyArMTA5MCw3IEBACiAgICAgICAgICAgICBmaXJlQ2FubmVkVGV4dFJlc3BvbnNlc0xvYWRlZChtQ2FubmVkVGV4dFJlc3BvbnNlcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZpZGVvQ2FsbENoYW5nZWQpIHsKLSAgICAgICAgICAgIGZpcmVWaWRlb0NhbGxDaGFuZ2VkKG1WaWRlb0NhbGwpOworICAgICAgICAgICAgZmlyZVZpZGVvQ2FsbENoYW5nZWQobVZpZGVvQ2FsbEltcGwpOwogICAgICAgICB9CiAgICAgICAgIGlmIChwYXJlbnRDaGFuZ2VkKSB7CiAgICAgICAgICAgICBmaXJlUGFyZW50Q2hhbmdlZChnZXRQYXJlbnQoKSk7CmRpZmYgLS1naXQgYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uLmphdmEgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9Db25uZWN0aW9uLmphdmEKaW5kZXggMTdiZDA4Yy4uZGViOThmNCAxMDA2NDQKLS0tIGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vQ29ubmVjdGlvbi5qYXZhCisrKyBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0Nvbm5lY3Rpb24uamF2YQpAQCAtMjk0LDcgKzI5NCw3IEBACiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuKGludCBjYXBhYmlsaXRpZXMsIGludCBjYXBhYmlsaXR5KSB7Ci0gICAgICAgIHJldHVybiAoY2FwYWJpbGl0aWVzICYgY2FwYWJpbGl0eSkgIT0gMDsKKyAgICAgICAgcmV0dXJuIChjYXBhYmlsaXRpZXMgJiBjYXBhYmlsaXR5KSA9PSBjYXBhYmlsaXR5OwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vRGVmYXVsdERpYWxlck1hbmFnZXIuamF2YSBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0RlZmF1bHREaWFsZXJNYW5hZ2VyLmphdmEKaW5kZXggNTg1MmI4ZS4uYTkxNWQzNyAxMDA2NDQKLS0tIGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vRGVmYXVsdERpYWxlck1hbmFnZXIuamF2YQorKysgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9EZWZhdWx0RGlhbGVyTWFuYWdlci5qYXZhCkBAIC0yMDcsOCArMjA3LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICAgICAgZmluYWwgTGlzdDxSZXNvbHZlSW5mbz4gcmVzb2x2ZUluZm9MaXN0ID0KLSAgICAgICAgICAgICAgICBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkucXVlcnlJbnRlbnRBY3Rpdml0aWVzKGludGVudCwgMCk7CisgICAgICAgIGZpbmFsIExpc3Q8UmVzb2x2ZUluZm8+IHJlc29sdmVJbmZvTGlzdCA9IGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKQorICAgICAgICAgICAgICAgIC5xdWVyeUludGVudEFjdGl2aXRpZXMoaW50ZW50LCAwKTsKICAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHJlc29sdmVJbmZvTGlzdC5zaXplKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgIGZpbmFsIEFjdGl2aXR5SW5mbyBpbmZvID0gcmVzb2x2ZUluZm9MaXN0LmdldChpKS5hY3Rpdml0eUluZm87CmRpZmYgLS1naXQgYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlLmphdmEgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9JbkNhbGxTZXJ2aWNlLmphdmEKaW5kZXggNTA4NzA4MC4uNDI2YjI0MCAxMDA2NDQKLS0tIGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vSW5DYWxsU2VydmljZS5qYXZhCisrKyBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL0luQ2FsbFNlcnZpY2UuamF2YQpAQCAtNDksNyArNDksNyBAQAogICogPHByZT4KICAqIHtAY29kZQogICogPHNlcnZpY2UgYW5kcm9pZDpuYW1lPSJ5b3VyLnBhY2thZ2UuWW91ckluQ2FsbFNlcnZpY2VJbXBsZW1lbnRhdGlvbiIKLSAqICAgICAgICAgIGFuZHJvaWQ6cGVybWlzc2lvbj0iYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfSU5fQ0FMTF9TRVJWSUNFIj4KKyAqICAgICAgICAgIGFuZHJvaWQ6cGVybWlzc2lvbj0iYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfSU5DQUxMX1NFUlZJQ0UiPgogICogICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZWxlY29tLklOX0NBTExfU0VSVklDRV9VSSIgYW5kcm9pZDp2YWx1ZT0idHJ1ZSIgLz4KICAqICAgICAgPGludGVudC1maWx0ZXI+CiAgKiAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZWxlY29tLkluQ2FsbFNlcnZpY2UiLz4KZGlmZiAtLWdpdCBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1BhcmNlbGFibGVDYWxsLmphdmEgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9QYXJjZWxhYmxlQ2FsbC5qYXZhCmluZGV4IDhjZjRhZWIuLjRhNmZkN2MgMTAwNjQ0Ci0tLSBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1BhcmNlbGFibGVDYWxsLmphdmEKKysrIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vUGFyY2VsYWJsZUNhbGwuamF2YQpAQCAtNDgsNyArNDgsNyBAQAogICAgIHByaXZhdGUgZmluYWwgUGhvbmVBY2NvdW50SGFuZGxlIG1BY2NvdW50SGFuZGxlOwogICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBtSXNWaWRlb0NhbGxQcm92aWRlckNoYW5nZWQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBJVmlkZW9Qcm92aWRlciBtVmlkZW9DYWxsUHJvdmlkZXI7Ci0gICAgcHJpdmF0ZSBJbkNhbGxTZXJ2aWNlLlZpZGVvQ2FsbCBtVmlkZW9DYWxsOworICAgIHByaXZhdGUgVmlkZW9DYWxsSW1wbCBtVmlkZW9DYWxsOwogICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG1QYXJlbnRDYWxsSWQ7CiAgICAgcHJpdmF0ZSBmaW5hbCBMaXN0PFN0cmluZz4gbUNoaWxkQ2FsbElkczsKICAgICBwcml2YXRlIGZpbmFsIFN0YXR1c0hpbnRzIG1TdGF0dXNIaW50czsKQEAgLTE3OSwxMiArMTc5LDEzIEBACiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBmb3IgcmVtb3RlbHkgY29tbXVuaWNhdGluZyB0aHJvdWdoIHRoZSB2aWRlbyBjYWxsIHByb3ZpZGVyJ3MgYmluZGVyLgorCiAgICAgICogQHJldHVybiBUaGUgdmlkZW8gY2FsbC4KICAgICAgKi8KLSAgICBwdWJsaWMgSW5DYWxsU2VydmljZS5WaWRlb0NhbGwgZ2V0VmlkZW9DYWxsKENhbGwgY2FsbCkgeworICAgIHB1YmxpYyBWaWRlb0NhbGxJbXBsIGdldFZpZGVvQ2FsbEltcGwoKSB7CiAgICAgICAgIGlmIChtVmlkZW9DYWxsID09IG51bGwgJiYgbVZpZGVvQ2FsbFByb3ZpZGVyICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbVZpZGVvQ2FsbCA9IG5ldyBWaWRlb0NhbGxJbXBsKG1WaWRlb0NhbGxQcm92aWRlciwgY2FsbCk7CisgICAgICAgICAgICAgICAgbVZpZGVvQ2FsbCA9IG5ldyBWaWRlb0NhbGxJbXBsKG1WaWRlb0NhbGxQcm92aWRlcik7CiAgICAgICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gaWdub3JlZCkgewogICAgICAgICAgICAgICAgIC8vIElnbm9yZSBSZW1vdGVFeGNlcHRpb24uCiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9QaG9uZUFjY291bnQuamF2YSBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudC5qYXZhCmluZGV4IDVlY2QyYjUuLmI1NmNlNzMgMTAwNjQ0Ci0tLSBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudC5qYXZhCisrKyBiL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1Bob25lQWNjb3VudC5qYXZhCkBAIC0xNTYsNiArMTU2LDIwIEBACiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FQQUJJTElUWV9FTUVSR0VOQ1lfQ0FMTFNfT05MWSA9IDB4ODA7CiAKICAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRpbmcgdGhhdCBmb3IgdGhpcyB7QGNvZGUgUGhvbmVBY2NvdW50fSwgdGhlIGFiaWxpdHkgdG8gbWFrZSBhIHZpZGVvIGNhbGwgdG8gYQorICAgICAqIG51bWJlciByZWxpZXMgb24gcHJlc2VuY2UuICBTaG91bGQgb25seSBiZSBzZXQgaWYgdGhlIHtAY29kZSBQaG9uZUFjY291bnR9IGFsc28gaGFzCisgICAgICoge0BsaW5rICNDQVBBQklMSVRZX1ZJREVPX0NBTExJTkd9LgorICAgICAqIDxwPgorICAgICAqIFdoZW4gc2V0LCB0aGUge0BsaW5rIENvbm5lY3Rpb25TZXJ2aWNlfSBpcyByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgdGhlCisgICAgICoge0BsaW5rIGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5EYXRhI0NBUlJJRVJfUFJFU0VOQ0VfVlRfQ0FQQUJMRX0gYml0IG9uIHRoZQorICAgICAqIHtAbGluayBhbmRyb2lkLnByb3ZpZGVyLkNvbnRhY3RzQ29udHJhY3QuRGF0YSNDQVJSSUVSX1BSRVNFTkNFfSBjb2x1bW4gdG8gaW5kaWNhdGUgd2hldGhlcgorICAgICAqIGEgY29udGFjdCdzIHBob25lIG51bWJlciBzdXBwb3J0cyB2aWRlbyBjYWxsaW5nLgorICAgICAqIDxwPgorICAgICAqIFNlZSB7QGxpbmsgI2dldENhcGFiaWxpdGllc30KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQVBBQklMSVRZX1ZJREVPX0NBTExJTkdfUkVMSUVTX09OX1BSRVNFTkNFID0gMHgxMDA7CisKKyAgICAvKioKICAgICAgKiBVUkkgc2NoZW1lIGZvciB0ZWxlcGhvbmUgbnVtYmVyIFVSSXMuCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRU1FX1RFTCA9ICJ0ZWwiOwpAQCAtNjczLDcgKzY4Nyw3IEBACiAgICAgICAgICAgICAgICAgLmFwcGVuZCgiXSBQaG9uZUFjY291bnQ6ICIpCiAgICAgICAgICAgICAgICAgLmFwcGVuZChtQWNjb3VudEhhbmRsZSkKICAgICAgICAgICAgICAgICAuYXBwZW5kKCIgQ2FwYWJpbGl0aWVzOiAiKQotICAgICAgICAgICAgICAgIC5hcHBlbmQobUNhcGFiaWxpdGllcykKKyAgICAgICAgICAgICAgICAuYXBwZW5kKGNhcGFiaWxpdGllc1RvU3RyaW5nKG1DYXBhYmlsaXRpZXMpKQogICAgICAgICAgICAgICAgIC5hcHBlbmQoIiBTY2hlbWVzOiAiKTsKICAgICAgICAgZm9yIChTdHJpbmcgc2NoZW1lIDogbVN1cHBvcnRlZFVyaVNjaGVtZXMpIHsKICAgICAgICAgICAgIHNiLmFwcGVuZChzY2hlbWUpCkBAIC02ODQsNCArNjk4LDQyIEBACiAgICAgICAgIHNiLmFwcGVuZCgiXSIpOwogICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBjYXBhYmlsaXRpZXMgYml0bWFzay4KKyAgICAgKgorICAgICAqIEBwYXJhbSBjYXBhYmlsaXRpZXMgVGhlIGNhcGFiaWxpdGllcyBiaXRtYXNrLgorICAgICAqIEByZXR1cm4gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjYXBhYmlsaXRpZXMgYml0bWFzay4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBjYXBhYmlsaXRpZXNUb1N0cmluZyhpbnQgY2FwYWJpbGl0aWVzKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBpZiAoaGFzQ2FwYWJpbGl0aWVzKENBUEFCSUxJVFlfVklERU9fQ0FMTElORykpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiVmlkZW8gIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0NhcGFiaWxpdGllcyhDQVBBQklMSVRZX1ZJREVPX0NBTExJTkdfUkVMSUVTX09OX1BSRVNFTkNFKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJQcmVzZW5jZSAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzQ2FwYWJpbGl0aWVzKENBUEFCSUxJVFlfQ0FMTF9QUk9WSURFUikpIHsKKyAgICAgICAgICAgIHNiLmFwcGVuZCgiQ2FsbFByb3ZpZGVyICIpOworICAgICAgICB9CisgICAgICAgIGlmIChoYXNDYXBhYmlsaXRpZXMoQ0FQQUJJTElUWV9DQUxMX1NVQkpFQ1QpKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIkNhbGxTdWJqZWN0ICIpOworICAgICAgICB9CisgICAgICAgIGlmIChoYXNDYXBhYmlsaXRpZXMoQ0FQQUJJTElUWV9DT05ORUNUSU9OX01BTkFHRVIpKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIkNvbm5lY3Rpb25NZ3IgIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0NhcGFiaWxpdGllcyhDQVBBQklMSVRZX0VNRVJHRU5DWV9DQUxMU19PTkxZKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJFbWVyZ09ubHkgIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhhc0NhcGFiaWxpdGllcyhDQVBBQklMSVRZX01VTFRJX1VTRVIpKSB7CisgICAgICAgICAgICBzYi5hcHBlbmQoIk11bHRpVXNlciAiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzQ2FwYWJpbGl0aWVzKENBUEFCSUxJVFlfUExBQ0VfRU1FUkdFTkNZX0NBTExTKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJQbGFjZUVtZXJnICIpOworICAgICAgICB9CisgICAgICAgIGlmIChoYXNDYXBhYmlsaXRpZXMoQ0FQQUJJTElUWV9TSU1fU1VCU0NSSVBUSU9OKSkgeworICAgICAgICAgICAgc2IuYXBwZW5kKCJTaW1TdWIgIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vVmlkZW9DYWxsSW1wbC5qYXZhIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vVmlkZW9DYWxsSW1wbC5qYXZhCmluZGV4IDkzNDg0Y2QuLmU1NGFiZWUgMTAwNjQ0Ci0tLSBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1ZpZGVvQ2FsbEltcGwuamF2YQorKysgYi90ZWxlY29tbS9qYXZhL2FuZHJvaWQvdGVsZWNvbS9WaWRlb0NhbGxJbXBsLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKICAgICBwcml2YXRlIGZpbmFsIFZpZGVvQ2FsbExpc3RlbmVyQmluZGVyIG1CaW5kZXI7CiAgICAgcHJpdmF0ZSBWaWRlb0NhbGwuQ2FsbGJhY2sgbUNhbGxiYWNrOwogICAgIHByaXZhdGUgaW50IG1WaWRlb1F1YWxpdHkgPSBWaWRlb1Byb2ZpbGUuUVVBTElUWV9VTktOT1dOOwotICAgIHByaXZhdGUgQ2FsbCBtQ2FsbDsKKyAgICBwcml2YXRlIGludCBtVmlkZW9TdGF0ZSA9IFZpZGVvUHJvZmlsZS5TVEFURV9BVURJT19PTkxZOwogCiAgICAgcHJpdmF0ZSBJQmluZGVyLkRlYXRoUmVjaXBpZW50IG1EZWF0aFJlY2lwaWVudCA9IG5ldyBJQmluZGVyLkRlYXRoUmVjaXBpZW50KCkgewogICAgICAgICBAT3ZlcnJpZGUKQEAgLTE5NywxMyArMTk3LDEyIEBACiAKICAgICBwcml2YXRlIEhhbmRsZXIgbUhhbmRsZXI7CiAKLSAgICBWaWRlb0NhbGxJbXBsKElWaWRlb1Byb3ZpZGVyIHZpZGVvUHJvdmlkZXIsIENhbGwgY2FsbCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgVmlkZW9DYWxsSW1wbChJVmlkZW9Qcm92aWRlciB2aWRlb1Byb3ZpZGVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgbVZpZGVvUHJvdmlkZXIgPSB2aWRlb1Byb3ZpZGVyOwogICAgICAgICBtVmlkZW9Qcm92aWRlci5hc0JpbmRlcigpLmxpbmtUb0RlYXRoKG1EZWF0aFJlY2lwaWVudCwgMCk7CiAKICAgICAgICAgbUJpbmRlciA9IG5ldyBWaWRlb0NhbGxMaXN0ZW5lckJpbmRlcigpOwogICAgICAgICBtVmlkZW9Qcm92aWRlci5hZGRWaWRlb0NhbGxiYWNrKG1CaW5kZXIpOwotICAgICAgICBtQ2FsbCA9IGNhbGw7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKQEAgLTI5Miw4ICsyOTEsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNlbmRTZXNzaW9uTW9kaWZ5UmVxdWVzdChWaWRlb1Byb2ZpbGUgcmVxdWVzdFByb2ZpbGUpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFZpZGVvUHJvZmlsZSBvcmlnaW5hbFByb2ZpbGUgPSBuZXcgVmlkZW9Qcm9maWxlKG1DYWxsLmdldERldGFpbHMoKS5nZXRWaWRlb1N0YXRlKCksCi0gICAgICAgICAgICAgICAgICAgIG1WaWRlb1F1YWxpdHkpOworICAgICAgICAgICAgVmlkZW9Qcm9maWxlIG9yaWdpbmFsUHJvZmlsZSA9IG5ldyBWaWRlb1Byb2ZpbGUobVZpZGVvU3RhdGUsIG1WaWRlb1F1YWxpdHkpOwogCiAgICAgICAgICAgICBtVmlkZW9Qcm92aWRlci5zZW5kU2Vzc2lvbk1vZGlmeVJlcXVlc3Qob3JpZ2luYWxQcm9maWxlLCByZXF1ZXN0UHJvZmlsZSk7CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CkBAIC0zMzEsNCArMzI5LDEyIEBACiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KICAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSB2aWRlbyBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdmlkZW8gY2FsbC4KKyAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSB0aGUgbmV3IHZpZGVvIHN0YXRlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFZpZGVvU3RhdGUoaW50IHZpZGVvU3RhdGUpIHsKKyAgICAgICAgbVZpZGVvU3RhdGUgPSB2aWRlb1N0YXRlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3RlbGVjb21tL2phdmEvYW5kcm9pZC90ZWxlY29tL1ZpZGVvUHJvZmlsZS5qYXZhIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlLmphdmEKaW5kZXggZGFiZjcwNi4uMjE2NjAzYyAxMDA2NDQKLS0tIGEvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlLmphdmEKKysrIGIvdGVsZWNvbW0vamF2YS9hbmRyb2lkL3RlbGVjb20vVmlkZW9Qcm9maWxlLmphdmEKQEAgLTE2LDEzICsxNiwyMyBAQAogCiBwYWNrYWdlIGFuZHJvaWQudGVsZWNvbTsKIAoraW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5JbnREZWY7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWw7CiBpbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxhYmxlOwogCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeTsKKwogLyoqCiAgKiBSZXByZXNlbnRzIGF0dHJpYnV0ZXMgb2YgdmlkZW8gY2FsbHMuCiAgKi8KIHB1YmxpYyBjbGFzcyBWaWRlb1Byb2ZpbGUgaW1wbGVtZW50cyBQYXJjZWxhYmxlIHsKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKHtRVUFMSVRZX1VOS05PV04sIFFVQUxJVFlfSElHSCwgUVVBTElUWV9NRURJVU0sIFFVQUxJVFlfTE9XLCBRVUFMSVRZX0RFRkFVTFR9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFZpZGVvUXVhbGl0eSB7fQorCiAgICAgLyoqCiAgICAgICogIlVua25vd24iIHZpZGVvIHF1YWxpdHkuCiAgICAgICogQGhpZGUKQEAgLTQ4LDYgKzU4LDE0IEBACiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUVVBTElUWV9ERUZBVUxUID0gNDsKIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBSZXRlbnRpb24oUmV0ZW50aW9uUG9saWN5LlNPVVJDRSkKKyAgICBASW50RGVmKAorICAgICAgICAgICAgZmxhZyA9IHRydWUsCisgICAgICAgICAgICB2YWx1ZSA9IHtTVEFURV9BVURJT19PTkxZLCBTVEFURV9UWF9FTkFCTEVELCBTVEFURV9SWF9FTkFCTEVELCBTVEFURV9CSURJUkVDVElPTkFMLAorICAgICAgICAgICAgICAgICAgICBTVEFURV9QQVVTRUR9KQorICAgIHB1YmxpYyBAaW50ZXJmYWNlIFZpZGVvU3RhdGUge30KKwogICAgIC8qKgogICAgICAqIFVzZWQgd2hlbiBhbnN3ZXJpbmcgb3IgZGlhbGluZyBhIGNhbGwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2FsbCBkb2VzIG5vdCBoYXZlIGEgdmlkZW8KICAgICAgKiBjb21wb25lbnQuCkBAIC0xMDcsNyArMTI1LDcgQEAKICAgICAgKgogICAgICAqIEBwYXJhbSB2aWRlb1N0YXRlIFRoZSB2aWRlbyBzdGF0ZS4KICAgICAgKi8KLSAgICBwdWJsaWMgVmlkZW9Qcm9maWxlKGludCB2aWRlb1N0YXRlKSB7CisgICAgcHVibGljIFZpZGVvUHJvZmlsZShAVmlkZW9TdGF0ZSBpbnQgdmlkZW9TdGF0ZSkgewogICAgICAgICB0aGlzKHZpZGVvU3RhdGUsIFFVQUxJVFlfREVGQVVMVCk7CiAgICAgfQogCkBAIC0xMTcsNyArMTM1LDcgQEAKICAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSBUaGUgdmlkZW8gc3RhdGUuCiAgICAgICogQHBhcmFtIHF1YWxpdHkgVGhlIHZpZGVvIHF1YWxpdHkuCiAgICAgICovCi0gICAgcHVibGljIFZpZGVvUHJvZmlsZShpbnQgdmlkZW9TdGF0ZSwgaW50IHF1YWxpdHkpIHsKKyAgICBwdWJsaWMgVmlkZW9Qcm9maWxlKEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlLCBAVmlkZW9RdWFsaXR5IGludCBxdWFsaXR5KSB7CiAgICAgICAgIG1WaWRlb1N0YXRlID0gdmlkZW9TdGF0ZTsKICAgICAgICAgbVF1YWxpdHkgPSBxdWFsaXR5OwogICAgIH0KQEAgLTEzMCw2ICsxNDgsNyBAQAogICAgICAqIHtAbGluayBWaWRlb1Byb2ZpbGUjU1RBVEVfUlhfRU5BQkxFRH0sCiAgICAgICoge0BsaW5rIFZpZGVvUHJvZmlsZSNTVEFURV9QQVVTRUR9LgogICAgICAqLworICAgIEBWaWRlb1N0YXRlCiAgICAgcHVibGljIGludCBnZXRWaWRlb1N0YXRlKCkgewogICAgICAgICByZXR1cm4gbVZpZGVvU3RhdGU7CiAgICAgfQpAQCAtMTM5LDYgKzE1OCw3IEBACiAgICAgICogVmFsaWQgdmFsdWVzOiB7QGxpbmsgVmlkZW9Qcm9maWxlI1FVQUxJVFlfSElHSH0sIHtAbGluayBWaWRlb1Byb2ZpbGUjUVVBTElUWV9NRURJVU19LAogICAgICAqIHtAbGluayBWaWRlb1Byb2ZpbGUjUVVBTElUWV9MT1d9LCB7QGxpbmsgVmlkZW9Qcm9maWxlI1FVQUxJVFlfREVGQVVMVH0uCiAgICAgICovCisgICAgQFZpZGVvUXVhbGl0eQogICAgIHB1YmxpYyBpbnQgZ2V0UXVhbGl0eSgpIHsKICAgICAgICAgcmV0dXJuIG1RdWFsaXR5OwogICAgIH0KQEAgLTIxMSw3ICsyMzEsNyBAQAogICAgICAqIEBwYXJhbSB2aWRlb1N0YXRlIFRoZSB2aWRlbyBzdGF0ZS4KICAgICAgKiBAcmV0dXJuIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmlkZW8gc3RhdGUuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmlkZW9TdGF0ZVRvU3RyaW5nKGludCB2aWRlb1N0YXRlKSB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdmlkZW9TdGF0ZVRvU3RyaW5nKEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogICAgICAgICBzYi5hcHBlbmQoIkF1ZGlvIik7CiAKQEAgLTI0MCw3ICsyNjAsNyBAQAogICAgICAqIEBwYXJhbSB2aWRlb1N0YXRlIFRoZSB2aWRlbyBzdGF0ZS4KICAgICAgKiBAcmV0dXJuIHtAY29kZSBUcnVlfSBpZiB0aGUgdmlkZW8gc3RhdGUgaXMgYXVkaW8gb25seSwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCiAgICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXVkaW9Pbmx5KGludCB2aWRlb1N0YXRlKSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXVkaW9Pbmx5KEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlKSB7CiAgICAgICAgIHJldHVybiAhaGFzU3RhdGUodmlkZW9TdGF0ZSwgVmlkZW9Qcm9maWxlLlNUQVRFX1RYX0VOQUJMRUQpCiAgICAgICAgICAgICAgICAgJiYgIWhhc1N0YXRlKHZpZGVvU3RhdGUsIFZpZGVvUHJvZmlsZS5TVEFURV9SWF9FTkFCTEVEKTsKICAgICB9CkBAIC0yNTEsNyArMjcxLDcgQEAKICAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSBUaGUgdmlkZW8gc3RhdGUuCiAgICAgICogQHJldHVybiB7QGNvZGUgVHJ1ZX0gaWYgdmlkZW8gdHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiBpcyBlbmFibGVkLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWaWRlbyhpbnQgdmlkZW9TdGF0ZSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZpZGVvKEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlKSB7CiAgICAgICAgIHJldHVybiBoYXNTdGF0ZSh2aWRlb1N0YXRlLCBWaWRlb1Byb2ZpbGUuU1RBVEVfVFhfRU5BQkxFRCkKICAgICAgICAgICAgICAgICB8fCBoYXNTdGF0ZSh2aWRlb1N0YXRlLCBWaWRlb1Byb2ZpbGUuU1RBVEVfUlhfRU5BQkxFRCkKICAgICAgICAgICAgICAgICB8fCBoYXNTdGF0ZSh2aWRlb1N0YXRlLCBWaWRlb1Byb2ZpbGUuU1RBVEVfQklESVJFQ1RJT05BTCk7CkBAIC0yNjMsNyArMjgzLDcgQEAKICAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSBUaGUgdmlkZW8gc3RhdGUuCiAgICAgICogQHJldHVybiB7QGNvZGUgVHJ1ZX0gaWYgdmlkZW8gdHJhbnNtaXNzaW9uIGlzIGVuYWJsZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYW5zbWlzc2lvbkVuYWJsZWQoaW50IHZpZGVvU3RhdGUpIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFuc21pc3Npb25FbmFibGVkKEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlKSB7CiAgICAgICAgIHJldHVybiBoYXNTdGF0ZSh2aWRlb1N0YXRlLCBWaWRlb1Byb2ZpbGUuU1RBVEVfVFhfRU5BQkxFRCk7CiAgICAgfQogCkBAIC0yNzMsNyArMjkzLDcgQEAKICAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSBUaGUgdmlkZW8gc3RhdGUuCiAgICAgICogQHJldHVybiB7QGNvZGUgVHJ1ZX0gaWYgdmlkZW8gcmVjZXB0aW9uIGlzIGVuYWJsZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1JlY2VwdGlvbkVuYWJsZWQoaW50IHZpZGVvU3RhdGUpIHsKKyAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNSZWNlcHRpb25FbmFibGVkKEBWaWRlb1N0YXRlIGludCB2aWRlb1N0YXRlKSB7CiAgICAgICAgIHJldHVybiBoYXNTdGF0ZSh2aWRlb1N0YXRlLCBWaWRlb1Byb2ZpbGUuU1RBVEVfUlhfRU5BQkxFRCk7CiAgICAgfQogCkBAIC0yODMsNyArMzAzLDcgQEAKICAgICAgKiBAcGFyYW0gdmlkZW9TdGF0ZSBUaGUgdmlkZW8gc3RhdGUuCiAgICAgICogQHJldHVybiB7QGNvZGUgVHJ1ZX0gaWYgdGhlIHZpZGVvIGlzIGJpLWRpcmVjdGlvbmFsLCB7QGNvZGUgZmFsc2V9IG90aGVyd2lzZS4KICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNCaWRpcmVjdGlvbmFsKGludCB2aWRlb1N0YXRlKSB7CisgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQmlkaXJlY3Rpb25hbChAVmlkZW9TdGF0ZSBpbnQgdmlkZW9TdGF0ZSkgewogICAgICAgICByZXR1cm4gaGFzU3RhdGUodmlkZW9TdGF0ZSwgVmlkZW9Qcm9maWxlLlNUQVRFX0JJRElSRUNUSU9OQUwpOwogICAgIH0KIApAQCAtMjkzLDcgKzMxMyw3IEBACiAgICAgICogQHBhcmFtIHZpZGVvU3RhdGUgVGhlIHZpZGVvIHN0YXRlLgogICAgICAqIEByZXR1cm4ge0Bjb2RlIFRydWV9IGlmIHRoZSB2aWRlbyBpcyBwYXVzZWQsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlLgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1BhdXNlZChpbnQgdmlkZW9TdGF0ZSkgeworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1BhdXNlZChAVmlkZW9TdGF0ZSBpbnQgdmlkZW9TdGF0ZSkgewogICAgICAgICByZXR1cm4gaGFzU3RhdGUodmlkZW9TdGF0ZSwgVmlkZW9Qcm9maWxlLlNUQVRFX1BBVVNFRCk7CiAgICAgfQogCkBAIC0zMDQsNyArMzI0LDcgQEAKICAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIHN0YXRlIHRvIGNoZWNrLgogICAgICAqIEByZXR1cm4ge0Bjb2RlIFRydWV9IGlmIHRoZSBzdGF0ZSBpcyBzZXQuCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNTdGF0ZShpbnQgdmlkZW9TdGF0ZSwgaW50IHN0YXRlKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNTdGF0ZShAVmlkZW9TdGF0ZSBpbnQgdmlkZW9TdGF0ZSwgQFZpZGVvU3RhdGUgaW50IHN0YXRlKSB7CiAgICAgICAgIHJldHVybiAodmlkZW9TdGF0ZSAmIHN0YXRlKSA9PSBzdGF0ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L0NhcnJpZXJDb25maWdNYW5hZ2VyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9DYXJyaWVyQ29uZmlnTWFuYWdlci5qYXZhCmluZGV4IDZmZmMwMjYuLjgwYzViMWUgMTAwNjQ0Ci0tLSBhL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L0NhcnJpZXJDb25maWdNYW5hZ2VyLmphdmEKKysrIGIvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvQ2FycmllckNvbmZpZ01hbmFnZXIuamF2YQpAQCAtNDczLDYgKzQ3MywxNSBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9ISURFX1BSRUZFUlJFRF9ORVRXT1JLX1RZUEVfQk9PTCA9ICJoaWRlX3ByZWZlcnJlZF9uZXR3b3JrX3R5cGVfYm9vbCI7CiAKICAgICAvKioKKyAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB1c2VyIGNhbiBzd2l0Y2ggV2ktRmkgcHJlZmVycmVkIG9yIENlbGx1bGFyIHByZWZlcnJlZCBpbiBjYWxsaW5nIHByZWZlcmVuY2UuCisgICAgICogU29tZSBvcGVyYXRvcnMgc3VwcG9ydCBXaS1GaSBDYWxsaW5nIG9ubHksIG5vdCBWb0xURS4KKyAgICAgKiBUaGV5IGRvbid0IG5lZWQgIkNlbGx1bGFyIHByZWZlcnJlZCIgb3B0aW9uLgorICAgICAqIEluIHRoaXMgY2FzZSwgc2V0IHVuZWRpdGFsYmUgYXR0cmlidXRlIGZvciBwcmVmZXJyZWQgcHJlZmVyZW5jZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEtFWV9FRElUQUJMRV9XRkNfTU9ERV9CT09MID0gImVkaXRhYmxlX3dmY19tb2RlX2Jvb2wiOworCisgICAgLyoqCiAgICAgICogSWYgdGhpcyBpcyB0cnVlLCB0aGUgU0lNIGNhcmQgKHRocm91Z2ggQ3VzdG9tZXIgU2VydmljZSBQcm9maWxlIEVGIGZpbGUpIHdpbGwgYmUgYWJsZSB0bwogICAgICAqIHByZXZlbnQgbWFudWFsIG9wZXJhdG9yIHNlbGVjdGlvbi4gSWYgZmFsc2UsIHRoaXMgU0lNIHNldHRpbmcgd2lsbCBiZSBpZ25vcmVkIGFuZCBtYW51YWwKICAgICAgKiBvcGVyYXRvciBzZWxlY3Rpb24gd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlLiBTZWUgQ1BIUzRfMi5XVzYsIENQSFMgQi40LjcuMSBmb3IgbW9yZQpAQCAtNTUzLDYgKzU2MiwyMyBAQAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT0xfQUxMT1dfVklERU9fUEFVU0UgPQogICAgICAgICAgICAgImJvb2xfYWxsb3dfdmlkZW9fcGF1c2UiOwogCisKKyAgICAvKioKKyAgICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgY2FycmllciBzdXBwb3J0cyBSQ1MgcHJlc2VuY2UgaW5kaWNhdGlvbiBmb3IgdmlkZW8gY2FsbHMuICBXaGVuCisgICAgICoge0Bjb2RlIHRydWV9LCB0aGUgY2FycmllciBzdXBwb3J0cyBSQ1MgcHJlc2VuY2UgaW5kaWNhdGlvbiBmb3IgdmlkZW8gY2FsbHMuICBXaGVuIHByZXNlbmNlCisgICAgICogaXMgc3VwcG9ydGVkLCB0aGUgZGV2aWNlIHNob3VsZCB1c2UgdGhlCisgICAgICoge0BsaW5rIGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5EYXRhI0NBUlJJRVJfUFJFU0VOQ0V9IGJpdCBtYXNrIGFuZCBzZXQgdGhlCisgICAgICoge0BsaW5rIGFuZHJvaWQucHJvdmlkZXIuQ29udGFjdHNDb250cmFjdC5EYXRhI0NBUlJJRVJfUFJFU0VOQ0VfVlRfQ0FQQUJMRX0gYml0IHRvIGluZGljYXRlCisgICAgICogd2hldGhlciBlYWNoIGNvbnRhY3Qgc3VwcG9ydHMgdmlkZW8gY2FsbGluZy4gIFRoZSBVSSBpcyBtYWRlIGF3YXJlIHRoYXQgcHJlc2VuY2UgaXMgZW5hYmxlZAorICAgICAqIHZpYSB7QGxpbmsgYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudCNDQVBBQklMSVRZX1ZJREVPX0NBTExJTkdfUkVMSUVTX09OX1BSRVNFTkNFfQorICAgICAqIGFuZCBjYW4gY2hvb3NlIHRvIGhpZGUgb3Igc2hvdyB0aGUgdmlkZW8gY2FsbGluZyBpY29uIGJhc2VkIG9uIHdoZXRoZXIgYSBjb250YWN0IHN1cHBvcnRzCisgICAgICogdmlkZW8uCisgICAgICoKKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBTeXN0ZW1BcGkKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBLRVlfVVNFX1JDU19QUkVTRU5DRV9CT09MID0gInVzZV9yY3NfcHJlc2VuY2VfYm9vbCI7CisKICAgICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGV2ZXJ5IHZhcmlhYmxlLiAqLwogICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFBlcnNpc3RhYmxlQnVuZGxlIHNEZWZhdWx0czsKIApAQCAtNjI4LDYgKzY1NCw3IEBACiAgICAgICAgIHNEZWZhdWx0cy5wdXRCb29sZWFuKEtFWV9ISURFX1BSRUZFUlJFRF9ORVRXT1JLX1RZUEVfQk9PTCwgZmFsc2UpOwogICAgICAgICBzRGVmYXVsdHMucHV0Qm9vbGVhbihCT09MX0FMTE9XX0VNRVJHRU5DWV9WSURFT19DQUxMUywgZmFsc2UpOwogICAgICAgICBzRGVmYXVsdHMucHV0Qm9vbGVhbihCT09MX0FMTE9XX1ZJREVPX1BBVVNFLCB0cnVlKTsKKyAgICAgICAgc0RlZmF1bHRzLnB1dEJvb2xlYW4oS0VZX0VESVRBQkxFX1dGQ19NT0RFX0JPT0wsIHRydWUpOwogCiAgICAgICAgIC8vIE1NUyBkZWZhdWx0cwogICAgICAgICBzRGVmYXVsdHMucHV0Qm9vbGVhbihLRVlfTU1TX0FMSUFTX0VOQUJMRURfQk9PTCwgZmFsc2UpOwpAQCAtNjYyLDYgKzY4OSw3IEBACiAgICAgICAgIHNEZWZhdWx0cy5wdXRTdHJpbmcoS0VZX01NU19VQV9QUk9GX1VSTF9TVFJJTkcsICIiKTsKICAgICAgICAgc0RlZmF1bHRzLnB1dFN0cmluZyhLRVlfTU1TX1VTRVJfQUdFTlRfU1RSSU5HLCAiIik7CiAgICAgICAgIHNEZWZhdWx0cy5wdXRCb29sZWFuKEtFWV9BTExPV19OT05fRU1FUkdFTkNZX0NBTExTX0lOX0VDTV9CT09MLCB0cnVlKTsKKyAgICAgICAgc0RlZmF1bHRzLnB1dEJvb2xlYW4oS0VZX1VTRV9SQ1NfUFJFU0VOQ0VfQk9PTCwgZmFsc2UpOwogICAgIH0KIAogICAgIC8qKgpkaWZmIC0tZ2l0IGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvU2VydmljZVN0YXRlLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQppbmRleCA4NTM3ZjljLi5jNjgwOTk5IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQorKysgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TZXJ2aWNlU3RhdGUuamF2YQpAQCAtMTUzLDYgKzE1MywxNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUklMX1JBRElPX1RFQ0hOT0xPR1lfSVdMQU4gPSAxODsKKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJJTF9SQURJT19DRE1BX1RFQ0hOT0xPR1lfQklUTUFTSyA9CisgICAgICAgICAgICAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfSVM5NUEgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfSVM5NUIgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfMXhSVFQgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfRVZET18wIC0gMSkpCisgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgKFJJTF9SQURJT19URUNITk9MT0dZX0VWRE9fQSAtIDEpKQorICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IChSSUxfUkFESU9fVEVDSE5PTE9HWV9FVkRPX0IgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgfCAoMSA8PCAoUklMX1JBRElPX1RFQ0hOT0xPR1lfRUhSUEQgLSAxKSk7CisKICAgICAvKioKICAgICAgKiBBdmFpbGFibGUgcmVnaXN0cmF0aW9uIHN0YXRlcyBmb3IgR1NNLCBVTVRTIGFuZCBDRE1BLgogICAgICAqLwpAQCAtMTE0MSwxNiArMTE1Miw4IEBACiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc0NkbWEoaW50IHJhZGlvVGVjaG5vbG9neUJpdG1hc2spIHsKLSAgICAgICAgaW50IGNkbWFCaXRtYXNrID0gKFJJTF9SQURJT19URUNITk9MT0dZX0lTOTVBCi0gICAgICAgICAgICAgICAgfCBSSUxfUkFESU9fVEVDSE5PTE9HWV9JUzk1QgotICAgICAgICAgICAgICAgIHwgUklMX1JBRElPX1RFQ0hOT0xPR1lfMXhSVFQKLSAgICAgICAgICAgICAgICB8IFJJTF9SQURJT19URUNITk9MT0dZX0VWRE9fMAotICAgICAgICAgICAgICAgIHwgUklMX1JBRElPX1RFQ0hOT0xPR1lfRVZET19BCi0gICAgICAgICAgICAgICAgfCBSSUxfUkFESU9fVEVDSE5PTE9HWV9FVkRPX0IKLSAgICAgICAgICAgICAgICB8IFJJTF9SQURJT19URUNITk9MT0dZX0VIUlBEKTsKLQotICAgICAgICByZXR1cm4gKChyYWRpb1RlY2hub2xvZ3lCaXRtYXNrICYgY2RtYUJpdG1hc2spICE9IDApOworICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBiZWFyZXJCaXRtYXBIYXNDZG1hKGludCByYWRpb1RlY2hub2xvZ3lCaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIChSSUxfUkFESU9fQ0RNQV9URUNITk9MT0dZX0JJVE1BU0sgJiByYWRpb1RlY2hub2xvZ3lCaXRtYXApICE9IDA7CiAgICAgfQogCiAgICAgLyoqIEBoaWRlICovCmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25NYW5hZ2VyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9TdWJzY3JpcHRpb25NYW5hZ2VyLmphdmEKaW5kZXggMzY0MDdlMS4uMzlmMzIxMyAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvU3Vic2NyaXB0aW9uTWFuYWdlci5qYXZhCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1N1YnNjcmlwdGlvbk1hbmFnZXIuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKIGltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CitpbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7CiBpbXBvcnQgYW5kcm9pZC50ZWxlcGhvbnkuUmxvZzsKIGltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7CiBpbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwpAQCAtMzQ3LDcgKzM0OCwzMSBAQAogICAgICAqIGZvciAjb25TdWJzY3JpcHRpb25zQ2hhbmdlZCB0byBiZSBpbnZva2VkLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgT25TdWJzY3JpcHRpb25zQ2hhbmdlZExpc3RlbmVyIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIG1IYW5kbGVyICA9IG5ldyBIYW5kbGVyKCkgeworICAgICAgICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgbUhhbmRsZXI7CisKKyAgICAgICAgcHVibGljIE9uU3Vic2NyaXB0aW9uc0NoYW5nZWRMaXN0ZW5lcigpIHsKKyAgICAgICAgICAgIG1IYW5kbGVyID0gbmV3IE9uU3Vic2NyaXB0aW9uc0NoYW5nZWRMaXN0ZW5lckhhbmRsZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qKgorICAgICAgICAgKiBDb250cnVjdG9yIHRoYXQgdGFrZXMgaW4gbG9vcGVyIGFzIHBhcmFtZXRlciBpbiBjYXNlIGEgc3ViY2xhc3MvaW5zdGFudGlhdGlvbiBuZWVkcworICAgICAgICAgKiB0byB1c2UgYSBzcGVjaWZpYyBsb29wZXIgKGxpa2UgaW4gdGVzdHMgd2hlcmUgbWFpbkxvb3BlciBtYXkgbmVlZCB0byBiZSB1c2VkKS4KKyAgICAgICAgICogQHBhcmFtIGxvb3BlciBMb29wZXIgdG8gYmUgdXNlZCBmb3IgbUhhbmRsZXIKKyAgICAgICAgICogQGhpZGUKKyAgICAgICAgICovCisgICAgICAgIHByb3RlY3RlZCBPblN1YnNjcmlwdGlvbnNDaGFuZ2VkTGlzdGVuZXIoTG9vcGVyIGxvb3BlcikgeworICAgICAgICAgICAgbUhhbmRsZXIgPSBuZXcgT25TdWJzY3JpcHRpb25zQ2hhbmdlZExpc3RlbmVySGFuZGxlcihsb29wZXIpOworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBjbGFzcyBPblN1YnNjcmlwdGlvbnNDaGFuZ2VkTGlzdGVuZXJIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7CisgICAgICAgICAgICBwcml2YXRlIE9uU3Vic2NyaXB0aW9uc0NoYW5nZWRMaXN0ZW5lckhhbmRsZXIoKSB7CisgICAgICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSBPblN1YnNjcmlwdGlvbnNDaGFuZ2VkTGlzdGVuZXJIYW5kbGVyKExvb3BlciBsb29wZXIpIHsKKyAgICAgICAgICAgICAgICBzdXBlcihsb29wZXIpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIGhhbmRsZU1lc3NhZ2UoTWVzc2FnZSBtc2cpIHsKICAgICAgICAgICAgICAgICBpZiAoREJHKSB7CkBAIC0zNTUsNyArMzgwLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgT25TdWJzY3JpcHRpb25zQ2hhbmdlZExpc3RlbmVyLnRoaXMub25TdWJzY3JpcHRpb25zQ2hhbmdlZCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9OworICAgICAgICB9CiAKICAgICAgICAgLyoqCiAgICAgICAgICAqIENhbGxiYWNrIGludm9rZWQgd2hlbiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIGFueSBTdWJzY3JpcHRpb25JbmZvLiBUeXBpY2FsbHkKQEAgLTEyMDcsNyArMTIzMiw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBleCkgewogICAgICAgICB9Ci0gICAgICAgIGxvZ2QoImdldFNpbVN0YXRlRm9yU3Vic2NyaWJlcjogc2ltU3RhdGU9IiArIHNpbVN0YXRlICsgIiBzbG90SWR4PSIgKyBzbG90SWR4KTsKKwogICAgICAgICByZXR1cm4gc2ltU3RhdGU7CiAgICAgfQogCmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlNYW5hZ2VyLmphdmEgYi90ZWxlcGhvbnkvamF2YS9hbmRyb2lkL3RlbGVwaG9ueS9UZWxlcGhvbnlNYW5hZ2VyLmphdmEKaW5kZXggM2IyODFlMi4uOTEzY2IxOCAxMDA2NDQKLS0tIGEvdGVsZXBob255L2phdmEvYW5kcm9pZC90ZWxlcGhvbnkvVGVsZXBob255TWFuYWdlci5qYXZhCisrKyBiL3RlbGVwaG9ueS9qYXZhL2FuZHJvaWQvdGVsZXBob255L1RlbGVwaG9ueU1hbmFnZXIuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZW50UmVzb2x2ZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5nczsKIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlNldHRpbmdOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKQEAgLTMxLDYgKzMyLDcgQEAKIGltcG9ydCBhbmRyb2lkLm9zLlNlcnZpY2VNYW5hZ2VyOwogaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtUHJvcGVydGllczsKIGltcG9ydCBhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50OworaW1wb3J0IGFuZHJvaWQudGVsZWNvbS5QaG9uZUFjY291bnRIYW5kbGU7CiBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIAogaW1wb3J0IGNvbS5hbmRyb2lkLmludGVybmFsLnRlbGVjb20uSVRlbGVjb21TZXJ2aWNlOwpAQCAtNzY2LDcgKzc2OCw3IEBACiAgICAgICAgICAgICBJUGhvbmVTdWJJbmZvIGluZm8gPSBnZXRTdWJzY3JpYmVySW5mbygpOwogICAgICAgICAgICAgaWYgKGluZm8gPT0gbnVsbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBpbmZvLmdldERldmljZUlkRm9yUGhvbmUoc2xvdElkKTsKKyAgICAgICAgICAgIHJldHVybiBpbmZvLmdldERldmljZUlkRm9yUGhvbmUoc2xvdElkLCBtQ29udGV4dC5nZXRPcFBhY2thZ2VOYW1lKCkpOwogICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBleCkgewpAQCAtNDg2NSw0ICs0ODY3LDQzIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIFVSSSBmb3IgdGhlIHBlci1hY2NvdW50IHZvaWNlbWFpbCByaW5ndG9uZSBzZXQgaW4gUGhvbmUgc2V0dGluZ3MuCisgICAgICoKKyAgICAgKiBAcGFyYW0gYWNjb3VudEhhbmRsZSBUaGUgaGFuZGxlIGZvciB0aGUge0BsaW5rIFBob25lQWNjb3VudH0gZm9yIHdoaWNoIHRvIHJldHJpZXZlIHRoZQorICAgICAqIHZvaWNlbWFpbCByaW5ndG9uZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBVUkkgZm9yIHRoZSByaW5ndG9uZSB0byBwbGF5IHdoZW4gcmVjZWl2aW5nIGEgdm9pY2VtYWlsIGZyb20gYSBzcGVjaWZpYworICAgICAqIFBob25lQWNjb3VudC4KKyAgICAgKi8KKyAgICBwdWJsaWMgVXJpIGdldFZvaWNlbWFpbFJpbmd0b25lVXJpKFBob25lQWNjb3VudEhhbmRsZSBhY2NvdW50SGFuZGxlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJVGVsZXBob255IHNlcnZpY2UgPSBnZXRJVGVsZXBob255KCk7CisgICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuZ2V0Vm9pY2VtYWlsUmluZ3RvbmVVcmkoYWNjb3VudEhhbmRsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKFJlbW90ZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBMb2cuZShUQUcsICJFcnJvciBjYWxsaW5nIElUZWxlcGhvbnkjZ2V0Vm9pY2VtYWlsUmluZ3RvbmVVcmkiLCBlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdmlicmF0aW9uIGlzIHNldCBmb3Igdm9pY2VtYWlsIG5vdGlmaWNhdGlvbiBpbiBQaG9uZSBzZXR0aW5ncy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2NvdW50SGFuZGxlIFRoZSBoYW5kbGUgZm9yIHRoZSB7QGxpbmsgUGhvbmVBY2NvdW50fSBmb3Igd2hpY2ggdG8gcmV0cmlldmUgdGhlCisgICAgICogdm9pY2VtYWlsIHZpYnJhdGlvbiBzZXR0aW5nLgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSB2aWJyYXRpb24gaXMgc2V0IGZvciB0aGlzIFBob25lQWNjb3VudCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gaXNWb2ljZW1haWxWaWJyYXRpb25FbmFibGVkKFBob25lQWNjb3VudEhhbmRsZSBhY2NvdW50SGFuZGxlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJVGVsZXBob255IHNlcnZpY2UgPSBnZXRJVGVsZXBob255KCk7CisgICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2UuaXNWb2ljZW1haWxWaWJyYXRpb25FbmFibGVkKGFjY291bnRIYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChSZW1vdGVFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgY2FsbGluZyBJVGVsZXBob255I2lzVm9pY2VtYWlsVmlicmF0aW9uRW5hYmxlZCIsIGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVBob25lU3ViSW5mby5haWRsIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lQaG9uZVN1YkluZm8uYWlkbAppbmRleCBlZDg1MzkyLi5kYzJiMjk3IDEwMDY0NAotLS0gYS90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVBob25lU3ViSW5mby5haWRsCisrKyBiL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JUGhvbmVTdWJJbmZvLmFpZGwKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgKiBSZXRyaWV2ZXMgdGhlIHVuaXF1ZSBkZXZpY2UgSUQgb2YgYSBwaG9uZSBmb3IgdGhlIGRldmljZSwgZS5nLiwgSU1FSQogICAgICAqIGZvciBHU00gcGhvbmVzLgogICAgICAqLwotICAgIFN0cmluZyBnZXREZXZpY2VJZEZvclBob25lKGludCBwaG9uZUlkKTsKKyAgICBTdHJpbmcgZ2V0RGV2aWNlSWRGb3JQaG9uZShpbnQgcGhvbmVJZCwgU3RyaW5nIGNhbGxpbmdQYWNrYWdlKTsKIAogICAgIC8qKgogICAgICAqIFJldHJpZXZlcyB0aGUgSU1FSS4KZGlmZiAtLWdpdCBhL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGVsZXBob255LmFpZGwgYi90ZWxlcGhvbnkvamF2YS9jb20vYW5kcm9pZC9pbnRlcm5hbC90ZWxlcGhvbnkvSVRlbGVwaG9ueS5haWRsCmluZGV4IDgxNzJlOTQuLmQxYmFkYzkgMTAwNjQ0Ci0tLSBhL3RlbGVwaG9ueS9qYXZhL2NvbS9hbmRyb2lkL2ludGVybmFsL3RlbGVwaG9ueS9JVGVsZXBob255LmFpZGwKKysrIGIvdGVsZXBob255L2phdmEvY29tL2FuZHJvaWQvaW50ZXJuYWwvdGVsZXBob255L0lUZWxlcGhvbnkuYWlkbApAQCAtMTgsNyArMTgsOSBAQAogCiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKIGltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKK2ltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7CiBpbXBvcnQgYW5kcm9pZC50ZWxlY29tLlBob25lQWNjb3VudDsKK2ltcG9ydCBhbmRyb2lkLnRlbGVjb20uUGhvbmVBY2NvdW50SGFuZGxlOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LkNlbGxJbmZvOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255LkljY09wZW5Mb2dpY2FsQ2hhbm5lbFJlc3BvbnNlOwogaW1wb3J0IGFuZHJvaWQudGVsZXBob255Lk1vZGVtQWN0aXZpdHlJbmZvOwpAQCAtOTY2LDcgKzk2OCw3IEBACiAgICAgICogUmV0dXJucyB0aGUgU3RhdHVzIG9mIFdpLUZpIENhbGxpbmcKICAgICAgKi8KICAgICBib29sZWFuIGlzV2lmaUNhbGxpbmdBdmFpbGFibGUoKTsKLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgdGhlIFN0YXR1cyBvZiBWb2x0ZQogICAgICAqLwpAQCAtMTAxNCw0ICsxMDE2LDIzIEBACiAgICAgICogQHJldHVybiBTZXJ2aWNlIHN0YXRlIG9uIHNwZWNpZmllZCBzdWJzY3JpcHRpb24uCiAgICAgICovCiAgICAgU2VydmljZVN0YXRlIGdldFNlcnZpY2VTdGF0ZUZvclN1YnNjcmliZXIoaW50IHN1YklkLCBTdHJpbmcgY2FsbGluZ1BhY2thZ2UpOworCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgVVJJIGZvciB0aGUgcGVyLWFjY291bnQgdm9pY2VtYWlsIHJpbmd0b25lIHNldCBpbiBQaG9uZSBzZXR0aW5ncy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2NvdW50SGFuZGxlIFRoZSBoYW5kbGUgZm9yIHRoZSB7QGxpbmsgUGhvbmVBY2NvdW50fSBmb3Igd2hpY2ggdG8gcmV0cmlldmUgdGhlCisgICAgICogdm9pY2VtYWlsIHJpbmd0b25lLgorICAgICAqIEByZXR1cm4gVGhlIFVSSSBmb3IgdGhlIHJpbmd0b25lIHRvIHBsYXkgd2hlbiByZWNlaXZpbmcgYSB2b2ljZW1haWwgZnJvbSBhIHNwZWNpZmljCisgICAgICogUGhvbmVBY2NvdW50LgorICAgICAqLworICAgIFVyaSBnZXRWb2ljZW1haWxSaW5ndG9uZVVyaShpbiBQaG9uZUFjY291bnRIYW5kbGUgYWNjb3VudEhhbmRsZSk7CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdmlicmF0aW9uIGlzIHNldCBmb3Igdm9pY2VtYWlsIG5vdGlmaWNhdGlvbiBpbiBQaG9uZSBzZXR0aW5ncy4KKyAgICAgKgorICAgICAqIEBwYXJhbSBhY2NvdW50SGFuZGxlIFRoZSBoYW5kbGUgZm9yIHRoZSB7QGxpbmsgUGhvbmVBY2NvdW50fSBmb3Igd2hpY2ggdG8gcmV0cmlldmUgdGhlCisgICAgICogdm9pY2VtYWlsIHZpYnJhdGlvbiBzZXR0aW5nLgorICAgICAqIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSB2aWJyYXRpb24gaXMgc2V0IGZvciB0aGlzIFBob25lQWNjb3VudCwge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UuCisgICAgICovCisgICAgYm9vbGVhbiBpc1ZvaWNlbWFpbFZpYnJhdGlvbkVuYWJsZWQoaW4gUGhvbmVBY2NvdW50SGFuZGxlIGFjY291bnRIYW5kbGUpOwogfQpkaWZmIC0tZ2l0IGEvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tDb250ZXh0LmphdmEgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0NvbnRleHQuamF2YQppbmRleCA0YzNiNTk4Li42NGQyOTc4IDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0NvbnRleHQuamF2YQorKysgYi90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja0NvbnRleHQuamF2YQpAQCAtNDMzLDYgKzQzMywxMiBAQAogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZW5kU3RpY2t5QnJvYWRjYXN0QXNVc2VyKEludGVudCBpbnRlbnQsIFVzZXJIYW5kbGUgdXNlciwgQnVuZGxlIG9wdGlvbnMpIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgc2VuZFN0aWNreU9yZGVyZWRCcm9hZGNhc3RBc1VzZXIoSW50ZW50IGludGVudCwKICAgICAgICAgICAgIFVzZXJIYW5kbGUgdXNlciwgQnJvYWRjYXN0UmVjZWl2ZXIgcmVzdWx0UmVjZWl2ZXIsCkBAIC02OTUsMjIgKzcwMSwyNiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZENvbnRleHQoQ29udGV4dCBjb250ZXh0KSB7CisgICAgcHVibGljIENvbnRleHQgY3JlYXRlRGV2aWNlRW5jcnlwdGVkU3RvcmFnZUNvbnRleHQoKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIC8qKiB7QGhpZGV9ICovCisgICAgQFN5c3RlbUFwaQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgY3JlYXRlQ3JlZGVudGlhbEVuY3J5cHRlZENvbnRleHQoQ29udGV4dCBjb250ZXh0KSB7CisgICAgcHVibGljIGJvb2xlYW4gaXNEZXZpY2VFbmNyeXB0ZWRTdG9yYWdlKCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICAvKioge0BoaWRlfSAqLworICAgIEBTeXN0ZW1BcGkKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkKCkgeworICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlZGVudGlhbEVuY3J5cHRlZFN0b3JhZ2UoKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YSBiL3Rlc3QtcnVubmVyL3NyYy9hbmRyb2lkL3Rlc3QvbW9jay9Nb2NrUGFja2FnZU1hbmFnZXIuamF2YQppbmRleCBmN2M2M2QxLi44MWFhNmM2IDEwMDY0NAotLS0gYS90ZXN0LXJ1bm5lci9zcmMvYW5kcm9pZC90ZXN0L21vY2svTW9ja1BhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvdGVzdC1ydW5uZXIvc3JjL2FuZHJvaWQvdGVzdC9tb2NrL01vY2tQYWNrYWdlTWFuYWdlci5qYXZhCkBAIC0zNCw3ICszNCw2IEBACiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkluc3RydW1lbnRhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLkludGVudEZpbHRlclZlcmlmaWNhdGlvbkluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLktleVNldDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uTWFuaWZlc3REaWdlc3Q7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbmZvOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSW5zdGFsbGVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlSXRlbUluZm87CkBAIC05NywxNCArOTYsMzAgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLQogICAgIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkcyhTdHJpbmcgcGFja2FnZU5hbWUpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50W10gZ2V0UGFja2FnZUdpZHMoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKICAgICAvKiogQGhpZGUgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlckhhbmRsZSkKKyAgICBwdWJsaWMgaW50IGdldFBhY2thZ2VVaWRBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgZmxhZ3MsIGludCB1c2VySGFuZGxlKQorICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlKQogICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTEzNCw3ICsxNDksMTQgQEAKIAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzKQotICAgIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKQorICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtMTc1LDcgKzE5Nyw3IEBACiAKICAgICAvKiogQGhpZGUgKi8KICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTMwMCwyMSArMzIyLDI1IEBACiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBieXRlW10gZ2V0RXBoZW1lcmFsQ29va2llKCkgewogICAgICAgICByZXR1cm4gbmV3IGJ5dGVbMF07CiAgICAgfQogCisgICAgLyoqIEBoaWRlICovCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNFcGhlbWVyYWxBcHBsaWNhdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0RXBoZW1lcmFsQ29va2llTWF4U2l6ZUJ5dGVzKCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICAvKiogQGhpZGUgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgYm9vbGVhbiBzZXRFcGhlbWVyYWxDb29raWUoQE5vbk51bGwgYnl0ZVtdIGNvb2tpZSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNTYsNyArMzgyLDcgQEAKIAogICAgIC8qKiBAaGlkZSAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIApAQCAtNzQ3LDcgKzc3Myw3IEBACiAgICAgICogQGhpZGUgLSB0byBtYXRjaCBoaWRpbmcgaW4gc3VwZXJjbGFzcwogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGdldFBhY2thZ2VTaXplSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlLAorICAgIHB1YmxpYyB2b2lkIGdldFBhY2thZ2VTaXplSW5mb0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlLAogICAgICAgICAgICAgSVBhY2thZ2VTdGF0c09ic2VydmVyIG9ic2VydmVyKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTgwOCwxMyArODM0LDE5IEBACiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KIAorICAgIC8qKiBAaGlkZSAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIHNldFBhY2thZ2VTdXNwZW5kZWRBc1VzZXIoU3RyaW5nIHBhY2thZ2VOYW1lLCBib29sZWFuIGhpZGRlbiwgaW50IHVzZXJJZCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgLyoqCiAgICAgICogQGhpZGUKICAgICAgKi8KICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpIHBhY2thZ2VVUkksIElQYWNrYWdlSW5zdGFsbE9ic2VydmVyIG9ic2VydmVyLAogICAgICAgICAgICAgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsIFVyaSB2ZXJpZmljYXRpb25VUkksCi0gICAgICAgICAgICBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CisgICAgICAgICAgICBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC04ODUsNyArOTE3LDcgQEAKICAgICAgKiBAaGlkZQogICAgICAqLwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBpbnQgZ2V0SW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKQEAgLTg5Myw3ICs5MjUsNyBAQAogICAgICAqIEBoaWRlCiAgICAgICovCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCBzdGF0dXMsIGludCB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCkBAIC05MTAsMTYgKzk0MiwzMCBAQAogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKKyAgICAvKioge0ByZW1vdmVkfSAqLworICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lKGludCB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCisgICAgLyoqIHtAaGlkZX0gKi8KICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWVBc1VzZXIoaW50IHVzZXJJZCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICAvKioge0ByZW1vdmVkfSAqLworICAgIEBEZXByZWNhdGVkCiAgICAgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZShTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQogCisgICAgLyoqIHtAaGlkZX0gKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXREZWZhdWx0QnJvd3NlclBhY2thZ2VOYW1lQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJJZCkgeworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBAaGlkZQogICAgICAqLwpAQCAtOTUxLDcgKzk5Nyw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLAogICAgICAgICAgICAgUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwgaW50IGZsYWdzLCBTdHJpbmcgaW5zdGFsbGVyUGFja2FnZU5hbWUsCi0gICAgICAgICAgICBVcmkgdmVyaWZpY2F0aW9uVVJJLCBNYW5pZmVzdERpZ2VzdCBtYW5pZmVzdERpZ2VzdCwKKyAgICAgICAgICAgIFVyaSB2ZXJpZmljYXRpb25VUkksCiAgICAgICAgICAgICBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdGVzdHMvTmV0d29ya1NlY3VyaXR5Q29uZmlnVGVzdC9zcmMvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL1Rlc3RDZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhIGIvdGVzdHMvTmV0d29ya1NlY3VyaXR5Q29uZmlnVGVzdC9zcmMvYW5kcm9pZC9zZWN1cml0eS9uZXQvY29uZmlnL1Rlc3RDZXJ0aWZpY2F0ZVNvdXJjZS5qYXZhCmluZGV4IDY5YjJhOWQuLjBjMzYwNjMgMTAwNjQ0Ci0tLSBhL3Rlc3RzL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Rlc3Qvc3JjL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9UZXN0Q2VydGlmaWNhdGVTb3VyY2UuamF2YQorKysgYi90ZXN0cy9OZXR3b3JrU2VjdXJpdHlDb25maWdUZXN0L3NyYy9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvVGVzdENlcnRpZmljYXRlU291cmNlLmphdmEKQEAgLTQ0LDQgKzQ0LDEyIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFuY2hvci5nZXRUcnVzdGVkQ2VydCgpOwogICAgIH0KKworICAgIHB1YmxpYyBYNTA5Q2VydGlmaWNhdGUgZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0KSB7CisgICAgICAgIGphdmEuc2VjdXJpdHkuY2VydC5UcnVzdEFuY2hvciBhbmNob3IgPSBtSW5kZXguZmluZEJ5SXNzdWVyQW5kU2lnbmF0dXJlKGNlcnQpOworICAgICAgICBpZiAoYW5jaG9yID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhbmNob3IuZ2V0VHJ1c3RlZENlcnQoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90ZXN0cy9OZXR3b3JrU2VjdXJpdHlDb25maWdUZXN0L3NyYy9hbmRyb2lkL3NlY3VyaXR5L25ldC9jb25maWcvWG1sQ29uZmlnVGVzdHMuamF2YSBiL3Rlc3RzL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Rlc3Qvc3JjL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9YbWxDb25maWdUZXN0cy5qYXZhCmluZGV4IDk5OGJiNjguLjM1ZTNlZjQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Rlc3Qvc3JjL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9YbWxDb25maWdUZXN0cy5qYXZhCisrKyBiL3Rlc3RzL05ldHdvcmtTZWN1cml0eUNvbmZpZ1Rlc3Qvc3JjL2FuZHJvaWQvc2VjdXJpdHkvbmV0L2NvbmZpZy9YbWxDb25maWdUZXN0cy5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgYW5kcm9pZC51dGlsLkFycmF5U2V0OwogaW1wb3J0IGFuZHJvaWQudXRpbC5QYWlyOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuU29ja2V0OwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LktleVN0b3JlOwpAQCAtMzQsNiArMzUsNyBAQAogaW1wb3J0IGphdmF4Lm5ldC5zc2wuSHR0cHNVUkxDb25uZWN0aW9uOwogaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMQ29udGV4dDsKIGltcG9ydCBqYXZheC5uZXQuc3NsLlNTTEhhbmRzaGFrZUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlNTTFNvY2tldDsKIGltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsKIGltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlckZhY3Rvcnk7CiAKQEAgLTEwMyw2ICsxMDUsMTUgQEAKICAgICAgICAgVGVzdFV0aWxzLmFzc2VydENvbm5lY3Rpb25GYWlscyhjb250ZXh0LCAiZGV2ZWxvcGVyLmFuZHJvaWQuY29tIiwgNDQzKTsKICAgICAgICAgVGVzdFV0aWxzLmFzc2VydFVybENvbm5lY3Rpb25GYWlscyhjb250ZXh0LCAiZ29vZ2xlLmNvbSIsIDQ0Myk7CiAgICAgICAgIFRlc3RVdGlscy5hc3NlcnRVcmxDb25uZWN0aW9uU3VjY2VlZHMoY29udGV4dCwgImFuZHJvaWQuY29tIiwgNDQzKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCBzb2NrZXRzIGNyZWF0ZWQgd2l0aG91dCB0aGUgaG9zdG5hbWUgZmFpbCB3aXRoIHBlci1kb21haW4gY29uZmlncworICAgICAgICBTU0xTb2NrZXQgc29ja2V0ID0gKFNTTFNvY2tldCkgY29udGV4dC5nZXRTb2NrZXRGYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAuY3JlYXRlU29ja2V0KEluZXRBZGRyZXNzLmdldEJ5TmFtZSgiYW5kcm9pZC5jb20iKSwgNDQzKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgc29ja2V0LnN0YXJ0SGFuZHNoYWtlKCk7CisgICAgICAgIHNvY2tldC5nZXRJbnB1dFN0cmVhbSgpOworICAgICAgICBmYWlsKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4cGVjdGVkKSB7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0QmFzaWNQaW5uaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA1M2U3ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotaW5jbHVkZSAkKGNhbGwgYWxsLXN1YmRpci1tYWtlZmlsZXMpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L0FuZHJvaWQubWsgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhNTc4ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykgJChjYWxsIGFsbC1yZW5kZXJzY3JpcHQtZmlsZXMtdW5kZXIsIHNyYykKLQotTE9DQUxfUEFDS0FHRV9OQU1FIDo9IEZCT1Rlc3QKLQotTE9DQUxfU0RLX1ZFUlNJT04gOj0gMTcKLQotaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OGU4NTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0iY29tLmFuZHJvaWQuZmJvdGVzdCI+Ci0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9Il9GQk9UZXN0Ij4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iRkJPVGVzdCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkZCTyBCYXNlIFRlc3QiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5CbGFjay5Ob1RpdGxlQmFyIj4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iRkJPU3luYyIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkZCTyBTeW5jIFRlc3QiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnRoZW1lPSJAYW5kcm9pZDpzdHlsZS9UaGVtZS5CbGFjay5Ob1RpdGxlQmFyIj4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICA8L2FwcGxpY2F0aW9uPgotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczNTNmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9yb2JvdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3Jlcy9yYXcvcm9ib3QuYTNkIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9yZXMvcmF3L3JvYm90LmEzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4ODk1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3Jlcy9yYXcvcm9ib3QuYTNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9TeW5jLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1N5bmMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMwYWQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1N5bmMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmZib3Rlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TeXN0ZW07Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci0KLWltcG9ydCBqYXZhLmxhbmcuUnVudGltZTsKLQotcHVibGljIGNsYXNzIEZCT1N5bmMgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIEZCT1N5bmNWaWV3IG1WaWV3OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotCi0gICAgICAgIC8vIENyZWF0ZSBvdXIgUHJldmlldyB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyCi0gICAgICAgIC8vIEFjdGl2aXR5Ci0gICAgICAgIG1WaWV3ID0gbmV3IEZCT1N5bmNWaWV3KHRoaXMpOwotICAgICAgICBzZXRDb250ZW50VmlldyhtVmlldyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblJlc3VtZSgpOwotICAgICAgICBtVmlldy5yZXN1bWUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25QYXVzZSgpOwotICAgICAgICBtVmlldy5wYXVzZSgpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9TeW5jUlMuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL2Zib3Rlc3QvRkJPU3luY1JTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YTExN2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9TeW5jUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5mYm90ZXN0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhS2luZDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmUuRGVwdGhGdW5jOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlR5cGUuQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLXB1YmxpYyBjbGFzcyBGQk9TeW5jUlMgewotCi0gICAgcHVibGljIEZCT1N5bmNSUygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBpbml0UlMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZCgpIHsKLSAgICAgICAgbVJTLmdldFdpZHRoKCk7Ci0gICAgICAgIG1SUy5nZXRIZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgU2FtcGxlciBtU2FtcGxlcjsKLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUFNCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1QRkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1QVkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMgbVBWQTsKLQotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtR3JpZEltYWdlOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtT2Zmc2NyZWVuOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtT2Zmc2NyZWVuRGVwdGg7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1BbGxvY1BWOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtUmVhZEJhY2tUZXN0OwotCi0gICAgcHJpdmF0ZSBGb250IG1JdGFsaWM7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1UZXh0QWxsb2M7Ci0KLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX01lc2hJbmZvIG1NZXNoZXM7Ci0gICAgcHJpdmF0ZSBTY3JpcHRDX2Zib3N5bmMgbVNjcmlwdDsKLQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25Eb3duKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgbVNjcmlwdC5pbnZva2Vfb25BY3Rpb25Eb3duKHgsIHkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uU2NhbGUoZmxvYXQgc2NhbGUpIHsKLSAgICAgICAgbVNjcmlwdC5pbnZva2Vfb25BY3Rpb25TY2FsZShzY2FsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25Nb3ZlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgbVNjcmlwdC5pbnZva2Vfb25BY3Rpb25Nb3ZlKHgsIHkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UEZTKCkgewotICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBiID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKG1SUyk7Ci0KLSAgICAgICAgYi5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5MRVNTKTsKLSAgICAgICAgYi5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYi5zZXREZXB0aE1hc2tFbmFibGVkKHRydWUpOwotICAgICAgICBtUFNCYWNrZ3JvdW5kID0gYi5jcmVhdGUoKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUEZTQmFja2dyb3VuZChtUFNCYWNrZ3JvdW5kKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFBGKCkgewotICAgICAgICBTYW1wbGVyLkJ1aWxkZXIgYnMgPSBuZXcgU2FtcGxlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGJzLnNldE1pbmlmaWNhdGlvbihTYW1wbGVyLlZhbHVlLkxJTkVBUik7Ci0gICAgICAgIGJzLnNldE1hZ25pZmljYXRpb24oU2FtcGxlci5WYWx1ZS5MSU5FQVIpOwotICAgICAgICBicy5zZXRXcmFwUyhTYW1wbGVyLlZhbHVlLkNMQU1QKTsKLSAgICAgICAgYnMuc2V0V3JhcFQoU2FtcGxlci5WYWx1ZS5DTEFNUCk7Ci0gICAgICAgIG1TYW1wbGVyID0gYnMuY3JlYXRlKCk7Ci0KLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0JBLCAwKTsKLSAgICAgICAgbVBGQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIG1QRkJhY2tncm91bmQuYmluZFNhbXBsZXIobVNhbXBsZXIsIDApOwotCi0gICAgICAgIG1TY3JpcHQuc2V0X2dQRkJhY2tncm91bmQobVBGQmFja2dyb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQVigpIHsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlciBwdmIgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBtUFZCYWNrZ3JvdW5kID0gcHZiLmNyZWF0ZSgpOwotCi0gICAgICAgIG1QVkEgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzKG1SUyk7Ci0gICAgICAgICgoUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24pbVBWQmFja2dyb3VuZCkuYmluZENvbnN0YW50cyhtUFZBKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUFZCYWNrZ3JvdW5kKG1QVkJhY2tncm91bmQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkSW1hZ2UoKSB7Ci0gICAgICAgIG1HcmlkSW1hZ2UgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIFIuZHJhd2FibGUucm9ib3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUR3JpZChtR3JpZEltYWdlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFRleHRBbGxvY2F0aW9uKFN0cmluZyBmaWxlTmFtZSkgewotICAgICAgICBTdHJpbmcgYWxsb2NTdHJpbmcgPSAiRGlzcGxheWluZyBmaWxlOiAiICsgZmlsZU5hbWU7Ci0gICAgICAgIG1UZXh0QWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLCBhbGxvY1N0cmluZywgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICBtU2NyaXB0LnNldF9nVGV4dEFsbG9jKG1UZXh0QWxsb2MpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0TWVzaGVzKEZpbGVBM0QgbW9kZWwpIHsKLSAgICAgICAgaW50IG51bUVudHJpZXMgPSBtb2RlbC5nZXRJbmRleEVudHJ5Q291bnQoKTsKLSAgICAgICAgaW50IG51bU1lc2hlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSArKykgewotICAgICAgICAgICAgRmlsZUEzRC5JbmRleEVudHJ5IGVudHJ5ID0gbW9kZWwuZ2V0SW5kZXhFbnRyeShpKTsKLSAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsICYmIGVudHJ5LmdldEVudHJ5VHlwZSgpID09IEZpbGVBM0QuRW50cnlUeXBlLk1FU0gpIHsKLSAgICAgICAgICAgICAgICBudW1NZXNoZXMgKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnVtTWVzaGVzID4gMCkgewotICAgICAgICAgICAgbU1lc2hlcyA9IG5ldyBTY3JpcHRGaWVsZF9NZXNoSW5mbyhtUlMsIG51bU1lc2hlcyk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSArKykgewotICAgICAgICAgICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwgJiYgZW50cnkuZ2V0RW50cnlUeXBlKCkgPT0gRmlsZUEzRC5FbnRyeVR5cGUuTUVTSCkgewotICAgICAgICAgICAgICAgICAgICBNZXNoIG1lc2ggPSBlbnRyeS5nZXRNZXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1NZXNoZXMuc2V0X21NZXNoKGksIG1lc2gsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgbU1lc2hlcy5zZXRfbU51bUluZGV4U2V0cyhpLCBtZXNoLmdldFByaW1pdGl2ZUNvdW50KCksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTWVzaGVzLmNvcHlBbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIk5vIHZhbGlkIG1lc2hlcyBpbiBmaWxlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2NyaXB0LmJpbmRfZ01lc2hlcyhtTWVzaGVzKTsKLSAgICAgICAgbVNjcmlwdC5pbnZva2VfdXBkYXRlTWVzaEluZm8oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkQTNERmlsZShTdHJpbmcgcGF0aCkgewotICAgICAgICBGaWxlQTNEIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tRmlsZShtUlMsIHBhdGgpOwotICAgICAgICBpbml0TWVzaGVzKG1vZGVsKTsKLSAgICAgICAgaW5pdFRleHRBbGxvY2F0aW9uKHBhdGgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UlMoKSB7Ci0KLSAgICAgICAgbVNjcmlwdCA9IG5ldyBTY3JpcHRDX2Zib3N5bmMobVJTLCBtUmVzLCBSLnJhdy5mYm9zeW5jKTsKLQotICAgICAgICBpbml0UEZTKCk7Ci0gICAgICAgIGluaXRQRigpOwotICAgICAgICBpbml0UFYoKTsKLQotICAgICAgICBsb2FkSW1hZ2UoKTsKLQotICAgICAgICBUeXBlLkJ1aWxkZXIgYiA9IG5ldyBUeXBlLkJ1aWxkZXIobVJTLCBFbGVtZW50LlJHQkFfODg4OChtUlMpKTsKLSAgICAgICAgYi5zZXRYKDUxMikuc2V0WSg1MTIpOwotICAgICAgICBtT2Zmc2NyZWVuID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19URVhUVVJFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ09mZnNjcmVlbihtT2Zmc2NyZWVuKTsKLQotICAgICAgICBtUmVhZEJhY2tUZXN0ID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19URVhUVVJFKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1JlYWRCYWNrVGVzdChtUmVhZEJhY2tUZXN0KTsKLQotICAgICAgICBiID0gbmV3IFR5cGUuQnVpbGRlcihtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuY3JlYXRlUGl4ZWwobVJTLCBEYXRhVHlwZS5VTlNJR05FRF8xNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YUtpbmQuUElYRUxfREVQVEgpKTsKLSAgICAgICAgYi5zZXRYKDUxMikuc2V0WSg1MTIpOwotICAgICAgICBtT2Zmc2NyZWVuRGVwdGggPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmNyZWF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfUkVOREVSX1RBUkdFVCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dPZmZzY3JlZW5EZXB0aChtT2Zmc2NyZWVuRGVwdGgpOwotCi0gICAgICAgIEZpbGVBM0QgbW9kZWwgPSBGaWxlQTNELmNyZWF0ZUZyb21SZXNvdXJjZShtUlMsIG1SZXMsIFIucmF3LnJvYm90KTsKLSAgICAgICAgaW5pdE1lc2hlcyhtb2RlbCk7Ci0KLSAgICAgICAgbUl0YWxpYyA9IEZvbnQuY3JlYXRlKG1SUywgbVJlcywgInNlcmlmIiwgRm9udC5TdHlsZS5JVEFMSUMsIDgpOwotICAgICAgICBtU2NyaXB0LnNldF9nSXRhbGljKG1JdGFsaWMpOwotCi0gICAgICAgIGluaXRUZXh0QWxsb2NhdGlvbigiUi5yYXcucm9ib3QiKTsKLQotICAgICAgICBtUlMuYmluZFJvb3RTY3JpcHQobVNjcmlwdCk7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9TeW5jVmlldy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9TeW5jVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTg1NjI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL2Zib3Rlc3QvRkJPU3luY1ZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5mYm90ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNTdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU2NhbGVHZXN0dXJlRGV0ZWN0b3I7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotcHVibGljIGNsYXNzIEZCT1N5bmNWaWV3IGV4dGVuZHMgUlNTdXJmYWNlVmlldyB7Ci0KLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBwcml2YXRlIEZCT1N5bmNSUyBtUmVuZGVyOwotCi0gICAgcHJpdmF0ZSBTY2FsZUdlc3R1cmVEZXRlY3RvciBtU2NhbGVEZXRlY3RvcjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX1BPSU5URVJfSUQgPSAtMTsKLSAgICBwcml2YXRlIGludCBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotCi0gICAgcHVibGljIEZCT1N5bmNWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgZW5zdXJlUmVuZGVyU2NyaXB0KCk7Ci0gICAgICAgIG1TY2FsZURldGVjdG9yID0gbmV3IFNjYWxlR2VzdHVyZURldGVjdG9yKGNvbnRleHQsIG5ldyBTY2FsZUxpc3RlbmVyKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSZW5kZXJTY3JpcHQoKSB7Ci0gICAgICAgIGlmIChtUlMgPT0gbnVsbCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZyBzYyA9IG5ldyBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnKCk7Ci0gICAgICAgICAgICBzYy5zZXREZXB0aCgxNiwgMjQpOwotICAgICAgICAgICAgbVJTID0gY3JlYXRlUmVuZGVyU2NyaXB0R0woc2MpOwotICAgICAgICAgICAgbVJlbmRlciA9IG5ldyBGQk9TeW5jUlMoKTsKLSAgICAgICAgICAgIG1SZW5kZXIuaW5pdChtUlMsIGdldFJlc291cmNlcygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQXR0YWNoZWRUb1dpbmRvdygpIHsKLSAgICAgICAgc3VwZXIub25BdHRhY2hlZFRvV2luZG93KCk7Ci0gICAgICAgIGVuc3VyZVJlbmRlclNjcmlwdCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKFN1cmZhY2VIb2xkZXIgaG9sZGVyLCBpbnQgZm9ybWF0LCBpbnQgdywgaW50IGgpIHsKLSAgICAgICAgc3VwZXIuc3VyZmFjZUNoYW5nZWQoaG9sZGVyLCBmb3JtYXQsIHcsIGgpOwotICAgICAgICBtUmVuZGVyLnN1cmZhY2VDaGFuZ2VkKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7Ci0gICAgICAgIG1SZW5kZXIgPSBudWxsOwotICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SUyA9IG51bGw7Ci0gICAgICAgICAgICBkZXN0cm95UmVuZGVyU2NyaXB0R0woKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGxvYWRBM0RGaWxlKFN0cmluZyBwYXRoKSB7Ci0gICAgICAgIG1SZW5kZXIubG9hZEEzREZpbGUocGF0aCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIG1TY2FsZURldGVjdG9yLm9uVG91Y2hFdmVudChldik7Ci0KLSAgICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKLSAgICAgICAgZmxvYXQgeCA9IGV2LmdldFgoKTsKLSAgICAgICAgZmxvYXQgeSA9IGV2LmdldFkoKTsKLQotICAgICAgICBmaW5hbCBpbnQgYWN0aW9uID0gZXYuZ2V0QWN0aW9uKCk7Ci0KLSAgICAgICAgc3dpdGNoIChhY3Rpb24gJiBNb3Rpb25FdmVudC5BQ1RJT05fTUFTSykgewotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOOiB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bih4LCB5KTsKLSAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBldi5nZXRQb2ludGVySWQoMCk7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRTogewotICAgICAgICAgICAgaWYgKCFtU2NhbGVEZXRlY3Rvci5pc0luUHJvZ3Jlc3MoKSkgewotICAgICAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Nb3ZlKHgsIHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDogewotICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IElOVkFMSURfUE9JTlRFUl9JRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMOiB7Ci0gICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQOiB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcG9pbnRlckluZGV4ID0gKGV2LmdldEFjdGlvbigpICYgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfTUFTSykKLSAgICAgICAgICAgICAgICAgICAgPj4gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfU0hJRlQ7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKHBvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAocG9pbnRlcklkID09IG1BY3RpdmVQb2ludGVySWQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdhcyBvdXIgYWN0aXZlIHBvaW50ZXIgZ29pbmcgdXAuIENob29zZSBhIG5ldwotICAgICAgICAgICAgICAgIC8vIGFjdGl2ZSBwb2ludGVyIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1BvaW50ZXJJbmRleCA9IHBvaW50ZXJJbmRleCA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICAgICAgeCA9IGV2LmdldFgobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgICAgICB5ID0gZXYuZ2V0WShuZXdQb2ludGVySW5kZXgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKHgsIHkpOwotICAgICAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBldi5nZXRQb2ludGVySWQobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgU2NhbGVMaXN0ZW5lciBleHRlbmRzIFNjYWxlR2VzdHVyZURldGVjdG9yLlNpbXBsZU9uU2NhbGVHZXN0dXJlTGlzdGVuZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25TY2FsZShTY2FsZUdlc3R1cmVEZXRlY3RvciBkZXRlY3RvcikgewotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvblNjYWxlKGRldGVjdG9yLmdldFNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9UZXN0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJhYTNlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmZib3Rlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLm9zLk1lc3NhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5TZXR0aW5ncy5TeXN0ZW07Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci0KLWltcG9ydCBqYXZhLmxhbmcuUnVudGltZTsKLQotcHVibGljIGNsYXNzIEZCT1Rlc3QgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIEZCT1Rlc3RWaWV3IG1WaWV3OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotCi0gICAgICAgIC8vIENyZWF0ZSBvdXIgUHJldmlldyB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyCi0gICAgICAgIC8vIEFjdGl2aXR5Ci0gICAgICAgIG1WaWV3ID0gbmV3IEZCT1Rlc3RWaWV3KHRoaXMpOwotICAgICAgICBzZXRDb250ZW50VmlldyhtVmlldyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblJlc3VtZSgpOwotICAgICAgICBtVmlldy5yZXN1bWUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25QYXVzZSgpOwotICAgICAgICBtVmlldy5wYXVzZSgpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9UZXN0UlMuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL2Zib3Rlc3QvRkJPVGVzdFJTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMzBjNGI1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0ZCT1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL2Zib3Rlc3QvRkJPVGVzdFJTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuZmJvdGVzdDsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFUeXBlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YUtpbmQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5UeXBlLkJ1aWxkZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgRkJPVGVzdFJTIHsKLQotICAgIHB1YmxpYyBGQk9UZXN0UlMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgaW5pdFJTKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoKSB7Ci0gICAgICAgIG1SUy5nZXRXaWR0aCgpOwotICAgICAgICBtUlMuZ2V0SGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBwcml2YXRlIFNhbXBsZXIgbVNhbXBsZXI7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVBTQmFja2dyb3VuZDsKLSAgICBwcml2YXRlIFByb2dyYW1GcmFnbWVudCBtUEZCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUFZCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIG1QVkE7Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbUdyaWRJbWFnZTsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbU9mZnNjcmVlbjsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbU9mZnNjcmVlbkRlcHRoOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtQWxsb2NQVjsKLQotICAgIHByaXZhdGUgRm9udCBtSXRhbGljOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4dEFsbG9jOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9NZXNoSW5mbyBtTWVzaGVzOwotICAgIHByaXZhdGUgU2NyaXB0Q19mYm90ZXN0IG1TY3JpcHQ7Ci0KLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uRG93bihmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX29uQWN0aW9uRG93bih4LCB5KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvblNjYWxlKGZsb2F0IHNjYWxlKSB7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX29uQWN0aW9uU2NhbGUoc2NhbGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uTW92ZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX29uQWN0aW9uTW92ZSh4LCB5KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFBGUygpIHsKLSAgICAgICAgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIgYiA9IG5ldyBQcm9ncmFtU3RvcmUuQnVpbGRlcihtUlMpOwotCi0gICAgICAgIGIuc2V0RGVwdGhGdW5jKFByb2dyYW1TdG9yZS5EZXB0aEZ1bmMuTEVTUyk7Ci0gICAgICAgIGIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIGIuc2V0RGVwdGhNYXNrRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgbVBTQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1BGU0JhY2tncm91bmQobVBTQmFja2dyb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQRigpIHsKLSAgICAgICAgU2FtcGxlci5CdWlsZGVyIGJzID0gbmV3IFNhbXBsZXIuQnVpbGRlcihtUlMpOwotICAgICAgICBicy5zZXRNaW5pZmljYXRpb24oU2FtcGxlci5WYWx1ZS5MSU5FQVIpOwotICAgICAgICBicy5zZXRNYWduaWZpY2F0aW9uKFNhbXBsZXIuVmFsdWUuTElORUFSKTsKLSAgICAgICAgYnMuc2V0V3JhcFMoU2FtcGxlci5WYWx1ZS5DTEFNUCk7Ci0gICAgICAgIGJzLnNldFdyYXBUKFNhbXBsZXIuVmFsdWUuQ0xBTVApOwotICAgICAgICBtU2FtcGxlciA9IGJzLmNyZWF0ZSgpOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlciBiID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBiLnNldFRleHR1cmUoUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkVudk1vZGUuUkVQTEFDRSwKLSAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlci5Gb3JtYXQuUkdCQSwgMCk7Ci0gICAgICAgIG1QRkJhY2tncm91bmQgPSBiLmNyZWF0ZSgpOwotICAgICAgICBtUEZCYWNrZ3JvdW5kLmJpbmRTYW1wbGVyKG1TYW1wbGVyLCAwKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUEZCYWNrZ3JvdW5kKG1QRkJhY2tncm91bmQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UFYoKSB7Ci0gICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgcHZiID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgbVBWQmFja2dyb3VuZCA9IHB2Yi5jcmVhdGUoKTsKLQotICAgICAgICBtUFZBID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyhtUlMpOwotICAgICAgICAoKFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKW1QVkJhY2tncm91bmQpLmJpbmRDb25zdGFudHMobVBWQSk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1BWQmFja2dyb3VuZChtUFZCYWNrZ3JvdW5kKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9hZEltYWdlKCkgewotICAgICAgICBtR3JpZEltYWdlID0gQWxsb2NhdGlvbi5jcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UobVJTLCBtUmVzLCBSLmRyYXdhYmxlLnJvYm90LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sLk1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgICAgICBtU2NyaXB0LnNldF9nVEdyaWQobUdyaWRJbWFnZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRUZXh0QWxsb2NhdGlvbihTdHJpbmcgZmlsZU5hbWUpIHsKLSAgICAgICAgU3RyaW5nIGFsbG9jU3RyaW5nID0gIkRpc3BsYXlpbmcgZmlsZTogIiArIGZpbGVOYW1lOwotICAgICAgICBtVGV4dEFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVGcm9tU3RyaW5nKG1SUywgYWxsb2NTdHJpbmcsIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RleHRBbGxvYyhtVGV4dEFsbG9jKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdE1lc2hlcyhGaWxlQTNEIG1vZGVsKSB7Ci0gICAgICAgIGludCBudW1FbnRyaWVzID0gbW9kZWwuZ2V0SW5kZXhFbnRyeUNvdW50KCk7Ci0gICAgICAgIGludCBudW1NZXNoZXMgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVudHJpZXM7IGkgKyspIHsKLSAgICAgICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoaSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCAmJiBlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBGaWxlQTNELkVudHJ5VHlwZS5NRVNIKSB7Ci0gICAgICAgICAgICAgICAgbnVtTWVzaGVzICsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG51bU1lc2hlcyA+IDApIHsKLSAgICAgICAgICAgIG1NZXNoZXMgPSBuZXcgU2NyaXB0RmllbGRfTWVzaEluZm8obVJTLCBudW1NZXNoZXMpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVudHJpZXM7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBGaWxlQTNELkluZGV4RW50cnkgZW50cnkgPSBtb2RlbC5nZXRJbmRleEVudHJ5KGkpOwotICAgICAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsICYmIGVudHJ5LmdldEVudHJ5VHlwZSgpID09IEZpbGVBM0QuRW50cnlUeXBlLk1FU0gpIHsKLSAgICAgICAgICAgICAgICAgICAgTWVzaCBtZXNoID0gZW50cnkuZ2V0TWVzaCgpOwotICAgICAgICAgICAgICAgICAgICBtTWVzaGVzLnNldF9tTWVzaChpLCBtZXNoLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1NZXNoZXMuc2V0X21OdW1JbmRleFNldHMoaSwgbWVzaC5nZXRQcmltaXRpdmVDb3VudCgpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbU1lc2hlcy5jb3B5QWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJObyB2YWxpZCBtZXNoZXMgaW4gZmlsZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNjcmlwdC5iaW5kX2dNZXNoZXMobU1lc2hlcyk7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX3VwZGF0ZU1lc2hJbmZvKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbG9hZEEzREZpbGUoU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgRmlsZUEzRCBtb2RlbCA9IEZpbGVBM0QuY3JlYXRlRnJvbUZpbGUobVJTLCBwYXRoKTsKLSAgICAgICAgaW5pdE1lc2hlcyhtb2RlbCk7Ci0gICAgICAgIGluaXRUZXh0QWxsb2NhdGlvbihwYXRoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFJTKCkgewotCi0gICAgICAgIG1TY3JpcHQgPSBuZXcgU2NyaXB0Q19mYm90ZXN0KG1SUywgbVJlcywgUi5yYXcuZmJvdGVzdCk7Ci0KLSAgICAgICAgaW5pdFBGUygpOwotICAgICAgICBpbml0UEYoKTsKLSAgICAgICAgaW5pdFBWKCk7Ci0KLSAgICAgICAgbG9hZEltYWdlKCk7Ci0KLSAgICAgICAgVHlwZS5CdWlsZGVyIGIgPSBuZXcgVHlwZS5CdWlsZGVyKG1SUywgRWxlbWVudC5SR0JBXzg4ODgobVJTKSk7Ci0gICAgICAgIGIuc2V0WCg1MTIpLnNldFkoNTEyKTsKLSAgICAgICAgbU9mZnNjcmVlbiA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmNyZWF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQpOwotICAgICAgICBtU2NyaXB0LnNldF9nT2Zmc2NyZWVuKG1PZmZzY3JlZW4pOwotCi0gICAgICAgIGIgPSBuZXcgVHlwZS5CdWlsZGVyKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5jcmVhdGVQaXhlbChtUlMsIERhdGFUeXBlLlVOU0lHTkVEXzE2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhS2luZC5QSVhFTF9ERVBUSCkpOwotICAgICAgICBiLnNldFgoNTEyKS5zZXRZKDUxMik7Ci0gICAgICAgIG1PZmZzY3JlZW5EZXB0aCA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ09mZnNjcmVlbkRlcHRoKG1PZmZzY3JlZW5EZXB0aCk7Ci0KLSAgICAgICAgRmlsZUEzRCBtb2RlbCA9IEZpbGVBM0QuY3JlYXRlRnJvbVJlc291cmNlKG1SUywgbVJlcywgUi5yYXcucm9ib3QpOwotICAgICAgICBpbml0TWVzaGVzKG1vZGVsKTsKLQotICAgICAgICBtSXRhbGljID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLklUQUxJQywgOCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dJdGFsaWMobUl0YWxpYyk7Ci0KLSAgICAgICAgaW5pdFRleHRBbGxvY2F0aW9uKCJSLnJhdy5yb2JvdCIpOwotCi0gICAgICAgIG1SUy5iaW5kUm9vdFNjcmlwdChtU2NyaXB0KTsKLSAgICB9Ci19Ci0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1Rlc3RWaWV3LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L0ZCT1Rlc3RWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NTk4ZWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9GQk9UZXN0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLmZib3Rlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdEdMOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TY2FsZUdlc3R1cmVEZXRlY3RvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1wdWJsaWMgY2xhc3MgRkJPVGVzdFZpZXcgZXh0ZW5kcyBSU1N1cmZhY2VWaWV3IHsKLQotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgRkJPVGVzdFJTIG1SZW5kZXI7Ci0KLSAgICBwcml2YXRlIFNjYWxlR2VzdHVyZURldGVjdG9yIG1TY2FsZURldGVjdG9yOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfUE9JTlRFUl9JRCA9IC0xOwotICAgIHByaXZhdGUgaW50IG1BY3RpdmVQb2ludGVySWQgPSBJTlZBTElEX1BPSU5URVJfSUQ7Ci0KLSAgICBwdWJsaWMgRkJPVGVzdFZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICAgICAgbVNjYWxlRGV0ZWN0b3IgPSBuZXcgU2NhbGVHZXN0dXJlRGV0ZWN0b3IoY29udGV4dCwgbmV3IFNjYWxlTGlzdGVuZXIoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3VyZVJlbmRlclNjcmlwdCgpIHsKLSAgICAgICAgaWYgKG1SUyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjID0gbmV3IFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcoKTsKLSAgICAgICAgICAgIHNjLnNldERlcHRoKDE2LCAyNCk7Ci0gICAgICAgICAgICBtUlMgPSBjcmVhdGVSZW5kZXJTY3JpcHRHTChzYyk7Ci0gICAgICAgICAgICBtUmVuZGVyID0gbmV3IEZCT1Rlc3RSUygpOwotICAgICAgICAgICAgbVJlbmRlci5pbml0KG1SUywgZ2V0UmVzb3VyY2VzKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLSAgICAgICAgZW5zdXJlUmVuZGVyU2NyaXB0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCkgewotICAgICAgICBzdXBlci5zdXJmYWNlQ2hhbmdlZChob2xkZXIsIGZvcm1hdCwgdywgaCk7Ci0gICAgICAgIG1SZW5kZXIuc3VyZmFjZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKLSAgICAgICAgbVJlbmRlciA9IG51bGw7Ci0gICAgICAgIGlmIChtUlMgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJTID0gbnVsbDsKLSAgICAgICAgICAgIGRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbG9hZEEzREZpbGUoU3RyaW5nIHBhdGgpIHsKLSAgICAgICAgbVJlbmRlci5sb2FkQTNERmlsZShwYXRoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgbVNjYWxlRGV0ZWN0b3Iub25Ub3VjaEV2ZW50KGV2KTsKLQotICAgICAgICBib29sZWFuIHJldCA9IGZhbHNlOwotICAgICAgICBmbG9hdCB4ID0gZXYuZ2V0WCgpOwotICAgICAgICBmbG9hdCB5ID0gZXYuZ2V0WSgpOwotCi0gICAgICAgIGZpbmFsIGludCBhY3Rpb24gPSBldi5nZXRBY3Rpb24oKTsKLQotICAgICAgICBzd2l0Y2ggKGFjdGlvbiAmIE1vdGlvbkV2ZW50LkFDVElPTl9NQVNLKSB7Ci0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0RPV046IHsKLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKHgsIHkpOwotICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IGV2LmdldFBvaW50ZXJJZCgwKTsKLSAgICAgICAgICAgIHJldCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFOiB7Ci0gICAgICAgICAgICBpZiAoIW1TY2FsZURldGVjdG9yLmlzSW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbk1vdmUoeCwgeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bih4LCB5KTsKLSAgICAgICAgICAgIHJldCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1VQOiB7Ci0gICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9DQU5DRUw6IHsKLSAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBJTlZBTElEX1BPSU5URVJfSUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfVVA6IHsKLSAgICAgICAgICAgIGZpbmFsIGludCBwb2ludGVySW5kZXggPSAoZXYuZ2V0QWN0aW9uKCkgJiBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9JTkRFWF9NQVNLKQotICAgICAgICAgICAgICAgICAgICA+PiBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9JTkRFWF9TSElGVDsKLSAgICAgICAgICAgIGZpbmFsIGludCBwb2ludGVySWQgPSBldi5nZXRQb2ludGVySWQocG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgIGlmIChwb2ludGVySWQgPT0gbUFjdGl2ZVBvaW50ZXJJZCkgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgd2FzIG91ciBhY3RpdmUgcG9pbnRlciBnb2luZyB1cC4gQ2hvb3NlIGEgbmV3Ci0gICAgICAgICAgICAgICAgLy8gYWN0aXZlIHBvaW50ZXIgYW5kIGFkanVzdCBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgbmV3UG9pbnRlckluZGV4ID0gcG9pbnRlckluZGV4ID09IDAgPyAxIDogMDsKLSAgICAgICAgICAgICAgICB4ID0gZXYuZ2V0WChuZXdQb2ludGVySW5kZXgpOwotICAgICAgICAgICAgICAgIHkgPSBldi5nZXRZKG5ld1BvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IGV2LmdldFBvaW50ZXJJZChuZXdQb2ludGVySW5kZXgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBTY2FsZUxpc3RlbmVyIGV4dGVuZHMgU2NhbGVHZXN0dXJlRGV0ZWN0b3IuU2ltcGxlT25TY2FsZUdlc3R1cmVMaXN0ZW5lciB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBvblNjYWxlKFNjYWxlR2VzdHVyZURldGVjdG9yIGRldGVjdG9yKSB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uU2NhbGUoZGV0ZWN0b3IuZ2V0U2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L2Zib3N5bmMucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L2Zib3N5bmMucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMTc3ZWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9mYm9zeW5jLnJzCisrKyAvZGV2L251bGwKQEAgLTEsMjMwICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5mYm90ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotCi1yc19wcm9ncmFtX3ZlcnRleCBnUFZCYWNrZ3JvdW5kOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUEZCYWNrZ3JvdW5kOwotCi1yc19hbGxvY2F0aW9uIGdUR3JpZDsKLQotcnNfcHJvZ3JhbV9zdG9yZSBnUEZTQmFja2dyb3VuZDsKLQotcnNfZm9udCBnSXRhbGljOwotcnNfYWxsb2NhdGlvbiBnVGV4dEFsbG9jOwotCi1yc19hbGxvY2F0aW9uIGdPZmZzY3JlZW47Ci1yc19hbGxvY2F0aW9uIGdPZmZzY3JlZW5EZXB0aDsKLXJzX2FsbG9jYXRpb24gZ1JlYWRCYWNrVGVzdDsKLQotdHlwZWRlZiBzdHJ1Y3QgTWVzaEluZm8gewotICAgIHJzX21lc2ggbU1lc2g7Ci0gICAgaW50IG1OdW1JbmRleFNldHM7Ci0gICAgZmxvYXQzIGJCb3hNaW47Ci0gICAgZmxvYXQzIGJCb3hNYXg7Ci19IE1lc2hJbmZvX3Q7Ci0KLU1lc2hJbmZvX3QgKmdNZXNoZXM7Ci0KLXN0YXRpYyBmbG9hdDMgZ0xvb2tBdDsKLQotc3RhdGljIGZsb2F0IGdSb3RhdGVYOwotc3RhdGljIGZsb2F0IGdSb3RhdGVZOwotc3RhdGljIGZsb2F0IGdab29tOwotCi1zdGF0aWMgZmxvYXQgZ0xhc3RYOwotc3RhdGljIGZsb2F0IGdMYXN0WTsKLQotdm9pZCBvbkFjdGlvbkRvd24oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgIGdMYXN0WCA9IHg7Ci0gICAgZ0xhc3RZID0geTsKLX0KLQotdm9pZCBvbkFjdGlvblNjYWxlKGZsb2F0IHNjYWxlKSB7Ci0KLSAgICBnWm9vbSAqPSAxLjBmIC8gc2NhbGU7Ci0gICAgZ1pvb20gPSBtYXgoMC4xZiwgbWluKGdab29tLCA1MDAuMGYpKTsKLX0KLQotdm9pZCBvbkFjdGlvbk1vdmUoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgIGZsb2F0IGR4ID0gZ0xhc3RYIC0geDsKLSAgICBmbG9hdCBkeSA9IGdMYXN0WSAtIHk7Ci0KLSAgICBpZiAoZmFicyhkeSkgPD0gMi4wZikgewotICAgICAgICBkeSA9IDAuMGY7Ci0gICAgfQotICAgIGlmIChmYWJzKGR4KSA8PSAyLjBmKSB7Ci0gICAgICAgIGR4ID0gMC4wZjsKLSAgICB9Ci0KLSAgICBnUm90YXRlWSAtPSBkeDsKLSAgICBpZiAoZ1JvdGF0ZVkgPiAzNjApIHsKLSAgICAgICAgZ1JvdGF0ZVkgLT0gMzYwOwotICAgIH0KLSAgICBpZiAoZ1JvdGF0ZVkgPCAwKSB7Ci0gICAgICAgIGdSb3RhdGVZICs9IDM2MDsKLSAgICB9Ci0KLSAgICBnUm90YXRlWCAtPSBkeTsKLSAgICBnUm90YXRlWCA9IG1pbihnUm90YXRlWCwgODAuMGYpOwotICAgIGdSb3RhdGVYID0gbWF4KGdSb3RhdGVYLCAtODAuMGYpOwotCi0gICAgZ0xhc3RYID0geDsKLSAgICBnTGFzdFkgPSB5OwotfQotCi12b2lkIGluaXQoKSB7Ci0gICAgZ1JvdGF0ZVggPSAwLjBmOwotICAgIGdSb3RhdGVZID0gMC4wZjsKLSAgICBnWm9vbSA9IDUwLjBmOwotICAgIGdMb29rQXQgPSAwLjBmOwotfQotCi12b2lkIHVwZGF0ZU1lc2hJbmZvKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZsb2F0IG1pblgsIG1pblksIG1pblosIG1heFgsIG1heFksIG1heFo7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgTWVzaEluZm9fdCAqaW5mbyA9IChNZXNoSW5mb190Kilyc0dldEVsZW1lbnRBdChhbGxNZXNoZXMsIGkpOwotICAgICAgICByc2dNZXNoQ29tcHV0ZUJvdW5kaW5nQm94KGluZm8tPm1NZXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaW5YLCAmbWluWSwgJm1pblosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heFgsICZtYXhZLCAmbWF4Wik7Ci0gICAgICAgIGluZm8tPmJCb3hNaW4gPSAoZmxvYXQzKXttaW5YLCBtaW5ZLCBtaW5afTsKLSAgICAgICAgaW5mby0+YkJveE1heCA9IChmbG9hdDMpe21heFgsIG1heFksIG1heFp9OwotICAgICAgICBnTG9va0F0ICs9IChpbmZvLT5iQm94TWluICsgaW5mby0+YkJveE1heCkqMC41ZjsKLSAgICB9Ci0gICAgZ0xvb2tBdCA9IGdMb29rQXQgLyAoZmxvYXQpc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgcmVuZGVyQWxsTWVzaGVzKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIE1lc2hJbmZvX3QgKmluZm8gPSAoTWVzaEluZm9fdCopcnNHZXRFbGVtZW50QXQoYWxsTWVzaGVzLCBpKTsKLSAgICAgICAgcnNnRHJhd01lc2goaW5mby0+bU1lc2gpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZHJhd0Rlc2NyaXB0aW9uKCkgewotICAgIHVpbnQgaGVpZ2h0ID0gcnNnR2V0SGVpZ2h0KCk7Ci0gICAgaW50IGxlZnQgPSAwLCByaWdodCA9IDAsIHRvcCA9IDAsIGJvdHRvbSA9IDA7Ci0KLSAgICByc2dCaW5kRm9udChnSXRhbGljKTsKLQotICAgIHJzZ01lYXN1cmVUZXh0KGdUZXh0QWxsb2MsICZsZWZ0LCAmcmlnaHQsICZ0b3AsICZib3R0b20pOwotICAgIHJzZ0RyYXdUZXh0KGdUZXh0QWxsb2MsIDIgLWxlZnQsIGhlaWdodCAtIDIgKyBib3R0b20pOwotfQotCi1zdGF0aWMgdm9pZCByZW5kZXJPZmZzY3JlZW4oYm9vbCB1c2VEZXB0aCkgewotCi0gICAgcnNnQmluZENvbG9yVGFyZ2V0KGdPZmZzY3JlZW4sIDApOwotICAgIGlmICh1c2VEZXB0aCkgewotICAgICAgICByc2dCaW5kRGVwdGhUYXJnZXQoZ09mZnNjcmVlbkRlcHRoKTsKLSAgICAgICAgcnNnQ2xlYXJEZXB0aCgxLjBmKTsKLSAgICB9IGVsc2UgewotICAgICAgICByc2dDbGVhckRlcHRoVGFyZ2V0KCk7Ci0gICAgfQotICAgIHJzZ0NsZWFyQ29sb3IoMC44ZiwgMC4wZiwgMC4wZiwgMS4wZik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUFZCYWNrZ3JvdW5kKTsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpcnNBbGxvY2F0aW9uR2V0RGltWChnT2Zmc2NyZWVuKSAvIChmbG9hdClyc0FsbG9jYXRpb25HZXREaW1ZKGdPZmZzY3JlZW4pOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZwcm9qLCAzMC4wZiwgYXNwZWN0LCAxLjBmLCAxMDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1BGU0JhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUR3JpZCk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIC8vIFBvc2l0aW9uIG91ciBtb2RlbHMgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4VHJhbnNsYXRlKCZtYXRyaXgsIGdMb29rQXQueCwgZ0xvb2tBdC55LCBnTG9va0F0LnogLSBnWm9vbSk7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVgsIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZtYXRyaXgsIGdSb3RhdGVZLCAwLjBmLCAxLjBmLCAwLjBmKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotCi0gICAgcmVuZGVyQWxsTWVzaGVzKCk7Ci0KLSAgICAvLyBSZW5kZXIgaW50byB0aGUgZnJhbWJ1ZmZlcgotICAgIHJzZ0NsZWFyQWxsUmVuZGVyVGFyZ2V0cygpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T2Zmc2NyZWVuUmVzdWx0KGludCBwb3NYLCBpbnQgcG9zWSwgcnNfYWxsb2NhdGlvbiB0ZXh0dXJlKSB7Ci0gICAgLy8gZGlzcGxheSB0aGUgcmVzdWx0Ci0gICAgcnNfbWF0cml4NHg0IHByb2osIG1hdHJpeDsKLSAgICByc01hdHJpeExvYWRPcnRobygmcHJvaiwgMCwgcnNnR2V0V2lkdGgoKSwgcnNnR2V0SGVpZ2h0KCksIDAsIC01MDAsIDUwMCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLSAgICByc01hdHJpeExvYWRJZGVudGl0eSgmbWF0cml4KTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIHRleHR1cmUpOwotICAgIGZsb2F0IHN0YXJ0WCA9IHBvc1gsIHN0YXJ0WSA9IHBvc1k7Ci0gICAgZmxvYXQgd2lkdGggPSAyNTYsIGhlaWdodCA9IDI1NjsKLSAgICByc2dEcmF3UXVhZFRleENvb3JkcyhzdGFydFgsIHN0YXJ0WSwgMCwgMCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFksIDAsIDEsIDEpOwotfQotCi1pbnQgcm9vdCh2b2lkKSB7Ci0KLSAgICByc2dDbGVhckNvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0NsZWFyRGVwdGgoMS4wZik7Ci0KLSAgICByZW5kZXJPZmZzY3JlZW4odHJ1ZSk7Ci0gICAgZHJhd09mZnNjcmVlblJlc3VsdCgwLCAwLCBnT2Zmc2NyZWVuKTsKLQotCi0gICAgdWludDMyX3QgdyA9IHJzQWxsb2NhdGlvbkdldERpbVgoZ09mZnNjcmVlbik7Ci0gICAgdWludDMyX3QgaCA9IHJzQWxsb2NhdGlvbkdldERpbVkoZ09mZnNjcmVlbik7Ci0KLSAgICByc2dBbGxvY2F0aW9uU3luY0FsbChnT2Zmc2NyZWVuLCBSU19BTExPQ0FUSU9OX1VTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQpOwotCi0gICAgcnNBbGxvY2F0aW9uQ29weTJEUmFuZ2UoZ1JlYWRCYWNrVGVzdCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU19BTExPQ0FUSU9OX0NVQkVNQVBfRkFDRV9QT1NJVElWRV9YLCB3LCBoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdPZmZzY3JlZW4sIDAsIDAsIDAsIFJTX0FMTE9DQVRJT05fQ1VCRU1BUF9GQUNFX1BPU0lUSVZFX1gpOwotCi0gICAgcnNnQWxsb2NhdGlvblN5bmNBbGwoZ1JlYWRCYWNrVGVzdCk7Ci0gICAgZHJhd09mZnNjcmVlblJlc3VsdCgwLCAzMDAsIGdSZWFkQmFja1Rlc3QpOwotCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1BWQmFja2dyb3VuZCk7Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KXJzZ0dldFdpZHRoKCkgLyAoZmxvYXQpcnNnR2V0SGVpZ2h0KCk7Ci0gICAgcnNNYXRyaXhMb2FkUGVyc3BlY3RpdmUoJnByb2osIDMwLjBmLCBhc3BlY3QsIDEuMGYsIDEwMC4wZik7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1BGQmFja2dyb3VuZCk7Ci0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUEZTQmFja2dyb3VuZCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1BGQmFja2dyb3VuZCwgMCwgZ1RHcmlkKTsKLQotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgLy8gUG9zaXRpb24gb3VyIG1vZGVscyBvbiB0aGUgc2NyZWVuCi0gICAgcnNNYXRyaXhUcmFuc2xhdGUoJm1hdHJpeCwgZ0xvb2tBdC54LCBnTG9va0F0LnksIGdMb29rQXQueiAtIGdab29tKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCBnUm90YXRlWCwgMS4wZiwgMC4wZiwgMC4wZik7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVksIDAuMGYsIDEuMGYsIDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0KLSAgICByZW5kZXJBbGxNZXNoZXMoKTsKLQotICAgIGRyYXdEZXNjcmlwdGlvbigpOwotCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L2Zib3Rlc3QucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9GQk9UZXN0L3NyYy9jb20vYW5kcm9pZC9mYm90ZXN0L2Zib3Rlc3QucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzYTNjODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvRkJPVGVzdC9zcmMvY29tL2FuZHJvaWQvZmJvdGVzdC9mYm90ZXN0LnJzCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5mYm90ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotCi1yc19wcm9ncmFtX3ZlcnRleCBnUFZCYWNrZ3JvdW5kOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUEZCYWNrZ3JvdW5kOwotCi1yc19hbGxvY2F0aW9uIGdUR3JpZDsKLQotcnNfcHJvZ3JhbV9zdG9yZSBnUEZTQmFja2dyb3VuZDsKLQotcnNfZm9udCBnSXRhbGljOwotcnNfYWxsb2NhdGlvbiBnVGV4dEFsbG9jOwotCi1yc19hbGxvY2F0aW9uIGdPZmZzY3JlZW47Ci1yc19hbGxvY2F0aW9uIGdPZmZzY3JlZW5EZXB0aDsKLQotdHlwZWRlZiBzdHJ1Y3QgTWVzaEluZm8gewotICAgIHJzX21lc2ggbU1lc2g7Ci0gICAgaW50IG1OdW1JbmRleFNldHM7Ci0gICAgZmxvYXQzIGJCb3hNaW47Ci0gICAgZmxvYXQzIGJCb3hNYXg7Ci19IE1lc2hJbmZvX3Q7Ci0KLU1lc2hJbmZvX3QgKmdNZXNoZXM7Ci0KLXN0YXRpYyBmbG9hdDMgZ0xvb2tBdDsKLQotc3RhdGljIGZsb2F0IGdSb3RhdGVYOwotc3RhdGljIGZsb2F0IGdSb3RhdGVZOwotc3RhdGljIGZsb2F0IGdab29tOwotCi1zdGF0aWMgZmxvYXQgZ0xhc3RYOwotc3RhdGljIGZsb2F0IGdMYXN0WTsKLQotdm9pZCBvbkFjdGlvbkRvd24oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgIGdMYXN0WCA9IHg7Ci0gICAgZ0xhc3RZID0geTsKLX0KLQotdm9pZCBvbkFjdGlvblNjYWxlKGZsb2F0IHNjYWxlKSB7Ci0KLSAgICBnWm9vbSAqPSAxLjBmIC8gc2NhbGU7Ci0gICAgZ1pvb20gPSBtYXgoMC4xZiwgbWluKGdab29tLCA1MDAuMGYpKTsKLX0KLQotdm9pZCBvbkFjdGlvbk1vdmUoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgIGZsb2F0IGR4ID0gZ0xhc3RYIC0geDsKLSAgICBmbG9hdCBkeSA9IGdMYXN0WSAtIHk7Ci0KLSAgICBpZiAoZmFicyhkeSkgPD0gMi4wZikgewotICAgICAgICBkeSA9IDAuMGY7Ci0gICAgfQotICAgIGlmIChmYWJzKGR4KSA8PSAyLjBmKSB7Ci0gICAgICAgIGR4ID0gMC4wZjsKLSAgICB9Ci0KLSAgICBnUm90YXRlWSAtPSBkeDsKLSAgICBpZiAoZ1JvdGF0ZVkgPiAzNjApIHsKLSAgICAgICAgZ1JvdGF0ZVkgLT0gMzYwOwotICAgIH0KLSAgICBpZiAoZ1JvdGF0ZVkgPCAwKSB7Ci0gICAgICAgIGdSb3RhdGVZICs9IDM2MDsKLSAgICB9Ci0KLSAgICBnUm90YXRlWCAtPSBkeTsKLSAgICBnUm90YXRlWCA9IG1pbihnUm90YXRlWCwgODAuMGYpOwotICAgIGdSb3RhdGVYID0gbWF4KGdSb3RhdGVYLCAtODAuMGYpOwotCi0gICAgZ0xhc3RYID0geDsKLSAgICBnTGFzdFkgPSB5OwotfQotCi12b2lkIGluaXQoKSB7Ci0gICAgZ1JvdGF0ZVggPSAwLjBmOwotICAgIGdSb3RhdGVZID0gMC4wZjsKLSAgICBnWm9vbSA9IDUwLjBmOwotICAgIGdMb29rQXQgPSAwLjBmOwotfQotCi12b2lkIHVwZGF0ZU1lc2hJbmZvKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZsb2F0IG1pblgsIG1pblksIG1pblosIG1heFgsIG1heFksIG1heFo7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgTWVzaEluZm9fdCAqaW5mbyA9IChNZXNoSW5mb190Kilyc0dldEVsZW1lbnRBdChhbGxNZXNoZXMsIGkpOwotICAgICAgICByc2dNZXNoQ29tcHV0ZUJvdW5kaW5nQm94KGluZm8tPm1NZXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaW5YLCAmbWluWSwgJm1pblosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heFgsICZtYXhZLCAmbWF4Wik7Ci0gICAgICAgIGluZm8tPmJCb3hNaW4gPSAoZmxvYXQzKXttaW5YLCBtaW5ZLCBtaW5afTsKLSAgICAgICAgaW5mby0+YkJveE1heCA9IChmbG9hdDMpe21heFgsIG1heFksIG1heFp9OwotICAgICAgICBnTG9va0F0ICs9IChpbmZvLT5iQm94TWluICsgaW5mby0+YkJveE1heCkqMC41ZjsKLSAgICB9Ci0gICAgZ0xvb2tBdCA9IGdMb29rQXQgLyAoZmxvYXQpc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgcmVuZGVyQWxsTWVzaGVzKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIE1lc2hJbmZvX3QgKmluZm8gPSAoTWVzaEluZm9fdCopcnNHZXRFbGVtZW50QXQoYWxsTWVzaGVzLCBpKTsKLSAgICAgICAgcnNnRHJhd01lc2goaW5mby0+bU1lc2gpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZHJhd0Rlc2NyaXB0aW9uKCkgewotICAgIHVpbnQgaGVpZ2h0ID0gcnNnR2V0SGVpZ2h0KCk7Ci0gICAgaW50IGxlZnQgPSAwLCByaWdodCA9IDAsIHRvcCA9IDAsIGJvdHRvbSA9IDA7Ci0KLSAgICByc2dCaW5kRm9udChnSXRhbGljKTsKLQotICAgIHJzZ01lYXN1cmVUZXh0KGdUZXh0QWxsb2MsICZsZWZ0LCAmcmlnaHQsICZ0b3AsICZib3R0b20pOwotICAgIHJzZ0RyYXdUZXh0KGdUZXh0QWxsb2MsIDIgLWxlZnQsIGhlaWdodCAtIDIgKyBib3R0b20pOwotfQotCi1zdGF0aWMgdm9pZCByZW5kZXJPZmZzY3JlZW4oYm9vbCB1c2VEZXB0aCkgewotCi0gICAgcnNnQmluZENvbG9yVGFyZ2V0KGdPZmZzY3JlZW4sIDApOwotICAgIGlmICh1c2VEZXB0aCkgewotICAgICAgICByc2dCaW5kRGVwdGhUYXJnZXQoZ09mZnNjcmVlbkRlcHRoKTsKLSAgICAgICAgcnNnQ2xlYXJEZXB0aCgxLjBmKTsKLSAgICB9IGVsc2UgewotICAgICAgICByc2dDbGVhckRlcHRoVGFyZ2V0KCk7Ci0gICAgfQotICAgIHJzZ0NsZWFyQ29sb3IoMC44ZiwgMC44ZiwgMC44ZiwgMS4wZik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUFZCYWNrZ3JvdW5kKTsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpcnNBbGxvY2F0aW9uR2V0RGltWChnT2Zmc2NyZWVuKSAvIChmbG9hdClyc0FsbG9jYXRpb25HZXREaW1ZKGdPZmZzY3JlZW4pOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZwcm9qLCAzMC4wZiwgYXNwZWN0LCAxLjBmLCAxMDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1BGU0JhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUR3JpZCk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIC8vIFBvc2l0aW9uIG91ciBtb2RlbHMgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4VHJhbnNsYXRlKCZtYXRyaXgsIGdMb29rQXQueCwgZ0xvb2tBdC55LCBnTG9va0F0LnogLSBnWm9vbSk7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVgsIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZtYXRyaXgsIGdSb3RhdGVZLCAwLjBmLCAxLjBmLCAwLjBmKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotCi0gICAgcmVuZGVyQWxsTWVzaGVzKCk7Ci0KLSAgICAvLyBSZW5kZXIgaW50byB0aGUgZnJhbWJ1ZmZlcgotICAgIHJzZ0NsZWFyQWxsUmVuZGVyVGFyZ2V0cygpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3T2Zmc2NyZWVuUmVzdWx0KGludCBwb3NYLCBpbnQgcG9zWSkgewotICAgIC8vIGRpc3BsYXkgdGhlIHJlc3VsdAotICAgIHJzX21hdHJpeDR4NCBwcm9qLCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkT3J0aG8oJnByb2osIDAsIHJzZ0dldFdpZHRoKCksIHJzZ0dldEhlaWdodCgpLCAwLCAtNTAwLCA1MDApOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLSAgICByc2dCaW5kVGV4dHVyZShnUEZCYWNrZ3JvdW5kLCAwLCBnT2Zmc2NyZWVuKTsKLSAgICBmbG9hdCBzdGFydFggPSBwb3NYLCBzdGFydFkgPSBwb3NZOwotICAgIGZsb2F0IHdpZHRoID0gMjU2LCBoZWlnaHQgPSAyNTY7Ci0gICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLCAxKTsKLX0KLQotaW50IHJvb3Qodm9pZCkgewotCi0gICAgcnNnQ2xlYXJDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKLSAgICByc2dDbGVhckRlcHRoKDEuMGYpOwotCi0gICAgcmVuZGVyT2Zmc2NyZWVuKHRydWUpOwotICAgIGRyYXdPZmZzY3JlZW5SZXN1bHQoMCwgMCk7Ci0KLSAgICByZW5kZXJPZmZzY3JlZW4oZmFsc2UpOwotICAgIGRyYXdPZmZzY3JlZW5SZXN1bHQoMCwgMjU2KTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQVkJhY2tncm91bmQpOwotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZwcm9qLCAzMC4wZiwgYXNwZWN0LCAxLjBmLCAxMDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1BGU0JhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUR3JpZCk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIC8vIFBvc2l0aW9uIG91ciBtb2RlbHMgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4VHJhbnNsYXRlKCZtYXRyaXgsIGdMb29rQXQueCwgZ0xvb2tBdC55LCBnTG9va0F0LnogLSBnWm9vbSk7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVgsIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZtYXRyaXgsIGdSb3RhdGVZLCAwLjBmLCAxLjBmLCAwLjBmKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotCi0gICAgcmVuZGVyQWxsTWVzaGVzKCk7Ci0KLSAgICBkcmF3RGVzY3JpcHRpb24oKTsKLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWMwOGVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpICQoY2FsbCBhbGwtcmVuZGVyc2NyaXB0LWZpbGVzLXVuZGVyLCBzcmMpCi0KLUxPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBSc0hlbGxvV29ybGQKLQotTE9DQUxfU0RLX1ZFUlNJT04gOj0gMTcKLQotaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9IZWxsb1dvcmxkL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9IZWxsb1dvcmxkL0FuZHJvaWRNYW5pZmVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMzdkYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLQotICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAKLSAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHBhY2thZ2U9ImNvbS5leGFtcGxlLmFuZHJvaWQucnMuaGVsbG93b3JsZCI+Ci0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lvbj0iMTEiIC8+Ci0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9IlJzSGVsbG9Xb3JsZCIKLSAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS90ZXN0X3BhdHRlcm4iPgotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJIZWxsb1dvcmxkIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iUnNIZWxsb1dvcmxkIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuQmxhY2suTm9UaXRsZUJhciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLTwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9IZWxsb1dvcmxkL19pbmRleC5odG1sIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9faW5kZXguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNhYjczOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9IZWxsb1dvcmxkL19pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPHA+QSBSZW5kZXJzY3JpcHQgZ3JhcGhpY3MgYXBwbGljYXRpb24gdGhhdCBkcmF3cyB0aGUgdGV4dCAiSGVsbG8sIFdvcmxkISIgd2hlcmUgdGhlIHVzZXIgdG91Y2hlcy48L3A+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9yZXMvZHJhd2FibGUvdGVzdF9wYXR0ZXJuLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvcmVzL2RyYXdhYmxlL3Rlc3RfcGF0dGVybi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZDE0NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9yZXMvZHJhd2FibGUvdGVzdF9wYXR0ZXJuLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9IZWxsb1dvcmxkL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjE2OTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLnJzLmhlbGxvd29ybGQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLQotLy8gUmVuZGVyc2NyaXB0IGFjdGl2aXR5Ci1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZCBleHRlbmRzIEFjdGl2aXR5IHsKLQotICAgIC8vIEN1c3RvbSB2aWV3IHRvIHVzZSB3aXRoIFJlbmRlclNjcmlwdAotICAgIHByaXZhdGUgSGVsbG9Xb3JsZFZpZXcgbVZpZXc7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgaWNpY2xlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKGljaWNsZSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIG91ciB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyIEFjdGl2aXR5Ci0gICAgICAgIG1WaWV3ID0gbmV3IEhlbGxvV29ybGRWaWV3KHRoaXMpOwotICAgICAgICBzZXRDb250ZW50VmlldyhtVmlldyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYW4gYXBwIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgICAgIG1WaWV3LnJlc3VtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYW4gYXBwIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKLSAgICAgICAgbVZpZXcucGF1c2UoKTsKLSAgICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzE2NDExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQucnMuaGVsbG93b3JsZDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci0KLS8vIFRoaXMgaXMgdGhlIHJlbmRlcmVyIGZvciB0aGUgSGVsbG9Xb3JsZFZpZXcKLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkUlMgewotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0KLSAgICBwcml2YXRlIFNjcmlwdENfaGVsbG93b3JsZCBtU2NyaXB0OwotCi0gICAgcHVibGljIEhlbGxvV29ybGRSUygpIHsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIHByb3ZpZGVzIHVzIHdpdGggdGhlIHJlbmRlcnNjcmlwdCBjb250ZXh0IGFuZCByZXNvdXJjZXMgdGhhdAotICAgIC8vIGFsbG93IHVzIHRvIGNyZWF0ZSB0aGUgc2NyaXB0IHRoYXQgZG9lcyByZW5kZXJpbmcKLSAgICBwdWJsaWMgdm9pZCBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBpbml0UlMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbkRvd24oaW50IHgsIGludCB5KSB7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUb3VjaFgoeCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUb3VjaFkoeSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRSUygpIHsKLSAgICAgICAgbVNjcmlwdCA9IG5ldyBTY3JpcHRDX2hlbGxvd29ybGQobVJTLCBtUmVzLCBSLnJhdy5oZWxsb3dvcmxkKTsKLSAgICAgICAgbVJTLmJpbmRSb290U2NyaXB0KG1TY3JpcHQpOwotICAgIH0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvaGVsbG93b3JsZC9IZWxsb1dvcmxkVmlldy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL0hlbGxvV29ybGRWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1N2ViYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL0hlbGxvV29ybGRWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uZXhhbXBsZS5hbmRyb2lkLnJzLmhlbGxvd29ybGQ7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdEdMOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZFZpZXcgZXh0ZW5kcyBSU1N1cmZhY2VWaWV3IHsKLSAgICAvLyBSZW5kZXJzY2lwdCBjb250ZXh0Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgLy8gU2NyaXB0IHRoYXQgZG9lcyB0aGUgcmVuZGVyaW5nCi0gICAgcHJpdmF0ZSBIZWxsb1dvcmxkUlMgbVJlbmRlcjsKLQotICAgIHB1YmxpYyBIZWxsb1dvcmxkVmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIGVuc3VyZVJlbmRlclNjcmlwdCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSZW5kZXJTY3JpcHQoKSB7Ci0gICAgICAgIGlmIChtUlMgPT0gbnVsbCkgewotICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJzY3JpcHQgd2l0aCBkZXNpcmVkIHN1cmZhY2UgY2hhcmFjdGVyaXN0aWNzLgotICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBqdXN0IHVzZSB0aGUgZGVmYXVsdHMKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcgc2MgPSBuZXcgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZygpOwotICAgICAgICAgICAgbVJTID0gY3JlYXRlUmVuZGVyU2NyaXB0R0woc2MpOwotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBzY3JpcHQgdGhhdCBkb2VzIHRoZSByZW5kZXJpbmcKLSAgICAgICAgICAgIG1SZW5kZXIgPSBuZXcgSGVsbG9Xb3JsZFJTKCk7Ci0gICAgICAgICAgICBtUmVuZGVyLmluaXQobVJTLCBnZXRSZXNvdXJjZXMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKLSAgICAgICAgLy8gSGFuZGxlIHRoZSBzeXN0ZW0gZXZlbnQgYW5kIGNsZWFuIHVwCi0gICAgICAgIG1SZW5kZXIgPSBudWxsOwotICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SUyA9IG51bGw7Ci0gICAgICAgICAgICBkZXN0cm95UmVuZGVyU2NyaXB0R0woKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldikgewotICAgICAgICAvLyBQYXNzIHRvdWNoIGV2ZW50cyBmcm9tIHRoZSBzeXN0ZW0gdG8gdGhlIHJlbmRlcmluZyBzY3JpcHQKLSAgICAgICAgaWYgKGV2LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOKSB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bigoaW50KWV2LmdldFgoKSwgKGludClldi5nZXRZKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL0hlbGxvV29ybGQvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL2hlbGxvd29ybGQucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZjYyNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvSGVsbG9Xb3JsZC9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9oZWxsb3dvcmxkL2hlbGxvd29ybGQucnMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLS8vIFRlbGwgd2hpY2ggamF2YSBwYWNrYWdlIG5hbWUgdGhlIHJlZmxlY3RlZCBmaWxlcyBzaG91bGQgYmVsb25nIHRvCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5leGFtcGxlLmFuZHJvaWQucnMuaGVsbG93b3JsZCkKLQotLy8gQnVpbHQtaW4gaGVhZGVyIHdpdGggZ3JhcGhpY3MgQVBJJ3MKLSNpbmNsdWRlICJyc19ncmFwaGljcy5yc2giCi0KLS8vIGdUb3VjaFggYW5kIGdUb3VjaFkgYXJlIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcmVmbGVjdGVkIGZvciB1c2UKLS8vIGJ5IHRoZSBqYXZhIEFQSS4gV2UgY2FuIHVzZSB0aGVtIHRvIG5vdGlmeSB0aGUgc2NyaXB0IG9mIHRvdWNoIGV2ZW50cy4KLWludCBnVG91Y2hYOwotaW50IGdUb3VjaFk7Ci0KLS8vIFRoaXMgaXMgaW52b2tlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIHNjcmlwdCBpcyBjcmVhdGVkCi12b2lkIGluaXQoKSB7Ci0gICAgZ1RvdWNoWCA9IDUwLjBmOwotICAgIGdUb3VjaFkgPSA1MC4wZjsKLX0KLQotaW50IHJvb3Qodm9pZCkgewotCi0gICAgLy8gQ2xlYXIgdGhlIGJhY2tncm91bmQgY29sb3IKLSAgICByc2dDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwotICAgIC8vIFRlbGwgdGhlIHJ1bnRpbWUgd2hhdCB0aGUgZm9udCBjb2xvciBzaG91bGQgYmUKLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgLy8gSW50cm91ZHVjZSBvdXJzZWx2ZXMgdG8gdGhlIHdvcmxkIGJ5IGRyYXdpbmcgYSBncmVldGluZwotICAgIC8vIGF0IHRoZSBwb3NpdGlvbiB1c2VyIHRvdWNoZWQgb24gdGhlIHNjcmVlbgotICAgIHJzZ0RyYXdUZXh0KCJIZWxsbyBXb3JsZCEiLCBnVG91Y2hYLCBnVG91Y2hZKTsKLQotICAgIC8vIFJldHVybiB2YWx1ZSB0ZWxscyBSUyByb3VnaGx5IGhvdyBvZnRlbiB0byByZWRyYXcKLSAgICAvLyBpbiB0aGlzIGNhc2UgMjAgbXMKLSAgICByZXR1cm4gMjA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUzNTY3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykgJChjYWxsIGFsbC1yZW5kZXJzY3JpcHQtZmlsZXMtdW5kZXIsIHNyYykKLQotTE9DQUxfUEFDS0FHRV9OQU1FIDo9IFJzTWlzY1NhbXBsZXMKLQotTE9DQUxfU0RLX1ZFUlNJT04gOj0gMTcKLQotaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvQW5kcm9pZE1hbmlmZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhhMzk3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0iY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlcyI+Ci0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lvbj0iMTEiIC8+Ci0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9IlJzTWlzY1NhbXBsZXMiCi0gICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvdGVzdF9wYXR0ZXJuIj4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUnNMaXN0IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iUnNMaXN0IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuQmxhY2suTm9UaXRsZUJhciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIAotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJSc1JlbmRlclN0YXRlcyIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IlJzU3RhdGVzIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuQmxhY2suTm9UaXRsZUJhciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLTwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9faW5kZXguaHRtbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL19pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODcyNDMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL19pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPHA+QSBzZXQgb2Ygc2FtcGxlcyB0aGF0IGRlbW9uc3RyYXRlIGhvdyB0byB1c2UgdmFyaW91cyBmZWF0dXJlcyBvZiB0aGUgUmVuZGVyc2NyaXB0IEFQSXMuPC9wPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9jaGVja2VyLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9jaGVja2VyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzMWUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvZHJhd2FibGUtbm9kcGkvY2hlY2tlci5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvZHJhd2FibGUtbm9kcGkvY3ViZW1hcF90ZXN0LnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9jdWJlbWFwX3Rlc3QucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWYzNWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9jdWJlbWFwX3Rlc3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL2RyYXdhYmxlLW5vZHBpL2RhdGEucG5nIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL2RyYXdhYmxlLW5vZHBpL2RhdGEucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTM0NzE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9kYXRhLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9sZWFmLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS9sZWFmLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkMzc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvZHJhd2FibGUtbm9kcGkvbGVhZi5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvZHJhd2FibGUtbm9kcGkvdGVzdF9wYXR0ZXJuLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS90ZXN0X3BhdHRlcm4ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2QxNDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS90ZXN0X3BhdHRlcm4ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL2RyYXdhYmxlLW5vZHBpL3RvcnVzbWFwLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9kcmF3YWJsZS1ub2RwaS90b3J1c21hcC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDhmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL2RyYXdhYmxlLW5vZHBpL3RvcnVzbWFwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvbXVsdGl0ZXhmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L211bHRpdGV4Zi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDkyYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvbXVsdGl0ZXhmLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgdmVjMiB0MCA9IHZhclRleDAueHk7Ci0gICBsb3dwIHZlYzQgY29sMCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBsb3dwIHZlYzQgY29sMSA9IHRleHR1cmUyRChVTklfVGV4MSwgdDAqNC4wKS5yZ2JhOwotICAgbG93cCB2ZWM0IGNvbDIgPSB0ZXh0dXJlMkQoVU5JX1RleDIsIHQwKS5yZ2JhOwotICAgY29sMC54eXogPSBjb2wwLnh5eipjb2wxLnh5eioxLjU7Ci0gICBjb2wwLnh5eiA9IG1peChjb2wwLnh5eiwgY29sMi54eXosIGNvbDIudyk7Ci0gICBjb2wwLncgPSAwLjU7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2wwOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcjJmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcjJmLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYzA1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXIyZi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotdmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zOwotdmFyeWluZyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLQotICAgdmVjMyBWID0gbm9ybWFsaXplKC12YXJXb3JsZFBvcy54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBub3JtYWxpemUodmFyV29ybGROb3JtYWwpOwotCi0gICB2ZWMzIGxpZ2h0MFZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHQwX1Bvc2lzaW9uLnh5eiAtIHZhcldvcmxkUG9zKTsKLSAgIHZlYzMgbGlnaHQwUiA9IC1yZWZsZWN0KGxpZ2h0MFZlYywgd29ybGROb3JtKTsKLSAgIGZsb2F0IGxpZ2h0MF9EaWZmdXNlID0gY2xhbXAoZG90KHdvcmxkTm9ybSwgbGlnaHQwVmVjKSwgMC4wLCAxLjApICogVU5JX2xpZ2h0MF9EaWZmdXNlOwotICAgZmxvYXQgbGlnaHQwU3BlYyA9IGNsYW1wKGRvdChsaWdodDBSLCBWKSwgMC4wMDEsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDBfU3BlY3VsYXIgPSBwb3cobGlnaHQwU3BlYywgVU5JX2xpZ2h0MF9Db3NpbmVQb3dlcikgKiBVTklfbGlnaHQwX1NwZWN1bGFyOwotCi0gICB2ZWMzIGxpZ2h0MVZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHQxX1Bvc2lzaW9uLnh5eiAtIHZhcldvcmxkUG9zKTsKLSAgIHZlYzMgbGlnaHQxUiA9IHJlZmxlY3QobGlnaHQxVmVjLCB3b3JsZE5vcm0pOwotICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCkgKiBVTklfbGlnaHQxX0RpZmZ1c2U7Ci0gICBmbG9hdCBsaWdodDFTcGVjID0gY2xhbXAoZG90KGxpZ2h0MVIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MV9TcGVjdWxhciA9IHBvdyhsaWdodDFTcGVjLCBVTklfbGlnaHQxX0Nvc2luZVBvd2VyKSAqIFVOSV9saWdodDFfU3BlY3VsYXI7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIChsaWdodDBfRGlmZnVzZSAqIFVOSV9saWdodDBfRGlmZnVzZUNvbG9yLnh5eiArIGxpZ2h0MV9EaWZmdXNlICogVU5JX2xpZ2h0MV9EaWZmdXNlQ29sb3IueHl6KTsKLSAgIGNvbC54eXogKz0gbGlnaHQwX1NwZWN1bGFyICogVU5JX2xpZ2h0MF9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGNvbC54eXogKz0gbGlnaHQxX1NwZWN1bGFyICogVU5JX2xpZ2h0MV9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGdsX0ZyYWdDb2xvciA9IGNvbDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXIybW92ZXYuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyMm1vdmV2Lmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzgwN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXIybW92ZXYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uOwotICAgdmVjMyBvbGRQb3MgPSBvYmpQb3MueHl6OwotICAgb2JqUG9zLnh5eiArPSAwLjEqc2luKG9ialBvcy54eXoqMi4wICsgVU5JX3RpbWUpOwotICAgb2JqUG9zLnh5eiArPSAwLjA1KnNpbihvYmpQb3MueHl6KjQuMCArIFVOSV90aW1lKjAuNSk7Ci0gICBvYmpQb3MueHl6ICs9IDAuMDIqc2luKG9ialBvcy54eXoqNy4wICsgVU5JX3RpbWUqMC43NSk7Ci0gICB2ZWM0IHdvcmxkUG9zID0gVU5JX21vZGVsICogb2JqUG9zOwotICAgZ2xfUG9zaXRpb24gPSBVTklfcHJvaiAqIHdvcmxkUG9zOwotCi0gICBtYXQzIG1vZGVsMyA9IG1hdDMoVU5JX21vZGVsWzBdLnh5eiwgVU5JX21vZGVsWzFdLnh5eiwgVU5JX21vZGVsWzJdLnh5eik7Ci0gICB2ZWMzIHdvcmxkTm9ybSA9IG1vZGVsMyAqIChBVFRSSUJfbm9ybWFsICsgb2xkUG9zIC0gb2JqUG9zLnh5eik7Ci0KLSAgIHZhcldvcmxkUG9zID0gd29ybGRQb3MueHl6OwotICAgdmFyV29ybGROb3JtYWwgPSB3b3JsZE5vcm07Ci0gICB2YXJUZXgwID0gQVRUUklCX3RleHR1cmUwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXIydi5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXIydi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjg4NWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyMnYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uOwotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbCAqIG9ialBvczsKLSAgIGdsX1Bvc2l0aW9uID0gVU5JX3Byb2ogKiB3b3JsZFBvczsKLQotICAgbWF0MyBtb2RlbDMgPSBtYXQzKFVOSV9tb2RlbFswXS54eXosIFVOSV9tb2RlbFsxXS54eXosIFVOSV9tb2RlbFsyXS54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsOwotCi0gICB2YXJXb3JsZFBvcyA9IHdvcmxkUG9zLnh5ejsKLSAgIHZhcldvcmxkTm9ybWFsID0gd29ybGROb3JtOwotICAgdmFyVGV4MCA9IEFUVFJJQl90ZXh0dXJlMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyYXJyYXlmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmFycmF5Zi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzhlY2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyYXJyYXlmLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDBfRGlmZnVzZTsKLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDBfU3BlY3VsYXI7Ci12YXJ5aW5nIGxvd3AgZmxvYXQgbGlnaHQxX0RpZmZ1c2U7Ci12YXJ5aW5nIGxvd3AgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIChsaWdodDBfRGlmZnVzZSAqIFVOSV9saWdodF9EaWZmdXNlQ29sb3JbMF0ueHl6ICsgbGlnaHQxX0RpZmZ1c2UgKiBVTklfbGlnaHRfRGlmZnVzZUNvbG9yWzFdLnh5eik7Ci0gICBjb2wueHl6ICs9IGxpZ2h0MF9TcGVjdWxhciAqIFVOSV9saWdodF9TcGVjdWxhckNvbG9yWzBdLnh5ejsKLSAgIGNvbC54eXogKz0gbGlnaHQxX1NwZWN1bGFyICogVU5JX2xpZ2h0X1NwZWN1bGFyQ29sb3JbMV0ueHl6OwotICAgZ2xfRnJhZ0NvbG9yID0gY29sOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmFycmF5di5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXJhcnJheXYuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExMzEwYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmFycmF5di5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotdmFyeWluZyBmbG9hdCBsaWdodDBfRGlmZnVzZTsKLXZhcnlpbmcgZmxvYXQgbGlnaHQwX1NwZWN1bGFyOwotdmFyeWluZyBmbG9hdCBsaWdodDFfRGlmZnVzZTsKLXZhcnlpbmcgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLS8vIFRoaXMgaXMgd2hlcmUgYWN0dWFsIHNoYWRlciBjb2RlIGJlZ2lucwotdm9pZCBtYWluKCkgewotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbFswXSAqIEFUVFJJQl9wb3NpdGlvbjsKLSAgIHdvcmxkUG9zID0gVU5JX21vZGVsWzFdICogd29ybGRQb3M7Ci0gICBnbF9Qb3NpdGlvbiA9IFVOSV9wcm9qICogd29ybGRQb3M7Ci0KLSAgIG1hdDQgbW9kZWwwID0gVU5JX21vZGVsWzBdOwotICAgbWF0MyBtb2RlbDMgPSBtYXQzKG1vZGVsMFswXS54eXosIG1vZGVsMFsxXS54eXosIG1vZGVsMFsyXS54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsOwotICAgdmVjMyBWID0gbm9ybWFsaXplKC13b3JsZFBvcy54eXopOwotCi0gICB2ZWMzIGxpZ2h0MFZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHRfUG9zaXNpb25bMF0ueHl6IC0gd29ybGRQb3MueHl6KTsKLSAgIHZlYzMgbGlnaHQwUiA9IC1yZWZsZWN0KGxpZ2h0MFZlYywgd29ybGROb3JtKTsKLSAgIGxpZ2h0MF9EaWZmdXNlID0gY2xhbXAoZG90KHdvcmxkTm9ybSwgbGlnaHQwVmVjKSwgMC4wLCAxLjApICogVU5JX2xpZ2h0X0RpZmZ1c2VbMF07Ci0gICBmbG9hdCBsaWdodDBTcGVjID0gY2xhbXAoZG90KGxpZ2h0MFIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGxpZ2h0MF9TcGVjdWxhciA9IHBvdyhsaWdodDBTcGVjLCBVTklfbGlnaHRfQ29zaW5lUG93ZXJbMF0pICogVU5JX2xpZ2h0X1NwZWN1bGFyWzBdOwotCi0gICB2ZWMzIGxpZ2h0MVZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHRfUG9zaXNpb25bMV0ueHl6IC0gd29ybGRQb3MueHl6KTsKLSAgIHZlYzMgbGlnaHQxUiA9IHJlZmxlY3QobGlnaHQxVmVjLCB3b3JsZE5vcm0pOwotICAgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCkgKiBVTklfbGlnaHRfRGlmZnVzZVsxXTsKLSAgIGZsb2F0IGxpZ2h0MVNwZWMgPSBjbGFtcChkb3QobGlnaHQxUiwgViksIDAuMDAxLCAxLjApOwotICAgbGlnaHQxX1NwZWN1bGFyID0gcG93KGxpZ2h0MVNwZWMsIFVOSV9saWdodF9Db3NpbmVQb3dlclsxXSkgKiBVTklfbGlnaHRfU3BlY3VsYXJbMV07Ci0KLSAgIGdsX1BvaW50U2l6ZSA9IDEuMDsKLSAgIHZhclRleDAgPSBBVFRSSUJfdGV4dHVyZTA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmN1YmVmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmN1YmVmLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Njk2YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXJjdWJlZi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLXZhcnlpbmcgdmVjMyB3b3JsZE5vcm1hbDsKLQotdm9pZCBtYWluKCkgewotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmVDdWJlKFVOSV9UZXgwLCB3b3JsZE5vcm1hbCk7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2w7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyY3ViZXYuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVyY3ViZXYuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmNWNkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmN1YmV2Lmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi12YXJ5aW5nIHZlYzMgd29ybGROb3JtYWw7Ci0KLS8vIFRoaXMgaXMgd2hlcmUgYWN0dWFsIHNoYWRlciBjb2RlIGJlZ2lucwotdm9pZCBtYWluKCkgewotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbCAqIEFUVFJJQl9wb3NpdGlvbjsKLSAgIGdsX1Bvc2l0aW9uID0gVU5JX3Byb2ogKiB3b3JsZFBvczsKLQotICAgbWF0MyBtb2RlbDMgPSBtYXQzKFVOSV9tb2RlbFswXS54eXosIFVOSV9tb2RlbFsxXS54eXosIFVOSV9tb2RlbFsyXS54eXopOwotICAgd29ybGROb3JtYWwgPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy9zaGFkZXJmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmYuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDU2ZTIwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcmYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLQotdmFyeWluZyBsb3dwIGZsb2F0IGxpZ2h0MF9EaWZmdXNlOwotdmFyeWluZyBsb3dwIGZsb2F0IGxpZ2h0MF9TcGVjdWxhcjsKLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDFfRGlmZnVzZTsKLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDFfU3BlY3VsYXI7Ci12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgdmVjMiB0MCA9IHZhclRleDAueHk7Ci0gICBsb3dwIHZlYzQgY29sID0gdGV4dHVyZTJEKFVOSV9UZXgwLCB0MCkucmdiYTsKLSAgIGNvbC54eXogPSBjb2wueHl6ICogKGxpZ2h0MF9EaWZmdXNlICogVU5JX2xpZ2h0MF9EaWZmdXNlQ29sb3IueHl6ICsgbGlnaHQxX0RpZmZ1c2UgKiBVTklfbGlnaHQxX0RpZmZ1c2VDb2xvci54eXopOwotICAgY29sLnh5eiArPSBsaWdodDBfU3BlY3VsYXIgKiBVTklfbGlnaHQwX1NwZWN1bGFyQ29sb3IueHl6OwotICAgY29sLnh5eiArPSBsaWdodDFfU3BlY3VsYXIgKiBVTklfbGlnaHQxX1NwZWN1bGFyQ29sb3IueHl6OwotICAgZ2xfRnJhZ0NvbG9yID0gY29sOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9yZXMvcmF3L3NoYWRlcnYuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVydi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmN2QwMWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvc2hhZGVydi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotdmFyeWluZyBmbG9hdCBsaWdodDBfRGlmZnVzZTsKLXZhcnlpbmcgZmxvYXQgbGlnaHQwX1NwZWN1bGFyOwotdmFyeWluZyBmbG9hdCBsaWdodDFfRGlmZnVzZTsKLXZhcnlpbmcgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLS8vIFRoaXMgaXMgd2hlcmUgYWN0dWFsIHNoYWRlciBjb2RlIGJlZ2lucwotdm9pZCBtYWluKCkgewotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbCAqIEFUVFJJQl9wb3NpdGlvbjsKLSAgIGdsX1Bvc2l0aW9uID0gVU5JX3Byb2ogKiB3b3JsZFBvczsKLQotICAgbWF0MyBtb2RlbDMgPSBtYXQzKFVOSV9tb2RlbFswXS54eXosIFVOSV9tb2RlbFsxXS54eXosIFVOSV9tb2RlbFsyXS54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsOwotICAgdmVjMyBWID0gbm9ybWFsaXplKC13b3JsZFBvcy54eXopOwotCi0gICB2ZWMzIGxpZ2h0MFZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHQwX1Bvc2lzaW9uLnh5eiAtIHdvcmxkUG9zLnh5eik7Ci0gICB2ZWMzIGxpZ2h0MFIgPSAtcmVmbGVjdChsaWdodDBWZWMsIHdvcmxkTm9ybSk7Ci0gICBsaWdodDBfRGlmZnVzZSA9IGNsYW1wKGRvdCh3b3JsZE5vcm0sIGxpZ2h0MFZlYyksIDAuMCwgMS4wKSAqIFVOSV9saWdodDBfRGlmZnVzZTsKLSAgIGZsb2F0IGxpZ2h0MFNwZWMgPSBjbGFtcChkb3QobGlnaHQwUiwgViksIDAuMDAxLCAxLjApOwotICAgbGlnaHQwX1NwZWN1bGFyID0gcG93KGxpZ2h0MFNwZWMsIFVOSV9saWdodDBfQ29zaW5lUG93ZXIpICogVU5JX2xpZ2h0MF9TcGVjdWxhcjsKLQotICAgdmVjMyBsaWdodDFWZWMgPSBub3JtYWxpemUoVU5JX2xpZ2h0MV9Qb3Npc2lvbi54eXogLSB3b3JsZFBvcy54eXopOwotICAgdmVjMyBsaWdodDFSID0gcmVmbGVjdChsaWdodDFWZWMsIHdvcmxkTm9ybSk7Ci0gICBsaWdodDFfRGlmZnVzZSA9IGNsYW1wKGRvdCh3b3JsZE5vcm0sIGxpZ2h0MVZlYyksIDAuMCwgMS4wKSAqIFVOSV9saWdodDFfRGlmZnVzZTsKLSAgIGZsb2F0IGxpZ2h0MVNwZWMgPSBjbGFtcChkb3QobGlnaHQxUiwgViksIDAuMDAxLCAxLjApOwotICAgbGlnaHQxX1NwZWN1bGFyID0gcG93KGxpZ2h0MVNwZWMsIFVOSV9saWdodDFfQ29zaW5lUG93ZXIpICogVU5JX2xpZ2h0MV9TcGVjdWxhcjsKLQotICAgZ2xfUG9pbnRTaXplID0gMS4wOwotICAgdmFyVGV4MCA9IEFUVFJJQl90ZXh0dXJlMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3Jlcy9yYXcvdG9ydXMuYTNkIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy90b3J1cy5hM2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMjJiMDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvcmVzL3Jhdy90b3J1cy5hM2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc0xpc3QuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzTGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWRlM2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlczsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgUnNMaXN0IGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJpdmF0ZSBSc0xpc3RWaWV3IG1WaWV3OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotCi0gICAgICAgIC8vIENyZWF0ZSBvdXIgUHJldmlldyB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyCi0gICAgICAgIC8vIEFjdGl2aXR5Ci0gICAgICAgIG1WaWV3ID0gbmV3IFJzTGlzdFZpZXcodGhpcyk7Ci0gICAgICAgIHNldENvbnRlbnRWaWV3KG1WaWV3KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICAgICAgbVZpZXcucmVzdW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25QYXVzZSgpOwotICAgICAgICBtVmlldy5wYXVzZSgpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc0xpc3RSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvUnNMaXN0UlMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWViMjQ4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc0xpc3RSUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQucnMubWlzY3NhbXBsZXM7Ci0KLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmUuRGVwdGhGdW5jOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotcHVibGljIGNsYXNzIFJzTGlzdFJTIHsKLQotICAgIHByaXZhdGUgZmluYWwgaW50IFNUQVRFX0xBU1RfRk9DVVMgPSAxOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gREFUQV9MSVNUID0gewotICAgICJBZmdoYW5pc3RhbiIsICJBbGJhbmlhIiwgIkFsZ2VyaWEiLCAiQW1lcmljYW4gU2Ftb2EiLCAiQW5kb3JyYSIsCi0gICAgIkFuZ29sYSIsICJBbmd1aWxsYSIsICJBbnRhcmN0aWNhIiwgIkFudGlndWEgYW5kIEJhcmJ1ZGEiLCAiQXJnZW50aW5hIiwKLSAgICAiQXJtZW5pYSIsICJBcnViYSIsICJBdXN0cmFsaWEiLCAiQXVzdHJpYSIsICJBemVyYmFpamFuIiwKLSAgICAiQmFocmFpbiIsICJCYW5nbGFkZXNoIiwgIkJhcmJhZG9zIiwgIkJlbGFydXMiLCAiQmVsZ2l1bSIsCi0gICAgIkJlbGl6ZSIsICJCZW5pbiIsICJCZXJtdWRhIiwgIkJodXRhbiIsICJCb2xpdmlhIiwKLSAgICAiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYSIsICJCb3Rzd2FuYSIsICJCb3V2ZXQgSXNsYW5kIiwgIkJyYXppbCIsCi0gICAgIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeSIsICJCcml0aXNoIFZpcmdpbiBJc2xhbmRzIiwgIkJydW5laSIsICJCdWxnYXJpYSIsCi0gICAgIkJ1cmtpbmEgRmFzbyIsICJCdXJ1bmRpIiwgIkNvdGUgZCdJdm9pcmUiLCAiQ2FtYm9kaWEiLCAiQ2FtZXJvb24iLCAiQ2FuYWRhIiwgIkNhcGUgVmVyZGUiLAotICAgICJDYXltYW4gSXNsYW5kcyIsICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLCAiQ2hhZCIsICJDaGlsZSIsICJDaGluYSIsCi0gICAgIkNocmlzdG1hcyBJc2xhbmQiLCAiQ29jb3MgKEtlZWxpbmcpIElzbGFuZHMiLCAiQ29sb21iaWEiLCAiQ29tb3JvcyIsICJDb25nbyIsCi0gICAgIkNvb2sgSXNsYW5kcyIsICJDb3N0YSBSaWNhIiwgIkNyb2F0aWEiLCAiQ3ViYSIsICJDeXBydXMiLCAiQ3plY2ggUmVwdWJsaWMiLAotICAgICJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nbyIsICJEZW5tYXJrIiwgIkRqaWJvdXRpIiwgIkRvbWluaWNhIiwgIkRvbWluaWNhbiBSZXB1YmxpYyIsCi0gICAgIkVhc3QgVGltb3IiLCAiRWN1YWRvciIsICJFZ3lwdCIsICJFbCBTYWx2YWRvciIsICJFcXVhdG9yaWFsIEd1aW5lYSIsICJFcml0cmVhIiwKLSAgICAiRXN0b25pYSIsICJFdGhpb3BpYSIsICJGYWVyb2UgSXNsYW5kcyIsICJGYWxrbGFuZCBJc2xhbmRzIiwgIkZpamkiLCAiRmlubGFuZCIsCi0gICAgIkZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEiLCAiRnJhbmNlIiwgIkZyZW5jaCBHdWlhbmEiLCAiRnJlbmNoIFBvbHluZXNpYSIsCi0gICAgIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIsICJHYWJvbiIsICJHZW9yZ2lhIiwgIkdlcm1hbnkiLCAiR2hhbmEiLCAiR2licmFsdGFyIiwKLSAgICAiR3JlZWNlIiwgIkdyZWVubGFuZCIsICJHcmVuYWRhIiwgIkd1YWRlbG91cGUiLCAiR3VhbSIsICJHdWF0ZW1hbGEiLCAiR3VpbmVhIiwgIkd1aW5lYS1CaXNzYXUiLAotICAgICJHdXlhbmEiLCAiSGFpdGkiLCAiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzIiwgIkhvbmR1cmFzIiwgIkhvbmcgS29uZyIsICJIdW5nYXJ5IiwKLSAgICAiSWNlbGFuZCIsICJJbmRpYSIsICJJbmRvbmVzaWEiLCAiSXJhbiIsICJJcmFxIiwgIklyZWxhbmQiLCAiSXNyYWVsIiwgIkl0YWx5IiwgIkphbWFpY2EiLAotICAgICJKYXBhbiIsICJKb3JkYW4iLCAiS2F6YWtoc3RhbiIsICJLZW55YSIsICJLaXJpYmF0aSIsICJLdXdhaXQiLCAiS3lyZ3l6c3RhbiIsICJMYW9zIiwKLSAgICAiTGF0dmlhIiwgIkxlYmFub24iLCAiTGVzb3RobyIsICJMaWJlcmlhIiwgIkxpYnlhIiwgIkxpZWNodGVuc3RlaW4iLCAiTGl0aHVhbmlhIiwgIkx1eGVtYm91cmciLAotICAgICJNYWNhdSIsICJNYWRhZ2FzY2FyIiwgIk1hbGF3aSIsICJNYWxheXNpYSIsICJNYWxkaXZlcyIsICJNYWxpIiwgIk1hbHRhIiwgIk1hcnNoYWxsIElzbGFuZHMiLAotICAgICJNYXJ0aW5pcXVlIiwgIk1hdXJpdGFuaWEiLCAiTWF1cml0aXVzIiwgIk1heW90dGUiLCAiTWV4aWNvIiwgIk1pY3JvbmVzaWEiLCAiTW9sZG92YSIsCi0gICAgIk1vbmFjbyIsICJNb25nb2xpYSIsICJNb250c2VycmF0IiwgIk1vcm9jY28iLCAiTW96YW1iaXF1ZSIsICJNeWFubWFyIiwgIk5hbWliaWEiLAotICAgICJOYXVydSIsICJOZXBhbCIsICJOZXRoZXJsYW5kcyIsICJOZXRoZXJsYW5kcyBBbnRpbGxlcyIsICJOZXcgQ2FsZWRvbmlhIiwgIk5ldyBaZWFsYW5kIiwKLSAgICAiTmljYXJhZ3VhIiwgIk5pZ2VyIiwgIk5pZ2VyaWEiLCAiTml1ZSIsICJOb3Jmb2xrIElzbGFuZCIsICJOb3J0aCBLb3JlYSIsICJOb3J0aGVybiBNYXJpYW5hcyIsCi0gICAgIk5vcndheSIsICJPbWFuIiwgIlBha2lzdGFuIiwgIlBhbGF1IiwgIlBhbmFtYSIsICJQYXB1YSBOZXcgR3VpbmVhIiwgIlBhcmFndWF5IiwgIlBlcnUiLAotICAgICJQaGlsaXBwaW5lcyIsICJQaXRjYWlybiBJc2xhbmRzIiwgIlBvbGFuZCIsICJQb3J0dWdhbCIsICJQdWVydG8gUmljbyIsICJRYXRhciIsCi0gICAgIlJldW5pb24iLCAiUm9tYW5pYSIsICJSdXNzaWEiLCAiUndhbmRhIiwgIlNxbyBUb21lIGFuZCBQcmluY2lwZSIsICJTYWludCBIZWxlbmEiLAotICAgICJTYWludCBLaXR0cyBhbmQgTmV2aXMiLCAiU2FpbnQgTHVjaWEiLCAiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvbiIsCi0gICAgIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzIiwgIlNhbW9hIiwgIlNhbiBNYXJpbm8iLCAiU2F1ZGkgQXJhYmlhIiwgIlNlbmVnYWwiLAotICAgICJTZXljaGVsbGVzIiwgIlNpZXJyYSBMZW9uZSIsICJTaW5nYXBvcmUiLCAiU2xvdmFraWEiLCAiU2xvdmVuaWEiLCAiU29sb21vbiBJc2xhbmRzIiwKLSAgICAiU29tYWxpYSIsICJTb3V0aCBBZnJpY2EiLCAiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMiLCAiU291dGggS29yZWEiLAotICAgICJTcGFpbiIsICJTcmkgTGFua2EiLCAiU3VkYW4iLCAiU3VyaW5hbWUiLCAiU3ZhbGJhcmQgYW5kIEphbiBNYXllbiIsICJTd2F6aWxhbmQiLCAiU3dlZGVuIiwKLSAgICAiU3dpdHplcmxhbmQiLCAiU3lyaWEiLCAiVGFpd2FuIiwgIlRhamlraXN0YW4iLCAiVGFuemFuaWEiLCAiVGhhaWxhbmQiLCAiVGhlIEJhaGFtYXMiLAotICAgICJUaGUgR2FtYmlhIiwgIlRvZ28iLCAiVG9rZWxhdSIsICJUb25nYSIsICJUcmluaWRhZCBhbmQgVG9iYWdvIiwgIlR1bmlzaWEiLCAiVHVya2V5IiwKLSAgICAiVHVya21lbmlzdGFuIiwgIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kcyIsICJUdXZhbHUiLCAiVmlyZ2luIElzbGFuZHMiLCAiVWdhbmRhIiwKLSAgICAiVWtyYWluZSIsICJVbml0ZWQgQXJhYiBFbWlyYXRlcyIsICJVbml0ZWQgS2luZ2RvbSIsCi0gICAgIlVuaXRlZCBTdGF0ZXMiLCAiVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzIiwgIlVydWd1YXkiLCAiVXpiZWtpc3RhbiIsCi0gICAgIlZhbnVhdHUiLCAiVmF0aWNhbiBDaXR5IiwgIlZlbmV6dWVsYSIsICJWaWV0bmFtIiwgIldhbGxpcyBhbmQgRnV0dW5hIiwgIldlc3Rlcm4gU2FoYXJhIiwKLSAgICAiWWVtZW4iLCAiWXVnb3NsYXZpYSIsICJaYW1iaWEiLCAiWmltYmFid2UiCi0gICAgfTsKLQotICAgIHB1YmxpYyBSc0xpc3RSUygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBpbml0UlMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgRm9udCBtSXRhbGljOwotCi0gICAgU2NyaXB0RmllbGRfTGlzdEFsbG9jc19zIG1MaXN0QWxsb2NzOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRDX3JzbGlzdCBtU2NyaXB0OwotCi0gICAgaW50IG1MYXN0WDsKLSAgICBpbnQgbUxhc3RZOwotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25Eb3duKGludCB4LCBpbnQgeSkgewotICAgICAgICBtU2NyaXB0LnNldF9nRFkoMC4wZik7Ci0KLSAgICAgICAgbUxhc3RYID0geDsKLSAgICAgICAgbUxhc3RZID0geTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbk1vdmUoaW50IHgsIGludCB5KSB7Ci0gICAgICAgIGludCBkeCA9IG1MYXN0WCAtIHg7Ci0gICAgICAgIGludCBkeSA9IG1MYXN0WSAtIHk7Ci0KLSAgICAgICAgaWYgKE1hdGguYWJzKGR5KSA8PSAyKSB7Ci0gICAgICAgICAgICBkeSA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2NyaXB0LnNldF9nRFkoZHkpOwotCi0gICAgICAgIG1MYXN0WCA9IHg7Ci0gICAgICAgIG1MYXN0WSA9IHk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRSUygpIHsKLQotICAgICAgICBtU2NyaXB0ID0gbmV3IFNjcmlwdENfcnNsaXN0KG1SUywgbVJlcywgUi5yYXcucnNsaXN0KTsKLQotICAgICAgICBtTGlzdEFsbG9jcyA9IG5ldyBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MobVJTLCBEQVRBX0xJU1QubGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEQVRBX0xJU1QubGVuZ3RoOyBpICsrKSB7Ci0gICAgICAgICAgICBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MuSXRlbSBsaXN0RWxlbSA9IG5ldyBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MuSXRlbSgpOwotICAgICAgICAgICAgbGlzdEVsZW0udGV4dCA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbVN0cmluZyhtUlMsIERBVEFfTElTVFtpXSwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICAgICAgbUxpc3RBbGxvY3Muc2V0KGxpc3RFbGVtLCBpLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTGlzdEFsbG9jcy5jb3B5QWxsKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5iaW5kX2dMaXN0KG1MaXN0QWxsb2NzKTsKLQotICAgICAgICBtSXRhbGljID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLkJPTERfSVRBTElDLCA4KTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0l0YWxpYyhtSXRhbGljKTsKLQotICAgICAgICBtUlMuYmluZFJvb3RTY3JpcHQobVNjcmlwdCk7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvUnNMaXN0Vmlldy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvUnNMaXN0Vmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjZlNmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzTGlzdFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5leGFtcGxlLmFuZHJvaWQucnMubWlzY3NhbXBsZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNTdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLQotcHVibGljIGNsYXNzIFJzTGlzdFZpZXcgZXh0ZW5kcyBSU1N1cmZhY2VWaWV3IHsKLQotICAgIHB1YmxpYyBSc0xpc3RWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgZW5zdXJlUmVuZGVyU2NyaXB0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBSc0xpc3RSUyBtUmVuZGVyOwotCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3VyZVJlbmRlclNjcmlwdCgpIHsKLSAgICAgICAgaWYgKG1SUyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjID0gbmV3IFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcoKTsKLSAgICAgICAgICAgIG1SUyA9IGNyZWF0ZVJlbmRlclNjcmlwdEdMKHNjKTsKLSAgICAgICAgICAgIG1SZW5kZXIgPSBuZXcgUnNMaXN0UlMoKTsKLSAgICAgICAgICAgIG1SZW5kZXIuaW5pdChtUlMsIGdldFJlc291cmNlcygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uQXR0YWNoZWRUb1dpbmRvdygpIHsKLSAgICAgICAgc3VwZXIub25BdHRhY2hlZFRvV2luZG93KCk7Ci0gICAgICAgIGVuc3VyZVJlbmRlclNjcmlwdCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBtUmVuZGVyID0gbnVsbDsKLSAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMgPSBudWxsOwotICAgICAgICAgICAgZGVzdHJveVJlbmRlclNjcmlwdEdMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXYpCi0gICAgewotICAgICAgICBib29sZWFuIHJldCA9IGZhbHNlOwotICAgICAgICBpbnQgYWN0ID0gZXYuZ2V0QWN0aW9uKCk7Ci0gICAgICAgIGlmIChhY3QgPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04pIHsKLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKChpbnQpZXYuZ2V0WCgpLCAoaW50KWV2LmdldFkoKSk7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKGFjdCA9PSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRSkgewotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbk1vdmUoKGludClldi5nZXRYKCksIChpbnQpZXYuZ2V0WSgpKTsKLSAgICAgICAgICAgIHJldCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLX0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc1JlbmRlclN0YXRlcy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvUnNSZW5kZXJTdGF0ZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjRlYTc2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc1JlbmRlclN0YXRlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlczsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotCi1wdWJsaWMgY2xhc3MgUnNSZW5kZXJTdGF0ZXMgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIFJzUmVuZGVyU3RhdGVzVmlldyBtVmlldzsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLQotICAgICAgICAvLyBDcmVhdGUgb3VyIFByZXZpZXcgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91cgotICAgICAgICAvLyBBY3Rpdml0eQotICAgICAgICBtVmlldyA9IG5ldyBSc1JlbmRlclN0YXRlc1ZpZXcodGhpcyk7Ci0gICAgICAgIHNldENvbnRlbnRWaWV3KG1WaWV3KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgICAgIG1WaWV3LnJlc3VtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgICAgIG1WaWV3LnBhdXNlKCk7Ci0gICAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzUmVuZGVyU3RhdGVzUlMuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzUmVuZGVyU3RhdGVzUlMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUzMTlmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc1JlbmRlclN0YXRlc1JTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlczsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkZvbnQuU3R5bGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbS5UZXh0dXJlVHlwZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmUuRGVwdGhGdW5jOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5CbGVuZFNyY0Z1bmM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkJsZW5kRHN0RnVuYzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TYW1wbGVyLlZhbHVlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotcHVibGljIGNsYXNzIFJzUmVuZGVyU3RhdGVzUlMgewotCi0gICAgaW50IG1XaWR0aDsKLSAgICBpbnQgbUhlaWdodDsKLQotICAgIHB1YmxpYyBSc1JlbmRlclN0YXRlc1JTKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIG1XaWR0aCA9IG1SUy5nZXRXaWR0aCgpOwotICAgICAgICBtSGVpZ2h0ID0gbVJTLmdldEhlaWdodCgpOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBtT3B0aW9uc0FSR0IuaW5TY2FsZWQgPSBmYWxzZTsKLSAgICAgICAgbU9wdGlvbnNBUkdCLmluUHJlZmVycmVkQ29uZmlnID0gQml0bWFwLkNvbmZpZy5BUkdCXzg4ODg7Ci0gICAgICAgIG1Nb2RlID0gMDsKLSAgICAgICAgbU1heE1vZGVzID0gMDsKLSAgICAgICAgaW5pdFJTKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoKSB7Ci0gICAgICAgIG1XaWR0aCA9IG1SUy5nZXRXaWR0aCgpOwotICAgICAgICBtSGVpZ2h0ID0gbVJTLmdldEhlaWdodCgpOwotCi0gICAgICAgIE1hdHJpeDRmIHByb2ogPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgcHJvai5sb2FkT3J0aG9XaW5kb3cobVdpZHRoLCBtSGVpZ2h0KTsKLSAgICAgICAgbVBWQS5zZXRQcm9qZWN0aW9uKHByb2opOwotICAgIH0KLQotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0KLSAgICBwcml2YXRlIFNhbXBsZXIgbUxpbmVhckNsYW1wOwotICAgIHByaXZhdGUgU2FtcGxlciBtTGluZWFyV3JhcDsKLSAgICBwcml2YXRlIFNhbXBsZXIgbU1pcExpbmVhcldyYXA7Ci0gICAgcHJpdmF0ZSBTYW1wbGVyIG1OZWFyZXN0Q2xhbXA7Ci0gICAgcHJpdmF0ZSBTYW1wbGVyIG1NaXBMaW5lYXJBbmlzbzg7Ci0gICAgcHJpdmF0ZSBTYW1wbGVyIG1NaXBMaW5lYXJBbmlzbzE1OwotCi0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVByb2dTdG9yZUJsZW5kTm9uZURlcHRoOwotICAgIHByaXZhdGUgUHJvZ3JhbVN0b3JlIG1Qcm9nU3RvcmVCbGVuZE5vbmU7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVByb2dTdG9yZUJsZW5kQWxwaGE7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVByb2dTdG9yZUJsZW5kQWRkOwotCi0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudFRleHR1cmU7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudENvbG9yOwotCi0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1Qcm9nVmVydGV4OwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIG1QVkE7Ci0KLSAgICAvLyBDdXN0b20gc2hhZGVycwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUHJvZ1ZlcnRleEN1c3RvbTsKLSAgICBwcml2YXRlIFByb2dyYW1GcmFnbWVudCBtUHJvZ0ZyYWdtZW50Q3VzdG9tOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRNdWx0aXRleDsKLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlckNvbnN0YW50c19zIG1WU0NvbnN0OwotICAgIHByaXZhdGUgU2NyaXB0RmllbGRfVmVydGV4U2hhZGVyQ29uc3RhbnRzMl9zIG1WU0NvbnN0MjsKLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX0ZyYWdlbnRTaGFkZXJDb25zdGFudHNfcyBtRlNDb25zdDsKLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX0ZyYWdlbnRTaGFkZXJDb25zdGFudHMyX3MgbUZTQ29uc3QyOwotCi0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1Qcm9nVmVydGV4Q3VzdG9tMjsKLSAgICBwcml2YXRlIFByb2dyYW1GcmFnbWVudCBtUHJvZ0ZyYWdtZW50Q3VzdG9tMjsKLQotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUHJvZ1ZlcnRleEN1YmU7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudEN1YmU7Ci0KLSAgICBwcml2YXRlIFByb2dyYW1SYXN0ZXIgbUN1bGxCYWNrOwotICAgIHByaXZhdGUgUHJvZ3JhbVJhc3RlciBtQ3VsbEZyb250OwotICAgIHByaXZhdGUgUHJvZ3JhbVJhc3RlciBtQ3VsbE5vbmU7Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbVRleFRvcnVzOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4T3BhcXVlOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4VHJhbnNwYXJlbnQ7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1UZXhDaGVja2VyOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4Q3ViZTsKLQotICAgIHByaXZhdGUgTWVzaCBtTWJ5Tk1lc2g7Ci0gICAgcHJpdmF0ZSBNZXNoIG1Ub3J1czsKLQotICAgIEZvbnQgbUZvbnRTYW5zOwotICAgIEZvbnQgbUZvbnRTZXJpZjsKLSAgICBGb250IG1Gb250U2VyaWZCb2xkOwotICAgIEZvbnQgbUZvbnRTZXJpZkl0YWxpYzsKLSAgICBGb250IG1Gb250U2VyaWZCb2xkSXRhbGljOwotICAgIEZvbnQgbUZvbnRNb25vOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4dEFsbG9jOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRDX3JzcmVuZGVyc3RhdGVzIG1TY3JpcHQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJpdG1hcEZhY3RvcnkuT3B0aW9ucyBtT3B0aW9uc0FSR0IgPSBuZXcgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7Ci0KLSAgICBpbnQgbU1vZGU7Ci0gICAgaW50IG1NYXhNb2RlczsKLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uRG93bihpbnQgeCwgaW50IHkpIHsKLSAgICAgICAgbU1vZGUgKys7Ci0gICAgICAgIG1Nb2RlID0gbU1vZGUgJSBtTWF4TW9kZXM7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dEaXNwbGF5TW9kZShtTW9kZSk7Ci0gICAgfQotCi0gICAgUHJvZ3JhbVN0b3JlIEJMRU5EX0FERF9ERVBUSF9OT05FKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBidWlsZGVyID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKHJzKTsKLSAgICAgICAgYnVpbGRlci5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5BTFdBWVMpOwotICAgICAgICBidWlsZGVyLnNldEJsZW5kRnVuYyhCbGVuZFNyY0Z1bmMuT05FLCBCbGVuZERzdEZ1bmMuT05FKTsKLSAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYnVpbGRlci5zZXREZXB0aE1hc2tFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNZXNoIGdldE1ieU5NZXNoKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGludCB3UmVzb2x1dGlvbiwgaW50IGhSZXNvbHV0aW9uKSB7Ci0KLSAgICAgICAgTWVzaC5UcmlhbmdsZU1lc2hCdWlsZGVyIHRtYiA9IG5ldyBNZXNoLlRyaWFuZ2xlTWVzaEJ1aWxkZXIobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlci5URVhUVVJFXzApOwotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDw9IGhSZXNvbHV0aW9uOyB5KyspIHsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IG5vcm1hbGl6ZWRZID0gKGZsb2F0KXkgLyBoUmVzb2x1dGlvbjsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHlPZmZzZXQgPSAobm9ybWFsaXplZFkgLSAwLjVmKSAqIGhlaWdodDsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IHdSZXNvbHV0aW9uOyB4KyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBub3JtYWxpemVkWCA9IChmbG9hdCl4IC8gd1Jlc29sdXRpb247Ci0gICAgICAgICAgICAgICAgZmxvYXQgeE9mZnNldCA9IChub3JtYWxpemVkWCAtIDAuNWYpICogd2lkdGg7Ci0gICAgICAgICAgICAgICAgdG1iLnNldFRleHR1cmUobm9ybWFsaXplZFgsIG5vcm1hbGl6ZWRZKTsKLSAgICAgICAgICAgICAgICB0bWIuYWRkVmVydGV4KHhPZmZzZXQsIHlPZmZzZXQpOwotICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaFJlc29sdXRpb247IHkrKykgewotICAgICAgICAgICAgZmluYWwgaW50IGN1clkgPSB5ICogKHdSZXNvbHV0aW9uICsgMSk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgYmVsb3dZID0gKHkgKyAxKSAqICh3UmVzb2x1dGlvbiArIDEpOwotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3UmVzb2x1dGlvbjsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGN1clYgPSBjdXJZICsgeDsKLSAgICAgICAgICAgICAgICBpbnQgYmVsb3dWID0gYmVsb3dZICsgeDsKLSAgICAgICAgICAgICAgICB0bWIuYWRkVHJpYW5nbGUoY3VyViwgYmVsb3dWLCBjdXJWICsgMSk7Ci0gICAgICAgICAgICAgICAgdG1iLmFkZFRyaWFuZ2xlKGJlbG93ViwgYmVsb3dWICsgMSwgY3VyViArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRtYi5jcmVhdGUodHJ1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQcm9ncmFtU3RvcmUoKSB7Ci0gICAgICAgIC8vIFVzZSBzdG9jayB0aGUgc3RvY2sgcHJvZ3JhbSBzdG9yZSBvYmplY3QKLSAgICAgICAgbVByb2dTdG9yZUJsZW5kTm9uZURlcHRoID0gUHJvZ3JhbVN0b3JlLkJMRU5EX05PTkVfREVQVEhfVEVTVChtUlMpOwotICAgICAgICBtUHJvZ1N0b3JlQmxlbmROb25lID0gUHJvZ3JhbVN0b3JlLkJMRU5EX05PTkVfREVQVEhfTk9ORShtUlMpOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSBwcm9ncmFtIHN0b3JlCi0gICAgICAgIFByb2dyYW1TdG9yZS5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgYnVpbGRlci5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5BTFdBWVMpOwotICAgICAgICBidWlsZGVyLnNldEJsZW5kRnVuYyhQcm9ncmFtU3RvcmUuQmxlbmRTcmNGdW5jLlNSQ19BTFBIQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbVN0b3JlLkJsZW5kRHN0RnVuYy5PTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYnVpbGRlci5zZXREZXB0aE1hc2tFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgbVByb2dTdG9yZUJsZW5kQWxwaGEgPSBidWlsZGVyLmNyZWF0ZSgpOwotCi0gICAgICAgIG1Qcm9nU3RvcmVCbGVuZEFkZCA9IEJMRU5EX0FERF9ERVBUSF9OT05FKG1SUyk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kTm9uZURlcHRoKG1Qcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dQcm9nU3RvcmVCbGVuZE5vbmUobVByb2dTdG9yZUJsZW5kTm9uZSk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dQcm9nU3RvcmVCbGVuZEFscGhhKG1Qcm9nU3RvcmVCbGVuZEFscGhhKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kQWRkKG1Qcm9nU3RvcmVCbGVuZEFkZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQcm9ncmFtRnJhZ21lbnQoKSB7Ci0KLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIHRleEJ1aWxkZXIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIHRleEJ1aWxkZXIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0JBLCAwKTsKLSAgICAgICAgbVByb2dGcmFnbWVudFRleHR1cmUgPSB0ZXhCdWlsZGVyLmNyZWF0ZSgpOwotICAgICAgICBtUHJvZ0ZyYWdtZW50VGV4dHVyZS5iaW5kU2FtcGxlcihtTGluZWFyQ2xhbXAsIDApOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlciBjb2xCdWlsZGVyID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBjb2xCdWlsZGVyLnNldFZhcnlpbmdDb2xvcihmYWxzZSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRDb2xvciA9IGNvbEJ1aWxkZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dGcmFnbWVudENvbG9yKG1Qcm9nRnJhZ21lbnRDb2xvcik7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dQcm9nRnJhZ21lbnRUZXh0dXJlKG1Qcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFByb2dyYW1WZXJ0ZXgoKSB7Ci0gICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgcHZiID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgbVByb2dWZXJ0ZXggPSBwdmIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVBWQSA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMobVJTKTsKLSAgICAgICAgKChQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiltUHJvZ1ZlcnRleCkuYmluZENvbnN0YW50cyhtUFZBKTsKLSAgICAgICAgTWF0cml4NGYgcHJvaiA9IG5ldyBNYXRyaXg0ZigpOwotICAgICAgICBwcm9qLmxvYWRPcnRob1dpbmRvdyhtV2lkdGgsIG1IZWlnaHQpOwotICAgICAgICBtUFZBLnNldFByb2plY3Rpb24ocHJvaik7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXgobVByb2dWZXJ0ZXgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0Q3VzdG9tU2hhZGVycygpIHsKLSAgICAgICAgbVZTQ29uc3QgPSBuZXcgU2NyaXB0RmllbGRfVmVydGV4U2hhZGVyQ29uc3RhbnRzX3MobVJTLCAxKTsKLSAgICAgICAgbVZTQ29uc3QyID0gbmV3IFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlckNvbnN0YW50czJfcyhtUlMsIDEpOwotICAgICAgICBtRlNDb25zdCA9IG5ldyBTY3JpcHRGaWVsZF9GcmFnZW50U2hhZGVyQ29uc3RhbnRzX3MobVJTLCAxKTsKLSAgICAgICAgbUZTQ29uc3QyID0gbmV3IFNjcmlwdEZpZWxkX0ZyYWdlbnRTaGFkZXJDb25zdGFudHMyX3MobVJTLCAxKTsKLQotICAgICAgICBtU2NyaXB0LmJpbmRfZ1ZTQ29uc3RhbnRzKG1WU0NvbnN0KTsKLSAgICAgICAgbVNjcmlwdC5iaW5kX2dWU0NvbnN0YW50czIobVZTQ29uc3QyKTsKLSAgICAgICAgbVNjcmlwdC5iaW5kX2dGU0NvbnN0YW50cyhtRlNDb25zdCk7Ci0gICAgICAgIG1TY3JpcHQuYmluZF9nRlNDb25zdGFudHMyKG1GU0NvbnN0Mik7Ci0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2hhZGVyIGJ1aWxkZXIKLSAgICAgICAgUHJvZ3JhbVZlcnRleC5CdWlsZGVyIHB2YkN1c3RvbSA9IG5ldyBQcm9ncmFtVmVydGV4LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgLy8gU3BlY2lmeSB0aGUgcmVzb3VyY2UgdGhhdCBjb250YWlucyB0aGUgc2hhZGVyIHN0cmluZwotICAgICAgICBwdmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3LnNoYWRlcnYpOwotICAgICAgICAvLyBVc2UgYSBzY3JpcHQgZmllbGQgdG8gc3BjaWZ5IHRoZSBpbnB1dCBsYXlvdXQKLSAgICAgICAgcHZiQ3VzdG9tLmFkZElucHV0KFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlcklucHV0c19zLmNyZWF0ZUVsZW1lbnQobVJTKSk7Ci0gICAgICAgIC8vIERlZmluZSB0aGUgY29uc3RhbnQgaW5wdXQgbGF5b3V0Ci0gICAgICAgIHB2YkN1c3RvbS5hZGRDb25zdGFudChtVlNDb25zdC5nZXRBbGxvY2F0aW9uKCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgbVByb2dWZXJ0ZXhDdXN0b20gPSBwdmJDdXN0b20uY3JlYXRlKCk7Ci0gICAgICAgIC8vIEJpbmQgdGhlIHNvdXJjZSBvZiBjb25zdGFudCBkYXRhCi0gICAgICAgIG1Qcm9nVmVydGV4Q3VzdG9tLmJpbmRDb25zdGFudHMobVZTQ29uc3QuZ2V0QWxsb2NhdGlvbigpLCAwKTsKLQotICAgICAgICBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlciBwZmJDdXN0b20gPSBuZXcgUHJvZ3JhbUZyYWdtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgLy8gU3BlY2lmeSB0aGUgcmVzb3VyY2UgdGhhdCBjb250YWlucyB0aGUgc2hhZGVyIHN0cmluZwotICAgICAgICBwZmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3LnNoYWRlcmYpOwotICAgICAgICAvL1RlbGwgdGhlIGJ1aWxkZXIgaG93IG1hbnkgdGV4dHVyZXMgd2UgaGF2ZQotICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfMkQpOwotICAgICAgICAvLyBEZWZpbmUgdGhlIGNvbnN0YW50IGlucHV0IGxheW91dAotICAgICAgICBwZmJDdXN0b20uYWRkQ29uc3RhbnQobUZTQ29uc3QuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRDdXN0b20gPSBwZmJDdXN0b20uY3JlYXRlKCk7Ci0gICAgICAgIC8vIEJpbmQgdGhlIHNvdXJjZSBvZiBjb25zdGFudCBkYXRhCi0gICAgICAgIG1Qcm9nRnJhZ21lbnRDdXN0b20uYmluZENvbnN0YW50cyhtRlNDb25zdC5nZXRBbGxvY2F0aW9uKCksIDApOwotCi0gICAgICAgIHB2YkN1c3RvbSA9IG5ldyBQcm9ncmFtVmVydGV4LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcHZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5zaGFkZXJhcnJheXYpOwotICAgICAgICBwdmJDdXN0b20uYWRkSW5wdXQoU2NyaXB0RmllbGRfVmVydGV4U2hhZGVySW5wdXRzX3MuY3JlYXRlRWxlbWVudChtUlMpKTsKLSAgICAgICAgcHZiQ3VzdG9tLmFkZENvbnN0YW50KG1WU0NvbnN0Mi5nZXRBbGxvY2F0aW9uKCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgbVByb2dWZXJ0ZXhDdXN0b20yID0gcHZiQ3VzdG9tLmNyZWF0ZSgpOwotICAgICAgICBtUHJvZ1ZlcnRleEN1c3RvbTIuYmluZENvbnN0YW50cyhtVlNDb25zdDIuZ2V0QWxsb2NhdGlvbigpLCAwKTsKLQotICAgICAgICBwZmJDdXN0b20gPSBuZXcgUHJvZ3JhbUZyYWdtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcGZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5zaGFkZXJhcnJheWYpOwotICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfMkQpOwotICAgICAgICBwZmJDdXN0b20uYWRkQ29uc3RhbnQobUZTQ29uc3QyLmdldEFsbG9jYXRpb24oKS5nZXRUeXBlKCkpOwotICAgICAgICBtUHJvZ0ZyYWdtZW50Q3VzdG9tMiA9IHBmYkN1c3RvbS5jcmVhdGUoKTsKLSAgICAgICAgbVByb2dGcmFnbWVudEN1c3RvbTIuYmluZENvbnN0YW50cyhtRlNDb25zdDIuZ2V0QWxsb2NhdGlvbigpLCAwKTsKLQotICAgICAgICAvLyBDdWJlbWFwIHRlc3Qgc2hhZGVycwotICAgICAgICBwdmJDdXN0b20gPSBuZXcgUHJvZ3JhbVZlcnRleC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIHB2YkN1c3RvbS5zZXRTaGFkZXIobVJlcywgUi5yYXcuc2hhZGVyY3ViZXYpOwotICAgICAgICBwdmJDdXN0b20uYWRkSW5wdXQoU2NyaXB0RmllbGRfVmVydGV4U2hhZGVySW5wdXRzX3MuY3JlYXRlRWxlbWVudChtUlMpKTsKLSAgICAgICAgcHZiQ3VzdG9tLmFkZENvbnN0YW50KG1WU0NvbnN0LmdldEFsbG9jYXRpb24oKS5nZXRUeXBlKCkpOwotICAgICAgICBtUHJvZ1ZlcnRleEN1YmUgPSBwdmJDdXN0b20uY3JlYXRlKCk7Ci0gICAgICAgIG1Qcm9nVmVydGV4Q3ViZS5iaW5kQ29uc3RhbnRzKG1WU0NvbnN0LmdldEFsbG9jYXRpb24oKSwgMCk7Ci0KLSAgICAgICAgcGZiQ3VzdG9tID0gbmV3IFByb2dyYW1GcmFnbWVudC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIHBmYkN1c3RvbS5zZXRTaGFkZXIobVJlcywgUi5yYXcuc2hhZGVyY3ViZWYpOwotICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfQ1VCRSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRDdWJlID0gcGZiQ3VzdG9tLmNyZWF0ZSgpOwotCi0gICAgICAgIHBmYkN1c3RvbSA9IG5ldyBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlcihtUlMpOwotICAgICAgICBwZmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3Lm11bHRpdGV4Zik7Ci0gICAgICAgIGZvciAoaW50IHRleENvdW50ID0gMDsgdGV4Q291bnQgPCAzOyB0ZXhDb3VudCArKykgewotICAgICAgICAgICAgcGZiQ3VzdG9tLmFkZFRleHR1cmUoUHJvZ3JhbS5UZXh0dXJlVHlwZS5URVhUVVJFXzJEKTsKLSAgICAgICAgfQotICAgICAgICBtUHJvZ0ZyYWdtZW50TXVsdGl0ZXggPSBwZmJDdXN0b20uY3JlYXRlKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXhDdXN0b20obVByb2dWZXJ0ZXhDdXN0b20pOwotICAgICAgICBtU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50Q3VzdG9tKG1Qcm9nRnJhZ21lbnRDdXN0b20pOwotICAgICAgICBtU2NyaXB0LnNldF9nUHJvZ1ZlcnRleEN1c3RvbTIobVByb2dWZXJ0ZXhDdXN0b20yKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dGcmFnbWVudEN1c3RvbTIobVByb2dGcmFnbWVudEN1c3RvbTIpOwotICAgICAgICBtU2NyaXB0LnNldF9nUHJvZ1ZlcnRleEN1YmUobVByb2dWZXJ0ZXhDdWJlKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dGcmFnbWVudEN1YmUobVByb2dGcmFnbWVudEN1YmUpOwotICAgICAgICBtU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50TXVsdGl0ZXgobVByb2dGcmFnbWVudE11bHRpdGV4KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbG9hZFRleHR1cmVSR0IoaW50IGlkKSB7Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sLk1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBsb2FkVGV4dHVyZUFSR0IoaW50IGlkKSB7Ci0gICAgICAgIEJpdG1hcCBiID0gQml0bWFwRmFjdG9yeS5kZWNvZGVSZXNvdXJjZShtUmVzLCBpZCwgbU9wdGlvbnNBUkdCKTsKLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb24uY3JlYXRlRnJvbUJpdG1hcChtUlMsIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sLk1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19URVhUVVJFKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9hZEltYWdlcygpIHsKLSAgICAgICAgbVRleFRvcnVzID0gbG9hZFRleHR1cmVSR0IoUi5kcmF3YWJsZS50b3J1c21hcCk7Ci0gICAgICAgIG1UZXhPcGFxdWUgPSBsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmRhdGEpOwotICAgICAgICBtVGV4VHJhbnNwYXJlbnQgPSBsb2FkVGV4dHVyZUFSR0IoUi5kcmF3YWJsZS5sZWFmKTsKLSAgICAgICAgbVRleENoZWNrZXIgPSBsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmNoZWNrZXIpOwotICAgICAgICBCaXRtYXAgYiA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UobVJlcywgUi5kcmF3YWJsZS5jdWJlbWFwX3Rlc3QpOwotICAgICAgICBtVGV4Q3ViZSA9IEFsbG9jYXRpb24uY3JlYXRlQ3ViZW1hcEZyb21CaXRtYXAobVJTLCBiKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nVGV4VG9ydXMobVRleFRvcnVzKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RleE9wYXF1ZShtVGV4T3BhcXVlKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RleFRyYW5zcGFyZW50KG1UZXhUcmFuc3BhcmVudCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUZXhDaGVja2VyKG1UZXhDaGVja2VyKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RleEN1YmUobVRleEN1YmUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0Rm9udHMoKSB7Ci0gICAgICAgIC8vIFNhbnMgZm9udCBieSBmYW1pbHkgbmFtZQotICAgICAgICBtRm9udFNhbnMgPSBGb250LmNyZWF0ZShtUlMsIG1SZXMsICJzYW5zLXNlcmlmIiwgRm9udC5TdHlsZS5OT1JNQUwsIDgpOwotICAgICAgICBtRm9udFNlcmlmID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLk5PUk1BTCwgOCk7Ci0gICAgICAgIC8vIENyZWF0ZSBmb250cyBieSBmYW1pbHkgYW5kIHN0eWxlCi0gICAgICAgIG1Gb250U2VyaWZCb2xkID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLkJPTEQsIDgpOwotICAgICAgICBtRm9udFNlcmlmSXRhbGljID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLklUQUxJQywgOCk7Ci0gICAgICAgIG1Gb250U2VyaWZCb2xkSXRhbGljID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAic2VyaWYiLCBGb250LlN0eWxlLkJPTERfSVRBTElDLCA4KTsKLSAgICAgICAgbUZvbnRNb25vID0gRm9udC5jcmVhdGUobVJTLCBtUmVzLCAibW9ubyIsIEZvbnQuU3R5bGUuTk9STUFMLCA4KTsKLQotICAgICAgICBtVGV4dEFsbG9jID0gQWxsb2NhdGlvbi5jcmVhdGVGcm9tU3RyaW5nKG1SUywgIlN0cmluZyBmcm9tIGFsbG9jYXRpb24iLCBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ0ZvbnRTYW5zKG1Gb250U2Fucyk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dGb250U2VyaWYobUZvbnRTZXJpZik7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dGb250U2VyaWZCb2xkKG1Gb250U2VyaWZCb2xkKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0ZvbnRTZXJpZkl0YWxpYyhtRm9udFNlcmlmSXRhbGljKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0ZvbnRTZXJpZkJvbGRJdGFsaWMobUZvbnRTZXJpZkJvbGRJdGFsaWMpOwotICAgICAgICBtU2NyaXB0LnNldF9nRm9udE1vbm8obUZvbnRNb25vKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RleHRBbGxvYyhtVGV4dEFsbG9jKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdE1lc2goKSB7Ci0gICAgICAgIG1NYnlOTWVzaCA9IGdldE1ieU5NZXNoKDI1NiwgMjU2LCAxMCwgMTApOwotICAgICAgICBtU2NyaXB0LnNldF9nTWJ5Tk1lc2gobU1ieU5NZXNoKTsKLQotICAgICAgICBGaWxlQTNEIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tUmVzb3VyY2UobVJTLCBtUmVzLCBSLnJhdy50b3J1cyk7Ci0gICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoMCk7Ci0gICAgICAgIGlmIChlbnRyeSA9PSBudWxsIHx8IGVudHJ5LmdldEVudHJ5VHlwZSgpICE9IEZpbGVBM0QuRW50cnlUeXBlLk1FU0gpIHsKLSAgICAgICAgICAgIExvZy5lKCJycyIsICJjb3VsZCBub3QgbG9hZCBtb2RlbCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVRvcnVzID0gKE1lc2gpZW50cnkuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBtU2NyaXB0LnNldF9nVG9ydXNNZXNoKG1Ub3J1cyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFNhbXBsZXJzKCkgewotICAgICAgICBTYW1wbGVyLkJ1aWxkZXIgYnMgPSBuZXcgU2FtcGxlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGJzLnNldE1pbmlmaWNhdGlvbihTYW1wbGVyLlZhbHVlLkxJTkVBUik7Ci0gICAgICAgIGJzLnNldE1hZ25pZmljYXRpb24oU2FtcGxlci5WYWx1ZS5MSU5FQVIpOwotICAgICAgICBicy5zZXRXcmFwUyhTYW1wbGVyLlZhbHVlLldSQVApOwotICAgICAgICBicy5zZXRXcmFwVChTYW1wbGVyLlZhbHVlLldSQVApOwotICAgICAgICBtTGluZWFyV3JhcCA9IGJzLmNyZWF0ZSgpOwotCi0gICAgICAgIG1MaW5lYXJDbGFtcCA9IFNhbXBsZXIuQ0xBTVBfTElORUFSKG1SUyk7Ci0gICAgICAgIG1OZWFyZXN0Q2xhbXAgPSBTYW1wbGVyLkNMQU1QX05FQVJFU1QobVJTKTsKLSAgICAgICAgbU1pcExpbmVhcldyYXAgPSBTYW1wbGVyLldSQVBfTElORUFSX01JUF9MSU5FQVIobVJTKTsKLQotICAgICAgICBicyA9IG5ldyBTYW1wbGVyLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgYnMuc2V0TWluaWZpY2F0aW9uKFNhbXBsZXIuVmFsdWUuTElORUFSX01JUF9MSU5FQVIpOwotICAgICAgICBicy5zZXRNYWduaWZpY2F0aW9uKFNhbXBsZXIuVmFsdWUuTElORUFSKTsKLSAgICAgICAgYnMuc2V0V3JhcFMoU2FtcGxlci5WYWx1ZS5XUkFQKTsKLSAgICAgICAgYnMuc2V0V3JhcFQoU2FtcGxlci5WYWx1ZS5XUkFQKTsKLSAgICAgICAgYnMuc2V0QW5pc290cm9weSg4LjBmKTsKLSAgICAgICAgbU1pcExpbmVhckFuaXNvOCA9IGJzLmNyZWF0ZSgpOwotICAgICAgICBicy5zZXRBbmlzb3Ryb3B5KDE1LjBmKTsKLSAgICAgICAgbU1pcExpbmVhckFuaXNvMTUgPSBicy5jcmVhdGUoKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nTGluZWFyQ2xhbXAobUxpbmVhckNsYW1wKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0xpbmVhcldyYXAobUxpbmVhcldyYXApOwotICAgICAgICBtU2NyaXB0LnNldF9nTWlwTGluZWFyV3JhcChtTWlwTGluZWFyV3JhcCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dNaXBMaW5lYXJBbmlzbzgobU1pcExpbmVhckFuaXNvOCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dNaXBMaW5lYXJBbmlzbzE1KG1NaXBMaW5lYXJBbmlzbzE1KTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ05lYXJlc3RDbGFtcChtTmVhcmVzdENsYW1wKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFByb2dyYW1SYXN0ZXIoKSB7Ci0gICAgICAgIG1DdWxsQmFjayA9IFByb2dyYW1SYXN0ZXIuQ1VMTF9CQUNLKG1SUyk7Ci0gICAgICAgIG1DdWxsRnJvbnQgPSBQcm9ncmFtUmFzdGVyLkNVTExfRlJPTlQobVJTKTsKLSAgICAgICAgbUN1bGxOb25lID0gUHJvZ3JhbVJhc3Rlci5DVUxMX05PTkUobVJTKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nQ3VsbEJhY2sobUN1bGxCYWNrKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0N1bGxGcm9udChtQ3VsbEZyb250KTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0N1bGxOb25lKG1DdWxsTm9uZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRSUygpIHsKLQotICAgICAgICBtU2NyaXB0ID0gbmV3IFNjcmlwdENfcnNyZW5kZXJzdGF0ZXMobVJTLCBtUmVzLCBSLnJhdy5yc3JlbmRlcnN0YXRlcyk7Ci0KLSAgICAgICAgbU1heE1vZGVzID0gbVNjcmlwdC5nZXRfZ01heE1vZGVzKCk7Ci0KLSAgICAgICAgaW5pdFNhbXBsZXJzKCk7Ci0gICAgICAgIGluaXRQcm9ncmFtU3RvcmUoKTsKLSAgICAgICAgaW5pdFByb2dyYW1GcmFnbWVudCgpOwotICAgICAgICBpbml0UHJvZ3JhbVZlcnRleCgpOwotICAgICAgICBpbml0Rm9udHMoKTsKLSAgICAgICAgbG9hZEltYWdlcygpOwotICAgICAgICBpbml0TWVzaCgpOwotICAgICAgICBpbml0UHJvZ3JhbVJhc3RlcigpOwotICAgICAgICBpbml0Q3VzdG9tU2hhZGVycygpOwotCi0gICAgICAgIG1SUy5iaW5kUm9vdFNjcmlwdChtU2NyaXB0KTsKLSAgICB9Ci19Ci0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9Sc1JlbmRlclN0YXRlc1ZpZXcuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzUmVuZGVyU3RhdGVzVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTVlMzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL1JzUmVuZGVyU3RhdGVzVmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlczsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci0KLXB1YmxpYyBjbGFzcyBSc1JlbmRlclN0YXRlc1ZpZXcgZXh0ZW5kcyBSU1N1cmZhY2VWaWV3IHsKLQotICAgIHB1YmxpYyBSc1JlbmRlclN0YXRlc1ZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBwcml2YXRlIFJzUmVuZGVyU3RhdGVzUlMgbVJlbmRlcjsKLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSZW5kZXJTY3JpcHQoKSB7Ci0gICAgICAgIGlmIChtUlMgPT0gbnVsbCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZyBzYyA9IG5ldyBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnKCk7Ci0gICAgICAgICAgICBzYy5zZXREZXB0aCgxNiwgMjQpOwotICAgICAgICAgICAgbVJTID0gY3JlYXRlUmVuZGVyU2NyaXB0R0woc2MpOwotICAgICAgICAgICAgbVJlbmRlciA9IG5ldyBSc1JlbmRlclN0YXRlc1JTKCk7Ci0gICAgICAgICAgICBtUmVuZGVyLmluaXQobVJTLCBnZXRSZXNvdXJjZXMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN1cGVyLnN1cmZhY2VDaGFuZ2VkKGhvbGRlciwgZm9ybWF0LCB3LCBoKTsKLSAgICAgICAgbVJlbmRlci5zdXJmYWNlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBtUmVuZGVyID0gbnVsbDsKLSAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMgPSBudWxsOwotICAgICAgICAgICAgZGVzdHJveVJlbmRlclNjcmlwdEdMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvblRvdWNoRXZlbnQoTW90aW9uRXZlbnQgZXYpIHsKLSAgICAgICAgaWYgKGV2LmdldEFjdGlvbigpID09IE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOKSB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bigoaW50KWV2LmdldFgoKSwgKGludClldi5nZXRZKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL3JzbGlzdC5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL3JzbGlzdC5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlkNDUwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9yc2xpc3QucnMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlcykKLQotI2luY2x1ZGUgInJzX2dyYXBoaWNzLnJzaCIKLQotZmxvYXQgZ0RZOwotCi1yc19mb250IGdJdGFsaWM7Ci0KLXR5cGVkZWYgc3RydWN0IExpc3RBbGxvY3NfcyB7Ci0gICAgcnNfYWxsb2NhdGlvbiB0ZXh0OwotfSBMaXN0QWxsb2NzOwotCi1MaXN0QWxsb2NzICpnTGlzdDsKLQotdm9pZCBpbml0KCkgewotICAgIGdEWSA9IDAuMGY7Ci19Ci0KLWludCB0ZXh0UG9zID0gMDsKLQotaW50IHJvb3Qodm9pZCkgewotCi0gICAgcnNnQ2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKLQotICAgIHRleHRQb3MgLT0gKGludClnRFkqMjsKLSAgICBnRFkgKj0gMC45NTsKLQotICAgIHJzZ0ZvbnRDb2xvcigwLjlmLCAwLjlmLCAwLjlmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnSXRhbGljKTsKLQotICAgIHJzX2FsbG9jYXRpb24gbGlzdEFsbG9jOwotICAgIGxpc3RBbGxvYyA9IHJzR2V0QWxsb2NhdGlvbihnTGlzdCk7Ci0gICAgaW50IGFsbG9jU2l6ZSA9IHJzQWxsb2NhdGlvbkdldERpbVgobGlzdEFsbG9jKTsKLQotICAgIGludCB3aWR0aCA9IHJzZ0dldFdpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHJzZ0dldEhlaWdodCgpOwotCi0gICAgaW50IGl0ZW1IZWlnaHQgPSA4MDsKLSAgICBpbnQgY3VycmVudFlQb3MgPSBpdGVtSGVpZ2h0ICsgdGV4dFBvczsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsb2NTaXplOyBpICsrKSB7Ci0gICAgICAgIGlmIChjdXJyZW50WVBvcyAtIGl0ZW1IZWlnaHQgPiBoZWlnaHQpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGN1cnJlbnRZUG9zID4gMCkgewotICAgICAgICAgICAgcnNnRHJhd1JlY3QoMCwgY3VycmVudFlQb3MgLSAxLCB3aWR0aCwgY3VycmVudFlQb3MsIDApOwotICAgICAgICAgICAgcnNnRHJhd1RleHQoZ0xpc3RbaV0udGV4dCwgMzAsIGN1cnJlbnRZUG9zIC0gMzIpOwotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnRZUG9zICs9IGl0ZW1IZWlnaHQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIDEwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvcnNyZW5kZXJzdGF0ZXMucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9yc3JlbmRlcnN0YXRlcy5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRhYmQwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9NaXNjU2FtcGxlcy9zcmMvY29tL2V4YW1wbGUvYW5kcm9pZC9ycy9taXNjc2FtcGxlcy9yc3JlbmRlcnN0YXRlcy5ycworKysgL2Rldi9udWxsCkBAIC0xLDY4MCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlcykKLQotI2luY2x1ZGUgInJzX2dyYXBoaWNzLnJzaCIKLSNpbmNsdWRlICJzaGFkZXJfZGVmLnJzaCIKLQotY29uc3QgaW50IGdNYXhNb2RlcyA9IDExOwotCi1yc19wcm9ncmFtX3ZlcnRleCBnUHJvZ1ZlcnRleDsKLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1Byb2dGcmFnbWVudENvbG9yOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50VGV4dHVyZTsKLQotcnNfcHJvZ3JhbV9zdG9yZSBnUHJvZ1N0b3JlQmxlbmROb25lRGVwdGg7Ci1yc19wcm9ncmFtX3N0b3JlIGdQcm9nU3RvcmVCbGVuZE5vbmU7Ci1yc19wcm9ncmFtX3N0b3JlIGdQcm9nU3RvcmVCbGVuZEFscGhhOwotcnNfcHJvZ3JhbV9zdG9yZSBnUHJvZ1N0b3JlQmxlbmRBZGQ7Ci0KLXJzX2FsbG9jYXRpb24gZ1RleE9wYXF1ZTsKLXJzX2FsbG9jYXRpb24gZ1RleFRvcnVzOwotcnNfYWxsb2NhdGlvbiBnVGV4VHJhbnNwYXJlbnQ7Ci1yc19hbGxvY2F0aW9uIGdUZXhDaGVja2VyOwotcnNfYWxsb2NhdGlvbiBnVGV4Q3ViZTsKLQotcnNfbWVzaCBnTWJ5Tk1lc2g7Ci1yc19tZXNoIGdUb3J1c01lc2g7Ci0KLXJzX2ZvbnQgZ0ZvbnRTYW5zOwotcnNfZm9udCBnRm9udFNlcmlmOwotcnNfZm9udCBnRm9udFNlcmlmQm9sZDsKLXJzX2ZvbnQgZ0ZvbnRTZXJpZkl0YWxpYzsKLXJzX2ZvbnQgZ0ZvbnRTZXJpZkJvbGRJdGFsaWM7Ci1yc19mb250IGdGb250TW9ubzsKLXJzX2FsbG9jYXRpb24gZ1RleHRBbGxvYzsKLQotaW50IGdEaXNwbGF5TW9kZTsKLQotcnNfc2FtcGxlciBnTGluZWFyQ2xhbXA7Ci1yc19zYW1wbGVyIGdMaW5lYXJXcmFwOwotcnNfc2FtcGxlciBnTWlwTGluZWFyV3JhcDsKLXJzX3NhbXBsZXIgZ01pcExpbmVhckFuaXNvODsKLXJzX3NhbXBsZXIgZ01pcExpbmVhckFuaXNvMTU7Ci1yc19zYW1wbGVyIGdOZWFyZXN0Q2xhbXA7Ci0KLXJzX3Byb2dyYW1fcmFzdGVyIGdDdWxsQmFjazsKLXJzX3Byb2dyYW1fcmFzdGVyIGdDdWxsRnJvbnQ7Ci1yc19wcm9ncmFtX3Jhc3RlciBnQ3VsbE5vbmU7Ci0KLS8vIEN1c3RvbSB2ZXJ0ZXggc2hhZGVyIGNvbXB1bmVudHMKLVZlcnRleFNoYWRlckNvbnN0YW50cyAqZ1ZTQ29uc3RhbnRzOwotVmVydGV4U2hhZGVyQ29uc3RhbnRzMiAqZ1ZTQ29uc3RhbnRzMjsKLUZyYWdlbnRTaGFkZXJDb25zdGFudHMgKmdGU0NvbnN0YW50czsKLUZyYWdlbnRTaGFkZXJDb25zdGFudHMyICpnRlNDb25zdGFudHMyOwotLy8gRXhwb3J0IHRoZXNlIG91dCB0byBlYXNpbHkgc2V0IHRoZSBpbnB1dHMgdG8gc2hhZGVyCi1WZXJ0ZXhTaGFkZXJJbnB1dHMgKmdWU0lucHV0czsKLS8vIEN1c3RvbSBzaGFkZXJzIHdlIHVzZSBmb3IgbGlnaHRpbmcKLXJzX3Byb2dyYW1fdmVydGV4IGdQcm9nVmVydGV4Q3VzdG9tOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50Q3VzdG9tOwotcnNfcHJvZ3JhbV92ZXJ0ZXggZ1Byb2dWZXJ0ZXhDdXN0b20yOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50Q3VzdG9tMjsKLXJzX3Byb2dyYW1fdmVydGV4IGdQcm9nVmVydGV4Q3ViZTsKLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1Byb2dGcmFnbWVudEN1YmU7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQcm9nRnJhZ21lbnRNdWx0aXRleDsKLQotZmxvYXQgZ0R0ID0gMDsKLQotdm9pZCBpbml0KCkgewotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5Rm9udFNhbXBsZXMoKSB7Ci0gICAgcnNnRm9udENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIGludCB5UG9zID0gMTAwOwotICAgIHJzZ0JpbmRGb250KGdGb250U2Fucyk7Ci0gICAgcnNnRHJhd1RleHQoIlNhbnMgZm9udCBzYW1wbGUiLCAzMCwgeVBvcyk7Ci0gICAgeVBvcyArPSAzMDsKLSAgICByc2dGb250Q29sb3IoMC41ZiwgMC45ZiwgMC41ZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRTZXJpZik7Ci0gICAgcnNnRHJhd1RleHQoIlNlcmlmIGZvbnQgc2FtcGxlIiwgMzAsIHlQb3MpOwotICAgIHlQb3MgKz0gMzA7Ci0gICAgcnNnRm9udENvbG9yKDAuN2YsIDAuN2YsIDAuN2YsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250U2VyaWZCb2xkKTsKLSAgICByc2dEcmF3VGV4dCgiU2VyaWYgQm9sZCBmb250IHNhbXBsZSIsIDMwLCB5UG9zKTsKLSAgICB5UG9zICs9IDMwOwotICAgIHJzZ0ZvbnRDb2xvcigwLjVmLCAwLjVmLCAwLjlmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnRm9udFNlcmlmSXRhbGljKTsKLSAgICByc2dEcmF3VGV4dCgiU2VyaWYgSXRhbGljIGZvbnQgc2FtcGxlIiwgMzAsIHlQb3MpOwotICAgIHlQb3MgKz0gMzA7Ci0gICAgcnNnRm9udENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250U2VyaWZCb2xkSXRhbGljKTsKLSAgICByc2dEcmF3VGV4dCgiU2VyaWYgQm9sZCBJdGFsaWMgZm9udCBzYW1wbGUiLCAzMCwgeVBvcyk7Ci0gICAgeVBvcyArPSAzMDsKLSAgICByc2dCaW5kRm9udChnRm9udE1vbm8pOwotICAgIHJzZ0RyYXdUZXh0KCJNb25vc3BhY2UgZm9udCBzYW1wbGUiLCAzMCwgeVBvcyk7Ci0gICAgeVBvcyArPSA1MDsKLQotICAgIC8vIE5vdyB1c2UgdGV4dCBtZXRyaWNzIHRvIGNlbnRlciB0aGUgdGV4dAotICAgIHVpbnQgd2lkdGggPSByc2dHZXRXaWR0aCgpOwotICAgIHVpbnQgaGVpZ2h0ID0gcnNnR2V0SGVpZ2h0KCk7Ci0gICAgaW50IGxlZnQgPSAwLCByaWdodCA9IDAsIHRvcCA9IDAsIGJvdHRvbSA9IDA7Ci0KLSAgICByc2dGb250Q29sb3IoMC45ZiwgMC45ZiwgMC45NWYsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250U2VyaWZCb2xkSXRhbGljKTsKLQotICAgIHJzZ01lYXN1cmVUZXh0KGdUZXh0QWxsb2MsICZsZWZ0LCAmcmlnaHQsICZ0b3AsICZib3R0b20pOwotICAgIGludCBjZW50ZXJlZFBvcyA9IHdpZHRoIC8gMiAtIChyaWdodCAtIGxlZnQpIC8gMjsKLSAgICByc2dEcmF3VGV4dChnVGV4dEFsbG9jLCBjZW50ZXJlZFBvcywgeVBvcyk7Ci0gICAgeVBvcyArPSAzMDsKLQotICAgIGNvbnN0IGNoYXIqIHRleHQgPSAiQ2VudGVyZWQgVGV4dCBTYW1wbGUiOwotICAgIHJzZ01lYXN1cmVUZXh0KHRleHQsICZsZWZ0LCAmcmlnaHQsICZ0b3AsICZib3R0b20pOwotICAgIGNlbnRlcmVkUG9zID0gd2lkdGggLyAyIC0gKHJpZ2h0IC0gbGVmdCkgLyAyOwotICAgIHJzZ0RyYXdUZXh0KHRleHQsIGNlbnRlcmVkUG9zLCB5UG9zKTsKLSAgICB5UG9zICs9IDMwOwotCi0gICAgcnNnQmluZEZvbnQoZ0ZvbnRTYW5zKTsKLSAgICB0ZXh0ID0gIk1vcmUgQ2VudGVyZWQgVGV4dCBTYW1wbGVzIjsKLSAgICByc2dNZWFzdXJlVGV4dCh0ZXh0LCAmbGVmdCwgJnJpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLSAgICBjZW50ZXJlZFBvcyA9IHdpZHRoIC8gMiAtIChyaWdodCAtIGxlZnQpIC8gMjsKLSAgICByc2dEcmF3VGV4dCh0ZXh0LCBjZW50ZXJlZFBvcywgeVBvcyk7Ci0gICAgeVBvcyArPSAzMDsKLQotICAgIC8vIE5vdyBkcmF3IGJvdHRvbSBhbmQgdG9wIHJpZ2h0IGFsaWduZWQgdGV4dAotICAgIHRleHQgPSAiVG9wLXJpZ2h0IGFsaWduZWQgdGV4dCI7Ci0gICAgcnNnTWVhc3VyZVRleHQodGV4dCwgJmxlZnQsICZyaWdodCwgJnRvcCwgJmJvdHRvbSk7Ci0gICAgcnNnRHJhd1RleHQodGV4dCwgd2lkdGggLSByaWdodCwgdG9wKTsKLQotICAgIHRleHQgPSAiVG9wLWxlZnQiOwotICAgIHJzZ01lYXN1cmVUZXh0KHRleHQsICZsZWZ0LCAmcmlnaHQsICZ0b3AsICZib3R0b20pOwotICAgIHJzZ0RyYXdUZXh0KHRleHQsIC1sZWZ0LCB0b3ApOwotCi0gICAgdGV4dCA9ICJCb3R0b20tcmlnaHQgYWxpZ25lZCB0ZXh0IjsKLSAgICByc2dNZWFzdXJlVGV4dCh0ZXh0LCAmbGVmdCwgJnJpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLSAgICByc2dEcmF3VGV4dCh0ZXh0LCB3aWR0aCAtIHJpZ2h0LCBoZWlnaHQgKyBib3R0b20pOwotCi19Ci0KLXN0YXRpYyB2b2lkIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKSB7Ci0gICAgLy8gRGVmYXVsdCB2ZXJ0ZXggc2FoZGVyCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXgpOwotICAgIC8vIFNldHVwIHRoZSBwcm9qZWN0aW9uaSBtYXRyaXgKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICByc01hdHJpeExvYWRPcnRobygmcHJvaiwgMCwgcnNnR2V0V2lkdGgoKSwgcnNnR2V0SGVpZ2h0KCksIDAsIC01MDAsIDUwMCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheVNoYWRlclNhbXBsZXMoKSB7Ci0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmUpOwotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudFRleHR1cmUpOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnVGV4T3BhcXVlKTsKLQotICAgIGZsb2F0IHN0YXJ0WCA9IDAsIHN0YXJ0WSA9IDA7Ci0gICAgZmxvYXQgd2lkdGggPSAyNTYsIGhlaWdodCA9IDI1NjsKLSAgICByc2dEcmF3UXVhZFRleENvb3JkcyhzdGFydFgsIHN0YXJ0WSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFksIDAsIDEsIDApOwotCi0gICAgc3RhcnRYID0gMjAwOyBzdGFydFkgPSAwOwotICAgIHdpZHRoID0gMTI4OyBoZWlnaHQgPSAxMjg7Ci0gICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLCAwKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kQWxwaGEpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnVGV4VHJhbnNwYXJlbnQpOwotICAgIHN0YXJ0WCA9IDA7IHN0YXJ0WSA9IDIwMDsKLSAgICB3aWR0aCA9IDEyODsgaGVpZ2h0ID0gMTI4OwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKHN0YXJ0WCwgc3RhcnRZLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFkgKyBoZWlnaHQsIDAsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSwgMCwgMSwgMCk7Ci0KLSAgICAvLyBGcmFnbWVudCBwcm9ncmFtIHdpdGggc2ltcGxlIGNvbG9yCi0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50Q29sb3IpOwotICAgIHJzZ1Byb2dyYW1GcmFnbWVudENvbnN0YW50Q29sb3IoZ1Byb2dGcmFnbWVudENvbG9yLCAwLjksIDAuMywgMC4zLCAxKTsKLSAgICByc2dEcmF3UmVjdCgyMDAsIDMwMCwgMzUwLCA0NTAsIDApOwotICAgIHJzZ1Byb2dyYW1GcmFnbWVudENvbnN0YW50Q29sb3IoZ1Byb2dGcmFnbWVudENvbG9yLCAwLjMsIDAuOSwgMC4zLCAxKTsKLSAgICByc2dEcmF3UmVjdCg1MCwgNDAwLCA0MDAsIDYwMCwgMCk7Ci0KLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRNb25vKTsKLSAgICByc2dEcmF3VGV4dCgiVGV4dHVyZSBzaGFkZXIiLCAxMCwgNTApOwotICAgIHJzZ0RyYXdUZXh0KCJBbHBoYS1ibGVuZGVkIHRleHR1cmUgc2hhZGVyIiwgMTAsIDI4MCk7Ci0gICAgcnNnRHJhd1RleHQoIkZsYXQgY29sb3Igc2hhZGVyIiwgMTAwLCA0NTApOwotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5QmxlbmRpbmdTYW1wbGVzKCkgewotICAgIGludCBpOwotCi0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudENvbG9yKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kTm9uZSk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsKLSAgICAgICAgZmxvYXQgaVBsdXNPbmUgPSAoZmxvYXQpKGkgKyAxKTsKLSAgICAgICAgcnNnUHJvZ3JhbUZyYWdtZW50Q29uc3RhbnRDb2xvcihnUHJvZ0ZyYWdtZW50Q29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4xZippUGx1c09uZSwgMC4yZippUGx1c09uZSwgMC4zZippUGx1c09uZSwgMSk7Ci0gICAgICAgIGZsb2F0IHlQb3MgPSAxNTAgKiAoZmxvYXQpaTsKLSAgICAgICAgcnNnRHJhd1JlY3QoMCwgeVBvcywgMjAwLCB5UG9zICsgMjAwLCAwKTsKLSAgICB9Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZEFscGhhKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgewotICAgICAgICBmbG9hdCBpUGx1c09uZSA9IChmbG9hdCkoaSArIDEpOwotICAgICAgICByc2dQcm9ncmFtRnJhZ21lbnRDb25zdGFudENvbG9yKGdQcm9nRnJhZ21lbnRDb2xvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjJmKmlQbHVzT25lLCAwLjNmKmlQbHVzT25lLCAwLjFmKmlQbHVzT25lLCAwLjUpOwotICAgICAgICBmbG9hdCB5UG9zID0gMTUwICogKGZsb2F0KWk7Ci0gICAgICAgIHJzZ0RyYXdSZWN0KDE1MCwgeVBvcywgMzUwLCB5UG9zICsgMjAwLCAwKTsKLSAgICB9Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZEFkZCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsKLSAgICAgICAgZmxvYXQgaVBsdXNPbmUgPSAoZmxvYXQpKGkgKyAxKTsKLSAgICAgICAgcnNnUHJvZ3JhbUZyYWdtZW50Q29uc3RhbnRDb2xvcihnUHJvZ0ZyYWdtZW50Q29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4zZippUGx1c09uZSwgMC4xZippUGx1c09uZSwgMC4yZippUGx1c09uZSwgMC41KTsKLSAgICAgICAgZmxvYXQgeVBvcyA9IDE1MCAqIChmbG9hdClpOwotICAgICAgICByc2dEcmF3UmVjdCgzMDAsIHlQb3MsIDUwMCwgeVBvcyArIDIwMCwgMCk7Ci0gICAgfQotCi0KLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRNb25vKTsKLSAgICByc2dEcmF3VGV4dCgiTm8gQmxlbmRpbmciLCAxMCwgNTApOwotICAgIHJzZ0RyYXdUZXh0KCJBbHBoYSBCbGVuZGluZyIsIDE2MCwgMTUwKTsKLSAgICByc2dEcmF3VGV4dCgiQWRkaXRpdmUgQmxlbmRpbmciLCAzMjAsIDI1MCk7Ci0KLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheU1lc2hTYW1wbGVzKCkgewotCi0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKCZtYXRyaXgsIDEyOCwgMTI4LCAwKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotCi0gICAgLy8gRnJhZ21lbnQgc2hhZGVyIHdpdGggdGV4dHVyZQotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kTm9uZSk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50VGV4dHVyZSk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdUZXhPcGFxdWUpOwotCi0gICAgcnNnRHJhd01lc2goZ01ieU5NZXNoKTsKLQotICAgIHJzZ0ZvbnRDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnRm9udE1vbm8pOwotICAgIHJzZ0RyYXdUZXh0KCJVc2VyIGdlbiAxMCBieSAxMCBncmlkIG1lc2giLCAxMCwgMjUwKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheVRleHR1cmVTYW1wbGVycygpIHsKLQotICAgIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKTsKLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0KLSAgICAvLyBGcmFnbWVudCBzaGFkZXIgd2l0aCB0ZXh0dXJlCi0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmROb25lKTsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ1RleE9wYXF1ZSk7Ci0KLSAgICAvLyBMaW5lYXIgY2xhbXAKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ0xpbmVhckNsYW1wKTsKLSAgICBmbG9hdCBzdGFydFggPSAwLCBzdGFydFkgPSAwOwotICAgIGZsb2F0IHdpZHRoID0gMzAwLCBoZWlnaHQgPSAzMDA7Ci0gICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDEuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAxLjEsIDEuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLjEsIDApOwotCi0gICAgLy8gTGluZWFyIFdyYXAKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ0xpbmVhcldyYXApOwotICAgIHN0YXJ0WCA9IDA7IHN0YXJ0WSA9IDMwMDsKLSAgICB3aWR0aCA9IDMwMDsgaGVpZ2h0ID0gMzAwOwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKHN0YXJ0WCwgc3RhcnRZLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAxLjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMS4xLCAxLjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSwgMCwgMS4xLCAwKTsKLQotICAgIC8vIE5lYXJlc3QKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ05lYXJlc3RDbGFtcCk7Ci0gICAgc3RhcnRYID0gMzAwOyBzdGFydFkgPSAwOwotICAgIHdpZHRoID0gMzAwOyBoZWlnaHQgPSAzMDA7Ci0gICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDEuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAxLjEsIDEuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLjEsIDApOwotCi0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdNaXBMaW5lYXJXcmFwKTsKLSAgICBzdGFydFggPSAzMDA7IHN0YXJ0WSA9IDMwMDsKLSAgICB3aWR0aCA9IDMwMDsgaGVpZ2h0ID0gMzAwOwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKHN0YXJ0WCwgc3RhcnRZLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAxLjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMS41LCAxLjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSwgMCwgMS41LCAwKTsKLQotICAgIHJzZ0ZvbnRDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnRm9udE1vbm8pOwotICAgIHJzZ0RyYXdUZXh0KCJGaWx0ZXJpbmc6IGxpbmVhciBjbGFtcCIsIDEwLCAyOTApOwotICAgIHJzZ0RyYXdUZXh0KCJGaWx0ZXJpbmc6IGxpbmVhciB3cmFwIiwgMTAsIDU5MCk7Ci0gICAgcnNnRHJhd1RleHQoIkZpbHRlcmluZzogbmVhcmVzdCBjbGFtcCIsIDMxMCwgMjkwKTsKLSAgICByc2dEcmF3VGV4dCgiRmlsdGVyaW5nOiBtaXBsaW5lYXIgd3JhcCIsIDMxMCwgNTkwKTsKLX0KLQotc3RhdGljIGZsb2F0IGdUb3J1c1JvdGF0aW9uID0gMDsKLQotc3RhdGljIHZvaWQgZGlzcGxheUN1bGxpbmdTYW1wbGVzKCkgewotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQcm9nVmVydGV4KTsKLSAgICAvLyBTZXR1cCB0aGUgcHJvamVjdGlvbmkgbWF0cml4IHdpdGggNjAgZGVncmVlIGZpZWxkIG9mIHZpZXcKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpcnNnR2V0V2lkdGgoKSAvIChmbG9hdClyc2dHZXRIZWlnaHQoKTsKLSAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmcHJvaiwgMzAuMGYsIGFzcGVjdCwgMC4xZiwgMTAwLjBmKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZFByb2plY3Rpb25NYXRyaXgoJnByb2opOwotCi0gICAgLy8gRnJhZ21lbnQgc2hhZGVyIHdpdGggdGV4dHVyZQotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kTm9uZURlcHRoKTsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ0xpbmVhckNsYW1wKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ1RleFRvcnVzKTsKLQotICAgIC8vIEFwbGx5IGEgcm90YXRpb24gdG8gb3VyIG1lc2gKLSAgICBnVG9ydXNSb3RhdGlvbiArPSA1MC4wZiAqIGdEdDsKLSAgICBpZiAoZ1RvcnVzUm90YXRpb24gPiAzNjAuMGYpIHsKLSAgICAgICAgZ1RvcnVzUm90YXRpb24gLT0gMzYwLjBmOwotICAgIH0KLQotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgLy8gUG9zaXRpb24gb3VyIG1vZGVsIG9uIHRoZSBzY3JlZW4KLSAgICByc01hdHJpeExvYWRUcmFuc2xhdGUoJm1hdHJpeCwgLTIuMGYsIDAuMGYsIC0xMC4wZik7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0gICAgLy8gVXNlIGZyb250IGZhY2UgY3VsbGluZwotICAgIHJzZ0JpbmRQcm9ncmFtUmFzdGVyKGdDdWxsRnJvbnQpOwotICAgIHJzZ0RyYXdNZXNoKGdUb3J1c01lc2gpOwotCi0gICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKCZtYXRyaXgsIDIuMGYsIDAuMGYsIC0xMC4wZik7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0gICAgLy8gVXNlIGJhY2sgZmFjZSBjdWxsaW5nCi0gICAgcnNnQmluZFByb2dyYW1SYXN0ZXIoZ0N1bGxCYWNrKTsKLSAgICByc2dEcmF3TWVzaChnVG9ydXNNZXNoKTsKLQotICAgIHJzZ0ZvbnRDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnRm9udE1vbm8pOwotICAgIHJzZ0RyYXdUZXh0KCJEaXNwbGF5aW5nIG1lc2ggZnJvbnQvYmFjayBmYWNlIGN1bGxpbmciLCAxMCwgcnNnR2V0SGVpZ2h0KCkgLSAxMCk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBnTGlnaHQwUm90YXRpb24gPSAwOwotc3RhdGljIGZsb2F0IGdMaWdodDFSb3RhdGlvbiA9IDA7Ci0KLXN0YXRpYyB2b2lkIHNldHVwQ3VzdG9tU2hhZGVyTGlnaHRzKCkgewotICAgIGZsb2F0NCBsaWdodDBQb3MgPSB7LTUuMGYsIDUuMGYsIC0xMC4wZiwgMS4wZn07Ci0gICAgZmxvYXQ0IGxpZ2h0MVBvcyA9IHsyLjBmLCA1LjBmLCAxNS4wZiwgMS4wZn07Ci0gICAgZmxvYXQ0IGxpZ2h0MERpZmZDb2wgPSB7MC45ZiwgMC43ZiwgMC43ZiwgMS4wZn07Ci0gICAgZmxvYXQ0IGxpZ2h0MFNwZWNDb2wgPSB7MC45ZiwgMC42ZiwgMC42ZiwgMS4wZn07Ci0gICAgZmxvYXQ0IGxpZ2h0MURpZmZDb2wgPSB7MC41ZiwgMC41ZiwgMC45ZiwgMS4wZn07Ci0gICAgZmxvYXQ0IGxpZ2h0MVNwZWNDb2wgPSB7MC41ZiwgMC41ZiwgMC45ZiwgMS4wZn07Ci0KLSAgICBnTGlnaHQwUm90YXRpb24gKz0gNTAuMGYgKiBnRHQ7Ci0gICAgaWYgKGdMaWdodDBSb3RhdGlvbiA+IDM2MC4wZikgewotICAgICAgICBnTGlnaHQwUm90YXRpb24gLT0gMzYwLjBmOwotICAgIH0KLSAgICBnTGlnaHQxUm90YXRpb24gLT0gNTAuMGYgKiBnRHQ7Ci0gICAgaWYgKGdMaWdodDFSb3RhdGlvbiA+IDM2MC4wZikgewotICAgICAgICBnTGlnaHQxUm90YXRpb24gLT0gMzYwLjBmOwotICAgIH0KLQotICAgIHJzX21hdHJpeDR4NCBsME1hdDsKLSAgICByc01hdHJpeExvYWRSb3RhdGUoJmwwTWF0LCBnTGlnaHQwUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIGxpZ2h0MFBvcyA9IHJzTWF0cml4TXVsdGlwbHkoJmwwTWF0LCBsaWdodDBQb3MpOwotICAgIHJzX21hdHJpeDR4NCBsMU1hdDsKLSAgICByc01hdHJpeExvYWRSb3RhdGUoJmwxTWF0LCBnTGlnaHQxUm90YXRpb24sIDAuMGYsIDAuMGYsIDEuMGYpOwotICAgIGxpZ2h0MVBvcyA9IHJzTWF0cml4TXVsdGlwbHkoJmwxTWF0LCBsaWdodDFQb3MpOwotCi0gICAgLy8gU2V0IGxpZ2h0IDAgcHJvcGVydGllcwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQwX1Bvc2lzaW9uID0gbGlnaHQwUG9zOwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQwX0RpZmZ1c2UgPSAxLjBmOwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQwX1NwZWN1bGFyID0gMC41ZjsKLSAgICBnVlNDb25zdGFudHMtPmxpZ2h0MF9Db3NpbmVQb3dlciA9IDEwLjBmOwotICAgIC8vIFNldCBsaWdodCAxIHByb3BlcnRpZXMKLSAgICBnVlNDb25zdGFudHMtPmxpZ2h0MV9Qb3Npc2lvbiA9IGxpZ2h0MVBvczsKLSAgICBnVlNDb25zdGFudHMtPmxpZ2h0MV9EaWZmdXNlID0gMS4wZjsKLSAgICBnVlNDb25zdGFudHMtPmxpZ2h0MV9TcGVjdWxhciA9IDAuN2Y7Ci0gICAgZ1ZTQ29uc3RhbnRzLT5saWdodDFfQ29zaW5lUG93ZXIgPSAyNS4wZjsKLSAgICByc2dBbGxvY2F0aW9uU3luY0FsbChyc0dldEFsbG9jYXRpb24oZ1ZTQ29uc3RhbnRzKSk7Ci0KLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9Qb3Npc2lvblswXSA9IGxpZ2h0MFBvczsKLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9EaWZmdXNlWzBdID0gMS4wZjsKLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9TcGVjdWxhclswXSA9IDAuNWY7Ci0gICAgZ1ZTQ29uc3RhbnRzMi0+bGlnaHRfQ29zaW5lUG93ZXJbMF0gPSAxMC4wZjsKLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9Qb3Npc2lvblsxXSA9IGxpZ2h0MVBvczsKLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9EaWZmdXNlWzFdID0gMS4wZjsKLSAgICBnVlNDb25zdGFudHMyLT5saWdodF9TcGVjdWxhclsxXSA9IDAuN2Y7Ci0gICAgZ1ZTQ29uc3RhbnRzMi0+bGlnaHRfQ29zaW5lUG93ZXJbMV0gPSAyNS4wZjsKLSAgICByc2dBbGxvY2F0aW9uU3luY0FsbChyc0dldEFsbG9jYXRpb24oZ1ZTQ29uc3RhbnRzMikpOwotCi0gICAgLy8gVXBkYXRlIGZyYWdtZXRuIHNoYWRlciBjb25zdGFudHMKLSAgICAvLyBTZXQgbGlnaHQgMCBjb2xvcnMKLSAgICBnRlNDb25zdGFudHMtPmxpZ2h0MF9EaWZmdXNlQ29sb3IgPSBsaWdodDBEaWZmQ29sOwotICAgIGdGU0NvbnN0YW50cy0+bGlnaHQwX1NwZWN1bGFyQ29sb3IgPSBsaWdodDBTcGVjQ29sOwotICAgIC8vIFNldCBsaWdodCAxIGNvbG9ycwotICAgIGdGU0NvbnN0YW50cy0+bGlnaHQxX0RpZmZ1c2VDb2xvciA9IGxpZ2h0MURpZmZDb2w7Ci0gICAgZ0ZTQ29uc3RhbnRzLT5saWdodDFfU3BlY3VsYXJDb2xvciA9IGxpZ2h0MVNwZWNDb2w7Ci0gICAgcnNnQWxsb2NhdGlvblN5bmNBbGwocnNHZXRBbGxvY2F0aW9uKGdGU0NvbnN0YW50cykpOwotCi0gICAgZ0ZTQ29uc3RhbnRzMi0+bGlnaHRfRGlmZnVzZUNvbG9yWzBdID0gbGlnaHQwRGlmZkNvbDsKLSAgICBnRlNDb25zdGFudHMyLT5saWdodF9TcGVjdWxhckNvbG9yWzBdID0gbGlnaHQwU3BlY0NvbDsKLSAgICAvLyBTZXQgbGlnaHQgMSBjb2xvcnMKLSAgICBnRlNDb25zdGFudHMyLT5saWdodF9EaWZmdXNlQ29sb3JbMV0gPSBsaWdodDFEaWZmQ29sOwotICAgIGdGU0NvbnN0YW50czItPmxpZ2h0X1NwZWN1bGFyQ29sb3JbMV0gPSBsaWdodDFTcGVjQ29sOwotICAgIHJzZ0FsbG9jYXRpb25TeW5jQWxsKHJzR2V0QWxsb2NhdGlvbihnRlNDb25zdGFudHMyKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BsYXlDdXN0b21TaGFkZXJTYW1wbGVzKCkgewotCi0gICAgLy8gVXBkYXRlIHZlcnRleCBzaGFkZXIgY29uc3RhbnRzCi0gICAgLy8gTG9hZCBtb2RlbCBtYXRyaXgKLSAgICAvLyBBcGxseSBhIHJvdGF0aW9uIHRvIG91ciBtZXNoCi0gICAgZ1RvcnVzUm90YXRpb24gKz0gNTAuMGYgKiBnRHQ7Ci0gICAgaWYgKGdUb3J1c1JvdGF0aW9uID4gMzYwLjBmKSB7Ci0gICAgICAgIGdUb3J1c1JvdGF0aW9uIC09IDM2MC4wZjsKLSAgICB9Ci0KLSAgICAvLyBQb3NpdGlvbiBvdXIgbW9kZWwgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZSgmZ1ZTQ29uc3RhbnRzLT5tb2RlbCwgMC4wZiwgMC4wZiwgLTEwLjBmKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmZ1ZTQ29uc3RhbnRzLT5tb2RlbCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZnVlNDb25zdGFudHMtPm1vZGVsLCBnVG9ydXNSb3RhdGlvbiwgMC4wZiwgMC4wZiwgMS4wZik7Ci0gICAgLy8gU2V0dXAgdGhlIHByb2plY3Rpb25pIG1hdHJpeAotICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZnVlNDb25zdGFudHMtPnByb2osIDMwLjBmLCBhc3BlY3QsIDAuMWYsIDEwMC4wZik7Ci0gICAgc2V0dXBDdXN0b21TaGFkZXJMaWdodHMoKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQcm9nVmVydGV4Q3VzdG9tKTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50Q3VzdG9tKTsKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50Q3VzdG9tLCAwLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRDdXN0b20sIDAsIGdUZXhUb3J1cyk7Ci0KLSAgICAvLyBVc2UgYmFjayBmYWNlIGN1bGxpbmcKLSAgICByc2dCaW5kUHJvZ3JhbVJhc3RlcihnQ3VsbEJhY2spOwotICAgIHJzZ0RyYXdNZXNoKGdUb3J1c01lc2gpOwotCi0gICAgcnNnRm9udENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250TW9ubyk7Ci0gICAgcnNnRHJhd1RleHQoIkN1c3RvbSBzaGFkZXIgc2FtcGxlIiwgMTAsIHJzZ0dldEhlaWdodCgpIC0gMTApOwotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5Q3VzdG9tU2hhZGVyU2FtcGxlczIoKSB7Ci0KLSAgICAvLyBVcGRhdGUgdmVydGV4IHNoYWRlciBjb25zdGFudHMKLSAgICAvLyBMb2FkIG1vZGVsIG1hdHJpeAotICAgIC8vIEFwbGx5IGEgcm90YXRpb24gdG8gb3VyIG1lc2gKLSAgICBnVG9ydXNSb3RhdGlvbiArPSA1MC4wZiAqIGdEdDsKLSAgICBpZiAoZ1RvcnVzUm90YXRpb24gPiAzNjAuMGYpIHsKLSAgICAgICAgZ1RvcnVzUm90YXRpb24gLT0gMzYwLjBmOwotICAgIH0KLQotICAgIC8vIFBvc2l0aW9uIG91ciBtb2RlbCBvbiB0aGUgc2NyZWVuCi0gICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKCZnVlNDb25zdGFudHMyLT5tb2RlbFsxXSwgMC4wZiwgMC4wZiwgLTEwLjBmKTsKLSAgICByc01hdHJpeExvYWRJZGVudGl0eSgmZ1ZTQ29uc3RhbnRzMi0+bW9kZWxbMF0pOwotICAgIHJzTWF0cml4Um90YXRlKCZnVlNDb25zdGFudHMyLT5tb2RlbFswXSwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZnVlNDb25zdGFudHMyLT5tb2RlbFswXSwgZ1RvcnVzUm90YXRpb24sIDAuMGYsIDAuMGYsIDEuMGYpOwotICAgIC8vIFNldHVwIHRoZSBwcm9qZWN0aW9uaSBtYXRyaXgKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpcnNnR2V0V2lkdGgoKSAvIChmbG9hdClyc2dHZXRIZWlnaHQoKTsKLSAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmZ1ZTQ29uc3RhbnRzMi0+cHJvaiwgMzAuMGYsIGFzcGVjdCwgMC4xZiwgMTAwLjBmKTsKLSAgICBzZXR1cEN1c3RvbVNoYWRlckxpZ2h0cygpOwotCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXhDdXN0b20yKTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50Q3VzdG9tMik7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudEN1c3RvbTIsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudEN1c3RvbTIsIDAsIGdUZXhUb3J1cyk7Ci0KLSAgICAvLyBVc2UgYmFjayBmYWNlIGN1bGxpbmcKLSAgICByc2dCaW5kUHJvZ3JhbVJhc3RlcihnQ3VsbEJhY2spOwotICAgIHJzZ0RyYXdNZXNoKGdUb3J1c01lc2gpOwotCi0gICAgcnNnRm9udENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250TW9ubyk7Ci0gICAgcnNnRHJhd1RleHQoIkN1c3RvbSBzaGFkZXIgc2FtcGxlIHdpdGggYXJyYXkgdW5pZm9ybXMiLCAxMCwgcnNnR2V0SGVpZ2h0KCkgLSAxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BsYXlDdWJlbWFwU2hhZGVyU2FtcGxlKCkgewotICAgIC8vIFVwZGF0ZSB2ZXJ0ZXggc2hhZGVyIGNvbnN0YW50cwotICAgIC8vIExvYWQgbW9kZWwgbWF0cml4Ci0gICAgLy8gQXBsbHkgYSByb3RhdGlvbiB0byBvdXIgbWVzaAotICAgIGdUb3J1c1JvdGF0aW9uICs9IDUwLjBmICogZ0R0OwotICAgIGlmIChnVG9ydXNSb3RhdGlvbiA+IDM2MC4wZikgewotICAgICAgICBnVG9ydXNSb3RhdGlvbiAtPSAzNjAuMGY7Ci0gICAgfQotCi0gICAgLy8gUG9zaXRpb24gb3VyIG1vZGVsIG9uIHRoZSBzY3JlZW4KLSAgICAvLyBQb3NpdGlvbiBvdXIgbW9kZWwgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZSgmZ1ZTQ29uc3RhbnRzLT5tb2RlbCwgMC4wZiwgMC4wZiwgLTEwLjBmKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmZ1ZTQ29uc3RhbnRzLT5tb2RlbCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzTWF0cml4Um90YXRlKCZnVlNDb25zdGFudHMtPm1vZGVsLCBnVG9ydXNSb3RhdGlvbiwgMC4wZiwgMC4wZiwgMS4wZik7Ci0gICAgLy8gU2V0dXAgdGhlIHByb2plY3Rpb25pIG1hdHJpeAotICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZnVlNDb25zdGFudHMtPnByb2osIDMwLjBmLCBhc3BlY3QsIDAuMWYsIDEwMC4wZik7Ci0gICAgcnNnQWxsb2NhdGlvblN5bmNBbGwocnNHZXRBbGxvY2F0aW9uKGdGU0NvbnN0YW50cykpOwotCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXhDdWJlKTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50Q3ViZSk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudEN1YmUsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudEN1YmUsIDAsIGdUZXhDdWJlKTsKLQotICAgIC8vIFVzZSBiYWNrIGZhY2UgY3VsbGluZwotICAgIHJzZ0JpbmRQcm9ncmFtUmFzdGVyKGdDdWxsQmFjayk7Ci0gICAgcnNnRHJhd01lc2goZ1RvcnVzTWVzaCk7Ci0KLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRNb25vKTsKLSAgICByc2dEcmF3VGV4dCgiQ3ViZW1hcCBzaGFkZXIgc2FtcGxlIiwgMTAsIHJzZ0dldEhlaWdodCgpIC0gMTApOwotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5TXVsdGl0ZXh0dXJlU2FtcGxlKCkgewotICAgIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKTsKLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0KLSAgICAvLyBGcmFnbWVudCBzaGFkZXIgd2l0aCB0ZXh0dXJlCi0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmROb25lKTsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRNdWx0aXRleCk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudE11bHRpdGV4LCAwLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRNdWx0aXRleCwgMSwgZ0xpbmVhcldyYXApOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRNdWx0aXRleCwgMiwgZ0xpbmVhckNsYW1wKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50TXVsdGl0ZXgsIDAsIGdUZXhDaGVja2VyKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50TXVsdGl0ZXgsIDEsIGdUZXhUb3J1cyk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudE11bHRpdGV4LCAyLCBnVGV4VHJhbnNwYXJlbnQpOwotCi0gICAgZmxvYXQgc3RhcnRYID0gMCwgc3RhcnRZID0gMDsKLSAgICBmbG9hdCB3aWR0aCA9IDI1NiwgaGVpZ2h0ID0gMjU2OwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKHN0YXJ0WCwgc3RhcnRZLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFkgKyBoZWlnaHQsIDAsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSwgMCwgMSwgMCk7Ci0KLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRNb25vKTsKLSAgICByc2dEcmF3VGV4dCgiQ3VzdG9tIHNoYWRlciB3aXRoIG11bHRpdGV4dHVyaW5nIiwgMTAsIDI4MCk7Ci19Ci0KLXN0YXRpYyBmbG9hdCBnQW5pc29UaW1lID0gMC4wZjsKLXN0YXRpYyB1aW50IGFuaXNvTW9kZSA9IDA7Ci1zdGF0aWMgdm9pZCBkaXNwbGF5QW5pc29TYW1wbGUoKSB7Ci0KLSAgICBnQW5pc29UaW1lICs9IGdEdDsKLQotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQcm9nVmVydGV4KTsKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpcnNnR2V0V2lkdGgoKSAvIChmbG9hdClyc2dHZXRIZWlnaHQoKTsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmcHJvaiwgMzAuMGYsIGFzcGVjdCwgMC4xZiwgMTAwLjBmKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZFByb2plY3Rpb25NYXRyaXgoJnByb2opOwotCi0gICAgcnNfbWF0cml4NHg0IG1hdHJpeDsKLSAgICAvLyBGcmFnbWVudCBzaGFkZXIgd2l0aCB0ZXh0dXJlCi0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmROb25lKTsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICByc01hdHJpeExvYWRUcmFuc2xhdGUoJm1hdHJpeCwgMC4wZiwgMC4wZiwgLTEwLjBmKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCAtODAsIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVJhc3RlcihnQ3VsbE5vbmUpOwotCi0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdUZXhDaGVja2VyKTsKLQotICAgIGlmIChnQW5pc29UaW1lID49IDUuMGYpIHsKLSAgICAgICAgZ0FuaXNvVGltZSA9IDAuMGY7Ci0gICAgICAgIGFuaXNvTW9kZSArKzsKLSAgICAgICAgYW5pc29Nb2RlID0gYW5pc29Nb2RlICUgMzsKLSAgICB9Ci0KLSAgICBpZiAoYW5pc29Nb2RlID09IDApIHsKLSAgICAgICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdNaXBMaW5lYXJBbmlzbzgpOwotICAgIH0gZWxzZSBpZiAoYW5pc29Nb2RlID09IDEpIHsKLSAgICAgICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdNaXBMaW5lYXJBbmlzbzE1KTsKLSAgICB9IGVsc2UgewotICAgICAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ01pcExpbmVhcldyYXApOwotICAgIH0KLQotICAgIGZsb2F0IHN0YXJ0WCA9IC0xNTsKLSAgICBmbG9hdCBzdGFydFkgPSAtMTU7Ci0gICAgZmxvYXQgd2lkdGggPSAzMDsKLSAgICBmbG9hdCBoZWlnaHQgPSAzMDsKLSAgICByc2dEcmF3UXVhZFRleENvb3JkcyhzdGFydFgsIHN0YXJ0WSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMCwgMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMTAsIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFksIDAsIDEwLCAwKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtUmFzdGVyKGdDdWxsQmFjayk7Ci0KLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQmluZEZvbnQoZ0ZvbnRNb25vKTsKLSAgICBpZiAoYW5pc29Nb2RlID09IDApIHsKLSAgICAgICAgcnNnRHJhd1RleHQoIkFuaXNvdHJvcGljIGZpbHRlcmluZyA4IiwgMTAsIDQwKTsKLSAgICB9IGVsc2UgaWYgKGFuaXNvTW9kZSA9PSAxKSB7Ci0gICAgICAgIHJzZ0RyYXdUZXh0KCJBbmlzb3Ryb3BpYyBmaWx0ZXJpbmcgMTUiLCAxMCwgNDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJzZ0RyYXdUZXh0KCJNaXBsaW5lYXIgZmlsdGVyaW5nIiwgMTAsIDQwKTsKLSAgICB9Ci19Ci0KLWludCByb290KHZvaWQpIHsKLQotICAgIGdEdCA9IHJzR2V0RHQoKTsKLQotICAgIHJzZ0NsZWFyQ29sb3IoMC4yZiwgMC4yZiwgMC4yZiwgMC4wZik7Ci0gICAgcnNnQ2xlYXJEZXB0aCgxLjBmKTsKLQotICAgIHN3aXRjaCAoZ0Rpc3BsYXlNb2RlKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBkaXNwbGF5Rm9udFNhbXBsZXMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgICBkaXNwbGF5U2hhZGVyU2FtcGxlcygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIGRpc3BsYXlCbGVuZGluZ1NhbXBsZXMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBkaXNwbGF5TWVzaFNhbXBsZXMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBkaXNwbGF5VGV4dHVyZVNhbXBsZXJzKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNToKLSAgICAgICAgZGlzcGxheUN1bGxpbmdTYW1wbGVzKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNjoKLSAgICAgICAgZGlzcGxheUN1c3RvbVNoYWRlclNhbXBsZXMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA3OgotICAgICAgICBkaXNwbGF5TXVsdGl0ZXh0dXJlU2FtcGxlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODoKLSAgICAgICAgZGlzcGxheUFuaXNvU2FtcGxlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgOToKLSAgICAgICAgZGlzcGxheUN1c3RvbVNoYWRlclNhbXBsZXMyKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMTA6Ci0gICAgICAgIGRpc3BsYXlDdWJlbWFwU2hhZGVyU2FtcGxlKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAxMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01pc2NTYW1wbGVzL3NyYy9jb20vZXhhbXBsZS9hbmRyb2lkL3JzL21pc2NzYW1wbGVzL3NoYWRlcl9kZWYucnNoIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvc2hhZGVyX2RlZi5yc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4Y2YzNjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTWlzY1NhbXBsZXMvc3JjL2NvbS9leGFtcGxlL2FuZHJvaWQvcnMvbWlzY3NhbXBsZXMvc2hhZGVyX2RlZi5yc2gKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmV4YW1wbGUuYW5kcm9pZC5ycy5taXNjc2FtcGxlcykKLQotdHlwZWRlZiBzdHJ1Y3QgVmVydGV4U2hhZGVyQ29uc3RhbnRzX3MgewotICAgIHJzX21hdHJpeDR4NCBtb2RlbDsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdDQgbGlnaHQwX1Bvc2lzaW9uOwotICAgIGZsb2F0IGxpZ2h0MF9EaWZmdXNlOwotICAgIGZsb2F0IGxpZ2h0MF9TcGVjdWxhcjsKLSAgICBmbG9hdCBsaWdodDBfQ29zaW5lUG93ZXI7Ci0KLSAgICBmbG9hdDQgbGlnaHQxX1Bvc2lzaW9uOwotICAgIGZsb2F0IGxpZ2h0MV9EaWZmdXNlOwotICAgIGZsb2F0IGxpZ2h0MV9TcGVjdWxhcjsKLSAgICBmbG9hdCBsaWdodDFfQ29zaW5lUG93ZXI7Ci19IFZlcnRleFNoYWRlckNvbnN0YW50czsKLQotdHlwZWRlZiBzdHJ1Y3QgVmVydGV4U2hhZGVyQ29uc3RhbnRzMl9zIHsKLSAgICByc19tYXRyaXg0eDQgbW9kZWxbMl07Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgZmxvYXQ0IGxpZ2h0X1Bvc2lzaW9uWzJdOwotICAgIGZsb2F0IGxpZ2h0X0RpZmZ1c2VbMl07Ci0gICAgZmxvYXQgbGlnaHRfU3BlY3VsYXJbMl07Ci0gICAgZmxvYXQgbGlnaHRfQ29zaW5lUG93ZXJbMl07Ci19IFZlcnRleFNoYWRlckNvbnN0YW50czI7Ci0KLXR5cGVkZWYgc3RydWN0IFZlcnRleFNoYWRlckNvbnN0YW50czNfcyB7Ci0gICAgcnNfbWF0cml4NHg0IG1vZGVsOwotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIGZsb2F0IHRpbWU7Ci19IFZlcnRleFNoYWRlckNvbnN0YW50czM7Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgRnJhZ2VudFNoYWRlckNvbnN0YW50c19zIHsKLSAgICBmbG9hdDQgbGlnaHQwX0RpZmZ1c2VDb2xvcjsKLSAgICBmbG9hdDQgbGlnaHQwX1NwZWN1bGFyQ29sb3I7Ci0KLSAgICBmbG9hdDQgbGlnaHQxX0RpZmZ1c2VDb2xvcjsKLSAgICBmbG9hdDQgbGlnaHQxX1NwZWN1bGFyQ29sb3I7Ci19IEZyYWdlbnRTaGFkZXJDb25zdGFudHM7Ci0KLXR5cGVkZWYgc3RydWN0IEZyYWdlbnRTaGFkZXJDb25zdGFudHMyX3MgewotICAgIGZsb2F0NCBsaWdodF9EaWZmdXNlQ29sb3JbMl07Ci0gICAgZmxvYXQ0IGxpZ2h0X1NwZWN1bGFyQ29sb3JbMl07Ci19IEZyYWdlbnRTaGFkZXJDb25zdGFudHMyOwotCi10eXBlZGVmIHN0cnVjdCBGcmFnZW50U2hhZGVyQ29uc3RhbnRzM19zIHsKLSAgICBmbG9hdDQgbGlnaHQwX0RpZmZ1c2VDb2xvcjsKLSAgICBmbG9hdDQgbGlnaHQwX1NwZWN1bGFyQ29sb3I7Ci0gICAgZmxvYXQ0IGxpZ2h0MF9Qb3Npc2lvbjsKLSAgICBmbG9hdCBsaWdodDBfRGlmZnVzZTsKLSAgICBmbG9hdCBsaWdodDBfU3BlY3VsYXI7Ci0gICAgZmxvYXQgbGlnaHQwX0Nvc2luZVBvd2VyOwotCi0gICAgZmxvYXQ0IGxpZ2h0MV9EaWZmdXNlQ29sb3I7Ci0gICAgZmxvYXQ0IGxpZ2h0MV9TcGVjdWxhckNvbG9yOwotICAgIGZsb2F0NCBsaWdodDFfUG9zaXNpb247Ci0gICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2U7Ci0gICAgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotICAgIGZsb2F0IGxpZ2h0MV9Db3NpbmVQb3dlcjsKLX0gRnJhZ2VudFNoYWRlckNvbnN0YW50czM7Ci0KLXR5cGVkZWYgc3RydWN0IFZlcnRleFNoYWRlcklucHV0c19zIHsKLSAgICBmbG9hdDQgcG9zaXRpb247Ci0gICAgZmxvYXQzIG5vcm1hbDsKLSAgICBmbG9hdDIgdGV4dHVyZTA7Ci19IFZlcnRleFNoYWRlcklucHV0czsKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvQW5kcm9pZC5tayBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NzI0Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpICQoY2FsbCBhbGwtcmVuZGVyc2NyaXB0LWZpbGVzLXVuZGVyLCBzcmMpCi0jTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQucmVuZGVyc2NyaXB0Ci0KLUxPQ0FMX1NES19WRVJTSU9OIDo9IDE3Ci0KLUxPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBNb2RlbFZpZXdlcgotCi1pbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9BbmRyb2lkTWFuaWZlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2VjNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC5tb2RlbHZpZXdlciI+Ci0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9Ik1vZGVsVmlld2VyIj4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iU2ltcGxlTW9kZWwiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJTaW1wbGVNb2RlbCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6c2NyZWVuT3JpZW50YXRpb249Im5vc2Vuc29yIj4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQTNEU2VsZWN0b3IiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJBM0RTZWxlY3RvciIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6aGFyZHdhcmVBY2NlbGVyYXRlZD0idHJ1ZSI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNjZW5lR3JhcGgiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJTY2VuZUdyYXBoIgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuQmxhY2suTm9UaXRsZUJhciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLTwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9yZXMvZHJhd2FibGUtbm9kcGkvcm9ib3QucG5nIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczNTNmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9yZXMvZHJhd2FibGUtbm9kcGkvcm9ib3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvcmVzL21lbnUvbG9hZGVyX21lbnUueG1sIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvcmVzL21lbnUvbG9hZGVyX21lbnUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg3NTljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3Jlcy9tZW51L2xvYWRlcl9tZW51LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKgotKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoKLSogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoKLSogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0tLT4KLQotPG1lbnUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbSBhbmRyb2lkOmlkPSJAK2lkL2xvYWRfbW9kZWwiCi0gICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9sb2FkX21vZGVsIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvZGlzcGxheV9vcHRpb25zIgotICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvZGlzcGxheV9vcHRpb25zIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvc2Vuc29yIgotICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvc2Vuc29yIiAvPgotPC9tZW51PgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvcmVzL3Jhdy9yb2JvdC5hM2QgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9yZXMvcmF3L3JvYm90LmEzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ4ODk1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9yZXMvcmF3L3JvYm90LmEzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWM4ZjIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotLyoKLSogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoKLSogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qCi0qICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJsb2FkX21vZGVsIj5Mb2FkIE1vZGVsPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNwbGF5X29wdGlvbnMiPkRpc3BsYXkgT3B0aW9uczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2Vuc29yIj5Ub2dnbGUgU2Vuc29yPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9BM0RTZWxlY3Rvci5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL0EzRFNlbGVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMjAwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL0EzRFNlbGVjdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubW9kZWx2aWV3ZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5MaXN0QWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQXJyYXlBZGFwdGVyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotCi0vKioKLSAqIEEgbGlzdCB2aWV3IHdoZXJlIHRoZSBsYXN0IGl0ZW0gdGhlIHVzZXIgY2xpY2tlZCBpcyBwbGFjZWQgaW4KLSAqIHRoZSAiYWN0aXZhdGVkIiBzdGF0ZSwgY2F1c2luZyBpdHMgYmFja2dyb3VuZCB0byBoaWdobGlnaHQuCi0gKi8KLXB1YmxpYyBjbGFzcyBBM0RTZWxlY3RvciBleHRlbmRzIExpc3RBY3Rpdml0eSB7Ci0KLSAgICBGaWxlW10gbUN1cnJlbnRTdWJMaXN0OwotICAgIEZpbGUgbUN1cnJlbnRGaWxlOwotCi0gICAgY2xhc3MgQTNERmlsdGVyIGltcGxlbWVudHMgRmlsZUZpbHRlciB7Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGFjY2VwdChGaWxlIGZpbGUpIHsKLSAgICAgICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLmEzZCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHBvcHVsYXRlTGlzdChGaWxlIGZpbGUpIHsKLQotICAgICAgICBtQ3VycmVudEZpbGUgPSBmaWxlOwotICAgICAgICBzZXRUaXRsZShtQ3VycmVudEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiLyouYTNkIik7Ci0gICAgICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBuYW1lcy5hZGQoIi4uIik7Ci0KLSAgICAgICAgbUN1cnJlbnRTdWJMaXN0ID0gbUN1cnJlbnRGaWxlLmxpc3RGaWxlcyhuZXcgQTNERmlsdGVyKCkpOwotCi0gICAgICAgIGlmIChtQ3VycmVudFN1Ykxpc3QgIT0gbnVsbCkgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ3VycmVudFN1Ykxpc3QubGVuZ3RoOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbUN1cnJlbnRTdWJMaXN0W2ldLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRTdWJMaXN0W2ldLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSAiLyIgKyBmaWxlTmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZXMuYWRkKGZpbGVOYW1lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSB0aGUgYnVpbHQtaW4gbGF5b3V0IGZvciBzaG93aW5nIGEgbGlzdCBpdGVtIHdpdGggYSBzaW5nbGUKLSAgICAgICAgLy8gbGluZSBvZiB0ZXh0IHdob3NlIGJhY2tncm91bmQgaXMgY2hhbmdlcyB3aGVuIGFjdGl2YXRlZC4KLSAgICAgICAgc2V0TGlzdEFkYXB0ZXIobmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KHRoaXMsCi0gICAgICAgICAgICAgICAgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfbGlzdF9pdGVtX2FjdGl2YXRlZF8xLCBuYW1lcykpOwotICAgICAgICBnZXRMaXN0VmlldygpLnNldFRleHRGaWx0ZXJFbmFibGVkKHRydWUpOwotCi0gICAgICAgIC8vIFRlbGwgdGhlIGxpc3QgdmlldyB0byBzaG93IG9uZSBjaGVja2VkL2FjdGl2YXRlZCBpdGVtIGF0IGEgdGltZS4KLSAgICAgICAgZ2V0TGlzdFZpZXcoKS5zZXRDaG9pY2VNb2RlKExpc3RWaWV3LkNIT0lDRV9NT0RFX1NJTkdMRSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgICAgIHBvcHVsYXRlTGlzdChuZXcgRmlsZSgiL3NkY2FyZC8iKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25MaXN0SXRlbUNsaWNrKExpc3RWaWV3IGwsIFZpZXcgdiwgaW50IHBvc2l0aW9uLCBsb25nIGlkKSB7Ci0gICAgICAgIGlmIChwb3NpdGlvbiA9PSAwKSB7Ci0gICAgICAgICAgICBGaWxlIHBhcmVudCA9IG1DdXJyZW50RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgICAgICAgICBpZiAocGFyZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3B1bGF0ZUxpc3QocGFyZW50KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBmaXJzdCB0aGluZyBpbiBsaXN0IGlzIHBhcmVudCBkaXJlY3RvcnkKLSAgICAgICAgRmlsZSBzZWxlY3RlZEZpbGUgPSBtQ3VycmVudFN1Ykxpc3RbcG9zaXRpb24gLSAxXTsKLSAgICAgICAgaWYgKHNlbGVjdGVkRmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBwb3B1bGF0ZUxpc3Qoc2VsZWN0ZWRGaWxlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEludGVudCByZXN1bHRJbnRlbnQgPSBuZXcgSW50ZW50KCk7Ci0gICAgICAgIHJlc3VsdEludGVudC5zZXREYXRhKFVyaS5mcm9tRmlsZShzZWxlY3RlZEZpbGUpKTsKLSAgICAgICAgc2V0UmVzdWx0KFJFU1VMVF9PSywgcmVzdWx0SW50ZW50KTsKLSAgICAgICAgZmluaXNoKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2NlbmVHcmFwaC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NjZW5lR3JhcGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljNGRjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2NlbmVHcmFwaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQubW9kZWx2aWV3ZXI7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuQ29uZmlndXJhdGlvbjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuU2V0dGluZ3MuU3lzdGVtOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotCi1pbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBTY2VuZUdyYXBoIGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJpdmF0ZSBTY2VuZUdyYXBoVmlldyBtVmlldzsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLQotICAgICAgICAvLyBDcmVhdGUgb3VyIFByZXZpZXcgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91cgotICAgICAgICAvLyBBY3Rpdml0eQotICAgICAgICBtVmlldyA9IG5ldyBTY2VuZUdyYXBoVmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q29udGVudFZpZXcobVZpZXcpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICAgICAgbVZpZXcucmVzdW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKLSAgICAgICAgbVZpZXcucGF1c2UoKTsKLSAgICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NjZW5lR3JhcGhSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NjZW5lR3JhcGhSUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTFmMzFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9TY2VuZUdyYXBoUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tb2RlbHZpZXdlcjsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5CdWlsZGVyOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkZvbnQuU3R5bGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLXB1YmxpYyBjbGFzcyBTY2VuZUdyYXBoUlMgewotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgU1RBVEVfTEFTVF9GT0NVUyA9IDE7Ci0KLSAgICBpbnQgbVdpZHRoOwotICAgIGludCBtSGVpZ2h0OwotICAgIGludCBtUm90YXRpb247Ci0KLSAgICBwdWJsaWMgU2NlbmVHcmFwaFJTKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1Sb3RhdGlvbiA9IDA7Ci0gICAgICAgIGluaXRSUygpOwotICAgIH0KLQotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBTYW1wbGVyIG1TYW1wbGVyOwotICAgIHByaXZhdGUgUHJvZ3JhbVN0b3JlIG1QU0JhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVBGQmFja2dyb3VuZDsKLSAgICBwcml2YXRlIFByb2dyYW1WZXJ0ZXggbVBWQmFja2dyb3VuZDsKLSAgICBwcml2YXRlIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyBtUFZBOwotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1HcmlkSW1hZ2U7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1BbGxvY1BWOwotCi0gICAgcHJpdmF0ZSBNZXNoIG1NZXNoOwotCi0gICAgcHJpdmF0ZSBGb250IG1JdGFsaWM7Ci0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1UZXh0QWxsb2M7Ci0KLSAgICBwcml2YXRlIFNjcmlwdENfc2NlbmVncmFwaCBtU2NyaXB0OwotICAgIHByaXZhdGUgU2NyaXB0Q190cmFuc2Zvcm0gbVRyYW5zZm9ybVNjcmlwdDsKLQotICAgIGludCBtTGFzdFg7Ci0gICAgaW50IG1MYXN0WTsKLQotICAgIHB1YmxpYyB2b2lkIHRvdWNoRXZlbnQoaW50IHgsIGludCB5KSB7Ci0gICAgICAgIGludCBkeCA9IG1MYXN0WCAtIHg7Ci0gICAgICAgIGlmIChNYXRoLmFicyhkeCkgPiA1MCB8fCBNYXRoLmFicyhkeCkgPCAzKSB7Ci0gICAgICAgICAgICBkeCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBtUm90YXRpb24gLT0gZHg7Ci0gICAgICAgIGlmIChtUm90YXRpb24gPiAzNjApIHsKLSAgICAgICAgICAgIG1Sb3RhdGlvbiAtPSAzNjA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1Sb3RhdGlvbiA8IDApIHsKLSAgICAgICAgICAgIG1Sb3RhdGlvbiArPSAzNjA7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2NyaXB0LnNldF9nUm90YXRlKC0oZmxvYXQpbVJvdGF0aW9uKTsKLQotICAgICAgICBtTGFzdFggPSB4OwotICAgICAgICBtTGFzdFkgPSB5OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UEZTKCkgewotICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBiID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKG1SUyk7Ci0KLSAgICAgICAgYi5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5MRVNTKTsKLSAgICAgICAgYi5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYi5zZXREZXB0aE1hc2tFbmFibGVkKHRydWUpOwotICAgICAgICBtUFNCYWNrZ3JvdW5kID0gYi5jcmVhdGUoKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUEZTQmFja2dyb3VuZChtUFNCYWNrZ3JvdW5kKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFBGKCkgewotICAgICAgICBTYW1wbGVyLkJ1aWxkZXIgYnMgPSBuZXcgU2FtcGxlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGJzLnNldE1pbmlmaWNhdGlvbihTYW1wbGVyLlZhbHVlLkxJTkVBUik7Ci0gICAgICAgIGJzLnNldE1hZ25pZmljYXRpb24oU2FtcGxlci5WYWx1ZS5MSU5FQVIpOwotICAgICAgICBicy5zZXRXcmFwUyhTYW1wbGVyLlZhbHVlLkNMQU1QKTsKLSAgICAgICAgYnMuc2V0V3JhcFQoU2FtcGxlci5WYWx1ZS5DTEFNUCk7Ci0gICAgICAgIG1TYW1wbGVyID0gYnMuY3JlYXRlKCk7Ci0KLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0JBLCAwKTsKLSAgICAgICAgbVBGQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIG1QRkJhY2tncm91bmQuYmluZFNhbXBsZXIobVNhbXBsZXIsIDApOwotCi0gICAgICAgIG1TY3JpcHQuc2V0X2dQRkJhY2tncm91bmQobVBGQmFja2dyb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQVigpIHsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlciBwdmIgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBtUFZCYWNrZ3JvdW5kID0gcHZiLmNyZWF0ZSgpOwotCi0gICAgICAgIG1QVkEgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzKG1SUyk7Ci0gICAgICAgICgoUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24pbVBWQmFja2dyb3VuZCkuYmluZENvbnN0YW50cyhtUFZBKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUFZCYWNrZ3JvdW5kKG1QVkJhY2tncm91bmQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkSW1hZ2UoKSB7Ci0gICAgICAgIG1HcmlkSW1hZ2UgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIFIuZHJhd2FibGUucm9ib3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUR3JpZChtR3JpZEltYWdlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFRleHRBbGxvY2F0aW9uKCkgewotICAgICAgICBTdHJpbmcgYWxsb2NTdHJpbmcgPSAiRGlzcGxheWluZyBmaWxlOiBSLnJhdy5yb2JvdCI7Ci0gICAgICAgIG1UZXh0QWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLCBhbGxvY1N0cmluZywgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICBtU2NyaXB0LnNldF9nVGV4dEFsbG9jKG1UZXh0QWxsb2MpOwotICAgIH0KLQotICAgIFNnVHJhbnNmb3JtIG1Sb290VHJhbnNmb3JtOwotICAgIFNnVHJhbnNmb3JtIG1Hcm91cDE7Ci0KLSAgICBTZ1RyYW5zZm9ybSBtUm9ib3QxOwotICAgIFNnVHJhbnNmb3JtIG1Sb2JvdDI7Ci0KLSAgICB2b2lkIGluaXRUcmFuc2Zvcm1IaWVyYXJjaHkoKSB7Ci0gICAgICAgIG1Sb290VHJhbnNmb3JtID0gbmV3IFNnVHJhbnNmb3JtKG1SUyk7Ci0KLSAgICAgICAgbUdyb3VwMSA9IG5ldyBTZ1RyYW5zZm9ybShtUlMpOwotICAgICAgICBtUm9vdFRyYW5zZm9ybS5hZGRDaGlsZChtR3JvdXAxKTsKLQotICAgICAgICBtUm9ib3QxID0gbmV3IFNnVHJhbnNmb3JtKG1SUyk7Ci0gICAgICAgIG1Sb2JvdDIgPSBuZXcgU2dUcmFuc2Zvcm0obVJTKTsKLQotICAgICAgICBtR3JvdXAxLmFkZENoaWxkKG1Sb2JvdDEpOwotICAgICAgICBtR3JvdXAxLmFkZENoaWxkKG1Sb2JvdDIpOwotCi0gICAgICAgIG1Hcm91cDEuc2V0VHJhbnNmb3JtKDAsIG5ldyBGbG9hdDQoMC4wZiwgMC4wZiwgLTE1LjBmLCAwLjBmKSwgVHJhbnNmb3JtVHlwZS5UUkFOU0xBVEUpOwotICAgICAgICBtR3JvdXAxLnNldFRyYW5zZm9ybSgxLCBuZXcgRmxvYXQ0KDAuMGYsIDEuMGYsIDAuMGYsIDE1LjBmKSwgVHJhbnNmb3JtVHlwZS5ST1RBVEUpOwotCi0gICAgICAgIG1Sb2JvdDEuc2V0VHJhbnNmb3JtKDAsIG5ldyBGbG9hdDQoLTMuMGYsIC0wLjVmLCAwLjBmLCAwLjBmKSwgVHJhbnNmb3JtVHlwZS5UUkFOU0xBVEUpOwotICAgICAgICBtUm9ib3QxLnNldFRyYW5zZm9ybSgxLCBuZXcgRmxvYXQ0KDAuMGYsIDEuMGYsIDAuMGYsIDIwLjBmKSwgVHJhbnNmb3JtVHlwZS5ST1RBVEUpOwotICAgICAgICBtUm9ib3QxLnNldFRyYW5zZm9ybSgyLCBuZXcgRmxvYXQ0KDAuMmYsIDAuMmYsIDAuMmYsIDAuMGYpLCBUcmFuc2Zvcm1UeXBlLlNDQUxFKTsKLQotICAgICAgICBtUm9ib3QyLnNldFRyYW5zZm9ybSgwLCBuZXcgRmxvYXQ0KDMuMGYsIDAuMGYsIDAuMGYsIDAuMGYpLCBUcmFuc2Zvcm1UeXBlLlRSQU5TTEFURSk7Ci0gICAgICAgIG1Sb2JvdDIuc2V0VHJhbnNmb3JtKDEsIG5ldyBGbG9hdDQoMC4wZiwgMS4wZiwgMC4wZiwgLTIwLjBmKSwgVHJhbnNmb3JtVHlwZS5ST1RBVEUpOwotICAgICAgICBtUm9ib3QyLnNldFRyYW5zZm9ybSgyLCBuZXcgRmxvYXQ0KDAuM2YsIDAuM2YsIDAuM2YsIDAuMGYpLCBUcmFuc2Zvcm1UeXBlLlNDQUxFKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFJTKCkgewotCi0gICAgICAgIG1TY3JpcHQgPSBuZXcgU2NyaXB0Q19zY2VuZWdyYXBoKG1SUywgbVJlcywgUi5yYXcuc2NlbmVncmFwaCk7Ci0gICAgICAgIG1UcmFuc2Zvcm1TY3JpcHQgPSBuZXcgU2NyaXB0Q190cmFuc2Zvcm0obVJTLCBtUmVzLCBSLnJhdy50cmFuc2Zvcm0pOwotICAgICAgICBtVHJhbnNmb3JtU2NyaXB0LnNldF90cmFuc2Zvcm1TY3JpcHQobVRyYW5zZm9ybVNjcmlwdCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1RyYW5zZm9ybVJTKG1UcmFuc2Zvcm1TY3JpcHQpOwotCi0gICAgICAgIGluaXRQRlMoKTsKLSAgICAgICAgaW5pdFBGKCk7Ci0gICAgICAgIGluaXRQVigpOwotCi0gICAgICAgIGxvYWRJbWFnZSgpOwotCi0gICAgICAgIEZpbGVBM0QgbW9kZWwgPSBGaWxlQTNELmNyZWF0ZUZyb21SZXNvdXJjZShtUlMsIG1SZXMsIFIucmF3LnJvYm90KTsKLSAgICAgICAgRmlsZUEzRC5JbmRleEVudHJ5IGVudHJ5ID0gbW9kZWwuZ2V0SW5kZXhFbnRyeSgwKTsKLSAgICAgICAgaWYgKGVudHJ5ID09IG51bGwgfHwgZW50cnkuZ2V0RW50cnlUeXBlKCkgIT0gRmlsZUEzRC5FbnRyeVR5cGUuTUVTSCkgewotICAgICAgICAgICAgTG9nLmUoInJzIiwgImNvdWxkIG5vdCBsb2FkIG1vZGVsIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtTWVzaCA9IChNZXNoKWVudHJ5LmdldE9iamVjdCgpOwotICAgICAgICAgICAgbVNjcmlwdC5zZXRfZ1Rlc3RNZXNoKG1NZXNoKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1JdGFsaWMgPSBGb250LmNyZWF0ZShtUlMsIG1SZXMsICJzZXJpZiIsIEZvbnQuU3R5bGUuSVRBTElDLCA4KTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0l0YWxpYyhtSXRhbGljKTsKLQotICAgICAgICBpbml0VGV4dEFsbG9jYXRpb24oKTsKLQotICAgICAgICBpbml0VHJhbnNmb3JtSGllcmFyY2h5KCk7Ci0KLSAgICAgICAgbVNjcmlwdC5iaW5kX2dSb290Tm9kZShtUm9vdFRyYW5zZm9ybS5nZXRGaWVsZCgpKTsKLQotICAgICAgICBtU2NyaXB0LmJpbmRfZ0dyb3VwKG1Hcm91cDEubVBhcmVudC5tQ2hpbGRGaWVsZCk7Ci0gICAgICAgIG1TY3JpcHQuYmluZF9nUm9ib3QxKG1Sb2JvdDEubVBhcmVudC5tQ2hpbGRGaWVsZCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dSb2JvdDFJbmRleChtUm9ib3QxLm1JbmRleEluUGFyZW50R3JvdXApOwotICAgICAgICBtU2NyaXB0LmJpbmRfZ1JvYm90MihtUm9ib3QyLm1QYXJlbnQubUNoaWxkRmllbGQpOwotICAgICAgICBtU2NyaXB0LnNldF9nUm9ib3QySW5kZXgobVJvYm90Mi5tSW5kZXhJblBhcmVudEdyb3VwKTsKLQotICAgICAgICBtUlMuYmluZFJvb3RTY3JpcHQobVNjcmlwdCk7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NjZW5lR3JhcGhWaWV3LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2NlbmVHcmFwaFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI2YTNiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2NlbmVHcmFwaFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1vZGVsdmlld2VyOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmU7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQml0bWFwRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLQotcHVibGljIGNsYXNzIFNjZW5lR3JhcGhWaWV3IGV4dGVuZHMgUlNTdXJmYWNlVmlldyB7Ci0KLSAgICBwdWJsaWMgU2NlbmVHcmFwaFZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICAvL3NldEZvY3VzYWJsZSh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBwcml2YXRlIFNjZW5lR3JhcGhSUyBtUmVuZGVyOwotCi0KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN1cGVyLnN1cmZhY2VDaGFuZ2VkKGhvbGRlciwgZm9ybWF0LCB3LCBoKTsKLSAgICAgICAgaWYgKG1SUyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjID0gbmV3IFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcoKTsKLSAgICAgICAgICAgIHNjLnNldERlcHRoKDE2LCAyNCk7Ci0gICAgICAgICAgICBtUlMgPSBjcmVhdGVSZW5kZXJTY3JpcHRHTChzYyk7Ci0gICAgICAgICAgICBtUlMuc2V0U3VyZmFjZShob2xkZXIsIHcsIGgpOwotICAgICAgICAgICAgbVJlbmRlciA9IG5ldyBTY2VuZUdyYXBoUlMoKTsKLSAgICAgICAgICAgIG1SZW5kZXIuaW5pdChtUlMsIGdldFJlc291cmNlcygpLCB3LCBoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SUyA9IG51bGw7Ci0gICAgICAgICAgICBkZXN0cm95UmVuZGVyU2NyaXB0R0woKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uS2V5RG93bihpbnQga2V5Q29kZSwgS2V5RXZlbnQgZXZlbnQpCi0gICAgewotICAgICAgICAvLyBicmVhayBwb2ludCBhdCBoZXJlCi0gICAgICAgIC8vIHRoaXMgbWV0aG9kIGRvZXNuJ3Qgd29yayB3aGVuICdleHRlbmRzIFZpZXcnIGluY2x1ZGUgJ2V4dGVuZHMgU2Nyb2xsVmlldycuCi0gICAgICAgIHJldHVybiBzdXBlci5vbktleURvd24oa2V5Q29kZSwgZXZlbnQpOwotICAgIH0KLQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2KQotICAgIHsKLSAgICAgICAgYm9vbGVhbiByZXQgPSB0cnVlOwotICAgICAgICBpbnQgYWN0ID0gZXYuZ2V0QWN0aW9uKCk7Ci0gICAgICAgIGlmIChhY3QgPT0gZXYuQUNUSU9OX1VQKSB7Ci0gICAgICAgICAgICByZXQgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1SZW5kZXIudG91Y2hFdmVudCgoaW50KWV2LmdldFgoKSwgKGludClldi5nZXRZKCkpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLX0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2dUcmFuc2Zvcm0uamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9TZ1RyYW5zZm9ybS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ4NGUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9TZ1RyYW5zZm9ybS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1vZGVsdmlld2VyOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkJ1aWxkZXI7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1lbnVtIFRyYW5zZm9ybVR5cGUgewotCi0gICAgTk9ORSgwKSwKLSAgICBUUkFOU0xBVEUoMSksCi0gICAgUk9UQVRFKDIpLAotICAgIFNDQUxFKDMpOwotCi0gICAgaW50IG1JRDsKLSAgICBUcmFuc2Zvcm1UeXBlKGludCBpZCkgewotICAgICAgICBtSUQgPSBpZDsKLSAgICB9Ci19Ci0KLXB1YmxpYyBjbGFzcyBTZ1RyYW5zZm9ybSB7Ci0KLQotICAgIFNjcmlwdEZpZWxkX1NnVHJhbnNmb3JtIG1UcmFuc2Zvcm1GaWVsZDsKLSAgICBTY3JpcHRGaWVsZF9TZ1RyYW5zZm9ybSBtQ2hpbGRGaWVsZDsKLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0uSXRlbSBtVHJhbnNmb3JtRGF0YTsKLQotICAgIFJlbmRlclNjcmlwdCBtUlM7Ci0KLSAgICBWZWN0b3IgbUNoaWxkcmVuOwotICAgIFNnVHJhbnNmb3JtIG1QYXJlbnQ7Ci0gICAgaW50IG1JbmRleEluUGFyZW50R3JvdXA7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoU2dUcmFuc2Zvcm0gcGFyZW50LCBpbnQgcGFyZW50SW5kZXgpIHsKLSAgICAgICAgbVBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgbUluZGV4SW5QYXJlbnRHcm91cCA9IHBhcmVudEluZGV4OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZENoaWxkKFNnVHJhbnNmb3JtIGNoaWxkKSB7Ci0gICAgICAgIG1DaGlsZHJlbi5hZGQoY2hpbGQpOwotICAgICAgICBjaGlsZC5zZXRQYXJlbnQodGhpcywgbUNoaWxkcmVuLnNpemUoKSAtIDEpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybShpbnQgaW5kZXgsIEZsb2F0NCB2YWx1ZSwgVHJhbnNmb3JtVHlwZSB0eXBlKSB7Ci0gICAgICAgIG1UcmFuc2Zvcm1EYXRhLnRyYW5zZm9ybXNbaW5kZXhdID0gdmFsdWU7Ci0gICAgICAgIG1UcmFuc2Zvcm1EYXRhLnRyYW5zZm9ybVR5cGVzW2luZGV4XSA9IHR5cGUubUlEOwotICAgIH0KLQotICAgIHZvaWQgaW5pdERhdGEoKSB7Ci0gICAgICAgIGludCBudW1FbGVtZW50cyA9IG1UcmFuc2Zvcm1EYXRhLnRyYW5zZm9ybXMubGVuZ3RoOwotICAgICAgICBtVHJhbnNmb3JtRGF0YS50cmFuc2Zvcm1UeXBlcyA9IG5ldyBpbnRbbnVtRWxlbWVudHNdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpICsrKSB7Ci0gICAgICAgICAgICBtVHJhbnNmb3JtRGF0YS50cmFuc2Zvcm1zW2ldID0gbmV3IEZsb2F0NCgwLCAwLCAwLCAwKTsKLSAgICAgICAgICAgIG1UcmFuc2Zvcm1EYXRhLnRyYW5zZm9ybVR5cGVzW2ldID0gVHJhbnNmb3JtVHlwZS5OT05FLm1JRDsKLSAgICAgICAgfQotCi0gICAgICAgIG1UcmFuc2Zvcm1EYXRhLmlzRGlydHkgPSAxOwotICAgICAgICBtVHJhbnNmb3JtRGF0YS5jaGlsZHJlbiA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNnVHJhbnNmb3JtKFJlbmRlclNjcmlwdCBycykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVRyYW5zZm9ybURhdGEgPSBuZXcgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0uSXRlbSgpOwotICAgICAgICBtQ2hpbGRyZW4gPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIGluaXREYXRhKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjcmlwdEZpZWxkX1NnVHJhbnNmb3JtLkl0ZW0gZ2V0RGF0YSgpIHsKLSAgICAgICAgaWYgKG1DaGlsZHJlbi5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgbUNoaWxkRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0obVJTLCBtQ2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIG1UcmFuc2Zvcm1EYXRhLmNoaWxkcmVuID0gbUNoaWxkRmllbGQuZ2V0QWxsb2NhdGlvbigpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1DaGlsZHJlbi5zaXplKCk7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBTZ1RyYW5zZm9ybSBjaGlsZCA9IChTZ1RyYW5zZm9ybSltQ2hpbGRyZW4uZ2V0KGkpOwotICAgICAgICAgICAgICAgIG1DaGlsZEZpZWxkLnNldChjaGlsZC5nZXREYXRhKCksIGksIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1DaGlsZEZpZWxkLmNvcHlBbGwoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtVHJhbnNmb3JtRGF0YTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0gZ2V0RmllbGQoKSB7Ci0gICAgICAgIG1UcmFuc2Zvcm1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9TZ1RyYW5zZm9ybShtUlMsIDEpOwotICAgICAgICBtVHJhbnNmb3JtRmllbGQuc2V0KGdldERhdGEoKSwgMCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmllbGQ7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NpbXBsZU1vZGVsLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2ltcGxlTW9kZWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIyOWZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2ltcGxlTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tb2RlbHZpZXdlcjsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlN5c3RlbTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLQotaW1wb3J0IGphdmEubGFuZy5SdW50aW1lOwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlTW9kZWwgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIFNpbXBsZU1vZGVsVmlldyBtVmlldzsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLQotICAgICAgICAvLyBDcmVhdGUgb3VyIFByZXZpZXcgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91cgotICAgICAgICAvLyBBY3Rpdml0eQotICAgICAgICBtVmlldyA9IG5ldyBTaW1wbGVNb2RlbFZpZXcodGhpcyk7Ci0gICAgICAgIHNldENvbnRlbnRWaWV3KG1WaWV3KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgICAgIG1WaWV3LnJlc3VtZSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgYSBnYW1lIHNob3VsZCBpbXBsZW1lbnQgb25SZXN1bWUoKSBhbmQgb25QYXVzZSgpCi0gICAgICAgIC8vIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIHdoZW4gdGhlIGFjdGl2aXR5IGxvb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgICAgIG1WaWV3LnBhdXNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKLSAgICAgICAgTWVudUluZmxhdGVyIGluZmxhdGVyID0gZ2V0TWVudUluZmxhdGVyKCk7Ci0gICAgICAgIGluZmxhdGVyLmluZmxhdGUoUi5tZW51LmxvYWRlcl9tZW51LCBtZW51KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICAgICAgLy8gSGFuZGxlIGl0ZW0gc2VsZWN0aW9uCi0gICAgICAgIHN3aXRjaCAoaXRlbS5nZXRJdGVtSWQoKSkgewotICAgICAgICBjYXNlIFIuaWQubG9hZF9tb2RlbDoKLSAgICAgICAgICAgIGxvYWRNb2RlbCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGNhc2UgUi5pZC5kaXNwbGF5X29wdGlvbnM6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBSLmlkLnNlbnNvcjoKLSAgICAgICAgICAgIG1WaWV3LnRvZ2dsZVNlbnNvcigpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIub25PcHRpb25zSXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJTkRfQTNEX01PREVMID0gMTA7Ci0gICAgcHVibGljIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgZGF0YSkgewotICAgICAgICBpZiAocmVzdWx0Q29kZSA9PSBSRVNVTFRfT0spIHsKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0Q29kZSA9PSBGSU5EX0EzRF9NT0RFTCkgewotICAgICAgICAgICAgICAgIFVyaSBzZWxlY3RlZEltYWdlVXJpID0gZGF0YS5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgTG9nLmUoIlNlbGVjdGVkIFBhdGg6ICIsIHNlbGVjdGVkSW1hZ2VVcmkuZ2V0UGF0aCgpKTsKLSAgICAgICAgICAgICAgICBtVmlldy5sb2FkQTNERmlsZShzZWxlY3RlZEltYWdlVXJpLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkTW9kZWwoKSB7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KCk7Ci0gICAgICAgIGludGVudC5zZXRBY3Rpb24oSW50ZW50LkFDVElPTl9QSUNLKTsKLSAgICAgICAgaW50ZW50LnNldENsYXNzTmFtZSgiY29tLmFuZHJvaWQubW9kZWx2aWV3ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5tb2RlbHZpZXdlci5BM0RTZWxlY3RvciIpOwotICAgICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KGludGVudCwgRklORF9BM0RfTU9ERUwpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2ltcGxlTW9kZWxSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NpbXBsZU1vZGVsUlMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhM2E5ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9Nb2RlbFZpZXdlci9zcmMvY29tL2FuZHJvaWQvbW9kZWx2aWV3ZXIvU2ltcGxlTW9kZWxSUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLm1vZGVsdmlld2VyOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5EZXB0aEZ1bmM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgU2ltcGxlTW9kZWxSUyB7Ci0KLSAgICBwdWJsaWMgU2ltcGxlTW9kZWxSUygpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBpbml0UlMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZCgpIHsKLSAgICAgICAgbVJTLmdldFdpZHRoKCk7Ci0gICAgICAgIG1SUy5nZXRIZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgU2FtcGxlciBtU2FtcGxlcjsKLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUFNCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1QRkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1QVkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMgbVBWQTsKLQotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtR3JpZEltYWdlOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtQWxsb2NQVjsKLQotICAgIHByaXZhdGUgRm9udCBtSXRhbGljOwotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBtVGV4dEFsbG9jOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9NZXNoSW5mbyBtTWVzaGVzOwotICAgIHByaXZhdGUgU2NyaXB0Q19zaW1wbGVtb2RlbCBtU2NyaXB0OwotCi0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbkRvd24oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25TY2FsZShmbG9hdCBzY2FsZSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvblNjYWxlKHNjYWxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbk1vdmUoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvbk1vdmUoeCwgeSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25Qb3N0dXJlQ2hhbmdlZChNYXRyaXg0ZiBwb3N0dXJlKSB7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dQb3N0dXJlTWF0cml4KHBvc3R1cmUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UEZTKCkgewotICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBiID0gbmV3IFByb2dyYW1TdG9yZS5CdWlsZGVyKG1SUyk7Ci0KLSAgICAgICAgYi5zZXREZXB0aEZ1bmMoUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYy5MRVNTKTsKLSAgICAgICAgYi5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYi5zZXREZXB0aE1hc2tFbmFibGVkKHRydWUpOwotICAgICAgICBtUFNCYWNrZ3JvdW5kID0gYi5jcmVhdGUoKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUEZTQmFja2dyb3VuZChtUFNCYWNrZ3JvdW5kKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFBGKCkgewotICAgICAgICBTYW1wbGVyLkJ1aWxkZXIgYnMgPSBuZXcgU2FtcGxlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGJzLnNldE1pbmlmaWNhdGlvbihTYW1wbGVyLlZhbHVlLkxJTkVBUik7Ci0gICAgICAgIGJzLnNldE1hZ25pZmljYXRpb24oU2FtcGxlci5WYWx1ZS5MSU5FQVIpOwotICAgICAgICBicy5zZXRXcmFwUyhTYW1wbGVyLlZhbHVlLkNMQU1QKTsKLSAgICAgICAgYnMuc2V0V3JhcFQoU2FtcGxlci5WYWx1ZS5DTEFNUCk7Ci0gICAgICAgIG1TYW1wbGVyID0gYnMuY3JlYXRlKCk7Ci0KLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0JBLCAwKTsKLSAgICAgICAgbVBGQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIG1QRkJhY2tncm91bmQuYmluZFNhbXBsZXIobVNhbXBsZXIsIDApOwotCi0gICAgICAgIG1TY3JpcHQuc2V0X2dQRkJhY2tncm91bmQobVBGQmFja2dyb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQVigpIHsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlciBwdmIgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBtUFZCYWNrZ3JvdW5kID0gcHZiLmNyZWF0ZSgpOwotCi0gICAgICAgIG1QVkEgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzKG1SUyk7Ci0gICAgICAgICgoUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24pbVBWQmFja2dyb3VuZCkuYmluZENvbnN0YW50cyhtUFZBKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUFZCYWNrZ3JvdW5kKG1QVkJhY2tncm91bmQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkSW1hZ2UoKSB7Ci0gICAgICAgIG1HcmlkSW1hZ2UgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIFIuZHJhd2FibGUucm9ib3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dUR3JpZChtR3JpZEltYWdlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFRleHRBbGxvY2F0aW9uKFN0cmluZyBmaWxlTmFtZSkgewotICAgICAgICBTdHJpbmcgYWxsb2NTdHJpbmcgPSAiRGlzcGxheWluZyBmaWxlOiAiICsgZmlsZU5hbWU7Ci0gICAgICAgIG1UZXh0QWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLCBhbGxvY1N0cmluZywgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICBtU2NyaXB0LnNldF9nVGV4dEFsbG9jKG1UZXh0QWxsb2MpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0TWVzaGVzKEZpbGVBM0QgbW9kZWwpIHsKLSAgICAgICAgaW50IG51bUVudHJpZXMgPSBtb2RlbC5nZXRJbmRleEVudHJ5Q291bnQoKTsKLSAgICAgICAgaW50IG51bU1lc2hlcyA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSArKykgewotICAgICAgICAgICAgRmlsZUEzRC5JbmRleEVudHJ5IGVudHJ5ID0gbW9kZWwuZ2V0SW5kZXhFbnRyeShpKTsKLSAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsICYmIGVudHJ5LmdldEVudHJ5VHlwZSgpID09IEZpbGVBM0QuRW50cnlUeXBlLk1FU0gpIHsKLSAgICAgICAgICAgICAgICBudW1NZXNoZXMgKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobnVtTWVzaGVzID4gMCkgewotICAgICAgICAgICAgbU1lc2hlcyA9IG5ldyBTY3JpcHRGaWVsZF9NZXNoSW5mbyhtUlMsIG51bU1lc2hlcyk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRW50cmllczsgaSArKykgewotICAgICAgICAgICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwgJiYgZW50cnkuZ2V0RW50cnlUeXBlKCkgPT0gRmlsZUEzRC5FbnRyeVR5cGUuTUVTSCkgewotICAgICAgICAgICAgICAgICAgICBNZXNoIG1lc2ggPSBlbnRyeS5nZXRNZXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1NZXNoZXMuc2V0X21NZXNoKGksIG1lc2gsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgbU1lc2hlcy5zZXRfbU51bUluZGV4U2V0cyhpLCBtZXNoLmdldFByaW1pdGl2ZUNvdW50KCksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtTWVzaGVzLmNvcHlBbGwoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIk5vIHZhbGlkIG1lc2hlcyBpbiBmaWxlIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtU2NyaXB0LmJpbmRfZ01lc2hlcyhtTWVzaGVzKTsKLSAgICAgICAgbVNjcmlwdC5pbnZva2VfdXBkYXRlTWVzaEluZm8oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkQTNERmlsZShTdHJpbmcgcGF0aCkgewotICAgICAgICBGaWxlQTNEIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tRmlsZShtUlMsIHBhdGgpOwotICAgICAgICBpbml0TWVzaGVzKG1vZGVsKTsKLSAgICAgICAgaW5pdFRleHRBbGxvY2F0aW9uKHBhdGgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UlMoKSB7Ci0KLSAgICAgICAgbVNjcmlwdCA9IG5ldyBTY3JpcHRDX3NpbXBsZW1vZGVsKG1SUywgbVJlcywgUi5yYXcuc2ltcGxlbW9kZWwpOwotCi0gICAgICAgIGluaXRQRlMoKTsKLSAgICAgICAgaW5pdFBGKCk7Ci0gICAgICAgIGluaXRQVigpOwotCi0gICAgICAgIGxvYWRJbWFnZSgpOwotCi0gICAgICAgIEZpbGVBM0QgbW9kZWwgPSBGaWxlQTNELmNyZWF0ZUZyb21SZXNvdXJjZShtUlMsIG1SZXMsIFIucmF3LnJvYm90KTsKLSAgICAgICAgaW5pdE1lc2hlcyhtb2RlbCk7Ci0KLSAgICAgICAgbUl0YWxpYyA9IEZvbnQuY3JlYXRlKG1SUywgbVJlcywgInNlcmlmIiwgRm9udC5TdHlsZS5JVEFMSUMsIDgpOwotICAgICAgICBtU2NyaXB0LnNldF9nSXRhbGljKG1JdGFsaWMpOwotCi0gICAgICAgIGluaXRUZXh0QWxsb2NhdGlvbigiUi5yYXcucm9ib3QiKTsKLQotICAgICAgICBtUlMuYmluZFJvb3RTY3JpcHQobVNjcmlwdCk7Ci0gICAgfQotfQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NpbXBsZU1vZGVsVmlldy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL1NpbXBsZU1vZGVsVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yjc4MzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9TaW1wbGVNb2RlbFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5tb2RlbHZpZXdlcjsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvckV2ZW50OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuU2Vuc29yRXZlbnRMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1vdGlvbkV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TY2FsZUdlc3R1cmVEZXRlY3RvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlTW9kZWxWaWV3IGV4dGVuZHMgUlNTdXJmYWNlVmlldyBpbXBsZW1lbnRzIFNlbnNvckV2ZW50TGlzdGVuZXIgewotCi0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBTaW1wbGVNb2RlbFJTIG1SZW5kZXI7Ci0KLSAgICBwcml2YXRlIFNjYWxlR2VzdHVyZURldGVjdG9yIG1TY2FsZURldGVjdG9yOwotCi0gICAgcHJpdmF0ZSBTZW5zb3JNYW5hZ2VyIG1TZW5zb3JNYW5hZ2VyOwotICAgIHByaXZhdGUgU2Vuc29yIG1Sb3RhdGlvblZlY3RvclNlbnNvcjsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gbVJvdGF0aW9uTWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX1BPSU5URVJfSUQgPSAtMTsKLSAgICBwcml2YXRlIGludCBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotICAgIHByaXZhdGUgYm9vbGVhbiBtVXNlU2Vuc29yID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBNYXRyaXg0ZiBtSWRlbnRpdHlNYXRyaXggPSBuZXcgTWF0cml4NGYoKTsKLQotICAgIHB1YmxpYyBTaW1wbGVNb2RlbFZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICAgICAgbVNjYWxlRGV0ZWN0b3IgPSBuZXcgU2NhbGVHZXN0dXJlRGV0ZWN0b3IoY29udGV4dCwgbmV3IFNjYWxlTGlzdGVuZXIoKSk7Ci0gICAgICAgIC8vIEdldCBhbiBpbnN0YW5jZSBvZiB0aGUgU2Vuc29yTWFuYWdlcgotICAgICAgICBtU2Vuc29yTWFuYWdlciA9IChTZW5zb3JNYW5hZ2VyKWdldENvbnRleHQoKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuU0VOU09SX1NFUlZJQ0UpOwotICAgICAgICAvLyBmaW5kIHRoZSByb3RhdGlvbi12ZWN0b3Igc2Vuc29yCi0gICAgICAgIG1Sb3RhdGlvblZlY3RvclNlbnNvciA9IG1TZW5zb3JNYW5hZ2VyLmdldERlZmF1bHRTZW5zb3IoCi0gICAgICAgICAgICAgICAgU2Vuc29yLlRZUEVfUk9UQVRJT05fVkVDVE9SKTsKLSAgICAgICAgbUlkZW50aXR5TWF0cml4LmxvYWRJZGVudGl0eSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVSZW5kZXJTY3JpcHQoKSB7Ci0gICAgICAgIGlmIChtUlMgPT0gbnVsbCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZyBzYyA9IG5ldyBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnKCk7Ci0gICAgICAgICAgICBzYy5zZXREZXB0aCgxNiwgMjQpOwotICAgICAgICAgICAgbVJTID0gY3JlYXRlUmVuZGVyU2NyaXB0R0woc2MpOwotICAgICAgICAgICAgbVJlbmRlciA9IG5ldyBTaW1wbGVNb2RlbFJTKCk7Ci0gICAgICAgICAgICBtUmVuZGVyLmluaXQobVJTLCBnZXRSZXNvdXJjZXMoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZXN1bWUoKSB7Ci0gICAgICAgIG1TZW5zb3JNYW5hZ2VyLnJlZ2lzdGVyTGlzdGVuZXIodGhpcywgbVJvdGF0aW9uVmVjdG9yU2Vuc29yLCAxMDAwMCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcGF1c2UoKSB7Ci0gICAgICAgIG1TZW5zb3JNYW5hZ2VyLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkF0dGFjaGVkVG9XaW5kb3coKSB7Ci0gICAgICAgIHN1cGVyLm9uQXR0YWNoZWRUb1dpbmRvdygpOwotICAgICAgICBlbnN1cmVSZW5kZXJTY3JpcHQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN1cGVyLnN1cmZhY2VDaGFuZ2VkKGhvbGRlciwgZm9ybWF0LCB3LCBoKTsKLSAgICAgICAgbVJlbmRlci5zdXJmYWNlQ2hhbmdlZCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBtUmVuZGVyID0gbnVsbDsKLSAgICAgICAgaWYgKG1SUyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUlMgPSBudWxsOwotICAgICAgICAgICAgZGVzdHJveVJlbmRlclNjcmlwdEdMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkQTNERmlsZShTdHJpbmcgcGF0aCkgewotICAgICAgICBtUmVuZGVyLmxvYWRBM0RGaWxlKHBhdGgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldikgewotICAgICAgICBtU2NhbGVEZXRlY3Rvci5vblRvdWNoRXZlbnQoZXYpOwotCi0gICAgICAgIGJvb2xlYW4gcmV0ID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0IHggPSBldi5nZXRYKCk7Ci0gICAgICAgIGZsb2F0IHkgPSBldi5nZXRZKCk7Ci0KLSAgICAgICAgZmluYWwgaW50IGFjdGlvbiA9IGV2LmdldEFjdGlvbigpOwotCi0gICAgICAgIHN3aXRjaCAoYWN0aW9uICYgTW90aW9uRXZlbnQuQUNUSU9OX01BU0spIHsKLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjogewotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKDApOwotICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX01PVkU6IHsKLSAgICAgICAgICAgIGlmICghbVNjYWxlRGV0ZWN0b3IuaXNJblByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uTW92ZSh4LCB5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKHgsIHkpOwotICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fVVA6IHsKLSAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBJTlZBTElEX1BPSU5URVJfSUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTDogewotICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IElOVkFMSURfUE9JTlRFUl9JRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9VUDogewotICAgICAgICAgICAgZmluYWwgaW50IHBvaW50ZXJJbmRleCA9IChldi5nZXRBY3Rpb24oKSAmIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0lOREVYX01BU0spCi0gICAgICAgICAgICAgICAgICAgID4+IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0lOREVYX1NISUZUOwotICAgICAgICAgICAgZmluYWwgaW50IHBvaW50ZXJJZCA9IGV2LmdldFBvaW50ZXJJZChwb2ludGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKHBvaW50ZXJJZCA9PSBtQWN0aXZlUG9pbnRlcklkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3YXMgb3VyIGFjdGl2ZSBwb2ludGVyIGdvaW5nIHVwLiBDaG9vc2UgYSBuZXcKLSAgICAgICAgICAgICAgICAvLyBhY3RpdmUgcG9pbnRlciBhbmQgYWRqdXN0IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGZpbmFsIGludCBuZXdQb2ludGVySW5kZXggPSBwb2ludGVySW5kZXggPT0gMCA/IDEgOiAwOwotICAgICAgICAgICAgICAgIHggPSBldi5nZXRYKG5ld1BvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgeSA9IGV2LmdldFkobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bih4LCB5KTsKLSAgICAgICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKG5ld1BvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFNjYWxlTGlzdGVuZXIgZXh0ZW5kcyBTY2FsZUdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPblNjYWxlR2VzdHVyZUxpc3RlbmVyIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uU2NhbGUoU2NhbGVHZXN0dXJlRGV0ZWN0b3IgZGV0ZWN0b3IpIHsKLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25TY2FsZShkZXRlY3Rvci5nZXRTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25TZW5zb3JDaGFuZ2VkKFNlbnNvckV2ZW50IGV2ZW50KSB7Ci0gICAgICAgIC8vIHdlIHJlY2VpdmVkIGEgc2Vuc29yIGV2ZW50LiBpdCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gY2hlY2sKLSAgICAgICAgLy8gdGhhdCB3ZSByZWNlaXZlZCB0aGUgcHJvcGVyIGV2ZW50Ci0gICAgICAgIGlmIChtVXNlU2Vuc29yKSB7Ci0gICAgICAgICAgICBpZiAoZXZlbnQuc2Vuc29yLmdldFR5cGUoKSA9PSBTZW5zb3IuVFlQRV9ST1RBVElPTl9WRUNUT1IpIHsKLSAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSByb3RhdGlvbi12ZWN0b3IgdG8gYSA0eDQgbWF0cml4LiB0aGUgbWF0cml4Ci0gICAgICAgICAgICAgICAgLy8gaXMgaW50ZXJwcmV0ZWQgYnkgT3BlbiBHTCBhcyB0aGUgaW52ZXJzZSBvZiB0aGUKLSAgICAgICAgICAgICAgICAvLyByb3RhdGlvbi12ZWN0b3IsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4KLSAgICAgICAgICAgICAgICBTZW5zb3JNYW5hZ2VyLmdldFJvdGF0aW9uTWF0cml4RnJvbVZlY3RvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Sb3RhdGlvbk1hdHJpeCAsIGV2ZW50LnZhbHVlcyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobVJlbmRlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1SZW5kZXIub25Qb3N0dXJlQ2hhbmdlZChuZXcgTWF0cml4NGYobVJvdGF0aW9uTWF0cml4KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY2N1cmFjeUNoYW5nZWQoU2Vuc29yIHNlbnNvciwgaW50IGFjY3VyYWN5KSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdG9nZ2xlU2Vuc29yKCkgewotICAgICAgICBtVXNlU2Vuc29yID0gIW1Vc2VTZW5zb3I7Ci0gICAgICAgIGlmIChtVXNlU2Vuc29yID09IGZhbHNlKSB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uUG9zdHVyZUNoYW5nZWQobUlkZW50aXR5TWF0cml4KTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9zY2VuZWdyYXBoLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3NjZW5lZ3JhcGgucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNWIxYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3NjZW5lZ3JhcGgucnMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQubW9kZWx2aWV3ZXIpCi0KLSNpbmNsdWRlICJyc19ncmFwaGljcy5yc2giCi0jaW5jbHVkZSAidHJhbnNmb3JtX2RlZi5yc2giCi0KLXJzX3Byb2dyYW1fdmVydGV4IGdQVkJhY2tncm91bmQ7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQRkJhY2tncm91bmQ7Ci0KLXJzX2FsbG9jYXRpb24gZ1RHcmlkOwotcnNfbWVzaCBnVGVzdE1lc2g7Ci0KLXJzX3Byb2dyYW1fc3RvcmUgZ1BGU0JhY2tncm91bmQ7Ci0KLWZsb2F0IGdSb3RhdGU7Ci0KLXJzX2ZvbnQgZ0l0YWxpYzsKLXJzX2FsbG9jYXRpb24gZ1RleHRBbGxvYzsKLQotcnNfc2NyaXB0IGdUcmFuc2Zvcm1SUzsKLQotU2dUcmFuc2Zvcm0gKmdHcm91cDsKLVNnVHJhbnNmb3JtICpnUm9ib3QxOwotaW50IGdSb2JvdDFJbmRleDsKLVNnVHJhbnNmb3JtICpnUm9ib3QyOwotaW50IGdSb2JvdDJJbmRleDsKLQotU2dUcmFuc2Zvcm0gKmdSb290Tm9kZTsKLQotdm9pZCBpbml0KCkgewotICAgIGdSb3RhdGUgPSAwLjBmOwotfQotCi1pbnQgcm9vdCh2b2lkKSB7Ci0KLSAgICBnR3JvdXAtPnRyYW5zZm9ybXNbMV0udyArPSAwLjVmOwotICAgIGdHcm91cC0+aXNEaXJ0eSA9IDE7Ci0KLSAgICBTZ1RyYW5zZm9ybSAqcm9ib3QxUHRyID0gZ1JvYm90MSArIGdSb2JvdDFJbmRleDsKLQotICAgIHJvYm90MVB0ci0+dHJhbnNmb3Jtc1sxXS53IC09IDEuNWY7Ci0gICAgcm9ib3QxUHRyLT5pc0RpcnR5ID0gMTsKLQotICAgIFNnVHJhbnNmb3JtICpyb2JvdDJQdHIgPSBnUm9ib3QyICsgZ1JvYm90MkluZGV4OwotICAgIHJvYm90MlB0ci0+dHJhbnNmb3Jtc1sxXS53ICs9IDIuNWY7Ci0gICAgcm9ib3QyUHRyLT5pc0RpcnR5ID0gMTsKLQotICAgIHJzRm9yRWFjaChnVHJhbnNmb3JtUlMsIGdSb290Tm9kZS0+Y2hpbGRyZW4sIGdSb290Tm9kZS0+Y2hpbGRyZW4pOwotCi0gICAgcnNnQ2xlYXJDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKTsKLSAgICByc2dDbGVhckRlcHRoKDEuMGYpOwotCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1BWQmFja2dyb3VuZCk7Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KXJzZ0dldFdpZHRoKCkgLyAoZmxvYXQpcnNnR2V0SGVpZ2h0KCk7Ci0gICAgcnNNYXRyaXhMb2FkUGVyc3BlY3RpdmUoJnByb2osIDMwLjBmLCBhc3BlY3QsIDAuMWYsIDEwMC4wZik7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1BGQmFja2dyb3VuZCk7Ci0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUEZTQmFja2dyb3VuZCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1BGQmFja2dyb3VuZCwgMCwgZ1RHcmlkKTsKLQotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJnJvYm90MVB0ci0+Z2xvYmFsTWF0KTsKLSAgICByc2dEcmF3TWVzaChnVGVzdE1lc2gpOwotCi0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmcm9ib3QyUHRyLT5nbG9iYWxNYXQpOwotICAgIHJzZ0RyYXdNZXNoKGdUZXN0TWVzaCk7Ci0KLSAgICAvL2NvbG9yKDAuM2YsIDAuM2YsIDAuM2YsIDEuMGYpOwotICAgIHJzZ0RyYXdUZXh0KCJSZW5kZXJzY3JpcHQgdHJhbnNmb3JtIHRlc3QiLCAzMCwgNjk1KTsKLQotICAgIHJzZ0JpbmRGb250KGdJdGFsaWMpOwotICAgIHJzZ0RyYXdUZXh0KGdUZXh0QWxsb2MsIDMwLCA3MzApOwotCi0gICAgcmV0dXJuIDEwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3NpbXBsZW1vZGVsLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3NpbXBsZW1vZGVsLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2RkNWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci9zaW1wbGVtb2RlbC5ycworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQubW9kZWx2aWV3ZXIpCi0KLSNpbmNsdWRlICJyc19ncmFwaGljcy5yc2giCi0KLXJzX3Byb2dyYW1fdmVydGV4IGdQVkJhY2tncm91bmQ7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQRkJhY2tncm91bmQ7Ci0KLXJzX2FsbG9jYXRpb24gZ1RHcmlkOwotCi1yc19wcm9ncmFtX3N0b3JlIGdQRlNCYWNrZ3JvdW5kOwotCi1yc19mb250IGdJdGFsaWM7Ci1yc19hbGxvY2F0aW9uIGdUZXh0QWxsb2M7Ci0KLXJzX21hdHJpeDR4NCBnUG9zdHVyZU1hdHJpeDsKLQotdHlwZWRlZiBzdHJ1Y3QgTWVzaEluZm8gewotICAgIHJzX21lc2ggbU1lc2g7Ci0gICAgaW50IG1OdW1JbmRleFNldHM7Ci0gICAgZmxvYXQzIGJCb3hNaW47Ci0gICAgZmxvYXQzIGJCb3hNYXg7Ci19IE1lc2hJbmZvX3Q7Ci0KLU1lc2hJbmZvX3QgKmdNZXNoZXM7Ci0KLXN0YXRpYyBmbG9hdDMgZ0xvb2tBdDsKLQotc3RhdGljIGZsb2F0IGdSb3RhdGVYOwotc3RhdGljIGZsb2F0IGdSb3RhdGVZOwotc3RhdGljIGZsb2F0IGdab29tOwotCi1zdGF0aWMgZmxvYXQgZ0xhc3RYOwotc3RhdGljIGZsb2F0IGdMYXN0WTsKLQotc3RhdGljIGZsb2F0MyB0b0Zsb2F0MyhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgZmxvYXQzIGY7Ci0gICAgZi54ID0geDsKLSAgICBmLnkgPSB5OwotICAgIGYueiA9IHo7Ci0gICAgcmV0dXJuIGY7Ci19Ci0KLXZvaWQgb25BY3Rpb25Eb3duKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBnTGFzdFggPSB4OwotICAgIGdMYXN0WSA9IHk7Ci19Ci0KLXZvaWQgb25BY3Rpb25TY2FsZShmbG9hdCBzY2FsZSkgewotCi0gICAgZ1pvb20gKj0gMS4wZiAvIHNjYWxlOwotICAgIGdab29tID0gbWF4KDAuMWYsIG1pbihnWm9vbSwgNTAwLjBmKSk7Ci19Ci0KLXZvaWQgb25BY3Rpb25Nb3ZlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBmbG9hdCBkeCA9IGdMYXN0WCAtIHg7Ci0gICAgZmxvYXQgZHkgPSBnTGFzdFkgLSB5OwotCi0gICAgaWYgKGZhYnMoZHkpIDw9IDIuMGYpIHsKLSAgICAgICAgZHkgPSAwLjBmOwotICAgIH0KLSAgICBpZiAoZmFicyhkeCkgPD0gMi4wZikgewotICAgICAgICBkeCA9IDAuMGY7Ci0gICAgfQotCi0gICAgZ1JvdGF0ZVkgLT0gZHg7Ci0gICAgaWYgKGdSb3RhdGVZID4gMzYwKSB7Ci0gICAgICAgIGdSb3RhdGVZIC09IDM2MDsKLSAgICB9Ci0gICAgaWYgKGdSb3RhdGVZIDwgMCkgewotICAgICAgICBnUm90YXRlWSArPSAzNjA7Ci0gICAgfQotCi0gICAgZ1JvdGF0ZVggLT0gZHk7Ci0gICAgZ1JvdGF0ZVggPSBtaW4oZ1JvdGF0ZVgsIDgwLjBmKTsKLSAgICBnUm90YXRlWCA9IG1heChnUm90YXRlWCwgLTgwLjBmKTsKLQotICAgIGdMYXN0WCA9IHg7Ci0gICAgZ0xhc3RZID0geTsKLX0KLQotdm9pZCBpbml0KCkgewotICAgIGdSb3RhdGVYID0gMC4wZjsKLSAgICBnUm90YXRlWSA9IDAuMGY7Ci0gICAgZ1pvb20gPSA1MC4wZjsKLSAgICBnTG9va0F0ID0gMC4wZjsKLSAgICByc01hdHJpeExvYWRJZGVudGl0eSgmZ1Bvc3R1cmVNYXRyaXgpOwotfQotCi12b2lkIHVwZGF0ZU1lc2hJbmZvKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZsb2F0IG1pblgsIG1pblksIG1pblosIG1heFgsIG1heFksIG1heFo7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgTWVzaEluZm9fdCAqaW5mbyA9IChNZXNoSW5mb190Kilyc0dldEVsZW1lbnRBdChhbGxNZXNoZXMsIGkpOwotICAgICAgICByc2dNZXNoQ29tcHV0ZUJvdW5kaW5nQm94KGluZm8tPm1NZXNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaW5YLCAmbWluWSwgJm1pblosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heFgsICZtYXhZLCAmbWF4Wik7Ci0gICAgICAgIGluZm8tPmJCb3hNaW4gPSB0b0Zsb2F0MyhtaW5YLCBtaW5ZLCBtaW5aKTsKLSAgICAgICAgaW5mby0+YkJveE1heCA9IHRvRmxvYXQzKG1heFgsIG1heFksIG1heFopOwotICAgICAgICBnTG9va0F0ICs9IChpbmZvLT5iQm94TWluICsgaW5mby0+YkJveE1heCkqMC41ZjsKLSAgICB9Ci0gICAgZ0xvb2tBdCA9IGdMb29rQXQgLyAoZmxvYXQpc2l6ZTsKLX0KLQotc3RhdGljIHZvaWQgcmVuZGVyQWxsTWVzaGVzKCkgewotICAgIHJzX2FsbG9jYXRpb24gYWxsTWVzaGVzID0gcnNHZXRBbGxvY2F0aW9uKGdNZXNoZXMpOwotICAgIGludCBzaXplID0gcnNBbGxvY2F0aW9uR2V0RGltWChhbGxNZXNoZXMpOwotICAgIGdMb29rQXQgPSAwLjBmOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIE1lc2hJbmZvX3QgKmluZm8gPSAoTWVzaEluZm9fdCopcnNHZXRFbGVtZW50QXQoYWxsTWVzaGVzLCBpKTsKLSAgICAgICAgcnNnRHJhd01lc2goaW5mby0+bU1lc2gpOwotICAgIH0KLX0KLQotdm9pZCBkcmF3RGVzY3JpcHRpb24oKSB7Ci0gICAgdWludCBoZWlnaHQgPSByc2dHZXRIZWlnaHQoKTsKLSAgICBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gMCwgdG9wID0gMCwgYm90dG9tID0gMDsKLQotICAgIHJzZ0JpbmRGb250KGdJdGFsaWMpOwotCi0gICAgcnNnTWVhc3VyZVRleHQoZ1RleHRBbGxvYywgJmxlZnQsICZyaWdodCwgJnRvcCwgJmJvdHRvbSk7Ci0gICAgcnNnRHJhd1RleHQoZ1RleHRBbGxvYywgMiAtbGVmdCwgaGVpZ2h0IC0gMiArIGJvdHRvbSk7Ci19Ci0KLWludCByb290KHZvaWQpIHsKLQotICAgIHJzZ0NsZWFyQ29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnQ2xlYXJEZXB0aCgxLjBmKTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQVkJhY2tncm91bmQpOwotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgIHJzTWF0cml4TG9hZFBlcnNwZWN0aXZlKCZwcm9qLCAzMC4wZiwgYXNwZWN0LCAxLjBmLCAxMDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1BGU0JhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUR3JpZCk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZElkZW50aXR5KCZtYXRyaXgpOwotICAgIC8vIFBvc2l0aW9uIG91ciBtb2RlbHMgb24gdGhlIHNjcmVlbgotICAgIHJzTWF0cml4VHJhbnNsYXRlKCZtYXRyaXgsIGdMb29rQXQueCwgZ0xvb2tBdC55LCBnTG9va0F0LnogLSBnWm9vbSk7Ci0gICAgcnNNYXRyaXhNdWx0aXBseSgmbWF0cml4LCAmZ1Bvc3R1cmVNYXRyaXgpOwotICAgIHJzTWF0cml4Um90YXRlKCZtYXRyaXgsIGdSb3RhdGVYLCAxLjBmLCAwLjBmLCAwLjBmKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCBnUm90YXRlWSwgMC4wZiwgMS4wZiwgMC4wZik7Ci0KLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotCi0gICAgcmVuZGVyQWxsTWVzaGVzKCk7Ci0KLSAgICBkcmF3RGVzY3JpcHRpb24oKTsKLQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3RyYW5zZm9ybS5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci90cmFuc2Zvcm0ucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YzA2MzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3RyYW5zZm9ybS5ycworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5tb2RlbHZpZXdlcikKLQotI2luY2x1ZGUgInRyYW5zZm9ybV9kZWYucnNoIgotCi1yc19zY3JpcHQgdHJhbnNmb3JtU2NyaXB0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50IGNoYW5nZWQ7Ci0gICAgcnNfbWF0cml4NHg0ICptYXQ7Ci19IFBhcmVudERhdGE7Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZFRyYW5zZm9ybWF0aW9uKGludCB0eXBlLCBmbG9hdDQgZGF0YSwgcnNfbWF0cml4NHg0ICptYXQpIHsKLSAgICByc19tYXRyaXg0eDQgdGVtcDsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgVFJBTlNGT1JNX1RSQU5TTEFURToKLSAgICAgICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKCZ0ZW1wLCBkYXRhLngsIGRhdGEueSwgZGF0YS56KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUUkFOU0ZPUk1fUk9UQVRFOgotICAgICAgICByc01hdHJpeExvYWRSb3RhdGUoJnRlbXAsIGRhdGEudywgZGF0YS54LCBkYXRhLnksIGRhdGEueik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVFJBTlNGT1JNX1NDQUxFOgotICAgICAgICByc01hdHJpeExvYWRTY2FsZSgmdGVtcCwgZGF0YS54LCBkYXRhLnksIGRhdGEueik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByc01hdHJpeE11bHRpcGx5KG1hdCwgJnRlbXApOwotfQotCi12b2lkIHJvb3QoY29uc3Qgdm9pZCAqdl9pbiwgdm9pZCAqdl9vdXQsIGNvbnN0IHZvaWQgKnVzckRhdGEsIHVpbnQzMl90IHgsIHVpbnQzMl90IHkpIHsKLQotICAgIFNnVHJhbnNmb3JtICpkYXRhID0gKFNnVHJhbnNmb3JtICopdl9vdXQ7Ci0gICAgY29uc3QgUGFyZW50RGF0YSAqcGFyZW50ID0gKGNvbnN0IFBhcmVudERhdGEgKil1c3JEYXRhOwotCi0gICAgLy9yc0RlYnVnKCJUcmFuc2Zvcm0gZGF0YSIsIChpbnQpZGF0YSk7Ci0gICAgLy9yc0RlYnVnKCJFbnRlcmluZyBwYXJlbnQiLCAoaW50KXBhcmVudCk7Ci0KLSAgICByc19tYXRyaXg0eDQgKmxvY2FsTWF0ID0gJmRhdGEtPmxvY2FsTWF0OwotICAgIHJzX21hdHJpeDR4NCAqZ2xvYmFsTWF0ID0gJmRhdGEtPmdsb2JhbE1hdDsKLQotICAgIFBhcmVudERhdGEgdG9DaGlsZDsKLSAgICB0b0NoaWxkLmNoYW5nZWQgPSAwOwotICAgIHRvQ2hpbGQubWF0ID0gZ2xvYmFsTWF0OwotCi0gICAgLy9yc0RlYnVnKCJUcmFuc2Zvcm0gaXMgZGlydHkiLCBkYXRhLT5pc0RpcnR5KTsKLQotICAgIC8vIFJlZnJlc2ggbWF0cmljZXMgaWYgZGlydHkKLSAgICBpZiAoZGF0YS0+aXNEaXJ0eSkgewotICAgICAgICBkYXRhLT5pc0RpcnR5ID0gMDsKLSAgICAgICAgdG9DaGlsZC5jaGFuZ2VkID0gMTsKLQotICAgICAgICAvLyBSZXNldCBvdXIgbG9jYWwgbWF0cml4Ci0gICAgICAgIHJzTWF0cml4TG9hZElkZW50aXR5KGxvY2FsTWF0KTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICsrKSB7Ci0gICAgICAgICAgICBpZiAoZGF0YS0+dHJhbnNmb3JtVHlwZXNbaV0gPT0gVFJBTlNGT1JNX05PTkUpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vcnNEZWJ1ZygiVHJhbnNmb3JtIGFkZGluZyB0cmFuc2Zvcm1hdGlvbiIsIHRyYW5zZm9ybVR5cGVzW2ldKTsKLSAgICAgICAgICAgIGFwcGVuZFRyYW5zZm9ybWF0aW9uKGRhdGEtPnRyYW5zZm9ybVR5cGVzW2ldLCBkYXRhLT50cmFuc2Zvcm1zW2ldLCBsb2NhbE1hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvL3JzRGVidWcoIlRyYW5zZm9ybSBjaGVja2luZyBwYXJlbnQiLCAoaW50KTApOwotCi0gICAgaWYgKHBhcmVudCkgewotICAgICAgICBpZiAocGFyZW50LT5jaGFuZ2VkKSB7Ci0gICAgICAgICAgICB0b0NoaWxkLmNoYW5nZWQgPSAxOwotCi0gICAgICAgICAgICByc01hdHJpeExvYWQoZ2xvYmFsTWF0LCBwYXJlbnQtPm1hdCk7Ci0gICAgICAgICAgICByc01hdHJpeE11bHRpcGx5KGdsb2JhbE1hdCwgbG9jYWxNYXQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNNYXRyaXhMb2FkKGdsb2JhbE1hdCwgbG9jYWxNYXQpOwotICAgIH0KLQotICAgIC8vcnNEZWJ1ZygiVHJhbnNmb3JtIGNhbGxpbmcgc2VsZiB3aXRoIGNoaWxkICIsIChpbnQpZGF0YS0+Y2hpbGRyZW4ucCk7Ci0gICAgaWYgKGRhdGEtPmNoaWxkcmVuLnApIHsKLSAgICAgICAgcnNGb3JFYWNoKHRyYW5zZm9ybVNjcmlwdCwgZGF0YS0+Y2hpbGRyZW4sIGRhdGEtPmNoaWxkcmVuLCAodm9pZCopJnRvQ2hpbGQsIHNpemVvZih0b0NoaWxkKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3RyYW5zZm9ybV9kZWYucnNoIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvTW9kZWxWaWV3ZXIvc3JjL2NvbS9hbmRyb2lkL21vZGVsdmlld2VyL3RyYW5zZm9ybV9kZWYucnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGEzNmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL01vZGVsVmlld2VyL3NyYy9jb20vYW5kcm9pZC9tb2RlbHZpZXdlci90cmFuc2Zvcm1fZGVmLnJzaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5tb2RlbHZpZXdlcikKLQotI2RlZmluZSBUUkFOU0ZPUk1fTk9ORSAwCi0jZGVmaW5lIFRSQU5TRk9STV9UUkFOU0xBVEUgMQotI2RlZmluZSBUUkFOU0ZPUk1fUk9UQVRFIDIKLSNkZWZpbmUgVFJBTlNGT1JNX1NDQUxFIDMKLQotdHlwZWRlZiBzdHJ1Y3QgX19hdHRyaWJ1dGVfXygocGFja2VkLCBhbGlnbmVkKDQpKSkgU2dUcmFuc2Zvcm0gewotICAgIHJzX21hdHJpeDR4NCBnbG9iYWxNYXQ7Ci0gICAgcnNfbWF0cml4NHg0IGxvY2FsTWF0OwotCi0gICAgZmxvYXQ0IHRyYW5zZm9ybXNbMTZdOwotICAgIGludCB0cmFuc2Zvcm1UeXBlc1sxNl07Ci0KLSAgICBpbnQgaXNEaXJ0eTsKLQotICAgIHJzX2FsbG9jYXRpb24gY2hpbGRyZW47Ci0KLX0gU2dUcmFuc2Zvcm07CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTllZTc3MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi0KLUxPQ0FMX0pBVkFfTElCUkFSSUVTIDo9IGFuZHJvaWQudGVzdC5ydW5uZXIKLQotTE9DQUxfU1JDX0ZJTEVTIDo9ICQoY2FsbCBhbGwtamF2YS1maWxlcy11bmRlciwgc3JjKSAkKGNhbGwgYWxsLXJlbmRlcnNjcmlwdC1maWxlcy11bmRlciwgc3JjKQotI0xPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyA6PSBhbmRyb2lkLnJlbmRlcnNjcmlwdAotCi1MT0NBTF9TREtfVkVSU0lPTiA6PSAxNwotCi1MT0NBTF9QQUNLQUdFX05BTUUgOj0gUGVyZlRlc3QKLQotaW5jbHVkZSAkKEJVSUxEX1BBQ0tBR0UpCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MDM5Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0iY29tLmFuZHJvaWQucGVyZnRlc3QiPgotICAgIAotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIgLz4KLSAgICAKLSAgICA8dXNlcy1zZGsgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSIxMSIgLz4KLSAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iUGVyZlRlc3QiCi0gICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS90ZXN0X3BhdHRlcm4iPgotICAgICAgICA8dXNlcy1saWJyYXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iUnNCZW5jaCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IlJzQmVuY2htYXJrIj4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVyPgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5hY3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICAgIDwvYXBwbGljYXRpb24+Ci0KLSAgICAgIDxpbnN0cnVtZW50YXRpb24gYW5kcm9pZDpuYW1lPSIuUnNQZXJmVGVzdFJ1bm5lciIKLSAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJjb20uYW5kcm9pZC5wZXJmdGVzdCIKLSAgICAgICAgYW5kcm9pZDpsYWJlbD0iVGVzdCBydW5uZXIgZm9yIFJzQmVuY2ggdGVzdHMiCi0gICAgICAvPgotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9jaGVja2VyLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9jaGVja2VyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzMWUxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvY2hlY2tlci5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvZGF0YS5wbmcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvZGF0YS5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzQ3MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL2RhdGEucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL2ZsYXJlcy5wbmcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvZmxhcmVzLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E1Yzk3MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvZmxhcmVzLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9nbG9iZS5wbmcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvZ2xvYmUucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWQ2MTcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9nbG9iZS5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvbGVhZi5wbmcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvbGVhZi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZDM3NzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL2xlYWYucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL2xpZ2h0MS5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvbGlnaHQxLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYyZjEwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvbGlnaHQxLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9zcGFjZS5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvc3BhY2UuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjFmNmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS9zcGFjZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvdGVzdF9wYXR0ZXJuLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS90ZXN0X3BhdHRlcm4ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2QxNDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS90ZXN0X3BhdHRlcm4ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL3RvcnVzbWFwLnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9kcmF3YWJsZS1ub2RwaS90b3J1c21hcC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDhmM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL3RvcnVzbWFwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9tZW51L2xvYWRlcl9tZW51LnhtbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9tZW51L2xvYWRlcl9tZW51LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhMjUxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvbWVudS9sb2FkZXJfbWVudS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotLyoKLSogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoKLSogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qCi0qICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotLS0+Ci0KLTxtZW51IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPGl0ZW0gYW5kcm9pZDppZD0iQCtpZC9iZW5jaG1hcmtfYWxsIgotICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvYmVuY2htYXJrX2FsbCIgLz4KLSAgICA8aXRlbSBhbmRyb2lkOmlkPSJAK2lkL2JlbmNobWFya19vbmUiCi0gICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9iZW5jaG1hcmtfb25lIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvZGVidWdfbW9kZSIKLSAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2RlYnVnX21vZGUiIC8+Ci08L21lbnU+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvbXVsdGl0ZXhmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L211bHRpdGV4Zi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDkyYTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvbXVsdGl0ZXhmLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgdmVjMiB0MCA9IHZhclRleDAueHk7Ci0gICBsb3dwIHZlYzQgY29sMCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBsb3dwIHZlYzQgY29sMSA9IHRleHR1cmUyRChVTklfVGV4MSwgdDAqNC4wKS5yZ2JhOwotICAgbG93cCB2ZWM0IGNvbDIgPSB0ZXh0dXJlMkQoVU5JX1RleDIsIHQwKS5yZ2JhOwotICAgY29sMC54eXogPSBjb2wwLnh5eipjb2wxLnh5eioxLjU7Ci0gICBjb2wwLnh5eiA9IG1peChjb2wwLnh5eiwgY29sMi54eXosIGNvbDIudyk7Ci0gICBjb2wwLncgPSAwLjU7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2wwOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NoYWRlcjJmLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NoYWRlcjJmLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmYzA1ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXIyZi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotdmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zOwotdmFyeWluZyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLQotICAgdmVjMyBWID0gbm9ybWFsaXplKC12YXJXb3JsZFBvcy54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBub3JtYWxpemUodmFyV29ybGROb3JtYWwpOwotCi0gICB2ZWMzIGxpZ2h0MFZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHQwX1Bvc2lzaW9uLnh5eiAtIHZhcldvcmxkUG9zKTsKLSAgIHZlYzMgbGlnaHQwUiA9IC1yZWZsZWN0KGxpZ2h0MFZlYywgd29ybGROb3JtKTsKLSAgIGZsb2F0IGxpZ2h0MF9EaWZmdXNlID0gY2xhbXAoZG90KHdvcmxkTm9ybSwgbGlnaHQwVmVjKSwgMC4wLCAxLjApICogVU5JX2xpZ2h0MF9EaWZmdXNlOwotICAgZmxvYXQgbGlnaHQwU3BlYyA9IGNsYW1wKGRvdChsaWdodDBSLCBWKSwgMC4wMDEsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDBfU3BlY3VsYXIgPSBwb3cobGlnaHQwU3BlYywgVU5JX2xpZ2h0MF9Db3NpbmVQb3dlcikgKiBVTklfbGlnaHQwX1NwZWN1bGFyOwotCi0gICB2ZWMzIGxpZ2h0MVZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHQxX1Bvc2lzaW9uLnh5eiAtIHZhcldvcmxkUG9zKTsKLSAgIHZlYzMgbGlnaHQxUiA9IHJlZmxlY3QobGlnaHQxVmVjLCB3b3JsZE5vcm0pOwotICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCkgKiBVTklfbGlnaHQxX0RpZmZ1c2U7Ci0gICBmbG9hdCBsaWdodDFTcGVjID0gY2xhbXAoZG90KGxpZ2h0MVIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MV9TcGVjdWxhciA9IHBvdyhsaWdodDFTcGVjLCBVTklfbGlnaHQxX0Nvc2luZVBvd2VyKSAqIFVOSV9saWdodDFfU3BlY3VsYXI7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIChsaWdodDBfRGlmZnVzZSAqIFVOSV9saWdodDBfRGlmZnVzZUNvbG9yLnh5eiArIGxpZ2h0MV9EaWZmdXNlICogVU5JX2xpZ2h0MV9EaWZmdXNlQ29sb3IueHl6KTsKLSAgIGNvbC54eXogKz0gbGlnaHQwX1NwZWN1bGFyICogVU5JX2xpZ2h0MF9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGNvbC54eXogKz0gbGlnaHQxX1NwZWN1bGFyICogVU5JX2xpZ2h0MV9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGdsX0ZyYWdDb2xvciA9IGNvbDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXIybW92ZXYuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2hhZGVyMm1vdmV2Lmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyYzgwN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXIybW92ZXYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uOwotICAgdmVjMyBvbGRQb3MgPSBvYmpQb3MueHl6OwotICAgb2JqUG9zLnh5eiArPSAwLjEqc2luKG9ialBvcy54eXoqMi4wICsgVU5JX3RpbWUpOwotICAgb2JqUG9zLnh5eiArPSAwLjA1KnNpbihvYmpQb3MueHl6KjQuMCArIFVOSV90aW1lKjAuNSk7Ci0gICBvYmpQb3MueHl6ICs9IDAuMDIqc2luKG9ialBvcy54eXoqNy4wICsgVU5JX3RpbWUqMC43NSk7Ci0gICB2ZWM0IHdvcmxkUG9zID0gVU5JX21vZGVsICogb2JqUG9zOwotICAgZ2xfUG9zaXRpb24gPSBVTklfcHJvaiAqIHdvcmxkUG9zOwotCi0gICBtYXQzIG1vZGVsMyA9IG1hdDMoVU5JX21vZGVsWzBdLnh5eiwgVU5JX21vZGVsWzFdLnh5eiwgVU5JX21vZGVsWzJdLnh5eik7Ci0gICB2ZWMzIHdvcmxkTm9ybSA9IG1vZGVsMyAqIChBVFRSSUJfbm9ybWFsICsgb2xkUG9zIC0gb2JqUG9zLnh5eik7Ci0KLSAgIHZhcldvcmxkUG9zID0gd29ybGRQb3MueHl6OwotICAgdmFyV29ybGROb3JtYWwgPSB3b3JsZE5vcm07Ci0gICB2YXJUZXgwID0gQVRUUklCX3RleHR1cmUwOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXIydi5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXIydi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjg4NWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2hhZGVyMnYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uOwotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbCAqIG9ialBvczsKLSAgIGdsX1Bvc2l0aW9uID0gVU5JX3Byb2ogKiB3b3JsZFBvczsKLQotICAgbWF0MyBtb2RlbDMgPSBtYXQzKFVOSV9tb2RlbFswXS54eXosIFVOSV9tb2RlbFsxXS54eXosIFVOSV9tb2RlbFsyXS54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsOwotCi0gICB2YXJXb3JsZFBvcyA9IHdvcmxkUG9zLnh5ejsKLSAgIHZhcldvcmxkTm9ybWFsID0gd29ybGROb3JtOwotICAgdmFyVGV4MCA9IEFUVFJJQl90ZXh0dXJlMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2hhZGVyZi5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXJmLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NmUyMDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXJmLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0KLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDBfRGlmZnVzZTsKLXZhcnlpbmcgbG93cCBmbG9hdCBsaWdodDBfU3BlY3VsYXI7Ci12YXJ5aW5nIGxvd3AgZmxvYXQgbGlnaHQxX0RpZmZ1c2U7Ci12YXJ5aW5nIGxvd3AgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfVGV4MCwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIChsaWdodDBfRGlmZnVzZSAqIFVOSV9saWdodDBfRGlmZnVzZUNvbG9yLnh5eiArIGxpZ2h0MV9EaWZmdXNlICogVU5JX2xpZ2h0MV9EaWZmdXNlQ29sb3IueHl6KTsKLSAgIGNvbC54eXogKz0gbGlnaHQwX1NwZWN1bGFyICogVU5JX2xpZ2h0MF9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGNvbC54eXogKz0gbGlnaHQxX1NwZWN1bGFyICogVU5JX2xpZ2h0MV9TcGVjdWxhckNvbG9yLnh5ejsKLSAgIGdsX0ZyYWdDb2xvciA9IGNvbDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy9zaGFkZXJ2Lmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NoYWRlcnYuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdkMDFkZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NoYWRlcnYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLXZhcnlpbmcgZmxvYXQgbGlnaHQwX0RpZmZ1c2U7Ci12YXJ5aW5nIGZsb2F0IGxpZ2h0MF9TcGVjdWxhcjsKLXZhcnlpbmcgZmxvYXQgbGlnaHQxX0RpZmZ1c2U7Ci12YXJ5aW5nIGZsb2F0IGxpZ2h0MV9TcGVjdWxhcjsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgd29ybGRQb3MgPSBVTklfbW9kZWwgKiBBVFRSSUJfcG9zaXRpb247Ci0gICBnbF9Qb3NpdGlvbiA9IFVOSV9wcm9qICogd29ybGRQb3M7Ci0KLSAgIG1hdDMgbW9kZWwzID0gbWF0MyhVTklfbW9kZWxbMF0ueHl6LCBVTklfbW9kZWxbMV0ueHl6LCBVTklfbW9kZWxbMl0ueHl6KTsKLSAgIHZlYzMgd29ybGROb3JtID0gbW9kZWwzICogQVRUUklCX25vcm1hbDsKLSAgIHZlYzMgViA9IG5vcm1hbGl6ZSgtd29ybGRQb3MueHl6KTsKLQotICAgdmVjMyBsaWdodDBWZWMgPSBub3JtYWxpemUoVU5JX2xpZ2h0MF9Qb3Npc2lvbi54eXogLSB3b3JsZFBvcy54eXopOwotICAgdmVjMyBsaWdodDBSID0gLXJlZmxlY3QobGlnaHQwVmVjLCB3b3JsZE5vcm0pOwotICAgbGlnaHQwX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDBWZWMpLCAwLjAsIDEuMCkgKiBVTklfbGlnaHQwX0RpZmZ1c2U7Ci0gICBmbG9hdCBsaWdodDBTcGVjID0gY2xhbXAoZG90KGxpZ2h0MFIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGxpZ2h0MF9TcGVjdWxhciA9IHBvdyhsaWdodDBTcGVjLCBVTklfbGlnaHQwX0Nvc2luZVBvd2VyKSAqIFVOSV9saWdodDBfU3BlY3VsYXI7Ci0KLSAgIHZlYzMgbGlnaHQxVmVjID0gbm9ybWFsaXplKFVOSV9saWdodDFfUG9zaXNpb24ueHl6IC0gd29ybGRQb3MueHl6KTsKLSAgIHZlYzMgbGlnaHQxUiA9IHJlZmxlY3QobGlnaHQxVmVjLCB3b3JsZE5vcm0pOwotICAgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCkgKiBVTklfbGlnaHQxX0RpZmZ1c2U7Ci0gICBmbG9hdCBsaWdodDFTcGVjID0gY2xhbXAoZG90KGxpZ2h0MVIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGxpZ2h0MV9TcGVjdWxhciA9IHBvdyhsaWdodDFTcGVjLCBVTklfbGlnaHQxX0Nvc2luZVBvd2VyKSAqIFVOSV9saWdodDFfU3BlY3VsYXI7Ci0KLSAgIGdsX1BvaW50U2l6ZSA9IDEuMDsKLSAgIHZhclRleDAgPSBBVFRSSUJfdGV4dHVyZTA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NpbmdsZXRleGYuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2luZ2xldGV4Zi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2RmYzdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2luZ2xldGV4Zi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgbG93cCB2ZWMzIGNvbDAgPSB0ZXh0dXJlMkQoVU5JX1RleDAsIHZhclRleDApLnJnYjsKLSAgIGdsX0ZyYWdDb2xvci54eXogPSBjb2wwOwotICAgZ2xfRnJhZ0NvbG9yLncgPSAwLjU7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2luZ2xldGV4Zm0uZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy9yYXcvc2luZ2xldGV4Zm0uZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU2OTYxYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3NpbmdsZXRleGZtLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi12b2lkIG1haW4oKSB7Ci0gICBsb3dwIHZlYzMgY29sMCA9IHRleHR1cmUyRChVTklfVGV4MCwgdmFyVGV4MCkucmdiOwotICAgZ2xfRnJhZ0NvbG9yLnh5eiA9IGNvbDAgKiBVTklfbW9kdWxhdGUucmdiOwotICAgZ2xfRnJhZ0NvbG9yLncgPSBVTklfbW9kdWxhdGUuYTsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3QvcmVzL3Jhdy90b3J1cy5hM2QgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3RvcnVzLmEzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMyMmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvcmF3L3RvcnVzLmEzZAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTk4MTllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLQotLyoKLSogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoKLSogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qCi0qICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotLS0+Ci0KLTxyZXNvdXJjZXMgeG1sbnM6eGxpZmY9InVybjpvYXNpczpuYW1lczp0Yzp4bGlmZjpkb2N1bWVudDoxLjIiPgotICAgIDxza2lwIC8+Ci0gICAgPHN0cmluZyBuYW1lPSJiZW5jaG1hcmtfYWxsIj5CZW5jaG1hcmsgQWxsPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJiZW5jaG1hcmtfb25lIj5CZW5jaG1hcmsgT25lPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkZWJ1Z19tb2RlIj5EZWJ1ZyBNb2RlPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L0ZpbGxUZXN0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvRmlsbFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDFmNjY0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvRmlsbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLQotaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci0KLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotcHVibGljIGNsYXNzIEZpbGxUZXN0IGltcGxlbWVudHMgUnNCZW5jaEJhc2VUZXN0ewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJGaWxsVGVzdCI7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLQotICAgIC8vIEN1c3RvbSBzaGFkZXJzCi0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudE11bHRpdGV4OwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRTaW5nbGV0ZXg7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudFNpbmdsZXRleE1vZHVsYXRlOwotICAgIHByaXZhdGUgZmluYWwgQml0bWFwRmFjdG9yeS5PcHRpb25zIG1PcHRpb25zQVJHQiA9IG5ldyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICBpbnQgbUJlbmNobWFya0RpbVg7Ci0gICAgaW50IG1CZW5jaG1hcmtEaW1ZOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRDX2ZpbGxfdGVzdCBtRmlsbFNjcmlwdDsKLSAgICBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bXSBtVGVzdHM7Ci0gICAgU2NyaXB0RmllbGRfRmlsbFRlc3RGcmFnRGF0YV9zIG1GcmFnRGF0YTsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbU5hbWVzID0gewotICAgICAgICAiRmlsbCBzY3JlZW4gMTB4IHNpbmdsZXRleHR1cmUiLAotICAgICAgICAiRmlsbCBzY3JlZW4gMTB4IDN0ZXggbXVsdGl0ZXh0dXJlIiwKLSAgICAgICAgIkZpbGwgc2NyZWVuIDEweCBibGVuZGVkIHNpbmdsZXRleHR1cmUiLAotICAgICAgICAiRmlsbCBzY3JlZW4gMTB4IGJsZW5kZWQgM3RleCBtdWx0aXRleHR1cmUiLAotICAgICAgICAiRmlsbCBzY3JlZW4gM3ggbW9kdWxhdGUgYmxlbmRlZCBzaW5nbGV0ZXh0dXJlIiwKLSAgICAgICAgIkZpbGwgc2NyZWVuIDF4IG1vZHVsYXRlIGJsZW5kZWQgc2luZ2xldGV4dHVyZSIsCi0gICAgfTsKLQotICAgIHB1YmxpYyBGaWxsVGVzdCgpIHsKLSAgICAgICAgbU9wdGlvbnNBUkdCLmluU2NhbGVkID0gZmFsc2U7Ci0gICAgICAgIG1PcHRpb25zQVJHQi5pblByZWZlcnJlZENvbmZpZyA9IEJpdG1hcC5Db25maWcuQVJHQl84ODg4OwotICAgICAgICBtQmVuY2htYXJrRGltWCA9IDEyODA7Ci0gICAgICAgIG1CZW5jaG1hcmtEaW1ZID0gNzIwOwotICAgIH0KLQotICAgIHZvaWQgYWRkVGVzdChpbnQgaW5kZXgsIGludCB0ZXN0SWQsIGludCBibGVuZCwgaW50IHF1YWRDb3VudCkgewotICAgICAgICBtVGVzdHNbaW5kZXhdID0gbmV3IFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbSgpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLnRlc3RTY3JpcHQgPSBtRmlsbFNjcmlwdDsKLSAgICAgICAgbVRlc3RzW2luZGV4XS50ZXN0TmFtZSA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbVN0cmluZyhtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWVzW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0uZGVidWdOYW1lID0gUnNCZW5jaFJTLmNyZWF0ZVplcm9UZXJtaW5hdGVkQWxsb2MobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotCi0gICAgICAgIFNjcmlwdEZpZWxkX0ZpbGxUZXN0RGF0YV9zLkl0ZW0gZGF0YUl0ZW0gPSBuZXcgU2NyaXB0RmllbGRfRmlsbFRlc3REYXRhX3MuSXRlbSgpOwotICAgICAgICBkYXRhSXRlbS50ZXN0SWQgPSB0ZXN0SWQ7Ci0gICAgICAgIGRhdGFJdGVtLmJsZW5kID0gYmxlbmQ7Ci0gICAgICAgIGRhdGFJdGVtLnF1YWRDb3VudCA9IHF1YWRDb3VudDsKLSAgICAgICAgU2NyaXB0RmllbGRfRmlsbFRlc3REYXRhX3MgdGVzdERhdGEgPSBuZXcgU2NyaXB0RmllbGRfRmlsbFRlc3REYXRhX3MobVJTLCAxKTsKLSAgICAgICAgdGVzdERhdGEuc2V0KGRhdGFJdGVtLCAwLCB0cnVlKTsKLSAgICAgICAgbVRlc3RzW2luZGV4XS50ZXN0RGF0YSA9IHRlc3REYXRhLmdldEFsbG9jYXRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpbml0KFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBpbml0Q3VzdG9tU2hhZGVycygpOwotICAgICAgICBpbml0RmlsbFNjcmlwdCgpOwotICAgICAgICBtVGVzdHMgPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW21OYW1lcy5sZW5ndGhdOwotCi0gICAgICAgIGludCBpbmRleCA9IDA7Ci0KLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAxIC8qdGVzdElkKi8sIDAgLypibGVuZCovLCAxMCAvKnF1YWRDb3VudCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAwIC8qdGVzdElkKi8sIDAgLypibGVuZCovLCAxMCAvKnF1YWRDb3VudCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAxIC8qdGVzdElkKi8sIDEgLypibGVuZCovLCAxMCAvKnF1YWRDb3VudCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAwIC8qdGVzdElkKi8sIDEgLypibGVuZCovLCAxMCAvKnF1YWRDb3VudCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyIC8qdGVzdElkKi8sIDEgLypibGVuZCovLCAzIC8qcXVhZENvdW50Ki8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDIgLyp0ZXN0SWQqLywgMSAvKmJsZW5kKi8sIDEgLypxdWFkQ291bnQqLyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVtdIGdldFRlc3RzKCkgewotICAgICAgICByZXR1cm4gbVRlc3RzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUZXN0TmFtZXMoKSB7Ci0gICAgICAgIHJldHVybiBtTmFtZXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRDdXN0b21TaGFkZXJzKCkgewotICAgICAgICBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlciBwZmJDdXN0b20gPSBuZXcgUHJvZ3JhbUZyYWdtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcGZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5tdWx0aXRleGYpOwotICAgICAgICBmb3IgKGludCB0ZXhDb3VudCA9IDA7IHRleENvdW50IDwgMzsgdGV4Q291bnQgKyspIHsKLSAgICAgICAgICAgIHBmYkN1c3RvbS5hZGRUZXh0dXJlKFByb2dyYW0uVGV4dHVyZVR5cGUuVEVYVFVSRV8yRCk7Ci0gICAgICAgIH0KLSAgICAgICAgbVByb2dGcmFnbWVudE11bHRpdGV4ID0gcGZiQ3VzdG9tLmNyZWF0ZSgpOwotCi0gICAgICAgIHBmYkN1c3RvbSA9IG5ldyBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlcihtUlMpOwotICAgICAgICBwZmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3LnNpbmdsZXRleGYpOwotICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfMkQpOwotICAgICAgICBtUHJvZ0ZyYWdtZW50U2luZ2xldGV4ID0gcGZiQ3VzdG9tLmNyZWF0ZSgpOwotCi0gICAgICAgIHBmYkN1c3RvbSA9IG5ldyBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlcihtUlMpOwotICAgICAgICBwZmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3LnNpbmdsZXRleGZtKTsKLSAgICAgICAgcGZiQ3VzdG9tLmFkZFRleHR1cmUoUHJvZ3JhbS5UZXh0dXJlVHlwZS5URVhUVVJFXzJEKTsKLSAgICAgICAgbUZyYWdEYXRhID0gbmV3IFNjcmlwdEZpZWxkX0ZpbGxUZXN0RnJhZ0RhdGFfcyhtUlMsIDEpOwotICAgICAgICBwZmJDdXN0b20uYWRkQ29uc3RhbnQobUZyYWdEYXRhLmdldFR5cGUoKSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRTaW5nbGV0ZXhNb2R1bGF0ZSA9IHBmYkN1c3RvbS5jcmVhdGUoKTsKLSAgICAgICAgbVByb2dGcmFnbWVudFNpbmdsZXRleE1vZHVsYXRlLmJpbmRDb25zdGFudHMobUZyYWdEYXRhLmdldEFsbG9jYXRpb24oKSwgMCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIGxvYWRUZXh0dXJlQVJHQihpbnQgaWQpIHsKLSAgICAgICAgQml0bWFwIGIgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKG1SZXMsIGlkLCBtT3B0aW9uc0FSR0IpOwotICAgICAgICByZXR1cm4gQWxsb2NhdGlvbi5jcmVhdGVGcm9tQml0bWFwKG1SUywgYiwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIHByaXZhdGUgQWxsb2NhdGlvbiBsb2FkVGV4dHVyZVJHQihpbnQgaWQpIHsKLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb24uY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKG1SUywgbVJlcywgaWQsCi0gICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sLk1JUE1BUF9PTl9TWU5DX1RPX1RFWFRVUkUsCi0gICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19URVhUVVJFKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRGaWxsU2NyaXB0KCkgewotICAgICAgICBtRmlsbFNjcmlwdCA9IG5ldyBTY3JpcHRDX2ZpbGxfdGVzdChtUlMsIG1SZXMsIFIucmF3LmZpbGxfdGVzdCk7Ci0KLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlciBwdmIgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbiBwcm9nVmVydGV4ID0gcHZiLmNyZWF0ZSgpOwotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMgUFZBID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyhtUlMpOwotICAgICAgICAoKFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKXByb2dWZXJ0ZXgpLmJpbmRDb25zdGFudHMoUFZBKTsKLSAgICAgICAgTWF0cml4NGYgcHJvaiA9IG5ldyBNYXRyaXg0ZigpOwotICAgICAgICBwcm9qLmxvYWRPcnRob1dpbmRvdyhtQmVuY2htYXJrRGltWCwgbUJlbmNobWFya0RpbVkpOwotICAgICAgICBQVkEuc2V0UHJvamVjdGlvbihwcm9qKTsKLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dQcm9nVmVydGV4KHByb2dWZXJ0ZXgpOwotCi0gICAgICAgIG1GaWxsU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50VGV4dHVyZShtUHJvZ0ZyYWdtZW50U2luZ2xldGV4KTsKLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dQcm9nRnJhZ21lbnRUZXh0dXJlTW9kdWxhdGUobVByb2dGcmFnbWVudFNpbmdsZXRleE1vZHVsYXRlKTsKLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dQcm9nRnJhZ21lbnRNdWx0aXRleChtUHJvZ0ZyYWdtZW50TXVsdGl0ZXgpOwotICAgICAgICBtRmlsbFNjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kTm9uZShQcm9ncmFtU3RvcmUuQkxFTkRfTk9ORV9ERVBUSF9OT05FKG1SUykpOwotICAgICAgICBtRmlsbFNjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kQWxwaGEoUHJvZ3JhbVN0b3JlLkJMRU5EX0FMUEhBX0RFUFRIX05PTkUobVJTKSk7Ci0KLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dMaW5lYXJDbGFtcChTYW1wbGVyLkNMQU1QX0xJTkVBUihtUlMpKTsKLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dMaW5lYXJXcmFwKFNhbXBsZXIuV1JBUF9MSU5FQVIobVJTKSk7Ci0gICAgICAgIG1GaWxsU2NyaXB0LnNldF9nVGV4VG9ydXMobG9hZFRleHR1cmVSR0IoUi5kcmF3YWJsZS50b3J1c21hcCkpOwotICAgICAgICBtRmlsbFNjcmlwdC5zZXRfZ1RleE9wYXF1ZShsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmRhdGEpKTsKLSAgICAgICAgbUZpbGxTY3JpcHQuc2V0X2dUZXhUcmFuc3BhcmVudChsb2FkVGV4dHVyZUFSR0IoUi5kcmF3YWJsZS5sZWFmKSk7Ci0gICAgICAgIG1GaWxsU2NyaXB0LnNldF9nVGV4Q2hlY2tlcihsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmNoZWNrZXIpKTsKLQotICAgICAgICBtRmlsbFNjcmlwdC5iaW5kX2dGcmFnRGF0YShtRnJhZ0RhdGEpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9NZXNoVGVzdC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L01lc2hUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYjQ0MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L01lc2hUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQucGVyZnRlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YUtpbmQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhVHlwZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLk1pcG1hcENvbnRyb2w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbS5UZXh0dXJlVHlwZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQuUlNNZXNzYWdlSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NZXNoLlByaW1pdGl2ZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NYXRyaXg0ZjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbjsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotcHVibGljIGNsYXNzIE1lc2hUZXN0IGltcGxlbWVudHMgUnNCZW5jaEJhc2VUZXN0ewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZXNoVGVzdCI7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLQotICAgIGludCBtQmVuY2htYXJrRGltWDsKLSAgICBpbnQgbUJlbmNobWFya0RpbVk7Ci0KLSAgICBwcml2YXRlIE1lc2ggbTEwYnkxME1lc2g7Ci0gICAgcHJpdmF0ZSBNZXNoIG0xMDBieTEwME1lc2g7Ci0gICAgcHJpdmF0ZSBNZXNoIG1XYnlITWVzaDsKLQotICAgIHByaXZhdGUgU2NyaXB0Q19tZXNoX3Rlc3QgbUdlb1NjcmlwdDsKLQotICAgIHByaXZhdGUgZmluYWwgQml0bWFwRmFjdG9yeS5PcHRpb25zIG1PcHRpb25zQVJHQiA9IG5ldyBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMoKTsKLQotICAgIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVtdIG1UZXN0czsKLQotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nW10gbU5hbWVzID0gewotICAgICAgICAiRnVsbCBzY3JlZW4gbWVzaCAxMCBieSAxMCIsCi0gICAgICAgICJGdWxsIHNjcmVlbiBtZXNoIDEwMCBieSAxMDAiLAotICAgICAgICAiRnVsbCBzY3JlZW4gbWVzaCBXIC8gNCBieSBIIC8gNCIKLSAgICB9OwotCi0gICAgcHVibGljIE1lc2hUZXN0KCkgewotICAgICAgICBtQmVuY2htYXJrRGltWCA9IDEyODA7Ci0gICAgICAgIG1CZW5jaG1hcmtEaW1ZID0gNzIwOwotICAgIH0KLQotICAgIHZvaWQgYWRkVGVzdChpbnQgaW5kZXgsIGludCBtZXNoTnVtKSB7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0gPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtKCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdFNjcmlwdCA9IG1HZW9TY3JpcHQ7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdE5hbWUgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLmRlYnVnTmFtZSA9IFJzQmVuY2hSUy5jcmVhdGVaZXJvVGVybWluYXRlZEFsbG9jKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtTmFtZXNbaW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKTsKLQotICAgICAgICBTY3JpcHRGaWVsZF9NZXNoVGVzdERhdGFfcy5JdGVtIGRhdGFJdGVtID0gbmV3IFNjcmlwdEZpZWxkX01lc2hUZXN0RGF0YV9zLkl0ZW0oKTsKLSAgICAgICAgZGF0YUl0ZW0ubWVzaE51bSA9IG1lc2hOdW07Ci0gICAgICAgIFNjcmlwdEZpZWxkX01lc2hUZXN0RGF0YV9zIHRlc3REYXRhID0gbmV3IFNjcmlwdEZpZWxkX01lc2hUZXN0RGF0YV9zKG1SUywgMSk7Ci0gICAgICAgIHRlc3REYXRhLnNldChkYXRhSXRlbSwgMCwgdHJ1ZSk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdERhdGEgPSB0ZXN0RGF0YS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaW5pdChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgaW5pdEdlb1NjcmlwdCgpOwotICAgICAgICBtVGVzdHMgPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW21OYW1lcy5sZW5ndGhdOwotCi0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMCAvKm1lc2hOdW0qLyk7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMSAvKm1lc2hOdW0qLyk7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMiAvKm1lc2hOdW0qLyk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVtdIGdldFRlc3RzKCkgewotICAgICAgICByZXR1cm4gbVRlc3RzOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRUZXN0TmFtZXMoKSB7Ci0gICAgICAgIHJldHVybiBtTmFtZXM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNZXNoIGdldE1ieU5NZXNoKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGludCB3UmVzb2x1dGlvbiwgaW50IGhSZXNvbHV0aW9uKSB7Ci0KLSAgICAgICAgTWVzaC5UcmlhbmdsZU1lc2hCdWlsZGVyIHRtYiA9IG5ldyBNZXNoLlRyaWFuZ2xlTWVzaEJ1aWxkZXIobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlci5URVhUVVJFXzApOwotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDw9IGhSZXNvbHV0aW9uOyB5KyspIHsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IG5vcm1hbGl6ZWRZID0gKGZsb2F0KXkgLyBoUmVzb2x1dGlvbjsKLSAgICAgICAgICAgIGZpbmFsIGZsb2F0IHlPZmZzZXQgPSAobm9ybWFsaXplZFkgLSAwLjVmKSAqIGhlaWdodDsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDw9IHdSZXNvbHV0aW9uOyB4KyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBub3JtYWxpemVkWCA9IChmbG9hdCl4IC8gd1Jlc29sdXRpb247Ci0gICAgICAgICAgICAgICAgZmxvYXQgeE9mZnNldCA9IChub3JtYWxpemVkWCAtIDAuNWYpICogd2lkdGg7Ci0gICAgICAgICAgICAgICAgdG1iLnNldFRleHR1cmUoKGZsb2F0KXggJSAyLCAoZmxvYXQpeSAlIDIpOwotICAgICAgICAgICAgICAgIHRtYi5hZGRWZXJ0ZXgoeE9mZnNldCwgeU9mZnNldCk7Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoUmVzb2x1dGlvbjsgeSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgY3VyWSA9IHkgKiAod1Jlc29sdXRpb24gKyAxKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBiZWxvd1kgPSAoeSArIDEpICogKHdSZXNvbHV0aW9uICsgMSk7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdSZXNvbHV0aW9uOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgY3VyViA9IGN1clkgKyB4OwotICAgICAgICAgICAgICAgIGludCBiZWxvd1YgPSBiZWxvd1kgKyB4OwotICAgICAgICAgICAgICAgIHRtYi5hZGRUcmlhbmdsZShjdXJWLCBiZWxvd1YsIGN1clYgKyAxKTsKLSAgICAgICAgICAgICAgICB0bWIuYWRkVHJpYW5nbGUoYmVsb3dWLCBiZWxvd1YgKyAxLCBjdXJWICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdG1iLmNyZWF0ZSh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbG9hZFRleHR1cmVSR0IoaW50IGlkKSB7Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIGlkLAotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uTWlwbWFwQ29udHJvbC5NSVBNQVBfT05fU1lOQ19UT19URVhUVVJFLAotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0R2VvU2NyaXB0KCkgewotICAgICAgICBtR2VvU2NyaXB0ID0gbmV3IFNjcmlwdENfbWVzaF90ZXN0KG1SUywgbVJlcywgUi5yYXcubWVzaF90ZXN0KTsKLQotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIHB2YiA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIHByb2dWZXJ0ZXggPSBwdmIuY3JlYXRlKCk7Ci0gICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyBQVkEgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzKG1SUyk7Ci0gICAgICAgICgoUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24pcHJvZ1ZlcnRleCkuYmluZENvbnN0YW50cyhQVkEpOwotICAgICAgICBNYXRyaXg0ZiBwcm9qID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgIHByb2oubG9hZE9ydGhvV2luZG93KG1CZW5jaG1hcmtEaW1YLCBtQmVuY2htYXJrRGltWSk7Ci0gICAgICAgIFBWQS5zZXRQcm9qZWN0aW9uKHByb2opOwotCi0gICAgICAgIG1HZW9TY3JpcHQuc2V0X2dQcm9nVmVydGV4KHByb2dWZXJ0ZXgpOwotICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgdGV4QnVpbGRlciA9IG5ldyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgdGV4QnVpbGRlci5zZXRUZXh0dXJlKFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlci5FbnZNb2RlLlJFUExBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRm9ybWF0LlJHQkEsIDApOwotICAgICAgICBtR2VvU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50VGV4dHVyZSh0ZXhCdWlsZGVyLmNyZWF0ZSgpKTsKLSAgICAgICAgbUdlb1NjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kTm9uZShQcm9ncmFtU3RvcmUuQkxFTkRfTk9ORV9ERVBUSF9OT05FKG1SUykpOwotCi0gICAgICAgIG1HZW9TY3JpcHQuc2V0X2dMaW5lYXJDbGFtcChTYW1wbGVyLkNMQU1QX0xJTkVBUihtUlMpKTsKLSAgICAgICAgbUdlb1NjcmlwdC5zZXRfZ1RleE9wYXF1ZShsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmRhdGEpKTsKLQotICAgICAgICBtMTBieTEwTWVzaCA9IGdldE1ieU5NZXNoKG1CZW5jaG1hcmtEaW1YLCBtQmVuY2htYXJrRGltWSwgMTAsIDEwKTsKLSAgICAgICAgbTEwMGJ5MTAwTWVzaCA9IGdldE1ieU5NZXNoKG1CZW5jaG1hcmtEaW1YLCBtQmVuY2htYXJrRGltWSwgMTAwLCAxMDApOwotICAgICAgICBtV2J5SE1lc2g9IGdldE1ieU5NZXNoKG1CZW5jaG1hcmtEaW1YLCBtQmVuY2htYXJrRGltWSwgbUJlbmNobWFya0RpbVgvNCwgbUJlbmNobWFya0RpbVkvNCk7Ci0KLSAgICAgICAgbUdlb1NjcmlwdC5zZXRfZzEwYnkxME1lc2gobTEwYnkxME1lc2gpOwotICAgICAgICBtR2VvU2NyaXB0LnNldF9nMTAwYnkxMDBNZXNoKG0xMDBieTEwME1lc2gpOwotICAgICAgICBtR2VvU2NyaXB0LnNldF9nV2J5SE1lc2gobVdieUhNZXNoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjZWFmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnBlcmZ0ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNTdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLkNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlN5c3RlbTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7Ci0KLWltcG9ydCBqYXZhLmxhbmcuUnVudGltZTsKLQotcHVibGljIGNsYXNzIFJzQmVuY2ggZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgVEFHID0gIlJzQmVuY2giOwotICAgIHB1YmxpYyBSc0JlbmNoVmlldyBtVmlldzsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLSAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAwOwotICAgICAgICBJbnRlbnQgaW50ZW50ID0gZ2V0SW50ZW50KCk7Ci0gICAgICAgIFVyaSB1cmkgPSBpbnRlbnQuZ2V0RGF0YSgpOwotICAgICAgICBpZiAodXJpICE9IG51bGwpIHsKLSAgICAgICAgICAgIC8vIHdoZW4gbGF1Y2hlZCBmcm9tIGluc3RydW1lbnRhdGlvbgotICAgICAgICAgICAgU3RyaW5nIHNjaGVtZSA9IHVyaS5nZXRTY2hlbWUoKTsKLSAgICAgICAgICAgIGlmICgiaXRlcmF0aW9ucyIuZXF1YWxzKHNjaGVtZSkpIHsKLSAgICAgICAgICAgICAgICBpdGVyYXRpb25zID0gSW50ZWdlci5wYXJzZUludCh1cmkuZ2V0U2NoZW1lU3BlY2lmaWNQYXJ0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIENyZWF0ZSBvdXIgUHJldmlldyB2aWV3IGFuZCBzZXQgaXQgYXMgdGhlIGNvbnRlbnQgb2Ygb3VyCi0gICAgICAgIC8vIEFjdGl2aXR5Ci0gICAgICAgIG1WaWV3ID0gbmV3IFJzQmVuY2hWaWV3KHRoaXMpOwotICAgICAgICBzZXRDb250ZW50VmlldyhtVmlldyk7Ci0gICAgICAgIG1WaWV3LnNldExvb3BzKGl0ZXJhdGlvbnMpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblJlc3VtZSgpOwotICAgICAgICBtVmlldy5yZXN1bWUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb3NlcyBmb2N1cwotICAgICAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgICAgIG1WaWV3LnBhdXNlKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKLSAgICAgICAgTWVudUluZmxhdGVyIGluZmxhdGVyID0gZ2V0TWVudUluZmxhdGVyKCk7Ci0gICAgICAgIGluZmxhdGVyLmluZmxhdGUoUi5tZW51LmxvYWRlcl9tZW51LCBtZW51KTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICAgICAgLy8gSGFuZGxlIGl0ZW0gc2VsZWN0aW9uCi0gICAgICAgIHN3aXRjaCAoaXRlbS5nZXRJdGVtSWQoKSkgewotICAgICAgICAgICAgY2FzZSBSLmlkLmJlbmNobWFya19hbGw6Ci0gICAgICAgICAgICAgICAgbVZpZXcuc2V0QmVuY2htYXJrTW9kZSgtMSk7Ci0gICAgICAgICAgICAgICAgbVZpZXcuc3VzcGVuZFJlbmRlcmluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFIuaWQuYmVuY2htYXJrX29uZToKLSAgICAgICAgICAgICAgICBtVmlldy5zdXNwZW5kUmVuZGVyaW5nKHRydWUpOwotICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKHRoaXMpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuc2V0VGl0bGUoIlBpY2sgYSBUZXN0Iik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zZXRJdGVtcyhtVmlldy5nZXRUZXN0TmFtZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTdGFydGluZyB0byBiZW5jaG1hcms6ICIgKyBtVmlldy5nZXRUZXN0TmFtZXMoKVtpdGVtXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc2V0QmVuY2htYXJrTW9kZShpdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1WaWV3LnN1c3BlbmRSZW5kZXJpbmcoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5zaG93KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBjYXNlIFIuaWQuZGVidWdfbW9kZToKLSAgICAgICAgICAgICAgICBtVmlldy5zdXNwZW5kUmVuZGVyaW5nKHRydWUpOwotICAgICAgICAgICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgZGVidWdCdWlsZGVyID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIodGhpcyk7Ci0gICAgICAgICAgICAgICAgZGVidWdCdWlsZGVyLnNldFRpdGxlKCJQaWNrIGEgVGVzdCIpOwotICAgICAgICAgICAgICAgIGRlYnVnQnVpbGRlci5zZXRJdGVtcyhtVmlldy5nZXRUZXN0TmFtZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpdGVtKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUb2FzdC5tYWtlVGV4dChnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTd2l0Y2hpbmcgdG86ICIgKyBtVmlldy5nZXRUZXN0TmFtZXMoKVtpdGVtXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvYXN0LkxFTkdUSF9TSE9SVCkuc2hvdygpOwotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc2V0RGVidWdNb2RlKGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbVZpZXcuc3VzcGVuZFJlbmRlcmluZyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBkZWJ1Z0J1aWxkZXIuc2hvdygpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIub25PcHRpb25zSXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hSUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWM3ZGQ1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnBlcmZ0ZXN0OwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YUtpbmQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhVHlwZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLk1pcG1hcENvbnRyb2w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbS5UZXh0dXJlVHlwZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQuUlNNZXNzYWdlSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5TYW1wbGVyLlZhbHVlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1lc2guUHJpbWl0aXZlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgUnNCZW5jaFJTIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUnNCZW5jaFJTIjsKLSAgICBpbnQgbVdpZHRoOwotICAgIGludCBtSGVpZ2h0OwotICAgIGludCBtTG9vcHM7Ci0gICAgaW50IG1DdXJyZW50TG9vcDsKLQotICAgIGludCBtQmVuY2htYXJrRGltWDsKLSAgICBpbnQgbUJlbmNobWFya0RpbVk7Ci0KLSAgICBwdWJsaWMgUnNCZW5jaFJTKCkgewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGxvb3BzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBtV2lkdGggPSB3aWR0aDsKLSAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbU1vZGUgPSAwOwotICAgICAgICBtTG9vcHMgPSBsb29wczsKLSAgICAgICAgbUN1cnJlbnRMb29wID0gMDsKLSAgICAgICAgbUJlbmNobWFya0RpbVggPSAxMjgwOwotICAgICAgICBtQmVuY2htYXJrRGltWSA9IDcyMDsKLSAgICAgICAgaW5pdFJTKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHN0b3BUZXN0ID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotCi0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVByb2dTdG9yZUJsZW5kTm9uZTsKLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUHJvZ1N0b3JlQmxlbmRBbHBoYTsKLQotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRUZXh0dXJlOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRDb2xvcjsKLQotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUHJvZ1ZlcnRleDsKLSAgICBwcml2YXRlIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyBtUFZBOwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIG1QdlByb2plY3Rpb25BbGxvYzsKLQotICAgIHByaXZhdGUgU2NyaXB0Q19yc2JlbmNoIG1TY3JpcHQ7Ci0KLSAgICBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bXSBtSW5kaXZpZHVhbFRlc3RzOwotCi0gICAgaW50IG1Nb2RlOwotCi0gICAgU3RyaW5nW10gbVRlc3ROYW1lczsKLSAgICBmbG9hdFtdIG1Mb2NhbFRlc3RSZXN1bHRzOwotCi0gICAgc3RhdGljIEFsbG9jYXRpb24gY3JlYXRlWmVyb1Rlcm1pbmF0ZWRBbGxvYyhSZW5kZXJTY3JpcHQgcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzYWdlKSB7Ci0gICAgICAgIGJ5dGVbXSBhbGxvY0FycmF5ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGFsbG9jQXJyYXkgPSBzdHIuZ2V0Qnl0ZXMoIlVURi04Iik7Ci0gICAgICAgICAgICBieXRlW10gYWxsb2NBcnJheVplcm8gPSBuZXcgYnl0ZVthbGxvY0FycmF5Lmxlbmd0aCArIDFdOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShhbGxvY0FycmF5LCAwLCBhbGxvY0FycmF5WmVybywgMCwgYWxsb2NBcnJheS5sZW5ndGgpOwotICAgICAgICAgICAgYWxsb2NBcnJheVplcm9bYWxsb2NBcnJheVplcm8ubGVuZ3RoIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgQWxsb2NhdGlvbiBhbGxvYyA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuVTgocnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NBcnJheVplcm8ubGVuZ3RoLCB1c2FnZSk7Ci0gICAgICAgICAgICBhbGxvYy5jb3B5RnJvbShhbGxvY0FycmF5WmVybyk7Ci0gICAgICAgICAgICByZXR1cm4gYWxsb2M7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gdXRmLTguIik7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHZvaWQgYXBwZW5kVGVzdHMoUnNCZW5jaEJhc2VUZXN0IHRlc3RTZXQpIHsKLSAgICAgICAgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gbmV3VGVzdHMgPSB0ZXN0U2V0LmdldFRlc3RzKCk7Ci0gICAgICAgIGlmIChtSW5kaXZpZHVhbFRlc3RzICE9IG51bGwpIHsKLSAgICAgICAgICAgIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVtdIGNvbWJpbmVkOwotICAgICAgICAgICAgY29tYmluZWQgPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW25ld1Rlc3RzLmxlbmd0aCArIG1JbmRpdmlkdWFsVGVzdHMubGVuZ3RoXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobUluZGl2aWR1YWxUZXN0cywgMCwgY29tYmluZWQsIDAsIG1JbmRpdmlkdWFsVGVzdHMubGVuZ3RoKTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobmV3VGVzdHMsIDAsIGNvbWJpbmVkLCBtSW5kaXZpZHVhbFRlc3RzLmxlbmd0aCwgbmV3VGVzdHMubGVuZ3RoKTsKLSAgICAgICAgICAgIG1JbmRpdmlkdWFsVGVzdHMgPSBjb21iaW5lZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1JbmRpdmlkdWFsVGVzdHMgPSBuZXdUZXN0czsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1tdIG5ld05hbWVzID0gdGVzdFNldC5nZXRUZXN0TmFtZXMoKTsKLSAgICAgICAgaWYgKG1UZXN0TmFtZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nW10gY29tYmluZWROYW1lczsKLSAgICAgICAgICAgIGNvbWJpbmVkTmFtZXMgPSBuZXcgU3RyaW5nW25ld05hbWVzLmxlbmd0aCArIG1UZXN0TmFtZXMubGVuZ3RoXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkobVRlc3ROYW1lcywgMCwgY29tYmluZWROYW1lcywgMCwgbVRlc3ROYW1lcy5sZW5ndGgpOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShuZXdOYW1lcywgMCwgY29tYmluZWROYW1lcywgbVRlc3ROYW1lcy5sZW5ndGgsIG5ld05hbWVzLmxlbmd0aCk7Ci0gICAgICAgICAgICBtVGVzdE5hbWVzID0gY29tYmluZWROYW1lczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1UZXN0TmFtZXMgPSBuZXdOYW1lczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY3JlYXRlVGVzdEFsbG9jYXRpb24oKSB7Ci0gICAgICAgIGludCBudW1UZXN0cyA9IG1JbmRpdmlkdWFsVGVzdHMubGVuZ3RoOwotICAgICAgICBtTG9jYWxUZXN0UmVzdWx0cyA9IG5ldyBmbG9hdFtudW1UZXN0c107Ci0gICAgICAgIFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MgYWxsVGVzdHM7Ci0gICAgICAgIGFsbFRlc3RzID0gbmV3IFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MobVJTLCBudW1UZXN0cyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVGVzdHM7IGkgKyspIHsKLSAgICAgICAgICAgIGFsbFRlc3RzLnNldChtSW5kaXZpZHVhbFRlc3RzW2ldLCBpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYWxsVGVzdHMuY29weUFsbCgpOwotICAgICAgICBtU2NyaXB0LmJpbmRfZ1Rlc3RTY3JpcHRzKGFsbFRlc3RzKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2F2ZVRlc3RSZXN1bHRzKCkgewotICAgICAgICBTdHJpbmcgc3RhdGUgPSBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZSgpOwotICAgICAgICBpZiAoIUVudmlyb25tZW50Lk1FRElBX01PVU5URUQuZXF1YWxzKHN0YXRlKSkgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAic2RjYXJkIGlzIHJlYWQgb25seSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEZpbGUgc2RDYXJkID0gRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCk7Ci0gICAgICAgIGlmICghc2RDYXJkLmNhbldyaXRlKCkpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgInNzZGNhcmQgaXMgcmVhZCBvbmx5Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBGaWxlIHJlc3VsdEZpbGUgPSBuZXcgRmlsZShzZENhcmQsICJyc2JlbmNoX3Jlc3VsdCIgKyBtQ3VycmVudExvb3AgKyAiLmNzdiIpOwotICAgICAgICByZXN1bHRGaWxlLnNldFdyaXRhYmxlKHRydWUsIGZhbHNlKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgcmVzdWx0cyA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcihyZXN1bHRGaWxlKSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1Mb2NhbFRlc3RSZXN1bHRzLmxlbmd0aDsgaSArKykgewotICAgICAgICAgICAgICAgIHJlc3VsdHMud3JpdGUobVRlc3ROYW1lc1tpXSArICIsICIgKyBtTG9jYWxUZXN0UmVzdWx0c1tpXSArICIsXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdHMuY2xvc2UoKTsKLSAgICAgICAgICAgIExvZy52KFRBRywgIlNhdmVkIHJlc3VsdHMgaW46ICIgKyByZXN1bHRGaWxlLmdldEFic29sdXRlUGF0aCgpKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAiVW5hYmxlIHRvIHdyaXRlIHJlc3VsdCBmaWxlICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGUgYSBtZXNzYWdlIGhhbmRsZXIgdG8gaGFuZGxlIG1lc3NhZ2Ugc2VudCBmcm9tIHRoZSBzY3JpcHQKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgUlNNZXNzYWdlSGFuZGxlciBtUnNNZXNzYWdlID0gbmV3IFJTTWVzc2FnZUhhbmRsZXIoKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGlmIChtSUQgPT0gbVNjcmlwdC5nZXRfUlNfTVNHX1JFU1VMVFNfUkVBRFkoKSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxvY2FsVGVzdFJlc3VsdHMubGVuZ3RoOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Mb2NhbFRlc3RSZXN1bHRzW2ldID0gRmxvYXQuaW50Qml0c1RvRmxvYXQobURhdGFbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzYXZlVGVzdFJlc3VsdHMoKTsKLSAgICAgICAgICAgICAgICBpZiAobUxvb3BzID4gMCkgewotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudExvb3AgKys7Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50TG9vcCA9IG1DdXJyZW50TG9vcCAlIG1Mb29wczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1JRCA9PSBtU2NyaXB0LmdldF9SU19NU0dfVEVTVF9ET05FKCkpIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQodGhpcykgewotICAgICAgICAgICAgICAgICAgICBzdG9wVGVzdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5QWxsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTG9nLnYoVEFHLCAiUGVyZiB0ZXN0IGdvdCB1bmV4cGVjdGVkIG1lc3NhZ2UiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgbWVzc2FnZSBmcm9tIHRoZSBzY3JpcHQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SXNGaW5pc2hlZCgpIHsKLSAgICAgICAgc3luY2hyb25pemVkKHRoaXMpIHsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN0b3BUZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndhaXQoNjAqMTAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFByb2dyYW1GcmFnbWVudCgpIHsKLQotICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgdGV4QnVpbGRlciA9IG5ldyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgdGV4QnVpbGRlci5zZXRUZXh0dXJlKFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlci5FbnZNb2RlLlJFUExBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRm9ybWF0LlJHQkEsIDApOwotICAgICAgICBtUHJvZ0ZyYWdtZW50VGV4dHVyZSA9IHRleEJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRUZXh0dXJlLmJpbmRTYW1wbGVyKFNhbXBsZXIuQ0xBTVBfTElORUFSKG1SUyksIDApOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlciBjb2xCdWlsZGVyID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBjb2xCdWlsZGVyLnNldFZhcnlpbmdDb2xvcihmYWxzZSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRDb2xvciA9IGNvbEJ1aWxkZXIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1Byb2dGcmFnbWVudFRleHR1cmUobVByb2dGcmFnbWVudFRleHR1cmUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0UHJvZ3JhbVZlcnRleCgpIHsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlciBwdmIgPSBuZXcgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBtUHJvZ1ZlcnRleCA9IHB2Yi5jcmVhdGUoKTsKLQotICAgICAgICBtUFZBID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyhtUlMpOwotICAgICAgICAoKFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKW1Qcm9nVmVydGV4KS5iaW5kQ29uc3RhbnRzKG1QVkEpOwotICAgICAgICBNYXRyaXg0ZiBwcm9qID0gbmV3IE1hdHJpeDRmKCk7Ci0gICAgICAgIHByb2oubG9hZE9ydGhvV2luZG93KG1CZW5jaG1hcmtEaW1YLCBtQmVuY2htYXJrRGltWSk7Ci0gICAgICAgIG1QVkEuc2V0UHJvamVjdGlvbihwcm9qKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUHJvZ1ZlcnRleChtUHJvZ1ZlcnRleCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgc3RybGVuKGJ5dGVbXSBhcnJheSkgewotICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICB3aGlsZShjb3VudCA8IGFycmF5Lmxlbmd0aCAmJiBhcnJheVtjb3VudF0gIT0gMCkgewotICAgICAgICAgICAgY291bnQgKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlYnVnTW9kZShpbnQgbnVtKSB7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX3NldERlYnVnTW9kZShudW0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJlbmNobWFya01vZGUoaW50IGJlbmNoTnVtKSB7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX3NldEJlbmNobWFya01vZGUoYmVuY2hOdW0pOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHBhdXNlKGJvb2xlYW4gcGF1c2UpIHsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1BhdXNlUmVuZGVyaW5nKHBhdXNlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFJTKCkgewotCi0gICAgICAgIG1TY3JpcHQgPSBuZXcgU2NyaXB0Q19yc2JlbmNoKG1SUywgbVJlcywgUi5yYXcucnNiZW5jaCk7Ci0gICAgICAgIG1SUy5iaW5kUm9vdFNjcmlwdChtU2NyaXB0KTsKLQotICAgICAgICBtUlMuc2V0TWVzc2FnZUhhbmRsZXIobVJzTWVzc2FnZSk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ01heExvb3BzKG1Mb29wcyk7Ci0KLSAgICAgICAgaW5pdFByb2dyYW1WZXJ0ZXgoKTsKLSAgICAgICAgaW5pdFByb2dyYW1GcmFnbWVudCgpOwotICAgICAgICBtU2NyaXB0LnNldF9nRm9udFNlcmlmKEZvbnQuY3JlYXRlKG1SUywgbVJlcywgInNlcmlmIiwgRm9udC5TdHlsZS5OT1JNQUwsIDgpKTsKLQotICAgICAgICBUeXBlLkJ1aWxkZXIgYiA9IG5ldyBUeXBlLkJ1aWxkZXIobVJTLCBFbGVtZW50LlJHQkFfODg4OChtUlMpKTsKLSAgICAgICAgYi5zZXRYKG1CZW5jaG1hcmtEaW1YKS5zZXRZKG1CZW5jaG1hcmtEaW1ZKTsKLSAgICAgICAgQWxsb2NhdGlvbiBvZmZzY3JlZW4gPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1JlbmRlckJ1ZmZlckNvbG9yKG9mZnNjcmVlbik7Ci0KLSAgICAgICAgYiA9IG5ldyBUeXBlLkJ1aWxkZXIobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50LmNyZWF0ZVBpeGVsKG1SUywgRGF0YVR5cGUuVU5TSUdORURfMTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFLaW5kLlBJWEVMX0RFUFRIKSk7Ci0gICAgICAgIGIuc2V0WChtQmVuY2htYXJrRGltWCkuc2V0WShtQmVuY2htYXJrRGltWSk7Ci0gICAgICAgIG9mZnNjcmVlbiA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuY3JlYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1JlbmRlckJ1ZmZlckRlcHRoKG9mZnNjcmVlbik7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dMaW5lYXJDbGFtcChTYW1wbGVyLkNMQU1QX0xJTkVBUihtUlMpKTsKLQotICAgICAgICBSc0JlbmNoQmFzZVRlc3QgdGVzdCA9IG5ldyBUZXh0VGVzdCgpOwotICAgICAgICBpZiAodGVzdC5pbml0KG1SUywgbVJlcykpIHsKLSAgICAgICAgICAgIGFwcGVuZFRlc3RzKHRlc3QpOwotICAgICAgICB9Ci0gICAgICAgIHRlc3QgPSBuZXcgRmlsbFRlc3QoKTsKLSAgICAgICAgaWYgKHRlc3QuaW5pdChtUlMsIG1SZXMpKSB7Ci0gICAgICAgICAgICBhcHBlbmRUZXN0cyh0ZXN0KTsKLSAgICAgICAgfQotICAgICAgICB0ZXN0ID0gbmV3IE1lc2hUZXN0KCk7Ci0gICAgICAgIGlmICh0ZXN0LmluaXQobVJTLCBtUmVzKSkgewotICAgICAgICAgICAgYXBwZW5kVGVzdHModGVzdCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGVzdCA9IG5ldyBUb3J1c1Rlc3QoKTsKLSAgICAgICAgaWYgKHRlc3QuaW5pdChtUlMsIG1SZXMpKSB7Ci0gICAgICAgICAgICBhcHBlbmRUZXN0cyh0ZXN0KTsKLSAgICAgICAgfQotICAgICAgICB0ZXN0ID0gbmV3IFVpVGVzdCgpOwotICAgICAgICBpZiAodGVzdC5pbml0KG1SUywgbVJlcykpIHsKLSAgICAgICAgICAgIGFwcGVuZFRlc3RzKHRlc3QpOwotICAgICAgICB9Ci0gICAgICAgIGNyZWF0ZVRlc3RBbGxvY2F0aW9uKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ0xvYWRDb21wbGV0ZSh0cnVlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaFRlc3QuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTkyMDBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Sc0JlbmNoVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQucGVyZnRlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5JbnN0cnVtZW50YXRpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UyOwotaW1wb3J0IGFuZHJvaWQudGVzdC5Ub3VjaFV0aWxzOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBUbyBydW4gdGhlIHRlc3QsIHBsZWFzZSB1c2UgY29tbWFuZAotICoKLSAqIGFkYiBzaGVsbCBhbSBpbnN0cnVtZW50IC13IGNvbS5hbmRyb2lkLnBlcmZ0ZXN0Ly5Sc1BlcmZUZXN0UnVubmVyCi0gKgotICovCi1wdWJsaWMgY2xhc3MgUnNCZW5jaFRlc3QgZXh0ZW5kcyBBY3Rpdml0eUluc3RydW1lbnRhdGlvblRlc3RDYXNlMjxSc0JlbmNoPiB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgVEFHID0gIlJzQmVuY2hUZXN0IjsKLSAgICBwcml2YXRlIGludCBpdGVyYXRpb25zID0gMDsKLSAgICBwcml2YXRlIFJzQmVuY2ggbUFjdDsKLQotICAgIHB1YmxpYyBSc0JlbmNoVGVzdCgpIHsKLSAgICAgICAgc3VwZXIoUnNCZW5jaC5jbGFzcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIuc2V0VXAoKTsKLSAgICAgICAgSW5zdHJ1bWVudGF0aW9uIG1JbnN0ID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCk7Ci0gICAgICAgIFJzUGVyZlRlc3RSdW5uZXIgbVJ1bm5lciA9IChSc1BlcmZUZXN0UnVubmVyKSBnZXRJbnN0cnVtZW50YXRpb24oKTsKLSAgICAgICAgaXRlcmF0aW9ucyA9IG1SdW5uZXIuaXRlcmF0aW9uczsKLSAgICAgICAgTG9nLnYoVEFHLCAiUnVuIGJlbmNobWFyayBmb3IgIiArIGl0ZXJhdGlvbnMgKyAiIGl0ZXJhdGlvbnMuIik7Ci0KLSAgICAgICAgVXJpIGRhdGEgPSBVcmkuZnJvbVBhcnRzKCJpdGVyYXRpb25zIiwgSW50ZWdlci50b1N0cmluZyhpdGVyYXRpb25zKSwgbnVsbCk7Ci0gICAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KEludGVudC5BQ1RJT05fTUFJTik7Ci0gICAgICAgIGludGVudC5hZGRGbGFncyhJbnRlbnQuRkxBR19BQ1RJVklUWV9ORVdfVEFTSyk7Ci0gICAgICAgIGludGVudC5zZXRDbGFzc05hbWUoImNvbS5hbmRyb2lkLnBlcmZ0ZXN0IiwgImNvbS5hbmRyb2lkLnBlcmZ0ZXN0LlJzQmVuY2giKTsKLSAgICAgICAgaW50ZW50LnNldERhdGEoZGF0YSk7Ci0gICAgICAgIG1BY3QgPSAoUnNCZW5jaCkgbUluc3Quc3RhcnRBY3Rpdml0eVN5bmMoaW50ZW50KTsKLSAgICAgICAgbUluc3Qud2FpdEZvcklkbGVTeW5jKCk7Ci0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBtQWN0LmZpbmlzaCgpOwotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJ1biB0ZXN0cyBhbmQgd2FpdCB1bnRpbCB0aGUgdGVzdCBoYXMgYmVlbiBydW4gZm9yIGl0ZXJhdGlvbnMuCi0gICAgICovCi0gICAgQExhcmdlVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSc0JlbmNoKCkgewotICAgICAgICBpZiAobUFjdC5tVmlldy50ZXN0SXNGaW5pc2hlZCgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmYWlsKCJ0ZXN0IGRpZG4ndCBzdG9wIGNvcnJlY3RseSIpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzQmVuY2hWaWV3LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI0MDcxZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNCZW5jaFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLQotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2VtYXBob3JlOwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNTdXJmYWNlVmlldzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LlJTTWVzc2FnZUhhbmRsZXI7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkJpdG1hcERyYXdhYmxlOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTW90aW9uRXZlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBSc0JlbmNoVmlldyBleHRlbmRzIFJTU3VyZmFjZVZpZXcgewotCi0gICAgcHVibGljIFJzQmVuY2hWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBwcml2YXRlIFJzQmVuY2hSUyBtUmVuZGVyOwotICAgIHByaXZhdGUgaW50IG1Mb29wcyA9IDA7Ci0KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN1cGVyLnN1cmZhY2VDaGFuZ2VkKGhvbGRlciwgZm9ybWF0LCB3LCBoKTsKLSAgICAgICAgaWYgKG1SUyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjID0gbmV3IFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcoKTsKLSAgICAgICAgICAgIHNjLnNldERlcHRoKDE2LCAyNCk7Ci0gICAgICAgICAgICBtUlMgPSBjcmVhdGVSZW5kZXJTY3JpcHRHTChzYyk7Ci0gICAgICAgICAgICBtUlMuc2V0U3VyZmFjZShob2xkZXIsIHcsIGgpOwotICAgICAgICAgICAgbVJlbmRlciA9IG5ldyBSc0JlbmNoUlMoKTsKLSAgICAgICAgICAgIExvZy52KCJSc0JlbmNoVmlldyIsICJtTG9vcHMgPSAiICsgbUxvb3BzKTsKLSAgICAgICAgICAgIG1SZW5kZXIuaW5pdChtUlMsIGdldFJlc291cmNlcygpLCB3LCBoLCBtTG9vcHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7Ci0gICAgICAgIGlmIChtUlMgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJTID0gbnVsbDsKLSAgICAgICAgICAgIGRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgbG9vcHMgdGhlIGJlbmNobWFyayB0ZXN0cyB3aWxsIHJ1bgotICAgICAqIGJlZm9yZSB0aGUgdGVzdCByZXN1bHRzIGFyZSBjb2xsZWN0ZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TG9vcHMoaW50IGl0ZXJhdGlvbnMpIHsKLSAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPiAwKSB7Ci0gICAgICAgICAgICBtTG9vcHMgPSBpdGVyYXRpb25zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgbWVzc2FnZSBmcm9tIHRoZSBzY3JpcHQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiB0ZXN0SXNGaW5pc2hlZCgpIHsKLSAgICAgICAgcmV0dXJuIG1SZW5kZXIudGVzdElzRmluaXNoZWQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEJlbmNobWFya01vZGUoaW50IGJlbmNoTnVtKSB7Ci0gICAgICAgIG1SZW5kZXIuc2V0QmVuY2htYXJrTW9kZShiZW5jaE51bSk7Ci0gICAgfQotCi0gICAgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKGJvb2xlYW4gcGF1c2UpIHsKLSAgICAgICAgbVJlbmRlci5wYXVzZShwYXVzZSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXREZWJ1Z01vZGUoaW50IG51bSkgewotICAgICAgICBtUmVuZGVyLnNldERlYnVnTW9kZShudW0pOwotICAgIH0KLQotICAgIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpIHsKLSAgICAgICAgcmV0dXJuIG1SZW5kZXIubVRlc3ROYW1lczsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNQZXJmVGVzdFJ1bm5lci5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1JzUGVyZlRlc3RSdW5uZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMxYWY2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvUnNQZXJmVGVzdFJ1bm5lci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQucGVyZnRlc3Q7Ci0KLS8vaW1wb3J0IGNvbS5hbmRyb2lkLnBlcmZ0ZXN0LlJzQmVuY2hUZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RSdW5uZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RTdWl0ZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogUnVuIHRoZSBSZW5kZXJTY3JpcHQgUGVyZm9ybWFuY2UgVGVzdAotICogYWRiIHNoZWxsIGFtIGluc3RydW1lbnQgLXcgY29tLmFuZHJvaWQucGVyZnRlc3QvLlJzUGVyZlRlc3RSdW5uZXIKLSAqCi0gKiB3aXRoIHNwZWNpZmllZCBpdGVyYXRpb25zOgotICogYWRiIHNoZWxsIGFtIGluc3RydW1lbnQgLWUgaXRlcmF0aW9ucyA8bj4gLXcgY29tLmFuZHJvaWQucGVyZnRlc3QvLlJzUGVyZlRlc3RSdW5uZXIKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBSc1BlcmZUZXN0UnVubmVyIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciB7Ci0gICAgcHVibGljIGludCBpdGVyYXRpb25zID0gMTA7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgVGVzdFN1aXRlIGdldEFsbFRlc3RzKCkgewotICAgICAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgSW5zdHJ1bWVudGF0aW9uVGVzdFN1aXRlKHRoaXMpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoUnNCZW5jaFRlc3QuY2xhc3MpOwotICAgICAgICByZXR1cm4gc3VpdGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotICAgICAgICBTdHJpbmcgc3RyVmFsdWUgPSAoU3RyaW5nKWljaWNsZS5nZXQoIml0ZXJhdGlvbnMiKTsKLSAgICAgICAgaWYgKHN0clZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludCBpbnRWYWx1ZSA9IEludGVnZXIucGFyc2VJbnQoc3RyVmFsdWUpOwotICAgICAgICAgICAgaWYgKGl0ZXJhdGlvbnMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgaXRlcmF0aW9ucyA9IGludFZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1RleHRUZXN0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhMjc5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvVGV4dFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnBlcmZ0ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQudXRpbC5EaXNwbGF5TWV0cmljczsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLQotcHVibGljIGNsYXNzIFRleHRUZXN0IGltcGxlbWVudHMgUnNCZW5jaEJhc2VUZXN0ewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUZXh0VGVzdCI7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLQotICAgIHByaXZhdGUgU2NyaXB0Q190ZXh0X3Rlc3QgbVRleHRTY3JpcHQ7Ci0gICAgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gbVRlc3RzOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtTmFtZXMgPSB7Ci0gICAgICAgICJGaWxsIHNjcmVlbiB3aXRoIHRleHQgMSB0aW1lIiwKLSAgICAgICAgIkZpbGwgc2NyZWVuIHdpdGggdGV4dCAzIHRpbWVzIiwKLSAgICAgICAgIkZpbGwgc2NyZWVuIHdpdGggdGV4dCA1IHRpbWVzIgotICAgIH07Ci0KLSAgICBwdWJsaWMgVGV4dFRlc3QoKSB7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRUZXN0KGludCBpbmRleCwgaW50IGZpbGxOdW0pIHsKLSAgICAgICAgbVRlc3RzW2luZGV4XSA9IG5ldyBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW0oKTsKLSAgICAgICAgbVRlc3RzW2luZGV4XS50ZXN0U2NyaXB0ID0gbVRleHRTY3JpcHQ7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdE5hbWUgPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLmRlYnVnTmFtZSA9IFJzQmVuY2hSUy5jcmVhdGVaZXJvVGVybWluYXRlZEFsbG9jKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0KLSAgICAgICAgU2NyaXB0RmllbGRfVGV4dFRlc3REYXRhX3MuSXRlbSBkYXRhSXRlbSA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0VGVzdERhdGFfcy5JdGVtKCk7Ci0gICAgICAgIGRhdGFJdGVtLmZpbGxOdW0gPSBmaWxsTnVtOwotICAgICAgICBTY3JpcHRGaWVsZF9UZXh0VGVzdERhdGFfcyB0ZXN0RGF0YSA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0VGVzdERhdGFfcyhtUlMsIDEpOwotICAgICAgICB0ZXN0RGF0YS5zZXQoZGF0YUl0ZW0sIDAsIHRydWUpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLnRlc3REYXRhID0gdGVzdERhdGEuZ2V0QWxsb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIG1SZXMgPSByZXM7Ci0gICAgICAgIGluaXRUZXh0U2NyaXB0KCk7Ci0gICAgICAgIG1UZXN0cyA9IG5ldyBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bbU5hbWVzLmxlbmd0aF07Ci0KLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAxIC8qZmlsbE51bSovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAzIC8qZmlsbE51bSovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCA1IC8qZmlsbE51bSovKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gZ2V0VGVzdHMoKSB7Ci0gICAgICAgIHJldHVybiBtVGVzdHM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpIHsKLSAgICAgICAgcmV0dXJuIG1OYW1lczsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRUZXh0U2NyaXB0KCkgewotICAgICAgICBEaXNwbGF5TWV0cmljcyBtZXRyaWNzID0gbVJlcy5nZXREaXNwbGF5TWV0cmljcygpOwotCi0gICAgICAgIG1UZXh0U2NyaXB0ID0gbmV3IFNjcmlwdENfdGV4dF90ZXN0KG1SUywgbVJlcywgUi5yYXcudGV4dF90ZXN0KTsKLSAgICAgICAgbVRleHRTY3JpcHQuc2V0X2dGb250U2FucyhGb250LmNyZWF0ZShtUlMsIG1SZXMsICJzYW5zLXNlcmlmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb250LlN0eWxlLk5PUk1BTCwgOC4wZiAvIG1ldHJpY3MuZGVuc2l0eSkpOwotICAgICAgICBtVGV4dFNjcmlwdC5zZXRfZ0ZvbnRTZXJpZihGb250LmNyZWF0ZShtUlMsIG1SZXMsICJzZXJpZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvbnQuU3R5bGUuTk9STUFMLCA4LjBmIC8gbWV0cmljcy5kZW5zaXR5KSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1RvcnVzVGVzdC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1RvcnVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzllY2Q1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9Ub3J1c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5wZXJmdGVzdDsKLQotaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudC5EYXRhS2luZDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFUeXBlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24uTWlwbWFwQ29udHJvbDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtLlRleHR1cmVUeXBlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdC5SU01lc3NhZ2VIYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1lc2guUHJpbWl0aXZlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotCi1wdWJsaWMgY2xhc3MgVG9ydXNUZXN0IGltcGxlbWVudHMgUnNCZW5jaEJhc2VUZXN0ewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUb3J1c1Rlc3QiOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0KLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUHJvZ1N0b3JlQmxlbmROb25lRGVwdGg7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtU3RvcmUgbVByb2dTdG9yZUJsZW5kTm9uZTsKLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUHJvZ1N0b3JlQmxlbmRBbHBoYTsKLQotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRUZXh0dXJlOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRDb2xvcjsKLQotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUHJvZ1ZlcnRleDsKLSAgICBwcml2YXRlIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyBtUFZBOwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIG1QdlByb2plY3Rpb25BbGxvYzsKLQotICAgIC8vIEN1c3RvbSBzaGFkZXJzCi0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1Qcm9nVmVydGV4Q3VzdG9tOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1Qcm9nRnJhZ21lbnRDdXN0b207Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudE11bHRpdGV4OwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleCBtUHJvZ1ZlcnRleFBpeGVsTGlnaHQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1Qcm9nVmVydGV4UGl4ZWxMaWdodE1vdmU7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtRnJhZ21lbnQgbVByb2dGcmFnbWVudFBpeGVsTGlnaHQ7Ci0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9WZXJ0ZXhTaGFkZXJDb25zdGFudHNfcyBtVlNDb25zdDsKLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX0ZyYWdlbnRTaGFkZXJDb25zdGFudHNfcyBtRlNDb25zdDsKLSAgICBwcml2YXRlIFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlckNvbnN0YW50czNfcyBtVlNDb25zdFBpeGVsOwotICAgIHByaXZhdGUgU2NyaXB0RmllbGRfRnJhZ2VudFNoYWRlckNvbnN0YW50czNfcyBtRlNDb25zdFBpeGVsOwotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1UZXhUb3J1czsKLSAgICBwcml2YXRlIE1lc2ggbVRvcnVzOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRDX3RvcnVzX3Rlc3QgbVRvcnVzU2NyaXB0OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBCaXRtYXBGYWN0b3J5Lk9wdGlvbnMgbU9wdGlvbnNBUkdCID0gbmV3IEJpdG1hcEZhY3RvcnkuT3B0aW9ucygpOwotCi0gICAgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gbVRlc3RzOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmdbXSBtTmFtZXMgPSB7Ci0gICAgICAgICJHZW8gdGVzdCAyNS42ayBmbGF0IGNvbG9yIiwKLSAgICAgICAgIkdlbyB0ZXN0IDUxLjJrIGZsYXQgY29sb3IiLAotICAgICAgICAiR2VvIHRlc3QgMjA0LjhrIHNtYWxsIHRyaWVzIGZsYXQgY29sb3IiLAotICAgICAgICAiR2VvIHRlc3QgMjUuNmsgc2luZ2xlIHRleHR1cmUiLAotICAgICAgICAiR2VvIHRlc3QgNTEuMmsgc2luZ2xlIHRleHR1cmUiLAotICAgICAgICAiR2VvIHRlc3QgMjA0LjhrIHNtYWxsIHRyaWVzIHNpbmdsZSB0ZXh0dXJlIiwKLSAgICAgICAgIkdlbyB0ZXN0IDI1LjZrIGdlbyBoZWF2eSB2ZXJ0ZXgiLAotICAgICAgICAiR2VvIHRlc3QgNTEuMmsgZ2VvIGhlYXZ5IHZlcnRleCIsCi0gICAgICAgICJHZW8gdGVzdCAyMDQuOGsgZ2VvIHJhc3RlciBsb2FkIGhlYXZ5IHZlcnRleCIsCi0gICAgICAgICJHZW8gdGVzdCAyNS42ayBoZWF2eSBmcmFnbWVudCIsCi0gICAgICAgICJHZW8gdGVzdCA1MS4yayBoZWF2eSBmcmFnbWVudCIsCi0gICAgICAgICJHZW8gdGVzdCAyMDQuOGsgc21hbGwgdHJpZXMgaGVhdnkgZnJhZ21lbnQiLAotICAgICAgICAiR2VvIHRlc3QgMjUuNmsgaGVhdnkgZnJhZ21lbnQgaGVhdnkgdmVydGV4IiwKLSAgICAgICAgIkdlbyB0ZXN0IDUxLjJrIGhlYXZ5IGZyYWdtZW50IGhlYXZ5IHZlcnRleCIsCi0gICAgICAgICJHZW8gdGVzdCAyMDQuOGsgc21hbGwgdHJpZXMgaGVhdnkgZnJhZ21lbnQgaGVhdnkgdmVydGV4IgotICAgIH07Ci0KLSAgICBwdWJsaWMgVG9ydXNUZXN0KCkgewotICAgIH0KLQotICAgIHZvaWQgYWRkVGVzdChpbnQgaW5kZXgsIGludCB0ZXN0SWQsIGludCB1c2VyMSwgaW50IHVzZXIyKSB7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0gPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtKCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdFNjcmlwdCA9IG1Ub3J1c1NjcmlwdDsKLSAgICAgICAgbVRlc3RzW2luZGV4XS50ZXN0TmFtZSA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbVN0cmluZyhtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWVzW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0uZGVidWdOYW1lID0gUnNCZW5jaFJTLmNyZWF0ZVplcm9UZXJtaW5hdGVkQWxsb2MobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotCi0gICAgICAgIFNjcmlwdEZpZWxkX1RvcnVzVGVzdERhdGFfcy5JdGVtIGRhdGFJdGVtID0gbmV3IFNjcmlwdEZpZWxkX1RvcnVzVGVzdERhdGFfcy5JdGVtKCk7Ci0gICAgICAgIGRhdGFJdGVtLnRlc3RJZCA9IHRlc3RJZDsKLSAgICAgICAgZGF0YUl0ZW0udXNlcjEgPSB1c2VyMTsKLSAgICAgICAgZGF0YUl0ZW0udXNlcjIgPSB1c2VyMjsKLSAgICAgICAgU2NyaXB0RmllbGRfVG9ydXNUZXN0RGF0YV9zIHRlc3REYXRhID0gbmV3IFNjcmlwdEZpZWxkX1RvcnVzVGVzdERhdGFfcyhtUlMsIDEpOwotICAgICAgICB0ZXN0RGF0YS5zZXQoZGF0YUl0ZW0sIDAsIHRydWUpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLnRlc3REYXRhID0gdGVzdERhdGEuZ2V0QWxsb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIG1SZXMgPSByZXM7Ci0gICAgICAgIGluaXRDdXN0b21TaGFkZXJzKCk7Ci0gICAgICAgIGxvYWRJbWFnZXMoKTsKLSAgICAgICAgaW5pdE1lc2goKTsKLSAgICAgICAgaW5pdFRvcnVzU2NyaXB0KCk7Ci0gICAgICAgIG1UZXN0cyA9IG5ldyBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bbU5hbWVzLmxlbmd0aF07Ci0KLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAwLCAwIC8qdXNlVGV4dHVyZSovLCAxIC8qbnVtTWVzaGVzKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDAsIDAgLyp1c2VUZXh0dXJlKi8sIDIgLypudW1NZXNoZXMqLyk7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMCwgMCAvKnVzZVRleHR1cmUqLywgOCAvKm51bU1lc2hlcyovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAwLCAxIC8qdXNlVGV4dHVyZSovLCAxIC8qbnVtTWVzaGVzKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDAsIDEgLyp1c2VUZXh0dXJlKi8sIDIgLypudW1NZXNoZXMqLyk7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMCwgMSAvKnVzZVRleHR1cmUqLywgOCAvKm51bU1lc2hlcyovKTsKLQotICAgICAgICAvLyBTZWNvbnQgdGVzdAotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDEsIDEgLypudW1NZXNoZXMqLywgMCAvKnVudXNlZCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAxLCAyIC8qbnVtTWVzaGVzKi8sIDAgLyp1bnVzZWQqLyk7Ci0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMSwgOCAvKm51bU1lc2hlcyovLCAwIC8qdW51c2VkKi8pOwotCi0gICAgICAgIC8vIFRoaXJkIHRlc3QKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCAxIC8qbnVtTWVzaGVzKi8sIDAgLypoZWF2eVZlcnRleCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCAyIC8qbnVtTWVzaGVzKi8sIDAgLypoZWF2eVZlcnRleCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCA4IC8qbnVtTWVzaGVzKi8sIDAgLypoZWF2eVZlcnRleCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCAxIC8qbnVtTWVzaGVzKi8sIDEgLypoZWF2eVZlcnRleCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCAyIC8qbnVtTWVzaGVzKi8sIDEgLypoZWF2eVZlcnRleCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAyLCA4IC8qbnVtTWVzaGVzKi8sIDEgLypoZWF2eVZlcnRleCovKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gZ2V0VGVzdHMoKSB7Ci0gICAgICAgIHJldHVybiBtVGVzdHM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpIHsKLSAgICAgICAgcmV0dXJuIG1OYW1lczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdEN1c3RvbVNoYWRlcnMoKSB7Ci0gICAgICAgIG1WU0NvbnN0ID0gbmV3IFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlckNvbnN0YW50c19zKG1SUywgMSk7Ci0gICAgICAgIG1GU0NvbnN0ID0gbmV3IFNjcmlwdEZpZWxkX0ZyYWdlbnRTaGFkZXJDb25zdGFudHNfcyhtUlMsIDEpOwotCi0gICAgICAgIG1WU0NvbnN0UGl4ZWwgPSBuZXcgU2NyaXB0RmllbGRfVmVydGV4U2hhZGVyQ29uc3RhbnRzM19zKG1SUywgMSk7Ci0gICAgICAgIG1GU0NvbnN0UGl4ZWwgPSBuZXcgU2NyaXB0RmllbGRfRnJhZ2VudFNoYWRlckNvbnN0YW50czNfcyhtUlMsIDEpOwotCi0gICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHNoYWRlciBidWlsZGVyCi0gICAgICAgIFByb2dyYW1WZXJ0ZXguQnVpbGRlciBwdmJDdXN0b20gPSBuZXcgUHJvZ3JhbVZlcnRleC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIC8vIFNwZWNpZnkgdGhlIHJlc291cmNlIHRoYXQgY29udGFpbnMgdGhlIHNoYWRlciBzdHJpbmcKLSAgICAgICAgcHZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5zaGFkZXJ2KTsKLSAgICAgICAgLy8gVXNlIGEgc2NyaXB0IGZpZWxkIHRvIHNwZWNpZnkgdGhlIGlucHV0IGxheW91dAotICAgICAgICBwdmJDdXN0b20uYWRkSW5wdXQoU2NyaXB0RmllbGRfVmVydGV4U2hhZGVySW5wdXRzX3MuY3JlYXRlRWxlbWVudChtUlMpKTsKLSAgICAgICAgLy8gRGVmaW5lIHRoZSBjb25zdGFudCBpbnB1dCBsYXlvdXQKLSAgICAgICAgcHZiQ3VzdG9tLmFkZENvbnN0YW50KG1WU0NvbnN0LmdldEFsbG9jYXRpb24oKS5nZXRUeXBlKCkpOwotICAgICAgICBtUHJvZ1ZlcnRleEN1c3RvbSA9IHB2YkN1c3RvbS5jcmVhdGUoKTsKLSAgICAgICAgLy8gQmluZCB0aGUgc291cmNlIG9mIGNvbnN0YW50IGRhdGEKLSAgICAgICAgbVByb2dWZXJ0ZXhDdXN0b20uYmluZENvbnN0YW50cyhtVlNDb25zdC5nZXRBbGxvY2F0aW9uKCksIDApOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudC5CdWlsZGVyIHBmYkN1c3RvbSA9IG5ldyBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlcihtUlMpOwotICAgICAgICAvLyBTcGVjaWZ5IHRoZSByZXNvdXJjZSB0aGF0IGNvbnRhaW5zIHRoZSBzaGFkZXIgc3RyaW5nCi0gICAgICAgIHBmYkN1c3RvbS5zZXRTaGFkZXIobVJlcywgUi5yYXcuc2hhZGVyZik7Ci0gICAgICAgIC8vIFRlbGwgdGhlIGJ1aWxkZXIgaG93IG1hbnkgdGV4dHVyZXMgd2UgaGF2ZQotICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfMkQpOwotICAgICAgICAvLyBEZWZpbmUgdGhlIGNvbnN0YW50IGlucHV0IGxheW91dAotICAgICAgICBwZmJDdXN0b20uYWRkQ29uc3RhbnQobUZTQ29uc3QuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRDdXN0b20gPSBwZmJDdXN0b20uY3JlYXRlKCk7Ci0gICAgICAgIC8vIEJpbmQgdGhlIHNvdXJjZSBvZiBjb25zdGFudCBkYXRhCi0gICAgICAgIG1Qcm9nRnJhZ21lbnRDdXN0b20uYmluZENvbnN0YW50cyhtRlNDb25zdC5nZXRBbGxvY2F0aW9uKCksIDApOwotCi0gICAgICAgIHB2YkN1c3RvbSA9IG5ldyBQcm9ncmFtVmVydGV4LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcHZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5zaGFkZXIydik7Ci0gICAgICAgIHB2YkN1c3RvbS5hZGRJbnB1dChTY3JpcHRGaWVsZF9WZXJ0ZXhTaGFkZXJJbnB1dHNfcy5jcmVhdGVFbGVtZW50KG1SUykpOwotICAgICAgICBwdmJDdXN0b20uYWRkQ29uc3RhbnQobVZTQ29uc3RQaXhlbC5nZXRBbGxvY2F0aW9uKCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgbVByb2dWZXJ0ZXhQaXhlbExpZ2h0ID0gcHZiQ3VzdG9tLmNyZWF0ZSgpOwotICAgICAgICBtUHJvZ1ZlcnRleFBpeGVsTGlnaHQuYmluZENvbnN0YW50cyhtVlNDb25zdFBpeGVsLmdldEFsbG9jYXRpb24oKSwgMCk7Ci0KLSAgICAgICAgcHZiQ3VzdG9tID0gbmV3IFByb2dyYW1WZXJ0ZXguQnVpbGRlcihtUlMpOwotICAgICAgICBwdmJDdXN0b20uc2V0U2hhZGVyKG1SZXMsIFIucmF3LnNoYWRlcjJtb3Zldik7Ci0gICAgICAgIHB2YkN1c3RvbS5hZGRJbnB1dChTY3JpcHRGaWVsZF9WZXJ0ZXhTaGFkZXJJbnB1dHNfcy5jcmVhdGVFbGVtZW50KG1SUykpOwotICAgICAgICBwdmJDdXN0b20uYWRkQ29uc3RhbnQobVZTQ29uc3RQaXhlbC5nZXRBbGxvY2F0aW9uKCkuZ2V0VHlwZSgpKTsKLSAgICAgICAgbVByb2dWZXJ0ZXhQaXhlbExpZ2h0TW92ZSA9IHB2YkN1c3RvbS5jcmVhdGUoKTsKLSAgICAgICAgbVByb2dWZXJ0ZXhQaXhlbExpZ2h0TW92ZS5iaW5kQ29uc3RhbnRzKG1WU0NvbnN0UGl4ZWwuZ2V0QWxsb2NhdGlvbigpLCAwKTsKLQotICAgICAgICBwZmJDdXN0b20gPSBuZXcgUHJvZ3JhbUZyYWdtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcGZiQ3VzdG9tLnNldFNoYWRlcihtUmVzLCBSLnJhdy5zaGFkZXIyZik7Ci0gICAgICAgIHBmYkN1c3RvbS5hZGRUZXh0dXJlKFByb2dyYW0uVGV4dHVyZVR5cGUuVEVYVFVSRV8yRCk7Ci0gICAgICAgIHBmYkN1c3RvbS5hZGRDb25zdGFudChtRlNDb25zdFBpeGVsLmdldEFsbG9jYXRpb24oKS5nZXRUeXBlKCkpOwotICAgICAgICBtUHJvZ0ZyYWdtZW50UGl4ZWxMaWdodCA9IHBmYkN1c3RvbS5jcmVhdGUoKTsKLSAgICAgICAgbVByb2dGcmFnbWVudFBpeGVsTGlnaHQuYmluZENvbnN0YW50cyhtRlNDb25zdFBpeGVsLmdldEFsbG9jYXRpb24oKSwgMCk7Ci0KLSAgICAgICAgcGZiQ3VzdG9tID0gbmV3IFByb2dyYW1GcmFnbWVudC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIHBmYkN1c3RvbS5zZXRTaGFkZXIobVJlcywgUi5yYXcubXVsdGl0ZXhmKTsKLSAgICAgICAgZm9yIChpbnQgdGV4Q291bnQgPSAwOyB0ZXhDb3VudCA8IDM7IHRleENvdW50ICsrKSB7Ci0gICAgICAgICAgICBwZmJDdXN0b20uYWRkVGV4dHVyZShQcm9ncmFtLlRleHR1cmVUeXBlLlRFWFRVUkVfMkQpOwotICAgICAgICB9Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRNdWx0aXRleCA9IHBmYkN1c3RvbS5jcmVhdGUoKTsKLQotICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgY29sQnVpbGRlciA9IG5ldyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgY29sQnVpbGRlci5zZXRWYXJ5aW5nQ29sb3IoZmFsc2UpOwotICAgICAgICBtUHJvZ0ZyYWdtZW50Q29sb3IgPSBjb2xCdWlsZGVyLmNyZWF0ZSgpOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlciB0ZXhCdWlsZGVyID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICB0ZXhCdWlsZGVyLnNldFRleHR1cmUoUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkVudk1vZGUuUkVQTEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlci5Gb3JtYXQuUkdCQSwgMCk7Ci0gICAgICAgIG1Qcm9nRnJhZ21lbnRUZXh0dXJlID0gdGV4QnVpbGRlci5jcmVhdGUoKTsKLQotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIHB2YiA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIG1Qcm9nVmVydGV4ID0gcHZiLmNyZWF0ZSgpOwotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMgUFZBID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyhtUlMpOwotICAgICAgICAoKFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKW1Qcm9nVmVydGV4KS5iaW5kQ29uc3RhbnRzKFBWQSk7Ci0gICAgICAgIE1hdHJpeDRmIHByb2ogPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgcHJvai5sb2FkT3J0aG9XaW5kb3coMTI4MCwgNzIwKTsKLSAgICAgICAgUFZBLnNldFByb2plY3Rpb24ocHJvaik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIGxvYWRUZXh0dXJlUkdCKGludCBpZCkgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvbi5jcmVhdGVGcm9tQml0bWFwUmVzb3VyY2UobVJTLCBtUmVzLCBpZCwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkSW1hZ2VzKCkgewotICAgICAgICBtVGV4VG9ydXMgPSBsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLnRvcnVzbWFwKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdE1lc2goKSB7Ci0gICAgICAgIEZpbGVBM0QgbW9kZWwgPSBGaWxlQTNELmNyZWF0ZUZyb21SZXNvdXJjZShtUlMsIG1SZXMsIFIucmF3LnRvcnVzKTsKLSAgICAgICAgRmlsZUEzRC5JbmRleEVudHJ5IGVudHJ5ID0gbW9kZWwuZ2V0SW5kZXhFbnRyeSgwKTsKLSAgICAgICAgaWYgKGVudHJ5ID09IG51bGwgfHwgZW50cnkuZ2V0RW50cnlUeXBlKCkgIT0gRmlsZUEzRC5FbnRyeVR5cGUuTUVTSCkgewotICAgICAgICAgICAgTG9nLmUoInJzIiwgImNvdWxkIG5vdCBsb2FkIG1vZGVsIik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtVG9ydXMgPSAoTWVzaCllbnRyeS5nZXRPYmplY3QoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgaW5pdFRvcnVzU2NyaXB0KCkgewotICAgICAgICBtVG9ydXNTY3JpcHQgPSBuZXcgU2NyaXB0Q190b3J1c190ZXN0KG1SUywgbVJlcywgUi5yYXcudG9ydXNfdGVzdCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ0N1bGxGcm9udChQcm9ncmFtUmFzdGVyLkNVTExfRlJPTlQobVJTKSk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ0N1bGxCYWNrKFByb2dyYW1SYXN0ZXIuQ1VMTF9CQUNLKG1SUykpOwotICAgICAgICBtVG9ydXNTY3JpcHQuc2V0X2dMaW5lYXJDbGFtcChTYW1wbGVyLkNMQU1QX0xJTkVBUihtUlMpKTsKLSAgICAgICAgbVRvcnVzU2NyaXB0LnNldF9nVG9ydXNNZXNoKG1Ub3J1cyk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ1RleFRvcnVzKG1UZXhUb3J1cyk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXhDdXN0b20obVByb2dWZXJ0ZXhDdXN0b20pOwotICAgICAgICBtVG9ydXNTY3JpcHQuc2V0X2dQcm9nRnJhZ21lbnRDdXN0b20obVByb2dGcmFnbWVudEN1c3RvbSk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXhQaXhlbExpZ2h0KG1Qcm9nVmVydGV4UGl4ZWxMaWdodCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXhQaXhlbExpZ2h0TW92ZShtUHJvZ1ZlcnRleFBpeGVsTGlnaHRNb3ZlKTsKLSAgICAgICAgbVRvcnVzU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50UGl4ZWxMaWdodChtUHJvZ0ZyYWdtZW50UGl4ZWxMaWdodCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5iaW5kX2dWU0NvbnN0UGl4ZWwobVZTQ29uc3RQaXhlbCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5iaW5kX2dGU0NvbnN0UGl4ZWwobUZTQ29uc3RQaXhlbCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5iaW5kX2dWU0NvbnN0YW50cyhtVlNDb25zdCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5iaW5kX2dGU0NvbnN0YW50cyhtRlNDb25zdCk7Ci0gICAgICAgIG1Ub3J1c1NjcmlwdC5zZXRfZ1Byb2dWZXJ0ZXgobVByb2dWZXJ0ZXgpOwotICAgICAgICBtVG9ydXNTY3JpcHQuc2V0X2dQcm9nRnJhZ21lbnRUZXh0dXJlKG1Qcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICAgICAgbVRvcnVzU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50Q29sb3IobVByb2dGcmFnbWVudENvbG9yKTsKLSAgICAgICAgbVRvcnVzU2NyaXB0LnNldF9nUHJvZ1N0b3JlQmxlbmROb25lRGVwdGgobVByb2dTdG9yZUJsZW5kTm9uZURlcHRoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvVWlUZXN0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvVWlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YjU4YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L1VpVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnBlcmZ0ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFLaW5kOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW0uVGV4dHVyZVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmUuQmxlbmRTcmNGdW5jOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5CbGVuZERzdEZ1bmM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0LlJTTWVzc2FnZUhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWVzaC5QcmltaXRpdmU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb247Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0KLXB1YmxpYyBjbGFzcyBVaVRlc3QgaW1wbGVtZW50cyBSc0JlbmNoQmFzZVRlc3R7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlVpVGVzdCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNBTVBMRV9URVhUID0gIkJlbmNoIFRlc3QiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSVNUX1RFWFQgPQotICAgICAgIlRoaXMgaXMgYSBzYW1wbGUgbGlzdCBvZiB0ZXh0IHRvIHNob3cgaW4gdGhlIGxpc3QgdmlldyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IFBBUlRJQ0xFU19DT1VOVCA9IDEyMDAwOwotCi0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLQotICAgIEZvbnQgbUZvbnRTYW5zOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MgbVRleHR1cmVBbGxvY3M7Ci0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MgbVNhbXBsZVRleHRBbGxvY3M7Ci0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MgbVNhbXBsZUxpc3RWaWV3QWxsb2NzOwotICAgIHByaXZhdGUgU2NyaXB0RmllbGRfVnBDb25zdHMgbVB2U3RhckFsbG9jOwotICAgIHByaXZhdGUgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIG1QdlByb2plY3Rpb25BbGxvYzsKLQotICAgIHByaXZhdGUgTWVzaCBtU2luZ2xlTWVzaDsKLSAgICBwcml2YXRlIE1lc2ggbVBhcnRpY2xlc01lc2g7Ci0KLSAgICBwcml2YXRlIFNjcmlwdENfdWlfdGVzdCBtVWlTY3JpcHQ7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEJpdG1hcEZhY3RvcnkuT3B0aW9ucyBtT3B0aW9uc0FSR0IgPSBuZXcgQml0bWFwRmFjdG9yeS5PcHRpb25zKCk7Ci0KLSAgICBTY3JpcHRGaWVsZF9UZXN0U2NyaXB0c19zLkl0ZW1bXSBtVGVzdHM7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1OYW1lcyA9IHsKLSAgICAgICAgIlVJIHRlc3Qgd2l0aCBpY29uIGRpc3BsYXkgMTAgYnkgMTAiLAotICAgICAgICAiVUkgdGVzdCB3aXRoIGljb24gZGlzcGxheSAxMDAgYnkgMTAwIiwKLSAgICAgICAgIlVJIHRlc3Qgd2l0aCBpbWFnZSBhbmQgdGV4dCBkaXNwbGF5IDMgcGFnZXMiLAotICAgICAgICAiVUkgdGVzdCB3aXRoIGltYWdlIGFuZCB0ZXh0IGRpc3BsYXkgNSBwYWdlcyIsCi0gICAgICAgICJVSSB0ZXN0IHdpdGggbGlzdCB2aWV3IiwKLSAgICAgICAgIlVJIHRlc3Qgd2l0aCBsaXZlIHdhbGxwYXBlciIKLSAgICB9OwotCi0gICAgcHVibGljIFVpVGVzdCgpIHsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZFRlc3QoaW50IGluZGV4LCBpbnQgdGVzdElkLCBpbnQgdXNlcjEsIGludCB1c2VyMiwgaW50IHVzZXIzKSB7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0gPSBuZXcgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtKCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0udGVzdFNjcmlwdCA9IG1VaVNjcmlwdDsKLSAgICAgICAgbVRlc3RzW2luZGV4XS50ZXN0TmFtZSA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbVN0cmluZyhtUlMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU5hbWVzW2luZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgIG1UZXN0c1tpbmRleF0uZGVidWdOYW1lID0gUnNCZW5jaFJTLmNyZWF0ZVplcm9UZXJtaW5hdGVkQWxsb2MobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1OYW1lc1tpbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotCi0gICAgICAgIFNjcmlwdEZpZWxkX1VpVGVzdERhdGFfcy5JdGVtIGRhdGFJdGVtID0gbmV3IFNjcmlwdEZpZWxkX1VpVGVzdERhdGFfcy5JdGVtKCk7Ci0gICAgICAgIGRhdGFJdGVtLnRlc3RJZCA9IHRlc3RJZDsKLSAgICAgICAgZGF0YUl0ZW0udXNlcjEgPSB1c2VyMTsKLSAgICAgICAgZGF0YUl0ZW0udXNlcjIgPSB1c2VyMjsKLSAgICAgICAgZGF0YUl0ZW0udXNlcjMgPSB1c2VyMzsKLSAgICAgICAgU2NyaXB0RmllbGRfVWlUZXN0RGF0YV9zIHRlc3REYXRhID0gbmV3IFNjcmlwdEZpZWxkX1VpVGVzdERhdGFfcyhtUlMsIDEpOwotICAgICAgICB0ZXN0RGF0YS5zZXQoZGF0YUl0ZW0sIDAsIHRydWUpOwotICAgICAgICBtVGVzdHNbaW5kZXhdLnRlc3REYXRhID0gdGVzdERhdGEuZ2V0QWxsb2NhdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgbVJTID0gcnM7Ci0gICAgICAgIG1SZXMgPSByZXM7Ci0gICAgICAgIG1Gb250U2FucyA9IEZvbnQuY3JlYXRlKG1SUywgbVJlcywgInNhbnMtc2VyaWYiLCBGb250LlN0eWxlLk5PUk1BTCwgOCk7Ci0gICAgICAgIG1TaW5nbGVNZXNoID0gZ2V0U2luZ2xlTWVzaCgxLCAxKTsgIC8vIGEgdW5pdCBzaXplIG1lc2gKLQotICAgICAgICBpbml0VWlTY3JpcHQoKTsKLSAgICAgICAgbVRlc3RzID0gbmV3IFNjcmlwdEZpZWxkX1Rlc3RTY3JpcHRzX3MuSXRlbVttTmFtZXMubGVuZ3RoXTsKLQotICAgICAgICBpbnQgaW5kZXggPSAwOwotCi0gICAgICAgIGFkZFRlc3QoaW5kZXgrKywgMCwgMCAvKm1lc2hNb2RlKi8sIDAgLyp1bnVzZWQqLywgMCAvKnVudXNlZCovKTsKLSAgICAgICAgYWRkVGVzdChpbmRleCsrLCAwLCAxIC8qbWVzaE1vZGUqLywgMCAvKnVudXNlZCovLCAwIC8qdW51c2VkKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDEsIDcgLyp3UmVzb2x1dGlvbiovLCA1IC8qaFJlc29sdXRpb24qLywgMCAvKm1lc2hNb2RlKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDEsIDcgLyp3UmVzb2x1dGlvbiovLCA1IC8qaFJlc29sdXRpb24qLywgMSAvKm1lc2hNb2RlKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDIsIDAgLyp1bnVzZWQqLywgMCAvKnVudXNlZCovLCAwIC8qdW51c2VkKi8pOwotICAgICAgICBhZGRUZXN0KGluZGV4KyssIDMsIDcgLyp3UmVzb2x1dGlvbiovLCA1IC8qaFJlc29sdXRpb24qLywgMCAvKnVudXNlZCovKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfVGVzdFNjcmlwdHNfcy5JdGVtW10gZ2V0VGVzdHMoKSB7Ci0gICAgICAgIHJldHVybiBtVGVzdHM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldFRlc3ROYW1lcygpIHsKLSAgICAgICAgcmV0dXJuIG1OYW1lczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbG9hZFRleHR1cmVSR0IoaW50IGlkKSB7Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uLmNyZWF0ZUZyb21CaXRtYXBSZXNvdXJjZShtUlMsIG1SZXMsIGlkLAotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uTWlwbWFwQ29udHJvbC5NSVBNQVBfT05fU1lOQ19UT19URVhUVVJFLAotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfVEVYVFVSRSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIGxvYWRUZXh0dXJlQVJHQihpbnQgaWQpIHsKLSAgICAgICAgQml0bWFwIGIgPSBCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKG1SZXMsIGlkLCBtT3B0aW9uc0FSR0IpOwotICAgICAgICByZXR1cm4gQWxsb2NhdGlvbi5jcmVhdGVGcm9tQml0bWFwKG1SUywgYiwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVQYXJ0aWNsZXNNZXNoKCkgewotICAgICAgICBTY3JpcHRGaWVsZF9QYXJ0aWNsZSBwID0gbmV3IFNjcmlwdEZpZWxkX1BhcnRpY2xlKG1SUywgUEFSVElDTEVTX0NPVU5UKTsKLQotICAgICAgICBmaW5hbCBNZXNoLkFsbG9jYXRpb25CdWlsZGVyIG1lc2hCdWlsZGVyID0gbmV3IE1lc2guQWxsb2NhdGlvbkJ1aWxkZXIobVJTKTsKLSAgICAgICAgbWVzaEJ1aWxkZXIuYWRkVmVydGV4QWxsb2NhdGlvbihwLmdldEFsbG9jYXRpb24oKSk7Ci0gICAgICAgIGZpbmFsIGludCB2ZXJ0ZXhTbG90ID0gbWVzaEJ1aWxkZXIuZ2V0Q3VycmVudFZlcnRleFR5cGVJbmRleCgpOwotICAgICAgICBtZXNoQnVpbGRlci5hZGRJbmRleFNldFR5cGUoUHJpbWl0aXZlLlBPSU5UKTsKLSAgICAgICAgbVBhcnRpY2xlc01lc2ggPSBtZXNoQnVpbGRlci5jcmVhdGUoKTsKLQotICAgICAgICBtVWlTY3JpcHQuc2V0X2dQYXJ0aWNsZXNNZXNoKG1QYXJ0aWNsZXNNZXNoKTsKLSAgICAgICAgbVVpU2NyaXB0LmJpbmRfUGFydGljbGVzKHApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhIG1lc2ggd2l0aCBhIHNpbmdsZSBxdWFkIGZvciB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodC4KLSAgICAgKi8KLSAgICBwcml2YXRlIE1lc2ggZ2V0U2luZ2xlTWVzaChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSB7Ci0gICAgICAgIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlciB0bWIgPSBuZXcgTWVzaC5UcmlhbmdsZU1lc2hCdWlsZGVyKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCBNZXNoLlRyaWFuZ2xlTWVzaEJ1aWxkZXIuVEVYVFVSRV8wKTsKLSAgICAgICAgZmxvYXQgeE9mZnNldCA9IHdpZHRoLzI7Ci0gICAgICAgIGZsb2F0IHlPZmZzZXQgPSBoZWlnaHQvMjsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMCwgMCk7Ci0gICAgICAgIHRtYi5hZGRWZXJ0ZXgoLTEuMGYgKiB4T2Zmc2V0LCAtMS4wZiAqIHlPZmZzZXQpOwotICAgICAgICB0bWIuc2V0VGV4dHVyZSgxLCAwKTsKLSAgICAgICAgdG1iLmFkZFZlcnRleCh4T2Zmc2V0LCAtMS4wZiAqIHlPZmZzZXQpOwotICAgICAgICB0bWIuc2V0VGV4dHVyZSgxLCAxKTsKLSAgICAgICAgdG1iLmFkZFZlcnRleCh4T2Zmc2V0LCB5T2Zmc2V0KTsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMCwgMSk7Ci0gICAgICAgIHRtYi5hZGRWZXJ0ZXgoLTEuMGYgKiB4T2Zmc2V0LCB5T2Zmc2V0KTsKLSAgICAgICAgdG1iLmFkZFRyaWFuZ2xlKDAsIDMsIDEpOwotICAgICAgICB0bWIuYWRkVHJpYW5nbGUoMSwgMywgMik7Ci0gICAgICAgIHJldHVybiB0bWIuY3JlYXRlKHRydWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgTWF0cml4NGYgZ2V0UHJvamVjdGlvbk5vcm1hbGl6ZWQoaW50IHcsIGludCBoKSB7Ci0gICAgICAgIC8vIHJhbmdlIC0xLDEgaW4gdGhlIG5hcnJvdyBheGlzIGF0IHogPSAwLgotICAgICAgICBNYXRyaXg0ZiBtMSA9IG5ldyBNYXRyaXg0ZigpOwotICAgICAgICBNYXRyaXg0ZiBtMiA9IG5ldyBNYXRyaXg0ZigpOwotCi0gICAgICAgIGlmKHcgPiBoKSB7Ci0gICAgICAgICAgICBmbG9hdCBhc3BlY3QgPSAoKGZsb2F0KXcpIC8gaDsKLSAgICAgICAgICAgIG0xLmxvYWRGcnVzdHVtKC1hc3BlY3QsYXNwZWN0LCAgLTEsMSwgIDEsMTAwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9ICgoZmxvYXQpaCkgLyB3OwotICAgICAgICAgICAgbTEubG9hZEZydXN0dW0oLTEsMSwgLWFzcGVjdCxhc3BlY3QsIDEsMTAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIG0yLmxvYWRSb3RhdGUoMTgwLCAwLCAxLCAwKTsKLSAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7Ci0KLSAgICAgICAgbTIubG9hZFNjYWxlKC0yLCAyLCAxKTsKLSAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7Ci0KLSAgICAgICAgbTIubG9hZFRyYW5zbGF0ZSgwLCAwLCAyKTsKLSAgICAgICAgbTEubG9hZE11bHRpcGx5KG0xLCBtMik7Ci0gICAgICAgIHJldHVybiBtMTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlUHJvamVjdGlvbk1hdHJpY2VzKCkgewotICAgICAgICBNYXRyaXg0ZiBwcm9qTm9ybSA9IGdldFByb2plY3Rpb25Ob3JtYWxpemVkKDEyODAsIDcyMCk7Ci0gICAgICAgIFNjcmlwdEZpZWxkX1ZwQ29uc3RzLkl0ZW0gaSA9IG5ldyBTY3JpcHRGaWVsZF9WcENvbnN0cy5JdGVtKCk7Ci0gICAgICAgIGkuUHJvaiA9IHByb2pOb3JtOwotICAgICAgICBpLk1WUCA9IHByb2pOb3JtOwotICAgICAgICBtUHZTdGFyQWxsb2Muc2V0KGksIDAsIHRydWUpOwotICAgICAgICBtUHZQcm9qZWN0aW9uQWxsb2Muc2V0UHJvamVjdGlvbihwcm9qTm9ybSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0VWlTY3JpcHQoKSB7Ci0gICAgICAgIG1VaVNjcmlwdCA9IG5ldyBTY3JpcHRDX3VpX3Rlc3QobVJTLCBtUmVzLCBSLnJhdy51aV90ZXN0KTsKLQotICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgY29sQnVpbGRlciA9IG5ldyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgY29sQnVpbGRlci5zZXRWYXJ5aW5nQ29sb3IoZmFsc2UpOwotICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgdGV4QnVpbGRlciA9IG5ldyBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgdGV4QnVpbGRlci5zZXRUZXh0dXJlKFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlci5FbnZNb2RlLlJFUExBQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRm9ybWF0LlJHQkEsIDApOwotCi0gICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgcHZiID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24gcHJvZ1ZlcnRleCA9IHB2Yi5jcmVhdGUoKTsKLSAgICAgICAgUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24uQ29uc3RhbnRzIFBWQSA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMobVJTKTsKLSAgICAgICAgKChQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbilwcm9nVmVydGV4KS5iaW5kQ29uc3RhbnRzKFBWQSk7Ci0gICAgICAgIE1hdHJpeDRmIHByb2ogPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgcHJvai5sb2FkT3J0aG9XaW5kb3coMTI4MCwgNzIwKTsKLSAgICAgICAgUFZBLnNldFByb2plY3Rpb24ocHJvaik7Ci0KLSAgICAgICAgbVVpU2NyaXB0LnNldF9nUHJvZ1ZlcnRleChwcm9nVmVydGV4KTsKLSAgICAgICAgbVVpU2NyaXB0LnNldF9nUHJvZ0ZyYWdtZW50Q29sb3IoY29sQnVpbGRlci5jcmVhdGUoKSk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1Byb2dGcmFnbWVudFRleHR1cmUodGV4QnVpbGRlci5jcmVhdGUoKSk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1Byb2dTdG9yZUJsZW5kQWxwaGEoUHJvZ3JhbVN0b3JlLkJMRU5EX0FMUEhBX0RFUFRIX05PTkUobVJTKSk7Ci0KLSAgICAgICAgbVVpU2NyaXB0LnNldF9nTGluZWFyQ2xhbXAoU2FtcGxlci5DTEFNUF9MSU5FQVIobVJTKSk7Ci0KLSAgICAgICAgbVVpU2NyaXB0LnNldF9nVGV4VG9ydXMobG9hZFRleHR1cmVSR0IoUi5kcmF3YWJsZS50b3J1c21hcCkpOwotICAgICAgICBtVWlTY3JpcHQuc2V0X2dUZXhPcGFxdWUobG9hZFRleHR1cmVSR0IoUi5kcmF3YWJsZS5kYXRhKSk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1RleEdsb2JlKGxvYWRUZXh0dXJlUkdCKFIuZHJhd2FibGUuZ2xvYmUpKTsKLSAgICAgICAgbVVpU2NyaXB0LnNldF9nU2luZ2xlTWVzaChtU2luZ2xlTWVzaCk7Ci0KLSAgICAgICAgLy8gRm9yIEdBTEFYWQotICAgICAgICBQcm9ncmFtU3RvcmUuQnVpbGRlciBwc2IgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgcHNiLnNldEJsZW5kRnVuYyhCbGVuZFNyY0Z1bmMuT05FLCBCbGVuZERzdEZ1bmMuWkVSTyk7Ci0gICAgICAgIG1SUy5iaW5kUHJvZ3JhbVN0b3JlKHBzYi5jcmVhdGUoKSk7Ci0KLSAgICAgICAgcHNiLnNldEJsZW5kRnVuYyhCbGVuZFNyY0Z1bmMuU1JDX0FMUEhBLCBCbGVuZERzdEZ1bmMuT05FKTsKLSAgICAgICAgbVVpU2NyaXB0LnNldF9nUFNMaWdodHMocHNiLmNyZWF0ZSgpKTsKLQotICAgICAgICAvLyBGb3IgR2FsYXh5IGxpdmUgd2FsbHBhcGVyIGRyYXdpbmcKLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGJ1aWxkZXIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0IsIDApOwotICAgICAgICBQcm9ncmFtRnJhZ21lbnQgcGZiID0gYnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgcGZiLmJpbmRTYW1wbGVyKFNhbXBsZXIuV1JBUF9ORUFSRVNUKG1SUyksIDApOwotICAgICAgICBtVWlTY3JpcHQuc2V0X2dQRkJhY2tncm91bmQocGZiKTsKLQotICAgICAgICBidWlsZGVyID0gbmV3IFByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb24uQnVpbGRlcihtUlMpOwotICAgICAgICBidWlsZGVyLnNldFBvaW50U3ByaXRlVGV4Q29vcmRpbmF0ZVJlcGxhY2VtZW50KHRydWUpOwotICAgICAgICBidWlsZGVyLnNldFRleHR1cmUoUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkVudk1vZGUuTU9EVUxBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRm9ybWF0LlJHQkEsIDApOwotICAgICAgICBidWlsZGVyLnNldFZhcnlpbmdDb2xvcih0cnVlKTsKLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50IHBmcyA9IGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgIHBmcy5iaW5kU2FtcGxlcihTYW1wbGVyLldSQVBfTElORUFSX01JUF9MSU5FQVIobVJTKSwgMCk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1BGU3RhcnMocGZzKTsKLQotICAgICAgICBtVGV4dHVyZUFsbG9jcyA9IG5ldyBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MobVJTLCAxMDApOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0gICAgICAgICAgICBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MuSXRlbSB0ZXhFbGVtID0gbmV3IFNjcmlwdEZpZWxkX0xpc3RBbGxvY3Nfcy5JdGVtKCk7Ci0gICAgICAgICAgICB0ZXhFbGVtLml0ZW0gPSBsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLmdsb2JlKTsKLSAgICAgICAgICAgIG1UZXh0dXJlQWxsb2NzLnNldCh0ZXhFbGVtLCBpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVRleHR1cmVBbGxvY3MuY29weUFsbCgpOwotICAgICAgICBtVWlTY3JpcHQuYmluZF9nVGV4TGlzdDEwMChtVGV4dHVyZUFsbG9jcyk7Ci0KLSAgICAgICAgbVNhbXBsZVRleHRBbGxvY3MgPSBuZXcgU2NyaXB0RmllbGRfTGlzdEFsbG9jc19zKG1SUywgMTAwKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7IGkrKykgewotICAgICAgICAgICAgU2NyaXB0RmllbGRfTGlzdEFsbG9jc19zLkl0ZW0gdGV4dEVsZW0gPSBuZXcgU2NyaXB0RmllbGRfTGlzdEFsbG9jc19zLkl0ZW0oKTsKLSAgICAgICAgICAgIHRleHRFbGVtLml0ZW0gPSBBbGxvY2F0aW9uLmNyZWF0ZUZyb21TdHJpbmcobVJTLCBTQU1QTEVfVEVYVCwgQWxsb2NhdGlvbi5VU0FHRV9TQ1JJUFQpOwotICAgICAgICAgICAgbVNhbXBsZVRleHRBbGxvY3Muc2V0KHRleHRFbGVtLCBpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVNhbXBsZVRleHRBbGxvY3MuY29weUFsbCgpOwotICAgICAgICBtVWlTY3JpcHQuYmluZF9nU2FtcGxlVGV4dExpc3QxMDAobVNhbXBsZVRleHRBbGxvY3MpOwotCi0gICAgICAgIG1TYW1wbGVMaXN0Vmlld0FsbG9jcyA9IG5ldyBTY3JpcHRGaWVsZF9MaXN0QWxsb2NzX3MobVJTLCAxMDAwKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgICAgIFNjcmlwdEZpZWxkX0xpc3RBbGxvY3Nfcy5JdGVtIHRleHRFbGVtID0gbmV3IFNjcmlwdEZpZWxkX0xpc3RBbGxvY3Nfcy5JdGVtKCk7Ci0gICAgICAgICAgICB0ZXh0RWxlbS5pdGVtID0gQWxsb2NhdGlvbi5jcmVhdGVGcm9tU3RyaW5nKG1SUywgTElTVF9URVhULCBBbGxvY2F0aW9uLlVTQUdFX1NDUklQVCk7Ci0gICAgICAgICAgICBtU2FtcGxlTGlzdFZpZXdBbGxvY3Muc2V0KHRleHRFbGVtLCBpLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgbVNhbXBsZUxpc3RWaWV3QWxsb2NzLmNvcHlBbGwoKTsKLSAgICAgICAgbVVpU2NyaXB0LmJpbmRfZ0xpc3RWaWV3VGV4dChtU2FtcGxlTGlzdFZpZXdBbGxvY3MpOwotCi0gICAgICAgIC8vIEZvciBnYWxheHkgbGl2ZSB3YWxscGFwZXIKLSAgICAgICAgbVB2U3RhckFsbG9jID0gbmV3IFNjcmlwdEZpZWxkX1ZwQ29uc3RzKG1SUywgMSk7Ci0gICAgICAgIG1VaVNjcmlwdC5iaW5kX3ZwQ29uc3RhbnRzKG1QdlN0YXJBbGxvYyk7Ci0gICAgICAgIG1QdlByb2plY3Rpb25BbGxvYyA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMobVJTKTsKLSAgICAgICAgdXBkYXRlUHJvamVjdGlvbk1hdHJpY2VzKCk7Ci0KLSAgICAgICAgcHZiID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgUHJvZ3JhbVZlcnRleCBwdmJwID0gcHZiLmNyZWF0ZSgpOwotICAgICAgICAoKFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uKXB2YnApLmJpbmRDb25zdGFudHMobVB2UHJvamVjdGlvbkFsbG9jKTsKLSAgICAgICAgbVVpU2NyaXB0LnNldF9nUFZCa1Byb2oocHZicCk7Ci0KLSAgICAgICAgY3JlYXRlUGFydGljbGVzTWVzaCgpOwotCi0gICAgICAgIFByb2dyYW1WZXJ0ZXguQnVpbGRlciBzYiA9IG5ldyBQcm9ncmFtVmVydGV4LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgU3RyaW5nIHQgPSAgInZhcnlpbmcgdmVjNCB2YXJDb2xvcjtcbiIgKwotICAgICAgICAgICAgICAgICAgICAidmFyeWluZyB2ZWMyIHZhclRleDA7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBmbG9hdCBkaXN0ID0gQVRUUklCX3Bvc2l0aW9uLnk7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZmxvYXQgYW5nbGUgPSBBVFRSSUJfcG9zaXRpb24ueDtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBmbG9hdCB4ID0gZGlzdCAqIHNpbihhbmdsZSk7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZmxvYXQgeSA9IGRpc3QgKiBjb3MoYW5nbGUpICogMC44OTI7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZmxvYXQgcCA9IGRpc3QgKiA1LjU7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZmxvYXQgcyA9IGNvcyhwKTtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBmbG9hdCB0ID0gc2luKHApO1xuIiArCi0gICAgICAgICAgICAgICAgICAgICIgIHZlYzQgcG9zO1xuIiArCi0gICAgICAgICAgICAgICAgICAgICIgIHBvcy54ID0gdCAqIHggKyBzICogeTtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBwb3MueSA9IHMgKiB4IC0gdCAqIHk7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgcG9zLnogPSBBVFRSSUJfcG9zaXRpb24uejtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBwb3MudyA9IDEuMDtcbiIgKwotICAgICAgICAgICAgICAgICAgICAiICBnbF9Qb3NpdGlvbiA9IFVOSV9NVlAgKiBwb3M7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgZ2xfUG9pbnRTaXplID0gQVRUUklCX2NvbG9yLmEgKiAxMC4wO1xuIiArCi0gICAgICAgICAgICAgICAgICAgICIgIHZhckNvbG9yLnJnYiA9IEFUVFJJQl9jb2xvci5yZ2I7XG4iICsKLSAgICAgICAgICAgICAgICAgICAgIiAgdmFyQ29sb3IuYSA9IDEuMDtcbiIgKwotICAgICAgICAgICAgICAgICAgICAifVxuIjsKLSAgICAgICAgc2Iuc2V0U2hhZGVyKHQpOwotICAgICAgICBzYi5hZGRJbnB1dChtUGFydGljbGVzTWVzaC5nZXRWZXJ0ZXhBbGxvY2F0aW9uKDApLmdldFR5cGUoKS5nZXRFbGVtZW50KCkpOwotICAgICAgICBzYi5hZGRDb25zdGFudChtUHZTdGFyQWxsb2MuZ2V0VHlwZSgpKTsKLSAgICAgICAgUHJvZ3JhbVZlcnRleCBwdnMgPSBzYi5jcmVhdGUoKTsKLSAgICAgICAgcHZzLmJpbmRDb25zdGFudHMobVB2U3RhckFsbG9jLmdldEFsbG9jYXRpb24oKSwgMCk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1BWU3RhcnMocHZzKTsKLQotICAgICAgICAvLyBGb3IgR2FsYXh5IGxpdmUgd2FsbHBhcGVyCi0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1RTcGFjZShsb2FkVGV4dHVyZVJHQihSLmRyYXdhYmxlLnNwYWNlKSk7Ci0gICAgICAgIG1VaVNjcmlwdC5zZXRfZ1RMaWdodDEobG9hZFRleHR1cmVSR0IoUi5kcmF3YWJsZS5saWdodDEpKTsKLSAgICAgICAgbVVpU2NyaXB0LnNldF9nVEZsYXJlcyhsb2FkVGV4dHVyZUFSR0IoUi5kcmF3YWJsZS5mbGFyZXMpKTsKLQotICAgICAgICBtVWlTY3JpcHQuc2V0X2dGb250U2FucyhtRm9udFNhbnMpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9maWxsX3Rlc3QucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvZmlsbF90ZXN0LnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODFmODMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9maWxsX3Rlc3QucnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotI2luY2x1ZGUgInN1YnRlc3RfZGVmLnJzaCIKLQotcnNfcHJvZ3JhbV92ZXJ0ZXggZ1Byb2dWZXJ0ZXg7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQcm9nRnJhZ21lbnRUZXh0dXJlOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50VGV4dHVyZU1vZHVsYXRlOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50TXVsdGl0ZXg7Ci0KLXJzX3Byb2dyYW1fc3RvcmUgZ1Byb2dTdG9yZUJsZW5kTm9uZTsKLXJzX3Byb2dyYW1fc3RvcmUgZ1Byb2dTdG9yZUJsZW5kQWxwaGE7Ci0KLXJzX2FsbG9jYXRpb24gZ1RleE9wYXF1ZTsKLXJzX2FsbG9jYXRpb24gZ1RleFRvcnVzOwotcnNfYWxsb2NhdGlvbiBnVGV4VHJhbnNwYXJlbnQ7Ci1yc19hbGxvY2F0aW9uIGdUZXhDaGVja2VyOwotCi1yc19zYW1wbGVyIGdMaW5lYXJDbGFtcDsKLXJzX3NhbXBsZXIgZ0xpbmVhcldyYXA7Ci0KLXR5cGVkZWYgc3RydWN0IEZpbGxUZXN0RGF0YV9zIHsKLSAgICBpbnQgdGVzdElkOwotICAgIGludCBibGVuZDsKLSAgICBpbnQgcXVhZENvdW50OwotfSBGaWxsVGVzdERhdGE7Ci1GaWxsVGVzdERhdGEgKmdEYXRhOwotCi10eXBlZGVmIHN0cnVjdCBGaWxsVGVzdEZyYWdEYXRhX3MgewotICAgIGZsb2F0NCBtb2R1bGF0ZTsKLX0gRmlsbFRlc3RGcmFnRGF0YTsKLUZpbGxUZXN0RnJhZ0RhdGEgKmdGcmFnRGF0YTsKLQotc3RhdGljIGZsb2F0IGdEdCA9IDAuMGY7Ci0KLXZvaWQgaW5pdCgpIHsKLX0KLQotc3RhdGljIGludCBnUmVuZGVyU3VyZmFjZVcgPSAxMjgwOwotc3RhdGljIGludCBnUmVuZGVyU3VyZmFjZUggPSA3MjA7Ci0KLXN0YXRpYyB2b2lkIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKSB7Ci0gICAgLy8gRGVmYXVsdCB2ZXJ0ZXggc2hhZGVyCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXgpOwotICAgIC8vIFNldHVwIHRoZSBwcm9qZWN0aW9uIG1hdHJpeAotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIHJzTWF0cml4TG9hZE9ydGhvKCZwcm9qLCAwLCBnUmVuZGVyU3VyZmFjZVcsIGdSZW5kZXJTdXJmYWNlSCwgMCwgLTUwMCwgNTAwKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZFByb2plY3Rpb25NYXRyaXgoJnByb2opOwotfQotCi1zdGF0aWMgdm9pZCBkaXNwbGF5U2luZ2xldGV4RmlsbChib29sIGJsZW5kLCBpbnQgcXVhZENvdW50LCBib29sIG1vZHVsYXRlKSB7Ci0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICBpZiAoIWJsZW5kKSB7Ci0gICAgICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kTm9uZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmRBbHBoYSk7Ci0gICAgfQotICAgIGlmIChtb2R1bGF0ZSkgewotICAgICAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRUZXh0dXJlTW9kdWxhdGUpOwotICAgICAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZU1vZHVsYXRlLCAwLCBnTGluZWFyQ2xhbXApOwotICAgICAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50VGV4dHVyZU1vZHVsYXRlLCAwLCBnVGV4T3BhcXVlKTsKLQotICAgICAgICBnRnJhZ0RhdGEtPm1vZHVsYXRlLnIgPSAwLjhmOwotICAgICAgICBnRnJhZ0RhdGEtPm1vZHVsYXRlLmcgPSAwLjdmOwotICAgICAgICBnRnJhZ0RhdGEtPm1vZHVsYXRlLmIgPSAwLjhmOwotICAgICAgICBnRnJhZ0RhdGEtPm1vZHVsYXRlLmEgPSAwLjVmOwotICAgICAgICByc2dBbGxvY2F0aW9uU3luY0FsbChyc0dldEFsbG9jYXRpb24oZ0ZyYWdEYXRhKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50VGV4dHVyZSk7Ci0gICAgICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotICAgICAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ1RleE9wYXF1ZSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxdWFkQ291bnQ7IGkgKyspIHsKLSAgICAgICAgZmxvYXQgc3RhcnRYID0gNSAqIGksIHN0YXJ0WSA9IDUgKiBpOwotICAgICAgICBmbG9hdCB3aWR0aCA9IGdSZW5kZXJTdXJmYWNlVyAtIHN0YXJ0WCwgaGVpZ2h0ID0gZ1JlbmRlclN1cmZhY2VIIC0gc3RhcnRZOwotICAgICAgICByc2dEcmF3UXVhZFRleENvb3JkcyhzdGFydFgsIHN0YXJ0WSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFkgKyBoZWlnaHQsIDAsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFksIDAsIDEsIDApOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheU11bHRpdGV4dHVyZVNhbXBsZShib29sIGJsZW5kLCBpbnQgcXVhZENvdW50KSB7Ci0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICBpZiAoIWJsZW5kKSB7Ci0gICAgICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kTm9uZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmRBbHBoYSk7Ci0gICAgfQotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudE11bHRpdGV4KTsKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50TXVsdGl0ZXgsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudE11bHRpdGV4LCAxLCBnTGluZWFyV3JhcCk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudE11bHRpdGV4LCAyLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRNdWx0aXRleCwgMCwgZ1RleENoZWNrZXIpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRNdWx0aXRleCwgMSwgZ1RleFRvcnVzKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50TXVsdGl0ZXgsIDIsIGdUZXhUcmFuc3BhcmVudCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHF1YWRDb3VudDsgaSArKykgewotICAgICAgICBmbG9hdCBzdGFydFggPSAxMCAqIGksIHN0YXJ0WSA9IDEwICogaTsKLSAgICAgICAgZmxvYXQgd2lkdGggPSBnUmVuZGVyU3VyZmFjZVcgLSBzdGFydFgsIGhlaWdodCA9IGdSZW5kZXJTdXJmYWNlSCAtIHN0YXJ0WTsKLSAgICAgICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLCAwKTsKLSAgICB9Ci19Ci0KLQotdm9pZCByb290KGNvbnN0IHZvaWQgKnZfaW4sIHZvaWQgKnZfb3V0LCBjb25zdCB2b2lkICp1c3JEYXRhLCB1aW50MzJfdCB4LCB1aW50MzJfdCB5KSB7Ci0gICAgVGVzdERhdGEgKnRlc3REYXRhID0gKFRlc3REYXRhKil1c3JEYXRhOwotICAgIGdSZW5kZXJTdXJmYWNlVyA9IHRlc3REYXRhLT5yZW5kZXJTdXJmYWNlVzsKLSAgICBnUmVuZGVyU3VyZmFjZUggPSB0ZXN0RGF0YS0+cmVuZGVyU3VyZmFjZUg7Ci0gICAgZ0R0ID0gdGVzdERhdGEtPmR0OwotCi0gICAgZ0RhdGEgPSAoRmlsbFRlc3REYXRhKil2X2luOwotCi0gICAgc3dpdGNoKGdEYXRhLT50ZXN0SWQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgZGlzcGxheU11bHRpdGV4dHVyZVNhbXBsZShnRGF0YS0+YmxlbmQgPT0gMSA/IHRydWUgOiBmYWxzZSwgZ0RhdGEtPnF1YWRDb3VudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZGlzcGxheVNpbmdsZXRleEZpbGwoZ0RhdGEtPmJsZW5kID09IDEgPyB0cnVlIDogZmFsc2UsIGdEYXRhLT5xdWFkQ291bnQsIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBkaXNwbGF5U2luZ2xldGV4RmlsbChnRGF0YS0+YmxlbmQgPT0gMSA/IHRydWUgOiBmYWxzZSwgZ0RhdGEtPnF1YWRDb3VudCwgdHJ1ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJzRGVidWcoIldyb25nIHRlc3QgbnVtYmVyIiwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvbWVzaF90ZXN0LnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L21lc2hfdGVzdC5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdlNDg1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvbWVzaF90ZXN0LnJzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotI2luY2x1ZGUgInNoYWRlcl9kZWYucnNoIgotI2luY2x1ZGUgInN1YnRlc3RfZGVmLnJzaCIKLQotcnNfcHJvZ3JhbV92ZXJ0ZXggZ1Byb2dWZXJ0ZXg7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQcm9nRnJhZ21lbnRUZXh0dXJlOwotCi1yc19wcm9ncmFtX3N0b3JlIGdQcm9nU3RvcmVCbGVuZE5vbmU7Ci0KLXJzX2FsbG9jYXRpb24gZ1RleE9wYXF1ZTsKLQotcnNfbWVzaCBnMTBieTEwTWVzaDsKLXJzX21lc2ggZzEwMGJ5MTAwTWVzaDsKLXJzX21lc2ggZ1dieUhNZXNoOwotCi1yc19zYW1wbGVyIGdMaW5lYXJDbGFtcDsKLXN0YXRpYyBpbnQgZ1JlbmRlclN1cmZhY2VXOwotc3RhdGljIGludCBnUmVuZGVyU3VyZmFjZUg7Ci0KLXN0YXRpYyBmbG9hdCBnRHQgPSAwOwotCi10eXBlZGVmIHN0cnVjdCBNZXNoVGVzdERhdGFfcyB7Ci0gICAgaW50IG1lc2hOdW07Ci19IE1lc2hUZXN0RGF0YTsKLU1lc2hUZXN0RGF0YSAqZ0RhdGE7Ci0KLXZvaWQgaW5pdCgpIHsKLX0KLQotc3RhdGljIHZvaWQgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpIHsKLSAgICAvLyBEZWZhdWx0IHZlcnRleCBzaGFkZXIKLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUHJvZ1ZlcnRleCk7Ci0gICAgLy8gU2V0dXAgdGhlIHByb2plY3Rpb24gbWF0cml4Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgcnNNYXRyaXhMb2FkT3J0aG8oJnByb2osIDAsIGdSZW5kZXJTdXJmYWNlVywgZ1JlbmRlclN1cmZhY2VILCAwLCAtNTAwLCA1MDApOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BsYXlNZXNoU2FtcGxlcyhpbnQgbWVzaE51bSkgewotCi0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKCZtYXRyaXgsIGdSZW5kZXJTdXJmYWNlVy8yLCBnUmVuZGVyU3VyZmFjZUgvMiwgMCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmUpOwotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudFRleHR1cmUpOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotCi0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdUZXhPcGFxdWUpOwotCi0gICAgaWYgKG1lc2hOdW0gPT0gMCkgewotICAgICAgICByc2dEcmF3TWVzaChnMTBieTEwTWVzaCk7Ci0gICAgfSBlbHNlIGlmIChtZXNoTnVtID09IDEpIHsKLSAgICAgICAgcnNnRHJhd01lc2goZzEwMGJ5MTAwTWVzaCk7Ci0gICAgfSBlbHNlIGlmIChtZXNoTnVtID09IDIpIHsKLSAgICAgICAgcnNnRHJhd01lc2goZ1dieUhNZXNoKTsKLSAgICB9Ci19Ci0KLXZvaWQgcm9vdChjb25zdCB2b2lkICp2X2luLCB2b2lkICp2X291dCwgY29uc3Qgdm9pZCAqdXNyRGF0YSwgdWludDMyX3QgeCwgdWludDMyX3QgeSkgewotICAgIFRlc3REYXRhICp0ZXN0RGF0YSA9IChUZXN0RGF0YSopdXNyRGF0YTsKLSAgICBnUmVuZGVyU3VyZmFjZVcgPSB0ZXN0RGF0YS0+cmVuZGVyU3VyZmFjZVc7Ci0gICAgZ1JlbmRlclN1cmZhY2VIID0gdGVzdERhdGEtPnJlbmRlclN1cmZhY2VIOwotICAgIGdEdCA9IHRlc3REYXRhLT5kdDsKLQotICAgIGdEYXRhID0gKE1lc2hUZXN0RGF0YSopdl9pbjsKLQotICAgIGRpc3BsYXlNZXNoU2FtcGxlcyhnRGF0YS0+bWVzaE51bSk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvcnNiZW5jaC5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9yc2JlbmNoLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2NmNGUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9yc2JlbmNoLnJzCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMC0yMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotI2luY2x1ZGUgInNoYWRlcl9kZWYucnNoIgotI2luY2x1ZGUgInN1YnRlc3RfZGVmLnJzaCIKLQotLyogTWVzc2FnZSBzZW50IGZyb20gc2NyaXB0IHRvIHJlbmRlcnNjcmlwdCAqLwotY29uc3QgaW50IFJTX01TR19URVNUX0RPTkUgPSAxMDA7Ci1jb25zdCBpbnQgUlNfTVNHX1JFU1VMVFNfUkVBRFkgPSAxMDE7Ci0KLXN0YXRpYyBjb25zdCBpbnQgZ01heE1vZGVzID0gNjQ7Ci1pbnQgZ01heExvb3BzID0gMTsKLWludCBnRGlzcGxheU1vZGUgPSAxOwotCi0vLyBBbGxvY2F0aW9uIHRvIHdyaXRlIHRoZSByZXN1bHRzIGludG8KLXN0YXRpYyBmbG9hdCBnUmVzdWx0QnVmZmVyW2dNYXhNb2Rlc107Ci0KLXJzX2ZvbnQgZ0ZvbnRTZXJpZjsKLXJzX3NhbXBsZXIgZ0xpbmVhckNsYW1wOwotCi1yc19wcm9ncmFtX3ZlcnRleCBnUHJvZ1ZlcnRleDsKLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1Byb2dGcmFnbWVudFRleHR1cmU7Ci0KLXJzX2FsbG9jYXRpb24gZ1JlbmRlckJ1ZmZlckNvbG9yOwotcnNfYWxsb2NhdGlvbiBnUmVuZGVyQnVmZmVyRGVwdGg7Ci0KLVZlcnRleFNoYWRlcklucHV0cyAqZ1ZTSW5wdXRzOwotCi10eXBlZGVmIHN0cnVjdCBUZXN0U2NyaXB0c19zIHsKLSAgICByc19hbGxvY2F0aW9uIHRlc3REYXRhOwotICAgIHJzX2FsbG9jYXRpb24gdGVzdE5hbWU7Ci0gICAgcnNfYWxsb2NhdGlvbiBkZWJ1Z05hbWU7Ci0gICAgcnNfc2NyaXB0IHRlc3RTY3JpcHQ7Ci19IFRlc3RTY3JpcHRzOwotVGVzdFNjcmlwdHMgKmdUZXN0U2NyaXB0czsKLQotYm9vbCBnTG9hZENvbXBsZXRlID0gZmFsc2U7Ci1ib29sIGdQYXVzZVJlbmRlcmluZyA9IGZhbHNlOwotCi1zdGF0aWMgZmxvYXQgZ0R0ID0gMDsKLQotdm9pZCBpbml0KCkgewotfQotCi1zdGF0aWMgaW50IGdSZW5kZXJTdXJmYWNlVzsKLXN0YXRpYyBpbnQgZ1JlbmRlclN1cmZhY2VIOwotCi1zdGF0aWMgdm9pZCBmaWxsU3VyZmFjZVBhcmFtcyhUZXN0RGF0YSAqdGVzdERhdGEpIHsKLSAgICB0ZXN0RGF0YS0+cmVuZGVyU3VyZmFjZVcgPSBnUmVuZGVyU3VyZmFjZVc7Ci0gICAgdGVzdERhdGEtPnJlbmRlclN1cmZhY2VIID0gZ1JlbmRlclN1cmZhY2VIOwotICAgIHRlc3REYXRhLT5kdCA9IGdEdDsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBPZmZzY3JlZW5UYXJnZXQoKSB7Ci0gICAgcnNnQmluZENvbG9yVGFyZ2V0KGdSZW5kZXJCdWZmZXJDb2xvciwgMCk7Ci0gICAgcnNnQmluZERlcHRoVGFyZ2V0KGdSZW5kZXJCdWZmZXJEZXB0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKSB7Ci0gICAgLy8gRGVmYXVsdCB2ZXJ0ZXggc2hhZGVyCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXgpOwotICAgIC8vIFNldHVwIHRoZSBwcm9qZWN0aW9uIG1hdHJpeAotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIHJzTWF0cml4TG9hZE9ydGhvKCZwcm9qLCAwLCBnUmVuZGVyU3VyZmFjZVcsIGdSZW5kZXJTdXJmYWNlSCwgMCwgLTUwMCwgNTAwKTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZFByb2plY3Rpb25NYXRyaXgoJnByb2opOwotfQotCi1zdGF0aWMgdm9pZCBydW5TdWJUZXN0KGludCBpbmRleCkgewotICAgIFRlc3REYXRhIHRlc3REYXRhOwotICAgIGZpbGxTdXJmYWNlUGFyYW1zKCZ0ZXN0RGF0YSk7Ci0KLSAgICByc19hbGxvY2F0aW9uIG51bGxfYWxsb2MgPSB7MH07Ci0gICAgcnNGb3JFYWNoKGdUZXN0U2NyaXB0c1tpbmRleF0udGVzdFNjcmlwdCwKLSAgICAgICAgICAgICAgZ1Rlc3RTY3JpcHRzW2luZGV4XS50ZXN0RGF0YSwKLSAgICAgICAgICAgICAgbnVsbF9hbGxvYywKLSAgICAgICAgICAgICAgJnRlc3REYXRhLAotICAgICAgICAgICAgICBzaXplb2YodGVzdERhdGEpKTsKLX0KLQotCi1zdGF0aWMgYm9vbCBjaGVja0luaXQoKSB7Ci0KLSAgICBzdGF0aWMgaW50IGNvdW50ZG93biA9IDM7Ci0KLSAgICAvLyBQZXJmb3JtIGFsbCB0aGUgdXBsb2FkcyBzbyB3ZSBvbmx5IG1lYXN1cmUgcmVuZGVyZWQgdGltZQotICAgIGlmKGNvdW50ZG93biA+IDEpIHsKLSAgICAgICAgaW50IHRlc3RDb3VudCA9IHJzQWxsb2NhdGlvbkdldERpbVgocnNHZXRBbGxvY2F0aW9uKGdUZXN0U2NyaXB0cykpOwotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgdGVzdENvdW50OyBpICsrKSB7Ci0gICAgICAgICAgICByc2dDbGVhckNvbG9yKDAuMmYsIDAuMmYsIDAuMmYsIDAuMGYpOwotICAgICAgICAgICAgcnVuU3ViVGVzdChpKTsKLSAgICAgICAgICAgIHJzZ0ZpbmlzaCgpOwotICAgICAgICB9Ci0gICAgICAgIGNvdW50ZG93biAtLTsKLSAgICAgICAgcnNnQ2xlYXJDb2xvcigwLjJmLCAwLjJmLCAwLjJmLCAwLjBmKTsKLQotICAgICAgICByc2dGb250Q29sb3IoMC45ZiwgMC45ZiwgMC45NWYsIDEuMGYpOwotICAgICAgICByc2dCaW5kRm9udChnRm9udFNlcmlmKTsKLSAgICAgICAgaWYgKGNvdW50ZG93biA9PSAxKSB7Ci0gICAgICAgICAgICByc2dEcmF3VGV4dCgiUmVuZGVyaW5nIiwgNTAsIDUwKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJzZ0RyYXdUZXh0KCJJbml0aWFsaXppbmciLCA1MCwgNTApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGJlbmNoTW9kZSA9IDA7Ci1zdGF0aWMgYm9vbCBiZW5jaG1hcmtTaW5nbGVUZXN0ID0gZmFsc2U7Ci1zdGF0aWMgaW50IHJ1bm5pbmdMb29wcyA9IDA7Ci1zdGF0aWMgYm9vbCBzZW5kTXNnRmxhZyA9IGZhbHNlOwotCi1zdGF0aWMgYm9vbCBnSXNEZWJ1Z01vZGUgPSBmYWxzZTsKLXZvaWQgc2V0RGVidWdNb2RlKGludCB0ZXN0TnVtYmVyKSB7Ci0gICAgZ0lzRGVidWdNb2RlID0gdHJ1ZTsKLSAgICBiZW5jaE1vZGUgPSB0ZXN0TnVtYmVyOwotICAgIHJzZ0NsZWFyQWxsUmVuZGVyVGFyZ2V0cygpOwotfQotCi12b2lkIHNldEJlbmNobWFya01vZGUoaW50IHRlc3ROdW1iZXIpIHsKLSAgICBnSXNEZWJ1Z01vZGUgPSBmYWxzZTsKLSAgICBpZiAodGVzdE51bWJlciA9PSAtMSkgewotICAgICAgICBiZW5jaG1hcmtTaW5nbGVUZXN0ID0gZmFsc2U7Ci0gICAgICAgIGJlbmNoTW9kZSA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYmVuY2htYXJrU2luZ2xlVGVzdCA9IHRydWU7Ci0gICAgICAgIGJlbmNoTW9kZSA9IHRlc3ROdW1iZXI7Ci0gICAgfQotCi0gICAgcnVubmluZ0xvb3BzID0gMDsKLX0KLQotc3RhdGljIHZvaWQgZHJhd09mZnNjcmVlblJlc3VsdChpbnQgcG9zWCwgaW50IHBvc1ksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKTsKLQotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeCgmbWF0cml4KTsKLQotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudFRleHR1cmUpOwotCi0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdSZW5kZXJCdWZmZXJDb2xvcik7Ci0KLSAgICBmbG9hdCBzdGFydFggPSBwb3NYLCBzdGFydFkgPSBwb3NZOwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKHN0YXJ0WCwgc3RhcnRZLCAwLCAwLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCwgc3RhcnRZICsgaGVpZ2h0LCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0WCArIHdpZHRoLCBzdGFydFkgKyBoZWlnaHQsIDAsIDEsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSwgMCwgMSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJlbmNobWFyaygpIHsKLQotICAgIGdEdCA9IDEuMGYgLyA2MC4wZjsKLQotICAgIHJzZ0ZpbmlzaCgpOwotICAgIGludDY0X3Qgc3RhcnQgPSByc1VwdGltZU1pbGxpcygpOwotCi0gICAgaW50IGRyYXdQb3MgPSAwOwotICAgIGludCBmcmFtZUNvdW50ID0gMTAwOwotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpICsrKSB7Ci0gICAgICAgIHNldHVwT2Zmc2NyZWVuVGFyZ2V0KCk7Ci0gICAgICAgIGdSZW5kZXJTdXJmYWNlVyA9IHJzQWxsb2NhdGlvbkdldERpbVgoZ1JlbmRlckJ1ZmZlckNvbG9yKTsKLSAgICAgICAgZ1JlbmRlclN1cmZhY2VIID0gcnNBbGxvY2F0aW9uR2V0RGltWShnUmVuZGVyQnVmZmVyQ29sb3IpOwotICAgICAgICByc2dDbGVhckNvbG9yKDAuMWYsIDAuMWYsIDAuMWYsIDEuMGYpOwotICAgICAgICByc2dDbGVhckRlcHRoKDEuMGYpOwotCi0gICAgICAgIHJ1blN1YlRlc3QoYmVuY2hNb2RlKTsKLSAgICAgICAgcnNnQ2xlYXJBbGxSZW5kZXJUYXJnZXRzKCk7Ci0gICAgICAgIGdSZW5kZXJTdXJmYWNlVyA9IHJzZ0dldFdpZHRoKCk7Ci0gICAgICAgIGdSZW5kZXJTdXJmYWNlSCA9IHJzZ0dldEhlaWdodCgpOwotICAgICAgICBpbnQgc2l6ZSA9IDg7Ci0gICAgICAgIC8vIGRyYXcgZWFjaCBmcmFtZSBhdCAoOCwgMy80IGdSZW5kZXJTdXJmYWNlSCkgd2l0aCBzaXplCi0gICAgICAgIGRyYXdPZmZzY3JlZW5SZXN1bHQoKGRyYXdQb3MrPXNpemUpJWdSZW5kZXJTdXJmYWNlVywgKGdSZW5kZXJTdXJmYWNlSCAqIDMpIC8gNCwgc2l6ZSwgc2l6ZSk7Ci0gICAgfQotCi0gICAgcnNnRmluaXNoKCk7Ci0KLSAgICBpbnQ2NF90IGVuZCA9IHJzVXB0aW1lTWlsbGlzKCk7Ci0gICAgZmxvYXQgZnBzID0gKGZsb2F0KShmcmFtZUNvdW50KSAvICgoZmxvYXQpKGVuZCAtIHN0YXJ0KSowLjAwMWYpOwotICAgIGNvbnN0IGNoYXIgKnRlc3ROYW1lID0gcnNHZXRFbGVtZW50QXQoZ1Rlc3RTY3JpcHRzW2JlbmNoTW9kZV0uZGVidWdOYW1lLCAwKTsKLSAgICByc0RlYnVnKHRlc3ROYW1lLCBmcHMpOwotCi0gICAgZ1Jlc3VsdEJ1ZmZlcltiZW5jaE1vZGVdID0gZnBzOwotICAgIGludCBidWZmZXJXID0gcnNBbGxvY2F0aW9uR2V0RGltWChnUmVuZGVyQnVmZmVyQ29sb3IpOwotICAgIGludCBidWZmZXJIID0gcnNBbGxvY2F0aW9uR2V0RGltWShnUmVuZGVyQnVmZmVyQ29sb3IpOwotCi0gICAgaW50IHF1YWRXID0gZ1JlbmRlclN1cmZhY2VXIC8gMjsKLSAgICBpbnQgcXVhZEggPSAocXVhZFcgKiBidWZmZXJIKSAvIGJ1ZmZlclc7Ci0gICAgZHJhd09mZnNjcmVlblJlc3VsdCgwLCAwLCBxdWFkVywgcXVhZEgpOwotCi0gICAgaW50IGxlZnQgPSAwLCByaWdodCA9IDAsIHRvcCA9IDAsIGJvdHRvbSA9IDA7Ci0gICAgdWludCBoZWlnaHQgPSByc2dHZXRIZWlnaHQoKTsKLSAgICByc2dGb250Q29sb3IoMC45ZiwgMC45ZiwgMC45NWYsIDEuMGYpOwotICAgIHJzZ0JpbmRGb250KGdGb250U2VyaWYpOwotICAgIHJzZ01lYXN1cmVUZXh0KGdUZXN0U2NyaXB0c1tiZW5jaE1vZGVdLnRlc3ROYW1lLCAmbGVmdCwgJnJpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLSAgICByc2dGb250Q29sb3IoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZik7Ci0gICAgcnNnRHJhd1RleHQoZ1Rlc3RTY3JpcHRzW2JlbmNoTW9kZV0udGVzdE5hbWUsIDIgLWxlZnQsIGhlaWdodCAtIDIgKyBib3R0b20pOwotCi0gICAgaWYgKGJlbmNobWFya1NpbmdsZVRlc3QpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGJlbmNoTW9kZSArKzsKLSAgICBpbnQgdGVzdENvdW50ID0gcnNBbGxvY2F0aW9uR2V0RGltWChyc0dldEFsbG9jYXRpb24oZ1Rlc3RTY3JpcHRzKSk7Ci0gICAgaWYgKGJlbmNoTW9kZSA9PSB0ZXN0Q291bnQpIHsKLSAgICAgICAgcnNTZW5kVG9DbGllbnRCbG9ja2luZyhSU19NU0dfUkVTVUxUU19SRUFEWSwgZ1Jlc3VsdEJ1ZmZlciwgdGVzdENvdW50KnNpemVvZihmbG9hdCkpOwotICAgICAgICBiZW5jaE1vZGUgPSAwOwotICAgICAgICBydW5uaW5nTG9vcHMrKzsKLSAgICAgICAgaWYgKChnTWF4TG9vcHMgPiAwKSAmJiAocnVubmluZ0xvb3BzID4gZ01heExvb3BzKSAmJiAhc2VuZE1zZ0ZsYWcpIHsKLSAgICAgICAgICAgIC8vTm90aWZpeSB0aGUgdGVzdCB0byBzdG9wIGFuZCBnZXQgcmVzdWx0cwotICAgICAgICAgICAgcnNEZWJ1ZygiZ01heExvb3BzIGFuZCBydW5uaW5nTG9vcHM6ICIsIGdNYXhMb29wcywgcnVubmluZ0xvb3BzKTsKLSAgICAgICAgICAgIHJzU2VuZFRvQ2xpZW50QmxvY2tpbmcoUlNfTVNHX1RFU1RfRE9ORSk7Ci0gICAgICAgICAgICBzZW5kTXNnRmxhZyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGRlYnVnKCkgewotICAgIGdEdCA9IHJzR2V0RHQoKTsKLSAgICBydW5TdWJUZXN0KGJlbmNoTW9kZSk7Ci19Ci0KLWludCByb290KHZvaWQpIHsKLSAgICBnUmVuZGVyU3VyZmFjZVcgPSByc2dHZXRXaWR0aCgpOwotICAgIGdSZW5kZXJTdXJmYWNlSCA9IHJzZ0dldEhlaWdodCgpOwotICAgIHJzZ0NsZWFyQ29sb3IoMC4yZiwgMC4yZiwgMC4yZiwgMS4wZik7Ci0gICAgcnNnQ2xlYXJEZXB0aCgxLjBmKTsKLQotICAgIGlmICghZ0xvYWRDb21wbGV0ZSkgewotICAgICAgICByc2dGb250Q29sb3IoMC45ZiwgMC45ZiwgMC45NWYsIDEuMGYpOwotICAgICAgICByc2dCaW5kRm9udChnRm9udFNlcmlmKTsKLSAgICAgICAgcnNnRHJhd1RleHQoIkxvYWRpbmciLCA1MCwgNTApOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZighY2hlY2tJbml0KCkpIHsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgaWYgKGdQYXVzZVJlbmRlcmluZykgewotICAgICAgICByc2dEcmF3VGV4dCgiUGF1c2VkIiwgNTAsIDUwKTsKLSAgICAgICAgcmV0dXJuIDMwOwotICAgIH0KLSAgICBpZiAoZ0lzRGVidWdNb2RlKSB7Ci0gICAgICAgIGRlYnVnKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYmVuY2htYXJrKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3Qvc2hhZGVyX2RlZi5yc2ggYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3Qvc2hhZGVyX2RlZi5yc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ODM1OWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L3NoYWRlcl9kZWYucnNoCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi10eXBlZGVmIHN0cnVjdCBWZXJ0ZXhTaGFkZXJDb25zdGFudHNfcyB7Ci0gICAgcnNfbWF0cml4NHg0IG1vZGVsOwotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIGZsb2F0NCBsaWdodDBfUG9zaXNpb247Ci0gICAgZmxvYXQgbGlnaHQwX0RpZmZ1c2U7Ci0gICAgZmxvYXQgbGlnaHQwX1NwZWN1bGFyOwotICAgIGZsb2F0IGxpZ2h0MF9Db3NpbmVQb3dlcjsKLQotICAgIGZsb2F0NCBsaWdodDFfUG9zaXNpb247Ci0gICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2U7Ci0gICAgZmxvYXQgbGlnaHQxX1NwZWN1bGFyOwotICAgIGZsb2F0IGxpZ2h0MV9Db3NpbmVQb3dlcjsKLX0gVmVydGV4U2hhZGVyQ29uc3RhbnRzOwotCi10eXBlZGVmIHN0cnVjdCBWZXJ0ZXhTaGFkZXJDb25zdGFudHMzX3MgewotICAgIHJzX21hdHJpeDR4NCBtb2RlbDsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdCB0aW1lOwotfSBWZXJ0ZXhTaGFkZXJDb25zdGFudHMzOwotCi0KLXR5cGVkZWYgc3RydWN0IEZyYWdlbnRTaGFkZXJDb25zdGFudHNfcyB7Ci0gICAgZmxvYXQ0IGxpZ2h0MF9EaWZmdXNlQ29sb3I7Ci0gICAgZmxvYXQ0IGxpZ2h0MF9TcGVjdWxhckNvbG9yOwotCi0gICAgZmxvYXQ0IGxpZ2h0MV9EaWZmdXNlQ29sb3I7Ci0gICAgZmxvYXQ0IGxpZ2h0MV9TcGVjdWxhckNvbG9yOwotfSBGcmFnZW50U2hhZGVyQ29uc3RhbnRzOwotCi10eXBlZGVmIHN0cnVjdCBGcmFnZW50U2hhZGVyQ29uc3RhbnRzMl9zIHsKLSAgICBmbG9hdDQgbGlnaHRfRGlmZnVzZUNvbG9yWzJdOwotICAgIGZsb2F0NCBsaWdodF9TcGVjdWxhckNvbG9yWzJdOwotfSBGcmFnZW50U2hhZGVyQ29uc3RhbnRzMjsKLQotdHlwZWRlZiBzdHJ1Y3QgRnJhZ2VudFNoYWRlckNvbnN0YW50czNfcyB7Ci0gICAgZmxvYXQ0IGxpZ2h0MF9EaWZmdXNlQ29sb3I7Ci0gICAgZmxvYXQ0IGxpZ2h0MF9TcGVjdWxhckNvbG9yOwotICAgIGZsb2F0NCBsaWdodDBfUG9zaXNpb247Ci0gICAgZmxvYXQgbGlnaHQwX0RpZmZ1c2U7Ci0gICAgZmxvYXQgbGlnaHQwX1NwZWN1bGFyOwotICAgIGZsb2F0IGxpZ2h0MF9Db3NpbmVQb3dlcjsKLQotICAgIGZsb2F0NCBsaWdodDFfRGlmZnVzZUNvbG9yOwotICAgIGZsb2F0NCBsaWdodDFfU3BlY3VsYXJDb2xvcjsKLSAgICBmbG9hdDQgbGlnaHQxX1Bvc2lzaW9uOwotICAgIGZsb2F0IGxpZ2h0MV9EaWZmdXNlOwotICAgIGZsb2F0IGxpZ2h0MV9TcGVjdWxhcjsKLSAgICBmbG9hdCBsaWdodDFfQ29zaW5lUG93ZXI7Ci19IEZyYWdlbnRTaGFkZXJDb25zdGFudHMzOwotCi10eXBlZGVmIHN0cnVjdCBWZXJ0ZXhTaGFkZXJJbnB1dHNfcyB7Ci0gICAgZmxvYXQ0IHBvc2l0aW9uOwotICAgIGZsb2F0MyBub3JtYWw7Ci0gICAgZmxvYXQyIHRleHR1cmUwOwotfSBWZXJ0ZXhTaGFkZXJJbnB1dHM7Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9zdWJ0ZXN0X2RlZi5yc2ggYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3Qvc3VidGVzdF9kZWYucnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzY1OGIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC9zdWJ0ZXN0X2RlZi5yc2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQucGVyZnRlc3QpCi0KLXR5cGVkZWYgc3RydWN0IFRlc3REYXRhX3MgewotICAgIGludCByZW5kZXJTdXJmYWNlVzsKLSAgICBpbnQgcmVuZGVyU3VyZmFjZUg7Ci0gICAgZmxvYXQgZHQ7Ci19IFRlc3REYXRhOwotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvdGV4dF90ZXN0LnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L3RleHRfdGVzdC5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1MDgyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvdGV4dF90ZXN0LnJzCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotI2luY2x1ZGUgInN1YnRlc3RfZGVmLnJzaCIKLQotcnNfZm9udCBnRm9udFNhbnM7Ci1yc19mb250IGdGb250U2VyaWY7Ci0KLXR5cGVkZWYgc3RydWN0IFRleHRUZXN0RGF0YV9zIHsKLSAgICBpbnQgZmlsbE51bTsKLX0gVGV4dFRlc3REYXRhOwotVGV4dFRlc3REYXRhICpnRGF0YTsKLQotdm9pZCBpbml0KCkgewotfQotCi1zdGF0aWMgaW50IGdSZW5kZXJTdXJmYWNlVyA9IDEyODA7Ci1zdGF0aWMgaW50IGdSZW5kZXJTdXJmYWNlSCA9IDcyMDsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnNhbXBsZVRleHQgPSAiVGhpcyBpcyBhIHNhbXBsZSBvZiBzbWFsbCB0ZXh0IGZvciBwZXJmb3JtYWNlIjsKLS8vIE9mZnNldHMgZm9yIG11bHRpcGxlIGxheWVyIG9mIHRleHQKLXN0YXRpYyBpbnQgdGV4dE9mZnNldHNbXSA9IHsgMCwgIDAsIC01LCAtNSwgNSwgIDUsIC04LCAtOCwgOCwgIDh9Owotc3RhdGljIGZsb2F0IHRleHRDb2xvcnNbXSA9IHsxLjBmLCAxLjBmLCAxLjBmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAwLjdmLCAwLjVmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjdmLCAwLjVmLCAwLjVmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAwLjVmLCAwLjdmLCAxLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjVmLCAwLjZmLCAwLjdmLCAxLjBmLAotfTsKLQotc3RhdGljIHZvaWQgZGlzcGxheUZvbnRTYW1wbGVzKGludCBmaWxsTnVtKSB7Ci0KLSAgICByc19mb250IGZvbnRzWzVdOwotICAgIGZvbnRzWzBdID0gZ0ZvbnRTYW5zOwotICAgIGZvbnRzWzFdID0gZ0ZvbnRTZXJpZjsKLSAgICBmb250c1syXSA9IGdGb250U2FuczsKLSAgICBmb250c1szXSA9IGdGb250U2VyaWY7Ci0gICAgZm9udHNbNF0gPSBnRm9udFNhbnM7Ci0KLSAgICB1aW50IGhlaWdodCA9IGdSZW5kZXJTdXJmYWNlSDsKLSAgICBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gMCwgdG9wID0gMCwgYm90dG9tID0gMDsKLSAgICByc2dNZWFzdXJlVGV4dChzYW1wbGVUZXh0LCAmbGVmdCwgJnJpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLQotICAgIGludCB0ZXh0SGVpZ2h0ID0gdG9wIC0gYm90dG9tOwotICAgIGludCB0ZXh0V2lkdGggPSByaWdodCAtIGxlZnQ7Ci0gICAgaW50IG51bVZlcnRpY2FsTGluZXMgPSBoZWlnaHQgLyB0ZXh0SGVpZ2h0OwotICAgIGludCB5UG9zID0gdG9wOwotCi0gICAgaW50IHhPZmZzZXQgPSAwLCB5T2Zmc2V0ID0gMDsKLSAgICBmb3IoaW50IGZpbGxJID0gMDsgZmlsbEkgPCBmaWxsTnVtOyBmaWxsSSArKykgewotICAgICAgICByc2dCaW5kRm9udChmb250c1tmaWxsSV0pOwotICAgICAgICB4T2Zmc2V0ID0gdGV4dE9mZnNldHNbZmlsbEkgKiAyXTsKLSAgICAgICAgeU9mZnNldCA9IHRleHRPZmZzZXRzW2ZpbGxJICogMiArIDFdOwotICAgICAgICBmbG9hdCAqY29sUHRyID0gdGV4dENvbG9ycyArIGZpbGxJICogNDsKLSAgICAgICAgcnNnRm9udENvbG9yKGNvbFB0clswXSwgY29sUHRyWzFdLCBjb2xQdHJbMl0sIGNvbFB0clszXSk7Ci0gICAgICAgIGZvciAoaW50IGggPSAwOyBoIDwgNDsgaCArKykgewotICAgICAgICAgICAgeVBvcyA9IHRvcCArIHlPZmZzZXQ7Ci0gICAgICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IG51bVZlcnRpY2FsTGluZXM7IHYgKyspIHsKLSAgICAgICAgICAgICAgICByc2dEcmF3VGV4dChzYW1wbGVUZXh0LCB4T2Zmc2V0ICsgdGV4dFdpZHRoICogaCwgeVBvcyk7Ci0gICAgICAgICAgICAgICAgeVBvcyArPSB0ZXh0SGVpZ2h0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIHJvb3QoY29uc3Qgdm9pZCAqdl9pbiwgdm9pZCAqdl9vdXQsIGNvbnN0IHZvaWQgKnVzckRhdGEsIHVpbnQzMl90IHgsIHVpbnQzMl90IHkpIHsKLSAgICBUZXN0RGF0YSAqdGVzdERhdGEgPSAoVGVzdERhdGEqKXVzckRhdGE7Ci0gICAgZ1JlbmRlclN1cmZhY2VXID0gdGVzdERhdGEtPnJlbmRlclN1cmZhY2VXOwotICAgIGdSZW5kZXJTdXJmYWNlSCA9IHRlc3REYXRhLT5yZW5kZXJTdXJmYWNlSDsKLQotICAgIGdEYXRhID0gKFRleHRUZXN0RGF0YSopdl9pbjsKLQotICAgIGRpc3BsYXlGb250U2FtcGxlcyhnRGF0YS0+ZmlsbE51bSk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9QZXJmVGVzdC9zcmMvY29tL2FuZHJvaWQvcGVyZnRlc3QvdG9ydXNfdGVzdC5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC90b3J1c190ZXN0LnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTNhMDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC90b3J1c190ZXN0LnJzCisrKyAvZGV2L251bGwKQEAgLTEsMjk1ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5wZXJmdGVzdCkKLQotI2luY2x1ZGUgInJzX2dyYXBoaWNzLnJzaCIKLSNpbmNsdWRlICJzdWJ0ZXN0X2RlZi5yc2giCi0jaW5jbHVkZSAic2hhZGVyX2RlZi5yc2giCi0KLXJzX3Byb2dyYW1fdmVydGV4IGdQcm9nVmVydGV4OwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50Q29sb3I7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQcm9nRnJhZ21lbnRUZXh0dXJlOwotCi1yc19wcm9ncmFtX3N0b3JlIGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aDsKLXJzX21lc2ggZ1RvcnVzTWVzaDsKLQotcnNfcHJvZ3JhbV9yYXN0ZXIgZ0N1bGxCYWNrOwotcnNfcHJvZ3JhbV9yYXN0ZXIgZ0N1bGxGcm9udDsKLQotLy8gQ3VzdG9tIHZlcnRleCBzaGFkZXIgY29tcHVuZW50cwotVmVydGV4U2hhZGVyQ29uc3RhbnRzICpnVlNDb25zdGFudHM7Ci1GcmFnZW50U2hhZGVyQ29uc3RhbnRzICpnRlNDb25zdGFudHM7Ci1WZXJ0ZXhTaGFkZXJDb25zdGFudHMzICpnVlNDb25zdFBpeGVsOwotRnJhZ2VudFNoYWRlckNvbnN0YW50czMgKmdGU0NvbnN0UGl4ZWw7Ci0KLS8vIEN1c3RvbSBzaGFkZXJzIHdlIHVzZSBmb3IgbGlnaHRpbmcKLXJzX3Byb2dyYW1fdmVydGV4IGdQcm9nVmVydGV4Q3VzdG9tOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50Q3VzdG9tOwotCi1yc19zYW1wbGVyIGdMaW5lYXJDbGFtcDsKLXJzX2FsbG9jYXRpb24gZ1RleFRvcnVzOwotCi1yc19wcm9ncmFtX3ZlcnRleCBnUHJvZ1ZlcnRleFBpeGVsTGlnaHQ7Ci1yc19wcm9ncmFtX3ZlcnRleCBnUHJvZ1ZlcnRleFBpeGVsTGlnaHRNb3ZlOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUHJvZ0ZyYWdtZW50UGl4ZWxMaWdodDsKLQotdHlwZWRlZiBzdHJ1Y3QgVG9ydXNUZXN0RGF0YV9zIHsKLSAgICBpbnQgdGVzdElkOwotICAgIGludCB1c2VyMTsKLSAgICBpbnQgdXNlcjI7Ci19IFRvcnVzVGVzdERhdGE7Ci1Ub3J1c1Rlc3REYXRhICpnRGF0YTsKLQotc3RhdGljIGZsb2F0IGdEdCA9IDAuMGY7Ci0KLXN0YXRpYyBpbnQgZ1JlbmRlclN1cmZhY2VXOwotc3RhdGljIGludCBnUmVuZGVyU3VyZmFjZUg7Ci0KLQotc3RhdGljIGZsb2F0IGdUb3J1c1JvdGF0aW9uID0gMDsKLXN0YXRpYyB2b2lkIHVwZGF0ZU1vZGVsTWF0cml4KHJzX21hdHJpeDR4NCAqbWF0cml4LCB2b2lkICpidWZmZXIpIHsKLSAgICBpZiAoYnVmZmVyID09IDApIHsKLSAgICAgICAgcnNnUHJvZ3JhbVZlcnRleExvYWRNb2RlbE1hdHJpeChtYXRyaXgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJzZ0FsbG9jYXRpb25TeW5jQWxsKHJzR2V0QWxsb2NhdGlvbihidWZmZXIpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdUb3J1c2VzKGludCBudW1NZXNoZXMsIHJzX21hdHJpeDR4NCAqbWF0cml4LCB2b2lkICpidWZmZXIpIHsKLQotICAgIGlmIChudW1NZXNoZXMgPT0gMSkgewotICAgICAgICByc01hdHJpeExvYWRUcmFuc2xhdGUobWF0cml4LCAwLjBmLCAwLjBmLCAtNy41Zik7Ci0gICAgICAgIHJzTWF0cml4Um90YXRlKG1hdHJpeCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgICAgICB1cGRhdGVNb2RlbE1hdHJpeChtYXRyaXgsIGJ1ZmZlcik7Ci0gICAgICAgIHJzZ0RyYXdNZXNoKGdUb3J1c01lc2gpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG51bU1lc2hlcyA9PSAyKSB7Ci0gICAgICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZShtYXRyaXgsIC0xLjZmLCAwLjBmLCAtNy41Zik7Ci0gICAgICAgIHJzTWF0cml4Um90YXRlKG1hdHJpeCwgZ1RvcnVzUm90YXRpb24sIDEuMGYsIDAuMGYsIDAuMGYpOwotICAgICAgICB1cGRhdGVNb2RlbE1hdHJpeChtYXRyaXgsIGJ1ZmZlcik7Ci0gICAgICAgIHJzZ0RyYXdNZXNoKGdUb3J1c01lc2gpOwotCi0gICAgICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZShtYXRyaXgsIDEuNmYsIDAuMGYsIC03LjVmKTsKLSAgICAgICAgcnNNYXRyaXhSb3RhdGUobWF0cml4LCBnVG9ydXNSb3RhdGlvbiwgMS4wZiwgMC4wZiwgMC4wZik7Ci0gICAgICAgIHVwZGF0ZU1vZGVsTWF0cml4KG1hdHJpeCwgYnVmZmVyKTsKLSAgICAgICAgcnNnRHJhd01lc2goZ1RvcnVzTWVzaCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmbG9hdCBzdGFydFggPSAtNS4wZjsKLSAgICBmbG9hdCBzdGFydFkgPSAtMS41ZjsKLSAgICBmbG9hdCBzdGFydFogPSAtMTUuMGY7Ci0gICAgZmxvYXQgZGlzdCA9IDMuMmY7Ci0KLSAgICBmb3IgKGludCBoID0gMDsgaCA8IDQ7IGggKyspIHsKLSAgICAgICAgZm9yIChpbnQgdiA9IDA7IHYgPCAyOyB2ICsrKSB7Ci0gICAgICAgICAgICAvLyBQb3NpdGlvbiBvdXIgbW9kZWwgb24gdGhlIHNjcmVlbgotICAgICAgICAgICAgcnNNYXRyaXhMb2FkVHJhbnNsYXRlKG1hdHJpeCwgc3RhcnRYICsgZGlzdCAqIGgsIHN0YXJ0WSArIGRpc3QgKiB2LCBzdGFydFopOwotICAgICAgICAgICAgcnNNYXRyaXhSb3RhdGUobWF0cml4LCBnVG9ydXNSb3RhdGlvbiwgMS4wZiwgMC4wZiwgMC4wZik7Ci0gICAgICAgICAgICB1cGRhdGVNb2RlbE1hdHJpeChtYXRyaXgsIGJ1ZmZlcik7Ci0gICAgICAgICAgICByc2dEcmF3TWVzaChnVG9ydXNNZXNoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi0vLyBRdWljayBoYWNrIHRvIGdldCBzb21lIGdlb21ldHJ5IG51bWJlcnMKLXN0YXRpYyB2b2lkIGRpc3BsYXlTaW1wbGVHZW9TYW1wbGVzKGJvb2wgdXNlVGV4dHVyZSwgaW50IG51bU1lc2hlcykgewotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQcm9nVmVydGV4KTsKLSAgICByc2dCaW5kUHJvZ3JhbVJhc3RlcihnQ3VsbEJhY2spOwotICAgIC8vIFNldHVwIHRoZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIDMwIGRlZ3JlZSBmaWVsZCBvZiB2aWV3Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KWdSZW5kZXJTdXJmYWNlVyAvIChmbG9hdClnUmVuZGVyU3VyZmFjZUg7Ci0gICAgcnNNYXRyaXhMb2FkUGVyc3BlY3RpdmUoJnByb2osIDMwLjBmLCBhc3BlY3QsIDAuMWYsIDEwMC4wZik7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgaWYgKHVzZVRleHR1cmUpIHsKLSAgICAgICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50VGV4dHVyZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50Q29sb3IpOwotICAgICAgICByc2dQcm9ncmFtRnJhZ21lbnRDb25zdGFudENvbG9yKGdQcm9nRnJhZ21lbnRDb2xvciwgMC4xLCAwLjcsIDAuMSwgMSk7Ci0gICAgfQotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnVGV4VG9ydXMpOwotCi0gICAgLy8gQXBwbHkgYSByb3RhdGlvbiB0byBvdXIgbWVzaAotICAgIGdUb3J1c1JvdGF0aW9uICs9IDUwLjBmICogZ0R0OwotICAgIGlmIChnVG9ydXNSb3RhdGlvbiA+IDM2MC4wZikgewotICAgICAgICBnVG9ydXNSb3RhdGlvbiAtPSAzNjAuMGY7Ci0gICAgfQotCi0gICAgcnNfbWF0cml4NHg0IG1hdHJpeDsKLSAgICBkcmF3VG9ydXNlcyhudW1NZXNoZXMsICZtYXRyaXgsIDApOwotfQotCi1mbG9hdCBnTGlnaHQwUm90YXRpb24gPSAwOwotZmxvYXQgZ0xpZ2h0MVJvdGF0aW9uID0gMDsKLQotc3RhdGljIHZvaWQgc2V0dXBDdXN0b21TaGFkZXJMaWdodHMoKSB7Ci0gICAgZmxvYXQ0IGxpZ2h0MFBvcyA9IHstNS4wZiwgNS4wZiwgLTEwLjBmLCAxLjBmfTsKLSAgICBmbG9hdDQgbGlnaHQxUG9zID0gezIuMGYsIDUuMGYsIDE1LjBmLCAxLjBmfTsKLSAgICBmbG9hdDQgbGlnaHQwRGlmZkNvbCA9IHswLjlmLCAwLjdmLCAwLjdmLCAxLjBmfTsKLSAgICBmbG9hdDQgbGlnaHQwU3BlY0NvbCA9IHswLjlmLCAwLjZmLCAwLjZmLCAxLjBmfTsKLSAgICBmbG9hdDQgbGlnaHQxRGlmZkNvbCA9IHswLjVmLCAwLjVmLCAwLjlmLCAxLjBmfTsKLSAgICBmbG9hdDQgbGlnaHQxU3BlY0NvbCA9IHswLjVmLCAwLjVmLCAwLjlmLCAxLjBmfTsKLQotICAgIGdMaWdodDBSb3RhdGlvbiArPSA1MC4wZiAqIGdEdDsKLSAgICBpZiAoZ0xpZ2h0MFJvdGF0aW9uID4gMzYwLjBmKSB7Ci0gICAgICAgIGdMaWdodDBSb3RhdGlvbiAtPSAzNjAuMGY7Ci0gICAgfQotICAgIGdMaWdodDFSb3RhdGlvbiAtPSA1MC4wZiAqIGdEdDsKLSAgICBpZiAoZ0xpZ2h0MVJvdGF0aW9uID4gMzYwLjBmKSB7Ci0gICAgICAgIGdMaWdodDFSb3RhdGlvbiAtPSAzNjAuMGY7Ci0gICAgfQotCi0gICAgcnNfbWF0cml4NHg0IGwwTWF0OwotICAgIHJzTWF0cml4TG9hZFJvdGF0ZSgmbDBNYXQsIGdMaWdodDBSb3RhdGlvbiwgMS4wZiwgMC4wZiwgMC4wZik7Ci0gICAgbGlnaHQwUG9zID0gcnNNYXRyaXhNdWx0aXBseSgmbDBNYXQsIGxpZ2h0MFBvcyk7Ci0gICAgcnNfbWF0cml4NHg0IGwxTWF0OwotICAgIHJzTWF0cml4TG9hZFJvdGF0ZSgmbDFNYXQsIGdMaWdodDFSb3RhdGlvbiwgMC4wZiwgMC4wZiwgMS4wZik7Ci0gICAgbGlnaHQxUG9zID0gcnNNYXRyaXhNdWx0aXBseSgmbDFNYXQsIGxpZ2h0MVBvcyk7Ci0KLSAgICAvLyBTZXQgbGlnaHQgMCBwcm9wZXJ0aWVzCi0gICAgZ1ZTQ29uc3RhbnRzLT5saWdodDBfUG9zaXNpb24gPSBsaWdodDBQb3M7Ci0gICAgZ1ZTQ29uc3RhbnRzLT5saWdodDBfRGlmZnVzZSA9IDEuMGY7Ci0gICAgZ1ZTQ29uc3RhbnRzLT5saWdodDBfU3BlY3VsYXIgPSAwLjVmOwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQwX0Nvc2luZVBvd2VyID0gMTAuMGY7Ci0gICAgLy8gU2V0IGxpZ2h0IDEgcHJvcGVydGllcwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQxX1Bvc2lzaW9uID0gbGlnaHQxUG9zOwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQxX0RpZmZ1c2UgPSAxLjBmOwotICAgIGdWU0NvbnN0YW50cy0+bGlnaHQxX1NwZWN1bGFyID0gMC43ZjsKLSAgICBnVlNDb25zdGFudHMtPmxpZ2h0MV9Db3NpbmVQb3dlciA9IDI1LjBmOwotICAgIHJzZ0FsbG9jYXRpb25TeW5jQWxsKHJzR2V0QWxsb2NhdGlvbihnVlNDb25zdGFudHMpKTsKLQotICAgIC8vIFVwZGF0ZSBmcmFnbWVudCBzaGFkZXIgY29uc3RhbnRzCi0gICAgLy8gU2V0IGxpZ2h0IDAgY29sb3JzCi0gICAgZ0ZTQ29uc3RhbnRzLT5saWdodDBfRGlmZnVzZUNvbG9yID0gbGlnaHQwRGlmZkNvbDsKLSAgICBnRlNDb25zdGFudHMtPmxpZ2h0MF9TcGVjdWxhckNvbG9yID0gbGlnaHQwU3BlY0NvbDsKLSAgICAvLyBTZXQgbGlnaHQgMSBjb2xvcnMKLSAgICBnRlNDb25zdGFudHMtPmxpZ2h0MV9EaWZmdXNlQ29sb3IgPSBsaWdodDFEaWZmQ29sOwotICAgIGdGU0NvbnN0YW50cy0+bGlnaHQxX1NwZWN1bGFyQ29sb3IgPSBsaWdodDFTcGVjQ29sOwotICAgIHJzZ0FsbG9jYXRpb25TeW5jQWxsKHJzR2V0QWxsb2NhdGlvbihnRlNDb25zdGFudHMpKTsKLQotICAgIC8vIFNldCBsaWdodCAwIHByb3BlcnRpZXMgZm9yIHBlciBwaXhlbCBsaWdodGluZwotICAgIGdGU0NvbnN0UGl4ZWwtPmxpZ2h0MF9Qb3Npc2lvbiA9IGxpZ2h0MFBvczsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDBfRGlmZnVzZSA9IDEuMGY7Ci0gICAgZ0ZTQ29uc3RQaXhlbC0+bGlnaHQwX1NwZWN1bGFyID0gMC41ZjsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDBfQ29zaW5lUG93ZXIgPSAxMC4wZjsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDBfRGlmZnVzZUNvbG9yID0gbGlnaHQwRGlmZkNvbDsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDBfU3BlY3VsYXJDb2xvciA9IGxpZ2h0MFNwZWNDb2w7Ci0gICAgLy8gU2V0IGxpZ2h0IDEgcHJvcGVydGllcwotICAgIGdGU0NvbnN0UGl4ZWwtPmxpZ2h0MV9Qb3Npc2lvbiA9IGxpZ2h0MVBvczsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDFfRGlmZnVzZSA9IDEuMGY7Ci0gICAgZ0ZTQ29uc3RQaXhlbC0+bGlnaHQxX1NwZWN1bGFyID0gMC43ZjsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDFfQ29zaW5lUG93ZXIgPSAyNS4wZjsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDFfRGlmZnVzZUNvbG9yID0gbGlnaHQxRGlmZkNvbDsKLSAgICBnRlNDb25zdFBpeGVsLT5saWdodDFfU3BlY3VsYXJDb2xvciA9IGxpZ2h0MVNwZWNDb2w7Ci0gICAgcnNnQWxsb2NhdGlvblN5bmNBbGwocnNHZXRBbGxvY2F0aW9uKGdGU0NvbnN0UGl4ZWwpKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzcGxheUN1c3RvbVNoYWRlclNhbXBsZXMoaW50IG51bU1lc2hlcykgewotCi0gICAgLy8gVXBkYXRlIHZlcnRleCBzaGFkZXIgY29uc3RhbnRzCi0gICAgLy8gTG9hZCBtb2RlbCBtYXRyaXgKLSAgICAvLyBBcHBseSBhIHJvdGF0aW9uIHRvIG91ciBtZXNoCi0gICAgZ1RvcnVzUm90YXRpb24gKz0gNTAuMGYgKiBnRHQ7Ci0gICAgaWYgKGdUb3J1c1JvdGF0aW9uID4gMzYwLjBmKSB7Ci0gICAgICAgIGdUb3J1c1JvdGF0aW9uIC09IDM2MC4wZjsKLSAgICB9Ci0KLSAgICAvLyBTZXR1cCB0aGUgcHJvamVjdGlvbiBtYXRyaXgKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpZ1JlbmRlclN1cmZhY2VXIC8gKGZsb2F0KWdSZW5kZXJTdXJmYWNlSDsKLSAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmZ1ZTQ29uc3RhbnRzLT5wcm9qLCAzMC4wZiwgYXNwZWN0LCAwLjFmLCAxMDAuMGYpOwotICAgIHNldHVwQ3VzdG9tU2hhZGVyTGlnaHRzKCk7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUHJvZ1ZlcnRleEN1c3RvbSk7Ci0KLSAgICAvLyBGcmFnbWVudCBzaGFkZXIgd2l0aCB0ZXh0dXJlCi0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUHJvZ1N0b3JlQmxlbmROb25lRGVwdGgpOwotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudEN1c3RvbSk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudEN1c3RvbSwgMCwgZ0xpbmVhckNsYW1wKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUHJvZ0ZyYWdtZW50Q3VzdG9tLCAwLCBnVGV4VG9ydXMpOwotCi0gICAgLy8gVXNlIGJhY2sgZmFjZSBjdWxsaW5nCi0gICAgcnNnQmluZFByb2dyYW1SYXN0ZXIoZ0N1bGxCYWNrKTsKLQotICAgIGRyYXdUb3J1c2VzKG51bU1lc2hlcywgJmdWU0NvbnN0YW50cy0+bW9kZWwsIGdWU0NvbnN0YW50cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc3BsYXlQaXhlbExpZ2h0U2FtcGxlcyhpbnQgbnVtTWVzaGVzLCBib29sIGhlYXZ5VmVydGV4KSB7Ci0KLSAgICAvLyBVcGRhdGUgdmVydGV4IHNoYWRlciBjb25zdGFudHMKLSAgICAvLyBMb2FkIG1vZGVsIG1hdHJpeAotICAgIC8vIEFwcGx5IGEgcm90YXRpb24gdG8gb3VyIG1lc2gKLSAgICBnVG9ydXNSb3RhdGlvbiArPSAzMC4wZiAqIGdEdDsKLSAgICBpZiAoZ1RvcnVzUm90YXRpb24gPiAzNjAuMGYpIHsKLSAgICAgICAgZ1RvcnVzUm90YXRpb24gLT0gMzYwLjBmOwotICAgIH0KLQotICAgIGdWU0NvbnN0UGl4ZWwtPnRpbWUgPSByc1VwdGltZU1pbGxpcygpKjAuMDA1OwotCi0gICAgLy8gU2V0dXAgdGhlIHByb2plY3Rpb24gbWF0cml4Ci0gICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KWdSZW5kZXJTdXJmYWNlVyAvIChmbG9hdClnUmVuZGVyU3VyZmFjZUg7Ci0gICAgcnNNYXRyaXhMb2FkUGVyc3BlY3RpdmUoJmdWU0NvbnN0UGl4ZWwtPnByb2osIDMwLjBmLCBhc3BlY3QsIDAuMWYsIDEwMC4wZik7Ci0gICAgc2V0dXBDdXN0b21TaGFkZXJMaWdodHMoKTsKLQotICAgIGlmIChoZWF2eVZlcnRleCkgewotICAgICAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUHJvZ1ZlcnRleFBpeGVsTGlnaHRNb3ZlKTsKLSAgICB9IGVsc2UgewotICAgICAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUHJvZ1ZlcnRleFBpeGVsTGlnaHQpOwotICAgIH0KLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZE5vbmVEZXB0aCk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUHJvZ0ZyYWdtZW50UGl4ZWxMaWdodCk7Ci0gICAgcnNnQmluZFNhbXBsZXIoZ1Byb2dGcmFnbWVudFBpeGVsTGlnaHQsIDAsIGdMaW5lYXJDbGFtcCk7Ci0gICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFBpeGVsTGlnaHQsIDAsIGdUZXhUb3J1cyk7Ci0KLSAgICAvLyBVc2UgYmFjayBmYWNlIGN1bGxpbmcKLSAgICByc2dCaW5kUHJvZ3JhbVJhc3RlcihnQ3VsbEJhY2spOwotCi0gICAgZHJhd1RvcnVzZXMobnVtTWVzaGVzLCAmZ1ZTQ29uc3RQaXhlbC0+bW9kZWwsIGdWU0NvbnN0UGl4ZWwpOwotfQotCi0KLXZvaWQgcm9vdChjb25zdCB2b2lkICp2X2luLCB2b2lkICp2X291dCwgY29uc3Qgdm9pZCAqdXNyRGF0YSwgdWludDMyX3QgeCwgdWludDMyX3QgeSkgewotICAgIFRlc3REYXRhICp0ZXN0RGF0YSA9IChUZXN0RGF0YSopdXNyRGF0YTsKLSAgICBnUmVuZGVyU3VyZmFjZVcgPSB0ZXN0RGF0YS0+cmVuZGVyU3VyZmFjZVc7Ci0gICAgZ1JlbmRlclN1cmZhY2VIID0gdGVzdERhdGEtPnJlbmRlclN1cmZhY2VIOwotICAgIGdEdCA9IHRlc3REYXRhLT5kdDsKLQotICAgIGdEYXRhID0gKFRvcnVzVGVzdERhdGEqKXZfaW47Ci0KLSAgICBzd2l0Y2goZ0RhdGEtPnRlc3RJZCkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBkaXNwbGF5U2ltcGxlR2VvU2FtcGxlcyhnRGF0YS0+dXNlcjEgPT0gMSA/IHRydWUgOiBmYWxzZSwgZ0RhdGEtPnVzZXIyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBkaXNwbGF5Q3VzdG9tU2hhZGVyU2FtcGxlcyhnRGF0YS0+dXNlcjEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIGRpc3BsYXlQaXhlbExpZ2h0U2FtcGxlcyhnRGF0YS0+dXNlcjEsIGdEYXRhLT51c2VyMiA9PSAxID8gdHJ1ZSA6IGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcnNEZWJ1ZygiV3JvbmcgdGVzdCBudW1iZXIiLCBnRGF0YS0+dGVzdElkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1BlcmZUZXN0L3NyYy9jb20vYW5kcm9pZC9wZXJmdGVzdC91aV90ZXN0LnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L3VpX3Rlc3QucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4N2RiMzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvUGVyZlRlc3Qvc3JjL2NvbS9hbmRyb2lkL3BlcmZ0ZXN0L3VpX3Rlc3QucnMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnBlcmZ0ZXN0KQotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotI2luY2x1ZGUgInNoYWRlcl9kZWYucnNoIgotI2luY2x1ZGUgInN1YnRlc3RfZGVmLnJzaCIKLQotLy8gUGFyYW1ldGVycyBmb3IgZ2FsYXh5IGxpdmUgd2FsbHBhcGVyCi1yc19hbGxvY2F0aW9uIGdUU3BhY2U7Ci1yc19hbGxvY2F0aW9uIGdUTGlnaHQxOwotcnNfYWxsb2NhdGlvbiBnVEZsYXJlczsKLXJzX21lc2ggZ1BhcnRpY2xlc01lc2g7Ci0KLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1BGQmFja2dyb3VuZDsKLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1BGU3RhcnM7Ci1yc19wcm9ncmFtX3ZlcnRleCBnUFZTdGFyczsKLXJzX3Byb2dyYW1fdmVydGV4IGdQVkJrUHJvajsKLXJzX3Byb2dyYW1fc3RvcmUgZ1BTTGlnaHRzOwotCi1mbG9hdCBnWE9mZnNldCA9IDAuNWY7Ci0KLSNkZWZpbmUgRUxMSVBTRV9SQVRJTyAwLjg5MmYKLSNkZWZpbmUgUEkgMy4xNDE1ZgotI2RlZmluZSBUV09fUEkgNi4yODNmCi0jZGVmaW5lIEVMTElQU0VfVFdJU1QgMC4wMjMzMzMzMzNmCi0KLXN0YXRpYyBmbG9hdCBhbmdsZSA9IDUwLmY7Ci1zdGF0aWMgaW50IGdPbGRXaWR0aDsKLXN0YXRpYyBpbnQgZ09sZEhlaWdodDsKLXN0YXRpYyBpbnQgZ1dpZHRoOwotc3RhdGljIGludCBnSGVpZ2h0Owotc3RhdGljIGZsb2F0IGdTcGVlZFsxMjAwMF07Ci1zdGF0aWMgaW50IGdHYWxheHlSYWRpdXMgPSAzMDA7Ci1zdGF0aWMgcnNfYWxsb2NhdGlvbiBnUGFydGljbGVzQnVmZmVyOwotCi10eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKSBQYXJ0aWNsZSB7Ci0gICAgdWNoYXI0IGNvbG9yOwotICAgIGZsb2F0MyBwb3NpdGlvbjsKLX0gUGFydGljbGVfdDsKLVBhcnRpY2xlX3QgKlBhcnRpY2xlczsKLQotdHlwZWRlZiBzdHJ1Y3QgVnBDb25zdHMgewotICAgIHJzX21hdHJpeDR4NCBQcm9qOwotICAgIHJzX21hdHJpeDR4NCBNVlA7Ci19IFZwQ29uc3RzX3Q7Ci1WcENvbnN0c190ICp2cENvbnN0YW50czsKLS8vIEVuZCBvZiBwYXJhbWV0ZXJzIGZvciBnYWxheHkgbGl2ZSB3YWxscGFwZXIKLQotcnNfcHJvZ3JhbV92ZXJ0ZXggZ1Byb2dWZXJ0ZXg7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQcm9nRnJhZ21lbnRDb2xvcjsKLXJzX3Byb2dyYW1fZnJhZ21lbnQgZ1Byb2dGcmFnbWVudFRleHR1cmU7Ci0KLXJzX3Byb2dyYW1fc3RvcmUgZ1Byb2dTdG9yZUJsZW5kQWxwaGE7Ci0KLXJzX2FsbG9jYXRpb24gZ1RleE9wYXF1ZTsKLXJzX2FsbG9jYXRpb24gZ1RleFRvcnVzOwotcnNfYWxsb2NhdGlvbiBnVGV4R2xvYmU7Ci0KLXR5cGVkZWYgc3RydWN0IExpc3RBbGxvY3NfcyB7Ci0gICAgcnNfYWxsb2NhdGlvbiBpdGVtOwotfSBMaXN0QWxsb2NzOwotCi1MaXN0QWxsb2NzICpnVGV4TGlzdDEwMDsKLUxpc3RBbGxvY3MgKmdTYW1wbGVUZXh0TGlzdDEwMDsKLUxpc3RBbGxvY3MgKmdMaXN0Vmlld1RleHQ7Ci0KLXJzX21lc2ggZ1NpbmdsZU1lc2g7Ci0KLXJzX2ZvbnQgZ0ZvbnRTYW5zOwotCi1yc19zYW1wbGVyIGdMaW5lYXJDbGFtcDsKLQotdHlwZWRlZiBzdHJ1Y3QgVWlUZXN0RGF0YV9zIHsKLSAgICBpbnQgdGVzdElkOwotICAgIGludCB1c2VyMTsKLSAgICBpbnQgdXNlcjI7Ci0gICAgaW50IHVzZXIzOwotfSBVaVRlc3REYXRhOwotVWlUZXN0RGF0YSAqZ0RhdGE7Ci0KLXN0YXRpYyBmbG9hdCBnRHQgPSAwOwotCi0KLXZvaWQgaW5pdCgpIHsKLX0KLQotc3RhdGljIGludCBnUmVuZGVyU3VyZmFjZVc7Ci1zdGF0aWMgaW50IGdSZW5kZXJTdXJmYWNlSDsKLQotc3RhdGljIHZvaWQgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpIHsKLSAgICAvLyBEZWZhdWx0IHZlcnRleCBzaGFkZXIKLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUHJvZ1ZlcnRleCk7Ci0gICAgLy8gU2V0dXAgdGhlIHByb2plY3Rpb24gbWF0cml4Ci0gICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgcnNNYXRyaXhMb2FkT3J0aG8oJnByb2osIDAsIGdSZW5kZXJTdXJmYWNlVywgZ1JlbmRlclN1cmZhY2VILCAwLCAtNTAwLCA1MDApOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci19Ci0KLS8qKgotICAqIE1ldGhvZHMgdG8gZHJhdyB0aGUgZ2FsYXh5IGxpdmUgd2FsbCBwYXBlcgotICAqLwotc3RhdGljIGZsb2F0IG1hcGYoZmxvYXQgbWluU3RhcnQsIGZsb2F0IG1pblN0b3AsIGZsb2F0IG1heFN0YXJ0LCBmbG9hdCBtYXhTdG9wLCBmbG9hdCB2YWx1ZSkgewotICAgIHJldHVybiBtYXhTdGFydCArIChtYXhTdGFydCAtIG1heFN0b3ApICogKCh2YWx1ZSAtIG1pblN0YXJ0KSAvIChtaW5TdG9wIC0gbWluU3RhcnQpKTsKLX0KLQotLyoqCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0YXJzLgotICovCi1zdGF0aWMgZmxvYXQgcmFuZG9tR2F1c3MoKSB7Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxvYXQgdyA9IDIuZjsKLQotICAgIHdoaWxlICh3ID49IDEuMGYpIHsKLSAgICAgICAgeDEgPSByc1JhbmQoMi4wZikgLSAxLjBmOwotICAgICAgICB4MiA9IHJzUmFuZCgyLjBmKSAtIDEuMGY7Ci0gICAgICAgIHcgPSB4MSAqIHgxICsgeDIgKiB4MjsKLSAgICB9Ci0KLSAgICB3ID0gc3FydCgtMi4wZiAqIGxvZyh3KSAvIHcpOwotICAgIHJldHVybiB4MSAqIHc7Ci19Ci0KLS8qKgotICogR2VuZXJhdGVzIHRoZSBwcm9wZXJ0aWVzIGZvciBhIGdpdmVuIHN0YXIuCi0gKi8KLXN0YXRpYyB2b2lkIGNyZWF0ZVBhcnRpY2xlKFBhcnRpY2xlX3QgKnBhcnQsIGludCBpZHgsIGZsb2F0IHNjYWxlKSB7Ci0gICAgZmxvYXQgZCA9IGZhYnMocmFuZG9tR2F1c3MoKSkgKiBnR2FsYXh5UmFkaXVzICogMC41ZiArIHJzUmFuZCg2NC4wZik7Ci0gICAgZmxvYXQgaWQgPSBkIC8gZ0dhbGF4eVJhZGl1czsKLSAgICBmbG9hdCB6ID0gcmFuZG9tR2F1c3MoKSAqIDAuNGYgKiAoMS4wZiAtIGlkKTsKLQotICAgIGlmIChkIDwgZ0dhbGF4eVJhZGl1cyAqIDAuMzNmKSB7Ci0gICAgICAgIHBhcnQtPmNvbG9yLnggPSAodWNoYXIpICgyMjAgKyBpZCAqIDM1KTsKLSAgICAgICAgcGFydC0+Y29sb3IueSA9IDIyMDsKLSAgICAgICAgcGFydC0+Y29sb3IueiA9IDIyMDsKLSAgICB9IGVsc2UgewotICAgICAgICBwYXJ0LT5jb2xvci54ID0gMTgwOwotICAgICAgICBwYXJ0LT5jb2xvci55ID0gMTgwOwotICAgICAgICBwYXJ0LT5jb2xvci56ID0gKHVjaGFyKSBjbGFtcCgxNDAuZiArIGlkICogMTE1LmYsIDE0MC5mLCAyNTUuZik7Ci0gICAgfQotICAgIC8vIFN0YXNoIHBvaW50IHNpemUgKiAxMCBpbiBBbHBoYQotICAgIHBhcnQtPmNvbG9yLncgPSAodWNoYXIpIChyc1JhbmQoMS4yZiwgMi4xZikgKiA2MCk7Ci0KLSAgICBpZiAoZCA+IGdHYWxheHlSYWRpdXMgKiAwLjE1ZikgewotICAgICAgICB6ICo9IDAuNmYgKiAoMS4wZiAtIGlkKTsKLSAgICB9IGVsc2UgewotICAgICAgICB6ICo9IDAuNzJmOwotICAgIH0KLQotICAgIC8vIE1hcCB0byB0aGUgcHJvamVjdGlvbiBjb29yZGluYXRlcyAodmlld3BvcnQueCA9IC0xLjAgLT4gMS4wKQotICAgIGQgPSBtYXBmKC00LjBmLCBnR2FsYXh5UmFkaXVzICsgNC4wZiwgMC4wZiwgc2NhbGUsIGQpOwotCi0gICAgcGFydC0+cG9zaXRpb24ueCA9IHJzUmFuZChUV09fUEkpOwotICAgIHBhcnQtPnBvc2l0aW9uLnkgPSBkOwotICAgIGdTcGVlZFtpZHhdID0gcnNSYW5kKDAuMDAxNWYsIDAuMDAyNWYpICogKDAuNWYgKyAoc2NhbGUgLyBkKSkgKiAwLjhmOwotCi0gICAgcGFydC0+cG9zaXRpb24ueiA9IHogLyA1LjBmOwotfQotCi0vKioKLSAqIEluaXRpYWxpemUgYWxsIHRoZSBzdGFydHMsIGNhbGxlZCBmcm9tIEphdmEKLSAqLwotdm9pZCBpbml0UGFydGljbGVzKCkgewotICAgIFBhcnRpY2xlX3QgKnBhcnQgPSBQYXJ0aWNsZXM7Ci0gICAgZmxvYXQgc2NhbGUgPSBnR2FsYXh5UmFkaXVzIC8gKGdXaWR0aCAqIDAuNWYpOwotICAgIGludCBjb3VudCA9IHJzQWxsb2NhdGlvbkdldERpbVgoZ1BhcnRpY2xlc0J1ZmZlcik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgewotICAgICAgICBjcmVhdGVQYXJ0aWNsZShwYXJ0LCBpLCBzY2FsZSk7Ci0gICAgICAgIHBhcnQrKzsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdTcGFjZSgpIHsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUU3BhY2UpOwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKAotICAgICAgICAgICAgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiwKLSAgICAgICAgICAgIGdXaWR0aCwgMC4wZiwgMC4wZiwgMi4wZiwgMS4wZiwKLSAgICAgICAgICAgIGdXaWR0aCwgZ0hlaWdodCwgMC4wZiwgMi4wZiwgMC4wZiwKLSAgICAgICAgICAgIDAuMGYsIGdIZWlnaHQsIDAuMGYsIDAuMGYsIDAuMGYpOwotfQotCi1zdGF0aWMgdm9pZCBkcmF3TGlnaHRzKCkgewotICAgIHJzZ0JpbmRQcm9ncmFtVmVydGV4KGdQVkJrUHJvaik7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUEZCYWNrZ3JvdW5kKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUEZCYWNrZ3JvdW5kLCAwLCBnVExpZ2h0MSk7Ci0KLSAgICBmbG9hdCBzY2FsZSA9IDUxMi4wZiAvIGdXaWR0aDsKLSAgICBmbG9hdCB4ID0gLXNjYWxlIC0gc2NhbGUgKiAwLjA1ZjsKLSAgICBmbG9hdCB5ID0gLXNjYWxlOwotCi0gICAgc2NhbGUgKj0gMi4wZjsKLQotICAgIHJzZ0RyYXdRdWFkKHgsIHksIDAuMGYsCi0gICAgICAgICAgICAgeCArIHNjYWxlICogMS4xZiwgeSwgMC4wZiwKLSAgICAgICAgICAgICB4ICsgc2NhbGUgKiAxLjFmLCB5ICsgc2NhbGUsIDAuMGYsCi0gICAgICAgICAgICAgeCwgeSArIHNjYWxlLCAwLjBmKTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1BhcnRpY2xlcyhmbG9hdCBvZmZzZXQpIHsKLSAgICBmbG9hdCBhID0gb2Zmc2V0ICogYW5nbGU7Ci0gICAgZmxvYXQgYWJzb2x1dGVBbmdsZSA9IGZhYnMoYSk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZSgmbWF0cml4LCAwLjBmLCAwLjBmLCAxMC4wZiAtIDYuMGYgKiBhYnNvbHV0ZUFuZ2xlIC8gNTAuMGYpOwotICAgIGlmIChnSGVpZ2h0ID4gZ1dpZHRoKSB7Ci0gICAgICAgIHJzTWF0cml4U2NhbGUoJm1hdHJpeCwgNi42ZiwgNi4wZiwgMS4wZik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNNYXRyaXhTY2FsZSgmbWF0cml4LCAxMi42ZiwgMTIuMGYsIDEuMGYpOwotICAgIH0KLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCBhYnNvbHV0ZUFuZ2xlLCAxLjBmLCAwLjBmLCAwLjBmKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCBhLCAwLjBmLCAwLjRmLCAwLjFmKTsKLSAgICByc01hdHJpeExvYWQoJnZwQ29uc3RhbnRzLT5NVlAsICZ2cENvbnN0YW50cy0+UHJvaik7Ci0gICAgcnNNYXRyaXhNdWx0aXBseSgmdnBDb25zdGFudHMtPk1WUCwgJm1hdHJpeCk7Ci0gICAgcnNnQWxsb2NhdGlvblN5bmNBbGwocnNHZXRBbGxvY2F0aW9uKHZwQ29uc3RhbnRzKSk7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUFZTdGFycyk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUEZTdGFycyk7Ci0gICAgcnNnQmluZFByb2dyYW1TdG9yZShnUFNMaWdodHMpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRlN0YXJzLCAwLCBnVEZsYXJlcyk7Ci0KLSAgICBQYXJ0aWNsZV90ICp2dHggPSBQYXJ0aWNsZXM7Ci0gICAgaW50IGNvdW50ID0gcnNBbGxvY2F0aW9uR2V0RGltWChnUGFydGljbGVzQnVmZmVyKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgdnR4LT5wb3NpdGlvbi54ID0gdnR4LT5wb3NpdGlvbi54ICsgZ1NwZWVkW2ldOwotICAgICAgICB2dHgrKzsKLSAgICB9Ci0KLSAgICByc2dEcmF3TWVzaChnUGFydGljbGVzTWVzaCk7Ci19Ci0vKiBlbmQgb2YgbWV0aG9kcyBmb3IgZHJhd2luZyBnYWxheHkgKi8KLQotLy8gRGlzcGxheSBzYW1wbGUgaW1hZ2VzIGluIGEgbWVzaCB3aXRoIGRpZmZlcmVudCB0ZXh0dXJlCi1zdGF0aWMgdm9pZCBkaXNwbGF5SWNvbnMoaW50IG1lc2hNb2RlKSB7Ci0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotCi0gICAgLy8gRnJhZ21lbnQgc2hhZGVyIHdpdGggdGV4dHVyZQotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kQWxwaGEpOwotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudFRleHR1cmUpOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnVGV4VG9ydXMpOwotICAgIHJzZ0RyYXdRdWFkVGV4Q29vcmRzKAotICAgICAgICAgICAgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiwKLSAgICAgICAgICAgIDAuMGYsIGdSZW5kZXJTdXJmYWNlSCwgMC4wZiwgMC4wZiwgMS4wZiwKLSAgICAgICAgICAgIGdSZW5kZXJTdXJmYWNlVywgZ1JlbmRlclN1cmZhY2VILCAwLjBmLCAxLjBmLCAxLjBmLAotICAgICAgICAgICAgZ1JlbmRlclN1cmZhY2VXLCAwLjBmLCAwLjBmLCAxLjBmLCAwLjBmKTsKLQotICAgIGludCBtZXNoQ291bnQgPSAoaW50KXBvdygxMC4wZiwgKGZsb2F0KShtZXNoTW9kZSArIDEpKTsKLQotICAgIGZsb2F0IHdTaXplID0gZ1JlbmRlclN1cmZhY2VXLyhmbG9hdCltZXNoQ291bnQ7Ci0gICAgZmxvYXQgaFNpemUgPSBnUmVuZGVyU3VyZmFjZUgvKGZsb2F0KW1lc2hDb3VudDsKLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgIHJzTWF0cml4TG9hZFNjYWxlKCZtYXRyaXgsIHdTaXplLCBoU2l6ZSwgMS4wKTsKLQotICAgIGZsb2F0IHlQb3MgPSAwOwotICAgIGZsb2F0IHlQYWQgPSBoU2l6ZSAvIDI7Ci0gICAgZmxvYXQgeFBhZCA9IHdTaXplIC8gMjsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1lc2hDb3VudDsgeSsrKSB7Ci0gICAgICAgIHlQb3MgPSB5ICogaFNpemUgKyB5UGFkOwotICAgICAgICBmbG9hdCB4UG9zID0gMDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtZXNoQ291bnQ7IHgrKykgewotICAgICAgICAgICAgeFBvcyA9IHggKiB3U2l6ZSArIHhQYWQ7Ci0gICAgICAgICAgICByc19tYXRyaXg0eDQgdHJhbnNNYXRyaXg7Ci0gICAgICAgICAgICByc01hdHJpeExvYWRUcmFuc2xhdGUoJnRyYW5zTWF0cml4LCB4UG9zLCB5UG9zLCAwKTsKLSAgICAgICAgICAgIHJzTWF0cml4TXVsdGlwbHkoJnRyYW5zTWF0cml4LCAmbWF0cml4KTsKLSAgICAgICAgICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJnRyYW5zTWF0cml4KTsKLSAgICAgICAgICAgIGludCBpID0gKHggKyB5ICogbWVzaENvdW50KSAlIDEwMDsKLSAgICAgICAgICAgIHJzZ0JpbmRUZXh0dXJlKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnVGV4TGlzdDEwMFtpXS5pdGVtKTsKLSAgICAgICAgICAgIHJzZ0RyYXdNZXNoKGdTaW5nbGVNZXNoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8gRHJhdyBtZXNoZXMgaW4gYSBzaW5nbGUgcGFnZSB3aXRoIHRvcCBsZWZ0IGNvcm5lciBjb29yZGluYXRlcyAoeFN0YXJ0LCB5U3RhcnQpCi1zdGF0aWMgdm9pZCBkcmF3TWVzaEluUGFnZShmbG9hdCB4U3RhcnQsIGZsb2F0IHlTdGFydCwgaW50IHdSZXNvbHV0aW9uLCBpbnQgaFJlc29sdXRpb24pIHsKLSAgICAvLyBEcmF3IHdSZXNvbHV0aW9uICogaFJlc29sdXRpb24gbWVzaGVzIGluIG9uZSBwYWdlCi0gICAgZmxvYXQgd01hcmdpbiA9IDEwMC4wZjsKLSAgICBmbG9hdCBoTWFyZ2luID0gMTAwLjBmOwotICAgIGZsb2F0IHhQYWQgPSA1MC4wZjsKLSAgICBmbG9hdCB5UGFkID0gMjAuMGY7Ci0gICAgZmxvYXQgc2l6ZSA9IDEwMC4wZjsgIC8vIHNpemUgb2YgaW1hZ2VzCi0KLSAgICAvLyBmb250IGluZm8KLSAgICByc19mb250IGZvbnQgPSBnRm9udFNhbnM7Ci0gICAgcnNnQmluZEZvbnQoZm9udCk7Ci0gICAgcnNnRm9udENvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotCi0gICAgLy8gTWVhc3VyZSB0ZXh0IHNpemUKLSAgICBpbnQgbGVmdCA9IDAsIHJpZ2h0ID0gMCwgdG9wID0gMCwgYm90dG9tID0gMDsKLSAgICByc2dNZWFzdXJlVGV4dChnU2FtcGxlVGV4dExpc3QxMDBbMF0uaXRlbSwgJmxlZnQsICZyaWdodCwgJnRvcCwgJmJvdHRvbSk7Ci0gICAgZmxvYXQgdGV4dEhlaWdodCA9IChmbG9hdCkodG9wIC0gYm90dG9tKTsKLQotICAgIHJzX21hdHJpeDR4NCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkU2NhbGUoJm1hdHJpeCwgc2l6ZSwgc2l6ZSwgMS4wKTsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaFJlc29sdXRpb247IHkrKykgewotICAgICAgICBmbG9hdCB5UG9zID0geVN0YXJ0ICsgaE1hcmdpbiArIHkgKiBzaXplICsgeSAqIHlQYWQ7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd1Jlc29sdXRpb247IHgrKykgewotICAgICAgICAgICAgZmxvYXQgeFBvcyA9IHhTdGFydCArIHdNYXJnaW4gKyB4ICogc2l6ZSArIHggKiB4UGFkOwotCi0gICAgICAgICAgICByc19tYXRyaXg0eDQgdHJhbnNNYXRyaXg7Ci0gICAgICAgICAgICByc01hdHJpeExvYWRUcmFuc2xhdGUoJnRyYW5zTWF0cml4LCB4UG9zICsgc2l6ZS8yLCB5UG9zICsgc2l6ZS8yLCAwKTsKLSAgICAgICAgICAgIHJzTWF0cml4TXVsdGlwbHkoJnRyYW5zTWF0cml4LCAmbWF0cml4KTsgIC8vIHNjYWxlIHRoZSBtZXNoCi0gICAgICAgICAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZ0cmFuc01hdHJpeCk7Ci0KLSAgICAgICAgICAgIGludCBpID0gKHkgKiB3UmVzb2x1dGlvbiArIHgpICUgMTAwOwotICAgICAgICAgICAgcnNnQmluZFRleHR1cmUoZ1Byb2dGcmFnbWVudFRleHR1cmUsIDAsIGdUZXhMaXN0MTAwW2ldLml0ZW0pOwotICAgICAgICAgICAgcnNnRHJhd01lc2goZ1NpbmdsZU1lc2gpOwotICAgICAgICAgICAgcnNnRHJhd1RleHQoZ1NhbXBsZVRleHRMaXN0MTAwW2ldLml0ZW0sIHhQb3MsIHlQb3MgKyBzaXplICsgeVBhZC8yICsgdGV4dEhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLS8vIERpc3BsYXkgYm90aCBpbWFnZXMgYW5kIHRleHQgYXMgc2hvd24gaW4gbGF1bmNoZXIgYW5kIGhvbWVwYWdlCi0vLyBtZXNoTW9kZSB3aWxsIGRlY2lkZSBob3cgbWFueSBwYWdlcyB3ZSBkcmF3Ci0vLyBtZXNoTW9kZSA9IDA6IGRyYXcgMyBwYWdlcyBvZiBtZXNoZXMKLS8vIG1lc2hNb2RlID0gMTogZHJhdyA1IHBhZ2VzIG9mIG1lc2hlcwotc3RhdGljIHZvaWQgZGlzcGxheUltYWdlV2l0aFRleHQoaW50IHdSZXNvbHV0aW9uLCBpbnQgaFJlc29sdXRpb24sIGludCBtZXNoTW9kZSkgewotICAgIGJpbmRQcm9ncmFtVmVydGV4T3J0aG8oKTsKLQotICAgIC8vIEZyYWdtZW50IHNoYWRlciB3aXRoIHRleHR1cmUKLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQcm9nU3RvcmVCbGVuZEFscGhhKTsKLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQcm9nRnJhZ21lbnRUZXh0dXJlKTsKLSAgICByc2dCaW5kU2FtcGxlcihnUHJvZ0ZyYWdtZW50VGV4dHVyZSwgMCwgZ0xpbmVhckNsYW1wKTsKLQotICAgIGRyYXdNZXNoSW5QYWdlKDAsIDAsIHdSZXNvbHV0aW9uLCBoUmVzb2x1dGlvbik7Ci0gICAgZHJhd01lc2hJblBhZ2UoLTEuMGYqZ1JlbmRlclN1cmZhY2VXLCAwLCB3UmVzb2x1dGlvbiwgaFJlc29sdXRpb24pOwotICAgIGRyYXdNZXNoSW5QYWdlKDEuMGYqZ1JlbmRlclN1cmZhY2VXLCAwLCB3UmVzb2x1dGlvbiwgaFJlc29sdXRpb24pOwotICAgIGlmIChtZXNoTW9kZSA9PSAxKSB7Ci0gICAgICAgIC8vIGRyYXcgYW5vdGhlciB0d28gcGFnZXMgb2YgbWVzaGVzCi0gICAgICAgIGRyYXdNZXNoSW5QYWdlKC0yLjBmKmdSZW5kZXJTdXJmYWNlVywgMCwgd1Jlc29sdXRpb24sIGhSZXNvbHV0aW9uKTsKLSAgICAgICAgZHJhd01lc2hJblBhZ2UoMi4wZipnUmVuZGVyU3VyZmFjZVcsIDAsIHdSZXNvbHV0aW9uLCBoUmVzb2x1dGlvbik7Ci0gICAgfQotfQotCi0vLyBEaXNwbGF5IGEgbGlzdCBvZiB0ZXh0IGFzIHRoZSBsaXN0IHZpZXcKLXN0YXRpYyB2b2lkIGRpc3BsYXlMaXN0VmlldygpIHsKLSAgICAvLyBzZXQgdGV4dCBjb2xvcgotICAgIHJzZ0ZvbnRDb2xvcigwLjlmLCAwLjlmLCAwLjlmLCAxLjBmKTsKLSAgICByc2dCaW5kRm9udChnRm9udFNhbnMpOwotCi0gICAgLy8gZ2V0IHRoZSBzaXplIG9mIHRoZSBsaXN0Ci0gICAgcnNfYWxsb2NhdGlvbiB0ZXh0QWxsb2M7Ci0gICAgdGV4dEFsbG9jID0gcnNHZXRBbGxvY2F0aW9uKGdMaXN0Vmlld1RleHQpOwotICAgIGludCBhbGxvY1NpemUgPSByc0FsbG9jYXRpb25HZXREaW1YKHRleHRBbGxvYyk7Ci0KLSAgICBpbnQgbGlzdEl0ZW1IZWlnaHQgPSA4MDsKLSAgICBpbnQgeU9mZnNldCA9IGxpc3RJdGVtSGVpZ2h0OwotCi0gICAgLy8gc2V0IHRoZSBjb2xvciBmb3IgdGhlIGxpc3QgZGl2aWRlcgotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudENvbG9yKTsKLSAgICByc2dQcm9ncmFtRnJhZ21lbnRDb25zdGFudENvbG9yKGdQcm9nRnJhZ21lbnRDb2xvciwgMS4wLCAxLjAsIDEuMCwgMSk7Ci0KLSAgICAvLyBkcmF3IHRoZSBsaXN0IHdpdGggZGl2aWRlcgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsb2NTaXplOyBpKyspIHsKLSAgICAgICAgaWYgKHlPZmZzZXQgLSBsaXN0SXRlbUhlaWdodCA+IGdSZW5kZXJTdXJmYWNlSCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcnNnRHJhd1JlY3QoMCwgeU9mZnNldCAtIDEsIGdSZW5kZXJTdXJmYWNlVywgeU9mZnNldCwgMCk7Ci0gICAgICAgIHJzZ0RyYXdUZXh0KGdMaXN0Vmlld1RleHRbaV0uaXRlbSwgMjAsIHlPZmZzZXQgLSAxMCk7Ci0gICAgICAgIHlPZmZzZXQgKz0gbGlzdEl0ZW1IZWlnaHQ7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBkcmF3R2FsYXh5KCkgewotICAgIHJzZ0NsZWFyQ29sb3IoMC5mLCAwLmYsIDAuZiwgMS5mKTsKLSAgICBnUGFydGljbGVzQnVmZmVyID0gcnNHZXRBbGxvY2F0aW9uKFBhcnRpY2xlcyk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChnUEZCYWNrZ3JvdW5kKTsKLQotICAgIGdXaWR0aCA9IHJzZ0dldFdpZHRoKCk7Ci0gICAgZ0hlaWdodCA9IHJzZ0dldEhlaWdodCgpOwotICAgIGlmICgoZ1dpZHRoICE9IGdPbGRXaWR0aCkgfHwgKGdIZWlnaHQgIT0gZ09sZEhlaWdodCkpIHsKLSAgICAgICAgaW5pdFBhcnRpY2xlcygpOwotICAgICAgICBnT2xkV2lkdGggPSBnV2lkdGg7Ci0gICAgICAgIGdPbGRIZWlnaHQgPSBnSGVpZ2h0OwotICAgIH0KLQotICAgIGZsb2F0IG9mZnNldCA9IG1peCgtMS4wZiwgMS4wZiwgZ1hPZmZzZXQpOwotICAgIGRyYXdTcGFjZSgpOwotICAgIGRyYXdQYXJ0aWNsZXMob2Zmc2V0KTsKLSAgICBkcmF3TGlnaHRzKCk7Ci19Ci0KLS8vIERpc3BsYXkgaW1hZ2VzIGFuZCB0ZXh0IHdpdGggbGl2ZSB3YWxscGFwZXIgaW4gdGhlIGJhY2tncm91bmQKLXN0YXRpYyB2b2lkIGRpc3BsYXlMaXZlV2FsbFBhcGVyKGludCB3UmVzb2x1dGlvbiwgaW50IGhSZXNvbHV0aW9uKSB7Ci0gICAgYmluZFByb2dyYW1WZXJ0ZXhPcnRobygpOwotCi0gICAgZHJhd0dhbGF4eSgpOwotCi0gICAgcnNnQmluZFByb2dyYW1WZXJ0ZXgoZ1Byb2dWZXJ0ZXgpOwotICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUoZ1Byb2dTdG9yZUJsZW5kQWxwaGEpOwotICAgIHJzZ0JpbmRQcm9ncmFtRnJhZ21lbnQoZ1Byb2dGcmFnbWVudFRleHR1cmUpOwotICAgIHJzZ0JpbmRTYW1wbGVyKGdQcm9nRnJhZ21lbnRUZXh0dXJlLCAwLCBnTGluZWFyQ2xhbXApOwotCi0gICAgZHJhd01lc2hJblBhZ2UoMCwgMCwgd1Jlc29sdXRpb24sIGhSZXNvbHV0aW9uKTsKLSAgICBkcmF3TWVzaEluUGFnZSgtMS4wZipnUmVuZGVyU3VyZmFjZVcsIDAsIHdSZXNvbHV0aW9uLCBoUmVzb2x1dGlvbik7Ci0gICAgZHJhd01lc2hJblBhZ2UoMS4wZipnUmVuZGVyU3VyZmFjZVcsIDAsIHdSZXNvbHV0aW9uLCBoUmVzb2x1dGlvbik7Ci0gICAgZHJhd01lc2hJblBhZ2UoLTIuMGYqZ1JlbmRlclN1cmZhY2VXLCAwLCB3UmVzb2x1dGlvbiwgaFJlc29sdXRpb24pOwotICAgIGRyYXdNZXNoSW5QYWdlKDIuMGYqZ1JlbmRlclN1cmZhY2VXLCAwLCB3UmVzb2x1dGlvbiwgaFJlc29sdXRpb24pOwotfQotCi12b2lkIHJvb3QoY29uc3Qgdm9pZCAqdl9pbiwgdm9pZCAqdl9vdXQsIGNvbnN0IHZvaWQgKnVzckRhdGEsIHVpbnQzMl90IHgsIHVpbnQzMl90IHkpIHsKLSAgICBUZXN0RGF0YSAqdGVzdERhdGEgPSAoVGVzdERhdGEqKXVzckRhdGE7Ci0gICAgZ1JlbmRlclN1cmZhY2VXID0gdGVzdERhdGEtPnJlbmRlclN1cmZhY2VXOwotICAgIGdSZW5kZXJTdXJmYWNlSCA9IHRlc3REYXRhLT5yZW5kZXJTdXJmYWNlSDsKLSAgICBnRHQgPSB0ZXN0RGF0YS0+ZHQ7Ci0KLSAgICBnRGF0YSA9IChVaVRlc3REYXRhKil2X2luOwotCi0gICAgc3dpdGNoKGdEYXRhLT50ZXN0SWQpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgZGlzcGxheUljb25zKGdEYXRhLT51c2VyMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgZGlzcGxheUltYWdlV2l0aFRleHQoZ0RhdGEtPnVzZXIxLCBnRGF0YS0+dXNlcjIsIGdEYXRhLT51c2VyMyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgZGlzcGxheUxpc3RWaWV3KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgZGlzcGxheUxpdmVXYWxsUGFwZXIoZ0RhdGEtPnVzZXIxLCBnRGF0YS0+dXNlcjIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByc0RlYnVnKCJXcm9uZyB0ZXN0IG51bWJlciIsIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9BbmRyb2lkLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ3MzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvQW5kcm9pZC5taworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0jCi0KLUxPQ0FMX1BBVEggOj0gJChjYWxsIG15LWRpcikKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwotCi1MT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLCBzcmMpICQoY2FsbCBhbGwtcmVuZGVyc2NyaXB0LWZpbGVzLXVuZGVyLCBzcmMpCi0KLUxPQ0FMX1NES19WRVJTSU9OIDo9IDE3Ci0KLUxPQ0FMX1BBQ0tBR0VfTkFNRSA6PSBTY2VuZUdyYXBoVGVzdAotCi1pbmNsdWRlICQoQlVJTERfUEFDS0FHRSkKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvQW5kcm9pZE1hbmlmZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjdhZjBmYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL0FuZHJvaWRNYW5pZmVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJjb20uYW5kcm9pZC50ZXN0YXBwIj4KLSAgICA8dXNlcy1wZXJtaXNzaW9uCi0gICAgICAgIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIiAvPgotICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lkOmxhYmVsPSJTY2VuZUdyYXBoVGVzdCI+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlRlc3RBcHAiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJTY2VuZUdyYXBoVGVzdCI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNpbXBsZUFwcCIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IlNpbXBsZVNjZW5lR3JhcGgiPgotICAgICAgICAgICAgPGludGVudC1maWx0ZXI+Ci0gICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgotICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgICAgICA8L2FjdGl2aXR5PgotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJGaWxlU2VsZWN0b3IiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJGaWxlU2VsZWN0b3IiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmhhcmR3YXJlQWNjZWxlcmF0ZWQ9InRydWUiPgotICAgICAgICAgICAgPGludGVudC1maWx0ZXI+Ci0gICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIiAvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgICAgICA8L2FjdGl2aXR5PgotICAgIDwvYXBwbGljYXRpb24+Ci08L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvYmx1ZS5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ibHVlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0ZTc3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ibHVlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL2NhcmJvbmZpYmVyLmpwZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL2NhcmJvbmZpYmVyLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjZWNiMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9jYXJib25maWJlci5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ncmVlbi5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ncmVlbi5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NmE3NTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvZ3JlZW4uanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvZ3JleS5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ncmV5LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3MGIxYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9ncmV5LmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL29yYW5nZS5qcGcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9vcmFuZ2UuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGJlOTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL29yYW5nZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9vcmllbnRhdGlvbl90ZXN0LmEzZCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL29yaWVudGF0aW9uX3Rlc3QuYTNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMxOGFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL29yaWVudGF0aW9uX3Rlc3QuYTNkCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvb3JpZW50YXRpb25fdGVzdC5kYWUgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9vcmllbnRhdGlvbl90ZXN0LmRhZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VlZjQ0M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvb3JpZW50YXRpb25fdGVzdC5kYWUKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTxDT0xMQURBIHhtbG5zPSJodHRwOi8vd3d3LmNvbGxhZGEub3JnLzIwMDUvMTEvQ09MTEFEQVNjaGVtYSIgdmVyc2lvbj0iMS40LjEiPgotICAgIDxhc3NldD4KLSAgICAgICAgPGNvbnRyaWJ1dG9yPgotICAgICAgICAgICAgPGF1dGhvcj5hbGV4c3Q8L2F1dGhvcj4KLSAgICAgICAgICAgIDxhdXRob3JpbmdfdG9vbD5PcGVuQ09MTEFEQTIwMTA8L2F1dGhvcmluZ190b29sPgotICAgICAgICAgICAgPGNvbW1lbnRzPkNvbGxhZGFNYXlhIGV4cG9ydCBvcHRpb25zOiBiYWtlVHJhbnNmb3Jtcz0wO3JlbGF0aXZlUGF0aHM9MDtjb3B5VGV4dHVyZXM9MDtleHBvcnRUcmlhbmdsZXM9MTtleHBvcnRDZ2Z4RmlsZVJlZmVyZW5jZXM9MDsgaXNTYW1wbGluZz0wO2N1cnZlQ29uc3RyYWluU2FtcGxpbmc9MDtyZW1vdmVTdGF0aWNDdXJ2ZXM9MTtleHBvcnRQb2x5Z29uTWVzaGVzPTE7ZXhwb3J0TGlnaHRzPTE7IGV4cG9ydENhbWVyYXM9MTtleHBvcnRKb2ludHNBbmRTa2luPTE7ZXhwb3J0QW5pbWF0aW9ucz0wO2V4cG9ydEludmlzaWJsZU5vZGVzPTA7ZXhwb3J0RGVmYXVsdENhbWVyYXM9MDsgZXhwb3J0VGV4Q29vcmRzPTE7ZXhwb3J0Tm9ybWFscz0xO2V4cG9ydE5vcm1hbHNQZXJWZXJ0ZXg9MTtleHBvcnRWZXJ0ZXhDb2xvcnM9MDtleHBvcnRWZXJ0ZXhDb2xvcnNQZXJWZXJ0ZXg9MDsgZXhwb3J0VGV4VGFuZ2VudHM9MDtleHBvcnRUYW5nZW50cz0wO2V4cG9ydFJlZmVyZW5jZWRNYXRlcmlhbHM9MTtleHBvcnRNYXRlcmlhbHNPbmx5PTA7IGV4cG9ydFhSZWZzPTE7ZGVyZWZlcmVuY2VYUmVmcz0xO2V4cG9ydENhbWVyYUFzTG9va2F0PTA7Y2FtZXJhWEZvdj0wO2NhbWVyYVlGb3Y9MTtkb3VibGVQcmVjaXNpb249MDwvY29tbWVudHM+Ci0gICAgICAgICAgICA8c291cmNlX2RhdGE+ZmlsZTovLy9Wb2x1bWVzL0FuZHJvaWQvYXJ0L29yaWVudGF0aW9uX3Rlc3QubWI8L3NvdXJjZV9kYXRhPgotICAgICAgICA8L2NvbnRyaWJ1dG9yPgotICAgICAgICA8Y3JlYXRlZD4yMDExLTA5LTMwVDE1OjMxOjM4PC9jcmVhdGVkPgotICAgICAgICA8bW9kaWZpZWQ+MjAxMS0wOS0zMFQxNTozMTozODwvbW9kaWZpZWQ+Ci0gICAgICAgIDx1bml0IG1ldGVyPSIwLjAxIiBuYW1lPSJjZW50aW1ldGVyIiAvPgotICAgICAgICA8dXBfYXhpcz5ZX1VQPC91cF9heGlzPgotICAgIDwvYXNzZXQ+Ci0gICAgPGxpYnJhcnlfY2FtZXJhcz4KLSAgICAgICAgPGNhbWVyYSBpZD0iY2FtZXJhU2hhcGUxIiBuYW1lPSJjYW1lcmFTaGFwZTEiPgotICAgICAgICAgICAgPG9wdGljcz4KLSAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgPHBlcnNwZWN0aXZlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHlmb3Y+MzcuODQ5MzwveWZvdj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhc3BlY3RfcmF0aW8+MS41PC9hc3BlY3RfcmF0aW8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8em5lYXI+MTwvem5lYXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8emZhcj40MDA8L3pmYXI+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGVyc3BlY3RpdmU+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgPC9vcHRpY3M+Ci0gICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICA8ZmlsbV9maXQ+MDwvZmlsbV9maXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxtX2ZpdF9vZmZzZXQ+MDwvZmlsbV9maXRfb2Zmc2V0PgotICAgICAgICAgICAgICAgICAgICA8ZmlsbV9vZmZzZXRYPjA8L2ZpbG1fb2Zmc2V0WD4KLSAgICAgICAgICAgICAgICAgICAgPGZpbG1fb2Zmc2V0WT4wPC9maWxtX29mZnNldFk+Ci0gICAgICAgICAgICAgICAgICAgIDxob3Jpem9udGFsX2FwZXJ0dXJlPjMuNTk5OTkzPC9ob3Jpem9udGFsX2FwZXJ0dXJlPgotICAgICAgICAgICAgICAgICAgICA8bGVuc19zcXVlZXplPjE8L2xlbnNfc3F1ZWV6ZT4KLSAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5jYW1lcmFTaGFwZTE8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnRpY2FsX2FwZXJ0dXJlPjIuMzk5OTk1PC92ZXJ0aWNhbF9hcGVydHVyZT4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgIDwvY2FtZXJhPgotICAgICAgICA8Y2FtZXJhIGlkPSJDYW1lcmFEaXN0U2hhcGUiIG5hbWU9IkNhbWVyYURpc3RTaGFwZSI+Ci0gICAgICAgICAgICA8b3B0aWNzPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8cGVyc3BlY3RpdmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eWZvdj4zNy44NDkzPC95Zm92PgotICAgICAgICAgICAgICAgICAgICAgICAgPGFzcGVjdF9yYXRpbz4xLjU8L2FzcGVjdF9yYXRpbz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx6bmVhcj4xPC96bmVhcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx6ZmFyPjEwMDA8L3pmYXI+Ci0gICAgICAgICAgICAgICAgICAgIDwvcGVyc3BlY3RpdmU+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgPC9vcHRpY3M+Ci0gICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICA8ZmlsbV9maXQ+MDwvZmlsbV9maXQ+Ci0gICAgICAgICAgICAgICAgICAgIDxmaWxtX2ZpdF9vZmZzZXQ+MDwvZmlsbV9maXRfb2Zmc2V0PgotICAgICAgICAgICAgICAgICAgICA8ZmlsbV9vZmZzZXRYPjA8L2ZpbG1fb2Zmc2V0WD4KLSAgICAgICAgICAgICAgICAgICAgPGZpbG1fb2Zmc2V0WT4wPC9maWxtX29mZnNldFk+Ci0gICAgICAgICAgICAgICAgICAgIDxob3Jpem9udGFsX2FwZXJ0dXJlPjMuNTk5OTkzPC9ob3Jpem9udGFsX2FwZXJ0dXJlPgotICAgICAgICAgICAgICAgICAgICA8bGVuc19zcXVlZXplPjE8L2xlbnNfc3F1ZWV6ZT4KLSAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5DYW1lcmFEaXN0U2hhcGU8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnRpY2FsX2FwZXJ0dXJlPjIuMzk5OTk1PC92ZXJ0aWNhbF9hcGVydHVyZT4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgIDwvY2FtZXJhPgotICAgIDwvbGlicmFyeV9jYW1lcmFzPgotICAgIDxsaWJyYXJ5X21hdGVyaWFscz4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJQYWludDEiIG5hbWU9IlBhaW50MSI+Ci0gICAgICAgICAgICA8aW5zdGFuY2VfZWZmZWN0IHVybD0iI1BhaW50MS1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJsYW1iZXJ0MiIgbmFtZT0ibGFtYmVydDIiPgotICAgICAgICAgICAgPGluc3RhbmNlX2VmZmVjdCB1cmw9IiNsYW1iZXJ0Mi1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJQbGFzdGljIiBuYW1lPSJQbGFzdGljIj4KLSAgICAgICAgICAgIDxpbnN0YW5jZV9lZmZlY3QgdXJsPSIjUGxhc3RpYy1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJNZXRhbCIgbmFtZT0iTWV0YWwiPgotICAgICAgICAgICAgPGluc3RhbmNlX2VmZmVjdCB1cmw9IiNNZXRhbC1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJQbGFzdGljQ2VudGVyIiBuYW1lPSJQbGFzdGljQ2VudGVyIj4KLSAgICAgICAgICAgIDxpbnN0YW5jZV9lZmZlY3QgdXJsPSIjUGxhc3RpY0NlbnRlci1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJQbGFzdGljUmVkIiBuYW1lPSJQbGFzdGljUmVkIj4KLSAgICAgICAgICAgIDxpbnN0YW5jZV9lZmZlY3QgdXJsPSIjUGxhc3RpY1JlZC1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJsYW1iZXJ0MTAiIG5hbWU9ImxhbWJlcnQxMCI+Ci0gICAgICAgICAgICA8aW5zdGFuY2VfZWZmZWN0IHVybD0iI2xhbWJlcnQxMC1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICAgICAgPG1hdGVyaWFsIGlkPSJsYW1iZXJ0MTEiIG5hbWU9ImxhbWJlcnQxMSI+Ci0gICAgICAgICAgICA8aW5zdGFuY2VfZWZmZWN0IHVybD0iI2xhbWJlcnQxMS1meCIgLz4KLSAgICAgICAgPC9tYXRlcmlhbD4KLSAgICA8L2xpYnJhcnlfbWF0ZXJpYWxzPgotICAgIDxsaWJyYXJ5X2VmZmVjdHM+Ci0gICAgICAgIDxlZmZlY3QgaWQ9Ik1ldGFsLWZ4Ij4KLSAgICAgICAgICAgIDxwcm9maWxlX0NPTU1PTj4KLSAgICAgICAgICAgICAgICA8bmV3cGFyYW0gc2lkPSJmaWxlMjMtc3VyZmFjZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdXJmYWNlIHR5cGU9IjJEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbml0X2Zyb20+ZmlsZTIzPC9pbml0X2Zyb20+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3VyZmFjZT4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyMy1zYW1wbGVyIj4KLSAgICAgICAgICAgICAgICAgICAgPHNhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+ZmlsZTIzLXN1cmZhY2U8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPC9zYW1wbGVyMkQ+Ci0gICAgICAgICAgICAgICAgPC9uZXdwYXJhbT4KLSAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHNpZD0iY29tbW9uIj4KLSAgICAgICAgICAgICAgICAgICAgPGxhbWJlcnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1pc3Npb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYW1iaWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaWZmdXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0dXJlIHRleHR1cmU9ImZpbGUyMy1zYW1wbGVyIiB0ZXhjb29yZD0iVEVYMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxlbmRfbW9kZT5OT05FPC9ibGVuZF9tb2RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3ZlcmFnZVU+MTwvY292ZXJhZ2VVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3ZlcmFnZVY+MTwvY292ZXJhZ2VWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYXN0PjA8L2Zhc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcnJvclU+MDwvbWlycm9yVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVj4wPC9taXJyb3JWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2lzZVU+MDwvbm9pc2VVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2lzZVY+MDwvbm9pc2VWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvZmZzZXRVPjA8L29mZnNldFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFY+MDwvb2Zmc2V0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwZWF0VT4xPC9yZXBlYXRVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRWPjE8L3JlcGVhdFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZUZyYW1lPjA8L3JvdGF0ZUZyYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3RhdGVVVj4wPC9yb3RhdGVVVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhZ2dlcj4wPC9zdGFnZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGVGcmFtZVU+MDwvdHJhbnNsYXRlRnJhbWVVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGVGcmFtZVY+MDwvdHJhbnNsYXRlRnJhbWVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVT4xPC93cmFwVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3JhcFY+MTwvd3JhcFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHR1cmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2RpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNwYXJlbnQgb3BhcXVlPSJSR0JfWkVSTyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc3BhcmVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZsb2F0PjE8L2Zsb2F0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc3BhcmVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGFtYmVydD4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvcHJvZmlsZV9DT01NT04+Ci0gICAgICAgIDwvZWZmZWN0PgotICAgICAgICA8ZWZmZWN0IGlkPSJQYWludDEtZngiPgotICAgICAgICAgICAgPHByb2ZpbGVfQ09NTU9OPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyNS1zdXJmYWNlIj4KLSAgICAgICAgICAgICAgICAgICAgPHN1cmZhY2UgdHlwZT0iMkQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlMjU8L2luaXRfZnJvbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zdXJmYWNlPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTI1LXNhbXBsZXIiPgotICAgICAgICAgICAgICAgICAgICA8c2FtcGxlcjJEPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT5maWxlMjUtc3VyZmFjZTwvc291cmNlPgotICAgICAgICAgICAgICAgICAgICA8L3NhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgc2lkPSJjb21tb24iPgotICAgICAgICAgICAgICAgICAgICA8bGFtYmVydD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2VtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9hbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHR1cmUgdGV4dHVyZT0iZmlsZTI1LXNhbXBsZXIiIHRleGNvb3JkPSJURVgwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxibGVuZF9tb2RlPk5PTkU8L2JsZW5kX21vZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVT4xPC9jb3ZlcmFnZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVj4xPC9jb3ZlcmFnZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhc3Q+MDwvZmFzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVT4wPC9taXJyb3JVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JWPjA8L21pcnJvclY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVT4wPC9ub2lzZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVj4wPC9ub2lzZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFU+MDwvb2Zmc2V0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0Vj4wPC9vZmZzZXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRVPjE8L3JlcGVhdFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFY+MTwvcmVwZWF0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlRnJhbWU+MDwvcm90YXRlRnJhbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZVVWPjA8L3JvdGF0ZVVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFnZ2VyPjA8L3N0YWdnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVT4wPC90cmFuc2xhdGVGcmFtZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVj4wPC90cmFuc2xhdGVGcmFtZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBVPjE8L3dyYXBVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVj4xPC93cmFwVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVudCBvcGFxdWU9IlJHQl9aRVJPIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmxvYXQ+MTwvZmxvYXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPC9sYW1iZXJ0PgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9wcm9maWxlX0NPTU1PTj4KLSAgICAgICAgPC9lZmZlY3Q+Ci0gICAgICAgIDxlZmZlY3QgaWQ9IlBsYXN0aWMtZngiPgotICAgICAgICAgICAgPHByb2ZpbGVfQ09NTU9OPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyNC1zdXJmYWNlIj4KLSAgICAgICAgICAgICAgICAgICAgPHN1cmZhY2UgdHlwZT0iMkQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlMjQ8L2luaXRfZnJvbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zdXJmYWNlPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTI0LXNhbXBsZXIiPgotICAgICAgICAgICAgICAgICAgICA8c2FtcGxlcjJEPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT5maWxlMjQtc3VyZmFjZTwvc291cmNlPgotICAgICAgICAgICAgICAgICAgICA8L3NhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgc2lkPSJjb21tb24iPgotICAgICAgICAgICAgICAgICAgICA8bGFtYmVydD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2VtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9hbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHR1cmUgdGV4dHVyZT0iZmlsZTI0LXNhbXBsZXIiIHRleGNvb3JkPSJURVgwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxibGVuZF9tb2RlPk5PTkU8L2JsZW5kX21vZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVT4xPC9jb3ZlcmFnZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVj4xPC9jb3ZlcmFnZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhc3Q+MDwvZmFzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVT4wPC9taXJyb3JVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JWPjA8L21pcnJvclY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVT4wPC9ub2lzZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVj4wPC9ub2lzZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFU+MDwvb2Zmc2V0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0Vj4wPC9vZmZzZXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRVPjE8L3JlcGVhdFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFY+MTwvcmVwZWF0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlRnJhbWU+MDwvcm90YXRlRnJhbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZVVWPjA8L3JvdGF0ZVVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFnZ2VyPjA8L3N0YWdnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVT4wPC90cmFuc2xhdGVGcmFtZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVj4wPC90cmFuc2xhdGVGcmFtZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBVPjE8L3dyYXBVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVj4xPC93cmFwVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVudCBvcGFxdWU9IlJHQl9aRVJPIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmxvYXQ+MTwvZmxvYXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPC9sYW1iZXJ0PgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9wcm9maWxlX0NPTU1PTj4KLSAgICAgICAgPC9lZmZlY3Q+Ci0gICAgICAgIDxlZmZlY3QgaWQ9IlBsYXN0aWNDZW50ZXItZngiPgotICAgICAgICAgICAgPHByb2ZpbGVfQ09NTU9OPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyNC1zdXJmYWNlIj4KLSAgICAgICAgICAgICAgICAgICAgPHN1cmZhY2UgdHlwZT0iMkQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlMjQ8L2luaXRfZnJvbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zdXJmYWNlPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTI0LXNhbXBsZXIiPgotICAgICAgICAgICAgICAgICAgICA8c2FtcGxlcjJEPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT5maWxlMjQtc3VyZmFjZTwvc291cmNlPgotICAgICAgICAgICAgICAgICAgICA8L3NhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgc2lkPSJjb21tb24iPgotICAgICAgICAgICAgICAgICAgICA8bGFtYmVydD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2VtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9hbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHR1cmUgdGV4dHVyZT0iZmlsZTI0LXNhbXBsZXIiIHRleGNvb3JkPSJURVgwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxibGVuZF9tb2RlPk5PTkU8L2JsZW5kX21vZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVT4xPC9jb3ZlcmFnZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVj4xPC9jb3ZlcmFnZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhc3Q+MDwvZmFzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVT4wPC9taXJyb3JVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JWPjA8L21pcnJvclY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVT4wPC9ub2lzZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVj4wPC9ub2lzZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFU+MDwvb2Zmc2V0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0Vj4wPC9vZmZzZXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRVPjE8L3JlcGVhdFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFY+MTwvcmVwZWF0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlRnJhbWU+MDwvcm90YXRlRnJhbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZVVWPjA8L3JvdGF0ZVVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFnZ2VyPjA8L3N0YWdnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVT4wPC90cmFuc2xhdGVGcmFtZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVj4wPC90cmFuc2xhdGVGcmFtZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBVPjE8L3dyYXBVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVj4xPC93cmFwVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVudCBvcGFxdWU9IlJHQl9aRVJPIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmxvYXQ+MTwvZmxvYXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPC9sYW1iZXJ0PgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9wcm9maWxlX0NPTU1PTj4KLSAgICAgICAgPC9lZmZlY3Q+Ci0gICAgICAgIDxlZmZlY3QgaWQ9IlBsYXN0aWNSZWQtZngiPgotICAgICAgICAgICAgPHByb2ZpbGVfQ09NTU9OPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyMy1zdXJmYWNlIj4KLSAgICAgICAgICAgICAgICAgICAgPHN1cmZhY2UgdHlwZT0iMkQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlMjM8L2luaXRfZnJvbT4KLSAgICAgICAgICAgICAgICAgICAgPC9zdXJmYWNlPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTIzLXNhbXBsZXIiPgotICAgICAgICAgICAgICAgICAgICA8c2FtcGxlcjJEPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT5maWxlMjMtc3VyZmFjZTwvc291cmNlPgotICAgICAgICAgICAgICAgICAgICA8L3NhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgc2lkPSJjb21tb24iPgotICAgICAgICAgICAgICAgICAgICA8bGFtYmVydD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2VtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9hbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGRpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHR1cmUgdGV4dHVyZT0iZmlsZTIzLXNhbXBsZXIiIHRleGNvb3JkPSJURVgwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxibGVuZF9tb2RlPk5PTkU8L2JsZW5kX21vZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVT4xPC9jb3ZlcmFnZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvdmVyYWdlVj4xPC9jb3ZlcmFnZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZhc3Q+MDwvZmFzdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVT4wPC9taXJyb3JVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JWPjA8L21pcnJvclY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVT4wPC9ub2lzZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vaXNlVj4wPC9ub2lzZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFU+MDwvb2Zmc2V0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0Vj4wPC9vZmZzZXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRVPjE8L3JlcGVhdFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFY+MTwvcmVwZWF0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlRnJhbWU+MDwvcm90YXRlRnJhbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZVVWPjA8L3JvdGF0ZVVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFnZ2VyPjA8L3N0YWdnZXI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVT4wPC90cmFuc2xhdGVGcmFtZVU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZUZyYW1lVj4wPC90cmFuc2xhdGVGcmFtZVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBVPjE8L3dyYXBVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVj4xPC93cmFwVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGV4dHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVudCBvcGFxdWU9IlJHQl9aRVJPIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmxvYXQ+MTwvZmxvYXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zcGFyZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPC9sYW1iZXJ0PgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9wcm9maWxlX0NPTU1PTj4KLSAgICAgICAgPC9lZmZlY3Q+Ci0gICAgICAgIDxlZmZlY3QgaWQ9ImxhbWJlcnQxMC1meCI+Ci0gICAgICAgICAgICA8cHJvZmlsZV9DT01NT04+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTI4LXN1cmZhY2UiPgotICAgICAgICAgICAgICAgICAgICA8c3VyZmFjZSB0eXBlPSIyRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5pdF9mcm9tPmZpbGUyODwvaW5pdF9mcm9tPgotICAgICAgICAgICAgICAgICAgICA8L3N1cmZhY2U+Ci0gICAgICAgICAgICAgICAgPC9uZXdwYXJhbT4KLSAgICAgICAgICAgICAgICA8bmV3cGFyYW0gc2lkPSJmaWxlMjgtc2FtcGxlciI+Ci0gICAgICAgICAgICAgICAgICAgIDxzYW1wbGVyMkQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlPmZpbGUyOC1zdXJmYWNlPC9zb3VyY2U+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2FtcGxlcjJEPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBzaWQ9ImNvbW1vbiI+Ci0gICAgICAgICAgICAgICAgICAgIDxsYW1iZXJ0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1pc3Npb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YW1iaWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2FtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dHVyZSB0ZXh0dXJlPSJmaWxlMjgtc2FtcGxlciIgdGV4Y29vcmQ9IlRFWDAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsZW5kX21vZGU+Tk9ORTwvYmxlbmRfbW9kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y292ZXJhZ2VVPjE8L2NvdmVyYWdlVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y292ZXJhZ2VWPjE8L2NvdmVyYWdlVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFzdD4wPC9mYXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JVPjA8L21pcnJvclU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcnJvclY+MDwvbWlycm9yVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9pc2VVPjA8L25vaXNlVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9pc2VWPjA8L25vaXNlVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0VT4wPC9vZmZzZXRVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvZmZzZXRWPjA8L29mZnNldFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFU+MTwvcmVwZWF0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwZWF0Vj4xPC9yZXBlYXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3RhdGVGcmFtZT4wPC9yb3RhdGVGcmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlVVY+MDwvcm90YXRlVVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWdnZXI+MDwvc3RhZ2dlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlRnJhbWVVPjA8L3RyYW5zbGF0ZUZyYW1lVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlRnJhbWVWPjA8L3RyYW5zbGF0ZUZyYW1lVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3JhcFU+MTwvd3JhcFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBWPjE8L3dyYXBWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0dXJlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaWZmdXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW50IG9wYXF1ZT0iUkdCX1pFUk8iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNwYXJlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNwYXJlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbG9hdD4xPC9mbG9hdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNwYXJlbmN5PgotICAgICAgICAgICAgICAgICAgICA8L2xhbWJlcnQ+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICA8L3Byb2ZpbGVfQ09NTU9OPgotICAgICAgICA8L2VmZmVjdD4KLSAgICAgICAgPGVmZmVjdCBpZD0ibGFtYmVydDExLWZ4Ij4KLSAgICAgICAgICAgIDxwcm9maWxlX0NPTU1PTj4KLSAgICAgICAgICAgICAgICA8bmV3cGFyYW0gc2lkPSJmaWxlMjktc3VyZmFjZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdXJmYWNlIHR5cGU9IjJEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbml0X2Zyb20+ZmlsZTI5PC9pbml0X2Zyb20+Ci0gICAgICAgICAgICAgICAgICAgIDwvc3VyZmFjZT4KLSAgICAgICAgICAgICAgICA8L25ld3BhcmFtPgotICAgICAgICAgICAgICAgIDxuZXdwYXJhbSBzaWQ9ImZpbGUyOS1zYW1wbGVyIj4KLSAgICAgICAgICAgICAgICAgICAgPHNhbXBsZXIyRD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+ZmlsZTI5LXN1cmZhY2U8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgPC9zYW1wbGVyMkQ+Ci0gICAgICAgICAgICAgICAgPC9uZXdwYXJhbT4KLSAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHNpZD0iY29tbW9uIj4KLSAgICAgICAgICAgICAgICAgICAgPGxhbWJlcnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZW1pc3Npb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbWlzc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhbWJpZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYW1iaWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaWZmdXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0dXJlIHRleHR1cmU9ImZpbGUyOS1zYW1wbGVyIiB0ZXhjb29yZD0iVEVYMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxlbmRfbW9kZT5OT05FPC9ibGVuZF9tb2RlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3ZlcmFnZVU+MTwvY292ZXJhZ2VVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3ZlcmFnZVY+MTwvY292ZXJhZ2VWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmYXN0PjA8L2Zhc3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcnJvclU+MDwvbWlycm9yVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWlycm9yVj4wPC9taXJyb3JWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2lzZVU+MDwvbm9pc2VVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub2lzZVY+MDwvbm9pc2VWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvZmZzZXRVPjA8L29mZnNldFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9mZnNldFY+MDwvb2Zmc2V0Vj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwZWF0VT4xPC9yZXBlYXRVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBlYXRWPjE8L3JlcGVhdFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZUZyYW1lPjA8L3JvdGF0ZUZyYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3RhdGVVVj4wPC9yb3RhdGVVVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhZ2dlcj4wPC9zdGFnZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGVGcmFtZVU+MDwvdHJhbnNsYXRlRnJhbWVVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGVGcmFtZVY+MDwvdHJhbnNsYXRlRnJhbWVWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3cmFwVT4xPC93cmFwVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3JhcFY+MTwvd3JhcFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHR1cmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2RpZmZ1c2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNwYXJlbnQgb3BhcXVlPSJSR0JfWkVSTyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbG9yPjAgMCAwIDE8L2NvbG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc3BhcmVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc3BhcmVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZsb2F0PjE8L2Zsb2F0PgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc3BhcmVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGFtYmVydD4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvcHJvZmlsZV9DT01NT04+Ci0gICAgICAgIDwvZWZmZWN0PgotICAgICAgICA8ZWZmZWN0IGlkPSJsYW1iZXJ0Mi1meCI+Ci0gICAgICAgICAgICA8cHJvZmlsZV9DT01NT04+Ci0gICAgICAgICAgICAgICAgPG5ld3BhcmFtIHNpZD0iZmlsZTIyLXN1cmZhY2UiPgotICAgICAgICAgICAgICAgICAgICA8c3VyZmFjZSB0eXBlPSIyRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5pdF9mcm9tPmZpbGUyMjwvaW5pdF9mcm9tPgotICAgICAgICAgICAgICAgICAgICA8L3N1cmZhY2U+Ci0gICAgICAgICAgICAgICAgPC9uZXdwYXJhbT4KLSAgICAgICAgICAgICAgICA8bmV3cGFyYW0gc2lkPSJmaWxlMjItc2FtcGxlciI+Ci0gICAgICAgICAgICAgICAgICAgIDxzYW1wbGVyMkQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlPmZpbGUyMi1zdXJmYWNlPC9zb3VyY2U+Ci0gICAgICAgICAgICAgICAgICAgIDwvc2FtcGxlcjJEPgotICAgICAgICAgICAgICAgIDwvbmV3cGFyYW0+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBzaWQ9ImNvbW1vbiI+Ci0gICAgICAgICAgICAgICAgICAgIDxsYW1iZXJ0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGVtaXNzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZW1pc3Npb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YW1iaWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29sb3I+MCAwIDAgMTwvY29sb3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2FtYmllbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGlmZnVzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dHVyZSB0ZXh0dXJlPSJmaWxlMjItc2FtcGxlciIgdGV4Y29vcmQ9IlRFWDAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJsZW5kX21vZGU+Tk9ORTwvYmxlbmRfbW9kZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y292ZXJhZ2VVPjE8L2NvdmVyYWdlVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y292ZXJhZ2VWPjE8L2NvdmVyYWdlVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmFzdD4wPC9mYXN0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtaXJyb3JVPjA8L21pcnJvclU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1pcnJvclY+MDwvbWlycm9yVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9pc2VVPjA8L25vaXNlVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9pc2VWPjA8L25vaXNlVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b2Zmc2V0VT4wPC9vZmZzZXRVPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvZmZzZXRWPjA8L29mZnNldFY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlcGVhdFU+MTwvcmVwZWF0VT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVwZWF0Vj4xPC9yZXBlYXRWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyb3RhdGVGcmFtZT4wPC9yb3RhdGVGcmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm90YXRlVVY+MDwvcm90YXRlVVY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWdnZXI+MDwvc3RhZ2dlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlRnJhbWVVPjA8L3RyYW5zbGF0ZUZyYW1lVT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlRnJhbWVWPjA8L3RyYW5zbGF0ZUZyYW1lVj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3JhcFU+MTwvd3JhcFU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdyYXBWPjE8L3dyYXBWPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0dXJlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaWZmdXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zcGFyZW50IG9wYXF1ZT0iUkdCX1pFUk8iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xvcj4wIDAgMCAxPC9jb2xvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNwYXJlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNwYXJlbmN5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmbG9hdD4xPC9mbG9hdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNwYXJlbmN5PgotICAgICAgICAgICAgICAgICAgICA8L2xhbWJlcnQ+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICA8L3Byb2ZpbGVfQ09NTU9OPgotICAgICAgICA8L2VmZmVjdD4KLSAgICA8L2xpYnJhcnlfZWZmZWN0cz4KLSAgICA8bGlicmFyeV9pbWFnZXM+Ci0gICAgICAgIDxpbWFnZSBpZD0iZmlsZTI5IiBuYW1lPSJmaWxlMjkiIGhlaWdodD0iMCIgd2lkdGg9IjAiPgotICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlOi8vL1ZvbHVtZXMvQW5kcm9pZC9TYW5pdHkvU2NlbmVHcmFwaC9hc3NldHMvYmx1ZS5qcGc8L2luaXRfZnJvbT4KLSAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgIDxkZ25vZGVfdHlwZT5rRmlsZTwvZGdub2RlX3R5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWFnZV9zZXF1ZW5jZT4wPC9pbWFnZV9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5maWxlMjk8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgIDwvaW1hZ2U+Ci0gICAgICAgIDxpbWFnZSBpZD0iZmlsZTI1IiBuYW1lPSJmaWxlMjUiIGhlaWdodD0iMCIgd2lkdGg9IjAiPgotICAgICAgICAgICAgPGluaXRfZnJvbT5maWxlOi8vL1ZvbHVtZXMvQW5kcm9pZC9TYW5pdHkvU2NlbmVHcmFwaC9hc3NldHMvY2FyYm9uZmliZXIuanBnPC9pbml0X2Zyb20+Ci0gICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICA8ZGdub2RlX3R5cGU+a0ZpbGU8L2Rnbm9kZV90eXBlPgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2Vfc2VxdWVuY2U+MDwvaW1hZ2Vfc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+ZmlsZTI1PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICA8L2ltYWdlPgotICAgICAgICA8aW1hZ2UgaWQ9ImZpbGUyOCIgbmFtZT0iZmlsZTI4IiBoZWlnaHQ9IjAiIHdpZHRoPSIwIj4KLSAgICAgICAgICAgIDxpbml0X2Zyb20+ZmlsZTovLy9Wb2x1bWVzL0FuZHJvaWQvU2FuaXR5L1NjZW5lR3JhcGgvYXNzZXRzL2dyZWVuLmpwZzwvaW5pdF9mcm9tPgotICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgPGRnbm9kZV90eXBlPmtGaWxlPC9kZ25vZGVfdHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlX3NlcXVlbmNlPjA8L2ltYWdlX3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPmZpbGUyODwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgPC9pbWFnZT4KLSAgICAgICAgPGltYWdlIGlkPSJmaWxlMjIiIG5hbWU9ImZpbGUyMiIgaGVpZ2h0PSIwIiB3aWR0aD0iMCI+Ci0gICAgICAgICAgICA8aW5pdF9mcm9tPmZpbGU6Ly8vVm9sdW1lcy9BbmRyb2lkL1Nhbml0eS9TY2VuZUdyYXBoL2Fzc2V0cy9ncmV5LmpwZzwvaW5pdF9mcm9tPgotICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgPGRnbm9kZV90eXBlPmtGaWxlPC9kZ25vZGVfdHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPGltYWdlX3NlcXVlbmNlPjA8L2ltYWdlX3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPmZpbGUyMjwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgPC9pbWFnZT4KLSAgICAgICAgPGltYWdlIGlkPSJmaWxlMjQiIG5hbWU9ImZpbGUyNCIgaGVpZ2h0PSIwIiB3aWR0aD0iMCI+Ci0gICAgICAgICAgICA8aW5pdF9mcm9tPmZpbGU6Ly8vVm9sdW1lcy9BbmRyb2lkL1Nhbml0eS9TY2VuZUdyYXBoL2Fzc2V0cy9vcmFuZ2UuanBnPC9pbml0X2Zyb20+Ci0gICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICA8ZGdub2RlX3R5cGU+a0ZpbGU8L2Rnbm9kZV90eXBlPgotICAgICAgICAgICAgICAgICAgICA8aW1hZ2Vfc2VxdWVuY2U+MDwvaW1hZ2Vfc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+ZmlsZTI0PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICA8L2ltYWdlPgotICAgICAgICA8aW1hZ2UgaWQ9ImZpbGUyMyIgbmFtZT0iZmlsZTIzIiBoZWlnaHQ9IjAiIHdpZHRoPSIwIj4KLSAgICAgICAgICAgIDxpbml0X2Zyb20+ZmlsZTovLy9Wb2x1bWVzL0FuZHJvaWQvU2FuaXR5L1NjZW5lR3JhcGgvYXNzZXRzL3JlZC5qcGc8L2luaXRfZnJvbT4KLSAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgIDxkZ25vZGVfdHlwZT5rRmlsZTwvZGdub2RlX3R5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWFnZV9zZXF1ZW5jZT4wPC9pbWFnZV9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5maWxlMjM8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgIDwvaW1hZ2U+Ci0gICAgPC9saWJyYXJ5X2ltYWdlcz4KLSAgICA8bGlicmFyeV92aXN1YWxfc2NlbmVzPgotICAgICAgICA8dmlzdWFsX3NjZW5lIGlkPSJWaXN1YWxTY2VuZU5vZGUiIG5hbWU9Im9yaWVudGF0aW9uX3Rlc3QiPgotICAgICAgICAgICAgPG5vZGUgaWQ9ImNhbWVyYTEiIG5hbWU9ImNhbWVyYTEiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjI0LjU3OTEgMTQuMTMyMSAzMS40NjU0PC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVoiPjAgMCAxIDA8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWSI+MCAxIDAgNDI8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWCI+MSAwIDAgLTE2LjI8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9jYW1lcmEgdXJsPSIjY2FtZXJhU2hhcGUxIiAvPgotICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5jYW1lcmExPC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICA8bm9kZSBpZD0iQ2FtZXJhQWltIiBuYW1lPSJDYW1lcmFBaW0iPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjAuMDIwOTMwMSAzLjY4NTQyIDIuMDY5MTI8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWSI+MCAxIDAgNDMuMjU2MTwvcm90YXRlPgotICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVYIj4xIDAgMCAtMjA8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgIDxub2RlIGlkPSJDYW1lcmFEaXN0IiBuYW1lPSJDYW1lcmFEaXN0Ij4KLSAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+MCAwIDQ1PC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9jYW1lcmEgdXJsPSIjQ2FtZXJhRGlzdFNoYXBlIiAvPgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5DYW1lcmFEaXN0PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPkNhbWVyYUFpbTwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9InBTcGhlcmU0IiBuYW1lPSJwU3BoZXJlNCI+Ci0gICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+LTkuNjkyMzcgMCA3LjcwNDk4PC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlNCI+Ci0gICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX21hdGVyaWFsIHN5bWJvbD0ibGFtYmVydDdTRyIgdGFyZ2V0PSIjUGFpbnQxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTQ8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgIDxub2RlIGlkPSJwU3BoZXJlMSIgbmFtZT0icFNwaGVyZTEiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjEzLjA5NjYgMCA1Ljc2MjU0PC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMSI+Ci0gICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX21hdGVyaWFsIHN5bWJvbD0ibGFtYmVydDdTRyIgdGFyZ2V0PSIjUGFpbnQxIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTE8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgIDxub2RlIGlkPSJwU3BoZXJlMiIgbmFtZT0icFNwaGVyZTIiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjIxLjc2NjEgMCAtMTMuNjM3NTwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTIiPgotICAgICAgICAgICAgICAgICAgICA8YmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ3U0ciIHRhcmdldD0iI1BhaW50MSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfZ2VvbWV0cnk+Ci0gICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPnBTcGhlcmUyPC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTMiIG5hbWU9InBTcGhlcmUzIj4KLSAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4tMTMuODYyIDAgLTEzLjYxNTQ8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9nZW9tZXRyeSB1cmw9IiNwU3BoZXJlU2hhcGUzIj4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0N1NHIiB0YXJnZXQ9IiNQYWludDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMzwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9InBTcGhlcmU1IiBuYW1lPSJwU3BoZXJlNSI+Ci0gICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+MzEuMDg2MiAwIDE4LjU5OTI8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9nZW9tZXRyeSB1cmw9IiNwU3BoZXJlU2hhcGU1Ij4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0N1NHIiB0YXJnZXQ9IiNQYWludDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlNTwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9InBDdWJlMSIgbmFtZT0icEN1YmUxIj4KLSAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4wIDAgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BDdWJlU2hhcGUxIj4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0NFNHIiB0YXJnZXQ9IiNsYW1iZXJ0MiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfZ2VvbWV0cnk+Ci0gICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPnBDdWJlMTwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9Imdyb3VwMSIgbmFtZT0iZ3JvdXAxIj4KLSAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4wIDAgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVaIj4wIDAgMSAtMTYyLjY5Mzwvcm90YXRlPgotICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVZIj4wIDEgMCAyMS4zMzQ1PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVgiPjEgMCAwIC0xMDAuNTY3PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTYiIG5hbWU9InBTcGhlcmU2Ij4KLSAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+LTEzLjg2MiAwIC0xMy42MTU0PC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9nZW9tZXRyeSB1cmw9IiNwU3BoZXJlU2hhcGU2Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0NlNHIiB0YXJnZXQ9IiNQbGFzdGljIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlNjwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgICAgIDxub2RlIGlkPSJwU3BoZXJlNyIgbmFtZT0icFNwaGVyZTciPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4tOS42OTIzNyAwIDcuNzA0OTg8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ2U0ciIHRhcmdldD0iI1BsYXN0aWMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfZ2VvbWV0cnk+Ci0gICAgICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPnBTcGhlcmU3PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPG5vZGUgaWQ9InBTcGhlcmU4IiBuYW1lPSJwU3BoZXJlOCI+Ci0gICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjIxLjc2NjEgMCAtMTMuNjM3NTwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlOCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX21hdGVyaWFsIHN5bWJvbD0ibGFtYmVydDZTRyIgdGFyZ2V0PSIjUGxhc3RpYyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTg8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTkiIG5hbWU9InBTcGhlcmU5Ij4KLSAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+MTMuMDk2NiAwIDUuNzYyNTQ8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTkiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ2U0ciIHRhcmdldD0iI1BsYXN0aWMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfZ2VvbWV0cnk+Ci0gICAgICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPnBTcGhlcmU5PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPmdyb3VwMTwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9Imdyb3VwMiIgbmFtZT0iZ3JvdXAyIj4KLSAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4wIDAgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVaIj4wIDAgMSA0NS40MDE3PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVkiPjAgMSAwIDc5LjM5Mzwvcm90YXRlPgotICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVYIj4xIDAgMCA1LjEwODg5PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTEwIiBuYW1lPSJwU3BoZXJlMTAiPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4zMS4wODYyIDAgMTguNTk5MjwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMTAiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ1U0ciIHRhcmdldD0iI01ldGFsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMTA8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTExIiBuYW1lPSJwU3BoZXJlMTEiPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4xMy4wOTY2IDAgNS43NjI1NDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMTEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ1U0ciIHRhcmdldD0iI01ldGFsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMTE8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTEyIiBuYW1lPSJwU3BoZXJlMTIiPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj43LjQ3ODQgMTYuMzQ5NiA3LjM2ODgyPC90cmFuc2xhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVaIj4wIDAgMSAxNy4zMDczPC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVZIj4wIDEgMCAxNTguNjY2PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxyb3RhdGUgc2lkPSJyb3RhdGVYIj4xIDAgMCA3OS40MzM1PC9yb3RhdGU+Ci0gICAgICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9nZW9tZXRyeSB1cmw9IiNwU3BoZXJlU2hhcGUxMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX21hdGVyaWFsIHN5bWJvbD0ibGFtYmVydDVTRyIgdGFyZ2V0PSIjTWV0YWwiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfZ2VvbWV0cnk+Ci0gICAgICAgICAgICAgICAgICAgIDxleHRyYT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPnBTcGhlcmUxMjwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWU+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgICAgIDxub2RlIGlkPSJwU3BoZXJlMTMiIG5hbWU9InBTcGhlcmUxMyI+Ci0gICAgICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPi05LjY5MjM3IDAgNy43MDQ5ODwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMTMiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ1U0ciIHRhcmdldD0iI01ldGFsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMTM8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTE0IiBuYW1lPSJwU3BoZXJlMTQiPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4xMS4zNjM1IC00LjM5MjYgMi4yMTAxMjwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWiI+MCAwIDEgMTcuMzA3Mzwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWSI+MCAxIDAgMTU4LjY2Njwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWCI+MSAwIDAgNzkuNDMzNTwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMTQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ1U0ciIHRhcmdldD0iI01ldGFsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMTQ8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTE1IiBuYW1lPSJwU3BoZXJlMTUiPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4yMS43NjYxIDAgLTEzLjYzNzU8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTE1Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0NVNHIiB0YXJnZXQ9IiNNZXRhbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTE1PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPG5vZGUgaWQ9InBTcGhlcmUxNiIgbmFtZT0icFNwaGVyZTE2Ij4KLSAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+LTkuNTk0NSAtOC45MjMxNyAtNS43NDkwMTwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWiI+MCAwIDEgMTcuMzA3Mzwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWSI+MCAxIDAgMTU4LjY2Njwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8cm90YXRlIHNpZD0icm90YXRlWCI+MSAwIDAgNzkuNDMzNTwvcm90YXRlPgotICAgICAgICAgICAgICAgICAgICA8c2NhbGUgc2lkPSJzY2FsZSI+MSAxIDE8L3NjYWxlPgotICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfZ2VvbWV0cnkgdXJsPSIjcFNwaGVyZVNoYXBlMTYiPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZV9jb21tb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZV9tYXRlcmlhbCBzeW1ib2w9ImxhbWJlcnQ1U0ciIHRhcmdldD0iI01ldGFsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX3ZlcnRleF9pbnB1dCBzZW1hbnRpYz0iVEVYMCIgaW5wdXRfc2VtYW50aWM9IlRFWENPT1JEIiBpbnB1dF9zZXQ9IjAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9iaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX2dlb21ldHJ5PgotICAgICAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9yaWdpbmFsTWF5YU5vZGVJZD5wU3BoZXJlMTY8L29yaWdpbmFsTWF5YU5vZGVJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgICAgIDwvbm9kZT4KLSAgICAgICAgICAgICAgICA8bm9kZSBpZD0icFNwaGVyZTE3IiBuYW1lPSJwU3BoZXJlMTciPgotICAgICAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4tMTMuODYyIDAgLTEzLjYxNTQ8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTE3Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0NVNHIiB0YXJnZXQ9IiNNZXRhbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTE3PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPG5vZGUgaWQ9InBTcGhlcmUxOCIgbmFtZT0icFNwaGVyZTE4Ij4KLSAgICAgICAgICAgICAgICAgICAgPHRyYW5zbGF0ZSBzaWQ9InRyYW5zbGF0ZSI+LTI0LjIxMzUgNi40OTcgLTUuNTg5MzU8L3RyYW5zbGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVoiPjAgMCAxIDE3LjMwNzM8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVkiPjAgMSAwIDE1OC42NjY8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHJvdGF0ZSBzaWQ9InJvdGF0ZVgiPjEgMCAwIDc5LjQzMzU8L3JvdGF0ZT4KLSAgICAgICAgICAgICAgICAgICAgPHNjYWxlIHNpZD0ic2NhbGUiPjEgMSAxPC9zY2FsZT4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BTcGhlcmVTaGFwZTE4Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0NVNHIiB0YXJnZXQ9IiNNZXRhbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZF92ZXJ0ZXhfaW5wdXQgc2VtYW50aWM9IlRFWDAiIGlucHV0X3NlbWFudGljPSJURVhDT09SRCIgaW5wdXRfc2V0PSIwIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYmluZF9tYXRlcmlhbD4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRlY2huaXF1ZSBwcm9maWxlPSJPcGVuQ09MTEFEQU1heWEiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cFNwaGVyZTE4PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leHRyYT4KLSAgICAgICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICAgICAgPGV4dHJhPgotICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlIHByb2ZpbGU9Ik9wZW5DT0xMQURBTWF5YSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8b3JpZ2luYWxNYXlhTm9kZUlkPmdyb3VwMjwvb3JpZ2luYWxNYXlhTm9kZUlkPgotICAgICAgICAgICAgICAgICAgICA8L3RlY2huaXF1ZT4KLSAgICAgICAgICAgICAgICA8L2V4dHJhPgotICAgICAgICAgICAgPC9ub2RlPgotICAgICAgICAgICAgPG5vZGUgaWQ9InBDdWJlMiIgbmFtZT0icEN1YmUyIj4KLSAgICAgICAgICAgICAgICA8dHJhbnNsYXRlIHNpZD0idHJhbnNsYXRlIj4wIDAgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BDdWJlU2hhcGUyIj4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0OFNHIiB0YXJnZXQ9IiNQbGFzdGljQ2VudGVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cEN1YmUyPC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICA8bm9kZSBpZD0icEN1YmUzIiBuYW1lPSJwQ3ViZTMiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjE1IDAgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BDdWJlU2hhcGUzIj4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0OVNHIiB0YXJnZXQ9IiNQbGFzdGljUmVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cEN1YmUzPC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICA8bm9kZSBpZD0icEN1YmU0IiBuYW1lPSJwQ3ViZTQiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjAgMTUgMDwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BDdWJlU2hhcGU0Ij4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0MTBTRyIgdGFyZ2V0PSIjbGFtYmVydDEwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cEN1YmU0PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgICAgICA8bm9kZSBpZD0icEN1YmU1IiBuYW1lPSJwQ3ViZTUiPgotICAgICAgICAgICAgICAgIDx0cmFuc2xhdGUgc2lkPSJ0cmFuc2xhdGUiPjAgMCAxNTwvdHJhbnNsYXRlPgotICAgICAgICAgICAgICAgIDxzY2FsZSBzaWQ9InNjYWxlIj4xIDEgMTwvc2NhbGU+Ci0gICAgICAgICAgICAgICAgPGluc3RhbmNlX2dlb21ldHJ5IHVybD0iI3BDdWJlU2hhcGU1Ij4KLSAgICAgICAgICAgICAgICAgICAgPGJpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGVjaG5pcXVlX2NvbW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VfbWF0ZXJpYWwgc3ltYm9sPSJsYW1iZXJ0MTFTRyIgdGFyZ2V0PSIjbGFtYmVydDExIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRfdmVydGV4X2lucHV0IHNlbWFudGljPSJURVgwIiBpbnB1dF9zZW1hbnRpYz0iVEVYQ09PUkQiIGlucHV0X3NldD0iMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlX21hdGVyaWFsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZWNobmlxdWVfY29tbW9uPgotICAgICAgICAgICAgICAgICAgICA8L2JpbmRfbWF0ZXJpYWw+Ci0gICAgICAgICAgICAgICAgPC9pbnN0YW5jZV9nZW9tZXRyeT4KLSAgICAgICAgICAgICAgICA8ZXh0cmE+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZWNobmlxdWUgcHJvZmlsZT0iT3BlbkNPTExBREFNYXlhIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvcmlnaW5hbE1heWFOb2RlSWQ+cEN1YmU1PC9vcmlnaW5hbE1heWFOb2RlSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGVjaG5pcXVlPgotICAgICAgICAgICAgICAgIDwvZXh0cmE+Ci0gICAgICAgICAgICA8L25vZGU+Ci0gICAgICAgIDwvdmlzdWFsX3NjZW5lPgotICAgIDwvbGlicmFyeV92aXN1YWxfc2NlbmVzPgotICAgIDxzY2VuZT4KLSAgICAgICAgPGluc3RhbmNlX3Zpc3VhbF9zY2VuZSB1cmw9IiNWaXN1YWxTY2VuZU5vZGUiIC8+Ci0gICAgPC9zY2VuZT4KLTwvQ09MTEFEQT4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL3BhaW50LmpwZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvYXNzZXRzL3BhaW50LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5MTA0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9wYWludC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9yZWQuanBnIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9hc3NldHMvcmVkLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwYTJhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL2Fzc2V0cy9yZWQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvZHJhd2FibGUtbm9kcGkvaWNvbi5wbmcgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9kcmF3YWJsZS1ub2RwaS9pY29uLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYzNGE3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9kcmF3YWJsZS1ub2RwaS9pY29uLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczNTNmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9kcmF3YWJsZS1ub2RwaS9yb2JvdC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9tZW51L2xvYWRlcl9tZW51LnhtbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL21lbnUvbG9hZGVyX21lbnUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWEzMDEwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9tZW51L2xvYWRlcl9tZW51LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKgotKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoKLSogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoKLSogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0tLT4KLQotPG1lbnUgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRlbSBhbmRyb2lkOmlkPSJAK2lkL2xvYWRfbW9kZWwiCi0gICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9sb2FkX21vZGVsIiAvPgotICAgIDxpdGVtIGFuZHJvaWQ6aWQ9IkAraWQvdXNlX2JsdXIiCi0gICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy91c2VfYmx1ciIgLz4KLTwvbWVudT4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9ibHVyX2guZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9ibHVyX2guZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzM0YWRjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvYmx1cl9oLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgdmVjMiBibHVyQ29vcmQgPSB2YXJUZXgwOwotICAgYmx1ckNvb3JkLnggPSB2YXJUZXgwLnggKyBVTklfYmx1ck9mZnNldDA7Ci0gICB2ZWMzIGNvbCA9IHRleHR1cmUyRChVTklfY29sb3IsIGJsdXJDb29yZCkucmdiOwotICAgYmx1ckNvb3JkLnggPSB2YXJUZXgwLnggKyBVTklfYmx1ck9mZnNldDE7Ci0gICBjb2wgKz0gdGV4dHVyZTJEKFVOSV9jb2xvciwgYmx1ckNvb3JkKS5yZ2I7Ci0gICBibHVyQ29vcmQueCA9IHZhclRleDAueCArIFVOSV9ibHVyT2Zmc2V0MjsKLSAgIGNvbCArPSB0ZXh0dXJlMkQoVU5JX2NvbG9yLCBibHVyQ29vcmQpLnJnYjsKLSAgIGJsdXJDb29yZC54ID0gdmFyVGV4MC54ICsgVU5JX2JsdXJPZmZzZXQzOwotICAgY29sICs9IHRleHR1cmUyRChVTklfY29sb3IsIGJsdXJDb29yZCkucmdiOwotCi0gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCAqIDAuMjUsIDAuMCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvYmx1cl92Lmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvYmx1cl92Lmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTA1YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L2JsdXJfdi5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLSAgIHZlYzIgYmx1ckNvb3JkID0gdmFyVGV4MDsKLSAgIGJsdXJDb29yZC55ID0gdmFyVGV4MC55ICsgVU5JX2JsdXJPZmZzZXQwOwotICAgdmVjMyBjb2wgPSB0ZXh0dXJlMkQoVU5JX2NvbG9yLCBibHVyQ29vcmQpLnJnYjsKLSAgIGJsdXJDb29yZC55ID0gdmFyVGV4MC55ICsgVU5JX2JsdXJPZmZzZXQxOwotICAgY29sICs9IHRleHR1cmUyRChVTklfY29sb3IsIGJsdXJDb29yZCkucmdiOwotICAgYmx1ckNvb3JkLnkgPSB2YXJUZXgwLnkgKyBVTklfYmx1ck9mZnNldDI7Ci0gICBjb2wgKz0gdGV4dHVyZTJEKFVOSV9jb2xvciwgYmx1ckNvb3JkKS5yZ2I7Ci0gICBibHVyQ29vcmQueSA9IHZhclRleDAueSArIFVOSV9ibHVyT2Zmc2V0MzsKLSAgIGNvbCArPSB0ZXh0dXJlMkQoVU5JX2NvbG9yLCBibHVyQ29vcmQpLnJnYjsKLQotICAgY29sID0gY29sICogMC4yNTsKLQotICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2wsIDAuMCk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvYmx1cl92ZXJ0ZXguZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9ibHVyX3ZlcnRleC5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzgyNGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9ibHVyX3ZlcnRleC5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgZ2xfUG9zaXRpb24gPSBBVFRSSUJfcG9zaXRpb247Ci0gICB2YXJUZXgwID0gQVRUUklCX3RleHR1cmUwOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvZGlmZnVzZS5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L2RpZmZ1c2UuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmViMTAyOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvZGlmZnVzZS5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotdmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zOwotdmFyeWluZyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLQotICAgdmVjMyBWID0gbm9ybWFsaXplKFVOSV9jYW1lcmFQb3MueHl6IC0gdmFyV29ybGRQb3MueHl6KTsKLSAgIHZlYzMgd29ybGROb3JtID0gKHZhcldvcmxkTm9ybWFsKTsKLQotICAgdmVjMyBsaWdodDBWZWMgPSBWOwotICAgdmVjMyBsaWdodDBSID0gcmVmbGVjdChsaWdodDBWZWMsIHdvcmxkTm9ybSk7Ci0gICBmbG9hdCBsaWdodDBfRGlmZnVzZSA9IGRvdCh3b3JsZE5vcm0sIGxpZ2h0MFZlYyk7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfZGlmZnVzZSwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIGxpZ2h0MF9EaWZmdXNlICogMS4yOwotICAgZ2xfRnJhZ0NvbG9yID0gY29sOwotfQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvZGlmZnVzZV9saWdodHMuZ2xzbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9kaWZmdXNlX2xpZ2h0cy5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjkzZTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9kaWZmdXNlX2xpZ2h0cy5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotdmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zOwotdmFyeWluZyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLQotICAgdmVjMyBWID0gbm9ybWFsaXplKFVOSV9jYW1lcmFQb3MueHl6IC0gdmFyV29ybGRQb3MueHl6KTsKLSAgIHZlYzMgd29ybGROb3JtID0gbm9ybWFsaXplKHZhcldvcmxkTm9ybWFsKTsKLQotICAgdmVjMyBsaWdodDBWZWMgPSBub3JtYWxpemUoVU5JX2xpZ2h0UG9zXzAueHl6IC0gdmFyV29ybGRQb3MueHl6KTsKLSAgIGZsb2F0IGxpZ2h0MF9EaWZmdXNlID0gY2xhbXAoZG90KHdvcmxkTm9ybSwgbGlnaHQwVmVjKSwgMC4wLCAxLjApOwotCi0gICB2ZWMzIGxpZ2h0MVZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHRQb3NfMS54eXogLSB2YXJXb3JsZFBvcy54eXopOwotICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCk7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IFVOSV9kaWZmdXNlOwotICAgY29sLnh5eiA9IGNvbC54eXogKiAobGlnaHQwX0RpZmZ1c2UgKiBVTklfbGlnaHRDb2xvcl8wLnh5eiArCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWdodDFfRGlmZnVzZSAqIFVOSV9saWdodENvbG9yXzEueHl6KTsKLSAgIGdsX0ZyYWdDb2xvciA9IGNvbDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L21ldGFsLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvbWV0YWwuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkwYTdiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvbWV0YWwuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi12b2lkIG1haW4oKSB7Ci0KLSAgIHZlYzMgViA9IG5vcm1hbGl6ZShVTklfY2FtZXJhUG9zLnh5eiAtIHZhcldvcmxkUG9zLnh5eik7Ci0gICB2ZWMzIHdvcmxkTm9ybSA9IG5vcm1hbGl6ZSh2YXJXb3JsZE5vcm1hbCk7Ci0KLSAgIHZlYzMgbGlnaHQwVmVjID0gVjsKLSAgIHZlYzMgbGlnaHQwUiA9IHJlZmxlY3QobGlnaHQwVmVjLCB3b3JsZE5vcm0pOwotICAgZmxvYXQgbGlnaHQwX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDBWZWMpLCAwLjAsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDBTcGVjID0gY2xhbXAoZG90KC1saWdodDBSLCBWKSwgMC4wMDEsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDBfU3BlY3VsYXIgPSBwb3cobGlnaHQwU3BlYywgMTUuMCkgKiAwLjU7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfZGlmZnVzZSwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqICh0ZXh0dXJlQ3ViZShVTklfcmVmbGVjdGlvbiwgd29ybGROb3JtKS5yZ2IgKiAwLjUgKyB2ZWMzKGxpZ2h0MF9EaWZmdXNlKSk7Ci0gICBjb2wueHl6ICs9IGxpZ2h0MF9TcGVjdWxhciAqIHZlYzMoMC44LCAwLjgsIDEuMCk7Ci0KLSAgIGdsX0ZyYWdDb2xvciA9IGNvbDsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3BhaW50Zi5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3BhaW50Zi5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2I4OWVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9wYWludGYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi12b2lkIG1haW4oKSB7Ci0KLSAgIHZlYzMgViA9IG5vcm1hbGl6ZShVTklfY2FtZXJhUG9zLnh5eiAtIHZhcldvcmxkUG9zLnh5eik7Ci0gICB2ZWMzIHdvcmxkTm9ybSA9IG5vcm1hbGl6ZSh2YXJXb3JsZE5vcm1hbCk7Ci0KLSAgIHZlYzMgbGlnaHQwVmVjID0gVjsKLSAgIHZlYzMgbGlnaHQwUiA9IHJlZmxlY3QobGlnaHQwVmVjLCB3b3JsZE5vcm0pOwotICAgZmxvYXQgbGlnaHQwX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDBWZWMpLCAwLjAxLCAwLjk5KTsKLSAgIGZsb2F0IGxpZ2h0MFNwZWMgPSBjbGFtcChkb3QoLWxpZ2h0MFIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MF9TcGVjdWxhciA9IHBvdyhsaWdodDBTcGVjLCAxNTAuMCkgKiAwLjU7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfZGlmZnVzZSwgdDApLnJnYmE7Ci0gICBjb2wueHl6ID0gY29sLnh5eiAqIGxpZ2h0MF9EaWZmdXNlICogMS4xOwotICAgY29sLnh5eiArPSBsaWdodDBfU3BlY3VsYXIgKiB2ZWMzKDAuOCwgMC44LCAxLjApOwotCi0gICBmbG9hdCBmcmVzbmVsID0gbWl4KHBvdygxLjAgLSBsaWdodDBfRGlmZnVzZSwgMTUuMCksIDEuMCwgMC4xKTsKLSAgIGNvbC54eXogPSBtaXgoY29sLnh5eiwgdGV4dHVyZUN1YmUoVU5JX3JlZmxlY3Rpb24sIC1saWdodDBSKS5yZ2IgKiAyLjQsIGZyZXNuZWwpOwotICAgY29sLncgPSAwLjg7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2w7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9wbGFzdGljLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvcGxhc3RpYy5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmY3MTUxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvcGxhc3RpYy5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotdmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zOwotdmFyeWluZyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLQotICAgdmVjMyBWID0gbm9ybWFsaXplKFVOSV9jYW1lcmFQb3MueHl6IC0gdmFyV29ybGRQb3MueHl6KTsKLSAgIHZlYzMgd29ybGROb3JtID0gbm9ybWFsaXplKHZhcldvcmxkTm9ybWFsKTsKLQotICAgdmVjMyBsaWdodDBWZWMgPSBWOwotICAgdmVjMyBsaWdodDBSID0gcmVmbGVjdChsaWdodDBWZWMsIHdvcmxkTm9ybSk7Ci0gICBmbG9hdCBsaWdodDBfRGlmZnVzZSA9IGNsYW1wKGRvdCh3b3JsZE5vcm0sIGxpZ2h0MFZlYyksIDAuMCwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MFNwZWMgPSBjbGFtcChkb3QoLWxpZ2h0MFIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MF9TcGVjdWxhciA9IHBvdyhsaWdodDBTcGVjLCAxMC4wKSAqIDAuNTsKLQotICAgdmVjMiB0MCA9IHZhclRleDAueHk7Ci0gICBsb3dwIHZlYzQgY29sID0gdGV4dHVyZTJEKFVOSV9kaWZmdXNlLCB0MCkucmdiYTsKLSAgIGNvbC54eXogPSBjb2wueHl6ICogbGlnaHQwX0RpZmZ1c2UgKiAxLjI7Ci0gICBjb2wueHl6ICs9IGxpZ2h0MF9TcGVjdWxhciAqIHZlYzMoMC44LCAwLjgsIDEuMCk7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2w7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9wbGFzdGljX2xpZ2h0cy5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3BsYXN0aWNfbGlnaHRzLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTM2MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3BsYXN0aWNfbGlnaHRzLmdsc2wKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi12YXJ5aW5nIHZlYzMgdmFyV29ybGRQb3M7Ci12YXJ5aW5nIHZlYzMgdmFyV29ybGROb3JtYWw7Ci12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotCi0gICB2ZWMzIFYgPSBub3JtYWxpemUoVU5JX2NhbWVyYVBvcy54eXogLSB2YXJXb3JsZFBvcy54eXopOwotICAgdmVjMyB3b3JsZE5vcm0gPSBub3JtYWxpemUodmFyV29ybGROb3JtYWwpOwotCi0gICB2ZWMzIGxpZ2h0MFZlYyA9IG5vcm1hbGl6ZShVTklfbGlnaHRQb3NfMC54eXogLSB2YXJXb3JsZFBvcy54eXopOwotICAgdmVjMyBsaWdodDBSID0gcmVmbGVjdChsaWdodDBWZWMsIHdvcmxkTm9ybSk7Ci0gICBmbG9hdCBsaWdodDBfRGlmZnVzZSA9IGNsYW1wKGRvdCh3b3JsZE5vcm0sIGxpZ2h0MFZlYyksIDAuMCwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MFNwZWMgPSBjbGFtcChkb3QoLWxpZ2h0MFIsIFYpLCAwLjAwMSwgMS4wKTsKLSAgIGZsb2F0IGxpZ2h0MF9TcGVjdWxhciA9IHBvdyhsaWdodDBTcGVjLCAxMC4wKSAqIDAuNzsKLQotICAgdmVjMyBsaWdodDFWZWMgPSBub3JtYWxpemUoVU5JX2xpZ2h0UG9zXzEueHl6IC0gdmFyV29ybGRQb3MueHl6KTsKLSAgIHZlYzMgbGlnaHQxUiA9IHJlZmxlY3QobGlnaHQxVmVjLCB3b3JsZE5vcm0pOwotICAgZmxvYXQgbGlnaHQxX0RpZmZ1c2UgPSBjbGFtcChkb3Qod29ybGROb3JtLCBsaWdodDFWZWMpLCAwLjAsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDFTcGVjID0gY2xhbXAoZG90KC1saWdodDFSLCBWKSwgMC4wMDEsIDEuMCk7Ci0gICBmbG9hdCBsaWdodDFfU3BlY3VsYXIgPSBwb3cobGlnaHQxU3BlYywgMTAuMCkgKiAwLjc7Ci0KLSAgIHZlYzIgdDAgPSB2YXJUZXgwLnh5OwotICAgbG93cCB2ZWM0IGNvbCA9IFVOSV9kaWZmdXNlOwotICAgY29sLnh5eiA9IGNvbC54eXogKiAobGlnaHQwX0RpZmZ1c2UgKiBVTklfbGlnaHRDb2xvcl8wLnh5eiArCi0gICAgICAgICAgICAgICAgICAgICAgICBsaWdodDFfRGlmZnVzZSAqIFVOSV9saWdodENvbG9yXzEueHl6KTsKLSAgIGNvbC54eXogKz0gKGxpZ2h0MF9TcGVjdWxhciArIGxpZ2h0MV9TcGVjdWxhcik7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2w7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9yb2JvdC5hM2QgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvcm9ib3QuYTNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDg4OTVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy9yb2JvdC5hM2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvc2VsZWN0X2NvbG9yLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvc2VsZWN0X2NvbG9yLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOTI3Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3NlbGVjdF9jb2xvci5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotdmFyeWluZyB2ZWMyIHZhclRleDA7Ci0KLXZvaWQgbWFpbigpIHsKLSAgIHZlYzMgY29sID0gdGV4dHVyZTJEKFVOSV9jb2xvciwgdmFyVGV4MCkucmdiOwotCi0gICB2ZWMzIGRlc2F0ID0gdmVjMygwLjI5OSwgMC41ODcsIDAuMTE0KTsKLSAgIGZsb2F0IGx1bSA9IGRvdChkZXNhdCwgY29sKTsKLSAgIGZsb2F0IHN0ZXBWYWwgPSBzdGVwKGx1bSwgMC44KTsKLSAgIGNvbCA9IG1peChjb2wsIHZlYzMoMC4wKSwgc3RlcFZhbCkqMC41OwotCi0gICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbCwgMC4wKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3NoYWRlcjJ2Lmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvc2hhZGVyMnYuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkxMGE1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvc2hhZGVyMnYuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gICAgcnNfbWF0cml4NHg0IG1vZGVsOwotICAgIHJzX21hdHJpeDR4NCB2aWV3UHJvajsKLSovCi0KLXZhcnlpbmcgdmVjMyB2YXJXb3JsZFBvczsKLXZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDsKLXZhcnlpbmcgdmVjMiB2YXJUZXgwOwotCi0vLyBUaGlzIGlzIHdoZXJlIGFjdHVhbCBzaGFkZXIgY29kZSBiZWdpbnMKLXZvaWQgbWFpbigpIHsKLSAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uOwotICAgdmVjNCB3b3JsZFBvcyA9IFVOSV9tb2RlbCAqIG9ialBvczsKLSAgIGdsX1Bvc2l0aW9uID0gVU5JX3ZpZXdQcm9qICogd29ybGRQb3M7Ci0KLSAgIG1hdDMgbW9kZWwzID0gbWF0MyhVTklfbW9kZWxbMF0ueHl6LCBVTklfbW9kZWxbMV0ueHl6LCBVTklfbW9kZWxbMl0ueHl6KTsKLSAgIHZlYzMgd29ybGROb3JtID0gbW9kZWwzICogQVRUUklCX25vcm1hbDsKLQotICAgdmFyV29ybGRQb3MgPSB3b3JsZFBvcy54eXo7Ci0gICB2YXJXb3JsZE5vcm1hbCA9IHdvcmxkTm9ybTsKLSAgIHZhclRleDAgPSBBVFRSSUJfdGV4dHVyZTA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvdGV4dHVyZS5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvcmF3L3RleHR1cmUuZ2xzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYyZWNkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvdGV4dHVyZS5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgbG93cCB2ZWM0IGNvbCA9IHRleHR1cmUyRChVTklfY29sb3IsIHZhclRleDApLnJnYmE7Ci0gICBnbF9GcmFnQ29sb3IgPSBjb2w7Ci19Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy91bml0X29iai5hM2QgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy9yYXcvdW5pdF9vYmouYTNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmVmZjA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvcmVzL3Jhdy91bml0X29iai5hM2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5MTZkNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLS8qCi0qIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qCi0qIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKgotKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotKgotKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0qIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotKi8KLS0tPgotCi08cmVzb3VyY2VzIHhtbG5zOnhsaWZmPSJ1cm46b2FzaXM6bmFtZXM6dGM6eGxpZmY6ZG9jdW1lbnQ6MS4yIj4KLSAgICA8c2tpcCAvPgotICAgIDxzdHJpbmcgbmFtZT0ibG9hZF9tb2RlbCI+TG9hZCBNb2RlbDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idXNlX2JsdXIiPlVzZSBCbHVyPC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvQ2FtZXJhLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0NhbWVyYS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmYyYmU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvQ2FtZXJhLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lTWFuYWdlcjsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgQ2FtZXJhIGV4dGVuZHMgU2NlbmVHcmFwaEJhc2UgewotCi0gICAgVHJhbnNmb3JtIG1UcmFuc2Zvcm07Ci0KLSAgICBTY3JpcHRGaWVsZF9DYW1lcmFfcy5JdGVtIG1EYXRhOwotICAgIFNjcmlwdEZpZWxkX0NhbWVyYV9zIG1GaWVsZDsKLQotICAgIHB1YmxpYyBDYW1lcmEoKSB7Ci0gICAgICAgIG1EYXRhID0gbmV3IFNjcmlwdEZpZWxkX0NhbWVyYV9zLkl0ZW0oKTsKLSAgICAgICAgbURhdGEubmVhciA9IDAuMWY7Ci0gICAgICAgIG1EYXRhLmZhciA9IDEwMDAuMGY7Ci0gICAgICAgIG1EYXRhLmhvcml6b250YWxGT1YgPSA2MC4wZjsKLSAgICAgICAgbURhdGEuYXNwZWN0ID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2Zvcm0oVHJhbnNmb3JtIHQpIHsKLSAgICAgICAgbVRyYW5zZm9ybSA9IHQ7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZpZWxkLnNldF90cmFuc2Zvcm1NYXRyaXgoMCwgbVRyYW5zZm9ybS5nZXRSU0RhdGEoKS5nZXRBbGxvY2F0aW9uKCksIHRydWUpOwotICAgICAgICAgICAgbUZpZWxkLnNldF9pc0RpcnR5KDAsIDEsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldEZPVihmbG9hdCBmb3YpIHsKLSAgICAgICAgbURhdGEuaG9yaXpvbnRhbEZPViA9IGZvdjsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X2hvcml6b250YWxGT1YoMCwgZm92LCB0cnVlKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfaXNEaXJ0eSgwLCAxLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE5lYXIoZmxvYXQgbikgewotICAgICAgICBtRGF0YS5uZWFyID0gbjsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X25lYXIoMCwgbiwgdHJ1ZSk7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X2lzRGlydHkoMCwgMSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGYXIoZmxvYXQgZikgewotICAgICAgICBtRGF0YS5mYXIgPSBmOwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfZmFyKDAsIGYsIHRydWUpOwotICAgICAgICAgICAgbUZpZWxkLnNldF9pc0RpcnR5KDAsIDEsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbikgewotICAgICAgICBzdXBlci5zZXROYW1lKG4pOwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgICAgICBtRGF0YS5uYW1lID0gZ2V0TmFtZUFsbG9jKHJzKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfbmFtZSgwLCBtRGF0YS5uYW1lLCB0cnVlKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfaXNEaXJ0eSgwLCAxLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX0NhbWVyYV9zIGdldFJTRGF0YSgpIHsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBTY2VuZU1hbmFnZXIuZ2V0UlMoKTsKLSAgICAgICAgaWYgKHJzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1UcmFuc2Zvcm0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbWVyYXMgd2l0aG91dCB0cmFuc2Zvcm1zIGFyZSBpbnZhbGlkIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfQ2FtZXJhX3MocnMsIDEpOwotCi0gICAgICAgIG1EYXRhLnRyYW5zZm9ybU1hdHJpeCA9IG1UcmFuc2Zvcm0uZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICBtRGF0YS50cmFuc2Zvcm1UaW1lc3RhbXAgPSAxOwotICAgICAgICBtRGF0YS50aW1lc3RhbXAgPSAxOwotICAgICAgICBtRGF0YS5pc0RpcnR5ID0gMTsKLSAgICAgICAgbURhdGEubmFtZSA9IGdldE5hbWVBbGxvYyhycyk7Ci0gICAgICAgIG1GaWVsZC5zZXQobURhdGEsIDAsIHRydWUpOwotCi0gICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvQ29sbGFkYVBhcnNlci5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9Db2xsYWRhUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YjZmYjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9Db2xsYWRhUGFyc2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NjMgKzAsMCBAQAotLyoNCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdA0KLSAqDQotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7DQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguQ29tcG91bmRUcmFuc2Zvcm0uVHJhbnNsYXRlQ29tcG9uZW50Ow0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLkNvbXBvdW5kVHJhbnNmb3JtLlJvdGF0ZUNvbXBvbmVudDsNCi1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5Db21wb3VuZFRyYW5zZm9ybS5TY2FsZUNvbXBvbmVudDsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsNCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQotDQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsNCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsNCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsNCi0NCi1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7DQotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7DQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0Ow0KLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247DQotDQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7DQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7DQotDQotcHVibGljIGNsYXNzIENvbGxhZGFQYXJzZXIgew0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb2xsYWRhUGFyc2VyIjsNCi0gICAgRG9jdW1lbnQgbURvbTsNCi0NCi0gICAgSGFzaE1hcDxTdHJpbmcsIExpZ2h0QmFzZT4gbUxpZ2h0czsNCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbWVyYT4gbUNhbWVyYXM7DQotICAgIEhhc2hNYXA8U3RyaW5nLCBBcnJheUxpc3Q8U2hhZGVyUGFyYW0+ID4gbUVmZmVjdHNQYXJhbXM7DQotICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlMkQ+IG1JbWFnZXM7DQotICAgIEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlMkQ+IG1TYW1wbGVySW1hZ2VNYXA7DQotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1NZXNoSWROYW1lTWFwOw0KLSAgICBTY2VuZSBtU2NlbmU7DQotDQotICAgIFN0cmluZyBtUm9vdERpcjsNCi0NCi0gICAgU3RyaW5nIHRvU3RyaW5nKEZsb2F0MyB2KSB7DQotICAgICAgICBTdHJpbmcgdmFsdWVTdHIgPSB2LnggKyAiICIgKyB2LnkgKyAiICIgKyB2Lno7DQotICAgICAgICByZXR1cm4gdmFsdWVTdHI7DQotICAgIH0NCi0NCi0gICAgU3RyaW5nIHRvU3RyaW5nKEZsb2F0NCB2KSB7DQotICAgICAgICBTdHJpbmcgdmFsdWVTdHIgPSB2LnggKyAiICIgKyB2LnkgKyAiICIgKyB2LnogKyAiICIgKyB2Lnc7DQotICAgICAgICByZXR1cm4gdmFsdWVTdHI7DQotICAgIH0NCi0NCi0gICAgcHVibGljIENvbGxhZGFQYXJzZXIoKXsNCi0gICAgICAgIG1MaWdodHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpZ2h0QmFzZT4oKTsNCi0gICAgICAgIG1DYW1lcmFzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBDYW1lcmE+KCk7DQotICAgICAgICBtRWZmZWN0c1BhcmFtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQXJyYXlMaXN0PFNoYWRlclBhcmFtPiA+KCk7DQotICAgICAgICBtSW1hZ2VzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBUZXh0dXJlMkQ+KCk7DQotICAgICAgICBtTWVzaElkTmFtZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOw0KLSAgICB9DQotDQotICAgIHB1YmxpYyB2b2lkIGluaXQoSW5wdXRTdHJlYW0gaXMsIFN0cmluZyByb290RGlyKSB7DQotICAgICAgICBtTGlnaHRzLmNsZWFyKCk7DQotICAgICAgICBtQ2FtZXJhcy5jbGVhcigpOw0KLSAgICAgICAgbUVmZmVjdHNQYXJhbXMuY2xlYXIoKTsNCi0NCi0gICAgICAgIG1Sb290RGlyID0gcm9vdERpcjsNCi0NCi0gICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsNCi0gICAgICAgIERvY3VtZW50QnVpbGRlckZhY3RvcnkgZGJmID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXIgZGIgPSBkYmYubmV3RG9jdW1lbnRCdWlsZGVyKCk7DQotICAgICAgICAgICAgbURvbSA9IGRiLnBhcnNlKGlzKTsNCi0gICAgICAgIH0gY2F0Y2goUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCi0gICAgICAgIH0gY2F0Y2goU0FYRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KLSAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQotICAgICAgICBMb2cudigiVElNRVIiLCAiICAgIFBhcnNlIHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsNCi0gICAgICAgIGV4cG9ydFNjZW5lRGF0YSgpOw0KLSAgICB9DQotDQotICAgIFNjZW5lIGdldFNjZW5lKCkgew0KLSAgICAgICAgcmV0dXJuIG1TY2VuZTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgZXhwb3J0U2NlbmVEYXRhKCl7DQotICAgICAgICBtU2NlbmUgPSBuZXcgU2NlbmUoKTsNCi0NCi0gICAgICAgIEVsZW1lbnQgZG9jRWxlID0gbURvbS5nZXREb2N1bWVudEVsZW1lbnQoKTsNCi0gICAgICAgIE5vZGVMaXN0IG5sID0gZG9jRWxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaWdodCIpOw0KLSAgICAgICAgaWYgKG5sICE9IG51bGwpIHsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGwgPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICBjb252ZXJ0TGlnaHQobCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgbmwgPSBkb2NFbGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNhbWVyYSIpOw0KLSAgICAgICAgaWYgKG5sICE9IG51bGwpIHsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGMgPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICBjb252ZXJ0Q2FtZXJhKGMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIG5sID0gZG9jRWxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbWFnZSIpOw0KLSAgICAgICAgaWYgKG5sICE9IG51bGwpIHsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGltZyA9IChFbGVtZW50KW5sLml0ZW0oaSk7DQotICAgICAgICAgICAgICAgIGNvbnZlcnRJbWFnZShpbWcpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIG5sID0gZG9jRWxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJlZmZlY3QiKTsNCi0gICAgICAgIGlmIChubCAhPSBudWxsKSB7DQotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgRWxlbWVudCBlID0gKEVsZW1lbnQpbmwuaXRlbShpKTsNCi0gICAgICAgICAgICAgICAgY29udmVydEVmZmVjdHMoZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy8gTWF0ZXJpYWwgaXMganVzdCBhIGxpbmsgdG8gdGhlIGVmZmVjdA0KLSAgICAgICAgbmwgPSBkb2NFbGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1hdGVyaWFsIik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEVsZW1lbnQgbSA9IChFbGVtZW50KW5sLml0ZW0oaSk7DQotICAgICAgICAgICAgICAgIGNvbnZlcnRNYXRlcmlhbHMobSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy8gTG9vayB0aHJvdWdoIHRoZSBnZW9tZXRyeSBsaXN0IGFuZCBidWlsZCB1cCBhIGNvcnJlbGF0aW9uIGJldHdlZW4gaWQncyBhbmQgbmFtZXMNCi0gICAgICAgIG5sID0gZG9jRWxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJnZW9tZXRyeSIpOw0KLSAgICAgICAgaWYgKG5sICE9IG51bGwpIHsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IG0gPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICBjb252ZXJ0R2VvbWV0cmllcyhtKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotDQotICAgICAgICBubCA9IGRvY0VsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidmlzdWFsX3NjZW5lIik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEVsZW1lbnQgcyA9IChFbGVtZW50KW5sLml0ZW0oaSk7DQotICAgICAgICAgICAgICAgIGdldFNjZW5lKHMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgZ2V0UmVuZGVyYWJsZShFbGVtZW50IHNoYXBlLCBUcmFuc2Zvcm0gdCkgew0KLSAgICAgICAgU3RyaW5nIGdlb1VSTCA9IHNoYXBlLmdldEF0dHJpYnV0ZSgidXJsIikuc3Vic3RyaW5nKDEpOw0KLSAgICAgICAgU3RyaW5nIGdlb05hbWUgPSBtTWVzaElkTmFtZU1hcC5nZXQoZ2VvVVJMKTsNCi0gICAgICAgIGlmIChnZW9OYW1lICE9IG51bGwpIHsNCi0gICAgICAgICAgICBnZW9VUkwgPSBnZW9OYW1lOw0KLSAgICAgICAgfQ0KLSAgICAgICAgLy9SZW5kZXJhYmxlR3JvdXAgZ3JvdXAgPSBuZXcgUmVuZGVyYWJsZUdyb3VwKCk7DQotICAgICAgICAvL2dyb3VwLnNldE5hbWUoZ2VvVVJMLnN1YnN0cmluZygxKSk7DQotICAgICAgICAvL21TY2VuZS5hcHBlbmRSZW5kZXJhYmxlKGdyb3VwKTsNCi0gICAgICAgIE5vZGVMaXN0IG5sID0gc2hhcGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImluc3RhbmNlX21hdGVyaWFsIik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEVsZW1lbnQgbWF0ZXJpYWxSZWYgPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICBTdHJpbmcgbWVzaEluZGV4TmFtZSA9IG1hdGVyaWFsUmVmLmdldEF0dHJpYnV0ZSgic3ltYm9sIik7DQotICAgICAgICAgICAgICAgIFN0cmluZyBtYXRlcmlhbE5hbWUgPSBtYXRlcmlhbFJlZi5nZXRBdHRyaWJ1dGUoInRhcmdldCIpOw0KLQ0KLSAgICAgICAgICAgICAgICBSZW5kZXJhYmxlIGQgPSBuZXcgUmVuZGVyYWJsZSgpOw0KLSAgICAgICAgICAgICAgICBkLnNldE1lc2goZ2VvVVJMLCBtZXNoSW5kZXhOYW1lKTsNCi0gICAgICAgICAgICAgICAgZC5zZXRNYXRlcmlhbE5hbWUobWF0ZXJpYWxOYW1lLnN1YnN0cmluZygxKSk7DQotICAgICAgICAgICAgICAgIGQuc2V0TmFtZShnZW9VUkwpOw0KLQ0KLSAgICAgICAgICAgICAgICAvL0xvZy52KFRBRywgIkNyZWF0ZWQgZHJhd2FibGUgZ2VvICIgKyBnZW9VUkwgKyAiIGluZGV4ICIgKyBtZXNoSW5kZXhOYW1lICsgIiBtYXRlcmlhbCAiICsgbWF0ZXJpYWxOYW1lKTsNCi0NCi0gICAgICAgICAgICAgICAgZC5zZXRUcmFuc2Zvcm0odCk7DQotICAgICAgICAgICAgICAgIC8vTG9nLnYoVEFHLCAiU2V0IHNvdXJjZSBwYXJhbSAiICsgdC5nZXROYW1lKCkpOw0KLQ0KLSAgICAgICAgICAgICAgICAvLyBOb3cgZmluZCBhbGwgdGhlIHBhcmFtZXRlcnMgdGhhdCBleGlzdCBvbiB0aGUgbWF0ZXJpYWwNCi0gICAgICAgICAgICAgICAgQXJyYXlMaXN0PFNoYWRlclBhcmFtPiBtYXRlcmlhbFBhcmFtczsNCi0gICAgICAgICAgICAgICAgbWF0ZXJpYWxQYXJhbXMgPSBtRWZmZWN0c1BhcmFtcy5nZXQobWF0ZXJpYWxOYW1lLnN1YnN0cmluZygxKSk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IHBJID0gMDsgcEkgPCBtYXRlcmlhbFBhcmFtcy5zaXplKCk7IHBJICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZFNvdXJjZVBhcmFtcyhtYXRlcmlhbFBhcmFtcy5nZXQocEkpKTsNCi0gICAgICAgICAgICAgICAgICAgIC8vTG9nLnYoVEFHLCAiU2V0IHNvdXJjZSBwYXJhbSBpOiAiICsgcEkgKyAiIG5hbWUgIiArIG1hdGVyaWFsUGFyYW1zLmdldChwSSkuZ2V0UGFyYW1OYW1lKCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1TY2VuZS5hcHBlbmRSZW5kZXJhYmxlKGQpOw0KLSAgICAgICAgICAgICAgICAvL2dyb3VwLmFwcGVuZENoaWxkcmVuKGQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGlnaHQoRWxlbWVudCBzaGFwZSwgVHJhbnNmb3JtIHQpIHsNCi0gICAgICAgIFN0cmluZyBsaWdodFVSTCA9IHNoYXBlLmdldEF0dHJpYnV0ZSgidXJsIik7DQotICAgICAgICAvLyBjb2xsYWRhIHVzZXMgYSB1cmkgc3RydWN0dXJlIHRvIGxpbmsgdGhpbmdzLA0KLSAgICAgICAgLy8gYnV0IHdlIGlnbm9yZSBpdCBmb3Igbm93IGFuZCBkbyBhIHNpbXBsZSBzZWFyY2gNCi0gICAgICAgIExpZ2h0QmFzZSBsaWdodCA9IG1MaWdodHMuZ2V0KGxpZ2h0VVJMLnN1YnN0cmluZygxKSk7DQotICAgICAgICBpZiAobGlnaHQgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGxpZ2h0LnNldFRyYW5zZm9ybSh0KTsNCi0gICAgICAgICAgICAvL0xvZy52KFRBRywgIlNldCBMaWdodCAiICsgbGlnaHQuZ2V0TmFtZSgpICsgIiAiICsgdC5nZXROYW1lKCkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVDYW1lcmEoRWxlbWVudCBzaGFwZSwgVHJhbnNmb3JtIHQpIHsNCi0gICAgICAgIFN0cmluZyBjYW1VUkwgPSBzaGFwZS5nZXRBdHRyaWJ1dGUoInVybCIpOw0KLSAgICAgICAgLy8gY29sbGFkYSB1c2VzIGEgdXJpIHN0cnVjdHVyZSB0byBsaW5rIHRoaW5ncywNCi0gICAgICAgIC8vIGJ1dCB3ZSBpZ25vcmUgaXQgZm9yIG5vdyBhbmQgZG8gYSBzaW1wbGUgc2VhcmNoDQotICAgICAgICBDYW1lcmEgY2FtID0gbUNhbWVyYXMuZ2V0KGNhbVVSTC5zdWJzdHJpbmcoMSkpOw0KLSAgICAgICAgaWYgKGNhbSAhPSBudWxsKSB7DQotICAgICAgICAgICAgY2FtLnNldFRyYW5zZm9ybSh0KTsNCi0gICAgICAgICAgICAvL0xvZy52KFRBRywgIlNldCBDYW1lcmEgIiArIGNhbS5nZXROYW1lKCkgKyAiICIgKyB0LmdldE5hbWUoKSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSB2b2lkIGdldE5vZGUoRWxlbWVudCBub2RlLCBUcmFuc2Zvcm0gcGFyZW50LCBTdHJpbmcgaW5kZW50KSB7DQotICAgICAgICBTdHJpbmcgbmFtZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCJuYW1lIik7DQotICAgICAgICBTdHJpbmcgaWQgPSBub2RlLmdldEF0dHJpYnV0ZSgiaWQiKTsNCi0gICAgICAgIENvbXBvdW5kVHJhbnNmb3JtIGN1cnJlbnQgPSBuZXcgQ29tcG91bmRUcmFuc2Zvcm0oKTsNCi0gICAgICAgIGN1cnJlbnQuc2V0TmFtZShuYW1lKTsNCi0gICAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChjdXJyZW50KTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbVNjZW5lLmFwcGVuZFRyYW5zZm9ybShjdXJyZW50KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIG1TY2VuZS5hZGRUb1RyYW5zZm9ybU1hcChjdXJyZW50KTsNCi0NCi0gICAgICAgIC8vTG9nLnYoVEFHLCBpbmRlbnQgKyAifCIpOw0KLSAgICAgICAgLy9Mb2cudihUQUcsIGluZGVudCArICJbIiArIG5hbWUgKyAiXSIpOw0KLQ0KLSAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsNCi0gICAgICAgIHdoaWxlIChjaGlsZE5vZGUgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGlmIChjaGlsZE5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGZpZWxkID0gKEVsZW1lbnQpY2hpbGROb2RlOw0KLSAgICAgICAgICAgICAgICBTdHJpbmcgZmllbGROYW1lID0gZmllbGQuZ2V0VGFnTmFtZSgpOw0KLSAgICAgICAgICAgICAgICBTdHJpbmcgZGVzY3JpcHRpb24gPSBmaWVsZC5nZXRBdHRyaWJ1dGUoInNpZCIpOw0KLSAgICAgICAgICAgICAgICBpZiAoZmllbGROYW1lLmVxdWFscygidHJhbnNsYXRlIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZsb2F0MyB2YWx1ZSA9IGdldEZsb2F0MyhmaWVsZCk7DQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFkZFRyYW5zbGF0ZShkZXNjcmlwdGlvbiwgdmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgLy9Mb2cudihUQUcsIGluZGVudCArICIgdHJhbnNsYXRlICIgKyBkZXNjcmlwdGlvbiArIHRvU3RyaW5nKHZhbHVlKSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lLmVxdWFscygicm90YXRlIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZsb2F0NCB2YWx1ZSA9IGdldEZsb2F0NChmaWVsZCk7DQotICAgICAgICAgICAgICAgICAgICAvL0xvZy52KFRBRywgaW5kZW50ICsgIiByb3RhdGUgIiArIGRlc2NyaXB0aW9uICsgdG9TdHJpbmcodmFsdWUpKTsNCi0gICAgICAgICAgICAgICAgICAgIEZsb2F0MyBheGlzID0gbmV3IEZsb2F0Myh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56KTsNCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWRkUm90YXRlKGRlc2NyaXB0aW9uLCBheGlzLCB2YWx1ZS53KTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZE5hbWUuZXF1YWxzKCJzY2FsZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBGbG9hdDMgdmFsdWUgPSBnZXRGbG9hdDMoZmllbGQpOw0KLSAgICAgICAgICAgICAgICAgICAgLy9Mb2cudihUQUcsIGluZGVudCArICIgc2NhbGUgIiArIGRlc2NyaXB0aW9uICsgdG9TdHJpbmcodmFsdWUpKTsNCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWRkU2NhbGUoZGVzY3JpcHRpb24sIHZhbHVlKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZE5hbWUuZXF1YWxzKCJpbnN0YW5jZV9nZW9tZXRyeSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBnZXRSZW5kZXJhYmxlKGZpZWxkLCBjdXJyZW50KTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZE5hbWUuZXF1YWxzKCJpbnN0YW5jZV9saWdodCIpKSB7DQotICAgICAgICAgICAgICAgICAgICB1cGRhdGVMaWdodChmaWVsZCwgY3VycmVudCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lLmVxdWFscygiaW5zdGFuY2VfY2FtZXJhIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShmaWVsZCwgY3VycmVudCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmllbGROYW1lLmVxdWFscygibm9kZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBnZXROb2RlKGZpZWxkLCBjdXJyZW50LCBpbmRlbnQgKyAiICAgIik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmdldE5leHRTaWJsaW5nKCk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgLy8gVGhpcyB3aWxsIGZpbmQgdGhlIGFjdHVhbCB0ZXh0dXJlIG5vZGUsIHdoaWNoIGlzIHNvbWV0aW1lcyBoaWRkZW4gYmVoaW5kIGEgc2FtcGxlcg0KLSAgICAvLyBhbmQgc29tZXRpbWVzIHJlZmVyZW5jZWQgZGlyZWN0bHkNCi0gICAgVGV4dHVyZTJEIGdldFRleHR1cmUoU3RyaW5nIHNhbXBsZXJOYW1lKSB7DQotICAgICAgICBTdHJpbmcgdGV4TmFtZSA9IHNhbXBsZXJOYW1lOw0KLQ0KLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBpbWFnZSBmaWxlIGlzIGhpZGRlbiBieSBhIHNhbXBsZXIgc3VyZmFjZSBsaW5rIGNvbWJvDQotICAgICAgICBFbGVtZW50IHNhbXBsZXIgPSBtRG9tLmdldEVsZW1lbnRCeUlkKHNhbXBsZXJOYW1lKTsNCi0gICAgICAgIGlmIChzYW1wbGVyICE9IG51bGwpIHsNCi0gICAgICAgICAgICBOb2RlTGlzdCBubCA9IHNhbXBsZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNvdXJjZSIpOw0KLSAgICAgICAgICAgIGlmIChubCAhPSBudWxsICYmIG5sLmdldExlbmd0aCgpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgRWxlbWVudCByZWYgPSAoRWxlbWVudClubC5pdGVtKDApOw0KLSAgICAgICAgICAgICAgICBTdHJpbmcgc3VyZmFjZU5hbWUgPSBnZXRTdHJpbmcocmVmKTsNCi0gICAgICAgICAgICAgICAgaWYgKHN1cmZhY2VOYW1lID09IG51bGwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KLSAgICAgICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgICAgIEVsZW1lbnQgc3VyZmFjZSA9IG1Eb20uZ2V0RWxlbWVudEJ5SWQoc3VyZmFjZU5hbWUpOw0KLSAgICAgICAgICAgICAgICBpZiAoc3VyZmFjZSA9PSBudWxsKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBubCA9IHN1cmZhY2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImluaXRfZnJvbSIpOw0KLSAgICAgICAgICAgICAgICBpZiAobmwgIT0gbnVsbCAmJiBubC5nZXRMZW5ndGgoKSA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICByZWYgPSAoRWxlbWVudClubC5pdGVtKDApOw0KLSAgICAgICAgICAgICAgICAgICAgdGV4TmFtZSA9IGdldFN0cmluZyhyZWYpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy9Mb2cudihUQUcsICJFeHRyYWN0ZWQgdGV4dHVyZSBuYW1lICIgKyB0ZXhOYW1lKTsNCi0gICAgICAgIHJldHVybiBtSW1hZ2VzLmdldCh0ZXhOYW1lKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIGV4dHJhY3RQYXJhbXMoRWxlbWVudCBmeCwgQXJyYXlMaXN0PFNoYWRlclBhcmFtPiBwYXJhbXMpIHsNCi0gICAgICAgIE5vZGUgcGFyYW1Ob2RlID0gZnguZ2V0Rmlyc3RDaGlsZCgpOw0KLSAgICAgICAgd2hpbGUgKHBhcmFtTm9kZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgaWYgKHBhcmFtTm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7DQotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcGFyYW1Ob2RlLmdldE5vZGVOYW1lKCk7DQotICAgICAgICAgICAgICAgIC8vIE5vdyBmaW5kIHdoYXQgdHlwZSBpdCBpcw0KLSAgICAgICAgICAgICAgICBOb2RlIHR5cGVOb2RlID0gcGFyYW1Ob2RlLmdldEZpcnN0Q2hpbGQoKTsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKHR5cGVOb2RlICE9IG51bGwgJiYgdHlwZU5vZGUuZ2V0Tm9kZVR5cGUoKSAhPSBOb2RlLkVMRU1FTlRfTk9ERSkgew0KLSAgICAgICAgICAgICAgICAgICAgdHlwZU5vZGUgPSB0eXBlTm9kZS5nZXROZXh0U2libGluZygpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVR5cGUgPSB0eXBlTm9kZS5nZXROb2RlTmFtZSgpOw0KLSAgICAgICAgICAgICAgICBFbGVtZW50IHR5cGVFbGVtID0gKEVsZW1lbnQpdHlwZU5vZGU7DQotICAgICAgICAgICAgICAgIFNoYWRlclBhcmFtIHNjZW5lUGFyYW0gPSBudWxsOw0KLSAgICAgICAgICAgICAgICBpZiAocGFyYW1UeXBlLmVxdWFscygiY29sb3IiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgRmxvYXQ0UGFyYW0gZjRwID0gbmV3IEZsb2F0NFBhcmFtKG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgRmxvYXQ0IHZhbHVlID0gZ2V0RmxvYXQ0KHR5cGVFbGVtKTsNCi0gICAgICAgICAgICAgICAgICAgIGY0cC5zZXRWYWx1ZSh2YWx1ZSk7DQotICAgICAgICAgICAgICAgICAgICBzY2VuZVBhcmFtID0gZjRwOw0KLSAgICAgICAgICAgICAgICAgICAgLy9Mb2cudihUQUcsICJFeHRyYWN0ZWQgIiArIHNjZW5lUGFyYW0uZ2V0UGFyYW1OYW1lKCkgKyAiIHZhbHVlICIgKyB0b1N0cmluZyh2YWx1ZSkpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtVHlwZS5lcXVhbHMoImZsb2F0IikpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZsb2F0NFBhcmFtIGY0cCA9IG5ldyBGbG9hdDRQYXJhbShuYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIGZsb2F0IHZhbHVlID0gZ2V0RmxvYXQodHlwZUVsZW0pOw0KLSAgICAgICAgICAgICAgICAgICAgZjRwLnNldFZhbHVlKG5ldyBGbG9hdDQodmFsdWUsIHZhbHVlLCB2YWx1ZSwgdmFsdWUpKTsNCi0gICAgICAgICAgICAgICAgICAgIHNjZW5lUGFyYW0gPSBmNHA7DQotICAgICAgICAgICAgICAgICAgICAvL0xvZy52KFRBRywgIkV4dHJhY3RlZCAiICsgc2NlbmVQYXJhbS5nZXRQYXJhbU5hbWUoKSArICIgdmFsdWUgIiArIHZhbHVlKTsNCi0gICAgICAgICAgICAgICAgfSAgZWxzZSBpZiAocGFyYW1UeXBlLmVxdWFscygidGV4dHVyZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc2FtcGxlck5hbWUgPSB0eXBlRWxlbS5nZXRBdHRyaWJ1dGUoInRleHR1cmUiKTsNCi0gICAgICAgICAgICAgICAgICAgIFRleHR1cmUyRCB0ZXggPSBnZXRUZXh0dXJlKHNhbXBsZXJOYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIFRleHR1cmVQYXJhbSB0ZXhQID0gbmV3IFRleHR1cmVQYXJhbShuYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIHRleFAuc2V0VGV4dHVyZSh0ZXgpOw0KLSAgICAgICAgICAgICAgICAgICAgc2NlbmVQYXJhbSA9IHRleFA7DQotICAgICAgICAgICAgICAgICAgICAvL0xvZy52KFRBRywgIkV4dHJhY3RlZCB0ZXh0dXJlICIgKyB0ZXgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChzY2VuZVBhcmFtICE9IG51bGwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hZGQoc2NlbmVQYXJhbSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcGFyYW1Ob2RlID0gcGFyYW1Ob2RlLmdldE5leHRTaWJsaW5nKCk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRNYXRlcmlhbHMoRWxlbWVudCBtYXQpIHsNCi0gICAgICAgIFN0cmluZyBpZCA9IG1hdC5nZXRBdHRyaWJ1dGUoImlkIik7DQotICAgICAgICBOb2RlTGlzdCBubCA9IG1hdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5zdGFuY2VfZWZmZWN0Iik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCAmJiBubC5nZXRMZW5ndGgoKSA9PSAxKSB7DQotICAgICAgICAgICAgRWxlbWVudCByZWYgPSAoRWxlbWVudClubC5pdGVtKDApOw0KLSAgICAgICAgICAgIFN0cmluZyB1cmwgPSByZWYuZ2V0QXR0cmlidXRlKCJ1cmwiKTsNCi0gICAgICAgICAgICBBcnJheUxpc3Q8U2hhZGVyUGFyYW0+IHBhcmFtcyA9IG1FZmZlY3RzUGFyYW1zLmdldCh1cmwuc3Vic3RyaW5nKDEpKTsNCi0gICAgICAgICAgICBtRWZmZWN0c1BhcmFtcy5wdXQoaWQsIHBhcmFtcyk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRHZW9tZXRyaWVzKEVsZW1lbnQgZ2VvKSB7DQotICAgICAgICBTdHJpbmcgaWQgPSBnZW8uZ2V0QXR0cmlidXRlKCJpZCIpOw0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBnZW8uZ2V0QXR0cmlidXRlKCJuYW1lIik7DQotICAgICAgICBpZiAoIWlkLmVxdWFscyhuYW1lKSkgew0KLSAgICAgICAgICAgIG1NZXNoSWROYW1lTWFwLnB1dChpZCwgbmFtZSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSB2b2lkIGNvbnZlcnRFZmZlY3RzKEVsZW1lbnQgZngpIHsNCi0gICAgICAgIFN0cmluZyBpZCA9IGZ4LmdldEF0dHJpYnV0ZSgiaWQiKTsNCi0gICAgICAgIEFycmF5TGlzdDxTaGFkZXJQYXJhbT4gcGFyYW1zID0gbmV3IEFycmF5TGlzdDxTaGFkZXJQYXJhbT4oKTsNCi0NCi0gICAgICAgIE5vZGVMaXN0IG5sID0gZnguZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm5ld3BhcmFtIik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEVsZW1lbnQgZmllbGQgPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICBmaWVsZC5zZXRJZEF0dHJpYnV0ZSgic2lkIiwgdHJ1ZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgbmwgPSBmeC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmxpbm4iKTsNCi0gICAgICAgIGlmIChubCAhPSBudWxsKSB7DQotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG5sLmdldExlbmd0aCgpOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgRWxlbWVudCBmaWVsZCA9IChFbGVtZW50KW5sLml0ZW0oaSk7DQotICAgICAgICAgICAgICAgIC8vTG9nLnYoVEFHLCAiYmxpbm4iKTsNCi0gICAgICAgICAgICAgICAgZXh0cmFjdFBhcmFtcyhmaWVsZCwgcGFyYW1zKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBubCA9IGZ4LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsYW1iZXJ0Iik7DQotICAgICAgICBpZiAobmwgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBubC5nZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEVsZW1lbnQgZmllbGQgPSAoRWxlbWVudClubC5pdGVtKGkpOw0KLSAgICAgICAgICAgICAgICAvL0xvZy52KFRBRywgImxhbWJlcnQiKTsNCi0gICAgICAgICAgICAgICAgZXh0cmFjdFBhcmFtcyhmaWVsZCwgcGFyYW1zKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBubCA9IGZ4LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwaG9uZyIpOw0KLSAgICAgICAgaWYgKG5sICE9IG51bGwpIHsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbmwuZ2V0TGVuZ3RoKCk7IGkrKykgew0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGZpZWxkID0gKEVsZW1lbnQpbmwuaXRlbShpKTsNCi0gICAgICAgICAgICAgICAgLy9Mb2cudihUQUcsICJwaG9uZyIpOw0KLSAgICAgICAgICAgICAgICBleHRyYWN0UGFyYW1zKGZpZWxkLCBwYXJhbXMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1FZmZlY3RzUGFyYW1zLnB1dChpZCwgcGFyYW1zKTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgY29udmVydExpZ2h0KEVsZW1lbnQgbGlnaHQpIHsNCi0gICAgICAgIFN0cmluZyBuYW1lID0gbGlnaHQuZ2V0QXR0cmlidXRlKCJuYW1lIik7DQotICAgICAgICBTdHJpbmcgaWQgPSBsaWdodC5nZXRBdHRyaWJ1dGUoImlkIik7DQotDQotICAgICAgICAvLyBEZXRlcm1pbmUgdHlwZQ0KLSAgICAgICAgU3RyaW5nW10ga25vd25UeXBlcyA9IHsgInBvaW50IiwgInNwb3QiLCAiZGlyZWN0aW9uYWwiIH07DQotICAgICAgICBmaW5hbCBpbnQgUE9JTlRfTElHSFQgPSAwOw0KLSAgICAgICAgZmluYWwgaW50IFNQT1RfTElHSFQgPSAxOw0KLSAgICAgICAgZmluYWwgaW50IERJUl9MSUdIVCA9IDI7DQotICAgICAgICBpbnQgdHlwZSA9IC0xOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrbm93blR5cGVzLmxlbmd0aDsgaSArKykgew0KLSAgICAgICAgICAgIE5vZGVMaXN0IG5sID0gbGlnaHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoa25vd25UeXBlc1tpXSk7DQotICAgICAgICAgICAgaWYgKG5sICE9IG51bGwgJiYgbmwuZ2V0TGVuZ3RoKCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICB0eXBlID0gaTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgLy9Mb2cudihUQUcsICJGb3VuZCBMaWdodCBUeXBlICIgKyB0eXBlKTsNCi0NCi0gICAgICAgIExpZ2h0QmFzZSBzY2VuZUxpZ2h0ID0gbnVsbDsNCi0gICAgICAgIHN3aXRjaCAodHlwZSkgew0KLSAgICAgICAgY2FzZSBQT0lOVF9MSUdIVDoNCi0gICAgICAgICAgICBzY2VuZUxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgU1BPVF9MSUdIVDogLy8gVE9ETzogZmluaXNoIGxpZ2h0IHR5cGVzDQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIERJUl9MSUdIVDogLy8gVE9ETzogZmluaXNoIGxpZ2h0IHR5cGVzDQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotDQotICAgICAgICBpZiAoc2NlbmVMaWdodCA9PSBudWxsKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgRmxvYXQzIGNvbG9yID0gZ2V0RmxvYXQzKGxpZ2h0LCAiY29sb3IiKTsNCi0gICAgICAgIHNjZW5lTGlnaHQuc2V0Q29sb3IoY29sb3IueCwgY29sb3IueSwgY29sb3Iueik7DQotICAgICAgICBzY2VuZUxpZ2h0LnNldE5hbWUobmFtZSk7DQotICAgICAgICBtU2NlbmUuYXBwZW5kTGlnaHQoc2NlbmVMaWdodCk7DQotICAgICAgICBtTGlnaHRzLnB1dChpZCwgc2NlbmVMaWdodCk7DQotDQotICAgICAgICAvL0xvZy52KFRBRywgIkxpZ2h0ICIgKyBuYW1lICsgIiBjb2xvciAiICsgdG9TdHJpbmcoY29sb3IpKTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgY29udmVydENhbWVyYShFbGVtZW50IGNhbWVyYSkgew0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjYW1lcmEuZ2V0QXR0cmlidXRlKCJuYW1lIik7DQotICAgICAgICBTdHJpbmcgaWQgPSBjYW1lcmEuZ2V0QXR0cmlidXRlKCJpZCIpOw0KLSAgICAgICAgZmxvYXQgZm92ID0gMzAuMGY7DQotICAgICAgICBpZiAoZ2V0U3RyaW5nKGNhbWVyYSwgInlmb3YiKSAhPSBudWxsKSB7DQotICAgICAgICAgICAgZm92ID0gZ2V0RmxvYXQoY2FtZXJhLCAieWZvdiIpOw0KLSAgICAgICAgfSBlbHNlIGlmKGdldFN0cmluZyhjYW1lcmEsICJ4Zm92IikgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGZsb2F0IGFzcGVjdCA9IGdldEZsb2F0KGNhbWVyYSwgImFzcGVjdF9yYXRpbyIpOw0KLSAgICAgICAgICAgIGZvdiA9IGdldEZsb2F0KGNhbWVyYSwgInhmb3YiKSAvIGFzcGVjdDsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZsb2F0IG5lYXIgPSBnZXRGbG9hdChjYW1lcmEsICJ6bmVhciIpOw0KLSAgICAgICAgZmxvYXQgZmFyID0gZ2V0RmxvYXQoY2FtZXJhLCAiemZhciIpOw0KLQ0KLSAgICAgICAgQ2FtZXJhIHNjZW5lQ2FtZXJhID0gbmV3IENhbWVyYSgpOw0KLSAgICAgICAgc2NlbmVDYW1lcmEuc2V0Rk9WKGZvdik7DQotICAgICAgICBzY2VuZUNhbWVyYS5zZXROZWFyKG5lYXIpOw0KLSAgICAgICAgc2NlbmVDYW1lcmEuc2V0RmFyKGZhcik7DQotICAgICAgICBzY2VuZUNhbWVyYS5zZXROYW1lKG5hbWUpOw0KLSAgICAgICAgbVNjZW5lLmFwcGVuZENhbWVyYShzY2VuZUNhbWVyYSk7DQotICAgICAgICBtQ2FtZXJhcy5wdXQoaWQsIHNjZW5lQ2FtZXJhKTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIHZvaWQgY29udmVydEltYWdlKEVsZW1lbnQgaW1nKSB7DQotICAgICAgICBTdHJpbmcgbmFtZSA9IGltZy5nZXRBdHRyaWJ1dGUoIm5hbWUiKTsNCi0gICAgICAgIFN0cmluZyBpZCA9IGltZy5nZXRBdHRyaWJ1dGUoImlkIik7DQotICAgICAgICBTdHJpbmcgZmlsZSA9IGdldFN0cmluZyhpbWcsICJpbml0X2Zyb20iKTsNCi0NCi0gICAgICAgIFRleHR1cmUyRCB0ZXggPSBuZXcgVGV4dHVyZTJEKCk7DQotICAgICAgICB0ZXguc2V0RmlsZU5hbWUoZmlsZSk7DQotICAgICAgICB0ZXguc2V0RmlsZURpcihtUm9vdERpcik7DQotICAgICAgICBtU2NlbmUuYXBwZW5kVGV4dHVyZXModGV4KTsNCi0gICAgICAgIG1JbWFnZXMucHV0KGlkLCB0ZXgpOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgdm9pZCBnZXRTY2VuZShFbGVtZW50IHNjZW5lKSB7DQotICAgICAgICBTdHJpbmcgbmFtZSA9IHNjZW5lLmdldEF0dHJpYnV0ZSgibmFtZSIpOw0KLSAgICAgICAgU3RyaW5nIGlkID0gc2NlbmUuZ2V0QXR0cmlidXRlKCJpZCIpOw0KLQ0KLSAgICAgICAgTm9kZSBjaGlsZE5vZGUgPSBzY2VuZS5nZXRGaXJzdENoaWxkKCk7DQotICAgICAgICB3aGlsZSAoY2hpbGROb2RlICE9IG51bGwpIHsNCi0gICAgICAgICAgICBpZiAoY2hpbGROb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUpIHsNCi0gICAgICAgICAgICAgICAgU3RyaW5nIGluZGVudCA9ICIiOw0KLSAgICAgICAgICAgICAgICBnZXROb2RlKChFbGVtZW50KWNoaWxkTm9kZSwgbnVsbCwgaW5kZW50KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2hpbGROb2RlID0gY2hpbGROb2RlLmdldE5leHRTaWJsaW5nKCk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0U3RyaW5nKEVsZW1lbnQgZWxlbSwgU3RyaW5nIG5hbWUpIHsNCi0gICAgICAgIFN0cmluZyB0ZXh0ID0gbnVsbDsNCi0gICAgICAgIE5vZGVMaXN0IG5sID0gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZShuYW1lKTsNCi0gICAgICAgIGlmIChubCAhPSBudWxsICYmIG5sLmdldExlbmd0aCgpICE9IDApIHsNCi0gICAgICAgICAgICB0ZXh0ID0gKChFbGVtZW50KW5sLml0ZW0oMCkpLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiB0ZXh0Ow0KLSAgICB9DQotDQotICAgIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZyhFbGVtZW50IGVsZW0pIHsNCi0gICAgICAgIFN0cmluZyB0ZXh0ID0gbnVsbDsNCi0gICAgICAgIHRleHQgPSBlbGVtLmdldEZpcnN0Q2hpbGQoKS5nZXROb2RlVmFsdWUoKTsNCi0gICAgICAgIHJldHVybiB0ZXh0Ow0KLSAgICB9DQotDQotICAgIHByaXZhdGUgaW50IGdldEludChFbGVtZW50IGVsZW0sIFN0cmluZyBuYW1lKSB7DQotICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChnZXRTdHJpbmcoZWxlbSwgbmFtZSkpOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgZmxvYXQgZ2V0RmxvYXQoRWxlbWVudCBlbGVtLCBTdHJpbmcgbmFtZSkgew0KLSAgICAgICAgcmV0dXJuIEZsb2F0LnBhcnNlRmxvYXQoZ2V0U3RyaW5nKGVsZW0sIG5hbWUpKTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIGZsb2F0IGdldEZsb2F0KEVsZW1lbnQgZWxlbSkgew0KLSAgICAgICAgcmV0dXJuIEZsb2F0LnBhcnNlRmxvYXQoZ2V0U3RyaW5nKGVsZW0pKTsNCi0gICAgfQ0KLQ0KLSAgICBwcml2YXRlIEZsb2F0MyBwYXJzZUZsb2F0MyhTdHJpbmcgdmFsdWVTdHJpbmcpIHsNCi0gICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodmFsdWVTdHJpbmcpOw0KLSAgICAgICAgZmxvYXQgeCA9IEZsb2F0LnBhcnNlRmxvYXQoc3QubmV4dFRva2VuKCkpOw0KLSAgICAgICAgZmxvYXQgeSA9IEZsb2F0LnBhcnNlRmxvYXQoc3QubmV4dFRva2VuKCkpOw0KLSAgICAgICAgZmxvYXQgeiA9IEZsb2F0LnBhcnNlRmxvYXQoc3QubmV4dFRva2VuKCkpOw0KLSAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMoeCwgeSwgeik7DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSBGbG9hdDQgcGFyc2VGbG9hdDQoU3RyaW5nIHZhbHVlU3RyaW5nKSB7DQotICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlU3RyaW5nKTsNCi0gICAgICAgIGZsb2F0IHggPSBGbG9hdC5wYXJzZUZsb2F0KHN0Lm5leHRUb2tlbigpKTsNCi0gICAgICAgIGZsb2F0IHkgPSBGbG9hdC5wYXJzZUZsb2F0KHN0Lm5leHRUb2tlbigpKTsNCi0gICAgICAgIGZsb2F0IHogPSBGbG9hdC5wYXJzZUZsb2F0KHN0Lm5leHRUb2tlbigpKTsNCi0gICAgICAgIGZsb2F0IHcgPSBGbG9hdC5wYXJzZUZsb2F0KHN0Lm5leHRUb2tlbigpKTsNCi0gICAgICAgIHJldHVybiBuZXcgRmxvYXQ0KHgsIHksIHosIHcpOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgRmxvYXQzIGdldEZsb2F0MyhFbGVtZW50IGVsZW0sIFN0cmluZyBuYW1lKSB7DQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSBnZXRTdHJpbmcoZWxlbSwgbmFtZSk7DQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdDModmFsdWVTdHJpbmcpOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgRmxvYXQ0IGdldEZsb2F0NChFbGVtZW50IGVsZW0sIFN0cmluZyBuYW1lKSB7DQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmcgPSBnZXRTdHJpbmcoZWxlbSwgbmFtZSk7DQotICAgICAgICByZXR1cm4gcGFyc2VGbG9hdDQodmFsdWVTdHJpbmcpOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgRmxvYXQzIGdldEZsb2F0MyhFbGVtZW50IGVsZW0pIHsNCi0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZyA9IGdldFN0cmluZyhlbGVtKTsNCi0gICAgICAgIHJldHVybiBwYXJzZUZsb2F0Myh2YWx1ZVN0cmluZyk7DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSBGbG9hdDQgZ2V0RmxvYXQ0KEVsZW1lbnQgZWxlbSkgew0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nID0gZ2V0U3RyaW5nKGVsZW0pOw0KLSAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQ0KHZhbHVlU3RyaW5nKTsNCi0gICAgfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0NvbGxhZGFTY2VuZS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9Db2xsYWRhU2NlbmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxMDc1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0NvbGxhZGFTY2VuZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24uTWlwbWFwQ29udHJvbDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkJ1aWxkZXI7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRm9udC5TdHlsZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtLlRleHR1cmVUeXBlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5EZXB0aEZ1bmM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lTWFuYWdlci5TY2VuZUxvYWRlZENhbGxiYWNrOwotCi0KLXB1YmxpYyBjbGFzcyBDb2xsYWRhU2NlbmUgewotCi0gICAgcHJpdmF0ZSBTdHJpbmcgbW9kZWxOYW1lOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiQ29sbGFkYVNjZW5lIjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBTVEFURV9MQVNUX0ZPQ1VTID0gMTsKLSAgICBib29sZWFuIG1Mb2FkRnJvbVNEID0gZmFsc2U7Ci0KLSAgICBTY2VuZUxvYWRlZENhbGxiYWNrIG1DYWxsYmFjazsKLQotICAgIHB1YmxpYyBDb2xsYWRhU2NlbmUoU3RyaW5nIG5hbWUsIFNjZW5lTG9hZGVkQ2FsbGJhY2sgY2IpIHsKLSAgICAgICAgbW9kZWxOYW1lID0gbmFtZTsKLSAgICAgICAgbUNhbGxiYWNrID0gY2I7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLQotICAgICAgICBtTG9hZEZyb21TRCA9IFNjZW5lTWFuYWdlci5pc1NEQ2FyZFBhdGgobW9kZWxOYW1lKTsKLQotICAgICAgICBuZXcgQ29sbGFkYUxvYWRlclRhc2soKS5leGVjdXRlKG1vZGVsTmFtZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZXNvdXJjZXMgbVJlczsKLSAgICBwcml2YXRlIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBTY2VuZSBtQWN0aXZlU2NlbmU7Ci0KLSAgICBwcml2YXRlIGNsYXNzIENvbGxhZGFMb2FkZXJUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFN0cmluZywgVm9pZCwgQm9vbGVhbj4gewotICAgICAgICBDb2xsYWRhUGFyc2VyIHNjZW5lU291cmNlOwotICAgICAgICBwcm90ZWN0ZWQgQm9vbGVhbiBkb0luQmFja2dyb3VuZChTdHJpbmcuLi4gbmFtZXMpIHsKLSAgICAgICAgICAgIFN0cmluZyByb290RGlyID0gbmFtZXNbMF0uc3Vic3RyaW5nKDAsIG5hbWVzWzBdLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKLSAgICAgICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIHNjZW5lU291cmNlID0gbmV3IENvbGxhZGFQYXJzZXIoKTsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtTG9hZEZyb21TRCkgewotICAgICAgICAgICAgICAgICAgICBpcyA9IG1SZXMuZ2V0QXNzZXRzKCkub3BlbihuYW1lc1swXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUobmFtZXNbMF0pOwotICAgICAgICAgICAgICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oZikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBMb2cuZShUQUcsICJDb3VsZCBub3Qgb3BlbiBjb2xsYWRhIGZpbGUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIExvZy52KCJUSU1FUiIsICJTdHJlYW0gbG9hZCB0aW1lOiAiICsgKGVuZCAtIHN0YXJ0KSk7Ci0KLSAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICBzY2VuZVNvdXJjZS5pbml0KGlzLCByb290RGlyKTsKLSAgICAgICAgICAgIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgTG9nLnYoIlRJTUVSIiwgIkNvbGxhZGEgcGFyc2UgdGltZTogIiArIChlbmQgLSBzdGFydCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0RXhlY3V0ZShCb29sZWFuIHJlc3VsdCkgewotICAgICAgICAgICAgbUFjdGl2ZVNjZW5lID0gc2NlbmVTb3VyY2UuZ2V0U2NlbmUoKTsKLSAgICAgICAgICAgIGlmIChtQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1DYWxsYmFjay5tTG9hZGVkU2NlbmUgPSBtQWN0aXZlU2NlbmU7Ci0gICAgICAgICAgICAgICAgbUNhbGxiYWNrLnJ1bigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgc2hvcnROYW1lID0gbW9kZWxOYW1lLnN1YnN0cmluZygwLCBtb2RlbE5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0gICAgICAgICAgICBuZXcgQTNETG9hZGVyVGFzaygpLmV4ZWN1dGUoc2hvcnROYW1lICsgIi5hM2QiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgQTNETG9hZGVyVGFzayBleHRlbmRzIEFzeW5jVGFzazxTdHJpbmcsIFZvaWQsIEJvb2xlYW4+IHsKLSAgICAgICAgcHJvdGVjdGVkIEJvb2xlYW4gZG9JbkJhY2tncm91bmQoU3RyaW5nLi4uIG5hbWVzKSB7Ci0gICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICBGaWxlQTNEIG1vZGVsOwotICAgICAgICAgICAgaWYgKCFtTG9hZEZyb21TRCkgewotICAgICAgICAgICAgICAgIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tQXNzZXQobVJTLCBtUmVzLmdldEFzc2V0cygpLCBuYW1lc1swXSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tRmlsZShtUlMsIG5hbWVzWzBdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBudW1Nb2RlbHMgPSBtb2RlbC5nZXRJbmRleEVudHJ5Q291bnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTW9kZWxzOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgRmlsZUEzRC5JbmRleEVudHJ5IGVudHJ5ID0gbW9kZWwuZ2V0SW5kZXhFbnRyeShpKTsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCAmJiBlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBGaWxlQTNELkVudHJ5VHlwZS5NRVNIKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1BY3RpdmVTY2VuZS5tZXNoTG9hZGVkKGVudHJ5LmdldE1lc2goKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIExvZy52KCJUSU1FUiIsICJBM0QgbG9hZCB0aW1lOiAiICsgKGVuZCAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBvblBvc3RFeGVjdXRlKEJvb2xlYW4gcmVzdWx0KSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvQ29tcG91bmRUcmFuc2Zvcm0uamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvQ29tcG91bmRUcmFuc2Zvcm0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3NGIxNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0NvbXBvdW5kVHJhbnNmb3JtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lTWFuYWdlcjsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRmxvYXQzOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIENvbXBvdW5kVHJhbnNmb3JtIGV4dGVuZHMgVHJhbnNmb3JtIHsKLQotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50IHsKLSAgICAgICAgU3RyaW5nIG1OYW1lOwotICAgICAgICBDb21wb3VuZFRyYW5zZm9ybSBtUGFyZW50OwotICAgICAgICBpbnQgbVBhcmVudEluZGV4OwotICAgICAgICBwcm90ZWN0ZWQgU2NyaXB0RmllbGRfVHJhbnNmb3JtQ29tcG9uZW50X3MuSXRlbSBtRGF0YTsKLQotICAgICAgICBDb21wb25lbnQoaW50IHR5cGUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgICAgICBtRGF0YSA9IG5ldyBTY3JpcHRGaWVsZF9UcmFuc2Zvcm1Db21wb25lbnRfcy5JdGVtKCk7Ci0gICAgICAgICAgICBtRGF0YS50eXBlID0gdHlwZTsKLSAgICAgICAgICAgIG1OYW1lID0gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0TmFtZUFsbG9jKCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBTY2VuZU1hbmFnZXIuZ2V0UlMoKTsKLSAgICAgICAgICAgIGlmIChtRGF0YS5uYW1lICE9IG51bGwpICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbURhdGEubmFtZSA9IFNjZW5lTWFuYWdlci5nZXRDYWNoZWRBbGxvYyhnZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKG1EYXRhLm5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1EYXRhLm5hbWUgPSBTY2VuZU1hbmFnZXIuZ2V0U3RyaW5nQXNBbGxvY2F0aW9uKHJzLCBnZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIFNjZW5lTWFuYWdlci5jYWNoZUFsbG9jKGdldE5hbWUoKSwgbURhdGEubmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTY3JpcHRGaWVsZF9UcmFuc2Zvcm1Db21wb25lbnRfcy5JdGVtIGdldFJTRGF0YSgpIHsKLSAgICAgICAgICAgIHNldE5hbWVBbGxvYygpOwotICAgICAgICAgICAgcmV0dXJuIG1EYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlKCkgewotICAgICAgICAgICAgaWYgKG1QYXJlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1QYXJlbnQudXBkYXRlUlNDb21wb25lbnQodGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gbU5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRyYW5zbGF0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7Ci0gICAgICAgIHB1YmxpYyBUcmFuc2xhdGVDb21wb25lbnQoU3RyaW5nIG5hbWUsIEZsb2F0MyB0cmFuc2xhdGUpIHsKLSAgICAgICAgICAgIHN1cGVyKFNjcmlwdENfZXhwb3J0LmNvbnN0X1RyYW5zZm9ybV9UUkFOU0xBVEUsIG5hbWUpOwotICAgICAgICAgICAgc2V0VmFsdWUodHJhbnNsYXRlKTsKLSAgICAgICAgfQotICAgICAgICBwdWJsaWMgRmxvYXQzIGdldFZhbHVlKCkgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMobURhdGEudmFsdWUueCwgbURhdGEudmFsdWUueSwgbURhdGEudmFsdWUueik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoRmxvYXQzIHZhbCkgewotICAgICAgICAgICAgbURhdGEudmFsdWUueCA9IHZhbC54OwotICAgICAgICAgICAgbURhdGEudmFsdWUueSA9IHZhbC55OwotICAgICAgICAgICAgbURhdGEudmFsdWUueiA9IHZhbC56OwotICAgICAgICAgICAgdXBkYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFJvdGF0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7Ci0gICAgICAgIHB1YmxpYyBSb3RhdGVDb21wb25lbnQoU3RyaW5nIG5hbWUsIEZsb2F0MyBheGlzLCBmbG9hdCBhbmdsZSkgewotICAgICAgICAgICAgc3VwZXIoU2NyaXB0Q19leHBvcnQuY29uc3RfVHJhbnNmb3JtX1JPVEFURSwgbmFtZSk7Ci0gICAgICAgICAgICBzZXRBeGlzKGF4aXMpOwotICAgICAgICAgICAgc2V0QW5nbGUoYW5nbGUpOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBGbG9hdDMgZ2V0QXhpcygpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzKG1EYXRhLnZhbHVlLngsIG1EYXRhLnZhbHVlLnksIG1EYXRhLnZhbHVlLnopOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBmbG9hdCBnZXRBbmdsZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBtRGF0YS52YWx1ZS53OwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNldEF4aXMoRmxvYXQzIHZhbCkgewotICAgICAgICAgICAgbURhdGEudmFsdWUueCA9IHZhbC54OwotICAgICAgICAgICAgbURhdGEudmFsdWUueSA9IHZhbC55OwotICAgICAgICAgICAgbURhdGEudmFsdWUueiA9IHZhbC56OwotICAgICAgICAgICAgdXBkYXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0QW5nbGUoZmxvYXQgdmFsKSB7Ci0gICAgICAgICAgICBtRGF0YS52YWx1ZS53ID0gdmFsOwotICAgICAgICAgICAgdXBkYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNjYWxlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHsKLSAgICAgICAgcHVibGljIFNjYWxlQ29tcG9uZW50KFN0cmluZyBuYW1lLCBGbG9hdDMgc2NhbGUpIHsKLSAgICAgICAgICAgIHN1cGVyKFNjcmlwdENfZXhwb3J0LmNvbnN0X1RyYW5zZm9ybV9TQ0FMRSwgbmFtZSk7Ci0gICAgICAgICAgICBzZXRWYWx1ZShzY2FsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIEZsb2F0MyBnZXRWYWx1ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQzKG1EYXRhLnZhbHVlLngsIG1EYXRhLnZhbHVlLnksIG1EYXRhLnZhbHVlLnopOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKEZsb2F0MyB2YWwpIHsKLSAgICAgICAgICAgIG1EYXRhLnZhbHVlLnggPSB2YWwueDsKLSAgICAgICAgICAgIG1EYXRhLnZhbHVlLnkgPSB2YWwueTsKLSAgICAgICAgICAgIG1EYXRhLnZhbHVlLnogPSB2YWwuejsKLSAgICAgICAgICAgIHVwZGF0ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU2NyaXB0RmllbGRfVHJhbnNmb3JtQ29tcG9uZW50X3MgbUNvbXBvbmVudEZpZWxkOwotICAgIHB1YmxpYyBBcnJheUxpc3Q8Q29tcG9uZW50PiBtVHJhbnNmb3JtQ29tcG9uZW50czsKLQotICAgIHB1YmxpYyBDb21wb3VuZFRyYW5zZm9ybSgpIHsKLSAgICAgICAgbVRyYW5zZm9ybUNvbXBvbmVudHMgPSBuZXcgQXJyYXlMaXN0PENvbXBvbmVudD4oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHJhbnNsYXRlQ29tcG9uZW50IGFkZFRyYW5zbGF0ZShTdHJpbmcgbmFtZSwgRmxvYXQzIHRyYW5zbGF0ZSkgewotICAgICAgICBUcmFuc2xhdGVDb21wb25lbnQgYyA9IG5ldyBUcmFuc2xhdGVDb21wb25lbnQobmFtZSwgdHJhbnNsYXRlKTsKLSAgICAgICAgYWRkQ29tcG9uZW50KGMpOwotICAgICAgICByZXR1cm4gYzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUm90YXRlQ29tcG9uZW50IGFkZFJvdGF0ZShTdHJpbmcgbmFtZSwgRmxvYXQzIGF4aXMsIGZsb2F0IGFuZ2xlKSB7Ci0gICAgICAgIFJvdGF0ZUNvbXBvbmVudCBjID0gbmV3IFJvdGF0ZUNvbXBvbmVudChuYW1lLCBheGlzLCBhbmdsZSk7Ci0gICAgICAgIGFkZENvbXBvbmVudChjKTsKLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotCi0gICAgcHVibGljIFNjYWxlQ29tcG9uZW50IGFkZFNjYWxlKFN0cmluZyBuYW1lLCBGbG9hdDMgc2NhbGUpIHsKLSAgICAgICAgU2NhbGVDb21wb25lbnQgYyA9IG5ldyBTY2FsZUNvbXBvbmVudChuYW1lLCBzY2FsZSk7Ci0gICAgICAgIGFkZENvbXBvbmVudChjKTsKLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkQ29tcG9uZW50KENvbXBvbmVudCBjKSB7Ci0gICAgICAgIGlmIChjLm1QYXJlbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVHJhbnNmb3JtIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBzaGFyZWQiKTsKLSAgICAgICAgfQotICAgICAgICBjLm1QYXJlbnQgPSB0aGlzOwotICAgICAgICBjLm1QYXJlbnRJbmRleCA9IG1UcmFuc2Zvcm1Db21wb25lbnRzLnNpemUoKTsKLSAgICAgICAgbVRyYW5zZm9ybUNvbXBvbmVudHMuYWRkKGMpOwotICAgICAgICB1cGRhdGVSU0NvbXBvbmVudEFsbG9jYXRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb21wb25lbnQoaW50IGluZGV4LCBDb21wb25lbnQgYykgewotICAgICAgICBpZiAoYy5tUGFyZW50ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRyYW5zZm9ybSBjb21wb25lbnRzIG1heSBub3QgYmUgc2hhcmVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZGV4ID49IG1UcmFuc2Zvcm1Db21wb25lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBjb21wb25lbnQgaW5kZXgiKTsKLSAgICAgICAgfQotICAgICAgICBjLm1QYXJlbnQgPSB0aGlzOwotICAgICAgICBjLm1QYXJlbnRJbmRleCA9IGluZGV4OwotICAgICAgICBtVHJhbnNmb3JtQ29tcG9uZW50cy5zZXQoaW5kZXgsIGMpOwotICAgICAgICB1cGRhdGVSU0NvbXBvbmVudChjKTsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVJTQ29tcG9uZW50KENvbXBvbmVudCBjKSB7Ci0gICAgICAgIGlmIChtRmllbGQgPT0gbnVsbCB8fCBtQ29tcG9uZW50RmllbGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG1Db21wb25lbnRGaWVsZC5zZXQoYy5nZXRSU0RhdGEoKSwgYy5tUGFyZW50SW5kZXgsIHRydWUpOwotICAgICAgICBtRmllbGQuc2V0X2lzRGlydHkoMCwgMSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCB1cGRhdGVSU0NvbXBvbmVudEFsbG9jYXRpb24oKSB7Ci0gICAgICAgIGlmIChtRmllbGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGluaXRMb2NhbERhdGEoKTsKLQotICAgICAgICBtRmllbGQuc2V0X2NvbXBvbmVudHMoMCwgbVRyYW5zZm9ybURhdGEuY29tcG9uZW50cywgZmFsc2UpOwotICAgICAgICBtRmllbGQuc2V0X2lzRGlydHkoMCwgMSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0TG9jYWxEYXRhKCkgewotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBpbnQgbnVtQ29tcG9uZW5ldHMgPSBtVHJhbnNmb3JtQ29tcG9uZW50cy5zaXplKCk7Ci0gICAgICAgIGlmIChudW1Db21wb25lbmV0cyA+IDApIHsKLSAgICAgICAgICAgIG1Db21wb25lbnRGaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9UcmFuc2Zvcm1Db21wb25lbnRfcyhycywgbnVtQ29tcG9uZW5ldHMpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db21wb25lbmV0czsgaSArKykgewotICAgICAgICAgICAgICAgIENvbXBvbmVudCBpdGggPSBtVHJhbnNmb3JtQ29tcG9uZW50cy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgbUNvbXBvbmVudEZpZWxkLnNldChpdGguZ2V0UlNEYXRhKCksIGksIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1Db21wb25lbnRGaWVsZC5jb3B5QWxsKCk7Ci0KLSAgICAgICAgICAgIG1UcmFuc2Zvcm1EYXRhLmNvbXBvbmVudHMgPSBtQ29tcG9uZW50RmllbGQuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvRmxvYXQ0UGFyYW0uamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvRmxvYXQ0UGFyYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUwMjQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0Zsb2F0NFBhcmFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5GbG9hdDQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdEdMOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIEZsb2F0NFBhcmFtIGV4dGVuZHMgU2hhZGVyUGFyYW0gewotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBUQUcgPSAiRmxvYXQ0UGFyYW0iOwotCi0gICAgTGlnaHRCYXNlIG1MaWdodDsKLQotICAgIHB1YmxpYyBGbG9hdDRQYXJhbShTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQ0UGFyYW0oU3RyaW5nIG5hbWUsIGZsb2F0IHgpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHNldCh4LCAwLCAwLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQ0UGFyYW0oU3RyaW5nIG5hbWUsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHNldCh4LCB5LCAwLCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQ0UGFyYW0oU3RyaW5nIG5hbWUsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHNldCh4LCB5LCB6LCAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmxvYXQ0UGFyYW0oU3RyaW5nIG5hbWUsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHNldCh4LCB5LCB6LCB3KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSB7Ci0gICAgICAgIG1EYXRhLmZsb2F0X3ZhbHVlLnggPSB4OwotICAgICAgICBtRGF0YS5mbG9hdF92YWx1ZS55ID0geTsKLSAgICAgICAgbURhdGEuZmxvYXRfdmFsdWUueiA9IHo7Ci0gICAgICAgIG1EYXRhLmZsb2F0X3ZhbHVlLncgPSB3OwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfZmxvYXRfdmFsdWUoMCwgbURhdGEuZmxvYXRfdmFsdWUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGluY1RpbWVzdGFtcCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFZhbHVlKEZsb2F0NCB2KSB7Ci0gICAgICAgIHNldCh2LngsIHYueSwgdi56LCB2LncpOwotICAgIH0KLQotICAgIHB1YmxpYyBGbG9hdDQgZ2V0VmFsdWUoKSB7Ci0gICAgICAgIHJldHVybiBtRGF0YS5mbG9hdF92YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaWdodChMaWdodEJhc2UgbCkgewotICAgICAgICBtTGlnaHQgPSBsOwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EYXRhLmxpZ2h0ID0gbUxpZ2h0LmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfbGlnaHQoMCwgbURhdGEubGlnaHQsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGluY1RpbWVzdGFtcCgpOwotICAgIH0KLQotICAgIGJvb2xlYW4gZmluZExpZ2h0KFN0cmluZyBwcm9wZXJ0eSkgewotICAgICAgICBTdHJpbmcgaW5kZXhTdHIgPSBtUGFyYW1OYW1lLnN1YnN0cmluZyhwcm9wZXJ0eS5sZW5ndGgoKSArIDEpOwotICAgICAgICBpZiAoaW5kZXhTdHIgPT0gbnVsbCkgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBsaWdodCBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW5kZXggPSBJbnRlZ2VyLnBhcnNlSW50KGluZGV4U3RyKTsKLSAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgU2NlbmUgcGFyZW50U2NlbmUgPSBTY2VuZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRBY3RpdmVTY2VuZSgpOwotICAgICAgICBBcnJheUxpc3Q8TGlnaHRCYXNlPiBhbGxMaWdodHMgPSBwYXJlbnRTY2VuZS5nZXRMaWdodHMoKTsKLSAgICAgICAgaWYgKGluZGV4ID49IGFsbExpZ2h0cy5zaXplKCkpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtTGlnaHQgPSBhbGxMaWdodHMuZ2V0KGluZGV4KTsKLSAgICAgICAgaWYgKG1MaWdodCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaW50IGdldFR5cGVGcm9tTmFtZSgpIHsKLSAgICAgICAgaW50IHBhcmFtVHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX0ZMT0FUNF9EQVRBOwotICAgICAgICBpZiAobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKGNhbWVyYVBvcykpIHsKLSAgICAgICAgICAgIHBhcmFtVHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX0ZMT0FUNF9DQU1FUkFfUE9TOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKGNhbWVyYURpcikpIHsKLSAgICAgICAgICAgIHBhcmFtVHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX0ZMT0FUNF9DQU1FUkFfRElSOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5zdGFydHNXaXRoKGxpZ2h0Q29sb3IpICYmIGZpbmRMaWdodChsaWdodENvbG9yKSkgewotICAgICAgICAgICAgcGFyYW1UeXBlID0gU2NyaXB0Q19leHBvcnQuY29uc3RfU2hhZGVyUGFyYW1fRkxPQVQ0X0xJR0hUX0NPTE9SOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5zdGFydHNXaXRoKGxpZ2h0UG9zKSAmJiBmaW5kTGlnaHQobGlnaHRQb3MpKSB7Ci0gICAgICAgICAgICBwYXJhbVR5cGUgPSBTY3JpcHRDX2V4cG9ydC5jb25zdF9TaGFkZXJQYXJhbV9GTE9BVDRfTElHSFRfUE9TOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5zdGFydHNXaXRoKGxpZ2h0RGlyKSAmJiBmaW5kTGlnaHQobGlnaHREaXIpKSB7Ci0gICAgICAgICAgICBwYXJhbVR5cGUgPSBTY3JpcHRDX2V4cG9ydC5jb25zdF9TaGFkZXJQYXJhbV9GTE9BVDRfTElHSFRfRElSOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJhbVR5cGU7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0TG9jYWxEYXRhKCkgewotICAgICAgICBtRGF0YS50eXBlID0gZ2V0VHlwZUZyb21OYW1lKCk7Ci0gICAgICAgIGlmIChtQ2FtZXJhICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EYXRhLmNhbWVyYSA9IG1DYW1lcmEuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTGlnaHQgIT0gbnVsbCkgewotICAgICAgICAgICAgbURhdGEubGlnaHQgPSBtTGlnaHQuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvRnJhZ21lbnRTaGFkZXIuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvRnJhZ21lbnRTaGFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGE0NjhkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL0ZyYWdtZW50U2hhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlRleHR1cmVCYXNlOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtRnJhZ21lbnQuQnVpbGRlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBGcmFnbWVudFNoYWRlciBleHRlbmRzIFNoYWRlciB7Ci0gICAgUHJvZ3JhbUZyYWdtZW50IG1Qcm9ncmFtOwotICAgIFNjcmlwdEZpZWxkX0ZyYWdtZW50U2hhZGVyX3MgbUZpZWxkOwotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWlsZGVyIHsKLQotICAgICAgICBGcmFnbWVudFNoYWRlciBtU2hhZGVyOwotICAgICAgICBQcm9ncmFtRnJhZ21lbnQuQnVpbGRlciBtQnVpbGRlcjsKLQotICAgICAgICBwdWJsaWMgQnVpbGRlcihSZW5kZXJTY3JpcHRHTCBycykgewotICAgICAgICAgICAgbVNoYWRlciA9IG5ldyBGcmFnbWVudFNoYWRlcigpOwotICAgICAgICAgICAgbUJ1aWxkZXIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50LkJ1aWxkZXIocnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U2hhZGVyKFJlc291cmNlcyByZXNvdXJjZXMsIGludCByZXNvdXJjZUlEKSB7Ci0gICAgICAgICAgICBtQnVpbGRlci5zZXRTaGFkZXIocmVzb3VyY2VzLCByZXNvdXJjZUlEKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U2hhZGVyKFN0cmluZyBjb2RlKSB7Ci0gICAgICAgICAgICBtQnVpbGRlci5zZXRTaGFkZXIoY29kZSk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldE9iamVjdENvbnN0KFR5cGUgdHlwZSkgewotICAgICAgICAgICAgbVNoYWRlci5tUGVyT2JqQ29uc3RhbnRzID0gdHlwZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgc2V0U2hhZGVyQ29uc3QoVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBtU2hhZGVyLm1QZXJTaGFkZXJDb25zdGFudHMgPSB0eXBlOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRTaGFkZXJUZXh0dXJlKFByb2dyYW0uVGV4dHVyZVR5cGUgdGV4VHlwZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgIG1TaGFkZXIubVNoYWRlclRleHR1cmVOYW1lcy5hZGQobmFtZSk7Ci0gICAgICAgICAgICBtU2hhZGVyLm1TaGFkZXJUZXh0dXJlVHlwZXMuYWRkKHRleFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQnVpbGRlciBhZGRUZXh0dXJlKFByb2dyYW0uVGV4dHVyZVR5cGUgdGV4VHlwZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgIG1TaGFkZXIubVRleHR1cmVOYW1lcy5hZGQobmFtZSk7Ci0gICAgICAgICAgICBtU2hhZGVyLm1UZXh0dXJlVHlwZXMuYWRkKHRleFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRnJhZ21lbnRTaGFkZXIgY3JlYXRlKCkgewotICAgICAgICAgICAgaWYgKG1TaGFkZXIubVBlclNoYWRlckNvbnN0YW50cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUJ1aWxkZXIuYWRkQ29uc3RhbnQobVNoYWRlci5tUGVyU2hhZGVyQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtU2hhZGVyLm1QZXJPYmpDb25zdGFudHMgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1CdWlsZGVyLmFkZENvbnN0YW50KG1TaGFkZXIubVBlck9iakNvbnN0YW50cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1TaGFkZXIubVRleHR1cmVUeXBlcy5zaXplKCk7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBtQnVpbGRlci5hZGRUZXh0dXJlKG1TaGFkZXIubVRleHR1cmVUeXBlcy5nZXQoaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtU2hhZGVyLm1UZXh0dXJlTmFtZXMuZ2V0KGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVNoYWRlci5tU2hhZGVyVGV4dHVyZVR5cGVzLnNpemUoKTsgaSArKykgewotICAgICAgICAgICAgICAgIG1CdWlsZGVyLmFkZFRleHR1cmUobVNoYWRlci5tU2hhZGVyVGV4dHVyZVR5cGVzLmdldChpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TaGFkZXIubVNoYWRlclRleHR1cmVOYW1lcy5nZXQoaSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtU2hhZGVyLm1Qcm9ncmFtID0gbUJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbVNoYWRlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBQcm9ncmFtRnJhZ21lbnQgZ2V0UHJvZ3JhbSgpIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9ncmFtOwotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX1NoYWRlclBhcmFtX3MgZ2V0VGV4dHVyZVBhcmFtcygpIHsKLSAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBTY2VuZU1hbmFnZXIuZ2V0UlMoKTsKLSAgICAgICAgUmVzb3VyY2VzIHJlcyA9IFNjZW5lTWFuYWdlci5nZXRSZXMoKTsKLSAgICAgICAgaWYgKHJzID09IG51bGwgfHwgcmVzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgQXJyYXlMaXN0PFNjcmlwdEZpZWxkX1NoYWRlclBhcmFtX3MuSXRlbT4gcGFyYW1MaXN0OwotICAgICAgICBwYXJhbUxpc3QgPSBuZXcgQXJyYXlMaXN0PFNjcmlwdEZpZWxkX1NoYWRlclBhcmFtX3MuSXRlbT4oKTsKLQotICAgICAgICBpbnQgc2hhZGVyVGV4dHVyZVN0YXJ0ID0gbVRleHR1cmVUeXBlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVNoYWRlclRleHR1cmVOYW1lcy5zaXplKCk7IGkgKyspIHsKLSAgICAgICAgICAgIFNoYWRlclBhcmFtIHNwID0gbVNvdXJjZVBhcmFtcy5nZXQobVNoYWRlclRleHR1cmVOYW1lcy5nZXQoaSkpOwotICAgICAgICAgICAgaWYgKHNwICE9IG51bGwgJiYgc3AgaW5zdGFuY2VvZiBUZXh0dXJlUGFyYW0pIHsKLSAgICAgICAgICAgICAgICBUZXh0dXJlUGFyYW0gcCA9IChUZXh0dXJlUGFyYW0pc3A7Ci0gICAgICAgICAgICAgICAgU2NyaXB0RmllbGRfU2hhZGVyUGFyYW1fcy5JdGVtIHBhcmFtUlMgPSBuZXcgU2NyaXB0RmllbGRfU2hhZGVyUGFyYW1fcy5JdGVtKCk7Ci0gICAgICAgICAgICAgICAgcGFyYW1SUy5idWZmZXJPZmZzZXQgPSBzaGFkZXJUZXh0dXJlU3RhcnQgKyBpOwotICAgICAgICAgICAgICAgIHBhcmFtUlMudHJhbnNmb3JtVGltZXN0YW1wID0gMDsKLSAgICAgICAgICAgICAgICBwYXJhbVJTLmRhdGFUaW1lc3RhbXAgPSAwOwotICAgICAgICAgICAgICAgIHBhcmFtUlMuZGF0YSA9IHAuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIHBhcmFtTGlzdC5hZGQocGFyYW1SUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zIHJzUGFyYW1zID0gbnVsbDsKLSAgICAgICAgaW50IHBhcmFtQ291bnQgPSBwYXJhbUxpc3Quc2l6ZSgpOwotICAgICAgICBpZiAocGFyYW1Db3VudCAhPSAwKSB7Ci0gICAgICAgICAgICByc1BhcmFtcyA9IG5ldyBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zKHJzLCBwYXJhbUNvdW50KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcnNQYXJhbXMuc2V0KHBhcmFtTGlzdC5nZXQoaSksIGksIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJzUGFyYW1zLmNvcHlBbGwoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnNQYXJhbXM7Ci0gICAgfQotCi0gICAgU2NyaXB0RmllbGRfRnJhZ21lbnRTaGFkZXJfcyBnZXRSU0RhdGEoKSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBTY2VuZU1hbmFnZXIuZ2V0UmVzKCk7Ci0gICAgICAgIGlmIChycyA9PSBudWxsIHx8IHJlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFNjcmlwdEZpZWxkX0ZyYWdtZW50U2hhZGVyX3MuSXRlbSBpdGVtID0gbmV3IFNjcmlwdEZpZWxkX0ZyYWdtZW50U2hhZGVyX3MuSXRlbSgpOwotICAgICAgICBpdGVtLnByb2dyYW0gPSBtUHJvZ3JhbTsKLQotICAgICAgICBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zIHRleFBhcmFtcyA9IGdldFRleHR1cmVQYXJhbXMoKTsKLSAgICAgICAgaWYgKHRleFBhcmFtcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpdGVtLnNoYWRlclRleHR1cmVQYXJhbXMgPSB0ZXhQYXJhbXMuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgbGlua0NvbnN0YW50cyhycyk7Ci0gICAgICAgIGlmIChtUGVyU2hhZGVyQ29uc3RhbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGl0ZW0uc2hhZGVyQ29uc3QgPSBtQ29uc3RhbnRCdWZmZXI7Ci0gICAgICAgICAgICBpdGVtLnNoYWRlckNvbnN0UGFyYW1zID0gbUNvbnN0YW50QnVmZmVyUGFyYW1zLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIG1Qcm9ncmFtLmJpbmRDb25zdGFudHMoaXRlbS5zaGFkZXJDb25zdCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtLm9iamVjdENvbnN0SW5kZXggPSAtMTsKLSAgICAgICAgaWYgKG1QZXJPYmpDb25zdGFudHMgIT0gbnVsbCkgewotICAgICAgICAgICAgaXRlbS5vYmplY3RDb25zdEluZGV4ID0gbVBlclNoYWRlckNvbnN0YW50cyAhPSBudWxsID8gMSA6IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBtRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfRnJhZ21lbnRTaGFkZXJfcyhycywgMSk7Ci0gICAgICAgIG1GaWVsZC5zZXQoaXRlbSwgMCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9MaWdodEJhc2UuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvTGlnaHRCYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNWUyZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9MaWdodEJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zY2VuZWdyYXBoOwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkZsb2F0MzsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5GbG9hdDQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGlnaHRCYXNlIGV4dGVuZHMgU2NlbmVHcmFwaEJhc2UgewotICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTElHSFRfUE9JTlQgPSAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgUlNfTElHSFRfRElSRUNUSU9OQUwgPSAxOwotCi0gICAgU2NyaXB0RmllbGRfTGlnaHRfcyBtRmllbGQ7Ci0gICAgU2NyaXB0RmllbGRfTGlnaHRfcy5JdGVtIG1GaWVsZERhdGE7Ci0gICAgVHJhbnNmb3JtIG1UcmFuc2Zvcm07Ci0gICAgRmxvYXQ0IG1Db2xvcjsKLSAgICBmbG9hdCBtSW50ZW5zaXR5OwotICAgIHB1YmxpYyBMaWdodEJhc2UoKSB7Ci0gICAgICAgIG1Db2xvciA9IG5ldyBGbG9hdDQoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7Ci0gICAgICAgIG1JbnRlbnNpdHkgPSAxLjBmOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybShUcmFuc2Zvcm0gdCkgewotICAgICAgICBtVHJhbnNmb3JtID0gdDsKLSAgICAgICAgdXBkYXRlUlNEYXRhKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYikgewotICAgICAgICBtQ29sb3IueCA9IHI7Ci0gICAgICAgIG1Db2xvci55ID0gZzsKLSAgICAgICAgbUNvbG9yLnogPSBiOwotICAgICAgICB1cGRhdGVSU0RhdGEoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb2xvcihGbG9hdDMgYykgewotICAgICAgICBzZXRDb2xvcihjLngsIGMueSwgYy56KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnRlbnNpdHkoZmxvYXQgaSkgewotICAgICAgICBtSW50ZW5zaXR5ID0gaTsKLSAgICAgICAgdXBkYXRlUlNEYXRhKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbikgewotICAgICAgICBzdXBlci5zZXROYW1lKG4pOwotICAgICAgICB1cGRhdGVSU0RhdGEoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVSU0RhdGEoKSB7Ci0gICAgICAgIGlmIChtRmllbGQgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIG1GaWVsZERhdGEudHJhbnNmb3JtTWF0cml4ID0gbVRyYW5zZm9ybS5nZXRSU0RhdGEoKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIG1GaWVsZERhdGEubmFtZSA9IGdldE5hbWVBbGxvYyhycyk7Ci0gICAgICAgIG1GaWVsZERhdGEuY29sb3IgPSBtQ29sb3I7Ci0gICAgICAgIG1GaWVsZERhdGEuaW50ZW5zaXR5ID0gbUludGVuc2l0eTsKLQotICAgICAgICBpbml0TG9jYWxEYXRhKCk7Ci0KLSAgICAgICAgbUZpZWxkLnNldChtRmllbGREYXRhLCAwLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBhYnN0cmFjdCB2b2lkIGluaXRMb2NhbERhdGEoKTsKLQotICAgIFNjcmlwdEZpZWxkX0xpZ2h0X3MgZ2V0UlNEYXRhKCkgewotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBpZiAocnMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1GaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfTGlnaHRfcyhycywgMSk7Ci0gICAgICAgICAgICBtRmllbGREYXRhID0gbmV3IFNjcmlwdEZpZWxkX0xpZ2h0X3MuSXRlbSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlUlNEYXRhKCk7Ci0KLSAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9NYXRyaXhUcmFuc2Zvcm0uamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvTWF0cml4VHJhbnNmb3JtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzBiYzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9NYXRyaXhUcmFuc2Zvcm0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgTWF0cml4VHJhbnNmb3JtIGV4dGVuZHMgVHJhbnNmb3JtIHsKLQotICAgIE1hdHJpeDRmIG1Mb2NhbE1hdHJpeDsKLSAgICBwdWJsaWMgTWF0cml4VHJhbnNmb3JtKCkgewotICAgICAgICBtTG9jYWxNYXRyaXggPSBuZXcgTWF0cml4NGYoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNYXRyaXgoTWF0cml4NGYgbWF0cml4KSB7Ci0gICAgICAgIG1Mb2NhbE1hdHJpeCA9IG1hdHJpeDsKLSAgICAgICAgdXBkYXRlUlNEYXRhKCk7Ci0gICAgfQotCi0gICAgcHVibGljIE1hdHJpeDRmIGdldE1hdHJpeCgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXg0ZihtTG9jYWxNYXRyaXguZ2V0QXJyYXkoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0TG9jYWxEYXRhKCkgewotICAgICAgICBtVHJhbnNmb3JtRGF0YS5sb2NhbE1hdCA9IG1Mb2NhbE1hdHJpeDsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZVJTRGF0YSgpIHsKLSAgICAgICAgaWYgKG1GaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbUZpZWxkLnNldF9sb2NhbE1hdCgwLCBtTG9jYWxNYXRyaXgsIGZhbHNlKTsKLSAgICAgICAgbUZpZWxkLnNldF9pc0RpcnR5KDAsIDEsIHRydWUpOwotICAgIH0KLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1BvaW50TGlnaHQuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUG9pbnRMaWdodC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzRiYWZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUG9pbnRMaWdodC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NYXRyaXg0ZjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXg7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgUG9pbnRMaWdodCBleHRlbmRzIExpZ2h0QmFzZSB7Ci0gICAgcHVibGljIFBvaW50TGlnaHQoKSB7Ci0gICAgfQotCi0gICAgIHZvaWQgaW5pdExvY2FsRGF0YSgpIHsKLSAgICAgICAgbUZpZWxkRGF0YS50eXBlID0gUlNfTElHSFRfUE9JTlQ7Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyUGFzcy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9SZW5kZXJQYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZmQ2OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9SZW5kZXJQYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyUGFzcyBleHRlbmRzIFNjZW5lR3JhcGhCYXNlIHsKLQotICAgIFRleHR1cmVSZW5kZXJUYXJnZXQgbUNvbG9yVGFyZ2V0OwotICAgIEZsb2F0NCBtQ2xlYXJDb2xvcjsKLSAgICBib29sZWFuIG1TaG91bGRDbGVhckNvbG9yOwotCi0gICAgVGV4dHVyZVJlbmRlclRhcmdldCBtRGVwdGhUYXJnZXQ7Ci0gICAgZmxvYXQgbUNsZWFyRGVwdGg7Ci0gICAgYm9vbGVhbiBtU2hvdWxkQ2xlYXJEZXB0aDsKLQotICAgIEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4gbU9iamVjdHNUb0RyYXc7Ci0KLSAgICBDYW1lcmEgbUNhbWVyYTsKLQotICAgIFNjcmlwdEZpZWxkX1JlbmRlclBhc3Nfcy5JdGVtIG1Sc0ZpZWxkOwotCi0gICAgcHVibGljIFJlbmRlclBhc3MoKSB7Ci0gICAgICAgIG1PYmplY3RzVG9EcmF3ID0gbmV3IEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4oKTsKLSAgICAgICAgbUNsZWFyQ29sb3IgPSBuZXcgRmxvYXQ0KDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwotICAgICAgICBtU2hvdWxkQ2xlYXJDb2xvciA9IHRydWU7Ci0gICAgICAgIG1DbGVhckRlcHRoID0gMS4wZjsKLSAgICAgICAgbVNob3VsZENsZWFyRGVwdGggPSB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFwcGVuZFJlbmRlcmFibGUoUmVuZGVyYWJsZSBkKSB7Ci0gICAgICAgIG1PYmplY3RzVG9EcmF3LmFkZChkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDYW1lcmEoQ2FtZXJhIGMpIHsKLSAgICAgICAgbUNhbWVyYSA9IGM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29sb3JUYXJnZXQoVGV4dHVyZVJlbmRlclRhcmdldCBjb2xvclRhcmdldCkgewotICAgICAgICBtQ29sb3JUYXJnZXQgPSBjb2xvclRhcmdldDsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0Q2xlYXJDb2xvcihGbG9hdDQgY2xlYXJDb2xvcikgewotICAgICAgICBtQ2xlYXJDb2xvciA9IGNsZWFyQ29sb3I7Ci0gICAgfQotICAgIHB1YmxpYyB2b2lkIHNldFNob3VsZENsZWFyQ29sb3IoYm9vbGVhbiBzaG91bGRDbGVhckNvbG9yKSB7Ci0gICAgICAgIG1TaG91bGRDbGVhckNvbG9yID0gc2hvdWxkQ2xlYXJDb2xvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXB0aFRhcmdldChUZXh0dXJlUmVuZGVyVGFyZ2V0IGRlcHRoVGFyZ2V0KSB7Ci0gICAgICAgIG1EZXB0aFRhcmdldCA9IGRlcHRoVGFyZ2V0OwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRDbGVhckRlcHRoKGZsb2F0IGNsZWFyRGVwdGgpIHsKLSAgICAgICAgbUNsZWFyRGVwdGggPSBjbGVhckRlcHRoOwotICAgIH0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaG91bGRDbGVhckRlcHRoKGJvb2xlYW4gc2hvdWxkQ2xlYXJEZXB0aCkgewotICAgICAgICBtU2hvdWxkQ2xlYXJEZXB0aCA9IHNob3VsZENsZWFyRGVwdGg7Ci0gICAgfQotCi0gICAgcHVibGljIEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4gZ2V0UmVuZGVyYWJsZXMoKSB7Ci0gICAgICAgIHJldHVybiBtT2JqZWN0c1RvRHJhdzsKLSAgICB9Ci0KLSAgICBTY3JpcHRGaWVsZF9SZW5kZXJQYXNzX3MuSXRlbSBnZXRSc0ZpZWxkKFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIGlmIChtUnNGaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbVJzRmllbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtUnNGaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9SZW5kZXJQYXNzX3MuSXRlbSgpOwotICAgICAgICBpZiAobUNvbG9yVGFyZ2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1Sc0ZpZWxkLmNvbG9yX3RhcmdldCA9IG1Db2xvclRhcmdldC5nZXRSc0RhdGEodHJ1ZSkuZ2V0X3RleHR1cmUoMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1Db2xvclRhcmdldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUnNGaWVsZC5kZXB0aF90YXJnZXQgPSBtRGVwdGhUYXJnZXQuZ2V0UnNEYXRhKHRydWUpLmdldF90ZXh0dXJlKDApOwotICAgICAgICB9Ci0gICAgICAgIG1Sc0ZpZWxkLmNhbWVyYSA9IG1DYW1lcmEgIT0gbnVsbCA/IG1DYW1lcmEuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpIDogbnVsbDsKLQotICAgICAgICBpZiAobU9iamVjdHNUb0RyYXcuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgICAgIEFsbG9jYXRpb24gZHJhd2FibGVEYXRhID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5BTExPQ0FUSU9OKHJzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbU9iamVjdHNUb0RyYXcuc2l6ZSgpKTsKLSAgICAgICAgICAgIEFsbG9jYXRpb25bXSBkcmF3YWJsZUFsbG9jcyA9IG5ldyBBbGxvY2F0aW9uW21PYmplY3RzVG9EcmF3LnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1PYmplY3RzVG9EcmF3LnNpemUoKTsgaSArKykgewotICAgICAgICAgICAgICAgIFJlbmRlcmFibGUgZEkgPSAoUmVuZGVyYWJsZSltT2JqZWN0c1RvRHJhdy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgZHJhd2FibGVBbGxvY3NbaV0gPSBkSS5nZXRSc0ZpZWxkKHJzLCByZXMpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRyYXdhYmxlRGF0YS5jb3B5RnJvbShkcmF3YWJsZUFsbG9jcyk7Ci0gICAgICAgICAgICBtUnNGaWVsZC5vYmplY3RzID0gZHJhd2FibGVEYXRhOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJzRmllbGQuY2xlYXJfY29sb3IgPSBtQ2xlYXJDb2xvcjsKLSAgICAgICAgbVJzRmllbGQuY2xlYXJfZGVwdGggPSBtQ2xlYXJEZXB0aDsKLSAgICAgICAgbVJzRmllbGQuc2hvdWxkX2NsZWFyX2NvbG9yID0gbVNob3VsZENsZWFyQ29sb3I7Ci0gICAgICAgIG1Sc0ZpZWxkLnNob3VsZF9jbGVhcl9kZXB0aCA9IG1TaG91bGRDbGVhckRlcHRoOwotICAgICAgICByZXR1cm4gbVJzRmllbGQ7Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyU3RhdGUuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyU3RhdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA4YTcyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1JlbmRlclN0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1SYXN0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXg7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUlNSdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJTdGF0ZSBleHRlbmRzIFNjZW5lR3JhcGhCYXNlIHsKLSAgICBWZXJ0ZXhTaGFkZXIgbVZlcnRleDsKLSAgICBGcmFnbWVudFNoYWRlciBtRnJhZ21lbnQ7Ci0gICAgUHJvZ3JhbVN0b3JlIG1TdG9yZTsKLSAgICBQcm9ncmFtUmFzdGVyIG1SYXN0ZXI7Ci0KLSAgICBTY3JpcHRGaWVsZF9SZW5kZXJTdGF0ZV9zIG1GaWVsZDsKLQotICAgIHB1YmxpYyBSZW5kZXJTdGF0ZShWZXJ0ZXhTaGFkZXIgcHYsCi0gICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyIHBmLAotICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtU3RvcmUgcHMsCi0gICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1SYXN0ZXIgcHIpIHsKLSAgICAgICAgbVZlcnRleCA9IHB2OwotICAgICAgICBtRnJhZ21lbnQgPSBwZjsKLSAgICAgICAgbVN0b3JlID0gcHM7Ci0gICAgICAgIG1SYXN0ZXIgPSBwcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVuZGVyU3RhdGUoUmVuZGVyU3RhdGUgcikgewotICAgICAgICBtVmVydGV4ID0gci5tVmVydGV4OwotICAgICAgICBtRnJhZ21lbnQgPSByLm1GcmFnbWVudDsKLSAgICAgICAgbVN0b3JlID0gci5tU3RvcmU7Ci0gICAgICAgIG1SYXN0ZXIgPSByLm1SYXN0ZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UHJvZ3JhbVZlcnRleChWZXJ0ZXhTaGFkZXIgcHYpIHsKLSAgICAgICAgbVZlcnRleCA9IHB2OwotICAgICAgICB1cGRhdGVSU0RhdGEoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9ncmFtRnJhZ21lbnQoRnJhZ21lbnRTaGFkZXIgcGYpIHsKLSAgICAgICAgbUZyYWdtZW50ID0gcGY7Ci0gICAgICAgIHVwZGF0ZVJTRGF0YSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByb2dyYW1TdG9yZShQcm9ncmFtU3RvcmUgcHMpIHsKLSAgICAgICAgbVN0b3JlID0gcHM7Ci0gICAgICAgIHVwZGF0ZVJTRGF0YSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByb2dyYW1SYXN0ZXIoUHJvZ3JhbVJhc3RlciBwcikgewotICAgICAgICBtUmFzdGVyID0gcHI7Ci0gICAgICAgIHVwZGF0ZVJTRGF0YSgpOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlUlNEYXRhKCkgewotICAgICAgICBpZiAobUZpZWxkID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBTY3JpcHRGaWVsZF9SZW5kZXJTdGF0ZV9zLkl0ZW0gaXRlbSA9IG5ldyBTY3JpcHRGaWVsZF9SZW5kZXJTdGF0ZV9zLkl0ZW0oKTsKLSAgICAgICAgaXRlbS5wdiA9IG1WZXJ0ZXguZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICBpdGVtLnBmID0gbUZyYWdtZW50LmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgaXRlbS5wcyA9IG1TdG9yZTsKLSAgICAgICAgaXRlbS5wciA9IG1SYXN0ZXI7Ci0KLSAgICAgICAgbUZpZWxkLnNldChpdGVtLCAwLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfUmVuZGVyU3RhdGVfcyBnZXRSU0RhdGEoKSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIGlmIChycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9SZW5kZXJTdGF0ZV9zKHJzLCAxKTsKLSAgICAgICAgdXBkYXRlUlNEYXRhKCk7Ci0KLSAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1JlbmRlcmFibGUuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjY2ZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguRmxvYXQ0UGFyYW07Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5NYXRyaXhUcmFuc2Zvcm07Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5TY2VuZU1hbmFnZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5TaGFkZXJQYXJhbTsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlRyYW5zZm9ybVBhcmFtOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuQWxsb2NhdGlvbjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWVzaDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXg7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgUmVuZGVyYWJsZSBleHRlbmRzIFJlbmRlcmFibGVCYXNlIHsKLSAgICBIYXNoTWFwPFN0cmluZywgU2hhZGVyUGFyYW0+IG1Tb3VyY2VQYXJhbXM7Ci0KLSAgICBSZW5kZXJTdGF0ZSBtUmVuZGVyU3RhdGU7Ci0gICAgVHJhbnNmb3JtIG1UcmFuc2Zvcm07Ci0KLSAgICBTdHJpbmcgbU1lc2hOYW1lOwotICAgIFN0cmluZyBtTWVzaEluZGV4TmFtZTsKLQotICAgIHB1YmxpYyBTdHJpbmcgbU1hdGVyaWFsTmFtZTsKLQotICAgIFNjcmlwdEZpZWxkX1JlbmRlcmFibGVfcyBtRmllbGQ7Ci0gICAgU2NyaXB0RmllbGRfUmVuZGVyYWJsZV9zLkl0ZW0gbURhdGE7Ci0KLSAgICBwdWJsaWMgUmVuZGVyYWJsZSgpIHsKLSAgICAgICAgbVNvdXJjZVBhcmFtcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2hhZGVyUGFyYW0+KCk7Ci0gICAgICAgIG1EYXRhID0gbmV3IFNjcmlwdEZpZWxkX1JlbmRlcmFibGVfcy5JdGVtKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q3VsbFR5cGUoaW50IGN1bGwpIHsKLSAgICAgICAgbURhdGEuY3VsbFR5cGUgPSBjdWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFJlbmRlclN0YXRlKFJlbmRlclN0YXRlIHJlbmRlclN0YXRlKSB7Ci0gICAgICAgIG1SZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlOwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgICAgICB1cGRhdGVGaWVsZEl0ZW0ocnMpOwotICAgICAgICAgICAgbUZpZWxkLnNldChtRGF0YSwgMCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNZXNoKE1lc2ggbWVzaCkgewotICAgICAgICBtRGF0YS5tZXNoID0gbWVzaDsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X21lc2goMCwgbURhdGEubWVzaCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNZXNoKFN0cmluZyBtZXNoLCBTdHJpbmcgaW5kZXhOYW1lKSB7Ci0gICAgICAgIG1NZXNoTmFtZSA9IG1lc2g7Ci0gICAgICAgIG1NZXNoSW5kZXhOYW1lID0gaW5kZXhOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE1hdGVyaWFsTmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICBtTWF0ZXJpYWxOYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHJhbnNmb3JtIGdldFRyYW5zZm9ybSgpIHsKLSAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm07Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VHJhbnNmb3JtKFRyYW5zZm9ybSB0KSB7Ci0gICAgICAgIG1UcmFuc2Zvcm0gPSB0OwotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgICAgICB1cGRhdGVGaWVsZEl0ZW0ocnMpOwotICAgICAgICAgICAgbUZpZWxkLnNldChtRGF0YSwgMCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhcHBlbmRTb3VyY2VQYXJhbXMoU2hhZGVyUGFyYW0gcCkgewotICAgICAgICBtU291cmNlUGFyYW1zLnB1dChwLmdldFBhcmFtTmFtZSgpLCBwKTsKLSAgICAgICAgLy8gUG9zc2libHkgbGlmdCB0aGlzIHJlc3RyaWN0aW9uIGxhdGVyCi0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbid0IGFkZCBzb3VyY2UgcGFyYW1zIHRvIG9iamVjdHMgdGhhdCBhcmUgcmVuZGVyaW5nIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNvbHZlTWVzaERhdGEoTWVzaCBtZXNoKSB7Ci0gICAgICAgIG1EYXRhLm1lc2ggPSBtZXNoOwotICAgICAgICBpZiAobURhdGEubWVzaCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBMb2cudigiRFJBV0FCTEU6ICIsICIqKiogTk8gTUVTSCAqKiogIiArIG1NZXNoTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHN1YkluZGV4Q291bnQgPSBtRGF0YS5tZXNoLmdldFByaW1pdGl2ZUNvdW50KCk7Ci0gICAgICAgIGlmIChzdWJJbmRleENvdW50ID09IDEgfHwgbU1lc2hJbmRleE5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgbURhdGEubWVzaEluZGV4ID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ViSW5kZXhDb3VudDsgaSArKykgewotICAgICAgICAgICAgICAgIGlmIChtRGF0YS5tZXNoLmdldEluZGV4U2V0QWxsb2NhdGlvbihpKS5nZXROYW1lKCkuZXF1YWxzKG1NZXNoSW5kZXhOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBtRGF0YS5tZXNoSW5kZXggPSBpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0KG1EYXRhLCAwLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlVGV4dHVyZXMoUmVuZGVyU2NyaXB0R0wgcnMpIHsKLSAgICAgICAgSXRlcmF0b3I8U2hhZGVyUGFyYW0+IGFsbFBhcmFtc0l0ZXIgPSBtU291cmNlUGFyYW1zLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIGludCBwYXJhbUluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKGFsbFBhcmFtc0l0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICBTaGFkZXJQYXJhbSBzcCA9IGFsbFBhcmFtc0l0ZXIubmV4dCgpOwotICAgICAgICAgICAgaWYgKHNwIGluc3RhbmNlb2YgVGV4dHVyZVBhcmFtKSB7Ci0gICAgICAgICAgICAgICAgVGV4dHVyZVBhcmFtIHAgPSAoVGV4dHVyZVBhcmFtKXNwOwotICAgICAgICAgICAgICAgIFRleHR1cmVCYXNlIHRleCA9IHAuZ2V0VGV4dHVyZSgpOwotICAgICAgICAgICAgICAgIGlmICh0ZXggIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBtRGF0YS5wZl90ZXh0dXJlc1twYXJhbUluZGV4KytdID0gdGV4LmdldFJzRGF0YShmYWxzZSkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBQcm9ncmFtRnJhZ21lbnQgcGYgPSBtUmVuZGVyU3RhdGUubUZyYWdtZW50Lm1Qcm9ncmFtOwotICAgICAgICBtRGF0YS5wZl9udW1fdGV4dHVyZXMgPSBwZiAhPSBudWxsID8gTWF0aC5taW4ocGYuZ2V0VGV4dHVyZUNvdW50KCksIHBhcmFtSW5kZXgpIDogMDsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X3BmX3RleHR1cmVzKDAsIG1EYXRhLnBmX3RleHR1cmVzLCB0cnVlKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfcGZfbnVtX3RleHR1cmVzKDAsIG1EYXRhLnBmX251bV90ZXh0dXJlcywgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRWaXNpYmxlKGJvb2xlYW4gdmlzKSB7Ci0gICAgICAgIG1EYXRhLmN1bGxUeXBlID0gdmlzID8gMCA6IDI7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZpZWxkLnNldF9jdWxsVHlwZSgwLCBtRGF0YS5jdWxsVHlwZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTY3JpcHRGaWVsZF9SZW5kZXJhYmxlX3MgZ2V0UnNGaWVsZChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcykgewotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgICAgIH0KLSAgICAgICAgdXBkYXRlRmllbGRJdGVtKHJzKTsKLSAgICAgICAgdXBkYXRlVGV4dHVyZXMocnMpOwotCi0gICAgICAgIG1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9SZW5kZXJhYmxlX3MocnMsIDEpOwotICAgICAgICBtRmllbGQuc2V0KG1EYXRhLCAwLCB0cnVlKTsKLQotICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlVmVydGV4Q29uc3RhbnRzKFJlbmRlclNjcmlwdEdMIHJzKSB7Ci0gICAgICAgIEFsbG9jYXRpb24gcHZQYXJhbXMgPSBudWxsLCB2ZXJ0ZXhDb25zdGFudHMgPSBudWxsOwotICAgICAgICBWZXJ0ZXhTaGFkZXIgcHYgPSBtUmVuZGVyU3RhdGUubVZlcnRleDsKLSAgICAgICAgaWYgKHB2ICE9IG51bGwgJiYgcHYuZ2V0T2JqZWN0Q29uc3RhbnRzKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgdmVydGV4Q29uc3RhbnRzID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChycywgcHYuZ2V0T2JqZWN0Q29uc3RhbnRzKCkpOwotICAgICAgICAgICAgRWxlbWVudCB2ZXJ0ZXhDb25zdCA9IHZlcnRleENvbnN0YW50cy5nZXRUeXBlKCkuZ2V0RWxlbWVudCgpOwotICAgICAgICAgICAgcHZQYXJhbXMgPSBTaGFkZXJQYXJhbS5maWxsSW5QYXJhbXModmVydGV4Q29uc3QsIG1Tb3VyY2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbURhdGEucHZfY29uc3QgPSB2ZXJ0ZXhDb25zdGFudHM7Ci0gICAgICAgIG1EYXRhLnB2X2NvbnN0UGFyYW1zID0gcHZQYXJhbXM7Ci0gICAgfQotCi0gICAgdm9pZCB1cGRhdGVGcmFnbWVudENvbnN0YW50cyhSZW5kZXJTY3JpcHRHTCBycykgewotICAgICAgICBBbGxvY2F0aW9uIHBmUGFyYW1zID0gbnVsbCwgZnJhZ21lbnRDb25zdGFudHMgPSBudWxsOwotICAgICAgICBGcmFnbWVudFNoYWRlciBwZiA9IG1SZW5kZXJTdGF0ZS5tRnJhZ21lbnQ7Ci0gICAgICAgIGlmIChwZiAhPSBudWxsICYmIHBmLmdldE9iamVjdENvbnN0YW50cygpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZyYWdtZW50Q29uc3RhbnRzID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChycywgcGYuZ2V0T2JqZWN0Q29uc3RhbnRzKCkpOwotICAgICAgICAgICAgRWxlbWVudCBmcmFnbWVudENvbnN0ID0gZnJhZ21lbnRDb25zdGFudHMuZ2V0VHlwZSgpLmdldEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHBmUGFyYW1zID0gU2hhZGVyUGFyYW0uZmlsbEluUGFyYW1zKGZyYWdtZW50Q29uc3QsIG1Tb3VyY2VQYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbURhdGEucGZfY29uc3QgPSBmcmFnbWVudENvbnN0YW50czsKLSAgICAgICAgbURhdGEucGZfY29uc3RQYXJhbXMgPSBwZlBhcmFtczsKLSAgICB9Ci0KLSAgICB2b2lkIHVwZGF0ZUZpZWxkSXRlbShSZW5kZXJTY3JpcHRHTCBycykgewotICAgICAgICBpZiAobVJlbmRlclN0YXRlID09IG51bGwpIHsKLSAgICAgICAgICAgIG1SZW5kZXJTdGF0ZSA9IFNjZW5lTWFuYWdlci5nZXREZWZhdWx0U3RhdGUoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAobVRyYW5zZm9ybSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBtVHJhbnNmb3JtID0gU2NlbmVNYW5hZ2VyLmdldERlZmF1bHRUcmFuc2Zvcm0oKTsKLSAgICAgICAgfQotICAgICAgICB1cGRhdGVWZXJ0ZXhDb25zdGFudHMocnMpOwotICAgICAgICB1cGRhdGVGcmFnbWVudENvbnN0YW50cyhycyk7Ci0KLSAgICAgICAgbURhdGEudHJhbnNmb3JtTWF0cml4ID0gbVRyYW5zZm9ybS5nZXRSU0RhdGEoKS5nZXRBbGxvY2F0aW9uKCk7Ci0KLSAgICAgICAgbURhdGEubmFtZSA9IGdldE5hbWVBbGxvYyhycyk7Ci0gICAgICAgIG1EYXRhLnJlbmRlcl9zdGF0ZSA9IG1SZW5kZXJTdGF0ZS5nZXRSU0RhdGEoKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIG1EYXRhLmJWb2xJbml0aWFsaXplZCA9IDA7Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZUJhc2UuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZUJhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ1MzVkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1JlbmRlcmFibGVCYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zY2VuZWdyYXBoOwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1GcmFnbWVudDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVZlcnRleDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJhYmxlQmFzZSBleHRlbmRzIFNjZW5lR3JhcGhCYXNlIHsKLSAgICBwdWJsaWMgUmVuZGVyYWJsZUJhc2UoKSB7Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZUdyb3VwLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1JlbmRlcmFibGVHcm91cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTBiYmFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvUmVuZGVyYWJsZUdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zY2VuZWdyYXBoOwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1hdHJpeDRmOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1GcmFnbWVudDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtU3RvcmU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVZlcnRleDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJhYmxlR3JvdXAgZXh0ZW5kcyBSZW5kZXJhYmxlQmFzZSB7Ci0KLSAgICBBcnJheUxpc3Q8UmVuZGVyYWJsZUJhc2U+IG1DaGlsZHJlbjsKLQotICAgIHB1YmxpYyBSZW5kZXJhYmxlR3JvdXAoKSB7Ci0gICAgICAgIG1DaGlsZHJlbiA9IG5ldyBBcnJheUxpc3Q8UmVuZGVyYWJsZUJhc2U+KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kQ2hpbGRyZW4oUmVuZGVyYWJsZUJhc2UgZCkgewotICAgICAgICBtQ2hpbGRyZW4uYWRkKGQpOwotICAgIH0KLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1NjZW5lLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1NjZW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MzM2YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TY2VuZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5DYW1lcmE7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5Db21wb3VuZFRyYW5zZm9ybTsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlJlbmRlclBhc3M7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5SZW5kZXJhYmxlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguVGV4dHVyZUJhc2U7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lk1lc2g7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgU2NlbmUgZXh0ZW5kcyBTY2VuZUdyYXBoQmFzZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRJTUVSX1RBRyA9ICJUSU1FUiI7Ci0KLSAgICBDb21wb3VuZFRyYW5zZm9ybSBtUm9vdFRyYW5zZm9ybXM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFRyYW5zZm9ybT4gbVRyYW5zZm9ybU1hcDsKLSAgICBBcnJheUxpc3Q8UmVuZGVyUGFzcz4gbVJlbmRlclBhc3NlczsKLSAgICBBcnJheUxpc3Q8TGlnaHRCYXNlPiBtTGlnaHRzOwotICAgIEFycmF5TGlzdDxDYW1lcmE+IG1DYW1lcmFzOwotICAgIEFycmF5TGlzdDxGcmFnbWVudFNoYWRlcj4gbUZyYWdtZW50U2hhZGVyczsKLSAgICBBcnJheUxpc3Q8VmVydGV4U2hhZGVyPiBtVmVydGV4U2hhZGVyczsKLSAgICBBcnJheUxpc3Q8UmVuZGVyYWJsZUJhc2U+IG1SZW5kZXJhYmxlczsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVuZGVyYWJsZUJhc2U+IG1SZW5kZXJhYmxlTWFwOwotICAgIEFycmF5TGlzdDxUZXh0dXJlMkQ+IG1UZXh0dXJlczsKLQotICAgIEhhc2hNYXA8U3RyaW5nLCBBcnJheUxpc3Q8UmVuZGVyYWJsZT4gPiBtUmVuZGVyYWJsZU1lc2hNYXA7Ci0KLSAgICAvLyBSUyBTcGVjaWZpYyBzdHVmZgotICAgIFNjcmlwdEZpZWxkX1NnVHJhbnNmb3JtIG1UcmFuc2Zvcm1SU0RhdGE7Ci0KLSAgICBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgUmVzb3VyY2VzIG1SZXM7Ci0KLSAgICBTY3JpcHRGaWVsZF9SZW5kZXJQYXNzX3MgbVJlbmRlclBhc3NBbGxvYzsKLQotICAgIHB1YmxpYyBTY2VuZSgpIHsKLSAgICAgICAgbVJlbmRlclBhc3NlcyA9IG5ldyBBcnJheUxpc3Q8UmVuZGVyUGFzcz4oKTsKLSAgICAgICAgbUxpZ2h0cyA9IG5ldyBBcnJheUxpc3Q8TGlnaHRCYXNlPigpOwotICAgICAgICBtQ2FtZXJhcyA9IG5ldyBBcnJheUxpc3Q8Q2FtZXJhPigpOwotICAgICAgICBtRnJhZ21lbnRTaGFkZXJzID0gbmV3IEFycmF5TGlzdDxGcmFnbWVudFNoYWRlcj4oKTsKLSAgICAgICAgbVZlcnRleFNoYWRlcnMgPSBuZXcgQXJyYXlMaXN0PFZlcnRleFNoYWRlcj4oKTsKLSAgICAgICAgbVJlbmRlcmFibGVzID0gbmV3IEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4oKTsKLSAgICAgICAgbVJlbmRlcmFibGVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFJlbmRlcmFibGVCYXNlPigpOwotICAgICAgICBtUmVuZGVyYWJsZU1lc2hNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFycmF5TGlzdDxSZW5kZXJhYmxlPiA+KCk7Ci0gICAgICAgIG1UZXh0dXJlcyA9IG5ldyBBcnJheUxpc3Q8VGV4dHVyZTJEPigpOwotICAgICAgICBtUm9vdFRyYW5zZm9ybXMgPSBuZXcgQ29tcG91bmRUcmFuc2Zvcm0oKTsKLSAgICAgICAgbVJvb3RUcmFuc2Zvcm1zLnNldE5hbWUoIl9zY2VuZV9yb290XyIpOwotICAgICAgICBtVHJhbnNmb3JtTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBUcmFuc2Zvcm0+KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kVHJhbnNmb3JtKFRyYW5zZm9ybSB0KSB7Ci0gICAgICAgIGlmICh0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBZGRpbmcgbnVsbCBvYmplY3QiKTsKLSAgICAgICAgfQotICAgICAgICBtUm9vdFRyYW5zZm9ybXMuYXBwZW5kQ2hpbGQodCk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbXBvdW5kVHJhbnNmb3JtIGFwcGVuZE5ld0NvbXBvdW5kVHJhbnNmb3JtKCkgewotICAgICAgICBDb21wb3VuZFRyYW5zZm9ybSB0ID0gbmV3IENvbXBvdW5kVHJhbnNmb3JtKCk7Ci0gICAgICAgIGFwcGVuZFRyYW5zZm9ybSh0KTsKLSAgICAgICAgcmV0dXJuIHQ7Ci0gICAgfQotCi0gICAgcHVibGljIE1hdHJpeFRyYW5zZm9ybSBhcHBlbmROZXdNYXRyaXhUcmFuc2Zvcm0oKSB7Ci0gICAgICAgIE1hdHJpeFRyYW5zZm9ybSB0ID0gbmV3IE1hdHJpeFRyYW5zZm9ybSgpOwotICAgICAgICBhcHBlbmRUcmFuc2Zvcm0odCk7Ci0gICAgICAgIHJldHVybiB0OwotICAgIH0KLQotICAgIC8vIHRlbXBvcmFyeQotICAgIHB1YmxpYyB2b2lkIGFkZFRvVHJhbnNmb3JtTWFwKFRyYW5zZm9ybSB0KSB7Ci0gICAgICAgIG1UcmFuc2Zvcm1NYXAucHV0KHQuZ2V0TmFtZSgpLCB0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHJhbnNmb3JtIGdldFRyYW5zZm9ybUJ5TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gbVRyYW5zZm9ybU1hcC5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kUmVuZGVyUGFzcyhSZW5kZXJQYXNzIHApIHsKLSAgICAgICAgaWYgKHAgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFkZGluZyBudWxsIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIG1SZW5kZXJQYXNzZXMuYWRkKHApOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW5kZXJQYXNzIGFwcGVuZE5ld1JlbmRlclBhc3MoKSB7Ci0gICAgICAgIFJlbmRlclBhc3MgcCA9IG5ldyBSZW5kZXJQYXNzKCk7Ci0gICAgICAgIGFwcGVuZFJlbmRlclBhc3MocCk7Ci0gICAgICAgIHJldHVybiBwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsZWFyUmVuZGVyUGFzc2VzKCkgewotICAgICAgICBtUmVuZGVyUGFzc2VzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kTGlnaHQoTGlnaHRCYXNlIGwpIHsKLSAgICAgICAgaWYgKGwgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFkZGluZyBudWxsIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIG1MaWdodHMuYWRkKGwpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFwcGVuZENhbWVyYShDYW1lcmEgYykgewotICAgICAgICBpZiAoYyA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQWRkaW5nIG51bGwgb2JqZWN0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgbUNhbWVyYXMuYWRkKGMpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYW1lcmEgYXBwZW5kTmV3Q2FtZXJhKCkgewotICAgICAgICBDYW1lcmEgYyA9IG5ldyBDYW1lcmEoKTsKLSAgICAgICAgYXBwZW5kQ2FtZXJhKGMpOwotICAgICAgICByZXR1cm4gYzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhcHBlbmRTaGFkZXIoRnJhZ21lbnRTaGFkZXIgZikgewotICAgICAgICBpZiAoZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQWRkaW5nIG51bGwgb2JqZWN0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgbUZyYWdtZW50U2hhZGVycy5hZGQoZik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kU2hhZGVyKFZlcnRleFNoYWRlciB2KSB7Ci0gICAgICAgIGlmICh2ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBZGRpbmcgbnVsbCBvYmplY3QiKTsKLSAgICAgICAgfQotICAgICAgICBtVmVydGV4U2hhZGVycy5hZGQodik7Ci0gICAgfQotCi0gICAgcHVibGljIEFycmF5TGlzdDxDYW1lcmE+IGdldENhbWVyYXMoKSB7Ci0gICAgICAgIHJldHVybiBtQ2FtZXJhczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXJyYXlMaXN0PExpZ2h0QmFzZT4gZ2V0TGlnaHRzKCkgewotICAgICAgICByZXR1cm4gbUxpZ2h0czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhcHBlbmRSZW5kZXJhYmxlKFJlbmRlcmFibGVCYXNlIGQpIHsKLSAgICAgICAgaWYgKGQgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFkZGluZyBudWxsIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIG1SZW5kZXJhYmxlcy5hZGQoZCk7Ci0gICAgICAgIGlmIChkLmdldE5hbWUoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtUmVuZGVyYWJsZU1hcC5wdXQoZC5nZXROYW1lKCksIGQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFJlbmRlcmFibGUgYXBwZW5kTmV3UmVuZGVyYWJsZSgpIHsKLSAgICAgICAgUmVuZGVyYWJsZSByID0gbmV3IFJlbmRlcmFibGUoKTsKLSAgICAgICAgYXBwZW5kUmVuZGVyYWJsZShyKTsKLSAgICAgICAgcmV0dXJuIHI7Ci0gICAgfQotCi0gICAgcHVibGljIEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4gZ2V0UmVuZGVyYWJsZXMoKSB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyYWJsZXM7Ci0gICAgfQotCi0gICAgcHVibGljIFJlbmRlcmFibGVCYXNlIGdldFJlbmRlcmFibGVCeU5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgcmV0dXJuIG1SZW5kZXJhYmxlTWFwLmdldChuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhcHBlbmRUZXh0dXJlcyhUZXh0dXJlMkQgdGV4KSB7Ci0gICAgICAgIGlmICh0ZXggPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFkZGluZyBudWxsIG9iamVjdCIpOwotICAgICAgICB9Ci0gICAgICAgIG1UZXh0dXJlcy5hZGQodGV4KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhc3NpZ25SZW5kZXJTdGF0ZVRvTWF0ZXJpYWwoUmVuZGVyU3RhdGUgcmVuZGVyU3RhdGUsIFN0cmluZyByZWdleCkgewotICAgICAgICBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwotICAgICAgICBpbnQgbnVtUmVuZGVyYWJsZXMgPSBtUmVuZGVyYWJsZXMuc2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJlbmRlcmFibGVzOyBpICsrKSB7Ci0gICAgICAgICAgICBSZW5kZXJhYmxlIHNoYXBlID0gKFJlbmRlcmFibGUpbVJlbmRlcmFibGVzLmdldChpKTsKLSAgICAgICAgICAgIE1hdGNoZXIgbSA9IHBhdHRlcm4ubWF0Y2hlcihzaGFwZS5tTWF0ZXJpYWxOYW1lKTsKLSAgICAgICAgICAgIGlmIChtLmZpbmQoKSkgewotICAgICAgICAgICAgICAgIHNoYXBlLnNldFJlbmRlclN0YXRlKHJlbmRlclN0YXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFzc2lnblJlbmRlclN0YXRlKFJlbmRlclN0YXRlIHJlbmRlclN0YXRlKSB7Ci0gICAgICAgIGludCBudW1SZW5kZXJhYmxlcyA9IG1SZW5kZXJhYmxlcy5zaXplKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUmVuZGVyYWJsZXM7IGkgKyspIHsKLSAgICAgICAgICAgIFJlbmRlcmFibGUgc2hhcGUgPSAoUmVuZGVyYWJsZSltUmVuZGVyYWJsZXMuZ2V0KGkpOwotICAgICAgICAgICAgc2hhcGUuc2V0UmVuZGVyU3RhdGUocmVuZGVyU3RhdGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbWVzaExvYWRlZChNZXNoIG0pIHsKLSAgICAgICAgQXJyYXlMaXN0PFJlbmRlcmFibGU+IGVudHJpZXMgPSBtUmVuZGVyYWJsZU1lc2hNYXAuZ2V0KG0uZ2V0TmFtZSgpKTsKLSAgICAgICAgaW50IG51bUVudHJpZXMgPSBlbnRyaWVzLnNpemUoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1FbnRyaWVzOyBpKyspIHsKLSAgICAgICAgICAgIFJlbmRlcmFibGUgZCA9IGVudHJpZXMuZ2V0KGkpOwotICAgICAgICAgICAgZC5yZXNvbHZlTWVzaERhdGEobSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGFkZFRvTWVzaE1hcChSZW5kZXJhYmxlIGQpIHsKLSAgICAgICAgQXJyYXlMaXN0PFJlbmRlcmFibGU+IGVudHJpZXMgPSBtUmVuZGVyYWJsZU1lc2hNYXAuZ2V0KGQubU1lc2hOYW1lKTsKLSAgICAgICAgaWYgKGVudHJpZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgZW50cmllcyA9IG5ldyBBcnJheUxpc3Q8UmVuZGVyYWJsZT4oKTsKLSAgICAgICAgICAgIG1SZW5kZXJhYmxlTWVzaE1hcC5wdXQoZC5tTWVzaE5hbWUsIGVudHJpZXMpOwotICAgICAgICB9Ci0gICAgICAgIGVudHJpZXMuYWRkKGQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRlc3Ryb3lSUygpIHsKLSAgICAgICAgU2NlbmVNYW5hZ2VyIHNjZW5lTWFuYWdlciA9IFNjZW5lTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBtVHJhbnNmb3JtUlNEYXRhID0gbnVsbDsKLSAgICAgICAgc2NlbmVNYW5hZ2VyLm1SZW5kZXJMb29wLmJpbmRfZ1Jvb3ROb2RlKG1UcmFuc2Zvcm1SU0RhdGEpOwotICAgICAgICBzY2VuZU1hbmFnZXIubVJlbmRlckxvb3Auc2V0X2dSZW5kZXJhYmxlT2JqZWN0cyhudWxsKTsKLSAgICAgICAgbVJlbmRlclBhc3NBbGxvYyA9IG51bGw7Ci0gICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5zZXRfZ1JlbmRlclBhc3NlcyhudWxsKTsKLSAgICAgICAgc2NlbmVNYW5hZ2VyLm1SZW5kZXJMb29wLmJpbmRfZ0Zyb250VG9CYWNrKG51bGwpOwotICAgICAgICBzY2VuZU1hbmFnZXIubVJlbmRlckxvb3AuYmluZF9nQmFja1RvRnJvbnQobnVsbCk7Ci0gICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5zZXRfZ0NhbWVyYXMobnVsbCk7Ci0KLSAgICAgICAgbVRyYW5zZm9ybU1hcCA9IG51bGw7Ci0gICAgICAgIG1SZW5kZXJQYXNzZXMgPSBudWxsOwotICAgICAgICBtTGlnaHRzID0gbnVsbDsKLSAgICAgICAgbUNhbWVyYXMgPSBudWxsOwotICAgICAgICBtUmVuZGVyYWJsZXMgPSBudWxsOwotICAgICAgICBtUmVuZGVyYWJsZU1hcCA9IG51bGw7Ci0gICAgICAgIG1UZXh0dXJlcyA9IG51bGw7Ci0gICAgICAgIG1SZW5kZXJhYmxlTWVzaE1hcCA9IG51bGw7Ci0gICAgICAgIG1Sb290VHJhbnNmb3JtcyA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdFJlbmRlclBhc3NSUyhSZW5kZXJTY3JpcHRHTCBycywgU2NlbmVNYW5hZ2VyIHNjZW5lTWFuYWdlcikgewotICAgICAgICBpZiAobVJlbmRlclBhc3Nlcy5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgbVJlbmRlclBhc3NBbGxvYyA9IG5ldyBTY3JpcHRGaWVsZF9SZW5kZXJQYXNzX3MobVJTLCBtUmVuZGVyUGFzc2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1SZW5kZXJQYXNzZXMuc2l6ZSgpOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgbVJlbmRlclBhc3NBbGxvYy5zZXQobVJlbmRlclBhc3Nlcy5nZXQoaSkuZ2V0UnNGaWVsZChtUlMsIG1SZXMpLCBpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtUmVuZGVyUGFzc0FsbG9jLmNvcHlBbGwoKTsKLSAgICAgICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5zZXRfZ1JlbmRlclBhc3NlcyhtUmVuZGVyUGFzc0FsbG9jLmdldEFsbG9jYXRpb24oKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYWRkRHJhd2FibGVzKFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzLCBTY2VuZU1hbmFnZXIgc2NlbmVNYW5hZ2VyKSB7Ci0gICAgICAgIEFsbG9jYXRpb24gZHJhd2FibGVEYXRhID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuQUxMT0NBVElPTihycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyYWJsZXMuc2l6ZSgpKTsKLSAgICAgICAgQWxsb2NhdGlvbltdIGRyYXdhYmxlQWxsb2NzID0gbmV3IEFsbG9jYXRpb25bbVJlbmRlcmFibGVzLnNpemUoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVJlbmRlcmFibGVzLnNpemUoKTsgaSArKykgewotICAgICAgICAgICAgUmVuZGVyYWJsZSBkSSA9IChSZW5kZXJhYmxlKW1SZW5kZXJhYmxlcy5nZXQoaSk7Ci0gICAgICAgICAgICBhZGRUb01lc2hNYXAoZEkpOwotICAgICAgICAgICAgZHJhd2FibGVBbGxvY3NbaV0gPSBkSS5nZXRSc0ZpZWxkKHJzLCByZXMpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgfQotICAgICAgICBkcmF3YWJsZURhdGEuY29weUZyb20oZHJhd2FibGVBbGxvY3MpOwotICAgICAgICBzY2VuZU1hbmFnZXIubVJlbmRlckxvb3Auc2V0X2dSZW5kZXJhYmxlT2JqZWN0cyhkcmF3YWJsZURhdGEpOwotCi0gICAgICAgIGluaXRSZW5kZXJQYXNzUlMocnMsIHNjZW5lTWFuYWdlcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFNoYWRlcnMoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMsIFNjZW5lTWFuYWdlciBzY2VuZU1hbmFnZXIpIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhTaGFkZXJzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIEFsbG9jYXRpb24gc2hhZGVyRGF0YSA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuQUxMT0NBVElPTihycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1WZXJ0ZXhTaGFkZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uW10gc2hhZGVyQWxsb2NzID0gbmV3IEFsbG9jYXRpb25bbVZlcnRleFNoYWRlcnMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbVZlcnRleFNoYWRlcnMuc2l6ZSgpOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgVmVydGV4U2hhZGVyIHNJID0gbVZlcnRleFNoYWRlcnMuZ2V0KGkpOwotICAgICAgICAgICAgICAgIHNoYWRlckFsbG9jc1tpXSA9IHNJLmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNoYWRlckRhdGEuY29weUZyb20oc2hhZGVyQWxsb2NzKTsKLSAgICAgICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5zZXRfZ1ZlcnRleFNoYWRlcnMoc2hhZGVyRGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUZyYWdtZW50U2hhZGVycy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uIHNoYWRlckRhdGEgPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKHJzLCBFbGVtZW50LkFMTE9DQVRJT04ocnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRnJhZ21lbnRTaGFkZXJzLnNpemUoKSk7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uW10gc2hhZGVyQWxsb2NzID0gbmV3IEFsbG9jYXRpb25bbUZyYWdtZW50U2hhZGVycy5zaXplKCldOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtRnJhZ21lbnRTaGFkZXJzLnNpemUoKTsgaSArKykgewotICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyIHNJID0gbUZyYWdtZW50U2hhZGVycy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgc2hhZGVyQWxsb2NzW2ldID0gc0kuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2hhZGVyRGF0YS5jb3B5RnJvbShzaGFkZXJBbGxvY3MpOwotICAgICAgICAgICAgc2NlbmVNYW5hZ2VyLm1SZW5kZXJMb29wLnNldF9nRnJhZ21lbnRTaGFkZXJzKHNoYWRlckRhdGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdFJTKCkgewotICAgICAgICBTY2VuZU1hbmFnZXIgc2NlbmVNYW5hZ2VyID0gU2NlbmVNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0gICAgICAgIG1SUyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBtUmVzID0gU2NlbmVNYW5hZ2VyLmdldFJlcygpOwotICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIG1UcmFuc2Zvcm1SU0RhdGEgPSBtUm9vdFRyYW5zZm9ybXMuZ2V0UlNEYXRhKCk7Ci0gICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIExvZy52KFRJTUVSX1RBRywgIlRyYW5zZm9ybSBpbml0IHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0gICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5iaW5kX2dSb290Tm9kZShtVHJhbnNmb3JtUlNEYXRhKTsKLSAgICAgICAgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIExvZy52KFRJTUVSX1RBRywgIlNjcmlwdCBpbml0IHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBhZGREcmF3YWJsZXMobVJTLCBtUmVzLCBzY2VuZU1hbmFnZXIpOwotICAgICAgICBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgTG9nLnYoVElNRVJfVEFHLCAiUmVuZGVyYWJsZSBpbml0IHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICBhZGRTaGFkZXJzKG1SUywgbVJlcywgc2NlbmVNYW5hZ2VyKTsKLQotICAgICAgICBBbGxvY2F0aW9uIG9wYXF1ZUJ1ZmZlciA9IG51bGw7Ci0gICAgICAgIGlmIChtUmVuZGVyYWJsZXMuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgb3BhcXVlQnVmZmVyID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChtUlMsIEVsZW1lbnQuVTMyKG1SUyksIG1SZW5kZXJhYmxlcy5zaXplKCkpOwotICAgICAgICB9Ci0gICAgICAgIEFsbG9jYXRpb24gdHJhbnNwYXJlbnRCdWZmZXIgPSBudWxsOwotICAgICAgICBpZiAobVJlbmRlcmFibGVzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIHRyYW5zcGFyZW50QnVmZmVyID0gQWxsb2NhdGlvbi5jcmVhdGVTaXplZChtUlMsIEVsZW1lbnQuVTMyKG1SUyksIG1SZW5kZXJhYmxlcy5zaXplKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2NlbmVNYW5hZ2VyLm1SZW5kZXJMb29wLmJpbmRfZ0Zyb250VG9CYWNrKG9wYXF1ZUJ1ZmZlcik7Ci0gICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5iaW5kX2dCYWNrVG9Gcm9udCh0cmFuc3BhcmVudEJ1ZmZlcik7Ci0KLSAgICAgICAgaWYgKG1DYW1lcmFzLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIEFsbG9jYXRpb24gY2FtZXJhRGF0YTsKLSAgICAgICAgICAgIGNhbWVyYURhdGEgPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKG1SUywgRWxlbWVudC5BTExPQ0FUSU9OKG1SUyksIG1DYW1lcmFzLnNpemUoKSk7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uW10gY2FtZXJhQWxsb2NzID0gbmV3IEFsbG9jYXRpb25bbUNhbWVyYXMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUNhbWVyYXMuc2l6ZSgpOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgY2FtZXJhQWxsb2NzW2ldID0gbUNhbWVyYXMuZ2V0KGkpLmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhbWVyYURhdGEuY29weUZyb20oY2FtZXJhQWxsb2NzKTsKLSAgICAgICAgICAgIHNjZW5lTWFuYWdlci5tUmVuZGVyTG9vcC5zZXRfZ0NhbWVyYXMoY2FtZXJhRGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUxpZ2h0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uIGxpZ2h0RGF0YSA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQobVJTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuQUxMT0NBVElPTihtUlMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1MaWdodHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIEFsbG9jYXRpb25bXSBsaWdodEFsbG9jcyA9IG5ldyBBbGxvY2F0aW9uW21MaWdodHMuc2l6ZSgpXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUxpZ2h0cy5zaXplKCk7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBsaWdodEFsbG9jc1tpXSA9IG1MaWdodHMuZ2V0KGkpLmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxpZ2h0RGF0YS5jb3B5RnJvbShsaWdodEFsbG9jcyk7Ci0gICAgICAgICAgICBzY2VuZU1hbmFnZXIubVJlbmRlckxvb3Auc2V0X2dMaWdodHMobGlnaHREYXRhKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TY2VuZUdyYXBoQmFzZS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TY2VuZUdyYXBoQmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTJmZmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvU2NlbmVHcmFwaEJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5TY2VuZU1hbmFnZXI7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTUnVudGltZUV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2NlbmVHcmFwaEJhc2UgewotICAgIFN0cmluZyBtTmFtZTsKLSAgICBBbGxvY2F0aW9uIG1OYW1lQWxsb2M7Ci0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbikgewotICAgICAgICBtTmFtZSA9IG47Ci0gICAgICAgIG1OYW1lQWxsb2MgPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1OYW1lOwotICAgIH0KLQotICAgIEFsbG9jYXRpb24gZ2V0TmFtZUFsbG9jKFJlbmRlclNjcmlwdEdMIHJzKSB7Ci0gICAgICAgIGlmIChtTmFtZUFsbG9jID09IG51bGwpICB7Ci0gICAgICAgICAgICBtTmFtZUFsbG9jID0gU2NlbmVNYW5hZ2VyLmdldFN0cmluZ0FzQWxsb2NhdGlvbihycywgZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbU5hbWVBbGxvYzsKLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TY2VuZU1hbmFnZXIuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvU2NlbmVNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZjJjOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TY2VuZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zY2VuZWdyYXBoOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguQ2FtZXJhOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguRnJhZ21lbnRTaGFkZXI7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5NYXRyaXhUcmFuc2Zvcm07Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5TY2VuZTsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlZlcnRleFNoYWRlcjsKLWltcG9ydCBjb20uYW5kcm9pZC50ZXN0YXBwLlI7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Bc3luY1Rhc2s7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLk1pcG1hcENvbnRyb2w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWVzaDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBTY2VuZU1hbmFnZXIgZXh0ZW5kcyBTY2VuZUdyYXBoQmFzZSB7Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQWxsb2NhdGlvbj4gbUFsbG9jYXRpb25NYXA7Ci0KLSAgICBTY3JpcHRDX3JlbmRlciBtUmVuZGVyTG9vcDsKLSAgICBTY3JpcHRDIG1DYW1lcmFTY3JpcHQ7Ci0gICAgU2NyaXB0QyBtTGlnaHRTY3JpcHQ7Ci0gICAgU2NyaXB0QyBtT2JqZWN0UGFyYW1zU2NyaXB0OwotICAgIFNjcmlwdEMgbUZyYWdtZW50UGFyYW1zU2NyaXB0OwotICAgIFNjcmlwdEMgbVZlcnRleFBhcmFtc1NjcmlwdDsKLSAgICBTY3JpcHRDIG1DdWxsU2NyaXB0OwotICAgIFNjcmlwdENfdHJhbnNmb3JtIG1UcmFuc2Zvcm1TY3JpcHQ7Ci0gICAgU2NyaXB0Q19leHBvcnQgbUV4cG9ydFNjcmlwdDsKLQotICAgIFJlbmRlclNjcmlwdEdMIG1SUzsKLSAgICBSZXNvdXJjZXMgbVJlczsKLSAgICBNZXNoIG1RdWFkOwotICAgIGludCBtV2lkdGg7Ci0gICAgaW50IG1IZWlnaHQ7Ci0KLSAgICBTY2VuZSBtQWN0aXZlU2NlbmU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU2NlbmVNYW5hZ2VyIHNTY2VuZU1hbmFnZXI7Ci0KLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbURlZmF1bHQyRDsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbURlZmF1bHRDdWJlOwotCi0gICAgcHJpdmF0ZSBGcmFnbWVudFNoYWRlciBtQ29sb3I7Ci0gICAgcHJpdmF0ZSBGcmFnbWVudFNoYWRlciBtVGV4dHVyZTsKLSAgICBwcml2YXRlIFZlcnRleFNoYWRlciBtRGVmYXVsdFZlcnRleDsKLQotICAgIHByaXZhdGUgUmVuZGVyU3RhdGUgbURlZmF1bHRTdGF0ZTsKLSAgICBwcml2YXRlIFRyYW5zZm9ybSBtRGVmYXVsdFRyYW5zZm9ybTsKLQotICAgIHByaXZhdGUgc3RhdGljIEFsbG9jYXRpb24gZ2V0RGVmYXVsdChib29sZWFuIGlzQ3ViZSkgewotICAgICAgICBmaW5hbCBpbnQgZGltZW5zaW9uID0gNDsKLSAgICAgICAgZmluYWwgaW50IGJ5dGVzUGVyUGl4ZWwgPSA0OwotICAgICAgICBpbnQgYXJyYXlTaXplID0gZGltZW5zaW9uICogZGltZW5zaW9uICogYnl0ZXNQZXJQaXhlbDsKLQotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IHNTY2VuZU1hbmFnZXIubVJTOwotICAgICAgICBUeXBlLkJ1aWxkZXIgYiA9IG5ldyBUeXBlLkJ1aWxkZXIocnMsIEVsZW1lbnQuUkdCQV84ODg4KHJzKSk7Ci0gICAgICAgIGIuc2V0WChkaW1lbnNpb24pLnNldFkoZGltZW5zaW9uKTsKLSAgICAgICAgaWYgKGlzQ3ViZSkgewotICAgICAgICAgICAgYi5zZXRGYWNlcyh0cnVlKTsKLSAgICAgICAgICAgIGFycmF5U2l6ZSAqPSA2OwotICAgICAgICB9Ci0gICAgICAgIFR5cGUgYml0bWFwVHlwZSA9IGIuY3JlYXRlKCk7Ci0KLSAgICAgICAgQWxsb2NhdGlvbi5NaXBtYXBDb250cm9sIG1pcCA9IEFsbG9jYXRpb24uTWlwbWFwQ29udHJvbC5NSVBNQVBfT05fU1lOQ19UT19URVhUVVJFOwotICAgICAgICBpbnQgdXNhZ2UgPSAgQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19URVhUVVJFOwotICAgICAgICBBbGxvY2F0aW9uIGRlZmF1bHRJbWFnZSA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIGJpdG1hcFR5cGUsIG1pcCwgdXNhZ2UpOwotCi0gICAgICAgIGJ5dGUgaW1hZ2VEYXRhW10gPSBuZXcgYnl0ZVthcnJheVNpemVdOwotICAgICAgICBkZWZhdWx0SW1hZ2UuY29weUZyb20oaW1hZ2VEYXRhKTsKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRJbWFnZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvbiBnZXREZWZhdWx0VGV4MkQoKSB7Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyLm1EZWZhdWx0MkQgPT0gbnVsbCkgewotICAgICAgICAgICAgc1NjZW5lTWFuYWdlci5tRGVmYXVsdDJEID0gZ2V0RGVmYXVsdChmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubURlZmF1bHQyRDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvbiBnZXREZWZhdWx0VGV4Q3ViZSgpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIubURlZmF1bHRDdWJlID09IG51bGwpIHsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIubURlZmF1bHRDdWJlID0gZ2V0RGVmYXVsdCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc1NjZW5lTWFuYWdlci5tRGVmYXVsdEN1YmU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU0RDYXJkUGF0aChTdHJpbmcgcGF0aCkgewotICAgICAgICBpbnQgc2RDYXJkSW5kZXggPSBwYXRoLmluZGV4T2YoInNkY2FyZC8iKTsKLSAgICAgICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIC9zZGNhcmQvIG9yIHNkY2FyZC8KLSAgICAgICAgaWYgKHNkQ2FyZEluZGV4ID09IDAgfHwgc2RDYXJkSW5kZXggPT0gMSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgc2RDYXJkSW5kZXggPSBwYXRoLmluZGV4T2YoIm1udC9zZGNhcmQvIik7Ci0gICAgICAgIGlmIChzZENhcmRJbmRleCA9PSAwIHx8IHNkQ2FyZEluZGV4ID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQml0bWFwIGxvYWRCaXRtYXAoU3RyaW5nIG5hbWUsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotICAgICAgICBib29sZWFuIGxvYWRGcm9tU0QgPSBpc1NEQ2FyZFBhdGgobmFtZSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpZiAoIWxvYWRGcm9tU0QpIHsKLSAgICAgICAgICAgICAgICBpcyA9IHJlcy5nZXRBc3NldHMoKS5vcGVuKG5hbWUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShuYW1lKTsKLSAgICAgICAgICAgICAgICBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG5ldyBGaWxlSW5wdXRTdHJlYW0oZikpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBMb2cuZSgiSW1hZ2VMb2FkZXJUYXNrIiwgIiBNZXNzYWdlOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBCaXRtYXAgYiA9IEJpdG1hcEZhY3RvcnkuZGVjb2RlU3RyZWFtKGlzKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIExvZy5lKCJJbWFnZUxvYWRlclRhc2siLCAiIE1lc3NhZ2U6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGI7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb24gY3JlYXRlRnJvbUJpdG1hcChCaXRtYXAgYiwgUmVuZGVyU2NyaXB0R0wgcnMsIGJvb2xlYW4gaXNDdWJlKSB7Ci0gICAgICAgIGlmIChiID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIE1pcG1hcENvbnRyb2wgbWlwID0gTWlwbWFwQ29udHJvbC5NSVBNQVBfT05fU1lOQ19UT19URVhUVVJFOwotICAgICAgICBpbnQgdXNhZ2UgPSBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkU7Ci0gICAgICAgIGlmIChpc0N1YmUpIHsKLSAgICAgICAgICAgIHJldHVybiBBbGxvY2F0aW9uLmNyZWF0ZUN1YmVtYXBGcm9tQml0bWFwKHJzLCBiLCBtaXAsIHVzYWdlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQWxsb2NhdGlvbi5jcmVhdGVGcm9tQml0bWFwKHJzLCBiLCBtaXAsIHVzYWdlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEFsbG9jYXRpb24gbG9hZEN1YmVtYXAoU3RyaW5nIG5hbWUsIFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQml0bWFwKGxvYWRCaXRtYXAobmFtZSwgcmVzKSwgcnMsIHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQWxsb2NhdGlvbiBsb2FkQ3ViZW1hcChpbnQgaWQsIFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQml0bWFwKEJpdG1hcEZhY3RvcnkuZGVjb2RlUmVzb3VyY2UocmVzLCBpZCksIHJzLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEFsbG9jYXRpb24gbG9hZFRleHR1cmUyRChTdHJpbmcgbmFtZSwgUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXAobG9hZEJpdG1hcChuYW1lLCByZXMpLCBycywgZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQWxsb2NhdGlvbiBsb2FkVGV4dHVyZTJEKGludCBpZCwgUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMpIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21CaXRtYXAoQml0bWFwRmFjdG9yeS5kZWNvZGVSZXNvdXJjZShyZXMsIGlkKSwgcnMsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFByb2dyYW1TdG9yZSBCTEVORF9BRERfREVQVEhfTk9ORShSZW5kZXJTY3JpcHQgcnMpIHsKLSAgICAgICAgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBQcm9ncmFtU3RvcmUuQnVpbGRlcihycyk7Ci0gICAgICAgIGJ1aWxkZXIuc2V0RGVwdGhGdW5jKFByb2dyYW1TdG9yZS5EZXB0aEZ1bmMuQUxXQVlTKTsKLSAgICAgICAgYnVpbGRlci5zZXRCbGVuZEZ1bmMoUHJvZ3JhbVN0b3JlLkJsZW5kU3JjRnVuYy5PTkUsIFByb2dyYW1TdG9yZS5CbGVuZERzdEZ1bmMuT05FKTsKLSAgICAgICAgYnVpbGRlci5zZXREaXRoZXJFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgYnVpbGRlci5zZXREZXB0aE1hc2tFbmFibGVkKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIuY3JlYXRlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb24gZ2V0U3RyaW5nQXNBbGxvY2F0aW9uKFJlbmRlclNjcmlwdCBycywgU3RyaW5nIHN0cikgewotICAgICAgICBpZiAoc3RyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdHIubGVuZ3RoKCkgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgYnl0ZVtdIGFsbG9jQXJyYXkgPSBudWxsOwotICAgICAgICBieXRlW10gbnVsbENoYXIgPSBuZXcgYnl0ZVsxXTsKLSAgICAgICAgbnVsbENoYXJbMF0gPSAwOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgYWxsb2NBcnJheSA9IHN0ci5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgICAgIEFsbG9jYXRpb24gYWxsb2MgPSBBbGxvY2F0aW9uLmNyZWF0ZVNpemVkKHJzLCBFbGVtZW50LlU4KHJzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jQXJyYXkubGVuZ3RoICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfU0NSSVBUKTsKLSAgICAgICAgICAgIGFsbG9jLmNvcHkxRFJhbmdlRnJvbSgwLCBhbGxvY0FycmF5Lmxlbmd0aCwgYWxsb2NBcnJheSk7Ci0gICAgICAgICAgICBhbGxvYy5jb3B5MURSYW5nZUZyb20oYWxsb2NBcnJheS5sZW5ndGgsIDEsIG51bGxDaGFyKTsKLSAgICAgICAgICAgIHJldHVybiBhbGxvYzsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSU1J1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byB1dGYtOC4iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uIGdldENhY2hlZEFsbG9jKFN0cmluZyBzdHIpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlNjZW5lIG1hbmFnZXIgbm90IGluaXRpYWxpemVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubUFsbG9jYXRpb25NYXAuZ2V0KHN0cik7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2FjaGVBbGxvYyhTdHJpbmcgc3RyLCBBbGxvY2F0aW9uIGFsbG9jKSB7Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTY2VuZSBtYW5hZ2VyIG5vdCBpbml0aWFsaXplZCIpOwotICAgICAgICB9Ci0gICAgICAgIHNTY2VuZU1hbmFnZXIubUFsbG9jYXRpb25NYXAucHV0KHN0ciwgYWxsb2MpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU2NlbmVMb2FkZWRDYWxsYmFjayBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLSAgICAgICAgcHVibGljIFNjZW5lIG1Mb2FkZWRTY2VuZTsKLSAgICAgICAgcHVibGljIFN0cmluZyBtTmFtZTsKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFNjZW5lIGdldEFjdGl2ZVNjZW5lKCkgewotICAgICAgICByZXR1cm4gbUFjdGl2ZVNjZW5lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFjdGl2ZVNjZW5lKFNjZW5lIHMpIHsKLSAgICAgICAgbUFjdGl2ZVNjZW5lID0gczsKLQotICAgICAgICBpZiAobUFjdGl2ZVNjZW5lID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERvIHNvbWUgc2FuaXR5IGNoZWNraW5nCi0gICAgICAgIGlmIChtQWN0aXZlU2NlbmUuZ2V0Q2FtZXJhcygpLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBNYXRyaXg0ZiBjYW1Qb3MgPSBuZXcgTWF0cml4NGYoKTsKLSAgICAgICAgICAgIGNhbVBvcy50cmFuc2xhdGUoMCwgMCwgMTApOwotICAgICAgICAgICAgTWF0cml4VHJhbnNmb3JtIGNhbWVyYVRyYW5zZm9ybSA9IG5ldyBNYXRyaXhUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIGNhbWVyYVRyYW5zZm9ybS5zZXROYW1lKCJfRGVmYXVsdENhbWVyYVRyYW5zZm9ybSIpOwotICAgICAgICAgICAgY2FtZXJhVHJhbnNmb3JtLnNldE1hdHJpeChjYW1Qb3MpOwotICAgICAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFRyYW5zZm9ybShjYW1lcmFUcmFuc2Zvcm0pOwotICAgICAgICAgICAgQ2FtZXJhIGNhbSA9IG5ldyBDYW1lcmEoKTsKLSAgICAgICAgICAgIGNhbS5zZXROYW1lKCJfRGVmYXVsdENhbWVyYSIpOwotICAgICAgICAgICAgY2FtLnNldFRyYW5zZm9ybShjYW1lcmFUcmFuc2Zvcm0pOwotICAgICAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZENhbWVyYShjYW0pOwotICAgICAgICB9Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFNoYWRlcihnZXREZWZhdWx0VlMoKSk7Ci0gICAgICAgIG1BY3RpdmVTY2VuZS5hcHBlbmRUcmFuc2Zvcm0oZ2V0RGVmYXVsdFRyYW5zZm9ybSgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVuZGVyU2NyaXB0R0wgZ2V0UlMoKSB7Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzU2NlbmVNYW5hZ2VyLm1SUzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVzb3VyY2VzIGdldFJlcygpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubVJlczsKLSAgICB9Ci0KLSAgICAvLyBQcm92aWRlcyB0aGUgZm9sb3dpbmcgaW5wdXRzIHRvIGZyYWdtZW50IHNoYWRlcgotICAgIC8vIEFzc2lnbmVkIGJ5IGRlZmF1bHQgaWYgbm90aGluZyBpcyBwcmVzZW50Ci0gICAgLy8gdmVjMyB2YXJXb3JsZFBvczsKLSAgICAvLyB2ZWMzIHZhcldvcmxkTm9ybWFsOwotICAgIC8vIHZlYzIgdmFyVGV4MDsKLSAgICBwdWJsaWMgc3RhdGljIFZlcnRleFNoYWRlciBnZXREZWZhdWx0VlMoKSB7Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIubURlZmF1bHRWZXJ0ZXggPT0gbnVsbCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBnZXRSUygpOwotICAgICAgICAgICAgRWxlbWVudC5CdWlsZGVyIGIgPSBuZXcgRWxlbWVudC5CdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGIuYWRkKEVsZW1lbnQuTUFUUklYXzRYNChycyksICJtb2RlbCIpOwotICAgICAgICAgICAgVHlwZS5CdWlsZGVyIG9iakNvbnN0QnVpbGRlciA9IG5ldyBUeXBlLkJ1aWxkZXIocnMsIGIuY3JlYXRlKCkpOwotCi0gICAgICAgICAgICBiID0gbmV3IEVsZW1lbnQuQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50Lk1BVFJJWF80WDQocnMpLCAidmlld1Byb2oiKTsKLSAgICAgICAgICAgIFR5cGUuQnVpbGRlciBzaGFkZXJDb25zdEJ1aWxkZXIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBiLmNyZWF0ZSgpKTsKLQotICAgICAgICAgICAgYiA9IG5ldyBFbGVtZW50LkJ1aWxkZXIocnMpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfNChycyksICJwb3NpdGlvbiIpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfMihycyksICJ0ZXh0dXJlMCIpOwotICAgICAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfMyhycyksICJub3JtYWwiKTsKLSAgICAgICAgICAgIEVsZW1lbnQgZGVmYXVsdEluID0gYi5jcmVhdGUoKTsKLQotICAgICAgICAgICAgZmluYWwgU3RyaW5nIGNvZGUgPSAiXG4iICsKLSAgICAgICAgICAgICAgICAidmFyeWluZyB2ZWMzIHZhcldvcmxkUG9zO1xuIiArCi0gICAgICAgICAgICAgICAgInZhcnlpbmcgdmVjMyB2YXJXb3JsZE5vcm1hbDtcbiIgKwotICAgICAgICAgICAgICAgICJ2YXJ5aW5nIHZlYzIgdmFyVGV4MDtcbiIgKwotICAgICAgICAgICAgICAgICJ2b2lkIG1haW4oKSB7IiArCi0gICAgICAgICAgICAgICAgIiAgIHZlYzQgb2JqUG9zID0gQVRUUklCX3Bvc2l0aW9uO1xuIiArCi0gICAgICAgICAgICAgICAgIiAgIHZlYzQgd29ybGRQb3MgPSBVTklfbW9kZWwgKiBvYmpQb3M7XG4iICsKLSAgICAgICAgICAgICAgICAiICAgZ2xfUG9zaXRpb24gPSBVTklfdmlld1Byb2ogKiB3b3JsZFBvcztcbiIgKwotICAgICAgICAgICAgICAgICIgICBtYXQzIG1vZGVsMyA9IG1hdDMoVU5JX21vZGVsWzBdLnh5eiwgVU5JX21vZGVsWzFdLnh5eiwgVU5JX21vZGVsWzJdLnh5eik7XG4iICsKLSAgICAgICAgICAgICAgICAiICAgdmVjMyB3b3JsZE5vcm0gPSBtb2RlbDMgKiBBVFRSSUJfbm9ybWFsO1xuIiArCi0gICAgICAgICAgICAgICAgIiAgIHZhcldvcmxkUG9zID0gd29ybGRQb3MueHl6O1xuIiArCi0gICAgICAgICAgICAgICAgIiAgIHZhcldvcmxkTm9ybWFsID0gd29ybGROb3JtO1xuIiArCi0gICAgICAgICAgICAgICAgIiAgIHZhclRleDAgPSBBVFRSSUJfdGV4dHVyZTA7XG4iICsKLSAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICAgICAgVmVydGV4U2hhZGVyLkJ1aWxkZXIgc2IgPSBuZXcgVmVydGV4U2hhZGVyLkJ1aWxkZXIocnMpOwotICAgICAgICAgICAgc2IuYWRkSW5wdXQoZGVmYXVsdEluKTsKLSAgICAgICAgICAgIHNiLnNldE9iamVjdENvbnN0KG9iakNvbnN0QnVpbGRlci5zZXRYKDEpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIHNiLnNldFNoYWRlckNvbnN0KHNoYWRlckNvbnN0QnVpbGRlci5zZXRYKDEpLmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIHNiLnNldFNoYWRlcihjb2RlKTsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIubURlZmF1bHRWZXJ0ZXggPSBzYi5jcmVhdGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzU2NlbmVNYW5hZ2VyLm1EZWZhdWx0VmVydGV4OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRnJhZ21lbnRTaGFkZXIgZ2V0Q29sb3JGUygpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIubUNvbG9yID09IG51bGwpIHsKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gZ2V0UlMoKTsKLSAgICAgICAgICAgIEVsZW1lbnQuQnVpbGRlciBiID0gbmV3IEVsZW1lbnQuQnVpbGRlcihycyk7Ci0gICAgICAgICAgICBiLmFkZChFbGVtZW50LkYzMl80KHJzKSwgImNvbG9yIik7Ci0gICAgICAgICAgICBUeXBlLkJ1aWxkZXIgb2JqQ29uc3RCdWlsZGVyID0gbmV3IFR5cGUuQnVpbGRlcihycywgYi5jcmVhdGUoKSk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb2RlID0gIlxuIiArCi0gICAgICAgICAgICAgICAgInZhcnlpbmcgdmVjMiB2YXJUZXgwO1xuIiArCi0gICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHtcbiIgKwotICAgICAgICAgICAgICAgICIgICBsb3dwIHZlYzQgY29sID0gVU5JX2NvbG9yO1xuIiArCi0gICAgICAgICAgICAgICAgIiAgIGdsX0ZyYWdDb2xvciA9IGNvbDtcbiIgKwotICAgICAgICAgICAgICAgICJ9XG4iOwotICAgICAgICAgICAgRnJhZ21lbnRTaGFkZXIuQnVpbGRlciBmYiA9IG5ldyBGcmFnbWVudFNoYWRlci5CdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGZiLnNldFNoYWRlcihjb2RlKTsKLSAgICAgICAgICAgIGZiLnNldE9iamVjdENvbnN0KG9iakNvbnN0QnVpbGRlci5jcmVhdGUoKSk7Ci0gICAgICAgICAgICBzU2NlbmVNYW5hZ2VyLm1Db2xvciA9IGZiLmNyZWF0ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubUNvbG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRnJhZ21lbnRTaGFkZXIgZ2V0VGV4dHVyZUZTKCkgewotICAgICAgICBpZiAoc1NjZW5lTWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc1NjZW5lTWFuYWdlci5tVGV4dHVyZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IGdldFJTKCk7Ci0KLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBjb2RlID0gIlxuIiArCi0gICAgICAgICAgICAgICAgInZhcnlpbmcgdmVjMiB2YXJUZXgwO1xuIiArCi0gICAgICAgICAgICAgICAgInZvaWQgbWFpbigpIHtcbiIgKwotICAgICAgICAgICAgICAgICIgICBsb3dwIHZlYzQgY29sID0gdGV4dHVyZTJEKFVOSV9jb2xvciwgdmFyVGV4MCkucmdiYTtcbiIgKwotICAgICAgICAgICAgICAgICIgICBnbF9GcmFnQ29sb3IgPSBjb2w7XG4iICsKLSAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgICAgICAgICAgRnJhZ21lbnRTaGFkZXIuQnVpbGRlciBmYiA9IG5ldyBGcmFnbWVudFNoYWRlci5CdWlsZGVyKHJzKTsKLSAgICAgICAgICAgIGZiLnNldFNoYWRlcihjb2RlKTsKLSAgICAgICAgICAgIGZiLmFkZFRleHR1cmUoUHJvZ3JhbS5UZXh0dXJlVHlwZS5URVhUVVJFXzJELCAiY29sb3IiKTsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIubVRleHR1cmUgPSBmYi5jcmVhdGUoKTsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIubVRleHR1cmUubVByb2dyYW0uYmluZFNhbXBsZXIoU2FtcGxlci5DTEFNUF9MSU5FQVJfTUlQX0xJTkVBUihycyksIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubVRleHR1cmU7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlbmRlclN0YXRlIGdldERlZmF1bHRTdGF0ZSgpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIubURlZmF1bHRTdGF0ZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzU2NlbmVNYW5hZ2VyLm1EZWZhdWx0U3RhdGUgPSBuZXcgUmVuZGVyU3RhdGUoZ2V0RGVmYXVsdFZTKCksIGdldENvbG9yRlMoKSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBzU2NlbmVNYW5hZ2VyLm1EZWZhdWx0U3RhdGUuc2V0TmFtZSgiX19EZWZhdWx0U3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc1NjZW5lTWFuYWdlci5tRGVmYXVsdFN0YXRlOwotICAgIH0KLQotICAgIHN0YXRpYyBUcmFuc2Zvcm0gZ2V0RGVmYXVsdFRyYW5zZm9ybSgpIHsKLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNTY2VuZU1hbmFnZXIubURlZmF1bHRUcmFuc2Zvcm0gPT0gbnVsbCkgewotICAgICAgICAgICAgc1NjZW5lTWFuYWdlci5tRGVmYXVsdFRyYW5zZm9ybSA9IG5ldyBNYXRyaXhUcmFuc2Zvcm0oKTsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIubURlZmF1bHRUcmFuc2Zvcm0uc2V0TmFtZSgiX19EZWZhdWx0VHJhbnNmb3JtIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXIubURlZmF1bHRUcmFuc2Zvcm07Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTY2VuZU1hbmFnZXIgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgICAgIGlmIChzU2NlbmVNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgICAgIHNTY2VuZU1hbmFnZXIgPSBuZXcgU2NlbmVNYW5hZ2VyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNTY2VuZU1hbmFnZXI7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFNjZW5lTWFuYWdlcigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkTW9kZWwoU3RyaW5nIG5hbWUsIFNjZW5lTG9hZGVkQ2FsbGJhY2sgY2IpIHsKLSAgICAgICAgQ29sbGFkYVNjZW5lIHNjZW5lID0gbmV3IENvbGxhZGFTY2VuZShuYW1lLCBjYik7Ci0gICAgICAgIHNjZW5lLmluaXQobVJTLCBtUmVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWVzaCBnZXRTY3JlZW5BbGlnbmVkUXVhZCgpIHsKLSAgICAgICAgaWYgKG1RdWFkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtUXVhZDsKLSAgICAgICAgfQotCi0gICAgICAgIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlciB0bWIgPSBuZXcgTWVzaC5UcmlhbmdsZU1lc2hCdWlsZGVyKG1SUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCBNZXNoLlRyaWFuZ2xlTWVzaEJ1aWxkZXIuVEVYVFVSRV8wKTsKLQotICAgICAgICB0bWIuc2V0VGV4dHVyZSgwLjBmLCAxLjBmKS5hZGRWZXJ0ZXgoLTEuMGYsIDEuMGYsIDEuMGYpOwotICAgICAgICB0bWIuc2V0VGV4dHVyZSgwLjBmLCAwLjBmKS5hZGRWZXJ0ZXgoLTEuMGYsIC0xLjBmLCAxLjBmKTsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMS4wZiwgMC4wZikuYWRkVmVydGV4KDEuMGYsIC0xLjBmLCAxLjBmKTsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMS4wZiwgMS4wZikuYWRkVmVydGV4KDEuMGYsIDEuMGYsIDEuMGYpOwotCi0gICAgICAgIHRtYi5hZGRUcmlhbmdsZSgwLCAxLCAyKTsKLSAgICAgICAgdG1iLmFkZFRyaWFuZ2xlKDIsIDMsIDApOwotCi0gICAgICAgIG1RdWFkID0gdG1iLmNyZWF0ZSh0cnVlKTsKLSAgICAgICAgcmV0dXJuIG1RdWFkOwotICAgIH0KLQotICAgIHB1YmxpYyBSZW5kZXJhYmxlIGdldFJlbmRlcmFibGVRdWFkKFN0cmluZyBuYW1lLCBSZW5kZXJTdGF0ZSBzdGF0ZSkgewotICAgICAgICBSZW5kZXJhYmxlIHF1YWQgPSBuZXcgUmVuZGVyYWJsZSgpOwotICAgICAgICBxdWFkLnNldFRyYW5zZm9ybShuZXcgTWF0cml4VHJhbnNmb3JtKCkpOwotICAgICAgICBxdWFkLnNldE1lc2goZ2V0U2NyZWVuQWxpZ25lZFF1YWQoKSk7Ci0gICAgICAgIHF1YWQuc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcXVhZC5zZXRSZW5kZXJTdGF0ZShzdGF0ZSk7Ci0gICAgICAgIHF1YWQuc2V0Q3VsbFR5cGUoMSk7Ci0gICAgICAgIHJldHVybiBxdWFkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRSUyhSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcywgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICBtQWxsb2NhdGlvbk1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQWxsb2NhdGlvbj4oKTsKLQotICAgICAgICBtUXVhZCA9IG51bGw7Ci0gICAgICAgIG1EZWZhdWx0MkQgPSBudWxsOwotICAgICAgICBtRGVmYXVsdEN1YmUgPSBudWxsOwotICAgICAgICBtRGVmYXVsdFZlcnRleCA9IG51bGw7Ci0gICAgICAgIG1Db2xvciA9IG51bGw7Ci0gICAgICAgIG1UZXh0dXJlID0gbnVsbDsKLSAgICAgICAgbURlZmF1bHRTdGF0ZSA9IG51bGw7Ci0gICAgICAgIG1EZWZhdWx0VHJhbnNmb3JtID0gbnVsbDsKLQotICAgICAgICBtRXhwb3J0U2NyaXB0ID0gbmV3IFNjcmlwdENfZXhwb3J0KHJzLCByZXMsIFIucmF3LmV4cG9ydCk7Ci0KLSAgICAgICAgbVRyYW5zZm9ybVNjcmlwdCA9IG5ldyBTY3JpcHRDX3RyYW5zZm9ybShycywgcmVzLCBSLnJhdy50cmFuc2Zvcm0pOwotICAgICAgICBtVHJhbnNmb3JtU2NyaXB0LnNldF9nVHJhbnNmb3JtU2NyaXB0KG1UcmFuc2Zvcm1TY3JpcHQpOwotCi0gICAgICAgIG1DYW1lcmFTY3JpcHQgPSBuZXcgU2NyaXB0Q19jYW1lcmEocnMsIHJlcywgUi5yYXcuY2FtZXJhKTsKLSAgICAgICAgbUxpZ2h0U2NyaXB0ID0gbmV3IFNjcmlwdENfbGlnaHQocnMsIHJlcywgUi5yYXcubGlnaHQpOwotICAgICAgICBtT2JqZWN0UGFyYW1zU2NyaXB0ID0gbmV3IFNjcmlwdENfb2JqZWN0X3BhcmFtcyhycywgcmVzLCBSLnJhdy5vYmplY3RfcGFyYW1zKTsKLSAgICAgICAgbUZyYWdtZW50UGFyYW1zU2NyaXB0ID0gbmV3IFNjcmlwdENfb2JqZWN0X3BhcmFtcyhycywgcmVzLCBSLnJhdy5mcmFnbWVudF9wYXJhbXMpOwotICAgICAgICBtVmVydGV4UGFyYW1zU2NyaXB0ID0gbmV3IFNjcmlwdENfb2JqZWN0X3BhcmFtcyhycywgcmVzLCBSLnJhdy52ZXJ0ZXhfcGFyYW1zKTsKLSAgICAgICAgbUN1bGxTY3JpcHQgPSBuZXcgU2NyaXB0Q19jdWxsKHJzLCByZXMsIFIucmF3LmN1bGwpOwotCi0gICAgICAgIG1SZW5kZXJMb29wID0gbmV3IFNjcmlwdENfcmVuZGVyKHJzLCByZXMsIFIucmF3LnJlbmRlcik7Ci0gICAgICAgIG1SZW5kZXJMb29wLnNldF9nVHJhbnNmb3JtU2NyaXB0KG1UcmFuc2Zvcm1TY3JpcHQpOwotICAgICAgICBtUmVuZGVyTG9vcC5zZXRfZ0NhbWVyYVNjcmlwdChtQ2FtZXJhU2NyaXB0KTsKLSAgICAgICAgbVJlbmRlckxvb3Auc2V0X2dMaWdodFNjcmlwdChtTGlnaHRTY3JpcHQpOwotICAgICAgICBtUmVuZGVyTG9vcC5zZXRfZ09iamVjdFBhcmFtc1NjcmlwdChtT2JqZWN0UGFyYW1zU2NyaXB0KTsKLSAgICAgICAgbVJlbmRlckxvb3Auc2V0X2dGcmFnbWVudFBhcmFtc1NjcmlwdChtRnJhZ21lbnRQYXJhbXNTY3JpcHQpOwotICAgICAgICBtUmVuZGVyTG9vcC5zZXRfZ1ZlcnRleFBhcmFtc1NjcmlwdChtVmVydGV4UGFyYW1zU2NyaXB0KTsKLSAgICAgICAgbVJlbmRlckxvb3Auc2V0X2dDdWxsU2NyaXB0KG1DdWxsU2NyaXB0KTsKLQotICAgICAgICBtUmVuZGVyTG9vcC5zZXRfZ1BGU0JhY2tncm91bmQoUHJvZ3JhbVN0b3JlLkJMRU5EX05PTkVfREVQVEhfVEVTVChtUlMpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NyaXB0QyBnZXRSZW5kZXJMb29wKCkgewotICAgICAgICByZXR1cm4gbVJlbmRlckxvb3A7Ci0gICAgfQotfQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1NoYWRlci5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TaGFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3NTExNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1NoYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lR3JhcGhCYXNlOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2hhZGVyUGFyYW07Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1GcmFnbWVudC5CdWlsZGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQGhpZGUKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFNoYWRlciBleHRlbmRzIFNjZW5lR3JhcGhCYXNlIHsKLSAgICBwcm90ZWN0ZWQgVHlwZSBtUGVyT2JqQ29uc3RhbnRzOwotICAgIHByb3RlY3RlZCBUeXBlIG1QZXJTaGFkZXJDb25zdGFudHM7Ci0KLSAgICBwcm90ZWN0ZWQgSGFzaE1hcDxTdHJpbmcsIFNoYWRlclBhcmFtPiBtU291cmNlUGFyYW1zOwotICAgIHByb3RlY3RlZCBBcnJheUxpc3Q8U3RyaW5nPiBtU2hhZGVyVGV4dHVyZU5hbWVzOwotICAgIHByb3RlY3RlZCBBcnJheUxpc3Q8UHJvZ3JhbS5UZXh0dXJlVHlwZSA+IG1TaGFkZXJUZXh0dXJlVHlwZXM7Ci0gICAgcHJvdGVjdGVkIEFycmF5TGlzdDxTdHJpbmc+IG1UZXh0dXJlTmFtZXM7Ci0gICAgcHJvdGVjdGVkIEFycmF5TGlzdDxQcm9ncmFtLlRleHR1cmVUeXBlID4gbVRleHR1cmVUeXBlczsKLQotICAgIHByb3RlY3RlZCBBbGxvY2F0aW9uIG1Db25zdGFudEJ1ZmZlcjsKLSAgICBwcm90ZWN0ZWQgU2NyaXB0RmllbGRfU2hhZGVyUGFyYW1fcyBtQ29uc3RhbnRCdWZmZXJQYXJhbXM7Ci0KLSAgICBwdWJsaWMgU2hhZGVyKCkgewotICAgICAgICBtU291cmNlUGFyYW1zID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTaGFkZXJQYXJhbT4oKTsKLSAgICAgICAgbVNoYWRlclRleHR1cmVOYW1lcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgICAgICBtU2hhZGVyVGV4dHVyZVR5cGVzID0gbmV3IEFycmF5TGlzdDxQcm9ncmFtLlRleHR1cmVUeXBlPigpOwotICAgICAgICBtVGV4dHVyZU5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG1UZXh0dXJlVHlwZXMgPSBuZXcgQXJyYXlMaXN0PFByb2dyYW0uVGV4dHVyZVR5cGU+KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kU291cmNlUGFyYW1zKFNoYWRlclBhcmFtIHApIHsKLSAgICAgICAgbVNvdXJjZVBhcmFtcy5wdXQocC5nZXRQYXJhbU5hbWUoKSwgcCk7Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGUgZ2V0T2JqZWN0Q29uc3RhbnRzKCkgewotICAgICAgICByZXR1cm4gbVBlck9iakNvbnN0YW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZSBnZXRTaGFkZXJDb25zdGFudHMoKSB7Ci0gICAgICAgIHJldHVybiBtUGVyT2JqQ29uc3RhbnRzOwotICAgIH0KLQotICAgIHZvaWQgbGlua0NvbnN0YW50cyhSZW5kZXJTY3JpcHRHTCBycykgewotICAgICAgICBpZiAobVBlclNoYWRlckNvbnN0YW50cyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBFbGVtZW50IGNvbnN0RWxlbSA9IG1QZXJTaGFkZXJDb25zdGFudHMuZ2V0RWxlbWVudCgpOwotICAgICAgICBtQ29uc3RhbnRCdWZmZXJQYXJhbXMgID0gU2hhZGVyUGFyYW0uZmlsbEluUGFyYW1zKGNvbnN0RWxlbSwgbVNvdXJjZVBhcmFtcywgbnVsbCk7Ci0KLSAgICAgICAgbUNvbnN0YW50QnVmZmVyID0gQWxsb2NhdGlvbi5jcmVhdGVUeXBlZChycywgbVBlclNoYWRlckNvbnN0YW50cyk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TaGFkZXJQYXJhbS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9TaGFkZXJQYXJhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGQ0MWNhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvU2hhZGVyUGFyYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zY2VuZWdyYXBoOwotCi1pbXBvcnQgamF2YS5sYW5nLk1hdGg7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguVHJhbnNmb3JtOwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NYXRyaXg0ZjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1WZXJ0ZXg7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2hhZGVyUGFyYW0gZXh0ZW5kcyBTY2VuZUdyYXBoQmFzZSB7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGNhbWVyYVBvcyAgICAgICAgPSAiY2FtZXJhUG9zIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGNhbWVyYURpciAgICAgICAgPSAiY2FtZXJhRGlyIjsKLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgbGlnaHRDb2xvciAgICAgICA9ICJsaWdodENvbG9yIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGxpZ2h0UG9zICAgICAgICAgPSAibGlnaHRQb3MiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgbGlnaHREaXIgICAgICAgICA9ICJsaWdodERpciI7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIHZpZXcgICAgICAgICAgICAgPSAidmlldyI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBwcm9qICAgICAgICAgICAgID0gInByb2oiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgdmlld1Byb2ogICAgICAgICA9ICJ2aWV3UHJvaiI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBtb2RlbCAgICAgICAgICAgID0gIm1vZGVsIjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIG1vZGVsVmlldyAgICAgICAgPSAibW9kZWxWaWV3IjsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIG1vZGVsVmlld1Byb2ogICAgPSAibW9kZWxWaWV3UHJvaiI7Ci0KLSAgICBzdGF0aWMgZmluYWwgbG9uZyBzTWF4VGltZVN0YW1wID0gMHhmZmZmZmZmZkw7Ci0KLSAgICBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbURhdGFfcy5JdGVtIG1EYXRhOwotICAgIFNjcmlwdEZpZWxkX1NoYWRlclBhcmFtRGF0YV9zIG1GaWVsZDsKLQotICAgIFN0cmluZyBtUGFyYW1OYW1lOwotICAgIENhbWVyYSBtQ2FtZXJhOwotCi0gICAgc3RhdGljIFNjcmlwdEZpZWxkX1NoYWRlclBhcmFtX3MgZmlsbEluUGFyYW1zKEVsZW1lbnQgY29uc3RhbnRFbGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgU2hhZGVyUGFyYW0+IHNvdXJjZVBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtIHRyYW5zZm9ybSkgewotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBBcnJheUxpc3Q8U2NyaXB0RmllbGRfU2hhZGVyUGFyYW1fcy5JdGVtPiBwYXJhbUxpc3Q7Ci0gICAgICAgIHBhcmFtTGlzdCA9IG5ldyBBcnJheUxpc3Q8U2NyaXB0RmllbGRfU2hhZGVyUGFyYW1fcy5JdGVtPigpOwotCi0gICAgICAgIGludCBzdWJFbGVtQ291bnQgPSBjb25zdGFudEVsZW0uZ2V0U3ViRWxlbWVudENvdW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3ViRWxlbUNvdW50OyBpICsrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5wdXROYW1lID0gY29uc3RhbnRFbGVtLmdldFN1YkVsZW1lbnROYW1lKGkpOwotICAgICAgICAgICAgaW50IG9mZnNldCA9IGNvbnN0YW50RWxlbS5nZXRTdWJFbGVtZW50T2Zmc2V0Qnl0ZXMoaSk7Ci0KLSAgICAgICAgICAgIFNoYWRlclBhcmFtIG1hdGNoaW5nUGFyYW0gPSBzb3VyY2VQYXJhbXMuZ2V0KGlucHV0TmFtZSk7Ci0gICAgICAgICAgICBFbGVtZW50IHN1YkVsZW0gPSBjb25zdGFudEVsZW0uZ2V0U3ViRWxlbWVudChpKTsKLSAgICAgICAgICAgIC8vIE1ha2Ugb25lIGlmIGl0J3Mgbm90IHRoZXJlCi0gICAgICAgICAgICBpZiAobWF0Y2hpbmdQYXJhbSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN1YkVsZW0uZ2V0RGF0YVR5cGUoKSA9PSBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nUGFyYW0gPSBuZXcgRmxvYXQ0UGFyYW0oaW5wdXROYW1lLCAwLjVmLCAwLjVmLCAwLjVmLCAwLjVmKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YkVsZW0uZ2V0RGF0YVR5cGUoKSA9PSBFbGVtZW50LkRhdGFUeXBlLk1BVFJJWF80WDQpIHsKLSAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtUGFyYW0gdHJQYXJhbSA9IG5ldyBUcmFuc2Zvcm1QYXJhbShpbnB1dE5hbWUpOwotICAgICAgICAgICAgICAgICAgICB0clBhcmFtLnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwotICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtID0gdHJQYXJhbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zLkl0ZW0gcGFyYW1SUyA9IG5ldyBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zLkl0ZW0oKTsKLSAgICAgICAgICAgIHBhcmFtUlMuYnVmZmVyT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAgICAgcGFyYW1SUy50cmFuc2Zvcm1UaW1lc3RhbXAgPSAwOwotICAgICAgICAgICAgcGFyYW1SUy5kYXRhVGltZXN0YW1wID0gMDsKLSAgICAgICAgICAgIHBhcmFtUlMuZGF0YSA9IG1hdGNoaW5nUGFyYW0uZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICAgICAgaWYgKHN1YkVsZW0uZ2V0RGF0YVR5cGUoKSA9PSBFbGVtZW50LkRhdGFUeXBlLkZMT0FUXzMyKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1SUy5mbG9hdF92ZWNTaXplID0gc3ViRWxlbS5nZXRWZWN0b3JTaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBhcmFtTGlzdC5hZGQocGFyYW1SUyk7Ci0gICAgICAgIH0KLQotICAgICAgICBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zIHJzUGFyYW1zID0gbnVsbDsKLSAgICAgICAgaW50IHBhcmFtQ291bnQgPSBwYXJhbUxpc3Quc2l6ZSgpOwotICAgICAgICBpZiAocGFyYW1Db3VudCAhPSAwKSB7Ci0gICAgICAgICAgICByc1BhcmFtcyA9IG5ldyBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbV9zKHJzLCBwYXJhbUNvdW50KTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgcnNQYXJhbXMuc2V0KHBhcmFtTGlzdC5nZXQoaSksIGksIGZhbHNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJzUGFyYW1zLmNvcHlBbGwoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnNQYXJhbXM7Ci0gICAgfQotCi0gICAgcHVibGljIFNoYWRlclBhcmFtKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIG1QYXJhbU5hbWUgPSBuYW1lOwotICAgICAgICBtRGF0YSA9IG5ldyBTY3JpcHRGaWVsZF9TaGFkZXJQYXJhbURhdGFfcy5JdGVtKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRQYXJhbU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBtUGFyYW1OYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldENhbWVyYShDYW1lcmEgYykgewotICAgICAgICBtQ2FtZXJhID0gYzsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRGF0YS5jYW1lcmEgPSBtQ2FtZXJhLmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIG1GaWVsZC5zZXRfY2FtZXJhKDAsIG1EYXRhLmNhbWVyYSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbmNUaW1lc3RhbXAoKSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgbURhdGEudGltZXN0YW1wICsrOwotICAgICAgICAgICAgbURhdGEudGltZXN0YW1wICU9IHNNYXhUaW1lU3RhbXA7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X3RpbWVzdGFtcCgwLCBtRGF0YS50aW1lc3RhbXAsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYWJzdHJhY3Qgdm9pZCBpbml0TG9jYWxEYXRhKCk7Ci0KLSAgICBwdWJsaWMgU2NyaXB0RmllbGRfU2hhZGVyUGFyYW1EYXRhX3MgZ2V0UlNEYXRhKCkgewotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBtRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfU2hhZGVyUGFyYW1EYXRhX3MocnMsIDEpOwotCi0gICAgICAgIGlmIChtUGFyYW1OYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EYXRhLnBhcmFtTmFtZSA9IFNjZW5lTWFuYWdlci5nZXRDYWNoZWRBbGxvYyhtUGFyYW1OYW1lKTsKLSAgICAgICAgICAgIGlmIChtRGF0YS5wYXJhbU5hbWUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG1EYXRhLnBhcmFtTmFtZSA9IFNjZW5lTWFuYWdlci5nZXRTdHJpbmdBc0FsbG9jYXRpb24ocnMsIG1QYXJhbU5hbWUpOwotICAgICAgICAgICAgICAgIFNjZW5lTWFuYWdlci5jYWNoZUFsbG9jKG1QYXJhbU5hbWUsIG1EYXRhLnBhcmFtTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5pdExvY2FsRGF0YSgpOwotICAgICAgICBtRGF0YS50aW1lc3RhbXAgPSAxOwotCi0gICAgICAgIG1GaWVsZC5zZXQobURhdGEsIDAsIHRydWUpOwotICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgIH0KLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmUyRC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlMkQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzYWI4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmUyRC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0dXJlMkQgZXh0ZW5kcyBUZXh0dXJlQmFzZSB7Ci0gICAgU3RyaW5nIG1GaWxlTmFtZTsKLSAgICBTdHJpbmcgbUZpbGVEaXI7Ci0gICAgaW50IG1SZXNvdXJjZUlEOwotCi0gICAgcHVibGljIFRleHR1cmUyRCgpIHsKLSAgICAgICAgc3VwZXIoU2NyaXB0Q19leHBvcnQuY29uc3RfVGV4dHVyZVR5cGVfVEVYVFVSRV8yRCk7Ci0gICAgfQotCi0gICAgcHVibGljIFRleHR1cmUyRChBbGxvY2F0aW9uIHRleCkgewotICAgICAgICBzdXBlcihTY3JpcHRDX2V4cG9ydC5jb25zdF9UZXh0dXJlVHlwZV9URVhUVVJFXzJEKTsKLSAgICAgICAgc2V0VGV4dHVyZSh0ZXgpOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXh0dXJlMkQoU3RyaW5nIGRpciwgU3RyaW5nIGZpbGUpIHsKLSAgICAgICAgc3VwZXIoU2NyaXB0Q19leHBvcnQuY29uc3RfVGV4dHVyZVR5cGVfVEVYVFVSRV9DVUJFKTsKLSAgICAgICAgc2V0RmlsZURpcihkaXIpOwotICAgICAgICBzZXRGaWxlTmFtZShmaWxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGV4dHVyZTJEKGludCByZXNvdXJjZUlEKSB7Ci0gICAgICAgIHN1cGVyKFNjcmlwdENfZXhwb3J0LmNvbnN0X1RleHR1cmVUeXBlX1RFWFRVUkVfMkQpOwotICAgICAgICBtUmVzb3VyY2VJRCA9IHJlc291cmNlSUQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmlsZURpcihTdHJpbmcgZGlyKSB7Ci0gICAgICAgIG1GaWxlRGlyID0gZGlyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpbGVOYW1lKFN0cmluZyBmaWxlKSB7Ci0gICAgICAgIG1GaWxlTmFtZSA9IGZpbGU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGaWxlTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG1GaWxlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0dXJlKEFsbG9jYXRpb24gdGV4KSB7Ci0gICAgICAgIG1EYXRhLnRleHR1cmUgPSB0ZXggIT0gbnVsbCA/IHRleCA6IFNjZW5lTWFuYWdlci5nZXREZWZhdWx0VGV4MkQoKTsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X3RleHR1cmUoMCwgbURhdGEudGV4dHVyZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGxvYWQoKSB7Ci0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBTY2VuZU1hbmFnZXIuZ2V0UmVzKCk7Ci0gICAgICAgIGlmIChtRmlsZU5hbWUgIT0gbnVsbCAmJiBtRmlsZU5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2hvcnROYW1lID0gbUZpbGVOYW1lLnN1YnN0cmluZyhtRmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwotICAgICAgICAgICAgc2V0VGV4dHVyZShTY2VuZU1hbmFnZXIubG9hZFRleHR1cmUyRChtRmlsZURpciArIHNob3J0TmFtZSwgcnMsIHJlcykpOwotICAgICAgICB9IGVsc2UgaWYgKG1SZXNvdXJjZUlEICE9IDApIHsKLSAgICAgICAgICAgIHNldFRleHR1cmUoU2NlbmVNYW5hZ2VyLmxvYWRUZXh0dXJlMkQobVJlc291cmNlSUQsIHJzLCByZXMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX1RleHR1cmVfcyBnZXRSc0RhdGEoYm9vbGVhbiBsb2FkTm93KSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBTY2VuZU1hbmFnZXIuZ2V0UmVzKCk7Ci0gICAgICAgIGlmIChycyA9PSBudWxsIHx8IHJlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0dXJlX3MocnMsIDEpOwotCi0gICAgICAgIGlmIChsb2FkTm93KSB7Ci0gICAgICAgICAgICBsb2FkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtRGF0YS50ZXh0dXJlID0gU2NlbmVNYW5hZ2VyLmdldERlZmF1bHRUZXgyRCgpOwotICAgICAgICAgICAgbmV3IFNpbmdsZUltYWdlTG9hZGVyVGFzaygpLmV4ZWN1dGUodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBtRmllbGQuc2V0KG1EYXRhLCAwLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlQmFzZS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlQmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTQ5ZDRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvVGV4dHVyZUJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgVGV4dHVyZUJhc2UgZXh0ZW5kcyBTY2VuZUdyYXBoQmFzZSB7Ci0KLSAgICBjbGFzcyBTaW5nbGVJbWFnZUxvYWRlclRhc2sgZXh0ZW5kcyBBc3luY1Rhc2s8VGV4dHVyZUJhc2UsIFZvaWQsIEJvb2xlYW4+IHsKLSAgICAgICAgcHJvdGVjdGVkIEJvb2xlYW4gZG9JbkJhY2tncm91bmQoVGV4dHVyZUJhc2UuLi4gb2JqZWN0cykgewotICAgICAgICAgICAgVGV4dHVyZUJhc2UgdGV4ID0gb2JqZWN0c1swXTsKLSAgICAgICAgICAgIHRleC5sb2FkKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJvb2xlYW4odHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0RXhlY3V0ZShCb29sZWFuIHJlc3VsdCkgewotICAgICAgICB9Ci0gICAgfQotCi0gICAgU2NyaXB0RmllbGRfVGV4dHVyZV9zLkl0ZW0gbURhdGE7Ci0gICAgU2NyaXB0RmllbGRfVGV4dHVyZV9zIG1GaWVsZDsKLSAgICBUZXh0dXJlQmFzZShpbnQgdHlwZSkgewotICAgICAgICBtRGF0YSA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0dXJlX3MuSXRlbSgpOwotICAgICAgICBtRGF0YS50eXBlID0gdHlwZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgQWxsb2NhdGlvbiBtUnNUZXh0dXJlOwotICAgIGFic3RyYWN0IFNjcmlwdEZpZWxkX1RleHR1cmVfcyBnZXRSc0RhdGEoYm9vbGVhbiBsb2FkTm93KTsKLSAgICBhYnN0cmFjdCB2b2lkIGxvYWQoKTsKLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVDdWJlLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVDdWJlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNjllM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlQ3ViZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguVGV4dHVyZUJhc2U7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIFRleHR1cmVDdWJlIGV4dGVuZHMgVGV4dHVyZUJhc2UgewotICAgIFN0cmluZyBtRmlsZU5hbWU7Ci0gICAgU3RyaW5nIG1GaWxlRGlyOwotICAgIGludCBtUmVzb3VyY2VJRDsKLQotICAgIHB1YmxpYyBUZXh0dXJlQ3ViZSgpIHsKLSAgICAgICAgc3VwZXIoU2NyaXB0Q19leHBvcnQuY29uc3RfVGV4dHVyZVR5cGVfVEVYVFVSRV9DVUJFKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGV4dHVyZUN1YmUoQWxsb2NhdGlvbiB0ZXgpIHsKLSAgICAgICAgc3VwZXIoU2NyaXB0Q19leHBvcnQuY29uc3RfVGV4dHVyZVR5cGVfVEVYVFVSRV9DVUJFKTsKLSAgICAgICAgc2V0VGV4dHVyZSh0ZXgpOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXh0dXJlQ3ViZShTdHJpbmcgZGlyLCBTdHJpbmcgZmlsZSkgewotICAgICAgICBzdXBlcihTY3JpcHRDX2V4cG9ydC5jb25zdF9UZXh0dXJlVHlwZV9URVhUVVJFX0NVQkUpOwotICAgICAgICBzZXRGaWxlRGlyKGRpcik7Ci0gICAgICAgIHNldEZpbGVOYW1lKGZpbGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXh0dXJlQ3ViZShpbnQgcmVzb3VyY2VJRCkgewotICAgICAgICBzdXBlcihTY3JpcHRDX2V4cG9ydC5jb25zdF9UZXh0dXJlVHlwZV9URVhUVVJFXzJEKTsKLSAgICAgICAgbVJlc291cmNlSUQgPSByZXNvdXJjZUlEOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpbGVEaXIoU3RyaW5nIGRpcikgewotICAgICAgICBtRmlsZURpciA9IGRpcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaWxlTmFtZShTdHJpbmcgZmlsZSkgewotICAgICAgICBtRmlsZU5hbWUgPSBmaWxlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RmlsZU5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBtRmlsZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGV4dHVyZShBbGxvY2F0aW9uIHRleCkgewotICAgICAgICBtRGF0YS50ZXh0dXJlID0gdGV4ICE9IG51bGwgPyB0ZXggOiBTY2VuZU1hbmFnZXIuZ2V0RGVmYXVsdFRleEN1YmUoKTsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRmllbGQuc2V0X3RleHR1cmUoMCwgbURhdGEudGV4dHVyZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGxvYWQoKSB7Ci0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBTY2VuZU1hbmFnZXIuZ2V0UmVzKCk7Ci0gICAgICAgIGlmIChtRmlsZU5hbWUgIT0gbnVsbCAmJiBtRmlsZU5hbWUubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc2hvcnROYW1lID0gbUZpbGVOYW1lLnN1YnN0cmluZyhtRmlsZU5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwotICAgICAgICAgICAgc2V0VGV4dHVyZShTY2VuZU1hbmFnZXIubG9hZEN1YmVtYXAobUZpbGVEaXIgKyBzaG9ydE5hbWUsIHJzLCByZXMpKTsKLSAgICAgICAgfSBlbHNlIGlmIChtUmVzb3VyY2VJRCAhPSAwKSB7Ci0gICAgICAgICAgICBzZXRUZXh0dXJlKFNjZW5lTWFuYWdlci5sb2FkQ3ViZW1hcChtUmVzb3VyY2VJRCAsIHJzLCByZXMpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX1RleHR1cmVfcyBnZXRSc0RhdGEoYm9vbGVhbiBsb2FkTm93KSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIFJlc291cmNlcyByZXMgPSBTY2VuZU1hbmFnZXIuZ2V0UmVzKCk7Ci0gICAgICAgIGlmIChycyA9PSBudWxsIHx8IHJlcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0dXJlX3MocnMsIDEpOwotCi0gICAgICAgIGlmIChsb2FkTm93KSB7Ci0gICAgICAgICAgICBsb2FkKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtRGF0YS50ZXh0dXJlID0gU2NlbmVNYW5hZ2VyLmdldERlZmF1bHRUZXhDdWJlKCk7Ci0gICAgICAgICAgICBuZXcgU2luZ2xlSW1hZ2VMb2FkZXJUYXNrKCkuZXhlY3V0ZSh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZC5zZXQobURhdGEsIDAsIHRydWUpOwotICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgIH0KLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVQYXJhbS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlUGFyYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY1NmVkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVQYXJhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkNhbWVyYTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5GbG9hdDQ7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgVGV4dHVyZVBhcmFtIGV4dGVuZHMgU2hhZGVyUGFyYW0gewotCi0gICAgVGV4dHVyZUJhc2UgbVRleHR1cmU7Ci0KLSAgICBwdWJsaWMgVGV4dHVyZVBhcmFtKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXh0dXJlUGFyYW0oU3RyaW5nIG5hbWUsIFRleHR1cmVCYXNlIHQpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIHNldFRleHR1cmUodCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGV4dHVyZShUZXh0dXJlQmFzZSB0KSB7Ci0gICAgICAgIG1UZXh0dXJlID0gdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVGV4dHVyZUJhc2UgZ2V0VGV4dHVyZSgpIHsKLSAgICAgICAgcmV0dXJuIG1UZXh0dXJlOwotICAgIH0KLQotICAgIHZvaWQgaW5pdExvY2FsRGF0YSgpIHsKLSAgICAgICAgbURhdGEudHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX1RFWFRVUkU7Ci0gICAgICAgIGlmIChtVGV4dHVyZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtRGF0YS50ZXh0dXJlID0gbVRleHR1cmUuZ2V0UnNEYXRhKGZhbHNlKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UZXh0dXJlUmVuZGVyVGFyZ2V0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVSZW5kZXJUYXJnZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFhMjlhNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1RleHR1cmVSZW5kZXJUYXJnZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguU2NlbmVNYW5hZ2VyOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXh0dXJlUmVuZGVyVGFyZ2V0IGV4dGVuZHMgVGV4dHVyZUJhc2UgewotICAgIHB1YmxpYyBUZXh0dXJlUmVuZGVyVGFyZ2V0KCkgewotICAgICAgICBzdXBlcihTY3JpcHRDX2V4cG9ydC5jb25zdF9UZXh0dXJlVHlwZV9URVhUVVJFX1JFTkRFUl9UQVJHRVQpOwotICAgIH0KLQotICAgIHB1YmxpYyBUZXh0dXJlUmVuZGVyVGFyZ2V0KEFsbG9jYXRpb24gdGV4KSB7Ci0gICAgICAgIHN1cGVyKFNjcmlwdENfZXhwb3J0LmNvbnN0X1RleHR1cmVUeXBlX1RFWFRVUkVfUkVOREVSX1RBUkdFVCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXh0dXJlKEFsbG9jYXRpb24gdGV4KSB7Ci0gICAgICAgIG1EYXRhLnRleHR1cmUgPSB0ZXg7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgbUZpZWxkLnNldF90ZXh0dXJlKDAsIG1EYXRhLnRleHR1cmUsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBsb2FkKCkgewotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX1RleHR1cmVfcyBnZXRSc0RhdGEoYm9vbGVhbiBsb2FkTm93KSB7Ci0gICAgICAgIGlmIChtRmllbGQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlclNjcmlwdEdMIHJzID0gU2NlbmVNYW5hZ2VyLmdldFJTKCk7Ci0gICAgICAgIGlmIChycyA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1GaWVsZCA9IG5ldyBTY3JpcHRGaWVsZF9UZXh0dXJlX3MocnMsIDEpOwotICAgICAgICBtRmllbGQuc2V0KG1EYXRhLCAwLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UcmFuc2Zvcm0uamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvVHJhbnNmb3JtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxODBiZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UcmFuc2Zvcm0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuKjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NYXRyaXg0ZjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEBoaWRlCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBUcmFuc2Zvcm0gZXh0ZW5kcyBTY2VuZUdyYXBoQmFzZSB7Ci0gICAgVHJhbnNmb3JtIG1QYXJlbnQ7Ci0gICAgQXJyYXlMaXN0PFRyYW5zZm9ybT4gbUNoaWxkcmVuOwotCi0gICAgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0gbUZpZWxkOwotICAgIFNjcmlwdEZpZWxkX1NnVHJhbnNmb3JtLkl0ZW0gbVRyYW5zZm9ybURhdGE7Ci0KLSAgICBwdWJsaWMgVHJhbnNmb3JtKCkgewotICAgICAgICBtQ2hpbGRyZW4gPSBuZXcgQXJyYXlMaXN0PFRyYW5zZm9ybT4oKTsKLSAgICAgICAgbVBhcmVudCA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYXBwZW5kQ2hpbGQoVHJhbnNmb3JtIHQpIHsKLSAgICAgICAgbUNoaWxkcmVuLmFkZCh0KTsKLSAgICAgICAgdC5tUGFyZW50ID0gdGhpczsKLSAgICAgICAgdXBkYXRlUlNDaGlsZERhdGEodHJ1ZSk7Ci0gICAgfQotCi0gICAgYWJzdHJhY3Qgdm9pZCBpbml0TG9jYWxEYXRhKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVJTQ2hpbGREYXRhKGJvb2xlYW4gY29weURhdGEpIHsKLSAgICAgICAgaWYgKG1GaWVsZCA9PSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBTY2VuZU1hbmFnZXIuZ2V0UlMoKTsKLSAgICAgICAgaWYgKG1DaGlsZHJlbi5zaXplKCkgIT0gMCkgewotICAgICAgICAgICAgQWxsb2NhdGlvbiBjaGlsZFJTRGF0YSA9IEFsbG9jYXRpb24uY3JlYXRlU2l6ZWQocnMsIEVsZW1lbnQuQUxMT0NBVElPTihycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIG1UcmFuc2Zvcm1EYXRhLmNoaWxkcmVuID0gY2hpbGRSU0RhdGE7Ci0KLSAgICAgICAgICAgIEFsbG9jYXRpb25bXSBjaGlsZHJlbkFsbG9jcyA9IG5ldyBBbGxvY2F0aW9uW21DaGlsZHJlbi5zaXplKCldOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtQ2hpbGRyZW4uc2l6ZSgpOyBpICsrKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtIGNoaWxkID0gbUNoaWxkcmVuLmdldChpKTsKLSAgICAgICAgICAgICAgICBjaGlsZHJlbkFsbG9jc1tpXSA9IGNoaWxkLmdldFJTRGF0YSgpLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoaWxkUlNEYXRhLmNvcHlGcm9tKGNoaWxkcmVuQWxsb2NzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29weURhdGEpIHsKLSAgICAgICAgICAgIG1GaWVsZC5zZXQobVRyYW5zZm9ybURhdGEsIDAsIHRydWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU2NyaXB0RmllbGRfU2dUcmFuc2Zvcm0gZ2V0UlNEYXRhKCkgewotICAgICAgICBpZiAobUZpZWxkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBtRmllbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBSZW5kZXJTY3JpcHRHTCBycyA9IFNjZW5lTWFuYWdlci5nZXRSUygpOwotICAgICAgICBpZiAocnMgPT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgbUZpZWxkID0gbmV3IFNjcmlwdEZpZWxkX1NnVHJhbnNmb3JtKHJzLCAxKTsKLQotICAgICAgICBtVHJhbnNmb3JtRGF0YSA9IG5ldyBTY3JpcHRGaWVsZF9TZ1RyYW5zZm9ybS5JdGVtKCk7Ci0gICAgICAgIG1UcmFuc2Zvcm1EYXRhLm5hbWUgPSBnZXROYW1lQWxsb2MocnMpOwotICAgICAgICBtVHJhbnNmb3JtRGF0YS5pc0RpcnR5ID0gMTsKLSAgICAgICAgbVRyYW5zZm9ybURhdGEudGltZXN0YW1wID0gMTsKLQotICAgICAgICBpbml0TG9jYWxEYXRhKCk7Ci0gICAgICAgIHVwZGF0ZVJTQ2hpbGREYXRhKGZhbHNlKTsKLQotICAgICAgICBtRmllbGQuc2V0KG1UcmFuc2Zvcm1EYXRhLCAwLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIG1GaWVsZDsKLSAgICB9Ci19Ci0KLQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UcmFuc2Zvcm1QYXJhbS5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9UcmFuc2Zvcm1QYXJhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTIwZDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvVHJhbnNmb3JtUGFyYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGg7Ci0KLWltcG9ydCBqYXZhLmxhbmcuTWF0aDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuTWF0cml4NGY7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBAaGlkZQotICovCi1wdWJsaWMgY2xhc3MgVHJhbnNmb3JtUGFyYW0gZXh0ZW5kcyBTaGFkZXJQYXJhbSB7Ci0KLSAgICBUcmFuc2Zvcm0gbVRyYW5zZm9ybTsKLSAgICBMaWdodEJhc2UgbUxpZ2h0OwotCi0gICAgcHVibGljIFRyYW5zZm9ybVBhcmFtKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRyYW5zZm9ybShUcmFuc2Zvcm0gdCkgewotICAgICAgICBtVHJhbnNmb3JtID0gdDsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsICYmIG1UcmFuc2Zvcm0gIT0gbnVsbCkgewotICAgICAgICAgICAgbURhdGEudHJhbnNmb3JtID0gbVRyYW5zZm9ybS5nZXRSU0RhdGEoKS5nZXRBbGxvY2F0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW5jVGltZXN0YW1wKCk7Ci0gICAgfQotCi0gICAgaW50IGdldFR5cGVGcm9tTmFtZSgpIHsKLSAgICAgICAgaW50IHBhcmFtVHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX1RSQU5TRk9STV9EQVRBOwotICAgICAgICBpZiAobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKHZpZXcpKSB7Ci0gICAgICAgICAgICBwYXJhbVR5cGUgPSBTY3JpcHRDX2V4cG9ydC5jb25zdF9TaGFkZXJQYXJhbV9UUkFOU0ZPUk1fVklFVzsKLSAgICAgICAgfSBlbHNlIGlmKG1QYXJhbU5hbWUuZXF1YWxzSWdub3JlQ2FzZShwcm9qKSkgewotICAgICAgICAgICAgcGFyYW1UeXBlID0gU2NyaXB0Q19leHBvcnQuY29uc3RfU2hhZGVyUGFyYW1fVFJBTlNGT1JNX1BST0o7Ci0gICAgICAgIH0gZWxzZSBpZihtUGFyYW1OYW1lLmVxdWFsc0lnbm9yZUNhc2Uodmlld1Byb2opKSB7Ci0gICAgICAgICAgICBwYXJhbVR5cGUgPSBTY3JpcHRDX2V4cG9ydC5jb25zdF9TaGFkZXJQYXJhbV9UUkFOU0ZPUk1fVklFV19QUk9KOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKG1vZGVsKSkgewotICAgICAgICAgICAgcGFyYW1UeXBlID0gU2NyaXB0Q19leHBvcnQuY29uc3RfU2hhZGVyUGFyYW1fVFJBTlNGT1JNX01PREVMOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKG1vZGVsVmlldykpIHsKLSAgICAgICAgICAgIHBhcmFtVHlwZSA9IFNjcmlwdENfZXhwb3J0LmNvbnN0X1NoYWRlclBhcmFtX1RSQU5TRk9STV9NT0RFTF9WSUVXOwotICAgICAgICB9IGVsc2UgaWYobVBhcmFtTmFtZS5lcXVhbHNJZ25vcmVDYXNlKG1vZGVsVmlld1Byb2opKSB7Ci0gICAgICAgICAgICBwYXJhbVR5cGUgPSBTY3JpcHRDX2V4cG9ydC5jb25zdF9TaGFkZXJQYXJhbV9UUkFOU0ZPUk1fTU9ERUxfVklFV19QUk9KOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwYXJhbVR5cGU7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0TG9jYWxEYXRhKCkgewotICAgICAgICBtRGF0YS50eXBlID0gZ2V0VHlwZUZyb21OYW1lKCk7Ci0gICAgICAgIGlmIChtVHJhbnNmb3JtICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EYXRhLnRyYW5zZm9ybSA9IG1UcmFuc2Zvcm0uZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtQ2FtZXJhICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1EYXRhLmNhbWVyYSA9IG1DYW1lcmEuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtTGlnaHQgIT0gbnVsbCkgewotICAgICAgICAgICAgbURhdGEubGlnaHQgPSBtTGlnaHQuZ2V0UlNEYXRhKCkuZ2V0QWxsb2NhdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvVmVydGV4U2hhZGVyLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL1ZlcnRleFNoYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWZhZmY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvVmVydGV4U2hhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2NlbmVncmFwaDsKLQotaW1wb3J0IGphdmEubGFuZy5NYXRoOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlczsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQGhpZGUKLSAqLwotcHVibGljIGNsYXNzIFZlcnRleFNoYWRlciBleHRlbmRzIFNoYWRlciB7Ci0gICAgUHJvZ3JhbVZlcnRleCBtUHJvZ3JhbTsKLSAgICBTY3JpcHRGaWVsZF9WZXJ0ZXhTaGFkZXJfcyBtRmllbGQ7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1aWxkZXIgewotICAgICAgICBWZXJ0ZXhTaGFkZXIgbVNoYWRlcjsKLSAgICAgICAgUHJvZ3JhbVZlcnRleC5CdWlsZGVyIG1CdWlsZGVyOwotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyKFJlbmRlclNjcmlwdEdMIHJzKSB7Ci0gICAgICAgICAgICBtU2hhZGVyID0gbmV3IFZlcnRleFNoYWRlcigpOwotICAgICAgICAgICAgbUJ1aWxkZXIgPSBuZXcgUHJvZ3JhbVZlcnRleC5CdWlsZGVyKHJzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFNoYWRlcihSZXNvdXJjZXMgcmVzb3VyY2VzLCBpbnQgcmVzb3VyY2VJRCkgewotICAgICAgICAgICAgbUJ1aWxkZXIuc2V0U2hhZGVyKHJlc291cmNlcywgcmVzb3VyY2VJRCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFNoYWRlcihTdHJpbmcgY29kZSkgewotICAgICAgICAgICAgbUJ1aWxkZXIuc2V0U2hhZGVyKGNvZGUpOwotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQnVpbGRlciBzZXRPYmplY3RDb25zdChUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgIG1TaGFkZXIubVBlck9iakNvbnN0YW50cyA9IHR5cGU7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCdWlsZGVyIHNldFNoYWRlckNvbnN0KFR5cGUgdHlwZSkgewotICAgICAgICAgICAgbVNoYWRlci5tUGVyU2hhZGVyQ29uc3RhbnRzID0gdHlwZTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEJ1aWxkZXIgYWRkSW5wdXQoRWxlbWVudCBlKSB7Ci0gICAgICAgICAgICBtQnVpbGRlci5hZGRJbnB1dChlKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFZlcnRleFNoYWRlciBjcmVhdGUoKSB7Ci0gICAgICAgICAgICBpZiAobVNoYWRlci5tUGVyU2hhZGVyQ29uc3RhbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBtQnVpbGRlci5hZGRDb25zdGFudChtU2hhZGVyLm1QZXJTaGFkZXJDb25zdGFudHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1TaGFkZXIubVBlck9iakNvbnN0YW50cyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbUJ1aWxkZXIuYWRkQ29uc3RhbnQobVNoYWRlci5tUGVyT2JqQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1TaGFkZXIubVByb2dyYW0gPSBtQnVpbGRlci5jcmVhdGUoKTsKLSAgICAgICAgICAgIHJldHVybiBtU2hhZGVyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFByb2dyYW1WZXJ0ZXggZ2V0UHJvZ3JhbSgpIHsKLSAgICAgICAgcmV0dXJuIG1Qcm9ncmFtOwotICAgIH0KLQotICAgIFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlcl9zIGdldFJTRGF0YSgpIHsKLSAgICAgICAgaWYgKG1GaWVsZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyU2NyaXB0R0wgcnMgPSBTY2VuZU1hbmFnZXIuZ2V0UlMoKTsKLSAgICAgICAgUmVzb3VyY2VzIHJlcyA9IFNjZW5lTWFuYWdlci5nZXRSZXMoKTsKLSAgICAgICAgaWYgKHJzID09IG51bGwgfHwgcmVzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgU2NyaXB0RmllbGRfVmVydGV4U2hhZGVyX3MuSXRlbSBpdGVtID0gbmV3IFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlcl9zLkl0ZW0oKTsKLSAgICAgICAgaXRlbS5wcm9ncmFtID0gbVByb2dyYW07Ci0KLSAgICAgICAgbGlua0NvbnN0YW50cyhycyk7Ci0gICAgICAgIGlmIChtUGVyU2hhZGVyQ29uc3RhbnRzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGl0ZW0uc2hhZGVyQ29uc3QgPSBtQ29uc3RhbnRCdWZmZXI7Ci0gICAgICAgICAgICBpdGVtLnNoYWRlckNvbnN0UGFyYW1zID0gbUNvbnN0YW50QnVmZmVyUGFyYW1zLmdldEFsbG9jYXRpb24oKTsKLSAgICAgICAgICAgIG1Qcm9ncmFtLmJpbmRDb25zdGFudHMoaXRlbS5zaGFkZXJDb25zdCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVtLm9iamVjdENvbnN0SW5kZXggPSAtMTsKLSAgICAgICAgaWYgKG1QZXJPYmpDb25zdGFudHMgIT0gbnVsbCkgewotICAgICAgICAgICAgaXRlbS5vYmplY3RDb25zdEluZGV4ID0gbVBlclNoYWRlckNvbnN0YW50cyAhPSBudWxsID8gMSA6IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBtRmllbGQgPSBuZXcgU2NyaXB0RmllbGRfVmVydGV4U2hhZGVyX3MocnMsIDEpOwotICAgICAgICBtRmllbGQuc2V0KGl0ZW0sIDAsIHRydWUpOwotICAgICAgICByZXR1cm4gbUZpZWxkOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvY2FtZXJhLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9jYW1lcmEucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMGE4ODUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9jYW1lcmEucnMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2NlbmVncmFwaCkKLQotLy8jZGVmaW5lIERFQlVHX0NBTUVSQQotI2luY2x1ZGUgInNjZW5lZ3JhcGhfb2JqZWN0cy5yc2giCi0KLXZvaWQgcm9vdChjb25zdCByc19hbGxvY2F0aW9uICp2X2luLCByc19hbGxvY2F0aW9uICp2X291dCwgY29uc3QgZmxvYXQgKnVzckRhdGEpIHsKLQotICAgIFNnQ2FtZXJhICpjYW0gPSAoU2dDYW1lcmEgKilyc0dldEVsZW1lbnRBdCgqdl9pbiwgMCk7Ci0gICAgZmxvYXQgYXNwZWN0ID0gKnVzckRhdGE7Ci0gICAgaWYgKGNhbS0+YXNwZWN0ICE9IGFzcGVjdCkgewotICAgICAgICBjYW0tPmlzRGlydHkgPSAxOwotICAgICAgICBjYW0tPmFzcGVjdCA9IGFzcGVjdDsKLSAgICB9Ci0gICAgaWYgKGNhbS0+aXNEaXJ0eSkgewotICAgICAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmY2FtLT5wcm9qLCBjYW0tPmhvcml6b250YWxGT1YsIGNhbS0+YXNwZWN0LCBjYW0tPm5lYXIsIGNhbS0+ZmFyKTsKLSAgICB9Ci0KLSAgICBjb25zdCBTZ1RyYW5zZm9ybSAqY2FtVHJhbnNmb3JtID0gKGNvbnN0IFNnVHJhbnNmb3JtICopcnNHZXRFbGVtZW50QXQoY2FtLT50cmFuc2Zvcm1NYXRyaXgsIDApOwotICAgIC8vcnNEZWJ1ZygiQ2FtZXJhIHN0YW1wIiwgY2FtLT50cmFuc2Zvcm1UaW1lc3RhbXApOwotICAgIC8vcnNEZWJ1ZygiVHJhbnNmb3JtIHN0YW1wIiwgY2FtVHJhbnNmb3JtLT50aW1lc3RhbXApOwotICAgIGlmIChjYW1UcmFuc2Zvcm0tPnRpbWVzdGFtcCAhPSBjYW0tPnRyYW5zZm9ybVRpbWVzdGFtcCB8fCBjYW0tPmlzRGlydHkpIHsKLSAgICAgICAgY2FtLT5pc0RpcnR5ID0gMTsKLSAgICAgICAgcnNfbWF0cml4NHg0IGNhbVBvc01hdHJpeDsKLSAgICAgICAgcnNNYXRyaXhMb2FkKCZjYW1Qb3NNYXRyaXgsICZjYW1UcmFuc2Zvcm0tPmdsb2JhbE1hdCk7Ci0gICAgICAgIGZsb2F0NCB6ZXJvID0gezAuMGYsIDAuMGYsIDAuMGYsIDEuMGZ9OwotICAgICAgICBjYW0tPnBvc2l0aW9uID0gcnNNYXRyaXhNdWx0aXBseSgmY2FtUG9zTWF0cml4LCB6ZXJvKTsKLQotICAgICAgICByc01hdHJpeEludmVyc2UoJmNhbVBvc01hdHJpeCk7Ci0gICAgICAgIHJzTWF0cml4TG9hZCgmY2FtLT52aWV3LCAmY2FtUG9zTWF0cml4KTsKLQotICAgICAgICByc01hdHJpeExvYWQoJmNhbS0+dmlld1Byb2osICZjYW0tPnByb2opOwotICAgICAgICByc01hdHJpeE11bHRpcGx5KCZjYW0tPnZpZXdQcm9qLCAmY2FtLT52aWV3KTsKLQotICAgICAgICByc0V4dHJhY3RGcnVzdHVtUGxhbmVzKCZjYW0tPnZpZXdQcm9qLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYW0tPmZydXN0dW1QbGFuZXNbMF0sICZjYW0tPmZydXN0dW1QbGFuZXNbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+ZnJ1c3R1bVBsYW5lc1syXSwgJmNhbS0+ZnJ1c3R1bVBsYW5lc1szXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FtLT5mcnVzdHVtUGxhbmVzWzNdLCAmY2FtLT5mcnVzdHVtUGxhbmVzWzRdKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FtLT5pc0RpcnR5KSB7Ci0gICAgICAgIGNhbS0+dGltZXN0YW1wICsrOwotICAgIH0KLQotICAgIGNhbS0+aXNEaXJ0eSA9IDA7Ci0gICAgY2FtLT50cmFuc2Zvcm1UaW1lc3RhbXAgPSBjYW1UcmFuc2Zvcm0tPnRpbWVzdGFtcDsKLQotI2lmZGVmIERFQlVHX0NBTUVSQQotICAgIHByaW50Q2FtZXJhSW5mbyhjYW0pOwotI2VuZGlmIC8vREVCVUdfQ0FNRVJBCi19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL2N1bGwucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL2N1bGwucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNGUwMjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9jdWxsLnJzCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGgpCi0KLSNpbmNsdWRlICJzY2VuZWdyYXBoX29iamVjdHMucnNoIgotCi1zdGF0aWMgdm9pZCBnZXRUcmFuc2Zvcm1lZFNwaGVyZShTZ1JlbmRlcmFibGUgKm9iaikgewotICAgIG9iai0+d29ybGRCb3VuZGluZ1NwaGVyZSA9IG9iai0+Ym91bmRpbmdTcGhlcmU7Ci0gICAgb2JqLT53b3JsZEJvdW5kaW5nU3BoZXJlLncgPSAxLjBmOwotICAgIGNvbnN0IFNnVHJhbnNmb3JtICpvYmpUcmFuc2Zvcm0gPSAoY29uc3QgU2dUcmFuc2Zvcm0gKilyc0dldEVsZW1lbnRBdChvYmotPnRyYW5zZm9ybU1hdHJpeCwgMCk7Ci0gICAgb2JqLT53b3JsZEJvdW5kaW5nU3BoZXJlID0gcnNNYXRyaXhNdWx0aXBseSgmb2JqVHJhbnNmb3JtLT5nbG9iYWxNYXQsIG9iai0+d29ybGRCb3VuZGluZ1NwaGVyZSk7Ci0KLSAgICBjb25zdCBmbG9hdDQgdW5pdFZlYyA9IHswLjU3NzM1ZiwgMC41NzczNWYsIDAuNTc3MzVmLCAwLjBmfTsKLSAgICBmbG9hdDQgc2NhbGVkVmVjID0gcnNNYXRyaXhNdWx0aXBseSgmb2JqVHJhbnNmb3JtLT5nbG9iYWxNYXQsIHVuaXRWZWMpOwotICAgIHNjYWxlZFZlYy53ID0gMC4wZjsKLSAgICBvYmotPndvcmxkQm91bmRpbmdTcGhlcmUudyA9IG9iai0+Ym91bmRpbmdTcGhlcmUudyAqIGxlbmd0aChzY2FsZWRWZWMpOwotfQotCi1zdGF0aWMgYm9vbCBmcnVzdHVtQ3VsbGVkKFNnUmVuZGVyYWJsZSAqb2JqLCBTZ0NhbWVyYSAqY2FtKSB7Ci0gICAgaWYgKCFvYmotPmJWb2xJbml0aWFsaXplZCkgewotICAgICAgICBmbG9hdCBtaW5YLCBtaW5ZLCBtaW5aLCBtYXhYLCBtYXhZLCBtYXhaOwotICAgICAgICByc2dNZXNoQ29tcHV0ZUJvdW5kaW5nQm94KG9iai0+bWVzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWluWCwgJm1pblksICZtaW5aLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhYLCAmbWF4WSwgJm1heFopOwotICAgICAgICAvL3JzRGVidWcoIm1pbiIsIG1pblgsIG1pblksIG1pblopOwotICAgICAgICAvL3JzRGVidWcoIm1heCIsIG1heFgsIG1heFksIG1heFopOwotICAgICAgICBmbG9hdDQgc3BoZXJlOwotICAgICAgICBzcGhlcmUueCA9IChtYXhYICsgbWluWCkgKiAwLjVmOwotICAgICAgICBzcGhlcmUueSA9IChtYXhZICsgbWluWSkgKiAwLjVmOwotICAgICAgICBzcGhlcmUueiA9IChtYXhaICsgbWluWikgKiAwLjVmOwotICAgICAgICBmbG9hdDMgcmFkaXVzOwotICAgICAgICByYWRpdXMueCA9IChtYXhYIC0gc3BoZXJlLngpOwotICAgICAgICByYWRpdXMueSA9IChtYXhZIC0gc3BoZXJlLnkpOwotICAgICAgICByYWRpdXMueiA9IChtYXhaIC0gc3BoZXJlLnopOwotCi0gICAgICAgIHNwaGVyZS53ID0gbGVuZ3RoKHJhZGl1cyk7Ci0gICAgICAgIG9iai0+Ym91bmRpbmdTcGhlcmUgPSBzcGhlcmU7Ci0gICAgICAgIG9iai0+YlZvbEluaXRpYWxpemVkID0gMTsKLSAgICAgICAgLy9yc0RlYnVnKCJTcGhlcmUiLCBzcGhlcmUpOwotICAgIH0KLQotICAgIGdldFRyYW5zZm9ybWVkU3BoZXJlKG9iaik7Ci0KLSAgICByZXR1cm4gIXJzSXNTcGhlcmVJbkZydXN0dW0oJm9iai0+d29ybGRCb3VuZGluZ1NwaGVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+ZnJ1c3R1bVBsYW5lc1swXSwgJmNhbS0+ZnJ1c3R1bVBsYW5lc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+ZnJ1c3R1bVBsYW5lc1syXSwgJmNhbS0+ZnJ1c3R1bVBsYW5lc1szXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhbS0+ZnJ1c3R1bVBsYW5lc1s0XSwgJmNhbS0+ZnJ1c3R1bVBsYW5lc1s1XSk7Ci19Ci0KLQotdm9pZCByb290KHJzX2FsbG9jYXRpb24gKnZfb3V0LCBjb25zdCB2b2lkICp1c3JEYXRhKSB7Ci0KLSAgICBTZ1JlbmRlcmFibGUgKmRyYXdhYmxlID0gKFNnUmVuZGVyYWJsZSAqKXJzR2V0RWxlbWVudEF0KCp2X291dCwgMCk7Ci0gICAgY29uc3QgU2dDYW1lcmEgKmNhbWVyYSA9IChjb25zdCBTZ0NhbWVyYSopdXNyRGF0YTsKLQotICAgIGRyYXdhYmxlLT5pc1Zpc2libGUgPSAwOwotICAgIC8vIE5vdCBsb2FkZWQgeWV0Ci0gICAgaWYgKCFyc0lzT2JqZWN0KGRyYXdhYmxlLT5tZXNoKSB8fCBkcmF3YWJsZS0+Y3VsbFR5cGUgPT0gQ1VMTF9BTFdBWVMpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY3VsbGluZyB0aGlzIG9iamVjdCBhbmQgaWYgaXQncwotICAgIC8vIG91dHNpZGUgdGhlIGZydXN0dW0KLSAgICBpZiAoZHJhd2FibGUtPmN1bGxUeXBlID09IENVTExfRlJVU1RVTSAmJiBmcnVzdHVtQ3VsbGVkKGRyYXdhYmxlLCAoU2dDYW1lcmEqKWNhbWVyYSkpIHsKLSNpZmRlZiBERUJVR19SRU5ERVJBQkxFUwotICAgICAgICByc0RlYnVnKCJDdWxsZWQiLCBkcmF3YWJsZSk7Ci0gICAgICAgIHByaW50TmFtZShkcmF3YWJsZS0+bmFtZSk7Ci0jZW5kaWYgLy8gREVCVUdfUkVOREVSQUJMRVMKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkcmF3YWJsZS0+aXNWaXNpYmxlID0gMTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvZXhwb3J0LnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9leHBvcnQucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MzhhNDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9leHBvcnQucnMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2NlbmVncmFwaCkKLQotLy8gVGhlIHNvbGUgcHVycG9zZSBvZiB0aGlzIHNjcmlwdCBpcyB0byBoYXZlIHZhcmlvdXMgc3RydWN0cyBleHBvc2VkCi0vLyBzbyB0aGF0IGphdmEgcmVmbGVjdGVkIGNsYXNzZXMgYXJlIGdlbmVyYXRlZAotI2luY2x1ZGUgInNjZW5lZ3JhcGhfb2JqZWN0cy5yc2giCi0KLS8vIEV4cG9ydCBvdXIgbmF0aXZlIGNvbnN0YW50cyB0byBqYXZhIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBwYXJhbGxlbCBkZWZpbml0aW9ucwotY29uc3QgaW50IFNoYWRlclBhcmFtX0ZMT0FUNF9EQVRBID0gU0hBREVSX1BBUkFNX0ZMT0FUNF9EQVRBOwotY29uc3QgaW50IFNoYWRlclBhcmFtX1RSQU5TRk9STV9EQVRBID0gU0hBREVSX1BBUkFNX1RSQU5TRk9STV9EQVRBOwotY29uc3QgaW50IFNoYWRlclBhcmFtX1RSQU5TRk9STV9NT0RFTCA9IFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fTU9ERUw7Ci0KLWNvbnN0IGludCBTaGFkZXJQYXJhbV9GTE9BVDRfQ0FNRVJBX1BPUyA9IFNIQURFUl9QQVJBTV9GTE9BVDRfQ0FNRVJBX1BPUzsKLWNvbnN0IGludCBTaGFkZXJQYXJhbV9GTE9BVDRfQ0FNRVJBX0RJUiA9IFNIQURFUl9QQVJBTV9GTE9BVDRfQ0FNRVJBX0RJUjsKLWNvbnN0IGludCBTaGFkZXJQYXJhbV9UUkFOU0ZPUk1fVklFVyA9IFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fVklFVzsKLWNvbnN0IGludCBTaGFkZXJQYXJhbV9UUkFOU0ZPUk1fUFJPSiA9IFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fUFJPSjsKLWNvbnN0IGludCBTaGFkZXJQYXJhbV9UUkFOU0ZPUk1fVklFV19QUk9KID0gU0hBREVSX1BBUkFNX1RSQU5TRk9STV9WSUVXX1BST0o7Ci1jb25zdCBpbnQgU2hhZGVyUGFyYW1fVFJBTlNGT1JNX01PREVMX1ZJRVcgPSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX01PREVMX1ZJRVc7Ci1jb25zdCBpbnQgU2hhZGVyUGFyYW1fVFJBTlNGT1JNX01PREVMX1ZJRVdfUFJPSiA9IFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fTU9ERUxfVklFV19QUk9KOwotCi1jb25zdCBpbnQgU2hhZGVyUGFyYW1fRkxPQVQ0X0xJR0hUX0NPTE9SID0gU0hBREVSX1BBUkFNX0ZMT0FUNF9MSUdIVF9DT0xPUjsKLWNvbnN0IGludCBTaGFkZXJQYXJhbV9GTE9BVDRfTElHSFRfUE9TID0gU0hBREVSX1BBUkFNX0ZMT0FUNF9MSUdIVF9QT1M7Ci1jb25zdCBpbnQgU2hhZGVyUGFyYW1fRkxPQVQ0X0xJR0hUX0RJUiA9IFNIQURFUl9QQVJBTV9GTE9BVDRfTElHSFRfRElSOwotCi1jb25zdCBpbnQgU2hhZGVyUGFyYW1fVEVYVFVSRSA9IFNIQURFUl9QQVJBTV9URVhUVVJFOwotCi1jb25zdCBpbnQgVHJhbnNmb3JtX1RSQU5TTEFURSA9IFRSQU5TRk9STV9UUkFOU0xBVEU7Ci1jb25zdCBpbnQgVHJhbnNmb3JtX1JPVEFURSA9IFRSQU5TRk9STV9ST1RBVEU7Ci1jb25zdCBpbnQgVHJhbnNmb3JtX1NDQUxFID0gVFJBTlNGT1JNX1NDQUxFOwotCi1jb25zdCBpbnQgVGV4dHVyZVR5cGVfVEVYVFVSRV8yRCA9IFRFWFRVUkVfMkQ7Ci1jb25zdCBpbnQgVGV4dHVyZVR5cGVfVEVYVFVSRV9DVUJFID0gVEVYVFVSRV9DVUJFOwotY29uc3QgaW50IFRleHR1cmVUeXBlX1RFWFRVUkVfUkVOREVSX1RBUkdFVCA9IFRFWFRVUkVfUkVOREVSX1RBUkdFVDsKLQotU2dUcmFuc2Zvcm0gKmV4cG9ydFB0cjsKLVNnVHJhbnNmb3JtQ29tcG9uZW50ICpjb21wb25lbnRQdHI7Ci1TZ1JlbmRlclN0YXRlICpzRXhwb3J0OwotU2dSZW5kZXJhYmxlICpkckV4cG9ydDsKLVNnUmVuZGVyUGFzcyAqcEV4cG9ydDsKLVNnQ2FtZXJhICpleHBvcnRQdHJDYW07Ci1TZ0xpZ2h0ICpleHBvcnRQdHJMaWdodDsKLVNnU2hhZGVyUGFyYW0gKnNwRXhwb3J0OwotU2dTaGFkZXJQYXJhbURhdGEgKnNwRGF0YUV4cG9ydDsKLVNnVmVydGV4U2hhZGVyICpwdkV4cG9ydDsKLVNnRnJhZ21lbnRTaGFkZXIgKnBmRXhwb3J0OwotU2dUZXh0dXJlICp0ZXhFeHBvcnQ7CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL2ZyYWdtZW50X3BhcmFtcy5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvZnJhZ21lbnRfcGFyYW1zLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjAyMjg1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvZnJhZ21lbnRfcGFyYW1zLnJzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGgpCi0KLSNpbmNsdWRlICJzY2VuZWdyYXBoX29iamVjdHMucnNoIgotCi0vLyNkZWZpbmUgREVCVUdfUEFSQU1TCi0KLSNpbmNsdWRlICJwYXJhbXMucnNoIgotCi12b2lkIHJvb3QocnNfYWxsb2NhdGlvbiAqdl9vdXQsIGNvbnN0IHZvaWQgKnVzckRhdGEpIHsKLSAgICBTZ0ZyYWdtZW50U2hhZGVyICpzaGFkZXIgPSAoU2dGcmFnbWVudFNoYWRlciAqKXJzR2V0RWxlbWVudEF0KCp2X291dCwgMCk7Ci0gICAgY29uc3QgU2dDYW1lcmEgKmNhbWVyYSA9IChjb25zdCBTZ0NhbWVyYSopdXNyRGF0YTsKLSAgICBwcm9jZXNzQWxsUGFyYW1zKHNoYWRlci0+c2hhZGVyQ29uc3QsIHNoYWRlci0+c2hhZGVyQ29uc3RQYXJhbXMsIGNhbWVyYSk7Ci0gICAgcHJvY2Vzc1RleHR1cmVQYXJhbXMoc2hhZGVyKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvbGlnaHQucnMgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL2xpZ2h0LnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTE5NzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvbGlnaHQucnMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2NlbmVncmFwaCkKLQotLy8jZGVmaW5lIERFQlVHX0xJR0hUCi0jaW5jbHVkZSAic2NlbmVncmFwaF9vYmplY3RzLnJzaCIKLQotdm9pZCByb290KGNvbnN0IHJzX2FsbG9jYXRpb24gKnZfaW4sIHJzX2FsbG9jYXRpb24gKnZfb3V0KSB7Ci0KLSAgICBTZ0xpZ2h0ICpsaWdodCA9IChTZ0xpZ2h0ICopcnNHZXRFbGVtZW50QXQoKnZfaW4sIDApOwotICAgIGNvbnN0IFNnVHJhbnNmb3JtICpsVHJhbnNmb3JtID0gKGNvbnN0IFNnVHJhbnNmb3JtICopcnNHZXRFbGVtZW50QXQobGlnaHQtPnRyYW5zZm9ybU1hdHJpeCwgMCk7Ci0KLSAgICBmbG9hdDQgemVybyA9IHswLjBmLCAwLjBmLCAwLjBmLCAxLjBmfTsKLSAgICBsaWdodC0+cG9zaXRpb24gPSByc01hdHJpeE11bHRpcGx5KCZsVHJhbnNmb3JtLT5nbG9iYWxNYXQsIHplcm8pOwotCi0jaWZkZWYgREVCVUdfTElHSFQKLSAgICBwcmludExpZ2h0SW5mbyhsaWdodCk7Ci0jZW5kaWYgLy9ERUJVR19MSUdIVAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9vYmplY3RfcGFyYW1zLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9vYmplY3RfcGFyYW1zLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDUyNGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvb2JqZWN0X3BhcmFtcy5ycworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5zY2VuZWdyYXBoKQotCi0jaW5jbHVkZSAic2NlbmVncmFwaF9vYmplY3RzLnJzaCIKLQotLy8jZGVmaW5lIERFQlVHX1BBUkFNUwotCi0jaW5jbHVkZSAicGFyYW1zLnJzaCIKLQotdm9pZCByb290KHJzX2FsbG9jYXRpb24gKnZfb3V0LCBjb25zdCB2b2lkICp1c3JEYXRhKSB7Ci0KLSAgICBTZ1JlbmRlcmFibGUgKmRyYXdhYmxlID0gKFNnUmVuZGVyYWJsZSAqKXJzR2V0RWxlbWVudEF0KCp2X291dCwgMCk7Ci0gICAgLy8gVmlzaWJpbGl0eSBmbGFnIHdhcyBzZXQgZWFybGllciBpbiB0aGUgY3VsbCBzdGFnZQotICAgIGlmICghZHJhd2FibGUtPmlzVmlzaWJsZSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY29uc3QgU2dDYW1lcmEgKmNhbWVyYSA9IChjb25zdCBTZ0NhbWVyYSopdXNyRGF0YTsKLSAgICBwcm9jZXNzQWxsUGFyYW1zKGRyYXdhYmxlLT5wZl9jb25zdCwgZHJhd2FibGUtPnBmX2NvbnN0UGFyYW1zLCBjYW1lcmEpOwotICAgIHByb2Nlc3NBbGxQYXJhbXMoZHJhd2FibGUtPnB2X2NvbnN0LCBkcmF3YWJsZS0+cHZfY29uc3RQYXJhbXMsIGNhbWVyYSk7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3BhcmFtcy5yc2ggYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3BhcmFtcy5yc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwNzkzYzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9wYXJhbXMucnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTkyICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5zY2VuZWdyYXBoKQotCi0jaW5jbHVkZSAic2NlbmVncmFwaF9vYmplY3RzLnJzaCIKLQotLy8jZGVmaW5lIERFQlVHX1BBUkFNUwotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnUGFyYW0oU2dTaGFkZXJQYXJhbSAqcCwgU2dTaGFkZXJQYXJhbURhdGEgKnBEYXRhKSB7Ci0gICAgcnNEZWJ1ZygiX19fX19fX19fX19fIFBhcmFtIF9fX19fX19fX19fXyIsIHApOwotICAgIHByaW50TmFtZShwRGF0YS0+cGFyYW1OYW1lKTsKLSAgICByc0RlYnVnKCJidWZmZXJPZmZzZXQiLCBwLT5idWZmZXJPZmZzZXQpOwotICAgIHJzRGVidWcoInR5cGUgIiwgcERhdGEtPnR5cGUpOwotICAgIHJzRGVidWcoImRhdGEgdGltZXN0YW1wICIsIHBEYXRhLT50aW1lc3RhbXApOwotICAgIHJzRGVidWcoInBhcmFtIHRpbWVzdGFtcCIsIHAtPmRhdGFUaW1lc3RhbXApOwotCi0gICAgY29uc3QgU2dUcmFuc2Zvcm0gKnBUcmFuc2Zvcm0gPSBOVUxMOwotICAgIGlmIChyc0lzT2JqZWN0KHBEYXRhLT50cmFuc2Zvcm0pKSB7Ci0gICAgICAgIHBUcmFuc2Zvcm0gPSAoY29uc3QgU2dUcmFuc2Zvcm0gKilyc0dldEVsZW1lbnRBdChwRGF0YS0+dHJhbnNmb3JtLCAwKTsKLQotICAgICAgICByc0RlYnVnKCJ0cmFuc2Zvcm0iLCBwVHJhbnNmb3JtKTsKLSAgICAgICAgcHJpbnROYW1lKHBUcmFuc2Zvcm0tPm5hbWUpOwotICAgICAgICByc0RlYnVnKCJ0aW1lc3RhbXAiLCBwVHJhbnNmb3JtLT50aW1lc3RhbXApOwotICAgICAgICByc0RlYnVnKCJwYXJhbSB0aW1lc3RhbXAiLCBwLT50cmFuc2Zvcm1UaW1lc3RhbXApOwotICAgIH0KLQotICAgIGNvbnN0IFNnTGlnaHQgKnBMaWdodCA9IE5VTEw7Ci0gICAgaWYgKHJzSXNPYmplY3QocERhdGEtPmxpZ2h0KSkgewotICAgICAgICBwTGlnaHQgPSAoY29uc3QgU2dMaWdodCAqKXJzR2V0RWxlbWVudEF0KHBEYXRhLT5saWdodCwgMCk7Ci0gICAgICAgIHByaW50TGlnaHRJbmZvKHBMaWdodCk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVGbG9hdERhdGEoZmxvYXQgKnB0ciwgY29uc3QgZmxvYXQ0ICppbnB1dCwgdWludDMyX3QgdmVjU2l6ZSkgewotI2lmZGVmIERFQlVHX1BBUkFNUwotICAgIHJzRGVidWcoIldyaXRpbmcgdmFsdWUgIiwgKmlucHV0KTsKLSAgICByc0RlYnVnKCJXcml0aW5nIHZlYyBzaXplICIsIHZlY1NpemUpOwotI2VuZGlmIC8vIERFQlVHX1BBUkFNUwotCi0gICAgc3dpdGNoICh2ZWNTaXplKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICAqcHRyID0gaW5wdXQtPng7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgKigoZmxvYXQyKilwdHIpID0gKCppbnB1dCkueHk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgKigoZmxvYXQzKilwdHIpID0gKCppbnB1dCkueHl6OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgICooKGZsb2F0NCopcHRyKSA9ICppbnB1dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcHJvY2Vzc1BhcmFtKFNnU2hhZGVyUGFyYW0gKnAsIFNnU2hhZGVyUGFyYW1EYXRhICpwRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpjb25zdGFudEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTZ0NhbWVyYSAqY3VycmVudENhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTZ0ZyYWdtZW50U2hhZGVyICpzaGFkZXIpIHsKLSAgICBib29sIGlzRGF0YU9ubHkgPSAocERhdGEtPnR5cGUgPiBTSEFERVJfUEFSQU1fREFUQV9PTkxZKTsKLSAgICBjb25zdCBTZ1RyYW5zZm9ybSAqcFRyYW5zZm9ybSA9IE5VTEw7Ci0gICAgaWYgKHJzSXNPYmplY3QocERhdGEtPnRyYW5zZm9ybSkpIHsKLSAgICAgICAgcFRyYW5zZm9ybSA9IChjb25zdCBTZ1RyYW5zZm9ybSAqKXJzR2V0RWxlbWVudEF0KHBEYXRhLT50cmFuc2Zvcm0sIDApOwotICAgIH0KLQotICAgIGlmIChpc0RhdGFPbmx5KSB7Ci0gICAgICAgIC8vIElmIHdlIGFyZSBhIHRyYW5zZm9ybSBwYXJhbSBhbmQgb3VyIHRyYW5zZm9ybSBpcyB1bmNoYW5nZWQsIG5vdGhpbmcgdG8gZG8KLSAgICAgICAgaWYgKHBUcmFuc2Zvcm0pIHsKLSAgICAgICAgICAgIGlmIChwLT50cmFuc2Zvcm1UaW1lc3RhbXAgPT0gcFRyYW5zZm9ybS0+dGltZXN0YW1wKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcC0+dHJhbnNmb3JtVGltZXN0YW1wID0gcFRyYW5zZm9ybS0+dGltZXN0YW1wOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHAtPmRhdGFUaW1lc3RhbXAgPT0gcERhdGEtPnRpbWVzdGFtcCkgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAtPmRhdGFUaW1lc3RhbXAgPSBwRGF0YS0+dGltZXN0YW1wOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgU2dMaWdodCAqcExpZ2h0ID0gTlVMTDsKLSAgICBpZiAocnNJc09iamVjdChwRGF0YS0+bGlnaHQpKSB7Ci0gICAgICAgIHBMaWdodCA9IChjb25zdCBTZ0xpZ2h0ICopcnNHZXRFbGVtZW50QXQocERhdGEtPmxpZ2h0LCAwKTsKLSAgICB9Ci0KLSAgICB1aW50OF90ICpkYXRhUHRyID0gTlVMTDsKLSAgICBjb25zdCBTZ1RleHR1cmUgKnRleCA9IE5VTEw7Ci0gICAgaWYgKHBEYXRhLT50eXBlID09IFNIQURFUl9QQVJBTV9URVhUVVJFKSB7Ci0gICAgICAgIHRleCA9IHJzR2V0RWxlbWVudEF0KHBEYXRhLT50ZXh0dXJlLCAwKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkYXRhUHRyID0gY29uc3RhbnRCdWZmZXIgKyBwLT5idWZmZXJPZmZzZXQ7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwRGF0YS0+dHlwZSkgewotICAgIGNhc2UgU0hBREVSX1BBUkFNX1RFWFRVUkU6Ci0gICAgICAgIHJzZ0JpbmRUZXh0dXJlKHNoYWRlci0+cHJvZ3JhbSwgcC0+YnVmZmVyT2Zmc2V0LCB0ZXgtPnRleHR1cmUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9QQVJBTV9GTE9BVDRfREFUQToKLSAgICAgICAgd3JpdGVGbG9hdERhdGEoKGZsb2F0KilkYXRhUHRyLCAmcERhdGEtPmZsb2F0X3ZhbHVlLCBwLT5mbG9hdF92ZWNTaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfUEFSQU1fRkxPQVQ0X0NBTUVSQV9QT1M6Ci0gICAgICAgIHdyaXRlRmxvYXREYXRhKChmbG9hdCopZGF0YVB0ciwgJmN1cnJlbnRDYW0tPnBvc2l0aW9uLCBwLT5mbG9hdF92ZWNTaXplKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfUEFSQU1fRkxPQVQ0X0NBTUVSQV9ESVI6IGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1BBUkFNX0ZMT0FUNF9MSUdIVF9DT0xPUjoKLSAgICAgICAgd3JpdGVGbG9hdERhdGEoKGZsb2F0KilkYXRhUHRyLCAmcExpZ2h0LT5jb2xvciwgcC0+ZmxvYXRfdmVjU2l6ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1BBUkFNX0ZMT0FUNF9MSUdIVF9QT1M6Ci0gICAgICAgIHdyaXRlRmxvYXREYXRhKChmbG9hdCopZGF0YVB0ciwgJnBMaWdodC0+cG9zaXRpb24sIHAtPmZsb2F0X3ZlY1NpemUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9QQVJBTV9GTE9BVDRfTElHSFRfRElSOiBicmVhazsKLQotICAgIGNhc2UgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9EQVRBOgotICAgICAgICByc01hdHJpeExvYWQoKHJzX21hdHJpeDR4NCopZGF0YVB0ciwgJnBUcmFuc2Zvcm0tPmdsb2JhbE1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9WSUVXOgotICAgICAgICByc01hdHJpeExvYWQoKHJzX21hdHJpeDR4NCopZGF0YVB0ciwgJmN1cnJlbnRDYW0tPnZpZXcpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fUFJPSjoKLSAgICAgICAgcnNNYXRyaXhMb2FkKChyc19tYXRyaXg0eDQqKWRhdGFQdHIsICZjdXJyZW50Q2FtLT5wcm9qKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX1ZJRVdfUFJPSjoKLSAgICAgICAgcnNNYXRyaXhMb2FkKChyc19tYXRyaXg0eDQqKWRhdGFQdHIsICZjdXJyZW50Q2FtLT52aWV3UHJvaik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9NT0RFTDoKLSAgICAgICAgcnNNYXRyaXhMb2FkKChyc19tYXRyaXg0eDQqKWRhdGFQdHIsICZwVHJhbnNmb3JtLT5nbG9iYWxNYXQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fTU9ERUxfVklFVzoKLSAgICAgICAgcnNNYXRyaXhMb2FkKChyc19tYXRyaXg0eDQqKWRhdGFQdHIsICZjdXJyZW50Q2FtLT52aWV3KTsKLSAgICAgICAgcnNNYXRyaXhMb2FkTXVsdGlwbHkoKHJzX21hdHJpeDR4NCopZGF0YVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJzX21hdHJpeDR4NCopZGF0YVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBUcmFuc2Zvcm0tPmdsb2JhbE1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9NT0RFTF9WSUVXX1BST0o6Ci0gICAgICAgIHJzTWF0cml4TG9hZCgocnNfbWF0cml4NHg0KilkYXRhUHRyLCAmY3VycmVudENhbS0+dmlld1Byb2opOwotICAgICAgICByc01hdHJpeExvYWRNdWx0aXBseSgocnNfbWF0cml4NHg0KilkYXRhUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnNfbWF0cml4NHg0KilkYXRhUHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcFRyYW5zZm9ybS0+Z2xvYmFsTWF0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc0FsbFBhcmFtcyhyc19hbGxvY2F0aW9uIHNoYWRlckNvbnN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc19hbGxvY2F0aW9uIGFsbFBhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2dDYW1lcmEgKmNhbWVyYSkgewotICAgIGlmIChyc0lzT2JqZWN0KHNoYWRlckNvbnN0KSkgewotICAgICAgICB1aW50OF90ICpjb25zdGFudEJ1ZmZlciA9ICh1aW50OF90Kilyc0dldEVsZW1lbnRBdChzaGFkZXJDb25zdCwgMCk7Ci0KLSAgICAgICAgaW50IG51bVBhcmFtcyA9IDA7Ci0gICAgICAgIGlmIChyc0lzT2JqZWN0KGFsbFBhcmFtcykpIHsKLSAgICAgICAgICAgIG51bVBhcmFtcyA9IHJzQWxsb2NhdGlvbkdldERpbVgoYWxsUGFyYW1zKTsKLSAgICAgICAgfQotICAgICAgICBib29sIHVwZGF0ZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7IGkgKyspIHsKLSAgICAgICAgICAgIFNnU2hhZGVyUGFyYW0gKmN1cnJlbnQgPSAoU2dTaGFkZXJQYXJhbSopcnNHZXRFbGVtZW50QXQoYWxsUGFyYW1zLCBpKTsKLSAgICAgICAgICAgIFNnU2hhZGVyUGFyYW1EYXRhICpjdXJyZW50RGF0YSA9IChTZ1NoYWRlclBhcmFtRGF0YSopcnNHZXRFbGVtZW50QXQoY3VycmVudC0+ZGF0YSwgMCk7Ci0jaWZkZWYgREVCVUdfUEFSQU1TCi0gICAgICAgICAgICBkZWJ1Z1BhcmFtKGN1cnJlbnQsIGN1cnJlbnREYXRhKTsKLSNlbmRpZiAvLyBERUJVR19QQVJBTVMKLSAgICAgICAgICAgIHVwZGF0ZWQgPSBwcm9jZXNzUGFyYW0oY3VycmVudCwgY3VycmVudERhdGEsIGNvbnN0YW50QnVmZmVyLCBjYW1lcmEsIE5VTEwpIHx8IHVwZGF0ZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzVGV4dHVyZVBhcmFtcyhTZ0ZyYWdtZW50U2hhZGVyICpzaGFkZXIpIHsKLSAgICBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICBpZiAocnNJc09iamVjdChzaGFkZXItPnNoYWRlclRleHR1cmVQYXJhbXMpKSB7Ci0gICAgICAgIG51bVBhcmFtcyA9IHJzQWxsb2NhdGlvbkdldERpbVgoc2hhZGVyLT5zaGFkZXJUZXh0dXJlUGFyYW1zKTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7IGkgKyspIHsKLSAgICAgICAgU2dTaGFkZXJQYXJhbSAqY3VycmVudCA9IChTZ1NoYWRlclBhcmFtKilyc0dldEVsZW1lbnRBdChzaGFkZXItPnNoYWRlclRleHR1cmVQYXJhbXMsIGkpOwotICAgICAgICBTZ1NoYWRlclBhcmFtRGF0YSAqY3VycmVudERhdGEgPSAoU2dTaGFkZXJQYXJhbURhdGEqKXJzR2V0RWxlbWVudEF0KGN1cnJlbnQtPmRhdGEsIDApOwotI2lmZGVmIERFQlVHX1BBUkFNUwotICAgICAgICBkZWJ1Z1BhcmFtKGN1cnJlbnQsIGN1cnJlbnREYXRhKTsKLSNlbmRpZiAvLyBERUJVR19QQVJBTVMKLSAgICAgICAgcHJvY2Vzc1BhcmFtKGN1cnJlbnQsIGN1cnJlbnREYXRhLCBOVUxMLCBOVUxMLCBzaGFkZXIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvcmVuZGVyLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9yZW5kZXIucnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwNWIyY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9yZW5kZXIucnMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2NlbmVncmFwaCkKLQotI2luY2x1ZGUgInJzX2dyYXBoaWNzLnJzaCIKLSNpbmNsdWRlICJzY2VuZWdyYXBoX29iamVjdHMucnNoIgotCi1yc19zY3JpcHQgZ1RyYW5zZm9ybVNjcmlwdDsKLXJzX3NjcmlwdCBnQ2FtZXJhU2NyaXB0OwotcnNfc2NyaXB0IGdMaWdodFNjcmlwdDsKLXJzX3NjcmlwdCBnT2JqZWN0UGFyYW1zU2NyaXB0OwotcnNfc2NyaXB0IGdGcmFnbWVudFBhcmFtc1NjcmlwdDsKLXJzX3NjcmlwdCBnVmVydGV4UGFyYW1zU2NyaXB0OwotcnNfc2NyaXB0IGdDdWxsU2NyaXB0OwotCi1TZ1RyYW5zZm9ybSAqZ1Jvb3ROb2RlOwotcnNfYWxsb2NhdGlvbiBnQ2FtZXJhczsKLXJzX2FsbG9jYXRpb24gZ0xpZ2h0czsKLXJzX2FsbG9jYXRpb24gZ0ZyYWdtZW50U2hhZGVyczsKLXJzX2FsbG9jYXRpb24gZ1ZlcnRleFNoYWRlcnM7Ci1yc19hbGxvY2F0aW9uIGdSZW5kZXJhYmxlT2JqZWN0czsKLQotcnNfYWxsb2NhdGlvbiBnUmVuZGVyUGFzc2VzOwotCi0vLyBUZW1wb3Jhcnkgc2hhZGVycwotcnNfcHJvZ3JhbV9zdG9yZSBnUEZTQmFja2dyb3VuZDsKLQotdWludDMyX3QgKmdGcm9udFRvQmFjazsKLXN0YXRpYyB1aW50MzJfdCBnRnJvbnRUb0JhY2tDb3VudCA9IDA7Ci11aW50MzJfdCAqZ0JhY2tUb0Zyb250Owotc3RhdGljIHVpbnQzMl90IGdCYWNrVG9Gcm9udENvdW50ID0gMDsKLQotc3RhdGljIFNnQ2FtZXJhICpnQWN0aXZlQ2FtZXJhID0gTlVMTDsKLQotc3RhdGljIHJzX2FsbG9jYXRpb24gbnVsbEFsbG9jOwotCi0vLyAjZGVmaW5lIERFQlVHX1JFTkRFUkFCTEVTCi1zdGF0aWMgdm9pZCBkcmF3KFNnUmVuZGVyYWJsZSAqb2JqKSB7Ci0jaWZkZWYgREVCVUdfUkVOREVSQUJMRVMKLSAgICBjb25zdCBTZ1RyYW5zZm9ybSAqb2JqVHJhbnNmb3JtID0gKGNvbnN0IFNnVHJhbnNmb3JtICopcnNHZXRFbGVtZW50QXQob2JqLT50cmFuc2Zvcm1NYXRyaXgsIDApOwotICAgIHJzRGVidWcoIioqKiogRHJhd2luZyBvYmplY3Qgd2l0aCB0cmFuc2Zvcm0iLCBvYmopOwotICAgIHByaW50TmFtZShvYmpUcmFuc2Zvcm0tPm5hbWUpOwotICAgIHJzRGVidWcoIk1vZGVsIG1hdHJpeDogIiwgJm9ialRyYW5zZm9ybS0+Z2xvYmFsTWF0KTsKLSAgICBwcmludE5hbWUob2JqLT5uYW1lKTsKLSNlbmRpZiAvL0RFQlVHX1JFTkRFUkFCTEVTCi0KLSAgICBjb25zdCBTZ1JlbmRlclN0YXRlICpyZW5kZXJTdGF0ZSA9IChjb25zdCBTZ1JlbmRlclN0YXRlICopcnNHZXRFbGVtZW50QXQob2JqLT5yZW5kZXJfc3RhdGUsIDApOwotICAgIGNvbnN0IFNnVmVydGV4U2hhZGVyICpwdiA9IChjb25zdCBTZ1ZlcnRleFNoYWRlciAqKXJzR2V0RWxlbWVudEF0KHJlbmRlclN0YXRlLT5wdiwgMCk7Ci0gICAgY29uc3QgU2dGcmFnbWVudFNoYWRlciAqcGYgPSAoY29uc3QgU2dGcmFnbWVudFNoYWRlciAqKXJzR2V0RWxlbWVudEF0KHJlbmRlclN0YXRlLT5wZiwgMCk7Ci0KLSAgICBpZiAocHYtPm9iamVjdENvbnN0SW5kZXggIT0gLTEpIHsKLSAgICAgICAgcnNnQmluZENvbnN0YW50KHB2LT5wcm9ncmFtLCBwdi0+b2JqZWN0Q29uc3RJbmRleCwgb2JqLT5wdl9jb25zdCk7Ci0gICAgfQotICAgIGlmIChwZi0+b2JqZWN0Q29uc3RJbmRleCAhPSAtMSkgewotICAgICAgICByc2dCaW5kQ29uc3RhbnQocGYtPnByb2dyYW0sIHBmLT5vYmplY3RDb25zdEluZGV4LCBvYmotPnBmX2NvbnN0KTsKLSAgICB9Ci0KLSAgICBpZiAocnNJc09iamVjdChyZW5kZXJTdGF0ZS0+cHMpKSB7Ci0gICAgICAgIHJzZ0JpbmRQcm9ncmFtU3RvcmUocmVuZGVyU3RhdGUtPnBzKTsKLSAgICB9IGVsc2UgewotICAgICAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQRlNCYWNrZ3JvdW5kKTsKLSAgICB9Ci0KLSAgICBpZiAocnNJc09iamVjdChyZW5kZXJTdGF0ZS0+cHIpKSB7Ci0gICAgICAgIHJzZ0JpbmRQcm9ncmFtUmFzdGVyKHJlbmRlclN0YXRlLT5wcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcnNfcHJvZ3JhbV9yYXN0ZXIgcHIgPSB7MH07Ci0gICAgICAgIHJzZ0JpbmRQcm9ncmFtUmFzdGVyKHByKTsKLSAgICB9Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChwdi0+cHJvZ3JhbSk7Ci0gICAgcnNnQmluZFByb2dyYW1GcmFnbWVudChwZi0+cHJvZ3JhbSk7Ci0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgb2JqLT5wZl9udW1fdGV4dHVyZXM7IGkgKyspIHsKLSAgICAgICAgY29uc3QgU2dUZXh0dXJlICp0ZXggPSByc0dldEVsZW1lbnRBdChvYmotPnBmX3RleHR1cmVzW2ldLCAwKTsKLSAgICAgICAgcnNnQmluZFRleHR1cmUocGYtPnByb2dyYW0sIGksIHRleC0+dGV4dHVyZSk7Ci0gICAgfQotCi0gICAgcnNnRHJhd01lc2gob2JqLT5tZXNoLCBvYmotPm1lc2hJbmRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNvcnRUb0J1Y2tldChTZ1JlbmRlcmFibGUgKm9iaikgewotICAgIGNvbnN0IFNnUmVuZGVyU3RhdGUgKnJlbmRlclN0YXRlID0gKGNvbnN0IFNnUmVuZGVyU3RhdGUgKilyc0dldEVsZW1lbnRBdChvYmotPnJlbmRlcl9zdGF0ZSwgMCk7Ci0gICAgaWYgKHJzSXNPYmplY3QocmVuZGVyU3RhdGUtPnBzKSkgewotICAgICAgICBib29sIGlzT3BhcXVlID0gZmFsc2U7Ci0gICAgICAgIGlmIChpc09wYXF1ZSkgewotICAgICAgICAgICAgZ0Zyb250VG9CYWNrW2dGcm9udFRvQmFja0NvdW50KytdID0gKHVpbnQzMl90KW9iajsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdCYWNrVG9Gcm9udFtnQmFja1RvRnJvbnRDb3VudCsrXSA9ICh1aW50MzJfdClvYmo7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBnRnJvbnRUb0JhY2tbZ0Zyb250VG9CYWNrQ291bnQrK10gPSAodWludDMyX3Qpb2JqOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgdXBkYXRlQWN0aXZlQ2FtZXJhKHJzX2FsbG9jYXRpb24gY2FtKSB7Ci0gICAgZ0FjdGl2ZUNhbWVyYSA9IChTZ0NhbWVyYSAqKXJzR2V0RWxlbWVudEF0KGNhbSwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZXBhcmVDYW1lcmFzKCkgewotICAgIC8vIG5vdyBjb21wdXRlIGFsbCB0aGUgY2FtZXJhIG1hdHJpY2VzCi0gICAgaWYgKHJzSXNPYmplY3QoZ0NhbWVyYXMpKSB7Ci0gICAgICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgICAgICByc0ZvckVhY2goZ0NhbWVyYVNjcmlwdCwgZ0NhbWVyYXMsIG51bGxBbGxvYywgJmFzcGVjdCwgc2l6ZW9mKGFzcGVjdCkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgcHJlcGFyZUxpZ2h0cygpIHsKLSAgICBpZiAocnNJc09iamVjdChnTGlnaHRzKSkgewotICAgICAgICByc0ZvckVhY2goZ0xpZ2h0U2NyaXB0LCBnTGlnaHRzLCBudWxsQWxsb2MpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZHJhd1NvcnRlZCgpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdGcm9udFRvQmFja0NvdW50OyBpICsrKSB7Ci0gICAgICAgIFNnUmVuZGVyYWJsZSAqY3VycmVudCA9IChTZ1JlbmRlcmFibGUqKWdGcm9udFRvQmFja1tpXTsKLSAgICAgICAgZHJhdyhjdXJyZW50KTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdCYWNrVG9Gcm9udENvdW50OyBpICsrKSB7Ci0gICAgICAgIFNnUmVuZGVyYWJsZSAqY3VycmVudCA9IChTZ1JlbmRlcmFibGUqKWdCYWNrVG9Gcm9udFtpXTsKLSAgICAgICAgZHJhdyhjdXJyZW50KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdBbGxPYmplY3RzKHJzX2FsbG9jYXRpb24gYWxsT2JqKSB7Ci0gICAgaWYgKCFyc0lzT2JqZWN0KGFsbE9iaikpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChyc0lzT2JqZWN0KGdWZXJ0ZXhTaGFkZXJzKSkgewotICAgICAgICByc0ZvckVhY2goZ1ZlcnRleFBhcmFtc1NjcmlwdCwgbnVsbEFsbG9jLCBnVmVydGV4U2hhZGVycywKLSAgICAgICAgICAgICAgICAgIGdBY3RpdmVDYW1lcmEsIHNpemVvZihnQWN0aXZlQ2FtZXJhKSk7Ci0gICAgfQotICAgIGlmIChyc0lzT2JqZWN0KGdGcmFnbWVudFNoYWRlcnMpKSB7Ci0gICAgICAgIHJzRm9yRWFjaChnRnJhZ21lbnRQYXJhbXNTY3JpcHQsIG51bGxBbGxvYywgZ0ZyYWdtZW50U2hhZGVycywKLSAgICAgICAgICAgICAgICAgIGdBY3RpdmVDYW1lcmEsIHNpemVvZihnQWN0aXZlQ2FtZXJhKSk7Ci0gICAgfQotCi0gICAgLy8gUnVuIHRoZSBwYXJhbXMgYW5kIGN1bGwgc2NyaXB0Ci0gICAgcnNGb3JFYWNoKGdDdWxsU2NyaXB0LCBudWxsQWxsb2MsIGFsbE9iaiwgZ0FjdGl2ZUNhbWVyYSwgc2l6ZW9mKGdBY3RpdmVDYW1lcmEpKTsKLSAgICByc0ZvckVhY2goZ09iamVjdFBhcmFtc1NjcmlwdCwgbnVsbEFsbG9jLCBhbGxPYmosIGdBY3RpdmVDYW1lcmEsIHNpemVvZihnQWN0aXZlQ2FtZXJhKSk7Ci0KLSAgICBpbnQgbnVtUmVuZGVyYWJsZXMgPSByc0FsbG9jYXRpb25HZXREaW1YKGFsbE9iaik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1SZW5kZXJhYmxlczsgaSArKykgewotICAgICAgICByc19hbGxvY2F0aW9uICpkcmF3QWxsb2MgPSAocnNfYWxsb2NhdGlvbiopcnNHZXRFbGVtZW50QXQoYWxsT2JqLCBpKTsKLSAgICAgICAgU2dSZW5kZXJhYmxlICpjdXJyZW50ID0gKFNnUmVuZGVyYWJsZSopcnNHZXRFbGVtZW50QXQoKmRyYXdBbGxvYywgMCk7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc1Zpc2libGUpIHsKLSAgICAgICAgICAgIHNvcnRUb0J1Y2tldChjdXJyZW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBkcmF3U29ydGVkKCk7Ci19Ci0KLWludCByb290KHZvaWQpIHsKLSNpZmRlZiBERUJVR19SRU5ERVJBQkxFUwotICAgIHJzRGVidWcoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiwgMCk7Ci0jZW5kaWYgLy8gREVCVUdfUkVOREVSQUJMRVMKLQotICAgIC8vIGZpcnN0IHN0ZXAgaXMgdG8gdXBkYXRlIHRoZSB0cmFuc2Zvcm0gaGllcmFjaHkKLSAgICBpZiAoZ1Jvb3ROb2RlICYmIHJzSXNPYmplY3QoZ1Jvb3ROb2RlLT5jaGlsZHJlbikpIHsKLSAgICAgICAgcnNGb3JFYWNoKGdUcmFuc2Zvcm1TY3JpcHQsIGdSb290Tm9kZS0+Y2hpbGRyZW4sIG51bGxBbGxvYywgMCwgMCk7Ci0gICAgfQotCi0gICAgcHJlcGFyZUNhbWVyYXMoKTsKLSAgICBwcmVwYXJlTGlnaHRzKCk7Ci0KLSAgICBpZiAocnNJc09iamVjdChnUmVuZGVyUGFzc2VzKSkgewotICAgICAgICByc2dDbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBpbnQgbnVtUGFzc2VzID0gcnNBbGxvY2F0aW9uR2V0RGltWChnUmVuZGVyUGFzc2VzKTsKLSAgICAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgbnVtUGFzc2VzOyBpICsrKSB7Ci0gICAgICAgICAgICBnRnJvbnRUb0JhY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICBnQmFja1RvRnJvbnRDb3VudCA9IDA7Ci0gICAgICAgICAgICBTZ1JlbmRlclBhc3MgKnBhc3MgPSAoU2dSZW5kZXJQYXNzKilyc0dldEVsZW1lbnRBdChnUmVuZGVyUGFzc2VzLCBpKTsKLSAgICAgICAgICAgIGlmIChyc0lzT2JqZWN0KHBhc3MtPmNvbG9yX3RhcmdldCkpIHsKLSAgICAgICAgICAgICAgICByc2dCaW5kQ29sb3JUYXJnZXQocGFzcy0+Y29sb3JfdGFyZ2V0LCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyc0lzT2JqZWN0KHBhc3MtPmRlcHRoX3RhcmdldCkpIHsKLSAgICAgICAgICAgICAgICByc2dCaW5kRGVwdGhUYXJnZXQocGFzcy0+ZGVwdGhfdGFyZ2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghcnNJc09iamVjdChwYXNzLT5jb2xvcl90YXJnZXQpICYmCi0gICAgICAgICAgICAgICAgIXJzSXNPYmplY3QocGFzcy0+ZGVwdGhfdGFyZ2V0KSkgewotICAgICAgICAgICAgICAgIHJzZ0NsZWFyQWxsUmVuZGVyVGFyZ2V0cygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXBkYXRlQWN0aXZlQ2FtZXJhKHBhc3MtPmNhbWVyYSk7Ci0gICAgICAgICAgICBpZiAocGFzcy0+c2hvdWxkX2NsZWFyX2NvbG9yKSB7Ci0gICAgICAgICAgICAgICAgcnNnQ2xlYXJDb2xvcihwYXNzLT5jbGVhcl9jb2xvci54LCBwYXNzLT5jbGVhcl9jb2xvci55LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcy0+Y2xlYXJfY29sb3IueiwgcGFzcy0+Y2xlYXJfY29sb3Iudyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocGFzcy0+c2hvdWxkX2NsZWFyX2RlcHRoKSB7Ci0gICAgICAgICAgICAgICAgcnNnQ2xlYXJEZXB0aChwYXNzLT5jbGVhcl9kZXB0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkcmF3QWxsT2JqZWN0cyhwYXNzLT5vYmplY3RzKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdGcm9udFRvQmFja0NvdW50ID0gMDsKLSAgICAgICAgZ0JhY2tUb0Zyb250Q291bnQgPSAwOwotICAgICAgICByc2dDbGVhckNvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgICAgICByc2dDbGVhckRlcHRoKDEuMGYpOwotCi0gICAgICAgIGlmIChyc0lzT2JqZWN0KGdDYW1lcmFzKSkgewotICAgICAgICAgICAgcnNfYWxsb2NhdGlvbiAqY2FtQWxsb2MgPSAocnNfYWxsb2NhdGlvbiopcnNHZXRFbGVtZW50QXQoZ0NhbWVyYXMsIDApOwotICAgICAgICAgICAgdXBkYXRlQWN0aXZlQ2FtZXJhKCpjYW1BbGxvYyk7Ci0gICAgICAgIH0KLSAgICAgICAgZHJhd0FsbE9iamVjdHMoZ1JlbmRlcmFibGVPYmplY3RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIDEwOwotfQotCi0vLyBTZWFyY2ggdGhyb3VnaCBzb3J0ZWQgYW5kIGN1bGxlZCBvYmplY3RzCi12b2lkIHBpY2soaW50IHNjcmVlblgsIGludCBzY3JlZW5ZKSB7Ci0gICAgZmxvYXQzIHBudCwgdmVjOwotICAgIGdldENhbWVyYVJheShnQWN0aXZlQ2FtZXJhLCBzY3JlZW5YLCBzY3JlZW5ZLCAmcG50LCAmdmVjKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ0Zyb250VG9CYWNrQ291bnQ7IGkgKyspIHsKLSAgICAgICAgU2dSZW5kZXJhYmxlICpjdXJyZW50ID0gKFNnUmVuZGVyYWJsZSopZ0Zyb250VG9CYWNrW2ldOwotICAgICAgICBib29sIGlzUGlja2VkID0gaW50ZXJzZWN0KGN1cnJlbnQsIHBudCwgdmVjKTsKLSAgICAgICAgaWYgKGlzUGlja2VkKSB7Ci0gICAgICAgICAgICBjdXJyZW50LT5jdWxsVHlwZSA9IENVTExfQUxXQVlTOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnQmFja1RvRnJvbnRDb3VudDsgaSArKykgewotICAgICAgICBTZ1JlbmRlcmFibGUgKmN1cnJlbnQgPSAoU2dSZW5kZXJhYmxlKilnQmFja1RvRnJvbnRbaV07Ci0gICAgICAgIGJvb2wgaXNQaWNrZWQgPSBpbnRlcnNlY3QoY3VycmVudCwgcG50LCB2ZWMpOwotICAgICAgICBpZiAoaXNQaWNrZWQpIHsKLSAgICAgICAgICAgIGN1cnJlbnQtPmN1bGxUeXBlID0gQ1VMTF9BTFdBWVM7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3NjZW5lZ3JhcGhfb2JqZWN0cy5yc2ggYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3NjZW5lZ3JhcGhfb2JqZWN0cy5yc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwYWUyMTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvc2NlbmVncmFwaC9zY2VuZWdyYXBoX29iamVjdHMucnNoCisrKyAvZGV2L251bGwKQEAgLTEsMzIzICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGgpCi0KLSNpZm5kZWYgX1RSQU5TRk9STV9ERUZfCi0jZGVmaW5lIF9UUkFOU0ZPUk1fREVGXwotCi0jaW5jbHVkZSAicnNfZ3JhcGhpY3MucnNoIgotCi0jZGVmaW5lIFRSQU5TRk9STV9OT05FICAgICAgMAotI2RlZmluZSBUUkFOU0ZPUk1fVFJBTlNMQVRFIDEKLSNkZWZpbmUgVFJBTlNGT1JNX1JPVEFURSAgICAyCi0jZGVmaW5lIFRSQU5TRk9STV9TQ0FMRSAgICAgMwotCi0jZGVmaW5lIENVTExfRlJVU1RVTSAwCi0jZGVmaW5lIENVTExfQUxXQVlTICAyCi0KLSNkZWZpbmUgTElHSFRfUE9JTlQgICAgICAgMAotI2RlZmluZSBMSUdIVF9ESVJFQ1RJT05BTCAxCi0KLS8vIFNoYWRlciBwYXJhbXMgdGhhdCBpbnZvbHZlIG9ubHkgZGF0YQotI2RlZmluZSBTSEFERVJfUEFSQU1fREFUQV9PTkxZICAgICAgICAgICAgICAgICAxMDAwMAotI2RlZmluZSBTSEFERVJfUEFSQU1fRkxPQVQ0X0RBVEEgICAgICAgICAgICAgICAxMDAwMQotI2RlZmluZSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX0RBVEEgICAgICAgICAgICAxMDAwMgotI2RlZmluZSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX01PREVMICAgICAgICAgICAxMDAwMwotCi0vLyBTaGFkZXIgcGFyYW1zIHRoYXQgaW52b2x2ZSBjYW1lcmEKLSNkZWZpbmUgU0hBREVSX1BBUkFNX0NBTUVSQSAgICAgICAgICAgICAgICAgICAgMTAwMAotI2RlZmluZSBTSEFERVJfUEFSQU1fRkxPQVQ0X0NBTUVSQV9QT1MgICAgICAgICAxMDAxCi0jZGVmaW5lIFNIQURFUl9QQVJBTV9GTE9BVDRfQ0FNRVJBX0RJUiAgICAgICAgIDEwMDIKLSNkZWZpbmUgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9WSUVXICAgICAgICAgICAgMTAwMwotI2RlZmluZSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX1BST0ogICAgICAgICAgICAxMDA0Ci0jZGVmaW5lIFNIQURFUl9QQVJBTV9UUkFOU0ZPUk1fVklFV19QUk9KICAgICAgIDEwMDUKLSNkZWZpbmUgU0hBREVSX1BBUkFNX1RSQU5TRk9STV9NT0RFTF9WSUVXICAgICAgMTAwNgotI2RlZmluZSBTSEFERVJfUEFSQU1fVFJBTlNGT1JNX01PREVMX1ZJRVdfUFJPSiAxMDA3Ci0KLS8vIFNoYWRlciBQYXJhbXMgdGhhdCBvbmx5IGludm9sdmUgbGlnaHRzCi0jZGVmaW5lIFNIQURFUl9QQVJBTV9MSUdIVCAgICAgICAgICAgICAgICAgICAgIDEwMAotI2RlZmluZSBTSEFERVJfUEFSQU1fRkxPQVQ0X0xJR0hUX0NPTE9SICAgICAgICAxMDMKLSNkZWZpbmUgU0hBREVSX1BBUkFNX0ZMT0FUNF9MSUdIVF9QT1MgICAgICAgICAgMTA0Ci0jZGVmaW5lIFNIQURFUl9QQVJBTV9GTE9BVDRfTElHSFRfRElSICAgICAgICAgIDEwNQotCi0jZGVmaW5lIFNIQURFUl9QQVJBTV9URVhUVVJFICAgICAgICAgICAgICAgICAgIDEwCi0KLSNkZWZpbmUgVEVYVFVSRV9OT05FICAgICAgICAgIDAKLSNkZWZpbmUgVEVYVFVSRV8yRCAgICAgICAgICAgIDEKLSNkZWZpbmUgVEVYVFVSRV9DVUJFICAgICAgICAgIDIKLSNkZWZpbmUgVEVYVFVSRV9SRU5ERVJfVEFSR0VUIDMKLQotdHlwZWRlZiBzdHJ1Y3QgVHJhbnNmb3JtQ29tcG9uZW50X3MgewotICAgIGZsb2F0NCB2YWx1ZTsKLSAgICBpbnQgdHlwZTsKLSAgICByc19hbGxvY2F0aW9uIG5hbWU7Ci19IFNnVHJhbnNmb3JtQ29tcG9uZW50OwotCi10eXBlZGVmIHN0cnVjdCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoNCkpKSBTZ1RyYW5zZm9ybSB7Ci0gICAgcnNfbWF0cml4NHg0IGdsb2JhbE1hdDsKLSAgICByc19tYXRyaXg0eDQgbG9jYWxNYXQ7Ci0KLSAgICByc19hbGxvY2F0aW9uIGNvbXBvbmVudHM7Ci0gICAgaW50IGlzRGlydHk7Ci0KLSAgICByc19hbGxvY2F0aW9uIGNoaWxkcmVuOwotICAgIHJzX2FsbG9jYXRpb24gbmFtZTsKLQotICAgIC8vIFVzZWQgdG8gY2hlY2sgd2hldGhlciB0cmFuc2Zvcm0gcGFyYW1zIG5lZWQgdG8gYmUgdXBkYXRlZAotICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKLX0gU2dUcmFuc2Zvcm07Ci0KLXR5cGVkZWYgc3RydWN0IFZlcnRleFNoYWRlcl9zIHsKLSAgICByc19wcm9ncmFtX3ZlcnRleCBwcm9ncmFtOwotICAgIC8vIEJ1ZmZlciB3aXRoIHZlcnRleCBjb25zdGFudCBkYXRhCi0gICAgcnNfYWxsb2NhdGlvbiBzaGFkZXJDb25zdDsKLSAgICAvLyBTaGFkZXJQYXJhbSdzIHRoYXQgcG9wdWxhdGUgZGF0YQotICAgIHJzX2FsbG9jYXRpb24gc2hhZGVyQ29uc3RQYXJhbXM7Ci0gICAgLy8gbG9jYXRpb24gb2YgdGhlIHBlciBvYmplY3QgY29uc3RhbnRzIG9uIHRoZSBidWZmZXIKLSAgICBpbnQgb2JqZWN0Q29uc3RJbmRleDsKLX0gU2dWZXJ0ZXhTaGFkZXI7Ci0KLXR5cGVkZWYgc3RydWN0IEZyYWdtZW50U2hhZGVyX3MgewotICAgIHJzX3Byb2dyYW1fZnJhZ21lbnQgcHJvZ3JhbTsKLSAgICAvLyBCdWZmZXIgd2l0aCB2ZXJ0ZXggY29uc3RhbnQgZGF0YQotICAgIHJzX2FsbG9jYXRpb24gc2hhZGVyQ29uc3Q7Ci0gICAgLy8gU2hhZGVyUGFyYW0ncyB0aGF0IHBvcHVsYXRlIGRhdGEKLSAgICByc19hbGxvY2F0aW9uIHNoYWRlckNvbnN0UGFyYW1zOwotICAgIC8vIFNoYWRlclBhcmFtJ3MgdGhhdCBzZXQgdGV4dHVyZXMKLSAgICByc19hbGxvY2F0aW9uIHNoYWRlclRleHR1cmVQYXJhbXM7Ci0gICAgLy8gbG9jYXRpb24gb2YgdGhlIHBlciBvYmplY3QgY29uc3RhbnRzIG9uIHRoZSBidWZmZXIKLSAgICBpbnQgb2JqZWN0Q29uc3RJbmRleDsKLX0gU2dGcmFnbWVudFNoYWRlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgUmVuZGVyU3RhdGVfcyB7Ci0gICAgcnNfYWxsb2NhdGlvbiBwdjsgLy8gVmVydGV4U2hhZGVyIHN0cnVjdAotICAgIHJzX2FsbG9jYXRpb24gcGY7IC8vIEZyYWdtZW50U2hhZGVyIHN0cnVjdAotICAgIHJzX3Byb2dyYW1fc3RvcmUgcHM7Ci0gICAgcnNfcHJvZ3JhbV9yYXN0ZXIgcHI7Ci19IFNnUmVuZGVyU3RhdGU7Ci0KLXR5cGVkZWYgc3RydWN0IFJlbmRlcmFibGVfcyB7Ci0gICAgcnNfYWxsb2NhdGlvbiByZW5kZXJfc3RhdGU7Ci0gICAgLy8gQnVmZmVyIHdpdGggdmVydGV4IGNvbnN0YW50IGRhdGEKLSAgICByc19hbGxvY2F0aW9uIHB2X2NvbnN0OwotICAgIC8vIFNoYWRlclBhcmFtJ3MgdGhhdCBwb3B1bGF0ZSBkYXRhCi0gICAgcnNfYWxsb2NhdGlvbiBwdl9jb25zdFBhcmFtczsKLSAgICAvLyBCdWZmZXIgd2l0aCBmcmFnbWVudCBjb25zdGFudCBkYXRhCi0gICAgcnNfYWxsb2NhdGlvbiBwZl9jb25zdDsKLSAgICAvLyBTaGFkZXJQYXJhbSdzIHRoYXQgcG9wdWxhdGUgZGF0YQotICAgIHJzX2FsbG9jYXRpb24gcGZfY29uc3RQYXJhbXM7Ci0gICAgcnNfYWxsb2NhdGlvbiBwZl90ZXh0dXJlc1s4XTsKLSAgICBpbnQgcGZfbnVtX3RleHR1cmVzOwotICAgIHJzX21lc2ggbWVzaDsKLSAgICBpbnQgbWVzaEluZGV4OwotICAgIHJzX2FsbG9jYXRpb24gdHJhbnNmb3JtTWF0cml4OwotICAgIHJzX2FsbG9jYXRpb24gbmFtZTsKLSAgICBmbG9hdDQgYm91bmRpbmdTcGhlcmU7Ci0gICAgZmxvYXQ0IHdvcmxkQm91bmRpbmdTcGhlcmU7Ci0gICAgaW50IGJWb2xJbml0aWFsaXplZDsKLSAgICBpbnQgY3VsbFR5cGU7IC8vIHNwZWNpZmllcyB3aGV0aGVyIHRvIGZydXN0dW0gY3VsbAotICAgIGludCBpc1Zpc2libGU7Ci19IFNnUmVuZGVyYWJsZTsKLQotdHlwZWRlZiBzdHJ1Y3QgUmVuZGVyUGFzc19zIHsKLSAgICByc19hbGxvY2F0aW9uIGNvbG9yX3RhcmdldDsKLSAgICByc19hbGxvY2F0aW9uIGRlcHRoX3RhcmdldDsKLSAgICByc19hbGxvY2F0aW9uIGNhbWVyYTsKLSAgICByc19hbGxvY2F0aW9uIG9iamVjdHM7Ci0KLSAgICBmbG9hdDQgY2xlYXJfY29sb3I7Ci0gICAgZmxvYXQgY2xlYXJfZGVwdGg7Ci0gICAgYm9vbCBzaG91bGRfY2xlYXJfY29sb3I7Ci0gICAgYm9vbCBzaG91bGRfY2xlYXJfZGVwdGg7Ci19IFNnUmVuZGVyUGFzczsKLQotdHlwZWRlZiBzdHJ1Y3QgQ2FtZXJhX3MgewotICAgIHJzX21hdHJpeDR4NCBwcm9qOwotICAgIHJzX21hdHJpeDR4NCB2aWV3OwotICAgIHJzX21hdHJpeDR4NCB2aWV3UHJvajsKLSAgICBmbG9hdDQgcG9zaXRpb247Ci0gICAgZmxvYXQgbmVhcjsKLSAgICBmbG9hdCBmYXI7Ci0gICAgZmxvYXQgaG9yaXpvbnRhbEZPVjsKLSAgICBmbG9hdCBhc3BlY3Q7Ci0gICAgcnNfYWxsb2NhdGlvbiBuYW1lOwotICAgIHJzX2FsbG9jYXRpb24gdHJhbnNmb3JtTWF0cml4OwotICAgIGZsb2F0NCBmcnVzdHVtUGxhbmVzWzZdOwotCi0gICAgaW50IGlzRGlydHk7Ci0gICAgLy8gVGltZXN0YW1wIG9mIHRoZSBjYW1lcmEgaXRzZWxmIHRvIHNpZ25hbCBwYXJhbXMgaWYgYW55dGhpbmcgY2hhbmdlcwotICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKLSAgICAvLyBUaW1lc3RhbXAgb2Ygb3VyIHRyYW5zZm9ybQotICAgIHVpbnQzMl90IHRyYW5zZm9ybVRpbWVzdGFtcDsKLX0gU2dDYW1lcmE7Ci0KLXR5cGVkZWYgc3RydWN0IExpZ2h0X3MgewotICAgIGZsb2F0NCBwb3NpdGlvbjsKLSAgICBmbG9hdDQgY29sb3I7Ci0gICAgZmxvYXQgaW50ZW5zaXR5OwotICAgIGludCB0eXBlOwotICAgIHJzX2FsbG9jYXRpb24gbmFtZTsKLSAgICByc19hbGxvY2F0aW9uIHRyYW5zZm9ybU1hdHJpeDsKLX0gU2dMaWdodDsKLQotLy8gVGhpcyByZXByZXNlbnRzIHRoZSBzaGFkZXIgcGFyYW1ldGVyIGRhdGEgbmVlZGVkIHRvIHNldCBhIGZsb2F0IG9yIHRyYW5zZm9ybSBkYXRhCi10eXBlZGVmIHN0cnVjdCBTaGFkZXJQYXJhbURhdGFfcyB7Ci0gICAgaW50IHR5cGU7Ci0gICAgZmxvYXQ0IGZsb2F0X3ZhbHVlOwotICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKLSAgICByc19hbGxvY2F0aW9uIHBhcmFtTmFtZTsKLSAgICByc19hbGxvY2F0aW9uIGNhbWVyYTsKLSAgICByc19hbGxvY2F0aW9uIGxpZ2h0OwotICAgIHJzX2FsbG9jYXRpb24gdHJhbnNmb3JtOwotICAgIHJzX2FsbG9jYXRpb24gdGV4dHVyZTsKLX0gU2dTaGFkZXJQYXJhbURhdGE7Ci0KLS8vIFRoaXMgcmVwcmVzZW50cyBhIHNoYWRlciBwYXJhbWV0ZXIgdGhhdCBrbm93cyBob3cgdG8gdXBkYXRlIGl0c2VsZiBmb3IgYSBnaXZlbgotLy8gcmVuZGVyYWJsZSBvciBzaGFkZXIgYW5kIGNvbnRhaW5zIGEgdGltZXN0YW1wIGZvciB0aGUgbGFzdCB0aW1lIHRoaXMgYnVmZmVyIHdhcyB1cGRhdGVkCi10eXBlZGVmIHN0cnVjdCBTaGFkZXJQYXJhbV9zIHsKLSAgICAvLyBVc2VkIHRvIGNoZWNrIHdoZXRoZXIgdHJhbnNmb3JtIHBhcmFtcyBuZWVkIHRvIGJlIHVwZGF0ZWQKLSAgICB1aW50MzJfdCB0cmFuc2Zvcm1UaW1lc3RhbXA7Ci0gICAgLy8gVXNlZCB0byBjaGVjayB3aGV0aGVyIGRhdGEgcGFyYW1zIG5lZWQgdG8gYmUgdXBkYXRlZAotICAgIC8vIFRoZXNlIGFyZSB1c2VkIHdoZW4gc29tZWJvZHkgc2V0IHRoZSBtYXRyaXggb2YgZmxvYXQgdmFsdWUgZGlyZWN0bHkgaW4gamF2YQotICAgIHVpbnQzMl90IGRhdGFUaW1lc3RhbXA7Ci0gICAgLy8gU3BlY2lmaWVzIHdoZXJlIGluIHRoZSBjb25zdGFudCBidWZmZXIgZGF0YSBnZXRzIHdyaXR0ZW4gdG8KLSAgICBpbnQgYnVmZmVyT2Zmc2V0OwotICAgIC8vIEFuIGluc3RhbmNlIG9mIFNnU2hhZGVyUGFyYW1EYXRhIHRoYXQgY291bGQgYmUgc2hhcmVkIGJ5IG11bHRpcGxlIG9iamVjdHMKLSAgICByc19hbGxvY2F0aW9uIGRhdGE7Ci0gICAgLy8gSG93IG1hbnkgY29tcG9uZW50cyBvZiB0aGUgdmVjdG9yIHdlIG5lZWQgdG8gd3JpdGUKLSAgICBpbnQgZmxvYXRfdmVjU2l6ZTsKLX0gU2dTaGFkZXJQYXJhbTsKLQotLy8gVGhpcyByZXByZXNlbnRzIGEgdGV4dHVyZSBvYmplY3QKLXR5cGVkZWYgc3RydWN0IFRleHR1cmVfcyB7Ci0gICAgdWludDMyX3QgdHlwZTsKLSAgICByc19hbGxvY2F0aW9uIHRleHR1cmU7Ci19IFNnVGV4dHVyZTsKLQotc3RhdGljIGlubGluZSB2b2lkIHByaW50TmFtZShyc19hbGxvY2F0aW9uIG5hbWUpIHsKLSAgICBpZiAoIXJzSXNPYmplY3QobmFtZSkpIHsKLSAgICAgICAgcnNEZWJ1Zygibm8gbmFtZSIsIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcnNEZWJ1ZygoY29uc3QgY2hhciopcnNHZXRFbGVtZW50QXQobmFtZSwgMCksIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJpbnRDYW1lcmFJbmZvKGNvbnN0IFNnQ2FtZXJhICpjYW0pIHsKLSAgICByc0RlYnVnKCIqKioqKiBDYW1lcmEgaW5mb3JtYXRpb24uIHB0cjoiLCBjYW0pOwotICAgIHByaW50TmFtZShjYW0tPm5hbWUpOwotICAgIGNvbnN0IFNnVHJhbnNmb3JtICpjYW1UcmFuc2Zvcm0gPSAoY29uc3QgU2dUcmFuc2Zvcm0gKilyc0dldEVsZW1lbnRBdChjYW0tPnRyYW5zZm9ybU1hdHJpeCwgMCk7Ci0gICAgcnNEZWJ1ZygiVHJhbnNmb3JtIG5hbWU6IiwgY2FtVHJhbnNmb3JtKTsKLSAgICBwcmludE5hbWUoY2FtVHJhbnNmb3JtLT5uYW1lKTsKLQotICAgIHJzRGVidWcoIkFzcGVjdDogIiwgY2FtLT5hc3BlY3QpOwotICAgIHJzRGVidWcoIk5lYXI6ICIsIGNhbS0+bmVhcik7Ci0gICAgcnNEZWJ1ZygiRmFyOiAiLCBjYW0tPmZhcik7Ci0gICAgcnNEZWJ1ZygiRm92OiAiLCBjYW0tPmhvcml6b250YWxGT1YpOwotICAgIHJzRGVidWcoIlBvc2l0aW9uOiAiLCBjYW0tPnBvc2l0aW9uKTsKLSAgICByc0RlYnVnKCJQcm9qOiAiLCAmY2FtLT5wcm9qKTsKLSAgICByc0RlYnVnKCJWaWV3OiAiLCAmY2FtLT52aWV3KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHByaW50TGlnaHRJbmZvKGNvbnN0IFNnTGlnaHQgKmxpZ2h0KSB7Ci0gICAgcnNEZWJ1ZygiKioqKiogTGlnaHQgaW5mb3JtYXRpb24uIHB0cjoiLCBsaWdodCk7Ci0gICAgcHJpbnROYW1lKGxpZ2h0LT5uYW1lKTsKLSAgICBjb25zdCBTZ1RyYW5zZm9ybSAqbFRyYW5zZm9ybSA9IChjb25zdCBTZ1RyYW5zZm9ybSAqKXJzR2V0RWxlbWVudEF0KGxpZ2h0LT50cmFuc2Zvcm1NYXRyaXgsIDApOwotICAgIHJzRGVidWcoIlRyYW5zZm9ybSBuYW1lOiIsIGxUcmFuc2Zvcm0pOwotICAgIHByaW50TmFtZShsVHJhbnNmb3JtLT5uYW1lKTsKLQotICAgIHJzRGVidWcoIlBvc2l0aW9uOiAiLCBsaWdodC0+cG9zaXRpb24pOwotICAgIHJzRGVidWcoIkNvbG9yIDogIiwgbGlnaHQtPmNvbG9yKTsKLSAgICByc0RlYnVnKCJJbnRlbnNpdHk6ICIsIGxpZ2h0LT5pbnRlbnNpdHkpOwotICAgIHJzRGVidWcoIlR5cGU6ICIsIGxpZ2h0LT50eXBlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldENhbWVyYVJheShjb25zdCBTZ0NhbWVyYSAqY2FtLCBpbnQgc2NyZWVuWCwgaW50IHNjcmVlblksIGZsb2F0MyAqcG50LCBmbG9hdDMgKnZlYykgewotICAgIHJzRGVidWcoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIsIHNjcmVlblgpOwotICAgIHJzRGVidWcoIlBvaW50IFgiLCBzY3JlZW5YKTsKLSAgICByc0RlYnVnKCJQb2ludCBZIiwgc2NyZWVuWSk7Ci0KLSAgICByc19tYXRyaXg0eDQgbXZwSW52OwotICAgIHJzTWF0cml4TG9hZCgmbXZwSW52LCAmY2FtLT52aWV3UHJvaik7Ci0gICAgcnNNYXRyaXhJbnZlcnNlKCZtdnBJbnYpOwotCi0gICAgZmxvYXQgd2lkdGggPSAoZmxvYXQpcnNnR2V0V2lkdGgoKTsKLSAgICBmbG9hdCBoZWlnaHQgPSAoZmxvYXQpcnNnR2V0SGVpZ2h0KCk7Ci0KLSAgICBmbG9hdDQgcG9zID0geyhmbG9hdClzY3JlZW5YLCBoZWlnaHQgLSAoZmxvYXQpc2NyZWVuWSwgMC4wZiwgMS4wZn07Ci0KLSAgICBwb3MueCAvPSB3aWR0aDsKLSAgICBwb3MueSAvPSBoZWlnaHQ7Ci0KLSAgICByc0RlYnVnKCJQcmUgTm9ybSBYIiwgcG9zLngpOwotICAgIHJzRGVidWcoIlByZSBOb3JtIFkiLCBwb3MueSk7Ci0KLSAgICBwb3MueHkgPSBwb3MueHkgKiAyLjBmIC0gMS4wZjsKLQotICAgIHJzRGVidWcoIk5vcm0gWCIsIHBvcy54KTsKLSAgICByc0RlYnVnKCJOb3JtIFkiLCBwb3MueSk7Ci0KLSAgICBwb3MgPSByc01hdHJpeE11bHRpcGx5KCZtdnBJbnYsIHBvcyk7Ci0gICAgZmxvYXQgb25lT3ZlclcgPSAxLjBmIC8gcG9zLnc7Ci0gICAgcG9zLnh5eiAqPSBvbmVPdmVyVzsKLQotICAgIHJzRGVidWcoIldvcmxkIFgiLCBwb3MueCk7Ci0gICAgcnNEZWJ1ZygiV29ybGQgWSIsIHBvcy55KTsKLSAgICByc0RlYnVnKCJXb3JsZCBaIiwgcG9zLnopOwotCi0gICAgcnNEZWJ1ZygiQ2FtIFgiLCBjYW0tPnBvc2l0aW9uLngpOwotICAgIHJzRGVidWcoIkNhbSBZIiwgY2FtLT5wb3NpdGlvbi55KTsKLSAgICByc0RlYnVnKCJDYW0gWiIsIGNhbS0+cG9zaXRpb24ueik7Ci0KLSAgICAqdmVjID0gbm9ybWFsaXplKHBvcy54eXogLSBjYW0tPnBvc2l0aW9uLnh5eik7Ci0gICAgcnNEZWJ1ZygiVmVjIFgiLCB2ZWMtPngpOwotICAgIHJzRGVidWcoIlZlYyBZIiwgdmVjLT55KTsKLSAgICByc0RlYnVnKCJWZWMgWiIsIHZlYy0+eik7Ci0gICAgKnBudCA9IGNhbS0+cG9zaXRpb24ueHl6OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaW50ZXJzZWN0KGNvbnN0IFNnUmVuZGVyYWJsZSAqb2JqLCBmbG9hdDMgcG50LCBmbG9hdDMgdmVjKSB7Ci0gICAgLy8gU29sdmluZyBmb3IgdF4yICsgQnQgKyBDID0gMAotICAgIGZsb2F0MyBvcmlnaW5NaW51c0NlbnRlciA9IHBudCAtIG9iai0+d29ybGRCb3VuZGluZ1NwaGVyZS54eXo7Ci0gICAgZmxvYXQgQiA9IGRvdChvcmlnaW5NaW51c0NlbnRlciwgdmVjKSAqIDIuMGY7Ci0gICAgZmxvYXQgQyA9IGRvdChvcmlnaW5NaW51c0NlbnRlciwgb3JpZ2luTWludXNDZW50ZXIpIC0KLSAgICAgICAgICAgICAgb2JqLT53b3JsZEJvdW5kaW5nU3BoZXJlLncgKiBvYmotPndvcmxkQm91bmRpbmdTcGhlcmUudzsKLQotICAgIGZsb2F0IGRpc2NyaW1pbmFudCA9IEIgKiBCIC0gNC4wZiAqIEM7Ci0gICAgaWYgKGRpc2NyaW1pbmFudCA8IDAuMGYpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBkaXNjcmltaW5hbnQgPSBzcXJ0KGRpc2NyaW1pbmFudCk7Ci0KLSAgICBmbG9hdCB0MCA9ICgtQiAtIGRpc2NyaW1pbmFudCkgKiAwLjVmOwotICAgIGZsb2F0IHQxID0gKC1CICsgZGlzY3JpbWluYW50KSAqIDAuNWY7Ci0KLSAgICBpZiAodDAgPiB0MSkgewotICAgICAgICBmbG9hdCB0ZW1wID0gdDA7Ci0gICAgICAgIHQwID0gdDE7Ci0gICAgICAgIHQxID0gdGVtcDsKLSAgICB9Ci0KLSAgICAvLyBUaGUgc3BoZXJlIGlzIGJlaGluZCB1cwotICAgIGlmICh0MSA8IDAuMGYpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCi0jZW5kaWYgLy8gX1RSQU5TRk9STV9ERUZfCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3RyYW5zZm9ybS5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvdHJhbnNmb3JtLnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDBiNWJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvdHJhbnNmb3JtLnJzCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0vLwotLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0vLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0vLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLS8vCi0vLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotLy8KLS8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLS8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0vLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLS8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLS8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi0jcHJhZ21hIHZlcnNpb24oMSkKLQotI3ByYWdtYSBycyBqYXZhX3BhY2thZ2VfbmFtZShjb20uYW5kcm9pZC5tb2RlbHZpZXdlcikKLQotI2luY2x1ZGUgInNjZW5lZ3JhcGhfb2JqZWN0cy5yc2giCi0KLXJzX3NjcmlwdCBnVHJhbnNmb3JtU2NyaXB0OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50IGNoYW5nZWQ7Ci0gICAgcnNfbWF0cml4NHg0ICptYXQ7Ci19IFBhcmVudERhdGE7Ci0KLS8vI2RlZmluZSBERUJVR19UUkFOU0ZPUk1TCi0vKiBVbnVzZWQgZnVuY3Rpb246Ci1zdGF0aWMgdm9pZCBkZWJ1Z1RyYW5zZm9ybShTZ1RyYW5zZm9ybSAqZGF0YSwgY29uc3QgUGFyZW50RGF0YSAqcGFyZW50KSB7Ci0gICAgcnNEZWJ1ZygiKioqKioqIDxUcmFuc2Zvcm0+ICoqKioqKiIsIChpbnQpZGF0YSk7Ci0gICAgcHJpbnROYW1lKGRhdGEtPm5hbWUpOwotICAgIHJzRGVidWcoImlzRGlydHkiLCBkYXRhLT5pc0RpcnR5KTsKLSAgICByc0RlYnVnKCJwYXJlbnQiLCAoaW50KXBhcmVudCk7Ci0gICAgcnNEZWJ1ZygiY2hpbGQgIiwgcnNJc09iamVjdChkYXRhLT5jaGlsZHJlbikpOwotCi0gICAgLy8gUmVmcmVzaCBtYXRyaWNlcyBpZiBkaXJ0eQotICAgIGlmIChkYXRhLT5pc0RpcnR5ICYmIHJzSXNPYmplY3QoZGF0YS0+Y29tcG9uZW50cykpIHsKLSAgICAgICAgdWludDMyX3QgbnVtQ29tcG9uZW5ldHMgPSByc0FsbG9jYXRpb25HZXREaW1YKGRhdGEtPmNvbXBvbmVudHMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNvbXBvbmVuZXRzOyBpICsrKSB7Ci0gICAgICAgICAgICBjb25zdCBTZ1RyYW5zZm9ybUNvbXBvbmVudCAqY29tcCA9IE5VTEw7Ci0gICAgICAgICAgICBjb21wID0gKGNvbnN0IFNnVHJhbnNmb3JtQ29tcG9uZW50ICopcnNHZXRFbGVtZW50QXQoZGF0YS0+Y29tcG9uZW50cywgaSk7Ci0KLSAgICAgICAgICAgIGlmIChyc0lzT2JqZWN0KGNvbXAtPm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcnNEZWJ1ZygoY29uc3QgY2hhciopcnNHZXRFbGVtZW50QXQoY29tcC0+bmFtZSwgMCksIGNvbXAtPnZhbHVlKTsKLSAgICAgICAgICAgICAgICByc0RlYnVnKCJUeXBlIiwgY29tcC0+dHlwZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJzRGVidWcoIm5vIG5hbWUiLCBjb21wLT52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcnNEZWJ1ZygiVHlwZSIsIGNvbXAtPnR5cGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcnNEZWJ1ZygidGltZXN0YW1wIiwgZGF0YS0+dGltZXN0YW1wKTsKLSAgICByc0RlYnVnKCIqKioqKiogPC9UcmFuc2Zvcm0+ICoqKioqKiIsIChpbnQpZGF0YSk7Ci19Ci0qLwotCi1zdGF0aWMgdm9pZCBhcHBlbmRUcmFuc2Zvcm1hdGlvbihpbnQgdHlwZSwgZmxvYXQ0IGRhdGEsIHJzX21hdHJpeDR4NCAqbWF0KSB7Ci0gICAgcnNfbWF0cml4NHg0IHRlbXA7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFRSQU5TRk9STV9UUkFOU0xBVEU6Ci0gICAgICAgIHJzTWF0cml4TG9hZFRyYW5zbGF0ZSgmdGVtcCwgZGF0YS54LCBkYXRhLnksIGRhdGEueik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVFJBTlNGT1JNX1JPVEFURToKLSAgICAgICAgcnNNYXRyaXhMb2FkUm90YXRlKCZ0ZW1wLCBkYXRhLncsIGRhdGEueCwgZGF0YS55LCBkYXRhLnopOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRSQU5TRk9STV9TQ0FMRToKLSAgICAgICAgcnNNYXRyaXhMb2FkU2NhbGUoJnRlbXAsIGRhdGEueCwgZGF0YS55LCBkYXRhLnopOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcnNNYXRyaXhNdWx0aXBseShtYXQsICZ0ZW1wKTsKLX0KLQotdm9pZCByb290KGNvbnN0IHJzX2FsbG9jYXRpb24gKnZfaW4sIHJzX2FsbG9jYXRpb24gKnZfb3V0LCBjb25zdCB2b2lkICp1c3JEYXRhKSB7Ci0KLSAgICBTZ1RyYW5zZm9ybSAqZGF0YSA9IChTZ1RyYW5zZm9ybSAqKXJzR2V0RWxlbWVudEF0KCp2X2luLCAwKTsKLSAgICBjb25zdCBQYXJlbnREYXRhICpwYXJlbnQgPSAoY29uc3QgUGFyZW50RGF0YSAqKXVzckRhdGE7Ci0KLSNpZmRlZiBERUJVR19UUkFOU0ZPUk1TCi0gICAgZGVidWdUcmFuc2Zvcm0oZGF0YSwgcGFyZW50KTsKLSNlbmRpZiAvL0RFQlVHX1RSQU5TRk9STVMKLQotICAgIHJzX21hdHJpeDR4NCAqbG9jYWxNYXQgPSAmZGF0YS0+bG9jYWxNYXQ7Ci0gICAgcnNfbWF0cml4NHg0ICpnbG9iYWxNYXQgPSAmZGF0YS0+Z2xvYmFsTWF0OwotCi0gICAgLy8gUmVmcmVzaCBtYXRyaWNlcyBpZiBkaXJ0eQotICAgIGlmIChkYXRhLT5pc0RpcnR5ICYmIHJzSXNPYmplY3QoZGF0YS0+Y29tcG9uZW50cykpIHsKLSAgICAgICAgYm9vbCByZXNldExvY2FsID0gZmFsc2U7Ci0gICAgICAgIHVpbnQzMl90IG51bUNvbXBvbmVuZXRzID0gcnNBbGxvY2F0aW9uR2V0RGltWChkYXRhLT5jb21wb25lbnRzKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Db21wb25lbmV0czsgaSArKykgewotICAgICAgICAgICAgaWYgKCFyZXNldExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgLy8gUmVzZXQgb3VyIGxvY2FsIG1hdHJpeCBvbmx5IGZvciBjb21wb25lbnQgdHJhbnNmb3JtcwotICAgICAgICAgICAgICAgIHJzTWF0cml4TG9hZElkZW50aXR5KGxvY2FsTWF0KTsKLSAgICAgICAgICAgICAgICByZXNldExvY2FsID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnN0IFNnVHJhbnNmb3JtQ29tcG9uZW50ICpjb21wID0gTlVMTDsKLSAgICAgICAgICAgIGNvbXAgPSAoY29uc3QgU2dUcmFuc2Zvcm1Db21wb25lbnQgKilyc0dldEVsZW1lbnRBdChkYXRhLT5jb21wb25lbnRzLCBpKTsKLSAgICAgICAgICAgIGFwcGVuZFRyYW5zZm9ybWF0aW9uKGNvbXAtPnR5cGUsIGNvbXAtPnZhbHVlLCBsb2NhbE1hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgIGRhdGEtPmlzRGlydHkgPSAocGFyZW50LT5jaGFuZ2VkIHx8IGRhdGEtPmlzRGlydHkpID8gMSA6IDA7Ci0gICAgICAgIGlmIChkYXRhLT5pc0RpcnR5KSB7Ci0gICAgICAgICAgICByc01hdHJpeExvYWQoZ2xvYmFsTWF0LCBwYXJlbnQtPm1hdCk7Ci0gICAgICAgICAgICByc01hdHJpeE11bHRpcGx5KGdsb2JhbE1hdCwgbG9jYWxNYXQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChkYXRhLT5pc0RpcnR5KSB7Ci0gICAgICAgIHJzTWF0cml4TG9hZChnbG9iYWxNYXQsIGxvY2FsTWF0KTsKLSAgICB9Ci0KLSAgICBQYXJlbnREYXRhIHRvQ2hpbGQ7Ci0gICAgdG9DaGlsZC5jaGFuZ2VkID0gMDsKLSAgICB0b0NoaWxkLm1hdCA9IGdsb2JhbE1hdDsKLQotICAgIGlmIChkYXRhLT5pc0RpcnR5KSB7Ci0gICAgICAgIHRvQ2hpbGQuY2hhbmdlZCA9IDE7Ci0gICAgICAgIGRhdGEtPnRpbWVzdGFtcCArKzsKLSAgICB9Ci0KLSAgICBpZiAocnNJc09iamVjdChkYXRhLT5jaGlsZHJlbikpIHsKLSAgICAgICAgcnNfYWxsb2NhdGlvbiBudWxsQWxsb2MgPSB7MH07Ci0gICAgICAgIHJzRm9yRWFjaChnVHJhbnNmb3JtU2NyaXB0LCBkYXRhLT5jaGlsZHJlbiwgbnVsbEFsbG9jLCAmdG9DaGlsZCwgc2l6ZW9mKHRvQ2hpbGQpKTsKLSAgICB9Ci0KLSAgICBkYXRhLT5pc0RpcnR5ID0gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvdmVydGV4X3BhcmFtcy5ycyBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3NjZW5lZ3JhcGgvdmVydGV4X3BhcmFtcy5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg5NTVhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC9zY2VuZWdyYXBoL3ZlcnRleF9wYXJhbXMucnMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2NlbmVncmFwaCkKLQotI2luY2x1ZGUgInNjZW5lZ3JhcGhfb2JqZWN0cy5yc2giCi0KLS8vI2RlZmluZSBERUJVR19QQVJBTVMKLQotI2luY2x1ZGUgInBhcmFtcy5yc2giCi0KLXZvaWQgcm9vdChyc19hbGxvY2F0aW9uICp2X291dCwgY29uc3Qgdm9pZCAqdXNyRGF0YSkgewotICAgIFNnVmVydGV4U2hhZGVyICpzaGFkZXIgPSAoU2dWZXJ0ZXhTaGFkZXIgKilyc0dldEVsZW1lbnRBdCgqdl9vdXQsIDApOwotICAgIGNvbnN0IFNnQ2FtZXJhICpjYW1lcmEgPSAoY29uc3QgU2dDYW1lcmEqKXVzckRhdGE7Ci0gICAgcHJvY2Vzc0FsbFBhcmFtcyhzaGFkZXItPnNoYWRlckNvbnN0LCBzaGFkZXItPnNoYWRlckNvbnN0UGFyYW1zLCBjYW1lcmEpOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9GaWxlU2VsZWN0b3IuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvRmlsZVNlbGVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMGUxMzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9GaWxlU2VsZWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50ZXN0YXBwOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuTGlzdEFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLQotLyoqCi0gKiBBIGxpc3QgdmlldyB3aGVyZSB0aGUgbGFzdCBpdGVtIHRoZSB1c2VyIGNsaWNrZWQgaXMgcGxhY2VkIGluCi0gKiB0aGUgImFjdGl2YXRlZCIgc3RhdGUsIGNhdXNpbmcgaXRzIGJhY2tncm91bmQgdG8gaGlnaGxpZ2h0LgotICovCi1wdWJsaWMgY2xhc3MgRmlsZVNlbGVjdG9yIGV4dGVuZHMgTGlzdEFjdGl2aXR5IHsKLQotICAgIEZpbGVbXSBtQ3VycmVudFN1Ykxpc3Q7Ci0gICAgRmlsZSBtQ3VycmVudEZpbGU7Ci0KLSAgICBjbGFzcyBEQUVGaWx0ZXIgaW1wbGVtZW50cyBGaWxlRmlsdGVyIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZmlsZSkgewotICAgICAgICAgICAgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIuZGFlIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcG9wdWxhdGVMaXN0KEZpbGUgZmlsZSkgewotCi0gICAgICAgIG1DdXJyZW50RmlsZSA9IGZpbGU7Ci0gICAgICAgIHNldFRpdGxlKG1DdXJyZW50RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSArICIvKi5kYWUiKTsKLSAgICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIG5hbWVzLmFkZCgiLi4iKTsKLQotICAgICAgICBtQ3VycmVudFN1Ykxpc3QgPSBtQ3VycmVudEZpbGUubGlzdEZpbGVzKG5ldyBEQUVGaWx0ZXIoKSk7Ci0KLSAgICAgICAgaWYgKG1DdXJyZW50U3ViTGlzdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1DdXJyZW50U3ViTGlzdC5sZW5ndGg7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZmlsZU5hbWUgPSBtQ3VycmVudFN1Ykxpc3RbaV0uZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFN1Ykxpc3RbaV0uaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZSA9ICIvIiArIGZpbGVOYW1lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lcy5hZGQoZmlsZU5hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBidWlsdC1pbiBsYXlvdXQgZm9yIHNob3dpbmcgYSBsaXN0IGl0ZW0gd2l0aCBhIHNpbmdsZQotICAgICAgICAvLyBsaW5lIG9mIHRleHQgd2hvc2UgYmFja2dyb3VuZCBpcyBjaGFuZ2VzIHdoZW4gYWN0aXZhdGVkLgotICAgICAgICBzZXRMaXN0QWRhcHRlcihuZXcgQXJyYXlBZGFwdGVyPFN0cmluZz4odGhpcywKLSAgICAgICAgICAgICAgICBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9saXN0X2l0ZW1fYWN0aXZhdGVkXzEsIG5hbWVzKSk7Ci0gICAgICAgIGdldExpc3RWaWV3KCkuc2V0VGV4dEZpbHRlckVuYWJsZWQodHJ1ZSk7Ci0KLSAgICAgICAgLy8gVGVsbCB0aGUgbGlzdCB2aWV3IHRvIHNob3cgb25lIGNoZWNrZWQvYWN0aXZhdGVkIGl0ZW0gYXQgYSB0aW1lLgotICAgICAgICBnZXRMaXN0VmlldygpLnNldENob2ljZU1vZGUoTGlzdFZpZXcuQ0hPSUNFX01PREVfU0lOR0xFKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAgICAgcG9wdWxhdGVMaXN0KG5ldyBGaWxlKCIvc2RjYXJkLyIpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkxpc3RJdGVtQ2xpY2soTGlzdFZpZXcgbCwgVmlldyB2LCBpbnQgcG9zaXRpb24sIGxvbmcgaWQpIHsKLSAgICAgICAgaWYgKHBvc2l0aW9uID09IDApIHsKLSAgICAgICAgICAgIEZpbGUgcGFyZW50ID0gbUN1cnJlbnRGaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvcHVsYXRlTGlzdChwYXJlbnQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGhlIGZpcnN0IHRoaW5nIGluIGxpc3QgaXMgcGFyZW50IGRpcmVjdG9yeQotICAgICAgICBGaWxlIHNlbGVjdGVkRmlsZSA9IG1DdXJyZW50U3ViTGlzdFtwb3NpdGlvbiAtIDFdOwotICAgICAgICBpZiAoc2VsZWN0ZWRGaWxlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgICAgIHBvcHVsYXRlTGlzdChzZWxlY3RlZEZpbGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgSW50ZW50IHJlc3VsdEludGVudCA9IG5ldyBJbnRlbnQoKTsKLSAgICAgICAgcmVzdWx0SW50ZW50LnNldERhdGEoVXJpLmZyb21GaWxlKHNlbGVjdGVkRmlsZSkpOwotICAgICAgICBzZXRSZXN1bHQoUkVTVUxUX09LLCByZXN1bHRJbnRlbnQpOwotICAgICAgICBmaW5pc2goKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvRnVsbHNjcmVlbkJsdXIuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvRnVsbHNjcmVlbkJsdXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhmOTE2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL0Z1bGxzY3JlZW5CbHVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLyoNCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdA0KLSAqDQotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0gKi8NCi0NCi0NCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRlc3RhcHA7DQotDQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQotDQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguKjsNCi0NCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7DQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOw0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcEZhY3Rvcnk7DQotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOw0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOw0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5BbGxvY2F0aW9uLk1pcG1hcENvbnRyb2w7DQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuQnVpbGRlcjsNCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRm9udC5TdHlsZTsNCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbS5UZXh0dXJlVHlwZTsNCi1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlLkRlcHRoRnVuYzsNCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsNCi0NCi1jbGFzcyBGdWxsc2NyZWVuQmx1ciB7DQotDQotICAgIHN0YXRpYyBUZXh0dXJlUmVuZGVyVGFyZ2V0IHNSZW5kZXJUYXJnZXRCbHVyMENvbG9yOw0KLSAgICBzdGF0aWMgVGV4dHVyZVJlbmRlclRhcmdldCBzUmVuZGVyVGFyZ2V0Qmx1cjBEZXB0aDsNCi0gICAgc3RhdGljIFRleHR1cmVSZW5kZXJUYXJnZXQgc1JlbmRlclRhcmdldEJsdXIxQ29sb3I7DQotICAgIHN0YXRpYyBUZXh0dXJlUmVuZGVyVGFyZ2V0IHNSZW5kZXJUYXJnZXRCbHVyMURlcHRoOw0KLSAgICBzdGF0aWMgVGV4dHVyZVJlbmRlclRhcmdldCBzUmVuZGVyVGFyZ2V0Qmx1cjJDb2xvcjsNCi0gICAgc3RhdGljIFRleHR1cmVSZW5kZXJUYXJnZXQgc1JlbmRlclRhcmdldEJsdXIyRGVwdGg7DQotDQotICAgIHN0YXRpYyBGcmFnbWVudFNoYWRlciBtUEZfQmx1ckg7DQotICAgIHN0YXRpYyBGcmFnbWVudFNoYWRlciBtUEZfQmx1clY7DQotICAgIHN0YXRpYyBGcmFnbWVudFNoYWRlciBtUEZfU2VsZWN0Q29sb3I7DQotICAgIHN0YXRpYyBGcmFnbWVudFNoYWRlciBtUEZfVGV4dHVyZTsNCi0gICAgc3RhdGljIFZlcnRleFNoYWRlciBtUFZfUGFpbnQ7DQotICAgIHN0YXRpYyBWZXJ0ZXhTaGFkZXIgbVBWX0JsdXI7DQotDQotICAgIHN0YXRpYyBpbnQgdGFyZ2V0V2lkdGg7DQotICAgIHN0YXRpYyBpbnQgdGFyZ2V0SGVpZ2h0Ow0KLQ0KLSAgICAvLyBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIGZ1bGwgc2NyZWVuIGJsdXIgaXMgZW5hYmxlZA0KLSAgICAvLyBCYXNpY2FsbHksIGl0J3MgdGhlIG9mZnNjcmVlbiByZW5kZXIgdGFyZ2V0cw0KLSAgICBzdGF0aWMgdm9pZCBjcmVhdGVSZW5kZXJUYXJnZXRzKFJlbmRlclNjcmlwdEdMIHJzLCBpbnQgdywgaW50IGgpIHsNCi0gICAgICAgIHRhcmdldFdpZHRoID0gdy84Ow0KLSAgICAgICAgdGFyZ2V0SGVpZ2h0ID0gaC84Ow0KLSAgICAgICAgVHlwZS5CdWlsZGVyIGIgPSBuZXcgVHlwZS5CdWlsZGVyKHJzLCBFbGVtZW50LlJHQkFfODg4OChycykpOw0KLSAgICAgICAgVHlwZSByZW5kZXJUeXBlID0gYi5zZXRYKHRhcmdldFdpZHRoKS5zZXRZKHRhcmdldEhlaWdodCkuY3JlYXRlKCk7DQotICAgICAgICBpbnQgdXNhZ2UgPSBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfCBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQ7DQotICAgICAgICBzUmVuZGVyVGFyZ2V0Qmx1cjBDb2xvciA9IG5ldyBUZXh0dXJlUmVuZGVyVGFyZ2V0KEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIHJlbmRlclR5cGUsIHVzYWdlKSk7DQotICAgICAgICBzUmVuZGVyVGFyZ2V0Qmx1cjFDb2xvciA9IG5ldyBUZXh0dXJlUmVuZGVyVGFyZ2V0KEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIHJlbmRlclR5cGUsIHVzYWdlKSk7DQotICAgICAgICBzUmVuZGVyVGFyZ2V0Qmx1cjJDb2xvciA9IG5ldyBUZXh0dXJlUmVuZGVyVGFyZ2V0KEFsbG9jYXRpb24uY3JlYXRlVHlwZWQocnMsIHJlbmRlclR5cGUsIHVzYWdlKSk7DQotDQotICAgICAgICBiID0gbmV3IFR5cGUuQnVpbGRlcihycywgRWxlbWVudC5jcmVhdGVQaXhlbChycywgRWxlbWVudC5EYXRhVHlwZS5VTlNJR05FRF8xNiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuRGF0YUtpbmQuUElYRUxfREVQVEgpKTsNCi0gICAgICAgIHJlbmRlclR5cGUgPSBiLnNldFgodGFyZ2V0V2lkdGgpLnNldFkodGFyZ2V0SGVpZ2h0KS5jcmVhdGUoKTsNCi0gICAgICAgIHVzYWdlID0gQWxsb2NhdGlvbi5VU0FHRV9HUkFQSElDU19SRU5ERVJfVEFSR0VUOw0KLSAgICAgICAgc1JlbmRlclRhcmdldEJsdXIwRGVwdGggPSBuZXcgVGV4dHVyZVJlbmRlclRhcmdldChBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKHJzLCByZW5kZXJUeXBlLCB1c2FnZSkpOw0KLSAgICAgICAgc1JlbmRlclRhcmdldEJsdXIxRGVwdGggPSBuZXcgVGV4dHVyZVJlbmRlclRhcmdldChBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKHJzLCByZW5kZXJUeXBlLCB1c2FnZSkpOw0KLSAgICAgICAgc1JlbmRlclRhcmdldEJsdXIyRGVwdGggPSBuZXcgVGV4dHVyZVJlbmRlclRhcmdldChBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKHJzLCByZW5kZXJUeXBlLCB1c2FnZSkpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyB2b2lkIGFkZE9mZnNldHMoUmVuZGVyYWJsZSBxdWFkLCBmbG9hdCBhZHZhbmNlKSB7DQotICAgICAgICBxdWFkLmFwcGVuZFNvdXJjZVBhcmFtcyhuZXcgRmxvYXQ0UGFyYW0oImJsdXJPZmZzZXQwIiwgLSBhZHZhbmNlICogMi41ZikpOw0KLSAgICAgICAgcXVhZC5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IEZsb2F0NFBhcmFtKCJibHVyT2Zmc2V0MSIsIC0gYWR2YW5jZSAqIDAuNWYpKTsNCi0gICAgICAgIHF1YWQuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBGbG9hdDRQYXJhbSgiYmx1ck9mZnNldDIiLCBhZHZhbmNlICogMS41ZikpOw0KLSAgICAgICAgcXVhZC5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IEZsb2F0NFBhcmFtKCJibHVyT2Zmc2V0MyIsIGFkdmFuY2UgKiAzLjVmKSk7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIFJlbmRlclBhc3MgYWRkUGFzcyhTY2VuZSBzY2VuZSwgQ2FtZXJhIGNhbSwgVGV4dHVyZVJlbmRlclRhcmdldCBjb2xvciwgVGV4dHVyZVJlbmRlclRhcmdldCBkZXB0aCkgew0KLSAgICAgICAgUmVuZGVyUGFzcyBwYXNzID0gbmV3IFJlbmRlclBhc3MoKTsNCi0gICAgICAgIHBhc3Muc2V0Q29sb3JUYXJnZXQoY29sb3IpOw0KLSAgICAgICAgcGFzcy5zZXREZXB0aFRhcmdldChkZXB0aCk7DQotICAgICAgICBwYXNzLnNldFNob3VsZENsZWFyQ29sb3IoZmFsc2UpOw0KLSAgICAgICAgcGFzcy5zZXRTaG91bGRDbGVhckRlcHRoKGZhbHNlKTsNCi0gICAgICAgIHBhc3Muc2V0Q2FtZXJhKGNhbSk7DQotICAgICAgICBzY2VuZS5hcHBlbmRSZW5kZXJQYXNzKHBhc3MpOw0KLSAgICAgICAgcmV0dXJuIHBhc3M7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIHZvaWQgYWRkQmx1clBhc3NlcyhTY2VuZSBzY2VuZSwgUmVuZGVyU2NyaXB0R0wgcnMsIENhbWVyYSBjYW0pIHsNCi0gICAgICAgIFNjZW5lTWFuYWdlciBzY2VuZU1hbmFnZXIgPSBTY2VuZU1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsNCi0gICAgICAgIEFycmF5TGlzdDxSZW5kZXJhYmxlQmFzZT4gYWxsRHJhdyA9IHNjZW5lLmdldFJlbmRlcmFibGVzKCk7DQotICAgICAgICBpbnQgbnVtRHJhdyA9IGFsbERyYXcuc2l6ZSgpOw0KLQ0KLSAgICAgICAgUHJvZ3JhbVJhc3RlciBjdWxsTm9uZSA9IFByb2dyYW1SYXN0ZXIuQ1VMTF9OT05FKHJzKTsNCi0gICAgICAgIFByb2dyYW1TdG9yZSBibGVuZEFkZCA9IFNjZW5lTWFuYWdlci5CTEVORF9BRERfREVQVEhfTk9ORShycyk7DQotICAgICAgICBQcm9ncmFtU3RvcmUgYmxlbmROb25lID0gUHJvZ3JhbVN0b3JlLkJMRU5EX05PTkVfREVQVEhfTk9ORShycyk7DQotDQotICAgICAgICBSZW5kZXJTdGF0ZSBkcmF3VGV4ID0gbmV3IFJlbmRlclN0YXRlKG1QVl9CbHVyLCBtUEZfVGV4dHVyZSwgYmxlbmRBZGQsIGN1bGxOb25lKTsNCi0gICAgICAgIFJlbmRlclN0YXRlIHNlbGVjdENvbCA9IG5ldyBSZW5kZXJTdGF0ZShtUFZfQmx1ciwgbVBGX1NlbGVjdENvbG9yLCBibGVuZE5vbmUsIGN1bGxOb25lKTsNCi0gICAgICAgIFJlbmRlclN0YXRlIGhCbHVyID0gbmV3IFJlbmRlclN0YXRlKG1QVl9CbHVyLCBtUEZfQmx1ckgsIGJsZW5kTm9uZSwgY3VsbE5vbmUpOw0KLSAgICAgICAgUmVuZGVyU3RhdGUgdkJsdXIgPSBuZXcgUmVuZGVyU3RhdGUobVBWX0JsdXIsIG1QRl9CbHVyViwgYmxlbmROb25lLCBjdWxsTm9uZSk7DQotDQotICAgICAgICAvLyBSZW5kZXJzIHRoZSBzY2VuZSBvZmYgc2NyZWVuDQotICAgICAgICBSZW5kZXJQYXNzIGJsdXJTb3VyY2VQYXNzID0gYWRkUGFzcyhzY2VuZSwgY2FtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1JlbmRlclRhcmdldEJsdXIwQ29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzUmVuZGVyVGFyZ2V0Qmx1cjBEZXB0aCk7DQotICAgICAgICBibHVyU291cmNlUGFzcy5zZXRDbGVhckNvbG9yKG5ldyBGbG9hdDQoMS4wZiwgMS4wZiwgMS4wZiwgMS4wZikpOw0KLSAgICAgICAgYmx1clNvdXJjZVBhc3Muc2V0U2hvdWxkQ2xlYXJDb2xvcih0cnVlKTsNCi0gICAgICAgIGJsdXJTb3VyY2VQYXNzLnNldENsZWFyRGVwdGgoMS4wZik7DQotICAgICAgICBibHVyU291cmNlUGFzcy5zZXRTaG91bGRDbGVhckRlcHRoKHRydWUpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1EcmF3OyBpICsrKSB7DQotICAgICAgICAgICAgYmx1clNvdXJjZVBhc3MuYXBwZW5kUmVuZGVyYWJsZSgoUmVuZGVyYWJsZSlhbGxEcmF3LmdldChpKSk7DQotICAgICAgICB9DQotDQotICAgICAgICAvLyBQYXNzIGZvciBzZWxlY3RpbmcgYnJpZ2h0IGNvbG9ycw0KLSAgICAgICAgUmVuZGVyUGFzcyBzZWxlY3RDb2xvclBhc3MgPSBhZGRQYXNzKHNjZW5lLCBjYW0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1JlbmRlclRhcmdldEJsdXIyQ29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1JlbmRlclRhcmdldEJsdXIyRGVwdGgpOw0KLSAgICAgICAgUmVuZGVyYWJsZSBxdWFkID0gc2NlbmVNYW5hZ2VyLmdldFJlbmRlcmFibGVRdWFkKCJTY3JlZW5BbGlnbmVkUXVhZFMiLCBzZWxlY3RDb2wpOw0KLSAgICAgICAgcXVhZC5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IFRleHR1cmVQYXJhbSgiY29sb3IiLCBzUmVuZGVyVGFyZ2V0Qmx1cjBDb2xvcikpOw0KLSAgICAgICAgc2VsZWN0Q29sb3JQYXNzLmFwcGVuZFJlbmRlcmFibGUocXVhZCk7DQotDQotICAgICAgICAvLyBIb3Jpem9udGFsIGJsdXINCi0gICAgICAgIFJlbmRlclBhc3MgaG9yaXpvbnRhbEJsdXJQYXNzID0gYWRkUGFzcyhzY2VuZSwgY2FtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNSZW5kZXJUYXJnZXRCbHVyMUNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNSZW5kZXJUYXJnZXRCbHVyMURlcHRoKTsNCi0gICAgICAgIHF1YWQgPSBzY2VuZU1hbmFnZXIuZ2V0UmVuZGVyYWJsZVF1YWQoIlNjcmVlbkFsaWduZWRRdWFkSCIsIGhCbHVyKTsNCi0gICAgICAgIHF1YWQuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBUZXh0dXJlUGFyYW0oImNvbG9yIiwgc1JlbmRlclRhcmdldEJsdXIyQ29sb3IpKTsNCi0gICAgICAgIGFkZE9mZnNldHMocXVhZCwgMS4wZiAvIChmbG9hdCl0YXJnZXRXaWR0aCk7DQotICAgICAgICBob3Jpem9udGFsQmx1clBhc3MuYXBwZW5kUmVuZGVyYWJsZShxdWFkKTsNCi0NCi0gICAgICAgIC8vIFZlcnRpY2FsIEJsdXINCi0gICAgICAgIFJlbmRlclBhc3MgdmVydGljYWxCbHVyUGFzcyA9IGFkZFBhc3Moc2NlbmUsIGNhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1JlbmRlclRhcmdldEJsdXIyQ29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNSZW5kZXJUYXJnZXRCbHVyMkRlcHRoKTsNCi0gICAgICAgIHF1YWQgPSBzY2VuZU1hbmFnZXIuZ2V0UmVuZGVyYWJsZVF1YWQoIlNjcmVlbkFsaWduZWRRdWFkViIsIHZCbHVyKTsNCi0gICAgICAgIHF1YWQuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBUZXh0dXJlUGFyYW0oImNvbG9yIiwgc1JlbmRlclRhcmdldEJsdXIxQ29sb3IpKTsNCi0gICAgICAgIGFkZE9mZnNldHMocXVhZCwgMS4wZiAvIChmbG9hdCl0YXJnZXRIZWlnaHQpOw0KLSAgICAgICAgdmVydGljYWxCbHVyUGFzcy5hcHBlbmRSZW5kZXJhYmxlKHF1YWQpOw0KLSAgICB9DQotDQotICAgIC8vIEFkZGl0aXZlbHkgcmVuZGVycyB0aGUgYmx1cnJlZCBjb2xvcnMgb24gdG9wIG9mIHRoZSBzY2VuZQ0KLSAgICBzdGF0aWMgdm9pZCBhZGRDb21wb3NpdGVQYXNzKFNjZW5lIHNjZW5lLCBSZW5kZXJTY3JpcHRHTCBycywgQ2FtZXJhIGNhbSkgew0KLSAgICAgICAgU2NlbmVNYW5hZ2VyIHNjZW5lTWFuYWdlciA9IFNjZW5lTWFuYWdlci5nZXRJbnN0YW5jZSgpOw0KLSAgICAgICAgUmVuZGVyU3RhdGUgZHJhd1RleCA9IG5ldyBSZW5kZXJTdGF0ZShtUFZfQmx1ciwgbVBGX1RleHR1cmUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjZW5lTWFuYWdlci5CTEVORF9BRERfREVQVEhfTk9ORShycyksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1SYXN0ZXIuQ1VMTF9OT05FKHJzKSk7DQotDQotICAgICAgICBSZW5kZXJQYXNzIGNvbXBvc2l0ZVBhc3MgPSBhZGRQYXNzKHNjZW5lLCBjYW0sIG51bGwsIG51bGwpOw0KLSAgICAgICAgUmVuZGVyYWJsZSBxdWFkID0gc2NlbmVNYW5hZ2VyLmdldFJlbmRlcmFibGVRdWFkKCJTY3JlZW5BbGlnbmVkUXVhZENvbXBvc2l0ZSIsIGRyYXdUZXgpOw0KLSAgICAgICAgcXVhZC5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IFRleHR1cmVQYXJhbSgiY29sb3IiLCBzUmVuZGVyVGFyZ2V0Qmx1cjJDb2xvcikpOw0KLSAgICAgICAgY29tcG9zaXRlUGFzcy5hcHBlbmRSZW5kZXJhYmxlKHF1YWQpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBwcml2YXRlIEZyYWdtZW50U2hhZGVyIGdldFNoYWRlcihSZXNvdXJjZXMgcmVzLCBSZW5kZXJTY3JpcHRHTCBycywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNJRCwgVHlwZSBjb25zdGFudHMpIHsNCi0gICAgICAgIEZyYWdtZW50U2hhZGVyLkJ1aWxkZXIgZmIgPSBuZXcgRnJhZ21lbnRTaGFkZXIuQnVpbGRlcihycyk7DQotICAgICAgICBmYi5zZXRTaGFkZXIocmVzLCByZXNJRCk7DQotICAgICAgICBmYi5hZGRUZXh0dXJlKFRleHR1cmVUeXBlLlRFWFRVUkVfMkQsICJjb2xvciIpOw0KLSAgICAgICAgaWYgKGNvbnN0YW50cyAhPSBudWxsKSB7DQotICAgICAgICAgICAgZmIuc2V0T2JqZWN0Q29uc3QoY29uc3RhbnRzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZyYWdtZW50U2hhZGVyIHByb2cgPSBmYi5jcmVhdGUoKTsNCi0gICAgICAgIHByb2cuZ2V0UHJvZ3JhbSgpLmJpbmRTYW1wbGVyKFNhbXBsZXIuQ0xBTVBfTElORUFSKHJzKSwgMCk7DQotICAgICAgICByZXR1cm4gcHJvZzsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgdm9pZCBpbml0U2hhZGVycyhSZXNvdXJjZXMgcmVzLCBSZW5kZXJTY3JpcHRHTCBycykgew0KLSAgICAgICAgU2NyaXB0RmllbGRfQmx1ck9mZnNldHMgYmx1ckNvbnN0ID0gbmV3IFNjcmlwdEZpZWxkX0JsdXJPZmZzZXRzKHJzLCAxKTsNCi0gICAgICAgIFZlcnRleFNoYWRlci5CdWlsZGVyIHZiID0gbmV3IFZlcnRleFNoYWRlci5CdWlsZGVyKHJzKTsNCi0gICAgICAgIHZiLmFkZElucHV0KFNjcmlwdEZpZWxkX1ZlcnRleFNoYWRlcklucHV0cy5jcmVhdGVFbGVtZW50KHJzKSk7DQotICAgICAgICB2Yi5zZXRTaGFkZXIocmVzLCBSLnJhdy5ibHVyX3ZlcnRleCk7DQotICAgICAgICBtUFZfQmx1ciA9IHZiLmNyZWF0ZSgpOw0KLQ0KLSAgICAgICAgbVBGX1RleHR1cmUgPSBnZXRTaGFkZXIocmVzLCBycywgUi5yYXcudGV4dHVyZSwgbnVsbCk7DQotICAgICAgICBtUEZfVGV4dHVyZS5nZXRQcm9ncmFtKCkuYmluZFNhbXBsZXIoU2FtcGxlci5XUkFQX0xJTkVBUl9NSVBfTElORUFSKHJzKSwgMCk7DQotICAgICAgICBtUEZfQmx1ckggPSBnZXRTaGFkZXIocmVzLCBycywgUi5yYXcuYmx1cl9oLCBibHVyQ29uc3QuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7DQotICAgICAgICBtUEZfQmx1clYgPSBnZXRTaGFkZXIocmVzLCBycywgUi5yYXcuYmx1cl92LCBibHVyQ29uc3QuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7DQotICAgICAgICBtUEZfU2VsZWN0Q29sb3IgPSBnZXRTaGFkZXIocmVzLCBycywgUi5yYXcuc2VsZWN0X2NvbG9yLCBudWxsKTsNCi0gICAgfQ0KLQ0KLX0NCi0NCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL1NpbXBsZUFwcC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9TaW1wbGVBcHAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE0ZGI4MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL1NpbXBsZUFwcC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudGVzdGFwcDsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotCi1pbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBTaW1wbGVBcHAgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0KLSAgICBwcml2YXRlIFNpbXBsZUFwcFZpZXcgbVZpZXc7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgaWNpY2xlKSB7Ci0gICAgICAgIHN1cGVyLm9uQ3JlYXRlKGljaWNsZSk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIG91ciBQcmV2aWV3IHZpZXcgYW5kIHNldCBpdCBhcyB0aGUgY29udGVudCBvZiBvdXIKLSAgICAgICAgLy8gQWN0aXZpdHkKLSAgICAgICAgbVZpZXcgPSBuZXcgU2ltcGxlQXBwVmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q29udGVudFZpZXcobVZpZXcpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9TaW1wbGVBcHBSUy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9TaW1wbGVBcHBSUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmY2ZjM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvU2ltcGxlQXBwUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50ZXN0YXBwOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLio7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc2NlbmVncmFwaC5TY2VuZU1hbmFnZXIuU2NlbmVMb2FkZWRDYWxsYmFjazsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW0uVGV4dHVyZVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLy8gVGhpcyBpcyB3aGVyZSB0aGUgc2NlbmVncmFwaCBhbmQgdGhlIHJlbmRlcmVkIG9iamVjdHMgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkCi1wdWJsaWMgY2xhc3MgU2ltcGxlQXBwUlMgewotICAgIFNjZW5lTWFuYWdlciBtU2NlbmVNYW5hZ2VyOwotCi0gICAgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIFJlc291cmNlcyBtUmVzOwotCi0gICAgU2NlbmUgbVNjZW5lOwotICAgIE1lc2ggbVNpbXBsZU1lc2g7Ci0gICAgTWVzaCBtU3BoZXJlTWVzaDsKLSAgICBNZXNoIG1DdWJlTWVzaDsKLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgbVNjZW5lTWFuYWdlciA9IFNjZW5lTWFuYWdlci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBtU2NlbmVNYW5hZ2VyLmluaXRSUyhtUlMsIG1SZXMsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICAgIG1TY2VuZSA9IG5ldyBTY2VuZSgpOwotCi0gICAgICAgIHNldHVwR2VvbWV0cnkoKTsKLSAgICAgICAgc2V0dXBDb2xvcmVkUXVhZCgpOwotICAgICAgICBzZXR1cFRleHR1cmVkUXVhZCgpOwotICAgICAgICBzZXR1cFNoYWRlZEdlb21ldHJ5KCk7Ci0gICAgICAgIHNldHVwQ2FtZXJhKCk7Ci0gICAgICAgIHNldHVwUmVuZGVyUGFzcygpOwotCi0gICAgICAgIG1TY2VuZU1hbmFnZXIuc2V0QWN0aXZlU2NlbmUobVNjZW5lKTsKLQotICAgICAgICBtU2NlbmUuaW5pdFJTKCk7Ci0gICAgICAgIG1SUy5iaW5kUm9vdFNjcmlwdChtU2NlbmVNYW5hZ2VyLmdldFJlbmRlckxvb3AoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldHVwR2VvbWV0cnkoKSB7Ci0gICAgICAgIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlciB0bWIgPSBuZXcgTWVzaC5UcmlhbmdsZU1lc2hCdWlsZGVyKG1SUywgMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc2guVHJpYW5nbGVNZXNoQnVpbGRlci5URVhUVVJFXzApOwotCi0gICAgICAgIC8vIENyZWF0ZSBmb3VyIHZlcnRpY2VzIHdpdGggdGV4dHVyZSBjb29yZGluYXRlcwotICAgICAgICB0bWIuc2V0VGV4dHVyZSgwLjBmLCAxLjBmKS5hZGRWZXJ0ZXgoLTEuMGYsIDEuMGYsIDAuMGYpOwotICAgICAgICB0bWIuc2V0VGV4dHVyZSgwLjBmLCAwLjBmKS5hZGRWZXJ0ZXgoLTEuMGYsIC0xLjBmLCAwLjBmKTsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMS4wZiwgMC4wZikuYWRkVmVydGV4KDEuMGYsIC0xLjBmLCAwLjBmKTsKLSAgICAgICAgdG1iLnNldFRleHR1cmUoMS4wZiwgMS4wZikuYWRkVmVydGV4KDEuMGYsIDEuMGYsIDAuMGYpOwotCi0gICAgICAgIHRtYi5hZGRUcmlhbmdsZSgwLCAxLCAyKTsKLSAgICAgICAgdG1iLmFkZFRyaWFuZ2xlKDIsIDMsIDApOwotICAgICAgICBtU2ltcGxlTWVzaCA9IHRtYi5jcmVhdGUodHJ1ZSk7Ci0KLSAgICAgICAgLy8gTG9hZCBhIGZpbGUgdGhhdCBjb25zdGFpbnMgdHdvIHBpZWNlcyBvZiBnZW9tZXRyeSwgYSBzcGhlcmUgYW5kIGEgY3ViZQotICAgICAgICBGaWxlQTNEIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tUmVzb3VyY2UobVJTLCBtUmVzLCBSLnJhdy51bml0X29iaik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kZWwuZ2V0SW5kZXhFbnRyeUNvdW50KCk7IGkgKyspIHsKLSAgICAgICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoaSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCAmJiBlbnRyeS5nZXROYW1lKCkuZXF1YWxzKCJDdWJlTWVzaCIpKSB7Ci0gICAgICAgICAgICAgICAgbUN1YmVNZXNoID0gZW50cnkuZ2V0TWVzaCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeSAhPSBudWxsICYmIGVudHJ5LmdldE5hbWUoKS5lcXVhbHMoIlNwaGVyZU1lc2giKSkgewotICAgICAgICAgICAgICAgIG1TcGhlcmVNZXNoID0gZW50cnkuZ2V0TWVzaCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldHVwQ29sb3JlZFF1YWQoKSB7Ci0gICAgICAgIC8vIEJ1aWx0LWluIHNoYWRlciB0aGF0IHByb3ZpZGVzIHBvc2l0aW9uLCB0ZXhjb29yZCBhbmQgbm9ybWFsCi0gICAgICAgIFZlcnRleFNoYWRlciBnZW5lcmljViA9IFNjZW5lTWFuYWdlci5nZXREZWZhdWx0VlMoKTsKLSAgICAgICAgLy8gQnVpbHQtaW4gc2hhZGVyIHRoYXQgZGlzcGxheXMgYSBjb2xvcgotICAgICAgICBGcmFnbWVudFNoYWRlciBjb2xvckYgPSBTY2VuZU1hbmFnZXIuZ2V0Q29sb3JGUygpOwotICAgICAgICBSZW5kZXJTdGF0ZSBjb2xvclJTID0gbmV3IFJlbmRlclN0YXRlKGdlbmVyaWNWLCBjb2xvckYsIG51bGwsIG51bGwpOwotCi0gICAgICAgIC8vIERyYXcgYSBzaW1wbGUgY29sb3JlZCBxdWFkCi0gICAgICAgIFJlbmRlcmFibGUgcXVhZCA9IG1TY2VuZS5hcHBlbmROZXdSZW5kZXJhYmxlKCk7Ci0gICAgICAgIHF1YWQuc2V0TWVzaChtU2ltcGxlTWVzaCk7Ci0gICAgICAgIC8vIE91ciBzaGFkZXIgaGFzIGEgY29uc3RhbnQgaW5wdXQgY2FsbGVkICJjb2xvciIKLSAgICAgICAgLy8gVGhpcyB0ZWxscyB0aGUgc2NlbmVncmFwaCB0byBhc3NpZ24gdGhlIGZvbGxvd2luZyBmbG9hdDMgdG8gdGhhdCBpbnB1dAotICAgICAgICBxdWFkLmFwcGVuZFNvdXJjZVBhcmFtcyhuZXcgRmxvYXQ0UGFyYW0oImNvbG9yIiwgMC4yZiwgMC4zZiwgMC40ZikpOwotICAgICAgICBxdWFkLnNldFJlbmRlclN0YXRlKGNvbG9yUlMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cFRleHR1cmVkUXVhZCgpIHsKLSAgICAgICAgLy8gQnVpbHQtaW4gc2hhZGVyIHRoYXQgcHJvdmlkZXMgcG9zaXRpb24sIHRleGNvb3JkIGFuZCBub3JtYWwKLSAgICAgICAgVmVydGV4U2hhZGVyIGdlbmVyaWNWID0gU2NlbmVNYW5hZ2VyLmdldERlZmF1bHRWUygpOwotICAgICAgICAvLyBCdWlsdC1pbiBzaGFkZXIgdGhhdCBkaXNwbGF5cyBhIHRleHR1cmUKLSAgICAgICAgRnJhZ21lbnRTaGFkZXIgdGV4dHVyZUYgPSBTY2VuZU1hbmFnZXIuZ2V0VGV4dHVyZUZTKCk7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gdXNlIHRyYW5zcGFyZW5jeSBiYXNlZCBvbiB0aGUgYWxwaGEgY2hhbm5lbCBvZiB0aGUgdGV4dHVyZQotICAgICAgICBQcm9ncmFtU3RvcmUgYWxwaGFCbGVuZCA9IFByb2dyYW1TdG9yZS5CTEVORF9BTFBIQV9ERVBUSF9URVNUKG1SUyk7Ci0gICAgICAgIFJlbmRlclN0YXRlIHRleFJTID0gbmV3IFJlbmRlclN0YXRlKGdlbmVyaWNWLCB0ZXh0dXJlRiwgYWxwaGFCbGVuZCwgbnVsbCk7Ci0KLSAgICAgICAgLy8gRHJhdyBhIHRleHR1cmVkIHF1YWQKLSAgICAgICAgUmVuZGVyYWJsZSBxdWFkID0gbVNjZW5lLmFwcGVuZE5ld1JlbmRlcmFibGUoKTsKLSAgICAgICAgcXVhZC5zZXRNZXNoKG1TaW1wbGVNZXNoKTsKLSAgICAgICAgLy8gTWFrZSBhIHRyYW5zZm9ybSB0byBwb3NpdGlvbiB0aGUgcXVhZAotICAgICAgICBDb21wb3VuZFRyYW5zZm9ybSB0ID0gbVNjZW5lLmFwcGVuZE5ld0NvbXBvdW5kVHJhbnNmb3JtKCk7Ci0gICAgICAgIHQuYWRkVHJhbnNsYXRlKCJwb3NpdGlvbiIsIG5ldyBGbG9hdDMoMiwgMiwgMCkpOwotICAgICAgICBxdWFkLnNldFRyYW5zZm9ybSh0KTsKLSAgICAgICAgLy8gT3VyIGZyYWdtZW50IHNoYWRlciBoYXMgYSBjb25zdGFudCB0ZXh0dXJlIGlucHV0IGNhbGxlZCAiY29sb3IiCi0gICAgICAgIC8vIFRoaXMgd2lsbCBhc3NpZ24gYW4gaWNvbiBmcm9tIGRyYXdhYmxlcyB0byB0aGF0IGlucHV0Ci0gICAgICAgIHF1YWQuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBUZXh0dXJlUGFyYW0oImNvbG9yIiwgbmV3IFRleHR1cmUyRChSLmRyYXdhYmxlLmljb24pKSk7Ci0gICAgICAgIHF1YWQuc2V0UmVuZGVyU3RhdGUodGV4UlMpOwotICAgIH0KLQotICAgIHByaXZhdGUgRnJhZ21lbnRTaGFkZXIgY3JlYXRlTGFtYmVydFNoYWRlcigpIHsKLSAgICAgICAgLy8gRGVzY3JpYmUgd2hhdCBjb25zdGFudCBpbnB1dHMgb3VyIHNoYWRlciB3YW50cwotICAgICAgICBFbGVtZW50LkJ1aWxkZXIgYiA9IG5ldyBFbGVtZW50LkJ1aWxkZXIobVJTKTsKLSAgICAgICAgYi5hZGQoRWxlbWVudC5GMzJfNChtUlMpLCAiY2FtZXJhUG9zIik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgc2hhZGVyIGZyb20gYSB0ZXh0IGZpbGUgaW4gcmVzb3VyY2VzCi0gICAgICAgIEZyYWdtZW50U2hhZGVyLkJ1aWxkZXIgZmIgPSBuZXcgRnJhZ21lbnRTaGFkZXIuQnVpbGRlcihtUlMpOwotICAgICAgICAvLyBUZWxsIHRoZSBzaGFkZXIgd2hhdCBjb25zdGFudHMgd2Ugd2FudAotICAgICAgICBmYi5zZXRTaGFkZXJDb25zdChuZXcgVHlwZS5CdWlsZGVyKG1SUywgYi5jcmVhdGUoKSkuc2V0WCgxKS5jcmVhdGUoKSk7Ci0gICAgICAgIC8vIFNoYWRlciBjb2RlIGxvY2F0aW9uCi0gICAgICAgIGZiLnNldFNoYWRlcihtUmVzLCBSLnJhdy5kaWZmdXNlKTsKLSAgICAgICAgLy8gV2Ugd2FudCBhIHRleHR1cmUgY2FsbGVkIGRpZmZ1c2Ugb24gb3VyIHNoYWRlcgotICAgICAgICBmYi5hZGRUZXh0dXJlKFRleHR1cmVUeXBlLlRFWFRVUkVfMkQsICJkaWZmdXNlIik7Ci0gICAgICAgIEZyYWdtZW50U2hhZGVyIHNoYWRlciA9IGZiLmNyZWF0ZSgpOwotICAgICAgICBtU2NlbmUuYXBwZW5kU2hhZGVyKHNoYWRlcik7Ci0gICAgICAgIHJldHVybiBzaGFkZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldHVwU2hhZGVkR2VvbWV0cnkoKSB7Ci0gICAgICAgIC8vIEJ1aWx0LWluIHNoYWRlciB0aGF0IHByb3ZpZGVzIHBvc2l0aW9uLCB0ZXhjb29yZCBhbmQgbm9ybWFsCi0gICAgICAgIFZlcnRleFNoYWRlciBnZW5lcmljViA9IFNjZW5lTWFuYWdlci5nZXREZWZhdWx0VlMoKTsKLSAgICAgICAgLy8gQ3VzdG9tIHNoYWRlcgotICAgICAgICBGcmFnbWVudFNoYWRlciBkaWZmdXNlRiA9IGNyZWF0ZUxhbWJlcnRTaGFkZXIoKTsKLSAgICAgICAgUmVuZGVyU3RhdGUgZGlmZnVzZVJTID0gbmV3IFJlbmRlclN0YXRlKGdlbmVyaWNWLCBkaWZmdXNlRiwgbnVsbCwgbnVsbCk7Ci0KLSAgICAgICAgLy8gRHJhdyBhIHNwaGVyZQotICAgICAgICBSZW5kZXJhYmxlIHNwaGVyZSA9IG1TY2VuZS5hcHBlbmROZXdSZW5kZXJhYmxlKCk7Ci0gICAgICAgIC8vIFVzZSB0aGUgc3BoZXJlIGdlb21ldHJ5IGxvYWRlZCBlYXJsaWVyCi0gICAgICAgIHNwaGVyZS5zZXRNZXNoKG1TcGhlcmVNZXNoKTsKLSAgICAgICAgLy8gTWFrZSBhIHRyYW5zZm9ybSB0byBwb3NpdGlvbiB0aGUgc3BoZXJlCi0gICAgICAgIENvbXBvdW5kVHJhbnNmb3JtIHQgPSBtU2NlbmUuYXBwZW5kTmV3Q29tcG91bmRUcmFuc2Zvcm0oKTsKLSAgICAgICAgdC5hZGRUcmFuc2xhdGUoInBvc2l0aW9uIiwgbmV3IEZsb2F0MygtMSwgMiwgMykpOwotICAgICAgICB0LmFkZFNjYWxlKCJzY2FsZSIsIG5ldyBGbG9hdDMoMS40ZiwgMS40ZiwgMS40ZikpOwotICAgICAgICBzcGhlcmUuc2V0VHJhbnNmb3JtKHQpOwotICAgICAgICAvLyBUZWxsIHRoZSByZW5kZXJhYmxlIHdoaWNoIHRleHR1cmUgdG8gdXNlIHdoZW4gd2UgZHJhdwotICAgICAgICAvLyBUaGlzIHdpbGwgbWVhbiBhIHRleHR1cmUgcGFyYW0gaW4gdGhlIHNoYWRlciBjYWxsZWQgImRpZmZ1c2UiCi0gICAgICAgIC8vIHdpbGwgYmUgYXNzaWduZWQgYSB0ZXh0dXJlIGNhbGxlZCByZWQuanBnCi0gICAgICAgIHNwaGVyZS5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IFRleHR1cmVQYXJhbSgiZGlmZnVzZSIsIG5ldyBUZXh0dXJlMkQoIiIsICJyZWQuanBnIikpKTsKLSAgICAgICAgc3BoZXJlLnNldFJlbmRlclN0YXRlKGRpZmZ1c2VSUyk7Ci0KLSAgICAgICAgLy8gRHJhdyBhIGN1YmUKLSAgICAgICAgUmVuZGVyYWJsZSBjdWJlID0gbVNjZW5lLmFwcGVuZE5ld1JlbmRlcmFibGUoKTsKLSAgICAgICAgY3ViZS5zZXRNZXNoKG1DdWJlTWVzaCk7Ci0gICAgICAgIHQgPSBtU2NlbmUuYXBwZW5kTmV3Q29tcG91bmRUcmFuc2Zvcm0oKTsKLSAgICAgICAgdC5hZGRUcmFuc2xhdGUoInBvc2l0aW9uIiwgbmV3IEZsb2F0MygtMiwgLTIuMWYsIDApKTsKLSAgICAgICAgdC5hZGRSb3RhdGUoInJvdGF0ZVgiLCBuZXcgRmxvYXQzKDEsIDAsIDApLCAzMCk7Ci0gICAgICAgIHQuYWRkUm90YXRlKCJyb3RhdGVZIiwgbmV3IEZsb2F0MygwLCAxLCAwKSwgMzApOwotICAgICAgICB0LmFkZFNjYWxlKCJzY2FsZSIsIG5ldyBGbG9hdDMoMiwgMiwgMikpOwotICAgICAgICBjdWJlLnNldFRyYW5zZm9ybSh0KTsKLSAgICAgICAgY3ViZS5hcHBlbmRTb3VyY2VQYXJhbXMobmV3IFRleHR1cmVQYXJhbSgiZGlmZnVzZSIsIG5ldyBUZXh0dXJlMkQoIiIsICJvcmFuZ2UuanBnIikpKTsKLSAgICAgICAgY3ViZS5zZXRSZW5kZXJTdGF0ZShkaWZmdXNlUlMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cENhbWVyYSgpIHsKLSAgICAgICAgQ2FtZXJhIGNhbWVyYSA9IG1TY2VuZS5hcHBlbmROZXdDYW1lcmEoKTsKLSAgICAgICAgY2FtZXJhLnNldEZhcigyMDApOwotICAgICAgICBjYW1lcmEuc2V0TmVhcigwLjFmKTsKLSAgICAgICAgY2FtZXJhLnNldEZPVig2MCk7Ci0gICAgICAgIENvbXBvdW5kVHJhbnNmb3JtIGNhbWVyYVRyYW5zZm9ybSA9IG1TY2VuZS5hcHBlbmROZXdDb21wb3VuZFRyYW5zZm9ybSgpOwotICAgICAgICBjYW1lcmFUcmFuc2Zvcm0uYWRkVHJhbnNsYXRlKCJjYW1lcmEiLCBuZXcgRmxvYXQzKDAsIDAsIDEwKSk7Ci0gICAgICAgIGNhbWVyYS5zZXRUcmFuc2Zvcm0oY2FtZXJhVHJhbnNmb3JtKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0dXBSZW5kZXJQYXNzKCkgewotICAgICAgICBSZW5kZXJQYXNzIG1haW5QYXNzID0gbVNjZW5lLmFwcGVuZE5ld1JlbmRlclBhc3MoKTsKLSAgICAgICAgbWFpblBhc3Muc2V0Q2xlYXJDb2xvcihuZXcgRmxvYXQ0KDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpKTsKLSAgICAgICAgbWFpblBhc3Muc2V0U2hvdWxkQ2xlYXJDb2xvcih0cnVlKTsKLSAgICAgICAgbWFpblBhc3Muc2V0Q2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgbWFpblBhc3Muc2V0U2hvdWxkQ2xlYXJEZXB0aCh0cnVlKTsKLSAgICAgICAgbWFpblBhc3Muc2V0Q2FtZXJhKG1TY2VuZS5nZXRDYW1lcmFzKCkuZ2V0KDApKTsKLSAgICAgICAgQXJyYXlMaXN0PFJlbmRlcmFibGVCYXNlPiBhbGxSZW5kZXIgPSBtU2NlbmUuZ2V0UmVuZGVyYWJsZXMoKTsKLSAgICAgICAgZm9yIChSZW5kZXJhYmxlQmFzZSByZW5kZXJhYmxlIDogYWxsUmVuZGVyKSB7Ci0gICAgICAgICAgICBtYWluUGFzcy5hcHBlbmRSZW5kZXJhYmxlKChSZW5kZXJhYmxlKXJlbmRlcmFibGUpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9TaW1wbGVBcHBWaWV3LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL1NpbXBsZUFwcFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjExMjE4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL1NpbXBsZUFwcFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRlc3RhcHA7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3OwotCi1wdWJsaWMgY2xhc3MgU2ltcGxlQXBwVmlldyBleHRlbmRzIFJTU3VyZmFjZVZpZXcgewotCi0gICAgcHVibGljIFNpbXBsZUFwcFZpZXcoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQpOwotICAgIH0KLQotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIFNpbXBsZUFwcFJTIG1SZW5kZXI7Ci0KLSAgICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHcsIGludCBoKSB7Ci0gICAgICAgIHN1cGVyLnN1cmZhY2VDaGFuZ2VkKGhvbGRlciwgZm9ybWF0LCB3LCBoKTsKLSAgICAgICAgaWYgKG1SUyA9PSBudWxsKSB7Ci0gICAgICAgICAgICBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnIHNjID0gbmV3IFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcoKTsKLSAgICAgICAgICAgIHNjLnNldERlcHRoKDE2LCAyNCk7Ci0gICAgICAgICAgICBzYy5zZXRTYW1wbGVzKDEsIDIsIDEpOwotICAgICAgICAgICAgbVJTID0gY3JlYXRlUmVuZGVyU2NyaXB0R0woc2MpOwotICAgICAgICAgICAgbVJTLnNldFN1cmZhY2UoaG9sZGVyLCB3LCBoKTsKLSAgICAgICAgICAgIG1SZW5kZXIgPSBuZXcgU2ltcGxlQXBwUlMoKTsKLSAgICAgICAgICAgIG1SZW5kZXIuaW5pdChtUlMsIGdldFJlc291cmNlcygpLCB3LCBoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uRGV0YWNoZWRGcm9tV2luZG93KCkgewotICAgICAgICBpZiAobVJTICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1SZW5kZXIgPSBudWxsOwotICAgICAgICAgICAgbVJTID0gbnVsbDsKLSAgICAgICAgICAgIGRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVGVzdEFwcC5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NWE3YWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudGVzdGFwcDsKLQotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJTU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5Db25maWd1cmF0aW9uOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTWVzc2FnZTsKLWltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLlNldHRpbmdzLlN5c3RlbTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotCi1pbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWU7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0QXBwIGV4dGVuZHMgQWN0aXZpdHkgewotCi0gICAgcHJpdmF0ZSBUZXN0QXBwVmlldyBtVmlldzsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBpY2ljbGUpIHsKLSAgICAgICAgc3VwZXIub25DcmVhdGUoaWNpY2xlKTsKLQotICAgICAgICAvLyBDcmVhdGUgb3VyIFByZXZpZXcgdmlldyBhbmQgc2V0IGl0IGFzIHRoZSBjb250ZW50IG9mIG91cgotICAgICAgICAvLyBBY3Rpdml0eQotICAgICAgICBtVmlldyA9IG5ldyBUZXN0QXBwVmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q29udGVudFZpZXcobVZpZXcpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgewotICAgICAgICAvLyBJZGVhbGx5IGEgZ2FtZSBzaG91bGQgaW1wbGVtZW50IG9uUmVzdW1lKCkgYW5kIG9uUGF1c2UoKQotICAgICAgICAvLyB0byB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiB3aGVuIHRoZSBhY3Rpdml0eSBsb29zZXMgZm9jdXMKLSAgICAgICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICAgICAgbVZpZXcucmVzdW1lKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKLSAgICAgICAgLy8gSWRlYWxseSBhIGdhbWUgc2hvdWxkIGltcGxlbWVudCBvblJlc3VtZSgpIGFuZCBvblBhdXNlKCkKLSAgICAgICAgLy8gdG8gdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gd2hlbiB0aGUgYWN0aXZpdHkgbG9vc2VzIGZvY3VzCi0gICAgICAgIHN1cGVyLm9uUGF1c2UoKTsKLSAgICAgICAgbVZpZXcucGF1c2UoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlvbnNNZW51KE1lbnUgbWVudSkgewotICAgICAgICBNZW51SW5mbGF0ZXIgaW5mbGF0ZXIgPSBnZXRNZW51SW5mbGF0ZXIoKTsKLSAgICAgICAgaW5mbGF0ZXIuaW5mbGF0ZShSLm1lbnUubG9hZGVyX21lbnUsIG1lbnUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvbk9wdGlvbnNJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgewotICAgICAgICAvLyBIYW5kbGUgaXRlbSBzZWxlY3Rpb24KLSAgICAgICAgc3dpdGNoIChpdGVtLmdldEl0ZW1JZCgpKSB7Ci0gICAgICAgIGNhc2UgUi5pZC5sb2FkX21vZGVsOgotICAgICAgICAgICAgbG9hZE1vZGVsKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBSLmlkLnVzZV9ibHVyOgotICAgICAgICAgICAgbVZpZXcubVJlbmRlci50b2dnbGVCbHVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBzdXBlci5vbk9wdGlvbnNJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklORF9EQUVfTU9ERUwgPSAxMDsKLSAgICBwdWJsaWMgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBkYXRhKSB7Ci0gICAgICAgIGlmIChyZXN1bHRDb2RlID09IFJFU1VMVF9PSykgewotICAgICAgICAgICAgaWYgKHJlcXVlc3RDb2RlID09IEZJTkRfREFFX01PREVMKSB7Ci0gICAgICAgICAgICAgICAgVXJpIHNlbGVjdGVkSW1hZ2VVcmkgPSBkYXRhLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICBMb2cuZSgiU2VsZWN0ZWQgUGF0aDogIiwgc2VsZWN0ZWRJbWFnZVVyaS5nZXRQYXRoKCkpOwotICAgICAgICAgICAgICAgIG1WaWV3Lm1SZW5kZXIubG9hZE1vZGVsKHNlbGVjdGVkSW1hZ2VVcmkuZ2V0UGF0aCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGxvYWRNb2RlbCgpIHsKLSAgICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQoKTsKLSAgICAgICAgaW50ZW50LnNldEFjdGlvbihJbnRlbnQuQUNUSU9OX1BJQ0spOwotICAgICAgICBpbnRlbnQuc2V0Q2xhc3NOYW1lKCJjb20uYW5kcm9pZC50ZXN0YXBwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudGVzdGFwcC5GaWxlU2VsZWN0b3IiKTsKLSAgICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIEZJTkRfREFFX01PREVMKTsKLSAgICB9Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwTG9hZGluZ1NjcmVlbi5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwTG9hZGluZ1NjcmVlbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmQ4ZjBiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVGVzdEFwcExvYWRpbmdTY3JlZW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50ZXN0YXBwOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lTWFuYWdlcjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeTsKLWltcG9ydCBhbmRyb2lkLm9zLkFzeW5jVGFzazsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC4qOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb24uTWlwbWFwQ29udHJvbDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkJ1aWxkZXI7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRm9udC5TdHlsZTsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtLlRleHR1cmVUeXBlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5EZXB0aEZ1bmM7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLy8gVGhpcyBpcyB3aGVyZSB0aGUgc2NlbmVncmFwaCBhbmQgdGhlIHJlbmRlcmVkIG9iamVjdHMgYXJlIGluaXRpYWxpemVkIGFuZCB1c2VkCi1wdWJsaWMgY2xhc3MgVGVzdEFwcExvYWRpbmdTY3JlZW4gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBRyA9ICJUZXN0QXBwTG9hZGluZ1NjcmVlbiI7Ci0KLSAgICBwcml2YXRlIFJlc291cmNlcyBtUmVzOwotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgU2NyaXB0Q190ZXN0X2FwcCBtU2NyaXB0OwotCi0gICAgcHVibGljIFRlc3RBcHBMb2FkaW5nU2NyZWVuKFJlbmRlclNjcmlwdEdMIHJzLCBSZXNvdXJjZXMgcmVzKSB7Ci0gICAgICAgIG1SUyA9IHJzOwotICAgICAgICBtUmVzID0gcmVzOwotICAgICAgICAvLyBTaG93cyB0aGUgbG9hZGluZyBzY3JlZW4gd2l0aCBzb21lIHRleHQKLSAgICAgICAgcmVuZGVyTG9hZGluZygpOwotICAgICAgICAvLyBBZGRzIGEgbGl0dGxlIDNEIGJ1Z2Ryb2lkIG1vZGVsIHRvIHRoZSBsYW9kaW5nIHNjcmVlbiBhc3luY2hyb25vdXNseS4KLSAgICAgICAgbmV3IExvYWRpbmdTY3JlZW5Mb2FkZXJUYXNrKCkuZXhlY3V0ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNob3dMb2FkaW5nU2NyZWVuKGJvb2xlYW4gc2hvdykgewotICAgICAgICBpZiAoc2hvdykgewotICAgICAgICAgICAgbVJTLmJpbmRSb290U2NyaXB0KG1TY3JpcHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbVJTLmJpbmRSb290U2NyaXB0KFNjZW5lTWFuYWdlci5nZXRJbnN0YW5jZSgpLmdldFJlbmRlckxvb3AoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgbG9hZGluZyBzY3JlZW4gaGFzIHNvbWUgZWxlbWVudHMgdGhhdCBzaG91bGRuJ3QgYmUgbG9hZGVkIG9uIHRoZSBVSSB0aHJlYWQKLSAgICBwcml2YXRlIGNsYXNzIExvYWRpbmdTY3JlZW5Mb2FkZXJUYXNrIGV4dGVuZHMgQXN5bmNUYXNrPFN0cmluZywgVm9pZCwgQm9vbGVhbj4gewotICAgICAgICBBbGxvY2F0aW9uIHJvYm90VGV4OwotICAgICAgICBNZXNoIHJvYm90TWVzaDsKLSAgICAgICAgcHJvdGVjdGVkIEJvb2xlYW4gZG9JbkJhY2tncm91bmQoU3RyaW5nLi4uIG5hbWVzKSB7Ci0gICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICByb2JvdFRleCA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKG1SUywgbVJlcywgUi5kcmF3YWJsZS5yb2JvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWlwbWFwQ29udHJvbC5NSVBNQVBfT05fU1lOQ19UT19URVhUVVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotCi0gICAgICAgICAgICBGaWxlQTNEIG1vZGVsID0gRmlsZUEzRC5jcmVhdGVGcm9tUmVzb3VyY2UobVJTLCBtUmVzLCBSLnJhdy5yb2JvdCk7Ci0gICAgICAgICAgICBGaWxlQTNELkluZGV4RW50cnkgZW50cnkgPSBtb2RlbC5nZXRJbmRleEVudHJ5KDApOwotICAgICAgICAgICAgaWYgKGVudHJ5ICE9IG51bGwgJiYgZW50cnkuZ2V0RW50cnlUeXBlKCkgPT0gRmlsZUEzRC5FbnRyeVR5cGUuTUVTSCkgewotICAgICAgICAgICAgICAgIHJvYm90TWVzaCA9IGVudHJ5LmdldE1lc2goKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbVNjcmlwdC5zZXRfZ1BGU0JhY2tncm91bmQoUHJvZ3JhbVN0b3JlLkJMRU5EX05PTkVfREVQVEhfVEVTVChtUlMpKTsKLQotICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgICAgICBiLnNldFRleHR1cmUoUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkVudk1vZGUuUkVQTEFDRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRm9ybWF0LlJHQkEsIDApOwotICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50IHBmRGVmYXVsdCA9IGIuY3JlYXRlKCk7Ci0gICAgICAgICAgICBwZkRlZmF1bHQuYmluZFNhbXBsZXIoU2FtcGxlci5DTEFNUF9MSU5FQVIobVJTKSwgMCk7Ci0gICAgICAgICAgICBtU2NyaXB0LnNldF9nUEZCYWNrZ3JvdW5kKHBmRGVmYXVsdCk7Ci0KLSAgICAgICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIgcHZiID0gbmV3IFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uIHB2RGVmYXVsdCA9IHB2Yi5jcmVhdGUoKTsKLSAgICAgICAgICAgIFByb2dyYW1WZXJ0ZXhGaXhlZEZ1bmN0aW9uLkNvbnN0YW50cyB2YSA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMobVJTKTsKLSAgICAgICAgICAgICgoUHJvZ3JhbVZlcnRleEZpeGVkRnVuY3Rpb24pcHZEZWZhdWx0KS5iaW5kQ29uc3RhbnRzKHZhKTsKLSAgICAgICAgICAgIG1TY3JpcHQuc2V0X2dQVkJhY2tncm91bmQocHZEZWZhdWx0KTsKLQotICAgICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIExvZy52KCJUSU1FUiIsICJMb2FkaW5nIGxvYWQgdGltZTogIiArIChlbmQgLSBzdGFydCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBCb29sZWFuKHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgb25Qb3N0RXhlY3V0ZShCb29sZWFuIHJlc3VsdCkgewotICAgICAgICAgICAgbVNjcmlwdC5zZXRfZ1JvYm90VGV4KHJvYm90VGV4KTsKLSAgICAgICAgICAgIG1TY3JpcHQuc2V0X2dSb2JvdE1lc2gocm9ib3RNZXNoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENyZWF0ZXMgYSBzaW1wbGUgc2NyaXB0IHRvIHNob3cgYSBsb2Rpbmcgc2NyZWVuIHVudGlsIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQKLSAgICAvLyBDb3VsZCBhbHNvIGJlIHVzZWQgdG8gZG8gc29tZSBjdXN0b20gcmVuZGVyc2NyaXB0IHdvcmsgYmVmb3JlIGhhbmRpbmcgdGhpbmdzIG92ZXIKLSAgICAvLyB0byB0aGUgc2NlbmVncmFwaAotICAgIHZvaWQgcmVuZGVyTG9hZGluZygpIHsKLSAgICAgICAgbVNjcmlwdCA9IG5ldyBTY3JpcHRDX3Rlc3RfYXBwKG1SUywgbVJlcywgUi5yYXcudGVzdF9hcHApOwotICAgICAgICBtUlMuYmluZFJvb3RTY3JpcHQobVNjcmlwdCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwUlMuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVGVzdEFwcFJTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYTgwZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwUlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnRlc3RhcHA7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguKjsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLlNjZW5lTWFuYWdlci5TY2VuZUxvYWRlZENhbGxiYWNrOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXM7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwotaW1wb3J0IGFuZHJvaWQub3MuQXN5bmNUYXNrOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0Lio7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbS5UZXh0dXJlVHlwZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vLyBUaGlzIGlzIHdoZXJlIHRoZSBzY2VuZWdyYXBoIGFuZCB0aGUgcmVuZGVyZWQgb2JqZWN0cyBhcmUgaW5pdGlhbGl6ZWQgYW5kIHVzZWQKLXB1YmxpYyBjbGFzcyBUZXN0QXBwUlMgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG1vZGVsTmFtZSA9ICJvcmllbnRhdGlvbl90ZXN0LmRhZSI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBRyA9ICJUZXN0QXBwUlMiOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBtRmlsZVBhdGggPSAiIjsKLQotICAgIGludCBtV2lkdGg7Ci0gICAgaW50IG1IZWlnaHQ7Ci0KLSAgICBib29sZWFuIG1Vc2VCbHVyOwotCi0gICAgVGVzdEFwcExvYWRpbmdTY3JlZW4gbUxvYWRpbmdTY3JlZW47Ci0KLSAgICAvLyBVc2VkIHRvIGFzeW5jaHJvbm91c2x5IGxvYWQgc2NlbmUgZWxlbWVudHMgbGlrZSBtZXNoZXMgYW5kIHRyYW5zZm9ybSBoaWVyYXJjaGllcwotICAgIFNjZW5lTG9hZGVkQ2FsbGJhY2sgbUxvYWRlZENhbGxiYWNrID0gbmV3IFNjZW5lTG9hZGVkQ2FsbGJhY2soKSB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHByZXBhcmVUb1JlbmRlcihtTG9hZGVkU2NlbmUpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFRvcCBsZXZlbCBjbGFzcyB0aGF0IGluaXRpYWxpemVzIGFsbCB0aGUgZWxlbWVudHMgbmVlZGVkIHRvIHVzZSB0aGUgc2NlbmUgZ3JhcGgKLSAgICBTY2VuZU1hbmFnZXIgbVNjZW5lTWFuYWdlcjsKLQotICAgIC8vIFVzZWQgdG8gbW92ZSB0aGUgY2FtZXJhIGFyb3VuZCBpbiB0aGUgM0Qgd29ybGQKLSAgICBUb3VjaEhhbmRsZXIgbVRvdWNoSGFuZGxlcjsKLQotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0KLSAgICAvLyBTaGFkZXJzCi0gICAgcHJpdmF0ZSBGcmFnbWVudFNoYWRlciBtUGFpbnRGOwotICAgIHByaXZhdGUgRnJhZ21lbnRTaGFkZXIgbUxpZ2h0c0Y7Ci0gICAgcHJpdmF0ZSBGcmFnbWVudFNoYWRlciBtTGlnaHRzRGlmZkY7Ci0gICAgcHJpdmF0ZSBGcmFnbWVudFNoYWRlciBtQWx1bWludW1GOwotICAgIHByaXZhdGUgRnJhZ21lbnRTaGFkZXIgbVBsYXN0aWNGOwotICAgIHByaXZhdGUgRnJhZ21lbnRTaGFkZXIgbURpZmZ1c2VGOwotICAgIHByaXZhdGUgRnJhZ21lbnRTaGFkZXIgbVRleHR1cmVGOwotICAgIHByaXZhdGUgVmVydGV4U2hhZGVyIG1HZW5lcmljVjsKLQotICAgIFNjZW5lIG1BY3RpdmVTY2VuZTsKLQotICAgIC8vIFRoaXMgaXMgYSBwYXJ0IG9mIHRoZSB0ZXN0IGFwcCwgaXQncyB1c2VkIHRvIHRlc3RzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMgYW5kIGlzIHRvZ2dsZWQKLSAgICAvLyBvbiBhbmQgb2ZmIGluIHRoZSBtZW51LCBvZmYgYnkgZGVmYXVsdAotICAgIHZvaWQgdG9nZ2xlQmx1cigpIHsKLSAgICAgICAgbVVzZUJsdXIgPSAhbVVzZUJsdXI7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmNsZWFyUmVuZGVyUGFzc2VzKCk7Ci0gICAgICAgIGluaXRSZW5kZXJQYXNzZXMoKTsKLSAgICAgICAgbUFjdGl2ZVNjZW5lLmluaXRSZW5kZXJQYXNzUlMobVJTLCBtU2NlbmVNYW5hZ2VyKTsKLQotICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSBoYXJkY29kZWQgb2JqZWN0IGluIHRoZSBzY2VuZSB0aGF0IGdldHMgdHVybmVkIG9uIGFuZCBvZmYgZm9yIHRoZSBkZW1vCi0gICAgICAgIC8vIHRvIG1ha2UgdGhpbmdzIGxvb2sgYSBiaXQgYmV0dGVyLiBUaGlzIGNvdWxkIGJlIGRlbGV0ZWQgaW4gdGhlIGNsZWFudXAKLSAgICAgICAgUmVuZGVyYWJsZSBwbGFuZSA9IChSZW5kZXJhYmxlKW1BY3RpdmVTY2VuZS5nZXRSZW5kZXJhYmxlQnlOYW1lKCJwUGxhbmVTaGFwZTEiKTsKLSAgICAgICAgaWYgKHBsYW5lICE9IG51bGwpIHsKLSAgICAgICAgICAgIHBsYW5lLnNldFZpc2libGUoIW1Vc2VCbHVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUmVuZGVyU2NyaXB0R0wgcnMsIFJlc291cmNlcyByZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgICBtVXNlQmx1ciA9IGZhbHNlOwotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgbVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAgICAgbVRvdWNoSGFuZGxlciA9IG5ldyBUb3VjaEhhbmRsZXIoKTsKLQotICAgICAgICBtU2NlbmVNYW5hZ2VyID0gU2NlbmVNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0gICAgICAgIC8vIEluaXRpYWxpemVzIGFsbCB0aGUgUlMgc3BlY2lmaWMgc2NlbmVncmFwaCBlbGVtZW50cwotICAgICAgICBtU2NlbmVNYW5hZ2VyLmluaXRSUyhtUlMsIG1SZXMsIG1XaWR0aCwgbUhlaWdodCk7Ci0KLSAgICAgICAgbUxvYWRpbmdTY3JlZW4gPSBuZXcgVGVzdEFwcExvYWRpbmdTY3JlZW4obVJTLCBtUmVzKTsKLQotICAgICAgICAvLyBJbml0aSByZW5kZXJzY3JpcHQgc3R1ZmYgc3BlY2lmaWMgdG8gdGhlIGFwcC4gVGhpcyB3aWxsIG5lZWQgdG8gYmUgYWJzdHJhY3RlZCBvdXQgbGF0ZXIuCi0gICAgICAgIEZ1bGxzY3JlZW5CbHVyLmNyZWF0ZVJlbmRlclRhcmdldHMobVJTLCBtV2lkdGgsIG1IZWlnaHQpOwotICAgICAgICBpbml0UGFpbnRTaGFkZXJzKCk7Ci0KLSAgICAgICAgLy8gTG9hZCBhIHNjZW5lIHRvIHJlbmRlcgotICAgICAgICBtU2NlbmVNYW5hZ2VyLmxvYWRNb2RlbChtRmlsZVBhdGggKyBtb2RlbE5hbWUsIG1Mb2FkZWRDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLy8gV2hlbiBhIG5ldyBtb2RlbCBmaWxlIGlzIHNlbGVjdGVkIGZyb20gdGhlIFVJLCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHRvIGluaXQgZXZlcnl0aGluZwotICAgIHZvaWQgbG9hZE1vZGVsKFN0cmluZyBwYXRoKSB7Ci0gICAgICAgIG1Mb2FkaW5nU2NyZWVuLnNob3dMb2FkaW5nU2NyZWVuKHRydWUpOwotICAgICAgICBtQWN0aXZlU2NlbmUuZGVzdHJveVJTKCk7Ci0gICAgICAgIG1TY2VuZU1hbmFnZXIubG9hZE1vZGVsKHBhdGgsIG1Mb2FkZWRDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25Eb3duKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgbVRvdWNoSGFuZGxlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25TY2FsZShmbG9hdCBzY2FsZSkgewotICAgICAgICBtVG91Y2hIYW5kbGVyLm9uQWN0aW9uU2NhbGUoc2NhbGUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uTW92ZShmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgICAgIG1Ub3VjaEhhbmRsZXIub25BY3Rpb25Nb3ZlKHgsIHkpOwotICAgIH0KLQotICAgIEZyYWdtZW50U2hhZGVyIGNyZWF0ZUZyb21SZXNvdXJjZShpbnQgaWQsIGJvb2xlYW4gYWRkQ3ViZW1hcCwgVHlwZSBjb25zdFR5cGUpIHsKLSAgICAgICAgRnJhZ21lbnRTaGFkZXIuQnVpbGRlciBmYiA9IG5ldyBGcmFnbWVudFNoYWRlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGZiLnNldFNoYWRlckNvbnN0KGNvbnN0VHlwZSk7Ci0gICAgICAgIGZiLnNldFNoYWRlcihtUmVzLCBpZCk7Ci0gICAgICAgIGZiLmFkZFRleHR1cmUoVGV4dHVyZVR5cGUuVEVYVFVSRV8yRCwgImRpZmZ1c2UiKTsKLSAgICAgICAgaWYgKGFkZEN1YmVtYXApIHsKLSAgICAgICAgICAgIGZiLmFkZFNoYWRlclRleHR1cmUoVGV4dHVyZVR5cGUuVEVYVFVSRV9DVUJFLCAicmVmbGVjdGlvbiIpOwotICAgICAgICB9Ci0gICAgICAgIEZyYWdtZW50U2hhZGVyIHBmID0gZmIuY3JlYXRlKCk7Ci0gICAgICAgIHBmLmdldFByb2dyYW0oKS5iaW5kU2FtcGxlcihTYW1wbGVyLldSQVBfTElORUFSX01JUF9MSU5FQVIobVJTKSwgMCk7Ci0gICAgICAgIGlmIChhZGRDdWJlbWFwKSB7Ci0gICAgICAgICAgICBwZi5nZXRQcm9ncmFtKCkuYmluZFNhbXBsZXIoU2FtcGxlci5DTEFNUF9MSU5FQVJfTUlQX0xJTkVBUihtUlMpLCAxKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGY7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQYWludFNoYWRlcnMoKSB7Ci0gICAgICAgIG1HZW5lcmljViA9IFNjZW5lTWFuYWdlci5nZXREZWZhdWx0VlMoKTsKLQotICAgICAgICBTY3JpcHRGaWVsZF9DYW1lcmFQYXJhbXMgY2FtUGFyYW1zID0gbmV3IFNjcmlwdEZpZWxkX0NhbWVyYVBhcmFtcyhtUlMsIDEpOwotICAgICAgICBUeXBlIGNhbVBhcmFtVHlwZSA9IGNhbVBhcmFtcy5nZXRBbGxvY2F0aW9uKCkuZ2V0VHlwZSgpOwotICAgICAgICBTY3JpcHRGaWVsZF9MaWdodFBhcmFtcyBsaWdodFBhcmFtcyA9IG5ldyBTY3JpcHRGaWVsZF9MaWdodFBhcmFtcyhtUlMsIDEpOwotCi0gICAgICAgIG1QYWludEYgPSBjcmVhdGVGcm9tUmVzb3VyY2UoUi5yYXcucGFpbnRmLCB0cnVlLCBjYW1QYXJhbVR5cGUpOwotICAgICAgICAvLyBBc3NpZ24gYSByZWZsZWN0aW9uIG1hcAotICAgICAgICBUZXh0dXJlQ3ViZSBlbnZDdWJlID0gbmV3IFRleHR1cmVDdWJlKCJzZGNhcmQvc2NlbmVncmFwaC8iLCAiY3ViZV9lbnYucG5nIik7Ci0gICAgICAgIG1QYWludEYuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBUZXh0dXJlUGFyYW0oInJlZmxlY3Rpb24iLCBlbnZDdWJlKSk7Ci0KLSAgICAgICAgbUFsdW1pbnVtRiA9IGNyZWF0ZUZyb21SZXNvdXJjZShSLnJhdy5tZXRhbCwgdHJ1ZSwgY2FtUGFyYW1UeXBlKTsKLSAgICAgICAgVGV4dHVyZUN1YmUgZGlmZkN1YmUgPSBuZXcgVGV4dHVyZUN1YmUoInNkY2FyZC9zY2VuZWdyYXBoLyIsICJjdWJlX3NwZWMucG5nIik7Ci0gICAgICAgIG1BbHVtaW51bUYuYXBwZW5kU291cmNlUGFyYW1zKG5ldyBUZXh0dXJlUGFyYW0oInJlZmxlY3Rpb24iLCBkaWZmQ3ViZSkpOwotCi0gICAgICAgIG1QbGFzdGljRiA9IGNyZWF0ZUZyb21SZXNvdXJjZShSLnJhdy5wbGFzdGljLCBmYWxzZSwgY2FtUGFyYW1UeXBlKTsKLSAgICAgICAgbURpZmZ1c2VGID0gY3JlYXRlRnJvbVJlc291cmNlKFIucmF3LmRpZmZ1c2UsIGZhbHNlLCBjYW1QYXJhbVR5cGUpOwotICAgICAgICBtVGV4dHVyZUYgPSBTY2VuZU1hbmFnZXIuZ2V0VGV4dHVyZUZTKCk7Ci0KLSAgICAgICAgRnJhZ21lbnRTaGFkZXIuQnVpbGRlciBmYiA9IG5ldyBGcmFnbWVudFNoYWRlci5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGZiLnNldE9iamVjdENvbnN0KGxpZ2h0UGFyYW1zLmdldEFsbG9jYXRpb24oKS5nZXRUeXBlKCkpOwotICAgICAgICBmYi5zZXRTaGFkZXIobVJlcywgUi5yYXcucGxhc3RpY19saWdodHMpOwotICAgICAgICBtTGlnaHRzRiA9IGZiLmNyZWF0ZSgpOwotCi0gICAgICAgIGZiID0gbmV3IEZyYWdtZW50U2hhZGVyLkJ1aWxkZXIobVJTKTsKLSAgICAgICAgZmIuc2V0T2JqZWN0Q29uc3QobGlnaHRQYXJhbXMuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7Ci0gICAgICAgIGZiLnNldFNoYWRlcihtUmVzLCBSLnJhdy5kaWZmdXNlX2xpZ2h0cyk7Ci0gICAgICAgIG1MaWdodHNEaWZmRiA9IGZiLmNyZWF0ZSgpOwotCi0gICAgICAgIEZ1bGxzY3JlZW5CbHVyLmluaXRTaGFkZXJzKG1SZXMsIG1SUyk7Ci0gICAgfQotCi0gICAgdm9pZCBpbml0UmVuZGVyUGFzc2VzKCkgewotICAgICAgICBBcnJheUxpc3Q8UmVuZGVyYWJsZUJhc2U+IGFsbERyYXcgPSBtQWN0aXZlU2NlbmUuZ2V0UmVuZGVyYWJsZXMoKTsKLSAgICAgICAgaW50IG51bURyYXcgPSBhbGxEcmF3LnNpemUoKTsKLQotICAgICAgICBpZiAobVVzZUJsdXIpIHsKLSAgICAgICAgICAgIEZ1bGxzY3JlZW5CbHVyLmFkZEJsdXJQYXNzZXMobUFjdGl2ZVNjZW5lLCBtUlMsIG1Ub3VjaEhhbmRsZXIuZ2V0Q2FtZXJhKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVuZGVyUGFzcyBtYWluUGFzcyA9IG5ldyBSZW5kZXJQYXNzKCk7Ci0gICAgICAgIG1haW5QYXNzLnNldENsZWFyQ29sb3IobmV3IEZsb2F0NCgxLjBmLCAxLjBmLCAxLjBmLCAxLjBmKSk7Ci0gICAgICAgIG1haW5QYXNzLnNldFNob3VsZENsZWFyQ29sb3IodHJ1ZSk7Ci0gICAgICAgIG1haW5QYXNzLnNldENsZWFyRGVwdGgoMS4wZik7Ci0gICAgICAgIG1haW5QYXNzLnNldFNob3VsZENsZWFyRGVwdGgodHJ1ZSk7Ci0gICAgICAgIG1haW5QYXNzLnNldENhbWVyYShtVG91Y2hIYW5kbGVyLmdldENhbWVyYSgpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1EcmF3OyBpICsrKSB7Ci0gICAgICAgICAgICBtYWluUGFzcy5hcHBlbmRSZW5kZXJhYmxlKChSZW5kZXJhYmxlKWFsbERyYXcuZ2V0KGkpKTsKLSAgICAgICAgfQotICAgICAgICBtQWN0aXZlU2NlbmUuYXBwZW5kUmVuZGVyUGFzcyhtYWluUGFzcyk7Ci0KLSAgICAgICAgaWYgKG1Vc2VCbHVyKSB7Ci0gICAgICAgICAgICBGdWxsc2NyZWVuQmx1ci5hZGRDb21wb3NpdGVQYXNzKG1BY3RpdmVTY2VuZSwgbVJTLCBtVG91Y2hIYW5kbGVyLmdldENhbWVyYSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRTaGFkZXJzVG9TY2VuZSgpIHsKLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFNoYWRlcihtUGFpbnRGKTsKLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFNoYWRlcihtTGlnaHRzRik7Ci0gICAgICAgIG1BY3RpdmVTY2VuZS5hcHBlbmRTaGFkZXIobUxpZ2h0c0RpZmZGKTsKLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFNoYWRlcihtQWx1bWludW1GKTsKLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFwcGVuZFNoYWRlcihtUGxhc3RpY0YpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXBwZW5kU2hhZGVyKG1EaWZmdXNlRik7Ci0gICAgICAgIG1BY3RpdmVTY2VuZS5hcHBlbmRTaGFkZXIobVRleHR1cmVGKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBwcmVwYXJlVG9SZW5kZXIoU2NlbmUgcykgewotICAgICAgICBtU2NlbmVNYW5hZ2VyLnNldEFjdGl2ZVNjZW5lKHMpOwotICAgICAgICBtQWN0aXZlU2NlbmUgPSBzOwotICAgICAgICBtVG91Y2hIYW5kbGVyLmluaXQobUFjdGl2ZVNjZW5lKTsKLSAgICAgICAgYWRkU2hhZGVyc1RvU2NlbmUoKTsKLSAgICAgICAgUmVuZGVyU3RhdGUgcGxhc3RpYyA9IG5ldyBSZW5kZXJTdGF0ZShtR2VuZXJpY1YsIG1QbGFzdGljRiwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIFJlbmRlclN0YXRlIGRpZmZ1c2UgPSBuZXcgUmVuZGVyU3RhdGUobUdlbmVyaWNWLCBtRGlmZnVzZUYsIG51bGwsIG51bGwpOwotICAgICAgICBSZW5kZXJTdGF0ZSBwYWludCA9IG5ldyBSZW5kZXJTdGF0ZShtR2VuZXJpY1YsIG1QYWludEYsIG51bGwsIG51bGwpOwotICAgICAgICBSZW5kZXJTdGF0ZSBhbHVtaW51bSA9IG5ldyBSZW5kZXJTdGF0ZShtR2VuZXJpY1YsIG1BbHVtaW51bUYsIG51bGwsIG51bGwpOwotICAgICAgICBSZW5kZXJTdGF0ZSBsaWdodHMgPSBuZXcgUmVuZGVyU3RhdGUobUdlbmVyaWNWLCBtTGlnaHRzRiwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIFJlbmRlclN0YXRlIGRpZmZfbGlnaHRzID0gbmV3IFJlbmRlclN0YXRlKG1HZW5lcmljViwgbUxpZ2h0c0RpZmZGLCBudWxsLCBudWxsKTsKLSAgICAgICAgUmVuZGVyU3RhdGUgZGlmZl9saWdodHNfbm9fY3VsbCA9IG5ldyBSZW5kZXJTdGF0ZShtR2VuZXJpY1YsIG1MaWdodHNEaWZmRiwgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtUmFzdGVyLkNVTExfTk9ORShtUlMpKTsKLSAgICAgICAgUmVuZGVyU3RhdGUgZ2xhc3NUcmFuc3AgPSBuZXcgUmVuZGVyU3RhdGUobUdlbmVyaWNWLCBtUGFpbnRGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFtU3RvcmUuQkxFTkRfQUxQSEFfREVQVEhfVEVTVChtUlMpLCBudWxsKTsKLSAgICAgICAgUmVuZGVyU3RhdGUgdGV4U3RhdGUgPSBuZXcgUmVuZGVyU3RhdGUobUdlbmVyaWNWLCBtVGV4dHVyZUYsIG51bGwsIG51bGwpOwotCi0gICAgICAgIGluaXRSZW5kZXJQYXNzZXMoKTsKLQotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGUocGxhc3RpYyk7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFzc2lnblJlbmRlclN0YXRlVG9NYXRlcmlhbChkaWZmdXNlLCAibGFtYmVydDIkIik7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFzc2lnblJlbmRlclN0YXRlVG9NYXRlcmlhbChwYWludCwgIl5QYWludCIpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGVUb01hdGVyaWFsKHBhaW50LCAiXkNhcmJvbiIpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGVUb01hdGVyaWFsKHBhaW50LCAiXkdsYXNzIik7Ci0gICAgICAgIG1BY3RpdmVTY2VuZS5hc3NpZ25SZW5kZXJTdGF0ZVRvTWF0ZXJpYWwocGFpbnQsICJeTWFpbkdsYXNzIik7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFzc2lnblJlbmRlclN0YXRlVG9NYXRlcmlhbChhbHVtaW51bSwgIl5NZXRhbCIpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGVUb01hdGVyaWFsKGFsdW1pbnVtLCAiXkJyYWtlIik7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFzc2lnblJlbmRlclN0YXRlVG9NYXRlcmlhbChnbGFzc1RyYW5zcCwgIl5HbGFzc0xpZ2h0Iik7Ci0KLSAgICAgICAgbUFjdGl2ZVNjZW5lLmFzc2lnblJlbmRlclN0YXRlVG9NYXRlcmlhbChsaWdodHMsICJeTGlnaHRCbGlubiIpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGVUb01hdGVyaWFsKGRpZmZfbGlnaHRzLCAiXkxpZ2h0TGFtYmVydCIpOwotICAgICAgICBtQWN0aXZlU2NlbmUuYXNzaWduUmVuZGVyU3RhdGVUb01hdGVyaWFsKGRpZmZfbGlnaHRzX25vX2N1bGwsICJeTGlnaHRMYW1iZXJ0Tm9DdWxsIik7Ci0gICAgICAgIG1BY3RpdmVTY2VuZS5hc3NpZ25SZW5kZXJTdGF0ZVRvTWF0ZXJpYWwodGV4U3RhdGUsICJeVGV4dHVyZU9ubHkiKTsKLQotICAgICAgICBSZW5kZXJhYmxlIHBsYW5lID0gKFJlbmRlcmFibGUpbUFjdGl2ZVNjZW5lLmdldFJlbmRlcmFibGVCeU5hbWUoInBQbGFuZVNoYXBlMSIpOwotICAgICAgICBpZiAocGxhbmUgIT0gbnVsbCkgewotICAgICAgICAgICAgcGxhbmUuc2V0UmVuZGVyU3RhdGUodGV4U3RhdGUpOwotICAgICAgICAgICAgcGxhbmUuc2V0VmlzaWJsZSghbVVzZUJsdXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBtQWN0aXZlU2NlbmUuaW5pdFJTKCk7Ci0gICAgICAgIGxvbmcgZW5kID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIExvZy52KCJUSU1FUiIsICJTY2VuZSBpbml0IHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsKLQotICAgICAgICBtTG9hZGluZ1NjcmVlbi5zaG93TG9hZGluZ1NjcmVlbihmYWxzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwVmlldy5qYXZhIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC9UZXN0QXBwVmlldy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzM2NhMWI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVGVzdEFwcFZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC50ZXN0YXBwOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TZW1hcGhvcmU7Ci0KLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SZW5kZXJTY3JpcHRHTDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQml0bWFwRHJhd2FibGU7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5kcmF3YWJsZS5EcmF3YWJsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5NZXNzYWdlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU2NhbGVHZXN0dXJlRGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0QXBwVmlldyBleHRlbmRzIFJTU3VyZmFjZVZpZXcgewotCi0gICAgcHVibGljIFRlc3RBcHBWaWV3KENvbnRleHQgY29udGV4dCkgewotICAgICAgICBzdXBlcihjb250ZXh0KTsKLSAgICAgICAgbVNjYWxlRGV0ZWN0b3IgPSBuZXcgU2NhbGVHZXN0dXJlRGV0ZWN0b3IoY29udGV4dCwgbmV3IFNjYWxlTGlzdGVuZXIoKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgVGVzdEFwcFJTIG1SZW5kZXI7Ci0KLSAgICBwcml2YXRlIFNjYWxlR2VzdHVyZURldGVjdG9yIG1TY2FsZURldGVjdG9yOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX1BPSU5URVJfSUQgPSAtMTsKLSAgICBwcml2YXRlIGludCBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCkgewotICAgICAgICBzdXBlci5zdXJmYWNlQ2hhbmdlZChob2xkZXIsIGZvcm1hdCwgdywgaCk7Ci0gICAgICAgIGlmIChtUlMgPT0gbnVsbCkgewotICAgICAgICAgICAgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZyBzYyA9IG5ldyBSZW5kZXJTY3JpcHRHTC5TdXJmYWNlQ29uZmlnKCk7Ci0gICAgICAgICAgICBzYy5zZXREZXB0aCgxNiwgMjQpOwotICAgICAgICAgICAgc2Muc2V0U2FtcGxlcygxLCAyLCAxKTsKLSAgICAgICAgICAgIG1SUyA9IGNyZWF0ZVJlbmRlclNjcmlwdEdMKHNjKTsKLSAgICAgICAgICAgIG1SUy5zZXRTdXJmYWNlKGhvbGRlciwgdywgaCk7Ci0gICAgICAgICAgICBtUmVuZGVyID0gbmV3IFRlc3RBcHBSUygpOwotICAgICAgICAgICAgbVJlbmRlci5pbml0KG1SUywgZ2V0UmVzb3VyY2VzKCksIHcsIGgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25EZXRhY2hlZEZyb21XaW5kb3coKSB7Ci0gICAgICAgIGlmIChtUlMgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJlbmRlciA9IG51bGw7Ci0gICAgICAgICAgICBtUlMgPSBudWxsOwotICAgICAgICAgICAgZGVzdHJveVJlbmRlclNjcmlwdEdMKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBvbktleURvd24oaW50IGtleUNvZGUsIEtleUV2ZW50IGV2ZW50KQotICAgIHsKLSAgICAgICAgLy8gYnJlYWsgcG9pbnQgYXQgaGVyZQotICAgICAgICAvLyB0aGlzIG1ldGhvZCBkb2Vzbid0IHdvcmsgd2hlbiAnZXh0ZW5kcyBWaWV3JyBpbmNsdWRlICdleHRlbmRzIFNjcm9sbFZpZXcnLgotICAgICAgICByZXR1cm4gc3VwZXIub25LZXlEb3duKGtleUNvZGUsIGV2ZW50KTsKLSAgICB9Ci0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIG9uVG91Y2hFdmVudChNb3Rpb25FdmVudCBldikgewotICAgICAgICBtU2NhbGVEZXRlY3Rvci5vblRvdWNoRXZlbnQoZXYpOwotCi0gICAgICAgIGJvb2xlYW4gcmV0ID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0IHggPSBldi5nZXRYKCk7Ci0gICAgICAgIGZsb2F0IHkgPSBldi5nZXRZKCk7Ci0KLSAgICAgICAgZmluYWwgaW50IGFjdGlvbiA9IGV2LmdldEFjdGlvbigpOwotCi0gICAgICAgIHN3aXRjaCAoYWN0aW9uICYgTW90aW9uRXZlbnQuQUNUSU9OX01BU0spIHsKLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTjogewotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKDApOwotICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX01PVkU6IHsKLSAgICAgICAgICAgIGlmICghbVNjYWxlRGV0ZWN0b3IuaXNJblByb2dyZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uTW92ZSh4LCB5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKHgsIHkpOwotICAgICAgICAgICAgcmV0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fVVA6IHsKLSAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBJTlZBTElEX1BPSU5URVJfSUQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTW90aW9uRXZlbnQuQUNUSU9OX0NBTkNFTDogewotICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IElOVkFMSURfUE9JTlRFUl9JRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fUE9JTlRFUl9VUDogewotICAgICAgICAgICAgZmluYWwgaW50IHBvaW50ZXJJbmRleCA9IChldi5nZXRBY3Rpb24oKSAmIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0lOREVYX01BU0spCi0gICAgICAgICAgICAgICAgICAgID4+IE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX0lOREVYX1NISUZUOwotICAgICAgICAgICAgZmluYWwgaW50IHBvaW50ZXJJZCA9IGV2LmdldFBvaW50ZXJJZChwb2ludGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKHBvaW50ZXJJZCA9PSBtQWN0aXZlUG9pbnRlcklkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3YXMgb3VyIGFjdGl2ZSBwb2ludGVyIGdvaW5nIHVwLiBDaG9vc2UgYSBuZXcKLSAgICAgICAgICAgICAgICAvLyBhY3RpdmUgcG9pbnRlciBhbmQgYWRqdXN0IGFjY29yZGluZ2x5LgotICAgICAgICAgICAgICAgIGZpbmFsIGludCBuZXdQb2ludGVySW5kZXggPSBwb2ludGVySW5kZXggPT0gMCA/IDEgOiAwOwotICAgICAgICAgICAgICAgIHggPSBldi5nZXRYKG5ld1BvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICAgICAgeSA9IGV2LmdldFkobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bih4LCB5KTsKLSAgICAgICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKG5ld1BvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFNjYWxlTGlzdGVuZXIgZXh0ZW5kcyBTY2FsZUdlc3R1cmVEZXRlY3Rvci5TaW1wbGVPblNjYWxlR2VzdHVyZUxpc3RlbmVyIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyBib29sZWFuIG9uU2NhbGUoU2NhbGVHZXN0dXJlRGV0ZWN0b3IgZGV0ZWN0b3IpIHsKLSAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25TY2FsZShkZXRlY3Rvci5nZXRTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVG91Y2hIYW5kbGVyLmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL1RvdWNoSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5Nzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvVG91Y2hIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQudGVzdGFwcDsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRmxvYXQzOwotaW1wb3J0IGNvbS5hbmRyb2lkLnNjZW5lZ3JhcGguKjsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLkNvbXBvdW5kVHJhbnNmb3JtLlJvdGF0ZUNvbXBvbmVudDsKLWltcG9ydCBjb20uYW5kcm9pZC5zY2VuZWdyYXBoLkNvbXBvdW5kVHJhbnNmb3JtLlRyYW5zbGF0ZUNvbXBvbmVudDsKLQotcHVibGljIGNsYXNzIFRvdWNoSGFuZGxlciB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIFRBRyA9ICJUb3VjaEhhbmRsZXIiOwotCi0gICAgZmxvYXQgbUxhc3RYOwotICAgIGZsb2F0IG1MYXN0WTsKLQotICAgIGZsb2F0IG1Sb3RhdGVYVmFsdWU7Ci0gICAgZmxvYXQgbVJvdGF0ZVlWYWx1ZTsKLSAgICBGbG9hdDMgbURpc3RWYWx1ZTsKLSAgICBGbG9hdDMgbVBvc1ZhbHVlOwotCi0gICAgQ29tcG91bmRUcmFuc2Zvcm0gbUNhbWVyYVJpZzsKLSAgICBSb3RhdGVDb21wb25lbnQgbVJvdGF0ZVg7Ci0gICAgUm90YXRlQ29tcG9uZW50IG1Sb3RhdGVZOwotICAgIFRyYW5zbGF0ZUNvbXBvbmVudCBtRGlzdDsKLSAgICBUcmFuc2xhdGVDb21wb25lbnQgbVBvc2l0aW9uOwotICAgIENhbWVyYSBtQ2FtZXJhOwotCi0gICAgcHVibGljIHZvaWQgaW5pdChTY2VuZSBzY2VuZSkgewotICAgICAgICAvLyBTb21lIGluaXRpYWwgdmFsdWVzIGZvciBjYW1lcmEgcG9zaXRpb24KLSAgICAgICAgbVJvdGF0ZVhWYWx1ZSA9IC0yMDsKLSAgICAgICAgbVJvdGF0ZVlWYWx1ZSA9IDA7Ci0gICAgICAgIG1EaXN0VmFsdWUgPSBuZXcgRmxvYXQzKDAsIDAsIDQ1KTsKLSAgICAgICAgbVBvc1ZhbHVlID0gbmV3IEZsb2F0MygwLCA0LCAwKTsKLQotICAgICAgICAvLyBNYWtlIGEgY2FtZXJhIHRyYW5zZm9ybSB3ZSBjYW4gbWFuaXB1bGF0ZQotICAgICAgICBtQ2FtZXJhUmlnID0gc2NlbmUuYXBwZW5kTmV3Q29tcG91bmRUcmFuc2Zvcm0oKTsKLSAgICAgICAgbUNhbWVyYVJpZy5zZXROYW1lKCJDYW1lcmFSaWciKTsKLQotICAgICAgICBtUG9zaXRpb24gPSBtQ2FtZXJhUmlnLmFkZFRyYW5zbGF0ZSgiUG9zaXRpb24iLCBtUG9zVmFsdWUpOwotICAgICAgICBtUm90YXRlWSAgPSBtQ2FtZXJhUmlnLmFkZFJvdGF0ZSgiUm90YXRlWSIsIG5ldyBGbG9hdDMoMCwgMSwgMCksIG1Sb3RhdGVZVmFsdWUpOwotICAgICAgICBtUm90YXRlWCAgPSBtQ2FtZXJhUmlnLmFkZFJvdGF0ZSgiUm90YXRlWCIsIG5ldyBGbG9hdDMoMSwgMCwgMCksIG1Sb3RhdGVYVmFsdWUpOwotICAgICAgICBtRGlzdCAgICAgPSBtQ2FtZXJhUmlnLmFkZFRyYW5zbGF0ZSgiRGlzdGFuY2UiLCBtRGlzdFZhbHVlKTsKLQotICAgICAgICBtQ2FtZXJhID0gc2NlbmUuYXBwZW5kTmV3Q2FtZXJhKCk7Ci0gICAgICAgIG1DYW1lcmEuc2V0VHJhbnNmb3JtKG1DYW1lcmFSaWcpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYW1lcmEgZ2V0Q2FtZXJhKCkgewotICAgICAgICByZXR1cm4gbUNhbWVyYTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbkRvd24oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtTGFzdFggPSB4OwotICAgICAgICBtTGFzdFkgPSB5OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9uQWN0aW9uU2NhbGUoZmxvYXQgc2NhbGUpIHsKLSAgICAgICAgaWYgKG1EaXN0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtRGlzdFZhbHVlLnogKj0gMS4wZiAvIHNjYWxlOwotICAgICAgICBtRGlzdFZhbHVlLnogPSBNYXRoLm1heCgxMC4wZiwgTWF0aC5taW4obURpc3RWYWx1ZS56LCAxNTAuMGYpKTsKLSAgICAgICAgbURpc3Quc2V0VmFsdWUobURpc3RWYWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25Nb3ZlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICAgICAgaWYgKG1Sb3RhdGVYID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZsb2F0IGR4ID0gbUxhc3RYIC0geDsKLSAgICAgICAgZmxvYXQgZHkgPSBtTGFzdFkgLSB5OwotCi0gICAgICAgIGlmIChNYXRoLmFicyhkeSkgPD0gMi4wZikgewotICAgICAgICAgICAgZHkgPSAwLjBmOwotICAgICAgICB9Ci0gICAgICAgIGlmIChNYXRoLmFicyhkeCkgPD0gMi4wZikgewotICAgICAgICAgICAgZHggPSAwLjBmOwotICAgICAgICB9Ci0KLSAgICAgICAgbVJvdGF0ZVlWYWx1ZSArPSBkeCAqIDAuMjVmOwotICAgICAgICBtUm90YXRlWVZhbHVlICU9IDM2MC4wZjsKLQotICAgICAgICBtUm90YXRlWFZhbHVlICArPSBkeSAqIDAuMjVmOwotICAgICAgICBtUm90YXRlWFZhbHVlICA9IE1hdGgubWF4KG1Sb3RhdGVYVmFsdWUgLCAtODAuMGYpOwotICAgICAgICBtUm90YXRlWFZhbHVlICA9IE1hdGgubWluKG1Sb3RhdGVYVmFsdWUgLCAwLjBmKTsKLQotICAgICAgICBtUm90YXRlWC5zZXRBbmdsZShtUm90YXRlWFZhbHVlKTsKLSAgICAgICAgbVJvdGF0ZVkuc2V0QW5nbGUobVJvdGF0ZVlWYWx1ZSk7Ci0KLSAgICAgICAgbUxhc3RYID0geDsKLSAgICAgICAgbUxhc3RZID0geTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL3Rlc3RfYXBwLnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2NlbmVHcmFwaC9zcmMvY29tL2FuZHJvaWQvdGVzdGFwcC90ZXN0X2FwcC5ycwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDk0ZGE1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL3Rlc3RfYXBwLnJzCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnRlc3RhcHApCi0KLSNpbmNsdWRlICJyc19ncmFwaGljcy5yc2giCi0jaW5jbHVkZSAidGVzdF9hcHAucnNoIgotCi0vLyBNYWtpbmcgc3VyZSB0aGVzZSBnZXQgcmVmbGVjdGVkCi1GQmx1ck9mZnNldHMgKmJsdXJFeHBvcnQ7Ci1WU2hhZGVySW5wdXRzICppRXhwb3J0OwotRlNoYWRlclBhcmFtcyAqZkNvbnN0OwotRlNoYWRlckxpZ2h0UGFyYW1zICpmQ29udHMyOwotVlNQYXJhbXMgKnZDb25zdDI7Ci1WT2JqZWN0UGFyYW1zICp2Q29uc3QzOwotCi1yc19wcm9ncmFtX3ZlcnRleCBnUFZCYWNrZ3JvdW5kOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUEZCYWNrZ3JvdW5kOwotCi1yc19hbGxvY2F0aW9uIGdSb2JvdFRleDsKLXJzX21lc2ggZ1JvYm90TWVzaDsKLQotcnNfcHJvZ3JhbV9zdG9yZSBnUEZTQmFja2dyb3VuZDsKLQotZmxvYXQgZ1JvdGF0ZTsKLQotdm9pZCBpbml0KCkgewotICAgIGdSb3RhdGUgPSAwLjBmOwotfQotCi1zdGF0aWMgZmxvYXQgZ1JvdGF0ZVkgPSAxMjAuMGY7Ci1zdGF0aWMgZmxvYXQgZ1pvb20gPSA1MC4wZjsKLXN0YXRpYyB2b2lkIGRpc3BsYXlMb2FkaW5nKCkgewotICAgIGlmIChyc0lzT2JqZWN0KGdSb2JvdFRleCkgJiYgcnNJc09iamVjdChnUm9ib3RNZXNoKSkgewotICAgICAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUFZCYWNrZ3JvdW5kKTsKLSAgICAgICAgcnNfbWF0cml4NHg0IHByb2o7Ci0gICAgICAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdClyc2dHZXRXaWR0aCgpIC8gKGZsb2F0KXJzZ0dldEhlaWdodCgpOwotICAgICAgICByc01hdHJpeExvYWRQZXJzcGVjdGl2ZSgmcHJvaiwgMzAuMGYsIGFzcGVjdCwgMS4wZiwgMTAwLjBmKTsKLSAgICAgICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLQotICAgICAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgICAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQRlNCYWNrZ3JvdW5kKTsKLSAgICAgICAgcnNnQmluZFRleHR1cmUoZ1BGQmFja2dyb3VuZCwgMCwgZ1JvYm90VGV4KTsKLQotICAgICAgICByc19tYXRyaXg0eDQgbWF0cml4OwotICAgICAgICByc01hdHJpeExvYWRJZGVudGl0eSgmbWF0cml4KTsKLSAgICAgICAgLy8gUG9zaXRpb24gb3VyIG1vZGVscyBvbiB0aGUgc2NyZWVuCi0gICAgICAgIGdSb3RhdGVZICs9IHJzR2V0RHQoKSoxMDA7Ci0gICAgICAgIHJzTWF0cml4VHJhbnNsYXRlKCZtYXRyaXgsIDAsIDAsIC1nWm9vbSk7Ci0gICAgICAgIHJzTWF0cml4Um90YXRlKCZtYXRyaXgsIDIwLjBmLCAxLjBmLCAwLjBmLCAwLjBmKTsKLSAgICAgICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVksIDAuMGYsIDEuMGYsIDAuMGYpOwotICAgICAgICByc01hdHJpeFNjYWxlKCZtYXRyaXgsIDAuMmYsIDAuMmYsIDAuMmYpOwotICAgICAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotICAgICAgICByc2dEcmF3TWVzaChnUm9ib3RNZXNoKTsKLSAgICB9Ci0KLSAgICB1aW50IHdpZHRoID0gcnNnR2V0V2lkdGgoKTsKLSAgICB1aW50IGhlaWdodCA9IHJzZ0dldEhlaWdodCgpOwotICAgIGludCBsZWZ0ID0gMCwgcmlnaHQgPSAwLCB0b3AgPSAwLCBib3R0b20gPSAwOwotICAgIGNvbnN0IGNoYXIqIHRleHQgPSAiSW5pdGlhbGl6aW5nLi4uIjsKLSAgICByc2dNZWFzdXJlVGV4dCh0ZXh0LCAmbGVmdCwgJnJpZ2h0LCAmdG9wLCAmYm90dG9tKTsKLSAgICBpbnQgY2VudGVyZWRQb3MgPSB3aWR0aCAvIDIgLSAocmlnaHQgLSBsZWZ0KSAvIDI7Ci0gICAgcnNnRHJhd1RleHQodGV4dCwgY2VudGVyZWRQb3MsIGhlaWdodCAvIDIgKyBoZWlnaHQgLyAxMCk7Ci19Ci0KLWludCByb290KHZvaWQpIHsKLSAgICByc2dDbGVhckNvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0NsZWFyRGVwdGgoMS4wZik7Ci0gICAgZGlzcGxheUxvYWRpbmcoKTsKLSAgICByZXR1cm4gMzA7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TY2VuZUdyYXBoL3NyYy9jb20vYW5kcm9pZC90ZXN0YXBwL3Rlc3RfYXBwLnJzaCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvdGVzdF9hcHAucnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmJjYmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NjZW5lR3JhcGgvc3JjL2NvbS9hbmRyb2lkL3Rlc3RhcHAvdGVzdF9hcHAucnNoCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLS8vCi0vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLS8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLS8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotLy8KLS8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0vLwotLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLS8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLSNwcmFnbWEgdmVyc2lvbigxKQotCi0jcHJhZ21hIHJzIGphdmFfcGFja2FnZV9uYW1lKGNvbS5hbmRyb2lkLnRlc3RhcHApCi0KLS8vIEhlbHBlcnMKLXR5cGVkZWYgc3RydWN0IFZpZXdQcm9qUGFyYW1zIHsKLSAgICByc19tYXRyaXg0eDQgdmlld1Byb2o7Ci19IFZTUGFyYW1zOwotCi10eXBlZGVmIHN0cnVjdCBNb2RlbFBhcmFtcyB7Ci0gICAgcnNfbWF0cml4NHg0IG1vZGVsOwotfSBWT2JqZWN0UGFyYW1zOwotCi10eXBlZGVmIHN0cnVjdCBDYW1lcmFQYXJhbXMgewotICAgIGZsb2F0NCBjYW1lcmFQb3M7Ci19IEZTaGFkZXJQYXJhbXM7Ci0KLXR5cGVkZWYgc3RydWN0IExpZ2h0UGFyYW1zIHsKLSAgICBmbG9hdDQgbGlnaHRQb3NfMDsKLSAgICBmbG9hdDQgbGlnaHRDb2xvcl8wOwotICAgIGZsb2F0NCBsaWdodFBvc18xOwotICAgIGZsb2F0NCBsaWdodENvbG9yXzE7Ci0gICAgZmxvYXQ0IGNhbWVyYVBvczsKLSAgICBmbG9hdDQgZGlmZnVzZTsKLX0gRlNoYWRlckxpZ2h0UGFyYW1zOwotCi10eXBlZGVmIHN0cnVjdCBCbHVyT2Zmc2V0cyB7Ci0gICAgZmxvYXQgYmx1ck9mZnNldDA7Ci0gICAgZmxvYXQgYmx1ck9mZnNldDE7Ci0gICAgZmxvYXQgYmx1ck9mZnNldDI7Ci0gICAgZmxvYXQgYmx1ck9mZnNldDM7Ci19IEZCbHVyT2Zmc2V0czsKLQotdHlwZWRlZiBzdHJ1Y3QgVmVydGV4U2hhZGVySW5wdXRzIHsKLSAgICBmbG9hdDQgcG9zaXRpb247Ci0gICAgZmxvYXQzIG5vcm1hbDsKLSAgICBmbG9hdDIgdGV4dHVyZTA7Ci19IFZTaGFkZXJJbnB1dHM7CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9BbmRyb2lkLm1rIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvQW5kcm9pZC5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2MzU2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9BbmRyb2lkLm1rCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSMKLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRV9UQUdTIDo9IHRlc3RzCi0KLUxPQ0FMX1NSQ19GSUxFUyA6PSAkKGNhbGwgYWxsLWphdmEtZmlsZXMtdW5kZXIsIHNyYykgJChjYWxsIGFsbC1yZW5kZXJzY3JpcHQtZmlsZXMtdW5kZXIsIHNyYykKLQotTE9DQUxfU0RLX1ZFUlNJT04gOj0gMTcKLQotTE9DQUxfUEFDS0FHRV9OQU1FIDo9IFNoYWRlcnNUZXN0Ci0KLWluY2x1ZGUgJChCVUlMRF9QQUNLQUdFKQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbCBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MTIwMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0KLSAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gIAotICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAKLSAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotCi08bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHBhY2thZ2U9ImNvbS5hbmRyb2lkLnNoYWRlcnN0ZXN0Ij4KLQotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVQiIC8+Ci0gICAgCi0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9Il9TaGFkZXJzVGVzdCI+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNoYWRlcnNUZXN0IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iX1NoYWRlcnNUZXN0IgotICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0aGVtZT0iQGFuZHJvaWQ6c3R5bGUvVGhlbWUuQmxhY2suTm9UaXRsZUJhciI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLTwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvcm9ib3QucG5nIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL2RyYXdhYmxlLW5vZHBpL3JvYm90LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczNTNmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9yZXMvZHJhd2FibGUtbm9kcGkvcm9ib3QucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL3Jhdy9kZXB0aF9mcy5nbHNsIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL3Jhdy9kZXB0aF9mcy5nbHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTY4NDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3Jlcy9yYXcvZGVwdGhfZnMuZ2xzbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLXZvaWQgbWFpbigpIHsKLSAgICAvLyBOb24tbGluZWFyIGRlcHRoIHZhbHVlCi0gICAgZmxvYXQgeiA9IGdsX0ZyYWdDb29yZC56OwotICAgIC8vIE5lYXIgYW5kIGZhciBwbGFuZXMgZnJvbSB0aGUgcHJvamVjdGlvbgotICAgIC8vIEluIHByYWN0aWNlLCB0aGVzZSB2YWx1ZXMgY2FuIGJlIHVzZWQgdG8gdHdlYWsKLSAgICAvLyB0aGUgZm9jdXMgcmFuZ2UKLSAgICBmbG9hdCBuID0gVU5JX25lYXI7Ci0gICAgZmxvYXQgZiA9IFVOSV9mYXI7Ci0gICAgLy8gTGluZWFyIGRlcHRoIHZhbHVlCi0gICAgeiA9ICgyLjAgKiBuKSAvIChmICsgbiAtIHogKiAoZiAtIG4pKTsKLQotICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoeiwgeiwgeiwgMS4wKTsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3Jlcy9yYXcvcm9ib3QuYTNkIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL3Jhdy9yb2JvdC5hM2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODg5NWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL3Jhdy9yb2JvdC5hM2QKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9yZXMvcmF3L3ZpZ25ldHRlX2ZzLmdsc2wgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9yZXMvcmF3L3ZpZ25ldHRlX2ZzLmdsc2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYzFlYTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3QvcmVzL3Jhdy92aWduZXR0ZV9mcy5nbHNsCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotI2RlZmluZSBDUlRfTUFTSwotCi12YXJ5aW5nIHZlYzIgdmFyVGV4MDsKLQotdm9pZCBtYWluKCkgewotICAgIGxvd3AgdmVjNCBjb2xvciA9IHRleHR1cmUyRChVTklfVGV4MCwgdmFyVGV4MCk7Ci0gICAgCi0gICAgdmVjMiBwb3dlcnMgPSBwb3coYWJzKChnbF9GcmFnQ29vcmQueHkgLyB2ZWMyKFVOSV93aWR0aCwgVU5JX2hlaWdodCkpIC0gMC41KSwgdmVjMigyLjApKTsKLSAgICBmbG9hdCBncmFkaWVudCA9IHNtb290aHN0ZXAoVU5JX3NpemUgLSBVTklfZmVhdGhlciwgVU5JX3NpemUgKyBVTklfZmVhdGhlciwKLSAgICAgICAgICAgIHBvd2Vycy54ICsgcG93ZXJzLnkpOwotCi0gICAgY29sb3IgPSB2ZWM0KG1peChjb2xvci5yZ2IsIHZlYzMoMC4wKSwgZ3JhZGllbnQpLCAxLjApOwotCi0jaWZkZWYgQ1JUX01BU0sKLSAgICBmbG9hdCB2U2hpZnQgPSBnbF9GcmFnQ29vcmQueTsKLSAgICBpZiAobW9kKGdsX0ZyYWdDb29yZC54LCA2LjApID49IDMuMCkgewotICAgICAgICB2U2hpZnQgKz0gMi4wOwotICAgIH0KLQotICAgIGxvd3AgdmVjMyByID0gdmVjMygwLjk1LCAwLjAsIDAuMik7Ci0gICAgbG93cCB2ZWMzIGcgPSB2ZWMzKDAuMiwgMC45NSwgMC4wKTsKLSAgICBsb3dwIHZlYzMgYiA9IHZlYzMoMC4wLCAwLjIsIDAuOTUpOwotICAgIGludCBjaGFubmVsID0gaW50KGZsb29yKG1vZChnbF9GcmFnQ29vcmQueCwgMy4wKSkpOwotICAgIGxvd3AgdmVjNCBjcnQgPSB2ZWM0KHJbY2hhbm5lbF0sIGdbY2hhbm5lbF0sIGJbY2hhbm5lbF0sIDEuMCk7Ci0gICAgY3J0ICo9IGNsYW1wKGZsb29yKG1vZCh2U2hpZnQsIDQuMCkpLCAwLjAsIDEuMCk7Ci0gICAgCi0gICAgY29sb3IgPSAoY3J0ICogY29sb3IgKiAxLjI1KSArIDAuMDU7Ci0jZW5kaWYKLQotICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL3NoYWRlcnN0ZXN0L1NoYWRlcnNUZXN0LmphdmEgYi90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9zcmMvY29tL2FuZHJvaWQvc2hhZGVyc3Rlc3QvU2hhZGVyc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgwM2ZiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9zcmMvY29tL2FuZHJvaWQvc2hhZGVyc3Rlc3QvU2hhZGVyc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGNvbS5hbmRyb2lkLnNoYWRlcnN0ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKHsiVW51c2VkRGVjbGFyYXRpb24ifSkKLXB1YmxpYyBjbGFzcyBTaGFkZXJzVGVzdCBleHRlbmRzIEFjdGl2aXR5IHsKLQotICAgIHByaXZhdGUgU2hhZGVyc1Rlc3RWaWV3IG1WaWV3OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIGljaWNsZSkgewotICAgICAgICBzdXBlci5vbkNyZWF0ZShpY2ljbGUpOwotCi0gICAgICAgIG1WaWV3ID0gbmV3IFNoYWRlcnNUZXN0Vmlldyh0aGlzKTsKLSAgICAgICAgc2V0Q29udGVudFZpZXcobVZpZXcpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgewotICAgICAgICBzdXBlci5vblJlc3VtZSgpOwotICAgICAgICBtVmlldy5yZXN1bWUoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgewotICAgICAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgICAgIG1WaWV3LnBhdXNlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL3NoYWRlcnN0ZXN0L1NoYWRlcnNUZXN0UlMuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3NyYy9jb20vYW5kcm9pZC9zaGFkZXJzdGVzdC9TaGFkZXJzVGVzdFJTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhZDk3ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL3NoYWRlcnN0ZXN0L1NoYWRlcnNUZXN0UlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBjb20uYW5kcm9pZC5zaGFkZXJzdGVzdDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkFsbG9jYXRpb247Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRWxlbWVudDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5FbGVtZW50LkRhdGFLaW5kOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LkVsZW1lbnQuRGF0YVR5cGU7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuRmlsZUEzRDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5NZXNoOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW07Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbUZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1GcmFnbWVudEZpeGVkRnVuY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVN0b3JlOwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlByb2dyYW1TdG9yZS5EZXB0aEZ1bmM7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUHJvZ3JhbVZlcnRleDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5Qcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1J1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuUmVuZGVyU2NyaXB0R0w7Ci1pbXBvcnQgYW5kcm9pZC5yZW5kZXJzY3JpcHQuU2FtcGxlcjsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5UeXBlLkJ1aWxkZXI7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKHsiRmllbGRDYW5CZUxvY2FsIn0pCi1wdWJsaWMgY2xhc3MgU2hhZGVyc1Rlc3RSUyB7Ci0gICAgcHVibGljIFNoYWRlcnNUZXN0UlMoKSB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdChSZW5kZXJTY3JpcHRHTCBycywgUmVzb3VyY2VzIHJlcykgewotICAgICAgICBtUlMgPSByczsKLSAgICAgICAgbVJlcyA9IHJlczsKLSAgICAgICAgaW5pdFJTKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoKSB7Ci0gICAgICAgIGluaXRCdWZmZXJzKG1SUy5nZXRXaWR0aCgpLCBtUlMuZ2V0SGVpZ2h0KCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgUmVzb3VyY2VzIG1SZXM7Ci0gICAgcHJpdmF0ZSBSZW5kZXJTY3JpcHRHTCBtUlM7Ci0gICAgcHJpdmF0ZSBTYW1wbGVyIG1MaW5lYXJDbGFtcDsKLSAgICBwcml2YXRlIFNhbXBsZXIgbU5lYXJlc3RDbGFtcDsKLSAgICBwcml2YXRlIFByb2dyYW1TdG9yZSBtUFNCYWNrZ3JvdW5kOwotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1QRkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4IG1QVkJhY2tncm91bmQ7Ci0gICAgcHJpdmF0ZSBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMgbVBWQTsKLQotICAgIHByaXZhdGUgUHJvZ3JhbUZyYWdtZW50IG1QRlZpZ25ldHRlOwotICAgIHByaXZhdGUgU2NyaXB0RmllbGRfVmlnbmV0dGVDb25zdGFudHNfcyBtRlNWaWduZXR0ZUNvbnN0OwotCi0gICAgcHJpdmF0ZSBBbGxvY2F0aW9uIG1NZXNoVGV4dHVyZTsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbVNjcmVlbjsKLSAgICBwcml2YXRlIEFsbG9jYXRpb24gbVNjcmVlbkRlcHRoOwotCi0gICAgcHJpdmF0ZSBTY3JpcHRGaWVsZF9NZXNoSW5mbyBtTWVzaGVzOwotICAgIHByaXZhdGUgU2NyaXB0Q19zaGFkZXJzdGVzdCBtU2NyaXB0OwotCi0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbkRvd24oZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgb25BY3Rpb25TY2FsZShmbG9hdCBzY2FsZSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvblNjYWxlKHNjYWxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvbkFjdGlvbk1vdmUoZmxvYXQgeCwgZmxvYXQgeSkgewotICAgICAgICBtU2NyaXB0Lmludm9rZV9vbkFjdGlvbk1vdmUoeCwgeSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQRlMoKSB7Ci0gICAgICAgIFByb2dyYW1TdG9yZS5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbVN0b3JlLkJ1aWxkZXIobVJTKTsKLQotICAgICAgICBiLnNldERlcHRoRnVuYyhEZXB0aEZ1bmMuTEVTUyk7Ci0gICAgICAgIGIuc2V0RGl0aGVyRW5hYmxlZChmYWxzZSk7Ci0gICAgICAgIGIuc2V0RGVwdGhNYXNrRW5hYmxlZCh0cnVlKTsKLSAgICAgICAgbVBTQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVNjcmlwdC5zZXRfZ1BGU0JhY2tncm91bmQobVBTQmFja2dyb3VuZCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRQRigpIHsKLSAgICAgICAgbUxpbmVhckNsYW1wID0gU2FtcGxlci5DTEFNUF9MSU5FQVIobVJTKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ0xpbmVhcihtTGluZWFyQ2xhbXApOwotCi0gICAgICAgIG1OZWFyZXN0Q2xhbXAgPSBTYW1wbGVyLkNMQU1QX05FQVJFU1QobVJTKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ05lYXJlc3QobU5lYXJlc3RDbGFtcCk7Ci0KLSAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIGIgPSBuZXcgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGIuc2V0VGV4dHVyZShQcm9ncmFtRnJhZ21lbnRGaXhlZEZ1bmN0aW9uLkJ1aWxkZXIuRW52TW9kZS5SRVBMQUNFLAotICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUZyYWdtZW50Rml4ZWRGdW5jdGlvbi5CdWlsZGVyLkZvcm1hdC5SR0JBLCAwKTsKLSAgICAgICAgbVBGQmFja2dyb3VuZCA9IGIuY3JlYXRlKCk7Ci0gICAgICAgIG1QRkJhY2tncm91bmQuYmluZFNhbXBsZXIobUxpbmVhckNsYW1wLCAwKTsKLSAgICAgICAgbVNjcmlwdC5zZXRfZ1BGQmFja2dyb3VuZChtUEZCYWNrZ3JvdW5kKTsKLQotICAgICAgICBtRlNWaWduZXR0ZUNvbnN0ID0gbmV3IFNjcmlwdEZpZWxkX1ZpZ25ldHRlQ29uc3RhbnRzX3MobVJTLCAxKTsKLSAgICAgICAgbVNjcmlwdC5iaW5kX2dGU1ZpZ25ldHRlQ29uc3RhbnRzKG1GU1ZpZ25ldHRlQ29uc3QpOwotCi0gICAgICAgIFByb2dyYW1GcmFnbWVudC5CdWlsZGVyIGZzOwotCi0gICAgICAgIGZzID0gbmV3IFByb2dyYW1GcmFnbWVudC5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIGZzLnNldFNoYWRlcihtUmVzLCBSLnJhdy52aWduZXR0ZV9mcyk7Ci0gICAgICAgIGZzLmFkZENvbnN0YW50KG1GU1ZpZ25ldHRlQ29uc3QuZ2V0QWxsb2NhdGlvbigpLmdldFR5cGUoKSk7Ci0gICAgICAgIGZzLmFkZFRleHR1cmUoUHJvZ3JhbS5UZXh0dXJlVHlwZS5URVhUVVJFXzJEKTsKLSAgICAgICAgbVBGVmlnbmV0dGUgPSBmcy5jcmVhdGUoKTsKLSAgICAgICAgbVBGVmlnbmV0dGUuYmluZENvbnN0YW50cyhtRlNWaWduZXR0ZUNvbnN0LmdldEFsbG9jYXRpb24oKSwgMCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dQRlZpZ25ldHRlKG1QRlZpZ25ldHRlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdFBWKCkgewotICAgICAgICBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyIHB2YiA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5CdWlsZGVyKG1SUyk7Ci0gICAgICAgIG1QVkJhY2tncm91bmQgPSBwdmIuY3JlYXRlKCk7Ci0KLSAgICAgICAgbVBWQSA9IG5ldyBQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbi5Db25zdGFudHMobVJTKTsKLSAgICAgICAgKChQcm9ncmFtVmVydGV4Rml4ZWRGdW5jdGlvbikgbVBWQmFja2dyb3VuZCkuYmluZENvbnN0YW50cyhtUFZBKTsKLQotICAgICAgICBtU2NyaXB0LnNldF9nUFZCYWNrZ3JvdW5kKG1QVkJhY2tncm91bmQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkSW1hZ2UoKSB7Ci0gICAgICAgIG1NZXNoVGV4dHVyZSA9IEFsbG9jYXRpb24uY3JlYXRlRnJvbUJpdG1hcFJlc291cmNlKG1SUywgbVJlcywgUi5kcmF3YWJsZS5yb2JvdCwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLk1pcG1hcENvbnRyb2wuTUlQTUFQX09OX1NZTkNfVE9fVEVYVFVSRSwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUpOwotICAgICAgICBtU2NyaXB0LnNldF9nVE1lc2gobU1lc2hUZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdE1lc2hlcyhGaWxlQTNEIG1vZGVsKSB7Ci0gICAgICAgIGludCBudW1FbnRyaWVzID0gbW9kZWwuZ2V0SW5kZXhFbnRyeUNvdW50KCk7Ci0gICAgICAgIGludCBudW1NZXNoZXMgPSAwOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVudHJpZXM7IGkgKyspIHsKLSAgICAgICAgICAgIEZpbGVBM0QuSW5kZXhFbnRyeSBlbnRyeSA9IG1vZGVsLmdldEluZGV4RW50cnkoaSk7Ci0gICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCAmJiBlbnRyeS5nZXRFbnRyeVR5cGUoKSA9PSBGaWxlQTNELkVudHJ5VHlwZS5NRVNIKSB7Ci0gICAgICAgICAgICAgICAgbnVtTWVzaGVzICsrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG51bU1lc2hlcyA+IDApIHsKLSAgICAgICAgICAgIG1NZXNoZXMgPSBuZXcgU2NyaXB0RmllbGRfTWVzaEluZm8obVJTLCBudW1NZXNoZXMpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUVudHJpZXM7IGkgKyspIHsKLSAgICAgICAgICAgICAgICBGaWxlQTNELkluZGV4RW50cnkgZW50cnkgPSBtb2RlbC5nZXRJbmRleEVudHJ5KGkpOwotICAgICAgICAgICAgICAgIGlmIChlbnRyeSAhPSBudWxsICYmIGVudHJ5LmdldEVudHJ5VHlwZSgpID09IEZpbGVBM0QuRW50cnlUeXBlLk1FU0gpIHsKLSAgICAgICAgICAgICAgICAgICAgTWVzaCBtZXNoID0gZW50cnkuZ2V0TWVzaCgpOwotICAgICAgICAgICAgICAgICAgICBtTWVzaGVzLnNldF9tTWVzaChpLCBtZXNoLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1NZXNoZXMuc2V0X21OdW1JbmRleFNldHMoaSwgbWVzaC5nZXRQcmltaXRpdmVDb3VudCgpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbU1lc2hlcy5jb3B5QWxsKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUlNSdW50aW1lRXhjZXB0aW9uKCJObyB2YWxpZCBtZXNoZXMgaW4gZmlsZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVNjcmlwdC5iaW5kX2dNZXNoZXMobU1lc2hlcyk7Ci0gICAgICAgIG1TY3JpcHQuaW52b2tlX3VwZGF0ZU1lc2hJbmZvKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluaXRSUygpIHsKLSAgICAgICAgbVNjcmlwdCA9IG5ldyBTY3JpcHRDX3NoYWRlcnN0ZXN0KG1SUywgbVJlcywgUi5yYXcuc2hhZGVyc3Rlc3QpOwotCi0gICAgICAgIGluaXRQRlMoKTsKLSAgICAgICAgaW5pdFBGKCk7Ci0gICAgICAgIGluaXRQVigpOwotCi0gICAgICAgIGxvYWRJbWFnZSgpOwotCi0gICAgICAgIGluaXRCdWZmZXJzKDEsIDEpOwotCi0gICAgICAgIEZpbGVBM0QgbW9kZWwgPSBGaWxlQTNELmNyZWF0ZUZyb21SZXNvdXJjZShtUlMsIG1SZXMsIFIucmF3LnJvYm90KTsKLSAgICAgICAgaW5pdE1lc2hlcyhtb2RlbCk7Ci0KLSAgICAgICAgbVJTLmJpbmRSb290U2NyaXB0KG1TY3JpcHQpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0QnVmZmVycyhpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgQnVpbGRlciBiOwotICAgICAgICBiID0gbmV3IEJ1aWxkZXIobVJTLCBFbGVtZW50LlJHQkFfODg4OChtUlMpKTsKLSAgICAgICAgYi5zZXRYKHdpZHRoKS5zZXRZKGhlaWdodCk7Ci0gICAgICAgIG1TY3JlZW4gPSBBbGxvY2F0aW9uLmNyZWF0ZVR5cGVkKG1SUywgYi5jcmVhdGUoKSwKLSAgICAgICAgICAgICAgICBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1RFWFRVUkUgfCBBbGxvY2F0aW9uLlVTQUdFX0dSQVBISUNTX1JFTkRFUl9UQVJHRVQpOwotICAgICAgICBtU2NyaXB0LnNldF9nU2NyZWVuKG1TY3JlZW4pOwotCi0gICAgICAgIGIgPSBuZXcgQnVpbGRlcihtUlMsIEVsZW1lbnQuY3JlYXRlUGl4ZWwobVJTLCBEYXRhVHlwZS5VTlNJR05FRF8xNiwgRGF0YUtpbmQuUElYRUxfREVQVEgpKTsKLSAgICAgICAgYi5zZXRYKHdpZHRoKS5zZXRZKGhlaWdodCk7Ci0gICAgICAgIG1TY3JlZW5EZXB0aCA9IEFsbG9jYXRpb24uY3JlYXRlVHlwZWQobVJTLCBiLmNyZWF0ZSgpLAotICAgICAgICAgICAgICAgIEFsbG9jYXRpb24uVVNBR0VfR1JBUEhJQ1NfUkVOREVSX1RBUkdFVCk7Ci0gICAgICAgIG1TY3JpcHQuc2V0X2dTY3JlZW5EZXB0aChtU2NyZWVuRGVwdGgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3NyYy9jb20vYW5kcm9pZC9zaGFkZXJzdGVzdC9TaGFkZXJzVGVzdFZpZXcuamF2YSBiL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3NyYy9jb20vYW5kcm9pZC9zaGFkZXJzdGVzdC9TaGFkZXJzVGVzdFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTBhNTQwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9SZW5kZXJTY3JpcHRUZXN0cy9TaGFkZXJzVGVzdC9zcmMvY29tL2FuZHJvaWQvc2hhZGVyc3Rlc3QvU2hhZGVyc1Rlc3RWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY29tLmFuZHJvaWQuc2hhZGVyc3Rlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnJlbmRlcnNjcmlwdC5SU1N1cmZhY2VWaWV3OwotaW1wb3J0IGFuZHJvaWQucmVuZGVyc2NyaXB0LlJlbmRlclNjcmlwdEdMOwotaW1wb3J0IGFuZHJvaWQudmlldy5Nb3Rpb25FdmVudDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU2NhbGVHZXN0dXJlRGV0ZWN0b3I7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTaGFkZXJzVGVzdFZpZXcgZXh0ZW5kcyBSU1N1cmZhY2VWaWV3IHsKLQotICAgIHByaXZhdGUgUmVuZGVyU2NyaXB0R0wgbVJTOwotICAgIHByaXZhdGUgU2hhZGVyc1Rlc3RSUyBtUmVuZGVyOwotCi0gICAgcHJpdmF0ZSBTY2FsZUdlc3R1cmVEZXRlY3RvciBtU2NhbGVEZXRlY3RvcjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJTlZBTElEX1BPSU5URVJfSUQgPSAtMTsKLSAgICBwcml2YXRlIGludCBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotCi0gICAgcHVibGljIFNoYWRlcnNUZXN0VmlldyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgICAgc3VwZXIoY29udGV4dCk7Ci0gICAgICAgIGVuc3VyZVJlbmRlclNjcmlwdCgpOwotICAgICAgICBtU2NhbGVEZXRlY3RvciA9IG5ldyBTY2FsZUdlc3R1cmVEZXRlY3Rvcihjb250ZXh0LCBuZXcgU2NhbGVMaXN0ZW5lcigpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5zdXJlUmVuZGVyU2NyaXB0KCkgewotICAgICAgICBpZiAobVJTID09IG51bGwpIHsKLSAgICAgICAgICAgIFJlbmRlclNjcmlwdEdMLlN1cmZhY2VDb25maWcgc2MgPSBuZXcgUmVuZGVyU2NyaXB0R0wuU3VyZmFjZUNvbmZpZygpOwotICAgICAgICAgICAgc2Muc2V0RGVwdGgoMTYsIDI0KTsKLSAgICAgICAgICAgIG1SUyA9IGNyZWF0ZVJlbmRlclNjcmlwdEdMKHNjKTsKLSAgICAgICAgICAgIG1SZW5kZXIgPSBuZXcgU2hhZGVyc1Rlc3RSUygpOwotICAgICAgICAgICAgbVJlbmRlci5pbml0KG1SUywgZ2V0UmVzb3VyY2VzKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgb25BdHRhY2hlZFRvV2luZG93KCkgewotICAgICAgICBzdXBlci5vbkF0dGFjaGVkVG9XaW5kb3coKTsKLSAgICAgICAgZW5zdXJlUmVuZGVyU2NyaXB0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGludCB3LCBpbnQgaCkgewotICAgICAgICBzdXBlci5zdXJmYWNlQ2hhbmdlZChob2xkZXIsIGZvcm1hdCwgdywgaCk7Ci0gICAgICAgIG1SZW5kZXIuc3VyZmFjZUNoYW5nZWQoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwcm90ZWN0ZWQgdm9pZCBvbkRldGFjaGVkRnJvbVdpbmRvdygpIHsKLSAgICAgICAgbVJlbmRlciA9IG51bGw7Ci0gICAgICAgIGlmIChtUlMgIT0gbnVsbCkgewotICAgICAgICAgICAgbVJTID0gbnVsbDsKLSAgICAgICAgICAgIGRlc3Ryb3lSZW5kZXJTY3JpcHRHTCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gb25Ub3VjaEV2ZW50KE1vdGlvbkV2ZW50IGV2KSB7Ci0gICAgICAgIG1TY2FsZURldGVjdG9yLm9uVG91Y2hFdmVudChldik7Ci0KLSAgICAgICAgYm9vbGVhbiByZXQgPSBmYWxzZTsKLSAgICAgICAgZmxvYXQgeCA9IGV2LmdldFgoKTsKLSAgICAgICAgZmxvYXQgeSA9IGV2LmdldFkoKTsKLQotICAgICAgICBmaW5hbCBpbnQgYWN0aW9uID0gZXYuZ2V0QWN0aW9uKCk7Ci0KLSAgICAgICAgc3dpdGNoIChhY3Rpb24gJiBNb3Rpb25FdmVudC5BQ1RJT05fTUFTSykgewotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9ET1dOOiB7Ci0gICAgICAgICAgICBtUmVuZGVyLm9uQWN0aW9uRG93bih4LCB5KTsKLSAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBldi5nZXRQb2ludGVySWQoMCk7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRTogewotICAgICAgICAgICAgaWYgKCFtU2NhbGVEZXRlY3Rvci5pc0luUHJvZ3Jlc3MoKSkgewotICAgICAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Nb3ZlKHgsIHkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvbkRvd24oeCwgeSk7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9VUDogewotICAgICAgICAgICAgbUFjdGl2ZVBvaW50ZXJJZCA9IElOVkFMSURfUE9JTlRFUl9JRDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNb3Rpb25FdmVudC5BQ1RJT05fQ0FOQ0VMOiB7Ci0gICAgICAgICAgICBtQWN0aXZlUG9pbnRlcklkID0gSU5WQUxJRF9QT0lOVEVSX0lEOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIE1vdGlvbkV2ZW50LkFDVElPTl9QT0lOVEVSX1VQOiB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcG9pbnRlckluZGV4ID0gKGV2LmdldEFjdGlvbigpICYgTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfTUFTSykKLSAgICAgICAgICAgICAgICAgICAgPj4gTW90aW9uRXZlbnQuQUNUSU9OX1BPSU5URVJfSU5ERVhfU0hJRlQ7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgcG9pbnRlcklkID0gZXYuZ2V0UG9pbnRlcklkKHBvaW50ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAocG9pbnRlcklkID09IG1BY3RpdmVQb2ludGVySWQpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdhcyBvdXIgYWN0aXZlIHBvaW50ZXIgZ29pbmcgdXAuIENob29zZSBhIG5ldwotICAgICAgICAgICAgICAgIC8vIGFjdGl2ZSBwb2ludGVyIGFuZCBhZGp1c3QgYWNjb3JkaW5nbHkuCi0gICAgICAgICAgICAgICAgZmluYWwgaW50IG5ld1BvaW50ZXJJbmRleCA9IHBvaW50ZXJJbmRleCA9PSAwID8gMSA6IDA7Ci0gICAgICAgICAgICAgICAgeCA9IGV2LmdldFgobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgICAgICB5ID0gZXYuZ2V0WShuZXdQb2ludGVySW5kZXgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXIub25BY3Rpb25Eb3duKHgsIHkpOwotICAgICAgICAgICAgICAgIG1BY3RpdmVQb2ludGVySWQgPSBldi5nZXRQb2ludGVySWQobmV3UG9pbnRlckluZGV4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgU2NhbGVMaXN0ZW5lciBleHRlbmRzIFNjYWxlR2VzdHVyZURldGVjdG9yLlNpbXBsZU9uU2NhbGVHZXN0dXJlTGlzdGVuZXIgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIGJvb2xlYW4gb25TY2FsZShTY2FsZUdlc3R1cmVEZXRlY3RvciBkZXRlY3RvcikgewotICAgICAgICAgICAgbVJlbmRlci5vbkFjdGlvblNjYWxlKGRldGVjdG9yLmdldFNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL3NoYWRlcnN0ZXN0L3NoYWRlcnN0ZXN0LnJzIGIvdGVzdHMvUmVuZGVyU2NyaXB0VGVzdHMvU2hhZGVyc1Rlc3Qvc3JjL2NvbS9hbmRyb2lkL3NoYWRlcnN0ZXN0L3NoYWRlcnN0ZXN0LnJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzVmNmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL1JlbmRlclNjcmlwdFRlc3RzL1NoYWRlcnNUZXN0L3NyYy9jb20vYW5kcm9pZC9zaGFkZXJzdGVzdC9zaGFkZXJzdGVzdC5ycworKysgL2Rldi9udWxsCkBAIC0xLDIwMCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotLy8KLS8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0vLwotLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLS8vCi0vLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0vLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0vLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0vLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotI3ByYWdtYSB2ZXJzaW9uKDEpCi0KLSNwcmFnbWEgcnMgamF2YV9wYWNrYWdlX25hbWUoY29tLmFuZHJvaWQuc2hhZGVyc3Rlc3QpCi0KLSNpbmNsdWRlICJyc19ncmFwaGljcy5yc2giCi0KLXJzX3Byb2dyYW1fdmVydGV4IGdQVkJhY2tncm91bmQ7Ci1yc19wcm9ncmFtX2ZyYWdtZW50IGdQRkJhY2tncm91bmQ7Ci0KLXR5cGVkZWYgc3RydWN0IFZpZ25ldHRlQ29uc3RhbnRzX3MgewotICAgIGZsb2F0IHNpemU7Ci0gICAgZmxvYXQgZmVhdGhlcjsKLSAgICBmbG9hdCB3aWR0aDsKLSAgICBmbG9hdCBoZWlnaHQ7Ci19IFZpZ25ldHRlQ29uc3RhbnRzOwotVmlnbmV0dGVDb25zdGFudHMgKmdGU1ZpZ25ldHRlQ29uc3RhbnRzOwotcnNfcHJvZ3JhbV9mcmFnbWVudCBnUEZWaWduZXR0ZTsKLQotcnNfYWxsb2NhdGlvbiBnVE1lc2g7Ci0KLXJzX3NhbXBsZXIgZ0xpbmVhcjsKLXJzX3NhbXBsZXIgZ05lYXJlc3Q7Ci0KLXJzX3Byb2dyYW1fc3RvcmUgZ1BGU0JhY2tncm91bmQ7Ci0KLXJzX2FsbG9jYXRpb24gZ1NjcmVlbkRlcHRoOwotcnNfYWxsb2NhdGlvbiBnU2NyZWVuOwotCi10eXBlZGVmIHN0cnVjdCBNZXNoSW5mbyB7Ci0gICAgcnNfbWVzaCBtTWVzaDsKLSAgICBpbnQgbU51bUluZGV4U2V0czsKLSAgICBmbG9hdDMgYkJveE1pbjsKLSAgICBmbG9hdDMgYkJveE1heDsKLX0gTWVzaEluZm9fdDsKLU1lc2hJbmZvX3QgKmdNZXNoZXM7Ci0KLXN0YXRpYyBmbG9hdDMgZ0xvb2tBdDsKLQotc3RhdGljIGZsb2F0IGdSb3RhdGVYOwotc3RhdGljIGZsb2F0IGdSb3RhdGVZOwotc3RhdGljIGZsb2F0IGdab29tOwotCi1zdGF0aWMgZmxvYXQgZ0xhc3RYOwotc3RhdGljIGZsb2F0IGdMYXN0WTsKLQotc3RhdGljIGZsb2F0MyB0b0Zsb2F0MyhmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KSB7Ci0gICAgZmxvYXQzIGY7Ci0gICAgZi54ID0geDsKLSAgICBmLnkgPSB5OwotICAgIGYueiA9IHo7Ci0gICAgcmV0dXJuIGY7Ci19Ci0KLXZvaWQgb25BY3Rpb25Eb3duKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBnTGFzdFggPSB4OwotICAgIGdMYXN0WSA9IHk7Ci19Ci0KLXZvaWQgb25BY3Rpb25TY2FsZShmbG9hdCBzY2FsZSkgewotCi0gICAgZ1pvb20gKj0gMS4wZiAvIHNjYWxlOwotICAgIGdab29tID0gbWF4KDAuMWYsIG1pbihnWm9vbSwgNTAwLjBmKSk7Ci19Ci0KLXZvaWQgb25BY3Rpb25Nb3ZlKGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBmbG9hdCBkeCA9IGdMYXN0WCAtIHg7Ci0gICAgZmxvYXQgZHkgPSBnTGFzdFkgLSB5OwotCi0gICAgaWYgKGZhYnMoZHkpIDw9IDIuMGYpIHsKLSAgICAgICAgZHkgPSAwLjBmOwotICAgIH0KLSAgICBpZiAoZmFicyhkeCkgPD0gMi4wZikgewotICAgICAgICBkeCA9IDAuMGY7Ci0gICAgfQotCi0gICAgZ1JvdGF0ZVkgLT0gZHg7Ci0gICAgaWYgKGdSb3RhdGVZID4gMzYwKSB7Ci0gICAgICAgIGdSb3RhdGVZIC09IDM2MDsKLSAgICB9Ci0gICAgaWYgKGdSb3RhdGVZIDwgMCkgewotICAgICAgICBnUm90YXRlWSArPSAzNjA7Ci0gICAgfQotCi0gICAgZ1JvdGF0ZVggLT0gZHk7Ci0gICAgZ1JvdGF0ZVggPSBtaW4oZ1JvdGF0ZVgsIDgwLjBmKTsKLSAgICBnUm90YXRlWCA9IG1heChnUm90YXRlWCwgLTgwLjBmKTsKLQotICAgIGdMYXN0WCA9IHg7Ci0gICAgZ0xhc3RZID0geTsKLX0KLQotdm9pZCBpbml0KCkgewotICAgIGdSb3RhdGVYID0gMC4wZjsKLSAgICBnUm90YXRlWSA9IDAuMGY7Ci0gICAgZ1pvb20gPSA1MC4wZjsKLSAgICBnTG9va0F0ID0gMC4wZjsKLX0KLQotdm9pZCB1cGRhdGVNZXNoSW5mbygpIHsKLSAgICByc19hbGxvY2F0aW9uIGFsbE1lc2hlcyA9IHJzR2V0QWxsb2NhdGlvbihnTWVzaGVzKTsKLSAgICBpbnQgc2l6ZSA9IHJzQWxsb2NhdGlvbkdldERpbVgoYWxsTWVzaGVzKTsKLSAgICBnTG9va0F0ID0gMC4wZjsKLSAgICBmbG9hdCBtaW5YLCBtaW5ZLCBtaW5aLCBtYXhYLCBtYXhZLCBtYXhaOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIE1lc2hJbmZvX3QgKmluZm8gPSAoTWVzaEluZm9fdCopcnNHZXRFbGVtZW50QXQoYWxsTWVzaGVzLCBpKTsKLSAgICAgICAgcnNnTWVzaENvbXB1dGVCb3VuZGluZ0JveChpbmZvLT5tTWVzaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWluWCwgJm1pblksICZtaW5aLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXhYLCAmbWF4WSwgJm1heFopOwotICAgICAgICBpbmZvLT5iQm94TWluID0gdG9GbG9hdDMobWluWCwgbWluWSwgbWluWik7Ci0gICAgICAgIGluZm8tPmJCb3hNYXggPSB0b0Zsb2F0MyhtYXhYLCBtYXhZLCBtYXhaKTsKLSAgICAgICAgZ0xvb2tBdCArPSAoaW5mby0+YkJveE1pbiArIGluZm8tPmJCb3hNYXgpKjAuNWY7Ci0gICAgfQotICAgIGdMb29rQXQgPSBnTG9va0F0IC8gKGZsb2F0KXNpemU7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbmRlckFsbE1lc2hlcygpIHsKLSAgICByc19hbGxvY2F0aW9uIGFsbE1lc2hlcyA9IHJzR2V0QWxsb2NhdGlvbihnTWVzaGVzKTsKLSAgICBpbnQgc2l6ZSA9IHJzQWxsb2NhdGlvbkdldERpbVgoYWxsTWVzaGVzKTsKLSAgICBnTG9va0F0ID0gMC4wZjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBNZXNoSW5mb190ICppbmZvID0gKE1lc2hJbmZvX3QqKXJzR2V0RWxlbWVudEF0KGFsbE1lc2hlcywgaSk7Ci0gICAgICAgIHJzZ0RyYXdNZXNoKGluZm8tPm1NZXNoKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbmRlck9mZnNjcmVlbigpIHsKLSAgICByc2dCaW5kUHJvZ3JhbVZlcnRleChnUFZCYWNrZ3JvdW5kKTsKLSAgICByc19tYXRyaXg0eDQgcHJvajsKLSAgICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpIHJzQWxsb2NhdGlvbkdldERpbVgoZ1NjcmVlbikgLyAoZmxvYXQpIHJzQWxsb2NhdGlvbkdldERpbVkoZ1NjcmVlbik7Ci0gICAgcnNNYXRyaXhMb2FkUGVyc3BlY3RpdmUoJnByb2osIDMwLjBmLCBhc3BlY3QsIDEuMGYsIDEwMDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkUHJvamVjdGlvbk1hdHJpeCgmcHJvaik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRkJhY2tncm91bmQpOwotICAgIHJzZ0JpbmRUZXh0dXJlKGdQRkJhY2tncm91bmQsIDAsIGdUTWVzaCk7Ci0KLSAgICByc19tYXRyaXg0eDQgbWF0cml4OwotCi0gICAgcnNNYXRyaXhMb2FkSWRlbnRpdHkoJm1hdHJpeCk7Ci0gICAgcnNNYXRyaXhUcmFuc2xhdGUoJm1hdHJpeCwgZ0xvb2tBdC54LCBnTG9va0F0LnksIGdMb29rQXQueiAtIGdab29tKTsKLSAgICByc01hdHJpeFJvdGF0ZSgmbWF0cml4LCBnUm90YXRlWCwgMS4wZiwgMC4wZiwgMC4wZik7Ci0gICAgcnNNYXRyaXhSb3RhdGUoJm1hdHJpeCwgZ1JvdGF0ZVksIDAuMGYsIDEuMGYsIDAuMGYpOwotICAgIHJzZ1Byb2dyYW1WZXJ0ZXhMb2FkTW9kZWxNYXRyaXgoJm1hdHJpeCk7Ci0KLSAgICByZW5kZXJBbGxNZXNoZXMoKTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd09mZnNjcmVlblJlc3VsdChpbnQgcG9zWCwgaW50IHBvc1ksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIHsKLSAgICAvLyBkaXNwbGF5IHRoZSByZXN1bHQgZAotICAgIHJzX21hdHJpeDR4NCBwcm9qLCBtYXRyaXg7Ci0gICAgcnNNYXRyaXhMb2FkT3J0aG8oJnByb2osIDAsIHdpZHRoLCBoZWlnaHQsIDAsIC01MDAsIDUwMCk7Ci0gICAgcnNnUHJvZ3JhbVZlcnRleExvYWRQcm9qZWN0aW9uTWF0cml4KCZwcm9qKTsKLSAgICByc01hdHJpeExvYWRJZGVudGl0eSgmbWF0cml4KTsKLSAgICByc2dQcm9ncmFtVmVydGV4TG9hZE1vZGVsTWF0cml4KCZtYXRyaXgpOwotICAgIGZsb2F0IHN0YXJ0WCA9IHBvc1gsIHN0YXJ0WSA9IHBvc1k7Ci0gICAgcnNnRHJhd1F1YWRUZXhDb29yZHMoc3RhcnRYLCBzdGFydFksIDAsIDAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYLCBzdGFydFkgKyBoZWlnaHQsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYICsgd2lkdGgsIHN0YXJ0WSArIGhlaWdodCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFggKyB3aWR0aCwgc3RhcnRZLCAwLCAxLCAxKTsKLX0KLQotaW50IHJvb3Qodm9pZCkgewotICAgIGdGU1ZpZ25ldHRlQ29uc3RhbnRzLT5zaXplID0gMC41OGYgKiAwLjU4ZjsKLSAgICBnRlNWaWduZXR0ZUNvbnN0YW50cy0+ZmVhdGhlciA9IDAuMmY7Ci0gICAgZ0ZTVmlnbmV0dGVDb25zdGFudHMtPndpZHRoID0gKGZsb2F0KSByc0FsbG9jYXRpb25HZXREaW1YKGdTY3JlZW4pOwotICAgIGdGU1ZpZ25ldHRlQ29uc3RhbnRzLT5oZWlnaHQgPSAoZmxvYXQpIHJzQWxsb2NhdGlvbkdldERpbVkoZ1NjcmVlbik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbVN0b3JlKGdQRlNCYWNrZ3JvdW5kKTsKLQotICAgIC8vIFJlbmRlciBzY2VuZSB0byBmdWxsc2NyZWVuYnVmZmVyCi0gICAgcnNnQmluZENvbG9yVGFyZ2V0KGdTY3JlZW4sIDApOwotICAgIHJzZ0JpbmREZXB0aFRhcmdldChnU2NyZWVuRGVwdGgpOwotICAgIHJzZ0NsZWFyRGVwdGgoMS4wZik7Ci0gICAgcnNnQ2xlYXJDb2xvcigxLjBmLCAxLjBmLCAxLjBmLCAwLjBmKTsKLSAgICByZW5kZXJPZmZzY3JlZW4oKTsKLQotICAgIC8vIFJlbmRlciBvbiBzY3JlZW4KLSAgICByc2dDbGVhckFsbFJlbmRlclRhcmdldHMoKTsKLSAgICByc2dDbGVhckNvbG9yKDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYpOwotICAgIHJzZ0NsZWFyRGVwdGgoMS4wZik7Ci0KLSAgICByc2dCaW5kUHJvZ3JhbUZyYWdtZW50KGdQRlZpZ25ldHRlKTsKLSAgICByc2dCaW5kVGV4dHVyZShnUEZWaWduZXR0ZSwgMCwgZ1NjcmVlbik7Ci0gICAgZHJhd09mZnNjcmVlblJlc3VsdCgwLCAwLCByc2dHZXRXaWR0aCgpLCByc2dHZXRIZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL1N0YXR1c0Jhci9zcmMvY29tL2FuZHJvaWQvc3RhdHVzYmFydGVzdC9Ob3RpZmljYXRpb25UZXN0TGlzdC5qYXZhIGIvdGVzdHMvU3RhdHVzQmFyL3NyYy9jb20vYW5kcm9pZC9zdGF0dXNiYXJ0ZXN0L05vdGlmaWNhdGlvblRlc3RMaXN0LmphdmEKaW5kZXggOGViMzBkMi4uM2EzMDIzMCAxMDA2NDQKLS0tIGEvdGVzdHMvU3RhdHVzQmFyL3NyYy9jb20vYW5kcm9pZC9zdGF0dXNiYXJ0ZXN0L05vdGlmaWNhdGlvblRlc3RMaXN0LmphdmEKKysrIGIvdGVzdHMvU3RhdHVzQmFyL3NyYy9jb20vYW5kcm9pZC9zdGF0dXNiYXJ0ZXN0L05vdGlmaWNhdGlvblRlc3RMaXN0LmphdmEKQEAgLTIzLDYgKzIzLDcgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGVudFJlc29sdmVyOwogaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7CiBpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7CitpbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5OwogaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuQml0bWFwRHJhd2FibGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7CiBpbXBvcnQgYW5kcm9pZC5vcy5WaWJyYXRvcjsKQEAgLTE2Miw4ICsxNjMsMTEgQEAKIAogICAgICAgICBuZXcgVGVzdCgid2l0aCB0b3BpYyBIZWxsbyIpIHsKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uQmlnVGV4dFN0eWxlIGJpZ1RleHQgPSBuZXcgTm90aWZpY2F0aW9uLkJpZ1RleHRTdHlsZSgpOworICAgICAgICAgICAgICAgIGJpZ1RleHQuYmlnVGV4dCgiRmdCSHJlaGVyaGV0aGV0aGV0aGVcbnR3ZXR3cnRlcnRlclxuZXRldHdldGVydGVyeWV0cnkiKTsKICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gbiA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihOb3RpZmljYXRpb25UZXN0TGlzdC50aGlzKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmljb24xKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN0eWxlKGJpZ1RleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0V2hlbihtQWN0aXZpdHlDcmVhdGVUaW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUaXRsZSgiaGloaSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRleHQoIlRoaXMgaXMgYSBub3RpZmljYXRpb24hISEiKQpAQCAtMTcxLDEyICsxNzUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUb3BpYyhuZXcgTm90aWZpY2F0aW9uLlRvcGljKCJoZWxsbyIsICJIZWxsbyIpKQogICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CiAKLSAgICAgICAgICAgICAgICBtTk0ubm90aWZ5KDk5OSwgbik7CisgICAgICAgICAgICAgICAgbU5NLm5vdGlmeSg3MCwgbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCiAKICAgICAgICAgbmV3IFRlc3QoIndpdGggdG9waWMgR29vZEJ5ZSIpIHsKICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uQmlnUGljdHVyZVN0eWxlIHBpY3R1cmUgPSBuZXcgTm90aWZpY2F0aW9uLkJpZ1BpY3R1cmVTdHlsZSgpOworICAgICAgICAgICAgICAgIHBpY3R1cmUuYmlnUGljdHVyZShCaXRtYXBGYWN0b3J5LmRlY29kZVJlc291cmNlKGdldFJlc291cmNlcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgUi5pZC5sYXJnZV9pY29uX3BpbmVhcHBsZTIpKTsKICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24gbiA9IG5ldyBOb3RpZmljYXRpb24uQnVpbGRlcihOb3RpZmljYXRpb25UZXN0TGlzdC50aGlzKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmljb24xKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldFdoZW4obUFjdGl2aXR5Q3JlYXRlVGltZSkKQEAgLTE4NCwxMSArMTkxLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRleHQoIlRoaXMgaXMgYSBub3RpZmljYXRpb24hISEiKQogICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRJbnRlbnQobWFrZUludGVudDIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUb3BpYyhuZXcgTm90aWZpY2F0aW9uLlRvcGljKCJieWUiLCAiR29vZGJ5ZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFN0eWxlKHBpY3R1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKIAotICAgICAgICAgICAgICAgIG1OTS5ub3RpZnkoOTk5OSwgbik7CisgICAgICAgICAgICAgICAgbU5NLm5vdGlmeSg3MSwgbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCisgICAgICAgIG5ldyBUZXN0KCJ3aXRoIHRvcGljIEJhbmFuYXMiKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLkJpZ1RleHRTdHlsZSBiaWdUZXh0ID0gbmV3IE5vdGlmaWNhdGlvbi5CaWdUZXh0U3R5bGUoKTsKKyAgICAgICAgICAgICAgICBiaWdUZXh0LmJpZ1RleHQoImJhbmFuYXMgYXJlIGdyZWF0XG5zbyB0YXN0eVxueXVtXG55dW1cbnl1bVxuIik7CisgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uIG4gPSBuZXcgTm90aWZpY2F0aW9uLkJ1aWxkZXIoTm90aWZpY2F0aW9uVGVzdExpc3QudGhpcykKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTbWFsbEljb24oUi5kcmF3YWJsZS5pY29uMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdHlsZShiaWdUZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldFdoZW4obUFjdGl2aXR5Q3JlYXRlVGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VGl0bGUoImJhbmFuYW5hbmFuYSIpCisgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRleHQoIlRoaXMgaXMgYSBiYW5hbmEhISEiKQorICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRJbnRlbnQobWFrZUludGVudDIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUb3BpYyhuZXcgTm90aWZpY2F0aW9uLlRvcGljKCJiYW5hbmFzIiwgIkJhbmFuYXMiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgICAgICAgICAgICAgbU5NLm5vdGlmeSg3Miwgbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgICAgIG5ldyBUZXN0KCJ3aXRoIGRlbGV0ZSBpbnRlbnQiKSB7CisgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uQmlnVGV4dFN0eWxlIGJpZ1RleHQgPSBuZXcgTm90aWZpY2F0aW9uLkJpZ1RleHRTdHlsZSgpOworICAgICAgICAgICAgICAgICAgICBiaWdUZXh0LmJpZ1RleHQoImJhbmFuYXMgYXJlIGdyZWF0XG5zbyB0YXN0eVxueXVtXG55dW1cbnl1bVxuIik7CisgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbiBuID0gbmV3IE5vdGlmaWNhdGlvbi5CdWlsZGVyKE5vdGlmaWNhdGlvblRlc3RMaXN0LnRoaXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNtYWxsSWNvbihSLmRyYXdhYmxlLmljb24xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTdHlsZShiaWdUZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRXaGVuKG1BY3Rpdml0eUNyZWF0ZVRpbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRlbnRUaXRsZSgiYmFuYW5hbmFuYW5hIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0Q29udGVudFRleHQoIlRoaXMgaXMgYSBiYW5hbmEhISEiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUb3BpYyhuZXcgTm90aWZpY2F0aW9uLlRvcGljKCJiYW5hbmFzIiwgIkJhbmFuYXMiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0RGVsZXRlSW50ZW50KG1ha2VJbnRlbnQyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgbU5NLm5vdGlmeSg3Mywgbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKIAogICAgICAgICBuZXcgVGVzdCgiV2hlbnMiKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKQpkaWZmIC0tZ2l0IGEvdGVzdHMvcGVybWlzc2lvbi9zcmMvY29tL2FuZHJvaWQvZnJhbWV3b3JrL3Blcm1pc3Npb24vdGVzdHMvV2luZG93TWFuYWdlclBlcm1pc3Npb25UZXN0cy5qYXZhIGIvdGVzdHMvcGVybWlzc2lvbi9zcmMvY29tL2FuZHJvaWQvZnJhbWV3b3JrL3Blcm1pc3Npb24vdGVzdHMvV2luZG93TWFuYWdlclBlcm1pc3Npb25UZXN0cy5qYXZhCmluZGV4IDNjMjY1OWYuLmI3OGZkNDkgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3Blcm1pc3Npb24vc3JjL2NvbS9hbmRyb2lkL2ZyYW1ld29yay9wZXJtaXNzaW9uL3Rlc3RzL1dpbmRvd01hbmFnZXJQZXJtaXNzaW9uVGVzdHMuamF2YQorKysgYi90ZXN0cy9wZXJtaXNzaW9uL3NyYy9jb20vYW5kcm9pZC9mcmFtZXdvcmsvcGVybWlzc2lvbi90ZXN0cy9XaW5kb3dNYW5hZ2VyUGVybWlzc2lvblRlc3RzLmphdmEKQEAgLTkzLDcgKzkzLDcgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgbVdtLmFkZEFwcFRva2VuKDAsIG51bGwsIDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgMCwgMCwgZmFsc2UsIGZhbHNlLCBudWxsLAotICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uLkVNUFRZLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24uRU1QVFksIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICBmYWlsKCJJV2luZG93TWFuYWdlci5hZGRBcHBUb2tlbiBkaWQgbm90IHRocm93IFNlY3VyaXR5RXhjZXB0aW9uIGFzIgogICAgICAgICAgICAgICAgICAgICArICIgZXhwZWN0ZWQiKTsKICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdC9Db21tYW5kLmNwcCBiL3Rvb2xzL2FhcHQvQ29tbWFuZC5jcHAKaW5kZXggMjFmNDdiYzIuLjBiYjg4YTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQvQ29tbWFuZC5jcHAKKysrIGIvdG9vbHMvYWFwdC9Db21tYW5kLmNwcApAQCAtMzgzLDYgKzM4MywxNiBAQAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgcHJpbnRVc2VzUGVybWlzc2lvblNkazIzKGNvbnN0IFN0cmluZzgmIG5hbWUsIGludCBtYXhTZGtWZXJzaW9uPS0xKSB7CisgICAgcHJpbnRmKCJ1c2VzLXBlcm1pc3Npb24tc2RrLTIzOiAiKTsKKworICAgIHByaW50ZigibmFtZT0nJXMnIiwgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChuYW1lLnN0cmluZygpKS5zdHJpbmcoKSk7CisgICAgaWYgKG1heFNka1ZlcnNpb24gIT0gLTEpIHsKKyAgICAgICAgcHJpbnRmKCIgbWF4U2RrVmVyc2lvbj0nJWQnIiwgbWF4U2RrVmVyc2lvbik7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRVc2VzSW1wbGllZFBlcm1pc3Npb24oY29uc3QgU3RyaW5nOCYgbmFtZSwgY29uc3QgU3RyaW5nOCYgcmVhc29uKSB7CiAgICAgcHJpbnRmKCJ1c2VzLWltcGxpZWQtcGVybWlzc2lvbjogbmFtZT0nJXMnIHJlYXNvbj0nJXMnXG4iLAogICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChuYW1lLnN0cmluZygpKS5zdHJpbmcoKSwKQEAgLTQ2MywxMiArNDczLDIwIEBACiAgKiBhIHByZS1yZXF1aXNpdGUgb3Igc29tZSBvdGhlciByZWFzb24uCiAgKi8KIHN0cnVjdCBJbXBsaWVkRmVhdHVyZSB7CisgICAgSW1wbGllZEZlYXR1cmUoKSA6IGltcGxpZWRCeVNkazIzKGZhbHNlKSB7fQorICAgIEltcGxpZWRGZWF0dXJlKGNvbnN0IFN0cmluZzgmIG4sIGJvb2wgc2RrMjMpIDogbmFtZShuKSwgaW1wbGllZEJ5U2RrMjMoc2RrMjMpIHt9CisKICAgICAvKioKICAgICAgKiBOYW1lIG9mIHRoZSBpbXBsaWVkIGZlYXR1cmUuCiAgICAgICovCiAgICAgU3RyaW5nOCBuYW1lOwogCiAgICAgLyoqCisgICAgICogV2FzIHRoaXMgaW1wbGllZCBieSBhIHBlcm1pc3Npb24gZnJvbSBTREsgMjMgKDx1c2VzLXBlcm1pc3Npb24tc2RrLTIzIC8+KT8KKyAgICAgKi8KKyAgICBib29sIGltcGxpZWRCeVNkazIzOworCisgICAgLyoqCiAgICAgICogTGlzdCBvZiBodW1hbi1yZWFkYWJsZSByZWFzb25zIGZvciB3aHkgdGhpcyBmZWF0dXJlIHdhcyBpbXBsaWVkLgogICAgICAqLwogICAgIFNvcnRlZFZlY3RvcjxTdHJpbmc4PiByZWFzb25zOwpAQCAtNDk3LDE4ICs1MTUsMjQgQEAKIH07CiAKIHN0YXRpYyB2b2lkIGFkZEltcGxpZWRGZWF0dXJlKEtleWVkVmVjdG9yPFN0cmluZzgsIEltcGxpZWRGZWF0dXJlPiogaW1wbGllZEZlYXR1cmVzLAotICAgICAgICBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiByZWFzb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHJlYXNvbiwgYm9vbCBzZGsyMykgewogICAgIFN0cmluZzggbmFtZTgobmFtZSk7CiAgICAgc3NpemVfdCBpZHggPSBpbXBsaWVkRmVhdHVyZXMtPmluZGV4T2ZLZXkobmFtZTgpOwogICAgIGlmIChpZHggPCAwKSB7Ci0gICAgICAgIGlkeCA9IGltcGxpZWRGZWF0dXJlcy0+YWRkKG5hbWU4LCBJbXBsaWVkRmVhdHVyZSgpKTsKLSAgICAgICAgaW1wbGllZEZlYXR1cmVzLT5lZGl0VmFsdWVBdChpZHgpLm5hbWUgPSBuYW1lODsKKyAgICAgICAgaWR4ID0gaW1wbGllZEZlYXR1cmVzLT5hZGQobmFtZTgsIEltcGxpZWRGZWF0dXJlKG5hbWU4LCBzZGsyMykpOwogICAgIH0KLSAgICBpbXBsaWVkRmVhdHVyZXMtPmVkaXRWYWx1ZUF0KGlkeCkucmVhc29ucy5hZGQoU3RyaW5nOChyZWFzb24pKTsKKworICAgIEltcGxpZWRGZWF0dXJlKiBmZWF0dXJlID0gJmltcGxpZWRGZWF0dXJlcy0+ZWRpdFZhbHVlQXQoaWR4KTsKKworICAgIC8vIEEgbm9uLXNkayAyMyBpbXBsaWVkIGZlYXR1cmUgdGFrZXMgcHJlY2VkZW5jZS4KKyAgICBpZiAoZmVhdHVyZS0+aW1wbGllZEJ5U2RrMjMgJiYgIXNkazIzKSB7CisgICAgICAgIGZlYXR1cmUtPmltcGxpZWRCeVNkazIzID0gZmFsc2U7CisgICAgfQorICAgIGZlYXR1cmUtPnJlYXNvbnMuYWRkKFN0cmluZzgocmVhc29uKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50RmVhdHVyZUdyb3VwKGNvbnN0IEZlYXR1cmVHcm91cCYgZ3JwLAotICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBJbXBsaWVkRmVhdHVyZT4qIGltcGxpZWRGZWF0dXJlcyA9IE5VTEwpIHsKK3N0YXRpYyB2b2lkIHByaW50RmVhdHVyZUdyb3VwSW1wbChjb25zdCBGZWF0dXJlR3JvdXAmIGdycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBJbXBsaWVkRmVhdHVyZT4qIGltcGxpZWRGZWF0dXJlcykgewogICAgIHByaW50ZigiZmVhdHVyZS1ncm91cDogbGFiZWw9JyVzJ1xuIiwgZ3JwLmxhYmVsLnN0cmluZygpKTsKIAogICAgIGlmIChncnAub3BlbkdMRVNWZXJzaW9uID4gMCkgewpAQCAtNTM2LDkgKzU2MCwxMSBAQAogCiAgICAgICAgIFN0cmluZzggcHJpbnRhYmxlRmVhdHVyZU5hbWUoUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dCgKICAgICAgICAgICAgICAgICAgICAgaW1wbGllZEZlYXR1cmUubmFtZS5zdHJpbmcoKSkpOwotICAgICAgICBwcmludGYoIiAgdXNlcy1mZWF0dXJlOiBuYW1lPSclcydcbiIsIHByaW50YWJsZUZlYXR1cmVOYW1lLnN0cmluZygpKTsKLSAgICAgICAgcHJpbnRmKCIgIHVzZXMtaW1wbGllZC1mZWF0dXJlOiBuYW1lPSclcycgcmVhc29uPSciLAotICAgICAgICAgICAgICAgIHByaW50YWJsZUZlYXR1cmVOYW1lLnN0cmluZygpKTsKKyAgICAgICAgY29uc3QgY2hhciogc2RrMjNTdWZmaXggPSBpbXBsaWVkRmVhdHVyZS5pbXBsaWVkQnlTZGsyMyA/ICItc2RrLTIzIiA6ICIiOworCisgICAgICAgIHByaW50ZigiICB1c2VzLWZlYXR1cmUlczogbmFtZT0nJXMnXG4iLCBzZGsyM1N1ZmZpeCwgcHJpbnRhYmxlRmVhdHVyZU5hbWUuc3RyaW5nKCkpOworICAgICAgICBwcmludGYoIiAgdXNlcy1pbXBsaWVkLWZlYXR1cmUlczogbmFtZT0nJXMnIHJlYXNvbj0nIiwgc2RrMjNTdWZmaXgsCisgICAgICAgICAgICAgICBwcmludGFibGVGZWF0dXJlTmFtZS5zdHJpbmcoKSk7CiAgICAgICAgIGNvbnN0IHNpemVfdCBudW1SZWFzb25zID0gaW1wbGllZEZlYXR1cmUucmVhc29ucy5zaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbnVtUmVhc29uczsgaisrKSB7CiAgICAgICAgICAgICBwcmludGYoIiVzIiwgaW1wbGllZEZlYXR1cmUucmVhc29uc1tqXS5zdHJpbmcoKSk7CkBAIC01NTIsNiArNTc4LDE1IEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBwcmludEZlYXR1cmVHcm91cChjb25zdCBGZWF0dXJlR3JvdXAmIGdycCkgeworICAgIHByaW50RmVhdHVyZUdyb3VwSW1wbChncnAsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBwcmludERlZmF1bHRGZWF0dXJlR3JvdXAoY29uc3QgRmVhdHVyZUdyb3VwJiBncnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgSW1wbGllZEZlYXR1cmU+JiBpbXBsaWVkRmVhdHVyZXMpIHsKKyAgICBwcmludEZlYXR1cmVHcm91cEltcGwoZ3JwLCAmaW1wbGllZEZlYXR1cmVzKTsKK30KKwogc3RhdGljIHZvaWQgYWRkUGFyZW50RmVhdHVyZXMoRmVhdHVyZUdyb3VwKiBncnAsIGNvbnN0IFN0cmluZzgmIG5hbWUpIHsKICAgICBpZiAobmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuYXV0b2ZvY3VzIiB8fAogICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuZmxhc2giKSB7CkBAIC01NzIsNiArNjA3LDcyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBhZGRJbXBsaWVkRmVhdHVyZXNGb3JQZXJtaXNzaW9uKGNvbnN0IGludCB0YXJnZXRTZGssIGNvbnN0IFN0cmluZzgmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleWVkVmVjdG9yPFN0cmluZzgsIEltcGxpZWRGZWF0dXJlPiogaW1wbGllZEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGltcGxpZWRCeVNkazIzUGVybWlzc2lvbikgeworICAgIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBIikgeworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYSIsCisgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgLnN0cmluZygpLCBpbXBsaWVkQnlTZGsyM1Blcm1pc3Npb24pOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIikgeworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLmdwcyIsCisgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgLnN0cmluZygpLCBpbXBsaWVkQnlTZGsyM1Blcm1pc3Npb24pOworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuc3RyaW5nKCksIGltcGxpZWRCeVNkazIzUGVybWlzc2lvbik7CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX01PQ0tfTE9DQVRJT04iKSB7CisgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKGltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24iLAorICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQorICAgICAgICAgICAgICAgIC5zdHJpbmcoKSwgaW1wbGllZEJ5U2RrMjNQZXJtaXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OIikgeworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uLm5ldHdvcmsiLAorICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQorICAgICAgICAgICAgICAgIC5zdHJpbmcoKSwgaW1wbGllZEJ5U2RrMjNQZXJtaXNzaW9uKTsKKyAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbiIsCisgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgLnN0cmluZygpLCBpbXBsaWVkQnlTZGsyM1Blcm1pc3Npb24pOworICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19MT0NBVElPTl9FWFRSQV9DT01NQU5EUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5JTlNUQUxMX0xPQ0FUSU9OX1BST1ZJREVSIikgeworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuc3RyaW5nKCksIGltcGxpZWRCeVNkazIzUGVybWlzc2lvbik7CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIIiB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USF9BRE1JTiIpIHsKKyAgICAgICAgaWYgKHRhcmdldFNkayA+IDQpIHsKKyAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKGltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoIiwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoKSwgaW1wbGllZEJ5U2RrMjNQZXJtaXNzaW9uKTsKKyAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKGltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoIiwKKyAgICAgICAgICAgICAgICAgICAgInRhcmdldFNka1ZlcnNpb24gPiA0IiwgaW1wbGllZEJ5U2RrMjNQZXJtaXNzaW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyIpIHsKKyAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5taWNyb3Bob25lIiwKKyAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAuc3RyaW5nKCksIGltcGxpZWRCeVNkazIzUGVybWlzc2lvbik7CisgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUiIHx8CisgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfU1RBVEUiIHx8CisgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfTVVMVElDQVNUX1NUQVRFIikgeworICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZShpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLndpZmkiLAorICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQorICAgICAgICAgICAgICAgIC5zdHJpbmcoKSwgaW1wbGllZEJ5U2RrMjNQZXJtaXNzaW9uKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5DQUxMX1BIT05FIiB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTExfUFJJVklMRUdFRCIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfUEhPTkVfU1RBVEUiIHx8CisgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUFJPQ0VTU19PVVRHT0lOR19DQUxMUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX1NNUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1NNUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX01NUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNFSVZFX1dBUF9QVVNIIiB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlNFTkRfU01TIiB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0FQTl9TRVRUSU5HUyIgfHwKKyAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9TTVMiKSB7CisgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKGltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUudGVsZXBob255IiwKKyAgICAgICAgICAgICAgICBTdHJpbmc4KCJyZXF1ZXN0ZWQgYSB0ZWxlcGhvbnkgcGVybWlzc2lvbiIpLnN0cmluZygpLAorICAgICAgICAgICAgICAgIGltcGxpZWRCeVNkazIzUGVybWlzc2lvbik7CisgICAgfQorfQorCiAvKgogICogSGFuZGxlIHRoZSAiZHVtcCIgY29tbWFuZCwgdG8gZXh0cmFjdCBzZWxlY3QgZGF0YSBmcm9tIGFuIGFyY2hpdmUuCiAgKi8KQEAgLTcxMiw3ICs4MTMsOCBAQAogICAgICAgICAgICAgc2l6ZV90IGxlbjsKICAgICAgICAgICAgIFJlc1hNTFRyZWU6OmV2ZW50X2NvZGVfdCBjb2RlOwogICAgICAgICAgICAgaW50IGRlcHRoID0gMDsKLSAgICAgICAgICAgIHdoaWxlICgoY29kZT10cmVlLm5leHQoKSkgIT0gUmVzWE1MVHJlZTo6RU5EX0RPQ1VNRU5UICYmIGNvZGUgIT0gUmVzWE1MVHJlZTo6QkFEX0RPQ1VNRU5UKSB7CisgICAgICAgICAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJgorICAgICAgICAgICAgICAgICAgICBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IFJlc1hNTFRyZWU6OkVORF9UQUcpIHsKICAgICAgICAgICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03MzUsMjUgKzgzNyw1MyBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggcGtnID0gQWFwdFhtbDo6Z2V0QXR0cmlidXRlKHRyZWUsIE5VTEwsICJwYWNrYWdlIiwgTlVMTCk7CiAgICAgICAgICAgICAgICAgICAgIHByaW50ZigicGFja2FnZTogJXNcbiIsIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQocGtnLnN0cmluZygpKS5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXB0aCA9PSAyICYmIHRhZyA9PSAicGVybWlzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gQWFwdFhtbDo6Z2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMikgeworICAgICAgICAgICAgICAgICAgICBpZiAodGFnID09ICJwZXJtaXNzaW9uIikgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IEFhcHRYbWw6OmdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gIiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiBtaXNzaW5nICdhbmRyb2lkOm5hbWUnIGZvciBwZXJtaXNzaW9uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInBlcm1pc3Npb246ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KG5hbWUuc3RyaW5nKCkpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtcGVybWlzc2lvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBBYXB0WG1sOjpnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbWlzc2luZyAnYW5kcm9pZDpuYW1lJyBmb3IgdXNlcy1wZXJtaXNzaW9uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludFVzZXNQZXJtaXNzaW9uKG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFhcHRYbWw6OmdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgUkVRVUlSRURfQVRUUiwgMSkgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWFwdFhtbDo6Z2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBNQVhfU0RLX1ZFUlNJT05fQVRUUikpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1wZXJtaXNzaW9uLXNkay0yMyIgfHwgdGFnID09ICJ1c2VzLXBlcm1pc3Npb24tc2RrLW0iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gQWFwdFhtbDo6Z2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6ICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG1pc3NpbmcgJ2FuZHJvaWQ6bmFtZScgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VzLXBlcm1pc3Npb24tc2RrLTIzXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludFVzZXNQZXJtaXNzaW9uU2RrMjMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFhcHRYbWw6OmdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgTUFYX1NES19WRVJTSU9OX0FUVFIpKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmludGYoInBlcm1pc3Npb246ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQobmFtZS5zdHJpbmcoKSkuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVwdGggPT0gMiAmJiB0YWcgPT0gInVzZXMtcGVybWlzc2lvbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBlcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gQWFwdFhtbDo6Z2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHByaW50VXNlc1Blcm1pc3Npb24obmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYXB0WG1sOjpnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIFJFUVVJUkVEX0FUVFIsIDEpID09IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWFwdFhtbDo6Z2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBNQVhfU0RLX1ZFUlNJT05fQVRUUikpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoImJhZGdpbmciLCBvcHRpb24pID09IDApIHsKQEAgLTg5Myw3ICsxMDIzLDggQEAKICAgICAgICAgICAgIFZlY3RvcjxGZWF0dXJlR3JvdXA+IGZlYXR1cmVHcm91cHM7CiAgICAgICAgICAgICBLZXllZFZlY3RvcjxTdHJpbmc4LCBJbXBsaWVkRmVhdHVyZT4gaW1wbGllZEZlYXR1cmVzOwogCi0gICAgICAgICAgICB3aGlsZSAoKGNvZGU9dHJlZS5uZXh0KCkpICE9IFJlc1hNTFRyZWU6OkVORF9ET0NVTUVOVCAmJiBjb2RlICE9IFJlc1hNTFRyZWU6OkJBRF9ET0NVTUVOVCkgeworICAgICAgICAgICAgd2hpbGUgKChjb2RlPXRyZWUubmV4dCgpKSAhPSBSZXNYTUxUcmVlOjpFTkRfRE9DVU1FTlQgJiYKKyAgICAgICAgICAgICAgICAgICAgY29kZSAhPSBSZXNYTUxUcmVlOjpCQURfRE9DVU1FTlQpIHsKICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBSZXNYTUxUcmVlOjpFTkRfVEFHKSB7CiAgICAgICAgICAgICAgICAgICAgIGRlcHRoLS07CiAgICAgICAgICAgICAgICAgICAgIGlmIChkZXB0aCA8IDIpIHsKQEAgLTkyNCw4ICsxMDU1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoYU5hbWUuc3RyaW5nKCkpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBsYWJlbD0nJXMnIGljb249JyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFjdGl2aXR5TGFiZWwuc3RyaW5nKCkpLnN0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoYWN0aXZpdHlJY29uLnN0cmluZygpKS5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFjdGl2aXR5TGFiZWwuc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFjdGl2aXR5SWNvbi5zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0xlYW5iYWNrTGF1bmNoZXJBY3Rpdml0eSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImxlYW5iYWNrLWxhdW5jaGFibGUtYWN0aXZpdHk6Iik7CkBAIC05MzQsOSArMTA2NywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFOYW1lLnN0cmluZygpKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgbGFiZWw9JyVzJyBpY29uPSclcycgYmFubmVyPSclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChhY3Rpdml0eUxhYmVsLnN0cmluZygpKS5zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFjdGl2aXR5SWNvbi5zdHJpbmcoKSkuc3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChhY3Rpdml0eUJhbm5lci5zdHJpbmcoKSkuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChhY3Rpdml0eUxhYmVsLnN0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChhY3Rpdml0eUljb24uc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGFjdGl2aXR5QmFubmVyLnN0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0ludGVudEZpbHRlcikgewpAQCAtOTY0LDE4ICsxMTAwLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0xhdW5jaGVyIHw9IGNhdExhdW5jaGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNDYW1lcmFBY3Rpdml0eSB8PSBhY3RDYW1lcmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0NhbWVyYVNlY3VyZUFjdGl2aXR5IHw9IGFjdENhbWVyYVNlY3VyZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJBY3Rpdml0aWVzIHw9ICFhY3RNYWluQWN0aXZpdHkgJiYgIWFjdENhbWVyYSAmJiAhYWN0Q2FtZXJhU2VjdXJlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlckFjdGl2aXRpZXMgfD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYWN0TWFpbkFjdGl2aXR5ICYmICFhY3RDYW1lcmEgJiYgIWFjdENhbWVyYVNlY3VyZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhpblJlY2VpdmVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dpZGdldFJlY2VpdmVycyB8PSBhY3RXaWRnZXRSZWNlaXZlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RldmljZUFkbWluUmVjZWl2ZXIgfD0gKGFjdERldmljZUFkbWluRW5hYmxlZCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmREZXZpY2VBZG1pblBlcm1pc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNPdGhlclJlY2VpdmVycyB8PSAoIWFjdFdpZGdldFJlY2VpdmVycyAmJiAhYWN0RGV2aWNlQWRtaW5FbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzT3RoZXJSZWNlaXZlcnMgfD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWFjdFdpZGdldFJlY2VpdmVycyAmJiAhYWN0RGV2aWNlQWRtaW5FbmFibGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhpblNlcnZpY2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzSW1lU2VydmljZSB8PSBhY3RJbWVTZXJ2aWNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXYWxscGFwZXJTZXJ2aWNlIHw9IGFjdFdhbGxwYXBlclNlcnZpY2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0FjY2Vzc2liaWxpdHlTZXJ2aWNlIHw9IChhY3RBY2Nlc3NpYmlsaXR5U2VydmljZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmRBY2Nlc3NpYmlsaXR5U2VydmljZVBlcm1pc3Npb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNQcmludFNlcnZpY2UgfD0gKGFjdFByaW50U2VydmljZSAmJiBoYXNCaW5kUHJpbnRTZXJ2aWNlUGVybWlzc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1ByaW50U2VydmljZSB8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3RQcmludFNlcnZpY2UgJiYgaGFzQmluZFByaW50U2VydmljZVBlcm1pc3Npb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UgfD0gYWN0Tm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZVBlcm1pc3Npb247CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RyZWFtU2VydmljZSB8PSBhY3REcmVhbVNlcnZpY2UgJiYgaGFzQmluZERyZWFtU2VydmljZVBlcm1pc3Npb247CkBAIC05ODQsNyArMTEyMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFjdEhvc3RBcGR1U2VydmljZSAmJiAhYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFjdE5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5Qcm92aWRlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNEb2N1bWVudHNQcm92aWRlciB8PSBhY3REb2N1bWVudHNQcm92aWRlciAmJiBoYXNSZXF1aXJlZFNhZkF0dHJpYnV0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0RvY3VtZW50c1Byb3ZpZGVyIHw9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0RG9jdW1lbnRzUHJvdmlkZXIgJiYgaGFzUmVxdWlyZWRTYWZBdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbkludGVudEZpbHRlciA9IGZhbHNlOwpAQCAtMTEyNSw3ICsxMjY1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggYmFubmVyID0gQWFwdFhtbDo6Z2V0UmVzb2x2ZWRBdHRyaWJ1dGUocmVzLCB0cmVlLCBCQU5ORVJfQVRUUiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggYmFubmVyID0gQWFwdFhtbDo6Z2V0UmVzb2x2ZWRBdHRyaWJ1dGUocmVzLCB0cmVlLCBCQU5ORVJfQVRUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpiYW5uZXInIGF0dHJpYnV0ZTogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7CkBAIC0xMTM1LDcgKzEyNzYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KGxhYmVsLnN0cmluZygpKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoImljb249JyVzJyIsIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoaWNvbi5zdHJpbmcoKSkuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhbm5lciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiIGJhbm5lcj0nJXMnIiwgUmVzVGFibGU6Om5vcm1hbGl6ZUZvck91dHB1dChiYW5uZXIuc3RyaW5nKCkpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiBiYW5uZXI9JyVzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc1RhYmxlOjpub3JtYWxpemVGb3JPdXRwdXQoYmFubmVyLnN0cmluZygpKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVzdE9ubHkgIT0gMCkgewpAQCAtMTE3OCwxMyArMTMyMCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtc2RrIikgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBjb2RlID0gQWFwdFhtbDo6Z2V0SW50ZWdlckF0dHJpYnV0ZSh0cmVlLCBNSU5fU0RLX1ZFUlNJT05fQVRUUiwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgY29kZSA9IEFhcHRYbWw6OmdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgTUlOX1NES19WRVJTSU9OX0FUVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IEFhcHRYbWw6OmdldFJlc29sdmVkQXR0cmlidXRlKHJlcywgdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1JTl9TREtfVkVSU0lPTl9BVFRSLCAmZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bWluU2RrVmVyc2lvbicgYXR0cmlidXRlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bWluU2RrVmVyc2lvbicgYXR0cmlidXRlOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjA1LDcgKzEzNDksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IEFhcHRYbWw6OmdldFJlc29sdmVkQXR0cmlidXRlKHJlcywgdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9TREtfVkVSU0lPTl9BVFRSLCAmZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbicgYXR0cmlidXRlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbicgYXR0cmlidXRlOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjk3LDkwICsxNDQyLDU4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJ1c2VzLXBlcm1pc3Npb24iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBBYXB0WG1sOjpnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoJmltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19GSU5FX0xPQ0FUSU9OIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5ncHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmxvY2F0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19NT0NLX0xPQ0FUSU9OIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfQ09BUlNFX0xPQ0FUSU9OIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbi5uZXR3b3JrIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS5sb2NhdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nODo6Zm9ybWF0KCJyZXF1ZXN0ZWQgJXMgcGVybWlzc2lvbiIsIG5hbWUuc3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5BQ0NFU1NfTE9DQVRJT05fRVhUUkFfQ09NTUFORFMiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uSU5TVEFMTF9MT0NBVElPTl9QUk9WSURFUiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoJmltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUubG9jYXRpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQkxVRVRPT1RIIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJMVUVUT09USF9BRE1JTiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFNkayA+IDQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLmJsdWV0b290aCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoJmltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUuYmx1ZXRvb3RoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhcmdldFNka1ZlcnNpb24gPiA0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8iKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLm1pY3JvcGhvbmUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzg6OmZvcm1hdCgicmVxdWVzdGVkICVzIHBlcm1pc3Npb24iLCBuYW1lLnN0cmluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX1dJRklfU1RBVEUiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfU1RBVEUiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX1dJRklfTVVMVElDQVNUX1NUQVRFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLCAiYW5kcm9pZC5oYXJkd2FyZS53aWZpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4Ojpmb3JtYXQoInJlcXVlc3RlZCAlcyBwZXJtaXNzaW9uIiwgbmFtZS5zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkNBTExfUEhPTkUiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQ0FMTF9QUklWSUxFR0VEIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9QSE9ORV9TVEFURSIgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5QUk9DRVNTX09VVEdPSU5HX0NBTExTIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfU01TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfU01TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfTU1TIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ0VJVkVfV0FQX1BVU0giIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uU0VORF9TTVMiIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQVBOX1NFVFRJTkdTIiB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX1NNUyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoJmltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUudGVsZXBob255IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4KCJyZXF1ZXN0ZWQgYSB0ZWxlcGhvbnkgcGVybWlzc2lvbiIpLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9FWFRFUk5BTF9TVE9SQUdFIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfRVhURVJOQUxfU1RPUkFHRSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZEV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfU1RBVEUiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRQaG9uZVN0YXRlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9DT05UQUNUUyIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZENvbnRhY3RzUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfQ09OVEFDVFMiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1dyaXRlQ29udGFjdHNQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX0NBTExfTE9HIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWFkQ2FsbExvZ1Blcm1pc3Npb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0NBTExfTE9HIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUNhbGxMb2dQZXJtaXNzaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludFVzZXNQZXJtaXNzaW9uKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYXB0WG1sOjpnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIFJFUVVJUkVEX0FUVFIsIDEpID09IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYXB0WG1sOjpnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIE1BWF9TREtfVkVSU0lPTl9BVFRSKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6bmFtZScgYXR0cmlidXRlOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUjogbWlzc2luZyAnYW5kcm9pZDpuYW1lJyBmb3IgdXNlcy1wZXJtaXNzaW9uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlc0ZvclBlcm1pc3Npb24odGFyZ2V0U2RrLCBuYW1lLCAmaW1wbGllZEZlYXR1cmVzLCBmYWxzZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUV4dGVybmFsU3RvcmFnZVBlcm1pc3Npb24gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJhbmRyb2lkLnBlcm1pc3Npb24uUkVBRF9FWFRFUk5BTF9TVE9SQUdFIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRFeHRlcm5hbFN0b3JhZ2VQZXJtaXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfUEhPTkVfU1RBVEUiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZFBob25lU3RhdGVQZXJtaXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQURfQ09OVEFDVFMiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVhZENvbnRhY3RzUGVybWlzc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9DT05UQUNUUyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUNvbnRhY3RzUGVybWlzc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5SRUFEX0NBTExfTE9HIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlYWRDYWxsTG9nUGVybWlzc2lvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gImFuZHJvaWQucGVybWlzc2lvbi5XUklURV9DQUxMX0xPRyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNXcml0ZUNhbGxMb2dQZXJtaXNzaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2VzUGVybWlzc2lvbihuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYXB0WG1sOjpnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIFJFUVVJUkVEX0FUVFIsIDEpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFhcHRYbWw6OmdldEludGVnZXJBdHRyaWJ1dGUodHJlZSwgTUFYX1NES19WRVJTSU9OX0FUVFIpKTsKKworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSAidXNlcy1wZXJtaXNzaW9uLXNkay0yMyIgfHwgdGFnID09ICJ1c2VzLXBlcm1pc3Npb24tc2RrLW0iKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBBYXB0WG1sOjpnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAiIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IG1pc3NpbmcgJ2FuZHJvaWQ6bmFtZScgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VzLXBlcm1pc3Npb24tc2RrLTIzXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlc0ZvclBlcm1pc3Npb24odGFyZ2V0U2RrLCBuYW1lLCAmaW1wbGllZEZlYXR1cmVzLCB0cnVlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRVc2VzUGVybWlzc2lvblNkazIzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBBYXB0WG1sOjpnZXRJbnRlZ2VyQXR0cmlidXRlKHRyZWUsIE1BWF9TREtfVkVSU0lPTl9BVFRSKSk7CisKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtcGFja2FnZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggbmFtZSA9IEFhcHRYbWw6OmdldEF0dHJpYnV0ZSh0cmVlLCBOQU1FX0FUVFIsICZlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewpAQCAtMTQyMiw3ICsxNTM1LDggQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInBhY2thZ2UtdmVyaWZpZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IG5hbWUgPSBBYXB0WG1sOjpnZXRBdHRyaWJ1dGUodHJlZSwgTkFNRV9BVFRSLCAmZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gIiIgJiYgZXJyb3IgPT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc4IHB1YmxpY0tleSA9IEFhcHRYbWw6OmdldEF0dHJpYnV0ZSh0cmVlLCBQVUJMSUNfS0VZX0FUVFIsICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBwdWJsaWNLZXkgPSBBYXB0WG1sOjpnZXRBdHRyaWJ1dGUodHJlZSwgUFVCTElDX0tFWV9BVFRSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1YmxpY0tleSAhPSAiIiAmJiBlcnJvciA9PSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoInBhY2thZ2UtdmVyaWZpZXI6IG5hbWU9JyVzJyBwdWJsaWNLZXk9JyVzJ1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNUYWJsZTo6bm9ybWFsaXplRm9yT3V0cHV0KG5hbWUuc3RyaW5nKCkpLnN0cmluZygpLApAQCAtMTQ4NSwxMiArMTU5OSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZW4gPT0gMCB8fCBvcmllbiA9PSA2IHx8IG9yaWVuID09IDgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcXVlc3RzIGxhbmRzY2FwZSwgc2Vuc29yTGFuZHNjYXBlLCBvciByZXZlcnNlTGFuZHNjYXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSW1wbGllZEZlYXR1cmUoJmltcGxpZWRGZWF0dXJlcywgImFuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLmxhbmRzY2FwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmUgb3IgbW9yZSBhY3Rpdml0aWVzIGhhdmUgc3BlY2lmaWVkIGEgbGFuZHNjYXBlIG9yaWVudGF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRJbXBsaWVkRmVhdHVyZSgmaW1wbGllZEZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQuaGFyZHdhcmUuc2NyZWVuLmxhbmRzY2FwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25lIG9yIG1vcmUgYWN0aXZpdGllcyBoYXZlIHNwZWNpZmllZCBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYW5kc2NhcGUgb3JpZW50YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWVuID09IDEgfHwgb3JpZW4gPT0gNyB8fCBvcmllbiA9PSA5KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0cyBwb3J0cmFpdCwgc2Vuc29yUG9ydHJhaXQsIG9yIHJldmVyc2VQb3J0cmFpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLnNjcmVlbi5wb3J0cmFpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmUgb3IgbW9yZSBhY3Rpdml0aWVzIGhhdmUgc3BlY2lmaWVkIGEgcG9ydHJhaXQgb3JpZW50YXRpb24iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5oYXJkd2FyZS5zY3JlZW4ucG9ydHJhaXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9uZSBvciBtb3JlIGFjdGl2aXRpZXMgaGF2ZSBzcGVjaWZpZWQgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9ydHJhaXQgb3JpZW50YXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInVzZXMtbGlicmFyeSIpIHsKQEAgLTE1MjQsOCArMTY0NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZERldmljZUFkbWluUGVybWlzc2lvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cGVybWlzc2lvbicgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlY2VpdmVyICclcyc6ICVzXG4iLCByZWNlaXZlck5hbWUuc3RyaW5nKCksIGVycm9yLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cGVybWlzc2lvbicgYXR0cmlidXRlIGZvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlY2VpdmVyICclcyc6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVyTmFtZS5zdHJpbmcoKSwgZXJyb3Iuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnID09ICJzZXJ2aWNlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblNlcnZpY2UgPSB0cnVlOwpAQCAtMTU0MiwyMCArMTY2NCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSAiIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfSU5QVVRfTUVUSE9EIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZElucHV0TWV0aG9kUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfQUNDRVNTSUJJTElUWV9TRVJWSUNFIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb24gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfQUNDRVNTSUJJTElUWV9TRVJWSUNFIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZEFjY2Vzc2liaWxpdHlTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfUFJJTlRfU0VSVklDRSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQucGVybWlzc2lvbi5CSU5EX1BSSU5UX1NFUlZJQ0UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCaW5kUHJpbnRTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfTkZDX1NFUlZJQ0UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9ORkNfU0VSVklDRSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmROZmNTZXJ2aWNlUGVybWlzc2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PSAiYW5kcm9pZC5wZXJtaXNzaW9uLkJJTkRfTk9USUZJQ0FUSU9OX0xJU1RFTkVSX1NFUlZJQ0UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbiA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9OT1RJRklDQVRJT05fTElTVEVORVJfU0VSVklDRSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JpbmROb3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2VQZXJtaXNzaW9uID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uID09ICJhbmRyb2lkLnBlcm1pc3Npb24uQklORF9EUkVBTV9TRVJWSUNFIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQmluZERyZWFtU2VydmljZVBlcm1pc3Npb24gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnBlcm1pc3Npb24nIGF0dHJpYnV0ZSBmb3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBzZXJ2aWNlICclcyc6ICVzXG4iLCBzZXJ2aWNlTmFtZS5zdHJpbmcoKSwgZXJyb3Iuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6cGVybWlzc2lvbicgYXR0cmlidXRlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZpY2UgJyVzJzogJXNcbiIsIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0gInByb3ZpZGVyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpblByb3ZpZGVyID0gdHJ1ZTsKQEAgLTE1NjMsNyArMTY4OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBleHBvcnRlZCA9IEFhcHRYbWw6OmdldFJlc29sdmVkSW50ZWdlckF0dHJpYnV0ZShyZXMsIHRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFBPUlRFRF9BVFRSLCAmZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVSUk9SIGdldHRpbmcgJ2FuZHJvaWQ6ZXhwb3J0ZWQnIGF0dHJpYnV0ZSBmb3IgcHJvdmlkZXI6IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpleHBvcnRlZCcgYXR0cmlidXRlIGZvciBwcm92aWRlcjoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAlc1xuIiwgZXJyb3Iuc3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTU3MSwxNiArMTY5OCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZ3JhbnRVcmlQZXJtaXNzaW9ucyA9IEFhcHRYbWw6OmdldFJlc29sdmVkSW50ZWdlckF0dHJpYnV0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcywgdHJlZSwgR1JBTlRfVVJJX1BFUk1JU1NJT05TX0FUVFIsICZlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpncmFudFVyaVBlcm1pc3Npb25zJyBhdHRyaWJ1dGUgZm9yIHByb3ZpZGVyOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICVzXG4iLCBlcnJvci5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOmdyYW50VXJpUGVybWlzc2lvbnMnIGF0dHJpYnV0ZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggcGVybWlzc2lvbiA9IEFhcHRYbWw6OmdldFJlc29sdmVkQXR0cmlidXRlKHJlcywgdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBFUk1JU1NJT05fQVRUUiwgJmVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gIiIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnBlcm1pc3Npb24nIGF0dHJpYnV0ZSBmb3IgcHJvdmlkZXI6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgJXNcbiIsIGVycm9yLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnBlcm1pc3Npb24nIGF0dHJpYnV0ZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcjogJXNcbiIsIGVycm9yLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMTY2MSw4ICsxNzg5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRoaW5TZXJ2aWNlICYmIHRhZyA9PSAibWV0YS1kYXRhIikgewogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOCBuYW1lID0gQWFwdFhtbDo6Z2V0QXR0cmlidXRlKHRyZWUsIE5BTUVfQVRUUiwgJmVycm9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSAiIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpuYW1lJyBhdHRyaWJ1dGUgZm9yIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBtZXRhLWRhdGEgdGFnIGluIHNlcnZpY2UgJyVzJzogJXNcbiIsIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOm5hbWUnIGF0dHJpYnV0ZSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGEtZGF0YSB0YWcgaW4gc2VydmljZSAnJXMnOiAlc1xuIiwgc2VydmljZU5hbWUuc3RyaW5nKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0xNjc2LDggKzE4MDUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzggeG1sUGF0aCA9IEFhcHRYbWw6OmdldFJlc29sdmVkQXR0cmlidXRlKHJlcywgdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU09VUkNFX0FUVFIsICZlcnJvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yICE9ICIiKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgZ2V0dGluZyAnYW5kcm9pZDpyZXNvdXJjZScgYXR0cmlidXRlIGZvciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG1ldGEtZGF0YSB0YWcgaW4gc2VydmljZSAnJXMnOiAlc1xuIiwgc2VydmljZU5hbWUuc3RyaW5nKCksIGVycm9yLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFUlJPUiBnZXR0aW5nICdhbmRyb2lkOnJlc291cmNlJyBhdHRyaWJ1dGUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0YS1kYXRhIHRhZyBpbiBzZXJ2aWNlICclcyc6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lLnN0cmluZygpLCBlcnJvci5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTE3MzEsMTUgKzE4NjEsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0SW1lU2VydmljZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuc2VydmljZS53YWxscGFwZXIuV2FsbHBhcGVyU2VydmljZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0V2FsbHBhcGVyU2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQuYWNjZXNzaWJpbGl0eXNlcnZpY2UuQWNjZXNzaWJpbGl0eVNlcnZpY2UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLmFjY2Vzc2liaWxpdHlzZXJ2aWNlLkFjY2Vzc2liaWxpdHlTZXJ2aWNlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RBY2Nlc3NpYmlsaXR5U2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQucHJpbnRzZXJ2aWNlLlByaW50U2VydmljZSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSJhbmRyb2lkLnByaW50c2VydmljZS5QcmludFNlcnZpY2UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdFByaW50U2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uYWN0aW9uLkhPU1RfQVBEVV9TRVJWSUNFIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZC5uZmMuY2FyZGVtdWxhdGlvbi5hY3Rpb24uSE9TVF9BUERVX1NFUlZJQ0UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdEhvc3RBcGR1U2VydmljZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uYWN0aW9uLk9GRl9IT1NUX0FQRFVfU0VSVklDRSIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJvaWQubmZjLmNhcmRlbXVsYXRpb24uYWN0aW9uLk9GRl9IT1NUX0FQRFVfU0VSVklDRSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0T2ZmSG9zdEFwZHVTZXJ2aWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5zZXJ2aWNlLm5vdGlmaWNhdGlvbi5Ob3RpZmljYXRpb25MaXN0ZW5lclNlcnZpY2UiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkLnNlcnZpY2Uubm90aWZpY2F0aW9uLk5vdGlmaWNhdGlvbkxpc3RlbmVyU2VydmljZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0Tm90aWZpY2F0aW9uTGlzdGVuZXJTZXJ2aWNlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSAiYW5kcm9pZC5zZXJ2aWNlLmRyZWFtcy5EcmVhbVNlcnZpY2UiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdERyZWFtU2VydmljZSA9IHRydWU7CkBAIC0xODE0LDEyICsxOTQ4LDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGFkZEltcGxpZWRGZWF0dXJlKCZpbXBsaWVkRmVhdHVyZXMsICJhbmRyb2lkLmhhcmR3YXJlLnRvdWNoc2NyZWVuIiwKLSAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZmVhdHVyZSBmb3IgYWxsIGFwcHMiKTsKKyAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgZmVhdHVyZSBmb3IgYWxsIGFwcHMiLCBmYWxzZSk7CiAKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBudW1GZWF0dXJlR3JvdXBzID0gZmVhdHVyZUdyb3Vwcy5zaXplKCk7CiAgICAgICAgICAgICBpZiAobnVtRmVhdHVyZUdyb3VwcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgbm8gPGZlYXR1cmUtZ3JvdXA+IHRhZ3Mgd2VyZSBkZWZpbmVkLCBhcHBseSBhdXRvLWltcGxpZWQgZmVhdHVyZXMuCi0gICAgICAgICAgICAgICAgcHJpbnRGZWF0dXJlR3JvdXAoY29tbW9uRmVhdHVyZXMsICZpbXBsaWVkRmVhdHVyZXMpOworICAgICAgICAgICAgICAgIHByaW50RGVmYXVsdEZlYXR1cmVHcm91cChjb21tb25GZWF0dXJlcywgaW1wbGllZEZlYXR1cmVzKTsKIAogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyA8ZmVhdHVyZS1ncm91cD4gdGFncyBhcmUgZGVmaW5lZCwgc28gd2UgaWdub3JlIGltcGxpZWQgZmVhdHVyZXMgYW5kCmRpZmYgLS1naXQgYS90b29scy9hYXB0L0ltYWdlcy5jcHAgYi90b29scy9hYXB0L0ltYWdlcy5jcHAKaW5kZXggZTQ3MzhmNS4uNWFkMzM3OSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdC9JbWFnZXMuY3BwCisrKyBiL3Rvb2xzL2FhcHQvSW1hZ2VzLmNwcApAQCAtMTA5NSwxMyArMTA5NSw2IEBACiAgICAgYW5hbHl6ZV9pbWFnZShpbWFnZU5hbWUsIGltYWdlSW5mbywgZ3JheXNjYWxlVG9sZXJhbmNlLCByZ2JQYWxldHRlLCBhbHBoYVBhbGV0dGUsCiAgICAgICAgICAgICAgICAgICAmcGFsZXR0ZUVudHJpZXMsICZoYXNUcmFuc3BhcmVuY3ksICZjb2xvcl90eXBlLCBvdXRSb3dzKTsKIAotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhIDktcGF0Y2gsIHdlIG5lZWQgdG8gcHJlc2VydmUgaXQgYXMgYSBBUkdCIGZpbGUgdG8gbWFrZQotICAgIC8vIHN1cmUgdGhlIHBpeGVscyB3aWxsIG5vdCBiZSBwcmUtZGl0aGVyZWQvY2xhbXBlZCB1bnRpbCB3ZSBkZWNpZGUgdGhleSBhcmUKLSAgICBpZiAoaW1hZ2VJbmZvLmlzOVBhdGNoICYmIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fAotICAgICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZIHx8IGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkpIHsKLSAgICAgICAgY29sb3JfdHlwZSA9IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQTsKLSAgICB9Ci0KICAgICBpZiAoa0lzRGVidWcpIHsKICAgICAgICAgc3dpdGNoIChjb2xvcl90eXBlKSB7CiAgICAgICAgIGNhc2UgUE5HX0NPTE9SX1RZUEVfUEFMRVRURToKQEAgLTExODAsMTggKzExNzMsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2h1bmtfY291bnQ7IGkrKykgewotICAgICAgICAgICAgdW5rbm93bnNbaV0ubG9jYXRpb24gPSBQTkdfSEFWRV9QTFRFOworICAgICAgICAgICAgdW5rbm93bnNbaV0ubG9jYXRpb24gPSBQTkdfSEFWRV9JSERSOwogICAgICAgICB9CiAgICAgICAgIHBuZ19zZXRfa2VlcF91bmtub3duX2NodW5rcyh3cml0ZV9wdHIsIFBOR19IQU5ETEVfQ0hVTktfQUxXQVlTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfbmFtZXMsIGNodW5rX2NvdW50KTsKICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rcyh3cml0ZV9wdHIsIHdyaXRlX2luZm8sIHVua25vd25zLCBjaHVua19jb3VudCk7Ci0jaWYgUE5HX0xJQlBOR19WRVIgPCAxMDYwMAotICAgICAgICAvKiBEZWFsIHdpdGggdW5rbm93biBjaHVuayBsb2NhdGlvbiBidWcgaW4gMS41LnggYW5kIGVhcmxpZXIgKi8KLSAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rX2xvY2F0aW9uKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgMCwgUE5HX0hBVkVfUExURSk7Ci0gICAgICAgIGlmIChpbWFnZUluZm8uaGF2ZUxheW91dEJvdW5kcykgewotICAgICAgICAgICAgcG5nX3NldF91bmtub3duX2NodW5rX2xvY2F0aW9uKHdyaXRlX3B0ciwgd3JpdGVfaW5mbywgMSwgUE5HX0hBVkVfUExURSk7Ci0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAogCmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9BbmRyb2lkLm1rIGIvdG9vbHMvYWFwdDIvQW5kcm9pZC5tawppbmRleCBkOGUwYWFjLi5hNGY0YmE5IDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9BbmRyb2lkLm1rCisrKyBiL3Rvb2xzL2FhcHQyL0FuZHJvaWQubWsKQEAgLTI3LDEwICsyNywxNCBAQAogc291cmNlcyA6PSBcCiAJY29tcGlsZS9JZEFzc2lnbmVyLmNwcCBcCiAJY29tcGlsZS9QbmcuY3BwIFwKKwljb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvci5jcHAgXAorCWNvbXBpbGUvUHNldWRvbG9jYWxpemVyLmNwcCBcCiAJY29tcGlsZS9YbWxJZENvbGxlY3Rvci5jcHAgXAogCWZsYXR0ZW4vQXJjaGl2ZS5jcHAgXAogCWZsYXR0ZW4vVGFibGVGbGF0dGVuZXIuY3BwIFwKIAlmbGF0dGVuL1htbEZsYXR0ZW5lci5jcHAgXAorCWlvL0ZpbGVTeXN0ZW0uY3BwIFwKKwlpby9aaXBBcmNoaXZlLmNwcCBcCiAJbGluay9BdXRvVmVyc2lvbmVyLmNwcCBcCiAJbGluay9NYW5pZmVzdEZpeGVyLmNwcCBcCiAJbGluay9Qcml2YXRlQXR0cmlidXRlTW92ZXIuY3BwIFwKQEAgLTY0LDYgKzY4LDggQEAKIAogdGVzdFNvdXJjZXMgOj0gXAogCWNvbXBpbGUvSWRBc3NpZ25lcl90ZXN0LmNwcCBcCisJY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3JfdGVzdC5jcHAgXAorCWNvbXBpbGUvUHNldWRvbG9jYWxpemVyX3Rlc3QuY3BwIFwKIAljb21waWxlL1htbElkQ29sbGVjdG9yX3Rlc3QuY3BwIFwKIAlmbGF0dGVuL0ZpbGVFeHBvcnRXcml0ZXJfdGVzdC5jcHAgXAogCWZsYXR0ZW4vVGFibGVGbGF0dGVuZXJfdGVzdC5jcHAgXApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvRGVidWcuY3BwIGIvdG9vbHMvYWFwdDIvRGVidWcuY3BwCmluZGV4IGQ4NjRmNjYuLjVmY2UyYzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL0RlYnVnLmNwcAorKysgYi90b29scy9hYXB0Mi9EZWJ1Zy5jcHAKQEAgLTUyLDEzICs1MiwxNyBAQAogICAgIHZvaWQgdmlzaXQoU3R5bGUqIHN0eWxlKSBvdmVycmlkZSB7CiAgICAgICAgIHN0ZDo6Y291dCA8PCAiKHN0eWxlKSI7CiAgICAgICAgIGlmIChzdHlsZS0+cGFyZW50KSB7CisgICAgICAgICAgICBjb25zdCBSZWZlcmVuY2UmIHBhcmVudFJlZiA9IHN0eWxlLT5wYXJlbnQudmFsdWUoKTsKICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiIHBhcmVudD0iOwotICAgICAgICAgICAgaWYgKHN0eWxlLT5wYXJlbnQudmFsdWUoKS5uYW1lKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0eWxlLT5wYXJlbnQudmFsdWUoKS5uYW1lLnZhbHVlKCkgPDwgIiAiOworICAgICAgICAgICAgaWYgKHBhcmVudFJlZi5uYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudFJlZi5wcml2YXRlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiKiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBwYXJlbnRSZWYubmFtZS52YWx1ZSgpIDw8ICIgIjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHN0eWxlLT5wYXJlbnQudmFsdWUoKS5pZCkgewotICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBzdHlsZS0+cGFyZW50LnZhbHVlKCkuaWQudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRSZWYuaWQpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgcGFyZW50UmVmLmlkLnZhbHVlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvTmFtZU1hbmdsZXIuaCBiL3Rvb2xzL2FhcHQyL05hbWVNYW5nbGVyLmgKaW5kZXggNmQ3NTJiYi4uMDU0YjllZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvTmFtZU1hbmdsZXIuaAorKysgYi90b29scy9hYXB0Mi9OYW1lTWFuZ2xlci5oCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIH07CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRNYW5nbGUoY29uc3Qgc3RkOjp1MTZzdHJpbmcmIHBhY2thZ2UpIHsKKyAgICBib29sIHNob3VsZE1hbmdsZShjb25zdCBzdGQ6OnUxNnN0cmluZyYgcGFja2FnZSkgY29uc3QgewogICAgICAgICBpZiAocGFja2FnZS5lbXB0eSgpIHx8IG1Qb2xpY3kudGFyZ2V0UGFja2FnZU5hbWUgPT0gcGFja2FnZSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9SZXNvdXJjZS5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZS5jcHAKaW5kZXggMzRkYzFkNS4uOTMyOGI2OSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvUmVzb3VyY2UuY3BwCisrKyBiL3Rvb2xzL2FhcHQyL1Jlc291cmNlLmNwcApAQCAtODUsNCArODUsMTIgQEAKICAgICByZXR1cm4gJml0ZXItPnNlY29uZDsKIH0KIAorYm9vbCBvcGVyYXRvcjwoY29uc3QgUmVzb3VyY2VLZXkmIGEsIGNvbnN0IFJlc291cmNlS2V5JiBiKSB7CisgICAgcmV0dXJuIHN0ZDo6dGllKGEubmFtZSwgYS5jb25maWcpIDwgc3RkOjp0aWUoYi5uYW1lLCBiLmNvbmZpZyk7Cit9CisKK2Jvb2wgb3BlcmF0b3I8KGNvbnN0IFJlc291cmNlS2V5UmVmJiBhLCBjb25zdCBSZXNvdXJjZUtleVJlZiYgYikgeworICAgIHJldHVybiBzdGQ6OnRpZShhLm5hbWUsIGEuY29uZmlnKSA8IHN0ZDo6dGllKGIubmFtZSwgYi5jb25maWcpOworfQorCiB9IC8vIG5hbWVzcGFjZSBhYXB0CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9SZXNvdXJjZS5oIGIvdG9vbHMvYWFwdDIvUmVzb3VyY2UuaAppbmRleCBhN2FmYmI1Li5jNzFlMjQ5IDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9SZXNvdXJjZS5oCisrKyBiL3Rvb2xzL2FhcHQyL1Jlc291cmNlLmgKQEAgLTE2NSw2ICsxNjUsMzYgQEAKICAgICBzdGQ6OnZlY3RvcjxTb3VyY2VkUmVzb3VyY2VOYW1lPiBleHBvcnRlZFN5bWJvbHM7CiB9OwogCisvKioKKyAqIFVzZWZ1bCBzdHJ1Y3QgdXNlZCBhcyBhIGtleSB0byByZXByZXNlbnQgYSB1bmlxdWUgcmVzb3VyY2UgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVycy4KKyAqLworc3RydWN0IFJlc291cmNlS2V5IHsKKyAgICBSZXNvdXJjZU5hbWUgbmFtZTsKKyAgICBDb25maWdEZXNjcmlwdGlvbiBjb25maWc7Cit9OworCitib29sIG9wZXJhdG9yPChjb25zdCBSZXNvdXJjZUtleSYgYSwgY29uc3QgUmVzb3VyY2VLZXkmIGIpOworCisvKioKKyAqIFVzZWZ1bCBzdHJ1Y3QgdXNlZCBhcyBhIGtleSB0byByZXByZXNlbnQgYSB1bmlxdWUgcmVzb3VyY2UgaW4gYXNzb2NpYXRpdmUgY29udGFpbmVycy4KKyAqIEhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBuYW1lLCBzbyB0aGF0IG5hbWUgYmV0dGVyIGxpdmUgbG9uZ2VyIHRoYW4gdGhpcyBrZXkhCisgKi8KK3N0cnVjdCBSZXNvdXJjZUtleVJlZiB7CisgICAgUmVzb3VyY2VOYW1lUmVmIG5hbWU7CisgICAgQ29uZmlnRGVzY3JpcHRpb24gY29uZmlnOworCisgICAgUmVzb3VyY2VLZXlSZWYoKSA9IGRlZmF1bHQ7CisgICAgUmVzb3VyY2VLZXlSZWYoY29uc3QgUmVzb3VyY2VOYW1lUmVmJiBuLCBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgYykgOiBuYW1lKG4pLCBjb25maWcoYykgeworICAgIH0KKworICAgIC8qKgorICAgICAqIFByZXZlbnQgdGFraW5nIGEgcmVmZXJlbmNlIHRvIGEgdGVtcG9yYXJ5LiBUaGlzIGlzIGJhZC4KKyAgICAgKi8KKyAgICBSZXNvdXJjZUtleVJlZihSZXNvdXJjZU5hbWUmJiBuLCBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgYykgPSBkZWxldGU7Cit9OworCitib29sIG9wZXJhdG9yPChjb25zdCBSZXNvdXJjZUtleVJlZiYgYSwgY29uc3QgUmVzb3VyY2VLZXlSZWYmIGIpOworCiAvLwogLy8gUmVzb3VyY2VJZCBpbXBsZW1lbnRhdGlvbi4KIC8vCmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlci5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlci5jcHAKaW5kZXggYzJkZGI1Yy4uNWU3ZDNlYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VQYXJzZXIuY3BwCisrKyBiL3Rvb2xzL2FhcHQyL1Jlc291cmNlUGFyc2VyLmNwcApAQCAtMTksOSArMTksMTIgQEAKICNpbmNsdWRlICJSZXNvdXJjZVV0aWxzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VWYWx1ZXMuaCIKICNpbmNsdWRlICJWYWx1ZVZpc2l0b3IuaCIKKyNpbmNsdWRlICJ1dGlsL0NvbXBhcmF0b3JzLmgiCisjaW5jbHVkZSAidXRpbC9JbW11dGFibGVNYXAuaCIKICNpbmNsdWRlICJ1dGlsL1V0aWwuaCIKICNpbmNsdWRlICJ4bWwvWG1sUHVsbFBhcnNlci5oIgogCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDxzc3RyZWFtPgogCiBuYW1lc3BhY2UgYWFwdCB7CkBAIC0zNSw2ICszOCwxMTEgQEAKICAgICByZXR1cm4gbnMuZW1wdHkoKSAmJiAobmFtZSA9PSB1InNraXAiIHx8IG5hbWUgPT0gdSJlYXQtY29tbWVudCIpOwogfQogCitzdGF0aWMgdWludDMyX3QgcGFyc2VGb3JtYXRUeXBlKGNvbnN0IFN0cmluZ1BpZWNlMTYmIHBpZWNlKSB7CisgICAgaWYgKHBpZWNlID09IHUicmVmZXJlbmNlIikgICAgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRTsKKyAgICBlbHNlIGlmIChwaWVjZSA9PSB1InN0cmluZyIpICAgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HOworICAgIGVsc2UgaWYgKHBpZWNlID09IHUiaW50ZWdlciIpICAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9JTlRFR0VSOworICAgIGVsc2UgaWYgKHBpZWNlID09IHUiYm9vbGVhbiIpICAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9CT09MRUFOOworICAgIGVsc2UgaWYgKHBpZWNlID09IHUiY29sb3IiKSAgICAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUjsKKyAgICBlbHNlIGlmIChwaWVjZSA9PSB1ImZsb2F0IikgICAgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRkxPQVQ7CisgICAgZWxzZSBpZiAocGllY2UgPT0gdSJkaW1lbnNpb24iKSByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0RJTUVOU0lPTjsKKyAgICBlbHNlIGlmIChwaWVjZSA9PSB1ImZyYWN0aW9uIikgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT047CisgICAgZWxzZSBpZiAocGllY2UgPT0gdSJlbnVtIikgICAgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0VOVU07CisgICAgZWxzZSBpZiAocGllY2UgPT0gdSJmbGFncyIpICAgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0ZMQUdTOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdWludDMyX3QgcGFyc2VGb3JtYXRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nUGllY2UxNiYgc3RyKSB7CisgICAgdWludDMyX3QgbWFzayA9IDA7CisgICAgZm9yIChTdHJpbmdQaWVjZTE2IHBhcnQgOiB1dGlsOjp0b2tlbml6ZShzdHIsIHUnfCcpKSB7CisgICAgICAgIFN0cmluZ1BpZWNlMTYgdHJpbW1lZFBhcnQgPSB1dGlsOjp0cmltV2hpdGVzcGFjZShwYXJ0KTsKKyAgICAgICAgdWludDMyX3QgdHlwZSA9IHBhcnNlRm9ybWF0VHlwZSh0cmltbWVkUGFydCk7CisgICAgICAgIGlmICh0eXBlID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG1hc2sgfD0gdHlwZTsKKyAgICB9CisgICAgcmV0dXJuIG1hc2s7Cit9CisKKy8qKgorICogQSBwYXJzZWQgcmVzb3VyY2UgcmVhZHkgdG8gYmUgYWRkZWQgdG8gdGhlIFJlc291cmNlVGFibGUuCisgKi8KK3N0cnVjdCBQYXJzZWRSZXNvdXJjZSB7CisgICAgUmVzb3VyY2VOYW1lIG5hbWU7CisgICAgU291cmNlIHNvdXJjZTsKKyAgICBSZXNvdXJjZUlkIGlkOworICAgIE1heWJlPFN5bWJvbFN0YXRlPiBzeW1ib2xTdGF0ZTsKKyAgICBzdGQ6OnUxNnN0cmluZyBjb21tZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4gdmFsdWU7CisgICAgc3RkOjpsaXN0PFBhcnNlZFJlc291cmNlPiBjaGlsZFJlc291cmNlczsKK307CisKK2Jvb2wgUmVzb3VyY2VQYXJzZXI6OnNob3VsZFN0cmlwUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VOYW1lUmVmJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYXliZTxzdGQ6OnUxNnN0cmluZz4mIHByb2R1Y3QpIGNvbnN0IHsKKyAgICBpZiAocHJvZHVjdCkgeworICAgICAgICBmb3IgKGNvbnN0IHN0ZDo6dTE2c3RyaW5nJiBwcm9kdWN0VG9NYXRjaCA6IG1PcHRpb25zLnByb2R1Y3RzKSB7CisgICAgICAgICAgICBpZiAocHJvZHVjdC52YWx1ZSgpID09IHByb2R1Y3RUb01hdGNoKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc3BlY2lmaWVkIGEgcHJvZHVjdCwgYW5kIGl0IGlzIGluIHRoZSBsaXN0LCBzbyBkb24ndCBzdHJpcC4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3RoaW5nIG1hdGNoZWQsIHRyeSAnZGVmYXVsdCcuIERlZmF1bHQgb25seSBtYXRjaGVzIGlmIHdlIGRpZG4ndCBhbHJlYWR5IHVzZSBhbm90aGVyCisgICAgLy8gcHJvZHVjdCB2YXJpYW50LgorICAgIGlmICghcHJvZHVjdCB8fCBwcm9kdWN0LnZhbHVlKCkgPT0gdSJkZWZhdWx0IikgeworICAgICAgICBpZiAoTWF5YmU8UmVzb3VyY2VUYWJsZTo6U2VhcmNoUmVzdWx0PiByZXN1bHQgPSBtVGFibGUtPmZpbmRSZXNvdXJjZShuYW1lKSkgeworICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VFbnRyeSogZW50cnkgPSByZXN1bHQudmFsdWUoKS5lbnRyeTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHN0ZDo6bG93ZXJfYm91bmQoZW50cnktPnZhbHVlcy5iZWdpbigpLCBlbnRyeS0+dmFsdWVzLmVuZCgpLCBtQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXA6Omxlc3NUaGFuQ29uZmlnKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IGVudHJ5LT52YWx1ZXMuZW5kKCkgJiYgaXRlci0+Y29uZmlnID09IG1Db25maWcgJiYgIWl0ZXItPnZhbHVlLT5pc1dlYWsoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSB2YWx1ZSBmb3IgdGhpcyBjb25maWcgYWxyZWFkeSwgYW5kIGl0IGlzIG5vdCB3ZWFrLAorICAgICAgICAgICAgICAgIC8vIHNvIGZpbHRlciBvdXQgdGhpcyBkZWZhdWx0LgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFJlY3Vyc2l2ZWx5IGFkZHMgcmVzb3VyY2VzIHRvIHRoZSBSZXNvdXJjZVRhYmxlLgorc3RhdGljIGJvb2wgYWRkUmVzb3VyY2VzVG9UYWJsZShSZXNvdXJjZVRhYmxlKiB0YWJsZSwgY29uc3QgQ29uZmlnRGVzY3JpcHRpb24mIGNvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURpYWdub3N0aWNzKiBkaWFnLCBQYXJzZWRSZXNvdXJjZSogcmVzKSB7CisgICAgaWYgKHJlcy0+c3ltYm9sU3RhdGUpIHsKKyAgICAgICAgU3ltYm9sIHN5bWJvbDsKKyAgICAgICAgc3ltYm9sLnN0YXRlID0gcmVzLT5zeW1ib2xTdGF0ZS52YWx1ZSgpOworICAgICAgICBzeW1ib2wuc291cmNlID0gcmVzLT5zb3VyY2U7CisgICAgICAgIHN5bWJvbC5jb21tZW50ID0gcmVzLT5jb21tZW50OworICAgICAgICBpZiAoIXRhYmxlLT5zZXRTeW1ib2xTdGF0ZShyZXMtPm5hbWUsIHJlcy0+aWQsIHN5bWJvbCwgZGlhZykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXMtPnZhbHVlKSB7CisgICAgICAgIC8vIEF0dGFjaCB0aGUgY29tbWVudCwgc291cmNlIGFuZCBjb25maWcgdG8gdGhlIHZhbHVlLgorICAgICAgICByZXMtPnZhbHVlLT5zZXRDb21tZW50KHN0ZDo6bW92ZShyZXMtPmNvbW1lbnQpKTsKKyAgICAgICAgcmVzLT52YWx1ZS0+c2V0U291cmNlKHN0ZDo6bW92ZShyZXMtPnNvdXJjZSkpOworCisgICAgICAgIGlmICghdGFibGUtPmFkZFJlc291cmNlKHJlcy0+bmFtZSwgcmVzLT5pZCwgY29uZmlnLCBzdGQ6Om1vdmUocmVzLT52YWx1ZSksIGRpYWcpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGVycm9yID0gZmFsc2U7CisgICAgZm9yIChQYXJzZWRSZXNvdXJjZSYgY2hpbGQgOiByZXMtPmNoaWxkUmVzb3VyY2VzKSB7CisgICAgICAgIGVycm9yIHw9ICFhZGRSZXNvdXJjZXNUb1RhYmxlKHRhYmxlLCBjb25maWcsIGRpYWcsICZjaGlsZCk7CisgICAgfQorICAgIHJldHVybiAhZXJyb3I7Cit9CisKKy8vIENvbnZlbmllbnQgYWxpYXNlcyBmb3IgbW9yZSByZWFkYWJsZSBmdW5jdGlvbiBjYWxscy4KK2VudW0geworICAgIGtBbGxvd1Jhd1N0cmluZyA9IHRydWUsCisgICAga05vUmF3U3RyaW5nID0gZmFsc2UKK307CisKIFJlc291cmNlUGFyc2VyOjpSZXNvdXJjZVBhcnNlcihJRGlhZ25vc3RpY3MqIGRpYWcsIFJlc291cmNlVGFibGUqIHRhYmxlLCBjb25zdCBTb3VyY2UmIHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUGFyc2VyT3B0aW9ucyYgb3B0aW9ucykgOgpAQCAtMTQ2LDY5ICsyNTQsNiBAQAogICAgIHJldHVybiAhZXJyb3I7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFN0cmlwUmVzb3VyY2UoY29uc3QgeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1heWJlPHN0ZDo6dTE2c3RyaW5nPiBwcm9kdWN0VG9NYXRjaCkgewotICAgIGFzc2VydChwYXJzZXItPmdldEV2ZW50KCkgPT0geG1sOjpYbWxQdWxsUGFyc2VyOjpFdmVudDo6a1N0YXJ0RWxlbWVudCk7Ci0KLSAgICBpZiAoTWF5YmU8U3RyaW5nUGllY2UxNj4gbWF5YmVQcm9kdWN0ID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1InByb2R1Y3QiKSkgewotICAgICAgICBpZiAoIXByb2R1Y3RUb01hdGNoKSB7Ci0gICAgICAgICAgICBpZiAobWF5YmVQcm9kdWN0LnZhbHVlKCkgIT0gdSJkZWZhdWx0IiAmJiBtYXliZVByb2R1Y3QudmFsdWUoKSAhPSB1InBob25lIikgewotICAgICAgICAgICAgICAgIC8vIFdlIGRpZG4ndCBzcGVjaWZ5IGEgcHJvZHVjdCBhbmQgdGhpcyBpcyBub3QgYSBkZWZhdWx0IHByb2R1Y3QsIHNvIHNraXAuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocHJvZHVjdFRvTWF0Y2ggJiYgbWF5YmVQcm9kdWN0LnZhbHVlKCkgIT0gcHJvZHVjdFRvTWF0Y2gudmFsdWUoKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNwZWNpZmllZCBhIHByb2R1Y3QsIGJ1dCB0aGV5IGRvbid0IG1hdGNoLgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBBIHBhcnNlZCByZXNvdXJjZSByZWFkeSB0byBiZSBhZGRlZCB0byB0aGUgUmVzb3VyY2VUYWJsZS4KLSAqLwotc3RydWN0IFBhcnNlZFJlc291cmNlIHsKLSAgICBSZXNvdXJjZU5hbWUgbmFtZTsKLSAgICBTb3VyY2Ugc291cmNlOwotICAgIFJlc291cmNlSWQgaWQ7Ci0gICAgU3ltYm9sU3RhdGUgc3ltYm9sU3RhdGUgPSBTeW1ib2xTdGF0ZTo6a1VuZGVmaW5lZDsKLSAgICBzdGQ6OnUxNnN0cmluZyBjb21tZW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgc3RkOjpsaXN0PFBhcnNlZFJlc291cmNlPiBjaGlsZFJlc291cmNlczsKLX07Ci0KLS8vIFJlY3Vyc2l2ZWx5IGFkZHMgcmVzb3VyY2VzIHRvIHRoZSBSZXNvdXJjZVRhYmxlLgotc3RhdGljIGJvb2wgYWRkUmVzb3VyY2VzVG9UYWJsZShSZXNvdXJjZVRhYmxlKiB0YWJsZSwgY29uc3QgQ29uZmlnRGVzY3JpcHRpb24mIGNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURpYWdub3N0aWNzKiBkaWFnLCBQYXJzZWRSZXNvdXJjZSogcmVzKSB7Ci0gICAgaWYgKHJlcy0+c3ltYm9sU3RhdGUgIT0gU3ltYm9sU3RhdGU6OmtVbmRlZmluZWQpIHsKLSAgICAgICAgU3ltYm9sIHN5bWJvbDsKLSAgICAgICAgc3ltYm9sLnN0YXRlID0gcmVzLT5zeW1ib2xTdGF0ZTsKLSAgICAgICAgc3ltYm9sLnNvdXJjZSA9IHJlcy0+c291cmNlOwotICAgICAgICBzeW1ib2wuY29tbWVudCA9IHJlcy0+Y29tbWVudDsKLSAgICAgICAgaWYgKCF0YWJsZS0+c2V0U3ltYm9sU3RhdGUocmVzLT5uYW1lLCByZXMtPmlkLCBzeW1ib2wsIGRpYWcpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocmVzLT52YWx1ZSkgewotICAgICAgICAvLyBBdHRhY2ggdGhlIGNvbW1lbnQsIHNvdXJjZSBhbmQgY29uZmlnIHRvIHRoZSB2YWx1ZS4KLSAgICAgICAgcmVzLT52YWx1ZS0+c2V0Q29tbWVudChzdGQ6Om1vdmUocmVzLT5jb21tZW50KSk7Ci0gICAgICAgIHJlcy0+dmFsdWUtPnNldFNvdXJjZShzdGQ6Om1vdmUocmVzLT5zb3VyY2UpKTsKLQotICAgICAgICBpZiAoIXRhYmxlLT5hZGRSZXNvdXJjZShyZXMtPm5hbWUsIHJlcy0+aWQsIGNvbmZpZywgc3RkOjptb3ZlKHJlcy0+dmFsdWUpLCBkaWFnKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBlcnJvciA9IGZhbHNlOwotICAgIGZvciAoUGFyc2VkUmVzb3VyY2UmIGNoaWxkIDogcmVzLT5jaGlsZFJlc291cmNlcykgewotICAgICAgICBlcnJvciB8PSAhYWRkUmVzb3VyY2VzVG9UYWJsZSh0YWJsZSwgY29uZmlnLCBkaWFnLCAmY2hpbGQpOwotICAgIH0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCiBib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZVJlc291cmNlcyh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlcikgewogICAgIHN0ZDo6c2V0PFJlc291cmNlTmFtZT4gc3RyaXBwZWRSZXNvdXJjZXM7CiAKQEAgLTI0NCwxMTYgKzI4OSwyOCBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZWxlbWVudE5hbWUgPT0gdSJpdGVtIikgewotICAgICAgICAgICAgLy8gSXRlbXMgc2ltcGx5IGhhdmUgdGhlaXIgdHlwZSBlbmNvZGVkIGluIHRoZSB0eXBlIGF0dHJpYnV0ZS4KLSAgICAgICAgICAgIGlmIChNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZVR5cGUgPSB4bWw6OmZpbmROb25FbXB0eUF0dHJpYnV0ZShwYXJzZXIsIHUidHlwZSIpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudE5hbWUgPSBtYXliZVR5cGUudmFsdWUoKS50b1N0cmluZygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2UobVNvdXJjZS53aXRoTGluZShwYXJzZXItPmdldExpbmVOdW1iZXIoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI8aXRlbT4gbXVzdCBoYXZlIGEgJ3R5cGUnIGF0dHJpYnV0ZSIpOwotICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIFBhcnNlZFJlc291cmNlIHBhcnNlZFJlc291cmNlOwogICAgICAgICBwYXJzZWRSZXNvdXJjZS5zb3VyY2UgPSBtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKTsKICAgICAgICAgcGFyc2VkUmVzb3VyY2UuY29tbWVudCA9IHN0ZDo6bW92ZShjb21tZW50KTsKIAotICAgICAgICBpZiAoTWF5YmU8U3RyaW5nUGllY2UxNj4gbWF5YmVOYW1lID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1Im5hbWUiKSkgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS5lbnRyeSA9IG1heWJlTmFtZS52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgICAgIC8vIEV4dHJhY3QgdGhlIHByb2R1Y3QgbmFtZSBpZiBpdCBleGlzdHMuCisgICAgICAgIE1heWJlPHN0ZDo6dTE2c3RyaW5nPiBwcm9kdWN0OworICAgICAgICBpZiAoTWF5YmU8U3RyaW5nUGllY2UxNj4gbWF5YmVQcm9kdWN0ID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1InByb2R1Y3QiKSkgeworICAgICAgICAgICAgcHJvZHVjdCA9IG1heWJlUHJvZHVjdC52YWx1ZSgpLnRvU3RyaW5nKCk7CisgICAgICAgIH0KIAotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnROYW1lICE9IHUicHVibGljLWdyb3VwIikgewotICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG1Tb3VyY2Uud2l0aExpbmUocGFyc2VyLT5nZXRMaW5lTnVtYmVyKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICI8IiA8PCBlbGVtZW50TmFtZSA8PCAiPiB0YWcgbXVzdCBoYXZlIGEgJ25hbWUnIGF0dHJpYnV0ZSIpOworICAgICAgICAvLyBQYXJzZSB0aGUgcmVzb3VyY2UgcmVnYXJkbGVzcyBvZiBwcm9kdWN0LgorICAgICAgICBpZiAoIXBhcnNlUmVzb3VyY2UocGFyc2VyLCAmcGFyc2VkUmVzb3VyY2UpKSB7CiAgICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIENoZWNrIGlmIHdlIHNob3VsZCBza2lwIHRoaXMgcHJvZHVjdC4KLSAgICAgICAgY29uc3QgYm9vbCBzdHJpcFJlc291cmNlID0gc2hvdWxkU3RyaXBSZXNvdXJjZShwYXJzZXIsIG1PcHRpb25zLnByb2R1Y3QpOwotCi0gICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgaWYgKGVsZW1lbnROYW1lID09IHUiaWQiKSB7Ci0gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtJZDsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLnZhbHVlID0gdXRpbDo6bWFrZV91bmlxdWU8SWQ+KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJzdHJpbmciKSB7Ci0gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtTdHJpbmc7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVN0cmluZyhwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJjb2xvciIpIHsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a0NvbG9yOwotICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvcihwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJkcmF3YWJsZSIpIHsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a0RyYXdhYmxlOwotICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VDb2xvcihwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJib29sIikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprQm9vbDsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUHJpbWl0aXZlKHBhcnNlciwgJnBhcnNlZFJlc291cmNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50TmFtZSA9PSB1ImludGVnZXIiKSB7Ci0gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtJbnRlZ2VyOwotICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VQcmltaXRpdmUocGFyc2VyLCAmcGFyc2VkUmVzb3VyY2UpOwotICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnROYW1lID09IHUiZGltZW4iKSB7Ci0gICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtEaW1lbjsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUHJpbWl0aXZlKHBhcnNlciwgJnBhcnNlZFJlc291cmNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50TmFtZSA9PSB1ImZyYWN0aW9uIikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprRnJhY3Rpb247Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVByaW1pdGl2ZShwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJzdHlsZSIpIHsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a1N0eWxlOwotICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VTdHlsZShwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJwbHVyYWxzIikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprUGx1cmFsczsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlUGx1cmFsKHBhcnNlciwgJnBhcnNlZFJlc291cmNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50TmFtZSA9PSB1ImFycmF5IikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprQXJyYXk7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZUFycmF5KHBhcnNlciwgJnBhcnNlZFJlc291cmNlLCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfQU5ZKTsKLSAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50TmFtZSA9PSB1InN0cmluZy1hcnJheSIpIHsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a0FycmF5OwotICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VBcnJheShwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX1NUUklORyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJpbnRlZ2VyLWFycmF5IikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprQXJyYXk7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZUFycmF5KHBhcnNlciwgJnBhcnNlZFJlc291cmNlLCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfSU5URUdFUik7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJkZWNsYXJlLXN0eWxlYWJsZSIpIHsKLSAgICAgICAgICAgIHBhcnNlZFJlc291cmNlLm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a1N0eWxlYWJsZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlRGVjbGFyZVN0eWxlYWJsZShwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJhdHRyIikgewotICAgICAgICAgICAgcGFyc2VkUmVzb3VyY2UubmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprQXR0cjsKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhcnNlQXR0cihwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJwdWJsaWMiKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVB1YmxpYyhwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJqYXZhLXN5bWJvbCIgfHwgZWxlbWVudE5hbWUgPT0gdSJzeW1ib2wiKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVN5bWJvbChwYXJzZXIsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudE5hbWUgPT0gdSJwdWJsaWMtZ3JvdXAiKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBwYXJzZVB1YmxpY0dyb3VwKHBhcnNlciwgJnBhcnNlZFJlc291cmNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRyeSBwYXJzaW5nIHRoZSBlbGVtZW50TmFtZSAob3IgdHlwZSkgYXMgYSByZXNvdXJjZS4gVGhlc2Ugc2hhbGwgb25seSBiZQotICAgICAgICAgICAgLy8gcmVzb3VyY2VzIGxpa2UgJ2xheW91dCcgb3IgJ3htbCcgYW5kIHRoZXkgY2FuIG9ubHkgYmUgcmVmZXJlbmNlcy4KLSAgICAgICAgICAgIGlmIChjb25zdCBSZXNvdXJjZVR5cGUqIHR5cGUgPSBwYXJzZVJlc291cmNlVHlwZShlbGVtZW50TmFtZSkpIHsKLSAgICAgICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS5uYW1lLnR5cGUgPSAqdHlwZTsKLSAgICAgICAgICAgICAgICBwYXJzZWRSZXNvdXJjZS52YWx1ZSA9IHBhcnNlWG1sKHBhcnNlciwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX1JFRkVSRU5DRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFJlc291cmNlLnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShwYXJzZWRSZXNvdXJjZS5zb3VyY2UpIDw8ICJpbnZhbGlkIHZhbHVlIGZvciB0eXBlICciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAqdHlwZSA8PCAiJy4gRXhwZWN0ZWQgYSByZWZlcmVuY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtRGlhZy0+d2FybihEaWFnTWVzc2FnZShtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAidW5rbm93biByZXNvdXJjZSB0eXBlICciIDw8IGVsZW1lbnROYW1lIDw8ICInIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgICAgICAvLyBXZSBzdWNjZXNzZnVsbHkgcGFyc2VkIHRoZSByZXNvdXJjZS4KLQotICAgICAgICAgICAgaWYgKHN0cmlwUmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdGhhdCB3ZSBzdHJpcHBlZCBvdXQgdGhpcyByZXNvdXJjZSBuYW1lLgotICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgdmFyaWFudCBvZiB0aGlzIHJlc291cmNlIHdhcyBpbmNsdWRlZC4KLSAgICAgICAgICAgICAgICBzdHJpcHBlZFJlc291cmNlcy5pbnNlcnQocGFyc2VkUmVzb3VyY2UubmFtZSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGVycm9yIHw9ICFhZGRSZXNvdXJjZXNUb1RhYmxlKG1UYWJsZSwgbUNvbmZpZywgbURpYWcsICZwYXJzZWRSZXNvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIHJlc291cmNlLiBDaGVjayBpZiB3ZSBzaG91bGQgaW5jbHVkZSBpdCBvciBzdHJpcCBpdC4KKyAgICAgICAgaWYgKHNob3VsZFN0cmlwUmVzb3VyY2UocGFyc2VkUmVzb3VyY2UubmFtZSwgcHJvZHVjdCkpIHsKKyAgICAgICAgICAgIC8vIFJlY29yZCB0aGF0IHdlIHN0cmlwcGVkIG91dCB0aGlzIHJlc291cmNlIG5hbWUuCisgICAgICAgICAgICAvLyBXZSB3aWxsIGNoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIHZhcmlhbnQgb2YgdGhpcyByZXNvdXJjZSB3YXMgaW5jbHVkZWQuCisgICAgICAgICAgICBzdHJpcHBlZFJlc291cmNlcy5pbnNlcnQocGFyc2VkUmVzb3VyY2UubmFtZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWFkZFJlc291cmNlc1RvVGFibGUobVRhYmxlLCBtQ29uZmlnLCBtRGlhZywgJnBhcnNlZFJlc291cmNlKSkgewogICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtMzcxLDEwICszMjgsMTczIEBACiAgICAgcmV0dXJuICFlcnJvcjsKIH0KIAotZW51bSB7Ci0gICAga0FsbG93UmF3U3RyaW5nID0gdHJ1ZSwKLSAgICBrTm9SYXdTdHJpbmcgPSBmYWxzZQotfTsKKworYm9vbCBSZXNvdXJjZVBhcnNlcjo6cGFyc2VSZXNvdXJjZSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgc3RydWN0IEl0ZW1UeXBlRm9ybWF0IHsKKyAgICAgICAgUmVzb3VyY2VUeXBlIHR5cGU7CisgICAgICAgIHVpbnQzMl90IGZvcm1hdDsKKyAgICB9OworCisgICAgdXNpbmcgQmFnUGFyc2VGdW5jID0gc3RkOjpmdW5jdGlvbjxib29sKFJlc291cmNlUGFyc2VyKiwgeG1sOjpYbWxQdWxsUGFyc2VyKiwgUGFyc2VkUmVzb3VyY2UqKT47CisKKyAgICBzdGF0aWMgY29uc3QgYXV0byBlbFRvSXRlbU1hcCA9IEltbXV0YWJsZU1hcDxzdGQ6OnUxNnN0cmluZywgSXRlbVR5cGVGb3JtYXQ+OjpjcmVhdGVQcmVTb3J0ZWQoeworICAgICAgICAgICAgeyB1ImJvb2wiLCAgICAgIHsgUmVzb3VyY2VUeXBlOjprQm9vbCwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0JPT0xFQU4gfSB9LAorICAgICAgICAgICAgeyB1ImNvbG9yIiwgICAgIHsgUmVzb3VyY2VUeXBlOjprQ29sb3IsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUiB9IH0sCisgICAgICAgICAgICB7IHUiZGltZW4iLCAgICAgeyBSZXNvdXJjZVR5cGU6OmtEaW1lbiwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9ESU1FTlNJT04gfSB9LAorICAgICAgICAgICAgeyB1ImRyYXdhYmxlIiwgIHsgUmVzb3VyY2VUeXBlOjprRHJhd2FibGUsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUiB9IH0sCisgICAgICAgICAgICB7IHUiZnJhY3Rpb24iLCAgeyBSZXNvdXJjZVR5cGU6OmtGcmFjdGlvbiwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0ZMT0FUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT04KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9ESU1FTlNJT04gfSB9LAorICAgICAgICAgICAgeyB1ImludGVnZXIiLCAgIHsgUmVzb3VyY2VUeXBlOjprSW50ZWdlciwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVIgfSB9LAorICAgICAgICAgICAgeyB1InN0cmluZyIsICAgIHsgUmVzb3VyY2VUeXBlOjprU3RyaW5nLCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfU1RSSU5HIH0gfSwKKyAgICB9KTsKKworICAgIHN0YXRpYyBjb25zdCBhdXRvIGVsVG9CYWdNYXAgPSBJbW11dGFibGVNYXA8c3RkOjp1MTZzdHJpbmcsIEJhZ1BhcnNlRnVuYz46OmNyZWF0ZVByZVNvcnRlZCh7CisgICAgICAgICAgICB7IHUiYWRkLXJlc291cmNlIiwgICAgICBzdGQ6Om1lbV9mbigmUmVzb3VyY2VQYXJzZXI6OnBhcnNlQWRkUmVzb3VyY2UpIH0sCisgICAgICAgICAgICB7IHUiYXJyYXkiLCAgICAgICAgICAgICBzdGQ6Om1lbV9mbigmUmVzb3VyY2VQYXJzZXI6OnBhcnNlQXJyYXkpIH0sCisgICAgICAgICAgICB7IHUiYXR0ciIsICAgICAgICAgICAgICBzdGQ6Om1lbV9mbigmUmVzb3VyY2VQYXJzZXI6OnBhcnNlQXR0cikgfSwKKyAgICAgICAgICAgIHsgdSJkZWNsYXJlLXN0eWxlYWJsZSIsIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VEZWNsYXJlU3R5bGVhYmxlKSB9LAorICAgICAgICAgICAgeyB1ImludGVnZXItYXJyYXkiLCAgICAgc3RkOjptZW1fZm4oJlJlc291cmNlUGFyc2VyOjpwYXJzZUludGVnZXJBcnJheSkgfSwKKyAgICAgICAgICAgIHsgdSJqYXZhLXN5bWJvbCIsICAgICAgIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VTeW1ib2wpIH0sCisgICAgICAgICAgICB7IHUicGx1cmFscyIsICAgICAgICAgICBzdGQ6Om1lbV9mbigmUmVzb3VyY2VQYXJzZXI6OnBhcnNlUGx1cmFsKSB9LAorICAgICAgICAgICAgeyB1InB1YmxpYyIsICAgICAgICAgICAgc3RkOjptZW1fZm4oJlJlc291cmNlUGFyc2VyOjpwYXJzZVB1YmxpYykgfSwKKyAgICAgICAgICAgIHsgdSJwdWJsaWMtZ3JvdXAiLCAgICAgIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VQdWJsaWNHcm91cCkgfSwKKyAgICAgICAgICAgIHsgdSJzdHJpbmctYXJyYXkiLCAgICAgIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VTdHJpbmdBcnJheSkgfSwKKyAgICAgICAgICAgIHsgdSJzdHlsZSIsICAgICAgICAgICAgIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VTdHlsZSkgfSwKKyAgICAgICAgICAgIHsgdSJzeW1ib2wiLCAgICAgICAgICAgIHN0ZDo6bWVtX2ZuKCZSZXNvdXJjZVBhcnNlcjo6cGFyc2VTeW1ib2wpIH0sCisgICAgfSk7CisKKyAgICBzdGQ6OnUxNnN0cmluZyByZXNvdXJjZVR5cGUgPSBwYXJzZXItPmdldEVsZW1lbnROYW1lKCk7CisKKyAgICAvLyBUaGUgdmFsdWUgZm9ybWF0IGFjY2VwdGVkIGZvciB0aGlzIHJlc291cmNlLgorICAgIHVpbnQzMl90IHJlc291cmNlRm9ybWF0ID0gMHU7CisKKyAgICBpZiAocmVzb3VyY2VUeXBlID09IHUiaXRlbSIpIHsKKyAgICAgICAgLy8gSXRlbXMgaGF2ZSB0aGVpciB0eXBlIGVuY29kZWQgaW4gdGhlIHR5cGUgYXR0cmlidXRlLgorICAgICAgICBpZiAoTWF5YmU8U3RyaW5nUGllY2UxNj4gbWF5YmVUeXBlID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1InR5cGUiKSkgeworICAgICAgICAgICAgcmVzb3VyY2VUeXBlID0gbWF5YmVUeXBlLnZhbHVlKCkudG9TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiPGl0ZW0+IG11c3QgaGF2ZSBhICd0eXBlJyBhdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZUZvcm1hdCA9IHhtbDo6ZmluZE5vbkVtcHR5QXR0cmlidXRlKHBhcnNlciwgdSJmb3JtYXQiKSkgeworICAgICAgICAgICAgLy8gQW4gZXhwbGljaXQgZm9ybWF0IGZvciB0aGlzIHJlc291cmNlIHdhcyBzcGVjaWZpZWQuIFRoZSByZXNvdXJjZSB3aWxsIHJldGFpbgorICAgICAgICAgICAgLy8gaXRzIHR5cGUgaW4gaXRzIG5hbWUsIGJ1dCB0aGUgYWNjZXB0ZWQgdmFsdWUgZm9yIHRoaXMgdHlwZSBpcyBvdmVycmlkZGVuLgorICAgICAgICAgICAgcmVzb3VyY2VGb3JtYXQgPSBwYXJzZUZvcm1hdFR5cGUobWF5YmVGb3JtYXQudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAoIXJlc291cmNlRm9ybWF0KSB7CisgICAgICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICInIiA8PCBtYXliZUZvcm1hdC52YWx1ZSgpIDw8ICInIGlzIGFuIGludmFsaWQgZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoZSByZXNvdXJjZS4gVGhpcyB3aWxsIGJlIGNoZWNrZWQgbGF0ZXIsIGJlY2F1c2Ugbm90IGFsbAorICAgIC8vIFhNTCBlbGVtZW50cyByZXF1aXJlIGEgbmFtZS4KKyAgICBNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZU5hbWUgPSB4bWw6OmZpbmROb25FbXB0eUF0dHJpYnV0ZShwYXJzZXIsIHUibmFtZSIpOworCisgICAgaWYgKHJlc291cmNlVHlwZSA9PSB1ImlkIikgeworICAgICAgICBpZiAoIW1heWJlTmFtZSkgeworICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIjwiIDw8IHBhcnNlci0+Z2V0RWxlbWVudE5hbWUoKSA8PCAiPiBtaXNzaW5nICduYW1lJyBhdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG91dFJlc291cmNlLT5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtJZDsKKyAgICAgICAgb3V0UmVzb3VyY2UtPm5hbWUuZW50cnkgPSBtYXliZU5hbWUudmFsdWUoKS50b1N0cmluZygpOworICAgICAgICBvdXRSZXNvdXJjZS0+dmFsdWUgPSB1dGlsOjptYWtlX3VuaXF1ZTxJZD4oKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgYXV0byBpdGVtSXRlciA9IGVsVG9JdGVtTWFwLmZpbmQocmVzb3VyY2VUeXBlKTsKKyAgICBpZiAoaXRlbUl0ZXIgIT0gZWxUb0l0ZW1NYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gVGhpcyBpcyBhbiBpdGVtLCByZWNvcmQgaXRzIHR5cGUgYW5kIGZvcm1hdCBhbmQgc3RhcnQgcGFyc2luZy4KKworICAgICAgICBpZiAoIW1heWJlTmFtZSkgeworICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIjwiIDw8IHBhcnNlci0+Z2V0RWxlbWVudE5hbWUoKSA8PCAiPiBtaXNzaW5nICduYW1lJyBhdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG91dFJlc291cmNlLT5uYW1lLnR5cGUgPSBpdGVtSXRlci0+c2Vjb25kLnR5cGU7CisgICAgICAgIG91dFJlc291cmNlLT5uYW1lLmVudHJ5ID0gbWF5YmVOYW1lLnZhbHVlKCkudG9TdHJpbmcoKTsKKworICAgICAgICAvLyBPbmx5IHVzZSB0aGUgaW1wbGljaXQgZm9ybWF0IGZvciB0aGlzIHR5cGUgaWYgaXQgd2Fzbid0IG92ZXJyaWRkZW4uCisgICAgICAgIGlmICghcmVzb3VyY2VGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc291cmNlRm9ybWF0ID0gaXRlbUl0ZXItPnNlY29uZC5mb3JtYXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXBhcnNlSXRlbShwYXJzZXIsIG91dFJlc291cmNlLCByZXNvdXJjZUZvcm1hdCkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgYmFnIG9yIHNvbWV0aGluZy4KKyAgICBjb25zdCBhdXRvIGJhZ0l0ZXIgPSBlbFRvQmFnTWFwLmZpbmQocmVzb3VyY2VUeXBlKTsKKyAgICBpZiAoYmFnSXRlciAhPSBlbFRvQmFnTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgbmFtZSAodW5sZXNzIHRoaXMgaXMgYSA8cHVibGljLWdyb3VwPikuCisgICAgICAgIGlmIChyZXNvdXJjZVR5cGUgIT0gdSJwdWJsaWMtZ3JvdXAiKSB7CisgICAgICAgICAgICBpZiAoIW1heWJlTmFtZSkgeworICAgICAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiPCIgPDwgcGFyc2VyLT5nZXRFbGVtZW50TmFtZSgpIDw8ICI+IG1pc3NpbmcgJ25hbWUnIGF0dHJpYnV0ZSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0UmVzb3VyY2UtPm5hbWUuZW50cnkgPSBtYXliZU5hbWUudmFsdWUoKS50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCB0aGUgYXNzb2NpYXRlZCBwYXJzZSBtZXRob2QuIFRoZSB0eXBlIHdpbGwgYmUgZmlsbGVkIGluIGJ5IHRoZQorICAgICAgICAvLyBwYXJzZSBmdW5jLgorICAgICAgICBpZiAoIWJhZ0l0ZXItPnNlY29uZCh0aGlzLCBwYXJzZXIsIG91dFJlc291cmNlKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFRyeSBwYXJzaW5nIHRoZSBlbGVtZW50TmFtZSAob3IgdHlwZSkgYXMgYSByZXNvdXJjZS4gVGhlc2Ugc2hhbGwgb25seSBiZQorICAgIC8vIHJlc291cmNlcyBsaWtlICdsYXlvdXQnIG9yICd4bWwnIGFuZCB0aGV5IGNhbiBvbmx5IGJlIHJlZmVyZW5jZXMuCisgICAgY29uc3QgUmVzb3VyY2VUeXBlKiBwYXJzZWRUeXBlID0gcGFyc2VSZXNvdXJjZVR5cGUocmVzb3VyY2VUeXBlKTsKKyAgICBpZiAocGFyc2VkVHlwZSkgeworICAgICAgICBpZiAoIW1heWJlTmFtZSkgeworICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIjwiIDw8IHBhcnNlci0+Z2V0RWxlbWVudE5hbWUoKSA8PCAiPiBtaXNzaW5nICduYW1lJyBhdHRyaWJ1dGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG91dFJlc291cmNlLT5uYW1lLnR5cGUgPSAqcGFyc2VkVHlwZTsKKyAgICAgICAgb3V0UmVzb3VyY2UtPm5hbWUuZW50cnkgPSBtYXliZU5hbWUudmFsdWUoKS50b1N0cmluZygpOworICAgICAgICBvdXRSZXNvdXJjZS0+dmFsdWUgPSBwYXJzZVhtbChwYXJzZXIsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9SRUZFUkVOQ0UsIGtOb1Jhd1N0cmluZyk7CisgICAgICAgIGlmICghb3V0UmVzb3VyY2UtPnZhbHVlKSB7CisgICAgICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uob3V0UmVzb3VyY2UtPnNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiaW52YWxpZCB2YWx1ZSBmb3IgdHlwZSAnIiA8PCAqcGFyc2VkVHlwZSA8PCAiJy4gRXhwZWN0ZWQgYSByZWZlcmVuY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBtRGlhZy0+d2FybihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgIDw8ICJ1bmtub3duIHJlc291cmNlIHR5cGUgJyIgPDwgcGFyc2VyLT5nZXRFbGVtZW50TmFtZSgpIDw8ICInIik7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUl0ZW0oeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBmb3JtYXQpIHsKKyAgICBpZiAoZm9ybWF0ID09IGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkcpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nKHBhcnNlciwgb3V0UmVzb3VyY2UpOworICAgIH0KKworICAgIG91dFJlc291cmNlLT52YWx1ZSA9IHBhcnNlWG1sKHBhcnNlciwgZm9ybWF0LCBrTm9SYXdTdHJpbmcpOworICAgIGlmICghb3V0UmVzb3VyY2UtPnZhbHVlKSB7CisgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKSA8PCAiaW52YWxpZCAiIDw8IG91dFJlc291cmNlLT5uYW1lLnR5cGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQogCiAvKioKICAqIFJlYWRzIHRoZSBlbnRpcmUgWE1MIHN1YnRyZWUgYW5kIGF0dGVtcHRzIHRvIHBhcnNlIGl0IGFzIHNvbWUgSXRlbSwKQEAgLTQyOSwxNyArNTQ5LDE1IEBACiAgICAgICAgIHJldHVybiB1dGlsOjptYWtlX3VuaXF1ZTxSYXdTdHJpbmc+KAogICAgICAgICAgICAgICAgIG1UYWJsZS0+c3RyaW5nUG9vbC5tYWtlUmVmKHJhd1ZhbHVlLCBTdHJpbmdQb29sOjpDb250ZXh0eyAxLCBtQ29uZmlnIH0pKTsKICAgICB9Ci0KICAgICByZXR1cm4ge307CiB9CiAKIGJvb2wgUmVzb3VyY2VQYXJzZXI6OnBhcnNlU3RyaW5nKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpIHsKLSAgICBjb25zdCBTb3VyY2Ugc291cmNlID0gbVNvdXJjZS53aXRoTGluZShwYXJzZXItPmdldExpbmVOdW1iZXIoKSk7Ci0KICAgICBib29sIGZvcm1hdHRlZCA9IHRydWU7CiAgICAgaWYgKE1heWJlPFN0cmluZ1BpZWNlMTY+IGZvcm1hdHRlZEF0dHIgPSB4bWw6OmZpbmRBdHRyaWJ1dGUocGFyc2VyLCB1ImZvcm1hdHRlZCIpKSB7CiAgICAgICAgIGlmICghUmVzb3VyY2VVdGlsczo6dHJ5UGFyc2VCb29sKGZvcm1hdHRlZEF0dHIudmFsdWUoKSwgJmZvcm1hdHRlZCkpIHsKLSAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICJpbnZhbGlkIHZhbHVlIGZvciAnZm9ybWF0dGVkJy4gTXVzdCBiZSBhIGJvb2xlYW4iKTsKKyAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJpbnZhbGlkIHZhbHVlIGZvciAnZm9ybWF0dGVkJy4gTXVzdCBiZSBhIGJvb2xlYW4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ0Nyw3ICs1NjUsNyBAQAogICAgIGJvb2wgdHJhbnNsYXRlYWJsZSA9IG1PcHRpb25zLnRyYW5zbGF0YWJsZTsKICAgICBpZiAoTWF5YmU8U3RyaW5nUGllY2UxNj4gdHJhbnNsYXRlYWJsZUF0dHIgPSB4bWw6OmZpbmRBdHRyaWJ1dGUocGFyc2VyLCB1InRyYW5zbGF0YWJsZSIpKSB7CiAgICAgICAgIGlmICghUmVzb3VyY2VVdGlsczo6dHJ5UGFyc2VCb29sKHRyYW5zbGF0ZWFibGVBdHRyLnZhbHVlKCksICZ0cmFuc2xhdGVhYmxlKSkgewotICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkKKyAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJpbnZhbGlkIHZhbHVlIGZvciAndHJhbnNsYXRhYmxlJy4gTXVzdCBiZSBhIGJvb2xlYW4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNDU1LDgxICs1NzMsNDQgQEAKIAogICAgIG91dFJlc291cmNlLT52YWx1ZSA9IHBhcnNlWG1sKHBhcnNlciwgYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX1NUUklORywga05vUmF3U3RyaW5nKTsKICAgICBpZiAoIW91dFJlc291cmNlLT52YWx1ZSkgewotICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uoc291cmNlKSA8PCAibm90IGEgdmFsaWQgc3RyaW5nIik7CisgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKSA8PCAibm90IGEgdmFsaWQgc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0dGVkICYmIHRyYW5zbGF0ZWFibGUpIHsKLSAgICAgICAgaWYgKFN0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZUNhc3Q8U3RyaW5nPihvdXRSZXNvdXJjZS0+dmFsdWUuZ2V0KCkpKSB7CisgICAgaWYgKFN0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZUNhc3Q8U3RyaW5nPihvdXRSZXNvdXJjZS0+dmFsdWUuZ2V0KCkpKSB7CisgICAgICAgIHN0cmluZ1ZhbHVlLT5zZXRUcmFuc2xhdGVhYmxlKHRyYW5zbGF0ZWFibGUpOworCisgICAgICAgIGlmIChmb3JtYXR0ZWQgJiYgdHJhbnNsYXRlYWJsZSkgewogICAgICAgICAgICAgaWYgKCF1dGlsOjp2ZXJpZnlKYXZhU3RyaW5nRm9ybWF0KCpzdHJpbmdWYWx1ZS0+dmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIm11bHRpcGxlIHN1YnN0aXR1dGlvbnMgc3BlY2lmaWVkIGluIG5vbi1wb3NpdGlvbmFsIGZvcm1hdDsgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIHlvdSBtZWFuIHRvIGFkZCB0aGUgZm9ybWF0dGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGU/Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIERpYWdNZXNzYWdlIG1zZyhvdXRSZXNvdXJjZS0+c291cmNlKTsKKyAgICAgICAgICAgICAgICBtc2cgPDwgIm11bHRpcGxlIHN1YnN0aXR1dGlvbnMgc3BlY2lmaWVkIGluIG5vbi1wb3NpdGlvbmFsIGZvcm1hdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAiZGlkIHlvdSBtZWFuIHRvIGFkZCB0aGUgZm9ybWF0dGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGU/IjsKKyAgICAgICAgICAgICAgICBpZiAobU9wdGlvbnMuZXJyb3JPblBvc2l0aW9uYWxBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbURpYWctPmVycm9yKG1zZyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtRGlhZy0+d2Fybihtc2cpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUNvbG9yKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpIHsKLSAgICBjb25zdCBTb3VyY2Ugc291cmNlID0gbVNvdXJjZS53aXRoTGluZShwYXJzZXItPmdldExpbmVOdW1iZXIoKSk7Ci0KLSAgICBvdXRSZXNvdXJjZS0+dmFsdWUgPSBwYXJzZVhtbChwYXJzZXIsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9DT0xPUiwga05vUmF3U3RyaW5nKTsKLSAgICBpZiAoIW91dFJlc291cmNlLT52YWx1ZSkgewotICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uoc291cmNlKSA8PCAiaW52YWxpZCBjb2xvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZVByaW1pdGl2ZSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7Ci0gICAgY29uc3QgU291cmNlIHNvdXJjZSA9IG1Tb3VyY2Uud2l0aExpbmUocGFyc2VyLT5nZXRMaW5lTnVtYmVyKCkpOwotCi0gICAgdWludDMyX3QgdHlwZU1hc2sgPSAwOwotICAgIHN3aXRjaCAob3V0UmVzb3VyY2UtPm5hbWUudHlwZSkgewotICAgIGNhc2UgUmVzb3VyY2VUeXBlOjprSW50ZWdlcjoKLSAgICAgICAgdHlwZU1hc2sgfD0gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSZXNvdXJjZVR5cGU6OmtGcmFjdGlvbjoKLSAgICAgICAgLy8gZmFsbHRocm91Z2gKLSAgICBjYXNlIFJlc291cmNlVHlwZTo6a0RpbWVuOgotICAgICAgICB0eXBlTWFzayB8PSBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRElNRU5TSU9OCi0gICAgICAgICAgICAgICAgICB8IGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9GTE9BVAotICAgICAgICAgICAgICAgICAgfCBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRlJBQ1RJT047Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSZXNvdXJjZVR5cGU6OmtCb29sOgotICAgICAgICB0eXBlTWFzayB8PSBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfQk9PTEVBTjsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBvdXRSZXNvdXJjZS0+dmFsdWUgPSBwYXJzZVhtbChwYXJzZXIsIHR5cGVNYXNrLCBrTm9SYXdTdHJpbmcpOwotICAgIGlmICghb3V0UmVzb3VyY2UtPnZhbHVlKSB7Ci0gICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICJpbnZhbGlkICIgPDwgb3V0UmVzb3VyY2UtPm5hbWUudHlwZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKFN0eWxlZFN0cmluZyogc3RyaW5nVmFsdWUgPSB2YWx1ZUNhc3Q8U3R5bGVkU3RyaW5nPihvdXRSZXNvdXJjZS0+dmFsdWUuZ2V0KCkpKSB7CisgICAgICAgIHN0cmluZ1ZhbHVlLT5zZXRUcmFuc2xhdGVhYmxlKHRyYW5zbGF0ZWFibGUpOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZXNvdXJjZVBhcnNlcjo6cGFyc2VQdWJsaWMoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSkgewotICAgIGNvbnN0IFNvdXJjZSBzb3VyY2UgPSBtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKTsKLQogICAgIE1heWJlPFN0cmluZ1BpZWNlMTY+IG1heWJlVHlwZSA9IHhtbDo6ZmluZE5vbkVtcHR5QXR0cmlidXRlKHBhcnNlciwgdSJ0eXBlIik7CiAgICAgaWYgKCFtYXliZVR5cGUpIHsKLSAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkgPDwgIjxwdWJsaWM+IG11c3QgaGF2ZSBhICd0eXBlJyBhdHRyaWJ1dGUiKTsKKyAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpIDw8ICI8cHVibGljPiBtdXN0IGhhdmUgYSAndHlwZScgYXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBjb25zdCBSZXNvdXJjZVR5cGUqIHBhcnNlZFR5cGUgPSBwYXJzZVJlc291cmNlVHlwZShtYXliZVR5cGUudmFsdWUoKSk7CiAgICAgaWYgKCFwYXJzZWRUeXBlKSB7Ci0gICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICJpbnZhbGlkIHJlc291cmNlIHR5cGUgJyIgPDwgbWF5YmVUeXBlLnZhbHVlKCkKLSAgICAgICAgICAgICAgICAgICAgIDw8ICInIGluIDxwdWJsaWM+Iik7CisgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgPDwgImludmFsaWQgcmVzb3VyY2UgdHlwZSAnIiA8PCBtYXliZVR5cGUudmFsdWUoKSA8PCAiJyBpbiA8cHVibGljPiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01NDEsOCArNjIyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJZC52YWx1ZSgpLnNpemUoKSwgJnZhbCk7CiAgICAgICAgIFJlc291cmNlSWQgcmVzb3VyY2VJZCh2YWwuZGF0YSk7CiAgICAgICAgIGlmICghcmVzdWx0IHx8ICFyZXNvdXJjZUlkLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkgPDwgImludmFsaWQgcmVzb3VyY2UgSUQgJyIgPDwgbWF5YmVJZC52YWx1ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgaW4gPHB1YmxpYz4iKTsKKyAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJpbnZhbGlkIHJlc291cmNlIElEICciIDw8IG1heWJlSWQudmFsdWUoKSA8PCAiJyBpbiA8cHVibGljPiIpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIG91dFJlc291cmNlLT5pZCA9IHJlc291cmNlSWQ7CkBAIC01NTgsMjQgKzYzOSwyNCBAQAogfQogCiBib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZVB1YmxpY0dyb3VwKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpIHsKLSAgICBjb25zdCBTb3VyY2Ugc291cmNlID0gbVNvdXJjZS53aXRoTGluZShwYXJzZXItPmdldExpbmVOdW1iZXIoKSk7Ci0KICAgICBNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZVR5cGUgPSB4bWw6OmZpbmROb25FbXB0eUF0dHJpYnV0ZShwYXJzZXIsIHUidHlwZSIpOwogICAgIGlmICghbWF5YmVUeXBlKSB7Ci0gICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICI8cHVibGljLWdyb3VwPiBtdXN0IGhhdmUgYSAndHlwZScgYXR0cmlidXRlIik7CisgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgPDwgIjxwdWJsaWMtZ3JvdXA+IG11c3QgaGF2ZSBhICd0eXBlJyBhdHRyaWJ1dGUiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGNvbnN0IFJlc291cmNlVHlwZSogcGFyc2VkVHlwZSA9IHBhcnNlUmVzb3VyY2VUeXBlKG1heWJlVHlwZS52YWx1ZSgpKTsKICAgICBpZiAoIXBhcnNlZFR5cGUpIHsKLSAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkgPDwgImludmFsaWQgcmVzb3VyY2UgdHlwZSAnIiA8PCBtYXliZVR5cGUudmFsdWUoKQotICAgICAgICAgICAgICAgICAgICAgPDwgIicgaW4gPHB1YmxpYy1ncm91cD4iKTsKKyAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICA8PCAiaW52YWxpZCByZXNvdXJjZSB0eXBlICciIDw8IG1heWJlVHlwZS52YWx1ZSgpIDw8ICInIGluIDxwdWJsaWMtZ3JvdXA+Iik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZUlkID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1ImZpcnN0LWlkIik7CiAgICAgaWYgKCFtYXliZUlkKSB7Ci0gICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICI8cHVibGljLWdyb3VwPiBtdXN0IGhhdmUgYSAnZmlyc3QtaWQnIGF0dHJpYnV0ZSIpOworICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uob3V0UmVzb3VyY2UtPnNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgIDw8ICI8cHVibGljLWdyb3VwPiBtdXN0IGhhdmUgYSAnZmlyc3QtaWQnIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01ODQsOCArNjY1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZUlkLnZhbHVlKCkuc2l6ZSgpLCAmdmFsKTsKICAgICBSZXNvdXJjZUlkIG5leHRJZCh2YWwuZGF0YSk7CiAgICAgaWYgKCFyZXN1bHQgfHwgIW5leHRJZC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKHNvdXJjZSkgPDwgImludmFsaWQgcmVzb3VyY2UgSUQgJyIgPDwgbWF5YmVJZC52YWx1ZSgpCi0gICAgICAgICAgICAgICAgICAgICA8PCAiJyBpbiA8cHVibGljLWdyb3VwPiIpOworICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uob3V0UmVzb3VyY2UtPnNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgIDw8ICJpbnZhbGlkIHJlc291cmNlIElEICciIDw8IG1heWJlSWQudmFsdWUoKSA8PCAiJyBpbiA8cHVibGljLWdyb3VwPiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC02NDMsNjIgKzcyNCw1MSBAQAogICAgIHJldHVybiAhZXJyb3I7CiB9CiAKLWJvb2wgUmVzb3VyY2VQYXJzZXI6OnBhcnNlU3ltYm9sKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpIHsKLSAgICBjb25zdCBTb3VyY2Ugc291cmNlID0gbVNvdXJjZS53aXRoTGluZShwYXJzZXItPmdldExpbmVOdW1iZXIoKSk7Ci0KK2Jvb2wgUmVzb3VyY2VQYXJzZXI6OnBhcnNlU3ltYm9sSW1wbCh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CiAgICAgTWF5YmU8U3RyaW5nUGllY2UxNj4gbWF5YmVUeXBlID0geG1sOjpmaW5kTm9uRW1wdHlBdHRyaWJ1dGUocGFyc2VyLCB1InR5cGUiKTsKICAgICBpZiAoIW1heWJlVHlwZSkgewotICAgICAgICBtRGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uoc291cmNlKSA8PCAiPCIgPDwgcGFyc2VyLT5nZXRFbGVtZW50TmFtZSgpIDw8ICI+IG11c3QgaGF2ZSBhICIKLSAgICAgICAgICAgICAgICAgICAgICIndHlwZScgYXR0cmlidXRlIik7CisgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShvdXRSZXNvdXJjZS0+c291cmNlKQorICAgICAgICAgICAgICAgICAgICAgPDwgIjwiIDw8IHBhcnNlci0+Z2V0RWxlbWVudE5hbWUoKSA8PCAiPiBtdXN0IGhhdmUgYSAndHlwZScgYXR0cmlidXRlIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBjb25zdCBSZXNvdXJjZVR5cGUqIHBhcnNlZFR5cGUgPSBwYXJzZVJlc291cmNlVHlwZShtYXliZVR5cGUudmFsdWUoKSk7CiAgICAgaWYgKCFwYXJzZWRUeXBlKSB7Ci0gICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8ICJpbnZhbGlkIHJlc291cmNlIHR5cGUgJyIgPDwgbWF5YmVUeXBlLnZhbHVlKCkKKyAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICA8PCAiaW52YWxpZCByZXNvdXJjZSB0eXBlICciIDw8IG1heWJlVHlwZS52YWx1ZSgpCiAgICAgICAgICAgICAgICAgICAgICA8PCAiJyBpbiA8IiA8PCBwYXJzZXItPmdldEVsZW1lbnROYW1lKCkgPDwgIj4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG91dFJlc291cmNlLT5uYW1lLnR5cGUgPSAqcGFyc2VkVHlwZTsKLSAgICBvdXRSZXNvdXJjZS0+c3ltYm9sU3RhdGUgPSBTeW1ib2xTdGF0ZTo6a1ByaXZhdGU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB1aW50MzJfdCBwYXJzZUZvcm1hdFR5cGUoY29uc3QgU3RyaW5nUGllY2UxNiYgcGllY2UpIHsKLSAgICBpZiAocGllY2UgPT0gdSJyZWZlcmVuY2UiKSAgICAgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfUkVGRVJFTkNFOwotICAgIGVsc2UgaWYgKHBpZWNlID09IHUic3RyaW5nIikgICAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkc7Ci0gICAgZWxzZSBpZiAocGllY2UgPT0gdSJpbnRlZ2VyIikgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0lOVEVHRVI7Ci0gICAgZWxzZSBpZiAocGllY2UgPT0gdSJib29sZWFuIikgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0JPT0xFQU47Ci0gICAgZWxzZSBpZiAocGllY2UgPT0gdSJjb2xvciIpICAgICByZXR1cm4gYW5kcm9pZDo6UmVzVGFibGVfbWFwOjpUWVBFX0NPTE9SOwotICAgIGVsc2UgaWYgKHBpZWNlID09IHUiZmxvYXQiKSAgICAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9GTE9BVDsKLSAgICBlbHNlIGlmIChwaWVjZSA9PSB1ImRpbWVuc2lvbiIpIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRElNRU5TSU9OOwotICAgIGVsc2UgaWYgKHBpZWNlID09IHUiZnJhY3Rpb24iKSAgcmV0dXJuIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9GUkFDVElPTjsKLSAgICBlbHNlIGlmIChwaWVjZSA9PSB1ImVudW0iKSAgICAgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRU5VTTsKLSAgICBlbHNlIGlmIChwaWVjZSA9PSB1ImZsYWdzIikgICAgIHJldHVybiBhbmRyb2lkOjpSZXNUYWJsZV9tYXA6OlRZUEVfRkxBR1M7Ci0gICAgcmV0dXJuIDA7Citib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZVN5bWJvbCh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgaWYgKHBhcnNlU3ltYm9sSW1wbChwYXJzZXIsIG91dFJlc291cmNlKSkgeworICAgICAgICBvdXRSZXNvdXJjZS0+c3ltYm9sU3RhdGUgPSBTeW1ib2xTdGF0ZTo6a1ByaXZhdGU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB1aW50MzJfdCBwYXJzZUZvcm1hdEF0dHJpYnV0ZShjb25zdCBTdHJpbmdQaWVjZTE2JiBzdHIpIHsKLSAgICB1aW50MzJfdCBtYXNrID0gMDsKLSAgICBmb3IgKFN0cmluZ1BpZWNlMTYgcGFydCA6IHV0aWw6OnRva2VuaXplKHN0ciwgdSd8JykpIHsKLSAgICAgICAgU3RyaW5nUGllY2UxNiB0cmltbWVkUGFydCA9IHV0aWw6OnRyaW1XaGl0ZXNwYWNlKHBhcnQpOwotICAgICAgICB1aW50MzJfdCB0eXBlID0gcGFyc2VGb3JtYXRUeXBlKHRyaW1tZWRQYXJ0KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgbWFzayB8PSB0eXBlOworYm9vbCBSZXNvdXJjZVBhcnNlcjo6cGFyc2VBZGRSZXNvdXJjZSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgaWYgKHBhcnNlU3ltYm9sSW1wbChwYXJzZXIsIG91dFJlc291cmNlKSkgeworICAgICAgICBvdXRSZXNvdXJjZS0+c3ltYm9sU3RhdGUgPSBTeW1ib2xTdGF0ZTo6a1VuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBtYXNrOworICAgIHJldHVybiBmYWxzZTsKIH0KIAorCiBib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUF0dHIoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSkgewotICAgIG91dFJlc291cmNlLT5zb3VyY2UgPSBtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKTsKICAgICByZXR1cm4gcGFyc2VBdHRySW1wbChwYXJzZXIsIG91dFJlc291cmNlLCBmYWxzZSk7CiB9CiAKIGJvb2wgUmVzb3VyY2VQYXJzZXI6OnBhcnNlQXR0ckltcGwoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3ZWFrKSB7CisgICAgb3V0UmVzb3VyY2UtPm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a0F0dHI7CisKICAgICB1aW50MzJfdCB0eXBlTWFzayA9IDA7CiAKICAgICBNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZUZvcm1hdCA9IHhtbDo6ZmluZEF0dHJpYnV0ZShwYXJzZXIsIHUiZm9ybWF0Iik7CkBAIC04NzAsNyArOTQwLDcgQEAKICAgICB9CiAKICAgICByZXR1cm4gQXR0cmlidXRlOjpTeW1ib2x7Ci0gICAgICAgICAgICBSZWZlcmVuY2UoUmVzb3VyY2VOYW1lKHt9LCBSZXNvdXJjZVR5cGU6OmtJZCwgbWF5YmVOYW1lLnZhbHVlKCkudG9TdHJpbmcoKSkpLAorICAgICAgICAgICAgUmVmZXJlbmNlKFJlc291cmNlTmFtZVJlZih7fSwgUmVzb3VyY2VUeXBlOjprSWQsIG1heWJlTmFtZS52YWx1ZSgpKSksCiAgICAgICAgICAgICB2YWwuZGF0YSB9OwogfQogCkBAIC05MzIsNyArMTAwMiw4IEBACiB9CiAKIGJvb2wgUmVzb3VyY2VQYXJzZXI6OnBhcnNlU3R5bGUoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSkgewotICAgIGNvbnN0IFNvdXJjZSBzb3VyY2UgPSBtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKTsKKyAgICBvdXRSZXNvdXJjZS0+bmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprU3R5bGU7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU+IHN0eWxlID0gdXRpbDo6bWFrZV91bmlxdWU8U3R5bGU+KCk7CiAKICAgICBNYXliZTxTdHJpbmdQaWVjZTE2PiBtYXliZVBhcmVudCA9IHhtbDo6ZmluZEF0dHJpYnV0ZShwYXJzZXIsIHUicGFyZW50Iik7CkBAIC05NDIsNyArMTAxMyw3IEBACiAgICAgICAgICAgICBzdGQ6OnN0cmluZyBlcnJTdHI7CiAgICAgICAgICAgICBzdHlsZS0+cGFyZW50ID0gUmVzb3VyY2VVdGlsczo6cGFyc2VTdHlsZVBhcmVudFJlZmVyZW5jZShtYXliZVBhcmVudC52YWx1ZSgpLCAmZXJyU3RyKTsKICAgICAgICAgICAgIGlmICghc3R5bGUtPnBhcmVudCkgewotICAgICAgICAgICAgICAgIG1EaWFnLT5lcnJvcihEaWFnTWVzc2FnZShzb3VyY2UpIDw8IGVyclN0cik7CisgICAgICAgICAgICAgICAgbURpYWctPmVycm9yKERpYWdNZXNzYWdlKG91dFJlc291cmNlLT5zb3VyY2UpIDw8IGVyclN0cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkBAIC05OTAsOSArMTA2MSwyMiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUFycmF5KHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHR5cGVNYXNrKSB7Ci0gICAgY29uc3QgU291cmNlIHNvdXJjZSA9IG1Tb3VyY2Uud2l0aExpbmUocGFyc2VyLT5nZXRMaW5lTnVtYmVyKCkpOworYm9vbCBSZXNvdXJjZVBhcnNlcjo6cGFyc2VBcnJheSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgcmV0dXJuIHBhcnNlQXJyYXlJbXBsKHBhcnNlciwgb3V0UmVzb3VyY2UsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9BTlkpOworfQorCitib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUludGVnZXJBcnJheSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgcmV0dXJuIHBhcnNlQXJyYXlJbXBsKHBhcnNlciwgb3V0UmVzb3VyY2UsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9JTlRFR0VSKTsKK30KKworYm9vbCBSZXNvdXJjZVBhcnNlcjo6cGFyc2VTdHJpbmdBcnJheSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7CisgICAgcmV0dXJuIHBhcnNlQXJyYXlJbXBsKHBhcnNlciwgb3V0UmVzb3VyY2UsIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9TVFJJTkcpOworfQorCitib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZUFycmF5SW1wbCh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdHlwZU1hc2spIHsKKyAgICBvdXRSZXNvdXJjZS0+bmFtZS50eXBlID0gUmVzb3VyY2VUeXBlOjprQXJyYXk7CisKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QXJyYXk+IGFycmF5ID0gdXRpbDo6bWFrZV91bmlxdWU8QXJyYXk+KCk7CiAKICAgICBib29sIGVycm9yID0gZmFsc2U7CkBAIC0xMDMyLDcgKzExMTYsOCBAQAogfQogCiBib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZVBsdXJhbCh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKSB7Ci0gICAgY29uc3QgU291cmNlIHNvdXJjZSA9IG1Tb3VyY2Uud2l0aExpbmUocGFyc2VyLT5nZXRMaW5lTnVtYmVyKCkpOworICAgIG91dFJlc291cmNlLT5uYW1lLnR5cGUgPSBSZXNvdXJjZVR5cGU6OmtQbHVyYWxzOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPFBsdXJhbD4gcGx1cmFsID0gdXRpbDo6bWFrZV91bmlxdWU8UGx1cmFsPigpOwogCiAgICAgYm9vbCBlcnJvciA9IGZhbHNlOwpAQCAtMTEwNiwxMiArMTE5MSwxMyBAQAogfQogCiBib29sIFJlc291cmNlUGFyc2VyOjpwYXJzZURlY2xhcmVTdHlsZWFibGUoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSkgewotICAgIGNvbnN0IFNvdXJjZSBzb3VyY2UgPSBtU291cmNlLndpdGhMaW5lKHBhcnNlci0+Z2V0TGluZU51bWJlcigpKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGVhYmxlPiBzdHlsZWFibGUgPSB1dGlsOjptYWtlX3VuaXF1ZTxTdHlsZWFibGU+KCk7CisgICAgb3V0UmVzb3VyY2UtPm5hbWUudHlwZSA9IFJlc291cmNlVHlwZTo6a1N0eWxlYWJsZTsKIAogICAgIC8vIERlY2xhcmUtc3R5bGVhYmxlIGlzIGtQcml2YXRlIGJ5IGRlZmF1bHQsIGJlY2F1c2UgaXQgdGVjaG5pY2FsbHkgb25seSBleGlzdHMgaW4gUi5qYXZhLgogICAgIG91dFJlc291cmNlLT5zeW1ib2xTdGF0ZSA9IFN5bWJvbFN0YXRlOjprUHVibGljOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlYWJsZT4gc3R5bGVhYmxlID0gdXRpbDo6bWFrZV91bmlxdWU8U3R5bGVhYmxlPigpOworCiAgICAgc3RkOjp1MTZzdHJpbmcgY29tbWVudDsKICAgICBib29sIGVycm9yID0gZmFsc2U7CiAgICAgY29uc3Qgc2l6ZV90IGRlcHRoID0gcGFyc2VyLT5nZXREZXB0aCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VQYXJzZXIuaCBiL3Rvb2xzL2FhcHQyL1Jlc291cmNlUGFyc2VyLmgKaW5kZXggMTE1MDc1OC4uNTFjYmJlMSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VQYXJzZXIuaAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlci5oCkBAIC0zNCwxNiArMzQsMjEgQEAKIAogc3RydWN0IFJlc291cmNlUGFyc2VyT3B0aW9ucyB7CiAgICAgLyoqCi0gICAgICogT3B0aW9uYWwgcHJvZHVjdCBuYW1lIGJ5IHdoaWNoIHRvIGZpbHRlciByZXNvdXJjZXMuCisgICAgICogT3B0aW9uYWwgcHJvZHVjdCBuYW1lcyBieSB3aGljaCB0byBmaWx0ZXIgcmVzb3VyY2VzLgogICAgICAqIFRoaXMgaXMgbGlrZSBhIHByZXByb2Nlc3NvciBkZWZpbml0aW9uIGluIHRoYXQgd2Ugc3RyaXAgb3V0IHJlc291cmNlcwogICAgICAqIHRoYXQgZG9uJ3QgbWF0Y2ggYmVmb3JlIHdlIGNvbXBpbGUgdGhlbS4KICAgICAgKi8KLSAgICBNYXliZTxzdGQ6OnUxNnN0cmluZz4gcHJvZHVjdDsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnUxNnN0cmluZz4gcHJvZHVjdHM7CiAKICAgICAvKioKICAgICAgKiBXaGV0aGVyIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHRoaXMgcGFyc2VyIGlzIHRvIGFsbG93IHRyYW5zbGF0aW9uLgogICAgICAqLwogICAgIGJvb2wgdHJhbnNsYXRhYmxlID0gdHJ1ZTsKKworICAgIC8qKgorICAgICAqIFdoZXRoZXIgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4gZm9ybWF0dGVkIHN0cmluZ3MgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzIG9yIHdhcm5pbmdzLgorICAgICAqLworICAgIGJvb2wgZXJyb3JPblBvc2l0aW9uYWxBcmd1bWVudHMgPSB0cnVlOwogfTsKIAogLyoKQEAgLTc4LDEyICs4MywxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93UmF3VmFsdWUpOwogCiAgICAgYm9vbCBwYXJzZVJlc291cmNlcyh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlcik7CisgICAgYm9vbCBwYXJzZVJlc291cmNlKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpOworCisgICAgYm9vbCBwYXJzZUl0ZW0oeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSwgdWludDMyX3QgZm9ybWF0KTsKICAgICBib29sIHBhcnNlU3RyaW5nKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpOwotICAgIGJvb2wgcGFyc2VDb2xvcih4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKLSAgICBib29sIHBhcnNlUHJpbWl0aXZlKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpOworCiAgICAgYm9vbCBwYXJzZVB1YmxpYyh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKICAgICBib29sIHBhcnNlUHVibGljR3JvdXAoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSk7CisgICAgYm9vbCBwYXJzZVN5bWJvbEltcGwoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSk7CiAgICAgYm9vbCBwYXJzZVN5bWJvbCh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKKyAgICBib29sIHBhcnNlQWRkUmVzb3VyY2UoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSk7CiAgICAgYm9vbCBwYXJzZUF0dHIoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSk7CiAgICAgYm9vbCBwYXJzZUF0dHJJbXBsKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UsIGJvb2wgd2Vhayk7CiAgICAgTWF5YmU8QXR0cmlidXRlOjpTeW1ib2w+IHBhcnNlRW51bU9yRmxhZ0l0ZW0oeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsCkBAIC05MSw5ICsxMDAsMTUgQEAKICAgICBib29sIHBhcnNlU3R5bGUoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSk7CiAgICAgYm9vbCBwYXJzZVN0eWxlSXRlbSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgU3R5bGUqIHN0eWxlKTsKICAgICBib29sIHBhcnNlRGVjbGFyZVN0eWxlYWJsZSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKLSAgICBib29sIHBhcnNlQXJyYXkoeG1sOjpYbWxQdWxsUGFyc2VyKiBwYXJzZXIsIFBhcnNlZFJlc291cmNlKiBvdXRSZXNvdXJjZSwgdWludDMyX3QgdHlwZU1hc2spOworICAgIGJvb2wgcGFyc2VBcnJheSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKKyAgICBib29sIHBhcnNlSW50ZWdlckFycmF5KHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpOworICAgIGJvb2wgcGFyc2VTdHJpbmdBcnJheSh4bWw6OlhtbFB1bGxQYXJzZXIqIHBhcnNlciwgUGFyc2VkUmVzb3VyY2UqIG91dFJlc291cmNlKTsKKyAgICBib29sIHBhcnNlQXJyYXlJbXBsKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UsIHVpbnQzMl90IHR5cGVNYXNrKTsKICAgICBib29sIHBhcnNlUGx1cmFsKHhtbDo6WG1sUHVsbFBhcnNlciogcGFyc2VyLCBQYXJzZWRSZXNvdXJjZSogb3V0UmVzb3VyY2UpOwogCisgICAgYm9vbCBzaG91bGRTdHJpcFJlc291cmNlKGNvbnN0IFJlc291cmNlTmFtZVJlZiYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTWF5YmU8c3RkOjp1MTZzdHJpbmc+JiBwcm9kdWN0KSBjb25zdDsKKwogICAgIElEaWFnbm9zdGljcyogbURpYWc7CiAgICAgUmVzb3VyY2VUYWJsZSogbVRhYmxlOwogICAgIFNvdXJjZSBtU291cmNlOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VQYXJzZXJfdGVzdC5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlcl90ZXN0LmNwcAppbmRleCA2ZTA4MTJiLi44ZDEwYmExIDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlcl90ZXN0LmNwcAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVBhcnNlcl90ZXN0LmNwcApAQCAtNDgsMTEgKzQ4LDExIEBACiAgICAgfQogCiAgICAgOjp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgdGVzdFBhcnNlKGNvbnN0IFN0cmluZ1BpZWNlJiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1heWJlPHN0ZDo6dTE2c3RyaW5nPiBwcm9kdWN0ID0ge30pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6dTE2c3RyaW5nPiBwcm9kdWN0cyA9IHt9KSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGlucHV0KGtYbWxQcmVhbWJsZSk7CiAgICAgICAgIGlucHV0IDw8ICI8cmVzb3VyY2VzPlxuIiA8PCBzdHIgPDwgIlxuPC9yZXNvdXJjZXM+IiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgIFJlc291cmNlUGFyc2VyT3B0aW9ucyBwYXJzZXJPcHRpb25zOwotICAgICAgICBwYXJzZXJPcHRpb25zLnByb2R1Y3QgPSBwcm9kdWN0OworICAgICAgICBwYXJzZXJPcHRpb25zLnByb2R1Y3RzID0gcHJvZHVjdHM7CiAgICAgICAgIFJlc291cmNlUGFyc2VyIHBhcnNlcihtQ29udGV4dC0+Z2V0RGlhZ25vc3RpY3MoKSwgJm1UYWJsZSwgU291cmNleyAidGVzdCIgfSwge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJPcHRpb25zKTsKICAgICAgICAgeG1sOjpYbWxQdWxsUGFyc2VyIHhtbFBhcnNlcihpbnB1dCk7CkBAIC0yMTUsNyArMjE1LDcgQEAKICAgICBBU1NFUlRfVFJVRSh0ZXN0UGFyc2UoaW5wdXQpKTsKIAogICAgIEF0dHJpYnV0ZSogZmxhZ0F0dHIgPSB0ZXN0OjpnZXRWYWx1ZTxBdHRyaWJ1dGU+KCZtVGFibGUsIHUiQGF0dHIvZm9vIik7Ci0gICAgQVNTRVJUX05FKGZsYWdBdHRyLCBudWxscHRyKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgZmxhZ0F0dHIpOwogICAgIEVYUEVDVF9FUShmbGFnQXR0ci0+dHlwZU1hc2ssIGFuZHJvaWQ6OlJlc1RhYmxlX21hcDo6VFlQRV9GTEFHUyk7CiAgICAgQVNTRVJUX0VRKGZsYWdBdHRyLT5zeW1ib2xzLnNpemUoKSwgM3UpOwogCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxCaW5hcnlQcmltaXRpdmU+IGZsYWdWYWx1ZSA9IFJlc291cmNlVXRpbHM6OnRyeVBhcnNlRmxhZ1N5bWJvbChmbGFnQXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJiYXp8YmF0Iik7Ci0gICAgQVNTRVJUX05FKGZsYWdWYWx1ZSwgbnVsbHB0cik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGZsYWdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKGZsYWdWYWx1ZS0+dmFsdWUuZGF0YSwgMXUgfCAydSk7CiB9CiAKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgIEFTU0VSVF9UUlVFKHRlc3RQYXJzZShpbnB1dCkpOwogCiAgICAgU3R5bGUqIHN0eWxlID0gdGVzdDo6Z2V0VmFsdWU8U3R5bGU+KCZtVGFibGUsIHUiQHN0eWxlL2ZvbyIpOwotICAgIEFTU0VSVF9ORShzdHlsZSwgbnVsbHB0cik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHN0eWxlKTsKICAgICBBQVBUX0FTU0VSVF9UUlVFKHN0eWxlLT5wYXJlbnQpOwogICAgIEFBUFRfQVNTRVJUX1RSVUUoc3R5bGUtPnBhcmVudC52YWx1ZSgpLm5hbWUpOwogICAgIEVYUEVDVF9FUSh0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBzdHlsZS9mdSIpLCBzdHlsZS0+cGFyZW50LnZhbHVlKCkubmFtZS52YWx1ZSgpKTsKQEAgLTI3Niw3ICsyNzYsNyBAQAogICAgIEFTU0VSVF9UUlVFKHRlc3RQYXJzZShpbnB1dCkpOwogCiAgICAgU3R5bGUqIHN0eWxlID0gdGVzdDo6Z2V0VmFsdWU8U3R5bGU+KCZtVGFibGUsIHUiQHN0eWxlL2ZvbyIpOwotICAgIEFTU0VSVF9ORShzdHlsZSwgbnVsbHB0cik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHN0eWxlKTsKICAgICBBQVBUX0FTU0VSVF9UUlVFKHN0eWxlLT5wYXJlbnQpOwogICAgIEFBUFRfQVNTRVJUX1RSVUUoc3R5bGUtPnBhcmVudC52YWx1ZSgpLm5hbWUpOwogICAgIEVYUEVDVF9FUSh0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBjb20uYXBwOnN0eWxlL1RoZW1lIiksIHN0eWxlLT5wYXJlbnQudmFsdWUoKS5uYW1lLnZhbHVlKCkpOwpAQCAtMjg4LDcgKzI4OCw3IEBACiAgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0KSk7CiAKICAgICBTdHlsZSogc3R5bGUgPSB0ZXN0OjpnZXRWYWx1ZTxTdHlsZT4oJm1UYWJsZSwgdSJAc3R5bGUvZm9vIik7Ci0gICAgQVNTRVJUX05FKHN0eWxlLCBudWxscHRyKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgc3R5bGUpOwogICAgIEFBUFRfQVNTRVJUX1RSVUUoc3R5bGUtPnBhcmVudCk7CiAgICAgQUFQVF9BU1NFUlRfVFJVRShzdHlsZS0+cGFyZW50LnZhbHVlKCkubmFtZSk7CiAgICAgRVhQRUNUX0VRKHRlc3Q6OnBhcnNlTmFtZU9yRGllKHUiQGFuZHJvaWQ6c3R5bGUvVGhlbWUiKSwgc3R5bGUtPnBhcmVudC52YWx1ZSgpLm5hbWUudmFsdWUoKSk7CkBAIC0zMDIsNyArMzAyLDcgQEAKICAgICBBU1NFUlRfVFJVRSh0ZXN0UGFyc2UoaW5wdXQpKTsKIAogICAgIFN0eWxlKiBzdHlsZSA9IHRlc3Q6OmdldFZhbHVlPFN0eWxlPigmbVRhYmxlLCB1IkBzdHlsZS9mb28iKTsKLSAgICBBU1NFUlRfTkUoc3R5bGUsIG51bGxwdHIpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBzdHlsZSk7CiAgICAgQVNTRVJUX0VRKDF1LCBzdHlsZS0+ZW50cmllcy5zaXplKCkpOwogICAgIEVYUEVDVF9FUSh0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBhbmRyb2lkOmF0dHIvYmFyIiksIHN0eWxlLT5lbnRyaWVzWzBdLmtleS5uYW1lLnZhbHVlKCkpOwogfQpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0KSk7CiAKICAgICBTdHlsZSogc3R5bGUgPSB0ZXN0OjpnZXRWYWx1ZTxTdHlsZT4oJm1UYWJsZSwgdSJAc3R5bGUvZm9vLmJhciIpOwotICAgIEFTU0VSVF9ORShzdHlsZSwgbnVsbHB0cik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHN0eWxlKTsKICAgICBBQVBUX0FTU0VSVF9UUlVFKHN0eWxlLT5wYXJlbnQpOwogICAgIEFBUFRfQVNTRVJUX1RSVUUoc3R5bGUtPnBhcmVudC52YWx1ZSgpLm5hbWUpOwogICAgIEVYUEVDVF9FUShzdHlsZS0+cGFyZW50LnZhbHVlKCkubmFtZS52YWx1ZSgpLCB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBzdHlsZS9mb28iKSk7CkBAIC0zMjQsMTEgKzMyNCwyMSBAQAogICAgIEFTU0VSVF9UUlVFKHRlc3RQYXJzZShpbnB1dCkpOwogCiAgICAgU3R5bGUqIHN0eWxlID0gdGVzdDo6Z2V0VmFsdWU8U3R5bGU+KCZtVGFibGUsIHUiQHN0eWxlL2Zvby5iYXIiKTsKLSAgICBBU1NFUlRfTkUoc3R5bGUsIG51bGxwdHIpOworICAgIEFTU0VSVF9ORShudWxscHRyLCBzdHlsZSk7CiAgICAgQUFQVF9FWFBFQ1RfRkFMU0Uoc3R5bGUtPnBhcmVudCk7CiAgICAgRVhQRUNUX0ZBTFNFKHN0eWxlLT5wYXJlbnRJbmZlcnJlZCk7CiB9CiAKK1RFU1RfRihSZXNvdXJjZVBhcnNlclRlc3QsIFBhcnNlU3R5bGVXaXRoUHJpdmF0ZVBhcmVudFJlZmVyZW5jZSkgeworICAgIHN0ZDo6c3RyaW5nIGlucHV0ID0gUiJFT0YoPHN0eWxlIG5hbWU9ImZvbyIgcGFyZW50PSIqYW5kcm9pZDpzdHlsZS9iYXIiIC8+KUVPRiI7CisgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0KSk7CisKKyAgICBTdHlsZSogc3R5bGUgPSB0ZXN0OjpnZXRWYWx1ZTxTdHlsZT4oJm1UYWJsZSwgdSJAc3R5bGUvZm9vIik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHN0eWxlKTsKKyAgICBBQVBUX0FTU0VSVF9UUlVFKHN0eWxlLT5wYXJlbnQpOworICAgIEVYUEVDVF9UUlVFKHN0eWxlLT5wYXJlbnQudmFsdWUoKS5wcml2YXRlUmVmZXJlbmNlKTsKK30KKwogVEVTVF9GKFJlc291cmNlUGFyc2VyVGVzdCwgUGFyc2VBdXRvR2VuZXJhdGVkSWRSZWZlcmVuY2UpIHsKICAgICBzdGQ6OnN0cmluZyBpbnB1dCA9ICI8c3RyaW5nIG5hbWU9XCJmb29cIj5AK2lkL2Jhcjwvc3RyaW5nPiI7CiAgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0KSk7CkBAIC01MDQsMTEgKzUxNCwxNSBAQAogfQogCiBURVNUX0YoUmVzb3VyY2VQYXJzZXJUZXN0LCBGaWx0ZXJQcm9kdWN0c1RoYXREb250TWF0Y2gpIHsKLSAgICBzdGQ6OnN0cmluZyBpbnB1dCA9ICI8c3RyaW5nIG5hbWU9XCJmb29cIiBwcm9kdWN0PVwicGhvbmVcIj5oaTwvc3RyaW5nPlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIjxzdHJpbmcgbmFtZT1cImZvb1wiIHByb2R1Y3Q9XCJuby1zZGNhcmRcIj5obzwvc3RyaW5nPlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIjxzdHJpbmcgbmFtZT1cImJhclwiIHByb2R1Y3Q9XCJcIj53ZWU8L3N0cmluZz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICI8c3RyaW5nIG5hbWU9XCJiYXpcIj53b288L3N0cmluZz5cbiI7Ci0gICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0LCBzdGQ6OnUxNnN0cmluZyh1Im5vLXNkY2FyZCIpKSk7CisgICAgc3RkOjpzdHJpbmcgaW5wdXQgPSBSIkVPRigKKyAgICAgICAgPHN0cmluZyBuYW1lPSJmb28iIHByb2R1Y3Q9InBob25lIj5oaTwvc3RyaW5nPgorICAgICAgICA8c3RyaW5nIG5hbWU9ImZvbyIgcHJvZHVjdD0ibm8tc2RjYXJkIj5obzwvc3RyaW5nPgorICAgICAgICA8c3RyaW5nIG5hbWU9ImJhciIgcHJvZHVjdD0iIj53ZWU8L3N0cmluZz4KKyAgICAgICAgPHN0cmluZyBuYW1lPSJiYXoiPndvbzwvc3RyaW5nPgorICAgICAgICA8c3RyaW5nIG5hbWU9ImJpdCIgcHJvZHVjdD0icGhhYmxldCI+aG9vdDwvc3RyaW5nPgorICAgICAgICA8c3RyaW5nIG5hbWU9ImJvdCIgcHJvZHVjdD0iZGVmYXVsdCI+eWVzPC9zdHJpbmc+CisgICAgKUVPRiI7CisgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0LCB7IHN0ZDo6dTE2c3RyaW5nKHUibm8tc2RjYXJkIiksIHN0ZDo6dTE2c3RyaW5nKHUicGhhYmxldCIpIH0pKTsKIAogICAgIFN0cmluZyogZm9vU3RyID0gdGVzdDo6Z2V0VmFsdWU8U3RyaW5nPigmbVRhYmxlLCB1IkBzdHJpbmcvZm9vIik7CiAgICAgQVNTRVJUX05FKG51bGxwdHIsIGZvb1N0cik7CkBAIC01MTYsMTEgKzUzMCwyNSBAQAogCiAgICAgRVhQRUNUX05FKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlPFN0cmluZz4oJm1UYWJsZSwgdSJAc3RyaW5nL2JhciIpKTsKICAgICBFWFBFQ1RfTkUobnVsbHB0ciwgdGVzdDo6Z2V0VmFsdWU8U3RyaW5nPigmbVRhYmxlLCB1IkBzdHJpbmcvYmF6IikpOworICAgIEVYUEVDVF9ORShudWxscHRyLCB0ZXN0OjpnZXRWYWx1ZTxTdHJpbmc+KCZtVGFibGUsIHUiQHN0cmluZy9iaXQiKSk7CisgICAgRVhQRUNUX05FKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlPFN0cmluZz4oJm1UYWJsZSwgdSJAc3RyaW5nL2JvdCIpKTsKK30KKworVEVTVF9GKFJlc291cmNlUGFyc2VyVGVzdCwgRmlsdGVyUHJvZHVjdHNUaGF0Qm90aE1hdGNoSW5PcmRlcikgeworICAgIHN0ZDo6c3RyaW5nIGlucHV0ID0gUiJFT0YoCisgICAgICAgIDxzdHJpbmcgbmFtZT0iZm9vIiBwcm9kdWN0PSJwaG9uZSI+cGhvbmU8L3N0cmluZz4KKyAgICAgICAgPHN0cmluZyBuYW1lPSJmb28iIHByb2R1Y3Q9ImRlZmF1bHQiPmRlZmF1bHQ8L3N0cmluZz4KKyAgICApRU9GIjsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0UGFyc2UoaW5wdXQsIHsgc3RkOjp1MTZzdHJpbmcodSJwaG9uZSIpIH0pKTsKKworICAgIFN0cmluZyogZm9vID0gdGVzdDo6Z2V0VmFsdWU8U3RyaW5nPigmbVRhYmxlLCB1IkBzdHJpbmcvZm9vIik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGZvbyk7CisgICAgRVhQRUNUX0VRKHN0ZDo6dTE2c3RyaW5nKHUicGhvbmUiKSwgKmZvby0+dmFsdWUpOwogfQogCiBURVNUX0YoUmVzb3VyY2VQYXJzZXJUZXN0LCBGYWlsV2hlblByb2R1Y3RGaWx0ZXJTdHJpcHNPdXRBbGxWZXJzaW9uc09mUmVzb3VyY2UpIHsKICAgICBzdGQ6OnN0cmluZyBpbnB1dCA9ICI8c3RyaW5nIG5hbWU9XCJmb29cIiBwcm9kdWN0PVwidGFibGV0XCI+aGVsbG88L3N0cmluZz5cbiI7Ci0gICAgQVNTRVJUX0ZBTFNFKHRlc3RQYXJzZShpbnB1dCwgc3RkOjp1MTZzdHJpbmcodSJwaG9uZSIpKSk7CisgICAgQVNTRVJUX0ZBTFNFKHRlc3RQYXJzZShpbnB1dCwgeyBzdGQ6OnUxNnN0cmluZyh1InBob25lIikgfSkpOwogfQogCiBURVNUX0YoUmVzb3VyY2VQYXJzZXJUZXN0LCBBdXRvSW5jcmVtZW50SWRzSW5QdWJsaWNHcm91cCkgewpAQCAtNTYzLDQgKzU5MSwyNiBAQAogICAgIEFTU0VSVF9GQUxTRSh0ZXN0UGFyc2UoaW5wdXQpKTsKIH0KIAorVEVTVF9GKFJlc291cmNlUGFyc2VyVGVzdCwgQWRkUmVzb3VyY2VzRWxlbWVudFNob3VsZEFkZEVudHJ5V2l0aFVuZGVmaW5lZFN5bWJvbCkgeworICAgIHN0ZDo6c3RyaW5nIGlucHV0ID0gUiJFT0YoPGFkZC1yZXNvdXJjZSBuYW1lPSJiYXIiIHR5cGU9InN0cmluZyIgLz4pRU9GIjsKKyAgICBBU1NFUlRfVFJVRSh0ZXN0UGFyc2UoaW5wdXQpKTsKKworICAgIE1heWJlPFJlc291cmNlVGFibGU6OlNlYXJjaFJlc3VsdD4gcmVzdWx0ID0gbVRhYmxlLmZpbmRSZXNvdXJjZSgKKyAgICAgICAgICAgIHRlc3Q6OnBhcnNlTmFtZU9yRGllKHUiQHN0cmluZy9iYXIiKSk7CisgICAgQUFQVF9BU1NFUlRfVFJVRShyZXN1bHQpOworICAgIGNvbnN0IFJlc291cmNlRW50cnkqIGVudHJ5ID0gcmVzdWx0LnZhbHVlKCkuZW50cnk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGVudHJ5KTsKKyAgICBFWFBFQ1RfRVEoU3ltYm9sU3RhdGU6OmtVbmRlZmluZWQsIGVudHJ5LT5zeW1ib2xTdGF0dXMuc3RhdGUpOworfQorCitURVNUX0YoUmVzb3VyY2VQYXJzZXJUZXN0LCBQYXJzZUl0ZW1FbGVtZW50V2l0aEZvcm1hdCkgeworICAgIHN0ZDo6c3RyaW5nIGlucHV0ID0gUiJFT0YoPGl0ZW0gbmFtZT0iZm9vIiB0eXBlPSJpbnRlZ2VyIiBmb3JtYXQ9ImZsb2F0Ij4wLjM8L2l0ZW0+KUVPRiI7CisgICAgQVNTRVJUX1RSVUUodGVzdFBhcnNlKGlucHV0KSk7CisKKyAgICBCaW5hcnlQcmltaXRpdmUqIHZhbCA9IHRlc3Q6OmdldFZhbHVlPEJpbmFyeVByaW1pdGl2ZT4oJm1UYWJsZSwgdSJAaW50ZWdlci9mb28iKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgdmFsKTsKKworICAgIEVYUEVDVF9FUSh1aW50MzJfdChhbmRyb2lkOjpSZXNfdmFsdWU6OlRZUEVfRkxPQVQpLCB2YWwtPnZhbHVlLmRhdGFUeXBlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgYWFwdApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VUYWJsZS5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZVRhYmxlLmNwcAppbmRleCA3M2Q4NTg1Li44YTNkMDQ3IDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9SZXNvdXJjZVRhYmxlLmNwcAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVRhYmxlLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgaWYgKGl0ZXIgIT0gbGFzdCAmJiAoKml0ZXIpLT50eXBlID09IHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGl0ZXItPmdldCgpOwogICAgIH0KLSAgICByZXR1cm4gdHlwZXMuZW1wbGFjZShpdGVyLCBuZXcgUmVzb3VyY2VUYWJsZVR5cGV7IHR5cGUgfSktPmdldCgpOworICAgIHJldHVybiB0eXBlcy5lbXBsYWNlKGl0ZXIsIG5ldyBSZXNvdXJjZVRhYmxlVHlwZSh0eXBlKSktPmdldCgpOwogfQogCiBSZXNvdXJjZUVudHJ5KiBSZXNvdXJjZVRhYmxlVHlwZTo6ZmluZEVudHJ5KGNvbnN0IFN0cmluZ1BpZWNlMTYmIG5hbWUpIHsKQEAgLTEyMSw3ICsxMjEsNyBAQAogICAgIGlmIChpdGVyICE9IGxhc3QgJiYgbmFtZSA9PSAoKml0ZXIpLT5uYW1lKSB7CiAgICAgICAgIHJldHVybiBpdGVyLT5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJpZXMuZW1wbGFjZShpdGVyLCBuZXcgUmVzb3VyY2VFbnRyeXsgbmFtZSB9KS0+Z2V0KCk7CisgICAgcmV0dXJuIGVudHJpZXMuZW1wbGFjZShpdGVyLCBuZXcgUmVzb3VyY2VFbnRyeShuYW1lKSktPmdldCgpOwogfQogCiAvKioKQEAgLTM0MiwxMSArMzQyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEaWFnbm9zdGljcyogZGlhZykgewogICAgIGFzc2VydChkaWFnICYmICJkaWFnbm9zdGljcyBjYW4ndCBiZSBudWxscHRyIik7CiAKLSAgICBpZiAoc3ltYm9sLnN0YXRlID09IFN5bWJvbFN0YXRlOjprVW5kZWZpbmVkKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQogICAgIGF1dG8gYmFkQ2hhckl0ZXIgPSB1dGlsOjpmaW5kTm9uQWxwaGFOdW1lcmljQW5kTm90SW5TZXQobmFtZS5lbnRyeSwgdmFsaWRDaGFycyk7CiAgICAgaWYgKGJhZENoYXJJdGVyICE9IG5hbWUuZW50cnkuZW5kKCkpIHsKICAgICAgICAgZGlhZy0+ZXJyb3IoRGlhZ01lc3NhZ2Uoc3ltYm9sLnNvdXJjZSkKQEAgLTQwMCwyMyArMzk1LDMwIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICAvLyBPbmx5IG1hcmsgdGhlIHR5cGUgc3RhdGUgYXMgcHVibGljLCBpdCBkb2Vzbid0IGNhcmUgYWJvdXQgYmVpbmcgcHJpdmF0ZS4KLSAgICBpZiAoc3ltYm9sLnN0YXRlID09IFN5bWJvbFN0YXRlOjprUHVibGljKSB7Ci0gICAgICAgIHR5cGUtPnN5bWJvbFN0YXR1cy5zdGF0ZSA9IFN5bWJvbFN0YXRlOjprUHVibGljOwotICAgIH0KLQotICAgIC8vIERvd25ncmFkaW5nIHRvIGEgcHJpdmF0ZSBzeW1ib2wgZnJvbSBhIHB1YmxpYyBvbmUgaXMgbm90IGFsbG93ZWQuCi0gICAgaWYgKGVudHJ5LT5zeW1ib2xTdGF0dXMuc3RhdGUgIT0gU3ltYm9sU3RhdGU6OmtQdWJsaWMpIHsKLSAgICAgICAgaWYgKGVudHJ5LT5zeW1ib2xTdGF0dXMuc3RhdGUgIT0gc3ltYm9sLnN0YXRlKSB7Ci0gICAgICAgICAgICBlbnRyeS0+c3ltYm9sU3RhdHVzID0gc3RkOjptb3ZlKHN5bWJvbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAocmVzSWQuaXNWYWxpZCgpKSB7CiAgICAgICAgIHBhY2thZ2UtPmlkID0gcmVzSWQucGFja2FnZUlkKCk7CiAgICAgICAgIHR5cGUtPmlkID0gcmVzSWQudHlwZUlkKCk7CiAgICAgICAgIGVudHJ5LT5pZCA9IHJlc0lkLmVudHJ5SWQoKTsKICAgICB9CisKKyAgICAvLyBPbmx5IG1hcmsgdGhlIHR5cGUgc3RhdGUgYXMgcHVibGljLCBpdCBkb2Vzbid0IGNhcmUgYWJvdXQgYmVpbmcgcHJpdmF0ZS4KKyAgICBpZiAoc3ltYm9sLnN0YXRlID09IFN5bWJvbFN0YXRlOjprUHVibGljKSB7CisgICAgICAgIHR5cGUtPnN5bWJvbFN0YXR1cy5zdGF0ZSA9IFN5bWJvbFN0YXRlOjprUHVibGljOworICAgIH0KKworICAgIGlmIChzeW1ib2wuc3RhdGUgPT0gU3ltYm9sU3RhdGU6OmtVbmRlZmluZWQgJiYKKyAgICAgICAgICAgIGVudHJ5LT5zeW1ib2xTdGF0dXMuc3RhdGUgIT0gU3ltYm9sU3RhdGU6OmtVbmRlZmluZWQpIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgdW5kZWZpbmUgYSBzeW1ib2wgKHJlbW92ZSBpdHMgdmlzaWJpbGl0eSkuIElnbm9yZS4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHN5bWJvbC5zdGF0ZSA9PSBTeW1ib2xTdGF0ZTo6a1ByaXZhdGUgJiYKKyAgICAgICAgICAgIGVudHJ5LT5zeW1ib2xTdGF0dXMuc3RhdGUgPT0gU3ltYm9sU3RhdGU6OmtQdWJsaWMpIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZG93bmdyYWRlIHB1YmxpYyB0byBwcml2YXRlLiBJZ25vcmUuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGVudHJ5LT5zeW1ib2xTdGF0dXMgPSBzdGQ6Om1vdmUoc3ltYm9sKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VVdGlscy5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZVV0aWxzLmNwcAppbmRleCBmZmU2NTk1Li4xZGMxMjNlIDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9SZXNvdXJjZVV0aWxzLmNwcAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVV0aWxzLmNwcApAQCAtMTQsOCArMTQsMTAgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlICJOYW1lTWFuZ2xlci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXRpbHMuaCIKICNpbmNsdWRlICJmbGF0dGVuL1Jlc291cmNlVHlwZUV4dGVuc2lvbnMuaCIKKyNpbmNsdWRlICJ1dGlsL0ZpbGVzLmgiCiAjaW5jbHVkZSAidXRpbC9VdGlsLmgiCiAKICNpbmNsdWRlIDxhbmRyb2lkZncvUmVzb3VyY2VUeXBlcy5oPgpAQCAtMTc0LDEwICsxNzYsMTAgQEAKIC8qCiAgKiBTdHlsZSBwYXJlbnQncyBhcmUgYSBiaXQgZGlmZmVyZW50LiBXZSBhY2NlcHQgdGhlIGZvbGxvd2luZyBmb3JtYXRzOgogICoKLSAqIEBbcGFja2FnZTpdc3R5bGUvPGVudHJ5PgotICogP1twYWNrYWdlOl1zdHlsZS88ZW50cnk+Ci0gKiA8cGFja2FnZT46W3N0eWxlL108ZW50cnk+Ci0gKiBbcGFja2FnZTpzdHlsZS9dPGVudHJ5PgorICogQFtbKl1wYWNrYWdlOl1zdHlsZS88ZW50cnk+CisgKiA/W1sqXXBhY2thZ2U6XXN0eWxlLzxlbnRyeT4KKyAqIDxbKl1wYWNrYWdlPjpbc3R5bGUvXTxlbnRyeT4KKyAqIFtbKl1wYWNrYWdlOnN0eWxlL108ZW50cnk+CiAgKi8KIE1heWJlPFJlZmVyZW5jZT4gcGFyc2VTdHlsZVBhcmVudFJlZmVyZW5jZShjb25zdCBTdHJpbmdQaWVjZTE2JiBzdHIsIHN0ZDo6c3RyaW5nKiBvdXRFcnJvcikgewogICAgIGlmIChzdHIuZW1wdHkoKSkgewpAQCAtMTkzLDEwICsxOTUsMTEgQEAKICAgICBpZiAobmFtZS5kYXRhKClbMF0gPT0gdSdAJyB8fCBuYW1lLmRhdGEoKVswXSA9PSB1Jz8nKSB7CiAgICAgICAgIGhhc0xlYWRpbmdJZGVudGlmaWVycyA9IHRydWU7CiAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLnNpemUoKSAtIDEpOwotICAgICAgICBpZiAobmFtZS5kYXRhKClbMF0gPT0gdScqJykgewotICAgICAgICAgICAgcHJpdmF0ZVJlZiA9IHRydWU7Ci0gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5zaXplKCkgLSAxKTsKLSAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuYW1lLmRhdGEoKVswXSA9PSB1JyonKSB7CisgICAgICAgIHByaXZhdGVSZWYgPSB0cnVlOworICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHIoMSwgbmFtZS5zaXplKCkgLSAxKTsKICAgICB9CiAKICAgICBSZXNvdXJjZU5hbWVSZWYgcmVmOwpAQCAtNTU0LDUgKzU1NywyMiBAQAogICAgIHJldHVybiB7fTsKIH0KIAorc3RkOjpzdHJpbmcgYnVpbGRSZXNvdXJjZUZpbGVOYW1lKGNvbnN0IFJlc291cmNlRmlsZSYgcmVzRmlsZSwgY29uc3QgTmFtZU1hbmdsZXIqIG1hbmdsZXIpIHsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBvdXQ7CisgICAgb3V0IDw8ICJyZXMvIiA8PCByZXNGaWxlLm5hbWUudHlwZTsKKyAgICBpZiAocmVzRmlsZS5jb25maWcgIT0gQ29uZmlnRGVzY3JpcHRpb257fSkgeworICAgICAgICBvdXQgPDwgIi0iIDw8IHJlc0ZpbGUuY29uZmlnOworICAgIH0KKyAgICBvdXQgPDwgIi8iOworCisgICAgaWYgKG1hbmdsZXIgJiYgbWFuZ2xlci0+c2hvdWxkTWFuZ2xlKHJlc0ZpbGUubmFtZS5wYWNrYWdlKSkgeworICAgICAgICBvdXQgPDwgTmFtZU1hbmdsZXI6Om1hbmdsZUVudHJ5KHJlc0ZpbGUubmFtZS5wYWNrYWdlLCByZXNGaWxlLm5hbWUuZW50cnkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCA8PCByZXNGaWxlLm5hbWUuZW50cnk7CisgICAgfQorICAgIG91dCA8PCBmaWxlOjpnZXRFeHRlbnNpb24ocmVzRmlsZS5zb3VyY2UucGF0aCk7CisgICAgcmV0dXJuIG91dC5zdHIoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgUmVzb3VyY2VVdGlscwogfSAvLyBuYW1lc3BhY2UgYWFwdApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VVdGlscy5oIGIvdG9vbHMvYWFwdDIvUmVzb3VyY2VVdGlscy5oCmluZGV4IGY5M2E0YzcuLjY0Y2E5NzEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVXRpbHMuaAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVV0aWxzLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZm5kZWYgQUFQVF9SRVNPVVJDRVVUSUxTX0gKICNkZWZpbmUgQUFQVF9SRVNPVVJDRVVUSUxTX0gKIAorI2luY2x1ZGUgIk5hbWVNYW5nbGVyLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZVZhbHVlcy5oIgogI2luY2x1ZGUgInV0aWwvU3RyaW5nUGllY2UuaCIKQEAgLTE1NCw2ICsxNTUsMTYgQEAKIAogdWludDMyX3QgYW5kcm9pZFR5cGVUb0F0dHJpYnV0ZVR5cGVNYXNrKHVpbnQxNl90IHR5cGUpOwogCisvKioKKyAqIFJldHVybnMgYSBzdHJpbmcgcGF0aCBzdWl0YWJsZSBmb3IgdXNlIHdpdGhpbiBhbiBBUEsuIFRoZSBwYXRoIHdpbGwgbG9vayBsaWtlOgorICoKKyAqIHJlcy90eXBlWy1jb25maWddLzxuYW1lPi48ZXh0PgorICoKKyAqIFRoZW4gbmFtZSBtYXkgYmUgbWFuZ2xlZCBpZiBhIE5hbWVNYW5nbGVyIGlzIHN1cHBsaWVkIChjYW4gYmUgbnVsbHB0cikgYW5kIHRoZSBwYWNrYWdlCisgKiByZXF1aXJlcyBtYW5nbGluZy4KKyAqLworc3RkOjpzdHJpbmcgYnVpbGRSZXNvdXJjZUZpbGVOYW1lKGNvbnN0IFJlc291cmNlRmlsZSYgcmVzRmlsZSwgY29uc3QgTmFtZU1hbmdsZXIqIG1hbmdsZXIpOworCiB9IC8vIG5hbWVzcGFjZSBSZXNvdXJjZVV0aWxzCiB9IC8vIG5hbWVzcGFjZSBhYXB0CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVXRpbHNfdGVzdC5jcHAgYi90b29scy9hYXB0Mi9SZXNvdXJjZVV0aWxzX3Rlc3QuY3BwCmluZGV4IDRiYmZjMzIuLjg4ZWZhNjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVXRpbHNfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWFwdDIvUmVzb3VyY2VVdGlsc190ZXN0LmNwcApAQCAtMTU3LDYgKzE1NywxMSBAQAogICAgIHJlZiA9IFJlc291cmNlVXRpbHM6OnBhcnNlU3R5bGVQYXJlbnRSZWZlcmVuY2UodSJmb28iLCAmZXJyU3RyKTsKICAgICBBQVBUX0FTU0VSVF9UUlVFKHJlZik7CiAgICAgRVhQRUNUX0VRKHJlZi52YWx1ZSgpLm5hbWUudmFsdWUoKSwga1N0eWxlRm9vTmFtZSk7CisKKyAgICByZWYgPSBSZXNvdXJjZVV0aWxzOjpwYXJzZVN0eWxlUGFyZW50UmVmZXJlbmNlKHUiKmFuZHJvaWQ6c3R5bGUvZm9vIiwgJmVyclN0cik7CisgICAgQUFQVF9BU1NFUlRfVFJVRShyZWYpOworICAgIEVYUEVDVF9FUShyZWYudmFsdWUoKS5uYW1lLnZhbHVlKCksIGtBbmRyb2lkU3R5bGVGb29OYW1lKTsKKyAgICBFWFBFQ1RfVFJVRShyZWYudmFsdWUoKS5wcml2YXRlUmVmZXJlbmNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYWFwdApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvUmVzb3VyY2VWYWx1ZXMuY3BwIGIvdG9vbHMvYWFwdDIvUmVzb3VyY2VWYWx1ZXMuY3BwCmluZGV4IDA0YzM3NWYuLmI5M2U2ZDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVmFsdWVzLmNwcAorKysgYi90b29scy9hYXB0Mi9SZXNvdXJjZVZhbHVlcy5jcHAKQEAgLTM2LDEwICszNiw2IEBACiAgICAgdmlzaXRvci0+dmlzaXQoc3RhdGljX2Nhc3Q8RGVyaXZlZCo+KHRoaXMpKTsKIH0KIAotYm9vbCBWYWx1ZTo6aXNXZWFrKCkgY29uc3QgewotICAgIHJldHVybiBmYWxzZTsKLX0KLQogUmF3U3RyaW5nOjpSYXdTdHJpbmcoY29uc3QgU3RyaW5nUG9vbDo6UmVmJiByZWYpIDogdmFsdWUocmVmKSB7CiB9CiAKQEAgLTEwMSwxMCArOTcsNiBAQAogICAgIH0KIH0KIAotYm9vbCBJZDo6aXNXZWFrKCkgY29uc3QgewotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIElkOjpmbGF0dGVuKGFuZHJvaWQ6OlJlc192YWx1ZSogb3V0KSBjb25zdCB7CiAgICAgb3V0LT5kYXRhVHlwZSA9IGFuZHJvaWQ6OlJlc192YWx1ZTo6VFlQRV9JTlRfQk9PTEVBTjsKICAgICBvdXQtPmRhdGEgPSB1dGlsOjpob3N0VG9EZXZpY2UzMigwKTsKQEAgLTExOSw3ICsxMTEsMTUgQEAKICAgICAqb3V0IDw8ICIoaWQpIjsKIH0KIAotU3RyaW5nOjpTdHJpbmcoY29uc3QgU3RyaW5nUG9vbDo6UmVmJiByZWYpIDogdmFsdWUocmVmKSB7CitTdHJpbmc6OlN0cmluZyhjb25zdCBTdHJpbmdQb29sOjpSZWYmIHJlZikgOiB2YWx1ZShyZWYpLCBtVHJhbnNsYXRlYWJsZSh0cnVlKSB7Cit9CisKK3ZvaWQgU3RyaW5nOjpzZXRUcmFuc2xhdGVhYmxlKGJvb2wgdmFsKSB7CisgICAgbVRyYW5zbGF0ZWFibGUgPSB2YWw7Cit9CisKK2Jvb2wgU3RyaW5nOjppc1RyYW5zbGF0ZWFibGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1UcmFuc2xhdGVhYmxlOwogfQogCiBib29sIFN0cmluZzo6ZmxhdHRlbihhbmRyb2lkOjpSZXNfdmFsdWUqIG91dFZhbHVlKSBjb25zdCB7CkBAIC0xNDQsNyArMTQ0LDE1IEBACiAgICAgKm91dCA8PCAiKHN0cmluZykgXCIiIDw8ICp2YWx1ZSA8PCAiXCIiOwogfQogCi1TdHlsZWRTdHJpbmc6OlN0eWxlZFN0cmluZyhjb25zdCBTdHJpbmdQb29sOjpTdHlsZVJlZiYgcmVmKSA6IHZhbHVlKHJlZikgeworU3R5bGVkU3RyaW5nOjpTdHlsZWRTdHJpbmcoY29uc3QgU3RyaW5nUG9vbDo6U3R5bGVSZWYmIHJlZikgOiB2YWx1ZShyZWYpLCBtVHJhbnNsYXRlYWJsZSh0cnVlKSB7Cit9CisKK3ZvaWQgU3R5bGVkU3RyaW5nOjpzZXRUcmFuc2xhdGVhYmxlKGJvb2wgdmFsKSB7CisgICAgbVRyYW5zbGF0ZWFibGUgPSB2YWw7Cit9CisKK2Jvb2wgU3R5bGVkU3RyaW5nOjppc1RyYW5zbGF0ZWFibGUoKSBjb25zdCB7CisgICAgcmV0dXJuIG1UcmFuc2xhdGVhYmxlOwogfQogCiBib29sIFN0eWxlZFN0cmluZzo6ZmxhdHRlbihhbmRyb2lkOjpSZXNfdmFsdWUqIG91dFZhbHVlKSBjb25zdCB7CkBAIC0yMzgsMTMgKzI0NiwxMCBAQAogfQogCiBBdHRyaWJ1dGU6OkF0dHJpYnV0ZShib29sIHcsIHVpbnQzMl90IHQpIDoKLSAgICAgICAgd2Vhayh3KSwgdHlwZU1hc2sodCksCisgICAgICAgIHR5cGVNYXNrKHQpLAogICAgICAgICBtaW5JbnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpLAogICAgICAgICBtYXhJbnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpIHsKLX0KLQotYm9vbCBBdHRyaWJ1dGU6OmlzV2VhaygpIGNvbnN0IHsKLSAgICByZXR1cm4gd2VhazsKKyAgICBtV2VhayA9IHc7CiB9CiAKIEF0dHJpYnV0ZSogQXR0cmlidXRlOjpjbG9uZShTdHJpbmdQb29sKiAvKm5ld1Bvb2wqLykgY29uc3QgewpAQCAtMzU5LDcgKzM2NCw3IEBACiAgICAgICAgICAgICA8PCAiXSI7CiAgICAgfQogCi0gICAgaWYgKHdlYWspIHsKKyAgICBpZiAoaXNXZWFrKCkpIHsKICAgICAgICAgKm91dCA8PCAiIFt3ZWFrXSI7CiAgICAgfQogfQpAQCAtNDU3LDYgKzQ2Miw5IEBACiB2b2lkIFN0eWxlOjpwcmludChzdGQ6Om9zdHJlYW0qIG91dCkgY29uc3QgewogICAgICpvdXQgPDwgIihzdHlsZSkgIjsKICAgICBpZiAocGFyZW50ICYmIHBhcmVudC52YWx1ZSgpLm5hbWUpIHsKKyAgICAgICAgaWYgKHBhcmVudC52YWx1ZSgpLnByaXZhdGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICpvdXQgPDwgIioiOworICAgICAgICB9CiAgICAgICAgICpvdXQgPDwgcGFyZW50LnZhbHVlKCkubmFtZS52YWx1ZSgpOwogICAgIH0KICAgICAqb3V0IDw8ICIgWyIKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVmFsdWVzLmggYi90b29scy9hYXB0Mi9SZXNvdXJjZVZhbHVlcy5oCmluZGV4IGEwMzgyODIuLjhlMzE3ZGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL1Jlc291cmNlVmFsdWVzLmgKKysrIGIvdG9vbHMvYWFwdDIvUmVzb3VyY2VWYWx1ZXMuaApAQCAtNDMsOSArNDMsMTUgQEAKIAogICAgIC8qKgogICAgICAqIFdoZXRoZXIgdGhpcyB2YWx1ZSBpcyB3ZWFrIGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRob3V0Ci0gICAgICogd2FybmluZyBvciBlcnJvci4gRGVmYXVsdCBmb3IgYmFzZSBjbGFzcyBpcyBmYWxzZS4KKyAgICAgKiB3YXJuaW5nIG9yIGVycm9yLiBEZWZhdWx0IGlzIGZhbHNlLgogICAgICAqLwotICAgIHZpcnR1YWwgYm9vbCBpc1dlYWsoKSBjb25zdDsKKyAgICBib29sIGlzV2VhaygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1XZWFrOworICAgIH0KKworICAgIHZvaWQgc2V0V2Vhayhib29sIHZhbCkgeworICAgICAgICBtV2VhayA9IHZhbDsKKyAgICB9CiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBzb3VyY2Ugd2hlcmUgdGhpcyB2YWx1ZSB3YXMgZGVmaW5lZC4KQEAgLTk1LDYgKzEwMSw3IEBACiBwcm90ZWN0ZWQ6CiAgICAgU291cmNlIG1Tb3VyY2U7CiAgICAgc3RkOjp1MTZzdHJpbmcgbUNvbW1lbnQ7CisgICAgYm9vbCBtV2VhayA9IGZhbHNlOwogfTsKIAogLyoqCkBAIC0xNTksNyArMTY2LDcgQEAKICAqIEFuIElEIHJlc291cmNlLiBIYXMgbm8gcmVhbCB2YWx1ZSwganVzdCBhIHBsYWNlIGhvbGRlci4KICAqLwogc3RydWN0IElkIDogcHVibGljIEJhc2VJdGVtPElkPiB7Ci0gICAgYm9vbCBpc1dlYWsoKSBjb25zdCBvdmVycmlkZTsKKyAgICBJZCgpIHsgbVdlYWsgPSB0cnVlOyB9CiAgICAgYm9vbCBmbGF0dGVuKGFuZHJvaWQ6OlJlc192YWx1ZSogb3V0KSBjb25zdCBvdmVycmlkZTsKICAgICBJZCogY2xvbmUoU3RyaW5nUG9vbCogbmV3UG9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcmludChzdGQ6Om9zdHJlYW0qIG91dCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xODUsOSArMTkyLDE3IEBACiAKICAgICBTdHJpbmcoY29uc3QgU3RyaW5nUG9vbDo6UmVmJiByZWYpOwogCisgICAgLy8gV2hldGhlciB0aGUgc3RyaW5nIGlzIG1hcmtlZCBhcyB0cmFuc2xhdGVhYmxlLiBUaGlzIGRvZXMgbm90IHBlcnNpc3Qgd2hlbiBmbGF0dGVuZWQuCisgICAgLy8gSXQgaXMgb25seSB1c2VkIGR1cmluZyBjb21waWxhdGlvbiBwaGFzZS4KKyAgICB2b2lkIHNldFRyYW5zbGF0ZWFibGUoYm9vbCB2YWwpOworICAgIGJvb2wgaXNUcmFuc2xhdGVhYmxlKCkgY29uc3Q7CisKICAgICBib29sIGZsYXR0ZW4oYW5kcm9pZDo6UmVzX3ZhbHVlKiBvdXRWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgU3RyaW5nKiBjbG9uZShTdHJpbmdQb29sKiBuZXdQb29sKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIHByaW50KHN0ZDo6b3N0cmVhbSogb3V0KSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBib29sIG1UcmFuc2xhdGVhYmxlOwogfTsKIAogc3RydWN0IFN0eWxlZFN0cmluZyA6IHB1YmxpYyBCYXNlSXRlbTxTdHlsZWRTdHJpbmc+IHsKQEAgLTE5NSw5ICsyMTAsMTcgQEAKIAogICAgIFN0eWxlZFN0cmluZyhjb25zdCBTdHJpbmdQb29sOjpTdHlsZVJlZiYgcmVmKTsKIAorICAgIC8vIFdoZXRoZXIgdGhlIHN0cmluZyBpcyBtYXJrZWQgYXMgdHJhbnNsYXRlYWJsZS4gVGhpcyBkb2VzIG5vdCBwZXJzaXN0IHdoZW4gZmxhdHRlbmVkLgorICAgIC8vIEl0IGlzIG9ubHkgdXNlZCBkdXJpbmcgY29tcGlsYXRpb24gcGhhc2UuCisgICAgdm9pZCBzZXRUcmFuc2xhdGVhYmxlKGJvb2wgdmFsKTsKKyAgICBib29sIGlzVHJhbnNsYXRlYWJsZSgpIGNvbnN0OworCiAgICAgYm9vbCBmbGF0dGVuKGFuZHJvaWQ6OlJlc192YWx1ZSogb3V0VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwogICAgIFN0eWxlZFN0cmluZyogY2xvbmUoU3RyaW5nUG9vbCogbmV3UG9vbCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBwcmludChzdGQ6Om9zdHJlYW0qIG91dCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtVHJhbnNsYXRlYWJsZTsKIH07CiAKIHN0cnVjdCBGaWxlUmVmZXJlbmNlIDogcHVibGljIEJhc2VJdGVtPEZpbGVSZWZlcmVuY2U+IHsKQEAgLTIzMiw3ICsyNTUsNiBAQAogICAgICAgICB1aW50MzJfdCB2YWx1ZTsKICAgICB9OwogCi0JYm9vbCB3ZWFrOwogICAgIHVpbnQzMl90IHR5cGVNYXNrOwogICAgIGludDMyX3QgbWluSW50OwogICAgIGludDMyX3QgbWF4SW50OwpAQCAtMjQwLDcgKzI2Miw2IEBACiAKICAgICBBdHRyaWJ1dGUoYm9vbCB3LCB1aW50MzJfdCB0ID0gMHUpOwogCi0gICAgYm9vbCBpc1dlYWsoKSBjb25zdCBvdmVycmlkZTsKICAgICBBdHRyaWJ1dGUqIGNsb25lKFN0cmluZ1Bvb2wqIG5ld1Bvb2wpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgcHJpbnRNYXNrKHN0ZDo6b3N0cmVhbSogb3V0KSBjb25zdDsKICAgICB2b2lkIHByaW50KHN0ZDo6b3N0cmVhbSogb3V0KSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2NvbXBpbGUvQ29tcGlsZS5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL0NvbXBpbGUuY3BwCmluZGV4IDkwZTM1ZDUuLmM3ODY3MGYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL2NvbXBpbGUvQ29tcGlsZS5jcHAKKysrIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9Db21waWxlLmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKICNpbmNsdWRlICJjb21waWxlL0lkQXNzaWduZXIuaCIKICNpbmNsdWRlICJjb21waWxlL1BuZy5oIgorI2luY2x1ZGUgImNvbXBpbGUvUHNldWRvbG9jYWxlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZS9YbWxJZENvbGxlY3Rvci5oIgogI2luY2x1ZGUgImZsYXR0ZW4vQXJjaGl2ZS5oIgogI2luY2x1ZGUgImZsYXR0ZW4vRmlsZUV4cG9ydFdyaXRlci5oIgpAQCAtMTA0LDcgKzEwNSw5IEBACiBzdHJ1Y3QgQ29tcGlsZU9wdGlvbnMgewogICAgIHN0ZDo6c3RyaW5nIG91dHB1dFBhdGg7CiAgICAgTWF5YmU8c3RkOjpzdHJpbmc+IHJlc0RpcjsKLSAgICBNYXliZTxzdGQ6OnUxNnN0cmluZz4gcHJvZHVjdDsKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnUxNnN0cmluZz4gcHJvZHVjdHM7CisgICAgYm9vbCBwc2V1ZG9sb2NhbGl6ZSA9IGZhbHNlOworICAgIGJvb2wgbGVnYWN5TW9kZSA9IGZhbHNlOwogICAgIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogfTsKIApAQCAtMTg5LDcgKzE5Miw4IEBACiAgICAgICAgIHhtbDo6WG1sUHVsbFBhcnNlciB4bWxQYXJzZXIoZmluKTsKIAogICAgICAgICBSZXNvdXJjZVBhcnNlck9wdGlvbnMgcGFyc2VyT3B0aW9uczsKLSAgICAgICAgcGFyc2VyT3B0aW9ucy5wcm9kdWN0ID0gb3B0aW9ucy5wcm9kdWN0OworICAgICAgICBwYXJzZXJPcHRpb25zLnByb2R1Y3RzID0gb3B0aW9ucy5wcm9kdWN0czsKKyAgICAgICAgcGFyc2VyT3B0aW9ucy5lcnJvck9uUG9zaXRpb25hbEFyZ3VtZW50cyA9ICFvcHRpb25zLmxlZ2FjeU1vZGU7CiAKICAgICAgICAgLy8gSWYgdGhlIGZpbGVuYW1lIGluY2x1ZGVzIGRvbm90dHJhbnNsYXRlLCB0aGVuIHRoZSBkZWZhdWx0IHRyYW5zbGF0YWJsZSBpcyBmYWxzZS4KICAgICAgICAgcGFyc2VyT3B0aW9ucy50cmFuc2xhdGFibGUgPSBwYXRoRGF0YS5uYW1lLmZpbmQodSJkb25vdHRyYW5zbGF0ZSIpID09IHN0ZDo6c3RyaW5nOjpucG9zOwpAQCAtMjAzLDYgKzIwNywxNiBAQAogICAgICAgICBmaW4uY2xvc2UoKTsKICAgICB9CiAKKyAgICBpZiAob3B0aW9ucy5wc2V1ZG9sb2NhbGl6ZSkgeworICAgICAgICAvLyBHZW5lcmF0ZSBwc2V1ZG8tbG9jYWxpemVkIHN0cmluZ3MgKGVuLVhBIGFuZCBhci1YQikuCisgICAgICAgIC8vIFRoZXNlIGFyZSBjcmVhdGVkIGFzIHdlYWsgc3ltYm9scywgYW5kIGFyZSBvbmx5IGdlbmVyYXRlZCBmcm9tIGRlZmF1bHQgY29uZmlndXJhdGlvbgorICAgICAgICAvLyBzdHJpbmdzIGFuZCBwbHVyYWxzLgorICAgICAgICBQc2V1ZG9sb2NhbGVHZW5lcmF0b3IgcHNldWRvbG9jYWxlR2VuZXJhdG9yOworICAgICAgICBpZiAoIXBzZXVkb2xvY2FsZUdlbmVyYXRvci5jb25zdW1lKGNvbnRleHQsICZ0YWJsZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSBjb21waWxhdGlvbiBwYWNrYWdlIGF0IGxlYXN0LgogICAgIHRhYmxlLmNyZWF0ZVBhY2thZ2UoY29udGV4dC0+Z2V0Q29tcGlsYXRpb25QYWNrYWdlKCkpOwogCkBAIC00MTgsMTggKzQzMiwyNSBAQAogaW50IGNvbXBpbGUoY29uc3Qgc3RkOjp2ZWN0b3I8U3RyaW5nUGllY2U+JiBhcmdzKSB7CiAgICAgQ29tcGlsZU9wdGlvbnMgb3B0aW9uczsKIAotICAgIE1heWJlPHN0ZDo6c3RyaW5nPiBwcm9kdWN0OworICAgIE1heWJlPHN0ZDo6c3RyaW5nPiBwcm9kdWN0TGlzdDsKICAgICBGbGFncyBmbGFncyA9IEZsYWdzKCkKICAgICAgICAgICAgIC5yZXF1aXJlZEZsYWcoIi1vIiwgIk91dHB1dCBwYXRoIiwgJm9wdGlvbnMub3V0cHV0UGF0aCkKLSAgICAgICAgICAgIC5vcHRpb25hbEZsYWcoIi0tcHJvZHVjdCIsICJQcm9kdWN0IHR5cGUgdG8gY29tcGlsZSIsICZwcm9kdWN0KQorICAgICAgICAgICAgLm9wdGlvbmFsRmxhZygiLS1wcm9kdWN0IiwgIkNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHByb2R1Y3QgdHlwZXMgdG8gY29tcGlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9kdWN0TGlzdCkKICAgICAgICAgICAgIC5vcHRpb25hbEZsYWcoIi0tZGlyIiwgIkRpcmVjdG9yeSB0byBzY2FuIGZvciByZXNvdXJjZXMiLCAmb3B0aW9ucy5yZXNEaXIpCisgICAgICAgICAgICAub3B0aW9uYWxTd2l0Y2goIi0tcHNldWRvLWxvY2FsaXplIiwgIkdlbmVyYXRlIHJlc291cmNlcyBmb3IgcHNldWRvLWxvY2FsZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZW4tWEEgYW5kIGFyLVhCKSIsICZvcHRpb25zLnBzZXVkb2xvY2FsaXplKQorICAgICAgICAgICAgLm9wdGlvbmFsU3dpdGNoKCItLWxlZ2FjeSIsICJUcmVhdCBlcnJvcnMgdGhhdCB1c2VkIHRvIGJlIHZhbGlkIGluIEFBUFQgYXMgd2FybmluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25zLmxlZ2FjeU1vZGUpCiAgICAgICAgICAgICAub3B0aW9uYWxTd2l0Y2goIi12IiwgIkVuYWJsZXMgdmVyYm9zZSBsb2dnaW5nIiwgJm9wdGlvbnMudmVyYm9zZSk7CiAgICAgaWYgKCFmbGFncy5wYXJzZSgiYWFwdDIgY29tcGlsZSIsIGFyZ3MsICZzdGQ6OmNlcnIpKSB7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgIGlmIChwcm9kdWN0KSB7Ci0gICAgICAgIG9wdGlvbnMucHJvZHVjdCA9IHV0aWw6OnV0ZjhUb1V0ZjE2KHByb2R1Y3QudmFsdWUoKSk7CisgICAgaWYgKHByb2R1Y3RMaXN0KSB7CisgICAgICAgIGZvciAoU3RyaW5nUGllY2UgcGFydCA6IHV0aWw6OnRva2VuaXplPGNoYXI+KHByb2R1Y3RMaXN0LnZhbHVlKCksICcsJykpIHsKKyAgICAgICAgICAgIG9wdGlvbnMucHJvZHVjdHMucHVzaF9iYWNrKHV0aWw6OnV0ZjhUb1V0ZjE2KHBhcnQpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIENvbXBpbGVDb250ZXh0IGNvbnRleHQ7CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvci5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2M2QxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2FhcHQyL2NvbXBpbGUvUHNldWRvbG9jYWxlR2VuZXJhdG9yLmNwcApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VWYWx1ZXMuaCIKKyNpbmNsdWRlICJWYWx1ZVZpc2l0b3IuaCIKKyNpbmNsdWRlICJjb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgImNvbXBpbGUvUHNldWRvbG9jYWxpemVyLmgiCisjaW5jbHVkZSAidXRpbC9Db21wYXJhdG9ycy5oIgorCituYW1lc3BhY2UgYWFwdCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxTdHlsZWRTdHJpbmc+IHBzZXVkb2xvY2FsaXplU3R5bGVkU3RyaW5nKFN0eWxlZFN0cmluZyogc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2QgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUG9vbCogcG9vbCkgeworICAgIFBzZXVkb2xvY2FsaXplciBsb2NhbGl6ZXIobWV0aG9kKTsKKworICAgIGNvbnN0IFN0cmluZ1BpZWNlMTYgb3JpZ2luYWxUZXh0ID0gKnN0cmluZy0+dmFsdWUtPnN0cjsKKworICAgIFN0eWxlU3RyaW5nIGxvY2FsaXplZDsKKworICAgIC8vIENvcHkgdGhlIHNwYW5zLiBXZSB3aWxsIHVwZGF0ZSB0aGVpciBvZmZzZXRzIHdoZW4gd2UgbG9jYWxpemUuCisgICAgbG9jYWxpemVkLnNwYW5zLnJlc2VydmUoc3RyaW5nLT52YWx1ZS0+c3BhbnMuc2l6ZSgpKTsKKyAgICBmb3IgKGNvbnN0IFN0cmluZ1Bvb2w6OlNwYW4mIHNwYW4gOiBzdHJpbmctPnZhbHVlLT5zcGFucykgeworICAgICAgICBsb2NhbGl6ZWQuc3BhbnMucHVzaF9iYWNrKFNwYW57ICpzcGFuLm5hbWUsIHNwYW4uZmlyc3RDaGFyLCBzcGFuLmxhc3RDaGFyIH0pOworICAgIH0KKworICAgIC8vIFRoZSByYW5nZXMgYXJlIGFsbCByZXByZXNlbnRlZCB3aXRoIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGlzIHRoZSBzdGFydCBvZiBvbmUgcmFuZ2UgYW5kCisgICAgLy8gZW5kIG9mIGFub3RoZXIuCisgICAgc3RydWN0IFJhbmdlIHsKKyAgICAgICAgc2l6ZV90IHN0YXJ0OworCisgICAgICAgIC8vIE9uY2UgdGhlIG5ldyBzdHJpbmcgaXMgbG9jYWxpemVkLCB0aGVzZSBhcmUgdGhlIHBvaW50ZXJzIHRvIHRoZSBzcGFucyB0byBhZGp1c3QuCisgICAgICAgIC8vIFNpbmNlIHRoaXMgc3RydWN0IHJlcHJlc2VudHMgdGhlIHN0YXJ0IG9mIG9uZSByYW5nZSBhbmQgZW5kIG9mIGFub3RoZXIsIHdlIGhhdmUKKyAgICAgICAgLy8gdGhlIHR3byBwb2ludGVycyByZXNwZWN0aXZlbHkuCisgICAgICAgIHVpbnQzMl90KiB1cGRhdGVTdGFydDsKKyAgICAgICAgdWludDMyX3QqIHVwZGF0ZUVuZDsKKyAgICB9OworCisgICAgYXV0byBjbXAgPSBbXShjb25zdCBSYW5nZSYgciwgc2l6ZV90IGluZGV4KSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIHIuc3RhcnQgPCBpbmRleDsKKyAgICB9OworCisgICAgLy8gQ29uc3RydWN0IHRoZSByYW5nZXMuIFRoZSByYW5nZXMgYXJlIHJlcHJlc2VudGVkIGxpa2Ugc286IFswLCAyLCA1LCA3XQorICAgIC8vIFRoZSByYW5nZXMgYXJlIHRoZSBzcGFjZXMgaW4gYmV0d2Vlbi4gSW4gdGhpcyBleGFtcGxlLCB3aXRoIGEgdG90YWwgc3RyaW5nIGxlbmd0aCBvZiA5LAorICAgIC8vIHRoZSB2ZWN0b3IgcmVwcmVzZW50czogKDAsMV0sICgyLDRdLCAoNSw2XSwgKDcsOV0KKyAgICAvLworICAgIHN0ZDo6dmVjdG9yPFJhbmdlPiByYW5nZXM7CisgICAgcmFuZ2VzLnB1c2hfYmFjayhSYW5nZXsgMCB9KTsKKyAgICByYW5nZXMucHVzaF9iYWNrKFJhbmdleyBvcmlnaW5hbFRleHQuc2l6ZSgpIC0gMSB9KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy0+dmFsdWUtPnNwYW5zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFN0cmluZ1Bvb2w6OlNwYW4mIHNwYW4gPSBzdHJpbmctPnZhbHVlLT5zcGFuc1tpXTsKKworICAgICAgICAvLyBJbnNlcnQgb3IgdXBkYXRlIHRoZSBSYW5nZSBtYXJrZXIgZm9yIHRoZSBzdGFydCBvZiB0aGlzIHNwYW4uCisgICAgICAgIGF1dG8gaXRlciA9IHN0ZDo6bG93ZXJfYm91bmQocmFuZ2VzLmJlZ2luKCksIHJhbmdlcy5lbmQoKSwgc3Bhbi5maXJzdENoYXIsIGNtcCk7CisgICAgICAgIGlmIChpdGVyICE9IHJhbmdlcy5lbmQoKSAmJiBpdGVyLT5zdGFydCA9PSBzcGFuLmZpcnN0Q2hhcikgeworICAgICAgICAgICAgaXRlci0+dXBkYXRlU3RhcnQgPSAmbG9jYWxpemVkLnNwYW5zW2ldLmZpcnN0Q2hhcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZ2V7IHNwYW4uZmlyc3RDaGFyLCAmbG9jYWxpemVkLnNwYW5zW2ldLmZpcnN0Q2hhciwgbnVsbHB0ciB9KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluc2VydCBvciB1cGRhdGUgdGhlIFJhbmdlIG1hcmtlciBmb3IgdGhlIGVuZCBvZiB0aGlzIHNwYW4uCisgICAgICAgIGl0ZXIgPSBzdGQ6Omxvd2VyX2JvdW5kKHJhbmdlcy5iZWdpbigpLCByYW5nZXMuZW5kKCksIHNwYW4ubGFzdENoYXIsIGNtcCk7CisgICAgICAgIGlmIChpdGVyICE9IHJhbmdlcy5lbmQoKSAmJiBpdGVyLT5zdGFydCA9PSBzcGFuLmxhc3RDaGFyKSB7CisgICAgICAgICAgICBpdGVyLT51cGRhdGVFbmQgPSAmbG9jYWxpemVkLnNwYW5zW2ldLmxhc3RDaGFyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmFuZ2VzLmluc2VydChpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZXsgc3Bhbi5sYXN0Q2hhciwgbnVsbHB0ciwgJmxvY2FsaXplZC5zcGFuc1tpXS5sYXN0Q2hhciB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxvY2FsaXplZC5zdHIgKz0gbG9jYWxpemVyLnN0YXJ0KCk7CisKKyAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHJhbmdlcyBhbmQgbG9jYWxpemUgZWFjaCBzZWN0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmFuZ2VzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IHNpemVfdCBzdGFydCA9IHJhbmdlc1tpXS5zdGFydDsKKyAgICAgICAgc2l6ZV90IGxlbiA9IG9yaWdpbmFsVGV4dC5zaXplKCkgLSBzdGFydDsKKyAgICAgICAgaWYgKGkgKyAxIDwgcmFuZ2VzLnNpemUoKSkgeworICAgICAgICAgICAgbGVuID0gcmFuZ2VzW2kgKyAxXS5zdGFydCAtIHN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdlc1tpXS51cGRhdGVTdGFydCkgeworICAgICAgICAgICAgKnJhbmdlc1tpXS51cGRhdGVTdGFydCA9IGxvY2FsaXplZC5zdHIuc2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJhbmdlc1tpXS51cGRhdGVFbmQpIHsKKyAgICAgICAgICAgICpyYW5nZXNbaV0udXBkYXRlRW5kID0gbG9jYWxpemVkLnN0ci5zaXplKCk7CisgICAgICAgIH0KKworICAgICAgICBsb2NhbGl6ZWQuc3RyICs9IGxvY2FsaXplci50ZXh0KG9yaWdpbmFsVGV4dC5zdWJzdHIoc3RhcnQsIGxlbikpOworICAgIH0KKworICAgIGxvY2FsaXplZC5zdHIgKz0gbG9jYWxpemVyLmVuZCgpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlZFN0cmluZz4gbG9jYWxpemVkU3RyaW5nID0gdXRpbDo6bWFrZV91bmlxdWU8U3R5bGVkU3RyaW5nPigKKyAgICAgICAgICAgIHBvb2wtPm1ha2VSZWYobG9jYWxpemVkKSk7CisgICAgbG9jYWxpemVkU3RyaW5nLT5zZXRTb3VyY2Uoc3RyaW5nLT5nZXRTb3VyY2UoKSk7CisgICAgcmV0dXJuIGxvY2FsaXplZFN0cmluZzsKK30KKworbmFtZXNwYWNlIHsKKworc3RydWN0IFZpc2l0b3IgOiBwdWJsaWMgUmF3VmFsdWVWaXNpdG9yIHsKKyAgICBTdHJpbmdQb29sKiBtUG9vbDsKKyAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZCBtTWV0aG9kOworICAgIFBzZXVkb2xvY2FsaXplciBtTG9jYWxpemVyOworCisgICAgLy8gRWl0aGVyIHZhbHVlIG9yIGl0ZW0gd2lsbCBiZSBwb3B1bGF0ZWQgdXBvbiB2aXNpdGluZyB0aGUgdmFsdWUuCisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlPiBtVmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEl0ZW0+IG1JdGVtOworCisgICAgVmlzaXRvcihTdHJpbmdQb29sKiBwb29sLCBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZCBtZXRob2QpIDoKKyAgICAgICAgICAgIG1Qb29sKHBvb2wpLCBtTWV0aG9kKG1ldGhvZCksIG1Mb2NhbGl6ZXIobWV0aG9kKSB7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBcnJheSogYXJyYXkpIG92ZXJyaWRlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEFycmF5PiBsb2NhbGl6ZWQgPSB1dGlsOjptYWtlX3VuaXF1ZTxBcnJheT4oKTsKKyAgICAgICAgbG9jYWxpemVkLT5pdGVtcy5yZXNpemUoYXJyYXktPml0ZW1zLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPml0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBWaXNpdG9yIHN1YlZpc2l0b3IobVBvb2wsIG1NZXRob2QpOworICAgICAgICAgICAgYXJyYXktPml0ZW1zW2ldLT5hY2NlcHQoJnN1YlZpc2l0b3IpOworICAgICAgICAgICAgaWYgKHN1YlZpc2l0b3IubUl0ZW0pIHsKKyAgICAgICAgICAgICAgICBsb2NhbGl6ZWQtPml0ZW1zW2ldID0gc3RkOjptb3ZlKHN1YlZpc2l0b3IubUl0ZW0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb2NhbGl6ZWQtPml0ZW1zW2ldID0gc3RkOjp1bmlxdWVfcHRyPEl0ZW0+KGFycmF5LT5pdGVtc1tpXS0+Y2xvbmUobVBvb2wpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2NhbGl6ZWQtPnNldFNvdXJjZShhcnJheS0+Z2V0U291cmNlKCkpOworICAgICAgICBsb2NhbGl6ZWQtPnNldFdlYWsodHJ1ZSk7CisgICAgICAgIG1WYWx1ZSA9IHN0ZDo6bW92ZShsb2NhbGl6ZWQpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoUGx1cmFsKiBwbHVyYWwpIG92ZXJyaWRlIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsdXJhbD4gbG9jYWxpemVkID0gdXRpbDo6bWFrZV91bmlxdWU8UGx1cmFsPigpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsdXJhbC0+dmFsdWVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBWaXNpdG9yIHN1YlZpc2l0b3IobVBvb2wsIG1NZXRob2QpOworICAgICAgICAgICAgaWYgKHBsdXJhbC0+dmFsdWVzW2ldKSB7CisgICAgICAgICAgICAgICAgcGx1cmFsLT52YWx1ZXNbaV0tPmFjY2VwdCgmc3ViVmlzaXRvcik7CisgICAgICAgICAgICAgICAgaWYgKHN1YlZpc2l0b3IubVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZC0+dmFsdWVzW2ldID0gc3RkOjptb3ZlKHN1YlZpc2l0b3IubUl0ZW0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZC0+dmFsdWVzW2ldID0gc3RkOjp1bmlxdWVfcHRyPEl0ZW0+KHBsdXJhbC0+dmFsdWVzW2ldLT5jbG9uZShtUG9vbCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2NhbGl6ZWQtPnNldFNvdXJjZShwbHVyYWwtPmdldFNvdXJjZSgpKTsKKyAgICAgICAgbG9jYWxpemVkLT5zZXRXZWFrKHRydWUpOworICAgICAgICBtVmFsdWUgPSBzdGQ6Om1vdmUobG9jYWxpemVkKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KFN0cmluZyogc3RyaW5nKSBvdmVycmlkZSB7CisgICAgICAgIGlmICghc3RyaW5nLT5pc1RyYW5zbGF0ZWFibGUoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1MTZzdHJpbmcgcmVzdWx0ID0gbUxvY2FsaXplci5zdGFydCgpICsgbUxvY2FsaXplci50ZXh0KCpzdHJpbmctPnZhbHVlKSArCisgICAgICAgICAgICAgICAgbUxvY2FsaXplci5lbmQoKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0cmluZz4gbG9jYWxpemVkID0gdXRpbDo6bWFrZV91bmlxdWU8U3RyaW5nPihtUG9vbC0+bWFrZVJlZihyZXN1bHQpKTsKKyAgICAgICAgbG9jYWxpemVkLT5zZXRTb3VyY2Uoc3RyaW5nLT5nZXRTb3VyY2UoKSk7CisgICAgICAgIGxvY2FsaXplZC0+c2V0V2Vhayh0cnVlKTsKKyAgICAgICAgbUl0ZW0gPSBzdGQ6Om1vdmUobG9jYWxpemVkKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KFN0eWxlZFN0cmluZyogc3RyaW5nKSBvdmVycmlkZSB7CisgICAgICAgIGlmICghc3RyaW5nLT5pc1RyYW5zbGF0ZWFibGUoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbUl0ZW0gPSBwc2V1ZG9sb2NhbGl6ZVN0eWxlZFN0cmluZyhzdHJpbmcsIG1NZXRob2QsIG1Qb29sKTsKKyAgICAgICAgbUl0ZW0tPnNldFdlYWsodHJ1ZSk7CisgICAgfQorfTsKKworQ29uZmlnRGVzY3JpcHRpb24gbW9kaWZ5Q29uZmlnRm9yUHNldWRvTG9jYWxlKGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kIG0pIHsKKyAgICBDb25maWdEZXNjcmlwdGlvbiBtb2RpZmllZCA9IGJhc2U7CisgICAgc3dpdGNoIChtKSB7CisgICAgY2FzZSBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudDoKKyAgICAgICAgbW9kaWZpZWQubGFuZ3VhZ2VbMF0gPSAnZSc7CisgICAgICAgIG1vZGlmaWVkLmxhbmd1YWdlWzFdID0gJ24nOworICAgICAgICBtb2RpZmllZC5jb3VudHJ5WzBdID0gJ1gnOworICAgICAgICBtb2RpZmllZC5jb3VudHJ5WzFdID0gJ0EnOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtCaWRpOgorICAgICAgICBtb2RpZmllZC5sYW5ndWFnZVswXSA9ICdhJzsKKyAgICAgICAgbW9kaWZpZWQubGFuZ3VhZ2VbMV0gPSAncic7CisgICAgICAgIG1vZGlmaWVkLmNvdW50cnlbMF0gPSAnWCc7CisgICAgICAgIG1vZGlmaWVkLmNvdW50cnlbMV0gPSAnQic7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbW9kaWZpZWQ7Cit9CisKK3ZvaWQgcHNldWRvbG9jYWxpemVJZk5lZWRlZChzdGQ6OnZlY3RvcjxSZXNvdXJjZUNvbmZpZ1ZhbHVlPiogY29uZmlnVmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kIG1ldGhvZCwgU3RyaW5nUG9vbCogcG9vbCwgVmFsdWUqIHZhbHVlKSB7CisgICAgVmlzaXRvciB2aXNpdG9yKHBvb2wsIG1ldGhvZCk7CisgICAgdmFsdWUtPmFjY2VwdCgmdmlzaXRvcik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+IGxvY2FsaXplZFZhbHVlOworICAgIGlmICh2aXNpdG9yLm1WYWx1ZSkgeworICAgICAgICBsb2NhbGl6ZWRWYWx1ZSA9IHN0ZDo6bW92ZSh2aXNpdG9yLm1WYWx1ZSk7CisgICAgfSBlbHNlIGlmICh2aXNpdG9yLm1JdGVtKSB7CisgICAgICAgIGxvY2FsaXplZFZhbHVlID0gc3RkOjptb3ZlKHZpc2l0b3IubUl0ZW0pOworICAgIH0KKworICAgIGlmIChsb2NhbGl6ZWRWYWx1ZSkgeworICAgICAgICBDb25maWdEZXNjcmlwdGlvbiBwc2V1ZG9sb2NhbGl6ZWRDb25maWcgPSBtb2RpZnlDb25maWdGb3JQc2V1ZG9Mb2NhbGUoQ29uZmlnRGVzY3JpcHRpb257fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCk7CisgICAgICAgIGF1dG8gaXRlciA9IHN0ZDo6bG93ZXJfYm91bmQoY29uZmlnVmFsdWVzLT5iZWdpbigpLCBjb25maWdWYWx1ZXMtPmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkb2xvY2FsaXplZENvbmZpZywgY21wOjpsZXNzVGhhbkNvbmZpZyk7CisgICAgICAgIGlmIChpdGVyID09IGNvbmZpZ1ZhbHVlcy0+ZW5kKCkgfHwgaXRlci0+Y29uZmlnICE9IHBzZXVkb2xvY2FsaXplZENvbmZpZykgeworICAgICAgICAgICAgLy8gVGhlIHBzZXVkb2xvY2FsaXplZCBjb25maWcgZG9lc24ndCBleGlzdCwgYWRkIGl0LgorICAgICAgICAgICAgY29uZmlnVmFsdWVzLT5pbnNlcnQoaXRlciwgUmVzb3VyY2VDb25maWdWYWx1ZXsgcHNldWRvbG9jYWxpemVkQ29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptb3ZlKGxvY2FsaXplZFZhbHVlKSB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKKworYm9vbCBQc2V1ZG9sb2NhbGVHZW5lcmF0b3I6OmNvbnN1bWUoSUFhcHRDb250ZXh0KiBjb250ZXh0LCBSZXNvdXJjZVRhYmxlKiB0YWJsZSkgeworICAgIGZvciAoYXV0byYgcGFja2FnZSA6IHRhYmxlLT5wYWNrYWdlcykgeworICAgICAgICBmb3IgKGF1dG8mIHR5cGUgOiBwYWNrYWdlLT50eXBlcykgeworICAgICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHR5cGUtPmVudHJpZXMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBzdGQ6Omxvd2VyX2JvdW5kKGVudHJ5LT52YWx1ZXMuYmVnaW4oKSwgZW50cnktPnZhbHVlcy5lbmQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rlc2NyaXB0aW9ue30sIGNtcDo6bGVzc1RoYW5Db25maWcpOworICAgICAgICAgICAgICAgIGlmIChpdGVyICE9IGVudHJ5LT52YWx1ZXMuZW5kKCkgJiYgaXRlci0+Y29uZmlnID09IENvbmZpZ0Rlc2NyaXB0aW9ue30pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT25seSBwc2V1ZG9sb2NhbGl6ZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorCisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBpdGVyYXRvciB3aWxsIGJlIGludmFsaWRhdGVkLCBzbyBncmFiIGEgcG9pbnRlciB0byB0aGUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBvcmlnaW5hbFZhbHVlID0gaXRlci0+dmFsdWUuZ2V0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgcHNldWRvbG9jYWxpemVJZk5lZWRlZCgmZW50cnktPnZhbHVlcywgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhYmxlLT5zdHJpbmdQb29sLCBvcmlnaW5hbFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcHNldWRvbG9jYWxpemVJZk5lZWRlZCgmZW50cnktPnZhbHVlcywgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtCaWRpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWJsZS0+c3RyaW5nUG9vbCwgb3JpZ2luYWxWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBhYXB0CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvci5oIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmJjNTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3IuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBQVBUX0NPTVBJTEVfUFNFVURPTE9DQUxFR0VORVJBVE9SX0gKKyNkZWZpbmUgQUFQVF9DT01QSUxFX1BTRVVET0xPQ0FMRUdFTkVSQVRPUl9ICisKKyNpbmNsdWRlICJTdHJpbmdQb29sLmgiCisjaW5jbHVkZSAiY29tcGlsZS9Qc2V1ZG9sb2NhbGl6ZXIuaCIKKyNpbmNsdWRlICJwcm9jZXNzL0lSZXNvdXJjZVRhYmxlQ29uc3VtZXIuaCIKKworbmFtZXNwYWNlIGFhcHQgeworCitzdGQ6OnVuaXF1ZV9wdHI8U3R5bGVkU3RyaW5nPiBwc2V1ZG9sb2NhbGl6ZVN0eWxlZFN0cmluZyhTdHlsZWRTdHJpbmcqIHN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1Bvb2wqIHBvb2wpOworCitzdHJ1Y3QgUHNldWRvbG9jYWxlR2VuZXJhdG9yIDogcHVibGljIElSZXNvdXJjZVRhYmxlQ29uc3VtZXIgeworICAgIGJvb2wgY29uc3VtZShJQWFwdENvbnRleHQqIGNvbnRleHQsIFJlc291cmNlVGFibGUqIHRhYmxlKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIGFhcHQKKworI2VuZGlmIC8qIEFBUFRfQ09NUElMRV9QU0VVRE9MT0NBTEVHRU5FUkFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3JfdGVzdC5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsZUdlbmVyYXRvcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2I2ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3JfdGVzdC5jcHAKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29tcGlsZS9Qc2V1ZG9sb2NhbGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJ0ZXN0L0J1aWxkZXJzLmgiCisjaW5jbHVkZSAidGVzdC9Db21tb24uaCIKKyNpbmNsdWRlICJ0ZXN0L0NvbnRleHQuaCIKKyNpbmNsdWRlICJ1dGlsL1V0aWwuaCIKKworI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworbmFtZXNwYWNlIGFhcHQgeworCitURVNUKFBzZXVkb2xvY2FsZUdlbmVyYXRvclRlc3QsIFBzZXVkb2xvY2FsaXplU3R5bGVkU3RyaW5nKSB7CisgICAgU3RyaW5nUG9vbCBwb29sOworICAgIFN0eWxlU3RyaW5nIG9yaWdpbmFsU3R5bGU7CisgICAgb3JpZ2luYWxTdHlsZS5zdHIgPSB1IkhlbGxvIHdvcmxkISI7CisgICAgb3JpZ2luYWxTdHlsZS5zcGFucyA9IHsgU3BhbnsgdSJiIiwgMiwgMyB9LCBTcGFueyB1ImIiLCA2LCA3IH0sIFNwYW57IHUiaSIsIDEsIDEwIH0gfTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZWRTdHJpbmc+IG5ld1N0cmluZyA9IHBzZXVkb2xvY2FsaXplU3R5bGVkU3RyaW5nKAorICAgICAgICAgICAgdXRpbDo6bWFrZV91bmlxdWU8U3R5bGVkU3RyaW5nPihwb29sLm1ha2VSZWYob3JpZ2luYWxTdHlsZSkpLmdldCgpLAorICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtOb25lLCAmcG9vbCk7CisKKyAgICBFWFBFQ1RfRVEob3JpZ2luYWxTdHlsZS5zdHIsICpuZXdTdHJpbmctPnZhbHVlLT5zdHIpOworICAgIEFTU0VSVF9FUShvcmlnaW5hbFN0eWxlLnNwYW5zLnNpemUoKSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgydSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMF0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoM3UsIG5ld1N0cmluZy0+dmFsdWUtPnNwYW5zWzBdLmxhc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjp1MTZzdHJpbmcodSJiIiksICpuZXdTdHJpbmctPnZhbHVlLT5zcGFuc1swXS5uYW1lKTsKKworICAgIEVYUEVDVF9FUSg2dSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMV0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoN3UsIG5ld1N0cmluZy0+dmFsdWUtPnNwYW5zWzFdLmxhc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoc3RkOjp1MTZzdHJpbmcodSJiIiksICpuZXdTdHJpbmctPnZhbHVlLT5zcGFuc1sxXS5uYW1lKTsKKworICAgIEVYUEVDVF9FUSgxdSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMl0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoMTB1LCBuZXdTdHJpbmctPnZhbHVlLT5zcGFuc1syXS5sYXN0Q2hhcik7CisgICAgRVhQRUNUX0VRKHN0ZDo6dTE2c3RyaW5nKHUiaSIpLCAqbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMl0ubmFtZSk7CisKKyAgICBvcmlnaW5hbFN0eWxlLnNwYW5zLnB1c2hfYmFjayhTcGFueyB1ImVtIiwgMCwgMTF1IH0pOworCisgICAgbmV3U3RyaW5nID0gcHNldWRvbG9jYWxpemVTdHlsZWRTdHJpbmcoCisgICAgICAgICAgICB1dGlsOjptYWtlX3VuaXF1ZTxTdHlsZWRTdHJpbmc+KHBvb2wubWFrZVJlZihvcmlnaW5hbFN0eWxlKSkuZ2V0KCksCisgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCwgJnBvb2wpOworCisgICAgRVhQRUNUX0VRKHN0ZDo6dTE2c3RyaW5nKHUiW8Skw6nEvMS8w7YgxbXDtsWVxLzDsMKhIG9uZSB0d29dIiksICpuZXdTdHJpbmctPnZhbHVlLT5zdHIpOworICAgIEFTU0VSVF9FUShvcmlnaW5hbFN0eWxlLnNwYW5zLnNpemUoKSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnMuc2l6ZSgpKTsKKworICAgIEVYUEVDVF9FUSgzdSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMF0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoNHUsIG5ld1N0cmluZy0+dmFsdWUtPnNwYW5zWzBdLmxhc3RDaGFyKTsKKworICAgIEVYUEVDVF9FUSg3dSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMV0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoOHUsIG5ld1N0cmluZy0+dmFsdWUtPnNwYW5zWzFdLmxhc3RDaGFyKTsKKworICAgIEVYUEVDVF9FUSgydSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbMl0uZmlyc3RDaGFyKTsKKyAgICBFWFBFQ1RfRVEoMTF1LCBuZXdTdHJpbmctPnZhbHVlLT5zcGFuc1syXS5sYXN0Q2hhcik7CisKKyAgICBFWFBFQ1RfRVEoMXUsIG5ld1N0cmluZy0+dmFsdWUtPnNwYW5zWzNdLmZpcnN0Q2hhcik7CisgICAgRVhQRUNUX0VRKDEydSwgbmV3U3RyaW5nLT52YWx1ZS0+c3BhbnNbM10ubGFzdENoYXIpOworfQorCitURVNUKFBzZXVkb2xvY2FsZUdlbmVyYXRvclRlc3QsIFBzZXVkb2xvY2FsaXplT25seURlZmF1bHRDb25maWdzKSB7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlVGFibGU+IHRhYmxlID0gdGVzdDo6UmVzb3VyY2VUYWJsZUJ1aWxkZXIoKQorICAgICAgICAgICAgLmFkZFN0cmluZyh1IkBhbmRyb2lkOnN0cmluZy9vbmUiLCB1Im9uZSIpCisgICAgICAgICAgICAuYWRkU3RyaW5nKHUiQGFuZHJvaWQ6c3RyaW5nL3R3byIsIFJlc291cmNlSWR7fSwgdGVzdDo6cGFyc2VDb25maWdPckRpZSgiZW4iKSwgdSJ0d28iKQorICAgICAgICAgICAgLmFkZFN0cmluZyh1IkBhbmRyb2lkOnN0cmluZy90aHJlZSIsIHUidGhyZWUiKQorICAgICAgICAgICAgLmFkZFN0cmluZyh1IkBhbmRyb2lkOnN0cmluZy90aHJlZSIsIFJlc291cmNlSWR7fSwgdGVzdDo6cGFyc2VDb25maWdPckRpZSgiZW4tclhBIiksCisgICAgICAgICAgICAgICAgICAgICAgIHUidGhyZWUiKQorICAgICAgICAgICAgLmFkZFN0cmluZyh1IkBhbmRyb2lkOnN0cmluZy9mb3VyIiwgdSJmb3VyIikKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgU3RyaW5nKiB2YWwgPSB0ZXN0OjpnZXRWYWx1ZTxTdHJpbmc+KHRhYmxlLmdldCgpLCB1IkBhbmRyb2lkOnN0cmluZy9mb3VyIik7CisgICAgdmFsLT5zZXRUcmFuc2xhdGVhYmxlKGZhbHNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJQWFwdENvbnRleHQ+IGNvbnRleHQgPSB0ZXN0OjpDb250ZXh0QnVpbGRlcigpLmJ1aWxkKCk7CisgICAgUHNldWRvbG9jYWxlR2VuZXJhdG9yIGdlbmVyYXRvcjsKKyAgICBBU1NFUlRfVFJVRShnZW5lcmF0b3IuY29uc3VtZShjb250ZXh0LmdldCgpLCB0YWJsZS5nZXQoKSkpOworCisgICAgLy8gTm9ybWFsIHBzZXVkb2xvY2FsaXphdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgdGVzdDo6Z2V0VmFsdWVGb3JDb25maWc8U3RyaW5nPih0YWJsZS5nZXQoKSwgdSJAYW5kcm9pZDpzdHJpbmcvb25lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OjpwYXJzZUNvbmZpZ09yRGllKCJlbi1yWEEiKSkpOworICAgIEFTU0VSVF9ORShudWxscHRyLCB0ZXN0OjpnZXRWYWx1ZUZvckNvbmZpZzxTdHJpbmc+KHRhYmxlLmdldCgpLCB1IkBhbmRyb2lkOnN0cmluZy9vbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6OnBhcnNlQ29uZmlnT3JEaWUoImFyLXJYQiIpKSk7CisKKyAgICAvLyBObyBkZWZhdWx0IGNvbmZpZyBmb3IgYW5kcm9pZDpzdHJpbmcvdHdvLCBzbyBubyBwc2V1ZGxvY2FsZXMgc2hvdWxkIGV4aXN0LgorICAgIEFTU0VSVF9FUShudWxscHRyLCB0ZXN0OjpnZXRWYWx1ZUZvckNvbmZpZzxTdHJpbmc+KHRhYmxlLmdldCgpLCB1IkBhbmRyb2lkOnN0cmluZy90d28iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6OnBhcnNlQ29uZmlnT3JEaWUoImVuLXJYQSIpKSk7CisgICAgQVNTRVJUX0VRKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlRm9yQ29uZmlnPFN0cmluZz4odGFibGUuZ2V0KCksIHUiQGFuZHJvaWQ6c3RyaW5nL3R3byIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDo6cGFyc2VDb25maWdPckRpZSgiYXItclhCIikpKTsKKworCisgICAgLy8gQ2hlY2sgdGhhdCB3ZSBkaWRuJ3Qgb3ZlcnJpZGUgbWFudWFsIHBzZXVkb2xvY2FsaXphdGlvbi4KKyAgICB2YWwgPSB0ZXN0OjpnZXRWYWx1ZUZvckNvbmZpZzxTdHJpbmc+KHRhYmxlLmdldCgpLCB1IkBhbmRyb2lkOnN0cmluZy90aHJlZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OjpwYXJzZUNvbmZpZ09yRGllKCJlbi1yWEEiKSk7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIHZhbCk7CisgICAgRVhQRUNUX0VRKHN0ZDo6dTE2c3RyaW5nKHUidGhyZWUiKSwgKnZhbC0+dmFsdWUpOworCisgICAgQVNTRVJUX05FKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlRm9yQ29uZmlnPFN0cmluZz4odGFibGUuZ2V0KCksIHUiQGFuZHJvaWQ6c3RyaW5nL3RocmVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OjpwYXJzZUNvbmZpZ09yRGllKCJhci1yWEIiKSkpOworCisgICAgLy8gQ2hlY2sgdGhhdCBmb3VyJ3MgdHJhbnNsYXRlYWJsZSBtYXJrZXIgd2FzIGhvbm9yZWQuCisgICAgQVNTRVJUX0VRKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlRm9yQ29uZmlnPFN0cmluZz4odGFibGUuZ2V0KCksIHUiQGFuZHJvaWQ6c3RyaW5nL2ZvdXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6OnBhcnNlQ29uZmlnT3JEaWUoImVuLXJYQSIpKSk7CisgICAgQVNTRVJUX0VRKG51bGxwdHIsIHRlc3Q6OmdldFZhbHVlRm9yQ29uZmlnPFN0cmluZz4odGFibGUuZ2V0KCksIHUiQGFuZHJvaWQ6c3RyaW5nL2ZvdXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6OnBhcnNlQ29uZmlnT3JEaWUoImFyLXJYQiIpKSk7CisKK30KKworfSAvLyBuYW1lc3BhY2UgYWFwdAorCmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsaXplci5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlNTJkNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2FhcHQyL2NvbXBpbGUvUHNldWRvbG9jYWxpemVyLmNwcApAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJjb21waWxlL1BzZXVkb2xvY2FsaXplci5oIgorI2luY2x1ZGUgInV0aWwvVXRpbC5oIgorCituYW1lc3BhY2UgYWFwdCB7CisKKy8vIFN0cmluZyBiYXNpcyB0byBnZW5lcmF0ZSBleHBhbnNpb24KK3N0YXRpYyBjb25zdCBzdGQ6OnUxNnN0cmluZyBrX2V4cGFuc2lvbl9zdHJpbmcgPSB1Im9uZSB0d28gdGhyZWUgIgorICAgICAgICAiZm91ciBmaXZlIHNpeCBzZXZlbiBlaWdodCBuaW5lIHRlbiBlbGV2ZW4gdHdlbHZlIHRoaXJ0ZWVuICIKKyAgICAgICAgImZvdXJ0ZWVuIGZpdmV0ZWVuIHNpeHRlZW4gc2V2ZW50ZWVuIG5pbmV0ZWVuIHR3ZW50eSI7CisKKy8vIFNwZWNpYWwgdW5pY29kZSBjaGFyYWN0ZXJzIHRvIG92ZXJyaWRlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSB3b3Jkcworc3RhdGljIGNvbnN0IHN0ZDo6dTE2c3RyaW5nIGtfcmxtID0gdSJcdTIwMGYiOworc3RhdGljIGNvbnN0IHN0ZDo6dTE2c3RyaW5nIGtfcmxvID0gdSJcdTIwMmUiOworc3RhdGljIGNvbnN0IHN0ZDo6dTE2c3RyaW5nIGtfcGRmID0gdSJcdTIwMmMiOworCisvLyBQbGFjZWhvbGRlciBtYXJrcworc3RhdGljIGNvbnN0IHN0ZDo6dTE2c3RyaW5nIGtfcGxhY2Vob2xkZXJfb3BlbiA9IHUiXHUwMGJiIjsKK3N0YXRpYyBjb25zdCBzdGQ6OnUxNnN0cmluZyBrX3BsYWNlaG9sZGVyX2Nsb3NlID0gdSJcdTAwYWIiOworCitzdGF0aWMgY29uc3QgY2hhcjE2X3Qga19hcmdfc3RhcnQgPSB1J3snOworc3RhdGljIGNvbnN0IGNoYXIxNl90IGtfYXJnX2VuZCA9IHUnfSc7CisKK2NsYXNzIFBzZXVkb01ldGhvZE5vbmUgOiBwdWJsaWMgUHNldWRvTWV0aG9kSW1wbCB7CitwdWJsaWM6CisgICAgc3RkOjp1MTZzdHJpbmcgdGV4dChjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZSB7IHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7IH0KKyAgICBzdGQ6OnUxNnN0cmluZyBwbGFjZWhvbGRlcihjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZSB7IHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7IH0KK307CisKK2NsYXNzIFBzZXVkb01ldGhvZEJpZGkgOiBwdWJsaWMgUHNldWRvTWV0aG9kSW1wbCB7CitwdWJsaWM6CisgICAgc3RkOjp1MTZzdHJpbmcgdGV4dChjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZTsKKyAgICBzdGQ6OnUxNnN0cmluZyBwbGFjZWhvbGRlcihjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZTsKK307CisKK2NsYXNzIFBzZXVkb01ldGhvZEFjY2VudCA6IHB1YmxpYyBQc2V1ZG9NZXRob2RJbXBsIHsKK3B1YmxpYzoKKyAgICBQc2V1ZG9NZXRob2RBY2NlbnQoKSA6IG1EZXB0aCgwKSwgbVdvcmRDb3VudCgwKSwgbUxlbmd0aCgwKSB7fQorICAgIHN0ZDo6dTE2c3RyaW5nIHN0YXJ0KCkgb3ZlcnJpZGU7CisgICAgc3RkOjp1MTZzdHJpbmcgZW5kKCkgb3ZlcnJpZGU7CisgICAgc3RkOjp1MTZzdHJpbmcgdGV4dChjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZTsKKyAgICBzdGQ6OnUxNnN0cmluZyBwbGFjZWhvbGRlcihjb25zdCBTdHJpbmdQaWVjZTE2JiB0ZXh0KSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgc2l6ZV90IG1EZXB0aDsKKyAgICBzaXplX3QgbVdvcmRDb3VudDsKKyAgICBzaXplX3QgbUxlbmd0aDsKK307CisKK1BzZXVkb2xvY2FsaXplcjo6UHNldWRvbG9jYWxpemVyKE1ldGhvZCBtZXRob2QpIDogbUxhc3REZXB0aCgwKSB7CisgICAgc2V0TWV0aG9kKG1ldGhvZCk7Cit9CisKK3ZvaWQgUHNldWRvbG9jYWxpemVyOjpzZXRNZXRob2QoTWV0aG9kIG1ldGhvZCkgeworICAgIHN3aXRjaCAobWV0aG9kKSB7CisgICAgY2FzZSBNZXRob2Q6OmtOb25lOgorICAgICAgICBtSW1wbCA9IHV0aWw6Om1ha2VfdW5pcXVlPFBzZXVkb01ldGhvZE5vbmU+KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWV0aG9kOjprQWNjZW50OgorICAgICAgICBtSW1wbCA9IHV0aWw6Om1ha2VfdW5pcXVlPFBzZXVkb01ldGhvZEFjY2VudD4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZXRob2Q6OmtCaWRpOgorICAgICAgICBtSW1wbCA9IHV0aWw6Om1ha2VfdW5pcXVlPFBzZXVkb01ldGhvZEJpZGk+KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RkOjp1MTZzdHJpbmcgUHNldWRvbG9jYWxpemVyOjp0ZXh0KGNvbnN0IFN0cmluZ1BpZWNlMTYmIHRleHQpIHsKKyAgICBzdGQ6OnUxNnN0cmluZyBvdXQ7CisgICAgc2l6ZV90IGRlcHRoID0gbUxhc3REZXB0aDsKKyAgICBzaXplX3QgbGFzdHBvcywgcG9zOworICAgIGNvbnN0IHNpemVfdCBsZW5ndGggPSB0ZXh0LnNpemUoKTsKKyAgICBjb25zdCBjaGFyMTZfdCogc3RyID0gdGV4dC5kYXRhKCk7CisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7CisgICAgZm9yIChsYXN0cG9zID0gcG9zID0gMDsgcG9zIDwgbGVuZ3RoOyBwb3MrKykgeworICAgICAgICBjaGFyMTZfdCBjID0gc3RyW3Bvc107CisgICAgICAgIGlmIChlc2NhcGVkKSB7CisgICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYyA9PSAnXCcnKSB7CisgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGMgPT0ga19hcmdfc3RhcnQpIHsKKyAgICAgICAgICAgIGRlcHRoKys7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBrX2FyZ19lbmQgJiYgZGVwdGgpIHsKKyAgICAgICAgICAgIGRlcHRoLS07CisgICAgICAgIH0KKworICAgICAgICBpZiAobUxhc3REZXB0aCAhPSBkZXB0aCB8fCBwb3MgPT0gbGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgYm9vbCBwc2V1ZG8gPSAoKG1MYXN0RGVwdGggJSAyKSA9PSAwKTsKKyAgICAgICAgICAgIHNpemVfdCBuZXh0cG9zID0gcG9zOworICAgICAgICAgICAgaWYgKCFwc2V1ZG8gfHwgZGVwdGggPT0gbUxhc3REZXB0aCkgeworICAgICAgICAgICAgICAgIG5leHRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gbmV4dHBvcyAtIGxhc3Rwb3M7CisgICAgICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dTE2c3RyaW5nIGNodW5rID0gdGV4dC5zdWJzdHIobGFzdHBvcywgc2l6ZSkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAocHNldWRvKSB7CisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gbUltcGwtPnRleHQoY2h1bmspOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyW2xhc3Rwb3NdID09IGtfYXJnX3N0YXJ0ICYmIHN0cltuZXh0cG9zIC0gMV0gPT0ga19hcmdfZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gbUltcGwtPnBsYWNlaG9sZGVyKGNodW5rKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChjaHVuayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHNldWRvICYmIGRlcHRoIDwgbUxhc3REZXB0aCkgeyAvLyBFbmQgb2YgbWVzc2FnZQorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQobUltcGwtPmVuZCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIXBzZXVkbyAmJiBkZXB0aCA+IG1MYXN0RGVwdGgpIHsgLy8gU3RhcnQgb2YgbWVzc2FnZQorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQobUltcGwtPnN0YXJ0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdHBvcyA9IG5leHRwb3M7CisgICAgICAgICAgICBtTGFzdERlcHRoID0gZGVwdGg7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG91dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIxNl90KiBwc2V1ZG9sb2NhbGl6ZUNoYXIoY29uc3QgY2hhcjE2X3QgYykgeworICAgIHN3aXRjaCAoYykgeworICAgICAgICBjYXNlICdhJzogICByZXR1cm4gdSJcdTAwZTUiOworICAgICAgICBjYXNlICdiJzogICByZXR1cm4gdSJcdTAyNTMiOworICAgICAgICBjYXNlICdjJzogICByZXR1cm4gdSJcdTAwZTciOworICAgICAgICBjYXNlICdkJzogICByZXR1cm4gdSJcdTAwZjAiOworICAgICAgICBjYXNlICdlJzogICByZXR1cm4gdSJcdTAwZTkiOworICAgICAgICBjYXNlICdmJzogICByZXR1cm4gdSJcdTAxOTIiOworICAgICAgICBjYXNlICdnJzogICByZXR1cm4gdSJcdTAxMWQiOworICAgICAgICBjYXNlICdoJzogICByZXR1cm4gdSJcdTAxMjUiOworICAgICAgICBjYXNlICdpJzogICByZXR1cm4gdSJcdTAwZWUiOworICAgICAgICBjYXNlICdqJzogICByZXR1cm4gdSJcdTAxMzUiOworICAgICAgICBjYXNlICdrJzogICByZXR1cm4gdSJcdTAxMzciOworICAgICAgICBjYXNlICdsJzogICByZXR1cm4gdSJcdTAxM2MiOworICAgICAgICBjYXNlICdtJzogICByZXR1cm4gdSJcdTFlM2YiOworICAgICAgICBjYXNlICduJzogICByZXR1cm4gdSJcdTAwZjEiOworICAgICAgICBjYXNlICdvJzogICByZXR1cm4gdSJcdTAwZjYiOworICAgICAgICBjYXNlICdwJzogICByZXR1cm4gdSJcdTAwZmUiOworICAgICAgICBjYXNlICdxJzogICByZXR1cm4gdSJcdTAwNTEiOworICAgICAgICBjYXNlICdyJzogICByZXR1cm4gdSJcdTAxNTUiOworICAgICAgICBjYXNlICdzJzogICByZXR1cm4gdSJcdTAxNjEiOworICAgICAgICBjYXNlICd0JzogICByZXR1cm4gdSJcdTAxNjMiOworICAgICAgICBjYXNlICd1JzogICByZXR1cm4gdSJcdTAwZmIiOworICAgICAgICBjYXNlICd2JzogICByZXR1cm4gdSJcdTAwNTYiOworICAgICAgICBjYXNlICd3JzogICByZXR1cm4gdSJcdTAxNzUiOworICAgICAgICBjYXNlICd4JzogICByZXR1cm4gdSJcdTA0NDUiOworICAgICAgICBjYXNlICd5JzogICByZXR1cm4gdSJcdTAwZmQiOworICAgICAgICBjYXNlICd6JzogICByZXR1cm4gdSJcdTAxN2UiOworICAgICAgICBjYXNlICdBJzogICByZXR1cm4gdSJcdTAwYzUiOworICAgICAgICBjYXNlICdCJzogICByZXR1cm4gdSJcdTAzYjIiOworICAgICAgICBjYXNlICdDJzogICByZXR1cm4gdSJcdTAwYzciOworICAgICAgICBjYXNlICdEJzogICByZXR1cm4gdSJcdTAwZDAiOworICAgICAgICBjYXNlICdFJzogICByZXR1cm4gdSJcdTAwYzkiOworICAgICAgICBjYXNlICdHJzogICByZXR1cm4gdSJcdTAxMWMiOworICAgICAgICBjYXNlICdIJzogICByZXR1cm4gdSJcdTAxMjQiOworICAgICAgICBjYXNlICdJJzogICByZXR1cm4gdSJcdTAwY2UiOworICAgICAgICBjYXNlICdKJzogICByZXR1cm4gdSJcdTAxMzQiOworICAgICAgICBjYXNlICdLJzogICByZXR1cm4gdSJcdTAxMzYiOworICAgICAgICBjYXNlICdMJzogICByZXR1cm4gdSJcdTAxM2IiOworICAgICAgICBjYXNlICdNJzogICByZXR1cm4gdSJcdTFlM2UiOworICAgICAgICBjYXNlICdOJzogICByZXR1cm4gdSJcdTAwZDEiOworICAgICAgICBjYXNlICdPJzogICByZXR1cm4gdSJcdTAwZDYiOworICAgICAgICBjYXNlICdQJzogICByZXR1cm4gdSJcdTAwZGUiOworICAgICAgICBjYXNlICdRJzogICByZXR1cm4gdSJcdTAwNzEiOworICAgICAgICBjYXNlICdSJzogICByZXR1cm4gdSJcdTAxNTQiOworICAgICAgICBjYXNlICdTJzogICByZXR1cm4gdSJcdTAxNjAiOworICAgICAgICBjYXNlICdUJzogICByZXR1cm4gdSJcdTAxNjIiOworICAgICAgICBjYXNlICdVJzogICByZXR1cm4gdSJcdTAwZGIiOworICAgICAgICBjYXNlICdWJzogICByZXR1cm4gdSJcdTAzYmQiOworICAgICAgICBjYXNlICdXJzogICByZXR1cm4gdSJcdTAxNzQiOworICAgICAgICBjYXNlICdYJzogICByZXR1cm4gdSJcdTAwZDciOworICAgICAgICBjYXNlICdZJzogICByZXR1cm4gdSJcdTAwZGQiOworICAgICAgICBjYXNlICdaJzogICByZXR1cm4gdSJcdTAxN2QiOworICAgICAgICBjYXNlICchJzogICByZXR1cm4gdSJcdTAwYTEiOworICAgICAgICBjYXNlICc/JzogICByZXR1cm4gdSJcdTAwYmYiOworICAgICAgICBjYXNlICckJzogICByZXR1cm4gdSJcdTIwYWMiOworICAgICAgICBkZWZhdWx0OiAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzUG9zc2libGVOb3JtYWxQbGFjZWhvbGRlckVuZChjb25zdCBjaGFyMTZfdCBjKSB7CisgICAgc3dpdGNoIChjKSB7CisgICAgICAgIGNhc2UgJ3MnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnUyc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdjJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ0MnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnZCc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdvJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ3gnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnWCc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdmJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ2UnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnRSc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdnJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ0cnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnYSc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdBJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ2InOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnQic6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICdoJzogcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgJ0gnOiByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAnJSc6IHJldHVybiB0cnVlOworICAgICAgICBjYXNlICduJzogcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgc3RkOjp1MTZzdHJpbmcgcHNldWRvR2VuZXJhdGVFeHBhbnNpb24oY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCkgeworICAgIHN0ZDo6dTE2c3RyaW5nIHJlc3VsdCA9IGtfZXhwYW5zaW9uX3N0cmluZzsKKyAgICBjb25zdCBjaGFyMTZfdCogcyA9IHJlc3VsdC5kYXRhKCk7CisgICAgaWYgKHJlc3VsdC5zaXplKCkgPCBsZW5ndGgpIHsKKyAgICAgICAgcmVzdWx0ICs9IHUiICI7CisgICAgICAgIHJlc3VsdCArPSBwc2V1ZG9HZW5lcmF0ZUV4cGFuc2lvbihsZW5ndGggLSByZXN1bHQuc2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgZXh0ID0gMDsKKyAgICAgICAgLy8gU2hvdWxkIGNvbnRhaW4gb25seSB3aG9sZSB3b3Jkcywgc28gbG9va2luZyBmb3IgYSBzcGFjZQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gbGVuZ3RoICsgMTsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgKytleHQ7CisgICAgICAgICAgICBpZiAoc1tpXSA9PSAnICcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyKDAsIGxlbmd0aCArIGV4dCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dTE2c3RyaW5nIFBzZXVkb01ldGhvZEFjY2VudDo6c3RhcnQoKSB7CisgICAgc3RkOjp1MTZzdHJpbmcgcmVzdWx0OworICAgIGlmIChtRGVwdGggPT0gMCkgeworICAgICAgICByZXN1bHQgPSB1IlsiOworICAgIH0KKyAgICBtV29yZENvdW50ID0gbUxlbmd0aCA9IDA7CisgICAgbURlcHRoKys7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1MTZzdHJpbmcgUHNldWRvTWV0aG9kQWNjZW50OjplbmQoKSB7CisgICAgc3RkOjp1MTZzdHJpbmcgcmVzdWx0OworICAgIGlmIChtTGVuZ3RoKSB7CisgICAgICAgIHJlc3VsdCArPSB1IiAiOworICAgICAgICByZXN1bHQgKz0gcHNldWRvR2VuZXJhdGVFeHBhbnNpb24obVdvcmRDb3VudCA+IDMgPyBtTGVuZ3RoIDogbUxlbmd0aCAvIDIpOworICAgIH0KKyAgICBtV29yZENvdW50ID0gbUxlbmd0aCA9IDA7CisgICAgbURlcHRoLS07CisgICAgaWYgKG1EZXB0aCA9PSAwKSB7CisgICAgICAgIHJlc3VsdCArPSB1Il0iOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIENvbnZlcnRzIGNoYXJhY3RlcnMgc28gdGhleSBsb29rIGxpa2UgdGhleSd2ZSBiZWVuIGxvY2FsaXplZC4KKyAqCisgKiBOb3RlOiBUaGlzIGxlYXZlcyBwbGFjZWhvbGRlciBzeW50YXggdW50b3VjaGVkLgorICovCitzdGQ6OnUxNnN0cmluZyBQc2V1ZG9NZXRob2RBY2NlbnQ6OnRleHQoY29uc3QgU3RyaW5nUGllY2UxNiYgc291cmNlKQoreworICAgIGNvbnN0IGNoYXIxNl90KiBzID0gc291cmNlLmRhdGEoKTsKKyAgICBzdGQ6OnUxNnN0cmluZyByZXN1bHQ7CisgICAgY29uc3Qgc2l6ZV90IEkgPSBzb3VyY2Uuc2l6ZSgpOworICAgIGJvb2wgbGFzdHNwYWNlID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEk7IGkrKykgeworICAgICAgICBjaGFyMTZfdCBjID0gc1tpXTsKKyAgICAgICAgaWYgKGMgPT0gJyUnKSB7CisgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBzeW50YXgsIG5vIG5lZWQgdG8gcHNldWRvbG9jYWxpemUKKyAgICAgICAgICAgIHN0ZDo6dTE2c3RyaW5nIGNodW5rOworICAgICAgICAgICAgYm9vbCBlbmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNodW5rLmFwcGVuZCgmYywgMSk7CisgICAgICAgICAgICB3aGlsZSAoIWVuZCAmJiBpIDwgSSkgeworICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICBjID0gc1tpXTsKKyAgICAgICAgICAgICAgICBjaHVuay5hcHBlbmQoJmMsIDEpOworICAgICAgICAgICAgICAgIGlmIChpc1Bvc3NpYmxlTm9ybWFsUGxhY2Vob2xkZXJFbmQoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3QnKSB7CisgICAgICAgICAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgICAgICAgICAgYyA9IHNbaV07CisgICAgICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZCgmYywgMSk7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gVHJlYXQgY2h1bmsgYXMgYSBwbGFjZWhvbGRlciB1bmxlc3MgaXQgZW5kcyB3aXRoICUuCisgICAgICAgICAgICByZXN1bHQgKz0gKChjID09ICclJykgPyBjaHVuayA6IHBsYWNlaG9sZGVyKGNodW5rKSk7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnPCcgfHwgYyA9PSAnJicpIHsKKyAgICAgICAgICAgIC8vIGh0bWwgc3ludGF4LCBubyBuZWVkIHRvIHBzZXVkb2xvY2FsaXplCisgICAgICAgICAgICBib29sIHRhZ19jbG9zZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHdoaWxlICghdGFnX2Nsb3NlZCAmJiBpIDwgSSkgeworICAgICAgICAgICAgICAgIGlmIChjID09ICcmJykgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnUxNnN0cmluZyBlc2NhcGVUZXh0OworICAgICAgICAgICAgICAgICAgICBlc2NhcGVUZXh0LmFwcGVuZCgmYywgMSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBodG1sQ29kZVBvcyA9IGk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICghZW5kICYmIGh0bWxDb2RlUG9zIDwgSSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKytodG1sQ29kZVBvczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzW2h0bWxDb2RlUG9zXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZVRleHQuYXBwZW5kKCZjLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFZhbGlkIGh0bWwgY29kZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaHRtbENvZGVQb3M7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcm9uZyBodG1sIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEoKGMgPT0gJyMnIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA+PSAnMCcgJiYgYyA8PSAnOScpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBlc2NhcGVUZXh0OworICAgICAgICAgICAgICAgICAgICBpZiAoZXNjYXBlVGV4dCAhPSB1IiZsdDsiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWdfY2xvc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIHRhZ19jbG9zZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCZjLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJmMsIDEpOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICBjID0gc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwdXJlIHRleHQgdGhhdCBzaG91bGQgYmUgcHNldWRvbG9jYWxpemVkCisgICAgICAgICAgICBjb25zdCBjaGFyMTZfdCogcCA9IHBzZXVkb2xvY2FsaXplQ2hhcihjKTsKKyAgICAgICAgICAgIGlmIChwICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gcDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBzcGFjZSA9IHV0aWw6Omlzc3BhY2UxNihjKTsKKyAgICAgICAgICAgICAgICBpZiAobGFzdHNwYWNlICYmICFzcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBtV29yZENvdW50Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxhc3RzcGFjZSA9IHNwYWNlOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJmMsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ291bnQgb25seSBwc2V1ZG9sb2NhbGl6YWJsZSBjaGFycyBhbmQgZGVsaW1pdGVycworICAgICAgICAgICAgbUxlbmd0aCsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0ZDo6dTE2c3RyaW5nIFBzZXVkb01ldGhvZEFjY2VudDo6cGxhY2Vob2xkZXIoY29uc3QgU3RyaW5nUGllY2UxNiYgc291cmNlKSB7CisgICAgLy8gU3Vycm91bmQgYSBwbGFjZWhvbGRlciB3aXRoIGJyYWNrZXRzCisgICAgcmV0dXJuIGtfcGxhY2Vob2xkZXJfb3BlbiArIHNvdXJjZS50b1N0cmluZygpICsga19wbGFjZWhvbGRlcl9jbG9zZTsKK30KKworc3RkOjp1MTZzdHJpbmcgUHNldWRvTWV0aG9kQmlkaTo6dGV4dChjb25zdCBTdHJpbmdQaWVjZTE2JiBzb3VyY2UpIHsKKyAgICBjb25zdCBjaGFyMTZfdCogcyA9IHNvdXJjZS5kYXRhKCk7CisgICAgc3RkOjp1MTZzdHJpbmcgcmVzdWx0OworICAgIGJvb2wgbGFzdHNwYWNlID0gdHJ1ZTsKKyAgICBib29sIHNwYWNlID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZS5zaXplKCk7IGkrKykgeworICAgICAgICBjaGFyMTZfdCBjID0gc1tpXTsKKyAgICAgICAgc3BhY2UgPSB1dGlsOjppc3NwYWNlMTYoYyk7CisgICAgICAgIGlmIChsYXN0c3BhY2UgJiYgIXNwYWNlKSB7CisgICAgICAgICAgICAvLyBXb3JkIHN0YXJ0CisgICAgICAgICAgICByZXN1bHQgKz0ga19ybG0gKyBrX3JsbzsKKyAgICAgICAgfSBlbHNlIGlmICghbGFzdHNwYWNlICYmIHNwYWNlKSB7CisgICAgICAgICAgICAvLyBXb3JkIGVuZAorICAgICAgICAgICAgcmVzdWx0ICs9IGtfcGRmICsga19ybG07CisgICAgICAgIH0KKyAgICAgICAgbGFzdHNwYWNlID0gc3BhY2U7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJmMsIDEpOworICAgIH0KKyAgICBpZiAoIWxhc3RzcGFjZSkgeworICAgICAgICAvLyBFbmQgb2YgbGFzdCB3b3JkCisgICAgICAgIHJlc3VsdCArPSBrX3BkZiArIGtfcmxtOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnUxNnN0cmluZyBQc2V1ZG9NZXRob2RCaWRpOjpwbGFjZWhvbGRlcihjb25zdCBTdHJpbmdQaWVjZTE2JiBzb3VyY2UpIHsKKyAgICAvLyBTdXJyb3VuZCBhIHBsYWNlaG9sZGVyIHdpdGggZGlyZWN0aW9uYWxpdHkgY2hhbmdlIHNlcXVlbmNlCisgICAgcmV0dXJuIGtfcmxtICsga19ybG8gKyBzb3VyY2UudG9TdHJpbmcoKSArIGtfcGRmICsga19ybG07Cit9CisKK30gLy8gbmFtZXNwYWNlIGFhcHQKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2NvbXBpbGUvUHNldWRvbG9jYWxpemVyLmggYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsaXplci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIEFBUFRfQ09NUElMRV9QU0VVRE9MT0NBTElaRV9ICisjZGVmaW5lIEFBUFRfQ09NUElMRV9QU0VVRE9MT0NBTElaRV9ICisKKyNpbmNsdWRlICJSZXNvdXJjZVZhbHVlcy5oIgorI2luY2x1ZGUgIlN0cmluZ1Bvb2wuaCIKKyNpbmNsdWRlICJ1dGlsL1N0cmluZ1BpZWNlLmgiCisKKyNpbmNsdWRlIDxhbmRyb2lkLWJhc2UvbWFjcm9zLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgYWFwdCB7CisKK2NsYXNzIFBzZXVkb01ldGhvZEltcGwgeworcHVibGljOgorICAgIHZpcnR1YWwgflBzZXVkb01ldGhvZEltcGwoKSB7fQorICAgIHZpcnR1YWwgc3RkOjp1MTZzdHJpbmcgc3RhcnQoKSB7IHJldHVybiB7fTsgfQorICAgIHZpcnR1YWwgc3RkOjp1MTZzdHJpbmcgZW5kKCkgeyByZXR1cm4ge307IH0KKyAgICB2aXJ0dWFsIHN0ZDo6dTE2c3RyaW5nIHRleHQoY29uc3QgU3RyaW5nUGllY2UxNiYgdGV4dCkgPSAwOworICAgIHZpcnR1YWwgc3RkOjp1MTZzdHJpbmcgcGxhY2Vob2xkZXIoY29uc3QgU3RyaW5nUGllY2UxNiYgdGV4dCkgPSAwOworfTsKKworY2xhc3MgUHNldWRvbG9jYWxpemVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIE1ldGhvZCB7CisgICAgICAgIGtOb25lLAorICAgICAgICBrQWNjZW50LAorICAgICAgICBrQmlkaSwKKyAgICB9OworCisgICAgUHNldWRvbG9jYWxpemVyKE1ldGhvZCBtZXRob2QpOworICAgIHZvaWQgc2V0TWV0aG9kKE1ldGhvZCBtZXRob2QpOworICAgIHN0ZDo6dTE2c3RyaW5nIHN0YXJ0KCkgeyByZXR1cm4gbUltcGwtPnN0YXJ0KCk7IH0KKyAgICBzdGQ6OnUxNnN0cmluZyBlbmQoKSB7IHJldHVybiBtSW1wbC0+ZW5kKCk7IH0KKyAgICBzdGQ6OnUxNnN0cmluZyB0ZXh0KGNvbnN0IFN0cmluZ1BpZWNlMTYmIHRleHQpOworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UHNldWRvTWV0aG9kSW1wbD4gbUltcGw7CisgICAgc2l6ZV90IG1MYXN0RGVwdGg7Cit9OworCit9IC8vIG5hbWVzcGFjZSBhYXB0CisKKyNlbmRpZiAvKiBBQVBUX0NPTVBJTEVfUFNFVURPTE9DQUxJWkVfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGl6ZXJfdGVzdC5jcHAgYi90b29scy9hYXB0Mi9jb21waWxlL1BzZXVkb2xvY2FsaXplcl90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGJjMmMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWFwdDIvY29tcGlsZS9Qc2V1ZG9sb2NhbGl6ZXJfdGVzdC5jcHAKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiY29tcGlsZS9Qc2V1ZG9sb2NhbGl6ZXIuaCIKKyNpbmNsdWRlICJ1dGlsL1V0aWwuaCIKKworI2luY2x1ZGUgPGFuZHJvaWRmdy9SZXNvdXJjZVR5cGVzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworbmFtZXNwYWNlIGFhcHQgeworCisvLyBJbiB0aGlzIGNvbnRleHQsICdBeGlzJyByZXByZXNlbnRzIGEgcGFydGljdWxhciBmaWVsZCBpbiB0aGUgY29uZmlndXJhdGlvbiwKKy8vIHN1Y2ggYXMgbGFuZ3VhZ2Ugb3IgZGVuc2l0eS4KKworc3RhdGljIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IHNpbXBsZUhlbHBlcihjb25zdCBjaGFyKiBpbnB1dCwgY29uc3QgY2hhciogZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kIG1ldGhvZCkgeworICAgIFBzZXVkb2xvY2FsaXplciBwc2V1ZG8obWV0aG9kKTsKKyAgICBzdGQ6OnN0cmluZyByZXN1bHQgPSB1dGlsOjp1dGYxNlRvVXRmOCgKKyAgICAgICAgICAgIHBzZXVkby5zdGFydCgpICsgcHNldWRvLnRleHQodXRpbDo6dXRmOFRvVXRmMTYoaW5wdXQpKSArIHBzZXVkby5lbmQoKSk7CisgICAgaWYgKFN0cmluZ1BpZWNlKGV4cGVjdGVkKSAhPSByZXN1bHQpIHsKKyAgICAgICAgcmV0dXJuIDo6dGVzdGluZzo6QXNzZXJ0aW9uRmFpbHVyZSgpIDw8IGV4cGVjdGVkIDw8ICIgIT0gIiA8PCByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiA6OnRlc3Rpbmc6OkFzc2VydGlvblN1Y2Nlc3MoKTsKK30KKworc3RhdGljIDo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IGNvbXBvdW5kSGVscGVyKGNvbnN0IGNoYXIqIGluMSwgY29uc3QgY2hhciogaW4yLCBjb25zdCBjaGFyICppbjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2QgbWV0aG9kKSB7CisgICAgUHNldWRvbG9jYWxpemVyIHBzZXVkbyhtZXRob2QpOworICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IHV0aWw6OnV0ZjE2VG9VdGY4KHBzZXVkby5zdGFydCgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8udGV4dCh1dGlsOjp1dGY4VG9VdGYxNihpbjEpKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvLnRleHQodXRpbDo6dXRmOFRvVXRmMTYoaW4yKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzZXVkby50ZXh0KHV0aWw6OnV0ZjhUb1V0ZjE2KGluMykpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZG8uZW5kKCkpOworICAgIGlmIChTdHJpbmdQaWVjZShleHBlY3RlZCkgIT0gcmVzdWx0KSB7CisgICAgICAgIHJldHVybiA6OnRlc3Rpbmc6OkFzc2VydGlvbkZhaWx1cmUoKSA8PCBleHBlY3RlZCA8PCAiICE9ICIgPDwgcmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25TdWNjZXNzKCk7Cit9CisKK1RFU1QoUHNldWRvbG9jYWxpemVyVGVzdCwgTm9Qc2V1ZG9sb2NhbGl6YXRpb24pIHsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoIiIsICIiLCBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a05vbmUpKTsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoIkhlbGxvLCB3b3JsZCIsICJIZWxsbywgd29ybGQiLCBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a05vbmUpKTsKKworICAgIEVYUEVDVF9UUlVFKGNvbXBvdW5kSGVscGVyKCJIZWxsbywiLCAiIHdvcmxkIiwgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvLCB3b3JsZCIsIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprTm9uZSkpOworfQorCitURVNUKFBzZXVkb2xvY2FsaXplclRlc3QsIFBsYWludGV4dEFjY2VudCkgeworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigiIiwgIltdIiwgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoIkhlbGxvLCB3b3JsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbxKTDqcS8xLzDtiwgxbXDtsWVxLzDsCBvbmUgdHdvXSIsIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7CisKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoIkhlbGxvLCAlMWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW8Skw6nEvMS8w7YsIMK7JTFkwqsgb25lIHR3b10iLCBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworCisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCJCYXR0ZXJ5ICUxZCUlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlvOssOlxaPFo8OpxZXDvSDCuyUxZMKrJSUgb25lIHR3b10iLCBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworCisgICAgRVhQRUNUX1RSVUUoY29tcG91bmRIZWxwZXIoIiIsICIiLCAiIiwgIltdIiwgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wb3VuZEhlbHBlcigiSGVsbG8sIiwgIiB3b3JsZCIsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbxKTDqcS8xLzDtiwgxbXDtsWVxLzDsCBvbmUgdHdvXSIsIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7Cit9CisKK1RFU1QoUHNldWRvbG9jYWxpemVyVGVzdCwgUGxhaW50ZXh0QmlkaSkgeworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigiIiwgIiIsIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQmlkaSkpOworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigid29yZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJceGUyXHg4MFx4OGZceEUyXHg4MFx4YWV3b3JkXHhFMlx4ODBceGFjXHhlMlx4ODBceDhmIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtCaWRpKSk7CisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCIgIHdvcmQgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFx4ZTJceDgwXHg4Zlx4RTJceDgwXHhhZXdvcmRceEUyXHg4MFx4YWNceGUyXHg4MFx4OGYgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQmlkaSkpOworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigiICB3b3JkICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBceGUyXHg4MFx4OGZceEUyXHg4MFx4YWV3b3JkXHhFMlx4ODBceGFjXHhlMlx4ODBceDhmICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0JpZGkpKTsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoImhlbGxvXG4gIHdvcmxkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhlMlx4ODBceDhmXHhFMlx4ODBceGFlaGVsbG9ceEUyXHg4MFx4YWNceGUyXHg4MFx4OGZcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIFx4ZTJceDgwXHg4Zlx4RTJceDgwXHhhZXdvcmxkXHhFMlx4ODBceGFjXHhlMlx4ODBceDhmXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0JpZGkpKTsKKyAgICBFWFBFQ1RfVFJVRShjb21wb3VuZEhlbHBlcigiaGVsbG8iLCAiXG4gIiwgIiB3b3JsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHhlMlx4ODBceDhmXHhFMlx4ODBceGFlaGVsbG9ceEUyXHg4MFx4YWNceGUyXHg4MFx4OGZcbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgXHhlMlx4ODBceDhmXHhFMlx4ODBceGFld29ybGRceEUyXHg4MFx4YWNceGUyXHg4MFx4OGZcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtCaWRpKSk7Cit9CisKK1RFU1QoUHNldWRvbG9jYWxpemVyVGVzdCwgU2ltcGxlSUNVKSB7CisgICAgLy8gU2luZ2xlLWZyYWdtZW50IG1lc3NhZ2VzCisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCJ7cGxhY2Vob2xkZXJ9IiwgIlvCu3twbGFjZWhvbGRlcn3Cq10iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigie1VTRVJ9IGlzIG9mZmxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW8K7e1VTRVJ9wqsgw67FoSDDtsaSxpLEvMOuw7HDqSBvbmUgdHdvXSIsIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7CisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCJDb3B5IGZyb20ge3BhdGgxfSB0byB7cGF0aDJ9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlvDh8O2w77DvSDGksWVw7bhuL8gwrt7cGF0aDF9wqsgxaPDtiDCu3twYXRoMn3CqyBvbmUgdHdvIHRocmVlXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7CisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCJUb2RheSBpcyB7MSxkYXRlfSB7MSx0aW1lfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbxaLDtsOww6XDvSDDrsWhIMK7ezEsZGF0ZX3CqyDCu3sxLHRpbWV9wqsgb25lIHR3b10iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworCisgICAgLy8gTXVsdGktZnJhZ21lbnQgbWVzc2FnZXMKKyAgICBFWFBFQ1RfVFJVRShjb21wb3VuZEhlbHBlcigie1VTRVJ9IiwgIiAiLCAiaXMgb2ZmbGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlvCu3tVU0VSfcKrIMOuxaEgw7bGksaSxLzDrsOxw6kgb25lIHR3b10iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7CisgICAgRVhQRUNUX1RSVUUoY29tcG91bmRIZWxwZXIoIkNvcHkgZnJvbSAiLCAie3BhdGgxfSIsICIgdG8ge3BhdGgyfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlvDh8O2w77DvSDGksWVw7bhuL8gwrt7cGF0aDF9wqsgxaPDtiDCu3twYXRoMn3CqyBvbmUgdHdvIHRocmVlXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKK30KKworVEVTVChQc2V1ZG9sb2NhbGl6ZXJUZXN0LCBJQ1VCaWRpKSB7CisgICAgLy8gU2luZ2xlLWZyYWdtZW50IG1lc3NhZ2VzCisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKCJ7cGxhY2Vob2xkZXJ9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlx4ZTJceDgwXHg4Zlx4RTJceDgwXHhhZXtwbGFjZWhvbGRlcn1ceEUyXHg4MFx4YWNceGUyXHg4MFx4OGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0JpZGkpKTsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoCisgICAgICAgICAgICAie0NPVU5ULCBwbHVyYWwsIG9uZSB7b25lfSBvdGhlciB7b3RoZXJ9fSIsCisgICAgICAgICAgICAie0NPVU5ULCBwbHVyYWwsICIgXAorICAgICAgICAgICAgICAgICAgICAib25lIHtceGUyXHg4MFx4OGZceEUyXHg4MFx4YWVvbmVceEUyXHg4MFx4YWNceGUyXHg4MFx4OGZ9ICIgXAorICAgICAgICAgICAgICAgICAgICAib3RoZXIge1x4ZTJceDgwXHg4Zlx4RTJceDgwXHhhZW90aGVyXHhFMlx4ODBceGFjXHhlMlx4ODBceDhmfX0iLAorICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtCaWRpKSk7Cit9CisKK1RFU1QoUHNldWRvbG9jYWxpemVyVGVzdCwgRXNjYXBpbmcpIHsKKyAgICAvLyBTaW5nbGUtZnJhZ21lbnQgbWVzc2FnZXMKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoIid7VVNFUid9IGlzIG9mZmxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWyd7w5vFoMOJxZQnfSDDrsWhIMO2xpLGksS8w67DscOpIG9uZSB0d28gdGhyZWVdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKKworICAgIC8vIE11bHRpLWZyYWdtZW50IG1lc3NhZ2VzCisgICAgRVhQRUNUX1RSVUUoY29tcG91bmRIZWxwZXIoIid7VVNFUn0iLCAiICIsICInJ2lzIG9mZmxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbJ3vDm8Wgw4nFlH0gJyfDrsWhIMO2xpLGksS8w67DscOpIG9uZSB0d28gdGhyZWVdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworfQorCitURVNUKFBzZXVkb2xvY2FsaXplclRlc3QsIFBsdXJhbHNBbmRTZWxlY3RzKSB7CisgICAgRVhQRUNUX1RSVUUoc2ltcGxlSGVscGVyKAorICAgICAgICAgICAgIntDT1VOVCwgcGx1cmFsLCBvbmUge0RlbGV0ZSBhIGZpbGV9IG90aGVyIHtEZWxldGUge0NPVU5UfSBmaWxlc319IiwKKyAgICAgICAgICAgICJbe0NPVU5ULCBwbHVyYWwsIG9uZSB7w5DDqcS8w6nFo8OpIMOlIMaSw67EvMOpIG9uZSB0d299ICIgXAorICAgICAgICAgICAgICAgICAgICAgIm90aGVyIHvDkMOpxLzDqcWjw6kgwrt7Q09VTlR9wqsgxpLDrsS8w6nFoSBvbmUgdHdvfX1dIiwKKyAgICAgICAgICAgIFBzZXVkb2xvY2FsaXplcjo6TWV0aG9kOjprQWNjZW50KSk7CisKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoCisgICAgICAgICAgICAiRGlzdGFuY2UgaXMge0NPVU5ULCBwbHVyYWwsIG9uZSB7IyBtaWxlfSBvdGhlciB7IyBtaWxlc319IiwKKyAgICAgICAgICAgICJbw5DDrsWhxaPDpcOxw6fDqSDDrsWhIHtDT1VOVCwgcGx1cmFsLCBvbmUgeyMg4bi/w67EvMOpIG9uZSB0d299ICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVyIHsjIOG4v8OuxLzDqcWhIG9uZSB0d299fV0iLAorICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKKworICAgIEVYUEVDVF9UUlVFKHNpbXBsZUhlbHBlcigKKyAgICAgICAgICAgICJ7MSwgc2VsZWN0LCBmZW1hbGUge3sxfSBhZGRlZCB5b3V9ICIgXAorICAgICAgICAgICAgICAgICAgICAibWFsZSB7ezF9IGFkZGVkIHlvdX0gb3RoZXIge3sxfSBhZGRlZCB5b3V9fSIsCisgICAgICAgICAgICAiW3sxLCBzZWxlY3QsIGZlbWFsZSB7wrt7MX3CqyDDpcOww7DDqcOwIMO9w7bDuyBvbmUgdHdvfSAiIFwKKyAgICAgICAgICAgICAgICAgICAgIm1hbGUge8K7ezF9wqsgw6XDsMOww6nDsCDDvcO2w7sgb25lIHR3b30gb3RoZXIge8K7ezF9wqsgw6XDsMOww6nDsCDDvcO2w7sgb25lIHR3b319XSIsCisgICAgICAgICAgICBQc2V1ZG9sb2NhbGl6ZXI6Ok1ldGhvZDo6a0FjY2VudCkpOworCisgICAgRVhQRUNUX1RSVUUoY29tcG91bmRIZWxwZXIoCisgICAgICAgICAgICAie0NPVU5ULCBwbHVyYWwsIG9uZSB7RGVsZXRlIGEgZmlsZX0gIiBcCisgICAgICAgICAgICAgICAgICAgICJvdGhlciB7RGVsZXRlICIsICJ7Q09VTlR9IiwgIiBmaWxlc319IiwKKyAgICAgICAgICAgICJbe0NPVU5ULCBwbHVyYWwsIG9uZSB7w5DDqcS8w6nFo8OpIMOlIMaSw67EvMOpIG9uZSB0d299ICIgXAorICAgICAgICAgICAgICAgICAgICAib3RoZXIge8OQw6nEvMOpxaPDqSDCu3tDT1VOVH3CqyDGksOuxLzDqcWhIG9uZSB0d299fV0iLAorICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKK30KKworVEVTVChQc2V1ZG9sb2NhbGl6ZXJUZXN0LCBOZXN0ZWRJQ1UpIHsKKyAgICBFWFBFQ1RfVFJVRShzaW1wbGVIZWxwZXIoCisgICAgICAgICAgICAie3BlcnNvbiwgc2VsZWN0LCAiIFwKKyAgICAgICAgICAgICAgICAiZmVtYWxlIHsiIFwKKyAgICAgICAgICAgICAgICAgICAgIntudW1fY2lyY2xlcywgcGx1cmFsLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIj0we3twZXJzb259IGRpZG4ndCBhZGQgeW91IHRvIGFueSBvZiBoZXIgY2lyY2xlcy59IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiPTF7e3BlcnNvbn0gYWRkZWQgeW91IHRvIG9uZSBvZiBoZXIgY2lyY2xlcy59IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXJ7e3BlcnNvbn0gYWRkZWQgeW91IHRvIGhlciAjIGNpcmNsZXMufX19IiBcCisgICAgICAgICAgICAgICAgIm1hbGUgeyIgXAorICAgICAgICAgICAgICAgICAgICAie251bV9jaXJjbGVzLCBwbHVyYWwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiPTB7e3BlcnNvbn0gZGlkbid0IGFkZCB5b3UgdG8gYW55IG9mIGhpcyBjaXJjbGVzLn0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICI9MXt7cGVyc29ufSBhZGRlZCB5b3UgdG8gb25lIG9mIGhpcyBjaXJjbGVzLn0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvdGhlcnt7cGVyc29ufSBhZGRlZCB5b3UgdG8gaGlzICMgY2lyY2xlcy59fX0iIFwKKyAgICAgICAgICAgICAgICAib3RoZXIgeyIgXAorICAgICAgICAgICAgICAgICAgICAie251bV9jaXJjbGVzLCBwbHVyYWwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiPTB7e3BlcnNvbn0gZGlkbid0IGFkZCB5b3UgdG8gYW55IG9mIHRoZWlyIGNpcmNsZXMufSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIj0xe3twZXJzb259IGFkZGVkIHlvdSB0byBvbmUgb2YgdGhlaXIgY2lyY2xlcy59IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXJ7e3BlcnNvbn0gYWRkZWQgeW91IHRvIHRoZWlyICMgY2lyY2xlcy59fX19IiwKKyAgICAgICAgICAgICJbe3BlcnNvbiwgc2VsZWN0LCAiIFwKKyAgICAgICAgICAgICAgICAiZmVtYWxlIHsiIFwKKyAgICAgICAgICAgICAgICAgICAgIntudW1fY2lyY2xlcywgcGx1cmFsLCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIj0we8K7e3BlcnNvbn3CqyDDsMOuw7DDsSfFoyDDpcOww7Agw73DtsO7IMWjw7Ygw6XDscO9IMO2xpIgxKXDqcWVIMOnw67FlcOnxLzDqcWhLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb25lIHR3byB0aHJlZSBmb3VyIGZpdmV9IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiPTF7wrt7cGVyc29ufcKrIMOlw7DDsMOpw7Agw73DtsO7IMWjw7Ygw7bDscOpIMO2xpIgxKXDqcWVIMOnw67FlcOnxLzDqcWhLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb25lIHR3byB0aHJlZSBmb3VyfSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIm90aGVye8K7e3BlcnNvbn3CqyDDpcOww7DDqcOwIMO9w7bDuyDFo8O2IMSlw6nFlSAjIMOnw67FlcOnxLzDqcWhLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgb25lIHR3byB0aHJlZSBmb3VyfX19IiBcCisgICAgICAgICAgICAgICAgIm1hbGUgeyIgXAorICAgICAgICAgICAgICAgICAgICAie251bV9jaXJjbGVzLCBwbHVyYWwsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiPTB7wrt7cGVyc29ufcKrIMOww67DsMOxJ8WjIMOlw7DDsCDDvcO2w7sgxaPDtiDDpcOxw70gw7bGkiDEpcOuxaEgw6fDrsWVw6fEvMOpxaEuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZX0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICI9MXvCu3twZXJzb259wqsgw6XDsMOww6nDsCDDvcO2w7sgxaPDtiDDtsOxw6kgw7bGkiDEpcOuxaEgw6fDrsWVw6fEvMOpxaEuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvbmUgdHdvIHRocmVlIGZvdXJ9IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAib3RoZXJ7wrt7cGVyc29ufcKrIMOlw7DDsMOpw7Agw73DtsO7IMWjw7YgxKXDrsWhICMgw6fDrsWVw6fEvMOpxaEuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBvbmUgdHdvIHRocmVlIGZvdXJ9fX0iIFwKKyAgICAgICAgICAgICAgICAib3RoZXIge3tudW1fY2lyY2xlcywgcGx1cmFsLCIgXAorICAgICAgICAgICAgICAgICAgICAiPTB7wrt7cGVyc29ufcKrIMOww67DsMOxJ8WjIMOlw7DDsCDDvcO2w7sgxaPDtiDDpcOxw70gw7bGkiDFo8Slw6nDrsWVIMOnw67FlcOnxLzDqcWhLiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgIiBvbmUgdHdvIHRocmVlIGZvdXIgZml2ZX0iIFwKKyAgICAgICAgICAgICAgICAgICAgIj0xe8K7e3BlcnNvbn3CqyDDpcOww7DDqcOwIMO9w7bDuyDFo8O2IMO2w7HDqSDDtsaSIMWjxKXDqcOuxZUgw6fDrsWVw6fEvMOpxaEuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiIG9uZSB0d28gdGhyZWUgZm91cn0iIFwKKyAgICAgICAgICAgICAgICAgICAgIm90aGVye8K7e3BlcnNvbn3CqyDDpcOww7DDqcOwIMO9w7bDuyDFo8O2IMWjxKXDqcOuxZUgIyDDp8OuxZXDp8S8w6nFoS4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgb25lIHR3byB0aHJlZSBmb3VyfX19fV0iLAorICAgICAgICAgICAgUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpKTsKK30KKworVEVTVChQc2V1ZG9sb2NhbGl6ZXJUZXN0LCBSZWRlZmluZU1ldGhvZCkgeworICAgIFBzZXVkb2xvY2FsaXplciBwc2V1ZG8oUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtBY2NlbnQpOworICAgIHN0ZDo6dTE2c3RyaW5nIHJlc3VsdCA9IHBzZXVkby50ZXh0KHUiSGVsbG8sICIpOworICAgIHBzZXVkby5zZXRNZXRob2QoUHNldWRvbG9jYWxpemVyOjpNZXRob2Q6OmtOb25lKTsKKyAgICByZXN1bHQgKz0gcHNldWRvLnRleHQodSJ3b3JsZCEiKTsKKyAgICBBU1NFUlRfRVEoU3RyaW5nUGllY2UoIsSkw6nEvMS8w7YsIHdvcmxkISIpLCB1dGlsOjp1dGYxNlRvVXRmOChyZXN1bHQpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYWFwdApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvY29tcGlsZS9YbWxJZENvbGxlY3Rvcl90ZXN0LmNwcCBiL3Rvb2xzL2FhcHQyL2NvbXBpbGUvWG1sSWRDb2xsZWN0b3JfdGVzdC5jcHAKaW5kZXggNDViN2FmMi4uYTM3ZWE4NiAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvY29tcGlsZS9YbWxJZENvbGxlY3Rvcl90ZXN0LmNwcAorKysgYi90b29scy9hYXB0Mi9jb21waWxlL1htbElkQ29sbGVjdG9yX3Rlc3QuY3BwCkBAIC0zNywxMyArMzcsMTMgQEAKICAgICBYbWxJZENvbGxlY3RvciBjb2xsZWN0b3I7CiAgICAgQVNTRVJUX1RSVUUoY29sbGVjdG9yLmNvbnN1bWUoY29udGV4dC5nZXQoKSwgZG9jLmdldCgpKSk7CiAKLSAgICBFWFBFQ1RfRVEoMXUsIHN0ZDo6Y291bnQoZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5iZWdpbigpLCBkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmVuZCgpLAorICAgIEVYUEVDVF9FUSgxLCBzdGQ6OmNvdW50KGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuYmVnaW4oKSwgZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlZFJlc291cmNlTmFtZXsgdGVzdDo6cGFyc2VOYW1lT3JEaWUodSJAaWQvZm9vIiksIDN1IH0pKTsKIAotICAgIEVYUEVDVF9FUSgxdSwgc3RkOjpjb3VudChkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmJlZ2luKCksIGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuZW5kKCksCisgICAgRVhQRUNUX0VRKDEsIHN0ZDo6Y291bnQoZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5iZWdpbigpLCBkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VkUmVzb3VyY2VOYW1leyB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBpZC9iYXIiKSwgM3UgfSkpOwogCi0gICAgRVhQRUNUX0VRKDF1LCBzdGQ6OmNvdW50KGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuYmVnaW4oKSwgZG9jLT5maWxlLmV4cG9ydGVkU3ltYm9scy5lbmQoKSwKKyAgICBFWFBFQ1RfRVEoMSwgc3RkOjpjb3VudChkb2MtPmZpbGUuZXhwb3J0ZWRTeW1ib2xzLmJlZ2luKCksIGRvYy0+ZmlsZS5leHBvcnRlZFN5bWJvbHMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZWRSZXNvdXJjZU5hbWV7IHRlc3Q6OnBhcnNlTmFtZU9yRGllKHUiQGlkL2NhciIpLCA2dSB9KSk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2ZsYXR0ZW4vVGFibGVGbGF0dGVuZXIuY3BwIGIvdG9vbHMvYWFwdDIvZmxhdHRlbi9UYWJsZUZsYXR0ZW5lci5jcHAKaW5kZXggNDZlZTkxNC4uMjZkN2MyYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvZmxhdHRlbi9UYWJsZUZsYXR0ZW5lci5jcHAKKysrIGIvdG9vbHMvYWFwdDIvZmxhdHRlbi9UYWJsZUZsYXR0ZW5lci5jcHAKQEAgLTExMyw4ICsxMTMsNyBAQAogICAgIGJvb2wgbVVzZUV4dGVuZGVkQ2h1bmtzOwogCiAgICAgc2l6ZV90IG1FbnRyeUNvdW50ID0gMDsKLSAgICBNYXliZTx1aW50MzJfdD4gbVBhcmVudElkZW50OwotICAgIE1heWJlPFJlc291cmNlTmFtZVJlZj4gbVBhcmVudE5hbWU7CisgICAgY29uc3QgUmVmZXJlbmNlKiBtUGFyZW50ID0gbnVsbHB0cjsKIAogICAgIE1hcEZsYXR0ZW5WaXNpdG9yKFN5bWJvbFdyaXRlciogc3ltYm9scywgRmxhdEVudHJ5KiBlbnRyeSwgQmlnQnVmZmVyKiBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nUG9vbCogc291cmNlUG9vbCwgU3RyaW5nUG9vbCogY29tbWVudFBvb2wsCkBAIC0yMjcsMTMgKzIyNiw4IEBACiAKICAgICB2b2lkIHZpc2l0KFN0eWxlKiBzdHlsZSkgb3ZlcnJpZGUgewogICAgICAgICBpZiAoc3R5bGUtPnBhcmVudCkgewotICAgICAgICAgICAgYm9vbCBwcml2YXRlUmVmID0gc3R5bGUtPnBhcmVudC52YWx1ZSgpLnByaXZhdGVSZWZlcmVuY2UgJiYgbVVzZUV4dGVuZGVkQ2h1bmtzOwotICAgICAgICAgICAgaWYgKCFzdHlsZS0+cGFyZW50LnZhbHVlKCkuaWQgfHwgcHJpdmF0ZVJlZikgewotICAgICAgICAgICAgICAgIGFzc2VydChzdHlsZS0+cGFyZW50LnZhbHVlKCkubmFtZSAmJiAicmVmZXJlbmNlIG11c3QgaGF2ZSBhIG5hbWUiKTsKLSAgICAgICAgICAgICAgICBtUGFyZW50TmFtZSA9IHN0eWxlLT5wYXJlbnQudmFsdWUoKS5uYW1lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtUGFyZW50SWRlbnQgPSBzdHlsZS0+cGFyZW50LnZhbHVlKCkuaWQudmFsdWUoKS5pZDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFBhcmVudHMgYXJlIHRyZWF0ZWQgYSBiaXQgZGlmZmVyZW50bHksIHNvIHJlY29yZCB0aGUgZXhpc3RlbmNlIGFuZCBtb3ZlIG9uLgorICAgICAgICAgICAgbVBhcmVudCA9ICZzdHlsZS0+cGFyZW50LnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTb3J0IHRoZSBzdHlsZS4KQEAgLTQyNywxMSArNDIxLDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1PcHRpb25zLnVzZUV4dGVuZGVkQ2h1bmtzKTsKICAgICAgICAgICAgIGVudHJ5LT52YWx1ZS0+YWNjZXB0KCZ2aXNpdG9yKTsKICAgICAgICAgICAgIG91dEVudHJ5LT5jb3VudCA9IHV0aWw6Omhvc3RUb0RldmljZTMyKHZpc2l0b3IubUVudHJ5Q291bnQpOwotICAgICAgICAgICAgaWYgKHZpc2l0b3IubVBhcmVudE5hbWUpIHsKLSAgICAgICAgICAgICAgICBtU3ltYm9scy0+YWRkU3ltYm9sKHZpc2l0b3IubVBhcmVudE5hbWUudmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUVudHJ5ICsgb2Zmc2V0b2YoUmVzVGFibGVfZW50cnlfZXh0LCBwYXJlbnQpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmlzaXRvci5tUGFyZW50SWRlbnQpIHsKLSAgICAgICAgICAgICAgICBvdXRFbnRyeS0+cGFyZW50LmlkZW50ID0gdXRpbDo6aG9zdFRvRGV2aWNlMzIodmlzaXRvci5tUGFyZW50SWRlbnQudmFsdWUoKSk7CisgICAgICAgICAgICBpZiAodmlzaXRvci5tUGFyZW50KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBmb3JjZVN5bWJvbCA9IHZpc2l0b3IubVBhcmVudC0+cHJpdmF0ZVJlZmVyZW5jZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbU9wdGlvbnMudXNlRXh0ZW5kZWRDaHVua3M7CisgICAgICAgICAgICAgICAgaWYgKCF2aXNpdG9yLm1QYXJlbnQtPmlkIHx8IGZvcmNlU3ltYm9sKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCh2aXNpdG9yLm1QYXJlbnQtPm5hbWUgJiYgInJlZmVyZW5jZSBtdXN0IGhhdmUgYSBuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIG1TeW1ib2xzLT5hZGRTeW1ib2woKnZpc2l0b3IubVBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVFbnRyeSArIG9mZnNldG9mKFJlc1RhYmxlX2VudHJ5X2V4dCwgcGFyZW50KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0RW50cnktPnBhcmVudC5pZGVudCA9IHV0aWw6Omhvc3RUb0RldmljZTMyKHZpc2l0b3IubVBhcmVudC0+aWQudmFsdWUoKS5pZCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTgzLDggKzU4Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0VudHJ5LT5zdGF0ZSA9IFB1YmxpY19lbnRyeTo6a1B1YmxpYzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UgJiYgInNob3VsZCBub3Qgc2VyaWFsaXplIGFueSBvdGhlciBzdGF0ZSIpOworICAgICAgICAgICAgICAgIGNhc2UgU3ltYm9sU3RhdGU6OmtVbmRlZmluZWQ6CisgICAgICAgICAgICAgICAgICAgIHB1YmxpY0VudHJ5LT5zdGF0ZSA9IFB1YmxpY19lbnRyeTo6a1VuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9pby9GaWxlLmggYi90b29scy9hYXB0Mi9pby9GaWxlLmgKaW5kZXggOWZjYTM5OC4uYjRkNDk3MSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvaW8vRmlsZS5oCisrKyBiL3Rvb2xzL2FhcHQyL2lvL0ZpbGUuaApAQCAtNTIsNiArNTIsMTQgQEAKICAgICB2aXJ0dWFsIGNvbnN0IFNvdXJjZSYgZ2V0U291cmNlKCkgY29uc3QgPSAwOwogfTsKIAorY2xhc3MgSUZpbGVDb2xsZWN0aW9uSXRlcmF0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgfklGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGhhc05leHQoKSA9IDA7CisgICAgdmlydHVhbCBJRmlsZSogbmV4dCgpID0gMDsKK307CisKIC8qKgogICogSW50ZXJmYWNlIGZvciBhIGNvbGxlY3Rpb24gb2YgZmlsZXMsIGFsbCBvZiB3aGljaCBzaGFyZSBhIGNvbW1vbiBzb3VyY2UuIFRoYXQgc291cmNlIG1heQogICogc2ltcGx5IGJlIHRoZSBmaWxlc3lzdGVtLCBvciBhIFpJUCBhcmNoaXZlLgpAQCAtNjAsMTAgKzY4LDggQEAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JRmlsZUNvbGxlY3Rpb24oKSA9IGRlZmF1bHQ7CiAKLSAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IHN0ZDo6dmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxJRmlsZT4+Ojpjb25zdF9pdGVyYXRvcjsKLQotICAgIHZpcnR1YWwgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJRmlsZSogZmluZEZpbGUoY29uc3QgU3RyaW5nUGllY2UmIHBhdGgpID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJRmlsZUNvbGxlY3Rpb25JdGVyYXRvcj4gaXRlcmF0b3IoKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBpbwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvaW8vRmlsZVN5c3RlbS5jcHAgYi90b29scy9hYXB0Mi9pby9GaWxlU3lzdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmY4N2FlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWFwdDIvaW8vRmlsZVN5c3RlbS5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJTb3VyY2UuaCIKKyNpbmNsdWRlICJpby9GaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAidXRpbC9GaWxlcy5oIgorI2luY2x1ZGUgInV0aWwvTWF5YmUuaCIKKyNpbmNsdWRlICJ1dGlsL1N0cmluZ1BpZWNlLmgiCisjaW5jbHVkZSAidXRpbC9VdGlsLmgiCisKKyNpbmNsdWRlIDx1dGlscy9GaWxlTWFwLmg+CisKK25hbWVzcGFjZSBhYXB0IHsKK25hbWVzcGFjZSBpbyB7CisKK1JlZ3VsYXJGaWxlOjpSZWd1bGFyRmlsZShjb25zdCBTb3VyY2UmIHNvdXJjZSkgOiBtU291cmNlKHNvdXJjZSkgeworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SURhdGE+IFJlZ3VsYXJGaWxlOjpvcGVuQXNEYXRhKCkgeworICAgIGFuZHJvaWQ6OkZpbGVNYXAgbWFwOworICAgIGlmIChNYXliZTxhbmRyb2lkOjpGaWxlTWFwPiBtYXAgPSBmaWxlOjptbWFwUGF0aChtU291cmNlLnBhdGgsIG51bGxwdHIpKSB7CisgICAgICAgIHJldHVybiB1dGlsOjptYWtlX3VuaXF1ZTxNbWFwcGVkRGF0YT4oc3RkOjptb3ZlKG1hcC52YWx1ZSgpKSk7CisgICAgfQorICAgIHJldHVybiB7fTsKK30KKworY29uc3QgU291cmNlJiBSZWd1bGFyRmlsZTo6Z2V0U291cmNlKCkgY29uc3QgeworICAgIHJldHVybiBtU291cmNlOworfQorCitGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOjpGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yKEZpbGVDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKSA6CisgICAgICAgIG1DdXJyZW50KGNvbGxlY3Rpb24tPm1GaWxlcy5iZWdpbigpKSwgbUVuZChjb2xsZWN0aW9uLT5tRmlsZXMuZW5kKCkpIHsKK30KKworYm9vbCBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOjpoYXNOZXh0KCkgeworICAgIHJldHVybiBtQ3VycmVudCAhPSBtRW5kOworfQorCitJRmlsZSogRmlsZUNvbGxlY3Rpb25JdGVyYXRvcjo6bmV4dCgpIHsKKyAgICBJRmlsZSogcmVzdWx0ID0gbUN1cnJlbnQtPnNlY29uZC5nZXQoKTsKKyAgICArK21DdXJyZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lGaWxlKiBGaWxlQ29sbGVjdGlvbjo6aW5zZXJ0RmlsZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCkgeworICAgIHJldHVybiAobUZpbGVzW3BhdGgudG9TdHJpbmcoKV0gPSB1dGlsOjptYWtlX3VuaXF1ZTxSZWd1bGFyRmlsZT4oU291cmNlKHBhdGgpKSkuZ2V0KCk7Cit9CisKK0lGaWxlKiBGaWxlQ29sbGVjdGlvbjo6ZmluZEZpbGUoY29uc3QgU3RyaW5nUGllY2UmIHBhdGgpIHsKKyAgICBhdXRvIGl0ZXIgPSBtRmlsZXMuZmluZChwYXRoLnRvU3RyaW5nKCkpOworICAgIGlmIChpdGVyICE9IG1GaWxlcy5lbmQoKSkgeworICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RkOjp1bmlxdWVfcHRyPElGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yPiBGaWxlQ29sbGVjdGlvbjo6aXRlcmF0b3IoKSB7CisgICAgcmV0dXJuIHV0aWw6Om1ha2VfdW5pcXVlPEZpbGVDb2xsZWN0aW9uSXRlcmF0b3I+KHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBpbworfSAvLyBuYW1lc3BhY2UgYWFwdApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvaW8vRmlsZVN5c3RlbS5oIGIvdG9vbHMvYWFwdDIvaW8vRmlsZVN5c3RlbS5oCmluZGV4IDVkYmVmY2MuLmYwNTU5YzAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL2lvL0ZpbGVTeXN0ZW0uaAorKysgYi90b29scy9hYXB0Mi9pby9GaWxlU3lzdGVtLmgKQEAgLTE4LDcgKzE4LDggQEAKICNkZWZpbmUgQUFQVF9JT19GSUxFU1lTVEVNX0gKIAogI2luY2x1ZGUgImlvL0ZpbGUuaCIKLSNpbmNsdWRlICJ1dGlsL0ZpbGVzLmgiCisKKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFjZSBhYXB0IHsKIG5hbWVzcGFjZSBpbyB7CkBAIC0yOCwyNSArMjksMjggQEAKICAqLwogY2xhc3MgUmVndWxhckZpbGUgOiBwdWJsaWMgSUZpbGUgewogcHVibGljOgotICAgIFJlZ3VsYXJGaWxlKGNvbnN0IFNvdXJjZSYgc291cmNlKSA6IG1Tb3VyY2Uoc291cmNlKSB7Ci0gICAgfQorICAgIFJlZ3VsYXJGaWxlKGNvbnN0IFNvdXJjZSYgc291cmNlKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJRGF0YT4gb3BlbkFzRGF0YSgpIG92ZXJyaWRlIHsKLSAgICAgICAgYW5kcm9pZDo6RmlsZU1hcCBtYXA7Ci0gICAgICAgIGlmIChNYXliZTxhbmRyb2lkOjpGaWxlTWFwPiBtYXAgPSBmaWxlOjptbWFwUGF0aChtU291cmNlLnBhdGgsIG51bGxwdHIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdXRpbDo6bWFrZV91bmlxdWU8TW1hcHBlZERhdGE+KHN0ZDo6bW92ZShtYXAudmFsdWUoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB7fTsKLSAgICB9Ci0KLSAgICBjb25zdCBTb3VyY2UmIGdldFNvdXJjZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAgICAgcmV0dXJuIG1Tb3VyY2U7Ci0gICAgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxJRGF0YT4gb3BlbkFzRGF0YSgpIG92ZXJyaWRlOworICAgIGNvbnN0IFNvdXJjZSYgZ2V0U291cmNlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgU291cmNlIG1Tb3VyY2U7CiB9OwogCitjbGFzcyBGaWxlQ29sbGVjdGlvbjsKKworY2xhc3MgRmlsZUNvbGxlY3Rpb25JdGVyYXRvciA6IHB1YmxpYyBJRmlsZUNvbGxlY3Rpb25JdGVyYXRvciB7CitwdWJsaWM6CisgICAgRmlsZUNvbGxlY3Rpb25JdGVyYXRvcihGaWxlQ29sbGVjdGlvbiogY29sbGVjdGlvbik7CisKKyAgICBib29sIGhhc05leHQoKSBvdmVycmlkZTsKKyAgICBpbzo6SUZpbGUqIG5leHQoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPElGaWxlPj46OmNvbnN0X2l0ZXJhdG9yIG1DdXJyZW50LCBtRW5kOworfTsKKwogLyoqCiAgKiBBbiBJRmlsZUNvbGxlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBmaWxlIHN5c3RlbS4KICAqLwpAQCAtNTUsMjEgKzU5LDEzIEBACiAgICAgLyoqCiAgICAgICogQWRkcyBhIGZpbGUgbG9jYXRlZCBhdCBwYXRoLiBSZXR1cm5zIHRoZSBJRmlsZSByZXByZXNlbnRhdGlvbiBvZiB0aGF0IGZpbGUuCiAgICAgICovCi0gICAgSUZpbGUqIGluc2VydEZpbGUoY29uc3QgU3RyaW5nUGllY2UmIHBhdGgpIHsKLSAgICAgICAgbUZpbGVzLnB1c2hfYmFjayh1dGlsOjptYWtlX3VuaXF1ZTxSZWd1bGFyRmlsZT4oU291cmNlKHBhdGgpKSk7Ci0gICAgICAgIHJldHVybiBtRmlsZXMuYmFjaygpLmdldCgpOwotICAgIH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICByZXR1cm4gbUZpbGVzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICByZXR1cm4gbUZpbGVzLmVuZCgpOwotICAgIH0KKyAgICBJRmlsZSogaW5zZXJ0RmlsZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCk7CisgICAgSUZpbGUqIGZpbmRGaWxlKGNvbnN0IFN0cmluZ1BpZWNlJiBwYXRoKSBvdmVycmlkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SUZpbGVDb2xsZWN0aW9uSXRlcmF0b3I+IGl0ZXJhdG9yKCkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPElGaWxlPj4gbUZpbGVzOworICAgIGZyaWVuZCBjbGFzcyBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SUZpbGU+PiBtRmlsZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBpbwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvaW8vWmlwQXJjaGl2ZS5jcHAgYi90b29scy9hYXB0Mi9pby9aaXBBcmNoaXZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjBmNGFhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWFwdDIvaW8vWmlwQXJjaGl2ZS5jcHAKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiU291cmNlLmgiCisjaW5jbHVkZSAiaW8vWmlwQXJjaGl2ZS5oIgorI2luY2x1ZGUgInV0aWwvVXRpbC5oIgorCisjaW5jbHVkZSA8dXRpbHMvRmlsZU1hcC5oPgorI2luY2x1ZGUgPHppcGFyY2hpdmUvemlwX2FyY2hpdmUuaD4KKworbmFtZXNwYWNlIGFhcHQgeworbmFtZXNwYWNlIGlvIHsKKworWmlwRmlsZTo6WmlwRmlsZShaaXBBcmNoaXZlSGFuZGxlIGhhbmRsZSwgY29uc3QgWmlwRW50cnkmIGVudHJ5LCBjb25zdCBTb3VyY2UmIHNvdXJjZSkgOgorICAgICAgICBtWmlwSGFuZGxlKGhhbmRsZSksIG1aaXBFbnRyeShlbnRyeSksIG1Tb3VyY2Uoc291cmNlKSB7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJRGF0YT4gWmlwRmlsZTo6b3BlbkFzRGF0YSgpIHsKKyAgICBpZiAobVppcEVudHJ5Lm1ldGhvZCA9PSBrQ29tcHJlc3NTdG9yZWQpIHsKKyAgICAgICAgaW50IGZkID0gR2V0RmlsZURlc2NyaXB0b3IobVppcEhhbmRsZSk7CisKKyAgICAgICAgYW5kcm9pZDo6RmlsZU1hcCBmaWxlTWFwOworICAgICAgICBib29sIHJlc3VsdCA9IGZpbGVNYXAuY3JlYXRlKG51bGxwdHIsIGZkLCBtWmlwRW50cnkub2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1aaXBFbnRyeS51bmNvbXByZXNzZWRfbGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIHJldHVybiB7fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdXRpbDo6bWFrZV91bmlxdWU8TW1hcHBlZERhdGE+KHN0ZDo6bW92ZShmaWxlTWFwKSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBkYXRhID0gc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4oCisgICAgICAgICAgICAgICAgbmV3IHVpbnQ4X3RbbVppcEVudHJ5LnVuY29tcHJlc3NlZF9sZW5ndGhdKTsKKyAgICAgICAgaW50MzJfdCByZXN1bHQgPSBFeHRyYWN0VG9NZW1vcnkobVppcEhhbmRsZSwgJm1aaXBFbnRyeSwgZGF0YS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1aaXBFbnRyeS51bmNvbXByZXNzZWRfbGVuZ3RoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHt9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB1dGlsOjptYWtlX3VuaXF1ZTxNYWxsb2NEYXRhPihzdGQ6Om1vdmUoZGF0YSksIG1aaXBFbnRyeS51bmNvbXByZXNzZWRfbGVuZ3RoKTsKKyAgICB9Cit9CisKK2NvbnN0IFNvdXJjZSYgWmlwRmlsZTo6Z2V0U291cmNlKCkgY29uc3QgeworICAgIHJldHVybiBtU291cmNlOworfQorCitaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOjpaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yKFppcEZpbGVDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKSA6CisgICAgICAgIG1DdXJyZW50KGNvbGxlY3Rpb24tPm1GaWxlcy5iZWdpbigpKSwgbUVuZChjb2xsZWN0aW9uLT5tRmlsZXMuZW5kKCkpIHsKK30KKworYm9vbCBaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOjpoYXNOZXh0KCkgeworICAgIHJldHVybiBtQ3VycmVudCAhPSBtRW5kOworfQorCitJRmlsZSogWmlwRmlsZUNvbGxlY3Rpb25JdGVyYXRvcjo6bmV4dCgpIHsKKyAgICBJRmlsZSogcmVzdWx0ID0gbUN1cnJlbnQtPnNlY29uZC5nZXQoKTsKKyAgICArK21DdXJyZW50OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ppcEZpbGVDb2xsZWN0aW9uOjpaaXBGaWxlQ29sbGVjdGlvbigpIDogbUhhbmRsZShudWxscHRyKSB7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxaaXBGaWxlQ29sbGVjdGlvbj4gWmlwRmlsZUNvbGxlY3Rpb246OmNyZWF0ZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogb3V0RXJyb3IpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8WmlwRmlsZUNvbGxlY3Rpb24+IGNvbGxlY3Rpb24gPSBzdGQ6OnVuaXF1ZV9wdHI8WmlwRmlsZUNvbGxlY3Rpb24+KAorICAgICAgICAgICAgbmV3IFppcEZpbGVDb2xsZWN0aW9uKCkpOworCisgICAgaW50MzJfdCByZXN1bHQgPSBPcGVuQXJjaGl2ZShwYXRoLmRhdGEoKSwgJmNvbGxlY3Rpb24tPm1IYW5kbGUpOworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICBpZiAob3V0RXJyb3IpICpvdXRFcnJvciA9IEVycm9yQ29kZVN0cmluZyhyZXN1bHQpOworICAgICAgICByZXR1cm4ge307CisgICAgfQorCisgICAgWmlwU3RyaW5nIHN1ZmZpeCgiLmZsYXQiKTsKKyAgICB2b2lkKiBjb29raWUgPSBudWxscHRyOworICAgIHJlc3VsdCA9IFN0YXJ0SXRlcmF0aW9uKGNvbGxlY3Rpb24tPm1IYW5kbGUsICZjb29raWUsIG51bGxwdHIsICZzdWZmaXgpOworICAgIGlmIChyZXN1bHQgIT0gMCkgeworICAgICAgICBpZiAob3V0RXJyb3IpICpvdXRFcnJvciA9IEVycm9yQ29kZVN0cmluZyhyZXN1bHQpOworICAgICAgICByZXR1cm4ge307CisgICAgfQorCisgICAgdXNpbmcgSXRlcmF0aW9uRW5kZXIgPSBzdGQ6OnVuaXF1ZV9wdHI8dm9pZCwgZGVjbHR5cGUoRW5kSXRlcmF0aW9uKSo+OworICAgIEl0ZXJhdGlvbkVuZGVyIGl0ZXJhdGlvbkVuZGVyKGNvb2tpZSwgRW5kSXRlcmF0aW9uKTsKKworICAgIFppcFN0cmluZyB6aXBFbnRyeU5hbWU7CisgICAgWmlwRW50cnkgemlwRGF0YTsKKyAgICB3aGlsZSAoKHJlc3VsdCA9IE5leHQoY29va2llLCAmemlwRGF0YSwgJnppcEVudHJ5TmFtZSkpID09IDApIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgemlwRW50cnlQYXRoID0gc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oemlwRW50cnlOYW1lLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBFbnRyeU5hbWUubmFtZV9sZW5ndGgpOworICAgICAgICBzdGQ6OnN0cmluZyBuZXN0ZWRQYXRoID0gcGF0aC50b1N0cmluZygpICsgIkAiICsgemlwRW50cnlQYXRoOworICAgICAgICBjb2xsZWN0aW9uLT5tRmlsZXNbemlwRW50cnlQYXRoXSA9IHV0aWw6Om1ha2VfdW5pcXVlPFppcEZpbGU+KGNvbGxlY3Rpb24tPm1IYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UobmVzdGVkUGF0aCkpOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKKyAgICAgICAgaWYgKG91dEVycm9yKSAqb3V0RXJyb3IgPSBFcnJvckNvZGVTdHJpbmcocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHt9OworICAgIH0KKyAgICByZXR1cm4gY29sbGVjdGlvbjsKK30KKworSUZpbGUqIFppcEZpbGVDb2xsZWN0aW9uOjpmaW5kRmlsZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCkgeworICAgIGF1dG8gaXRlciA9IG1GaWxlcy5maW5kKHBhdGgudG9TdHJpbmcoKSk7CisgICAgaWYgKGl0ZXIgIT0gbUZpbGVzLmVuZCgpKSB7CisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZ2V0KCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SUZpbGVDb2xsZWN0aW9uSXRlcmF0b3I+IFppcEZpbGVDb2xsZWN0aW9uOjppdGVyYXRvcigpIHsKKyAgICByZXR1cm4gdXRpbDo6bWFrZV91bmlxdWU8WmlwRmlsZUNvbGxlY3Rpb25JdGVyYXRvcj4odGhpcyk7Cit9CisKK1ppcEZpbGVDb2xsZWN0aW9uOjp+WmlwRmlsZUNvbGxlY3Rpb24oKSB7CisgICAgaWYgKG1IYW5kbGUpIHsKKyAgICAgICAgQ2xvc2VBcmNoaXZlKG1IYW5kbGUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgaW8KK30gLy8gbmFtZXNwYWNlIGFhcHQKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2lvL1ppcEFyY2hpdmUuaCBiL3Rvb2xzL2FhcHQyL2lvL1ppcEFyY2hpdmUuaAppbmRleCA5OGFmYzQ5Li41YWQxMTlkIDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9pby9aaXBBcmNoaXZlLmgKKysrIGIvdG9vbHMvYWFwdDIvaW8vWmlwQXJjaGl2ZS5oCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAiaW8vRmlsZS5oIgogI2luY2x1ZGUgInV0aWwvU3RyaW5nUGllY2UuaCIKIAotI2luY2x1ZGUgPHV0aWxzL0ZpbGVNYXAuaD4KKyNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8emlwYXJjaGl2ZS96aXBfYXJjaGl2ZS5oPgogCiBuYW1lc3BhY2UgYWFwdCB7CkBAIC0zMiwzNyArMzIsMTAgQEAKICAqLwogY2xhc3MgWmlwRmlsZSA6IHB1YmxpYyBJRmlsZSB7CiBwdWJsaWM6Ci0gICAgWmlwRmlsZShaaXBBcmNoaXZlSGFuZGxlIGhhbmRsZSwgY29uc3QgWmlwRW50cnkmIGVudHJ5LCBjb25zdCBTb3VyY2UmIHNvdXJjZSkgOgotICAgICAgICAgICAgbVppcEhhbmRsZShoYW5kbGUpLCBtWmlwRW50cnkoZW50cnkpLCBtU291cmNlKHNvdXJjZSkgewotICAgIH0KKyAgICBaaXBGaWxlKFppcEFyY2hpdmVIYW5kbGUgaGFuZGxlLCBjb25zdCBaaXBFbnRyeSYgZW50cnksIGNvbnN0IFNvdXJjZSYgc291cmNlKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJRGF0YT4gb3BlbkFzRGF0YSgpIG92ZXJyaWRlIHsKLSAgICAgICAgaWYgKG1aaXBFbnRyeS5tZXRob2QgPT0ga0NvbXByZXNzU3RvcmVkKSB7Ci0gICAgICAgICAgICBpbnQgZmQgPSBHZXRGaWxlRGVzY3JpcHRvcihtWmlwSGFuZGxlKTsKLQotICAgICAgICAgICAgYW5kcm9pZDo6RmlsZU1hcCBmaWxlTWFwOwotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmaWxlTWFwLmNyZWF0ZShudWxscHRyLCBmZCwgbVppcEVudHJ5Lm9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVppcEVudHJ5LnVuY29tcHJlc3NlZF9sZW5ndGgsIHRydWUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdXRpbDo6bWFrZV91bmlxdWU8TW1hcHBlZERhdGE+KHN0ZDo6bW92ZShmaWxlTWFwKSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+IGRhdGEgPSBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPigKLSAgICAgICAgICAgICAgICAgICAgbmV3IHVpbnQ4X3RbbVppcEVudHJ5LnVuY29tcHJlc3NlZF9sZW5ndGhdKTsKLSAgICAgICAgICAgIGludDMyX3QgcmVzdWx0ID0gRXh0cmFjdFRvTWVtb3J5KG1aaXBIYW5kbGUsICZtWmlwRW50cnksIGRhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50MzJfdD4obVppcEVudHJ5LnVuY29tcHJlc3NlZF9sZW5ndGgpKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gMCkgewotICAgICAgICAgICAgICAgIHJldHVybiB7fTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1dGlsOjptYWtlX3VuaXF1ZTxNYWxsb2NEYXRhPihzdGQ6Om1vdmUoZGF0YSksIG1aaXBFbnRyeS51bmNvbXByZXNzZWRfbGVuZ3RoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IFNvdXJjZSYgZ2V0U291cmNlKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICByZXR1cm4gbVNvdXJjZTsKLSAgICB9CisgICAgc3RkOjp1bmlxdWVfcHRyPElEYXRhPiBvcGVuQXNEYXRhKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgU291cmNlJiBnZXRTb3VyY2UoKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBaaXBBcmNoaXZlSGFuZGxlIG1aaXBIYW5kbGU7CkBAIC03MCw3MSArNDMsMzggQEAKICAgICBTb3VyY2UgbVNvdXJjZTsKIH07CiAKK2NsYXNzIFppcEZpbGVDb2xsZWN0aW9uOworCitjbGFzcyBaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yIDogcHVibGljIElGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yKFppcEZpbGVDb2xsZWN0aW9uKiBjb2xsZWN0aW9uKTsKKworICAgIGJvb2wgaGFzTmV4dCgpIG92ZXJyaWRlOworICAgIGlvOjpJRmlsZSogbmV4dCgpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SUZpbGU+Pjo6Y29uc3RfaXRlcmF0b3IgbUN1cnJlbnQsIG1FbmQ7Cit9OworCiAvKioKICAqIEFuIElGaWxlQ29sbGVjdGlvbiB0aGF0IHJlcHJlc2VudHMgYSBaSVAgYXJjaGl2ZSBhbmQgdGhlIGVudHJpZXMgd2l0aGluIGl0LgogICovCiBjbGFzcyBaaXBGaWxlQ29sbGVjdGlvbiA6IHB1YmxpYyBJRmlsZUNvbGxlY3Rpb24gewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8WmlwRmlsZUNvbGxlY3Rpb24+IGNyZWF0ZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcqIG91dEVycm9yKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxaaXBGaWxlQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IHN0ZDo6dW5pcXVlX3B0cjxaaXBGaWxlQ29sbGVjdGlvbj4oCi0gICAgICAgICAgICAgICAgbmV3IFppcEZpbGVDb2xsZWN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyogb3V0RXJyb3IpOwogCi0gICAgICAgIGludDMyX3QgcmVzdWx0ID0gT3BlbkFyY2hpdmUocGF0aC5kYXRhKCksICZjb2xsZWN0aW9uLT5tSGFuZGxlKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAob3V0RXJyb3IpICpvdXRFcnJvciA9IEVycm9yQ29kZVN0cmluZyhyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICB9CisgICAgaW86OklGaWxlKiBmaW5kRmlsZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCkgb3ZlcnJpZGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPElGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yPiBpdGVyYXRvcigpIG92ZXJyaWRlOwogCi0gICAgICAgIFppcFN0cmluZyBzdWZmaXgoIi5mbGF0Iik7Ci0gICAgICAgIHZvaWQqIGNvb2tpZSA9IG51bGxwdHI7Ci0gICAgICAgIHJlc3VsdCA9IFN0YXJ0SXRlcmF0aW9uKGNvbGxlY3Rpb24tPm1IYW5kbGUsICZjb29raWUsIG51bGxwdHIsICZzdWZmaXgpOwotICAgICAgICBpZiAocmVzdWx0ICE9IDApIHsKLSAgICAgICAgICAgIGlmIChvdXRFcnJvcikgKm91dEVycm9yID0gRXJyb3JDb2RlU3RyaW5nKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4ge307Ci0gICAgICAgIH0KLQotICAgICAgICB1c2luZyBJdGVyYXRpb25FbmRlciA9IHN0ZDo6dW5pcXVlX3B0cjx2b2lkLCBkZWNsdHlwZShFbmRJdGVyYXRpb24pKj47Ci0gICAgICAgIEl0ZXJhdGlvbkVuZGVyIGl0ZXJhdGlvbkVuZGVyKGNvb2tpZSwgRW5kSXRlcmF0aW9uKTsKLQotICAgICAgICBaaXBTdHJpbmcgemlwRW50cnlOYW1lOwotICAgICAgICBaaXBFbnRyeSB6aXBEYXRhOwotICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IE5leHQoY29va2llLCAmemlwRGF0YSwgJnppcEVudHJ5TmFtZSkpID09IDApIHsKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG5lc3RlZFBhdGggPSBwYXRoLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBuZXN0ZWRQYXRoICs9ICJAIiArIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHppcEVudHJ5TmFtZS5uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwRW50cnlOYW1lLm5hbWVfbGVuZ3RoKTsKLSAgICAgICAgICAgIGNvbGxlY3Rpb24tPm1GaWxlcy5wdXNoX2JhY2sodXRpbDo6bWFrZV91bmlxdWU8WmlwRmlsZT4oY29sbGVjdGlvbi0+bUhhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwRGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlKG5lc3RlZFBhdGgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSB7Ci0gICAgICAgICAgICBpZiAob3V0RXJyb3IpICpvdXRFcnJvciA9IEVycm9yQ29kZVN0cmluZyhyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHt9OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb2xsZWN0aW9uOwotICAgIH0KLQotICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICByZXR1cm4gbUZpbGVzLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICByZXR1cm4gbUZpbGVzLmVuZCgpOwotICAgIH0KLQotICAgIH5aaXBGaWxlQ29sbGVjdGlvbigpIG92ZXJyaWRlIHsKLSAgICAgICAgaWYgKG1IYW5kbGUpIHsKLSAgICAgICAgICAgIENsb3NlQXJjaGl2ZShtSGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0KKyAgICB+WmlwRmlsZUNvbGxlY3Rpb24oKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBaaXBGaWxlQ29sbGVjdGlvbigpIDogbUhhbmRsZShudWxscHRyKSB7Ci0gICAgfQorICAgIGZyaWVuZCBjbGFzcyBaaXBGaWxlQ29sbGVjdGlvbkl0ZXJhdG9yOworICAgIFppcEZpbGVDb2xsZWN0aW9uKCk7CiAKICAgICBaaXBBcmNoaXZlSGFuZGxlIG1IYW5kbGU7Ci0gICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPElGaWxlPj4gbUZpbGVzOworICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8SUZpbGU+PiBtRmlsZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBpbwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvamF2YS9Qcm9ndWFyZFJ1bGVzLmNwcCBiL3Rvb2xzL2FhcHQyL2phdmEvUHJvZ3VhcmRSdWxlcy5jcHAKaW5kZXggYzA5Njg1NC4uYzYxMGJiMCAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvamF2YS9Qcm9ndWFyZFJ1bGVzLmNwcAorKysgYi90b29scy9hYXB0Mi9qYXZhL1Byb2d1YXJkUnVsZXMuY3BwCkBAIC0yMjcsMTQgKzIyNywxNCBAQAogYm9vbCB3cml0ZUtlZXBTZXQoc3RkOjpvc3RyZWFtKiBvdXQsIGNvbnN0IEtlZXBTZXQmIGtlZXBTZXQpIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDoga2VlcFNldC5tS2VlcFNldCkgewogICAgICAgICBmb3IgKGNvbnN0IFNvdXJjZSYgc291cmNlIDogZW50cnkuc2Vjb25kKSB7Ci0gICAgICAgICAgICAqb3V0IDw8ICIvLyBSZWZlcmVuY2VkIGF0ICIgPDwgc291cmNlIDw8ICJcbiI7CisgICAgICAgICAgICAqb3V0IDw8ICIjIFJlZmVyZW5jZWQgYXQgIiA8PCBzb3VyY2UgPDwgIlxuIjsKICAgICAgICAgfQogICAgICAgICAqb3V0IDw8ICIta2VlcCBjbGFzcyAiIDw8IGVudHJ5LmZpcnN0IDw8ICIgeyA8aW5pdD4oLi4uKTsgfVxuIiA8PCBzdGQ6OmVuZGw7CiAgICAgfQogCiAgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGtlZXBTZXQubUtlZXBNZXRob2RTZXQpIHsKICAgICAgICAgZm9yIChjb25zdCBTb3VyY2UmIHNvdXJjZSA6IGVudHJ5LnNlY29uZCkgewotICAgICAgICAgICAgKm91dCA8PCAiLy8gUmVmZXJlbmNlZCBhdCAiIDw8IHNvdXJjZSA8PCAiXG4iOworICAgICAgICAgICAgKm91dCA8PCAiIyBSZWZlcmVuY2VkIGF0ICIgPDwgc291cmNlIDw8ICJcbiI7CiAgICAgICAgIH0KICAgICAgICAgKm91dCA8PCAiLWtlZXBjbGFzc21lbWJlcnMgY2xhc3MgKiB7ICoqKiAiIDw8IGVudHJ5LmZpcnN0IDw8ICIoLi4uKTsgfVxuIiA8PCBzdGQ6OmVuZGw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvbGluay9MaW5rLmNwcCBiL3Rvb2xzL2FhcHQyL2xpbmsvTGluay5jcHAKaW5kZXggMzNkOTI3Mi4uOGE4N2Q5NiAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvbGluay9MaW5rLmNwcAorKysgYi90b29scy9hYXB0Mi9saW5rL0xpbmsuY3BwCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgYm9vbCBzdGF0aWNMaWIgPSBmYWxzZTsKICAgICBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICBib29sIG91dHB1dFRvRGlyZWN0b3J5ID0gZmFsc2U7CisgICAgYm9vbCBhdXRvQWRkT3ZlcmxheSA9IGZhbHNlOwogICAgIE1heWJlPHN0ZDo6dTE2c3RyaW5nPiBwcml2YXRlU3ltYm9sczsKICAgICBNYXliZTxzdGQ6OnUxNnN0cmluZz4gbWluU2RrVmVyc2lvbkRlZmF1bHQ7CiAgICAgTWF5YmU8c3RkOjp1MTZzdHJpbmc+IHRhcmdldFNka1ZlcnNpb25EZWZhdWx0OwpAQCAtMTA0LDIzICsxMDUsNiBAQAogICAgICAgICBtQ29sbGVjdGlvbnMucHVzaF9iYWNrKHN0ZDo6bW92ZShmaWxlQ29sbGVjdGlvbikpOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGJ1aWxkUmVzb3VyY2VGaWxlTmFtZShjb25zdCBSZXNvdXJjZUZpbGUmIHJlc0ZpbGUpIHsKLSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gb3V0OwotICAgICAgICBvdXQgPDwgInJlcy8iIDw8IHJlc0ZpbGUubmFtZS50eXBlOwotICAgICAgICBpZiAocmVzRmlsZS5jb25maWcgIT0gQ29uZmlnRGVzY3JpcHRpb257fSkgewotICAgICAgICAgICAgb3V0IDw8ICItIiA8PCByZXNGaWxlLmNvbmZpZzsKLSAgICAgICAgfQotICAgICAgICBvdXQgPDwgIi8iOwotCi0gICAgICAgIGlmIChtQ29udGV4dC5nZXROYW1lTWFuZ2xlcigpLT5zaG91bGRNYW5nbGUocmVzRmlsZS5uYW1lLnBhY2thZ2UpKSB7Ci0gICAgICAgICAgICBvdXQgPDwgTmFtZU1hbmdsZXI6Om1hbmdsZUVudHJ5KHJlc0ZpbGUubmFtZS5wYWNrYWdlLCByZXNGaWxlLm5hbWUuZW50cnkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb3V0IDw8IHJlc0ZpbGUubmFtZS5lbnRyeTsKLSAgICAgICAgfQotICAgICAgICBvdXQgPDwgZmlsZTo6Z2V0RXh0ZW5zaW9uKHJlc0ZpbGUuc291cmNlLnBhdGgpOwotICAgICAgICByZXR1cm4gb3V0LnN0cigpOwotICAgIH0KLQogICAgIC8qKgogICAgICAqIENyZWF0ZXMgYSBTeW1ib2xUYWJsZSB0aGF0IGxvYWRzIHN5bWJvbHMgZnJvbSB0aGUgdmFyaW91cyBBUEtzIGFuZCBjYWNoZXMgdGhlCiAgICAgICogcmVzdWx0cyBmb3IgZmFzdGVyIGxvb2t1cC4KQEAgLTI0NCwyOSArMjI4LDUzIEBACiAgICAgICAgIHJldHVybiB7fTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBQcmVjb25kaXRpb246IFJlc291cmNlVGFibGUgZG9lc24ndCBoYXZlIGFueSBJRHMgYXNzaWduZWQgeWV0LCBub3IgaXMgaXQgbGlua2VkLgorICAgICAqIFBvc3Rjb25kaXRpb246IFJlc291cmNlVGFibGUgaGFzIG9ubHkgb25lIHBhY2thZ2UgbGVmdC4gQWxsIG90aGVycyBhcmUgc3RyaXBwZWQsIG9yIHRoZXJlCisgICAgICogICAgICAgICAgICAgICAgaXMgYW4gZXJyb3IgYW5kIGZhbHNlIGlzIHJldHVybmVkLgorICAgICAqLwogICAgIGJvb2wgdmVyaWZ5Tm9FeHRlcm5hbFBhY2thZ2VzKCkgeworICAgICAgICBhdXRvIGlzRXh0UGFja2FnZUZ1bmMgPSBbJl0oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlVGFibGVQYWNrYWdlPiYgcGtnKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtQ29udGV4dC5nZXRDb21waWxhdGlvblBhY2thZ2UoKSAhPSBwa2ctPm5hbWUgfHwKKyAgICAgICAgICAgICAgICAgICAgIXBrZy0+aWQgfHwKKyAgICAgICAgICAgICAgICAgICAgcGtnLT5pZC52YWx1ZSgpICE9IG1Db250ZXh0LmdldFBhY2thZ2VJZCgpOworICAgICAgICB9OworCiAgICAgICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWNrYWdlIDogbUZpbmFsVGFibGUucGFja2FnZXMpIHsKLSAgICAgICAgICAgIGlmIChtQ29udGV4dC5nZXRDb21waWxhdGlvblBhY2thZ2UoKSAhPSBwYWNrYWdlLT5uYW1lIHx8Ci0gICAgICAgICAgICAgICAgICAgICFwYWNrYWdlLT5pZCB8fCBwYWNrYWdlLT5pZC52YWx1ZSgpICE9IG1Db250ZXh0LmdldFBhY2thZ2VJZCgpKSB7CisgICAgICAgICAgICBpZiAoaXNFeHRQYWNrYWdlRnVuYyhwYWNrYWdlKSkgewogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBwYWNrYWdlIHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gdGhlIG9uZSB3ZSdyZSBidWlsZGluZyEKICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHR5cGUgOiBwYWNrYWdlLT50eXBlcykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdHlwZS0+ZW50cmllcykgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VOYW1lUmVmIHJlc05hbWUocGFja2FnZS0+bmFtZSwgdHlwZS0+dHlwZSwgZW50cnktPm5hbWUpOworCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvbmZpZ1ZhbHVlIDogZW50cnktPnZhbHVlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlhZ01lc3NhZ2UoY29uZmlnVmFsdWUudmFsdWUtPmdldFNvdXJjZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgImRlZmluZWQgcmVzb3VyY2UgJyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IFJlc291cmNlTmFtZVJlZihwYWNrYWdlLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyBmb3IgZXh0ZXJuYWwgcGFja2FnZSAnIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGFja2FnZS0+bmFtZSA8PCAiJyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIG9jY3VycmVuY2Ugb2YgYW4gSUQgdGhhdCBpcyBiZWluZyBnZW5lcmF0ZWQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICdhbmRyb2lkJyBwYWNrYWdlLiBUaGlzIGlzIGR1ZSB0byBsZWdhY3kgcmVhc29ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVDYXN0PElkPihjb25maWdWYWx1ZS52YWx1ZS5nZXQoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtPm5hbWUgPT0gdSJhbmRyb2lkIikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXREaWFnbm9zdGljcygpLT53YXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpYWdNZXNzYWdlKGNvbmZpZ1ZhbHVlLnZhbHVlLT5nZXRTb3VyY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiZ2VuZXJhdGVkIGlkICciIDw8IHJlc05hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyBmb3IgZXh0ZXJuYWwgcGFja2FnZSAnIiA8PCBwYWNrYWdlLT5uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXREaWFnbm9zdGljcygpLT5lcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaWFnTWVzc2FnZShjb25maWdWYWx1ZS52YWx1ZS0+Z2V0U291cmNlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgImRlZmluZWQgcmVzb3VyY2UgJyIgPDwgcmVzTmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICInIGZvciBleHRlcm5hbCBwYWNrYWdlICciIDw8IHBhY2thZ2UtPm5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiJyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgYXV0byBuZXdFbmRJdGVyID0gc3RkOjpyZW1vdmVfaWYobUZpbmFsVGFibGUucGFja2FnZXMuYmVnaW4oKSwgbUZpbmFsVGFibGUucGFja2FnZXMuZW5kKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXh0UGFja2FnZUZ1bmMpOworICAgICAgICBtRmluYWxUYWJsZS5wYWNrYWdlcy5lcmFzZShuZXdFbmRJdGVyLCBtRmluYWxUYWJsZS5wYWNrYWdlcy5lbmQoKSk7CiAgICAgICAgIHJldHVybiAhZXJyb3I7CiAgICAgfQogCkBAIC00MjUsNDUgKzQzMywyOCBAQAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtVGFibGVNZXJnZXItPm1lcmdlKGZpbGUtPmdldFNvdXJjZSgpLCB0YWJsZS5nZXQoKSwgb3ZlcnJpZGUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChvdmVycmlkZSkgeworICAgICAgICAgICAgcmVzdWx0ID0gbVRhYmxlTWVyZ2VyLT5tZXJnZU92ZXJsYXkoZmlsZS0+Z2V0U291cmNlKCksIHRhYmxlLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1UYWJsZU1lcmdlci0+bWVyZ2UoZmlsZS0+Z2V0U291cmNlKCksIHRhYmxlLmdldCgpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBib29sIG1lcmdlQ29tcGlsZWRGaWxlKGlvOjpJRmlsZSogZmlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlRmlsZT4gZmlsZURlc2MsIGJvb2wgb3ZlcnJpZGUpIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIHBhY2thZ2UgbmFtZSB1c2VkIGZvciB0aGlzIGNvbXBpbGF0aW9uIHBoYXNlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC4KLSAgICAgICAgaWYgKGZpbGVEZXNjLT5uYW1lLnBhY2thZ2UuZW1wdHkoKSkgewotICAgICAgICAgICAgZmlsZURlc2MtPm5hbWUucGFja2FnZSA9IG1Db250ZXh0LmdldENvbXBpbGF0aW9uUGFja2FnZSgpLnRvU3RyaW5nKCk7CisgICAgYm9vbCBtZXJnZUNvbXBpbGVkRmlsZShpbzo6SUZpbGUqIGZpbGUsIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUZpbGU+IGZpbGVEZXNjLCBib29sIG92ZXJsYXkpIHsKKyAgICAgICAgaWYgKG1PcHRpb25zLnZlcmJvc2UpIHsKKyAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPm5vdGUoRGlhZ01lc3NhZ2UoKSA8PCAiYWRkaW5nICIgPDwgZmlsZS0+Z2V0U291cmNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gTWFuZ2xlIHRoZSBuYW1lIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgUmVzb3VyY2VOYW1lUmVmIHJlc05hbWUgPSBmaWxlRGVzYy0+bmFtZTsKLSAgICAgICAgTWF5YmU8UmVzb3VyY2VOYW1lPiBtYW5nbGVkTmFtZSA9IG1Db250ZXh0LmdldE5hbWVNYW5nbGVyKCktPm1hbmdsZU5hbWUoZmlsZURlc2MtPm5hbWUpOwotICAgICAgICBpZiAobWFuZ2xlZE5hbWUpIHsKLSAgICAgICAgICAgIHJlc05hbWUgPSBtYW5nbGVkTmFtZS52YWx1ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgYXJlIG92ZXJyaWRpbmcgcmVzb3VyY2VzLCB3ZSBzdXBwbHkgYSBjdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24uCi0gICAgICAgIHN0ZDo6ZnVuY3Rpb248aW50KFZhbHVlKixWYWx1ZSopPiByZXNvbHZlcjsKLSAgICAgICAgaWYgKG92ZXJyaWRlKSB7Ci0gICAgICAgICAgICByZXNvbHZlciA9IFtdKFZhbHVlKiBhLCBWYWx1ZSogYikgLT4gaW50IHsKLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gUmVzb3VyY2VUYWJsZTo6cmVzb2x2ZVZhbHVlQ29sbGlzaW9uKGEsIGIpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAvLyBBbHdheXMgYWNjZXB0IHRoZSBuZXcgdmFsdWUgaWYgaXQgd291bGQgbm9ybWFsbHkgY29uZmxpY3QgKG92ZXJyaWRlKS4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH07CisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGlmIChvdmVybGF5KSB7CisgICAgICAgICAgICByZXN1bHQgPSBtVGFibGVNZXJnZXItPm1lcmdlRmlsZU92ZXJsYXkoKmZpbGVEZXNjLCBmaWxlKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSB1c2UgdGhlIGRlZmF1bHQgcmVzb2x1dGlvbi4KLSAgICAgICAgICAgIHJlc29sdmVyID0gUmVzb3VyY2VUYWJsZTo6cmVzb2x2ZVZhbHVlQ29sbGlzaW9uOworICAgICAgICAgICAgcmVzdWx0ID0gbVRhYmxlTWVyZ2VyLT5tZXJnZUZpbGUoKmZpbGVEZXNjLCBmaWxlKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIEFkZCB0aGlzIGZpbGUgdG8gdGhlIHRhYmxlLgotICAgICAgICBpZiAoIW1GaW5hbFRhYmxlLmFkZEZpbGVSZWZlcmVuY2UocmVzTmFtZSwgZmlsZURlc2MtPmNvbmZpZywgZmlsZURlc2MtPnNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWw6OnV0ZjhUb1V0ZjE2KGJ1aWxkUmVzb3VyY2VGaWxlTmFtZSgqZmlsZURlc2MpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVyLCBtQ29udGV4dC5nZXREaWFnbm9zdGljcygpKSkgeworICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKQEAgLTQ4OSwxMCArNDgwLDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgYWRkIHRoaXMgZmlsZSBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4gT25jZSB0aGUgdGFibGUgaXMgYXNzaWduZWQgSURzLCB3ZSBjYW4gY29tcGlsZQotICAgICAgICAvLyB0aGlzIGZpbGUuCi0gICAgICAgIG1GaWxlc1RvUHJvY2Vzcy5pbnNlcnQoRmlsZVRvUHJvY2Vzc3sgc3RkOjptb3ZlKGZpbGVEZXNjKSwgZmlsZSB9KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC01MDksOCArNDk2LDggQEAKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8aW86OklGaWxlPiYgZmlsZSA6ICpjb2xsZWN0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoIXByb2Nlc3NGaWxlKGZpbGUuZ2V0KCksIG92ZXJyaWRlKSkgeworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IGNvbGxlY3Rpb24tPml0ZXJhdG9yKCk7IGl0ZXItPmhhc05leHQoKTsgKSB7CisgICAgICAgICAgICBpZiAoIXByb2Nlc3NGaWxlKGl0ZXItPm5leHQoKSwgb3ZlcnJpZGUpKSB7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01ODgsNyArNTc1LDkgQEAKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKLSAgICAgICAgbVRhYmxlTWVyZ2VyID0gdXRpbDo6bWFrZV91bmlxdWU8VGFibGVNZXJnZXI+KCZtQ29udGV4dCwgJm1GaW5hbFRhYmxlKTsKKyAgICAgICAgVGFibGVNZXJnZXJPcHRpb25zIHRhYmxlTWVyZ2VyT3B0aW9uczsKKyAgICAgICAgdGFibGVNZXJnZXJPcHRpb25zLmF1dG9BZGRPdmVybGF5ID0gbU9wdGlvbnMuYXV0b0FkZE92ZXJsYXk7CisgICAgICAgIG1UYWJsZU1lcmdlciA9IHV0aWw6Om1ha2VfdW5pcXVlPFRhYmxlTWVyZ2VyPigmbUNvbnRleHQsICZtRmluYWxUYWJsZSwgdGFibGVNZXJnZXJPcHRpb25zKTsKIAogICAgICAgICBpZiAobU9wdGlvbnMudmVyYm9zZSkgewogICAgICAgICAgICAgbUNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS0+bm90ZSgKQEAgLTY5OCwzMSArNjg3LDQ3IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoY29uc3QgRmlsZVRvUHJvY2VzcyYgZmlsZSA6IG1GaWxlc1RvUHJvY2VzcykgewotICAgICAgICAgICAgY29uc3QgU3RyaW5nUGllY2UgcGF0aCA9IGZpbGUuZmlsZS0+Z2V0U291cmNlKCkucGF0aDsKKyAgICAgICAgZm9yIChhdXRvJiBtZXJnZUVudHJ5IDogbVRhYmxlTWVyZ2VyLT5nZXRGaWxlc1RvTWVyZ2UoKSkgeworICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VLZXlSZWYmIGtleSA9IG1lcmdlRW50cnkuZmlyc3Q7CisgICAgICAgICAgICBjb25zdCBGaWxlVG9NZXJnZSYgZmlsZVRvTWVyZ2UgPSBtZXJnZUVudHJ5LnNlY29uZDsKIAotICAgICAgICAgICAgaWYgKGZpbGUuZmlsZUV4cG9ydC0+bmFtZS50eXBlICE9IFJlc291cmNlVHlwZTo6a1JhdyAmJgotICAgICAgICAgICAgICAgICAgICB1dGlsOjpzdHJpbmdFbmRzV2l0aDxjaGFyPihwYXRoLCAiLnhtbC5mbGF0IikpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZ1BpZWNlIHBhdGggPSBmaWxlVG9NZXJnZS5maWxlLT5nZXRTb3VyY2UoKS5wYXRoOworCisgICAgICAgICAgICBpZiAoa2V5Lm5hbWUudHlwZSAhPSBSZXNvdXJjZVR5cGU6OmtSYXcgJiYKKyAgICAgICAgICAgICAgICAgICAgKHV0aWw6OnN0cmluZ0VuZHNXaXRoPGNoYXI+KHBhdGgsICIueG1sLmZsYXQiKSB8fAorICAgICAgICAgICAgICAgICAgICB1dGlsOjpzdHJpbmdFbmRzV2l0aDxjaGFyPihwYXRoLCAiLnhtbCIpKSkgewogICAgICAgICAgICAgICAgIGlmIChtT3B0aW9ucy52ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPm5vdGUoRGlhZ01lc3NhZ2UoKSA8PCAibGlua2luZyAiIDw8IHBhdGgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxpbzo6SURhdGE+IGRhdGEgPSBmaWxlLmZpbGUtPm9wZW5Bc0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpbzo6SUZpbGUqIGZpbGUgPSBmaWxlVG9NZXJnZS5maWxlOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxpbzo6SURhdGE+IGRhdGEgPSBmaWxlLT5vcGVuQXNEYXRhKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPmVycm9yKERpYWdNZXNzYWdlKGZpbGUuZmlsZS0+Z2V0U291cmNlKCkpCisgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPmVycm9yKERpYWdNZXNzYWdlKGZpbGUtPmdldFNvdXJjZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiZmFpbGVkIHRvIG9wZW4gZmlsZSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8eG1sOjpYbWxSZXNvdXJjZT4geG1sUmVzID0gbG9hZEJpbmFyeVhtbFNraXBGaWxlRXhwb3J0KAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5maWxlLT5nZXRTb3VyY2UoKSwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtQ29udGV4dC5nZXREaWFnbm9zdGljcygpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8eG1sOjpYbWxSZXNvdXJjZT4geG1sUmVzOworICAgICAgICAgICAgICAgIGlmICh1dGlsOjpzdHJpbmdFbmRzV2l0aDxjaGFyPihwYXRoLCAiLmZsYXQiKSkgeworICAgICAgICAgICAgICAgICAgICB4bWxSZXMgPSBsb2FkQmluYXJ5WG1sU2tpcEZpbGVFeHBvcnQoZmlsZS0+Z2V0U291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHhtbFJlcyA9IHhtbDo6aW5mbGF0ZShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSwgbUNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtPmdldFNvdXJjZSgpKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoIXhtbFJlcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBmaWxlIGRlc2NyaXB0aW9uIG92ZXIuCi0gICAgICAgICAgICAgICAgeG1sUmVzLT5maWxlID0gc3RkOjptb3ZlKCpmaWxlLmZpbGVFeHBvcnQpOworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgZmlsZSBkZXNjcmlwdGlvbiBoZWFkZXIuCisgICAgICAgICAgICAgICAgeG1sUmVzLT5maWxlID0gUmVzb3VyY2VGaWxleworICAgICAgICAgICAgICAgICAgICAgICAga2V5Lm5hbWUudG9SZXNvdXJjZU5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleS5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVG9NZXJnZS5vcmlnaW5hbFNvdXJjZSwKKyAgICAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAgICAgWG1sUmVmZXJlbmNlTGlua2VyIHhtbExpbmtlcjsKICAgICAgICAgICAgICAgICBpZiAoeG1sTGlua2VyLmNvbnN1bWUoJm1Db250ZXh0LCB4bWxSZXMuZ2V0KCkpKSB7CkBAIC03MzYsNyArNzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNka0xldmVsID0gc3RkOjptYXg8c2l6ZV90Pih4bWxSZXMtPmZpbGUuY29uZmlnLnNka1ZlcnNpb24sIDF1KTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICghZmxhdHRlblhtbCh4bWxSZXMuZ2V0KCksIGJ1aWxkUmVzb3VyY2VGaWxlTmFtZSh4bWxSZXMtPmZpbGUpLCBtYXhTZGtMZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmbGF0dGVuWG1sKHhtbFJlcy5nZXQoKSwgZmlsZVRvTWVyZ2UuZHN0UGF0aCwgbWF4U2RrTGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlV3JpdGVyLmdldCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC03NTAsMTkgKzc1NSwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxSZXMtPmZpbGUuY29uZmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZGtMZXZlbCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUmVzLT5maWxlLmNvbmZpZy5zZGtWZXJzaW9uID0gc2RrTGV2ZWw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VuUmVzb3VyY2VQYXRoID0gUmVzb3VyY2VVdGlsczo6YnVpbGRSZXNvdXJjZUZpbGVOYW1lKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbFJlcy0+ZmlsZSwgbUNvbnRleHQuZ2V0TmFtZU1hbmdsZXIoKSk7CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhZGRlZCA9IG1GaW5hbFRhYmxlLmFkZEZpbGVSZWZlcmVuY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUmVzLT5maWxlLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUmVzLT5maWxlLmNvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxSZXMtPmZpbGUuc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWw6OnV0ZjhUb1V0ZjE2KGJ1aWxkUmVzb3VyY2VGaWxlTmFtZSh4bWxSZXMtPmZpbGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsOjp1dGY4VG9VdGYxNihnZW5SZXNvdXJjZVBhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmxhdHRlblhtbCh4bWxSZXMuZ2V0KCksIGJ1aWxkUmVzb3VyY2VGaWxlTmFtZSh4bWxSZXMtPmZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RrTGV2ZWwsIGFyY2hpdmVXcml0ZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmxhdHRlblhtbCh4bWxSZXMuZ2V0KCksIGdlblJlc291cmNlUGF0aCwgc2RrTGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmNoaXZlV3JpdGVyLmdldCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNzc3LDcgKzc4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1Db250ZXh0LmdldERpYWdub3N0aWNzKCktPm5vdGUoRGlhZ01lc3NhZ2UoKSA8PCAiY29weWluZyAiIDw8IHBhdGgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghY29weUZpbGVUb0FyY2hpdmUoZmlsZS5maWxlLCBidWlsZFJlc291cmNlRmlsZU5hbWUoKmZpbGUuZmlsZUV4cG9ydCksIDAsCisgICAgICAgICAgICAgICAgaWYgKCFjb3B5RmlsZVRvQXJjaGl2ZShmaWxlVG9NZXJnZS5maWxlLCBmaWxlVG9NZXJnZS5kc3RQYXRoLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZVdyaXRlci5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTg0NSwxNSArODU0LDcgQEAKIAogICAgICAgICBpZiAobU9wdGlvbnMudmVyYm9zZSkgewogICAgICAgICAgICAgRGVidWc6OnByaW50VGFibGUoJm1GaW5hbFRhYmxlKTsKLSAgICAgICAgICAgIGZvciAoOyAhbVRhYmxlTWVyZ2VyLT5nZXRGaWxlTWVyZ2VRdWV1ZSgpLT5lbXB0eSgpOwotICAgICAgICAgICAgICAgICAgICBtVGFibGVNZXJnZXItPmdldEZpbGVNZXJnZVF1ZXVlKCktPnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgRmlsZVRvTWVyZ2UmIGYgPSBtVGFibGVNZXJnZXItPmdldEZpbGVNZXJnZVF1ZXVlKCktPmZyb250KCk7Ci0gICAgICAgICAgICAgICAgbUNvbnRleHQuZ2V0RGlhZ25vc3RpY3MoKS0+bm90ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIERpYWdNZXNzYWdlKCkgPDwgZi5zcmNQYXRoIDw8ICIgLT4gIiA8PCBmLmRzdFBhdGggPDwgIiBmcm9tICgweCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjpoZXggPDwgKHVpbnRwdHJfdCkgZi5zcmNUYWJsZSA8PCBzdGQ6OmRlYyk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTg2MSwyNCArODYyLDE1IEBACiAgICAgTGlua09wdGlvbnMgbU9wdGlvbnM7CiAgICAgTGlua0NvbnRleHQgbUNvbnRleHQ7CiAgICAgUmVzb3VyY2VUYWJsZSBtRmluYWxUYWJsZTsKKworICAgIFJlc291cmNlVGFibGUgbUxvY2FsRmlsZVRhYmxlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxUYWJsZU1lcmdlcj4gbVRhYmxlTWVyZ2VyOwogCisgICAgLy8gQSBwb2ludGVyIHRvIHRoZSBGaWxlQ29sbGVjdGlvbiByZXByZXNlbnRpbmcgdGhlIGZpbGVzeXN0ZW0gKG5vdCBhcmNoaXZlcykuCiAgICAgaW86OkZpbGVDb2xsZWN0aW9uKiBtRmlsZUNvbGxlY3Rpb247CisKKyAgICAvLyBBIHZlY3RvciBvZiBJRmlsZUNvbGxlY3Rpb25zLiBUaGlzIGlzIG1haW5seSBoZXJlIHRvIGtlZXAgb3duZXJzaGlwIG9mIHRoZSBjb2xsZWN0aW9ucy4KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8aW86OklGaWxlQ29sbGVjdGlvbj4+IG1Db2xsZWN0aW9uczsKLQotICAgIHN0cnVjdCBGaWxlVG9Qcm9jZXNzIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlRmlsZT4gZmlsZUV4cG9ydDsKLSAgICAgICAgaW86OklGaWxlKiBmaWxlOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgRmlsZVRvUHJvY2Vzc0NvbXBhcmF0b3IgewotICAgICAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgRmlsZVRvUHJvY2VzcyYgYSwgY29uc3QgRmlsZVRvUHJvY2VzcyYgYikgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dGllKGEuZmlsZUV4cG9ydC0+bmFtZSwgYS5maWxlRXhwb3J0LT5jb25maWcpIDwKLSAgICAgICAgICAgICAgICAgICAgc3RkOjp0aWUoYi5maWxlRXhwb3J0LT5uYW1lLCBiLmZpbGVFeHBvcnQtPmNvbmZpZyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3RkOjpzZXQ8RmlsZVRvUHJvY2VzcywgRmlsZVRvUHJvY2Vzc0NvbXBhcmF0b3I+IG1GaWxlc1RvUHJvY2VzczsKIH07CiAKIGludCBsaW5rKGNvbnN0IHN0ZDo6dmVjdG9yPFN0cmluZ1BpZWNlPiYgYXJncykgewpAQCAtOTE1LDYgKzkwNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlIG5hbWUiLCAmcHJpdmF0ZVN5bWJvbHNQYWNrYWdlKQogICAgICAgICAgICAgLm9wdGlvbmFsRmxhZ0xpc3QoIi0tZXh0cmEtcGFja2FnZXMiLCAiR2VuZXJhdGUgdGhlIHNhbWUgUi5qYXZhIGJ1dCB3aXRoIGRpZmZlcmVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSBuYW1lcyIsICZleHRyYUphdmFQYWNrYWdlcykKKyAgICAgICAgICAgIC5vcHRpb25hbFN3aXRjaCgiLS1hdXRvLWFkZC1vdmVybGF5IiwgIkFsbG93cyB0aGUgYWRkaXRpb24gb2YgbmV3IHJlc291cmNlcyBpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJsYXlzIHdpdGhvdXQgPGFkZC1yZXNvdXJjZT4gdGFncyIsICZvcHRpb25zLmF1dG9BZGRPdmVybGF5KQogICAgICAgICAgICAgLm9wdGlvbmFsU3dpdGNoKCItdiIsICJFbmFibGVzIHZlcmJvc2UgbG9nZ2luZyIsICZvcHRpb25zLnZlcmJvc2UpOwogCiAgICAgaWYgKCFmbGFncy5wYXJzZSgiYWFwdDIgbGluayIsIGFyZ3MsICZzdGQ6OmNlcnIpKSB7CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9saW5rL1RhYmxlTWVyZ2VyLmNwcCBiL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXIuY3BwCmluZGV4IGEwNmExYmYuLjI3YTIzYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXIuY3BwCisrKyBiL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXIuY3BwCkBAIC0xNSw2ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgIlJlc291cmNlVGFibGUuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVV0aWxzLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VWYWx1ZXMuaCIKICNpbmNsdWRlICJWYWx1ZVZpc2l0b3IuaCIKIApAQCAtMjYsOCArMjcsOSBAQAogCiBuYW1lc3BhY2UgYWFwdCB7CiAKLVRhYmxlTWVyZ2VyOjpUYWJsZU1lcmdlcihJQWFwdENvbnRleHQqIGNvbnRleHQsIFJlc291cmNlVGFibGUqIG91dFRhYmxlKSA6Ci0gICAgICAgIG1Db250ZXh0KGNvbnRleHQpLCBtTWFzdGVyVGFibGUob3V0VGFibGUpIHsKK1RhYmxlTWVyZ2VyOjpUYWJsZU1lcmdlcihJQWFwdENvbnRleHQqIGNvbnRleHQsIFJlc291cmNlVGFibGUqIG91dFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRhYmxlTWVyZ2VyT3B0aW9ucyYgb3B0aW9ucykgOgorICAgICAgICBtQ29udGV4dChjb250ZXh0KSwgbU1hc3RlclRhYmxlKG91dFRhYmxlKSwgbU9wdGlvbnMob3B0aW9ucykgewogICAgIC8vIENyZWF0ZSB0aGUgZGVzaXJlZCBwYWNrYWdlIHRoYXQgYWxsIHRhYmxlcyB3aWxsIGJlIG1lcmdlZCBpbnRvLgogICAgIG1NYXN0ZXJQYWNrYWdlID0gbU1hc3RlclRhYmxlLT5jcmVhdGVQYWNrYWdlKAogICAgICAgICAgICAgbUNvbnRleHQtPmdldENvbXBpbGF0aW9uUGFja2FnZSgpLCBtQ29udGV4dC0+Z2V0UGFja2FnZUlkKCkpOwpAQCAtMzcsNyArMzksOCBAQAogLyoqCiAgKiBUaGlzIHdpbGwgbWVyZ2UgcGFja2FnZXMgd2l0aCB0aGUgc2FtZSBwYWNrYWdlIG5hbWUgKG9yIG5vIHBhY2thZ2UgbmFtZSkuCiAgKi8KLWJvb2wgVGFibGVNZXJnZXI6Om1lcmdlKGNvbnN0IFNvdXJjZSYgc3JjLCBSZXNvdXJjZVRhYmxlKiB0YWJsZSwgYm9vbCBvdmVycmlkZUV4aXN0aW5nKSB7Citib29sIFRhYmxlTWVyZ2VyOjptZXJnZUltcGwoY29uc3QgU291cmNlJiBzcmMsIFJlc291cmNlVGFibGUqIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgb3ZlcmxheSwgYm9vbCBhbGxvd05ldykgewogICAgIGNvbnN0IHVpbnQ4X3QgZGVzaXJlZFBhY2thZ2VJZCA9IG1Db250ZXh0LT5nZXRQYWNrYWdlSWQoKTsKIAogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKQEAgLTU1LDE5ICs1OCwyNiBAQAogICAgICAgICAgICAgLy8gbWFuZ2xlZCwgdGhlbiBsb29rZWQgdXAgYXQgcmVzb2x1dGlvbiB0aW1lLgogICAgICAgICAgICAgLy8gQWxzbywgd2hlbiBsaW5raW5nLCB3ZSBjb252ZXJ0IHJlZmVyZW5jZXMgd2l0aCBubyBwYWNrYWdlIG5hbWUgdG8gdXNlCiAgICAgICAgICAgICAvLyB0aGUgY29tcGlsYXRpb24gcGFja2FnZSBuYW1lLgotICAgICAgICAgICAgaWYgKCFkb01lcmdlKHNyYywgdGFibGUsIHBhY2thZ2UuZ2V0KCksIGZhbHNlLCBvdmVycmlkZUV4aXN0aW5nKSkgewotICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVycm9yIHw9ICFkb01lcmdlKHNyYywgdGFibGUsIHBhY2thZ2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAvKiBtYW5nbGUgKi8sIG92ZXJsYXksIGFsbG93TmV3LCB7fSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuICFlcnJvcjsKIH0KIAorYm9vbCBUYWJsZU1lcmdlcjo6bWVyZ2UoY29uc3QgU291cmNlJiBzcmMsIFJlc291cmNlVGFibGUqIHRhYmxlKSB7CisgICAgcmV0dXJuIG1lcmdlSW1wbChzcmMsIHRhYmxlLCBmYWxzZSAvKiBvdmVybGF5ICovLCB0cnVlIC8qIGFsbG93IG5ldyAqLyk7Cit9CisKK2Jvb2wgVGFibGVNZXJnZXI6Om1lcmdlT3ZlcmxheShjb25zdCBTb3VyY2UmIHNyYywgUmVzb3VyY2VUYWJsZSogdGFibGUpIHsKKyAgICByZXR1cm4gbWVyZ2VJbXBsKHNyYywgdGFibGUsIHRydWUgLyogb3ZlcmxheSAqLywgbU9wdGlvbnMuYXV0b0FkZE92ZXJsYXkpOworfQorCiAvKioKICAqIFRoaXMgd2lsbCBtZXJnZSBhbmQgbWFuZ2xlIHJlc291cmNlcyBmcm9tIGEgc3RhdGljIGxpYnJhcnkuCiAgKi8KIGJvb2wgVGFibGVNZXJnZXI6Om1lcmdlQW5kTWFuZ2xlKGNvbnN0IFNvdXJjZSYgc3JjLCBjb25zdCBTdHJpbmdQaWVjZTE2JiBwYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlVGFibGUqIHRhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiB0YWJsZSwgaW86OklGaWxlQ29sbGVjdGlvbiogY29sbGVjdGlvbikgewogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIHBhY2thZ2UgOiB0YWJsZS0+cGFja2FnZXMpIHsKICAgICAgICAgLy8gV2FybiBvZiBwYWNrYWdlcyB3aXRoIGFuIHVucmVsYXRlZCBJRC4KQEAgLTc5LDE2ICs4OSwzNSBAQAogCiAgICAgICAgIGJvb2wgbWFuZ2xlID0gcGFja2FnZU5hbWUgIT0gbUNvbnRleHQtPmdldENvbXBpbGF0aW9uUGFja2FnZSgpOwogICAgICAgICBtTWVyZ2VkUGFja2FnZXMuaW5zZXJ0KHBhY2thZ2UtPm5hbWUpOwotICAgICAgICBpZiAoIWRvTWVyZ2Uoc3JjLCB0YWJsZSwgcGFja2FnZS5nZXQoKSwgbWFuZ2xlLCBmYWxzZSkpIHsKLSAgICAgICAgICAgIGVycm9yID0gdHJ1ZTsKLSAgICAgICAgfQorCisgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBbJl0oY29uc3QgUmVzb3VyY2VOYW1lUmVmJiBuYW1lLCBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVSZWZlcmVuY2UqIG5ld0ZpbGUsIEZpbGVSZWZlcmVuY2UqIG9sZEZpbGUpIC0+IGJvb2wgeworICAgICAgICAgICAgLy8gVGhlIG9sZCBmaWxlJ3MgcGF0aCBwb2ludHMgaW5zaWRlIHRoZSBBUEssIHNvIHdlIGNhbiB1c2UgaXQgYXMgaXMuCisgICAgICAgICAgICBpbzo6SUZpbGUqIGYgPSBjb2xsZWN0aW9uLT5maW5kRmlsZSh1dGlsOjp1dGYxNlRvVXRmOCgqb2xkRmlsZS0+cGF0aCkpOworICAgICAgICAgICAgaWYgKCFmKSB7CisgICAgICAgICAgICAgICAgbUNvbnRleHQtPmdldERpYWdub3N0aWNzKCktPmVycm9yKERpYWdNZXNzYWdlKHNyYykgPDwgImZpbGUgJyIgPDwgKm9sZEZpbGUtPnBhdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIicgbm90IGZvdW5kIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRmlsZXNUb01lcmdlW1Jlc291cmNlS2V5UmVmeyBuYW1lLCBjb25maWcgfV0gPSBGaWxlVG9NZXJnZXsKKyAgICAgICAgICAgICAgICAgICAgZiwgb2xkRmlsZS0+Z2V0U291cmNlKCksIHV0aWw6OnV0ZjE2VG9VdGY4KCpuZXdGaWxlLT5wYXRoKSB9OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgZXJyb3IgfD0gIWRvTWVyZ2Uoc3JjLCB0YWJsZSwgcGFja2FnZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuZ2xlLCBmYWxzZSAvKiBvdmVybGF5ICovLCB0cnVlIC8qIGFsbG93IG5ldyAqLywgY2FsbGJhY2spOwogICAgIH0KICAgICByZXR1cm4gIWVycm9yOwogfQogCi1ib29sIFRhYmxlTWVyZ2VyOjpkb01lcmdlKGNvbnN0IFNvdXJjZSYgc3JjLCBSZXNvdXJjZVRhYmxlKiBzcmNUYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZVBhY2thZ2UqIHNyY1BhY2thZ2UsIGNvbnN0IGJvb2wgbWFuZ2xlUGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVycmlkZUV4aXN0aW5nKSB7Citib29sIFRhYmxlTWVyZ2VyOjpkb01lcmdlKGNvbnN0IFNvdXJjZSYgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVRhYmxlKiBzcmNUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VUYWJsZVBhY2thZ2UqIHNyY1BhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFuZ2xlUGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVybGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93TmV3UmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlTWVyZ2VDYWxsYmFjayBjYWxsYmFjaykgewogICAgIGJvb2wgZXJyb3IgPSBmYWxzZTsKIAogICAgIGZvciAoYXV0byYgc3JjVHlwZSA6IHNyY1BhY2thZ2UtPnR5cGVzKSB7CkBAIC0xMTIsMTAgKzE0MSwzMyBAQAogICAgICAgICBmb3IgKGF1dG8mIHNyY0VudHJ5IDogc3JjVHlwZS0+ZW50cmllcykgewogICAgICAgICAgICAgUmVzb3VyY2VFbnRyeSogZHN0RW50cnk7CiAgICAgICAgICAgICBpZiAobWFuZ2xlUGFja2FnZSkgewotICAgICAgICAgICAgICAgIGRzdEVudHJ5ID0gZHN0VHlwZS0+ZmluZE9yQ3JlYXRlRW50cnkoTmFtZU1hbmdsZXI6Om1hbmdsZUVudHJ5KAotICAgICAgICAgICAgICAgICAgICAgICAgc3JjUGFja2FnZS0+bmFtZSwgc3JjRW50cnktPm5hbWUpKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnUxNnN0cmluZyBtYW5nbGVkTmFtZSA9IE5hbWVNYW5nbGVyOjptYW5nbGVFbnRyeShzcmNQYWNrYWdlLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY0VudHJ5LT5uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsb3dOZXdSZXNvdXJjZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0RW50cnkgPSBkc3RUeXBlLT5maW5kT3JDcmVhdGVFbnRyeShtYW5nbGVkTmFtZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZHN0RW50cnkgPSBkc3RUeXBlLT5maW5kRW50cnkobWFuZ2xlZE5hbWUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZHN0RW50cnkgPSBkc3RUeXBlLT5maW5kT3JDcmVhdGVFbnRyeShzcmNFbnRyeS0+bmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGFsbG93TmV3UmVzb3VyY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGRzdEVudHJ5ID0gZHN0VHlwZS0+ZmluZE9yQ3JlYXRlRW50cnkoc3JjRW50cnktPm5hbWUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRzdEVudHJ5ID0gZHN0VHlwZS0+ZmluZEVudHJ5KHNyY0VudHJ5LT5uYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZHN0RW50cnkpIHsKKyAgICAgICAgICAgICAgICBtQ29udGV4dC0+Z2V0RGlhZ25vc3RpY3MoKS0+ZXJyb3IoRGlhZ01lc3NhZ2Uoc3JjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAicmVzb3VyY2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBSZXNvdXJjZU5hbWVSZWYoc3JjUGFja2FnZS0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1R5cGUtPnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNFbnRyeS0+bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiBkb2VzIG5vdCBvdmVycmlkZSBhbiBleGlzdGluZyByZXNvdXJjZSIpOworICAgICAgICAgICAgICAgIG1Db250ZXh0LT5nZXREaWFnbm9zdGljcygpLT5ub3RlKERpYWdNZXNzYWdlKHNyYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiZGVmaW5lIGFuIDxhZGQtcmVzb3VyY2U+IHRhZyBvciB1c2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWF1dG8tYWRkLW92ZXJsYXkiKTsKKyAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzcmNFbnRyeS0+c3ltYm9sU3RhdHVzLnN0YXRlICE9IFN5bWJvbFN0YXRlOjprVW5kZWZpbmVkKSB7CkBAIC0xNDMsNiArMTk1LDggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIFJlc291cmNlTmFtZVJlZiByZXNOYW1lKG1NYXN0ZXJQYWNrYWdlLT5uYW1lLCBkc3RUeXBlLT50eXBlLCBkc3RFbnRyeS0+bmFtZSk7CisKICAgICAgICAgICAgIGZvciAoUmVzb3VyY2VDb25maWdWYWx1ZSYgc3JjVmFsdWUgOiBzcmNFbnRyeS0+dmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgYXV0byBpdGVyID0gc3RkOjpsb3dlcl9ib3VuZChkc3RFbnRyeS0+dmFsdWVzLmJlZ2luKCksIGRzdEVudHJ5LT52YWx1ZXMuZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNWYWx1ZS5jb25maWcsIGNtcDo6bGVzc1RoYW5Db25maWcpOwpAQCAtMTUwLDcgKzIwNCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gZHN0RW50cnktPnZhbHVlcy5lbmQoKSAmJiBpdGVyLT5jb25maWcgPT0gc3JjVmFsdWUuY29uZmlnKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBjb2xsaXNpb25SZXN1bHQgPSBSZXNvdXJjZVRhYmxlOjpyZXNvbHZlVmFsdWVDb2xsaXNpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUuZ2V0KCksIHNyY1ZhbHVlLnZhbHVlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvblJlc3VsdCA9PSAwICYmICFvdmVycmlkZUV4aXN0aW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb2xsaXNpb25SZXN1bHQgPT0gMCAmJiAhb3ZlcmxheSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3IhCiAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZU5hbWVSZWYgcmVzb3VyY2VOYW1lKHNyY1BhY2thZ2UtPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1R5cGUtPnR5cGUsCkBAIC0xNzUsMTAgKzIyOSwyNiBAQAogICAgICAgICAgICAgICAgICAgICBpdGVyID0gZHN0RW50cnktPnZhbHVlcy5pbnNlcnQoaXRlciwgUmVzb3VyY2VDb25maWdWYWx1ZXsgc3JjVmFsdWUuY29uZmlnIH0pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChtYW5nbGVQYWNrYWdlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gY2xvbmVBbmRNYW5nbGUoc3JjVGFibGUsIHNyY1BhY2thZ2UtPm5hbWUsIHNyY1ZhbHVlLnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoRmlsZVJlZmVyZW5jZSogZiA9IHZhbHVlQ2FzdDxGaWxlUmVmZXJlbmNlPihzcmNWYWx1ZS52YWx1ZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEZpbGVSZWZlcmVuY2U+IG5ld0ZpbGVSZWY7CisgICAgICAgICAgICAgICAgICAgIGlmIChtYW5nbGVQYWNrYWdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlUmVmID0gY2xvbmVBbmRNYW5nbGVGaWxlKHNyY1BhY2thZ2UtPm5hbWUsICpmKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGVSZWYgPSBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVJlZmVyZW5jZT4oZi0+Y2xvbmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtTWFzdGVyVGFibGUtPnN0cmluZ1Bvb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsYmFjayhyZXNOYW1lLCBpdGVyLT5jb25maWcsIG5ld0ZpbGVSZWYuZ2V0KCksIGYpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gc3RkOjptb3ZlKG5ld0ZpbGVSZWYpOworCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUgPSBjbG9uZShzcmNWYWx1ZS52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlID0gc3RkOjp1bmlxdWVfcHRyPFZhbHVlPihzcmNWYWx1ZS52YWx1ZS0+Y2xvbmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1NYXN0ZXJUYWJsZS0+c3RyaW5nUG9vbCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTg2LDI4ICsyNTYsNTIgQEAKICAgICByZXR1cm4gIWVycm9yOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+IFRhYmxlTWVyZ2VyOjpjbG9uZUFuZE1hbmdsZShSZXNvdXJjZVRhYmxlKiB0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dTE2c3RyaW5nJiBwYWNrYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlKSB7Ci0gICAgaWYgKEZpbGVSZWZlcmVuY2UqIGYgPSB2YWx1ZUNhc3Q8RmlsZVJlZmVyZW5jZT4odmFsdWUpKSB7Ci0gICAgICAgIC8vIE1hbmdsZSB0aGUgcGF0aC4KLSAgICAgICAgU3RyaW5nUGllY2UxNiBwcmVmaXgsIGVudHJ5LCBzdWZmaXg7Ci0gICAgICAgIGlmICh1dGlsOjpleHRyYWN0UmVzRmlsZVBhdGhQYXJ0cygqZi0+cGF0aCwgJnByZWZpeCwgJmVudHJ5LCAmc3VmZml4KSkgewotICAgICAgICAgICAgc3RkOjp1MTZzdHJpbmcgbWFuZ2xlZEVudHJ5ID0gTmFtZU1hbmdsZXI6Om1hbmdsZUVudHJ5KHBhY2thZ2UsIGVudHJ5LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgc3RkOjp1MTZzdHJpbmcgbmV3UGF0aCA9IHByZWZpeC50b1N0cmluZygpICsgbWFuZ2xlZEVudHJ5ICsgc3VmZml4LnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICBtRmlsZXNUb01lcmdlLnB1c2goRmlsZVRvTWVyZ2V7IHRhYmxlLCAqZi0+cGF0aCwgbmV3UGF0aCB9KTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlUmVmZXJlbmNlPiBmaWxlUmVmID0gdXRpbDo6bWFrZV91bmlxdWU8RmlsZVJlZmVyZW5jZT4oCi0gICAgICAgICAgICAgICAgICAgIG1NYXN0ZXJUYWJsZS0+c3RyaW5nUG9vbC5tYWtlUmVmKG5ld1BhdGgpKTsKLSAgICAgICAgICAgIGZpbGVSZWYtPnNldENvbW1lbnQoZi0+Z2V0Q29tbWVudCgpKTsKLSAgICAgICAgICAgIGZpbGVSZWYtPnNldFNvdXJjZShmLT5nZXRTb3VyY2UoKSk7Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptb3ZlKGZpbGVSZWYpOwotICAgICAgICB9CitzdGQ6OnVuaXF1ZV9wdHI8RmlsZVJlZmVyZW5jZT4gVGFibGVNZXJnZXI6OmNsb25lQW5kTWFuZ2xlRmlsZShjb25zdCBzdGQ6OnUxNnN0cmluZyYgcGFja2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGVSZWZlcmVuY2UmIGZpbGVSZWYpIHsKKworICAgIFN0cmluZ1BpZWNlMTYgcHJlZml4LCBlbnRyeSwgc3VmZml4OworICAgIGlmICh1dGlsOjpleHRyYWN0UmVzRmlsZVBhdGhQYXJ0cygqZmlsZVJlZi5wYXRoLCAmcHJlZml4LCAmZW50cnksICZzdWZmaXgpKSB7CisgICAgICAgIHN0ZDo6dTE2c3RyaW5nIG1hbmdsZWRFbnRyeSA9IE5hbWVNYW5nbGVyOjptYW5nbGVFbnRyeShwYWNrYWdlLCBlbnRyeS50b1N0cmluZygpKTsKKyAgICAgICAgc3RkOjp1MTZzdHJpbmcgbmV3UGF0aCA9IHByZWZpeC50b1N0cmluZygpICsgbWFuZ2xlZEVudHJ5ICsgc3VmZml4LnRvU3RyaW5nKCk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlUmVmZXJlbmNlPiBuZXdGaWxlUmVmID0gdXRpbDo6bWFrZV91bmlxdWU8RmlsZVJlZmVyZW5jZT4oCisgICAgICAgICAgICAgICAgbU1hc3RlclRhYmxlLT5zdHJpbmdQb29sLm1ha2VSZWYobmV3UGF0aCkpOworICAgICAgICBuZXdGaWxlUmVmLT5zZXRDb21tZW50KGZpbGVSZWYuZ2V0Q29tbWVudCgpKTsKKyAgICAgICAgbmV3RmlsZVJlZi0+c2V0U291cmNlKGZpbGVSZWYuZ2V0U291cmNlKCkpOworICAgICAgICByZXR1cm4gbmV3RmlsZVJlZjsKICAgICB9Ci0gICAgcmV0dXJuIGNsb25lKHZhbHVlKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEZpbGVSZWZlcmVuY2U+KGZpbGVSZWYuY2xvbmUoJm1NYXN0ZXJUYWJsZS0+c3RyaW5nUG9vbCkpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+IFRhYmxlTWVyZ2VyOjpjbG9uZShWYWx1ZSogdmFsdWUpIHsKLSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFZhbHVlPih2YWx1ZS0+Y2xvbmUoJm1NYXN0ZXJUYWJsZS0+c3RyaW5nUG9vbCkpOworYm9vbCBUYWJsZU1lcmdlcjo6bWVyZ2VGaWxlSW1wbChjb25zdCBSZXNvdXJjZUZpbGUmIGZpbGVEZXNjLCBpbzo6SUZpbGUqIGZpbGUsIGJvb2wgb3ZlcmxheSkgeworICAgIFJlc291cmNlVGFibGUgdGFibGU7CisgICAgc3RkOjp1MTZzdHJpbmcgcGF0aCA9IHV0aWw6OnV0ZjhUb1V0ZjE2KFJlc291cmNlVXRpbHM6OmJ1aWxkUmVzb3VyY2VGaWxlTmFtZShmaWxlRGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsZVJlZmVyZW5jZT4gZmlsZVJlZiA9IHV0aWw6Om1ha2VfdW5pcXVlPEZpbGVSZWZlcmVuY2U+KAorICAgICAgICAgICAgdGFibGUuc3RyaW5nUG9vbC5tYWtlUmVmKHBhdGgpKTsKKyAgICBmaWxlUmVmLT5zZXRTb3VyY2UoZmlsZURlc2Muc291cmNlKTsKKworICAgIFJlc291cmNlVGFibGVQYWNrYWdlKiBwa2cgPSB0YWJsZS5jcmVhdGVQYWNrYWdlKGZpbGVEZXNjLm5hbWUucGFja2FnZSwgMHgwKTsKKyAgICBwa2ctPmZpbmRPckNyZWF0ZVR5cGUoZmlsZURlc2MubmFtZS50eXBlKQorICAgICAgICAgICAgLT5maW5kT3JDcmVhdGVFbnRyeShmaWxlRGVzYy5uYW1lLmVudHJ5KQorICAgICAgICAgICAgLT52YWx1ZXMucHVzaF9iYWNrKFJlc291cmNlQ29uZmlnVmFsdWV7IGZpbGVEZXNjLmNvbmZpZywgc3RkOjptb3ZlKGZpbGVSZWYpIH0pOworCisgICAgYXV0byBjYWxsYmFjayA9IFsmXShjb25zdCBSZXNvdXJjZU5hbWVSZWYmIG5hbWUsIGNvbnN0IENvbmZpZ0Rlc2NyaXB0aW9uJiBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgIEZpbGVSZWZlcmVuY2UqIG5ld0ZpbGUsIEZpbGVSZWZlcmVuY2UqIG9sZEZpbGUpIC0+IGJvb2wgeworICAgICAgICBtRmlsZXNUb01lcmdlW1Jlc291cmNlS2V5UmVmeyBuYW1lLCBjb25maWcgfV0gPSBGaWxlVG9NZXJnZXsKKyAgICAgICAgICAgICAgICBmaWxlLCBvbGRGaWxlLT5nZXRTb3VyY2UoKSwgdXRpbDo6dXRmMTZUb1V0ZjgoKm5ld0ZpbGUtPnBhdGgpIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICByZXR1cm4gZG9NZXJnZShmaWxlLT5nZXRTb3VyY2UoKSwgJnRhYmxlLCBwa2csCisgICAgICAgICAgICAgICAgICAgZmFsc2UgLyogbWFuZ2xlICovLCBvdmVybGF5IC8qIG92ZXJsYXkgKi8sIHRydWUgLyogYWxsb3cgbmV3ICovLCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgVGFibGVNZXJnZXI6Om1lcmdlRmlsZShjb25zdCBSZXNvdXJjZUZpbGUmIGZpbGVEZXNjLCBpbzo6SUZpbGUqIGZpbGUpIHsKKyAgICByZXR1cm4gbWVyZ2VGaWxlSW1wbChmaWxlRGVzYywgZmlsZSwgZmFsc2UgLyogb3ZlcmxheSAqLyk7Cit9CisKK2Jvb2wgVGFibGVNZXJnZXI6Om1lcmdlRmlsZU92ZXJsYXkoY29uc3QgUmVzb3VyY2VGaWxlJiBmaWxlRGVzYywgaW86OklGaWxlKiBmaWxlKSB7CisgICAgcmV0dXJuIG1lcmdlRmlsZUltcGwoZmlsZURlc2MsIGZpbGUsIHRydWUgLyogb3ZlcmxheSAqLyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGFhcHQKZGlmZiAtLWdpdCBhL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXIuaCBiL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXIuaAppbmRleCBhMmM5ZGJmLi5lMWJlNWQ1IDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9saW5rL1RhYmxlTWVyZ2VyLmgKKysrIGIvdG9vbHMvYWFwdDIvbGluay9UYWJsZU1lcmdlci5oCkBAIC0xNywyMSArMTcsNDAgQEAKICNpZm5kZWYgQUFQVF9UQUJMRU1FUkdFUl9ICiAjZGVmaW5lIEFBUFRfVEFCTEVNRVJHRVJfSAogCisjaW5jbHVkZSAiUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VWYWx1ZXMuaCIKKyNpbmNsdWRlICJpby9GaWxlLmgiCisjaW5jbHVkZSAicHJvY2Vzcy9JUmVzb3VyY2VUYWJsZUNvbnN1bWVyLmgiCiAjaW5jbHVkZSAidXRpbC9VdGlsLmgiCiAKLSNpbmNsdWRlICJwcm9jZXNzL0lSZXNvdXJjZVRhYmxlQ29uc3VtZXIuaCIKLQotI2luY2x1ZGUgPHF1ZXVlPgotI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPG1hcD4KIAogbmFtZXNwYWNlIGFhcHQgewogCiBzdHJ1Y3QgRmlsZVRvTWVyZ2UgewotICAgIFJlc291cmNlVGFibGUqIHNyY1RhYmxlOwotICAgIHN0ZDo6dTE2c3RyaW5nIHNyY1BhdGg7Ci0gICAgc3RkOjp1MTZzdHJpbmcgZHN0UGF0aDsKKyAgICAvKioKKyAgICAgKiBUaGUgY29tcGlsZWQgZmlsZSBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIGRhdGEuCisgICAgICovCisgICAgaW86OklGaWxlKiBmaWxlOworCisgICAgLyoqCisgICAgICogV2hlcmUgdGhlIG9yaWdpbmFsLCB1bmNvbXBpbGVkIGZpbGUgY2FtZSBmcm9tLgorICAgICAqLworICAgIFNvdXJjZSBvcmlnaW5hbFNvdXJjZTsKKworICAgIC8qKgorICAgICAqIFRoZSBkZXN0aW5hdGlvbiBwYXRoIHdpdGhpbiB0aGUgQVBLL2FyY2hpdmUuCisgICAgICovCisgICAgc3RkOjpzdHJpbmcgZHN0UGF0aDsKK307CisKK3N0cnVjdCBUYWJsZU1lcmdlck9wdGlvbnMgeworICAgIC8qKgorICAgICAqIElmIHRydWUsIHJlc291cmNlcyBpbiBvdmVybGF5cyBjYW4gYmUgYWRkZWQgd2l0aG91dCBwcmV2aW91c2x5IGhhdmluZyBleGlzdGVkLgorICAgICAqLworICAgIGJvb2wgYXV0b0FkZE92ZXJsYXkgPSBmYWxzZTsKIH07CiAKIC8qKgpAQCAtNTAsNDAgKzY5LDc0IEBACiAgKi8KIGNsYXNzIFRhYmxlTWVyZ2VyIHsKIHB1YmxpYzoKLSAgICBUYWJsZU1lcmdlcihJQWFwdENvbnRleHQqIGNvbnRleHQsIFJlc291cmNlVGFibGUqIG91dFRhYmxlKTsKKyAgICAvKioKKyAgICAgKiBOb3RlOiBUaGUgb3V0VGFibGUgUmVzb3VyY2VUYWJsZSBtdXN0IGxpdmUgbG9uZ2VyIHRoYW4gdGhpcyBUYWJsZU1lcmdlci4gUmVmZXJlbmNlcworICAgICAqIGFyZSBtYWRlIHRvIHRoaXMgUmVzb3VyY2VUYWJsZSBmb3IgZWZmaWNpZW5jeSByZWFzb25zLgorICAgICAqLworICAgIFRhYmxlTWVyZ2VyKElBYXB0Q29udGV4dCogY29udGV4dCwgUmVzb3VyY2VUYWJsZSogb3V0VGFibGUsIGNvbnN0IFRhYmxlTWVyZ2VyT3B0aW9ucyYgb3B0aW9ucyk7CiAKLSAgICBpbmxpbmUgc3RkOjpxdWV1ZTxGaWxlVG9NZXJnZT4qIGdldEZpbGVNZXJnZVF1ZXVlKCkgewotICAgICAgICByZXR1cm4gJm1GaWxlc1RvTWVyZ2U7CisgICAgY29uc3Qgc3RkOjptYXA8UmVzb3VyY2VLZXlSZWYsIEZpbGVUb01lcmdlPiYgZ2V0RmlsZXNUb01lcmdlKCkgeworICAgICAgICByZXR1cm4gbUZpbGVzVG9NZXJnZTsKICAgICB9CiAKLSAgICBpbmxpbmUgY29uc3Qgc3RkOjpzZXQ8c3RkOjp1MTZzdHJpbmc+JiBnZXRNZXJnZWRQYWNrYWdlcygpIGNvbnN0IHsKKyAgICBjb25zdCBzdGQ6OnNldDxzdGQ6OnUxNnN0cmluZz4mIGdldE1lcmdlZFBhY2thZ2VzKCkgY29uc3QgewogICAgICAgICByZXR1cm4gbU1lcmdlZFBhY2thZ2VzOwogICAgIH0KIAogICAgIC8qKgogICAgICAqIE1lcmdlcyByZXNvdXJjZXMgZnJvbSB0aGUgc2FtZSBvciBlbXB0eSBwYWNrYWdlLiBUaGlzIGlzIGZvciBsb2NhbCBzb3VyY2VzLgogICAgICAqLwotICAgIGJvb2wgbWVyZ2UoY29uc3QgU291cmNlJiBzcmMsIFJlc291cmNlVGFibGUqIHRhYmxlLCBib29sIG92ZXJyaWRlRXhpc3RpbmcpOworICAgIGJvb2wgbWVyZ2UoY29uc3QgU291cmNlJiBzcmMsIFJlc291cmNlVGFibGUqIHRhYmxlKTsKKworICAgIC8qKgorICAgICAqIE1lcmdlcyByZXNvdXJjZXMgZnJvbSBhbiBvdmVybGF5IFJlc291cmNlVGFibGUuCisgICAgICovCisgICAgYm9vbCBtZXJnZU92ZXJsYXkoY29uc3QgU291cmNlJiBzcmMsIFJlc291cmNlVGFibGUqIHRhYmxlKTsKIAogICAgIC8qKgogICAgICAqIE1lcmdlcyByZXNvdXJjZXMgZnJvbSB0aGUgZ2l2ZW4gcGFja2FnZSwgbWFuZ2xpbmcgdGhlIG5hbWUuIFRoaXMgaXMgZm9yIHN0YXRpYyBsaWJyYXJpZXMuCisgICAgICogQW4gaW86OklGaWxlQ29sbGVjdGlvbiBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZmluZCB0aGUgcmVmZXJlbmNlZCBGaWxlcyBhbmQgcHJvY2VzcyB0aGVtLgogICAgICAqLwotICAgIGJvb2wgbWVyZ2VBbmRNYW5nbGUoY29uc3QgU291cmNlJiBzcmMsIGNvbnN0IFN0cmluZ1BpZWNlMTYmIHBhY2thZ2UsIFJlc291cmNlVGFibGUqIHRhYmxlKTsKKyAgICBib29sIG1lcmdlQW5kTWFuZ2xlKGNvbnN0IFNvdXJjZSYgc3JjLCBjb25zdCBTdHJpbmdQaWVjZTE2JiBwYWNrYWdlLCBSZXNvdXJjZVRhYmxlKiB0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlvOjpJRmlsZUNvbGxlY3Rpb24qIGNvbGxlY3Rpb24pOworCisgICAgLyoqCisgICAgICogTWVyZ2VzIGEgY29tcGlsZWQgZmlsZSB0aGF0IGJlbG9uZ3MgdG8gdGhpcyBzYW1lIG9yIGVtcHR5IHBhY2thZ2UuIFRoaXMgaXMgZm9yIGxvY2FsIHNvdXJjZXMuCisgICAgICovCisgICAgYm9vbCBtZXJnZUZpbGUoY29uc3QgUmVzb3VyY2VGaWxlJiBmaWxlRGVzYywgaW86OklGaWxlKiBmaWxlKTsKKworICAgIC8qKgorICAgICAqIE1lcmdlcyBhIGNvbXBpbGVkIGZpbGUgZnJvbSBhbiBvdmVybGF5LCBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGRlZmluaXRpb24uCisgICAgICovCisgICAgYm9vbCBtZXJnZUZpbGVPdmVybGF5KGNvbnN0IFJlc291cmNlRmlsZSYgZmlsZURlc2MsIGlvOjpJRmlsZSogZmlsZSk7CiAKIHByaXZhdGU6CisgICAgdXNpbmcgRmlsZU1lcmdlQ2FsbGJhY2sgPSBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgUmVzb3VyY2VOYW1lUmVmJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVSZWZlcmVuY2UqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVSZWZlcmVuY2UqKT47CisKICAgICBJQWFwdENvbnRleHQqIG1Db250ZXh0OwogICAgIFJlc291cmNlVGFibGUqIG1NYXN0ZXJUYWJsZTsKKyAgICBUYWJsZU1lcmdlck9wdGlvbnMgbU9wdGlvbnM7CiAgICAgUmVzb3VyY2VUYWJsZVBhY2thZ2UqIG1NYXN0ZXJQYWNrYWdlOwogCiAgICAgc3RkOjpzZXQ8c3RkOjp1MTZzdHJpbmc+IG1NZXJnZWRQYWNrYWdlczsKLSAgICBzdGQ6OnF1ZXVlPEZpbGVUb01lcmdlPiBtRmlsZXNUb01lcmdlOworICAgIHN0ZDo6bWFwPFJlc291cmNlS2V5UmVmLCBGaWxlVG9NZXJnZT4gbUZpbGVzVG9NZXJnZTsKKworICAgIGJvb2wgbWVyZ2VGaWxlSW1wbChjb25zdCBSZXNvdXJjZUZpbGUmIGZpbGVEZXNjLCBpbzo6SUZpbGUqIGZpbGUsIGJvb2wgb3ZlcmxheSk7CisKKyAgICBib29sIG1lcmdlSW1wbChjb25zdCBTb3VyY2UmIHNyYywgUmVzb3VyY2VUYWJsZSogc3JjVGFibGUsCisgICAgICAgICAgICAgICAgICAgYm9vbCBvdmVybGF5LCBib29sIGFsbG93TmV3KTsKIAogICAgIGJvb2wgZG9NZXJnZShjb25zdCBTb3VyY2UmIHNyYywgUmVzb3VyY2VUYWJsZSogc3JjVGFibGUsIFJlc291cmNlVGFibGVQYWNrYWdlKiBzcmNQYWNrYWdlLAotICAgICAgICAgICAgICAgICBjb25zdCBib29sIG1hbmdsZVBhY2thZ2UsIGNvbnN0IGJvb2wgb3ZlcnJpZGVFeGlzdGluZyk7CisgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgbWFuZ2xlUGFja2FnZSwKKyAgICAgICAgICAgICAgICAgY29uc3QgYm9vbCBvdmVybGF5LAorICAgICAgICAgICAgICAgICBjb25zdCBib29sIGFsbG93TmV3UmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICBGaWxlTWVyZ2VDYWxsYmFjayBjYWxsYmFjayk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+IGNsb25lQW5kTWFuZ2xlKFJlc291cmNlVGFibGUqIHRhYmxlLCBjb25zdCBzdGQ6OnUxNnN0cmluZyYgcGFja2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlPiBjbG9uZShWYWx1ZSogdmFsdWUpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxlUmVmZXJlbmNlPiBjbG9uZUFuZE1hbmdsZUZpbGUoY29uc3Qgc3RkOjp1MTZzdHJpbmcmIHBhY2thZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxlUmVmZXJlbmNlJiB2YWx1ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBhYXB0CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi9saW5rL1RhYmxlTWVyZ2VyX3Rlc3QuY3BwIGIvdG9vbHMvYWFwdDIvbGluay9UYWJsZU1lcmdlcl90ZXN0LmNwcAppbmRleCBiN2ZmYmE3Li5mYTRhZmQzIDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi9saW5rL1RhYmxlTWVyZ2VyX3Rlc3QuY3BwCisrKyBiL3Rvb2xzL2FhcHQyL2xpbmsvVGFibGVNZXJnZXJfdGVzdC5jcHAKQEAgLTE0LDggKzE0LDggQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKKyNpbmNsdWRlICJpby9GaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAibGluay9UYWJsZU1lcmdlci5oIgotCiAjaW5jbHVkZSAidGVzdC9CdWlsZGVycy5oIgogI2luY2x1ZGUgInRlc3QvQ29udGV4dC5oIgogCkBAIC01NywxMCArNTcsMTEgQEAKICAgICAgICAgICAgIC5idWlsZCgpOwogCiAgICAgUmVzb3VyY2VUYWJsZSBmaW5hbFRhYmxlOwotICAgIFRhYmxlTWVyZ2VyIG1lcmdlcihtQ29udGV4dC5nZXQoKSwgJmZpbmFsVGFibGUpOworICAgIFRhYmxlTWVyZ2VyIG1lcmdlcihtQ29udGV4dC5nZXQoKSwgJmZpbmFsVGFibGUsIFRhYmxlTWVyZ2VyT3B0aW9uc3t9KTsKKyAgICBpbzo6RmlsZUNvbGxlY3Rpb24gY29sbGVjdGlvbjsKIAotICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZSh7fSwgdGFibGVBLmdldCgpLCBmYWxzZSkpOwotICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZUFuZE1hbmdsZSh7fSwgdSJjb20uYXBwLmIiLCB0YWJsZUIuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2Uoe30sIHRhYmxlQS5nZXQoKSkpOworICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZUFuZE1hbmdsZSh7fSwgdSJjb20uYXBwLmIiLCB0YWJsZUIuZ2V0KCksICZjb2xsZWN0aW9uKSk7CiAKICAgICBFWFBFQ1RfVFJVRShtZXJnZXIuZ2V0TWVyZ2VkUGFja2FnZXMoKS5jb3VudCh1ImNvbS5hcHAuYiIpICE9IDApOwogCkBAIC03Niw2ICs3Nyw2MCBAQAogICAgIEFBUFRfRVhQRUNUX1RSVUUoZmluYWxUYWJsZS5maW5kUmVzb3VyY2UodGVzdDo6cGFyc2VOYW1lT3JEaWUodSJAY29tLmFwcC5hOmlkL2NvbS5hcHAuYiRmb28iKSkpOwogfQogCitURVNUX0YoVGFibGVNZXJnZXJUZXN0LCBNZXJnZUZpbGUpIHsKKyAgICBSZXNvdXJjZVRhYmxlIGZpbmFsVGFibGU7CisgICAgVGFibGVNZXJnZXJPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5hdXRvQWRkT3ZlcmxheSA9IGZhbHNlOworICAgIFRhYmxlTWVyZ2VyIG1lcmdlcihtQ29udGV4dC5nZXQoKSwgJmZpbmFsVGFibGUsIG9wdGlvbnMpOworCisgICAgUmVzb3VyY2VGaWxlIGZpbGVEZXNjOworICAgIGZpbGVEZXNjLmNvbmZpZyA9IHRlc3Q6OnBhcnNlQ29uZmlnT3JEaWUoImhkcGktdjQiKTsKKyAgICBmaWxlRGVzYy5uYW1lID0gdGVzdDo6cGFyc2VOYW1lT3JEaWUodSJAbGF5b3V0L21haW4iKTsKKyAgICBmaWxlRGVzYy5zb3VyY2UgPSBTb3VyY2UoInJlcy9sYXlvdXQtaGRwaS9tYWluLnhtbCIpOworICAgIHRlc3Q6OlRlc3RGaWxlIHRlc3RGaWxlKCJwYXRoL3RvL3Jlcy9sYXlvdXQtaGRwaS9tYWluLnhtbC5mbGF0Iik7CisKKyAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2VGaWxlKGZpbGVEZXNjLCAmdGVzdEZpbGUpKTsKKworICAgIEZpbGVSZWZlcmVuY2UqIGZpbGUgPSB0ZXN0OjpnZXRWYWx1ZUZvckNvbmZpZzxGaWxlUmVmZXJlbmNlPigmZmluYWxUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSJAY29tLmFwcC5hOmxheW91dC9tYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDo6cGFyc2VDb25maWdPckRpZSgiaGRwaS12NCIpKTsKKyAgICBBU1NFUlRfTkUobnVsbHB0ciwgZmlsZSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6dTE2c3RyaW5nKHUicmVzL2xheW91dC1oZHBpLXY0L21haW4ueG1sIiksICpmaWxlLT5wYXRoKTsKKworICAgIFJlc291cmNlTmFtZSBuYW1lID0gdGVzdDo6cGFyc2VOYW1lT3JEaWUodSJAY29tLmFwcC5hOmxheW91dC9tYWluIik7CisgICAgUmVzb3VyY2VLZXlSZWYga2V5ID0geyBuYW1lLCB0ZXN0OjpwYXJzZUNvbmZpZ09yRGllKCJoZHBpLXY0IikgfTsKKworICAgIGF1dG8gaXRlciA9IG1lcmdlci5nZXRGaWxlc1RvTWVyZ2UoKS5maW5kKGtleSk7CisgICAgQVNTRVJUX05FKG1lcmdlci5nZXRGaWxlc1RvTWVyZ2UoKS5lbmQoKSwgaXRlcik7CisKKyAgICBjb25zdCBGaWxlVG9NZXJnZSYgYWN0dWFsRmlsZVRvTWVyZ2UgPSBpdGVyLT5zZWNvbmQ7CisgICAgRVhQRUNUX0VRKCZ0ZXN0RmlsZSwgYWN0dWFsRmlsZVRvTWVyZ2UuZmlsZSk7CisgICAgRVhQRUNUX0VRKHN0ZDo6c3RyaW5nKCJyZXMvbGF5b3V0LWhkcGktdjQvbWFpbi54bWwiKSwgYWN0dWFsRmlsZVRvTWVyZ2UuZHN0UGF0aCk7Cit9CisKK1RFU1RfRihUYWJsZU1lcmdlclRlc3QsIE1lcmdlRmlsZU92ZXJsYXkpIHsKKyAgICBSZXNvdXJjZVRhYmxlIGZpbmFsVGFibGU7CisgICAgVGFibGVNZXJnZXJPcHRpb25zIHRhYmxlTWVyZ2VyT3B0aW9uczsKKyAgICB0YWJsZU1lcmdlck9wdGlvbnMuYXV0b0FkZE92ZXJsYXkgPSBmYWxzZTsKKyAgICBUYWJsZU1lcmdlciBtZXJnZXIobUNvbnRleHQuZ2V0KCksICZmaW5hbFRhYmxlLCB0YWJsZU1lcmdlck9wdGlvbnMpOworCisgICAgUmVzb3VyY2VGaWxlIGZpbGVEZXNjOworICAgIGZpbGVEZXNjLm5hbWUgPSB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkB4bWwvZm9vIik7CisgICAgdGVzdDo6VGVzdEZpbGUgZmlsZUEoInBhdGgvdG8vZmlsZUEueG1sLmZsYXQiKTsKKyAgICB0ZXN0OjpUZXN0RmlsZSBmaWxlQigicGF0aC90by9maWxlQi54bWwuZmxhdCIpOworCisgICAgQVNTRVJUX1RSVUUobWVyZ2VyLm1lcmdlRmlsZShmaWxlRGVzYywgJmZpbGVBKSk7CisgICAgQVNTRVJUX1RSVUUobWVyZ2VyLm1lcmdlRmlsZU92ZXJsYXkoZmlsZURlc2MsICZmaWxlQikpOworCisgICAgUmVzb3VyY2VOYW1lIG5hbWUgPSB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBjb20uYXBwLmE6eG1sL2ZvbyIpOworICAgIFJlc291cmNlS2V5UmVmIGtleSA9IHsgbmFtZSwgQ29uZmlnRGVzY3JpcHRpb257fSB9OworICAgIGF1dG8gaXRlciA9IG1lcmdlci5nZXRGaWxlc1RvTWVyZ2UoKS5maW5kKGtleSk7CisgICAgQVNTRVJUX05FKG1lcmdlci5nZXRGaWxlc1RvTWVyZ2UoKS5lbmQoKSwgaXRlcik7CisKKyAgICBjb25zdCBGaWxlVG9NZXJnZSYgYWN0dWFsRmlsZVRvTWVyZ2UgPSBpdGVyLT5zZWNvbmQ7CisgICAgRVhQRUNUX0VRKCZmaWxlQiwgYWN0dWFsRmlsZVRvTWVyZ2UuZmlsZSk7Cit9CisKIFRFU1RfRihUYWJsZU1lcmdlclRlc3QsIE1lcmdlRmlsZVJlZmVyZW5jZXMpIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VUYWJsZT4gdGFibGVBID0gdGVzdDo6UmVzb3VyY2VUYWJsZUJ1aWxkZXIoKQogICAgICAgICAgICAgLnNldFBhY2thZ2VJZCh1ImNvbS5hcHAuYSIsIDB4N2YpCkBAIC04NywxMCArMTQyLDEyIEBACiAgICAgICAgICAgICAuYnVpbGQoKTsKIAogICAgIFJlc291cmNlVGFibGUgZmluYWxUYWJsZTsKLSAgICBUYWJsZU1lcmdlciBtZXJnZXIobUNvbnRleHQuZ2V0KCksICZmaW5hbFRhYmxlKTsKKyAgICBUYWJsZU1lcmdlciBtZXJnZXIobUNvbnRleHQuZ2V0KCksICZmaW5hbFRhYmxlLCBUYWJsZU1lcmdlck9wdGlvbnN7fSk7CisgICAgaW86OkZpbGVDb2xsZWN0aW9uIGNvbGxlY3Rpb247CisgICAgY29sbGVjdGlvbi5pbnNlcnRGaWxlKCJyZXMveG1sL2ZpbGUueG1sIik7CiAKLSAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2Uoe30sIHRhYmxlQS5nZXQoKSwgZmFsc2UpKTsKLSAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2VBbmRNYW5nbGUoe30sIHUiY29tLmFwcC5iIiwgdGFibGVCLmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUobWVyZ2VyLm1lcmdlKHt9LCB0YWJsZUEuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2VBbmRNYW5nbGUoe30sIHUiY29tLmFwcC5iIiwgdGFibGVCLmdldCgpLCAmY29sbGVjdGlvbikpOwogCiAgICAgRmlsZVJlZmVyZW5jZSogZiA9IHRlc3Q6OmdldFZhbHVlPEZpbGVSZWZlcmVuY2U+KCZmaW5hbFRhYmxlLCB1IkBjb20uYXBwLmE6eG1sL2ZpbGUiKTsKICAgICBBU1NFUlRfTkUoZiwgbnVsbHB0cik7CkBAIC0xMDAsMTMgKzE1Nyw5MCBAQAogICAgIEFTU0VSVF9ORShmLCBudWxscHRyKTsKICAgICBFWFBFQ1RfRVEoc3RkOjp1MTZzdHJpbmcodSJyZXMveG1sL2NvbS5hcHAuYiRmaWxlLnhtbCIpLCAqZi0+cGF0aCk7CiAKLSAgICBzdGQ6OnF1ZXVlPEZpbGVUb01lcmdlPiogZmlsZXNUb01lcmdlID0gbWVyZ2VyLmdldEZpbGVNZXJnZVF1ZXVlKCk7Ci0gICAgQVNTRVJUX0ZBTFNFKGZpbGVzVG9NZXJnZS0+ZW1wdHkoKSk7CisgICAgUmVzb3VyY2VOYW1lIG5hbWUgPSB0ZXN0OjpwYXJzZU5hbWVPckRpZSh1IkBjb20uYXBwLmE6eG1sL2NvbS5hcHAuYiRmaWxlIik7CisgICAgUmVzb3VyY2VLZXlSZWYga2V5ID0geyBuYW1lLCBDb25maWdEZXNjcmlwdGlvbnt9IH07CisgICAgYXV0byBpdGVyID0gbWVyZ2VyLmdldEZpbGVzVG9NZXJnZSgpLmZpbmQoa2V5KTsKKyAgICBBU1NFUlRfTkUobWVyZ2VyLmdldEZpbGVzVG9NZXJnZSgpLmVuZCgpLCBpdGVyKTsKIAotICAgIEZpbGVUb01lcmdlJiBmaWxlVG9NZXJnZSA9IGZpbGVzVG9NZXJnZS0+ZnJvbnQoKTsKLSAgICBFWFBFQ1RfRVEoZmlsZVRvTWVyZ2Uuc3JjVGFibGUsIHRhYmxlQi5nZXQoKSk7Ci0gICAgRVhQRUNUX0VRKGZpbGVUb01lcmdlLnNyY1BhdGgsIHUicmVzL3htbC9maWxlLnhtbCIpOwotICAgIEVYUEVDVF9FUShmaWxlVG9NZXJnZS5kc3RQYXRoLCB1InJlcy94bWwvY29tLmFwcC5iJGZpbGUueG1sIik7CisgICAgY29uc3QgRmlsZVRvTWVyZ2UmIGFjdHVhbEZpbGVUb01lcmdlID0gaXRlci0+c2Vjb25kOworICAgIEVYUEVDVF9FUShTb3VyY2UoInJlcy94bWwvZmlsZS54bWwiKSwgYWN0dWFsRmlsZVRvTWVyZ2UuZmlsZS0+Z2V0U291cmNlKCkpOworICAgIEVYUEVDVF9FUShzdGQ6OnN0cmluZygicmVzL3htbC9jb20uYXBwLmIkZmlsZS54bWwiKSwgYWN0dWFsRmlsZVRvTWVyZ2UuZHN0UGF0aCk7Cit9CisKK1RFU1RfRihUYWJsZU1lcmdlclRlc3QsIE92ZXJyaWRlUmVzb3VyY2VXaXRoT3ZlcmxheSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiBiYXNlID0gdGVzdDo6UmVzb3VyY2VUYWJsZUJ1aWxkZXIoKQorICAgICAgICAgICAgLnNldFBhY2thZ2VJZCh1IiIsIDB4MDApCisgICAgICAgICAgICAuYWRkVmFsdWUodSJAYm9vbC9mb28iLCBSZXNvdXJjZVV0aWxzOjp0cnlQYXJzZUJvb2wodSJ0cnVlIikpCisgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VUYWJsZT4gb3ZlcmxheSA9IHRlc3Q6OlJlc291cmNlVGFibGVCdWlsZGVyKCkKKyAgICAgICAgICAgIC5zZXRQYWNrYWdlSWQodSIiLCAweDAwKQorICAgICAgICAgICAgLmFkZFZhbHVlKHUiQGJvb2wvZm9vIiwgUmVzb3VyY2VVdGlsczo6dHJ5UGFyc2VCb29sKHUiZmFsc2UiKSkKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgUmVzb3VyY2VUYWJsZSBmaW5hbFRhYmxlOworICAgIFRhYmxlTWVyZ2VyT3B0aW9ucyB0YWJsZU1lcmdlck9wdGlvbnM7CisgICAgdGFibGVNZXJnZXJPcHRpb25zLmF1dG9BZGRPdmVybGF5ID0gZmFsc2U7CisgICAgVGFibGVNZXJnZXIgbWVyZ2VyKG1Db250ZXh0LmdldCgpLCAmZmluYWxUYWJsZSwgdGFibGVNZXJnZXJPcHRpb25zKTsKKworICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZSh7fSwgYmFzZS5nZXQoKSkpOworICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZU92ZXJsYXkoe30sIG92ZXJsYXkuZ2V0KCkpKTsKKworICAgIEJpbmFyeVByaW1pdGl2ZSogZm9vID0gdGVzdDo6Z2V0VmFsdWU8QmluYXJ5UHJpbWl0aXZlPigmZmluYWxUYWJsZSwgdSJAY29tLmFwcC5hOmJvb2wvZm9vIik7CisgICAgQVNTRVJUX05FKG51bGxwdHIsIGZvbyk7CisgICAgRVhQRUNUX0VRKDB4MHUsIGZvby0+dmFsdWUuZGF0YSk7Cit9CisKK1RFU1RfRihUYWJsZU1lcmdlclRlc3QsIE1lcmdlQWRkUmVzb3VyY2VGcm9tT3ZlcmxheSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUEgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5zZXRTeW1ib2xTdGF0ZSh1IkBib29sL2ZvbyIsIHt9LCBTeW1ib2xTdGF0ZTo6a1VuZGVmaW5lZCkKKyAgICAgICAgICAgIC5idWlsZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUIgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5hZGRWYWx1ZSh1IkBib29sL2ZvbyIsIFJlc291cmNlVXRpbHM6OnRyeVBhcnNlQm9vbCh1InRydWUiKSkKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgUmVzb3VyY2VUYWJsZSBmaW5hbFRhYmxlOworICAgIFRhYmxlTWVyZ2VyIG1lcmdlcihtQ29udGV4dC5nZXQoKSwgJmZpbmFsVGFibGUsIFRhYmxlTWVyZ2VyT3B0aW9uc3t9KTsKKworICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZSh7fSwgdGFibGVBLmdldCgpKSk7CisgICAgQVNTRVJUX1RSVUUobWVyZ2VyLm1lcmdlT3ZlcmxheSh7fSwgdGFibGVCLmdldCgpKSk7Cit9CisKK1RFU1RfRihUYWJsZU1lcmdlclRlc3QsIE1lcmdlQWRkUmVzb3VyY2VGcm9tT3ZlcmxheVdpdGhBdXRvQWRkT3ZlcmxheSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUEgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5idWlsZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUIgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5hZGRWYWx1ZSh1IkBib29sL2ZvbyIsIFJlc291cmNlVXRpbHM6OnRyeVBhcnNlQm9vbCh1InRydWUiKSkKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgUmVzb3VyY2VUYWJsZSBmaW5hbFRhYmxlOworICAgIFRhYmxlTWVyZ2VyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYXV0b0FkZE92ZXJsYXkgPSB0cnVlOworICAgIFRhYmxlTWVyZ2VyIG1lcmdlcihtQ29udGV4dC5nZXQoKSwgJmZpbmFsVGFibGUsIG9wdGlvbnMpOworCisgICAgQVNTRVJUX1RSVUUobWVyZ2VyLm1lcmdlKHt9LCB0YWJsZUEuZ2V0KCkpKTsKKyAgICBBU1NFUlRfVFJVRShtZXJnZXIubWVyZ2VPdmVybGF5KHt9LCB0YWJsZUIuZ2V0KCkpKTsKK30KKworVEVTVF9GKFRhYmxlTWVyZ2VyVGVzdCwgRmFpbFRvTWVyZ2VOZXdSZXNvdXJjZVdpdGhvdXRBdXRvQWRkT3ZlcmxheSkgeworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUEgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5idWlsZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVRhYmxlPiB0YWJsZUIgPSB0ZXN0OjpSZXNvdXJjZVRhYmxlQnVpbGRlcigpCisgICAgICAgICAgICAuc2V0UGFja2FnZUlkKHUiIiwgMHg3ZikKKyAgICAgICAgICAgIC5hZGRWYWx1ZSh1IkBib29sL2ZvbyIsIFJlc291cmNlVXRpbHM6OnRyeVBhcnNlQm9vbCh1InRydWUiKSkKKyAgICAgICAgICAgIC5idWlsZCgpOworCisgICAgUmVzb3VyY2VUYWJsZSBmaW5hbFRhYmxlOworICAgIFRhYmxlTWVyZ2VyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuYXV0b0FkZE92ZXJsYXkgPSBmYWxzZTsKKyAgICBUYWJsZU1lcmdlciBtZXJnZXIobUNvbnRleHQuZ2V0KCksICZmaW5hbFRhYmxlLCBvcHRpb25zKTsKKworICAgIEFTU0VSVF9UUlVFKG1lcmdlci5tZXJnZSh7fSwgdGFibGVBLmdldCgpKSk7CisgICAgQVNTRVJUX0ZBTFNFKG1lcmdlci5tZXJnZU92ZXJsYXkoe30sIHRhYmxlQi5nZXQoKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhYXB0CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi90ZXN0L0J1aWxkZXJzLmggYi90b29scy9hYXB0Mi90ZXN0L0J1aWxkZXJzLmgKaW5kZXggZjhlM2QwMy4uOTNhMTFiOSAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvdGVzdC9CdWlsZGVycy5oCisrKyBiL3Rvb2xzL2FhcHQyL3Rlc3QvQnVpbGRlcnMuaApAQCAtNjgsNiArNjgsMTIgQEAKICAgICAgICAgcmV0dXJuIGFkZFZhbHVlKG5hbWUsIGlkLCB1dGlsOjptYWtlX3VuaXF1ZTxTdHJpbmc+KG1UYWJsZS0+c3RyaW5nUG9vbC5tYWtlUmVmKHN0cikpKTsKICAgICB9CiAKKyAgICBSZXNvdXJjZVRhYmxlQnVpbGRlciYgYWRkU3RyaW5nKGNvbnN0IFN0cmluZ1BpZWNlMTYmIG5hbWUsIGNvbnN0IFJlc291cmNlSWQgaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb25maWdEZXNjcmlwdGlvbiYgY29uZmlnLCBjb25zdCBTdHJpbmdQaWVjZTE2JiBzdHIpIHsKKyAgICAgICAgcmV0dXJuIGFkZFZhbHVlKG5hbWUsIGlkLCBjb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICB1dGlsOjptYWtlX3VuaXF1ZTxTdHJpbmc+KG1UYWJsZS0+c3RyaW5nUG9vbC5tYWtlUmVmKHN0cikpKTsKKyAgICB9CisKICAgICBSZXNvdXJjZVRhYmxlQnVpbGRlciYgYWRkRmlsZVJlZmVyZW5jZShjb25zdCBTdHJpbmdQaWVjZTE2JiBuYW1lLCBjb25zdCBTdHJpbmdQaWVjZTE2JiBwYXRoKSB7CiAgICAgICAgIHJldHVybiBhZGRGaWxlUmVmZXJlbmNlKG5hbWUsIHt9LCBwYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi90ZXN0L0NvbW1vbi5oIGIvdG9vbHMvYWFwdDIvdGVzdC9Db21tb24uaAppbmRleCA2ZmRhZWJiLi41MWUyZGQ0IDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi90ZXN0L0NvbW1vbi5oCisrKyBiL3Rvb2xzL2FhcHQyL3Rlc3QvQ29tbW9uLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVRhYmxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VVdGlscy5oIgogI2luY2x1ZGUgIlZhbHVlVmlzaXRvci5oIgotCisjaW5jbHVkZSAiaW8vRmlsZS5oIgogI2luY2x1ZGUgInByb2Nlc3MvSVJlc291cmNlVGFibGVDb25zdW1lci5oIgogI2luY2x1ZGUgInV0aWwvU3RyaW5nUGllY2UuaCIKIApAQCAtODcsNiArODcsMjIgQEAKICAgICByZXR1cm4gZ2V0VmFsdWVGb3JDb25maWc8VD4odGFibGUsIHJlc05hbWUsIHt9KTsKIH0KIAorY2xhc3MgVGVzdEZpbGUgOiBwdWJsaWMgaW86OklGaWxlIHsKK3ByaXZhdGU6CisgICAgU291cmNlIG1Tb3VyY2U7CisKK3B1YmxpYzoKKyAgICBUZXN0RmlsZShjb25zdCBTdHJpbmdQaWVjZSYgcGF0aCkgOiBtU291cmNlKHBhdGgpIHt9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8aW86OklEYXRhPiBvcGVuQXNEYXRhKCkgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4ge307CisgICAgfQorCisgICAgY29uc3QgU291cmNlJiBnZXRTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtU291cmNlOworICAgIH0KK307CisKIH0gLy8gbmFtZXNwYWNlIHRlc3QKIH0gLy8gbmFtZXNwYWNlIGFhcHQKIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvdW5mbGF0dGVuL0JpbmFyeVJlc291cmNlUGFyc2VyLmNwcCBiL3Rvb2xzL2FhcHQyL3VuZmxhdHRlbi9CaW5hcnlSZXNvdXJjZVBhcnNlci5jcHAKaW5kZXggNDZiNTIwNS4uNmI3YTYzY2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2FhcHQyL3VuZmxhdHRlbi9CaW5hcnlSZXNvdXJjZVBhcnNlci5jcHAKKysrIGIvdG9vbHMvYWFwdDIvdW5mbGF0dGVuL0JpbmFyeVJlc291cmNlUGFyc2VyLmNwcApAQCAtNDQ3LDYgKzQ0NywxMCBAQAogICAgICAgICBjYXNlIFB1YmxpY19lbnRyeTo6a1B1YmxpYzoKICAgICAgICAgICAgIHN5bWJvbC5zdGF0ZSA9IFN5bWJvbFN0YXRlOjprUHVibGljOwogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQdWJsaWNfZW50cnk6OmtVbmRlZmluZWQ6CisgICAgICAgICAgICBzeW1ib2wuc3RhdGUgPSBTeW1ib2xTdGF0ZTo6a1VuZGVmaW5lZDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFtVGFibGUtPnNldFN5bWJvbFN0YXRlQWxsb3dNYW5nbGVkKG5hbWUsIHJlc0lkLCBzeW1ib2wsIG1Db250ZXh0LT5nZXREaWFnbm9zdGljcygpKSkgewpAQCAtNTgxLDYgKzU4NSwxMyBAQAogICAgICAgICAgICAgICAgIHNvdXJjZS5wYXRoID0gcGF0aC50b1N0cmluZygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc291cmNlLmxpbmUgPSB1dGlsOjpkZXZpY2VUb0hvc3QzMihzb3VyY2VCbG9jay0+bGluZSk7CisKKyAgICAgICAgICAgIGlmIChTdHlsZSogc3R5bGUgPSB2YWx1ZUNhc3Q8U3R5bGU+KHJlc291cmNlVmFsdWUuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHBhcmVudCdzIHNvdXJjZSBpcyB0aGUgc2FtZSBhcyB0aGUgcmVzb3VyY2UgaXRzZWxmLCBzZXQgaXQgaGVyZS4KKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUtPnBhcmVudCkgeworICAgICAgICAgICAgICAgICAgICBzdHlsZS0+cGFyZW50LnZhbHVlKCkuc2V0U291cmNlKHNvdXJjZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nUGllY2UxNiBjb21tZW50ID0gdXRpbDo6Z2V0U3RyaW5nKG1Tb3VyY2VQb29sLApkaWZmIC0tZ2l0IGEvdG9vbHMvYWFwdDIvdXRpbC9JbW11dGFibGVNYXAuaCBiL3Rvb2xzL2FhcHQyL3V0aWwvSW1tdXRhYmxlTWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFmOWU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2FhcHQyL3V0aWwvSW1tdXRhYmxlTWFwLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQUFQVF9VVElMX0lNTVVUQUJMRU1BUF9ICisjZGVmaW5lIEFBUFRfVVRJTF9JTU1VVEFCTEVNQVBfSAorCisjaW5jbHVkZSAidXRpbC9UeXBlVHJhaXRzLmgiCisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKworbmFtZXNwYWNlIGFhcHQgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVEtleSwgdHlwZW5hbWUgVFZhbHVlPgorY2xhc3MgSW1tdXRhYmxlTWFwIHsKKyAgICBzdGF0aWNfYXNzZXJ0KGlzX2NvbXBhcmFibGU8VEtleSwgVEtleT46OnZhbHVlLCAia2V5IGlzIG5vdCBjb21wYXJhYmxlIik7CisKK3ByaXZhdGU6CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPFRLZXksIFRWYWx1ZT4+IG1EYXRhOworCisgICAgZXhwbGljaXQgSW1tdXRhYmxlTWFwKHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxUS2V5LCBUVmFsdWU+PiBkYXRhKSA6IG1EYXRhKHN0ZDo6bW92ZShkYXRhKSkgeworICAgIH0KKworcHVibGljOgorICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gdHlwZW5hbWUgZGVjbHR5cGUobURhdGEpOjpjb25zdF9pdGVyYXRvcjsKKworICAgIEltbXV0YWJsZU1hcChJbW11dGFibGVNYXAmJikgPSBkZWZhdWx0OworICAgIEltbXV0YWJsZU1hcCYgb3BlcmF0b3I9KEltbXV0YWJsZU1hcCYmKSA9IGRlZmF1bHQ7CisKKyAgICBJbW11dGFibGVNYXAoY29uc3QgSW1tdXRhYmxlTWFwJikgPSBkZWxldGU7CisgICAgSW1tdXRhYmxlTWFwJiBvcGVyYXRvcj0oY29uc3QgSW1tdXRhYmxlTWFwJikgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgSW1tdXRhYmxlTWFwPFRLZXksIFRWYWx1ZT4gY3JlYXRlUHJlU29ydGVkKAorICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxUS2V5LCBUVmFsdWU+PiBsaXN0KSB7CisgICAgICAgIHJldHVybiBJbW11dGFibGVNYXAoc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPFRLZXksIFRWYWx1ZT4+KGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSkpOworICAgIH0KKworICAgIHN0YXRpYyBJbW11dGFibGVNYXA8VEtleSwgVFZhbHVlPiBjcmVhdGVBbmRTb3J0KAorICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cGFpcjxUS2V5LCBUVmFsdWU+PiBsaXN0KSB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxUS2V5LCBUVmFsdWU+PiBkYXRhKGxpc3QuYmVnaW4oKSwgbGlzdC5lbmQoKSk7CisgICAgICAgIHN0ZDo6c29ydChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOworICAgICAgICByZXR1cm4gSW1tdXRhYmxlTWFwKHN0ZDo6bW92ZShkYXRhKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRLZXkyLAorICAgICAgICAgICAgICB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGlzX2NvbXBhcmFibGU8VEtleSwgVEtleTI+Ojp2YWx1ZT46OnR5cGU+CisgICAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBUS2V5MiYga2V5KSBjb25zdCB7CisgICAgICAgIGF1dG8gY21wID0gW10oY29uc3Qgc3RkOjpwYWlyPFRLZXksIFRWYWx1ZT4mIGNhbmRpZGF0ZSwgY29uc3QgVEtleTImIHRhcmdldCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlLmZpcnN0IDwgdGFyZ2V0OworICAgICAgICB9OworCisgICAgICAgIGNvbnN0X2l0ZXJhdG9yIGVuZEl0ZXIgPSBlbmQoKTsKKyAgICAgICAgYXV0byBpdGVyID0gc3RkOjpsb3dlcl9ib3VuZChtRGF0YS5iZWdpbigpLCBlbmRJdGVyLCBrZXksIGNtcCk7CisgICAgICAgIGlmIChpdGVyID09IGVuZEl0ZXIgfHwgaXRlci0+Zmlyc3QgPT0ga2V5KSB7CisgICAgICAgICAgICByZXR1cm4gaXRlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZW5kSXRlcjsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1EYXRhLmJlZ2luKCk7CisgICAgfQorCisgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbURhdGEuZW5kKCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgYWFwdAorCisjZW5kaWYgLyogQUFQVF9VVElMX0lNTVVUQUJMRU1BUF9IICovCmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi91dGlsL01heWJlLmggYi90b29scy9hYXB0Mi91dGlsL01heWJlLmgKaW5kZXggYWE0MDllYS4uMTBhMjgwMyAxMDA2NDQKLS0tIGEvdG9vbHMvYWFwdDIvdXRpbC9NYXliZS5oCisrKyBiL3Rvb2xzL2FhcHQyL3V0aWwvTWF5YmUuaApAQCAtMjg1LDYgKzI4NSw4IEBACiAtPiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8VD4gPT0gc3RkOjpkZWNsdmFsPFU+KSB7CiAgICAgaWYgKGEgJiYgYikgewogICAgICAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKCFhICYmICFiKSB7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi91dGlsL01heWJlX3Rlc3QuY3BwIGIvdG9vbHMvYWFwdDIvdXRpbC9NYXliZV90ZXN0LmNwcAppbmRleCA5Y2NhNDBlLi41ZDQyZGMzIDEwMDY0NAotLS0gYS90b29scy9hYXB0Mi91dGlsL01heWJlX3Rlc3QuY3BwCisrKyBiL3Rvb2xzL2FhcHQyL3V0aWwvTWF5YmVfdGVzdC5jcHAKQEAgLTEyNCw5ICsxMjQsMTIgQEAKICAgICBNYXliZTxpbnQ+IGIgPSAxOwogICAgIE1heWJlPGludD4gYzsKIAorICAgIE1heWJlPGludD4gZW1wdHlBLCBlbXB0eUI7CisKICAgICBFWFBFQ1RfRVEoYSwgYik7CiAgICAgRVhQRUNUX0VRKGIsIGEpOwogICAgIEVYUEVDVF9ORShhLCBjKTsKKyAgICBFWFBFQ1RfRVEoZW1wdHlBLCBlbXB0eUIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBhYXB0CmRpZmYgLS1naXQgYS90b29scy9hYXB0Mi91dGlsL1R5cGVUcmFpdHMuaCBiL3Rvb2xzL2FhcHQyL3V0aWwvVHlwZVRyYWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YzEzZDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hYXB0Mi91dGlsL1R5cGVUcmFpdHMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBBQVBUX1VUSUxfVFlQRVRSQUlUU19ICisjZGVmaW5lIEFBUFRfVVRJTF9UWVBFVFJBSVRTX0gKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgYWFwdCB7CisKKyNkZWZpbmUgREVGSU5FX0hBU19CSU5BUllfT1BfVFJBSVQobmFtZSwgb3ApIFwKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gXAorICAgIHN0cnVjdCBuYW1lIHsgXAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4gXAorICAgICAgICBzdGF0aWMgY29uc3RleHByIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxWPigpIG9wIHN0ZDo6ZGVjbHZhbDxXPigpLCBib29sKCkpIHRlc3QoaW50KSB7IFwKKyAgICAgICAgcmV0dXJuIHRydWU7IFwKKyAgICB9IFwKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgdHlwZW5hbWUgVz4gXAorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0ZXN0KC4uLikgeyBcCisgICAgICAgIHJldHVybiBmYWxzZTsgXAorICAgIH0gXAorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHRlc3Q8VCwgVT4oaW50KCkpOyBcCit9CisKK0RFRklORV9IQVNfQklOQVJZX09QX1RSQUlUKGhhc19lcV9vcCwgPT0pOworREVGSU5FX0hBU19CSU5BUllfT1BfVFJBSVQoaGFzX2x0X29wLCA8KTsKKworLyoqCisgKiBUeXBlIHRyYWl0IHRoYXQgY2hlY2tzIGlmIHR3byB0eXBlcyBjYW4gYmUgZXF1YXRlZCAoPT0pIGFuZCBjb21wYXJlZCAoPCkuCisgKi8KK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorc3RydWN0IGlzX2NvbXBhcmFibGUgeworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IGhhc19lcV9vcDxULCBVPjo6dmFsdWUgJiYgaGFzX2x0X29wPFQsIFU+Ojp2YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIGFhcHQKKworI2VuZGlmIC8qIEFBUFRfVVRJTF9UWVBFVFJBSVRTX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi8uaWRlYS9jb21waWxlci54bWwgYi90b29scy9sYXlvdXRsaWIvLmlkZWEvY29tcGlsZXIueG1sCmluZGV4IDVhYWFmMTguLjM1OTYxYTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi8uaWRlYS9jb21waWxlci54bWwKKysrIGIvdG9vbHMvbGF5b3V0bGliLy5pZGVhL2NvbXBpbGVyLnhtbApAQCAtMjEsNyArMjEsNSBAQAogICAgICAgICA8cHJvY2Vzc29yUGF0aCB1c2VDbGFzc3BhdGg9InRydWUiIC8+CiAgICAgICA8L3Byb2ZpbGU+CiAgICAgPC9hbm5vdGF0aW9uUHJvY2Vzc2luZz4KLSAgICA8Ynl0ZWNvZGVUYXJnZXRMZXZlbCB0YXJnZXQ9IjEuNiIgLz4KICAgPC9jb21wb25lbnQ+Ci08L3Byb2plY3Q+Ci0KKzwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvY29udGVudC9yZXMvQnJpZGdlVHlwZWRBcnJheS5qYXZhCmluZGV4IDMxZGQzZDkuLmRiNGM2ZGM2IDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL2NvbnRlbnQvcmVzL0JyaWRnZVR5cGVkQXJyYXkuamF2YQpAQCAtMzI3LDEyICszMjcsMTkgQEAKICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gbGV0IHRoZSBmcmFtZXdvcmsgaW5mbGF0ZSB0aGUgQ29sb3JTdGF0ZUxpc3QgZnJvbSB0aGUgWE1MIGZpbGUuCi0gICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKHZhbHVlKTsKLSAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgWG1sUHVsbFBhcnNlciBwYXJzZXIgPSBQYXJzZXJGYWN0b3J5LmNyZWF0ZShmKTsKIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0ZSBsaXN0IGZpbGUgY29udGVudCBmcm9tIGNhbGxiYWNrIHRvIHBhcnNlIFBTSSBmaWxlCisgICAgICAgICAgICBYbWxQdWxsUGFyc2VyIHBhcnNlciA9IG1Db250ZXh0LmdldExheW91dGxpYkNhbGxiYWNrKCkuZ2V0WG1sRmlsZVBhcnNlcih2YWx1ZSk7CisgICAgICAgICAgICBpZiAocGFyc2VyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB1c2VkIHdpdGggYSB2ZXJzaW9uIG9mIEFuZHJvaWQgU3R1ZGlvIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGdldFhtbEZpbGVQYXJzZXIKKyAgICAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gcmVhZGluZyB0aGUgZmlsZSBmcm9tIGRpc2sKKyAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSh2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGYuaXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyID0gUGFyc2VyRmFjdG9yeS5jcmVhdGUoZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBhcnNlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgQnJpZGdlWG1sQmxvY2tQYXJzZXIgYmxvY2tQYXJzZXIgPSBuZXcgQnJpZGdlWG1sQmxvY2tQYXJzZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIsIG1Db250ZXh0LCByZXNWYWx1ZS5pc0ZyYW1ld29yaygpKTsKICAgICAgICAgICAgICAgICB0cnkgewpAQCAtMzQxLDE4ICszNDgsMTggQEAKICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICBibG9ja1BhcnNlci5lbnN1cmVQb3BwZWQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19CUk9LRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBwYXJzZXIgZm9yICIgKyB2YWx1ZSwgZSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gZXJyb3IgYW5kIG5vdCB3YXJuaW5nIHNpbmNlIHRoZSBmaWxlIGV4aXN0ZW5jZSBpcyBjaGVja2VkIGJlZm9yZQotICAgICAgICAgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcGFyc2UgaXQuCi0gICAgICAgICAgICAgICAgQnJpZGdlLmdldExvZygpLmVycm9yKExheW91dExvZy5UQUdfUkVTT1VSQ0VTX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHBhcnNlIGZpbGUgIiArIHZhbHVlLCBlLCBudWxsKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChYbWxQdWxsUGFyc2VyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIEJyaWRnZS5nZXRMb2coKS5lcnJvcihMYXlvdXRMb2cuVEFHX0JST0tFTiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjb25maWd1cmUgcGFyc2VyIGZvciAiICsgdmFsdWUsIGUsIG51bGwpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGVycm9yIGFuZCBub3Qgd2FybmluZyBzaW5jZSB0aGUgZmlsZSBleGlzdGVuY2UgaXMgY2hlY2tlZCBiZWZvcmUKKyAgICAgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcGFyc2UgaXQuCisgICAgICAgICAgICBCcmlkZ2UuZ2V0TG9nKCkuZXJyb3IoTGF5b3V0TG9nLlRBR19SRVNPVVJDRVNfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBwYXJzZSBmaWxlICIgKyB2YWx1ZSwgZSwgbnVsbCk7CisKKyAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvZ3JhcGhpY3MvQml0bWFwRmFjdG9yeV9EZWxlZ2F0ZS5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEKaW5kZXggNjA1MTRiNi4uOGQ1ODYzYiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9ncmFwaGljcy9CaXRtYXBGYWN0b3J5X0RlbGVnYXRlLmphdmEKQEAgLTEyMiw0ICsxMjIsMzUgQEAKICAgICAvKnBhY2thZ2UqLyBzdGF0aWMgYm9vbGVhbiBuYXRpdmVJc1NlZWthYmxlKEZpbGVEZXNjcmlwdG9yIGZkKSB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgbmV3bHkgZGVjb2RlZCBiaXRtYXAncyBkZW5zaXR5IGJhc2VkIG9uIHRoZSBPcHRpb25zLgorICAgICAqCisgICAgICogQ29waWVkIGZyb20ge0BsaW5rIEJpdG1hcEZhY3Rvcnkjc2V0RGVuc2l0eUZyb21PcHRpb25zKEJpdG1hcCwgT3B0aW9ucyl9LgorICAgICAqLworICAgIEBMYXlvdXRsaWJEZWxlZ2F0ZQorICAgIC8qcGFja2FnZSovIHN0YXRpYyB2b2lkIHNldERlbnNpdHlGcm9tT3B0aW9ucyhCaXRtYXAgb3V0cHV0Qml0bWFwLCBPcHRpb25zIG9wdHMpIHsKKyAgICAgICAgaWYgKG91dHB1dEJpdG1hcCA9PSBudWxsIHx8IG9wdHMgPT0gbnVsbCkgcmV0dXJuOworCisgICAgICAgIGZpbmFsIGludCBkZW5zaXR5ID0gb3B0cy5pbkRlbnNpdHk7CisgICAgICAgIGlmIChkZW5zaXR5ICE9IDApIHsKKyAgICAgICAgICAgIG91dHB1dEJpdG1hcC5zZXREZW5zaXR5KGRlbnNpdHkpOworICAgICAgICAgICAgZmluYWwgaW50IHRhcmdldERlbnNpdHkgPSBvcHRzLmluVGFyZ2V0RGVuc2l0eTsKKyAgICAgICAgICAgIGlmICh0YXJnZXREZW5zaXR5ID09IDAgfHwgZGVuc2l0eSA9PSB0YXJnZXREZW5zaXR5IHx8IGRlbnNpdHkgPT0gb3B0cy5pblNjcmVlbkRlbnNpdHkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIC0tLSBDaGFuZ2UgZnJvbSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBiZWdpbnMgLS0tCisgICAgICAgICAgICAvLyBMYXlvdXRMaWIgZG9lc24ndCBzY2FsZSB0aGUgbmluZSBwYXRjaCB3aGVuIGRlY29kaW5nIGl0LiBIZW5jZSwgZG9uJ3QgY2hhbmdlIHRoZQorICAgICAgICAgICAgLy8gZGVuc2l0eSBvZiB0aGUgc291cmNlIGJpdG1hcCBpbiBjYXNlIG9mIG5pbmVwYXRjaC4KKworICAgICAgICAgICAgaWYgKG9wdHMuaW5TY2FsZWQpIHsKKyAgICAgICAgICAgIC8vIC0tLSBDaGFuZ2UgZnJvbSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBlbmRzLiAtLS0KKyAgICAgICAgICAgICAgICBvdXRwdXRCaXRtYXAuc2V0RGVuc2l0eSh0YXJnZXREZW5zaXR5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChvcHRzLmluQml0bWFwICE9IG51bGwpIHsKKyAgICAgICAgICAgIC8vIGJpdG1hcCB3YXMgcmV1c2VkLCBlbnN1cmUgZGVuc2l0eSBpcyByZXNldAorICAgICAgICAgICAgb3V0cHV0Qml0bWFwLnNldERlbnNpdHkoQml0bWFwLmdldERlZmF1bHREZW5zaXR5KCkpOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9TZXJ2aWNlTWFuYWdlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC9vcy9TZXJ2aWNlTWFuYWdlci5qYXZhCmluZGV4IDZhNjhlZTIuLjU0OTA3NGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvb3MvU2VydmljZU1hbmFnZXIuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL29zL1NlcnZpY2VNYW5hZ2VyLmphdmEKQEAgLTUxLDggKzUxLDEwIEBACiAKICAgICAvKioKICAgICAgKiBSZXR1cm4gYSBsaXN0IG9mIGFsbCBjdXJyZW50bHkgcnVubmluZyBzZXJ2aWNlcy4KKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIGFsbCBjdXJyZW50bHkgcnVubmluZyBzZXJ2aWNlcywgb3IgPGNvZGU+bnVsbDwvY29kZT4gaW4KKyAgICAgKiBjYXNlIG9mIGFuIGV4Y2VwdGlvbgogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gbGlzdFNlcnZpY2VzKCkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBsaXN0U2VydmljZXMoKSB7CiAgICAgICAgIC8vIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIG51bGwgc29tZXRpbWVzLCBzbyBpdCdzIG9rCiAgICAgICAgIC8vIHRvIHJldHVybiBudWxsIGluc3RlYWQgb2YgYW4gZW1wdHkgbGlzdC4KICAgICAgICAgcmV0dXJuIG51bGw7CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9hbmRyb2lkL3ZpZXcvSVdpbmRvd01hbmFnZXJJbXBsLmphdmEKaW5kZXggNDA0MzdmYS4uMDFlZTE4YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvYW5kcm9pZC92aWV3L0lXaW5kb3dNYW5hZ2VySW1wbC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2FuZHJvaWQvdmlldy9JV2luZG93TWFuYWdlckltcGwuamF2YQpAQCAtNzYsNyArNzYsNyBAQAogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyB2b2lkIGFkZEFwcFRva2VuKGludCBhcmcwLCBJQXBwbGljYXRpb25Ub2tlbiBhcmcxLCBpbnQgYXJnMiwgaW50IGFyZzMsIGludCBhcmc0LAogICAgICAgICAgICAgYm9vbGVhbiBhcmc1LCBib29sZWFuIGFyZzYsIGludCBhcmc3LCBpbnQgYXJnOCwgYm9vbGVhbiBhcmc5LCBib29sZWFuIGFyZzEwLAotICAgICAgICAgICAgUmVjdCBhcmcxMSwgQ29uZmlndXJhdGlvbiBhcmcxMiwgYm9vbGVhbiBhcmcxMykgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CisgICAgICAgICAgICBSZWN0IGFyZzExLCBDb25maWd1cmF0aW9uIGFyZzEyLCBib29sZWFuIGFyZzEzLCBib29sZWFuIGFyZzE0KSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgogICAgIH0KIApAQCAtNTQzLDYgKzU0MywxMSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyRG9ja0RpdmlkZXJWaXNpYmlsaXR5TGlzdGVuZXIoSURvY2tEaXZpZGVyVmlzaWJpbGl0eUxpc3RlbmVyIGxpc3RlbmVyKSB7CisgICAgcHVibGljIHZvaWQgcmVnaXN0ZXJEb2NrZWRTdGFja0xpc3RlbmVyKElEb2NrZWRTdGFja0xpc3RlbmVyIGxpc3RlbmVyKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNpemVEaW1MYXllcihib29sZWFuIHZpc2libGUsIGludCB0YXJnZXRTdGFja0lkLCBmbG9hdCBhbHBoYSkKKyAgICAgICAgICAgIHRocm93cyBSZW1vdGVFeGNlcHRpb24gewogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL0JyaWRnZS5qYXZhCmluZGV4IDY4M2M0YWEuLmM4ZTNkMDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvQnJpZGdlLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9CcmlkZ2UuamF2YQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgTGF5b3V0TG9nIHNDdXJyZW50TG9nID0gc0RlZmF1bHRMb2c7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTEFTVF9TVVBQT1JURURfRkVBVFVSRSA9IEZlYXR1cmVzLkNIT1JFT0dSQVBIRVI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExBU1RfU1VQUE9SVEVEX0ZFQVRVUkUgPSBGZWF0dXJlcy5USEVNRV9QUkVWSUVXX05BVklHQVRJT05fQkFSOwogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGludCBnZXRBcGlMZXZlbCgpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZXh0LmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2FuZHJvaWQvQnJpZGdlQ29udGV4dC5qYXZhCmluZGV4IGJkNTMzNWUuLjYzNDExYjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VDb250ZXh0LmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZUNvbnRleHQuamF2YQpAQCAtMTYzNCw2ICsxNjM0LDExIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2VuZFN0aWNreUJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LCBVc2VySGFuZGxlIHVzZXIsIEJ1bmRsZSBvcHRpb25zKSB7CisgICAgICAgIC8vIHBhc3MKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZW5kU3RpY2t5T3JkZXJlZEJyb2FkY2FzdEFzVXNlcihJbnRlbnQgaW50ZW50LAogICAgICAgICAgICAgVXNlckhhbmRsZSB1c2VyLCBCcm9hZGNhc3RSZWNlaXZlciByZXN1bHRSZWNlaXZlciwKICAgICAgICAgICAgIEhhbmRsZXIgc2NoZWR1bGVyLCBpbnQgaW5pdGlhbENvZGUsIFN0cmluZyBpbml0aWFsRGF0YSwKQEAgLTE4MDQsMjQgKzE4MDksMjQgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBjcmVhdGVEZXZpY2VFbmNyeXB0ZWRDb250ZXh0KENvbnRleHQgY29udGV4dCkgeworICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZURldmljZUVuY3J5cHRlZFN0b3JhZ2VDb250ZXh0KCkgewogICAgICAgICAvLyBwYXNzCiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRDb250ZXh0KENvbnRleHQgY29udGV4dCkgeworICAgIHB1YmxpYyBDb250ZXh0IGNyZWF0ZUNyZWRlbnRpYWxFbmNyeXB0ZWRTdG9yYWdlQ29udGV4dCgpIHsKICAgICAgICAgLy8gcGFzcwogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZCgpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0RldmljZUVuY3J5cHRlZFN0b3JhZ2UoKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWRlbnRpYWxFbmNyeXB0ZWQoKSB7CisgICAgcHVibGljIGJvb2xlYW4gaXNDcmVkZW50aWFsRW5jcnlwdGVkU3RvcmFnZSgpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYW5kcm9pZC9CcmlkZ2VQYWNrYWdlTWFuYWdlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKaW5kZXggYmFiMjVjMC4uMDgyNThjOSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0JyaWRnZVBhY2thZ2VNYW5hZ2VyLmphdmEKQEAgLTM0LDcgKzM0LDYgQEAKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSW5zdHJ1bWVudGF0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uSW50ZW50RmlsdGVyVmVyaWZpY2F0aW9uSW5mbzsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uS2V5U2V0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5NYW5pZmVzdERpZ2VzdDsKIGltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZUluZm87CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJbnN0YWxsZXI7CiBpbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VJdGVtSW5mbzsKQEAgLTk4LDcgKzk3LDIyIEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRQYWNrYWdlVWlkKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUpIHRocm93cyBOYW1lTm90Rm91bmRFeGNlcHRpb24geworICAgIHB1YmxpYyBpbnRbXSBnZXRQYWNrYWdlR2lkcyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgaW50WzBdOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZChTdHJpbmcgcGFja2FnZU5hbWUsIGludCBmbGFncykgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0UGFja2FnZVVpZEFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySGFuZGxlKSB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRQYWNrYWdlVWlkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlckhhbmRsZSkgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTMxLDYgKzE0NSwxMiBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBBcHBsaWNhdGlvbkluZm8gZ2V0QXBwbGljYXRpb25JbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IGZsYWdzLCBpbnQgdXNlcklkKQorICAgICAgICAgICAgdGhyb3dzIE5hbWVOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBBY3Rpdml0eUluZm8gZ2V0QWN0aXZpdHlJbmZvKENvbXBvbmVudE5hbWUgY29tcG9uZW50LCBpbnQgZmxhZ3MpCiAgICAgICAgICAgICB0aHJvd3MgTmFtZU5vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC0xNjUsNyArMTg1LDcgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTGlzdDxQYWNrYWdlSW5mbz4gZ2V0SW5zdGFsbGVkUGFja2FnZXMoaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIExpc3Q8UGFja2FnZUluZm8+IGdldEluc3RhbGxlZFBhY2thZ2VzQXNVc2VyKGludCBmbGFncywgaW50IHVzZXJJZCkgewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9CiAKQEAgLTMyOSw3ICszNDksNyBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFJlc29sdmVJbmZvPiBxdWVyeUJyb2FkY2FzdFJlY2VpdmVycyhJbnRlbnQgaW50ZW50LCBpbnQgZmxhZ3MsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgTGlzdDxSZXNvbHZlSW5mbz4gcXVlcnlCcm9hZGNhc3RSZWNlaXZlcnNBc1VzZXIoSW50ZW50IGludGVudCwgaW50IGZsYWdzLCBpbnQgdXNlcklkKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIApAQCAtNTIyLDcgKzU0Miw3IEBACiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgaW5zdGFsbFBhY2thZ2VXaXRoVmVyaWZpY2F0aW9uKFVyaSBwYWNrYWdlVVJJLCBJUGFja2FnZUluc3RhbGxPYnNlcnZlciBvYnNlcnZlciwKICAgICAgICAgICAgIGludCBmbGFncywgU3RyaW5nIGluc3RhbGxlclBhY2thZ2VOYW1lLCBVcmkgdmVyaWZpY2F0aW9uVVJJLAotICAgICAgICAgICAgTWFuaWZlc3REaWdlc3QgbWFuaWZlc3REaWdlc3QsIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgeworICAgICAgICAgICAgQ29udGFpbmVyRW5jcnlwdGlvblBhcmFtcyBlbmNyeXB0aW9uUGFyYW1zKSB7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCkBAIC01NDQsNyArNTY0LDcgQEAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBpbnN0YWxsUGFja2FnZVdpdGhWZXJpZmljYXRpb24oVXJpIHBhY2thZ2VVUkksIFBhY2thZ2VJbnN0YWxsT2JzZXJ2ZXIgb2JzZXJ2ZXIsCiAgICAgICAgICAgICBpbnQgZmxhZ3MsIFN0cmluZyBpbnN0YWxsZXJQYWNrYWdlTmFtZSwgVXJpIHZlcmlmaWNhdGlvblVSSSwKLSAgICAgICAgICAgIE1hbmlmZXN0RGlnZXN0IG1hbmlmZXN0RGlnZXN0LCBDb250YWluZXJFbmNyeXB0aW9uUGFyYW1zIGVuY3J5cHRpb25QYXJhbXMpIHsKKyAgICAgICAgICAgIENvbnRhaW5lckVuY3J5cHRpb25QYXJhbXMgZW5jcnlwdGlvblBhcmFtcykgewogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNTc5LDEyICs1OTksMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldEludGVudFZlcmlmaWNhdGlvblN0YXR1cyhTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKKyAgICBwdWJsaWMgaW50IGdldEludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gdXBkYXRlSW50ZW50VmVyaWZpY2F0aW9uU3RhdHVzKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHN0YXR1cywgaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBib29sZWFuIHVwZGF0ZUludGVudFZlcmlmaWNhdGlvblN0YXR1c0FzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCBzdGF0dXMsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNTk5LDEyICs2MTksMTIgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoaW50IHVzZXJJZCkgeworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihpbnQgdXNlcklkKSB7CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIHNldERlZmF1bHRCcm93c2VyUGFja2FnZU5hbWUoU3RyaW5nIHBhY2thZ2VOYW1lLCBpbnQgdXNlcklkKSB7CisgICAgcHVibGljIGJvb2xlYW4gc2V0RGVmYXVsdEJyb3dzZXJQYWNrYWdlTmFtZUFzVXNlcihTdHJpbmcgcGFja2FnZU5hbWUsIGludCB1c2VySWQpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjQ0LDcgKzY2NCw3IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUsCisgICAgcHVibGljIHZvaWQgZ2V0UGFja2FnZVNpemVJbmZvQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgaW50IHVzZXJIYW5kbGUsCiAgICAgICAgICAgICBJUGFja2FnZVN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKICAgICB9CiAKQEAgLTc0OSw2ICs3NjksMTEgQEAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzZXRQYWNrYWdlU3VzcGVuZGVkQXNVc2VyKFN0cmluZyBwYWNrYWdlTmFtZSwgYm9vbGVhbiBzdXNwZW5kZWQsIGludCB1c2VySWQpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBpbnQgZ2V0TW92ZVN0YXR1cyhpbnQgbW92ZUlkKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvTmF2aWdhdGlvbkJhci5qYXZhCmluZGV4IDljODliZmUyLi5kZmJjNjliIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvTmF2aWdhdGlvbkJhci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2Uvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvYmFycy9OYXZpZ2F0aW9uQmFyLmphdmEKQEAgLTE5LDkgKzE5LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKIGltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKIAotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKIGltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7CiBpbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7CiBpbXBvcnQgYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0OwpAQCAtNDEsMjkgKzM4LDE4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRFRIX0RFRkFVTFQgPSAzNjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfU1czNjAgPSA0MDsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfU1c2MDAgPSA0ODsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFZT1VUX1hNTCA9ICIvYmFycy9uYXZpZ2F0aW9uX2Jhci54bWwiOworICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIExBWU9VVF9YTUwgPSAiL2JhcnMvbmF2aWdhdGlvbl9iYXIueG1sIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFZT1VUXzYwMERQX1hNTCA9ICIvYmFycy9uYXZpZ2F0aW9uX2JhcjYwMGRwLnhtbCI7CiAKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yIHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyB0aGUge0BsaW5rIE5hdmlnYXRpb25CYXJ9IGFzIGEgcmVndWxhciBjb250cm9sLgotICAgICAqIFRoaXMgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIHRoZW1lIGVkaXRvci4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKLSAgICBwdWJsaWMgTmF2aWdhdGlvbkJhcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgICAgICB0aGlzKChCcmlkZ2VDb250ZXh0KSBjb250ZXh0LAotICAgICAgICAgICAgICAgIERlbnNpdHkuZ2V0RW51bSgoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQpLmdldE1ldHJpY3MoKS5kZW5zaXR5RHBpKSwKLSAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgLy8gSW4gdGhpcyBtb2RlLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuZGVyIHZlcnRpY2FsbHkKLSAgICAgICAgICAgICAgICAoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYXlvdXREaXJlY3Rpb24oKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgVmlldy5MQVlPVVRfRElSRUNUSU9OX1JUTCwKLSAgICAgICAgICAgICAgICAoY29udGV4dC5nZXRBcHBsaWNhdGlvbkluZm8oKS5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NVUFBPUlRTX1JUTCkgIT0gMCwKLSAgICAgICAgICAgICAgICAwKTsKKyAgICBwdWJsaWMgTmF2aWdhdGlvbkJhcihCcmlkZ2VDb250ZXh0IGNvbnRleHQsIERlbnNpdHkgZGVuc2l0eSwgaW50IG9yaWVudGF0aW9uLCBib29sZWFuIGlzUnRsLAorICAgICAgYm9vbGVhbiBydGxFbmFibGVkLCBpbnQgc2ltdWxhdGVkUGxhdGZvcm1WZXJzaW9uKSB7CisgICAgICAgIHRoaXMoY29udGV4dCwgZGVuc2l0eSwgb3JpZW50YXRpb24sIGlzUnRsLCBydGxFbmFibGVkLCBzaW11bGF0ZWRQbGF0Zm9ybVZlcnNpb24sCisgICAgICAgICAgZ2V0U2hvcnRlc3RXaWR0aChjb250ZXh0KT49IDYwMCA/IExBWU9VVF82MDBEUF9YTUwgOiBMQVlPVVRfWE1MKTsKICAgICB9CiAKLSAgICBwdWJsaWMgTmF2aWdhdGlvbkJhcihCcmlkZ2VDb250ZXh0IGNvbnRleHQsIERlbnNpdHkgZGVuc2l0eSwgaW50IG9yaWVudGF0aW9uLCBib29sZWFuIGlzUnRsLAotICAgICAgICAgICAgYm9vbGVhbiBydGxFbmFibGVkLCBpbnQgc2ltdWxhdGVkUGxhdGZvcm1WZXJzaW9uKSB7Ci0gICAgICAgIHN1cGVyKGNvbnRleHQsIG9yaWVudGF0aW9uLCBnZXRTaG9ydGVzdFdpZHRoKGNvbnRleHQpPj0gNjAwID8gTEFZT1VUXzYwMERQX1hNTCA6IExBWU9VVF9YTUwsCi0gICAgICAgICAgICAgICAgIm5hdmlnYXRpb25fYmFyLnhtbCIsIHNpbXVsYXRlZFBsYXRmb3JtVmVyc2lvbik7CisgICAgcHJvdGVjdGVkIE5hdmlnYXRpb25CYXIoQnJpZGdlQ29udGV4dCBjb250ZXh0LCBEZW5zaXR5IGRlbnNpdHksIGludCBvcmllbnRhdGlvbiwgYm9vbGVhbiBpc1J0bCwKKyAgICAgIGJvb2xlYW4gcnRsRW5hYmxlZCwgaW50IHNpbXVsYXRlZFBsYXRmb3JtVmVyc2lvbiwgU3RyaW5nIGxheW91dFBhdGgpIHsKKyAgICAgICAgc3VwZXIoY29udGV4dCwgb3JpZW50YXRpb24sIGxheW91dFBhdGgsICJuYXZpZ2F0aW9uX2Jhci54bWwiLCBzaW11bGF0ZWRQbGF0Zm9ybVZlcnNpb24pOwogCiAgICAgICAgIGludCBjb2xvciA9IGdldEJhckNvbG9yKEFUVFJfQ09MT1IsIEFUVFJfVFJBTlNMVUNFTlQpOwogICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3IgPT0gMCA/IDB4RkYwMDAwMDAgOiBjb2xvcik7CkBAIC0xMTcsNyArMTAzLDcgQEAKICAgICAgICAgdmlldy5zZXRMYXlvdXRQYXJhbXMobGF5b3V0UGFyYW1zKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0U2lkZVBhZGRpbmcoZmxvYXQgc3cpIHsKKyAgICBwcm90ZWN0ZWQgaW50IGdldFNpZGVQYWRkaW5nKGZsb2F0IHN3KSB7CiAgICAgICAgIGlmIChzdyA+PSA0MDApIHsKICAgICAgICAgICAgIHJldHVybiBQQURESU5HX1dJRFRIX1NXNDAwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2JhcnMvVGhlbWVQcmV2aWV3TmF2aWdhdGlvbkJhci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL1RoZW1lUHJldmlld05hdmlnYXRpb25CYXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM1MjgwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9iYXJzL1RoZW1lUHJldmlld05hdmlnYXRpb25CYXIuamF2YQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmJhcnM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5sYXlvdXRsaWIuYnJpZGdlLmFuZHJvaWQuQnJpZGdlQ29udGV4dDsKK2ltcG9ydCBjb20uYW5kcm9pZC5yZXNvdXJjZXMuRGVuc2l0eTsKKworaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OworaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5BcHBsaWNhdGlvbkluZm87CitpbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKK2ltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKK2ltcG9ydCBhbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQ7CisKKy8qKgorICogTmF2aWdhdGlvbiBCYXIgZm9yIHRoZSBUaGVtZSBFZGl0b3IgcHJldmlldy4KKyAqCisgKiBGb3Igc21hbGwgYmFycywgaXQgaXMgaWRlbnRpY2FsIHRvIHtAbGluayBOYXZpZ2F0aW9uQmFyfS4KKyAqIEJ1dCB3aWRlIGJhcnMgZnJvbSB7QGxpbmsgTmF2aWdhdGlvbkJhcn0gYXJlIHRvbyB3aWRlIGZvciB0aGUgVGhlbWUgRWRpdG9yIHByZXZpZXcuCisgKiBUbyBzb2x2ZSB0aGF0IHByb2JsZW0sIHtAbGluayBUaGVtZVByZXZpZXdOYXZpZ2F0aW9uQmFyfSB1c2UgdGhlIGxheW91dCBmb3Igc21hbGwgYmFycywKKyAqIGFuZCBoYXZlIG5vIHBhZGRpbmcgb24gdGhlIHNpZGVzLiBUaGF0IHdheSwgdGhleSBoYXZlIGEgc2ltaWxhciBsb29rIGFzIHRoZSB0cnVlIG9uZXMsCisgKiBhbmQgdGhleSBmaXQgaW4gdGhlIFRoZW1lIEVkaXRvciBwcmV2aWV3LgorICovCitwdWJsaWMgY2xhc3MgVGhlbWVQcmV2aWV3TmF2aWdhdGlvbkJhciBleHRlbmRzIE5hdmlnYXRpb25CYXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBQQURESU5HX1dJRFRIX1NXNjAwID0gMDsKKworICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKQorICAgIHB1YmxpYyBUaGVtZVByZXZpZXdOYXZpZ2F0aW9uQmFyKENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7CisgICAgICAgIHN1cGVyKChCcmlkZ2VDb250ZXh0KSBjb250ZXh0LAorICAgICAgICAgICAgICAgIERlbnNpdHkuZ2V0RW51bSgoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQpLmdldE1ldHJpY3MoKS5kZW5zaXR5RHBpKSwKKyAgICAgICAgICAgICAgICBMaW5lYXJMYXlvdXQuSE9SSVpPTlRBTCwgLy8gSW4gdGhpcyBtb2RlLCBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgcmVuZGVyIHZlcnRpY2FsbHkKKyAgICAgICAgICAgICAgICAoKEJyaWRnZUNvbnRleHQpIGNvbnRleHQpLmdldENvbmZpZ3VyYXRpb24oKS5nZXRMYXlvdXREaXJlY3Rpb24oKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgVmlldy5MQVlPVVRfRElSRUNUSU9OX1JUTCwKKyAgICAgICAgICAgICAgICAoY29udGV4dC5nZXRBcHBsaWNhdGlvbkluZm8oKS5mbGFncyAmIEFwcGxpY2F0aW9uSW5mby5GTEFHX1NVUFBPUlRTX1JUTCkgIT0gMCwKKyAgICAgICAgICAgICAgICAwLCBMQVlPVVRfWE1MKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgaW50IGdldFNpZGVQYWRkaW5nKGZsb2F0IHN3KSB7CisgICAgICAgIGlmIChzdyA+PSA2MDApIHsKKyAgICAgICAgICAgIHJldHVybiBQQURESU5HX1dJRFRIX1NXNjAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzdXBlci5nZXRTaWRlUGFkZGluZyhzdyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlckRyYXdhYmxlLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ltcGwvUmVuZGVyRHJhd2FibGUuamF2YQppbmRleCAyNmY5MDAwLi5kNzk3ZWVjYSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlckRyYXdhYmxlLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbXBsL1JlbmRlckRyYXdhYmxlLmphdmEKQEAgLTQyLDEwICs0Miw2IEBACiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KIC8qKgogICogQWN0aW9uIHRvIHJlbmRlciBhIGdpdmVuIERyYXdhYmxlIHByb3ZpZGVkIHRocm91Z2gge0BsaW5rIERyYXdhYmxlUGFyYW1zI2dldERyYXdhYmxlKCl9LgogICoKQEAgLTcyLDggKzY4LDEyIEBACiAgICAgICAgIEJyaWRnZUNvbnRleHQgY29udGV4dCA9IGdldENvbnRleHQoKTsKICAgICAgICAgZHJhd2FibGVSZXNvdXJjZSA9IGNvbnRleHQuZ2V0UmVuZGVyUmVzb3VyY2VzKCkucmVzb2x2ZVJlc1ZhbHVlKGRyYXdhYmxlUmVzb3VyY2UpOwogCi0gICAgICAgIGlmIChkcmF3YWJsZVJlc291cmNlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICBkcmF3YWJsZVJlc291cmNlLmdldFJlc291cmNlVHlwZSgpICE9IFJlc291cmNlVHlwZS5EUkFXQUJMRSkgeworICAgICAgICBpZiAoZHJhd2FibGVSZXNvdXJjZSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PVF9BX0RSQVdBQkxFLmNyZWF0ZVJlc3VsdCgpOworICAgICAgICB9CisKKyAgICAgICAgUmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSA9IGRyYXdhYmxlUmVzb3VyY2UuZ2V0UmVzb3VyY2VUeXBlKCk7CisgICAgICAgIGlmIChyZXNvdXJjZVR5cGUgIT0gUmVzb3VyY2VUeXBlLkRSQVdBQkxFICYmIHJlc291cmNlVHlwZSAhPSBSZXNvdXJjZVR5cGUuTUlQTUFQKSB7CiAgICAgICAgICAgICByZXR1cm4gU3RhdHVzLkVSUk9SX05PVF9BX0RSQVdBQkxFLmNyZWF0ZVJlc3VsdCgpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvcmVzL3Rlc3RBcHAvTXlBcHBsaWNhdGlvbi9nb2xkZW4vYWxsd2lkZ2V0cy5wbmcgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3Jlcy90ZXN0QXBwL015QXBwbGljYXRpb24vZ29sZGVuL2FsbHdpZGdldHMucG5nCmluZGV4IDJiODZiZmIuLmQ4ZWFkMjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvcmVzL3Rlc3RBcHAvTXlBcHBsaWNhdGlvbi9nb2xkZW4vYWxsd2lkZ2V0cy5wbmcKKysrIGIvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9yZXMvdGVzdEFwcC9NeUFwcGxpY2F0aW9uL2dvbGRlbi9hbGx3aWRnZXRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3Jlcy90ZXN0QXBwL015QXBwbGljYXRpb24vZ29sZGVuL2FsbHdpZGdldHNfdGFiLnBuZyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvcmVzL3Rlc3RBcHAvTXlBcHBsaWNhdGlvbi9nb2xkZW4vYWxsd2lkZ2V0c190YWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDFkYzUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3Jlcy90ZXN0QXBwL015QXBwbGljYXRpb24vZ29sZGVuL2FsbHdpZGdldHNfdGFiLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ludGVuc2l2ZS9NYWluLmphdmEgYi90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ludGVuc2l2ZS9NYWluLmphdmEKaW5kZXggMmRjYTA3Yy4uZGVhODZiZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2JyaWRnZS90ZXN0cy9zcmMvY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9pbnRlbnNpdmUvTWFpbi5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW50ZW5zaXZlL01haW4uamF2YQpAQCAtMzA1LDYgKzMwNSwxMSBAQAogICAgICAgICByZW5kZXJBbmRWZXJpZnkoImFycmF5X2NoZWNrLnhtbCIsICJhcnJheV9jaGVjay5wbmciKTsKICAgICB9CiAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RBbGxXaWRnZXRzVGFibGV0KCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICByZW5kZXJBbmRWZXJpZnkoImFsbHdpZGdldHMueG1sIiwgImFsbHdpZGdldHNfdGFiLnBuZyIsIENvbmZpZ0dlbmVyYXRvci5ORVhVU183XzIwMTIpOworICAgIH0KKwogICAgIEBBZnRlckNsYXNzCiAgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duKCkgewogICAgICAgICBzTGF5b3V0TGliTG9nID0gbnVsbDsKQEAgLTQyMyw2ICs0MjgsMTYgQEAKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgcmVuZGVyQW5kVmVyaWZ5KFN0cmluZyBsYXlvdXRGaWxlTmFtZSwgU3RyaW5nIGdvbGRlbkZpbGVOYW1lKQogICAgICAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICByZW5kZXJBbmRWZXJpZnkobGF5b3V0RmlsZU5hbWUsIGdvbGRlbkZpbGVOYW1lLCBDb25maWdHZW5lcmF0b3IuTkVYVVNfNSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlIGEgbmV3IHJlbmRlcmluZyBzZXNzaW9uIGFuZCB0ZXN0IHRoYXQgcmVuZGVyaW5nIGdpdmVuIGxheW91dCBvbiBnaXZlbiBkZXZpY2UKKyAgICAgKiBkb2Vzbid0IHRocm93IGFueSBleGNlcHRpb25zIGFuZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpbWFnZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcmVuZGVyQW5kVmVyaWZ5KFN0cmluZyBsYXlvdXRGaWxlTmFtZSwgU3RyaW5nIGdvbGRlbkZpbGVOYW1lLAorICAgICAgICAgICAgQ29uZmlnR2VuZXJhdG9yIGRldmljZUNvbmZpZykKKyAgICAgICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsYXlvdXQgcHVsbCBwYXJzZXIuCiAgICAgICAgIExheW91dFB1bGxQYXJzZXIgcGFyc2VyID0gbmV3IExheW91dFB1bGxQYXJzZXIoQVBQX1RFU1RfUkVTICsgIi9sYXlvdXQvIiArIGxheW91dEZpbGVOYW1lKTsKICAgICAgICAgLy8gQ3JlYXRlIExheW91dExpYkNhbGxiYWNrLgpAQCAtNDMwLDcgKzQ0NSw3IEBACiAgICAgICAgIGxheW91dExpYkNhbGxiYWNrLmluaXRSZXNvdXJjZXMoKTsKICAgICAgICAgLy8gVE9ETzogU2V0IHVwIGFjdGlvbiBiYXIgaGFuZGxlciBwcm9wZXJseSB0byB0ZXN0IG1lbnUgcmVuZGVyaW5nLgogICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvbiBwYXJhbXMuCi0gICAgICAgIFNlc3Npb25QYXJhbXMgcGFyYW1zID0gZ2V0U2Vzc2lvblBhcmFtcyhwYXJzZXIsIENvbmZpZ0dlbmVyYXRvci5ORVhVU181LAorICAgICAgICBTZXNzaW9uUGFyYW1zIHBhcmFtcyA9IGdldFNlc3Npb25QYXJhbXMocGFyc2VyLCBkZXZpY2VDb25maWcsCiAgICAgICAgICAgICAgICAgbGF5b3V0TGliQ2FsbGJhY2ssICJBcHBUaGVtZSIsIHRydWUsIFJlbmRlcmluZ01vZGUuTk9STUFMLCAyMik7CiAgICAgICAgIHJlbmRlckFuZFZlcmlmeShwYXJhbXMsIGdvbGRlbkZpbGVOYW1lKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvYnJpZGdlL3Rlc3RzL3NyYy9jb20vYW5kcm9pZC9sYXlvdXRsaWIvYnJpZGdlL2ludGVuc2l2ZS9zZXR1cC9Db25maWdHZW5lcmF0b3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW50ZW5zaXZlL3NldHVwL0NvbmZpZ0dlbmVyYXRvci5qYXZhCmluZGV4IDhlMGNlYzYuLjM0ZmM3MjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW50ZW5zaXZlL3NldHVwL0NvbmZpZ0dlbmVyYXRvci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9icmlkZ2UvdGVzdHMvc3JjL2NvbS9hbmRyb2lkL2xheW91dGxpYi9icmlkZ2UvaW50ZW5zaXZlL3NldHVwL0NvbmZpZ0dlbmVyYXRvci5qYXZhCkBAIC0xMjYsNiArMTI2LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTb2Z0QnV0dG9ucyh0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmF2aWdhdGlvbihOYXZpZ2F0aW9uLk5PTkFWKTsKIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQ29uZmlnR2VuZXJhdG9yIE5FWFVTXzdfMjAxMiA9IG5ldyBDb25maWdHZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2NyZWVuSGVpZ2h0KDEyODApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRTY3JlZW5XaWR0aCg4MDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRYZHBpKDE5NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFlkcGkoMjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0T3JpZW50YXRpb24oU2NyZWVuT3JpZW50YXRpb24uUE9SVFJBSVQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXREZW5zaXR5KERlbnNpdHkuVFYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRSYXRpbyhTY3JlZW5SYXRpby5OT1RMT05HKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0U2l6ZShTY3JlZW5TaXplLkxBUkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0S2V5Ym9hcmQoS2V5Ym9hcmQuTk9LRVkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUb3VjaFNjcmVlbihUb3VjaFNjcmVlbi5GSU5HRVIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlib2FyZFN0YXRlKEtleWJvYXJkU3RhdGUuU09GVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFNvZnRCdXR0b25zKHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXROYXZpZ2F0aW9uKE5hdmlnYXRpb24uTk9OQVYpOworCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBR19BVFRSID0gImF0dHIiOwogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfRU5VTSA9ICJlbnVtIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0ZMQUcgPSAiZmxhZyI7CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FuZHJvaWQubWsgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FuZHJvaWQubWsKaW5kZXggZTZmMGJjMy4uYzdmMmM0MSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BbmRyb2lkLm1rCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQW5kcm9pZC5tawpAQCAtMjAsNyArMjAsNyBAQAogCiBMT0NBTF9KQVJfTUFOSUZFU1QgOj0gbWFuaWZlc3QudHh0CiBMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gXAotCWFzbS00LjAKKwlhc20tNS4wCiAKIExPQ0FMX01PRFVMRSA6PSBsYXlvdXRsaWJfY3JlYXRlCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvY3JlYXRlLmltbCBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvY3JlYXRlLmltbAppbmRleCA5YjE4ZTczLi5iMmIxNGI0IDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL2NyZWF0ZS5pbWwKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9jcmVhdGUuaW1sCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxtb2R1bGUgdHlwZT0iSkFWQV9NT0RVTEUiIHZlcnNpb249IjQiPgotICA8Y29tcG9uZW50IG5hbWU9Ik5ld01vZHVsZVJvb3RNYW5hZ2VyIiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CisgIDxjb21wb25lbnQgbmFtZT0iTmV3TW9kdWxlUm9vdE1hbmFnZXIiIExBTkdVQUdFX0xFVkVMPSJKREtfMV84IiBpbmhlcml0LWNvbXBpbGVyLW91dHB1dD0idHJ1ZSI+CiAgICAgPGV4Y2x1ZGUtb3V0cHV0IC8+CiAgICAgPGNvbnRlbnQgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkIj4KICAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3NyYyIgaXNUZXN0U291cmNlPSJmYWxzZSIgLz4KQEAgLTksMTIgKzksMTIgQEAKICAgICAgIDxzb3VyY2VGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkL3Rlc3RzL21vY2tfZGF0YSIgdHlwZT0iamF2YS10ZXN0LXJlc291cmNlIiAvPgogICAgICAgPGV4Y2x1ZGVGb2xkZXIgdXJsPSJmaWxlOi8vJE1PRFVMRV9ESVIkLy5zZXR0aW5ncyIgLz4KICAgICA8L2NvbnRlbnQ+Ci0gICAgPG9yZGVyRW50cnkgdHlwZT0iaW5oZXJpdGVkSmRrIiAvPgorICAgIDxvcmRlckVudHJ5IHR5cGU9ImpkayIgamRrTmFtZT0iMS44IiBqZGtUeXBlPSJKYXZhU0RLIiAvPgogICAgIDxvcmRlckVudHJ5IHR5cGU9InNvdXJjZUZvbGRlciIgZm9yVGVzdHM9ImZhbHNlIiAvPgogICAgIDxvcmRlckVudHJ5IHR5cGU9Im1vZHVsZS1saWJyYXJ5Ij4KLSAgICAgIDxsaWJyYXJ5IG5hbWU9ImFzbS00LjAiPgorICAgICAgPGxpYnJhcnkgbmFtZT0iYXNtLTUuMCI+CiAgICAgICAgIDxDTEFTU0VTPgotICAgICAgICAgIDxyb290IHVybD0iamFyOi8vJE1PRFVMRV9ESVIkLy4uLy4uLy4uLy4uLy4uL3ByZWJ1aWx0cy9taXNjL2NvbW1vbi9hc20vYXNtLTQuMC5qYXIhLyIgLz4KKyAgICAgICAgICA8cm9vdCB1cmw9ImphcjovLyRNT0RVTEVfRElSJC8uLi8uLi8uLi8uLi8uLi9wcmVidWlsdHMvbWlzYy9jb21tb24vYXNtL2FzbS01LjAuamFyIS8iIC8+CiAgICAgICAgIDwvQ0xBU1NFUz4KICAgICAgICAgPEpBVkFET0MgLz4KICAgICAgICAgPFNPVVJDRVM+CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0Fic3RyYWN0Q2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0Fic3RyYWN0Q2xhc3NBZGFwdGVyLmphdmEKaW5kZXggYTY5MDJhNC4uNzU4YmQ0OCAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9BYnN0cmFjdENsYXNzQWRhcHRlci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQWJzdHJhY3RDbGFzc0FkYXB0ZXIuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkZpZWxkVmlzaXRvcjsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5MYWJlbDsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5NZXRob2RWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uVHlwZTsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5zaWduYXR1cmUuU2lnbmF0dXJlUmVhZGVyOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLnNpZ25hdHVyZS5TaWduYXR1cmVWaXNpdG9yOwpAQCAtNDQsNyArNDMsNyBAQAogICAgIGFic3RyYWN0IFN0cmluZyByZW5hbWVJbnRlcm5hbFR5cGUoU3RyaW5nIG5hbWUpOwogCiAgICAgcHVibGljIEFic3RyYWN0Q2xhc3NBZGFwdGVyKENsYXNzVmlzaXRvciBjdikgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQsIGN2KTsKKyAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTiwgY3YpOwogICAgIH0KIAogICAgIC8qKgpAQCAtMjM5LDcgKzIzOCw3IEBACiAgICAgICAgICAqIFRoZSBuYW1lcyBtdXN0IGJlIGZ1bGwgcXVhbGlmaWVkIGludGVybmFsIEFTTSBuYW1lcyAoZS5nLiBjb20vYmxhaC9NeUNsYXNzJElubmVyQ2xhc3MpLgogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIFJlbmFtZU1ldGhvZEFkYXB0ZXIoTWV0aG9kVmlzaXRvciBtdikgewotICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000LCBtdik7CisgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OLCBtdik7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTI3Niw3ICsyNzUsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgeworICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCisgICAgICAgICAgICAgICAgYm9vbGVhbiBpdGYpIHsKICAgICAgICAgICAgIC8vIFRoZSBvd25lciBzb21ldGltZXMgdHVybnMgb3V0IHRvIGJlIGEgdHlwZSBkZXNjcmlwdG9yLiBXZSB0cnkgdG8gZGV0ZWN0IGl0IGFuZCBmaXguCiAgICAgICAgICAgICBpZiAob3duZXIuaW5kZXhPZignOycpID4gMCkgewogICAgICAgICAgICAgICAgIG93bmVyID0gcmVuYW1lVHlwZURlc2Mob3duZXIpOwpAQCAtMjg1LDcgKzI4NSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZXNjID0gcmVuYW1lTWV0aG9kRGVzYyhkZXNjKTsKIAotICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOworICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MsIGl0Zik7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICBwcml2YXRlIGZpbmFsIFNpZ25hdHVyZVZpc2l0b3IgbVN2OwogCiAgICAgICAgIHB1YmxpYyBSZW5hbWVTaWduYXR1cmVBZGFwdGVyKFNpZ25hdHVyZVZpc2l0b3Igc3YpIHsKLSAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7CisgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgIG1TdiA9IHN2OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtQW5hbHl6ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtQW5hbHl6ZXIuamF2YQppbmRleCBjOGIyYjg0Li40ODU0NGNhIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplci5qYXZhCkBAIC0yMyw3ICsyMyw2IEBACiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uRmllbGRWaXNpdG9yOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkxhYmVsOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5UeXBlOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLnNpZ25hdHVyZS5TaWduYXR1cmVSZWFkZXI7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVZpc2l0b3I7CkBAIC02NSw3ICs2NCw3IEBACiAgICAgLyoqIEdsb2IgcGF0dGVybnMgb2YgZmlsZXMgdG8ga2VlcCBhcyBpcy4gKi8KICAgICBwcml2YXRlIGZpbmFsIFN0cmluZ1tdIG1JbmNsdWRlRmlsZUdsb2JzOwogICAgIC8qKiBJbnRlcm5hbCBuYW1lcyBvZiBjbGFzc2VzIHRoYXQgY29udGFpbiBtZXRob2QgY2FsbHMgdGhhdCBuZWVkIHRvIGJlIHJld3JpdHRlbi4gKi8KLSAgICBwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1SZXBsYWNlTWV0aG9kQ2FsbENsYXNzZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgcHJpdmF0ZSBmaW5hbCBTZXQ8U3RyaW5nPiBtUmVwbGFjZU1ldGhvZENhbGxDbGFzc2VzID0gbmV3IEhhc2hTZXQ8PigpOwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBhbmFseXplci4KQEAgLTk3LDggKzk2LDggQEAKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBhbmFseXplKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBMb2dBYm9ydEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIElucHV0U3RyZWFtPigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBuZXcgVHJlZU1hcDw+KCk7CisgICAgICAgIE1hcDxTdHJpbmcsIElucHV0U3RyZWFtPiBmaWxlc0ZvdW5kID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIHBhcnNlWmlwKG1Pc1NvdXJjZUphciwgemlwQ2xhc3NlcywgZmlsZXNGb3VuZCk7CiAgICAgICAgIG1Mb2cuaW5mbygiRm91bmQgJWQgY2xhc3NlcyBpbiBpbnB1dCBKQVIlcy4iLCB6aXBDbGFzc2VzLnNpemUoKSwKQEAgLTE4OSw3ICsxODgsNyBAQAogICAgICAqLwogICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmaW5kSW5jbHVkZXMoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMpCiAgICAgICAgICAgICB0aHJvd3MgTG9nQWJvcnRFeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBtTG9nLmRlYnVnKCJGaW5kIGNsYXNzZXMgdG8gaW5jbHVkZS4iKTsKIApAQCAtMzE4LDEwICszMTcsMTAgQEAKICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZmluZERlcHMoTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMsCiAgICAgICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gaW5PdXRLZWVwQ2xhc3NlcykgewogCi0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbmV3X2RlcHMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19rZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB0ZW1wID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBkZXBzID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19kZXBzID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19rZWVwID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHRlbXAgPSBuZXcgVHJlZU1hcDw+KCk7CiAKICAgICAgICAgRGVwZW5kZW5jeVZpc2l0b3IgdmlzaXRvciA9IGdldFZpc2l0b3IoemlwQ2xhc3NlcywKICAgICAgICAgICAgICAgICBpbk91dEtlZXBDbGFzc2VzLCBuZXdfa2VlcCwKQEAgLTM5OSw3ICszOTgsNyBAQAogICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBvdXRLZWVwLAogICAgICAgICAgICAgICAgIE1hcDxTdHJpbmcsQ2xhc3NSZWFkZXI+IGluRGVwcywKICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLENsYXNzUmVhZGVyPiBvdXREZXBzKSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTik7CiAgICAgICAgICAgICBtWmlwQ2xhc3NlcyA9IHppcENsYXNzZXM7CiAgICAgICAgICAgICBtSW5LZWVwID0gaW5LZWVwOwogICAgICAgICAgICAgbU91dEtlZXAgPSBvdXRLZWVwOwpAQCAtNTU3LDcgKzU1Niw3IEBACiAgICAgICAgIHByaXZhdGUgY2xhc3MgTXlGaWVsZFZpc2l0b3IgZXh0ZW5kcyBGaWVsZFZpc2l0b3IgewogCiAgICAgICAgICAgICBwdWJsaWMgTXlGaWVsZFZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKKyAgICAgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC02MzAsNyArNjI5LDcgQEAKICAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIG1Pd25lckNsYXNzOwogCiAgICAgICAgICAgICBwdWJsaWMgTXlNZXRob2RWaXNpdG9yKFN0cmluZyBvd25lckNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKKyAgICAgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgICAgICBtT3duZXJDbGFzcyA9IG93bmVyQ2xhc3M7CiAgICAgICAgICAgICB9CiAKQEAgLTcxOSw3ICs3MTgsOCBAQAogCiAgICAgICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGludm9rZXMgYSBtZXRob2QKICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXRmKSB7CiAKICAgICAgICAgICAgICAgICAvLyBvd25lciBpcyB0aGUgaW50ZXJuYWwgbmFtZSBvZiB0aGUgbWV0aG9kJ3Mgb3duZXIgY2xhc3MKICAgICAgICAgICAgICAgICBjb25zaWRlck5hbWUob3duZXIpOwpAQCAtNzc5LDcgKzc3OSw3IEBACiAgICAgICAgIHByaXZhdGUgY2xhc3MgTXlTaWduYXR1cmVWaXNpdG9yIGV4dGVuZHMgU2lnbmF0dXJlVmlzaXRvciB7CiAKICAgICAgICAgICAgIHB1YmxpYyBNeVNpZ25hdHVyZVZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKKyAgICAgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NzgsNyArODc4LDcgQEAKICAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewogCiAgICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICAgICAgICAgIHN1cGVyKE1haW4uQVNNX1ZFUlNJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3IuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yLmphdmEKaW5kZXggOGYwYWQwMS4uNWI5OWE2YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3IuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUdlbmVyYXRvci5qYXZhCkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIG1Mb2cgPSBsb2c7CiAgICAgICAgIG1Pc0Rlc3RKYXIgPSBvc0Rlc3RKYXI7CiAgICAgICAgIEFycmF5TGlzdDxDbGFzczw/Pj4gaW5qZWN0ZWRDbGFzc2VzID0KLSAgICAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PENsYXNzPD8+PihBcnJheXMuYXNMaXN0KGNyZWF0ZUluZm8uZ2V0SW5qZWN0ZWRDbGFzc2VzKCkpKTsKKyAgICAgICAgICAgICAgICBuZXcgQXJyYXlMaXN0PD4oQXJyYXlzLmFzTGlzdChjcmVhdGVJbmZvLmdldEluamVjdGVkQ2xhc3NlcygpKSk7CiAgICAgICAgIC8vIFNlYXJjaCBmb3IgYW5kIGFkZCBhbm9ueW1vdXMgaW5uZXIgY2xhc3NlcyBhbHNvLgogICAgICAgICBMaXN0SXRlcmF0b3I8Q2xhc3M8Pz4+IGl0ZXIgPSBpbmplY3RlZENsYXNzZXMubGlzdEl0ZXJhdG9yKCk7CiAgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewpAQCAtMTA3LDI1ICsxMDcsMjUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBtSW5qZWN0Q2xhc3NlcyA9IGluamVjdGVkQ2xhc3Nlcy50b0FycmF5KG5ldyBDbGFzczw/PlswXSk7Ci0gICAgICAgIG1TdHViTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oQXJyYXlzLmFzTGlzdChjcmVhdGVJbmZvLmdldE92ZXJyaWRkZW5NZXRob2RzKCkpKTsKKyAgICAgICAgbVN0dWJNZXRob2RzID0gbmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KGNyZWF0ZUluZm8uZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSkpOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgbWFwL3NldCBvZiBtZXRob2RzIHRvIGNoYW5nZSB0byBkZWxlZ2F0ZXMKLSAgICAgICAgbURlbGVnYXRlTWV0aG9kcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisgICAgICAgIG1EZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIGFkZFRvTWFwKGNyZWF0ZUluZm8uZ2V0RGVsZWdhdGVNZXRob2RzKCksIG1EZWxlZ2F0ZU1ldGhvZHMpOwogCiAgICAgICAgIGZvciAoU3RyaW5nIGNsYXNzTmFtZSA6IGNyZWF0ZUluZm8uZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSkgewogICAgICAgICAgICAgY2xhc3NOYW1lID0gYmluYXJ5VG9JbnRlcm5hbENsYXNzTmFtZShjbGFzc05hbWUpOwogICAgICAgICAgICAgU2V0PFN0cmluZz4gbWV0aG9kcyA9IG1EZWxlZ2F0ZU1ldGhvZHMuZ2V0KGNsYXNzTmFtZSk7CiAgICAgICAgICAgICBpZiAobWV0aG9kcyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgICAgICAgICBtZXRob2RzID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICAgICAgICAgIG1EZWxlZ2F0ZU1ldGhvZHMucHV0KGNsYXNzTmFtZSwgbWV0aG9kcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZXRob2RzLmFkZChEZWxlZ2F0ZUNsYXNzQWRhcHRlci5BTExfTkFUSVZFUyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDcmVhdGUgdGhlIG1hcCBvZiBjbGFzc2VzIHRvIHJlbmFtZS4KLSAgICAgICAgbVJlbmFtZUNsYXNzZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLSAgICAgICAgbUNsYXNzZXNOb3RSZW5hbWVkID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICBtUmVuYW1lQ2xhc3NlcyA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgbUNsYXNzZXNOb3RSZW5hbWVkID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICBTdHJpbmdbXSByZW5hbWVDbGFzc2VzID0gY3JlYXRlSW5mby5nZXRSZW5hbWVkQ2xhc3NlcygpOwogICAgICAgICBpbnQgbiA9IHJlbmFtZUNsYXNzZXMubGVuZ3RoOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKz0gMikgewpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvLyBDcmVhdGUgYSBtYXAgb2YgY2xhc3NlcyB0byBiZSByZWZhY3RvcmVkLgotICAgICAgICBtUmVmYWN0b3JDbGFzc2VzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CisgICAgICAgIG1SZWZhY3RvckNsYXNzZXMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIFN0cmluZ1tdIHJlZmFjdG9yQ2xhc3NlcyA9IGNyZWF0ZUluZm8uZ2V0SmF2YVBrZ0NsYXNzZXMoKTsKICAgICAgICAgbiA9IHJlZmFjdG9yQ2xhc3Nlcy5sZW5ndGg7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArPSAyKSB7CkBAIC0xNDksNyArMTQ5LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIGNyZWF0ZSB0aGUgbWFwIG9mIHJlbmFtZWQgY2xhc3MgLT4gcmV0dXJuIHR5cGUgb2YgbWV0aG9kIHRvIGRlbGV0ZS4KLSAgICAgICAgbURlbGV0ZVJldHVybnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PigpOworICAgICAgICBtRGVsZXRlUmV0dXJucyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAgU3RyaW5nW10gZGVsZXRlUmV0dXJucyA9IGNyZWF0ZUluZm8uZ2V0RGVsZXRlUmV0dXJucygpOwogICAgICAgICBTZXQ8U3RyaW5nPiByZXR1cm5UeXBlcyA9IG51bGw7CiAgICAgICAgIFN0cmluZyByZW5hbWVkQ2xhc3MgPSBudWxsOwpAQCAtMTcyLDEyICsxNzIsMTIgQEAKIAogICAgICAgICAgICAgLy8ganVzdCBhIHN0YW5kYXJkIHJldHVybiB0eXBlLCB3ZSBhZGQgaXQgdG8gdGhlIGxpc3QuCiAgICAgICAgICAgICBpZiAocmV0dXJuVHlwZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldHVyblR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGVzID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuVHlwZXMuYWRkKGJpbmFyeVRvSW50ZXJuYWxDbGFzc05hbWUoY2xhc3NOYW1lKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtUHJvbW90ZWRGaWVsZHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PigpOworICAgICAgICBtUHJvbW90ZWRGaWVsZHMgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgIGFkZFRvTWFwKGNyZWF0ZUluZm8uZ2V0UHJvbW90ZWRGaWVsZHMoKSwgbVByb21vdGVkRmllbGRzKTsKIAogICAgICAgICBtSW5qZWN0ZWRNZXRob2RzTWFwID0gY3JlYXRlSW5mby5nZXRJbmplY3RlZE1ldGhvZHNNYXAoKTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgICAgICAgU3RyaW5nIG1ldGhvZE9yRmllbGROYW1lID0gZW50cnkuc3Vic3RyaW5nKHBvcyArIDEpOwogICAgICAgICAgICAgU2V0PFN0cmluZz4gc2V0ID0gbWFwLmdldChjbGFzc05hbWUpOwogICAgICAgICAgICAgaWYgKHNldCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc2V0ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICAgICAgICAgIHNldCA9IG5ldyBIYXNoU2V0PD4oKTsKICAgICAgICAgICAgICAgICBtYXAucHV0KGNsYXNzTmFtZSwgc2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNldC5hZGQobWV0aG9kT3JGaWVsZE5hbWUpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICAgICAvKiogR2VuZXJhdGVzIHRoZSBmaW5hbCBKQVIgKi8KICAgICBwdWJsaWMgdm9pZCBnZW5lcmF0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBieXRlW10+IGFsbCA9IG5ldyBUcmVlTWFwPFN0cmluZywgYnl0ZVtdPigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgYnl0ZVtdPiBhbGwgPSBuZXcgVHJlZU1hcDw+KCk7CiAKICAgICAgICAgZm9yIChDbGFzczw/PiBjbGF6eiA6IG1JbmplY3RDbGFzc2VzKSB7CiAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGNsYXNzVG9FbnRyeVBhdGgoY2xhenopOwpAQCAtMzE0LDcgKzMxNCw3IEBACiAgICAgICogZS5nLiBmb3IgdGhlIGlucHV0ICJhbmRyb2lkLnZpZXcuVmlldyIgaXQgcmV0dXJucyAiYW5kcm9pZC92aWV3L1ZpZXcuY2xhc3MiCiAgICAgICovCiAgICAgU3RyaW5nIGNsYXNzTmFtZVRvRW50cnlQYXRoKFN0cmluZyBjbGFzc05hbWUpIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzTmFtZS5yZXBsYWNlQWxsKCJcXC4iLCAiLyIpLmNvbmNhdCgiLmNsYXNzIik7CisgICAgICAgIHJldHVybiBjbGFzc05hbWUucmVwbGFjZSgnLicsICcvJykuY29uY2F0KCIuY2xhc3MiKTsKICAgICB9CiAKICAgICAvKioKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NsYXNzSGFzTmF0aXZlVmlzaXRvci5qYXZhCmluZGV4IDJjOTU1ZmQuLjQ3NDhhN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3IuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogICovCiBwdWJsaWMgY2xhc3MgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yIGV4dGVuZHMgQ2xhc3NWaXNpdG9yIHsKICAgICBwdWJsaWMgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yKCkgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gbUhhc05hdGl2ZU1ldGhvZHMgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ3JlYXRlSW5mby5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DcmVhdGVJbmZvLmphdmEKaW5kZXggYjU3MWM1YS4uNmU2YWQ4ZiAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DcmVhdGVJbmZvLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DcmVhdGVJbmZvLmphdmEKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRFeGNsdWRlZENsYXNzZXMoKSB7CiAgICAgICAgIFN0cmluZ1tdIHJlZmFjdG9yZWRDbGFzc2VzID0gZ2V0SmF2YVBrZ0NsYXNzZXMoKTsKICAgICAgICAgaW50IGNvdW50ID0gcmVmYWN0b3JlZENsYXNzZXMubGVuZ3RoIC8gMiArIEVYQ0xVREVEX0NMQVNTRVMubGVuZ3RoOwotICAgICAgICBTZXQ8U3RyaW5nPiBleGNsdWRlZENsYXNzZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KGNvdW50KTsKKyAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZWRDbGFzc2VzID0gbmV3IEhhc2hTZXQ8Pihjb3VudCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVmYWN0b3JlZENsYXNzZXMubGVuZ3RoOyBpKz0yKSB7CiAgICAgICAgICAgICBleGNsdWRlZENsYXNzZXMuYWRkKHJlZmFjdG9yZWRDbGFzc2VzW2ldKTsKICAgICAgICAgfQpAQCAtMTY2LDYgKzE2Niw3IEBACiAgICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXkjZ2V0VmFsdWVBdCIsCiAgICAgICAgICJhbmRyb2lkLmNvbnRlbnQucmVzLlR5cGVkQXJyYXkjb2J0YWluIiwKICAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwRmFjdG9yeSNmaW5pc2hEZWNvZGUiLAorICAgICAgICAiYW5kcm9pZC5ncmFwaGljcy5CaXRtYXBGYWN0b3J5I3NldERlbnNpdHlGcm9tT3B0aW9ucyIsCiAgICAgICAgICJhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkdyYWRpZW50RHJhd2FibGUjYnVpbGRSaW5nIiwKICAgICAgICAgImFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2UjZ2V0U3lzdGVtRm9udENvbmZpZ0xvY2F0aW9uIiwKICAgICAgICAgImFuZHJvaWQub3MuSGFuZGxlciNzZW5kTWVzc2FnZUF0VGltZSIsCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlQ2xhc3NBZGFwdGVyLmphdmEKaW5kZXggN2VmNzU2Ni4uY2JiM2E4YSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXIuamF2YQpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgQ2xhc3NWaXNpdG9yIGN2LAogICAgICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgICAgICAgIFNldDxTdHJpbmc+IGRlbGVnYXRlTWV0aG9kcykgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQsIGN2KTsKKyAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTiwgY3YpOwogICAgICAgICBtTG9nID0gbG9nOwogICAgICAgICBtQ2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgICBtRGVsZWdhdGVNZXRob2RzID0gZGVsZWdhdGVNZXRob2RzOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVNZXRob2RBZGFwdGVyLmphdmEKaW5kZXggY2NhOWU1Ny4uZGE4YmFiYyAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZU1ldGhvZEFkYXB0ZXIuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlTWV0aG9kQWRhcHRlci5qYXZhCkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgICAgIFN0cmluZyBkZXNjLAogICAgICAgICAgICAgYm9vbGVhbiBpc1N0YXRpYywKICAgICAgICAgICAgIGJvb2xlYW4gaXNTdGF0aWNDbGFzcykgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgbUxvZyA9IGxvZzsKICAgICAgICAgbU9yZ1dyaXRlciA9IG12T3JpZ2luYWw7CiAgICAgICAgIG1EZWxXcml0ZXIgPSBtdkRlbGVnYXRlOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TGluZU51bWJlcigoSW50ZWdlcikgcFswXSwgKExhYmVsKSBwWzFdKTsKICAgICAgICAgfQogCi0gICAgICAgIEFycmF5TGlzdDxUeXBlPiBwYXJhbVR5cGVzID0gbmV3IEFycmF5TGlzdDxUeXBlPigpOworICAgICAgICBBcnJheUxpc3Q8VHlwZT4gcGFyYW1UeXBlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgICBTdHJpbmcgZGVsZWdhdGVDbGFzc05hbWUgPSBtQ2xhc3NOYW1lICsgREVMRUdBVEVfU1VGRklYOwogICAgICAgICBib29sZWFuIHB1c2hlZEFyZzAgPSBmYWxzZTsKICAgICAgICAgaW50IG1heFN0YWNrID0gMDsKQEAgLTI1Myw3ICsyNTMsOCBAQAogICAgICAgICBtRGVsV3JpdGVyLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKICAgICAgICAgICAgICAgICBkZWxlZ2F0ZUNsYXNzTmFtZSwKICAgICAgICAgICAgICAgICBtTWV0aG9kTmFtZSwKLSAgICAgICAgICAgICAgICBkZXNjKTsKKyAgICAgICAgICAgICAgICBkZXNjLAorICAgICAgICAgICAgICAgIGZhbHNlKTsKIAogICAgICAgICBUeXBlIHJldHVyblR5cGUgPSBUeXBlLmdldFJldHVyblR5cGUobURlc2MpOwogICAgICAgICBtRGVsV3JpdGVyLnZpc2l0SW5zbihyZXR1cm5UeXBlLmdldE9wY29kZShPcGNvZGVzLklSRVRVUk4pKTsKQEAgLTM3MSw5ICszNzIsOSBAQAogICAgIH0KIAogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgeworICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYywgYm9vbGVhbiBpdGYpIHsKICAgICAgICAgaWYgKG1PcmdXcml0ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgbU9yZ1dyaXRlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYyk7CisgICAgICAgICAgICBtT3JnV3JpdGVyLnZpc2l0TWV0aG9kSW5zbihvcGNvZGUsIG93bmVyLCBuYW1lLCBkZXNjLCBpdGYpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlcGVuZGVuY3lGaW5kZXIuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVwZW5kZW5jeUZpbmRlci5qYXZhCmluZGV4IDYxYjY0YTIuLmFhNjhlYTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVwZW5kZW5jeUZpbmRlci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVwZW5kZW5jeUZpbmRlci5qYXZhCkBAIC0yNiw3ICsyNiw2IEBACiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uRmllbGRWaXNpdG9yOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLkxhYmVsOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5UeXBlOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLnNpZ25hdHVyZS5TaWduYXR1cmVSZWFkZXI7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uc2lnbmF0dXJlLlNpZ25hdHVyZVZpc2l0b3I7CkBAIC04Miw3ICs4MSw3IEBACiAKICAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IG1pc3NpbmcgPSBmaW5kTWlzc2luZ0NsYXNzZXMoZGVwcywgemlwQ2xhc3Nlcy5rZXlTZXQoKSk7CiAKLSAgICAgICAgTGlzdDxNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8TWFwPFN0cmluZyxTZXQ8U3RyaW5nPj4+KDIpOworICAgICAgICBMaXN0PE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+Pj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KDIpOwogICAgICAgICByZXN1bHQuYWRkKGRlcHMpOwogICAgICAgICByZXN1bHQuYWRkKG1pc3NpbmcpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTUxLDcgKzE1MCw3IEBACiAgICAgICogY2xhc3MgbmFtZSA9PiBBU00gQ2xhc3NSZWFkZXIuIENsYXNzIG5hbWVzIGFyZSBpbiB0aGUgZm9ybSAiYW5kcm9pZC52aWV3LlZpZXciLgogICAgICAqLwogICAgIE1hcDxTdHJpbmcsQ2xhc3NSZWFkZXI+IHBhcnNlWmlwKExpc3Q8U3RyaW5nPiBqYXJQYXRoTGlzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBjbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBjbGFzc2VzID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIGZvciAoU3RyaW5nIGphclBhdGggOiBqYXJQYXRoTGlzdCkgewogICAgICAgICAgICAgWmlwRmlsZSB6aXAgPSBuZXcgWmlwRmlsZShqYXJQYXRoKTsKQEAgLTIwMiw3ICsyMDEsNyBAQAogCiAgICAgICAgIC8vIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCB3ZSdsbCBjb2xsZWN0LgogICAgICAgICAvLyBJdCdzIGEgbWFwIENsYXNzIG5hbWUgPT4gdXNlcyBjbGFzcyBuYW1lcy4KLSAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGRlcGVuZGVuY3lNYXAgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PigpOworICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZGVwZW5kZW5jeU1hcCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBEZXBlbmRlbmN5VmlzaXRvciB2aXNpdG9yID0gZ2V0VmlzaXRvcigpOwogCkBAIC0yMTEsNyArMjEwLDcgQEAKICAgICAgICAgICAgIGZvciAoRW50cnk8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZW50cnkgOiB6aXBDbGFzc2VzLmVudHJ5U2V0KCkpIHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGVudHJ5LmdldEtleSgpOwogCi0gICAgICAgICAgICAgICAgVHJlZVNldDxTdHJpbmc+IHNldCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKyAgICAgICAgICAgICAgICBUcmVlU2V0PFN0cmluZz4gc2V0ID0gbmV3IFRyZWVTZXQ8PigpOwogICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lNYXAucHV0KG5hbWUsIHNldCk7CiAgICAgICAgICAgICAgICAgdmlzaXRvci5zZXREZXBlbmRlbmN5U2V0KHNldCk7CiAKQEAgLTI0MCw3ICsyMzksNyBAQAogICAgIHByaXZhdGUgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IGZpbmRNaXNzaW5nQ2xhc3NlcygKICAgICAgICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBkZXBzLAogICAgICAgICAgICAgU2V0PFN0cmluZz4gemlwQ2xhc3NlcykgewotICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gbWlzc2luZyA9IG5ldyBUcmVlTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisgICAgICAgIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBtaXNzaW5nID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIGZvciAoRW50cnk8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gZW50cnkgOiBkZXBzLmVudHJ5U2V0KCkpIHsKICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZW50cnkuZ2V0S2V5KCk7CkBAIC0yNTAsNyArMjQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBkZXBlbmRlbmN5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHppcCBjbGFzc2VzLgogICAgICAgICAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBtaXNzaW5nLmdldChkZXApOwogICAgICAgICAgICAgICAgICAgICBpZiAoc2V0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5ldyBUcmVlU2V0PD4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmcucHV0KGRlcCwgc2V0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKG5hbWUpOwpAQCAtMjg0LDcgKzI4Myw3IEBACiAgICAgICAgICAqIENyZWF0ZXMgYSBuZXcgdmlzaXRvciB0aGF0IHdpbGwgZmluZCBhbGwgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIHZpc2l0ZWQgY2xhc3MuCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgRGVwZW5kZW5jeVZpc2l0b3IoKSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTik7CiAgICAgICAgIH0KIAogICAgICAgICAvKioKQEAgLTQzNSw3ICs0MzQsNyBAQAogICAgICAgICBwcml2YXRlIGNsYXNzIE15RmllbGRWaXNpdG9yIGV4dGVuZHMgRmllbGRWaXNpdG9yIHsKIAogICAgICAgICAgICAgcHVibGljIE15RmllbGRWaXNpdG9yKCkgewotICAgICAgICAgICAgICAgIHN1cGVyKE9wY29kZXMuQVNNNCk7CisgICAgICAgICAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtNTEwLDcgKzUwOSw3IEBACiAgICAgICAgIHByaXZhdGUgY2xhc3MgTXlNZXRob2RWaXNpdG9yIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7CiAKICAgICAgICAgICAgIHB1YmxpYyBNeU1ldGhvZFZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKKyAgICAgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgIH0KIAogCkBAIC01OTgsNyArNTk3LDggQEAKIAogICAgICAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gdGhhdCBpbnZva2VzIGEgbWV0aG9kCiAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0TWV0aG9kSW5zbihpbnQgb3Bjb2RlLCBTdHJpbmcgb3duZXIsIFN0cmluZyBuYW1lLCBTdHJpbmcgZGVzYykgeworICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAorICAgICAgICAgICAgICAgICAgICBib29sZWFuIGl0ZikgewogCiAgICAgICAgICAgICAgICAgLy8gb3duZXIgaXMgdGhlIGludGVybmFsIG5hbWUgb2YgdGhlIG1ldGhvZCdzIG93bmVyIGNsYXNzCiAgICAgICAgICAgICAgICAgaWYgKCFjb25zaWRlckRlc2Mob3duZXIpICYmIG93bmVyLmluZGV4T2YoJy8nKSAhPSAtMSkgewpAQCAtNjU0LDcgKzY1NCw3IEBACiAgICAgICAgIHByaXZhdGUgY2xhc3MgTXlTaWduYXR1cmVWaXNpdG9yIGV4dGVuZHMgU2lnbmF0dXJlVmlzaXRvciB7CiAKICAgICAgICAgICAgIHB1YmxpYyBNeVNpZ25hdHVyZVZpc2l0b3IoKSB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000KTsKKyAgICAgICAgICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NTMsNyArNzUzLDcgQEAKICAgICAgICAgcHJpdmF0ZSBjbGFzcyBNeUFubm90YXRpb25WaXNpdG9yIGV4dGVuZHMgQW5ub3RhdGlvblZpc2l0b3IgewogCiAgICAgICAgICAgICBwdWJsaWMgTXlBbm5vdGF0aW9uVmlzaXRvcigpIHsKLSAgICAgICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICAgICAgICAgIHN1cGVyKE1haW4uQVNNX1ZFUlNJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBWaXNpdHMgYSBwcmltaXRpdmUgdmFsdWUgb2YgYW4gYW5ub3RhdGlvbgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9JbmplY3RNZXRob2RSdW5uYWJsZXMuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSW5qZWN0TWV0aG9kUnVubmFibGVzLmphdmEKaW5kZXggMzdmYzA5Ni4uMTk0MWFiNCAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9JbmplY3RNZXRob2RSdW5uYWJsZXMuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0luamVjdE1ldGhvZFJ1bm5hYmxlcy5qYXZhCkBAIC00Miw5ICs0Miw5IEBACiAgICAgICAgICAgICBtdi52aXNpdENvZGUoKTsKICAgICAgICAgICAgIG12LnZpc2l0VmFySW5zbihBTE9BRCwgMCk7CiAgICAgICAgICAgICBtdi52aXNpdE1ldGhvZEluc24oSU5WT0tFVklSVFVBTCwgImphdmEvbGFuZy9PYmplY3QiLCAiZ2V0Q2xhc3MiLAotICAgICAgICAgICAgICAgICAgICAiKClMamF2YS9sYW5nL0NsYXNzOyIpOworICAgICAgICAgICAgICAgICAgICAiKClMamF2YS9sYW5nL0NsYXNzOyIsIGZhbHNlKTsKICAgICAgICAgICAgIG12LnZpc2l0TWV0aG9kSW5zbihJTlZPS0VWSVJUVUFMLCAiamF2YS9sYW5nL0NsYXNzIiwgImdldENsYXNzTG9hZGVyIiwKLSAgICAgICAgICAgICAgICAgICAgIigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiKTsKKyAgICAgICAgICAgICAgICAgICAgIigpTGphdmEvbGFuZy9DbGFzc0xvYWRlcjsiLCBmYWxzZSk7CiAgICAgICAgICAgICBtdi52aXNpdEluc24oQVJFVFVSTik7CiAgICAgICAgICAgICBtdi52aXNpdE1heHMoMSwgMSk7CiAgICAgICAgICAgICBtdi52aXNpdEVuZCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9JbmplY3RNZXRob2RzQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9JbmplY3RNZXRob2RzQWRhcHRlci5qYXZhCmluZGV4IGVhMmI5YzkuLmM4MzQ4MDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvSW5qZWN0TWV0aG9kc0FkYXB0ZXIuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0luamVjdE1ldGhvZHNBZGFwdGVyLmphdmEKQEAgLTE5LDcgKzE5LDYgQEAKIGltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLklDcmVhdGVJbmZvLkluamVjdE1ldGhvZFJ1bm5hYmxlOwogCiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NWaXNpdG9yOwotaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7CiAKIC8qKgogICogSW5qZWN0cyBtZXRob2RzIGludG8gc29tZSBjbGFzc2VzLgpAQCAtMjksNyArMjgsNyBAQAogICAgIHByaXZhdGUgZmluYWwgSUNyZWF0ZUluZm8uSW5qZWN0TWV0aG9kUnVubmFibGUgbVJ1bm5hYmxlOwogCiAgICAgcHVibGljIEluamVjdE1ldGhvZHNBZGFwdGVyKENsYXNzVmlzaXRvciBjdiwgSW5qZWN0TWV0aG9kUnVubmFibGUgcnVubmFibGUpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000LCBjdik7CisgICAgICAgIHN1cGVyKE1haW4uQVNNX1ZFUlNJT04sIGN2KTsKICAgICAgICAgbVJ1bm5hYmxlID0gcnVubmFibGU7CiAgICAgfQogCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01haW4uamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCmluZGV4IDM4MzE2OGYuLjliYjkxZTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWFpbi5qYXZhCkBAIC0xNiw2ICsxNiw4IEBACiAKIHBhY2thZ2UgY29tLmFuZHJvaWQudG9vbHMubGF5b3V0bGliLmNyZWF0ZTsKIAoraW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXM7CisKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC01MiwxMyArNTQsMTUgQEAKICAgICAgICAgcHVibGljIGJvb2xlYW4gbGlzdE9ubHlNaXNzaW5nRGVwcyA9IGZhbHNlOwogICAgIH0KIAorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFTTV9WRVJTSU9OID0gT3Bjb2Rlcy5BU001OworCiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBPcHRpb25zIHNPcHRpb25zID0gbmV3IE9wdGlvbnMoKTsKIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKIAogICAgICAgICBMb2cgbG9nID0gbmV3IExvZygpOwogCi0gICAgICAgIEFycmF5TGlzdDxTdHJpbmc+IG9zSmFyUGF0aCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBvc0phclBhdGggPSBuZXcgQXJyYXlMaXN0PD4oKTsKICAgICAgICAgU3RyaW5nW10gb3NEZXN0SmFyID0geyBudWxsIH07CiAKICAgICAgICAgaWYgKCFwcm9jZXNzQXJncyhsb2csIGFyZ3MsIG9zSmFyUGF0aCwgb3NEZXN0SmFyKSkgewpkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RMaXN0ZW5lci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9NZXRob2RMaXN0ZW5lci5qYXZhCmluZGV4IDZmYzJiMjQuLmZhYmE0ZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvTWV0aG9kTGlzdGVuZXIuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL01ldGhvZExpc3RlbmVyLmphdmEKQEAgLTM2LDQxICszNiw0MCBAQAogICAgICAqIEBwYXJhbSBpc05hdGl2ZSBUcnVlIGlmIHRoZSBtZXRob2Qgd2FzIGEgbmF0aXZlIG1ldGhvZC4KICAgICAgKiBAcGFyYW0gY2FsbGVyIFRoZSBjYWxsaW5nIG9iamVjdC4gTnVsbCBmb3Igc3RhdGljIG1ldGhvZHMsICJ0aGlzIiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KICAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CisgICAgdm9pZCBvbkludm9rZVYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CiAKICAgICAvKioKICAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYW4gaW50ZWdlciBvciBzaW1pbGFyLgogICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKICAgICAgKiBAcmV0dXJuIGFuIGludGVnZXIsIG9yIGEgYm9vbGVhbiwgb3IgYSBzaG9ydCBvciBhIGJ5dGUuCiAgICAgICovCi0gICAgcHVibGljIGludCBvbkludm9rZUkoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CisgICAgaW50IG9uSW52b2tlSShTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKIAogICAgIC8qKgogICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhIGxvbmcuCiAgICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQogICAgICAqIEByZXR1cm4gYSBsb25nLgogICAgICAqLwotICAgIHB1YmxpYyBsb25nIG9uSW52b2tlTChTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKKyAgICBsb25nIG9uSW52b2tlTChTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKIAogICAgIC8qKgogICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhIGZsb2F0LgogICAgICAqIEBzZWUgI29uSW52b2tlVihTdHJpbmcsIGJvb2xlYW4sIE9iamVjdCkKICAgICAgKiBAcmV0dXJuIGEgZmxvYXQuCiAgICAgICovCi0gICAgcHVibGljIGZsb2F0IG9uSW52b2tlRihTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKKyAgICBmbG9hdCBvbkludm9rZUYoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CiAKICAgICAvKioKICAgICAgKiBTYW1lIGFzIHtAbGluayAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KX0gYnV0IHJldHVybnMgYSBkb3VibGUuCiAgICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQogICAgICAqIEByZXR1cm4gYSBkb3VibGUuCiAgICAgICovCi0gICAgcHVibGljIGRvdWJsZSBvbkludm9rZUQoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CisgICAgZG91YmxlIG9uSW52b2tlRChTdHJpbmcgc2lnbmF0dXJlLCBib29sZWFuIGlzTmF0aXZlLCBPYmplY3QgY2FsbGVyKTsKIAogICAgIC8qKgogICAgICAqIFNhbWUgYXMge0BsaW5rICNvbkludm9rZVYoU3RyaW5nLCBib29sZWFuLCBPYmplY3QpfSBidXQgcmV0dXJucyBhbiBvYmplY3QuCiAgICAgICogQHNlZSAjb25JbnZva2VWKFN0cmluZywgYm9vbGVhbiwgT2JqZWN0KQogICAgICAqIEByZXR1cm4gYW4gb2JqZWN0LgogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3Qgb25JbnZva2VBKFN0cmluZyBzaWduYXR1cmUsIGJvb2xlYW4gaXNOYXRpdmUsIE9iamVjdCBjYWxsZXIpOworICAgIE9iamVjdCBvbkludm9rZUEoU3RyaW5nIHNpZ25hdHVyZSwgYm9vbGVhbiBpc05hdGl2ZSwgT2JqZWN0IGNhbGxlcik7CiB9Ci0gICAgCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kLmphdmEKaW5kZXggNGM4N2IzYy4uN2NjYWZjMyAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogcHVibGljIGZpbmFsIGNsYXNzIE92ZXJyaWRlTWV0aG9kIHsKIAogICAgIC8qKiBNYXAgb2YgbWV0aG9kIG92ZXJyaWRkZW4uICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIE1ldGhvZExpc3RlbmVyPiBzTWV0aG9kcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTWV0aG9kTGlzdGVuZXI+KCk7CisgICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcDxTdHJpbmcsIE1ldGhvZExpc3RlbmVyPiBzTWV0aG9kcyA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAvKiogRGVmYXVsdCBsaXN0ZW5lciBmb3IgYWxsIG1ldGhvZCBub3QgbGlzdGVkIGluIHNNZXRob2RzLiBOb3RoaW5nIGlmIG51bGwuICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgTWV0aG9kTGlzdGVuZXIgc0RlZmF1bHRMaXN0ZW5lciA9IG51bGw7CiAgICAgCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1Byb21vdGVGaWVsZENsYXNzQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Qcm9tb3RlRmllbGRDbGFzc0FkYXB0ZXIuamF2YQppbmRleCBlNGI3MGRhLi4wNWFmMDMzIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1Byb21vdGVGaWVsZENsYXNzQWRhcHRlci5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUHJvbW90ZUZpZWxkQ2xhc3NBZGFwdGVyLmphdmEKQEAgLTI0LDcgKzI0LDYgQEAKIGltcG9ydCBzdGF0aWMgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2Rlcy5BQ0NfUFJJVkFURTsKIGltcG9ydCBzdGF0aWMgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2Rlcy5BQ0NfUFJPVEVDVEVEOwogaW1wb3J0IHN0YXRpYyBvcmcub2JqZWN0d2ViLmFzbS5PcGNvZGVzLkFDQ19QVUJMSUM7Ci1pbXBvcnQgc3RhdGljIG9yZy5vYmplY3R3ZWIuYXNtLk9wY29kZXMuQVNNNDsKIAogLyoqCiAgKiBQcm9tb3RlcyBnaXZlbiBmaWVsZHMgdG8gcHVibGljIHZpc2liaWxpdHkuCkBAIC0zNSw3ICszNCw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFDQ19OT1RfUFVCTElDID0gfihBQ0NfUFJJVkFURSB8IEFDQ19QUk9URUNURUQpOwogCiAgICAgcHVibGljIFByb21vdGVGaWVsZENsYXNzQWRhcHRlcihDbGFzc1Zpc2l0b3IgY3YsIFNldDxTdHJpbmc+IGZpZWxkTmFtZXMpIHsKLSAgICAgICAgc3VwZXIoQVNNNCwgY3YpOworICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OLCBjdik7CiAgICAgICAgIG1GaWVsZE5hbWVzID0gZmllbGROYW1lczsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvUmVwbGFjZU1ldGhvZENhbGxzQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9SZXBsYWNlTWV0aG9kQ2FsbHNBZGFwdGVyLmphdmEKaW5kZXggNWU0NzI2MS4uYmY5NDQxNSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9SZXBsYWNlTWV0aG9kQ2FsbHNBZGFwdGVyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9SZXBsYWNlTWV0aG9kQ2FsbHNBZGFwdGVyLmphdmEKQEAgLTQzLDExICs0MywxMSBAQAogICAgICAqIERlc2NyaXB0b3JzIGZvciBzcGVjaWFsaXplZCB2ZXJzaW9ucyB7QGxpbmsgU3lzdGVtI2FycmF5Y29weX0gdGhhdCBhcmUgbm90IHByZXNlbnQgb24gdGhlCiAgICAgICogRGVza3RvcCBWTS4KICAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBBUlJBWUNPUFlfREVTQ1JJUFRPUlMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KEFycmF5cy5hc0xpc3QoCisgICAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gQVJSQVlDT1BZX0RFU0NSSVBUT1JTID0gbmV3IEhhc2hTZXQ8PihBcnJheXMuYXNMaXN0KAogICAgICAgICAgICAgIihbQ0lbQ0lJKVYiLCAiKFtCSVtCSUkpViIsICIoW1NJW1NJSSlWIiwgIihbSUlbSUlJKVYiLAogICAgICAgICAgICAgIihbSklbSklJKVYiLCAiKFtGSVtGSUkpViIsICIoW0RJW0RJSSlWIiwgIihbWklbWklJKVYiKSk7CiAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PE1ldGhvZFJlcGxhY2VyPiBNRVRIT0RfUkVQTEFDRVJTID0gbmV3IEFycmF5TGlzdDxNZXRob2RSZXBsYWNlcj4oNSk7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxNZXRob2RSZXBsYWNlcj4gTUVUSE9EX1JFUExBQ0VSUyA9IG5ldyBBcnJheUxpc3Q8Pig1KTsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBTkRST0lEX0xPQ0FMRV9DTEFTUyA9CiAgICAgICAgICAgICAiY29tL2FuZHJvaWQvbGF5b3V0bGliL2JyaWRnZS9hbmRyb2lkL0FuZHJvaWRMb2NhbGUiOwpAQCAtMjMyLDcgKzIzMiw3IEBACiAgICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbU9yaWdpbmFsQ2xhc3NOYW1lOwogCiAgICAgcHVibGljIFJlcGxhY2VNZXRob2RDYWxsc0FkYXB0ZXIoQ2xhc3NWaXNpdG9yIGN2LCBTdHJpbmcgb3JpZ2luYWxDbGFzc05hbWUpIHsKLSAgICAgICAgc3VwZXIoT3Bjb2Rlcy5BU000LCBjdik7CisgICAgICAgIHN1cGVyKE1haW4uQVNNX1ZFUlNJT04sIGN2KTsKICAgICAgICAgbU9yaWdpbmFsQ2xhc3NOYW1lID0gb3JpZ2luYWxDbGFzc05hbWU7CiAgICAgfQogCkBAIC0yNDUsMTEgKzI0NSwxMiBAQAogICAgIHByaXZhdGUgY2xhc3MgTXlNZXRob2RWaXNpdG9yIGV4dGVuZHMgTWV0aG9kVmlzaXRvciB7CiAKICAgICAgICAgcHVibGljIE15TWV0aG9kVmlzaXRvcihNZXRob2RWaXNpdG9yIG12KSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQsIG12KTsKKyAgICAgICAgICAgIHN1cGVyKE1haW4uQVNNX1ZFUlNJT04sIG12KTsKICAgICAgICAgfQogCiAgICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCB2aXNpdE1ldGhvZEluc24oaW50IG9wY29kZSwgU3RyaW5nIG93bmVyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MpIHsKKyAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLAorICAgICAgICAgICAgICAgIGJvb2xlYW4gaXRmKSB7CiAgICAgICAgICAgICBmb3IgKE1ldGhvZFJlcGxhY2VyIHJlcGxhY2VyIDogTUVUSE9EX1JFUExBQ0VSUykgewogICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlci5pc05lZWRlZChvd25lciwgbmFtZSwgZGVzYywgbU9yaWdpbmFsQ2xhc3NOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBNZXRob2RJbmZvcm1hdGlvbiBtaSA9IG5ldyBNZXRob2RJbmZvcm1hdGlvbihvcGNvZGUsIG93bmVyLCBuYW1lLCBkZXNjKTsKQEAgLTI2MSw3ICsyNjIsNyBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdXBlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYyk7CisgICAgICAgICAgICBzdXBlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYywgaXRmKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9TdHViTWV0aG9kQWRhcHRlci5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9TdHViTWV0aG9kQWRhcHRlci5qYXZhCmluZGV4IDQxNmI3M2EuLmI1YWI3MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvU3R1Yk1ldGhvZEFkYXB0ZXIuamF2YQorKysgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1N0dWJNZXRob2RBZGFwdGVyLmphdmEKQEAgLTUwLDcgKzUwLDcgQEAKIAogICAgIHB1YmxpYyBTdHViTWV0aG9kQWRhcHRlcihNZXRob2RWaXNpdG9yIG12LCBTdHJpbmcgbWV0aG9kTmFtZSwgVHlwZSByZXR1cm5UeXBlLAogICAgICAgICAgICAgU3RyaW5nIGludm9rZVNpZ25hdHVyZSwgYm9vbGVhbiBpc1N0YXRpYywgYm9vbGVhbiBpc05hdGl2ZSkgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICBzdXBlcihNYWluLkFTTV9WRVJTSU9OKTsKICAgICAgICAgbVBhcmVudFZpc2l0b3IgPSBtdjsKICAgICAgICAgbVJldHVyblR5cGUgPSByZXR1cm5UeXBlOwogICAgICAgICBtSW52b2tlU2lnbmF0dXJlID0gaW52b2tlU2lnbmF0dXJlOwpAQCAtODIsNyArODIsOCBAQAogICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAogICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCiAgICAgICAgICAgICAgICAgICAgICJpbnZva2VWIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KVYiKTsKKyAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KVYiLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5SRVRVUk4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZS5CT09MRUFOOgpAQCAtOTMsNyArOTQsOCBAQAogICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKE9wY29kZXMuSU5WT0tFU1RBVElDLAogICAgICAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9PdmVycmlkZU1ldGhvZCIsCiAgICAgICAgICAgICAgICAgICAgICJpbnZva2VJIiwKLSAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUkiKTsKKyAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztaTGphdmEvbGFuZy9PYmplY3Q7KUkiLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgICBzd2l0Y2goc29ydCkgewogICAgICAgICAgICAgY2FzZSBUeXBlLkJPT0xFQU46CiAgICAgICAgICAgICAgICAgTGFiZWwgbDEgPSBuZXcgTGFiZWwoKTsKQEAgLTExOSwyMSArMTIxLDI0IEBACiAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCiAgICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKICAgICAgICAgICAgICAgICAgICAgImludm9rZUwiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspSiIpOworICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspSiIsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0SW5zbihPcGNvZGVzLkxSRVRVUk4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHlwZS5GTE9BVDoKICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKICAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAogICAgICAgICAgICAgICAgICAgICAiaW52b2tlRiIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylGIik7CisgICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylGIiwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuRlJFVFVSTik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlLkRPVUJMRToKICAgICAgICAgICAgIG1QYXJlbnRWaXNpdG9yLnZpc2l0TWV0aG9kSW5zbihPcGNvZGVzLklOVk9LRVNUQVRJQywKICAgICAgICAgICAgICAgICAgICAgImNvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvT3ZlcnJpZGVNZXRob2QiLAogICAgICAgICAgICAgICAgICAgICAiaW52b2tlRCIsCi0gICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylEIik7CisgICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylEIiwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwogICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRJbnNuKE9wY29kZXMuRFJFVFVSTik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUeXBlLkFSUkFZOgpAQCAtMTQxLDcgKzE0Niw4IEBACiAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdE1ldGhvZEluc24oT3Bjb2Rlcy5JTlZPS0VTVEFUSUMsCiAgICAgICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL092ZXJyaWRlTWV0aG9kIiwKICAgICAgICAgICAgICAgICAgICAgImludm9rZUEiLAotICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO1pMamF2YS9sYW5nL09iamVjdDspTGphdmEvbGFuZy9PYmplY3Q7Iik7CisgICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7WkxqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdFR5cGVJbnNuKE9wY29kZXMuQ0hFQ0tDQVNULCBtUmV0dXJuVHlwZS5nZXRJbnRlcm5hbE5hbWUoKSk7CiAgICAgICAgICAgICBtUGFyZW50VmlzaXRvci52aXNpdEluc24oT3Bjb2Rlcy5BUkVUVVJOKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjgyLDkgKzI4OCw5IEBACiAgICAgfQogCiAgICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjKSB7CisgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsIFN0cmluZyBkZXNjLCBib29sZWFuIGl0ZikgewogICAgICAgICBpZiAobUlzSW5pdE1ldGhvZCkgewotICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOworICAgICAgICAgICAgbVBhcmVudFZpc2l0b3IudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MsIGl0Zik7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvVHJhbnNmb3JtQ2xhc3NBZGFwdGVyLmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL1RyYW5zZm9ybUNsYXNzQWRhcHRlci5qYXZhCmluZGV4IGQ5ZWNmOTguLmEyOGFlNjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvVHJhbnNmb3JtQ2xhc3NBZGFwdGVyLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9UcmFuc2Zvcm1DbGFzc0FkYXB0ZXIuamF2YQpAQCAtNDksNyArNDksNyBAQAogICAgIHB1YmxpYyBUcmFuc2Zvcm1DbGFzc0FkYXB0ZXIoTG9nIGxvZ2dlciwgU2V0PFN0cmluZz4gc3R1Yk1ldGhvZHMsCiAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBkZWxldGVSZXR1cm5zLCBTdHJpbmcgY2xhc3NOYW1lLCBDbGFzc1Zpc2l0b3IgY3YsCiAgICAgICAgICAgICBib29sZWFuIHN0dWJOYXRpdmVzT25seSkgewotICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQsIGN2KTsKKyAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTiwgY3YpOwogICAgICAgICBtTG9nID0gbG9nZ2VyOwogICAgICAgICBtU3R1Yk1ldGhvZHMgPSBzdHViTWV0aG9kczsKICAgICAgICAgbUNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvc3JjL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9qYXZhL0F1dG9DbG9zZWFibGUuamF2YQppbmRleCBlZDJjMTI4Li43ZDZjNGVjIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3NyYy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvamF2YS9BdXRvQ2xvc2VhYmxlLmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9zcmMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2phdmEvQXV0b0Nsb3NlYWJsZS5qYXZhCkBAIC0yOCw0ICsyOCw1IEBACiAgICAgLyoqCiAgICAgICogQ2xvc2VzIHRoZSBvYmplY3QgYW5kIHJlbGVhc2UgYW55IHN5c3RlbSByZXNvdXJjZXMgaXQgaG9sZHMuCiAgICAgICovCi0gICAgdm9pZCBjbG9zZSgpIHRocm93cyBFeGNlcHRpb247IH0KKyAgICB2b2lkIGNsb3NlKCkgdGhyb3dzIEV4Y2VwdGlvbjsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvQW5kcm9pZC5tayBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvQW5kcm9pZC5tawppbmRleCBjMTk3ZDU3Li5kYWZiOWM2IDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9BbmRyb2lkLm1rCkBAIC0yNCw3ICsyNCw3IEBACiBMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAogCiBMT0NBTF9KQVZBX0xJQlJBUklFUyA6PSBsYXlvdXRsaWJfY3JlYXRlIGp1bml0Ci1MT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgOj0gYXNtLTQuMAorTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGFzbS01LjAKIAogaW5jbHVkZSAkKEJVSUxEX0hPU1RfSkFWQV9MSUJSQVJZKQogCmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtQW5hbHl6ZXJUZXN0LmphdmEgYi90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtQW5hbHl6ZXJUZXN0LmphdmEKaW5kZXggNzhlMmM0OC4uZjg2OTE3YSAxMDA2NDQKLS0tIGEvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUFuYWx5emVyVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21BbmFseXplclRlc3QuamF2YQpAQCAtMTcsMTMgKzE3LDggQEAKIAogcGFja2FnZSBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlOwogCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7Ci0KIGltcG9ydCBjb20uYW5kcm9pZC50b29scy5sYXlvdXRsaWIuY3JlYXRlLkFzbUFuYWx5emVyLkRlcGVuZGVuY3lWaXNpdG9yOwogCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uQ2xhc3NSZWFkZXI7CkBAIC0zMiwxMSArMjcsMTUgQEAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKKwogLyoqCiAgKiBVbml0IHRlc3RzIGZvciBzb21lIG1ldGhvZHMgb2Yge0BsaW5rIEFzbUFuYWx5emVyfS4KICAqLwpAQCAtNTEsMjYgKzUwLDIyIEBACiAgICAgICAgIG1Mb2cgPSBuZXcgTW9ja0xvZygpOwogICAgICAgICBVUkwgdXJsID0gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2UoImRhdGEvbW9ja19hbmRyb2lkLmphciIpOwogCi0gICAgICAgIG1Pc0phclBhdGggPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgbU9zSmFyUGF0aCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAvL25vaW5zcGVjdGlvbiBDb25zdGFudENvbmRpdGlvbnMKICAgICAgICAgbU9zSmFyUGF0aC5hZGQodXJsLmdldEZpbGUoKSk7CiAKLSAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KDEpOwotICAgICAgICBleGNsdWRlQ2xhc3Nlcy5hZGQoImphdmEubGFuZy5KYXZhQ2xhc3MiKTsKKyAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZUNsYXNzZXMgPSBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImphdmEubGFuZy5KYXZhQ2xhc3MiKTsKIAogICAgICAgICBTdHJpbmdbXSBpbmNsdWRlRmlsZXMgPSBuZXcgU3RyaW5nW117Im1vY2tfYW5kcm9pZC9kYXRhL2RhdGEqIn07CiAgICAgICAgIG1BYSA9IG5ldyBBc21BbmFseXplcihtTG9nLCBtT3NKYXJQYXRoLCBudWxsIC8qIGdlbiAqLywgbnVsbCAvKiBkZXJpdmVGcm9tICovLAogICAgICAgICAgICAgICAgIG51bGwgLyogaW5jbHVkZUdsb2JzICovLCBleGNsdWRlQ2xhc3NlcywgaW5jbHVkZUZpbGVzKTsKICAgICB9CiAKLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIH0KLQogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBhcnNlWmlwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAotICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbWFwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIElucHV0U3RyZWFtPigpOworICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gbWFwID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCwgbWFwLCBmaWxlc0ZvdW5kKTsKIApAQCAtMTAxLDExICs5NiwxMSBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZpbmRDbGFzcygpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewogCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIElucHV0U3RyZWFtPigpOworICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcyA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDw+KCk7CiAKICAgICAgICAgbUFhLnBhcnNlWmlwKG1Pc0phclBhdGgsIHppcENsYXNzZXMsIGZpbGVzRm91bmQpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBmb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBDbGFzc1JlYWRlciBjciA9IG1BYS5maW5kQ2xhc3MoIm1vY2tfYW5kcm9pZC52aWV3LlZpZXdHcm91cCRMYXlvdXRQYXJhbXMiLAogICAgICAgICAgICAgICAgIHppcENsYXNzZXMsIGZvdW5kKTsKQEAgLTEyMCwxMSArMTE1LDExIEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmluZEdsb2JzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBMb2dBYm9ydEV4Y2VwdGlvbiB7CiAKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+KCk7CisgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCwgemlwQ2xhc3NlcywgZmlsZXNGb3VuZCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIC8vIHRoaXMgbWF0Y2hlcyBjbGFzc2VzLCBhIHBhY2thZ2UgbWF0Y2ggcmV0dXJucyBub3RoaW5nCiAgICAgICAgIGZvdW5kLmNsZWFyKCk7CkBAIC0xODMsMTEgKzE3OCwxMSBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZpbmRDbGFzc2VzRGVyaXZpbmdGcm9tKCkgdGhyb3dzIExvZ0Fib3J0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IHppcENsYXNzZXMgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+KCk7CisgICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKIAogICAgICAgICBtQWEucGFyc2VaaXAobU9zSmFyUGF0aCwgemlwQ2xhc3NlcywgZmlsZXNGb3VuZCk7Ci0gICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gZm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGZvdW5kID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIG1BYS5maW5kQ2xhc3Nlc0Rlcml2aW5nRnJvbSgibW9ja19hbmRyb2lkLnZpZXcuVmlldyIsIHppcENsYXNzZXMsIGZvdW5kKTsKIApAQCAtMjA5LDE0ICsyMDQsMTQgQEAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3REZXBlbmRlbmN5VmlzaXRvcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgTG9nQWJvcnRFeGNlcHRpb24gewogCi0gICAgICAgIE1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiB6aXBDbGFzc2VzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIElucHV0U3RyZWFtPigpOworICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gemlwQ2xhc3NlcyA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDw+KCk7CiAKICAgICAgICAgbUFhLnBhcnNlWmlwKG1Pc0phclBhdGgsIHppcENsYXNzZXMsIGZpbGVzRm91bmQpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IGtlZXAgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPigpOwotICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG5ld19rZWVwID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbl9kZXBzID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBvdXRfZGVwcyA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7CisgICAgICAgIFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4ga2VlcCA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBuZXdfa2VlcCA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgVHJlZU1hcDxTdHJpbmcsIENsYXNzUmVhZGVyPiBpbl9kZXBzID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dF9kZXBzID0gbmV3IFRyZWVNYXA8PigpOwogCiAgICAgICAgIENsYXNzUmVhZGVyIGNyID0gbUFhLmZpbmRDbGFzcygibW9ja19hbmRyb2lkLndpZGdldC5MaW5lYXJMYXlvdXQiLCB6aXBDbGFzc2VzLCBrZWVwKTsKICAgICAgICAgRGVwZW5kZW5jeVZpc2l0b3IgdmlzaXRvciA9IG1BYS5nZXRWaXNpdG9yKHppcENsYXNzZXMsIGtlZXAsIG5ld19rZWVwLCBpbl9kZXBzLCBvdXRfZGVwcyk7CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0FzbUdlbmVyYXRvclRlc3QuamF2YQppbmRleCA4YTIyMzViLi5jNGRkN2VlIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQXNtR2VuZXJhdG9yVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9Bc21HZW5lcmF0b3JUZXN0LmphdmEKQEAgLTE4LDEyICsxOCw2IEBACiBwYWNrYWdlIGNvbS5hbmRyb2lkLnRvb2xzLmxheW91dGxpYi5jcmVhdGU7CiAKIAotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEFycmF5RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci0KIGltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTMxLDcgKzI1LDYgQEAKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5DbGFzc1Zpc2l0b3I7CiBpbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uRmllbGRWaXNpdG9yOwogaW1wb3J0IG9yZy5vYmplY3R3ZWIuYXNtLk1ldGhvZFZpc2l0b3I7Ci1pbXBvcnQgb3JnLm9iamVjdHdlYi5hc20uT3Bjb2RlczsKIGltcG9ydCBvcmcub2JqZWN0d2ViLmFzbS5UeXBlOwogCiBpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CkBAIC00NCw3ICszNyw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKQEAgLTUyLDExICs0NCwxOCBAQAogaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7CiBpbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKwogLyoqCiAgKiBVbml0IHRlc3RzIGZvciBzb21lIG1ldGhvZHMgb2Yge0BsaW5rIEFzbUdlbmVyYXRvcn0uCiAgKi8KIHB1YmxpYyBjbGFzcyBBc21HZW5lcmF0b3JUZXN0IHsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX1NUUklOR19BUlJBWSA9IG5ldyBTdHJpbmdbMF07CiAgICAgcHJpdmF0ZSBNb2NrTG9nIG1Mb2c7CiAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtT3NKYXJQYXRoOwogICAgIHByaXZhdGUgU3RyaW5nIG1Pc0Rlc3RKYXI7CkBAIC03MCw3ICs2OSw4IEBACiAgICAgICAgIG1Mb2cgPSBuZXcgTW9ja0xvZygpOwogICAgICAgICBVUkwgdXJsID0gdGhpcy5nZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkuZ2V0UmVzb3VyY2UoImRhdGEvbW9ja19hbmRyb2lkLmphciIpOwogCi0gICAgICAgIG1Pc0phclBhdGggPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICAgICAgbU9zSmFyUGF0aCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAvL25vaW5zcGVjdGlvbiBDb25zdGFudENvbmRpdGlvbnMKICAgICAgICAgbU9zSmFyUGF0aC5hZGQodXJsLmdldEZpbGUoKSk7CiAKICAgICAgICAgbVRlbXBGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgibW9jayIsICIuamFyIik7CkBAIC05OCwxOCArOTgsMTggQEAKIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVNZXRob2RzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGVnYXRlQ2xhc3NOYXRpdmVzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldE92ZXJyaWRkZW5NZXRob2RzKCkgewogICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgdG8gZm9yY2Ugb3ZlcnJpZGUKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RSSU5HX0FSUkFZOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKQEAgLTEyMyw3ICsxMjMsNyBAQAogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRKYXZhUGtnQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtMTM0LDE3ICsxMzQsMTcgQEAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7CiAgICAgICAgICAgICAgICAgIC8vIG1ldGhvZHMgZGVsZXRlZCBmcm9tIHRoZWlyIHJldHVybiB0eXBlLgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFByb21vdGVkRmllbGRzKCkgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIE1hcDxTdHJpbmcsIEluamVjdE1ldGhvZFJ1bm5hYmxlPiBnZXRJbmplY3RlZE1ldGhvZHNNYXAoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIYXNoTWFwPFN0cmluZywgSW5qZWN0TWV0aG9kUnVubmFibGU+KDApOworICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5lbXB0eU1hcCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwogCkBAIC0xNTUsNyArMTU1LDcgQEAKICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAgICAgICAgLy8gaW5jbHVkZSBjbGFzc2VzCiAgICAgICAgICAgICAgICAgICAgICIqKiIKICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIG5ldyBIYXNoU2V0PFN0cmluZz4oMCkgLyogZXhjbHVkZWQgY2xhc3NlcyAqLywKKyAgICAgICAgICAgICAgICBDb2xsZWN0aW9ucy48U3RyaW5nPmVtcHR5U2V0KCkgLyogZXhjbHVkZWQgY2xhc3NlcyAqLywKICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW117fSAvKiBpbmNsdWRlIGZpbGVzICovKTsKICAgICAgICAgYWEuYW5hbHl6ZSgpOwogICAgICAgICBhZ2VuLmdlbmVyYXRlKCk7CkBAIC0xNzgsMjQgKzE3OCwyNCBAQAogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWxlZ2F0ZU1ldGhvZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSB7CiAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byBmb3JjZSBvdmVycmlkZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFJlbmFtZWRDbGFzc2VzKCkgewogICAgICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gcmVuYW1lIChzbyB0aGF0IHdlIGNhbiByZXBsYWNlIHRoZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCkBAIC0yMTQsMTcgKzIxNCwxNyBAQAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpIHsKICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBkZWxldGVkIGZyb20gdGhlaXIgcmV0dXJuIHR5cGUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJvbW90ZWRGaWVsZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgTWFwPFN0cmluZywgSW5qZWN0TWV0aG9kUnVubmFibGU+IGdldEluamVjdGVkTWV0aG9kc01hcCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbmplY3RNZXRob2RSdW5uYWJsZT4oMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKQEAgLTIzNSwxNCArMjM1LDE0IEBACiAgICAgICAgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgICAgICAgIC8vIGluY2x1ZGUgY2xhc3NlcwogICAgICAgICAgICAgICAgICAgICAiKioiCiAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICBuZXcgSGFzaFNldDxTdHJpbmc+KDEpLAorICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLjxTdHJpbmc+ZW1wdHlTZXQoKSwKICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyAgICAgICAgLyogaW5jbHVkZSBmaWxlcyAqLwogICAgICAgICAgICAgICAgICAgICAibW9ja19hbmRyb2lkL2RhdGEvZGF0YSoiCiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIGFhLmFuYWx5emUoKTsKICAgICAgICAgYWdlbi5nZW5lcmF0ZSgpOwotICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gb3V0cHV0ID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4oKTsKLSAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDxTdHJpbmcsIElucHV0U3RyZWFtPigpOworICAgICAgICBNYXA8U3RyaW5nLCBDbGFzc1JlYWRlcj4gb3V0cHV0ID0gbmV3IFRyZWVNYXA8PigpOworICAgICAgICBNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4gZmlsZXNGb3VuZCA9IG5ldyBUcmVlTWFwPD4oKTsKICAgICAgICAgcGFyc2VaaXAobU9zRGVzdEphciwgb3V0cHV0LCBmaWxlc0ZvdW5kKTsKICAgICAgICAgYm9vbGVhbiBpbmplY3RlZENsYXNzRm91bmQgPSBmYWxzZTsKICAgICAgICAgZm9yIChDbGFzc1JlYWRlciBjcjogb3V0cHV0LnZhbHVlcygpKSB7CkBAIC0yNjUsMzUgKzI2NSwzNSBAQAogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWxlZ2F0ZU1ldGhvZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSB7CiAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byBmb3JjZSBvdmVycmlkZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFJlbmFtZWRDbGFzc2VzKCkgewogICAgICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gcmVuYW1lIChzbyB0aGF0IHdlIGNhbiByZXBsYWNlIHRoZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKSB7CiAgICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byByZWZhY3RvciAoc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFNldDxTdHJpbmc+IGdldEV4Y2x1ZGVkQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAgICBTZXQ8U3RyaW5nPiBzZXQgPSBuZXcgSGFzaFNldDxTdHJpbmc+KDIpOworICAgICAgICAgICAgICAgIFNldDxTdHJpbmc+IHNldCA9IG5ldyBIYXNoU2V0PD4oMik7CiAgICAgICAgICAgICAgICAgc2V0LmFkZCgibW9ja19hbmRyb2lkLmR1bW15LklubmVyVGVzdCIpOwogICAgICAgICAgICAgICAgIHNldC5hZGQoImphdmEubGFuZy5KYXZhQ2xhc3MiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0OwpAQCAtMzAyLDE3ICszMDIsMTcgQEAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldERlbGV0ZVJldHVybnMoKSB7CiAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyBkZWxldGVkIGZyb20gdGhlaXIgcmV0dXJuIHR5cGUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0UHJvbW90ZWRGaWVsZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgTWFwPFN0cmluZywgSW5qZWN0TWV0aG9kUnVubmFibGU+IGdldEluamVjdGVkTWV0aG9kc01hcCgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hNYXA8U3RyaW5nLCBJbmplY3RNZXRob2RSdW5uYWJsZT4oMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKQEAgLTMyOSw4ICszMjksOCBAQAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICBhYS5hbmFseXplKCk7CiAgICAgICAgIGFnZW4uZ2VuZXJhdGUoKTsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dHB1dCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIElucHV0U3RyZWFtPiBmaWxlc0ZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dHB1dCA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDw+KCk7CiAgICAgICAgIHBhcnNlWmlwKG1Pc0Rlc3RKYXIsIG91dHB1dCwgZmlsZXNGb3VuZCk7CiAgICAgICAgIGZvciAoU3RyaW5nIHMgOiBvdXRwdXQua2V5U2V0KCkpIHsKICAgICAgICAgICAgIGFzc2VydEZhbHNlKGV4Y2x1ZGVkQ2xhc3Nlcy5jb250YWlucyhzKSk7CkBAIC0zNTEsNTUgKzM1MSw1MiBAQAogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXREZWxlZ2F0ZU1ldGhvZHMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZWdhdGVDbGFzc05hdGl2ZXMoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0T3ZlcnJpZGRlbk1ldGhvZHMoKSB7CiAgICAgICAgICAgICAgICAgLy8gbWV0aG9kcyB0byBmb3JjZSBvdmVycmlkZQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFN0cmluZ1tdIGdldFJlbmFtZWRDbGFzc2VzKCkgewogICAgICAgICAgICAgICAgIC8vIGNsYXNzZXMgdG8gcmVuYW1lIChzbyB0aGF0IHdlIGNhbiByZXBsYWNlIHRoZW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR19BUlJBWTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SmF2YVBrZ0NsYXNzZXMoKSB7CiAgICAgICAgICAgICAgICAgLy8gY2xhc3NlcyB0byByZWZhY3RvciAoc28gdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGVtKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVFJJTkdfQVJSQVk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgcHVibGljIFNldDxTdHJpbmc+IGdldEV4Y2x1ZGVkQ2xhc3NlcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhhc2hTZXQ8U3RyaW5nPigwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlTZXQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nW10gZ2V0RGVsZXRlUmV0dXJucygpIHsKICAgICAgICAgICAgICAgICAvLyBtZXRob2RzIGRlbGV0ZWQgZnJvbSB0aGVpciByZXR1cm4gdHlwZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RSSU5HX0FSUkFZOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQcm9tb3RlZEZpZWxkcygpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RSSU5HX0FSUkFZOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBJbmplY3RNZXRob2RSdW5uYWJsZT4gZ2V0SW5qZWN0ZWRNZXRob2RzTWFwKCkgewotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBJbmplY3RNZXRob2RSdW5uYWJsZT4gbWFwID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgSW5qZWN0TWV0aG9kUnVubmFibGU+KDEpOwotICAgICAgICAgICAgICAgIG1hcC5wdXQoIm1vY2tfYW5kcm9pZC51dGlsLkVtcHR5QXJyYXkiLAorICAgICAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoIm1vY2tfYW5kcm9pZC51dGlsLkVtcHR5QXJyYXkiLAogICAgICAgICAgICAgICAgICAgICAgICAgSW5qZWN0TWV0aG9kUnVubmFibGVzLkNPTlRFWFRfR0VUX0ZSQU1FV09SS19DTEFTU19MT0FERVIpOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKQEAgLTQxNSw4ICs0MTIsOCBAQAogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICBhYS5hbmFseXplKCk7CiAgICAgICAgIGFnZW4uZ2VuZXJhdGUoKTsKLSAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dHB1dCA9IG5ldyBUcmVlTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+KCk7Ci0gICAgICAgIE1hcDxTdHJpbmcsIElucHV0U3RyZWFtPiBmaWxlc0ZvdW5kID0gbmV3IFRyZWVNYXA8U3RyaW5nLCBJbnB1dFN0cmVhbT4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgQ2xhc3NSZWFkZXI+IG91dHB1dCA9IG5ldyBUcmVlTWFwPD4oKTsKKyAgICAgICAgTWFwPFN0cmluZywgSW5wdXRTdHJlYW0+IGZpbGVzRm91bmQgPSBuZXcgVHJlZU1hcDw+KCk7CiAgICAgICAgIHBhcnNlWmlwKG1Pc0Rlc3RKYXIsIG91dHB1dCwgZmlsZXNGb3VuZCk7CiAgICAgICAgIGZpbmFsIFN0cmluZyBtb2RpZmllZENsYXNzID0gIm1vY2tfYW5kcm9pZC51dGlsLkVtcHR5QXJyYXkiOwogICAgICAgICBmaW5hbCBTdHJpbmcgbW9kaWZpZWRDbGFzc1BhdGggPSBtb2RpZmllZENsYXNzLnJlcGxhY2UoJy4nLCAnLycpLmNvbmNhdCgiLmNsYXNzIik7CkBAIC00MjQsMTEgKzQyMSw4IEBACiAgICAgICAgIFppcEVudHJ5IGVudHJ5ID0gemlwRmlsZS5nZXRFbnRyeShtb2RpZmllZENsYXNzUGF0aCk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoZW50cnkpOwogICAgICAgICBmaW5hbCBieXRlW10gYnl0ZXM7Ci0gICAgICAgIGZpbmFsIElucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSk7Ci0gICAgICAgIHRyeSB7CisgICAgICAgIHRyeSAoSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSB6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSkgewogICAgICAgICAgICAgYnl0ZXMgPSBnZXRCeXRlQXJyYXkoaW5wdXRTdHJlYW0pOwotICAgICAgICB9IGZpbmFsbHkgewotICAgICAgICAgICAgaW5wdXRTdHJlYW0uY2xvc2UoKTsKICAgICAgICAgfQogICAgICAgICBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IG5ldyBDbGFzc0xvYWRlcihnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpIHsKICAgICAgICAgICAgIEBPdmVycmlkZQpAQCAtNDg5LDcgKzQ4Myw3IEBACiAgICAgICAgIGJvb2xlYW4gbUluamVjdGVkQ2xhc3NGb3VuZCA9IGZhbHNlOwogCiAgICAgICAgIFRlc3RDbGFzc1Zpc2l0b3IoKSB7Ci0gICAgICAgICAgICBzdXBlcihPcGNvZGVzLkFTTTQpOworICAgICAgICAgICAgc3VwZXIoTWFpbi5BU01fVkVSU0lPTik7CiAgICAgICAgIH0KIAogICAgICAgICBAT3ZlcnJpZGUKQEAgLTUxNCw3ICs1MDgsNyBAQAogICAgICAgICBwdWJsaWMgTWV0aG9kVmlzaXRvciB2aXNpdE1ldGhvZChpbnQgYWNjZXNzLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2MsCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZSwgU3RyaW5nW10gZXhjZXB0aW9ucykgewogICAgICAgICAgICAgTWV0aG9kVmlzaXRvciBtdiA9IHN1cGVyLnZpc2l0TWV0aG9kKGFjY2VzcywgbmFtZSwgZGVzYywgc2lnbmF0dXJlLCBleGNlcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTWV0aG9kVmlzaXRvcihPcGNvZGVzLkFTTTQsIG12KSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IE1ldGhvZFZpc2l0b3IoTWFpbi5BU01fVkVSU0lPTiwgbXYpIHsKIAogICAgICAgICAgICAgICAgIEBPdmVycmlkZQogICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHZpc2l0RmllbGRJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsCkBAIC01NDAsMTAgKzUzNCwxMCBAQAogCiAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgdmlzaXRNZXRob2RJbnNuKGludCBvcGNvZGUsIFN0cmluZyBvd25lciwgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVzYykgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRlc2MsIGJvb2xlYW4gaXRmKSB7CiAgICAgICAgICAgICAgICAgICAgIGFzc2VydFRydWUoIWdldEJhc2Uob3duZXIpLmVxdWFscyhKQVZBX0NMQVNTX05BTUUpKTsKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0VHlwZShUeXBlLmdldFR5cGUoZGVzYykpKTsKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIudmlzaXRNZXRob2RJbnNuKG9wY29kZSwgb3duZXIsIG5hbWUsIGRlc2MpOworICAgICAgICAgICAgICAgICAgICBzdXBlci52aXNpdE1ldGhvZEluc24ob3Bjb2RlLCBvd25lciwgbmFtZSwgZGVzYywgaXRmKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIH07CmRpZmYgLS1naXQgYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0NsYXNzSGFzTmF0aXZlVmlzaXRvclRlc3QuamF2YQppbmRleCAwMTM1YzQwLi4wY2RjZGMwIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvQ2xhc3NIYXNOYXRpdmVWaXNpdG9yVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9DbGFzc0hhc05hdGl2ZVZpc2l0b3JUZXN0LmphdmEKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgKiBPdmVycmlkZXMge0BsaW5rIENsYXNzSGFzTmF0aXZlVmlzaXRvcn0gdG8gY29sbGVjIHRoZSBuYW1lIG9mIHRoZSBuYXRpdmUgbWV0aG9kcyBmb3VuZC4KICAgICAgKi8KICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrQ2xhc3NIYXNOYXRpdmVWaXNpdG9yIGV4dGVuZHMgQ2xhc3NIYXNOYXRpdmVWaXNpdG9yIHsKLSAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiBtTWV0aG9kc0ZvdW5kID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gbU1ldGhvZHNGb3VuZCA9IG5ldyBBcnJheUxpc3Q8PigpOwogCiAgICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRNZXRob2RzRm91bmQoKSB7CiAgICAgICAgICAgICByZXR1cm4gbU1ldGhvZHNGb3VuZC50b0FycmF5KG5ldyBTdHJpbmdbbU1ldGhvZHNGb3VuZC5zaXplKCldKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3QuamF2YSBiL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvdGVzdHMvY29tL2FuZHJvaWQvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS9EZWxlZ2F0ZUNsYXNzQWRhcHRlclRlc3QuamF2YQppbmRleCBlMzdhMDliLi4wOTEyZmIxIDEwMDY0NAotLS0gYS90b29scy9sYXlvdXRsaWIvY3JlYXRlL3Rlc3RzL2NvbS9hbmRyb2lkL3Rvb2xzL2xheW91dGxpYi9jcmVhdGUvRGVsZWdhdGVDbGFzc0FkYXB0ZXJUZXN0LmphdmEKKysrIGIvdG9vbHMvbGF5b3V0bGliL2NyZWF0ZS90ZXN0cy9jb20vYW5kcm9pZC90b29scy9sYXlvdXRsaWIvY3JlYXRlL0RlbGVnYXRlQ2xhc3NBZGFwdGVyVGVzdC5qYXZhCkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIC8vIE5vdyBwcm9jZXNzIGl0IGJ1dCB0ZWxsIHRoZSBkZWxlZ2F0ZSB0byBub3QgbW9kaWZ5IGFueSBtZXRob2QKICAgICAgICAgQ2xhc3NXcml0ZXIgY3cgPSBuZXcgQ2xhc3NXcml0ZXIoMCAvKmZsYWdzKi8pOwogCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgIFN0cmluZyBpbnRlcm5hbENsYXNzTmFtZSA9IE5BVElWRV9DTEFTU19OQU1FLnJlcGxhY2UoJy4nLCAnLycpOwogICAgICAgICBEZWxlZ2F0ZUNsYXNzQWRhcHRlciBjdiA9IG5ldyBEZWxlZ2F0ZUNsYXNzQWRhcHRlcigKICAgICAgICAgICAgICAgICBtTG9nLCBjdywgaW50ZXJuYWxDbGFzc05hbWUsIGRlbGVnYXRlTWV0aG9kcyk7CkBAIC0xNTIsNyArMTUyLDcgQEAKIAogICAgICAgICBTdHJpbmcgaW50ZXJuYWxDbGFzc05hbWUgPSBOQVRJVkVfQ0xBU1NfTkFNRS5yZXBsYWNlKCcuJywgJy8nKTsKIAotICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gZGVsZWdhdGVNZXRob2RzID0gbmV3IEhhc2hTZXQ8PigpOwogICAgICAgICBkZWxlZ2F0ZU1ldGhvZHMuYWRkKCI8aW5pdD4iKTsKICAgICAgICAgRGVsZWdhdGVDbGFzc0FkYXB0ZXIgY3YgPSBuZXcgRGVsZWdhdGVDbGFzc0FkYXB0ZXIoCiAgICAgICAgICAgICAgICAgbUxvZywgY3csIGludGVybmFsQ2xhc3NOYW1lLCBkZWxlZ2F0ZU1ldGhvZHMpOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgIENsYXNzV3JpdGVyIGN3ID0gbmV3IENsYXNzV3JpdGVyKDAgLypmbGFncyovKTsKICAgICAgICAgU3RyaW5nIGludGVybmFsQ2xhc3NOYW1lID0gTkFUSVZFX0NMQVNTX05BTUUucmVwbGFjZSgnLicsICcvJyk7CiAKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGRlbGVnYXRlTWV0aG9kcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKyAgICAgICAgSGFzaFNldDxTdHJpbmc+IGRlbGVnYXRlTWV0aG9kcyA9IG5ldyBIYXNoU2V0PD4oKTsKICAgICAgICAgZGVsZWdhdGVNZXRob2RzLmFkZChEZWxlZ2F0ZUNsYXNzQWRhcHRlci5BTExfTkFUSVZFUyk7CiAgICAgICAgIERlbGVnYXRlQ2xhc3NBZGFwdGVyIGN2ID0gbmV3IERlbGVnYXRlQ2xhc3NBZGFwdGVyKAogICAgICAgICAgICAgICAgIG1Mb2csIGN3LCBpbnRlcm5hbENsYXNzTmFtZSwgZGVsZWdhdGVNZXRob2RzKTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdERlbGVnYXRlSW5uZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgLy8gV2UnbGwgZGVsZWdhdGUgdGhlICJnZXQiIG1ldGhvZCBvZiBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgY2xhc3MuCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgIGRlbGVnYXRlTWV0aG9kcy5hZGQoImdldCIpOwogICAgICAgICBkZWxlZ2F0ZU1ldGhvZHMuYWRkKCJwcml2YXRlTWV0aG9kIik7CiAKQEAgLTMwMCw3ICszMDAsNyBAQAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdERlbGVnYXRlU3RhdGljSW5uZXIoKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgLy8gV2UnbGwgZGVsZWdhdGUgdGhlICJnZXQiIG1ldGhvZCBvZiBib3RoIHRoZSBpbm5lciBhbmQgb3V0ZXIgY2xhc3MuCi0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBkZWxlZ2F0ZU1ldGhvZHMgPSBuZXcgSGFzaFNldDw+KCk7CiAgICAgICAgIGRlbGVnYXRlTWV0aG9kcy5hZGQoImdldCIpOwogCiAgICAgICAgIC8vIEdlbmVyYXRlIHRoZSBkZWxlZ2F0ZSBmb3IgdGhlIG91dGVyIGNsYXNzLgpAQCAtMzY3LDcgKzM2Nyw3IEBACiAgICAgICovCiAgICAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBDbGFzc0xvYWRlcjIgZXh0ZW5kcyBDbGFzc0xvYWRlciB7CiAKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBieXRlW10+IG1DbGFzc0RlZnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIGJ5dGVbXT4oKTsKKyAgICAgICAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBieXRlW10+IG1DbGFzc0RlZnMgPSBuZXcgSGFzaE1hcDw+KCk7CiAKICAgICAgICAgcHVibGljIENsYXNzTG9hZGVyMigpIHsKICAgICAgICAgICAgIHN1cGVyKG51bGwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvQW5kcm9pZC5tayBiL3Rvb2xzL3ByZWxvYWQyL0FuZHJvaWQubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkMjhmYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL0FuZHJvaWQubWsKQEAgLTAsMCArMSwzMiBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChjYWxsIGFsbC1qYXZhLWZpbGVzLXVuZGVyLHNyYykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworCisjIFRvIGNvbm5lY3QgdG8gZGV2aWNlcyAoYW5kIHRha2UgaHByb2YgZHVtcHMpLgorTE9DQUxfU1RBVElDX0pBVkFfTElCUkFSSUVTIDo9IGRkbWxpYi1wcmVidWlsdAorCisjIFRvIHByb2Nlc3MgaHByb2YgZHVtcHMuCitMT0NBTF9TVEFUSUNfSkFWQV9MSUJSQVJJRVMgKz0gcGVyZmxpYi1wcmVidWlsdCB0cm92ZS1wcmVidWlsdCBndWF2YWxpYgorCisjIEZvciBKRFdQIGFjY2VzcyB3ZSB1c2UgdGhlIGZyYW1ld29yayBpbiB0aGUgSkRXUCB0ZXN0cyBmcm9tIEFwYWNoZSBIYXJtb255LCBmb3IKKyMgY29udmVuaWVuY2UgKGFuZCB0byBub3QgZGVwZW5kIG9uIGludGVybmFsIEpESyBBUElzKS4KK0xPQ0FMX1NUQVRJQ19KQVZBX0xJQlJBUklFUyArPSBhcGFjaGUtaGFybW9ueS1qZHdwLXRlc3RzLWhvc3QganVuaXQKKworTE9DQUxfTU9EVUxFOj0gcHJlbG9hZDIKKworaW5jbHVkZSAkKEJVSUxEX0hPU1RfSkFWQV9MSUJSQVJZKQorCisjIENvcHkgdGhlIHByZWxvYWQtdG9vbCBzaGVsbCBzY3JpcHQgdG8gdGhlIGhvc3QncyBiaW4gZGlyZWN0b3J5LgoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9JU19IT1NUX01PRFVMRSA6PSB0cnVlCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVYRUNVVEFCTEVTCitMT0NBTF9NT0RVTEUgOj0gcHJlbG9hZC10b29sCitpbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCiskKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvcHJlbG9hZC10b29sICQoQUNQKQorCUBlY2hvICJDb3B5OiAkKFBSSVZBVEVfTU9EVUxFKSAoJEApIgorCSQoY29weS1maWxlLXRvLW5ldy10YXJnZXQpCisJJChoaWRlKSBjaG1vZCA3NTUgJEAKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3ByZWxvYWQtdG9vbCBiL3Rvb2xzL3ByZWxvYWQyL3ByZWxvYWQtdG9vbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmRiYzFjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvcHJlbG9hZC10b29sCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIG9uIHRoZSBob3N0IG9ubHkuIEl0IHVzZXMgYSBjb21tb24gc3Vic2V0CisjIHNoZWxsIGRpYWxlY3QgdGhhdCBzaG91bGQgd29yayB3ZWxsLiBJdCBpcyBwYXJ0aWFsbHkgZGVyaXZlZAorIyBmcm9tIGFydC90b29scy9hcnQuCisKK2Z1bmN0aW9uIGZvbGxvd19saW5rcygpIHsKKyAgaWYgWyB6IiRCQVNIX1NPVVJDRSIgIT0geiBdOyB0aGVuCisgICAgZmlsZT0iJEJBU0hfU09VUkNFIgorICBlbHNlCisgICAgZmlsZT0iJDAiCisgIGZpCisgIHdoaWxlIFsgLWggIiRmaWxlIiBdOyBkbworICAgICMgT24gTWFjIE9TLCByZWFkbGluayAtZiBkb2Vzbid0IHdvcmsuCisgICAgZmlsZT0iJChyZWFkbGluayAiJGZpbGUiKSIKKyAgZG9uZQorICBlY2hvICIkZmlsZSIKK30KKworCitQUk9HX05BTUU9IiQoZm9sbG93X2xpbmtzKSIKK1BST0dfRElSPSIkKGNkICIke1BST0dfTkFNRSUvKn0iIDsgcHdkIC1QKSIKK0FORFJPSURfUk9PVD0kUFJPR19ESVIvLi4KKworamF2YSAtY3AgJEFORFJPSURfUk9PVC9mcmFtZXdvcmsvcHJlbG9hZDIuamFyIGNvbS5hbmRyb2lkLnByZWxvYWQuTWFpbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvQ2xpZW50VXRpbHMuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0NsaWVudFV0aWxzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFlZjAyNQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0NsaWVudFV0aWxzLmphdmEKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQW5kcm9pZERlYnVnQnJpZGdlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5BbmRyb2lkRGVidWdCcmlkZ2UuSUNsaWVudENoYW5nZUxpc3RlbmVyOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5DbGllbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLklEZXZpY2U7CisKKy8qKgorICogSGVscGVyIGNsYXNzIGZvciBjb21tb24gY29tbXVuaWNhdGlvbiB3aXRoIGEgQ2xpZW50ICh0aGUgZGRtcyBuYW1lIGZvciBhIHJ1bm5pbmcgYXBwbGljYXRpb24pLgorICoKKyAqIEluc3RhbmNlcyB0YWtlIGEgZGVmYXVsdCB0aW1lb3V0IHBhcmFtZXRlciB0aGF0J3MgYXBwbGllZCB0byBhbGwgZnVuY3Rpb25zIHdpdGhvdXQgZXhwbGljaXQKKyAqIHRpbWVvdXQuIFRpbWVvdXRzIGFyZSBpbiBtaWxsaXNlY29uZHMuCisgKi8KK3B1YmxpYyBjbGFzcyBDbGllbnRVdGlscyB7CisKKyAgICBwcml2YXRlIGludCBkZWZhdWx0VGltZW91dDsKKworICAgIHB1YmxpYyBDbGllbnRVdGlscygpIHsKKyAgICAgICAgdGhpcygxMDAwMCk7CisgICAgfQorCisgICAgcHVibGljIENsaWVudFV0aWxzKGludCBkZWZhdWx0VGltZW91dCkgeworICAgICAgICB0aGlzLmRlZmF1bHRUaW1lb3V0ID0gZGVmYXVsdFRpbWVvdXQ7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2hvcnRjdXQgZm9yIGZpbmRDbGllbnQgd2l0aCBkZWZhdWx0IHRpbWVvdXQuCisgICAgICovCisgICAgcHVibGljIENsaWVudCBmaW5kQ2xpZW50KElEZXZpY2UgZGV2aWNlLCBTdHJpbmcgcHJvY2Vzc05hbWUsIGludCBwcm9jZXNzUGlkKSB7CisgICAgICAgIHJldHVybiBmaW5kQ2xpZW50KGRldmljZSwgcHJvY2Vzc05hbWUsIHByb2Nlc3NQaWQsIGRlZmF1bHRUaW1lb3V0KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBGaW5kIHRoZSBjbGllbnQgd2l0aCB0aGUgZ2l2ZW4gcHJvY2VzcyBuYW1lIG9yIHByb2Nlc3MgaWQuIFRoZSBuYW1lIHRha2VzIHByZWNlZGVuY2Ugb3ZlcgorICAgICAqIHRoZSBwcm9jZXNzIGlkIChpZiB2YWxpZCkuIFN0b3AgbG9va2luZyBhZnRlciB0aGUgZ2l2ZW4gdGltZW91dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB0byBjb21tdW5pY2F0ZSB3aXRoLgorICAgICAqIEBwYXJhbSBwcm9jZXNzTmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvY2Vzcy4gTWF5IGJlIG51bGwuCisgICAgICogQHBhcmFtIHByb2Nlc3NQaWQgVGhlIHBpZCBvZiB0aGUgcHJvY2Vzcy4gVmFsdWVzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvIGFyZSBpZ25vcmVkLgorICAgICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQsIGF0IG1vc3QuCisgICAgICogQHJldHVybiBUaGUgY2xpZW50LCBpZiBmb3VuZC4gT3RoZXJ3aXNlIG51bGwuCisgICAgICovCisgICAgcHVibGljIENsaWVudCBmaW5kQ2xpZW50KElEZXZpY2UgZGV2aWNlLCBTdHJpbmcgcHJvY2Vzc05hbWUsIGludCBwcm9jZXNzUGlkLCBpbnQgdGltZW91dCkgeworICAgICAgICBXYWl0Rm9yQ2xpZW50IHdmYyA9IG5ldyBXYWl0Rm9yQ2xpZW50KGRldmljZSwgcHJvY2Vzc05hbWUsIHByb2Nlc3NQaWQsIHRpbWVvdXQpOworICAgICAgICByZXR1cm4gd2ZjLmdldCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNob3J0Y3V0IGZvciBmaW5kQWxsQ2xpZW50cyB3aXRoIGRlZmF1bHQgdGltZW91dC4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2xpZW50W10gZmluZEFsbENsaWVudHMoSURldmljZSBkZXZpY2UpIHsKKyAgICAgICAgcmV0dXJuIGZpbmRBbGxDbGllbnRzKGRldmljZSwgZGVmYXVsdFRpbWVvdXQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlIGFsbCBjbGllbnRzIGtub3duIHRvIHRoZSBnaXZlbiBkZXZpY2UuIFdhaXQgYXQgbW9zdCB0aGUgZ2l2ZW4gdGltZW91dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB0byBpbnZlc3RpZ2F0ZS4KKyAgICAgKiBAcGFyYW0gdGltZW91dCBUaGUgYW1vdW50IG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0LCBhdCBtb3N0LgorICAgICAqIEByZXR1cm4gQW4gYXJyYXkgb2YgY2xpZW50cyBydW5uaW5nIG9uIHRoZSBnaXZlbiBkZXZpY2UuIE1heSBiZSBudWxsIGRlcGVuZGluZyBvbiB0aGUKKyAgICAgKiAgICAgICAgIGRldmljZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2xpZW50W10gZmluZEFsbENsaWVudHMoSURldmljZSBkZXZpY2UsIGludCB0aW1lb3V0KSB7CisgICAgICAgIGlmIChkZXZpY2UuaGFzQ2xpZW50cygpKSB7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmdldENsaWVudHMoKTsKKyAgICAgICAgfQorICAgICAgICBXYWl0Rm9yQ2xpZW50cyB3ZmMgPSBuZXcgV2FpdEZvckNsaWVudHMoZGV2aWNlLCB0aW1lb3V0KTsKKyAgICAgICAgcmV0dXJuIHdmYy5nZXQoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXYWl0Rm9yQ2xpZW50IGltcGxlbWVudHMgSUNsaWVudENoYW5nZUxpc3RlbmVyIHsKKworICAgICAgICBwcml2YXRlIElEZXZpY2UgZGV2aWNlOworICAgICAgICBwcml2YXRlIFN0cmluZyBwcm9jZXNzTmFtZTsKKyAgICAgICAgcHJpdmF0ZSBpbnQgcHJvY2Vzc1BpZDsKKyAgICAgICAgcHJpdmF0ZSBsb25nIHRpbWVvdXQ7CisgICAgICAgIHByaXZhdGUgQ2xpZW50IHJlc3VsdDsKKworICAgICAgICBwdWJsaWMgV2FpdEZvckNsaWVudChJRGV2aWNlIGRldmljZSwgU3RyaW5nIHByb2Nlc3NOYW1lLCBpbnQgcHJvY2Vzc1BpZCwgbG9uZyB0aW1lb3V0KSB7CisgICAgICAgICAgICB0aGlzLmRldmljZSA9IGRldmljZTsKKyAgICAgICAgICAgIHRoaXMucHJvY2Vzc05hbWUgPSBwcm9jZXNzTmFtZTsKKyAgICAgICAgICAgIHRoaXMucHJvY2Vzc1BpZCA9IHByb2Nlc3NQaWQ7CisgICAgICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0OworICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIENsaWVudCBnZXQoKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UuYWRkQ2xpZW50Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKyAgICAgICAgICAgICAgICAvLyBNYXliZSBpdCdzIGFscmVhZHkgdGhlcmUuCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlYXJjaEZvckNsaWVudChkZXZpY2UpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCh0aW1lb3V0KTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogZG9lc24ndCBndWFyZCBmb3Igc3B1cmlvdXMgd2FrZXVwLgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UucmVtb3ZlQ2xpZW50Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgc2VhcmNoRm9yQ2xpZW50KElEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgICAgICBpZiAocHJvY2Vzc05hbWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIENsaWVudCB0bXAgPSBkZXZpY2UuZ2V0Q2xpZW50KHByb2Nlc3NOYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvY2Vzc1BpZCA+IDApIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGRldmljZS5nZXRDbGllbnROYW1lKHByb2Nlc3NQaWQpOworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIW5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIENsaWVudCB0bXAgPSBkZXZpY2UuZ2V0Q2xpZW50KG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvY2Vzc1BpZCA+IDApIHsKKyAgICAgICAgICAgICAgICAvLyBUcnkgbWFudWFsIHNlYXJjaC4KKyAgICAgICAgICAgICAgICBmb3IgKENsaWVudCBjbCA6IGRldmljZS5nZXRDbGllbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsLmdldENsaWVudERhdGEoKS5nZXRQaWQoKSA9PSBwcm9jZXNzUGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2wuZ2V0Q2xpZW50RGF0YSgpLmdldENsaWVudERlc2NyaXB0aW9uKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNUYXJnZXRDbGllbnQoQ2xpZW50IGMpIHsKKyAgICAgICAgICAgIGlmIChwcm9jZXNzUGlkID4gMCAmJiBjLmdldENsaWVudERhdGEoKS5nZXRQaWQoKSA9PSBwcm9jZXNzUGlkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJvY2Vzc05hbWUgIT0gbnVsbAorICAgICAgICAgICAgICAgICAgICAmJiBwcm9jZXNzTmFtZS5lcXVhbHMoYy5nZXRDbGllbnREYXRhKCkuZ2V0Q2xpZW50RGVzY3JpcHRpb24oKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBjbGllbnRDaGFuZ2VkKENsaWVudCBhcmcwLCBpbnQgYXJnMSkgeworICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICAgICAgaWYgKChhcmcxICYgQ2xpZW50LkNIQU5HRV9JTkZPKSAhPSAwICYmIChhcmcwLmdldERldmljZSgpID09IGRldmljZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzVGFyZ2V0Q2xpZW50KGFyZzApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhcmcwOworICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBXYWl0Rm9yQ2xpZW50cyBpbXBsZW1lbnRzIElDbGllbnRDaGFuZ2VMaXN0ZW5lciB7CisKKyAgICAgICAgcHJpdmF0ZSBJRGV2aWNlIGRldmljZTsKKyAgICAgICAgcHJpdmF0ZSBsb25nIHRpbWVvdXQ7CisKKyAgICAgICAgcHVibGljIFdhaXRGb3JDbGllbnRzKElEZXZpY2UgZGV2aWNlLCBsb25nIHRpbWVvdXQpIHsKKyAgICAgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOworICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBDbGllbnRbXSBnZXQoKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UuYWRkQ2xpZW50Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKyAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLmhhc0NsaWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmdldENsaWVudHMoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB3YWl0KHRpbWVvdXQpOyAvLyBOb3RlOiBkb2Vzbid0IGd1YXJkIGZvciBzcHVyaW91cyB3YWtldXAuCisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBiZSB3b2tlbiB1cCB3aGVuIHRoZSBmaXJzdCBjbGllbnQgZGF0YSBhcnJpdmVzLiBTbGVlcCBhIGxpdHRsZSBsb25nZXIKKyAgICAgICAgICAgICAgICAvLyB0byBnaXZlIChob3BlZnVsbHkgYWxsIG9mKSB0aGUgcmVzdCBvZiB0aGUgY2xpZW50cyBhIGNoYW5jZSB0byBiZWNvbWUgYXZhaWxhYmxlLgorICAgICAgICAgICAgICAgIC8vIE5vdGU6IGEgbG9vcCB3aXRoIHRpbWVvdXQgaXMgYnJpdHRsZSBhcyB3ZWxsIGFuZCBjb21wbGljYXRlZCwganVzdCBhY2NlcHQgdGhpcworICAgICAgICAgICAgICAgIC8vICAgICAgIGZvciBub3cuCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgVGhyZWFkLnNsZWVwKDUwMCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UucmVtb3ZlQ2xpZW50Q2hhbmdlTGlzdGVuZXIodGhpcyk7CisKKyAgICAgICAgICAgIHJldHVybiBkZXZpY2UuZ2V0Q2xpZW50cygpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGNsaWVudENoYW5nZWQoQ2xpZW50IGFyZzAsIGludCBhcmcxKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGFyZzEgJiBDbGllbnQuQ0hBTkdFX0lORk8pICE9IDAgJiYgKGFyZzAuZ2V0RGV2aWNlKCkgPT0gZGV2aWNlKSkgeworICAgICAgICAgICAgICAgICAgICBub3RpZnlBbGwoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9EZXZpY2VVdGlscy5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRGV2aWNlVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRlN2I1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRGV2aWNlVXRpbHMuamF2YQpAQCAtMCwwICsxLDM5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZDsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5BbmRyb2lkRGVidWdCcmlkZ2U7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkFuZHJvaWREZWJ1Z0JyaWRnZS5JRGV2aWNlQ2hhbmdlTGlzdGVuZXI7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5jbGFzc2RhdGFyZXRyaWV2YWwuaHByb2YuSHByb2Y7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkRkbVByZWZlcmVuY2VzOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5JRGV2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5JU2hlbGxPdXRwdXRSZWNlaXZlcjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKKworLyoqCisgKiBIZWxwZXIgY2xhc3MgZm9yIHNvbWUgZGV2aWNlIHJvdXRpbmVzLgorICovCitwdWJsaWMgY2xhc3MgRGV2aWNlVXRpbHMgeworCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0KGludCBkZWJ1Z1BvcnQpIHsKKyAgICBEZG1QcmVmZXJlbmNlcy5zZXRTZWxlY3RlZERlYnVnUG9ydChkZWJ1Z1BvcnQpOworCisgICAgSHByb2YuaW5pdCgpOworCisgICAgQW5kcm9pZERlYnVnQnJpZGdlLmluaXQodHJ1ZSk7CisKKyAgICBBbmRyb2lkRGVidWdCcmlkZ2UuY3JlYXRlQnJpZGdlKCk7CisgIH0KKworICAvKioKKyAgICogUnVuIGEgY29tbWFuZCBpbiB0aGUgc2hlbGwgb24gdGhlIGRldmljZS4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBkb1NoZWxsKElEZXZpY2UgZGV2aWNlLCBTdHJpbmcgY21kbGluZSwgbG9uZyB0aW1lb3V0LCBUaW1lVW5pdCB1bml0KSB7CisgICAgZG9TaGVsbChkZXZpY2UsIGNtZGxpbmUsIG5ldyBOdWxsU2hlbGxPdXRwdXRSZWNlaXZlcigpLCB0aW1lb3V0LCB1bml0KTsKKyAgfQorCisgIC8qKgorICAgKiBSdW4gYSBjb21tYW5kIGluIHRoZSBzaGVsbCBvbiB0aGUgZGV2aWNlLiBDb2xsZWN0cyBhbmQgcmV0dXJucyB0aGUgY29uc29sZSBvdXRwdXQuCisgICAqLworICBwdWJsaWMgc3RhdGljIFN0cmluZyBkb1NoZWxsUmV0dXJuU3RyaW5nKElEZXZpY2UgZGV2aWNlLCBTdHJpbmcgY21kbGluZSwgbG9uZyB0aW1lb3V0LAorICAgICAgVGltZVVuaXQgdW5pdCkgeworICAgIENvbGxlY3RTdHJpbmdTaGVsbE91dHB1dFJlY2VpdmVyIHJlYyA9IG5ldyBDb2xsZWN0U3RyaW5nU2hlbGxPdXRwdXRSZWNlaXZlcigpOworICAgIGRvU2hlbGwoZGV2aWNlLCBjbWRsaW5lLCByZWMsIHRpbWVvdXQsIHVuaXQpOworICAgIHJldHVybiByZWMudG9TdHJpbmcoKTsKKyAgfQorCisgIC8qKgorICAgKiBSdW4gYSBjb21tYW5kIGluIHRoZSBzaGVsbCBvbiB0aGUgZGV2aWNlLCBkaXJlY3RpbmcgYWxsIG91dHB1dCB0byB0aGUgZ2l2ZW4gcmVjZWl2ZXIuCisgICAqLworICBwdWJsaWMgc3RhdGljIHZvaWQgZG9TaGVsbChJRGV2aWNlIGRldmljZSwgU3RyaW5nIGNtZGxpbmUsIElTaGVsbE91dHB1dFJlY2VpdmVyIHJlY2VpdmVyLAorICAgICAgbG9uZyB0aW1lb3V0LCBUaW1lVW5pdCB1bml0KSB7CisgICAgdHJ5IHsKKyAgICAgIGRldmljZS5leGVjdXRlU2hlbGxDb21tYW5kKGNtZGxpbmUsIHJlY2VpdmVyLCB0aW1lb3V0LCB1bml0KTsKKyAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogUnVuIGFtIHN0YXJ0IG9uIHRoZSBkZXZpY2UuCisgICAqLworICBwdWJsaWMgc3RhdGljIHZvaWQgZG9BTVN0YXJ0KElEZXZpY2UgZGV2aWNlLCBTdHJpbmcgbmFtZSwgU3RyaW5nIGFjdGl2aXR5KSB7CisgICAgZG9TaGVsbChkZXZpY2UsICJhbSBzdGFydCAtbiAiICsgbmFtZSArICIgLy4iICsgYWN0aXZpdHksIDMwLCBUaW1lVW5pdC5TRUNPTkRTKTsKKyAgfQorCisgIC8qKgorICAgKiBGaW5kIHRoZSBkZXZpY2Ugd2l0aCB0aGUgZ2l2ZW4gc2VyaWFsLiBHaXZlIHVwIGFmdGVyIHRoZSBnaXZlbiB0aW1lb3V0IChpbiBtaWxsaXNlY29uZHMpLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBJRGV2aWNlIGZpbmREZXZpY2UoU3RyaW5nIHNlcmlhbCwgaW50IHRpbWVvdXQpIHsKKyAgICBXYWl0Rm9yRGV2aWNlIHdmZCA9IG5ldyBXYWl0Rm9yRGV2aWNlKHNlcmlhbCwgdGltZW91dCk7CisgICAgcmV0dXJuIHdmZC5nZXQoKTsKKyAgfQorCisgIC8qKgorICAgKiBHZXQgYWxsIGRldmljZXMgZGRtcyBrbm93cyBhYm91dC4gV2FpdCBhdCBtb3N0IGZvciB0aGUgZ2l2ZW4gdGltZW91dC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgSURldmljZVtdIGZpbmREZXZpY2VzKGludCB0aW1lb3V0KSB7CisgICAgV2FpdEZvckRldmljZSB3ZmQgPSBuZXcgV2FpdEZvckRldmljZShudWxsLCB0aW1lb3V0KTsKKyAgICB3ZmQuZ2V0KCk7CisgICAgcmV0dXJuIEFuZHJvaWREZWJ1Z0JyaWRnZS5nZXRCcmlkZ2UoKS5nZXREZXZpY2VzKCk7CisgIH0KKworICAvKioKKyAgICogUmV0dXJuIHRoZSBidWlsZCB0eXBlIG9mIHRoZSBnaXZlbiBkZXZpY2UuIFRoaXMgaXMgdGhlIHZhbHVlIG9mIHRoZSAicm8uYnVpbGQudHlwZSIKKyAgICogc3lzdGVtIHByb3BlcnR5LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnVpbGRUeXBlKElEZXZpY2UgZGV2aWNlKSB7CisgICAgdHJ5IHsKKyAgICAgIEZ1dHVyZTxTdHJpbmc+IGJ1aWxkVHlwZSA9IGRldmljZS5nZXRTeXN0ZW1Qcm9wZXJ0eSgicm8uYnVpbGQudHlwZSIpOworICAgICAgcmV0dXJuIGJ1aWxkVHlwZS5nZXQoNTAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgfQorICAgIHJldHVybiBudWxsOworICB9CisKKyAgLyoqCisgICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGRldmljZSBoYXMgYSBwcmUtb3B0aW1pemVkIGJvb3QgaW1hZ2UuIE1vcmUgcHJlY2lzZWx5LCBjaGVja3MKKyAgICogd2hldGhlciAvc3lzdGVtL2ZyYW1ld29yay8gKiAvYm9vdC5hcnQgZXhpc3RzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1ByZWJ1aWx0Qm9vdEltYWdlKElEZXZpY2UgZGV2aWNlKSB7CisgICAgU3RyaW5nIHJldCA9CisgICAgICAgIGRvU2hlbGxSZXR1cm5TdHJpbmcoZGV2aWNlLCAibHMgL3N5c3RlbS9mcmFtZXdvcmsvKi9ib290LmFydCIsIDUwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgIHJldHVybiAhcmV0LmNvbnRhaW5zKCJObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Iik7CisgIH0KKworICAvKioKKyAgICogUmVtb3ZlIGZpbGVzIGludm9sdmVkIGluIGEgc3RhbmRhcmQgYnVpbGQgdGhhdCBpbnRlcmZlcmUgd2l0aCBjb2xsZWN0aW5nIGRhdGEuIFRoaXMgd2lsbAorICAgKiByZW1vdmUgL2V0Yy9wcmVsb2FkZWQtY2xhc3Nlcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaCBjbGFzc2VzIGFyZSBhbGxvY2F0ZWQgYWxyZWFkeSBpbiB0aGUKKyAgICogYm9vdCBpbWFnZS4gSXQgYWxzbyBkZWxldGVzIGFueSBjb21waWxlZCBib290IGltYWdlIG9uIHRoZSBkZXZpY2UuIFRoZW4gaXQgcmVzdGFydHMgdGhlCisgICAqIGRldmljZS4KKyAgICoKKyAgICogVGhpcyBpcyBhIHBvdGVudGlhbGx5IGxvbmctcnVubmluZyBvcGVyYXRpb24sIGFzIHRoZSBib290IGFmdGVyIHRoZSBkZWxldGlvbiBtYXkgdGFrZSBhIHdoaWxlLgorICAgKiBUaGUgbWV0aG9kIHdpbGwgYWJvcnQgYWZ0ZXIgdGhlIGdpdmVuIHRpbWVvdXQuCisgICAqLworICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVtb3ZlUHJlbG9hZGVkKElEZXZpY2UgZGV2aWNlLCBsb25nIHByZWxvYWRlZFdhaXRUaW1lSW5TZWNvbmRzKSB7CisgICAgU3RyaW5nIG9sZENvbnRlbnQgPQorICAgICAgICBEZXZpY2VVdGlscy5kb1NoZWxsUmV0dXJuU3RyaW5nKGRldmljZSwgImNhdCAvZXRjL3ByZWxvYWRlZC1jbGFzc2VzIiwgMSwgVGltZVVuaXQuU0VDT05EUyk7CisgICAgaWYgKG9sZENvbnRlbnQudHJpbSgpLmVxdWFscygiIikpIHsKKyAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJlbG9hZGVkLWNsYXNzZXMgYWxyZWFkeSBlbXB0eS4iKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFN0b3AgdGhlIHN5c3RlbSBzZXJ2ZXIgZXRjLgorICAgIGRvU2hlbGwoZGV2aWNlLCAic3RvcCIsIDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgIC8vIFJlbW91bnQgL3N5c3RlbSwgZGVsZXRlIC9ldGMvcHJlbG9hZGVkLWNsYXNzZXMuIEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlICJhZGIgcmVtb3VudCwiCisgICAgLy8gYnV0IEFuZHJvaWREZWJ1Z0JyaWRnZSBkb2Vzbid0IGV4cG9zZSBpdC4KKyAgICBkb1NoZWxsKGRldmljZSwgIm1vdW50IC1vIHJlbW91bnQscncgL3N5c3RlbSIsIDUwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICBkb1NoZWxsKGRldmljZSwgInJtIC9ldGMvcHJlbG9hZGVkLWNsYXNzZXMiLCAxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgLy8gV2UgZG8gbmVlZCBhbiBlbXB0eSBmaWxlLgorICAgIGRvU2hlbGwoZGV2aWNlLCAidG91Y2ggL2V0Yy9wcmVsb2FkZWQtY2xhc3NlcyIsIDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgIC8vIERlbGV0ZSB0aGUgZmlsZXMgaW4gdGhlIGRhbHZpayBjYWNoZS4KKyAgICBkb1NoZWxsKGRldmljZSwgInJtIC9kYXRhL2RhbHZpay1jYWNoZS8qLypib290LmFydCIsIDUwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgIC8vIFdlJ2xsIHRyeSB0byB1c2UgZGV2LmJvb3Rjb21wbGV0ZSB0byBrbm93IHdoZW4gdGhlIHN5c3RlbSBzZXJ2ZXIgaXMgYmFjayB1cC4gQnV0IHN0b3AKKyAgICAvLyBkb2Vzbid0IHJlc2V0IGl0LCBzbyBkbyBpdCBtYW51YWxseS4KKyAgICBkb1NoZWxsKGRldmljZSwgInNldHByb3AgZGV2LmJvb3Rjb21wbGV0ZSBcIjBcIiIsIDUwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKworICAgIC8vIFN0YXJ0IHRoZSBzeXN0ZW0gc2VydmVyLgorICAgIGRvU2hlbGwoZGV2aWNlLCAic3RhcnQiLCAxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisKKyAgICAvLyBEbyBhIGxvb3AgY2hlY2tpbmcgZWFjaCBzZWNvbmQgd2hldGhlciBib290Y29tcGxldGUuIFdhaXQgZm9yIGF0IG1vc3QgdGhlIGdpdmVuCisgICAgLy8gdGhyZXNob2xkLgorICAgIERhdGUgc3RhcnREYXRlID0gbmV3IERhdGUoKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICB0cnkgeworICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgIC8vIElnbm9yZSBzcHVyaW91cyB3YWtldXAuCisgICAgICB9CisgICAgICAvLyBDaGVjayB3aGV0aGVyIGJvb3Rjb21wbGV0ZS4KKyAgICAgIFN0cmluZyByZXQgPQorICAgICAgICAgIGRvU2hlbGxSZXR1cm5TdHJpbmcoZGV2aWNlLCAiZ2V0cHJvcCBkZXYuYm9vdGNvbXBsZXRlIiwgNTAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOworICAgICAgaWYgKHJldC50cmltKCkuZXF1YWxzKCIxIikpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0aWxsIG5vdCBib290ZWQ6ICIgKyByZXQpOworCisgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIHRpbWVkIG91dC4gVGhpcyBpcyBhIHNpbXBsaXN0aWMgY2hlY2sgdGhhdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50CisgICAgICAvLyB0aGluZ3MgbGlrZSBzd2l0Y2hlcyBpbiB0aW1lLgorICAgICAgRGF0ZSBlbmREYXRlID0gbmV3IERhdGUoKTsKKyAgICAgIGxvbmcgc2Vjb25kcyA9CisgICAgICAgICAgVGltZVVuaXQuU0VDT05EUy5jb252ZXJ0KGVuZERhdGUuZ2V0VGltZSgpIC0gc3RhcnREYXRlLmdldFRpbWUoKSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICAgIGlmIChzZWNvbmRzID4gcHJlbG9hZGVkV2FpdFRpbWVJblNlY29uZHMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgLyoqCisgICAqIEVuYWJsZSBtZXRob2QtdHJhY2luZyBvbiBkZXZpY2UuIFRoZSBzeXN0ZW0gc2hvdWxkIGJlIHJlc3RhcnRlZCBhZnRlciB0aGlzLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyB2b2lkIGVuYWJsZVRyYWNpbmcoSURldmljZSBkZXZpY2UpIHsKKyAgICAvLyBEaXNhYmxlIHNlbGludXguCisgICAgZG9TaGVsbChkZXZpY2UsICJzZXRlbmZvcmNlIDAiLCAxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisKKyAgICAvLyBNYWtlIHRoZSBwcm9maWxlIGRpcmVjdG9yeSB3b3JsZC13cml0YWJsZS4KKyAgICBkb1NoZWxsKGRldmljZSwgImNobW9kIDc3NyAvZGF0YS9kYWx2aWstY2FjaGUvcHJvZmlsZXMiLCAxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisKKyAgICAvLyBFbmFibGUgc3RyZWFtaW5nIG1ldGhvZCB0cmFjaW5nIHdpdGggYSBzbWFsbCAxSyBidWZmZXIuCisgICAgZG9TaGVsbChkZXZpY2UsICJzZXRwcm9wIGRhbHZpay52bS5tZXRob2QtdHJhY2UgdHJ1ZSIsIDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICBkb1NoZWxsKGRldmljZSwgInNldHByb3AgZGFsdmlrLnZtLm1ldGhvZC10cmFjZS1maWxlICIKKyAgICAgICAgICAgICAgICAgICAgKyAiL2RhdGEvZGFsdmlrLWNhY2hlL3Byb2ZpbGVzL3p5Z290ZS50cmFjZS5iaW4iLCAxMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7CisgICAgZG9TaGVsbChkZXZpY2UsICJzZXRwcm9wIGRhbHZpay52bS5tZXRob2QtdHJhY2UtZmlsZS1zaXogMTAyNCIsIDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgICBkb1NoZWxsKGRldmljZSwgInNldHByb3AgZGFsdmlrLnZtLm1ldGhvZC10cmFjZS1zdHJlYW0gdHJ1ZSIsIDEwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIE51bGxTaGVsbE91dHB1dFJlY2VpdmVyIGltcGxlbWVudHMgSVNoZWxsT3V0cHV0UmVjZWl2ZXIgeworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGZsdXNoKCkge30KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFkZE91dHB1dChieXRlW10gYXJnMCwgaW50IGFyZzEsIGludCBhcmcyKSB7fQorICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ29sbGVjdFN0cmluZ1NoZWxsT3V0cHV0UmVjZWl2ZXIgaW1wbGVtZW50cyBJU2hlbGxPdXRwdXRSZWNlaXZlciB7CisKKyAgICBwcml2YXRlIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgU3RyaW5nIHJldCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgIC8vIFN0cmlwIHRyYWlsaW5nIG5ld2xpbmVzLiBUaGV5IGFyZSBlc3BlY2lhbGx5IHVnbHkgYmVjYXVzZSBhZGIgdXNlcyBET1MgbGluZSBlbmRpbmdzLgorICAgICAgd2hpbGUgKHJldC5lbmRzV2l0aCgiXHIiKSB8fCByZXQuZW5kc1dpdGgoIlxuIikpIHsKKyAgICAgICAgcmV0ID0gcmV0LnN1YnN0cmluZygwLCByZXQubGVuZ3RoKCkgLSAxKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYWRkT3V0cHV0KGJ5dGVbXSBhcmcwLCBpbnQgYXJnMSwgaW50IGFyZzIpIHsKKyAgICAgIGJ1aWxkZXIuYXBwZW5kKG5ldyBTdHJpbmcoYXJnMCwgYXJnMSwgYXJnMikpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGZsdXNoKCkge30KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGNsYXNzIFdhaXRGb3JEZXZpY2UgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgc2VyaWFsOworICAgIHByaXZhdGUgbG9uZyB0aW1lb3V0OworICAgIHByaXZhdGUgSURldmljZSBkZXZpY2U7CisKKyAgICBwdWJsaWMgV2FpdEZvckRldmljZShTdHJpbmcgc2VyaWFsLCBsb25nIHRpbWVvdXQpIHsKKyAgICAgIHRoaXMuc2VyaWFsID0gc2VyaWFsOworICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKKyAgICAgIGRldmljZSA9IG51bGw7CisgICAgfQorCisgICAgcHVibGljIElEZXZpY2UgZ2V0KCkgeworICAgICAgaWYgKGRldmljZSA9PSBudWxsKSB7CisgICAgICAgICAgV2FpdEZvckRldmljZUxpc3RlbmVyIHdmZGwgPSBuZXcgV2FpdEZvckRldmljZUxpc3RlbmVyKHNlcmlhbCk7CisgICAgICAgICAgc3luY2hyb25pemVkICh3ZmRsKSB7CisgICAgICAgICAgICAgIEFuZHJvaWREZWJ1Z0JyaWRnZS5hZGREZXZpY2VDaGFuZ2VMaXN0ZW5lcih3ZmRsKTsKKworICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHdlIGFscmVhZHkga25vdyBhYm91dCB0aGlzIGRldmljZS4KKyAgICAgICAgICAgICAgSURldmljZVtdIGRldmljZXMgPSBBbmRyb2lkRGVidWdCcmlkZ2UuZ2V0QnJpZGdlKCkuZ2V0RGV2aWNlcygpOworICAgICAgICAgICAgICBpZiAoc2VyaWFsICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIGZvciAoSURldmljZSBkIDogZGV2aWNlcykgeworICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXJpYWwuZXF1YWxzKGQuZ2V0U2VyaWFsTnVtYmVyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgYWNjZXB0IGlmIHRoZXJlIGFyZSBjbGllbnRzIGFscmVhZHkuIEVsc2Ugd2FpdCBmb3IgdGhlIGNhbGxiYWNrIGluZm9ybWluZworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB1cyB0aGF0IHdlIG5vdyBoYXZlIGNsaWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkLmhhc0NsaWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlID0gZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIGlmIChkZXZpY2VzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICBkZXZpY2UgPSBkZXZpY2VzWzBdOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKGRldmljZSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgIHdhaXQodGltZW91dCk7CisgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHNwdXJpb3VzIHdha2V1cHMuCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBkZXZpY2UgPSB3ZmRsLmdldERldmljZSgpOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgQW5kcm9pZERlYnVnQnJpZGdlLnJlbW92ZURldmljZUNoYW5nZUxpc3RlbmVyKHdmZGwpOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKGRldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgLy8gV2FpdCBmb3IgY2xpZW50cy4KKyAgICAgICAgICBXYWl0Rm9yQ2xpZW50c0xpc3RlbmVyIHdmY2wgPSBuZXcgV2FpdEZvckNsaWVudHNMaXN0ZW5lcihkZXZpY2UpOworICAgICAgICAgIHN5bmNocm9uaXplZCAod2ZjbCkgeworICAgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UuYWRkRGV2aWNlQ2hhbmdlTGlzdGVuZXIod2ZjbCk7CisKKyAgICAgICAgICAgICAgaWYgKCFkZXZpY2UuaGFzQ2xpZW50cygpKSB7CisgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgIHdhaXQodGltZW91dCk7CisgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHNwdXJpb3VzIHdha2V1cHMuCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBBbmRyb2lkRGVidWdCcmlkZ2UucmVtb3ZlRGV2aWNlQ2hhbmdlTGlzdGVuZXIod2ZjbCk7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICByZXR1cm4gZGV2aWNlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFdhaXRGb3JEZXZpY2VMaXN0ZW5lciBpbXBsZW1lbnRzIElEZXZpY2VDaGFuZ2VMaXN0ZW5lciB7CisKKyAgICAgICAgcHJpdmF0ZSBTdHJpbmcgc2VyaWFsOworICAgICAgICBwcml2YXRlIElEZXZpY2UgZGV2aWNlOworCisgICAgICAgIHB1YmxpYyBXYWl0Rm9yRGV2aWNlTGlzdGVuZXIoU3RyaW5nIHNlcmlhbCkgeworICAgICAgICAgICAgdGhpcy5zZXJpYWwgPSBzZXJpYWw7CisgICAgICAgIH0KKworICAgICAgICBwdWJsaWMgSURldmljZSBnZXREZXZpY2UoKSB7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGRldmljZUNoYW5nZWQoSURldmljZSBhcmcwLCBpbnQgYXJnMSkgeworICAgICAgICAgICAgLy8gV2UgbWF5IGdldCBhIGRldmljZSBjaGFuZ2VkIGluc3RlYWQgb2YgY29ubmVjdGVkLiBIYW5kbGUgbGlrZSBhIGNvbm5lY3Rpb24uCisgICAgICAgICAgICBkZXZpY2VDb25uZWN0ZWQoYXJnMCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGV2aWNlQ29ubmVjdGVkKElEZXZpY2UgYXJnMCkgeworICAgICAgICAgICAgaWYgKGRldmljZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gSWdub3JlIHVwZGF0ZXMuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2VyaWFsID09IG51bGwgfHwgc2VyaWFsLmVxdWFscyhhcmcwLmdldFNlcmlhbE51bWJlcigpKSkgeworICAgICAgICAgICAgICAgIGRldmljZSA9IGFyZzA7CisgICAgICAgICAgICAgICAgc3luY2hyb25pemVkICh0aGlzKSB7CisgICAgICAgICAgICAgICAgICAgIG5vdGlmeUFsbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoSURldmljZSBhcmcwKSB7CisgICAgICAgICAgICAvLyBJZ25vcmUgZGlzY29ubmVjdHMuCisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFdhaXRGb3JDbGllbnRzTGlzdGVuZXIgaW1wbGVtZW50cyBJRGV2aWNlQ2hhbmdlTGlzdGVuZXIgeworCisgICAgICAgIHByaXZhdGUgSURldmljZSBteURldmljZTsKKworICAgICAgICBwdWJsaWMgV2FpdEZvckNsaWVudHNMaXN0ZW5lcihJRGV2aWNlIG15RGV2aWNlKSB7CisgICAgICAgICAgICB0aGlzLm15RGV2aWNlID0gbXlEZXZpY2U7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgZGV2aWNlQ2hhbmdlZChJRGV2aWNlIGFyZzAsIGludCBhcmcxKSB7CisgICAgICAgICAgICBpZiAoYXJnMCA9PSBteURldmljZSAmJiAoYXJnMSAmIElEZXZpY2UuQ0hBTkdFX0NMSUVOVF9MSVNUKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgLy8gR290IGEgY2xpZW50IGxpc3QsIGRvbmUgaGVyZS4KKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbm90aWZ5QWxsKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIGRldmljZUNvbm5lY3RlZChJRGV2aWNlIGFyZzApIHsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBkZXZpY2VEaXNjb25uZWN0ZWQoSURldmljZSBhcmcwKSB7CisgICAgICAgIH0KKworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9EdW1wRGF0YS5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRHVtcERhdGEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTk3MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRHVtcERhdGEuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKioKKyAqIEhvbGRzIHRoZSBjb2xsZWN0ZWQgZGF0YSBmb3IgYSBwcm9jZXNzLgorICovCitwdWJsaWMgY2xhc3MgRHVtcERhdGEgeworICAgIC8qKgorICAgICAqIE5hbWUgb2YgdGhlIHBhY2thZ2UgKD1hcHBsaWNhdGlvbikuCisgICAgICovCisgICAgU3RyaW5nIHBhY2thZ2VOYW1lOworCisgICAgLyoqCisgICAgICogQSBtYXAgb2YgY2xhc3MgbmFtZSB0byBhIHN0cmluZyBmb3IgdGhlIGNsYXNzbG9hZGVyLiBUaGlzIG1heSBiZSBhIHRvU3RyaW5nIGVxdWl2YWxlbnQsCisgICAgICogb3IganVzdCBhIHVuaXF1ZSBJRC4KKyAgICAgKi8KKyAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGR1bXBEYXRhOworCisgICAgLyoqCisgICAgICogVGhlIERhdGUgd2hlbiB0aGlzIGRhdGEgd2FzIGNhcHR1cmVkLiBNb3N0bHkgZm9yIGRpc3BsYXkgcHVycG9zZXMuCisgICAgICovCisgICAgRGF0ZSBkYXRlOworCisgICAgLyoqCisgICAgICogQSBjYWNoZWQgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgYm9vdCBjbGFzc3BhdGggY2xhc3NlcyAoY2xhc3Nsb2FkZXIgdmFsdWUgaW4gZHVtcERhdGEgaXMKKyAgICAgKiBudWxsKS4KKyAgICAgKi8KKyAgICBpbnQgYmNwQ2xhc3NlczsKKworICAgIHB1YmxpYyBEdW1wRGF0YShTdHJpbmcgcGFja2FnZU5hbWUsIE1hcDxTdHJpbmcsIFN0cmluZz4gZHVtcERhdGEsIERhdGUgZGF0ZSkgeworICAgICAgICB0aGlzLnBhY2thZ2VOYW1lID0gcGFja2FnZU5hbWU7CisgICAgICAgIHRoaXMuZHVtcERhdGEgPSBkdW1wRGF0YTsKKyAgICAgICAgdGhpcy5kYXRlID0gZGF0ZTsKKworICAgICAgICBjb3VudEJvb3RDbGFzc1BhdGgoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkgeworICAgICAgICByZXR1cm4gcGFja2FnZU5hbWU7CisgICAgfQorCisgICAgcHVibGljIERhdGUgZ2V0RGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGU7CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0RHVtcERhdGEoKSB7CisgICAgICAgIHJldHVybiBkdW1wRGF0YTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjb3VudEJvb3RDbGFzc1BhdGgoKSB7CisgICAgICAgIGJjcENsYXNzZXMgPSAwOworICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZSA6IGR1bXBEYXRhLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChlLmdldFZhbHVlKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGJjcENsYXNzZXMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiBhbiBpbnZlcnRlZCBtYXBwaW5nLgorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gaW52ZXJ0RGF0YSgpIHsKKyAgICAgICAgTWFwPFN0cmluZywgU2V0PFN0cmluZz4+IHJldCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGUgOiBkdW1wRGF0YS5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBpZiAoIXJldC5jb250YWluc0tleShlLmdldFZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgcmV0LnB1dChlLmdldFZhbHVlKCksIG5ldyBIYXNoU2V0PFN0cmluZz4oKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQuZ2V0KGUuZ2V0VmFsdWUoKSkuYWRkKGUuZ2V0S2V5KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0R1bXBEYXRhSU8uamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0R1bXBEYXRhSU8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODYyNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRHVtcERhdGFJTy5qYXZhCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkOworCitpbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKK2ltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKK2ltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247CitpbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOworaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKKworLyoqCisgKiBIZWxwZXIgY2xhc3MgZm9yIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbiBvZiBhIGNvbGxlY3Rpb24gb2YgRHVtcERhdGEgb2JqZWN0cyB0byBYTUwuCisgKi8KK3B1YmxpYyBjbGFzcyBEdW1wRGF0YUlPIHsKKworICAvKioKKyAgICogU2VyaWFsaXplIHRoZSBnaXZlbiBjb2xsZWN0aW9uIHRvIGFuIFhNTCBkb2N1bWVudC4gUmV0dXJucyB0aGUgcHJvZHVjZWQgc3RyaW5nLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBTdHJpbmcgc2VyaWFsaXplKENvbGxlY3Rpb248RHVtcERhdGE+IGRhdGEpIHsKKyAgICAgIC8vIFdlJ2xsIGRvIHRoaXMgYnkgaGFuZCwgY29uc3RydWN0aW5nIGEgRE9NIG9yIHNpbWlsYXIgaXMgdG9vIGNvbXBsaWNhdGVkIGZvciBvdXIgc2ltcGxlCisgICAgICAvLyB1c2UgY2FzZS4KKworICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICBzYi5hcHBlbmQoIjxwcmVsb2FkZWQtY2xhc3Nlcy1kYXRhPlxuIik7CisKKyAgICAgIGZvciAoRHVtcERhdGEgZCA6IGRhdGEpIHsKKyAgICAgICAgICBzZXJpYWxpemUoZCwgc2IpOworICAgICAgfQorCisgICAgICBzYi5hcHBlbmQoIjwvcHJlbG9hZGVkLWNsYXNzZXMtZGF0YT5cbiIpOworICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CisgIH0KKworICBwcml2YXRlIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShEdW1wRGF0YSBkLCBTdHJpbmdCdWlsZGVyIHNiKSB7CisgICAgICBzYi5hcHBlbmQoIjxkYXRhIHBhY2thZ2U9XCIiICsgZC5wYWNrYWdlTmFtZSArICJcIiBkYXRlPVwiIiArCisgICAgICAgICAgICAgIERhdGVGb3JtYXQuZ2V0RGF0ZVRpbWVJbnN0YW5jZSgpLmZvcm1hdChkLmRhdGUpICsiXCI+XG4iKTsKKworICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTdHJpbmc+IGUgOiBkLmR1bXBEYXRhLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICBzYi5hcHBlbmQoIjxjbGFzcyBuYW1lPVwiIiArIGUuZ2V0S2V5KCkgKyAiXCIgY2xhc3Nsb2FkZXI9XCIiICsgZS5nZXRWYWx1ZSgpICsgIlwiLz5cbiIpOworICAgICAgfQorCisgICAgICBzYi5hcHBlbmQoIjwvZGF0YT5cbiIpOworICB9CisKKyAgLyoqCisgICAqIExvYWQgYSBjb2xsZWN0aW9uIG9mIER1bXBEYXRhIG9iamVjdHMgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgQ29sbGVjdGlvbjxEdW1wRGF0YT4gZGVzZXJpYWxpemUoRmlsZSBmKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgIC8vIFVzZSBTQVggcGFyc2luZy4gT3VyIGZvcm1hdCBpcyB2ZXJ5IHNpbXBsZS4gRG9uJ3QgZG8gYW55IHNjaGVtYSB2YWxpZGF0aW9uIG9yIHN1Y2guCisKKyAgICAgIFNBWFBhcnNlckZhY3Rvcnkgc3BmID0gU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgc3BmLnNldE5hbWVzcGFjZUF3YXJlKGZhbHNlKTsKKyAgICAgIFNBWFBhcnNlciBzYXhQYXJzZXIgPSBzcGYubmV3U0FYUGFyc2VyKCk7CisKKyAgICAgIFhNTFJlYWRlciB4bWxSZWFkZXIgPSBzYXhQYXJzZXIuZ2V0WE1MUmVhZGVyKCk7CisgICAgICBEdW1wRGF0YUNvbnRlbnRIYW5kbGVyIGRkY2ggPSBuZXcgRHVtcERhdGFDb250ZW50SGFuZGxlcigpOworICAgICAgeG1sUmVhZGVyLnNldENvbnRlbnRIYW5kbGVyKGRkY2gpOworICAgICAgeG1sUmVhZGVyLnBhcnNlKG5ldyBJbnB1dFNvdXJjZShuZXcgRmlsZVJlYWRlcihmKSkpOworCisgICAgICByZXR1cm4gZGRjaC5kYXRhOworICB9CisKKyAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtcERhdGFDb250ZW50SGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKKyAgICAgIENvbGxlY3Rpb248RHVtcERhdGE+IGRhdGEgPSBuZXcgTGlua2VkTGlzdDxEdW1wRGF0YT4oKTsKKyAgICAgIER1bXBEYXRhIG9wZW5EYXRhID0gbnVsbDsKKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24geworICAgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoImRhdGEiKSkgeworICAgICAgICAgICAgICBpZiAob3BlbkRhdGEgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIFN0cmluZyBwa2cgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKCJwYWNrYWdlIik7CisgICAgICAgICAgICAgIFN0cmluZyBkYXRlU3RyaW5nID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgiZGF0ZSIpOworCisgICAgICAgICAgICAgIGlmIChwa2cgPT0gbnVsbCB8fCBkYXRlU3RyaW5nID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICBEYXRlIGRhdGUgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoKS5wYXJzZShkYXRlU3RyaW5nKTsKKyAgICAgICAgICAgICAgICAgIG9wZW5EYXRhID0gbmV3IER1bXBEYXRhKHBrZywgbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCksIGRhdGUpOworICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHFOYW1lLmVxdWFscygiY2xhc3MiKSkgeworICAgICAgICAgICAgICBpZiAob3BlbkRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBhdHRyaWJ1dGVzLmdldFZhbHVlKCJuYW1lIik7CisgICAgICAgICAgICAgIFN0cmluZyBjbGFzc0xvYWRlciA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoImNsYXNzbG9hZGVyIik7CisKKyAgICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSBudWxsIHx8IGNsYXNzTG9hZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIG9wZW5EYXRhLmR1bXBEYXRhLnB1dChjbGFzc05hbWUsIGNsYXNzTG9hZGVyLmVxdWFscygibnVsbCIpID8gbnVsbCA6IGNsYXNzTG9hZGVyKTsKKyAgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgZW5kRWxlbWVudChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUpIHRocm93cyBTQVhFeGNlcHRpb24geworICAgICAgICAgIGlmIChxTmFtZS5lcXVhbHMoImRhdGEiKSkgeworICAgICAgICAgICAgICBpZiAob3BlbkRhdGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIG9wZW5EYXRhLmNvdW50Qm9vdENsYXNzUGF0aCgpOworCisgICAgICAgICAgICAgIGRhdGEuYWRkKG9wZW5EYXRhKTsKKyAgICAgICAgICAgICAgb3BlbkRhdGEgPSBudWxsOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvRHVtcFRhYmxlTW9kZWwuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0R1bXBUYWJsZU1vZGVsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3Y2JmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL0R1bXBUYWJsZU1vZGVsLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC5zd2luZy50YWJsZS5BYnN0cmFjdFRhYmxlTW9kZWw7CisKKy8qKgorICogQSB0YWJsZSBtb2RlbCBmb3IgY29sbGVjdGVkIER1bXBEYXRhLiBUaGlzIGlzIGJvdGggdGhlIGludGVybmFsIHN0b3JhZ2UgYXMgd2VsbCBhcyB0aGUgbW9kZWwKKyAqIGZvciBkaXNwbGF5LgorICovCitwdWJsaWMgY2xhc3MgRHVtcFRhYmxlTW9kZWwgZXh0ZW5kcyBBYnN0cmFjdFRhYmxlTW9kZWwgeworCisgICAgcHJpdmF0ZSBMaXN0PER1bXBEYXRhPiBkYXRhID0gbmV3IEFycmF5TGlzdDxEdW1wRGF0YT4oKTsKKworICAgIHB1YmxpYyB2b2lkIGFkZERhdGEoRHVtcERhdGEgZCkgeworICAgICAgICBkYXRhLmFkZChkKTsKKyAgICAgICAgZmlyZVRhYmxlUm93c0luc2VydGVkKGRhdGEuc2l6ZSgpIC0gMSwgZGF0YS5zaXplKCkgLSAxKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjbGVhcigpIHsKKyAgICAgICAgaW50IHNpemUgPSBkYXRhLnNpemUoKTsKKyAgICAgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICAgICAgICBkYXRhLmNsZWFyKCk7CisgICAgICAgICAgICBmaXJlVGFibGVSb3dzRGVsZXRlZCgwLCBzaXplIC0gMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxEdW1wRGF0YT4gZ2V0RGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBnZXRSb3dDb3VudCgpIHsKKyAgICAgICAgcmV0dXJuIGRhdGEuc2l6ZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uQ291bnQoKSB7CisgICAgICAgIHJldHVybiA0OworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29sdW1uTmFtZShpbnQgY29sdW1uKSB7CisgICAgICAgIHN3aXRjaCAoY29sdW1uKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQYWNrYWdlIjsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkRhdGUiOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAiIyBBbGwgQ2xhc3NlcyI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuICIjIEJvb3QgQ2xhc3NwYXRoIENsYXNzZXMiOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKFN0cmluZy52YWx1ZU9mKGNvbHVtbikpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9iamVjdCBnZXRWYWx1ZUF0KGludCByb3dJbmRleCwgaW50IGNvbHVtbkluZGV4KSB7CisgICAgICAgIER1bXBEYXRhIGQgPSBkYXRhLmdldChyb3dJbmRleCk7CisgICAgICAgIHN3aXRjaCAoY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZC5wYWNrYWdlTmFtZTsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICByZXR1cm4gZC5kYXRlOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIHJldHVybiBkLmR1bXBEYXRhLnNpemUoKTsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZC5iY3BDbGFzc2VzOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKFN0cmluZy52YWx1ZU9mKGNvbHVtbkluZGV4KSk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvTWFpbi5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvTWFpbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWIwZTAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9NYWluLmphdmEKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5JRGV2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9ucy5DbGVhclRhYmxlQWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9ucy5Db21wdXRlVGhyZXNob2xkQWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9ucy5Db21wdXRlVGhyZXNob2xkWEFjdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnMuRGV2aWNlU3BlY2lmaWM7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zLkV4cG9ydEFjdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnMuSW1wb3J0QWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9ucy5SZWxvYWRMaXN0QWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9ucy5SdW5Nb25rZXlBY3Rpb247CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zLlNjYW5BbGxQYWNrYWdlc0FjdGlvbjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnMuU2NhblBhY2thZ2VBY3Rpb247CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zLlNob3dEYXRhQWN0aW9uOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuY2xhc3NkYXRhcmV0cmlldmFsLkNsYXNzRGF0YVJldHJpZXZlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmNsYXNzZGF0YXJldHJpZXZhbC5ocHJvZi5IcHJvZjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmNsYXNzZGF0YXJldHJpZXZhbC5qZHdwLkpEV1BDbGFzc0RhdGFSZXRyaWV2ZXI7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC51aS5VSTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IGphdmF4LnN3aW5nLkFjdGlvbjsKK2ltcG9ydCBqYXZheC5zd2luZy5EZWZhdWx0TGlzdE1vZGVsOworCitwdWJsaWMgY2xhc3MgTWFpbiB7CisKKyAgICAvKioKKyAgICAgKiBFbmFibGUgdHJhY2luZyBtb2RlLiBUaGlzIGlzIGEgd29yay1pbi1wcm9ncmVzcyB0byBkZXJpdmUgY29tcGlsZWQtbWV0aG9kcyBkYXRhLCBzbyBpdCBpcworICAgICAqIG9mZiBmb3Igbm93LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgYm9vbGVhbiBFTkFCTEVfVFJBQ0lORyA9IGZhbHNlOworCisgICAgLyoqCisgICAgICogVGVuLXNlY29uZCB0aW1lb3V0LgorICAgICAqLworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgaW50IERFRkFVTFRfVElNRU9VVF9NSUxMSVMgPSAxMCAqIDEwMDA7CisKKyAgICAvKioKKyAgICAgKiBIcHJvZiB0aW1lb3V0LiBUd28gbWludXRlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgZmluYWwgc3RhdGljIGludCBIUFJPRl9USU1FT1VUX01JTExJUyA9IDEyMCAqIDEwMDA7CisKKyAgICBwcml2YXRlIElEZXZpY2UgZGV2aWNlOworICAgIHByaXZhdGUgc3RhdGljIENsaWVudFV0aWxzIGNsaWVudFV0aWxzOworCisgICAgcHJpdmF0ZSBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbDsKKyAgICBwcml2YXRlIERlZmF1bHRMaXN0TW9kZWw8Q2xpZW50PiBjbGllbnRMaXN0TW9kZWw7CisKKyAgICBwcml2YXRlIFVJIHVpOworCisgICAgLy8gQWN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCBvbmNlIGEgZGV2aWNlIGlzIHNlbGVjdGVkLgorICAgIHByaXZhdGUgQ29sbGVjdGlvbjxEZXZpY2VTcGVjaWZpYz4gZGV2aWNlU3BlY2lmaWNBY3Rpb25zOworCisgICAgLy8gQ3VycmVudCBtYWluIGluc3RhbmNlLgorICAgIHByaXZhdGUgc3RhdGljIE1haW4gdG9wOworICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdXNlSmR3cENsYXNzRGF0YVJldHJpZXZlciA9IGZhbHNlOworCisgICAgcHVibGljIGZpbmFsIHN0YXRpYyBTdHJpbmcgQ0xBU1NfUFJFTE9BRF9CTEFDS0xJU1QgPSAiYW5kcm9pZC5hcHAuQWxhcm1NYW5hZ2VyJCIgKyAifCIKKyAgICAgICAgICAgICsgImFuZHJvaWQuYXBwLlNlYXJjaE1hbmFnZXIkIiArICJ8IiArICJhbmRyb2lkLm9zLkZpbGVPYnNlcnZlciQiICsgInwiCisgICAgICAgICAgICArICJjb20uYW5kcm9pZC5zZXJ2ZXIuUGFja2FnZU1hbmFnZXJTZXJ2aWNlXFwkQXBwRGlyT2JzZXJ2ZXIkIiArICJ8IiArCisKKworICAgICAgICAgICAgLy8gVGhyZWFkcworICAgICAgICAgICAgImFuZHJvaWQub3MuQXN5bmNUYXNrJCIgKyAifCIgKyAiYW5kcm9pZC5waW0uQ29udGFjdHNBc3luY0hlbHBlciQiICsgInwiCisgICAgICAgICAgICArICJhbmRyb2lkLndlYmtpdC5XZWJWaWV3Q2xhc3NpY1xcJDEkIiArICJ8IiArICJqYXZhLmxhbmcuUHJvY2Vzc01hbmFnZXIkIiArICJ8IgorICAgICAgICAgICAgKyAiKC4qXFwkTm9QcmVsb2FkSG9sZGVyJCkiOworCisgICAgLyoqCisgICAgICogQHBhcmFtIGFyZ3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIE1haW4gbSA9IG5ldyBNYWluKCk7CisgICAgICAgIHRvcCA9IG07CisKKyAgICAgICAgbS5zdGFydFVwKCk7CisgICAgfQorCisgICAgcHVibGljIE1haW4oKSB7CisgICAgICAgIGNsaWVudExpc3RNb2RlbCA9IG5ldyBEZWZhdWx0TGlzdE1vZGVsPENsaWVudD4oKTsKKyAgICAgICAgZGF0YVRhYmxlTW9kZWwgPSBuZXcgRHVtcFRhYmxlTW9kZWwoKTsKKworICAgICAgICBjbGllbnRVdGlscyA9IG5ldyBDbGllbnRVdGlscyhERUZBVUxUX1RJTUVPVVRfTUlMTElTKTsgIC8vIENsaWVudCB1dGlscyB3aXRoIDEwcyB0aW1lb3V0LgorCisgICAgICAgIExpc3Q8QWN0aW9uPiBhY3Rpb25zID0gbmV3IEFycmF5TGlzdDxBY3Rpb24+KCk7CisgICAgICAgIGFjdGlvbnMuYWRkKG5ldyBSZWxvYWRMaXN0QWN0aW9uKGNsaWVudFV0aWxzLCBudWxsLCBjbGllbnRMaXN0TW9kZWwpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IENsZWFyVGFibGVBY3Rpb24oZGF0YVRhYmxlTW9kZWwpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IFJ1bk1vbmtleUFjdGlvbihudWxsLCBkYXRhVGFibGVNb2RlbCkpOworICAgICAgICBhY3Rpb25zLmFkZChuZXcgU2NhblBhY2thZ2VBY3Rpb24oY2xpZW50VXRpbHMsIG51bGwsIGRhdGFUYWJsZU1vZGVsKSk7CisgICAgICAgIGFjdGlvbnMuYWRkKG5ldyBTY2FuQWxsUGFja2FnZXNBY3Rpb24oY2xpZW50VXRpbHMsIG51bGwsIGRhdGFUYWJsZU1vZGVsKSk7CisgICAgICAgIGFjdGlvbnMuYWRkKG5ldyBDb21wdXRlVGhyZXNob2xkQWN0aW9uKCJDb21wdXRlIHByZWxvYWRlZC1jbGFzc2VzIiwgZGF0YVRhYmxlTW9kZWwsIDIsCisgICAgICAgICAgICAgICAgQ0xBU1NfUFJFTE9BRF9CTEFDS0xJU1QpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IENvbXB1dGVUaHJlc2hvbGRBY3Rpb24oIkNvbXB1dGUgY29tcGlsZWQtY2xhc3NlcyIsIGRhdGFUYWJsZU1vZGVsLCAxLAorICAgICAgICAgICAgICAgIG51bGwpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IENvbXB1dGVUaHJlc2hvbGRYQWN0aW9uKCJDb21wdXRlKFgpIiwgZGF0YVRhYmxlTW9kZWwsCisgICAgICAgICAgICAgICAgQ0xBU1NfUFJFTE9BRF9CTEFDS0xJU1QpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IFNob3dEYXRhQWN0aW9uKGRhdGFUYWJsZU1vZGVsKSk7CisgICAgICAgIGFjdGlvbnMuYWRkKG5ldyBJbXBvcnRBY3Rpb24oZGF0YVRhYmxlTW9kZWwpKTsKKyAgICAgICAgYWN0aW9ucy5hZGQobmV3IEV4cG9ydEFjdGlvbihkYXRhVGFibGVNb2RlbCkpOworCisgICAgICAgIGRldmljZVNwZWNpZmljQWN0aW9ucyA9IG5ldyBBcnJheUxpc3Q8RGV2aWNlU3BlY2lmaWM+KCk7CisgICAgICAgIGZvciAoQWN0aW9uIGEgOiBhY3Rpb25zKSB7CisgICAgICAgICAgICBpZiAoYSBpbnN0YW5jZW9mIERldmljZVNwZWNpZmljKSB7CisgICAgICAgICAgICAgICAgZGV2aWNlU3BlY2lmaWNBY3Rpb25zLmFkZCgoRGV2aWNlU3BlY2lmaWMpYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB1aSA9IG5ldyBVSShjbGllbnRMaXN0TW9kZWwsIGRhdGFUYWJsZU1vZGVsLCBhY3Rpb25zKTsKKyAgICAgICAgdWkuc2V0VmlzaWJsZSh0cnVlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIFVJIGdldFVJKCkgeworICAgICAgICByZXR1cm4gdG9wLnVpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NEYXRhUmV0cmlldmVyIGdldENsYXNzRGF0YVJldHJpZXZlcigpIHsKKyAgICAgICAgaWYgKHVzZUpkd3BDbGFzc0RhdGFSZXRyaWV2ZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgSkRXUENsYXNzRGF0YVJldHJpZXZlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBIcHJvZihIUFJPRl9USU1FT1VUX01JTExJUyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgSURldmljZSBnZXREZXZpY2UoKSB7CisgICAgICAgIHJldHVybiBkZXZpY2U7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RGV2aWNlKElEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOworICAgICAgICBmb3IgKERldmljZVNwZWNpZmljIGRzIDogZGV2aWNlU3BlY2lmaWNBY3Rpb25zKSB7CisgICAgICAgICAgICBkcy5zZXREZXZpY2UoZGV2aWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBEZWZhdWx0TGlzdE1vZGVsPENsaWVudD4gZ2V0Q2xpZW50TGlzdE1vZGVsKCkgeworICAgICAgICByZXR1cm4gY2xpZW50TGlzdE1vZGVsOworICAgIH0KKworICAgIHN0YXRpYyBjbGFzcyBEZXZpY2VXcmFwcGVyIHsKKyAgICAgICAgSURldmljZSBkZXZpY2U7CisKKyAgICAgICAgcHVibGljIERldmljZVdyYXBwZXIoSURldmljZSBkKSB7CisgICAgICAgICAgICBkZXZpY2UgPSBkOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gZGV2aWNlLmdldE5hbWUoKSArICIgKCMiICsgZGV2aWNlLmdldFNlcmlhbE51bWJlcigpICsgIikiOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0VXAoKSB7CisgICAgICAgIGdldFVJKCkuc2hvd1dhaXREaWFsb2coKTsKKyAgICAgICAgaW5pdERldmljZSgpOworCisgICAgICAgIC8vIExvYWQgY2xpZW50cy4KKyAgICAgICAgbmV3IFJlbG9hZExpc3RBY3Rpb24oY2xpZW50VXRpbHMsIGdldERldmljZSgpLCBjbGllbnRMaXN0TW9kZWwpLnJ1bigpOworCisgICAgICAgIGdldFVJKCkuaGlkZVdhaXREaWFsb2coKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgaW5pdERldmljZSgpIHsKKyAgICAgICAgRGV2aWNlVXRpbHMuaW5pdChERUZBVUxUX1RJTUVPVVRfTUlMTElTKTsKKworICAgICAgICBJRGV2aWNlIGRldmljZXNbXSA9IERldmljZVV0aWxzLmZpbmREZXZpY2VzKERFRkFVTFRfVElNRU9VVF9NSUxMSVMpOworICAgICAgICBpZiAoZGV2aWNlcyA9PSBudWxsIHx8IGRldmljZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCBhbnkgZGV2aWNlcy4uLiIpOworICAgICAgICB9CisKKyAgICAgICAgZ2V0VUkoKS5oaWRlV2FpdERpYWxvZygpOworCisgICAgICAgIERldmljZVdyYXBwZXIgZGV2aWNlV3JhcHBlcnNbXSA9IG5ldyBEZXZpY2VXcmFwcGVyW2RldmljZXMubGVuZ3RoXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXZpY2VzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBkZXZpY2VXcmFwcGVyc1tpXSA9IG5ldyBEZXZpY2VXcmFwcGVyKGRldmljZXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgRGV2aWNlV3JhcHBlciByZXQgPSBNYWluLmdldFVJKCkuc2hvd0Nob2ljZURpYWxvZygiQ2hvb3NlIGEgZGV2aWNlIiwgIkNob29zZSBkZXZpY2UiLAorICAgICAgICAgICAgICAgIGRldmljZVdyYXBwZXJzKTsKKyAgICAgICAgaWYgKHJldCAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXREZXZpY2UocmV0LmRldmljZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2xlYW4gcHJlcGFyZSA9IE1haW4uZ2V0VUkoKS5zaG93Q29uZmlybURpYWxvZygiUHJlcGFyZSBkZXZpY2U/IiwKKyAgICAgICAgICAgICAgICAiRG8geW91IHdhbnQgdG8gcHJlcGFyZSB0aGUgZGV2aWNlPyBUaGlzIGlzIGhpZ2hseSByZWNvbW1lbmRlZC4iKTsKKyAgICAgICAgaWYgKHByZXBhcmUpIHsKKyAgICAgICAgICAgIFN0cmluZyBidWlsZFR5cGUgPSBEZXZpY2VVdGlscy5nZXRCdWlsZFR5cGUoZGV2aWNlKTsKKyAgICAgICAgICAgIGlmIChidWlsZFR5cGUgPT0gbnVsbCB8fCAoIWJ1aWxkVHlwZS5lcXVhbHMoInVzZXJkZWJ1ZyIpICYmICFidWlsZFR5cGUuZXF1YWxzKCJlbmciKSkpIHsKKyAgICAgICAgICAgICAgICBNYWluLmdldFVJKCkuc2hvd01lc3NhZ2VEaWFsb2coIk5lZWQgYSB1c2VyZGVidWcgb3IgZW5nIGJ1aWxkISAoRm91bmQgIiArIGJ1aWxkVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgKyAiKSIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChEZXZpY2VVdGlscy5oYXNQcmVidWlsdEJvb3RJbWFnZShkZXZpY2UpKSB7CisgICAgICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnNob3dNZXNzYWdlRGlhbG9nKCJDYW5ub3QgcHJlcGFyZSBhIGRldmljZSB3aXRoIHByZS1vcHRpbWl6ZWQgYm9vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICArICJpbWFnZSEiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChFTkFCTEVfVFJBQ0lORykgeworICAgICAgICAgICAgICAgIERldmljZVV0aWxzLmVuYWJsZVRyYWNpbmcoZGV2aWNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnNob3dNZXNzYWdlRGlhbG9nKCJUaGUgZGV2aWNlIHdpbGwgcmVib290LiBUaGlzIHdpbGwgcG90ZW50aWFsbHkgdGFrZSBhICIKKyAgICAgICAgICAgICAgICAgICAgKyAibG9uZyB0aW1lLiBQbGVhc2UgYmUgcGF0aWVudC4iKTsKKyAgICAgICAgICAgIGlmICghRGV2aWNlVXRpbHMucmVtb3ZlUHJlbG9hZGVkKGRldmljZSwgMTUgKiA2MCkgLyogMTVtIHRpbWVvdXQgKi8pIHsKKyAgICAgICAgICAgICAgICBNYWluLmdldFVJKCkuc2hvd01lc3NhZ2VEaWFsb2coIlJlbW92aW5nIHByZWxvYWRlZC1jbGFzc2VzIGZhaWxlZCB1bmV4cGVjdGVkbHkhIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZmluZEFuZEdldENsYXNzRGF0YShJRGV2aWNlIGRldmljZSwgU3RyaW5nIHBhY2thZ2VOYW1lKQorICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIENsaWVudCBjbGllbnQgPSBjbGllbnRVdGlscy5maW5kQ2xpZW50KGRldmljZSwgcGFja2FnZU5hbWUsIC0xKTsKKyAgICAgICAgaWYgKGNsaWVudCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGZpbmQgY2xpZW50Li4uIik7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGb3VuZCBjbGllbnQ6ICIgKyBjbGllbnQpOworCisgICAgICAgIHJldHVybiBnZXRDbGFzc0RhdGFSZXRyaWV2ZXIoKS5nZXRDbGFzc0RhdGEoY2xpZW50KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvQWJzdHJhY3RUaHJlYWRlZEFjdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNjIlCmNvcHkgZnJvbSBwYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEKY29weSB0byB0b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL0Fic3RyYWN0VGhyZWFkZWRBY3Rpb24uamF2YQppbmRleCBlMGQ4M2ZkLi5mYmY4M2QyIDEwMDY0NAotLS0gYS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvcmVjZW50cy9ldmVudHMvdWkvUmVzaXplVGFza0V2ZW50LmphdmEKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9BYnN0cmFjdFRocmVhZGVkQWN0aW9uLmphdmEKQEAgLTE0LDE5ICsxNCwyMSBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aTsKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOwogCi1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5ldmVudHMuRXZlbnRCdXM7Ci1pbXBvcnQgY29tLmFuZHJvaWQuc3lzdGVtdWkucmVjZW50cy5tb2RlbC5UYXNrOworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OwogCi0vKioKLSAqIFRoaXMgaXMgc2VudCB3aGVuIGEge0BsaW5rIFRhc2t9IGlzIHJlc2l6ZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZXNpemVUYXNrRXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CitpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247CiAKLSAgICBwdWJsaWMgZmluYWwgVGFzayB0YXNrOworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGhyZWFkZWRBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdEFjdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKIAotICAgIHB1YmxpYyBSZXNpemVUYXNrRXZlbnQoVGFzayB0YXNrKSB7Ci0gICAgICAgIHRoaXMudGFzayA9IHRhc2s7CisgICAgcHJvdGVjdGVkIEFic3RyYWN0VGhyZWFkZWRBY3Rpb24oU3RyaW5nIHRpdGxlKSB7CisgICAgICAgIHN1cGVyKHRpdGxlKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICBuZXcgVGhyZWFkKHRoaXMpLnN0YXJ0KCk7CisgICAgfQorCiB9CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL0Fic3RyYWN0VGhyZWFkZWREZXZpY2VTcGVjaWZpY0FjdGlvbi5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9BYnN0cmFjdFRocmVhZGVkRGV2aWNlU3BlY2lmaWNBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTA2NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9BYnN0cmFjdFRocmVhZGVkRGV2aWNlU3BlY2lmaWNBY3Rpb24uamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuSURldmljZTsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUaHJlYWRlZERldmljZVNwZWNpZmljQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RUaHJlYWRlZEFjdGlvbgorICAgICAgICBpbXBsZW1lbnRzIERldmljZVNwZWNpZmljIHsKKworICAgIHByb3RlY3RlZCBJRGV2aWNlIGRldmljZTsKKworICAgIHByb3RlY3RlZCBBYnN0cmFjdFRocmVhZGVkRGV2aWNlU3BlY2lmaWNBY3Rpb24oU3RyaW5nIHRpdGxlLCBJRGV2aWNlIGRldmljZSkgeworICAgICAgICBzdXBlcih0aXRsZSk7CisgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldERldmljZShJRGV2aWNlIGRldmljZSkgeworICAgICAgICB0aGlzLmRldmljZSA9IGRldmljZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICBpZiAoZGV2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdXBlci5hY3Rpb25QZXJmb3JtZWQoZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9DbGVhclRhYmxlQWN0aW9uLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL0NsZWFyVGFibGVBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGU0Nzk1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9DbGVhclRhYmxlQWN0aW9uLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOworCitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wVGFibGVNb2RlbDsKKworaW1wb3J0IGphdmEuYXd0LmV2ZW50LkFjdGlvbkV2ZW50OworCitpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247CisKK3B1YmxpYyBjbGFzcyBDbGVhclRhYmxlQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBY3Rpb24geworICAgIHByaXZhdGUgZmluYWwgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWw7CisKKyAgICBwdWJsaWMgQ2xlYXJUYWJsZUFjdGlvbihEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbCkgeworICAgICAgICBzdXBlcigiQ2xlYXIiKTsKKyAgICAgICAgdGhpcy5kYXRhVGFibGVNb2RlbCA9IGRhdGFUYWJsZU1vZGVsOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgIGRhdGFUYWJsZU1vZGVsLmNsZWFyKCk7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvQ29tcHV0ZVRocmVzaG9sZEFjdGlvbi5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9Db21wdXRlVGhyZXNob2xkQWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyNDcxNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvQ29tcHV0ZVRocmVzaG9sZEFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLkR1bXBEYXRhOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuRHVtcFRhYmxlTW9kZWw7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5NYWluOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247CitpbXBvcnQgamF2YXguc3dpbmcuSkZpbGVDaG9vc2VyOworCisvKioKKyAqIENvbXB1dGUgYW4gaW50ZXJzZWN0aW9uIG9mIGNsYXNzZXMgZnJvbSB0aGUgZ2l2ZW4gZGF0YS4gQSBjbGFzcyBpcyBpbiB0aGUgaW50ZXJzZWN0aW9uIGlmIGl0CisgKiBhcHBlYXJzIGluIGF0IGxlYXN0IHRoZSBudW1iZXIgb2YgdGhyZXNob2xkIGdpdmVuIHBhY2thZ2VzLiBBbiBvcHRpb25hbCBibGFja2xpc3QgY2FuIGJlCisgKiB1c2VkIHRvIGZpbHRlciBjbGFzc2VzIGZyb20gdGhlIGludGVyc2VjdGlvbi4KKyAqLworcHVibGljIGNsYXNzIENvbXB1dGVUaHJlc2hvbGRBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdEFjdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKKyAgICBwcm90ZWN0ZWQgaW50IHRocmVzaG9sZDsKKyAgICBwcml2YXRlIFBhdHRlcm4gYmxhY2tsaXN0OworICAgIHByaXZhdGUgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWw7CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYW4gYWN0aW9uIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuIFRoZSBibGFja2xpc3QgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24KKyAgICAgKiB0aGF0IGZpbHRlcnMgY2xhc3Nlcy4KKyAgICAgKi8KKyAgICBwdWJsaWMgQ29tcHV0ZVRocmVzaG9sZEFjdGlvbihTdHJpbmcgbmFtZSwgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWwsIGludCB0aHJlc2hvbGQsCisgICAgICAgICAgICBTdHJpbmcgYmxhY2tsaXN0KSB7CisgICAgICAgIHN1cGVyKG5hbWUpOworICAgICAgICB0aGlzLmRhdGFUYWJsZU1vZGVsID0gZGF0YVRhYmxlTW9kZWw7CisgICAgICAgIHRoaXMudGhyZXNob2xkID0gdGhyZXNob2xkOworICAgICAgICBpZiAoYmxhY2tsaXN0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMuYmxhY2tsaXN0ID0gUGF0dGVybi5jb21waWxlKGJsYWNrbGlzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICBMaXN0PER1bXBEYXRhPiBkYXRhID0gZGF0YVRhYmxlTW9kZWwuZ2V0RGF0YSgpOworICAgICAgICBpZiAoZGF0YS5zaXplKCkgPT0gMCkgeworICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnNob3dNZXNzYWdlRGlhbG9nKCJObyBkYXRhIGF2YWlsYWJsZSwgcGxlYXNlIHNjYW4gcGFja2FnZXMgb3IgcnVuICIKKyAgICAgICAgICAgICAgICAgICAgKyAibW9ua2V5cy4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGF0YS5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnNob3dNZXNzYWdlRGlhbG9nKCJDYW5ub3QgY29tcHV0ZSBsaXN0IGZyb20gb25seSBvbmUgZGF0YSBzZXQsIHBsZWFzZSAiCisgICAgICAgICAgICAgICAgICAgICsgInNjYW4gcGFja2FnZXMgb3IgcnVuIG1vbmtleXMuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuZXcgVGhyZWFkKHRoaXMpLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBNYWluLmdldFVJKCkuc2hvd1dhaXREaWFsb2coKTsKKworICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gdXNlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2V0PFN0cmluZz4+KCk7CisgICAgICAgIGZvciAoRHVtcERhdGEgZCA6IGRhdGFUYWJsZU1vZGVsLmdldERhdGEoKSkgeworICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnVwZGF0ZVdhaXREaWFsb2coIk1lcmdpbmcgIiArIGQuZ2V0UGFja2FnZU5hbWUoKSk7CisgICAgICAgICAgICB1cGRhdGVDbGFzc1VzZShkLmdldFBhY2thZ2VOYW1lKCksIHVzZXMsIGdldEJvb3RDbGFzc1BhdGhDbGFzc2VzKGQuZ2V0RHVtcERhdGEoKSkpOworICAgICAgICB9CisKKyAgICAgICAgTWFpbi5nZXRVSSgpLnVwZGF0ZVdhaXREaWFsb2coIkNvbXB1dGluZyB0aHJlc2hvbGRlZCBzZXQiKTsKKyAgICAgICAgU2V0PFN0cmluZz4gcmVzdWx0ID0gZnJvbVRocmVzaG9sZCh1c2VzLCBibGFja2xpc3QsIHRocmVzaG9sZCk7CisgICAgICAgIE1haW4uZ2V0VUkoKS5oaWRlV2FpdERpYWxvZygpOworCisgICAgICAgIGJvb2xlYW4gcmV0ID0gTWFpbi5nZXRVSSgpLnNob3dDb25maXJtRGlhbG9nKCJDb21wdXRlZCBhIHNldCB3aXRoICIgKyByZXN1bHQuc2l6ZSgpCisgICAgICAgICAgICAgICAgKyAiIGNsYXNzZXMsIHdvdWxkIHlvdSBsaWtlIHRvIHNhdmUgdG8gZGlzaz8iLCAiU2F2ZT8iKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgSkZpbGVDaG9vc2VyIGpmYyA9IG5ldyBKRmlsZUNob29zZXIoKTsKKyAgICAgICAgICAgIGludCByZXQyID0gamZjLnNob3dTYXZlRGlhbG9nKE1haW4uZ2V0VUkoKSk7CisgICAgICAgICAgICBpZiAocmV0MiA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKyAgICAgICAgICAgICAgICBGaWxlIGYgPSBqZmMuZ2V0U2VsZWN0ZWRGaWxlKCk7CisgICAgICAgICAgICAgICAgc2F2ZVNldChyZXN1bHQsIGYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBmcm9tVGhyZXNob2xkKE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBjbGFzc1VzZXMsIFBhdHRlcm4gYmxhY2tsaXN0LAorICAgICAgICAgICAgaW50IHRocmVzaG9sZCkgeworICAgICAgICBUcmVlU2V0PFN0cmluZz4gcmV0ID0gbmV3IFRyZWVTZXQ8PigpOyAvLyBUcmVlU2V0IHNvIGl0J3MgbmljZWx5IG9yZGVyZWQgYnkgbmFtZS4KKworICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFNldDxTdHJpbmc+PiBlIDogY2xhc3NVc2VzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChlLmdldFZhbHVlKCkuc2l6ZSgpID49IHRocmVzaG9sZCkgeworICAgICAgICAgICAgICAgIGlmIChibGFja2xpc3QgPT0gbnVsbCB8fCAhYmxhY2tsaXN0Lm1hdGNoZXIoZS5nZXRLZXkoKSkubWF0Y2hlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldC5hZGQoZS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHVwZGF0ZUNsYXNzVXNlKFN0cmluZyBwa2csIE1hcDxTdHJpbmcsIFNldDxTdHJpbmc+PiBjbGFzc1VzZXMsCisgICAgICAgICAgICBTZXQ8U3RyaW5nPiBjbGFzc2VzKSB7CisgICAgICAgIGZvciAoU3RyaW5nIGNsYXNzTmFtZSA6IGNsYXNzZXMpIHsKKyAgICAgICAgICAgIFNldDxTdHJpbmc+IG9sZCA9IGNsYXNzVXNlcy5nZXQoY2xhc3NOYW1lKTsKKyAgICAgICAgICAgIGlmIChvbGQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNsYXNzVXNlcy5wdXQoY2xhc3NOYW1lLCBuZXcgSGFzaFNldDxTdHJpbmc+KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xhc3NVc2VzLmdldChjbGFzc05hbWUpLmFkZChwa2cpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gZ2V0Qm9vdENsYXNzUGF0aENsYXNzZXMoTWFwPFN0cmluZywgU3RyaW5nPiBzb3VyY2UpIHsKKyAgICAgICAgU2V0PFN0cmluZz4gcmV0ID0gbmV3IEhhc2hTZXQ8PigpOworICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZz4gZSA6IHNvdXJjZS5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBpZiAoZS5nZXRWYWx1ZSgpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZXQuYWRkKGUuZ2V0S2V5KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYXZlU2V0KFNldDxTdHJpbmc+IHJlc3VsdCwgRmlsZSBmKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBQcmludFdyaXRlciBvdXQgPSBuZXcgUHJpbnRXcml0ZXIoZik7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBzIDogcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4ocyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9Db21wdXRlVGhyZXNob2xkWEFjdGlvbi5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9Db21wdXRlVGhyZXNob2xkWEFjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzBhNGMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL0NvbXB1dGVUaHJlc2hvbGRYQWN0aW9uLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOworCitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wVGFibGVNb2RlbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLk1haW47CisKK3B1YmxpYyBjbGFzcyBDb21wdXRlVGhyZXNob2xkWEFjdGlvbiBleHRlbmRzIENvbXB1dGVUaHJlc2hvbGRBY3Rpb24geworCisgICAgcHVibGljIENvbXB1dGVUaHJlc2hvbGRYQWN0aW9uKFN0cmluZyBuYW1lLCBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbCwKKyAgICAgICAgICAgIFN0cmluZyBibGFja2xpc3QpIHsKKyAgICAgICAgc3VwZXIobmFtZSwgZGF0YVRhYmxlTW9kZWwsIDEsIGJsYWNrbGlzdCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBTdHJpbmcgdmFsdWUgPSBNYWluLmdldFVJKCkuc2hvd0lucHV0RGlhbG9nKCJUaHJlc2hvbGQ/Iik7CisKKyAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gSW50ZWdlci5wYXJzZUludCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgc3VwZXIucnVuKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXhjKSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9EZXZpY2VTcGVjaWZpYy5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9EZXZpY2VTcGVjaWZpYy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YThmMjYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL0RldmljZVNwZWNpZmljLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOworCitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLklEZXZpY2U7CisKKy8qKgorICogTWFya3MgYW4gYWN0aW9uIGFzIGJlaW5nIGRldmljZS1zcGVjaWZpYy4gVGhlIHVzZXIgbXVzdCBzZXQgdGhlIGRldmljZSB0aHJvdWdoIHRoZSBzcGVjaWZpZWQKKyAqIG1ldGhvZCBpZiB0aGUgZGV2aWNlIHNlbGVjdGlvbiBjaGFuZ2VzLgorICoKKyAqIEltcGxlbWVudG9ycyBtdXN0IHRvbGVyYXRlIGEgbnVsbCBkZXZpY2UgKGZvciBleGFtcGxlLCB3aXRoIGEgbm8tb3ApLiBUaGlzIGluY2x1ZGVzIGNhbGxpbmcKKyAqIGFueSBtZXRob2RzIGJlZm9yZSBzZXREZXZpY2UgaGFzIGJlZW4gY2FsbGVkLgorICovCitwdWJsaWMgaW50ZXJmYWNlIERldmljZVNwZWNpZmljIHsKKworICAgIC8qKgorICAgICAqIFNldCB0aGUgZGV2aWNlIHRoYXQgc2hvdWxkIGJlIHVzZWQuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiBjYWxsaW5nIG90aGVyCisgICAgICogbWV0aG9kcyBvZiB0aGUgaW1wbGVtZW50b3IgYmVmb3JlIGEgc2V0RGV2aWNlIGNhbGwuIE5laXRoZXIgaXMgZGV2aWNlIGd1YXJhbnRlZWQgdG8gYmUKKyAgICAgKiBub24tbnVsbC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB0byB1c2UgZ29pbmcgZm9yd2FyZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXREZXZpY2UoSURldmljZSBkZXZpY2UpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9FeHBvcnRBY3Rpb24uamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvRXhwb3J0QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4YjNkZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvRXhwb3J0QWN0aW9uLmphdmEKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOworCitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wRGF0YUlPOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuRHVtcFRhYmxlTW9kZWw7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5NYWluOworCitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CisKK2ltcG9ydCBqYXZheC5zd2luZy5BYnN0cmFjdEFjdGlvbjsKKworcHVibGljIGNsYXNzIEV4cG9ydEFjdGlvbiBleHRlbmRzIEFic3RyYWN0QWN0aW9uIGltcGxlbWVudHMgUnVubmFibGUgeworICAgIHByaXZhdGUgRmlsZSBsYXN0U2F2ZUZpbGU7CisgICAgcHJpdmF0ZSBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbDsKKworICAgIHB1YmxpYyBFeHBvcnRBY3Rpb24oRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWwpIHsKKyAgICAgICAgc3VwZXIoIkV4cG9ydCBkYXRhIik7CisgICAgICAgIHRoaXMuZGF0YVRhYmxlTW9kZWwgPSBkYXRhVGFibGVNb2RlbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICBsYXN0U2F2ZUZpbGUgPSBNYWluLmdldFVJKCkuc2hvd1NhdmVEaWFsb2coKTsKKyAgICAgICAgaWYgKGxhc3RTYXZlRmlsZSAhPSBudWxsKSB7CisgICAgICAgICAgICBuZXcgVGhyZWFkKHRoaXMpLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIE1haW4uZ2V0VUkoKS5zaG93V2FpdERpYWxvZygpOworCisgICAgICAgIFN0cmluZyBzZXJpYWxpemVkID0gRHVtcERhdGFJTy5zZXJpYWxpemUoZGF0YVRhYmxlTW9kZWwuZ2V0RGF0YSgpKTsKKworICAgICAgICBpZiAoc2VyaWFsaXplZCAhPSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFByaW50V3JpdGVyIG91dCA9IG5ldyBQcmludFdyaXRlcihsYXN0U2F2ZUZpbGUpOworICAgICAgICAgICAgICAgIG91dC5wcmludGxuKHNlcmlhbGl6ZWQpOworICAgICAgICAgICAgICAgIG91dC5jbG9zZSgpOworCisgICAgICAgICAgICAgICAgTWFpbi5nZXRVSSgpLmhpZGVXYWl0RGlhbG9nKCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIE1haW4uZ2V0VUkoKS5oaWRlV2FpdERpYWxvZygpOworICAgICAgICAgICAgICAgIE1haW4uZ2V0VUkoKS5zaG93TWVzc2FnZURpYWxvZygiRmFpbGVkIHdyaXRpbmc6ICIgKyBlLmdldE1lc3NhZ2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9JbXBvcnRBY3Rpb24uamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvSW1wb3J0QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxOTc2NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvSW1wb3J0QWN0aW9uLmphdmEKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5hY3Rpb25zOworCitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wRGF0YTsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLkR1bXBEYXRhSU87CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wVGFibGVNb2RlbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLk1haW47CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CisKK2ltcG9ydCBqYXZheC5zd2luZy5BYnN0cmFjdEFjdGlvbjsKKworcHVibGljIGNsYXNzIEltcG9ydEFjdGlvbiBleHRlbmRzIEFic3RyYWN0QWN0aW9uIGltcGxlbWVudHMgUnVubmFibGUgeworICAgIHByaXZhdGUgRmlsZVtdIGxhc3RPcGVuRmlsZXM7CisgICAgcHJpdmF0ZSBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbDsKKworICAgIHB1YmxpYyBJbXBvcnRBY3Rpb24oRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWwpIHsKKyAgICAgICAgc3VwZXIoIkltcG9ydCBkYXRhIik7CisgICAgICAgIHRoaXMuZGF0YVRhYmxlTW9kZWwgPSBkYXRhVGFibGVNb2RlbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgeworICAgICAgICBsYXN0T3BlbkZpbGVzID0gTWFpbi5nZXRVSSgpLnNob3dPcGVuRGlhbG9nKHRydWUpOworICAgICAgICBpZiAobGFzdE9wZW5GaWxlcyAhPSBudWxsKSB7CisgICAgICAgICAgICBuZXcgVGhyZWFkKHRoaXMpLnN0YXJ0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgIE1haW4uZ2V0VUkoKS5zaG93V2FpdERpYWxvZygpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmb3IgKEZpbGUgZiA6IGxhc3RPcGVuRmlsZXMpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uPER1bXBEYXRhPiBkYXRhID0gRHVtcERhdGFJTy5kZXNlcmlhbGl6ZShmKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKER1bXBEYXRhIGQgOiBkYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVGFibGVNb2RlbC5hZGREYXRhKGQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgTWFpbi5nZXRVSSgpLnNob3dNZXNzYWdlRGlhbG9nKCJGYWlsZWQgcmVhZGluZzogIiArIGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBNYWluLmdldFVJKCkuaGlkZVdhaXREaWFsb2coKTsKKyAgICAgICAgfQorCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvUmVsb2FkTGlzdEFjdGlvbi5qYXZhIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9SZWxvYWRMaXN0QWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlmMDU1NwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvUmVsb2FkTGlzdEFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9uczsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5DbGllbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLklEZXZpY2U7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5DbGllbnRVdGlsczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CisKK2ltcG9ydCBqYXZheC5zd2luZy5EZWZhdWx0TGlzdE1vZGVsOworCitwdWJsaWMgY2xhc3MgUmVsb2FkTGlzdEFjdGlvbiBleHRlbmRzIEFic3RyYWN0VGhyZWFkZWREZXZpY2VTcGVjaWZpY0FjdGlvbiB7CisKKyAgICBwcml2YXRlIENsaWVudFV0aWxzIGNsaWVudFV0aWxzOworICAgIHByaXZhdGUgZmluYWwgRGVmYXVsdExpc3RNb2RlbDxDbGllbnQ+IGNsaWVudExpc3RNb2RlbDsKKworICAgIHB1YmxpYyBSZWxvYWRMaXN0QWN0aW9uKENsaWVudFV0aWxzIHV0aWxzLCBJRGV2aWNlIGRldmljZSwKKyAgICAgICAgICAgIERlZmF1bHRMaXN0TW9kZWw8Q2xpZW50PiBjbGllbnRMaXN0TW9kZWwpIHsKKyAgICAgICAgc3VwZXIoIlJlbG9hZCIsIGRldmljZSk7CisgICAgICAgIHRoaXMuY2xpZW50VXRpbHMgPSB1dGlsczsKKyAgICAgICAgdGhpcy5jbGllbnRMaXN0TW9kZWwgPSBjbGllbnRMaXN0TW9kZWw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBDbGllbnRbXSBjbGllbnRzID0gY2xpZW50VXRpbHMuZmluZEFsbENsaWVudHMoZGV2aWNlKTsKKyAgICAgICAgaWYgKGNsaWVudHMgIT0gbnVsbCkgeworICAgICAgICAgICAgQXJyYXlzLnNvcnQoY2xpZW50cywgbmV3IENsaWVudENvbXBhcmF0b3IoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xpZW50TGlzdE1vZGVsLnJlbW92ZUFsbEVsZW1lbnRzKCk7CisgICAgICAgIGZvciAoQ2xpZW50IGMgOiBjbGllbnRzKSB7CisgICAgICAgICAgICBjbGllbnRMaXN0TW9kZWwuYWRkRWxlbWVudChjKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENsaWVudENvbXBhcmF0b3IgaW1wbGVtZW50cyBDb21wYXJhdG9yPENsaWVudD4geworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgaW50IGNvbXBhcmUoQ2xpZW50IG8xLCBDbGllbnQgbzIpIHsKKyAgICAgICAgICAgIFN0cmluZyBzMSA9IG8xLmdldENsaWVudERhdGEoKS5nZXRDbGllbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgU3RyaW5nIHMyID0gbzIuZ2V0Q2xpZW50RGF0YSgpLmdldENsaWVudERlc2NyaXB0aW9uKCk7CisKKyAgICAgICAgICAgIGlmIChzMSA9PSBudWxsIHx8IHMyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBOb3QgZ29vZCwgZGlkbid0IGdldCBhbGwgZGF0YT8KKyAgICAgICAgICAgICAgICByZXR1cm4gKHMxID09IG51bGwpID8gLTEgOiAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gczEuY29tcGFyZVRvKHMyKTsKKyAgICAgICAgfQorCisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvUnVuTW9ua2V5QWN0aW9uLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1J1bk1vbmtleUFjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NWU4NTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1J1bk1vbmtleUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuSURldmljZTsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLkRldmljZVV0aWxzOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuRHVtcERhdGE7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wVGFibGVNb2RlbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLk1haW47CisKK2ltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25FdmVudDsKK2ltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OworCitpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247CisKK3B1YmxpYyBjbGFzcyBSdW5Nb25rZXlBY3Rpb24gZXh0ZW5kcyBBYnN0cmFjdEFjdGlvbiBpbXBsZW1lbnRzIERldmljZVNwZWNpZmljIHsKKworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBERUZBVUxUX01PTktFWV9QQUNLQUdFUyA9CisgICAgICAgICAgICAiY29tLmFuZHJvaWQuY2FsZW5kYXIsY29tLmFuZHJvaWQuZ2FsbGVyeTNkIjsKKworICAgIHByaXZhdGUgSURldmljZSBkZXZpY2U7CisgICAgcHJpdmF0ZSBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbDsKKworICAgIHB1YmxpYyBSdW5Nb25rZXlBY3Rpb24oSURldmljZSBkZXZpY2UsIER1bXBUYWJsZU1vZGVsIGRhdGFUYWJsZU1vZGVsKSB7CisgICAgICAgIHN1cGVyKCJSdW4gbW9ua2V5Iik7CisgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOworICAgICAgICB0aGlzLmRhdGFUYWJsZU1vZGVsID0gZGF0YVRhYmxlTW9kZWw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0RGV2aWNlKElEZXZpY2UgZGV2aWNlKSB7CisgICAgICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CisgICAgICAgIFN0cmluZyBwYWNrYWdlcyA9IE1haW4uZ2V0VUkoKS5zaG93SW5wdXREaWFsb2coIlBsZWFzZSBlbnRlciBwYWNrYWdlcyBuYW1lIHRvIHJ1biB3aXRoIgorICAgICAgICAgICAgICAgICsgIiB0aGUgbW9ua2V5LCBvciBsZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdC4iKTsKKyAgICAgICAgaWYgKHBhY2thZ2VzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFja2FnZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBwYWNrYWdlcyA9IERFRkFVTFRfTU9OS0VZX1BBQ0tBR0VTOworICAgICAgICB9CisgICAgICAgIG5ldyBUaHJlYWQobmV3IFJ1bk1vbmtleVJ1bm5hYmxlKHBhY2thZ2VzKSkuc3RhcnQoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIFJ1bk1vbmtleVJ1bm5hYmxlIGltcGxlbWVudHMgUnVubmFibGUgeworCisgICAgICAgIHByaXZhdGUgU3RyaW5nIHBhY2thZ2VzOworICAgICAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgSVRFUkFUSU9OUyA9IDEwMDA7CisKKyAgICAgICAgcHVibGljIFJ1bk1vbmtleVJ1bm5hYmxlKFN0cmluZyBwYWNrYWdlcykgeworICAgICAgICAgICAgdGhpcy5wYWNrYWdlcyA9IHBhY2thZ2VzOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgICAgIE1haW4uZ2V0VUkoKS5zaG93V2FpdERpYWxvZygpOworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFN0cmluZyBwa2dzW10gPSBwYWNrYWdlcy5zcGxpdCgiLCIpOworCisgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcGtnIDogcGtncykgeworICAgICAgICAgICAgICAgICAgICBNYWluLmdldFVJKCkudXBkYXRlV2FpdERpYWxvZygiUnVubmluZyBtb25rZXkgb24gIiArIHBrZyk7CisKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgcnVubmluZyBhcHAuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVN0b3AocGtnKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGl0dGxlIGJpdCBvZiBicmVhdGhlciBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBEZXZpY2VVdGlscy5kb1NoZWxsKGRldmljZSwgIm1vbmtleSAtcCAiICsgcGtnICsgIiAiICsgSVRFUkFUSU9OUywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZVVuaXQuTUlOVVRFUyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1haW4uZ2V0VUkoKS51cGRhdGVXYWl0RGlhbG9nKCJSZXRyaWV2aW5nIGhlYXAgZGF0YSBmb3IgIiArIHBrZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGEgPSBNYWluLmZpbmRBbmRHZXRDbGFzc0RhdGEoZGV2aWNlLCBwa2cpOworICAgICAgICAgICAgICAgICAgICAgICAgRHVtcERhdGEgZHVtcERhdGEgPSBuZXcgRHVtcERhdGEocGtnLCBkYXRhLCBuZXcgRGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUYWJsZU1vZGVsLmFkZERhdGEoZHVtcERhdGEpOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgcnVubmluZyBhcHAuCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVN0b3AocGtnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgICAgTWFpbi5nZXRVSSgpLmhpZGVXYWl0RGlhbG9nKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHZvaWQgZm9yY2VTdG9wKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICAgICAgLy8gU3RvcCBydW5uaW5nIGFwcC4KKyAgICAgICAgICAgIERldmljZVV0aWxzLmRvU2hlbGwoZGV2aWNlLCAiZm9yY2Utc3RvcCAiICsgcGFja2FnZU5hbWUsIDUsIFRpbWVVbml0LlNFQ09ORFMpOworICAgICAgICAgICAgRGV2aWNlVXRpbHMuZG9TaGVsbChkZXZpY2UsICJraWxsICIgKyBwYWNrYWdlTmFtZSwgNSwgVGltZVVuaXQuU0VDT05EUyk7CisgICAgICAgICAgICBEZXZpY2VVdGlscy5kb1NoZWxsKGRldmljZSwgImtpbGwgYHBpZCAiICsgcGFja2FnZU5hbWUgKyAiYCIsIDUsIFRpbWVVbml0LlNFQ09ORFMpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvU2NhbkFsbFBhY2thZ2VzQWN0aW9uLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1NjYW5BbGxQYWNrYWdlc0FjdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NGI4YTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1NjYW5BbGxQYWNrYWdlc0FjdGlvbi5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9uczsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5DbGllbnQ7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLklEZXZpY2U7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5DbGllbnRVdGlsczsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLkR1bXBEYXRhOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuRHVtcFRhYmxlTW9kZWw7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5NYWluOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworcHVibGljIGNsYXNzIFNjYW5BbGxQYWNrYWdlc0FjdGlvbiBleHRlbmRzIEFic3RyYWN0VGhyZWFkZWREZXZpY2VTcGVjaWZpY0FjdGlvbiB7CisKKyAgICBwcml2YXRlIENsaWVudFV0aWxzIGNsaWVudFV0aWxzOworICAgIHByaXZhdGUgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWw7CisKKyAgICBwdWJsaWMgU2NhbkFsbFBhY2thZ2VzQWN0aW9uKENsaWVudFV0aWxzIHV0aWxzLCBJRGV2aWNlIGRldmljZSwgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWwpIHsKKyAgICAgICAgc3VwZXIoIlNjYW4gYWxsIHBhY2thZ2VzIiwgZGV2aWNlKTsKKyAgICAgICAgdGhpcy5jbGllbnRVdGlscyA9IHV0aWxzOworICAgICAgICB0aGlzLmRhdGFUYWJsZU1vZGVsID0gZGF0YVRhYmxlTW9kZWw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBNYWluLmdldFVJKCkuc2hvd1dhaXREaWFsb2coKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xpZW50W10gY2xpZW50cyA9IGNsaWVudFV0aWxzLmZpbmRBbGxDbGllbnRzKGRldmljZSk7CisgICAgICAgICAgICBmb3IgKENsaWVudCBjIDogY2xpZW50cykgeworICAgICAgICAgICAgICAgIFN0cmluZyBwa2cgPSBjLmdldENsaWVudERhdGEoKS5nZXRDbGllbnREZXNjcmlwdGlvbigpOworICAgICAgICAgICAgICAgIE1haW4uZ2V0VUkoKS5zaG93V2FpdERpYWxvZygpOworICAgICAgICAgICAgICAgIE1haW4uZ2V0VUkoKS51cGRhdGVXYWl0RGlhbG9nKCJSZXRyaWV2aW5nIGhlYXAgZGF0YSBmb3IgIiArIHBrZyk7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGRhdGEgPSBNYWluLmdldENsYXNzRGF0YVJldHJpZXZlcigpLmdldENsYXNzRGF0YShjKTsKKyAgICAgICAgICAgICAgICAgICAgRHVtcERhdGEgZHVtcERhdGEgPSBuZXcgRHVtcERhdGEocGtnLCBkYXRhLCBuZXcgRGF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVRhYmxlTW9kZWwuYWRkRGF0YShkdW1wRGF0YSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBNYWluLmdldFVJKCkuaGlkZVdhaXREaWFsb2coKTsKKyAgICAgICAgfQorICAgIH0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1NjYW5QYWNrYWdlQWN0aW9uLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9hY3Rpb25zL1NjYW5QYWNrYWdlQWN0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0OTJiZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvU2NhblBhY2thZ2VBY3Rpb24uamF2YQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkLmFjdGlvbnM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5JRGV2aWNlOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuQ2xpZW50VXRpbHM7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wRGF0YTsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLkR1bXBUYWJsZU1vZGVsOworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuTWFpbjsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK3B1YmxpYyBjbGFzcyBTY2FuUGFja2FnZUFjdGlvbiBleHRlbmRzIEFic3RyYWN0VGhyZWFkZWREZXZpY2VTcGVjaWZpY0FjdGlvbiB7CisKKyAgICBwcml2YXRlIENsaWVudFV0aWxzIGNsaWVudFV0aWxzOworICAgIHByaXZhdGUgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWw7CisKKyAgICBwdWJsaWMgU2NhblBhY2thZ2VBY3Rpb24oQ2xpZW50VXRpbHMgdXRpbHMsIElEZXZpY2UgZGV2aWNlLCBEdW1wVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbCkgeworICAgICAgICBzdXBlcigiU2NhbiBwYWNrYWdlIiwgZGV2aWNlKTsKKyAgICAgICAgdGhpcy5jbGllbnRVdGlscyA9IHV0aWxzOworICAgICAgICB0aGlzLmRhdGFUYWJsZU1vZGVsID0gZGF0YVRhYmxlTW9kZWw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICBNYWluLmdldFVJKCkuc2hvd1dhaXREaWFsb2coKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgQ2xpZW50IGNsaWVudCA9IE1haW4uZ2V0VUkoKS5nZXRTZWxlY3RlZENsaWVudCgpOworICAgICAgICAgICAgaWYgKGNsaWVudCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgd29yayhjbGllbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDbGllbnRbXSBjbGllbnRzID0gY2xpZW50VXRpbHMuZmluZEFsbENsaWVudHMoZGV2aWNlKTsKKyAgICAgICAgICAgICAgICBpZiAoY2xpZW50cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIENsaWVudFdyYXBwZXJbXSBjbGllbnRXcmFwcGVycyA9IG5ldyBDbGllbnRXcmFwcGVyW2NsaWVudHMubGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGllbnRXcmFwcGVycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50V3JhcHBlcnNbaV0gPSBuZXcgQ2xpZW50V3JhcHBlcihjbGllbnRzW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBNYWluLmdldFVJKCkuaGlkZVdhaXREaWFsb2coKTsKKworICAgICAgICAgICAgICAgICAgICBDbGllbnRXcmFwcGVyIHJldCA9IE1haW4uZ2V0VUkoKS5zaG93Q2hvaWNlRGlhbG9nKCJDaG9vc2UgYSBwYWNrYWdlIHRvIHNjYW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaG9vc2UgcGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50V3JhcHBlcnMpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmsocmV0LmNsaWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBNYWluLmdldFVJKCkuaGlkZVdhaXREaWFsb2coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgdm9pZCB3b3JrKENsaWVudCBjKSB7CisgICAgICAgIFN0cmluZyBwa2cgPSBjLmdldENsaWVudERhdGEoKS5nZXRDbGllbnREZXNjcmlwdGlvbigpOworICAgICAgICBNYWluLmdldFVJKCkuc2hvd1dhaXREaWFsb2coKTsKKyAgICAgICAgTWFpbi5nZXRVSSgpLnVwZGF0ZVdhaXREaWFsb2coIlJldHJpZXZpbmcgaGVhcCBkYXRhIGZvciAiICsgcGtnKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhID0gTWFpbi5maW5kQW5kR2V0Q2xhc3NEYXRhKGRldmljZSwgcGtnKTsKKyAgICAgICAgICAgIER1bXBEYXRhIGR1bXBEYXRhID0gbmV3IER1bXBEYXRhKHBrZywgZGF0YSwgbmV3IERhdGUoKSk7CisgICAgICAgICAgICBkYXRhVGFibGVNb2RlbC5hZGREYXRhKGR1bXBEYXRhKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDbGllbnRXcmFwcGVyIHsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50OworCisgICAgICAgIHB1YmxpYyBDbGllbnRXcmFwcGVyKENsaWVudCBjKSB7CisgICAgICAgICAgICBjbGllbnQgPSBjOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgICAgICByZXR1cm4gY2xpZW50LmdldENsaWVudERhdGEoKS5nZXRDbGllbnREZXNjcmlwdGlvbigpICsgIiAocGlkICIKKyAgICAgICAgICAgICAgICAgICAgKyBjbGllbnQuZ2V0Q2xpZW50RGF0YSgpLmdldFBpZCgpICsgIikiOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvU2hvd0RhdGFBY3Rpb24uamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2FjdGlvbnMvU2hvd0RhdGFBY3Rpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmIxNzVmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvYWN0aW9ucy9TaG93RGF0YUFjdGlvbi5qYXZhCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQuYWN0aW9uczsKKworaW1wb3J0IGNvbS5hbmRyb2lkLnByZWxvYWQuRHVtcERhdGE7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC5EdW1wVGFibGVNb2RlbDsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLk1haW47CisKK2ltcG9ydCBqYXZhLmF3dC5Cb3JkZXJMYXlvdXQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgamF2YXguc3dpbmcuQWJzdHJhY3RBY3Rpb247CitpbXBvcnQgamF2YXguc3dpbmcuSkZyYW1lOworaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOworaW1wb3J0IGphdmF4LnN3aW5nLkpUZXh0QXJlYTsKKworcHVibGljIGNsYXNzIFNob3dEYXRhQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RBY3Rpb24geworICAgIHByaXZhdGUgRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWw7CisKKyAgICBwdWJsaWMgU2hvd0RhdGFBY3Rpb24oRHVtcFRhYmxlTW9kZWwgZGF0YVRhYmxlTW9kZWwpIHsKKyAgICAgICAgc3VwZXIoIlNob3cgZGF0YSIpOworICAgICAgICB0aGlzLmRhdGFUYWJsZU1vZGVsID0gZGF0YVRhYmxlTW9kZWw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKEFjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgLy8gVE9ETyhhZ2FtcGUpOiBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICBpbnQgc2VsUm93ID0gTWFpbi5nZXRVSSgpLmdldFNlbGVjdGVkRGF0YVRhYmxlUm93KCk7CisgICAgICAgIGlmIChzZWxSb3cgIT0gLTEpIHsKKyAgICAgICAgICAgIER1bXBEYXRhIGRhdGEgPSBkYXRhVGFibGVNb2RlbC5nZXREYXRhKCkuZ2V0KHNlbFJvdyk7CisgICAgICAgICAgICBNYXA8U3RyaW5nLCBTZXQ8U3RyaW5nPj4gaW52ID0gZGF0YS5pbnZlcnREYXRhKCk7CisKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKyAgICAgICAgICAgIC8vIEZpcnN0IGJvb3RjbGFzc3BhdGguCisgICAgICAgICAgICBhZGQoYnVpbGRlciwgIkJvb3QgY2xhc3NwYXRoOiIsIGludi5nZXQobnVsbCkpOworCisgICAgICAgICAgICAvLyBOb3cgZXZlcnl0aGluZyBlbHNlLgorICAgICAgICAgICAgZm9yIChTdHJpbmcgayA6IGludi5rZXlTZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChrICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIj09PT09PT09PT09PT09PT09PVxuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkKGJ1aWxkZXIsIGssIGludi5nZXQoaykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSkZyYW1lIG5ld0ZyYW1lID0gbmV3IEpGcmFtZShkYXRhLmdldFBhY2thZ2VOYW1lKCkgKyAiICIgKyBkYXRhLmdldERhdGUoKSk7CisgICAgICAgICAgICBuZXdGcmFtZS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkhJREVfT05fQ0xPU0UpOworICAgICAgICAgICAgbmV3RnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQobmV3IEpTY3JvbGxQYW5lKG5ldyBKVGV4dEFyZWEoYnVpbGRlci50b1N0cmluZygpKSksCisgICAgICAgICAgICAgICAgICAgIEJvcmRlckxheW91dC5DRU5URVIpOworICAgICAgICAgICAgbmV3RnJhbWUuc2V0U2l6ZSg4MDAsIDYwMCk7CisgICAgICAgICAgICBuZXdGcmFtZS5zZXRMb2NhdGlvblJlbGF0aXZlVG8obnVsbCk7CisgICAgICAgICAgICBuZXdGcmFtZS5zZXRWaXNpYmxlKHRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZChTdHJpbmdCdWlsZGVyIGJ1aWxkZXIsIFN0cmluZyBoZWFkLCBTZXQ8U3RyaW5nPiBzZXQpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaGVhZCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICBhZGRTZXQoYnVpbGRlciwgc2V0KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGFkZFNldChTdHJpbmdCdWlsZGVyIGJ1aWxkZXIsIFNldDxTdHJpbmc+IHNldCkgeworICAgICAgICBpZiAoc2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgIE5PTkVcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIExpc3Q8U3RyaW5nPiBzb3J0ZWQgPSBuZXcgQXJyYXlMaXN0PD4oc2V0KTsKKyAgICAgICAgQ29sbGVjdGlvbnMuc29ydChzb3J0ZWQpOworICAgICAgICBmb3IgKFN0cmluZyBzIDogc29ydGVkKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChzKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCdcbicpOworICAgICAgICB9CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2NsYXNzZGF0YXJldHJpZXZhbC9DbGFzc0RhdGFSZXRyaWV2ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYzJQpjb3B5IGZyb20gcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL3JlY2VudHMvZXZlbnRzL3VpL1Jlc2l6ZVRhc2tFdmVudC5qYXZhCmNvcHkgdG8gdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL0NsYXNzRGF0YVJldHJpZXZlci5qYXZhCmluZGV4IGUwZDgzZmQuLmYwNDM2MGYgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzL1N5c3RlbVVJL3NyYy9jb20vYW5kcm9pZC9zeXN0ZW11aS9yZWNlbnRzL2V2ZW50cy91aS9SZXNpemVUYXNrRXZlbnQuamF2YQorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9jbGFzc2RhdGFyZXRyaWV2YWwvQ2xhc3NEYXRhUmV0cmlldmVyLmphdmEKQEAgLTE0LDE5ICsxNCwxNiBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy51aTsKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5jbGFzc2RhdGFyZXRyaWV2YWw7CiAKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLmV2ZW50cy5FdmVudEJ1czsKLWltcG9ydCBjb20uYW5kcm9pZC5zeXN0ZW11aS5yZWNlbnRzLm1vZGVsLlRhc2s7CitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkNsaWVudDsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIC8qKgotICogVGhpcyBpcyBzZW50IHdoZW4gYSB7QGxpbmsgVGFza30gaXMgcmVzaXplZC4KKyAqIFJldHJpZXZlIGEgY2xhc3MtdG8tY2xhc3Nsb2FkZXIgbWFwIGZvciBsb2FkZWQgY2xhc3NlcyBmcm9tIHRoZSBjbGllbnQuCiAgKi8KLXB1YmxpYyBjbGFzcyBSZXNpemVUYXNrRXZlbnQgZXh0ZW5kcyBFdmVudEJ1cy5FdmVudCB7CitwdWJsaWMgaW50ZXJmYWNlIENsYXNzRGF0YVJldHJpZXZlciB7CiAKLSAgICBwdWJsaWMgZmluYWwgVGFzayB0YXNrOwotCi0gICAgcHVibGljIFJlc2l6ZVRhc2tFdmVudChUYXNrIHRhc2spIHsKLSAgICAgICAgdGhpcy50YXNrID0gdGFzazsKLSAgICB9CisgICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0Q2xhc3NEYXRhKENsaWVudCBjbGllbnQpOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2hwcm9mL0dlbmVyYWxIcHJvZkR1bXBIYW5kbGVyLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9jbGFzc2RhdGFyZXRyaWV2YWwvaHByb2YvR2VuZXJhbEhwcm9mRHVtcEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDc5N2VlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2hwcm9mL0dlbmVyYWxIcHJvZkR1bXBIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5jbGFzc2RhdGFyZXRyaWV2YWwuaHByb2Y7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5DbGllbnREYXRhLklIcHJvZkR1bXBIYW5kbGVyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworcHVibGljIGNsYXNzIEdlbmVyYWxIcHJvZkR1bXBIYW5kbGVyIGltcGxlbWVudHMgSUhwcm9mRHVtcEhhbmRsZXIgeworCisgICAgcHJpdmF0ZSBMaXN0PElIcHJvZkR1bXBIYW5kbGVyPiBoYW5kbGVycyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisgICAgcHVibGljIHZvaWQgYWRkSGFuZGxlcihJSHByb2ZEdW1wSGFuZGxlciBoKSB7CisgICAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJzKSB7CisgICAgICAgIGhhbmRsZXJzLmFkZChoKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVIYW5kbGVyKElIcHJvZkR1bXBIYW5kbGVyIGgpIHsKKyAgICAgIHN5bmNocm9uaXplZCAoaGFuZGxlcnMpIHsKKyAgICAgICAgaGFuZGxlcnMucmVtb3ZlKGgpOworICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgTGlzdDxJSHByb2ZEdW1wSGFuZGxlcj4gZ2V0SXRlcmF0aW9uTGlzdCgpIHsKKyAgICAgIHN5bmNocm9uaXplZCAoaGFuZGxlcnMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8PihoYW5kbGVycyk7CisgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgb25FbmRGYWlsdXJlKENsaWVudCBhcmcwLCBTdHJpbmcgYXJnMSkgeworICAgICAgTGlzdDxJSHByb2ZEdW1wSGFuZGxlcj4gaXRlckxpc3QgPSBnZXRJdGVyYXRpb25MaXN0KCk7CisgICAgICBmb3IgKElIcHJvZkR1bXBIYW5kbGVyIGggOiBpdGVyTGlzdCkgeworICAgICAgICBoLm9uRW5kRmFpbHVyZShhcmcwLCBhcmcxKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBvblN1Y2Nlc3MoU3RyaW5nIGFyZzAsIENsaWVudCBhcmcxKSB7CisgICAgICBMaXN0PElIcHJvZkR1bXBIYW5kbGVyPiBpdGVyTGlzdCA9IGdldEl0ZXJhdGlvbkxpc3QoKTsKKyAgICAgIGZvciAoSUhwcm9mRHVtcEhhbmRsZXIgaCA6IGl0ZXJMaXN0KSB7CisgICAgICAgIGgub25TdWNjZXNzKGFyZzAsIGFyZzEpOworICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIG9uU3VjY2VzcyhieXRlW10gYXJnMCwgQ2xpZW50IGFyZzEpIHsKKyAgICAgIExpc3Q8SUhwcm9mRHVtcEhhbmRsZXI+IGl0ZXJMaXN0ID0gZ2V0SXRlcmF0aW9uTGlzdCgpOworICAgICAgZm9yIChJSHByb2ZEdW1wSGFuZGxlciBoIDogaXRlckxpc3QpIHsKKyAgICAgICAgaC5vblN1Y2Nlc3MoYXJnMCwgYXJnMSk7CisgICAgICB9CisgICAgfQorICB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2hwcm9mL0hwcm9mLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9jbGFzc2RhdGFyZXRyaWV2YWwvaHByb2YvSHByb2YuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWI3YTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2hwcm9mL0hwcm9mLmphdmEKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQuY2xhc3NkYXRhcmV0cmlldmFsLmhwcm9mOworCitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkNsaWVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50RGF0YTsKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50RGF0YS5JSHByb2ZEdW1wSGFuZGxlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmNsYXNzZGF0YXJldHJpZXZhbC5DbGFzc0RhdGFSZXRyaWV2ZXI7CitpbXBvcnQgY29tLmFuZHJvaWQucHJlbG9hZC51aS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IGNvbS5hbmRyb2lkLnRvb2xzLnBlcmZsaWIuY2FwdHVyZXMuTWVtb3J5TWFwcGVkRmlsZUJ1ZmZlcjsKK2ltcG9ydCBjb20uYW5kcm9pZC50b29scy5wZXJmbGliLmhlYXAuQ2xhc3NPYmo7CitpbXBvcnQgY29tLmFuZHJvaWQudG9vbHMucGVyZmxpYi5oZWFwLlF1ZXJpZXM7CitpbXBvcnQgY29tLmFuZHJvaWQudG9vbHMucGVyZmxpYi5oZWFwLlNuYXBzaG90OworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworcHVibGljIGNsYXNzIEhwcm9mIGltcGxlbWVudHMgQ2xhc3NEYXRhUmV0cmlldmVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIEdlbmVyYWxIcHJvZkR1bXBIYW5kbGVyIGhwcm9mSGFuZGxlcjsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0KCkgeworICAgICAgICBzeW5jaHJvbml6ZWQoSHByb2YuY2xhc3MpIHsKKyAgICAgICAgICAgIGlmIChocHJvZkhhbmRsZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIENsaWVudERhdGEuc2V0SHByb2ZEdW1wSGFuZGxlcihocHJvZkhhbmRsZXIgPSBuZXcgR2VuZXJhbEhwcm9mRHVtcEhhbmRsZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIEZpbGUgZG9IcHJvZihDbGllbnQgY2xpZW50LCBpbnQgdGltZW91dCkgeworICAgICAgICBHZXRIcHJvZiBnaCA9IG5ldyBHZXRIcHJvZihjbGllbnQsIHRpbWVvdXQpOworICAgICAgICByZXR1cm4gZ2guZ2V0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgbWFwIG9mIGNsYXNzIG5hbWVzIHRvIGNsYXNzLWxvYWRlciBuYW1lcyBkZXJpdmVkIGZyb20gdGhlIGhwcm9mIGR1bXAuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaHByb2ZMb2NhbEZpbGUKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gYW5hbHl6ZUhwcm9mKEZpbGUgaHByb2ZMb2NhbEZpbGUpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTbmFwc2hvdCBzbmFwc2hvdCA9IFNuYXBzaG90LmNyZWF0ZVNuYXBzaG90KG5ldyBNZW1vcnlNYXBwZWRGaWxlQnVmZmVyKGhwcm9mTG9jYWxGaWxlKSk7CisKKyAgICAgICAgTWFwPFN0cmluZywgU2V0PENsYXNzT2JqPj4gY2xhc3NlcyA9IFF1ZXJpZXMuY2xhc3NlcyhzbmFwc2hvdCwgbnVsbCk7CisgICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmV0VmFsdWUgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKyAgICAgICAgZm9yIChNYXAuRW50cnk8U3RyaW5nLCBTZXQ8Q2xhc3NPYmo+PiBlIDogY2xhc3Nlcy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICBmb3IgKENsYXNzT2JqIGMgOiBlLmdldFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY2wgPSBjLmdldENsYXNzTG9hZGVyKCkgPT0gbnVsbCA/IG51bGwgOiBjLmdldENsYXNzTG9hZGVyKCkudG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY05hbWUgPSBjLmdldENsYXNzTmFtZSgpOworICAgICAgICAgICAgICAgIGludCBhRGVwdGggPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChjTmFtZS5lbmRzV2l0aCgiW10iKSkgeworICAgICAgICAgICAgICAgICAgICBjTmFtZSA9IGNOYW1lLnN1YnN0cmluZygwLCBjTmFtZS5sZW5ndGgoKS0yKTsKKyAgICAgICAgICAgICAgICAgICAgYURlcHRoKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFN0cmluZyBuZXdOYW1lID0gdHJhbnNmb3JtUHJpbWl0aXZlQ2xhc3MoY05hbWUpOworICAgICAgICAgICAgICAgIGlmIChhRGVwdGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gdXNlIGtpbmQtYSBkZXNjcmlwdG9yIHN5bnRheC4gSWYgaXQgd2FzIHRyYW5zZm9ybWVkLCBpdCBpcyBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgICAgIGlmIChuZXdOYW1lLmVxdWFscyhjTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05hbWUgPSAiTCIgKyBuZXdOYW1lICsgIjsiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYURlcHRoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld05hbWUgPSAiWyIgKyBuZXdOYW1lOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldFZhbHVlLnB1dChuZXdOYW1lLCBjbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGcmVlIHVwIG1lbW9yeS4KKyAgICAgICAgc25hcHNob3QuZGlzcG9zZSgpOworCisgICAgICAgIHJldHVybiByZXRWYWx1ZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IHByaW1pdGl2ZU1hcHBpbmc7CisKKyAgICBzdGF0aWMgeworICAgICAgICBwcmltaXRpdmVNYXBwaW5nID0gbmV3IEhhc2hNYXA8PigpOworICAgICAgICBwcmltaXRpdmVNYXBwaW5nLnB1dCgiYm9vbGVhbiIsICJaIik7CisgICAgICAgIHByaW1pdGl2ZU1hcHBpbmcucHV0KCJieXRlIiwgIkIiKTsKKyAgICAgICAgcHJpbWl0aXZlTWFwcGluZy5wdXQoImNoYXIiLCAiQyIpOworICAgICAgICBwcmltaXRpdmVNYXBwaW5nLnB1dCgiZG91YmxlIiwgIkQiKTsKKyAgICAgICAgcHJpbWl0aXZlTWFwcGluZy5wdXQoImZsb2F0IiwgIkYiKTsKKyAgICAgICAgcHJpbWl0aXZlTWFwcGluZy5wdXQoImludCIsICJJIik7CisgICAgICAgIHByaW1pdGl2ZU1hcHBpbmcucHV0KCJsb25nIiwgIkoiKTsKKyAgICAgICAgcHJpbWl0aXZlTWFwcGluZy5wdXQoInNob3J0IiwgIlMiKTsKKyAgICAgICAgcHJpbWl0aXZlTWFwcGluZy5wdXQoInZvaWQiLCAiViIpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyB0cmFuc2Zvcm1QcmltaXRpdmVDbGFzcyhTdHJpbmcgbmFtZSkgeworICAgICAgICBTdHJpbmcgcmVwID0gcHJpbWl0aXZlTWFwcGluZy5nZXQobmFtZSk7CisgICAgICAgIGlmIChyZXAgIT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIHJlcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBHZXRIcHJvZiBpbXBsZW1lbnRzIElIcHJvZkR1bXBIYW5kbGVyIHsKKworICAgICAgICBwcml2YXRlIEZpbGUgdGFyZ2V0OworICAgICAgICBwcml2YXRlIGxvbmcgdGltZW91dDsKKyAgICAgICAgcHJpdmF0ZSBDbGllbnQgY2xpZW50OworCisgICAgICAgIHB1YmxpYyBHZXRIcHJvZihDbGllbnQgY2xpZW50LCBsb25nIHRpbWVvdXQpIHsKKyAgICAgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OworICAgICAgICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyBGaWxlIGdldCgpIHsKKyAgICAgICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgeworICAgICAgICAgICAgICAgIGhwcm9mSGFuZGxlci5hZGRIYW5kbGVyKHRoaXMpOworICAgICAgICAgICAgICAgIGNsaWVudC5kdW1wSHByb2YoKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXQodGltZW91dCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGhwcm9mSGFuZGxlci5yZW1vdmVIYW5kbGVyKHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgdm9pZCB3YWtlVXAoKSB7CisgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKKyAgICAgICAgICAgICAgICBub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvbkVuZEZhaWx1cmUoQ2xpZW50IGFyZzAsIFN0cmluZyBhcmcxKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldEhwcm9mLm9uRW5kRmFpbHVyZSIpOworICAgICAgICAgICAgaWYgKGNsaWVudCA9PSBhcmcwKSB7CisgICAgICAgICAgICAgICAgd2FrZVVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIHN0YXRpYyBGaWxlIGNyZWF0ZVRhcmdldEZpbGUoKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJldHVybiBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJkZG1zIiwgIi5ocHJvZiIpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwdWJsaWMgdm9pZCBvblN1Y2Nlc3MoU3RyaW5nIGFyZzAsIENsaWVudCBhcmcxKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkdldEhwcm9mLm9uU3VjY2VzcyIpOworICAgICAgICAgICAgaWYgKGNsaWVudCA9PSBhcmcxKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gY3JlYXRlVGFyZ2V0RmlsZSgpOworICAgICAgICAgICAgICAgICAgICBhcmcxLmdldERldmljZSgpLmdldFN5bmNTZXJ2aWNlKCkucHVsbEZpbGUoYXJnMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0QWJzb2x1dGVGaWxlKCkudG9TdHJpbmcoKSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2FrZVVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIHZvaWQgb25TdWNjZXNzKGJ5dGVbXSBhcmcwLCBDbGllbnQgYXJnMSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJHZXRIcHJvZi5vblN1Y2Nlc3MiKTsKKyAgICAgICAgICAgIGlmIChjbGllbnQgPT0gYXJnMSkgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGNyZWF0ZVRhcmdldEZpbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgQnVmZmVyZWRPdXRwdXRTdHJlYW0gb3V0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0obmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShhcmcwKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2FrZVVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGludCB0aW1lb3V0OworCisgICAgcHVibGljIEhwcm9mKGludCB0aW1lb3V0KSB7CisgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0Q2xhc3NEYXRhKENsaWVudCBjbGllbnQpIHsKKyAgICAgICAgRmlsZSBocHJvZkxvY2FsRmlsZSA9IEhwcm9mLmRvSHByb2YoY2xpZW50LCB0aW1lb3V0KTsKKyAgICAgICAgaWYgKGhwcm9mTG9jYWxGaWxlID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgZ2V0dGluZyBkdW1wLi4uIik7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJEdW1wIGZpbGUgaXMgIiArIGhwcm9mTG9jYWxGaWxlKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGFuYWx5emVIcHJvZihocHJvZkxvY2FsRmlsZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2NsYXNzZGF0YXJldHJpZXZhbC9qZHdwL0pEV1BDbGFzc0RhdGFSZXRyaWV2ZXIuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL2NsYXNzZGF0YXJldHJpZXZhbC9qZHdwL0pEV1BDbGFzc0RhdGFSZXRyaWV2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQ0Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2pkd3AvSkRXUENsYXNzRGF0YVJldHJpZXZlci5qYXZhCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjb20uYW5kcm9pZC5wcmVsb2FkLmNsYXNzZGF0YXJldHJpZXZhbC5qZHdwOworCitpbXBvcnQgY29tLmFuZHJvaWQuZGRtbGliLkNsaWVudDsKK2ltcG9ydCBjb20uYW5kcm9pZC5wcmVsb2FkLmNsYXNzZGF0YXJldHJpZXZhbC5DbGFzc0RhdGFSZXRyaWV2ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuanBkYS50ZXN0cy5mcmFtZXdvcmsuamR3cC5Db21tYW5kUGFja2V0OworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLmZyYW1ld29yay5qZHdwLkpEV1BDb21tYW5kczsKK2ltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuanBkYS50ZXN0cy5mcmFtZXdvcmsuamR3cC5KRFdQQ29uc3RhbnRzOworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLmZyYW1ld29yay5qZHdwLlJlcGx5UGFja2V0OworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLmpkd3Auc2hhcmUuSkRXUFRlc3RDYXNlOworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLmpkd3Auc2hhcmUuSkRXUFVuaXREZWJ1Z2dlZVdyYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5oYXJtb255LmpwZGEudGVzdHMuc2hhcmUuSlBEQUxvZ1dyaXRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLmhhcm1vbnkuanBkYS50ZXN0cy5zaGFyZS5KUERBVGVzdE9wdGlvbnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgSkRXUENsYXNzRGF0YVJldHJpZXZlciBleHRlbmRzIEpEV1BUZXN0Q2FzZSBpbXBsZW1lbnRzIENsYXNzRGF0YVJldHJpZXZlciB7CisKKyAgICBwcml2YXRlIGZpbmFsIENsaWVudCBjbGllbnQ7CisKKyAgICBwdWJsaWMgSkRXUENsYXNzRGF0YVJldHJpZXZlcigpIHsKKyAgICAgICAgdGhpcyhudWxsKTsKKyAgICB9CisKKyAgICBwdWJsaWMgSkRXUENsYXNzRGF0YVJldHJpZXZlcihDbGllbnQgY2xpZW50KSB7CisgICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50OworICAgIH0KKworCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIFN0cmluZyBnZXREZWJ1Z2dlZUNsYXNzTmFtZSgpIHsKKyAgICAgICAgcmV0dXJuICI8dW5zZXQ+IjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXRDbGFzc0RhdGEoQ2xpZW50IGNsaWVudCkgeworICAgICAgICByZXR1cm4gbmV3IEpEV1BDbGFzc0RhdGFSZXRyaWV2ZXIoY2xpZW50KS5yZXRyaWV2ZSgpOworICAgIH0KKworICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiByZXRyaWV2ZSgpIHsKKyAgICAgICAgaWYgKGNsaWVudCA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKworICAgICAgICBzZXR0aW5ncyA9IGNyZWF0ZVRlc3RPcHRpb25zKCJsb2NhbGhvc3Q6IiArIFN0cmluZy52YWx1ZU9mKGNsaWVudC5nZXREZWJ1Z2dlckxpc3RlblBvcnQoKSkpOworICAgICAgICBzZXR0aW5ncy5zZXREZWJ1Z2dlZVN1c3BlbmQoIm4iKTsKKworICAgICAgICBsb2dXcml0ZXIgPSBuZXcgSlBEQUxvZ1dyaXRlcihTeXN0ZW0ub3V0LCAiIiwgZmFsc2UpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpbnRlcm5hbFNldFVwKCk7CisKKyAgICAgICAgICAgIHJldHVybiByZXRyaWV2ZUltcGwoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGludGVybmFsVGVhckRvd24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiByZXRyaWV2ZUltcGwoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBTdXNwZW5kIHRoZSBhcHAuCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29tbWFuZFBhY2tldCBwYWNrZXQgPSBuZXcgQ29tbWFuZFBhY2tldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEpEV1BDb21tYW5kcy5WaXJ0dWFsTWFjaGluZUNvbW1hbmRTZXQuQ29tbWFuZFNldElELAorICAgICAgICAgICAgICAgICAgICAgICAgSkRXUENvbW1hbmRzLlZpcnR1YWxNYWNoaW5lQ29tbWFuZFNldC5TdXNwZW5kQ29tbWFuZCk7CisgICAgICAgICAgICAgICAgUmVwbHlQYWNrZXQgcmVwbHkgPSBkZWJ1Z2dlZVdyYXBwZXIudm1NaXJyb3IucGVyZm9ybUNvbW1hbmQocGFja2V0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVwbHkuZ2V0RXJyb3JDb2RlKCkgIT0gSkRXUENvbnN0YW50cy5FcnJvci5OT05FKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTGlzdCBhbGwgY2xhc3Nlcy4KKyAgICAgICAgICAgIENvbW1hbmRQYWNrZXQgcGFja2V0ID0gbmV3IENvbW1hbmRQYWNrZXQoCisgICAgICAgICAgICAgICAgICAgIEpEV1BDb21tYW5kcy5WaXJ0dWFsTWFjaGluZUNvbW1hbmRTZXQuQ29tbWFuZFNldElELAorICAgICAgICAgICAgICAgICAgICBKRFdQQ29tbWFuZHMuVmlydHVhbE1hY2hpbmVDb21tYW5kU2V0LkFsbENsYXNzZXNDb21tYW5kKTsKKyAgICAgICAgICAgIFJlcGx5UGFja2V0IHJlcGx5ID0gZGVidWdnZWVXcmFwcGVyLnZtTWlycm9yLnBlcmZvcm1Db21tYW5kKHBhY2tldCk7CisKKyAgICAgICAgICAgIGlmIChyZXBseS5nZXRFcnJvckNvZGUoKSAhPSBKRFdQQ29uc3RhbnRzLkVycm9yLk5PTkUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IGNsYXNzQ291bnQgPSByZXBseS5nZXROZXh0VmFsdWVBc0ludCgpOworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW50aW1lIHJlcG9ydGVkICIgKyBjbGFzc0NvdW50ICsgIiBjbGFzc2VzLiIpOworCisgICAgICAgICAgICBNYXA8TG9uZywgU3RyaW5nPiBjbGFzc2VzID0gbmV3IEhhc2hNYXA8TG9uZywgU3RyaW5nPigpOworICAgICAgICAgICAgTWFwPExvbmcsIFN0cmluZz4gYXJyYXlDbGFzc2VzID0gbmV3IEhhc2hNYXA8TG9uZywgU3RyaW5nPigpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzQ291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIGJ5dGUgcmVmVHlwZVRhZyA9IHJlcGx5LmdldE5leHRWYWx1ZUFzQnl0ZSgpOworICAgICAgICAgICAgICAgIGxvbmcgdHlwZUlEID0gcmVwbHkuZ2V0TmV4dFZhbHVlQXNSZWZlcmVuY2VUeXBlSUQoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlID0gcmVwbHkuZ2V0TmV4dFZhbHVlQXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAvKiBpbnQgc3RhdHVzID0gKi8gcmVwbHkuZ2V0TmV4dFZhbHVlQXNJbnQoKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocmVmVHlwZVRhZykgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEpEV1BDb25zdGFudHMuVHlwZVRhZy5DTEFTUzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKRFdQQ29uc3RhbnRzLlR5cGVUYWcuSU5URVJGQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXQodHlwZUlELCBzaWduYXR1cmUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKRFdQQ29uc3RhbnRzLlR5cGVUYWcuQVJSQVk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnJheUNsYXNzZXMucHV0KHR5cGVJRCwgc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHQgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworICAgICAgICAgICAgLy8gUGFyc2UgYWxsIGNsYXNzZXMuCisgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxMb25nLCBTdHJpbmc+IGVudHJ5IDogY2xhc3Nlcy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgbG9uZyB0eXBlSUQgPSBlbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlID0gZW50cnkuZ2V0VmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmICghY2hlY2tDbGFzcyh0eXBlSUQsIHNpZ25hdHVyZSwgcmVzdWx0KSkgeworICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIklzc3VlIGludmVzdGlnYXRpbmcgIiArIHNpZ25hdHVyZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBGb3IgYXJyYXlzLCBsb29rIGF0IHRoZSBsZWFmIGNvbXBvbmVudCB0eXBlLgorICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8TG9uZywgU3RyaW5nPiBlbnRyeSA6IGFycmF5Q2xhc3Nlcy5lbnRyeVNldCgpKSB7CisgICAgICAgICAgICAgICAgbG9uZyB0eXBlSUQgPSBlbnRyeS5nZXRLZXkoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2lnbmF0dXJlID0gZW50cnkuZ2V0VmFsdWUoKTsKKworICAgICAgICAgICAgICAgIGlmICghY2hlY2tBcnJheUNsYXNzKHR5cGVJRCwgc2lnbmF0dXJlLCByZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSXNzdWUgaW52ZXN0aWdhdGluZyAiICsgc2lnbmF0dXJlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAvLyBSZXN1bWUgdGhlIGFwcC4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb21tYW5kUGFja2V0IHBhY2tldCA9IG5ldyBDb21tYW5kUGFja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgSkRXUENvbW1hbmRzLlZpcnR1YWxNYWNoaW5lQ29tbWFuZFNldC5Db21tYW5kU2V0SUQsCisgICAgICAgICAgICAgICAgICAgICAgICBKRFdQQ29tbWFuZHMuVmlydHVhbE1hY2hpbmVDb21tYW5kU2V0LlJlc3VtZUNvbW1hbmQpOworICAgICAgICAgICAgICAgIC8qIFJlcGx5UGFja2V0IHJlcGx5ID0gKi8gZGVidWdnZWVXcmFwcGVyLnZtTWlycm9yLnBlcmZvcm1Db21tYW5kKHBhY2tldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGJvb2xlYW4gY2hlY2tDbGFzcyhsb25nIHR5cGVJRCwgU3RyaW5nIHNpZ25hdHVyZSwgTWFwPFN0cmluZywgU3RyaW5nPiByZXN1bHQpIHsKKyAgICAgICAgQ29tbWFuZFBhY2tldCBwYWNrZXQgPSBuZXcgQ29tbWFuZFBhY2tldCgKKyAgICAgICAgICAgICAgICBKRFdQQ29tbWFuZHMuUmVmZXJlbmNlVHlwZUNvbW1hbmRTZXQuQ29tbWFuZFNldElELAorICAgICAgICAgICAgICAgIEpEV1BDb21tYW5kcy5SZWZlcmVuY2VUeXBlQ29tbWFuZFNldC5DbGFzc0xvYWRlckNvbW1hbmQpOworICAgICAgICBwYWNrZXQuc2V0TmV4dFZhbHVlQXNSZWZlcmVuY2VUeXBlSUQodHlwZUlEKTsKKyAgICAgICAgUmVwbHlQYWNrZXQgcmVwbHkgPSBkZWJ1Z2dlZVdyYXBwZXIudm1NaXJyb3IucGVyZm9ybUNvbW1hbmQocGFja2V0KTsKKyAgICAgICAgaWYgKHJlcGx5LmdldEVycm9yQ29kZSgpICE9IEpEV1BDb25zdGFudHMuRXJyb3IuTk9ORSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBjbGFzc0xvYWRlcklEID0gcmVwbHkuZ2V0TmV4dFZhbHVlQXNPYmplY3RJRCgpOworCisgICAgICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHRoZSBjbGFzc2xvYWRlciB0byBoYXZlIGEgYmV0dGVyIHN0cmluZz8KKyAgICAgICAgU3RyaW5nIGNsYXNzTG9hZGVyU3RyaW5nID0gKGNsYXNzTG9hZGVySUQgPT0gMCkgPyBudWxsIDogU3RyaW5nLnZhbHVlT2YoY2xhc3NMb2FkZXJJRCk7CisKKyAgICAgICAgcmVzdWx0LnB1dChnZXRDbGFzc05hbWUoc2lnbmF0dXJlKSwgY2xhc3NMb2FkZXJTdHJpbmcpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgYm9vbGVhbiBjaGVja0FycmF5Q2xhc3MobG9uZyB0eXBlSUQsIFN0cmluZyBzaWduYXR1cmUsIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVzdWx0KSB7CisgICAgICAgIC8vIENsYXNzbG9hZGVycyBvZiBhcnJheSBjbGFzc2VzIGFyZSB0aGUgc2FtZSBhcyB0aGUgY29tcG9uZW50IGNsYXNzJy4KKyAgICAgICAgQ29tbWFuZFBhY2tldCBwYWNrZXQgPSBuZXcgQ29tbWFuZFBhY2tldCgKKyAgICAgICAgICAgICAgICBKRFdQQ29tbWFuZHMuUmVmZXJlbmNlVHlwZUNvbW1hbmRTZXQuQ29tbWFuZFNldElELAorICAgICAgICAgICAgICAgIEpEV1BDb21tYW5kcy5SZWZlcmVuY2VUeXBlQ29tbWFuZFNldC5DbGFzc0xvYWRlckNvbW1hbmQpOworICAgICAgICBwYWNrZXQuc2V0TmV4dFZhbHVlQXNSZWZlcmVuY2VUeXBlSUQodHlwZUlEKTsKKyAgICAgICAgUmVwbHlQYWNrZXQgcmVwbHkgPSBkZWJ1Z2dlZVdyYXBwZXIudm1NaXJyb3IucGVyZm9ybUNvbW1hbmQocGFja2V0KTsKKyAgICAgICAgaWYgKHJlcGx5LmdldEVycm9yQ29kZSgpICE9IEpEV1BDb25zdGFudHMuRXJyb3IuTk9ORSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgbG9uZyBjbGFzc0xvYWRlcklEID0gcmVwbHkuZ2V0TmV4dFZhbHVlQXNPYmplY3RJRCgpOworCisgICAgICAgIC8vIFRPRE86IEludmVzdGlnYXRlIHRoZSBjbGFzc2xvYWRlciB0byBoYXZlIGEgYmV0dGVyIHN0cmluZz8KKyAgICAgICAgU3RyaW5nIGNsYXNzTG9hZGVyU3RyaW5nID0gKGNsYXNzTG9hZGVySUQgPT0gMCkgPyBudWxsIDogU3RyaW5nLnZhbHVlT2YoY2xhc3NMb2FkZXJJRCk7CisKKyAgICAgICAgLy8gRm9yIGFycmF5IGNsYXNzZXMsIHdlICpuZWVkKiB0aGUgc2lnbmF0dXJlIGRpcmVjdGx5LgorICAgICAgICByZXN1bHQucHV0KHNpZ25hdHVyZSwgY2xhc3NMb2FkZXJTdHJpbmcpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRDbGFzc05hbWUoU3RyaW5nIHNpZ25hdHVyZSkgeworICAgICAgICBTdHJpbmcgd2l0aG91dExBbmRTZW1pY29sb24gPSBzaWduYXR1cmUuc3Vic3RyaW5nKDEsIHNpZ25hdHVyZS5sZW5ndGgoKSAtIDEpOworICAgICAgICByZXR1cm4gd2l0aG91dExBbmRTZW1pY29sb24ucmVwbGFjZSgnLycsICcuJyk7CisgICAgfQorCisKKyAgICBwcml2YXRlIHN0YXRpYyBKUERBVGVzdE9wdGlvbnMgY3JlYXRlVGVzdE9wdGlvbnMoU3RyaW5nIGFkZHJlc3MpIHsKKyAgICAgICAgSlBEQVRlc3RPcHRpb25zIG9wdGlvbnMgPSBuZXcgSlBEQVRlc3RPcHRpb25zKCk7CisgICAgICAgIG9wdGlvbnMuc2V0QXR0YWNoQ29ubmVjdG9yS2luZCgpOworICAgICAgICBvcHRpb25zLnNldFRpbWVvdXQoMTAwMCk7CisgICAgICAgIG9wdGlvbnMuc2V0V2FpdGluZ1RpbWUoMTAwMCk7CisgICAgICAgIG9wdGlvbnMuc2V0VHJhbnNwb3J0QWRkcmVzcyhhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIG9wdGlvbnM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIEpEV1BVbml0RGVidWdnZWVXcmFwcGVyIGNyZWF0ZURlYnVnZ2VlV3JhcHBlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQcmVsb2FkRGVidWdlZVdyYXBwZXIoc2V0dGluZ3MsIGxvZ1dyaXRlcik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2pkd3AvUHJlbG9hZERlYnVnZWVXcmFwcGVyLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC9jbGFzc2RhdGFyZXRyaWV2YWwvamR3cC9QcmVsb2FkRGVidWdlZVdyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRmNmQwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvY2xhc3NkYXRhcmV0cmlldmFsL2pkd3AvUHJlbG9hZERlYnVnZWVXcmFwcGVyLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC5jbGFzc2RhdGFyZXRyaWV2YWwuamR3cDsKKworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLmZyYW1ld29yay5Mb2dXcml0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5oYXJtb255LmpwZGEudGVzdHMuamR3cC5zaGFyZS5KRFdQTWFudWFsRGVidWdnZWVXcmFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUuaGFybW9ueS5qcGRhLnRlc3RzLnNoYXJlLkpQREFUZXN0T3B0aW9uczsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CisKK3B1YmxpYyBjbGFzcyBQcmVsb2FkRGVidWdlZVdyYXBwZXIgZXh0ZW5kcyBKRFdQTWFudWFsRGVidWdnZWVXcmFwcGVyIHsKKworICAgIHB1YmxpYyBQcmVsb2FkRGVidWdlZVdyYXBwZXIoSlBEQVRlc3RPcHRpb25zIG9wdGlvbnMsIExvZ1dyaXRlciB3cml0ZXIpIHsKKyAgICAgICAgc3VwZXIob3B0aW9ucywgd3JpdGVyKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgUHJvY2VzcyBsYXVuY2hQcm9jZXNzKFN0cmluZyBjbWRMaW5lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBXYWl0Rm9yUHJvY2Vzc0V4aXQoUHJvY2VzcyBwcm9jZXNzKSB7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC91aS9OdWxsUHJvZ3Jlc3NNb25pdG9yLmphdmEgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC91aS9OdWxsUHJvZ3Jlc3NNb25pdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ1YWFkMDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wcmVsb2FkMi9zcmMvY29tL2FuZHJvaWQvcHJlbG9hZC91aS9OdWxsUHJvZ3Jlc3NNb25pdG9yLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgY29tLmFuZHJvaWQucHJlbG9hZC51aTsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5TeW5jU2VydmljZS5JU3luY1Byb2dyZXNzTW9uaXRvcjsKKworcHVibGljIGNsYXNzIE51bGxQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJU3luY1Byb2dyZXNzTW9uaXRvciB7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhZHZhbmNlKGludCBhcmcwKSB7fQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4gaXNDYW5jZWxlZCgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHN0YXJ0KGludCBhcmcwKSB7fQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RhcnRTdWJUYXNrKFN0cmluZyBhcmcwKSB7fQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcHJlbG9hZDIvc3JjL2NvbS9hbmRyb2lkL3ByZWxvYWQvdWkvVUkuamF2YSBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL3VpL1VJLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxNzRkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3ByZWxvYWQyL3NyYy9jb20vYW5kcm9pZC9wcmVsb2FkL3VpL1VJLmphdmEKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGNvbS5hbmRyb2lkLnByZWxvYWQudWk7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5kZG1saWIuQ2xpZW50OworaW1wb3J0IGNvbS5hbmRyb2lkLmRkbWxpYi5DbGllbnREYXRhOworCitpbXBvcnQgamF2YS5hd3QuQm9yZGVyTGF5b3V0OworaW1wb3J0IGphdmEuYXd0LkNvbXBvbmVudDsKK2ltcG9ydCBqYXZhLmF3dC5EaW1lbnNpb247CitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXguc3dpbmcuQWN0aW9uOworaW1wb3J0IGphdmF4LnN3aW5nLkRlZmF1bHRMaXN0Q2VsbFJlbmRlcmVyOworaW1wb3J0IGphdmF4LnN3aW5nLkpEaWFsb2c7CitpbXBvcnQgamF2YXguc3dpbmcuSkZpbGVDaG9vc2VyOworaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKK2ltcG9ydCBqYXZheC5zd2luZy5KTGFiZWw7CitpbXBvcnQgamF2YXguc3dpbmcuSkxpc3Q7CitpbXBvcnQgamF2YXguc3dpbmcuSk9wdGlvblBhbmU7CitpbXBvcnQgamF2YXguc3dpbmcuSlByb2dyZXNzQmFyOworaW1wb3J0IGphdmF4LnN3aW5nLkpTY3JvbGxQYW5lOworaW1wb3J0IGphdmF4LnN3aW5nLkpUYWJsZTsKK2ltcG9ydCBqYXZheC5zd2luZy5KVG9vbEJhcjsKK2ltcG9ydCBqYXZheC5zd2luZy5MaXN0TW9kZWw7CitpbXBvcnQgamF2YXguc3dpbmcuU3dpbmdVdGlsaXRpZXM7CitpbXBvcnQgamF2YXguc3dpbmcudGFibGUuVGFibGVNb2RlbDsKKworcHVibGljIGNsYXNzIFVJIGV4dGVuZHMgSkZyYW1lIHsKKworICAgIHByaXZhdGUgSkxpc3Q8Q2xpZW50PiBjbGllbnRMaXN0OworICAgIHByaXZhdGUgSlRhYmxlIGRhdGFUYWJsZTsKKworICAgIC8vIFNoYXJlZCBmaWxlIGNob29zZXIsIG1lYW5zIHRoZSBkaXJlY3RvcnkgaXMgcmV0YWluZWQuCisgICAgcHJpdmF0ZSBKRmlsZUNob29zZXIgamZjOworCisgICAgcHVibGljIFVJKExpc3RNb2RlbDxDbGllbnQ+IGNsaWVudExpc3RNb2RlbCwKKyAgICAgICAgICAgICAgVGFibGVNb2RlbCBkYXRhVGFibGVNb2RlbCwKKyAgICAgICAgICAgICAgTGlzdDxBY3Rpb24+IGFjdGlvbnMpIHsKKyAgICAgICAgc3VwZXIoIlByZWxvYWRlZC1jbGFzc2VzIGNvbXB1dGF0aW9uIik7CisKKyAgICAgICAgZ2V0Q29udGVudFBhbmUoKS5hZGQobmV3IEpTY3JvbGxQYW5lKGNsaWVudExpc3QgPSBuZXcgSkxpc3Q8Q2xpZW50PihjbGllbnRMaXN0TW9kZWwpKSwKKyAgICAgICAgICAgICAgICBCb3JkZXJMYXlvdXQuV0VTVCk7CisgICAgICAgIGNsaWVudExpc3Quc2V0Q2VsbFJlbmRlcmVyKG5ldyBDbGllbnRMaXN0Q2VsbFJlbmRlcmVyKCkpOworICAgICAgICAvLyBjbGllbnRMaXN0LmFkZExpc3RTZWxlY3Rpb25MaXN0ZW5lcihsaXN0ZW5lcik7CisKKyAgICAgICAgZGF0YVRhYmxlID0gbmV3IEpUYWJsZShkYXRhVGFibGVNb2RlbCk7CisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuYWRkKG5ldyBKU2Nyb2xsUGFuZShkYXRhVGFibGUpLCBCb3JkZXJMYXlvdXQuQ0VOVEVSKTsKKworICAgICAgICBKVG9vbEJhciB0b29sYmFyID0gbmV3IEpUb29sQmFyKEpUb29sQmFyLkhPUklaT05UQUwpOworICAgICAgICBmb3IgKEFjdGlvbiBhIDogYWN0aW9ucykgeworICAgICAgICAgICAgaWYgKGEgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHRvb2xiYXIuYWRkU2VwYXJhdG9yKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRvb2xiYXIuYWRkKGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdldENvbnRlbnRQYW5lKCkuYWRkKHRvb2xiYXIsIEJvcmRlckxheW91dC5QQUdFX1NUQVJUKTsKKworICAgICAgICBzZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkVYSVRfT05fQ0xPU0UpOworICAgICAgICBzZXRCb3VuZHMoMTAwLCAxMDAsIDgwMCwgNjAwKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xpZW50IGdldFNlbGVjdGVkQ2xpZW50KCkgeworICAgICAgICByZXR1cm4gY2xpZW50TGlzdC5nZXRTZWxlY3RlZFZhbHVlKCk7CisgICAgfQorCisgICAgcHVibGljIGludCBnZXRTZWxlY3RlZERhdGFUYWJsZVJvdygpIHsKKyAgICAgICAgcmV0dXJuIGRhdGFUYWJsZS5nZXRTZWxlY3RlZFJvdygpOworICAgIH0KKworICAgIHByaXZhdGUgSkRpYWxvZyBjdXJyZW50V2FpdERpYWxvZyA9IG51bGw7CisKKyAgICBwdWJsaWMgdm9pZCBzaG93V2FpdERpYWxvZygpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nID09IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nID0gbmV3IEpEaWFsb2codGhpcywgIlBsZWFzZSB3YWl0Li4uIiwgdHJ1ZSk7CisgICAgICAgICAgICBjdXJyZW50V2FpdERpYWxvZy5nZXRDb250ZW50UGFuZSgpLmFkZChuZXcgSkxhYmVsKCJQbGVhc2UgYmUgcGF0aWVudC4iKSwKKyAgICAgICAgICAgICAgICAgICAgQm9yZGVyTGF5b3V0LkNFTlRFUik7CisgICAgICAgICAgICBKUHJvZ3Jlc3NCYXIgcHJvZ3Jlc3MgPSBuZXcgSlByb2dyZXNzQmFyKEpQcm9ncmVzc0Jhci5IT1JJWk9OVEFMKTsKKyAgICAgICAgICAgIHByb2dyZXNzLnNldEluZGV0ZXJtaW5hdGUodHJ1ZSk7CisgICAgICAgICAgICBjdXJyZW50V2FpdERpYWxvZy5nZXRDb250ZW50UGFuZSgpLmFkZChwcm9ncmVzcywgQm9yZGVyTGF5b3V0LlNPVVRIKTsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFNpemUoMjAwLCAxMDApOworICAgICAgICAgICAgY3VycmVudFdhaXREaWFsb2cuc2V0TG9jYXRpb25SZWxhdGl2ZVRvKG51bGwpOworICAgICAgICAgICAgc2hvd1dhaXREaWFsb2dMYXRlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIHNob3dXYWl0RGlhbG9nTGF0ZXIoKSB7CisgICAgICAgIFN3aW5nVXRpbGl0aWVzLmludm9rZUxhdGVyKG5ldyBSdW5uYWJsZSgpIHsKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50V2FpdERpYWxvZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUodHJ1ZSk7IC8vIFRoaXMgaXMgYmxvY2tpbmcuCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB1cGRhdGVXYWl0RGlhbG9nKFN0cmluZyBzKSB7CisgICAgICAgIGlmIChjdXJyZW50V2FpdERpYWxvZyAhPSBudWxsKSB7CisgICAgICAgICAgICAoKEpMYWJlbCkgY3VycmVudFdhaXREaWFsb2cuZ2V0Q29udGVudFBhbmUoKS5nZXRDb21wb25lbnQoMCkpLnNldFRleHQocyk7CisgICAgICAgICAgICBEaW1lbnNpb24gcHJlZlNpemUgPSBjdXJyZW50V2FpdERpYWxvZy5nZXRQcmVmZXJyZWRTaXplKCk7CisgICAgICAgICAgICBEaW1lbnNpb24gY3VyU2l6ZSA9IGN1cnJlbnRXYWl0RGlhbG9nLmdldFNpemUoKTsKKyAgICAgICAgICAgIGlmIChwcmVmU2l6ZS53aWR0aCA+IGN1clNpemUud2lkdGggfHwgcHJlZlNpemUuaGVpZ2h0ID4gY3VyU2l6ZS5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50V2FpdERpYWxvZy5zZXRTaXplKE1hdGgubWF4KHByZWZTaXplLndpZHRoLCBjdXJTaXplLndpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHByZWZTaXplLmhlaWdodCwgY3VyU2l6ZS5oZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50V2FpdERpYWxvZy5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBoaWRlV2FpdERpYWxvZygpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICAgICAgY3VycmVudFdhaXREaWFsb2cgPSBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2hvd01lc3NhZ2VEaWFsb2coU3RyaW5nIHMpIHsKKyAgICAgICAgLy8gSGlkZSB0aGUgd2FpdCBkaWFsb2cuLi4KKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKHRoaXMsIHMpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgLy8gQW5kIHJlc2hvdyBpdCBhZnRlcndhcmRzLi4uCisgICAgICAgICAgICBpZiAoY3VycmVudFdhaXREaWFsb2cgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNob3dXYWl0RGlhbG9nTGF0ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHNob3dDb25maXJtRGlhbG9nKFN0cmluZyB0aXRsZSwgU3RyaW5nIG1lc3NhZ2UpIHsKKyAgICAgICAgLy8gSGlkZSB0aGUgd2FpdCBkaWFsb2cuLi4KKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBKT3B0aW9uUGFuZS5zaG93Q29uZmlybURpYWxvZyh0aGlzLCB0aXRsZSwgbWVzc2FnZSwgSk9wdGlvblBhbmUuWUVTX05PX09QVElPTikKKyAgICAgICAgICAgICAgICAgICAgPT0gSk9wdGlvblBhbmUuWUVTX09QVElPTjsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIEFuZCByZXNob3cgaXQgYWZ0ZXJ3YXJkcy4uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzaG93V2FpdERpYWxvZ0xhdGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHNob3dJbnB1dERpYWxvZyhTdHJpbmcgbWVzc2FnZSkgeworICAgICAgICAvLyBIaWRlIHRoZSB3YWl0IGRpYWxvZy4uLgorICAgICAgICBpZiAoY3VycmVudFdhaXREaWFsb2cgIT0gbnVsbCkgeworICAgICAgICAgICAgY3VycmVudFdhaXREaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIEpPcHRpb25QYW5lLnNob3dJbnB1dERpYWxvZyhtZXNzYWdlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIEFuZCByZXNob3cgaXQgYWZ0ZXJ3YXJkcy4uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzaG93V2FpdERpYWxvZ0xhdGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBwdWJsaWMgPFQ+IFQgc2hvd0Nob2ljZURpYWxvZyhTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlLCBUW10gY2hvaWNlcykgeworICAgICAgICAvLyBIaWRlIHRoZSB3YWl0IGRpYWxvZy4uLgorICAgICAgICBpZiAoY3VycmVudFdhaXREaWFsb2cgIT0gbnVsbCkgeworICAgICAgICAgICAgY3VycmVudFdhaXREaWFsb2cuc2V0VmlzaWJsZShmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICB0cnl7CisgICAgICAgICAgICByZXR1cm4gKFQpSk9wdGlvblBhbmUuc2hvd0lucHV0RGlhbG9nKHRoaXMsCisgICAgICAgICAgICAgICAgICAgIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICBKT3B0aW9uUGFuZS5RVUVTVElPTl9NRVNTQUdFLAorICAgICAgICAgICAgICAgICAgICBudWxsLAorICAgICAgICAgICAgICAgICAgICBjaG9pY2VzLAorICAgICAgICAgICAgICAgICAgICBjaG9pY2VzWzBdKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIEFuZCByZXNob3cgaXQgYWZ0ZXJ3YXJkcy4uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzaG93V2FpdERpYWxvZ0xhdGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgRmlsZSBzaG93U2F2ZURpYWxvZygpIHsKKyAgICAgICAgLy8gSGlkZSB0aGUgd2FpdCBkaWFsb2cuLi4KKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgaWYgKGpmYyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgamZjID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgcmV0ID0gamZjLnNob3dTYXZlRGlhbG9nKHRoaXMpOworICAgICAgICAgICAgaWYgKHJldCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gamZjLmdldFNlbGVjdGVkRmlsZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIEFuZCByZXNob3cgaXQgYWZ0ZXJ3YXJkcy4uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzaG93V2FpdERpYWxvZ0xhdGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgRmlsZVtdIHNob3dPcGVuRGlhbG9nKGJvb2xlYW4gbXVsdGkpIHsKKyAgICAgICAgLy8gSGlkZSB0aGUgd2FpdCBkaWFsb2cuLi4KKyAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgIGN1cnJlbnRXYWl0RGlhbG9nLnNldFZpc2libGUoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgdHJ5eworICAgICAgICAgICAgaWYgKGpmYyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgamZjID0gbmV3IEpGaWxlQ2hvb3NlcigpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqZmMuc2V0TXVsdGlTZWxlY3Rpb25FbmFibGVkKG11bHRpKTsKKyAgICAgICAgICAgIGludCByZXQgPSBqZmMuc2hvd09wZW5EaWFsb2codGhpcyk7CisgICAgICAgICAgICBpZiAocmV0ID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworICAgICAgICAgICAgICAgIHJldHVybiBqZmMuZ2V0U2VsZWN0ZWRGaWxlcygpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIC8vIEFuZCByZXNob3cgaXQgYWZ0ZXJ3YXJkcy4uLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRXYWl0RGlhbG9nICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBzaG93V2FpdERpYWxvZ0xhdGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIGNsYXNzIENsaWVudExpc3RDZWxsUmVuZGVyZXIgZXh0ZW5kcyBEZWZhdWx0TGlzdENlbGxSZW5kZXJlciB7CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBDb21wb25lbnQgZ2V0TGlzdENlbGxSZW5kZXJlckNvbXBvbmVudChKTGlzdDw/PiBsaXN0LCBPYmplY3QgdmFsdWUsIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICBib29sZWFuIGlzU2VsZWN0ZWQsIGJvb2xlYW4gY2VsbEhhc0ZvY3VzKSB7CisgICAgICAgICAgICBDbGllbnREYXRhIGNkID0gKChDbGllbnQpIHZhbHVlKS5nZXRDbGllbnREYXRhKCk7CisgICAgICAgICAgICBTdHJpbmcgcyA9IGNkLmdldENsaWVudERlc2NyaXB0aW9uKCkgKyAiIChwaWQgIiArIGNkLmdldFBpZCgpICsgIikiOworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldExpc3RDZWxsUmVuZGVyZXJDb21wb25lbnQobGlzdCwgcywgaW5kZXgsIGlzU2VsZWN0ZWQsIGNlbGxIYXNGb2N1cyk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU2Nhbm5lci5qYXZhIGIvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvV2lmaVNjYW5uZXIuamF2YQppbmRleCA1NTM0Y2FkLi43NmM2NzljIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9XaWZpU2Nhbm5lci5qYXZhCisrKyBiL3dpZmkvamF2YS9hbmRyb2lkL25ldC93aWZpL1dpZmlTY2FubmVyLmphdmEKQEAgLTE3MCwxOCArMTcwLDE0IEBACiAgICAgICAgIHB1YmxpYyBpbnQgbWF4U2NhbnNUb0NhY2hlOwogICAgICAgICAvKioKICAgICAgICAgICogaWYgbWF4UGVyaW9kSW5NcyBpcyBub24gemVybyBvciBkaWZmZXJlbnQgdGhhbiBwZXJpb2QsIHRoZW4gdGhpcyBidWNrZXQgaXMKLSAgICAgICAgICogYW4gZXhwb25lbnRpYWwgYmFja29mZiBidWNrZXQgYW5kIHRoZSBzY2FuIHBlcmlvZCB3aWxsIGdyb3cgZXhwb25lbnRpYWxseQotICAgICAgICAgKiBhcyBwZXIgZm9ybXVsYTogYWN0dWFsX3BlcmlvZChOKSA9IHBlcmlvZCBeIChOLyhzdGVwX2NvdW50KzEpKQotICAgICAgICAgKiB0byBhIG1heGltdW0gcGVyaW9kIG9mIG1heF9wZXJpb2QuCisgICAgICAgICAqIGEgdHJ1bmNhdGVkIGJpbmFyeSBleHBvbmVudGlhbCBiYWNrb2ZmIGJ1Y2tldCBhbmQgdGhlIHNjYW4gcGVyaW9kIHdpbGwgZ3JvdworICAgICAgICAgKiBleHBvbmVudGlhbGx5IGFzIHBlciBmb3JtdWxhOiBhY3R1YWxfcGVyaW9kKE4pID0gcGVyaW9kICogKDIgXiAoTi9zdGVwQ291bnQpKQorICAgICAgICAgKiB0byBtYXhQZXJpb2RJbk1zCiAgICAgICAgICAqLwogICAgICAgICBwdWJsaWMgaW50IG1heFBlcmlvZEluTXM7CiAgICAgICAgIC8qKgotICAgICAgICAgKiBmb3IgZXhwb25lbnRpYWwgYmFjayBvZmYgYnVja2V0OiBtdWx0aXBsaWVyOiBuZXdfcGVyaW9kPW9sZF9wZXJpb2QqZXhwb25lbnQKLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgZXhwb25lbnQ7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBmb3IgZXhwb25lbnRpYWwgYmFjayBvZmYgYnVja2V0LCBudW1iZXIgb2Ygc2NhbnMgcGVyZm9ybWVkIGF0IGEgZ2l2ZW4KLSAgICAgICAgICogcGVyaW9kIGFuZCB1bnRpbCB0aGUgZXhwb25lbnQgaXMgYXBwbGllZAorICAgICAgICAgKiBmb3IgdHJ1bmNhdGVkIGJpbmFyeSBleHBvbmVudGlhbCBiYWNrIG9mZiBidWNrZXQsIG51bWJlciBvZiBzY2FucyB0byBwZXJmb3JtCisgICAgICAgICAqIGZvciBhIGdpdmVuIHBlcmlvZAogICAgICAgICAgKi8KICAgICAgICAgcHVibGljIGludCBzdGVwQ291bnQ7CiAKQEAgLTE5OCw3ICsxOTQsNiBAQAogICAgICAgICAgICAgZGVzdC53cml0ZUludChudW1Cc3NpZHNQZXJTY2FuKTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4U2NhbnNUb0NhY2hlKTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQobWF4UGVyaW9kSW5Ncyk7Ci0gICAgICAgICAgICBkZXN0LndyaXRlSW50KGV4cG9uZW50KTsKICAgICAgICAgICAgIGRlc3Qud3JpdGVJbnQoc3RlcENvdW50KTsKIAogICAgICAgICAgICAgaWYgKGNoYW5uZWxzICE9IG51bGwpIHsKQEAgLTIyNiw3ICsyMjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MubnVtQnNzaWRzUGVyU2NhbiA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFNjYW5zVG9DYWNoZSA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm1heFBlcmlvZEluTXMgPSBpbi5yZWFkSW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5leHBvbmVudCA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnN0ZXBDb3VudCA9IGluLnJlYWRJbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fY2hhbm5lbHMgPSBpbi5yZWFkSW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jaGFubmVscyA9IG5ldyBDaGFubmVsU3BlY1tudW1fY2hhbm5lbHNdOwpkaWZmIC0tZ2l0IGEvd2lmaS9qYXZhL2FuZHJvaWQvbmV0L3dpZmkvcDJwL25zZC9XaWZpUDJwU2VydmljZVJlc3BvbnNlLmphdmEgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVzcG9uc2UuamF2YQppbmRleCAwZGRmYTc3Li5hMGI1YTZlIDEwMDY0NAotLS0gYS93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVzcG9uc2UuamF2YQorKysgYi93aWZpL2phdmEvYW5kcm9pZC9uZXQvd2lmaS9wMnAvbnNkL1dpZmlQMnBTZXJ2aWNlUmVzcG9uc2UuamF2YQpAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgICAgIHNidWYuYXBwZW5kKCJzZXJ2aWNlVHlwZToiKS5hcHBlbmQobVNlcnZpY2VUeXBlKTsKICAgICAgICAgc2J1Zi5hcHBlbmQoIiBzdGF0dXM6IikuYXBwZW5kKFN0YXR1cy50b1N0cmluZyhtU3RhdHVzKSk7CiAgICAgICAgIHNidWYuYXBwZW5kKCIgc3JjQWRkcjoiKS5hcHBlbmQobURldmljZS5kZXZpY2VBZGRyZXNzKTsKLSAgICAgICAgc2J1Zi5hcHBlbmQoIiBkYXRhOiIpLmFwcGVuZChtRGF0YSk7CisgICAgICAgIHNidWYuYXBwZW5kKCIgZGF0YToiKS5hcHBlbmQoQXJyYXlzLnRvU3RyaW5nKG1EYXRhKSk7CiAgICAgICAgIHJldHVybiBzYnVmLnRvU3RyaW5nKCk7CiAgICAgfQogCg==